diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index a4fc5b7b4f111296f4ae1ddcf5dad2cc2a74fa22..c18ac045c07272ad7696881ee9664adfcad0baf2 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -22,7 +22,6 @@ src/SPIN/* @julient31 src/USER-CGDNA/* @ohenrich src/USER-CGSDK/* @akohlmey src/USER-COLVARS/* @giacomofiorin -src/USER-DPD/* @timattox src/USER-INTEL/* @wmbrownintel src/USER-MANIFOLD/* @Pakketeretet2 src/USER-MEAMC/* @martok @@ -46,7 +45,7 @@ src/GPU/pair_vashishta_gpu.* @andeplane src/KOKKOS/pair_vashishta_kokkos.* @andeplane src/MANYBODY/pair_vashishta_table.* @andeplane src/MANYBODY/pair_atm.* @sergeylishchuk -src/USER-MISC/fix_bond_react.* @jrgissing +src/USER-REACTION/fix_bond_react.* @jrgissing src/USER-MISC/*_grem.* @dstelter92 src/USER-MISC/compute_stress_mop*.* @RomainVermorel @@ -116,9 +115,14 @@ src/min* @sjplimp @stanmoore1 # tools tools/msi2lmp/* @akohlmey tools/emacs/* @HaoZeke +tools/singularity/* @akohlmey @rbberger + +# tests +unittest/* @akohlmey @rbberger # cmake cmake/* @junghans @rbberger +cmake/Modules/Packages/USER-COLVARS.cmake @junghans @rbberger @giacomofiorin # python python/* @rbberger diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md index 91b7e2bf4893f3848a5b643135301881915beaee..0d1d3b036419b5e80963d9eff2bf2ce3631a9a2c 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.md +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -9,24 +9,24 @@ assignees: '' **Summary** -_Please provide a clear and concise description of what the bug is._ + **LAMMPS Version and Platform** -_Please specify precisely which LAMMPS version this issue was detected with (the first line of the output) and what platform (operating system and its version, hardware) you are running on. If possible, test with the most recent LAMMPS patch version_ + **Expected Behavior** -_Describe the expected behavior. Quote from the LAMMPS manual where needed, or explain why the expected behavior is meaningful, especially when it differs from the manual_ + **Actual Behavior** -_Describe the actual behavior, how it differs from the expected behavior, and how this can be observed. Try to be specific and do **not** use vague terms like "doesn't work" or "wrong result". Do not assume that the person reading this has any experience with or knowledge of your specific area of research._ + **Steps to Reproduce** -_Describe the steps required to (quickly) reproduce the issue. You can attach (small) files to the section below or add URLs where to download an archive with all necessary files. Please try to create an input set that is as minimal and small as possible and reproduces the bug as quickly as possible. **NOTE:** the less effort and time it takes to reproduce your reported bug, the more likely it becomes, that somebody will look into it and fix the problem._ + **Further Information, Files, and Links** -_Put any additional information here, attach relevant text or image files and URLs to external sites, e.g. relevant publications_ + diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md index a3a70c0d5a5237f643d7b14dc95bd534d64ba6b0..0334e086fc9e1309ca13bdf18a9fce2ca81900a8 100644 --- a/.github/ISSUE_TEMPLATE/feature_request.md +++ b/.github/ISSUE_TEMPLATE/feature_request.md @@ -9,12 +9,12 @@ assignees: '' **Summary** -_Please provide a brief and concise description of the suggested feature or change_ + **Detailed Description** -_Please explain how you would like to see LAMMPS enhanced, what feature(s) you are looking for, what specific problems this will solve. If possible, provide references to relevant background information like publications or web pages, and whether you are planning to implement the enhancement yourself or would like to participate in the implementation. If applicable add a reference to an existing bug report or issue that this will address._ + **Further Information, Files, and Links** -_Put any additional information here, attach relevant text or image files and URLs to external sites, e.g. relevant publications_ + diff --git a/.github/ISSUE_TEMPLATE/generic.md b/.github/ISSUE_TEMPLATE/generic.md index 15d2763919fdc531040b3110eec19832720c09dd..9e5d908bbc283da20d6665b1e804204483459727 100644 --- a/.github/ISSUE_TEMPLATE/generic.md +++ b/.github/ISSUE_TEMPLATE/generic.md @@ -9,13 +9,13 @@ assignees: '' **Summary** -_Please provide a clear and concise description of what this issue report is about._ + **LAMMPS Version and Platform** -_Please specify precisely which LAMMPS version this issue was detected with (the first line of the output) and what platform (operating system and its version, hardware) you are running on. If possible, test with the most recent LAMMPS patch version_ + **Details** -_Please explain the issue in detail here_ + diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index 9e43aa024440acc0557054f75e991aaf724c7171..6ef945d8d480edc99eb123a3a8634ddc5ee833f6 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -1,14 +1,14 @@ **Summary** -_Briefly describe the new feature(s), enhancement(s), or bugfix(es) included in this pull request._ + **Related Issues** -_If this addresses an open GitHub issue for this project, please mention the issue number here, and describe the relation. Use the phrases `fixes #221` or `closes #135`, when you want an issue to be automatically closed when the pull request is merged_ + **Author(s)** -_Please state name and affiliation of the author or authors that should be credited with the changes in this pull request. If this pull request adds new files to the distribution, please also provide a suitable "long-lived" e-mail address (ideally something that can outlive your institution's e-mail, in case you change jobs) for the *corresponding* author, i.e. the person the LAMMPS developers can contact directly with questions and requests related to maintenance and support of this contributed code._ + **Licensing** @@ -16,15 +16,15 @@ By submitting this pull request, I agree, that my contribution will be included **Backward Compatibility** -_Please state whether any changes in the pull request will break backward compatibility for inputs, and - if yes - explain what has been changed and why_ + **Implementation Notes** -_Provide any relevant details about how the changes are implemented, how correctness was verified, how other features - if any - in LAMMPS are affected_ + **Post Submission Checklist** -_Please check the fields below as they are completed **after** the pull request has been submitted. Delete lines that don't apply_ + - [ ] The feature or features in this pull request is complete - [ ] Licensing information is complete @@ -39,6 +39,6 @@ _Please check the fields below as they are completed **after** the pull request **Further Information, Files, and Links** -_Put any additional information here, attach relevant text or image files, and URLs to external sites (e.g. DOIs or webpages)_ + diff --git a/.github/PULL_REQUEST_TEMPLATE/bug_fix.md b/.github/PULL_REQUEST_TEMPLATE/bug_fix.md index cea04c68735160a1357446dd05772f9b83f2b397..a5a0b8c489843399dac6f16540bb29c6e65f19f5 100644 --- a/.github/PULL_REQUEST_TEMPLATE/bug_fix.md +++ b/.github/PULL_REQUEST_TEMPLATE/bug_fix.md @@ -9,15 +9,15 @@ assignees: '' **Summary** -_Briefly describe the bug or bugs, that are eliminated by this pull request._ + **Related Issue(s)** -_If this request addresses or is related to an existing (open) GitHub issue, e.g. a bug report, mention the issue number number here following a pound sign (aka hashmark), e.g.`#222`._ + **Author(s)** -_Please state name and affiliation of the author or authors that should be credited with the changes in this pull request_ + **Licensing** @@ -25,18 +25,18 @@ By submitting this pull request I implicitly accept, that my submission is subje **Backward Compatibility** -_Please state whether any changes in the pull request break backward compatibility for inputs, and - if yes - explain what has been changed and why_ + **Detailed Description** -_Provide any relevant details about how the fixed bug can be reproduced, how the changes are implemented, how correctness was verified, how other features - if any - in LAMMPS are affected_ + ## Post Submission Checklist -_Please check the fields below as they are completed *after* the pull request is submitted_ + - [ ] The code in this pull request is complete - [ ] The source code follows the LAMMPS formatting guidelines ## Further Information, Files, and Links -_Put any additional information here, attach relevant text or image files, and URLs to external sites (e.g. to download input decks for testing)_ + diff --git a/.github/PULL_REQUEST_TEMPLATE/maintenance_refactoring.md b/.github/PULL_REQUEST_TEMPLATE/maintenance_refactoring.md index b3599cb36d5c62f23a020687db7f20531ce6b4a4..b7bf40a1e87b893f4db58e833a7cf8cc97eaba17 100644 --- a/.github/PULL_REQUEST_TEMPLATE/maintenance_refactoring.md +++ b/.github/PULL_REQUEST_TEMPLATE/maintenance_refactoring.md @@ -9,15 +9,15 @@ assignees: '' **Summary** -_Briefly describe the included changes._ + **Related Issue(s)** -_If this request addresses or is related to an existing (open) GitHub issue, e.g. a bug report, mention the issue number number here following a pound sign (aka hashmark), e.g.`#222`. + **Licensing** @@ -25,11 +25,11 @@ By submitting this pull request I implicitly accept, that my submission is subje **Detailed Description** -_Provide any relevant details about the included changes._ + ## Post Submission Checklist -_Please check the fields below as they are completed *after* the pull request is submitted_ + - [ ] The pull request is complete - [ ] The source code follows the LAMMPS formatting guidelines diff --git a/.github/PULL_REQUEST_TEMPLATE/new_feature.md b/.github/PULL_REQUEST_TEMPLATE/new_feature.md index e9d16a0fc7fff973034c4edce0c41c5818ae9ad7..563a9be4aad9651b7a88cae94a9e0806e48900c5 100644 --- a/.github/PULL_REQUEST_TEMPLATE/new_feature.md +++ b/.github/PULL_REQUEST_TEMPLATE/new_feature.md @@ -9,34 +9,34 @@ assignees: '' **Summary** -_Briefly describe the new feature(s) included in this pull request._ + **Related Issues** -_If this addresses an existing (open) GitHub issue, e.g. a feature request, mention the issue number here following a pound sign (aka hashmark), e.g. `#331`._ + **Author(s)** -_Please state name and affiliation of the author or authors that should be credited with the features added in this pull request. Please provide a suitable "long-lived" e-mail address (e.g. from gmail, yahoo, outlook, etc.) for the *corresponding* author, i.e. the person the LAMMPS developers can contact directly with questions and requests related to maintenance and support of this code. now and in the future_ + **Licensing** -_Please add *yes* or *no* to the following two statements (please contact @lammps/core if you have questions about this)_ + My contribution may be licensed as GPL v2 (default LAMMPS license): My contribution may be licensed as LGPL (for use as a library with proprietary software): **Backward Compatibility** -_Please state if any of the changes in this pull request will affect backward compatibility for inputs, and - if yes - explain what has been changed and why_ + **Implementation Notes** -_Provide any relevant details about how the new features are implemented, how correctness was verified, what platforms (OS, compiler, MPI, hardware, number of processors, accelerator(s)) it was tested on_ + ## Post Submission Checklist -_Please check the fields below as they are completed *after* the pull request has been submitted_ + - [ ] The feature or features in this pull request is complete - [ ] Licensing information is complete @@ -51,6 +51,6 @@ _Please check the fields below as they are completed *after* the pull request ha ## Further Information, Files, and Links -_Put any additional information here, attach relevant text or image files, and URLs to external sites (e.g. DOIs or webpages)_ + diff --git a/.github/PULL_REQUEST_TEMPLATE/update_enhancement.md b/.github/PULL_REQUEST_TEMPLATE/update_enhancement.md index 52ef91e6c10909afe74c89a04fb390459267b955..9edfb587c04470dfa00bf0a63ad127e6944b2f92 100644 --- a/.github/PULL_REQUEST_TEMPLATE/update_enhancement.md +++ b/.github/PULL_REQUEST_TEMPLATE/update_enhancement.md @@ -9,11 +9,11 @@ assignees: '' **Summary** -_Briefly describe what kind of updates or enhancements for a package or feature are included. If you are not the original author of the package or feature, please mention, whether your contribution was created independently or in collaboration/cooperation with the original author._ + **Author(s)** -_Please state name and affiliation of the author or authors that should be credited with the changes in this pull request_ + **Licensing** @@ -21,15 +21,15 @@ By submitting this pull request I implicitly accept, that my submission is subje **Backward Compatibility** -_Please state whether any changes in the pull request break backward compatibility for inputs, and - if yes - explain what has been changed and why_ + **Implementation Notes** -_Provide any relevant details about how the changes are implemented, how correctness was verified, how other features - if any - in LAMMPS are affected_ + **Post Submission Checklist** -_Please check the fields below as they are completed_ + - [ ] The feature or features in this pull request is complete - [ ] Suitable updates to the existing docs are included - [ ] One or more example input decks are included @@ -37,6 +37,6 @@ _Please check the fields below as they are completed_ **Further Information, Files, and Links** -_Put any additional information here, attach relevant text or image files, and URLs to external sites (e.g. DOIs or webpages)_ + diff --git a/.gitignore b/.gitignore index 52b8212b139460f02ecbce157ad6818206c71693..5c90b0f39c11771629f97608e916077b46999ffe 100644 --- a/.gitignore +++ b/.gitignore @@ -9,6 +9,7 @@ *.d *.x *.exe +*.sif *.dll *.pyc __pycache__ diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index 36bed2d649b0d29a155d2c3e6e829b378c6b3b11..f0c05f8b1af451c407ae21a446f82b50794ade03 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -3,16 +3,24 @@ # This file is part of LAMMPS # Created by Christoph Junghans and Richard Berger cmake_minimum_required(VERSION 3.10) +# set policy to silence warnings about ignoring _ROOT but use it +if(POLICY CMP0074) + cmake_policy(SET CMP0074 NEW) +endif() +######################################## project(lammps CXX) set(SOVERSION 0) -get_filename_component(LAMMPS_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../src ABSOLUTE) -get_filename_component(LAMMPS_LIB_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../lib ABSOLUTE) + +get_filename_component(LAMMPS_DIR ${CMAKE_CURRENT_SOURCE_DIR}/.. ABSOLUTE) get_filename_component(LAMMPS_LIB_BINARY_DIR ${CMAKE_BINARY_DIR}/lib ABSOLUTE) -get_filename_component(LAMMPS_DOC_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../doc ABSOLUTE) -get_filename_component(LAMMPS_TOOLS_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../tools ABSOLUTE) -get_filename_component(LAMMPS_PYTHON_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../python ABSOLUTE) -get_filename_component(LAMMPS_POTENTIALS_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../potentials ABSOLUTE) + +set(LAMMPS_SOURCE_DIR ${LAMMPS_DIR}/src) +set(LAMMPS_LIB_SOURCE_DIR ${LAMMPS_DIR}/lib) +set(LAMMPS_DOC_DIR ${LAMMPS_DIR}/doc) +set(LAMMPS_TOOLS_DIR ${LAMMPS_DIR}/tools) +set(LAMMPS_PYTHON_DIR ${LAMMPS_DIR}/python) +set(LAMMPS_POTENTIALS_DIR ${LAMMPS_DIR}/potentials) find_package(Git) @@ -21,17 +29,12 @@ if (CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT) set(CMAKE_INSTALL_PREFIX "$ENV{HOME}/.local" CACHE PATH "default install path" FORCE ) endif() -# To avoid conflicts with the conventional Makefile build system, we build everything here -file(GLOB LIB_SOURCES ${LAMMPS_SOURCE_DIR}/[^.]*.cpp) -file(GLOB LMP_SOURCES ${LAMMPS_SOURCE_DIR}/main.cpp) -list(REMOVE_ITEM LIB_SOURCES ${LMP_SOURCES}) - # Cmake modules/macros are in a subdirectory to keep this file cleaner set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/Modules) include(LAMMPSUtils) -get_lammps_version(${LAMMPS_SOURCE_DIR}/version.h LAMMPS_VERSION) +get_lammps_version(${LAMMPS_SOURCE_DIR}/version.h PROJECT_VERSION) include(PreventInSourceBuilds) @@ -62,16 +65,17 @@ if(${CMAKE_CXX_COMPILER_ID} STREQUAL "Intel") endif() if(${CMAKE_CXX_COMPILER_ID} STREQUAL "GNU") - set(CMAKE_TUNE_DEFAULT "-ffast-math -march=native") + set(CMAKE_TUNE_DEFAULT "-march=native") endif() if(${CMAKE_CXX_COMPILER_ID} STREQUAL "Clang") - set(CMAKE_TUNE_DEFAULT "-ffast-math -march=native") + set(CMAKE_TUNE_DEFAULT "-march=native") endif() -# we require C++11 +# we require C++11 without extensions set(CMAKE_CXX_STANDARD 11) set(CMAKE_CXX_STANDARD_REQUIRED ON) +set(CMAKE_CXX_EXTENSIONS OFF) # GNU compiler specific features for testing if (${CMAKE_CXX_COMPILER_ID} STREQUAL "GNU") @@ -85,43 +89,33 @@ endif() ######################################################################## # User input options # ######################################################################## -option(BUILD_EXE "Build lmp binary" ON) -if(BUILD_EXE) - set(LAMMPS_MACHINE "" CACHE STRING "Suffix to append to lmp binary (WON'T enable any features automatically") - mark_as_advanced(LAMMPS_MACHINE) - if(LAMMPS_MACHINE) - set(LAMMPS_MACHINE "_${LAMMPS_MACHINE}") - endif() - set(LAMMPS_BINARY lmp${LAMMPS_MACHINE}) +set(LAMMPS_MACHINE "" CACHE STRING "Suffix to append to lmp binary (WON'T enable any features automatically") +mark_as_advanced(LAMMPS_MACHINE) +if(LAMMPS_MACHINE) + set(LAMMPS_MACHINE "_${LAMMPS_MACHINE}") endif() +set(LAMMPS_BINARY lmp${LAMMPS_MACHINE}) -option(BUILD_LIB "Build LAMMPS library" OFF) -if(BUILD_LIB) - option(BUILD_SHARED_LIBS "Build shared library" OFF) - if(BUILD_SHARED_LIBS) # for all pkg libs, mpi_stubs and linalg - set(CMAKE_POSITION_INDEPENDENT_CODE ON) - endif() - set(LAMMPS_LIB_SUFFIX "" CACHE STRING "Suffix to append to liblammps and pkg-config file") - mark_as_advanced(LAMMPS_LIB_SUFFIX) - if(LAMMPS_LIB_SUFFIX) - set(LAMMPS_LIB_SUFFIX "_${LAMMPS_LIB_SUFFIX}") - endif() +option(BUILD_SHARED_LIBS "Build shared library" OFF) +if(BUILD_SHARED_LIBS) # for all pkg libs, mpi_stubs and linalg + set(CMAKE_POSITION_INDEPENDENT_CODE ON) endif() option(BUILD_TOOLS "Build and install LAMMPS tools (msi2lmp, binary2txt, chain)" OFF) -if(NOT BUILD_EXE AND NOT BUILD_LIB) - message(FATAL_ERROR "You need to at least enable one of two following options: BUILD_LIB or BUILD_EXE") -endif() - -option(CMAKE_VERBOSE_MAKEFILE "Generate verbose Makefiles" OFF) include(GNUInstallDirs) +file(GLOB ALL_SOURCES ${LAMMPS_SOURCE_DIR}/[^.]*.cpp) +file(GLOB MAIN_SOURCES ${LAMMPS_SOURCE_DIR}/main.cpp) +list(REMOVE_ITEM ALL_SOURCES ${MAIN_SOURCES}) +add_library(lammps ${ALL_SOURCES}) +add_executable(lmp ${MAIN_SOURCES}) +target_link_libraries(lmp PRIVATE lammps) +set_target_properties(lmp PROPERTIES OUTPUT_NAME ${LAMMPS_BINARY}) +install(TARGETS lmp EXPORT LAMMPS_Targets DESTINATION ${CMAKE_INSTALL_BINDIR}) -set(LAMMPS_LINK_LIBS) -set(LAMMPS_DEPS) -set(LAMMPS_API_DEFINES) +option(CMAKE_VERBOSE_MAKEFILE "Generate verbose Makefiles" OFF) -set(DEFAULT_PACKAGES ASPHERE BODY CLASS2 COLLOID COMPRESS CORESHELL DIPOLE +set(STANDARD_PACKAGES ASPHERE BODY CLASS2 COLLOID COMPRESS DIPOLE GRANULAR KSPACE LATTE MANYBODY MC MESSAGE MISC MOLECULE PERI POEMS QEQ REPLICA RIGID SHOCK SPIN SNAP SRD KIM PYTHON MSCG MPIIO VORONOI USER-ATC USER-AWPMD USER-BOCS USER-CGDNA USER-MESODPD USER-CGSDK USER-COLVARS @@ -130,33 +124,15 @@ set(DEFAULT_PACKAGES ASPHERE BODY CLASS2 COLLOID COMPRESS CORESHELL DIPOLE USER-NETCDF USER-PHONON USER-PLUMED USER-PTM USER-QTB USER-REACTION USER-REAXC USER-SCAFACOS USER-SDPD USER-SMD USER-SMTBQ USER-SPH USER-TALLY USER-UEF USER-VTK USER-QUIP USER-QMMM USER-YAFF USER-ADIOS) -set(ACCEL_PACKAGES USER-OMP KOKKOS OPT USER-INTEL GPU) -foreach(PKG ${DEFAULT_PACKAGES} ${ACCEL_PACKAGES}) +set(SUFFIX_PACKAGES CORESHELL USER-OMP KOKKOS OPT USER-INTEL GPU) +foreach(PKG ${STANDARD_PACKAGES} ${SUFFIX_PACKAGES}) option(PKG_${PKG} "Build ${PKG} Package" OFF) endforeach() -###################################################### -# download and unpack support binaries for compilation -# of windows binaries. -###################################################### -if(${CMAKE_SYSTEM_NAME} STREQUAL "Windows") - set(LAMMPS_THIRDPARTY_URL "http://download.lammps.org/thirdparty") - file(DOWNLOAD "${LAMMPS_THIRDPARTY_URL}/opencl-win-devel.tar.gz" "${CMAKE_CURRENT_BINARY_DIR}/opencl-win-devel.tar.gz" - EXPECTED_MD5 2c00364888d5671195598b44c2e0d44d) - execute_process(COMMAND ${CMAKE_COMMAND} -E tar xzf opencl-win-devel.tar.gz WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}) - if(${CMAKE_SYSTEM_PROCESSOR} STREQUAL "x86") - set(OpenCL_LIBRARY "${CMAKE_CURRENT_BINARY_DIR}/OpenCL/lib_win32/libOpenCL.dll") - elseif(${CMAKE_SYSTEM_PROCESSOR} STREQUAL "x86_64") - set(OpenCL_LIBRARY "${CMAKE_CURRENT_BINARY_DIR}/OpenCL/lib_win64/libOpenCL.dll") - endif() - set(OpenCL_INCLUDE_DIR "${CMAKE_CURRENT_BINARY_DIR}/OpenCL/include") -endif() - -###################################################### ###################################################### # packages with special compiler needs or external libs ###################################################### -include_directories(${LAMMPS_SOURCE_DIR}) +target_include_directories(lammps PUBLIC $) if(PKG_USER-ADIOS) # The search for ADIOS2 must come before MPI because @@ -164,35 +140,44 @@ if(PKG_USER-ADIOS) # script that defines the MPI::MPI_C target enable_language(C) find_package(ADIOS2 REQUIRED) - list(APPEND LAMMPS_LINK_LIBS adios2::adios2) + target_link_libraries(lammps PRIVATE adios2::adios2) endif() -# do MPI detection after language activation, -# in case MPI for these languages is required -set(MPI_CXX_SKIP_MPICXX TRUE) -find_package(MPI QUIET) -option(BUILD_MPI "Build MPI version" ${MPI_FOUND}) +if(NOT CMAKE_CROSSCOMPILING) + set(MPI_CXX_SKIP_MPICXX TRUE) + find_package(MPI QUIET) + option(BUILD_MPI "Build MPI version" ${MPI_FOUND}) +else() + option(BUILD_MPI "Build MPI version" OFF) +endif() if(BUILD_MPI) - # We use a non-standard procedure to compile with MPI on windows - if (CMAKE_SYSTEM_NAME STREQUAL Windows) + # We use a non-standard procedure to cross-compile with MPI on Windows + if((CMAKE_SYSTEM_NAME STREQUAL Windows) AND CMAKE_CROSSCOMPILING) include(MPI4WIN) + target_link_libraries(lammps PUBLIC MPI::MPI_CXX) else() find_package(MPI REQUIRED) - include_directories(${MPI_CXX_INCLUDE_PATH}) - add_definitions(-DMPICH_SKIP_MPICXX -DOMPI_SKIP_MPICXX=1) - list(APPEND LAMMPS_LINK_LIBS ${MPI_CXX_LIBRARIES}) + target_link_libraries(lammps PUBLIC MPI::MPI_CXX) option(LAMMPS_LONGLONG_TO_LONG "Workaround if your system or MPI version does not recognize 'long long' data types" OFF) if(LAMMPS_LONGLONG_TO_LONG) - add_definitions(-DLAMMPS_LONGLONG_TO_LONG) + target_compile_definitions(lammps PRIVATE -DLAMMPS_LONGLONG_TO_LONG) endif() endif() else() enable_language(C) file(GLOB MPI_SOURCES ${LAMMPS_SOURCE_DIR}/STUBS/mpi.c) add_library(mpi_stubs STATIC ${MPI_SOURCES}) - include_directories(${LAMMPS_SOURCE_DIR}/STUBS) - list(APPEND LAMMPS_LINK_LIBS mpi_stubs) + set_target_properties(mpi_stubs PROPERTIES OUTPUT_NAME lammps_mpi_stubs${LAMMPS_MACHINE}) + target_include_directories(mpi_stubs PUBLIC $ $) + install(FILES ${LAMMPS_SOURCE_DIR}/STUBS/mpi.h DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/lammps/mpi) + if(BUILD_SHARED_LIBS) + target_link_libraries(lammps PRIVATE mpi_stubs) + target_include_directories(lammps INTERFACE $ $) + else() + target_link_libraries(lammps PUBLIC mpi_stubs) + endif() + add_library(MPI::MPI_CXX ALIAS mpi_stubs) endif() set(LAMMPS_SIZES "smallbig" CACHE STRING "LAMMPS integer sizes (smallsmall: all 32-bit, smallbig: 64-bit #atoms #timesteps, bigbig: also 64-bit imageint, 64-bit atom ids)") @@ -200,8 +185,7 @@ set(LAMMPS_SIZES_VALUES smallbig bigbig smallsmall) set_property(CACHE LAMMPS_SIZES PROPERTY STRINGS ${LAMMPS_SIZES_VALUES}) validate_option(LAMMPS_SIZES LAMMPS_SIZES_VALUES) string(TOUPPER ${LAMMPS_SIZES} LAMMPS_SIZES) -add_definitions(-DLAMMPS_${LAMMPS_SIZES}) -set(LAMMPS_API_DEFINES "${LAMMPS_API_DEFINES} -DLAMMPS_${LAMMPS_SIZES}") +target_compile_definitions(lammps PUBLIC -DLAMMPS_${LAMMPS_SIZES}) # posix_memalign is not available on Windows if(${CMAKE_SYSTEM_NAME} STREQUAL "Windows") @@ -210,13 +194,12 @@ else() set(LAMMPS_MEMALIGN "64" CACHE STRING "enables the use of the posix_memalign() call instead of malloc() when large chunks or memory are allocated by LAMMPS. Set to 0 to disable") endif() if(NOT ${LAMMPS_MEMALIGN} STREQUAL "0") - add_definitions(-DLAMMPS_MEMALIGN=${LAMMPS_MEMALIGN}) + target_compile_definitions(lammps PRIVATE -DLAMMPS_MEMALIGN=${LAMMPS_MEMALIGN}) endif() option(LAMMPS_EXCEPTIONS "enable the use of C++ exceptions for error messages (useful for library interface)" OFF) if(LAMMPS_EXCEPTIONS) - add_definitions(-DLAMMPS_EXCEPTIONS) - set(LAMMPS_API_DEFINES "${LAMMPS_API_DEFINES} -DLAMMPS_EXCEPTIONS") + target_compile_definitions(lammps PUBLIC -DLAMMPS_EXCEPTIONS) endif() # "hard" dependencies between packages resulting @@ -237,16 +220,7 @@ if(OpenMP_FOUND) endif() endif() -# TODO: this is a temporary workaround until a better solution is found. AK 2019-05-30 -# GNU GCC 9.x uses settings incompatible with our use of 'default(none)' in OpenMP pragmas -# where we assume older GCC semantics. For the time being, we disable OpenMP by default -# for GCC 9.x and beyond. People may manually turn it on, but need to run the script -# src/USER-OMP/hack_openmp_for_pgi_gcc9.sh on all sources to make it compatible with gcc 9. -if ((CMAKE_CXX_COMPILER_ID STREQUAL "GNU") AND (CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 8.99.9)) - option(BUILD_OMP "Build with OpenMP support" OFF) -else() - option(BUILD_OMP "Build with OpenMP support" ${BUILD_OMP_DEFAULT}) -endif() +option(BUILD_OMP "Build with OpenMP support" ${BUILD_OMP_DEFAULT}) if(BUILD_OMP) find_package(OpenMP REQUIRED) @@ -254,8 +228,18 @@ if(BUILD_OMP) if(NOT HAVE_OMP_H_INCLUDE) message(FATAL_ERROR "Cannot find the 'omp.h' header file required for full OpenMP support") endif() - set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OpenMP_C_FLAGS}") - set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}") + + if (((CMAKE_CXX_COMPILER_ID STREQUAL "GNU") AND (CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 8.99.9)) OR + ((CMAKE_CXX_COMPILER_ID STREQUAL "Clang") AND (CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 9.99.9)) OR + ((CMAKE_CXX_COMPILER_ID STREQUAL "Intel") AND (CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 18.99.9)) + ) + # GCC 9.x and later plus Clang 10.x and later implement strict OpenMP 4.0 semantics for consts. + # Intel 18.0 was tested to support both, so we switch to OpenMP 4+ from 19.x onward to be safe. + target_compile_definitions(lammps PRIVATE -DLAMMPS_OMP_COMPAT=4) + else() + target_compile_definitions(lammps PRIVATE -DLAMMPS_OMP_COMPAT=3) + endif() + target_link_libraries(lammps PRIVATE OpenMP::OpenMP_CXX) endif() if(PKG_MSCG OR PKG_USER-ATC OR PKG_USER-AWPMD OR PKG_USER-QUIP OR PKG_LATTE) @@ -270,6 +254,7 @@ if(PKG_MSCG OR PKG_USER-ATC OR PKG_USER-AWPMD OR PKG_USER-QUIP OR PKG_LATTE) enable_language(Fortran) file(GLOB LAPACK_SOURCES ${LAMMPS_LIB_SOURCE_DIR}/linalg/[^.]*.[fF]) add_library(linalg STATIC ${LAPACK_SOURCES}) + set_target_properties(linalg PROPERTIES OUTPUT_NAME lammps_linalg${LAMMPS_MACHINE}) set(BLAS_LIBRARIES "$") set(LAPACK_LIBRARIES "$") else() @@ -282,9 +267,13 @@ find_package(JPEG QUIET) option(WITH_JPEG "Enable JPEG support" ${JPEG_FOUND}) if(WITH_JPEG) find_package(JPEG REQUIRED) - add_definitions(-DLAMMPS_JPEG) - include_directories(${JPEG_INCLUDE_DIR}) - list(APPEND LAMMPS_LINK_LIBS ${JPEG_LIBRARIES}) + target_compile_definitions(lammps PRIVATE -DLAMMPS_JPEG) + if(CMAKE_VERSION VERSION_LESS 3.12) + target_include_directories(lammps PRIVATE ${JPEG_INCLUDE_DIR}) + target_link_libraries(lammps PRIVATE ${JPEG_LIBRARIES}) + else() + target_link_libraries(lammps PRIVATE JPEG::JPEG) + endif() endif() find_package(PNG QUIET) @@ -297,9 +286,8 @@ endif() if(WITH_PNG) find_package(PNG REQUIRED) find_package(ZLIB REQUIRED) - include_directories(${PNG_INCLUDE_DIRS} ${ZLIB_INCLUDE_DIRS}) - list(APPEND LAMMPS_LINK_LIBS ${PNG_LIBRARIES} ${ZLIB_LIBRARIES}) - add_definitions(-DLAMMPS_PNG) + target_link_libraries(lammps PRIVATE PNG::PNG ZLIB::ZLIB) + target_compile_definitions(lammps PRIVATE -DLAMMPS_PNG) endif() find_program(GZIP_EXECUTABLE gzip) @@ -309,7 +297,7 @@ if(WITH_GZIP) if(NOT GZIP_FOUND) message(FATAL_ERROR "gzip executable not found") endif() - add_definitions(-DLAMMPS_GZIP) + target_compile_definitions(lammps PRIVATE -DLAMMPS_GZIP) endif() find_program(FFMPEG_EXECUTABLE ffmpeg) @@ -319,7 +307,7 @@ if(WITH_FFMPEG) if(NOT FFMPEG_FOUND) message(FATAL_ERROR "ffmpeg executable not found") endif() - add_definitions(-DLAMMPS_FFMPEG) + target_compile_definitions(lammps PRIVATE -DLAMMPS_FFMPEG) endif() if(BUILD_SHARED_LIBS) @@ -332,29 +320,25 @@ else() set(CUDA_REQUEST_PIC) endif() -include(Packages/KSPACE) -include(Packages/PYTHON) -include(Packages/VORONOI) -include(Packages/USER-COLVARS) -include(Packages/USER-MOLFILE) -include(Packages/USER-NETCDF) -include(Packages/USER-PLUMED) -include(Packages/USER-QMMM) -include(Packages/USER-QUIP) -include(Packages/USER-SCAFACOS) -include(Packages/USER-SMD) -include(Packages/USER-VTK) -include(Packages/KIM) -include(Packages/LATTE) -include(Packages/MESSAGE) -include(Packages/MSCG) -include(Packages/COMPRESS) +foreach(PKG_WITH_INCL KSPACE PYTHON VORONOI USER-COLVARS USER-MOLFILE USER-NETCDF USER-PLUMED USER-QMMM + USER-QUIP USER-SCAFACOS USER-SMD USER-VTK KIM LATTE MESSAGE MSCG COMPRESS) + if(PKG_${PKG_WITH_INCL}) + include(Packages/${PKG_WITH_INCL}) + endif() +endforeach() set(CMAKE_TUNE_FLAGS "${CMAKE_TUNE_DEFAULT}" CACHE STRING "Compiler specific optimization or instrumentation") -set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${CMAKE_TUNE_FLAGS}") -if(CMAKE_Fortran_COMPILER) - set(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} ${CMAKE_TUNE_FLAGS}") -endif() +separate_arguments(CMAKE_TUNE_FLAGS) +include(CheckCXXCompilerFlag) +foreach(_FLAG ${CMAKE_TUNE_FLAGS}) + string(REGEX REPLACE "[=\"]" "" _FLAGX ${_FLAG}) + check_cxx_compiler_flag("${_FLAG}" COMPILER_SUPPORTS${_FLAGX}) + if(COMPILER_SUPPORTS${_FLAGX}) + target_compile_options(lammps PRIVATE ${_FLAG}) + else() + message(WARNING "${_FLAG} found in CMAKE_TUNE_FLAGS, but not supported by the compiler, skipping") + endif() +endforeach() ######################################################################## # Basic system tests (standard libraries, headers, functions, types) # ######################################################################## @@ -367,15 +351,7 @@ endforeach(HEADER) set(MATH_LIBRARIES "m" CACHE STRING "math library") mark_as_advanced( MATH_LIBRARIES ) -include(CheckLibraryExists) -# RB: disabled this check because it breaks with KOKKOS CUDA enabled -#foreach(FUNC sin cos) -# check_library_exists(${MATH_LIBRARIES} ${FUNC} "" FOUND_${FUNC}_${MATH_LIBRARIES}) -# if(NOT FOUND_${FUNC}_${MATH_LIBRARIES}) -# message(FATAL_ERROR "Could not find needed math function - ${FUNC}") -# endif(NOT FOUND_${FUNC}_${MATH_LIBRARIES}) -#endforeach(FUNC) -list(APPEND LAMMPS_LINK_LIBS ${MATH_LIBRARIES}) +target_link_libraries(lammps PRIVATE ${MATH_LIBRARIES}) ###################################### # Generate Basic Style files @@ -386,7 +362,7 @@ RegisterStyles(${LAMMPS_SOURCE_DIR}) ############################################## # add sources of enabled packages ############################################ -foreach(PKG ${DEFAULT_PACKAGES}) +foreach(PKG ${STANDARD_PACKAGES}) set(${PKG}_SOURCES_DIR ${LAMMPS_SOURCE_DIR}/${PKG}) file(GLOB ${PKG}_SOURCES ${${PKG}_SOURCES_DIR}/[^.]*.cpp) @@ -399,8 +375,8 @@ foreach(PKG ${DEFAULT_PACKAGES}) # detects styles in package and adds them to global list RegisterStyles(${${PKG}_SOURCES_DIR}) - list(APPEND LIB_SOURCES ${${PKG}_SOURCES}) - include_directories(${${PKG}_SOURCES_DIR}) + target_sources(lammps PRIVATE ${${PKG}_SOURCES}) + target_include_directories(lammps PRIVATE ${${PKG}_SOURCES_DIR}) endif() RegisterPackages(${${PKG}_SOURCES_DIR}) @@ -409,12 +385,12 @@ endforeach() # packages that need defines set foreach(PKG MPIIO) if(PKG_${PKG}) - add_definitions(-DLMP_${PKG}) + target_compile_definitions(lammps PRIVATE -DLMP_${PKG}) endif() endforeach() # dedicated check for entire contents of accelerator packages -foreach(PKG ${ACCEL_PACKAGES}) +foreach(PKG ${SUFFIX_PACKAGES}) set(${PKG}_SOURCES_DIR ${LAMMPS_SOURCE_DIR}/${PKG}) file(GLOB ${PKG}_SOURCES ${${PKG}_SOURCES_DIR}/[^.]*.cpp) @@ -434,14 +410,11 @@ foreach(SIMPLE_LIB POEMS USER-ATC USER-AWPMD USER-H5MD) string(REGEX REPLACE "^USER-" "" PKG_LIB "${SIMPLE_LIB}") string(TOLOWER "${PKG_LIB}" PKG_LIB) file(GLOB_RECURSE ${PKG_LIB}_SOURCES - ${LAMMPS_LIB_SOURCE_DIR}/${PKG_LIB}/[^.]*.F ${LAMMPS_LIB_SOURCE_DIR}/${PKG_LIB}/[^.]*.c ${LAMMPS_LIB_SOURCE_DIR}/${PKG_LIB}/[^.]*.cpp) add_library(${PKG_LIB} STATIC ${${PKG_LIB}_SOURCES}) - if(LAMMPS_USE_MPI4WIN) - add_dependencies(${PKG_LIB} mpi4win_build) - endif() - list(APPEND LAMMPS_LINK_LIBS ${PKG_LIB}) + set_target_properties(${PKG_LIB} PROPERTIES OUTPUT_NAME lammps_${PKG_LIB}${LAMMPS_MACHINE}) + target_link_libraries(lammps PRIVATE ${PKG_LIB}) if(PKG_LIB STREQUAL awpmd) target_include_directories(awpmd PUBLIC ${LAMMPS_LIB_SOURCE_DIR}/awpmd/systems/interact ${LAMMPS_LIB_SOURCE_DIR}/awpmd/ivutils/include) elseif(PKG_LIB STREQUAL h5md) @@ -453,30 +426,36 @@ foreach(SIMPLE_LIB POEMS USER-ATC USER-AWPMD USER-H5MD) endforeach() if(PKG_USER-AWPMD) - target_link_libraries(awpmd ${LAPACK_LIBRARIES}) + target_link_libraries(awpmd PRIVATE ${LAPACK_LIBRARIES}) endif() if(PKG_USER-ATC) if(LAMMPS_SIZES STREQUAL BIGBIG) message(FATAL_ERROR "The USER-ATC Package is not compatible with -DLAMMPS_BIGBIG") endif() - target_link_libraries(atc ${LAPACK_LIBRARIES}) + target_link_libraries(atc PRIVATE ${LAPACK_LIBRARIES}) + if(BUILD_MPI) + target_link_libraries(atc PRIVATE MPI::MPI_CXX) + else() + target_link_libraries(atc PRIVATE mpi_stubs) + endif() + target_include_directories(atc PRIVATE ${LAMMPS_SOURCE_DIR}) + target_compile_definitions(atc PRIVATE -DLAMMPS_${LAMMPS_SIZES}) endif() -include(Packages/USER-H5MD) +if(PKG_USER-H5MD) + include(Packages/USER-H5MD) +endif() ###################################################################### # packages which selectively include variants based on enabled styles # e.g. accelerator packages ###################################################################### -include(Packages/CORESHELL) -include(Packages/QEQ) -include(Packages/USER-OMP) -include(Packages/USER-SDPD) -include(Packages/KOKKOS) -include(Packages/OPT) -include(Packages/USER-INTEL) -include(Packages/GPU) +foreach(PKG_WITH_INCL CORESHELL QEQ USER-OMP USER-SDPD KOKKOS OPT USER-INTEL GPU) + if(PKG_${PKG_WITH_INCL}) + include(Packages/${PKG_WITH_INCL}) + endif() +endforeach() ###################################################################### # the windows version of LAMMPS requires a couple extra libraries @@ -484,10 +463,7 @@ include(Packages/GPU) # and after everything else that is compiled locally ###################################################################### if(${CMAKE_SYSTEM_NAME} STREQUAL "Windows") - if(LAMMPS_USE_MPI4WIN) - list(APPEND LAMMPS_LINK_LIBS ${MPI4WIN_LIBRARIES}) - endif() - list(APPEND LAMMPS_LINK_LIBS -lwsock32 -lpsapi) + target_link_libraries(lammps PRIVATE -lwsock32 -lpsapi) endif() ###################################################### @@ -500,14 +476,14 @@ set(LAMMPS_STYLE_HEADERS_DIR ${CMAKE_CURRENT_BINARY_DIR}/styles) GenerateStyleHeaders(${LAMMPS_STYLE_HEADERS_DIR}) GeneratePackagesHeaders(${LAMMPS_STYLE_HEADERS_DIR}) -include_directories(${LAMMPS_STYLE_HEADERS_DIR}) +target_include_directories(lammps PRIVATE ${LAMMPS_STYLE_HEADERS_DIR}) ###################################### # Generate lmpinstalledpkgs.h ###################################### set(temp "#ifndef LMP_INSTALLED_PKGS_H\n#define LMP_INSTALLED_PKGS_H\n") set(temp "${temp}const char * LAMMPS_NS::LAMMPS::installed_packages[] = {\n") -set(temp_PKG_LIST ${DEFAULT_PACKAGES} ${ACCEL_PACKAGES}) +set(temp_PKG_LIST ${STANDARD_PACKAGES} ${SUFFIX_PACKAGES}) list(SORT temp_PKG_LIST) foreach(PKG ${temp_PKG_LIST}) if(PKG_${PKG}) @@ -523,13 +499,13 @@ execute_process(COMMAND ${CMAKE_COMMAND} -E copy_if_different "${LAMMPS_STYLE_HE # Generate lmpgitversion.h ###################################### add_custom_target(gitversion COMMAND ${CMAKE_COMMAND} - -DCMAKE_CURRENT_SOURCE_DIR="${CMAKE_CURRENT_SOURCE_DIR}" + -DLAMMPS_DIR="${LAMMPS_DIR}" -DGIT_EXECUTABLE="${GIT_EXECUTABLE}" -DGIT_FOUND="${GIT_FOUND}" -DLAMMPS_STYLE_HEADERS_DIR="${LAMMPS_STYLE_HEADERS_DIR}" -P ${CMAKE_CURRENT_SOURCE_DIR}/Modules/generate_lmpgitversion.cmake) set_property(DIRECTORY APPEND PROPERTY ADDITIONAL_MAKE_CLEAN_FILES ${LAMMPS_STYLE_HEADERS_DIR}/gitversion.h) -list(APPEND LAMMPS_DEPS gitversion) +add_dependencies(lammps gitversion) ########################################### # Actually add executable and lib to build @@ -537,86 +513,63 @@ list(APPEND LAMMPS_DEPS gitversion) get_property(LANGUAGES GLOBAL PROPERTY ENABLED_LANGUAGES) list (FIND LANGUAGES "Fortran" _index) if (${_index} GREATER -1) - list(APPEND LAMMPS_LINK_LIBS ${CMAKE_Fortran_IMPLICIT_LINK_LIBRARIES}) -endif() -list(REMOVE_DUPLICATES LAMMPS_LINK_LIBS) -if(BUILD_LIB) - add_library(lammps ${LIB_SOURCES}) - target_link_libraries(lammps ${LAMMPS_LINK_LIBS}) - if(LAMMPS_DEPS) - add_dependencies(lammps ${LAMMPS_DEPS}) - endif() - set(LAMMPS_CXX_HEADERS - ${LAMMPS_SOURCE_DIR}/angle.h - ${LAMMPS_SOURCE_DIR}/atom.h - ${LAMMPS_SOURCE_DIR}/bond.h - ${LAMMPS_SOURCE_DIR}/citeme.h - ${LAMMPS_SOURCE_DIR}/comm.h - ${LAMMPS_SOURCE_DIR}/compute.h - ${LAMMPS_SOURCE_DIR}/dihedral.h - ${LAMMPS_SOURCE_DIR}/domain.h - ${LAMMPS_SOURCE_DIR}/error.h - ${LAMMPS_SOURCE_DIR}/fix.h - ${LAMMPS_SOURCE_DIR}/force.h - ${LAMMPS_SOURCE_DIR}/group.h - ${LAMMPS_SOURCE_DIR}/improper.h - ${LAMMPS_SOURCE_DIR}/input.h - ${LAMMPS_SOURCE_DIR}/kspace.h - ${LAMMPS_SOURCE_DIR}/lammps.h - ${LAMMPS_SOURCE_DIR}/lattice.h - ${LAMMPS_SOURCE_DIR}/lmppython.h - ${LAMMPS_SOURCE_DIR}/memory.h - ${LAMMPS_SOURCE_DIR}/modify.h - ${LAMMPS_SOURCE_DIR}/neighbor.h - ${LAMMPS_SOURCE_DIR}/neigh_list.h - ${LAMMPS_SOURCE_DIR}/output.h - ${LAMMPS_SOURCE_DIR}/pair.h - ${LAMMPS_SOURCE_DIR}/pointers.h - ${LAMMPS_SOURCE_DIR}/region.h - ${LAMMPS_SOURCE_DIR}/timer.h - ${LAMMPS_SOURCE_DIR}/universe.h - ${LAMMPS_SOURCE_DIR}/update.h - ${LAMMPS_SOURCE_DIR}/variable.h) - - set_target_properties(lammps PROPERTIES OUTPUT_NAME lammps${LAMMPS_LIB_SUFFIX}) - set_target_properties(lammps PROPERTIES SOVERSION ${SOVERSION}) - install(TARGETS lammps LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}) - install(FILES ${LAMMPS_SOURCE_DIR}/library.h DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/lammps) - install(FILES ${LAMMPS_CXX_HEADERS} DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/lammps) - configure_file(pkgconfig/liblammps.pc.in ${CMAKE_CURRENT_BINARY_DIR}/liblammps${LAMMPS_LIB_SUFFIX}.pc @ONLY) - install(FILES ${CMAKE_CURRENT_BINARY_DIR}/liblammps${LAMMPS_LIB_SUFFIX}.pc DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig) - configure_file(FindLAMMPS.cmake.in ${CMAKE_CURRENT_BINARY_DIR}/FindLAMMPS${LAMMPS_LIB_SUFFIX}.cmake @ONLY) - install(FILES ${CMAKE_CURRENT_BINARY_DIR}/FindLAMMPS${LAMMPS_LIB_SUFFIX}.cmake DESTINATION ${CMAKE_INSTALL_DATADIR}/cmake/Modules) -else() - list(APPEND LMP_SOURCES ${LIB_SOURCES}) + target_link_libraries(lammps PRIVATE ${CMAKE_Fortran_IMPLICIT_LINK_LIBRARIES}) endif() - -if(BUILD_EXE) - add_executable(lmp ${LMP_SOURCES}) - if(BUILD_LIB) - target_link_libraries(lmp lammps) - else() - target_link_libraries(lmp ${LAMMPS_LINK_LIBS}) - if(LAMMPS_DEPS) - add_dependencies(lmp ${LAMMPS_DEPS}) - endif() +set(LAMMPS_CXX_HEADERS angle.h atom.h bond.h citeme.h comm.h compute.h dihedral.h domain.h error.h fix.h force.h group.h improper.h + input.h info.h kspace.h lammps.h lattice.h library.h lmppython.h lmptype.h memory.h modify.h neighbor.h neigh_list.h output.h + pair.h pointers.h region.h timer.h universe.h update.h variable.h) +if(LAMMPS_EXCEPTIONS) + list(APPEND LAMMPS_CXX_HEADERS exceptions.h) +endif() + +set_target_properties(lammps PROPERTIES OUTPUT_NAME lammps${LAMMPS_MACHINE}) +set_target_properties(lammps PROPERTIES SOVERSION ${SOVERSION}) +target_include_directories(lammps PUBLIC $) +file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/includes/lammps) +foreach(_HEADER ${LAMMPS_CXX_HEADERS}) + add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/includes/lammps/${_HEADER} COMMAND ${CMAKE_COMMAND} -E copy_if_different ${LAMMPS_SOURCE_DIR}/${_HEADER} ${CMAKE_CURRENT_BINARY_DIR}/includes/lammps/${_HEADER} DEPENDS ${LAMMPS_SOURCE_DIR}/${_HEADER}) + add_custom_target(${_HEADER} DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/includes/lammps/${_HEADER}) + add_dependencies(lammps ${_HEADER}) + if(BUILD_SHARED_LIBS) + install(FILES ${LAMMPS_SOURCE_DIR}/${_HEADER} DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/lammps) endif() - - set_target_properties(lmp PROPERTIES OUTPUT_NAME ${LAMMPS_BINARY}) - install(TARGETS lmp DESTINATION ${CMAKE_INSTALL_BINDIR}) - install(FILES ${LAMMPS_DOC_DIR}/lammps.1 DESTINATION ${CMAKE_INSTALL_MANDIR}/man1 RENAME ${LAMMPS_BINARY}.1) +endforeach() +target_include_directories(lammps INTERFACE $) +add_library(LAMMPS::lammps ALIAS lammps) +get_target_property(LAMMPS_DEFINES lammps INTERFACE_COMPILE_DEFINITIONS) +set(LAMMPS_API_DEFINES) +foreach(_DEF ${LAMMPS_DEFINES}) + set(LAMMPS_API_DEFINES "${LAMMPS_API_DEFINES} -D${_DEF}") +endforeach() +if(BUILD_SHARED_LIBS) + install(TARGETS lammps EXPORT LAMMPS_Targets LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}) + configure_file(pkgconfig/liblammps.pc.in ${CMAKE_CURRENT_BINARY_DIR}/liblammps${LAMMPS_MACHINE}.pc @ONLY) + install(FILES ${CMAKE_CURRENT_BINARY_DIR}/liblammps${LAMMPS_MACHINE}.pc DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig) + install(EXPORT LAMMPS_Targets FILE LAMMPS_Targets.cmake NAMESPACE LAMMPS:: DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/LAMMPS) + include(CMakePackageConfigHelpers) + configure_file(LAMMPSConfig.cmake.in ${CMAKE_CURRENT_BINARY_DIR}/LAMMPSConfig.cmake @ONLY) + write_basic_package_version_file("LAMMPSConfigVersion.cmake" VERSION ${PROJECT_VERSION} COMPATIBILITY ExactVersion) + install(FILES "${CMAKE_CURRENT_BINARY_DIR}/LAMMPSConfig.cmake" "${CMAKE_CURRENT_BINARY_DIR}/LAMMPSConfigVersion.cmake" DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/LAMMPS) endif() +install(FILES ${LAMMPS_DOC_DIR}/lammps.1 DESTINATION ${CMAKE_INSTALL_MANDIR}/man1 RENAME ${LAMMPS_BINARY}.1) if(BUILD_TOOLS) add_executable(binary2txt ${LAMMPS_TOOLS_DIR}/binary2txt.cpp) + target_compile_definitions(binary2txt PRIVATE -DLAMMPS_${LAMMPS_SIZES}) install(TARGETS binary2txt DESTINATION ${CMAKE_INSTALL_BINDIR}) include(CheckGeneratorSupport) if(CMAKE_GENERATOR_SUPPORT_FORTRAN) - enable_language(Fortran) - add_executable(chain.x ${LAMMPS_TOOLS_DIR}/chain.f) - target_link_libraries(chain.x ${CMAKE_Fortran_IMPLICIT_LINK_LIBRARIES}) - install(TARGETS chain.x DESTINATION ${CMAKE_INSTALL_BINDIR}) + include(CheckLanguage) + check_language(Fortran) + if(CMAKE_Fortran_COMPILER) + enable_language(Fortran) + add_executable(chain.x ${LAMMPS_TOOLS_DIR}/chain.f) + target_link_libraries(chain.x PRIVATE ${CMAKE_Fortran_IMPLICIT_LINK_LIBRARIES}) + install(TARGETS chain.x DESTINATION ${CMAKE_INSTALL_BINDIR}) + else() + message(WARNING "No suitable Fortran compiler found, skipping building 'chain.x'") + endif() else() message(WARNING "CMake build doesn't support fortran, skipping building 'chain.x'") endif() @@ -625,7 +578,7 @@ if(BUILD_TOOLS) get_filename_component(MSI2LMP_SOURCE_DIR ${LAMMPS_TOOLS_DIR}/msi2lmp/src ABSOLUTE) file(GLOB MSI2LMP_SOURCES ${MSI2LMP_SOURCE_DIR}/[^.]*.c) add_executable(msi2lmp ${MSI2LMP_SOURCES}) - target_link_libraries(msi2lmp m) + target_link_libraries(msi2lmp PRIVATE ${MATH_LIBRARIES}) install(TARGETS msi2lmp DESTINATION ${CMAKE_INSTALL_BINDIR}) install(FILES ${LAMMPS_DOC_DIR}/msi2lmp.1 DESTINATION ${CMAKE_INSTALL_MANDIR}/man1) endif() @@ -655,12 +608,19 @@ install( # conventional build. Only available, if a shared library is built. # This is primarily for people that only want to use the Python wrapper. ############################################################################### -if(BUILD_LIB AND BUILD_SHARED_LIBS) - find_package(PythonInterp) - if (PYTHONINTERP_FOUND) +if(BUILD_SHARED_LIBS) + if(CMAKE_VERSION VERSION_LESS 3.12) + find_package(PythonInterp) # Deprecated since version 3.12 + if(PYTHONINTERP_FOUND) + set(Python_EXECUTABLE ${PYTHON_EXECUTABLE}) + endif() + else() + find_package(Python COMPONENTS Interpreter) + endif() + if (Python_EXECUTABLE) add_custom_target( install-python - ${PYTHON_EXECUTABLE} install.py -v ${LAMMPS_SOURCE_DIR}/version.h + ${Python_EXECUTABLE} install.py -v ${LAMMPS_SOURCE_DIR}/version.h -m ${LAMMPS_PYTHON_DIR}/lammps.py -l ${CMAKE_BINARY_DIR}/liblammps${CMAKE_SHARED_LIBRARY_SUFFIX} WORKING_DIRECTORY ${LAMMPS_PYTHON_DIR} @@ -681,10 +641,17 @@ endif() # LAMMPS for package managers and with different prefix settings. # This requires either a shared library or that the PYTHON package is included. ############################################################################### -if((BUILD_LIB AND BUILD_SHARED_LIBS) OR (PKG_PYTHON)) - find_package(PythonInterp) - if (PYTHONINTERP_FOUND) - execute_process(COMMAND ${PYTHON_EXECUTABLE} +if(BUILD_SHARED_LIBS OR PKG_PYTHON) + if(CMAKE_VERSION VERSION_LESS 3.12) + find_package(PythonInterp) # Deprecated since version 3.12 + if(PYTHONINTERP_FOUND) + set(Python_EXECUTABLE ${PYTHON_EXECUTABLE}) + endif() + else() + find_package(Python COMPONENTS Interpreter) + endif() + if (Python_EXECUTABLE) + execute_process(COMMAND ${Python_EXECUTABLE} -c "import distutils.sysconfig as cg; print(cg.get_python_lib(1,0,prefix='${CMAKE_INSTALL_PREFIX}'))" OUTPUT_VARIABLE PYTHON_DEFAULT_INSTDIR OUTPUT_STRIP_TRAILING_WHITESPACE) set(PYTHON_INSTDIR ${PYTHON_DEFAULT_INSTDIR} CACHE PATH "Installation folder for LAMMPS Python module") @@ -698,67 +665,84 @@ include(CodeCoverage) ############################################################################### # Print package summary ############################################################################### -foreach(PKG ${DEFAULT_PACKAGES} ${ACCEL_PACKAGES}) +foreach(PKG ${STANDARD_PACKAGES} ${SUFFIX_PACKAGES}) if(PKG_${PKG}) message(STATUS "Building package: ${PKG}") endif() endforeach() -get_directory_property(CPPFLAGS DIRECTORY ${CMAKE_SOURCE_DIR} COMPILE_DEFINITIONS) +get_target_property(DEFINES lammps COMPILE_DEFINITIONS) include(FeatureSummary) feature_summary(DESCRIPTION "The following tools and libraries have been found and configured:" WHAT PACKAGES_FOUND) message(STATUS "<<< Build configuration >>> - Build type ${CMAKE_BUILD_TYPE} - Install path ${CMAKE_INSTALL_PREFIX} - Generator ${CMAKE_GENERATOR} using ${CMAKE_MAKE_PROGRAM} - Compilers and Flags: - C++ Compiler ${CMAKE_CXX_COMPILER} - Type ${CMAKE_CXX_COMPILER_ID} - Version ${CMAKE_CXX_COMPILER_VERSION} - C++ Flags ${CMAKE_CXX_FLAGS} ${CMAKE_CXX_FLAGS_${BTYPE}} - Defines ${CPPFLAGS}") + Build type: ${CMAKE_BUILD_TYPE} + Install path: ${CMAKE_INSTALL_PREFIX} + Generator: ${CMAKE_GENERATOR} using ${CMAKE_MAKE_PROGRAM} +-- <<< Compilers and Flags: >>> +-- C++ Compiler: ${CMAKE_CXX_COMPILER} + Type: ${CMAKE_CXX_COMPILER_ID} + Version: ${CMAKE_CXX_COMPILER_VERSION} + C++ Flags: ${CMAKE_CXX_FLAGS} ${CMAKE_CXX_FLAGS_${BTYPE}} + Defines: ${DEFINES}") +get_target_property(OPTIONS lammps COMPILE_OPTIONS) +if(OPTIONS) + message(" Options: ${OPTIONS}") +endif() get_property(LANGUAGES GLOBAL PROPERTY ENABLED_LANGUAGES) list (FIND LANGUAGES "Fortran" _index) if (${_index} GREATER -1) - message(STATUS "Fortran Compiler ${CMAKE_Fortran_COMPILER} - Type ${CMAKE_Fortran_COMPILER_ID} - Version ${CMAKE_Fortran_COMPILER_VERSION} - Fortran Flags ${CMAKE_Fortran_FLAGS} ${CMAKE_Fortran_FLAGS_${BTYPE}}") + message(STATUS "Fortran Compiler: ${CMAKE_Fortran_COMPILER} + Type: ${CMAKE_Fortran_COMPILER_ID} + Version: ${CMAKE_Fortran_COMPILER_VERSION} + Fortran Flags:${CMAKE_Fortran_FLAGS} ${CMAKE_Fortran_FLAGS_${BTYPE}}") endif() list (FIND LANGUAGES "C" _index) if (${_index} GREATER -1) - message(STATUS "C compiler ${CMAKE_C_COMPILER} - Type ${CMAKE_C_COMPILER_ID} - Version ${CMAKE_C_COMPILER_VERSION} - C Flags ${CMAKE_C_FLAGS} ${CMAKE_C_FLAGS_${BTYPE}}") + message(STATUS "C compiler: ${CMAKE_C_COMPILER} + Type: ${CMAKE_C_COMPILER_ID} + Version: ${CMAKE_C_COMPILER_VERSION} + C Flags: ${CMAKE_C_FLAGS} ${CMAKE_C_FLAGS_${BTYPE}}") endif() +message(STATUS "<<< Linker flags: >>>") +message(STATUS "Executable name: ${LAMMPS_BINARY}") if(CMAKE_EXE_LINKER_FLAGS) - message(STATUS "Linker flags: - Executable ${CMAKE_EXE_LINKER_FLAGS}") + message(STATUS "Executable linker flags: ${CMAKE_EXE_LINKER_FLAGS}") endif() if(BUILD_SHARED_LIBS) - message(STATUS "Shared library flags: ${CMAKE_SHARED_LINKER_FLAGS}") + message(STATUS "Shared library flags: ${CMAKE_SHARED_LINKER_FLAGS}") else() - message(STATUS "Static library flags: ${CMAKE_STATIC_LINKER_FLAGS}") + message(STATUS "Static library flags: ${CMAKE_STATIC_LINKER_FLAGS}") endif() -message(STATUS "Link libraries: ${LAMMPS_LINK_LIBS}") if(BUILD_MPI) - message(STATUS "Using MPI with headers in ${MPI_CXX_INCLUDE_PATH} and these libraries: ${MPI_CXX_LIBRARIES};${MPI_Fortran_LIBRARIES}") + message(STATUS "<<< MPI flags >>> +-- MPI_defines: ${MPI_CXX_COMPILE_DEFINITIONS} +-- MPI includes: ${MPI_CXX_INCLUDE_PATH} +-- MPI libraries: ${MPI_CXX_LIBRARIES};${MPI_Fortran_LIBRARIES}") endif() if(PKG_GPU) - message(STATUS "GPU API: ${GPU_API}") + message(STATUS "<<< GPU package settings >>> +-- GPU API: ${GPU_API}") if(GPU_API STREQUAL "CUDA") message(STATUS "GPU architecture: ${GPU_ARCH}") elseif(GPU_API STREQUAL "OPENCL") - message(STATUS "OpenCL parameter tuning: ${OCL_TUNE}") + message(STATUS "OpenCL tuning: ${OCL_TUNE}") + elseif(GPU_API STREQUAL "HIP") + message(STATUS "HIP platform: ${HIP_PLATFORM}") + message(STATUS "HIP architecture: ${HIP_ARCH}") + if(HIP_USE_DEVICE_SORT) + message(STATUS "HIP GPU sorting: on") + else() + message(STATUS "HIP GPU sorting: off") + endif() endif() - message(STATUS "GPU precision: ${GPU_PREC}") + message(STATUS "GPU precision: ${GPU_PREC}") endif() if(PKG_KOKKOS) message(STATUS "Kokkos Arch: ${KOKKOS_ARCH}") endif() if(PKG_KSPACE) - message(STATUS "Using ${FFT} as primary FFT library") + message(STATUS "<<< FFT settings >>> +-- Primary FFT lib: ${FFT}") if(FFT_SINGLE) message(STATUS "Using single precision FFTs") else() @@ -770,7 +754,7 @@ if(PKG_KSPACE) message(STATUS "Using non-threaded FFTs") endif() if(PKG_KOKKOS) - if(KOKKOS_ENABLE_CUDA) + if(Kokkos_ENABLE_CUDA) if (${FFT} STREQUAL "KISS") message(STATUS "Kokkos FFT: KISS") else() diff --git a/cmake/FindLAMMPS.cmake.in b/cmake/FindLAMMPS.cmake.in deleted file mode 100644 index 586df83c2d080197ea0256794febd395ab81cc63..0000000000000000000000000000000000000000 --- a/cmake/FindLAMMPS.cmake.in +++ /dev/null @@ -1,48 +0,0 @@ -# - Find liblammps -# Find the native liblammps headers and libraries. -# -# The following variables will set: -# LAMMPS_INCLUDE_DIRS - where to find lammps/library.h, etc. -# LAMMPS_LIBRARIES - List of libraries when using lammps. -# LAMMPS_API_DEFINES - lammps library api defines -# LAMMPS_VERSION - lammps library version -# LAMMPS_FOUND - True if liblammps found. -# -# In addition a LAMMPS::LAMMPS imported target is getting created. -# -# LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator -# http://lammps.sandia.gov, Sandia National Laboratories -# Steve Plimpton, sjplimp@sandia.gov -# -# Copyright (2003) Sandia Corporation. Under the terms of Contract -# DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains -# certain rights in this software. This software is distributed under -# the GNU General Public License. -# -# See the README file in the top-level LAMMPS directory. -# - -find_package(PkgConfig) - -pkg_check_modules(PC_LAMMPS liblammps@LAMMPS_LIB_SUFFIX@) -find_path(LAMMPS_INCLUDE_DIR lammps/library.h HINTS ${PC_LAMMPS_INCLUDE_DIRS} @CMAKE_INSTALL_FULL_INCLUDEDIR@) - -set(LAMMPS_VERSION @LAMMPS_VERSION@) -set(LAMMPS_API_DEFINES @LAMMPS_API_DEFINES@) - -find_library(LAMMPS_LIBRARY NAMES lammps@LAMMPS_LIB_SUFFIX@ HINTS ${PC_LAMMPS_LIBRARY_DIRS} @CMAKE_INSTALL_FULL_LIBDIR@) - -set(LAMMPS_INCLUDE_DIRS "${LAMMPS_INCLUDE_DIR}") -set(LAMMPS_LIBRARIES "${LAMMPS_LIBRARY}") - -include(FindPackageHandleStandardArgs) -# handle the QUIETLY and REQUIRED arguments and set LAMMPS_FOUND to TRUE -# if all listed variables are TRUE -find_package_handle_standard_args(LAMMPS REQUIRED_VARS LAMMPS_LIBRARY LAMMPS_INCLUDE_DIR VERSION_VAR LAMMPS_VERSION) - -mark_as_advanced(LAMMPS_INCLUDE_DIR LAMMPS_LIBRARY) - -if(LAMMPS_FOUND AND NOT TARGET LAMMPS::LAMMPS) - add_library(LAMMPS::LAMMPS UNKNOWN IMPORTED) - set_target_properties(LAMMPS::LAMMPS PROPERTIES IMPORTED_LOCATION "${LAMMPS_LIBRARY}" INTERFACE_INCLUDE_DIRECTORIES "${LAMMPS_INCLUDE_DIR}" INTERFACE_COMPILE_DEFINITIONS "${LAMMPS_API_DEFINES}") -endif() diff --git a/cmake/LAMMPSConfig.cmake.in b/cmake/LAMMPSConfig.cmake.in new file mode 100644 index 0000000000000000000000000000000000000000..0dacfc208965545c82b72fff7a9602a8aec018c9 --- /dev/null +++ b/cmake/LAMMPSConfig.cmake.in @@ -0,0 +1,5 @@ +include(CMakeFindDependencyMacro) +if(@BUILD_MPI@) + find_dependency(MPI REQUIRED CXX) +endif() +include("${CMAKE_CURRENT_LIST_DIR}/LAMMPS_Targets.cmake") diff --git a/cmake/Modules/CodeCoverage.cmake b/cmake/Modules/CodeCoverage.cmake index d018db43d98aebcd934e0e77c0ed092a554b603d..3b323e37ff2e7f38879302ca8e418891ce9adbb8 100644 --- a/cmake/Modules/CodeCoverage.cmake +++ b/cmake/Modules/CodeCoverage.cmake @@ -15,14 +15,35 @@ if(ENABLE_COVERAGE) gen_coverage_xml COMMAND ${GCOVR_BINARY} -s -x -r ${ABSOLUTE_LAMMPS_SOURCE_DIR} --object-directory=${CMAKE_BINARY_DIR} -o coverage.xml WORKING_DIRECTORY ${CMAKE_BINARY_DIR} - COMMENT "Generating XML Coverage Report..." + COMMENT "Generating XML coverage report..." ) + set(COVERAGE_HTML_DIR ${CMAKE_BINARY_DIR}/coverage_html) + + add_custom_target(coverage_html_folder + COMMAND ${CMAKE_COMMAND} -E make_directory ${COVERAGE_HTML_DIR}) + add_custom_target( gen_coverage_html - COMMAND ${GCOVR_BINARY} -s --html --html-details -r ${ABSOLUTE_LAMMPS_SOURCE_DIR} --object-directory=${CMAKE_BINARY_DIR} -o coverage.html + COMMAND ${GCOVR_BINARY} -s --html --html-details -r ${ABSOLUTE_LAMMPS_SOURCE_DIR} --object-directory=${CMAKE_BINARY_DIR} -o ${COVERAGE_HTML_DIR}/index.html WORKING_DIRECTORY ${CMAKE_BINARY_DIR} - COMMENT "Generating HTML Coverage Report..." + COMMENT "Generating HTML coverage report..." + ) + add_dependencies(gen_coverage_html coverage_html_folder) + + add_custom_target(clean_coverage_html + ${CMAKE_COMMAND} -E remove_directory ${COVERAGE_HTML_DIR} + COMMENT "Deleting HTML coverage report..." + ) + + add_custom_target(reset_coverage + ${CMAKE_COMMAND} -E remove -f */*.gcda */*/*.gcda */*/*/*.gcda + */*/*/*/*.gcda */*/*/*/*/*.gcda */*/*/*/*/*/*.gcda + */*/*/*/*/*/*/*.gcda */*/*/*/*/*/*/*/*.gcda + */*/*/*/*/*/*/*/*/*.gcda */*/*/*/*/*/*/*/*/*/*.gcda + WORKIND_DIRECTORY ${CMAKE_BINARY_DIR} + COMMENT "Deleting coverage data files..." ) + add_dependencies(reset_coverage clean_coverage_html) endif() endif() diff --git a/cmake/Modules/Documentation.cmake b/cmake/Modules/Documentation.cmake index feff66a9b2520b4f54b214d7873337ae48269064..929d6ebd4bd9d7903494c5a1f4f5e5e82a934221 100644 --- a/cmake/Modules/Documentation.cmake +++ b/cmake/Modules/Documentation.cmake @@ -1,10 +1,8 @@ ############################################################################### # Build documentation ############################################################################### -option(BUILD_DOC "Build LAMMPS documentation" OFF) +option(BUILD_DOC "Build LAMMPS HTML documentation" OFF) if(BUILD_DOC) - include(ProcessorCount) - ProcessorCount(NPROCS) find_package(PythonInterp 3 REQUIRED) set(VIRTUALENV ${PYTHON_EXECUTABLE} -m virtualenv) @@ -26,15 +24,49 @@ if(BUILD_DOC) COMMAND ${DOCENV_BINARY_DIR}/pip install --upgrade ${LAMMPS_DOC_DIR}/utils/converters ) + # download mathjax distribution and unpack to folder "mathjax" + file(DOWNLOAD "https://github.com/mathjax/MathJax/archive/3.0.5.tar.gz" + "${CMAKE_CURRENT_BINARY_DIR}/mathjax.tar.gz" + EXPECTED_MD5 5d9d3799cce77a1a95eee6be04eb68e7) + + if(NOT EXISTS ${CMAKE_CURRENT_BINARY_DIR}/mathjax) + execute_process(COMMAND ${CMAKE_COMMAND} -E tar xzf mathjax.tar.gz WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}) + file(GLOB MATHJAX_VERSION_DIR ${CMAKE_CURRENT_BINARY_DIR}/MathJax-*) + execute_process(COMMAND ${CMAKE_COMMAND} -E rename ${MATHJAX_VERSION_DIR} ${CMAKE_CURRENT_BINARY_DIR}/mathjax) + endif() + file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/html/_static/mathjax) + file(COPY ${CMAKE_CURRENT_BINARY_DIR}/mathjax/es5 DESTINATION ${CMAKE_CURRENT_BINARY_DIR}/html/_static/mathjax/) + + # note, this may run in parallel with other tasks, so we must not use multiple processes here add_custom_command( OUTPUT html DEPENDS ${DOC_SOURCES} docenv requirements.txt - COMMAND ${DOCENV_BINARY_DIR}/sphinx-build -j ${NPROCS} -b html -c ${LAMMPS_DOC_DIR}/utils/sphinx-config -d ${CMAKE_BINARY_DIR}/doctrees ${LAMMPS_DOC_DIR}/src html + COMMAND ${DOCENV_BINARY_DIR}/sphinx-build -b html -c ${LAMMPS_DOC_DIR}/utils/sphinx-config -d ${CMAKE_BINARY_DIR}/doctrees ${LAMMPS_DOC_DIR}/src html ) + # copy selected image files to html output tree + file(MAKE_DIRECTORY ${CMAKE_BINARY_DIR}/html/JPG) + set(HTML_EXTRA_IMAGES balance_nonuniform.jpg balance_rcb.jpg + balance_uniform.jpg bow_tutorial_01.png bow_tutorial_02.png + bow_tutorial_03.png bow_tutorial_04.png bow_tutorial_05.png + dump1.jpg dump2.jpg examples_mdpd.gif gran_funnel.png gran_mixer.png + hop1.jpg hop2.jpg saed_ewald_intersect.jpg saed_mesh.jpg + screenshot_atomeye.jpg screenshot_gl.jpg screenshot_pymol.jpg + screenshot_vmd.jpg sinusoid.jpg xrd_mesh.jpg) + set(HTML_IMAGE_TARGETS "") + foreach(_IMG ${HTML_EXTRA_IMAGES}) + string(PREPEND _IMG JPG/) + list(APPEND HTML_IMAGE_TARGETS "html/${_IMG}") + add_custom_command( + OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/html/${_IMG} + DEPENDS ${LAMMPS_DOC_DIR}/src/${_IMG} html/JPG + COMMAND ${CMAKE_COMMAND} -E copy ${LAMMPS_DOC_DIR}/src/${_IMG} ${CMAKE_BINARY_DIR}/html/${_IMG} + ) + endforeach() + add_custom_target( doc ALL - DEPENDS html + DEPENDS html html/_static/mathjax/es5 ${HTML_IMAGE_TARGETS} SOURCES ${LAMMPS_DOC_DIR}/utils/requirements.txt ${DOC_SOURCES} ) diff --git a/cmake/Modules/FindCUB.cmake b/cmake/Modules/FindCUB.cmake new file mode 100644 index 0000000000000000000000000000000000000000..848e68e81512144ad56124bdf0dcbcce0f6fa50e --- /dev/null +++ b/cmake/Modules/FindCUB.cmake @@ -0,0 +1,16 @@ +# - Find CUB +# Find the CUB header library +# +# CUB_INCLUDE_DIRS - where to find cub/cub.cuh +# CUB_FOUND - True if CUB found. +# + +find_path(CUB_INCLUDE_DIR cub.cuh PATH_SUFFIXES cub) + +include(FindPackageHandleStandardArgs) +# handle the QUIETLY and REQUIRED arguments and set CUB_FOUND to TRUE +# if all listed variables are TRUE + +find_package_handle_standard_args(CUB DEFAULT_MSG CUB_INCLUDE_DIR) + +mark_as_advanced(CUB_INCLUDE_DIR) diff --git a/cmake/Modules/FindFFTW3.cmake b/cmake/Modules/FindFFTW3.cmake index 63752f85dfa889980598d3891e2dbc3c66be5c87..708ec495091352fded80d323b37942bdb17e086f 100644 --- a/cmake/Modules/FindFFTW3.cmake +++ b/cmake/Modules/FindFFTW3.cmake @@ -14,14 +14,34 @@ find_path(FFTW3_INCLUDE_DIR fftw3.h HINTS ${PC_FFTW3_INCLUDE_DIRS}) find_library(FFTW3_LIBRARY NAMES fftw3 HINTS ${PC_FFTW3_LIBRARY_DIRS}) find_library(FFTW3_OMP_LIBRARY NAMES fftw3_omp HINTS ${PC_FFTW3_LIBRARY_DIRS}) -set(FFTW3_INCLUDE_DIRS ${FFTW3_INCLUDE_DIR}) -set(FFTW3_LIBRARIES ${FFTW3_LIBRARY}) -set(FFTW3_OMP_LIBRARIES ${FFTW3_OMP_LIBRARY}) - include(FindPackageHandleStandardArgs) # handle the QUIETLY and REQUIRED arguments and set FFTW3_FOUND to TRUE # if all listed variables are TRUE find_package_handle_standard_args(FFTW3 DEFAULT_MSG FFTW3_LIBRARY FFTW3_INCLUDE_DIR) +# Copy the results to the output variables and target. +if(FFTW3_FOUND) + set(FFTW3_LIBRARIES ${FFTW3_LIBRARY} ) + set(FFTW3_INCLUDE_DIRS ${FFTW3_INCLUDE_DIR} ) + + if(NOT TARGET FFTW3::FFTW3) + add_library(FFTW3::FFTW3 UNKNOWN IMPORTED) + set_target_properties(FFTW3::FFTW3 PROPERTIES + IMPORTED_LINK_INTERFACE_LANGUAGES "C" + IMPORTED_LOCATION "${FFTW3_LIBRARY}" + INTERFACE_INCLUDE_DIRECTORIES "${FFTW3_INCLUDE_DIRS}") + endif() + if(FFTW3_OMP_LIBRARY) + set(FFTW3_OMP_LIBRARIES ${FFTW3_OMP_LIBRARY}) + if(NOT TARGET FFTW3::FFTW3_OMP) + add_library(FFTW3::FFTW3_OMP UNKNOWN IMPORTED) + set_target_properties(FFTW3::FFTW3_OMP PROPERTIES + IMPORTED_LINK_INTERFACE_LANGUAGES "C" + IMPORTED_LOCATION "${FFTW3_OMP_LIBRARY}" + INTERFACE_INCLUDE_DIRECTORIES "${FFTW3_INCLUDE_DIRS}") + endif() + endif() +endif() + mark_as_advanced(FFTW3_INCLUDE_DIR FFTW3_LIBRARY FFTW3_OMP_LIBRARY) diff --git a/cmake/Modules/FindFFTW3F.cmake b/cmake/Modules/FindFFTW3F.cmake index c67aa5faf1ca5b7a95eac870fa268f9fa2e26e2c..3dbcdaa04e190c79d80281e9f91fa166755f585a 100644 --- a/cmake/Modules/FindFFTW3F.cmake +++ b/cmake/Modules/FindFFTW3F.cmake @@ -13,14 +13,34 @@ find_path(FFTW3F_INCLUDE_DIR fftw3.h HINTS ${PC_FFTW3F_INCLUDE_DIRS}) find_library(FFTW3F_LIBRARY NAMES fftw3f HINTS ${PC_FFTW3F_LIBRARY_DIRS}) find_library(FFTW3F_OMP_LIBRARY NAMES fftw3f_omp HINTS ${PC_FFTW3F_LIBRARY_DIRS}) -set(FFTW3F_INCLUDE_DIRS ${FFTW3F_INCLUDE_DIR}) -set(FFTW3F_LIBRARIES ${FFTW3F_LIBRARY}) -set(FFTW3F_OMP_LIBRARIES ${FFTW3F_OMP_LIBRARY}) - include(FindPackageHandleStandardArgs) # handle the QUIETLY and REQUIRED arguments and set FFTW3F_FOUND to TRUE # if all listed variables are TRUE find_package_handle_standard_args(FFTW3F DEFAULT_MSG FFTW3F_LIBRARY FFTW3F_INCLUDE_DIR) -mark_as_advanced(FFTW3F_INCLUDE_DIR FFTW3F_LIBRARY) +# Copy the results to the output variables and target. +if(FFTW3F_FOUND) + set(FFTW3F_LIBRARIES ${FFTW3F_LIBRARY} ) + set(FFTW3F_INCLUDE_DIRS ${FFTW3F_INCLUDE_DIR} ) + + if(NOT TARGET FFTW3F::FFTW3F) + add_library(FFTW3F::FFTW3F UNKNOWN IMPORTED) + set_target_properties(FFTW3F::FFTW3F PROPERTIES + IMPORTED_LINK_INTERFACE_LANGUAGES "C" + IMPORTED_LOCATION "${FFTW3F_LIBRARY}" + INTERFACE_INCLUDE_DIRECTORIES "${FFTW3F_INCLUDE_DIRS}") + endif() + if(FFTW3F_OMP_LIBRARY) + set(FFTW3F_OMP_LIBRARIES ${FFTW3F_OMP_LIBRARY}) + if(NOT TARGET FFTW3F::FFTW3F_OMP) + add_library(FFTW3F::FFTW3F_OMP UNKNOWN IMPORTED) + set_target_properties(FFTW3F::FFTW3F_OMP PROPERTIES + IMPORTED_LINK_INTERFACE_LANGUAGES "C" + IMPORTED_LOCATION "${FFTW3F_OMP_LIBRARY}" + INTERFACE_INCLUDE_DIRECTORIES "${FFTW3F_INCLUDE_DIRS}") + endif() + endif() +endif() + +mark_as_advanced(FFTW3F_INCLUDE_DIR FFTW3F_LIBRARY FFTW3F_OMP_LIBRARY) diff --git a/cmake/Modules/FindKIM-API.cmake b/cmake/Modules/FindKIM-API.cmake deleted file mode 100644 index 17c195e62f515752d893118cd9a0d08e0ad8ae58..0000000000000000000000000000000000000000 --- a/cmake/Modules/FindKIM-API.cmake +++ /dev/null @@ -1,85 +0,0 @@ -# -# CDDL HEADER START -# -# The contents of this file are subject to the terms of the Common Development -# and Distribution License Version 1.0 (the "License"). -# -# You can obtain a copy of the license at -# http://www.opensource.org/licenses/CDDL-1.0. See the License for the -# specific language governing permissions and limitations under the License. -# -# When distributing Covered Code, include this CDDL HEADER in each file and -# include the License file in a prominent location with the name LICENSE.CDDL. -# If applicable, add the following below this CDDL HEADER, with the fields -# enclosed by brackets "[]" replaced with your own identifying information: -# -# Portions Copyright (c) [yyyy] [name of copyright owner]. All rights reserved. -# -# CDDL HEADER END -# - -# -# Copyright (c) 2013--2019, Regents of the University of Minnesota. -# All rights reserved. -# -# Contributors: -# Richard Berger -# Christoph Junghans -# Ryan S. Elliott -# - -# - Find KIM-API -# -# sets standard pkg_check_modules variables plus: -# -# KIM-API-CMAKE_C_COMPILER -# KIM-API-CMAKE_CXX_COMPILER -# KIM-API-CMAKE_Fortran_COMPILER -# - -function(_KIMAPI_GET_VERSION _OUT_ver _version_hdr) - if(NOT EXISTS ${_version_hdr}) - message(FATAL_ERROR "Header file ${_version_hdr} not found (check value of KIM-API_INCLUDE_DIR)") - endif() - foreach(_var KIM_VERSION_MAJOR KIM_VERSION_MINOR KIM_VERSION_PATCH) - file(STRINGS ${_version_hdr} _contents REGEX "#define ${_var}[ \t]+") - if(_contents) - string(REGEX REPLACE ".*#define ${_var}[ \t]+([0-9]+).*" "\\1" _${_var} "${_contents}") - if(${_${_var}} STREQUAL "") - message(FATAL_ERROR "Version parsing failed for ${_var} in ${_version_hdr}, got empty return!") - elseif(NOT ${_${_var}} MATCHES "^[0-9]+$") - message(FATAL_ERROR "Version parsing failed for ${_var} in ${_version_hdr}, excepted a number but got ${_${_var}}!") - endif() - else() - message(FATAL_ERROR "No ${_var} line found in include file ${_version_hdr}") - endif() - endforeach() - set(${_OUT_ver} ${_KIM_VERSION_MAJOR}.${_KIM_VERSION_MINOR}.${_KIM_VERSION_PATCH} PARENT_SCOPE) -endfunction() - -if(KIM-API_FIND_QUIETLY) - set(REQ_OR_QUI "QUIET") -else() - set(REQ_OR_QUI "REQUIRED") -endif() - -find_package(PkgConfig ${REQ_OR_QUI}) -include(FindPackageHandleStandardArgs) - -pkg_check_modules(KIM-API ${REQ_OR_QUI} libkim-api>=2.0) - -if(KIM-API_FOUND) - pkg_get_variable(KIM-API-CMAKE_C_COMPILER libkim-api CMAKE_C_COMPILER) - pkg_get_variable(KIM-API-CMAKE_CXX_COMPILER libkim-api CMAKE_CXX_COMPILER) - pkg_get_variable(KIM-API_CMAKE_Fortran_COMPILER libkim-api CMAKE_Fortran_COMPILER) -endif() - -if(KIM-API_INCLUDEDIR) - _KIMAPI_GET_VERSION(KIM-API_VERSION ${KIM-API_INCLUDEDIR}/KIM_Version.h) -else() - set(KIM-API_VERSION 0) -endif() - -# handle the QUIETLY and REQUIRED arguments and set KIM-API_FOUND to TRUE -# if all listed variables are TRUE -find_package_handle_standard_args(KIM-API REQUIRED_VARS KIM-API_LIBRARIES VERSION_VAR KIM-API_VERSION) diff --git a/cmake/Modules/FindLATTE.cmake b/cmake/Modules/FindLATTE.cmake deleted file mode 100644 index 74d5173bf0725ae74f0eaf08214b8b593a74e473..0000000000000000000000000000000000000000 --- a/cmake/Modules/FindLATTE.cmake +++ /dev/null @@ -1,18 +0,0 @@ -# - Find latte -# Find the native LATTE libraries. -# -# LATTE_LIBRARIES - List of libraries when using latte. -# LATTE_FOUND - True if latte found. -# - -find_library(LATTE_LIBRARY NAMES latte) - -set(LATTE_LIBRARIES ${LATTE_LIBRARY}) - -include(FindPackageHandleStandardArgs) -# handle the QUIETLY and REQUIRED arguments and set LATTE_FOUND to TRUE -# if all listed variables are TRUE - -find_package_handle_standard_args(LATTE DEFAULT_MSG LATTE_LIBRARY) - -mark_as_advanced(LATTE_LIBRARY) diff --git a/cmake/Modules/FindMKL.cmake b/cmake/Modules/FindMKL.cmake index 4246062103f943c2c54347c2cbc796db96cff54e..e3dc60ad9749a2c0d5ddf6e1c30132af03a6c00e 100644 --- a/cmake/Modules/FindMKL.cmake +++ b/cmake/Modules/FindMKL.cmake @@ -10,13 +10,22 @@ find_path(MKL_INCLUDE_DIR mkl_dfti.h HINTS $ENV{MKLROOT}/include) find_library(MKL_LIBRARY NAMES mkl_rt HINTS $ENV{MKLROOT}/lib $ENV{MKLROOT}/lib/intel64) -set(MKL_LIBRARIES ${MKL_LIBRARY}) -set(MKL_INCLUDE_DIRS ${MKL_INCLUDE_DIR}) - include(FindPackageHandleStandardArgs) # handle the QUIETLY and REQUIRED arguments and set MKL_FOUND to TRUE # if all listed variables are TRUE find_package_handle_standard_args(MKL DEFAULT_MSG MKL_LIBRARY MKL_INCLUDE_DIR) +if(MKL_FOUND) + set(MKL_LIBRARIES ${MKL_LIBRARY}) + set(MKL_INCLUDE_DIRS ${MKL_INCLUDE_DIR}) + + if(NOT TARGET MKL::MKL) + add_library(MKL::MKL UNKNOWN IMPORTED) + set_target_properties(MKL::MKL PROPERTIES + IMPORTED_LOCATION "${MKL_LIBRARY}" + INTERFACE_INCLUDE_DIRECTORIES "${MKL_INCLUDE_DIR}") + endif() +endif() + mark_as_advanced(MKL_INCLUDE_DIR MKL_LIBRARY ) diff --git a/cmake/Modules/FindMSCG.cmake b/cmake/Modules/FindMSCG.cmake index 311ff7803836aa43c2c48bd4040a60686b1803db..b301303dbec9dbdb186d44b39f806d1c60e2bc45 100644 --- a/cmake/Modules/FindMSCG.cmake +++ b/cmake/Modules/FindMSCG.cmake @@ -10,13 +10,23 @@ find_path(MSCG_INCLUDE_DIR mscg.h PATH_SUFFIXES mscg) find_library(MSCG_LIBRARY NAMES mscg) -set(MSCG_LIBRARIES ${MSCG_LIBRARY}) -set(MSCG_INCLUDE_DIRS ${MSCG_INCLUDE_DIR}) - include(FindPackageHandleStandardArgs) # handle the QUIETLY and REQUIRED arguments and set MSCG_FOUND to TRUE # if all listed variables are TRUE find_package_handle_standard_args(MSCG DEFAULT_MSG MSCG_LIBRARY MSCG_INCLUDE_DIR) +# Copy the results to the output variables and target. +if(MSCG_FOUND) + set(MSCG_LIBRARIES ${MSCG_LIBRARY}) + set(MSCG_INCLUDE_DIRS ${MSCG_INCLUDE_DIR}) + + if(NOT TARGET MSCG::MSCG) + add_library(MSCG::MSCG UNKNOWN IMPORTED) + set_target_properties(MSCG::MSCG PROPERTIES + IMPORTED_LOCATION "${MSCG_LIBRARY}" + INTERFACE_INCLUDE_DIRECTORIES "${MSCG_INCLUDE_DIR}") + endif() +endif() + mark_as_advanced(MSCG_INCLUDE_DIR MSCG_LIBRARY ) diff --git a/cmake/Modules/FindNetCDF.cmake b/cmake/Modules/FindNetCDF.cmake index 2a992b6b3b532513d1f2886cd5e76aeaba32df20..5c8caa920820da14855e51ab6032b3d7a4e775b7 100644 --- a/cmake/Modules/FindNetCDF.cmake +++ b/cmake/Modules/FindNetCDF.cmake @@ -120,3 +120,14 @@ set (NETCDF_INCLUDE_DIRS ${NetCDF_includes}) include (FindPackageHandleStandardArgs) find_package_handle_standard_args (NetCDF DEFAULT_MSG NETCDF_LIBRARIES NETCDF_INCLUDE_DIRS NETCDF_HAS_INTERFACES) + +# Copy the results to the output variables and target. +if(NetCDF_FOUND) + if(NOT TARGET NetCDF::NetCDF) + add_library(NetCDF::NetCDF UNKNOWN IMPORTED) + set_target_properties(NetCDF::NetCDF PROPERTIES + IMPORTED_LOCATION "${NETCDF_LIBRARY}" + INTERFACE_INCLUDE_DIRECTORIES "${NETCDF_INCLUDE_DIRS}" + INTERFACE_LINK_LIBRARIES "${NETCDF_LIBRARIES}") + endif() +endif() diff --git a/cmake/Modules/FindPNetCDF.cmake b/cmake/Modules/FindPNetCDF.cmake index bc3a5f9538b17c82201437f3ee378e9be0bf49fa..e501e9af4920553f638fb12132f84e495dc9e959 100644 --- a/cmake/Modules/FindPNetCDF.cmake +++ b/cmake/Modules/FindPNetCDF.cmake @@ -53,3 +53,12 @@ include (FindPackageHandleStandardArgs) find_package_handle_standard_args (PNetCDF DEFAULT_MSG PNETCDF_LIBRARIES PNETCDF_INCLUDES) mark_as_advanced (PNETCDF_LIBRARIES PNETCDF_INCLUDES) + +if(PNetCDF_FOUND) + if(NOT TARGET PNetCDF::PNetCDF) + add_library(PNetCDF::PNetCDF UNKNOWN IMPORTED) + set_target_properties(PNetCDF::PNetCDF PROPERTIES + IMPORTED_LOCATION "${PNETCDF_LIBRARIES}" + INTERFACE_INCLUDE_DIRECTORIES "${PNETCDF_INCLUDES}") + endif() +endif() diff --git a/cmake/Modules/FindQUIP.cmake b/cmake/Modules/FindQUIP.cmake index b6d87d11fa1cc82fd65452074a48e7469f5d39b4..277cfae49ed2a31b03a094c79a04a6d980e9a19d 100644 --- a/cmake/Modules/FindQUIP.cmake +++ b/cmake/Modules/FindQUIP.cmake @@ -7,12 +7,21 @@ find_library(QUIP_LIBRARY NAMES quip) -set(QUIP_LIBRARIES ${QUIP_LIBRARY}) - include(FindPackageHandleStandardArgs) # handle the QUIETLY and REQUIRED arguments and set QUIP_FOUND to TRUE # if all listed variables are TRUE find_package_handle_standard_args(QUIP DEFAULT_MSG QUIP_LIBRARY) +# Copy the results to the output variables and target. +if(QUIP_FOUND) + set(QUIP_LIBRARIES ${QUIP_LIBRARY}) + + if(NOT TARGET QUIP::QUIP) + add_library(QUIP::QUIP UNKNOWN IMPORTED) + set_target_properties(QUIP::QUIP PROPERTIES + IMPORTED_LOCATION "${QUIP_LIBRARY}") + endif() +endif() + mark_as_advanced(QUIP_LIBRARY) diff --git a/cmake/Modules/FindTBB.cmake b/cmake/Modules/FindTBB.cmake deleted file mode 100644 index 8cc050817e6b919d3d77935afcd26f1fd4d1cce0..0000000000000000000000000000000000000000 --- a/cmake/Modules/FindTBB.cmake +++ /dev/null @@ -1,46 +0,0 @@ -# - Find parts of TBB -# Find the native TBB headers and libraries. -# -# TBB_INCLUDE_DIRS - where to find tbb.h, etc. -# TBB_LIBRARIES - List of libraries when using tbb. -# TBB_FOUND - True if tbb found. -# - -######################################################## -# TBB - -# TODO use more generic FindTBB - -find_path(TBB_INCLUDE_DIR NAMES tbb/tbb.h PATHS $ENV{TBBROOT}/include) -find_library(TBB_LIBRARY NAMES tbb PATHS $ENV{TBBROOT}/lib/intel64/gcc4.7 - $ENV{TBBROOT}/lib/intel64/gcc4.4 - $ENV{TBBROOT}/lib/intel64/gcc4.1) -set(TBB_LIBRARIES ${TBB_LIBRARY}) -set(TBB_INCLUDE_DIRS ${TBB_INCLUDE_DIR}) - -include(FindPackageHandleStandardArgs) -# handle the QUIETLY and REQUIRED arguments and set TBB_FOUND to TRUE -# if all listed variables are TRUE - -find_package_handle_standard_args(TBB DEFAULT_MSG TBB_LIBRARY TBB_INCLUDE_DIR) - -mark_as_advanced(TBB_INCLUDE_DIR TBB_LIBRARY ) - -######################################################## -# TBB Malloc - -find_path(TBB_MALLOC_INCLUDE_DIR NAMES tbb/tbb.h PATHS $ENV{TBBROOT}/include) -find_library(TBB_MALLOC_LIBRARY NAMES tbbmalloc PATHS $ENV{TBBROOT}/lib/intel64/gcc4.7 - $ENV{TBBROOT}/lib/intel64/gcc4.4 - $ENV{TBBROOT}/lib/intel64/gcc4.1) - -set(TBB_MALLOC_LIBRARIES ${TBB_MALLOC_LIBRARY}) -set(TBB_MALLOC_INCLUDE_DIRS ${TBB_MALLOC_INCLUDE_DIR}) - -include(FindPackageHandleStandardArgs) -# handle the QUIETLY and REQUIRED arguments and set TBB_MALLOC_FOUND to TRUE -# if all listed variables are TRUE - -find_package_handle_standard_args(TBB_MALLOC DEFAULT_MSG TBB_MALLOC_LIBRARY TBB_MALLOC_INCLUDE_DIR) - -mark_as_advanced(TBB_MALLOC_INCLUDE_DIR TBB_MALLOC_LIBRARY ) diff --git a/cmake/Modules/FindTBB_MALLOC.cmake b/cmake/Modules/FindTBB_MALLOC.cmake new file mode 100644 index 0000000000000000000000000000000000000000..d34b946ad350dec8baf18806b9149f171f073717 --- /dev/null +++ b/cmake/Modules/FindTBB_MALLOC.cmake @@ -0,0 +1,36 @@ +# - Find parts of TBB_MALLOC +# Find the native TBB_MALLOC headers and libraries. +# +# TBB_MALLOC_INCLUDE_DIRS - where to find tbb.h, etc. +# TBB_MALLOC_LIBRARIES - List of libraries when using tbb. +# TBB_MALLOC_FOUND - True if tbb found. +# + +######################################################## +# TBB Malloc + +find_path(TBB_MALLOC_INCLUDE_DIR NAMES tbb/tbb.h PATHS $ENV{TBBROOT}/include) +find_library(TBB_MALLOC_LIBRARY NAMES tbbmalloc PATHS $ENV{TBBROOT}/lib/intel64/gcc4.8 + $ENV{TBBROOT}/lib/intel64/gcc4.7 + $ENV{TBBROOT}/lib/intel64/gcc4.4 + $ENV{TBBROOT}/lib/intel64/gcc4.1) + +include(FindPackageHandleStandardArgs) +# handle the QUIETLY and REQUIRED arguments and set TBB_MALLOC_FOUND to TRUE +# if all listed variables are TRUE + +find_package_handle_standard_args(TBB_MALLOC DEFAULT_MSG TBB_MALLOC_LIBRARY TBB_MALLOC_INCLUDE_DIR) + +if(TBB_MALLOC_FOUND) + set(TBB_MALLOC_LIBRARIES ${TBB_MALLOC_LIBRARY}) + set(TBB_MALLOC_INCLUDE_DIRS ${TBB_MALLOC_INCLUDE_DIR}) + + if(NOT TARGET TBB::TBB_MALLOC) + add_library(TBB::TBB_MALLOC UNKNOWN IMPORTED) + set_target_properties(TBB::TBB_MALLOC PROPERTIES + IMPORTED_LOCATION "${TBB_MALLOC_LIBRARY}" + INTERFACE_INCLUDE_DIRECTORIES "${TBB_MALLOC_INCLUDE_DIR}") + endif() +endif() + +mark_as_advanced(TBB_MALLOC_INCLUDE_DIR TBB_MALLOC_LIBRARY ) diff --git a/cmake/Modules/FindVORO.cmake b/cmake/Modules/FindVORO.cmake index b0cccbcd1de79e30c9a18065654d141d9954844a..3f0fe98ff19bf67f684041d832a797d12adaab28 100644 --- a/cmake/Modules/FindVORO.cmake +++ b/cmake/Modules/FindVORO.cmake @@ -10,13 +10,23 @@ find_path(VORO_INCLUDE_DIR voro++.hh PATH_SUFFIXES voro++) find_library(VORO_LIBRARY NAMES voro++) -set(VORO_LIBRARIES ${VORO_LIBRARY}) -set(VORO_INCLUDE_DIRS ${VORO_INCLUDE_DIR}) - include(FindPackageHandleStandardArgs) # handle the QUIETLY and REQUIRED arguments and set VORO_FOUND to TRUE # if all listed variables are TRUE find_package_handle_standard_args(VORO DEFAULT_MSG VORO_LIBRARY VORO_INCLUDE_DIR) +# Copy the results to the output variables and target. +if(VORO_FOUND) + set(VORO_LIBRARIES ${VORO_LIBRARY}) + set(VORO_INCLUDE_DIRS ${VORO_INCLUDE_DIR}) + + if(NOT TARGET VORO::VORO) + add_library(VORO::VORO UNKNOWN IMPORTED) + set_target_properties(VORO::VORO PROPERTIES + IMPORTED_LOCATION "${VORO_LIBRARY}" + INTERFACE_INCLUDE_DIRECTORIES "${VORO_INCLUDE_DIR}") + endif() +endif() + mark_as_advanced(VORO_INCLUDE_DIR VORO_LIBRARY ) diff --git a/cmake/Modules/FindYAML.cmake b/cmake/Modules/FindYAML.cmake new file mode 100644 index 0000000000000000000000000000000000000000..e5b76de4e1a8409c2e99d938c7bd97aef5be1111 --- /dev/null +++ b/cmake/Modules/FindYAML.cmake @@ -0,0 +1,30 @@ +# - Find libyaml +# Find the native Yaml headers and libraries. +# +# YAML_INCLUDE_DIRS - where to find yaml.h +# YAML_LIBRARIES - List of libraries when using libyaml +# YAML_FOUND - True if libyaml is found. +# + +find_path(YAML_INCLUDE_DIR yaml.h PATH_SUFFIXES yaml) +find_library(YAML_LIBRARY NAMES yaml) + +# handle the QUIET and REQUIRED arguments and +# set YAML_FOUND to TRUE if all variables are non-zero +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args(YAML DEFAULT_MSG YAML_LIBRARY YAML_INCLUDE_DIR) + +# Copy the results to the output variables and target. +if(YAML_FOUND) + set(YAML_LIBRARIES ${YAML_LIBRARY}) + set(YAML_INCLUDE_DIRS ${YAML_INCLUDE_DIR}) + + if(NOT TARGET Yaml::Yaml) + add_library(Yaml::Yaml UNKNOWN IMPORTED) + set_target_properties(Yaml::Yaml PROPERTIES + IMPORTED_LOCATION "${YAML_LIBRARY}" + INTERFACE_INCLUDE_DIRECTORIES "${YAML_INCLUDE_DIR}") + endif() +endif() + +mark_as_advanced(YAML_INCLUDE_DIR YAML_LIBRARY) diff --git a/cmake/Modules/FindZMQ.cmake b/cmake/Modules/FindZMQ.cmake index 608ccda777336f9d84dfabd40a9c6bdba1bd12be..7d612c2eb38d519c61cc95d0eb123309332e26a9 100644 --- a/cmake/Modules/FindZMQ.cmake +++ b/cmake/Modules/FindZMQ.cmake @@ -1,8 +1,19 @@ find_path(ZMQ_INCLUDE_DIR zmq.h) find_library(ZMQ_LIBRARY NAMES zmq) -set(ZMQ_LIBRARIES ${ZMQ_LIBRARY}) -set(ZMQ_INCLUDE_DIRS ${ZMQ_INCLUDE_DIR}) - include(FindPackageHandleStandardArgs) find_package_handle_standard_args(ZMQ DEFAULT_MSG ZMQ_LIBRARY ZMQ_INCLUDE_DIR) + +# Copy the results to the output variables and target. +if(ZMQ_FOUND) + set(ZMQ_LIBRARIES ${ZMQ_LIBRARY}) + set(ZMQ_INCLUDE_DIRS ${ZMQ_INCLUDE_DIR}) + + if(NOT TARGET ZMQ::ZMQ) + add_library(ZMQ::ZMQ UNKNOWN IMPORTED) + set_target_properties(ZMQ::ZMQ PROPERTIES + IMPORTED_LINK_INTERFACE_LANGUAGES "C" + IMPORTED_LOCATION "${ZMQ_LIBRARY}" + INTERFACE_INCLUDE_DIRECTORIES "${ZMQ_INCLUDE_DIR}") + endif() +endif() diff --git a/cmake/Modules/GTest.cmake b/cmake/Modules/GTest.cmake new file mode 100644 index 0000000000000000000000000000000000000000..36aafee10ce81d7863abfd390db242486e279234 --- /dev/null +++ b/cmake/Modules/GTest.cmake @@ -0,0 +1,77 @@ +message(STATUS "Downloading and building Google Test library") + +if(CMAKE_BUILD_TYPE STREQUAL Debug) + set(GTEST_LIB_POSTFIX d) +else() + set(GTEST_LIB_POSTFIX) +endif() + +include(ExternalProject) +ExternalProject_Add(googletest + GIT_REPOSITORY https://github.com/google/googletest.git + GIT_TAG release-1.10.0 + SOURCE_DIR "${CMAKE_BINARY_DIR}/gtest-src" + BINARY_DIR "${CMAKE_BINARY_DIR}/gtest-build" + CMAKE_ARGS ${CMAKE_REQUEST_PIC} ${CMAKE_EXTRA_GTEST_OPTS} + -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER} + -DCMAKE_INSTALL_PREFIX= + -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} + -DCMAKE_MAKE_PROGRAM=${CMAKE_MAKE_PROGRAM} + -DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE} + BUILD_BYPRODUCTS /lib/${CMAKE_FIND_LIBRARY_PREFIXES}gtest${GTEST_LIB_POSTFIX}.a + /lib/${CMAKE_FIND_LIBRARY_PREFIXES}gmock${GTEST_LIB_POSTFIX}.a + /lib/${CMAKE_FIND_LIBRARY_PREFIXES}gtest_main${GTEST_LIB_POSTFIX}.a + /lib/${CMAKE_FIND_LIBRARY_PREFIXES}gmock_main${GTEST_LIB_POSTFIX}.a + LOG_DOWNLOAD ON + LOG_CONFIGURE ON + LOG_BUILD ON + INSTALL_COMMAND "" + TEST_COMMAND "") + +ExternalProject_Get_Property(googletest SOURCE_DIR) +set(GTEST_INCLUDE_DIR ${SOURCE_DIR}/googletest/include) +set(GMOCK_INCLUDE_DIR ${SOURCE_DIR}/googlemock/include) + +# workaround for CMake 3.10 on ubuntu 18.04 +file(MAKE_DIRECTORY ${GTEST_INCLUDE_DIR}) +file(MAKE_DIRECTORY ${GMOCK_INCLUDE_DIR}) + +ExternalProject_Get_Property(googletest BINARY_DIR) +set(GTEST_LIBRARY_PATH ${BINARY_DIR}/lib/${CMAKE_FIND_LIBRARY_PREFIXES}gtest${GTEST_LIB_POSTFIX}.a) +set(GMOCK_LIBRARY_PATH ${BINARY_DIR}/lib/${CMAKE_FIND_LIBRARY_PREFIXES}gmock${GTEST_LIB_POSTFIX}.a) +set(GTEST_MAIN_LIBRARY_PATH ${BINARY_DIR}/lib/${CMAKE_FIND_LIBRARY_PREFIXES}gtest_main${GTEST_LIB_POSTFIX}.a) +set(GMOCK_MAIN_LIBRARY_PATH ${BINARY_DIR}/lib/${CMAKE_FIND_LIBRARY_PREFIXES}gmock_main${GTEST_LIB_POSTFIX}.a) + +# Prevent GoogleTest from overriding our compiler/linker options +# when building with Visual Studio +set(gtest_force_shared_crt ON CACHE BOOL "" FORCE) + +find_package(Threads QUIET) + +add_library(GTest::GTest UNKNOWN IMPORTED) +set_target_properties(GTest::GTest PROPERTIES + IMPORTED_LOCATION ${GTEST_LIBRARY_PATH} + INTERFACE_INCLUDE_DIRECTORIES ${GTEST_INCLUDE_DIR} + IMPORTED_LINK_INTERFACE_LIBRARIES ${CMAKE_THREAD_LIBS_INIT}) +add_dependencies(GTest::GTest googletest) + +add_library(GTest::GMock UNKNOWN IMPORTED) +set_target_properties(GTest::GMock PROPERTIES + IMPORTED_LOCATION ${GMOCK_LIBRARY_PATH} + INTERFACE_INCLUDE_DIRECTORIES ${GMOCK_INCLUDE_DIR} + IMPORTED_LINK_INTERFACE_LIBRARIES ${CMAKE_THREAD_LIBS_INIT}) +add_dependencies(GTest::GMock googletest) + +add_library(GTest::GTestMain UNKNOWN IMPORTED) +set_target_properties(GTest::GTestMain PROPERTIES + IMPORTED_LOCATION ${GTEST_MAIN_LIBRARY_PATH} + INTERFACE_INCLUDE_DIRECTORIES ${GTEST_INCLUDE_DIR} + IMPORTED_LINK_INTERFACE_LIBRARIES ${CMAKE_THREAD_LIBS_INIT}) +add_dependencies(GTest::GTestMain googletest) + +add_library(GTest::GMockMain UNKNOWN IMPORTED) +set_target_properties(GTest::GMockMain PROPERTIES + IMPORTED_LOCATION ${GMOCK_MAIN_LIBRARY_PATH} + INTERFACE_INCLUDE_DIRECTORIES ${GMOCK_INCLUDE_DIR} + IMPORTED_LINK_INTERFACE_LIBRARIES ${CMAKE_THREAD_LIBS_INIT}) +add_dependencies(GTest::GMockMain googletest) diff --git a/cmake/Modules/GenerateBinaryHeader.cmake b/cmake/Modules/GenerateBinaryHeader.cmake new file mode 100644 index 0000000000000000000000000000000000000000..512f69e09de985b5ae70cb9bd8bfcb1b4bae0ca7 --- /dev/null +++ b/cmake/Modules/GenerateBinaryHeader.cmake @@ -0,0 +1,3 @@ +# utility script to call GenerateBinaryHeader function +include(${SOURCE_DIR}/Modules/LAMMPSUtils.cmake) +GenerateBinaryHeader(${VARNAME} ${HEADER_FILE} ${SOURCE_FILES}) diff --git a/cmake/Modules/LAMMPSUtils.cmake b/cmake/Modules/LAMMPSUtils.cmake index 3ea2b3cb7ec977175d026672c1a03f386fc86e61..02de630c82d320b67d144ea39eb30c1c44ed2c77 100644 --- a/cmake/Modules/LAMMPSUtils.cmake +++ b/cmake/Modules/LAMMPSUtils.cmake @@ -69,3 +69,19 @@ macro(pkg_depends PKG1 PKG2) message(FATAL_ERROR "${PKG1} package needs LAMMPS to be build with ${PKG2}") endif() endmacro() + +# CMake-only replacement for bin2c and xxd +function(GenerateBinaryHeader varname outfile files) + message("Creating ${outfile}...") + file(WRITE ${outfile} "// CMake generated file\n") + math(EXPR ARG_END "${ARGC}-1") + + foreach(IDX RANGE 2 ${ARG_END}) + list(GET ARGV ${IDX} filename) + file(READ ${filename} content HEX) + string(REGEX REPLACE "([0-9a-f][0-9a-f])" "0x\\1," content "${content}") + string(REGEX REPLACE ",$" "" content "${content}") + file(APPEND ${outfile} "const unsigned char ${varname}[] = { ${content} };\n") + file(APPEND ${outfile} "const unsigned int ${varname}_size = sizeof(${varname});\n") + endforeach() +endfunction(GenerateBinaryHeader) diff --git a/cmake/Modules/MPI4WIN.cmake b/cmake/Modules/MPI4WIN.cmake index 1f3195041aa7cb26bae48eb671d55b05b6a7dec3..035c6a22f3be44a597f674d281b61852964481ff 100644 --- a/cmake/Modules/MPI4WIN.cmake +++ b/cmake/Modules/MPI4WIN.cmake @@ -16,8 +16,15 @@ else() endif() ExternalProject_get_property(mpi4win_build SOURCE_DIR) -add_definitions(-DMPICH_SKIP_MPICXX) -include_directories("${SOURCE_DIR}/include") -set(MPI4WIN_LIBRARIES "${SOURCE_DIR}/lib/libmpi.a") -list(APPEND LAMMPS_DEPS mpi4win_build) -set(LAMMPS_USE_MPI4WIN ON) +file(MAKE_DIRECTORY "${SOURCE_DIR}/include") +add_library(MPI::MPI_CXX UNKNOWN IMPORTED) +set_target_properties(MPI::MPI_CXX PROPERTIES + IMPORTED_LOCATION "${SOURCE_DIR}/lib/libmpi.a" + INTERFACE_INCLUDE_DIRECTORIES "${SOURCE_DIR}/include" + INTERFACE_COMPILE_DEFINITIONS "MPICH_SKIP_MPICXX") +add_dependencies(MPI::MPI_CXX mpi4win_build) + +# set variables for status reporting at the end of CMake run +set(MPI_CXX_INCLUDE_PATH "${SOURCE_DIR}/include") +set(MPI_CXX_COMPILE_DEFINITIONS "MPICH_SKIP_MPICXX") +set(MPI_CXX_LIBRARIES "${SOURCE_DIR}/lib/libmpi.a") diff --git a/cmake/Modules/Packages/COMPRESS.cmake b/cmake/Modules/Packages/COMPRESS.cmake index 864b868865f531ebcce5374bceed2612fb37d391..801a38a21561bde85fb2c031a96786043bd858b4 100644 --- a/cmake/Modules/Packages/COMPRESS.cmake +++ b/cmake/Modules/Packages/COMPRESS.cmake @@ -1,5 +1,2 @@ -if(PKG_COMPRESS) - find_package(ZLIB REQUIRED) - include_directories(${ZLIB_INCLUDE_DIRS}) - list(APPEND LAMMPS_LINK_LIBS ${ZLIB_LIBRARIES}) -endif() +find_package(ZLIB REQUIRED) +target_link_libraries(lammps PRIVATE ZLIB::ZLIB) diff --git a/cmake/Modules/Packages/CORESHELL.cmake b/cmake/Modules/Packages/CORESHELL.cmake index 591477c89948c3d34f975e8cdf65181b96af9171..4e12d2ee363e80377fb7e8eb44a2f073c1317027 100644 --- a/cmake/Modules/Packages/CORESHELL.cmake +++ b/cmake/Modules/Packages/CORESHELL.cmake @@ -1,13 +1,11 @@ -if(PKG_CORESHELL) - set(CORESHELL_SOURCES_DIR ${LAMMPS_SOURCE_DIR}/CORESHELL) - set(CORESHELL_SOURCES) - set_property(GLOBAL PROPERTY "CORESHELL_SOURCES" "${CORESHELL_SOURCES}") + set(CORESHELL_SOURCES_DIR ${LAMMPS_SOURCE_DIR}/CORESHELL) + set(CORESHELL_SOURCES) + set_property(GLOBAL PROPERTY "CORESHELL_SOURCES" "${CORESHELL_SOURCES}") - # detects styles which have a CORESHELL version - RegisterStylesExt(${CORESHELL_SOURCES_DIR} cs CORESHELL_SOURCES) + # detects styles which have a CORESHELL version + RegisterStylesExt(${CORESHELL_SOURCES_DIR} cs CORESHELL_SOURCES) - get_property(CORESHELL_SOURCES GLOBAL PROPERTY CORESHELL_SOURCES) + get_property(CORESHELL_SOURCES GLOBAL PROPERTY CORESHELL_SOURCES) - list(APPEND LIB_SOURCES ${CORESHELL_SOURCES}) - include_directories(${CORESHELL_SOURCES_DIR}) -endif() + target_sources(lammps PRIVATE ${CORESHELL_SOURCES}) + target_include_directories(lammps PRIVATE ${CORESHELL_SOURCES_DIR}) diff --git a/cmake/Modules/Packages/GPU.cmake b/cmake/Modules/Packages/GPU.cmake index abbcb1f495f1f1e3fe22db53e046ec543e5f40cd..5033c1f0f18a9340f203fff75e59e006fa4d16b9 100644 --- a/cmake/Modules/Packages/GPU.cmake +++ b/cmake/Modules/Packages/GPU.cmake @@ -1,197 +1,371 @@ -if(PKG_GPU) - set(GPU_SOURCES_DIR ${LAMMPS_SOURCE_DIR}/GPU) - set(GPU_SOURCES ${GPU_SOURCES_DIR}/gpu_extra.h - ${GPU_SOURCES_DIR}/fix_gpu.h - ${GPU_SOURCES_DIR}/fix_gpu.cpp) - - set(GPU_API "opencl" CACHE STRING "API used by GPU package") - set(GPU_API_VALUES opencl cuda) - set_property(CACHE GPU_API PROPERTY STRINGS ${GPU_API_VALUES}) - validate_option(GPU_API GPU_API_VALUES) - string(TOUPPER ${GPU_API} GPU_API) - - set(GPU_PREC "mixed" CACHE STRING "LAMMPS GPU precision") - set(GPU_PREC_VALUES double mixed single) - set_property(CACHE GPU_PREC PROPERTY STRINGS ${GPU_PREC_VALUES}) - validate_option(GPU_PREC GPU_PREC_VALUES) - string(TOUPPER ${GPU_PREC} GPU_PREC) - - if(GPU_PREC STREQUAL "DOUBLE") - set(GPU_PREC_SETTING "DOUBLE_DOUBLE") - elseif(GPU_PREC STREQUAL "MIXED") - set(GPU_PREC_SETTING "SINGLE_DOUBLE") - elseif(GPU_PREC STREQUAL "SINGLE") - set(GPU_PREC_SETTING "SINGLE_SINGLE") - endif() - - file(GLOB GPU_LIB_SOURCES ${LAMMPS_LIB_SOURCE_DIR}/gpu/[^.]*.cpp) - file(MAKE_DIRECTORY ${LAMMPS_LIB_BINARY_DIR}/gpu) +set(GPU_SOURCES_DIR ${LAMMPS_SOURCE_DIR}/GPU) +set(GPU_SOURCES ${GPU_SOURCES_DIR}/gpu_extra.h + ${GPU_SOURCES_DIR}/fix_gpu.h + ${GPU_SOURCES_DIR}/fix_gpu.cpp) + +set(GPU_API "opencl" CACHE STRING "API used by GPU package") +set(GPU_API_VALUES opencl cuda hip) +set_property(CACHE GPU_API PROPERTY STRINGS ${GPU_API_VALUES}) +validate_option(GPU_API GPU_API_VALUES) +string(TOUPPER ${GPU_API} GPU_API) + +set(GPU_PREC "mixed" CACHE STRING "LAMMPS GPU precision") +set(GPU_PREC_VALUES double mixed single) +set_property(CACHE GPU_PREC PROPERTY STRINGS ${GPU_PREC_VALUES}) +validate_option(GPU_PREC GPU_PREC_VALUES) +string(TOUPPER ${GPU_PREC} GPU_PREC) + +if(GPU_PREC STREQUAL "DOUBLE") + set(GPU_PREC_SETTING "DOUBLE_DOUBLE") +elseif(GPU_PREC STREQUAL "MIXED") + set(GPU_PREC_SETTING "SINGLE_DOUBLE") +elseif(GPU_PREC STREQUAL "SINGLE") + set(GPU_PREC_SETTING "SINGLE_SINGLE") +endif() - if(GPU_API STREQUAL "CUDA") - find_package(CUDA REQUIRED) - find_program(BIN2C bin2c) - if(NOT BIN2C) - message(FATAL_ERROR "Could not find bin2c, use -DBIN2C=/path/to/bin2c to help cmake finding it.") +file(GLOB GPU_LIB_SOURCES ${LAMMPS_LIB_SOURCE_DIR}/gpu/[^.]*.cpp) +file(MAKE_DIRECTORY ${LAMMPS_LIB_BINARY_DIR}/gpu) + +if(GPU_API STREQUAL "CUDA") + find_package(CUDA REQUIRED) + find_program(BIN2C bin2c) + if(NOT BIN2C) + message(FATAL_ERROR "Could not find bin2c, use -DBIN2C=/path/to/bin2c to help cmake finding it.") + endif() + option(CUDPP_OPT "Enable CUDPP_OPT" ON) + option(CUDA_MPS_SUPPORT "Enable tweaks to support CUDA Multi-process service (MPS)" OFF) + if(CUDA_MPS_SUPPORT) + set(GPU_CUDA_MPS_FLAGS "-DCUDA_PROXY") + endif() + + set(GPU_ARCH "sm_50" CACHE STRING "LAMMPS GPU CUDA SM primary architecture (e.g. sm_60)") + + file(GLOB GPU_LIB_CU ${LAMMPS_LIB_SOURCE_DIR}/gpu/[^.]*.cu ${CMAKE_CURRENT_SOURCE_DIR}/gpu/[^.]*.cu) + list(REMOVE_ITEM GPU_LIB_CU ${LAMMPS_LIB_SOURCE_DIR}/gpu/lal_pppm.cu) + + cuda_include_directories(${LAMMPS_LIB_SOURCE_DIR}/gpu ${LAMMPS_LIB_BINARY_DIR}/gpu) + + if(CUDPP_OPT) + cuda_include_directories(${LAMMPS_LIB_SOURCE_DIR}/gpu/cudpp_mini) + file(GLOB GPU_LIB_CUDPP_SOURCES ${LAMMPS_LIB_SOURCE_DIR}/gpu/cudpp_mini/[^.]*.cpp) + file(GLOB GPU_LIB_CUDPP_CU ${LAMMPS_LIB_SOURCE_DIR}/gpu/cudpp_mini/[^.]*.cu) + endif() + + # build arch/gencode commands for nvcc based on CUDA toolkit version and use choice + # --arch translates directly instead of JIT, so this should be for the preferred or most common architecture + set(GPU_CUDA_GENCODE "-arch=${GPU_ARCH} ") + # Fermi (GPU Arch 2.x) is supported by CUDA 3.2 to CUDA 8.0 + if((CUDA_VERSION VERSION_GREATER "3.1") AND (CUDA_VERSION VERSION_LESS "9.0")) + string(APPEND GPU_CUDA_GENCODE "-gencode arch=compute_20,code=[sm_20,compute_20] ") + endif() + # Kepler (GPU Arch 3.x) is supported by CUDA 5 and later + if(CUDA_VERSION VERSION_GREATER "4.9") + string(APPEND GPU_CUDA_GENCODE "-gencode arch=compute_30,code=[sm_30,compute_30] -gencode arch=compute_35,code=[sm_35,compute_35] ") + endif() + # Maxwell (GPU Arch 5.x) is supported by CUDA 6 and later + if(CUDA_VERSION VERSION_GREATER "5.9") + string(APPEND GPU_CUDA_GENCODE "-gencode arch=compute_50,code=[sm_50,compute_50] -gencode arch=compute_52,code=[sm_52,compute_52] ") + endif() + # Pascal (GPU Arch 6.x) is supported by CUDA 8 and later + if(CUDA_VERSION VERSION_GREATER "7.9") + string(APPEND GPU_CUDA_GENCODE "-gencode arch=compute_60,code=[sm_60,compute_60] -gencode arch=compute_61,code=[sm_61,compute_61] ") + endif() + # Volta (GPU Arch 7.0) is supported by CUDA 9 and later + if(CUDA_VERSION VERSION_GREATER "8.9") + string(APPEND GPU_CUDA_GENCODE "-gencode arch=compute_70,code=[sm_70,compute_70] ") + endif() + # Turing (GPU Arch 7.5) is supported by CUDA 10 and later + if(CUDA_VERSION VERSION_GREATER "9.9") + string(APPEND GPU_CUDA_GENCODE "-gencode arch=compute_75,code=[sm_75,compute_75] ") + endif() + + cuda_compile_fatbin(GPU_GEN_OBJS ${GPU_LIB_CU} OPTIONS + -DUNIX -O3 --use_fast_math -Wno-deprecated-gpu-targets -DNV_KERNEL -DUCL_CUDADR ${GPU_CUDA_GENCODE} -D_${GPU_PREC_SETTING}) + + cuda_compile(GPU_OBJS ${GPU_LIB_CUDPP_CU} OPTIONS ${CUDA_REQUEST_PIC} + -DUNIX -O3 --use_fast_math -Wno-deprecated-gpu-targets -DUCL_CUDADR ${GPU_CUDA_GENCODE} -D_${GPU_PREC_SETTING}) + + foreach(CU_OBJ ${GPU_GEN_OBJS}) + get_filename_component(CU_NAME ${CU_OBJ} NAME_WE) + string(REGEX REPLACE "^.*_lal_" "" CU_NAME "${CU_NAME}") + add_custom_command(OUTPUT ${LAMMPS_LIB_BINARY_DIR}/gpu/${CU_NAME}_cubin.h + COMMAND ${BIN2C} -c -n ${CU_NAME} ${CU_OBJ} > ${LAMMPS_LIB_BINARY_DIR}/gpu/${CU_NAME}_cubin.h + DEPENDS ${CU_OBJ} + COMMENT "Generating ${CU_NAME}_cubin.h") + list(APPEND GPU_LIB_SOURCES ${LAMMPS_LIB_BINARY_DIR}/gpu/${CU_NAME}_cubin.h) + endforeach() + set_directory_properties(PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES "${LAMMPS_LIB_BINARY_DIR}/gpu/*_cubin.h") + + add_library(gpu STATIC ${GPU_LIB_SOURCES} ${GPU_LIB_CUDPP_SOURCES} ${GPU_OBJS}) + target_link_libraries(gpu PRIVATE ${CUDA_LIBRARIES} ${CUDA_CUDA_LIBRARY}) + target_include_directories(gpu PRIVATE ${LAMMPS_LIB_BINARY_DIR}/gpu ${CUDA_INCLUDE_DIRS}) + target_compile_definitions(gpu PRIVATE -D_${GPU_PREC_SETTING} -DMPI_GERYON -DUCL_NO_EXIT ${GPU_CUDA_MPS_FLAGS}) + if(CUDPP_OPT) + target_include_directories(gpu PRIVATE ${LAMMPS_LIB_SOURCE_DIR}/gpu/cudpp_mini) + target_compile_definitions(gpu PRIVATE -DUSE_CUDPP) + endif() + + target_link_libraries(lammps PRIVATE gpu) + + add_executable(nvc_get_devices ${LAMMPS_LIB_SOURCE_DIR}/gpu/geryon/ucl_get_devices.cpp) + target_compile_definitions(nvc_get_devices PRIVATE -DUCL_CUDADR) + target_link_libraries(nvc_get_devices PRIVATE ${CUDA_LIBRARIES} ${CUDA_CUDA_LIBRARY}) + target_include_directories(nvc_get_devices PRIVATE ${CUDA_INCLUDE_DIRS}) + +elseif(GPU_API STREQUAL "OPENCL") + if(${CMAKE_SYSTEM_NAME} STREQUAL "Windows") + # download and unpack support binaries for compilation of windows binaries. + set(LAMMPS_THIRDPARTY_URL "http://download.lammps.org/thirdparty") + file(DOWNLOAD "${LAMMPS_THIRDPARTY_URL}/opencl-win-devel.tar.gz" "${CMAKE_CURRENT_BINARY_DIR}/opencl-win-devel.tar.gz" + EXPECTED_MD5 2c00364888d5671195598b44c2e0d44d) + execute_process(COMMAND ${CMAKE_COMMAND} -E tar xzf opencl-win-devel.tar.gz WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}) + add_library(OpenCL::OpenCL UNKNOWN IMPORTED) + if(${CMAKE_SYSTEM_PROCESSOR} STREQUAL "x86") + set_target_properties(OpenCL::OpenCL PROPERTIES IMPORTED_LOCATION "${CMAKE_CURRENT_BINARY_DIR}/OpenCL/lib_win32/libOpenCL.dll") + elseif(${CMAKE_SYSTEM_PROCESSOR} STREQUAL "x86_64") + set_target_properties(OpenCL::OpenCL PROPERTIES IMPORTED_LOCATION "${CMAKE_CURRENT_BINARY_DIR}/OpenCL/lib_win64/libOpenCL.dll") + endif() + set_target_properties(OpenCL::OpenCL PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "${CMAKE_CURRENT_BINARY_DIR}/OpenCL/include") + else() + find_package(OpenCL REQUIRED) + endif() + set(OCL_TUNE "generic" CACHE STRING "OpenCL Device Tuning") + set(OCL_TUNE_VALUES intel fermi kepler cypress generic) + set_property(CACHE OCL_TUNE PROPERTY STRINGS ${OCL_TUNE_VALUES}) + validate_option(OCL_TUNE OCL_TUNE_VALUES) + string(TOUPPER ${OCL_TUNE} OCL_TUNE) + + include(OpenCLUtils) + set(OCL_COMMON_HEADERS ${LAMMPS_LIB_SOURCE_DIR}/gpu/lal_preprocessor.h ${LAMMPS_LIB_SOURCE_DIR}/gpu/lal_aux_fun1.h) + + file(GLOB GPU_LIB_CU ${LAMMPS_LIB_SOURCE_DIR}/gpu/[^.]*.cu) + list(REMOVE_ITEM GPU_LIB_CU + ${LAMMPS_LIB_SOURCE_DIR}/gpu/lal_gayberne.cu + ${LAMMPS_LIB_SOURCE_DIR}/gpu/lal_gayberne_lj.cu + ${LAMMPS_LIB_SOURCE_DIR}/gpu/lal_re_squared.cu + ${LAMMPS_LIB_SOURCE_DIR}/gpu/lal_re_squared_lj.cu + ${LAMMPS_LIB_SOURCE_DIR}/gpu/lal_tersoff.cu + ${LAMMPS_LIB_SOURCE_DIR}/gpu/lal_tersoff_zbl.cu + ${LAMMPS_LIB_SOURCE_DIR}/gpu/lal_tersoff_mod.cu + ) + + foreach(GPU_KERNEL ${GPU_LIB_CU}) + get_filename_component(basename ${GPU_KERNEL} NAME_WE) + string(SUBSTRING ${basename} 4 -1 KERNEL_NAME) + GenerateOpenCLHeader(${KERNEL_NAME} ${CMAKE_CURRENT_BINARY_DIR}/gpu/${KERNEL_NAME}_cl.h ${OCL_COMMON_HEADERS} ${GPU_KERNEL}) + list(APPEND GPU_LIB_SOURCES ${CMAKE_CURRENT_BINARY_DIR}/gpu/${KERNEL_NAME}_cl.h) + endforeach() + + GenerateOpenCLHeader(gayberne ${CMAKE_CURRENT_BINARY_DIR}/gpu/gayberne_cl.h ${OCL_COMMON_HEADERS} ${LAMMPS_LIB_SOURCE_DIR}/gpu/lal_ellipsoid_extra.h ${LAMMPS_LIB_SOURCE_DIR}/gpu/lal_gayberne.cu) + GenerateOpenCLHeader(gayberne_lj ${CMAKE_CURRENT_BINARY_DIR}/gpu/gayberne_lj_cl.h ${OCL_COMMON_HEADERS} ${LAMMPS_LIB_SOURCE_DIR}/gpu/lal_ellipsoid_extra.h ${LAMMPS_LIB_SOURCE_DIR}/gpu/lal_gayberne_lj.cu) + GenerateOpenCLHeader(re_squared ${CMAKE_CURRENT_BINARY_DIR}/gpu/re_squared_cl.h ${OCL_COMMON_HEADERS} ${LAMMPS_LIB_SOURCE_DIR}/gpu/lal_ellipsoid_extra.h ${LAMMPS_LIB_SOURCE_DIR}/gpu/lal_re_squared.cu) + GenerateOpenCLHeader(re_squared_lj ${CMAKE_CURRENT_BINARY_DIR}/gpu/re_squared_lj_cl.h ${OCL_COMMON_HEADERS} ${LAMMPS_LIB_SOURCE_DIR}/gpu/lal_ellipsoid_extra.h ${LAMMPS_LIB_SOURCE_DIR}/gpu/lal_re_squared_lj.cu) + GenerateOpenCLHeader(tersoff ${CMAKE_CURRENT_BINARY_DIR}/gpu/tersoff_cl.h ${OCL_COMMON_HEADERS} ${LAMMPS_LIB_SOURCE_DIR}/gpu/lal_tersoff_extra.h ${LAMMPS_LIB_SOURCE_DIR}/gpu/lal_tersoff.cu) + GenerateOpenCLHeader(tersoff_zbl ${CMAKE_CURRENT_BINARY_DIR}/gpu/tersoff_zbl_cl.h ${OCL_COMMON_HEADERS} ${LAMMPS_LIB_SOURCE_DIR}/gpu/lal_tersoff_zbl_extra.h ${LAMMPS_LIB_SOURCE_DIR}/gpu/lal_tersoff_zbl.cu) + GenerateOpenCLHeader(tersoff_mod ${CMAKE_CURRENT_BINARY_DIR}/gpu/tersoff_mod_cl.h ${OCL_COMMON_HEADERS} ${LAMMPS_LIB_SOURCE_DIR}/gpu/lal_tersoff_mod_extra.h ${LAMMPS_LIB_SOURCE_DIR}/gpu/lal_tersoff_mod.cu) + + list(APPEND GPU_LIB_SOURCES + ${CMAKE_CURRENT_BINARY_DIR}/gpu/gayberne_cl.h + ${CMAKE_CURRENT_BINARY_DIR}/gpu/gayberne_lj_cl.h + ${CMAKE_CURRENT_BINARY_DIR}/gpu/re_squared_cl.h + ${CMAKE_CURRENT_BINARY_DIR}/gpu/re_squared_lj_cl.h + ${CMAKE_CURRENT_BINARY_DIR}/gpu/tersoff_cl.h + ${CMAKE_CURRENT_BINARY_DIR}/gpu/tersoff_zbl_cl.h + ${CMAKE_CURRENT_BINARY_DIR}/gpu/tersoff_mod_cl.h + ) + + add_library(gpu STATIC ${GPU_LIB_SOURCES}) + target_link_libraries(gpu PRIVATE OpenCL::OpenCL) + target_include_directories(gpu PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/gpu) + target_compile_definitions(gpu PRIVATE -D_${GPU_PREC_SETTING} -D${OCL_TUNE}_OCL -DMPI_GERYON -DUCL_NO_EXIT) + target_compile_definitions(gpu PRIVATE -DUSE_OPENCL) + + target_link_libraries(lammps PRIVATE gpu) + + add_executable(ocl_get_devices ${LAMMPS_LIB_SOURCE_DIR}/gpu/geryon/ucl_get_devices.cpp) + target_compile_definitions(ocl_get_devices PRIVATE -DUCL_OPENCL) + target_link_libraries(ocl_get_devices PRIVATE OpenCL::OpenCL) +elseif(GPU_API STREQUAL "HIP") + if(NOT DEFINED HIP_PATH) + if(NOT DEFINED ENV{HIP_PATH}) + set(HIP_PATH "/opt/rocm/hip" CACHE PATH "Path to which HIP has been installed") + else() + set(HIP_PATH $ENV{HIP_PATH} CACHE PATH "Path to which HIP has been installed") endif() - option(CUDPP_OPT "Enable CUDPP_OPT" ON) - option(CUDA_MPS_SUPPORT "Enable tweaks to support CUDA Multi-process service (MPS)" OFF) - if(CUDA_MPS_SUPPORT) - set(GPU_CUDA_MPS_FLAGS "-DCUDA_PROXY") + endif() + set(CMAKE_MODULE_PATH "${HIP_PATH}/cmake" ${CMAKE_MODULE_PATH}) + find_package(HIP REQUIRED) + option(HIP_USE_DEVICE_SORT "Use GPU sorting" ON) + + if(NOT DEFINED HIP_PLATFORM) + if(NOT DEFINED ENV{HIP_PLATFORM}) + set(HIP_PLATFORM "hcc" CACHE PATH "HIP Platform to be used during compilation") + else() + set(HIP_PLATFORM $ENV{HIP_PLATFORM} CACHE PATH "HIP Platform used during compilation") endif() + endif() + + set(ENV{HIP_PLATFORM} ${HIP_PLATFORM}) + + if(HIP_PLATFORM STREQUAL "hcc") + set(HIP_ARCH "gfx906" CACHE STRING "HIP target architecture") + elseif(HIP_PLATFORM STREQUAL "nvcc") + find_package(CUDA REQUIRED) + set(HIP_ARCH "sm_50" CACHE STRING "HIP primary CUDA architecture (e.g. sm_60)") + + # build arch/gencode commands for nvcc based on CUDA toolkit version and use choice + # --arch translates directly instead of JIT, so this should be for the preferred or most common architecture + set(HIP_CUDA_GENCODE "-arch=${HIP_ARCH} ") + # Fermi (GPU Arch 2.x) is supported by CUDA 3.2 to CUDA 8.0 + if((CUDA_VERSION VERSION_GREATER "3.1") AND (CUDA_VERSION VERSION_LESS "9.0")) + string(APPEND HIP_CUDA_GENCODE "-gencode arch=compute_20,code=[sm_20,compute_20] ") + endif() + # Kepler (GPU Arch 3.x) is supported by CUDA 5 and later + if(CUDA_VERSION VERSION_GREATER "4.9") + string(APPEND HIP_CUDA_GENCODE "-gencode arch=compute_30,code=[sm_30,compute_30] -gencode arch=compute_35,code=[sm_35,compute_35] ") + endif() + # Maxwell (GPU Arch 5.x) is supported by CUDA 6 and later + if(CUDA_VERSION VERSION_GREATER "5.9") + string(APPEND HIP_CUDA_GENCODE "-gencode arch=compute_50,code=[sm_50,compute_50] -gencode arch=compute_52,code=[sm_52,compute_52] ") + endif() + # Pascal (GPU Arch 6.x) is supported by CUDA 8 and later + if(CUDA_VERSION VERSION_GREATER "7.9") + string(APPEND HIP_CUDA_GENCODE "-gencode arch=compute_60,code=[sm_60,compute_60] -gencode arch=compute_61,code=[sm_61,compute_61] ") + endif() + # Volta (GPU Arch 7.0) is supported by CUDA 9 and later + if(CUDA_VERSION VERSION_GREATER "8.9") + string(APPEND HIP_CUDA_GENCODE "-gencode arch=compute_70,code=[sm_70,compute_70] ") + endif() + # Turing (GPU Arch 7.5) is supported by CUDA 10 and later + if(CUDA_VERSION VERSION_GREATER "9.9") + string(APPEND HIP_CUDA_GENCODE "-gencode arch=compute_75,code=[sm_75,compute_75] ") + endif() + endif() + + file(GLOB GPU_LIB_CU ${LAMMPS_LIB_SOURCE_DIR}/gpu/[^.]*.cu ${CMAKE_CURRENT_SOURCE_DIR}/gpu/[^.]*.cu) + list(REMOVE_ITEM GPU_LIB_CU ${LAMMPS_LIB_SOURCE_DIR}/gpu/lal_pppm.cu) + + set(GPU_LIB_CU_HIP "") + foreach(CU_FILE ${GPU_LIB_CU}) + get_filename_component(CU_NAME ${CU_FILE} NAME_WE) + string(REGEX REPLACE "^.*lal_" "" CU_NAME "${CU_NAME}") + + set(CU_CPP_FILE "${LAMMPS_LIB_BINARY_DIR}/gpu/${CU_NAME}.cu.cpp") + set(CUBIN_FILE "${LAMMPS_LIB_BINARY_DIR}/gpu/${CU_NAME}.cubin") + set(CUBIN_H_FILE "${LAMMPS_LIB_BINARY_DIR}/gpu/${CU_NAME}_cubin.h") + + if(HIP_PLATFORM STREQUAL "hcc") + configure_file(${CU_FILE} ${CU_CPP_FILE} COPYONLY) + + add_custom_command(OUTPUT ${CUBIN_FILE} + VERBATIM COMMAND ${HIP_HIPCC_EXECUTABLE} --genco -t="${HIP_ARCH}" -f=\"-O3 -ffast-math -DUSE_HIP -D_${GPU_PREC_SETTING} -I${LAMMPS_LIB_SOURCE_DIR}/gpu\" -o ${CUBIN_FILE} ${CU_CPP_FILE} + DEPENDS ${CU_CPP_FILE} + COMMENT "Generating ${CU_NAME}.cubin") + elseif(HIP_PLATFORM STREQUAL "nvcc") + add_custom_command(OUTPUT ${CUBIN_FILE} + VERBATIM COMMAND ${HIP_HIPCC_EXECUTABLE} --fatbin --use_fast_math -DUSE_HIP -D_${GPU_PREC_SETTING} ${HIP_CUDA_GENCODE} -I${LAMMPS_LIB_SOURCE_DIR}/gpu -o ${CUBIN_FILE} ${CU_FILE} + DEPENDS ${CU_FILE} + COMMENT "Generating ${CU_NAME}.cubin") + endif() - set(GPU_ARCH "sm_30" CACHE STRING "LAMMPS GPU CUDA SM primary architecture (e.g. sm_60)") + add_custom_command(OUTPUT ${CUBIN_H_FILE} + COMMAND ${CMAKE_COMMAND} -D SOURCE_DIR=${CMAKE_CURRENT_SOURCE_DIR} -D VARNAME=${CU_NAME} -D HEADER_FILE=${CUBIN_H_FILE} -D SOURCE_FILES=${CUBIN_FILE} -P ${CMAKE_CURRENT_SOURCE_DIR}/Modules/GenerateBinaryHeader.cmake + DEPENDS ${CUBIN_FILE} + COMMENT "Generating ${CU_NAME}_cubin.h") - file(GLOB GPU_LIB_CU ${LAMMPS_LIB_SOURCE_DIR}/gpu/[^.]*.cu ${CMAKE_CURRENT_SOURCE_DIR}/gpu/[^.]*.cu) - list(REMOVE_ITEM GPU_LIB_CU ${LAMMPS_LIB_SOURCE_DIR}/gpu/lal_pppm.cu) + list(APPEND GPU_LIB_SOURCES ${CUBIN_H_FILE}) + endforeach() - cuda_include_directories(${LAMMPS_LIB_SOURCE_DIR}/gpu ${LAMMPS_LIB_BINARY_DIR}/gpu) + set_directory_properties(PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES "${LAMMPS_LIB_BINARY_DIR}/gpu/*_cubin.h ${LAMMPS_LIB_BINARY_DIR}/gpu/*.cu.cpp") - if(CUDPP_OPT) - cuda_include_directories(${LAMMPS_LIB_SOURCE_DIR}/gpu/cudpp_mini) - file(GLOB GPU_LIB_CUDPP_SOURCES ${LAMMPS_LIB_SOURCE_DIR}/gpu/cudpp_mini/[^.]*.cpp) - file(GLOB GPU_LIB_CUDPP_CU ${LAMMPS_LIB_SOURCE_DIR}/gpu/cudpp_mini/[^.]*.cu) - endif() + hip_add_library(gpu STATIC ${GPU_LIB_SOURCES}) + target_include_directories(gpu PRIVATE ${LAMMPS_LIB_BINARY_DIR}/gpu) + target_compile_definitions(gpu PRIVATE -D_${GPU_PREC_SETTING} -DMPI_GERYON -DUCL_NO_EXIT) + target_compile_definitions(gpu PRIVATE -DUSE_HIP) - # build arch/gencode commands for nvcc based on CUDA toolkit version and use choice - # --arch translates directly instead of JIT, so this should be for the preferred or most common architecture - set(GPU_CUDA_GENCODE "-arch=${GPU_ARCH} ") - # Fermi (GPU Arch 2.x) is supported by CUDA 3.2 to CUDA 8.0 - if((CUDA_VERSION VERSION_GREATER "3.1") AND (CUDA_VERSION VERSION_LESS "9.0")) - string(APPEND GPU_CUDA_GENCODE "-gencode arch=compute_20,code=[sm_20,compute_20] ") - endif() - # Kepler (GPU Arch 3.x) is supported by CUDA 5 and later - if(CUDA_VERSION VERSION_GREATER "4.9") - string(APPEND GPU_CUDA_GENCODE "-gencode arch=compute_30,code=[sm_30,compute_30] -gencode arch=compute_35,code=[sm_35,compute_35] ") - endif() - # Maxwell (GPU Arch 5.x) is supported by CUDA 6 and later - if(CUDA_VERSION VERSION_GREATER "5.9") - string(APPEND GPU_CUDA_GENCODE "-gencode arch=compute_50,code=[sm_50,compute_50] -gencode arch=compute_52,code=[sm_52,compute_52] ") - endif() - # Pascal (GPU Arch 6.x) is supported by CUDA 8 and later - if(CUDA_VERSION VERSION_GREATER "7.9") - string(APPEND GPU_CUDA_GENCODE "-gencode arch=compute_60,code=[sm_60,compute_60] -gencode arch=compute_61,code=[sm_61,compute_61] ") - endif() - # Volta (GPU Arch 7.0) is supported by CUDA 9 and later - if(CUDA_VERSION VERSION_GREATER "8.9") - string(APPEND GPU_CUDA_GENCODE "-gencode arch=compute_70,code=[sm_70,compute_70] ") - endif() - # Turing (GPU Arch 7.5) is supported by CUDA 10 and later - if(CUDA_VERSION VERSION_GREATER "9.9") - string(APPEND GPU_CUDA_GENCODE "-gencode arch=compute_75,code=[sm_75,compute_75] ") - endif() + if(HIP_USE_DEVICE_SORT) + # add hipCUB + target_include_directories(gpu PRIVATE ${HIP_ROOT_DIR}/../include) + target_compile_definitions(gpu PRIVATE -DUSE_HIP_DEVICE_SORT) - cuda_compile_fatbin(GPU_GEN_OBJS ${GPU_LIB_CU} OPTIONS - -DUNIX -O3 --use_fast_math -Wno-deprecated-gpu-targets -DNV_KERNEL -DUCL_CUDADR ${GPU_CUDA_GENCODE} -D_${GPU_PREC_SETTING}) - - cuda_compile(GPU_OBJS ${GPU_LIB_CUDPP_CU} OPTIONS ${CUDA_REQUEST_PIC} - -DUNIX -O3 --use_fast_math -Wno-deprecated-gpu-targets -DUCL_CUDADR ${GPU_CUDA_GENCODE} -D_${GPU_PREC_SETTING}) - - foreach(CU_OBJ ${GPU_GEN_OBJS}) - get_filename_component(CU_NAME ${CU_OBJ} NAME_WE) - string(REGEX REPLACE "^.*_lal_" "" CU_NAME "${CU_NAME}") - add_custom_command(OUTPUT ${LAMMPS_LIB_BINARY_DIR}/gpu/${CU_NAME}_cubin.h - COMMAND ${BIN2C} -c -n ${CU_NAME} ${CU_OBJ} > ${LAMMPS_LIB_BINARY_DIR}/gpu/${CU_NAME}_cubin.h - DEPENDS ${CU_OBJ} - COMMENT "Generating ${CU_NAME}_cubin.h") - list(APPEND GPU_LIB_SOURCES ${LAMMPS_LIB_BINARY_DIR}/gpu/${CU_NAME}_cubin.h) - endforeach() - set_directory_properties(PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES "${LAMMPS_LIB_BINARY_DIR}/gpu/*_cubin.h") - - - add_library(gpu STATIC ${GPU_LIB_SOURCES} ${GPU_LIB_CUDPP_SOURCES} ${GPU_OBJS}) - target_link_libraries(gpu ${CUDA_LIBRARIES} ${CUDA_CUDA_LIBRARY}) - target_include_directories(gpu PRIVATE ${LAMMPS_LIB_BINARY_DIR}/gpu ${CUDA_INCLUDE_DIRS}) - target_compile_definitions(gpu PRIVATE -D_${GPU_PREC_SETTING} -DMPI_GERYON -DUCL_NO_EXIT ${GPU_CUDA_MPS_FLAGS}) - if(CUDPP_OPT) - target_include_directories(gpu PRIVATE ${LAMMPS_LIB_SOURCE_DIR}/gpu/cudpp_mini) - target_compile_definitions(gpu PRIVATE -DUSE_CUDPP) - endif() + if(HIP_PLATFORM STREQUAL "nvcc") + find_package(CUB) - list(APPEND LAMMPS_LINK_LIBS gpu) - if(LAMMPS_USE_MPI4WIN) - add_dependencies(gpu mpi4win_build) + if(CUB_FOUND) + set(DOWNLOAD_CUB_DEFAULT OFF) + else() + set(DOWNLOAD_CUB_DEFAULT ON) endif() - add_executable(nvc_get_devices ${LAMMPS_LIB_SOURCE_DIR}/gpu/geryon/ucl_get_devices.cpp) - target_compile_definitions(nvc_get_devices PRIVATE -DUCL_CUDADR) - target_link_libraries(nvc_get_devices PRIVATE ${CUDA_LIBRARIES} ${CUDA_CUDA_LIBRARY}) - target_include_directories(nvc_get_devices PRIVATE ${CUDA_INCLUDE_DIRS}) - - - elseif(GPU_API STREQUAL "OPENCL") - find_package(OpenCL REQUIRED) - set(OCL_TUNE "generic" CACHE STRING "OpenCL Device Tuning") - set(OCL_TUNE_VALUES intel fermi kepler cypress generic) - set_property(CACHE OCL_TUNE PROPERTY STRINGS ${OCL_TUNE_VALUES}) - validate_option(OCL_TUNE OCL_TUNE_VALUES) - string(TOUPPER ${OCL_TUNE} OCL_TUNE) - - include(OpenCLUtils) - set(OCL_COMMON_HEADERS ${LAMMPS_LIB_SOURCE_DIR}/gpu/lal_preprocessor.h ${LAMMPS_LIB_SOURCE_DIR}/gpu/lal_aux_fun1.h) - - file(GLOB GPU_LIB_CU ${LAMMPS_LIB_SOURCE_DIR}/gpu/[^.]*.cu) - list(REMOVE_ITEM GPU_LIB_CU - ${LAMMPS_LIB_SOURCE_DIR}/gpu/lal_gayberne.cu - ${LAMMPS_LIB_SOURCE_DIR}/gpu/lal_gayberne_lj.cu - ${LAMMPS_LIB_SOURCE_DIR}/gpu/lal_re_squared.cu - ${LAMMPS_LIB_SOURCE_DIR}/gpu/lal_re_squared_lj.cu - ${LAMMPS_LIB_SOURCE_DIR}/gpu/lal_tersoff.cu - ${LAMMPS_LIB_SOURCE_DIR}/gpu/lal_tersoff_zbl.cu - ${LAMMPS_LIB_SOURCE_DIR}/gpu/lal_tersoff_mod.cu - ) - - foreach(GPU_KERNEL ${GPU_LIB_CU}) - get_filename_component(basename ${GPU_KERNEL} NAME_WE) - string(SUBSTRING ${basename} 4 -1 KERNEL_NAME) - GenerateOpenCLHeader(${KERNEL_NAME} ${CMAKE_CURRENT_BINARY_DIR}/gpu/${KERNEL_NAME}_cl.h ${OCL_COMMON_HEADERS} ${GPU_KERNEL}) - list(APPEND GPU_LIB_SOURCES ${CMAKE_CURRENT_BINARY_DIR}/gpu/${KERNEL_NAME}_cl.h) - endforeach() - - GenerateOpenCLHeader(gayberne ${CMAKE_CURRENT_BINARY_DIR}/gpu/gayberne_cl.h ${OCL_COMMON_HEADERS} ${LAMMPS_LIB_SOURCE_DIR}/gpu/lal_ellipsoid_extra.h ${LAMMPS_LIB_SOURCE_DIR}/gpu/lal_gayberne.cu) - GenerateOpenCLHeader(gayberne_lj ${CMAKE_CURRENT_BINARY_DIR}/gpu/gayberne_lj_cl.h ${OCL_COMMON_HEADERS} ${LAMMPS_LIB_SOURCE_DIR}/gpu/lal_ellipsoid_extra.h ${LAMMPS_LIB_SOURCE_DIR}/gpu/lal_gayberne_lj.cu) - GenerateOpenCLHeader(re_squared ${CMAKE_CURRENT_BINARY_DIR}/gpu/re_squared_cl.h ${OCL_COMMON_HEADERS} ${LAMMPS_LIB_SOURCE_DIR}/gpu/lal_ellipsoid_extra.h ${LAMMPS_LIB_SOURCE_DIR}/gpu/lal_re_squared.cu) - GenerateOpenCLHeader(re_squared_lj ${CMAKE_CURRENT_BINARY_DIR}/gpu/re_squared_lj_cl.h ${OCL_COMMON_HEADERS} ${LAMMPS_LIB_SOURCE_DIR}/gpu/lal_ellipsoid_extra.h ${LAMMPS_LIB_SOURCE_DIR}/gpu/lal_re_squared_lj.cu) - GenerateOpenCLHeader(tersoff ${CMAKE_CURRENT_BINARY_DIR}/gpu/tersoff_cl.h ${OCL_COMMON_HEADERS} ${LAMMPS_LIB_SOURCE_DIR}/gpu/lal_tersoff_extra.h ${LAMMPS_LIB_SOURCE_DIR}/gpu/lal_tersoff.cu) - GenerateOpenCLHeader(tersoff_zbl ${CMAKE_CURRENT_BINARY_DIR}/gpu/tersoff_zbl_cl.h ${OCL_COMMON_HEADERS} ${LAMMPS_LIB_SOURCE_DIR}/gpu/lal_tersoff_zbl_extra.h ${LAMMPS_LIB_SOURCE_DIR}/gpu/lal_tersoff_zbl.cu) - GenerateOpenCLHeader(tersoff_mod ${CMAKE_CURRENT_BINARY_DIR}/gpu/tersoff_mod_cl.h ${OCL_COMMON_HEADERS} ${LAMMPS_LIB_SOURCE_DIR}/gpu/lal_tersoff_mod_extra.h ${LAMMPS_LIB_SOURCE_DIR}/gpu/lal_tersoff_mod.cu) - - list(APPEND GPU_LIB_SOURCES - ${CMAKE_CURRENT_BINARY_DIR}/gpu/gayberne_cl.h - ${CMAKE_CURRENT_BINARY_DIR}/gpu/gayberne_lj_cl.h - ${CMAKE_CURRENT_BINARY_DIR}/gpu/re_squared_cl.h - ${CMAKE_CURRENT_BINARY_DIR}/gpu/re_squared_lj_cl.h - ${CMAKE_CURRENT_BINARY_DIR}/gpu/tersoff_cl.h - ${CMAKE_CURRENT_BINARY_DIR}/gpu/tersoff_zbl_cl.h - ${CMAKE_CURRENT_BINARY_DIR}/gpu/tersoff_mod_cl.h - ) - - add_library(gpu STATIC ${GPU_LIB_SOURCES}) - target_link_libraries(gpu ${OpenCL_LIBRARIES}) - target_include_directories(gpu PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/gpu ${OpenCL_INCLUDE_DIRS}) - target_compile_definitions(gpu PRIVATE -D_${GPU_PREC_SETTING} -D${OCL_TUNE}_OCL -DMPI_GERYON -DUCL_NO_EXIT) - target_compile_definitions(gpu PRIVATE -DUSE_OPENCL) - - list(APPEND LAMMPS_LINK_LIBS gpu) - if(LAMMPS_USE_MPI4WIN) - add_dependencies(gpu mpi4win_build) + option(DOWNLOAD_CUB "Download and compile the CUB library instead of using an already installed one" ${DOWNLOAD_CUB_DEFAULT}) + + if(DOWNLOAD_CUB) + message(STATUS "CUB download requested") + include(ExternalProject) + + ExternalProject_Add(CUB + GIT_REPOSITORY https://github.com/NVlabs/cub + TIMEOUT 5 + PREFIX "${CMAKE_CURRENT_BINARY_DIR}" + CONFIGURE_COMMAND "" + BUILD_COMMAND "" + INSTALL_COMMAND "" + UPDATE_COMMAND "" + ) + ExternalProject_get_property(CUB SOURCE_DIR) + set(CUB_INCLUDE_DIR ${SOURCE_DIR}) + else() + find_package(CUB) + if(NOT CUB_FOUND) + message(FATAL_ERROR "CUB library not found. Help CMake to find it by setting CUB_INCLUDE_DIR, or set DOWNLOAD_VORO=ON to download it") + endif() endif() - add_executable(ocl_get_devices ${LAMMPS_LIB_SOURCE_DIR}/gpu/geryon/ucl_get_devices.cpp) - target_compile_definitions(ocl_get_devices PRIVATE -DUCL_OPENCL) - target_link_libraries(ocl_get_devices PRIVATE ${OpenCL_LIBRARIES}) - target_include_directories(ocl_get_devices PRIVATE ${OpenCL_INCLUDE_DIRS}) + target_include_directories(gpu PRIVATE ${CUB_INCLUDE_DIR}) endif() + endif() + + hip_add_executable(hip_get_devices ${LAMMPS_LIB_SOURCE_DIR}/gpu/geryon/ucl_get_devices.cpp) + target_compile_definitions(hip_get_devices PRIVATE -DUCL_HIP) + + if(HIP_PLATFORM STREQUAL "nvcc") + target_compile_definitions(gpu PRIVATE -D__HIP_PLATFORM_NVCC__) + target_include_directories(gpu PRIVATE ${HIP_ROOT_DIR}/../include) + target_include_directories(gpu PRIVATE ${CUDA_INCLUDE_DIRS}) + target_link_libraries(gpu PRIVATE ${CUDA_LIBRARIES} ${CUDA_CUDA_LIBRARY}) + + target_compile_definitions(hip_get_devices PRIVATE -D__HIP_PLATFORM_NVCC__) + target_include_directories(hip_get_devices PRIVATE ${HIP_ROOT_DIR}/include) + target_include_directories(hip_get_devices PRIVATE ${CUDA_INCLUDE_DIRS}) + target_link_libraries(hip_get_devices PRIVATE ${CUDA_LIBRARIES} ${CUDA_CUDA_LIBRARY}) + elseif(HIP_PLATFORM STREQUAL "hcc") + target_compile_definitions(gpu PRIVATE -D__HIP_PLATFORM_HCC__) + target_include_directories(gpu PRIVATE ${HIP_ROOT_DIR}/../include) + + target_compile_definitions(hip_get_devices PRIVATE -D__HIP_PLATFORM_HCC__) + target_include_directories(hip_get_devices PRIVATE ${HIP_ROOT_DIR}/../include) + endif() + + target_link_libraries(lammps PRIVATE gpu) +endif() - # GPU package - FindStyleHeaders(${GPU_SOURCES_DIR} FIX_CLASS fix_ FIX) +# GPU package +FindStyleHeaders(${GPU_SOURCES_DIR} FIX_CLASS fix_ FIX) - set_property(GLOBAL PROPERTY "GPU_SOURCES" "${GPU_SOURCES}") +set_property(GLOBAL PROPERTY "GPU_SOURCES" "${GPU_SOURCES}") - # detects styles which have GPU version - RegisterStylesExt(${GPU_SOURCES_DIR} gpu GPU_SOURCES) +# detects styles which have GPU version +RegisterStylesExt(${GPU_SOURCES_DIR} gpu GPU_SOURCES) - get_property(GPU_SOURCES GLOBAL PROPERTY GPU_SOURCES) +get_property(GPU_SOURCES GLOBAL PROPERTY GPU_SOURCES) - list(APPEND LIB_SOURCES ${GPU_SOURCES}) - include_directories(${GPU_SOURCES_DIR}) +if(NOT BUILD_MPI) + # mpistubs is aliased to MPI::MPI_CXX, but older versions of cmake won't work forward the include path + target_link_libraries(gpu PRIVATE mpi_stubs) +else() + target_link_libraries(gpu PRIVATE MPI::MPI_CXX) endif() +target_compile_definitions(gpu PRIVATE -DLAMMPS_${LAMMPS_SIZES}) +set_target_properties(gpu PROPERTIES OUTPUT_NAME lammps_gpu${LAMMPS_MACHINE}) +target_sources(lammps PRIVATE ${GPU_SOURCES}) +target_include_directories(lammps PRIVATE ${GPU_SOURCES_DIR}) diff --git a/cmake/Modules/Packages/KIM.cmake b/cmake/Modules/Packages/KIM.cmake index 617068ce13710a6b78089c6984ec9383cd1df71b..d74b82b0362356ccf3093f7e0360057c95fa7586 100644 --- a/cmake/Modules/Packages/KIM.cmake +++ b/cmake/Modules/Packages/KIM.cmake @@ -1,67 +1,63 @@ -if(PKG_KIM) - set(KIM-API_MIN_VERSION 2.1) - find_package(CURL) - if(CURL_FOUND) - include_directories(${CURL_INCLUDE_DIRS}) - list(APPEND LAMMPS_LINK_LIBS ${CURL_LIBRARIES}) - add_definitions(-DLMP_KIM_CURL) - set(LMP_DEBUG_CURL OFF CACHE STRING "Set libcurl verbose mode on/off. If on, it displays a lot of verbose information about its operations.") - mark_as_advanced(LMP_DEBUG_CURL) - if(LMP_DEBUG_CURL) - add_definitions(-DLMP_DEBUG_CURL) - endif() - set(LMP_NO_SSL_CHECK OFF CACHE STRING "Tell libcurl to not verify the peer. If on, the connection succeeds regardless of the names in the certificate. Insecure - Use with caution!") - mark_as_advanced(LMP_NO_SSL_CHECK) - if(LMP_NO_SSL_CHECK) - add_definitions(-DLMP_NO_SSL_CHECK) - endif() - endif() - find_package(KIM-API QUIET) - if(KIM-API_FOUND) - if (KIM-API_VERSION VERSION_LESS ${KIM-API_MIN_VERSION}) - if ("${DOWNLOAD_KIM}" STREQUAL "") - message(WARNING "Unsuitable KIM-API version \"${KIM-API_VERSION}\" found, but required is at least \"${KIM-API_MIN_VERSION}\". Default behavior set to download and build our own.") - endif() - set(DOWNLOAD_KIM_DEFAULT ON) - else() - set(DOWNLOAD_KIM_DEFAULT OFF) - endif() +set(KIM-API_MIN_VERSION 2.1.3) +find_package(CURL) +if(CURL_FOUND) + if(CMAKE_VERSION VERSION_LESS 3.12) + target_include_directories(lammps PRIVATE ${CURL_INCLUDE_DIRS}) + target_link_libraries(lammps PRIVATE ${CURL_LIBRARIES}) else() - if ("${DOWNLOAD_KIM}" STREQUAL "") - message(WARNING "KIM-API package not found. Default behavior set to download and build our own") - endif() - set(DOWNLOAD_KIM_DEFAULT ON) + target_link_libraries(lammps PRIVATE CURL::libcurl) endif() - option(DOWNLOAD_KIM "Download KIM-API from OpenKIM instead of using an already installed one" ${DOWNLOAD_KIM_DEFAULT}) - if(DOWNLOAD_KIM) - message(STATUS "KIM-API download requested - we will build our own") - # Workaround for cross compilation with MinGW where ${CMAKE_INSTALL_LIBDIR} - # is a full path, so we need to remove the prefix - string(REPLACE ${CMAKE_INSTALL_PREFIX} "" _KIM_LIBDIR ${CMAKE_INSTALL_LIBDIR}) - include(ExternalProject) - enable_language(C) - enable_language(Fortran) - ExternalProject_Add(kim_build - URL https://s3.openkim.org/kim-api/kim-api-2.1.3.txz - URL_MD5 6ee829a1bbba5f8b9874c88c4c4ebff8 - BINARY_DIR build - CMAKE_ARGS ${CMAKE_REQUEST_PIC} - -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER} - -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER} - -DCMAKE_Fortran_COMPILER=${CMAKE_Fortran_COMPILER} - -DCMAKE_INSTALL_PREFIX= - -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} - -DCMAKE_MAKE_PROGRAM=${CMAKE_MAKE_PROGRAM} - -DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE} - BUILD_BYPRODUCTS /${_KIM_LIBDIR}/libkim-api${CMAKE_SHARED_LIBRARY_SUFFIX} - ) - ExternalProject_get_property(kim_build INSTALL_DIR) - set(KIM-API_INCLUDE_DIRS ${INSTALL_DIR}/include/kim-api) - set(KIM-API_LDFLAGS ${INSTALL_DIR}/${_KIM_LIBDIR}/libkim-api${CMAKE_SHARED_LIBRARY_SUFFIX}) - list(APPEND LAMMPS_DEPS kim_build) - else() - find_package(KIM-API ${KIM-API_MIN_VERSION} REQUIRED) + target_compile_definitions(lammps PRIVATE -DLMP_KIM_CURL) + set(LMP_DEBUG_CURL OFF CACHE STRING "Set libcurl verbose mode on/off. If on, it displays a lot of verbose information about its operations.") + mark_as_advanced(LMP_DEBUG_CURL) + if(LMP_DEBUG_CURL) + target_compile_definitions(lammps PRIVATE -DLMP_DEBUG_CURL) + endif() + set(LMP_NO_SSL_CHECK OFF CACHE STRING "Tell libcurl to not verify the peer. If on, the connection succeeds regardless of the names in the certificate. Insecure - Use with caution!") + mark_as_advanced(LMP_NO_SSL_CHECK) + if(LMP_NO_SSL_CHECK) + target_compile_definitions(lammps PRIVATE -DLMP_NO_SSL_CHECK) endif() - list(APPEND LAMMPS_LINK_LIBS "${KIM-API_LDFLAGS}") - include_directories(${KIM-API_INCLUDE_DIRS}) +endif() +find_package(PkgConfig QUIET) +set(DOWNLOAD_KIM_DEFAULT ON) +if(PKG_CONFIG_FOUND) + pkg_check_modules(KIM-API QUIET libkim-api>=${KIM-API_MIN_VERSION}) + if(KIM-API_FOUND) + set(DOWNLOAD_KIM_DEFAULT OFF) + endif() +endif() +option(DOWNLOAD_KIM "Download KIM-API from OpenKIM instead of using an already installed one" ${DOWNLOAD_KIM_DEFAULT}) +if(DOWNLOAD_KIM) + message(STATUS "KIM-API download requested - we will build our own") + include(ExternalProject) + enable_language(C) + enable_language(Fortran) + ExternalProject_Add(kim_build + URL https://s3.openkim.org/kim-api/kim-api-2.1.3.txz + URL_MD5 6ee829a1bbba5f8b9874c88c4c4ebff8 + BINARY_DIR build + CMAKE_ARGS ${CMAKE_REQUEST_PIC} + -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER} + -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER} + -DCMAKE_Fortran_COMPILER=${CMAKE_Fortran_COMPILER} + -DCMAKE_INSTALL_LIBDIR=lib + -DCMAKE_INSTALL_PREFIX= + -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} + -DCMAKE_MAKE_PROGRAM=${CMAKE_MAKE_PROGRAM} + -DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE} + BUILD_BYPRODUCTS /lib/libkim-api${CMAKE_SHARED_LIBRARY_SUFFIX} + ) + ExternalProject_get_property(kim_build INSTALL_DIR) + file(MAKE_DIRECTORY ${INSTALL_DIR}/include/kim-api) + add_library(LAMMPS::KIM UNKNOWN IMPORTED) + set_target_properties(LAMMPS::KIM PROPERTIES + IMPORTED_LOCATION "${INSTALL_DIR}/lib/libkim-api${CMAKE_SHARED_LIBRARY_SUFFIX}" + INTERFACE_INCLUDE_DIRECTORIES "${INSTALL_DIR}/include/kim-api") + target_link_libraries(lammps PRIVATE LAMMPS::KIM) + add_dependencies(LAMMPS::KIM kim_build) +else() + find_package(PkgConfig REQUIRED) + pkg_check_modules(KIM-API REQUIRED IMPORTED_TARGET libkim-api>=${KIM-API_MIN_VERSION}) + target_link_libraries(lammps PRIVATE PkgConfig::KIM-API) endif() diff --git a/cmake/Modules/Packages/KOKKOS.cmake b/cmake/Modules/Packages/KOKKOS.cmake index 9093bb775a1908dea285d807999a4b1d3198ba16..620f1c65c62e92be331b356b6e2c1ad880d1707a 100644 --- a/cmake/Modules/Packages/KOKKOS.cmake +++ b/cmake/Modules/Packages/KOKKOS.cmake @@ -1,100 +1,119 @@ -if(PKG_KOKKOS) - option(EXTERNAL_KOKKOS "Build against external kokkos library" OFF) - option(DOWNLOAD_KOKKOS "Download the KOKKOS library instead of using the bundled one" OFF) - if(DOWNLOAD_KOKKOS) - if(CMAKE_VERSION VERSION_LESS 3.11) - message(FATAL_ERROR "Downloading kokkos currently only works with cmake-3.11 and higher") - endif() - message(STATUS "KOKKOS download requested - we will build our own") - # Workaround for cross compilation with MinGW where ${CMAKE_INSTALL_LIBDIR} - # is a full path, so we need to remove the prefix - string(REPLACE ${CMAKE_INSTALL_PREFIX} "" _KOKKOS_LIBDIR ${CMAKE_INSTALL_LIBDIR}) - file(DOWNLOAD https://github.com/kokkos/kokkos/compare/3.0.00...stanmoore1:lammps.diff ${CMAKE_CURRENT_BINARY_DIR}/kokkos-lammps.patch) - include(ExternalProject) - ExternalProject_Add(kokkos_build - URL https://github.com/kokkos/kokkos/archive/3.0.00.tar.gz - URL_MD5 281c7093aa3a603276e93abdf4be23b9 - PATCH_COMMAND patch -p1 < ${CMAKE_CURRENT_BINARY_DIR}/kokkos-lammps.patch - CMAKE_ARGS -DCMAKE_INSTALL_PREFIX= ${CMAKE_REQUEST_PIC} - -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} - -DCMAKE_MAKE_PROGRAM=${CMAKE_MAKE_PROGRAM} -DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE} - BUILD_BYPRODUCTS /${_KOKKOS_LIBDIR}/libkokkoscore.a - ) - list(APPEND LAMMPS_DEPS kokkos_build) - ExternalProject_get_property(kokkos_build INSTALL_DIR) - set(KOKKOS_LIBRARIES ${INSTALL_DIR}/${_KOKKOS_LIBDIR}/libkokkoscore.a) - set(KOKKOS_INCLUDE_DIRS ${INSTALL_DIR}/include) - include_directories(${KOKKOS_INCLUDE_DIRS}) - list(APPEND LAMMPS_LINK_LIBS ${KOKKOS_LIBRARIES} ${CMAKE_DL_LIBS}) - elseif(EXTERNAL_KOKKOS) - find_package(Kokkos 3) - if(NOT Kokkos_FOUND) - message(FATAL_ERROR "KOKKOS library not found, help CMake to find it by setting KOKKOS_LIBRARY, or set DOWNLOAD_KOKKOS=ON to download it") - endif() - list(APPEND LAMMPS_LINK_LIBS Kokkos::kokkos) - else() - set(LAMMPS_LIB_KOKKOS_SRC_DIR ${LAMMPS_LIB_SOURCE_DIR}/kokkos) - set(LAMMPS_LIB_KOKKOS_BIN_DIR ${LAMMPS_LIB_BINARY_DIR}/kokkos) - add_subdirectory(${LAMMPS_LIB_KOKKOS_SRC_DIR} ${LAMMPS_LIB_KOKKOS_BIN_DIR}) +######################################################################## +# consistency checks and Kokkos options/settings required by LAMMPS +if(Kokkos_ENABLE_CUDA) + message(STATUS "KOKKOS: Enabling CUDA LAMBDA function support") + set(Kokkos_ENABLE_CUDA_LAMBDA ON CACHE BOOL "" FORCE) +endif() +# Adding OpenMP compiler flags without the checks done for +# BUILD_OMP can result in compile failures. Enforce consistency. +if(Kokkos_ENABLE_OPENMP AND NOT BUILD_OMP) + message(FATAL_ERROR "Must enable BUILD_OMP with Kokkos_ENABLE_OPENMP") +endif() +######################################################################## - set(Kokkos_INCLUDE_DIRS ${LAMMPS_LIB_KOKKOS_SRC_DIR}/core/src - ${LAMMPS_LIB_KOKKOS_SRC_DIR}/containers/src - ${LAMMPS_LIB_KOKKOS_SRC_DIR}/algorithms/src - ${LAMMPS_LIB_KOKKOS_BIN_DIR}) - include_directories(${Kokkos_INCLUDE_DIRS}) - list(APPEND LAMMPS_LINK_LIBS kokkos) +option(EXTERNAL_KOKKOS "Build against external kokkos library" OFF) +option(DOWNLOAD_KOKKOS "Download the KOKKOS library instead of using the bundled one" OFF) +if(DOWNLOAD_KOKKOS) + # extract Kokkos-related variables and values so we can forward them to the Kokkos library build + get_cmake_property(_VARS VARIABLES) + list(FILTER _VARS INCLUDE REGEX ^Kokkos_) + foreach(_VAR IN LISTS _VARS) + list(APPEND KOKKOS_LIB_BUILD_ARGS "-D${_VAR}=${${_VAR}}") + endforeach() + message(STATUS "KOKKOS download requested - we will build our own") + list(APPEND KOKKOS_LIB_BUILD_ARGS "-DCMAKE_INSTALL_PREFIX=") + if(CMAKE_REQUEST_PIC) + list(APPEND KOKKOS_LIB_BUILD_ARGS ${CMAKE_REQUEST_PIC}) endif() - add_definitions(-DLMP_KOKKOS) + # append other CMake variables that need to be forwarded to CMAKE_ARGS + list(APPEND KOKKOS_LIB_BUILD_ARGS "-DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}") + list(APPEND KOKKOS_LIB_BUILD_ARGS "-DCMAKE_INSTALL_LIBDIR=lib") + list(APPEND KOKKOS_LIB_BUILD_ARGS "-DCMAKE_MAKE_PROGRAM=${CMAKE_MAKE_PROGRAM}") + list(APPEND KOKKOS_LIB_BUILD_ARGS "-DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER}") + list(APPEND KOKKOS_LIB_BUILD_ARGS "-DCMAKE_CXX_STANDARD=${CMAKE_CXX_STANDARD}") + list(APPEND KOKKOS_LIB_BUILD_ARGS "-DCMAKE_CXX_EXTENSIONS=${CMAKE_CXX_EXTENSIONS}") + list(APPEND KOKKOS_LIB_BUILD_ARGS "-DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE}") + include(ExternalProject) + ExternalProject_Add(kokkos_build + URL https://github.com/kokkos/kokkos/archive/3.1.01.tar.gz + URL_MD5 3ccb2100f7fc316891e7dad3bc33fa37 + CMAKE_ARGS ${KOKKOS_LIB_BUILD_ARGS} + BUILD_BYPRODUCTS /lib/libkokkoscore.a + ) + ExternalProject_get_property(kokkos_build INSTALL_DIR) + file(MAKE_DIRECTORY ${INSTALL_DIR}/include) + add_library(LAMMPS::KOKKOS UNKNOWN IMPORTED) + set_target_properties(LAMMPS::KOKKOS PROPERTIES + IMPORTED_LOCATION "${INSTALL_DIR}/lib/libkokkoscore.a" + INTERFACE_INCLUDE_DIRECTORIES "${INSTALL_DIR}/include" + INTERFACE_LINK_LIBRARIES ${CMAKE_DL_LIBS}) + target_link_libraries(lammps PRIVATE LAMMPS::KOKKOS) + add_dependencies(LAMMPS::KOKKOS kokkos_build) +elseif(EXTERNAL_KOKKOS) + find_package(Kokkos 3.1.01 REQUIRED CONFIG) + target_link_libraries(lammps PRIVATE Kokkos::kokkos) +else() + set(LAMMPS_LIB_KOKKOS_SRC_DIR ${LAMMPS_LIB_SOURCE_DIR}/kokkos) + set(LAMMPS_LIB_KOKKOS_BIN_DIR ${LAMMPS_LIB_BINARY_DIR}/kokkos) + add_subdirectory(${LAMMPS_LIB_KOKKOS_SRC_DIR} ${LAMMPS_LIB_KOKKOS_BIN_DIR}) - set(KOKKOS_PKG_SOURCES_DIR ${LAMMPS_SOURCE_DIR}/KOKKOS) - set(KOKKOS_PKG_SOURCES ${KOKKOS_PKG_SOURCES_DIR}/kokkos.cpp - ${KOKKOS_PKG_SOURCES_DIR}/atom_kokkos.cpp - ${KOKKOS_PKG_SOURCES_DIR}/atom_vec_kokkos.cpp - ${KOKKOS_PKG_SOURCES_DIR}/comm_kokkos.cpp - ${KOKKOS_PKG_SOURCES_DIR}/comm_tiled_kokkos.cpp - ${KOKKOS_PKG_SOURCES_DIR}/min_kokkos.cpp - ${KOKKOS_PKG_SOURCES_DIR}/min_linesearch_kokkos.cpp - ${KOKKOS_PKG_SOURCES_DIR}/neighbor_kokkos.cpp - ${KOKKOS_PKG_SOURCES_DIR}/neigh_list_kokkos.cpp - ${KOKKOS_PKG_SOURCES_DIR}/neigh_bond_kokkos.cpp - ${KOKKOS_PKG_SOURCES_DIR}/fix_nh_kokkos.cpp - ${KOKKOS_PKG_SOURCES_DIR}/nbin_kokkos.cpp - ${KOKKOS_PKG_SOURCES_DIR}/npair_kokkos.cpp - ${KOKKOS_PKG_SOURCES_DIR}/npair_halffull_kokkos.cpp - ${KOKKOS_PKG_SOURCES_DIR}/domain_kokkos.cpp - ${KOKKOS_PKG_SOURCES_DIR}/modify_kokkos.cpp) + set(Kokkos_INCLUDE_DIRS ${LAMMPS_LIB_KOKKOS_SRC_DIR}/core/src + ${LAMMPS_LIB_KOKKOS_SRC_DIR}/containers/src + ${LAMMPS_LIB_KOKKOS_SRC_DIR}/algorithms/src + ${LAMMPS_LIB_KOKKOS_BIN_DIR}) + target_include_directories(lammps PRIVATE ${Kokkos_INCLUDE_DIRS}) + target_link_libraries(lammps PRIVATE kokkos) +endif() +target_compile_definitions(lammps PRIVATE -DLMP_KOKKOS) + +set(KOKKOS_PKG_SOURCES_DIR ${LAMMPS_SOURCE_DIR}/KOKKOS) +set(KOKKOS_PKG_SOURCES ${KOKKOS_PKG_SOURCES_DIR}/kokkos.cpp + ${KOKKOS_PKG_SOURCES_DIR}/atom_kokkos.cpp + ${KOKKOS_PKG_SOURCES_DIR}/atom_vec_kokkos.cpp + ${KOKKOS_PKG_SOURCES_DIR}/comm_kokkos.cpp + ${KOKKOS_PKG_SOURCES_DIR}/comm_tiled_kokkos.cpp + ${KOKKOS_PKG_SOURCES_DIR}/min_kokkos.cpp + ${KOKKOS_PKG_SOURCES_DIR}/min_linesearch_kokkos.cpp + ${KOKKOS_PKG_SOURCES_DIR}/neighbor_kokkos.cpp + ${KOKKOS_PKG_SOURCES_DIR}/neigh_list_kokkos.cpp + ${KOKKOS_PKG_SOURCES_DIR}/neigh_bond_kokkos.cpp + ${KOKKOS_PKG_SOURCES_DIR}/fix_nh_kokkos.cpp + ${KOKKOS_PKG_SOURCES_DIR}/nbin_kokkos.cpp + ${KOKKOS_PKG_SOURCES_DIR}/npair_kokkos.cpp + ${KOKKOS_PKG_SOURCES_DIR}/npair_halffull_kokkos.cpp + ${KOKKOS_PKG_SOURCES_DIR}/domain_kokkos.cpp + ${KOKKOS_PKG_SOURCES_DIR}/modify_kokkos.cpp) - if(PKG_KSPACE) - list(APPEND KOKKOS_PKG_SOURCES ${KOKKOS_PKG_SOURCES_DIR}/fft3d_kokkos.cpp - ${KOKKOS_PKG_SOURCES_DIR}/gridcomm_kokkos.cpp - ${KOKKOS_PKG_SOURCES_DIR}/remap_kokkos.cpp) - if(KOKKOS_ENABLE_CUDA) - if(NOT ${FFT} STREQUAL "KISS") - add_definitions(-DFFT_CUFFT) - list(APPEND LAMMPS_LINK_LIBS cufft) - endif() +if(PKG_KSPACE) + list(APPEND KOKKOS_PKG_SOURCES ${KOKKOS_PKG_SOURCES_DIR}/fft3d_kokkos.cpp + ${KOKKOS_PKG_SOURCES_DIR}/gridcomm_kokkos.cpp + ${KOKKOS_PKG_SOURCES_DIR}/remap_kokkos.cpp) + if(Kokkos_ENABLE_CUDA) + if(NOT ${FFT} STREQUAL "KISS") + target_compile_definitions(lammps PRIVATE -DFFT_CUFFT) + target_link_libraries(lammps PRIVATE cufft) endif() endif() +endif() - set_property(GLOBAL PROPERTY "KOKKOS_PKG_SOURCES" "${KOKKOS_PKG_SOURCES}") - - # detects styles which have KOKKOS version - RegisterStylesExt(${KOKKOS_PKG_SOURCES_DIR} kokkos KOKKOS_PKG_SOURCES) +set_property(GLOBAL PROPERTY "KOKKOS_PKG_SOURCES" "${KOKKOS_PKG_SOURCES}") - # register kokkos-only styles - RegisterNBinStyle(${KOKKOS_PKG_SOURCES_DIR}/nbin_kokkos.h) - RegisterNPairStyle(${KOKKOS_PKG_SOURCES_DIR}/npair_kokkos.h) - RegisterNPairStyle(${KOKKOS_PKG_SOURCES_DIR}/npair_halffull_kokkos.h) +# detects styles which have KOKKOS version +RegisterStylesExt(${KOKKOS_PKG_SOURCES_DIR} kokkos KOKKOS_PKG_SOURCES) - if(PKG_USER-DPD) - get_property(KOKKOS_PKG_SOURCES GLOBAL PROPERTY KOKKOS_PKG_SOURCES) - list(APPEND KOKKOS_PKG_SOURCES ${KOKKOS_PKG_SOURCES_DIR}/npair_ssa_kokkos.cpp) - RegisterNPairStyle(${KOKKOS_PKG_SOURCES_DIR}/npair_ssa_kokkos.h) - set_property(GLOBAL PROPERTY "KOKKOS_PKG_SOURCES" "${KOKKOS_PKG_SOURCES}") - endif() +# register kokkos-only styles +RegisterNBinStyle(${KOKKOS_PKG_SOURCES_DIR}/nbin_kokkos.h) +RegisterNPairStyle(${KOKKOS_PKG_SOURCES_DIR}/npair_kokkos.h) +RegisterNPairStyle(${KOKKOS_PKG_SOURCES_DIR}/npair_halffull_kokkos.h) +if(PKG_USER-DPD) get_property(KOKKOS_PKG_SOURCES GLOBAL PROPERTY KOKKOS_PKG_SOURCES) - - list(APPEND LIB_SOURCES ${KOKKOS_PKG_SOURCES}) - include_directories(${KOKKOS_PKG_SOURCES_DIR}) + list(APPEND KOKKOS_PKG_SOURCES ${KOKKOS_PKG_SOURCES_DIR}/npair_ssa_kokkos.cpp) + RegisterNPairStyle(${KOKKOS_PKG_SOURCES_DIR}/npair_ssa_kokkos.h) + set_property(GLOBAL PROPERTY "KOKKOS_PKG_SOURCES" "${KOKKOS_PKG_SOURCES}") endif() + +get_property(KOKKOS_PKG_SOURCES GLOBAL PROPERTY KOKKOS_PKG_SOURCES) + +target_sources(lammps PRIVATE ${KOKKOS_PKG_SOURCES}) +target_include_directories(lammps PRIVATE ${KOKKOS_PKG_SOURCES_DIR}) diff --git a/cmake/Modules/Packages/KSPACE.cmake b/cmake/Modules/Packages/KSPACE.cmake index 07612447f985140dc88fb1c55112814a32ba8c81..5e79813ac04572520951595a2dffbbc32ce42531 100644 --- a/cmake/Modules/Packages/KSPACE.cmake +++ b/cmake/Modules/Packages/KSPACE.cmake @@ -1,60 +1,56 @@ -if(PKG_KSPACE) - option(FFT_SINGLE "Use single precision FFTs instead of double precision FFTs" OFF) - set(FFTW "FFTW3") - if(FFT_SINGLE) - set(FFTW "FFTW3F") - add_definitions(-DFFT_SINGLE) - endif() - find_package(${FFTW} QUIET) - if(${FFTW}_FOUND) - set(FFT "FFTW3" CACHE STRING "FFT library for KSPACE package") +option(FFT_SINGLE "Use single precision FFTs instead of double precision FFTs" OFF) +set(FFTW "FFTW3") +if(FFT_SINGLE) + set(FFTW "FFTW3F") + target_compile_definitions(lammps PRIVATE -DFFT_SINGLE) +endif() +find_package(${FFTW} QUIET) +if(${FFTW}_FOUND) + set(FFT "FFTW3" CACHE STRING "FFT library for KSPACE package") +else() + set(FFT "KISS" CACHE STRING "FFT library for KSPACE package") +endif() +set(FFT_VALUES KISS FFTW3 MKL) +set_property(CACHE FFT PROPERTY STRINGS ${FFT_VALUES}) +validate_option(FFT FFT_VALUES) +string(TOUPPER ${FFT} FFT) + +if(FFT STREQUAL "FFTW3") + find_package(${FFTW} REQUIRED) + target_compile_definitions(lammps PRIVATE -DFFT_FFTW3) + target_link_libraries(lammps PRIVATE ${FFTW}::${FFTW}) + if(FFTW3_OMP_LIBRARY OR FFTW3F_OMP_LIBRARY) + option(FFT_FFTW_THREADS "Use threaded FFTW library" ON) else() - set(FFT "KISS" CACHE STRING "FFT library for KSPACE package") + option(FFT_FFTW_THREADS "Use threaded FFT library" OFF) endif() - set(FFT_VALUES KISS FFTW3 MKL) - set_property(CACHE FFT PROPERTY STRINGS ${FFT_VALUES}) - validate_option(FFT FFT_VALUES) - string(TOUPPER ${FFT} FFT) - if(FFT STREQUAL "FFTW3") - find_package(${FFTW} REQUIRED) - add_definitions(-DFFT_FFTW3) - include_directories(${${FFTW}_INCLUDE_DIRS}) - list(APPEND LAMMPS_LINK_LIBS ${${FFTW}_LIBRARIES}) + if(FFT_FFTW_THREADS) if(FFTW3_OMP_LIBRARY OR FFTW3F_OMP_LIBRARY) - option(FFT_FFTW_THREADS "Use threaded FFTW library" ON) + target_compile_definitions(lammps PRIVATE -DFFT_FFTW_THREADS) + target_link_libraries(lammps PRIVATE ${FFTW}::${FFTW}_OMP) else() - option(FFT_FFTW_THREADS "Use threaded FFT library" OFF) - endif() - - if(FFT_FFTW_THREADS) - if(FFTW3_OMP_LIBRARY OR FFTW3F_OMP_LIBRARY) - add_definitions(-DFFT_FFTW_THREADS) - list(APPEND LAMMPS_LINK_LIBS ${${FFTW}_OMP_LIBRARIES}) - else() - message(FATAL_ERROR "Need OpenMP enabled FFTW3 library for FFT_THREADS") - endif() + message(FATAL_ERROR "Need OpenMP enabled FFTW3 library for FFT_THREADS") endif() - elseif(FFT STREQUAL "MKL") - find_package(MKL REQUIRED) - add_definitions(-DFFT_MKL) - option(FFT_MKL_THREADS "Use threaded MKL FFT" ON) - if(FFT_MKL_THREADS) - add_definitions(-DFFT_MKL_THREADS) - endif() - include_directories(${MKL_INCLUDE_DIRS}) - list(APPEND LAMMPS_LINK_LIBS ${MKL_LIBRARIES}) - else() - # last option is KISSFFT - add_definitions(-DFFT_KISS) endif() - - set(FFT_PACK "array" CACHE STRING "Optimization for FFT") - set(FFT_PACK_VALUES array pointer memcpy) - set_property(CACHE FFT_PACK PROPERTY STRINGS ${FFT_PACK_VALUES}) - validate_option(FFT_PACK FFT_PACK_VALUES) - if(NOT FFT_PACK STREQUAL "array") - string(TOUPPER ${FFT_PACK} FFT_PACK) - add_definitions(-DFFT_PACK_${FFT_PACK}) +elseif(FFT STREQUAL "MKL") + find_package(MKL REQUIRED) + target_compile_definitions(lammps PRIVATE -DFFT_MKL) + option(FFT_MKL_THREADS "Use threaded MKL FFT" ON) + if(FFT_MKL_THREADS) + target_compile_definitions(lammps PRIVATE -DFFT_MKL_THREADS) endif() + target_link_libraries(lammps PRIVATE MKL::MKL) +else() + # last option is KISSFFT + target_compile_definitions(lammps PRIVATE -DFFT_KISS) +endif() + +set(FFT_PACK "array" CACHE STRING "Optimization for FFT") +set(FFT_PACK_VALUES array pointer memcpy) +set_property(CACHE FFT_PACK PROPERTY STRINGS ${FFT_PACK_VALUES}) +validate_option(FFT_PACK FFT_PACK_VALUES) +if(NOT FFT_PACK STREQUAL "array") + string(TOUPPER ${FFT_PACK} FFT_PACK) + target_compile_definitions(lammps PRIVATE -DFFT_PACK_${FFT_PACK}) endif() diff --git a/cmake/Modules/Packages/LATTE.cmake b/cmake/Modules/Packages/LATTE.cmake index 9f665d7f0e7299c33fbd81cfe9d03874e56edf7c..e66f83fa439160938919f9fe917c986b80af60f0 100644 --- a/cmake/Modules/Packages/LATTE.cmake +++ b/cmake/Modules/Packages/LATTE.cmake @@ -1,40 +1,40 @@ -if(PKG_LATTE) - enable_language(Fortran) - find_package(LATTE) - if(LATTE_FOUND) - set(DOWNLOAD_LATTE_DEFAULT OFF) - else() - set(DOWNLOAD_LATTE_DEFAULT ON) - endif() - option(DOWNLOAD_LATTE "Download the LATTE library instead of using an already installed one" ${DOWNLOAD_LATTE_DEFAULT}) - if(DOWNLOAD_LATTE) - message(STATUS "LATTE download requested - we will build our own") - # Workaround for cross compilation with MinGW where ${CMAKE_INSTALL_LIBDIR} - # is a full path, so we need to remove the prefix - string(REPLACE ${CMAKE_INSTALL_PREFIX} "" _LATTE_LIBDIR ${CMAKE_INSTALL_LIBDIR}) - include(ExternalProject) - ExternalProject_Add(latte_build - URL https://github.com/lanl/LATTE/archive/v1.2.1.tar.gz - URL_MD5 85ac414fdada2d04619c8f936344df14 - SOURCE_SUBDIR cmake - CMAKE_ARGS -DCMAKE_INSTALL_PREFIX= ${CMAKE_REQUEST_PIC} - -DBLAS_LIBRARIES=${BLAS_LIBRARIES} -DLAPACK_LIBRARIES=${LAPACK_LIBRARIES} - -DCMAKE_Fortran_COMPILER=${CMAKE_Fortran_COMPILER} -DCMAKE_Fortran_FLAGS=${CMAKE_Fortran_FLAGS} - -DCMAKE_Fortran_FLAGS_${BTYPE}=${CMAKE_Fortran_FLAGS_${BTYPE}} -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} - -DCMAKE_MAKE_PROGRAM=${CMAKE_MAKE_PROGRAM} -DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE} - BUILD_BYPRODUCTS /${_LATTE_LIBDIR}/liblatte.a - ) - list(APPEND LAMMPS_DEPS latte_build) - ExternalProject_get_property(latte_build INSTALL_DIR) - set(LATTE_LIBRARIES ${INSTALL_DIR}/${_LATTE_LIBDIR}/liblatte.a) - else() - find_package(LATTE) - if(NOT LATTE_FOUND) - message(FATAL_ERROR "LATTE library not found, help CMake to find it by setting LATTE_LIBRARY, or set DOWNLOAD_LATTE=ON to download it") - endif() - endif() - if(NOT LAPACK_FOUND) - add_dependencies(latte_build linalg) - endif() - list(APPEND LAMMPS_LINK_LIBS ${LATTE_LIBRARIES} ${LAPACK_LIBRARIES}) +enable_language(Fortran) + +# using lammps in a super-build setting +if(TARGET LATTE::latte) + target_link_libraries(lammps PRIVATE LATTE::latte) + return() +endif() + +find_package(LATTE 1.2.2 CONFIG) +if(LATTE_FOUND) + set(DOWNLOAD_LATTE_DEFAULT OFF) +else() + set(DOWNLOAD_LATTE_DEFAULT ON) +endif() +option(DOWNLOAD_LATTE "Download the LATTE library instead of using an already installed one" ${DOWNLOAD_LATTE_DEFAULT}) +if(DOWNLOAD_LATTE) + message(STATUS "LATTE download requested - we will build our own") + include(ExternalProject) + ExternalProject_Add(latte_build + URL https://github.com/lanl/LATTE/archive/v1.2.2.tar.gz + URL_MD5 820e73a457ced178c08c71389a385de7 + SOURCE_SUBDIR cmake + CMAKE_ARGS -DCMAKE_INSTALL_PREFIX= ${CMAKE_REQUEST_PIC} -DCMAKE_INSTALL_LIBDIR=lib + -DBLAS_LIBRARIES=${BLAS_LIBRARIES} -DLAPACK_LIBRARIES=${LAPACK_LIBRARIES} + -DCMAKE_Fortran_COMPILER=${CMAKE_Fortran_COMPILER} -DCMAKE_Fortran_FLAGS=${CMAKE_Fortran_FLAGS} + -DCMAKE_Fortran_FLAGS_${BTYPE}=${CMAKE_Fortran_FLAGS_${BTYPE}} -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} + -DCMAKE_MAKE_PROGRAM=${CMAKE_MAKE_PROGRAM} -DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE} + BUILD_BYPRODUCTS /lib/liblatte.a + ) + ExternalProject_get_property(latte_build INSTALL_DIR) + add_library(LAMMPS::LATTE UNKNOWN IMPORTED) + set_target_properties(LAMMPS::LATTE PROPERTIES + IMPORTED_LOCATION "${INSTALL_DIR}/lib/liblatte.a" + INTERFACE_LINK_LIBRARIES "${LAPACK_LIBRARIES}") + target_link_libraries(lammps PRIVATE LAMMPS::LATTE) + add_dependencies(LAMMPS::LATTE latte_build) +else() + find_package(LATTE 1.2.2 REQUIRED CONFIG) + target_link_libraries(lammps PRIVATE LATTE::latte) endif() diff --git a/cmake/Modules/Packages/MESSAGE.cmake b/cmake/Modules/Packages/MESSAGE.cmake index aff9c2964adecf9088dcd1e23463f1fc36bb7bc9..fb62763828d8f7d40812963e34608718bf643a93 100644 --- a/cmake/Modules/Packages/MESSAGE.cmake +++ b/cmake/Modules/Packages/MESSAGE.cmake @@ -1,32 +1,32 @@ -if(PKG_MESSAGE) - if(LAMMPS_SIZES STREQUAL BIGBIG) - message(FATAL_ERROR "The MESSAGE Package is not compatible with -DLAMMPS_BIGBIG") - endif() - option(MESSAGE_ZMQ "Use ZeroMQ in MESSAGE package" OFF) - file(GLOB_RECURSE cslib_SOURCES ${LAMMPS_LIB_SOURCE_DIR}/message/cslib/[^.]*.F - ${LAMMPS_LIB_SOURCE_DIR}/message/cslib/[^.]*.c - ${LAMMPS_LIB_SOURCE_DIR}/message/cslib/[^.]*.cpp) - - add_library(cslib STATIC ${cslib_SOURCES}) - if(BUILD_MPI) - target_compile_definitions(cslib PRIVATE -DMPI_YES) - set_target_properties(cslib PROPERTIES OUTPUT_NAME "csmpi") - else() - target_compile_definitions(cslib PRIVATE -DMPI_NO) - target_include_directories(cslib PRIVATE ${LAMMPS_LIB_SOURCE_DIR}/message/cslib/src/STUBS_MPI) - set_target_properties(cslib PROPERTIES OUTPUT_NAME "csnompi") - endif() +if(LAMMPS_SIZES STREQUAL BIGBIG) + message(FATAL_ERROR "The MESSAGE Package is not compatible with -DLAMMPS_BIGBIG") +endif() +option(MESSAGE_ZMQ "Use ZeroMQ in MESSAGE package" OFF) +file(GLOB_RECURSE cslib_SOURCES ${LAMMPS_LIB_SOURCE_DIR}/message/cslib/[^.]*.F + ${LAMMPS_LIB_SOURCE_DIR}/message/cslib/[^.]*.c + ${LAMMPS_LIB_SOURCE_DIR}/message/cslib/[^.]*.cpp) - if(MESSAGE_ZMQ) - target_compile_definitions(cslib PRIVATE -DZMQ_YES) - find_package(ZMQ REQUIRED) - target_include_directories(cslib PRIVATE ${ZMQ_INCLUDE_DIRS}) - target_link_libraries(cslib PUBLIC ${ZMQ_LIBRARIES}) - else() - target_compile_definitions(cslib PRIVATE -DZMQ_NO) - target_include_directories(cslib PRIVATE ${LAMMPS_LIB_SOURCE_DIR}/message/cslib/src/STUBS_ZMQ) - endif() +add_library(cslib STATIC ${cslib_SOURCES}) +target_compile_definitions(cslib PRIVATE -DLAMMPS_${LAMMPS_SIZES}) +set_target_properties(cslib PROPERTIES OUTPUT_NAME lammps_cslib${LAMMPS_MACHINE}) +if(BUILD_MPI) + target_compile_definitions(cslib PRIVATE -DMPI_YES) + set_target_properties(cslib PROPERTIES OUTPUT_NAME "csmpi") + target_link_libraries(cslib PRIVATE MPI::MPI_CXX) +else() + target_compile_definitions(cslib PRIVATE -DMPI_NO) + target_include_directories(cslib PRIVATE ${LAMMPS_LIB_SOURCE_DIR}/message/cslib/src/STUBS_MPI) + set_target_properties(cslib PROPERTIES OUTPUT_NAME "csnompi") +endif() - list(APPEND LAMMPS_LINK_LIBS cslib) - include_directories(${LAMMPS_LIB_SOURCE_DIR}/message/cslib/src) +if(MESSAGE_ZMQ) + target_compile_definitions(cslib PRIVATE -DZMQ_YES) + find_package(ZMQ REQUIRED) + target_link_libraries(cslib PUBLIC ZMQ::ZMQ) +else() + target_compile_definitions(cslib PRIVATE -DZMQ_NO) + target_include_directories(cslib PRIVATE ${LAMMPS_LIB_SOURCE_DIR}/message/cslib/src/STUBS_ZMQ) endif() + +target_link_libraries(lammps PRIVATE cslib) +target_include_directories(lammps PRIVATE ${LAMMPS_LIB_SOURCE_DIR}/message/cslib/src) diff --git a/cmake/Modules/Packages/MSCG.cmake b/cmake/Modules/Packages/MSCG.cmake index 35f0c57449b28755f1993bf3212c02df27c93787..55f71588fe621ce8e244c977b94902472ec48b88 100644 --- a/cmake/Modules/Packages/MSCG.cmake +++ b/cmake/Modules/Packages/MSCG.cmake @@ -1,48 +1,45 @@ -if(PKG_MSCG) - find_package(GSL REQUIRED) - find_package(MSCG QUIET) - if(MSGC_FOUND) - set(DOWNLOAD_MSCG_DEFAULT OFF) - else() - set(DOWNLOAD_MSCG_DEFAULT ON) - endif() - option(DOWNLOAD_MSCG "Download MSCG library instead of using an already installed one)" ${DOWNLOAD_MSCG_DEFAULT}) - if(DOWNLOAD_MSCG) - include(ExternalProject) - if(NOT LAPACK_FOUND) - set(EXTRA_MSCG_OPTS "-DLAPACK_LIBRARIES=${CMAKE_CURRENT_BINARY_DIR}/liblinalg.a") - endif() - ExternalProject_Add(mscg_build - URL https://github.com/uchicago-voth/MSCG-release/archive/1.7.3.1.tar.gz - URL_MD5 8c45e269ee13f60b303edd7823866a91 - SOURCE_SUBDIR src/CMake - CMAKE_ARGS ${CMAKE_REQUEST_PIC} ${EXTRA_MSCG_OPTS} - -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER} - -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER} - -DCMAKE_Fortran_COMPILER=${CMAKE_Fortran_COMPILER} - -DCMAKE_INSTALL_PREFIX= - -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} - -DCMAKE_MAKE_PROGRAM=${CMAKE_MAKE_PROGRAM} - -DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE} - BUILD_COMMAND ${CMAKE_COMMAND} --build . --target mscg - INSTALL_COMMAND "" - BUILD_BYPRODUCTS /libmscg.a - ) - ExternalProject_get_property(mscg_build BINARY_DIR) - set(MSCG_LIBRARIES ${BINARY_DIR}/libmscg.a) - ExternalProject_get_property(mscg_build SOURCE_DIR) - set(MSCG_INCLUDE_DIRS ${SOURCE_DIR}/src) - list(APPEND LAMMPS_DEPS mscg_build) - if(NOT LAPACK_FOUND) - file(MAKE_DIRECTORY ${MSCG_INCLUDE_DIRS}) - add_dependencies(mscg_build linalg) - endif() - else() - find_package(MSCG) - if(NOT MSCG_FOUND) - message(FATAL_ERROR "MSCG not found, help CMake to find it by setting MSCG_LIBRARY and MSCG_INCLUDE_DIRS, or set DOWNLOAD_MSCG=ON to download it") - endif() +find_package(GSL REQUIRED) +find_package(MSCG QUIET) +if(MSGC_FOUND) + set(DOWNLOAD_MSCG_DEFAULT OFF) +else() + set(DOWNLOAD_MSCG_DEFAULT ON) +endif() +option(DOWNLOAD_MSCG "Download MSCG library instead of using an already installed one)" ${DOWNLOAD_MSCG_DEFAULT}) +if(DOWNLOAD_MSCG) + include(ExternalProject) + ExternalProject_Add(mscg_build + URL https://github.com/uchicago-voth/MSCG-release/archive/1.7.3.1.tar.gz + URL_MD5 8c45e269ee13f60b303edd7823866a91 + SOURCE_SUBDIR src/CMake + CMAKE_ARGS ${CMAKE_REQUEST_PIC} ${EXTRA_MSCG_OPTS} + -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER} + -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER} + -DCMAKE_Fortran_COMPILER=${CMAKE_Fortran_COMPILER} + -DBLAS_LIBRARIES=${BLAS_LIBRARIES} -DLAPACK_LIBRARIES=${LAPACK_LIBRARIES} + -DCMAKE_INSTALL_PREFIX= + -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} + -DCMAKE_MAKE_PROGRAM=${CMAKE_MAKE_PROGRAM} + -DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE} + BUILD_COMMAND ${CMAKE_COMMAND} --build . --target mscg + INSTALL_COMMAND "" + BUILD_BYPRODUCTS /libmscg.a + ) + ExternalProject_get_property(mscg_build BINARY_DIR) + ExternalProject_get_property(mscg_build SOURCE_DIR) + file(MAKE_DIRECTORY ${SOURCE_DIR}/src) + add_library(LAMMPS::MSCG UNKNOWN IMPORTED) + set_target_properties(LAMMPS::MSCG PROPERTIES + IMPORTED_LOCATION "${BINARY_DIR}/libmscg.a" + INTERFACE_INCLUDE_DIRECTORIES "${SOURCE_DIR}/src" + INTERFACE_LINK_LIBRARIES "${LAPACK_LIBRARIES}") + target_link_libraries(lammps PRIVATE LAMMPS::MSCG) + add_dependencies(LAMMPS::MSCG mscg_build) +else() + find_package(MSCG) + if(NOT MSCG_FOUND) + message(FATAL_ERROR "MSCG not found, help CMake to find it by setting MSCG_LIBRARY and MSCG_INCLUDE_DIRS, or set DOWNLOAD_MSCG=ON to download it") endif() - list(APPEND LAMMPS_LINK_LIBS ${MSCG_LIBRARIES} ${GSL_LIBRARIES} ${LAPACK_LIBRARIES}) - include_directories(${MSCG_INCLUDE_DIRS}) + target_link_libraries(lammps PRIVATE MSCG::MSCG) endif() +target_link_libraries(lammps PRIVATE GSL::gsl ${LAPACK_LIBRARIES}) diff --git a/cmake/Modules/Packages/OPT.cmake b/cmake/Modules/Packages/OPT.cmake index f2802c757bdb1d3472395270c9ba1f7a4b652c19..bcf572b087d56f66c512b6d906f987d512d8347a 100644 --- a/cmake/Modules/Packages/OPT.cmake +++ b/cmake/Modules/Packages/OPT.cmake @@ -1,13 +1,11 @@ -if(PKG_OPT) - set(OPT_SOURCES_DIR ${LAMMPS_SOURCE_DIR}/OPT) - set(OPT_SOURCES) - set_property(GLOBAL PROPERTY "OPT_SOURCES" "${OPT_SOURCES}") + set(OPT_SOURCES_DIR ${LAMMPS_SOURCE_DIR}/OPT) + set(OPT_SOURCES) + set_property(GLOBAL PROPERTY "OPT_SOURCES" "${OPT_SOURCES}") - # detects styles which have OPT version - RegisterStylesExt(${OPT_SOURCES_DIR} opt OPT_SOURCES) + # detects styles which have OPT version + RegisterStylesExt(${OPT_SOURCES_DIR} opt OPT_SOURCES) - get_property(OPT_SOURCES GLOBAL PROPERTY OPT_SOURCES) + get_property(OPT_SOURCES GLOBAL PROPERTY OPT_SOURCES) - list(APPEND LIB_SOURCES ${OPT_SOURCES}) - include_directories(${OPT_SOURCES_DIR}) -endif() + target_sources(lammps PRIVATE ${OPT_SOURCES}) + target_include_directories(lammps PRIVATE ${OPT_SOURCES_DIR}) diff --git a/cmake/Modules/Packages/PYTHON.cmake b/cmake/Modules/Packages/PYTHON.cmake index 4f8959ae389ca97ef8774641f08949cf1bff600c..a577f824fe418cefb7d728acea61668151ed0364 100644 --- a/cmake/Modules/Packages/PYTHON.cmake +++ b/cmake/Modules/Packages/PYTHON.cmake @@ -1,6 +1,9 @@ -if(PKG_PYTHON) - find_package(PythonLibs REQUIRED) - add_definitions(-DLMP_PYTHON) - include_directories(${PYTHON_INCLUDE_DIR}) - list(APPEND LAMMPS_LINK_LIBS ${PYTHON_LIBRARY}) +if(CMAKE_VERSION VERSION_LESS 3.12) + find_package(PythonLibs REQUIRED) # Deprecated since version 3.12 + target_include_directories(lammps PRIVATE ${PYTHON_INCLUDE_DIR}) + target_link_libraries(lammps PRIVATE ${PYTHON_LIBRARY}) +else() + find_package(Python REQUIRED COMPONENTS Development) + target_link_libraries(lammps PRIVATE Python::Python) endif() +target_compile_definitions(lammps PRIVATE -DLMP_PYTHON) diff --git a/cmake/Modules/Packages/QEQ.cmake b/cmake/Modules/Packages/QEQ.cmake index 94cca30540dab41dd831254881ed86f788d00653..1bdaa02f431568038af65f7fe0bb49f558ae582b 100644 --- a/cmake/Modules/Packages/QEQ.cmake +++ b/cmake/Modules/Packages/QEQ.cmake @@ -1,20 +1,18 @@ # Fix qeq/fire requires MANYBODY (i.e. COMB and COMB3) to be installed -if(PKG_QEQ) - set(QEQ_SOURCES_DIR ${LAMMPS_SOURCE_DIR}/QEQ) - file(GLOB QEQ_HEADERS ${QEQ_SOURCES_DIR}/fix*.h) - file(GLOB QEQ_SOURCES ${QEQ_SOURCES_DIR}/fix*.cpp) +set(QEQ_SOURCES_DIR ${LAMMPS_SOURCE_DIR}/QEQ) +file(GLOB QEQ_HEADERS ${QEQ_SOURCES_DIR}/fix*.h) +file(GLOB QEQ_SOURCES ${QEQ_SOURCES_DIR}/fix*.cpp) - if(NOT PKG_MANYBODY) - list(REMOVE_ITEM QEQ_HEADERS ${QEQ_SOURCES_DIR}/fix_qeq_fire.h) - list(REMOVE_ITEM QEQ_SOURCES ${QEQ_SOURCES_DIR}/fix_qeq_fire.cpp) - endif() - set_property(GLOBAL PROPERTY "QEQ_SOURCES" "${QEQ_SOURCES}") +if(NOT PKG_MANYBODY) + list(REMOVE_ITEM QEQ_HEADERS ${QEQ_SOURCES_DIR}/fix_qeq_fire.h) + list(REMOVE_ITEM QEQ_SOURCES ${QEQ_SOURCES_DIR}/fix_qeq_fire.cpp) +endif() +set_property(GLOBAL PROPERTY "QEQ_SOURCES" "${QEQ_SOURCES}") - foreach(MY_HEADER ${QEQ_HEADERS}) - AddStyleHeader(${MY_HEADER} FIX) - endforeach() +foreach(MY_HEADER ${QEQ_HEADERS}) + AddStyleHeader(${MY_HEADER} FIX) +endforeach() - get_property(QEQ_SOURCES GLOBAL PROPERTY QEQ_SOURCES) - list(APPEND LIB_SOURCES ${QEQ_SOURCES}) - include_directories(${QEQ_SOURCES_DIR}) -endif() +get_property(QEQ_SOURCES GLOBAL PROPERTY QEQ_SOURCES) +target_sources(lammps PRIVATE ${QEQ_SOURCES}) +target_include_directories(lammps PRIVATE ${QEQ_SOURCES_DIR}) diff --git a/cmake/Modules/Packages/USER-COLVARS.cmake b/cmake/Modules/Packages/USER-COLVARS.cmake index a112fbb6aa1d0c6dac813599405e56843e2a3269..92595a9c8a9947b8d925510c4934af928aa4138e 100644 --- a/cmake/Modules/Packages/USER-COLVARS.cmake +++ b/cmake/Modules/Packages/USER-COLVARS.cmake @@ -1,27 +1,30 @@ -if(PKG_USER-COLVARS) +set(COLVARS_SOURCE_DIR ${LAMMPS_LIB_SOURCE_DIR}/colvars) - set(COLVARS_SOURCE_DIR ${LAMMPS_LIB_SOURCE_DIR}/colvars) +file(GLOB COLVARS_SOURCES ${COLVARS_SOURCE_DIR}/[^.]*.cpp) - file(GLOB COLVARS_SOURCES ${COLVARS_SOURCE_DIR}/[^.]*.cpp) +# Build Lepton by default +option(COLVARS_LEPTON "Build and link the Lepton library" ON) - # Build Lepton by default - option(COLVARS_LEPTON "Build and link the Lepton library" ON) - - if(COLVARS_LEPTON) - set(LEPTON_DIR ${LAMMPS_LIB_SOURCE_DIR}/colvars/lepton) - file(GLOB LEPTON_SOURCES ${LEPTON_DIR}/src/[^.]*.cpp) - add_library(lepton STATIC ${LEPTON_SOURCES}) - target_include_directories(lepton PRIVATE ${LEPTON_DIR}/include) - endif() - - add_library(colvars STATIC ${COLVARS_SOURCES}) - target_include_directories(colvars PUBLIC ${LAMMPS_LIB_SOURCE_DIR}/colvars) - list(APPEND LAMMPS_LINK_LIBS colvars) +if(COLVARS_LEPTON) + set(LEPTON_DIR ${LAMMPS_LIB_SOURCE_DIR}/colvars/lepton) + file(GLOB LEPTON_SOURCES ${LEPTON_DIR}/src/[^.]*.cpp) + add_library(lepton STATIC ${LEPTON_SOURCES}) + # Change the define below to LEPTON_BUILDING_SHARED_LIBRARY when linking Lepton as a DLL with MSVC + target_compile_definitions(lepton PRIVATE -DLEPTON_BUILDING_STATIC_LIBRARY) + set_target_properties(lepton PROPERTIES OUTPUT_NAME lammps_lepton${LAMMPS_MACHINE}) + target_include_directories(lepton PRIVATE ${LEPTON_DIR}/include) +endif() - if(COLVARS_LEPTON) - list(APPEND LAMMPS_LINK_LIBS lepton) - target_compile_options(colvars PRIVATE -DLEPTON) - target_include_directories(colvars PUBLIC ${LEPTON_DIR}/include) - endif() +add_library(colvars STATIC ${COLVARS_SOURCES}) +target_compile_definitions(colvars PRIVATE -DLAMMPS_${LAMMPS_SIZES}) +set_target_properties(colvars PROPERTIES OUTPUT_NAME lammps_colvars${LAMMPS_MACHINE}) +target_include_directories(colvars PUBLIC ${LAMMPS_LIB_SOURCE_DIR}/colvars) +target_link_libraries(lammps PRIVATE colvars) +if(COLVARS_LEPTON) + target_link_libraries(lammps PRIVATE lepton) + target_compile_definitions(colvars PRIVATE -DLEPTON) + # Disable the line below when linking Lepton as a DLL with MSVC + target_compile_definitions(colvars PRIVATE -DLEPTON_USE_STATIC_LIBRARIES) + target_include_directories(colvars PUBLIC ${LEPTON_DIR}/include) endif() diff --git a/cmake/Modules/Packages/USER-H5MD.cmake b/cmake/Modules/Packages/USER-H5MD.cmake index 40ea7b7444cd024c762e9708ebc8dd965a95c153..4fcae93027c36204799b5388de90e2f6b9b4795f 100644 --- a/cmake/Modules/Packages/USER-H5MD.cmake +++ b/cmake/Modules/Packages/USER-H5MD.cmake @@ -1,8 +1,5 @@ -if(PKG_USER-H5MD) - enable_language(C) +enable_language(C) - find_package(HDF5 REQUIRED) - target_link_libraries(h5md ${HDF5_LIBRARIES}) - target_include_directories(h5md PRIVATE ${HDF5_INCLUDE_DIRS}) - include_directories(${HDF5_INCLUDE_DIRS}) -endif() +find_package(HDF5 REQUIRED) +target_link_libraries(h5md PRIVATE ${HDF5_LIBRARIES}) +target_include_directories(h5md PUBLIC ${HDF5_INCLUDE_DIRS}) diff --git a/cmake/Modules/Packages/USER-INTEL.cmake b/cmake/Modules/Packages/USER-INTEL.cmake index 9ae4333ee28787017c25cbd91d8b6d547370e322..0ae1ec018a309be7f2ac4293e04d12019ddd9a8b 100644 --- a/cmake/Modules/Packages/USER-INTEL.cmake +++ b/cmake/Modules/Packages/USER-INTEL.cmake @@ -1,113 +1,109 @@ -if(PKG_USER-INTEL) - check_include_file_cxx(immintrin.h FOUND_IMMINTRIN) - if(NOT FOUND_IMMINTRIN) - message(FATAL_ERROR "immintrin.h header not found, Intel package won't work without it") - endif() +check_include_file_cxx(immintrin.h FOUND_IMMINTRIN) +if(NOT FOUND_IMMINTRIN) + message(FATAL_ERROR "immintrin.h header not found, Intel package won't work without it") +endif() - add_definitions(-DLMP_USER_INTEL) +target_compile_definitions(lammps PRIVATE -DLMP_USER_INTEL) - set(INTEL_ARCH "cpu" CACHE STRING "Architectures used by USER-INTEL (cpu or knl)") - set(INTEL_ARCH_VALUES cpu knl) - set_property(CACHE INTEL_ARCH PROPERTY STRINGS ${INTEL_ARCH_VALUES}) - validate_option(INTEL_ARCH INTEL_ARCH_VALUES) - string(TOUPPER ${INTEL_ARCH} INTEL_ARCH) +set(INTEL_ARCH "cpu" CACHE STRING "Architectures used by USER-INTEL (cpu or knl)") +set(INTEL_ARCH_VALUES cpu knl) +set_property(CACHE INTEL_ARCH PROPERTY STRINGS ${INTEL_ARCH_VALUES}) +validate_option(INTEL_ARCH INTEL_ARCH_VALUES) +string(TOUPPER ${INTEL_ARCH} INTEL_ARCH) - find_package(Threads QUIET) +find_package(Threads QUIET) +if(Threads_FOUND) + set(INTEL_LRT_MODE "threads" CACHE STRING "Long-range threads mode (none, threads, or c++11)") +else() + set(INTEL_LRT_MODE "none" CACHE STRING "Long-range threads mode (none, threads, or c++11)") +endif() +set(INTEL_LRT_VALUES none threads c++11) +set_property(CACHE INTEL_LRT_MODE PROPERTY STRINGS ${INTEL_LRT_VALUES}) +validate_option(INTEL_LRT_MODE INTEL_LRT_VALUES) +string(TOUPPER ${INTEL_LRT_MODE} INTEL_LRT_MODE) +if(INTEL_LRT_MODE STREQUAL "THREADS") if(Threads_FOUND) - set(INTEL_LRT_MODE "threads" CACHE STRING "Long-range threads mode (none, threads, or c++11)") + target_compile_definitions(lammps PRIVATE -DLMP_INTEL_USELRT) + target_link_libraries(lammps PRIVATE Threads::Threads) else() - set(INTEL_LRT_MODE "none" CACHE STRING "Long-range threads mode (none, threads, or c++11)") + message(FATAL_ERROR "Must have working threads library for Long-range thread support") endif() - set(INTEL_LRT_VALUES none threads c++11) - set_property(CACHE INTEL_LRT_MODE PROPERTY STRINGS ${INTEL_LRT_VALUES}) - validate_option(INTEL_LRT_MODE INTEL_LRT_VALUES) - string(TOUPPER ${INTEL_LRT_MODE} INTEL_LRT_MODE) - if(INTEL_LRT_MODE STREQUAL "THREADS") - if(Threads_FOUND) - add_definitions(-DLMP_INTEL_USELRT) - list(APPEND LAMMPS_LINK_LIBS ${CMAKE_THREAD_LIBS_INIT}) - else() - message(FATAL_ERROR "Must have working threads library for Long-range thread support") - endif() - endif() - if(INTEL_LRT_MODE STREQUAL "C++11") - add_definitions(-DLMP_INTEL_USELRT -DLMP_INTEL_LRT11) +endif() +if(INTEL_LRT_MODE STREQUAL "C++11") + target_compile_definitions(lammps PRIVATE -DLMP_INTEL_USELRT -DLMP_INTEL_LRT11) +endif() + +if(CMAKE_CXX_COMPILER_ID STREQUAL "Intel") + if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS 16) + message(FATAL_ERROR "USER-INTEL needs at least a 2016 Intel compiler, found ${CMAKE_CXX_COMPILER_VERSION}") endif() +else() + message(WARNING "USER-INTEL gives best performance with Intel compilers") +endif() +find_package(TBB_MALLOC QUIET) +if(TBB_MALLOC_FOUND) + target_link_libraries(lammps PRIVATE TBB::TBB_MALLOC) +else() + target_compile_definitions(lammps PRIVATE -DLMP_INTEL_NO_TBB) if(CMAKE_CXX_COMPILER_ID STREQUAL "Intel") - if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS 16) - message(FATAL_ERROR "USER-INTEL needs at least a 2016 Intel compiler, found ${CMAKE_CXX_COMPILER_VERSION}") - endif() - else() - message(WARNING "USER-INTEL gives best performance with Intel compilers") + message(WARNING "USER-INTEL with Intel compilers should use TBB malloc libraries") endif() +endif() - find_package(TBB QUIET) - if(TBB_FOUND) - list(APPEND LAMMPS_LINK_LIBS ${TBB_MALLOC_LIBRARIES}) - else() - add_definitions(-DLMP_INTEL_NO_TBB) - if(CMAKE_CXX_COMPILER_ID STREQUAL "Intel") - message(WARNING "USER-INTEL with Intel compilers should use TBB malloc libraries") - endif() - endif() +find_package(MKL QUIET) +if(MKL_FOUND) + target_compile_definitions(lammps PRIVATE -DLMP_USE_MKL_RNG) + target_link_libraries(lammps PRIVATE MKL::MKL) +else() + message(STATUS "Pair style dpd/intel will be faster with MKL libraries") +endif() - find_package(MKL QUIET) - if(MKL_FOUND) - add_definitions(-DLMP_USE_MKL_RNG) - list(APPEND LAMMPS_LINK_LIBS ${MKL_LIBRARIES}) - else() - message(STATUS "Pair style dpd/intel will be faster with MKL libraries") - endif() +if((NOT ${CMAKE_SYSTEM_NAME} STREQUAL "Windows") AND (NOT ${LAMMPS_MEMALIGN} STREQUAL "64") AND (NOT ${LAMMPS_MEMALIGN} STREQUAL "128") AND (NOT ${LAMMPS_MEMALIGN} STREQUAL "256")) + message(FATAL_ERROR "USER-INTEL only supports memory alignment of 64, 128 or 256 on this platform") +endif() - if((NOT ${CMAKE_SYSTEM_NAME} STREQUAL "Windows") AND (NOT ${LAMMPS_MEMALIGN} STREQUAL "64") AND (NOT ${LAMMPS_MEMALIGN} STREQUAL "128") AND (NOT ${LAMMPS_MEMALIGN} STREQUAL "256")) - message(FATAL_ERROR "USER-INTEL only supports memory alignment of 64, 128 or 256 on this platform") +if(INTEL_ARCH STREQUAL "KNL") + if(NOT CMAKE_CXX_COMPILER_ID STREQUAL "Intel") + message(FATAL_ERROR "Must use Intel compiler with USER-INTEL for KNL architecture") endif() - - if(INTEL_ARCH STREQUAL "KNL") - if(NOT CMAKE_CXX_COMPILER_ID STREQUAL "Intel") - message(FATAL_ERROR "Must use Intel compiler with USER-INTEL for KNL architecture") - endif() - set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -xHost -qopenmp -qoffload") - set(MIC_OPTIONS "-qoffload-option,mic,compiler,\"-fp-model fast=2 -mGLOB_default_function_attrs=\\\"gather_scatter_loop_unroll=4\\\"\"") - add_compile_options(-xMIC-AVX512 -qoffload -fno-alias -ansi-alias -restrict -qoverride-limits ${MIC_OPTIONS}) - add_definitions(-DLMP_INTEL_OFFLOAD) - else() - if(CMAKE_CXX_COMPILER_ID STREQUAL "Intel") - include(CheckCXXCompilerFlag) - foreach(_FLAG -O2 -fp-model fast=2 -no-prec-div -qoverride-limits -qopt-zmm-usage=high -qno-offload -fno-alias -ansi-alias -restrict) - check_cxx_compiler_flag("${__FLAG}" COMPILER_SUPPORTS${_FLAG}) - if(COMPILER_SUPPORTS${_FLAG}) - add_compile_options(${_FLAG}) - endif() - endforeach() - else() - add_compile_options(-O3 -ffast-math) - endif() + set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -xHost -qopenmp -qoffload") + set(MIC_OPTIONS "-qoffload-option,mic,compiler,\"-fp-model fast=2 -mGLOB_default_function_attrs=\\\"gather_scatter_loop_unroll=4\\\"\"") + target_compile_options(lammps PRIVATE -xMIC-AVX512 -qoffload -fno-alias -ansi-alias -restrict -qoverride-limits ${MIC_OPTIONS}) + target_compile_definitions(lammps PRIVATE -DLMP_INTEL_OFFLOAD) +else() + if(CMAKE_CXX_COMPILER_ID STREQUAL "Intel") + include(CheckCXXCompilerFlag) + foreach(_FLAG -O2 -fp-model fast=2 -no-prec-div -qoverride-limits -qopt-zmm-usage=high -qno-offload -fno-alias -ansi-alias -restrict) + check_cxx_compiler_flag("${_FLAG}" COMPILER_SUPPORTS${_FLAG}) + if(COMPILER_SUPPORTS${_FLAG}) + target_compile_options(lammps PRIVATE ${_FLAG}) + endif() + endforeach() endif() +endif() - # collect sources - set(USER-INTEL_SOURCES_DIR ${LAMMPS_SOURCE_DIR}/USER-INTEL) - set(USER-INTEL_SOURCES ${USER-INTEL_SOURCES_DIR}/fix_intel.cpp - ${USER-INTEL_SOURCES_DIR}/fix_nh_intel.cpp - ${USER-INTEL_SOURCES_DIR}/intel_buffers.cpp - ${USER-INTEL_SOURCES_DIR}/nbin_intel.cpp - ${USER-INTEL_SOURCES_DIR}/npair_intel.cpp) +# collect sources +set(USER-INTEL_SOURCES_DIR ${LAMMPS_SOURCE_DIR}/USER-INTEL) +set(USER-INTEL_SOURCES ${USER-INTEL_SOURCES_DIR}/fix_intel.cpp + ${USER-INTEL_SOURCES_DIR}/fix_nh_intel.cpp + ${USER-INTEL_SOURCES_DIR}/intel_buffers.cpp + ${USER-INTEL_SOURCES_DIR}/nbin_intel.cpp + ${USER-INTEL_SOURCES_DIR}/npair_intel.cpp) - set_property(GLOBAL PROPERTY "USER-INTEL_SOURCES" "${USER-INTEL_SOURCES}") +set_property(GLOBAL PROPERTY "USER-INTEL_SOURCES" "${USER-INTEL_SOURCES}") - # detect styles which have a USER-INTEL version - RegisterStylesExt(${USER-INTEL_SOURCES_DIR} intel USER-INTEL_SOURCES) - RegisterNBinStyle(${USER-INTEL_SOURCES_DIR}/nbin_intel.h) - RegisterNPairStyle(${USER-INTEL_SOURCES_DIR}/npair_intel.h) - RegisterFixStyle(${USER-INTEL_SOURCES_DIR}/fix_intel.h) +# detect styles which have a USER-INTEL version +RegisterStylesExt(${USER-INTEL_SOURCES_DIR} intel USER-INTEL_SOURCES) +RegisterNBinStyle(${USER-INTEL_SOURCES_DIR}/nbin_intel.h) +RegisterNPairStyle(${USER-INTEL_SOURCES_DIR}/npair_intel.h) +RegisterFixStyle(${USER-INTEL_SOURCES_DIR}/fix_intel.h) - get_property(USER-INTEL_SOURCES GLOBAL PROPERTY USER-INTEL_SOURCES) - if(PKG_KSPACE) - list(APPEND USER-INTEL_SOURCES ${USER-INTEL_SOURCES_DIR}/verlet_lrt_intel.cpp) - RegisterIntegrateStyle(${USER-INTEL_SOURCES_DIR}/verlet_lrt_intel.h) - endif() - - list(APPEND LIB_SOURCES ${USER-INTEL_SOURCES}) - include_directories(${USER-INTEL_SOURCES_DIR}) +get_property(USER-INTEL_SOURCES GLOBAL PROPERTY USER-INTEL_SOURCES) +if(PKG_KSPACE) + list(APPEND USER-INTEL_SOURCES ${USER-INTEL_SOURCES_DIR}/verlet_lrt_intel.cpp) + RegisterIntegrateStyle(${USER-INTEL_SOURCES_DIR}/verlet_lrt_intel.h) endif() + +target_sources(lammps PRIVATE ${USER-INTEL_SOURCES}) +target_include_directories(lammps PRIVATE ${USER-INTEL_SOURCES_DIR}) diff --git a/cmake/Modules/Packages/USER-MOLFILE.cmake b/cmake/Modules/Packages/USER-MOLFILE.cmake index 16ffc349940eb3b5a58b1eab4f73b4154523a075..1a2df2202b61ced2a66beb3088e57a5e65480f79 100644 --- a/cmake/Modules/Packages/USER-MOLFILE.cmake +++ b/cmake/Modules/Packages/USER-MOLFILE.cmake @@ -1,10 +1,8 @@ -if(PKG_USER-MOLFILE) - set(MOLFILE_INCLUDE_DIRS "${LAMMPS_LIB_SOURCE_DIR}/molfile" CACHE STRING "Path to VMD molfile plugin headers") - add_library(molfile INTERFACE) - target_include_directories(molfile INTERFACE ${MOLFILE_INCLUDE_DIRS}) - # no need to link with -ldl on windows - if(NOT ${CMAKE_SYSTEM_NAME} STREQUAL "Windows") - target_link_libraries(molfile INTERFACE ${CMAKE_DL_LIBS}) - endif() - list(APPEND LAMMPS_LINK_LIBS molfile) +set(MOLFILE_INCLUDE_DIRS "${LAMMPS_LIB_SOURCE_DIR}/molfile" CACHE STRING "Path to VMD molfile plugin headers") +add_library(molfile INTERFACE) +target_include_directories(molfile INTERFACE ${MOLFILE_INCLUDE_DIRS}) +# no need to link with -ldl on windows +if(NOT ${CMAKE_SYSTEM_NAME} STREQUAL "Windows") + target_link_libraries(molfile INTERFACE ${CMAKE_DL_LIBS}) endif() +target_link_libraries(lammps PRIVATE molfile) diff --git a/cmake/Modules/Packages/USER-NETCDF.cmake b/cmake/Modules/Packages/USER-NETCDF.cmake index 921156f1e033cd1f2c543b960c385e7ed6048db4..d63e9773c3e358f1d3cd82fbe9bfcd68fc275a80 100644 --- a/cmake/Modules/Packages/USER-NETCDF.cmake +++ b/cmake/Modules/Packages/USER-NETCDF.cmake @@ -1,24 +1,26 @@ -if(PKG_USER-NETCDF) - # USER-NETCDF can use NetCDF, Parallel NetCDF (PNetCDF), or both. At least one necessary. - # NetCDF library enables dump style "netcdf", while PNetCDF enables dump style "netcdf/mpiio" +# USER-NETCDF can use NetCDF, Parallel NetCDF (PNetCDF), or both. At least one necessary. +# NetCDF library enables dump style "netcdf", while PNetCDF enables dump style "netcdf/mpiio" + +# may use NetCDF or PNetCDF with MPI, but must have NetCDF without +if(NOT BUILD_MPI) + find_package(NetCDF REQUIRED) +else() find_package(NetCDF) if(NETCDF_FOUND) find_package(PNetCDF) - else(NETCDF_FOUND) + else() find_package(PNetCDF REQUIRED) - endif(NETCDF_FOUND) + endif() +endif() - if(NETCDF_FOUND) - include_directories(${NETCDF_INCLUDE_DIRS}) - list(APPEND LAMMPS_LINK_LIBS ${NETCDF_LIBRARIES}) - add_definitions(-DLMP_HAS_NETCDF) - endif(NETCDF_FOUND) +if(NETCDF_FOUND) + target_link_libraries(lammps PRIVATE NetCDF::NetCDF) + target_compile_definitions(lammps PRIVATE -DLMP_HAS_NETCDF) +endif(NETCDF_FOUND) - if(PNETCDF_FOUND) - include_directories(${PNETCDF_INCLUDES}) - list(APPEND LAMMPS_LINK_LIBS ${PNETCDF_LIBRARIES}) - add_definitions(-DLMP_HAS_PNETCDF) - endif(PNETCDF_FOUND) +if(PNETCDF_FOUND) + target_link_libraries(lammps PRIVATE PNetCDF::PNetCDF) + target_compile_definitions(lammps PRIVATE -DLMP_HAS_PNETCDF) +endif(PNETCDF_FOUND) - add_definitions(-DNC_64BIT_DATA=0x0020) -endif() +target_compile_definitions(lammps PRIVATE -DNC_64BIT_DATA=0x0020) diff --git a/cmake/Modules/Packages/USER-OMP.cmake b/cmake/Modules/Packages/USER-OMP.cmake index 668f42f10a56f382d5a1146193a6b7c69da0a00a..a1053ad355d3667245fadc45f126a8f60fd6ba70 100644 --- a/cmake/Modules/Packages/USER-OMP.cmake +++ b/cmake/Modules/Packages/USER-OMP.cmake @@ -1,42 +1,40 @@ -if(PKG_USER-OMP) - set(USER-OMP_SOURCES_DIR ${LAMMPS_SOURCE_DIR}/USER-OMP) - set(USER-OMP_SOURCES ${USER-OMP_SOURCES_DIR}/thr_data.cpp - ${USER-OMP_SOURCES_DIR}/thr_omp.cpp - ${USER-OMP_SOURCES_DIR}/fix_omp.cpp - ${USER-OMP_SOURCES_DIR}/fix_nh_omp.cpp - ${USER-OMP_SOURCES_DIR}/fix_nh_sphere_omp.cpp - ${USER-OMP_SOURCES_DIR}/domain_omp.cpp) - add_definitions(-DLMP_USER_OMP) - set_property(GLOBAL PROPERTY "OMP_SOURCES" "${USER-OMP_SOURCES}") + set(USER-OMP_SOURCES_DIR ${LAMMPS_SOURCE_DIR}/USER-OMP) + set(USER-OMP_SOURCES ${USER-OMP_SOURCES_DIR}/thr_data.cpp + ${USER-OMP_SOURCES_DIR}/thr_omp.cpp + ${USER-OMP_SOURCES_DIR}/fix_omp.cpp + ${USER-OMP_SOURCES_DIR}/fix_nh_omp.cpp + ${USER-OMP_SOURCES_DIR}/fix_nh_sphere_omp.cpp + ${USER-OMP_SOURCES_DIR}/domain_omp.cpp) + target_compile_definitions(lammps PRIVATE -DLMP_USER_OMP) + set_property(GLOBAL PROPERTY "OMP_SOURCES" "${USER-OMP_SOURCES}") - # detects styles which have USER-OMP version - RegisterStylesExt(${USER-OMP_SOURCES_DIR} omp OMP_SOURCES) - RegisterFixStyle(${USER-OMP_SOURCES_DIR}/fix_omp.h) + # detects styles which have USER-OMP version + RegisterStylesExt(${USER-OMP_SOURCES_DIR} omp OMP_SOURCES) + RegisterFixStyle(${USER-OMP_SOURCES_DIR}/fix_omp.h) - get_property(USER-OMP_SOURCES GLOBAL PROPERTY OMP_SOURCES) + get_property(USER-OMP_SOURCES GLOBAL PROPERTY OMP_SOURCES) - # manually add package dependent source files from USER-OMP that do not provide styles + # manually add package dependent source files from USER-OMP that do not provide styles - if(PKG_ASPHERE) - list(APPEND USER-OMP_SOURCES ${USER-OMP_SOURCES_DIR}/fix_nh_asphere_omp.cpp) - endif() + if(PKG_ASPHERE) + list(APPEND USER-OMP_SOURCES ${USER-OMP_SOURCES_DIR}/fix_nh_asphere_omp.cpp) + endif() - if(PKG_RIGID) - list(APPEND USER-OMP_SOURCES ${USER-OMP_SOURCES_DIR}/fix_rigid_nh_omp.cpp) - endif() + if(PKG_RIGID) + list(APPEND USER-OMP_SOURCES ${USER-OMP_SOURCES_DIR}/fix_rigid_nh_omp.cpp) + endif() - if(PKG_USER-REAXC) - list(APPEND USER-OMP_SOURCES ${USER-OMP_SOURCES_DIR}/reaxc_bond_orders_omp.cpp - ${USER-OMP_SOURCES_DIR}/reaxc_hydrogen_bonds_omp.cpp - ${USER-OMP_SOURCES_DIR}/reaxc_nonbonded_omp.cpp - ${USER-OMP_SOURCES_DIR}/reaxc_bonds_omp.cpp - ${USER-OMP_SOURCES_DIR}/reaxc_init_md_omp.cpp - ${USER-OMP_SOURCES_DIR}/reaxc_torsion_angles_omp.cpp - ${USER-OMP_SOURCES_DIR}/reaxc_forces_omp.cpp - ${USER-OMP_SOURCES_DIR}/reaxc_multi_body_omp.cpp - ${USER-OMP_SOURCES_DIR}/reaxc_valence_angles_omp.cpp) - endif() + if(PKG_USER-REAXC) + list(APPEND USER-OMP_SOURCES ${USER-OMP_SOURCES_DIR}/reaxc_bond_orders_omp.cpp + ${USER-OMP_SOURCES_DIR}/reaxc_hydrogen_bonds_omp.cpp + ${USER-OMP_SOURCES_DIR}/reaxc_nonbonded_omp.cpp + ${USER-OMP_SOURCES_DIR}/reaxc_bonds_omp.cpp + ${USER-OMP_SOURCES_DIR}/reaxc_init_md_omp.cpp + ${USER-OMP_SOURCES_DIR}/reaxc_torsion_angles_omp.cpp + ${USER-OMP_SOURCES_DIR}/reaxc_forces_omp.cpp + ${USER-OMP_SOURCES_DIR}/reaxc_multi_body_omp.cpp + ${USER-OMP_SOURCES_DIR}/reaxc_valence_angles_omp.cpp) + endif() - list(APPEND LIB_SOURCES ${USER-OMP_SOURCES}) - include_directories(${USER-OMP_SOURCES_DIR}) -endif() + target_sources(lammps PRIVATE ${USER-OMP_SOURCES}) + target_include_directories(lammps PRIVATE ${USER-OMP_SOURCES_DIR}) diff --git a/cmake/Modules/Packages/USER-PLUMED.cmake b/cmake/Modules/Packages/USER-PLUMED.cmake index 426ae2df2a8b84fe1c60042d446832fe12a15471..39148bdf3d780df5d05af06f4cbd918560f18a14 100644 --- a/cmake/Modules/Packages/USER-PLUMED.cmake +++ b/cmake/Modules/Packages/USER-PLUMED.cmake @@ -1,96 +1,98 @@ -if(PKG_USER-PLUMED) - set(PLUMED_MODE "static" CACHE STRING "Linkage mode for Plumed2 library") - set(PLUMED_MODE_VALUES static shared runtime) - set_property(CACHE PLUMED_MODE PROPERTY STRINGS ${PLUMED_MODE_VALUES}) - validate_option(PLUMED_MODE PLUMED_MODE_VALUES) - string(TOUPPER ${PLUMED_MODE} PLUMED_MODE) +set(PLUMED_MODE "static" CACHE STRING "Linkage mode for Plumed2 library") +set(PLUMED_MODE_VALUES static shared runtime) +set_property(CACHE PLUMED_MODE PROPERTY STRINGS ${PLUMED_MODE_VALUES}) +validate_option(PLUMED_MODE PLUMED_MODE_VALUES) +string(TOUPPER ${PLUMED_MODE} PLUMED_MODE) - set(PLUMED_LINK_LIBS "") - if(PLUMED_MODE STREQUAL "STATIC") - find_package(LAPACK REQUIRED) - find_package(BLAS REQUIRED) - find_package(GSL REQUIRED) - list(APPEND LAPACK_LIBRARIES ${BLAS_LIBRARIES}) - list(APPEND PLUMED_LINK_LIBS ${LAPACK_LIBRARIES} ${GSL_LIBRARIES}) - find_package(ZLIB QUIET) - if(ZLIB_FOUND) - list(APPEND PLUMED_LINK_LIBS ${ZLIB_LIBRARIES}) - endif() +set(PLUMED_LINK_LIBS) +if(PLUMED_MODE STREQUAL "STATIC") + find_package(LAPACK REQUIRED) + find_package(BLAS REQUIRED) + find_package(GSL REQUIRED) + list(APPEND PLUMED_LINK_LIBS ${LAPACK_LIBRARIES} ${BLAS_LIBRARIES} GSL::gsl) + find_package(ZLIB QUIET) + if(ZLIB_FOUND) + list(APPEND PLUMED_LINK_LIBS ZLIB::ZLIB) + endif() + find_package(FFTW3 QUIET) + if(FFTW3_FOUND) + list(APPEND PLUMED_LINK_LIBS FFTW3::FFTW3) endif() +endif() - find_package(PkgConfig QUIET) - set(DOWNLOAD_PLUMED_DEFAULT ON) - if(PKG_CONFIG_FOUND) - pkg_check_modules(PLUMED QUIET plumed) - if(PLUMED_FOUND) - set(DOWNLOAD_PLUMED_DEFAULT OFF) - endif() +find_package(PkgConfig QUIET) +set(DOWNLOAD_PLUMED_DEFAULT ON) +if(PKG_CONFIG_FOUND) + pkg_check_modules(PLUMED QUIET plumed) + if(PLUMED_FOUND) + set(DOWNLOAD_PLUMED_DEFAULT OFF) endif() +endif() - option(DOWNLOAD_PLUMED "Download Plumed package instead of using an already installed one" ${DOWNLOAD_PLUMED_DEFAULT}) - if(DOWNLOAD_PLUMED) - if(BUILD_MPI) - set(PLUMED_CONFIG_MPI "--enable-mpi") - set(PLUMED_CONFIG_CC ${CMAKE_MPI_C_COMPILER}) - set(PLUMED_CONFIG_CXX ${CMAKE_MPI_CXX_COMPILER}) - else() - set(PLUMED_CONFIG_MPI "--disable-mpi") - set(PLUMED_CONFIG_CC ${CMAKE_C_COMPILER}) - set(PLUMED_CONFIG_CXX ${CMAKE_CXX_COMPILER}) - endif() - if(BUILD_OMP) - set(PLUMED_CONFIG_OMP "--enable-openmp") - else() - set(PLUMED_CONFIG_OMP "--disable-openmp") - endif() - message(STATUS "PLUMED download requested - we will build our own") - if(PLUMED_MODE STREQUAL "STATIC") - set(PLUMED_BUILD_BYPRODUCTS "/lib/libplumed.a") - elseif(PLUMED_MODE STREQUAL "SHARED") - set(PLUMED_BUILD_BYPRODUCTS "/lib/libplumed${CMAKE_SHARED_LIBRARY_SUFFIX};/lib/libplumedKernel${CMAKE_SHARED_LIBRARY_SUFFIX}") - elseif(PLUMED_MODE STREQUAL "RUNTIME") - set(PLUMED_BUILD_BYPRODUCTS "/lib/libplumedWrapper.a") - endif() - include(ExternalProject) - ExternalProject_Add(plumed_build - URL https://github.com/plumed/plumed2/releases/download/v2.6.0/plumed-src-2.6.0.tgz - URL_MD5 204d2edae58d9b10ba3ad460cad64191 - BUILD_IN_SOURCE 1 - CONFIGURE_COMMAND /configure --prefix= - ${CONFIGURE_REQUEST_PIC} - --enable-modules=all - ${PLUMED_CONFIG_MPI} - ${PLUMED_CONFIG_OMP} - CXX=${PLUMED_CONFIG_CXX} - CC=${PLUMED_CONFIG_CC} - BUILD_BYPRODUCTS ${PLUMED_BUILD_BYPRODUCTS} - ) - ExternalProject_get_property(plumed_build INSTALL_DIR) - set(PLUMED_INSTALL_DIR ${INSTALL_DIR}) - list(APPEND LAMMPS_DEPS plumed_build) - if(PLUMED_MODE STREQUAL "STATIC") - add_definitions(-D__PLUMED_WRAPPER_CXX=1) - list(APPEND LAMMPS_LINK_LIBS ${PLUMED_INSTALL_DIR}/lib/libplumed.a ${PLUMED_LINK_LIBS} ${CMAKE_DL_LIBS}) - elseif(PLUMED_MODE STREQUAL "SHARED") - list(APPEND LAMMPS_LINK_LIBS ${PLUMED_INSTALL_DIR}/lib/libplumed${CMAKE_SHARED_LIBRARY_SUFFIX} ${PLUMED_INSTALL_DIR}/lib/libplumedKernel${CMAKE_SHARED_LIBRARY_SUFFIX} ${CMAKE_DL_LIBS}) - elseif(PLUMED_MODE STREQUAL "RUNTIME") - add_definitions(-D__PLUMED_HAS_DLOPEN=1 -D__PLUMED_DEFAULT_KERNEL=${PLUMED_INSTALL_DIR}/lib/libplumedKernel${CMAKE_SHARED_LIBRARY_SUFFIX}) - list(APPEND LAMMPS_LINK_LIBS ${PLUMED_INSTALL_DIR}/lib/libplumedWrapper.a -rdynamic ${CMAKE_DL_LIBS}) - endif() - set(PLUMED_INCLUDE_DIRS "${PLUMED_INSTALL_DIR}/include") +option(DOWNLOAD_PLUMED "Download Plumed package instead of using an already installed one" ${DOWNLOAD_PLUMED_DEFAULT}) +if(DOWNLOAD_PLUMED) + if(BUILD_MPI) + set(PLUMED_CONFIG_MPI "--enable-mpi") + set(PLUMED_CONFIG_CC ${CMAKE_MPI_C_COMPILER}) + set(PLUMED_CONFIG_CXX ${CMAKE_MPI_CXX_COMPILER}) + else() + set(PLUMED_CONFIG_MPI "--disable-mpi") + set(PLUMED_CONFIG_CC ${CMAKE_C_COMPILER}) + set(PLUMED_CONFIG_CXX ${CMAKE_CXX_COMPILER}) + endif() + if(BUILD_OMP) + set(PLUMED_CONFIG_OMP "--enable-openmp") else() - find_package(PkgConfig REQUIRED) - pkg_check_modules(PLUMED REQUIRED plumed) - if(PLUMED_MODE STREQUAL "STATIC") - add_definitions(-D__PLUMED_WRAPPER_CXX=1) - include(${PLUMED_LIBDIR}/plumed/src/lib/Plumed.cmake.static) - elseif(PLUMED_MODE STREQUAL "SHARED") - include(${PLUMED_LIBDIR}/plumed/src/lib/Plumed.cmake.shared) - elseif(PLUMED_MODE STREQUAL "RUNTIME") - add_definitions(-D__PLUMED_HAS_DLOPEN=1 -D__PLUMED_DEFAULT_KERNEL=${PLUMED_LIBDIR}/libplumedKernel${CMAKE_SHARED_LIBRARY_SUFFIX}) - include(${PLUMED_LIBDIR}/plumed/src/lib/Plumed.cmake.runtime) - endif() - list(APPEND LAMMPS_LINK_LIBS ${PLUMED_LOAD}) + set(PLUMED_CONFIG_OMP "--disable-openmp") + endif() + message(STATUS "PLUMED download requested - we will build our own") + if(PLUMED_MODE STREQUAL "STATIC") + set(PLUMED_BUILD_BYPRODUCTS "/lib/libplumed.a") + elseif(PLUMED_MODE STREQUAL "SHARED") + set(PLUMED_BUILD_BYPRODUCTS "/lib/libplumed${CMAKE_SHARED_LIBRARY_SUFFIX};/lib/libplumedKernel${CMAKE_SHARED_LIBRARY_SUFFIX}") + elseif(PLUMED_MODE STREQUAL "RUNTIME") + set(PLUMED_BUILD_BYPRODUCTS "/lib/libplumedWrapper.a") + endif() + include(ExternalProject) + ExternalProject_Add(plumed_build + URL https://github.com/plumed/plumed2/releases/download/v2.6.0/plumed-src-2.6.0.tgz + URL_MD5 204d2edae58d9b10ba3ad460cad64191 + BUILD_IN_SOURCE 1 + CONFIGURE_COMMAND /configure --prefix= + ${CONFIGURE_REQUEST_PIC} + --enable-modules=all + ${PLUMED_CONFIG_MPI} + ${PLUMED_CONFIG_OMP} + CXX=${PLUMED_CONFIG_CXX} + CC=${PLUMED_CONFIG_CC} + BUILD_BYPRODUCTS ${PLUMED_BUILD_BYPRODUCTS} + ) + ExternalProject_get_property(plumed_build INSTALL_DIR) + add_library(LAMMPS::PLUMED UNKNOWN IMPORTED) + add_dependencies(LAMMPS::PLUMED plumed_build) + if(PLUMED_MODE STREQUAL "STATIC") + set_target_properties(LAMMPS::PLUMED PROPERTIES IMPORTED_LOCATION ${INSTALL_DIR}/lib/libplumed.a INTERFACE_LINK_LIBRARIES "${PLUMED_LINK_LIBS};${CMAKE_DL_LIBS}") + elseif(PLUMED_MODE STREQUAL "SHARED") + set_target_properties(LAMMPS::PLUMED PROPERTIES IMPORTED_LOCATION ${INSTALL_DIR}/lib/libplumed${CMAKE_SHARED_LIBRARY_SUFFIX} INTERFACE_LINK_LIBRARIES "${INSTALL_DIR}/lib/libplumedKernel${CMAKE_SHARED_LIBRARY_SUFFIX};${CMAKE_DL_LIBS}") + elseif(PLUMED_MODE STREQUAL "RUNTIME") + set_target_properties(LAMMPS::PLUMED PROPERTIES INTERFACE_COMPILE_DEFINITIONS "__PLUMED_DEFAULT_KERNEL=${INSTALL_DIR}/lib/libplumedKernel${CMAKE_SHARED_LIBRARY_SUFFIX}") + set_target_properties(LAMMPS::PLUMED PROPERTIES IMPORTED_LOCATION ${INSTALL_DIR}/lib/libplumedWrapper.a INTERFACE_LINK_LIBRARIES "${CMAKE_DL_LIBS}") + endif() + set_target_properties(LAMMPS::PLUMED PROPERTIES INTERFACE_INCLUDE_DIRECTORIES ${INSTALL_DIR}/include) + file(MAKE_DIRECTORY ${INSTALL_DIR}/include) +else() + find_package(PkgConfig REQUIRED) + pkg_check_modules(PLUMED REQUIRED plumed) + add_library(LAMMPS::PLUMED INTERFACE IMPORTED) + if(PLUMED_MODE STREQUAL "STATIC") + include(${PLUMED_LIBDIR}/plumed/src/lib/Plumed.cmake.static) + elseif(PLUMED_MODE STREQUAL "SHARED") + include(${PLUMED_LIBDIR}/plumed/src/lib/Plumed.cmake.shared) + elseif(PLUMED_MODE STREQUAL "RUNTIME") + set_target_properties(LAMMPS::PLUMED PROPERTIES INTERFACE_COMPILE_DEFINITIONS "__PLUMED_DEFAULT_KERNEL=${PLUMED_LIBDIR}/libplumedKernel${CMAKE_SHARED_LIBRARY_SUFFIX}") + include(${PLUMED_LIBDIR}/plumed/src/lib/Plumed.cmake.runtime) endif() - include_directories(${PLUMED_INCLUDE_DIRS}) + set_target_properties(LAMMPS::PLUMED PROPERTIES INTERFACE_LINK_LIBRARIES "${PLUMED_LOAD}") + set_target_properties(LAMMPS::PLUMED PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "${PLUMED_INCLUDE_DIRS}") endif() +target_link_libraries(lammps PRIVATE LAMMPS::PLUMED) diff --git a/cmake/Modules/Packages/USER-QMMM.cmake b/cmake/Modules/Packages/USER-QMMM.cmake index 544455868e55189232b3774afb5f3e088eaac118..c61306734940dcae00989130a89b8346cb7633b5 100644 --- a/cmake/Modules/Packages/USER-QMMM.cmake +++ b/cmake/Modules/Packages/USER-QMMM.cmake @@ -1,13 +1,6 @@ -if(PKG_USER-QMMM) - enable_language(C) +enable_language(C) - if(NOT BUILD_LIB) - message(FATAL_ERROR "Building a QM/MM executable with USER-QMMM requires BUILD_LIB=yes") - endif() - if(NOT BUILD_SHARED_LIBS) - message(WARNING "It is recommended to use BUILD_SHARED_LIBS=yes with USER-QMMM") - endif() - add_library(qmmm STATIC ${LAMMPS_LIB_SOURCE_DIR}/qmmm/libqmmm.c) - list(APPEND LAMMPS_LINK_LIBS qmmm) - target_include_directories(qmmm PUBLIC ${LAMMPS_LIB_SOURCE_DIR}/qmmm) -endif() +add_library(qmmm STATIC ${LAMMPS_LIB_SOURCE_DIR}/qmmm/libqmmm.c) +set_target_properties(qmmm PROPERTIES OUTPUT_NAME lammps_qmmm${LAMMPS_MACHINE}) +target_link_libraries(lammps PRIVATE qmmm) +target_include_directories(qmmm PUBLIC ${LAMMPS_LIB_SOURCE_DIR}/qmmm) diff --git a/cmake/Modules/Packages/USER-QUIP.cmake b/cmake/Modules/Packages/USER-QUIP.cmake index 93096a2f54bec679eda388df567f5b35662641cf..790f27def7bfffa7341e1fea45aab8292cda9464 100644 --- a/cmake/Modules/Packages/USER-QUIP.cmake +++ b/cmake/Modules/Packages/USER-QUIP.cmake @@ -1,5 +1,3 @@ -if(PKG_USER-QUIP) - enable_language(Fortran) - find_package(QUIP REQUIRED) - list(APPEND LAMMPS_LINK_LIBS ${QUIP_LIBRARIES} ${LAPACK_LIBRARIES}) -endif() +enable_language(Fortran) +find_package(QUIP REQUIRED) +target_link_libraries(lammps PRIVATE QUIP::QUIP ${LAPACK_LIBRARIES}) diff --git a/cmake/Modules/Packages/USER-SCAFACOS.cmake b/cmake/Modules/Packages/USER-SCAFACOS.cmake index 8bb9e63605970e4b36bddb8964f41a713d7e9bd7..d92a83f7c117e4d17b59676c96046a12d54c2f39 100644 --- a/cmake/Modules/Packages/USER-SCAFACOS.cmake +++ b/cmake/Modules/Packages/USER-SCAFACOS.cmake @@ -1,76 +1,59 @@ -if(PKG_USER-SCAFACOS) - enable_language(Fortran) - enable_language(C) +enable_language(Fortran) +enable_language(C) - find_package(GSL REQUIRED) - find_package(PkgConfig QUIET) - find_package(MPI REQUIRED) - set(DOWNLOAD_SCAFACOS_DEFAULT ON) - if(PKG_CONFIG_FOUND) - pkg_check_modules(SCAFACOS QUIET scafacos) - if(SCAFACOS_FOUND) - set(DOWNLOAD_SCAFACOS_DEFAULT OFF) - endif() +find_package(GSL REQUIRED) +find_package(PkgConfig QUIET) +find_package(MPI REQUIRED) +set(DOWNLOAD_SCAFACOS_DEFAULT ON) +if(PKG_CONFIG_FOUND) + pkg_check_modules(SCAFACOS QUIET scafacos) + if(SCAFACOS_FOUND) + set(DOWNLOAD_SCAFACOS_DEFAULT OFF) endif() - option(DOWNLOAD_SCAFACOS "Download ScaFaCoS library instead of using an already installed one" ${DOWNLOAD_SCAFACOS_DEFAULT}) - if(DOWNLOAD_SCAFACOS) - message(STATUS "ScaFaCoS download requested - we will build our own") - include(ExternalProject) - ExternalProject_Add(scafacos_build - URL https://github.com/scafacos/scafacos/releases/download/v1.0.1/scafacos-1.0.1.tar.gz - URL_MD5 bd46d74e3296bd8a444d731bb10c1738 - CONFIGURE_COMMAND /configure --prefix= --disable-doc - --enable-fcs-solvers=fmm,p2nfft,direct,ewald,p3m - --with-internal-fftw --with-internal-pfft - --with-internal-pnfft ${CONFIGURE_REQUEST_PIC} - FC=${CMAKE_MPI_Fortran_COMPILER} - CXX=${CMAKE_MPI_CXX_COMPILER} - CC=${CMAKE_MPI_C_COMPILER} - F77= - BUILD_BYPRODUCTS - /lib/libfcs.a - /lib/libfcs_direct.a - /lib/libfcs_ewald.a - /lib/libfcs_fmm.a - /lib/libfcs_p2nfft.a - /lib/libfcs_p3m.a - /lib/libfcs_near.a - /lib/libfcs_gridsort.a - /lib/libfcs_resort.a - /lib/libfcs_redist.a - /lib/libfcs_common.a - /lib/libfcs_pnfft.a - /lib/libfcs_pfft.a - /lib/libfcs_fftw3_mpi.a - /lib/libfcs_fftw3.a - ) - ExternalProject_get_property(scafacos_build INSTALL_DIR) - set(SCAFACOS_BUILD_DIR ${INSTALL_DIR}) - set(SCAFACOS_INCLUDE_DIRS ${SCAFACOS_BUILD_DIR}/include) - list(APPEND LAMMPS_DEPS scafacos_build) - # list and order from pkg_config file of ScaFaCoS build - list(APPEND LAMMPS_LINK_LIBS ${SCAFACOS_BUILD_DIR}/lib/libfcs.a) - list(APPEND LAMMPS_LINK_LIBS ${SCAFACOS_BUILD_DIR}/lib/libfcs_direct.a) - list(APPEND LAMMPS_LINK_LIBS ${SCAFACOS_BUILD_DIR}/lib/libfcs_ewald.a) - list(APPEND LAMMPS_LINK_LIBS ${SCAFACOS_BUILD_DIR}/lib/libfcs_fmm.a) - list(APPEND LAMMPS_LINK_LIBS ${SCAFACOS_BUILD_DIR}/lib/libfcs_p2nfft.a) - list(APPEND LAMMPS_LINK_LIBS ${SCAFACOS_BUILD_DIR}/lib/libfcs_p3m.a) - list(APPEND LAMMPS_LINK_LIBS ${GSL_LIBRARIES}) - list(APPEND LAMMPS_LINK_LIBS ${SCAFACOS_BUILD_DIR}/lib/libfcs_near.a) - list(APPEND LAMMPS_LINK_LIBS ${SCAFACOS_BUILD_DIR}/lib/libfcs_gridsort.a) - list(APPEND LAMMPS_LINK_LIBS ${SCAFACOS_BUILD_DIR}/lib/libfcs_resort.a) - list(APPEND LAMMPS_LINK_LIBS ${SCAFACOS_BUILD_DIR}/lib/libfcs_redist.a) - list(APPEND LAMMPS_LINK_LIBS ${SCAFACOS_BUILD_DIR}/lib/libfcs_common.a) - list(APPEND LAMMPS_LINK_LIBS ${SCAFACOS_BUILD_DIR}/lib/libfcs_pnfft.a) - list(APPEND LAMMPS_LINK_LIBS ${SCAFACOS_BUILD_DIR}/lib/libfcs_pfft.a) - list(APPEND LAMMPS_LINK_LIBS ${SCAFACOS_BUILD_DIR}/lib/libfcs_fftw3_mpi.a) - list(APPEND LAMMPS_LINK_LIBS ${SCAFACOS_BUILD_DIR}/lib/libfcs_fftw3.a) - list(APPEND LAMMPS_LINK_LIBS ${MPI_Fortran_LIBRARIES}) - list(APPEND LAMMPS_LINK_LIBS ${MPI_C_LIBRARIES}) - else() - find_package(PkgConfig REQUIRED) - pkg_check_modules(SCAFACOS REQUIRED scafacos) - list(APPEND LAMMPS_LINK_LIBS ${SCAFACOS_LDFLAGS}) - endif() - include_directories(${SCAFACOS_INCLUDE_DIRS}) +endif() +option(DOWNLOAD_SCAFACOS "Download ScaFaCoS library instead of using an already installed one" ${DOWNLOAD_SCAFACOS_DEFAULT}) +if(DOWNLOAD_SCAFACOS) + message(STATUS "ScaFaCoS download requested - we will build our own") + include(ExternalProject) + ExternalProject_Add(scafacos_build + URL https://github.com/scafacos/scafacos/releases/download/v1.0.1/scafacos-1.0.1.tar.gz + URL_MD5 bd46d74e3296bd8a444d731bb10c1738 + CONFIGURE_COMMAND /configure --prefix= --disable-doc + --enable-fcs-solvers=fmm,p2nfft,direct,ewald,p3m + --with-internal-fftw --with-internal-pfft + --with-internal-pnfft ${CONFIGURE_REQUEST_PIC} + FC=${CMAKE_MPI_Fortran_COMPILER} + CXX=${CMAKE_MPI_CXX_COMPILER} + CC=${CMAKE_MPI_C_COMPILER} + F77= + BUILD_BYPRODUCTS + /lib/libfcs.a + /lib/libfcs_direct.a + /lib/libfcs_ewald.a + /lib/libfcs_fmm.a + /lib/libfcs_p2nfft.a + /lib/libfcs_p3m.a + /lib/libfcs_near.a + /lib/libfcs_gridsort.a + /lib/libfcs_resort.a + /lib/libfcs_redist.a + /lib/libfcs_common.a + /lib/libfcs_pnfft.a + /lib/libfcs_pfft.a + /lib/libfcs_fftw3_mpi.a + /lib/libfcs_fftw3.a + ) + ExternalProject_get_property(scafacos_build INSTALL_DIR) + file(MAKE_DIRECTORY ${INSTALL_DIR}/include) + add_library(LAMMPS::SCAFACOS UNKNOWN IMPORTED) + set_target_properties(LAMMPS::SCAFACOS PROPERTIES + IMPORTED_LOCATION "${INSTALL_DIR}/lib/libfcs.a" + INTERFACE_INCLUDE_DIRECTORIES "${INSTALL_DIR}/include" + INTERFACE_LINK_LIBRARIES "${INSTALL_DIR}/lib/libfcs.a;${INSTALL_DIR}/lib/libfcs_direct.a;${INSTALL_DIR}/lib/libfcs_ewald.a;${INSTALL_DIR}/lib/libfcs_fmm.a;${INSTALL_DIR}/lib/libfcs_p2nfft.a;${INSTALL_DIR}/lib/libfcs_p3m.a;GSL::gsl;${INSTALL_DIR}/lib/libfcs_near.a;${INSTALL_DIR}/lib/libfcs_gridsort.a;${INSTALL_DIR}/lib/libfcs_resort.a;${INSTALL_DIR}/lib/libfcs_redist.a;${INSTALL_DIR}/lib/libfcs_common.a;${INSTALL_DIR}/lib/libfcs_pnfft.a;${INSTALL_DIR}/lib/libfcs_pfft.a;${INSTALL_DIR}/lib/libfcs_fftw3_mpi.a;${INSTALL_DIR}/lib/libfcs_fftw3.a;MPI::MPI_Fortran;MPI::MPI_C") + target_link_libraries(lammps PRIVATE LAMMPS::SCAFACOS) + add_dependencies(LAMMPS::SCAFACOS scafacos_build) +else() + find_package(PkgConfig REQUIRED) + pkg_check_modules(SCAFACOS REQUIRED IMPORTED_TARGET scafacos) + target_link_libraries(lammps PRIVATE PkgConfig::SCAFACOS) endif() diff --git a/cmake/Modules/Packages/USER-SDPD.cmake b/cmake/Modules/Packages/USER-SDPD.cmake index 530dcf2bd915446b24e5521e97f59b24504df340..c9f419d91849f1ebebc7aeaab91eea167255fcb8 100644 --- a/cmake/Modules/Packages/USER-SDPD.cmake +++ b/cmake/Modules/Packages/USER-SDPD.cmake @@ -1,13 +1,13 @@ # Fix rigid/meso requires RIGID to be installed -if(PKG_USER-SDPD) - set(USER-SDPD_SOURCES_DIR ${LAMMPS_SOURCE_DIR}/USER-SDPD) +set(USER-SDPD_SOURCES_DIR ${LAMMPS_SOURCE_DIR}/USER-SDPD) - get_property(hlist GLOBAL PROPERTY FIX) - if(NOT PKG_RIGID) - list(REMOVE_ITEM hlist ${USER-SDPD_SOURCES_DIR}/fix_rigid_meso.h) - list(REMOVE_ITEM LIB_SOURCES ${USER-SDPD_SOURCES_DIR}/fix_rigid_meso.cpp) - endif() - set_property(GLOBAL PROPERTY FIX "${hlist}") - - include_directories(${USER-SDPD_SOURCES_DIR}) +get_property(hlist GLOBAL PROPERTY FIX) +if(NOT PKG_RIGID) + list(REMOVE_ITEM hlist ${USER-SDPD_SOURCES_DIR}/fix_rigid_meso.h) + get_target_property(LAMMPS_SOURCES lammps SOURCES) + list(REMOVE_ITEM LAMMPS_SOURCES ${USER-SDPD_SOURCES_DIR}/fix_rigid_meso.cpp) + set_property(TARGET lammps PROPERTY SOURCES ${LAMMPS_SOURCES}) endif() +set_property(GLOBAL PROPERTY FIX "${hlist}") + +target_include_directories(lammps PRIVATE ${USER-SDPD_SOURCES_DIR}) diff --git a/cmake/Modules/Packages/USER-SMD.cmake b/cmake/Modules/Packages/USER-SMD.cmake index a868918e378649a501b4a616ba1bf0aafd49b2db..6984b24d5207781f2aea191eb13b38b0719e1478 100644 --- a/cmake/Modules/Packages/USER-SMD.cmake +++ b/cmake/Modules/Packages/USER-SMD.cmake @@ -1,28 +1,28 @@ -if(PKG_USER-SMD) +find_package(Eigen3 NO_MODULE) +if(EIGEN3_FOUND) + set(DOWNLOAD_EIGEN3_DEFAULT OFF) +else() + set(DOWNLOAD_EIGEN3_DEFAULT ON) +endif() +option(DOWNLOAD_EIGEN3 "Download Eigen3 instead of using an already installed one)" ${DOWNLOAD_EIGEN3_DEFAULT}) +if(DOWNLOAD_EIGEN3) + message(STATUS "Eigen3 download requested - we will build our own") + include(ExternalProject) + ExternalProject_Add(Eigen3_build + URL http://bitbucket.org/eigen/eigen/get/3.3.7.tar.gz + URL_MD5 f2a417d083fe8ca4b8ed2bc613d20f07 + CONFIGURE_COMMAND "" BUILD_COMMAND "" INSTALL_COMMAND "" + ) + ExternalProject_get_property(Eigen3_build SOURCE_DIR) + add_library(LAMMPS::EIGEN3 INTERFACE IMPORTED) + set_target_properties(LAMMPS::EIGEN3 PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "${SOURCE_DIR}") + target_link_libraries(lammps PRIVATE LAMMPS::EIGEN3) + add_dependencies(LAMMPS::EIGEN3 Eigen3_build) +else() find_package(Eigen3 NO_MODULE) - if(EIGEN3_FOUND) - set(DOWNLOAD_EIGEN3_DEFAULT OFF) - else() - set(DOWNLOAD_EIGEN3_DEFAULT ON) - endif() - option(DOWNLOAD_EIGEN3 "Download Eigen3 instead of using an already installed one)" ${DOWNLOAD_EIGEN3_DEFAULT}) - if(DOWNLOAD_EIGEN3) - message(STATUS "Eigen3 download requested - we will build our own") - include(ExternalProject) - ExternalProject_Add(Eigen3_build - URL http://bitbucket.org/eigen/eigen/get/3.3.7.tar.gz - URL_MD5 f2a417d083fe8ca4b8ed2bc613d20f07 - CONFIGURE_COMMAND "" BUILD_COMMAND "" INSTALL_COMMAND "" - ) - ExternalProject_get_property(Eigen3_build SOURCE_DIR) - set(EIGEN3_INCLUDE_DIR ${SOURCE_DIR}) - list(APPEND LAMMPS_DEPS Eigen3_build) - else() - find_package(Eigen3 NO_MODULE) - mark_as_advanced(Eigen3_DIR) - if(NOT EIGEN3_FOUND) - message(FATAL_ERROR "Eigen3 not found, help CMake to find it by setting EIGEN3_INCLUDE_DIR, or set DOWNLOAD_EIGEN3=ON to download it") - endif() + mark_as_advanced(Eigen3_DIR) + if(NOT EIGEN3_FOUND) + message(FATAL_ERROR "Eigen3 not found, help CMake to find it by setting EIGEN3_INCLUDE_DIR, or set DOWNLOAD_EIGEN3=ON to download it") endif() - include_directories(${EIGEN3_INCLUDE_DIR}) + target_link_libraries(lammps PRIVATE Eigen3::Eigen) endif() diff --git a/cmake/Modules/Packages/USER-VTK.cmake b/cmake/Modules/Packages/USER-VTK.cmake index d264577ca2f77f5af3b2cbac590f4d9fc07500d9..8c4445167a10cf1e66c2e0444c7eb15afde85b12 100644 --- a/cmake/Modules/Packages/USER-VTK.cmake +++ b/cmake/Modules/Packages/USER-VTK.cmake @@ -1,6 +1,4 @@ -if(PKG_USER-VTK) - find_package(VTK REQUIRED NO_MODULE) - include(${VTK_USE_FILE}) - add_definitions(-DLAMMPS_VTK) - list(APPEND LAMMPS_LINK_LIBS ${VTK_LIBRARIES}) -endif() +find_package(VTK REQUIRED NO_MODULE) +include(${VTK_USE_FILE}) +target_compile_definitions(lammps PRIVATE -DLAMMPS_VTK) +target_link_libraries(lammps PRIVATE ${VTK_LIBRARIES}) diff --git a/cmake/Modules/Packages/VORONOI.cmake b/cmake/Modules/Packages/VORONOI.cmake index 5418132034f369dcc9e4d939125754aac4a2e287..1d6893a97861629d95a1d779a901bfe74f18740d 100644 --- a/cmake/Modules/Packages/VORONOI.cmake +++ b/cmake/Modules/Packages/VORONOI.cmake @@ -1,43 +1,48 @@ -if(PKG_VORONOI) - find_package(VORO) - if(VORO_FOUND) - set(DOWNLOAD_VORO_DEFAULT OFF) +find_package(VORO) +if(VORO_FOUND) + set(DOWNLOAD_VORO_DEFAULT OFF) +else() + set(DOWNLOAD_VORO_DEFAULT ON) +endif() +option(DOWNLOAD_VORO "Download and compile the Voro++ library instead of using an already installed one" ${DOWNLOAD_VORO_DEFAULT}) +if(DOWNLOAD_VORO) + message(STATUS "Voro++ download requested - we will build our own") + include(ExternalProject) + + if(BUILD_SHARED_LIBS) + set(VORO_BUILD_CFLAGS "${CMAKE_SHARED_LIBRARY_CXX_FLAGS} ${CMAKE_CXX_FLAGS} ${CMAKE_CXX_FLAGS_${BTYPE}}") else() - set(DOWNLOAD_VORO_DEFAULT ON) + set(VORO_BUILD_CFLAGS "${CMAKE_CXX_FLAGS} ${CMAKE_CXX_FLAGS_${BTYPE}}") endif() - option(DOWNLOAD_VORO "Download and compile the Voro++ library instead of using an already installed one" ${DOWNLOAD_VORO_DEFAULT}) - if(DOWNLOAD_VORO) - message(STATUS "Voro++ download requested - we will build our own") - include(ExternalProject) - - if(BUILD_SHARED_LIBS) - set(VORO_BUILD_CFLAGS "${CMAKE_SHARED_LIBRARY_CXX_FLAGS} ${CMAKE_CXX_FLAGS} ${CMAKE_CXX_FLAGS_${BTYPE}}") - else() - set(VORO_BUILD_CFLAGS "${CMAKE_CXX_FLAGS} ${CMAKE_CXX_FLAGS_${BTYPE}}") - endif() - if(APPLE) - get_filename_component(VORO_CXX ${CMAKE_CXX_COMPILER} NAME_WE) - set(VORO_BUILD_OPTIONS CXX=${VORO_CXX} CFLAGS=${VORO_BUILD_CFLAGS}) - else() - set(VORO_BUILD_OPTIONS CXX=${CMAKE_CXX_COMPILER} CFLAGS=${VORO_BUILD_CFLAGS}) - endif() - - ExternalProject_Add(voro_build - URL https://download.lammps.org/thirdparty/voro++-0.4.6.tar.gz - URL_MD5 2338b824c3b7b25590e18e8df5d68af9 - CONFIGURE_COMMAND "" BUILD_COMMAND make ${VORO_BUILD_OPTIONS} BUILD_IN_SOURCE 1 INSTALL_COMMAND "" - BUILD_BYPRODUCTS /src/libvoro++.a - ) - ExternalProject_get_property(voro_build SOURCE_DIR) - set(VORO_LIBRARIES ${SOURCE_DIR}/src/libvoro++.a) - set(VORO_INCLUDE_DIRS ${SOURCE_DIR}/src) - list(APPEND LAMMPS_DEPS voro_build) + if(APPLE) + get_filename_component(VORO_CXX ${CMAKE_CXX_COMPILER} NAME_WE) + set(VORO_BUILD_OPTIONS CXX=${VORO_CXX} CFLAGS=${VORO_BUILD_CFLAGS}) else() - find_package(VORO) - if(NOT VORO_FOUND) - message(FATAL_ERROR "Voro++ library not found. Help CMake to find it by setting VORO_LIBRARY and VORO_INCLUDE_DIR, or set DOWNLOAD_VORO=ON to download it") - endif() + set(VORO_BUILD_OPTIONS CXX=${CMAKE_CXX_COMPILER} CFLAGS=${VORO_BUILD_CFLAGS}) + endif() + + ExternalProject_Add(voro_build + URL https://download.lammps.org/thirdparty/voro++-0.4.6.tar.gz + URL_MD5 2338b824c3b7b25590e18e8df5d68af9 + PATCH_COMMAND patch -b -p0 < ${LAMMPS_LIB_SOURCE_DIR}/voronoi/voro-make.patch + CONFIGURE_COMMAND "" + BUILD_COMMAND make ${VORO_BUILD_OPTIONS} + BUILD_IN_SOURCE 1 + INSTALL_COMMAND "" + BUILD_BYPRODUCTS /src/libvoro++.a + ) + ExternalProject_get_property(voro_build SOURCE_DIR) + file(MAKE_DIRECTORY ${SOURCE_DIR}/src) + add_library(LAMMPS::VORO UNKNOWN IMPORTED) + set_target_properties(LAMMPS::VORO PROPERTIES + IMPORTED_LOCATION "${SOURCE_DIR}/src/libvoro++.a" + INTERFACE_INCLUDE_DIRECTORIES "${SOURCE_DIR}/src") + target_link_libraries(lammps PRIVATE LAMMPS::VORO) + add_dependencies(LAMMPS::VORO voro_build) +else() + find_package(VORO) + if(NOT VORO_FOUND) + message(FATAL_ERROR "Voro++ library not found. Help CMake to find it by setting VORO_LIBRARY and VORO_INCLUDE_DIR, or set DOWNLOAD_VORO=ON to download it") endif() - include_directories(${VORO_INCLUDE_DIRS}) - list(APPEND LAMMPS_LINK_LIBS ${VORO_LIBRARIES}) + target_link_libraries(lammps PRIVATE VORO::VORO) endif() diff --git a/cmake/Modules/Testing.cmake b/cmake/Modules/Testing.cmake index 0eeef00fe9ab4b603fe319825662a6b827f46ac7..a9f9a2ac21001e72ac62067b204e2d6f69e653fa 100644 --- a/cmake/Modules/Testing.cmake +++ b/cmake/Modules/Testing.cmake @@ -2,51 +2,9 @@ # Testing ############################################################################### option(ENABLE_TESTING "Enable testing" OFF) -if(ENABLE_TESTING AND BUILD_EXE) +if(ENABLE_TESTING) enable_testing() - option(LAMMPS_TESTING_SOURCE_DIR "Location of lammps-testing source directory" "") - option(LAMMPS_TESTING_GIT_TAG "Git tag of lammps-testing" "master") - mark_as_advanced(LAMMPS_TESTING_SOURCE_DIR LAMMPS_TESTING_GIT_TAG) - - if (CMAKE_VERSION VERSION_GREATER "3.10.3" AND NOT LAMMPS_TESTING_SOURCE_DIR) - include(FetchContent) - - FetchContent_Declare(lammps-testing - GIT_REPOSITORY https://github.com/lammps/lammps-testing.git - GIT_TAG ${LAMMPS_TESTING_GIT_TAG} - ) - - FetchContent_GetProperties(lammps-testing) - if(NOT lammps-testing_POPULATED) - message(STATUS "Downloading tests...") - FetchContent_Populate(lammps-testing) - endif() - - set(LAMMPS_TESTING_SOURCE_DIR ${lammps-testing_SOURCE_DIR}) - elseif(NOT LAMMPS_TESTING_SOURCE_DIR) - message(WARNING "Full test-suite requires CMake >= 3.11 or copy of\n" - "https://github.com/lammps/lammps-testing in LAMMPS_TESTING_SOURCE_DIR") - endif() - - add_test(ShowHelp ${CMAKE_BINARY_DIR}/${LAMMPS_BINARY} -help) - - if(EXISTS ${LAMMPS_TESTING_SOURCE_DIR}) - message(STATUS "Running test discovery...") - - file(GLOB_RECURSE TEST_SCRIPTS ${LAMMPS_TESTING_SOURCE_DIR}/tests/core/*/in.*) - foreach(script_path ${TEST_SCRIPTS}) - get_filename_component(TEST_NAME ${script_path} EXT) - get_filename_component(SCRIPT_NAME ${script_path} NAME) - get_filename_component(PARENT_DIR ${script_path} DIRECTORY) - string(SUBSTRING ${TEST_NAME} 1 -1 TEST_NAME) - string(REPLACE "-" "_" TEST_NAME ${TEST_NAME}) - string(REPLACE "+" "_" TEST_NAME ${TEST_NAME}) - set(TEST_NAME "test_core_${TEST_NAME}_serial") - add_test(${TEST_NAME} ${CMAKE_BINARY_DIR}/${LAMMPS_BINARY} -in ${SCRIPT_NAME}) - set_tests_properties(${TEST_NAME} PROPERTIES WORKING_DIRECTORY ${PARENT_DIR}) - endforeach() - list(LENGTH TEST_SCRIPTS NUM_TESTS) - - message(STATUS "Found ${NUM_TESTS} tests.") - endif() + get_filename_component(LAMMPS_UNITTEST_DIR ${LAMMPS_SOURCE_DIR}/../unittest ABSOLUTE) + get_filename_component(LAMMPS_UNITTEST_BIN ${CMAKE_BINARY_DIR}/unittest ABSOLUTE) + add_subdirectory(${LAMMPS_UNITTEST_DIR} ${LAMMPS_UNITTEST_BIN}) endif() diff --git a/cmake/Modules/generate_lmpgitversion.cmake b/cmake/Modules/generate_lmpgitversion.cmake index a4aa59b26272c5d88934f373881d19804aa528e8..afd44478679069224b6b5f7ce7586c6a238dd398 100644 --- a/cmake/Modules/generate_lmpgitversion.cmake +++ b/cmake/Modules/generate_lmpgitversion.cmake @@ -3,17 +3,19 @@ set(temp_git_commit "(unknown)") set(temp_git_branch "(unknown)") set(temp_git_describe "(unknown)") set(temp_git_info "false") -if(GIT_FOUND AND EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/../.git) + +message(STATUS "Git Directory: ${LAMMPS_DIR}/.git") +if(GIT_FOUND AND EXISTS ${LAMMPS_DIR}/.git) set(temp_git_info "true") - execute_process(COMMAND ${GIT_EXECUTABLE} -C ${CMAKE_CURRENT_SOURCE_DIR}/.. rev-parse HEAD + execute_process(COMMAND ${GIT_EXECUTABLE} -C ${LAMMPS_DIR} rev-parse HEAD OUTPUT_VARIABLE temp_git_commit ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE) - execute_process(COMMAND ${GIT_EXECUTABLE} -C ${CMAKE_CURRENT_SOURCE_DIR}/.. rev-parse --abbrev-ref HEAD + execute_process(COMMAND ${GIT_EXECUTABLE} -C ${LAMMPS_DIR} rev-parse --abbrev-ref HEAD OUTPUT_VARIABLE temp_git_branch ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE) - execute_process(COMMAND ${GIT_EXECUTABLE} -C ${CMAKE_CURRENT_SOURCE_DIR}/.. describe --dirty=-modified + execute_process(COMMAND ${GIT_EXECUTABLE} -C ${LAMMPS_DIR} describe --dirty=-modified OUTPUT_VARIABLE temp_git_describe ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE) diff --git a/cmake/README.md b/cmake/README.md deleted file mode 100644 index b9dd6d437370c395ac1075304159c0052c097f33..0000000000000000000000000000000000000000 --- a/cmake/README.md +++ /dev/null @@ -1,2320 +0,0 @@ -# Building LAMMPS using CMake - -LAMMPS recently acquired support for building with CMake thanks to the efforts -of Christoph Junghans (LANL) and Richard Berger (Temple U). One of the key -strengths of CMake is that it can generate the necessary build system files of -your own personal preference. It also enables using common development IDEs such -as Eclipse, Visual Studio, QtCreator, Xcode and many more for LAMMPS -development. - -CMake can both be used as a command-line (CLI) utility `cmake` or through one of -its GUIs. `ccmake` is a text-based ui to configure and build CMake projects. -`cmake-gui` is a graphical frontend for running CMake operations that works on -Linux desktop environments, Windows and MacOS X. - -The following is a tutorial-style introduction in using the CMake system. It -should give you the necessary foundation to understand how to do the most common -tasks, act as a reference and provide examples of typical use cases. - -## Table of Contents - - * [Quick Start for the Impatient](#quick-start-for-the-impatient) - * [Building LAMMPS using cmake](#building-lammps-using-cmake-1) - * [Prerequisites](#prerequisites) - * [Build directory vs. Source Directory](#build-directory-vs-source-directory) - * [Defining and using presets](#defining-and-using-presets) - * [Reference](#reference) - * [Common CMake Configuration Options](#common-cmake-configuration-options) - * [LAMMPS Configuration Options](#lammps-configuration-options) - * [Parallelization and Accelerator Packages](#parallelization-and-accelerator-packages) - * [Default Packages](#default-packages) - * [Other Packages](#other-packages) - * [User Packages](#user-packages) - * [Package-Specific Configuration Options](#package-specific-configuration-options) - * [KSPACE Package](#kspace-package) - * [MKL](#mkl) - * [FFTW3](#fftw3) - * [BLAS](#blas) - * [LAPACK](#lapack) - * [PYTHON Package](#python-package) - * [GPU Package](#gpu-package) - * [MESSAGE Package](#message-package) - * [MSCG Package](#mscg-package) - * [VORONOI Package](#voronoi-package) - * [USER-LATTE Package](#user-latte-package) - * [USER-PLUMED Package](#user-plumed-package) - * [USER-SCAFACOS Package](#user-scafacos-package) - * [USER-SMD Package](#user-smd-package) - * [Optional Features](#optional-features) - * [zlib support](#zlib-support) - * [JPEG support](#jpeg-support) - * [PNG support](#png-support) - * [GZIP support](#gzip-support) - * [FFMPEG support](#ffmpeg-support) - * [Compilers](#compilers) - * [Building with GNU Compilers](#building-with-gnu-compilers) - * [Building with Intel Compilers](#building-with-intel-compilers) - * [Building with LLVM/Clang Compilers](#building-with-llvmclang-compilers) - -## Quick Start for the Impatient -If you want to skip ahead and just run the compilation using `cmake`, please -find a minimal example below. Together with the options reference below, this -should get you started. - -```bash -git clone https://github.com/lammps/lammps.git -mkdir lammps/build -cd lammps/build -cmake [-D OPTION_A=VALUE_A -D OPTION_B=VALUE_B ...] ../cmake -make -``` - -# Building LAMMPS using `cmake` - -## Prerequisites -This tutorial assumes you are running in a command-line environment using a -shell like Bash. - -* Linux: any terminal window will work -* MacOS X: launch the Terminal app -* Windows 10: install and run "Bash on Windows" (aka Ubuntu on Windows) - -Before we start, please download the latest and greatest version of LAMMPS from -GitHub. You can either download it as a tarball or ZIP file, or via git. When -you start with a fresh lammps directory, the contents should look like this: - -```bash -$ ls -bench doc lib potentials README tools -cmake examples LICENSE python src -``` - -## Build directory vs. Source Directory - -By using CMake we separate building LAMMPS into multiple phases: - -1. **Configuration**: define which features we want to enable/disable and how it should be compiled -2. **Compilation**: compile each source file and generate binaries and libraries based on the configuration -3. **Installation** (Optional): finally we can install the generated binaries on our system - -In the GNU Make based build system of LAMMPS, configuration occurs by running -special make targets like `make yes-MOLECULAR`. These targets modify the -**source directory** (`src/`) directory by copying package files and patching -Makefile. In some cases you are force to manually edit Makefiles to add compiler -options and/or correct include directory and library paths. - -These edits and copy operations are no longer necessary when compiling with -CMake. The source directory stays untouched, so you compile LAMMPS in many -different variants using the same source code checkout. It enables true -**out-of-source** builds. - -When using Cmake, you can compile in **any** folder outside of the source -directory. Any working directory you choose becomes a so-called **build -directory**. All configuration files and compilation results are stored in this -folder. We recommend calling it something like `build/`. - -Let's have a look a quick example, where we get the greatest and latest version -of LAMMPS from GitHub via git: -```bash -git clone https://github.com/lammps/lammps.git -``` - -We then create a new `build` folder and make it our current working directory: -``` -mkdir lammps/build -cd lammps/build -``` - -To configure LAMMPS we run `cmake` inside of this folder. However it requires at -least one argument. `cmake` needs to read the LAMMPS `CMakeLists.txt` file to -know what to do. This file is located in the `cmake/` subdirectory of the -lammps checkout. To run `cmake` add the relative or absolute path to the `cmake/` -directory as first argument. - -E.g., if the current working directory is `lammps/build` you can specify the -relative path to `lammps/cmake` as follows: -``` -cmake ../cmake -``` - -You could also specify the absolute path: -``` -cmake /path/to/my/lammps/folder/cmake -``` - -Please note: **This does NOT compile the code!** Running cmake only configures -the next build. It generates the necessary files to compile the code. On -Unix/Linux it defaults to generating Makefiles. You can also choose other output -formats to generate files for Eclipse, Xcode or Visual Studio which are -supported on other platorms. - -To compile LAMMPS once the Makefiles are generated, simply type `make` in the -build directory. - -``` -make -``` -# Defining and using presets - -The CMake build exposes a lot of different options. In the old build system -some of the package selections were possible by using special make target like -`make yes-std` or `make no-lib`. Achieving a similar result with cmake requires -specifying all options manually. This can quickly become a very long command -line that is hard to handle. While these could be stored in a simple script -file, there is another way of defining "presets" to compile LAMMPS in a certain -way. Since the cmake build process - contrary to the conventional build system - -includes the compilation of the bundled libraries into the standard build process, -the grouping of those presets is somewhat different. - -A preset is a regular CMake script file that can use constructs such as -variables, lists and for-loops to manipulate configuration options and create -an [*initial cache*](https://cmake.org/cmake/help/v3.12/manual/cmake.1.html). -Options must be set with the `CACHE` and `FORCE` flag to ensure they are -considered even during a second cmake run. - -Such a file can then be passed to cmake via the `-C` flag. Several examples of -presets can be found in the `cmake/presets` folder. - -```bash -# build LAMMPS with all packages enabled which don't use external libraries and enable GPU package -mkdir build -cd build -cmake -C ../cmake/presets/all_on.cmake -C ../cmake/presets/nolib.cmake -D PKG_GPU=on ../cmake -``` - -# Reference - -## Common CMake Configuration Options - - - - - - - - - - - - - - - - - - - - - - - - - - - -
OptionDescriptionValues
CMAKE_INSTALL_PREFIXInstall location where LAMMPS files will be copied to. In the Unix/Linux case with Makefiles this controls what `make install` will do. - Default setting is $HOME/.local. -
CMAKE_BUILD_TYPEControls if debugging symbols are added to the generated binaries -
-
RelWithDebInfo (default)
-
Release
-
Debug
-
MinSizeRel
-
-
CMAKE_VERBOSE_MAKEFILEEnable verbose output from Makefile builds (useful for debugging), the same can be achieved by adding `VERBOSE=1` to the `make` call. -
-
off (default)
-
on
-
-
- - -## LAMMPS Configuration Options - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
OptionDescriptionValues
LAMMPS_SIZE_LIMITControls the integer sizes used by LAMMPS internally -
-
LAMMPS_SMALLBIG (default)
-
32bit , 64bit
-
LAMMPS_SMALLSMALL
-
32bit , 32bit
-
LAMMPS_BIGBIG
-
64bit , 64bit
-
-
LAMMPS_LONGLONG_TO_LONGWorkaround if your system or MPI version does not recognize long long data types -
-
off (default)
-
on
-
-
LAMMPS_MEMALIGNcontrols the alignment of blocks of memory allocated by LAMMPS -
-
64 (default)
-
-
LAMMPS_EXCEPTIONScontrols whether LAMMPS dies after an error or throws a C++ exception. This is particularly useful when running through the C library interface, since an error - in LAMMPS then doesn't kill the parent process -
-
off (default)
-
on
-
-
LAMMPS_MACHINEallows appending a machine suffix to the generated LAMMPS binary -
-
*none* (default)
-
-
LAMMPS_LIB_SUFFIXallows appending a suffix to the generated LAMMPS library -
-
*none* (default)
-
-
BUILD_LIBcontrol whether to build LAMMPS as a library -
-
off (default)
-
on
-
-
BUILD_EXEcontrol whether to build LAMMPS executable -
-
on (default)
-
off
-
-
BUILD_SHARED_LIBScontrol whether to build LAMMPS as a shared-library -
-
off (default)
-
on
-
-
BUILD_DOCcontrol whether to build LAMMPS documentation -
-
off (default)
-
on
-
-
BUILD_TOOLScontrol whether to build LAMMPS tools -
-
off (default)
-
on
-
-
- -## Parallelization and Accelerator Packages - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
OptionDescriptionValues
BUILD_MPIcontrol whether to build LAMMPS with MPI support. This will look for - `mpicxx` in your path and use this MPI implementation. -
-
on (default, if found)
-
off
-
-
BUILD_OMPcontrol whether to build LAMMPS with OpenMP support. -
-
on (default, if found)
-
off
-
-
PKG_OPT - A handful of pair styles which are optimized for improved CPU performance on - single or multiple cores. These include EAM, LJ, CHARMM, and Morse potentials. - -
-
off (default)
-
on
-
-
PKG_USER-OMP - Hundreds of pair, fix, compute, bond, angle, dihedral, improper, and kspace - styles which are altered to enable threading on many-core CPUs via OpenMP - directives. - -
-
off (default)
-
on
-
-
PKG_USER-INTEL - Dozens of pair, fix, bond, angle, dihedral, improper, and kspace styles which - are optimized for Intel CPUs and KNLs (Knights Landing). - -
-
off (default)
-
on
-
-
PKG_GPU - Dozens of pair styles and a version of the PPPM long-range Coulombic solver - optimized for GPUs. All such styles have a “gpu” as a suffix in their style - name. The GPU code can be compiled with either CUDA or OpenCL, however the - OpenCL variants are no longer actively maintained and only the CUDA versions - are regularly tested. - -
-
off (default)
-
on
-
-
PKG_KOKKOSDozens of atom, pair, bond, angle, dihedral, improper, fix, compute styles adapted to compile using the Kokkos library which can convert them to OpenMP or CUDA code so that they run efficiently on multicore CPUs, KNLs, or GPUs. -
-
off (default)
-
on
-
-
- -## Default Packages - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
OptionDescriptionValues
PKG_ASPHEREComputes, time-integration fixes, and pair styles for aspherical particle models including ellipsoids, 2d lines, and 3d triangles. -
-
off (default)
-
on
-
-
PKG_BODYBody-style particles with internal structure. Computes, time-integration fixes, pair styles, as well as the body styles themselves. -
-
off (default)
-
on
-
-
PKG_CLASS2Bond, angle, dihedral, improper, and pair styles for the COMPASS CLASS2 molecular force field. -
-
off (default)
-
on
-
-
PKG_COLLOIDCoarse-grained finite-size colloidal particles. Pair styles and fix wall styles for colloidal interactions. Includes the Fast Lubrication Dynamics (FLD) method for hydrodynamic interactions, which is a simplified approximation to Stokesian dynamics. -
-
off (default)
-
on
-
-
PKG_COMPRESSCompressed output of dump files via the zlib compression library, using dump styles with a “gz” in their style name. -
-
off (default)
-
on
-
-
PKG_CORESHELLCompute and pair styles that implement the adiabatic core/shell model for polarizability. The pair styles augment Born, Buckingham, and Lennard-Jones styles with core/shell capabilities. The compute temp/cs command calculates the temperature of a system with core/shell particles. -
-
off (default)
-
on
-
-
PKG_DIPOLEAn atom style and several pair styles for point dipole models with short-range or long-range interactions. -
-
off (default)
-
on
-
-
PKG_GRANULARPair styles and fixes for finite-size granular particles, which interact with each other and boundaries via frictional and dissipative potentials. -
-
off (default)
-
on
-
-
PKG_KSPACEA variety of long-range Coulombic solvers, as well as pair styles which compute the corresponding short-range pairwise Coulombic interactions. These include Ewald, particle-particle particle-mesh (PPPM), and multilevel summation method (MSM) solvers. -
-
off (default)
-
on
-
-
PKG_MANYBODY - A variety of manybody and bond-order potentials. These include (AI)REBO, BOP, - EAM, EIM, Stillinger-Weber, and Tersoff potentials. - -
-
off (default)
-
on
-
-
PKG_MC - Several fixes and a pair style that have Monte Carlo (MC) or MC-like - attributes. These include fixes for creating, breaking, and swapping bonds, - for performing atomic swaps, and performing grand-canonical MC (GCMC) in - conjunction with dynamics. - -
-
off (default)
-
on
-
-
PKG_MISC - A variety of compute, fix, pair, dump styles with specialized capabilities that - don’t align with other packages. - -
-
off (default)
-
on
-
-
PKG_MOLECULE - A large number of atom, pair, bond, angle, dihedral, improper styles that are - used to model molecular systems with fixed covalent bonds. The pair styles - include the Dreiding (hydrogen-bonding) and CHARMM force fields, and a TIP4P - water model. - -
-
off (default)
-
on
-
-
PKG_PERI - An atom style, several pair styles which implement different Peridynamics - materials models, and several computes which calculate diagnostics. - Peridynamics is a a particle-based meshless continuum model. - -
-
off (default)
-
on
-
-
PKG_QEQ - Several fixes for performing charge equilibration (QEq) via different - algorithms. These can be used with pair styles that perform QEq as part of - their formulation. - -
-
off (default)
-
on
-
-
PKG_REPLICA - A collection of multi-replica methods which can be used when running multiple - LAMMPS simulations (replicas). See Section 6.5 for an overview of how to run - multi-replica simulations in LAMMPS. Methods in the package include nudged - elastic band (NEB), parallel replica dynamics (PRD), temperature accelerated - dynamics (TAD), parallel tempering, and a verlet/split algorithm for - performing long-range Coulombics on one set of processors, and the remainder - of the force field calcalation on another set. - -
-
off (default)
-
on
-
-
PKG_RIGID - Fixes which enforce rigid constraints on collections of atoms or particles. - This includes SHAKE and RATTLE, as well as varous rigid-body integrators for a - few large bodies or many small bodies. Also several computes which calculate - properties of rigid bodies. - -
-
off (default)
-
on
-
-
PKG_SHOCK - Fixes for running impact simulations where a shock-wave passes through a - material. - -
-
off (default)
-
on
-
-
PKG_SPINModel atomic magnetic spins classically, coupled to atoms moving in the usual manner via MD. Various pair, fix, and compute styles. -
-
off (default)
-
on
-
-
PKG_SNAP - A pair style for the spectral neighbor analysis potential (SNAP). SNAP is - methodology for deriving a highly accurate classical potential fit to a large - archive of quantum mechanical (DFT) data. Also several computes which analyze - attributes of the potential. - -
-
off (default)
-
on
-
-
PKG_SRD - A pair of fixes which implement the Stochastic Rotation Dynamics (SRD) method - for coarse-graining of a solvent, typically around large colloidal particles. - -
-
off (default)
-
on
-
-
- -## Other Packages - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
OptionDescriptionValues
PKG_KIMA pair_style kim command which is a wrapper on the Knowledge Base for Interatomic Models (KIM) repository of interatomic potentials, enabling any of them to be used in LAMMPS simulations. -
-
off (default)
-
on
-
-
PKG_PYTHONEnable support for Python scripting inside of LAMMPS. -
-
off (default)
-
on
-
-
PKG_MESSAGECommands to use LAMMPS as either a client or server and couple it to another application. -
-
off (default)
-
on
-
-
PKG_MSCG - A fix mscg command which can parameterize a Multi-Scale Coarse-Graining (MSCG) - model using the open-source MS-CG library. - -
-
off (default)
-
on
-
-
PKG_MPIIO - Support for parallel output/input of dump and restart files via the MPIIO library. - -
-
off (default)
-
on
-
-
PKG_POEMS - A fix that wraps the Parallelizable Open source Efficient Multibody Software - (POEMS) library, which is able to simulate the dynamics of articulated body - systems. These are systems with multiple rigid bodies (collections of - particles) whose motion is coupled by connections at hinge points. - -
-
off (default)
-
on
-
-
PKG_LATTE - A fix command which wraps the LATTE DFTB code, so that molecular dynamics can - be run with LAMMPS using density-functional tight-binding quantum forces - calculated by LATTE. - -
-
off (default)
-
on
-
-
PKG_VORONOI - A compute command which calculates the Voronoi tesselation of a collection of atoms by wrapping the Voro++ library. This can be used to calculate the local volume or each atoms or its near neighbors. - -
-
off (default)
-
on
-
-
- -## User Packages - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
OptionDescriptionValues
PKG_USER-ADIOSADIOS is a high-performance I/O library. This package implements the dump “atom/adios” and dump “custom/adios” commands to write data using the ADIOS library. -
-
off (default)
-
on
-
-
PKG_USER-ATC - ATC stands for atoms-to-continuum. This package implements a fix atc command - to either couple molecular dynamics with continuum finite element equations or - perform on-the-fly conversion of atomic information to continuum fields. - -
-
off (default)
-
on
-
-
PKG_USER-AWPMD - AWPMD stands for Antisymmetrized Wave Packet Molecular Dynamics. This package - implements an atom, pair, and fix style which allows electrons to be treated - as explicit particles in a classical molecular dynamics model. - -
-
off (default)
-
on
-
-
PKG_USER-BOCS - This package provides fix bocs, a modified version of fix npt which includes the pressure correction to the barostat as outlined in: N. J. H. Dunn and W. G. Noid, “Bottom-up coarse-grained models that accurately describe the structure, pressure, and compressibility of molecular liquids,” J. Chem. Phys. 143, 243148 (2015). - -
-
off (default)
-
on
-
-
PKG_USER-CGDNA - Several pair styles, a bond style, and integration fixes for coarse-grained - models of single- and double-stranded DNA based on the oxDNA model of Doye, - Louis and Ouldridge at the University of Oxford. This includes Langevin-type - rigid-body integrators with improved stability. - -
-
off (default)
-
on
-
-
PKG_USER-CGSDK - Several pair styles and an angle style which implement the coarse-grained SDK - model of Shinoda, DeVane, and Klein which enables simulation of ionic liquids, - electrolytes, lipids and charged amino acids. - -
-
off (default)
-
on
-
-
PKG_USER-COLVARS - COLVARS stands for collective variables, which can be used to implement - various enhanced sampling methods, including Adaptive Biasing Force, - Metadynamics, Steered MD, Umbrella Sampling and Restraints. A fix colvars - command is implemented which wraps a COLVARS library, which implements these - methods. simulations. - -
-
off (default)
-
on
-
-
PKG_USER-DIFFRACTION - Two computes and a fix for calculating x-ray and electron diffraction - intensities based on kinematic diffraction theory. - -
-
off (default)
-
on
-
-
PKG_USER-DPD - DPD stands for dissipative particle dynamics. This package implements - coarse-grained DPD-based models for energetic, reactive molecular crystalline - materials. It includes many pair styles specific to these systems, including - for reactive DPD, where each particle has internal state for multiple species - and a coupled set of chemical reaction ODEs are integrated each timestep. - Highly accurate time integrators for isothermal, isoenergetic, isobaric and - isenthalpic conditions are included. These enable long timesteps via the - Shardlow splitting algorithm. - -
-
off (default)
-
on
-
-
PKG_USER-DRUDE - Fixes, pair styles, and a compute to simulate thermalized Drude oscillators as - a model of polarization. - -
-
off (default)
-
on
-
-
PKG_USER-EFF - EFF stands for electron force field which allows a classical MD code to model - electrons as particles of variable radius. This package contains atom, pair, - fix and compute styles which implement the eFF as described in A. - Jaramillo-Botero, J. Su, Q. An, and W.A. Goddard III, JCC, 2010. The eFF - potential was first introduced by Su and Goddard, in 2007. - -
-
off (default)
-
on
-
-
PKG_USER-FEP - FEP stands for free energy perturbation. This package provides methods for - performing FEP simulations by using a fix adapt/fep command with soft-core - pair potentials, which have a “soft” in their style name. - -
-
off (default)
-
on
-
-
PKG_USER-H5MD - H5MD stands for HDF5 for MD. HDF5 is a portable, binary, self-describing file - format, used by many scientific simulations. H5MD is a format for molecular - simulations, built on top of HDF5. This package implements a dump h5md command - to output LAMMPS snapshots in this format. - -
-
off (default)
-
on
-
-
PKG_USER-LB - Fixes which implement a background Lattice-Boltzmann (LB) fluid, which can be - used to model MD particles influenced by hydrodynamic forces. - -
-
off (default)
-
on
-
-
PKG_USER-MANIFOLD - Several fixes and a “manifold” class which enable simulations of particles - constrained to a manifold (a 2D surface within the 3D simulation box). This is - done by applying the RATTLE constraint algorithm to formulate single-particle - constraint functions g(xi,yi,zi) = 0 and their derivative (i.e. the normal of - the manifold) n = grad(g). - -
-
off (default)
-
on
-
-
PKG_USER-MEAMC - A pair style for the modified embedded atom (MEAM) potential translated from - the Fortran version in the MEAM package to plain C++. In contrast to the MEAM - package, no library needs to be compiled and the pair style can be - instantiated multiple times. - -
-
off (default)
-
on
-
-
PKG_USER-MESO - Several extensions of the the dissipative particle dynamics (DPD) method. - Specifically, energy-conserving DPD (eDPD) that can model non-isothermal - processes, many-body DPD (mDPD) for simulating vapor-liquid coexistence, and - transport DPD (tDPD) for modeling advection-diffusion-reaction systems. The - equations of motion of these DPD extensions are integrated through a modified - velocity-Verlet (MVV) algorithm. - -
-
off (default)
-
on
-
-
PKG_USER-MGPT - A pair style which provides a fast implementation of the quantum-based MGPT - multi-ion potentials. The MGPT or model GPT method derives from - first-principles DFT-based generalized pseudopotential theory (GPT) through a - series of systematic approximations valid for mid-period transition metals - with nearly half-filled d bands. The MGPT method was originally developed by - John Moriarty at LLNL. The pair style in this package calculates forces and - energies using an optimized matrix-MGPT algorithm due to Tomas Oppelstrup at - LLNL. - -
-
off (default)
-
on
-
-
PKG_USER-MISC - A potpourri of (mostly) unrelated features contributed to LAMMPS by users. - Each feature is a single fix, compute, pair, bond, angle, dihedral, improper, - or command style. - -
-
off (default)
-
on
-
-
PKG_USER-MOFFF - Pair, angle and improper styles needed to employ the MOF-FF force field by - Schmid and coworkers with LAMMPS. MOF-FF is a first principles derived force - field with the primary aim to simulate MOFs and related porous framework - materials, using spherical Gaussian charges. It is described in S. Bureekaew - et al., Phys. Stat. Sol. B 2013, 250, 1128-1141. For the usage of MOF-FF see - the example in the example directory as well as the MOF+ website. - -
-
off (default)
-
on
-
-
PKG_USER-MOLFILE - A dump molfile command which uses molfile plugins that are bundled with the - VMD molecular visualization and analysis program, to enable LAMMPS to dump - snapshots in formats compatible with various molecular simulation tools. - -
-
off (default)
-
on
-
-
PKG_USER-NETCDF - Dump styles for writing NetCDF formatted dump files. NetCDF is a portable, - binary, self-describing file format developed on top of HDF5. The file - contents follow the AMBER NetCDF trajectory conventions - (http://ambermd.org/netcdf/nctraj.xhtml), but include extensions. - -
-
off (default)
-
on
-
-
PKG_USER-PHONON - A fix phonon command that calculates dynamical matrices, which can then be - used to compute phonon dispersion relations, directly from molecular dynamics - simulations. - -
-
off (default)
-
on
-
-
PKG_USER-PLUMED - The fix plumed command allows you to use the PLUMED free energy plugin for molecular dynamics to analyze and bias your LAMMPS trajectory on the fly. The PLUMED library is called from within the LAMMPS input script by using the fix plumed command. - -
-
off (default)
-
on
-
-
PKG_USER-PTM - A compute ptm/atom command that calculates local structure characterization using the Polyhedral Template Matching methodology. - -
-
off (default)
-
on
-
-
PKG_USER-QTB - Two fixes which provide a self-consistent quantum treatment of vibrational modes in a classical molecular dynamics simulation. By coupling the MD simulation to a colored thermostat, it introduces zero point energy into the system, altering the energy power spectrum and the heat capacity to account for their quantum nature. This is useful when modeling systems at temperatures lower than their classical limits or when temperatures ramp across the classical limits in a simulation. - -
-
off (default)
-
on
-
-
PKG_USER-QUIP - A pair_style quip command which wraps the QUIP libAtoms library, which - includes a variety of interatomic potentials, including Gaussian Approximation - Potential (GAP) models developed by the Cambridge University group. - -
-
off (default)
-
on
-
-
PKG_USER-QMMM - A fix qmmm command which allows LAMMPS to be used in a QM/MM simulation, - currently only in combination with the Quantum ESPRESSO package. - -
-
off (default)
-
on
-
-
PKG_USER-REAXC - A pair style which implements the ReaxFF potential in C/C++ (in contrast to - the REAX package and its Fortran library). ReaxFF is universal reactive force - field. See the src/USER-REAXC/README file for more info on differences between - the two packages. Also two fixes for monitoring molecules as bonds are created - and destroyed. - -
-
off (default)
-
on
-
-
PKG_USER-SCAFACOS - A KSpace style which wraps the ScaFaCoS Coulomb solver library to compute long-range Coulombic interactions. - -
-
off (default)
-
on
-
-
PKG_USER-SDPD - A pair style for smoothed dissipative particle dynamics (SDPD), which is an - extension of smoothed particle hydrodynamics (SPH) to mesoscale where thermal - fluctuations are important (see the USER-SPH package). Also two fixes for - moving and rigid body integration of SPH/SDPD particles (particles of - atom_style meso). -
-
off (default)
-
on
-
-
PKG_USER-SMD - An atom style, fixes, computes, and several pair styles which implements - smoothed Mach dynamics (SMD) for solids, which is a model related to smoothed - particle hydrodynamics (SPH) for liquids (see the USER-SPH package). - -
-
off (default)
-
on
-
-
PKG_USER-SMTBQ - A pair style which implements a Second Moment Tight Binding model with QEq - charge equilibration (SMTBQ) potential for the description of ionocovalent - bonds in oxides. - -
-
off (default)
-
on
-
-
PKG_USER-SPH - An atom style, fixes, computes, and several pair styles which implements - smoothed particle hydrodynamics (SPH) for liquids. See the related USER-SMD - package package for smooth Mach dynamics (SMD) for solids. - -
-
off (default)
-
on
-
-
PKG_USER-TALLY - Several compute styles that can be called when pairwise interactions are - calculated to tally information (forces, heat flux, energy, stress, etc) about - individual interactions. - -
-
off (default)
-
on
-
-
PKG_USER-UEF - A fix style for the integration of the equations of motion under extensional - flow with proper boundary conditions, as well as several supporting compute - styles and an output option. - -
-
off (default)
-
on
-
-
PKG_USER-VTK - A dump vtk command which outputs snapshot info in the VTK format, enabling - visualization by Paraview or other visualization packages. - -
-
off (default)
-
on
-
-
PKG_USER-YAFF - Some potentials that are also implemented in the Yet Another Force Field (YAFF) code. - The expressions and their use are discussed in the following papers: - - -
-
off (default)
-
on
-
-
- -## Package-Specific Configuration Options - -### KSPACE Package - - - - - - - - - - - - - - - - - - - - - - - - - - -
OptionDescriptionValues
FFT -

FFT library for KSPACE package

-

If either MKL or FFTW is selected cmake will try to locate - these libraries automatically. To control which one should be used please see - the options below for each FFT library. Otherwise it will default to KISS - FFT.

-
-
-
FFTW3
-
FFTW2
-
MKL
-
KISS (default)
-
-
FFT_SINGLEUse single-precision floating-point in FFT -
-
off (default = double precision)
-
on
-
-
FFT_PACKOptimization for FFT -
-
array (default)
-
pointer
-
memcpy
-
-
- -### FFTW3 - - - - - - - - - - - - - - - - - - - - - -
OptionDescriptionValues
FFTW3_INCLUDE_DIRSpath to FFTW3 include files -
FFTW3_LIBRARIESlist of paths to FFTW3 libraries -
- -### MKL - - - - - - - - - - - - - - - - - - - - - -
OptionDescriptionValues
MKL_INCLUDE_DIRSpath to MKL include files -
MKL_LIBRARIESlist of paths to MKL libraries -
- -### BLAS - -See [FindBLAS documentation](https://cmake.org/cmake/help/latest/module/FindBLAS.html) - -### LAPACK - -See [FindLAPACK documentation](https://cmake.org/cmake/help/latest/module/FindLAPACK.html) - -### PYTHON Package - -See [FindPYTHON documentation](https://cmake.org/cmake/help/latest/module/FindPython.html) - -### USER-INTEL Package - - - - - - - - - - - - - - - - - - - - - -
OptionDescriptionValues
INTEL_ARCHTarget architecture for USER-INTEL package -
-
cpu (default)
-
knl
-
-
INTEL_LRT_MODEHow to support Long-range thread mode in Verlet integration -
-
threads (default, if pthreads available)
-
none (default, if pthreads not available)
-
c++11
-
-
- -### GPU Package -The GPU package builds a support library which can either use OpenCL or CUDA as -target API. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
OptionDescriptionValues
GPU_APIAPI used by GPU package -
-
opencl (default)
-
cuda
-
-
GPU_PRECPrecision size used by GPU package kernels -
-
mixed (default)
-
single
-
double
-
-
OCL_TUNE (OpenCL only)Tuning target for OpenCL driver code -
-
generic (default)
-
intel (Intel CPU)
-
phi (Intel Xeon Phi)
-
fermi (NVIDIA)
-
kepler (NVIDIA)
-
cypress (AMD)
-
-
GPU_ARCH (CUDA only)CUDA SM architecture targeted by GPU package -
-
sm_20 (Fermi)
-
sm_30 (Kepler) (default)
-
sm_50 (Maxwell)
-
sm_60 (Pascal)
-
sm_70 (Volta)
-
sm_75 (Turing)
-
-
CUDPP_OPT (CUDA only)Enable CUDA Performance Primitives Optimizations -
-
on (default)
-
off
-
-
CUDA_MPS_SUPPORT (CUDA only)Enable tweaks for running with Nvidia CUDA Multi-process services daemon -
-
on
-
off (default)
-
-
BIN2C (CUDA only)Path to bin2c executable, will automatically pick up the first one in your $PATH.(automatic)
- -### KIM Package - -Requires installation of the KIM library with API v2 - -If `DOWNLOAD_KIM` is set, the KIM library will be downloaded and built inside -the CMake build directory. If the KIM library is already on your system (in a -location CMake cannot find it), set the `PKG_CONFIG_PATH` environment variable -so that `libkim-api` can be found. - - - - - - - - - - - - - - - - -
OptionDescriptionValues
DOWNLOAD_KIMDownload KIM API v2 and compile it as part of the build. -
-
off (default)
-
on
-
-
- -### MESSAGE Package - -This package can optionally include support for messaging via sockets, using the open-source [ZeroMQ library](http://zeromq.org/), which must be installed on your system. - - - - - - - - - - - - - - - - - - - - - - - - - - -
OptionDescriptionValues
MESSAGE_ZMQBuild with ZeroMQ support -
-
off (default)
-
on
-
-
ZMQ_LIBRARY - ZMQ library file (only needed if at custom location) - -
ZMG_INCLUDE_DIR - Provide include directory of existing ZMQ installation (only needed if at custom location) - -
- -### MSCG Package - -Requires installation of the MSCG library - - - - - - - - - - - - - - - - - - - - - - - - - - -
OptionDescriptionValues
DOWNLOAD_MSCGDownload MSCG and compile it as part of the build -
-
off (default)
-
on
-
-
MSCG_LIBRARY - MSCG library file (only needed if at custom location) - -
MSCG_INCLUDE_DIR - Provide include directory of existing MSCG installation (only needed if at custom location) - -
- -### VORONOI Package - -Requires installation of the Voro++ library - - - - - - - - - - - - - - - - - - - - - - - - - - -
OptionDescriptionValues
DOWNLOAD_VORODownload Voro++ and compile it as part of the build -
-
off (default)
-
on
-
-
VORO_LIBRARY - Voro++ library file (only needed if at custom location) - -
VORO_INCLUDE_DIR - Provide include directory of existing Voro++ installation (only needed if at custom location) - -
- -### USER-COLVARS Package - -Requires a C++11 compiler to compile with the Lepton library included. - - - - - - - - - - - - - - - -
OptionDescriptionValues
COLVARS_LEPTONEnable the use of the Lepton library inside the Colvars library. - -
-
on (default)
-
off
-
-
- -### USER-LATTE Package - -Requires installation of the LATTE library - - - - - - - - - - - - - - - - - - - - - -
OptionDescriptionValues
DOWNLOAD_LATTEDownload LATTE and compile it as part of the build -
-
off (default)
-
on
-
-
LATTE_LIBRARY - LATTE library file (only needed if at custom location) - -
- -### USER-PLUMED Package - -Requires installation of the PLUMED library - - - - - - - - - - - - - - - - - - - - - -
OptionDescriptionValues
DOWNLOAD_PLUMEDDownload PLUMED and compile it as part of the build -
-
off (default)
-
on
-
-
PLUMED_MODE - Determines the linkage mode for the PLUMED library. - -
-
static (default)
-
shared
-
runtime
-
-
- -### USER-LATTE Package - -Requires installation of the LATTE library - - - - - - - - - - - - - - - - - - - - - -
OptionDescriptionValues
DOWNLOAD_LATTEDownload LATTE and compile it as part of the build -
-
off (default)
-
on
-
-
LATTE_LIBRARY - LATTE library file (only needed if at custom location) - -
- -### USER-SMD Package - -Requires installation of the Eigen3 library - - - - - - - - - - - - - - - - - - - - - -
OptionDescriptionValues
DOWNLOAD_EIGEN3Download Eigen3 and compile it as part of the build -
-
off (default)
-
on
-
-
EIGEN3_INCLUDE_DIR - Provide include directory of existing Eigen3 installation (only needed if at custom location) - -
- - -### USER-SCAFACOS Package - -To build with this package, you must download and build the [ScaFaCoS Coulomb solver library](http://www.scafacos.de/) - - - - - - - - - - - - - - - - - - - - - - - - - - -
OptionDescriptionValues
DOWNLOAD_SCAFACOSDownload SCAFACOS and compile it as part of the build -
-
off (default)
-
on
-
-
SCAFACOS_LIBRARY - SCAFACOS library file (only needed if at custom location) - -
SCAFACOS_INCLUDE_DIR - SCAFACOS include directory (only needed if at custom location) - -
- -## Optional Features - -### zlib support - - - - - - - - - - - - - - - - - - - - - -
OptionDescriptionValues
ZLIB_INCLUDE_DIR -
ZLIB_LIBRARIES -
- -### JPEG support - - - - - - - - - - - - - - - - - - - - - - - - - - -
OptionDescriptionValues
WITH_JPEGEnables/Disable JPEG support in LAMMPS -
-
yes (default, if found)
-
no
-
-
JPEG_INCLUDE_DIR -
JPEG_LIBRARIES -
- -### PNG support -(requires zlib support) - - - - - - - - - - - - - - - - - - - - - - - - - - -
OptionDescriptionValues
WITH_PNGEnables/Disable PNG support in LAMMPS -
-
yes (default, if found)
-
no
-
-
PNG_INCLUDE_DIR -
PNG_LIBRARIES -
- -### GZIP support - -requires `gzip` to be in your `PATH` - - - - - - - - - - - - - - - - - - - - - -
OptionDescriptionValues
WITH_GZIPEnables/Disable GZIP support in LAMMPS -
-
yes (default, if found)
-
no
-
-
GZIP_EXECUTABLEPath to gzip executable, will automatically pick up the first one in your $PATH.(automatic)
- -### FFMPEG support - -requires `ffmpeg` to be in your `PATH` - - - - - - - - - - - - - - - - - - - - - -
OptionDescriptionValues
WITH_FFMPEGEnables/Disable FFMPEG support in LAMMPS -
-
yes (default, if found)
-
no
-
-
FFMPEG_EXECUTABLEPath to ffmpeg executable, will automatically pick up the first one in your $PATH.(automatic)
- - -## Compilers - -By default, `cmake` will use your environment C/C++/Fortran compilers for a -build. It uses the `CC`, `CXX` and `FC` environment variables to detect which -compilers should be used. However, these values will be cached after the first -run of `cmake`. Subsequent runs of `cmake` will ignore changes in these -environment variables. To ensure the correct values are used you avoid the -cache by setting the `CMAKE_C_COMPILER`, `CMAKE_CXX_COMPILER`, -`CMAKE_Fortran_COMPILER` options directly. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
OptionDescriptionDefault
CMAKE_C_COMPILERC Compiler which should be used by CMakevalue of `CC` environment variable at first `cmake` run
CMAKE_CXX_COMPILERC++ compiler which should be used by CMake - value of `CXX` environment variable at first `cmake` run -
CMAKE_Fortran_COMPILERC++ compiler which should be used by CMake - value of `FC` environment variable at first `cmake` run -
CXX_COMPILER_LAUNCHERCMake will run this tool and pass the compiler and its arguments to the tool. Some example tools are distcc and ccache. - (empty) -
- -### Building with GNU Compilers - -```bash -cmake -D CMAKE_C_COMPILER=gcc -D CMAKE_CXX_COMPILER=g++ -D CMAKE_Fortran_COMPILER=gfortran ../cmake -``` - -### Building with Intel Compilers - -```bash -cmake -D CMAKE_C_COMPILER=icc -D CMAKE_CXX_COMPILER=icpc -D CMAKE_Fortran_COMPILER=ifort ../cmake -``` - - -### Building with LLVM/Clang Compilers - -```bash -cmake -D CMAKE_C_COMPILER=clang -D CMAKE_CXX_COMPILER=clang++ -D CMAKE_Fortran_COMPILER=flang ../cmake -``` - -## LAMMPS Developer Options - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
OptionDescriptionValues
ENABLE_TESTINGControl wheather to add tests via CTest -
-
off (default)
-
on
-
-
LAMMPS_TESTING_SOURCE_DIRCustom location of lammps-testing repository (optional). If not specified it will download it via Git -
LAMMPS_TESTING_GIT_TAGIf lammps-testing repository is cloned, this is the tag/commit that will be checked out -
-
master (default)
-
-
ENABLE_COVERAGEEnables code coverage support via gcov and adds a gcovr build target to generate a coverage report. -
-
off (default)
-
on
-
-
ENABLE_SANITIZE_ADDRESSEnables Address Sanitizer support when compiling using GCC or Clang for detecting memory leaks in binaries while running them. See https://clang.llvm.org/docs/AddressSanitizer.html -
-
off (default)
-
on
-
-
ENABLE_SANITIZE_UNDEFINEDEnables Undefined Behavior Sanitizer support when compiling using GCC or Clang for detecting code that is running into undefined behavior of the language. See https://clang.llvm.org/docs/UndefinedBehaviorSanitizer.html -
-
off (default)
-
on
-
-
ENABLE_SANITIZE_THREADEnables Thread Sanitizer support when compiling using GCC or Clang for detecting data races in binaries while running them. See https://clang.llvm.org/docs/ThreadSanitizer.html -
-
off (default)
-
on
-
-
diff --git a/cmake/pkgconfig/liblammps.pc.in b/cmake/pkgconfig/liblammps.pc.in index a8710ca224c55e413a1ea9a3b8feee2c9e0c3a18..ca2c6191b7846dc298021b60ba2b95518b3859e2 100644 --- a/cmake/pkgconfig/liblammps.pc.in +++ b/cmake/pkgconfig/liblammps.pc.in @@ -18,12 +18,6 @@ # myapp_CFLAGS = $(LAMMPS_CFLAGS) # myapp_LDADD = $(LAMMPS_LIBS) -# Use this in CMake: -# CMakeLists.txt: -# find_package(PkgConfig) -# pkg_check_modules(LAMMPS IMPORTED_TARGET lammps) -# target_link_libraries( PkgConfig::LAMMPS) - prefix=@CMAKE_INSTALL_PREFIX@ libdir=@CMAKE_INSTALL_FULL_LIBDIR@ includedir=@CMAKE_INSTALL_FULL_INCLUDEDIR@ @@ -31,8 +25,8 @@ includedir=@CMAKE_INSTALL_FULL_INCLUDEDIR@ Name: liblammps@LAMMPS_MACHINE@ Description: Large-scale Atomic/Molecular Massively Parallel Simulator Library URL: http://lammps.sandia.gov -Version: @LAMMPS_VERSION@ +Version: @PROJECT_VERSION@ Requires: -Libs: -L${libdir} -llammps@LAMMPS_LIB_SUFFIX@ +Libs: -L${libdir} -llammps@LAMMPS_MACHINE@ Libs.private: -lm Cflags: -I${includedir} @LAMMPS_API_DEFINES@ diff --git a/cmake/presets/clang.cmake b/cmake/presets/clang.cmake index e2b1e02cc9a385d362711dc00c7f2c6d5df8a44f..bfc355669d4405b06f7eabfafa3fd24d5a86197e 100644 --- a/cmake/presets/clang.cmake +++ b/cmake/presets/clang.cmake @@ -2,7 +2,7 @@ set(CMAKE_CXX_COMPILER "clang++" CACHE STRING "" FORCE) set(CMAKE_C_COMPILER "clang" CACHE STRING "" FORCE) -set(CMAKE_CXX_FLAGS "-Wall -Wextra -g -O2 -DNDEBG" CACHE STRING "" FORCE) +set(CMAKE_CXX_FLAGS "-Wall -Wextra -g -O2 -DNDEBUG" CACHE STRING "" FORCE) set(MPI_CXX "clang++" CACHE STRING "" FORCE) set(MPI_CXX_COMPILER "mpicxx" CACHE STRING "" FORCE) unset(HAVE_OMP_H_INCLUDE CACHE) diff --git a/cmake/presets/hip.cmake b/cmake/presets/hip.cmake new file mode 100644 index 0000000000000000000000000000000000000000..047c8e8eb0350a239e98ceb7f22b24a4a8495817 --- /dev/null +++ b/cmake/presets/hip.cmake @@ -0,0 +1,12 @@ +# preset that will enable hipcc plus gcc with support for MPI and OpenMP (on Linux boxes) + +set(CMAKE_CXX_COMPILER "hipcc" CACHE STRING "" FORCE) +set(CMAKE_C_COMPILER "gcc" CACHE STRING "" FORCE) +set(CMAKE_CXX_FLAGS "-Wall -Wextra -g -O2 -DNDEBUG" CACHE STRING "" FORCE) +unset(HAVE_OMP_H_INCLUDE CACHE) + +set(OpenMP_CXX "hipcc" CACHE STRING "" FORCE) +set(OpenMP_CXX_FLAGS "-fopenmp" CACHE STRING "" FORCE) +set(OpenMP_CXX_LIB_NAMES "omp" CACHE STRING "" FORCE) +set(OpenMP_omp_LIBRARY "libomp.so" CACHE PATH "" FORCE) + diff --git a/cmake/presets/intel.cmake b/cmake/presets/intel.cmake index 869bf7bca236fa0ad76a8bb7f25eed13a2a86a71..099d744ad34f887fe146aa377105162f591394f7 100644 --- a/cmake/presets/intel.cmake +++ b/cmake/presets/intel.cmake @@ -2,7 +2,6 @@ set(CMAKE_CXX_COMPILER "icpc" CACHE STRING "" FORCE) set(CMAKE_C_COMPILER "icc" CACHE STRING "" FORCE) -set(CMAKE_CXX_FLAGS "-O3 -DNDEBG" CACHE STRING "" FORCE) set(MPI_CXX "icpc" CACHE STRING "" FORCE) set(MPI_CXX_COMPILER "mpicxx" CACHE STRING "" FORCE) unset(HAVE_OMP_H_INCLUDE CACHE) diff --git a/cmake/presets/kokkos-cuda.cmake b/cmake/presets/kokkos-cuda.cmake new file mode 100644 index 0000000000000000000000000000000000000000..36d099479d4af80a02a7f845651aa7618ff690c0 --- /dev/null +++ b/cmake/presets/kokkos-cuda.cmake @@ -0,0 +1,11 @@ +# preset that enables KOKKOS and selects CUDA compilation with OpenMP +# enabled as well. This preselects CC 5.0 as default GPU arch, since +# that is compatible with all higher CC, but not the default CC 3.5 +set(PKG_KOKKOS ON CACHE BOOL "" FORCE) +set(Kokkos_ENABLE_SERIAL ON CACHE BOOL "" FORCE) +set(Kokkos_ENABLE_OPENMP ON CACHE BOOL "" FORCE) +set(Kokkos_ENABLE_CUDA ON CACHE BOOL "" FORCE) +set(Kokkos_ARCH_MAXWELL50 on CACHE BOOL "" FORCE) +set(BUILD_OMP ON CACHE BOOL "" FORCE) +get_filename_component(NVCC_WRAPPER_CMD ${CMAKE_CURRENT_SOURCE_DIR}/../lib/kokkos/bin/nvcc_wrapper ABSOLUTE) +set(CMAKE_CXX_COMPILER ${NVCC_WRAPPER_CMD} CACHE FILEPATH "" FORCE) diff --git a/cmake/presets/kokkos-openmp.cmake b/cmake/presets/kokkos-openmp.cmake new file mode 100644 index 0000000000000000000000000000000000000000..27d09f62cfc454fb031a1bac4c7fe48202bbf903 --- /dev/null +++ b/cmake/presets/kokkos-openmp.cmake @@ -0,0 +1,6 @@ +# preset that enables KOKKOS and selects OpenMP (only) compilation +set(PKG_KOKKOS ON CACHE BOOL "" FORCE) +set(Kokkos_ENABLE_SERIAL ON CACHE BOOL "" FORCE) +set(Kokkos_ENABLE_OPENMP ON CACHE BOOL "" FORCE) +set(Kokkos_ENABLE_CUDA OFF CACHE BOOL "" FORCE) +set(BUILD_OMP ON CACHE BOOL "" FORCE) diff --git a/cmake/presets/kokkos-serial.cmake b/cmake/presets/kokkos-serial.cmake new file mode 100644 index 0000000000000000000000000000000000000000..0208d2ee3a408f4e08313d33076ea27751266bbc --- /dev/null +++ b/cmake/presets/kokkos-serial.cmake @@ -0,0 +1,5 @@ +# preset that enables KOKKOS and selects serial compilation only +set(PKG_KOKKOS ON CACHE BOOL "" FORCE) +set(Kokkos_ENABLE_SERIAL ON CACHE BOOL "" FORCE) +set(Kokkos_ENABLE_OPENMP OFF CACHE BOOL "" FORCE) +set(Kokkos_ENABLE_CUDA OFF CACHE BOOL "" FORCE) diff --git a/cmake/presets/mingw-cross.cmake b/cmake/presets/mingw-cross.cmake index a733142455a37929df4a4fec985453f3da22cb42..61c4bbc45b428b191daf484e81d7e8dc63c708be 100644 --- a/cmake/presets/mingw-cross.cmake +++ b/cmake/presets/mingw-cross.cmake @@ -23,6 +23,7 @@ set(DOWNLOAD_VORO ON CACHE BOOL "" FORCE) set(DOWNLOAD_EIGEN3 ON CACHE BOOL "" FORCE) set(LAMMPS_MEMALIGN "0" CACHE STRING "" FORCE) set(CMAKE_TUNE_FLAGS "-Wno-missing-include-dirs" CACHE STRING "" FORCE) -set(CMAKE_EXE_LINKER_FLAGS "--enable-stdcall-fixup" CACHE STRING "" FORCE) +set(CMAKE_EXE_LINKER_FLAGS "-Wl,--enable-stdcall-fixup" CACHE STRING "" FORCE) +set(CMAKE_SHARED_LINKER_FLAGS "-Wl,--enable-stdcall-fixup" CACHE STRING "" FORCE) set(BUILD_TOOLS ON CACHE BOOL "" FORCE) set(CMAKE_INSTALL_PREFIX "${CMAKE_CURRENT_BINARY_DIR}/lammps-installer") diff --git a/cmake/presets/most.cmake b/cmake/presets/most.cmake index 2f5b517526b280f7bf059cd17069d375259f27c1..aa5b60d146abf88b94faf9b435c2fd21008208de 100644 --- a/cmake/presets/most.cmake +++ b/cmake/presets/most.cmake @@ -5,10 +5,10 @@ set(ALL_PACKAGES ASPHERE BODY CLASS2 COLLOID COMPRESS CORESHELL DIPOLE GRANULAR KSPACE MANYBODY MC MISC MOLECULE OPT PERI POEMS PYTHON QEQ REPLICA RIGID SHOCK SNAP SPIN SRD VORONOI - USER-CGDNA USER-CGSDK USER-COLVARS USER-DIFFRACTION - USER-DPD USER-DRUDE USER-FEP USER-MEAMC USER-MESODPD + USER-BOCS USER-CGDNA USER-CGSDK USER-COLVARS USER-DIFFRACTION + USER-DPD USER-DRUDE USER-EFF USER-FEP USER-MEAMC USER-MESODPD USER-MISC USER-MOFFF USER-OMP USER-PHONON USER-REACTION - USER-REAXC USER-SPH USER-SMD USER-UEF USER-YAFF) + USER-REAXC USER-SDPD USER-SPH USER-SMD USER-UEF USER-YAFF) foreach(PKG ${ALL_PACKAGES}) set(PKG_${PKG} ON CACHE BOOL "" FORCE) diff --git a/doc/Makefile b/doc/Makefile index ff56226e83efa176ee4e173b64b4ac8d22fad843..c1f299a2f7f19957e040d69648d2ac9d42f4719d 100644 --- a/doc/Makefile +++ b/doc/Makefile @@ -12,6 +12,7 @@ PYTHON = $(shell which python3) VIRTUALENV = virtualenv HAS_PYTHON3 = NO HAS_VIRTUALENV = NO +HAS_PDFLATEX = NO ifeq ($(shell which python3 >/dev/null 2>&1; echo $$?), 0) HAS_PYTHON3 = YES @@ -27,6 +28,11 @@ VIRTUALENV = virtualenv HAS_VIRTUALENV = YES endif +ifeq ($(shell which pdflatex >/dev/null 2>&1; echo $$?), 0) +HAS_PDFLATEX = YES +endif + + SPHINXEXTRA = -j $(shell $(PYTHON) -c 'import multiprocessing;print(multiprocessing.cpu_count())') .PHONY: help clean-all clean clean-spelling epub mobi rst html pdf spelling anchor_check style_check @@ -51,7 +57,7 @@ help: # ------------------------------------------ clean-all: clean - rm -rf $(BUILDDIR)/docenv $(BUILDDIR)/doctrees $(BUILDDIR)/mathjax + rm -rf $(BUILDDIR)/docenv $(BUILDDIR)/doctrees $(BUILDDIR)/mathjax Manual.pdf Developer.pdf clean: clean-spelling rm -rf html epub latex @@ -77,7 +83,7 @@ html: $(ANCHORCHECK) $(MATHJAX) @rm -rf html/JPG @cp -r src/PDF html/PDF @mkdir -p html/JPG - @cp `grep -A2 '\.\. .*image::' src/*.rst | grep ':target:' | sed -e 's,.*:target: JPG/,src/JPG/,' | sort | uniq` html/JPG/ + @cp `grep -A2 '\.\. .*\(image\|figure\)::' src/*.rst | grep ':target:' | sed -e 's,.*:target: JPG/,src/JPG/,' | sort | uniq` html/JPG/ @rm -rf html/PDF/.[sg]* @mkdir -p html/_static/mathjax @cp -r $(MATHJAX)/es5 html/_static/mathjax/ @@ -86,8 +92,7 @@ html: $(ANCHORCHECK) $(MATHJAX) spelling: $(VENV) utils/sphinx-config/false_positives.txt @(\ . $(VENV)/bin/activate ;\ - pip install sphinxcontrib-spelling ;\ - cp utils/sphinx-config/false_positives.txt $(RSTDIR)/ ;\ + cp utils/sphinx-config/false_positives.txt $(RSTDIR)/ ; env PYTHONWARNINGS= \ sphinx-build -b spelling -c utils/sphinx-config -d $(BUILDDIR)/doctrees $(RSTDIR) spelling ;\ deactivate ;\ ) @@ -113,6 +118,7 @@ mobi: epub @echo "Conversion finished. The MOBI manual file is created." pdf: $(ANCHORCHECK) + @if [ "$(HAS_PDFLATEX)" == "NO" ] ; then echo "PDFLaTeX was not found! Please check README.md for further instructions" 1>&2; exit 1; fi @(\ cd src/Developer; \ pdflatex developer; \ @@ -187,7 +193,10 @@ $(VENV): @( \ $(VIRTUALENV) -p $(PYTHON) $(VENV); \ . $(VENV)/bin/activate; \ + pip install --upgrade pip; \ pip install Sphinx; \ + pip install sphinxcontrib-spelling ;\ + pip install breathe; \ deactivate;\ ) diff --git a/doc/README b/doc/README index 1416584eed4abbf9334370e5e6e326e377f0ea6a..cbc0c425dc8c61894779e3b653697299ce7df8af 100644 --- a/doc/README +++ b/doc/README @@ -93,12 +93,18 @@ support for PDFLaTeX. Also the following LaTeX packages need to be installed (e.g. from texlive): - amsmath - babel +- capt-of - cmap - fncychap +- framed - geometry - hyperref - hypcap +- needspace - times +- tabulary +- upquote +- wrapfig ---------------- Installing prerequisites for epub build diff --git a/doc/include-file-conventions.md b/doc/include-file-conventions.md index 132f2ec4eb899a8ba045428c49a96dc05c7c5142..1b8e79d71e5730611160b1562b3d5d4424fc723b 100644 --- a/doc/include-file-conventions.md +++ b/doc/include-file-conventions.md @@ -49,22 +49,15 @@ include files provided with LAMMPS are included with double quotes For headers declaring functions of the C-library, the corresponding C++ versions should be included (examples: `#include ` or -`#include `). However, these includes are limited to those defined -in the C++98 standard. Some files thus must use the older style until -the minimum C++ standard requirement of LAMMPS is lifted to C++11 or -even beyond (examples: `#include ` versus `#include ` -or `#include ` versus `#include `). +`#include ` instead of `#include ` or +`#include` ). ### C++ Standard Compliance -LAMMPS core files currently correspond to the C++98 standard. Files -requiring C++11 or later are only permitted in (optional) packages -and particularly packages that are not part of the list of commonly -used packages such as MOLECULE, KSPACE, MANYBODY, or RIGID. - -Also, LAMMPS uses the C-style stdio library for I/O instead of iostreams. -Since using both at the same time can cause problems, iostreams should -be avoided where possible. +LAMMPS core files use standard conforming C++ compatible with the +C++11 standard, unless explicitly noted. Also, LAMMPS uses the C-style +stdio library for I/O instead of iostreams. Since using both at the +same time can cause problems, iostreams should be avoided where possible. ### Lean Header Files diff --git a/doc/lammps.1 b/doc/lammps.1 index d2851603c6d9d823532529d1a5fed82debf126ba..d9af339e0a0573f80552afd097b3373f9f71c2df 100644 --- a/doc/lammps.1 +++ b/doc/lammps.1 @@ -1,4 +1,4 @@ -.TH LAMMPS "19 March 2020" "2020-03-19" +.TH LAMMPS "2 June 2020" "2020-06-02" .SH NAME .B LAMMPS \- Molecular Dynamics Simulator. diff --git a/doc/src/.gitignore b/doc/src/.gitignore index e0b9693457ca0dfc081cfc7da4d53a6fa6286b94..afe24cc10c7128a38123ac9eb6095acc3e239b30 100644 --- a/doc/src/.gitignore +++ b/doc/src/.gitignore @@ -1,3 +1 @@ -/Eqs -/JPG /false_positives.txt diff --git a/doc/src/Build.rst b/doc/src/Build.rst index c96fb0b5b9cb72502c2c7ca2fa7e6b748b2f7b7f..441af79009ad86069ee866aec82e001056fab0e2 100644 --- a/doc/src/Build.rst +++ b/doc/src/Build.rst @@ -1,12 +1,14 @@ Build LAMMPS ************ -LAMMPS can be built as an executable or library from source code via -either traditional makefiles (which may require manual editing) -for use with GNU make or gmake, or a build environment generated by CMake -(Unix Makefiles, Xcode, Visual Studio, KDevelop or more). As an -alternative you can download a package with pre-built executables -as described on the :doc:`Install ` doc page. +LAMMPS is built as a library and an executable from source code using +either traditional makefiles for use with GNU make (which may require +manual editing), or using a build environment generated by CMake (Unix +Makefiles, Ninja, Xcode, Visual Studio, KDevelop, CodeBlocks and more). + +As an alternative you can download a package with pre-built executables +or automated build trees as described on the :doc:`Install ` +doc page. .. toctree:: :maxdepth: 1 diff --git a/doc/src/Build_basics.rst b/doc/src/Build_basics.rst index 8ad48b0810b87147bce2ea8ecc0965fa3ccc46c5..335c1a51899836d3f818aebdb2f89c696111bfde 100644 --- a/doc/src/Build_basics.rst +++ b/doc/src/Build_basics.rst @@ -6,7 +6,8 @@ CMake and make: * :ref:`Serial vs parallel build ` * :ref:`Choice of compiler and compile/link options ` -* :ref:`Build LAMMPS as an executable or a library ` +* :ref:`Build the LAMMPS executable and library ` +* :ref:`Including and removing debug support ` * :ref:`Build the LAMMPS documentation ` * :ref:`Install LAMMPS after a build ` @@ -15,7 +16,7 @@ CMake and make: .. _serial: Serial vs parallel build -------------------------------------- +------------------------ LAMMPS is written to use the ubiquitous `MPI (Message Passing Interface) `_ library API @@ -28,8 +29,8 @@ MPI STUBS library. Independent of the distributed memory MPI parallelization, parts of LAMMPS are also written with support for shared memory parallelization -using the OpenMP threading standard. A more detailed discussion of that -is below. +using the `OpenMP `_ threading +standard. A more detailed discussion of that is below. **CMake build**\ : @@ -41,7 +42,7 @@ is below. # no default value The executable created by CMake (after running make) is named ``lmp`` unless -the LAMMPS_MACHINE option is set. When setting ``LAMMPS_MACHINE=name`` +the ``LAMMPS_MACHINE`` option is set. When setting ``LAMMPS_MACHINE=name`` the executable will be called ``lmp_name``. Using ``BUILD_MPI=no`` will enforce building a serial executable using the MPI STUBS library. @@ -55,18 +56,20 @@ The build with traditional makefiles has to be done inside the source folder ``s make serial # serial build, produces lmp_serial using Makefile/serial make mybox # uses Makefile.mybox to produce lmp_mybox -Any "make machine" command will look up the make settings from a file -Makefile.machine, create a folder Obj_machine with all objects and -generated files and an executable called ``lmp_machine``\ . The standard -parallel build with ``make mpi`` assumes a standard MPI installation with -MPI compiler wrappers where all necessary compiler and linker flags to -get access and link with the suitable MPI headers and libraries are set -by the wrapper programs. For other cases or the serial build, you have -to adjust the make file variables ``MPI_INC``, ``MPI_PATH``, ``MPI_LIB`` -as well as ``CC`` and ``LINK``\ . To enable OpenMP threading usually -a compiler specific flag needs to be added to the compile and link -commands. For the GNU compilers, this is ``-fopenmp``\ , which can be -added to the ``CC`` and ``LINK`` makefile variables. +Any ``make machine`` command will look up the make settings from a file +``Makefile.machine`` in the folder ``src/MAKE`` or one of its +sub-directories ``MINE``, ``MACHINES``, or ``OPTIONS``, create a folder +``Obj_machine`` with all objects and generated files and an executable +called ``lmp_machine``\ . The standard parallel build with ``make mpi`` +assumes a standard MPI installation with MPI compiler wrappers where all +necessary compiler and linker flags to get access and link with the +suitable MPI headers and libraries are set by the wrapper programs. For +other cases or the serial build, you have to adjust the make file +variables ``MPI_INC``, ``MPI_PATH``, ``MPI_LIB`` as well as ``CC`` and +``LINK``\ . To enable OpenMP threading usually a compiler specific flag +needs to be added to the compile and link commands. For the GNU +compilers, this is ``-fopenmp``\ , which can be added to the ``CC`` and +``LINK`` makefile variables. For the serial build the following make variables are set (see src/MAKE/Makefile.serial): @@ -80,18 +83,19 @@ For the serial build the following make variables are set (see src/MAKE/Makefile You also need to build the STUBS library for your platform before making LAMMPS itself. A ``make serial`` build does this for you automatically, -otherwise, type ``make mpi-stubs`` from the src directory, or ``make`` from -the src/STUBS dir. If the build fails, you will need to edit the -STUBS/Makefile for your platform. The stubs library does not provide -MPI/IO functions required by some LAMMPS packages, e.g. MPIIO or USER-LB, -and thus is not compatible with those packages. +otherwise, type ``make mpi-stubs`` from the src directory, or ``make`` +from the ``src/STUBS`` dir. If the build fails, you may need to edit +the ``STUBS/Makefile`` for your platform. The stubs library does not +provide MPI/IO functions required by some LAMMPS packages, +e.g. ``MPIIO`` or ``USER-LB``, and thus is not compatible with those +packages. .. note:: The file ``src/STUBS/mpi.c`` provides a CPU timer function called - MPI_Wtime() that calls gettimeofday() . If your operating system - does not support gettimeofday() , you will need to insert code to - call another timer. Note that the ANSI-standard function clock() + ``MPI_Wtime()`` that calls ``gettimeofday()``. If your operating system + does not support ``gettimeofday()``, you will need to insert code to + call another timer. Note that the ANSI-standard function ``clock()`` rolls over after an hour or so, and is therefore insufficient for timing long LAMMPS simulations. @@ -111,20 +115,22 @@ self-installed MPICH or OpenMPI, so you should study the provided documentation to find out how to build and link with it. The majority of OpenMP (threading) support in LAMMPS is provided by the -USER-OMP package; see the :doc:`Speed omp ` doc page for -details. The USER-INTEL package also includes OpenMP threading (it is -compatible with USER-OMP) and adds vectorization support when compiled -with compatible compilers, in particular the Intel compilers on top of -OpenMP. Also, the KOKKOS package can be compiled to include OpenMP -threading. +``USER-OMP`` package; see the :doc:`Speed omp ` doc page for +details. The ``USER-INTEL`` package also includes OpenMP threading (it +is compatible with ``USER-OMP`` and will usually fall back on styles +from that package, if a ``USER-INTEL`` does not exist) and adds +vectorization support when compiled with compatible compilers, in +particular the Intel compilers on top of OpenMP. Also, the ``KOKKOS`` +package can be compiled to include OpenMP threading. In addition, there are a few commands in LAMMPS that have native OpenMP -support included as well. These are commands in the MPIIO, SNAP, -USER-DIFFRACTION, and USER-DPD packages. In addition some packages -support OpenMP threading indirectly through the libraries they interface -to: e.g. LATTE and USER-COLVARS. See the :doc:`Packages details -` doc page for more info on these packages and the doc -pages for their respective commands for OpenMP threading info. +support included as well. These are commands in the ``MPIIO``, +``SNAP``, ``USER-DIFFRACTION``, and ``USER-DPD`` packages. In addition +some packages support OpenMP threading indirectly through the libraries +they interface to: e.g. ``LATTE``, ``KSPACE``, and ``USER-COLVARS``. +See the :doc:`Packages details ` doc page for more +info on these packages and the doc pages for their respective commands +for OpenMP threading info. For CMake, if you use ``BUILD_OMP=yes``, you can use these packages and turn on their native OpenMP support and turn on their native OpenMP @@ -142,14 +148,15 @@ please refer to its documentation. **OpenMP Compiler compatibility info**\ : Some compilers do not fully support the ``default(none)`` directive -and others (e.g. GCC version 9 and beyond) may implement OpenMP 4.0 -semantics, which are incompatible with the OpenMP 3.1 semantics used -in LAMMPS (for maximal compatibility with compiler versions in use). -In those case, all ``default(none)`` directives (which aid in detecting -incorrect and unwanted sharing) can be replaced with ``default(shared)`` -while dropping all ``shared()`` directives. The script -'src/USER-OMP/hack_openmp_for_pgi_gcc9.sh' can be used to automate -this conversion. +and others (e.g. GCC version 9 and beyond, Clang version 10 and later) +may implement strict OpenMP 4.0 and later semantics, which are incompatible +with the OpenMP 3.1 semantics used in LAMMPS for maximal compatibility +with compiler versions in use. If compilation with OpenMP enabled fails +because of your compiler requiring strict OpenMP 4.0 semantic, you can +change the behavior by adding ``-D LAMMPS_OMP_COMPAT=4`` to the ``LMP_INC`` +variable in your makefile, or add it to the command line while configuring +with CMake. CMake will detect the suitable setting for the GNU, Clang, +and Intel compilers. ---------- @@ -158,15 +165,18 @@ this conversion. Choice of compiler and compile/link options --------------------------------------------------------- -The choice of compiler and compiler flags can be important for +The choice of compiler and compiler flags can be important for maximum performance. Vendor provided compilers for a specific hardware can produce faster code than open-source compilers like the GNU compilers. -On x86 hardware most popular compilers are quite similar in performance -of C/C++ code at high optimization levels. When using the USER-INTEL -package, there is a distinct advantage in using the `Intel C++ compiler -`_ due to much improved vectorization through SSE and AVX -instructions on compatible hardware as the source code includes changes -and compiler directives to enable high degrees of vectorization. +On the most common x86 hardware most popular C++ compilers are quite +similar in performance of C/C++ code at high optimization levels. When +using the ``USER-INTEL`` package, there is a distinct advantage in using +the `Intel C++ compiler `_ due to much improved vectorization +through SSE and AVX instructions on compatible hardware as the source +code includes changes and Intel compiler specific directives to enable +high degrees of vectorization. This may change over time as equivalent +vectorization directives are included into OpenMP standard revisions and +other compilers adopt them. .. _intel: https://software.intel.com/en-us/intel-compilers @@ -177,17 +187,20 @@ LAMMPS. **CMake build**\ : -By default CMake will use a compiler it finds and it will add -optimization flags appropriate to that compiler and any -:doc:`accelerator packages ` you have included in the -build. - -You can tell CMake to look for a specific compiler with these variable -settings. Likewise you can specify the corresponding ``CMAKE_*_FLAGS`` -variables if you want to experiment with alternate optimization flags. -You should specify all 3 compilers, so that the small number of LAMMPS -source files written in C or Fortran are built with a compiler consistent -with the one used for all the C++ files: +By default CMake will use a compiler it finds according to internal +preferences and it will add optimization flags appropriate to that +compiler and any :doc:`accelerator packages ` you have +included in the build. + +You can tell CMake to look for a specific compiler with setting CMake +variable during configuration. For a few common choices, there are also +presets in the ``cmake/presets`` folder. For convenience, there is a +``CMAKE_TUNE_FLAGS`` variable that can be set to apply global compiler +options. More on that below, but you can also specify the corresponding +``CMAKE_*_FLAGS`` variables individually if you want to experiment with +alternate optimization flags. You should specify all 3 compilers, so +that the (few) LAMMPS source files written in C or Fortran are built +with a compiler consistent with the one used for the C++ files: .. code-block:: bash @@ -210,16 +223,17 @@ A few example command lines are: # Building with LLVM/Clang Compilers: cmake ../cmake -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++ -DCMAKE_Fortran_COMPILER=flang -For compiling with the Clang/LLVM compilers a special CMake preset is -included that can be loaded with `-C ../cmake/presets/clang.cmake`. +For compiling with the Clang/LLVM compilers a CMake preset is provided that +can be loaded with `-C ../cmake/presets/clang.cmake`. Similarly, +`-C ../cmake/presets/intel.cmake` should switch the -In addition you can set ``CMAKE_TUNE_FLAGS`` to specifically add compiler -flags to tune for optimal performance on given hosts. By default these are -initialized to some compiler specific flags, where known, to optimize the -LAMMPS executable with optimizations and instructions available on the host -where LAMMPS is compiled. For example, for Intel compilers this would be -``-xHost`` and for GNU compilers this would be ``-march=native``. To turn -these flags off, set ``-D CMAKE_TUNE_FLAGS=``. +In addition you can set ``CMAKE_TUNE_FLAGS`` to specifically add +compiler flags to tune for optimal performance on given hosts. By +default these are initialized to some compiler specific flags, to +optimize the LAMMPS executable with optimizations and instructions +available on the host where LAMMPS is compiled. For example, for Intel +compilers this would be ``-xHost`` and for GNU compilers this would be +``-march=native``. To turn these flags off, do ``-D CMAKE_TUNE_FLAGS=``. .. note:: @@ -235,11 +249,11 @@ these flags off, set ``-D CMAKE_TUNE_FLAGS=``. The "compiler/linker settings" section of a Makefile.machine lists compiler and linker settings for your C++ compiler, including optimization flags. For a parallel build it is recommended to use -mpicxx or mpiCC, since these compiler wrappers will include a variety of -settings appropriate for your MPI installation and thus avoiding the -guesswork of finding the right flags. +``mpicxx`` or ``mpiCC``, since these compiler wrappers will include a +variety of settings appropriate for your MPI installation and thus +avoiding the guesswork of finding the right flags. -Parallel build (see src/MAKE/Makefile.mpi): +Parallel build (see ``src/MAKE/Makefile.mpi``): .. code-block:: bash @@ -248,7 +262,7 @@ Parallel build (see src/MAKE/Makefile.mpi): LINK = mpicxx LINKFLAGS = -g -O -Serial build (see src/MAKE/Makefile.serial): +Serial build with GNU gcc (see ``src/MAKE/Makefile.serial``): .. code-block:: make @@ -257,17 +271,35 @@ Serial build (see src/MAKE/Makefile.serial): LINK = g++ LINKFLAGS = -g -O + .. note:: - If you build LAMMPS with any :doc:`accelerator packages ` - included, there may be specific optimization flags that are either - required or recommended to enable required features and to achieve - optimal performance. You need to include these in the CCFLAGS and - LINKFLAGS settings above. For details, see the individual package - doc pages listed on the :doc:`Speed packages ` doc - page. Or examine these files in the src/MAKE/OPTIONS directory. - They correspond to each of the 5 accelerator packages and their - hardware variants: + If compilation stops with a message like the following: + + .. code-block:: + + g++ -g -O3 -DLAMMPS_GZIP -DLAMMPS_MEMALIGN=64 -I../STUBS -c ../main.cpp + In file included from ../pointers.h:24:0, + from ../input.h:17, + from ../main.cpp:16: + ../lmptype.h:34:2: error: #error LAMMPS requires a C++11 (or later) compliant compiler. Enable C++11 compatibility or upgrade the compiler. + + then you have either an unsupported (old) compiler or you have to + turn on C++11 mode. The latter applies to GCC 4.8.x shipped with + RHEL 7.x and CentOS 7.x. For those compilers, you need to add the + ``-std=c++11`` flag. Otherwise, you would have to install a newer + compiler that supports C++11; either as a binary package or through + compiling from source. + +If you build LAMMPS with any :doc:`accelerator packages +` included, there may be specific optimization flags +that are either required or recommended to enable required features and +to achieve optimal performance. You need to include these in the +CCFLAGS and LINKFLAGS settings above. For details, see the individual +package doc pages listed on the :doc:`Speed packages ` +doc page. Or examine these files in the src/MAKE/OPTIONS directory. +They correspond to each of the 5 accelerator packages and their hardware +variants: .. code-block:: bash @@ -284,69 +316,74 @@ Serial build (see src/MAKE/Makefile.serial): .. _exe: -Build LAMMPS as an executable or a library ----------------------------------------------------- +Build the LAMMPS executable and library +--------------------------------------- -LAMMPS can be built as either an executable or as a static or shared -library. The LAMMPS library can be called from another application or -a scripting language. See the :doc:`Howto couple ` doc +LAMMPS is always built as a library of C++ classes plus an executable. +The executable is a simple ``main()`` function that sets up MPI and then +creates a LAMMPS class instance from the LAMMPS library, which +will then process commands provided via a file or from the console +input. The LAMMPS library can also be called from another application +or a scripting language. See the :doc:`Howto couple ` doc page for more info on coupling LAMMPS to other codes. See the :doc:`Python ` doc page for more info on wrapping and running LAMMPS from Python via its library interface. **CMake build**\ : -For CMake builds, you can select through setting CMake variables which -files the compilation produces during the configuration step. If none -are set, defaults are applied. +For CMake builds, you can select through setting CMake variables between +building a shared or a static LAMMPS library and what kind of suffix is +added to them (in case you want to concurrently install multiple variants +of binaries with different settings). If none are set, defaults are applied. .. code-block:: bash - -D BUILD_EXE=value # yes (default) or no - -D BUILD_LIB=value # yes or no (default) -D BUILD_SHARED_LIBS=value # yes or no (default) - -D LAMMPS_LIB_SUFFIX=name # name = mpi, serial, mybox, titan, laptop, etc + -D LAMMPS_MACHINE=name # name = mpi, serial, mybox, titan, laptop, etc # no default value -Setting ``BUILD_EXE=no`` will not produce an executable. Setting -``BUILD_LIB=yes`` will produce a static library named ``liblammps.a``\ . -Setting both ``BUILD_LIB=yes`` and ``BUILD_SHARED_LIBS=yes`` will produce a -shared library named ``liblammps.so`` instead. If ``LAMMPS_LIB_SUFFIX=name`` -is set in addition, the name of the generated libraries will be changed to -either ``liblammps_name.a`` or ``liblammps_name.so``\ , respectively. +The compilation will always produce a LAMMPS library and an executable +linked to it. By default this will be a static library named +``liblammps.a`` and an executable named ``lmp`` Setting +``BUILD_SHARED_LIBS=yes`` will instead produce a shared library called +``liblammps.so`` (or ``liblammps.dylib`` or ``liblammps.dll`` depending +on the platform) If ``LAMMPS_MACHINE=name`` is set in addition, the name +of the generated libraries will be changed to either +``liblammps_name.a`` or ``liblammps_name.so``\ , respectively and the +executable will be called ``lmp_name``. **Traditional make**\ : With the traditional makefile based build process, the choice of the generated executable or library depends on the "mode" setting. -Several options are available and ``mode=exe`` is the default. +Several options are available and ``mode=static`` is the default. .. code-block:: bash make machine # build LAMMPS executable lmp_machine - make mode=exe machine # same as "make machine" - make mode=lib machine # build LAMMPS static lib liblammps_machine.a - make mode=shlib machine # build LAMMPS shared lib liblammps_machine.so - make mode=shexe machine # same as "mode=exe" but uses objects from "mode=shlib" - -The two "exe" builds will generate and executable ``lmp_machine``\ , -while the two library builds will create a file ``liblammps_machine.a`` -or ``liblammps_machine.so``\ . They will also create generic soft links, -named ``liblammps.a`` and ``liblammps.so``\ , which point to the specific + make mode=static machine # same as "make machine" + make mode=shared machine # build LAMMPS shared lib liblammps_machine.so instead + +The "static" build will generate a static library called +``liblammps_machine.a`` and an executable named ``lmp_machine``\ , while +the "shared" build will generate a shared library +``liblammps_machine.so`` instead and ``lmp_machine`` will be linked to +it. The build step will also create generic soft links, named +``liblammps.a`` and ``liblammps.so``\ , which point to the specific ``liblammps_machine.a/so`` files. **CMake and make info**\ : -Note that for a shared library to be usable by a calling program, all -the auxiliary libraries it depends on must also exist as shared -libraries. This will be the case for libraries included with LAMMPS, -such as the dummy MPI library in src/STUBS or any package libraries in -the lib/packages directory, since they are always built in a shared -library compatible way using the ``-fPIC`` switch. However, if a library -like MPI or FFTW does not exist as a shared library, the shared library -build may generate an error. This means you will need to install a -shared library version of the auxiliary library. The build instructions -for the library should tell you how to do this. +Note that for creating a shared library, all the libraries it depends on +must be compiled to be compatible with shared libraries. This should be +the case for libraries included with LAMMPS, such as the dummy MPI +library in ``src/STUBS`` or any package libraries in the ``lib`` +directory, since they are always built in a shared library compatible +way using the ``-fPIC`` compiler switch. However, if an auxiliary +library (like MPI or FFTW) does not exist as a compatible format, the +shared library linking step may generate an error. This means you will +need to install a compatible version of the auxiliary library. The +build instructions for that library should tell you how to do this. As an example, here is how to build and install the `MPICH library `_, a popular open-source version of MPI, as a shared library @@ -360,10 +397,12 @@ in the default /usr/local/lib location: make make install -You may need to use ``sudo make install`` in place of the last line if you -do not have write privileges for ``/usr/local/lib``. The end result should -be the file ``/usr/local/lib/libmpich.so``. On many Linux installations the -folder ``${HOME}/.local`` is an alternative to using ``/usr/local`` and does +You may need to use ``sudo make install`` in place of the last line if +you do not have write privileges for ``/usr/local/lib`` or use the +``--prefix`` configuration option to select an installation folder, +where you do have write access. The end result should be the file +``/usr/local/lib/libmpich.so``. On many Linux installations the folder +``${HOME}/.local`` is an alternative to using ``/usr/local`` and does not require superuser or sudo access. In that case the configuration step becomes: @@ -371,12 +410,41 @@ step becomes: ./configure --enable-shared --prefix=${HOME}/.local -Avoiding using "sudo" for custom software installation (i.e. from source +Avoiding to use "sudo" for custom software installation (i.e. from source and not through a package manager tool provided by the OS) is generally recommended to ensure the integrity of the system software installation. ---------- +.. _debug: + +Excluding or removing debug support +----------------------------------- + +By default the compilation settings will include the *-g* flag which +instructs the compiler to include debug information (e.g. which line of +source code a particular instruction correspond to). This can be +extremely useful in case LAMMPS crashes and can help to provide crucial +information in :doc:`tracking down the origin of a crash ` +and help the LAMMPS developers fix bugs in the source code. However, +this increases the storage requirements for object files, libraries, and +the executable 3-5 fold. + +If this is a concern, you can change the compilation settings or remove +the debug information from the LAMMPS executable: + +- **Traditional make**: edit your ``Makefile.`` to remove the + *-g* flag from the ``CCFLAGS`` and ``LINKFLAGS`` definitions +- **CMake**: use ``-D CMAKE_BUILD_TYPE=Release`` or explicitly reset + the applicable compiler flags (best done using the text mode or + graphical user interface). +- **Remove debug info**: If you are only concerned about the executable + being too large, you can use the ``strip`` tool (e.g. ``strip + lmp_serial``) to remove the debug information from the executable file. + Do not strip libraries or object files, as that will render them unusable. + +---------- + .. _doc: Build the LAMMPS documentation @@ -427,7 +495,8 @@ It is also possible to create the HTML version of the manual within the :doc:`CMake build directory `. The reason for this option is to include the installation of the HTML manual pages into the "install" step when installing LAMMPS after the CMake build via -``make install``. +``make install``. The documentation build is included in the default +build target, but can also be requested independently with ``make doc``. .. code-block:: bash diff --git a/doc/src/Build_cmake.rst b/doc/src/Build_cmake.rst index 7a60ffa43754e3cdef7a79180f282cd51e3d5f69..52a240176f61d9c538d77570b0ce97b3220eb04d 100644 --- a/doc/src/Build_cmake.rst +++ b/doc/src/Build_cmake.rst @@ -1,205 +1,158 @@ Build LAMMPS with CMake ======================= -This page is a short summary of how to use CMake to build LAMMPS. -Details on CMake variables that enable specific LAMMPS build options -are given on the pages linked to from the :doc:`Build ` doc page. - -Richard Berger (Temple U) has also written a `more comprehensive guide `_ -for how to use CMake to build LAMMPS. If you are new to CMake it is a -good place to start. - ----------- - -Building LAMMPS with CMake is a two-step process. First you use CMake -to create a build environment in a new directory. On Linux systems, -this will be by default based on Unix-style makefiles for use with make. -Then you use the *make* command to build LAMMPS, which uses the created -Makefile(s). Example: - -.. code-block:: bash - - cd lammps # change to the LAMMPS distribution directory - mkdir build; cd build # create a new directory (folder) for build - cmake [options ...] ../cmake # configuration with (command-line) cmake - cmake --build . # compilation (or type "make") - -The ``cmake`` command will detect available features, enable selected -packages and options, and will generate the build environment. By default -this build environment will be created for "Unix Makefiles" on most -platforms and particularly on Linux. However, alternate build tools -(e.g. Ninja) and project files for Integrated Development Environments -(IDEs) like Eclipse, CodeBlocks, or Kate can be generated, too. This is -selected via the ``-G`` command line flag. Further details about features -and settings for CMake are in the `CMake online documentation `_ - -.. _cmake_doc: https://cmake.org/documentation/ - -For the rest of the documentation -we will assume that the build environment is generated for "Unix Makefiles" -and thus the ``make`` command will be used to compile and link LAMMPS as -indicated above, producing (by default) an executable called ``lmp`` and -a library called ``liblammps.a`` in the ``build`` folder. - -If your machine has multiple CPU cores (most do these days), you can -compile sources in parallel with a command like ``make -j N`` (with N -being the maximum number of concurrently executed tasks). Also -installation of the ``ccache`` (= Compiler Cache) software may speed -up repeated compilation, e.g. during code development, significantly. - -After compilation, you may optionally install the LAMMPS executable into -your system with: - -.. code-block:: bash - - make install # optional, copy LAMMPS executable & library elsewhere - -This will install the lammps executable and library (if requested), some -tools (if configured) and additional files like library API headers, -manpages, potential and force field files. The location of the installation -tree is set by the CMake variable "CMAKE_INSTALL_PREFIX" which defaults -to ${HOME}/.local - ----------- - -.. _cmake_build: - -There are 3 variants of the CMake command itself: a command-line version -(``cmake`` or ``cmake3``), a text mode UI version (``ccmake`` or ``ccmake3``), -and a graphical GUI version (``cmake-gui``). You can use any of them -interchangeably to configure and create the LAMMPS build environment. -On Linux all the versions produce a Makefile as their output by default. -See more details on each below. - -You can specify a variety of options with any of the 3 versions, which -affect how the build is performed and what is included in the LAMMPS -executable. Links to pages explaining all the options are listed on -the :doc:`Build ` doc page. - -You must perform the CMake build system generation and compilation in -a new directory you create. It can be anywhere on your local machine. -In these Build pages we assume that you are building in a directory -called ``lammps/build``. You can perform separate builds independently -with different options, so long as you perform each of them in a -separate directory you create. All the auxiliary files created by one -build process (executable, object files, log files, etc) are stored in -this directory or sub-directories within it that CMake creates. +This page describes how to use `CMake `_ in general +to build LAMMPS. Details for specific compile time settings and options +to enable and configure add-on packages are discussed with those +packages. Links to those pages on the :doc:`Build overview ` +page. + +The following text assumes some familiarity with CMake and focuses on +using the command line tool ``cmake`` and what settings are supported +for building LAMMPS. A more detailed tutorial on how to use ``cmake`` +itself, the text mode or graphical user interface, change the generated +output files for different build tools and development environments is +on a :doc:`separate page `. .. note:: - To perform a CMake build, no packages can be installed or a build - been previously attempted in the LAMMPS src directory by using ``make`` - commands to :doc:`perform a conventional LAMMPS build `. - CMake detects if this is the case and generates an error, telling you - to type ``make no-all purge`` in the src directory to un-install all - packages. The purge removes all the \*.h files auto-generated by - make. - -You must have CMake version 3.10 or later on your system to build -LAMMPS. Installation instructions for CMake are below. + LAMMPS currently requires that CMake version 3.10 or later is available; + version 3.12 or later is preferred. + +.. warning:: + + You must not mix the :doc:`traditional make based ` + LAMMPS build procedure with using CMake. Thus no packages may be + installed or a build been previously attempted in the LAMMPS source + directory by using ``make ``. CMake will detect if this is + the case and generate an error. To remove conflicting files from the + ``src`` you can use the command ``make no-all purge`` which will + un-install all packages and delete all auto-generated files. + + +Advantages of using CMake +^^^^^^^^^^^^^^^^^^^^^^^^^ + +CMake is an alternative to compiling LAMMPS in the traditional way +through :doc:`(manually customized) makefiles ` and a recent +addition to LAMMPS thanks to the efforts of Christoph Junghans (LANL) +and Richard Berger (Temple U). Using CMake has multiple advantages that +are specifically helpful for people with limited experience in compiling +software or for people that want to modify or extend LAMMPS. + +- CMake can detect available hardware, tools, features, and libraries + and adapt the LAMMPS default build configuration accordingly. +- CMake can generate files for different build tools and integrated + development environments (IDE). +- CMake supports customization of settings with a text mode or graphical + user interface. No knowledge of file formats or and complex command + line syntax required. +- All enabled components are compiled in a single build operation. +- Automated dependency tracking for all files and configuration options. +- Support for true out-of-source compilation. Multiple configurations + and settings with different choices of LAMMPS packages, settings, or + compilers can be configured and built concurrently from the same + source tree. +- Simplified packaging of LAMMPS for Linux distributions, environment + modules, or automated build tools like `Homebrew `_. +- Integration of automated regression testing (the LAMMPS side for that + is still under development). -After the initial build, if you edit LAMMPS source files, or add your -own new files to the source directory, you can just re-type make from -your build directory and it will re-compile only the files that have -changed. If you want to change CMake options you can run cmake (or -ccmake or cmake-gui) again from the same build directory and alter -various options; see details below. Or you can remove the entire build -folder, recreate the directory and start over. +.. _cmake_build: ----------- +Getting started +^^^^^^^^^^^^^^^ -**Command-line version of CMake**\ : +Building LAMMPS with CMake is a two-step process. First you use CMake +to generate a build environment in a new directory. For that purpose +you can use either the command-line utility ``cmake`` (or ``cmake3``), +the text-mode UI utility ``ccmake`` (or ``ccmake3``) or the graphical +utility ``cmake-gui``, or use them interchangeably. The second step is +then the compilation and linking of all objects, libraries, and +executables. Here is a minimal example using the command line version of +CMake to build LAMMPS with no add-on packages enabled and no +customization: .. code-block:: bash - cmake [options ...] /path/to/lammps/cmake # build from any dir - cmake [options ...] ../cmake # build from lammps/build - cmake3 [options ...] ../cmake # build from lammps/build - -The cmake command takes one required argument, which is the LAMMPS -cmake directory which contains the CMakeLists.txt file. + cd lammps # change to the LAMMPS distribution directory + mkdir build; cd build # create and use a build directory + cmake ../cmake # configuration reading CMake scripts from ../cmake + cmake --build . # compilation (or type "make") + +This will create and change into a folder called ``build``, then run the +configuration step to generate build files for the default build command +and then launch that build command to compile LAMMPS. During the +configuration step CMake will try to detect whether support for MPI, +OpenMP, FFTW, gzip, JPEG, PNG, and ffmpeg are available and enable the +corresponding configuration settings. The progress of this +configuration can be followed on the screen and a summary of selected +options and settings will be printed at the end. The ``cmake --build +.`` command will launch the compilation, which, if successful, will +ultimately produce a library ``liblammps.a`` and the LAMMPS executable +``lmp`` inside the ``build`` folder. + +Compilation can take a long time, since LAMMPS is a large project with +many features. If your machine has multiple CPU cores (most do these +days), you can speed this up by compiling sources in parallel with +``make -j N`` (with N being the maximum number of concurrently executed +tasks). Also installation of the `ccache `_ (= +Compiler Cache) software may speed up repeated compilation even more, +e.g. during code development. + +After the initial build, whenever you edit LAMMPS source files, enable +or disable packages, change compiler flags or build options, you must +re-compile and relink the LAMMPS executable with ``cmake --build .`` (or +``make``). If the compilation fails for some reason, try running +``cmake .`` and then compile again. The included dependency tracking +should make certain that only the necessary subset of files are +re-compiled. You can also delete compiled objects, libraries and +executables with ``cmake --build . --target clean`` (or ``make clean``). -The argument can be prefixed or followed by various CMake -command-line options. Several useful ones are: +After compilation, you may optionally install the LAMMPS executable into +your system with: .. code-block:: bash - -D CMAKE_INSTALL_PREFIX=path # where to install LAMMPS executable/lib if desired - -D CMAKE_BUILD_TYPE=type # type = RelWithDebInfo (default), Release, MinSizeRel, or Debug - -G output # style of output CMake generates (e.g. "Unix Makefiles" or "Ninja") - -D CMAKE_MAKE_PROGRAM=builder # name of the builder executable (e.g. when using "gmake" instead of "make") - -DVARIABLE=value # setting for a LAMMPS feature to enable - -D VARIABLE=value # ditto, but cannot come after CMakeLists.txt dir - -C path/to/preset/file # load some CMake settings before configuring - -All the LAMMPS-specific -D variables that a LAMMPS build supports are -described on the pages linked to from the :doc:`Build ` doc page. -All of these variable names are upper-case and their values are -lower-case, e.g. -D LAMMPS_SIZES=smallbig. For boolean values, any of -these forms can be used: yes/no, on/off, 1/0. - -On Unix/Linux machines, CMake generates a Makefile by default to -perform the LAMMPS build. Alternate forms of build info can be -generated via the -G switch, e.g. Visual Studio on a Windows machine, -Xcode on MacOS, or KDevelop on Linux. Type ``cmake --help`` to see the -"Generator" styles of output your system supports. - -.. note:: + make install # optional, copy compiled files into installation location - When CMake runs, it prints configuration info to the screen. - You should review this to verify all the features you requested were - enabled, including packages. You can also see what compilers and - compile options will be used for the build. Any errors in CMake - variable syntax will also be flagged, e.g. mis-typed variable names or - variable values. +This will install the LAMMPS executable and library, some tools (if +configured) and additional files like LAMMPS API headers, manpages, +potential and force field files. The location of the installation tree +defaults to ``${HOME}/.local``. -CMake creates a CMakeCache.txt file when it runs. This stores all the -settings, so that when running CMake again you can use the current -folder '.' instead of the path to the LAMMPS cmake folder as the -required argument to the CMake command. Either way the existing -settings will be inherited unless the CMakeCache.txt file is removed. +.. _cmake_options: -If you later want to change a setting you can rerun cmake in the build -directory with different setting. Please note that some automatically -detected variables will not change their value when you rerun cmake. -In these cases it is usually better to first remove all the -files/directories in the build directory, or start with a fresh build -directory. +Configuration and build options +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ----------- +The CMake commands have one mandatory argument: a folder containing a +file called ``CMakeLists.txt`` (for LAMMPS it is located in the +``cmake`` folder) or a build folder containing a file called +``CMakeCache.txt``, which is generated at the end of the CMake +configuration step. The cache file contains all current CMake settings. -**Curses version (terminal-style menu) of CMake**\ : - -.. code-block:: bash - - ccmake ../cmake - -You initiate the configuration and build environment generation steps -separately. For the first you have to type **c**\ , for the second you -have to type **g**\ . You may need to type **c** multiple times, and may be -required to edit some of the entries of CMake configuration variables -in between. Please see the `ccmake manual `_ for -more information. - ----------- - -**GUI version of CMake**\ : - -.. code-block:: bash +To modify settings, enable or disable features, you need to set *variables* +with either the *-D* command line flag (``-D VARIABLE1_NAME=value``) or +change them in the text mode of graphical user interface. The *-D* flag +can be used several times in one command. - cmake-gui ../cmake +For your convenience we provide :ref:`CMake presets ` +that combine multiple settings to enable optional LAMMPS packages or use +a different compiler tool chain. Those are loaded with the *-C* flag +(``-C ../cmake/presets/minimal.cmake``). This step would only be needed +once, as the settings from the preset files are stored in the +``CMakeCache.txt`` file. It is also possible to customize the build +by adding one or more *-D* flags to the CMake command line. -You initiate the configuration and build environment generation steps -separately. For the first you have to click on the **Configure** button, -for the second you have to click on the **Generate** button. You may -need to click on **Configure** multiple times, and may be required to -edit some of the entries of CMake configuration variables in between. -Please see the `cmake-gui manual `_ -for more information. +Generating files for alternate build tools (e.g. Ninja) and project files +for IDEs like Eclipse, CodeBlocks, or Kate can be selected using the *-G* +command line flag. A list of available generator settings for your +specific CMake version is given when running ``cmake --help``. ----------- -**Installing CMake** +Installing CMake +^^^^^^^^^^^^^^^^ Check if your machine already has CMake installed: @@ -216,11 +169,12 @@ software packages, do this: module list # is a module for cmake already loaded? module avail # is a module for cmake available? - module load cmake3 # load cmake module with appropriate name - -Most Linux distributions offer pre-compiled cmake packages through -their package management system. If you do not have CMake or a new -enough version, you can download the latest version at -`https://cmake.org/download/ `_. -Instructions on how to install it on various platforms can be found -`on this page `_. + module load cmake # load cmake module with appropriate name + +Most Linux distributions offer pre-compiled cmake packages through their +package management system. If you do not have CMake or a recent enough +version (Note: for CentOS 7.x you need to enable the EPEL repository), +you can download the latest version from `https://cmake.org/download/ +`_. Instructions on how to install it on +various platforms can be found `on this page +`_. diff --git a/doc/src/Build_development.rst b/doc/src/Build_development.rst index 21e99d69be16bfd9efd82a597b9d73de91e7706b..94b78a4a9cdc1db141041c618ad1adf576f31f5a 100644 --- a/doc/src/Build_development.rst +++ b/doc/src/Build_development.rst @@ -1,15 +1,15 @@ Development build options (CMake only) ====================================== -The CMake build of LAMMPS has a few extra options which are useful during -development, testing or debugging. +The CMake build procedure of LAMMPS offers a few extra options which are +useful during development, testing or debugging. ---------- .. _compilation: Verify compilation flags ------------------------------------------- +------------------------ Sometimes it is necessary to verify the complete sequence of compilation flags generated by the CMake build. To enable a more verbose output during @@ -30,7 +30,7 @@ Another way of doing this without reconfiguration is calling make with variable .. _sanitizer: Address, Undefined Behavior, and Thread Sanitizer Support -------------------------------------------------------------------------- +--------------------------------------------------------- Compilers such as GCC and Clang support generating instrumented binaries which use different sanitizer libraries to detect problems in code @@ -41,10 +41,11 @@ during run-time. They can detect issues like: - `data races `_ Please note that this kind of instrumentation usually comes with a small -performance hit (much less than using tools like `Valgrind `_). -The to enable these features additional compiler flags need to be added -to the compilation and linking stages. This is most easily done through -setting the ``CMAKE_TUNE_FLAGS`` variable during configuration. Examples: +performance hit (much less than using tools like `Valgrind +`_). The to enable these features additional +compiler flags need to be added to the compilation and linking stages. +This is most easily done through setting the ``CMAKE_TUNE_FLAGS`` +variable during configuration. Examples: .. code-block:: bash @@ -52,56 +53,256 @@ setting the ``CMAKE_TUNE_FLAGS`` variable during configuration. Examples: -D CMAKE_TUNE_FLAGS=-fsanitize=undefined # enable undefined behavior sanitizer -D CMAKE_TUNE_FLAGS=-fsanitize=thread # enable thread sanitizer -.. _valgrind: https://valgrind.org - ---------- .. _testing: -Code Coverage and Testing ---------------------------------------- - -We do extensive regression testing of the LAMMPS code base on a continuous -basis. Some of the logic to do this has been added to the CMake build so -developers can run the tests directly on their workstation. +Code Coverage and Unit Testing +------------------------------ + +The LAMMPS code is subject to multiple levels of automated testing +during development: integration testing (i.e. whether the code compiles +on various platforms and with a variety of settings), unit testing +(i.e. whether certain individual parts of the code produce the expected +results for given inputs), run testing (whether selected complete input +decks run without crashing for multiple configurations), and regression +testing (i.e. whether selected input examples reproduce the same +results over a given number of steps and operations within a given +error margin). The status of this automated testing can be viewed on +`https://ci.lammps.org `_. + +The unit testing facility is integrated into the CMake build process +of the LAMMPS source code distribution itself. It can be enabled by +setting ``-D ENABLE_TESTING=on`` during the CMake configuration step. +It requires the `YAML `_ library and development +headers to compile and will download and compile a recent version of the +`Googletest `_ C++ test framework +for implementing the tests. + +After compilation is complete, the unit testing is started in the build +folder using the ``ctest`` command, which is part of the CMake software. +The output of this command will be looking something like this:: + + [...]$ ctest + Test project /home/akohlmey/compile/lammps/build-testing + Start 1: MolPairStyle:hybrid-overlay + 1/26 Test #1: MolPairStyle:hybrid-overlay ......... Passed 0.02 sec + Start 2: MolPairStyle:hybrid + 2/26 Test #2: MolPairStyle:hybrid ................. Passed 0.01 sec + Start 3: MolPairStyle:lj_class2 + [...] + Start 25: AngleStyle:harmonic + 25/26 Test #25: AngleStyle:harmonic ................. Passed 0.01 sec + Start 26: AngleStyle:zero + 26/26 Test #26: AngleStyle:zero ..................... Passed 0.01 sec + + 100% tests passed, 0 tests failed out of 26 + + Total Test time (real) = 0.27 sec + + +The ``ctest`` command has many options, the most important ones are: + +.. list-table:: + + * - Option + - Function + * - -V + - verbose output: display output of individual test runs + * - -j + - parallel run: run tests in parallel + * - -R + - run subset of tests matching the regular expression + * - -E + - exclude subset of tests matching the regular expression + * - -N + - dry-run: display list of tests without running them + +In its full implementation, the unit test framework will consist of multiple +kinds of tests implemented in different programming languages (C++, C, Python, +Fortran) and testing different aspects of the LAMMPS software and its features. +At the moment only tests for "force styles" are implemented. More on those +in the next section. .. note:: - this is incomplete and only represents a small subset of tests that we run + This unit test framework is new and still under development. + The coverage is only minimal and will be expanded over time. + Tests styles of the same kind of style (e.g. pair styles or + bond styles) are performed with the same executable using + different input files in YAML format. So to add a test for + another pair style can be done by copying the YAML file and + editing the style settings and then running the individual test + program with a flag to update the computed reference data. + Detailed documentation about how to add new test program and + the contents of the YAML files for existing test programs + will be provided in time as well. + +Unit tests for force styles +^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +A large part of LAMMPS are different "styles" for computing non-bonded +and bonded interactions selected through the :doc:`pair_style`, +:doc:`bond_style`, :doc:`angle_style`, :doc:`dihedral_style`, +:doc:`improper_style`, and :doc:`kspace_style`. Since these all share +common interfaces, it is possible to write generic test programs that +will call those common interfaces for small test systems with less than +100 atoms and compare the results with pre-recorded reference results. +A test run is then a a collection multiple individual test runs each +with many comparisons to reference results based on template input +files, individual command settings, relative error margins, and +reference data stored in a YAML format file with ``.yaml`` +suffix. Currently the programs ``pair_style``, ``bond_style``, and +``angle_style`` are implemented. They will compare forces, energies and +(global) stress for all atoms after a ``run 0`` calculation and after a +few steps of MD with :doc:`fix nve `, each in multiple variants +with different settings and also for multiple accelerated styles. If a +prerequisite style or package is missing, the individual tests are +skipped. All tests will be executed on a single MPI process, so using +the CMake option ``-D BUILD_MPI=off`` can significantly speed up testing, +since this will skip the MPI initialization for each test run. +Below is an example command and output: + +.. parsed-literal:: + + [tests]$ pair_style mol-pair-lj_cut.yaml + [==========] Running 6 tests from 1 test suite. + [----------] Global test environment set-up. + [----------] 6 tests from PairStyle + [ RUN ] PairStyle.plain + [ OK ] PairStyle.plain (24 ms) + [ RUN ] PairStyle.omp + [ OK ] PairStyle.omp (18 ms) + [ RUN ] PairStyle.intel + [ OK ] PairStyle.intel (6 ms) + [ RUN ] PairStyle.opt + [ SKIPPED ] PairStyle.opt (0 ms) + [ RUN ] PairStyle.single + [ OK ] PairStyle.single (7 ms) + [ RUN ] PairStyle.extract + [ OK ] PairStyle.extract (6 ms) + [----------] 6 tests from PairStyle (62 ms total) + + [----------] Global test environment tear-down + [==========] 6 tests from 1 test suite ran. (63 ms total) + [ PASSED ] 5 tests. + [ SKIPPED ] 1 test, listed below: + [ SKIPPED ] PairStyle.opt + +In this particular case, 5 out of 6 sets of tests were conducted, the +tests for the ``lj/cut/opt`` pair style was skipped, since the tests +executable did not include it. To learn what individual tests are performed, +you (currently) need to read the source code. You can use code coverage +recording (see next section) to confirm how well the tests cover the individual +source files. + +The force style test programs have a common set of options: + +.. list-table:: + + * - Option + - Function + * - -g + - regenerate reference data in new YAML file + * - -u + - update reference data in the original YAML file + * - -s + - print error statistics for each group of comparisons + * - -v + - verbose output: also print the executed LAMMPS commands + +To add a test for a style that is not yet covered, it is usually best +to copy a YAML file for a similar style to a new file, edit the details +of the style (how to call it, how to set its coefficients) and then +run test command with either the *-g* and the replace the initial +test file with the regenerated one or the *-u* option. The *-u* option +will destroy the original file, if the generation run does not complete, +so using *-g* is recommended unless the YAML file is fully tested +and working. + +.. admonition:: Recommendations and notes for YAML files + :class: note + + - The reference results should be recorded without any code + optimization or related compiler flags enabled. + - The ``epsilon`` parameter defines the relative precision with which + the reference results must be met. The test geometries often have + high and low energy parts and thus a significant impact from + floating-point math truncation errors is to be expected. Some + functional forms and potentials are more noisy than others, so this + parameter needs to be adjusted. Typically a value around 1.0e-13 + can be used, but it may need to be as large as 1.0e-8 in some + cases. + - The tests for pair styles from OPT, USER-OMP and USER-INTEL are + performed with automatically rescaled epsilon to account for + additional loss of precision from code optimizations and different + summation orders. + - When compiling with aggressive compiler optimization, some tests + are likely to fail. It is recommended to inspect the individual + tests in detail to decide whether the specific error for a specific + property is acceptable (it often is), or this may be an indication + of mis-compiled code (or undesired large of precision due to + reordering of operations). + +Collect and visualize code coverage metrics +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +You can also collect code coverage metrics while running LAMMPS or the +tests by enabling code coverage support during the CMake configuration: .. code-block:: bash - -D ENABLE_TESTING=value # enable simple run tests of LAMMPS, value = no (default) or yes - -D LAMMPS_TESTING_SOURCE_DIR=path # path to lammps-testing repository (option if in custom location) - -D LAMMPS_TESTING_GIT_TAG=value # version of lammps-testing repository that should be used, value = master (default) or custom git commit or tag + -D ENABLE_COVERAGE=on # enable coverage measurements (off by default) -If you enable testing in the CMake build it will create an additional target called "test". You can run them with: +This will instrument all object files to write information about which +lines of code were accessed during execution in files next to the +corresponding object files. These can be post-processed to visually +show the degree of coverage and which code paths are accessed and which +are not taken. When working on unit tests (see above), this can be +extremely helpful to determine which parts of the code are not executed +and thus what kind of tests are still missing. The coverage data is +cumulative, i.e. new data is added with each new run. -.. code-block:: bash +Enabling code coverage will also add the following build targets to +generate coverage reports after running the LAMMPS executable or the +unit tests: - make test +.. code-block:: bash -The test cases used come from the lammps-testing repository. They are -derivatives of the examples folder with some modifications to make the run -faster. + make gen_coverage_html # generate coverage report in HTML format + make gen_coverage_xml # generate coverage report in XML format + make clean_coverage_html # delete folder with HTML format coverage report + make reset_coverage # delete all collected coverage data and HTML output -You can also collect code coverage metrics while running the tests by enabling -coverage support during building. +These reports require `GCOVR `_ to be installed. The easiest way +to do this to install it via pip: .. code-block:: bash - -D ENABLE_COVERAGE=value # enable coverage measurements, value = no (default) or yes + pip install git+https://github.com/gcovr/gcovr.git -This will also add the following targets to generate coverage reports after running the LAMMPS executable: +After post-processing with ``gen_coverage_html`` the results are in +a folder ``coverage_html`` and can be viewed with a web browser. +The images below illustrate how the data is presented. -.. code-block:: bash +.. list-table:: - make test # run tests first! - make gen_coverage_html # generate coverage report in HTML format - make gen_coverage_xml # generate coverage report in XML format + * - .. figure:: JPG/coverage-overview-top.png + :target: JPG/coverage-overview-top.png -These reports require GCOVR to be installed. The easiest way to do this to install it via pip: + Top of the overview page -.. code-block:: bash + - .. figure:: JPG/coverage-overview-manybody.png + :target: JPG/coverage-overview-manybody.png - pip install git+https://github.com/gcovr/gcovr.git + Styles with good coverage + + - .. figure:: JPG/coverage-file-top.png + :target: JPG/coverage-file-top.png + + Top of individual source page + + - .. figure:: JPG/coverage-file-branches.png + :target: JPG/coverage-file-branches.png + + Source page with branches diff --git a/doc/src/Build_extras.rst b/doc/src/Build_extras.rst index 45c876d84a1bfe9642903798152122f6bd09f50b..3d8da39640a8c609d55417b93899ebb5dab130bc 100644 --- a/doc/src/Build_extras.rst +++ b/doc/src/Build_extras.rst @@ -87,27 +87,33 @@ GPU package --------------------- To build with this package, you must choose options for precision and -which GPU hardware to build for. +which GPU hardware to build for. The GPU package currently supports +three different types of backends: OpenCL, CUDA and HIP. **CMake build**\ : .. code-block:: bash - -D GPU_API=value # value = opencl (default) or cuda - -D GPU_PREC=value # precision setting - # value = double or mixed (default) or single - -D OCL_TUNE=value # hardware choice for GPU_API=opencl - # generic (default) or intel (Intel CPU) or fermi, kepler, cypress (NVIDIA) - -D GPU_ARCH=value # primary GPU hardware choice for GPU_API=cuda - # value = sm_XX, see below - # default is sm_30 - -D CUDPP_OPT=value # optimization setting for GPU_API=cuda - # enables CUDA Performance Primitives Optimizations - # value = yes (default) or no - -D CUDA_MPS_SUPPORT=value # enables some tweaks required to run with active nvidia-cuda-mps daemon - # value = yes or no (default) - -GPU_ARCH settings for different GPU hardware is as follows: + -D GPU_API=value # value = opencl (default) or cuda or hip + -D GPU_PREC=value # precision setting + # value = double or mixed (default) or single + -D OCL_TUNE=value # hardware choice for GPU_API=opencl + # generic (default) or intel (Intel CPU) or fermi, kepler, cypress (NVIDIA) + -D GPU_ARCH=value # primary GPU hardware choice for GPU_API=cuda + # value = sm_XX, see below + # default is sm_30 + -D HIP_ARCH=value # primary GPU hardware choice for GPU_API=hip + # value depends on selected HIP_PLATFORM + # default is 'gfx906' for HIP_PLATFORM=hcc and 'sm_30' for HIP_PLATFORM=nvcc + -D HIP_USE_DEVICE_SORT=value # enables GPU sorting + # value = yes (default) or no + -D CUDPP_OPT=value # optimization setting for GPU_API=cuda + # enables CUDA Performance Primitives Optimizations + # value = yes (default) or no + -D CUDA_MPS_SUPPORT=value # enables some tweaks required to run with active nvidia-cuda-mps daemon + # value = yes or no (default) + +:code:`GPU_ARCH` settings for different GPU hardware is as follows: * sm_12 or sm_13 for GT200 (supported by CUDA 3.2 until CUDA 6.5) * sm_20 or sm_21 for Fermi (supported by CUDA 3.2 until CUDA 7.5) @@ -126,6 +132,28 @@ Thus the GPU_ARCH setting is merely an optimization, to have code for the preferred GPU architecture directly included rather than having to wait for the JIT compiler of the CUDA driver to translate it. +If you are compiling with HIP, note that before running CMake you will have to +set appropriate environment variables. Some variables such as +:code:`HCC_AMDGPU_TARGET` or :code:`CUDA_PATH` are necessary for :code:`hipcc` +and the linker to work correctly. + +.. code:: bash + + # AMDGPU target + export HIP_PLATFORM=hcc + export HCC_AMDGPU_TARGET=gfx906 + cmake -D PKG_GPU=on -D GPU_API=HIP -D HIP_ARCH=gfx906 -D CMAKE_CXX_COMPILER=hipcc .. + make -j 4 + +.. code:: bash + + # CUDA target + # !!! DO NOT set CMAKE_CXX_COMPILER !!! + export HIP_PLATFORM=nvcc + export CUDA_PATH=/usr/local/cuda + cmake -D PKG_GPU=on -D GPU_API=HIP -D HIP_ARCH=sm_70 .. + make -j 4 + **Traditional make**\ : Before building LAMMPS, you must build the GPU library in ``lib/gpu``\ . @@ -279,95 +307,209 @@ using. For example: .. _kokkos: KOKKOS package ---------------------------- +-------------- -To build with this package, you must choose which hardware you want to -build for, either CPUs (multi-threading via OpenMP) or KNLs (OpenMP) -or GPUs (NVIDIA Cuda). - -For a CMake or make build, these are the possible choices for the -``KOKKOS_ARCH`` settings described below. Note that for CMake, these are -really Kokkos variables, not LAMMPS variables. Hence you must use -case-sensitive values, e.g. BDW, not bdw. - -* AMDAVX = AMD 64-bit x86 CPUs -* EPYC = AMD EPYC Zen class CPUs -* ARMv80 = ARMv8.0 Compatible CPU -* ARMv81 = ARMv8.1 Compatible CPU -* ARMv8-ThunderX = ARMv8 Cavium ThunderX CPU -* ARMv8-TX2 = ARMv8 Cavium ThunderX2 CPU -* WSM = Intel Westmere CPUs -* SNB = Intel Sandy/Ivy Bridge CPUs -* HSW = Intel Haswell CPUs -* BDW = Intel Broadwell Xeon E-class CPUs -* SKX = Intel Sky Lake Xeon E-class HPC CPUs (AVX512) -* KNC = Intel Knights Corner Xeon Phi -* KNL = Intel Knights Landing Xeon Phi -* BGQ = IBM Blue Gene/Q CPUs -* Power7 = IBM POWER8 CPUs -* Power8 = IBM POWER8 CPUs -* Power9 = IBM POWER9 CPUs -* Kepler = NVIDIA Kepler default (generation CC 3.5) -* Kepler30 = NVIDIA Kepler generation CC 3.0 -* Kepler32 = NVIDIA Kepler generation CC 3.2 -* Kepler35 = NVIDIA Kepler generation CC 3.5 -* Kepler37 = NVIDIA Kepler generation CC 3.7 -* Maxwell = NVIDIA Maxwell default (generation CC 5.0) -* Maxwell50 = NVIDIA Maxwell generation CC 5.0 -* Maxwell52 = NVIDIA Maxwell generation CC 5.2 -* Maxwell53 = NVIDIA Maxwell generation CC 5.3 -* Pascal60 = NVIDIA Pascal generation CC 6.0 -* Pascal61 = NVIDIA Pascal generation CC 6.1 -* Volta70 = NVIDIA Volta generation CC 7.0 -* Volta72 = NVIDIA Volta generation CC 7.2 -* Turing75 = NVIDIA Turing generation CC 7.5 +Using the KOKKOS package requires choosing several settings. You have +to select whether you want to compile with parallelization on the host +and whether you want to include offloading of calculations to a device +(e.g. a GPU). The default setting is to have no host parallelization +and no device offloading. In addition, you can select the hardware +architecture to select the instruction set. Since most hardware is +backward compatible, you may choose settings for an older architecture +to have an executable that will run on this and newer architectures. -**CMake build**\ : +.. note:: + If you run Kokkos on a different GPU architecture than what LAMMPS + was compiled with, there will be a delay during device initialization + while the just-in-time compiler is recompiling all GPU kernels for + the new hardware. This is, however, only supported for GPUs of the + **same** major hardware version and different minor hardware versions, + e.g. 5.0 and 5.2 but not 5.2 and 6.0. LAMMPS will abort with an + error message indicating a mismatch, if that happens. + +The settings discussed below have been tested with LAMMPS and are +confirmed to work. Kokkos is an active project with ongoing improvements +and projects working on including support for additional architectures. +More information on Kokkos can be found on the +`Kokkos GitHub project `_. + +Available Architecture settings +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +These are the possible choices for the Kokkos architecture ID. They must +be specified in uppercase. + +.. list-table:: + :header-rows: 0 + :widths: auto + + * - **Arch-ID** + - **HOST or GPU** + - **Description** + * - AMDAVX + - HOST + - AMD 64-bit x86 CPU (AVX 1) + * - EPYC + - HOST + - AMD EPYC Zen class CPU (AVX 2) + * - ARMV80 + - HOST + - ARMv8.0 Compatible CPU + * - ARMV81 + - HOST + - ARMv8.1 Compatible CPU + * - ARMV8_THUNDERX + - HOST + - ARMv8 Cavium ThunderX CPU + * - ARMV8_THUNDERX2 + - HOST + - ARMv8 Cavium ThunderX2 CPU + * - WSM + - HOST + - Intel Westmere CPU (SSE 4.2) + * - SNB + - HOST + - Intel Sandy/Ivy Bridge CPU (AVX 1) + * - HSW + - HOST + - Intel Haswell CPU (AVX 2) + * - BDW + - HOST + - Intel Broadwell Xeon E-class CPU (AVX 2 + transactional mem) + * - SKX + - HOST + - Intel Sky Lake Xeon E-class HPC CPU (AVX512 + transactional mem) + * - KNC + - HOST + - Intel Knights Corner Xeon Phi + * - KNL + - HOST + - Intel Knights Landing Xeon Phi + * - BGQ + - HOST + - IBM Blue Gene/Q CPU + * - POWER7 + - HOST + - IBM POWER7 CPU + * - POWER8 + - HOST + - IBM POWER8 CPU + * - POWER9 + - HOST + - IBM POWER9 CPU + * - KEPLER30 + - GPU + - NVIDIA Kepler generation CC 3.0 GPU + * - KEPLER32 + - GPU + - NVIDIA Kepler generation CC 3.2 GPU + * - KEPLER35 + - GPU + - NVIDIA Kepler generation CC 3.5 GPU + * - KEPLER37 + - GPU + - NVIDIA Kepler generation CC 3.7 GPU + * - MAXWELL50 + - GPU + - NVIDIA Maxwell generation CC 5.0 GPU + * - MAXWELL52 + - GPU + - NVIDIA Maxwell generation CC 5.2 GPU + * - MAXWELL53 + - GPU + - NVIDIA Maxwell generation CC 5.3 GPU + * - PASCAL60 + - GPU + - NVIDIA Pascal generation CC 6.0 GPU + * - PASCAL61 + - GPU + - NVIDIA Pascal generation CC 6.1 GPU + * - VOLTA70 + - GPU + - NVIDIA Volta generation CC 7.0 GPU + * - VOLTA72 + - GPU + - NVIDIA Volta generation CC 7.2 GPU + * - TURING75 + - GPU + - NVIDIA Turing generation CC 7.5 GPU + * - VEGA900 + - GPU + - AMD GPU MI25 GFX900 + * - VEGA906 + - GPU + - AMD GPU MI50/MI60 GFX906 + +Basic CMake build settings: +^^^^^^^^^^^^^^^^^^^^^^^^^^^ For multicore CPUs using OpenMP, set these 2 variables. .. code-block:: bash - -D KOKKOS_ARCH=archCPU # archCPU = CPU from list above - -D KOKKOS_ENABLE_OPENMP=yes + -D Kokkos_ARCH_HOSTARCH=yes # HOSTARCH = HOST from list above + -D Kokkos_ENABLE_OPENMP=yes + -D BUILD_OMP=yes + +Please note that enabling OpenMP for KOKKOS requires that OpenMP is +also :ref:`enabled for the rest of LAMMPS `. -For Intel KNLs using OpenMP, set these 2 variables: +For Intel KNLs using OpenMP, set these variables: .. code-block:: bash - -D KOKKOS_ARCH=KNL - -D KOKKOS_ENABLE_OPENMP=yes + -D Kokkos_ARCH_KNL=yes + -D Kokkos_ENABLE_OPENMP=yes -For NVIDIA GPUs using CUDA, set these 4 variables: +For NVIDIA GPUs using CUDA, set these variables: .. code-block:: bash - -D KOKKOS_ARCH="archCPU;archGPU" # archCPU = CPU from list above that is hosting the GPU - # archGPU = GPU from list above - -D KOKKOS_ENABLE_CUDA=yes - -D KOKKOS_ENABLE_OPENMP=yes - -D CMAKE_CXX_COMPILER=wrapper # wrapper = full path to Cuda nvcc wrapper + -D Kokkos_ARCH_HOSTARCH=yes # HOSTARCH = HOST from list above + -D Kokkos_ARCH_GPUARCH=yes # GPUARCH = GPU from list above + -D Kokkos_ENABLE_CUDA=yes + -D Kokkos_ENABLE_OPENMP=yes + -D CMAKE_CXX_COMPILER=wrapper # wrapper = full path to Cuda nvcc wrapper -The wrapper value is the Cuda nvcc compiler wrapper provided in the -Kokkos library: ``lib/kokkos/bin/nvcc_wrapper``\ . The setting should -include the full path name to the wrapper, e.g. +This will also enable executing FFTs on the GPU, either via the internal +KISSFFT library, or - by preference - with the cuFFT library bundled +with the CUDA toolkit, depending on whether CMake can identify its +location. The *wrapper* value for ``CMAKE_CXX_COMPILER`` variable is +the path to the CUDA nvcc compiler wrapper provided in the Kokkos +library: ``lib/kokkos/bin/nvcc_wrapper``\ . The setting should include +the full path name to the wrapper, e.g. .. code-block:: bash - -D CMAKE_CXX_COMPILER=/home/username/lammps/lib/kokkos/bin/nvcc_wrapper + -D CMAKE_CXX_COMPILER=${HOME}/lammps/lib/kokkos/bin/nvcc_wrapper -**Traditional make**\ : +To simplify the compilation, three preset files are included in the +``cmake/presets`` folder, ``kokkos-serial.cmake``, ``kokkos-openmp.cmake``, +and ``kokkos-cuda.cmake``. They will enable the KOKKOS package and +enable some hardware choice. So to compile with OpenMP host parallelization, +CUDA device parallelization (for GPUs with CC 5.0 and up) with some +common packages enabled, you can do the following: + +.. code-block:: bash + + mkdir build-kokkos-cuda + cd build-kokkos-cuda + cmake -C ../cmake/presets/minimal.cmake -C ../cmake/presets/kokkos-cuda.cmake ../cmake + cmake --build . + +Basic traditional make settings: +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Choose which hardware to support in ``Makefile.machine`` via ``KOKKOS_DEVICES`` and ``KOKKOS_ARCH`` settings. See the -``src/MAKE/OPTIONS/Makefile.kokkos\*`` files for examples. +``src/MAKE/OPTIONS/Makefile.kokkos*`` files for examples. For multicore CPUs using OpenMP: .. code-block:: make KOKKOS_DEVICES = OpenMP - KOKKOS_ARCH = archCPU # archCPU = CPU from list above + KOKKOS_ARCH = HOSTARCH # HOSTARCH = HOST from list above For Intel KNLs using OpenMP: @@ -381,22 +523,72 @@ For NVIDIA GPUs using CUDA: .. code-block:: make KOKKOS_DEVICES = Cuda - KOKKOS_ARCH = archCPU,archGPU # archCPU = CPU from list above that is hosting the GPU - # archGPU = GPU from list above - FFT_INC = -DFFT_CUFFT # enable use of cuFFT (optional) - FFT_LIB = -lcufft # link to cuFFT library + KOKKOS_ARCH = HOSTARCH,GPUARCH # HOSTARCH = HOST from list above that is hosting the GPU + KOKKOS_CUDA_OPTIONS = "enable_lambda" + # GPUARCH = GPU from list above + FFT_INC = -DFFT_CUFFT # enable use of cuFFT (optional) + FFT_LIB = -lcufft # link to cuFFT library -For GPUs, you also need the following 2 lines in your Makefile.machine -before the CC line is defined, in this case for use with OpenMPI mpicxx. -The 2 lines define a nvcc wrapper compiler, which will use nvcc for -compiling CUDA files and use a C++ compiler for non-Kokkos, non-CUDA -files. +For GPUs, you also need the following lines in your ``Makefile.machine`` +before the CC line is defined. They tell ``mpicxx`` to use an ``nvcc`` +compiler wrapper, which will use ``nvcc`` for compiling CUDA files and a +C++ compiler for non-Kokkos, non-CUDA files. .. code-block:: make + # For OpenMPI KOKKOS_ABSOLUTE_PATH = $(shell cd $(KOKKOS_PATH); pwd) export OMPI_CXX = $(KOKKOS_ABSOLUTE_PATH)/config/nvcc_wrapper - CC = mpicxx + CC = mpicxx + +.. code-block:: make + + # For MPICH and derivatives + KOKKOS_ABSOLUTE_PATH = $(shell cd $(KOKKOS_PATH); pwd) + CC = mpicxx -cxx=$(KOKKOS_ABSOLUTE_PATH)/config/nvcc_wrapper + + +Advanced KOKKOS compilation settings +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +There are other allowed options when building with the KOKKOS package +that can improve performance or assist in debugging or profiling. Below +are some examples that may be useful in combination with LAMMPS. For +the full list (which keeps changing as the Kokkos package itself evolves), +please consult the Kokkos library documentation. + +As alternative to using multi-threading via OpenMP +(``-DKokkos_ENABLE_OPENMP=on`` or ``KOKKOS_DEVICES=OpenMP``) it is also +possible to use Posix threads directly (``-DKokkos_ENABLE_PTHREAD=on`` +or ``KOKKOS_DEVICES=Pthread``). While binding of threads to individual +or groups of CPU cores is managed in OpenMP with environment variables, +you need assistance from either the "hwloc" or "libnuma" library for the +Pthread thread parallelization option. To enable use with CMake: +``-DKokkos_ENABLE_HWLOC=on`` or ``-DKokkos_ENABLE_LIBNUMA=on``; and with +conventional make: ``KOKKOS_USE_TPLS=hwloc`` or +``KOKKOS_USE_TPLS=libnuma``. + +The CMake option ``-DKokkos_ENABLE_LIBRT=on`` or the makefile setting +``KOKKOS_USE_TPLS=librt`` enables the use of a more accurate timer +mechanism on many Unix-like platforms for internal profiling. + +The CMake option ``-DKokkos_ENABLE_DEBUG=on`` or the makefile setting +``KOKKOS_DEBUG=yes`` enables printing of run-time +debugging information that can be useful. It also enables runtime +bounds checking on Kokkos data structures. As to be expected, enabling +this option will negatively impact the performance and thus is only +recommended when developing a Kokkos-enabled style in LAMMPS. + +The CMake option ``-DKokkos_ENABLE_CUDA_UVM=on`` or the makefile +setting ``KOKKOS_CUDA_OPTIONS=enable_lambda,force_uvm`` enables the +use of CUDA "Unified Virtual Memory" (UVM) in Kokkos. UVM allows to +transparently use RAM on the host to supplement the memory used on the +GPU (with some performance penalty) and thus enables running larger +problems that would otherwise not fit into the RAM on the GPU. + +Please note, that the LAMMPS KOKKOS package must **always** be compiled +with the *enable_lambda* option when using GPUs. The CMake configuration +will thus always enable it. ---------- @@ -435,7 +627,7 @@ args: $ make lib-latte args="-b" # download and build in lib/latte/LATTE-master $ make lib-latte args="-p $HOME/latte" # use existing LATTE installation in $HOME/latte $ make lib-latte args="-b -m gfortran" # download and build in lib/latte and - # copy Makefile.lammps.gfortran to Makefile.lammps + # copy Makefile.lammps.gfortran to Makefile.lammps Note that 3 symbolic (soft) links, "includelink" and "liblink" and "filelink.o", are created in lib/latte to point into the LATTE home diff --git a/doc/src/Build_link.rst b/doc/src/Build_link.rst index b18dc49e38f51cd23d80298be730b9e3bbdd5860..39fc4fe40a2f43bc075478d9ad94ba758f8d3492 100644 --- a/doc/src/Build_link.rst +++ b/doc/src/Build_link.rst @@ -1,33 +1,35 @@ Link LAMMPS as a library to another code ======================================== -LAMMPS can be used as a library by another application, including -Python scripts. The files src/library.cpp and library.h define the +LAMMPS is designed as a library of C++ objects and can thus be +integrated into other applications including Python scripts. +The files ``src/library.cpp`` and ``src/library.h`` define a C-style API for using LAMMPS as a library. See the :doc:`Howto library ` doc page for a description of the interface and how to extend it for your needs. The :doc:`Build basics ` doc page explains how to build -LAMMPS as either a shared or static library. This results in one of -these 2 files: - -.. code-block:: bash - - liblammps.so # shared library - liblammps.a # static library +LAMMPS as either a shared or static library. This results in a file +in the compilation folder called ``liblammps.a`` or ``liblammps_.a`` +in case of building a static library. In case of a shared library +the name is the same only that the suffix is going to be either ``.so`` +or ``.dylib`` or ``.dll`` instead of ``.a`` depending on the OS. +In some cases the ``.so`` file may be a symbolic link to a file with +the suffix ``.so.0`` (or some other number). .. note:: - Care should be taken to use the same MPI library for the calling - code and the LAMMPS library. The library.h file includes mpi.h and - uses definitions from it so those need to be available and - consistent. When LAMMPS is compiled with the MPI STUBS library, - then its mpi.h file needs to be included. While it is technically - possible to use a full MPI library in the calling code and link to - a serial LAMMPS library compiled with MPI STUBS, it is recommended - to use the *same* MPI library for both, and then use MPI_Comm_split() - in the calling code to pass a suitable communicator with a subset - of MPI ranks to the function creating the LAMMPS instance. + Care should be taken to use the same MPI library for the calling code + and the LAMMPS library. The ``library.h`` file includes ``mpi.h`` + and uses definitions from it so those need to be available and + consistent. When LAMMPS is compiled with the included STUBS MPI + library, then its ``mpi.h`` file needs to be included. While it is + technically possible to use a full MPI library in the calling code + and link to a serial LAMMPS library compiled with MPI STUBS, it is + recommended to use the *same* MPI library for both, and then use + ``MPI_Comm_split()`` in the calling code to pass a suitable + communicator with a subset of MPI ranks to the function creating the + LAMMPS instance. ---------- @@ -42,11 +44,11 @@ executable code from the library is copied into the calling executable. *CMake build*\ : -This assumes that LAMMPS has been configured with "-D BUILD_LIB=yes" -and installed with "make install" and the PKG_CONFIG_PATH environment -variable updated to include the *liblammps.pc* file installed into the -configured destination folder, if needed. The commands to compile and -link the coupled executable are then: +This assumes that LAMMPS has been configured without setting a +``LAMMPS_MACHINE`` name, installed with "make install", and the +``PKG_CONFIG_PATH`` environment variable has been updated to include the +``liblammps.pc`` file installed into the configured destination folder. +The commands to compile and link a coupled executable are then: .. code-block:: bash @@ -56,30 +58,35 @@ link the coupled executable are then: *Traditional make*\ : This assumes that LAMMPS has been compiled in the folder -"${HOME}/lammps/src" with "make mode=lib mpi". The commands to compile -and link the coupled executable are then: +``${HOME}/lammps/src`` with "make mpi". The commands to compile and link +a coupled executable are then: .. code-block:: bash mpicc -c -O -I${HOME}/lammps/src caller.c - mpicxx -o caller caller.o -L${HOME}/lammps/src -llammps + mpicxx -o caller caller.o -L${HOME}/lammps/src -llammps_mpi -The *-I* argument is the path to the location of the *library.h* +The *-I* argument is the path to the location of the ``library.h`` header file containing the interface to the LAMMPS C-style library -interface. The *-L* argument is the path to where the *liblammps.a* -file is located. The *-llammps* argument is shorthand for telling the -compiler to link the file *liblammps.a*\ . +interface. The *-L* argument is the path to where the ``liblammps_mpi.a`` +file is located. The *-llammps_mpi* argument is shorthand for telling the +compiler to link the file ``liblammps_mpi.a``. If LAMMPS has been +built as a shared library, then the linker will use ``liblammps_mpi.so`` +instead. If both files are available, the linker will usually prefer +the shared library. In case of a shared library, you may need to update +the ``LD_LIBRARY_PATH`` environment variable or running the ``caller`` +executable will fail since it cannot find the shared library at runtime. However, it is only as simple as shown above for the case of a plain LAMMPS library without any optional packages that depend on libraries -(bundled or external). Otherwise, you need to include all flags, -libraries, and paths for the coupled executable, that are also -required to link the LAMMPS executable. +(bundled or external) or when using a shared library. Otherwise, you +need to include all flags, libraries, and paths for the coupled +executable, that are also required to link the LAMMPS executable. *CMake build*\ : When using CMake, additional libraries with sources in the lib folder -are built, but not included in liblammps.a and (currently) not +are built, but not included in ``liblammps.a`` and (currently) not installed with "make install" and not included in the *pkgconfig* configuration file. They can be found in the top level build folder, but you have to determine the necessary link flags manually. It is @@ -87,23 +94,26 @@ therefore recommended to either use the traditional make procedure to build and link with a static library or build and link with a shared library instead. +.. TODO: this needs to be updated to reflect that latest CMake changes after they are complete. + *Traditional make*\ : After you have compiled a static LAMMPS library using the conventional -build system for example with "make mode=lib serial". And you also -have installed the POEMS package after building its bundled library in -lib/poems. Then the commands to build and link the coupled executable +build system for example with "make mode=static serial". And you also +have installed the ``POEMS`` package after building its bundled library +in ``lib/poems``. Then the commands to build and link the coupled executable change to: .. code-block:: bash gcc -c -O -I${HOME}/lammps/src/STUBS -I${HOME}/lammps/src -caller.c g++ -o caller caller.o -L${HOME}/lammps/lib/poems \ - -L${HOME}/lammps/src/STUBS -L${HOME}/lammps/src -llammps -lpoems -lmpi_stubs + -L${HOME}/lammps/src/STUBS -L${HOME}/lammps/src -llammps_serial -lpoems -lmpi_stubs -Note, that you need to link with "g++" instead of "gcc", since LAMMPS -is C++ code. You can display the currently applied settings for building -LAMMPS for the "serial" machine target by using the command: +Note, that you need to link with "g++" instead of "gcc", since the +LAMMPS library is C++ code. You can display the currently applied +settings for building LAMMPS for the "serial" machine target by using +the command: .. code-block:: bash @@ -113,16 +123,16 @@ Which should output something like: .. code-block:: bash - # Compiler: + # Compiler: CXX=g++ - # Linker: + # Linker: LD=g++ - # Compilation: - CXXFLAGS=-g -O3 -DLAMMPS_GZIP -DLAMMPS_MEMALIGN=64 -I${HOME}/lammps/lib/poems -I${HOME}/lammps/src/STUBS - # Linking: + # Compilation: + CXXFLAGS=-g -O3 -DLAMMPS_GZIP -DLAMMPS_MEMALIGN=64 -I${HOME}/compile/lammps/lib/poems -I${HOME}/compile/lammps/src/STUBS + # Linking: LDFLAGS=-g -O - # Libraries: - LDLIBS=-L${HOME}/lammps/lib/poems -L${HOME}/lammps/src/STUBS -lpoems -lmpi_stubs + # Libraries: + LDLIBS=-L${HOME}/compile/lammps/src -llammps_serial -L${HOME}/compile/lammps/lib/poems -L${HOME}/compile/lammps/src/STUBS -lpoems -lmpi_stubs From this you can gather the necessary paths and flags. With makefiles for other *machine* configurations you need to do the @@ -133,14 +143,13 @@ of the makefile. **Link with LAMMPS as a shared library**\ : -When linking to LAMMPS built as a shared library, the situation -becomes much simpler, as all dependent libraries and objects are -included in the shared library, which is - technically speaking - -effectively a regular LAMMPS executable that is missing the `main()` -function. Thus those libraries need not to be specified when linking -the calling executable. Only the *-I* flags are needed. So the -example case from above of the serial version static LAMMPS library -with the POEMS package installed becomes: +When linking to LAMMPS built as a shared library, the situation becomes +much simpler, as all dependent libraries and objects are either included +in the shared library or registered as a dependent library in the shared +library file. Thus those libraries need not to be specified when +linking the calling executable. Only the *-I* flags are needed. So the +example case from above of the serial version static LAMMPS library with +the POEMS package installed becomes: *CMake build*\ : @@ -155,19 +164,19 @@ build process are the same as for the static library. *Traditional make*\ : The commands with a shared LAMMPS library compiled with the -traditional make build using "make mode=shlib serial" becomes: +traditional make build using "make mode=shared serial" becomes: .. code-block:: bash gcc -c -O -I${HOME}/lammps/src/STUBS -I${HOME}/lammps/src -caller.c - g++ -o caller caller.o -L${HOME}/lammps/src -llammps + g++ -o caller caller.o -L${HOME}/lammps/src -llammps_serial *Locating liblammps.so at runtime*\ : -However, now the `liblammps.so` file is required at runtime and needs +However, now the ``liblammps.so`` file is required at runtime and needs to be in a folder, where the shared linker program of the operating -system can find it. This would be either a folder like "/usr/local/lib64" -or "${HOME}/.local/lib64" or a folder pointed to by the LD_LIBRARY_PATH +system can find it. This would be either a folder like ``/usr/local/lib64`` +or ``${HOME}/.local/lib64`` or a folder pointed to by the ``LD_LIBRARY_PATH`` environment variable. You can type .. code-block:: bash @@ -177,11 +186,11 @@ environment variable. You can type to see what directories are in that list. Or you can add the LAMMPS src directory (or the directory you performed -a CMake style build in) to your LD_LIBRARY_PATH, so that the current +a CMake style build in) to your ``LD_LIBRARY_PATH``, so that the current version of the shared library is always available to programs that use it. For the Bourne or Korn shells (/bin/sh, /bin/ksh, /bin/bash etc.), you -would add something like this to your ~/.profile file: +would add something like this to your ``${HOME}/.profile`` file: .. code-block:: bash @@ -189,14 +198,14 @@ would add something like this to your ~/.profile file: export LD_LIBRARY_PATH For the csh or tcsh shells, you would equivalently add something like this -to your ~/.cshrc file: +to your ``${HOME}/.cshrc`` file: .. code-block:: csh setenv LD_LIBRARY_PATH ${LD_LIBRARY_PATH}:${HOME}/lammps/src You can verify whether all required shared libraries are found with the -`ldd` tool. Example: +``ldd`` tool. Example: .. code-block:: bash @@ -229,20 +238,20 @@ If a required library is missing, you would get a 'not found' entry: Either flavor of library (static or shared) allows one or more LAMMPS objects to be instantiated from the calling program. When used from a C++ program, most of the symbols and functions in LAMMPS are wrapped -in a LAMMPS_NS namespace; you can safely use any of its classes and +in a ``LAMMPS_NS`` namespace; you can safely use any of its classes and methods from within the calling code, as needed, and you will not incur conflicts with functions and variables in your code that share the name. This, however, does not extend to all additional libraries bundled with LAMMPS in the lib folder and some of the low-level code of some packages. To be compatible with C, Fortran, Python programs, the library has a simple -C-style interface, provided in src/library.cpp and src/library.h. +C-style interface, provided in ``src/library.cpp`` and ``src/library.h``. See the :doc:`Python library ` doc page for a description of the Python interface to LAMMPS, which wraps the C-style interface from a shared library through the `ctypes python module `_. -See the sample codes in examples/COUPLE/simple for examples of C++ and +See the sample codes in ``examples/COUPLE/simple`` for examples of C++ and C and Fortran codes that invoke LAMMPS through its library interface. Other examples in the COUPLE directory use coupling ideas discussed on the :doc:`Howto couple ` doc page. diff --git a/doc/src/Build_make.rst b/doc/src/Build_make.rst index 0379a8379a1bfa42beb6acbf993dc0ce2004b400..af5e319121768b41b0016f9be88f83a31965dfb8 100644 --- a/doc/src/Build_make.rst +++ b/doc/src/Build_make.rst @@ -2,10 +2,14 @@ Build LAMMPS with make ====================== Building LAMMPS with traditional makefiles requires that you have a -Makefile."machine" file appropriate for your system in the src/MAKE, -src/MAKE/MACHINES, src/MAKE/OPTIONS, or src/MAKE/MINE directory (see -below). It can include various options for customizing your LAMMPS -build with a number of global compilation options and features. +``Makefile.`` file appropriate for your system in either the +``src/MAKE``, ``src/MAKE/MACHINES``, ``src/MAKE/OPTIONS``, or +``src/MAKE/MINE`` directory (see below). It can include various options +for customizing your LAMMPS build with a number of global compilation +options and features. + +Requirements +^^^^^^^^^^^^ Those makefiles are written for and tested with GNU make and may not be compatible with other make programs. In most cases, if the "make" @@ -16,44 +20,54 @@ with :doc:`CMake `. The makefiles of the traditional make based build process and the scripts they are calling expect a few additional tools to be available and functioning. - * a Bourne shell compatible "Unix" shell program (often this is bash) - * a few shell utilities: ls, mv, ln, rm, grep, sed, tr, cat, touch, diff, dirname - * python (optional, required for "make lib-XXX" in the src folder) - -To include LAMMPS packages (i.e. optional commands and styles) you -must enable them first, as discussed on the :doc:`Build package -` doc page. If a packages requires (provided or + * a working C/C++ compiler toolchain supporting the C++11 standard; on + Linux these are often the GNU compilers. Some older compilers + require adding flags like ``-std=c++11`` to enable the C++11 mode. + * a Bourne shell compatible "Unix" shell program (often this is ``bash``) + * a few shell utilities: ``ls``, ``mv``, ``ln``, ``rm``, ``grep``, ``sed``, ``tr``, ``cat``, ``touch``, ``diff``, ``dirname`` + * python (optional, required for ``make lib-`` in the src folder). + python scripts are currently tested with python 2.7 and 3.6. The procedure + for :doc:`building the documentation ` requires python 3. + +Getting started +^^^^^^^^^^^^^^^ + +To include LAMMPS packages (i.e. optional commands and styles) you must +enable (or "install") them first, as discussed on the :doc:`Build +package ` doc page. If a packages requires (provided or external) libraries, you must configure and build those libraries **before** building LAMMPS itself and especially **before** enabling -such a package with "make yes-". Building :doc:`LAMMPS -with CMake ` can automate much of this for many types of +such a package with ``make yes-``. Building :doc:`LAMMPS with +CMake ` can automate much of this for many types of machines, especially workstations, desktops, and laptops, so we suggest you try it first when building LAMMPS in those cases. The commands below perform a default LAMMPS build, producing the LAMMPS -executable lmp_serial and lmp_mpi in lammps/src: +executable ``lmp_serial`` and ``lmp_mpi`` in ``lammps/src``: .. code-block:: bash - cd lammps/src - make serial # build a serial LAMMPS executable + cd lammps/src # change to main LAMMPS source folder + make serial # build a serial LAMMPS executable using GNU g++ make mpi # build a parallel LAMMPS executable with MPI make # see a variety of make options -This initial compilation can take a long time, since LAMMPS is a large -project with many features. If your machine has multiple CPU cores -(most do these days), using a command like "make -jN mpi" (with N = -the number of available CPU cores) can be much faster. If you plan to -do development on LAMMPS or need to re-compile LAMMPS repeatedly, the -installation of the ccache (= Compiler Cache) software may speed up -compilation even more. +Compilation can take a long time, since LAMMPS is a large project with +many features. If your machine has multiple CPU cores (most do these +days), you can speed this up by compiling sources in parallel with +``make -j N`` (with N being the maximum number of concurrently executed +tasks). Also installation of the `ccache `_ (= +Compiler Cache) software may speed up repeated compilation even more, +e.g. during code development. After the initial build, whenever you edit LAMMPS source files, or add or remove new files to the source directory (e.g. by installing or uninstalling packages), you must re-compile and relink the LAMMPS -executable with the same "make" command. This makefiles dependencies -should insure that only the subset of files that need to be are -re-compiled. +executable with the same ``make `` command. The makefile's +dependency tracking should insure that only the necessary subset of +files are re-compiled. If you change settings in the makefile, you have +to recompile *everything*. To delete all objects you can use ``make +clean-``. .. note:: @@ -65,13 +79,15 @@ re-compiled. correctly detect which parts need to be recompiled after changes were made to the sources. ----------- +Customized builds and alternate makefiles +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -The lammps/src/MAKE tree contains the Makefile.machine files included -in the LAMMPS distribution. Typing "make machine" uses -*Makefile.machine*\ . Thus the "make serial" or "make mpi" lines above -use Makefile.serial and Makefile.mpi, respectively. Other makefiles -are in these directories: +The ``src/MAKE`` directory tree contains the ``Makefile.`` +files included in the LAMMPS distribution. Typing ``make example`` uses +``Makefile.example`` from one of those folders, if available. Thus the +``make serial`` and ``make mpi`` lines above use +``src/MAKE/Makefile.serial`` and ``src/MAKE/Makefile.mpi``, +respectively. Other makefiles are in these directories: .. code-block:: bash @@ -79,11 +95,16 @@ are in these directories: MACHINES # Makefiles for specific machines MINE # customized Makefiles you create (you may need to create this folder) -Typing "make" lists all the available Makefile.machine files. A file -with the same name can appear in multiple folders (not a good idea). -The order the directories are searched is as follows: src/MAKE/MINE, -src/MAKE, src/MAKE/OPTIONS, src/MAKE/MACHINES. This gives preference -to a customized file you put in src/MAKE/MINE. +Simply typing ``make`` lists all the available ``Makefile.`` +files with a single line description toward the end of the output. A +file with the same name can appear in multiple folders (not a good +idea). The order the directories are searched is as follows: +``src/MAKE/MINE``, ``src/MAKE``, ``src/MAKE/OPTIONS``, +``src/MAKE/MACHINES``. This gives preference to a customized file you +put in ``src/MAKE/MINE``. If you create your own custom makefile under +a new name, please edit the first line with the description and machine +name, so you will not confuse yourself, when looking at the machine +summary. Makefiles you may wish to try include these (some require a package first be installed). Many of these include specific compiler flags diff --git a/doc/src/Build_package.rst b/doc/src/Build_package.rst index 2e0bea723a08befbf8fadcbfb23c5898c34aa86b..f2511bb6a4a229a2bd8ef16b69e4c1ef0b4fee46 100644 --- a/doc/src/Build_package.rst +++ b/doc/src/Build_package.rst @@ -130,6 +130,8 @@ src directory. ---------- +.. _cmake_presets: + **CMake shortcuts for installing many packages**\ : Instead of specifying all the CMake options via the command-line, diff --git a/doc/src/Commands_compute.rst b/doc/src/Commands_compute.rst index 13336fa89b40d0f30fb441172f712a7ebbffa5aa..c4b51319d972a943a93152c6fa9a8a27d82ebdd0 100644 --- a/doc/src/Commands_compute.rst +++ b/doc/src/Commands_compute.rst @@ -42,7 +42,7 @@ KOKKOS, o = USER-OMP, t = OPT. * :doc:`com ` * :doc:`com/chunk ` * :doc:`contact/atom ` - * :doc:`coord/atom ` + * :doc:`coord/atom (k) ` * :doc:`damage/atom ` * :doc:`dihedral ` * :doc:`dihedral/local ` @@ -79,15 +79,12 @@ KOKKOS, o = USER-OMP, t = OPT. * :doc:`ke/atom/eff ` * :doc:`ke/eff ` * :doc:`ke/rigid ` - * :doc:`meso/e/atom ` - * :doc:`meso/rho/atom ` - * :doc:`meso/t/atom ` * :doc:`momentum ` * :doc:`msd ` * :doc:`msd/chunk ` * :doc:`msd/nongauss ` * :doc:`omega/chunk ` - * :doc:`orientorder/atom ` + * :doc:`orientorder/atom (k) ` * :doc:`pair ` * :doc:`pair/local ` * :doc:`pe ` @@ -133,6 +130,9 @@ KOKKOS, o = USER-OMP, t = OPT. * :doc:`sna/atom ` * :doc:`snad/atom ` * :doc:`snav/atom ` + * :doc:`sph/e/atom ` + * :doc:`sph/rho/atom ` + * :doc:`sph/t/atom ` * :doc:`spin ` * :doc:`stress/atom ` * :doc:`stress/mop ` @@ -161,5 +161,6 @@ KOKKOS, o = USER-OMP, t = OPT. * :doc:`torque/chunk ` * :doc:`vacf ` * :doc:`vcm/chunk ` + * :doc:`viscosity/cos ` * :doc:`voronoi/atom ` * :doc:`xrd ` diff --git a/doc/src/Commands_fix.rst b/doc/src/Commands_fix.rst index ce7cade0f6f6db2a2e288ec3ee26762030067c19..3df8690af981686969e031642ad6d9ba5153647a 100644 --- a/doc/src/Commands_fix.rst +++ b/doc/src/Commands_fix.rst @@ -22,6 +22,7 @@ OPT. .. table_from_list:: :columns: 5 + * :doc:`accelerate/cos ` * :doc:`adapt ` * :doc:`adapt/fep ` * :doc:`addforce ` @@ -94,9 +95,7 @@ OPT. * :doc:`lb/viscous ` * :doc:`lineforce ` * :doc:`manifoldforce ` - * :doc:`meso ` * :doc:`meso/move ` - * :doc:`meso/stationary ` * :doc:`momentum (k) ` * :doc:`move ` * :doc:`mscg ` @@ -201,6 +200,8 @@ OPT. * :doc:`smd/move_tri_surf ` * :doc:`smd/setvel ` * :doc:`smd/wall_surface ` + * :doc:`sph ` + * :doc:`sph/stationary ` * :doc:`spring ` * :doc:`spring/chunk ` * :doc:`spring/rg ` diff --git a/doc/src/Commands_pair.rst b/doc/src/Commands_pair.rst index 34b04969f9fa457cfafbf9f2f20ef2da39770372..eac38af66880583820f1f49334123799f34735de 100644 --- a/doc/src/Commands_pair.rst +++ b/doc/src/Commands_pair.rst @@ -92,8 +92,8 @@ OPT. * :doc:`drip ` * :doc:`eam (gikot) ` * :doc:`eam/alloy (gikot) ` - * :doc:`eam/cd (o) ` - * :doc:`eam/cd/old (o) ` + * :doc:`eam/cd ` + * :doc:`eam/cd/old ` * :doc:`eam/fs (gikot) ` * :doc:`edip (o) ` * :doc:`edip/multi ` @@ -131,6 +131,7 @@ OPT. * :doc:`lj/class2/coul/cut (ko) ` * :doc:`lj/class2/coul/cut/soft ` * :doc:`lj/class2/coul/long (gko) ` + * :doc:`lj/class2/coul/long/cs ` * :doc:`lj/class2/coul/long/soft ` * :doc:`lj/class2/soft ` * :doc:`lj/cubic (go) ` diff --git a/doc/src/Commands_removed.rst b/doc/src/Commands_removed.rst index b749467d13f9d5aac68d2df3d5720a242ab60ab8..e137e39a0868dc4b6b74c5dc36ce8acb1e22fc0e 100644 --- a/doc/src/Commands_removed.rst +++ b/doc/src/Commands_removed.rst @@ -48,7 +48,7 @@ The USER-CUDA package had been removed, since it had been unmaintained for a long time and had known bugs and problems. Significant parts of the design were transferred to the :ref:`KOKKOS package `, which has similar -performance characteristics on Nvidia GPUs. Both, the KOKKOS +performance characteristics on NVIDIA GPUs. Both, the KOKKOS and the :ref:`GPU package ` are maintained and allow running LAMMPS with GPU acceleration. diff --git a/doc/src/Errors.rst b/doc/src/Errors.rst index 896dfbcbef63d7f5151f437f2e1ecd0d331b3304..48db5f6472d7b039982d6a4857ff35f21482fb24 100644 --- a/doc/src/Errors.rst +++ b/doc/src/Errors.rst @@ -12,5 +12,6 @@ additional details for many of them. Errors_common Errors_bugs + Errors_debug Errors_messages Errors_warnings diff --git a/doc/src/Errors_bugs.rst b/doc/src/Errors_bugs.rst index e169b93d8189c14da09b91c20c1db0e4c26003c2..ff0b155795397efbaa0d0675c17e9a4ebb5a2821 100644 --- a/doc/src/Errors_bugs.rst +++ b/doc/src/Errors_bugs.rst @@ -1,7 +1,8 @@ Reporting bugs ============== -If you are confident that you have found a bug in LAMMPS, please follow the steps outlined below: +If you are confident that you have found a bug in LAMMPS, please follow +the steps outlined below: * Check the `New features and bug fixes `_ section of the `LAMMPS WWW site @@ -17,20 +18,22 @@ If you are confident that you have found a bug in LAMMPS, please follow the step * Check the `mailing list archives `_ to see if the issue has been discussed before. -If none of these steps yields any useful information, please file -a new bug report on the `GitHub Issue page `_\ . -The website will offer you to select a suitable template with explanations -and then you should replace those explanations with the information -that you can provide to reproduce your issue. +If none of these steps yields any useful information, please file a new +bug report on the `GitHub Issue page `_. The website will offer +you to select a suitable template with explanations and then you should +replace those explanations with the information that you can provide to +reproduce your issue. The most useful thing you can do to help us verify and fix a bug is to isolate the problem. Run it on the smallest number of atoms and fewest number of processors with the simplest input script that reproduces the -bug. Try to identify what command or combination of commands is -causing the problem and upload the complete input deck as a tar or zip -archive. Please avoid using binary restart files unless the issue requires -it. In the latter case you should also include an input deck to quickly +bug. Try to identify what command or combination of commands is causing +the problem and upload the complete input deck as a tar or zip archive. +Please avoid using binary restart files unless the issue requires it. +In the latter case you should also include an input deck to quickly generate this restart from a data file or a simple additional input. +This input deck can be used with tools like a debugger or `valgrind +`_ to further :doc:`debug the crash `. You may also send an email to the LAMMPS mailing list at "lammps-users at lists.sourceforge.net" describing the problem with the @@ -43,3 +46,4 @@ have looked at it. .. _lws: https://lammps.sandia.gov .. _gip: https://github.com/lammps/issues +.. _valgrind: https://valgrind.org diff --git a/doc/src/Errors_debug.rst b/doc/src/Errors_debug.rst new file mode 100644 index 0000000000000000000000000000000000000000..1e7e678602d83068645ae8fb721e74aa8417fbaf --- /dev/null +++ b/doc/src/Errors_debug.rst @@ -0,0 +1,237 @@ +Debugging crashes +================= + +If LAMMPS crashes with a "segmentation fault" or a "bus error" or +similar message, then you can use the following two methods to further +narrow down the origin of the issue. This will help the LAMMPS +developers (or yourself) to understand the reason for the crash and +apply a fix (either to the input script or the source code). +This requires that your LAMMPS executable includes the required +:ref:`debug information `. Otherwise it is not possible to +look up the names of functions or variables. + +The following patch will introduce a bug into the code for pair style +:doc:`lj/cut ` when using the ``examples/melt/in.melt`` input. +We use it to show how to identify the origin of a segmentation fault. + +.. code-block:: diff + + --- a/src/pair_lj_cut.cpp + +++ b/src/pair_lj_cut.cpp + @@ -81,6 +81,7 @@ void PairLJCut::compute(int eflag, int vflag) + int nlocal = atom->nlocal; + double *special_lj = force->special_lj; + int newton_pair = force->newton_pair; + + double comx = 0.0; + + inum = list->inum; + ilist = list->ilist; + @@ -134,8 +135,10 @@ void PairLJCut::compute(int eflag, int vflag) + evdwl,0.0,fpair,delx,dely,delz); + } + } + - } + + + comx += atom->rmass[i]*x[i][0]; /* BUG */ + + } + + printf("comx = %g\n",comx); + if (vflag_fdotr) virial_fdotr_compute(); + } + +After recompiling LAMMPS and running the input you should get something like this: + +.. code-block: + + $ ./lmp -in in.melt + LAMMPS (19 Mar 2020) + OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:94) + using 1 OpenMP thread(s) per MPI task + Lattice spacing in x,y,z = 1.6796 1.6796 1.6796 + Created orthogonal box = (0 0 0) to (16.796 16.796 16.796) + 1 by 1 by 1 MPI processor grid + Created 4000 atoms + create_atoms CPU = 0.000432253 secs + Neighbor list info ... + update every 20 steps, delay 0 steps, check no + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 2.8 + ghost atom cutoff = 2.8 + binsize = 1.4, bins = 12 12 12 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair lj/cut, perpetual + attributes: half, newton on + pair build: half/bin/atomonly/newton + stencil: half/bin/3d/newton + bin: standard + Setting up Verlet run ... + Unit style : lj + Current step : 0 + Time step : 0.005 + Segmentation fault (core dumped) + + +Using the GDB debugger to get a stack trace +------------------------------------------- + +There are two options to use the GDB debugger for identifying the origin +of the segmentation fault or similar crash. The GDB debugger has many +more features and options, as can be seen for example its `online +documentation `_. + +Run LAMMPS from within the debugger +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +Running LAMMPS under the control of the debugger as shown below only +works for a single MPI rank (for debugging a program running in parallel +you usually need a parallel debugger program). A simple way to launch +GDB is to prefix the LAMMPS command line with ``gdb --args`` and then +type the command "run" at the GDB prompt. This will launch the +debugger, load the LAMMPS executable and its debug info, and then run +it. When it reaches the code causing the segmentation fault, it will +stop with a message why it stopped, print the current line of code, and +drop back to the GDB prompt. + +.. code-block:: + + [...] + Setting up Verlet run ... + Unit style : lj + Current step : 0 + Time step : 0.005 + + Program received signal SIGSEGV, Segmentation fault. + 0x00000000006653ab in LAMMPS_NS::PairLJCut::compute (this=0x829740, eflag=1, vflag=) at /home/akohlmey/compile/lammps/src/pair_lj_cut.cpp:139 + 139 comx += atom->rmass[i]*x[i][0]; /* BUG */ + (gdb) + +Now typing the command "where" will show the stack of functions starting from +the current function back to "main()". + +.. code-block:: + + (gdb) where + #0 0x00000000006653ab in LAMMPS_NS::PairLJCut::compute (this=0x829740, eflag=1, vflag=) at /home/akohlmey/compile/lammps/src/pair_lj_cut.cpp:139 + #1 0x00000000004cf0a2 in LAMMPS_NS::Verlet::setup (this=0x7e6c90, flag=1) at /home/akohlmey/compile/lammps/src/verlet.cpp:131 + #2 0x000000000049db42 in LAMMPS_NS::Run::command (this=this@entry=0x7fffffffcca0, narg=narg@entry=1, arg=arg@entry=0x7e8750) + at /home/akohlmey/compile/lammps/src/run.cpp:177 + #3 0x000000000041258a in LAMMPS_NS::Input::command_creator (lmp=, narg=1, arg=0x7e8750) + at /home/akohlmey/compile/lammps/src/input.cpp:878 + #4 0x0000000000410ad3 in LAMMPS_NS::Input::execute_command (this=0x7d1410) at /home/akohlmey/compile/lammps/src/input.cpp:864 + #5 0x00000000004111fb in LAMMPS_NS::Input::file (this=0x7d1410) at /home/akohlmey/compile/lammps/src/input.cpp:229 + #6 0x000000000040933a in main (argc=, argv=) at /home/akohlmey/compile/lammps/src/main.cpp:65 + (gdb) + +You can also print the value of variables and see if there is anything +unexpected. Segmentation faults, for example, commonly happen when a +pointer variable is not assigned and still initialized to NULL. + +.. code-block:: + + (gdb) print x + $1 = (double **) 0x7ffff7ca1010 + (gdb) print i + $2 = 0 + (gdb) print x[0] + $3 = (double *) 0x7ffff6d80010 + (gdb) print x[0][0] + $4 = 0 + (gdb) print x[1][0] + $5 = 0.83979809569125363 + (gdb) print atom->rmass + $6 = (double *) 0x0 + (gdb) + + +Inspect a core dump file with the debugger +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +When an executable crashes with a "core dumped" message, it creates a +file "core" or "core." which contains the information about the +current state. This file may be located in the folder where you ran +LAMMPS or in some hidden folder managed by the systemd daemon. In the +latter case, you need to "extract" the core file with the ``coredumpctl`` +utility to the current folder. Example: ``coredumpctl -o core dump lmp``. +Now you can launch the debugger to load the executable, its debug info +and the core dump and drop you to a prompt like before. + +.. code-block:: + + $ gdb lmp core + Reading symbols from lmp... + [New LWP 1928535] + [Thread debugging using libthread_db enabled] + Using host libthread_db library "/lib64/libthread_db.so.1". + Core was generated by `./lmp -in in.melt'. + Program terminated with signal SIGSEGV, Segmentation fault. + #0 0x00000000006653ab in LAMMPS_NS::PairLJCut::compute (this=0x1b10740, eflag=1, vflag=) + at /home/akohlmey/compile/lammps/src/pair_lj_cut.cpp:139 + 139 comx += atom->rmass[i]*x[i][0]; /* BUG */ + (gdb) + +From here on, you use the same commands as shown before to get a stack +trace and print current values of (pointer) variables. + + +Using valgrind to get a stack trace +----------------------------------- + +The `valgrind `_ suite of tools allows to closely +inspect the behavior of a compiled program by essentially emulating a +CPU and instrumenting the program while running. This slows down +execution quite significantly, but can also report issues that are not +resulting in a crash. The default valgrind tool is a memory checker and +you can use it by prefixing the normal command line with ``valgrind``. +Unlike GDB, this will also work for parallel execution, but it is +recommended to redirect the valgrind output to a file (e.g. with +``--log-file=crash-%p.txt``, the %p will be substituted with the +process ID) so that the messages of the multiple valgrind instances to +the console are not mixed. + +.. code-block:: + + $ valgrind ./lmp -in in.melt + ==1933642== Memcheck, a memory error detector + ==1933642== Copyright (C) 2002-2017, and GNU GPL'd, by Julian Seward et al. + ==1933642== Using Valgrind-3.15.0 and LibVEX; rerun with -h for copyright info + ==1933642== Command: ./lmp -in in.melt + ==1933642== + LAMMPS (19 Mar 2020) + OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:94) + using 1 OpenMP thread(s) per MPI task + Lattice spacing in x,y,z = 1.6796 1.6796 1.6796 + Created orthogonal box = (0 0 0) to (16.796 16.796 16.796) + 1 by 1 by 1 MPI processor grid + Created 4000 atoms + create_atoms CPU = 0.032964 secs + Neighbor list info ... + update every 20 steps, delay 0 steps, check no + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 2.8 + ghost atom cutoff = 2.8 + binsize = 1.4, bins = 12 12 12 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair lj/cut, perpetual + attributes: half, newton on + pair build: half/bin/atomonly/newton + stencil: half/bin/3d/newton + bin: standard + Setting up Verlet run ... + Unit style : lj + Current step : 0 + Time step : 0.005 + ==1933642== Invalid read of size 8 + ==1933642== at 0x6653AB: LAMMPS_NS::PairLJCut::compute(int, int) (pair_lj_cut.cpp:139) + ==1933642== by 0x4CF0A1: LAMMPS_NS::Verlet::setup(int) (verlet.cpp:131) + ==1933642== by 0x49DB41: LAMMPS_NS::Run::command(int, char**) (run.cpp:177) + ==1933642== by 0x412589: void LAMMPS_NS::Input::command_creator(LAMMPS_NS::LAMMPS*, int, char**) (input.cpp:881) + ==1933642== by 0x410AD2: LAMMPS_NS::Input::execute_command() (input.cpp:864) + ==1933642== by 0x4111FA: LAMMPS_NS::Input::file() (input.cpp:229) + ==1933642== by 0x409339: main (main.cpp:65) + ==1933642== Address 0x0 is not stack'd, malloc'd or (recently) free'd + ==1933642== + +As you can see, the stack trace information is similar to that obtained +from GDB. In addition you get a more specific hint about what cause the +segmentation fault, i.e. that it is a NULL pointer dereference. To find +out which pointer exactly was NULL, you need to use the debugger, though. + diff --git a/doc/src/Errors_messages.rst b/doc/src/Errors_messages.rst index 7f2b88d1fccd47456fa2a6dc1233d56e5edc74fc..2140719253c95cbc519f2928fcb29b79199b628f 100644 --- a/doc/src/Errors_messages.rst +++ b/doc/src/Errors_messages.rst @@ -5851,6 +5851,9 @@ Doc page with :doc:`WARNING messages ` Cannot use the temper command with only one processor partition. Use the -partition command-line option. +*Must not have multiple fixes change box parameter ...* + Self-explanatory. + *Must read Atoms before Angles* The Atoms section of a data file must come before an Angles section. diff --git a/doc/src/Howto.rst b/doc/src/Howto.rst index f4376898b1ba3940d37c6f9549267c398dbc78f6..0ca955ab86283c48c028864a69a6a23d52e8cf1c 100644 --- a/doc/src/Howto.rst +++ b/doc/src/Howto.rst @@ -16,6 +16,7 @@ Tutorials howto :name: tutorials :maxdepth: 1 + Howto_cmake Howto_github Howto_pylammps Howto_bash diff --git a/doc/src/Howto_cmake.rst b/doc/src/Howto_cmake.rst new file mode 100644 index 0000000000000000000000000000000000000000..9028893ddbba2af6fd61b83d038274f07ba4305a --- /dev/null +++ b/doc/src/Howto_cmake.rst @@ -0,0 +1,485 @@ +Using CMake with LAMMPS tutorial +================================ + +The support for building LAMMPS with CMake is a recent addition to +LAMMPS thanks to the efforts of Christoph Junghans (LANL) and Richard +Berger (Temple U). One of the key strengths of CMake is that it is not +tied to a specific platform or build system and thus generate the files +necessary to build and develop for different build systems and on +different platforms. Note, that this applies to the build system itself +not the LAMMPS code. In other words, without additional porting effort, +it is not possible - for example - to compile LAMMPS with Visual C++ on +Windows. The build system output can also include support files +necessary to program LAMMPS as a project in integrated development +environments (IDE) like Eclipse, Visual Studio, QtCreator, Xcode, +CodeBlocks, Kate and others. + +A second important feature of CMake is, that it can detect and validate +available libraries, optimal settings, available support tools and so +on, so that by default LAMMPS will take advantage of available tools +without requiring to provide the details about how to enable/integrate +them. + +The downside of this approach is, that there is some complexity +associated with running CMake itself and how to customize the building +of LAMMPS. This tutorial will show how to manage this through some +selected examples. Please see the chapter about :doc:`building LAMMPS +` for descriptions of specific flags and options for LAMMPS in +general and for specific packages. + +CMake can be used through either the command-line interface (CLI) +program ``cmake`` (or ``cmake3``), a text mode interactive user +interface (TUI) program ``ccmake`` (or ``ccmake3``), or a graphical user +interface (GUI) program ``cmake-gui``. All of them are portable +software available on all supported platforms and can be used +interchangeably. The minimum supported CMake version is 3.10 (3.12 or +later is recommended). + +All details about features and settings for CMake are in the `CMake +online documentation `_. We focus +below on the most important aspects with respect to compiling LAMMPS. + +Prerequisites +------------- + +This tutorial assumes that you are operating in a command-line environment +using a shell like Bash. + +- Linux: any Terminal window will work +- MacOS X: launch the Terminal application. +- Windows 10: install and run the :doc:`Windows subsystem for Linux ` + +We also assume that you have downloaded and unpacked a recent LAMMPS source code package +or used Git to create a clone of the LAMMPS sources on your compilation machine. + +You should change into the top level directory of the LAMMPS source tree all +paths mentioned in the tutorial are relative to that. Immediately after downloading +it should look like this: + +.. code-block:: bash + + $ ls + bench doc lib potentials README tools + cmake examples LICENSE python src + +Build versus source directory +----------------------------- + +When using CMake the build procedure is separated into multiple distinct phases: + + #. **Configuration:** detect or define which features and settings + should be enable and used and how LAMMPS should be compiled + #. **Compilation:** generate and compile all necessary source files + and build libraries and executables. + #. **Installation:** copy selected files from the compilation into + your file system, so they can be used without having to keep the + source and build tree around. + +The configuration and compilation of LAMMPS has to happen in a dedicated +*build directory* which must be different from the source directory. +Also the source directory (``src``) must remain pristine, so it is not +allowed to "install" packages using the traditional make process and +after an compilation attempt all created source files must be removed. +This can be achieved with ``make no-all purge``. + +You can pick **any** folder outside the source tree. We recommend to +create a folder ``build`` in the top-level directory, or multiple +folders in case you want to have separate builds of LAMMPS with +different options (``build-parallel``, ``build-serial``) or with +different compilers (``build-gnu``, ``build-clang``, ``build-intel``) +and so on. All the auxiliary files created by one build process +(executable, object files, log files, etc) are stored in this directory +or sub-directories within it that CMake creates. + + +Running CMake +------------- + +CLI version +^^^^^^^^^^^ + +In the (empty) ``build`` directory, we now run the command ``cmake +../cmake``, which will start the configuration phase and you will see +the progress of the configuration printed to the screen followed by a +summary of the enabled features, options and compiler settings. A typical +summary screen will look like this: + +.. code-block:: + + $ cmake ../cmake/ + -- The CXX compiler identification is GNU 8.2.0 + -- Check for working CXX compiler: /opt/tools/gcc-8.2.0/bin/c++ + -- Check for working CXX compiler: /opt/tools/gcc-8.2.0/bin/c++ - works + -- Detecting CXX compiler ABI info + -- Detecting CXX compiler ABI info - done + -- Detecting CXX compile features + -- Detecting CXX compile features - done + -- Found Git: /usr/bin/git (found version "2.25.2") + -- Running check for auto-generated files from make-based build system + -- Found MPI_CXX: /usr/lib64/mpich/lib/libmpicxx.so (found version "3.1") + -- Found MPI: TRUE (found version "3.1") + -- Looking for C++ include omp.h + -- Looking for C++ include omp.h - found + -- Found OpenMP_CXX: -fopenmp (found version "4.5") + -- Found OpenMP: TRUE (found version "4.5") + -- Found JPEG: /usr/lib64/libjpeg.so (found version "62") + -- Found PNG: /usr/lib64/libpng.so (found version "1.6.37") + -- Found ZLIB: /usr/lib64/libz.so (found version "1.2.11") + -- Found GZIP: /usr/bin/gzip + -- Found FFMPEG: /usr/bin/ffmpeg + -- Performing Test COMPILER_SUPPORTS-ffast-math + -- Performing Test COMPILER_SUPPORTS-ffast-math - Success + -- Performing Test COMPILER_SUPPORTS-march=native + -- Performing Test COMPILER_SUPPORTS-march=native - Success + -- Looking for C++ include cmath + -- Looking for C++ include cmath - found + -- Generating style_angle.h... + [...] + -- Generating lmpinstalledpkgs.h... + -- The following tools and libraries have been found and configured: + * Git + * MPI + * OpenMP + * JPEG + * PNG + * ZLIB + + -- <<< Build configuration >>> + Build type: RelWithDebInfo + Install path: /home/akohlmey/.local + Generator: Unix Makefiles using /usr/bin/gmake + -- <<< Compilers and Flags: >>> + -- C++ Compiler: /opt/tools/gcc-8.2.0/bin/c++ + Type: GNU + Version: 8.2.0 + C++ Flags: -O2 -g -DNDEBUG + Defines: LAMMPS_SMALLBIG;LAMMPS_MEMALIGN=64;LAMMPS_JPEG;LAMMPS_PNG;LAMMPS_GZIP;LAMMPS_FFMPEG + Options: -ffast-math;-march=native + -- <<< Linker flags: >>> + -- Executable name: lmp + -- Static library flags: + -- <<< MPI flags >>> + -- MPI includes: /usr/include/mpich-x86_64 + -- MPI libraries: /usr/lib64/mpich/lib/libmpicxx.so;/usr/lib64/mpich/lib/libmpi.so; + -- Configuring done + -- Generating done + -- Build files have been written to: /home/akohlmey/compile/lammps/build + +The ``cmake`` command has one mandatory argument, and that is a folder +with either the file ``CMakeLists.txt`` or ``CMakeCache.txt``. The +``CMakeCache.txt`` file is created during the CMake configuration run +and contains all active settings, thus after a first run of CMake +all future runs in the build folder can use the folder ``.`` and CMake +will know where to find the CMake scripts and reload the settings +from the previous step. This means, that one can modify an existing +configuration by re-running CMake, but only needs to provide flags +indicating the desired change, everything else will be retained. One +can also mix compilation and configuration, i.e. start with a minimal +configuration and then, if needed, enable additional features and +recompile. + +The steps above **will NOT compile the code**\ . The compilation can be +started in a portable fashion with ``cmake --build .``, or you use the +selected built tool, e.g. ``make``. + +TUI version +^^^^^^^^^^^ + +For the text mode UI CMake program the basic principle is the same. +You start the command ``ccmake ../cmake`` in the ``build`` folder. + +.. list-table:: + + * - .. figure:: JPG/ccmake-initial.png + :target: JPG/ccmake-initial.png + :align: center + + Initial ``ccmake`` screen + + - .. figure:: JPG/ccmake-config.png + :target: JPG/ccmake-config.png + :align: center + + Configure output of ``ccmake`` + + - .. figure:: JPG/ccmake-options.png + :target: JPG/ccmake-options.png + :align: center + + Options screen of ``ccmake`` + +This will show you the initial screen (left image) with the empty +configuration cache. Now you type the 'c' key to run the configuration +step. That will do a first configuration run and show the summary +(center image). You exit the summary screen with 'e' and see now the +main screen with detected options and settings. You can now make changes +by moving and down with the arrow keys of the keyboard and modify +entries. For on/off settings, the enter key will toggle the state. +For others, hitting enter will allow you to modify the value and +you commit the change by hitting the enter key again or cancel using +the escape key. All "new" settings will be marked with a star '\*' +and for as long as one setting is marked like this, you have to +re-run the configuration by hitting the 'c' key again, sometimes +multiple times unless the TUI shows the word "generate" next to the +letter 'g' and by hitting the 'g' key the build files will be written +to the folder and the TUI exits. You can quit without generating +build files by hitting 'q'. + +GUI version +^^^^^^^^^^^ + +For the graphical CMake program the steps are similar to the TUI +version. You can type the command ``cmake-gui ../cmake`` in the +``build`` folder. In this case the path to the CMake script folder is +not required, it can also be entered from the GUI. + +.. list-table:: + + * - .. figure:: JPG/cmake-gui-initial.png + :target: JPG/cmake-gui-initial.png + :align: center + + Initial ``cmake-gui`` screen + + - .. figure:: JPG/cmake-gui-popup.png + :target: JPG/cmake-gui-popup.png + :align: center + + Generator selection in ``cmake-gui`` + + - .. figure:: JPG/cmake-gui-options.png + :target: JPG/cmake-gui-options.png + :align: center + + Options screen of ``cmake-gui`` + +Again, you start with an empty configuration cache (left image) and need +to start the configuration step. For the very first configuration in a +folder, you will have a pop-up dialog (center image) asking to select +the desired build tool and some configuration settings (stick with the +default) and then you get the option screen with all new settings +highlighted in red. You can modify them (or not) and click on the +"configure" button again until satisfied and click on the "generate" +button to write out the build files. You can exit the GUI from the +"File" menu or hit "ctrl-q". + + +Setting options +--------------- + +Options that enable, disable or modify settings are modified by setting +the value of CMake variables. This is done on the command line with the +*-D* flag in the format ``-D VARIABLE=value``, e.g. ``-D +CMAKE_BUILD_TYPE=Release`` or ``-D BUILD_MPI=on``. There is one quirk: +when used before the CMake directory, there may be a space between the +*-D* flag and the variable, after it must not be. Such CMake variables +can have boolean values (on/off, yes/no, or 1/0 are all valid) or are +strings representing a choice, or a path, or are free format. If the +string would contain whitespace, it must be put in quotes, for example +``-D CMAKE_TUNE_FLAGS="-ftree-vectorize -ffast-math"``. + +CMake variables fall into two categories: 1) common CMake variables that +are used by default for any CMake configuration setup and 2) project +specific variables, i.e. settings that are specific for LAMMPS. +Also CMake variables can be flagged as *advanced*, which means they are +not shown in the text mode or graphical CMake program in the overview +of all settings by default, but only when explicitly requested (by hitting +the 't' key or clicking on the 'Advanced' check-box). + +Some common CMake variables +^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. list-table:: + :header-rows: 1 + + * - Variable + - Description + * - ``CMAKE_INSTALL_PREFIX`` + - root directory of install location for ``make install`` (default: ``$HOME/.local``) + * - ``CMAKE_BUILD_TYPE`` + - controls compilation options: + one of ``RelWithDebInfo`` (default), ``Release``, ``Debug``, ``MinSizeRel`` + * - ``BUILD_SHARED_LIBS`` + - if set to ``on`` build the LAMMPS library as shared library (default: ``off``) + * - ``CMAKE_MAKE_PROGRAM`` + - name/path of the compilation command (default depends on *-G* option, usually ``make``) + * - ``CMAKE_VERBOSE_MAKEFILE`` + - if set to ``on`` echo commands while executing during build (default: ``off``) + * - ``CMAKE_C_COMPILER`` + - C compiler to be used for compilation (default: system specific, ``gcc`` on Linux) + * - ``CMAKE_CXX_COMPILER`` + - C++ compiler to be used for compilation (default: system specific, ``g++`` on Linux) + * - ``CMAKE_Fortran_COMPILER`` + - Fortran compiler to be used for compilation (default: system specific, ``gfortran`` on Linux) + * - ``CXX_COMPILER_LAUNCHER`` + - tool to launch the C++ compiler, e.g. ``ccache`` or ``distcc`` for faster compilation (default: empty) + +Some common LAMMPS specific variables +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. list-table:: + :header-rows: 1 + + * - Variable + - Description + * - ``BUILD_MPI`` + - build LAMMPS with MPI support (default: ``on`` if a working MPI available, else ``off``) + * - ``BUILD_OMP`` + - build LAMMPS with OpenMP support (default: ``on`` if compiler supports OpenMP fully, else ``off``) + * - ``BUILD_TOOLS`` + - compile some additional executables from the ``tools`` folder (default: ``off``) + * - ``BUILD_DOC`` + - include building the HTML format documentation for packaging/installing (default: ``off``) + * - ``CMAKE_TUNE_FLAGS`` + - common compiler flags, for optimization or instrumentation (default: compiler specific) + * - ``LAMMPS_MACHINE`` + - when set to ``name`` the LAMMPS executable and library will be called ``lmp_name`` and ``liblammps_name.a`` + * - ``LAMMPS_EXCEPTIONS`` + - when set to ``on`` errors will throw a C++ exception instead of aborting (default: ``off``) + * - ``FFT`` + - select which FFT library to use: ``FFTW3``, ``MKL``, ``KISS`` (default, unless FFTW3 is found) + * - ``FFT_SINGLE`` + - select whether to use single precision FFTs (default: ``off``) + * - ``WITH_JPEG`` + - whether to support JPEG format in :doc:`dump image ` (default: ``on`` if found) + * - ``WITH_PNG`` + - whether to support PNG format in :doc:`dump image ` (default: ``on`` if found) + * - ``WITH_GZIP`` + - whether to support reading and writing compressed files (default: ``on`` if found) + * - ``WITH_FFMPEG`` + - whether to support generating movies with :doc:`dump movie ` (default: ``on`` if found) + +Enabling or disabling LAMMPS packages +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +The LAMMPS software is organized into a common core that is always +included and a large number of :doc:`add-on packages ` that +have to be enabled to be included into a LAMMPS executable. Packages +are enabled through setting variables of the kind ``PKG_`` to +``on`` and disabled by setting them to ``off`` (or using ``yes``, +``no``, ``1``, ``0`` correspondingly). ```` has to be replaced by +the name of the package, e.g. ``MOLECULE`` or ``USER-MISC``. + + +Using presets +------------- + +Since LAMMPS has a lot of optional features and packages, specifying +them all on the command line can be tedious. Or when selecting a +different compiler toolchain, multiple options have to be changed +consistently and that is rather error prone. Or when enabling certain +packages, they require consistent settings to be operated in a +particular mode. For this purpose, we are providing a selection of +"preset files" for CMake in the folder ``cmake/presets``. They +represent a way to pre-load or override the CMake configuration cache by +setting or changing CMake variables. Preset files are loaded using the +*-C* command line flag. You can combine loading multiple preset files or +change some variables later with additional *-D* flags. A few examples: + +.. code-block:: bash + + cmake -C ../cmake/presets/minimal.cmake -D PKG_MISC=on ../cmake + cmake -C ../cmake/presets/clang.cmake -C ../cmake/presets/most.cmake ../cmake + cmake -C ../cmake/presets/minimal.cmake -D BUILD_MPI=off ../cmake + +The first command will install the packages ``KSPACE``, ``MANYBODY``, +``MOLECULE``, ``RIGID`` and ``MISC``; the first four from the preset +file and the fifth from the explicit variable definition. The second +command will first switch the compiler toolchain to use the Clang +compilers and install a large number of packages that are not depending +on any special external libraries or tools and are not very unusual. +The third command will enable the first four packages like above and +then enforce compiling LAMMPS as a serial program (using the MPI STUBS +library). + +It is also possible to do this incrementally. + +.. code-block:: bash + + cmake -C ../cmake/presets/minimal.cmake ../cmake + cmake -D PKG_MISC=on . + +will achieve the same configuration like in the first example above. In +this scenario it is particularly convenient to do the second +configuration step using either the text mode or graphical user +interface (``ccmake`` or ``cmake-gui``). + +Compilation and build targets +----------------------------- + +The actual compilation will be started by running the selected build +command (on Linux this is by default ``make``, see below how to select +alternatives). You can also use the portable command ``cmake --build .`` +which will adapt to whatever the selected build command is. +This is particularly convenient, if you have set a custom build command +via the ``CMAKE_MAKE_PROGRAM`` variable. + +When calling the build program, you can also select which "target" is to +be build through appending the ``--target`` flag and the name of the target +to the build command. When using ``make`` as build tool, you can just append +the target name to the command. Example: ``cmake --build . --target all`` or +``make all``. The following abstract targets are available: + +.. list-table:: + :header-rows: 1 + + * - Target + - Description + * - ``all`` + - build "everything" (default) + * - ``lammps`` + - build the LAMMPS library and executable + * - ``doc`` + - build the HTML documentation (if configured) + * - ``install`` + - install all target files into folders in ``CMAKE_INSTALL_PREFIX`` + * - ``test`` + - run some tests (if configured with ``-D ENABLE_TESTING=on``) + * - ``clean`` + - remove all generated files + + +Choosing generators +------------------- + +While CMake usually defaults to creating makefiles to compile software +with the ``make`` program, it supports multiple alternate build tools +(e.g. ``ninja-build`` which tends to be faster and more efficient in +parallelizing builds than ``make``) and can generate project files for +integrated development environments (IDEs) like VisualStudio, Eclipse or +CodeBlocks. This is specific to how the local CMake version was +configured and compiled. The list of available options can be seen at +the end of the output of ``cmake --help``. Example on Fedora 31 this is: + +.. code-block:: + + Generators + + The following generators are available on this platform (* marks default): + * Unix Makefiles = Generates standard UNIX makefiles. + Green Hills MULTI = Generates Green Hills MULTI files + (experimental, work-in-progress). + Ninja = Generates build.ninja files. + Ninja Multi-Config = Generates build-.ninja files. + Watcom WMake = Generates Watcom WMake makefiles. + CodeBlocks - Ninja = Generates CodeBlocks project files. + CodeBlocks - Unix Makefiles = Generates CodeBlocks project files. + CodeLite - Ninja = Generates CodeLite project files. + CodeLite - Unix Makefiles = Generates CodeLite project files. + Sublime Text 2 - Ninja = Generates Sublime Text 2 project files. + Sublime Text 2 - Unix Makefiles + = Generates Sublime Text 2 project files. + Kate - Ninja = Generates Kate project files. + Kate - Unix Makefiles = Generates Kate project files. + Eclipse CDT4 - Ninja = Generates Eclipse CDT 4.0 project files. + Eclipse CDT4 - Unix Makefiles= Generates Eclipse CDT 4.0 project files. + +Below is a screenshot of using the CodeBlocks IDE with the ninja build tool +after running CMake as follows: + +.. code-block:: bash + + cmake -G 'CodeBlocks - Ninja' ../cmake/presets/most.cmake ../cmake/ + +.. image:: JPG/cmake-codeblocks.png + :align: center diff --git a/doc/src/Howto_viscosity.rst b/doc/src/Howto_viscosity.rst index dff414ce9d4f18a4ce7add34f202fa77a2424e8e..8c7eb91b125244b3d551e7b3d0864a967b906484 100644 --- a/doc/src/Howto_viscosity.rst +++ b/doc/src/Howto_viscosity.rst @@ -1,10 +1,11 @@ Calculate viscosity =================== -The shear viscosity eta of a fluid can be measured in at least 5 ways +The shear viscosity eta of a fluid can be measured in at least 6 ways using various options in LAMMPS. See the examples/VISCOSITY directory for scripts that implement the 5 methods discussed here for a simple -Lennard-Jones fluid model. Also, see the :doc:`Howto kappa ` doc page for an analogous discussion for +Lennard-Jones fluid model and 1 method for SPC/E water model. +Also, see the :doc:`Howto kappa ` doc page for an analogous discussion for thermal conductivity. Eta is a measure of the propensity of a fluid to transmit momentum in @@ -130,9 +131,25 @@ time-integrated momentum fluxes play the role of Cartesian coordinates, whose mean-square displacement increases linearly with time at sufficiently long times. +The sixth is periodic perturbation method. It is also a non-equilibrium MD method. +However, instead of measure the momentum flux in response of applied velocity gradient, +it measures the velocity profile in response of applied stress. +A cosine-shaped periodic acceleration is added to the system via the +:doc:`fix accelerate/cos ` command, +and the :doc:`compute viscosity/cos` command is used to monitor the +generated velocity profile and remove the velocity bias before thermostatting. + +.. note:: + + An article by :ref:`(Hess) ` discussed the accuracy and efficiency of these methods. + ---------- .. _Daivis-viscosity: **(Daivis and Todd)** Daivis and Todd, Nonequilibrium Molecular Dynamics (book), Cambridge University Press, https://doi.org/10.1017/9781139017848, (2017). + +.. _Hess3: + +**(Hess)** Hess, B. The Journal of Chemical Physics 2002, 116 (1), 209-217. diff --git a/doc/src/Install_linux.rst b/doc/src/Install_linux.rst index ec4f3fcc8ec984e8161da618571e399b1f033cb5..ca3f794fc23a93caa2f952926b202ef183d3b7e8 100644 --- a/doc/src/Install_linux.rst +++ b/doc/src/Install_linux.rst @@ -24,12 +24,13 @@ allows you to install LAMMPS with a single command, and stay up-to-date with the current version of LAMMPS by simply updating your operating system. -To install the appropriate personal-package archive (PPA), do the +To install the appropriate personal-package archives (PPAs), do the following once: .. code-block:: bash $ sudo add-apt-repository ppa:gladky-anton/lammps + $ sudo add-apt-repository ppa:openkim/latest $ sudo apt-get update To install LAMMPS do the following once: @@ -38,7 +39,7 @@ To install LAMMPS do the following once: $ sudo apt-get install lammps-daily -This downloads an executable named "lmp_daily" to your box, which +This downloads an executable named ``lmp_daily`` to your box, which can then be used in the usual way to run input scripts: .. code-block:: bash @@ -60,29 +61,38 @@ To get a copy of the current documentation and examples: $ sudo apt-get install lammps-daily-doc which will download the doc files in -/usr/share/doc/lammps-daily-doc/doc and example problems in -/usr/share/doc/lammps-doc/examples. +``/usr/share/doc/lammps-daily-doc/doc`` and example problems in +``/usr/share/doc/lammps-doc/examples``. -Note that you may still wish to download the tarball to get potential -files and auxiliary tools. +To get a copy of the current potentials files: -To un-install LAMMPS, do the following: +.. code-block:: bash + + $ sudo apt-get install lammps-daily-data + +which will download the potentials files to +``/usr/share/lammps-daily/potentials``. The ``lmp_daily`` binary is +hard-coded to look for potential files in this directory (it does not +use the `LAMMPS_POTENTIALS` environment variable, as described +in :doc:`pair_coeff ` command). + +The ``lmp_daily`` binary is built with the :ref:`KIM package ` which +results in the above command also installing the `kim-api` binaries when LAMMPS +is installed. In order to use potentials from `openkim.org `_, you +can install the `openkim-models` package .. code-block:: bash - $ sudo apt-get remove lammps-daily + $ sudo apt-get install openkim-models -Note that the lammps-daily executable is built with the following -sequence of make commands, as if you had done the same with the -unpacked tarball files in the src directory: +To un-install LAMMPS, do the following: .. code-block:: bash - $ make yes-all - $ make no-lib - $ make mpi + $ sudo apt-get remove lammps-daily -Thus it builds with FFTW3 and OpenMPI. +Please use ``lmp_daily -help`` to see which compilation options, packages, +and styles are included in the binary. Thanks to Anton Gladky (gladky.anton at gmail.com) for setting up this Ubuntu package capability. @@ -103,14 +113,14 @@ linking to the C library interface (lammps-devel, lammps-mpich-devel, lammps-openmpi-devel), the header for compiling programs using the C library interface (lammps-headers), and the LAMMPS python module for Python 3. All packages can be installed at the same -time and the name of the LAMMPS executable is *lmp* and *lmp_openmpi* -or *lmp_mpich* respectively. By default, *lmp* will refer to the +time and the name of the LAMMPS executable is ``lmp`` and ``lmp_openmpi`` +or ``lmp_mpich`` respectively. By default, ``lmp`` will refer to the serial executable, unless one of the MPI environment modules is loaded -("module load mpi/mpich-x86_64" or "module load mpi/openmpi-x86_64"). +(``module load mpi/mpich-x86_64`` or ``module load mpi/openmpi-x86_64``). Then the corresponding parallel LAMMPS executable can be used. The same mechanism applies when loading the LAMMPS python module. -To install LAMMPS with OpenMPI and run an input in.lj with 2 CPUs do: +To install LAMMPS with OpenMPI and run an input ``in.lj`` with 2 CPUs do: .. code-block:: bash @@ -118,10 +128,10 @@ To install LAMMPS with OpenMPI and run an input in.lj with 2 CPUs do: $ module load mpi/openmpi-x86_64 $ mpirun -np 2 lmp -in in.lj -The "dnf install" command is needed only once. In case of a new LAMMPS -stable release, "dnf update" will automatically update to the newer +The ``dnf install`` command is needed only once. In case of a new LAMMPS +stable release, ``dnf update`` will automatically update to the newer version as soon at the RPM files are built and uploaded to the download -mirrors. The "module load" command is needed once per (shell) session +mirrors. The ``module load`` command is needed once per (shell) session or shell terminal instance, unless it is automatically loaded from the shell profile. @@ -134,7 +144,7 @@ can install the `openkim-models` package $ dnf install openkim-models -Please use "lmp -help" to see which compilation options, packages, +Please use ``lmp -help`` to see which compilation options, packages, and styles are included in the binary. Thanks to Christoph Junghans (LANL) for making LAMMPS available in Fedora. @@ -153,10 +163,10 @@ in the `Extra Packages for Enterprise Linux (EPEL) repository ` which diff --git a/doc/src/Install_mac.rst b/doc/src/Install_mac.rst index 41b53c0595c4e796c0ac99192b466b1c01321b14..642169ffe5ff1ae0a5f4324e8e9a3d77a6f69922 100644 --- a/doc/src/Install_mac.rst +++ b/doc/src/Install_mac.rst @@ -34,9 +34,9 @@ install the `openkim-models` package % brew install openkim-models If you have problems with the installation you can post issues to -`this link `_. +`this link `_. -.. _homebrew: https://github.com/Homebrew/homebrew-core/issues +.. _homebrew: https://brew.sh Thanks to Derek Thomas (derekt at cello.t.u-tokyo.ac.jp) for setting up the Homebrew capability. diff --git a/doc/src/JPG/bow_tutorial_01.png b/doc/src/JPG/bow_tutorial_01.png old mode 100755 new mode 100644 diff --git a/doc/src/JPG/bow_tutorial_01_small.png b/doc/src/JPG/bow_tutorial_01_small.png old mode 100755 new mode 100644 diff --git a/doc/src/JPG/bow_tutorial_02.png b/doc/src/JPG/bow_tutorial_02.png old mode 100755 new mode 100644 diff --git a/doc/src/JPG/bow_tutorial_02_small.png b/doc/src/JPG/bow_tutorial_02_small.png old mode 100755 new mode 100644 diff --git a/doc/src/JPG/bow_tutorial_03.png b/doc/src/JPG/bow_tutorial_03.png old mode 100755 new mode 100644 diff --git a/doc/src/JPG/bow_tutorial_03_small.png b/doc/src/JPG/bow_tutorial_03_small.png old mode 100755 new mode 100644 diff --git a/doc/src/JPG/bow_tutorial_04.png b/doc/src/JPG/bow_tutorial_04.png old mode 100755 new mode 100644 diff --git a/doc/src/JPG/bow_tutorial_04_small.png b/doc/src/JPG/bow_tutorial_04_small.png old mode 100755 new mode 100644 diff --git a/doc/src/JPG/bow_tutorial_05.png b/doc/src/JPG/bow_tutorial_05.png old mode 100755 new mode 100644 diff --git a/doc/src/JPG/bow_tutorial_06.png b/doc/src/JPG/bow_tutorial_06.png old mode 100755 new mode 100644 diff --git a/doc/src/JPG/bow_tutorial_07.png b/doc/src/JPG/bow_tutorial_07.png old mode 100755 new mode 100644 diff --git a/doc/src/JPG/bow_tutorial_08.png b/doc/src/JPG/bow_tutorial_08.png old mode 100755 new mode 100644 diff --git a/doc/src/JPG/bow_tutorial_09.png b/doc/src/JPG/bow_tutorial_09.png old mode 100755 new mode 100644 diff --git a/doc/src/JPG/bow_tutorial_10.png b/doc/src/JPG/bow_tutorial_10.png old mode 100755 new mode 100644 diff --git a/doc/src/JPG/ccmake-config.png b/doc/src/JPG/ccmake-config.png new file mode 100644 index 0000000000000000000000000000000000000000..ef7508964653c4c217f36ed39b5c4fdb93e175ce Binary files /dev/null and b/doc/src/JPG/ccmake-config.png differ diff --git a/doc/src/JPG/ccmake-initial.png b/doc/src/JPG/ccmake-initial.png new file mode 100644 index 0000000000000000000000000000000000000000..d6291afde52f96d0debf00affca6864ba821b663 Binary files /dev/null and b/doc/src/JPG/ccmake-initial.png differ diff --git a/doc/src/JPG/ccmake-options.png b/doc/src/JPG/ccmake-options.png new file mode 100644 index 0000000000000000000000000000000000000000..b05d58c1d2e87d48128fa3538d56bc935ddc3b95 Binary files /dev/null and b/doc/src/JPG/ccmake-options.png differ diff --git a/doc/src/JPG/cmake-codeblocks.png b/doc/src/JPG/cmake-codeblocks.png new file mode 100644 index 0000000000000000000000000000000000000000..d0d96fec8c5666fe3eb0721c426a435ea73c8167 Binary files /dev/null and b/doc/src/JPG/cmake-codeblocks.png differ diff --git a/doc/src/JPG/cmake-gui-initial.png b/doc/src/JPG/cmake-gui-initial.png new file mode 100644 index 0000000000000000000000000000000000000000..062bc6ba836c3ab6ecf7ea31954362e0441353b8 Binary files /dev/null and b/doc/src/JPG/cmake-gui-initial.png differ diff --git a/doc/src/JPG/cmake-gui-options.png b/doc/src/JPG/cmake-gui-options.png new file mode 100644 index 0000000000000000000000000000000000000000..abbf63494612a88e2223d28f12474d28db374613 Binary files /dev/null and b/doc/src/JPG/cmake-gui-options.png differ diff --git a/doc/src/JPG/cmake-gui-popup.png b/doc/src/JPG/cmake-gui-popup.png new file mode 100644 index 0000000000000000000000000000000000000000..d623aad30b4be2364a466fdde4af5241a0eb87dc Binary files /dev/null and b/doc/src/JPG/cmake-gui-popup.png differ diff --git a/doc/src/JPG/coverage-file-branches.png b/doc/src/JPG/coverage-file-branches.png new file mode 100644 index 0000000000000000000000000000000000000000..8bf3b6eefd306405adb50d0280ff38fd9e83f8be Binary files /dev/null and b/doc/src/JPG/coverage-file-branches.png differ diff --git a/doc/src/JPG/coverage-file-top.png b/doc/src/JPG/coverage-file-top.png new file mode 100644 index 0000000000000000000000000000000000000000..cc834be27f83adb7c86aa9e71ad3efdc44f0110a Binary files /dev/null and b/doc/src/JPG/coverage-file-top.png differ diff --git a/doc/src/JPG/coverage-overview-manybody.png b/doc/src/JPG/coverage-overview-manybody.png new file mode 100644 index 0000000000000000000000000000000000000000..85fad27f74d3c22c16ebacee74f0e0f725f55875 Binary files /dev/null and b/doc/src/JPG/coverage-overview-manybody.png differ diff --git a/doc/src/JPG/coverage-overview-top.png b/doc/src/JPG/coverage-overview-top.png new file mode 100644 index 0000000000000000000000000000000000000000..e57486a2936853ce1f0dd6677fea90916849fbae Binary files /dev/null and b/doc/src/JPG/coverage-overview-top.png differ diff --git a/doc/src/JPG/offload_knc.png b/doc/src/JPG/offload_knc.png old mode 100755 new mode 100644 diff --git a/doc/src/JPG/rhodo_staggered.jpg b/doc/src/JPG/rhodo_staggered.jpg old mode 100755 new mode 100644 diff --git a/doc/src/JPG/saed_ewald_intersect.jpg b/doc/src/JPG/saed_ewald_intersect.jpg old mode 100755 new mode 100644 diff --git a/doc/src/JPG/saed_ewald_intersect_small.jpg b/doc/src/JPG/saed_ewald_intersect_small.jpg old mode 100755 new mode 100644 diff --git a/doc/src/JPG/saed_mesh.jpg b/doc/src/JPG/saed_mesh.jpg old mode 100755 new mode 100644 diff --git a/doc/src/JPG/saed_mesh_small.jpg b/doc/src/JPG/saed_mesh_small.jpg old mode 100755 new mode 100644 diff --git a/doc/src/JPG/user_intel.png b/doc/src/JPG/user_intel.png old mode 100755 new mode 100644 diff --git a/doc/src/JPG/xrd_mesh.jpg b/doc/src/JPG/xrd_mesh.jpg old mode 100755 new mode 100644 diff --git a/doc/src/JPG/xrd_mesh_small.jpg b/doc/src/JPG/xrd_mesh_small.jpg old mode 100755 new mode 100644 diff --git a/doc/src/Modify_atom.rst b/doc/src/Modify_atom.rst index f863da3157d614329343d4b3c800d48c58cb7b4f..34a529020a274c4a196e5c351f2a8726ce34c06d 100644 --- a/doc/src/Modify_atom.rst +++ b/doc/src/Modify_atom.rst @@ -3,115 +3,169 @@ Atom styles Classes that define an :doc:`atom style ` are derived from the AtomVec class and managed by the Atom class. The atom style -determines what attributes are associated with an atom. A new atom -style can be created if one of the existing atom styles does not -define all the attributes you need to store and communicate with -atoms. - -Atom_vec_atomic.cpp is a simple example of an atom style. - -Here is a brief description of methods you define in your new derived -class. See atom_vec.h for details. - -+-------------------------+--------------------------------------------------------------------------------+ -| init | one time setup (optional) | -+-------------------------+--------------------------------------------------------------------------------+ -| grow | re-allocate atom arrays to longer lengths (required) | -+-------------------------+--------------------------------------------------------------------------------+ -| grow_reset | make array pointers in Atom and AtomVec classes consistent (required) | -+-------------------------+--------------------------------------------------------------------------------+ -| copy | copy info for one atom to another atom's array locations (required) | -+-------------------------+--------------------------------------------------------------------------------+ -| pack_comm | store an atom's info in a buffer communicated every timestep (required) | -+-------------------------+--------------------------------------------------------------------------------+ -| pack_comm_vel | add velocity info to communication buffer (required) | -+-------------------------+--------------------------------------------------------------------------------+ -| pack_comm_hybrid | store extra info unique to this atom style (optional) | -+-------------------------+--------------------------------------------------------------------------------+ -| unpack_comm | retrieve an atom's info from the buffer (required) | -+-------------------------+--------------------------------------------------------------------------------+ -| unpack_comm_vel | also retrieve velocity info (required) | -+-------------------------+--------------------------------------------------------------------------------+ -| unpack_comm_hybrid | retrieve extra info unique to this atom style (optional) | -+-------------------------+--------------------------------------------------------------------------------+ -| pack_reverse | store an atom's info in a buffer communicating partial forces (required) | -+-------------------------+--------------------------------------------------------------------------------+ -| pack_reverse_hybrid | store extra info unique to this atom style (optional) | -+-------------------------+--------------------------------------------------------------------------------+ -| unpack_reverse | retrieve an atom's info from the buffer (required) | -+-------------------------+--------------------------------------------------------------------------------+ -| unpack_reverse_hybrid | retrieve extra info unique to this atom style (optional) | -+-------------------------+--------------------------------------------------------------------------------+ -| pack_border | store an atom's info in a buffer communicated on neighbor re-builds (required) | -+-------------------------+--------------------------------------------------------------------------------+ -| pack_border_vel | add velocity info to buffer (required) | -+-------------------------+--------------------------------------------------------------------------------+ -| pack_border_hybrid | store extra info unique to this atom style (optional) | -+-------------------------+--------------------------------------------------------------------------------+ -| unpack_border | retrieve an atom's info from the buffer (required) | -+-------------------------+--------------------------------------------------------------------------------+ -| unpack_border_vel | also retrieve velocity info (required) | -+-------------------------+--------------------------------------------------------------------------------+ -| unpack_border_hybrid | retrieve extra info unique to this atom style (optional) | -+-------------------------+--------------------------------------------------------------------------------+ -| pack_exchange | store all an atom's info to migrate to another processor (required) | -+-------------------------+--------------------------------------------------------------------------------+ -| unpack_exchange | retrieve an atom's info from the buffer (required) | -+-------------------------+--------------------------------------------------------------------------------+ -| size_restart | number of restart quantities associated with proc's atoms (required) | -+-------------------------+--------------------------------------------------------------------------------+ -| pack_restart | pack atom quantities into a buffer (required) | -+-------------------------+--------------------------------------------------------------------------------+ -| unpack_restart | unpack atom quantities from a buffer (required) | -+-------------------------+--------------------------------------------------------------------------------+ -| create_atom | create an individual atom of this style (required) | -+-------------------------+--------------------------------------------------------------------------------+ -| data_atom | parse an atom line from the data file (required) | -+-------------------------+--------------------------------------------------------------------------------+ -| data_atom_hybrid | parse additional atom info unique to this atom style (optional) | -+-------------------------+--------------------------------------------------------------------------------+ -| data_vel | parse one line of velocity information from data file (optional) | -+-------------------------+--------------------------------------------------------------------------------+ -| data_vel_hybrid | parse additional velocity data unique to this atom style (optional) | -+-------------------------+--------------------------------------------------------------------------------+ -| memory_usage | tally memory allocated by atom arrays (required) | -+-------------------------+--------------------------------------------------------------------------------+ - -The constructor of the derived class sets values for several variables -that you must set when defining a new atom style, which are documented -in atom_vec.h. New atom arrays are defined in atom.cpp. Search for -the word "customize" and you will find locations you will need to -modify. - -.. note:: - - It is possible to add some attributes, such as a molecule ID, to - atom styles that do not have them via the :doc:`fix property/atom ` command. This command also - allows new custom attributes consisting of extra integer or - floating-point values to be added to atoms. See the :doc:`fix property/atom ` doc page for examples of cases - where this is useful and details on how to initialize, access, and - output the custom values. - -New :doc:`pair styles `, :doc:`fixes `, or -:doc:`computes ` can be added to LAMMPS, as discussed below. -The code for these classes can use the per-atom properties defined by -fix property/atom. The Atom class has a find_custom() method that is -useful in this context: - -.. code-block:: c++ - - int index = atom->find_custom(char *name, int &flag); - -The "name" of a custom attribute, as specified in the :doc:`fix property/atom ` command, is checked to verify -that it exists and its index is returned. The method also sets flag = -0/1 depending on whether it is an integer or floating-point attribute. -The vector of values associated with the attribute can then be -accessed using the returned index as - -.. code-block:: c++ - - int *ivector = atom->ivector[index]; - double *dvector = atom->dvector[index]; - -Ivector or dvector are vectors of length Nlocal = # of owned atoms, -which store the attributes of individual atoms. +determines what attributes are associated with an atom and +communicated when it is a ghost atom or migrates to a new processor. +A new atom style can be created if one of the existing atom styles +does not define all the attributes you need to store and communicate +with atoms. + +Atom_vec_atomic.cpp is the simplest example of an atom style. +Examining the code for others will make these instructions more clear. + +Note that the :doc:`atom style hybrid ` command can be +used to define atoms or particles which have the union of properties +of individual styles. Also the :doc:`fix property/atom ` +command can be used to add a single property (e.g. charge +or a molecule ID) to a style that does not have it. It can also be +used to add custom properties to an atom, with options to communicate +them with ghost atoms or read them from a data file. Other LAMMPS +commands can access these custom properties, as can new pair, fix, +compute styles that are written to work with these properties. For +example, the :doc:`set ` command can be used to set the values of +custom per-atom properties from an input script. All of these methods +are less work than writing code for a new atom style. + +If you follow these directions your new style will automatically work +in tandem with others via the :doc:`atom_style hybrid ` +command. + +The first step is to define a set of strings in the constructor of the +new derived class. Each string will have zero or more space-separated +variable names which are identical to those used in the atom.h header +file for per-atom properties. Note that some represent per-atom +vectors (q, molecule) while other are per-atom arrays (x,v). For all +but the last 2 strings you do not need to specify any of +(id,type,x,v,f). Those are included automatically as needed in the +other strings. + +.. list-table:: + + * - fields_grow + - full list of properties which is allocated and stored + * - fields_copy + - list of properties to copy atoms are rearranged on-processor + * - fields_comm + - list of properties communicated to ghost atoms every step + * - fields_comm_vel + - additional properties communicated if :doc:`comm_modify vel ` is used + * - fields_reverse + - list of properties summed from ghost atoms every step + * - fields_border + - list of properties communicated with ghost atoms every reneighboring step + * - fields_border_vel + - additional properties communicated if :doc:`comm_modify vel ` is used + * - fields_exchange + - list of properties communicated when an atom migrates to another processor + * - fields_restart + - list of properties written/read to/from a restart file + * - fields_create + - list of properties defined when an atom is created by :doc:`create_atoms ` + * - fields_data_atom + - list of properties (in order) in the Atoms section of a data file, as read by :doc:`read_data ` + * - fields_data_vel + - list of properties (in order) in the Velocities section of a data file, as read by :doc:`read_data ` + +In these strings you can list variable names which LAMMPS already +defines (in some other atom style), or you can create new variable +names. You should not re-use a LAMMPS variable for something with +different meaning in your atom style. If the meaning is related, but +interpreted differently by your atom style, then using the same +variable name means a user should not use your style and the other +style together in a :doc:`atom_style hybrid ` command. +Because there will only be one value of the variable and different +parts of LAMMPS will then likely use it differently. LAMMPS has +no way of checking for this. + +If you are defining new variable names then make them descriptive and +unique to your new atom style. For example choosing "e" for energy is +a bad choice; it is too generic. A better choice would be "e_foo", +where "foo" is specific to your style. + +If any of the variable names in your new atom style do not exist in +LAMMPS, you need to add them to the src/atom.h and atom.cpp files. + +Search for the word "customize" or "customization" in these 2 files to +see where to add your variable. Adding a flag to the 2nd +customization section in atom.h is only necessary if your code (e.g. a +pair style) needs to check that a per-atom property is defined. These +flags should also be set in the constructor of the atom style child +class. + +In atom.cpp, aside from the constructor and destructor, there are 3 +methods that a new variable name or flag needs to be added to. + +In Atom::peratom_create() when using the add_peratom() method, a +final length argument of 0 is for per-atom vectors, a length > 1 is +for per-atom arrays. Note the use of an extra per-thread flag and the +add_peratom_vary() method when last dimension of the array is +variable-length. + +Adding the variable name to Atom::extract() enable the per-atom data +to be accessed through the :doc:`LAMMPS library interface +` by a calling code, including from :doc:`Python +`. + +The constructor of the new atom style will also typically set a few +flags which are defined at the top of atom_vec.h. If these are +unclear, see how other atom styles use them. + +The grow_pointers() method is also required to make +a copy of peratom data pointers, as explained in the code. + +There are a number of other optional methods which your atom style can +implement. These are only needed if you need to do something +out-of-the-ordinary which the default operation of the AtomVec parent +class does not take care of. The best way to figure out why they are +sometimes useful is to look at how other atom styles use them. + +* process_args = use if the atom style has arguments +* init = called before each run +* force_clear = called before force computations each timestep + +A few atom styles define "bonus" data associated with some or all of +their particles, such as :doc:`atom_style ellipsoid or tri +`. These methods work with that data: + +* copy_bonus +* clear_bonus +* pack_comm_bonus +* unpack_comm_bonus +* pack_border_bonus +* unpack_border_bonus +* pack_exchange_bonus +* unpack_exchange_bonus +* size_restart_bonus +* pack_restart_bonus +* unpack_restart_bonus +* data_atom_bonus +* memory_usage_bonus + +The :doc:`atom_style body ` command can define a particle +geometry with an arbitrary number of values. This method reads it +from a data file: + +* data_body + +These methods are called before or after operations handled by the +parent AtomVec class. They allow an atom style to do customized +operations on the per-atom values. For example :doc:`atom_style +sphere ` reads a diameter and density of each particle +from a data file. But these need to be converted internally to a +radius and mass. That operation is done in the data_atom_post() +method. + +* pack_restart_pre +* pack_restart_post +* unpack_restart_init +* create_atom_post +* data_atom_post +* pack_data_pre +* pack_data_post + +These methods enable the :doc:`compute property/atom ` +command to access per-atom variables it does not +already define as arguments, so that they can be written to a dump +file or used by other LAMMPS commands. + +* property_atom +* pack_property_atom diff --git a/doc/src/Packages_details.rst b/doc/src/Packages_details.rst index 8251c5301ea8885d7b418b15e51b870b9082fb46..2353df777fc36b1bd8c36d48c7aaa734d9eaa2f9 100644 --- a/doc/src/Packages_details.rst +++ b/doc/src/Packages_details.rst @@ -2064,7 +2064,7 @@ molecules, and chiral-sensitive reactions. * examples/USER/reaction * `2017 LAMMPS Workshop `_ * `2019 LAMMPS Workshop `_ -* disarmmd.org +* reacter.org ---------- diff --git a/doc/src/Python_shlib.rst b/doc/src/Python_shlib.rst index 0c86362e1293d7fc6a7d5139bbf1e23ec33e3526..b02fcd7bb861aafeec10b8c6ed072f8dc2711ed9 100644 --- a/doc/src/Python_shlib.rst +++ b/doc/src/Python_shlib.rst @@ -1,6 +1,8 @@ Build LAMMPS as a shared library ================================ +.. TODO this is mostly redundant and should be addressed in the 'progguide' branch if it has not already + Build LAMMPS as a shared library using make ------------------------------------------- @@ -14,7 +16,7 @@ From the src directory, type .. code-block:: bash - make foo mode=shlib + make foo mode=shared where foo is the machine target name, such as mpi or serial. This should create the file liblammps_foo.so in the src directory, as @@ -39,7 +41,6 @@ shared library: .. code-block:: bash - -D BUILD_LIB=on # enable building LAMMPS as a library -D BUILD_SHARED_LIBS=on # enable building of LAMMPS shared library (both options are needed!) What this does is create a liblammps.so which contains the majority of LAMMPS @@ -59,7 +60,7 @@ CMAKE_INSTALL_PREFIX. # build library mkdir build cd build - cmake -D PKG_PYTHON=on -D BUILD_LIB=on -D BUILD_SHARED_LIBS=on -D CMAKE_INSTALL_PREFIX=$VIRTUAL_ENV ../cmake + cmake -D PKG_PYTHON=on -D BUILD_SHARED_LIBS=on -D CMAKE_INSTALL_PREFIX=$VIRTUAL_ENV ../cmake make -j 4 # install into prefix diff --git a/doc/src/Speed_compare.rst b/doc/src/Speed_compare.rst index d3947ec3ef856b4d22d6b8b2c5968974184516d5..4ab616a5dab8903fe864c0f4d5a2c1c8de271d4e 100644 --- a/doc/src/Speed_compare.rst +++ b/doc/src/Speed_compare.rst @@ -87,7 +87,7 @@ section below for examples where this has been done. * The GPU package requires neighbor lists to be built on the CPU when using exclusion lists, or a triclinic simulation box. * The GPU package can be compiled for CUDA or OpenCL and thus supports - both, Nvidia and AMD GPUs well. On Nvidia hardware, using CUDA is typically + both, NVIDIA and AMD GPUs well. On NVIDIA hardware, using CUDA is typically resulting in equal or better performance over OpenCL. * OpenCL in the GPU package does theoretically also support Intel CPUs or Intel Xeon Phi, but the native support for those in KOKKOS (or USER-INTEL) diff --git a/doc/src/Speed_kokkos.rst b/doc/src/Speed_kokkos.rst index ab8444b845d5e559c3c515765027b94abd9e0623..3269564d2145a51992591e2062399bc7b8ed4a56 100644 --- a/doc/src/Speed_kokkos.rst +++ b/doc/src/Speed_kokkos.rst @@ -9,10 +9,7 @@ different back end languages such as CUDA, OpenMP, or Pthreads. The Kokkos library also provides data abstractions to adjust (at compile time) the memory layout of data structures like 2d and 3d arrays to optimize performance on different hardware. For more information on -Kokkos, see `GitHub `_. Kokkos is -part of `Trilinos `_. The Kokkos -library was written primarily by Carter Edwards, Christian Trott, and -Dan Sunderland (all Sandia). +Kokkos, see `GitHub `_. The LAMMPS KOKKOS package contains versions of pair, fix, and atom styles that use data structures and macros provided by the Kokkos @@ -21,7 +18,7 @@ package was developed primarily by Christian Trott (Sandia) and Stan Moore (Sandia) with contributions of various styles by others, including Sikandar Mashayak (UIUC), Ray Shan (Sandia), and Dan Ibanez (Sandia). For more information on developing using Kokkos abstractions -see the Kokkos programmers' guide at /lib/kokkos/doc/Kokkos_PG.pdf. +see the Kokkos `Wiki `_. Kokkos currently provides support for 3 modes of execution (per MPI task). These are Serial (MPI-only for CPUs and Intel Phi), OpenMP @@ -31,33 +28,30 @@ compatible with specific hardware. .. note:: - Kokkos support within LAMMPS must be built with a C++11 compatible - compiler. This means GCC version 4.7.2 or later, Intel 14.0.4 or later, or - Clang 3.5.2 or later is required. - -.. note:: - - To build with Kokkos support for NVIDIA GPUs, NVIDIA CUDA + To build with Kokkos support for NVIDIA GPUs, the NVIDIA CUDA toolkit software version 9.0 or later must be installed on your system. See - the discussion for the :doc:`GPU package ` for details of how - to check and do this. + the discussion for the :doc:`GPU package ` for details of + how to check and do this. .. note:: - Kokkos with CUDA currently implicitly assumes that the MPI library - is CUDA-aware. This is not always the case, especially when using - pre-compiled MPI libraries provided by a Linux distribution. This is not - a problem when using only a single GPU with a single MPI rank. When - running with multiple MPI ranks, you may see segmentation faults without - CUDA-aware MPI support. These can be avoided by adding the flags :doc:`-pk kokkos cuda/aware off ` to the LAMMPS command line or by - using the command :doc:`package kokkos cuda/aware off ` in the - input file. + Kokkos with CUDA currently implicitly assumes that the MPI library is + CUDA-aware. This is not always the case, especially when using + pre-compiled MPI libraries provided by a Linux distribution. This is + not a problem when using only a single GPU with a single MPI + rank. When running with multiple MPI ranks, you may see segmentation + faults without CUDA-aware MPI support. These can be avoided by adding + the flags :doc:`-pk kokkos cuda/aware off ` to the + LAMMPS command line or by using the command :doc:`package kokkos + cuda/aware off ` in the input file. -**Building LAMMPS with the KOKKOS package:** +Building LAMMPS with the KOKKOS package +""""""""""""""""""""""""""""""""""""""" See the :ref:`Build extras ` doc page for instructions. -**Running LAMMPS with the KOKKOS package:** +Running LAMMPS with the KOKKOS package +"""""""""""""""""""""""""""""""""""""" All Kokkos operations occur within the context of an individual MPI task running on a single node of the machine. The total number of MPI @@ -66,7 +60,8 @@ usual manner via the mpirun or mpiexec commands, and is independent of Kokkos. E.g. the mpirun command in OpenMPI does this via its -np and -npernode switches. Ditto for MPICH via -np and -ppn. -**Running on a multi-core CPU:** +Running on a multi-core CPU +^^^^^^^^^^^^^^^^^^^^^^^^^^^ Here is a quick overview of how to use the KOKKOS package for CPU acceleration, assuming one or more 16-core nodes. @@ -142,7 +137,8 @@ atom. When using the Kokkos Serial back end or the OpenMP back end with a single thread, no duplication or atomic operations are used. For CUDA and half neighbor lists, the KOKKOS package always uses atomic operations. -**Core and Thread Affinity:** +CPU Cores, Sockets and Thread Affinity +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ When using multi-threading, it is important for performance to bind both MPI tasks to physical cores, and threads to physical cores, so @@ -156,15 +152,16 @@ for your MPI installation), binding can be forced with these flags: OpenMPI 1.8: mpirun -np 2 --bind-to socket --map-by socket ./lmp_openmpi ... Mvapich2 2.0: mpiexec -np 2 --bind-to socket --map-by socket ./lmp_mvapich ... -For binding threads with KOKKOS OpenMP, use thread affinity -environment variables to force binding. With OpenMP 3.1 (gcc 4.7 or -later, intel 12 or later) setting the environment variable -OMP_PROC_BIND=true should be sufficient. In general, for best -performance with OpenMP 4.0 or better set OMP_PROC_BIND=spread and -OMP_PLACES=threads. For binding threads with the KOKKOS pthreads -option, compile LAMMPS the KOKKOS HWLOC=yes option as described below. +For binding threads with KOKKOS OpenMP, use thread affinity environment +variables to force binding. With OpenMP 3.1 (gcc 4.7 or later, intel 12 +or later) setting the environment variable ``OMP_PROC_BIND=true`` should +be sufficient. In general, for best performance with OpenMP 4.0 or later +set ``OMP_PROC_BIND=spread`` and ``OMP_PLACES=threads``. For binding +threads with the KOKKOS pthreads option, compile LAMMPS with the hwloc +or libnuma support enabled as described in the :ref:`extra build options page `. -**Running on Knight's Landing (KNL) Intel Xeon Phi:** +Running on Knight's Landing (KNL) Intel Xeon Phi +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Here is a quick overview of how to use the KOKKOS package for the Intel Knight's Landing (KNL) Xeon Phi: @@ -222,7 +219,8 @@ threads/task as Nt. The product of these two values should be N, i.e. them in "native" mode, not "offload" mode like the USER-INTEL package supports. -**Running on GPUs:** +Running on GPUs +^^^^^^^^^^^^^^^ Use the "-k" :doc:`command-line switch ` to specify the number of GPUs per node. Typically the -np setting of the mpirun command @@ -257,7 +255,7 @@ one or more nodes, each with two GPUs: running on GPUs is to use "full" neighbor lists and set the Newton flag to "off" for both pairwise and bonded interactions, along with threaded communication. When running on Maxwell or Kepler GPUs, this will - typically be best. For Pascal GPUs, using "half" neighbor lists and + typically be best. For Pascal GPUs and beyond, using "half" neighbor lists and setting the Newton flag to "on" may be faster. For many pair styles, setting the neighbor binsize equal to twice the CPU default value will give speedup, which is the default when running on GPUs. Use the "-pk @@ -270,13 +268,6 @@ one or more nodes, each with two GPUs: mpirun -np 2 lmp_kokkos_cuda_openmpi -k on g 2 -sf kk -pk kokkos newton on neigh half binsize 2.8 -in in.lj # Newton on, half neighbor list, set binsize = neighbor ghost cutoff -.. note:: - - For good performance of the KOKKOS package on GPUs, you must - have Kepler generation GPUs (or later). The Kokkos library exploits - texture cache options not supported by Telsa generation GPUs (or - older). - .. note:: When using a GPU, you will achieve the best performance if your @@ -293,7 +284,8 @@ one or more nodes, each with two GPUs: kspace, etc., you must set the environment variable CUDA_LAUNCH_BLOCKING=1. However, this will reduce performance and is not recommended for production runs. -**Run with the KOKKOS package by editing an input script:** +Run with the KOKKOS package by editing an input script +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Alternatively the effect of the "-sf" or "-pk" switches can be duplicated by adding the :doc:`package kokkos ` or :doc:`suffix kk ` commands to your input script. @@ -316,17 +308,24 @@ You only need to use the :doc:`package kokkos ` command if you wish to change any of its option defaults, as set by the "-k on" :doc:`command-line switch `. -**Using OpenMP threading and CUDA together (experimental):** +**Using OpenMP threading and CUDA together:** With the KOKKOS package, both OpenMP multi-threading and GPUs can be -used together in a few special cases. In the Makefile, the -KOKKOS_DEVICES variable must include both "Cuda" and "OpenMP", as is -the case for /src/MAKE/OPTIONS/Makefile.kokkos_cuda_mpi +compiled and used together in a few special cases. In the makefile for +the conventional build, the KOKKOS_DEVICES variable must include both, +"Cuda" and "OpenMP", as is the case for ``/src/MAKE/OPTIONS/Makefile.kokkos_cuda_mpi``. .. code-block:: bash KOKKOS_DEVICES=Cuda,OpenMP +When building with CMake you need to enable both features as it is done +in the ``kokkos-cuda.cmake`` CMake preset file. + +.. code-block:: bash + + cmake ../cmake -DKokkos_ENABLE_CUDA=yes -DKokkos_ENABLE_OPENMP=yes + The suffix "/kk" is equivalent to "/kk/device", and for Kokkos CUDA, using the "-sf kk" in the command line gives the default CUDA version everywhere. However, if the "/kk/host" suffix is added to a specific @@ -360,7 +359,8 @@ suffix for kspace and bonds, angles, etc. in the input file and the sure the environment variable CUDA_LAUNCH_BLOCKING is not set to "1" so CPU/GPU overlap can occur. -**Speed-ups to expect:** +Performance to expect +""""""""""""""""""""" The performance of KOKKOS running in different modes is a function of your hardware, which KOKKOS-enable styles are used, and the problem @@ -377,52 +377,26 @@ Generally speaking, the following rules of thumb apply: performance of a KOKKOS style is a bit slower than the USER-OMP package. * When running large number of atoms per GPU, KOKKOS is typically faster - than the GPU package. + than the GPU package when compiled for double precision. The benefit + of using single or mixed precision with the GPU package depends + significantly on the hardware in use and the simulated system and pair + style. * When running on Intel hardware, KOKKOS is not as fast as - the USER-INTEL package, which is optimized for that hardware. + the USER-INTEL package, which is optimized for x86 hardware (not just + from Intel) and compilation with the Intel compilers. The USER-INTEL + package also can increase the vector length of vector instructions + by switching to single or mixed precision mode. See the `Benchmark page `_ of the LAMMPS web site for performance of the KOKKOS package on different hardware. -**Advanced Kokkos options:** - -There are other allowed options when building with the KOKKOS package. -As explained on the :ref:`Build extras ` doc page, -they can be set either as variables on the make command line or in -Makefile.machine, or they can be specified as CMake variables. Each -takes a value shown below. The default value is listed, which is set -in the lib/kokkos/Makefile.kokkos file. - -* KOKKOS_DEBUG, values = *yes*\ , *no*\ , default = *no* -* KOKKOS_USE_TPLS, values = *hwloc*\ , *librt*\ , *experimental_memkind*, default = *none* -* KOKKOS_CXX_STANDARD, values = *c++11*\ , *c++1z*\ , default = *c++11* -* KOKKOS_OPTIONS, values = *aggressive_vectorization*, *disable_profiling*, default = *none* -* KOKKOS_CUDA_OPTIONS, values = *force_uvm*, *use_ldg*, *rdc*\ , *enable_lambda*, default = *enable_lambda* - -KOKKOS_USE_TPLS=hwloc binds threads to hardware cores, so they do not -migrate during a simulation. KOKKOS_USE_TPLS=hwloc should always be -used if running with KOKKOS_DEVICES=Pthreads for pthreads. It is not -necessary for KOKKOS_DEVICES=OpenMP for OpenMP, because OpenMP -provides alternative methods via environment variables for binding -threads to hardware cores. More info on binding threads to cores is -given on the :doc:`Speed omp ` doc page. - -KOKKOS_USE_TPLS=librt enables use of a more accurate timer mechanism -on most Unix platforms. This library is not available on all -platforms. - -KOKKOS_DEBUG is only useful when developing a Kokkos-enabled style -within LAMMPS. KOKKOS_DEBUG=yes enables printing of run-time -debugging information that can be useful. It also enables runtime -bounds checking on Kokkos data structures. - -KOKKOS_CXX_STANDARD and KOKKOS_OPTIONS are typically not changed when -building LAMMPS. - -KOKKOS_CUDA_OPTIONS are additional options for CUDA. The LAMMPS KOKKOS -package must be compiled with the *enable_lambda* option when using -GPUs. +Advanced Kokkos options +""""""""""""""""""""""" + +There are other allowed options when building with the KOKKOS package +that can improve performance or assist in debugging or profiling. +They are explained on the :ref:`KOKKOS section of the build extras ` doc page, Restrictions """""""""""" diff --git a/doc/src/Speed_packages.rst b/doc/src/Speed_packages.rst index ab02ba7f48a20fce7afcb5b985dd46c1f5f24dff..685bd3c601e9a3ac9bdcf9d62286c2e0445a0a2a 100644 --- a/doc/src/Speed_packages.rst +++ b/doc/src/Speed_packages.rst @@ -20,7 +20,7 @@ standard or user packages: +-----------------------------------------+-------------------------------------------------------+ | :doc:`USER-INTEL Package ` | for Intel CPUs and Intel Xeon Phi | +-----------------------------------------+-------------------------------------------------------+ -| :doc:`KOKKOS Package ` | for Nvidia GPUs, Intel Xeon Phi, and OpenMP threading | +| :doc:`KOKKOS Package ` | for NVIDIA GPUs, Intel Xeon Phi, and OpenMP threading | +-----------------------------------------+-------------------------------------------------------+ | :doc:`USER-OMP Package ` | for OpenMP threading and generic CPU optimizations | +-----------------------------------------+-------------------------------------------------------+ diff --git a/doc/src/atom_style.rst b/doc/src/atom_style.rst index df00c65f018d4fb50a7ff309c7fb3fc692dbcaa9..2f4f7412e2c171e5c526a3e8f2bca4a0ce254a9d 100644 --- a/doc/src/atom_style.rst +++ b/doc/src/atom_style.rst @@ -10,7 +10,7 @@ Syntax atom_style style args -* style = *angle* or *atomic* or *body* or *bond* or *charge* or *dipole* or *dpd* or *edpd* or *mdpd* or *tdpd* or *electron* or *ellipsoid* or *full* or *line* or *meso* or *molecular* or *peri* or *smd* or *sphere* or *spin* or *tri* or *template* or *hybrid* +* style = *angle* or *atomic* or *body* or *bond* or *charge* or *dipole* or *dpd* or *edpd* or *electron* or *ellipsoid* or *full* or *line* or *mdpd* or *molecular* or *peri* or *smd* or *sph* or *sphere* or *spin* or *tdpd* or *tri* or *template* or *hybrid* .. parsed-literal:: @@ -18,7 +18,9 @@ Syntax *body* args = bstyle bstyle-args bstyle = style of body particles bstyle-args = additional arguments specific to the bstyle - see the :doc:`Howto body ` doc page for details + see the :doc:`Howto body ` doc + page for details + *sphere* arg = 0/1 (optional) for static/dynamic particle radii *tdpd* arg = Nspecies Nspecies = # of chemical species *template* arg = template-ID @@ -91,10 +93,6 @@ quantities. +--------------+-----------------------------------------------------+--------------------------------------+ | *edpd* | temperature and heat capacity | eDPD particles | +--------------+-----------------------------------------------------+--------------------------------------+ -| *mdpd* | density | mDPD particles | -+--------------+-----------------------------------------------------+--------------------------------------+ -| *tdpd* | chemical concentration | tDPD particles | -+--------------+-----------------------------------------------------+--------------------------------------+ | *electron* | charge and spin and eradius | electronic force field | +--------------+-----------------------------------------------------+--------------------------------------+ | *ellipsoid* | shape, quaternion, angular momentum | aspherical particles | @@ -103,7 +101,7 @@ quantities. +--------------+-----------------------------------------------------+--------------------------------------+ | *line* | end points, angular velocity | rigid bodies | +--------------+-----------------------------------------------------+--------------------------------------+ -| *meso* | rho, e, cv | SPH particles | +| *mdpd* | density | mDPD particles | +--------------+-----------------------------------------------------+--------------------------------------+ | *molecular* | bonds, angles, dihedrals, impropers | uncharged molecules | +--------------+-----------------------------------------------------+--------------------------------------+ @@ -111,10 +109,14 @@ quantities. +--------------+-----------------------------------------------------+--------------------------------------+ | *smd* | volume, kernel diameter, contact radius, mass | solid and fluid SPH particles | +--------------+-----------------------------------------------------+--------------------------------------+ +| *sph* | rho, esph, cv | SPH particles | ++--------------+-----------------------------------------------------+--------------------------------------+ | *sphere* | diameter, mass, angular velocity | granular models | +--------------+-----------------------------------------------------+--------------------------------------+ | *spin* | magnetic moment | system with magnetic particles | +--------------+-----------------------------------------------------+--------------------------------------+ +| *tdpd* | chemical concentration | tDPD particles | ++--------------+-----------------------------------------------------+--------------------------------------+ | *template* | template index, template atom | small molecules with fixed topology | +--------------+-----------------------------------------------------+--------------------------------------+ | *tri* | corner points, angular momentum | rigid bodies | @@ -144,9 +146,16 @@ basis. For the *sphere* style, the particles are spheres and each stores a per-particle diameter and mass. If the diameter > 0.0, the particle is a finite-size sphere. If the diameter = 0.0, it is a point -particle. Note that by use of the *disc* keyword with the :doc:`fix nve/sphere `, :doc:`fix nvt/sphere `, -:doc:`fix nph/sphere `, :doc:`fix npt/sphere ` commands, spheres can be effectively -treated as 2d discs for a 2d simulation if desired. See also the :doc:`set density/disc ` command. +particle. Note that by use of the *disc* keyword with the :doc:`fix +nve/sphere `, :doc:`fix nvt/sphere `, +:doc:`fix nph/sphere `, :doc:`fix npt/sphere +` commands, spheres can be effectively treated as 2d +discs for a 2d simulation if desired. See also the :doc:`set +density/disc ` command. The *sphere* style takes an optional 0 +or 1 argument. A value of 0 means the radius of each sphere is +constant for the duration of the simulation. A value of 1 means the +radii may vary dynamically during the simulation, e.g. due to use of +the :doc:`fix adapt ` command. For the *ellipsoid* style, the particles are ellipsoids and each stores a flag which indicates whether it is a finite-size ellipsoid or @@ -189,8 +198,8 @@ particles which store a set of chemical concentration. An integer "cc_species" is required to specify the number of chemical species involved in a tDPD system. -The *meso* style is for smoothed particle hydrodynamics (SPH) -particles which store a density (rho), energy (e), and heat capacity +The *sph* style is for smoothed particle hydrodynamics (SPH) +particles which store a density (rho), energy (esph), and heat capacity (cv). The *smd* style is for a general formulation of Smooth Particle @@ -335,7 +344,7 @@ for energy-conserving dissipative particle dynamics (eDPD), many-body dissipative particle dynamics (mDPD), and transport dissipative particle dynamics (tDPD), respectively. -The *meso* style is part of the USER-SPH package for smoothed particle +The *sph* style is part of the USER-SPH package for smoothed particle hydrodynamics (SPH). See `this PDF guide `_ to using SPH in LAMMPS. The *spin* style is part of the SPIN package. @@ -351,7 +360,8 @@ Related commands Default """"""" -atom_style atomic +The default atom style is atomic. If atom_style sphere is used its +default argument is 0. ---------- diff --git a/doc/src/balance.rst b/doc/src/balance.rst index 5e631fdd2754941ed30c5eea7e0df04e2e0dcb45..58737249242557d5ce1e140cfc44b5c0018b73f6 100644 --- a/doc/src/balance.rst +++ b/doc/src/balance.rst @@ -175,23 +175,27 @@ a logical 3d grid of processors. They operate by changing the cutting planes (or lines) between processors in 3d (or 2d), to adjust the volume (area in 2d) assigned to each processor, as in the following 2d diagram where processor sub-domains are shown and particles are -colored by the processor that owns them. The leftmost diagram is the -default partitioning of the simulation box across processors (one -sub-box for each of 16 processors); the middle diagram is after a -"grid" method has been applied. - -.. image:: JPG/balance_uniform_small.jpg - :target: JPG/balance_uniform.jpg -.. image:: JPG/balance_nonuniform_small.jpg - :target: JPG/balance_nonuniform.jpg -.. image:: JPG/balance_rcb_small.jpg - :target: JPG/balance_rcb.jpg - -The *rcb* style is a "tiling" method which does not produce a logical -3d grid of processors. Rather it tiles the simulation domain with -rectangular sub-boxes of varying size and shape in an irregular -fashion so as to have equal numbers of particles (or weight) in each -sub-box, as in the rightmost diagram above. +colored by the processor that owns them. + +.. list-table:: + + * - .. figure:: JPG/balance_uniform_small.jpg + :target: JPG/balance_uniform.jpg + + - .. figure:: JPG/balance_nonuniform_small.jpg + :target: JPG/balance_nonuniform.jpg + + - .. figure:: JPG/balance_rcb_small.jpg + :target: JPG/balance_rcb.jpg + +The leftmost diagram is the default partitioning of the simulation box +across processors (one sub-box for each of 16 processors); the middle +diagram is after a "grid" method has been applied. The *rcb* style is a +"tiling" method which does not produce a logical 3d grid of processors. +Rather it tiles the simulation domain with rectangular sub-boxes of +varying size and shape in an irregular fashion so as to have equal +numbers of particles (or weight) in each sub-box, as in the rightmost +diagram above. The "grid" methods can be used with either of the :doc:`comm_style ` command options, *brick* or *tiled*\ . The diff --git a/doc/src/change_box.rst b/doc/src/change_box.rst index 2ab70ddec86e5a149c636b7e77146521db61c42f..a21f74e93b98f79965ff45925d00a2d95c67edb9 100644 --- a/doc/src/change_box.rst +++ b/doc/src/change_box.rst @@ -142,24 +142,40 @@ new owning processors. .. note:: - The simulation box size/shape can be changed by arbitrarily - large amounts by this command. This is not a problem, except that the + The simulation box size/shape can be changed by arbitrarily large + amounts by this command. This is not a problem, except that the mapping of processors to the simulation box is not changed from its initial 3d configuration; see the :doc:`processors ` command. Thus, if the box size/shape changes dramatically, the - mapping of processors to the simulation box may not end up as optimal - as the initial mapping attempted to be. + mapping of processors to the simulation box may not end up as + optimal as the initial mapping attempted to be. You may wish to + re-balance the atoms by using the :doc:`balance ` command + if that is the case. .. note:: - Because the keywords used in this command are applied one at a - time to the simulation box and the atoms in it, care must be taken - with triclinic cells to avoid exceeding the limits on skew after each - transformation in the sequence. If skew is exceeded before the final - transformation this can be avoided by changing the order of the - sequence, or breaking the transformation into two or more smaller - transformations. For more information on the allowed limits for box - skew see the discussion on triclinic boxes on :doc:`Howto triclinic ` doc page. + You cannot use this command after reading a restart file (and + before a run is performed) if the restart file stored per-atom + information from a fix and any of the specified keywords change the + box size or shape or boundary conditions. This is because atoms + may be moved to new processors and the restart info will not + migrate with them. LAMMPS will generate an error if this could + happen. Only the *ortho* and *triclinic* keywords do not trigger + this error. One solution is to perform a "run 0" command before + using the change_box command. This clears the per-atom restart + data, whether it has been re-assigned to a new fix or not. + +.. note:: + + Because the keywords used in this command are applied one at a time + to the simulation box and the atoms in it, care must be taken with + triclinic cells to avoid exceeding the limits on skew after each + transformation in the sequence. If skew is exceeded before the + final transformation this can be avoided by changing the order of + the sequence, or breaking the transformation into two or more + smaller transformations. For more information on the allowed + limits for box skew see the discussion on triclinic boxes on + :doc:`Howto triclinic ` doc page. ---------- @@ -283,6 +299,12 @@ match what is stored in the restart file. So if you wish to change them, you should use the change_box command after the read_restart command. +.. note:: + + Changing a periodic boundary to a non-periodic one will also + cause the image flag for that dimension to be reset to 0 for + all atoms. LAMMPS will print a warning message, if that happens. + ---------- The *ortho* and *triclinic* keywords convert the simulation box to be diff --git a/doc/src/compute.rst b/doc/src/compute.rst index 0726a502bc3e83f31280ba6c84b5cb5382498e06..8efc5ddabb70cca1cdcfc790508b5032ef56e5e8 100644 --- a/doc/src/compute.rst +++ b/doc/src/compute.rst @@ -225,9 +225,6 @@ The individual style names on the :doc:`Commands compute ` doc * :doc:`ke/atom/eff ` - per-atom translational and radial kinetic energy in the electron force field model * :doc:`ke/eff ` - kinetic energy of a group of nuclei and electrons in the electron force field model * :doc:`ke/rigid ` - translational kinetic energy of rigid bodies -* :doc:`meso/e/atom ` - per-atom internal energy of Smooth-Particle Hydrodynamics atoms -* :doc:`meso/rho/atom ` - per-atom mesoscopic density of Smooth-Particle Hydrodynamics atoms -* :doc:`meso/t/atom ` - per-atom internal temperature of Smooth-Particle Hydrodynamics atoms * :doc:`momentum ` - translational momentum * :doc:`msd ` - mean-squared displacement of group of atoms * :doc:`msd/chunk ` - mean-squared displacement for each chunk @@ -279,6 +276,9 @@ The individual style names on the :doc:`Commands compute ` doc * :doc:`sna/atom ` - bispectrum components for each atom * :doc:`snad/atom ` - derivative of bispectrum components for each atom * :doc:`snav/atom ` - virial contribution from bispectrum components for each atom +* :doc:`sph/e/atom ` - per-atom internal energy of Smooth-Particle Hydrodynamics atoms +* :doc:`sph/rho/atom ` - per-atom density of Smooth-Particle Hydrodynamics atoms +* :doc:`sph/t/atom ` - per-atom internal temperature of Smooth-Particle Hydrodynamics atoms * :doc:`spin ` - magnetic quantities for a system of atoms having spins * :doc:`stress/atom ` - stress tensor for each atom * :doc:`stress/mop ` - normal components of the local stress tensor using the method of planes @@ -307,6 +307,7 @@ The individual style names on the :doc:`Commands compute ` doc * :doc:`torque/chunk ` - torque applied on each chunk * :doc:`vacf ` - velocity auto-correlation function of group of atoms * :doc:`vcm/chunk ` - velocity of center-of-mass for each chunk +* :doc:`viscosity/cos ` - velocity profile under cosine-shaped acceleration * :doc:`voronoi/atom ` - Voronoi volume and neighbors for each atom * :doc:`xrd ` - x-ray diffraction intensity on a mesh of reciprocal lattice nodes diff --git a/doc/src/compute_coord_atom.rst b/doc/src/compute_coord_atom.rst index c51ea212f028e0a744ee213f47d270e36b193a90..b8f2b9e8ee193665e5a7988d5595074e30b8f096 100644 --- a/doc/src/compute_coord_atom.rst +++ b/doc/src/compute_coord_atom.rst @@ -3,6 +3,9 @@ compute coord/atom command ========================== +compute coord/atom/kk command +=================================== + Syntax """""" @@ -109,6 +112,30 @@ too frequently. :doc:`special_bonds ` command that includes all pairs in the neighbor list. +---------- + + +Styles with a *gpu*\ , *intel*\ , *kk*\ , *omp*\ , or *opt* suffix are +functionally the same as the corresponding style without the suffix. +They have been optimized to run faster, depending on your available +hardware, as discussed on the :doc:`Speed packages ` doc +page. The accelerated styles take the same arguments and should +produce the same results, except for round-off and precision issues. + +These accelerated styles are part of the GPU, USER-INTEL, KOKKOS, +USER-OMP and OPT packages, respectively. They are only enabled if +LAMMPS was built with those packages. See the :doc:`Build package ` doc page for more info. + +You can specify the accelerated styles explicitly in your input script +by including their suffix, or you can use the :doc:`-suffix command-line switch ` when you invoke LAMMPS, or you can use the +:doc:`suffix ` command in your input script. + +See the :doc:`Speed packages ` doc page for more +instructions on how to use the accelerated styles effectively. + + +---------- + **Output info:** For *cstyle* cutoff, this compute can calculate a per-atom vector or diff --git a/doc/src/compute_gyration_shape_chunk.rst b/doc/src/compute_gyration_shape_chunk.rst index 50dd4822ce584a78ad672abcc853188b1d90213d..94904f757d21743c82e29306ac6f5109d2a94271 100644 --- a/doc/src/compute_gyration_shape_chunk.rst +++ b/doc/src/compute_gyration_shape_chunk.rst @@ -37,7 +37,7 @@ and the relative shape anisotropy, k: b = & l_y - l_x \\ k = & \frac{3}{2} \frac{l_x^2+l_y^2+l_z^2}{(l_x+l_y+l_z)^2} - \frac{1}{2} -where :math:`l_x` <= :math:`l_y` <= :math`l_z` are the three eigenvalues of the gyration tensor. A general description +where :math:`l_x` <= :math:`l_y` <= :math:`l_z` are the three eigenvalues of the gyration tensor. A general description of these parameters is provided in :ref:`(Mattice) ` while an application to polymer systems can be found in :ref:`(Theodorou) `. The asphericity is always non-negative and zero only when the three principal moments are equal. This zero condition is met when the distribution diff --git a/doc/src/compute_orientorder_atom.rst b/doc/src/compute_orientorder_atom.rst index 7b894b886ec856803a8ccd202a2e2fb8cf69cf69..3b432e7df9c0780d35728bda6dbeed515e05edd4 100644 --- a/doc/src/compute_orientorder_atom.rst +++ b/doc/src/compute_orientorder_atom.rst @@ -3,6 +3,9 @@ compute orientorder/atom command ================================ +compute orientorder/atom/kk command +=================================== + Syntax """""" @@ -16,13 +19,14 @@ Syntax .. parsed-literal:: - keyword = *cutoff* or *nnn* or *degrees* or *components* + keyword = *cutoff* or *nnn* or *degrees* or *components* or *chunksize* *cutoff* value = distance cutoff *nnn* value = number of nearest neighbors *degrees* values = nlvalues, l1, l2,... *wl* value = yes or no *wl/hat* value = yes or no *components* value = ldegree + *chunksize* value = number of atoms in each pass Examples """""""" @@ -104,6 +108,14 @@ in conjunction with :doc:`compute coord_atom ` to calculate the ten Wolde's criterion to identify crystal-like particles, as discussed in :ref:`ten Wolde `. +The optional keyword *chunksize* is only applicable when using the +the KOKKOS package and is ignored otherwise. This keyword controls +the number of atoms in each pass used to compute the bond-orientational +order parameters and is used to avoid running out of memory. For example +if there are 4000 atoms in the simulation and the *chunksize* +is set to 2000, the parameter calculation will be broken up +into two passes. + The value of :math:`Q_l` is set to zero for atoms not in the specified compute group, as well as for atoms that have less than *nnn* neighbors within the distance cutoff, unless *nnn* is NULL. @@ -128,6 +140,30 @@ too frequently. :doc:`special_bonds ` command that includes all pairs in the neighbor list. +---------- + + +Styles with a *gpu*\ , *intel*\ , *kk*\ , *omp*\ , or *opt* suffix are +functionally the same as the corresponding style without the suffix. +They have been optimized to run faster, depending on your available +hardware, as discussed on the :doc:`Speed packages ` doc +page. The accelerated styles take the same arguments and should +produce the same results, except for round-off and precision issues. + +These accelerated styles are part of the GPU, USER-INTEL, KOKKOS, +USER-OMP and OPT packages, respectively. They are only enabled if +LAMMPS was built with those packages. See the :doc:`Build package ` doc page for more info. + +You can specify the accelerated styles explicitly in your input script +by including their suffix, or you can use the :doc:`-suffix command-line switch ` when you invoke LAMMPS, or you can use the +:doc:`suffix ` command in your input script. + +See the :doc:`Speed packages ` doc page for more +instructions on how to use the accelerated styles effectively. + + +---------- + **Output info:** This compute calculates a per-atom array with *nlvalues* columns, @@ -165,7 +201,7 @@ Default The option defaults are *cutoff* = pair style cutoff, *nnn* = 12, *degrees* = 5 4 6 8 10 12 i.e. :math:`Q_4`, :math:`Q_6`, :math:`Q_8`, :math:`Q_{10}`, and :math:`Q_{12}`, -*wl* = no, *wl/hat* = no, and *components* off +*wl* = no, *wl/hat* = no, *components* off, and *chunksize* = 2000 ---------- diff --git a/doc/src/compute_property_atom.rst b/doc/src/compute_property_atom.rst index 1643be869966b9beead19024edaaf243f866ce5a..48b63ac860c09e04647857c2ed7d5c0f85c705cc 100644 --- a/doc/src/compute_property_atom.rst +++ b/doc/src/compute_property_atom.rst @@ -67,8 +67,8 @@ Syntax .. parsed-literal:: PERI package per-atom properties: - vfrac = ??? - s0 = ??? + vfrac = volume fraction + s0 = max stretch of any bond a particle is part of .. parsed-literal:: @@ -81,11 +81,11 @@ Syntax .. parsed-literal:: USER-SPH package per-atom properties: - rho = ??? - drho = ??? - e = ??? - de = ??? - cv = ??? + rho = density of SPH particles + drho = change in density + e = energy + de = change in thermal energy + cv = heat capacity .. parsed-literal:: @@ -108,13 +108,17 @@ Description Define a computation that simply stores atom attributes for each atom in the group. This is useful so that the values can be used by other -:doc:`output commands ` that take computes as inputs. See -for example, the :doc:`compute reduce `, :doc:`fix ave/atom `, :doc:`fix ave/histo `, :doc:`fix ave/chunk `, and :doc:`atom-style variable ` -commands. - -The list of possible attributes is the same as that used by the :doc:`dump custom ` command, which describes their meaning, with some -additional quantities that are only defined for certain :doc:`atom styles `. Basically, this augmented list gives an -input script access to any per-atom quantity stored by LAMMPS. +:doc:`output commands ` that take computes as inputs. +See for example, the :doc:`compute reduce `, :doc:`fix +ave/atom `, :doc:`fix ave/histo `, +:doc:`fix ave/chunk `, and :doc:`atom-style variable +` commands. + +The list of possible attributes is the same as that used by the +:doc:`dump custom ` command, which describes their meaning, with +some additional quantities that are only defined for certain +:doc:`atom styles `. Basically, this augmented list gives +an input script access to any per-atom quantity stored by LAMMPS. The values are stored in a per-atom vector or array as discussed below. Zeroes are stored for atoms not in the specified group or for @@ -132,8 +136,9 @@ particles and body particles and store the 4-vector quaternion representing the orientation of each particle. See the :doc:`set ` command for an explanation of the quaternion vector. -*End1x*\ , *end1y*\ , *end1z*\ , *end2x*\ , *end2y*\ , *end2z*\ , are defined for -line segment particles and define the end points of each line segment. +*End1x*\ , *end1y*\ , *end1z*\ , *end2x*\ , *end2y*\ , *end2z*\ , are +defined for line segment particles and define the end points of each +line segment. *Corner1x*\ , *corner1y*\ , *corner1z*\ , *corner2x*\ , *corner2y*\ , *corner2z*\ , *corner3x*\ , *corner3y*\ , *corner3z*\ , are defined for @@ -144,14 +149,14 @@ number of explicit bonds assigned to an atom. Note that if the :doc:`newton bond ` command is set to *on*\ , which is the default, then every bond in the system is assigned to only one of the two atoms in the bond. Thus a bond between atoms I,J may be tallied -for either atom I or atom J. If :doc:`newton bond off ` is set, -it will be tallied with both atom I and atom J. +for either atom I or atom J. If :doc:`newton bond off ` is +set, it will be tallied with both atom I and atom J. The *i_name* and *d_name* attributes refer to custom integer and floating-point properties that have been added to each atom via the -:doc:`fix property/atom ` command. When that command -is used specific names are given to each attribute which are what is -specified as the "name" portion of *i_name* or *d_name*. +:doc:`fix property/atom ` command. When that +command is used specific names are given to each attribute which are +what is specified as the "name" portion of *i_name* or *d_name*. **Output info:** @@ -160,8 +165,8 @@ on the number of input values. If a single input is specified, a per-atom vector is produced. If two or more inputs are specified, a per-atom array is produced where the number of columns = the number of inputs. The vector or array can be accessed by any command that uses -per-atom values from a compute as input. See the :doc:`Howto output ` doc page for an overview of LAMMPS output -options. +per-atom values from a compute as input. See the :doc:`Howto output +` doc page for an overview of LAMMPS output options. The vector or array values will be in whatever :doc:`units ` the corresponding attribute is in, e.g. velocity units for vx, charge @@ -178,7 +183,8 @@ Restrictions Related commands """""""""""""""" -:doc:`dump custom `, :doc:`compute reduce `, :doc:`fix ave/atom `, :doc:`fix ave/chunk `, -:doc:`fix property/atom ` +:doc:`dump custom `, :doc:`compute reduce `, +:doc::doc:`fix ave/atom `, :doc:`fix ave/chunk +:doc:`, `fix property/atom ` **Default:** none diff --git a/doc/src/compute_meso_e_atom.rst b/doc/src/compute_sph_e_atom.rst similarity index 81% rename from doc/src/compute_meso_e_atom.rst rename to doc/src/compute_sph_e_atom.rst index ad8e46cafb1b52a306c9a4dad214fed235d41081..f35976ed10571e608b5566d3dec786b7ffacc902 100644 --- a/doc/src/compute_meso_e_atom.rst +++ b/doc/src/compute_sph_e_atom.rst @@ -1,6 +1,6 @@ -.. index:: compute meso/e/atom +.. index:: compute sph/e/atom -compute meso/e/atom command +compute sph/e/atom command =========================== Syntax @@ -8,17 +8,17 @@ Syntax .. parsed-literal:: - compute ID group-ID meso/e/atom + compute ID group-ID sph/e/atom * ID, group-ID are documented in :doc:`compute ` command -* meso/e/atom = style name of this compute command +* sph/e/atom = style name of this compute command Examples """""""" .. code-block:: LAMMPS - compute 1 all meso/e/atom + compute 1 all sph/e/atom Description """"""""""" @@ -27,8 +27,8 @@ Define a computation that calculates the per-atom internal energy for each atom in a group. The internal energy is the energy associated with the internal degrees -of freedom of a mesoscopic particles, e.g. a Smooth-Particle -Hydrodynamics particle. +of freedom of an SPH particle, i.e. a Smooth-Particle Hydrodynamics +particle. See `this PDF guide `_ to using SPH in LAMMPS. diff --git a/doc/src/compute_meso_rho_atom.rst b/doc/src/compute_sph_rho_atom.rst similarity index 64% rename from doc/src/compute_meso_rho_atom.rst rename to doc/src/compute_sph_rho_atom.rst index d4611c5cb72a3b317280a083e30efa15282a8e77..4237bf0bf5c08abd33c5f500e578ac86a0513910 100644 --- a/doc/src/compute_meso_rho_atom.rst +++ b/doc/src/compute_sph_rho_atom.rst @@ -1,6 +1,6 @@ -.. index:: compute meso/rho/atom +.. index:: compute sph/rho/atom -compute meso/rho/atom command +compute sph/rho/atom command ============================= Syntax @@ -8,32 +8,31 @@ Syntax .. parsed-literal:: - compute ID group-ID meso/rho/atom + compute ID group-ID sph/rho/atom * ID, group-ID are documented in :doc:`compute ` command -* meso/rho/atom = style name of this compute command +* sph/rho/atom = style name of this compute command Examples """""""" .. code-block:: LAMMPS - compute 1 all meso/rho/atom + compute 1 all sph/rho/atom Description """"""""""" -Define a computation that calculates the per-atom mesoscopic density -for each atom in a group. +Define a computation that calculates the per-atom SPH density for each +atom in a group, i.e. a Smooth-Particle Hydrodynamics density. -The mesoscopic density is the mass density of a mesoscopic particle, -calculated by kernel function interpolation using "pair style -sph/rhosum". +The SPH density is the mass density of an SPH particle, calculated by +kernel function interpolation using "pair style sph/rhosum". See `this PDF guide `_ to using SPH in LAMMPS. -The value of the mesoscopic density will be 0.0 for atoms not in the +The value of the SPH density will be 0.0 for atoms not in the specified compute group. **Output info:** diff --git a/doc/src/compute_meso_t_atom.rst b/doc/src/compute_sph_t_atom.rst similarity index 79% rename from doc/src/compute_meso_t_atom.rst rename to doc/src/compute_sph_t_atom.rst index e44425a65c4b3250b0b858b5e36aee200883a0e0..1766e1d712a5c56c80502f6eda9781b4eb1f312d 100644 --- a/doc/src/compute_meso_t_atom.rst +++ b/doc/src/compute_sph_t_atom.rst @@ -1,6 +1,6 @@ -.. index:: compute meso/t/atom +.. index:: compute sph/t/atom -compute meso/t/atom command +compute sph/t/atom command =========================== Syntax @@ -8,17 +8,17 @@ Syntax .. parsed-literal:: - compute ID group-ID meso/t/atom + compute ID group-ID sph/t/atom * ID, group-ID are documented in :doc:`compute ` command -* meso/t/atom = style name of this compute command +* sph/t/atom = style name of this compute command Examples """""""" .. code-block:: LAMMPS - compute 1 all meso/t/atom + compute 1 all sph/t/atom Description """"""""""" @@ -27,8 +27,8 @@ Define a computation that calculates the per-atom internal temperature for each atom in a group. The internal temperature is the ratio of internal energy over the heat -capacity associated with the internal degrees of freedom of a mesoscopic -particles, e.g. a Smooth-Particle Hydrodynamics particle. +capacity associated with the internal degrees of freedom of an SPH +particles, i.e. a Smooth-Particle Hydrodynamics particle. .. math:: diff --git a/doc/src/compute_stress_atom.rst b/doc/src/compute_stress_atom.rst index 48e8b9c69ce66d55c584852f66647ced8250b924..b8b3cb0ea1fb41ab6992943f9beada4b628540e4 100644 --- a/doc/src/compute_stress_atom.rst +++ b/doc/src/compute_stress_atom.rst @@ -2,6 +2,7 @@ compute stress/atom command =========================== + compute centroid/stress/atom command ==================================== @@ -223,15 +224,14 @@ The per-atom array values will be in pressure\*volume Restrictions """""""""""" -Currently, compute *centroid/stress/atom* does not support -pair styles with many-body interactions, -such as :doc:`Tersoff `, -and LAMMPS will generate an error in such cases. -In principal, equivalent formulation -to that of angle, dihedral and improper contributions -in the virial :math:`W_{ab}` formula -can also be applied to the many-body pair styles, -and is planned in the future. + +Currently (Spring 2020), compute *centroid/stress/atom* does not support +pair styles with many-body interactions, such as :doc:`Tersoff +`, or pair styles with long-range Coulomb interactions. +LAMMPS will generate an error in such cases. In principal, equivalent +formulation to that of angle, dihedral and improper contributions in the +virial :math:`W_{ab}` formula can also be applied to the many-body pair +styles, and is planned in the future. Related commands """""""""""""""" diff --git a/doc/src/compute_viscosity_cos.rst b/doc/src/compute_viscosity_cos.rst new file mode 100644 index 0000000000000000000000000000000000000000..6f783b481eb1a78fd207d78a4b72a1c0fb01c30b --- /dev/null +++ b/doc/src/compute_viscosity_cos.rst @@ -0,0 +1,156 @@ +.. index:: compute viscosity/cos + +compute viscosity/cos command +============================= + +Syntax +"""""" + + +.. parsed-literal:: + + compute ID group-ID viscosity/cos + +* ID, group-ID are documented in :doc:`compute ` command +* viscosity/cos = style name of this compute command + + +Examples +"""""""" + + +.. code-block:: LAMMPS + + compute cos all viscosity/cos + variable V equal c_cos[7] + variable A equal 0.02E-5 + variable density equal density + variable lz equal lz + variable reciprocalViscosity equal v_V/${A}/v_density*39.4784/v_lz/v_lz*100 + +Description +""""""""""" + +Define a computation that calculates the velocity amplitude of a group of atoms +with an cosine-shaped velocity profile and the temperature of them +after subtracting out the velocity profile before computing the kinetic energy. +A compute of this style can be used by any command that computes a temperature, +e.g. :doc:`thermo_modify `, :doc:`fix npt `, etc. + +This command together with :doc:`fix_accelerate/cos` +enables viscosity calculation with periodic perturbation method, +as described by :ref:`Hess`. +An acceleration along the x-direction is applied to the simulation system +by using :doc:`fix_accelerate/cos` command. +The acceleration is a periodic function along the z-direction: + +.. math:: + + a_{x}(z) = A \cos \left(\frac{2 \pi z}{l_{z}}\right) + +where :math:`A` is the acceleration amplitude, :math:`l_z` is the z-length +of the simulation box. At steady state, the acceleration generates +a velocity profile: + +.. math:: + + v_{x}(z) = V \cos \left(\frac{2 \pi z}{l_{z}}\right) + +The generated velocity amplitude :math:`V` is related to the +shear viscosity :math:`\eta` by: + +.. math:: + + V = \frac{A \rho}{\eta}\left(\frac{l_{z}}{2 \pi}\right)^{2} + + +and it can be obtained from ensemble average of the velocity profile: + +.. math:: + + V = \frac{\sum_i 2 m_{i} v_{i, x} \cos \left(\frac{2 \pi z_i}{l_{z}}\right)}{\sum_i m_{i}} + + +where :math:`m_i`, :math:`v_{i,x}` and :math:`z_i` are the mass, +x-component velocity and z coordinate of a particle. + +After the cosine-shaped collective velocity in :math:`x` direction +has been subtracted for each atom, the temperature is calculated by the formula +KE = dim/2 N k T, where KE = total kinetic energy of the group of +atoms (sum of 1/2 m v\^2), dim = 2 or 3 = dimensionality of the +simulation, N = number of atoms in the group, k = Boltzmann constant, +and T = temperature. + +A kinetic energy tensor, stored as a 6-element vector, is also +calculated by this compute for use in the computation of a pressure +tensor. The formula for the components of the tensor is the same as +the above formula, except that v\^2 is replaced by vx\*vy for the xy +component, etc. The 6 components of the vector are ordered xx, yy, +zz, xy, xz, yz. + +The number of atoms contributing to the temperature is assumed to be +constant for the duration of the run; use the *dynamic* option of the +:doc:`compute_modify ` command if this is not the case. +However, in order to get meaningful result, the group ID of this compute should be all. + +The removal of the cosine-shaped velocity component by this command is +essentially computing the temperature after a "bias" has been removed +from the velocity of the atoms. If this compute is used with a fix +command that performs thermostatting then this bias will be subtracted +from each atom, thermostatting of the remaining thermal velocity will +be performed, and the bias will be added back in. Thermostatting +fixes that work in this way include :doc:`fix nvt `, :doc:`fix temp/rescale `, :doc:`fix temp/berendsen `, and :doc:`fix langevin `. + +This compute subtracts out degrees-of-freedom due to fixes that +constrain molecular motion, such as :doc:`fix shake ` and +:doc:`fix rigid `. This means the temperature of groups of +atoms that include these constraints will be computed correctly. If +needed, the subtracted degrees-of-freedom can be altered using the +*extra* option of the :doc:`compute_modify ` command. + +See the :doc:`Howto thermostat ` doc page for a +discussion of different ways to compute temperature and perform +thermostatting. + +---------- + +**Output info:** + +This compute calculates a global scalar (the temperature) and a global +vector of length 7, which can be accessed by indices 1-7. +The first 6 elements of the vector are the KE tensor, +and the 7-th is the cosine-shaped velocity amplitude :math:`V`, +which can be used to calculate the reciprocal viscosity, as shown in the example. +These values can be used by any command that uses global scalar or +vector values from a compute as input. +See the :doc:`Howto output ` doc page for an overview of LAMMPS output options. + +The scalar value calculated by this compute is "intensive". The +first 6 elements of vector values are "extensive", +and the 7-th element of vector values is "intensive". + +The scalar value will be in temperature :doc:`units `. The +first 6 elements of vector values will be in energy :doc:`units `. +The 7-th element of vector value will be in velocity :doc:`units `. + +Restrictions +"""""""""""" + +This command is only available when LAMMPS was built with the USER-MISC package. +Since this compute depends on :doc:`fix accelerate/cos ` which can +only work for 3d systems, it cannot be used for 2d systems. + +Related commands +"""""""""""""""" + +:doc:`fix accelerate/cos ` + +Default +""""""" + none + +---------- + +.. _Hess1: + +**(Hess)** Hess, B. The Journal of Chemical Physics 2002, 116 (1), 209-217. diff --git a/doc/src/dump_modify.rst b/doc/src/dump_modify.rst index 75fff9d444c001ad1e05f0aa813253dfc0b4121f..ce0ade4789840293e00495eca9b532332e8690cf 100644 --- a/doc/src/dump_modify.rst +++ b/doc/src/dump_modify.rst @@ -552,9 +552,9 @@ when writing to XTC files. By default they are initialized for whatever :doc:`units ` style is being used, to write out coordinates in nanometers and time in picoseconds. I.e. for *real* units, LAMMPS defines *sfactor* = 0.1 and *tfactor* = 0.001, since the -Angstroms and fmsec used by *real* units are 0.1 nm and 0.001 psec +Angstroms and fs used by *real* units are 0.1 nm and 0.001 ps respectively. If you are using a units system with distance and time -units far from nm and psec, you may wish to write XTC files with +units far from nm and ps, you may wish to write XTC files with different units, since the compression algorithm used in XTC files is most effective when the typical magnitude of position data is between 10.0 and 0.1. diff --git a/doc/src/fix.rst b/doc/src/fix.rst index 2b5ed48ac91c5c3f226f67abf37a6bf482b22516..89d0f31a7502ef52ace6729a37306848624c3cd0 100644 --- a/doc/src/fix.rst +++ b/doc/src/fix.rst @@ -165,6 +165,7 @@ The individual style names on the :doc:`Commands fix ` doc page are followed by one or more of (g,i,k,o,t) to indicate which accelerated styles exist. +* :doc:`accelerate/cos ` - apply cosine-shaped acceleration to atoms * :doc:`adapt ` - change a simulation parameter over time * :doc:`adapt/fep ` - enhanced version of fix adapt * :doc:`addforce ` - add a force to each atom @@ -237,9 +238,7 @@ accelerated styles exist. * :doc:`lb/viscous ` - * :doc:`lineforce ` - constrain atoms to move in a line * :doc:`manifoldforce ` - restrain atoms to a manifold during minimization -* :doc:`meso ` - time integration for SPH/DPDE particles * :doc:`meso/move ` - move mesoscopic SPH/SDPD particles in a prescribed fashion -* :doc:`meso/stationary ` - * :doc:`momentum ` - zero the linear and/or angular momentum of a group of atoms * :doc:`move ` - move atoms in a prescribed fashion * :doc:`mscg ` - apply MSCG method for force-matching to generate coarse grain models @@ -344,6 +343,8 @@ accelerated styles exist. * :doc:`smd/move_tri_surf ` - * :doc:`smd/setvel ` - * :doc:`smd/wall_surface ` - +* :doc:`sph ` - time integration for SPH/DPDE particles +* :doc:`sph/stationary ` - * :doc:`spring ` - apply harmonic spring force to group of atoms * :doc:`spring/chunk ` - apply harmonic spring force to each chunk of atoms * :doc:`spring/rg ` - spring on radius of gyration of group of atoms diff --git a/doc/src/fix_accelerate_cos.rst b/doc/src/fix_accelerate_cos.rst new file mode 100644 index 0000000000000000000000000000000000000000..b8d1cca59c83c2cbd48248a4023ecc685eb12595 --- /dev/null +++ b/doc/src/fix_accelerate_cos.rst @@ -0,0 +1,104 @@ +.. index:: fix accelerate/cos + +fix accelerate/cos command +========================== + +Syntax +"""""" + + +.. parsed-literal:: + + fix ID group-ID accelerate value + +* ID, group-ID are documented in :doc:`fix ` command +* accelerate/cos = style name of this fix command +* value = amplitude of acceleration (in unit of force/mass) + + +Examples +"""""""" + + +.. code-block:: LAMMPS + + fix 1 all accelerate/cos 0.02e-5 + +Description +""""""""""" + +Give each atom a acceleration in x-direction based on its z coordinate. +The acceleration is a periodic function along the z-direction: + +.. math:: + + a_{x}(z) = A \cos \left(\frac{2 \pi z}{l_{z}}\right) + +where :math:`A` is the acceleration amplitude, :math:`l_z` is the z-length +of the simulation box. +At steady state, the acceleration generates a velocity profile: + +.. math:: + + v_{x}(z) = V \cos \left(\frac{2 \pi z}{l_{z}}\right) + +The generated velocity amplitude :math:`V` is related to the +shear viscosity :math:`\eta` by: + +.. math:: + + V = \frac{A \rho}{\eta}\left(\frac{l_{z}}{2 \pi}\right)^{2} + + +and it can be obtained from ensemble average of the velocity profile: + +.. math:: + + V = \frac{\sum_i 2 m_{i} v_{i, x} \cos \left(\frac{2 \pi z_i}{l_{z}}\right)}{\sum_i m_{i}} + +where :math:`m_i`, :math:`v_{i,x}` and :math:`z_i` are the mass, +x-component velocity and z coordinate of a particle. + +The velocity amplitude :math:`V` can be calculated with :doc:`compute viscosity/cos `, +which enables viscosity calculation with periodic perturbation method, +as described by :ref:`Hess`. +Because the applied acceleration drives the system away from equilibration, +the calculated shear viscosity is lower than the intrinsic viscosity +due to the shear-thinning effect. +Extrapolation to zero acceleration should generally be performed to +predict the zero-shear viscosity. +As the shear stress decreases, the signal-noise ratio decreases rapidly, +the simulation time must be extended accordingly to get converged result. + +In order to get meaningful result, the group ID of this fix should be all. + +---------- + +**Restart, fix_modify, output, run start/stop, minimize info:** + +No information about this fix is written to binary restart files. +None of the fix_modify options are relevant to this fix. +No global or per-atom quantities are stored by this fix for access by various output commands. +No parameter of this fix can be used with the start/stop keywords of the run command. +This fix is not invoked during energy minimization. + +Restrictions +"""""""""""" + +This command is only available when LAMMPS was built with the USER-MISC package. +Since this fix depends on the z-coordinate of atoms, it cannot be used in 2d simulations. + +Related commands +"""""""""""""""" + +:doc:`compute viscosity/cos ` + +Default +""""""" + none + +---------- + +.. _Hess2: + +**(Hess)** Hess, B. The Journal of Chemical Physics 2002, 116 (1), 209-217. diff --git a/doc/src/fix_adapt.rst b/doc/src/fix_adapt.rst index eab8f92639b7b31543b985640e0d968bdc3f1e9f..fbc4aa466170e447a1fbad8ecf6b294ba06220a6 100644 --- a/doc/src/fix_adapt.rst +++ b/doc/src/fix_adapt.rst @@ -14,7 +14,7 @@ Syntax * adapt = style name of this fix command * N = adapt simulation settings every this many timesteps * one or more attribute/arg pairs may be appended -* attribute = *pair* or *kspace* or *atom* +* attribute = *pair* or *bond* or *kspace* or *atom* .. parsed-literal:: @@ -86,8 +86,8 @@ the end of a simulation. Even if *reset* is specified as *yes*\ , a restart file written during a simulation will contain the modified settings. -If the *scale* keyword is set to *no*\ , then the value the parameter is -set to will be whatever the variable generates. If the *scale* +If the *scale* keyword is set to *no*\ , then the value of the altered +parameter will be whatever the variable generates. If the *scale* keyword is set to *yes*\ , then the value of the altered parameter will be the initial value of that parameter multiplied by whatever the variable generates. I.e. the variable is now a "scale factor" applied @@ -288,11 +288,19 @@ Currently *bond* does not support bond_style hybrid nor bond_style hybrid/overlay as bond styles. The only bonds that currently are working with fix_adapt are -+---------------------------------+-------+------------+ -| :doc:`gromos ` | k, r0 | type bonds | -+---------------------------------+-------+------------+ -| :doc:`harmonic ` | k,r0 | type bonds | -+---------------------------------+-------+------------+ ++------------------------------------+-------+------------+ +| :doc:`class2 ` | r0 | type bonds | ++------------------------------------+-------+------------+ +| :doc:`fene ` | k, r0 | type bonds | ++------------------------------------+-------+------------+ +| :doc:`gromos ` | k, r0 | type bonds | ++------------------------------------+-------+------------+ +| :doc:`harmonic ` | k,r0 | type bonds | ++------------------------------------+-------+------------+ +| :doc:`morse ` | r0 | type bonds | ++------------------------------------+-------+------------+ +| :doc:`nonlinear ` | r0 | type bonds | ++------------------------------------+-------+------------+ ---------- @@ -311,26 +319,23 @@ The *atom* keyword enables various atom properties to be changed. The current list of atom parameters that can be varied by this fix: * charge = charge on particle -* diameter = diameter of particle +* diameter, or, diameter/disc = diameter of particle The *v_name* argument of the *atom* keyword is the name of an :doc:`equal-style variable ` which will be evaluated each time -this fix is invoked to set the parameter to a new value. It should be -specified as v_name, where name is the variable name. See the +this fix is invoked to set, or scale the parameter to a new value. +It should be specified as v_name, where name is the variable name. See the discussion above describing the formulas associated with equal-style variables. The new value is assigned to the corresponding attribute for all atoms in the fix group. -.. note:: - - The *atom* keyword works this way whether the *scale* keyword is - set to *no* or *yes*\ . I.e. the use of scale yes is not yet supported - by the *atom* keyword. - If the atom parameter is *diameter* and per-atom density and per-atom mass are defined for particles (e.g. :doc:`atom_style granular `), then the mass of each particle is also -changed when the diameter changes (density is assumed to stay -constant). +changed when the diameter changes. The mass is set from the particle volume +for 3d systems (density is assumed to stay constant). For 2d, the default is +for LAMMPS to model particles with a radius attribute as spheres. +However, if the atom parameter is *diameter/disc*, then the mass is +set from the particle area (the density is assumed to be in mass/distance^2 units). For example, these commands would shrink the diameter of all granular particles in the "center" group from 1.0 to 0.1 in a linear fashion diff --git a/doc/src/fix_ave_correlate_long.rst b/doc/src/fix_ave_correlate_long.rst index affa7df127a89aba07782441c4721f93621650c5..24ba504f1bf96ad0de61266f855b324cd5927a30 100644 --- a/doc/src/fix_ave_correlate_long.rst +++ b/doc/src/fix_ave_correlate_long.rst @@ -26,7 +26,7 @@ Syntax v_name = global value calculated by an equal-style variable with name * zero or more keyword/arg pairs may be appended -* keyword = *type* or *start* or *file* or *overwrite* or *title1* or *title2* or *ncorr* or *p* or *m* +* keyword = *type* or *start* or *file* or *overwrite* or *title1* or *title2* or *ncorr* or *nlen* or *ncount* .. parsed-literal:: diff --git a/doc/src/fix_balance.rst b/doc/src/fix_balance.rst index 13fdf6b1c76cdf4ccb1ae6133eace2569564952e..b92644fcd916a96fe7b86ee30c81bed92ba5c01c 100644 --- a/doc/src/fix_balance.rst +++ b/doc/src/fix_balance.rst @@ -154,28 +154,27 @@ of processors. It operates by changing the cutting planes (or lines) between processors in 3d (or 2d), to adjust the volume (area in 2d) assigned to each processor, as in the following 2d diagram where processor sub-domains are shown and atoms are colored by the processor -that owns them. The leftmost diagram is the default partitioning of -the simulation box across processors (one sub-box for each of 16 -processors); the middle diagram is after a "grid" method has been -applied. - -.. |bal_uni| image:: JPG/balance_uniform_small.jpg - :target: JPG/balance_uniform.jpg - :width: 31% -.. |bal_non| image:: JPG/balance_nonuniform_small.jpg - :target: JPG/balance_nonuniform.jpg - :width: 31% -.. |bal_rcb| image:: JPG/balance_rcb_small.jpg - :target: JPG/balance_rcb.jpg - :width: 31% - -|bal_uni| |bal_non| |bal_rcb| - -The *rcb* style is a "tiling" method which does not produce a logical -3d grid of processors. Rather it tiles the simulation domain with -rectangular sub-boxes of varying size and shape in an irregular -fashion so as to have equal numbers of particles (or weight) in each -sub-box, as in the rightmost diagram above. +that owns them. + +.. list-table:: + + * - .. figure:: JPG/balance_uniform_small.jpg + :target: JPG/balance_uniform.jpg + + - .. figure:: JPG/balance_nonuniform_small.jpg + :target: JPG/balance_nonuniform.jpg + + - .. figure:: JPG/balance_rcb_small.jpg + :target: JPG/balance_rcb.jpg + +The leftmost diagram is the default partitioning of the simulation box +across processors (one sub-box for each of 16 processors); the middle +diagram is after a "grid" method has been applied. The *rcb* style is a +"tiling" method which does not produce a logical 3d grid of processors. +Rather it tiles the simulation domain with rectangular sub-boxes of +varying size and shape in an irregular fashion so as to have equal +numbers of particles (or weight) in each sub-box, as in the rightmost +diagram above. The "grid" methods can be used with either of the :doc:`comm_style ` command options, *brick* or *tiled*\ . The diff --git a/doc/src/fix_bond_react.rst b/doc/src/fix_bond_react.rst old mode 100644 new mode 100755 index 8daa52a73d2912821348eaf79862b515eafdf4a6..d5f917bfdb8282bd11337daeb35f63436254d0c6 --- a/doc/src/fix_bond_react.rst +++ b/doc/src/fix_bond_react.rst @@ -158,7 +158,9 @@ The following comments pertain to each *react* argument (in other words, can be customized for each reaction, or reaction step): A check for possible new reaction sites is performed every *Nevery* -timesteps. +timesteps. *Nevery* can be specified with an equal-style +:doc:`variable `, whose value is rounded up to the nearest +integer. Three physical conditions must be met for a reaction to occur. First, a bonding atom pair must be identified within the reaction distance @@ -171,19 +173,29 @@ modified to match the post-reaction template. A bonding atom pair will be identified if several conditions are met. First, a pair of atoms I,J within the specified react-group-ID of type itype and jtype must be separated by a distance between *Rmin* and -*Rmax*\ . It is possible that multiple bonding atom pairs are -identified: if the bonding atoms in the pre-reacted template are 1-2 -neighbors, i.e. directly bonded, the farthest bonding atom partner is -set as its bonding partner; otherwise, the closest potential partner -is chosen. Then, if both an atom I and atom J have each other as their -bonding partners, these two atoms are identified as the bonding atom -pair of the reaction site. Once this unique bonding atom pair is -identified for each reaction, there could two or more reactions that -involve a given atom on the same timestep. If this is the case, only -one such reaction is permitted to occur. This reaction is chosen -randomly from all potential reactions. This capability allows e.g. for -different reaction pathways to proceed from identical reaction sites -with user-specified probabilities. +*Rmax*\ . *Rmin* and *Rmax* can be specified with equal-style +:doc:`variables `. For example, these reaction cutoffs can +be a function of the reaction conversion using the following commands: + +.. code-block:: LAMMPS + + variable rmax equal 0 # initialize variable before bond/react + fix myrxn all bond/react react myrxn1 all 1 0 v_rmax mol1 mol2 map_file.txt + variable rmax equal 3+f_myrxn[1]/100 # arbitrary function of reaction count + +It is possible that multiple bonding atom pairs are identified: if the +bonding atoms in the pre-reacted template are 1-2 neighbors, i.e. +directly bonded, the farthest bonding atom partner is set as its +bonding partner; otherwise, the closest potential partner is chosen. +Then, if both an atom I and atom J have each other as their bonding +partners, these two atoms are identified as the bonding atom pair of +the reaction site. Once this unique bonding atom pair is identified +for each reaction, there could two or more reactions that involve a +given atom on the same timestep. If this is the case, only one such +reaction is permitted to occur. This reaction is chosen randomly from +all potential reactions. This capability allows e.g. for different +reaction pathways to proceed from identical reaction sites with +user-specified probabilities. The pre-reacted molecule template is specified by a molecule command. This molecule template file contains a sample reaction site and its @@ -288,7 +300,8 @@ either 'none' or 'charges.' Further details are provided in the discussion of the 'update_edges' keyword. The fifth optional section begins with the keyword 'Constraints' and lists additional criteria that must be satisfied in order for the reaction to occur. Currently, -there are four types of constraints available, as discussed below. +there are four types of constraints available, as discussed below: +'distance', 'angle', 'dihedral', and 'arrhenius'. A sample map file is given below: @@ -341,8 +354,9 @@ has syntax as follows: distance *ID1* *ID2* *rmin* *rmax* where 'distance' is the required keyword, *ID1* and *ID2* are -pre-reaction atom IDs, and these two atoms must be separated by a -distance between *rmin* and *rmax* for the reaction to occur. +pre-reaction atom IDs (or molecule-fragment IDs, see below), and these +two atoms must be separated by a distance between *rmin* and *rmax* +for the reaction to occur. The constraint of type 'angle' has the following syntax: @@ -351,11 +365,11 @@ The constraint of type 'angle' has the following syntax: angle *ID1* *ID2* *ID3* *amin* *amax* where 'angle' is the required keyword, *ID1*\ , *ID2* and *ID3* are -pre-reaction atom IDs, and these three atoms must form an angle -between *amin* and *amax* for the reaction to occur (where *ID2* is -the central atom). Angles must be specified in degrees. This -constraint can be used to enforce a certain orientation between -reacting molecules. +pre-reaction atom IDs (or molecule-fragment IDs, see below), and these +three atoms must form an angle between *amin* and *amax* for the +reaction to occur (where *ID2* is the central atom). Angles must be +specified in degrees. This constraint can be used to enforce a certain +orientation between reacting molecules. The constraint of type 'dihedral' has the following syntax: @@ -364,15 +378,23 @@ The constraint of type 'dihedral' has the following syntax: dihedral *ID1* *ID2* *ID3* *ID4* *amin* *amax* *amin2* *amax2* where 'dihedral' is the required keyword, and *ID1*\ , *ID2*\ , *ID3* -and *ID4* are pre-reaction atom IDs. Dihedral angles are calculated in -the interval (-180,180]. Refer to the :doc:`dihedral style ` -documentation for further details on convention. If *amin* is less -than *amax*, these four atoms must form a dihedral angle greater than -*amin* **and** less than *amax* for the reaction to occur. If *amin* -is greater than *amax*, these four atoms must form a dihedral angle -greater than *amin* **or** less than *amax* for the reaction to occur. -Angles must be specified in degrees. Optionally, a second range of -permissible angles *amin2*-*amax2* can be specified. +and *ID4* are pre-reaction atom IDs (or molecule-fragment IDs, see +below). Dihedral angles are calculated in the interval (-180,180]. +Refer to the :doc:`dihedral style ` documentation for +further details on convention. If *amin* is less than *amax*, these +four atoms must form a dihedral angle greater than *amin* **and** less +than *amax* for the reaction to occur. If *amin* is greater than +*amax*, these four atoms must form a dihedral angle greater than +*amin* **or** less than *amax* for the reaction to occur. Angles must +be specified in degrees. Optionally, a second range of permissible +angles *amin2*-*amax2* can be specified. + +For the 'distance', 'angle', and 'dihedral' constraints (explained +above), atom IDs can be replaced by pre-reaction molecule-fragment +IDs. The molecule-fragment ID must begin with a letter. The location +of the ID is the geometric center of all atom positions in the +fragment. The molecule fragment must have been defined in the +:doc:`molecule ` command for the pre-reaction template. The constraint of type 'arrhenius' imposes an additional reaction probability according to the temperature-dependent Arrhenius equation: @@ -419,7 +441,8 @@ it occurs: The *prob* keyword can affect whether or not an eligible reaction actually occurs. The fraction setting must be a value between 0.0 and -1.0. A uniform random number between 0.0 and 1.0 is generated and the +1.0, and can be specified with an equal-style :doc:`variable `. +A uniform random number between 0.0 and 1.0 is generated and the eligible reaction only occurs if the random number is less than the fraction. Up to N reactions are permitted to occur, as optionally specified by the *max_rxn* keyword. @@ -489,10 +512,11 @@ local command. **Restart, fix_modify, output, run start/stop, minimize info:** -Cumulative reaction counts for each reaction are written to :doc:`binary restart files `. These values are associated with the -reaction name (react-ID). Additionally, internally-created per-atom -properties are stored to allow for smooth restarts. None of the -:doc:`fix_modify ` options are relevant to this fix. +Cumulative reaction counts for each reaction are written to :doc:`binary restart files `. +These values are associated with the reaction name (react-ID). +Additionally, internally-created per-atom properties are stored to +allow for smooth restarts. None of the :doc:`fix_modify ` +options are relevant to this fix. This fix computes one statistic for each *react* argument that it stores in a global vector, of length 'number of react arguments', that diff --git a/doc/src/fix_deform.rst b/doc/src/fix_deform.rst index 75fc6cc5c9f5eff52062a35007cb954cb4b80968..f5511be6926d7cad9aa714484bf52fef905799f0 100644 --- a/doc/src/fix_deform.rst +++ b/doc/src/fix_deform.rst @@ -154,8 +154,8 @@ specified in units of distance/time. This is effectively a "constant engineering strain rate", where rate = V/L0 and L0 is the initial box length. The distance can be in lattice or box distance units. See the discussion of the units keyword below. For example, if the -initial box length is 100 Angstroms, and V is 10 Angstroms/psec, then -after 10 psec, the box length will have doubled. After 20 psec, it +initial box length is 100 Angstroms, and V is 10 Angstroms/ps, then +after 10 ps, the box length will have doubled. After 20 ps, it will have tripled. The *erate* style changes a dimension of the box at a "constant @@ -174,7 +174,7 @@ function of time will change as where dt is the elapsed time (in time units). Thus if *erate* R is specified as 0.1 and time units are picoseconds, this means the box length will increase by 10% of its original length every picosecond. -I.e. strain after 1 psec = 0.1, strain after 2 psec = 0.2, etc. R = +I.e. strain after 1 ps = 0.1, strain after 2 ps = 0.2, etc. R = -0.01 means the box length will shrink by 1% of its original length every picosecond. Note that for an "engineering" rate the change is based on the original box length, so running with R = 1 for 10 @@ -201,7 +201,7 @@ The box length L as a function of time will change as where dt is the elapsed time (in time units). Thus if *trate* R is specified as ln(1.1) and time units are picoseconds, this means the box length will increase by 10% of its current (not original) length -every picosecond. I.e. strain after 1 psec = 0.1, strain after 2 psec +every picosecond. I.e. strain after 1 ps = 0.1, strain after 2 ps = 0.21, etc. R = ln(2) or ln(3) means the box length will double or triple every picosecond. R = ln(0.99) means the box length will shrink by 1% of its current length every picosecond. Note that for a @@ -317,8 +317,8 @@ specified in units of distance/time. This is effectively an initial box length perpendicular to the direction of shear. The distance can be in lattice or box distance units. See the discussion of the units keyword below. For example, if the initial tilt factor -is 5 Angstroms, and the V is 10 Angstroms/psec, then after 1 psec, the -tilt factor will be 15 Angstroms. After 2 psec, it will be 25 +is 5 Angstroms, and the V is 10 Angstroms/ps, then after 1 ps, the +tilt factor will be 15 Angstroms. After 2 ps, it will be 25 Angstroms. The *erate* style changes a tilt factor at a "constant engineering @@ -342,9 +342,9 @@ box perpendicular to the shear direction (e.g. y box length for xy deformation), and dt is the elapsed time (in time units). Thus if *erate* R is specified as 0.1 and time units are picoseconds, this means the shear strain will increase by 0.1 every picosecond. I.e. if -the xy shear strain was initially 0.0, then strain after 1 psec = 0.1, -strain after 2 psec = 0.2, etc. Thus the tilt factor would be 0.0 at -time 0, 0.1\*ybox at 1 psec, 0.2\*ybox at 2 psec, etc, where ybox is the +the xy shear strain was initially 0.0, then strain after 1 ps = 0.1, +strain after 2 ps = 0.2, etc. Thus the tilt factor would be 0.0 at +time 0, 0.1\*ybox at 1 ps, 0.2\*ybox at 2 ps, etc, where ybox is the original y box length. R = 1 or 2 means the tilt factor will increase by 1 or 2 every picosecond. R = -0.01 means a decrease in shear strain by 0.01 every picosecond. @@ -373,7 +373,7 @@ where T0 is the initial tilt factor and dt is the elapsed time (in time units). Thus if *trate* R is specified as ln(1.1) and time units are picoseconds, this means the shear strain or tilt factor will increase by 10% every picosecond. I.e. if the xy shear strain was -initially 0.1, then strain after 1 psec = 0.11, strain after 2 psec = +initially 0.1, then strain after 1 ps = 0.11, strain after 2 ps = 0.121, etc. R = ln(2) or ln(3) means the tilt factor will double or triple every picosecond. R = ln(0.99) means the tilt factor will shrink by 1% every picosecond. Note that the change is continuous, so diff --git a/doc/src/fix_halt.rst b/doc/src/fix_halt.rst index 9836679de3fc6f790dea4a60524f357316218f68..0bc3154cdbf90cec75293cd715ac95175ba7e730 100644 --- a/doc/src/fix_halt.rst +++ b/doc/src/fix_halt.rst @@ -160,7 +160,7 @@ the :doc:`run ` command. Restrictions """""""""""" -The *diskfree* attribute is currently only supported on Linux and MacOS. +The *diskfree* attribute is currently only supported on Linux, MacOSX, and BSD. Related commands """""""""""""""" diff --git a/doc/src/fix_heat.rst b/doc/src/fix_heat.rst index 82a2b6e7f8e611fef9be955dfd91716906c7f2e7..03596febd845c13ced29e17663e7d48cae8ef225 100644 --- a/doc/src/fix_heat.rst +++ b/doc/src/fix_heat.rst @@ -47,16 +47,22 @@ and the specified geometric :doc:`region ` in order to have energy added or subtracted to it. If not specified, then the atoms in the group are affected wherever they may move to. -Heat addition/subtraction is performed every N timesteps. The *eflux* -parameter can be specified as a numeric constant or as a variable (see -below). If it is a numeric constant or equal-style variable which -evaluates to a scalar value, then the *eflux* determines the change in -aggregate energy of the entire group of atoms per unit time, e.g. in -eV/psec for :doc:`metal units `. In this case it is an -"extensive" quantity, meaning its magnitude should be scaled with the -number of atoms in the group. Note that since *eflux* has per-time -units (i.e. it is a flux), this means that a larger value of N will -add/subtract a larger amount of energy each time the fix is invoked. +Heat addition/subtraction is performed every N timesteps. + +The *eflux* parameter can be specified as a numeric constant or as an +equal- or atom-style :doc:`variable `. If the value is a +variable, it should be specified as v_name, where *name* is the variable +name. In this case, the variable will be evaluated each timestep, and +its current value(s) used to determine the flux. + +If *eflux* is a numeric constant or equal-style variable which evaluates +to a scalar value, then *eflux* determines the change in aggregate energy +of the entire group of atoms per unit time, e.g. in eV/ps for +:doc:`metal units `. In this case it is an "extensive" quantity, +meaning its magnitude should be scaled with the number of atoms in the +group. Note that since *eflux* also has per-time units (i.e. it is a +flux), this means that a larger value of N will add/subtract a larger +amount of energy each time the fix is invoked. .. note:: @@ -71,12 +77,6 @@ the energy flux for a single atom, again in units of energy per unit time. In this case, each value is an "intensive" quantity, which need not be scaled with the number of atoms in the group. -As mentioned above, the *eflux* parameter can be specified as an -equal-style or atom_style :doc:`variable `. If the value is a -variable, it should be specified as v_name, where name is the variable -name. In this case, the variable will be evaluated each timestep, and -its value(s) used to determine the flux. - Equal-style variables can specify formulas with various mathematical functions, and include :doc:`thermo_style ` command keywords for the simulation box parameters and timestep and elapsed diff --git a/doc/src/fix_langevin_drude.rst b/doc/src/fix_langevin_drude.rst index f361a88736e3411a919ff70c91a5f804cec1ac1a..249c297c987e67de744019e77d98d5062ca42102 100644 --- a/doc/src/fix_langevin_drude.rst +++ b/doc/src/fix_langevin_drude.rst @@ -188,7 +188,7 @@ particles. *damp_com* is the characteristic time for reaching thermal equilibrium of the centers of mass. For example, a value of 100.0 means to relax the temperature of the centers of mass in a timespan of (roughly) 100 -time units (tau or fmsec or psec - see the :doc:`units ` +time units (tau or fs or ps - see the :doc:`units ` command). *damp_drude* is the characteristic time for reaching thermal equilibrium of the dipoles. It is typically a few timesteps. diff --git a/doc/src/fix_meso_move.rst b/doc/src/fix_meso_move.rst index a976c2de348e9238d9cc9f5a262845122f882689..b1ea27e872e9f61facdfcab9317e38aeafbcadbd 100644 --- a/doc/src/fix_meso_move.rst +++ b/doc/src/fix_meso_move.rst @@ -60,17 +60,19 @@ internal energy and extrapolated velocity are also updated. .. note:: - The particles affected by this fix should not be time integrated - by other fixes (e.g. :doc:`fix meso `, :doc:`fix meso/stationary `), since that will change their + The particles affected by this fix should not be time integrated by + other fixes (e.g. :doc:`fix sph `, :doc:`fix + sph/stationary `), since that will change their positions and velocities twice. .. note:: As particles move due to this fix, they will pass through periodic boundaries and be remapped to the other side of the simulation box, - just as they would during normal time integration (e.g. via the :doc:`fix meso ` command). It is up to you to decide whether periodic - boundaries are appropriate with the kind of particle motion you are - prescribing with this fix. + just as they would during normal time integration (e.g. via the + :doc:`fix sph ` command). It is up to you to decide + whether periodic boundaries are appropriate with the kind of + particle motion you are prescribing with this fix. .. note:: @@ -100,7 +102,7 @@ specified, *V* is the specified velocity vector with components specified. This style also sets the velocity of each particle to V = (Vx,Vy,Vz). If any of the velocity components is specified as NULL, then the position and velocity of that component is time integrated -the same as the :doc:`fix meso ` command would perform, using +the same as the :doc:`fix sph ` command would perform, using the corresponding force component on the particle. Note that the *linear* style is identical to using the *variable* @@ -128,7 +130,7 @@ elapsed since the fix was specified. This style also sets the velocity of each particle to the time derivative of this expression. If any of the amplitude components is specified as NULL, then the position and velocity of that component is time integrated the same as -the :doc:`fix meso ` command would perform, using the +the :doc:`fix sph ` command would perform, using the corresponding force component on the particle. Note that the *wiggle* style is identical to using the *variable* @@ -180,21 +182,21 @@ particle. Any of the 6 variables can be specified as NULL. If both the displacement and velocity variables for a particular x,y,z component are specified as NULL, then the position and velocity of that -component is time integrated the same as the :doc:`fix meso ` +component is time integrated the same as the :doc:`fix sph ` command would perform, using the corresponding force component on the -particle. If only the velocity variable for a component is specified as -NULL, then the displacement variable will be used to set the position -of the particle, and its velocity component will not be changed. If only -the displacement variable for a component is specified as NULL, then -the velocity variable will be used to set the velocity of the particle, -and the position of the particle will be time integrated using that -velocity. +particle. If only the velocity variable for a component is specified +as NULL, then the displacement variable will be used to set the +position of the particle, and its velocity component will not be +changed. If only the displacement variable for a component is +specified as NULL, then the velocity variable will be used to set the +velocity of the particle, and the position of the particle will be +time integrated using that velocity. The *units* keyword determines the meaning of the distance units used to define the *linear* velocity and *wiggle* amplitude and *rotate* origin. This setting is ignored for the *variable* style. A *box* value selects standard units as defined by the :doc:`units ` -command, e.g. velocity in Angstroms/fmsec and amplitude and position +command, e.g. velocity in Angstroms/fs and amplitude and position in Angstroms for units = real. A *lattice* value means the velocity units are in lattice spacings per time and the amplitude and position are in lattice spacings. The :doc:`lattice ` command must have @@ -236,17 +238,18 @@ Restrictions """""""""""" This fix is part of the USER-SDPD package. It is only enabled if -LAMMPS was built with that package. See the :doc:`Build package ` doc page for more info. +LAMMPS was built with that package. See the :doc:`Build package +` doc page for more info. This fix requires that atoms store density and internal energy as -defined by the :doc:`atom_style meso ` command. +defined by the :doc:`atom_style sph ` command. All particles in the group must be mesoscopic SPH/SDPD particles. Related commands """""""""""""""" -:doc:`fix move `, :doc:`fix meso `, +:doc:`fix move `, :doc:`fix sph `, :doc:`displace_atoms ` Default diff --git a/doc/src/fix_move.rst b/doc/src/fix_move.rst index e9ebbd726b2bb9a25d8c02c9c026b8911dcd2757..84f7dbe9658fd01041df1d21d698706f85e228f9 100644 --- a/doc/src/fix_move.rst +++ b/doc/src/fix_move.rst @@ -193,7 +193,7 @@ The *units* keyword determines the meaning of the distance units used to define the *linear* velocity and *wiggle* amplitude and *rotate* origin. This setting is ignored for the *variable* style. A *box* value selects standard units as defined by the :doc:`units ` -command, e.g. velocity in Angstroms/fmsec and amplitude and position +command, e.g. velocity in Angstroms/fs and amplitude and position in Angstroms for units = real. A *lattice* value means the velocity units are in lattice spacings per time and the amplitude and position are in lattice spacings. The :doc:`lattice ` command must have diff --git a/doc/src/fix_nh.rst b/doc/src/fix_nh.rst index 6927b47fcb0242266f4eb75b1f16c233205f5da9..636d70140eca9b4a85bde3bd546915ef42111964 100644 --- a/doc/src/fix_nh.rst +++ b/doc/src/fix_nh.rst @@ -137,8 +137,8 @@ description below. The desired temperature at each timestep is a ramped value during the run from *Tstart* to *Tstop*\ . The *Tdamp* parameter is specified in time units and determines how rapidly the temperature is relaxed. For example, a value of 10.0 means to relax -the temperature in a timespan of (roughly) 10 time units (e.g. tau or -fmsec or psec - see the :doc:`units ` command). The atoms in the +the temperature in a timespan of (roughly) 10 time units (e.g. :math:`\tau` +or fs or ps - see the :doc:`units ` command). The atoms in the fix group are the only ones whose velocities and positions are updated by the velocity/position update portion of the integration. @@ -195,8 +195,8 @@ simulation box must be triclinic, even if its initial tilt factors are For all barostat keywords, the *Pdamp* parameter operates like the *Tdamp* parameter, determining the time scale on which pressure is relaxed. For example, a value of 10.0 means to relax the pressure in -a timespan of (roughly) 10 time units (e.g. tau or fmsec or psec - see -the :doc:`units ` command). +a timespan of (roughly) 10 time units (e.g. :math:`\tau` or fs or ps +- see the :doc:`units ` command). .. note:: diff --git a/doc/src/fix_npt_cauchy.rst b/doc/src/fix_npt_cauchy.rst index 5e0188c57475c8f377454cf03fd3974ed013ca13..14ad1e7715502556bdade03965a1501b31504817 100644 --- a/doc/src/fix_npt_cauchy.rst +++ b/doc/src/fix_npt_cauchy.rst @@ -103,8 +103,8 @@ description below. The desired temperature at each timestep is a ramped value during the run from *Tstart* to *Tstop*\ . The *Tdamp* parameter is specified in time units and determines how rapidly the temperature is relaxed. For example, a value of 10.0 means to relax -the temperature in a timespan of (roughly) 10 time units (e.g. tau or -fmsec or psec - see the :doc:`units ` command). The atoms in the +the temperature in a timespan of (roughly) 10 time units (e.g. :math:`\tau` +or fs or ps - see the :doc:`units ` command). The atoms in the fix group are the only ones whose velocities and positions are updated by the velocity/position update portion of the integration. @@ -154,8 +154,8 @@ simulation box must be triclinic, even if its initial tilt factors are For all barostat keywords, the *Pdamp* parameter operates like the *Tdamp* parameter, determining the time scale on which pressure is relaxed. For example, a value of 10.0 means to relax the pressure in -a timespan of (roughly) 10 time units (e.g. tau or fmsec or psec - see -the :doc:`units ` command). +a timespan of (roughly) 10 time units (e.g. :math:`\tau` or fs or ps +- see the :doc:`units ` command). .. note:: diff --git a/doc/src/fix_nve_dotc_langevin.rst b/doc/src/fix_nve_dotc_langevin.rst index 88d15b9e174cdb579d7a5dd2bf196e031e36f961..5322d5bbb385760a5aadecf8c7e4cb761fdd1e42 100644 --- a/doc/src/fix_nve_dotc_langevin.rst +++ b/doc/src/fix_nve_dotc_langevin.rst @@ -94,7 +94,7 @@ corresponds to T = 300 K. The *damp* parameter is specified in time units and determines how rapidly the temperature is relaxed. For example, a value of 0.03 means to relax the temperature in a timespan of (roughly) 0.03 time -units tau (see the :doc:`units ` command). +units :math:`\tau` (see the :doc:`units ` command). The damp factor can be thought of as inversely related to the viscosity of the solvent, i.e. a small relaxation time implies a high-viscosity solvent and vice versa. See the discussion about gamma diff --git a/doc/src/fix_precession_spin.rst b/doc/src/fix_precession_spin.rst index 065f894926343b6ae3d930a2a12d0847d8c2731b..783963af7223a36c075a3cb2a7763e5368c73f65 100644 --- a/doc/src/fix_precession_spin.rst +++ b/doc/src/fix_precession_spin.rst @@ -76,6 +76,7 @@ function for the same parameters. .. image:: JPG/zeeman_langevin.jpg :align: center + :width: 600 The temperature effects are accounted for by connecting the spin :math:`i` to a thermal bath using a Langevin thermostat (see @@ -154,6 +155,11 @@ The *precession/spin* style is part of the SPIN package. This style is only enabled if LAMMPS was built with this package, and if the atom_style "spin" was declared. See the :doc:`Build package ` doc page for more info. +The *precession/spin* style can only be declared once. If more +than one precession type (for example combining an anisotropy and a Zeeman interactions) +has to be declared, they have to be chained in the same command +line (as shown in the examples above). + Related commands """""""""""""""" diff --git a/doc/src/fix_press_berendsen.rst b/doc/src/fix_press_berendsen.rst index 215ef81b026cd5ff1a1918acaa0defec0a968719..f1366e0449954db71053bfc8658a984cb97512c6 100644 --- a/doc/src/fix_press_berendsen.rst +++ b/doc/src/fix_press_berendsen.rst @@ -90,7 +90,7 @@ although you have the option to change that dimension via the :doc:`fix deform < For all barostat keywords, the *Pdamp* parameter determines the time scale on which pressure is relaxed. For example, a value of 10.0 means to relax the pressure in a timespan of (roughly) 10 time units -(tau or fmsec or psec - see the :doc:`units ` command). +(tau or fs or ps - see the :doc:`units ` command). .. note:: diff --git a/doc/src/fix_restrain.rst b/doc/src/fix_restrain.rst index 3965cee04dae98647efb0cc9c1d45760887e5fdc..692336bec66009f77ba88dda688d44204c96a171 100644 --- a/doc/src/fix_restrain.rst +++ b/doc/src/fix_restrain.rst @@ -17,10 +17,18 @@ Syntax .. parsed-literal:: - *bond* args = atom1 atom2 Kstart Kstop r0 + *bond* args = atom1 atom2 Kstart Kstop r0start (r0stop) atom1,atom2 = IDs of 2 atoms in bond Kstart,Kstop = restraint coefficients at start/end of run (energy units) - r0 = equilibrium bond distance (distance units) + r0start = equilibrium bond distance at start of run (distance units) + r0stop = equilibrium bond distance at end of run (optional) (distance units). If not + specified it is assumed to be equal to r0start + *lbond* args = atom1 atom2 Kstart Kstop r0start (r0stop) + atom1,atom2 = IDs of 2 atoms in bond + Kstart,Kstop = restraint coefficients at start/end of run (energy units) + r0start = equilibrium bond distance at start of run (distance units) + r0stop = equilibrium bond distance at end of run (optional) (distance units). If not + specified it is assumed to be equal to r0start *angle* args = atom1 atom2 atom3 Kstart Kstop theta0 atom1,atom2,atom3 = IDs of 3 atoms in angle, atom2 = middle atom Kstart,Kstop = restraint coefficients at start/end of run (energy units) @@ -38,6 +46,7 @@ Examples .. code-block:: LAMMPS fix holdem all restrain bond 45 48 2000.0 2000.0 2.75 + fix holdem all restrain lbond 45 48 2000.0 2000.0 2.75 fix holdem all restrain dihedral 1 2 3 4 2000.0 2000.0 120.0 fix holdem all restrain bond 45 48 2000.0 2000.0 2.75 dihedral 1 2 3 4 2000.0 2000.0 120.0 fix texas_holdem all restrain dihedral 1 2 3 4 0.0 2000.0 120.0 dihedral 1 2 3 5 0.0 2000.0 -120.0 dihedral 1 2 3 6 0.0 2000.0 0.0 @@ -141,6 +150,29 @@ is included in :math:`K`. ---------- +The *lbond* keyword applies a lower bound bond restraint to the specified atoms +using the same functional form used by the :doc:`bond_style harmonic ` command if the distance between +the atoms is smaller than the equilibrium bond distance and 0 otherwise. The potential associated with +the restraint is + +.. math:: + + E = K (r - r_0)^2 ,if\;r < r_0 + +.. math:: + + E = 0 \qquad\quad\quad ,if\;r \ge r_0 + +with the following coefficients: + +* :math:`K` (energy/distance\^2) +* :math:`r_0` (distance) + +:math:`K` and :math:`r_0` are specified with the fix. Note that the usual 1/2 factor +is included in :math:`K`. + +---------- + The *angle* keyword applies an angle restraint to the specified atoms using the same functional form used by the :doc:`angle_style harmonic ` command. The potential associated with the restraint is diff --git a/doc/src/fix_rigid.rst b/doc/src/fix_rigid.rst index 72ed56bab1378c1c4cc594ef79342df977775924..6fbd692f6a8cd6924dc0cd5e3f9427744e7cdb25 100644 --- a/doc/src/fix_rigid.rst +++ b/doc/src/fix_rigid.rst @@ -429,8 +429,8 @@ that dimension via the :doc:`fix deform ` command. For all barostat keywords, the *Pdamp* parameter operates like the *Tdamp* parameter, determining the time scale on which pressure is relaxed. For example, a value of 10.0 means to relax the pressure in -a timespan of (roughly) 10 time units (e.g. tau or fmsec or psec - see -the :doc:`units ` command). +a timespan of (roughly) 10 time units (e.g. :math:`\tau` or fs or ps +- see the :doc:`units ` command). Regardless of what atoms are in the fix group (the only atoms which are time integrated), a global pressure or stress tensor is computed @@ -514,7 +514,7 @@ desired temperature at each timestep is a ramped value during the run from *Tstart* to *Tstop*\ . The *Tdamp* parameter is specified in time units and determines how rapidly the temperature is relaxed. For example, a value of 100.0 means to relax the temperature in a timespan -of (roughly) 100 time units (tau or fmsec or psec - see the +of (roughly) 100 time units (:math:`\tau` or fs or ps - see the :doc:`units ` command). The random # *seed* must be a positive integer. @@ -539,7 +539,7 @@ timestep is a ramped value during the run from *Tstart* to *Tstop*\ . The *Tdamp* parameter is specified in time units and determines how rapidly the temperature is relaxed. For example, a value of 100.0 means to relax the temperature in a timespan of (roughly) 100 time -units (tau or fmsec or psec - see the :doc:`units ` command). +units (tau or fs or ps - see the :doc:`units ` command). Nose/Hoover chains are used in conjunction with this thermostat. The *tparam* keyword can optionally be used to change the chain settings diff --git a/doc/src/fix_rigid_meso.rst b/doc/src/fix_rigid_meso.rst index c9a709175f3fb199610ab7c37fb454f35041e400..9961a871dc2eb976730e3d3094a58147c68d5070 100644 --- a/doc/src/fix_rigid_meso.rst +++ b/doc/src/fix_rigid_meso.rst @@ -75,19 +75,21 @@ internal energy and extrapolated velocity are also updated. .. note:: You should not update the particles in rigid bodies via other - time-integration fixes (e.g. :doc:`fix meso `, - :doc:`fix meso/stationary `), or you will have conflicting - updates to positions and velocities resulting in unphysical behavior in most - cases. When performing a hybrid simulation with some atoms in rigid bodies, - and some not, a separate time integration fix like :doc:`fix meso ` - should be used for the non-rigid particles. + time-integration fixes (e.g. :doc:`fix sph `, :doc:`fix + sph/stationary `), or you will have conflicting + updates to positions and velocities resulting in unphysical + behavior in most cases. When performing a hybrid simulation with + some atoms in rigid bodies, and some not, a separate time + integration fix like :doc:`fix sph ` should be used for + the non-rigid particles. .. note:: - These fixes are overkill if you simply want to hold a collection - of particles stationary or have them move with a constant velocity. To - hold particles stationary use :doc:`fix meso/stationary ` instead. If you would like to - move particles with a constant velocity use :doc:`fix meso/move `. + These fixes are overkill if you simply want to hold a collection of + particles stationary or have them move with a constant velocity. To + hold particles stationary use :doc:`fix sph/stationary + ` instead. If you would like to move particles + with a constant velocity use :doc:`fix meso/move `. .. warning:: @@ -346,7 +348,7 @@ package. It is only enabled if LAMMPS was built with both packages. See the :doc:`Build package ` doc page for more info. This fix requires that atoms store density and internal energy as -defined by the :doc:`atom_style meso ` command. +defined by the :doc:`atom_style sph ` command. All particles in the group must be mesoscopic SPH/SDPD particles. diff --git a/doc/src/fix_meso.rst b/doc/src/fix_sph.rst similarity index 78% rename from doc/src/fix_meso.rst rename to doc/src/fix_sph.rst index dc9f1cb9918d17d9105476fd05330a10903c6902..7e9159cac48bd034a1bb955a0c1f5a3804cec99b 100644 --- a/doc/src/fix_meso.rst +++ b/doc/src/fix_sph.rst @@ -1,6 +1,6 @@ -.. index:: fix meso +.. index:: fix sph -fix meso command +fix sph command ================ Syntax @@ -8,25 +8,26 @@ Syntax .. parsed-literal:: - fix ID group-ID meso + fix ID group-ID sph * ID, group-ID are documented in :doc:`fix ` command -* meso = style name of this fix command +* sph = style name of this fix command Examples """""""" .. code-block:: LAMMPS - fix 1 all meso + fix 1 all sph Description """"""""""" Perform time integration to update position, velocity, internal energy and local density for atoms in the group each timestep. This fix is -needed to time-integrate mesoscopic systems where particles carry -internal variables such as SPH or DPDE. +needed to time-integrate SPH systems where particles carry internal +variables such as internal energy. SPH stands for Smoothed Particle +Hydrodynamics. See `this PDF guide `_ to using SPH in LAMMPS. @@ -48,6 +49,6 @@ LAMMPS was built with that package. See the :doc:`Build package Related commands """""""""""""""" -"fix meso/stationary" +:doc:`fix sph/stationary ` **Default:** none diff --git a/doc/src/fix_meso_stationary.rst b/doc/src/fix_sph_stationary.rst similarity index 84% rename from doc/src/fix_meso_stationary.rst rename to doc/src/fix_sph_stationary.rst index 89c30ece146a09b5a36d5eb6a1a6fc2554422e25..cd0d3e4d73af43f2ee54ffb9cd30b379fa42042a 100644 --- a/doc/src/fix_meso_stationary.rst +++ b/doc/src/fix_sph_stationary.rst @@ -1,6 +1,6 @@ -.. index:: fix meso/stationary +.. index:: fix sph/stationary -fix meso/stationary command +fix sph/stationary command =========================== Syntax @@ -8,17 +8,17 @@ Syntax .. parsed-literal:: - fix ID group-ID meso/stationary + fix ID group-ID sph/stationary * ID, group-ID are documented in :doc:`fix ` command -* meso = style name of this fix command +* sph = style name of this fix command Examples """""""" .. code-block:: LAMMPS - fix 1 boundary meso/stationary + fix 1 boundary sph/stationary Description """"""""""" @@ -27,7 +27,7 @@ Perform time integration to update internal energy and local density, but not position or velocity for atoms in the group each timestep. This fix is needed for SPH simulations to correctly time-integrate fixed boundary particles which constrain a fluid to a given region in -space. +space. SPH stands for Smoothed Particle Hydrodynamics. See `this PDF guide `_ to using SPH in LAMMPS. @@ -49,6 +49,6 @@ LAMMPS was built with that package. See the :doc:`Build package Related commands """""""""""""""" -"fix meso" +:doc:`fix sph ` **Default:** none diff --git a/doc/src/fix_temp_berendsen.rst b/doc/src/fix_temp_berendsen.rst index 4913efdf533b21694fcd1f4cbcf46f7b2005ef72..2774075827685f1a9a83a6ef24a8b5208fd79bb6 100644 --- a/doc/src/fix_temp_berendsen.rst +++ b/doc/src/fix_temp_berendsen.rst @@ -45,7 +45,7 @@ The desired temperature at each timestep is a ramped value during the run from *Tstart* to *Tstop*\ . The *Tdamp* parameter is specified in time units and determines how rapidly the temperature is relaxed. For example, a value of 100.0 means to relax the temperature in a timespan -of (roughly) 100 time units (tau or fmsec or psec - see the +of (roughly) 100 time units (tau or fs or ps - see the :doc:`units ` command). *Tstart* can be specified as an equal-style :doc:`variable `. diff --git a/doc/src/fix_temp_csvr.rst b/doc/src/fix_temp_csvr.rst index cd4e5dc88f302e483f79281f3133088b3ca37702..d8a8d3135ab405de21334c107be92d7a456f9dfd 100644 --- a/doc/src/fix_temp_csvr.rst +++ b/doc/src/fix_temp_csvr.rst @@ -59,7 +59,7 @@ The desired temperature at each timestep is a ramped value during the run from *Tstart* to *Tstop*\ . The *Tdamp* parameter is specified in time units and determines how rapidly the temperature is relaxed. For example, a value of 100.0 means to relax the temperature in a timespan -of (roughly) 100 time units (tau or fmsec or psec - see the +of (roughly) 100 time units (tau or fs or ps - see the :doc:`units ` command). *Tstart* can be specified as an equal-style :doc:`variable `. diff --git a/doc/src/fix_ti_spring.rst b/doc/src/fix_ti_spring.rst index 8bf5439e0d69b6e74fe98b5602a9a6e330b6f41d..258e380842c018d6da6e772cedf0c684e4ceb60f 100644 --- a/doc/src/fix_ti_spring.rst +++ b/doc/src/fix_ti_spring.rst @@ -88,7 +88,7 @@ time: \lambda(\tau) = \tau -where tau is the scaled time variable *t/t_s*. The option *2* performs +where :math:`\tau` is the scaled time variable *t/t_s*. The option *2* performs the lambda switching at a rate defined by the following switching function diff --git a/doc/src/fix_wall_body_polyhedron.rst b/doc/src/fix_wall_body_polyhedron.rst index 4b01234f0fd6c6006e9258604e03f4380c809da1..35be8e925931ea381cba1eb9903416729ad66134 100644 --- a/doc/src/fix_wall_body_polyhedron.rst +++ b/doc/src/fix_wall_body_polyhedron.rst @@ -15,15 +15,14 @@ Syntax * k_n = normal repulsion strength (force/distance units or pressure units - see discussion below) * c_n = normal damping coefficient (force/distance units or pressure units - see discussion below) * c_t = tangential damping coefficient (force/distance units or pressure units - see discussion below) -* wallstyle = *xplane* or *yplane* or *zplane* or *zcylinder* +* wallstyle = *xplane* or *yplane* or *zplane* * args = list of arguments for a particular style .. parsed-literal:: - *xplane* or *yplane* args = lo hi + *xplane* or *yplane* or *zplane* args = lo hi lo,hi = position of lower and upper plane (distance units), either can be NULL) - *zcylinder* args = radius - radius = cylinder radius (distance units) + * zero or more keyword/value pairs may be appended to args * keyword = *wiggle* @@ -60,8 +59,7 @@ those specified with the :doc:`pair_style body/rounded/polyhedron ` by -Art Voter and collaborators. Similar to parallel replica dynamics -(PRD), global and local HD are methods for performing accelerated -dynamics that are suitable for infrequent-event systems that obey -first-order kinetics. A good overview of accelerated dynamics methods -for such systems in given in :ref:`(Voter2002) ` from the same -group. To quote from the review paper: "The dynamical evolution is -characterized by vibrational excursions within a potential basin, -punctuated by occasional transitions between basins." The transition -probability is characterized by p(t) = k\*exp(-kt) where k is the rate -constant. Running multiple replicas gives an effective enhancement in -the timescale spanned by the multiple simulations, while waiting for -an event to occur. +Both global and local HD are described in :ref:`(Voter2013) +` by Art Voter and collaborators. Similar to parallel +replica dynamics (PRD), global and local HD are methods for performing +accelerated dynamics that are suitable for infrequent-event systems +that obey first-order kinetics. A good overview of accelerated +dynamics methods (AMD) for such systems in given in :ref:`(Voter2002) +` from the same group. To quote from the review paper: +"The dynamical evolution is characterized by vibrational excursions +within a potential basin, punctuated by occasional transitions between +basins. The transition probability is characterized by p(t) = +k\*exp(-kt) where k is the rate constant." Both HD and PRD produce a time-accurate trajectory that effectively extends the timescale over which a system can be simulated, but they diff --git a/doc/src/kspace_modify.rst b/doc/src/kspace_modify.rst index afbe1b00431394c075b3e883f690e2e223c1b60b..afe3a8c3818f281a14f3a71d01c5de5da1702c9a 100644 --- a/doc/src/kspace_modify.rst +++ b/doc/src/kspace_modify.rst @@ -145,16 +145,16 @@ parameters, see the :doc:`How-To ` discussion. The *fftbench* keyword applies only to PPPM. It is off by default. If this option is turned on, LAMMPS will perform a short FFT benchmark -computation and report its timings, and will thus finish a some seconds +computation and report its timings, and will thus finish some seconds later than it would if this option were off. ---------- The *force/disp/real* and *force/disp/kspace* keywords set the force -accuracy for the real and space computations for the dispersion part -of pppm/disp. As shown in :ref:`(Isele-Holder) `, optimal -performance and accuracy in the results is obtained when these values -are different. +accuracy for the real and reciprocal space computations for the dispersion +part of pppm/disp. As shown in :ref:`(Isele-Holder) `, +optimal performance and accuracy in the results is obtained when these +values are different. ---------- @@ -413,10 +413,10 @@ slab correction has also been extended to point dipole interactions ---------- The *force/disp/real* and *force/disp/kspace* keywords set the force -accuracy for the real and space computations for the dispersion part -of pppm/disp. As shown in :ref:`(Isele-Holder) `, optimal -performance and accuracy in the results is obtained when these values -are different. +accuracy for the real and reciprocal space computations for the dispersion +part of pppm/disp. As shown in :ref:`(Isele-Holder) `, +optimal performance and accuracy in the results is obtained when these +values are different. The *disp/auto* option controls whether the pppm/disp is allowed to generate PPPM parameters automatically. If set to *no*\ , parameters diff --git a/doc/src/min_modify.rst b/doc/src/min_modify.rst index a01aab173d1ac1b70ecdd4d3ffd9b738913e13bb..e541571b7bd5c105693d0446c6813d0ecc36b735 100644 --- a/doc/src/min_modify.rst +++ b/doc/src/min_modify.rst @@ -87,8 +87,7 @@ The choice of a norm can be modified for the min styles *cg*\ , *sd*\ the 2-norm (Euclidean length) of the global force vector: .. math:: - - || \vec{F} ||_{2} = \sqrt{\vec{F}_1+ \cdots + \vec{F}_N} + || \vec{F} ||_{2} = \sqrt{\vec{F}_1^2+ \cdots + \vec{F}_N^2} The *max* norm computes the length of the 3-vector force for each atom (2-norm), and takes the maximum value of those across diff --git a/doc/src/minimize.rst b/doc/src/minimize.rst index dde5284b7ab3efd2e517c4cc243c6d2daa05085a..81234ae80e62eb124badc97b8b81fca36ba911e5 100644 --- a/doc/src/minimize.rst +++ b/doc/src/minimize.rst @@ -64,7 +64,7 @@ performed using a line search algorithm. The line search typically evaluates forces and energies several times to set new coordinates. Currently, a backtracking algorithm is used which may not be optimal in terms of the number of force evaluations performed, but appears to -be more robust than previous line searches we've tried. The +be more robust than previous line searches we have tried. The backtracking method is described in Nocedal and Wright's Numerical Optimization (Procedure 3.1 on p 41). diff --git a/doc/src/pair_cosine_squared.rst b/doc/src/pair_cosine_squared.rst index b7fa29bbd5dfc07d61ec1330d53625603cc228ab..a8cf206135f1f41bfa67cb17ce87a5c4a490e8db 100644 --- a/doc/src/pair_cosine_squared.rst +++ b/doc/src/pair_cosine_squared.rst @@ -46,7 +46,7 @@ Style *cosine/squared* computes a potential of the form E = \begin{cases} -\epsilon& \quad r < \sigma \\ - -\epsilon\cos\left(\frac{\pi\left(r - \sigma\right)}{2\left(r_c - \sigma\right)}\right)&\quad \sigma \leq r < r_c \\ + -\epsilon\cos\left(\frac{\pi\left(r - \sigma\right)}{2\left(r_c - \sigma\right)}\right)^2&\quad \sigma \leq r < r_c \\ 0& \quad r \geq r_c \end{cases} diff --git a/doc/src/pair_cs.rst b/doc/src/pair_cs.rst index 72332a87b2172bfba2d1d73ed78d7643eb561150..9790c2defd1115efb8b4a4d2458a95ddcd277ecb 100644 --- a/doc/src/pair_cs.rst +++ b/doc/src/pair_cs.rst @@ -30,6 +30,9 @@ pair_style coul/wolf/cs command pair_style lj/cut/coul/long/cs command ======================================= +pair_style lj/class2/coul/long/cs command +========================================== + Syntax """""" @@ -37,7 +40,7 @@ Syntax pair_style style args -* style = *born/coul/dsf/cs* or *born/coul/long/cs* or *born/coul/wolf/cs* or *buck/coul/long/cs* or *coul/long/cs* or *coul/wolf/cs* or *lj/cut/coul/long/cs* +* style = *born/coul/dsf/cs* or *born/coul/long/cs* or *born/coul/wolf/cs* or *buck/coul/long/cs* or *coul/long/cs* or *coul/wolf/cs* or *lj/cut/coul/long/cs* or *lj/class2/coul/long/cs* * args = list of arguments for a particular style .. parsed-literal:: @@ -64,6 +67,9 @@ Syntax *lj/cut/coul/long/cs* args = cutoff (cutoff2) cutoff = global cutoff for LJ (and Coulombic if only 1 arg) (distance units) cutoff2 = global cutoff for Coulombic (optional) (distance units) + *lj/class2/coul/long/cs* args = cutoff (cutoff2) + cutoff = global cutoff for LJ (and Coulombic if only 1 arg) (distance units) + cutoff2 = global cutoff for Coulombic (optional) (distance units) Examples """""""" @@ -115,6 +121,7 @@ the "/cs" in the name: * :doc:`pair_style coul/long ` * :doc:`pair_style coul/wolf ` * :doc:`pair_style lj/cut/coul/long ` +* :doc:`pair_style lj/class2/coul/long ` except that they correctly treat the special case where the distance between two charged core and shell atoms in the same core/shell pair diff --git a/doc/src/pair_eam.rst b/doc/src/pair_eam.rst index 7384a4d54cf3f8f72b78eb844fc255719aea6e9c..c93c694833a623663876e2b38d7470e7e1c60b12 100644 --- a/doc/src/pair_eam.rst +++ b/doc/src/pair_eam.rst @@ -39,15 +39,9 @@ pair_style eam/alloy/opt command pair_style eam/cd command ========================= -pair_style eam/cd/omp command -============================= - pair_style eam/cd/old command ============================= -pair_style eam/cd/old/omp command -================================= - pair_style eam/fs command ========================= diff --git a/doc/src/pair_momb.rst b/doc/src/pair_momb.rst index ed9a0b98dd8a95f527e2a06165a2c445e011304d..99dce23bf81a1b1415cb93acbedb059a06545590 100644 --- a/doc/src/pair_momb.rst +++ b/doc/src/pair_momb.rst @@ -31,7 +31,7 @@ Style *momb* computes pairwise van der Waals (vdW) and short-range interactions using the Morse potential and :ref:`(Grimme) ` method implemented in the Many-Body Metal-Organic (MOMB) force field described comprehensively in :ref:`(Fichthorn) ` and -:ref:`(Zhou) `. Grimme's method is widely used to correct for +:ref:`(Zhou) `. Grimme's method is widely used to correct for dispersion in density functional theory calculations. .. math:: @@ -76,6 +76,6 @@ Related commands **(Fichthorn)** Fichthorn, Balankura, Qi, CrystEngComm, 18(29), 5410-5417 (2016). -.. _Zhou4: +.. _Zhou5: **(Zhou)** Zhou, Saidi, Fichthorn, J Phys Chem C, 118(6), 3366-3374 (2014). diff --git a/doc/src/pair_polymorphic.rst b/doc/src/pair_polymorphic.rst index c0db3f10a4b4730249b7ec584bed67917a5dd524..a23a9f12f933722b4005e5e2376b2962621d47f0 100644 --- a/doc/src/pair_polymorphic.rst +++ b/doc/src/pair_polymorphic.rst @@ -18,21 +18,22 @@ Examples .. code-block:: LAMMPS pair_style polymorphic - pair_coeff * * TlBr_msw.polymorphic Tl Br - pair_coeff * * AlCu_eam.polymorphic Al Cu - pair_coeff * * GaN_tersoff.polymorphic Ga N - pair_coeff * * GaN_sw.polymorphic GaN + pair_coeff * * FeCH_BOP_I.poly Fe C H + pair_coeff * * TlBr_msw.poly Tl Br + pair_coeff * * CuTa_eam.poly Cu Ta + pair_coeff * * GaN_tersoff.poly Ga N + pair_coeff * * GaN_sw.poly Ga N Description """"""""""" The *polymorphic* pair style computes a 3-body free-form potential -(:ref:`Zhou `) for the energy E of a system of atoms as +(:ref:`Zhou3 `) for the energy E of a system of atoms as .. math:: - E & = \frac{1}{2}\sum_{i=1}^{i=N}\sum_{j=1}^{j=N}\left[\left(1-\delta_{ij}\right)\cdot U_{IJ}\left(r_{ij}\right)-\left(1-\eta_{ij}\right)\cdot F_{IJ}\left(r_{ij}\right)\cdot V_{IJ}\left(r_{ij}\right)\right] \\ - X_{ij} & = \sum_{k=i_1,k\neq i,j}^{i_N}W_{IK}\left(r_{ik}\right)\cdot G_{JIK}\left(\theta_{jik}\right)\cdot P_{IK}\left(\Delta r_{jik}\right) \\ + E & = \frac{1}{2}\sum_{i=1}^{i=N}\sum_{j=1}^{j=N}\left[\left(1-\delta_{ij}\right)\cdot U_{IJ}\left(r_{ij}\right)-\left(1-\eta_{ij}\right)\cdot F_{IJ}\left(X_{ij}\right)\cdot V_{IJ}\left(r_{ij}\right)\right] \\ + X_{ij} & = \sum_{k=i_1,k\neq j}^{i_N}W_{IK}\left(r_{ik}\right)\cdot G_{JIK}\left(\cos\theta_{jik}\right)\cdot P_{JIK}\left(\Delta r_{jik}\right) \\ \Delta r_{jik} & = r_{ij}-\xi_{IJ}\cdot r_{ik} where I, J, K represent species of atoms i, j, and k, :math:`i_1, ..., @@ -42,230 +43,267 @@ Dirac constant (i.e., :math:`\delta_{ij} = 1` when :math:`i = j`, and constant that can be set either to :math:`\eta_{ij} = \delta_{ij}` or :math:`\eta_{ij} = 1 - \delta_{ij}` depending on the potential type, :math:`U_{IJ}(r_{ij})`, :math:`V_{IJ}(r_{ij})`, :math:`W_{IK}(r_{ik})` -are pair functions, :math:`G_{JIK}(\cos(\theta))` is an angular -function, :math:`P_{IK}(\Delta r_{jik})` is a function of atomic spacing -differential :math:`\Delta r_{jik} = r_{ij} - \xi_{IJ} \cdot r_{ik}` -with :math:`\xi_{IJ}` being a pair-dependent parameter, and +are pair functions, :math:`G_{JIK}(\cos\theta_{jik})` is an angular +function, :math:`P_{JIK}(\Delta r_{jik})` is a function of atomic +spacing differential :math:`\Delta r_{jik} = r_{ij} - \xi_{IJ} \cdot +r_{ik}` with :math:`\xi_{IJ}` being a pair-dependent parameter, and :math:`F_{IJ}(X_{ij})` is a function of the local environment variable :math:`X_{ij}`. This generic potential is fully defined once the constants :math:`\eta_{ij}` and :math:`\xi_{IJ}`, and the six functions :math:`U_{IJ}(r_{ij})`, :math:`V_{IJ}(r_{ij})`, :math:`W_{IK}(r_{ik})`, -:math:`G_{JIK}(\cos(\theta))`, :math:`P_{IK}(\Delta r_{jik})`, and -:math:`F_{IJ}(X_{ij})` are given. Note that these six functions are all -one dimensional, and hence can be provided in an analytic or tabular -form. This allows users to design different potentials solely based on a -manipulation of these functions. For instance, the potential reduces to -Stillinger-Weber potential (:ref:`SW `) if we set +:math:`G_{JIK}(\cos\theta_{jik})`, :math:`P_{JIK}(\Delta r_{jik})`, and +:math:`F_{IJ}(X_{ij})` are given. Here LAMMPS uses a global parameter +:math:`\eta` to represent :math:`\eta_{ij}`. When :math:`\eta = 1`, +:math:`\eta_{ij} = 1 - \delta_{ij}`, otherwise :math:`\eta_{ij} = +\delta_{ij}`. Additionally, :math:`\eta = 3` indicates that the function +:math:`P_{JIK}(\Delta r)` depends on species I, J and K, otherwise +:math:`P_{JIK}(\Delta r) = P_{IK}(\Delta r)` only depends on species I +and K. Note that these six functions are all one dimensional, and hence +can be provided in a tabular form. This allows users to design different +potentials solely based on a manipulation of these functions. For +instance, the potential reduces to a Stillinger-Weber potential +(:ref:`SW `) if we set .. math:: - \left\{\begin{array}{l} - \eta_{ij} = \delta_{ij},\xi_{IJ}=0 \\ - U_{IJ}\left(r\right)=A_{IJ}\cdot\epsilon_{IJ}\cdot \left(\frac{\sigma_{IJ}}{r}\right)^q\cdot \left[B_{IJ}\cdot \left(\frac{\sigma_{IJ}}{r}\right)^{p-q}-1\right]\cdot exp\left(\frac{\sigma_{IJ}}{r-a_{IJ}\cdot \sigma_{IJ}}\right) \\ - V_{IJ}\left(r\right)=\sqrt{\lambda_{IJ}\cdot \epsilon_{IJ}}\cdot exp\left(\frac{\gamma_{IJ}\cdot \sigma_{IJ}}{r-a_{IJ}\cdot \sigma_{IJ}}\right) \\ - F_{IJ}\left(X\right)=-X \\ - P_{IJ}\left(\Delta r\right)=1 \\ - W_{IJ}\left(r\right)=\sqrt{\lambda_{IJ}\cdot \epsilon_{IJ}}\cdot exp\left(\frac{\gamma_{IJ}\cdot \sigma_{IJ}}{r-a_{IJ}\cdot \sigma_{IJ}}\right) \\ - G_{JIK}\left(\theta\right)=\left(cos\theta+\frac{1}{3}\right)^2 - \end{array}\right. + \eta_{ij} & = \delta_{ij} (\eta = 2~or~\eta = 0),\xi_{IJ}=0 \\ + U_{IJ}\left(r\right) & = A_{IJ}\cdot\epsilon_{IJ}\cdot \left(\frac{\sigma_{IJ}}{r}\right)^q\cdot \left[B_{IJ}\cdot \left(\frac{\sigma_{IJ}}{r}\right)^{p-q}-1\right]\cdot exp\left(\frac{\sigma_{IJ}}{r-a_{IJ}\cdot \sigma_{IJ}}\right) \\ + V_{IJ}\left(r\right) & = \sqrt{\lambda_{IJ}\cdot \epsilon_{IJ}}\cdot exp\left(\frac{\gamma_{IJ}\cdot \sigma_{IJ}}{r-a_{IJ}\cdot \sigma_{IJ}}\right) \\ + F_{IJ}\left(X\right) & = -X \\ + P_{JIK}\left(\Delta r\right) & = P_{IK}\left(\Delta r\right) = 1 \\ + W_{IJ}\left(r\right) & = \sqrt{\lambda_{IJ}\cdot \epsilon_{IJ}}\cdot exp\left(\frac{\gamma_{IJ}\cdot \sigma_{IJ}}{r-a_{IJ}\cdot \sigma_{IJ}}\right) \\ + G_{JIK}\left(\cos\theta\right) & = \left(\cos\theta+\frac{1}{3}\right)^2 -The potential reduces to Tersoff types of potential -(:ref:`Tersoff ` or :ref:`Albe `) if we set +The potential reduces to a Tersoff potential (:ref:`Tersoff ` +or :ref:`Albe `) if we set .. math:: - \left\{\begin{array}{l} - \eta_{ij}=\delta_{ij},\xi_{IJ}=1 \\ - U_{IJ}\left(r\right)=\frac{D_{e,IJ}}{S_{IJ}-1}\cdot exp\left[-\beta_{IJ}\sqrt{2S_{IJ}\left(r-r_{e,IJ}\right)}\right]\cdot f_{c,IJ}\left(r\right) \\ - V_{IJ}\left(r\right)=\frac{S_{IJ}\cdot D_{e,IJ}}{S_{IJ}-1}\cdot exp\left[-\beta_{IJ}\sqrt{\frac{2}{S_{IJ}}\left(r-r_{e,IJ}\right)}\right]\cdot f_{c,IJ}\left(r\right) \\ - F_{IJ}\left(X\right)=\left(1+X\right)^{-\frac{1}{2}} \\ - P_{IJ}\left(\Delta r\right)=exp\left(2\mu_{IK}\cdot \Delta r\right) \\ - W_{IJ}\left(r\right)=f_{c,IK}\left(r\right) \\ - G_{JIK}\left(\theta\right)=\gamma_{IK}\left[1+\frac{c_{IK}^2}{d_{IK}^2}-\frac{c_{IK}^2}{d_{IK}^2+\left(h_{IK}+cos\theta\right)^2}\right] - \end{array}\right. + \eta_{ij} & = \delta_{ij} (\eta = 2~or~\eta = 0),\xi_{IJ}=1 \\ + U_{IJ}\left(r\right) & = \frac{D_{e,IJ}}{S_{IJ}-1}\cdot exp\left[-\beta_{IJ}\sqrt{2S_{IJ}}\left(r-r_{e,IJ}\right)\right]\cdot f_{c,IJ}\left(r\right) \\ + V_{IJ}\left(r\right) & = \frac{S_{IJ}\cdot D_{e,IJ}}{S_{IJ}-1}\cdot exp\left[-\beta_{IJ}\sqrt{\frac{2}{S_{IJ}}}\left(r-r_{e,IJ}\right)\right]\cdot f_{c,IJ}\left(r\right) \\ + F_{IJ}\left(X\right) & = \left(1+X\right)^{-\frac{1}{2}} \\ + P_{JIK}\left(\Delta r\right) & = P_{IK}\left(\Delta r\right) = exp\left(2\mu_{IK}\cdot \Delta r\right) \\ + W_{IJ}\left(r\right) & = f_{c,IJ}\left(r\right) \\ + G_{JIK}\left(\cos\theta\right) & = \gamma_{IK}\left[1+\frac{c_{IK}^2}{d_{IK}^2}-\frac{c_{IK}^2}{d_{IK}^2+\left(h_{IK}+\cos\theta\right)^2}\right] + +where .. math:: - f_{c,IJ}=\left\{\begin{array}{lr} - 1, & r\leq r_{s,IJ} \\ - \frac{1}{2}+\frac{1}{2} cos \left[\frac{\pi \left(r-r_{s,IJ}\right)}{r_{c,IJ}-r_{s,IJ}}\right], & r_{s,IJ}`) type if we set +The potential reduces to a modified Stillinger-Weber potential +(:ref:`Zhou3 `) if we set .. math:: - \left\{\begin{array}{l} - \eta_{ij}=\delta_{ij},\xi_{IJ}=1 \\ - U_{IJ}\left(r\right)=\left\{\begin{array}{lr} - A_{IJ}\cdot exp\left(-\lambda_{1,IJ}\cdot r\right)\cdot f_{c,IJ}\left(r\right), & r\leq r_{s,1,IJ} \\ - A_{IJ}\cdot exp\left(-\lambda_{1,IJ}\cdot r\right)\cdot f_{c,IJ}\left(r\right)\cdot f_{c,1,IJ}\left(r\right), & r_{s,1,IJ}`) if we set .. math:: - f_{c,IJ}=\left\{\begin{array}{lr} - 1, & r\leq r_{s,IJ} \\ - \frac{1}{2}+\frac{1}{2} cos \left[\frac{\pi \left(r-r_{s,IJ}\right)}{r_{c,IJ}-r_{s,IJ}}\right], & r_{s,IJ}`) if we set +The potential becomes the embedded atom method (:ref:`Daw `) +if we set .. math:: - \left\{\begin{array}{l} - \eta_{ij}=1-\delta_{ij},\xi_{IJ}=0 \\ - U_{IJ}\left(r\right)=\phi_{IJ}\left(r\right) \\ - V_{IJ}\left(r\right)=1 \\ - F_{II}\left(X\right)=-2F_I\left(X\right) \\ - P_{IJ}\left(\Delta r\right)=1 \\ - W_{IJ}\left(r\right)=f_{K}\left(r\right) \\ - G_{JIK}\left(\theta\right)=1 - \end{array}\right. + \eta_{ij} & = 1-\delta_{ij} (\eta = 1),\xi_{IJ}=0 \\ + U_{IJ}\left(r\right) & = \phi_{IJ}\left(r\right) \\ + V_{IJ}\left(r\right) & = 1 \\ + F_{II}\left(X\right) & = -2F_I\left(X\right) \\ + P_{JIK}\left(\Delta r\right) & = P_{IK}\left(\Delta r\right) = 1 \\ + W_{IJ}\left(r\right) & = f_{J}\left(r\right) \\ + G_{JIK}\left(\cos\theta\right) & = 1 -In the embedded atom method case, :math:`\phi_{IJ}(r_{ij})` is the pair +In the embedded atom method case, :math:`\phi_{IJ}(r)` is the pair energy, :math:`F_I(X)` is the embedding energy, *X* is the local -electron density, and :math:`f_K(r)` is the atomic electron density function. - -If the tabulated functions are created using the parameters of sw, -tersoff, and eam potentials, the polymorphic pair style will produce -the same global properties (energies and stresses) and the same forces -as the sw, tersoff, and eam pair styles. The polymorphic pair style -also produces the same atom properties (energies and stresses) as the -corresponding tersoff and eam pair styles. However, due to a different -partition of global properties to atom properties, the polymorphic -pair style will produce different atom properties (energies and -stresses) as the sw pair style. This does not mean that polymorphic -pair style is different from the sw pair style in this case. It just -means that the definitions of the atom energies and atom stresses are -different. - -Only a single pair_coeff command is used with the polymorphic style -which specifies an potential file for all needed elements. These are +electron density, and :math:`f_J(r)` is the atomic electron density +function. + +The potential reduces to another type of Tersoff potential (:ref:`Zhou4 +`) if we set + +.. math:: + + \eta_{ij} & = \delta_{ij} (\eta = 3),\xi_{IJ}=1 \\ + U_{IJ}\left(r\right) & = \frac{D_{e,IJ}}{S_{IJ}-1}\cdot exp\left[-\beta_{IJ}\sqrt{2S_{IJ}}\left(r-r_{e,IJ}\right)\right]\cdot f_{c,IJ}\left(r\right) \cdot T_{IJ}\left(r\right)+V_{ZBL,IJ}\left(r\right)\left[1-T_{IJ}\left(r\right)\right] \\ + V_{IJ}\left(r\right) & = \frac{S_{IJ}\cdot D_{e,IJ}}{S_{IJ}-1}\cdot exp\left[-\beta_{IJ}\sqrt{\frac{2}{S_{IJ}}}\left(r-r_{e,IJ}\right)\right]\cdot f_{c,IJ}\left(r\right) \cdot T_{IJ}\left(r\right) \\ + F_{IJ}\left(X\right) & = \left(1+X\right)^{-\frac{1}{2}} \\ + P_{JIK}\left(\Delta r\right) & = \omega_{JIK} \cdot exp\left(\alpha_{JIK}\cdot \Delta r\right) \\ + W_{IJ}\left(r\right) & = f_{c,IJ}\left(r\right) \\ + G_{JIK}\left(\cos\theta\right) & = \gamma_{JIK}\left[1+\frac{c_{JIK}^2}{d_{JIK}^2}-\frac{c_{JIK}^2}{d_{JIK}^2+\left(h_{JIK}+\cos\theta\right)^2}\right] \\ + T_{IJ}\left(r\right) & = \frac{1}{1+exp\left[-b_{f,IJ}\left(r-r_{f,IJ}\right)\right]} \\ + V_{ZBL,IJ}\left(r\right) & = 14.4 \cdot \frac{Z_I \cdot Z_J}{r}\sum_{k=1}^{4}\mu_k \cdot exp\left[-\nu_k \left(Z_I^{0.23}+Z_J^{0.23}\right) r\right] + +where :math:`f_{c,IJ}(r)` is the same as defined above. This Tersoff +potential differs from the one above because the :math:`P_{JIK}(\Delta +r)` function is now dependent on all three species I, J, and K. + +If the tabulated functions are created using the parameters of +Stillinger-Weber, Tersoff, and EAM potentials, the polymorphic pair +style will produce the same global properties (energies and stresses) +and the same forces as the :doc:`sw `, :doc:`tersoff +`, and :doc:`eam ` pair styles. The polymorphic +pair style also produces the same per-atom properties (energies and +stresses) as the corresponding :doc:`tersoff ` and +:doc:`eam ` pair styles. However, due to a different +partitioning of global properties to per-atom properties, the +polymorphic pair style will produce different per-atom properties +(energies and stresses) as the :doc:`sw ` pair style. This does +not mean that polymorphic pair style is different from the sw pair +style. It just means that the definitions of the atom energies and atom +stresses are different. + +Only a single pair_coeff command is used with the polymorphic pair style +which specifies a potential file for all needed elements. These are mapped to LAMMPS atom types by specifying N additional arguments after -the filename in the pair_coeff command, where N is the number of -LAMMPS atom types: +the filename in the pair_coeff command, where N is the number of LAMMPS +atom types: * filename -* N element names = mapping of Tersoff elements to atom types +* N element names = mapping of polymorphic potential elements to atom types See the pair_coeff doc page for alternate ways to specify the path for -the potential file. Several files for polymorphic potentials are -included in the potentials directory of the LAMMPS distribution. They +the potential file. Several files for polymorphic potentials are +included in the potentials directory of the LAMMPS distribution. They have a "poly" suffix. -As an example, imagine the SiC_tersoff.poly file has tabulated -functions for Si-C tersoff potential. If your LAMMPS simulation has 4 -atoms types and you want the 1st 3 to be Si, and the 4th to be C, you -would use the following pair_coeff command: +As an example, imagine the GaN_tersoff.poly file has tabulated functions +for Ga-N tersoff potential. If your LAMMPS simulation has 4 atoms types +and you want the 1st 3 to be Ga, and the 4th to be N, you would use the +following pair_coeff command: .. code-block:: LAMMPS - pair_coeff * * SiC_tersoff.poly Si Si Si C + pair_coeff * * GaN_tersoff.poly Ga Ga Ga N -The 1st 2 arguments must be \* \* so as to span all LAMMPS atom -types. The first three Si arguments map LAMMPS atom types 1,2,3 to the -Si element in the polymorphic file. The final C argument maps LAMMPS -atom type 4 to the C element in the polymorphic file. If a mapping -value is specified as NULL, the mapping is not performed. This can be -used when an polymorphic potential is used as part of the hybrid pair -style. The NULL values are placeholders for atom types that will be -used with other potentials. +The first two arguments must be \* \* to span all pairs of LAMMPS atom +types. The first three Ga arguments map LAMMPS atom types 1,2,3 to the +Ga element in the polymorphic file. The final N argument maps LAMMPS +atom type 4 to the N element in the polymorphic file. If a mapping value +is specified as NULL, the mapping is not performed. This can be used +when an polymorphic potential is used as part of the hybrid pair +style. The NULL values are placeholders for atom types that will be used +with other potentials. Potential files in the potentials directory of the LAMMPS distribution have a ".poly" suffix. At the beginning of the files, an unlimited -number of lines starting with '#' are used to describe the potential -and are ignored by LAMMPS. The next line lists two numbers: +number of lines starting with '#' are used to describe the potential and +are ignored by LAMMPS. The next line lists two numbers: .. parsed-literal:: - ntypes :math:`\eta` + ntypes eta -Here ntypes represent total number of species defined in the potential -file, and :math:`\eta = 0` or 1. The number ntypes must equal the total -number of different species defined in the pair_coeff command. When -:math:`\eta = 1`, :math:\eta_{ij}` defined in the potential functions -above is set to :math:`1 - \delta_{ij}`, otherwise :math:`\eta_{ij}` is -set to :math:`\delta_{ij}`. The next ntypes lines each lists two numbers -and a character string representing atomic number, atomic mass, and name -of the species of the ntypes elements: +Here *ntypes* represent total number of species defined in the potential +file, :math:`\eta = 1` reduces to embedded atom method, :math:`\eta = 3` +assumes a three species dependent :math:`P_{JIK}(\Delta r)` function, +and all other values of :math:`\eta` assume a two species dependent +:math:`P_{JK}(\Delta r)` function. The value of *ntypes* must equal the +total number of different species defined in the pair_coeff command. The +next *ntypes* lines each lists two numbers and a character string +representing atomic number, atomic mass, and name of the species of the +ntypes elements: .. parsed-literal:: - atomic_number atomic-mass element (1) - atomic_number atomic-mass element (2) + atomic-number atomic-mass element-name(1) + atomic-number atomic-mass element-name(2) ... - atomic_number atomic-mass element (ntypes) + atomic-number atomic-mass element-name(ntypes) + +The next line contains four numbers: + +.. parsed-literal:: + + nr ntheta nx xmax + +Here nr is total number of tabular points for radial functions U, V, W, +P, ntheta is total number of tabular points for the angular function G, +nx is total number of tabular points for the function F, xmax is a +maximum value of the argument of function F. Note that the pair +functions :math:`U_{IJ}(r)`, :math:`V_{IJ}(r)`, :math:`W_{IJ}(r)` are +uniformly tabulated between 0 and cutoff distance of the IJ pair, +:math:`G_{JIK}(\cos\theta)` is uniformly tabulated between -1 and 1, +:math:`P_{JIK}(\Delta r)` is uniformly tabulated between -rcmax and +rcmax where rcmax is the maximum cutoff distance of all pairs, and +:math:`F_{IJ}(X)` is uniformly tabulated between 0 and xmax. Linear +extrapolation is assumed if actual simulations exceed these ranges. The next ntypes\*(ntypes+1)/2 lines contain two numbers: .. parsed-literal:: - cut :math:`xi` (1) - cut :math:`xi` (2) + cut xi(1) + cut xi(2) ... - cut :math:`xi` (ntypes\*(ntypes+1)/2) + cut xi(ntypes\*(ntypes+1)/2) -Here cut means the cutoff distance of the pair functions, :math:`\xi` is -the same as defined in the potential functions above. The +Here cut means the cutoff distance of the pair functions, "xi" is +:math:`\xi` as defined in the potential functions above. The ntypes\*(ntypes+1)/2 lines are related to the pairs according to the -sequence of first ii (self) pairs, i = 1, 2, ..., ntypes, and then then -ij (cross) pairs, i = 1, 2, ..., ntypes-1, and j = i+1, i+2, ..., ntypes +sequence of first ii (self) pairs, i = 1, 2, ..., ntypes, and then ij +(cross) pairs, i = 1, 2, ..., ntypes-1, and j = i+1, i+2, ..., ntypes (i.e., the sequence of the ij pairs follows 11, 22, ..., 12, 13, 14, ..., 23, 24, ...). -The final blocks of the potential file are the U, V, W, P, G, and F -functions are listed sequentially. First, U functions are given for -each of the ntypes\*(ntypes+1)/2 pairs according to the sequence -described above. For each of the pairs, nr values are listed. Next, -similar arrays are given for V, W, and P functions. Then G functions -are given for all the ntypes\*ntypes\*ntypes ijk triplets in a natural -sequence i from 1 to ntypes, j from 1 to ntypes, and k from 1 to -ntypes (i.e., ijk = 111, 112, 113, ..., 121, 122, 123 ..., 211, 212, -...). Each of the ijk functions contains ng values. Finally, the F -functions are listed for all ntypes\*(ntypes+1)/2 pairs, each -containing nx values. Either analytic or tabulated functions can be -specified. Currently, constant, exponential, sine and cosine analytic -functions are available which are specified with: constant c1 , where -f(x) = c1 exponential c1 c2 , where f(x) = c1 exp(c2\*x) sine c1 c2 , -where f(x) = c1 sin(c2\*x) cos c1 c2 , where f(x) = c1 cos(c2\*x) -Tabulated functions are specified by spline n x1 x2, where n=number of -point, (x1,x2)=range and then followed by n values evaluated uniformly -over these argument ranges. The valid argument ranges of the -functions are between 0 <= r <= cut for the U(r), V(r), W(r) -functions, -cutmax <= delta_r <= cutmax for the P(delta_r) functions, --1 <= :math:`\cos\theta` <= 1 for the G(:math:`\cos\theta`) functions, -and 0 <= X <= maxX for the F(X) functions. +In the final blocks of the potential file, U, V, W, P, G, and F +functions are listed sequentially. First, U functions are given for each +of the ntypes\*(ntypes+1)/2 pairs according to the sequence described +above. For each of the pairs, nr values are listed. Next, similar arrays +are given for V and W functions. If P functions depend only on pair +species, i.e., :math:`\eta \neq 3`, then P functions are also listed the +same way the next. If P functions depend on three species, i.e., +:math:`\eta = 3`, then P functions are listed for all the +ntypes*ntypes*ntypes IJK triplets in a natural sequence I from 1 to +ntypes, J from 1 to ntypes, and K from 1 to ntypes (i.e., IJK = 111, +112, 113, ..., 121, 122, 123 ..., 211, 212, ...). Next, G functions are +listed for all the ntypes*ntypes*ntypes IJK triplets similarly. For each +of the G functions, ntheta values are listed. Finally, F functions are +listed for all the ntypes*(ntypes+1)/2 pairs in the same sequence as +described above. For each of the F functions, nx values are listed. **Mixing, shift, table tail correction, restart**\ : This pair styles does not support the :doc:`pair_modify ` shift, table, and tail options. -This pair style does not write their information to :doc:`binary restart files `, since it is stored in potential files. Thus, you -need to re-specify the pair_style and pair_coeff commands in an input -script that reads a restart file. +This pair style does not write their information to :doc:`binary restart +files `, since it is stored in potential files. Thus, you need +to re-specify the pair_style and pair_coeff commands in an input script +that reads a restart file. ---------- @@ -277,15 +315,15 @@ input script. If using read_data, atomic masses must be defined in the atomic structure data file. This pair style is part of the MANYBODY package. It is only enabled if -LAMMPS was built with that package. See the :doc:`Build package ` doc page for more info. +LAMMPS was built with that package. See the :doc:`Build package +` doc page for more info. This pair potential requires the :doc:`newtion ` setting to be "on" for pair interactions. -The potential files provided with LAMMPS (see the potentials -directory) are parameterized for metal :doc:`units `. You can use -any LAMMPS units, but you would need to create your own potential -files. +The potential files provided with LAMMPS (see the potentials directory) +are parameterized for metal :doc:`units `. You can use any LAMMPS +units, but you would need to create your own potential files. Related commands """""""""""""""" @@ -296,12 +334,15 @@ Related commands .. _Zhou3: -**(Zhou)** X. W. Zhou, M. E. Foster, R. E. Jones, P. Yang, H. Fan, and -F. P. Doty, J. Mater. Sci. Res., 4, 15 (2015). +**(Zhou3)** X. W. Zhou, M. E. Foster, R. E. Jones, P. Yang, H. Fan, and F. P. Doty, J. Mater. Sci. Res., 4, 15 (2015). + +.. _Zhou4: + +**(Zhou4)** X. W. Zhou, M. E. Foster, J. A. Ronevich, and C. W. San Marchi, J. Comp. Chem., 41, 1299 (2020). .. _SW: -**(SW)** F. H. Stillinger-Weber, and T. A. Weber, Phys. Rev. B, 31, 5262 (1985). +**(SW)** F. H. Stillinger, and T. A. Weber, Phys. Rev. B, 31, 5262 (1985). .. _Tersoff: @@ -309,8 +350,7 @@ F. P. Doty, J. Mater. Sci. Res., 4, 15 (2015). .. _poly-Albe: -**(Albe)** K. Albe, K. Nordlund, J. Nord, and A. Kuronen, Phys. Rev. B, -66, 035205 (2002). +**(Albe)** K. Albe, K. Nordlund, J. Nord, and A. Kuronen, Phys. Rev. B, 66, 035205 (2002). .. _Wang3: diff --git a/doc/src/pair_reaxc.rst b/doc/src/pair_reaxc.rst index 1481b0bf4fabf48bc14d9d943d8f80ba1be5e843..b01f046d2960f1a82f815f77c3727fb76d88c3d6 100644 --- a/doc/src/pair_reaxc.rst +++ b/doc/src/pair_reaxc.rst @@ -21,12 +21,13 @@ Syntax .. parsed-literal:: - keyword = *checkqeq* or *lgvdw* or *safezone* or *mincap* + keyword = *checkqeq* or *lgvdw* or *safezone* or *mincap* or *minhbonds* *checkqeq* value = *yes* or *no* = whether or not to require qeq/reax fix *enobonds* value = *yes* or *no* = whether or not to tally energy of atoms with no bonds *lgvdw* value = *yes* or *no* = whether or not to use a low gradient vdW correction *safezone* = factor used for array allocation *mincap* = minimum size for array allocation + *minhbonds* = minimum size use for storing hydrogen bonds Examples """""""" @@ -146,11 +147,11 @@ zero. The latter behavior is usual not desired, as it causes discontinuities in the potential energy when the bonding of an atom drops to zero. -Optional keywords *safezone* and *mincap* are used for allocating -reax/c arrays. Increasing these values can avoid memory problems, -such as segmentation faults and bondchk failed errors, that could -occur under certain conditions. These keywords are not used by the -Kokkos version, which instead uses a more robust memory allocation +Optional keywords *safezone*\ , *mincap*\ , and *minhbonds* are used +for allocating reax/c arrays. Increasing these values can avoid memory +problems, such as segmentation faults and bondchk failed errors, that +could occur under certain conditions. These keywords are not used by +the Kokkos version, which instead uses a more robust memory allocation scheme that checks if the sizes of the arrays have been exceeded and automatically allocates more memory. @@ -352,7 +353,7 @@ Default """"""" The keyword defaults are checkqeq = yes, enobonds = yes, lgvdw = no, -safezone = 1.2, mincap = 50. +safezone = 1.2, mincap = 50, minhbonds = 25. ---------- diff --git a/doc/src/pair_style.rst b/doc/src/pair_style.rst index 5b5e6e6fe8d224b4015c55f5677f86a9b9b24ec2..48dd2dde0fcc5ff5fd3b371d039dbbf23f901513 100644 --- a/doc/src/pair_style.rst +++ b/doc/src/pair_style.rst @@ -111,41 +111,41 @@ accelerated styles exist. * :doc:`born ` - Born-Mayer-Huggins potential * :doc:`born/coul/dsf ` - Born with damped-shifted-force model * :doc:`born/coul/dsf/cs ` - Born with damped-shifted-force and core/shell model -* :doc:`born/coul/long ` - Born with long-range Coulombics -* :doc:`born/coul/long/cs ` - Born with long-range Coulombics and core/shell -* :doc:`born/coul/msm ` - Born with long-range MSM Coulombics -* :doc:`born/coul/wolf ` - Born with Wolf potential for Coulombics -* :doc:`born/coul/wolf/cs ` - Born with Wolf potential for Coulombics and core/shell model +* :doc:`born/coul/long ` - Born with long-range Coulomb +* :doc:`born/coul/long/cs ` - Born with long-range Coulomb and core/shell +* :doc:`born/coul/msm ` - Born with long-range MSM Coulomb +* :doc:`born/coul/wolf ` - Born with Wolf potential for Coulomb +* :doc:`born/coul/wolf/cs ` - Born with Wolf potential for Coulomb and core/shell model * :doc:`brownian ` - Brownian potential for Fast Lubrication Dynamics * :doc:`brownian/poly ` - Brownian potential for Fast Lubrication Dynamics with polydispersity * :doc:`buck ` - Buckingham potential * :doc:`buck/coul/cut ` - Buckingham with cutoff Coulomb -* :doc:`buck/coul/long ` - Buckingham with long-range Coulombics -* :doc:`buck/coul/long/cs ` - Buckingham with long-range Coulombics and core/shell -* :doc:`buck/coul/msm ` - Buckingham with long-range MSM Coulombics -* :doc:`buck/long/coul/long ` - long-range Buckingham with long-range Coulombics +* :doc:`buck/coul/long ` - Buckingham with long-range Coulomb +* :doc:`buck/coul/long/cs ` - Buckingham with long-range Coulomb and core/shell +* :doc:`buck/coul/msm ` - Buckingham with long-range MSM Coulomb +* :doc:`buck/long/coul/long ` - long-range Buckingham with long-range Coulomb * :doc:`buck/mdf ` - Buckingham with a taper function * :doc:`buck6d/coul/gauss/dsf ` - dispersion-damped Buckingham with damped-shift-force model -* :doc:`buck6d/coul/gauss/long ` - dispersion-damped Buckingham with long-range Coulombics +* :doc:`buck6d/coul/gauss/long ` - dispersion-damped Buckingham with long-range Coulomb * :doc:`colloid ` - integrated colloidal potential * :doc:`comb ` - charge-optimized many-body (COMB) potential * :doc:`comb3 ` - charge-optimized many-body (COMB3) potential * :doc:`cosine/squared ` - Cooke-Kremer-Deserno membrane model potential -* :doc:`coul/cut ` - cutoff Coulombic potential -* :doc:`coul/cut/soft ` - Coulombic potential with a soft core -* :doc:`coul/debye ` - cutoff Coulombic potential with Debye screening +* :doc:`coul/cut ` - cutoff Coulomb potential +* :doc:`coul/cut/soft ` - Coulomb potential with a soft core +* :doc:`coul/debye ` - cutoff Coulomb potential with Debye screening * :doc:`coul/diel ` - Coulomb potential with dielectric permittivity -* :doc:`coul/dsf ` - Coulombics with damped-shifted-force model -* :doc:`coul/long ` - long-range Coulombic potential -* :doc:`coul/long/cs ` - long-range Coulombic potential and core/shell -* :doc:`coul/long/soft ` - long-range Coulombic potential with a soft core -* :doc:`coul/msm ` - long-range MSM Coulombics -* :doc:`coul/slater/cut ` - smeared out Coulombics -* :doc:`coul/slater/long ` - long-range smeared out Coulombics -* :doc:`coul/shield ` - Coulombics for boron nitride for use with :doc:`ilp/graphene/hbn ` potential -* :doc:`coul/streitz ` - Coulombics via Streitz/Mintmire Slater orbitals -* :doc:`coul/wolf ` - Coulombics via Wolf potential -* :doc:`coul/wolf/cs ` - ditto with core/shell adjustments +* :doc:`coul/dsf ` - Coulomb with damped-shifted-force model +* :doc:`coul/long ` - long-range Coulomb potential +* :doc:`coul/long/cs ` - long-range Coulomb potential and core/shell +* :doc:`coul/long/soft ` - long-range Coulomb potential with a soft core +* :doc:`coul/msm ` - long-range MSM Coulomb +* :doc:`coul/slater/cut ` - smeared out Coulomb +* :doc:`coul/slater/long ` - long-range smeared out Coulomb +* :doc:`coul/shield ` - Coulomb for boron nitride for use with :doc:`ilp/graphene/hbn ` potential +* :doc:`coul/streitz ` - Coulomb via Streitz/Mintmire Slater orbitals +* :doc:`coul/wolf ` - Coulomb via Wolf potential +* :doc:`coul/wolf/cs ` - Coulomb via Wolf potential with core/shell adjustments * :doc:`dpd ` - dissipative particle dynamics (DPD) * :doc:`dpd/fdt ` - DPD for constant temperature and pressure * :doc:`dpd/fdt/energy ` - DPD for constant energy and enthalpy @@ -189,44 +189,45 @@ accelerated styles exist. * :doc:`lj/charmm/coul/charmm/implicit ` - CHARMM for implicit solvent * :doc:`lj/charmm/coul/long ` - CHARMM with long-range Coulomb * :doc:`lj/charmm/coul/long/soft ` - CHARMM with long-range Coulomb and a soft core -* :doc:`lj/charmm/coul/msm ` - CHARMM with long-range MSM Coulombics +* :doc:`lj/charmm/coul/msm ` - CHARMM with long-range MSM Coulomb * :doc:`lj/charmmfsw/coul/charmmfsh ` - CHARMM with force switching and shifting -* :doc:`lj/charmmfsw/coul/long ` - CHARMM with force switching and long-rnage Coulombics -* :doc:`lj/class2 ` - COMPASS (class 2) force field with no Coulomb +* :doc:`lj/charmmfsw/coul/long ` - CHARMM with force switching and long-rnage Coulomb +* :doc:`lj/class2 ` - COMPASS (class 2) force field without Coulomb * :doc:`lj/class2/coul/cut ` - COMPASS with cutoff Coulomb * :doc:`lj/class2/coul/cut/soft ` - COMPASS with cutoff Coulomb with a soft core * :doc:`lj/class2/coul/long ` - COMPASS with long-range Coulomb +* :doc:`lj/class2/coul/long/cs ` - COMPASS with long-range Coulomb with core/shell adjustments * :doc:`lj/class2/coul/long/soft ` - COMPASS with long-range Coulomb with a soft core * :doc:`lj/class2/soft ` - COMPASS (class 2) force field with no Coulomb with a soft core * :doc:`lj/cubic ` - LJ with cubic after inflection point -* :doc:`lj/cut ` - cutoff Lennard-Jones potential with no Coulomb +* :doc:`lj/cut ` - cutoff Lennard-Jones potential without Coulomb * :doc:`lj/cut/coul/cut ` - LJ with cutoff Coulomb * :doc:`lj/cut/coul/cut/soft ` - LJ with cutoff Coulomb with a soft core * :doc:`lj/cut/coul/debye ` - LJ with Debye screening added to Coulomb -* :doc:`lj/cut/coul/dsf ` - LJ with Coulombics via damped shifted forces -* :doc:`lj/cut/coul/long ` - LJ with long-range Coulombics -* :doc:`lj/cut/coul/long/cs ` - ditto with core/shell adjustments -* :doc:`lj/cut/coul/long/soft ` - LJ with long-range Coulombics with a soft core -* :doc:`lj/cut/coul/msm ` - LJ with long-range MSM Coulombics -* :doc:`lj/cut/coul/wolf ` - LJ with Coulombics via Wolf potential +* :doc:`lj/cut/coul/dsf ` - LJ with Coulomb via damped shifted forces +* :doc:`lj/cut/coul/long ` - LJ with long-range Coulomb +* :doc:`lj/cut/coul/long/cs ` - LJ with long-range Coulomb with core/shell adjustments +* :doc:`lj/cut/coul/long/soft ` - LJ with long-range Coulomb with a soft core +* :doc:`lj/cut/coul/msm ` - LJ with long-range MSM Coulomb +* :doc:`lj/cut/coul/wolf ` - LJ with Coulomb via Wolf potential * :doc:`lj/cut/dipole/cut ` - point dipoles with cutoff * :doc:`lj/cut/dipole/long ` - point dipoles with long-range Ewald * :doc:`lj/cut/soft ` - LJ with a soft core -* :doc:`lj/cut/thole/long ` - LJ with Coulombics with thole damping +* :doc:`lj/cut/thole/long ` - LJ with Coulomb with thole damping * :doc:`lj/cut/tip4p/cut ` - LJ with cutoff Coulomb for TIP4P water * :doc:`lj/cut/tip4p/long ` - LJ with long-range Coulomb for TIP4P water * :doc:`lj/cut/tip4p/long/soft ` - LJ with cutoff Coulomb for TIP4P water with a soft core * :doc:`lj/expand ` - Lennard-Jones for variable size particles -* :doc:`lj/expand/coul/long ` - Lennard-Jones for variable size particles with long-range Coulombics +* :doc:`lj/expand/coul/long ` - Lennard-Jones for variable size particles with long-range Coulomb * :doc:`lj/gromacs ` - GROMACS-style Lennard-Jones potential -* :doc:`lj/gromacs/coul/gromacs ` - GROMACS-style LJ and Coulombic potential -* :doc:`lj/long/coul/long ` - long-range LJ and long-range Coulombics +* :doc:`lj/gromacs/coul/gromacs ` - GROMACS-style LJ and Coulomb potential +* :doc:`lj/long/coul/long ` - long-range LJ and long-range Coulomb * :doc:`lj/long/dipole/long ` - long-range LJ and long-range point dipoles -* :doc:`lj/long/tip4p/long ` - long-range LJ and long-range Coulombics for TIP4P water +* :doc:`lj/long/tip4p/long ` - long-range LJ and long-range Coulomb for TIP4P water * :doc:`lj/mdf ` - LJ potential with a taper function * :doc:`lj/sdk ` - LJ for SDK coarse-graining -* :doc:`lj/sdk/coul/long ` - LJ for SDK coarse-graining with long-range Coulombics -* :doc:`lj/sdk/coul/msm ` - LJ for SDK coarse-graining with long-range Coulombics via MSM +* :doc:`lj/sdk/coul/long ` - LJ for SDK coarse-graining with long-range Coulomb +* :doc:`lj/sdk/coul/msm ` - LJ for SDK coarse-graining with long-range Coulomb via MSM * :doc:`lj/sf/dipole/sf ` - LJ with dipole interaction with shifted forces * :doc:`lj/smooth ` - smoothed Lennard-Jones potential * :doc:`lj/smooth/linear ` - linear smoothed LJ potential @@ -255,7 +256,7 @@ accelerated styles exist. * :doc:`nb3b/harmonic ` - non-bonded 3-body harmonic potential * :doc:`nm/cut ` - N-M potential * :doc:`nm/cut/coul/cut ` - N-M potential with cutoff Coulomb -* :doc:`nm/cut/coul/long ` - N-M potential with long-range Coulombics +* :doc:`nm/cut/coul/long ` - N-M potential with long-range Coulomb * :doc:`oxdna/coaxstk ` - * :doc:`oxdna/excv ` - * :doc:`oxdna/hbond ` - @@ -315,7 +316,7 @@ accelerated styles exist. * :doc:`tersoff/zbl ` - Tersoff/ZBL 3-body potential * :doc:`thole ` - Coulomb interactions with thole damping * :doc:`tip4p/cut ` - Coulomb for TIP4P water w/out LJ -* :doc:`tip4p/long ` - long-range Coulombics for TIP4P water w/out LJ +* :doc:`tip4p/long ` - long-range Coulomb for TIP4P water w/out LJ * :doc:`tip4p/long/soft ` - * :doc:`tri/lj ` - LJ potential between triangles * :doc:`ufm ` - diff --git a/doc/src/prd.rst b/doc/src/prd.rst index c3bd1ad1d3297231aba83bff7248e87620c4cca7..d1acaf645e3de51a15289b86c430dfe60398f53e 100644 --- a/doc/src/prd.rst +++ b/doc/src/prd.rst @@ -52,19 +52,16 @@ replicas of a system. One or more replicas can be used. The total number of steps *N* to run can be interpreted in one of two ways; see discussion of the *time* keyword below. -PRD is described in :ref:`(Voter1998) ` by Art Voter. Similar to -global or local hyperdynamics (HD), PRD is a method for performing -accelerated dynamics that is suitable for infrequent-event systems -that obey first-order kinetics. A good overview of accelerated -dynamics methods for such systems in given in this review paper -:ref:`(Voter2002) ` from Art's group. To quote from the -paper: "The dynamical evolution is characterized by vibrational -excursions within a potential basin, punctuated by occasional -transitions between basins." The transition probability is -characterized by p(t) = k\*exp(-kt) where k is the rate constant. -Running multiple replicas gives an effective enhancement in the -timescale spanned by the multiple simulations, while waiting for an -event to occur. +PRD is described in :ref:`(Voter1998) ` by Art Voter. +Similar to global or local hyperdynamics (HD), PRD is a method for +performing accelerated dynamics that is suitable for infrequent-event +systems that obey first-order kinetics. A good overview of +accelerated dynamics methods (AMD) for such systems in given in this +review paper :ref:`(Voter2002) ` from Art's group. To +quote from the paper: "The dynamical evolution is characterized by +vibrational excursions within a potential basin, punctuated by +occasional transitions between basins. The transition probability is +characterized by p(t) = k\*exp(-kt) where k is the rate constant." Both PRD and HD produce a time-accurate trajectory that effectively extends the timescale over which a system can be simulated, but they diff --git a/doc/src/read_data.rst b/doc/src/read_data.rst index 642f930b9d8ca29b69802810b666ac0a68cf16cd..79f0e08fcb0b40da9974f3bd20baec3fb073c90f 100644 --- a/doc/src/read_data.rst +++ b/doc/src/read_data.rst @@ -107,11 +107,11 @@ command, after the third read_data command is used. The *add*\ , *offset*\ , *shift*\ , *extra*\ , and *group* keywords are useful in this context. -If a simulation box does not yet exist, the *add* keyword -cannot be used; the read_data command is being used for the first -time. If a simulation box does exist, due to using the -:doc:`create_box ` command, or a previous read_data command, -then the *add* keyword must be used. +If a simulation box does not yet exist, the *add* keyword cannot be +used; the read_data command is being used for the first time. If a +simulation box does exist, due to using the :doc:`create_box +` command, or a previous read_data command, then the *add* +keyword must be used. .. note:: @@ -571,68 +571,69 @@ appended to it, which indicate which image of a periodic simulation box the atom is in. These may be important to include for some kinds of analysis. -+------------+---------------------------------------------------------------------------+ -| angle | atom-ID molecule-ID atom-type x y z | -+------------+---------------------------------------------------------------------------+ -| atomic | atom-ID atom-type x y z | -+------------+---------------------------------------------------------------------------+ -| body | atom-ID atom-type bodyflag mass x y z | -+------------+---------------------------------------------------------------------------+ -| bond | atom-ID molecule-ID atom-type x y z | -+------------+---------------------------------------------------------------------------+ -| charge | atom-ID atom-type q x y z | -+------------+---------------------------------------------------------------------------+ -| dipole | atom-ID atom-type q x y z mux muy muz | -+------------+---------------------------------------------------------------------------+ -| dpd | atom-ID atom-type theta x y z | -+------------+---------------------------------------------------------------------------+ -| edpd | atom-ID atom-type edpd_temp edpd_cv x y z | -+------------+---------------------------------------------------------------------------+ -| mdpd | atom-ID atom-type rho x y z | -+------------+---------------------------------------------------------------------------+ -| tdpd | atom-ID atom-type x y z cc1 cc2 ... ccNspecies | -+------------+---------------------------------------------------------------------------+ -| electron | atom-ID atom-type q spin eradius x y z | -+------------+---------------------------------------------------------------------------+ -| ellipsoid | atom-ID atom-type ellipsoidflag density x y z | -+------------+---------------------------------------------------------------------------+ -| full | atom-ID molecule-ID atom-type q x y z | -+------------+---------------------------------------------------------------------------+ -| line | atom-ID molecule-ID atom-type lineflag density x y z | -+------------+---------------------------------------------------------------------------+ -| meso | atom-ID atom-type rho e cv x y z | -+------------+---------------------------------------------------------------------------+ -| molecular | atom-ID molecule-ID atom-type x y z | -+------------+---------------------------------------------------------------------------+ -| peri | atom-ID atom-type volume density x y z | -+------------+---------------------------------------------------------------------------+ -| smd | atom-ID atom-type molecule volume mass kernel-radius contact-radius x y z | -+------------+---------------------------------------------------------------------------+ -| sphere | atom-ID atom-type diameter density x y z | -+------------+---------------------------------------------------------------------------+ -| spin | atom-ID atom-type sp x y z spx spy spz | -+------------+---------------------------------------------------------------------------+ -| template | atom-ID molecule-ID template-index template-atom atom-type x y z | -+------------+---------------------------------------------------------------------------+ -| tri | atom-ID molecule-ID atom-type triangleflag density x y z | -+------------+---------------------------------------------------------------------------+ -| wavepacket | atom-ID atom-type charge spin eradius etag cs_re cs_im x y z | -+------------+---------------------------------------------------------------------------+ -| hybrid | atom-ID atom-type x y z sub-style1 sub-style2 ... | -+------------+---------------------------------------------------------------------------+ +.. list-table:: + + * - angle + - atom-ID molecule-ID atom-type x y z + * - atomic + - atom-ID atom-type x y z + * - body + - atom-ID atom-type bodyflag mass x y z + * - bond + - atom-ID molecule-ID atom-type x y z + * - charge + - atom-type q x y z + * - dipole + - atom-ID atom-type q x y z mux muy muz + * - dpd + - atom-ID atom-type theta x y z + * - edpd + - atom-ID atom-type edpd_temp edpd_cv x y z + * - electron + - atom-ID atom-type q spin eradius x y z + * - ellipsoid + - atom-ID atom-type ellipsoidflag density x y z + * - full + - atom-ID molecule-ID atom-type q x y z + * - line + - atom-ID molecule-ID atom-type lineflag density x y z + * - mdpd + - atom-ID atom-type rho x y z + * - molecular + - atom-ID molecule-ID atom-type x y z + * - peri + - atom-ID atom-type volume density x y z + * - smd + - atom-ID atom-type molecule volume mass kernel-radius contact-radius x0 y0 z0 x y z + * - sph + - atom-ID atom-type rho esph cv x y z + * - sphere + - atom-ID atom-type diameter density x y z + * - spin + - atom-ID atom-type x y z spx spy spz sp + * - tdpd + - atom-ID atom-type x y z cc1 cc2 ... ccNspecies + * - template + - atom-ID molecule-ID template-index template-atom atom-type x y z + * - tri + - atom-ID molecule-ID atom-type triangleflag density x y z + * - wavepacket + - atom-ID atom-type charge spin eradius etag cs_re cs_im x y z + * - hybrid + - atom-ID atom-type x y z sub-style1 sub-style2 ... The per-atom values have these meanings and units, listed alphabetically: * atom-ID = integer ID of atom * atom-type = type of atom (1-Ntype) * bodyflag = 1 for body particles, 0 for point particles -* cc = chemical concentration for tDPD particles for each species (mole/volume units) +* ccN = chemical concentration for tDPD particles for each species (mole/volume units) * contact-radius = ??? (distance units) * cs_re,cs_im = real/imaginary parts of wave packet coefficients * cv = heat capacity (need units) for SPH particles * density = density of particle (mass/distance\^3 or mass/distance\^2 or mass/distance units, depending on dimensionality of particle) * diameter = diameter of spherical atom (distance units) -* e = energy (need units) for SPH particles +* esph = energy (need units) for SPH particles * edpd_temp = temperature for eDPD particles (temperature units) * edpd_cv = volumetric heat capacity for eDPD particles (energy/temperature/volume units) * ellipsoidflag = 1 for ellipsoidal particles, 0 for point particles @@ -646,14 +647,15 @@ The per-atom values have these meanings and units, listed alphabetically: * q = charge on atom (charge units) * rho = density (need units) for SPH particles * spin = electron spin (+1/-1), 0 = nuclei, 2 = fixed-core, 3 = pseudo-cores (i.e. ECP) -* sp = norm of magnetic spin of atom (in number of Bohr magnetons) -* spx,spy,spz = components of magnetic spin of atom (adim normalized vector) +* sp = magnitude of magnetic spin of atom (Bohr magnetons) +* spx,spy,spz = components of magnetic spin of atom (unit vector) * template-atom = which atom within a template molecule the atom is * template-index = which molecule within the molecule template the atom is part of * theta = internal temperature of a DPD particle * triangleflag = 1 for triangular particles, 0 for point or spherical particles * volume = volume of Peridynamic particle (distance\^3 units) * x,y,z = coordinates of atom (distance units) +* x0,y0,z0 = original (strain-free) coordinates of atom (distance units) The units for these quantities depend on the unit style; see the :doc:`units ` command for details. @@ -715,17 +717,18 @@ as spheres when converting density to mass. However, they can also be modeled as 2d discs (circles) if the :doc:`set density/disc ` command is used to reset their mass after the read_data command is used. A *disc* keyword can also be used with time integration fixes, -such as :doc:`fix nve/sphere ` and :doc:`fix nvt/sphere ` to time integrate their motion as 2d +such as :doc:`fix nve/sphere ` and :doc:`fix +nvt/sphere ` to time integrate their motion as 2d discs (not 3d spheres), by changing their moment of inertia. -For atom_style hybrid, following the 5 initial values (ID,type,x,y,z), -specific values for each sub-style must be listed. The order of the -sub-styles is the same as they were listed in the -:doc:`atom_style ` command. The sub-style specific values -are those that are not the 5 standard ones (ID,type,x,y,z). For -example, for the "charge" sub-style, a "q" value would appear. For -the "full" sub-style, a "molecule-ID" and "q" would appear. These are -listed in the same order they appear as listed above. Thus if +For atom\_style hybrid, following the 5 initial values +(ID,type,x,y,z), specific values for each sub-style must be listed. +The order of the sub-styles is the same as they were listed in the +:doc:`atom_style ` command. The specific values for each +sub-style are those that are not the 5 standard ones (ID,type,x,y,z). +For example, for the "charge" sub-style, a "q" value would appear. +For the "full" sub-style, a "molecule-ID" and "q" would appear. These +are listed in the same order they appear as listed above. Thus if .. parsed-literal:: @@ -738,12 +741,14 @@ were used in the input script, each atom line would have these fields: atom-ID atom-type x y z q diameter density Note that if a non-standard value is defined by multiple sub-styles, -it must appear multiple times in the atom line. E.g. the atom line -for atom_style hybrid dipole full would list "q" twice: +it only appears once in the atom line. E.g. the atom line for +atom_style hybrid dipole full would list "q" only once, with the +dipole sub-style fields; "q" does not appear with the full sub-style +fields. .. parsed-literal:: - atom-ID atom-type x y z q mux muy myz molecule-ID q + atom-ID atom-type x y z q mux muy myz molecule-ID Atom lines specify the (x,y,z) coordinates of atoms. These can be inside or outside the simulation box. When the data file is read, @@ -1176,9 +1181,9 @@ pair style. See the :doc:`pair_style ` and :doc:`pair_coeff ` commands for details. Since pair coefficients for types I != J are not specified, these will be generated automatically by the pair style's mixing rule. See the -individual pair_style doc pages and the :doc:`pair_modify mix ` command for details. Pair coefficients can also -be set via the :doc:`pair_coeff ` command in the input -script. +individual pair_style doc pages and the :doc:`pair_modify mix +` command for details. Pair coefficients can also be set +via the :doc:`pair_coeff ` command in the input script. ---------- @@ -1200,15 +1205,15 @@ script. 3 3 0.022 2.35197 0.022 2.35197 3 5 0.022 2.35197 0.022 2.35197 -This section must have N\*(N+1)/2 lines where N = # of atom types. The -number and meaning of the coefficients are specific to the defined +This section must have N\*(N+1)/2 lines where N = # of atom types. +The number and meaning of the coefficients are specific to the defined pair style. See the :doc:`pair_style ` and :doc:`pair_coeff ` commands for details. Since pair coefficients for types I != J are all specified, these values will turn off the default mixing rule defined by the pair style. See the -individual pair_style doc pages and the :doc:`pair_modify mix ` command for details. Pair coefficients can also -be set via the :doc:`pair_coeff ` command in the input -script. +individual pair_style doc pages and the :doc:`pair_modify mix +` command for details. Pair coefficients can also be set +via the :doc:`pair_coeff ` command in the input script. ---------- diff --git a/doc/src/run_style.rst b/doc/src/run_style.rst index 474eab2b856389f8e26c36cb708ee06d9c7cd039..7bddb0efcd6236d9f53c45980a3f6bdeca69bdf6 100644 --- a/doc/src/run_style.rst +++ b/doc/src/run_style.rst @@ -150,8 +150,8 @@ timestep, angle interactions computed 4x, pair interactions computed The :doc:`timestep ` command sets the large timestep for the outermost rRESPA level. Thus if the 3 loop factors are "2 2 2" for -4-level rRESPA, and the outer timestep is set to 4.0 fmsec, then the -inner timestep would be 8x smaller or 0.5 fmsec. All other LAMMPS +4-level rRESPA, and the outer timestep is set to 4.0 fs, then the +inner timestep would be 8x smaller or 0.5 fs. All other LAMMPS commands that specify number of timesteps (e.g. :doc:`thermo ` for thermo output every N steps, :doc:`neigh_modify delay/every ` parameters, :doc:`dump ` every N steps, etc) refer to the outermost timesteps. @@ -213,10 +213,10 @@ With that caveat, a few rules-of-thumb may be useful in selecting simulations using the CHARMM or a similar all-atom force field, but the concepts are adaptable to other problems. Without SHAKE, bonds involving hydrogen atoms exhibit high-frequency vibrations and require -a timestep on the order of 0.5 fmsec in order to conserve energy. The +a timestep on the order of 0.5 fs in order to conserve energy. The relatively inexpensive force computations for the bonds, angles, -impropers, and dihedrals can be computed on this innermost 0.5 fmsec -step. The outermost timestep cannot be greater than 4.0 fmsec without +impropers, and dihedrals can be computed on this innermost 0.5 fs +step. The outermost timestep cannot be greater than 4.0 fs without risking energy drift. Smooth switching of forces between the levels of the rRESPA hierarchy is also necessary to avoid drift, and a 1-2 angstrom "healing distance" (the distance between the outer and inner @@ -230,14 +230,14 @@ simulations: run_style respa 4 2 2 2 inner 2 4.5 6.0 middle 3 8.0 10.0 outer 4 With these settings, users can expect good energy conservation and -roughly a 2.5 fold speedup over the *verlet* style with a 0.5 fmsec +roughly a 2.5 fold speedup over the *verlet* style with a 0.5 fs timestep. If SHAKE is used with the *respa* style, time reversibility is lost, but substantially longer time steps can be achieved. For biomolecular simulations using the CHARMM or similar all-atom force field, bonds involving hydrogen atoms exhibit high frequency vibrations and require -a time step on the order of 0.5 fmsec in order to conserve energy. +a time step on the order of 0.5 fs in order to conserve energy. These high frequency modes also limit the outer time step sizes since the modes are coupled. It is therefore desirable to use SHAKE with respa in order to freeze out these high frequency motions and increase @@ -253,7 +253,7 @@ rRESPA: With these settings, users can expect good energy conservation and roughly a 1.5 fold speedup over the *verlet* style with SHAKE and a -2.0 fmsec timestep. +2.0 fs timestep. For non-biomolecular simulations, the *respa* style can be advantageous if there is a clear separation of time scales - fast and diff --git a/doc/src/set.rst b/doc/src/set.rst index 84792d1a585151d3b684c11400cca24d8f6ad76d..b986e4b26f783f9fd73546f3da98be8c7cb95872 100644 --- a/doc/src/set.rst +++ b/doc/src/set.rst @@ -13,7 +13,7 @@ Syntax * style = *atom* or *type* or *mol* or *group* or *region* * ID = atom ID range or type range or mol ID range or group ID or region ID * one or more keyword/value pairs may be appended -* keyword = *type* or *type/fraction* or *type/ratio* or *type/subset* or *mol* or *x* or *y* or *z* or *charge* or *dipole* or *dipole/random* or *quat* or *spin* or *spin/random* or *quat* or *quat/random* or *diameter* or *shape* or *length* or *tri* or *theta* or *theta/random* or *angmom* or *omega* or *mass* or *density* or *density/disc* or *volume* or *image* or *bond* or *angle* or *dihedral* or *improper* or *meso/e* or *meso/cv* or *meso/rho* or *smd/contact/radius* or *smd/mass/density* or *dpd/theta* or *edpd/temp* or *edpd/cv* or *cc* or *i_name* or *d_name* +* keyword = *type* or *type/fraction* or *type/ratio* or *type/subset* or *mol* or *x* or *y* or *z* or *charge* or *dipole* or *dipole/random* or *quat* or *spin* or *spin/random* or *quat* or *quat/random* or *diameter* or *shape* or *length* or *tri* or *theta* or *theta/random* or *angmom* or *omega* or *mass* or *density* or *density/disc* or *volume* or *image* or *bond* or *angle* or *dihedral* or *improper* or *sph/e* or *sph/cv* or *sph/rho* or *smd/contact/radius* or *smd/mass/density* or *dpd/theta* or *edpd/temp* or *edpd/cv* or *cc* or *i_name* or *d_name* .. parsed-literal:: @@ -94,11 +94,11 @@ Syntax *angle* value = angle type for all angles between selected atoms *dihedral* value = dihedral type for all dihedrals between selected atoms *improper* value = improper type for all impropers between selected atoms - *meso/e* value = energy of SPH particles (need units) + *sph/e* value = energy of SPH particles (need units) value can be an atom-style variable (see below) - *meso/cv* value = heat capacity of SPH particles (need units) + *sph/cv* value = heat capacity of SPH particles (need units) value can be an atom-style variable (see below) - *meso/rho* value = density of SPH particles (need units) + *sph/rho* value = density of SPH particles (need units) value can be an atom-style variable (see below) *smd/contact/radius* = radius for short range interactions, i.e. contact and friction value can be an atom-style variable (see below) @@ -299,29 +299,31 @@ for each particle set by this command. This keyword does not allow use of an atom-style variable. Keyword *diameter* sets the size of the selected atoms. The particles -must be finite-size spheres as defined by the :doc:`atom_style sphere ` command. The diameter of a particle can be -set to 0.0, which means they will be treated as point particles. Note -that this command does not adjust the particle mass, even if it was -defined with a density, e.g. via the :doc:`read_data ` -command. +must be finite-size spheres as defined by the :doc:`atom_style sphere +` command. The diameter of a particle can be set to 0.0, +which means they will be treated as point particles. Note that this +command does not adjust the particle mass, even if it was defined with +a density, e.g. via the :doc:`read_data ` command. Keyword *shape* sets the size and shape of the selected atoms. The -particles must be ellipsoids as defined by the :doc:`atom_style ellipsoid ` command. The *Sx*\ , *Sy*\ , *Sz* settings are -the 3 diameters of the ellipsoid in each direction. All 3 can be set -to the same value, which means the ellipsoid is effectively a sphere. -They can also all be set to 0.0 which means the particle will be -treated as a point particle. Note that this command does not adjust -the particle mass, even if it was defined with a density, e.g. via the -:doc:`read_data ` command. +particles must be ellipsoids as defined by the :doc:`atom_style +ellipsoid ` command. The *Sx*\ , *Sy*\ , *Sz* settings +are the 3 diameters of the ellipsoid in each direction. All 3 can be +set to the same value, which means the ellipsoid is effectively a +sphere. They can also all be set to 0.0 which means the particle will +be treated as a point particle. Note that this command does not +adjust the particle mass, even if it was defined with a density, +e.g. via the :doc:`read_data ` command. Keyword *length* sets the length of selected atoms. The particles -must be line segments as defined by the :doc:`atom_style line ` command. If the specified value is non-zero the -line segment is (re)set to a length = the specified value, centered -around the particle position, with an orientation along the x-axis. -If the specified value is 0.0, the particle will become a point -particle. Note that this command does not adjust the particle mass, -even if it was defined with a density, e.g. via the -:doc:`read_data ` command. +must be line segments as defined by the :doc:`atom_style line +` command. If the specified value is non-zero the line +segment is (re)set to a length = the specified value, centered around +the particle position, with an orientation along the x-axis. If the +specified value is 0.0, the particle will become a point particle. +Note that this command does not adjust the particle mass, even if it +was defined with a density, e.g. via the :doc:`read_data ` +command. Keyword *tri* sets the size of selected atoms. The particles must be triangles as defined by the :doc:`atom_style tri ` command. @@ -335,7 +337,8 @@ does not adjust the particle mass, even if it was defined with a density, e.g. via the :doc:`read_data ` command. Keyword *theta* sets the orientation of selected atoms. The particles -must be line segments as defined by the :doc:`atom_style line ` command. The specified value is used to set the +must be line segments as defined by the :doc:`atom_style line +` command. The specified value is used to set the orientation angle of the line segments with respect to the x axis. Keyword *theta/random* randomizes the orientation of theta for the @@ -346,44 +349,47 @@ regardless of how many processors are being used. This keyword does not allow use of an atom-style variable. Keyword *angmom* sets the angular momentum of selected atoms. The -particles must be ellipsoids as defined by the :doc:`atom_style ellipsoid ` command or triangles as defined by the -:doc:`atom_style tri ` command. The angular momentum vector -of the particles is set to the 3 specified components. +particles must be ellipsoids as defined by the :doc:`atom_style +ellipsoid ` command or triangles as defined by the +:doc:`atom_style tri ` command. The angular momentum +vector of the particles is set to the 3 specified components. Keyword *omega* sets the angular velocity of selected atoms. The -particles must be spheres as defined by the -:doc:`atom_style sphere ` command. The angular velocity -vector of the particles is set to the 3 specified components. +particles must be spheres as defined by the :doc:`atom_style sphere +` command. The angular velocity vector of the particles +is set to the 3 specified components. Keyword *mass* sets the mass of all selected particles. The particles must have a per-atom mass attribute, as defined by the -:doc:`atom_style ` command. See the "mass" command for how -to set mass values on a per-type basis. +:doc:`atom_style ` command. See the "mass" command for +how to set mass values on a per-type basis. Keyword *density* or *density/disc* also sets the mass of all selected particles, but in a different way. The particles must have a per-atom mass attribute, as defined by the :doc:`atom_style ` -command. If the atom has a radius attribute (see :doc:`atom_style sphere `) and its radius is non-zero, its mass is set -from the density and particle volume for 3d systems (the input density -is assumed to be in mass/distance\^3 units). For 2d, the default is -for LAMMPS to model particles with a radius attribute as spheres. +command. If the atom has a radius attribute (see :doc:`atom_style +sphere `) and its radius is non-zero, its mass is set from +the density and particle volume for 3d systems (the input density is +assumed to be in mass/distance\^3 units). For 2d, the default is for +LAMMPS to model particles with a radius attribute as spheres. However, if the *density/disc* keyword is used, then they can be modeled as 2d discs (circles). Their mass is set from the density and particle area (the input density is assumed to be in mass/distance\^2 units). -If the atom has a shape attribute (see :doc:`atom_style ellipsoid `) and its 3 shape parameters are non-zero, -then its mass is set from the density and particle volume (the input -density is assumed to be in mass/distance\^3 units). The -*density/disc* keyword has no effect; it does not (yet) treat 3d -ellipsoids as 2d ellipses. +If the atom has a shape attribute (see :doc:`atom_style ellipsoid +`) and its 3 shape parameters are non-zero, then its mass +is set from the density and particle volume (the input density is +assumed to be in mass/distance\^3 units). The *density/disc* keyword +has no effect; it does not (yet) treat 3d ellipsoids as 2d ellipses. -If the atom has a length attribute (see :doc:`atom_style line `) and its length is non-zero, then its mass is -set from the density and line segment length (the input density is -assumed to be in mass/distance units). If the atom has an area -attribute (see :doc:`atom_style tri `) and its area is -non-zero, then its mass is set from the density and triangle area (the -input density is assumed to be in mass/distance\^2 units). +If the atom has a length attribute (see :doc:`atom_style line +`) and its length is non-zero, then its mass is set from +the density and line segment length (the input density is assumed to +be in mass/distance units). If the atom has an area attribute (see +:doc:`atom_style tri `) and its area is non-zero, then its +mass is set from the density and triangle area (the input density is +assumed to be in mass/distance\^2 units). If none of these cases are valid, then the mass is set to the density value directly (the input density is assumed to be in mass units). @@ -399,14 +405,15 @@ defined. A value of 2 means add 2 box lengths to get the true value. A value of -1 means subtract 1 box length to get the true value. LAMMPS updates these flags as atoms cross periodic boundaries during the simulation. The flags can be output with atom snapshots via the -:doc:`dump ` command. If a value of NULL is specified for any of -nx,ny,nz, then the current image value for that dimension is unchanged. -For non-periodic dimensions only a value of 0 can be specified. -This command can be useful after a system has been equilibrated and -atoms have diffused one or more box lengths in various directions. -This command can then reset the image values for atoms so that they -are effectively inside the simulation box, e.g if a diffusion -coefficient is about to be measured via the :doc:`compute msd ` command. Care should be taken not to reset the +:doc:`dump ` command. If a value of NULL is specified for any +of nx,ny,nz, then the current image value for that dimension is +unchanged. For non-periodic dimensions only a value of 0 can be +specified. This command can be useful after a system has been +equilibrated and atoms have diffused one or more box lengths in +various directions. This command can then reset the image values for +atoms so that they are effectively inside the simulation box, e.g if a +diffusion coefficient is about to be measured via the :doc:`compute +msd ` command. Care should be taken not to reset the image flags of two atoms in a bond to the same value if the bond straddles a periodic boundary (rather they should be different by +/- 1). This will not affect the dynamics of a simulation, but may mess @@ -423,10 +430,10 @@ etc) was set by the *bond types* (\ *angle types*\ , etc) field in the header of the data file read by the :doc:`read_data ` command. These keywords do not allow use of an atom-style variable. -Keywords *meso/e*\ , *meso/cv*\ , and *meso/rho* set the energy, heat +Keywords *sph/e*\ , *sph/cv*\ , and *sph/rho* set the energy, heat capacity, and density of smoothed particle hydrodynamics (SPH) -particles. See `this PDF guide `_ to -using SPH in LAMMPS. +particles. See `this PDF guide `_ +to using SPH in LAMMPS. Keyword *smd/mass/density* sets the mass of all selected particles, but it is only applicable to the Smooth Mach Dynamics package diff --git a/doc/src/tad.rst b/doc/src/tad.rst index 7f4845dc3c5988161824b3546608060128927bc3..c3cd3b825bba3c5b3ade13670cc7c7737d404d01 100644 --- a/doc/src/tad.rst +++ b/doc/src/tad.rst @@ -58,18 +58,21 @@ Run a temperature accelerated dynamics (TAD) simulation. This method requires two or more partitions to perform NEB transition state searches. -TAD is described in :ref:`this paper ` by Art Voter. It is a method -that uses accelerated dynamics at an elevated temperature to generate -results at a specified lower temperature. A good overview of -accelerated dynamics methods for such systems is given in :ref:`this review paper ` from the same group. In general, these methods assume -that the long-time dynamics is dominated by infrequent events i.e. the -system is confined to low energy basins for long periods, -punctuated by brief, randomly-occurring transitions to adjacent -basins. TAD is suitable for infrequent-event systems, where in +TAD is described in :ref:`this paper ` by Art Voter. It is +a method that uses accelerated dynamics at an elevated temperature to +generate results at a specified lower temperature. A good overview of +accelerated dynamics methods (AMD) for such systems is given in +:ref:`this review paper ` from the same group. To quote +from the review paper: "The dynamical evolution is characterized by +vibrational excursions within a potential basin, punctuated by +occasional transitions between basins. The transition probability is +characterized by p(t) = k\*exp(-kt) where k is the rate constant." + +TAD is a suitable AMD method for infrequent-event systems, where in addition, the transition kinetics are well-approximated by harmonic -transition state theory (hTST). In hTST, the temperature dependence of -transition rates follows the Arrhenius relation. As a consequence a -set of event times generated in a high-temperature simulation can be +transition state theory (hTST). In hTST, the temperature dependence +of transition rates follows the Arrhenius relation. As a consequence +a set of event times generated in a high-temperature simulation can be mapped to a set of much longer estimated times in the low-temperature system. However, because this mapping involves the energy barrier of the transition event, which is different for each event, the first @@ -79,8 +82,8 @@ events from the current basin. After each event, the simulation is reflected backwards into the current basin. This is repeated until the stopping criterion is satisfied, at which point the event with the earliest low-temperature occurrence time is selected. The stopping -criterion is that the confidence measure be greater than -1-\ *delta*\ . The confidence measure is the probability that no earlier +criterion is that the confidence measure be greater than 1-\ *delta*\ +. The confidence measure is the probability that no earlier low-temperature event will occur at some later time in the high-temperature simulation. hTST provides an lower bound for this probability, based on the user-specified minimum pre-exponential diff --git a/doc/src/timestep.rst b/doc/src/timestep.rst index 7ee090740abf5648b8edc0ed69021b96138eb5e1..e512eed1b2c901e05091f671e8521b11d7acd542 100644 --- a/doc/src/timestep.rst +++ b/doc/src/timestep.rst @@ -46,22 +46,22 @@ Related commands Default """"""" -+--------------------------------+------------+-----------------------+ -| choice of :doc:`units ` | time units | default timestep size | -+--------------------------------+------------+-----------------------+ -| lj | tau | 0.005 tau | -+--------------------------------+------------+-----------------------+ -| real | fmsec | 1.0 fmsec | -+--------------------------------+------------+-----------------------+ -| metal | psec | 0.001 psec | -+--------------------------------+------------+-----------------------+ -| si | sec | 1.0e-8 sec (10 nsec) | -+--------------------------------+------------+-----------------------+ -| cgs | sec | 1.0e-8 sec (10 nsec) | -+--------------------------------+------------+-----------------------+ -| electron | fmsec | 0.001 fmsec | -+--------------------------------+------------+-----------------------+ -| micro | usec | 2.0 usec | -+--------------------------------+------------+-----------------------+ -| nano | nsec | 0.00045 nsec | -+--------------------------------+------------+-----------------------+ ++--------------------------------+---------------+-----------------------+ +| choice of :doc:`units ` | time units | default timestep size | ++--------------------------------+---------------+-----------------------+ +| lj | :math:`\tau` | 0.005 :math:`\tau` | ++--------------------------------+---------------+-----------------------+ +| real | fs | 1.0 fs | ++--------------------------------+---------------+-----------------------+ +| metal | ps | 0.001 ps | ++--------------------------------+---------------+-----------------------+ +| si | s | 1.0e-8 s (10 ns) | ++--------------------------------+---------------+-----------------------+ +| cgs | s | 1.0e-8 s (10 ns) | ++--------------------------------+---------------+-----------------------+ +| electron | fs | 0.001 fs | ++--------------------------------+---------------+-----------------------+ +| micro | :math:`\mu`\ s| 2.0 :math:`\mu`\ s | ++--------------------------------+---------------+-----------------------+ +| nano | ns | 0.00045 ns | ++--------------------------------+---------------+-----------------------+ diff --git a/doc/src/units.rst b/doc/src/units.rst index 95792f7edff0ddc7288b759998c01591c52ce462..65638b541a480b5b2fe30d827a3de474cfe54057 100644 --- a/doc/src/units.rst +++ b/doc/src/units.rst @@ -203,7 +203,7 @@ For style *nano*\ , these are the units: The units command also sets the timestep size and neighbor skin distance to default values for each style: -* For style *lj* these are dt = 0.005 tau and skin = 0.3 sigma. +* For style *lj* these are dt = 0.005 :math:`\tau` and skin = 0.3 :math:`\sigma`. * For style *real* these are dt = 1.0 femtoseconds and skin = 2.0 Angstroms. * For style *metal* these are dt = 0.001 picoseconds and skin = 2.0 Angstroms. * For style *si* these are dt = 1.0e-8 seconds and skin = 0.001 meters. diff --git a/doc/src/velocity.rst b/doc/src/velocity.rst index 59ce0a19f681400aa0fdc22fe14ff4d4b7b8f63a..d8823d6b7ef44f12ea1cb20bdd2cae2262b6df2e 100644 --- a/doc/src/velocity.rst +++ b/doc/src/velocity.rst @@ -225,8 +225,8 @@ body defined by the fix, as described above. The *units* keyword is used by *set* and *ramp*\ . If units = box, the velocities and coordinates specified in the velocity command are in the standard units described by the :doc:`units ` command -(e.g. Angstroms/fmsec for real units). If units = lattice, velocities -are in units of lattice spacings per time (e.g. spacings/fmsec) and +(e.g. Angstroms/fs for real units). If units = lattice, velocities +are in units of lattice spacings per time (e.g. spacings/fs) and coordinates are in lattice spacings. The :doc:`lattice ` command must have been previously used to define the lattice spacing. diff --git a/doc/utils/check-packages.py b/doc/utils/check-packages.py index 99968f9a2204d2077d05773192c5ce13c279f68a..52d527fd9510c58e173e8ee0f05cfa92c6e1f859 100755 --- a/doc/utils/check-packages.py +++ b/doc/utils/check-packages.py @@ -45,7 +45,7 @@ usrpkg = [] # folder, and is not called 'MAKE' is a package for d in pkgdirs: - pkg = dirs.match(d)[1] + pkg = dirs.match(d).group(1) if not os.path.isdir(os.path.join(src,pkg)): continue if pkg in ['DEPEND','MAKE','STUBS']: continue if user.match(pkg): diff --git a/doc/utils/sphinx-config/false_positives.txt b/doc/utils/sphinx-config/false_positives.txt index 91b5c09b9363e0b8cbb8e15d2ced2ec6bec88dd9..6686cd45b5042e7e2da4c3140db47a9d4d65fe2e 100644 --- a/doc/utils/sphinx-config/false_positives.txt +++ b/doc/utils/sphinx-config/false_positives.txt @@ -170,6 +170,7 @@ ba Babadi Babaei backcolor +backends Baczewski Bagi Bagnold @@ -262,6 +263,7 @@ Boltzman BondAngle BondBond bondchk +BondingIDs bondmax bondtype Bonet @@ -325,6 +327,7 @@ ccache ccachepiecewise ccl ccmake +ccN ccNspecies CCu cd @@ -367,6 +370,8 @@ Chemnitz Cheng Chenoweth chiral +ChiralIDs +chiralIDs chirality Cho chris @@ -433,6 +438,7 @@ cond conda Conda Condens +Connor conf config configfile @@ -487,12 +493,14 @@ cstdlib cstring cstyle csvr +ctrl Ctypes ctypes cuda Cuda CUDA CuH +cuFFT Cummins Curk customIDs @@ -564,6 +572,7 @@ defn deformable del delaystep +DeleteIDs deleteIDs Dellago delocalization @@ -578,12 +587,14 @@ dephasing dequidt Dequidt der +dereference derekt Derjagin Derjaguin Derlet Deserno Destree +destructor detils Devanathan devel @@ -618,7 +629,6 @@ dipolar dir Direc dirname -disarmmd discoverable discretization discretized @@ -713,6 +723,7 @@ Ec ecoul ecp Ecut +EdgeIDs edgeIDs edihed edim @@ -823,6 +834,7 @@ Espanol Eshelby eshelby eskm +esph esu esub esw @@ -930,7 +942,6 @@ fmackay fmag fmass fmm -fmsec fmx fmy fmz @@ -1050,6 +1061,7 @@ gpu gpuID gpus gradV +GradVidottan graining Graining Grama @@ -1157,6 +1169,7 @@ Houlle howto Howto Hoyt +Hs hstyle html hTST @@ -1388,6 +1401,7 @@ KDevelop ke KE Keblinski +Keefe keflag Keir Kelchner @@ -1410,6 +1424,7 @@ Klapp Kloss kmax Kmax +KMP Knizhnik knl Kofke @@ -1531,6 +1546,7 @@ libmeam libmessage libmpi libmpich +libnuma libplumed libplumedKernel libpng @@ -1578,6 +1594,7 @@ lmpqst lmpsdata Lmpsdata lmptype +LMT ln localTemp localvectors @@ -1593,6 +1610,7 @@ Lookups LoopVar Lorant lorenz +Los lossless lossy Lozovik @@ -1648,6 +1666,7 @@ manybody MANYBODY Maras Marchetti +Marchi Mariella Marrink Marroquin @@ -1722,6 +1741,7 @@ Melchor Meloni Melrose Mem +mem memalign MEMALIGN membered @@ -1767,6 +1787,7 @@ Militzer Minary mincap Mindlin +minhbonds mingw minima minimizations @@ -1963,6 +1984,7 @@ Neumann Nevent nevery Nevery +newfile Newns newtype Neyts @@ -2055,9 +2077,9 @@ Nroff nrun Ns Nsample -nsec Nskip Nspecies +ns nsq Nstart nstats @@ -2092,7 +2114,6 @@ nvc nvcc nve nvidia -Nvidia nvk nvt Nwait @@ -2331,7 +2352,6 @@ ps Ps pscreen pscrozi -psec pseudodynamics pseudopotential Pstart @@ -2427,6 +2447,7 @@ Ravelo rc Rc Rcm +rcmax Rcmx Rcmy Rcut @@ -2435,6 +2456,7 @@ rdc rdf RDideal rdx +reacter README realtime reamin @@ -2545,6 +2567,7 @@ Rockett Rodrigues Rohart Ronchetti +Ronevich Rosati Rosenberger Rossky @@ -2657,6 +2680,8 @@ Shi Shiga Shinoda shlib +SHM +shm shockvel si SiC @@ -2824,6 +2849,7 @@ Synechococcus sys sysdim Syst +systemd Sz Tabbernor tabinner @@ -2945,6 +2971,7 @@ traceless tradeoff traj Tranchida +transactional transferability translational Translational diff --git a/examples/ASPHERE/line/in.line b/examples/ASPHERE/line/in.line index cd7fed1639163feb5846cd5e109f2d87c5771dd6..815eacfa35352da016ecf623879a47fc61810335 100644 --- a/examples/ASPHERE/line/in.line +++ b/examples/ASPHERE/line/in.line @@ -10,7 +10,7 @@ velocity all create 1.44 320984 loop geom neighbor 0.3 bin neigh_modify delay 0 every 1 check yes -neigh_modify exclude molecule all +neigh_modify exclude molecule/intra all pair_style line/lj 2.5 pair_coeff * * 1.0 1.0 1.0 0.25 2.5 @@ -33,8 +33,10 @@ compute 2 all ke compute 3 all pe variable toteng equal (c_1+c_2+c_3)/atoms +compute_modify thermo_temp extra/dof -350 + thermo 1000 -thermo_style custom step temp f_2 pe ke c_1 c_2 c_3 v_toteng +thermo_style custom step f_2 pe ke c_1 c_2 c_3 v_toteng run 10000 diff --git a/examples/ASPHERE/line/in.line.srd b/examples/ASPHERE/line/in.line.srd index 4b89b14b4b9215162842b3b2b6f13cb444aed083..6ec1998d319f117391b39f6e3828e53e199580de 100644 --- a/examples/ASPHERE/line/in.line.srd +++ b/examples/ASPHERE/line/in.line.srd @@ -36,7 +36,7 @@ velocity small create 1.44 87287 loop geom neighbor 0.3 bin neigh_modify delay 0 every 1 check yes -neigh_modify exclude molecule big include big +neigh_modify exclude molecule/intra big include big comm_modify mode multi group big vel yes neigh_modify include big @@ -68,13 +68,15 @@ compute tbig big temp variable pebig equal pe*atoms/count(big) variable ebig equal etotal*atoms/count(big) +compute_modify tbig extra/dof -350 + compute 1 big erotate/asphere compute 2 all ke compute 3 all pe variable toteng equal (c_1+c_2+c_3)/atoms thermo 1000 -thermo_style custom step temp c_tsmall f_2[9] c_1 etotal & +thermo_style custom step c_tsmall f_2[9] c_1 etotal & v_pebig v_ebig press thermo_modify temp tbig diff --git a/examples/ASPHERE/tri/in.tri.srd b/examples/ASPHERE/tri/in.tri.srd index caff7f60ddad9e4628729fc7097bff68798bda46..e7ef6ef59a9881ee49781c89aff9ec141a1d5165 100644 --- a/examples/ASPHERE/tri/in.tri.srd +++ b/examples/ASPHERE/tri/in.tri.srd @@ -35,7 +35,7 @@ velocity small create 1.44 87287 loop geom neighbor 0.3 bin neigh_modify delay 0 every 1 check yes -neigh_modify exclude molecule big include big +neigh_modify exclude molecule/intra big include big comm_modify mode multi group big vel yes neigh_modify include big @@ -66,6 +66,8 @@ compute tbig big temp variable pebig equal pe*atoms/count(big) variable ebig equal etotal*atoms/count(big) +compute_modify tbig extra/dof -4500 + compute 1 big erotate/asphere compute 2 all ke compute 3 all pe diff --git a/examples/COUPLE/simple/CMakeLists.txt b/examples/COUPLE/simple/CMakeLists.txt new file mode 100644 index 0000000000000000000000000000000000000000..4112eaa4e769752054e2c20c1e5d367460ea6ccc --- /dev/null +++ b/examples/COUPLE/simple/CMakeLists.txt @@ -0,0 +1,17 @@ +cmake_minimum_required(VERSION 3.10) +project(simple CXX) + +set(LAMMPS_SRC_DIRECTORY "" CACHE PATH "Path for lammps source") +if(NOT LAMMPS_SRC_DIRECTORY STREQUAL "" AND EXISTS ${LAMMPS_SRC_DIRECTORY}/cmake/CMakeLists.txt) + option(BUILD_LIB "Build LAMMPS library" ON) + add_subdirectory(${LAMMPS_SRC_DIRECTORY}/cmake lammps) +else() + find_package(LAMMPS REQUIRED) +endif() + +add_executable(simpleCC simple.cpp) +target_link_libraries(simpleCC LAMMPS::lammps) + +enable_language(C) +add_executable(simpleC simple.c) +target_link_libraries(simpleC LAMMPS::lammps) diff --git a/examples/COUPLE/simple/simple.c b/examples/COUPLE/simple/simple.c index ad603e09a6b637385d2edbed5a1b49ce36d5530d..f4623470b74be7f0baec19407c3950d8d2e2e0f2 100644 --- a/examples/COUPLE/simple/simple.c +++ b/examples/COUPLE/simple/simple.c @@ -23,7 +23,7 @@ #include "stdlib.h" #include "string.h" #include "mpi.h" -#include "library.h" /* this is a LAMMPS include file */ +#include "lammps/library.h" /* this is a LAMMPS include file */ int main(int narg, char **arg) { diff --git a/examples/SPIN/bfo/in.spin.bfo b/examples/SPIN/bfo/in.spin.bfo index b97f7e2d619766f37298e1022943a8d646fa6ea9..47ba535ab6069626651defa38bce7b21ed55b4cc 100644 --- a/examples/SPIN/bfo/in.spin.bfo +++ b/examples/SPIN/bfo/in.spin.bfo @@ -27,7 +27,8 @@ pair_coeff * * spin/dmi dmi 4.5 0.00005 1.0 1.0 1.0 neighbor 0.1 bin neigh_modify every 10 check yes delay 20 -fix 1 all precession/spin anisotropy 0.0000033 0.0 0.0 1.0 +fix 1 all precession/spin zeeman 0.0 0.0 0.0 1.0 anisotropy 0.00033 0.0 0.0 1.0 +fix_modify 1 energy yes fix 2 all langevin/spin 0.0 0.1 21 fix 3 all nve/spin lattice frozen @@ -43,9 +44,8 @@ variable magnorm equal c_out_mag[4] variable emag equal c_out_mag[5] variable tmag equal c_out_mag[6] -#thermo_style custom step time v_magnorm v_emag temp etotal -thermo_style custom step time v_magnorm pe ke v_emag temp etotal -thermo 10 +thermo_style custom step time v_magnorm pe v_emag temp etotal +thermo 50 compute outsp all property/atom spx spy spz sp fmx fmy fmz dump 1 all custom 100 dump_bfo.lammpstrj type x y z c_outsp[1] c_outsp[2] c_outsp[3] diff --git a/examples/SPIN/bfo/log.14Apr20.spin.bfo.g++.1 b/examples/SPIN/bfo/log.14Apr20.spin.bfo.g++.1 new file mode 100644 index 0000000000000000000000000000000000000000..c5ad4e70ac3e7c55bd3aee60e5549ef987a0c2c9 --- /dev/null +++ b/examples/SPIN/bfo/log.14Apr20.spin.bfo.g++.1 @@ -0,0 +1,129 @@ +LAMMPS (19 Mar 2020) +OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (../comm.cpp:94) + using 1 OpenMP thread(s) per MPI task +# layer sc iron atoms (in the [001] plane) in bismuth oxide + +units metal +atom_style spin +dimension 3 +boundary p p f + +# necessary for the serial algorithm (sametag) +atom_modify map array + +lattice sc 3.96 +Lattice spacing in x,y,z = 3.96 3.96 3.96 +region box block 0.0 34.0 0.0 34.0 0.0 5.0 +create_box 1 box +Created orthogonal box = (0 0 0) to (134.64 134.64 19.8) + 1 by 1 by 1 MPI processor grid +create_atoms 1 box +Created 5780 atoms + create_atoms CPU = 0.00263691 secs + +# setting mass, mag. moments, and interactions for bfo + +mass 1 1.0 +set group all spin/random 11 2.50 + 5780 settings made for spin/random + +#pair_style hybrid/overlay spin/exchange 6.0 spin/magelec 4.5 +pair_style hybrid/overlay spin/exchange 6.0 spin/magelec 4.5 spin/dmi 4.5 +pair_coeff * * spin/exchange exchange 6.0 -0.01575 0.0 1.965 +pair_coeff * * spin/magelec magelec 4.5 0.000109 1.0 1.0 1.0 +pair_coeff * * spin/dmi dmi 4.5 0.00005 1.0 1.0 1.0 + +neighbor 0.1 bin +neigh_modify every 10 check yes delay 20 + +fix 1 all precession/spin zeeman 0.0 0.0 0.0 1.0 anisotropy 0.00033 0.0 0.0 1.0 +fix_modify 1 energy yes +fix 2 all langevin/spin 0.0 0.1 21 +fix 3 all nve/spin lattice frozen + +timestep 0.0002 + +compute out_mag all spin +compute out_pe all pe +compute out_ke all ke +compute out_temp all temp + +variable magz equal c_out_mag[3] +variable magnorm equal c_out_mag[4] +variable emag equal c_out_mag[5] +variable tmag equal c_out_mag[6] + +thermo_style custom step time v_magnorm pe v_emag temp etotal +thermo 50 + +compute outsp all property/atom spx spy spz sp fmx fmy fmz +dump 1 all custom 100 dump_bfo.lammpstrj type x y z c_outsp[1] c_outsp[2] c_outsp[3] + +run 500 +Neighbor list info ... + update every 10 steps, delay 20 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 6.1 + ghost atom cutoff = 6.1 + binsize = 3.05, bins = 45 45 7 + 3 neighbor lists, perpetual/occasional/extra = 3 0 0 + (1) pair spin/exchange, perpetual + attributes: full, newton on + pair build: full/bin/atomonly + stencil: full/bin/3d + bin: standard + (2) pair spin/magelec, perpetual, copy from (1) + attributes: full, newton on + pair build: copy + stencil: none + bin: none + (3) pair spin/dmi, perpetual, copy from (1) + attributes: full, newton on + pair build: copy + stencil: none + bin: none +Per MPI rank memory allocation (min/avg/max) = 8.154 | 8.154 | 8.154 Mbytes +Step Time v_magnorm PotEng v_emag Temp TotEng + 0 0 0.010071723 -0.69133656 -0.69133656 0 -0.69133656 + 50 0.01 0.0098309931 -1.3200811 -1.3200811 0 -1.3200811 + 100 0.02 0.0095903925 -1.9446727 -1.9446727 0 -1.9446727 + 150 0.03 0.0093489139 -2.5653446 -2.5653446 0 -2.5653446 + 200 0.04 0.0091051407 -3.1824298 -3.1824298 0 -3.1824298 + 250 0.05 0.0088575394 -3.7962506 -3.7962506 0 -3.7962506 + 300 0.06 0.0086053184 -4.4070501 -4.4070501 0 -4.4070501 + 350 0.07 0.0083490959 -5.0149813 -5.0149813 0 -5.0149813 + 400 0.08 0.0080907742 -5.6201417 -5.6201417 0 -5.6201417 + 450 0.09 0.0078327124 -6.222622 -6.222622 0 -6.222622 + 500 0.1 0.0075768488 -6.8225497 -6.8225497 0 -6.8225497 +Loop time of 12.9141 on 1 procs for 500 steps with 5780 atoms + +Performance: 0.669 ns/day, 35.873 hours/ns, 38.717 timesteps/s +100.0% CPU use with 1 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 3.1844 | 3.1844 | 3.1844 | 0.0 | 24.66 +Neigh | 0 | 0 | 0 | 0.0 | 0.00 +Comm | 0.012542 | 0.012542 | 0.012542 | 0.0 | 0.10 +Output | 0.048014 | 0.048014 | 0.048014 | 0.0 | 0.37 +Modify | 9.6569 | 9.6569 | 9.6569 | 0.0 | 74.78 +Other | | 0.01233 | | | 0.10 + +Nlocal: 5780 ave 5780 max 5780 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 1065 ave 1065 max 1065 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Neighs: 0 ave 0 max 0 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +FullNghs: 92480 ave 92480 max 92480 min +Histogram: 1 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 92480 +Ave neighs/atom = 16 +Neighbor list builds = 0 +Dangerous builds = 0 + +Please see the log.cite file for references relevant to this simulation + +Total wall time: 0:00:12 diff --git a/examples/SPIN/bfo/log.14Apr20.spin.bfo.g++.4 b/examples/SPIN/bfo/log.14Apr20.spin.bfo.g++.4 new file mode 100644 index 0000000000000000000000000000000000000000..655bbaef8e5c71f6974048a12e2752fca87714a2 --- /dev/null +++ b/examples/SPIN/bfo/log.14Apr20.spin.bfo.g++.4 @@ -0,0 +1,129 @@ +LAMMPS (19 Mar 2020) +OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (../comm.cpp:94) + using 1 OpenMP thread(s) per MPI task +# layer sc iron atoms (in the [001] plane) in bismuth oxide + +units metal +atom_style spin +dimension 3 +boundary p p f + +# necessary for the serial algorithm (sametag) +atom_modify map array + +lattice sc 3.96 +Lattice spacing in x,y,z = 3.96 3.96 3.96 +region box block 0.0 34.0 0.0 34.0 0.0 5.0 +create_box 1 box +Created orthogonal box = (0 0 0) to (134.64 134.64 19.8) + 2 by 2 by 1 MPI processor grid +create_atoms 1 box +Created 5780 atoms + create_atoms CPU = 0.000847816 secs + +# setting mass, mag. moments, and interactions for bfo + +mass 1 1.0 +set group all spin/random 11 2.50 + 5780 settings made for spin/random + +#pair_style hybrid/overlay spin/exchange 6.0 spin/magelec 4.5 +pair_style hybrid/overlay spin/exchange 6.0 spin/magelec 4.5 spin/dmi 4.5 +pair_coeff * * spin/exchange exchange 6.0 -0.01575 0.0 1.965 +pair_coeff * * spin/magelec magelec 4.5 0.000109 1.0 1.0 1.0 +pair_coeff * * spin/dmi dmi 4.5 0.00005 1.0 1.0 1.0 + +neighbor 0.1 bin +neigh_modify every 10 check yes delay 20 + +fix 1 all precession/spin zeeman 0.0 0.0 0.0 1.0 anisotropy 0.00033 0.0 0.0 1.0 +fix_modify 1 energy yes +fix 2 all langevin/spin 0.0 0.1 21 +fix 3 all nve/spin lattice frozen + +timestep 0.0002 + +compute out_mag all spin +compute out_pe all pe +compute out_ke all ke +compute out_temp all temp + +variable magz equal c_out_mag[3] +variable magnorm equal c_out_mag[4] +variable emag equal c_out_mag[5] +variable tmag equal c_out_mag[6] + +thermo_style custom step time v_magnorm pe v_emag temp etotal +thermo 50 + +compute outsp all property/atom spx spy spz sp fmx fmy fmz +dump 1 all custom 100 dump_bfo.lammpstrj type x y z c_outsp[1] c_outsp[2] c_outsp[3] + +run 500 +Neighbor list info ... + update every 10 steps, delay 20 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 6.1 + ghost atom cutoff = 6.1 + binsize = 3.05, bins = 45 45 7 + 3 neighbor lists, perpetual/occasional/extra = 3 0 0 + (1) pair spin/exchange, perpetual + attributes: full, newton on + pair build: full/bin/atomonly + stencil: full/bin/3d + bin: standard + (2) pair spin/magelec, perpetual, copy from (1) + attributes: full, newton on + pair build: copy + stencil: none + bin: none + (3) pair spin/dmi, perpetual, copy from (1) + attributes: full, newton on + pair build: copy + stencil: none + bin: none +Per MPI rank memory allocation (min/avg/max) = 7.744 | 7.744 | 7.744 Mbytes +Step Time v_magnorm PotEng v_emag Temp TotEng + 0 0 0.010071723 -0.69133656 -0.69133656 0 -0.69133656 + 50 0.01 0.009830993 -1.3200811 -1.3200811 0 -1.3200811 + 100 0.02 0.0095903924 -1.9446727 -1.9446727 0 -1.9446727 + 150 0.03 0.0093489138 -2.5653446 -2.5653446 0 -2.5653446 + 200 0.04 0.0091051405 -3.1824298 -3.1824298 0 -3.1824298 + 250 0.05 0.0088575392 -3.7962506 -3.7962506 0 -3.7962506 + 300 0.06 0.0086053183 -4.4070501 -4.4070501 0 -4.4070501 + 350 0.07 0.0083490958 -5.0149813 -5.0149813 0 -5.0149813 + 400 0.08 0.008090774 -5.6201417 -5.6201417 0 -5.6201417 + 450 0.09 0.0078327123 -6.222622 -6.222622 0 -6.222622 + 500 0.1 0.0075768487 -6.8225497 -6.8225497 0 -6.8225497 +Loop time of 3.92182 on 4 procs for 500 steps with 5780 atoms + +Performance: 2.203 ns/day, 10.894 hours/ns, 127.492 timesteps/s +99.9% CPU use with 4 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.80837 | 0.82745 | 0.8485 | 1.6 | 21.10 +Neigh | 0 | 0 | 0 | 0.0 | 0.00 +Comm | 0.045699 | 0.067487 | 0.090503 | 6.1 | 1.72 +Output | 0.01387 | 0.0139 | 0.01394 | 0.0 | 0.35 +Modify | 3.0065 | 3.0105 | 3.0138 | 0.2 | 76.76 +Other | | 0.002516 | | | 0.06 + +Nlocal: 1445 ave 1445 max 1445 min +Histogram: 4 0 0 0 0 0 0 0 0 0 +Nghost: 555 ave 555 max 555 min +Histogram: 4 0 0 0 0 0 0 0 0 0 +Neighs: 0 ave 0 max 0 min +Histogram: 4 0 0 0 0 0 0 0 0 0 +FullNghs: 23120 ave 23120 max 23120 min +Histogram: 4 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 92480 +Ave neighs/atom = 16 +Neighbor list builds = 0 +Dangerous builds = 0 + +Please see the log.cite file for references relevant to this simulation + +Total wall time: 0:00:03 diff --git a/examples/SPIN/bfo/log.19Nov19.spin.bfo.g++.1 b/examples/SPIN/bfo/log.19Nov19.spin.bfo.g++.1 deleted file mode 100644 index b14210e9d0cddbeb1cb15e8aee3d5520b334cf36..0000000000000000000000000000000000000000 --- a/examples/SPIN/bfo/log.19Nov19.spin.bfo.g++.1 +++ /dev/null @@ -1,167 +0,0 @@ -LAMMPS (30 Oct 2019) -# layer sc iron atoms (in the [001] plane) in bismuth oxide - -units metal -atom_style spin -dimension 3 -boundary p p f - -# necessary for the serial algorithm (sametag) -atom_modify map array - -lattice sc 3.96 -Lattice spacing in x,y,z = 3.96 3.96 3.96 -region box block 0.0 34.0 0.0 34.0 0.0 5.0 -create_box 1 box -Created orthogonal box = (0 0 0) to (134.64 134.64 19.8) - 1 by 1 by 1 MPI processor grid -create_atoms 1 box -Created 5780 atoms - create_atoms CPU = 0.00226784 secs - -# setting mass, mag. moments, and interactions for bfo - -mass 1 1.0 -set group all spin/random 11 2.50 - 5780 settings made for spin/random - -#pair_style hybrid/overlay spin/exchange 6.0 spin/magelec 4.5 -pair_style hybrid/overlay spin/exchange 6.0 spin/magelec 4.5 spin/dmi 4.5 -pair_coeff * * spin/exchange exchange 6.0 -0.01575 0.0 1.965 -pair_coeff * * spin/magelec magelec 4.5 0.000109 1.0 1.0 1.0 -pair_coeff * * spin/dmi dmi 4.5 0.00005 1.0 1.0 1.0 - -neighbor 0.1 bin -neigh_modify every 10 check yes delay 20 - -fix 1 all precession/spin anisotropy 0.0000033 0.0 0.0 1.0 -fix 2 all langevin/spin 0.0 0.1 21 -fix 3 all nve/spin lattice frozen - -timestep 0.0002 - -compute out_mag all spin -compute out_pe all pe -compute out_ke all ke -compute out_temp all temp - -variable magz equal c_out_mag[3] -variable magnorm equal c_out_mag[4] -variable emag equal c_out_mag[5] -variable tmag equal c_out_mag[6] - -#thermo_style custom step time v_magnorm v_emag temp etotal -thermo_style custom step time v_magnorm pe ke v_emag temp etotal -thermo 10 - -compute outsp all property/atom spx spy spz sp fmx fmy fmz -dump 1 all custom 100 dump_bfo.lammpstrj type x y z c_outsp[1] c_outsp[2] c_outsp[3] - -run 500 -Neighbor list info ... - update every 10 steps, delay 20 steps, check yes - max neighbors/atom: 2000, page size: 100000 - master list distance cutoff = 6.1 - ghost atom cutoff = 6.1 - binsize = 3.05, bins = 45 45 7 - 3 neighbor lists, perpetual/occasional/extra = 3 0 0 - (1) pair spin/exchange, perpetual - attributes: full, newton on - pair build: full/bin/atomonly - stencil: full/bin/3d - bin: standard - (2) pair spin/magelec, perpetual, copy from (1) - attributes: full, newton on - pair build: copy - stencil: none - bin: none - (3) pair spin/dmi, perpetual, copy from (1) - attributes: full, newton on - pair build: copy - stencil: none - bin: none -Per MPI rank memory allocation (min/avg/max) = 8.154 | 8.154 | 8.154 Mbytes -Step Time v_magnorm PotEng KinEng v_emag Temp TotEng - 0 0 0.010071723 -0.059343109 0 -0.13132609 0 -0.059343109 - 10 0.002 0.01003044 -0.18537022 0 -0.38338861 0 -0.18537022 - 20 0.004 0.0099890716 -0.31121926 0 -0.63509581 0 -0.31121926 - 30 0.006 0.0099475919 -0.43689013 0 -0.88644739 0 -0.43689013 - 40 0.008 0.0099059782 -0.5623833 0 -1.1374442 0 -0.5623833 - 50 0.01 0.0098642085 -0.68769978 0 -1.388088 0 -0.68769978 - 60 0.012 0.0098222618 -0.81284106 0 -1.6383818 0 -0.81284106 - 70 0.014 0.0097801186 -0.93780907 0 -1.8883294 0 -0.93780907 - 80 0.016 0.0097377603 -1.0626062 0 -2.1379352 0 -1.0626062 - 90 0.018 0.0096951693 -1.187235 0 -2.3872045 0 -1.187235 - 100 0.02 0.0096523288 -1.3116986 0 -2.6361432 0 -1.3116986 - 110 0.022 0.0096092227 -1.4360002 0 -2.8847577 0 -1.4360002 - 120 0.024 0.009565836 -1.5601431 0 -3.1330547 0 -1.5601431 - 130 0.026 0.0095221542 -1.6841309 0 -3.3810411 0 -1.6841309 - 140 0.028 0.0094781635 -1.8079673 0 -3.6287241 0 -1.8079673 - 150 0.03 0.0094338509 -1.9316557 0 -3.8761109 0 -1.9316557 - 160 0.032 0.0093892044 -2.0551997 0 -4.1232085 0 -2.0551997 - 170 0.034 0.0093442126 -2.178603 0 -4.370024 0 -2.178603 - 180 0.036 0.0092988654 -2.3018687 0 -4.6165639 0 -2.3018687 - 190 0.038 0.0092531537 -2.4250002 0 -4.8628348 0 -2.4250002 - 200 0.04 0.0092070698 -2.5480003 0 -5.1088426 0 -2.5480003 - 210 0.042 0.0091606073 -2.670872 0 -5.3545929 0 -2.670872 - 220 0.044 0.0091137617 -2.7936178 0 -5.6000909 0 -2.7936178 - 230 0.046 0.0090665298 -2.9162399 0 -5.8453412 0 -2.9162399 - 240 0.048 0.0090189108 -3.0387405 0 -6.0903478 0 -3.0387405 - 250 0.05 0.0089709056 -3.1611214 0 -6.3351146 0 -3.1611214 - 260 0.052 0.0089225173 -3.2833841 0 -6.5796445 0 -3.2833841 - 270 0.054 0.0088737511 -3.4055299 0 -6.8239403 0 -3.4055299 - 280 0.056 0.0088246147 -3.52756 0 -7.0680043 0 -3.52756 - 290 0.058 0.0087751176 -3.6494754 0 -7.3118383 0 -3.6494754 - 300 0.06 0.008725272 -3.7712768 0 -7.5554438 0 -3.7712768 - 310 0.062 0.0086750916 -3.8929648 0 -7.7988222 0 -3.8929648 - 320 0.064 0.0086245927 -4.0145399 0 -8.0419744 0 -4.0145399 - 330 0.066 0.0085737928 -4.1360026 0 -8.2849013 0 -4.1360026 - 340 0.068 0.0085227116 -4.2573532 0 -8.5276035 0 -4.2573532 - 350 0.07 0.0084713698 -4.378592 0 -8.7700818 0 -4.378592 - 360 0.072 0.0084197895 -4.4997194 0 -9.0123367 0 -4.4997194 - 370 0.074 0.0083679936 -4.6207358 0 -9.2543688 0 -4.6207358 - 380 0.076 0.0083160058 -4.7416414 0 -9.496179 0 -4.7416414 - 390 0.078 0.0082638503 -4.8624367 0 -9.7377681 0 -4.8624367 - 400 0.08 0.0082115512 -4.9831222 0 -9.9791371 0 -4.9831222 - 410 0.082 0.0081591329 -5.1036986 0 -10.220287 0 -5.1036986 - 420 0.084 0.0081066195 -5.2241665 0 -10.46122 0 -5.2241665 - 430 0.086 0.0080540347 -5.3445267 0 -10.701936 0 -5.3445267 - 440 0.088 0.008001402 -5.4647802 0 -10.942439 0 -5.4647802 - 450 0.09 0.0079487439 -5.5849281 0 -11.18273 0 -5.5849281 - 460 0.092 0.0078960829 -5.7049716 0 -11.422811 0 -5.7049716 - 470 0.094 0.0078434404 -5.824912 0 -11.662686 0 -5.824912 - 480 0.096 0.0077908378 -5.9447508 0 -11.902357 0 -5.9447508 - 490 0.098 0.0077382955 -6.0644896 0 -12.141828 0 -6.0644896 - 500 0.1 0.0076858338 -6.1841301 0 -12.381101 0 -6.1841301 -Loop time of 13.543 on 1 procs for 500 steps with 5780 atoms - -Performance: 0.638 ns/day, 37.619 hours/ns, 36.919 timesteps/s -100.0% CPU use with 1 MPI tasks x no OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 3.8138 | 3.8138 | 3.8138 | 0.0 | 28.16 -Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 0.011875 | 0.011875 | 0.011875 | 0.0 | 0.09 -Output | 0.049726 | 0.049726 | 0.049726 | 0.0 | 0.37 -Modify | 9.655 | 9.655 | 9.655 | 0.0 | 71.29 -Other | | 0.01262 | | | 0.09 - -Nlocal: 5780 ave 5780 max 5780 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Nghost: 1065 ave 1065 max 1065 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Neighs: 0 ave 0 max 0 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -FullNghs: 92480 ave 92480 max 92480 min -Histogram: 1 0 0 0 0 0 0 0 0 0 - -Total # of neighbors = 92480 -Ave neighs/atom = 16 -Neighbor list builds = 0 -Dangerous builds = 0 - -Please see the log.cite file for references relevant to this simulation - -Total wall time: 0:00:13 diff --git a/examples/SPIN/bfo/log.19Nov19.spin.bfo.g++.4 b/examples/SPIN/bfo/log.19Nov19.spin.bfo.g++.4 deleted file mode 100644 index 8c701c93c13cd9c294d141c5c1ff752ec17dea5f..0000000000000000000000000000000000000000 --- a/examples/SPIN/bfo/log.19Nov19.spin.bfo.g++.4 +++ /dev/null @@ -1,167 +0,0 @@ -LAMMPS (30 Oct 2019) -# layer sc iron atoms (in the [001] plane) in bismuth oxide - -units metal -atom_style spin -dimension 3 -boundary p p f - -# necessary for the serial algorithm (sametag) -atom_modify map array - -lattice sc 3.96 -Lattice spacing in x,y,z = 3.96 3.96 3.96 -region box block 0.0 34.0 0.0 34.0 0.0 5.0 -create_box 1 box -Created orthogonal box = (0 0 0) to (134.64 134.64 19.8) - 2 by 2 by 1 MPI processor grid -create_atoms 1 box -Created 5780 atoms - create_atoms CPU = 0.00149798 secs - -# setting mass, mag. moments, and interactions for bfo - -mass 1 1.0 -set group all spin/random 11 2.50 - 5780 settings made for spin/random - -#pair_style hybrid/overlay spin/exchange 6.0 spin/magelec 4.5 -pair_style hybrid/overlay spin/exchange 6.0 spin/magelec 4.5 spin/dmi 4.5 -pair_coeff * * spin/exchange exchange 6.0 -0.01575 0.0 1.965 -pair_coeff * * spin/magelec magelec 4.5 0.000109 1.0 1.0 1.0 -pair_coeff * * spin/dmi dmi 4.5 0.00005 1.0 1.0 1.0 - -neighbor 0.1 bin -neigh_modify every 10 check yes delay 20 - -fix 1 all precession/spin anisotropy 0.0000033 0.0 0.0 1.0 -fix 2 all langevin/spin 0.0 0.1 21 -fix 3 all nve/spin lattice frozen - -timestep 0.0002 - -compute out_mag all spin -compute out_pe all pe -compute out_ke all ke -compute out_temp all temp - -variable magz equal c_out_mag[3] -variable magnorm equal c_out_mag[4] -variable emag equal c_out_mag[5] -variable tmag equal c_out_mag[6] - -#thermo_style custom step time v_magnorm v_emag temp etotal -thermo_style custom step time v_magnorm pe ke v_emag temp etotal -thermo 10 - -compute outsp all property/atom spx spy spz sp fmx fmy fmz -dump 1 all custom 100 dump_bfo.lammpstrj type x y z c_outsp[1] c_outsp[2] c_outsp[3] - -run 500 -Neighbor list info ... - update every 10 steps, delay 20 steps, check yes - max neighbors/atom: 2000, page size: 100000 - master list distance cutoff = 6.1 - ghost atom cutoff = 6.1 - binsize = 3.05, bins = 45 45 7 - 3 neighbor lists, perpetual/occasional/extra = 3 0 0 - (1) pair spin/exchange, perpetual - attributes: full, newton on - pair build: full/bin/atomonly - stencil: full/bin/3d - bin: standard - (2) pair spin/magelec, perpetual, copy from (1) - attributes: full, newton on - pair build: copy - stencil: none - bin: none - (3) pair spin/dmi, perpetual, copy from (1) - attributes: full, newton on - pair build: copy - stencil: none - bin: none -Per MPI rank memory allocation (min/avg/max) = 7.744 | 7.744 | 7.744 Mbytes -Step Time v_magnorm PotEng KinEng v_emag Temp TotEng - 0 0 0.010071723 -0.11868622 0 -0.12966919 0 -0.11868622 - 10 0.002 0.010030399 -0.37068593 0 -0.38171598 0 -0.37068593 - 20 0.004 0.0099889925 -0.6223216 0 -0.6334048 0 -0.6223216 - 30 0.006 0.0099474775 -0.87359359 0 -0.8847354 0 -0.87359359 - 40 0.008 0.0099058307 -1.1245034 0 -1.1357086 0 -1.1245034 - 50 0.01 0.0098640297 -1.3750538 0 -1.3863265 0 -1.3750538 - 60 0.012 0.0098220535 -1.6252482 0 -1.6365919 0 -1.6252482 - 70 0.014 0.0097798823 -1.8750914 0 -1.8865086 0 -1.8750914 - 80 0.016 0.0097374973 -2.1245886 0 -2.1360814 0 -2.1245886 - 90 0.018 0.0096948808 -2.3737458 0 -2.3853155 0 -2.3737458 - 100 0.02 0.0096520159 -2.6225698 0 -2.6342168 0 -2.6225698 - 110 0.022 0.0096088866 -2.8710677 0 -2.8827919 0 -2.8710677 - 120 0.024 0.0095654776 -3.1192469 0 -3.1310475 0 -3.1192469 - 130 0.026 0.0095217746 -3.367115 0 -3.3789906 0 -3.367115 - 140 0.028 0.0094777638 -3.61468 0 -3.6266285 0 -3.61468 - 150 0.03 0.0094334323 -3.8619496 0 -3.8739683 0 -3.8619496 - 160 0.032 0.0093887679 -4.1089316 0 -4.1210173 0 -4.1089316 - 170 0.034 0.0093437596 -4.3556335 0 -4.3677824 0 -4.3556335 - 180 0.036 0.0092983972 -4.6020625 0 -4.6142704 0 -4.6020625 - 190 0.038 0.0092526717 -4.8482255 0 -4.8604877 0 -4.8482255 - 200 0.04 0.0092065755 -5.0941291 0 -5.1064403 0 -5.0941291 - 210 0.042 0.0091601024 -5.3397792 0 -5.3521339 0 -5.3397792 - 220 0.044 0.0091132478 -5.5851813 0 -5.5975736 0 -5.5851813 - 230 0.046 0.0090660089 -5.8303404 0 -5.842764 0 -5.8303404 - 240 0.048 0.0090183847 -6.0752609 0 -6.0877092 0 -6.0752609 - 250 0.05 0.0089703764 -6.3199467 0 -6.3324129 0 -6.3199467 - 260 0.052 0.0089219873 -6.5644011 0 -6.5768782 0 -6.5644011 - 270 0.054 0.0088732228 -6.808627 0 -6.8211078 0 -6.808627 - 280 0.056 0.0088240906 -7.0526266 0 -7.0651038 0 -7.0526266 - 290 0.058 0.0087746006 -7.296402 0 -7.3088682 0 -7.296402 - 300 0.06 0.0087247648 -7.5399545 0 -7.5524024 0 -7.5399545 - 310 0.062 0.0086745976 -7.7832854 0 -7.7957077 0 -7.7832854 - 320 0.064 0.0086241149 -8.0263956 0 -8.038785 0 -8.0263956 - 330 0.066 0.008573335 -8.2692858 0 -8.281635 0 -8.2692858 - 340 0.068 0.0085222772 -8.5119564 0 -8.5242586 0 -8.5119564 - 350 0.07 0.0084709627 -8.7544078 0 -8.7666562 0 -8.7544078 - 360 0.072 0.0084194136 -8.9966403 0 -9.0088285 0 -8.9966403 - 370 0.074 0.008367653 -9.2386543 0 -9.2507761 0 -9.2386543 - 380 0.076 0.0083157046 -9.4804501 0 -9.4924997 0 -9.4804501 - 390 0.078 0.0082635925 -9.7220281 0 -9.7340001 0 -9.7220281 - 400 0.08 0.0082113412 -9.9633888 0 -9.9752784 0 -9.9633888 - 410 0.082 0.0081589747 -10.204533 0 -10.216336 0 -10.204533 - 420 0.084 0.0081065173 -10.445462 0 -10.457173 0 -10.445462 - 430 0.086 0.0080539925 -10.686176 0 -10.697793 0 -10.686176 - 440 0.088 0.0080014235 -10.926676 0 -10.938197 0 -10.926676 - 450 0.09 0.0079488329 -11.166966 0 -11.178387 0 -11.166966 - 460 0.092 0.0078962427 -11.407045 0 -11.418366 0 -11.407045 - 470 0.094 0.0078436743 -11.646917 0 -11.658136 0 -11.646917 - 480 0.096 0.0077911486 -11.886583 0 -11.8977 0 -11.886583 - 490 0.098 0.007738686 -12.126047 0 -12.137063 0 -12.126047 - 500 0.1 0.0076863062 -12.365311 0 -12.376226 0 -12.365311 -Loop time of 3.94852 on 4 procs for 500 steps with 5780 atoms - -Performance: 2.188 ns/day, 10.968 hours/ns, 126.630 timesteps/s -99.9% CPU use with 4 MPI tasks x no OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0.97416 | 0.98668 | 1.0022 | 1.0 | 24.99 -Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 0.032618 | 0.04948 | 0.062614 | 5.0 | 1.25 -Output | 0.014166 | 0.014229 | 0.014374 | 0.1 | 0.36 -Modify | 2.8947 | 2.8957 | 2.8965 | 0.0 | 73.34 -Other | | 0.002385 | | | 0.06 - -Nlocal: 1445 ave 1445 max 1445 min -Histogram: 4 0 0 0 0 0 0 0 0 0 -Nghost: 555 ave 555 max 555 min -Histogram: 4 0 0 0 0 0 0 0 0 0 -Neighs: 0 ave 0 max 0 min -Histogram: 4 0 0 0 0 0 0 0 0 0 -FullNghs: 23120 ave 23120 max 23120 min -Histogram: 4 0 0 0 0 0 0 0 0 0 - -Total # of neighbors = 92480 -Ave neighs/atom = 16 -Neighbor list builds = 0 -Dangerous builds = 0 - -Please see the log.cite file for references relevant to this simulation - -Total wall time: 0:00:03 diff --git a/examples/SPIN/cobalt_fcc/in.spin.cobalt_fcc b/examples/SPIN/cobalt_fcc/in.spin.cobalt_fcc index dd9ed890ee8b3be6ff1ba9d1ffab132fee743337..f81a962e3f6c33e5734e23b63baff451f735870b 100644 --- a/examples/SPIN/cobalt_fcc/in.spin.cobalt_fcc +++ b/examples/SPIN/cobalt_fcc/in.spin.cobalt_fcc @@ -45,8 +45,6 @@ compute out_pe all pe compute out_ke all ke compute out_temp all temp -thermo_style custom f_1 - variable magx equal c_out_mag[1] variable magy equal c_out_mag[2] variable magz equal c_out_mag[3] @@ -54,7 +52,7 @@ variable magnorm equal c_out_mag[4] variable emag equal c_out_mag[5] variable tmag equal c_out_mag[6] -thermo_style custom step time f_1 v_magx v_magy v_magnorm v_emag temp etotal +thermo_style custom step time v_magx v_magy v_magnorm pe v_emag temp etotal thermo 50 # compute outsp all property/atom spx spy spz sp fmx fmy fmz diff --git a/examples/SPIN/cobalt_fcc/log.14Apr20.spin.cobalt_fcc.g++.1 b/examples/SPIN/cobalt_fcc/log.14Apr20.spin.cobalt_fcc.g++.1 new file mode 100644 index 0000000000000000000000000000000000000000..f233c5e9ea6794d0846704b2294426be3fcc6a4e --- /dev/null +++ b/examples/SPIN/cobalt_fcc/log.14Apr20.spin.cobalt_fcc.g++.1 @@ -0,0 +1,144 @@ +LAMMPS (19 Mar 2020) +OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (../comm.cpp:94) + using 1 OpenMP thread(s) per MPI task +# fcc cobalt in a 3d periodic box + +clear +OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (../comm.cpp:94) + using 1 OpenMP thread(s) per MPI task +units metal +atom_style spin + +dimension 3 +boundary p p p + +# necessary for the serial algorithm (sametag) +atom_modify map array + +lattice fcc 3.54 +Lattice spacing in x,y,z = 3.54 3.54 3.54 +region box block 0.0 5.0 0.0 5.0 0.0 5.0 +create_box 1 box +Created orthogonal box = (0 0 0) to (17.7 17.7 17.7) + 1 by 1 by 1 MPI processor grid +create_atoms 1 box +Created 500 atoms + create_atoms CPU = 0.00057292 secs + +# setting mass, mag. moments, and interactions for fcc cobalt + +mass 1 58.93 + +#set group all spin/random 31 1.72 +set group all spin 1.72 0.0 0.0 1.0 + 500 settings made for spin +velocity all create 100 4928459 rot yes dist gaussian + +pair_style hybrid/overlay eam/alloy spin/exchange 4.0 +pair_coeff * * eam/alloy Co_PurjaPun_2012.eam.alloy Co +pair_coeff * * spin/exchange exchange 4.0 0.0446928 0.003496 1.4885 + +neighbor 0.1 bin +neigh_modify every 10 check yes delay 20 + +fix 1 all precession/spin zeeman 1.0 0.0 0.0 1.0 +fix_modify 1 energy yes + +fix 2 all langevin/spin 0.0 0.0 21 + +fix 3 all nve/spin lattice moving +timestep 0.0001 + +# compute and output options + +compute out_mag all spin +compute out_pe all pe +compute out_ke all ke +compute out_temp all temp + +variable magx equal c_out_mag[1] +variable magy equal c_out_mag[2] +variable magz equal c_out_mag[3] +variable magnorm equal c_out_mag[4] +variable emag equal c_out_mag[5] +variable tmag equal c_out_mag[6] + +thermo_style custom step time v_magx v_magy v_magnorm pe v_emag temp etotal +thermo 50 + +# compute outsp all property/atom spx spy spz sp fmx fmy fmz +# dump 1 all custom 100 dump_cobalt_fcc.lammpstrj type x y z c_outsp[1] c_outsp[2] c_outsp[3] + +run 1000 +Neighbor list info ... + update every 10 steps, delay 20 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 6.59954 + ghost atom cutoff = 6.59954 + binsize = 3.29977, bins = 6 6 6 + 2 neighbor lists, perpetual/occasional/extra = 2 0 0 + (1) pair eam/alloy, perpetual, half/full from (2) + attributes: half, newton on + pair build: halffull/newton + stencil: none + bin: none + (2) pair spin/exchange, perpetual + attributes: full, newton on + pair build: full/bin/atomonly + stencil: full/bin/3d + bin: standard +Per MPI rank memory allocation (min/avg/max) = 5.718 | 5.718 | 5.718 Mbytes +Step Time v_magx v_magy v_magnorm PotEng v_emag Temp TotEng + 0 0 0 0 1 -2285.0679 -94.095041 100.00543 -2278.6175 + 50 0.005 0 0 1 -2284.7512 -94.095025 95.095146 -2278.6175 + 100 0.01 0 0 1 -2283.8798 -94.094815 81.584879 -2278.6175 + 150 0.015 0 0 1 -2282.6701 -94.09401 62.831647 -2278.6175 + 200 0.02 0 0 1 -2281.4185 -94.092175 43.426664 -2278.6174 + 250 0.025 0 0 1 -2280.4165 -94.089084 27.892653 -2278.6174 + 300 0.03 0 0 1 -2279.8662 -94.084906 19.36049 -2278.6174 + 350 0.035 0 0 1 -2279.8238 -94.080244 18.702888 -2278.6174 + 400 0.04 0 0 1 -2280.1962 -94.076013 24.47725 -2278.6174 + 450 0.045 0 0 1 -2280.7898 -94.073181 33.678697 -2278.6175 + 500 0.05 0 0 1 -2281.3871 -94.072475 42.940446 -2278.6175 + 550 0.055 0 0 1 -2281.8215 -94.074138 49.675032 -2278.6175 + 600 0.06 0 0 1 -2282.0209 -94.077829 52.765336 -2278.6175 + 650 0.065 0 0 1 -2282.0136 -94.082703 52.652501 -2278.6175 + 700 0.07 0 0 1 -2281.8997 -94.087644 50.88749 -2278.6174 + 750 0.075 0 0 1 -2281.8013 -94.091583 49.361723 -2278.6174 + 800 0.08 0 0 1 -2281.8108 -94.093792 49.508108 -2278.6174 + 850 0.085 0 0 1 -2281.9558 -94.094064 51.756992 -2278.6174 + 900 0.09 0 0 1 -2282.1927 -94.092723 55.428834 -2278.6175 + 950 0.095 0 0 1 -2282.4277 -94.090469 59.072774 -2278.6175 + 1000 0.1 0 0 1 -2282.5578 -94.088121 61.090565 -2278.6175 +Loop time of 4.4001 on 1 procs for 1000 steps with 500 atoms + +Performance: 1.964 ns/day, 12.222 hours/ns, 227.268 timesteps/s +100.0% CPU use with 1 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 2.0815 | 2.0815 | 2.0815 | 0.0 | 47.31 +Neigh | 0.011835 | 0.011835 | 0.011835 | 0.0 | 0.27 +Comm | 0.033331 | 0.033331 | 0.033331 | 0.0 | 0.76 +Output | 0.00045395 | 0.00045395 | 0.00045395 | 0.0 | 0.01 +Modify | 2.2677 | 2.2677 | 2.2677 | 0.0 | 51.54 +Other | | 0.005309 | | | 0.12 + +Nlocal: 500 ave 500 max 500 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 1956 ave 1956 max 1956 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Neighs: 24088 ave 24088 max 24088 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +FullNghs: 48176 ave 48176 max 48176 min +Histogram: 1 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 48176 +Ave neighs/atom = 96.352 +Neighbor list builds = 6 +Dangerous builds = 0 + +Please see the log.cite file for references relevant to this simulation + +Total wall time: 0:00:04 diff --git a/examples/SPIN/cobalt_fcc/log.14Apr20.spin.cobalt_fcc.g++.4 b/examples/SPIN/cobalt_fcc/log.14Apr20.spin.cobalt_fcc.g++.4 new file mode 100644 index 0000000000000000000000000000000000000000..3cbcd942686ef00d9c80b46ede39d141d033b652 --- /dev/null +++ b/examples/SPIN/cobalt_fcc/log.14Apr20.spin.cobalt_fcc.g++.4 @@ -0,0 +1,144 @@ +LAMMPS (19 Mar 2020) +OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (../comm.cpp:94) + using 1 OpenMP thread(s) per MPI task +# fcc cobalt in a 3d periodic box + +clear +OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (../comm.cpp:94) + using 1 OpenMP thread(s) per MPI task +units metal +atom_style spin + +dimension 3 +boundary p p p + +# necessary for the serial algorithm (sametag) +atom_modify map array + +lattice fcc 3.54 +Lattice spacing in x,y,z = 3.54 3.54 3.54 +region box block 0.0 5.0 0.0 5.0 0.0 5.0 +create_box 1 box +Created orthogonal box = (0 0 0) to (17.7 17.7 17.7) + 1 by 2 by 2 MPI processor grid +create_atoms 1 box +Created 500 atoms + create_atoms CPU = 0.000688791 secs + +# setting mass, mag. moments, and interactions for fcc cobalt + +mass 1 58.93 + +#set group all spin/random 31 1.72 +set group all spin 1.72 0.0 0.0 1.0 + 500 settings made for spin +velocity all create 100 4928459 rot yes dist gaussian + +pair_style hybrid/overlay eam/alloy spin/exchange 4.0 +pair_coeff * * eam/alloy Co_PurjaPun_2012.eam.alloy Co +pair_coeff * * spin/exchange exchange 4.0 0.0446928 0.003496 1.4885 + +neighbor 0.1 bin +neigh_modify every 10 check yes delay 20 + +fix 1 all precession/spin zeeman 1.0 0.0 0.0 1.0 +fix_modify 1 energy yes + +fix 2 all langevin/spin 0.0 0.0 21 + +fix 3 all nve/spin lattice moving +timestep 0.0001 + +# compute and output options + +compute out_mag all spin +compute out_pe all pe +compute out_ke all ke +compute out_temp all temp + +variable magx equal c_out_mag[1] +variable magy equal c_out_mag[2] +variable magz equal c_out_mag[3] +variable magnorm equal c_out_mag[4] +variable emag equal c_out_mag[5] +variable tmag equal c_out_mag[6] + +thermo_style custom step time v_magx v_magy v_magnorm pe v_emag temp etotal +thermo 50 + +# compute outsp all property/atom spx spy spz sp fmx fmy fmz +# dump 1 all custom 100 dump_cobalt_fcc.lammpstrj type x y z c_outsp[1] c_outsp[2] c_outsp[3] + +run 1000 +Neighbor list info ... + update every 10 steps, delay 20 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 6.59954 + ghost atom cutoff = 6.59954 + binsize = 3.29977, bins = 6 6 6 + 2 neighbor lists, perpetual/occasional/extra = 2 0 0 + (1) pair eam/alloy, perpetual, half/full from (2) + attributes: half, newton on + pair build: halffull/newton + stencil: none + bin: none + (2) pair spin/exchange, perpetual + attributes: full, newton on + pair build: full/bin/atomonly + stencil: full/bin/3d + bin: standard +Per MPI rank memory allocation (min/avg/max) = 5.664 | 5.664 | 5.664 Mbytes +Step Time v_magx v_magy v_magnorm PotEng v_emag Temp TotEng + 0 0 0 0 1 -2285.0679 -94.095041 100.00543 -2278.6175 + 50 0.005 0 0 1 -2284.7564 -94.094967 95.176149 -2278.6175 + 100 0.01 0 0 1 -2283.8977 -94.094606 81.863661 -2278.6175 + 150 0.015 0 0 1 -2282.7006 -94.09362 63.303924 -2278.6175 + 200 0.02 0 0 1 -2281.452 -94.091648 43.94572 -2278.6174 + 250 0.025 0 0 1 -2280.4374 -94.08853 28.216468 -2278.6174 + 300 0.03 0 0 1 -2279.859 -94.084466 19.248729 -2278.6174 + 350 0.035 0 0 1 -2279.78 -94.080048 18.024631 -2278.6174 + 400 0.04 0 0 1 -2280.1196 -94.076134 23.288369 -2278.6174 + 450 0.045 0 0 1 -2280.697 -94.073612 32.240137 -2278.6175 + 500 0.05 0 0 1 -2281.305 -94.073124 41.666374 -2278.6175 + 550 0.055 0 0 1 -2281.7792 -94.074853 49.019175 -2278.6175 + 600 0.06 0 0 1 -2282.0409 -94.078438 53.075365 -2278.6175 + 650 0.065 0 0 1 -2282.1031 -94.083056 54.040647 -2278.6175 + 700 0.07 0 0 1 -2282.0468 -94.087642 53.167271 -2278.6175 + 750 0.075 0 0 1 -2281.9765 -94.09119 52.076935 -2278.6174 + 800 0.08 0 0 1 -2281.9742 -94.093023 52.041607 -2278.6174 + 850 0.085 0 0 1 -2282.0669 -94.09296 53.478909 -2278.6174 + 900 0.09 0 0 1 -2282.2193 -94.091331 55.842481 -2278.6175 + 950 0.095 0 0 1 -2282.354 -94.088827 57.930866 -2278.6175 + 1000 0.1 0 0 1 -2282.3885 -94.086262 58.464579 -2278.6175 +Loop time of 2.75 on 4 procs for 1000 steps with 500 atoms + +Performance: 3.142 ns/day, 7.639 hours/ns, 363.637 timesteps/s +99.7% CPU use with 4 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.57529 | 0.60652 | 0.63664 | 3.2 | 22.06 +Neigh | 0.0026889 | 0.0029447 | 0.0030761 | 0.3 | 0.11 +Comm | 0.10943 | 0.14471 | 0.17847 | 7.5 | 5.26 +Output | 0.00045419 | 0.00050056 | 0.00060511 | 0.0 | 0.02 +Modify | 1.9865 | 1.9926 | 1.998 | 0.3 | 72.46 +Other | | 0.002738 | | | 0.10 + +Nlocal: 125 ave 132 max 116 min +Histogram: 1 0 0 0 0 1 1 0 0 1 +Nghost: 1099 ave 1108 max 1092 min +Histogram: 1 0 0 1 1 0 0 0 0 1 +Neighs: 6033 ave 6372 max 5495 min +Histogram: 1 0 0 0 0 0 0 2 0 1 +FullNghs: 12066 ave 12964 max 10977 min +Histogram: 1 0 0 0 0 1 1 0 0 1 + +Total # of neighbors = 48264 +Ave neighs/atom = 96.528 +Neighbor list builds = 6 +Dangerous builds = 0 + +Please see the log.cite file for references relevant to this simulation + +Total wall time: 0:00:02 diff --git a/examples/SPIN/cobalt_fcc/log.19Nov19.spin.cobalt_fcc.g++.1 b/examples/SPIN/cobalt_fcc/log.19Nov19.spin.cobalt_fcc.g++.1 deleted file mode 100644 index 06774d08580242bac91bffff8d89150bcf1f80f6..0000000000000000000000000000000000000000 --- a/examples/SPIN/cobalt_fcc/log.19Nov19.spin.cobalt_fcc.g++.1 +++ /dev/null @@ -1,142 +0,0 @@ -LAMMPS (30 Oct 2019) -# fcc cobalt in a 3d periodic box - -clear -units metal -atom_style spin - -dimension 3 -boundary p p p - -# necessary for the serial algorithm (sametag) -atom_modify map array - -lattice fcc 3.54 -Lattice spacing in x,y,z = 3.54 3.54 3.54 -region box block 0.0 5.0 0.0 5.0 0.0 5.0 -create_box 1 box -Created orthogonal box = (0 0 0) to (17.7 17.7 17.7) - 1 by 1 by 1 MPI processor grid -create_atoms 1 box -Created 500 atoms - create_atoms CPU = 0.000470161 secs - -# setting mass, mag. moments, and interactions for fcc cobalt - -mass 1 58.93 - -#set group all spin/random 31 1.72 -set group all spin 1.72 0.0 0.0 1.0 - 500 settings made for spin -velocity all create 100 4928459 rot yes dist gaussian - -pair_style hybrid/overlay eam/alloy spin/exchange 4.0 -pair_coeff * * eam/alloy Co_PurjaPun_2012.eam.alloy Co -pair_coeff * * spin/exchange exchange 4.0 0.0446928 0.003496 1.4885 - -neighbor 0.1 bin -neigh_modify every 10 check yes delay 20 - -fix 1 all precession/spin zeeman 1.0 0.0 0.0 1.0 -fix_modify 1 energy yes - -fix 2 all langevin/spin 0.0 0.0 21 - -fix 3 all nve/spin lattice moving -timestep 0.0001 - -# compute and output options - -compute out_mag all spin -compute out_pe all pe -compute out_ke all ke -compute out_temp all temp - -thermo_style custom f_1 - -variable magx equal c_out_mag[1] -variable magy equal c_out_mag[2] -variable magz equal c_out_mag[3] -variable magnorm equal c_out_mag[4] -variable emag equal c_out_mag[5] -variable tmag equal c_out_mag[6] - -thermo_style custom step time f_1 v_magx v_magy v_magnorm v_emag temp etotal -thermo 50 - -# compute outsp all property/atom spx spy spz sp fmx fmy fmz -# dump 1 all custom 100 dump_cobalt_fcc.lammpstrj type x y z c_outsp[1] c_outsp[2] c_outsp[3] - -run 1000 -Neighbor list info ... - update every 10 steps, delay 20 steps, check yes - max neighbors/atom: 2000, page size: 100000 - master list distance cutoff = 6.59954 - ghost atom cutoff = 6.59954 - binsize = 3.29977, bins = 6 6 6 - 2 neighbor lists, perpetual/occasional/extra = 2 0 0 - (1) pair eam/alloy, perpetual, half/full from (2) - attributes: half, newton on - pair build: halffull/newton - stencil: none - bin: none - (2) pair spin/exchange, perpetual - attributes: full, newton on - pair build: full/bin/atomonly - stencil: full/bin/3d - bin: standard -Per MPI rank memory allocation (min/avg/max) = 5.718 | 5.718 | 5.718 Mbytes -Step Time f_1 v_magx v_magy v_magnorm v_emag Temp TotEng - 0 0 -0.099570972 0 0 1 -188.09051 100.00543 -2278.6175 - 50 0.005 -0.099570972 0 0 1 -188.09048 95.094679 -2278.6175 - 100 0.01 -0.099570972 0 0 1 -188.09007 81.578321 -2278.6177 - 150 0.015 -0.099570972 0 0 1 -188.08848 62.802727 -2278.6185 - 200 0.02 -0.099570972 0 0 1 -188.08487 43.35108 -2278.6203 - 250 0.025 -0.099570972 0 0 1 -188.07877 27.749821 -2278.6233 - 300 0.03 -0.099570972 0 0 1 -188.07054 19.149389 -2278.6274 - 350 0.035 -0.099570972 0 0 1 -188.06135 18.453387 -2278.632 - 400 0.04 -0.099570972 0 0 1 -188.053 24.249423 -2278.6362 - 450 0.045 -0.099570972 0 0 1 -188.04742 33.548008 -2278.639 - 500 0.05 -0.099570972 0 0 1 -188.04604 42.973172 -2278.6397 - 550 0.055 -0.099570972 0 0 1 -188.04935 49.902539 -2278.638 - 600 0.06 -0.099570972 0 0 1 -188.0567 53.166772 -2278.6344 - 650 0.065 -0.099570972 0 0 1 -188.06642 53.153416 -2278.6295 - 700 0.07 -0.099570972 0 0 1 -188.07628 51.377187 -2278.6246 - 750 0.075 -0.099570972 0 0 1 -188.08415 49.725449 -2278.6206 - 800 0.08 -0.099570972 0 0 1 -188.08857 49.663576 -2278.6184 - 850 0.085 -0.099570972 0 0 1 -188.0891 51.681567 -2278.6182 - 900 0.09 -0.099570972 0 0 1 -188.08636 55.166554 -2278.6195 - 950 0.095 -0.099570972 0 0 1 -188.08174 58.718232 -2278.6218 - 1000 0.1 -0.099570972 0 0 1 -188.0769 60.75567 -2278.6243 -Loop time of 4.6196 on 1 procs for 1000 steps with 500 atoms - -Performance: 1.870 ns/day, 12.832 hours/ns, 216.469 timesteps/s -99.9% CPU use with 1 MPI tasks x no OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 2.3116 | 2.3116 | 2.3116 | 0.0 | 50.04 -Neigh | 0.011227 | 0.011227 | 0.011227 | 0.0 | 0.24 -Comm | 0.032837 | 0.032837 | 0.032837 | 0.0 | 0.71 -Output | 0.00039411 | 0.00039411 | 0.00039411 | 0.0 | 0.01 -Modify | 2.2584 | 2.2584 | 2.2584 | 0.0 | 48.89 -Other | | 0.005152 | | | 0.11 - -Nlocal: 500 ave 500 max 500 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Nghost: 1956 ave 1956 max 1956 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Neighs: 24065 ave 24065 max 24065 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -FullNghs: 48130 ave 48130 max 48130 min -Histogram: 1 0 0 0 0 0 0 0 0 0 - -Total # of neighbors = 48130 -Ave neighs/atom = 96.26 -Neighbor list builds = 6 -Dangerous builds = 0 - -Please see the log.cite file for references relevant to this simulation - -Total wall time: 0:00:04 diff --git a/examples/SPIN/cobalt_fcc/log.19Nov19.spin.cobalt_fcc.g++.4 b/examples/SPIN/cobalt_fcc/log.19Nov19.spin.cobalt_fcc.g++.4 deleted file mode 100644 index 331ed60315a408c4cc2d221e13b18348b540b87b..0000000000000000000000000000000000000000 --- a/examples/SPIN/cobalt_fcc/log.19Nov19.spin.cobalt_fcc.g++.4 +++ /dev/null @@ -1,142 +0,0 @@ -LAMMPS (30 Oct 2019) -# fcc cobalt in a 3d periodic box - -clear -units metal -atom_style spin - -dimension 3 -boundary p p p - -# necessary for the serial algorithm (sametag) -atom_modify map array - -lattice fcc 3.54 -Lattice spacing in x,y,z = 3.54 3.54 3.54 -region box block 0.0 5.0 0.0 5.0 0.0 5.0 -create_box 1 box -Created orthogonal box = (0 0 0) to (17.7 17.7 17.7) - 1 by 2 by 2 MPI processor grid -create_atoms 1 box -Created 500 atoms - create_atoms CPU = 0.000808001 secs - -# setting mass, mag. moments, and interactions for fcc cobalt - -mass 1 58.93 - -#set group all spin/random 31 1.72 -set group all spin 1.72 0.0 0.0 1.0 - 500 settings made for spin -velocity all create 100 4928459 rot yes dist gaussian - -pair_style hybrid/overlay eam/alloy spin/exchange 4.0 -pair_coeff * * eam/alloy Co_PurjaPun_2012.eam.alloy Co -pair_coeff * * spin/exchange exchange 4.0 0.0446928 0.003496 1.4885 - -neighbor 0.1 bin -neigh_modify every 10 check yes delay 20 - -fix 1 all precession/spin zeeman 1.0 0.0 0.0 1.0 -fix_modify 1 energy yes - -fix 2 all langevin/spin 0.0 0.0 21 - -fix 3 all nve/spin lattice moving -timestep 0.0001 - -# compute and output options - -compute out_mag all spin -compute out_pe all pe -compute out_ke all ke -compute out_temp all temp - -thermo_style custom f_1 - -variable magx equal c_out_mag[1] -variable magy equal c_out_mag[2] -variable magz equal c_out_mag[3] -variable magnorm equal c_out_mag[4] -variable emag equal c_out_mag[5] -variable tmag equal c_out_mag[6] - -thermo_style custom step time f_1 v_magx v_magy v_magnorm v_emag temp etotal -thermo 50 - -# compute outsp all property/atom spx spy spz sp fmx fmy fmz -# dump 1 all custom 100 dump_cobalt_fcc.lammpstrj type x y z c_outsp[1] c_outsp[2] c_outsp[3] - -run 1000 -Neighbor list info ... - update every 10 steps, delay 20 steps, check yes - max neighbors/atom: 2000, page size: 100000 - master list distance cutoff = 6.59954 - ghost atom cutoff = 6.59954 - binsize = 3.29977, bins = 6 6 6 - 2 neighbor lists, perpetual/occasional/extra = 2 0 0 - (1) pair eam/alloy, perpetual, half/full from (2) - attributes: half, newton on - pair build: halffull/newton - stencil: none - bin: none - (2) pair spin/exchange, perpetual - attributes: full, newton on - pair build: full/bin/atomonly - stencil: full/bin/3d - bin: standard -Per MPI rank memory allocation (min/avg/max) = 5.664 | 5.664 | 5.664 Mbytes -Step Time f_1 v_magx v_magy v_magnorm v_emag Temp TotEng - 0 0 -0.099570972 0 0 1 -188.09051 100.00543 -2372.6129 - 50 0.005 -0.099570972 0 0 1 -188.09036 95.174807 -2372.6129 - 100 0.01 -0.099570972 0 0 1 -188.08965 81.854304 -2372.6129 - 150 0.015 -0.099570972 0 0 1 -188.0877 63.270938 -2372.6129 - 200 0.02 -0.099570972 0 0 1 -188.08381 43.867262 -2372.6129 - 250 0.025 -0.099570972 0 0 1 -188.07767 28.075261 -2372.6129 - 300 0.03 -0.099570972 0 0 1 -188.06966 19.046222 -2372.6129 - 350 0.035 -0.099570972 0 0 1 -188.06096 17.79071 -2372.6129 - 400 0.04 -0.099570972 0 0 1 -188.05326 23.079994 -2372.6129 - 450 0.045 -0.099570972 0 0 1 -188.04831 32.127316 -2372.6129 - 500 0.05 -0.099570972 0 0 1 -188.04737 41.709644 -2372.6129 - 550 0.055 -0.099570972 0 0 1 -188.05082 49.246292 -2372.6129 - 600 0.06 -0.099570972 0 0 1 -188.05795 53.465535 -2372.6129 - 650 0.065 -0.099570972 0 0 1 -188.06713 54.522857 -2372.6129 - 700 0.07 -0.099570972 0 0 1 -188.07626 53.635521 -2372.6129 - 750 0.075 -0.099570972 0 0 1 -188.08332 52.419678 -2372.6129 - 800 0.08 -0.099570972 0 0 1 -188.08696 52.176558 -2372.6129 - 850 0.085 -0.099570972 0 0 1 -188.0868 53.380592 -2372.6129 - 900 0.09 -0.099570972 0 0 1 -188.08348 55.551378 -2372.6129 - 950 0.095 -0.099570972 0 0 1 -188.07838 57.540047 -2372.6129 - 1000 0.1 -0.099570972 0 0 1 -188.07314 58.088674 -2372.6129 -Loop time of 2.54753 on 4 procs for 1000 steps with 500 atoms - -Performance: 3.392 ns/day, 7.076 hours/ns, 392.538 timesteps/s -100.0% CPU use with 4 MPI tasks x no OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0.62017 | 0.6485 | 0.66275 | 2.1 | 25.46 -Neigh | 0.0027115 | 0.0029724 | 0.0030868 | 0.3 | 0.12 -Comm | 0.095047 | 0.1102 | 0.13819 | 5.0 | 4.33 -Output | 0.00039029 | 0.00042999 | 0.00049996 | 0.0 | 0.02 -Modify | 1.7801 | 1.7834 | 1.7852 | 0.1 | 70.01 -Other | | 0.002028 | | | 0.08 - -Nlocal: 125 ave 133 max 116 min -Histogram: 1 0 0 0 0 2 0 0 0 1 -Nghost: 1099 ave 1108 max 1091 min -Histogram: 1 0 0 0 2 0 0 0 0 1 -Neighs: 6032.5 ave 6417 max 5489 min -Histogram: 1 0 0 0 0 0 1 1 0 1 -FullNghs: 12065 ave 13062 max 10970 min -Histogram: 1 0 0 0 0 2 0 0 0 1 - -Total # of neighbors = 48260 -Ave neighs/atom = 96.52 -Neighbor list builds = 6 -Dangerous builds = 0 - -Please see the log.cite file for references relevant to this simulation - -Total wall time: 0:00:02 diff --git a/examples/SPIN/cobalt_hcp/in.spin.cobalt_hcp b/examples/SPIN/cobalt_hcp/in.spin.cobalt_hcp index dd114202cb7dce70f07dedf74077da08e36d2c90..2bfa8393f387c1d5b5646f0deff19fa930a0543c 100644 --- a/examples/SPIN/cobalt_hcp/in.spin.cobalt_hcp +++ b/examples/SPIN/cobalt_hcp/in.spin.cobalt_hcp @@ -32,10 +32,9 @@ pair_coeff * * spin/exchange exchange 4.0 -0.3593 1.135028015e-05 1.064568567 neighbor 0.1 bin neigh_modify every 10 check yes delay 20 -#fix 1 all precession/spin zeeman 1.0 0.0 0.0 1.0 fix 1 all precession/spin anisotropy 0.01 0.0 0.0 1.0 -#fix 2 all langevin/spin 0.0 0.0 21 -fix 2 all langevin/spin 0.0 0.1 21 +fix_modify 1 energy yes +fix 2 all langevin/spin 0.0 0.0 21 fix 3 all nve/spin lattice moving timestep 0.0001 @@ -51,8 +50,8 @@ variable magnorm equal c_out_mag[4] variable emag equal c_out_mag[5] variable tmag equal c_out_mag[6] -thermo_style custom step time v_magnorm v_emag temp press etotal -thermo 10 +thermo_style custom step time v_magnorm pe v_emag temp press etotal +thermo 50 compute outsp all property/atom spx spy spz sp fmx fmy fmz dump 1 all custom 100 dump_cobalt_hcp.lammpstrj type x y z c_outsp[1] c_outsp[2] c_outsp[3] diff --git a/examples/SPIN/cobalt_hcp/log.14Apr20.spin.cobalt_hcp.g++.1 b/examples/SPIN/cobalt_hcp/log.14Apr20.spin.cobalt_hcp.g++.1 new file mode 100644 index 0000000000000000000000000000000000000000..b26892f6e9831524682bd1314917ce2ced478975 --- /dev/null +++ b/examples/SPIN/cobalt_hcp/log.14Apr20.spin.cobalt_hcp.g++.1 @@ -0,0 +1,142 @@ +LAMMPS (19 Mar 2020) +OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (../comm.cpp:94) + using 1 OpenMP thread(s) per MPI task +# hcp cobalt in a 3d periodic box + +clear +OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (../comm.cpp:94) + using 1 OpenMP thread(s) per MPI task +units metal +atom_style spin + +dimension 3 +boundary p p p + +# necessary for the serial algorithm (sametag) +atom_modify map array + +lattice hcp 2.5071 +Lattice spacing in x,y,z = 2.5071 4.34242 4.09408 +region box block 0.0 5.0 0.0 5.0 0.0 5.0 +create_box 1 box +Created orthogonal box = (0 0 0) to (12.5355 21.7121 20.4704) + 1 by 1 by 1 MPI processor grid +create_atoms 1 box +Created 500 atoms + create_atoms CPU = 0.00121403 secs + +# setting mass, mag. moments, and interactions for hcp cobalt + +mass 1 58.93 + +set group all spin/random 31 1.72 + 500 settings made for spin/random +#set group all spin 1.72 0.0 0.0 1.0 +velocity all create 100 4928459 rot yes dist gaussian + +#pair_style hybrid/overlay eam/alloy spin/exchange 4.0 spin/neel 4.0 +pair_style hybrid/overlay eam/alloy spin/exchange 4.0 +pair_coeff * * eam/alloy Co_PurjaPun_2012.eam.alloy Co +pair_coeff * * spin/exchange exchange 4.0 -0.3593 1.135028015e-05 1.064568567 +#pair_coeff * * spin/neel neel 4.0 0.0048 0.234 1.168 2.6905 0.705 0.652 + +neighbor 0.1 bin +neigh_modify every 10 check yes delay 20 + +fix 1 all precession/spin anisotropy 0.01 0.0 0.0 1.0 +fix_modify 1 energy yes +fix 2 all langevin/spin 0.0 0.0 21 +fix 3 all nve/spin lattice moving + +timestep 0.0001 + + +compute out_mag all spin +compute out_pe all pe +compute out_ke all ke +compute out_temp all temp + +variable magz equal c_out_mag[3] +variable magnorm equal c_out_mag[4] +variable emag equal c_out_mag[5] +variable tmag equal c_out_mag[6] + +thermo_style custom step time v_magnorm pe v_emag temp press etotal +thermo 50 + +compute outsp all property/atom spx spy spz sp fmx fmy fmz +dump 1 all custom 100 dump_cobalt_hcp.lammpstrj type x y z c_outsp[1] c_outsp[2] c_outsp[3] + +run 1000 +Neighbor list info ... + update every 10 steps, delay 20 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 6.59954 + ghost atom cutoff = 6.59954 + binsize = 3.29977, bins = 4 7 7 + 2 neighbor lists, perpetual/occasional/extra = 2 0 0 + (1) pair eam/alloy, perpetual, half/full from (2) + attributes: half, newton on + pair build: halffull/newton + stencil: none + bin: none + (2) pair spin/exchange, perpetual + attributes: full, newton on + pair build: full/bin/atomonly + stencil: full/bin/3d + bin: standard +Per MPI rank memory allocation (min/avg/max) = 7.902 | 7.902 | 7.902 Mbytes +Step Time v_magnorm PotEng v_emag Temp Press TotEng + 0 0 0.076558814 -2197.5536 -2.5536882 100.00543 -552.75983 -2191.1032 + 50 0.005 0.079437931 -2197.3113 -2.6177795 96.18776 -337.75504 -2191.1071 + 100 0.01 0.079575823 -2196.5768 -2.7375927 84.740309 571.91195 -2191.1109 + 150 0.015 0.078526145 -2195.4996 -2.8719243 67.984081 1845.185 -2191.1146 + 200 0.02 0.077001318 -2194.3502 -3.019723 50.107518 3008.9709 -2191.1182 + 250 0.025 0.077628454 -2193.403 -3.1832392 35.364524 4018.0217 -2191.122 + 300 0.03 0.077407462 -2192.8618 -3.3557644 26.910583 4535.9542 -2191.126 + 350 0.035 0.078090775 -2192.8052 -3.5305639 25.971561 4733.0322 -2191.13 + 400 0.04 0.078594494 -2193.135 -3.6772939 31.026665 4309.2088 -2191.1338 + 450 0.045 0.079898162 -2193.6965 -3.8044501 39.672566 3591.9593 -2191.1376 + 500 0.05 0.079885039 -2194.3293 -3.9435795 49.423774 2698.4519 -2191.1414 + 550 0.055 0.077196547 -2194.8554 -4.0868278 57.523322 1934.2444 -2191.1451 + 600 0.06 0.075430904 -2195.1797 -4.2355252 62.494025 1597.2543 -2191.1488 + 650 0.065 0.076510964 -2195.2854 -4.3752086 64.080496 1656.2312 -2191.1522 + 700 0.07 0.07649426 -2195.2723 -4.5226349 63.825926 1521.7541 -2191.1555 + 750 0.075 0.076254777 -2195.2746 -4.6937954 63.804162 1505.1323 -2191.1592 + 800 0.08 0.074211447 -2195.3567 -4.8567561 65.022623 1203.5409 -2191.1627 + 850 0.085 0.072034236 -2195.5531 -5.0007443 68.003461 900.03381 -2191.1668 + 900 0.09 0.071097702 -2195.8563 -5.1391578 72.641879 548.08834 -2191.1709 + 950 0.095 0.072642434 -2196.2007 -5.2853353 77.926596 194.45928 -2191.1743 + 1000 0.1 0.07306537 -2196.46 -5.4169261 81.891897 -404.70871 -2191.1779 +Loop time of 4.78824 on 1 procs for 1000 steps with 500 atoms + +Performance: 1.804 ns/day, 13.301 hours/ns, 208.845 timesteps/s +100.0% CPU use with 1 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 2.3284 | 2.3284 | 2.3284 | 0.0 | 48.63 +Neigh | 0.01273 | 0.01273 | 0.01273 | 0.0 | 0.27 +Comm | 0.042432 | 0.042432 | 0.042432 | 0.0 | 0.89 +Output | 0.0083201 | 0.0083201 | 0.0083201 | 0.0 | 0.17 +Modify | 2.3895 | 2.3895 | 2.3895 | 0.0 | 49.90 +Other | | 0.006823 | | | 0.14 + +Nlocal: 500 ave 500 max 500 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 2444 ave 2444 max 2444 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Neighs: 27036 ave 27036 max 27036 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +FullNghs: 54072 ave 54072 max 54072 min +Histogram: 1 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 54072 +Ave neighs/atom = 108.144 +Neighbor list builds = 6 +Dangerous builds = 0 + +Please see the log.cite file for references relevant to this simulation + +Total wall time: 0:00:04 diff --git a/examples/SPIN/cobalt_hcp/log.14Apr20.spin.cobalt_hcp.g++.4 b/examples/SPIN/cobalt_hcp/log.14Apr20.spin.cobalt_hcp.g++.4 new file mode 100644 index 0000000000000000000000000000000000000000..ad8bf1807f0925c3e74a9697392bf7d44376ce82 --- /dev/null +++ b/examples/SPIN/cobalt_hcp/log.14Apr20.spin.cobalt_hcp.g++.4 @@ -0,0 +1,142 @@ +LAMMPS (19 Mar 2020) +OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (../comm.cpp:94) + using 1 OpenMP thread(s) per MPI task +# hcp cobalt in a 3d periodic box + +clear +OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (../comm.cpp:94) + using 1 OpenMP thread(s) per MPI task +units metal +atom_style spin + +dimension 3 +boundary p p p + +# necessary for the serial algorithm (sametag) +atom_modify map array + +lattice hcp 2.5071 +Lattice spacing in x,y,z = 2.5071 4.34242 4.09408 +region box block 0.0 5.0 0.0 5.0 0.0 5.0 +create_box 1 box +Created orthogonal box = (0 0 0) to (12.5355 21.7121 20.4704) + 1 by 2 by 2 MPI processor grid +create_atoms 1 box +Created 500 atoms + create_atoms CPU = 0.000710964 secs + +# setting mass, mag. moments, and interactions for hcp cobalt + +mass 1 58.93 + +set group all spin/random 31 1.72 + 500 settings made for spin/random +#set group all spin 1.72 0.0 0.0 1.0 +velocity all create 100 4928459 rot yes dist gaussian + +#pair_style hybrid/overlay eam/alloy spin/exchange 4.0 spin/neel 4.0 +pair_style hybrid/overlay eam/alloy spin/exchange 4.0 +pair_coeff * * eam/alloy Co_PurjaPun_2012.eam.alloy Co +pair_coeff * * spin/exchange exchange 4.0 -0.3593 1.135028015e-05 1.064568567 +#pair_coeff * * spin/neel neel 4.0 0.0048 0.234 1.168 2.6905 0.705 0.652 + +neighbor 0.1 bin +neigh_modify every 10 check yes delay 20 + +fix 1 all precession/spin anisotropy 0.01 0.0 0.0 1.0 +fix_modify 1 energy yes +fix 2 all langevin/spin 0.0 0.0 21 +fix 3 all nve/spin lattice moving + +timestep 0.0001 + + +compute out_mag all spin +compute out_pe all pe +compute out_ke all ke +compute out_temp all temp + +variable magz equal c_out_mag[3] +variable magnorm equal c_out_mag[4] +variable emag equal c_out_mag[5] +variable tmag equal c_out_mag[6] + +thermo_style custom step time v_magnorm pe v_emag temp press etotal +thermo 50 + +compute outsp all property/atom spx spy spz sp fmx fmy fmz +dump 1 all custom 100 dump_cobalt_hcp.lammpstrj type x y z c_outsp[1] c_outsp[2] c_outsp[3] + +run 1000 +Neighbor list info ... + update every 10 steps, delay 20 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 6.59954 + ghost atom cutoff = 6.59954 + binsize = 3.29977, bins = 4 7 7 + 2 neighbor lists, perpetual/occasional/extra = 2 0 0 + (1) pair eam/alloy, perpetual, half/full from (2) + attributes: half, newton on + pair build: halffull/newton + stencil: none + bin: none + (2) pair spin/exchange, perpetual + attributes: full, newton on + pair build: full/bin/atomonly + stencil: full/bin/3d + bin: standard +Per MPI rank memory allocation (min/avg/max) = 7.814 | 7.814 | 7.815 Mbytes +Step Time v_magnorm PotEng v_emag Temp Press TotEng + 0 0 0.076558814 -2197.5536 -2.5536882 100.00543 -552.75983 -2191.1032 + 50 0.005 0.079452711 -2197.3115 -2.6266704 96.190558 -328.47868 -2191.1071 + 100 0.01 0.079678568 -2196.5823 -2.7759025 84.826338 585.21827 -2191.1109 + 150 0.015 0.078665787 -2195.5034 -2.9426881 68.043637 1872.5465 -2191.1146 + 200 0.02 0.076875906 -2194.3466 -3.1163511 50.052941 2986.3962 -2191.1181 + 250 0.025 0.076865073 -2193.3857 -3.2792912 35.095608 4003.4846 -2191.122 + 300 0.03 0.07675751 -2192.8611 -3.4452905 26.902302 4561.1429 -2191.1259 + 350 0.035 0.077351833 -2192.8579 -3.6193072 26.792986 4523.2641 -2191.1297 + 400 0.04 0.077672952 -2193.275 -3.7845654 33.199609 4108.3226 -2191.1336 + 450 0.045 0.077553541 -2193.9028 -3.9247064 42.874729 3267.3626 -2191.1373 + 500 0.05 0.076992612 -2194.5433 -4.0593738 52.743363 2317.5276 -2191.1413 + 550 0.055 0.074971927 -2195.0364 -4.1961092 60.332059 1620.5766 -2191.145 + 600 0.06 0.072652113 -2195.3154 -4.3458839 64.600641 1265.4418 -2191.1486 + 650 0.065 0.071405665 -2195.392 -4.5049778 65.734457 1221.4637 -2191.1521 + 700 0.07 0.072030336 -2195.337 -4.6535106 64.831697 1224.9583 -2191.1553 + 750 0.075 0.072468553 -2195.2702 -4.7829549 63.746912 1220.2392 -2191.1585 + 800 0.08 0.071546019 -2195.3271 -4.9161885 64.581676 1134.3858 -2191.1616 + 850 0.085 0.071414723 -2195.5618 -5.0652271 68.168922 864.52044 -2191.1648 + 900 0.09 0.073428472 -2195.9219 -5.219789 73.702937 556.14868 -2191.168 + 950 0.095 0.0745891 -2196.3065 -5.3782699 79.616238 -64.458151 -2191.1711 + 1000 0.1 0.074027925 -2196.6049 -5.5446493 84.189424 -640.80166 -2191.1746 +Loop time of 2.86028 on 4 procs for 1000 steps with 500 atoms + +Performance: 3.021 ns/day, 7.945 hours/ns, 349.616 timesteps/s +100.0% CPU use with 4 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.6266 | 0.66621 | 0.68577 | 3.0 | 23.29 +Neigh | 0.0030921 | 0.0031813 | 0.0032392 | 0.1 | 0.11 +Comm | 0.1184 | 0.14023 | 0.18062 | 6.6 | 4.90 +Output | 0.0031779 | 0.0032207 | 0.0033176 | 0.1 | 0.11 +Modify | 2.0432 | 2.0445 | 2.0467 | 0.1 | 71.48 +Other | | 0.002987 | | | 0.10 + +Nlocal: 125 ave 128 max 121 min +Histogram: 1 0 1 0 0 0 0 0 0 2 +Nghost: 1324 ave 1331 max 1318 min +Histogram: 2 0 0 0 0 0 0 0 1 1 +Neighs: 6756.5 ave 6978 max 6543 min +Histogram: 1 1 0 0 0 0 0 0 1 1 +FullNghs: 13513 ave 13915 max 13042 min +Histogram: 1 1 0 0 0 0 0 0 0 2 + +Total # of neighbors = 54052 +Ave neighs/atom = 108.104 +Neighbor list builds = 6 +Dangerous builds = 0 + +Please see the log.cite file for references relevant to this simulation + +Total wall time: 0:00:02 diff --git a/examples/SPIN/cobalt_hcp/log.19Nov19.spin.cobalt_hcp.g++.1 b/examples/SPIN/cobalt_hcp/log.19Nov19.spin.cobalt_hcp.g++.1 deleted file mode 100644 index 781e2264a73438a7f71bbacbca8ec749fa19403e..0000000000000000000000000000000000000000 --- a/examples/SPIN/cobalt_hcp/log.19Nov19.spin.cobalt_hcp.g++.1 +++ /dev/null @@ -1,219 +0,0 @@ -LAMMPS (30 Oct 2019) -# hcp cobalt in a 3d periodic box - -clear -units metal -atom_style spin - -dimension 3 -boundary p p p - -# necessary for the serial algorithm (sametag) -atom_modify map array - -lattice hcp 2.5071 -Lattice spacing in x,y,z = 2.5071 4.34242 4.09408 -region box block 0.0 5.0 0.0 5.0 0.0 5.0 -create_box 1 box -Created orthogonal box = (0 0 0) to (12.5355 21.7121 20.4704) - 1 by 1 by 1 MPI processor grid -create_atoms 1 box -Created 500 atoms - create_atoms CPU = 0.00105 secs - -# setting mass, mag. moments, and interactions for hcp cobalt - -mass 1 58.93 - -set group all spin/random 31 1.72 - 500 settings made for spin/random -#set group all spin 1.72 0.0 0.0 1.0 -velocity all create 100 4928459 rot yes dist gaussian - -#pair_style hybrid/overlay eam/alloy spin/exchange 4.0 spin/neel 4.0 -pair_style hybrid/overlay eam/alloy spin/exchange 4.0 -pair_coeff * * eam/alloy Co_PurjaPun_2012.eam.alloy Co -pair_coeff * * spin/exchange exchange 4.0 -0.3593 1.135028015e-05 1.064568567 -#pair_coeff * * spin/neel neel 4.0 0.0048 0.234 1.168 2.6905 0.705 0.652 - -neighbor 0.1 bin -neigh_modify every 10 check yes delay 20 - -#fix 1 all precession/spin zeeman 1.0 0.0 0.0 1.0 -fix 1 all precession/spin anisotropy 0.01 0.0 0.0 1.0 -#fix 2 all langevin/spin 0.0 0.0 21 -fix 2 all langevin/spin 0.0 0.1 21 -fix 3 all nve/spin lattice moving - -timestep 0.0001 - - -compute out_mag all spin -compute out_pe all pe -compute out_ke all ke -compute out_temp all temp - -variable magz equal c_out_mag[3] -variable magnorm equal c_out_mag[4] -variable emag equal c_out_mag[5] -variable tmag equal c_out_mag[6] - -thermo_style custom step time v_magnorm v_emag temp press etotal -thermo 10 - -compute outsp all property/atom spx spy spz sp fmx fmy fmz -dump 1 all custom 100 dump_cobalt_hcp.lammpstrj type x y z c_outsp[1] c_outsp[2] c_outsp[3] - -run 1000 -Neighbor list info ... - update every 10 steps, delay 20 steps, check yes - max neighbors/atom: 2000, page size: 100000 - master list distance cutoff = 6.59954 - ghost atom cutoff = 6.59954 - binsize = 3.29977, bins = 4 7 7 - 2 neighbor lists, perpetual/occasional/extra = 2 0 0 - (1) pair eam/alloy, perpetual, half/full from (2) - attributes: half, newton on - pair build: halffull/newton - stencil: none - bin: none - (2) pair spin/exchange, perpetual - attributes: full, newton on - pair build: full/bin/atomonly - stencil: full/bin/3d - bin: standard -Per MPI rank memory allocation (min/avg/max) = 7.902 | 7.902 | 7.902 Mbytes -Step Time v_magnorm v_emag Temp Press TotEng - 0 0 0.076558814 -5.1073764 100.00543 -552.75983 -2189.4486 - 10 0.001 0.074494403 -6.2746901 100.01038 -1571.7966 -2190.0317 - 20 0.002 0.072366265 -7.4280779 99.885587 -2535.9845 -2190.5874 - 30 0.003 0.070127018 -8.5667999 99.611653 -3445.9872 -2191.1169 - 40 0.004 0.067755946 -9.6899272 99.164813 -4302.5715 -2191.6215 - 50 0.005 0.065261592 -10.79648 98.520535 -5107.2841 -2192.103 - 60 0.006 0.062676613 -11.885341 97.657148 -5862.7198 -2192.5638 - 70 0.007 0.060046709 -12.955115 96.558718 -6572.0571 -2193.0064 - 80 0.008 0.057417313 -14.004096 95.216748 -7238.1396 -2193.4327 - 90 0.009 0.054822275 -15.030416 93.630634 -7862.5226 -2193.8437 - 100 0.01 0.052277835 -16.032345 91.80711 -8445.2646 -2194.2391 - 110 0.011 0.049783153 -17.008652 89.759163 -8985.5937 -2194.6181 - 120 0.012 0.047326373 -17.958895 87.504922 -9483.1141 -2194.98 - 130 0.013 0.044893289 -18.883574 85.066818 -9938.8838 -2195.3247 - 140 0.014 0.042474822 -19.784052 82.471014 -10355.911 -2195.6533 - 150 0.015 0.040070404 -20.662271 79.746901 -10739.081 -2195.9677 - 160 0.016 0.037686856 -21.520294 76.926428 -11094.793 -2196.2709 - 170 0.017 0.035334961 -22.359822 74.043181 -11430.247 -2196.5659 - 180 0.018 0.033026799 -23.181822 71.131269 -11752.268 -2196.8556 - 190 0.019 0.030775544 -23.986406 68.224204 -12065.774 -2197.1412 - 200 0.02 0.028597121 -24.773013 65.353995 -12372.712 -2197.4226 - 210 0.021 0.026511775 -25.540835 62.55053 -12672.055 -2197.6975 - 220 0.022 0.02454383 -26.289327 59.841288 -12961.112 -2197.9631 - 230 0.023 0.02271918 -27.018625 57.251361 -13237.544 -2198.2165 - 240 0.024 0.021061271 -27.729714 54.80373 -13501.028 -2198.4564 - 250 0.025 0.019587072 -28.42449 52.519717 -13754.325 -2198.6833 - 260 0.026 0.018304494 -29.105398 50.419388 -14002.718 -2198.8994 - 270 0.027 0.017211977 -29.775134 48.521812 -14253.089 -2199.1079 - 280 0.028 0.016300002 -30.436204 46.845075 -14512.437 -2199.3119 - 290 0.029 0.015553519 -31.090499 45.405985 -14786.53 -2199.5143 - 300 0.03 0.014954102 -31.739026 44.219544 -15079.165 -2199.7168 - 310 0.031 0.014481189 -32.381585 43.298175 -15391.531 -2199.9198 - 320 0.032 0.014112494 -33.016984 42.650874 -15722.828 -2200.1226 - 330 0.033 0.013824206 -33.643289 42.282535 -16070.874 -2200.324 - 340 0.034 0.013591568 -34.258323 42.19365 -16433.065 -2200.5226 - 350 0.035 0.013390035 -34.860184 42.380506 -16807.186 -2200.7174 - 360 0.036 0.01319679 -35.447655 42.835832 -17191.816 -2200.9077 - 370 0.037 0.012992271 -36.020512 43.549656 -17586.676 -2201.0935 - 380 0.038 0.012761486 -36.579332 44.510078 -17991.857 -2201.2754 - 390 0.039 0.012494918 -37.125414 45.703757 -18407.738 -2201.4538 - 400 0.04 0.0121888 -37.660321 47.115967 -18834.276 -2201.6292 - 410 0.041 0.011844474 -38.185489 48.730291 -19270.674 -2201.8019 - 420 0.042 0.011466715 -38.70192 50.528119 -19715.276 -2201.9716 - 430 0.043 0.011061388 -39.21005 52.488204 -20165.66 -2202.1377 - 440 0.044 0.010633241 -39.709778 54.586528 -20618.997 -2202.2998 - 450 0.045 0.010184696 -40.200724 56.79654 -21072.538 -2202.4571 - 460 0.046 0.0097161044 -40.682449 59.089699 -21523.873 -2202.6094 - 470 0.047 0.0092271788 -41.154614 61.436133 -21970.922 -2202.7565 - 480 0.048 0.0087187266 -41.617256 63.805414 -22412.32 -2202.8989 - 490 0.049 0.0081937768 -42.070708 66.167399 -22847.061 -2203.037 - 500 0.05 0.0076576327 -42.51563 68.493235 -23274.619 -2203.172 - 510 0.051 0.0071170477 -42.952841 70.756444 -23694.559 -2203.3046 - 520 0.052 0.006579078 -43.383338 72.933996 -24106.717 -2203.4358 - 530 0.053 0.006050144 -43.807962 75.007131 -24510.338 -2203.5662 - 540 0.054 0.0055354475 -44.227552 76.961803 -24904.495 -2203.6957 - 550 0.055 0.0050386503 -44.64268 78.788647 -25287.341 -2203.8241 - 560 0.056 0.0045617699 -45.053996 80.4825 -25657.11 -2203.9504 - 570 0.057 0.0041054334 -45.461923 82.041527 -26011.443 -2204.0737 - 580 0.058 0.003669689 -45.866895 83.466142 -26348.265 -2204.1931 - 590 0.059 0.0032553824 -46.269219 84.757926 -26665.834 -2204.3077 - 600 0.06 0.0028655752 -46.669125 85.918711 -26963.24 -2204.4173 - 610 0.061 0.0025060765 -47.066641 86.95 -27240.331 -2204.5218 - 620 0.062 0.0021839971 -47.461566 87.852838 -27497.728 -2204.6218 - 630 0.063 0.0019039581 -47.853462 88.628142 -27736.503 -2204.7177 - 640 0.064 0.0016633855 -48.241747 89.277364 -27957.91 -2204.81 - 650 0.065 0.0014502904 -48.625803 89.803307 -28163.11 -2204.899 - 660 0.066 0.0012463786 -49.005026 90.210807 -28352.881 -2204.9847 - 670 0.067 0.0010345087 -49.378935 90.507107 -28527.721 -2205.0668 - 680 0.068 0.00080788134 -49.747325 90.701795 -28688.395 -2205.1453 - 690 0.069 0.000586442 -50.110227 90.80636 -28836.094 -2205.22 - 700 0.07 0.00046855102 -50.467799 90.833539 -28972.361 -2205.2911 - 710 0.071 0.00061091693 -50.82044 90.796649 -29099.44 -2205.3592 - 720 0.072 0.00094960177 -51.168606 90.709122 -29219.676 -2205.4249 - 730 0.073 0.0013742455 -51.512913 90.584346 -29335.643 -2205.4887 - 740 0.074 0.0018397629 -51.853957 90.435783 -29449.521 -2205.5511 - 750 0.075 0.0023216474 -52.192407 90.277231 -29563.316 -2205.6124 - 760 0.076 0.0028000512 -52.528883 90.123061 -29678.726 -2205.6729 - 770 0.077 0.0032569295 -52.863859 89.98824 -29797.079 -2205.7329 - 780 0.078 0.0036765431 -53.197843 89.888047 -29919.964 -2205.7925 - 790 0.079 0.0040467094 -53.530921 89.837568 -30048.271 -2205.8521 - 800 0.08 0.0043597837 -53.862938 89.850978 -30182.622 -2205.9119 - 810 0.081 0.0046129296 -54.193489 89.940884 -30323.293 -2205.9718 - 820 0.082 0.0048076151 -54.522077 90.117797 -30470.468 -2206.0321 - 830 0.083 0.004948533 -54.84813 90.389814 -30624.056 -2206.0926 - 840 0.084 0.0050423324 -55.171024 90.762454 -30783.658 -2206.1532 - 850 0.085 0.0050965581 -55.490357 91.238681 -30949.141 -2206.2139 - 860 0.086 0.0051190641 -55.805904 91.818973 -31120.5 -2206.2745 - 870 0.087 0.0051180301 -56.117429 92.501449 -31297.412 -2206.3349 - 880 0.088 0.0051024116 -56.424751 93.281992 -31479.436 -2206.3949 - 890 0.089 0.005082454 -56.727832 94.154367 -31666.293 -2206.4544 - 900 0.09 0.0050697645 -57.026442 95.110386 -31857.043 -2206.513 - 910 0.091 0.0050765431 -57.320291 96.140056 -32050.436 -2206.5703 - 920 0.092 0.0051139309 -57.609075 97.231838 -32245.079 -2206.6257 - 930 0.093 0.0051899535 -57.89236 98.372982 -32439.141 -2206.6788 - 940 0.094 0.0053078572 -58.169742 99.54995 -32630.727 -2206.7288 - 950 0.095 0.0054654923 -58.44083 100.74893 -32817.882 -2206.7752 - 960 0.096 0.0056558757 -58.705483 101.95638 -32999.116 -2206.8176 - 970 0.097 0.0058685513 -58.963698 103.15953 -33173.159 -2206.8557 - 980 0.098 0.0060912487 -59.215624 104.34681 -33338.961 -2206.8893 - 990 0.099 0.0063114886 -59.461806 105.50819 -33496.345 -2206.9188 - 1000 0.1 0.0065179843 -59.702883 106.63524 -33645.259 -2206.9444 -Loop time of 5.20295 on 1 procs for 1000 steps with 500 atoms - -Performance: 1.661 ns/day, 14.453 hours/ns, 192.199 timesteps/s -100.0% CPU use with 1 MPI tasks x no OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 2.6241 | 2.6241 | 2.6241 | 0.0 | 50.43 -Neigh | 0.01424 | 0.01424 | 0.01424 | 0.0 | 0.27 -Comm | 0.041207 | 0.041207 | 0.041207 | 0.0 | 0.79 -Output | 0.0090086 | 0.0090086 | 0.0090086 | 0.0 | 0.17 -Modify | 2.5084 | 2.5084 | 2.5084 | 0.0 | 48.21 -Other | | 0.006008 | | | 0.12 - -Nlocal: 500 ave 500 max 500 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Nghost: 2442 ave 2442 max 2442 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Neighs: 27581 ave 27581 max 27581 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -FullNghs: 55162 ave 55162 max 55162 min -Histogram: 1 0 0 0 0 0 0 0 0 0 - -Total # of neighbors = 55162 -Ave neighs/atom = 110.324 -Neighbor list builds = 7 -Dangerous builds = 0 - -Please see the log.cite file for references relevant to this simulation - -Total wall time: 0:00:05 diff --git a/examples/SPIN/cobalt_hcp/log.19Nov19.spin.cobalt_hcp.g++.4 b/examples/SPIN/cobalt_hcp/log.19Nov19.spin.cobalt_hcp.g++.4 deleted file mode 100644 index de00d5be320fbd1d24663e2c1c303edcb428326c..0000000000000000000000000000000000000000 --- a/examples/SPIN/cobalt_hcp/log.19Nov19.spin.cobalt_hcp.g++.4 +++ /dev/null @@ -1,219 +0,0 @@ -LAMMPS (30 Oct 2019) -# hcp cobalt in a 3d periodic box - -clear -units metal -atom_style spin - -dimension 3 -boundary p p p - -# necessary for the serial algorithm (sametag) -atom_modify map array - -lattice hcp 2.5071 -Lattice spacing in x,y,z = 2.5071 4.34242 4.09408 -region box block 0.0 5.0 0.0 5.0 0.0 5.0 -create_box 1 box -Created orthogonal box = (0 0 0) to (12.5355 21.7121 20.4704) - 1 by 2 by 2 MPI processor grid -create_atoms 1 box -Created 500 atoms - create_atoms CPU = 0.00101995 secs - -# setting mass, mag. moments, and interactions for hcp cobalt - -mass 1 58.93 - -set group all spin/random 31 1.72 - 500 settings made for spin/random -#set group all spin 1.72 0.0 0.0 1.0 -velocity all create 100 4928459 rot yes dist gaussian - -#pair_style hybrid/overlay eam/alloy spin/exchange 4.0 spin/neel 4.0 -pair_style hybrid/overlay eam/alloy spin/exchange 4.0 -pair_coeff * * eam/alloy Co_PurjaPun_2012.eam.alloy Co -pair_coeff * * spin/exchange exchange 4.0 -0.3593 1.135028015e-05 1.064568567 -#pair_coeff * * spin/neel neel 4.0 0.0048 0.234 1.168 2.6905 0.705 0.652 - -neighbor 0.1 bin -neigh_modify every 10 check yes delay 20 - -#fix 1 all precession/spin zeeman 1.0 0.0 0.0 1.0 -fix 1 all precession/spin anisotropy 0.01 0.0 0.0 1.0 -#fix 2 all langevin/spin 0.0 0.0 21 -fix 2 all langevin/spin 0.0 0.1 21 -fix 3 all nve/spin lattice moving - -timestep 0.0001 - - -compute out_mag all spin -compute out_pe all pe -compute out_ke all ke -compute out_temp all temp - -variable magz equal c_out_mag[3] -variable magnorm equal c_out_mag[4] -variable emag equal c_out_mag[5] -variable tmag equal c_out_mag[6] - -thermo_style custom step time v_magnorm v_emag temp press etotal -thermo 10 - -compute outsp all property/atom spx spy spz sp fmx fmy fmz -dump 1 all custom 100 dump_cobalt_hcp.lammpstrj type x y z c_outsp[1] c_outsp[2] c_outsp[3] - -run 1000 -Neighbor list info ... - update every 10 steps, delay 20 steps, check yes - max neighbors/atom: 2000, page size: 100000 - master list distance cutoff = 6.59954 - ghost atom cutoff = 6.59954 - binsize = 3.29977, bins = 4 7 7 - 2 neighbor lists, perpetual/occasional/extra = 2 0 0 - (1) pair eam/alloy, perpetual, half/full from (2) - attributes: half, newton on - pair build: halffull/newton - stencil: none - bin: none - (2) pair spin/exchange, perpetual - attributes: full, newton on - pair build: full/bin/atomonly - stencil: full/bin/3d - bin: standard -Per MPI rank memory allocation (min/avg/max) = 7.814 | 7.814 | 7.815 Mbytes -Step Time v_magnorm v_emag Temp Press TotEng - 0 0 0.076558814 -5.1073764 100.00543 -552.75983 -2190.3478 - 10 0.001 0.074494512 -6.2728301 99.980769 -1570.0726 -2191.5261 - 20 0.002 0.072367013 -7.4259977 99.847801 -2531.5119 -2192.6655 - 30 0.003 0.070129365 -8.566306 99.586282 -3438.1309 -2193.7672 - 40 0.004 0.067761178 -9.6929189 99.171132 -4291.017 -2194.8323 - 50 0.005 0.065270916 -10.8048 98.575397 -5091.9111 -2195.8628 - 60 0.006 0.062690557 -11.900573 97.773618 -5843.4528 -2196.8612 - 70 0.007 0.060064592 -12.978381 96.745047 -6548.726 -2197.8306 - 80 0.008 0.05743694 -14.035923 95.476292 -7210.2954 -2198.773 - 90 0.009 0.054839883 -15.07074 93.963026 -7829.4252 -2199.689 - 100 0.01 0.052288504 -16.08066 92.210482 -8405.9983 -2200.5773 - 110 0.011 0.049782155 -17.064251 90.232741 -8939.3051 -2201.4357 - 120 0.012 0.047311759 -18.021135 88.051042 -9429.1353 -2202.2626 - 130 0.013 0.044869196 -18.952065 85.691573 -9876.5628 -2203.0575 - 140 0.014 0.042453961 -19.858739 83.18315 -10284.249 -2203.8215 - 150 0.015 0.040074171 -20.743348 80.555177 -10656.417 -2204.5569 - 160 0.016 0.037742459 -21.608 77.836156 -10998.818 -2205.2677 - 170 0.017 0.035470168 -22.454209 75.052994 -11318.525 -2205.9587 - 180 0.018 0.033263447 -23.282658 72.231211 -11623.118 -2206.6354 - 190 0.019 0.031122821 -24.093311 69.395936 -11919.248 -2207.3023 - 200 0.02 0.029045634 -24.88579 66.573223 -12211.306 -2207.9613 - 210 0.021 0.027029857 -25.659817 63.791041 -12500.812 -2208.6115 - 220 0.022 0.025077742 -26.415541 61.079413 -12787.018 -2209.2498 - 230 0.023 0.023198048 -27.153652 58.469604 -13068.277 -2209.8722 - 240 0.024 0.02140599 -27.875313 55.992687 -13343.621 -2210.4756 - 250 0.025 0.019720922 -28.581973 53.678031 -13613.86 -2211.0588 - 260 0.026 0.018162738 -29.275283 51.552191 -13882.15 -2211.6232 - 270 0.027 0.016748514 -29.956802 49.638467 -14153.137 -2212.1718 - 280 0.028 0.01549075 -30.628043 47.957071 -14432.246 -2212.7087 - 290 0.029 0.014397611 -31.290177 46.525552 -14724.005 -2213.2371 - 300 0.03 0.013474315 -31.943984 45.359085 -15031.315 -2213.759 - 310 0.031 0.012723957 -32.589853 44.47023 -15355.595 -2214.275 - 320 0.032 0.012146358 -33.227585 43.868153 -15696.845 -2214.7851 - 330 0.033 0.011734827 -33.856656 43.557623 -16054.887 -2215.289 - 340 0.034 0.011472508 -34.476313 43.538346 -16429.77 -2215.7871 - 350 0.035 0.011330772 -35.085716 43.805034 -16821.627 -2216.2802 - 360 0.036 0.011271169 -35.684147 44.348312 -17230.21 -2216.7687 - 370 0.037 0.01125027 -36.271215 45.156046 -17654.485 -2217.2524 - 380 0.038 0.011225354 -36.847053 46.214576 -18092.623 -2217.7301 - 390 0.039 0.011159026 -37.412284 47.509345 -18542.156 -2218.2003 - 400 0.04 0.011022073 -37.967916 49.024843 -19000.554 -2218.6614 - 410 0.041 0.01079477 -38.515123 50.744046 -19465.713 -2219.1128 - 420 0.042 0.010467095 -39.054921 52.647653 -19935.873 -2219.5544 - 430 0.043 0.010038219 -39.588034 54.713405 -20409.666 -2219.9869 - 440 0.044 0.0095155267 -40.114703 56.915658 -20885.556 -2220.4109 - 450 0.045 0.0089134996 -40.634722 59.225397 -21361.621 -2220.8268 - 460 0.046 0.0082528918 -41.147681 61.610799 -21835.762 -2221.2347 - 470 0.047 0.0075606723 -41.653088 64.038349 -22305.687 -2221.6343 - 480 0.048 0.0068707613 -42.150486 66.474377 -22768.948 -2222.0253 - 490 0.049 0.0062249854 -42.639704 68.886721 -23223.418 -2222.4076 - 500 0.05 0.0056723593 -43.120772 71.24617 -23667.077 -2222.7814 - 510 0.051 0.00526312 -43.59404 73.527392 -24098.459 -2223.147 - 520 0.052 0.0050342241 -44.059917 75.709206 -24516.163 -2223.5051 - 530 0.053 0.0049906301 -44.518898 77.774314 -24919.192 -2223.8564 - 540 0.054 0.0050976586 -44.971364 79.708763 -25306.611 -2224.2014 - 550 0.055 0.0052941974 -45.417577 81.501347 -25677.67 -2224.5405 - 560 0.056 0.0055157717 -45.857628 83.143173 -26031.673 -2224.8736 - 570 0.057 0.0057113414 -46.291426 84.627457 -26367.904 -2225.2003 - 580 0.058 0.0058493207 -46.718709 85.949497 -26685.6 -2225.52 - 590 0.059 0.0059162201 -47.139052 87.10679 -26984.124 -2225.8316 - 600 0.06 0.0059118584 -47.551892 88.099176 -27263.145 -2226.1347 - 610 0.061 0.005843747 -47.956571 88.928929 -27522.773 -2226.4287 - 620 0.062 0.0057222223 -48.352422 89.600763 -27763.549 -2226.7139 - 630 0.063 0.0055570967 -48.738876 90.12173 -27986.321 -2226.9905 - 640 0.064 0.0053558993 -49.115723 90.501081 -28192.238 -2227.2593 - 650 0.065 0.0051233209 -49.483122 90.750056 -28382.3 -2227.5205 - 660 0.066 0.0048614512 -49.841791 90.881635 -28557.623 -2227.7746 - 670 0.067 0.0045706003 -50.192974 90.910245 -28719.422 -2228.0219 - 680 0.068 0.0042506564 -50.538196 90.851397 -28868.809 -2228.2627 - 690 0.069 0.0039028575 -50.879364 90.721317 -29007.619 -2228.4973 - 700 0.07 0.0035319814 -51.218193 90.536521 -29137.623 -2228.7265 - 710 0.071 0.0031491486 -51.556251 90.313501 -29261.193 -2228.9511 - 720 0.072 0.0027758205 -51.894643 90.068503 -29380.924 -2229.1724 - 730 0.073 0.002449449 -52.233987 89.817462 -29499.606 -2229.3917 - 740 0.074 0.0022276613 -52.574465 89.57612 -29620.196 -2229.6103 - 750 0.075 0.0021767124 -52.915641 89.360246 -29744.882 -2229.829 - 760 0.076 0.0023310362 -53.256843 89.185838 -29875.573 -2230.0485 - 770 0.077 0.0026637349 -53.597197 89.069228 -30013.477 -2230.2685 - 780 0.078 0.0031129938 -53.93565 89.026943 -30158.812 -2230.4882 - 790 0.079 0.0036204667 -54.271339 89.075322 -30311.602 -2230.7066 - 800 0.08 0.0041448552 -54.603455 89.229912 -30471.244 -2230.9226 - 810 0.081 0.0046613106 -54.931421 89.504766 -30636.938 -2231.1352 - 820 0.082 0.0051580947 -55.255056 89.911726 -30808.087 -2231.3434 - 830 0.083 0.0056329652 -55.574491 90.459766 -30984.153 -2231.5469 - 840 0.084 0.0060893356 -55.890024 91.154456 -31164.372 -2231.7452 - 850 0.085 0.0065324419 -56.202052 91.997528 -31347.792 -2231.9379 - 860 0.086 0.0069661977 -56.511206 92.986622 -31533.977 -2232.1249 - 870 0.087 0.0073913051 -56.817814 94.115192 -31721.92 -2232.306 - 880 0.088 0.0078048547 -57.122061 95.372548 -31910.795 -2232.4809 - 890 0.089 0.008201165 -57.423984 96.744135 -32100.108 -2232.65 - 900 0.09 0.0085732702 -57.723377 98.212046 -32289.532 -2232.8136 - 910 0.091 0.0089144724 -58.019938 99.755667 -32479.154 -2232.9728 - 920 0.092 0.0092194916 -58.313266 101.35254 -32669.227 -2233.1285 - 930 0.093 0.0094849872 -58.602956 102.97932 -32860.091 -2233.2822 - 940 0.094 0.0097093572 -58.888668 104.61271 -33051.981 -2233.4348 - 950 0.095 0.0098920175 -59.169925 106.23045 -33244.279 -2233.5871 - 960 0.096 0.01003244 -59.44662 107.81212 -33436.562 -2233.7396 - 970 0.097 0.010129313 -59.718668 109.33976 -33627.714 -2233.8925 - 980 0.098 0.010180127 -59.986126 110.79823 -33816.218 -2234.0455 - 990 0.099 0.010181304 -60.24929 112.17528 -34000.522 -2234.1984 - 1000 0.1 0.01012881 -60.508632 113.46137 -34179.052 -2234.3508 -Loop time of 2.93788 on 4 procs for 1000 steps with 500 atoms - -Performance: 2.941 ns/day, 8.161 hours/ns, 340.381 timesteps/s -100.0% CPU use with 4 MPI tasks x no OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0.72349 | 0.73783 | 0.7554 | 1.3 | 25.11 -Neigh | 0.00353 | 0.0036981 | 0.0038559 | 0.2 | 0.13 -Comm | 0.12285 | 0.14476 | 0.16041 | 3.6 | 4.93 -Output | 0.0046515 | 0.0047909 | 0.0050418 | 0.2 | 0.16 -Modify | 2.0407 | 2.0439 | 2.0482 | 0.2 | 69.57 -Other | | 0.00288 | | | 0.10 - -Nlocal: 125 ave 136 max 119 min -Histogram: 1 1 1 0 0 0 0 0 0 1 -Nghost: 1324 ave 1331 max 1310 min -Histogram: 1 0 0 0 0 0 0 0 2 1 -Neighs: 6897.25 ave 7552 max 6604 min -Histogram: 2 1 0 0 0 0 0 0 0 1 -FullNghs: 13794.5 ave 15117 max 13164 min -Histogram: 2 0 1 0 0 0 0 0 0 1 - -Total # of neighbors = 55178 -Ave neighs/atom = 110.356 -Neighbor list builds = 7 -Dangerous builds = 0 - -Please see the log.cite file for references relevant to this simulation - -Total wall time: 0:00:02 diff --git a/examples/SPIN/dipole_spin/log.19Nov19.spin.iron_dipole_cut.g++.1 b/examples/SPIN/dipole_spin/log.14Apr20.spin.iron_dipole_cut.g++.1 similarity index 75% rename from examples/SPIN/dipole_spin/log.19Nov19.spin.iron_dipole_cut.g++.1 rename to examples/SPIN/dipole_spin/log.14Apr20.spin.iron_dipole_cut.g++.1 index c2af23d16773e899bf63ec83bfdd5a1cd8c47de6..db58eec01d1061cb904f6d0da4ed462f6fa6ec15 100644 --- a/examples/SPIN/dipole_spin/log.19Nov19.spin.iron_dipole_cut.g++.1 +++ b/examples/SPIN/dipole_spin/log.14Apr20.spin.iron_dipole_cut.g++.1 @@ -1,7 +1,11 @@ -LAMMPS (30 Oct 2019) +LAMMPS (19 Mar 2020) +OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (../comm.cpp:94) + using 1 OpenMP thread(s) per MPI task # bcc iron in a 3d periodic box clear +OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (../comm.cpp:94) + using 1 OpenMP thread(s) per MPI task units metal atom_style spin @@ -19,7 +23,7 @@ Created orthogonal box = (0 0 0) to (34.398 34.398 34.398) 1 by 1 by 1 MPI processor grid create_atoms 1 box Created 3456 atoms - create_atoms CPU = 0.000741005 secs + create_atoms CPU = 0.00106382 secs # setting mass, mag. moments, and interactions for bcc iron @@ -88,23 +92,23 @@ Neighbor list info ... bin: none Per MPI rank memory allocation (min/avg/max) = 13.4 | 13.4 | 13.4 Mbytes Step Time v_magx v_magy v_magz v_magnorm v_tmag v_emag PotEng TotEng - 0 0 -1 0 0 1 1.0737264e-35 -768.37511 -15175.868 -15131.207 - 50 0.005 -1 -2.7722752e-10 -2.1828666e-10 1 6.8846921e-09 -768.35793 -15174.244 -15131.215 - 100 0.01 -1 -2.0983066e-09 -1.7330951e-09 1 1.0038885e-08 -768.30868 -15169.656 -15131.24 -Loop time of 7.86359 on 1 procs for 100 steps with 3456 atoms + 0 0 -1 0 0 1 1.0737264e-35 -384.18755 -15175.868 -15131.207 + 50 0.005 -1 -2.7725069e-10 -2.182903e-10 1 6.8851185e-09 -384.17896 -15174.244 -15131.207 + 100 0.01 -1 -2.0990209e-09 -1.7332235e-09 1 1.0040825e-08 -384.15433 -15169.655 -15131.207 +Loop time of 7.47017 on 1 procs for 100 steps with 3456 atoms -Performance: 0.110 ns/day, 218.433 hours/ns, 12.717 timesteps/s -100.0% CPU use with 1 MPI tasks x no OpenMP threads +Performance: 0.116 ns/day, 207.505 hours/ns, 13.387 timesteps/s +99.9% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 3.6134 | 3.6134 | 3.6134 | 0.0 | 45.95 +Pair | 3.1998 | 3.1998 | 3.1998 | 0.0 | 42.83 Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 0.014062 | 0.014062 | 0.014062 | 0.0 | 0.18 -Output | 0.006057 | 0.006057 | 0.006057 | 0.0 | 0.08 -Modify | 4.226 | 4.226 | 4.226 | 0.0 | 53.74 -Other | | 0.004064 | | | 0.05 +Comm | 0.015094 | 0.015094 | 0.015094 | 0.0 | 0.20 +Output | 0.006531 | 0.006531 | 0.006531 | 0.0 | 0.09 +Modify | 4.2443 | 4.2443 | 4.2443 | 0.0 | 56.82 +Other | | 0.004467 | | | 0.06 Nlocal: 3456 ave 3456 max 3456 min Histogram: 1 0 0 0 0 0 0 0 0 0 diff --git a/examples/SPIN/dipole_spin/log.19Nov19.spin.iron_dipole_cut.g++.4 b/examples/SPIN/dipole_spin/log.14Apr20.spin.iron_dipole_cut.g++.4 similarity index 75% rename from examples/SPIN/dipole_spin/log.19Nov19.spin.iron_dipole_cut.g++.4 rename to examples/SPIN/dipole_spin/log.14Apr20.spin.iron_dipole_cut.g++.4 index 1f8157bb29a9f32f791e77c02e53928626895db8..a014aae3cd3b1c84ec7e8a5cd3cfbbd1602fe525 100644 --- a/examples/SPIN/dipole_spin/log.19Nov19.spin.iron_dipole_cut.g++.4 +++ b/examples/SPIN/dipole_spin/log.14Apr20.spin.iron_dipole_cut.g++.4 @@ -1,7 +1,11 @@ -LAMMPS (30 Oct 2019) +LAMMPS (19 Mar 2020) +OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (../comm.cpp:94) + using 1 OpenMP thread(s) per MPI task # bcc iron in a 3d periodic box clear +OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (../comm.cpp:94) + using 1 OpenMP thread(s) per MPI task units metal atom_style spin @@ -19,7 +23,7 @@ Created orthogonal box = (0 0 0) to (34.398 34.398 34.398) 1 by 2 by 2 MPI processor grid create_atoms 1 box Created 3456 atoms - create_atoms CPU = 0.00090003 secs + create_atoms CPU = 0.00132084 secs # setting mass, mag. moments, and interactions for bcc iron @@ -88,23 +92,23 @@ Neighbor list info ... bin: none Per MPI rank memory allocation (min/avg/max) = 9.217 | 9.217 | 9.217 Mbytes Step Time v_magx v_magy v_magz v_magnorm v_tmag v_emag PotEng TotEng - 0 0 -1 0 0 1 1.0737264e-35 -768.37511 -15560.055 -15515.394 - 50 0.005 -1 9.6204015e-11 -3.3767807e-10 1 6.6905249e-09 -768.35767 -15558.438 -15515.394 - 100 0.01 -1 7.8881609e-10 -2.7017321e-09 1 9.8111281e-09 -768.30769 -15553.868 -15515.394 -Loop time of 2.29116 on 4 procs for 100 steps with 3456 atoms + 0 0 -1 0 0 1 1.0737264e-35 -384.18755 -15175.868 -15131.207 + 50 0.005 -1 9.6205501e-11 -3.3769045e-10 1 6.6909444e-09 -384.17884 -15174.259 -15131.207 + 100 0.01 -1 7.8887025e-10 -2.7021386e-09 1 9.8130686e-09 -384.15383 -15169.712 -15131.207 +Loop time of 2.27865 on 4 procs for 100 steps with 3456 atoms -Performance: 0.377 ns/day, 63.643 hours/ns, 43.646 timesteps/s -99.9% CPU use with 4 MPI tasks x no OpenMP threads +Performance: 0.379 ns/day, 63.296 hours/ns, 43.886 timesteps/s +99.5% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 0.92259 | 0.92963 | 0.93393 | 0.4 | 40.57 +Pair | 0.80959 | 0.8184 | 0.82996 | 0.9 | 35.92 Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 0.02284 | 0.027597 | 0.035185 | 2.8 | 1.20 -Output | 0.0018489 | 0.0018544 | 0.0018642 | 0.0 | 0.08 -Modify | 1.3296 | 1.3303 | 1.3308 | 0.0 | 58.06 -Other | | 0.001818 | | | 0.08 +Comm | 0.035061 | 0.046857 | 0.055443 | 3.9 | 2.06 +Output | 0.0018592 | 0.0018642 | 0.0018783 | 0.0 | 0.08 +Modify | 1.4085 | 1.4095 | 1.41 | 0.1 | 61.86 +Other | | 0.002023 | | | 0.09 Nlocal: 864 ave 864 max 864 min Histogram: 4 0 0 0 0 0 0 0 0 0 diff --git a/examples/SPIN/dipole_spin/log.19Nov19.spin.iron_dipole_ewald.g++.1 b/examples/SPIN/dipole_spin/log.14Apr20.spin.iron_dipole_ewald.g++.1 similarity index 72% rename from examples/SPIN/dipole_spin/log.19Nov19.spin.iron_dipole_ewald.g++.1 rename to examples/SPIN/dipole_spin/log.14Apr20.spin.iron_dipole_ewald.g++.1 index 9a38445af5c112676ec020710edf5516e1b82769..f6c015bb20defef8915767cfe263ab3ac0c12b06 100644 --- a/examples/SPIN/dipole_spin/log.19Nov19.spin.iron_dipole_ewald.g++.1 +++ b/examples/SPIN/dipole_spin/log.14Apr20.spin.iron_dipole_ewald.g++.1 @@ -1,7 +1,11 @@ -LAMMPS (30 Oct 2019) +LAMMPS (19 Mar 2020) +OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (../comm.cpp:94) + using 1 OpenMP thread(s) per MPI task # bcc iron in a 3d periodic box clear +OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (../comm.cpp:94) + using 1 OpenMP thread(s) per MPI task units metal atom_style spin @@ -19,7 +23,7 @@ Created orthogonal box = (0 0 0) to (34.398 34.398 34.398) 1 by 1 by 1 MPI processor grid create_atoms 1 box Created 3456 atoms - create_atoms CPU = 0.00166988 secs + create_atoms CPU = 0.00187302 secs # setting mass, mag. moments, and interactions for bcc iron @@ -67,10 +71,10 @@ dump 1 all custom 100 dump_iron.lammpstrj type x y z c_outsp[1] c_outsp[2] c_o run 100 EwaldDipoleSpin initialization ... - using 12-bit tables for long-range coulomb (../kspace.cpp:323) + using 12-bit tables for long-range coulomb (../kspace.cpp:332) G vector (1/distance) = 0.324623 - estimated absolute RMS force accuracy = 9.55526e-84 - estimated relative force accuracy = 6.63576e-85 + estimated absolute RMS force accuracy = 1.69788e-59 + estimated relative force accuracy = 1.17911e-60 KSpace vectors: actual max1d max3d = 2084 10 4630 kxmax kymax kzmax = 10 10 10 Neighbor list info ... @@ -97,24 +101,24 @@ Neighbor list info ... bin: none Per MPI rank memory allocation (min/avg/max) = 30.07 | 30.07 | 30.07 Mbytes Step Time v_magx v_magy v_magz v_magnorm v_tmag v_emag PotEng TotEng - 0 0 -1 0 0 1 2.5872886e-37 -767.88567 -15175.39 -15130.729 - 50 0.005 -1 4.3660916e-09 -2.1918692e-09 1 5.3480999e-10 -767.86847 -15173.766 -15130.738 - 100 0.01 -1 9.9854966e-09 -4.2823677e-09 1 2.3267629e-09 -767.81917 -15169.178 -15130.762 -Loop time of 24.9345 on 1 procs for 100 steps with 3456 atoms + 0 0 -1 0 0 1 2.5872886e-37 -383.94283 -15175.635 -15130.974 + 50 0.005 -1 4.3660908e-09 -2.1918693e-09 1 5.3484784e-10 -383.93423 -15174.011 -15130.974 + 100 0.01 -1 9.9854743e-09 -4.282369e-09 1 2.3273467e-09 -383.90957 -15169.421 -15130.974 +Loop time of 24.8682 on 1 procs for 100 steps with 3456 atoms -Performance: 0.035 ns/day, 692.624 hours/ns, 4.011 timesteps/s -100.0% CPU use with 1 MPI tasks x no OpenMP threads +Performance: 0.035 ns/day, 690.783 hours/ns, 4.021 timesteps/s +100.0% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 4.8022 | 4.8022 | 4.8022 | 0.0 | 19.26 -Kspace | 10.337 | 10.337 | 10.337 | 0.0 | 41.46 +Pair | 4.6097 | 4.6097 | 4.6097 | 0.0 | 18.54 +Kspace | 10.303 | 10.303 | 10.303 | 0.0 | 41.43 Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 0.013856 | 0.013856 | 0.013856 | 0.0 | 0.06 -Output | 0.007138 | 0.007138 | 0.007138 | 0.0 | 0.03 -Modify | 9.7705 | 9.7705 | 9.7705 | 0.0 | 39.18 -Other | | 0.004077 | | | 0.02 +Comm | 0.015258 | 0.015258 | 0.015258 | 0.0 | 0.06 +Output | 0.006583 | 0.006583 | 0.006583 | 0.0 | 0.03 +Modify | 9.9285 | 9.9285 | 9.9285 | 0.0 | 39.92 +Other | | 0.004751 | | | 0.02 Nlocal: 3456 ave 3456 max 3456 min Histogram: 1 0 0 0 0 0 0 0 0 0 diff --git a/examples/SPIN/dipole_spin/log.19Nov19.spin.iron_dipole_ewald.g++.4 b/examples/SPIN/dipole_spin/log.14Apr20.spin.iron_dipole_ewald.g++.4 similarity index 72% rename from examples/SPIN/dipole_spin/log.19Nov19.spin.iron_dipole_ewald.g++.4 rename to examples/SPIN/dipole_spin/log.14Apr20.spin.iron_dipole_ewald.g++.4 index 306799f57651676e6de0729655d11ddc12a25b69..b70221f6031195133a27159fe75135a5f41ee716 100644 --- a/examples/SPIN/dipole_spin/log.19Nov19.spin.iron_dipole_ewald.g++.4 +++ b/examples/SPIN/dipole_spin/log.14Apr20.spin.iron_dipole_ewald.g++.4 @@ -1,7 +1,11 @@ -LAMMPS (30 Oct 2019) +LAMMPS (19 Mar 2020) +OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (../comm.cpp:94) + using 1 OpenMP thread(s) per MPI task # bcc iron in a 3d periodic box clear +OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (../comm.cpp:94) + using 1 OpenMP thread(s) per MPI task units metal atom_style spin @@ -19,7 +23,7 @@ Created orthogonal box = (0 0 0) to (34.398 34.398 34.398) 1 by 2 by 2 MPI processor grid create_atoms 1 box Created 3456 atoms - create_atoms CPU = 0.00088191 secs + create_atoms CPU = 0.000773907 secs # setting mass, mag. moments, and interactions for bcc iron @@ -67,10 +71,10 @@ dump 1 all custom 100 dump_iron.lammpstrj type x y z c_outsp[1] c_outsp[2] c_o run 100 EwaldDipoleSpin initialization ... - using 12-bit tables for long-range coulomb (../kspace.cpp:323) + using 12-bit tables for long-range coulomb (../kspace.cpp:332) G vector (1/distance) = 0.324623 - estimated absolute RMS force accuracy = 9.29828e-84 - estimated relative force accuracy = 6.4573e-85 + estimated absolute RMS force accuracy = 2.94041e-64 + estimated relative force accuracy = 2.042e-65 KSpace vectors: actual max1d max3d = 2084 10 4630 kxmax kymax kzmax = 10 10 10 Neighbor list info ... @@ -97,24 +101,24 @@ Neighbor list info ... bin: none Per MPI rank memory allocation (min/avg/max) = 25.89 | 25.89 | 25.89 Mbytes Step Time v_magx v_magy v_magz v_magnorm v_tmag v_emag PotEng TotEng - 0 0 -1 0 0 1 3.5107565e-37 -767.88567 -15559.577 -15514.916 - 50 0.005 -1 4.3196063e-09 -2.1966927e-09 1 5.1719577e-10 -767.86822 -15557.96 -15514.916 - 100 0.01 -1 9.7636593e-09 -4.3236953e-09 1 2.2443181e-09 -767.81819 -15553.39 -15514.916 -Loop time of 6.80139 on 4 procs for 100 steps with 3456 atoms + 0 0 -1 0 0 1 3.5107565e-37 -383.94283 -15175.635 -15130.974 + 50 0.005 -1 4.3196054e-09 -2.1966927e-09 1 5.1723249e-10 -383.93411 -15174.026 -15130.974 + 100 0.01 -1 9.7636345e-09 -4.3236965e-09 1 2.2448849e-09 -383.90908 -15169.479 -15130.974 +Loop time of 7.03264 on 4 procs for 100 steps with 3456 atoms -Performance: 0.127 ns/day, 188.927 hours/ns, 14.703 timesteps/s -100.0% CPU use with 4 MPI tasks x no OpenMP threads +Performance: 0.123 ns/day, 195.351 hours/ns, 14.219 timesteps/s +99.9% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 1.248 | 1.2649 | 1.2816 | 1.1 | 18.60 -Kspace | 2.523 | 2.5743 | 2.6505 | 3.0 | 37.85 +Pair | 1.1743 | 1.207 | 1.2416 | 2.2 | 17.16 +Kspace | 2.6173 | 2.6542 | 2.7273 | 2.7 | 37.74 Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 0.029461 | 0.087268 | 0.13754 | 13.0 | 1.28 -Output | 0.0018618 | 0.001869 | 0.0018811 | 0.0 | 0.03 -Modify | 2.8692 | 2.8709 | 2.8741 | 0.1 | 42.21 -Other | | 0.002119 | | | 0.03 +Comm | 0.042837 | 0.11362 | 0.1882 | 16.9 | 1.62 +Output | 0.0018778 | 0.0018882 | 0.0019088 | 0.0 | 0.03 +Modify | 3.0484 | 3.0535 | 3.0606 | 0.3 | 43.42 +Other | | 0.002387 | | | 0.03 Nlocal: 864 ave 864 max 864 min Histogram: 4 0 0 0 0 0 0 0 0 0 @@ -132,4 +136,4 @@ Dangerous builds = 0 Please see the log.cite file for references relevant to this simulation -Total wall time: 0:00:06 +Total wall time: 0:00:07 diff --git a/examples/SPIN/dipole_spin/log.19Nov19.spin.iron_dipole_pppm.g++.1 b/examples/SPIN/dipole_spin/log.14Apr20.spin.iron_dipole_pppm.g++.1 similarity index 77% rename from examples/SPIN/dipole_spin/log.19Nov19.spin.iron_dipole_pppm.g++.1 rename to examples/SPIN/dipole_spin/log.14Apr20.spin.iron_dipole_pppm.g++.1 index b0e87d786d70a634276f9b92d1b70f8eecfad26a..3b2c36b40cf9774fc813d4a7a18edd13bfff00f6 100644 --- a/examples/SPIN/dipole_spin/log.19Nov19.spin.iron_dipole_pppm.g++.1 +++ b/examples/SPIN/dipole_spin/log.14Apr20.spin.iron_dipole_pppm.g++.1 @@ -1,7 +1,11 @@ -LAMMPS (30 Oct 2019) +LAMMPS (19 Mar 2020) +OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (../comm.cpp:94) + using 1 OpenMP thread(s) per MPI task # bcc iron in a 3d periodic box clear +OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (../comm.cpp:94) + using 1 OpenMP thread(s) per MPI task units metal atom_style spin @@ -19,7 +23,7 @@ Created orthogonal box = (0 0 0) to (34.398 34.398 34.398) 1 by 1 by 1 MPI processor grid create_atoms 1 box Created 3456 atoms - create_atoms CPU = 0.00166583 secs + create_atoms CPU = 0.00192595 secs # setting mass, mag. moments, and interactions for bcc iron @@ -99,24 +103,24 @@ Neighbor list info ... bin: none Per MPI rank memory allocation (min/avg/max) = 16.27 | 16.27 | 16.27 Mbytes Step Time v_magx v_magy v_magz v_magnorm v_tmag v_emag PotEng TotEng - 0 0 -1 0 0 1 3.7996771e-37 -767.89759 -15175.402 -15130.741 - 50 0.005 -1 3.6585337e-09 -1.9445403e-09 1 5.1405121e-10 -767.88039 -15173.779 -15130.75 - 100 0.01 -1 7.3585728e-09 -3.8640878e-09 1 2.0194927e-09 -767.83109 -15169.191 -15130.774 -Loop time of 15.3615 on 1 procs for 100 steps with 3456 atoms + 0 0 -1 0 0 1 3.7996771e-37 -383.94879 -15175.641 -15130.98 + 50 0.005 -1 3.6585337e-09 -1.9445403e-09 1 5.1408909e-10 -383.94019 -15174.017 -15130.98 + 100 0.01 -1 7.3585736e-09 -3.8640869e-09 1 2.0200831e-09 -383.91553 -15169.428 -15130.98 +Loop time of 15.1465 on 1 procs for 100 steps with 3456 atoms -Performance: 0.056 ns/day, 426.709 hours/ns, 6.510 timesteps/s -99.9% CPU use with 1 MPI tasks x no OpenMP threads +Performance: 0.057 ns/day, 420.737 hours/ns, 6.602 timesteps/s +100.0% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 4.8418 | 4.8418 | 4.8418 | 0.0 | 31.52 -Kspace | 0.66626 | 0.66626 | 0.66626 | 0.0 | 4.34 +Pair | 4.6008 | 4.6008 | 4.6008 | 0.0 | 30.38 +Kspace | 0.65995 | 0.65995 | 0.65995 | 0.0 | 4.36 Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 0.014248 | 0.014248 | 0.014248 | 0.0 | 0.09 -Output | 0.0064788 | 0.0064788 | 0.0064788 | 0.0 | 0.04 -Modify | 9.8279 | 9.8279 | 9.8279 | 0.0 | 63.98 -Other | | 0.00478 | | | 0.03 +Comm | 0.01495 | 0.01495 | 0.01495 | 0.0 | 0.10 +Output | 0.0065951 | 0.0065951 | 0.0065951 | 0.0 | 0.04 +Modify | 9.8589 | 9.8589 | 9.8589 | 0.0 | 65.09 +Other | | 0.005332 | | | 0.04 Nlocal: 3456 ave 3456 max 3456 min Histogram: 1 0 0 0 0 0 0 0 0 0 diff --git a/examples/SPIN/dipole_spin/log.19Nov19.spin.iron_dipole_pppm.g++.4 b/examples/SPIN/dipole_spin/log.14Apr20.spin.iron_dipole_pppm.g++.4 similarity index 76% rename from examples/SPIN/dipole_spin/log.19Nov19.spin.iron_dipole_pppm.g++.4 rename to examples/SPIN/dipole_spin/log.14Apr20.spin.iron_dipole_pppm.g++.4 index 4fbd0eb52b77b526dd571705cd2638775603f963..1c3394dfbf0c923899cc0d3ef618ceb9e5747878 100644 --- a/examples/SPIN/dipole_spin/log.19Nov19.spin.iron_dipole_pppm.g++.4 +++ b/examples/SPIN/dipole_spin/log.14Apr20.spin.iron_dipole_pppm.g++.4 @@ -1,7 +1,11 @@ -LAMMPS (30 Oct 2019) +LAMMPS (19 Mar 2020) +OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (../comm.cpp:94) + using 1 OpenMP thread(s) per MPI task # bcc iron in a 3d periodic box clear +OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (../comm.cpp:94) + using 1 OpenMP thread(s) per MPI task units metal atom_style spin @@ -19,7 +23,7 @@ Created orthogonal box = (0 0 0) to (34.398 34.398 34.398) 1 by 2 by 2 MPI processor grid create_atoms 1 box Created 3456 atoms - create_atoms CPU = 0.00123286 secs + create_atoms CPU = 0.0007658 secs # setting mass, mag. moments, and interactions for bcc iron @@ -99,24 +103,24 @@ Neighbor list info ... bin: none Per MPI rank memory allocation (min/avg/max) = 10.42 | 10.42 | 10.42 Mbytes Step Time v_magx v_magy v_magz v_magnorm v_tmag v_emag PotEng TotEng - 0 0 -1 0 0 1 2.3173191e-37 -767.89759 -15559.59 -15514.929 - 50 0.005 -1 3.6593054e-09 -1.9379563e-09 1 4.9747018e-10 -767.88014 -15557.972 -15514.929 - 100 0.01 -1 7.3731919e-09 -3.8151563e-09 1 1.9544299e-09 -767.8301 -15553.402 -15514.929 -Loop time of 4.4084 on 4 procs for 100 steps with 3456 atoms + 0 0 -1 0 0 1 2.3173191e-37 -383.94879 -15175.641 -15130.98 + 50 0.005 -1 3.6593053e-09 -1.9379563e-09 1 4.9750695e-10 -383.94007 -15174.032 -15130.98 + 100 0.01 -1 7.3731899e-09 -3.8151552e-09 1 1.9550037e-09 -383.91504 -15169.485 -15130.98 +Loop time of 4.3717 on 4 procs for 100 steps with 3456 atoms -Performance: 0.196 ns/day, 122.455 hours/ns, 22.684 timesteps/s -100.0% CPU use with 4 MPI tasks x no OpenMP threads +Performance: 0.198 ns/day, 121.436 hours/ns, 22.874 timesteps/s +100.0% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 1.2326 | 1.2513 | 1.2693 | 1.3 | 28.38 -Kspace | 0.22823 | 0.24585 | 0.26385 | 2.8 | 5.58 +Pair | 1.1624 | 1.1869 | 1.2125 | 1.8 | 27.15 +Kspace | 0.24468 | 0.26758 | 0.29157 | 3.6 | 6.12 Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 0.025352 | 0.028409 | 0.032299 | 1.6 | 0.64 -Output | 0.001868 | 0.0018761 | 0.0018861 | 0.0 | 0.04 -Modify | 2.8753 | 2.8788 | 2.8818 | 0.1 | 65.30 -Other | | 0.002175 | | | 0.05 +Comm | 0.027149 | 0.030758 | 0.033902 | 1.7 | 0.70 +Output | 0.0030079 | 0.0030248 | 0.0030622 | 0.0 | 0.07 +Modify | 2.8782 | 2.8806 | 2.8837 | 0.1 | 65.89 +Other | | 0.002793 | | | 0.06 Nlocal: 864 ave 864 max 864 min Histogram: 4 0 0 0 0 0 0 0 0 0 diff --git a/examples/SPIN/iron/in.spin.iron b/examples/SPIN/iron/in.spin.iron index d60e6b86f5fb0626fcd5b473cc7ee435dc133548..58c0537af786a8004dc72258e62a50fcfefa24f0 100644 --- a/examples/SPIN/iron/in.spin.iron +++ b/examples/SPIN/iron/in.spin.iron @@ -31,6 +31,7 @@ neighbor 0.1 bin neigh_modify every 10 check yes delay 20 fix 1 all precession/spin zeeman 0.0 0.0 0.0 1.0 +fix_modify 1 energy yes fix 2 all langevin/spin 0.0 0.0 21 fix 3 all nve/spin lattice moving diff --git a/examples/SPIN/iron/log.14Apr20.spin.iron.g++.1 b/examples/SPIN/iron/log.14Apr20.spin.iron.g++.1 new file mode 100644 index 0000000000000000000000000000000000000000..0f3257bc0546a990ddd9d90821310ca2a9f1f388 --- /dev/null +++ b/examples/SPIN/iron/log.14Apr20.spin.iron.g++.1 @@ -0,0 +1,141 @@ +LAMMPS (19 Mar 2020) +OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (../comm.cpp:94) + using 1 OpenMP thread(s) per MPI task +# bcc iron in a 3d periodic box + +clear +OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (../comm.cpp:94) + using 1 OpenMP thread(s) per MPI task +units metal +atom_style spin + +dimension 3 +boundary p p p + +# necessary for the serial algorithm (sametag) +atom_modify map array + +lattice bcc 2.8665 +Lattice spacing in x,y,z = 2.8665 2.8665 2.8665 +region box block 0.0 5.0 0.0 5.0 0.0 5.0 +create_box 1 box +Created orthogonal box = (0 0 0) to (14.3325 14.3325 14.3325) + 1 by 1 by 1 MPI processor grid +create_atoms 1 box +Created 250 atoms + create_atoms CPU = 0.00103498 secs + +# setting mass, mag. moments, and interactions for bcc iron + +mass 1 55.845 + +set group all spin/random 31 2.2 + 250 settings made for spin/random +# set group all spin 2.2 0.0 0.0 1.0 +velocity all create 100 4928459 rot yes dist gaussian + +pair_style hybrid/overlay eam/alloy spin/exchange 3.5 +pair_coeff * * eam/alloy Fe_Mishin2006.eam.alloy Fe +pair_coeff * * spin/exchange exchange 3.4 0.02726 0.2171 1.841 + +neighbor 0.1 bin +neigh_modify every 10 check yes delay 20 + +fix 1 all precession/spin zeeman 0.0 0.0 0.0 1.0 +fix_modify 1 energy yes +fix 2 all langevin/spin 0.0 0.0 21 + +fix 3 all nve/spin lattice moving +timestep 0.0001 + +# compute and output options + +compute out_mag all spin +compute out_pe all pe +compute out_ke all ke +compute out_temp all temp + +variable magz equal c_out_mag[3] +variable magnorm equal c_out_mag[4] +variable emag equal c_out_mag[5] +variable tmag equal c_out_mag[6] + +thermo_style custom step time v_magnorm v_tmag temp v_emag ke pe press etotal +thermo 50 + +compute outsp all property/atom spx spy spz sp fmx fmy fmz +dump 1 all custom 100 dump_iron.lammpstrj type x y z c_outsp[1] c_outsp[2] c_outsp[3] + +run 1000 +Neighbor list info ... + update every 10 steps, delay 20 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 5.77337 + ghost atom cutoff = 5.77337 + binsize = 2.88668, bins = 5 5 5 + 2 neighbor lists, perpetual/occasional/extra = 2 0 0 + (1) pair eam/alloy, perpetual, half/full from (2) + attributes: half, newton on + pair build: halffull/newton + stencil: none + bin: none + (2) pair spin/exchange, perpetual + attributes: full, newton on + pair build: full/bin/atomonly + stencil: full/bin/3d + bin: standard +Per MPI rank memory allocation (min/avg/max) = 7.82 | 7.82 | 7.82 Mbytes +Step Time v_magnorm v_tmag Temp v_emag KinEng PotEng Press TotEng + 0 0 0.076456975 4554.5462 100.00358 -0.42895634 3.2186929 -1070.429 394.43342 -1067.2103 + 50 0.005 0.076456974 4671.3033 96.520068 -0.43128393 3.1065733 -1070.3169 707.2166 -1067.2103 + 100 0.01 0.076456983 4793.2674 86.525198 -0.43550567 2.7848806 -1069.9952 1456.8628 -1067.2103 + 150 0.015 0.076456973 4894.1924 71.664875 -0.44035101 2.3065896 -1069.5169 2510.4447 -1067.2103 + 200 0.02 0.076456944 4859.9379 54.610496 -0.44591875 1.7576812 -1068.968 3686.7124 -1067.2103 + 250 0.025 0.076456953 4636.3427 38.560198 -0.45258831 1.2410899 -1068.4514 4757.3215 -1067.2103 + 300 0.03 0.076457027 4333.5734 26.459387 -0.45961266 0.85161592 -1068.0619 5505.1963 -1067.2103 + 350 0.035 0.076457102 4124.1453 20.205123 -0.46569388 0.65031758 -1067.8606 5768.9329 -1067.2103 + 400 0.04 0.076457116 4064.6843 20.142986 -0.47038245 0.64831763 -1067.8586 5521.4162 -1067.2103 + 450 0.045 0.076457072 4076.2576 25.084719 -0.4741092 0.80737114 -1068.0176 4890.8714 -1067.2103 + 500 0.05 0.076457001 4105.5788 32.863873 -0.47765283 1.0577493 -1068.268 4093.2603 -1067.2103 + 550 0.055 0.076456962 4109.0613 41.126745 -0.48188168 1.3236962 -1068.534 3337.5111 -1067.2103 + 600 0.06 0.076456996 3993.3891 47.996188 -0.48790867 1.5447946 -1068.7551 2767.4353 -1067.2103 + 650 0.065 0.076457077 3776.2342 52.386407 -0.49621451 1.6860972 -1068.8964 2458.9058 -1067.2103 + 700 0.07 0.076457137 3586.7963 54.031337 -0.50582777 1.7390405 -1068.9493 2397.5333 -1067.2103 + 750 0.075 0.076457135 3535.1994 53.389736 -0.51542639 1.7183901 -1068.9287 2514.1889 -1067.2103 + 800 0.08 0.076457118 3585.6546 51.428399 -0.52423597 1.6552629 -1068.8655 2732.6669 -1067.2103 + 850 0.085 0.076457118 3634.4891 49.293001 -0.53165471 1.5865335 -1068.7968 2977.6259 -1067.2103 + 900 0.09 0.076457126 3660.3333 47.999274 -0.53780479 1.5448939 -1068.7552 3176.4112 -1067.2103 + 950 0.095 0.076457129 3671.3259 48.180409 -0.54376787 1.5507239 -1068.761 3283.2242 -1067.2103 + 1000 0.1 0.076457139 3628.6038 49.917341 -0.55029097 1.6066284 -1068.8169 3283.2361 -1067.2103 +Loop time of 1.66624 on 1 procs for 1000 steps with 250 atoms + +Performance: 5.185 ns/day, 4.628 hours/ns, 600.152 timesteps/s +99.7% CPU use with 1 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.73884 | 0.73884 | 0.73884 | 0.0 | 44.34 +Neigh | 0.0045731 | 0.0045731 | 0.0045731 | 0.0 | 0.27 +Comm | 0.023681 | 0.023681 | 0.023681 | 0.0 | 1.42 +Output | 0.0042441 | 0.0042441 | 0.0042441 | 0.0 | 0.25 +Modify | 0.89131 | 0.89131 | 0.89131 | 0.0 | 53.49 +Other | | 0.003589 | | | 0.22 + +Nlocal: 250 ave 250 max 250 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 1407 ave 1407 max 1407 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Neighs: 7868 ave 7868 max 7868 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +FullNghs: 15736 ave 15736 max 15736 min +Histogram: 1 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 15736 +Ave neighs/atom = 62.944 +Neighbor list builds = 6 +Dangerous builds = 0 + +Please see the log.cite file for references relevant to this simulation + +Total wall time: 0:00:01 diff --git a/examples/SPIN/iron/log.14Apr20.spin.iron.g++.4 b/examples/SPIN/iron/log.14Apr20.spin.iron.g++.4 new file mode 100644 index 0000000000000000000000000000000000000000..1cfa74559ba6f15a3491bd9d8108108645ec42ad --- /dev/null +++ b/examples/SPIN/iron/log.14Apr20.spin.iron.g++.4 @@ -0,0 +1,141 @@ +LAMMPS (19 Mar 2020) +OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (../comm.cpp:94) + using 1 OpenMP thread(s) per MPI task +# bcc iron in a 3d periodic box + +clear +OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (../comm.cpp:94) + using 1 OpenMP thread(s) per MPI task +units metal +atom_style spin + +dimension 3 +boundary p p p + +# necessary for the serial algorithm (sametag) +atom_modify map array + +lattice bcc 2.8665 +Lattice spacing in x,y,z = 2.8665 2.8665 2.8665 +region box block 0.0 5.0 0.0 5.0 0.0 5.0 +create_box 1 box +Created orthogonal box = (0 0 0) to (14.3325 14.3325 14.3325) + 1 by 2 by 2 MPI processor grid +create_atoms 1 box +Created 250 atoms + create_atoms CPU = 0.000688791 secs + +# setting mass, mag. moments, and interactions for bcc iron + +mass 1 55.845 + +set group all spin/random 31 2.2 + 250 settings made for spin/random +# set group all spin 2.2 0.0 0.0 1.0 +velocity all create 100 4928459 rot yes dist gaussian + +pair_style hybrid/overlay eam/alloy spin/exchange 3.5 +pair_coeff * * eam/alloy Fe_Mishin2006.eam.alloy Fe +pair_coeff * * spin/exchange exchange 3.4 0.02726 0.2171 1.841 + +neighbor 0.1 bin +neigh_modify every 10 check yes delay 20 + +fix 1 all precession/spin zeeman 0.0 0.0 0.0 1.0 +fix_modify 1 energy yes +fix 2 all langevin/spin 0.0 0.0 21 + +fix 3 all nve/spin lattice moving +timestep 0.0001 + +# compute and output options + +compute out_mag all spin +compute out_pe all pe +compute out_ke all ke +compute out_temp all temp + +variable magz equal c_out_mag[3] +variable magnorm equal c_out_mag[4] +variable emag equal c_out_mag[5] +variable tmag equal c_out_mag[6] + +thermo_style custom step time v_magnorm v_tmag temp v_emag ke pe press etotal +thermo 50 + +compute outsp all property/atom spx spy spz sp fmx fmy fmz +dump 1 all custom 100 dump_iron.lammpstrj type x y z c_outsp[1] c_outsp[2] c_outsp[3] + +run 1000 +Neighbor list info ... + update every 10 steps, delay 20 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 5.77337 + ghost atom cutoff = 5.77337 + binsize = 2.88668, bins = 5 5 5 + 2 neighbor lists, perpetual/occasional/extra = 2 0 0 + (1) pair eam/alloy, perpetual, half/full from (2) + attributes: half, newton on + pair build: halffull/newton + stencil: none + bin: none + (2) pair spin/exchange, perpetual + attributes: full, newton on + pair build: full/bin/atomonly + stencil: full/bin/3d + bin: standard +Per MPI rank memory allocation (min/avg/max) = 7.766 | 7.766 | 7.766 Mbytes +Step Time v_magnorm v_tmag Temp v_emag KinEng PotEng Press TotEng + 0 0 0.076456975 4554.5462 100.00358 -0.42895634 3.2186929 -1070.429 394.43342 -1067.2103 + 50 0.005 0.076456995 4714.366 96.279315 -0.42705836 3.0988245 -1070.3091 714.16563 -1067.2103 + 100 0.01 0.076457028 4844.7708 86.007787 -0.43034795 2.7682274 -1069.9785 1479.8537 -1067.2103 + 150 0.015 0.076457073 4938.5943 70.888778 -0.43554708 2.2816103 -1069.4919 2538.6386 -1067.2103 + 200 0.02 0.076457107 4910.2627 53.612031 -0.44069391 1.7255448 -1068.9358 3702.0713 -1067.2103 + 250 0.025 0.07645713 4705.3075 37.374184 -0.44525189 1.2029171 -1068.4132 4749.8323 -1067.2103 + 300 0.03 0.076457162 4418.4389 25.117093 -0.44873668 0.80841314 -1068.0187 5473.2266 -1067.2103 + 350 0.035 0.07645722 4233.0963 18.792985 -0.45135838 0.60486682 -1067.8151 5710.4039 -1067.2103 + 400 0.04 0.07645726 4204.002 18.876267 -0.4546575 0.60754729 -1067.8178 5437.712 -1067.2103 + 450 0.045 0.076457242 4221.8277 24.290539 -0.45989731 0.78180986 -1067.9921 4788.1384 -1067.2103 + 500 0.05 0.076457208 4226.337 32.849365 -0.46668115 1.0572823 -1068.2676 3961.2587 -1067.2103 + 550 0.055 0.076457211 4195.1414 42.028524 -0.47379263 1.3527207 -1068.563 3159.4718 -1067.2103 + 600 0.06 0.076457222 4043.6401 49.722783 -0.48155951 1.6003664 -1068.8106 2554.4057 -1067.2103 + 650 0.065 0.07645721 3784.8692 54.624328 -0.49066003 1.7581264 -1068.9684 2266.0816 -1067.2103 + 700 0.07 0.076457187 3576.7472 56.274292 -0.49932577 1.8112318 -1069.0215 2298.3908 -1067.2103 + 750 0.075 0.07645717 3531.6724 55.083486 -0.50591093 1.7729047 -1068.9832 2557.6667 -1067.2103 + 800 0.08 0.076457176 3593.0894 52.172747 -0.51103604 1.6792204 -1068.8895 2933.0411 -1067.2103 + 850 0.085 0.076457206 3688.4988 48.957423 -0.51573858 1.5757327 -1068.786 3313.8291 -1067.2103 + 900 0.09 0.076457231 3788.943 46.719714 -0.52043742 1.5037103 -1068.714 3600.8734 -1067.2103 + 950 0.095 0.076457251 3854.0552 46.272425 -0.52460019 1.4893139 -1068.6996 3718.2987 -1067.2103 + 1000 0.1 0.076457302 3859.0984 47.806309 -0.52719778 1.5386831 -1068.749 3641.2287 -1067.2103 +Loop time of 1.55258 on 4 procs for 1000 steps with 250 atoms + +Performance: 5.565 ns/day, 4.313 hours/ns, 644.089 timesteps/s +99.8% CPU use with 4 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.2109 | 0.21798 | 0.22568 | 1.1 | 14.04 +Neigh | 0.0011308 | 0.0011812 | 0.0012279 | 0.1 | 0.08 +Comm | 0.074407 | 0.082247 | 0.090297 | 2.0 | 5.30 +Output | 0.0019011 | 0.0019355 | 0.0020187 | 0.1 | 0.12 +Modify | 1.2468 | 1.2477 | 1.249 | 0.1 | 80.36 +Other | | 0.001532 | | | 0.10 + +Nlocal: 62.5 ave 66 max 60 min +Histogram: 1 1 0 0 0 1 0 0 0 1 +Nghost: 846.25 ave 861 max 831 min +Histogram: 1 0 1 0 0 0 0 1 0 1 +Neighs: 1962.25 ave 2091 max 1866 min +Histogram: 1 0 0 2 0 0 0 0 0 1 +FullNghs: 3924.5 ave 4138 max 3771 min +Histogram: 1 1 0 0 0 1 0 0 0 1 + +Total # of neighbors = 15698 +Ave neighs/atom = 62.792 +Neighbor list builds = 6 +Dangerous builds = 0 + +Please see the log.cite file for references relevant to this simulation + +Total wall time: 0:00:01 diff --git a/examples/SPIN/iron/log.19Nov19.spin.iron_cubic.g++.1 b/examples/SPIN/iron/log.14Apr20.spin.iron_cubic.g++.1 similarity index 65% rename from examples/SPIN/iron/log.19Nov19.spin.iron_cubic.g++.1 rename to examples/SPIN/iron/log.14Apr20.spin.iron_cubic.g++.1 index 22957c84984cf14d31cff1626ee7a5bca9eca688..5d07f1b71a5dbeebadd3433a3cd0f78d6c7d7a46 100644 --- a/examples/SPIN/iron/log.19Nov19.spin.iron_cubic.g++.1 +++ b/examples/SPIN/iron/log.14Apr20.spin.iron_cubic.g++.1 @@ -1,7 +1,11 @@ -LAMMPS (30 Oct 2019) +LAMMPS (19 Mar 2020) +OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (../comm.cpp:94) + using 1 OpenMP thread(s) per MPI task # bcc iron in a 3d periodic box clear +OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (../comm.cpp:94) + using 1 OpenMP thread(s) per MPI task units metal atom_style spin @@ -19,7 +23,7 @@ Created orthogonal box = (0 0 0) to (14.3325 14.3325 14.3325) 1 by 1 by 1 MPI processor grid create_atoms 1 box Created 250 atoms - create_atoms CPU = 0.00101709 secs + create_atoms CPU = 0.000530005 secs # setting mass, mag. moments, and interactions for bcc iron @@ -81,53 +85,53 @@ Neighbor list info ... bin: standard Per MPI rank memory allocation (min/avg/max) = 7.82 | 7.82 | 7.82 Mbytes Step Time v_magx v_magy v_magz v_magnorm v_tmag v_emag PotEng TotEng - 0 0 -1 0 0 1 0 -55.58269 -1097.7914 -1094.5727 - 50 0.005 -1 0 0 1 0 -55.581417 -1097.6764 -1094.5733 - 100 0.01 -1 0 0 1 0 -55.577759 -1097.35 -1094.5751 - 150 0.015 -1 0 0 1 0 -55.57219 -1096.8677 -1094.5779 - 200 0.02 -1 0 0 1 0 -55.565438 -1096.3163 -1094.5813 - 250 0.025 -1 0 0 1 0 -55.558379 -1095.7987 -1094.5848 - 300 0.03 -1 0 0 1 0 -55.551886 -1095.4103 -1094.5881 - 350 0.035 -1 0 0 1 0 -55.546675 -1095.2124 -1094.5907 - 400 0.04 -1 0 0 1 0 -55.543187 -1095.2153 -1094.5924 - 450 0.045 -1 0 0 1 0 -55.54154 -1095.379 -1094.5932 - 500 0.05 -1 0 0 1 0 -55.541574 -1095.633 -1094.5932 - 550 0.055 -1 0 0 1 0 -55.542941 -1095.9006 -1094.5925 - 600 0.06 -1 0 0 1 0 -55.545209 -1096.1205 -1094.5914 - 650 0.065 -1 0 0 1 0 -55.547951 -1096.2575 -1094.59 - 700 0.07 -1 0 0 1 0 -55.550801 -1096.3044 -1094.5886 - 750 0.075 -1 0 0 1 0 -55.553483 -1096.2778 -1094.5873 - 800 0.08 -1 0 0 1 0 -55.555816 -1096.2098 -1094.5861 - 850 0.085 -1 0 0 1 0 -55.557706 -1096.1372 -1094.5852 - 900 0.09 -1 0 0 1 0 -55.55913 -1096.0919 -1094.5844 - 950 0.095 -1 0 0 1 0 -55.560111 -1096.0925 -1094.584 - 1000 0.1 -1 0 0 1 0 -55.560705 -1096.1411 -1094.5837 -Loop time of 1.74825 on 1 procs for 1000 steps with 250 atoms - -Performance: 4.942 ns/day, 4.856 hours/ns, 571.999 timesteps/s -100.0% CPU use with 1 MPI tasks x no OpenMP threads + 0 0 -1 0 0 1 0 -27.791345 -1097.7914 -1094.5727 + 50 0.005 -1 0 0 1 0 -27.790708 -1097.6764 -1094.5727 + 100 0.01 -1 0 0 1 0 -27.788879 -1097.3499 -1094.5727 + 150 0.015 -1 0 0 1 0 -27.78609 -1096.8672 -1094.5727 + 200 0.02 -1 0 0 1 0 -27.782705 -1096.3147 -1094.5727 + 250 0.025 -1 0 0 1 0 -27.779157 -1095.7952 -1094.5727 + 300 0.03 -1 0 0 1 0 -27.775883 -1095.4038 -1094.5727 + 350 0.035 -1 0 0 1 0 -27.773241 -1095.2023 -1094.5727 + 400 0.04 -1 0 0 1 0 -27.771451 -1095.201 -1094.5727 + 450 0.045 -1 0 0 1 0 -27.770578 -1095.3608 -1094.5727 + 500 0.05 -1 0 0 1 0 -27.770546 -1095.6113 -1094.5727 + 550 0.055 -1 0 0 1 0 -27.771185 -1095.8764 -1094.5727 + 600 0.06 -1 0 0 1 0 -27.772282 -1096.0948 -1094.5727 + 650 0.065 -1 0 0 1 0 -27.773629 -1096.2313 -1094.5727 + 700 0.07 -1 0 0 1 0 -27.775042 -1096.2787 -1094.5727 + 750 0.075 -1 0 0 1 0 -27.776384 -1096.2534 -1094.5727 + 800 0.08 -1 0 0 1 0 -27.777564 -1096.1872 -1094.5727 + 850 0.085 -1 0 0 1 0 -27.778533 -1096.117 -1094.5727 + 900 0.09 -1 0 0 1 0 -27.779276 -1096.0741 -1094.5727 + 950 0.095 -1 0 0 1 0 -27.779802 -1096.0771 -1094.5727 + 1000 0.1 -1 0 0 1 0 -27.780134 -1096.1278 -1094.5727 +Loop time of 1.70062 on 1 procs for 1000 steps with 250 atoms + +Performance: 5.080 ns/day, 4.724 hours/ns, 588.019 timesteps/s +100.0% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 0.80384 | 0.80384 | 0.80384 | 0.0 | 45.98 -Neigh | 0.004528 | 0.004528 | 0.004528 | 0.0 | 0.26 -Comm | 0.022954 | 0.022954 | 0.022954 | 0.0 | 1.31 -Output | 0.0034568 | 0.0034568 | 0.0034568 | 0.0 | 0.20 -Modify | 0.91007 | 0.91007 | 0.91007 | 0.0 | 52.06 -Other | | 0.003404 | | | 0.19 +Pair | 0.72617 | 0.72617 | 0.72617 | 0.0 | 42.70 +Neigh | 0.0045958 | 0.0045958 | 0.0045958 | 0.0 | 0.27 +Comm | 0.023132 | 0.023132 | 0.023132 | 0.0 | 1.36 +Output | 0.0035856 | 0.0035856 | 0.0035856 | 0.0 | 0.21 +Modify | 0.93966 | 0.93966 | 0.93966 | 0.0 | 55.25 +Other | | 0.003483 | | | 0.20 Nlocal: 250 ave 250 max 250 min Histogram: 1 0 0 0 0 0 0 0 0 0 Nghost: 1415 ave 1415 max 1415 min Histogram: 1 0 0 0 0 0 0 0 0 0 -Neighs: 7873 ave 7873 max 7873 min +Neighs: 7872 ave 7872 max 7872 min Histogram: 1 0 0 0 0 0 0 0 0 0 -FullNghs: 15746 ave 15746 max 15746 min +FullNghs: 15744 ave 15744 max 15744 min Histogram: 1 0 0 0 0 0 0 0 0 0 -Total # of neighbors = 15746 -Ave neighs/atom = 62.984 +Total # of neighbors = 15744 +Ave neighs/atom = 62.976 Neighbor list builds = 6 Dangerous builds = 0 # min_style spin diff --git a/examples/SPIN/iron/log.19Nov19.spin.iron_cubic.g++.4 b/examples/SPIN/iron/log.14Apr20.spin.iron_cubic.g++.4 similarity index 65% rename from examples/SPIN/iron/log.19Nov19.spin.iron_cubic.g++.4 rename to examples/SPIN/iron/log.14Apr20.spin.iron_cubic.g++.4 index 60db1064e0d41d7975c4ddcd370f5402291d3185..d1d0868e2fc8522ecd8890169d6e9c61d755f823 100644 --- a/examples/SPIN/iron/log.19Nov19.spin.iron_cubic.g++.4 +++ b/examples/SPIN/iron/log.14Apr20.spin.iron_cubic.g++.4 @@ -1,7 +1,11 @@ -LAMMPS (30 Oct 2019) +LAMMPS (19 Mar 2020) +OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (../comm.cpp:94) + using 1 OpenMP thread(s) per MPI task # bcc iron in a 3d periodic box clear +OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (../comm.cpp:94) + using 1 OpenMP thread(s) per MPI task units metal atom_style spin @@ -19,7 +23,7 @@ Created orthogonal box = (0 0 0) to (14.3325 14.3325 14.3325) 1 by 2 by 2 MPI processor grid create_atoms 1 box Created 250 atoms - create_atoms CPU = 0.000651121 secs + create_atoms CPU = 0.00071311 secs # setting mass, mag. moments, and interactions for bcc iron @@ -81,53 +85,53 @@ Neighbor list info ... bin: standard Per MPI rank memory allocation (min/avg/max) = 7.766 | 7.766 | 7.766 Mbytes Step Time v_magx v_magy v_magz v_magnorm v_tmag v_emag PotEng TotEng - 0 0 -1 0 0 1 0 -55.58269 -1125.5827 -1122.364 - 50 0.005 -1 0 0 1 0 -55.581457 -1125.4635 -1122.364 - 100 0.01 -1 0 0 1 0 -55.577922 -1125.1262 -1122.364 - 150 0.015 -1 0 0 1 0 -55.572562 -1124.6305 -1122.364 - 200 0.02 -1 0 0 1 0 -55.566098 -1124.067 -1122.364 - 250 0.025 -1 0 0 1 0 -55.559384 -1123.5412 -1122.364 - 300 0.03 -1 0 0 1 0 -55.553261 -1123.1491 -1122.364 - 350 0.035 -1 0 0 1 0 -55.548413 -1122.9526 -1122.364 - 400 0.04 -1 0 0 1 0 -55.545248 -1122.9623 -1122.364 - 450 0.045 -1 0 0 1 0 -55.54387 -1123.1395 -1122.364 - 500 0.05 -1 0 0 1 0 -55.544101 -1123.4126 -1122.364 - 550 0.055 -1 0 0 1 0 -55.54558 -1123.7021 -1122.364 - 600 0.06 -1 0 0 1 0 -55.547857 -1123.9414 -1122.364 - 650 0.065 -1 0 0 1 0 -55.550495 -1124.0897 -1122.364 - 700 0.07 -1 0 0 1 0 -55.553127 -1124.136 -1122.364 - 750 0.075 -1 0 0 1 0 -55.555497 -1124.0961 -1122.364 - 800 0.08 -1 0 0 1 0 -55.557466 -1124.0053 -1122.364 - 850 0.085 -1 0 0 1 0 -55.559001 -1123.9069 -1122.364 - 900 0.09 -1 0 0 1 0 -55.560147 -1123.8404 -1122.364 - 950 0.095 -1 0 0 1 0 -55.560992 -1123.8312 -1122.364 - 1000 0.1 -1 0 0 1 0 -55.561635 -1123.8853 -1122.364 -Loop time of 1.5074 on 4 procs for 1000 steps with 250 atoms - -Performance: 5.732 ns/day, 4.187 hours/ns, 663.393 timesteps/s -99.9% CPU use with 4 MPI tasks x no OpenMP threads + 0 0 -1 0 0 1 0 -27.791345 -1097.7914 -1094.5727 + 50 0.005 -1 0 0 1 0 -27.790728 -1097.6727 -1094.5727 + 100 0.01 -1 0 0 1 0 -27.78896 -1097.3371 -1094.5727 + 150 0.015 -1 0 0 1 0 -27.786276 -1096.8437 -1094.5727 + 200 0.02 -1 0 0 1 0 -27.783035 -1096.2824 -1094.5727 + 250 0.025 -1 0 0 1 0 -27.779661 -1095.758 -1094.5727 + 300 0.03 -1 0 0 1 0 -27.776574 -1095.3661 -1094.5727 + 350 0.035 -1 0 0 1 0 -27.774114 -1095.1684 -1094.5727 + 400 0.04 -1 0 0 1 0 -27.772489 -1095.1758 -1094.5727 + 450 0.045 -1 0 0 1 0 -27.771753 -1095.3498 -1094.5727 + 500 0.05 -1 0 0 1 0 -27.771823 -1095.6196 -1094.5727 + 550 0.055 -1 0 0 1 0 -27.772521 -1095.9061 -1094.5727 + 600 0.06 -1 0 0 1 0 -27.773627 -1096.1431 -1094.5727 + 650 0.065 -1 0 0 1 0 -27.774925 -1096.2899 -1094.5727 + 700 0.07 -1 0 0 1 0 -27.776234 -1096.3356 -1094.5727 + 750 0.075 -1 0 0 1 0 -27.777423 -1096.2961 -1094.5727 + 800 0.08 -1 0 0 1 0 -27.778424 -1096.2063 -1094.5727 + 850 0.085 -1 0 0 1 0 -27.779215 -1096.1093 -1094.5727 + 900 0.09 -1 0 0 1 0 -27.779817 -1096.0443 -1094.5727 + 950 0.095 -1 0 0 1 0 -27.780271 -1096.0363 -1094.5727 + 1000 0.1 -1 0 0 1 0 -27.780622 -1096.0914 -1094.5727 +Loop time of 1.54663 on 4 procs for 1000 steps with 250 atoms + +Performance: 5.586 ns/day, 4.296 hours/ns, 646.566 timesteps/s +99.9% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 0.22156 | 0.23223 | 0.24219 | 1.5 | 15.41 -Neigh | 0.0011292 | 0.0011852 | 0.0012362 | 0.1 | 0.08 -Comm | 0.067507 | 0.076341 | 0.087237 | 2.6 | 5.06 -Output | 0.0015073 | 0.0015442 | 0.0015914 | 0.1 | 0.10 -Modify | 1.1934 | 1.1947 | 1.1955 | 0.1 | 79.25 -Other | | 0.001434 | | | 0.10 +Pair | 0.2086 | 0.21716 | 0.22473 | 1.2 | 14.04 +Neigh | 0.0011575 | 0.0011975 | 0.001235 | 0.1 | 0.08 +Comm | 0.070766 | 0.080324 | 0.088558 | 2.3 | 5.19 +Output | 0.0016837 | 0.0017157 | 0.0017838 | 0.1 | 0.11 +Modify | 1.2424 | 1.2446 | 1.2467 | 0.1 | 80.47 +Other | | 0.001639 | | | 0.11 Nlocal: 62.5 ave 66 max 60 min Histogram: 1 1 0 0 0 1 0 0 0 1 Nghost: 848.25 ave 861 max 834 min Histogram: 1 0 0 0 1 0 1 0 0 1 -Neighs: 1962.75 ave 2087 max 1870 min +Neighs: 1962.25 ave 2085 max 1870 min Histogram: 1 1 0 0 0 0 1 0 0 1 -FullNghs: 3925.5 ave 4138 max 3776 min +FullNghs: 3924.5 ave 4136 max 3776 min Histogram: 1 1 0 0 0 1 0 0 0 1 -Total # of neighbors = 15702 -Ave neighs/atom = 62.808 +Total # of neighbors = 15698 +Ave neighs/atom = 62.792 Neighbor list builds = 6 Dangerous builds = 0 # min_style spin diff --git a/examples/SPIN/iron/log.19Nov19.spin.iron.g++.1 b/examples/SPIN/iron/log.19Nov19.spin.iron.g++.1 deleted file mode 100644 index cbc749a1f7b61a36cd96cd6862baf5ce45222b9e..0000000000000000000000000000000000000000 --- a/examples/SPIN/iron/log.19Nov19.spin.iron.g++.1 +++ /dev/null @@ -1,136 +0,0 @@ -LAMMPS (30 Oct 2019) -# bcc iron in a 3d periodic box - -clear -units metal -atom_style spin - -dimension 3 -boundary p p p - -# necessary for the serial algorithm (sametag) -atom_modify map array - -lattice bcc 2.8665 -Lattice spacing in x,y,z = 2.8665 2.8665 2.8665 -region box block 0.0 5.0 0.0 5.0 0.0 5.0 -create_box 1 box -Created orthogonal box = (0 0 0) to (14.3325 14.3325 14.3325) - 1 by 1 by 1 MPI processor grid -create_atoms 1 box -Created 250 atoms - create_atoms CPU = 0.000422955 secs - -# setting mass, mag. moments, and interactions for bcc iron - -mass 1 55.845 - -set group all spin/random 31 2.2 - 250 settings made for spin/random -# set group all spin 2.2 0.0 0.0 1.0 -velocity all create 100 4928459 rot yes dist gaussian - -pair_style hybrid/overlay eam/alloy spin/exchange 3.5 -pair_coeff * * eam/alloy Fe_Mishin2006.eam.alloy Fe -pair_coeff * * spin/exchange exchange 3.4 0.02726 0.2171 1.841 - -neighbor 0.1 bin -neigh_modify every 10 check yes delay 20 - -fix 1 all precession/spin zeeman 0.0 0.0 0.0 1.0 -fix 2 all langevin/spin 0.0 0.0 21 - -fix 3 all nve/spin lattice moving -timestep 0.0001 - -# compute and output options - -compute out_mag all spin -compute out_pe all pe -compute out_ke all ke -compute out_temp all temp - -variable magz equal c_out_mag[3] -variable magnorm equal c_out_mag[4] -variable emag equal c_out_mag[5] -variable tmag equal c_out_mag[6] - -thermo_style custom step time v_magnorm v_tmag temp v_emag ke pe press etotal -thermo 50 - -compute outsp all property/atom spx spy spz sp fmx fmy fmz -dump 1 all custom 100 dump_iron.lammpstrj type x y z c_outsp[1] c_outsp[2] c_outsp[3] - -run 1000 -Neighbor list info ... - update every 10 steps, delay 20 steps, check yes - max neighbors/atom: 2000, page size: 100000 - master list distance cutoff = 5.77337 - ghost atom cutoff = 5.77337 - binsize = 2.88668, bins = 5 5 5 - 2 neighbor lists, perpetual/occasional/extra = 2 0 0 - (1) pair eam/alloy, perpetual, half/full from (2) - attributes: half, newton on - pair build: halffull/newton - stencil: none - bin: none - (2) pair spin/exchange, perpetual - attributes: full, newton on - pair build: full/bin/atomonly - stencil: full/bin/3d - bin: standard -Per MPI rank memory allocation (min/avg/max) = 7.82 | 7.82 | 7.82 Mbytes -Step Time v_magnorm v_tmag Temp v_emag KinEng PotEng Press TotEng - 0 0 0.076456975 4554.5462 100.00358 -0.85791269 3.2186929 -1070.429 394.43342 -1067.2103 - 50 0.005 0.076456974 4658.383 96.663685 -0.86504718 3.1111957 -1070.3179 709.50826 -1067.2067 - 100 0.01 0.076456983 4744.1872 86.965803 -0.88035771 2.7990619 -1069.9981 1466.6938 -1067.1991 - 150 0.015 0.076456973 4794.5283 72.421197 -0.8996913 2.3309324 -1069.5203 2534.3867 -1067.1894 - 200 0.02 0.076456944 4707.6548 55.633188 -0.921682 1.7905973 -1068.969 3732.183 -1067.1784 - 250 0.025 0.076456953 4439.4697 39.802206 -0.94649004 1.2810649 -1068.447 4831.5559 -1067.166 - 300 0.03 0.076457027 4101.6694 27.882295 -0.97253854 0.8974133 -1068.0504 5612.0928 -1067.153 - 350 0.035 0.076457103 3860.1545 21.776538 -0.99708692 0.70089477 -1067.8416 5906.3057 -1067.1407 - 400 0.04 0.076457117 3765.5341 21.857102 -1.0190244 0.70348778 -1067.8332 5682.0053 -1067.1297 - 450 0.045 0.076457072 3739.9037 26.959407 -1.0389343 0.86770942 -1067.9875 5066.5077 -1067.1198 - 500 0.05 0.076457001 3730.8342 34.92521 -1.0582008 1.124095 -1068.2342 4279.2424 -1067.1101 - 550 0.055 0.076456962 3698.0556 43.405912 -1.0785156 1.397053 -1068.497 3533.4153 -1067.1 - 600 0.06 0.076456997 3560.947 50.544844 -1.102048 1.626825 -1068.715 2975.8479 -1067.0882 - 650 0.065 0.076457079 3341.7402 55.261218 -1.1296588 1.7786252 -1068.853 2683.3023 -1067.0744 - 700 0.07 0.076457136 3156.8448 57.25083 -1.1595102 1.8426624 -1068.9021 2640.5967 -1067.0595 - 750 0.075 0.076457132 3099.5181 56.934336 -1.1893875 1.8324758 -1068.877 2778.3261 -1067.0445 - 800 0.08 0.076457116 3132.9985 55.266343 -1.2181223 1.7787901 -1068.809 3020.1175 -1067.0302 - 850 0.085 0.076457116 3163.2943 53.376453 -1.2443326 1.7179626 -1068.735 3287.9042 -1067.0171 - 900 0.09 0.076457121 3168.063 52.279557 -1.2676425 1.6826581 -1068.6881 3504.7334 -1067.0054 - 950 0.095 0.076457122 3144.2102 52.667743 -1.2902335 1.6951522 -1068.6893 3622.1382 -1066.9941 - 1000 0.1 0.076457135 3061.0811 54.684094 -1.314147 1.76005 -1068.7422 3625.2935 -1066.9822 -Loop time of 1.6779 on 1 procs for 1000 steps with 250 atoms - -Performance: 5.149 ns/day, 4.661 hours/ns, 595.982 timesteps/s -100.0% CPU use with 1 MPI tasks x no OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0.78285 | 0.78285 | 0.78285 | 0.0 | 46.66 -Neigh | 0.004487 | 0.004487 | 0.004487 | 0.0 | 0.27 -Comm | 0.022926 | 0.022926 | 0.022926 | 0.0 | 1.37 -Output | 0.003927 | 0.003927 | 0.003927 | 0.0 | 0.23 -Modify | 0.86033 | 0.86033 | 0.86033 | 0.0 | 51.27 -Other | | 0.003381 | | | 0.20 - -Nlocal: 250 ave 250 max 250 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Nghost: 1399 ave 1399 max 1399 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Neighs: 7855 ave 7855 max 7855 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -FullNghs: 15710 ave 15710 max 15710 min -Histogram: 1 0 0 0 0 0 0 0 0 0 - -Total # of neighbors = 15710 -Ave neighs/atom = 62.84 -Neighbor list builds = 6 -Dangerous builds = 0 - -Please see the log.cite file for references relevant to this simulation - -Total wall time: 0:00:01 diff --git a/examples/SPIN/iron/log.19Nov19.spin.iron.g++.4 b/examples/SPIN/iron/log.19Nov19.spin.iron.g++.4 deleted file mode 100644 index a5cc9d7f0b2cde1e6a59bbc277f7fff63af451aa..0000000000000000000000000000000000000000 --- a/examples/SPIN/iron/log.19Nov19.spin.iron.g++.4 +++ /dev/null @@ -1,136 +0,0 @@ -LAMMPS (30 Oct 2019) -# bcc iron in a 3d periodic box - -clear -units metal -atom_style spin - -dimension 3 -boundary p p p - -# necessary for the serial algorithm (sametag) -atom_modify map array - -lattice bcc 2.8665 -Lattice spacing in x,y,z = 2.8665 2.8665 2.8665 -region box block 0.0 5.0 0.0 5.0 0.0 5.0 -create_box 1 box -Created orthogonal box = (0 0 0) to (14.3325 14.3325 14.3325) - 1 by 2 by 2 MPI processor grid -create_atoms 1 box -Created 250 atoms - create_atoms CPU = 0.000705957 secs - -# setting mass, mag. moments, and interactions for bcc iron - -mass 1 55.845 - -set group all spin/random 31 2.2 - 250 settings made for spin/random -# set group all spin 2.2 0.0 0.0 1.0 -velocity all create 100 4928459 rot yes dist gaussian - -pair_style hybrid/overlay eam/alloy spin/exchange 3.5 -pair_coeff * * eam/alloy Fe_Mishin2006.eam.alloy Fe -pair_coeff * * spin/exchange exchange 3.4 0.02726 0.2171 1.841 - -neighbor 0.1 bin -neigh_modify every 10 check yes delay 20 - -fix 1 all precession/spin zeeman 0.0 0.0 0.0 1.0 -fix 2 all langevin/spin 0.0 0.0 21 - -fix 3 all nve/spin lattice moving -timestep 0.0001 - -# compute and output options - -compute out_mag all spin -compute out_pe all pe -compute out_ke all ke -compute out_temp all temp - -variable magz equal c_out_mag[3] -variable magnorm equal c_out_mag[4] -variable emag equal c_out_mag[5] -variable tmag equal c_out_mag[6] - -thermo_style custom step time v_magnorm v_tmag temp v_emag ke pe press etotal -thermo 50 - -compute outsp all property/atom spx spy spz sp fmx fmy fmz -dump 1 all custom 100 dump_iron.lammpstrj type x y z c_outsp[1] c_outsp[2] c_outsp[3] - -run 1000 -Neighbor list info ... - update every 10 steps, delay 20 steps, check yes - max neighbors/atom: 2000, page size: 100000 - master list distance cutoff = 5.77337 - ghost atom cutoff = 5.77337 - binsize = 2.88668, bins = 5 5 5 - 2 neighbor lists, perpetual/occasional/extra = 2 0 0 - (1) pair eam/alloy, perpetual, half/full from (2) - attributes: half, newton on - pair build: halffull/newton - stencil: none - bin: none - (2) pair spin/exchange, perpetual - attributes: full, newton on - pair build: full/bin/atomonly - stencil: full/bin/3d - bin: standard -Per MPI rank memory allocation (min/avg/max) = 7.766 | 7.766 | 7.766 Mbytes -Step Time v_magnorm v_tmag Temp v_emag KinEng PotEng Press TotEng - 0 0 0.076456975 4554.5462 100.00358 -0.85791269 3.2186929 -1070.8579 394.43342 -1067.6392 - 50 0.005 0.076456995 4701.2004 96.298333 -0.85659448 3.0994366 -1070.7387 714.37866 -1067.6392 - 100 0.01 0.076457028 4794.5923 86.330828 -0.87003341 2.7786247 -1070.4179 1484.2951 -1067.6392 - 150 0.015 0.076457074 4836.9634 71.603402 -0.89006992 2.3046111 -1069.9438 2551.9258 -1067.6392 - 200 0.02 0.076457106 4754.5574 54.648817 -0.91124541 1.7589146 -1069.3981 3731.1494 -1067.6392 - 250 0.025 0.076457128 4502.135 38.599515 -0.93187522 1.2423553 -1068.8816 4804.619 -1067.6392 - 300 0.03 0.076457157 4176.7186 26.383018 -0.95082226 0.8491579 -1068.4884 5563.3287 -1067.6392 - 350 0.035 0.076457207 3955.5658 20.01039 -0.96826468 0.64404992 -1068.2833 5839.6479 -1067.6392 - 400 0.04 0.076457243 3887.9746 20.097682 -0.98706373 0.64685949 -1068.2861 5601.1255 -1067.6392 - 450 0.045 0.076457231 3868.5613 25.687511 -1.0095684 0.82677249 -1068.466 4974.0031 -1067.6392 - 500 0.05 0.076457204 3838.4905 34.604697 -1.0349855 1.113779 -1068.753 4157.1837 -1067.6392 - 550 0.055 0.076457196 3775.1404 44.251809 -1.0609123 1.4242788 -1069.0635 3357.1 -1067.6392 - 600 0.06 0.076457188 3604.8828 52.475202 -1.0880854 1.6889551 -1069.3282 2752.0424 -1067.6392 - 650 0.065 0.07645718 3345.5894 57.926479 -1.1179657 1.8644087 -1069.5036 2467.7403 -1067.6392 - 700 0.07 0.076457185 3138.2001 60.030548 -1.1469999 1.9321298 -1069.5714 2510.1752 -1067.6392 - 750 0.075 0.07645719 3074.9626 59.122504 -1.1721939 1.9029037 -1069.5421 2788.7489 -1067.6392 - 800 0.08 0.076457195 3103.5294 56.349146 -1.1949365 1.813641 -1069.4529 3192.5158 -1067.6392 - 850 0.085 0.076457199 3164.2317 53.154464 -1.2164642 1.7108177 -1069.35 3602.931 -1067.6392 - 900 0.09 0.076457199 3228.1358 50.837416 -1.2366018 1.6362417 -1069.2755 3917.0758 -1067.6392 - 950 0.095 0.076457222 3247.5532 50.234549 -1.2539657 1.6168379 -1069.2561 4059.9275 -1067.6392 - 1000 0.1 0.076457266 3208.3875 51.592727 -1.2671834 1.6605519 -1069.2998 4001.4995 -1067.6392 -Loop time of 1.47769 on 4 procs for 1000 steps with 250 atoms - -Performance: 5.847 ns/day, 4.105 hours/ns, 676.731 timesteps/s -100.0% CPU use with 4 MPI tasks x no OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0.21791 | 0.22724 | 0.23568 | 1.4 | 15.38 -Neigh | 0.001137 | 0.0011771 | 0.0012221 | 0.1 | 0.08 -Comm | 0.066727 | 0.074288 | 0.083826 | 2.3 | 5.03 -Output | 0.0017431 | 0.0017657 | 0.0018256 | 0.1 | 0.12 -Modify | 1.1707 | 1.1718 | 1.1725 | 0.1 | 79.30 -Other | | 0.001427 | | | 0.10 - -Nlocal: 62.5 ave 66 max 60 min -Histogram: 1 0 0 2 0 0 0 0 0 1 -Nghost: 844 ave 857 max 829 min -Histogram: 1 0 0 1 0 0 0 0 1 1 -Neighs: 1962.5 ave 2096 max 1855 min -Histogram: 1 0 1 0 0 1 0 0 0 1 -FullNghs: 3925 ave 4139 max 3766 min -Histogram: 1 0 0 2 0 0 0 0 0 1 - -Total # of neighbors = 15700 -Ave neighs/atom = 62.8 -Neighbor list builds = 6 -Dangerous builds = 0 - -Please see the log.cite file for references relevant to this simulation - -Total wall time: 0:00:01 diff --git a/examples/SPIN/nickel/in.spin.nickel b/examples/SPIN/nickel/in.spin.nickel index 1d62188d8f8496f4b75ad8df7e68516e1b20de99..0fd2e5f345d32210b96cc1400476cd1765b8b013 100644 --- a/examples/SPIN/nickel/in.spin.nickel +++ b/examples/SPIN/nickel/in.spin.nickel @@ -31,6 +31,7 @@ neighbor 0.1 bin neigh_modify every 10 check yes delay 20 fix 1 all precession/spin zeeman 0.0 0.0 0.0 1.0 +fix_modify 1 energy yes fix 2 all langevin/spin 0.0 0.0 21 fix 3 all nve/spin lattice moving @@ -48,7 +49,7 @@ variable magnorm equal c_out_mag[4] variable emag equal c_out_mag[5] variable tmag equal c_out_mag[6] -thermo_style custom step time v_magnorm v_emag temp v_tmag etotal +thermo_style custom step time v_magnorm pe v_emag temp v_tmag etotal thermo 50 compute outsp all property/atom spx spy spz sp fmx fmy fmz diff --git a/examples/SPIN/nickel/in.spin.nickel_cubic b/examples/SPIN/nickel/in.spin.nickel_cubic index 1ae069a64f26b429fb136eff0d734dc66b7c1c7c..88c477132ea8c930b272da8cf7a67a43429e8e01 100644 --- a/examples/SPIN/nickel/in.spin.nickel_cubic +++ b/examples/SPIN/nickel/in.spin.nickel_cubic @@ -50,7 +50,7 @@ variable magnorm equal c_out_mag[4] variable emag equal c_out_mag[5] variable tmag equal c_out_mag[6] -thermo_style custom step time v_magnorm v_emag temp v_tmag etotal +thermo_style custom step time v_magnorm pe v_emag temp v_tmag etotal thermo 50 compute outsp all property/atom spx spy spz sp fmx fmy fmz diff --git a/examples/SPIN/nickel/log.14Apr20.spin.nickel.g++.1 b/examples/SPIN/nickel/log.14Apr20.spin.nickel.g++.1 new file mode 100644 index 0000000000000000000000000000000000000000..e4bcd538c8e8ab5449f025f5285a4c18f464f22c --- /dev/null +++ b/examples/SPIN/nickel/log.14Apr20.spin.nickel.g++.1 @@ -0,0 +1,141 @@ +LAMMPS (19 Mar 2020) +OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (../comm.cpp:94) + using 1 OpenMP thread(s) per MPI task +# fcc nickel in a 3d periodic box + +clear +OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (../comm.cpp:94) + using 1 OpenMP thread(s) per MPI task +units metal +atom_style spin + +dimension 3 +boundary p p p + +# necessary for the serial algorithm (sametag) +atom_modify map array + +lattice fcc 3.524 +Lattice spacing in x,y,z = 3.524 3.524 3.524 +region box block 0.0 5.0 0.0 5.0 0.0 5.0 +create_box 1 box +Created orthogonal box = (0 0 0) to (17.62 17.62 17.62) + 1 by 1 by 1 MPI processor grid +create_atoms 1 box +Created 500 atoms + create_atoms CPU = 0.00111699 secs + +# setting mass, mag. moments, and interactions for cobalt + +mass 1 58.69 + +set group all spin/random 31 0.63 + 500 settings made for spin/random +#set group all spin 0.63 0.0 0.0 1.0 +velocity all create 100 4928459 rot yes dist gaussian + +pair_style hybrid/overlay eam/alloy spin/exchange 4.0 +pair_coeff * * eam/alloy Ni99.eam.alloy Ni +pair_coeff * * spin/exchange exchange 4.0 0.50 0.2280246862 1.229983475 + +neighbor 0.1 bin +neigh_modify every 10 check yes delay 20 + +fix 1 all precession/spin zeeman 0.0 0.0 0.0 1.0 +fix_modify 1 energy yes +fix 2 all langevin/spin 0.0 0.0 21 + +fix 3 all nve/spin lattice moving +timestep 0.0001 + +# compute and output options + +compute out_mag all spin +compute out_pe all pe +compute out_ke all ke +compute out_temp all temp + +variable magz equal c_out_mag[3] +variable magnorm equal c_out_mag[4] +variable emag equal c_out_mag[5] +variable tmag equal c_out_mag[6] + +thermo_style custom step time v_magnorm pe v_emag temp v_tmag etotal +thermo 50 + +compute outsp all property/atom spx spy spz sp fmx fmy fmz +dump 1 all custom 100 dump.lammpstrj type x y z c_outsp[1] c_outsp[2] c_outsp[3] c_outsp[4] c_outsp[5] c_outsp[6] c_outsp[7] + +run 1000 +Neighbor list info ... + update every 10 steps, delay 20 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 5.90375 + ghost atom cutoff = 5.90375 + binsize = 2.95187, bins = 6 6 6 + 2 neighbor lists, perpetual/occasional/extra = 2 0 0 + (1) pair eam/alloy, perpetual, half/full from (2) + attributes: half, newton on + pair build: halffull/newton + stencil: none + bin: none + (2) pair spin/exchange, perpetual + attributes: full, newton on + pair build: full/bin/atomonly + stencil: full/bin/3d + bin: standard +Per MPI rank memory allocation (min/avg/max) = 7.885 | 7.885 | 7.885 Mbytes +Step Time v_magnorm PotEng v_emag Temp v_tmag TotEng + 0 0 0.028733803 -2224.7591 0.20498788 100.03408 -4775.0671 -2218.3068 + 50 0.005 0.028733807 -2224.6271 0.093798492 97.987469 -10540.61 -2218.3068 + 100 0.01 0.028733815 -2224.1217 -0.12620081 90.153107 8107.9288 -2218.3068 + 150 0.015 0.028733823 -2223.2984 -0.433762 77.388213 2482.6323 -2218.3068 + 200 0.02 0.028733827 -2222.3037 -0.80329408 61.9663 1426.722 -2218.3068 + 250 0.025 0.028733825 -2221.3495 -1.21118 47.173828 1010.1027 -2218.3068 + 300 0.03 0.028733813 -2220.6532 -1.6389575 36.378126 789.93596 -2218.3068 + 350 0.035 0.028733795 -2220.3656 -2.0724228 31.919862 648.39236 -2218.3068 + 400 0.04 0.028733778 -2220.5225 -2.498882 34.352305 545.8856 -2218.3068 + 450 0.045 0.02873377 -2221.0414 -2.9067963 42.396008 468.97305 -2218.3068 + 500 0.05 0.02873377 -2221.7614 -3.2881407 53.559839 411.03247 -2218.3068 + 550 0.055 0.028733775 -2222.5025 -3.6391769 65.048917 366.0991 -2218.3068 + 600 0.06 0.028733784 -2223.1215 -3.9612604 74.645803 330.37583 -2218.3068 + 650 0.065 0.028733794 -2223.5495 -4.2623843 81.281536 303.0489 -2218.3068 + 700 0.07 0.028733802 -2223.795 -4.5550161 85.087649 283.0897 -2218.3068 + 750 0.075 0.028733805 -2223.9222 -4.8523832 87.059996 267.48601 -2218.3068 + 800 0.08 0.028733804 -2224.0176 -5.1656984 88.538724 253.94215 -2218.3068 + 850 0.085 0.028733799 -2224.1506 -5.4981915 90.600346 242.22988 -2218.3068 + 900 0.09 0.028733794 -2224.3425 -5.8400709 93.576582 232.32115 -2218.3068 + 950 0.095 0.028733796 -2224.5674 -6.1746129 97.063173 222.64192 -2218.3068 + 1000 0.1 0.028733805 -2224.7832 -6.4920444 100.40752 212.7708 -2218.3068 +Loop time of 4.1438 on 1 procs for 1000 steps with 500 atoms + +Performance: 2.085 ns/day, 11.511 hours/ns, 241.324 timesteps/s +100.0% CPU use with 1 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 1.8846 | 1.8846 | 1.8846 | 0.0 | 45.48 +Neigh | 0.012244 | 0.012244 | 0.012244 | 0.0 | 0.30 +Comm | 0.033385 | 0.033385 | 0.033385 | 0.0 | 0.81 +Output | 0.014202 | 0.014202 | 0.014202 | 0.0 | 0.34 +Modify | 2.1938 | 2.1938 | 2.1938 | 0.0 | 52.94 +Other | | 0.005526 | | | 0.13 + +Nlocal: 500 ave 500 max 500 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 1956 ave 1956 max 1956 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Neighs: 19500 ave 19500 max 19500 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +FullNghs: 39000 ave 39000 max 39000 min +Histogram: 1 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 39000 +Ave neighs/atom = 78 +Neighbor list builds = 7 +Dangerous builds = 0 + +Please see the log.cite file for references relevant to this simulation + +Total wall time: 0:00:04 diff --git a/examples/SPIN/nickel/log.14Apr20.spin.nickel.g++.4 b/examples/SPIN/nickel/log.14Apr20.spin.nickel.g++.4 new file mode 100644 index 0000000000000000000000000000000000000000..2ef20e47899234b2c8f5b3ca0e49f14892989236 --- /dev/null +++ b/examples/SPIN/nickel/log.14Apr20.spin.nickel.g++.4 @@ -0,0 +1,141 @@ +LAMMPS (19 Mar 2020) +OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (../comm.cpp:94) + using 1 OpenMP thread(s) per MPI task +# fcc nickel in a 3d periodic box + +clear +OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (../comm.cpp:94) + using 1 OpenMP thread(s) per MPI task +units metal +atom_style spin + +dimension 3 +boundary p p p + +# necessary for the serial algorithm (sametag) +atom_modify map array + +lattice fcc 3.524 +Lattice spacing in x,y,z = 3.524 3.524 3.524 +region box block 0.0 5.0 0.0 5.0 0.0 5.0 +create_box 1 box +Created orthogonal box = (0 0 0) to (17.62 17.62 17.62) + 1 by 2 by 2 MPI processor grid +create_atoms 1 box +Created 500 atoms + create_atoms CPU = 0.000680923 secs + +# setting mass, mag. moments, and interactions for cobalt + +mass 1 58.69 + +set group all spin/random 31 0.63 + 500 settings made for spin/random +#set group all spin 0.63 0.0 0.0 1.0 +velocity all create 100 4928459 rot yes dist gaussian + +pair_style hybrid/overlay eam/alloy spin/exchange 4.0 +pair_coeff * * eam/alloy Ni99.eam.alloy Ni +pair_coeff * * spin/exchange exchange 4.0 0.50 0.2280246862 1.229983475 + +neighbor 0.1 bin +neigh_modify every 10 check yes delay 20 + +fix 1 all precession/spin zeeman 0.0 0.0 0.0 1.0 +fix_modify 1 energy yes +fix 2 all langevin/spin 0.0 0.0 21 + +fix 3 all nve/spin lattice moving +timestep 0.0001 + +# compute and output options + +compute out_mag all spin +compute out_pe all pe +compute out_ke all ke +compute out_temp all temp + +variable magz equal c_out_mag[3] +variable magnorm equal c_out_mag[4] +variable emag equal c_out_mag[5] +variable tmag equal c_out_mag[6] + +thermo_style custom step time v_magnorm pe v_emag temp v_tmag etotal +thermo 50 + +compute outsp all property/atom spx spy spz sp fmx fmy fmz +dump 1 all custom 100 dump.lammpstrj type x y z c_outsp[1] c_outsp[2] c_outsp[3] c_outsp[4] c_outsp[5] c_outsp[6] c_outsp[7] + +run 1000 +Neighbor list info ... + update every 10 steps, delay 20 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 5.90375 + ghost atom cutoff = 5.90375 + binsize = 2.95187, bins = 6 6 6 + 2 neighbor lists, perpetual/occasional/extra = 2 0 0 + (1) pair eam/alloy, perpetual, half/full from (2) + attributes: half, newton on + pair build: halffull/newton + stencil: none + bin: none + (2) pair spin/exchange, perpetual + attributes: full, newton on + pair build: full/bin/atomonly + stencil: full/bin/3d + bin: standard +Per MPI rank memory allocation (min/avg/max) = 7.799 | 7.799 | 7.799 Mbytes +Step Time v_magnorm PotEng v_emag Temp v_tmag TotEng + 0 0 0.028733803 -2224.7591 0.20498788 100.03408 -4775.0671 -2218.3068 + 50 0.005 0.028733805 -2224.5402 0.18523081 96.640497 -5356.0839 -2218.3068 + 100 0.01 0.028733812 -2223.9764 0.042321266 87.900506 -24443.229 -2218.3068 + 150 0.015 0.028733818 -2223.1275 -0.20362758 74.73931 5409.1535 -2218.3068 + 200 0.02 0.028733826 -2222.1368 -0.52607498 59.379029 2258.3662 -2218.3068 + 250 0.025 0.028733831 -2221.2102 -0.90147712 45.013713 1422.5963 -2218.3068 + 300 0.03 0.028733827 -2220.558 -1.3121131 34.902868 1037.9833 -2218.3068 + 350 0.035 0.028733817 -2220.3198 -1.7411113 31.20948 805.99534 -2218.3068 + 400 0.04 0.028733807 -2220.5162 -2.1695831 34.253525 646.07984 -2218.3068 + 450 0.045 0.028733802 -2221.0547 -2.581156 42.602248 532.25918 -2218.3068 + 500 0.05 0.028733805 -2221.7784 -2.9684862 53.822318 451.09419 -2218.3068 + 550 0.055 0.028733814 -2222.5255 -3.3338614 65.405638 392.41628 -2218.3068 + 600 0.06 0.028733822 -2223.1693 -3.6823124 75.38674 349.28401 -2218.3068 + 650 0.065 0.028733828 -2223.6339 -4.0182131 82.590109 317.40382 -2218.3068 + 700 0.07 0.028733827 -2223.907 -4.3515619 86.82355 294.41794 -2218.3068 + 750 0.075 0.028733822 -2224.0293 -4.6966825 88.720045 278.64174 -2218.3068 + 800 0.08 0.02873382 -2224.064 -5.0589353 89.257884 267.43696 -2218.3068 + 850 0.085 0.028733824 -2224.0702 -5.4291065 89.354006 257.51219 -2218.3068 + 900 0.09 0.028733833 -2224.0977 -5.7927329 89.780835 246.96548 -2218.3068 + 950 0.095 0.028733835 -2224.1852 -6.1414644 91.136895 236.30442 -2218.3068 + 1000 0.1 0.028733828 -2224.3442 -6.472877 93.602509 227.18362 -2218.3068 +Loop time of 2.57923 on 4 procs for 1000 steps with 500 atoms + +Performance: 3.350 ns/day, 7.165 hours/ns, 387.713 timesteps/s +99.4% CPU use with 4 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.52633 | 0.53745 | 0.55615 | 1.6 | 20.84 +Neigh | 0.0030599 | 0.0031699 | 0.0032969 | 0.2 | 0.12 +Comm | 0.10599 | 0.1261 | 0.13713 | 3.4 | 4.89 +Output | 0.0051079 | 0.0051572 | 0.0052865 | 0.1 | 0.20 +Modify | 1.9032 | 1.9052 | 1.9065 | 0.1 | 73.87 +Other | | 0.002202 | | | 0.09 + +Nlocal: 125 ave 138 max 115 min +Histogram: 1 0 0 2 0 0 0 0 0 1 +Nghost: 1099 ave 1109 max 1086 min +Histogram: 1 0 0 0 0 0 2 0 0 1 +Neighs: 4875 ave 5336 max 4525 min +Histogram: 1 0 0 2 0 0 0 0 0 1 +FullNghs: 9750 ave 10764 max 8970 min +Histogram: 1 0 0 2 0 0 0 0 0 1 + +Total # of neighbors = 39000 +Ave neighs/atom = 78 +Neighbor list builds = 7 +Dangerous builds = 0 + +Please see the log.cite file for references relevant to this simulation + +Total wall time: 0:00:02 diff --git a/examples/SPIN/nickel/log.14Apr20.spin.nickel_cubic.g++.1 b/examples/SPIN/nickel/log.14Apr20.spin.nickel_cubic.g++.1 new file mode 100644 index 0000000000000000000000000000000000000000..a9c6dc1ea40f5b9348b7d557cc86fcd13c84f2c6 --- /dev/null +++ b/examples/SPIN/nickel/log.14Apr20.spin.nickel_cubic.g++.1 @@ -0,0 +1,142 @@ +LAMMPS (19 Mar 2020) +OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (../comm.cpp:94) + using 1 OpenMP thread(s) per MPI task +# fcc nickel in a 3d periodic box + +clear +OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (../comm.cpp:94) + using 1 OpenMP thread(s) per MPI task +units metal +atom_style spin + +dimension 3 +boundary p p p + +# necessary for the serial algorithm (sametag) +atom_modify map array + +lattice fcc 3.524 +Lattice spacing in x,y,z = 3.524 3.524 3.524 +region box block 0.0 5.0 0.0 5.0 0.0 5.0 +create_box 1 box +Created orthogonal box = (0 0 0) to (17.62 17.62 17.62) + 1 by 1 by 1 MPI processor grid +create_atoms 1 box +Created 500 atoms + create_atoms CPU = 0.000916958 secs + +# setting mass, mag. moments, and interactions for cobalt + +mass 1 58.69 + +set group all spin/random 31 0.63 + 500 settings made for spin/random +#set group all spin 0.63 0.0 0.0 1.0 +velocity all create 100 4928459 rot yes dist gaussian + +pair_style hybrid/overlay eam/alloy spin/exchange 4.0 +pair_coeff * * eam/alloy Ni99.eam.alloy Ni +pair_coeff * * spin/exchange exchange 4.0 0.50 0.2280246862 1.229983475 + +neighbor 0.1 bin +neigh_modify every 10 check yes delay 20 + +fix 1 all precession/spin cubic -0.0001 0.0 1.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 1.0 zeeman 0.0 0.0 0.0 1.0 +fix_modify 1 energy yes +fix 2 all langevin/spin 0.0 0.0 21 + +fix 3 all nve/spin lattice moving +timestep 0.0001 + +# compute and output options + +compute out_mag all spin +compute out_pe all pe +compute out_ke all ke +compute out_temp all temp + +variable magz equal c_out_mag[3] +variable magnorm equal c_out_mag[4] +variable emag equal c_out_mag[5] +variable tmag equal c_out_mag[6] + +thermo_style custom step time v_magnorm pe v_emag temp v_tmag etotal +thermo 50 + +compute outsp all property/atom spx spy spz sp fmx fmy fmz +dump 1 all custom 50 dump.lammpstrj type x y z c_outsp[1] c_outsp[2] c_outsp[3] c_outsp[4] c_outsp[5] c_outsp[6] c_outsp[7] + +run 1000 +Neighbor list info ... + update every 10 steps, delay 20 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 5.90375 + ghost atom cutoff = 5.90375 + binsize = 2.95187, bins = 6 6 6 + 2 neighbor lists, perpetual/occasional/extra = 2 0 0 + (1) pair eam/alloy, perpetual, half/full from (2) + attributes: half, newton on + pair build: halffull/newton + stencil: none + bin: none + (2) pair spin/exchange, perpetual + attributes: full, newton on + pair build: full/bin/atomonly + stencil: full/bin/3d + bin: standard +Per MPI rank memory allocation (min/avg/max) = 7.885 | 7.885 | 7.885 Mbytes +Step Time v_magnorm PotEng v_emag Temp v_tmag TotEng + 0 0 0.028733803 -2224.7478 0.21626519 100.03408 -4301.853 -2218.2955 + 50 0.005 0.028732018 -2224.6158 0.10507552 97.987527 -8506.178 -2218.2955 + 100 0.01 0.028730353 -2224.1105 -0.11492231 90.153208 9821.9545 -2218.2955 + 150 0.015 0.028729179 -2223.2871 -0.42247044 77.388252 2612.6762 -2218.2955 + 200 0.02 0.028730623 -2222.2924 -0.79199024 61.966499 1465.6684 -2218.2955 + 250 0.025 0.02873338 -2221.3383 -1.199896 47.175023 1028.0909 -2218.2955 + 300 0.03 0.028732667 -2220.6421 -1.6277461 36.381371 800.14526 -2218.2955 + 350 0.035 0.028726646 -2220.3547 -2.0613125 31.92537 654.96081 -2218.2955 + 400 0.04 0.028719587 -2220.5116 -2.4878332 34.358607 550.47697 -2218.2955 + 450 0.045 0.028713837 -2221.0303 -2.8957078 42.400515 472.35844 -2218.2955 + 500 0.05 0.028707813 -2221.7502 -3.2769128 53.560569 413.68656 -2218.2955 + 550 0.055 0.028706758 -2222.4909 -3.627757 65.045564 368.28172 -2218.2955 + 600 0.06 0.02871485 -2223.1098 -3.9496387 74.639348 332.20637 -2218.2955 + 650 0.065 0.028726143 -2223.5376 -4.2505578 81.273271 304.61479 -2218.2954 + 700 0.07 0.028732341 -2223.7831 -4.5429323 85.078158 284.47251 -2218.2954 + 750 0.075 0.028732637 -2223.9102 -4.8399235 87.049135 268.76484 -2218.2954 + 800 0.08 0.028731303 -2224.0055 -5.1527352 88.526667 255.14878 -2218.2954 + 850 0.085 0.028728379 -2224.1384 -5.4846326 90.587963 243.32753 -2218.2954 + 900 0.09 0.028721628 -2224.3304 -5.8258679 93.565089 233.2995 -2218.2954 + 950 0.095 0.028715574 -2224.5555 -6.1597678 97.054035 223.54492 -2218.2954 + 1000 0.1 0.02871582 -2224.7714 -6.4766454 100.40218 213.59853 -2218.2954 +Loop time of 4.15073 on 1 procs for 1000 steps with 500 atoms + +Performance: 2.082 ns/day, 11.530 hours/ns, 240.921 timesteps/s +100.0% CPU use with 1 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 1.8514 | 1.8514 | 1.8514 | 0.0 | 44.60 +Neigh | 0.012244 | 0.012244 | 0.012244 | 0.0 | 0.29 +Comm | 0.032971 | 0.032971 | 0.032971 | 0.0 | 0.79 +Output | 0.027815 | 0.027815 | 0.027815 | 0.0 | 0.67 +Modify | 2.2209 | 2.2209 | 2.2209 | 0.0 | 53.51 +Other | | 0.005408 | | | 0.13 + +Nlocal: 500 ave 500 max 500 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 1956 ave 1956 max 1956 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Neighs: 19500 ave 19500 max 19500 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +FullNghs: 39000 ave 39000 max 39000 min +Histogram: 1 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 39000 +Ave neighs/atom = 78 +Neighbor list builds = 7 +Dangerous builds = 0 + + +Please see the log.cite file for references relevant to this simulation + +Total wall time: 0:00:04 diff --git a/examples/SPIN/nickel/log.14Apr20.spin.nickel_cubic.g++.4 b/examples/SPIN/nickel/log.14Apr20.spin.nickel_cubic.g++.4 new file mode 100644 index 0000000000000000000000000000000000000000..9a25cb1fb33cc19b3cd97124709858bd1ac28668 --- /dev/null +++ b/examples/SPIN/nickel/log.14Apr20.spin.nickel_cubic.g++.4 @@ -0,0 +1,142 @@ +LAMMPS (19 Mar 2020) +OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (../comm.cpp:94) + using 1 OpenMP thread(s) per MPI task +# fcc nickel in a 3d periodic box + +clear +OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (../comm.cpp:94) + using 1 OpenMP thread(s) per MPI task +units metal +atom_style spin + +dimension 3 +boundary p p p + +# necessary for the serial algorithm (sametag) +atom_modify map array + +lattice fcc 3.524 +Lattice spacing in x,y,z = 3.524 3.524 3.524 +region box block 0.0 5.0 0.0 5.0 0.0 5.0 +create_box 1 box +Created orthogonal box = (0 0 0) to (17.62 17.62 17.62) + 1 by 2 by 2 MPI processor grid +create_atoms 1 box +Created 500 atoms + create_atoms CPU = 0.000750065 secs + +# setting mass, mag. moments, and interactions for cobalt + +mass 1 58.69 + +set group all spin/random 31 0.63 + 500 settings made for spin/random +#set group all spin 0.63 0.0 0.0 1.0 +velocity all create 100 4928459 rot yes dist gaussian + +pair_style hybrid/overlay eam/alloy spin/exchange 4.0 +pair_coeff * * eam/alloy Ni99.eam.alloy Ni +pair_coeff * * spin/exchange exchange 4.0 0.50 0.2280246862 1.229983475 + +neighbor 0.1 bin +neigh_modify every 10 check yes delay 20 + +fix 1 all precession/spin cubic -0.0001 0.0 1.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 1.0 zeeman 0.0 0.0 0.0 1.0 +fix_modify 1 energy yes +fix 2 all langevin/spin 0.0 0.0 21 + +fix 3 all nve/spin lattice moving +timestep 0.0001 + +# compute and output options + +compute out_mag all spin +compute out_pe all pe +compute out_ke all ke +compute out_temp all temp + +variable magz equal c_out_mag[3] +variable magnorm equal c_out_mag[4] +variable emag equal c_out_mag[5] +variable tmag equal c_out_mag[6] + +thermo_style custom step time v_magnorm pe v_emag temp v_tmag etotal +thermo 50 + +compute outsp all property/atom spx spy spz sp fmx fmy fmz +dump 1 all custom 50 dump.lammpstrj type x y z c_outsp[1] c_outsp[2] c_outsp[3] c_outsp[4] c_outsp[5] c_outsp[6] c_outsp[7] + +run 1000 +Neighbor list info ... + update every 10 steps, delay 20 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 5.90375 + ghost atom cutoff = 5.90375 + binsize = 2.95187, bins = 6 6 6 + 2 neighbor lists, perpetual/occasional/extra = 2 0 0 + (1) pair eam/alloy, perpetual, half/full from (2) + attributes: half, newton on + pair build: halffull/newton + stencil: none + bin: none + (2) pair spin/exchange, perpetual + attributes: full, newton on + pair build: full/bin/atomonly + stencil: full/bin/3d + bin: standard +Per MPI rank memory allocation (min/avg/max) = 7.799 | 7.799 | 7.799 Mbytes +Step Time v_magnorm PotEng v_emag Temp v_tmag TotEng + 0 0 0.028733803 -2224.7478 0.21626519 100.03408 -4301.853 -2218.2955 + 50 0.005 0.028732084 -2224.5289 0.19650376 96.640616 -4777.5312 -2218.2955 + 100 0.01 0.028730714 -2223.9652 0.053583455 87.900827 -16071.152 -2218.2955 + 150 0.015 0.028730068 -2223.1163 -0.19237362 74.739735 6053.4731 -2218.2955 + 200 0.02 0.028732658 -2222.1255 -0.5148243 59.37938 2354.2236 -2218.2955 + 250 0.025 0.028736824 -2221.1989 -0.89021871 45.013765 1456.8539 -2218.2955 + 300 0.03 0.028734673 -2220.5467 -1.3008412 34.902634 1054.9996 -2218.2955 + 350 0.035 0.028726346 -2220.3085 -1.7298348 31.209321 816.00699 -2218.2955 + 400 0.04 0.028721022 -2220.5048 -2.1583012 34.253626 652.5234 -2218.2955 + 450 0.045 0.028722238 -2221.0433 -2.5698412 42.602344 536.67287 -2218.2955 + 500 0.05 0.02872462 -2221.767 -2.9571093 53.822165 454.37668 -2218.2955 + 550 0.055 0.02872545 -2222.5141 -3.3223962 65.405129 395.00593 -2218.2955 + 600 0.06 0.02873171 -2223.1579 -3.6706939 75.385253 351.37664 -2218.2955 + 650 0.065 0.028744439 -2223.6223 -4.0063211 82.586428 319.12437 -2218.2954 + 700 0.07 0.028756808 -2223.8952 -4.3392538 86.816357 295.88017 -2218.2954 + 750 0.075 0.028765368 -2224.0172 -4.6838051 88.708218 279.91792 -2218.2954 + 800 0.08 0.028773583 -2224.0515 -5.0453234 89.24056 268.55561 -2218.2954 + 850 0.085 0.028781239 -2224.0574 -5.4146399 89.331407 258.50935 -2218.2954 + 900 0.09 0.028787568 -2224.0847 -5.7774277 89.755159 247.86416 -2218.2954 + 950 0.095 0.028794703 -2224.1722 -6.1254539 91.111184 237.12719 -2218.2954 + 1000 0.1 0.028801253 -2224.3313 -6.4562841 93.577969 227.97114 -2218.2954 +Loop time of 2.49458 on 4 procs for 1000 steps with 500 atoms + +Performance: 3.464 ns/day, 6.929 hours/ns, 400.868 timesteps/s +100.0% CPU use with 4 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.52895 | 0.53652 | 0.54117 | 0.6 | 21.51 +Neigh | 0.003077 | 0.0032379 | 0.003371 | 0.2 | 0.13 +Comm | 0.11315 | 0.1193 | 0.12956 | 1.8 | 4.78 +Output | 0.0093312 | 0.0093816 | 0.0094745 | 0.1 | 0.38 +Modify | 1.8206 | 1.8239 | 1.8254 | 0.1 | 73.11 +Other | | 0.00229 | | | 0.09 + +Nlocal: 125 ave 138 max 115 min +Histogram: 1 0 0 2 0 0 0 0 0 1 +Nghost: 1099 ave 1109 max 1086 min +Histogram: 1 0 0 0 0 0 2 0 0 1 +Neighs: 4875 ave 5337 max 4528 min +Histogram: 1 0 0 2 0 0 0 0 0 1 +FullNghs: 9750 ave 10764 max 8970 min +Histogram: 1 0 0 2 0 0 0 0 0 1 + +Total # of neighbors = 39000 +Ave neighs/atom = 78 +Neighbor list builds = 7 +Dangerous builds = 0 + + +Please see the log.cite file for references relevant to this simulation + +Total wall time: 0:00:02 diff --git a/examples/SPIN/nickel/log.19Nov19.spin.nickel.g++.1 b/examples/SPIN/nickel/log.19Nov19.spin.nickel.g++.1 deleted file mode 100644 index 7871d82ae9bbfc6588e5fd3f2dc2e57bcea59aea..0000000000000000000000000000000000000000 --- a/examples/SPIN/nickel/log.19Nov19.spin.nickel.g++.1 +++ /dev/null @@ -1,136 +0,0 @@ -LAMMPS (30 Oct 2019) -# fcc nickel in a 3d periodic box - -clear -units metal -atom_style spin - -dimension 3 -boundary p p p - -# necessary for the serial algorithm (sametag) -atom_modify map array - -lattice fcc 3.524 -Lattice spacing in x,y,z = 3.524 3.524 3.524 -region box block 0.0 5.0 0.0 5.0 0.0 5.0 -create_box 1 box -Created orthogonal box = (0 0 0) to (17.62 17.62 17.62) - 1 by 1 by 1 MPI processor grid -create_atoms 1 box -Created 500 atoms - create_atoms CPU = 0.000484943 secs - -# setting mass, mag. moments, and interactions for cobalt - -mass 1 58.69 - -set group all spin/random 31 0.63 - 500 settings made for spin/random -#set group all spin 0.63 0.0 0.0 1.0 -velocity all create 100 4928459 rot yes dist gaussian - -pair_style hybrid/overlay eam/alloy spin/exchange 4.0 -pair_coeff * * eam/alloy Ni99.eam.alloy Ni -pair_coeff * * spin/exchange exchange 4.0 0.50 0.2280246862 1.229983475 - -neighbor 0.1 bin -neigh_modify every 10 check yes delay 20 - -fix 1 all precession/spin zeeman 0.0 0.0 0.0 1.0 -fix 2 all langevin/spin 0.0 0.0 21 - -fix 3 all nve/spin lattice moving -timestep 0.0001 - -# compute and output options - -compute out_mag all spin -compute out_pe all pe -compute out_ke all ke -compute out_temp all temp - -variable magz equal c_out_mag[3] -variable magnorm equal c_out_mag[4] -variable emag equal c_out_mag[5] -variable tmag equal c_out_mag[6] - -thermo_style custom step time v_magnorm v_emag temp v_tmag etotal -thermo 50 - -compute outsp all property/atom spx spy spz sp fmx fmy fmz -dump 1 all custom 100 dump.lammpstrj type x y z c_outsp[1] c_outsp[2] c_outsp[3] c_outsp[4] c_outsp[5] c_outsp[6] c_outsp[7] - -run 1000 -Neighbor list info ... - update every 10 steps, delay 20 steps, check yes - max neighbors/atom: 2000, page size: 100000 - master list distance cutoff = 5.90375 - ghost atom cutoff = 5.90375 - binsize = 2.95187, bins = 6 6 6 - 2 neighbor lists, perpetual/occasional/extra = 2 0 0 - (1) pair eam/alloy, perpetual, half/full from (2) - attributes: half, newton on - pair build: halffull/newton - stencil: none - bin: none - (2) pair spin/exchange, perpetual - attributes: full, newton on - pair build: full/bin/atomonly - stencil: full/bin/3d - bin: standard -Per MPI rank memory allocation (min/avg/max) = 7.885 | 7.885 | 7.885 Mbytes -Step Time v_magnorm v_emag Temp v_tmag TotEng - 0 0 0.028733803 0.40997576 100.03408 -4775.0671 -2218.3068 - 50 0.005 0.028733807 0.070491717 101.47879 -28153.519 -2218.1371 - 100 0.01 0.028733815 -0.70937134 101.7311 2925.8177 -2217.7471 - 150 0.015 0.028733823 -1.853981 99.63039 1197.9339 -2217.1748 - 200 0.02 0.028733828 -3.2679239 94.850105 741.17431 -2216.4678 - 250 0.025 0.028733824 -4.863967 88.444584 550.36979 -2215.6698 - 300 0.03 0.028733807 -6.5763457 82.689581 449.78321 -2214.8136 - 350 0.035 0.028733783 -8.3489158 80.108798 384.32228 -2213.9273 - 400 0.04 0.028733763 -10.120216 82.374947 335.01545 -2213.0417 - 450 0.045 0.028733755 -11.828932 89.814597 296.88965 -2212.1873 - 500 0.05 0.028733762 -13.423712 101.39613 267.51686 -2211.39 - 550 0.055 0.028733783 -14.866724 115.07399 244.96012 -2210.6684 - 600 0.06 0.028733801 -16.135279 128.57849 229.33327 -2210.0342 - 650 0.065 0.028733804 -17.222838 140.22402 220.05718 -2209.4904 - 700 0.07 0.028733795 -18.154813 149.61295 212.95678 -2209.0244 - 750 0.075 0.028733781 -18.996903 157.5814 206.41327 -2208.6034 - 800 0.08 0.028733768 -19.804249 164.92075 203.88977 -2208.1997 - 850 0.085 0.028733752 -20.579151 171.67278 203.42363 -2207.8122 - 900 0.09 0.028733728 -21.294277 177.67238 199.84817 -2207.4547 - 950 0.095 0.028733715 -21.943945 183.2621 194.9614 -2207.1298 - 1000 0.1 0.02873374 -22.551277 188.99284 191.59796 -2206.8262 -Loop time of 4.30614 on 1 procs for 1000 steps with 500 atoms - -Performance: 2.006 ns/day, 11.961 hours/ns, 232.227 timesteps/s -100.0% CPU use with 1 MPI tasks x no OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 2.038 | 2.038 | 2.038 | 0.0 | 47.33 -Neigh | 0.01566 | 0.01566 | 0.01566 | 0.0 | 0.36 -Comm | 0.032802 | 0.032802 | 0.032802 | 0.0 | 0.76 -Output | 0.014146 | 0.014146 | 0.014146 | 0.0 | 0.33 -Modify | 2.2003 | 2.2003 | 2.2003 | 0.0 | 51.10 -Other | | 0.005288 | | | 0.12 - -Nlocal: 500 ave 500 max 500 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Nghost: 1956 ave 1956 max 1956 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Neighs: 19504 ave 19504 max 19504 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -FullNghs: 39008 ave 39008 max 39008 min -Histogram: 1 0 0 0 0 0 0 0 0 0 - -Total # of neighbors = 39008 -Ave neighs/atom = 78.016 -Neighbor list builds = 9 -Dangerous builds = 0 - -Please see the log.cite file for references relevant to this simulation - -Total wall time: 0:00:04 diff --git a/examples/SPIN/nickel/log.19Nov19.spin.nickel.g++.4 b/examples/SPIN/nickel/log.19Nov19.spin.nickel.g++.4 deleted file mode 100644 index 638ab5e63516510e9a53e5d15ff54577a8cf9d27..0000000000000000000000000000000000000000 --- a/examples/SPIN/nickel/log.19Nov19.spin.nickel.g++.4 +++ /dev/null @@ -1,136 +0,0 @@ -LAMMPS (30 Oct 2019) -# fcc nickel in a 3d periodic box - -clear -units metal -atom_style spin - -dimension 3 -boundary p p p - -# necessary for the serial algorithm (sametag) -atom_modify map array - -lattice fcc 3.524 -Lattice spacing in x,y,z = 3.524 3.524 3.524 -region box block 0.0 5.0 0.0 5.0 0.0 5.0 -create_box 1 box -Created orthogonal box = (0 0 0) to (17.62 17.62 17.62) - 1 by 2 by 2 MPI processor grid -create_atoms 1 box -Created 500 atoms - create_atoms CPU = 0.000733852 secs - -# setting mass, mag. moments, and interactions for cobalt - -mass 1 58.69 - -set group all spin/random 31 0.63 - 500 settings made for spin/random -#set group all spin 0.63 0.0 0.0 1.0 -velocity all create 100 4928459 rot yes dist gaussian - -pair_style hybrid/overlay eam/alloy spin/exchange 4.0 -pair_coeff * * eam/alloy Ni99.eam.alloy Ni -pair_coeff * * spin/exchange exchange 4.0 0.50 0.2280246862 1.229983475 - -neighbor 0.1 bin -neigh_modify every 10 check yes delay 20 - -fix 1 all precession/spin zeeman 0.0 0.0 0.0 1.0 -fix 2 all langevin/spin 0.0 0.0 21 - -fix 3 all nve/spin lattice moving -timestep 0.0001 - -# compute and output options - -compute out_mag all spin -compute out_pe all pe -compute out_ke all ke -compute out_temp all temp - -variable magz equal c_out_mag[3] -variable magnorm equal c_out_mag[4] -variable emag equal c_out_mag[5] -variable tmag equal c_out_mag[6] - -thermo_style custom step time v_magnorm v_emag temp v_tmag etotal -thermo 50 - -compute outsp all property/atom spx spy spz sp fmx fmy fmz -dump 1 all custom 100 dump.lammpstrj type x y z c_outsp[1] c_outsp[2] c_outsp[3] c_outsp[4] c_outsp[5] c_outsp[6] c_outsp[7] - -run 1000 -Neighbor list info ... - update every 10 steps, delay 20 steps, check yes - max neighbors/atom: 2000, page size: 100000 - master list distance cutoff = 5.90375 - ghost atom cutoff = 5.90375 - binsize = 2.95187, bins = 6 6 6 - 2 neighbor lists, perpetual/occasional/extra = 2 0 0 - (1) pair eam/alloy, perpetual, half/full from (2) - attributes: half, newton on - pair build: halffull/newton - stencil: none - bin: none - (2) pair spin/exchange, perpetual - attributes: full, newton on - pair build: full/bin/atomonly - stencil: full/bin/3d - bin: standard -Per MPI rank memory allocation (min/avg/max) = 7.799 | 7.799 | 7.799 Mbytes -Step Time v_magnorm v_emag Temp v_tmag TotEng - 0 0 0.028733803 0.40997576 100.03408 -4775.0671 -2218.1018 - 50 0.005 0.028733805 0.25324083 98.741633 -7863.8744 -2218.1018 - 100 0.01 0.028733812 -0.37320751 97.073875 5622.1863 -2218.1018 - 150 0.015 0.028733819 -1.3971549 94.073447 1625.0258 -2218.1018 - 200 0.02 0.028733825 -2.7238372 89.419944 919.37601 -2218.1018 - 250 0.025 0.028733829 -4.2684428 84.07494 652.18375 -2218.1018 - 300 0.03 0.028733824 -5.9636712 80.06368 512.89077 -2218.1018 - 350 0.035 0.02873381 -7.7386326 79.366702 422.24864 -2218.1018 - 400 0.04 0.028733802 -9.5148059 83.052751 357.60379 -2218.1018 - 450 0.045 0.028733806 -11.234935 91.282747 310.87776 -2218.1018 - 500 0.05 0.02873381 -12.875184 103.49836 275.0224 -2218.1018 - 550 0.055 0.028733808 -14.413473 118.16526 247.85208 -2218.1018 - 600 0.06 0.028733803 -15.812466 132.83837 230.67903 -2218.1018 - 650 0.065 0.028733808 -17.061311 145.41049 222.19476 -2218.1018 - 700 0.07 0.028733818 -18.181903 154.83414 219.42933 -2218.1018 - 750 0.075 0.028733823 -19.176259 160.58645 218.45231 -2218.1018 - 800 0.08 0.028733825 -20.035157 163.02829 214.86596 -2218.1018 - 850 0.085 0.028733825 -20.806548 164.4197 209.86881 -2218.1018 - 900 0.09 0.028733829 -21.571419 167.8571 205.79849 -2218.1018 - 950 0.095 0.028733825 -22.365879 175.00875 201.33088 -2218.1018 - 1000 0.1 0.028733821 -23.133464 184.68305 195.52912 -2218.1018 -Loop time of 2.47211 on 4 procs for 1000 steps with 500 atoms - -Performance: 3.495 ns/day, 6.867 hours/ns, 404.513 timesteps/s -99.9% CPU use with 4 MPI tasks x no OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0.5549 | 0.56708 | 0.58627 | 1.6 | 22.94 -Neigh | 0.0039728 | 0.0041007 | 0.0042598 | 0.2 | 0.17 -Comm | 0.087296 | 0.10802 | 0.11917 | 3.8 | 4.37 -Output | 0.0046923 | 0.0047188 | 0.0047917 | 0.1 | 0.19 -Modify | 1.7832 | 1.7862 | 1.7879 | 0.1 | 72.25 -Other | | 0.002016 | | | 0.08 - -Nlocal: 125 ave 139 max 112 min -Histogram: 1 0 1 0 0 0 1 0 0 1 -Nghost: 1099 ave 1112 max 1085 min -Histogram: 1 0 0 1 0 0 0 1 0 1 -Neighs: 4876 ave 5386 max 4426 min -Histogram: 1 0 0 1 0 1 0 0 0 1 -FullNghs: 9752 ave 10845 max 8737 min -Histogram: 1 0 1 0 0 0 1 0 0 1 - -Total # of neighbors = 39008 -Ave neighs/atom = 78.016 -Neighbor list builds = 9 -Dangerous builds = 0 - -Please see the log.cite file for references relevant to this simulation - -Total wall time: 0:00:02 diff --git a/examples/SPIN/nickel/log.19Nov19.spin.nickel_cubic.g++.1 b/examples/SPIN/nickel/log.19Nov19.spin.nickel_cubic.g++.1 deleted file mode 100644 index 4f3b94df5308dfb1a203e0647fefea78edabbafe..0000000000000000000000000000000000000000 --- a/examples/SPIN/nickel/log.19Nov19.spin.nickel_cubic.g++.1 +++ /dev/null @@ -1,138 +0,0 @@ -LAMMPS (30 Oct 2019) -# fcc nickel in a 3d periodic box - -clear -units metal -atom_style spin - -dimension 3 -boundary p p p - -# necessary for the serial algorithm (sametag) -atom_modify map array - -lattice fcc 3.524 -Lattice spacing in x,y,z = 3.524 3.524 3.524 -region box block 0.0 5.0 0.0 5.0 0.0 5.0 -create_box 1 box -Created orthogonal box = (0 0 0) to (17.62 17.62 17.62) - 1 by 1 by 1 MPI processor grid -create_atoms 1 box -Created 500 atoms - create_atoms CPU = 0.00109196 secs - -# setting mass, mag. moments, and interactions for cobalt - -mass 1 58.69 - -set group all spin/random 31 0.63 - 500 settings made for spin/random -#set group all spin 0.63 0.0 0.0 1.0 -velocity all create 100 4928459 rot yes dist gaussian - -pair_style hybrid/overlay eam/alloy spin/exchange 4.0 -pair_coeff * * eam/alloy Ni99.eam.alloy Ni -pair_coeff * * spin/exchange exchange 4.0 0.50 0.2280246862 1.229983475 - -neighbor 0.1 bin -neigh_modify every 10 check yes delay 20 - -fix 1 all precession/spin cubic -0.0001 0.0 1.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 1.0 zeeman 0.0 0.0 0.0 1.0 -fix_modify 1 energy yes -fix 2 all langevin/spin 0.0 0.0 21 - -fix 3 all nve/spin lattice moving -timestep 0.0001 - -# compute and output options - -compute out_mag all spin -compute out_pe all pe -compute out_ke all ke -compute out_temp all temp - -variable magz equal c_out_mag[3] -variable magnorm equal c_out_mag[4] -variable emag equal c_out_mag[5] -variable tmag equal c_out_mag[6] - -thermo_style custom step time v_magnorm v_emag temp v_tmag etotal -thermo 50 - -compute outsp all property/atom spx spy spz sp fmx fmy fmz -dump 1 all custom 50 dump.lammpstrj type x y z c_outsp[1] c_outsp[2] c_outsp[3] c_outsp[4] c_outsp[5] c_outsp[6] c_outsp[7] - -run 1000 -Neighbor list info ... - update every 10 steps, delay 20 steps, check yes - max neighbors/atom: 2000, page size: 100000 - master list distance cutoff = 5.90375 - ghost atom cutoff = 5.90375 - binsize = 2.95187, bins = 6 6 6 - 2 neighbor lists, perpetual/occasional/extra = 2 0 0 - (1) pair eam/alloy, perpetual, half/full from (2) - attributes: half, newton on - pair build: halffull/newton - stencil: none - bin: none - (2) pair spin/exchange, perpetual - attributes: full, newton on - pair build: full/bin/atomonly - stencil: full/bin/3d - bin: standard -Per MPI rank memory allocation (min/avg/max) = 7.885 | 7.885 | 7.885 Mbytes -Step Time v_magnorm v_emag Temp v_tmag TotEng - 0 0 0.028733803 0.455085 100.03408 -4301.853 -2218.2955 - 50 0.005 0.028732021 0.11535308 101.47887 -17203.944 -2218.1258 - 100 0.01 0.0287304 -0.665283 101.73105 3119.2267 -2217.7358 - 150 0.015 0.028729403 -1.8105707 99.629794 1226.3803 -2217.1636 - 200 0.02 0.028731067 -3.224763 94.849715 750.93124 -2216.4566 - 250 0.025 0.028732765 -4.8207784 88.447019 555.16456 -2215.6585 - 300 0.03 0.028728169 -6.5331538 82.697813 452.6101 -2214.8022 - 350 0.035 0.02871707 -8.3059526 80.122838 386.20109 -2213.9158 - 400 0.04 0.028706605 -10.077613 82.389555 336.36118 -2213.03 - 450 0.045 0.028701727 -11.78634 89.823176 297.91478 -2212.1758 - 500 0.05 0.028706691 -13.380919 101.39804 268.32933 -2211.3785 - 550 0.055 0.028714065 -14.824128 115.07511 245.62893 -2210.6569 - 600 0.06 0.028713691 -16.093505 128.58093 229.91054 -2210.0225 - 650 0.065 0.028713232 -17.181217 140.22137 220.57591 -2209.4787 - 700 0.07 0.02871245 -18.113035 149.60156 213.40077 -2209.0127 - 750 0.075 0.028712431 -18.954952 157.56849 206.80962 -2208.5916 - 800 0.08 0.02872489 -19.762756 164.91833 204.24742 -2208.1876 - 850 0.085 0.028733709 -20.538757 171.69348 203.73934 -2207.7993 - 900 0.09 0.028737031 -21.256095 177.71981 200.12043 -2207.4406 - 950 0.095 0.028743446 -21.908156 183.31613 195.23386 -2207.1149 - 1000 0.1 0.028751809 -22.516179 189.01672 191.90401 -2206.8111 -Loop time of 4.3661 on 1 procs for 1000 steps with 500 atoms - -Performance: 1.979 ns/day, 12.128 hours/ns, 229.037 timesteps/s -100.0% CPU use with 1 MPI tasks x no OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 2.0467 | 2.0467 | 2.0467 | 0.0 | 46.88 -Neigh | 0.015636 | 0.015636 | 0.015636 | 0.0 | 0.36 -Comm | 0.032918 | 0.032918 | 0.032918 | 0.0 | 0.75 -Output | 0.027737 | 0.027737 | 0.027737 | 0.0 | 0.64 -Modify | 2.2379 | 2.2379 | 2.2379 | 0.0 | 51.26 -Other | | 0.005233 | | | 0.12 - -Nlocal: 500 ave 500 max 500 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Nghost: 1956 ave 1956 max 1956 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Neighs: 19504 ave 19504 max 19504 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -FullNghs: 39008 ave 39008 max 39008 min -Histogram: 1 0 0 0 0 0 0 0 0 0 - -Total # of neighbors = 39008 -Ave neighs/atom = 78.016 -Neighbor list builds = 9 -Dangerous builds = 0 - - -Please see the log.cite file for references relevant to this simulation - -Total wall time: 0:00:04 diff --git a/examples/SPIN/nickel/log.19Nov19.spin.nickel_cubic.g++.4 b/examples/SPIN/nickel/log.19Nov19.spin.nickel_cubic.g++.4 deleted file mode 100644 index 1724ef9df8eafd81bf5397a226c9e2e2c7a010f0..0000000000000000000000000000000000000000 --- a/examples/SPIN/nickel/log.19Nov19.spin.nickel_cubic.g++.4 +++ /dev/null @@ -1,138 +0,0 @@ -LAMMPS (30 Oct 2019) -# fcc nickel in a 3d periodic box - -clear -units metal -atom_style spin - -dimension 3 -boundary p p p - -# necessary for the serial algorithm (sametag) -atom_modify map array - -lattice fcc 3.524 -Lattice spacing in x,y,z = 3.524 3.524 3.524 -region box block 0.0 5.0 0.0 5.0 0.0 5.0 -create_box 1 box -Created orthogonal box = (0 0 0) to (17.62 17.62 17.62) - 1 by 2 by 2 MPI processor grid -create_atoms 1 box -Created 500 atoms - create_atoms CPU = 0.000827074 secs - -# setting mass, mag. moments, and interactions for cobalt - -mass 1 58.69 - -set group all spin/random 31 0.63 - 500 settings made for spin/random -#set group all spin 0.63 0.0 0.0 1.0 -velocity all create 100 4928459 rot yes dist gaussian - -pair_style hybrid/overlay eam/alloy spin/exchange 4.0 -pair_coeff * * eam/alloy Ni99.eam.alloy Ni -pair_coeff * * spin/exchange exchange 4.0 0.50 0.2280246862 1.229983475 - -neighbor 0.1 bin -neigh_modify every 10 check yes delay 20 - -fix 1 all precession/spin cubic -0.0001 0.0 1.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 1.0 zeeman 0.0 0.0 0.0 1.0 -fix_modify 1 energy yes -fix 2 all langevin/spin 0.0 0.0 21 - -fix 3 all nve/spin lattice moving -timestep 0.0001 - -# compute and output options - -compute out_mag all spin -compute out_pe all pe -compute out_ke all ke -compute out_temp all temp - -variable magz equal c_out_mag[3] -variable magnorm equal c_out_mag[4] -variable emag equal c_out_mag[5] -variable tmag equal c_out_mag[6] - -thermo_style custom step time v_magnorm v_emag temp v_tmag etotal -thermo 50 - -compute outsp all property/atom spx spy spz sp fmx fmy fmz -dump 1 all custom 50 dump.lammpstrj type x y z c_outsp[1] c_outsp[2] c_outsp[3] c_outsp[4] c_outsp[5] c_outsp[6] c_outsp[7] - -run 1000 -Neighbor list info ... - update every 10 steps, delay 20 steps, check yes - max neighbors/atom: 2000, page size: 100000 - master list distance cutoff = 5.90375 - ghost atom cutoff = 5.90375 - binsize = 2.95187, bins = 6 6 6 - 2 neighbor lists, perpetual/occasional/extra = 2 0 0 - (1) pair eam/alloy, perpetual, half/full from (2) - attributes: half, newton on - pair build: halffull/newton - stencil: none - bin: none - (2) pair spin/exchange, perpetual - attributes: full, newton on - pair build: full/bin/atomonly - stencil: full/bin/3d - bin: standard -Per MPI rank memory allocation (min/avg/max) = 7.799 | 7.799 | 7.799 Mbytes -Step Time v_magnorm v_emag Temp v_tmag TotEng - 0 0 0.028733803 0.455085 100.03408 -4301.853 -2218.0905 - 50 0.005 0.028732088 0.2980989 98.74184 -6680.4308 -2218.0904 - 100 0.01 0.02873076 -0.32911738 97.074246 6374.7026 -2218.09 - 150 0.015 0.028730298 -1.3537059 94.073558 1676.9365 -2218.0897 - 200 0.02 0.028733079 -2.6807428 89.419616 934.03305 -2218.0895 - 250 0.025 0.028735725 -4.2256641 84.074249 658.72816 -2218.0893 - 300 0.03 0.028728939 -5.9209085 80.063263 516.58161 -2218.0893 - 350 0.035 0.028716731 -7.6957087 79.36782 424.59625 -2218.0893 - 400 0.04 0.02871114 -9.4720832 83.055773 359.18204 -2218.0893 - 450 0.045 0.02870879 -11.19254 91.28713 312.02076 -2218.0891 - 500 0.05 0.028708873 -12.832707 103.50343 275.92991 -2218.0892 - 550 0.055 0.028710315 -14.370603 118.16778 248.59763 -2218.0893 - 600 0.06 0.028707016 -15.769641 132.83264 231.2886 -2218.089 - 650 0.065 0.028706727 -17.018362 145.39247 222.70304 -2218.0888 - 700 0.07 0.028710482 -18.137792 154.80131 219.85838 -2218.0889 - 750 0.075 0.028705169 -19.130471 160.53663 218.83811 -2218.0892 - 800 0.08 0.028695336 -19.988452 162.95918 215.21456 -2218.089 - 850 0.085 0.028688393 -20.758389 164.33238 210.21496 -2218.0889 - 900 0.09 0.028684101 -21.521505 167.76167 206.14977 -2218.089 - 950 0.095 0.028684705 -22.314351 174.918 201.65878 -2218.0891 - 1000 0.1 0.028691284 -23.080026 184.60192 195.8385 -2218.0893 -Loop time of 2.5947 on 4 procs for 1000 steps with 500 atoms - -Performance: 3.330 ns/day, 7.207 hours/ns, 385.402 timesteps/s -99.9% CPU use with 4 MPI tasks x no OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0.56409 | 0.58139 | 0.605 | 2.0 | 22.41 -Neigh | 0.0039618 | 0.0041058 | 0.0042889 | 0.2 | 0.16 -Comm | 0.095324 | 0.12147 | 0.13892 | 4.8 | 4.68 -Output | 0.008945 | 0.0089793 | 0.0090477 | 0.0 | 0.35 -Modify | 1.8745 | 1.8765 | 1.8795 | 0.1 | 72.32 -Other | | 0.002217 | | | 0.09 - -Nlocal: 125 ave 139 max 112 min -Histogram: 1 0 1 0 0 0 1 0 0 1 -Nghost: 1099 ave 1112 max 1085 min -Histogram: 1 0 0 1 0 0 0 1 0 1 -Neighs: 4876 ave 5385 max 4427 min -Histogram: 1 0 0 1 0 1 0 0 0 1 -FullNghs: 9752 ave 10845 max 8737 min -Histogram: 1 0 1 0 0 0 1 0 0 1 - -Total # of neighbors = 39008 -Ave neighs/atom = 78.016 -Neighbor list builds = 9 -Dangerous builds = 0 - - -Please see the log.cite file for references relevant to this simulation - -Total wall time: 0:00:02 diff --git a/examples/SPIN/read_restart/in.spin.read_data b/examples/SPIN/read_restart/in.spin.read_data index e788ecf67eff4657a0cc7270178fd4fd59b0fddf..b2b55a9fcbc7b90669e472c2d2bc39545bf35aa1 100644 --- a/examples/SPIN/read_restart/in.spin.read_data +++ b/examples/SPIN/read_restart/in.spin.read_data @@ -35,8 +35,8 @@ variable magnorm equal c_out_mag[4] variable emag equal c_out_mag[5] variable tmag equal c_out_mag[6] -thermo 10 -thermo_style custom step time v_magnorm v_emag v_tmag temp etotal +thermo 20 +thermo_style custom step time v_magnorm pe v_emag v_tmag temp etotal thermo_modify format float %20.15g compute outsp all property/atom spx spy spz sp fmx fmy fmz diff --git a/examples/SPIN/read_restart/in.spin.restart b/examples/SPIN/read_restart/in.spin.restart index ccce25b2544a664875c98ac4e1db1e666fe1eb49..985da65eb484d586f99a9e2cccfe682934087a76 100644 --- a/examples/SPIN/read_restart/in.spin.restart +++ b/examples/SPIN/read_restart/in.spin.restart @@ -39,8 +39,8 @@ variable magnorm equal c_out_mag[4] variable emag equal c_out_mag[5] variable tmag equal c_out_mag[6] -thermo 10 -thermo_style custom step time v_magnorm v_emag v_tmag temp etotal +thermo 20 +thermo_style custom step time v_magnorm pe v_emag v_tmag temp etotal thermo_modify format float %20.15g compute outsp all property/atom spx spy spz sp fmx fmy fmz diff --git a/examples/SPIN/read_restart/in.spin.write_restart b/examples/SPIN/read_restart/in.spin.write_restart index c1271010937f37f2051240e4055b831657ef2987..19ab8e6b30abbe76bbcb7caf5b42a45985ef982a 100644 --- a/examples/SPIN/read_restart/in.spin.write_restart +++ b/examples/SPIN/read_restart/in.spin.write_restart @@ -44,7 +44,7 @@ variable magnorm equal c_out_mag[4] variable emag equal c_out_mag[5] variable tmag equal c_out_mag[6] -thermo_style custom step time v_magnorm v_emag temp etotal +thermo_style custom step time v_magnorm pe v_emag temp etotal thermo 100 compute outsp all property/atom spx spy spz sp fmx fmy fmz @@ -52,4 +52,3 @@ dump 100 all custom 1 dump.lammpstrj type x y z c_outsp[1] c_outsp[2] c_outsp[ run 1000 write_restart restart_hcp_cobalt.equil - diff --git a/examples/SPIN/read_restart/log.19Nov19.spin.read_data.g++.1 b/examples/SPIN/read_restart/log.14Apr20.spin.read_data.g++.1 similarity index 51% rename from examples/SPIN/read_restart/log.19Nov19.spin.read_data.g++.1 rename to examples/SPIN/read_restart/log.14Apr20.spin.read_data.g++.1 index d5c38a996701ca7544ee2752824422a97c32a0b0..4a744700f9fd7e350ecb22fdd212dffd494863ca 100644 --- a/examples/SPIN/read_restart/log.19Nov19.spin.read_data.g++.1 +++ b/examples/SPIN/read_restart/log.14Apr20.spin.read_data.g++.1 @@ -1,4 +1,6 @@ -LAMMPS (30 Oct 2019) +LAMMPS (19 Mar 2020) +OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (../comm.cpp:94) + using 1 OpenMP thread(s) per MPI task units metal dimension 3 boundary p p p @@ -12,7 +14,7 @@ read_data Norm_randXY_8x8x32.data 1 by 1 by 1 MPI processor grid reading atoms ... 8192 atoms - read_data CPU = 0.0127251 secs + read_data CPU = 0.022048 secs mass 1 58.93 @@ -41,8 +43,8 @@ variable magnorm equal c_out_mag[4] variable emag equal c_out_mag[5] variable tmag equal c_out_mag[6] -thermo 10 -thermo_style custom step time v_magnorm v_emag v_tmag temp etotal +thermo 20 +thermo_style custom step time v_magnorm pe v_emag v_tmag temp etotal thermo_modify format float %20.15g compute outsp all property/atom spx spy spz sp fmx fmy fmz @@ -66,33 +68,28 @@ Neighbor list info ... pair build: full/bin/atomonly stencil: full/bin/3d bin: standard -Per MPI rank memory allocation (min/avg/max) = 19.68 | 19.68 | 19.68 Mbytes -Step Time v_magnorm v_emag v_tmag Temp TotEng - 0 0 0.0177864461018737 -1323.65841279979 1274.398774669 0 -36558.7284872918 - 10 0.001 0.0177864363786085 -1323.66900862123 1270.76616762926 0.0100007025152235 -36558.7231900452 - 20 0.002 0.0177864377251544 -1323.70032173151 1259.90270462032 0.0394803272360477 -36558.7075350597 - 30 0.003 0.0177864511986563 -1323.75117991179 1243.50772254923 0.0871132837928349 -36558.6821082609 - 40 0.004 0.0177864729727686 -1323.81992477224 1223.91535595806 0.150986538096776 -36558.6477386289 - 50 0.005 0.017786495620418 -1323.90456907402 1203.45497846157 0.22877054554493 -36558.6054195788 - 60 0.006 0.0177865119365897 -1324.00293472823 1183.95496070422 0.317876389336898 -36558.556239967 - 70 0.007 0.0177865186121948 -1324.11277680481 1166.52445270059 0.415601818818485 -36558.5013220755 - 80 0.008 0.0177865171615599 -1324.23190710734 1151.59958937508 0.519276751090729 -36558.4417598279 - 90 0.009 0.0177865117923882 -1324.35831839963 1139.14485136813 0.626407059487507 -36558.3785566998 - 100 0.01 0.0177865063215865 -1324.49029089774 1128.88117273962 0.734797362055872 -36558.3125725035 -Loop time of 14.8985 on 1 procs for 100 steps with 8192 atoms - -Performance: 0.058 ns/day, 413.847 hours/ns, 6.712 timesteps/s -99.6% CPU use with 1 MPI tasks x no OpenMP threads +Per MPI rank memory allocation (min/avg/max) = 19.99 | 19.99 | 19.99 Mbytes +Step Time v_magnorm PotEng v_emag v_tmag Temp TotEng + 0 0 0.0177864461018737 -36558.7284872918 -661.829206399896 1274.398774669 0 -36558.7284872918 + 20 0.002 0.0177864377256184 -36558.7389378387 -661.839683504936 1259.94171978912 0.00986992693139795 -36558.7284878577 + 40 0.004 0.017786472977471 -36558.7684525639 -661.869582914286 1224.05894016152 0.0377451568363827 -36558.7284891299 + 60 0.006 0.0177865119543331 -36558.8126238543 -661.915330492427 1184.24369688088 0.0794631076347515 -36558.728490712 + 80 0.008 0.0177865172048059 -36558.8659242367 -661.972562482488 1152.05459929593 0.129803482511904 -36558.7284922233 + 100 0.01 0.0177865063752424 -36558.9229549739 -662.037138807935 1129.51470280479 0.183667498513087 -36558.7284933644 +Loop time of 14.3276 on 1 procs for 100 steps with 8192 atoms + +Performance: 0.060 ns/day, 397.988 hours/ns, 6.980 timesteps/s +99.7% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 4.5996 | 4.5996 | 4.5996 | 0.0 | 30.87 -Neigh | 3.6 | 3.6 | 3.6 | 0.0 | 24.16 -Comm | 0.057512 | 0.057512 | 0.057512 | 0.0 | 0.39 -Output | 2.4463 | 2.4463 | 2.4463 | 0.0 | 16.42 -Modify | 4.1766 | 4.1766 | 4.1766 | 0.0 | 28.03 -Other | | 0.01854 | | | 0.12 +Pair | 4.0409 | 4.0409 | 4.0409 | 0.0 | 28.20 +Neigh | 3.6219 | 3.6219 | 3.6219 | 0.0 | 25.28 +Comm | 0.055327 | 0.055327 | 0.055327 | 0.0 | 0.39 +Output | 2.4259 | 2.4259 | 2.4259 | 0.0 | 16.93 +Modify | 4.1688 | 4.1688 | 4.1688 | 0.0 | 29.10 +Other | | 0.01477 | | | 0.10 Nlocal: 8192 ave 8192 max 8192 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -110,4 +107,4 @@ Dangerous builds not checked Please see the log.cite file for references relevant to this simulation -Total wall time: 0:00:15 +Total wall time: 0:00:14 diff --git a/examples/SPIN/read_restart/log.19Nov19.spin.read_data.g++.4 b/examples/SPIN/read_restart/log.14Apr20.spin.read_data.g++.4 similarity index 51% rename from examples/SPIN/read_restart/log.19Nov19.spin.read_data.g++.4 rename to examples/SPIN/read_restart/log.14Apr20.spin.read_data.g++.4 index decd7f66de713e60b53f838854d2259bee0d94ea..6ce648abf35dabe4b4f685064d4e1e4337ddd072 100644 --- a/examples/SPIN/read_restart/log.19Nov19.spin.read_data.g++.4 +++ b/examples/SPIN/read_restart/log.14Apr20.spin.read_data.g++.4 @@ -1,4 +1,6 @@ -LAMMPS (30 Oct 2019) +LAMMPS (19 Mar 2020) +OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (../comm.cpp:94) + using 1 OpenMP thread(s) per MPI task units metal dimension 3 boundary p p p @@ -12,7 +14,7 @@ read_data Norm_randXY_8x8x32.data 1 by 1 by 4 MPI processor grid reading atoms ... 8192 atoms - read_data CPU = 0.0103889 secs + read_data CPU = 0.013634 secs mass 1 58.93 @@ -41,8 +43,8 @@ variable magnorm equal c_out_mag[4] variable emag equal c_out_mag[5] variable tmag equal c_out_mag[6] -thermo 10 -thermo_style custom step time v_magnorm v_emag v_tmag temp etotal +thermo 20 +thermo_style custom step time v_magnorm pe v_emag v_tmag temp etotal thermo_modify format float %20.15g compute outsp all property/atom spx spy spz sp fmx fmy fmz @@ -66,33 +68,28 @@ Neighbor list info ... pair build: full/bin/atomonly stencil: full/bin/3d bin: standard -Per MPI rank memory allocation (min/avg/max) = 8.422 | 8.508 | 8.751 Mbytes -Step Time v_magnorm v_emag v_tmag Temp TotEng - 0 0 0.0177864461018739 -1323.65841279979 1274.398774669 0 -37220.5576936996 - 10 0.001 0.0177864050983603 -1323.66900862096 1270.76618998865 0.0100007022583634 -37220.5576943555 - 20 0.002 0.0177863936833753 -1323.70032172864 1259.90276925185 0.0394803245313843 -37220.5576959254 - 30 0.003 0.0177864120892274 -1323.75117990111 1243.50783331745 0.087113273744231 -37220.5576982173 - 40 0.004 0.0177864533855652 -1323.8199247464 1223.91551103958 0.150986513868405 -37220.557701015 - 50 0.005 0.0177865078997919 -1323.90456902433 1203.45516787752 0.228770499151177 -37220.5577041159 - 60 0.006 0.0177865576955448 -1324.0029346455 1183.95517338662 0.317876312538184 -37220.5577073314 - 70 0.007 0.0177865860816348 -1324.11277667948 1166.52467969539 0.415601703342581 -37220.5577104775 - 80 0.008 0.0177865881669081 -1324.23190693081 1151.59982868413 0.519276589926842 -37220.557713381 - 90 0.009 0.0177865780982769 -1324.35831816525 1139.14509878533 0.626406847905203 -37220.557715901 - 100 0.01 0.017786564605084 -1324.49029060173 1128.88143013641 0.734797098519806 -37220.557717952 -Loop time of 4.32342 on 4 procs for 100 steps with 8192 atoms - -Performance: 0.200 ns/day, 120.095 hours/ns, 23.130 timesteps/s -99.8% CPU use with 4 MPI tasks x no OpenMP threads +Per MPI rank memory allocation (min/avg/max) = 8.961 | 9.047 | 9.29 Mbytes +Step Time v_magnorm PotEng v_emag v_tmag Temp TotEng + 0 0 0.0177864461018739 -36558.7284872997 -661.829206399894 1274.398774669 0 -36558.7284872997 + 20 0.002 0.0177863981273124 -36558.7389378386 -661.839683504262 1259.94177798388 0.00986992629371963 -36558.7284878582 + 40 0.004 0.0177864622701489 -36558.7684525586 -661.869582908114 1224.05908191331 0.0377451510479599 -36558.7284891308 + 60 0.006 0.0177865625037858 -36558.8126238326 -661.915330472361 1184.24389640891 0.0794630890177406 -36558.72849071 + 80 0.008 0.0177865898045059 -36558.8659241943 -661.972562439245 1152.05483020781 0.129803443061299 -36558.7284922226 + 100 0.01 0.017786565190115 -36558.9229549058 -662.037138735432 1129.51495182843 0.183667434061771 -36558.7284933646 +Loop time of 4.35911 on 4 procs for 100 steps with 8192 atoms + +Performance: 0.198 ns/day, 121.086 hours/ns, 22.940 timesteps/s +99.7% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 1.185 | 1.1925 | 1.1991 | 0.5 | 27.58 -Neigh | 0.93459 | 0.93934 | 0.94983 | 0.6 | 21.73 -Comm | 0.042462 | 0.059373 | 0.069249 | 4.1 | 1.37 -Output | 0.61823 | 0.63273 | 0.64528 | 1.3 | 14.63 -Modify | 1.4827 | 1.4955 | 1.5099 | 0.8 | 34.59 -Other | | 0.003968 | | | 0.09 +Pair | 1.0924 | 1.1043 | 1.1117 | 0.7 | 25.33 +Neigh | 0.93575 | 0.94926 | 0.98325 | 2.0 | 21.78 +Comm | 0.044663 | 0.088288 | 0.11128 | 8.7 | 2.03 +Output | 0.64199 | 0.6587 | 0.67226 | 1.4 | 15.11 +Modify | 1.5412 | 1.5535 | 1.5706 | 0.9 | 35.64 +Other | | 0.005046 | | | 0.12 Nlocal: 2048 ave 2061 max 2035 min Histogram: 1 0 0 1 0 0 1 0 0 1 diff --git a/examples/SPIN/read_restart/log.19Nov19.spin.restart.g++.1 b/examples/SPIN/read_restart/log.14Apr20.spin.restart.g++.1 similarity index 53% rename from examples/SPIN/read_restart/log.19Nov19.spin.restart.g++.1 rename to examples/SPIN/read_restart/log.14Apr20.spin.restart.g++.1 index c7544dedfad129b06f2f0a1bcdc9ee6454028fb4..652f7da4742f166c05d29cf6b2f1167886da1828 100644 --- a/examples/SPIN/read_restart/log.19Nov19.spin.restart.g++.1 +++ b/examples/SPIN/read_restart/log.14Apr20.spin.restart.g++.1 @@ -1,4 +1,6 @@ -LAMMPS (30 Oct 2019) +LAMMPS (19 Mar 2020) +OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (../comm.cpp:94) + using 1 OpenMP thread(s) per MPI task # start a spin-lattice simulation from a data file units metal atom_style spin @@ -10,13 +12,13 @@ boundary p p p atom_modify map array read_restart restart_hcp_cobalt.equil -WARNING: Restart file used different # of processors: 4 vs. 1 (../read_restart.cpp:742) +WARNING: Restart file used different # of processors: 4 vs. 1 (../read_restart.cpp:736) restoring atom style spin from restart orthogonal box = (0 0 0) to (12.5355 21.7121 20.4704) 1 by 1 by 1 MPI processor grid restoring pair style spin/exchange from restart 500 atoms - read_restart CPU = 0.000396967 secs + read_restart CPU = 0.00179696 secs # setting mass, mag. moments, and interactions @@ -47,8 +49,8 @@ variable magnorm equal c_out_mag[4] variable emag equal c_out_mag[5] variable tmag equal c_out_mag[6] -thermo 10 -thermo_style custom step time v_magnorm v_emag v_tmag temp etotal +thermo 20 +thermo_style custom step time v_magnorm pe v_emag v_tmag temp etotal thermo_modify format float %20.15g compute outsp all property/atom spx spy spz sp fmx fmy fmz @@ -72,33 +74,28 @@ Neighbor list info ... pair build: full/bin/atomonly stencil: full/bin/3d bin: standard -Per MPI rank memory allocation (min/avg/max) = 6.816 | 6.816 | 6.816 Mbytes -Step Time v_magnorm v_emag v_tmag Temp TotEng - 1000 0 0.108317262557656 -10.7649197733649 2538.4247868621 0 -2200.38241212222 - 1010 0.001 0.108317281393701 -10.7743543303502 2527.22692799144 0.146167392153018 -2200.3776953858 - 1020 0.002 0.108317318482233 -10.8022550516195 2509.47863584151 0.577304300153637 -2200.36374625815 - 1030 0.003 0.108317366763426 -10.8476659807571 2487.5614649682 1.27529086243277 -2200.34104256596 - 1040 0.004 0.108317415532953 -10.9092708333549 2463.97963921611 2.21443906326453 -2200.31024227618 - 1050 0.005 0.108317453851058 -10.98553406179 2440.70473642157 3.36396898978859 -2200.27211302201 - 1060 0.006 0.108317473584086 -11.0748008072977 2418.66477599297 4.68991434259399 -2200.22748216359 - 1070 0.007 0.108317471632913 -11.175325501803 2397.59274785581 6.15596240129541 -2200.17722244953 - 1080 0.008 0.108317450667394 -11.2852665400894 2376.32871275528 7.7237909750654 -2200.12225459883 - 1090 0.009 0.108317417687893 -11.4027246787047 2353.52646917989 9.35409156720424 -2200.06352807392 - 1100 0.01 0.108317381194814 -11.52585602487 2328.41541723561 11.0087303030003 -2200.0019646458 -Loop time of 0.964681 on 1 procs for 100 steps with 500 atoms - -Performance: 0.896 ns/day, 26.797 hours/ns, 103.661 timesteps/s -100.0% CPU use with 1 MPI tasks x no OpenMP threads +Per MPI rank memory allocation (min/avg/max) = 7.422 | 7.422 | 7.422 Mbytes +Step Time v_magnorm PotEng v_emag v_tmag Temp TotEng + 1000 0 0.108317262557656 -2200.38241212222 -5.38245988668244 2538.4247868621 0 -2200.38241212222 + 1020 0.002 0.108317318495042 -2200.39172132133 -5.39179331134703 2513.42968070374 0.144319963844279 -2200.38241256643 + 1040 0.004 0.108317415558744 -2200.41811580407 -5.418541526637 2478.87571728648 0.553516420254567 -2200.38241354532 + 1060 0.006 0.108317473592946 -2200.45801216332 -5.45990062771403 2449.77257658726 1.17203792179707 -2200.38241476526 + 1080 0.008 0.108317450745396 -2200.5068824087 -5.51245983698347 2427.25022669715 1.92968606059505 -2200.3824160902 + 1100 0.01 0.108317381572202 -2200.55976028827 -5.57250071024394 2400.86131889957 2.74946927499959 -2200.38241728649 +Loop time of 0.954493 on 1 procs for 100 steps with 500 atoms + +Performance: 0.905 ns/day, 26.514 hours/ns, 104.768 timesteps/s +100.0% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 0.29842 | 0.29842 | 0.29842 | 0.0 | 30.93 -Neigh | 0.25359 | 0.25359 | 0.25359 | 0.0 | 26.29 -Comm | 0.0069926 | 0.0069926 | 0.0069926 | 0.0 | 0.72 -Output | 0.14398 | 0.14398 | 0.14398 | 0.0 | 14.93 -Modify | 0.26045 | 0.26045 | 0.26045 | 0.0 | 27.00 -Other | | 0.001249 | | | 0.13 +Pair | 0.27043 | 0.27043 | 0.27043 | 0.0 | 28.33 +Neigh | 0.26148 | 0.26148 | 0.26148 | 0.0 | 27.40 +Comm | 0.0071123 | 0.0071123 | 0.0071123 | 0.0 | 0.75 +Output | 0.14169 | 0.14169 | 0.14169 | 0.0 | 14.84 +Modify | 0.2726 | 0.2726 | 0.2726 | 0.0 | 28.56 +Other | | 0.001178 | | | 0.12 Nlocal: 500 ave 500 max 500 min Histogram: 1 0 0 0 0 0 0 0 0 0 diff --git a/examples/SPIN/read_restart/log.19Nov19.spin.restart.g++.4 b/examples/SPIN/read_restart/log.14Apr20.spin.restart.g++.4 similarity index 53% rename from examples/SPIN/read_restart/log.19Nov19.spin.restart.g++.4 rename to examples/SPIN/read_restart/log.14Apr20.spin.restart.g++.4 index 6443d341cd06049525e3a8f1e9a46f09265bb24f..c22c672f6b82fdd030f3a971bc4161cdfc0562e8 100644 --- a/examples/SPIN/read_restart/log.19Nov19.spin.restart.g++.4 +++ b/examples/SPIN/read_restart/log.14Apr20.spin.restart.g++.4 @@ -1,4 +1,6 @@ -LAMMPS (30 Oct 2019) +LAMMPS (19 Mar 2020) +OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (../comm.cpp:94) + using 1 OpenMP thread(s) per MPI task # start a spin-lattice simulation from a data file units metal atom_style spin @@ -15,7 +17,7 @@ read_restart restart_hcp_cobalt.equil 1 by 2 by 2 MPI processor grid restoring pair style spin/exchange from restart 500 atoms - read_restart CPU = 0.000922918 secs + read_restart CPU = 0.00173593 secs # setting mass, mag. moments, and interactions @@ -46,8 +48,8 @@ variable magnorm equal c_out_mag[4] variable emag equal c_out_mag[5] variable tmag equal c_out_mag[6] -thermo 10 -thermo_style custom step time v_magnorm v_emag v_tmag temp etotal +thermo 20 +thermo_style custom step time v_magnorm pe v_emag v_tmag temp etotal thermo_modify format float %20.15g compute outsp all property/atom spx spy spz sp fmx fmy fmz @@ -71,33 +73,28 @@ Neighbor list info ... pair build: full/bin/atomonly stencil: full/bin/3d bin: standard -Per MPI rank memory allocation (min/avg/max) = 6.704 | 6.704 | 6.704 Mbytes -Step Time v_magnorm v_emag v_tmag Temp TotEng - 1000 0 0.108317262557656 -10.7649197733649 2538.4247868621 0 -2205.7648720085 - 1010 0.001 0.108317290362529 -10.7743543303489 2527.22680531097 0.146167392137698 -2205.76487255096 - 1020 0.002 0.108317316207642 -10.8022550521284 2509.47840782645 0.577304308061779 -2205.76487378396 - 1030 0.003 0.108317335980455 -10.8476659832667 2487.56119588937 1.27529090130452 -2205.76487555634 - 1040 0.004 0.108317347902639 -10.9092708400684 2463.97936529674 2.21443916694928 -2205.76487769286 - 1050 0.005 0.108317349786635 -10.9855340757384 2440.7044253165 3.36396920446814 -2205.76488005291 - 1060 0.006 0.108317342445881 -11.0748008315013 2418.66438763214 4.68991471343994 -2205.76488256723 - 1070 0.007 0.10831733355314 -11.1753255362286 2397.59228728929 6.15596292529133 -2205.76488520046 - 1080 0.008 0.108317320750099 -11.2852665775656 2376.32820919279 7.7237915384778 -2205.76488786888 - 1090 0.009 0.108317304079233 -11.402724701646 2353.52588586648 9.35409189724323 -2205.7648904133 - 1100 0.01 0.108317284409678 -11.5258560062539 2328.41472376239 11.0087299868288 -2205.76489265829 -Loop time of 0.410707 on 4 procs for 100 steps with 500 atoms - -Performance: 2.104 ns/day, 11.409 hours/ns, 243.483 timesteps/s -99.7% CPU use with 4 MPI tasks x no OpenMP threads +Per MPI rank memory allocation (min/avg/max) = 7.324 | 7.324 | 7.324 Mbytes +Step Time v_magnorm PotEng v_emag v_tmag Temp TotEng + 1000 0 0.108317262557656 -2200.38241212182 -5.38245988668244 2538.4247868621 0 -2200.38241212182 + 1020 0.002 0.108317316216432 -2200.39172132147 -5.39179331147409 2513.42945241007 0.14431996581917 -2200.38241256644 + 1040 0.004 0.108317347939802 -2200.41811580574 -5.41854152831072 2478.87544274124 0.553516446104432 -2200.38241354532 + 1060 0.006 0.108317342440309 -2200.45801216927 -5.45990063373049 2449.77218633122 1.17203801398165 -2200.38241476526 + 1080 0.008 0.108317320345284 -2200.50688241767 -5.51245984623572 2427.2497145488 1.92968619968329 -2200.3824160902 + 1100 0.01 0.10831728372281 -2200.55976028296 -5.57250070536486 2400.86059511731 2.74946919265255 -2200.38241728649 +Loop time of 0.405615 on 4 procs for 100 steps with 500 atoms + +Performance: 2.130 ns/day, 11.267 hours/ns, 246.539 timesteps/s +99.7% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 0.083043 | 0.083714 | 0.084202 | 0.1 | 20.38 -Neigh | 0.063158 | 0.064429 | 0.065314 | 0.3 | 15.69 -Comm | 0.012237 | 0.013588 | 0.014798 | 0.8 | 3.31 -Output | 0.039088 | 0.040653 | 0.042176 | 0.6 | 9.90 -Modify | 0.20645 | 0.20795 | 0.20945 | 0.2 | 50.63 -Other | | 0.0003724 | | | 0.09 +Pair | 0.075661 | 0.076798 | 0.077343 | 0.2 | 18.93 +Neigh | 0.063154 | 0.064974 | 0.066991 | 0.5 | 16.02 +Comm | 0.012538 | 0.013787 | 0.015151 | 0.8 | 3.40 +Output | 0.039155 | 0.040842 | 0.042502 | 0.6 | 10.07 +Modify | 0.20709 | 0.20883 | 0.21036 | 0.3 | 51.49 +Other | | 0.0003826 | | | 0.09 Nlocal: 125 ave 127 max 122 min Histogram: 1 0 0 0 1 0 0 0 0 2 diff --git a/examples/SPIN/read_restart/log.19Nov19.spin.write_restart.g++.1 b/examples/SPIN/read_restart/log.14Apr20.spin.write_restart.g++.1 similarity index 59% rename from examples/SPIN/read_restart/log.19Nov19.spin.write_restart.g++.1 rename to examples/SPIN/read_restart/log.14Apr20.spin.write_restart.g++.1 index 9dbe1a354805b687d5f66aaddb5f66027fa36a24..8ad14c55c05d2d4bf43f751df6c75bc175bdf745 100644 --- a/examples/SPIN/read_restart/log.19Nov19.spin.write_restart.g++.1 +++ b/examples/SPIN/read_restart/log.14Apr20.spin.write_restart.g++.1 @@ -1,4 +1,6 @@ -LAMMPS (30 Oct 2019) +LAMMPS (19 Mar 2020) +OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (../comm.cpp:94) + using 1 OpenMP thread(s) per MPI task # fcc cobalt in a 3d periodic box units metal @@ -18,7 +20,7 @@ Created orthogonal box = (0 0 0) to (12.5355 21.7121 20.4704) 1 by 1 by 1 MPI processor grid create_atoms 1 box Created 500 atoms - create_atoms CPU = 0.000552893 secs + create_atoms CPU = 0.000952005 secs # setting mass, mag. moments, and interactions for cobalt @@ -51,7 +53,7 @@ variable magnorm equal c_out_mag[4] variable emag equal c_out_mag[5] variable tmag equal c_out_mag[6] -thermo_style custom step time v_magnorm v_emag temp etotal +thermo_style custom step time v_magnorm pe v_emag temp etotal thermo 100 compute outsp all property/atom spx spy spz sp fmx fmy fmz @@ -71,32 +73,32 @@ Neighbor list info ... stencil: full/bin/3d bin: standard Per MPI rank memory allocation (min/avg/max) = 6.947 | 6.947 | 6.947 Mbytes -Step Time v_magnorm v_emag Temp TotEng - 0 0 0.076558814 1.7982359 0 0.89911794 - 100 0.01 0.077628154 0.73387834 0 0.36693917 - 200 0.02 0.076678996 -0.4048463 0 -0.20242315 - 300 0.03 0.079174837 -1.3519103 0 -0.67595514 - 400 0.04 0.085031632 -3.0345702 0 -1.5172851 - 500 0.05 0.08702747 -4.0853256 0 -2.0426628 - 600 0.06 0.087066482 -5.259549 0 -2.6297745 - 700 0.07 0.089788894 -6.629076 0 -3.314538 - 800 0.08 0.091699611 -8.0574087 0 -4.0287043 - 900 0.09 0.090038899 -9.2012019 0 -4.600601 - 1000 0.1 0.093257309 -10.470452 0 -5.2352261 -Loop time of 3.37852 on 1 procs for 1000 steps with 500 atoms - -Performance: 2.557 ns/day, 9.385 hours/ns, 295.987 timesteps/s -99.6% CPU use with 1 MPI tasks x no OpenMP threads +Step Time v_magnorm PotEng v_emag Temp TotEng + 0 0 0.076558814 0.89911794 0.89911794 0 0.89911794 + 100 0.01 0.077628154 0.36693917 0.36693917 0 0.36693917 + 200 0.02 0.076678996 -0.20242315 -0.20242315 0 -0.20242315 + 300 0.03 0.079174837 -0.67595514 -0.67595514 0 -0.67595514 + 400 0.04 0.085031632 -1.5172851 -1.5172851 0 -1.5172851 + 500 0.05 0.08702747 -2.0426628 -2.0426628 0 -2.0426628 + 600 0.06 0.087066482 -2.6297745 -2.6297745 0 -2.6297745 + 700 0.07 0.089788894 -3.314538 -3.314538 0 -3.314538 + 800 0.08 0.091699611 -4.0287043 -4.0287043 0 -4.0287043 + 900 0.09 0.090038899 -4.600601 -4.600601 0 -4.600601 + 1000 0.1 0.093257309 -5.2352261 -5.2352261 0 -5.2352261 +Loop time of 3.30071 on 1 procs for 1000 steps with 500 atoms + +Performance: 2.618 ns/day, 9.169 hours/ns, 302.965 timesteps/s +99.3% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 0.45808 | 0.45808 | 0.45808 | 0.0 | 13.56 +Pair | 0.3844 | 0.3844 | 0.3844 | 0.0 | 11.65 Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 0.019707 | 0.019707 | 0.019707 | 0.0 | 0.58 -Output | 1.3865 | 1.3865 | 1.3865 | 0.0 | 41.04 -Modify | 1.5106 | 1.5106 | 1.5106 | 0.0 | 44.71 -Other | | 0.003624 | | | 0.11 +Comm | 0.019863 | 0.019863 | 0.019863 | 0.0 | 0.60 +Output | 1.3844 | 1.3844 | 1.3844 | 0.0 | 41.94 +Modify | 1.5084 | 1.5084 | 1.5084 | 0.0 | 45.70 +Other | | 0.00367 | | | 0.11 Nlocal: 500 ave 500 max 500 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -113,7 +115,6 @@ Neighbor list builds = 0 Dangerous builds = 0 write_restart restart_hcp_cobalt.equil - Please see the log.cite file for references relevant to this simulation Total wall time: 0:00:03 diff --git a/examples/SPIN/read_restart/log.19Nov19.spin.write_restart.g++.4 b/examples/SPIN/read_restart/log.14Apr20.spin.write_restart.g++.4 similarity index 59% rename from examples/SPIN/read_restart/log.19Nov19.spin.write_restart.g++.4 rename to examples/SPIN/read_restart/log.14Apr20.spin.write_restart.g++.4 index cb9827460322a5edfb9b537bd771a6322255163b..c0c1ec130c9f0ca42f92fac4fd3a9f0c4cc61dff 100644 --- a/examples/SPIN/read_restart/log.19Nov19.spin.write_restart.g++.4 +++ b/examples/SPIN/read_restart/log.14Apr20.spin.write_restart.g++.4 @@ -1,4 +1,6 @@ -LAMMPS (30 Oct 2019) +LAMMPS (19 Mar 2020) +OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (../comm.cpp:94) + using 1 OpenMP thread(s) per MPI task # fcc cobalt in a 3d periodic box units metal @@ -18,7 +20,7 @@ Created orthogonal box = (0 0 0) to (12.5355 21.7121 20.4704) 1 by 2 by 2 MPI processor grid create_atoms 1 box Created 500 atoms - create_atoms CPU = 0.000751972 secs + create_atoms CPU = 0.000663042 secs # setting mass, mag. moments, and interactions for cobalt @@ -51,7 +53,7 @@ variable magnorm equal c_out_mag[4] variable emag equal c_out_mag[5] variable tmag equal c_out_mag[6] -thermo_style custom step time v_magnorm v_emag temp etotal +thermo_style custom step time v_magnorm pe v_emag temp etotal thermo 100 compute outsp all property/atom spx spy spz sp fmx fmy fmz @@ -71,32 +73,32 @@ Neighbor list info ... stencil: full/bin/3d bin: standard Per MPI rank memory allocation (min/avg/max) = 6.868 | 6.868 | 6.868 Mbytes -Step Time v_magnorm v_emag Temp TotEng - 0 0 0.076558814 1.7982359 0 1.7982359 - 100 0.01 0.078299981 0.88259584 0 0.88259584 - 200 0.02 0.081260508 -0.43484722 0 -0.43484722 - 300 0.03 0.081195603 -1.7408209 0 -1.7408209 - 400 0.04 0.087298495 -3.4139038 0 -3.4139038 - 500 0.05 0.087663924 -4.3766089 0 -4.3766089 - 600 0.06 0.091713683 -5.8534921 0 -5.8534921 - 700 0.07 0.093779119 -6.706628 0 -6.706628 - 800 0.08 0.097960611 -7.8688568 0 -7.8688568 - 900 0.09 0.10193463 -9.5888008 0 -9.5888008 - 1000 0.1 0.10831726 -10.76492 0 -10.76492 -Loop time of 1.70473 on 4 procs for 1000 steps with 500 atoms - -Performance: 5.068 ns/day, 4.735 hours/ns, 586.602 timesteps/s -99.6% CPU use with 4 MPI tasks x no OpenMP threads +Step Time v_magnorm PotEng v_emag Temp TotEng + 0 0 0.076558814 0.89911794 0.89911794 0 0.89911794 + 100 0.01 0.078299981 0.44129792 0.44129792 0 0.44129792 + 200 0.02 0.081260508 -0.21742361 -0.21742361 0 -0.21742361 + 300 0.03 0.081195603 -0.87041046 -0.87041046 0 -0.87041046 + 400 0.04 0.087298495 -1.7069519 -1.7069519 0 -1.7069519 + 500 0.05 0.087663924 -2.1883045 -2.1883045 0 -2.1883045 + 600 0.06 0.091713683 -2.9267461 -2.9267461 0 -2.9267461 + 700 0.07 0.093779119 -3.353314 -3.353314 0 -3.353314 + 800 0.08 0.097960611 -3.9344284 -3.9344284 0 -3.9344284 + 900 0.09 0.10193463 -4.7944004 -4.7944004 0 -4.7944004 + 1000 0.1 0.10831726 -5.3824599 -5.3824599 0 -5.3824599 +Loop time of 1.7839 on 4 procs for 1000 steps with 500 atoms + +Performance: 4.843 ns/day, 4.955 hours/ns, 560.569 timesteps/s +99.5% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 0.11636 | 0.11927 | 0.12069 | 0.5 | 7.00 +Pair | 0.10068 | 0.10749 | 0.11461 | 1.5 | 6.03 Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 0.049208 | 0.052445 | 0.057424 | 1.4 | 3.08 -Output | 0.38579 | 0.40345 | 0.4199 | 2.0 | 23.67 -Modify | 1.1138 | 1.1282 | 1.1436 | 1.1 | 66.18 -Other | | 0.001322 | | | 0.08 +Comm | 0.052378 | 0.062171 | 0.07177 | 2.8 | 3.49 +Output | 0.4054 | 0.42334 | 0.44025 | 2.0 | 23.73 +Modify | 1.174 | 1.1893 | 1.2043 | 1.1 | 66.67 +Other | | 0.001558 | | | 0.09 Nlocal: 125 ave 125 max 125 min Histogram: 4 0 0 0 0 0 0 0 0 0 @@ -113,7 +115,6 @@ Neighbor list builds = 0 Dangerous builds = 0 write_restart restart_hcp_cobalt.equil - Please see the log.cite file for references relevant to this simulation Total wall time: 0:00:01 diff --git a/examples/SPIN/read_restart/restart_hcp_cobalt.equil b/examples/SPIN/read_restart/restart_hcp_cobalt.equil new file mode 100644 index 0000000000000000000000000000000000000000..d7f92285db0bd7e3b4c36fcdf88d53180f491962 Binary files /dev/null and b/examples/SPIN/read_restart/restart_hcp_cobalt.equil differ diff --git a/examples/SPIN/run_spin_examples.sh b/examples/SPIN/run_spin_examples.sh index a71da82a04a8a5e03598363a7ca3faf27cffb844..432d70c2ba536bab6d0287ecfc6ea6bfce68e5a5 100755 --- a/examples/SPIN/run_spin_examples.sh +++ b/examples/SPIN/run_spin_examples.sh @@ -1,6 +1,6 @@ #!/bin/bash -DATE=19Nov19 +DATE=14Apr20 # bfo cd bfo/ diff --git a/examples/SPIN/run_spin_examples_serial.sh b/examples/SPIN/run_spin_examples_serial.sh new file mode 100755 index 0000000000000000000000000000000000000000..f367dfd8f494a63dc31cd19e141ef08af22d9ae1 --- /dev/null +++ b/examples/SPIN/run_spin_examples_serial.sh @@ -0,0 +1,120 @@ +#!/bin/bash + +DATE=21Fev20 + +# bfo +cd bfo/ +../../../src/lmp_serial -in in.spin.bfo +cp log.lammps log.${DATE}.spin.bfo.g++.1 +../../../src/lmp_serial -in in.spin.bfo +cp log.lammps log.${DATE}.spin.bfo.g++.4 +rm log.lammps log.cite dump*.lammpstrj +cd .. + +# fcc cobalt +cd cobalt_fcc/ +../../../src/lmp_serial -in in.spin.cobalt_fcc +cp log.lammps log.${DATE}.spin.cobalt_fcc.g++.1 +../../../src/lmp_serial -in in.spin.cobalt_fcc +cp log.lammps log.${DATE}.spin.cobalt_fcc.g++.4 +rm log.lammps log.cite dump*.lammpstrj +cd .. + +# hcp cobalt +cd cobalt_hcp/ +../../../src/lmp_serial -in in.spin.cobalt_hcp +cp log.lammps log.${DATE}.spin.cobalt_hcp.g++.1 +../../../src/lmp_serial -in in.spin.cobalt_hcp +cp log.lammps log.${DATE}.spin.cobalt_hcp.g++.4 +rm log.lammps log.cite dump*.lammpstrj +cd .. + +# dipole spin +cd dipole_spin/ +../../../src/lmp_serial -in in.spin.iron_dipole_cut +cp log.lammps log.${DATE}.spin.iron_dipole_cut.g++.1 +../../../src/lmp_serial -in in.spin.iron_dipole_cut +cp log.lammps log.${DATE}.spin.iron_dipole_cut.g++.4 +../../../src/lmp_serial -in in.spin.iron_dipole_ewald +cp log.lammps log.${DATE}.spin.iron_dipole_ewald.g++.1 +../../../src/lmp_serial -in in.spin.iron_dipole_ewald +cp log.lammps log.${DATE}.spin.iron_dipole_ewald.g++.4 +../../../src/lmp_serial -in in.spin.iron_dipole_pppm +cp log.lammps log.${DATE}.spin.iron_dipole_pppm.g++.1 +../../../src/lmp_serial -in in.spin.iron_dipole_pppm +cp log.lammps log.${DATE}.spin.iron_dipole_pppm.g++.4 +rm log.lammps log.cite dump*.lammpstrj +cd .. + +# bcc iron +cd iron/ +../../../src/lmp_serial -in in.spin.iron +cp log.lammps log.${DATE}.spin.iron.g++.1 +../../../src/lmp_serial -in in.spin.iron +cp log.lammps log.${DATE}.spin.iron.g++.4 +../../../src/lmp_serial -in in.spin.iron_cubic +cp log.lammps log.${DATE}.spin.iron_cubic.g++.1 +../../../src/lmp_serial -in in.spin.iron_cubic +cp log.lammps log.${DATE}.spin.iron_cubic.g++.4 +rm log.lammps log.cite dump*.lammpstrj +cd .. + +# fcc nickel +cd nickel/ +../../../src/lmp_serial -in in.spin.nickel +cp log.lammps log.${DATE}.spin.nickel.g++.1 +../../../src/lmp_serial -in in.spin.nickel +cp log.lammps log.${DATE}.spin.nickel.g++.4 +../../../src/lmp_serial -in in.spin.nickel_cubic +cp log.lammps log.${DATE}.spin.nickel_cubic.g++.1 +../../../src/lmp_serial -in in.spin.nickel_cubic +cp log.lammps log.${DATE}.spin.nickel_cubic.g++.4 +rm log.lammps log.cite dump*.lammpstrj +cd .. + +# read restart +cd read_restart/ +../../../src/lmp_serial -in in.spin.write_restart +cp log.lammps log.${DATE}.spin.write_restart.g++.1 +../../../src/lmp_serial -in in.spin.write_restart +cp log.lammps log.${DATE}.spin.write_restart.g++.4 +../../../src/lmp_serial -in in.spin.restart +cp log.lammps log.${DATE}.spin.restart.g++.1 +../../../src/lmp_serial -in in.spin.restart +cp log.lammps log.${DATE}.spin.restart.g++.4 +../../../src/lmp_serial -in in.spin.read_data +cp log.lammps log.${DATE}.spin.read_data.g++.1 +../../../src/lmp_serial -in in.spin.read_data +cp log.lammps log.${DATE}.spin.read_data.g++.4 +rm log.lammps log.cite dump*.lammpstrj +cd .. + +# setforce +cd setforce_spin/ +../../../src/lmp_serial -in in.spin.setforce +cp log.lammps log.${DATE}.spin.setforce.g++.1 +../../../src/lmp_serial -in in.spin.setforce +cp log.lammps log.${DATE}.spin.setforce.g++.4 +rm log.lammps log.cite dump*.lammpstrj +cd .. + +# spin minimizers +cd spinmin/ +../../../src/lmp_serial -in in.spin.bfo_min +cp log.lammps log.${DATE}.spin.bfo_min.g++.1 +../../../src/lmp_serial -in in.spin.bfo_min +cp log.lammps log.${DATE}.spin.bfo_min.g++.4 +../../../src/lmp_serial -in in.spin.bfo_min_cg +cp log.lammps log.${DATE}.spin.bfo_min_cg.g++.1 +../../../src/lmp_serial -in in.spin.bfo_min_cg +cp log.lammps log.${DATE}.spin.bfo_min_cg.g++.4 +../../../src/lmp_serial -in in.spin.bfo_min_lbfgs +cp log.lammps log.${DATE}.spin.bfo_min_lbfgs.g++.1 +../../../src/lmp_serial -in in.spin.bfo_min_lbfgs +cp log.lammps log.${DATE}.spin.bfo_min_lbfgs.g++.4 +../../../src/lmp_serial -in in.spin.iron_min +cp log.lammps log.${DATE}.spin.iron_min.g++.1 +../../../src/lmp_serial -in in.spin.iron_min +cp log.lammps log.${DATE}.spin.iron_min.g++.4 +rm log.lammps log.cite dump*.lammpstrj +cd .. diff --git a/examples/SPIN/setforce_spin/in.spin.setforce b/examples/SPIN/setforce_spin/in.spin.setforce index 0d65955a296b592f7403c3f2537cc9abcd5ef5b6..4edf70eb52d0f963a813be6bec297632923ca4f1 100644 --- a/examples/SPIN/setforce_spin/in.spin.setforce +++ b/examples/SPIN/setforce_spin/in.spin.setforce @@ -48,7 +48,7 @@ variable emag equal c_out_mag[5] variable tmag equal c_out_mag[6] thermo 100 -thermo_style custom step time v_magx v_magz v_magnorm v_tmag etotal +thermo_style custom step time v_magx v_magz v_magnorm v_tmag pe v_emag etotal thermo_modify format float %20.15g compute outsp all property/atom spx spy spz sp fmx fmy fmz diff --git a/examples/SPIN/setforce_spin/log.19Nov19.spin.setforce.g++.1 b/examples/SPIN/setforce_spin/log.14Apr20.spin.setforce.g++.1 similarity index 79% rename from examples/SPIN/setforce_spin/log.19Nov19.spin.setforce.g++.1 rename to examples/SPIN/setforce_spin/log.14Apr20.spin.setforce.g++.1 index ed5c037feb9f11dbb919924743cb96ee29ebfa10..ef5e86b0b3746acca22626e592bbfd88ad6cc830 100644 --- a/examples/SPIN/setforce_spin/log.19Nov19.spin.setforce.g++.1 +++ b/examples/SPIN/setforce_spin/log.14Apr20.spin.setforce.g++.1 @@ -1,4 +1,6 @@ -LAMMPS (30 Oct 2019) +LAMMPS (19 Mar 2020) +OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (../comm.cpp:94) + using 1 OpenMP thread(s) per MPI task units metal dimension 3 @@ -18,10 +20,10 @@ region reg1 block 0.0 10.0 0.0 5.0 0.0 1.0 region reg2 block 0.0 10.0 6.0 10.0 0.0 1.0 create_atoms 1 region reg1 Created 120 atoms - create_atoms CPU = 0.000998974 secs + create_atoms CPU = 0.000992775 secs create_atoms 2 region reg2 Created 80 atoms - create_atoms CPU = 4.1008e-05 secs + create_atoms CPU = 0.000215054 secs # setting mass, mag. moments, and interactions for bcc iron @@ -59,7 +61,7 @@ variable emag equal c_out_mag[5] variable tmag equal c_out_mag[6] thermo 100 -thermo_style custom step time v_magx v_magz v_magnorm v_tmag etotal +thermo_style custom step time v_magx v_magz v_magnorm v_tmag pe v_emag etotal thermo_modify format float %20.15g compute outsp all property/atom spx spy spz sp fmx fmy fmz @@ -68,7 +70,7 @@ dump 1 all custom 100 dump.lammpstrj type x y z c_outsp[1] c_outsp[2] c_outsp[ min_style spin min_modify alpha_damp 1.0 discrete_factor 20.0 minimize 1.0e-16 1.0e-16 1000 100 -WARNING: Using 'neigh_modify every 1 delay 0 check yes' setting during minimization (../min.cpp:177) +WARNING: Using 'neigh_modify every 1 delay 0 check yes' setting during minimization (../min.cpp:190) Neighbor list info ... update every 1 steps, delay 0 steps, check yes max neighbors/atom: 2000, page size: 100000 @@ -87,21 +89,21 @@ Neighbor list info ... stencil: none bin: none Per MPI rank memory allocation (min/avg/max) = 7.215 | 7.215 | 7.215 Mbytes -Step Time v_magx v_magz v_magnorm v_tmag TotEng - 0 0 0.000143282585570239 0.615515043943419 0.615726279597251 24.9364200982478 0.121881906963737 - 100 0.01 0.000616167502203097 0.594467364025194 0.594498630048783 0.00188964439583802 0.0371335982020527 - 200 0.02 0.000498981016106215 0.595175581059792 0.595218717456538 0.000158614984300385 0.036877233648055 - 300 0.03 0.000211899815837572 0.595357874794342 0.595402442288391 1.44454891242177e-05 0.0368548794182375 - 400 0.04 7.98967577397158e-05 0.595395828381057 0.595440657806237 1.50721782707597e-06 0.0368527556548781 - 500 0.05 2.9121648914103e-05 0.595403174462525 0.595448064489507 1.74330474543395e-07 0.0368525254239539 - 600 0.06 1.04772320898497e-05 0.595404457003426 0.595449362424563 2.12204214498221e-08 0.0368524982492743 - 700 0.07 3.74634771616422e-06 0.595404627382825 0.595449536940641 2.63852407890463e-09 0.036852494912626 - 800 0.08 1.33525617457914e-06 0.595404626884198 0.595449537611055 3.30772506699851e-10 0.0368524944963445 - 900 0.09 4.75054785504803e-07 0.595404613763238 0.595449524836571 4.15940445257144e-11 0.0368524944440918 - 1000 0.1 1.68843135202601e-07 0.59540460640039 0.595449517580793 5.23632581178917e-12 0.036852494437518 -Loop time of 0.0966749 on 1 procs for 1000 steps with 200 atoms - -100.0% CPU use with 1 MPI tasks x no OpenMP threads +Step Time v_magx v_magz v_magnorm v_tmag PotEng v_emag TotEng + 0 0 0.000143282585570239 0.615515043943419 0.615726279597251 24.9364200982478 0.121881906963737 0.121881906963737 0.121881906963737 + 100 0.01 0.000616167502203097 0.594467364025194 0.594498630048783 0.00188964439583802 0.0371335982020527 0.0371335982020522 0.0371335982020527 + 200 0.02 0.000498981016106215 0.595175581059792 0.595218717456538 0.000158614984300385 0.036877233648055 0.0368772336480544 0.036877233648055 + 300 0.03 0.000211899815837572 0.595357874794342 0.595402442288391 1.44454891242177e-05 0.0368548794182375 0.0368548794182369 0.0368548794182375 + 400 0.04 7.98967577397158e-05 0.595395828381057 0.595440657806237 1.50721782707597e-06 0.0368527556548781 0.0368527556548775 0.0368527556548781 + 500 0.05 2.9121648914103e-05 0.595403174462525 0.595448064489507 1.74330474543395e-07 0.0368525254239539 0.0368525254239533 0.0368525254239539 + 600 0.06 1.04772320898497e-05 0.595404457003426 0.595449362424563 2.12204214498221e-08 0.0368524982492743 0.0368524982492735 0.0368524982492743 + 700 0.07 3.74634771616422e-06 0.595404627382825 0.595449536940641 2.63852407890463e-09 0.036852494912626 0.0368524949126256 0.036852494912626 + 800 0.08 1.33525617457914e-06 0.595404626884198 0.595449537611055 3.30772506699851e-10 0.0368524944963445 0.0368524944963439 0.0368524944963445 + 900 0.09 4.75054785504803e-07 0.595404613763238 0.595449524836571 4.15940445257144e-11 0.0368524944440918 0.0368524944440912 0.0368524944440918 + 1000 0.1 1.68843135202601e-07 0.59540460640039 0.595449517580793 5.23632581178917e-12 0.036852494437518 0.0368524944375173 0.036852494437518 +Loop time of 0.093256 on 1 procs for 1000 steps with 200 atoms + +100.0% CPU use with 1 MPI tasks x 1 OpenMP threads Minimization stats: Stopping criterion = max iterations @@ -115,12 +117,12 @@ Minimization stats: MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 0.08679 | 0.08679 | 0.08679 | 0.0 | 89.77 +Pair | 0.08325 | 0.08325 | 0.08325 | 0.0 | 89.27 Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 7.2956e-05 | 7.2956e-05 | 7.2956e-05 | 0.0 | 0.08 -Output | 0.0033231 | 0.0033231 | 0.0033231 | 0.0 | 3.44 -Modify | 0.0022919 | 0.0022919 | 0.0022919 | 0.0 | 2.37 -Other | | 0.004197 | | | 4.34 +Comm | 6.032e-05 | 6.032e-05 | 6.032e-05 | 0.0 | 0.06 +Output | 0.0033138 | 0.0033138 | 0.0033138 | 0.0 | 3.55 +Modify | 0.0023961 | 0.0023961 | 0.0023961 | 0.0 | 2.57 +Other | | 0.004236 | | | 4.54 Nlocal: 200 ave 200 max 200 min Histogram: 1 0 0 0 0 0 0 0 0 0 diff --git a/examples/SPIN/setforce_spin/log.19Nov19.spin.setforce.g++.4 b/examples/SPIN/setforce_spin/log.14Apr20.spin.setforce.g++.4 similarity index 57% rename from examples/SPIN/setforce_spin/log.19Nov19.spin.setforce.g++.4 rename to examples/SPIN/setforce_spin/log.14Apr20.spin.setforce.g++.4 index 4ce1497957d374a4f43ca83d63b124997b0e2887..c99bad0b402d7e4f52a54248b0dc8089f7b16dae 100644 --- a/examples/SPIN/setforce_spin/log.19Nov19.spin.setforce.g++.4 +++ b/examples/SPIN/setforce_spin/log.14Apr20.spin.setforce.g++.4 @@ -1,4 +1,6 @@ -LAMMPS (30 Oct 2019) +LAMMPS (19 Mar 2020) +OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (../comm.cpp:94) + using 1 OpenMP thread(s) per MPI task units metal dimension 3 @@ -18,10 +20,10 @@ region reg1 block 0.0 10.0 0.0 5.0 0.0 1.0 region reg2 block 0.0 10.0 6.0 10.0 0.0 1.0 create_atoms 1 region reg1 Created 120 atoms - create_atoms CPU = 0.000770092 secs + create_atoms CPU = 0.000747204 secs create_atoms 2 region reg2 Created 80 atoms - create_atoms CPU = 7.9155e-05 secs + create_atoms CPU = 0.000154018 secs # setting mass, mag. moments, and interactions for bcc iron @@ -59,7 +61,7 @@ variable emag equal c_out_mag[5] variable tmag equal c_out_mag[6] thermo 100 -thermo_style custom step time v_magx v_magz v_magnorm v_tmag etotal +thermo_style custom step time v_magx v_magz v_magnorm v_tmag pe v_emag etotal thermo_modify format float %20.15g compute outsp all property/atom spx spy spz sp fmx fmy fmz @@ -68,7 +70,7 @@ dump 1 all custom 100 dump.lammpstrj type x y z c_outsp[1] c_outsp[2] c_outsp[ min_style spin min_modify alpha_damp 1.0 discrete_factor 20.0 minimize 1.0e-16 1.0e-16 1000 100 -WARNING: Using 'neigh_modify every 1 delay 0 check yes' setting during minimization (../min.cpp:177) +WARNING: Using 'neigh_modify every 1 delay 0 check yes' setting during minimization (../min.cpp:190) Neighbor list info ... update every 1 steps, delay 0 steps, check yes max neighbors/atom: 2000, page size: 100000 @@ -87,26 +89,26 @@ Neighbor list info ... stencil: none bin: none Per MPI rank memory allocation (min/avg/max) = 7.2 | 7.2 | 7.2 Mbytes -Step Time v_magx v_magz v_magnorm v_tmag TotEng - 0 0 0.000143282585570239 0.615515043943419 0.615726279597251 21.735436446264 0.251043691626527 - 100 0.01 -0.00116085697754605 0.590264559350799 0.590315072966953 0.00283413081085227 0.0846048989956832 - 200 0.02 -0.000147570523236238 0.5896197627388 0.589686497206689 0.000451051163122381 0.0839054390713705 - 300 0.03 2.64982966536902e-05 0.59002969475615 0.590102003120244 5.22539631503911e-05 0.0838351677819014 - 400 0.04 1.77805448780033e-05 0.590195117338991 0.590268726215095 4.46490059775722e-06 0.0838382933245032 - 500 0.05 6.71566571038784e-06 0.590243842081075 0.590317756995865 3.63227563542099e-07 0.0838411433937997 - 600 0.06 2.2410340743112e-06 0.590257551861528 0.590331542128336 2.99360370345601e-08 0.0838420708305252 - 700 0.07 7.12179152897591e-07 0.5902614042958 0.590335413637884 2.51559188415894e-09 0.0838423375091767 - 800 0.08 2.20574733079126e-07 0.590262494529884 0.590336508799302 2.14455748236281e-10 0.0838424126463497 - 900 0.09 6.72564339365689e-08 0.590262805532644 0.590336821097688 1.84495767133404e-11 0.0838424338620728 - 1000 0.1 2.03001940390912e-08 0.590262894882646 0.590336910794094 1.5958531383517e-12 0.0838424398944951 -Loop time of 0.0617704 on 4 procs for 1000 steps with 200 atoms - -98.7% CPU use with 4 MPI tasks x no OpenMP threads +Step Time v_magx v_magz v_magnorm v_tmag PotEng v_emag TotEng + 0 0 0.000143282585570239 0.615515043943419 0.615726279597251 24.9364200982478 0.121881906963737 0.121881906963737 0.121881906963737 + 100 0.01 0.000616167502203098 0.594467364025194 0.594498630048784 0.00188964439583802 0.0371335982020525 0.037133598202052 0.0371335982020525 + 200 0.02 0.000498981016106215 0.595175581059791 0.595218717456538 0.000158614984300385 0.0368772336480548 0.0368772336480543 0.0368772336480548 + 300 0.03 0.000211899815837572 0.595357874794342 0.595402442288391 1.44454891242177e-05 0.0368548794182373 0.0368548794182367 0.0368548794182373 + 400 0.04 7.9896757739716e-05 0.595395828381057 0.595440657806237 1.50721782707597e-06 0.0368527556548779 0.0368527556548773 0.0368527556548779 + 500 0.05 2.91216489141033e-05 0.595403174462525 0.595448064489507 1.74330474543395e-07 0.0368525254239537 0.0368525254239531 0.0368525254239537 + 600 0.06 1.04772320898493e-05 0.595404457003426 0.595449362424563 2.12204214498221e-08 0.036852498249274 0.0368524982492735 0.036852498249274 + 700 0.07 3.74634771616408e-06 0.595404627382825 0.59544953694064 2.63852407890464e-09 0.0368524949126259 0.0368524949126254 0.0368524949126259 + 800 0.08 1.33525617457997e-06 0.595404626884198 0.595449537611055 3.30772506699851e-10 0.0368524944963442 0.0368524944963437 0.0368524944963442 + 900 0.09 4.75054785504803e-07 0.595404613763238 0.595449524836571 4.15940445257144e-11 0.0368524944440915 0.036852494444091 0.0368524944440915 + 1000 0.1 1.68843135202462e-07 0.59540460640039 0.595449517580793 5.23632581178917e-12 0.0368524944375178 0.0368524944375172 0.0368524944375178 +Loop time of 0.041718 on 4 procs for 1000 steps with 200 atoms + +97.4% CPU use with 4 MPI tasks x 1 OpenMP threads Minimization stats: Stopping criterion = max iterations Energy initial, next-to-last, final = - 0.251043691627 0.0838424398641 0.0838424398945 + 0.121881906964 0.0368524944375 0.0368524944375 Force two-norm initial, final = 0 0 Force max component initial, final = 0 0 Final line search alpha, max atom move = 0 0 @@ -115,12 +117,12 @@ Minimization stats: MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 0.023753 | 0.029762 | 0.035936 | 3.3 | 48.18 +Pair | 0.020462 | 0.021665 | 0.024967 | 1.3 | 51.93 Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 0.011783 | 0.019131 | 0.025404 | 4.3 | 30.97 -Output | 0.0019517 | 0.0019774 | 0.0020368 | 0.1 | 3.20 -Modify | 0.0006361 | 0.00087249 | 0.0011525 | 0.0 | 1.41 -Other | | 0.01003 | | | 16.23 +Comm | 0.0074174 | 0.010855 | 0.012527 | 2.0 | 26.02 +Output | 0.0012774 | 0.0012916 | 0.0013213 | 0.0 | 3.10 +Modify | 0.00056291 | 0.00068498 | 0.00096655 | 0.0 | 1.64 +Other | | 0.007222 | | | 17.31 Nlocal: 50 ave 50 max 50 min Histogram: 4 0 0 0 0 0 0 0 0 0 diff --git a/examples/SPIN/spinmin/log.19Nov19.spin.bfo_min.g++.1 b/examples/SPIN/spinmin/log.14Apr20.spin.bfo_min.g++.1 similarity index 54% rename from examples/SPIN/spinmin/log.19Nov19.spin.bfo_min.g++.1 rename to examples/SPIN/spinmin/log.14Apr20.spin.bfo_min.g++.1 index 61b6ad87006857e2aff6cb03a0844c34c83a5e29..49a5f4dd3fd58993ec8776c57e4395385dfb0ef2 100644 --- a/examples/SPIN/spinmin/log.19Nov19.spin.bfo_min.g++.1 +++ b/examples/SPIN/spinmin/log.14Apr20.spin.bfo_min.g++.1 @@ -1,4 +1,6 @@ -LAMMPS (30 Oct 2019) +LAMMPS (19 Mar 2020) +OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (../comm.cpp:94) + using 1 OpenMP thread(s) per MPI task # bfo in a 3d periodic box units metal @@ -17,7 +19,7 @@ Created orthogonal box = (0 0 0) to (134.64 134.64 19.8) 1 by 1 by 1 MPI processor grid create_atoms 1 box Created 5780 atoms - create_atoms CPU = 0.00107217 secs + create_atoms CPU = 0.00207901 secs # setting mass, mag. moments, and interactions for bcc iron @@ -60,10 +62,10 @@ dump 1 all custom 50 dump.lammpstrj type x y z c_outsp[1] c_outsp[2] c_outsp[3 min_style spin min_modify alpha_damp 1.0 discrete_factor 10.0 minimize 1.0e-10 0.0 1000 100 -WARNING: Using 'neigh_modify every 1 delay 0 check yes' setting during minimization (../min.cpp:177) -WARNING: Using spin pair style without nve/spin or neb/spin (../pair_spin.cpp:87) -WARNING: Using spin pair style without nve/spin or neb/spin (../pair_spin.cpp:87) -WARNING: Using spin pair style without nve/spin or neb/spin (../pair_spin.cpp:87) +WARNING: Using 'neigh_modify every 1 delay 0 check yes' setting during minimization (../min.cpp:190) +WARNING: Using spin pair style without nve/spin or neb/spin (../pair_spin.cpp:88) +WARNING: Using spin pair style without nve/spin or neb/spin (../pair_spin.cpp:88) +WARNING: Using spin pair style without nve/spin or neb/spin (../pair_spin.cpp:88) Neighbor list info ... update every 1 steps, delay 0 steps, check yes max neighbors/atom: 2000, page size: 100000 @@ -88,30 +90,30 @@ Neighbor list info ... bin: none Per MPI rank memory allocation (min/avg/max) = 8.331 | 8.331 | 8.331 Mbytes Step Time v_magnorm v_emag v_tmag Temp TotEng - 0 0 0.0100717228668283 -0.163834417271778 14831.3069413956 0 -0.0819172086358848 - 50 0.005 0.000106105812337003 -128.307447484203 0.104264818055985 0 -64.1537237421011 - 100 0.01 7.95347901119144e-06 -131.449389798071 0.0221943604064967 0 -65.7246948990356 - 150 0.015 5.63006161138875e-07 -132.296453030419 0.0085472877724348 0 -66.1482265152089 - 200 0.02 5.07390677383517e-07 -132.622857703805 0.00361380451198708 0 -66.3114288519012 - 250 0.025 3.28458336892231e-07 -132.774411992703 0.00187753161968493 0 -66.3872059963511 - 300 0.03 1.93294839202864e-07 -132.861283726084 0.00121374398924599 0 -66.4306418630428 - 350 0.035 1.13872157437693e-07 -132.923137019136 0.000954736871701507 0 -66.4615685095675 - 400 0.04 6.42075545620808e-08 -132.975239148591 0.000854064736183609 0 -66.4876195742954 - 450 0.045 3.44210513403008e-08 -133.023523287306 0.000812909459005007 0 -66.5117616436536 - 500 0.05 1.80394981485933e-08 -133.070071976252 0.000789742875305133 0 -66.5350359881254 - 550 0.055 9.54697157105863e-09 -133.11541233939 0.000769860218895372 0 -66.5577061696963 - 600 0.06 5.22455110720346e-09 -133.159676447906 0.000752941158466282 0 -66.5798382239526 - 650 0.065 2.95172977724016e-09 -133.203196195612 0.000745065216626277 0 -66.6015980978057 - 700 0.07 1.6727567441294e-09 -133.246696814329 0.000752898926000619 0 -66.6233484071653 - 750 0.075 9.17127001723567e-10 -133.291227007554 0.000780491405791262 0 -66.6456135037769 - 800 0.08 4.72669535949609e-10 -133.337962593396 0.000827942834401386 0 -66.6689812966976 - 850 0.085 2.25696738407094e-10 -133.387945245851 0.000890246383931885 0 -66.6939726229243 - 900 0.09 1.0030717061716e-10 -133.441737087546 0.000955403731484674 0 -66.720868543773 - 950 0.095 4.19867626359036e-11 -133.498969798312 0.00100352240545389 0 -66.7494848991554 - 1000 0.1 1.64283478182092e-11 -133.557979904763 0.00101162410316333 0 -66.7789899523816 -Loop time of 9.23057 on 1 procs for 1000 steps with 5780 atoms - -99.9% CPU use with 1 MPI tasks x no OpenMP threads + 0 0 0.0100717228668283 -0.0819172086358897 14831.3069413956 0 -0.0819172086358848 + 50 0.005 0.000106105812337003 -64.1537237421016 0.104264818055985 0 -64.1537237421011 + 100 0.01 7.95347901119144e-06 -65.7246948990358 0.0221943604064967 0 -65.7246948990356 + 150 0.015 5.63006161138875e-07 -66.1482265152101 0.0085472877724348 0 -66.1482265152089 + 200 0.02 5.07390677383517e-07 -66.3114288519027 0.00361380451198708 0 -66.3114288519012 + 250 0.025 3.28458336892231e-07 -66.3872059963515 0.00187753161968493 0 -66.3872059963511 + 300 0.03 1.93294839202864e-07 -66.430641863042 0.00121374398924599 0 -66.4306418630428 + 350 0.035 1.13872157437693e-07 -66.461568509568 0.000954736871701507 0 -66.4615685095675 + 400 0.04 6.42075545620808e-08 -66.4876195742958 0.000854064736183609 0 -66.4876195742954 + 450 0.045 3.44210513403008e-08 -66.5117616436528 0.000812909459005007 0 -66.5117616436536 + 500 0.05 1.80394981485933e-08 -66.535035988126 0.000789742875305133 0 -66.5350359881254 + 550 0.055 9.54697157105863e-09 -66.5577061696949 0.000769860218895372 0 -66.5577061696963 + 600 0.06 5.22455110720346e-09 -66.5798382239523 0.000752941158466282 0 -66.5798382239526 + 650 0.065 2.95172977724016e-09 -66.6015980978057 0.000745065216626277 0 -66.6015980978057 + 700 0.07 1.6727567441294e-09 -66.6233484071647 0.000752898926000619 0 -66.6233484071653 + 750 0.075 9.17127001723567e-10 -66.6456135037774 0.000780491405791262 0 -66.6456135037769 + 800 0.08 4.72669535949609e-10 -66.6689812966982 0.000827942834401386 0 -66.6689812966976 + 850 0.085 2.25696738407094e-10 -66.6939726229253 0.000890246383931885 0 -66.6939726229243 + 900 0.09 1.0030717061716e-10 -66.7208685437728 0.000955403731484674 0 -66.720868543773 + 950 0.095 4.19867626359036e-11 -66.7494848991559 0.00100352240545389 0 -66.7494848991554 + 1000 0.1 1.64283478182092e-11 -66.778989952382 0.00101162410316333 0 -66.7789899523816 +Loop time of 8.81793 on 1 procs for 1000 steps with 5780 atoms + +100.0% CPU use with 1 MPI tasks x 1 OpenMP threads Minimization stats: Stopping criterion = max iterations @@ -125,12 +127,12 @@ Minimization stats: MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 8.7576 | 8.7576 | 8.7576 | 0.0 | 94.88 +Pair | 8.3388 | 8.3388 | 8.3388 | 0.0 | 94.57 Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 0.023815 | 0.023815 | 0.023815 | 0.0 | 0.26 -Output | 0.31665 | 0.31665 | 0.31665 | 0.0 | 3.43 -Modify | 0.029446 | 0.029446 | 0.029446 | 0.0 | 0.32 -Other | | 0.1031 | | | 1.12 +Comm | 0.023951 | 0.023951 | 0.023951 | 0.0 | 0.27 +Output | 0.3172 | 0.3172 | 0.3172 | 0.0 | 3.60 +Modify | 0.034405 | 0.034405 | 0.034405 | 0.0 | 0.39 +Other | | 0.1036 | | | 1.17 Nlocal: 5780 ave 5780 max 5780 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -145,4 +147,4 @@ Total # of neighbors = 92480 Ave neighs/atom = 16 Neighbor list builds = 0 Dangerous builds = 0 -Total wall time: 0:00:09 +Total wall time: 0:00:08 diff --git a/examples/SPIN/spinmin/log.19Nov19.spin.bfo_min.g++.4 b/examples/SPIN/spinmin/log.14Apr20.spin.bfo_min.g++.4 similarity index 51% rename from examples/SPIN/spinmin/log.19Nov19.spin.bfo_min.g++.4 rename to examples/SPIN/spinmin/log.14Apr20.spin.bfo_min.g++.4 index efc4628b9e578675e85718aa03e47393f13ce723..6ffa5eb86139ecf243dd33ec4eae72469f6c997d 100644 --- a/examples/SPIN/spinmin/log.19Nov19.spin.bfo_min.g++.4 +++ b/examples/SPIN/spinmin/log.14Apr20.spin.bfo_min.g++.4 @@ -1,4 +1,6 @@ -LAMMPS (30 Oct 2019) +LAMMPS (19 Mar 2020) +OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (../comm.cpp:94) + using 1 OpenMP thread(s) per MPI task # bfo in a 3d periodic box units metal @@ -17,7 +19,7 @@ Created orthogonal box = (0 0 0) to (134.64 134.64 19.8) 2 by 2 by 1 MPI processor grid create_atoms 1 box Created 5780 atoms - create_atoms CPU = 0.00102711 secs + create_atoms CPU = 0.00117207 secs # setting mass, mag. moments, and interactions for bcc iron @@ -60,10 +62,10 @@ dump 1 all custom 50 dump.lammpstrj type x y z c_outsp[1] c_outsp[2] c_outsp[3 min_style spin min_modify alpha_damp 1.0 discrete_factor 10.0 minimize 1.0e-10 0.0 1000 100 -WARNING: Using 'neigh_modify every 1 delay 0 check yes' setting during minimization (../min.cpp:177) -WARNING: Using spin pair style without nve/spin or neb/spin (../pair_spin.cpp:87) -WARNING: Using spin pair style without nve/spin or neb/spin (../pair_spin.cpp:87) -WARNING: Using spin pair style without nve/spin or neb/spin (../pair_spin.cpp:87) +WARNING: Using 'neigh_modify every 1 delay 0 check yes' setting during minimization (../min.cpp:190) +WARNING: Using spin pair style without nve/spin or neb/spin (../pair_spin.cpp:88) +WARNING: Using spin pair style without nve/spin or neb/spin (../pair_spin.cpp:88) +WARNING: Using spin pair style without nve/spin or neb/spin (../pair_spin.cpp:88) Neighbor list info ... update every 1 steps, delay 0 steps, check yes max neighbors/atom: 2000, page size: 100000 @@ -88,35 +90,35 @@ Neighbor list info ... bin: none Per MPI rank memory allocation (min/avg/max) = 7.788 | 7.788 | 7.788 Mbytes Step Time v_magnorm v_emag v_tmag Temp TotEng - 0 0 0.0100717228668283 -0.162177519662199 14970.709092345 0 -0.157514482753586 - 50 0.005 0.000134061770654521 -128.226118665465 0.102634444037434 0 -128.286182424672 - 100 0.01 7.67769618983817e-06 -131.374599259781 0.0222596977749883 0 -131.428418504308 - 150 0.015 6.02904602224806e-07 -132.224372015825 0.00974271828169071 0 -132.273190134602 - 200 0.02 6.50197247050491e-07 -132.573383315469 0.00374227079785921 0 -132.617565541034 - 250 0.025 4.4053438575152e-07 -132.729743470508 0.0019334097282578 0 -132.770567114743 - 300 0.03 2.78356316513274e-07 -132.819255077939 0.00124938353773497 0 -132.857574876413 - 350 0.035 1.79684785125388e-07 -132.882714312877 0.000973166792896165 0 -132.919261229742 - 400 0.04 1.10949878459078e-07 -132.935357748213 0.000852955460997588 0 -132.970786605995 - 450 0.045 6.49064465617817e-08 -132.982991683198 0.000790741148426224 0 -133.017887798927 - 500 0.05 3.70514666559952e-08 -133.027689959766 0.00074794913288275 0 -133.06256199189 - 550 0.055 2.12433814830885e-08 -133.070148920145 0.00071263732127117 0 -133.105417593745 - 600 0.06 1.24676590171361e-08 -133.110772798503 0.000685051841817325 0 -133.14676746928 - 650 0.065 7.53611859129351e-09 -133.150126417754 0.000669443562813208 0 -133.187094895708 - 700 0.07 4.63539338651321e-09 -133.189024073453 0.000669619853917953 0 -133.227152349439 - 750 0.075 2.82145833974835e-09 -133.22844627026 0.000687338035086961 0 -133.267881315198 - 800 0.08 1.64378151566173e-09 -133.269413776733 0.000722197692175127 0 -133.310284062463 - 850 0.085 8.883310104497e-10 -133.312863108454 0.000771645398804486 0 -133.355293578462 - 900 0.09 4.33874801863461e-10 -133.359507749172 0.000830255722998156 0 -133.403626236688 - 950 0.095 1.8812784924272e-10 -133.409630495316 0.000888348219681112 0 -133.455560507802 - 1000 0.1 7.17748875671948e-11 -133.462806227865 0.000931427722404681 0 -133.510640942679 -Loop time of 2.53419 on 4 procs for 1000 steps with 5780 atoms - -99.9% CPU use with 4 MPI tasks x no OpenMP threads + 0 0 0.0100717228668283 -0.0819172086358889 14831.3069413956 0 -0.0819172086358937 + 50 0.005 0.000106105812337003 -64.1537237421014 0.104264818055985 0 -64.1537237421015 + 100 0.01 7.95347901119157e-06 -65.7246948990355 0.0221943604064966 0 -65.7246948990356 + 150 0.015 5.63006161138918e-07 -66.1482265152097 0.0085472877724348 0 -66.1482265152095 + 200 0.02 5.07390677383159e-07 -66.3114288519023 0.00361380451198709 0 -66.3114288519024 + 250 0.025 3.28458336892466e-07 -66.3872059963513 0.00187753161968492 0 -66.3872059963514 + 300 0.03 1.93294839202718e-07 -66.4306418630421 0.00121374398924599 0 -66.4306418630421 + 350 0.035 1.1387215743759e-07 -66.461568509568 0.00095473687170151 0 -66.4615685095675 + 400 0.04 6.42075545625297e-08 -66.4876195742954 0.000854064736183607 0 -66.4876195742956 + 450 0.045 3.44210513402635e-08 -66.5117616436528 0.000812909459005008 0 -66.5117616436531 + 500 0.05 1.80394981487191e-08 -66.5350359881262 0.000789742875305131 0 -66.5350359881262 + 550 0.055 9.54697157097866e-09 -66.5577061696951 0.000769860218895372 0 -66.5577061696951 + 600 0.06 5.22455110708009e-09 -66.5798382239529 0.000752941158466282 0 -66.5798382239528 + 650 0.065 2.95172977729162e-09 -66.601598097806 0.000745065216626281 0 -66.6015980978062 + 700 0.07 1.67275674393186e-09 -66.6233484071645 0.000752898926000615 0 -66.6233484071643 + 750 0.075 9.17127001716818e-10 -66.6456135037772 0.000780491405791264 0 -66.6456135037769 + 800 0.08 4.72669535990986e-10 -66.6689812966981 0.000827942834401387 0 -66.668981296698 + 850 0.085 2.25696738737671e-10 -66.6939726229253 0.000890246383931887 0 -66.6939726229253 + 900 0.09 1.00307170296094e-10 -66.7208685437728 0.000955403731484673 0 -66.7208685437728 + 950 0.095 4.19867626693269e-11 -66.7494848991562 0.00100352240545389 0 -66.7494848991562 + 1000 0.1 1.64283481770759e-11 -66.7789899523816 0.00101162410316333 0 -66.7789899523818 +Loop time of 2.42884 on 4 procs for 1000 steps with 5780 atoms + +99.9% CPU use with 4 MPI tasks x 1 OpenMP threads Minimization stats: Stopping criterion = max iterations Energy initial, next-to-last, final = - -0.157514482754 -133.509516066 -133.510640943 + -0.0819172086359 -66.778399627 -66.7789899524 Force two-norm initial, final = 0 0 Force max component initial, final = 0 0 Final line search alpha, max atom move = 0 0 @@ -125,12 +127,12 @@ Minimization stats: MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 2.2697 | 2.2995 | 2.3564 | 2.2 | 90.74 +Pair | 2.1221 | 2.164 | 2.2349 | 2.9 | 89.10 Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 0.05711 | 0.11414 | 0.14368 | 10.1 | 4.50 -Output | 0.084883 | 0.084915 | 0.084985 | 0.0 | 3.35 -Modify | 0.0071826 | 0.0072024 | 0.0072234 | 0.0 | 0.28 -Other | | 0.02847 | | | 1.12 +Comm | 0.065814 | 0.13626 | 0.17868 | 11.7 | 5.61 +Output | 0.090046 | 0.090083 | 0.090171 | 0.0 | 3.71 +Modify | 0.0081615 | 0.0083774 | 0.008673 | 0.2 | 0.34 +Other | | 0.03009 | | | 1.24 Nlocal: 1445 ave 1445 max 1445 min Histogram: 4 0 0 0 0 0 0 0 0 0 diff --git a/examples/SPIN/spinmin/log.19Nov19.spin.bfo_min_cg.g++.1 b/examples/SPIN/spinmin/log.14Apr20.spin.bfo_min_cg.g++.1 similarity index 65% rename from examples/SPIN/spinmin/log.19Nov19.spin.bfo_min_cg.g++.1 rename to examples/SPIN/spinmin/log.14Apr20.spin.bfo_min_cg.g++.1 index ffd244b146e487cff3f6d9e287fc6490e2e821cb..cef54797eb842f6506559b1908ded82f5925cfdd 100644 --- a/examples/SPIN/spinmin/log.19Nov19.spin.bfo_min_cg.g++.1 +++ b/examples/SPIN/spinmin/log.14Apr20.spin.bfo_min_cg.g++.1 @@ -1,4 +1,6 @@ -LAMMPS (30 Oct 2019) +LAMMPS (19 Mar 2020) +OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (../comm.cpp:94) + using 1 OpenMP thread(s) per MPI task # bfo in a 3d periodic box units metal @@ -17,7 +19,7 @@ Created orthogonal box = (0 0 0) to (134.64 134.64 19.8) 1 by 1 by 1 MPI processor grid create_atoms 1 box Created 5780 atoms - create_atoms CPU = 0.00135589 secs + create_atoms CPU = 0.00267482 secs # setting mass, mag. moments, and interactions for bcc iron @@ -59,11 +61,11 @@ dump 1 all custom 50 dump.lammpstrj type x y z c_outsp[1] c_outsp[2] c_outsp[3 min_style spin/cg # min_modify line spin_none discrete_factor 10.0 minimize 1.0e-10 1.0e-10 1000 100 -WARNING: Using 'neigh_modify every 1 delay 0 check yes' setting during minimization (../min.cpp:177) +WARNING: Using 'neigh_modify every 1 delay 0 check yes' setting during minimization (../min.cpp:190) WARNING: Line search incompatible gneb (../min_spin_cg.cpp:105) -WARNING: Using spin pair style without nve/spin or neb/spin (../pair_spin.cpp:87) -WARNING: Using spin pair style without nve/spin or neb/spin (../pair_spin.cpp:87) -WARNING: Using spin pair style without nve/spin or neb/spin (../pair_spin.cpp:87) +WARNING: Using spin pair style without nve/spin or neb/spin (../pair_spin.cpp:88) +WARNING: Using spin pair style without nve/spin or neb/spin (../pair_spin.cpp:88) +WARNING: Using spin pair style without nve/spin or neb/spin (../pair_spin.cpp:88) Neighbor list info ... update every 1 steps, delay 0 steps, check yes max neighbors/atom: 2000, page size: 100000 @@ -88,20 +90,20 @@ Neighbor list info ... bin: none Per MPI rank memory allocation (min/avg/max) = 8.331 | 8.331 | 8.331 Mbytes Step Time v_magnorm v_emag v_tmag Temp TotEng - 0 0 0.0100717228668283 -0.163834417271778 14831.3069413956 0 -0.0819172086358848 - 100 0.01 8.80197005314557e-06 -132.80634639767 0.00226660536216922 0 -66.4031731988347 - 200 0.02 6.70903250218956e-06 -133.127078243354 0.00103783628361662 0 -66.563539121677 - 300 0.03 4.5381603452565e-06 -133.471076972345 0.00144833375067451 0 -66.7355384861738 - 400 0.04 9.04820921016732e-07 -133.767843456662 0.000682239601485924 0 -66.8839217283314 - 500 0.05 1.6866160174916e-06 -133.893922160731 0.00032462625992713 0 -66.946961080365 - 600 0.06 1.78038217785001e-06 -133.957222680701 0.000160730704849448 0 -66.9786113403509 - 700 0.07 1.49199057723078e-06 -133.987255887786 7.39864656758093e-05 0 -66.9936279438931 - 800 0.08 1.15173756711067e-06 -134.000921126053 3.33959465206462e-05 0 -67.0004605630278 - 900 0.09 8.48526364752965e-07 -134.007049858868 1.49345737358251e-05 0 -67.0035249294347 - 1000 0.1 6.10346492876059e-07 -134.009791515671 6.71648807105468e-06 0 -67.0048957578347 -Loop time of 9.4449 on 1 procs for 1000 steps with 5780 atoms - -100.0% CPU use with 1 MPI tasks x no OpenMP threads + 0 0 0.0100717228668283 -0.0819172086358897 14831.3069413956 0 -0.0819172086358848 + 100 0.01 8.80197005314557e-06 -66.4031731988352 0.00226660536216922 0 -66.4031731988347 + 200 0.02 6.70903250218956e-06 -66.5635391216766 0.00103783628361662 0 -66.563539121677 + 300 0.03 4.5381603452565e-06 -66.7355384861724 0.00144833375067451 0 -66.7355384861738 + 400 0.04 9.04820921016732e-07 -66.8839217283316 0.000682239601485924 0 -66.8839217283314 + 500 0.05 1.6866160174916e-06 -66.9469610803664 0.00032462625992713 0 -66.946961080365 + 600 0.06 1.78038217785001e-06 -66.9786113403508 0.000160730704849448 0 -66.9786113403509 + 700 0.07 1.49199057723078e-06 -66.9936279438935 7.39864656758093e-05 0 -66.9936279438931 + 800 0.08 1.15173756711067e-06 -67.0004605630263 3.33959465206462e-05 0 -67.0004605630278 + 900 0.09 8.48526364752965e-07 -67.0035249294341 1.49345737358251e-05 0 -67.0035249294347 + 1000 0.1 6.10346492876059e-07 -67.004895757836 6.71648807105468e-06 0 -67.0048957578347 +Loop time of 9.0061 on 1 procs for 1000 steps with 5780 atoms + +100.0% CPU use with 1 MPI tasks x 1 OpenMP threads Minimization stats: Stopping criterion = max iterations @@ -115,12 +117,12 @@ Minimization stats: MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 8.7686 | 8.7686 | 8.7686 | 0.0 | 92.84 +Pair | 8.3237 | 8.3237 | 8.3237 | 0.0 | 92.42 Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 0.02386 | 0.02386 | 0.02386 | 0.0 | 0.25 -Output | 0.31808 | 0.31808 | 0.31808 | 0.0 | 3.37 -Modify | 0.029416 | 0.029416 | 0.029416 | 0.0 | 0.31 -Other | | 0.305 | | | 3.23 +Comm | 0.023927 | 0.023927 | 0.023927 | 0.0 | 0.27 +Output | 0.31783 | 0.31783 | 0.31783 | 0.0 | 3.53 +Modify | 0.034633 | 0.034633 | 0.034633 | 0.0 | 0.38 +Other | | 0.306 | | | 3.40 Nlocal: 5780 ave 5780 max 5780 min Histogram: 1 0 0 0 0 0 0 0 0 0 diff --git a/examples/SPIN/spinmin/log.19Nov19.spin.bfo_min_cg.g++.4 b/examples/SPIN/spinmin/log.14Apr20.spin.bfo_min_cg.g++.4 similarity index 62% rename from examples/SPIN/spinmin/log.19Nov19.spin.bfo_min_cg.g++.4 rename to examples/SPIN/spinmin/log.14Apr20.spin.bfo_min_cg.g++.4 index 730bf477d437f37cff0bab75b42769d081e347ca..26dd99046bd4b8c6244900456e56d36edcbede59 100644 --- a/examples/SPIN/spinmin/log.19Nov19.spin.bfo_min_cg.g++.4 +++ b/examples/SPIN/spinmin/log.14Apr20.spin.bfo_min_cg.g++.4 @@ -1,4 +1,6 @@ -LAMMPS (30 Oct 2019) +LAMMPS (19 Mar 2020) +OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (../comm.cpp:94) + using 1 OpenMP thread(s) per MPI task # bfo in a 3d periodic box units metal @@ -17,7 +19,7 @@ Created orthogonal box = (0 0 0) to (134.64 134.64 19.8) 2 by 2 by 1 MPI processor grid create_atoms 1 box Created 5780 atoms - create_atoms CPU = 0.00138712 secs + create_atoms CPU = 0.000908136 secs # setting mass, mag. moments, and interactions for bcc iron @@ -59,11 +61,11 @@ dump 1 all custom 50 dump.lammpstrj type x y z c_outsp[1] c_outsp[2] c_outsp[3 min_style spin/cg # min_modify line spin_none discrete_factor 10.0 minimize 1.0e-10 1.0e-10 1000 100 -WARNING: Using 'neigh_modify every 1 delay 0 check yes' setting during minimization (../min.cpp:177) +WARNING: Using 'neigh_modify every 1 delay 0 check yes' setting during minimization (../min.cpp:190) WARNING: Line search incompatible gneb (../min_spin_cg.cpp:105) -WARNING: Using spin pair style without nve/spin or neb/spin (../pair_spin.cpp:87) -WARNING: Using spin pair style without nve/spin or neb/spin (../pair_spin.cpp:87) -WARNING: Using spin pair style without nve/spin or neb/spin (../pair_spin.cpp:87) +WARNING: Using spin pair style without nve/spin or neb/spin (../pair_spin.cpp:88) +WARNING: Using spin pair style without nve/spin or neb/spin (../pair_spin.cpp:88) +WARNING: Using spin pair style without nve/spin or neb/spin (../pair_spin.cpp:88) Neighbor list info ... update every 1 steps, delay 0 steps, check yes max neighbors/atom: 2000, page size: 100000 @@ -88,25 +90,25 @@ Neighbor list info ... bin: none Per MPI rank memory allocation (min/avg/max) = 7.788 | 7.788 | 7.788 Mbytes Step Time v_magnorm v_emag v_tmag Temp TotEng - 0 0 0.0100717228668283 -0.162177519662199 14970.709092345 0 -0.157514482753586 - 100 0.01 8.97646420936397e-06 -132.756468673032 0.00226858475243123 0 -132.79881239587 - 200 0.02 5.7049674439631e-06 -133.065966570145 0.000924384747875186 0 -133.105411060402 - 300 0.03 7.08166486348038e-06 -133.359072681024 0.00128114254070688 0 -133.406669528642 - 400 0.04 4.60224970353229e-06 -133.668643035703 0.000822334798448062 0 -133.725353643022 - 500 0.05 3.13737045264193e-06 -133.819548711647 0.000369678417461456 0 -133.878037514585 - 600 0.06 2.55239214469856e-06 -133.889302880669 0.0001696142482835 0 -133.948327309746 - 700 0.07 1.92236411979341e-06 -133.920147501261 7.31985644003847e-05 0 -133.979597440788 - 800 0.08 1.40879742055238e-06 -133.933445418833 3.19349095035109e-05 0 -133.993344750158 - 900 0.09 1.02629246257047e-06 -133.939321574068 1.44399877051467e-05 0 -133.999611147322 - 1000 0.1 7.52253147824893e-07 -133.942032102451 6.85789018963965e-06 0 -134.002604512509 -Loop time of 2.49676 on 4 procs for 1000 steps with 5780 atoms - -100.0% CPU use with 4 MPI tasks x no OpenMP threads + 0 0 0.0100717228668283 -0.0819172086358889 14831.3069413956 0 -0.0819172086358937 + 100 0.01 8.80197005315463e-06 -66.403173198835 0.00226660536216922 0 -66.4031731988351 + 200 0.02 6.7090325022051e-06 -66.563539121677 0.00103783628361663 0 -66.5635391216769 + 300 0.03 4.53816034526952e-06 -66.7355384861727 0.00144833375067451 0 -66.7355384861724 + 400 0.04 9.04820921046463e-07 -66.8839217283311 0.000682239601485917 0 -66.883921728331 + 500 0.05 1.68661601751279e-06 -66.9469610803655 0.00032462625992713 0 -66.9469610803655 + 600 0.06 1.78038217786708e-06 -66.9786113403506 0.000160730704849447 0 -66.9786113403508 + 700 0.07 1.4919905772389e-06 -66.9936279438931 7.39864656758075e-05 0 -66.9936279438932 + 800 0.08 1.15173756711682e-06 -67.0004605630262 3.33959465206457e-05 0 -67.0004605630265 + 900 0.09 8.48526364761828e-07 -67.0035249294341 1.49345737358251e-05 0 -67.0035249294341 + 1000 0.1 6.10346492874848e-07 -67.0048957578355 6.71648807105468e-06 0 -67.0048957578356 +Loop time of 2.40179 on 4 procs for 1000 steps with 5780 atoms + +100.0% CPU use with 4 MPI tasks x 1 OpenMP threads Minimization stats: Stopping criterion = max iterations Energy initial, next-to-last, final = - -0.157514482754 -134.00257032 -134.002604513 + -0.0819172086359 -67.0048809251 -67.0048957578 Force two-norm initial, final = 0 0 Force max component initial, final = 0 0 Final line search alpha, max atom move = 0 0 @@ -115,12 +117,12 @@ Minimization stats: MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 2.2509 | 2.2589 | 2.2629 | 0.3 | 90.47 +Pair | 2.1174 | 2.1533 | 2.179 | 1.6 | 89.66 Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 0.06036 | 0.064254 | 0.072356 | 1.9 | 2.57 -Output | 0.084002 | 0.085009 | 0.085985 | 0.3 | 3.40 -Modify | 0.0072496 | 0.0072694 | 0.0073116 | 0.0 | 0.29 -Other | | 0.08134 | | | 3.26 +Comm | 0.049849 | 0.075596 | 0.11152 | 8.4 | 3.15 +Output | 0.082974 | 0.084081 | 0.085145 | 0.3 | 3.50 +Modify | 0.0082345 | 0.008339 | 0.008424 | 0.1 | 0.35 +Other | | 0.08043 | | | 3.35 Nlocal: 1445 ave 1445 max 1445 min Histogram: 4 0 0 0 0 0 0 0 0 0 diff --git a/examples/SPIN/spinmin/log.19Nov19.spin.bfo_min_lbfgs.g++.1 b/examples/SPIN/spinmin/log.14Apr20.spin.bfo_min_lbfgs.g++.1 similarity index 69% rename from examples/SPIN/spinmin/log.19Nov19.spin.bfo_min_lbfgs.g++.1 rename to examples/SPIN/spinmin/log.14Apr20.spin.bfo_min_lbfgs.g++.1 index a8685eb2cf9b337e849c72d14d18d6d5819a03bb..2d8b319b3cff54162ec41037ea95ce7879c611e1 100644 --- a/examples/SPIN/spinmin/log.19Nov19.spin.bfo_min_lbfgs.g++.1 +++ b/examples/SPIN/spinmin/log.14Apr20.spin.bfo_min_lbfgs.g++.1 @@ -1,4 +1,6 @@ -LAMMPS (30 Oct 2019) +LAMMPS (19 Mar 2020) +OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (../comm.cpp:94) + using 1 OpenMP thread(s) per MPI task # bfo in a 3d periodic box units metal @@ -17,7 +19,7 @@ Created orthogonal box = (0 0 0) to (134.64 134.64 3.96) 1 by 1 by 1 MPI processor grid create_atoms 1 box Created 1156 atoms - create_atoms CPU = 0.00136805 secs + create_atoms CPU = 0.00159788 secs # setting mass, mag. moments, and interactions for bcc iron @@ -60,11 +62,11 @@ min_style spin/lbfgs # min_modify line spin_cubic discrete_factor 10.0 min_modify norm max minimize 1.0e-15 1.0e-10 1000 100 -WARNING: Using 'neigh_modify every 1 delay 0 check yes' setting during minimization (../min.cpp:177) +WARNING: Using 'neigh_modify every 1 delay 0 check yes' setting during minimization (../min.cpp:190) WARNING: Line search incompatible gneb (../min_spin_lbfgs.cpp:109) -WARNING: Using spin pair style without nve/spin or neb/spin (../pair_spin.cpp:87) -WARNING: Using spin pair style without nve/spin or neb/spin (../pair_spin.cpp:87) -WARNING: Using spin pair style without nve/spin or neb/spin (../pair_spin.cpp:87) +WARNING: Using spin pair style without nve/spin or neb/spin (../pair_spin.cpp:88) +WARNING: Using spin pair style without nve/spin or neb/spin (../pair_spin.cpp:88) +WARNING: Using spin pair style without nve/spin or neb/spin (../pair_spin.cpp:88) Neighbor list info ... update every 1 steps, delay 0 steps, check yes max neighbors/atom: 2000, page size: 100000 @@ -89,17 +91,17 @@ Neighbor list info ... bin: none Per MPI rank memory allocation (min/avg/max) = 7.748 | 7.748 | 7.748 Mbytes Step Time v_magnorm v_emag v_tmag Temp TotEng - 0 0 0.0205636053306396 -0.218504643888467 1537.40479337332 0 -0.109252321944233 - 50 0.005 0.000800557938107919 -19.2937186217138 0.293526226015746 0 -9.65918446070018 - 100 0.01 0.000434178067296136 -19.6225314972776 0.136842093090897 0 -9.81803976806459 - 150 0.015 9.48307628510239e-06 -19.7062424007137 0.000835148627123792 0 -9.85315267460932 - 200 0.02 9.40072944704056e-06 -19.7072931204571 7.72334770010361e-06 0 -9.85364693487844 - 250 0.025 5.05117500164935e-07 -19.7072952885901 5.72437821949831e-08 0 -9.85364764712939 - 300 0.03 2.15063977474981e-09 -19.707295295749 2.09970244523395e-12 0 -9.8536476478746 - 303 0.0303 1.43831710574092e-09 -19.7072952957498 1.70336397715489e-13 0 -9.85364764787493 -Loop time of 0.335897 on 1 procs for 303 steps with 1156 atoms - -100.0% CPU use with 1 MPI tasks x no OpenMP threads + 0 0 0.0205636053306396 -0.109252321944233 1537.40479337332 0 -0.109252321944233 + 50 0.005 0.000800557938107919 -9.65918446070017 0.293526226015746 0 -9.65918446070018 + 100 0.01 0.000434178067296136 -9.81803976806455 0.136842093090897 0 -9.81803976806459 + 150 0.015 9.48307628510239e-06 -9.85315267460926 0.000835148627123792 0 -9.85315267460932 + 200 0.02 9.40072944704056e-06 -9.85364693487847 7.72334770010361e-06 0 -9.85364693487844 + 250 0.025 5.05117500164935e-07 -9.85364764712935 5.72437821949831e-08 0 -9.85364764712939 + 300 0.03 2.15063977474981e-09 -9.85364764787459 2.09970244523395e-12 0 -9.8536476478746 + 303 0.0303 1.43831710574092e-09 -9.85364764787493 1.70336397715489e-13 0 -9.85364764787493 +Loop time of 0.328641 on 1 procs for 303 steps with 1156 atoms + +100.0% CPU use with 1 MPI tasks x 1 OpenMP threads Minimization stats: Stopping criterion = energy tolerance @@ -113,12 +115,12 @@ Minimization stats: MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 0.28129 | 0.28129 | 0.28129 | 0.0 | 83.74 +Pair | 0.27332 | 0.27332 | 0.27332 | 0.0 | 83.17 Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 0.0010796 | 0.0010796 | 0.0010796 | 0.0 | 0.32 -Output | 0.017942 | 0.017942 | 0.017942 | 0.0 | 5.34 -Modify | 0.001771 | 0.001771 | 0.001771 | 0.0 | 0.53 -Other | | 0.03382 | | | 10.07 +Comm | 0.001117 | 0.001117 | 0.001117 | 0.0 | 0.34 +Output | 0.018038 | 0.018038 | 0.018038 | 0.0 | 5.49 +Modify | 0.0020421 | 0.0020421 | 0.0020421 | 0.0 | 0.62 +Other | | 0.03412 | | | 10.38 Nlocal: 1156 ave 1156 max 1156 min Histogram: 1 0 0 0 0 0 0 0 0 0 diff --git a/examples/SPIN/spinmin/log.19Nov19.spin.bfo_min_lbfgs.g++.4 b/examples/SPIN/spinmin/log.14Apr20.spin.bfo_min_lbfgs.g++.4 similarity index 66% rename from examples/SPIN/spinmin/log.19Nov19.spin.bfo_min_lbfgs.g++.4 rename to examples/SPIN/spinmin/log.14Apr20.spin.bfo_min_lbfgs.g++.4 index f2756d0f5ed9f0d9450edae668125ecfa82941d9..2c26f64b564c7af82ab8a81d7184c242e179f26c 100644 --- a/examples/SPIN/spinmin/log.19Nov19.spin.bfo_min_lbfgs.g++.4 +++ b/examples/SPIN/spinmin/log.14Apr20.spin.bfo_min_lbfgs.g++.4 @@ -1,4 +1,6 @@ -LAMMPS (30 Oct 2019) +LAMMPS (19 Mar 2020) +OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (../comm.cpp:94) + using 1 OpenMP thread(s) per MPI task # bfo in a 3d periodic box units metal @@ -17,7 +19,7 @@ Created orthogonal box = (0 0 0) to (134.64 134.64 3.96) 2 by 2 by 1 MPI processor grid create_atoms 1 box Created 1156 atoms - create_atoms CPU = 0.000981808 secs + create_atoms CPU = 0.00098896 secs # setting mass, mag. moments, and interactions for bcc iron @@ -60,11 +62,11 @@ min_style spin/lbfgs # min_modify line spin_cubic discrete_factor 10.0 min_modify norm max minimize 1.0e-15 1.0e-10 1000 100 -WARNING: Using 'neigh_modify every 1 delay 0 check yes' setting during minimization (../min.cpp:177) +WARNING: Using 'neigh_modify every 1 delay 0 check yes' setting during minimization (../min.cpp:190) WARNING: Line search incompatible gneb (../min_spin_lbfgs.cpp:109) -WARNING: Using spin pair style without nve/spin or neb/spin (../pair_spin.cpp:87) -WARNING: Using spin pair style without nve/spin or neb/spin (../pair_spin.cpp:87) -WARNING: Using spin pair style without nve/spin or neb/spin (../pair_spin.cpp:87) +WARNING: Using spin pair style without nve/spin or neb/spin (../pair_spin.cpp:88) +WARNING: Using spin pair style without nve/spin or neb/spin (../pair_spin.cpp:88) +WARNING: Using spin pair style without nve/spin or neb/spin (../pair_spin.cpp:88) Neighbor list info ... update every 1 steps, delay 0 steps, check yes max neighbors/atom: 2000, page size: 100000 @@ -89,36 +91,36 @@ Neighbor list info ... bin: none Per MPI rank memory allocation (min/avg/max) = 7.619 | 7.619 | 7.619 Mbytes Step Time v_magnorm v_emag v_tmag Temp TotEng - 0 0 0.0205636053306396 -0.217760509274282 1541.29975585882 0 -0.217230771393012 - 50 0.005 0.000966655616837406 -19.2878369426356 0.312860071233841 0 -19.3229939390148 - 100 0.01 0.00154452800191107 -19.5948898197917 0.365367666925029 0 -19.6389064900413 - 150 0.015 4.89955946750017e-05 -19.6962580067431 0.000385536538802408 0 -19.7047140195852 - 200 0.02 5.66300530875654e-05 -19.6975252647309 9.8679922880911e-05 0 -19.7059140354146 - 250 0.025 5.21141123128679e-08 -19.6975359469038 2.52554968535685e-09 0 -19.7059189333986 - 300 0.03 2.9845103782958e-09 -19.6975359475094 2.31782597655471e-11 0 -19.7059191124033 - 342 0.0342 1.0526549233076e-10 -19.6975359475123 3.65641352240487e-16 0 -19.7059191178145 -Loop time of 0.117672 on 4 procs for 342 steps with 1156 atoms - -99.4% CPU use with 4 MPI tasks x no OpenMP threads + 0 0 0.0205636053306396 -0.109252321944234 1537.40479337332 0 -0.109252321944234 + 50 0.005 0.00080055793810568 -9.65918446070018 0.293526226015742 0 -9.65918446070018 + 100 0.01 0.000434178089299568 -9.81803976800935 0.136842091062742 0 -9.81803976800936 + 150 0.015 9.48305696976556e-06 -9.85315267463944 0.000835124161214539 0 -9.85315267463943 + 200 0.02 9.48404729540188e-06 -9.85364693589303 7.83955637621785e-06 0 -9.85364693589302 + 250 0.025 2.53129638591035e-07 -9.85364764689316 5.38044599466511e-08 0 -9.85364764689315 + 300 0.03 1.70353573452093e-08 -9.85364764787448 5.65371929906417e-11 0 -9.85364764787448 + 318 0.0318 1.78606698438076e-09 -9.85364764787558 5.01580212144594e-14 0 -9.85364764787559 +Loop time of 0.107177 on 4 procs for 318 steps with 1156 atoms + +99.6% CPU use with 4 MPI tasks x 1 OpenMP threads Minimization stats: - Stopping criterion = force tolerance + Stopping criterion = energy tolerance Energy initial, next-to-last, final = - -0.217230771393 -19.7059191178 -19.7059191178 + -0.109252321944 -9.85364764788 -9.85364764788 Force two-norm initial, final = 0 0 Force max component initial, final = 0 0 Final line search alpha, max atom move = 0 0 - Iterations, force evaluations = 342 342 + Iterations, force evaluations = 318 318 MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 0.084558 | 0.086668 | 0.091471 | 1.0 | 73.65 +Pair | 0.074155 | 0.077992 | 0.081876 | 1.2 | 72.77 Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 0.0052197 | 0.010042 | 0.012191 | 2.8 | 8.53 -Output | 0.0050647 | 0.0050726 | 0.0050921 | 0.0 | 4.31 -Modify | 0.00052595 | 0.00053537 | 0.00055242 | 0.0 | 0.45 -Other | | 0.01535 | | | 13.05 +Comm | 0.005573 | 0.0094561 | 0.013285 | 3.4 | 8.82 +Output | 0.005054 | 0.0050632 | 0.0050869 | 0.0 | 4.72 +Modify | 0.00055051 | 0.00058657 | 0.00066018 | 0.0 | 0.55 +Other | | 0.01408 | | | 13.14 Nlocal: 289 ave 289 max 289 min Histogram: 4 0 0 0 0 0 0 0 0 0 diff --git a/examples/SPIN/spinmin/log.19Nov19.spin.iron_min.g++.1 b/examples/SPIN/spinmin/log.14Apr20.spin.iron_min.g++.1 similarity index 87% rename from examples/SPIN/spinmin/log.19Nov19.spin.iron_min.g++.1 rename to examples/SPIN/spinmin/log.14Apr20.spin.iron_min.g++.1 index 6df5959c0b371641644cfb43625da94c2f972661..7fe5920c1c2093c4cafd02c227347dde117ff685 100644 --- a/examples/SPIN/spinmin/log.19Nov19.spin.iron_min.g++.1 +++ b/examples/SPIN/spinmin/log.14Apr20.spin.iron_min.g++.1 @@ -1,4 +1,6 @@ -LAMMPS (30 Oct 2019) +LAMMPS (19 Mar 2020) +OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (../comm.cpp:94) + using 1 OpenMP thread(s) per MPI task # bcc iron in a 3d periodic box units metal @@ -17,7 +19,7 @@ Created orthogonal box = (0 0 0) to (14.3325 14.3325 14.3325) 1 by 1 by 1 MPI processor grid create_atoms 1 box Created 250 atoms - create_atoms CPU = 0.000965834 secs + create_atoms CPU = 0.00106812 secs # setting mass, mag. moments, and interactions for bcc iron @@ -60,8 +62,8 @@ dump 1 all custom 100 dump.lammpstrj type x y z c_outsp[1] c_outsp[2] c_outsp[ min_style spin min_modify alpha_damp 1.0 discrete_factor 10.0 minimize 1.0e-10 1.0e-10 1000 100 -WARNING: Using 'neigh_modify every 1 delay 0 check yes' setting during minimization (../min.cpp:177) -WARNING: Using spin pair style without nve/spin or neb/spin (../pair_spin.cpp:87) +WARNING: Using 'neigh_modify every 1 delay 0 check yes' setting during minimization (../min.cpp:190) +WARNING: Using spin pair style without nve/spin or neb/spin (../pair_spin.cpp:88) Neighbor list info ... update every 1 steps, delay 0 steps, check yes max neighbors/atom: 2000, page size: 100000 @@ -87,9 +89,9 @@ Step Time v_magx v_magz v_magnorm v_tmag TotEng 800 0.08 -0.584017381477007 -0.0766850043611195 0.999999999999999 6.70634191991825e-06 -25.289508192325 900 0.09 -0.583812040722351 -0.0811143180675364 0.999999999999999 7.49814943594148e-06 -25.2895256658925 1000 0.1 -0.583582389243979 -0.0857958823565731 0.999999999999998 8.38204259112222e-06 -25.2895452009133 -Loop time of 0.195254 on 1 procs for 1000 steps with 250 atoms +Loop time of 0.199799 on 1 procs for 1000 steps with 250 atoms -100.0% CPU use with 1 MPI tasks x no OpenMP threads +100.0% CPU use with 1 MPI tasks x 1 OpenMP threads Minimization stats: Stopping criterion = max iterations @@ -103,12 +105,12 @@ Minimization stats: MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 0.17668 | 0.17668 | 0.17668 | 0.0 | 90.49 +Pair | 0.1795 | 0.1795 | 0.1795 | 0.0 | 89.84 Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 0.0052176 | 0.0052176 | 0.0052176 | 0.0 | 2.67 -Output | 0.0067751 | 0.0067751 | 0.0067751 | 0.0 | 3.47 -Modify | 0.0013788 | 0.0013788 | 0.0013788 | 0.0 | 0.71 -Other | | 0.005203 | | | 2.66 +Comm | 0.0056038 | 0.0056038 | 0.0056038 | 0.0 | 2.80 +Output | 0.0074773 | 0.0074773 | 0.0074773 | 0.0 | 3.74 +Modify | 0.0016823 | 0.0016823 | 0.0016823 | 0.0 | 0.84 +Other | | 0.005533 | | | 2.77 Nlocal: 250 ave 250 max 250 min Histogram: 1 0 0 0 0 0 0 0 0 0 diff --git a/examples/SPIN/spinmin/log.19Nov19.spin.iron_min.g++.4 b/examples/SPIN/spinmin/log.14Apr20.spin.iron_min.g++.4 similarity index 72% rename from examples/SPIN/spinmin/log.19Nov19.spin.iron_min.g++.4 rename to examples/SPIN/spinmin/log.14Apr20.spin.iron_min.g++.4 index b0cdd4f94adfbce6ae64b45bd546e0b6de6f3373..0eb7bd1783058f547ee4c1499e24041bba305edb 100644 --- a/examples/SPIN/spinmin/log.19Nov19.spin.iron_min.g++.4 +++ b/examples/SPIN/spinmin/log.14Apr20.spin.iron_min.g++.4 @@ -1,4 +1,6 @@ -LAMMPS (30 Oct 2019) +LAMMPS (19 Mar 2020) +OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (../comm.cpp:94) + using 1 OpenMP thread(s) per MPI task # bcc iron in a 3d periodic box units metal @@ -17,7 +19,7 @@ Created orthogonal box = (0 0 0) to (14.3325 14.3325 14.3325) 1 by 2 by 2 MPI processor grid create_atoms 1 box Created 250 atoms - create_atoms CPU = 0.000759125 secs + create_atoms CPU = 0.000731945 secs # setting mass, mag. moments, and interactions for bcc iron @@ -60,8 +62,8 @@ dump 1 all custom 100 dump.lammpstrj type x y z c_outsp[1] c_outsp[2] c_outsp[ min_style spin min_modify alpha_damp 1.0 discrete_factor 10.0 minimize 1.0e-10 1.0e-10 1000 100 -WARNING: Using 'neigh_modify every 1 delay 0 check yes' setting during minimization (../min.cpp:177) -WARNING: Using spin pair style without nve/spin or neb/spin (../pair_spin.cpp:87) +WARNING: Using 'neigh_modify every 1 delay 0 check yes' setting during minimization (../min.cpp:190) +WARNING: Using spin pair style without nve/spin or neb/spin (../pair_spin.cpp:88) Neighbor list info ... update every 1 steps, delay 0 steps, check yes max neighbors/atom: 2000, page size: 100000 @@ -76,25 +78,25 @@ Neighbor list info ... bin: standard Per MPI rank memory allocation (min/avg/max) = 6.828 | 6.829 | 6.829 Mbytes Step Time v_magx v_magz v_magnorm v_tmag TotEng - 0 0 -0.0285071136621457 -0.00948990815281275 0.0764569750905723 5048.5607623768 -0.701465876910695 - 100 0.01 -0.584953861980204 -0.0517163256267969 0.999992350892306 6.25556948778489e-05 -50.5787443620229 - 200 0.02 -0.584864756506845 -0.0547143484057154 0.999999990495506 3.49782260454051e-06 -50.5787971409246 - 300 0.03 -0.5847600493607 -0.0578846348986585 0.999999999988173 3.83095226804998e-06 -50.5788061208592 - 400 0.04 -0.584642875238891 -0.06123730753627 0.999999999999984 4.28575832708228e-06 -50.5788161053499 - 500 0.05 -0.584511765589526 -0.0647826190376232 0.999999999999999 4.79421486949061e-06 -50.5788272748473 - 600 0.06 -0.584365074206158 -0.0685313536438759 0.999999999999999 5.36242072641826e-06 -50.5788397688148 - 700 0.07 -0.584200963215272 -0.0724948469588718 1 5.99725249459218e-06 -50.5788537427249 - 800 0.08 -0.584017381477007 -0.0766850043611196 1 6.7063419199184e-06 -50.5788693699014 - 900 0.09 -0.583812040722352 -0.0811143180675365 0.999999999999998 7.49814943594153e-06 -50.5788868434688 - 1000 0.1 -0.583582389243979 -0.0857958823565732 0.999999999999999 8.38204259112203e-06 -50.5789063784897 -Loop time of 0.0845464 on 4 procs for 1000 steps with 250 atoms - -99.8% CPU use with 4 MPI tasks x no OpenMP threads + 0 0 -0.0285071136621457 -0.00948990815281275 0.0764569750905723 5048.5607623768 -0.354774619362399 + 100 0.01 -0.584953861980204 -0.0517163256267969 0.999992350892306 6.25556948778489e-05 -25.2894057771132 + 200 0.02 -0.584864756506845 -0.0547143484057154 0.999999990495506 3.49782260454051e-06 -25.2894359914181 + 300 0.03 -0.5847600493607 -0.0578846348986585 0.999999999988173 3.83095226804998e-06 -25.2894449433168 + 400 0.04 -0.584642875238891 -0.06123730753627 0.999999999999984 4.28575832708228e-06 -25.2894549277729 + 500 0.05 -0.584511765589526 -0.0647826190376232 0.999999999999999 4.79421486949061e-06 -25.2894660972702 + 600 0.06 -0.584365074206158 -0.0685313536438759 0.999999999999999 5.36242072641826e-06 -25.2894785912378 + 700 0.07 -0.584200963215272 -0.0724948469588718 1 5.99725249459218e-06 -25.2894925651479 + 800 0.08 -0.584017381477007 -0.0766850043611196 1 6.7063419199184e-06 -25.2895081923244 + 900 0.09 -0.583812040722352 -0.0811143180675365 0.999999999999998 7.49814943594153e-06 -25.2895256658919 + 1000 0.1 -0.583582389243979 -0.0857958823565732 0.999999999999999 8.38204259112203e-06 -25.2895452009127 +Loop time of 0.086317 on 4 procs for 1000 steps with 250 atoms + +99.9% CPU use with 4 MPI tasks x 1 OpenMP threads Minimization stats: Stopping criterion = max iterations Energy initial, next-to-last, final = - -0.701465876911 -50.5789061722 -50.5789063785 + -0.354774619362 -25.2895449946 -25.2895452009 Force two-norm initial, final = 0 0 Force max component initial, final = 0 0 Final line search alpha, max atom move = 0 0 @@ -103,12 +105,12 @@ Minimization stats: MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 0.043007 | 0.045307 | 0.04776 | 0.8 | 53.59 +Pair | 0.042744 | 0.045964 | 0.049416 | 1.2 | 53.25 Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 0.026827 | 0.029139 | 0.031438 | 1.0 | 34.47 -Output | 0.0023198 | 0.0023302 | 0.0023572 | 0.0 | 2.76 -Modify | 0.00041103 | 0.0004673 | 0.00054026 | 0.0 | 0.55 -Other | | 0.007303 | | | 8.64 +Comm | 0.026905 | 0.030113 | 0.033464 | 1.5 | 34.89 +Output | 0.0023746 | 0.0023909 | 0.0024335 | 0.1 | 2.77 +Modify | 0.00052047 | 0.00055218 | 0.00058579 | 0.0 | 0.64 +Other | | 0.007297 | | | 8.45 Nlocal: 62.5 ave 65 max 60 min Histogram: 2 0 0 0 0 0 0 0 0 2 diff --git a/examples/SPIN/test_problems/README b/examples/SPIN/test_problems/README index 5557e3d42b688428929b87ad3d31cef9f3e39baa..0a1362ec9c54f188ac7a56e766bb4e50890c2428 100644 --- a/examples/SPIN/test_problems/README +++ b/examples/SPIN/test_problems/README @@ -1,4 +1,4 @@ -** The objective of the benchmark examples in this directory +** The objective of the test problems in this directory is the following twofold: - verify the implementation of the LAMMPS' SPIN package by comparing its results to well-known analytic results, or @@ -6,39 +6,39 @@ - provide users with simple comparisons, allowing them to better understand what is implemented in the code. -The LAMMPS input file (bench-*) can be modified, as well as the +The LAMMPS input file (test-*) can be modified, as well as the associated python script, in order to try different comparisons. All scripts can be run by executing the shell script from its directory. Example: -./run-bench-exchange.sh from the benchmarck_damped_exchange/ +./run-test-exchange.sh from the validation_damped_exchange/ directory. -** Below a brief description of the different benchmark +** Below a brief description of the different validation problems: -- benchmarck_damped_precession: +- validation_damped_precession: simulates the damped precession of a single spin in a magnetic field. - Run as: ./run-bench-prec.sh + Run as: ./run-test-prec.sh Output: x, y and z components of the magnetization, and magnetic energy. -- benchmarck_damped_exchange: +- validation_damped_exchange: simulates two spins interacting through the exchange interaction. The parameters in the LAMMPS input script - (bench-spin-precession.in) are calibrated to match the + (test-spin-precession.in) are calibrated to match the exchange definition in the python script (llg_exchange.py). - Run as: ./run-bench-exchange.sh + Run as: ./run-test-exchange.sh Output: average magnetization resulting from the damped precession of the two interacting spins. Also plots the evolution of the magnetic energy. -- benchmarck_langevin_precession: +- validation_langevin_precession: simulates a single spin in a magnetic field and in contact with a thermal bath, and compares the statistical averages of the output to the analytical result of the Langevin function. - Run as: ./run-bench-prec.sh + Run as: ./run-test-prec.sh Output: statistical average of the z-component of the magnetization (along the applied field) and of the magnetic energy versus temperature. Comparison to the Langevin function diff --git a/examples/SPIN/test_problems/validation_damped_exchange/llg_exchange.py b/examples/SPIN/test_problems/validation_damped_exchange/llg_exchange.py index dd1c543bb3558f2b811d4c73e9210ad259d3329f..49eecb5b44d08c5d880c1f34bb6cd4d23476fbd0 100755 --- a/examples/SPIN/test_problems/validation_damped_exchange/llg_exchange.py +++ b/examples/SPIN/test_problems/validation_damped_exchange/llg_exchange.py @@ -65,6 +65,6 @@ for t in range (0,N): # calc. average magnetization Sm = (S1+S2)*0.5 # calc. energy - en = -J0*(np.dot(S1,S2)) + en = -2.0*J0*(np.dot(S1,S2)) # print res. in ps for comparison with LAMMPS print(t*dt/1000.0,Sm[0],Sm[1],Sm[2],en) diff --git a/examples/SPIN/test_problems/validation_damped_exchange/run-test-exchange.sh b/examples/SPIN/test_problems/validation_damped_exchange/run-test-exchange.sh index 15de8d350e09431dc6d3ef6932ebe446d635af68..599730fe7b88e55c91cb1ef87e93b4ad05ca2eb1 100755 --- a/examples/SPIN/test_problems/validation_damped_exchange/run-test-exchange.sh +++ b/examples/SPIN/test_problems/validation_damped_exchange/run-test-exchange.sh @@ -5,7 +5,7 @@ rm res_*.dat # compute Lammps ./../../../../src/lmp_serial \ - -in bench-spin-precession.in + -in test-spin-precession.in in="$(grep -n Step log.lammps | awk -F ':' '{print $1}')" en="$(grep -n Loop log.lammps | awk -F ':' '{print $1}')" in="$(echo "$in+1" | bc -l)" diff --git a/examples/SPIN/test_problems/validation_damped_exchange/bench-spin-precession.in b/examples/SPIN/test_problems/validation_damped_exchange/test-spin-precession.in similarity index 100% rename from examples/SPIN/test_problems/validation_damped_exchange/bench-spin-precession.in rename to examples/SPIN/test_problems/validation_damped_exchange/test-spin-precession.in diff --git a/examples/SPIN/test_problems/validation_damped_exchange/two_spins.data b/examples/SPIN/test_problems/validation_damped_exchange/two_spins.data new file mode 100644 index 0000000000000000000000000000000000000000..013f8137511fd02e1d16d0f2a4f7106cc4300209 --- /dev/null +++ b/examples/SPIN/test_problems/validation_damped_exchange/two_spins.data @@ -0,0 +1,22 @@ +LAMMPS data file via write_data, version 19 Sep 2019, timestep = 0 + +2 atoms +1 atom types + +0.0 6.0 xlo xhi +0.0 3.0 ylo yhi +0.0 3.0 zlo zhi + +Masses + +1 1 + +Atoms # spin + +1 1 2.0 0.0 0.0 0.0 1.0 0.0 0.0 0 0 0 +2 1 2.0 3.0 0.0 0.0 0.0 1.0 0.0 0 0 0 + +Velocities + +1 0.0 0.0 0.0 +2 0.0 0.0 0.0 diff --git a/examples/SPIN/test_problems/validation_damped_precession/run-test-prec.sh b/examples/SPIN/test_problems/validation_damped_precession/run-test-prec.sh index 49ebc2ac4efd19895877fe847d5e728b0c731096..86091793767c7300328e9a76252b54143410d79e 100755 --- a/examples/SPIN/test_problems/validation_damped_precession/run-test-prec.sh +++ b/examples/SPIN/test_problems/validation_damped_precession/run-test-prec.sh @@ -5,7 +5,7 @@ rm res_*.dat # compute Lammps ./../../../../src/lmp_serial \ - -in bench-spin-precession.in + -in test-spin-precession.in in="$(grep -n Step log.lammps | awk -F ':' '{print $1}')" en="$(grep -n Loop log.lammps | awk -F ':' '{print $1}')" in="$(echo "$in+1" | bc -l)" @@ -13,7 +13,7 @@ en="$(echo "$en-$in" | bc -l)" tail -n +$in log.lammps | head -n $en > res_lammps.dat # compute Langevin -python3 -m llg_precession.py > res_llg.dat +python3 llg_precession.py > res_llg.dat # plot results -python3 -m plot_precession.py res_lammps.dat res_llg.dat +python3 plot_precession.py res_lammps.dat res_llg.dat diff --git a/examples/SPIN/test_problems/validation_damped_precession/bench-spin-precession.in b/examples/SPIN/test_problems/validation_damped_precession/test-spin-precession.in similarity index 90% rename from examples/SPIN/test_problems/validation_damped_precession/bench-spin-precession.in rename to examples/SPIN/test_problems/validation_damped_precession/test-spin-precession.in index ed8a5caeaf747f8bc77c83a77ad74828c865255c..b8e943e579cc6caa67417ea21f534eb316e67137 100644 --- a/examples/SPIN/test_problems/validation_damped_precession/bench-spin-precession.in +++ b/examples/SPIN/test_problems/validation_damped_precession/test-spin-precession.in @@ -3,7 +3,7 @@ units metal atom_style spin atom_modify map array -boundary p p p +boundary f f f # read_data singlespin.data @@ -26,6 +26,7 @@ variable Temperature equal 0.0 variable Nsteps equal 500000 fix 1 all nve/spin lattice no +# fix 2 all precession/spin zeeman ${H} 0.0 0.0 1.0 anisotropy ${Kan} 0.0 0.0 1.0 fix 2 all precession/spin zeeman ${H} 0.0 0.0 1.0 anisotropy ${Kan} 0.0 0.0 1.0 fix_modify 2 energy yes fix 3 all langevin/spin ${Temperature} 0.01 12345 diff --git a/examples/SPIN/test_problems/validation_langevin_precession/langevin.py b/examples/SPIN/test_problems/validation_langevin_precession/langevin.py index 7acb78014316abf67ace7355b7899c4e5e983a43..0e9b634eeba7f0c1997d27c0c7640423a6b8689a 100755 --- a/examples/SPIN/test_problems/validation_langevin_precession/langevin.py +++ b/examples/SPIN/test_problems/validation_langevin_precession/langevin.py @@ -1,12 +1,8 @@ #!/usr/bin/env python3 -#Program fitting the exchange interaction -#Model curve: Bethe-Slater function import numpy as np, pylab, tkinter import matplotlib.pyplot as plt import mpmath as mp -# from scipy.optimize import curve_fit -# from decimal import * mub=5.78901e-5 # Bohr magneton (eV/T) kb=8.617333262145e-5 # Boltzman constant (eV/K) @@ -24,4 +20,3 @@ tf=20.0 for i in range (0,npoints): temp=ti+i*(tf-ti)/npoints print('%lf %lf %lf' % (temp,func(temp),-g*mub*Hz*func(temp))) - diff --git a/examples/SPIN/test_problems/validation_langevin_precession/run-test-prec.sh b/examples/SPIN/test_problems/validation_langevin_precession/run-test-prec.sh index 98fceeca956f26661abc03fca7ffb1760e0526de..bcdd33790380e04e94e965b262dc6a95ec737f03 100755 --- a/examples/SPIN/test_problems/validation_langevin_precession/run-test-prec.sh +++ b/examples/SPIN/test_problems/validation_langevin_precession/run-test-prec.sh @@ -10,10 +10,9 @@ N=20 for (( i=0; i<$N; i++ )) do temp="$(echo "$tempi+$i*($tempf-$tempi)/$N" | bc -l)" - sed s/temperature/${temp}/g bench-prec-spin.template > \ - bench-prec-spin.in - ./../../../../src/lmp_serial \ - -in bench-prec-spin.in + sed s/temperature/${temp}/g test-prec-spin.template > \ + test-prec-spin.in + ./../../../../src/lmp_serial -in test-prec-spin.in Hz="$(tail -n 1 average_spin | awk -F " " '{print $3}')" sz="$(tail -n 1 average_spin | awk -F " " '{print $5}')" en="$(tail -n 1 average_spin | awk -F " " '{print $6}')" @@ -21,7 +20,7 @@ do done # compute Langevin -python3 -m langevin.py > res_langevin.dat +python3 langevin.py > res_langevin.dat # plot results -python3 -m plot_precession.py res_lammps.dat res_langevin.dat +python3 plot_precession.py res_lammps.dat res_langevin.dat diff --git a/examples/SPIN/test_problems/validation_langevin_precession/bench-prec-spin.template b/examples/SPIN/test_problems/validation_langevin_precession/test-prec-spin.template similarity index 100% rename from examples/SPIN/test_problems/validation_langevin_precession/bench-prec-spin.template rename to examples/SPIN/test_problems/validation_langevin_precession/test-prec-spin.template diff --git a/examples/SPIN/test_problems/validation_nve/Fe_Mishin2006.eam.alloy b/examples/SPIN/test_problems/validation_nve/Fe_Mishin2006.eam.alloy new file mode 100644 index 0000000000000000000000000000000000000000..69231bb7eeed5677009482896fe520f4445413dd --- /dev/null +++ b/examples/SPIN/test_problems/validation_nve/Fe_Mishin2006.eam.alloy @@ -0,0 +1,15009 @@ +comment 1 +comment 2 +Converted by Ganga P Purja Pun using C++ code on Mon Nov 3 10:48:17 2014 +1 Fe +5001 2.400000000000000e-03 5001 1.134673400048920e-03 5.673367000244601e+00 +26 5.584700000000000e+01 2.855300000000000e+00 BCC + 0.000000000000000e+00 + -2.338738741480766e-02 + -4.628214468925276e-02 + -6.912258036387915e-02 + -9.175603963501618e-02 + -1.141497214000000e-01 + -1.363388222824136e-01 + -1.583226111166723e-01 + -1.800965752913192e-01 + -2.016645989796093e-01 + -2.230289901000000e-01 + -2.441907391820846e-01 + -2.651515164004249e-01 + -2.859130554412839e-01 + -3.064769176965011e-01 + -3.268446844000000e-01 + -3.470179531091855e-01 + -3.669982968636285e-01 + -3.867872784635140e-01 + -4.063864535839295e-01 + -4.257973671999999e-01 + -4.450215551034667e-01 + -4.640605423684923e-01 + -4.829158454463851e-01 + -5.015889707095635e-01 + -5.200814146000000e-01 + -5.383946650297390e-01 + -5.565301991603658e-01 + -5.744894857268537e-01 + -5.922739837155686e-01 + -6.098851423000000e-01 + -6.273244022645037e-01 + -6.445931939756846e-01 + -6.616929394780281e-01 + -6.786250511352716e-01 + -6.953909318999999e-01 + -7.119919765952718e-01 + -7.284295696432279e-01 + -7.447050873484842e-01 + -7.608198966551055e-01 + -7.767753551999997e-01 + -7.925728126189590e-01 + -8.082136084644670e-01 + -8.236990743647939e-01 + -8.390305327768360e-01 + -8.542092970000001e-01 + -8.692366724924486e-01 + -8.841139549244775e-01 + -8.988424321942350e-01 + -9.134233831702263e-01 + -9.278580778000000e-01 + -9.421477783833053e-01 + -9.562937376266863e-01 + -9.702972006149804e-01 + -9.841594035897939e-01 + -9.978815741999999e-01 + -1.011464932626877e+00 + -1.024910689374227e+00 + -1.038220047492379e+00 + -1.051394201530088e+00 + -1.064434338000000e+00 + -1.077341636148692e+00 + -1.090117264995124e+00 + -1.102762386491716e+00 + -1.115278154872840e+00 + -1.127665716000000e+00 + -1.139926208397942e+00 + -1.152060761127338e+00 + -1.164070496370367e+00 + -1.175956528594255e+00 + -1.187719964000000e+00 + -1.199361901614307e+00 + -1.210883431375302e+00 + -1.222285636497208e+00 + -1.233569592577916e+00 + -1.244736367000000e+00 + -1.255787020138112e+00 + -1.266722603828963e+00 + -1.277544163022812e+00 + -1.288252734706093e+00 + -1.298849349000000e+00 + -1.309335029515858e+00 + -1.319710789766606e+00 + -1.329977637188551e+00 + -1.340136572985217e+00 + -1.350188590000000e+00 + -1.360134674013246e+00 + -1.369975802739515e+00 + -1.379712947700534e+00 + -1.389347073262624e+00 + -1.398879136000000e+00 + -1.408310086019347e+00 + -1.417640866058629e+00 + -1.426872412303706e+00 + -1.436005653062347e+00 + -1.445041510000000e+00 + -1.453980898788701e+00 + -1.462824726507764e+00 + -1.471573894410746e+00 + -1.480229297407323e+00 + -1.488791823000000e+00 + -1.497262352264216e+00 + -1.505641758273629e+00 + -1.513930908641532e+00 + -1.522130664940848e+00 + -1.530241881000000e+00 + -1.538265404312065e+00 + -1.546202075663511e+00 + -1.554052729949587e+00 + -1.561818194964572e+00 + -1.569499292000000e+00 + -1.577096836740392e+00 + -1.584611637631811e+00 + -1.592044497451960e+00 + -1.599396212413425e+00 + -1.606667572000000e+00 + -1.613859360067553e+00 + -1.620972353850301e+00 + -1.628007324820493e+00 + -1.634965037585305e+00 + -1.641846251000000e+00 + -1.648651718746855e+00 + -1.655382187120556e+00 + -1.662038397074428e+00 + -1.668621083574689e+00 + -1.675130975000000e+00 + -1.681568794320005e+00 + -1.687935258528783e+00 + -1.694231079461267e+00 + -1.700456962682860e+00 + -1.706613607000000e+00 + -1.712701705964896e+00 + -1.718721948142722e+00 + -1.724675016499694e+00 + -1.730561586828580e+00 + -1.736382330000000e+00 + -1.742137912457411e+00 + -1.747828994017656e+00 + -1.753456229026646e+00 + -1.759020265526974e+00 + -1.764521747000000e+00 + -1.769961312537754e+00 + -1.775339594027171e+00 + -1.780657218386706e+00 + -1.785914807192779e+00 + -1.791112977000000e+00 + -1.796252339747382e+00 + -1.801333500673453e+00 + -1.806357060360666e+00 + -1.811323614328498e+00 + -1.816233753000000e+00 + -1.821088062150410e+00 + -1.825887120985276e+00 + -1.830631504346673e+00 + -1.835321782397329e+00 + -1.839958520000000e+00 + -1.844542277375300e+00 + -1.849073608812209e+00 + -1.853553064572349e+00 + -1.857981190434394e+00 + -1.862358526000000e+00 + -1.866685606181999e+00 + -1.870962962067843e+00 + -1.875191119963197e+00 + -1.879370599902195e+00 + -1.883501918000000e+00 + -1.887585586736770e+00 + -1.891622112755978e+00 + -1.895611998485404e+00 + -1.899555741651499e+00 + -1.903453835000000e+00 + -1.907306767129976e+00 + -1.911115021853308e+00 + -1.914879078883785e+00 + -1.918599413067872e+00 + -1.922276495000000e+00 + -1.925910791456493e+00 + -1.929502763824010e+00 + -1.933052869645757e+00 + -1.936561562187136e+00 + -1.940029290000000e+00 + -1.943456497684402e+00 + -1.946843625242175e+00 + -1.950191109032846e+00 + -1.953499381145042e+00 + -1.956768869000000e+00 + -1.959999996258605e+00 + -1.963193182622893e+00 + -1.966348843806269e+00 + -1.969467390558660e+00 + -1.972549230000000e+00 + -1.975594766012145e+00 + -1.978604397775412e+00 + -1.981578520793180e+00 + -1.984517526364655e+00 + -1.987421802000000e+00 + -1.990291731861874e+00 + -1.993127695559656e+00 + -1.995930069364364e+00 + -1.998699225767272e+00 + -2.001435533000000e+00 + -2.004139355858378e+00 + -2.006811055538481e+00 + -2.009450989763890e+00 + -2.012059511961222e+00 + -2.014636972000000e+00 + -2.017183716742461e+00 + -2.019700089231340e+00 + -2.022186429001382e+00 + -2.024643071393187e+00 + -2.027070349000000e+00 + -2.029468591629637e+00 + -2.031838124095820e+00 + -2.034179268100215e+00 + -2.036492342201070e+00 + -2.038777662000000e+00 + -2.041035540156417e+00 + -2.043266284490031e+00 + -2.045470200083453e+00 + -2.047647589335177e+00 + -2.049798751000000e+00 + -2.051923980684690e+00 + -2.054023570214561e+00 + -2.056097808968247e+00 + -2.058146983649728e+00 + -2.060171377000000e+00 + -2.062171268551674e+00 + -2.064146934640815e+00 + -2.066098649159696e+00 + -2.068026683134947e+00 + -2.069931304000000e+00 + -2.071812776276246e+00 + -2.073671361471072e+00 + -2.075507318519566e+00 + -2.077320903301032e+00 + -2.079112369000000e+00 + -2.080881966139512e+00 + -2.082629940879466e+00 + -2.084356537486872e+00 + -2.086061998635378e+00 + -2.087746563000000e+00 + -2.089410466229110e+00 + -2.091053941828707e+00 + -2.092677220771137e+00 + -2.094280530723314e+00 + -2.095864097000000e+00 + -2.097428142794787e+00 + -2.098972888139794e+00 + -2.100498550462023e+00 + -2.102005344216306e+00 + -2.103493482000000e+00 + -2.104963174393948e+00 + -2.106414628045970e+00 + -2.107848047779690e+00 + -2.109263636820768e+00 + -2.110661595000000e+00 + -2.112042119471926e+00 + -2.113405405101743e+00 + -2.114751645122076e+00 + -2.116081030815763e+00 + -2.117393750000000e+00 + -2.118689987937912e+00 + -2.119969928191390e+00 + -2.121233752504371e+00 + -2.122481640223532e+00 + -2.123713768000000e+00 + -2.124930310308645e+00 + -2.126131439345980e+00 + -2.127317325650607e+00 + -2.128488137848567e+00 + -2.129644042000000e+00 + -2.130785202020548e+00 + -2.131911779449632e+00 + -2.133023934312029e+00 + -2.134121824962966e+00 + -2.135205607000000e+00 + -2.136275433910872e+00 + -2.137331457489147e+00 + -2.138373827747866e+00 + -2.139402692469194e+00 + -2.140418197999999e+00 + -2.141420489142081e+00 + -2.142409707722756e+00 + -2.143385994030927e+00 + -2.144349486926974e+00 + -2.145300323000000e+00 + -2.146238637076898e+00 + -2.147164562479522e+00 + -2.148078231051947e+00 + -2.148979772720135e+00 + -2.149869315000000e+00 + -2.150746983835218e+00 + -2.151612904662093e+00 + -2.152467200947815e+00 + -2.153309993218032e+00 + -2.154141401000000e+00 + -2.154961542883784e+00 + -2.155770535619624e+00 + -2.156568494253713e+00 + -2.157355531798206e+00 + -2.158131760000000e+00 + -2.158897289576013e+00 + -2.159652229917454e+00 + -2.160396688379106e+00 + -2.161130769707277e+00 + -2.161854579000000e+00 + -2.162568220747540e+00 + -2.163271795520776e+00 + -2.163965403104795e+00 + -2.164649143391419e+00 + -2.165323114000000e+00 + -2.165987410839904e+00 + -2.166642128874188e+00 + -2.167287362019562e+00 + -2.167923202786971e+00 + -2.168549742000000e+00 + -2.169167069289456e+00 + -2.169775273557456e+00 + -2.170374442741976e+00 + -2.170964663390078e+00 + -2.171546020000000e+00 + -2.172118595836383e+00 + -2.172682474202094e+00 + -2.173237737093693e+00 + -2.173784464448991e+00 + -2.174322736000000e+00 + -2.174852630794634e+00 + -2.175374225221640e+00 + -2.175887595177988e+00 + -2.176392816678372e+00 + -2.176889964000000e+00 + -2.177379110090651e+00 + -2.177860327096639e+00 + -2.178333686466943e+00 + -2.178799258747679e+00 + -2.179257113000000e+00 + -2.179707317299531e+00 + -2.180149939409128e+00 + -2.180585046165010e+00 + -2.181012703042297e+00 + -2.181432975000000e+00 + -2.181845926509731e+00 + -2.182251621108717e+00 + -2.182650121032542e+00 + -2.183041486916871e+00 + -2.183425780000000e+00 + -2.183803061402426e+00 + -2.184173389857596e+00 + -2.184536823542827e+00 + -2.184893420600431e+00 + -2.185243238000000e+00 + -2.185586332004080e+00 + -2.185922759056265e+00 + -2.186252574500474e+00 + -2.186575831916728e+00 + -2.186892585000000e+00 + -2.187202887393400e+00 + -2.187506791832633e+00 + -2.187804350256584e+00 + -2.188095613705712e+00 + -2.188380633000000e+00 + -2.188659458643119e+00 + -2.188932140238827e+00 + -2.189198726845117e+00 + -2.189459267002233e+00 + -2.189713809000000e+00 + -2.189962400732430e+00 + -2.190205089044370e+00 + -2.190441920581333e+00 + -2.190672942002169e+00 + -2.190898199000000e+00 + -2.191117736662499e+00 + -2.191331600149922e+00 + -2.191539834109547e+00 + -2.191742482380937e+00 + -2.191939589000000e+00 + -2.192131197889608e+00 + -2.192317351831708e+00 + -2.192498093290244e+00 + -2.192673464653123e+00 + -2.192843508000000e+00 + -2.193008265149897e+00 + -2.193167777657277e+00 + -2.193322086821774e+00 + -2.193471233640668e+00 + -2.193615259000000e+00 + -2.193754203483761e+00 + -2.193888106693908e+00 + -2.194017008313546e+00 + -2.194140948496115e+00 + -2.194259967000000e+00 + -2.194374103230534e+00 + -2.194483396307522e+00 + -2.194587885225862e+00 + -2.194687608881331e+00 + -2.194782606000000e+00 + -2.194872915200472e+00 + -2.194958575082935e+00 + -2.195039623893670e+00 + -2.195116099394696e+00 + -2.195188040000000e+00 + -2.195255484352944e+00 + -2.195318470219860e+00 + -2.195377035223315e+00 + -2.195431217130485e+00 + -2.195481054000000e+00 + -2.195526583926446e+00 + -2.195567844428364e+00 + -2.195604873029958e+00 + -2.195637707516086e+00 + -2.195666386000000e+00 + -2.195690946583878e+00 + -2.195711426545218e+00 + -2.195727863658885e+00 + -2.195740296673043e+00 + -2.195748763000000e+00 + -2.195753299607926e+00 + -2.195753945356280e+00 + -2.195750739132009e+00 + -2.195743719093693e+00 + -2.195732923000000e+00 + -2.195718388771941e+00 + -2.195700155840199e+00 + -2.195678263244660e+00 + -2.195652748934943e+00 + -2.195623652000000e+00 + -2.195591012099144e+00 + -2.195554867993407e+00 + -2.195515258985693e+00 + -2.195472225489285e+00 + -2.195425807000000e+00 + -2.195376042760528e+00 + -2.195322973614639e+00 + -2.195266640267298e+00 + -2.195207082686241e+00 + -2.195144342000000e+00 + -2.195078459809379e+00 + -2.195009476453377e+00 + -2.194937433066797e+00 + -2.194862372466152e+00 + -2.194784337000000e+00 + -2.194703368615792e+00 + -2.194619509257747e+00 + -2.194532801771278e+00 + -2.194443290305841e+00 + -2.194351018000000e+00 + -2.194256027737437e+00 + -2.194158364279782e+00 + -2.194058072250755e+00 + -2.193955195446114e+00 + -2.193849779000000e+00 + -2.193741868885436e+00 + -2.193631510785602e+00 + -2.193518750557477e+00 + -2.193403634464252e+00 + -2.193286209000000e+00 + -2.193166521091908e+00 + -2.193044618884907e+00 + -2.192920550384463e+00 + -2.192794362988794e+00 + -2.192666105000000e+00 + -2.192535825071375e+00 + -2.192403570783236e+00 + -2.192269389306454e+00 + -2.192133327558461e+00 + -2.191995432000000e+00 + -2.191855748732582e+00 + -2.191714323538803e+00 + -2.191571201647935e+00 + -2.191426427571225e+00 + -2.191280046000000e+00 + -2.191132101498374e+00 + -2.190982637495000e+00 + -2.190831697104933e+00 + -2.190679323369808e+00 + -2.190525559000000e+00 + -2.190370446239990e+00 + -2.190214026313205e+00 + -2.190056340263544e+00 + -2.189897429222788e+00 + -2.189737334000000e+00 + -2.189576094894156e+00 + -2.189413751026334e+00 + -2.189250341662785e+00 + -2.189085906605225e+00 + -2.188920484000000e+00 + -2.188754111167896e+00 + -2.188586826517446e+00 + -2.188418667831656e+00 + -2.188249671505532e+00 + -2.188079874000000e+00 + -2.187909311655257e+00 + -2.187738019850499e+00 + -2.187566033827133e+00 + -2.187393388939138e+00 + -2.187220120000000e+00 + -2.187046261198758e+00 + -2.186871845656608e+00 + -2.186696906557450e+00 + -2.186521477499284e+00 + -2.186345591000000e+00 + -2.186169278929348e+00 + -2.185992573469870e+00 + -2.185815507881449e+00 + -2.185638116930091e+00 + -2.185460435000000e+00 + -2.185282496723147e+00 + -2.185104339046128e+00 + -2.184925999471230e+00 + -2.184747515559985e+00 + -2.184568926000000e+00 + -2.184390270419004e+00 + -2.184211589307456e+00 + -2.184032923638580e+00 + -2.183854314918697e+00 + -2.183675806000000e+00 + -2.183497440664645e+00 + -2.183319263062145e+00 + -2.183141318226586e+00 + -2.182963652427783e+00 + -2.182786312000000e+00 + -2.182609343803448e+00 + -2.182432796909005e+00 + -2.182256720850984e+00 + -2.182081165100584e+00 + -2.181906180000000e+00 + -2.181731816772078e+00 + -2.181558127901617e+00 + -2.181385166690271e+00 + -2.181212987245827e+00 + -2.181041644000000e+00 + -2.180871191888493e+00 + -2.180701687214938e+00 + -2.180533187286951e+00 + -2.180365750436408e+00 + -2.180199435000000e+00 + -2.180034299706266e+00 + -2.179870405073628e+00 + -2.179707812476292e+00 + -2.179546583956951e+00 + -2.179386782000000e+00 + -2.179228469569652e+00 + -2.179071710572415e+00 + -2.178916570209873e+00 + -2.178763115274171e+00 + -2.178611412000000e+00 + -2.178461526719817e+00 + -2.178313527960817e+00 + -2.178167485170301e+00 + -2.178023468394170e+00 + -2.177881548000000e+00 + -2.177741794911888e+00 + -2.177604281585152e+00 + -2.177469081134519e+00 + -2.177336267165003e+00 + -2.177205914000000e+00 + -2.177078096781969e+00 + -2.176952892179310e+00 + -2.176830377266735e+00 + -2.176710629289710e+00 + -2.176593727000000e+00 + -2.176479750089725e+00 + -2.176368778170715e+00 + -2.176260892035270e+00 + -2.176156174290115e+00 + -2.176054707000000e+00 + -2.175956572480315e+00 + -2.175861855847520e+00 + -2.175770642395214e+00 + -2.175683016800304e+00 + -2.175599066000000e+00 + -2.175518878125867e+00 + -2.175442540126260e+00 + -2.175370140365612e+00 + -2.175301769822078e+00 + -2.175237519000000e+00 + -2.175177478422601e+00 + -2.175121740498959e+00 + -2.175070398200953e+00 + -2.175023544771637e+00 + -2.174981275000000e+00 + -2.174943684570890e+00 + -2.174910868831887e+00 + -2.174882924320826e+00 + -2.174859949548785e+00 + -2.174842043000000e+00 + -2.174829303331104e+00 + -2.174821830410927e+00 + -2.174819725228089e+00 + -2.174823090027552e+00 + -2.174832027000000e+00 + -2.174846638699704e+00 + -2.174867029559900e+00 + -2.174893304738549e+00 + -2.174925569834485e+00 + -2.174963931000000e+00 + -2.175008495084293e+00 + -2.175059370394289e+00 + -2.175116665887380e+00 + -2.175180491027200e+00 + -2.175250956000000e+00 + -2.175328171805043e+00 + -2.175412250937077e+00 + -2.175503306357684e+00 + -2.175601451271103e+00 + -2.175706800000000e+00 + -2.175819467765500e+00 + -2.175939570549688e+00 + -2.176067225041086e+00 + -2.176202548787411e+00 + -2.176345660000000e+00 + -2.176496677644949e+00 + -2.176655722183164e+00 + -2.176822914601843e+00 + -2.176998376191533e+00 + -2.177182229000000e+00 + -2.177374595921169e+00 + -2.177575601341799e+00 + -2.177785370087074e+00 + -2.178004027196875e+00 + -2.178231699000000e+00 + -2.178468512862275e+00 + -2.178714597011325e+00 + -2.178970080062299e+00 + -2.179235091002944e+00 + -2.179509760000000e+00 + -2.179794218272507e+00 + -2.180088598277346e+00 + -2.180393032665419e+00 + -2.180707654074028e+00 + -2.181032597000000e+00 + -2.181367997183408e+00 + -2.181713990526695e+00 + -2.182070713375897e+00 + -2.182438302803596e+00 + -2.182816897000000e+00 + -2.183206635150288e+00 + -2.183607657686531e+00 + -2.184020105275964e+00 + -2.184444118610974e+00 + -2.184879840000000e+00 + -2.185327412889597e+00 + -2.185786981109685e+00 + -2.186258689137973e+00 + -2.186742682377725e+00 + -2.187239107000000e+00 + -2.187748109862624e+00 + -2.188269838801850e+00 + -2.188804442677439e+00 + -2.189352071523296e+00 + -2.189912875000000e+00 + -2.190487003093955e+00 + -2.191074608322116e+00 + -2.191675843787203e+00 + -2.192290862610885e+00 + -2.192919819000000e+00 + -2.193562867915730e+00 + -2.194220164552147e+00 + -2.194891865404003e+00 + -2.195578128862665e+00 + -2.196279113000000e+00 + -2.196994976008069e+00 + -2.197725877814248e+00 + -2.198471979076637e+00 + -2.199233441010543e+00 + -2.200010426000000e+00 + -2.200803097224683e+00 + -2.201611618154960e+00 + -2.202436152922896e+00 + -2.203276866629103e+00 + -2.204133924999999e+00 + -2.205007494076377e+00 + -2.205897739759803e+00 + -2.206804828380775e+00 + -2.207728927012060e+00 + -2.208670203000000e+00 + -2.209628824019662e+00 + -2.210604958519273e+00 + -2.211598775212799e+00 + -2.212610442959744e+00 + -2.213640131000000e+00 + -2.214688008997179e+00 + -2.215754247358006e+00 + -2.216839016713686e+00 + -2.217942487809252e+00 + -2.219064832000000e+00 + -2.220206221175054e+00 + -2.221366827800435e+00 + -2.222546824259503e+00 + -2.223746382727115e+00 + -2.224965677000000e+00 + -2.226204881636015e+00 + -2.227464170011377e+00 + -2.228743716360184e+00 + -2.230043696636770e+00 + -2.231364286000000e+00 + -2.232705659360148e+00 + -2.234067993079961e+00 + -2.235451464138931e+00 + -2.236856249856844e+00 + -2.238282527000000e+00 + -2.239730472524265e+00 + -2.241200265638654e+00 + -2.242692085287406e+00 + -2.244206109271373e+00 + -2.245742517000000e+00 + -2.247301488882056e+00 + -2.248883204910052e+00 + -2.250487845315945e+00 + -2.252115590911750e+00 + -2.253766623000000e+00 + -2.255441123360801e+00 + -2.257139274542631e+00 + -2.258861259219423e+00 + -2.260607260005651e+00 + -2.262377460000000e+00 + -2.264172042724291e+00 + -2.265991192137124e+00 + -2.267835092970031e+00 + -2.269703930922391e+00 + -2.271597891000000e+00 + -2.273517158096056e+00 + -2.275461918662951e+00 + -2.277432359442962e+00 + -2.279428667085979e+00 + -2.281451029000000e+00 + -2.283499633104788e+00 + -2.285574667389452e+00 + -2.287676320195930e+00 + -2.289804780398682e+00 + -2.291960237000000e+00 + -2.294142879454985e+00 + -2.296352898805551e+00 + -2.298590485768695e+00 + -2.300855830078550e+00 + -2.303149122999999e+00 + -2.305470556795997e+00 + -2.307820323545887e+00 + -2.310198615647936e+00 + -2.312605626084681e+00 + -2.315041548000000e+00 + -2.317506574745174e+00 + -2.320000900224320e+00 + -2.322524719122656e+00 + -2.325078227061991e+00 + -2.327661619000000e+00 + -2.330275089774933e+00 + -2.332918835677479e+00 + -2.335593053485966e+00 + -2.338297940187764e+00 + -2.341033693000000e+00 + -2.343800509406319e+00 + -2.346598587410773e+00 + -2.349428125303093e+00 + -2.352289321686241e+00 + -2.355182376000000e+00 + -2.358107488272472e+00 + -2.361064858786305e+00 + -2.364054687769198e+00 + -2.367077175375671e+00 + -2.370132523000000e+00 + -2.373220932737141e+00 + -2.376342606269360e+00 + -2.379497745810629e+00 + -2.382686554578887e+00 + -2.385909236000000e+00 + -2.389165993580208e+00 + -2.392457030846979e+00 + -2.395782552198058e+00 + -2.399142763298191e+00 + -2.402537869000000e+00 + -2.405968074028050e+00 + -2.409433584975734e+00 + -2.412934608682329e+00 + -2.416471351683178e+00 + -2.420044020999999e+00 + -2.423652824137149e+00 + -2.427297969206864e+00 + -2.430979664728804e+00 + -2.434698119632543e+00 + -2.438453543000000e+00 + -2.442246144168148e+00 + -2.446076133195298e+00 + -2.449943720571852e+00 + -2.453849117184546e+00 + -2.457792534000000e+00 + -2.461774182279110e+00 + -2.465794274341647e+00 + -2.469853022790889e+00 + -2.473950640299041e+00 + -2.478087340000000e+00 + -2.482263335430129e+00 + -2.486478840559030e+00 + -2.490734069661931e+00 + -2.495029237377275e+00 + -2.499364559000000e+00 + -2.503740250274207e+00 + -2.508156527124766e+00 + -2.512613605692700e+00 + -2.517111702474631e+00 + -2.521651035000000e+00 + -2.526231821279088e+00 + -2.530854278665131e+00 + -2.535518625205626e+00 + -2.540225080261870e+00 + -2.544973863000000e+00 + -2.549765192573217e+00 + -2.554599288888442e+00 + -2.559476372494764e+00 + -2.564396664604125e+00 + -2.569360386000000e+00 + -2.574367757513646e+00 + -2.579419001423863e+00 + -2.584514340338642e+00 + -2.589653996851589e+00 + -2.594838193999999e+00 + -2.600067155253186e+00 + -2.605341104662645e+00 + -2.610660266783872e+00 + -2.616024866689215e+00 + -2.621435129000000e+00 + -2.626891278432673e+00 + -2.632393541366548e+00 + -2.637942144571998e+00 + -2.643537314797249e+00 + -2.649179279000000e+00 + -2.654868264471787e+00 + -2.660604499292826e+00 + -2.666388211776204e+00 + -2.672219630341834e+00 + -2.678098984000000e+00 + -2.684026502306392e+00 + -2.690002415494505e+00 + -2.696026954017429e+00 + -2.702100348331385e+00 + -2.708222828000000e+00 + -2.714394620651795e+00 + -2.720615948464916e+00 + -2.726887030965477e+00 + -2.733208085290139e+00 + -2.739579324000000e+00 + -2.746000955816228e+00 + -2.752473185385865e+00 + -2.758996214641690e+00 + -2.765570242469367e+00 + -2.772195463000000e+00 + -2.778872066776275e+00 + -2.785600241574056e+00 + -2.792380171842594e+00 + -2.799212037606767e+00 + -2.806096015000000e+00 + -2.813032277129447e+00 + -2.820020994035244e+00 + -2.827062331911353e+00 + -2.834156451970738e+00 + -2.841303512999999e+00 + -2.848503671252426e+00 + -2.855757077985244e+00 + -2.863063881095023e+00 + -2.870424224890850e+00 + -2.877838249999999e+00 + -2.885306093928394e+00 + -2.892827890388094e+00 + -2.900403769651381e+00 + -2.908033857857018e+00 + -2.915718277999999e+00 + -2.923457150039019e+00 + -2.931250588977881e+00 + -2.939098706889091e+00 + -2.947001612872150e+00 + -2.954959411999998e+00 + -2.962972205810575e+00 + -2.971040091434060e+00 + -2.979163163083816e+00 + -2.987341511831155e+00 + -2.995575224999998e+00 + -3.003864386499012e+00 + -3.012209075546996e+00 + -3.020609368336417e+00 + -3.029065337835770e+00 + -3.037577052999999e+00 + -3.046144579520789e+00 + -3.054767979666142e+00 + -3.063447312238444e+00 + -3.072182631692820e+00 + -3.080973988999999e+00 + -3.089821432099915e+00 + -3.098725004829577e+00 + -3.107684748048404e+00 + -3.116700699185534e+00 + -3.125772890999999e+00 + -3.134901352715559e+00 + -3.144086110699870e+00 + -3.153327188100508e+00 + -3.162624603843408e+00 + -3.171978372999998e+00 + -3.181388507546933e+00 + -3.190855016073102e+00 + -3.200377903469057e+00 + -3.209957169965227e+00 + -3.219592812999998e+00 + -3.229284827363896e+00 + -3.239033203402719e+00 + -3.248837927724427e+00 + -3.258698982652799e+00 + -3.268616347999998e+00 + -3.278590000914418e+00 + -3.288619913401403e+00 + -3.298706054004673e+00 + -3.308848387625167e+00 + -3.319046875999998e+00 + -3.329301477934322e+00 + -3.339612147844228e+00 + -3.349978836592516e+00 + -3.360401490990458e+00 + -3.370880054999998e+00 + -3.381414469596773e+00 + -3.392004670266620e+00 + -3.402650589976440e+00 + -3.413352159446950e+00 + -3.424109303999998e+00 + -3.434921945057392e+00 + -3.445790001867386e+00 + -3.456713390096515e+00 + -3.467692020464062e+00 + -3.478725800999998e+00 + -3.489814636890736e+00 + -3.500958427789171e+00 + -3.512157070764700e+00 + -3.523410460589800e+00 + -3.534718486999998e+00 + -3.546081035880271e+00 + -3.557497990199610e+00 + -3.568969229634993e+00 + -3.580494629586285e+00 + -3.592074061999998e+00 + -3.603707395759104e+00 + -3.615394495446970e+00 + -3.627135222559569e+00 + -3.638929435115233e+00 + -3.650776987000000e+00 + -3.662677728742245e+00 + -3.674631507325805e+00 + -3.686638166579447e+00 + -3.698697546469576e+00 + -3.710809483000000e+00 + -3.722973808828209e+00 + -3.735190352595157e+00 + -3.747458940125227e+00 + -3.759779394010754e+00 + -3.772151532000000e+00 + -3.784575168342916e+00 + -3.797050115062026e+00 + -3.809576180292756e+00 + -3.822153166803174e+00 + -3.834780875000000e+00 + -3.847459102820189e+00 + -3.860187643203489e+00 + -3.872966285667494e+00 + -3.885794816080159e+00 + -3.898673017000000e+00 + -3.911600667911320e+00 + -3.924577543724543e+00 + -3.937603416269590e+00 + -3.950678053996523e+00 + -3.963801221000000e+00 + -3.976972678103186e+00 + -3.990192183512261e+00 + -4.003459491521890e+00 + -4.016774351164608e+00 + -4.030136509000000e+00 + -4.043545709147031e+00 + -4.057001691149858e+00 + -4.070504190840202e+00 + -4.084052939835804e+00 + -4.097647667000000e+00 + -4.111288098419088e+00 + -4.124973955231095e+00 + -4.138704955371648e+00 + -4.152480813397504e+00 + -4.166301240000000e+00 + -4.180165942572286e+00 + -4.194074624537170e+00 + -4.208026986370140e+00 + -4.222022725101974e+00 + -4.236061533000000e+00 + -4.250143098846027e+00 + -4.264267108996074e+00 + -4.278433246261039e+00 + -4.292641188627767e+00 + -4.306890611000000e+00 + -4.321181185386233e+00 + -4.335512579090955e+00 + -4.349884456391911e+00 + -4.364296478350024e+00 + -4.378748302000000e+00 + -4.393239580901771e+00 + -4.407769964394226e+00 + -4.422339098999587e+00 + -4.436946628138934e+00 + -4.451592191000000e+00 + -4.466275423153566e+00 + -4.480995955945297e+00 + -4.495753418053649e+00 + -4.510547435209278e+00 + -4.525377628000000e+00 + -4.540243613376725e+00 + -4.555145006346341e+00 + -4.570081418154680e+00 + -4.585052454714511e+00 + -4.600057719000000e+00 + -4.615096811360685e+00 + -4.630169328028963e+00 + -4.645274861878902e+00 + -4.660413001844071e+00 + -4.675583333000000e+00 + -4.690785437259527e+00 + -4.706018892955582e+00 + -4.721283275134317e+00 + -4.736578154793736e+00 + -4.751903099000000e+00 + -4.767257671719769e+00 + -4.782641433752779e+00 + -4.798053942304498e+00 + -4.813494749953581e+00 + -4.828963406000000e+00 + -4.844459456896403e+00 + -4.859982445123970e+00 + -4.875531909767719e+00 + -4.891107385884028e+00 + -4.906708405000000e+00 + -4.922334495555203e+00 + -4.937985181840751e+00 + -4.953659984814029e+00 + -4.969358421588884e+00 + -4.985080006000000e+00 + -5.000824248840914e+00 + -5.016590656340991e+00 + -5.032378731598668e+00 + -5.048187974277996e+00 + -5.064017880000000e+00 + -5.079867940973151e+00 + -5.095737645459726e+00 + -5.111626480823102e+00 + -5.127533934923204e+00 + -5.143459499999997e+00 + -5.159402672483111e+00 + -5.175362954369220e+00 + -5.191339851303958e+00 + -5.207332872891304e+00 + -5.223341533999998e+00 + -5.239365353688981e+00 + -5.255403855076862e+00 + -5.271456565155025e+00 + -5.287523015792912e+00 + -5.303602743999997e+00 + -5.319695290809813e+00 + -5.335800201177900e+00 + -5.351917023850607e+00 + -5.368045312413205e+00 + -5.384184625999997e+00 + -5.400334527792659e+00 + -5.416494583936292e+00 + -5.432664365069262e+00 + -5.448843447960337e+00 + -5.465031412999998e+00 + -5.481227843963791e+00 + -5.497432330198948e+00 + -5.513644465003656e+00 + -5.529863846001168e+00 + -5.546090074999998e+00 + -5.562322757794160e+00 + -5.578561506278419e+00 + -5.594805935740466e+00 + -5.611055664858841e+00 + -5.627310317999997e+00 + -5.643569523867812e+00 + -5.659832914603254e+00 + -5.676100126691991e+00 + -5.692370802379017e+00 + -5.708644587999997e+00 + -5.724921133351554e+00 + -5.741200092816319e+00 + -5.757481124931912e+00 + -5.773763893288205e+00 + -5.790048065999996e+00 + -5.806333315035348e+00 + -5.822619317227983e+00 + -5.838905753168464e+00 + -5.855192307810226e+00 + -5.871478670999998e+00 + -5.887764536642293e+00 + -5.904049603224381e+00 + -5.920333573291820e+00 + -5.936616154283948e+00 + -5.952897057999997e+00 + -5.969175999997380e+00 + -5.985452700712029e+00 + -6.001726884408804e+00 + -6.017998279848357e+00 + -6.034266620999998e+00 + -6.050531645917840e+00 + -6.066793096565948e+00 + -6.083050719154321e+00 + -6.099304265265417e+00 + -6.115553489999997e+00 + -6.131798152082848e+00 + -6.148038016850530e+00 + -6.164272852974367e+00 + -6.180502432221914e+00 + -6.196726531999996e+00 + -6.212944934149927e+00 + -6.229157424398349e+00 + -6.245363792906498e+00 + -6.261563835474968e+00 + -6.277757350999996e+00 + -6.293944141712862e+00 + -6.310124016459128e+00 + -6.326296787703612e+00 + -6.342462271423720e+00 + -6.358620288999997e+00 + -6.374770666045148e+00 + -6.390913231950829e+00 + -6.407047820441565e+00 + -6.423174270811367e+00 + -6.439292425999997e+00 + -6.455402132459349e+00 + -6.471503242529590e+00 + -6.487595612302881e+00 + -6.503679101824962e+00 + -6.519753575999998e+00 + -6.535818903908587e+00 + -6.551874959678351e+00 + -6.567921621040533e+00 + -6.583958769810407e+00 + -6.599986292999997e+00 + -6.616004081814032e+00 + -6.632012031732002e+00 + -6.648010042213294e+00 + -6.663998017633650e+00 + -6.679975866999997e+00 + -6.695943503153600e+00 + -6.711900843425355e+00 + -6.727847809100131e+00 + -6.743784326279565e+00 + -6.759710325999998e+00 + -6.775625743222601e+00 + -6.791530516957345e+00 + -6.807424590371784e+00 + -6.823307911868753e+00 + -6.839180434000000e+00 + -6.855042113095231e+00 + -6.870892911056689e+00 + -6.886732793343159e+00 + -6.902561729209182e+00 + -6.918379693000000e+00 + -6.934186663377454e+00 + -6.949982623974822e+00 + -6.965767562024019e+00 + -6.981541468861679e+00 + -6.997304341000000e+00 + -7.013056179149240e+00 + -7.028796988372566e+00 + -7.044526777567921e+00 + -7.060245560311449e+00 + -7.075953355000000e+00 + -7.091650184045992e+00 + -7.107336074531737e+00 + -7.123011057484204e+00 + -7.138675168614964e+00 + -7.154328448000000e+00 + -7.169970939523060e+00 + -7.185602692089082e+00 + -7.201223758621499e+00 + -7.216834196750369e+00 + -7.232434069000000e+00 + -7.248023441650831e+00 + -7.263602384451917e+00 + -7.279170972021925e+00 + -7.294729285389790e+00 + -7.310277408000000e+00 + -7.325815426345584e+00 + -7.341343434315181e+00 + -7.356861529294433e+00 + -7.372369811668458e+00 + -7.387868387000000e+00 + -7.403357365322682e+00 + -7.418836861854650e+00 + -7.434306995371617e+00 + -7.449767888578398e+00 + -7.465219669000000e+00 + -7.480662468362842e+00 + -7.496096423635060e+00 + -7.511521675509539e+00 + -7.526938368822738e+00 + -7.542346653000000e+00 + -7.557746681513402e+00 + -7.573138613106206e+00 + -7.588522610348394e+00 + -7.603898840111169e+00 + -7.619267474000000e+00 + -7.634628687556104e+00 + -7.649982660818226e+00 + -7.665329578157865e+00 + -7.680669629212444e+00 + -7.696003007000000e+00 + -7.711329908041110e+00 + -7.726650535322031e+00 + -7.741965095546557e+00 + -7.757273799081691e+00 + -7.772576861000000e+00 + -7.787874500482072e+00 + -7.803166941820082e+00 + -7.818454413357075e+00 + -7.833737148083599e+00 + -7.849015383000000e+00 + -7.864289358883056e+00 + -7.879559322305754e+00 + -7.894825523493435e+00 + -7.910088216491122e+00 + -7.925347660000000e+00 + -7.940604117030949e+00 + -7.955857856656654e+00 + -7.971109151088187e+00 + -7.986358275553978e+00 + -8.001605510999999e+00 + -8.016851143003514e+00 + -8.032095461580266e+00 + -8.047338760488806e+00 + -8.062581337981985e+00 + -8.077823497000001e+00 + -8.093065544394179e+00 + -8.108307791577566e+00 + -8.123550554205780e+00 + -8.138794153086785e+00 + -8.154038912999997e+00 + -8.169285162395173e+00 + -8.184533235306290e+00 + -8.199783469410583e+00 + -8.215036206329255e+00 + -8.230291792999997e+00 + -8.245550580528674e+00 + -8.260812923863309e+00 + -8.276079182235739e+00 + -8.291349720375887e+00 + -8.306624906999998e+00 + -8.321905114401627e+00 + -8.337190720129563e+00 + -8.352482105562956e+00 + -8.367779656388556e+00 + -8.383083762999997e+00 + -8.398394819954635e+00 + -8.413713227271362e+00 + -8.429039388338369e+00 + -8.444373710123081e+00 + -8.459716604999997e+00 + -8.475068489773328e+00 + -8.490429785807564e+00 + -8.505800918193746e+00 + -8.521182316459129e+00 + -8.536574414999997e+00 + -8.551977652264261e+00 + -8.567392471335332e+00 + -8.582819319266729e+00 + -8.598258647834163e+00 + -8.613710912999998e+00 + -8.629176574613023e+00 + -8.644656098315155e+00 + -8.660149953296175e+00 + -8.675658612460374e+00 + -8.691182553999997e+00 + -8.706722260346437e+00 + -8.722278218076596e+00 + -8.737850917931995e+00 + -8.753440855866357e+00 + -8.769048531999996e+00 + -8.784674450012169e+00 + -8.800319118245726e+00 + -8.815983049456063e+00 + -8.831666761752983e+00 + -8.847370776999997e+00 + -8.863095620572640e+00 + -8.878841823409489e+00 + -8.894609920288579e+00 + -8.910400450202564e+00 + -8.926213956999996e+00 + -8.942050988642462e+00 + -8.957912097948702e+00 + -8.973797841249739e+00 + -8.989708778929735e+00 + -9.005645476999996e+00 + -9.021608505891232e+00 + -9.037598440089864e+00 + -9.053615857732957e+00 + -9.069661341483132e+00 + -9.085735478999997e+00 + -9.101838862125330e+00 + -9.117972087538210e+00 + -9.134135755396374e+00 + -9.150330469883286e+00 + -9.166556840999997e+00 + -9.182815483079517e+00 + -9.199107013675079e+00 + -9.215432054583626e+00 + -9.231791233265957e+00 + -9.248185180999997e+00 + -9.264614532683632e+00 + -9.281079929109534e+00 + -9.297582014702897e+00 + -9.314121437654787e+00 + -9.330698850999996e+00 + -9.347314912003528e+00 + -9.363970283188971e+00 + -9.380665630745685e+00 + -9.397401624940878e+00 + -9.414178940999998e+00 + -9.430998258244742e+00 + -9.447860260503859e+00 + -9.464765635761319e+00 + -9.481715077019253e+00 + -9.498709280999996e+00 + -9.515748948037771e+00 + -9.532834784442173e+00 + -9.549967500513571e+00 + -9.567147810785697e+00 + -9.584376433999996e+00 + -9.601654092679016e+00 + -9.618981514566920e+00 + -9.636359431588877e+00 + -9.653788580476306e+00 + -9.671269701999998e+00 + -9.688803540653204e+00 + -9.706390846469759e+00 + -9.724032373152683e+00 + -9.741728878390186e+00 + -9.759481124999997e+00 + -9.777289880050315e+00 + -9.795155915261526e+00 + -9.813080006095444e+00 + -9.831062932433847e+00 + -9.849105478999997e+00 + -9.867208434586416e+00 + -9.885372592754736e+00 + -9.903598750780114e+00 + -9.921887710289466e+00 + -9.940240277999996e+00 + -9.958657264807959e+00 + -9.977139486156000e+00 + -9.995687760994512e+00 + -1.001430291248964e+01 + -1.003298577000000e+01 + -1.005173716741557e+01 + -1.007055794170109e+01 + -1.008944893313717e+01 + -1.010841098632109e+01 + -1.012744495000000e+01 + -1.014655167843811e+01 + -1.016573203809090e+01 + -1.018498689280856e+01 + -1.020431709913334e+01 + -1.022372353000000e+01 + -1.024320706932260e+01 + -1.026276860085199e+01 + -1.028240900753776e+01 + -1.030212917226508e+01 + -1.032192999000000e+01 + -1.034181236270672e+01 + -1.036177718920571e+01 + -1.038182537682789e+01 + -1.040195784652257e+01 + -1.042217551000000e+01 + -1.044247927800797e+01 + -1.046287008429113e+01 + -1.048334886197221e+01 + -1.050391653528098e+01 + -1.052457404000000e+01 + -1.054532232135862e+01 + -1.056616233045517e+01 + -1.058709501821704e+01 + -1.060812133414642e+01 + -1.062924224000000e+01 + -1.065045870478386e+01 + -1.067177169452023e+01 + -1.069318217826154e+01 + -1.071469113174534e+01 + -1.073629954000000e+01 + -1.075800839260036e+01 + -1.077981867489276e+01 + -1.080173138018267e+01 + -1.082374751517595e+01 + -1.084586808000000e+01 + -1.086809407471729e+01 + -1.089042651905600e+01 + -1.091286643223940e+01 + -1.093541482646511e+01 + -1.095807273000000e+01 + -1.098084118002027e+01 + -1.100372120627546e+01 + -1.102671384288809e+01 + -1.104982013415814e+01 + -1.107304113000000e+01 + -1.109637788366843e+01 + -1.111983144958023e+01 + -1.114340288661973e+01 + -1.116709326043168e+01 + -1.119090364000000e+01 + -1.121483509746141e+01 + -1.123888871051257e+01 + -1.126306556352589e+01 + -1.128736674843474e+01 + -1.131179335000000e+01 + -1.133634645465832e+01 + -1.136102717560643e+01 + -1.138583662099362e+01 + -1.141077588304154e+01 + -1.143584608000000e+01 + -1.146104834278586e+01 + -1.148638378227322e+01 + -1.151185351768562e+01 + -1.153745868860526e+01 + -1.156320043000000e+01 + -1.158907987623694e+01 + -1.161509817570602e+01 + -1.164125647703402e+01 + -1.166755592508495e+01 + -1.169399768000000e+01 + -1.172058291041322e+01 + -1.174731277861368e+01 + -1.177418844974534e+01 + -1.180121109657743e+01 + -1.182838189999999e+01 + -1.185570204579555e+01 + -1.188317272006268e+01 + -1.191079511332836e+01 + -1.193857042312863e+01 + -1.196649984999999e+01 + -1.199458459773775e+01 + -1.202282587700695e+01 + -1.205122490269986e+01 + -1.207978289369385e+01 + -1.210850107000000e+01 + -1.213738065440104e+01 + -1.216642287877588e+01 + -1.219562898067898e+01 + -1.222500020303083e+01 + -1.225453779000000e+01 + -1.228424298812801e+01 + -1.231411705144751e+01 + -1.234416123799292e+01 + -1.237437680934280e+01 + -1.240476502999999e+01 + -1.243532716862228e+01 + -1.246606450371358e+01 + -1.249697831672881e+01 + -1.252806989018327e+01 + -1.255934050999999e+01 + -1.259079146663310e+01 + -1.262242406008652e+01 + -1.265423959346900e+01 + -1.268623937120698e+01 + -1.271842469999999e+01 + -1.275079689157634e+01 + -1.278335727210730e+01 + -1.281610716656313e+01 + -1.284904789393346e+01 + -1.288218078999999e+01 + -1.291550719883721e+01 + -1.294902845305343e+01 + -1.298274589252790e+01 + -1.301666087289315e+01 + -1.305077474999999e+01 + -1.308508888000826e+01 + -1.311960462335401e+01 + -1.315432334734565e+01 + -1.318924642810263e+01 + -1.322437523999999e+01 + -1.325971115825294e+01 + -1.329525556797775e+01 + -1.333100986045822e+01 + -1.336697543256989e+01 + -1.340315367999999e+01 + -1.343954599979837e+01 + -1.347615379884262e+01 + -1.351297848978655e+01 + -1.355002149050285e+01 + -1.358728421999999e+01 + -1.362476809975143e+01 + -1.366247455932581e+01 + -1.370040503112116e+01 + -1.373856094968169e+01 + -1.377694375999999e+01 + -1.381555491216690e+01 + -1.385439585021465e+01 + -1.389346802391279e+01 + -1.393277289476898e+01 + -1.397231192999999e+01 + -1.401208659972945e+01 + -1.405209837359219e+01 + -1.409234872413346e+01 + -1.413283912961124e+01 + -1.417357107999999e+01 + -1.421454607102127e+01 + -1.425576559243092e+01 + -1.429723113890712e+01 + -1.433894421536596e+01 + -1.438090632999999e+01 + -1.442311899332400e+01 + -1.446558371903957e+01 + -1.450830202765583e+01 + -1.455127544879836e+01 + -1.459450550999999e+01 + -1.463799373973040e+01 + -1.468174167767078e+01 + -1.472575086722947e+01 + -1.477002285383887e+01 + -1.481455918999999e+01 + -1.485936143285468e+01 + -1.490443114031971e+01 + -1.494976987417127e+01 + -1.499537920245961e+01 + -1.504126069999999e+01 + -1.508741594534576e+01 + -1.513384651602358e+01 + -1.518055399754435e+01 + -1.522753998778076e+01 + -1.527480607999999e+01 + -1.532235386668537e+01 + -1.537018495189360e+01 + -1.541830094448208e+01 + -1.546670345694024e+01 + -1.551539410999999e+01 + -1.556437452805486e+01 + -1.561364632974880e+01 + -1.566321114034704e+01 + -1.571307059764629e+01 + -1.576322633999999e+01 + -1.581368000886133e+01 + -1.586443325932826e+01 + -1.591548774371123e+01 + -1.596684510633198e+01 + -1.601850700999999e+01 + -1.607047512763592e+01 + -1.612275112310131e+01 + -1.617533666634843e+01 + -1.622823344044972e+01 + -1.628144312999999e+01 + -1.633496741991010e+01 + -1.638880799548294e+01 + -1.644296655089035e+01 + -1.649744479372194e+01 + -1.655224442999999e+01 + -1.660736716535794e+01 + -1.666281471098534e+01 + -1.671858878335293e+01 + -1.677469110504862e+01 + -1.683112339999999e+01 + -1.688788739643611e+01 + -1.694498483759857e+01 + -1.700241746523662e+01 + -1.706018701398879e+01 + -1.711829522999999e+01 + -1.717674386844329e+01 + -1.723553468924849e+01 + -1.729466945458232e+01 + -1.735414992865347e+01 + -1.741397788000000e+01 + -1.747415508099178e+01 + -1.753468330867943e+01 + -1.759556434768274e+01 + -1.765679999203036e+01 + -1.771839203000000e+01 + -1.778034225038387e+01 + -1.784265246094084e+01 + -1.790532446959567e+01 + -1.796836007816754e+01 + -1.803176110000000e+01 + -1.809552935720682e+01 + -1.815966667575656e+01 + -1.822417488078262e+01 + -1.828905579597735e+01 + -1.835431126000000e+01 + -1.841994311958100e+01 + -1.848595321475806e+01 + -1.855234338946741e+01 + -1.861911549709020e+01 + -1.868627140000000e+01 + -1.875381296458075e+01 + -1.882174205218422e+01 + -1.889006052915166e+01 + -1.895877027181235e+01 + -1.902787316000000e+01 + -1.909737107797965e+01 + -1.916726592078253e+01 + -1.923755957952593e+01 + -1.930825393714747e+01 + -1.937935090000000e+01 + -1.945085238647674e+01 + -1.952276030080435e+01 + -1.959507655061933e+01 + -1.966780305499929e+01 + -1.974094174000000e+01 + -1.981449453618971e+01 + -1.988846337667131e+01 + -1.996285019538828e+01 + -2.003765692760933e+01 + -2.011288552000000e+01 + -2.018853792621815e+01 + -2.026461609876727e+01 + -2.034112199510926e+01 + -2.041805758075517e+01 + -2.049542482000000e+01 + -2.057322568006621e+01 + -2.065146214471047e+01 + -2.073013619484967e+01 + -2.080924980240138e+01 + -2.088880495999999e+01 + -2.096880367169853e+01 + -2.104924793164823e+01 + -2.113013973534757e+01 + -2.121148108557274e+01 + -2.129327399999999e+01 + -2.137552050224973e+01 + -2.145822260294134e+01 + -2.154138232011573e+01 + -2.162500168821614e+01 + -2.170908273999999e+01 + -2.179362750931509e+01 + -2.187863804236205e+01 + -2.196411638687395e+01 + -2.205006458870765e+01 + -2.213648469999998e+01 + -2.222337877888525e+01 + -2.231074889087196e+01 + -2.239859710699802e+01 + -2.248692550346576e+01 + -2.257573614999999e+01 + -2.266503111825121e+01 + -2.275481250533621e+01 + -2.284508240538831e+01 + -2.293584289979252e+01 + -2.302709608999998e+01 + -2.311884408797131e+01 + -2.321108899308483e+01 + -2.330383291176923e+01 + -2.339707796636268e+01 + -2.349082627999998e+01 + -2.358507997580010e+01 + -2.367984117841246e+01 + -2.377511201965127e+01 + -2.387089464198777e+01 + -2.396719118999998e+01 + -2.406400380890314e+01 + -2.416133464354705e+01 + -2.425918584868402e+01 + -2.435755959379285e+01 + -2.445645803999998e+01 + -2.455588334675619e+01 + -2.465583769169985e+01 + -2.475632325621871e+01 + -2.485734222078360e+01 + -2.495889676999998e+01 + -2.506098909313465e+01 + -2.516362138717989e+01 + -2.526679585042222e+01 + -2.537051468121954e+01 + -2.547478008999998e+01 + -2.557959429416147e+01 + -2.568495950782481e+01 + -2.579087794894506e+01 + -2.589735184307986e+01 + -2.600438342000000e+01 + -2.611197491414786e+01 + -2.622012856937007e+01 + -2.632884662779481e+01 + -2.643813132670684e+01 + -2.654798492000000e+01 + -2.665840967182968e+01 + -2.676940784333127e+01 + -2.688098169572292e+01 + -2.699313349264397e+01 + -2.710586551000000e+01 + -2.721918002998715e+01 + -2.733307932892397e+01 + -2.744756569229334e+01 + -2.756264142140602e+01 + -2.767830881000000e+01 + -2.779457014947893e+01 + -2.791142774510221e+01 + -2.802888390934165e+01 + -2.814694096000261e+01 + -2.826560121000000e+01 + -2.838486697334714e+01 + -2.850474058224100e+01 + -2.862522436986088e+01 + -2.874632066501767e+01 + -2.886803181000000e+01 + -2.899036015446983e+01 + -2.911330804180568e+01 + -2.923687781925054e+01 + -2.936107184331833e+01 + -2.948589248000000e+01 + -2.961134209910011e+01 + -2.973742306338333e+01 + -2.986413774439124e+01 + -2.999148852946843e+01 + -3.011947780000000e+01 + -3.024810793640462e+01 + -3.037738133418102e+01 + -3.050730039248281e+01 + -3.063786751048302e+01 + -3.076908508999995e+01 + -3.090095553801825e+01 + -3.103348127528379e+01 + -3.116666472242296e+01 + -3.130050829541340e+01 + -3.143501442000000e+01 + -3.157018552904646e+01 + -3.170602405762165e+01 + -3.184253244456109e+01 + -3.197971313442012e+01 + -3.211756857999995e+01 + -3.225610123724459e+01 + -3.239531355479052e+01 + -3.253520799120049e+01 + -3.267578702273956e+01 + -3.281705312000000e+01 + -3.295900875199519e+01 + -3.310165640007095e+01 + -3.324499854981137e+01 + -3.338903768896250e+01 + -3.353377630999994e+01 + -3.367921690900354e+01 + -3.382536198480008e+01 + -3.397221404252836e+01 + -3.411977559608952e+01 + -3.426804916000000e+01 + -3.441703725062087e+01 + -3.456674239208418e+01 + -3.471716711255165e+01 + -3.486831394366235e+01 + -3.502018541999994e+01 + -3.517278408030963e+01 + -3.532611247314257e+01 + -3.548017315006599e+01 + -3.563496866378715e+01 + -3.579050157000000e+01 + -3.594677442911821e+01 + -3.610378981290209e+01 + -3.626155029281482e+01 + -3.642005843692588e+01 + -3.657931682999995e+01 + -3.673932806450152e+01 + -3.690009471994529e+01 + -3.706161938636306e+01 + -3.722390467398576e+01 + -3.738695318000000e+01 + -3.755076749872251e+01 + -3.771535025114206e+01 + -3.788070405790332e+01 + -3.804683152981476e+01 + -3.821373528999994e+01 + -3.838141797088579e+01 + -3.854988220802454e+01 + -3.871913063690455e+01 + -3.888916589260551e+01 + -3.905999062000000e+01 + -3.923160747217621e+01 + -3.940401910958111e+01 + -3.957722819105772e+01 + -3.975123737141870e+01 + -3.992604931999993e+01 + -4.010166671506960e+01 + -4.027809223215413e+01 + -4.045532854769397e+01 + -4.063337834194039e+01 + -4.081224431000000e+01 + -4.099192915380458e+01 + -4.117243556512365e+01 + -4.135376624213356e+01 + -4.153592389680070e+01 + -4.171891123999993e+01 + -4.190273098404973e+01 + -4.208738585293229e+01 + -4.227287857304115e+01 + -4.245921187066173e+01 + -4.264638848000000e+01 + -4.283441114000928e+01 + -4.302328258823673e+01 + -4.321300556988346e+01 + -4.340358284230594e+01 + -4.359501715999993e+01 + -4.378731127802528e+01 + -4.398046796379431e+01 + -4.417448998677844e+01 + -4.436938011574802e+01 + -4.456514113000000e+01 + -4.476177581459606e+01 + -4.495928695037842e+01 + -4.515767732491430e+01 + -4.535694973791337e+01 + -4.555710698999992e+01 + -4.575815188265746e+01 + -4.596008722124420e+01 + -4.616291581815827e+01 + -4.636664049491562e+01 + -4.657126407000000e+01 + -4.677678936329625e+01 + -4.698321921012249e+01 + -4.719055644645270e+01 + -4.739880390447049e+01 + -4.760796442999992e+01 + -4.781804087601476e+01 + -4.802903608806237e+01 + -4.824095291782189e+01 + -4.845379422957746e+01 + -4.866756289000000e+01 + -4.888226176793614e+01 + -4.909789373759357e+01 + -4.931446167624577e+01 + -4.953196846445736e+01 + -4.975041698999991e+01 + -4.996981014490353e+01 + -5.019015082042799e+01 + -5.041144191483806e+01 + -5.063368633767777e+01 + -5.085688700000000e+01 + -5.108104681363623e+01 + -5.130616869222998e+01 + -5.153225555529192e+01 + -5.175931033093434e+01 + -5.198733594999992e+01 + -5.221633534632925e+01 + -5.244631146064819e+01 + -5.267726723814258e+01 + -5.290920562821528e+01 + -5.314212958000000e+01 + -5.337604204603855e+01 + -5.361094599406351e+01 + -5.384684439089011e+01 + -5.408374019738633e+01 + -5.432163638999991e+01 + -5.456053595406303e+01 + -5.480044186892415e+01 + -5.504135712069162e+01 + -5.528328470761400e+01 + -5.552622762000000e+01 + -5.577018884907901e+01 + -5.601517141284037e+01 + -5.626117832498171e+01 + -5.650821258404100e+01 + -5.675627720999991e+01 + -5.700537523542541e+01 + -5.725550968441112e+01 + -5.750668358361924e+01 + -5.775889996777224e+01 + -5.801216188000000e+01 + -5.826647236807500e+01 + -5.852183447842080e+01 + -5.877825126017432e+01 + -5.903572576827786e+01 + -5.929426106999990e+01 + -5.955386023803142e+01 + -5.981452633626228e+01 + -6.007626243395679e+01 + -6.033907161265666e+01 + -6.060295696000000e+01 + -6.086792156620618e+01 + -6.113396851889991e+01 + -6.140110091270849e+01 + -6.166932185413050e+01 + -6.193863444999990e+01 + -6.220904180836374e+01 + -6.248054704389698e+01 + -6.275315327303672e+01 + -6.302686361375484e+01 + -6.330168120000000e+01 + -6.357760917255472e+01 + -6.385465065869710e+01 + -6.413280879313753e+01 + -6.441208672717147e+01 + -6.469248761000000e+01 + -6.497401459207148e+01 + -6.525667083785252e+01 + -6.554045951020694e+01 + -6.582538376572784e+01 + -6.611144677999999e+01 + -6.639865173804421e+01 + -6.668700181225154e+01 + -6.697650018322166e+01 + -6.726715004865791e+01 + -6.755895460000001e+01 + -6.785191702754956e+01 + -6.814604053706709e+01 + -6.844132833746227e+01 + -6.873778363702108e+01 + -6.903540965000001e+01 + -6.933420959649558e+01 + -6.963418670433917e+01 + -6.993534420146086e+01 + -7.023768531400407e+01 + -7.054121327999999e+01 + -7.084593134500037e+01 + -7.115184275353549e+01 + -7.145895075432828e+01 + -7.176725860332733e+01 + -7.207676955999989e+01 + -7.238748688676215e+01 + -7.269941385037480e+01 + -7.301255372170849e+01 + -7.332690977697268e+01 + -7.364248530000000e+01 + -7.395928357816831e+01 + -7.427730789465394e+01 + -7.459656154154558e+01 + -7.491704782593285e+01 + -7.523877004999987e+01 + -7.556173151464178e+01 + -7.588593553169946e+01 + -7.621138541944168e+01 + -7.653808450163682e+01 + -7.686603610000000e+01 + -7.719524353805981e+01 + -7.752571015313293e+01 + -7.785743928572181e+01 + -7.819043427631229e+01 + -7.852469846999988e+01 + -7.886023521608357e+01 + -7.919704786882774e+01 + -7.953513978918475e+01 + -7.987451434652237e+01 + -8.021517491000000e+01 + -8.055712484895521e+01 + -8.090036753598372e+01 + -8.124490635250547e+01 + -8.159074469172391e+01 + -8.193788593999987e+01 + -8.228633348416081e+01 + -8.263609073313938e+01 + -8.298716109541151e+01 + -8.333954797103145e+01 + -8.369325477000000e+01 + -8.404828491028280e+01 + -8.440464181412719e+01 + -8.476232890793086e+01 + -8.512134962287996e+01 + -8.548170738999985e+01 + -8.584340564352934e+01 + -8.620644783199920e+01 + -8.657083740482393e+01 + -8.693657780824788e+01 + -8.730367250000000e+01 + -8.767212494371194e+01 + -8.804193859639375e+01 + -8.841311692593891e+01 + -8.878566341870939e+01 + -8.915958154999986e+01 + -8.953487479168578e+01 + -8.991154663471849e+01 + -9.028960057395298e+01 + -9.066904010318096e+01 + -9.104986872000001e+01 + -9.143208992686800e+01 + -9.181570723560402e+01 + -9.220072416114067e+01 + -9.258714421980083e+01 + -9.297497092999986e+01 + -9.336420781525349e+01 + -9.375485841426487e+01 + -9.414692626313253e+01 + -9.454041488965315e+01 + -9.493532784000000e+01 + -9.533166867059026e+01 + -9.572944092950100e+01 + -9.612864816948191e+01 + -9.652929395407540e+01 + -9.693138184999984e+01 + -9.733491542620831e+01 + -9.773989825487583e+01 + -9.814633391500892e+01 + -9.855422599474231e+01 + -9.896357808000000e+01 + -9.937439375553778e+01 + -9.978667660951464e+01 + -1.002004302498873e+02 + -1.006156583113964e+02 + -1.010323643999998e+02 + -1.014505521033422e+02 + -1.018702250167552e+02 + -1.022913867648504e+02 + -1.027140410123223e+02 + -1.031381914000000e+02 + -1.035638415489902e+02 + -1.039909950728156e+02 + -1.044196556182856e+02 + -1.048498268814360e+02 + -1.052815124999998e+02 + -1.057147160851634e+02 + -1.061494413040264e+02 + -1.065856918490972e+02 + -1.070234714266025e+02 + -1.074627837000000e+02 + -1.079036323073108e+02 + -1.083460208994117e+02 + -1.087899531790557e+02 + -1.092354329168266e+02 + -1.096824637999998e+02 + -1.101310494754678e+02 + -1.105811936593542e+02 + -1.110329000832090e+02 + -1.114861724712110e+02 + -1.119410145000000e+02 + -1.123974298499644e+02 + -1.128554223365672e+02 + -1.133149957276709e+02 + -1.137761536721920e+02 + -1.142388998999998e+02 + -1.147032381951767e+02 + -1.151691723223398e+02 + -1.156367060267053e+02 + -1.161058430340008e+02 + -1.165765871000000e+02 + -1.170489420136372e+02 + -1.175229116129598e+02 + -1.179984996644491e+02 + -1.184757098197581e+02 + -1.189545458999998e+02 + -1.194350118004852e+02 + -1.199171112501401e+02 + -1.204008480035419e+02 + -1.208862259161727e+02 + -1.213732488000000e+02 + -1.218619204419225e+02 + -1.223522446637547e+02 + -1.228442252993658e+02 + -1.233378661832514e+02 + -1.238331710999998e+02 + -1.243301438371392e+02 + -1.248287883218059e+02 + -1.253291084262349e+02 + -1.258311078947497e+02 + -1.263347906000000e+02 + -1.268401604692280e+02 + -1.273472212887372e+02 + -1.278559768940106e+02 + -1.283664312433523e+02 + -1.288785881999998e+02 + -1.293924515790011e+02 + -1.299080252758494e+02 + -1.304253131892150e+02 + -1.309443191941241e+02 + -1.314650472000000e+02 + -1.319875011267033e+02 + -1.325116848422910e+02 + -1.330376022476014e+02 + -1.335652573069860e+02 + -1.340946538999998e+02 + -1.346257958892211e+02 + -1.351586873010075e+02 + -1.356933320835031e+02 + -1.362297340185993e+02 + -1.367678971000000e+02 + -1.373078254089903e+02 + -1.378495227933144e+02 + -1.383929931342302e+02 + -1.389382404506380e+02 + -1.394852686999998e+02 + -1.400340818144768e+02 + -1.405846838138316e+02 + -1.411370786853171e+02 + -1.416912703410207e+02 + -1.422472628000000e+02 + -1.428050601118040e+02 + -1.433646661562381e+02 + -1.439260848884736e+02 + -1.444893204354731e+02 + -1.450543767999998e+02 + -1.456212579173106e+02 + -1.461899678121767e+02 + -1.467605105156440e+02 + -1.473328900351724e+02 + -1.479071104000000e+02 + -1.484831756560318e+02 + -1.490610898537698e+02 + -1.496408570188282e+02 + -1.502224811435522e+02 + -1.508059663000000e+02 + -1.513913165938295e+02 + -1.519785360517816e+02 + -1.525676287092765e+02 + -1.531585986433134e+02 + -1.537514498999998e+02 + -1.543461865304275e+02 + -1.549428126935839e+02 + -1.555413324987964e+02 + -1.561417499433451e+02 + -1.567440691000000e+02 + -1.573482940967384e+02 + -1.579544290618548e+02 + -1.585624781173004e+02 + -1.591724453723425e+02 + -1.597843348999998e+02 + -1.603981507727703e+02 + -1.610138971515657e+02 + -1.616315781879854e+02 + -1.622511979884414e+02 + -1.628727607000000e+02 + -1.634962704824068e+02 + -1.641217314319286e+02 + -1.647491476962519e+02 + -1.653785235159056e+02 + -1.660098629999998e+02 + -1.666431702132707e+02 + -1.672784494025457e+02 + -1.679157047805161e+02 + -1.685549404452619e+02 + -1.691961606000000e+02 + -1.698393694891200e+02 + -1.704845712252935e+02 + -1.711317699673001e+02 + -1.717809699904770e+02 + -1.724321754999998e+02 + -1.730853906636835e+02 + -1.737406197069920e+02 + -1.743978668390772e+02 + -1.750571362267288e+02 + -1.757184321000000e+02 + -1.763817587329360e+02 + -1.770471204015179e+02 + -1.777145213342737e+02 + -1.783839656916257e+02 + -1.790554576999997e+02 + -1.797290016348361e+02 + -1.804046017812607e+02 + -1.810822624074922e+02 + -1.817619877551305e+02 + -1.824437821000000e+02 + -1.831276497291853e+02 + -1.838135948809234e+02 + -1.845016218201234e+02 + -1.851917348679873e+02 + -1.858839382999998e+02 + -1.865782363787204e+02 + -1.872746334451072e+02 + -1.879731338116912e+02 + -1.886737417231232e+02 + -1.893764615000000e+02 + -1.900812975069574e+02 + -1.907882540726982e+02 + -1.914973354967214e+02 + -1.922085460544087e+02 + -1.929218900999998e+02 + -1.936373720194894e+02 + -1.943549961169706e+02 + -1.950747667123967e+02 + -1.957966881820183e+02 + -1.965207649000000e+02 + -1.972470012275908e+02 + -1.979754014928308e+02 + -1.987059700466389e+02 + -1.994387112870401e+02 + -2.001736295999997e+02 + -2.009107293657797e+02 + -2.016500149830146e+02 + -2.023914908231823e+02 + -2.031351612174878e+02 + -2.038810306000000e+02 + -2.046291034502658e+02 + -2.053793841544099e+02 + -2.061318770718700e+02 + -2.068865865659776e+02 + -2.076435170999997e+02 + -2.084026731731890e+02 + -2.091640591716557e+02 + -2.099276794995817e+02 + -2.106935386300690e+02 + -2.114616410000000e+02 + -2.122319910255027e+02 + -2.130045931490896e+02 + -2.137794518362718e+02 + -2.145565715736208e+02 + -2.153359567999997e+02 + -2.161176119510612e+02 + -2.169015415764713e+02 + -2.176877501734888e+02 + -2.184762421224458e+02 + -2.192670219000000e+02 + -2.200600940505141e+02 + -2.208554631128035e+02 + -2.216531335679009e+02 + -2.224531098207831e+02 + -2.232553963999997e+02 + -2.240599978997985e+02 + -2.248669188401317e+02 + -2.256761637092654e+02 + -2.264877369816284e+02 + -2.273016432000000e+02 + -2.281178869415660e+02 + -2.289364727411434e+02 + -2.297574051254879e+02 + -2.305806886273285e+02 + -2.314063277999997e+02 + -2.322343272067604e+02 + -2.330646913987978e+02 + -2.338974249389632e+02 + -2.347325324124834e+02 + -2.355700184000000e+02 + -2.364098874788788e+02 + -2.372521442301691e+02 + -2.380967932316097e+02 + -2.389438390563173e+02 + -2.397932862999997e+02 + -2.406451395699314e+02 + -2.414994034603918e+02 + -2.423560825773335e+02 + -2.432151815494090e+02 + -2.440767050000000e+02 + -2.449406575494712e+02 + -2.458070438246558e+02 + -2.466758684438366e+02 + -2.475471360143982e+02 + -2.484208511999996e+02 + -2.492970186823550e+02 + -2.501756430678903e+02 + -2.510567289807632e+02 + -2.519402811010791e+02 + -2.528263041000000e+02 + -2.537148026392507e+02 + -2.546057813786489e+02 + -2.554992449908618e+02 + -2.563951981686694e+02 + -2.572936455999996e+02 + -2.581945919701986e+02 + -2.590980419711499e+02 + -2.600040002856254e+02 + -2.609124715849065e+02 + -2.618234606000000e+02 + -2.627369720784054e+02 + -2.636530106775519e+02 + -2.645715811006028e+02 + -2.654926881465747e+02 + -2.664163364999997e+02 + -2.673425308135112e+02 + -2.682712759281322e+02 + -2.692025766270102e+02 + -2.701364375396030e+02 + -2.710728634000000e+02 + -2.720118590149941e+02 + -2.729534291763713e+02 + -2.738975786300543e+02 + -2.748443120676544e+02 + -2.757936342999997e+02 + -2.767455501787848e+02 + -2.777000643997414e+02 + -2.786571816989448e+02 + -2.796169069311608e+02 + -2.805792449000000e+02 + -2.815442003833780e+02 + -2.825117782146733e+02 + -2.834819832031981e+02 + -2.844548201023671e+02 + -2.854302936999997e+02 + -2.864084088239409e+02 + -2.873891703596309e+02 + -2.883725831483384e+02 + -2.893586519481404e+02 + -2.903473816000000e+02 + -2.913387769892773e+02 + -2.923328429461174e+02 + -2.933295843055886e+02 + -2.943290059327143e+02 + -2.953311126999996e+02 + -2.963359094688269e+02 + -2.973434010446480e+02 + -2.983535922946355e+02 + -2.993664881931061e+02 + -3.003820936000000e+02 + -3.014004133189056e+02 + -3.024214522481863e+02 + -3.034452153213495e+02 + -3.044717074825456e+02 + -3.055009335999997e+02 + -3.065328985120693e+02 + -3.075676071368449e+02 + -3.086050644279766e+02 + -3.096452753553112e+02 + -3.106882447999996e+02 + -3.117339776182681e+02 + -3.127824787990806e+02 + -3.138337533166528e+02 + -3.148878060732492e+02 + -3.159446419999996e+02 + -3.170042660531784e+02 + -3.180666831989414e+02 + -3.191318984100575e+02 + -3.201999166629245e+02 + -3.212707428999996e+02 + -3.223443820580361e+02 + -3.234208391391681e+02 + -3.245001191331626e+02 + -3.255822269890704e+02 + -3.266671677000000e+02 + -3.277549462905472e+02 + -3.288455677875165e+02 + -3.299390371822755e+02 + -3.310353594166140e+02 + -3.321345394999996e+02 + -3.332365824854958e+02 + -3.343414934139734e+02 + -3.354492773045120e+02 + -3.365599391517927e+02 + -3.376734840000000e+02 + -3.387899169180687e+02 + -3.399092429402671e+02 + -3.410314670886827e+02 + -3.421565943845668e+02 + -3.432846298999996e+02 + -3.444155787253185e+02 + -3.455494458929433e+02 + -3.466862364711880e+02 + -3.478259555971263e+02 + -3.489686083000000e+02 + -3.501141995805723e+02 + -3.512627346186799e+02 + -3.524142185495274e+02 + -3.535686563776662e+02 + -3.547260531999996e+02 + -3.558864141649047e+02 + -3.570497443588797e+02 + -3.582160488781844e+02 + -3.593853328562213e+02 + -3.605576014000000e+02 + -3.617328596203877e+02 + -3.629111127187760e+02 + -3.640923658296630e+02 + -3.652766239636252e+02 + -3.664638922999996e+02 + -3.676541760949210e+02 + -3.688474804479435e+02 + -3.700438104641370e+02 + -3.712431713192604e+02 + -3.724455682000000e+02 + -3.736510062917217e+02 + -3.748594907617601e+02 + -3.760710267615897e+02 + -3.772856194324323e+02 + -3.785032739999995e+02 + -3.797239957155368e+02 + -3.809477897125092e+02 + -3.821746611611994e+02 + -3.834046153278488e+02 + -3.846376574000000e+02 + -3.858737925371631e+02 + -3.871130260109560e+02 + -3.883553630688227e+02 + -3.896008088834330e+02 + -3.908493686999996e+02 + -3.921010477895665e+02 + -3.933558513233559e+02 + -3.946137845264227e+02 + -3.958748527376295e+02 + -3.971390612000000e+02 + -3.984064151109821e+02 + -3.996769197585321e+02 + -4.009505804131749e+02 + -4.022274022910074e+02 + -4.035073906999995e+02 + -4.047905509809469e+02 + -4.060768883569506e+02 + -4.073664080804837e+02 + -4.086591154923789e+02 + -4.099550159000000e+02 + -4.112541145837781e+02 + -4.125564168232350e+02 + -4.138619279264533e+02 + -4.151706532436620e+02 + -4.164825980999995e+02 + -4.177977678009782e+02 + -4.191161676484082e+02 + -4.204378029703449e+02 + -4.217626791355866e+02 + -4.230908015000000e+02 + -4.244221753941545e+02 + -4.257568060915354e+02 + -4.270946989435893e+02 + -4.284358594322071e+02 + -4.297802928999995e+02 + -4.311280046181774e+02 + -4.324789999621266e+02 + -4.338332843406102e+02 + -4.351908631680312e+02 + -4.365517418000000e+02 + -4.379159255766193e+02 + -4.392834199290754e+02 + -4.406542302894571e+02 + -4.420283620541414e+02 + -4.434058205999995e+02 + -4.447866113008026e+02 + -4.461707395611302e+02 + -4.475582108324218e+02 + -4.489490306166049e+02 + -4.503432043000000e+02 + -4.517407372272212e+02 + -4.531416348857516e+02 + -4.545459027469901e+02 + -4.559535462055746e+02 + -4.573645706999994e+02 + -4.587789817092769e+02 + -4.601967847429616e+02 + -4.616179852648949e+02 + -4.630425886631084e+02 + -4.644706004000000e+02 + -4.659020259847504e+02 + -4.673368709042424e+02 + -4.687751406384571e+02 + -4.702168406679589e+02 + -4.716619764999995e+02 + -4.731105536500806e+02 + -4.745625775980045e+02 + -4.760180538297375e+02 + -4.774769878558138e+02 + -4.789393852000000e+02 + -4.804052513950263e+02 + -4.818745919803221e+02 + -4.833474124743740e+02 + -4.848237183656923e+02 + -4.863035151999994e+02 + -4.877868085453354e+02 + -4.892736039052198e+02 + -4.907639068268139e+02 + -4.922577229425711e+02 + -4.937550578000000e+02 + -4.952559169027076e+02 + -4.967603058178435e+02 + -4.982682301416788e+02 + -4.997796954853789e+02 + -5.012947073999994e+02 + -5.028132714194502e+02 + -5.043353931676896e+02 + -5.058610782730644e+02 + -5.073903323321115e+02 + -5.089231609000000e+02 + -5.104595695386481e+02 + -5.119995639358939e+02 + -5.135431497453484e+02 + -5.150903325247945e+02 + -5.166411178999995e+02 + -5.181955115300345e+02 + -5.197535190105982e+02 + -5.213151459679927e+02 + -5.228803980937674e+02 + -5.244492810000000e+02 + -5.260218002787250e+02 + -5.275979616609960e+02 + -5.291777708470047e+02 + -5.307612334400695e+02 + -5.323483550999995e+02 + -5.339391415258532e+02 + -5.355335984055753e+02 + -5.371317314077364e+02 + -5.387335461786030e+02 + -5.403390484000000e+02 + -5.419482437848817e+02 + -5.435611380730882e+02 + -5.451777369746786e+02 + -5.467980461477442e+02 + -5.484220712999994e+02 + -5.500498181706811e+02 + -5.516812924850077e+02 + -5.533164999617454e+02 + -5.549554463178829e+02 + -5.565981372999994e+02 + -5.582445786620732e+02 + -5.598947761113077e+02 + -5.615487353817318e+02 + -5.632064622631164e+02 + -5.648679624999994e+02 + -5.665332418238921e+02 + -5.682023060429622e+02 + -5.698751609401672e+02 + -5.715518122344557e+02 + -5.732322656999993e+02 + -5.749165271427032e+02 + -5.766046023386582e+02 + -5.782964970855437e+02 + -5.799922172195480e+02 + -5.816917684999994e+02 + -5.833951566715182e+02 + -5.851023876259811e+02 + -5.868134672043320e+02 + -5.885284011210334e+02 + -5.902471951999993e+02 + -5.919698553287222e+02 + -5.936963873375214e+02 + -5.954267970459595e+02 + -5.971610902818754e+02 + -5.988992728999993e+02 + -6.006413507613062e+02 + -6.023873296844711e+02 + -6.041372155081436e+02 + -6.058910141182311e+02 + -6.076487313999993e+02 + -6.094103732273231e+02 + -6.111759454411804e+02 + -6.129454539033432e+02 + -6.147189045204622e+02 + -6.164963032000001e+02 + -6.182776558378988e+02 + -6.200629682925465e+02 + -6.218522464515877e+02 + -6.236454962577363e+02 + -6.254427235999993e+02 + -6.272439343587159e+02 + -6.290491345295636e+02 + -6.308583300588987e+02 + -6.326715267788347e+02 + -6.344887306000001e+02 + -6.363099474872770e+02 + -6.381351833941451e+02 + -6.399644442896572e+02 + -6.417977361628546e+02 + -6.436350648999993e+02 + -6.454764363684590e+02 + -6.473218566292518e+02 + -6.491713317125350e+02 + -6.510248675271151e+02 + -6.528824700000000e+02 + -6.547441451008573e+02 + -6.566098988943567e+02 + -6.584797373808955e+02 + -6.603536664383599e+02 + -6.622316920999993e+02 + -6.641138204605409e+02 + -6.660000574329696e+02 + -6.678904089961051e+02 + -6.697848812885560e+02 + -6.716834803000000e+02 + -6.735862119462199e+02 + -6.754930822688247e+02 + -6.774040973560088e+02 + -6.793192633079277e+02 + -6.812385860999992e+02 + -6.831620716800010e+02 + -6.850897262089175e+02 + -6.870215557906422e+02 + -6.889575663679858e+02 + -6.908977640000001e+02 + -6.928421548145254e+02 + -6.947907448778678e+02 + -6.967435402481692e+02 + -6.987005469959722e+02 + -7.006617711999993e+02 + -7.026272189534540e+02 + -7.045968963883171e+02 + -7.065708096021641e+02 + -7.085489646318440e+02 + -7.105313676000000e+02 + -7.125180246666655e+02 + -7.145089419064375e+02 + -7.165041254104643e+02 + -7.185035813280965e+02 + -7.205073157999993e+02 + -7.225153349567163e+02 + -7.245276449240899e+02 + -7.265442518464891e+02 + -7.285651618951177e+02 + -7.305903812000000e+02 + -7.326199158832851e+02 + -7.346537721472801e+02 + -7.366919561576724e+02 + -7.387344740033407e+02 + -7.407813318999993e+02 + -7.428325361060332e+02 + -7.448880927069067e+02 + -7.469480078569493e+02 + -7.490122878703525e+02 + -7.510809389000000e+02 + -7.531539670309830e+02 + -7.552313785295614e+02 + -7.573131796529314e+02 + -7.593993765758833e+02 + -7.614899754999992e+02 + -7.635849826556215e+02 + -7.656844042998581e+02 + -7.677882466626152e+02 + -7.698965159244972e+02 + -7.720092183000000e+02 + -7.741263600422619e+02 + -7.762479474594095e+02 + -7.783739868214470e+02 + -7.805044843222228e+02 + -7.826394461999992e+02 + -7.847788787331309e+02 + -7.869227882276110e+02 + -7.890711809493379e+02 + -7.912240631015031e+02 + -7.933814410000000e+02 + -7.955433210068886e+02 + -7.977097093640062e+02 + -7.998806123337483e+02 + -8.020560362523712e+02 + -8.042359873999992e+02 + -8.064204720446323e+02 + -8.086094965664213e+02 + -8.108030673053524e+02 + -8.130011905039750e+02 + -8.152038725000000e+02 + -8.174111196729889e+02 + -8.196229383028856e+02 + -8.218393347070877e+02 + -8.240603152936806e+02 + -8.262858863999992e+02 + -8.285160543327190e+02 + -8.307508254786889e+02 + -8.329902062108882e+02 + -8.352342028550189e+02 + -8.374828218000000e+02 + -8.397360694583805e+02 + -8.419939521636865e+02 + -8.442564762682848e+02 + -8.465236481828920e+02 + -8.487954742999991e+02 + -8.510719610066617e+02 + -8.533531147279726e+02 + -8.556389418758610e+02 + -8.579294488297842e+02 + -8.602246420000000e+02 + -8.625245278111681e+02 + -8.648291126593311e+02 + -8.671384029773127e+02 + -8.694524052578884e+02 + -8.717711258999991e+02 + -8.740945712693658e+02 + -8.764227478547659e+02 + -8.787556621558366e+02 + -8.810933206360036e+02 + -8.834357297000000e+02 + -8.857828957473700e+02 + -8.881348253000285e+02 + -8.904915248639498e+02 + -8.928530008754832e+02 + -8.952192597999992e+02 + -8.975903081273602e+02 + -8.999661523549036e+02 + -9.023467989915350e+02 + -9.047322545556517e+02 + -9.071225255000001e+02 + -9.095176182642568e+02 + -9.119175394073789e+02 + -9.143222954857910e+02 + -9.167318930073794e+02 + -9.191463384999990e+02 + -9.215656384936522e+02 + -9.239897994653498e+02 + -9.264188279352956e+02 + -9.288527305046009e+02 + -9.312915136999991e+02 + -9.337351840217814e+02 + -9.361837480744202e+02 + -9.386372124507991e+02 + -9.410955836845210e+02 + -9.435588682999991e+02 + -9.460270728408829e+02 + -9.485002039375468e+02 + -9.509782681943145e+02 + -9.534612721474879e+02 + -9.559492223999991e+02 + -9.584421255818636e+02 + -9.609399882443452e+02 + -9.634428169536077e+02 + -9.659506183300578e+02 + -9.684633989999990e+02 + -9.709811655949806e+02 + -9.735039247636544e+02 + -9.760316831188370e+02 + -9.785644472182881e+02 + -9.811022236999991e+02 + -9.836450192407020e+02 + -9.861928404528198e+02 + -9.887456939756197e+02 + -9.913035865101050e+02 + -9.938665246999991e+02 + -9.964345151588749e+02 + -9.990075645416573e+02 + -1.001585679508894e+03 + -1.004168866725833e+03 + -1.006757132999999e+03 + -1.009350485088950e+03 + -1.011948929193798e+03 + -1.014552472017065e+03 + -1.017161121149714e+03 + -1.019774882999999e+03 + -1.022393763477281e+03 + -1.025017769745607e+03 + -1.027646908706880e+03 + -1.030281186449000e+03 + -1.032920609999999e+03 + -1.035565186772393e+03 + -1.038214923106640e+03 + -1.040869825393126e+03 + -1.043529900494233e+03 + -1.046195154999999e+03 + -1.048865595518282e+03 + -1.051541229525064e+03 + -1.054222063914517e+03 + -1.056908104442841e+03 + -1.059599357999999e+03 + -1.062295832060889e+03 + -1.064997533253958e+03 + -1.067704468147946e+03 + -1.070416643533965e+03 + -1.073134066000000e+03 + -1.075856742179453e+03 + -1.078584679453085e+03 + -1.081317884808236e+03 + -1.084056364390976e+03 + -1.086800124999999e+03 + -1.089549173751501e+03 + -1.092303517161580e+03 + -1.095063162007773e+03 + -1.097828115663242e+03 + -1.100598385000000e+03 + -1.103373976558467e+03 + -1.106154896984741e+03 + -1.108941153067517e+03 + -1.111732751768433e+03 + -1.114529699999999e+03 + -1.117332004656191e+03 + -1.120139672719820e+03 + -1.122952711033347e+03 + -1.125771126202256e+03 + -1.128594925000000e+03 + -1.131424114391635e+03 + -1.134258701616623e+03 + -1.137098693726371e+03 + -1.139944097362279e+03 + -1.142794918999999e+03 + -1.145651165298781e+03 + -1.148512843975744e+03 + -1.151379962155369e+03 + -1.154252525751212e+03 + -1.157130542000000e+03 + -1.160014018647746e+03 + -1.162902961796701e+03 + -1.165797378002409e+03 + -1.168697275086654e+03 + -1.171602659999999e+03 + -1.174513539162380e+03 + -1.177429919411751e+03 + -1.180351807863387e+03 + -1.183279211838743e+03 + -1.186212138000000e+03 + -1.189150592852472e+03 + -1.192094584016226e+03 + -1.195044118757429e+03 + -1.197999203418656e+03 + -1.200959844999999e+03 + -1.203926050837031e+03 + -1.206897827704460e+03 + -1.209875182550288e+03 + -1.212858122751144e+03 + -1.215846655000000e+03 + -1.218840785789916e+03 + -1.221840522671824e+03 + -1.224845872987532e+03 + -1.227856843385819e+03 + -1.230873440999999e+03 + -1.233895673111333e+03 + -1.236923546192640e+03 + -1.239957067026041e+03 + -1.242996243170224e+03 + -1.246041082000000e+03 + -1.249091590572761e+03 + -1.252147775334870e+03 + -1.255209643154299e+03 + -1.258277201722480e+03 + -1.261350457999999e+03 + -1.264429418673061e+03 + -1.267514091394071e+03 + -1.270604483350415e+03 + -1.273700600740823e+03 + -1.276802451000000e+03 + -1.279910042060014e+03 + -1.283023380429426e+03 + -1.286142472688095e+03 + -1.289267326090673e+03 + -1.292397947999999e+03 + -1.295534345774196e+03 + -1.298676526619691e+03 + -1.301824497524618e+03 + -1.304978265240164e+03 + -1.308137837000000e+03 + -1.311303220289759e+03 + -1.314474422298625e+03 + -1.317651449999705e+03 + -1.320834310180745e+03 + -1.324023009999999e+03 + -1.327217556910311e+03 + -1.330417958531748e+03 + -1.333624221890711e+03 + -1.336836353161044e+03 + -1.340054360000000e+03 + -1.343278250622039e+03 + -1.346508031450468e+03 + -1.349743709083262e+03 + -1.352985291084887e+03 + -1.356232784999999e+03 + -1.359486198143600e+03 + -1.362745537187869e+03 + -1.366010809195683e+03 + -1.369282022032803e+03 + -1.372559183000000e+03 + -1.375842299046690e+03 + -1.379131377356324e+03 + -1.382426425045151e+03 + -1.385727449081319e+03 + -1.389034456999999e+03 + -1.392347456524483e+03 + -1.395666454635196e+03 + -1.398991458464414e+03 + -1.402322475610563e+03 + -1.405659513000000e+03 + -1.409002577344138e+03 + -1.412351676333446e+03 + -1.415706817605260e+03 + -1.419068008353351e+03 + -1.422435255999999e+03 + -1.425808567964313e+03 + -1.429187950969556e+03 + -1.432573411998037e+03 + -1.435964958719179e+03 + -1.439362599000000e+03 + -1.442766340439504e+03 + -1.446176189225631e+03 + -1.449592152360744e+03 + -1.453014238529275e+03 + -1.456442454999999e+03 + -1.459876808245435e+03 + -1.463317305593544e+03 + -1.466763954627232e+03 + -1.470216762966463e+03 + -1.473675738000000e+03 + -1.477140887005819e+03 + -1.480612217422037e+03 + -1.484089736511155e+03 + -1.487573451238554e+03 + -1.491063368999999e+03 + -1.494559497483912e+03 + -1.498061844364458e+03 + -1.501570417048641e+03 + -1.505085222548716e+03 + -1.508606267999999e+03 + -1.512133560790714e+03 + -1.515667108906144e+03 + -1.519206919999463e+03 + -1.522753000996140e+03 + -1.526305358999999e+03 + -1.529864001422905e+03 + -1.533428936276007e+03 + -1.537000171179230e+03 + -1.540577712963951e+03 + -1.544161568999999e+03 + -1.547751747018138e+03 + -1.551348254621497e+03 + -1.554951099280540e+03 + -1.558560288310355e+03 + -1.562175828999999e+03 + -1.565797728689906e+03 + -1.569425994958102e+03 + -1.573060635400619e+03 + -1.576701657553543e+03 + -1.580349068999999e+03 + -1.584002877314684e+03 + -1.587663089901193e+03 + -1.591329713983250e+03 + -1.595002756657312e+03 + -1.598682225999999e+03 + -1.602368130282464e+03 + -1.606060476003810e+03 + -1.609759270166310e+03 + -1.613464521194204e+03 + -1.617176236999999e+03 + -1.620894424965112e+03 + -1.624619091996676e+03 + -1.628350245392540e+03 + -1.632087893195996e+03 + -1.635832042999999e+03 + -1.639582702219653e+03 + -1.643339878880967e+03 + -1.647103580589531e+03 + -1.650873814125992e+03 + -1.654650586999999e+03 + -1.658433907212865e+03 + -1.662223782656940e+03 + -1.666020220927786e+03 + -1.669823229228366e+03 + -1.673632814999999e+03 + -1.677448985879331e+03 + -1.681271749582079e+03 + -1.685101113981527e+03 + -1.688937087086922e+03 + -1.692779675999999e+03 + -1.696628887589857e+03 + -1.700484730162859e+03 + -1.704347211664743e+03 + -1.708216339003609e+03 + -1.712092119999999e+03 + -1.715974562928047e+03 + -1.719863675285195e+03 + -1.723759464515762e+03 + -1.727661938269359e+03 + -1.731571103999999e+03 + -1.735486969207614e+03 + -1.739409542118944e+03 + -1.743338830603560e+03 + -1.747274841733617e+03 + -1.751217582999999e+03 + -1.755167062315964e+03 + -1.759123288009624e+03 + -1.763086267739076e+03 + -1.767056008086542e+03 + -1.771032516999999e+03 + -1.775015803098183e+03 + -1.779005873908525e+03 + -1.783002736756524e+03 + -1.787006399126180e+03 + -1.791016869000000e+03 + -1.795034154506543e+03 + -1.799058263107071e+03 + -1.803089202321619e+03 + -1.807126980015989e+03 + -1.811171603999998e+03 + -1.815223082025504e+03 + -1.819281421835726e+03 + -1.823346631247284e+03 + -1.827418718154363e+03 + -1.831497690000000e+03 + -1.835583554215247e+03 + -1.839676319355180e+03 + -1.843775993459518e+03 + -1.847882583413063e+03 + -1.851996096999998e+03 + -1.856116542493618e+03 + -1.860243927542824e+03 + -1.864378259929794e+03 + -1.868519547846306e+03 + -1.872667799000000e+03 + -1.876823020804590e+03 + -1.880985220849939e+03 + -1.885154407199114e+03 + -1.889330588466962e+03 + -1.893513771999998e+03 + -1.897703964771626e+03 + -1.901901175652285e+03 + -1.906105412964281e+03 + -1.910316683519642e+03 + -1.914534995000000e+03 + -1.918760355678869e+03 + -1.922992773607248e+03 + -1.927232256642219e+03 + -1.931478812455566e+03 + -1.935732448999998e+03 + -1.939993174351127e+03 + -1.944260996306766e+03 + -1.948535922544343e+03 + -1.952817960710870e+03 + -1.957107119000000e+03 + -1.961403405774432e+03 + -1.965706828656891e+03 + -1.970017395435863e+03 + -1.974335114379128e+03 + -1.978659992999998e+03 + -1.982992038634364e+03 + -1.987331259958815e+03 + -1.991677665406797e+03 + -1.996031262526477e+03 + -2.000392059000000e+03 + -2.004760062662544e+03 + -2.009135281420714e+03 + -2.013517723394651e+03 + -2.017907396963966e+03 + -2.022304309999998e+03 + -2.026708470129302e+03 + -2.031119885371980e+03 + -2.035538563783372e+03 + -2.039964513323241e+03 + -2.044397742000000e+03 + -2.048838257821666e+03 + -2.053286068652342e+03 + -2.057741182613919e+03 + -2.062203608203423e+03 + -2.066673352999998e+03 + -2.071150424296029e+03 + -2.075634830690161e+03 + -2.080126580708826e+03 + -2.084625682242698e+03 + -2.089132143000000e+03 + -2.093645970720743e+03 + -2.098167173603271e+03 + -2.102695759983049e+03 + -2.107231738184183e+03 + -2.111775115999998e+03 + -2.116325901057278e+03 + -2.120884101683680e+03 + -2.125449726108530e+03 + -2.130022782163747e+03 + -2.134603278000000e+03 + -2.139191221924691e+03 + -2.143786621957349e+03 + -2.148389485981318e+03 + -2.152999821836896e+03 + -2.157617637999998e+03 + -2.162242943074696e+03 + -2.166875744534069e+03 + -2.171516050262848e+03 + -2.176163869133622e+03 + -2.180819209000000e+03 + -2.185482077327040e+03 + -2.190152482871076e+03 + -2.194830433950524e+03 + -2.199515937814626e+03 + -2.204209002999998e+03 + -2.208909638535144e+03 + -2.213617851857877e+03 + -2.218333650781778e+03 + -2.223057044225780e+03 + -2.227788040000000e+03 + -2.232526645541351e+03 + -2.237272869895315e+03 + -2.242026721580949e+03 + -2.246788207788726e+03 + -2.251557336999999e+03 + -2.256334118250544e+03 + -2.261118559161676e+03 + -2.265910667352767e+03 + -2.270710451040453e+03 + -2.275517918999998e+03 + -2.280333080014267e+03 + -2.285155941593499e+03 + -2.289986511539142e+03 + -2.294824798563590e+03 + -2.299670810999998e+03 + -2.304524556927484e+03 + -2.309386044592275e+03 + -2.314255282195762e+03 + -2.319132277836808e+03 + -2.324017039999998e+03 + -2.328909577220459e+03 + -2.333809897224200e+03 + -2.338718008145149e+03 + -2.343633918994289e+03 + -2.348557637999998e+03 + -2.353489172912608e+03 + -2.358428531797252e+03 + -2.363375723128402e+03 + -2.368330755820120e+03 + -2.373293637999998e+03 + -2.378264377427878e+03 + -2.383242982526706e+03 + -2.388229461889857e+03 + -2.393223824063392e+03 + -2.398226076999998e+03 + -2.403236228525699e+03 + -2.408254287477974e+03 + -2.413280262494937e+03 + -2.418314161547432e+03 + -2.423355992999998e+03 + -2.428405765403690e+03 + -2.433463486890615e+03 + -2.438529165661329e+03 + -2.443602810190047e+03 + -2.448684428999998e+03 + -2.453774030522361e+03 + -2.458871622761939e+03 + -2.463977214083831e+03 + -2.469090813490053e+03 + -2.474212428999998e+03 + -2.479342068313477e+03 + -2.484479740528551e+03 + -2.489625454539379e+03 + -2.494779218375099e+03 + -2.499941039999998e+03 + -2.505110927624773e+03 + -2.510288890409285e+03 + -2.515474937052364e+03 + -2.520669075212765e+03 + -2.525871312999998e+03 + -2.531081658990217e+03 + -2.536300122220549e+03 + -2.541526711425658e+03 + -2.546761434689014e+03 + -2.552004299999998e+03 + -2.557255315555890e+03 + -2.562514490474060e+03 + -2.567781833501355e+03 + -2.573057352510476e+03 + -2.578341055999998e+03 + -2.583632952807378e+03 + -2.588933051312229e+03 + -2.594241359879810e+03 + -2.599557887014108e+03 + -2.604882640999998e+03 + -2.610215630196411e+03 + -2.615556863841929e+03 + -2.620906350516468e+03 + -2.626264097579904e+03 + -2.631630113999998e+03 + -2.637004409331177e+03 + -2.642386991059378e+03 + -2.647777867311749e+03 + -2.653177047878767e+03 + -2.658584540999998e+03 + -2.664000354190328e+03 + -2.669424496446296e+03 + -2.674856976816473e+03 + -2.680297803844182e+03 + -2.685746985999998e+03 + -2.691204531699670e+03 + -2.696670449221115e+03 + -2.702144747143579e+03 + -2.707627434527642e+03 + -2.713118519999998e+03 + -2.718618011850782e+03 + -2.724125918263655e+03 + -2.729642247949266e+03 + -2.735167010382318e+03 + -2.740700213999998e+03 + -2.746241866699575e+03 + -2.751791977076697e+03 + -2.757350554006517e+03 + -2.762917606479738e+03 + -2.768493143000000e+03 + -2.774077171851313e+03 + -2.779669701724049e+03 + -2.785270741295763e+03 + -2.790880299095185e+03 + -2.796498383999998e+03 + -2.802125004968091e+03 + -2.807760170344632e+03 + -2.813403888501788e+03 + -2.819056168106567e+03 + -2.824717018000000e+03 + -2.830386447079949e+03 + -2.836064464083062e+03 + -2.841751077483182e+03 + -2.847446295475182e+03 + -2.853150126999998e+03 + -2.858862581346520e+03 + -2.864583667200011e+03 + -2.870313392988722e+03 + -2.876051767015894e+03 + -2.881798798000000e+03 + -2.887554494917011e+03 + -2.893318866668325e+03 + -2.899091922031221e+03 + -2.904873669618204e+03 + -2.910664117999998e+03 + -2.916463275808826e+03 + -2.922271151990944e+03 + -2.928087755363771e+03 + -2.933913094445438e+03 + -2.939747178000000e+03 + -2.945590014959967e+03 + -2.951441614226611e+03 + -2.957301984588625e+03 + -2.963171134666888e+03 + -2.969049072999998e+03 + -2.974935808208847e+03 + -2.980831349417174e+03 + -2.986735705755709e+03 + -2.992648886132359e+03 + -2.998570899000000e+03 + -3.004501752659864e+03 + -3.010441455936329e+03 + -3.016390017858416e+03 + -3.022347447554316e+03 + -3.028313753999998e+03 + -3.034288946006182e+03 + -3.040273032141582e+03 + -3.046266021078663e+03 + -3.052267921739149e+03 + -3.058278743000000e+03 + -3.064298493698561e+03 + -3.070327182685398e+03 + -3.076364818827055e+03 + -3.082411411001809e+03 + -3.088466967999998e+03 + -3.094531498652569e+03 + -3.100605012177602e+03 + -3.106687517554494e+03 + -3.112779023262762e+03 + -3.118879538000000e+03 + -3.124989070695736e+03 + -3.131107630527278e+03 + -3.137235226491168e+03 + -3.143371867254447e+03 + -3.149517561999998e+03 + -3.155672319953097e+03 + -3.161836149115856e+03 + -3.168009058152651e+03 + -3.174191057129923e+03 + -3.180382155000000e+03 + -3.186582360055111e+03 + -3.192791681144167e+03 + -3.199010127274887e+03 + -3.205237707493432e+03 + -3.211474430999998e+03 + -3.217720306909038e+03 + -3.223975343611381e+03 + -3.230239549889151e+03 + -3.236512935355519e+03 + -3.242795509000000e+03 + -3.249087279482800e+03 + -3.255388255944051e+03 + -3.261698447489179e+03 + -3.268017862963467e+03 + -3.274346510999998e+03 + -3.280684400401313e+03 + -3.287031541121871e+03 + -3.293387942369432e+03 + -3.299753611888159e+03 + -3.306128559000000e+03 + -3.312512793688797e+03 + -3.318906324190636e+03 + -3.325309159228279e+03 + -3.331721308860119e+03 + -3.338142781999998e+03 + -3.344573586933190e+03 + -3.351013732692941e+03 + -3.357463228591956e+03 + -3.363922084041577e+03 + -3.370390307999997e+03 + -3.376867909193196e+03 + -3.383354896616435e+03 + -3.389851279509897e+03 + -3.396357067337695e+03 + -3.402872268999997e+03 + -3.409396893188545e+03 + -3.415930949268335e+03 + -3.422474446597307e+03 + -3.429027394238212e+03 + -3.435589800999997e+03 + -3.442161675674332e+03 + -3.448743027574159e+03 + -3.455333866086035e+03 + -3.461934200499129e+03 + -3.468544039999997e+03 + -3.475163393634110e+03 + -3.481792270131310e+03 + -3.488430678432703e+03 + -3.495078627927044e+03 + -3.501736127999997e+03 + -3.508403187927853e+03 + -3.515079816661691e+03 + -3.521766023349286e+03 + -3.528461817510494e+03 + -3.535167207999998e+03 + -3.541882203477436e+03 + -3.548606813620608e+03 + -3.555341047964333e+03 + -3.562084915431213e+03 + -3.568838424999997e+03 + -3.575601585773337e+03 + -3.582374407066678e+03 + -3.589156898185297e+03 + -3.595949068354316e+03 + -3.602750926999998e+03 + -3.609562483468940e+03 + -3.616383746264014e+03 + -3.623214724488114e+03 + -3.630055428392298e+03 + -3.636905866999997e+03 + -3.643766048793625e+03 + -3.650635983516456e+03 + -3.657515680680700e+03 + -3.664405149014039e+03 + -3.671304397999997e+03 + -3.678213437374473e+03 + -3.685132275760156e+03 + -3.692060922035369e+03 + -3.698999385901594e+03 + -3.705947676999997e+03 + -3.712905804797643e+03 + -3.719873778403308e+03 + -3.726851606752037e+03 + -3.733839298718909e+03 + -3.740836863999997e+03 + -3.747844312547997e+03 + -3.754861653211674e+03 + -3.761888895074585e+03 + -3.768926047955085e+03 + -3.775973120999997e+03 + -3.783030123074376e+03 + -3.790097063813473e+03 + -3.797173952745452e+03 + -3.804260798968512e+03 + -3.811357611999997e+03 + -3.818464401472386e+03 + -3.825581176303607e+03 + -3.832707945585785e+03 + -3.839844718954238e+03 + -3.846991505999998e+03 + -3.854148316201428e+03 + -3.861315158822798e+03 + -3.868492043129635e+03 + -3.875678978458987e+03 + -3.882875973999997e+03 + -3.890083038997269e+03 + -3.897300183310783e+03 + -3.904527416633095e+03 + -3.911764748154242e+03 + -3.919012186999997e+03 + -3.926269742452437e+03 + -3.933537424464352e+03 + -3.940815242621297e+03 + -3.948103205720294e+03 + -3.955401322999997e+03 + -3.962709604107895e+03 + -3.970028058998795e+03 + -3.977356697163350e+03 + -3.984695527326294e+03 + -3.992044558999997e+03 + -3.999403802144854e+03 + -4.006773266302151e+03 + -4.014152960820400e+03 + -4.021542894928240e+03 + -4.028943077999997e+03 + -4.036353519583599e+03 + -4.043774229513202e+03 + -4.051205217431756e+03 + -4.058646492564995e+03 + -4.066098063999997e+03 + -4.073559940995820e+03 + -4.081032133755226e+03 + -4.088514652104142e+03 + -4.096007504979870e+03 + -4.103510702000000e+03 + -4.111024253097677e+03 + -4.118548167510886e+03 + -4.126082454416708e+03 + -4.133627123225803e+03 + -4.141182184000000e+03 + -4.148747646853033e+03 + -4.156323520486682e+03 + -4.163909814098826e+03 + -4.171506538118098e+03 + -4.179113701999993e+03 + -4.186731314728609e+03 + -4.194359386189681e+03 + -4.201997926116393e+03 + -4.209646943720986e+03 + -4.217306449000000e+03 + -4.224976452122954e+03 + -4.232656961817923e+03 + -4.240347987240753e+03 + -4.248049538718602e+03 + -4.255761626000000e+03 + -4.263484258397591e+03 + -4.271217445246016e+03 + -4.278961196276451e+03 + -4.286715521743729e+03 + -4.294480431000000e+03 + -4.302255933066315e+03 + -4.310042038085233e+03 + -4.317838756007569e+03 + -4.325646096087124e+03 + -4.333464067999995e+03 + -4.341292681602012e+03 + -4.349131946225953e+03 + -4.356981871466000e+03 + -4.364842467485710e+03 + -4.372713744000000e+03 + -4.380595710372718e+03 + -4.388488375861229e+03 + -4.396391750264422e+03 + -4.404305844160006e+03 + -4.412230667000000e+03 + -4.420166227736474e+03 + -4.428112536405837e+03 + -4.436069603088062e+03 + -4.444037437481978e+03 + -4.452016049000000e+03 + -4.460005447074678e+03 + -4.468005641867199e+03 + -4.476016643204103e+03 + -4.484038460200805e+03 + -4.492071102999995e+03 + -4.500114582060231e+03 + -4.508168906299815e+03 + -4.516234085098625e+03 + -4.524310129075975e+03 + -4.532397048000000e+03 + -4.540494851104932e+03 + -4.548603547974418e+03 + -4.556723148595408e+03 + -4.564853663376500e+03 + -4.572995102000000e+03 + -4.581147473755137e+03 + -4.589310788334117e+03 + -4.597485055595826e+03 + -4.605670285497996e+03 + -4.613866488000000e+03 + -4.622073673035890e+03 + -4.630291850451470e+03 + -4.638521029781397e+03 + -4.646761220207367e+03 + -4.655012431999994e+03 + -4.663274675842531e+03 + -4.671547961173437e+03 + -4.679832297267551e+03 + -4.688127693710799e+03 + -4.696434161000000e+03 + -4.704751709752170e+03 + -4.713080348793824e+03 + -4.721420087561993e+03 + -4.729770937031085e+03 + -4.738132907000000e+03 + -4.746506006604411e+03 + -4.754890245715343e+03 + -4.763285634540516e+03 + -4.771692183448750e+03 + -4.780109901999994e+03 + -4.788538799466528e+03 + -4.796978886096308e+03 + -4.805430172162917e+03 + -4.813892667577567e+03 + -4.822366381999994e+03 + -4.830851325088147e+03 + -4.839347507060687e+03 + -4.847854938123849e+03 + -4.856373628221604e+03 + -4.864903587000000e+03 + -4.873444824101478e+03 + -4.881997349859994e+03 + -4.890561174364984e+03 + -4.899136307099045e+03 + -4.907722758000000e+03 + -4.916320537362784e+03 + -4.924929655587317e+03 + -4.933550122528648e+03 + -4.942181947260091e+03 + -4.950825139999994e+03 + -4.959479711457802e+03 + -4.968145671175524e+03 + -4.976823028809056e+03 + -4.985511794647833e+03 + -4.994211978999993e+03 + -5.002923592007461e+03 + -5.011646643245516e+03 + -5.020381142480443e+03 + -5.029127099988444e+03 + -5.037884526000000e+03 + -5.046653430641881e+03 + -5.055433823857634e+03 + -5.064225715527905e+03 + -5.073029115529123e+03 + -5.081844034000000e+03 + -5.090670481166524e+03 + -5.099508466925161e+03 + -5.108358001180135e+03 + -5.117219094017154e+03 + -5.126091755999993e+03 + -5.134975997626908e+03 + -5.143871827953957e+03 + -5.152779256704796e+03 + -5.161698295082459e+03 + -5.170628952999993e+03 + -5.179571239778229e+03 + -5.188525166029071e+03 + -5.197490742130520e+03 + -5.206467977662855e+03 + -5.215456883000000e+03 + -5.224457468752808e+03 + -5.233469744262066e+03 + -5.242493719420175e+03 + -5.251529405361101e+03 + -5.260576812000000e+03 + -5.269635948683524e+03 + -5.278706825911151e+03 + -5.287789454172008e+03 + -5.296883843495917e+03 + -5.305990003999993e+03 + -5.315107945871962e+03 + -5.324237679253967e+03 + -5.333379214299059e+03 + -5.342532561186867e+03 + -5.351697729999993e+03 + -5.360874730862462e+03 + -5.370063574314554e+03 + -5.379264270604972e+03 + -5.388476829418795e+03 + -5.397701261000000e+03 + -5.406937575887649e+03 + -5.416185784228891e+03 + -5.425445896082409e+03 + -5.434717921547790e+03 + -5.444001871000000e+03 + -5.453297754883592e+03 + -5.462605583222671e+03 + -5.471925366229407e+03 + -5.481257114511772e+03 + -5.490600837999993e+03 + -5.499956546429602e+03 + -5.509324250592133e+03 + -5.518703961068116e+03 + -5.528095687743725e+03 + -5.537499440999993e+03 + -5.546915231361128e+03 + -5.556343068498348e+03 + -5.565782962476614e+03 + -5.575234924238452e+03 + -5.584698964000000e+03 + -5.594175091687396e+03 + -5.603663318133420e+03 + -5.613163653827974e+03 + -5.622676108416792e+03 + -5.632200692000000e+03 + -5.641737415094019e+03 + -5.651286288507457e+03 + -5.660847322604374e+03 + -5.670420527008017e+03 + -5.680005911999993e+03 + -5.689603488367688e+03 + -5.699213267038800e+03 + -5.708835258184300e+03 + -5.718469470901945e+03 + -5.728115915999992e+03 + -5.737774605002216e+03 + -5.747445547634946e+03 + -5.757128753652110e+03 + -5.766824233562706e+03 + -5.776531998000000e+03 + -5.786252057564687e+03 + -5.795984422575620e+03 + -5.805729103393980e+03 + -5.815486110517342e+03 + -5.825255454000000e+03 + -5.835037143865786e+03 + -5.844831191184440e+03 + -5.854637606668529e+03 + -5.864456400127173e+03 + -5.874287581999993e+03 + -5.884131163070459e+03 + -5.893987153665426e+03 + -5.903855564090225e+03 + -5.913736404781277e+03 + -5.923629686000000e+03 + -5.933535418061928e+03 + -5.943453611973397e+03 + -5.953384278439786e+03 + -5.963327427438455e+03 + -5.973283069000000e+03 + -5.983251213525049e+03 + -5.993231872573540e+03 + -6.003225056744913e+03 + -6.013230774891098e+03 + -6.023249038000000e+03 + -6.033279857947543e+03 + -6.043323244258373e+03 + -6.053379206808452e+03 + -6.063447756872029e+03 + -6.073528904999992e+03 + -6.083622661322729e+03 + -6.093729036471069e+03 + -6.103848041095609e+03 + -6.113979685699232e+03 + -6.124123981000000e+03 + -6.134280937646101e+03 + -6.144450565430006e+03 + -6.154632874755873e+03 + -6.164827877191976e+03 + -6.175035583000000e+03 + -6.185256001935748e+03 + -6.195489145360168e+03 + -6.205735024246584e+03 + -6.215993648382001e+03 + -6.226265028000000e+03 + -6.236549173839082e+03 + -6.246846097225249e+03 + -6.257155808917487e+03 + -6.267478318647532e+03 + -6.277813636999993e+03 + -6.288161775039973e+03 + -6.298522743318929e+03 + -6.308896552332133e+03 + -6.319283212690151e+03 + -6.329682735000000e+03 + -6.340095129841887e+03 + -6.350520407726451e+03 + -6.360958579315570e+03 + -6.371409655512612e+03 + -6.381873647000000e+03 + -6.392350564293673e+03 + -6.402840417873253e+03 + -6.413343218449801e+03 + -6.423858977046060e+03 + -6.434387704000000e+03 + -6.444929409479182e+03 + -6.455484104800415e+03 + -6.466051800878468e+03 + -6.476632507643834e+03 + -6.487226235999992e+03 + -6.497832997260840e+03 + -6.508452801649206e+03 + -6.519085659445890e+03 + -6.529731581482401e+03 + -6.540390579000000e+03 + -6.551062663116751e+03 + -6.561747843536938e+03 + -6.572446130639311e+03 + -6.583157536279329e+03 + -6.593882071000000e+03 + -6.604619744763902e+03 + -6.615370568925604e+03 + -6.626134554413510e+03 + -6.636911711064461e+03 + -6.647702049999992e+03 + -6.658505582840396e+03 + -6.669322319643610e+03 + -6.680152270785791e+03 + -6.690995447680221e+03 + -6.701851860999993e+03 + -6.712721521095499e+03 + -6.723604439166686e+03 + -6.734500626205399e+03 + -6.745410092579864e+03 + -6.756332849000000e+03 + -6.767268906377159e+03 + -6.778218275408767e+03 + -6.789180966973428e+03 + -6.800156992270870e+03 + -6.811146362000000e+03 + -6.822149086596000e+03 + -6.833165176809022e+03 + -6.844194643583943e+03 + -6.855237498022965e+03 + -6.866293750999992e+03 + -6.877363413246921e+03 + -6.888446495554016e+03 + -6.899543008749155e+03 + -6.910652963678518e+03 + -6.921776370999992e+03 + -6.932913241460104e+03 + -6.944063586638155e+03 + -6.955227417524035e+03 + -6.966404743973952e+03 + -6.977595577000000e+03 + -6.988799928187199e+03 + -7.000017808173458e+03 + -7.011249227729020e+03 + -7.022494198140058e+03 + -7.033752730000000e+03 + -7.045024833685246e+03 + -7.056310520605544e+03 + -7.067609802022496e+03 + -7.078922688575014e+03 + -7.090249190999992e+03 + -7.101589320140114e+03 + -7.112943086874141e+03 + -7.124310502404821e+03 + -7.135691578318693e+03 + -7.147086324999992e+03 + -7.158494752468790e+03 + -7.169916872475182e+03 + -7.181352696510882e+03 + -7.192802235036809e+03 + -7.204265499000000e+03 + -7.215742499578333e+03 + -7.227233247391960e+03 + -7.238737753333357e+03 + -7.250256028887258e+03 + -7.261788085000000e+03 + -7.273333932305611e+03 + -7.284893581718426e+03 + -7.296467044458082e+03 + -7.308054332025791e+03 + -7.319655454999992e+03 + -7.331270423697963e+03 + -7.342899249833889e+03 + -7.354541944862027e+03 + -7.366198519315069e+03 + -7.377868983999992e+03 + -7.389553350032372e+03 + -7.401251628839381e+03 + -7.412963831476617e+03 + -7.424689968390403e+03 + -7.436430051000000e+03 + -7.448184091042194e+03 + -7.459952098877861e+03 + -7.471734085033887e+03 + -7.483530060856024e+03 + -7.495340038000000e+03 + -7.507164027981260e+03 + -7.519002041143363e+03 + -7.530854088088799e+03 + -7.542720180263871e+03 + -7.554600328999991e+03 + -7.566494545476364e+03 + -7.578402840747203e+03 + -7.590325225748156e+03 + -7.602261711334166e+03 + -7.614212308999990e+03 + -7.626177030375796e+03 + -7.638155885970103e+03 + -7.650148886679111e+03 + -7.662156044359298e+03 + -7.674177370000000e+03 + -7.686212874133715e+03 + -7.698262567927072e+03 + -7.710326462858042e+03 + -7.722404570574414e+03 + -7.734496902000000e+03 + -7.746603467726753e+03 + -7.758724278933637e+03 + -7.770859347070250e+03 + -7.783008683730720e+03 + -7.795172299999991e+03 + -7.807350206747154e+03 + -7.819542415323729e+03 + -7.831748936928582e+03 + -7.843969782379609e+03 + -7.856204962999991e+03 + -7.868454490389281e+03 + -7.880718375856472e+03 + -7.892996630459527e+03 + -7.905289265033489e+03 + -7.917596291000000e+03 + -7.929917719977670e+03 + -7.942253562811284e+03 + -7.954603830544003e+03 + -7.966968534806996e+03 + -7.979347687000000e+03 + -7.991741298275563e+03 + -8.004149379532312e+03 + -8.016571941875890e+03 + -8.029008996834256e+03 + -8.041460555999991e+03 + -8.053926630829063e+03 + -8.066407232164392e+03 + -8.078902371093302e+03 + -8.091412059283156e+03 + -8.103936307999991e+03 + -8.116475128348727e+03 + -8.129028531951320e+03 + -8.141596530160446e+03 + -8.154179133753471e+03 + -8.166776354000000e+03 + -8.179388202500601e+03 + -8.192014690774517e+03 + -8.204655830155478e+03 + -8.217311631752342e+03 + -8.229982107000000e+03 + -8.242667267443709e+03 + -8.255367124181290e+03 + -8.268081688506129e+03 + -8.280810972124258e+03 + -8.293554985999990e+03 + -8.306313740930424e+03 + -8.319087249046417e+03 + -8.331875522237864e+03 + -8.344678571514016e+03 + -8.357496408000001e+03 + -8.370329042981793e+03 + -8.383176487893126e+03 + -8.396038754236946e+03 + -8.408915853538949e+03 + -8.421807796999999e+03 + -8.434714595760075e+03 + -8.447636261558551e+03 + -8.460572806112319e+03 + -8.473524240852536e+03 + -8.486490577000000e+03 + -8.499471825734363e+03 + -8.512467998550057e+03 + -8.525479106914012e+03 + -8.538505162160651e+03 + -8.551546175999989e+03 + -8.564602160205039e+03 + -8.577673125806519e+03 + -8.590759084111069e+03 + -8.603860047081474e+03 + -8.616976026000000e+03 + -8.630107031891077e+03 + -8.643253076647045e+03 + -8.656414171854482e+03 + -8.669590328370747e+03 + -8.682781558000001e+03 + -8.695987872906602e+03 + -8.709209284090668e+03 + -8.722445802791402e+03 + -8.735697441007769e+03 + -8.748964210000000e+03 + -8.762246120773598e+03 + -8.775543185390141e+03 + -8.788855415760128e+03 + -8.802182823160678e+03 + -8.815525418999991e+03 + -8.828883214778334e+03 + -8.842256221886048e+03 + -8.855644451817980e+03 + -8.869047916276779e+03 + -8.882466627000000e+03 + -8.895900595656447e+03 + -8.909349833599377e+03 + -8.922814352320849e+03 + -8.936294163622882e+03 + -8.949789279000001e+03 + -8.963299709806102e+03 + -8.976825467697834e+03 + -8.990366564425331e+03 + -9.003923011733321e+03 + -9.017494820999989e+03 + -9.031082003570244e+03 + -9.044684571593196e+03 + -9.058302536801553e+03 + -9.071935910043938e+03 + -9.085584702999991e+03 + -9.099248927805194e+03 + -9.112928596071970e+03 + -9.126623719398038e+03 + -9.140334309541779e+03 + -9.154060378000000e+03 + -9.167801936143134e+03 + -9.181558995552323e+03 + -9.195331568052554e+03 + -9.209119665711642e+03 + -9.222923300000000e+03 + -9.236742482191501e+03 + -9.250577224366738e+03 + -9.264427538348678e+03 + -9.278293435300837e+03 + -9.292174926999989e+03 + -9.306072025514850e+03 + -9.319984742353185e+03 + -9.333913089239737e+03 + -9.347857078372264e+03 + -9.361816720999988e+03 + -9.375792028076301e+03 + -9.389783011923670e+03 + -9.403789684689073e+03 + -9.417812057757259e+03 + -9.431850143000000e+03 + -9.445903952452922e+03 + -9.459973497383473e+03 + -9.474058789280491e+03 + -9.488159840242311e+03 + -9.502276662000000e+03 + -9.516409266099370e+03 + -9.530557664431180e+03 + -9.544721868948835e+03 + -9.558901891554557e+03 + -9.573097743999990e+03 + -9.587309437907974e+03 + -9.601536984771086e+03 + -9.615780396443668e+03 + -9.630039685320193e+03 + -9.644314862999989e+03 + -9.658605940694017e+03 + -9.672912930240365e+03 + -9.687235843732506e+03 + -9.701574693379191e+03 + -9.715929491000001e+03 + -9.730300248146514e+03 + -9.744686976337332e+03 + -9.759089687418043e+03 + -9.773508393705906e+03 + -9.787943106999999e+03 + -9.802393838806964e+03 + -9.816860600913731e+03 + -9.831343405392694e+03 + -9.845842264577648e+03 + -9.860357189999990e+03 + -9.874888192875391e+03 + -9.889435285292540e+03 + -9.903998479577405e+03 + -9.918577788007758e+03 + -9.933173221999989e+03 + -9.947784792760667e+03 + -9.962412512866247e+03 + -9.977056394630243e+03 + -9.991716449514770e+03 + -1.000639269000000e+04 + -1.002108512827329e+04 + -1.003579377260607e+04 + -1.005051863510592e+04 + -1.006525973450424e+04 + -1.008001708000000e+04 + -1.009479067738785e+04 + -1.010958054488143e+04 + -1.012438669671707e+04 + -1.013920913701616e+04 + -1.015404787999999e+04 + -1.016890294387830e+04 + -1.018377433451942e+04 + -1.019866206104612e+04 + -1.021356614193473e+04 + -1.022848658999999e+04 + -1.024342341422066e+04 + -1.025837662498870e+04 + -1.027334623400460e+04 + -1.028833225445739e+04 + -1.030333470000000e+04 + -1.031835358368700e+04 + -1.033338891534757e+04 + -1.034844070623467e+04 + -1.036350897076085e+04 + -1.037859372000000e+04 + -1.039369496373519e+04 + -1.040881271589677e+04 + -1.042394698923176e+04 + -1.043909779325773e+04 + -1.045426513999999e+04 + -1.046944904320307e+04 + -1.048464951626011e+04 + -1.049986657147346e+04 + -1.051510021951631e+04 + -1.053035046999999e+04 + -1.054561733346490e+04 + -1.056090082649770e+04 + -1.057620096382862e+04 + -1.059151775501402e+04 + -1.060685121000000e+04 + -1.062220133982168e+04 + -1.063756815769902e+04 + -1.065295167679853e+04 + -1.066835190951487e+04 + -1.068376887000000e+04 + -1.069920257172756e+04 + -1.071465302083269e+04 + -1.073012022736731e+04 + -1.074560420973240e+04 + -1.076110497999999e+04 + -1.077662254698522e+04 + -1.079215692468130e+04 + -1.080770812602064e+04 + -1.082327616047952e+04 + -1.083886103999999e+04 + -1.085446277832030e+04 + -1.087008138917964e+04 + -1.088571688451933e+04 + -1.090136927381244e+04 + -1.091703857000000e+04 + -1.093272478707855e+04 + -1.094842793381667e+04 + -1.096414802233435e+04 + -1.097988507119364e+04 + -1.099563909000000e+04 + -1.101141008471468e+04 + -1.102719807131307e+04 + -1.104300306633410e+04 + -1.105882508291791e+04 + -1.107466412999999e+04 + -1.109052021511841e+04 + -1.110639335038349e+04 + -1.112228355101184e+04 + -1.113819083451417e+04 + -1.115411520999999e+04 + -1.117005668368749e+04 + -1.118601527242516e+04 + -1.120199099177015e+04 + -1.121798385114509e+04 + -1.123399386000000e+04 + -1.125002102929127e+04 + -1.126606537454743e+04 + -1.128212691149971e+04 + -1.129820565394142e+04 + -1.131430161000000e+04 + -1.133041478676655e+04 + -1.134654520134832e+04 + -1.136269286880464e+04 + -1.137885779750048e+04 + -1.139503999999999e+04 + -1.141123949060806e+04 + -1.142745627830015e+04 + -1.144369037489935e+04 + -1.145994179819328e+04 + -1.147621056000000e+04 + -1.149249666929363e+04 + -1.150880014040390e+04 + -1.152512098586926e+04 + -1.154145921396878e+04 + -1.155781484000000e+04 + -1.157418788116290e+04 + -1.159057834325663e+04 + -1.160698623573862e+04 + -1.162341157750990e+04 + -1.163985437999999e+04 + -1.165631465167572e+04 + -1.167279241049137e+04 + -1.168928767028212e+04 + -1.170580043559586e+04 + -1.172233071999999e+04 + -1.173887854137991e+04 + -1.175544390951204e+04 + -1.177202683447122e+04 + -1.178862732998528e+04 + -1.180524541000000e+04 + -1.182188108744826e+04 + -1.183853437152247e+04 + -1.185520527417456e+04 + -1.187189381268968e+04 + -1.188860000000000e+04 + -1.190532384555031e+04 + -1.192206535739879e+04 + -1.193882454957090e+04 + -1.195560144455150e+04 + -1.197239604999999e+04 + -1.198920836801576e+04 + -1.200603841862060e+04 + -1.202288622005816e+04 + -1.203975178087160e+04 + -1.205663510999999e+04 + -1.207353621858988e+04 + -1.209045512337030e+04 + -1.210739183876488e+04 + -1.212434637372514e+04 + -1.214131874000000e+04 + -1.215830895146994e+04 + -1.217531702204386e+04 + -1.219234296344827e+04 + -1.220938678454126e+04 + -1.222644850000000e+04 + -1.224352812665298e+04 + -1.226062567426862e+04 + -1.227774115320455e+04 + -1.229487457740941e+04 + -1.231202595999999e+04 + -1.232919531361497e+04 + -1.234638265190763e+04 + -1.236358798719477e+04 + -1.238081132944854e+04 + -1.239805268999999e+04 + -1.241531208224867e+04 + -1.243258952373459e+04 + -1.244988502746729e+04 + -1.246719859854622e+04 + -1.248453025000000e+04 + -1.250187999937352e+04 + -1.251924785997314e+04 + -1.253663384322633e+04 + -1.255403795942784e+04 + -1.257146022000000e+04 + -1.258890063824787e+04 + -1.260635923174130e+04 + -1.262383601348307e+04 + -1.264133098848631e+04 + -1.265884416999999e+04 + -1.267637557565735e+04 + -1.269392521755929e+04 + -1.271149310837373e+04 + -1.272907926320349e+04 + -1.274668368999999e+04 + -1.276430639533002e+04 + -1.278194739917555e+04 + -1.279960671868295e+04 + -1.281728436173200e+04 + -1.283498034000000e+04 + -1.285269466774105e+04 + -1.287042735763161e+04 + -1.288817842259290e+04 + -1.290594787633268e+04 + -1.292373573000000e+04 + -1.294154199365508e+04 + -1.295936667981993e+04 + -1.297720980264566e+04 + -1.299507137776778e+04 + -1.301295141999999e+04 + -1.303084994203483e+04 + -1.304876695061188e+04 + -1.306670245535235e+04 + -1.308465647270176e+04 + -1.310262901999999e+04 + -1.312062011245361e+04 + -1.313862975604251e+04 + -1.315665796055223e+04 + -1.317470474462057e+04 + -1.319277012000000e+04 + -1.321085409533674e+04 + -1.322895668661698e+04 + -1.324707790969205e+04 + -1.326521777718879e+04 + -1.328337630000000e+04 + -1.330155348851537e+04 + -1.331974935491385e+04 + -1.333796391362056e+04 + -1.335619718140170e+04 + -1.337444916999999e+04 + -1.339271988874384e+04 + -1.341100935082290e+04 + -1.342931756987852e+04 + -1.344764455872234e+04 + -1.346599032999999e+04 + -1.348435489664480e+04 + -1.350273827293541e+04 + -1.352114047045672e+04 + -1.353956149695641e+04 + -1.355800137000000e+04 + -1.357646010972569e+04 + -1.359493772045508e+04 + -1.361343421245217e+04 + -1.363194960986463e+04 + -1.365048392000000e+04 + -1.366903714425879e+04 + -1.368760930691950e+04 + -1.370620042690972e+04 + -1.372481050688227e+04 + -1.374343955999999e+04 + -1.376208760473736e+04 + -1.378075465005087e+04 + -1.379944070672178e+04 + -1.381814579185646e+04 + -1.383686991999999e+04 + -1.385561310323773e+04 + -1.387437535187516e+04 + -1.389315667691767e+04 + -1.391195709130158e+04 + -1.393077661000000e+04 + -1.394961524865979e+04 + -1.396847302075987e+04 + -1.398734993803961e+04 + -1.400624601054151e+04 + -1.402516125000000e+04 + -1.404409566989268e+04 + -1.406304928589068e+04 + -1.408202211294199e+04 + -1.410101416389908e+04 + -1.412002544999999e+04 + -1.413905598164077e+04 + -1.415810576964489e+04 + -1.417717482985645e+04 + -1.419626318438561e+04 + -1.421537083999999e+04 + -1.423449779870650e+04 + -1.425364408441530e+04 + -1.427280971628262e+04 + -1.429199469812906e+04 + -1.431119904000000e+04 + -1.433042275698022e+04 + -1.434966586475864e+04 + -1.436892837784737e+04 + -1.438821030874347e+04 + -1.440751167000000e+04 + -1.442683247464153e+04 + -1.444617273693482e+04 + -1.446553246845352e+04 + -1.448491167696990e+04 + -1.450431037999999e+04 + -1.452372859766022e+04 + -1.454316633455064e+04 + -1.456262360064903e+04 + -1.458210041914065e+04 + -1.460159679999998e+04 + -1.462111274782618e+04 + -1.464064828275210e+04 + -1.466020342227678e+04 + -1.467977817411577e+04 + -1.469937255000000e+04 + -1.471898656425745e+04 + -1.473862022905967e+04 + -1.475827355783788e+04 + -1.477794656667906e+04 + -1.479763927000000e+04 + -1.481735168022591e+04 + -1.483708380678435e+04 + -1.485683566151257e+04 + -1.487660726097236e+04 + -1.489639861999999e+04 + -1.491620975095499e+04 + -1.493604066191429e+04 + -1.495589136614776e+04 + -1.497576188555746e+04 + -1.499565223000000e+04 + -1.501556240451360e+04 + -1.503549242791256e+04 + -1.505544231896391e+04 + -1.507541209051985e+04 + -1.509540175000000e+04 + -1.511541130465759e+04 + -1.513544077375174e+04 + -1.515549017500820e+04 + -1.517555951933053e+04 + -1.519564881999999e+04 + -1.521575809081157e+04 + -1.523588734003694e+04 + -1.525603658036919e+04 + -1.527620583277191e+04 + -1.529639510999998e+04 + -1.531660442034102e+04 + -1.533683377728779e+04 + -1.535708319443415e+04 + -1.537735268372974e+04 + -1.539764226000000e+04 + -1.541795193921473e+04 + -1.543828173411788e+04 + -1.545863165713528e+04 + -1.547900172144165e+04 + -1.549939194000000e+04 + -1.551980232569260e+04 + -1.554023289178161e+04 + -1.556068365093051e+04 + -1.558115461506463e+04 + -1.560164579999999e+04 + -1.562215722197032e+04 + -1.564268888875843e+04 + -1.566324081295743e+04 + -1.568381301679686e+04 + -1.570440550999999e+04 + -1.572501829745089e+04 + -1.574565139909988e+04 + -1.576630483256334e+04 + -1.578697860613842e+04 + -1.580767273000000e+04 + -1.582838721786272e+04 + -1.584912209052793e+04 + -1.586987736246908e+04 + -1.589065303680525e+04 + -1.591144913000000e+04 + -1.593226566336701e+04 + -1.595310264072689e+04 + -1.597396007256353e+04 + -1.599483798518879e+04 + -1.601573638999999e+04 + -1.603665529105288e+04 + -1.605759470511345e+04 + -1.607855464838671e+04 + -1.609953513161670e+04 + -1.612053616999998e+04 + -1.614155778004294e+04 + -1.616259997081388e+04 + -1.618366275348782e+04 + -1.620474614514243e+04 + -1.622585016000000e+04 + -1.624697481007329e+04 + -1.626812010728422e+04 + -1.628928606592670e+04 + -1.631047270337715e+04 + -1.633168003000000e+04 + -1.635290805454565e+04 + -1.637415679800609e+04 + -1.639542627592296e+04 + -1.641671649164588e+04 + -1.643802745999998e+04 + -1.645935920179283e+04 + -1.648071172935930e+04 + -1.650208505431875e+04 + -1.652347919039644e+04 + -1.654489414999998e+04 + -1.656632994566724e+04 + -1.658778659427021e+04 + -1.660926410974226e+04 + -1.663076250029903e+04 + -1.665228178000000e+04 + -1.667382196574960e+04 + -1.669538306946903e+04 + -1.671696510420377e+04 + -1.673856808645374e+04 + -1.676019203000000e+04 + -1.678183694695306e+04 + -1.680350285053965e+04 + -1.682518975366077e+04 + -1.684689766850574e+04 + -1.686862660999998e+04 + -1.689037659405139e+04 + -1.691214763326874e+04 + -1.693393974023558e+04 + -1.695575292860696e+04 + -1.697758720999999e+04 + -1.699944259677470e+04 + -1.702131910964586e+04 + -1.704321676352935e+04 + -1.706513556209216e+04 + -1.708707552000000e+04 + -1.710903665790321e+04 + -1.713101898938551e+04 + -1.715302252479822e+04 + -1.717504727292061e+04 + -1.719709325000000e+04 + -1.721916047545785e+04 + -1.724124896174670e+04 + -1.726335872072246e+04 + -1.728548976595536e+04 + -1.730764210999998e+04 + -1.732981576548871e+04 + -1.735201074834581e+04 + -1.737422707347338e+04 + -1.739646475299950e+04 + -1.741872379999999e+04 + -1.744100422776899e+04 + -1.746330604747148e+04 + -1.748562927386205e+04 + -1.750797392735042e+04 + -1.753034002000000e+04 + -1.755272756012299e+04 + -1.757513656385630e+04 + -1.759756704698003e+04 + -1.762001902165879e+04 + -1.764249250000000e+04 + -1.766498749503509e+04 + -1.768750402279969e+04 + -1.771004209797560e+04 + -1.773260173223158e+04 + -1.775518293999998e+04 + -1.777778573725219e+04 + -1.780041013823985e+04 + -1.782305615380817e+04 + -1.784572379125812e+04 + -1.786841306999998e+04 + -1.789112401297027e+04 + -1.791385662520795e+04 + -1.793661091551944e+04 + -1.795938690506571e+04 + -1.798218461000000e+04 + -1.800500404157250e+04 + -1.802784520726593e+04 + -1.805070812126097e+04 + -1.807359280836476e+04 + -1.809649928000000e+04 + -1.811942754077938e+04 + -1.814237760512274e+04 + -1.816534949154946e+04 + -1.818834322012563e+04 + -1.821135879999998e+04 + -1.823439623670011e+04 + -1.825745554979138e+04 + -1.828053675712656e+04 + -1.830363986886144e+04 + -1.832676489999998e+04 + -1.834991186721417e+04 + -1.837308077964562e+04 + -1.839627164834952e+04 + -1.841948449011883e+04 + -1.844271932000000e+04 + -1.846597615248214e+04 + -1.848925500551537e+04 + -1.851255589141731e+04 + -1.853587881367952e+04 + -1.855922379000000e+04 + -1.858259084403384e+04 + -1.860597998459446e+04 + -1.862939122130964e+04 + -1.865282457086503e+04 + -1.867628004999998e+04 + -1.869975767367864e+04 + -1.872325745125265e+04 + -1.874677939400045e+04 + -1.877032351829797e+04 + -1.879388983999998e+04 + -1.881747837395618e+04 + -1.884108913346766e+04 + -1.886472213066709e+04 + -1.888837737699991e+04 + -1.891205489000000e+04 + -1.893575468867888e+04 + -1.895947678210836e+04 + -1.898322118083019e+04 + -1.900698790146692e+04 + -1.903077696000000e+04 + -1.905458837122149e+04 + -1.907842214817702e+04 + -1.910227830328199e+04 + -1.912615684887913e+04 + -1.915005779999998e+04 + -1.917398117252360e+04 + -1.919792697876641e+04 + -1.922189523162585e+04 + -1.924588594641727e+04 + -1.926989913999998e+04 + -1.929393482787026e+04 + -1.931799301676958e+04 + -1.934207372057390e+04 + -1.936617696590223e+04 + -1.939030276000000e+04 + -1.941445110358184e+04 + -1.943862202401437e+04 + -1.946281554213054e+04 + -1.948703165938676e+04 + -1.951127038999998e+04 + -1.953553175531375e+04 + -1.955981576784185e+04 + -1.958412243887696e+04 + -1.960845178142548e+04 + -1.963280380999998e+04 + -1.965717854010317e+04 + -1.968157598764983e+04 + -1.970599616682758e+04 + -1.973043908928781e+04 + -1.975490477000000e+04 + -1.977939322508017e+04 + -1.980390446612710e+04 + -1.982843850672890e+04 + -1.985299536464853e+04 + -1.987757505000000e+04 + -1.990217757132781e+04 + -1.992680295149982e+04 + -1.995145120910892e+04 + -1.997612235106852e+04 + -2.000081638999998e+04 + -2.002553334291399e+04 + -2.005027322692212e+04 + -2.007503605456619e+04 + -2.009982183242756e+04 + -2.012463057999998e+04 + -2.014946232050470e+04 + -2.017431705750974e+04 + -2.019919480128925e+04 + -2.022409557869796e+04 + -2.024901940000000e+04 + -2.027396626876084e+04 + -2.029893620825063e+04 + -2.032392923791251e+04 + -2.034894536415857e+04 + -2.037398460000000e+04 + -2.039904696273123e+04 + -2.042413246681671e+04 + -2.044924112749899e+04 + -2.047437296177629e+04 + -2.049952797999998e+04 + -2.052470619105544e+04 + -2.054990761544010e+04 + -2.057513226917888e+04 + -2.060038015795331e+04 + -2.062565129999998e+04 + -2.065094571854568e+04 + -2.067626342205840e+04 + -2.070160442063917e+04 + -2.072696873225083e+04 + -2.075235637000000e+04 + -2.077776734528838e+04 + -2.080320167696219e+04 + -2.082865938214449e+04 + -2.085414047244347e+04 + -2.087964496000000e+04 + -2.090517285805777e+04 + -2.093072418166662e+04 + -2.095629894648643e+04 + -2.098189716820891e+04 + -2.100751885999998e+04 + -2.103316403410750e+04 + -2.105883270565323e+04 + -2.108452489048020e+04 + -2.111024060421226e+04 + -2.113597985999998e+04 + -2.116174267011207e+04 + -2.118752904964539e+04 + -2.121333901446366e+04 + -2.123917258027344e+04 + -2.126502976000000e+04 + -2.129091056582378e+04 + -2.131681501406569e+04 + -2.134274311932949e+04 + -2.136869489244911e+04 + -2.139467035000000e+04 + -2.142066951097057e+04 + -2.144669238829770e+04 + -2.147273899344209e+04 + -2.149880933837191e+04 + -2.152490343999998e+04 + -2.155102131698669e+04 + -2.157716298229367e+04 + -2.160332844744082e+04 + -2.162951772437019e+04 + -2.165573082999998e+04 + -2.168196778300156e+04 + -2.170822859627157e+04 + -2.173451328139519e+04 + -2.176082185053812e+04 + -2.178715432000000e+04 + -2.181351070821111e+04 + -2.183989103150391e+04 + -2.186629530288904e+04 + -2.189272353140778e+04 + -2.191917573000000e+04 + -2.194565191497987e+04 + -2.197215210512397e+04 + -2.199867631637375e+04 + -2.202522455969623e+04 + -2.205179684999998e+04 + -2.207839320363563e+04 + -2.210501363148952e+04 + -2.213165814783550e+04 + -2.215832677350680e+04 + -2.218501951999998e+04 + -2.221173639532642e+04 + -2.223847741910094e+04 + -2.226524260850044e+04 + -2.229203197306979e+04 + -2.231884553000000e+04 + -2.234568329890952e+04 + -2.237254528774074e+04 + -2.239943150806158e+04 + -2.242634198094407e+04 + -2.245327672000000e+04 + -2.248023573585785e+04 + -2.250721904853940e+04 + -2.253422667413636e+04 + -2.256125861967753e+04 + -2.258831489999998e+04 + -2.261539553480252e+04 + -2.264250054093014e+04 + -2.266962993052693e+04 + -2.269678371062339e+04 + -2.272396189999998e+04 + -2.275116452153000e+04 + -2.277839158301363e+04 + -2.280564309534358e+04 + -2.283291907950545e+04 + -2.286021955000000e+04 + -2.288754451771620e+04 + -2.291489399812011e+04 + -2.294226800704672e+04 + -2.296966655917324e+04 + -2.299708967000000e+04 + -2.302453735490683e+04 + -2.305200962641978e+04 + -2.307950649734620e+04 + -2.310702798236498e+04 + -2.313457409999998e+04 + -2.316214486856879e+04 + -2.318974029613145e+04 + -2.321736039447026e+04 + -2.324500518448656e+04 + -2.327267467999998e+04 + -2.330036889175501e+04 + -2.332808783850466e+04 + -2.335583153764027e+04 + -2.338360000121357e+04 + -2.341139324000000e+04 + -2.343921126672951e+04 + -2.346705410394532e+04 + -2.349492176951476e+04 + -2.352281427072812e+04 + -2.355073162000000e+04 + -2.357867383414989e+04 + -2.360664093193761e+04 + -2.363463292919098e+04 + -2.366264983684289e+04 + -2.369069166999998e+04 + -2.371875844507638e+04 + -2.374685017193912e+04 + -2.377496686591387e+04 + -2.380310855200050e+04 + -2.383127523999998e+04 + -2.385946693403709e+04 + -2.388768365690810e+04 + -2.391592542840760e+04 + -2.394419225713039e+04 + -2.397248416000000e+04 + -2.400080115691363e+04 + -2.402914325571854e+04 + -2.405751046800998e+04 + -2.408590281513924e+04 + -2.411432031000000e+04 + -2.414276296293371e+04 + -2.417123079796694e+04 + -2.419972383203242e+04 + -2.422824206706797e+04 + -2.425678551999998e+04 + -2.428535421485334e+04 + -2.431394816200073e+04 + -2.434256737430352e+04 + -2.437121187300517e+04 + -2.439988166999998e+04 + -2.442857677325164e+04 + -2.445729720103540e+04 + -2.448604297194451e+04 + -2.451481410082247e+04 + -2.454361060000000e+04 + -2.457243248182022e+04 + -2.460127976431730e+04 + -2.463015246522100e+04 + -2.465905059942621e+04 + -2.468797417999998e+04 + -2.471692321945616e+04 + -2.474589773222362e+04 + -2.477489773480251e+04 + -2.480392324581322e+04 + -2.483297427999998e+04 + -2.486205084917968e+04 + -2.489115296405446e+04 + -2.492028064024748e+04 + -2.494943390068509e+04 + -2.497861275999998e+04 + -2.500781722863925e+04 + -2.503704732334474e+04 + -2.506630305872901e+04 + -2.509558444448151e+04 + -2.512489150000000e+04 + -2.515422424757818e+04 + -2.518358269497819e+04 + -2.521296685328307e+04 + -2.524237674371633e+04 + -2.527181237999998e+04 + -2.530127377273551e+04 + -2.533076094162915e+04 + -2.536027390311031e+04 + -2.538981266594794e+04 + -2.541937724999998e+04 + -2.544896767801531e+04 + -2.547858395406606e+04 + -2.550822608802068e+04 + -2.553789410507042e+04 + -2.556758802000000e+04 + -2.559730784246711e+04 + -2.562705359189478e+04 + -2.565682528525429e+04 + -2.568662293247029e+04 + -2.571644655000000e+04 + -2.574629615713407e+04 + -2.577617176604459e+04 + -2.580607338891535e+04 + -2.583600104095400e+04 + -2.586595473999998e+04 + -2.589593450400127e+04 + -2.592594034522632e+04 + -2.595597227610649e+04 + -2.598603031176017e+04 + -2.601611446999998e+04 + -2.604622476879967e+04 + -2.607636122042706e+04 + -2.610652383730750e+04 + -2.613671263455693e+04 + -2.616692763000000e+04 + -2.619716884161440e+04 + -2.622743628160562e+04 + -2.625772996246335e+04 + -2.628804989951923e+04 + -2.631839611000000e+04 + -2.634876861165059e+04 + -2.637916741999917e+04 + -2.640959254907723e+04 + -2.644004401148305e+04 + -2.647052181999998e+04 + -2.650102598983489e+04 + -2.653155654491748e+04 + -2.656211350103963e+04 + -2.659269685960091e+04 + -2.662330663999998e+04 + -2.665394286925502e+04 + -2.668460555517195e+04 + -2.671529470758218e+04 + -2.674601034670874e+04 + -2.677675249000000e+04 + -2.680752115154265e+04 + -2.683831634157976e+04 + -2.686913807564717e+04 + -2.689998637786448e+04 + -2.693086126000000e+04 + -2.696176272916689e+04 + -2.699269080763921e+04 + -2.702364551500381e+04 + -2.705462686113689e+04 + -2.708563485999998e+04 + -2.711666952809900e+04 + -2.714773087942122e+04 + -2.717881892991400e+04 + -2.720993369901594e+04 + -2.724107519999998e+04 + -2.727224344400496e+04 + -2.730343845029767e+04 + -2.733466023562860e+04 + -2.736590881019403e+04 + -2.739718419000000e+04 + -2.742848639412166e+04 + -2.745981543741902e+04 + -2.749117133427855e+04 + -2.752255410001475e+04 + -2.755396375000000e+04 + -2.758540029934807e+04 + -2.761686376223195e+04 + -2.764835415476579e+04 + -2.767987149599797e+04 + -2.771141579999997e+04 + -2.774298707825893e+04 + -2.777458534547961e+04 + -2.780621061813955e+04 + -2.783786291408934e+04 + -2.786954224999998e+04 + -2.790124864062599e+04 + -2.793298209650868e+04 + -2.796474263269793e+04 + -2.799653027215609e+04 + -2.802834503000000e+04 + -2.806018691678819e+04 + -2.809205594694776e+04 + -2.812395213748840e+04 + -2.815587550739401e+04 + -2.818782607000000e+04 + -2.821980383662756e+04 + -2.825180882556652e+04 + -2.828384105454396e+04 + -2.831590053775406e+04 + -2.834798728999998e+04 + -2.838010132665882e+04 + -2.841224266303304e+04 + -2.844441131398464e+04 + -2.847660729395342e+04 + -2.850883061999998e+04 + -2.854108131015271e+04 + -2.857335937943549e+04 + -2.860566484233479e+04 + -2.863799771378746e+04 + -2.867035801000000e+04 + -2.870274574643904e+04 + -2.873516093256026e+04 + -2.876760358436649e+04 + -2.880007372909855e+04 + -2.883257138000000e+04 + -2.886509654365616e+04 + -2.889764923870952e+04 + -2.893022948372628e+04 + -2.896283729252707e+04 + -2.899547267999998e+04 + -2.902813566168059e+04 + -2.906082625190441e+04 + -2.909354446650575e+04 + -2.912629032389195e+04 + -2.915906383999998e+04 + -2.919186502919167e+04 + -2.922469390650106e+04 + -2.925755048733507e+04 + -2.929043478725063e+04 + -2.932334682000000e+04 + -2.935628660019129e+04 + -2.938925415043921e+04 + -2.942224948806936e+04 + -2.945527261979538e+04 + -2.948832356000000e+04 + -2.952140232838030e+04 + -2.955450894361826e+04 + -2.958764342089699e+04 + -2.962080577090842e+04 + -2.965399600999997e+04 + -2.968721415715336e+04 + -2.972046022629084e+04 + -2.975373423280592e+04 + -2.978703619592538e+04 + -2.982036612999997e+04 + -2.985372404652352e+04 + -2.988710995909819e+04 + -2.992052388535540e+04 + -2.995396584761164e+04 + -2.998743586000000e+04 + -3.002093393306212e+04 + -3.005446008516229e+04 + -3.008801433415196e+04 + -3.012159669410924e+04 + -3.015520717999998e+04 + -3.018884580728562e+04 + -3.022251259030155e+04 + -3.025620754490144e+04 + -3.028993068950620e+04 + -3.032368203999997e+04 + -3.035746161072607e+04 + -3.039126941699663e+04 + -3.042510547393189e+04 + -3.045896979612689e+04 + -3.049286239999998e+04 + -3.052678330335746e+04 + -3.056073252467363e+04 + -3.059471007984014e+04 + -3.062871598061521e+04 + -3.066275024000000e+04 + -3.069681287356475e+04 + -3.073090390293319e+04 + -3.076502334621974e+04 + -3.079917121404217e+04 + -3.083334751999997e+04 + -3.086755228023463e+04 + -3.090178551167921e+04 + -3.093604723225209e+04 + -3.097033746063074e+04 + -3.100465620999998e+04 + -3.103900349175437e+04 + -3.107337932446759e+04 + -3.110778372555016e+04 + -3.114221670819769e+04 + -3.117667828999997e+04 + -3.121116848957679e+04 + -3.124568731744623e+04 + -3.128023478769976e+04 + -3.131481092268889e+04 + -3.134941574000000e+04 + -3.138404925321087e+04 + -3.141871147408727e+04 + -3.145340241670125e+04 + -3.148812209933996e+04 + -3.152287053999997e+04 + -3.155764775577736e+04 + -3.159245376185456e+04 + -3.162728857279384e+04 + -3.166215220315186e+04 + -3.169704466999997e+04 + -3.173196599132658e+04 + -3.176691618227545e+04 + -3.180189525721778e+04 + -3.183690323068162e+04 + -3.187194012000000e+04 + -3.190700594323912e+04 + -3.194210071422084e+04 + -3.197722444868163e+04 + -3.201237716636405e+04 + -3.204755888000000e+04 + -3.208276960047787e+04 + -3.211800935023939e+04 + -3.215327814773632e+04 + -3.218857600158763e+04 + -3.222390292999997e+04 + -3.225925895535199e+04 + -3.229464408973093e+04 + -3.233005834462857e+04 + -3.236550173499735e+04 + -3.240097427999997e+04 + -3.243647600017841e+04 + -3.247200691143220e+04 + -3.250756702669824e+04 + -3.254315635678932e+04 + -3.257877492000000e+04 + -3.261442273792899e+04 + -3.265009982555360e+04 + -3.268580619650297e+04 + -3.272154186523808e+04 + -3.275730685000000e+04 + -3.279310116911321e+04 + -3.282892483177912e+04 + -3.286477785354587e+04 + -3.290066026202923e+04 + -3.293657206999998e+04 + -3.297251328378459e+04 + -3.300848392497173e+04 + -3.304448401407080e+04 + -3.308051356412061e+04 + -3.311657258999998e+04 + -3.315266110752813e+04 + -3.318877912993135e+04 + -3.322492667413289e+04 + -3.326110376297835e+04 + -3.329731041000000e+04 + -3.333354662539115e+04 + -3.336981243131684e+04 + -3.340610784669931e+04 + -3.344243288124504e+04 + -3.347878755000000e+04 + -3.351517187197135e+04 + -3.355158586607149e+04 + -3.358802954742114e+04 + -3.362450292603845e+04 + -3.366100601999997e+04 + -3.369753885113907e+04 + -3.373410143432544e+04 + -3.377069378324004e+04 + -3.380731591267414e+04 + -3.384396783999997e+04 + -3.388064958319757e+04 + -3.391736115628571e+04 + -3.395410257481684e+04 + -3.399087385786547e+04 + -3.402767502000000e+04 + -3.406450607498593e+04 + -3.410136704569621e+04 + -3.413825794940452e+04 + -3.417517879208190e+04 + -3.421212959000000e+04 + -3.424911036577375e+04 + -3.428612113814977e+04 + -3.432316192150666e+04 + -3.436023272579379e+04 + -3.439733356999998e+04 + -3.443446447621852e+04 + -3.447162545467578e+04 + -3.450881651888796e+04 + -3.454603769159935e+04 + -3.458328898999997e+04 + -3.462057042742187e+04 + -3.465788201822977e+04 + -3.469522377879945e+04 + -3.473259572783916e+04 + -3.476999788000000e+04 + -3.480743024920274e+04 + -3.484489285737491e+04 + -3.488238572274076e+04 + -3.491990885516477e+04 + -3.495746227000000e+04 + -3.499504598627476e+04 + -3.503266002163332e+04 + -3.507030439252002e+04 + -3.510797911399110e+04 + -3.514568419999997e+04 + -3.518341966538968e+04 + -3.522118553105182e+04 + -3.525898181605689e+04 + -3.529680853433678e+04 + -3.533466569999997e+04 + -3.537255332834070e+04 + -3.541047143775194e+04 + -3.544842004484196e+04 + -3.548639916273562e+04 + -3.552440881000000e+04 + -3.556244900769237e+04 + -3.560051977192599e+04 + -3.563862111528000e+04 + -3.567675304773126e+04 + -3.571491559000000e+04 + -3.575310876677514e+04 + -3.579133259025522e+04 + -3.582958707123636e+04 + -3.586787222387752e+04 + -3.590618806999997e+04 + -3.594453463328037e+04 + -3.598291192576281e+04 + -3.602131995866808e+04 + -3.605975874687618e+04 + -3.609822830999997e+04 + -3.613672866872384e+04 + -3.617525983663845e+04 + -3.621382182906358e+04 + -3.625241466608051e+04 + -3.629103836000000e+04 + -3.632969292147818e+04 + -3.636837837559645e+04 + -3.640709474306420e+04 + -3.644584203277781e+04 + -3.648462026000000e+04 + -3.652342944409004e+04 + -3.656226960170399e+04 + -3.660114075023598e+04 + -3.664004290875195e+04 + -3.667897608999997e+04 + -3.671794030512006e+04 + -3.675693557547587e+04 + -3.679596192058374e+04 + -3.683501935339895e+04 + -3.687410788999997e+04 + -3.691322754870546e+04 + -3.695237834723054e+04 + -3.699156030212950e+04 + -3.703077342834224e+04 + -3.707001774000000e+04 + -3.710929325203417e+04 + -3.714859998429457e+04 + -3.718793795692067e+04 + -3.722730718808447e+04 + -3.726670768999997e+04 + -3.730613947399677e+04 + -3.734560256273038e+04 + -3.738509697431393e+04 + -3.742462271654350e+04 + -3.746417980999997e+04 + -3.750376828013417e+04 + -3.754338813660564e+04 + -3.758303939267375e+04 + -3.762272207245150e+04 + -3.766243618999997e+04 + -3.770218175518502e+04 + -3.774195878945678e+04 + -3.778176731257176e+04 + -3.782160733741773e+04 + -3.786147888000000e+04 + -3.790138195864309e+04 + -3.794131659132003e+04 + -3.798128279431332e+04 + -3.802128058166662e+04 + -3.806130996999997e+04 + -3.810137097737330e+04 + -3.814146362046005e+04 + -3.818158791697343e+04 + -3.822174388615621e+04 + -3.826193153999997e+04 + -3.830215088938532e+04 + -3.834240195971708e+04 + -3.838268477130731e+04 + -3.842299933188884e+04 + -3.846334565999997e+04 + -3.850372377842891e+04 + -3.854413369633216e+04 + -3.858457542816681e+04 + -3.862504900090371e+04 + -3.866555443000000e+04 + -3.870609172486966e+04 + -3.874666090332934e+04 + -3.878726198409722e+04 + -3.882789498399841e+04 + -3.886855991999997e+04 + -3.890925680946781e+04 + -3.894998567054054e+04 + -3.899074651957592e+04 + -3.903153937021765e+04 + -3.907236423999997e+04 + -3.911322114736439e+04 + -3.915411010384250e+04 + -3.919503112747372e+04 + -3.923598424716172e+04 + -3.927696946999997e+04 + -3.931798680038228e+04 + -3.935903628964794e+04 + -3.940011793259103e+04 + -3.944123164809230e+04 + -3.948237770000000e+04 + -3.952355620675491e+04 + -3.956476584662273e+04 + -3.960600801403134e+04 + -3.964728735507886e+04 + -3.968859104999997e+04 + 1.819886919039960e+01 + 1.816405130921966e+01 + 1.812918280091599e+01 + 1.809426424653407e+01 + 1.805929622711938e+01 + 1.802427932371738e+01 + 1.798921411737356e+01 + 1.795410118913339e+01 + 1.791894112004234e+01 + 1.788373449114589e+01 + 1.784848188348950e+01 + 1.781318387811866e+01 + 1.777784105607885e+01 + 1.774245399841551e+01 + 1.770702328617416e+01 + 1.767154950040025e+01 + 1.763603322213927e+01 + 1.760047503243666e+01 + 1.756487551233793e+01 + 1.752923524288855e+01 + 1.749355480513398e+01 + 1.745783478011969e+01 + 1.742207574889119e+01 + 1.738627829249391e+01 + 1.735044299197335e+01 + 1.731457042837498e+01 + 1.727866118274428e+01 + 1.724271583612671e+01 + 1.720673496956776e+01 + 1.717071916411290e+01 + 1.713466900080759e+01 + 1.709858506069732e+01 + 1.706246792482757e+01 + 1.702631817424381e+01 + 1.699013638999150e+01 + 1.695392315311613e+01 + 1.691767904466317e+01 + 1.688140464567809e+01 + 1.684510053720637e+01 + 1.680876730029348e+01 + 1.677240551598491e+01 + 1.673601576532611e+01 + 1.669959862936258e+01 + 1.666315468913977e+01 + 1.662668452570318e+01 + 1.659018872009826e+01 + 1.655366785337049e+01 + 1.651712250656536e+01 + 1.648055326072833e+01 + 1.644396069690488e+01 + 1.640734539614049e+01 + 1.637070793948063e+01 + 1.633404890797076e+01 + 1.629736888265638e+01 + 1.626066844458294e+01 + 1.622394817479593e+01 + 1.618720865434082e+01 + 1.615045046426309e+01 + 1.611367418560821e+01 + 1.607688039942165e+01 + 1.604006968674890e+01 + 1.600324262863542e+01 + 1.596639980612668e+01 + 1.592954180026817e+01 + 1.589266919210536e+01 + 1.585578256268371e+01 + 1.581888249304872e+01 + 1.578196956424585e+01 + 1.574504435732057e+01 + 1.570810745331836e+01 + 1.567115943328470e+01 + 1.563420087826506e+01 + 1.559723236930490e+01 + 1.556025448744972e+01 + 1.552326781374499e+01 + 1.548627292923617e+01 + 1.544927041496875e+01 + 1.541226085198818e+01 + 1.537524482133997e+01 + 1.533822290406956e+01 + 1.530119568122245e+01 + 1.526416373384410e+01 + 1.522712764298000e+01 + 1.519008798967561e+01 + 1.515304535497640e+01 + 1.511600031992786e+01 + 1.507895346557546e+01 + 1.504190537296467e+01 + 1.500485662314096e+01 + 1.496780779714983e+01 + 1.493075947603672e+01 + 1.489371224084713e+01 + 1.485666667262652e+01 + 1.481962335242037e+01 + 1.478258286127416e+01 + 1.474554578023335e+01 + 1.470851269034343e+01 + 1.467148417264987e+01 + 1.463446080819813e+01 + 1.459744317803371e+01 + 1.456043186320207e+01 + 1.452342744474869e+01 + 1.448643050371903e+01 + 1.444944162115858e+01 + 1.441246137811282e+01 + 1.437549035562720e+01 + 1.433852913474722e+01 + 1.430157829651834e+01 + 1.426463842198604e+01 + 1.422771009219579e+01 + 1.419079388819307e+01 + 1.415389039102334e+01 + 1.411700018173210e+01 + 1.408012384136481e+01 + 1.404326195096694e+01 + 1.400641509158398e+01 + 1.396958384426139e+01 + 1.393276879004464e+01 + 1.389597050997923e+01 + 1.385918958511061e+01 + 1.382242659648426e+01 + 1.378568212514566e+01 + 1.374895675214029e+01 + 1.371225105851361e+01 + 1.367556562531110e+01 + 1.363890103357824e+01 + 1.360225786436050e+01 + 1.356563669870335e+01 + 1.352903811765228e+01 + 1.349246270225274e+01 + 1.345591103355023e+01 + 1.341938369259021e+01 + 1.338288126041816e+01 + 1.334640431807955e+01 + 1.330995344661985e+01 + 1.327352922708455e+01 + 1.323713224051912e+01 + 1.320076306796902e+01 + 1.316442229047974e+01 + 1.312811048909675e+01 + 1.309182824486553e+01 + 1.305557613883154e+01 + 1.301935475204027e+01 + 1.298316466553718e+01 + 1.294700646036776e+01 + 1.291088071757748e+01 + 1.287478801821181e+01 + 1.283872894331622e+01 + 1.280270407393619e+01 + 1.276671399111720e+01 + 1.273075927590472e+01 + 1.269484050934423e+01 + 1.265895827248119e+01 + 1.262311314636109e+01 + 1.258730571202939e+01 + 1.255153655053158e+01 + 1.251580624291313e+01 + 1.248011537021950e+01 + 1.244446451349619e+01 + 1.240885425378865e+01 + 1.237328517214237e+01 + 1.233775784960283e+01 + 1.230227286721548e+01 + 1.226683080602582e+01 + 1.223143224707931e+01 + 1.219607777142142e+01 + 1.216076796009764e+01 + 1.212550339415344e+01 + 1.209028465463429e+01 + 1.205511232258567e+01 + 1.201998697905305e+01 + 1.198490920508190e+01 + 1.194987958171770e+01 + 1.191489869000593e+01 + 1.187996711099206e+01 + 1.184508542572157e+01 + 1.181025421523992e+01 + 1.177547406059259e+01 + 1.174074554282507e+01 + 1.170606924298281e+01 + 1.167144574211130e+01 + 1.163687562125602e+01 + 1.160235946146243e+01 + 1.156789784377601e+01 + 1.153349134924223e+01 + 1.149914055890657e+01 + 1.146484605381452e+01 + 1.143060841501152e+01 + 1.139642822354308e+01 + 1.136230606045464e+01 + 1.132824250679170e+01 + 1.129423814359974e+01 + 1.126029355192421e+01 + 1.122640931281059e+01 + 1.119258600730437e+01 + 1.115882421645102e+01 + 1.112512452129600e+01 + 1.109148750288479e+01 + 1.105791374226288e+01 + 1.102440382047573e+01 + 1.099095831856882e+01 + 1.095757781758762e+01 + 1.092426289857761e+01 + 1.089101414258426e+01 + 1.085783213065305e+01 + 1.082471744382945e+01 + 1.079167066315892e+01 + 1.075869236968697e+01 + 1.072578314445905e+01 + 1.069294356852064e+01 + 1.066017422291721e+01 + 1.062747568869424e+01 + 1.059484854689720e+01 + 1.056229337857157e+01 + 1.052981076476282e+01 + 1.049740128651643e+01 + 1.046506552487787e+01 + 1.043280406089261e+01 + 1.040061747560614e+01 + 1.036850635006392e+01 + 1.033647126531143e+01 + 1.030451280239414e+01 + 1.027263154235754e+01 + 1.024082806624708e+01 + 1.020910295510825e+01 + 1.017745678998653e+01 + 1.014589015192738e+01 + 1.011440362197629e+01 + 1.008299778117872e+01 + 1.005167321058014e+01 + 1.002043049122605e+01 + 9.989270204161905e+00 + 9.958192930433185e+00 + 9.927199251085362e+00 + 9.896289747163912e+00 + 9.865464999714312e+00 + 9.834725589782032e+00 + 9.804072098412551e+00 + 9.773505106651340e+00 + 9.743025195543877e+00 + 9.712632946135633e+00 + 9.682328939472086e+00 + 9.652113756598707e+00 + 9.621987978560973e+00 + 9.591952186404358e+00 + 9.562006961174337e+00 + 9.532152883916382e+00 + 9.502390535675973e+00 + 9.472720497498580e+00 + 9.443143350429677e+00 + 9.413659675514742e+00 + 9.384270053799249e+00 + 9.354975066328668e+00 + 9.325775294148480e+00 + 9.296671318304156e+00 + 9.267663719841170e+00 + 9.238753079804999e+00 + 9.209939979241115e+00 + 9.181224999194994e+00 + 9.152608720712111e+00 + 9.124091724837941e+00 + 9.095674592617954e+00 + 9.067357905097630e+00 + 9.039142243322441e+00 + 9.011028188337864e+00 + 8.983016292445305e+00 + 8.955106689123129e+00 + 8.927299195109086e+00 + 8.899593619314148e+00 + 8.871989770649284e+00 + 8.844487458025464e+00 + 8.817086490353660e+00 + 8.789786676544839e+00 + 8.762587825509975e+00 + 8.735489746160036e+00 + 8.708492247405990e+00 + 8.681595138158814e+00 + 8.654798227329470e+00 + 8.628101323828931e+00 + 8.601504236568170e+00 + 8.575006774458155e+00 + 8.548608746409855e+00 + 8.522309961334242e+00 + 8.496110228142285e+00 + 8.470009355744955e+00 + 8.444007153053219e+00 + 8.418103428978053e+00 + 8.392297992430423e+00 + 8.366590652321301e+00 + 8.340981217561657e+00 + 8.315469497062459e+00 + 8.290055299734679e+00 + 8.264738434489287e+00 + 8.239518710237252e+00 + 8.214395935889545e+00 + 8.189369920357137e+00 + 8.164440472550996e+00 + 8.139607401382095e+00 + 8.114870515761401e+00 + 8.090229624599887e+00 + 8.065684536808520e+00 + 8.041235061298275e+00 + 8.016881006980118e+00 + 7.992622182765018e+00 + 7.968458397563950e+00 + 7.944389460287880e+00 + 7.920415179847782e+00 + 7.896535365154623e+00 + 7.872749825119373e+00 + 7.849058368653004e+00 + 7.825460804666484e+00 + 7.801956942070785e+00 + 7.778546589776878e+00 + 7.755229556695729e+00 + 7.732005651738313e+00 + 7.708874683815599e+00 + 7.685836461838553e+00 + 7.662890794718152e+00 + 7.640037491365358e+00 + 7.617276360691148e+00 + 7.594607211606489e+00 + 7.572029853022352e+00 + 7.549544093849708e+00 + 7.527149742999527e+00 + 7.504846609382777e+00 + 7.482634501910429e+00 + 7.460513229493455e+00 + 7.438482601042820e+00 + 7.416542425469502e+00 + 7.394692511684465e+00 + 7.372932668598682e+00 + 7.351262705123121e+00 + 7.329682430168755e+00 + 7.308191652646553e+00 + 7.286790181467484e+00 + 7.265477825542517e+00 + 7.244254393782626e+00 + 7.223119695098779e+00 + 7.202073538401945e+00 + 7.181115732603097e+00 + 7.160246086613204e+00 + 7.139464409343233e+00 + 7.118770509704159e+00 + 7.098164196606950e+00 + 7.077645278962576e+00 + 7.057213565682006e+00 + 7.036868865676214e+00 + 7.016610987856166e+00 + 6.996439741132834e+00 + 6.976354934417186e+00 + 6.956356376620197e+00 + 6.936443876652832e+00 + 6.916617243426063e+00 + 6.896876285850862e+00 + 6.877220812838198e+00 + 6.857650633299039e+00 + 6.838165556144358e+00 + 6.818765390285123e+00 + 6.799449944632306e+00 + 6.780219028096876e+00 + 6.761072449589803e+00 + 6.742010018022058e+00 + 6.723031542304612e+00 + 6.704136831348434e+00 + 6.685325694064492e+00 + 6.666597939363759e+00 + 6.647953376157203e+00 + 6.629391813355797e+00 + 6.610913059870509e+00 + 6.592516924612310e+00 + 6.574203216492170e+00 + 6.555971744421058e+00 + 6.537822317309946e+00 + 6.519754744069803e+00 + 6.501768833611600e+00 + 6.483864394846306e+00 + 6.466041236684891e+00 + 6.448299168038327e+00 + 6.430637997817582e+00 + 6.413057534933630e+00 + 6.395557588297437e+00 + 6.378137966819973e+00 + 6.360798479412210e+00 + 6.343538934985117e+00 + 6.326359142449666e+00 + 6.309258910716826e+00 + 6.292238048697567e+00 + 6.275296365302859e+00 + 6.258433669443673e+00 + 6.241649770030978e+00 + 6.224944475975745e+00 + 6.208317596188945e+00 + 6.191768939581546e+00 + 6.175298315064517e+00 + 6.158905531548833e+00 + 6.142590397945462e+00 + 6.126352723165372e+00 + 6.110192316119535e+00 + 6.094108985718921e+00 + 6.078102540874499e+00 + 6.062172790497243e+00 + 6.046319543498117e+00 + 6.030542608788095e+00 + 6.014841795278149e+00 + 5.999216911879244e+00 + 5.983667767502356e+00 + 5.968194171058448e+00 + 5.952795931458497e+00 + 5.937472857613470e+00 + 5.922224758434336e+00 + 5.907051442832068e+00 + 5.891952719717633e+00 + 5.876928398002004e+00 + 5.861978286596150e+00 + 5.847102194411042e+00 + 5.832299930357648e+00 + 5.817571303346941e+00 + 5.802916122289888e+00 + 5.788334196097460e+00 + 5.773825333680629e+00 + 5.759389343950365e+00 + 5.745026035817635e+00 + 5.730735218193414e+00 + 5.716516699988668e+00 + 5.702370290114368e+00 + 5.688295797481486e+00 + 5.674293031000990e+00 + 5.660361799583851e+00 + 5.646501912141039e+00 + 5.632713177583526e+00 + 5.618995404822279e+00 + 5.605348402768269e+00 + 5.591771980332467e+00 + 5.578265946425844e+00 + 5.564830109959368e+00 + 5.551464279844009e+00 + 5.538168264990741e+00 + 5.524941874310529e+00 + 5.511784916714348e+00 + 5.498697201113163e+00 + 5.485678536417949e+00 + 5.472728731539672e+00 + 5.459847595389306e+00 + 5.447031950668924e+00 + 5.434258417587328e+00 + 5.421509378931341e+00 + 5.408790202589383e+00 + 5.396101725502927e+00 + 5.383442552149385e+00 + 5.370812984345576e+00 + 5.358213038980171e+00 + 5.345642546622406e+00 + 5.333101463094469e+00 + 5.320589727671893e+00 + 5.308107264570896e+00 + 5.295654006874094e+00 + 5.283229887334054e+00 + 5.270834837715376e+00 + 5.258468789944041e+00 + 5.246131676000384e+00 + 5.233823428164784e+00 + 5.221543979540164e+00 + 5.209293263422158e+00 + 5.197071212820756e+00 + 5.184877759775030e+00 + 5.172712837552656e+00 + 5.160576380473933e+00 + 5.148468322098453e+00 + 5.136388595958436e+00 + 5.124337135726472e+00 + 5.112313875048248e+00 + 5.100318748362747e+00 + 5.088351690727316e+00 + 5.076412636057685e+00 + 5.064501518839616e+00 + 5.052618274474592e+00 + 5.040762837425790e+00 + 5.028935142799786e+00 + 5.017135126690616e+00 + 5.005362723409764e+00 + 4.993617868159293e+00 + 4.981900498164465e+00 + 4.970210548621045e+00 + 4.958547954855285e+00 + 4.946912653797631e+00 + 4.935304581602165e+00 + 4.923723674430540e+00 + 4.912169869219803e+00 + 4.900643102722201e+00 + 4.889143311682699e+00 + 4.877670433140317e+00 + 4.866224404407401e+00 + 4.854805162838305e+00 + 4.843412645620055e+00 + 4.832046790470948e+00 + 4.820707535433044e+00 + 4.809394818449872e+00 + 4.798108577205163e+00 + 4.786848749644187e+00 + 4.775615274885523e+00 + 4.764408091170769e+00 + 4.753227136475494e+00 + 4.742072350593207e+00 + 4.730943672320340e+00 + 4.719841039761676e+00 + 4.708764392793848e+00 + 4.697713670947889e+00 + 4.686688813308958e+00 + 4.675689760077749e+00 + 4.664716450776882e+00 + 4.653768824355144e+00 + 4.642846821849820e+00 + 4.631950383864691e+00 + 4.621079449911801e+00 + 4.610233960271208e+00 + 4.599413855814052e+00 + 4.588619077726644e+00 + 4.577849566594633e+00 + 4.567105263324451e+00 + 4.556386109499332e+00 + 4.545692045920192e+00 + 4.535023013830533e+00 + 4.524378955558838e+00 + 4.513759812087895e+00 + 4.503165524982657e+00 + 4.492596037765430e+00 + 4.482051291649467e+00 + 4.471531227881555e+00 + 4.461035790191556e+00 + 4.450564920902143e+00 + 4.440118561957067e+00 + 4.429696656605228e+00 + 4.419299148008472e+00 + 4.408925979093191e+00 + 4.398577092681390e+00 + 4.388252432408600e+00 + 4.377951941955149e+00 + 4.367675563647617e+00 + 4.357423241911437e+00 + 4.347194921954801e+00 + 4.336990545878941e+00 + 4.326810057907454e+00 + 4.316653403787664e+00 + 4.306520526395858e+00 + 4.296411370095723e+00 + 4.286325880845187e+00 + 4.276264002847886e+00 + 4.266225680614548e+00 + 4.256210859410026e+00 + 4.246219484255977e+00 + 4.236251500111860e+00 + 4.226306852214246e+00 + 4.216385487075638e+00 + 4.206487350454588e+00 + 4.196612386873075e+00 + 4.186760542346591e+00 + 4.176931763412669e+00 + 4.167125996517556e+00 + 4.157343187931778e+00 + 4.147583283659849e+00 + 4.137846229598449e+00 + 4.128131973158434e+00 + 4.118440461620333e+00 + 4.108771640965568e+00 + 4.099125458381889e+00 + 4.089501861348100e+00 + 4.079900796648449e+00 + 4.070322211621146e+00 + 4.060766054068578e+00 + 4.051232271987449e+00 + 4.041720812903752e+00 + 4.032231624389123e+00 + 4.022764654839604e+00 + 4.013319852102482e+00 + 4.003897163974346e+00 + 3.994496539375360e+00 + 3.985117927005318e+00 + 3.975761275162846e+00 + 3.966426531955261e+00 + 3.957113646635731e+00 + 3.947822569087183e+00 + 3.938553247905866e+00 + 3.929305631685672e+00 + 3.920079669524097e+00 + 3.910875311427285e+00 + 3.901692507178291e+00 + 3.892531206204140e+00 + 3.883391358396833e+00 + 3.874272913657344e+00 + 3.865175821793835e+00 + 3.856100032879644e+00 + 3.847045497225832e+00 + 3.838012165320722e+00 + 3.828999987558789e+00 + 3.820008914413926e+00 + 3.811038896595444e+00 + 3.802089885254187e+00 + 3.793161831237620e+00 + 3.784254684890362e+00 + 3.775368398252875e+00 + 3.766502923100440e+00 + 3.757658209579520e+00 + 3.748834209295840e+00 + 3.740030874433959e+00 + 3.731248156753105e+00 + 3.722486008117639e+00 + 3.713744380387517e+00 + 3.705023225280349e+00 + 3.696322495070079e+00 + 3.687642142318910e+00 + 3.678982119432947e+00 + 3.670342378801804e+00 + 3.661722872867589e+00 + 3.653123554235752e+00 + 3.644544376023881e+00 + 3.635985291634798e+00 + 3.627446254192749e+00 + 3.618927216218316e+00 + 3.610428130335504e+00 + 3.601948951051534e+00 + 3.593489632231203e+00 + 3.585050126838500e+00 + 3.576630388153148e+00 + 3.568230370457688e+00 + 3.559850028500160e+00 + 3.551489315016799e+00 + 3.543148183918080e+00 + 3.534826590807976e+00 + 3.526524489935861e+00 + 3.518241835011243e+00 + 3.509978579991082e+00 + 3.501734680809670e+00 + 3.493510092697708e+00 + 3.485304769188242e+00 + 3.477118665289576e+00 + 3.468951736765370e+00 + 3.460803939385451e+00 + 3.452675227557384e+00 + 3.444565556219660e+00 + 3.436474882078371e+00 + 3.428403160505571e+00 + 3.420350346590145e+00 + 3.412316396304707e+00 + 3.404301265792477e+00 + 3.396304911176187e+00 + 3.388327288491305e+00 + 3.380368354160161e+00 + 3.372428064623584e+00 + 3.364506375833607e+00 + 3.356603244211646e+00 + 3.348718626640740e+00 + 3.340852480236101e+00 + 3.333004761693424e+00 + 3.325175427644580e+00 + 3.317364435527293e+00 + 3.309571742493616e+00 + 3.301797305408617e+00 + 3.294041081414062e+00 + 3.286303028194412e+00 + 3.278583103726798e+00 + 3.270881265443555e+00 + 3.263197471011956e+00 + 3.255531678390248e+00 + 3.247883845209004e+00 + 3.240253929642225e+00 + 3.232641890347850e+00 + 3.225047684908113e+00 + 3.217471271425511e+00 + 3.209912608923088e+00 + 3.202371655667555e+00 + 3.194848370181972e+00 + 3.187342711658790e+00 + 3.179854638881827e+00 + 3.172384110380890e+00 + 3.164931084707051e+00 + 3.157495521384956e+00 + 3.150077380058776e+00 + 3.142676619877814e+00 + 3.135293200073600e+00 + 3.127927079946843e+00 + 3.120578218905895e+00 + 3.113246577218404e+00 + 3.105932114937815e+00 + 3.098634790846833e+00 + 3.091354565058342e+00 + 3.084091398271724e+00 + 3.076845250485478e+00 + 3.069616081755534e+00 + 3.062403852244847e+00 + 3.055208522175611e+00 + 3.048030052549899e+00 + 3.040868404439169e+00 + 3.033723537524932e+00 + 3.026595412527113e+00 + 3.019483991059011e+00 + 3.012389234177664e+00 + 3.005311102428361e+00 + 2.998249556405217e+00 + 2.991204558170310e+00 + 2.984176069441633e+00 + 2.977164051262350e+00 + 2.970168464749357e+00 + 2.963189271462946e+00 + 2.956226433370632e+00 + 2.949279912203107e+00 + 2.942349669912605e+00 + 2.935435668735732e+00 + 2.928537870478263e+00 + 2.921656236941307e+00 + 2.914790730227295e+00 + 2.907941313056430e+00 + 2.901107948114753e+00 + 2.894290597705669e+00 + 2.887489224186201e+00 + 2.880703790004707e+00 + 2.873934257778331e+00 + 2.867180590721052e+00 + 2.860442752157053e+00 + 2.853720705060128e+00 + 2.847014412004529e+00 + 2.840323835735203e+00 + 2.833648939802342e+00 + 2.826989688360529e+00 + 2.820346045051714e+00 + 2.813717971838249e+00 + 2.807105432809830e+00 + 2.800508392739872e+00 + 2.793926814285955e+00 + 2.787360661385112e+00 + 2.780809898806732e+00 + 2.774274490318202e+00 + 2.767754399418414e+00 + 2.761249589980850e+00 + 2.754760027276096e+00 + 2.748285675987487e+00 + 2.741826499952791e+00 + 2.735382462817888e+00 + 2.728953529693038e+00 + 2.722539666591989e+00 + 2.716140837199994e+00 + 2.709757005928732e+00 + 2.703388138477217e+00 + 2.697034199719776e+00 + 2.690695154612969e+00 + 2.684370968516638e+00 + 2.678061606722120e+00 + 2.671767034388748e+00 + 2.665487216663756e+00 + 2.659222119420964e+00 + 2.652971708466898e+00 + 2.646735949170681e+00 + 2.640514807328682e+00 + 2.634308248813400e+00 + 2.628116239351709e+00 + 2.621938745026414e+00 + 2.615775731978081e+00 + 2.609627166192403e+00 + 2.603493014125890e+00 + 2.597373242133807e+00 + 2.591267815972944e+00 + 2.585176702619338e+00 + 2.579099869106871e+00 + 2.573037281022092e+00 + 2.566988905295047e+00 + 2.560954709471109e+00 + 2.554934660124372e+00 + 2.548928723658388e+00 + 2.542936866838776e+00 + 2.536959057454498e+00 + 2.530995262744329e+00 + 2.525045449466102e+00 + 2.519109584724339e+00 + 2.513187636248425e+00 + 2.507279571988880e+00 + 2.501385358975255e+00 + 2.495504964649074e+00 + 2.489638357011514e+00 + 2.483785503877440e+00 + 2.477946372993181e+00 + 2.472120932153270e+00 + 2.466309149445497e+00 + 2.460510993028623e+00 + 2.454726431004756e+00 + 2.448955431279121e+00 + 2.443197962222979e+00 + 2.437453992749473e+00 + 2.431723490873920e+00 + 2.426006424702946e+00 + 2.420302763016215e+00 + 2.414612474849150e+00 + 2.408935529060812e+00 + 2.403271894158963e+00 + 2.397621539164549e+00 + 2.391984432987164e+00 + 2.386360544006294e+00 + 2.380749841635097e+00 + 2.375152295549876e+00 + 2.369567874852914e+00 + 2.363996548806182e+00 + 2.358438286639424e+00 + 2.352893057314327e+00 + 2.347360830870365e+00 + 2.341841577523073e+00 + 2.336335266205249e+00 + 2.330841866367291e+00 + 2.325361348038680e+00 + 2.319893681430557e+00 + 2.314438836350213e+00 + 2.308996782525400e+00 + 2.303567490482044e+00 + 2.298150930506590e+00 + 2.292747072570897e+00 + 2.287355886755380e+00 + 2.281977343203661e+00 + 2.276611412298537e+00 + 2.271258065216148e+00 + 2.265917272602903e+00 + 2.260589004572198e+00 + 2.255273232290290e+00 + 2.249969926489583e+00 + 2.244679057245269e+00 + 2.239400595715412e+00 + 2.234134513404378e+00 + 2.228880781619142e+00 + 2.223639370658599e+00 + 2.218410251587366e+00 + 2.213193396784469e+00 + 2.207988776668006e+00 + 2.202796362022329e+00 + 2.197616125439223e+00 + 2.192448038696543e+00 + 2.187292072961057e+00 + 2.182148199232985e+00 + 2.177016389630072e+00 + 2.171896616273634e+00 + 2.166788850281173e+00 + 2.161693063906081e+00 + 2.156609229682959e+00 + 2.151537319229026e+00 + 2.146477304323076e+00 + 2.141429157241363e+00 + 2.136392850965788e+00 + 2.131368357474257e+00 + 2.126355648357996e+00 + 2.121354696293322e+00 + 2.116365474412895e+00 + 2.111387955644702e+00 + 2.106422111701483e+00 + 2.101467915161587e+00 + 2.096525339256323e+00 + 2.091594356269759e+00 + 2.086674939419586e+00 + 2.081767062556874e+00 + 2.076870697792070e+00 + 2.071985817585338e+00 + 2.067112395385072e+00 + 2.062250405333861e+00 + 2.057399820685575e+00 + 2.052560613690088e+00 + 2.047732757766644e+00 + 2.042916226752948e+00 + 2.038110994473384e+00 + 2.033317034456518e+00 + 2.028534320143143e+00 + 2.023762825026766e+00 + 2.019002522786289e+00 + 2.014253387371010e+00 + 2.009515392980107e+00 + 2.004788513366984e+00 + 2.000072722331970e+00 + 1.995367994084281e+00 + 1.990674302528751e+00 + 1.985991621875054e+00 + 1.981319927135009e+00 + 1.976659192144684e+00 + 1.972009390577169e+00 + 1.967370497271926e+00 + 1.962742487042732e+00 + 1.958125334423246e+00 + 1.953519013586483e+00 + 1.948923499307053e+00 + 1.944338766657414e+00 + 1.939764790288013e+00 + 1.935201544608222e+00 + 1.930649004305472e+00 + 1.926107145248571e+00 + 1.921575942429786e+00 + 1.917055370205972e+00 + 1.912545403920843e+00 + 1.908046018818900e+00 + 1.903557190023903e+00 + 1.899078893306255e+00 + 1.894611103753838e+00 + 1.890153795996532e+00 + 1.885706946418488e+00 + 1.881270530851602e+00 + 1.876844524133795e+00 + 1.872428902057808e+00 + 1.868023640555410e+00 + 1.863628715350075e+00 + 1.859244102235784e+00 + 1.854869776995271e+00 + 1.850505715382929e+00 + 1.846151893336109e+00 + 1.841808287113597e+00 + 1.837474873250078e+00 + 1.833151627500553e+00 + 1.828838525627810e+00 + 1.824535544058799e+00 + 1.820242659570220e+00 + 1.815959848693184e+00 + 1.811687087278560e+00 + 1.807424351697017e+00 + 1.803171618832717e+00 + 1.798928865872756e+00 + 1.794696068965575e+00 + 1.790473204047284e+00 + 1.786260248130819e+00 + 1.782057178544553e+00 + 1.777863972462110e+00 + 1.773680606381003e+00 + 1.769507057021776e+00 + 1.765343301422396e+00 + 1.761189316819223e+00 + 1.757045080431908e+00 + 1.752910569457795e+00 + 1.748785761158555e+00 + 1.744670632638435e+00 + 1.740565161064786e+00 + 1.736469324420783e+00 + 1.732383100261040e+00 + 1.728306465595185e+00 + 1.724239397824929e+00 + 1.720181874717039e+00 + 1.716133874165168e+00 + 1.712095373335323e+00 + 1.708066350172305e+00 + 1.704046783495335e+00 + 1.700036650108550e+00 + 1.696035927584721e+00 + 1.692044595228792e+00 + 1.688062630443701e+00 + 1.684090010658294e+00 + 1.680126714513943e+00 + 1.676172720475745e+00 + 1.672228006742128e+00 + 1.668292551293985e+00 + 1.664366332353613e+00 + 1.660449328407859e+00 + 1.656541518177628e+00 + 1.652642880144113e+00 + 1.648753392536404e+00 + 1.644873033459887e+00 + 1.641001782122826e+00 + 1.637139617814172e+00 + 1.633286518510287e+00 + 1.629442462986198e+00 + 1.625607430332010e+00 + 1.621781398816242e+00 + 1.617964347766720e+00 + 1.614156256896447e+00 + 1.610357104501046e+00 + 1.606566869528149e+00 + 1.602785531410984e+00 + 1.599013068753329e+00 + 1.595249460964023e+00 + 1.591494688099418e+00 + 1.587748729316499e+00 + 1.584011563661260e+00 + 1.580283170366302e+00 + 1.576563528988570e+00 + 1.572852618951484e+00 + 1.569150419635379e+00 + 1.565456911345500e+00 + 1.561772073862832e+00 + 1.558095886092752e+00 + 1.554428327545355e+00 + 1.550769378486889e+00 + 1.547119019605569e+00 + 1.543477229774924e+00 + 1.539843988467248e+00 + 1.536219276909035e+00 + 1.532603074921508e+00 + 1.528995362108325e+00 + 1.525396118748853e+00 + 1.521805324624735e+00 + 1.518222960029189e+00 + 1.514649006474386e+00 + 1.511083443428444e+00 + 1.507526250258141e+00 + 1.503977408416516e+00 + 1.500436898413773e+00 + 1.496904700394939e+00 + 1.493380795245864e+00 + 1.489865163193006e+00 + 1.486357784560608e+00 + 1.482858641108495e+00 + 1.479367713055452e+00 + 1.475884980161266e+00 + 1.472410424507970e+00 + 1.468944026943859e+00 + 1.465485767394345e+00 + 1.462035627142284e+00 + 1.458593587684006e+00 + 1.455159630175685e+00 + 1.451733734815932e+00 + 1.448315882934573e+00 + 1.444906056735074e+00 + 1.441504236540235e+00 + 1.438110403156542e+00 + 1.434724538391589e+00 + 1.431346623689521e+00 + 1.427976640530080e+00 + 1.424614570482120e+00 + 1.421260394583763e+00 + 1.417914094214416e+00 + 1.414575651360096e+00 + 1.411245047472556e+00 + 1.407922264020345e+00 + 1.404607282835409e+00 + 1.401300085863839e+00 + 1.398000654669480e+00 + 1.394708970355802e+00 + 1.391425015768138e+00 + 1.388148773421020e+00 + 1.384880223867722e+00 + 1.381619349200565e+00 + 1.378366132070768e+00 + 1.375120554406545e+00 + 1.371882598139520e+00 + 1.368652245409923e+00 + 1.365429478679455e+00 + 1.362214280063096e+00 + 1.359006631544336e+00 + 1.355806515436745e+00 + 1.352613914349998e+00 + 1.349428810943258e+00 + 1.346251187518860e+00 + 1.343081026346772e+00 + 1.339918309785753e+00 + 1.336763020411036e+00 + 1.333615141050152e+00 + 1.330474654669161e+00 + 1.327341544046787e+00 + 1.324215791384803e+00 + 1.321097378844990e+00 + 1.317986290481943e+00 + 1.314882509034005e+00 + 1.311786015892630e+00 + 1.308696795174431e+00 + 1.305614830505543e+00 + 1.302540104058677e+00 + 1.299472598550161e+00 + 1.296412297281467e+00 + 1.293359183920592e+00 + 1.290313241355424e+00 + 1.287274452437336e+00 + 1.284242800425524e+00 + 1.281218268758570e+00 + 1.278200840971845e+00 + 1.275190500607243e+00 + 1.272187230813499e+00 + 1.269191014801793e+00 + 1.266201836184906e+00 + 1.263219678244913e+00 + 1.260244524601725e+00 + 1.257276359774731e+00 + 1.254315166659556e+00 + 1.251360928048363e+00 + 1.248413628680403e+00 + 1.245473252809453e+00 + 1.242539783866816e+00 + 1.239613204552696e+00 + 1.236693499248504e+00 + 1.233780652886690e+00 + 1.230874648458874e+00 + 1.227975469917747e+00 + 1.225083101914005e+00 + 1.222197528080320e+00 + 1.219318732110022e+00 + 1.216446698153004e+00 + 1.213581411119631e+00 + 1.210722855169846e+00 + 1.207871013783067e+00 + 1.205025871252235e+00 + 1.202187412198626e+00 + 1.199355621285526e+00 + 1.196530482820713e+00 + 1.193711981112556e+00 + 1.190900100540550e+00 + 1.188094825240966e+00 + 1.185296139829988e+00 + 1.182504029475636e+00 + 1.179718478336080e+00 + 1.176939470878376e+00 + 1.174166992368249e+00 + 1.171401026812090e+00 + 1.168641558834780e+00 + 1.165888574598542e+00 + 1.163142057955574e+00 + 1.160401992993886e+00 + 1.157668365957760e+00 + 1.154941161055026e+00 + 1.152220362585152e+00 + 1.149505957086653e+00 + 1.146797929075238e+00 + 1.144096262593592e+00 + 1.141400943461258e+00 + 1.138711957183691e+00 + 1.136029288721929e+00 + 1.133352922646698e+00 + 1.130682844729473e+00 + 1.128019040871752e+00 + 1.125361495026299e+00 + 1.122710192813904e+00 + 1.120065120718956e+00 + 1.117426263156838e+00 + 1.114793605478939e+00 + 1.112167133798269e+00 + 1.109546832911627e+00 + 1.106932688501257e+00 + 1.104324686965964e+00 + 1.101722813149718e+00 + 1.099127052563592e+00 + 1.096537391606932e+00 + 1.093953815681381e+00 + 1.091376310184498e+00 + 1.088804860939953e+00 + 1.086239454210304e+00 + 1.083680075729654e+00 + 1.081126710640132e+00 + 1.078579345517792e+00 + 1.076037966489376e+00 + 1.073502558540405e+00 + 1.070973108232868e+00 + 1.068449602380304e+00 + 1.065932027008114e+00 + 1.063420367175204e+00 + 1.060914608734753e+00 + 1.058414739347230e+00 + 1.055920744292059e+00 + 1.053432609053344e+00 + 1.050950321750202e+00 + 1.048473868029229e+00 + 1.046003233045439e+00 + 1.043538404185668e+00 + 1.041079368203120e+00 + 1.038626111099421e+00 + 1.036178618557632e+00 + 1.033736877638818e+00 + 1.031300875738098e+00 + 1.028870598541307e+00 + 1.026446032279889e+00 + 1.024027163804816e+00 + 1.021613979927458e+00 + 1.019206467749757e+00 + 1.016804614201984e+00 + 1.014408404816817e+00 + 1.012017826403038e+00 + 1.009632866898133e+00 + 1.007253512894913e+00 + 1.004879750675442e+00 + 1.002511566831996e+00 + 1.000148949144661e+00 + 9.977918847145494e-01 + 9.954403597206510e-01 + 9.930943614528360e-01 + 9.907538771638876e-01 + 9.884188936740620e-01 + 9.860893982148410e-01 + 9.837653780132122e-01 + 9.814468200970017e-01 + 9.791337116433633e-01 + 9.768260399168340e-01 + 9.745237922184445e-01 + 9.722269558574113e-01 + 9.699355181124353e-01 + 9.676494662336389e-01 + 9.653687876978898e-01 + 9.630934699744002e-01 + 9.608235003289306e-01 + 9.585588662885656e-01 + 9.562995554410040e-01 + 9.540455551859868e-01 + 9.517968530931009e-01 + 9.495534368089285e-01 + 9.473152938858177e-01 + 9.450824119343849e-01 + 9.428547786515334e-01 + 9.406323818265262e-01 + 9.384152091378831e-01 + 9.362032482272097e-01 + 9.339964869112888e-01 + 9.317949130473703e-01 + 9.295985145023118e-01 + 9.274072791539573e-01 + 9.252211948367504e-01 + 9.230402494034374e-01 + 9.208644309329761e-01 + 9.186937274260252e-01 + 9.165281267878318e-01 + 9.143676170947915e-01 + 9.122121864230248e-01 + 9.100618228160294e-01 + 9.079165144228375e-01 + 9.057762494101416e-01 + 9.036410159434681e-01 + 9.015108022852656e-01 + 8.993855966397851e-01 + 8.972653871281971e-01 + 8.951501621417270e-01 + 8.930399100640233e-01 + 8.909346191274636e-01 + 8.888342777366450e-01 + 8.867388743114113e-01 + 8.846483971822027e-01 + 8.825628348501290e-01 + 8.804821758633001e-01 + 8.784064086961259e-01 + 8.763355218399448e-01 + 8.742695038377348e-01 + 8.722083433110044e-01 + 8.701520288632569e-01 + 8.681005490981059e-01 + 8.660538926659707e-01 + 8.640120483003465e-01 + 8.619750047630993e-01 + 8.599427507590320e-01 + 8.579152750196485e-01 + 8.558925663402844e-01 + 8.538746136199826e-01 + 8.518614056598554e-01 + 8.498529312415619e-01 + 8.478491793952468e-01 + 8.458501390477595e-01 + 8.438557990450950e-01 + 8.418661484572341e-01 + 8.398811762963594e-01 + 8.379008715007146e-01 + 8.359252231704962e-01 + 8.339542204095658e-01 + 8.319878522912720e-01 + 8.300261079597043e-01 + 8.280689765769632e-01 + 8.261164473121154e-01 + 8.241685093974929e-01 + 8.222251520716921e-01 + 8.202863645582569e-01 + 8.183521361157176e-01 + 8.164224560764958e-01 + 8.144973138478017e-01 + 8.125766987264839e-01 + 8.106606000443977e-01 + 8.087490072689457e-01 + 8.068419098143643e-01 + 8.049392971238847e-01 + 8.030411587461223e-01 + 8.011474841608780e-01 + 7.992582628576694e-01 + 7.973734844327619e-01 + 7.954931384582111e-01 + 7.936172145055983e-01 + 7.917457022017643e-01 + 7.898785912282000e-01 + 7.880158712799969e-01 + 7.861575320154112e-01 + 7.843035631939634e-01 + 7.824539546080472e-01 + 7.806086959262468e-01 + 7.787677769423338e-01 + 7.769311875560446e-01 + 7.750989176225404e-01 + 7.732709569908990e-01 + 7.714472955211897e-01 + 7.696279231052234e-01 + 7.678128297211314e-01 + 7.660020053954494e-01 + 7.641954400346342e-01 + 7.623931236302374e-01 + 7.605950462809293e-01 + 7.588011979868697e-01 + 7.570115688113509e-01 + 7.552261489288551e-01 + 7.534449284973839e-01 + 7.516678976340316e-01 + 7.498950464317325e-01 + 7.481263651057625e-01 + 7.463618439154999e-01 + 7.446014731170009e-01 + 7.428452429690515e-01 + 7.410931437272748e-01 + 7.393451656574506e-01 + 7.376012991597445e-01 + 7.358615346418724e-01 + 7.341258624174279e-01 + 7.323942728636854e-01 + 7.306667564033948e-01 + 7.289433034811010e-01 + 7.272239046205010e-01 + 7.255085503342084e-01 + 7.237972310231134e-01 + 7.220899372662432e-01 + 7.203866596915919e-01 + 7.186873887451811e-01 + 7.169921150530395e-01 + 7.153008293485266e-01 + 7.136135222426403e-01 + 7.119301843519804e-01 + 7.102508063464710e-01 + 7.085753789925818e-01 + 7.069038930034782e-01 + 7.052363390742027e-01 + 7.035727080638011e-01 + 7.019129907750439e-01 + 7.002571779481277e-01 + 6.986052604437083e-01 + 6.969572291357313e-01 + 6.953130748988353e-01 + 6.936727887020229e-01 + 6.920363614522840e-01 + 6.904037839913317e-01 + 6.887750473773369e-01 + 6.871501426160253e-01 + 6.855290605871678e-01 + 6.839117924040222e-01 + 6.822983292013320e-01 + 6.806886620123715e-01 + 6.790827818618205e-01 + 6.774806798407976e-01 + 6.758823471448717e-01 + 6.742877749381793e-01 + 6.726969543916550e-01 + 6.711098767181217e-01 + 6.695265330883416e-01 + 6.679469147191758e-01 + 6.663710129607012e-01 + 6.647988190816884e-01 + 6.632303243195694e-01 + 6.616655199754741e-01 + 6.601043974442724e-01 + 6.585469481315596e-01 + 6.569931633409668e-01 + 6.554430344698831e-01 + 6.538965529680326e-01 + 6.523537102216029e-01 + 6.508144977390269e-01 + 6.492789070902356e-01 + 6.477469297088367e-01 + 6.462185570471877e-01 + 6.446937806333431e-01 + 6.431725921186934e-01 + 6.416549831028872e-01 + 6.401409451291091e-01 + 6.386304698205402e-01 + 6.371235488250266e-01 + 6.356201737964903e-01 + 6.341203364004929e-01 + 6.326240283504814e-01 + 6.311312414023209e-01 + 6.296419672600960e-01 + 6.281561976359686e-01 + 6.266739242956670e-01 + 6.251951391194286e-01 + 6.237198339322255e-01 + 6.222480004492102e-01 + 6.207796305731890e-01 + 6.193147162378443e-01 + 6.178532493027741e-01 + 6.163952216645050e-01 + 6.149406252489860e-01 + 6.134894519984210e-01 + 6.120416938491114e-01 + 6.105973427932988e-01 + 6.091563909278429e-01 + 6.077188302116784e-01 + 6.062846526061169e-01 + 6.048538502614210e-01 + 6.034264152733694e-01 + 6.020023397068369e-01 + 6.005816156757759e-01 + 5.991642353027361e-01 + 5.977501907311656e-01 + 5.963394741611191e-01 + 5.949320777981851e-01 + 5.935279938331314e-01 + 5.921272144271874e-01 + 5.907297318514260e-01 + 5.893355384452119e-01 + 5.879446264415406e-01 + 5.865569881004723e-01 + 5.851726157460215e-01 + 5.837915017610071e-01 + 5.824136384878618e-01 + 5.810390182425506e-01 + 5.796676334763571e-01 + 5.782994765837256e-01 + 5.769345398883866e-01 + 5.755728159164172e-01 + 5.742142971757567e-01 + 5.728589760824728e-01 + 5.715068451452269e-01 + 5.701578968814059e-01 + 5.688121237820786e-01 + 5.674695184134964e-01 + 5.661300733449661e-01 + 5.647937811172017e-01 + 5.634606343850478e-01 + 5.621306258016221e-01 + 5.608037479323033e-01 + 5.594799934047830e-01 + 5.581593548937616e-01 + 5.568418251014721e-01 + 5.555273967809645e-01 + 5.542160626584934e-01 + 5.529078153599613e-01 + 5.516026476869607e-01 + 5.503005524879265e-01 + 5.490015224489507e-01 + 5.477055503706971e-01 + 5.464126291394721e-01 + 5.451227516109934e-01 + 5.438359105997491e-01 + 5.425520989229732e-01 + 5.412713094911021e-01 + 5.399935352390902e-01 + 5.387187691034094e-01 + 5.374470040087604e-01 + 5.361782329113639e-01 + 5.349124487848638e-01 + 5.336496445514358e-01 + 5.323898132502169e-01 + 5.311329480044003e-01 + 5.298790417206248e-01 + 5.286280874266170e-01 + 5.273800783238198e-01 + 5.261350074387794e-01 + 5.248928678300107e-01 + 5.236536526638225e-01 + 5.224173550711992e-01 + 5.211839681868924e-01 + 5.199534851768893e-01 + 5.187258992380968e-01 + 5.175012035574781e-01 + 5.162793913049719e-01 + 5.150604557657682e-01 + 5.138443902158373e-01 + 5.126311878387027e-01 + 5.114208419243966e-01 + 5.102133457996210e-01 + 5.090086927559088e-01 + 5.078068761246483e-01 + 5.066078892445277e-01 + 5.054117254264059e-01 + 5.042183780707232e-01 + 5.030278406156905e-01 + 5.018401064512819e-01 + 5.006551689399448e-01 + 4.994730214827681e-01 + 4.982936576173500e-01 + 4.971170708196209e-01 + 4.959432545161117e-01 + 4.947722021784954e-01 + 4.936039073158257e-01 + 4.924383634713059e-01 + 4.912755642215030e-01 + 4.901155031029966e-01 + 4.889581736357913e-01 + 4.878035694426762e-01 + 4.866516841617155e-01 + 4.855025114095978e-01 + 4.843560447562852e-01 + 4.832122778219742e-01 + 4.820712043014287e-01 + 4.809328179063641e-01 + 4.797971123302187e-01 + 4.786640812406847e-01 + 4.775337183184862e-01 + 4.764060173050261e-01 + 4.752809720122764e-01 + 4.741585762111217e-01 + 4.730388236459319e-01 + 4.719217080626099e-01 + 4.708072233097221e-01 + 4.696953632391141e-01 + 4.685861216425942e-01 + 4.674794923970907e-01 + 4.663754693817960e-01 + 4.652740464091041e-01 + 4.641752174102053e-01 + 4.630789763262008e-01 + 4.619853169869301e-01 + 4.608942333544824e-01 + 4.598057194461572e-01 + 4.587197692038988e-01 + 4.576363766028796e-01 + 4.565555356433393e-01 + 4.554772403132010e-01 + 4.544014845983438e-01 + 4.533282625263808e-01 + 4.522575682421708e-01 + 4.511893957834002e-01 + 4.501237391381080e-01 + 4.490605924783677e-01 + 4.479999499003729e-01 + 4.469418054464263e-01 + 4.458861533467765e-01 + 4.448329877503518e-01 + 4.437823027182840e-01 + 4.427340924804984e-01 + 4.416883512661691e-01 + 4.406450732493647e-01 + 4.396042525949710e-01 + 4.385658835318161e-01 + 4.375299603591805e-01 + 4.364964773180230e-01 + 4.354654286529535e-01 + 4.344368086449737e-01 + 4.334106115882546e-01 + 4.323868317973252e-01 + 4.313654636098987e-01 + 4.303465013528135e-01 + 4.293299393608014e-01 + 4.283157719943348e-01 + 4.273039936389254e-01 + 4.262945986862648e-01 + 4.252875815207442e-01 + 4.242829365388910e-01 + 4.232806581737543e-01 + 4.222807409163533e-01 + 4.212831792180283e-01 + 4.202879675160039e-01 + 4.192951002821390e-01 + 4.183045720190468e-01 + 4.173163772308877e-01 + 4.163305103895081e-01 + 4.153469660738844e-01 + 4.143657388899517e-01 + 4.133868232899575e-01 + 4.124102138463511e-01 + 4.114359052122226e-01 + 4.104638919136763e-01 + 4.094941685453110e-01 + 4.085267297797091e-01 + 4.075615702608746e-01 + 4.065986846247451e-01 + 4.056380675149961e-01 + 4.046797136100241e-01 + 4.037236175791848e-01 + 4.027697740867438e-01 + 4.018181778668817e-01 + 4.008688236537185e-01 + 3.999217061664900e-01 + 3.989768201804763e-01 + 3.980341604347806e-01 + 3.970937216243767e-01 + 3.961554986257766e-01 + 3.952194862561716e-01 + 3.942856791749246e-01 + 3.933540722797152e-01 + 3.924246604937682e-01 + 3.914974386057962e-01 + 3.905724013991230e-01 + 3.896495437210211e-01 + 3.887288605266558e-01 + 3.878103467384126e-01 + 3.868939972364765e-01 + 3.859798068708922e-01 + 3.850677705778728e-01 + 3.841578833358520e-01 + 3.832501400994028e-01 + 3.823445358203205e-01 + 3.814410654593080e-01 + 3.805397240004402e-01 + 3.796405064500310e-01 + 3.787434078281850e-01 + 3.778484231550217e-01 + 3.769555474293507e-01 + 3.760647756653435e-01 + 3.751761029803938e-01 + 3.742895244689736e-01 + 3.734050351897463e-01 + 3.725226302131253e-01 + 3.716423046174657e-01 + 3.707640535037849e-01 + 3.698878720450124e-01 + 3.690137553825144e-01 + 3.681416986254492e-01 + 3.672716969834960e-01 + 3.664037456169829e-01 + 3.655378396196581e-01 + 3.646739742353085e-01 + 3.638121447254376e-01 + 3.629523462980791e-01 + 3.620945741078652e-01 + 3.612388233782960e-01 + 3.603850894480597e-01 + 3.595333675652969e-01 + 3.586836529581271e-01 + 3.578359408972814e-01 + 3.569902267099870e-01 + 3.561465057284826e-01 + 3.553047732480240e-01 + 3.544650245489661e-01 + 3.536272549462773e-01 + 3.527914598373741e-01 + 3.519576346281267e-01 + 3.511257746893044e-01 + 3.502958753213151e-01 + 3.494679319027064e-01 + 3.486419398734283e-01 + 3.478178946841421e-01 + 3.469957917542031e-01 + 3.461756264906874e-01 + 3.453573943334770e-01 + 3.445410907466465e-01 + 3.437267112053919e-01 + 3.429142511753236e-01 + 3.421037061357636e-01 + 3.412950715914754e-01 + 3.404883430871680e-01 + 3.396835161220511e-01 + 3.388805861778083e-01 + 3.380795488742585e-01 + 3.372803997559251e-01 + 3.364831342820857e-01 + 3.356877480644493e-01 + 3.348942367473924e-01 + 3.341025959445759e-01 + 3.333128211902062e-01 + 3.325249080644813e-01 + 3.317388522349806e-01 + 3.309546493345364e-01 + 3.301722950123494e-01 + 3.293917849546400e-01 + 3.286131147929292e-01 + 3.278362801760134e-01 + 3.270612768173198e-01 + 3.262881004205997e-01 + 3.255167466776044e-01 + 3.247472112772871e-01 + 3.239794899591130e-01 + 3.232135784952971e-01 + 3.224494726613195e-01 + 3.216871681318617e-01 + 3.209266606147330e-01 + 3.201679460077643e-01 + 3.194110200806869e-01 + 3.186558785671545e-01 + 3.179025173467112e-01 + 3.171509322207308e-01 + 3.164011189537259e-01 + 3.156530734030461e-01 + 3.149067914068442e-01 + 3.141622688005587e-01 + 3.134195014964591e-01 + 3.126784853846941e-01 + 3.119392163234083e-01 + 3.112016901727622e-01 + 3.104659028247113e-01 + 3.097318502149898e-01 + 3.089995283319454e-01 + 3.082689330721005e-01 + 3.075400602663161e-01 + 3.068129059444455e-01 + 3.060874661234649e-01 + 3.053637367362504e-01 + 3.046417137079979e-01 + 3.039213930418579e-01 + 3.032027708160949e-01 + 3.024858429572295e-01 + 3.017706054435225e-01 + 3.010570543910775e-01 + 3.003451858060657e-01 + 2.996349956970866e-01 + 2.989264801519126e-01 + 2.982196352437723e-01 + 2.975144570351090e-01 + 2.968109415899733e-01 + 2.961090850010212e-01 + 2.954088833712375e-01 + 2.947103327960572e-01 + 2.940134293733013e-01 + 2.933181692489545e-01 + 2.926245486550200e-01 + 2.919325636534309e-01 + 2.912422103009782e-01 + 2.905534849067459e-01 + 2.898663836341845e-01 + 2.891809025716850e-01 + 2.884970379499296e-01 + 2.878147859946116e-01 + 2.871341429080666e-01 + 2.864551048929091e-01 + 2.857776681836698e-01 + 2.851018290276999e-01 + 2.844275836247271e-01 + 2.837549281975342e-01 + 2.830838590248334e-01 + 2.824143724756855e-01 + 2.817464648036653e-01 + 2.810801321714598e-01 + 2.804153709678348e-01 + 2.797521775256636e-01 + 2.790905480675208e-01 + 2.784304789557904e-01 + 2.777719665515425e-01 + 2.771150071618110e-01 + 2.764595971293084e-01 + 2.758057328280932e-01 + 2.751534106502780e-01 + 2.745026269461392e-01 + 2.738533780697315e-01 + 2.732056604090851e-01 + 2.725594703611444e-01 + 2.719148043516682e-01 + 2.712716588414341e-01 + 2.706300302048149e-01 + 2.699899148252890e-01 + 2.693513091897057e-01 + 2.687142097803046e-01 + 2.680786130525787e-01 + 2.674445154290628e-01 + 2.668119133864937e-01 + 2.661808034370396e-01 + 2.655511820876730e-01 + 2.649230457933240e-01 + 2.642963910212357e-01 + 2.636712143601993e-01 + 2.630475123173707e-01 + 2.624252813696634e-01 + 2.618045181320832e-01 + 2.611852191534089e-01 + 2.605673809346502e-01 + 2.599510000768786e-01 + 2.593360731482656e-01 + 2.587225966857610e-01 + 2.581105673020023e-01 + 2.574999816218594e-01 + 2.568908362541323e-01 + 2.562831277681717e-01 + 2.556768527608984e-01 + 2.550720078808991e-01 + 2.544685898158210e-01 + 2.538665952029344e-01 + 2.532660206235198e-01 + 2.526668627769018e-01 + 2.520691183671673e-01 + 2.514727840477828e-01 + 2.508778564832650e-01 + 2.502843323450471e-01 + 2.496922083184503e-01 + 2.491014811741685e-01 + 2.485121476502302e-01 + 2.479242043768022e-01 + 2.473376480750936e-01 + 2.467524755330193e-01 + 2.461686835577825e-01 + 2.455862688342147e-01 + 2.450052280577099e-01 + 2.444255580815592e-01 + 2.438472556710649e-01 + 2.432703175621061e-01 + 2.426947405763887e-01 + 2.421205215374063e-01 + 2.415476572469543e-01 + 2.409761444715131e-01 + 2.404059800179439e-01 + 2.398371607406130e-01 + 2.392696835287547e-01 + 2.387035451998669e-01 + 2.381387425460481e-01 + 2.375752724876774e-01 + 2.370131319015487e-01 + 2.364523176042576e-01 + 2.358928264341899e-01 + 2.353346553264918e-01 + 2.347778012643444e-01 + 2.342222610470114e-01 + 2.336680315481888e-01 + 2.331151097630285e-01 + 2.325634926002070e-01 + 2.320131769932555e-01 + 2.314641599195968e-01 + 2.309164382391606e-01 + 2.303700088852327e-01 + 2.298248689205450e-01 + 2.292810152383314e-01 + 2.287384447851956e-01 + 2.281971546639490e-01 + 2.276571417710518e-01 + 2.271184030444375e-01 + 2.265809356255705e-01 + 2.260447364485637e-01 + 2.255098024678978e-01 + 2.249761308577043e-01 + 2.244437185775247e-01 + 2.239125625576918e-01 + 2.233826599324974e-01 + 2.228540078061592e-01 + 2.223266032159731e-01 + 2.218004431318401e-01 + 2.212755246546400e-01 + 2.207518449320089e-01 + 2.202294009962271e-01 + 2.197081899542086e-01 + 2.191882089472320e-01 + 2.186694550184439e-01 + 2.181519252528444e-01 + 2.176356167922184e-01 + 2.171205268020538e-01 + 2.166066524055817e-01 + 2.160939907132310e-01 + 2.155825389406823e-01 + 2.150722942170351e-01 + 2.145632535999474e-01 + 2.140554143128364e-01 + 2.135487735713488e-01 + 2.130433285376680e-01 + 2.125390763961598e-01 + 2.120360143225986e-01 + 2.115341394866721e-01 + 2.110334491301104e-01 + 2.105339404911263e-01 + 2.100356107692428e-01 + 2.095384571593845e-01 + 2.090424768875718e-01 + 2.085476672286868e-01 + 2.080540254649787e-01 + 2.075615488420417e-01 + 2.070702345483775e-01 + 2.065800798220710e-01 + 2.060910819584345e-01 + 2.056032383022174e-01 + 2.051165461242101e-01 + 2.046310026800104e-01 + 2.041466052775261e-01 + 2.036633511978056e-01 + 2.031812377402102e-01 + 2.027002622847228e-01 + 2.022204221329609e-01 + 2.017417145657832e-01 + 2.012641369577989e-01 + 2.007876866366623e-01 + 2.003123609141739e-01 + 1.998381571847571e-01 + 1.993650728223044e-01 + 1.988931051658790e-01 + 1.984222515391579e-01 + 1.979525093566432e-01 + 1.974838760798574e-01 + 1.970163490394448e-01 + 1.965499255924087e-01 + 1.960846031634822e-01 + 1.956203792216227e-01 + 1.951572511456189e-01 + 1.946952162469976e-01 + 1.942342720345011e-01 + 1.937744160087473e-01 + 1.933156455855021e-01 + 1.928579581617409e-01 + 1.924013511601302e-01 + 1.919458220512063e-01 + 1.914913683490730e-01 + 1.910379875218400e-01 + 1.905856769690048e-01 + 1.901344342343178e-01 + 1.896842568245793e-01 + 1.892351421122624e-01 + 1.887870876905098e-01 + 1.883400911382459e-01 + 1.878941498265747e-01 + 1.874492612709913e-01 + 1.870054230608876e-01 + 1.865626327533365e-01 + 1.861208878413260e-01 + 1.856801858136446e-01 + 1.852405242290795e-01 + 1.848019006561455e-01 + 1.843643126785636e-01 + 1.839277579090688e-01 + 1.834922338318696e-01 + 1.830577379260484e-01 + 1.826242679175190e-01 + 1.821918214082343e-01 + 1.817603959062191e-01 + 1.813299890419420e-01 + 1.809005984096844e-01 + 1.804722215715290e-01 + 1.800448561676805e-01 + 1.796184998471616e-01 + 1.791931502428031e-01 + 1.787688049585256e-01 + 1.783454616010165e-01 + 1.779231178061076e-01 + 1.775017712916434e-01 + 1.770814197185338e-01 + 1.766620606643876e-01 + 1.762436917707559e-01 + 1.758263107475443e-01 + 1.754099153420786e-01 + 1.749945031691721e-01 + 1.745800718793870e-01 + 1.741666192327871e-01 + 1.737541428912765e-01 + 1.733426405128906e-01 + 1.729321098263452e-01 + 1.725225486037993e-01 + 1.721139545737653e-01 + 1.717063253659770e-01 + 1.712996586978482e-01 + 1.708939523524782e-01 + 1.704892041326627e-01 + 1.700854117308264e-01 + 1.696825728315613e-01 + 1.692806852413719e-01 + 1.688797467224855e-01 + 1.684797550119726e-01 + 1.680807078836749e-01 + 1.676826031516292e-01 + 1.672854386236076e-01 + 1.668892120257625e-01 + 1.664939211364053e-01 + 1.660995637803862e-01 + 1.657061377653481e-01 + 1.653136408872399e-01 + 1.649220709518862e-01 + 1.645314258210089e-01 + 1.641417032838678e-01 + 1.637529010922642e-01 + 1.633650171697226e-01 + 1.629780493848234e-01 + 1.625919955117979e-01 + 1.622068533722165e-01 + 1.618226208359533e-01 + 1.614392958070308e-01 + 1.610568761629498e-01 + 1.606753597398519e-01 + 1.602947443525945e-01 + 1.599150279328092e-01 + 1.595362083976419e-01 + 1.591582835876941e-01 + 1.587812513806259e-01 + 1.584051096895935e-01 + 1.580298564486488e-01 + 1.576554895336735e-01 + 1.572820068494865e-01 + 1.569094063844064e-01 + 1.565376859935812e-01 + 1.561668435389086e-01 + 1.557968770322644e-01 + 1.554277844430587e-01 + 1.550595637013555e-01 + 1.546922127252644e-01 + 1.543257294352004e-01 + 1.539601117962810e-01 + 1.535953578647676e-01 + 1.532314655336160e-01 + 1.528684326732572e-01 + 1.525062574192351e-01 + 1.521449377506904e-01 + 1.517844715391133e-01 + 1.514248568043021e-01 + 1.510660915767141e-01 + 1.507081738546517e-01 + 1.503511015850067e-01 + 1.499948728018673e-01 + 1.496394855976185e-01 + 1.492849379312514e-01 + 1.489312277844460e-01 + 1.485783532079666e-01 + 1.482263122946834e-01 + 1.478751030581660e-01 + 1.475247234388987e-01 + 1.471751715323068e-01 + 1.468264454469171e-01 + 1.464785432366154e-01 + 1.461314629165984e-01 + 1.457852025452889e-01 + 1.454397602433564e-01 + 1.450951340257908e-01 + 1.447513219420110e-01 + 1.444083221508569e-01 + 1.440661327109938e-01 + 1.437247516822454e-01 + 1.433841772072484e-01 + 1.430444073901374e-01 + 1.427054403077353e-01 + 1.423672740371242e-01 + 1.420299067307786e-01 + 1.416933365389871e-01 + 1.413575615237460e-01 + 1.410225798197031e-01 + 1.406883895901710e-01 + 1.403549889435149e-01 + 1.400223760032770e-01 + 1.396905489310608e-01 + 1.393595059398338e-01 + 1.390292451224472e-01 + 1.386997645496112e-01 + 1.383710625136722e-01 + 1.380431371824567e-01 + 1.377159866326167e-01 + 1.373896091055998e-01 + 1.370640027752214e-01 + 1.367391657592925e-01 + 1.364150963290927e-01 + 1.360917926783734e-01 + 1.357692529162330e-01 + 1.354474752994454e-01 + 1.351264580487222e-01 + 1.348061993122180e-01 + 1.344866973181728e-01 + 1.341679503229942e-01 + 1.338499565682958e-01 + 1.335327142013654e-01 + 1.332162214320106e-01 + 1.329004765902875e-01 + 1.325854779258548e-01 + 1.322712236439755e-01 + 1.319577119415115e-01 + 1.316449410589970e-01 + 1.313329092858229e-01 + 1.310216149439378e-01 + 1.307110562100912e-01 + 1.304012313067827e-01 + 1.300921386594473e-01 + 1.297837764741680e-01 + 1.294761429396481e-01 + 1.291692364743583e-01 + 1.288630553353233e-01 + 1.285575977268189e-01 + 1.282528620001082e-01 + 1.279488464604472e-01 + 1.276455493846629e-01 + 1.273429690961771e-01 + 1.270411039265308e-01 + 1.267399521912149e-01 + 1.264395121606617e-01 + 1.261397821624623e-01 + 1.258407605612416e-01 + 1.255424456647032e-01 + 1.252448358003494e-01 + 1.249479293256652e-01 + 1.246517245985584e-01 + 1.243562199440227e-01 + 1.240614136699035e-01 + 1.237673041530004e-01 + 1.234738897833225e-01 + 1.231811689369122e-01 + 1.228891399541342e-01 + 1.225978011897444e-01 + 1.223071510285007e-01 + 1.220171878485729e-01 + 1.217279100221359e-01 + 1.214393159216827e-01 + 1.211514039479249e-01 + 1.208641725134118e-01 + 1.205776200272462e-01 + 1.202917448643591e-01 + 1.200065453999493e-01 + 1.197220200388544e-01 + 1.194381672203820e-01 + 1.191549853738593e-01 + 1.188724728867774e-01 + 1.185906281982059e-01 + 1.183094497403516e-01 + 1.180289358802264e-01 + 1.177490851172322e-01 + 1.174698959467804e-01 + 1.171913666738082e-01 + 1.169134957966049e-01 + 1.166362818664215e-01 + 1.163597231976005e-01 + 1.160838182295854e-01 + 1.158085654926154e-01 + 1.155339634301463e-01 + 1.152600105152270e-01 + 1.149867052503320e-01 + 1.147140461081585e-01 + 1.144420315115333e-01 + 1.141706598827868e-01 + 1.138999297876022e-01 + 1.136298397724347e-01 + 1.133603883121320e-01 + 1.130915738073908e-01 + 1.128233947404400e-01 + 1.125558496925181e-01 + 1.122889371862514e-01 + 1.120226557224089e-01 + 1.117570037925019e-01 + 1.114919798574519e-01 + 1.112275824488763e-01 + 1.109638101830490e-01 + 1.107006615250319e-01 + 1.104381349837027e-01 + 1.101762291935612e-01 + 1.099149425817940e-01 + 1.096542736337556e-01 + 1.093942210611990e-01 + 1.091347833750166e-01 + 1.088759590309823e-01 + 1.086177465849946e-01 + 1.083601446468375e-01 + 1.081031518187680e-01 + 1.078467666394599e-01 + 1.075909876365943e-01 + 1.073358133695979e-01 + 1.070812424691808e-01 + 1.068272734935852e-01 + 1.065739049762412e-01 + 1.063211355273724e-01 + 1.060689637753818e-01 + 1.058173883167701e-01 + 1.055664076522099e-01 + 1.053160204177178e-01 + 1.050662253083730e-01 + 1.048170208178578e-01 + 1.045684055544151e-01 + 1.043203782231123e-01 + 1.040729373745031e-01 + 1.038260815947437e-01 + 1.035798095388146e-01 + 1.033341198496129e-01 + 1.030890111353506e-01 + 1.028444819874746e-01 + 1.026005310752415e-01 + 1.023571570589419e-01 + 1.021143585605686e-01 + 1.018721342063349e-01 + 1.016304826397723e-01 + 1.013894025261397e-01 + 1.011488925387934e-01 + 1.009089513225976e-01 + 1.006695774897203e-01 + 1.004307697412456e-01 + 1.001925267601519e-01 + 9.995484714928184e-02 + 9.971772961029543e-02 + 9.948117285600222e-02 + 9.924517553207431e-02 + 9.900973631553432e-02 + 9.877485389836264e-02 + 9.854052696321766e-02 + 9.830675420513860e-02 + 9.807353432053509e-02 + 9.784086599274402e-02 + 9.760874792461041e-02 + 9.737717882679013e-02 + 9.714615739564664e-02 + 9.691568233864475e-02 + 9.668575237168565e-02 + 9.645636620785530e-02 + 9.622752256709627e-02 + 9.599922017186617e-02 + 9.577145773476621e-02 + 9.554423398421420e-02 + 9.531754766036228e-02 + 9.509139748951084e-02 + 9.486578220406576e-02 + 9.464070054491446e-02 + 9.441615125061270e-02 + 9.419213306609350e-02 + 9.396864474309072e-02 + 9.374568502973517e-02 + 9.352325267700241e-02 + 9.330134644110695e-02 + 9.307996508088016e-02 + 9.285910736057421e-02 + 9.263877204899980e-02 + 9.241895790580944e-02 + 9.219966369924239e-02 + 9.198088821288498e-02 + 9.176263021506216e-02 + 9.154488848131032e-02 + 9.132766180778470e-02 + 9.111094897456264e-02 + 9.089474876186458e-02 + 9.067905996494766e-02 + 9.046388137755315e-02 + 9.024921179550818e-02 + 9.003505002157913e-02 + 8.982139485394958e-02 + 8.960824509461397e-02 + 8.939559956013639e-02 + 8.918345705664489e-02 + 8.897181638949078e-02 + 8.876067638185769e-02 + 8.855003585659860e-02 + 8.833989363307079e-02 + 8.813024852794749e-02 + 8.792109937217552e-02 + 8.771244500411417e-02 + 8.750428424959714e-02 + 8.729661594151820e-02 + 8.708943892038122e-02 + 8.688275202450782e-02 + 8.667655409894154e-02 + 8.647084399500883e-02 + 8.626562056133152e-02 + 8.606088264727801e-02 + 8.585662910508592e-02 + 8.565285879275303e-02 + 8.544957056834111e-02 + 8.524676329099723e-02 + 8.504443583456130e-02 + 8.484258706983651e-02 + 8.464121585953427e-02 + 8.444032107793580e-02 + 8.423990160173883e-02 + 8.403995630660985e-02 + 8.384048408000297e-02 + 8.364148380739438e-02 + 8.344295436518863e-02 + 8.324489464319758e-02 + 8.304730353631981e-02 + 8.285017993778075e-02 + 8.265352274723796e-02 + 8.245733086610936e-02 + 8.226160319325253e-02 + 8.206633863307464e-02 + 8.187153609323948e-02 + 8.167719448173898e-02 + 8.148331271120264e-02 + 8.128988969775824e-02 + 8.109692435907066e-02 + 8.090441561287741e-02 + 8.071236238052074e-02 + 8.052076359329230e-02 + 8.032961817777003e-02 + 8.013892505875637e-02 + 7.994868317110082e-02 + 7.975889145271257e-02 + 7.956954884117817e-02 + 7.938065427030368e-02 + 7.919220668490153e-02 + 7.900420503735811e-02 + 7.881664826626886e-02 + 7.862953532075569e-02 + 7.844286516277023e-02 + 7.825663674598571e-02 + 7.807084902471831e-02 + 7.788550095723919e-02 + 7.770059150356423e-02 + 7.751611963202924e-02 + 7.733208431808952e-02 + 7.714848452080215e-02 + 7.696531920714285e-02 + 7.678258736267791e-02 + 7.660028796508990e-02 + 7.641841999039113e-02 + 7.623698241865759e-02 + 7.605597423593993e-02 + 7.587539442823407e-02 + 7.569524197859213e-02 + 7.551551588287067e-02 + 7.533621514035872e-02 + 7.515733874432233e-02 + 7.497888568830134e-02 + 7.480085497230264e-02 + 7.462324560850588e-02 + 7.444605660139321e-02 + 7.426928695221670e-02 + 7.409293566891996e-02 + 7.391700176673981e-02 + 7.374148426439617e-02 + 7.356638217848553e-02 + 7.339169452681224e-02 + 7.321742033027905e-02 + 7.304355861552074e-02 + 7.287010840815517e-02 + 7.269706873346385e-02 + 7.252443862192341e-02 + 7.235221710900047e-02 + 7.218040323296335e-02 + 7.200899602923243e-02 + 7.183799453782064e-02 + 7.166739780328910e-02 + 7.149720486628935e-02 + 7.132741477295296e-02 + 7.115802657678706e-02 + 7.098903933028558e-02 + 7.082045208266741e-02 + 7.065226388294948e-02 + 7.048447379884398e-02 + 7.031708089501212e-02 + 7.015008422428966e-02 + 6.998348285005500e-02 + 6.981727584178653e-02 + 6.965146227138255e-02 + 6.948604121024822e-02 + 6.932101172952453e-02 + 6.915637290177927e-02 + 6.899212381049466e-02 + 6.882826353831664e-02 + 6.866479115768206e-02 + 6.850170575553913e-02 + 6.833900642241270e-02 + 6.817669223943085e-02 + 6.801476230171261e-02 + 6.785321570853013e-02 + 6.769205154760372e-02 + 6.753126891476798e-02 + 6.737086691265436e-02 + 6.721084464422118e-02 + 6.705120121123045e-02 + 6.689193571639933e-02 + 6.673304726820108e-02 + 6.657453497707803e-02 + 6.641639795452120e-02 + 6.625863531334618e-02 + 6.610124617104705e-02 + 6.594422964866814e-02 + 6.578758486543299e-02 + 6.563131094165708e-02 + 6.547540700031643e-02 + 6.531987216906585e-02 + 6.516470557837332e-02 + 6.500990635997374e-02 + 6.485547364331327e-02 + 6.470140656204018e-02 + 6.454770425495959e-02 + 6.439436585565442e-02 + 6.424139050518185e-02 + 6.408877735587415e-02 + 6.393652554954243e-02 + 6.378463422860429e-02 + 6.363310254304622e-02 + 6.348192964216136e-02 + 6.333111467891862e-02 + 6.318065681259971e-02 + 6.303055519506789e-02 + 6.288080898167979e-02 + 6.273141734118348e-02 + 6.258237943694549e-02 + 6.243369443027962e-02 + 6.228536148636779e-02 + 6.213737977420020e-02 + 6.198974846629291e-02 + 6.184246673830131e-02 + 6.169553375986874e-02 + 6.154894870195880e-02 + 6.140271075002260e-02 + 6.125681908485271e-02 + 6.111127288458502e-02 + 6.096607133498923e-02 + 6.082121362330186e-02 + 6.067669893778977e-02 + 6.053252647002724e-02 + 6.038869541057570e-02 + 6.024520494995262e-02 + 6.010205428441878e-02 + 5.995924261312039e-02 + 5.981676913606451e-02 + 5.967463305068377e-02 + 5.953283356000520e-02 + 5.939136987405440e-02 + 5.925024120274393e-02 + 5.910944675075109e-02 + 5.896898572024133e-02 + 5.882885733338872e-02 + 5.868906080796419e-02 + 5.854959534943303e-02 + 5.841046018167366e-02 + 5.827165452667381e-02 + 5.813317759547484e-02 + 5.799502862000658e-02 + 5.785720683145133e-02 + 5.771971144629215e-02 + 5.758254169802959e-02 + 5.744569682168989e-02 + 5.730917604038396e-02 + 5.717297859181381e-02 + 5.703710371771920e-02 + 5.690155065150715e-02 + 5.676631863514842e-02 + 5.663140691176988e-02 + 5.649681471550019e-02 + 5.636254129818796e-02 + 5.622858591623749e-02 + 5.609494780637568e-02 + 5.596162621719655e-02 + 5.582862040612746e-02 + 5.569592962469259e-02 + 5.556355312969728e-02 + 5.543149018219354e-02 + 5.529974004038473e-02 + 5.516830196534387e-02 + 5.503717522021812e-02 + 5.490635906464716e-02 + 5.477585276550550e-02 + 5.464565559606692e-02 + 5.451576682310098e-02 + 5.438618571514530e-02 + 5.425691154653305e-02 + 5.412794360021059e-02 + 5.399928115030668e-02 + 5.387092346220070e-02 + 5.374286982722595e-02 + 5.361511953114147e-02 + 5.348767184376742e-02 + 5.336052605560348e-02 + 5.323368145967647e-02 + 5.310713734132736e-02 + 5.298089299097181e-02 + 5.285494769998652e-02 + 5.272930075794034e-02 + 5.260395145882699e-02 + 5.247889910164562e-02 + 5.235414299012888e-02 + 5.222968242359068e-02 + 5.210551670083303e-02 + 5.198164512479836e-02 + 5.185806699751586e-02 + 5.173478162567831e-02 + 5.161178832737659e-02 + 5.148908640731603e-02 + 5.136667516904735e-02 + 5.124455393713079e-02 + 5.112272202541198e-02 + 5.100117874145336e-02 + 5.087992340415878e-02 + 5.075895533879782e-02 + 5.063827387090040e-02 + 5.051787831631814e-02 + 5.039776799903027e-02 + 5.027794224956293e-02 + 5.015840039018700e-02 + 5.003914174911826e-02 + 4.992016566217095e-02 + 4.980147146451835e-02 + 4.968305848565534e-02 + 4.956492605368701e-02 + 4.944707351707827e-02 + 4.932950021762891e-02 + 4.921220548403189e-02 + 4.909518865563611e-02 + 4.897844908008390e-02 + 4.886198610990230e-02 + 4.874579909103274e-02 + 4.862988736593407e-02 + 4.851425027765261e-02 + 4.839888718215429e-02 + 4.828379743688660e-02 + 4.816898039344981e-02 + 4.805443540666063e-02 + 4.794016183433197e-02 + 4.782615903628512e-02 + 4.771242637003347e-02 + 4.759896319572905e-02 + 4.748576888074151e-02 + 4.737284278529100e-02 + 4.726018427180961e-02 + 4.714779271742187e-02 + 4.703566749191604e-02 + 4.692380796083007e-02 + 4.681221349433169e-02 + 4.670088346648602e-02 + 4.658981725459431e-02 + 4.647901423861556e-02 + 4.636847379587147e-02 + 4.625819530165282e-02 + 4.614817813294777e-02 + 4.603842167462240e-02 + 4.592892531626435e-02 + 4.581968844113481e-02 + 4.571071043517037e-02 + 4.560199068716930e-02 + 4.549352858172214e-02 + 4.538532351139604e-02 + 4.527737487551017e-02 + 4.516968206047602e-02 + 4.506224446147816e-02 + 4.495506148526871e-02 + 4.484813252205796e-02 + 4.474145696749865e-02 + 4.463503423038843e-02 + 4.452886371233129e-02 + 4.442294481444441e-02 + 4.431727694184067e-02 + 4.421185950249874e-02 + 4.410669190344264e-02 + 4.400177354999718e-02 + 4.389710385863231e-02 + 4.379268224561385e-02 + 4.368850811842072e-02 + 4.358458089102907e-02 + 4.348089998166713e-02 + 4.337746480946211e-02 + 4.327427479290449e-02 + 4.317132935104961e-02 + 4.306862790538591e-02 + 4.296616988021409e-02 + 4.286395470044128e-02 + 4.276198178905291e-02 + 4.266025057462805e-02 + 4.255876048879523e-02 + 4.245751096050290e-02 + 4.235650142249979e-02 + 4.225573130868781e-02 + 4.215520004666404e-02 + 4.205490707118502e-02 + 4.195485182346907e-02 + 4.185503374212908e-02 + 4.175545226547943e-02 + 4.165610683241490e-02 + 4.155699688308426e-02 + 4.145812186261490e-02 + 4.135948121993713e-02 + 4.126107439911159e-02 + 4.116290084444992e-02 + 4.106496000347922e-02 + 4.096725133001662e-02 + 4.086977427671171e-02 + 4.077252829257245e-02 + 4.067551282880393e-02 + 4.057872734137224e-02 + 4.048217129089726e-02 + 4.038584413229004e-02 + 4.028974532214836e-02 + 4.019387432351806e-02 + 4.009823059884492e-02 + 4.000281360871143e-02 + 3.990762281263916e-02 + 3.981265768084040e-02 + 3.971791768404272e-02 + 3.962340228400397e-02 + 3.952911094818634e-02 + 3.943504314911767e-02 + 3.934119836154264e-02 + 3.924757605343093e-02 + 3.915417569553582e-02 + 3.906099677494528e-02 + 3.896803876462888e-02 + 3.887530113159737e-02 + 3.878278335807980e-02 + 3.869048493136602e-02 + 3.859840533540703e-02 + 3.850654403935494e-02 + 3.841490053099362e-02 + 3.832347430867683e-02 + 3.823226484521238e-02 + 3.814127162485314e-02 + 3.805049414568009e-02 + 3.795993189727254e-02 + 3.786958436838804e-02 + 3.777945104950908e-02 + 3.768953143238456e-02 + 3.759982501241896e-02 + 3.751033128919119e-02 + 3.742104976390229e-02 + 3.733197993101921e-02 + 3.724312127956968e-02 + 3.715447331892652e-02 + 3.706603555538170e-02 + 3.697780748276271e-02 + 3.688978860838169e-02 + 3.680197844047203e-02 + 3.671437648083043e-02 + 3.662698223859462e-02 + 3.653979522528233e-02 + 3.645281495050149e-02 + 3.636604092401768e-02 + 3.627947265609178e-02 + 3.619310965841749e-02 + 3.610695145022991e-02 + 3.602099755007137e-02 + 3.593524746722872e-02 + 3.584970072102484e-02 + 3.576435683502647e-02 + 3.567921532660211e-02 + 3.559427571435374e-02 + 3.550953752116312e-02 + 3.542500027693078e-02 + 3.534066350384148e-02 + 3.525652672170999e-02 + 3.517258946309138e-02 + 3.508885125628003e-02 + 3.500531162678291e-02 + 3.492197010940873e-02 + 3.483882623525817e-02 + 3.475587953263527e-02 + 3.467312953919303e-02 + 3.459057578876406e-02 + 3.450821781198862e-02 + 3.442605515251815e-02 + 3.434408734999198e-02 + 3.426231393723483e-02 + 3.418073445581654e-02 + 3.409934844816886e-02 + 3.401815545480084e-02 + 3.393715501912345e-02 + 3.385634668688416e-02 + 3.377573000557660e-02 + 3.369530452244349e-02 + 3.361506978424043e-02 + 3.353502533757853e-02 + 3.345517073173793e-02 + 3.337550551749302e-02 + 3.329602924688495e-02 + 3.321674147756795e-02 + 3.313764176353938e-02 + 3.305872964905672e-02 + 3.298000469915312e-02 + 3.290146647870388e-02 + 3.282311452928582e-02 + 3.274494841443989e-02 + 3.266696770524984e-02 + 3.258917195579586e-02 + 3.251156072835543e-02 + 3.243413358906379e-02 + 3.235689009597382e-02 + 3.227982981604406e-02 + 3.220295232152501e-02 + 3.212625717796667e-02 + 3.204974395335523e-02 + 3.197341221860803e-02 + 3.189726154412311e-02 + 3.182129149811844e-02 + 3.174550164996338e-02 + 3.166989158019418e-02 + 3.159446086552403e-02 + 3.151920907660396e-02 + 3.144413578635114e-02 + 3.136924057603768e-02 + 3.129452303273958e-02 + 3.121998273049806e-02 + 3.114561924523454e-02 + 3.107143216011856e-02 + 3.099742105799270e-02 + 3.092358552474080e-02 + 3.084992514925186e-02 + 3.077643951122557e-02 + 3.070312819305190e-02 + 3.062999078663620e-02 + 3.055702688363699e-02 + 3.048423607160382e-02 + 3.041161793396379e-02 + 3.033917207015753e-02 + 3.026689807846873e-02 + 3.019479554128978e-02 + 3.012286404982057e-02 + 3.005110320361238e-02 + 2.997951260681279e-02 + 2.990809185255966e-02 + 2.983684053226568e-02 + 2.976575824919644e-02 + 2.969484460522792e-02 + 2.962409920087884e-02 + 2.955352163824170e-02 + 2.948311151647172e-02 + 2.941286843696999e-02 + 2.934279201383451e-02 + 2.927288185012002e-02 + 2.920313754405053e-02 + 2.913355871301240e-02 + 2.906414496442064e-02 + 2.899489589842786e-02 + 2.892581113440367e-02 + 2.885689028447655e-02 + 2.878813295173805e-02 + 2.871953875071393e-02 + 2.865110730129668e-02 + 2.858283822298987e-02 + 2.851473112218837e-02 + 2.844678561226344e-02 + 2.837900131834860e-02 + 2.831137785774055e-02 + 2.824391484910513e-02 + 2.817661191561155e-02 + 2.810946867322990e-02 + 2.804248474261467e-02 + 2.797565975421473e-02 + 2.790899332866750e-02 + 2.784248508684310e-02 + 2.777613465729838e-02 + 2.770994166752542e-02 + 2.764390574354870e-02 + 2.757802651096095e-02 + 2.751230360164656e-02 + 2.744673664902718e-02 + 2.738132528259552e-02 + 2.731606912935157e-02 + 2.725096782054994e-02 + 2.718602099881922e-02 + 2.712122829441404e-02 + 2.705658933533107e-02 + 2.699210376654040e-02 + 2.692777122629619e-02 + 2.686359134766074e-02 + 2.679956376855050e-02 + 2.673568813034148e-02 + 2.667196407449100e-02 + 2.660839123653040e-02 + 2.654496925932325e-02 + 2.648169779209303e-02 + 2.641857647953893e-02 + 2.635560496230991e-02 + 2.629278288047702e-02 + 2.623010988365326e-02 + 2.616758562366618e-02 + 2.610520975031933e-02 + 2.604298190560967e-02 + 2.598090173551063e-02 + 2.591896889422694e-02 + 2.585718303968204e-02 + 2.579554382343284e-02 + 2.573405088890056e-02 + 2.567270388987125e-02 + 2.561150248485746e-02 + 2.555044633271165e-02 + 2.548953508798725e-02 + 2.542876840653832e-02 + 2.536814594843316e-02 + 2.530766736730480e-02 + 2.524733231969847e-02 + 2.518714047250964e-02 + 2.512709148651639e-02 + 2.506718502244662e-02 + 2.500742074738894e-02 + 2.494779831751132e-02 + 2.488831739145854e-02 + 2.482897764751662e-02 + 2.476977875068464e-02 + 2.471072035836960e-02 + 2.465180213557270e-02 + 2.459302375909131e-02 + 2.453438490494015e-02 + 2.447588522684439e-02 + 2.441752439632618e-02 + 2.435930209686822e-02 + 2.430121799563831e-02 + 2.424327176191257e-02 + 2.418546306971884e-02 + 2.412779159320392e-02 + 2.407025701015483e-02 + 2.401285899981317e-02 + 2.395559723318545e-02 + 2.389847138352894e-02 + 2.384148113010493e-02 + 2.378462615809818e-02 + 2.372790614977233e-02 + 2.367132078182184e-02 + 2.361486973012364e-02 + 2.355855267628842e-02 + 2.350236930912776e-02 + 2.344631931433045e-02 + 2.339040237260871e-02 + 2.333461816188979e-02 + 2.327896637661412e-02 + 2.322344670789084e-02 + 2.316805883183489e-02 + 2.311280243515378e-02 + 2.305767721100430e-02 + 2.300268285332459e-02 + 2.294781904779433e-02 + 2.289308548135576e-02 + 2.283848185163481e-02 + 2.278400785322520e-02 + 2.272966317657758e-02 + 2.267544750906289e-02 + 2.262136054576819e-02 + 2.256740198705395e-02 + 2.251357153295969e-02 + 2.245986887460843e-02 + 2.240629370372433e-02 + 2.235284572997816e-02 + 2.229952464835474e-02 + 2.224633014749699e-02 + 2.219326193897085e-02 + 2.214031972536749e-02 + 2.208750320104361e-02 + 2.203481207216736e-02 + 2.198224604054712e-02 + 2.192980480490446e-02 + 2.187748807809197e-02 + 2.182529556587840e-02 + 2.177322696546572e-02 + 2.172128198614426e-02 + 2.166946034002218e-02 + 2.161776173674180e-02 + 2.156618587797776e-02 + 2.151473246970182e-02 + 2.146340122648612e-02 + 2.141219186176581e-02 + 2.136110408595206e-02 + 2.131013760699968e-02 + 2.125929213929720e-02 + 2.120856739943827e-02 + 2.115796310282077e-02 + 2.110747896148574e-02 + 2.105711468773744e-02 + 2.100686999708853e-02 + 2.095674460640470e-02 + 2.090673823470377e-02 + 2.085685060390323e-02 + 2.080708143284909e-02 + 2.075743043865024e-02 + 2.070789733896461e-02 + 2.065848185338519e-02 + 2.060918370358626e-02 + 2.056000261352416e-02 + 2.051093830731156e-02 + 2.046199050841276e-02 + 2.041315893918832e-02 + 2.036444332670061e-02 + 2.031584339811113e-02 + 2.026735887003067e-02 + 2.021898947028043e-02 + 2.017073493461869e-02 + 2.012259498752183e-02 + 2.007456935661649e-02 + 2.002665777297167e-02 + 1.997885996051357e-02 + 1.993117564943755e-02 + 1.988360457741823e-02 + 1.983614647798445e-02 + 1.978880107994216e-02 + 1.974156811085027e-02 + 1.969444731166336e-02 + 1.964743841723802e-02 + 1.960054115227784e-02 + 1.955375525837354e-02 + 1.950708047707909e-02 + 1.946051654129042e-02 + 1.941406318497287e-02 + 1.936772014474174e-02 + 1.932148716119990e-02 + 1.927536398140690e-02 + 1.922935034564512e-02 + 1.918344598004621e-02 + 1.913765063001423e-02 + 1.909196404425976e-02 + 1.904638595925336e-02 + 1.900091612254435e-02 + 1.895555428061772e-02 + 1.891030016469744e-02 + 1.886515352637163e-02 + 1.882011411999479e-02 + 1.877518167521970e-02 + 1.873035594232305e-02 + 1.868563668110157e-02 + 1.864102363246424e-02 + 1.859651653826993e-02 + 1.855211514697215e-02 + 1.850781921692858e-02 + 1.846362849811174e-02 + 1.841954273425713e-02 + 1.837556167722399e-02 + 1.833168508274460e-02 + 1.828791270638760e-02 + 1.824424429587613e-02 + 1.820067960186819e-02 + 1.815721838079814e-02 + 1.811386039242822e-02 + 1.807060539155448e-02 + 1.802745312809132e-02 + 1.798440336027523e-02 + 1.794145584667328e-02 + 1.789861034396235e-02 + 1.785586661445831e-02 + 1.781322441713358e-02 + 1.777068350457842e-02 + 1.772824363606736e-02 + 1.768590457480606e-02 + 1.764366608520215e-02 + 1.760152792777148e-02 + 1.755948986314423e-02 + 1.751755165530868e-02 + 1.747571306959304e-02 + 1.743397386795286e-02 + 1.739233380686453e-02 + 1.735079266012027e-02 + 1.730935019969591e-02 + 1.726800617515195e-02 + 1.722676035861175e-02 + 1.718561252878033e-02 + 1.714456244423200e-02 + 1.710360987245781e-02 + 1.706275458478830e-02 + 1.702199634263978e-02 + 1.698133492251816e-02 + 1.694077010510486e-02 + 1.690030164730331e-02 + 1.685992932068962e-02 + 1.681965290804600e-02 + 1.677947217681714e-02 + 1.673938689521877e-02 + 1.669939683666028e-02 + 1.665950177991986e-02 + 1.661970150205939e-02 + 1.657999577711447e-02 + 1.654038437906895e-02 + 1.650086708478969e-02 + 1.646144367321789e-02 + 1.642211391798679e-02 + 1.638287759543946e-02 + 1.634373448754158e-02 + 1.630468437732129e-02 + 1.626572704186934e-02 + 1.622686225251448e-02 + 1.618808979718675e-02 + 1.614940946170872e-02 + 1.611082101996680e-02 + 1.607232425440962e-02 + 1.603391895041710e-02 + 1.599560489122978e-02 + 1.595738185903658e-02 + 1.591924963852954e-02 + 1.588120801872957e-02 + 1.584325677844977e-02 + 1.580539569909259e-02 + 1.576762457813194e-02 + 1.572994319938502e-02 + 1.569235134492561e-02 + 1.565484881311209e-02 + 1.561743538476679e-02 + 1.558011083839993e-02 + 1.554287497958433e-02 + 1.550572759639263e-02 + 1.546866846769255e-02 + 1.543169739218311e-02 + 1.539481416304957e-02 + 1.535801856691179e-02 + 1.532131039389481e-02 + 1.528468944222785e-02 + 1.524815551153465e-02 + 1.521170838270258e-02 + 1.517534784896265e-02 + 1.513907371629201e-02 + 1.510288577422132e-02 + 1.506678381600347e-02 + 1.503076764230081e-02 + 1.499483704594779e-02 + 1.495899182406707e-02 + 1.492323178010325e-02 + 1.488755670734373e-02 + 1.485196640180961e-02 + 1.481646066682016e-02 + 1.478103929846549e-02 + 1.474570209596410e-02 + 1.471044886603309e-02 + 1.467527940456368e-02 + 1.464019351058384e-02 + 1.460519099481427e-02 + 1.457027165550810e-02 + 1.453543528903122e-02 + 1.450068170024789e-02 + 1.446601069487559e-02 + 1.443142207965322e-02 + 1.439691566271563e-02 + 1.436249124410753e-02 + 1.432814862414793e-02 + 1.429388761459182e-02 + 1.425970802314729e-02 + 1.422560965483165e-02 + 1.419159231701311e-02 + 1.415765581387266e-02 + 1.412379995194592e-02 + 1.409002455116132e-02 + 1.405632941792580e-02 + 1.402271435207008e-02 + 1.398917917303820e-02 + 1.395572369124169e-02 + 1.392234770932106e-02 + 1.388905104392205e-02 + 1.385583350997071e-02 + 1.382269491788422e-02 + 1.378963507987753e-02 + 1.375665380791922e-02 + 1.372375091366015e-02 + 1.369092621121959e-02 + 1.365817951715469e-02 + 1.362551064978645e-02 + 1.359291942581090e-02 + 1.356040565686591e-02 + 1.352796915179558e-02 + 1.349560973812908e-02 + 1.346332723540702e-02 + 1.343112144483463e-02 + 1.339899219360082e-02 + 1.336693930891053e-02 + 1.333496260043193e-02 + 1.330306188734133e-02 + 1.327123699224855e-02 + 1.323948773476910e-02 + 1.320781393642416e-02 + 1.317621541705235e-02 + 1.314469199166208e-02 + 1.311324348463446e-02 + 1.308186972415766e-02 + 1.305057053367403e-02 + 1.301934573289238e-02 + 1.298819514247371e-02 + 1.295711859027024e-02 + 1.292611590142988e-02 + 1.289518689817567e-02 + 1.286433140253433e-02 + 1.283354924175516e-02 + 1.280284024626999e-02 + 1.277220424320462e-02 + 1.274164105512193e-02 + 1.271115050454398e-02 + 1.268073242580564e-02 + 1.265038664885281e-02 + 1.262011299771964e-02 + 1.258991130045622e-02 + 1.255978138928737e-02 + 1.252972309744999e-02 + 1.249973624798444e-02 + 1.246982067106488e-02 + 1.243997620568067e-02 + 1.241020267461013e-02 + 1.238049990730756e-02 + 1.235086774662455e-02 + 1.232130602051964e-02 + 1.229181455798258e-02 + 1.226239319685087e-02 + 1.223304176770951e-02 + 1.220376010347082e-02 + 1.217454804486660e-02 + 1.214540542341299e-02 + 1.211633207079968e-02 + 1.208732782681391e-02 + 1.205839252771904e-02 + 1.202952600673308e-02 + 1.200072809652295e-02 + 1.197199864009422e-02 + 1.194333748171596e-02 + 1.191474445503102e-02 + 1.188621939116683e-02 + 1.185776212675846e-02 + 1.182937251288597e-02 + 1.180105038815069e-02 + 1.177279558400601e-02 + 1.174460794107161e-02 + 1.171648730396891e-02 + 1.168843351609301e-02 + 1.166044641171630e-02 + 1.163252583370262e-02 + 1.160467163102319e-02 + 1.157688364263099e-02 + 1.154916170933044e-02 + 1.152150567570712e-02 + 1.149391538555893e-02 + 1.146639068095789e-02 + 1.143893140447911e-02 + 1.141153740781534e-02 + 1.138420853673168e-02 + 1.135694462854312e-02 + 1.132974552839056e-02 + 1.130261108533809e-02 + 1.127554114921167e-02 + 1.124853556496432e-02 + 1.122159417997002e-02 + 1.119471684585664e-02 + 1.116790340283271e-02 + 1.114115369710312e-02 + 1.111446758944324e-02 + 1.108784492177717e-02 + 1.106128553754357e-02 + 1.103478929728668e-02 + 1.100835604711145e-02 + 1.098198563223047e-02 + 1.095567791133747e-02 + 1.092943273475230e-02 + 1.090324994987072e-02 + 1.087712940981543e-02 + 1.085107096608238e-02 + 1.082507447053145e-02 + 1.079913977931768e-02 + 1.077326674497864e-02 + 1.074745521859533e-02 + 1.072170505538783e-02 + 1.069601611066200e-02 + 1.067038823886727e-02 + 1.064482129354728e-02 + 1.061931513219808e-02 + 1.059386961330933e-02 + 1.056848458681972e-02 + 1.054315990640127e-02 + 1.051789543133304e-02 + 1.049269102209236e-02 + 1.046754653920045e-02 + 1.044246184044743e-02 + 1.041743677288729e-02 + 1.039247119540387e-02 + 1.036756497988909e-02 + 1.034271797805630e-02 + 1.031793004647734e-02 + 1.029320105343422e-02 + 1.026853085073464e-02 + 1.024391929539164e-02 + 1.021936625852857e-02 + 1.019487159885800e-02 + 1.017043517132599e-02 + 1.014605683522427e-02 + 1.012173646293816e-02 + 1.009747392058842e-02 + 1.007326905588179e-02 + 1.004912173629082e-02 + 1.002503183346208e-02 + 1.000099920653610e-02 + 9.977023717087764e-03 + 9.953105229386335e-03 + 9.929243608872406e-03 + 9.905438720973011e-03 + 9.881690430827046e-03 + 9.857998603258316e-03 + 9.834363104786413e-03 + 9.810783802355094e-03 + 9.787260560990621e-03 + 9.763793247942843e-03 + 9.740381731591760e-03 + 9.717025877967826e-03 + 9.693725554510663e-03 + 9.670480630152000e-03 + 9.647290973567844e-03 + 9.624156453317901e-03 + 9.601076938062841e-03 + 9.578052297039983e-03 + 9.555082399653962e-03 + 9.532167115690399e-03 + 9.509306316445141e-03 + 9.486499872512266e-03 + 9.463747653553711e-03 + 9.441049530896879e-03 + 9.418405376662433e-03 + 9.395815063104617e-03 + 9.373278461427175e-03 + 9.350795443499088e-03 + 9.328365882617906e-03 + 9.305989651970981e-03 + 9.283666624824176e-03 + 9.261396674723778e-03 + 9.239179675408710e-03 + 9.217015500757821e-03 + 9.194904024947497e-03 + 9.172845123632957e-03 + 9.150838672277813e-03 + 9.128884544858834e-03 + 9.106982617538152e-03 + 9.085132766987650e-03 + 9.063334868396023e-03 + 9.041588798714301e-03 + 9.019894435479832e-03 + 8.998251654894885e-03 + 8.976660334271958e-03 + 8.955120351755344e-03 + 8.933631585369030e-03 + 8.912193913264732e-03 + 8.890807213885918e-03 + 8.869471366214972e-03 + 8.848186249259440e-03 + 8.826951742251321e-03 + 8.805767725383001e-03 + 8.784634078744540e-03 + 8.763550682317645e-03 + 8.742517416743529e-03 + 8.721534162832835e-03 + 8.700600801502468e-03 + 8.679717214101214e-03 + 8.658883282492529e-03 + 8.638098888885700e-03 + 8.617363915025602e-03 + 8.596678243443276e-03 + 8.576041757693640e-03 + 8.555454340593486e-03 + 8.534915875110577e-03 + 8.514426244844865e-03 + 8.493985333674233e-03 + 8.473593025909724e-03 + 8.453249206335058e-03 + 8.432953759374154e-03 + 8.412706569850796e-03 + 8.392507523503252e-03 + 8.372356505624580e-03 + 8.352253401838657e-03 + 8.332198098800467e-03 + 8.312190482450988e-03 + 8.292230438871008e-03 + 8.272317855399050e-03 + 8.252452619663047e-03 + 8.232634619050869e-03 + 8.212863740331295e-03 + 8.193139871755427e-03 + 8.173462902270600e-03 + 8.153832719956143e-03 + 8.134249213438031e-03 + 8.114712271802299e-03 + 8.095221784035302e-03 + 8.075777639824947e-03 + 8.056379729417138e-03 + 8.037027942938956e-03 + 8.017722170154111e-03 + 7.998462301028743e-03 + 7.979248227381455e-03 + 7.960079840401237e-03 + 7.940957030626293e-03 + 7.921879690329333e-03 + 7.902847711453821e-03 + 7.883860985421759e-03 + 7.864919405368889e-03 + 7.846022864037674e-03 + 7.827171253341911e-03 + 7.808364466777525e-03 + 7.789602397948123e-03 + 7.770884940051978e-03 + 7.752211987488857e-03 + 7.733583434567862e-03 + 7.714999174963997e-03 + 7.696459103766686e-03 + 7.677963116338556e-03 + 7.659511107448910e-03 + 7.641102971817726e-03 + 7.622738605046243e-03 + 7.604417904226960e-03 + 7.586140765207791e-03 + 7.567907083543369e-03 + 7.549716755813157e-03 + 7.531569679511053e-03 + 7.513465752109027e-03 + 7.495404870064185e-03 + 7.477386931039745e-03 + 7.459411833357052e-03 + 7.441479474804043e-03 + 7.423589753808636e-03 + 7.405742569108545e-03 + 7.387937818890154e-03 + 7.370175402616828e-03 + 7.352455220325825e-03 + 7.334777170378787e-03 + 7.317141152312192e-03 + 7.299547066866589e-03 + 7.281994814230038e-03 + 7.264484294760120e-03 + 7.247015409129196e-03 + 7.229588058070396e-03 + 7.212202142721502e-03 + 7.194857564639825e-03 + 7.177554225359851e-03 + 7.160292026920549e-03 + 7.143070871828701e-03 + 7.125890661781023e-03 + 7.108751299151369e-03 + 7.091652687463649e-03 + 7.074594729473165e-03 + 7.057577328092346e-03 + 7.040600386920140e-03 + 7.023663809440293e-03 + 7.006767499621119e-03 + 6.989911362283671e-03 + 6.973095301761098e-03 + 6.956319222246642e-03 + 6.939583028242014e-03 + 6.922886624933184e-03 + 6.906229917977133e-03 + 6.889612813237578e-03 + 6.873035215956658e-03 + 6.856497031627250e-03 + 6.839998167124653e-03 + 6.823538528849983e-03 + 6.807118022950776e-03 + 6.790736556102037e-03 + 6.774394036012678e-03 + 6.758090370503938e-03 + 6.741825465874382e-03 + 6.725599229831710e-03 + 6.709411571076730e-03 + 6.693262397262002e-03 + 6.677151616823099e-03 + 6.661079138883049e-03 + 6.645044871881905e-03 + 6.629048724424302e-03 + 6.613090605727208e-03 + 6.597170426169362e-03 + 6.581288095176429e-03 + 6.565443521393368e-03 + 6.549636616015259e-03 + 6.533867289690503e-03 + 6.518135451870410e-03 + 6.502441013826720e-03 + 6.486783886693610e-03 + 6.471163980906190e-03 + 6.455581208648475e-03 + 6.440035481784445e-03 + 6.424526710952946e-03 + 6.409054808194274e-03 + 6.393619686148648e-03 + 6.378221257389647e-03 + 6.362859434216829e-03 + 6.347534129405275e-03 + 6.332245256702231e-03 + 6.316992728926398e-03 + 6.301776458848883e-03 + 6.286596360249587e-03 + 6.271452347303485e-03 + 6.256344334335297e-03 + 6.241272235637497e-03 + 6.226235965289892e-03 + 6.211235437617355e-03 + 6.196270567881593e-03 + 6.181341271239764e-03 + 6.166447462747857e-03 + 6.151589057705613e-03 + 6.136765971896623e-03 + 6.121978121401951e-03 + 6.107225422158738e-03 + 6.092507790132517e-03 + 6.077825141615326e-03 + 6.063177393866219e-03 + 6.048564463915550e-03 + 6.033986268442907e-03 + 6.019442724444331e-03 + 6.004933749322879e-03 + 5.990459260846786e-03 + 5.976019176895193e-03 + 5.961613415583682e-03 + 5.947241895231883e-03 + 5.932904533953020e-03 + 5.918601250164555e-03 + 5.904331962789744e-03 + 5.890096590861083e-03 + 5.875895053571317e-03 + 5.861727270328322e-03 + 5.847593160694864e-03 + 5.833492644473149e-03 + 5.819425641715960e-03 + 5.805392072163253e-03 + 5.791391855962741e-03 + 5.777424914193254e-03 + 5.763491167389796e-03 + 5.749590536018355e-03 + 5.735722941127108e-03 + 5.721888304505554e-03 + 5.708086547766434e-03 + 5.694317591457392e-03 + 5.680581357894303e-03 + 5.666877769868901e-03 + 5.653206748498332e-03 + 5.639568216215936e-03 + 5.625962096156960e-03 + 5.612388310444156e-03 + 5.598846782244085e-03 + 5.585337435180374e-03 + 5.571860191464977e-03 + 5.558414974887664e-03 + 5.545001710146245e-03 + 5.531620319651646e-03 + 5.518270727342278e-03 + 5.504952858629092e-03 + 5.491666637149790e-03 + 5.478411987013346e-03 + 5.465188833301630e-03 + 5.451997101098349e-03 + 5.438836715460566e-03 + 5.425707601454353e-03 + 5.412609684284744e-03 + 5.399542889597323e-03 + 5.386507143481766e-03 + 5.373502371672819e-03 + 5.360528500347250e-03 + 5.347585456320476e-03 + 5.334673165238440e-03 + 5.321791553290573e-03 + 5.308940548233661e-03 + 5.296120077396591e-03 + 5.283330067535706e-03 + 5.270570445063373e-03 + 5.257841138170363e-03 + 5.245142075198895e-03 + 5.232473183108559e-03 + 5.219834389656078e-03 + 5.207225623450342e-03 + 5.194646813662877e-03 + 5.182097888019903e-03 + 5.169578774433769e-03 + 5.157089403379224e-03 + 5.144629703265777e-03 + 5.132199601938705e-03 + 5.119799030212023e-03 + 5.107427917986021e-03 + 5.095086194230444e-03 + 5.082773788422456e-03 + 5.070490630851877e-03 + 5.058236652191947e-03 + 5.046011782411770e-03 + 5.033815952050060e-03 + 5.021649092096963e-03 + 5.009511132708167e-03 + 4.997402004872952e-03 + 4.985321640554899e-03 + 4.973269971256597e-03 + 4.961246927915243e-03 + 4.949252441362114e-03 + 4.937286444284467e-03 + 4.925348869112448e-03 + 4.913439647407981e-03 + 4.901558711796497e-03 + 4.889705994683389e-03 + 4.877881427891544e-03 + 4.866084944974813e-03 + 4.854316479151838e-03 + 4.842575962313763e-03 + 4.830863328342665e-03 + 4.819178511323663e-03 + 4.807521444209243e-03 + 4.795892060902922e-03 + 4.784290295384500e-03 + 4.772716080911616e-03 + 4.761169351999607e-03 + 4.749650043687660e-03 + 4.738158090505544e-03 + 4.726693426328077e-03 + 4.715255985490762e-03 + 4.703845704177584e-03 + 4.692462517255530e-03 + 4.681106359266913e-03 + 4.669777166671382e-03 + 4.658474874679097e-03 + 4.647199418051047e-03 + 4.635950733693824e-03 + 4.624728757814554e-03 + 4.613533426035275e-03 + 4.602364675085555e-03 + 4.591222441193854e-03 + 4.580106660340010e-03 + 4.569017270133631e-03 + 4.557954207729684e-03 + 4.546917409606468e-03 + 4.535906813063030e-03 + 4.524922355662980e-03 + 4.513963975024341e-03 + 4.503031608847450e-03 + 4.492125194604706e-03 + 4.481244669721014e-03 + 4.470389973075004e-03 + 4.459561043403103e-03 + 4.448757818627942e-03 + 4.437980237157132e-03 + 4.427228237584914e-03 + 4.416501758569245e-03 + 4.405800739475310e-03 + 4.395125119625431e-03 + 4.384474837838549e-03 + 4.373849833628650e-03 + 4.363250046735974e-03 + 4.352675416676511e-03 + 4.342125883231542e-03 + 4.331601386396421e-03 + 4.321101866314548e-03 + 4.310627263408189e-03 + 4.300177518182486e-03 + 4.289752570999768e-03 + 4.279352362569397e-03 + 4.268976833692708e-03 + 4.258625924837488e-03 + 4.248299577436886e-03 + 4.237997733292803e-03 + 4.227720333115902e-03 + 4.217467318344088e-03 + 4.207238631130676e-03 + 4.197034213451204e-03 + 4.186854006892898e-03 + 4.176697952964437e-03 + 4.166565994071401e-03 + 4.156458073034852e-03 + 4.146374132669977e-03 + 4.136314114934178e-03 + 4.126277962231265e-03 + 4.116265617785051e-03 + 4.106277025130100e-03 + 4.096312127225507e-03 + 4.086370866498099e-03 + 4.076453186851077e-03 + 4.066559032318193e-03 + 4.056688346384167e-03 + 4.046841072375552e-03 + 4.037017154234894e-03 + 4.027216536753351e-03 + 4.017439163691562e-03 + 4.007684978984143e-03 + 3.997953927616382e-03 + 3.988245954341580e-03 + 3.978561003853811e-03 + 3.968899020987378e-03 + 3.959259950174110e-03 + 3.949643736363211e-03 + 3.940050325917084e-03 + 3.930479663940112e-03 + 3.920931695287086e-03 + 3.911406366153988e-03 + 3.901903622192779e-03 + 3.892423408886956e-03 + 3.882965672529350e-03 + 3.873530359308857e-03 + 3.864117415340676e-03 + 3.854726787040829e-03 + 3.845358421069152e-03 + 3.836012264203419e-03 + 3.826688263119290e-03 + 3.817386364639579e-03 + 3.808106515834866e-03 + 3.798848664119608e-03 + 3.789612756624806e-03 + 3.780398740246358e-03 + 3.771206562411011e-03 + 3.762036171140922e-03 + 3.752887514765301e-03 + 3.743760540740341e-03 + 3.734655196719529e-03 + 3.725571430980986e-03 + 3.716509192135922e-03 + 3.707468428387338e-03 + 3.698449087559120e-03 + 3.689451119263604e-03 + 3.680474472533827e-03 + 3.671519094850921e-03 + 3.662584935894309e-03 + 3.653671945297336e-03 + 3.644780071212910e-03 + 3.635909263417586e-03 + 3.627059471971036e-03 + 3.618230645951014e-03 + 3.609422734605362e-03 + 3.600635687799489e-03 + 3.591869456282116e-03 + 3.583123989955615e-03 + 3.574399238584414e-03 + 3.565695152845392e-03 + 3.557011682930304e-03 + 3.548348778903569e-03 + 3.539706391532652e-03 + 3.531084471778191e-03 + 3.522482970666699e-03 + 3.513901839239252e-03 + 3.505341028388093e-03 + 3.496800489111114e-03 + 3.488280173119797e-03 + 3.479780031892506e-03 + 3.471300016604386e-03 + 3.462840078578430e-03 + 3.454400170006921e-03 + 3.445980243580072e-03 + 3.437580250715228e-03 + 3.429200142992534e-03 + 3.420839872683964e-03 + 3.412499392748279e-03 + 3.404178655562702e-03 + 3.395877612913789e-03 + 3.387596218304602e-03 + 3.379334424898988e-03 + 3.371092184764359e-03 + 3.362869450661228e-03 + 3.354666175991870e-03 + 3.346482314543412e-03 + 3.338317819175880e-03 + 3.330172642972068e-03 + 3.322046740007612e-03 + 3.313940064235304e-03 + 3.305852569386344e-03 + 3.297784208976364e-03 + 3.289734936574093e-03 + 3.281704706272533e-03 + 3.273693473070924e-03 + 3.265701191257636e-03 + 3.257727814803984e-03 + 3.249773298074863e-03 + 3.241837595979994e-03 + 3.233920663596386e-03 + 3.226022455622204e-03 + 3.218142926555998e-03 + 3.210282031163023e-03 + 3.202439725215123e-03 + 3.194615964134223e-03 + 3.186810703067027e-03 + 3.179023897602838e-03 + 3.171255503398923e-03 + 3.163505475998486e-03 + 3.155773770652277e-03 + 3.148060343553685e-03 + 3.140365151430291e-03 + 3.132688149313277e-03 + 3.125029293443853e-03 + 3.117388541383308e-03 + 3.109765848736372e-03 + 3.102161171408776e-03 + 3.094574466373093e-03 + 3.087005690728782e-03 + 3.079454801280003e-03 + 3.071921754555924e-03 + 3.064406507880629e-03 + 3.056909018530570e-03 + 3.049429243338136e-03 + 3.041967139485151e-03 + 3.034522664377966e-03 + 3.027095775562892e-03 + 3.019686430816400e-03 + 3.012294588055786e-03 + 3.004920205212209e-03 + 2.997563239705405e-03 + 2.990223649173174e-03 + 2.982901392198357e-03 + 2.975596427311395e-03 + 2.968308712822513e-03 + 2.961038206776656e-03 + 2.953784867392937e-03 + 2.946548653201694e-03 + 2.939329523194637e-03 + 2.932127436582907e-03 + 2.924942352269057e-03 + 2.917774228121468e-03 + 2.910623023643702e-03 + 2.903488699056754e-03 + 2.896371212514376e-03 + 2.889270523304112e-03 + 2.882186591679052e-03 + 2.875119376658924e-03 + 2.868068837676741e-03 + 2.861034934776638e-03 + 2.854017627809473e-03 + 2.847016876513213e-03 + 2.840032640686938e-03 + 2.833064880681456e-03 + 2.826113557103426e-03 + 2.819178630449384e-03 + 2.812260060105674e-03 + 2.805357806481411e-03 + 2.798471831428214e-03 + 2.791602094948384e-03 + 2.784748557109701e-03 + 2.777911179108391e-03 + 2.771089922400815e-03 + 2.764284748007964e-03 + 2.757495616304825e-03 + 2.750722488782177e-03 + 2.743965327115693e-03 + 2.737224092409578e-03 + 2.730498746008289e-03 + 2.723789249648372e-03 + 2.717095565426717e-03 + 2.710417654358784e-03 + 2.703755477800617e-03 + 2.697108999073383e-03 + 2.690478179939920e-03 + 2.683862981660020e-03 + 2.677263366970269e-03 + 2.670679298051182e-03 + 2.664110736894467e-03 + 2.657557646411518e-03 + 2.651019989061974e-03 + 2.644497727126834e-03 + 2.637990823748049e-03 + 2.631499241776077e-03 + 2.625022943767310e-03 + 2.618561892619121e-03 + 2.612116051581085e-03 + 2.605685383984310e-03 + 2.599269852507916e-03 + 2.592869420565223e-03 + 2.586484052278204e-03 + 2.580113710814501e-03 + 2.573758359383719e-03 + 2.567417961609419e-03 + 2.561092481362380e-03 + 2.554781882413309e-03 + 2.548486128464411e-03 + 2.542205184036424e-03 + 2.535939013422343e-03 + 2.529687580238901e-03 + 2.523450848436006e-03 + 2.517228782352248e-03 + 2.511021346720505e-03 + 2.504828506444104e-03 + 2.498650225958320e-03 + 2.492486468967693e-03 + 2.486337200680032e-03 + 2.480202386472821e-03 + 2.474081990653096e-03 + 2.467975978460781e-03 + 2.461884315215007e-03 + 2.455806965243642e-03 + 2.449743893777428e-03 + 2.443695066608286e-03 + 2.437660449328877e-03 + 2.431640007119714e-03 + 2.425633705211946e-03 + 2.419641509634817e-03 + 2.413663385966202e-03 + 2.407699299632079e-03 + 2.401749216909934e-03 + 2.395813103777745e-03 + 2.389890925926915e-03 + 2.383982649399740e-03 + 2.378088240561300e-03 + 2.372207665865560e-03 + 2.366340891258303e-03 + 2.360487883037754e-03 + 2.354648608018378e-03 + 2.348823033118129e-03 + 2.343011124539103e-03 + 2.337212848054228e-03 + 2.331428171390765e-03 + 2.325657062040943e-03 + 2.319899486412222e-03 + 2.314155410784699e-03 + 2.308424802407836e-03 + 2.302707629600105e-03 + 2.297003858807791e-03 + 2.291313456815245e-03 + 2.285636391934661e-03 + 2.279972631361444e-03 + 2.274322142294874e-03 + 2.268684892803898e-03 + 2.263060850445441e-03 + 2.257449982675230e-03 + 2.251852257331842e-03 + 2.246267642469826e-03 + 2.240696106224612e-03 + 2.235137616698782e-03 + 2.229592141925271e-03 + 2.224059650030012e-03 + 2.218540109447705e-03 + 2.213033488566449e-03 + 2.207539755750870e-03 + 2.202058879448589e-03 + 2.196590827868759e-03 + 2.191135569406817e-03 + 2.185693073538250e-03 + 2.180263309295804e-03 + 2.174846245146934e-03 + 2.169441849486111e-03 + 2.164050091629877e-03 + 2.158670941358884e-03 + 2.153304367034930e-03 + 2.147950337590323e-03 + 2.142608822828710e-03 + 2.137279792340324e-03 + 2.131963215445541e-03 + 2.126659061301170e-03 + 2.121367299363035e-03 + 2.116087899310018e-03 + 2.110820830985273e-03 + 2.105566064252215e-03 + 2.100323568822542e-03 + 2.095093314356113e-03 + 2.089875271479949e-03 + 2.084669410319118e-03 + 2.079475699908646e-03 + 2.074294110902819e-03 + 2.069124614088778e-03 + 2.063967179294363e-03 + 2.058821776747180e-03 + 2.053688376991423e-03 + 2.048566950718572e-03 + 2.043457468582260e-03 + 2.038359901240009e-03 + 2.033274219398007e-03 + 2.028200393563254e-03 + 2.023138394473247e-03 + 2.018088193625467e-03 + 2.013049761808302e-03 + 2.008023069533293e-03 + 2.003008088023720e-03 + 1.998004788922133e-03 + 1.993013143739461e-03 + 1.988033123025423e-03 + 1.983064698401174e-03 + 1.978107841939004e-03 + 1.973162523959716e-03 + 1.968228716337500e-03 + 1.963306391971906e-03 + 1.958395521239848e-03 + 1.953496075620802e-03 + 1.948608028019931e-03 + 1.943731350228688e-03 + 1.938866013789267e-03 + 1.934011990485791e-03 + 1.929169252901841e-03 + 1.924337773155020e-03 + 1.919517522737516e-03 + 1.914708474346116e-03 + 1.909910600724645e-03 + 1.905123874118434e-03 + 1.900348266781407e-03 + 1.895583751238830e-03 + 1.890830300301618e-03 + 1.886087886140893e-03 + 1.881356481302734e-03 + 1.876636059328014e-03 + 1.871926593048255e-03 + 1.867228054886164e-03 + 1.862540417322874e-03 + 1.857863653843670e-03 + 1.853197738035545e-03 + 1.848542642643349e-03 + 1.843898340659710e-03 + 1.839264805482605e-03 + 1.834642010884087e-03 + 1.830029929675155e-03 + 1.825428534756660e-03 + 1.820837800826725e-03 + 1.816257700994342e-03 + 1.811688207883416e-03 + 1.807129296515363e-03 + 1.802580940478343e-03 + 1.798043112569654e-03 + 1.793515787775185e-03 + 1.788998939681262e-03 + 1.784492541016137e-03 + 1.779996567290557e-03 + 1.775510992946437e-03 + 1.771035790955467e-03 + 1.766570935188881e-03 + 1.762116400368900e-03 + 1.757672161650980e-03 + 1.753238193179788e-03 + 1.748814468721301e-03 + 1.744400962234815e-03 + 1.739997649147064e-03 + 1.735604504535336e-03 + 1.731221502449809e-03 + 1.726848617398671e-03 + 1.722485824273258e-03 + 1.718133098140551e-03 + 1.713790413411143e-03 + 1.709457744960287e-03 + 1.705135068710917e-03 + 1.700822359316501e-03 + 1.696519591326764e-03 + 1.692226740206531e-03 + 1.687943780998710e-03 + 1.683670689031842e-03 + 1.679407440586236e-03 + 1.675154010255336e-03 + 1.670910372590760e-03 + 1.666676504276520e-03 + 1.662452380680008e-03 + 1.658237976786625e-03 + 1.654033269138933e-03 + 1.649838233189823e-03 + 1.645652843894769e-03 + 1.641477077483747e-03 + 1.637310910181093e-03 + 1.633154317979306e-03 + 1.629007276710043e-03 + 1.624869761977525e-03 + 1.620741749539434e-03 + 1.616623216289868e-03 + 1.612514138626602e-03 + 1.608414492386588e-03 + 1.604324254066237e-03 + 1.600243399893093e-03 + 1.596171905775712e-03 + 1.592109748332882e-03 + 1.588056904380057e-03 + 1.584013350591343e-03 + 1.579979063015354e-03 + 1.575954018417919e-03 + 1.571938194458784e-03 + 1.567931567017785e-03 + 1.563934112240304e-03 + 1.559945807641685e-03 + 1.555966630779868e-03 + 1.551996558434039e-03 + 1.548035566441649e-03 + 1.544083632647983e-03 + 1.540140734902817e-03 + 1.536206849423688e-03 + 1.532281953055403e-03 + 1.528366023373284e-03 + 1.524459038476067e-03 + 1.520560975283225e-03 + 1.516671810636623e-03 + 1.512791522697568e-03 + 1.508920088807869e-03 + 1.505057486015793e-03 + 1.501203692209861e-03 + 1.497358685322736e-03 + 1.493522443062933e-03 + 1.489694942724099e-03 + 1.485876162194853e-03 + 1.482066079697174e-03 + 1.478264672890618e-03 + 1.474471919644568e-03 + 1.470687798121700e-03 + 1.466912286519041e-03 + 1.463145362594138e-03 + 1.459387003990816e-03 + 1.455637189563730e-03 + 1.451895897787254e-03 + 1.448163106500405e-03 + 1.444438793947980e-03 + 1.440722938760434e-03 + 1.437015519703072e-03 + 1.433316514691718e-03 + 1.429625901910583e-03 + 1.425943660193772e-03 + 1.422269768088744e-03 + 1.418604204318803e-03 + 1.414946947952337e-03 + 1.411297977567125e-03 + 1.407657271824714e-03 + 1.404024809794961e-03 + 1.400400570139807e-03 + 1.396784531434119e-03 + 1.393176672533590e-03 + 1.389576972970703e-03 + 1.385985412235932e-03 + 1.382401969107074e-03 + 1.378826622443783e-03 + 1.375259351219489e-03 + 1.371700134514839e-03 + 1.368148952079336e-03 + 1.364605783757036e-03 + 1.361070608632290e-03 + 1.357543405835987e-03 + 1.354024154621594e-03 + 1.350512834317403e-03 + 1.347009424934256e-03 + 1.343513906652181e-03 + 1.340026258589547e-03 + 1.336546459739890e-03 + 1.333074489680093e-03 + 1.329610329681042e-03 + 1.326153959375566e-03 + 1.322705357081586e-03 + 1.319264503327096e-03 + 1.315831378649060e-03 + 1.312405962942001e-03 + 1.308988235813027e-03 + 1.305578177302038e-03 + 1.302175767936687e-03 + 1.298780987783750e-03 + 1.295393816813521e-03 + 1.292014235092867e-03 + 1.288642222828844e-03 + 1.285277760581296e-03 + 1.281920829182064e-03 + 1.278571408463430e-03 + 1.275229478684235e-03 + 1.271895021211065e-03 + 1.268568016022571e-03 + 1.265248443161927e-03 + 1.261936283866222e-03 + 1.258631518851812e-03 + 1.255334128626978e-03 + 1.252044093890807e-03 + 1.248761395151665e-03 + 1.245486013113075e-03 + 1.242217929129610e-03 + 1.238957124307338e-03 + 1.235703579418827e-03 + 1.232457274959363e-03 + 1.229218191838193e-03 + 1.225986311430220e-03 + 1.222761615473843e-03 + 1.219544084856006e-03 + 1.216333699988417e-03 + 1.213130441964228e-03 + 1.209934292565758e-03 + 1.206745233676102e-03 + 1.203563245963205e-03 + 1.200388310525061e-03 + 1.197220409053557e-03 + 1.194059523052293e-03 + 1.190905633902454e-03 + 1.187758723052301e-03 + 1.184618772531461e-03 + 1.181485763720917e-03 + 1.178359677471923e-03 + 1.175240496495629e-03 + 1.172128202790389e-03 + 1.169022777016151e-03 + 1.165924201427151e-03 + 1.162832457974330e-03 + 1.159747527667428e-03 + 1.156669393342115e-03 + 1.153598037513975e-03 + 1.150533441195656e-03 + 1.147475586343000e-03 + 1.144424455192698e-03 + 1.141380029693999e-03 + 1.138342292070108e-03 + 1.135311224784675e-03 + 1.132286810371483e-03 + 1.129269030382949e-03 + 1.126257866687504e-03 + 1.123253302806332e-03 + 1.120255320585528e-03 + 1.117263901594027e-03 + 1.114279029333705e-03 + 1.111300685926414e-03 + 1.108328853214485e-03 + 1.105363515126287e-03 + 1.102404653695880e-03 + 1.099452250276090e-03 + 1.096506289065756e-03 + 1.093566752790314e-03 + 1.090633622975802e-03 + 1.087706882683815e-03 + 1.084786514992603e-03 + 1.081872502714538e-03 + 1.078964828755093e-03 + 1.076063476054719e-03 + 1.073168427526746e-03 + 1.070279665938792e-03 + 1.067397174442816e-03 + 1.064520936417689e-03 + 1.061650934087830e-03 + 1.058787150577005e-03 + 1.055929570192933e-03 + 1.053078175257412e-03 + 1.050232948596978e-03 + 1.047393874491941e-03 + 1.044560935952646e-03 + 1.041734115621369e-03 + 1.038913396581877e-03 + 1.036098763274602e-03 + 1.033290199394467e-03 + 1.030487686748966e-03 + 1.027691209748195e-03 + 1.024900752824401e-03 + 1.022116298137994e-03 + 1.019337829638554e-03 + 1.016565331581354e-03 + 1.013798786681050e-03 + 1.011038178744547e-03 + 1.008283492069452e-03 + 1.005534710312413e-03 + 1.002791817167788e-03 + 1.000054796401326e-03 + 9.973236317525795e-04 + 9.945983071579347e-04 + 9.918788066535795e-04 + 9.891651141399331e-04 + 9.864572135795289e-04 + 9.837550890187182e-04 + 9.810587245440681e-04 + 9.783681042165289e-04 + 9.756832121036981e-04 + 9.730040324093254e-04 + 9.703305493295432e-04 + 9.676627470403841e-04 + 9.650006098016114e-04 + 9.623441219373007e-04 + 9.596932677964791e-04 + 9.570480316324495e-04 + 9.544083978205768e-04 + 9.517743508934125e-04 + 9.491458752396962e-04 + 9.465229553012878e-04 + 9.439055756501852e-04 + 9.412937207895038e-04 + 9.386873752809525e-04 + 9.360865238076440e-04 + 9.334911509791107e-04 + 9.309012414140627e-04 + 9.283167798171848e-04 + 9.257377509839119e-04 + 9.231641396993918e-04 + 9.205959306774516e-04 + 9.180331088080401e-04 + 9.154756590138127e-04 + 9.129235660962607e-04 + 9.103768149701878e-04 + 9.078353906321772e-04 + 9.052992780955343e-04 + 9.027684623946166e-04 + 9.002429285800444e-04 + 8.977226617159664e-04 + 8.952076469091944e-04 + 8.926978693026045e-04 + 8.901933140640126e-04 + 8.876939664445818e-04 + 8.851998117353022e-04 + 8.827108351548252e-04 + 8.802270219825557e-04 + 8.777483575705740e-04 + 8.752748272927118e-04 + 8.728064165680979e-04 + 8.703431108522175e-04 + 8.678848955854838e-04 + 8.654317562117358e-04 + 8.629836782258149e-04 + 8.605406473168484e-04 + 8.581026490766350e-04 + 8.556696689660546e-04 + 8.532416927295966e-04 + 8.508187061075220e-04 + 8.484006947265324e-04 + 8.459876443379812e-04 + 8.435795407180884e-04 + 8.411763696276702e-04 + 8.387781169670006e-04 + 8.363847686436173e-04 + 8.339963104952486e-04 + 8.316127284703911e-04 + 8.292340085393665e-04 + 8.268601366269382e-04 + 8.244910987818749e-04 + 8.221268810991789e-04 + 8.197674696351961e-04 + 8.174128504795555e-04 + 8.150630097863373e-04 + 8.127179337987174e-04 + 8.103776086785577e-04 + 8.080420206116735e-04 + 8.057111559859151e-04 + 8.033850010442538e-04 + 8.010635420033148e-04 + 7.987467653572807e-04 + 7.964346575211490e-04 + 7.941272048473775e-04 + 7.918243938145987e-04 + 7.895262109139402e-04 + 7.872326426395918e-04 + 7.849436755404454e-04 + 7.826592961986925e-04 + 7.803794912312032e-04 + 7.781042473133076e-04 + 7.758335511109105e-04 + 7.735673892815593e-04 + 7.713057485643111e-04 + 7.690486157536814e-04 + 7.667959776727836e-04 + 7.645478211004869e-04 + 7.623041328912646e-04 + 7.600649000053854e-04 + 7.578301093264215e-04 + 7.555997477583347e-04 + 7.533738022910566e-04 + 7.511522599897612e-04 + 7.489351079282785e-04 + 7.467223331578882e-04 + 7.445139227962291e-04 + 7.423098639775247e-04 + 7.401101438263767e-04 + 7.379147496119391e-04 + 7.357236686066337e-04 + 7.335368879604144e-04 + 7.313543950177981e-04 + 7.291761771981462e-04 + 7.270022218267318e-04 + 7.248325162821272e-04 + 7.226670479949025e-04 + 7.205058044241288e-04 + 7.183487730730944e-04 + 7.161959414766152e-04 + 7.140472971809699e-04 + 7.119028277561113e-04 + 7.097625208231147e-04 + 7.076263641063239e-04 + 7.054943452576004e-04 + 7.033664519218169e-04 + 7.012426719956601e-04 + 6.991229932510109e-04 + 6.970074033540157e-04 + 6.948958902400331e-04 + 6.927884418689321e-04 + 6.906850461485944e-04 + 6.885856909689247e-04 + 6.864903643067344e-04 + 6.843990542306164e-04 + 6.823117487354689e-04 + 6.802284359113009e-04 + 6.781491039842488e-04 + 6.760737410664455e-04 + 6.740023352773578e-04 + 6.719348748282754e-04 + 6.698713480434448e-04 + 6.678117432465053e-04 + 6.657560487034911e-04 + 6.637042527655789e-04 + 6.616563438432147e-04 + 6.596123103782944e-04 + 6.575721408025738e-04 + 6.555358236048545e-04 + 6.535033473936704e-04 + 6.514747007198682e-04 + 6.494498721244171e-04 + 6.474288502266283e-04 + 6.454116237722280e-04 + 6.433981815196293e-04 + 6.413885120963034e-04 + 6.393826043225120e-04 + 6.373804471016686e-04 + 6.353820291728463e-04 + 6.333873394523912e-04 + 6.313963669651093e-04 + 6.294091005879305e-04 + 6.274255292885601e-04 + 6.254456421348147e-04 + 6.234694281911996e-04 + 6.214968766042923e-04 + 6.195279765738893e-04 + 6.175627172048796e-04 + 6.156010877068991e-04 + 6.136430774102346e-04 + 6.116886755862946e-04 + 6.097378715435904e-04 + 6.077906546697107e-04 + 6.058470144286753e-04 + 6.039069402835228e-04 + 6.019704216802507e-04 + 6.000374481409778e-04 + 5.981080092530985e-04 + 5.961820946588096e-04 + 5.942596940083503e-04 + 5.923407969721301e-04 + 5.904253932616448e-04 + 5.885134726736782e-04 + 5.866050250202793e-04 + 5.847000400980857e-04 + 5.827985078791194e-04 + 5.809004183470366e-04 + 5.790057613579966e-04 + 5.771145269606196e-04 + 5.752267052829598e-04 + 5.733422863841403e-04 + 5.714612604000550e-04 + 5.695836175305099e-04 + 5.677093480037018e-04 + 5.658384420678564e-04 + 5.639708900266142e-04 + 5.621066823022896e-04 + 5.602458092869138e-04 + 5.583882613744714e-04 + 5.565340290827777e-04 + 5.546831029664671e-04 + 5.528354736013446e-04 + 5.509911316015094e-04 + 5.491500676402182e-04 + 5.473122724461832e-04 + 5.454777367810608e-04 + 5.436464514412940e-04 + 5.418184072613321e-04 + 5.399935951226492e-04 + 5.381720060069473e-04 + 5.363536309736959e-04 + 5.345384609776805e-04 + 5.327264870731968e-04 + 5.309177004752346e-04 + 5.291120923593077e-04 + 5.273096539494221e-04 + 5.255103765544823e-04 + 5.237142514407170e-04 + 5.219212699733492e-04 + 5.201314236865307e-04 + 5.183447040146093e-04 + 5.165611024246747e-04 + 5.147806105331874e-04 + 5.130032200114061e-04 + 5.112289225530487e-04 + 5.094577098620987e-04 + 5.076895736854020e-04 + 5.059245058583464e-04 + 5.041624983517820e-04 + 5.024035430839573e-04 + 5.006476319990773e-04 + 4.988947572035529e-04 + 4.971449107942239e-04 + 4.953980848818115e-04 + 4.936542716805855e-04 + 4.919134634956966e-04 + 4.901756526846954e-04 + 4.884408316006080e-04 + 4.867089926403434e-04 + 4.849801282731475e-04 + 4.832542310892493e-04 + 4.815312937309208e-04 + 4.798113088560132e-04 + 4.780942690954599e-04 + 4.763801672259719e-04 + 4.746689961731605e-04 + 4.729607488395965e-04 + 4.712554181333483e-04 + 4.695529970142063e-04 + 4.678534786182833e-04 + 4.661568561056742e-04 + 4.644631226216267e-04 + 4.627722714285577e-04 + 4.610842958399921e-04 + 4.593991892076899e-04 + 4.577169450300335e-04 + 4.560375568336446e-04 + 4.543610181249096e-04 + 4.526873225594637e-04 + 4.510164638467393e-04 + 4.493484356950898e-04 + 4.476832319569833e-04 + 4.460208465382815e-04 + 4.443612733350173e-04 + 4.427045064285867e-04 + 4.410505399510805e-04 + 4.393993679504339e-04 + 4.377509846774214e-04 + 4.361053844834223e-04 + 4.344625616662297e-04 + 4.328225106365193e-04 + 4.311852259097922e-04 + 4.295507020701359e-04 + 4.279189337521271e-04 + 4.262899156467061e-04 + 4.246636425301464e-04 + 4.230401092565931e-04 + 4.214193107478168e-04 + 4.198012419839599e-04 + 4.181858979868060e-04 + 4.165732738692198e-04 + 4.149633649793705e-04 + 4.133561665739344e-04 + 4.117516738453971e-04 + 4.101498823326724e-04 + 4.085507876181731e-04 + 4.069543852399522e-04 + 4.053606707914893e-04 + 4.037696400086752e-04 + 4.021812887746215e-04 + 4.005956129436248e-04 + 3.990126084760660e-04 + 3.974322714846641e-04 + 3.958545980293214e-04 + 3.942795842513983e-04 + 3.927072264688036e-04 + 3.911375211195356e-04 + 3.895704646516968e-04 + 3.880060534869329e-04 + 3.864442842922655e-04 + 3.848851538066537e-04 + 3.833286587063809e-04 + 3.817747958651508e-04 + 3.802235622593628e-04 + 3.786749548688228e-04 + 3.771289708205180e-04 + 3.755856073392733e-04 + 3.740448616816441e-04 + 3.725067311649692e-04 + 3.709712132043737e-04 + 3.694383053790672e-04 + 3.679080053579325e-04 + 3.663803108503057e-04 + 3.648552195606523e-04 + 3.633327293646475e-04 + 3.618128382932607e-04 + 3.602955444344858e-04 + 3.587808459078391e-04 + 3.572687408998931e-04 + 3.557592277792442e-04 + 3.542523049927096e-04 + 3.527479710408145e-04 + 3.512462245019904e-04 + 3.497470640500036e-04 + 3.482504884770882e-04 + 3.467564967437580e-04 + 3.452650877985240e-04 + 3.437762605764859e-04 + 3.422900143250168e-04 + 3.408063483640538e-04 + 3.393252619896345e-04 + 3.378467546103840e-04 + 3.363708257653936e-04 + 3.348974751341996e-04 + 3.334267024660963e-04 + 3.319585075646510e-04 + 3.304928903038992e-04 + 3.290298507212495e-04 + 3.275693889604049e-04 + 3.261115052402690e-04 + 3.246561999078441e-04 + 3.232034733603981e-04 + 3.217533259984899e-04 + 3.203057585048498e-04 + 3.188607716794152e-04 + 3.174183662346357e-04 + 3.159785430822741e-04 + 3.145413032833238e-04 + 3.131066479369465e-04 + 3.116745782136557e-04 + 3.102450954058189e-04 + 3.088182010197684e-04 + 3.073938965650610e-04 + 3.059721835802734e-04 + 3.045530637916020e-04 + 3.031365390386899e-04 + 3.017226112552691e-04 + 3.003112824793533e-04 + 2.989025548234045e-04 + 2.974964304955006e-04 + 2.960929118913988e-04 + 2.946920014422941e-04 + 2.932937016150965e-04 + 2.918980151023185e-04 + 2.905049446767149e-04 + 2.891144931550728e-04 + 2.877266634923031e-04 + 2.863414587568181e-04 + 2.849588821248430e-04 + 2.835789368717610e-04 + 2.822016263526234e-04 + 2.808269540128114e-04 + 2.794549234525530e-04 + 2.780855383858511e-04 + 2.767188026160350e-04 + 2.753547199733251e-04 + 2.739932944362576e-04 + 2.726345302253411e-04 + 2.712784314751994e-04 + 2.699250024118205e-04 + 2.685742475595017e-04 + 2.672261714415124e-04 + 2.658807786371782e-04 + 2.645380739000219e-04 + 2.631980619957597e-04 + 2.618607478073471e-04 + 2.605261365239288e-04 + 2.591942332540738e-04 + 2.578650431168888e-04 + 2.565385715181067e-04 + 2.552148239188000e-04 + 2.538938058269625e-04 + 2.525755228940477e-04 + 2.512599808919393e-04 + 2.499471856899045e-04 + 2.486371432244064e-04 + 2.473298595107682e-04 + 2.460253406646765e-04 + 2.447235929605613e-04 + 2.434246227773826e-04 + 2.421284365723855e-04 + 2.408350408491505e-04 + 2.395444422583646e-04 + 2.382566475978551e-04 + 2.369716636126905e-04 + 2.356894972066169e-04 + 2.344101555067014e-04 + 2.331336455922197e-04 + 2.318599746393059e-04 + 2.305891500038487e-04 + 2.293211790903458e-04 + 2.280560693749351e-04 + 2.267938284406659e-04 + 2.255344639796373e-04 + 2.242779837481179e-04 + 2.230243955584571e-04 + 2.217737074088738e-04 + 2.205259273750273e-04 + 2.192810635194828e-04 + 2.180391240377155e-04 + 2.168001172473318e-04 + 2.155640515683406e-04 + 2.143309354202995e-04 + 2.131007772856537e-04 + 2.118735858306198e-04 + 2.106493698084787e-04 + 2.094281380089542e-04 + 2.082098992208740e-04 + 2.069946624015073e-04 + 2.057824366286796e-04 + 2.045732309577213e-04 + 2.033670545521807e-04 + 2.021639166762670e-04 + 2.009638266139778e-04 + 1.997667937615743e-04 + 1.985728276099416e-04 + 1.973819376249420e-04 + 1.961941334186818e-04 + 1.950094247288422e-04 + 1.938278211445808e-04 + 1.926493324216112e-04 + 1.914739685443153e-04 + 1.903017394244089e-04 + 1.891326549660665e-04 + 1.879667251315557e-04 + 1.868039600691931e-04 + 1.856443699312781e-04 + 1.844879648170397e-04 + 1.833347550402995e-04 + 1.821847509305592e-04 + 1.810379627269367e-04 + 1.798944008330572e-04 + 1.787540757117569e-04 + 1.776169978023503e-04 + 1.764831776083264e-04 + 1.753526257075039e-04 + 1.742253527510645e-04 + 1.731013693254543e-04 + 1.719806860311682e-04 + 1.708633135911149e-04 + 1.697492627671219e-04 + 1.686385443331759e-04 + 1.675311690584120e-04 + 1.664271477052953e-04 + 1.653264910845736e-04 + 1.642292101438652e-04 + 1.631353157524277e-04 + 1.620448187436031e-04 + 1.609577300754615e-04 + 1.598740606888992e-04 + 1.587938214812250e-04 + 1.577170233258566e-04 + 1.566436772168694e-04 + 1.555737942159133e-04 + 1.545073851968179e-04 + 1.534444610998845e-04 + 1.523850329588589e-04 + 1.513291117056277e-04 + 1.502767082718022e-04 + 1.492278336091406e-04 + 1.481824986061289e-04 + 1.471407142013266e-04 + 1.461024913960903e-04 + 1.450678410475480e-04 + 1.440367739871709e-04 + 1.430093010797408e-04 + 1.419854331666308e-04 + 1.409651810501559e-04 + 1.399485554884026e-04 + 1.389355672434459e-04 + 1.379262270311977e-04 + 1.369205454852166e-04 + 1.359185332657421e-04 + 1.349202010239166e-04 + 1.339255593445051e-04 + 1.329346186642912e-04 + 1.319473893926901e-04 + 1.309638820305585e-04 + 1.299841069283569e-04 + 1.290080743627276e-04 + 1.280357946577360e-04 + 1.270672779908064e-04 + 1.261025344295187e-04 + 1.251415740258344e-04 + 1.241844068414831e-04 + 1.232310428585276e-04 + 1.222814917974582e-04 + 1.213357634573326e-04 + 1.203938676644921e-04 + 1.194558139769228e-04 + 1.185216119071049e-04 + 1.175912709437735e-04 + 1.166648004395201e-04 + 1.157422096820540e-04 + 1.148235078941047e-04 + 1.139087041565015e-04 + 1.129978074560730e-04 + 1.120908266963163e-04 + 1.111877706801771e-04 + 1.102886481165339e-04 + 1.093934676008822e-04 + 1.085022375478793e-04 + 1.076149663238430e-04 + 1.067316622735248e-04 + 1.058523335072715e-04 + 1.049769880021785e-04 + 1.041056336506420e-04 + 1.032382782134568e-04 + 1.023749293560659e-04 + 1.015155946454073e-04 + 1.006602814254268e-04 + 9.980899691604087e-05 + 9.896174827822380e-05 + 9.811854249648769e-05 + 9.727938640362722e-05 + 9.644428669167931e-05 + 9.561324990949941e-05 + 9.478628247235907e-05 + 9.396339064407664e-05 + 9.314458052650697e-05 + 9.232985807344924e-05 + 9.151922908266137e-05 + 9.071269919463392e-05 + 8.991027389908417e-05 + 8.911195851702552e-05 + 8.831775819982511e-05 + 8.752767793866873e-05 + 8.674172256023528e-05 + 8.595989672073575e-05 + 8.518220490590348e-05 + 8.440865141920385e-05 + 8.363924039733809e-05 + 8.287397580722622e-05 + 8.211286142104977e-05 + 8.135590084051729e-05 + 8.060309749193613e-05 + 7.985445459658365e-05 + 7.910997520302950e-05 + 7.836966218298747e-05 + 7.763351820320998e-05 + 7.690154574559998e-05 + 7.617374709914362e-05 + 7.545012436145964e-05 + 7.473067944430294e-05 + 7.401541405207780e-05 + 7.330432968888297e-05 + 7.259742767376570e-05 + 7.189470911942744e-05 + 7.119617492698978e-05 + 7.050182580949816e-05 + 6.981166227552030e-05 + 6.912568461899398e-05 + 6.844389294104750e-05 + 6.776628713300132e-05 + 6.709286687130013e-05 + 6.642363163388969e-05 + 6.575858067871575e-05 + 6.509771305493562e-05 + 6.444102761503343e-05 + 6.378852298738557e-05 + 6.314019758583242e-05 + 6.249604962295056e-05 + 6.185607708979005e-05 + 6.122027775903875e-05 + 6.058864919749181e-05 + 5.996118875684596e-05 + 5.933789356597989e-05 + 5.871876053888907e-05 + 5.810378637807827e-05 + 5.749296757228591e-05 + 5.688630039241354e-05 + 5.628378087841946e-05 + 5.568540486517338e-05 + 5.509116797959273e-05 + 5.450106561933422e-05 + 5.391509296529475e-05 + 5.333324497665832e-05 + 5.275551640753726e-05 + 5.218190179953343e-05 + 5.161239545977182e-05 + 5.104699148146081e-05 + 5.048568375913861e-05 + 4.992846596763329e-05 + 4.937533154817934e-05 + 4.882627374147808e-05 + 4.828128557792042e-05 + 4.774035986717692e-05 + 4.720348921279551e-05 + 4.667066599018748e-05 + 4.614188237688400e-05 + 4.561713035194944e-05 + 4.509640165438987e-05 + 4.457968783032909e-05 + 4.406698023190481e-05 + 4.355826996891768e-05 + 4.305354796420506e-05 + 4.255280495560636e-05 + 4.205603144616347e-05 + 4.156321774032957e-05 + 4.107435395613752e-05 + 4.058942999665175e-05 + 4.010843556869507e-05 + 3.963136019085871e-05 + 3.915819316952545e-05 + 3.868892361719641e-05 + 3.822354046226270e-05 + 3.776203244031561e-05 + 3.730438809005640e-05 + 3.685059575689182e-05 + 3.640064360230198e-05 + 3.595451960373741e-05 + 3.551221155134442e-05 + 3.507370705450421e-05 + 3.463899354241650e-05 + 3.420805825588243e-05 + 3.378088825986720e-05 + 3.335747045272196e-05 + 3.293779155463552e-05 + 3.252183811026268e-05 + 3.210959649877579e-05 + 3.170105292073684e-05 + 3.129619341367949e-05 + 3.089500386055728e-05 + 3.049746997239612e-05 + 3.010357730585059e-05 + 2.971331126487755e-05 + 2.932665707619367e-05 + 2.894359982344077e-05 + 2.856412445132613e-05 + 2.818821573877814e-05 + 2.781585831987375e-05 + 2.744703669454755e-05 + 2.708173520948728e-05 + 2.671993807124836e-05 + 2.636162935767626e-05 + 2.600679300301263e-05 + 2.565541280257304e-05 + 2.530747242805460e-05 + 2.496295542635910e-05 + 2.462184521206604e-05 + 2.428412507785163e-05 + 2.394977819771233e-05 + 2.361878762181457e-05 + 2.329113628448998e-05 + 2.296680701293541e-05 + 2.264578251757474e-05 + 2.232804539557172e-05 + 2.201357814530585e-05 + 2.170236315904943e-05 + 2.139438272306276e-05 + 2.108961903561866e-05 + 2.078805419745760e-05 + 2.048967020582218e-05 + 2.019444897050880e-05 + 1.990237231614296e-05 + 1.961342197777572e-05 + 1.932757961462368e-05 + 1.904482680353188e-05 + 1.876514502948172e-05 + 1.848851571515060e-05 + 1.821492021640795e-05 + 1.794433980831370e-05 + 1.767675569461099e-05 + 1.741214902258527e-05 + 1.715050088166273e-05 + 1.689179228451716e-05 + 1.663600419203502e-05 + 1.638311752659296e-05 + 1.613311314360082e-05 + 1.588597184706167e-05 + 1.564167440067926e-05 + 1.540020151829502e-05 + 1.516153387453479e-05 + 1.492565211244357e-05 + 1.469253682958783e-05 + 1.446216858599219e-05 + 1.423452791421707e-05 + 1.400959531801727e-05 + 1.378735127470914e-05 + 1.356777623611474e-05 + 1.335085063337062e-05 + 1.313655487876277e-05 + 1.292486936494610e-05 + 1.271577446639333e-05 + 1.250925054517824e-05 + 1.230527796605363e-05 + 1.210383708165599e-05 + 1.190490823144681e-05 + 1.170847175649016e-05 + 1.151450799717159e-05 + 1.132299729345123e-05 + 1.113391999104486e-05 + 1.094725644586371e-05 + 1.076298702423590e-05 + 1.058109209097755e-05 + 1.040155202830912e-05 + 1.022434724511555e-05 + 1.004945815519835e-05 + 9.876865191434875e-06 + 9.706548817576976e-06 + 9.538489515829050e-06 + 9.372667791395497e-06 + 9.209064181113714e-06 + 9.047659251528417e-06 + 8.888433598428113e-06 + 8.731367852817854e-06 + 8.576442682615395e-06 + 8.423638791088146e-06 + 8.272936922653283e-06 + 8.124317863654203e-06 + 7.977762440936675e-06 + 7.833251528895281e-06 + 7.690766049713759e-06 + 7.550286971453687e-06 + 7.411795314787993e-06 + 7.275272152381047e-06 + 7.140698608042407e-06 + 7.008055865069554e-06 + 6.877325162999093e-06 + 6.748487797069182e-06 + 6.621525126924672e-06 + 6.496418573295794e-06 + 6.373149617974847e-06 + 6.251699810845691e-06 + 6.132050767139283e-06 + 6.014184168887862e-06 + 5.898081770597224e-06 + 5.783725394973654e-06 + 5.671096936050662e-06 + 5.560178365641361e-06 + 5.450951726966341e-06 + 5.343399138917566e-06 + 5.237502802602254e-06 + 5.133244993336976e-06 + 5.030608065950253e-06 + 4.929574461382145e-06 + 4.830126698086031e-06 + 4.732247378331277e-06 + 4.635919192753656e-06 + 4.541124912789582e-06 + 4.447847398958468e-06 + 4.356069602328335e-06 + 4.265774557056776e-06 + 4.176945389932598e-06 + 4.089565320281935e-06 + 4.003617653697645e-06 + 3.919085793399028e-06 + 3.835953236362346e-06 + 3.754203567594348e-06 + 3.673820472678765e-06 + 3.594787733829004e-06 + 3.517089224074456e-06 + 3.440708918621393e-06 + 3.365630891050476e-06 + 3.291839308866544e-06 + 3.219318444550688e-06 + 3.148052669614368e-06 + 3.078026451876596e-06 + 3.009224366838337e-06 + 2.941631088840265e-06 + 2.875231390541817e-06 + 2.810010156134118e-06 + 2.745952369256776e-06 + 2.683043113446972e-06 + 2.621267584374269e-06 + 2.560611078236376e-06 + 2.501058994098514e-06 + 2.442596843868032e-06 + 2.385210240033010e-06 + 2.328884899906223e-06 + 2.273606655048426e-06 + 2.219361438179688e-06 + 2.166135288678882e-06 + 2.113914360085187e-06 + 2.062684907096663e-06 + 2.012433292648363e-06 + 1.963145994708785e-06 + 1.914809593193956e-06 + 1.867410777738679e-06 + 1.820936351687259e-06 + 1.775373220609589e-06 + 1.730708401732302e-06 + 1.686929024947410e-06 + 1.644022323067757e-06 + 1.601975642837270e-06 + 1.560776441656341e-06 + 1.520412279298016e-06 + 1.480870830315665e-06 + 1.442139880698395e-06 + 1.404207319625165e-06 + 1.367061149777226e-06 + 1.330689483155573e-06 + 1.295080535963615e-06 + 1.260222640873472e-06 + 1.226104237141460e-06 + 1.192713867093549e-06 + 1.160040189500492e-06 + 1.128071969424555e-06 + 1.096798076008267e-06 + 1.066207493417804e-06 + 1.036289310659725e-06 + 1.007032721493895e-06 + 9.784270338592895e-07 + 9.504616588874799e-07 + 9.231261128777845e-07 + 8.964100256766087e-07 + 8.703031286825232e-07 + 8.447952585150839e-07 + 8.198763641874936e-07 + 7.955364948286083e-07 + 7.717658049346632e-07 + 7.485545598914059e-07 + 7.258931238786546e-07 + 7.037719665410901e-07 + 6.821816664988581e-07 + 6.611128998791421e-07 + 6.405564483055948e-07 + 6.205032003278225e-07 + 6.009441408121614e-07 + 5.818703600152187e-07 + 5.632730528626383e-07 + 5.451435094097432e-07 + 5.274731247677268e-07 + 5.102533965000488e-07 + 4.934759162480692e-07 + 4.771323800991179e-07 + 4.612145841662162e-07 + 4.457144176881476e-07 + 4.306238737382497e-07 + 4.159350428538716e-07 + 4.016401077051372e-07 + 3.877313539402903e-07 + 3.742011622647174e-07 + 3.610420046499709e-07 + 3.482464547968944e-07 + 3.358071790150475e-07 + 3.237169340794661e-07 + 3.119685770955318e-07 + 3.005550554375413e-07 + 2.894694062090586e-07 + 2.787047650882795e-07 + 2.682543557659438e-07 + 2.581114909968296e-07 + 2.482695801165890e-07 + 2.387221182727572e-07 + 2.294626890008751e-07 + 2.204849703818711e-07 + 2.117827241548630e-07 + 2.033497996067267e-07 + 1.951801384624956e-07 + 1.872677641420447e-07 + 1.796067867093452e-07 + 1.721914062527642e-07 + 1.650159027896018e-07 + 1.580746421942365e-07 + 1.513620776690125e-07 + 1.448727406655565e-07 + 1.386012477684331e-07 + 1.325423000867771e-07 + 1.266906752868051e-07 + 1.210412352836648e-07 + 1.155889239131470e-07 + 1.103287600176973e-07 + 1.052558455547364e-07 + 1.003653617115032e-07 + 9.565256321109978e-08 + 9.111278671292873e-08 + 8.674144556415159e-08 + 8.253402527034383e-08 + 7.848609177536523e-08 + 7.459328520671134e-08 + 7.085131661573615e-08 + 6.725597593242166e-08 + 6.380312478868793e-08 + 6.048869454868003e-08 + 5.730869376312298e-08 + 5.425920030057914e-08 + 5.133636064443935e-08 + 4.853639660958214e-08 + 4.585559704969457e-08 + 4.329031836991616e-08 + 4.083699031045398e-08 + 3.849210751108346e-08 + 3.625223113812888e-08 + 3.411399355038575e-08 + 3.207408998824199e-08 + 3.012928121511996e-08 + 2.827639696078167e-08 + 2.651232793166280e-08 + 2.483402934338396e-08 + 2.323852311474514e-08 + 2.172289034680298e-08 + 2.028427559044146e-08 + 1.891988778877689e-08 + 1.762699339728036e-08 + 1.640292125402531e-08 + 1.524506224991720e-08 + 1.415086320949184e-08 + 1.311783222446413e-08 + 1.214353712508316e-08 + 1.122560019257377e-08 + 1.036170378687137e-08 + 9.549587722603005e-09 + 8.787044877843281e-09 + 8.071926961605364e-09 + 7.402140903161946e-09 + 6.775645388472587e-09 + 6.190456604129221e-09 + 5.644643792323680e-09 + 5.136326726146161e-09 + 4.663681262833891e-09 + 4.224934232596794e-09 + 3.818361845837701e-09 + 3.442294891302550e-09 + 3.095113141246544e-09 + 2.775244665814773e-09 + 2.481170514027403e-09 + 2.211418834557044e-09 + 1.964565051498559e-09 + 1.739235878927056e-09 + 1.534103359980556e-09 + 1.347885831336700e-09 + 1.179351163642234e-09 + 1.027310894648576e-09 + 8.906218977827446e-10 + 7.681887799049897e-10 + 6.589582548472836e-10 + 5.619214238374888e-10 + 4.761152985830568e-10 + 4.006175343477256e-10 + 3.345492227248809e-10 + 2.770755362128679e-10 + 2.274009179016229e-10 + 1.847722840116674e-10 + 1.484788129161787e-10 + 1.178476648704315e-10 + 9.224748788184573e-11 + 7.108739902161543e-11 + 5.381328706422649e-11 + 3.991151299277479e-11 + 2.890715266694438e-11 + 2.036091648096713e-11 + 1.387293445657948e-11 + 9.080348320515963e-12 + 5.654863833225597e-12 + 3.306507674167889e-12 + 1.780689492983021e-12 + 8.563646514161430e-13 + 3.496037276049943e-13 + 1.104943293034196e-13 + 2.161027650041889e-14 + 5.028049336448720e-16 + 0.000000000000000e+00 + 0.000000000000000e+00 + 7.485272593961791e+04 + 1.493519318697679e+05 + 2.234970831294996e+05 + 2.972876533345640e+05 + 3.707231243774131e+05 + 4.438029864272003e+05 + 5.165267379297798e+05 + 5.888938856077072e+05 + 6.609039444602393e+05 + 7.325564377633340e+05 + 8.038508970696502e+05 + 8.747868622085482e+05 + 9.453638812860892e+05 + 1.015581510685036e+06 + 1.085439315064852e+06 + 1.154936867361703e+06 + 1.224073748788454e+06 + 1.292849548834672e+06 + 1.361263865266626e+06 + 1.429316304127287e+06 + 1.497006479736322e+06 + 1.564334014690106e+06 + 1.631298539861710e+06 + 1.697899694400910e+06 + 1.764137125734180e+06 + 1.830010489564698e+06 + 1.895519449872339e+06 + 1.960663678913685e+06 + 2.025442857222013e+06 + 2.089856673607306e+06 + 2.153904825156247e+06 + 2.217587017232217e+06 + 2.280902963475303e+06 + 2.343852385802290e+06 + 2.406435014406665e+06 + 2.468650587758616e+06 + 2.530498852605031e+06 + 2.591979563969503e+06 + 2.653092485152322e+06 + 2.713837387730482e+06 + 2.774214051557675e+06 + 2.834222264764299e+06 + 2.893861823757447e+06 + 2.953132533220919e+06 + 3.012034206115212e+06 + 3.070566663677527e+06 + 3.128729735421764e+06 + 3.186523259138526e+06 + 3.243947080895115e+06 + 3.301001055035538e+06 + 3.357685044180497e+06 + 3.413998919227402e+06 + 3.469942559350358e+06 + 3.525515852000176e+06 + 3.580718692904367e+06 + 3.635550986067140e+06 + 3.690012643769410e+06 + 3.744103586568788e+06 + 3.797823743299592e+06 + 3.851173051072835e+06 + 3.904151455276238e+06 + 3.956758909574216e+06 + 4.008995375907890e+06 + 4.060860824495079e+06 + 4.112355233830309e+06 + 4.163478590684799e+06 + 4.214230890106475e+06 + 4.264612135419963e+06 + 4.314622338226588e+06 + 4.364261518404378e+06 + 4.413529704108060e+06 + 4.462426931769069e+06 + 4.510953246095533e+06 + 4.559108700072286e+06 + 4.606893354960858e+06 + 4.654307280299488e+06 + 4.701350553903108e+06 + 4.748023261863358e+06 + 4.794325498548575e+06 + 4.840257366603798e+06 + 4.885818976950768e+06 + 4.931010448787929e+06 + 4.975831909590418e+06 + 5.020283495110085e+06 + 5.064365349375471e+06 + 5.108077624691823e+06 + 5.151420481641092e+06 + 5.194394089081923e+06 + 5.236998624149668e+06 + 5.279234272256376e+06 + 5.321101227090800e+06 + 5.362599690618395e+06 + 5.403729873081312e+06 + 5.444491992998408e+06 + 5.484886277165242e+06 + 5.524912960654069e+06 + 5.564572286813851e+06 + 5.603864507270245e+06 + 5.642789881925615e+06 + 5.681348678959022e+06 + 5.719541174826232e+06 + 5.757367654259708e+06 + 5.794828410268617e+06 + 5.831923744138825e+06 + 5.868653965432902e+06 + 5.905019391990117e+06 + 5.941020349926441e+06 + 5.976657173634544e+06 + 6.011930205783804e+06 + 6.046839797320290e+06 + 6.081386307466779e+06 + 6.115570103722748e+06 + 6.149391561864376e+06 + 6.182851065944540e+06 + 6.215949008292822e+06 + 6.248685789515501e+06 + 6.281061818495561e+06 + 6.313077512392686e+06 + 6.344733296643257e+06 + 6.376029604960365e+06 + 6.406966879333793e+06 + 6.437545570030033e+06 + 6.467766135592271e+06 + 6.497629042840399e+06 + 6.527134766871008e+06 + 6.556283791057392e+06 + 6.585076607049545e+06 + 6.613513714774162e+06 + 6.641595622434638e+06 + 6.669322846511072e+06 + 6.696695911760264e+06 + 6.723715351215711e+06 + 6.750381706187615e+06 + 6.776695526262878e+06 + 6.802657369305105e+06 + 6.828267801454599e+06 + 6.853527397128366e+06 + 6.878436739020114e+06 + 6.902996418100249e+06 + 6.927207033615881e+06 + 6.951069193090819e+06 + 6.974583512325577e+06 + 6.997750615397365e+06 + 7.020571134660101e+06 + 7.043045710744397e+06 + 7.065174992557568e+06 + 7.086959637283633e+06 + 7.108400310383311e+06 + 7.129497685594021e+06 + 7.150252444929884e+06 + 7.170665278681723e+06 + 7.190736885417059e+06 + 7.210467971980117e+06 + 7.229859253491821e+06 + 7.248911453349800e+06 + 7.267625303228384e+06 + 7.286001543078595e+06 + 7.304040921128170e+06 + 7.321744193881537e+06 + 7.339112126119829e+06 + 7.356145490900878e+06 + 7.372845069559221e+06 + 7.389211651706094e+06 + 7.405246035229432e+06 + 7.420949026293878e+06 + 7.436321439340766e+06 + 7.451364097088138e+06 + 7.466077830530737e+06 + 7.480463478940005e+06 + 7.494521889864086e+06 + 7.508253919127826e+06 + 7.521660430832772e+06 + 7.534742297357169e+06 + 7.547500399355968e+06 + 7.559935625760819e+06 + 7.572048873780073e+06 + 7.583841048898782e+06 + 7.595313064878696e+06 + 7.606465843758276e+06 + 7.617300315852673e+06 + 7.627817419753745e+06 + 7.638018102330050e+06 + 7.647903318726848e+06 + 7.657474032366097e+06 + 7.666731214946462e+06 + 7.675675846443305e+06 + 7.684308915108687e+06 + 7.692631417471377e+06 + 7.700644358336839e+06 + 7.708348750787240e+06 + 7.715745616181449e+06 + 7.722835984155037e+06 + 7.729620892620270e+06 + 7.736101387766127e+06 + 7.742278524058277e+06 + 7.748153364239094e+06 + 7.753726979327655e+06 + 7.759000448619737e+06 + 7.763974859687817e+06 + 7.768651308381077e+06 + 7.773030898825390e+06 + 7.777114743423343e+06 + 7.780903962854218e+06 + 7.784399686073998e+06 + 7.787603050315368e+06 + 7.790515201087713e+06 + 7.793137292177119e+06 + 7.795470485646380e+06 + 7.797515951834979e+06 + 7.799274869359110e+06 + 7.800748425111664e+06 + 7.801937814262233e+06 + 7.802844240257111e+06 + 7.803468914819297e+06 + 7.803813057948484e+06 + 7.803877897921070e+06 + 7.803664671290156e+06 + 7.803174622885538e+06 + 7.802409005813722e+06 + 7.801369081457905e+06 + 7.800056119477995e+06 + 7.798471397810592e+06 + 7.796616202669007e+06 + 7.794491828543244e+06 + 7.792099578200010e+06 + 7.789440762682715e+06 + 7.786516701311473e+06 + 7.783328721683091e+06 + 7.779878159671083e+06 + 7.776166359425665e+06 + 7.772194673373749e+06 + 7.767964462218953e+06 + 7.763477094941595e+06 + 7.758733948798692e+06 + 7.753736409323964e+06 + 7.748485870327833e+06 + 7.742983733897421e+06 + 7.737231410396548e+06 + 7.731230318465743e+06 + 7.724981885022229e+06 + 7.718487545259933e+06 + 7.711748742649483e+06 + 7.704766928938209e+06 + 7.697543564150140e+06 + 7.690080116586007e+06 + 7.682378062823243e+06 + 7.674438887715982e+06 + 7.666264084395060e+06 + 7.657855154268012e+06 + 7.649213607019073e+06 + 7.640340960609185e+06 + 7.631238741275986e+06 + 7.621908483533815e+06 + 7.612351730173716e+06 + 7.602570032263434e+06 + 7.592564949147409e+06 + 7.582338048446788e+06 + 7.571890906059416e+06 + 7.561225106159844e+06 + 7.550342241199316e+06 + 7.539243911905785e+06 + 7.527931727283904e+06 + 7.516407304615024e+06 + 7.504672269457198e+06 + 7.492728241314434e+06 + 7.480576638153253e+06 + 7.468218723741564e+06 + 7.455655760425863e+06 + 7.442889013018662e+06 + 7.429919748798485e+06 + 7.416749237509867e+06 + 7.403378751363355e+06 + 7.389809565035504e+06 + 7.376042955668893e+06 + 7.362080202872100e+06 + 7.347922588719724e+06 + 7.333571397752370e+06 + 7.319027916976659e+06 + 7.304293435865226e+06 + 7.289369246356713e+06 + 7.274256642855777e+06 + 7.258956922233087e+06 + 7.243471383825325e+06 + 7.227801329435183e+06 + 7.211948063331366e+06 + 7.195912892248592e+06 + 7.179697125387593e+06 + 7.163302074415106e+06 + 7.146729053463890e+06 + 7.129979379132709e+06 + 7.113054370486340e+06 + 7.095955349055575e+06 + 7.078683638837219e+06 + 7.061240566294081e+06 + 7.043627460354994e+06 + 7.025845652414794e+06 + 7.007896476334333e+06 + 6.989781268440476e+06 + 6.971501367526096e+06 + 6.953058114850082e+06 + 6.934452854137335e+06 + 6.915686931578767e+06 + 6.896761695831302e+06 + 6.877678498017876e+06 + 6.858438691727439e+06 + 6.839043633014950e+06 + 6.819494680401385e+06 + 6.799793194873727e+06 + 6.779940539884974e+06 + 6.759938081354136e+06 + 6.739787187666233e+06 + 6.719489229672301e+06 + 6.699045580689385e+06 + 6.678457616500544e+06 + 6.657726715354848e+06 + 6.636854257967380e+06 + 6.615841627519235e+06 + 6.594690209657516e+06 + 6.573401392495350e+06 + 6.551976566611862e+06 + 6.530417125052197e+06 + 6.508724463327511e+06 + 6.486899979414972e+06 + 6.464945073757762e+06 + 6.442861149265066e+06 + 6.420649611312096e+06 + 6.398311867740063e+06 + 6.375849328856199e+06 + 6.353263407433745e+06 + 6.330555518711952e+06 + 6.307727080396090e+06 + 6.284779512657427e+06 + 6.261714238133261e+06 + 6.238532681926889e+06 + 6.215236271607627e+06 + 6.191826437210800e+06 + 6.168304611237747e+06 + 6.144672228655818e+06 + 6.120930726898375e+06 + 6.097081545864792e+06 + 6.073126127920459e+06 + 6.049065917896771e+06 + 6.024902363091142e+06 + 6.000636913266994e+06 + 5.976271020653763e+06 + 5.951806139946896e+06 + 5.927243728307854e+06 + 5.902585245364108e+06 + 5.877832153209144e+06 + 5.852985916402456e+06 + 5.828048001969552e+06 + 5.803019879401957e+06 + 5.777903020657199e+06 + 5.752698900158828e+06 + 5.727408994796395e+06 + 5.702034783925475e+06 + 5.676577749367647e+06 + 5.651039375410506e+06 + 5.625421148807654e+06 + 5.599724558778713e+06 + 5.573951097009313e+06 + 5.548102257651095e+06 + 5.522179537321717e+06 + 5.496184435104840e+06 + 5.470118452550147e+06 + 5.443983093673326e+06 + 5.417779864956085e+06 + 5.391510275346133e+06 + 5.365175836257203e+06 + 5.338778061569033e+06 + 5.312318467627374e+06 + 5.285798573243992e+06 + 5.259219899696662e+06 + 5.232583970729172e+06 + 5.205892312551324e+06 + 5.179146453838928e+06 + 5.152347925733812e+06 + 5.125498261843814e+06 + 5.098598998242779e+06 + 5.071651673470572e+06 + 5.044657828533064e+06 + 5.017619006902143e+06 + 4.990536754515706e+06 + 4.963412619777663e+06 + 4.936248153557934e+06 + 4.909044909192459e+06 + 4.881804442483181e+06 + 4.854528311698059e+06 + 4.827218077571064e+06 + 4.799875303302180e+06 + 4.772501554557402e+06 + 4.745098399468737e+06 + 4.717667408634203e+06 + 4.690210155117837e+06 + 4.662728214449679e+06 + 4.635223164625784e+06 + 4.607696586108224e+06 + 4.580150061825077e+06 + 4.552585177170437e+06 + 4.525003520004408e+06 + 4.497406680653105e+06 + 4.469796251908661e+06 + 4.442173829029216e+06 + 4.414541009738924e+06 + 4.386899394227949e+06 + 4.359250585152469e+06 + 4.331596187634676e+06 + 4.303937809262771e+06 + 4.276277060090966e+06 + 4.248615552639492e+06 + 4.220954901894585e+06 + 4.193296725308497e+06 + 4.165642642799490e+06 + 4.137994276751838e+06 + 4.110353252015833e+06 + 4.082721195907769e+06 + 4.055099738209962e+06 + 4.027490511170732e+06 + 3.999895149504419e+06 + 3.972315290391369e+06 + 3.944752573477943e+06 + 3.917208640876513e+06 + 3.889685137165464e+06 + 3.862183709389194e+06 + 3.834706007058111e+06 + 3.807253682148634e+06 + 3.779828389103201e+06 + 3.752431784830255e+06 + 3.725065528704253e+06 + 3.697731282565667e+06 + 3.670430710720977e+06 + 3.643165479942679e+06 + 3.615937259469279e+06 + 3.588747721005293e+06 + 3.561598538721256e+06 + 3.534491389253709e+06 + 3.507427951705208e+06 + 3.480409907644318e+06 + 3.453438941105620e+06 + 3.426516738589706e+06 + 3.399644989063177e+06 + 3.372825383958653e+06 + 3.346070405300663e+06 + 3.319465764034668e+06 + 3.293075510459727e+06 + 3.266878224028187e+06 + 3.240869303162930e+06 + 3.215052515525467e+06 + 3.189425288821125e+06 + 3.163986116962672e+06 + 3.138734196986282e+06 + 3.113668261011591e+06 + 3.088787111422079e+06 + 3.064089610843659e+06 + 3.039574592322599e+06 + 3.015240898358055e+06 + 2.991087379108502e+06 + 2.967112887579310e+06 + 2.943316282301805e+06 + 2.919696425519270e+06 + 2.896252185185970e+06 + 2.872982434032476e+06 + 2.849886048305633e+06 + 2.826961910405915e+06 + 2.804208907130155e+06 + 2.781625929123051e+06 + 2.759211873644148e+06 + 2.736965641930875e+06 + 2.714886139213983e+06 + 2.692972277509980e+06 + 2.671222972611625e+06 + 2.649637144535781e+06 + 2.628213719738566e+06 + 2.606951628696007e+06 + 2.585849806893141e+06 + 2.564907195391811e+06 + 2.544122739173453e+06 + 2.523495389008342e+06 + 2.503024101022326e+06 + 2.482707834844927e+06 + 2.462545556054412e+06 + 2.442536236120740e+06 + 2.422678849863131e+06 + 2.402972377820649e+06 + 2.383415806334849e+06 + 2.364008125120872e+06 + 2.344748329835404e+06 + 2.325635421794777e+06 + 2.306668405813749e+06 + 2.287846292982958e+06 + 2.269168099757709e+06 + 2.250632846050586e+06 + 2.232239558087812e+06 + 2.213987266957964e+06 + 2.195875007435864e+06 + 2.177901821473463e+06 + 2.160066755143500e+06 + 2.142368857948063e+06 + 2.124807187017495e+06 + 2.107380803567688e+06 + 2.090088772295509e+06 + 2.072930165358991e+06 + 2.055904058912681e+06 + 2.039009532618940e+06 + 2.022245673041180e+06 + 2.005611571515091e+06 + 1.989106323649552e+06 + 1.972729030298793e+06 + 1.956478797095825e+06 + 1.940354734917566e+06 + 1.924355960016194e+06 + 1.908481592593613e+06 + 1.892730757829583e+06 + 1.877102587255698e+06 + 1.861596215902473e+06 + 1.846210783186639e+06 + 1.830945435012332e+06 + 1.815799321323061e+06 + 1.800771597138300e+06 + 1.785861422681660e+06 + 1.771067961851037e+06 + 1.756390384114008e+06 + 1.741827864373811e+06 + 1.727379581118251e+06 + 1.713044718232857e+06 + 1.698822464839031e+06 + 1.684712013805151e+06 + 1.670712563808684e+06 + 1.656823318006428e+06 + 1.643043483055245e+06 + 1.629372271790869e+06 + 1.615808901794204e+06 + 1.602352594044968e+06 + 1.589002574975609e+06 + 1.575758076322615e+06 + 1.562618333634041e+06 + 1.549582587186907e+06 + 1.536650081999105e+06 + 1.523820067124634e+06 + 1.511091797064626e+06 + 1.498464530780005e+06 + 1.485937531189585e+06 + 1.473510066471004e+06 + 1.461181408848471e+06 + 1.448950834625962e+06 + 1.436817625926470e+06 + 1.424781068397768e+06 + 1.412840451407005e+06 + 1.400995070309470e+06 + 1.389244224245752e+06 + 1.377587216393601e+06 + 1.366023355231714e+06 + 1.354551952598923e+06 + 1.343172324427429e+06 + 1.331883792566280e+06 + 1.320685682335073e+06 + 1.309577322956444e+06 + 1.298558048406515e+06 + 1.287627196362487e+06 + 1.276784109496439e+06 + 1.266028134784103e+06 + 1.255358622320226e+06 + 1.244774926866806e+06 + 1.234276408467881e+06 + 1.223862430240984e+06 + 1.213532358913532e+06 + 1.203285566621101e+06 + 1.193121428991948e+06 + 1.183039325468658e+06 + 1.173038640304339e+06 + 1.163118761212139e+06 + 1.153279079987504e+06 + 1.143518992564451e+06 + 1.133837898317260e+06 + 1.124235201394960e+06 + 1.114710310121780e+06 + 1.105262636013577e+06 + 1.095891594215875e+06 + 1.086596604396163e+06 + 1.077377090233802e+06 + 1.068232479242110e+06 + 1.059162202266971e+06 + 1.050165693700918e+06 + 1.041242393088349e+06 + 1.032391743039430e+06 + 1.023613189178869e+06 + 1.014906181731556e+06 + 1.006270174355871e+06 + 9.977046244036794e+05 + 9.892089935677024e+05 + 9.807827465832273e+05 + 9.724253516436865e+05 + 9.641362810046984e+05 + 9.559150102252770e+05 + 9.477610188719215e+05 + 9.396737899139688e+05 + 9.316528091743080e+05 + 9.236975665277143e+05 + 9.158075561735997e+05 + 9.079822751134991e+05 + 9.002212236533747e+05 + 8.925239057014534e+05 + 8.848898281604102e+05 + 8.773185021612709e+05 + 8.698094424648809e+05 + 8.623621663528095e+05 + 8.549761944053203e+05 + 8.476510510446843e+05 + 8.403862637513808e+05 + 8.331813638606276e+05 + 8.260358860837971e+05 + 8.189493675787508e+05 + 8.119213484350282e+05 + 8.049513730504208e+05 + 7.980389891667470e+05 + 7.911837471192866e+05 + 7.843852003599521e+05 + 7.776429053419405e+05 + 7.709564221446526e+05 + 7.643253140173181e+05 + 7.577491471803443e+05 + 7.512274911598503e+05 + 7.447599180231568e+05 + 7.383460026539576e+05 + 7.319853241781880e+05 + 7.256774641850799e+05 + 7.194220067146936e+05 + 7.132185395309449e+05 + 7.070666529520636e+05 + 7.009659400728574e+05 + 6.949159975085063e+05 + 6.889164244086053e+05 + 6.829668228095188e+05 + 6.770667979456050e+05 + 6.712159574726904e+05 + 6.654139120281750e+05 + 6.596602754201142e+05 + 6.539546638052445e+05 + 6.482966962660485e+05 + 6.426859949531512e+05 + 6.371221843431445e+05 + 6.316048918617199e+05 + 6.261337478197705e+05 + 6.207083848228143e+05 + 6.153284385055641e+05 + 6.099935472682050e+05 + 6.047033517354903e+05 + 5.994574954765684e+05 + 5.942556247644721e+05 + 5.890973881315375e+05 + 5.839824370501742e+05 + 5.789104255366600e+05 + 5.738810098259439e+05 + 5.688938490610282e+05 + 5.639486048510919e+05 + 5.590449410545636e+05 + 5.541825244030216e+05 + 5.493610239467514e+05 + 5.445801109611018e+05 + 5.398394595653637e+05 + 5.351387461239359e+05 + 5.304776492529869e+05 + 5.258558503354813e+05 + 5.212730328842620e+05 + 5.167288826663374e+05 + 5.122230881980868e+05 + 5.077553400369428e+05 + 5.033253309731948e+05 + 4.989327564601310e+05 + 4.945773139811803e+05 + 4.902587033143605e+05 + 4.859766266490913e+05 + 4.817307881770549e+05 + 4.775208945372272e+05 + 4.733466546121029e+05 + 4.692077791818720e+05 + 4.651039814988278e+05 + 4.610349770333872e+05 + 4.570004830895544e+05 + 4.530002193970305e+05 + 4.490339078641191e+05 + 4.451012721716975e+05 + 4.412020383482487e+05 + 4.373359346346440e+05 + 4.335026910461138e+05 + 4.297020398291695e+05 + 4.259337153289251e+05 + 4.221974536699117e+05 + 4.184929932504728e+05 + 4.148200744355357e+05 + 4.111784393468680e+05 + 4.075678324287459e+05 + 4.039879999559653e+05 + 4.004386899065928e+05 + 3.969196525836200e+05 + 3.934306400492930e+05 + 3.899714060581240e+05 + 3.865417066557175e+05 + 3.831412995849459e+05 + 3.797699442729113e+05 + 3.764274023566474e+05 + 3.731134371233769e+05 + 3.698278135622827e+05 + 3.665702987827645e+05 + 3.633406615280775e+05 + 3.601386722825769e+05 + 3.569641034535824e+05 + 3.538167290782596e+05 + 3.506963250581825e+05 + 3.476026690576235e+05 + 3.445355402744773e+05 + 3.414947198014101e+05 + 3.384799905288533e+05 + 3.354911367821696e+05 + 3.325279446663284e+05 + 3.295902021531574e+05 + 3.266776986085196e+05 + 3.237902250531212e+05 + 3.209275743946921e+05 + 3.180895409646722e+05 + 3.152759207164211e+05 + 3.124865112943467e+05 + 3.097211117598721e+05 + 3.069795229448014e+05 + 3.042615472339510e+05 + 3.015669883675390e+05 + 2.988956518738279e+05 + 2.962473447339852e+05 + 2.936218752484120e+05 + 2.910190535228683e+05 + 2.884386911235514e+05 + 2.858806009067059e+05 + 2.833445973150213e+05 + 2.808304963224871e+05 + 2.783381153152796e+05 + 2.758672731341289e+05 + 2.734177900017136e+05 + 2.709894875428715e+05 + 2.685821889451269e+05 + 2.661957187314447e+05 + 2.638299027837526e+05 + 2.614845683836235e+05 + 2.591595441417535e+05 + 2.568546601323142e+05 + 2.545697477628685e+05 + 2.523046396706559e+05 + 2.500591699434964e+05 + 2.478331740644226e+05 + 2.456264886409644e+05 + 2.434389516128850e+05 + 2.412704023657298e+05 + 2.391206814330098e+05 + 2.369896306904384e+05 + 2.348770933197599e+05 + 2.327829136173563e+05 + 2.307069372775990e+05 + 2.286490111745211e+05 + 2.266089832623643e+05 + 2.245867029748616e+05 + 2.225820209237310e+05 + 2.205947887183862e+05 + 2.186248592921233e+05 + 2.166720868039439e+05 + 2.147363264605261e+05 + 2.128174347706827e+05 + 2.109152693889452e+05 + 2.090296889843596e+05 + 2.071605535077064e+05 + 2.053077240108720e+05 + 2.034710625599661e+05 + 2.016504325007521e+05 + 1.998456982030229e+05 + 1.980567250370223e+05 + 1.962833797138016e+05 + 1.945255298870997e+05 + 1.927830441323482e+05 + 1.910557922964590e+05 + 1.893436452442803e+05 + 1.876464748512476e+05 + 1.859641540986015e+05 + 1.842965568967865e+05 + 1.826435581738182e+05 + 1.810050340354470e+05 + 1.793808614993985e+05 + 1.777709185575675e+05 + 1.761750842223128e+05 + 1.745932384546507e+05 + 1.730252623268235e+05 + 1.714710377603550e+05 + 1.699304475698536e+05 + 1.684033757560533e+05 + 1.668897071565261e+05 + 1.653893274220018e+05 + 1.639021233234161e+05 + 1.624279825159149e+05 + 1.609667934564489e+05 + 1.595184456811041e+05 + 1.580828296015031e+05 + 1.566598363968120e+05 + 1.552493582649543e+05 + 1.538512882702573e+05 + 1.524655202573447e+05 + 1.510919491064028e+05 + 1.497304705096718e+05 + 1.483809809029638e+05 + 1.470433777326744e+05 + 1.457175592117312e+05 + 1.444034242942686e+05 + 1.431008729933990e+05 + 1.418098060421684e+05 + 1.405301248671864e+05 + 1.392617319094920e+05 + 1.380045303259556e+05 + 1.367584239714278e+05 + 1.355233176631985e+05 + 1.342991169575939e+05 + 1.330857281367400e+05 + 1.318830583220329e+05 + 1.306910153813551e+05 + 1.295095079605118e+05 + 1.283384454277201e+05 + 1.271777378619642e+05 + 1.260272961737778e+05 + 1.248870320778846e+05 + 1.237568578844075e+05 + 1.226366865814357e+05 + 1.215264320654815e+05 + 1.204260088572700e+05 + 1.193353321256488e+05 + 1.182543179024696e+05 + 1.171828828329888e+05 + 1.161209441971572e+05 + 1.150684200368906e+05 + 1.140252290172446e+05 + 1.129912905290012e+05 + 1.119665246989244e+05 + 1.109508522377596e+05 + 1.099441945145749e+05 + 1.089464735474612e+05 + 1.079576119759672e+05 + 1.069775332658437e+05 + 1.060061613940063e+05 + 1.050434208615313e+05 + 1.040892370245828e+05 + 1.031435357647047e+05 + 1.022062434696232e+05 + 1.012772873208916e+05 + 1.003565950684523e+05 + 9.944409498683986e+04 + 9.853971604124359e+04 + 9.764338777276211e+04 + 9.675504027159151e+04 + 9.587460425195689e+04 + 9.500201099602232e+04 + 9.413719236230559e+04 + 9.328008081668093e+04 + 9.243060935253548e+04 + 9.158871152497102e+04 + 9.075432150057999e+04 + 8.992737394814150e+04 + 8.910780408381460e+04 + 8.829554772812854e+04 + 8.749054118346877e+04 + 8.669272128864085e+04 + 8.590202548133289e+04 + 8.511839166524833e+04 + 8.434175826486869e+04 + 8.357206428147563e+04 + 8.280924917713979e+04 + 8.205325293940101e+04 + 8.130401609766987e+04 + 8.056147962909786e+04 + 7.982558503959214e+04 + 7.909627435336930e+04 + 7.837349003289423e+04 + 7.765717506702039e+04 + 7.694727293156023e+04 + 7.624372753229675e+04 + 7.554648331079309e+04 + 7.485548516457589e+04 + 7.417067840840557e+04 + 7.349200889763620e+04 + 7.281942291879337e+04 + 7.215286716185752e+04 + 7.149228885123666e+04 + 7.083763563584826e+04 + 7.018885556144921e+04 + 6.954589717270633e+04 + 6.890870943981725e+04 + 6.827724174191867e+04 + 6.765144392787226e+04 + 6.703126624692857e+04 + 6.641665935636370e+04 + 6.580757439267423e+04 + 6.520396286738058e+04 + 6.460577668030654e+04 + 6.401296820028803e+04 + 6.342549017134596e+04 + 6.284329573351656e+04 + 6.226633845994343e+04 + 6.169457228450359e+04 + 6.112795154311772e+04 + 6.056643099463883e+04 + 6.000996574136701e+04 + 5.945851127624574e+04 + 5.891202351267684e+04 + 5.837045869755570e+04 + 5.783377345558033e+04 + 5.730192482224794e+04 + 5.677487016169035e+04 + 5.625256720967715e+04 + 5.573497408983271e+04 + 5.522204924870504e+04 + 5.471375150828325e+04 + 5.421004006036229e+04 + 5.371087441354901e+04 + 5.321621444975662e+04 + 5.272602039469258e+04 + 5.224025278120609e+04 + 5.175887251825204e+04 + 5.128184085536604e+04 + 5.080911934597862e+04 + 5.034066989608183e+04 + 4.987645473684455e+04 + 4.941643640415772e+04 + 4.896057778639881e+04 + 4.850884207769758e+04 + 4.806119277190277e+04 + 4.761759372195903e+04 + 4.717800906318111e+04 + 4.674240321587012e+04 + 4.631074096205200e+04 + 4.588298735942246e+04 + 4.545910774537743e+04 + 4.503906779825089e+04 + 4.462283347373459e+04 + 4.421037101686000e+04 + 4.380164697651120e+04 + 4.339662816996042e+04 + 4.299528171729217e+04 + 4.259757504220949e+04 + 4.220347581706527e+04 + 4.181295199605238e+04 + 4.142597183433527e+04 + 4.104250383855765e+04 + 4.066251680332360e+04 + 4.028597979815155e+04 + 3.991286213370509e+04 + 3.954313341370015e+04 + 3.917676350485435e+04 + 3.881372250661203e+04 + 3.845398080843414e+04 + 3.809750905736740e+04 + 3.774427812448402e+04 + 3.739425915595785e+04 + 3.704742356207799e+04 + 3.670374297805164e+04 + 3.636318929176292e+04 + 3.602573463927982e+04 + 3.569135138416072e+04 + 3.536001215672983e+04 + 3.503168981923036e+04 + 3.470635744840465e+04 + 3.438398837321134e+04 + 3.406455615393208e+04 + 3.374803457309094e+04 + 3.343439765983423e+04 + 3.312361965186892e+04 + 3.281567499925836e+04 + 3.251053841177231e+04 + 3.220818480242078e+04 + 3.190858928930939e+04 + 3.161172723179306e+04 + 3.131757418548949e+04 + 3.102610591483113e+04 + 3.073729842710719e+04 + 3.045112791454117e+04 + 3.016757076691534e+04 + 2.988660361584138e+04 + 2.960820327321778e+04 + 2.933234674204399e+04 + 2.905901125674980e+04 + 2.878817423326317e+04 + 2.851981328372868e+04 + 2.825390622682930e+04 + 2.799043106146120e+04 + 2.772936599846356e+04 + 2.747068942978120e+04 + 2.721437991599866e+04 + 2.696041623625263e+04 + 2.670877735469368e+04 + 2.645944239579323e+04 + 2.621239068106394e+04 + 2.596760172331024e+04 + 2.572505519859007e+04 + 2.548473096648493e+04 + 2.524660907253227e+04 + 2.501066972455740e+04 + 2.477689330466365e+04 + 2.454526037995217e+04 + 2.431575168300119e+04 + 2.408834810912627e+04 + 2.386303072521571e+04 + 2.363978076395976e+04 + 2.341857962988761e+04 + 2.319940888531031e+04 + 2.298225025100848e+04 + 2.276708562349589e+04 + 2.255389704384009e+04 + 2.234266670372097e+04 + 2.213337697918792e+04 + 2.192601038403303e+04 + 2.172054957464747e+04 + 2.151697738916041e+04 + 2.131527680276242e+04 + 2.111543093252480e+04 + 2.091742306098243e+04 + 2.072123660422193e+04 + 2.052685512482519e+04 + 2.033426234716574e+04 + 2.014344212098682e+04 + 1.995437843426629e+04 + 1.976705544479930e+04 + 1.958145743480243e+04 + 1.939756881213320e+04 + 1.921537413684756e+04 + 1.903485810052154e+04 + 1.885600554387774e+04 + 1.867880143037429e+04 + 1.850323084111479e+04 + 1.832927901452323e+04 + 1.815693131178678e+04 + 1.798617320994377e+04 + 1.781699034075772e+04 + 1.764936845332217e+04 + 1.748329340510924e+04 + 1.731875119617678e+04 + 1.715572795110660e+04 + 1.699420990919751e+04 + 1.683418344358223e+04 + 1.667563503873475e+04 + 1.651855128954979e+04 + 1.636291893365341e+04 + 1.620872481606836e+04 + 1.605595588699932e+04 + 1.590459923143625e+04 + 1.575464203906202e+04 + 1.560607160533683e+04 + 1.545887535681969e+04 + 1.531304082443131e+04 + 1.516855564487381e+04 + 1.502540756956110e+04 + 1.488358445432479e+04 + 1.474307426938193e+04 + 1.460386509288249e+04 + 1.446594509814283e+04 + 1.432930256776952e+04 + 1.419392589719183e+04 + 1.405980357729324e+04 + 1.392692420658459e+04 + 1.379527648729671e+04 + 1.366484921045415e+04 + 1.353563127160237e+04 + 1.340761167272577e+04 + 1.328077950662285e+04 + 1.315512397004589e+04 + 1.303063434970357e+04 + 1.290730001970431e+04 + 1.278511047006237e+04 + 1.266405528001385e+04 + 1.254412410683634e+04 + 1.242530670538782e+04 + 1.230759293022181e+04 + 1.219097272173875e+04 + 1.207543611008671e+04 + 1.196097321598039e+04 + 1.184757424417080e+04 + 1.173522949287449e+04 + 1.162392934478714e+04 + 1.151366426384512e+04 + 1.140442480834694e+04 + 1.129620161634352e+04 + 1.118898540470730e+04 + 1.108276698378667e+04 + 1.097753724013271e+04 + 1.087328713748510e+04 + 1.077000773143687e+04 + 1.066769015148828e+04 + 1.056632560317495e+04 + 1.046590537899618e+04 + 1.036642084361778e+04 + 1.026786343864257e+04 + 1.017022468912003e+04 + 1.007349618928313e+04 + 9.977669609110566e+03 + 9.882736699245763e+03 + 9.788689277747368e+03 + 9.695519238085319e+03 + 9.603218551128393e+03 + 9.511779252802526e+03 + 9.421193453258842e+03 + 9.331453338088948e+03 + 9.242551155902798e+03 + 9.154479227014926e+03 + 9.067229945268125e+03 + 8.980795767109534e+03 + 8.895169220035050e+03 + 8.810342900070031e+03 + 8.726309463870590e+03 + 8.643061639313548e+03 + 8.560592220958239e+03 + 8.478894062727115e+03 + 8.397960086705119e+03 + 8.317783279679375e+03 + 8.238356687487571e+03 + 8.159673421912185e+03 + 8.081726656780256e+03 + 8.004509624589081e+03 + 7.928015622553179e+03 + 7.852238006535134e+03 + 7.777170190090504e+03 + 7.702805651284038e+03 + 7.629137923269694e+03 + 7.556160595291118e+03 + 7.483867321684783e+03 + 7.412251809739373e+03 + 7.341307820993124e+03 + 7.271029178292266e+03 + 7.201409756944273e+03 + 7.132443488123264e+03 + 7.064124361053455e+03 + 6.996446414793790e+03 + 6.929403743407001e+03 + 6.862990497342477e+03 + 6.797200875139910e+03 + 6.732029129721631e+03 + 6.667469570161823e+03 + 6.603516551523545e+03 + 6.540164480186692e+03 + 6.477407817185619e+03 + 6.415241069687017e+03 + 6.353658796883785e+03 + 6.292655608307650e+03 + 6.232226157518487e+03 + 6.172365149982773e+03 + 6.113067340658933e+03 + 6.054327527853383e+03 + 5.996140560115221e+03 + 5.938501333076975e+03 + 5.881404784939355e+03 + 5.824845903828315e+03 + 5.768819722461626e+03 + 5.713321315085574e+03 + 5.658345805472132e+03 + 5.603888359764917e+03 + 5.549944184846402e+03 + 5.496508537213697e+03 + 5.443576713947663e+03 + 5.391144051368102e+03 + 5.339205932358427e+03 + 5.287757780134069e+03 + 5.236795058291703e+03 + 5.186313275265001e+03 + 5.136307977685731e+03 + 5.086774751617681e+03 + 5.037709226449485e+03 + 4.989107068721900e+03 + 4.940963984504954e+03 + 4.893275721702213e+03 + 4.846038063285039e+03 + 4.799246830729600e+03 + 4.752897888312231e+03 + 4.706987133608333e+03 + 4.661510499922751e+03 + 4.616463963202395e+03 + 4.571843532909213e+03 + 4.527645253893021e+03 + 4.483865209302220e+03 + 4.440499515324517e+03 + 4.397544325863069e+03 + 4.354995830474305e+03 + 4.312850249817291e+03 + 4.271103841242844e+03 + 4.229752898292512e+03 + 4.188793745275323e+03 + 4.148222740634546e+03 + 4.108036277499050e+03 + 4.068230779797937e+03 + 4.028802705831530e+03 + 3.989748546349355e+03 + 3.951064821861195e+03 + 3.912748086813885e+03 + 3.874794926585441e+03 + 3.837201956255947e+03 + 3.799965825835211e+03 + 3.763083213042953e+03 + 3.726550823283946e+03 + 3.690365398229224e+03 + 3.654523706502605e+03 + 3.619022543185401e+03 + 3.583858737044133e+03 + 3.549029144619817e+03 + 3.514530650270483e+03 + 3.480360168271582e+03 + 3.446514639490202e+03 + 3.412991033253400e+03 + 3.379786348393921e+03 + 3.346897609451590e+03 + 3.314321868815865e+03 + 3.282056205761040e+03 + 3.250097724763853e+03 + 3.218443559530467e+03 + 3.187090870156345e+03 + 3.156036839918450e+03 + 3.125278679259401e+03 + 3.094813626126841e+03 + 3.064638941053712e+03 + 3.034751909739014e+03 + 3.005149845581890e+03 + 2.975830084543172e+03 + 2.946789986568892e+03 + 2.918026936797055e+03 + 2.889538343339952e+03 + 2.861321641252218e+03 + 2.833374286700636e+03 + 2.805693756659566e+03 + 2.778277556469224e+03 + 2.751123212016022e+03 + 2.724228269242043e+03 + 2.697590301914011e+03 + 2.671206904109025e+03 + 2.645075688971241e+03 + 2.619194294405700e+03 + 2.593560380141823e+03 + 2.568171626715687e+03 + 2.543025737542386e+03 + 2.518120435211838e+03 + 2.493453462030127e+03 + 2.469022585172818e+03 + 2.444825590018873e+03 + 2.420860280374604e+03 + 2.397124484732366e+03 + 2.373616049394018e+03 + 2.350332838436762e+03 + 2.327272738609171e+03 + 2.304433655218562e+03 + 2.281813512846715e+03 + 2.259410255601743e+03 + 2.237221844685107e+03 + 2.215246260811306e+03 + 2.193481506123082e+03 + 2.171925598942706e+03 + 2.150576574458654e+03 + 2.129432488764117e+03 + 2.108491414442484e+03 + 2.087751441300839e+03 + 2.067210678851041e+03 + 2.046867252353801e+03 + 2.026719303565292e+03 + 2.006764993817073e+03 + 1.987002500493615e+03 + 1.967430017215378e+03 + 1.948045754608514e+03 + 1.928847939062915e+03 + 1.909834815497017e+03 + 1.891004644375446e+03 + 1.872355700452609e+03 + 1.853886275802303e+03 + 1.835594678424827e+03 + 1.817479231062563e+03 + 1.799538272810955e+03 + 1.781770158220284e+03 + 1.764173256646331e+03 + 1.746745953278825e+03 + 1.729486647489427e+03 + 1.712393752933919e+03 + 1.695465699568615e+03 + 1.678700930817119e+03 + 1.662097903850073e+03 + 1.645655091966725e+03 + 1.629370981458450e+03 + 1.613244072202941e+03 + 1.597272880432907e+03 + 1.581455933682248e+03 + 1.565791771294578e+03 + 1.550278951289465e+03 + 1.534916043199639e+03 + 1.519701626827566e+03 + 1.504634298568118e+03 + 1.489712666891078e+03 + 1.474935351996483e+03 + 1.460300988758884e+03 + 1.445808223853118e+03 + 1.431455716350942e+03 + 1.417242138357507e+03 + 1.403166173386480e+03 + 1.389226518010158e+03 + 1.375421881007569e+03 + 1.361750982089843e+03 + 1.348212553926219e+03 + 1.334805341072190e+03 + 1.321528098720046e+03 + 1.308379594477261e+03 + 1.295358607457036e+03 + 1.282463927300085e+03 + 1.269694355823267e+03 + 1.257048705895313e+03 + 1.244525800699936e+03 + 1.232124475203576e+03 + 1.219843575042076e+03 + 1.207681956049559e+03 + 1.195638485404256e+03 + 1.183712040621380e+03 + 1.171901509388141e+03 + 1.160205790292893e+03 + 1.148623791762007e+03 + 1.137154432301071e+03 + 1.125796641257775e+03 + 1.114549357263016e+03 + 1.103411528660030e+03 + 1.092382114454342e+03 + 1.081460082700689e+03 + 1.070644411095300e+03 + 1.059934087579793e+03 + 1.049328108720195e+03 + 1.038825480494848e+03 + 1.028425218971371e+03 + 1.018126348582361e+03 + 1.007927902927668e+03 + 9.978289254104482e+02 + 9.878284675679866e+02 + 9.779255898738762e+02 + 9.681193621623704e+02 + 9.584088623012988e+02 + 9.487931771658360e+02 + 9.392714022763922e+02 + 9.298426409505287e+02 + 9.205060057185552e+02 + 9.112606172437117e+02 + 9.021056036681564e+02 + 8.930401022331439e+02 + 8.840632580637879e+02 + 8.751742235821227e+02 + 8.663721600224155e+02 + 8.576562363107178e+02 + 8.490256285516970e+02 + 8.404795212594149e+02 + 8.320171064683727e+02 + 8.236375833541338e+02 + 8.153401590664150e+02 + 8.071240480244585e+02 + 7.989884718119321e+02 + 7.909326598382663e+02 + 7.829558483527250e+02 + 7.750572805483002e+02 + 7.672362073200991e+02 + 7.594918862313154e+02 + 7.518235817392584e+02 + 7.442305655888715e+02 + 7.367121158939042e+02 + 7.292675176279554e+02 + 7.218960630476328e+02 + 7.145970504767349e+02 + 7.073697847820883e+02 + 7.002135778527235e+02 + 6.931277475695276e+02 + 6.861116184218383e+02 + 6.791645215373005e+02 + 6.722857937677298e+02 + 6.654747784472139e+02 + 6.587308253877042e+02 + 6.520532900189463e+02 + 6.454415341582659e+02 + 6.388949257382737e+02 + 6.324128381494658e+02 + 6.259946511571761e+02 + 6.196397502963263e+02 + 6.133475264197438e+02 + 6.071173768094372e+02 + 6.009487042352257e+02 + 5.948409165626937e+02 + 5.887934278801442e+02 + 5.828056577149104e+02 + 5.768770306335107e+02 + 5.710069770500405e+02 + 5.651949326339243e+02 + 5.594403381224611e+02 + 5.537426401234757e+02 + 5.481012901152631e+02 + 5.425157443662293e+02 + 5.369854648776029e+02 + 5.315099185870243e+02 + 5.260885773011631e+02 + 5.207209179649268e+02 + 5.154064223119497e+02 + 5.101445770921985e+02 + 5.049348740937783e+02 + 4.997768095346806e+02 + 4.946698844046663e+02 + 4.896136047862775e+02 + 4.846074811232588e+02 + 4.796510285618583e+02 + 4.747437670096575e+02 + 4.698852205388910e+02 + 4.650749179071526e+02 + 4.603123926691712e+02 + 4.555971823563725e+02 + 4.509288288727789e+02 + 4.463068788207030e+02 + 4.417308827523721e+02 + 4.372003955530256e+02 + 4.327149765501697e+02 + 4.282741889383891e+02 + 4.238776002586995e+02 + 4.195247821802792e+02 + 4.152153101301976e+02 + 4.109487639564401e+02 + 4.067247273397822e+02 + 4.025427875685178e+02 + 3.984025363858318e+02 + 3.943035692477232e+02 + 3.902454851077117e+02 + 3.862278871965347e+02 + 3.822503823673904e+02 + 3.783125809462488e+02 + 3.744140974100913e+02 + 3.705545496319825e+02 + 3.667335588488600e+02 + 3.629507504654170e+02 + 3.592057531920941e+02 + 3.554981990087823e+02 + 3.518277237997781e+02 + 3.481939667588409e+02 + 3.445965704231110e+02 + 3.410351808614133e+02 + 3.375094474036331e+02 + 3.340190228447264e+02 + 3.305635632260179e+02 + 3.271427276872922e+02 + 3.237561788604219e+02 + 3.204035826343936e+02 + 3.170846077594078e+02 + 3.137989262426811e+02 + 3.105462135925898e+02 + 3.073261480789523e+02 + 3.041384108878384e+02 + 3.009826866110996e+02 + 2.978586626197819e+02 + 2.947660292278245e+02 + 2.917044799774912e+02 + 2.886737110898206e+02 + 2.856734216347172e+02 + 2.827033138205502e+02 + 2.797630925185924e+02 + 2.768524653868921e+02 + 2.739711430162750e+02 + 2.711188386172004e+02 + 2.682952682417776e+02 + 2.655001507075566e+02 + 2.627332073441469e+02 + 2.599941621974095e+02 + 2.572827420191948e+02 + 2.545986760992428e+02 + 2.519416963867954e+02 + 2.493115374004747e+02 + 2.467079361520411e+02 + 2.441306322519956e+02 + 2.415793676749632e+02 + 2.390538868162835e+02 + 2.365539368283623e+02 + 2.340792670618049e+02 + 2.316296291092408e+02 + 2.292047772816256e+02 + 2.268044680583002e+02 + 2.244284601550858e+02 + 2.220765149177526e+02 + 2.197483957886078e+02 + 2.174438683808943e+02 + 2.151627007150871e+02 + 2.129046628991759e+02 + 2.106695273325222e+02 + 2.084570687245048e+02 + 2.062670637405841e+02 + 2.040992912166423e+02 + 2.019535322675416e+02 + 1.998295699356443e+02 + 1.977271893831886e+02 + 1.956461779038128e+02 + 1.935863247355415e+02 + 1.915474213798307e+02 + 1.895292611678483e+02 + 1.875316391958052e+02 + 1.855543528482985e+02 + 1.835972014670904e+02 + 1.816599861324650e+02 + 1.797425099308505e+02 + 1.778445779263947e+02 + 1.759659969484732e+02 + 1.741065756739388e+02 + 1.722661246609050e+02 + 1.704444562587039e+02 + 1.686413847511611e+02 + 1.668567261386198e+02 + 1.650902980928235e+02 + 1.633419201885993e+02 + 1.616114136777071e+02 + 1.598986014805750e+02 + 1.582033083619683e+02 + 1.565253606828442e+02 + 1.548645864376032e+02 + 1.532208154238845e+02 + 1.515938789750561e+02 + 1.499836100268175e+02 + 1.483898432531407e+02 + 1.468124148175615e+02 + 1.452511624739094e+02 + 1.437059256375598e+02 + 1.421765451600804e+02 + 1.406628634671130e+02 + 1.391647245894945e+02 + 1.376819739463268e+02 + 1.362144585029153e+02 + 1.347620267668397e+02 + 1.333245285902542e+02 + 1.319018153476916e+02 + 1.304937399101563e+02 + 1.291001564496927e+02 + 1.277209206089626e+02 + 1.263558894821456e+02 + 1.250049214462411e+02 + 1.236678763269726e+02 + 1.223446153162142e+02 + 1.210350008534558e+02 + 1.197388968258891e+02 + 1.184561684202564e+02 + 1.171866820332312e+02 + 1.159303054814129e+02 + 1.146869078350233e+02 + 1.134563593521917e+02 + 1.122385316718855e+02 + 1.110332976232454e+02 + 1.098405311979204e+02 + 1.086601077608261e+02 + 1.074919038117468e+02 + 1.063357969778381e+02 + 1.051916662270612e+02 + 1.040593916259906e+02 + 1.029388543466298e+02 + 1.018299368341955e+02 + 1.007325226151947e+02 + 9.964649633160360e+01 + 9.857174381861689e+01 + 9.750815195741964e+01 + 9.645560874783912e+01 + 9.541400332430685e+01 + 9.438322582683587e+01 + 9.336316750654088e+01 + 9.235372071959520e+01 + 9.135477878367931e+01 + 9.036623609174318e+01 + 8.938798812110527e+01 + 8.841993128541375e+01 + 8.746196304638978e+01 + 8.651398190997742e+01 + 8.557588728936869e+01 + 8.464757961904559e+01 + 8.372896034435935e+01 + 8.281993180539014e+01 + 8.192039735296085e+01 + 8.103026128111058e+01 + 8.014942874495698e+01 + 7.927780590401203e+01 + 7.841529983858037e+01 + 7.756181847617736e+01 + 7.671727071446733e+01 + 7.588156631674119e+01 + 7.505461587372024e+01 + 7.423633095310755e+01 + 7.342662394299153e+01 + 7.262540803009301e+01 + 7.183259736215271e+01 + 7.104810687905130e+01 + 7.027185230277652e+01 + 6.950375028269488e+01 + 6.874371822566854e+01 + 6.799167430460268e+01 + 6.724753760248480e+01 + 6.651122793902957e+01 + 6.578266588744034e+01 + 6.506177289160765e+01 + 6.434847109859102e+01 + 6.364268339115934e+01 + 6.294433351272004e+01 + 6.225334589309644e+01 + 6.156964567793161e+01 + 6.089315882540817e+01 + 6.022381196253272e+01 + 5.956153243192431e+01 + 5.890624835784802e+01 + 5.825788851805937e+01 + 5.761638239540161e+01 + 5.698166019812880e+01 + 5.635365277455941e+01 + 5.573229169643452e+01 + 5.511750921575248e+01 + 5.450923819422894e+01 + 5.390741220139490e+01 + 5.331196548214332e+01 + 5.272283288224639e+01 + 5.213994992103501e+01 + 5.156325275682114e+01 + 5.099267813956413e+01 + 5.042816349744366e+01 + 4.986964685712531e+01 + 4.931706681520628e+01 + 4.877036264381848e+01 + 4.822947419115650e+01 + 4.769434186145065e+01 + 4.716490671386568e+01 + 4.664111036072763e+01 + 4.612289496053356e+01 + 4.561020331071316e+01 + 4.510297873475514e+01 + 4.460116508782800e+01 + 4.410470685618211e+01 + 4.361354903662819e+01 + 4.312763714409483e+01 + 4.264691728541290e+01 + 4.217133607138089e+01 + 4.170084064118655e+01 + 4.123537869187841e+01 + 4.077489840121474e+01 + 4.031934846724150e+01 + 3.986867813088396e+01 + 3.942283710103097e+01 + 3.898177559914080e+01 + 3.854544435810492e+01 + 3.811379455962712e+01 + 3.768677789368684e+01 + 3.726434656726136e+01 + 3.684645322013298e+01 + 3.643305096011807e+01 + 3.602409338288954e+01 + 3.561953452360934e+01 + 3.521932891649128e+01 + 3.482343153306697e+01 + 3.443179775085747e+01 + 3.404438343901749e+01 + 3.366114490993698e+01 + 3.328203887889210e+01 + 3.290702252020257e+01 + 3.253605343510379e+01 + 3.216908962260722e+01 + 3.180608952699355e+01 + 3.144701200592500e+01 + 3.109181631097627e+01 + 3.074046212448961e+01 + 3.039290952642646e+01 + 3.004911898312090e+01 + 2.970905136572861e+01 + 2.937266792505025e+01 + 2.903993030352619e+01 + 2.871080057194543e+01 + 2.838524113862799e+01 + 2.806321475945346e+01 + 2.774468462701056e+01 + 2.742961427426368e+01 + 2.711796757973106e+01 + 2.680970882898042e+01 + 2.650480264209962e+01 + 2.620321398820359e+01 + 2.590490820737408e+01 + 2.560985096325826e+01 + 2.531800827674159e+01 + 2.502934653543958e+01 + 2.474383242809609e+01 + 2.446143296972707e+01 + 2.418211555345684e+01 + 2.390584787621480e+01 + 2.363259794654911e+01 + 2.336233413255323e+01 + 2.309502509558490e+01 + 2.283063979379989e+01 + 2.256914753657127e+01 + 2.231051792982671e+01 + 2.205472087402378e+01 + 2.180172658443576e+01 + 2.155150556919213e+01 + 2.130402866286656e+01 + 2.105926696778129e+01 + 2.081719185319289e+01 + 2.057777503962135e+01 + 2.034098850331043e+01 + 2.010680447006149e+01 + 1.987519550063876e+01 + 1.964613442528577e+01 + 1.941959432580914e+01 + 1.919554855827313e+01 + 1.897397075515799e+01 + 1.875483482712853e+01 + 1.853811494931854e+01 + 1.832378554313712e+01 + 1.811182128985819e+01 + 1.790219714756028e+01 + 1.769488831219516e+01 + 1.748987022919803e+01 + 1.728711861052799e+01 + 1.708660939866258e+01 + 1.688831878332332e+01 + 1.669222321036695e+01 + 1.649829934690638e+01 + 1.630652410217020e+01 + 1.611687463464447e+01 + 1.592932831698975e+01 + 1.574386275792588e+01 + 1.556045580679505e+01 + 1.537908552081595e+01 + 1.519973018767385e+01 + 1.502236832516821e+01 + 1.484697865494502e+01 + 1.467354012841447e+01 + 1.450203191274907e+01 + 1.433243337158686e+01 + 1.416472409674524e+01 + 1.399888388846149e+01 + 1.383489273805109e+01 + 1.367273085728561e+01 + 1.351237865788487e+01 + 1.335381673920349e+01 + 1.319702591751814e+01 + 1.304198719993403e+01 + 1.288868177614133e+01 + 1.273709104714046e+01 + 1.258719659672914e+01 + 1.243898018736778e+01 + 1.229242378719869e+01 + 1.214750954184370e+01 + 1.200421977308728e+01 + 1.186253699764556e+01 + 1.172244390266849e+01 + 1.158392335040491e+01 + 1.144695839482221e+01 + 1.131153225250660e+01 + 1.117762830926809e+01 + 1.104523013501555e+01 + 1.091432145806843e+01 + 1.078488617566414e+01 + 1.065690836231677e+01 + 1.053037224372639e+01 + 1.040526220941685e+01 + 1.028156282144551e+01 + 1.015925878941852e+01 + 1.003833498402321e+01 + 9.918776439618298e+00 + 9.800568334039683e+00 + 9.683696005431957e+00 + 9.568144946174611e+00 + 9.453900787919052e+00 + 9.340949322860192e+00 + 9.229276489267212e+00 + 9.118868359446189e+00 + 9.009711163642070e+00 + 8.901791273796370e+00 + 8.795095191785947e+00 + 8.689609570648638e+00 + 8.585321201853549e+00 + 8.482217005296002e+00 + 8.380284046581689e+00 + 8.279509523576925e+00 + 8.179880760330461e+00 + 8.081385224417300e+00 + 7.984010508389771e+00 + 7.887744326863491e+00 + 7.792574535206823e+00 + 7.698489109519010e+00 + 7.605476146133772e+00 + 7.513523878187234e+00 + 7.422620653280592e+00 + 7.332754935473541e+00 + 7.243915322674125e+00 + 7.156090524556396e+00 + 7.069269365741123e+00 + 6.983440797017198e+00 + 6.898593877074525e+00 + 6.814717779007339e+00 + 6.731801797516630e+00 + 6.649835331100769e+00 + 6.568807890289103e+00 + 6.488709103685009e+00 + 6.409528699865692e+00 + 6.331256515961359e+00 + 6.253882503643640e+00 + 6.177396712290002e+00 + 6.101789297547966e+00 + 6.027050522250886e+00 + 5.953170745278158e+00 + 5.880140434362498e+00 + 5.807950156612827e+00 + 5.736590570385212e+00 + 5.666052441485230e+00 + 5.596326632559173e+00 + 5.527404095182261e+00 + 5.459275884510260e+00 + 5.391933149962507e+00 + 5.325367127621260e+00 + 5.259569151260657e+00 + 5.194530647433734e+00 + 5.130243129823101e+00 + 5.066698206416531e+00 + 5.003887570881058e+00 + 4.941803001453549e+00 + 4.880436373900456e+00 + 4.819779643419130e+00 + 4.759824844738533e+00 + 4.700564110200850e+00 + 4.641989649988083e+00 + 4.584093751736625e+00 + 4.526868793565781e+00 + 4.470307230074105e+00 + 4.414401594729965e+00 + 4.359144507919768e+00 + 4.304528662004969e+00 + 4.250546825086277e+00 + 4.197191851627622e+00 + 4.144456666159979e+00 + 4.092334266478478e+00 + 4.040817732600400e+00 + 3.989900213340690e+00 + 3.939574930757155e+00 + 3.889835183170760e+00 + 3.840674335613269e+00 + 3.792085827136757e+00 + 3.744063169627271e+00 + 3.696599938809659e+00 + 3.649689781941428e+00 + 3.603326418080199e+00 + 3.557503628382808e+00 + 3.512215261374414e+00 + 3.467455236465362e+00 + 3.423217534816642e+00 + 3.379496201686086e+00 + 3.336285348654454e+00 + 3.293579148649655e+00 + 3.251371841226642e+00 + 3.209657725464606e+00 + 3.168431157939940e+00 + 3.127686563504146e+00 + 3.087418425005168e+00 + 3.047621281181530e+00 + 3.008289735457784e+00 + 2.969418446796439e+00 + 2.931002129285814e+00 + 2.893035560502260e+00 + 2.855513571053400e+00 + 2.818431044951714e+00 + 2.781782927380857e+00 + 2.745564215550934e+00 + 2.709769959926351e+00 + 2.674395268211684e+00 + 2.639435297946605e+00 + 2.604885259637663e+00 + 2.570740420206636e+00 + 2.536996093812299e+00 + 2.503647644969884e+00 + 2.470690493614489e+00 + 2.438120105903952e+00 + 2.405931997235836e+00 + 2.374121735683807e+00 + 2.342684934097179e+00 + 2.311617253784086e+00 + 2.280914406216957e+00 + 2.250572146781167e+00 + 2.220586279273893e+00 + 2.190952653478714e+00 + 2.161667162009881e+00 + 2.132725747880213e+00 + 2.104124396422602e+00 + 2.075859132902099e+00 + 2.047926031580743e+00 + 2.020321209266692e+00 + 1.993040822266800e+00 + 1.966081073072867e+00 + 1.939438205166541e+00 + 1.913108500802827e+00 + 1.887088286918805e+00 + 1.861373929947225e+00 + 1.835961834345823e+00 + 1.810848447621857e+00 + 1.786030255213551e+00 + 1.761503779943143e+00 + 1.737265586321442e+00 + 1.713312275115213e+00 + 1.689640483715834e+00 + 1.666246890168493e+00 + 1.643128207113473e+00 + 1.620281182788458e+00 + 1.597702604935450e+00 + 1.575389294699183e+00 + 1.553338108095691e+00 + 1.531545938928566e+00 + 1.510009713407906e+00 + 1.488726392261371e+00 + 1.467692971937850e+00 + 1.446906480207705e+00 + 1.426363979153670e+00 + 1.406062564959602e+00 + 1.385999363940103e+00 + 1.366171536058216e+00 + 1.346576274130787e+00 + 1.327210800124654e+00 + 1.308072368828510e+00 + 1.289158266486426e+00 + 1.270465807665891e+00 + 1.251992339187792e+00 + 1.233735237889272e+00 + 1.215691907984316e+00 + 1.197859785096899e+00 + 1.180236333919823e+00 + 1.162819045897185e+00 + 1.145605442741095e+00 + 1.128593073973588e+00 + 1.111779515284567e+00 + 1.095162371880828e+00 + 1.078739275475473e+00 + 1.062507883334588e+00 + 1.046465881646835e+00 + 1.030610981874106e+00 + 1.014940920295882e+00 + 9.994534611152829e-01 + 9.841463930086627e-01 + 9.690175291593270e-01 + 9.540647093618980e-01 + 9.392857969051628e-01 + 9.246786792729085e-01 + 9.102412696338000e-01 + 8.959715035501604e-01 + 8.818673402027871e-01 + 8.679267639726700e-01 + 8.541477806828601e-01 + 8.405284189410931e-01 + 8.270667316623297e-01 + 8.137607925445277e-01 + 8.006086976874616e-01 + 7.876085666023992e-01 + 7.747585387876328e-01 + 7.620567754307064e-01 + 7.495014602973783e-01 + 7.370907966216457e-01 + 7.248230088485250e-01 + 7.126963429559050e-01 + 7.007090638413013e-01 + 6.888594572109231e-01 + 6.771458292779966e-01 + 6.655665045807759e-01 + 6.541198279036498e-01 + 6.428041637825399e-01 + 6.316178947210964e-01 + 6.205594229105623e-01 + 6.096271692194244e-01 + 5.988195719936049e-01 + 5.881350889221284e-01 + 5.775721954595900e-01 + 5.671293841176136e-01 + 5.568051664208875e-01 + 5.465980707194322e-01 + 5.365066418737608e-01 + 5.265294432641988e-01 + 5.166650544231339e-01 + 5.069120710261563e-01 + 4.972691065208522e-01 + 4.877347899800689e-01 + 4.783077664492044e-01 + 4.689866979017357e-01 + 4.597702612073233e-01 + 4.506571489021905e-01 + 4.416460700276524e-01 + 4.327357479310139e-01 + 4.239249212044141e-01 + 4.152123442913231e-01 + 4.065967853823845e-01 + 3.980770275573000e-01 + 3.896518691214699e-01 + 3.813201217302061e-01 + 3.730806117264635e-01 + 3.649321798861945e-01 + 3.568736798624809e-01 + 3.489039797704173e-01 + 3.410219613244947e-01 + 3.332265187013593e-01 + 3.255165605086018e-01 + 3.178910083898543e-01 + 3.103487958586359e-01 + 3.028888701360887e-01 + 2.955101913786422e-01 + 2.882117315106021e-01 + 2.809924755137371e-01 + 2.738514204626846e-01 + 2.667875748867065e-01 + 2.597999604522775e-01 + 2.528876103054370e-01 + 2.460495685714950e-01 + 2.392848919788540e-01 + 2.325926484518769e-01 + 2.259719167857841e-01 + 2.194217877354759e-01 + 2.129413627175208e-01 + 2.065297538274627e-01 + 2.001860848470379e-01 + 1.939094897086202e-01 + 1.876991127051828e-01 + 1.815541094417414e-01 + 1.754736452756007e-01 + 1.694568956974621e-01 + 1.635030470498157e-01 + 1.576112950508609e-01 + 1.517808453564031e-01 + 1.460109140364644e-01 + 1.403007261766342e-01 + 1.346495165784953e-01 + 1.290565300180611e-01 + 1.235210199704221e-01 + 1.180422494287421e-01 + 1.126194909047226e-01 + 1.072520253105725e-01 + 1.019391428882170e-01 + 9.668014295417104e-02 + 9.147433293860986e-02 + 8.632102939670111e-02 + 8.121955756354367e-02 + 7.616925052308399e-02 + 7.116945022739722e-02 + 6.621950693894064e-02 + 6.131877854698166e-02 + 5.646663155698649e-02 + 5.166244039926220e-02 + 4.690558691983024e-02 + 4.219546135291571e-02 + 3.753146148005052e-02 + 3.291299228995687e-02 + 2.833946692296159e-02 + 2.381030573044091e-02 + 1.932493608562982e-02 + 1.488279323951757e-02 + 1.048331933378767e-02 + 6.125963364112487e-03 + 1.810181928441051e-03 + -2.464561780353438e-03 + -6.698797872311066e-03 + -1.089304914227914e-02 + -1.504783206514415e-02 + -1.916365656771068e-02 + -2.324102555134537e-02 + -2.728043585421590e-02 + -3.128237791440187e-02 + -3.524733543518016e-02 + -3.917578628623598e-02 + -4.306820207473552e-02 + -4.692504798332473e-02 + -5.074678357205704e-02 + -5.453386225593208e-02 + -5.828673132987599e-02 + -6.200583267980977e-02 + -6.569160218738558e-02 + -6.934446987831328e-02 + -7.296486055963237e-02 + -7.655319319650564e-02 + -8.010988114185758e-02 + -8.363533270338043e-02 + -8.712995053780122e-02 + -9.059413193193132e-02 + -9.402826926020177e-02 + -9.743274938790861e-02 + -1.008079541064505e-01 + -1.041542604608216e-01 + -1.074720401131623e-01 + -1.107616598682374e-01 + -1.140234819193764e-01 + -1.172578632830942e-01 + -1.204651563472630e-01 + -1.236457089966172e-01 + -1.267998640735528e-01 + -1.299279600346222e-01 + -1.330303309819349e-01 + -1.361073061299021e-01 + -1.391592104828469e-01 + -1.421863647988072e-01 + -1.451890851855495e-01 + -1.481676836992942e-01 + -1.511224682100277e-01 + -1.540537421399553e-01 + -1.569618050599837e-01 + -1.598469524764272e-01 + -1.627094755828420e-01 + -1.655496618778017e-01 + -1.683677949236447e-01 + -1.711641541517163e-01 + -1.739390154343296e-01 + -1.766926508045859e-01 + -1.794253283544359e-01 + -1.821373127460387e-01 + -1.848288648981078e-01 + -1.875002419786971e-01 + -1.901516978443653e-01 + -1.927834826976386e-01 + -1.953958431846420e-01 + -1.979890227559544e-01 + -2.005632612952037e-01 + -2.031187952951354e-01 + -2.056558581586019e-01 + -2.081746798356756e-01 + -2.106754870586183e-01 + -2.131585035595214e-01 + -2.156239496932611e-01 + -2.180720427808593e-01 + -2.205029972492180e-01 + -2.229170242226580e-01 + -2.253143319488933e-01 + -2.276951258807381e-01 + -2.300596082676421e-01 + -2.324079786235529e-01 + -2.347404337552020e-01 + -2.370571673694448e-01 + -2.393583705568364e-01 + -2.416442317867498e-01 + -2.439149365965413e-01 + -2.461706679522762e-01 + -2.484116061949506e-01 + -2.506379289887288e-01 + -2.528498115997045e-01 + -2.550474267213886e-01 + -2.572309443123204e-01 + -2.594005320626763e-01 + -2.615563552809436e-01 + -2.636985766193694e-01 + -2.658273564814242e-01 + -2.679428529152917e-01 + -2.700452216727706e-01 + -2.721346163277996e-01 + -2.742111879420810e-01 + -2.762750854486131e-01 + -2.783264557785196e-01 + -2.803654434689624e-01 + -2.823921908087395e-01 + -2.844068381756654e-01 + -2.864095239109061e-01 + -2.884003839950212e-01 + -2.903795524955394e-01 + -2.923471617904532e-01 + -2.943033420191942e-01 + -2.962482212763220e-01 + -2.981819256807660e-01 + -3.001045795717013e-01 + -3.020163055275332e-01 + -3.039172239885258e-01 + -3.058074538261057e-01 + -3.076871122705734e-01 + -3.095563141516905e-01 + -3.114151727559051e-01 + -3.132637999546681e-01 + -3.151023057635463e-01 + -3.169307984585886e-01 + -3.187493845723606e-01 + -3.205581689117248e-01 + -3.223572548745565e-01 + -3.241467443749414e-01 + -3.259267374142799e-01 + -3.276973325691862e-01 + -3.294586270053045e-01 + -3.312107160890871e-01 + -3.329536937962613e-01 + -3.346876527428858e-01 + -3.364126840777460e-01 + -3.381288775295205e-01 + -3.398363212268976e-01 + -3.415351019703767e-01 + -3.432253052941175e-01 + -3.449070152459444e-01 + -3.465803145779997e-01 + -3.482452848007116e-01 + -3.499020059501182e-01 + -3.515505568826250e-01 + -3.531910152859590e-01 + -3.548234573752725e-01 + -3.564479582224311e-01 + -3.580645917875246e-01 + -3.596734306319520e-01 + -3.612745463110025e-01 + -3.628680093075062e-01 + -3.644538885605036e-01 + -3.660322520458910e-01 + -3.676031668332329e-01 + -3.691666987516095e-01 + -3.707229124779602e-01 + -3.722718716670178e-01 + -3.738136390608672e-01 + -3.753482761467254e-01 + -3.768758432749062e-01 + -3.783964002465877e-01 + -3.799100056353694e-01 + -3.814167166997948e-01 + -3.829165900177774e-01 + -3.844096813827866e-01 + -3.858960456354959e-01 + -3.873757364088854e-01 + -3.888488064600710e-01 + -3.903153077375676e-01 + -3.917752913452379e-01 + -3.932288075353338e-01 + -3.946759055987133e-01 + -3.961166339473677e-01 + -3.975510402779339e-01 + -3.989791715122148e-01 + -4.004010735521537e-01 + -4.018167915706618e-01 + -4.032263700983349e-01 + -4.046298528561717e-01 + -4.060272827301947e-01 + -4.074187016384220e-01 + -4.088041511045764e-01 + -4.101836719923956e-01 + -4.115573039941210e-01 + -4.129250863351419e-01 + -4.142870577221169e-01 + -4.156432559911067e-01 + -4.169937183587125e-01 + -4.183384813924751e-01 + -4.196775807600287e-01 + -4.210110517890521e-01 + -4.223389293056927e-01 + -4.236612469859990e-01 + -4.249780381358575e-01 + -4.262893357128523e-01 + -4.275951718561576e-01 + -4.288955781548201e-01 + -4.301905856512787e-01 + -4.314802245948859e-01 + -4.327645248125306e-01 + -4.340435157401011e-01 + -4.353172261319986e-01 + -4.365856843065750e-01 + -4.378489181140523e-01 + -4.391069545111200e-01 + -4.403598201489721e-01 + -4.416075414900063e-01 + -4.428501441617211e-01 + -4.440876533447125e-01 + -4.453200938994337e-01 + -4.465474900663732e-01 + -4.477698656375739e-01 + -4.489872440132049e-01 + -4.501996482091757e-01 + -4.514071007293397e-01 + -4.526096234423685e-01 + -4.538072381973440e-01 + -4.549999664346564e-01 + -4.561878287239103e-01 + -4.573708454564815e-01 + -4.585490367840940e-01 + -4.597224223838171e-01 + -4.608910215483196e-01 + -4.620548532229073e-01 + -4.632139359470852e-01 + -4.643682878385313e-01 + -4.655179266829866e-01 + -4.666628700026897e-01 + -4.678031349656974e-01 + -4.689387384105899e-01 + -4.700696968538801e-01 + -4.711960263436956e-01 + -4.723177425902391e-01 + -4.734348612979066e-01 + -4.745473978039702e-01 + -4.756553669920032e-01 + -4.767587833133353e-01 + -4.778576611599107e-01 + -4.789520147944609e-01 + -4.800418577229591e-01 + -4.811272034289876e-01 + -4.822080654661853e-01 + -4.832844566828151e-01 + -4.843563896207272e-01 + -4.854238767122197e-01 + -4.864869303811440e-01 + -4.875455627166793e-01 + -4.885997853037442e-01 + -4.896496095260600e-01 + -4.906950466868944e-01 + -4.917361080077966e-01 + -4.927728043326091e-01 + -4.938051461993963e-01 + -4.948331438840640e-01 + -4.958568075736277e-01 + -4.968761473512240e-01 + -4.978911731225704e-01 + -4.989018945002663e-01 + -4.999083208482176e-01 + -5.009104613021941e-01 + -5.019083248972503e-01 + -5.029019205602130e-01 + -5.038912570358333e-01 + -5.048763428126108e-01 + -5.058571862004539e-01 + -5.068337954285524e-01 + -5.078061785541023e-01 + -5.087743434557772e-01 + -5.097382978215317e-01 + -5.106980492175714e-01 + -5.116536051046018e-01 + -5.126049728172039e-01 + -5.135521595357905e-01 + -5.144951722594635e-01 + -5.154340177423219e-01 + -5.163687027408718e-01 + -5.172992340140365e-01 + -5.182256180631845e-01 + -5.191478612397169e-01 + -5.200659697981208e-01 + -5.209799499565910e-01 + -5.218898077706294e-01 + -5.227955490891694e-01 + -5.236971796844924e-01 + -5.245947053253370e-01 + -5.254881317688337e-01 + -5.263774645512288e-01 + -5.272627090126604e-01 + -5.281438703531137e-01 + -5.290209539977515e-01 + -5.298939652703512e-01 + -5.307629091340913e-01 + -5.316277904778723e-01 + -5.324886142110474e-01 + -5.333453852986519e-01 + -5.341981085648844e-01 + -5.350467886587517e-01 + -5.358914300418783e-01 + -5.367320373706596e-01 + -5.375686152841432e-01 + -5.384011680734792e-01 + -5.392297001047128e-01 + -5.400542157871245e-01 + -5.408747194069761e-01 + -5.416912150785628e-01 + -5.425037068232484e-01 + -5.433121987186342e-01 + -5.441166948984431e-01 + -5.449171994793097e-01 + -5.457137163885653e-01 + -5.465062494211190e-01 + -5.472948023341125e-01 + -5.480793790518950e-01 + -5.488599834110802e-01 + -5.496366191273470e-01 + -5.504092899443518e-01 + -5.511779994928784e-01 + -5.519427513029639e-01 + -5.527035490710489e-01 + -5.534603964642170e-01 + -5.542132970155166e-01 + -5.549622540841348e-01 + -5.557072711574547e-01 + -5.564483519201564e-01 + -5.571854997347668e-01 + -5.579187179919134e-01 + -5.586480102698358e-01 + -5.593733798207278e-01 + -5.600948299343745e-01 + -5.608123641702291e-01 + -5.615259858006734e-01 + -5.622356980349319e-01 + -5.629415042452564e-01 + -5.636434078437447e-01 + -5.643414121719204e-01 + -5.650355204128609e-01 + -5.657257359067179e-01 + -5.664120620074502e-01 + -5.670945018655422e-01 + -5.677730587569899e-01 + -5.684477360210265e-01 + -5.691185368946378e-01 + -5.697854646230838e-01 + -5.704485224954847e-01 + -5.711077138615709e-01 + -5.717630418949810e-01 + -5.724145097236072e-01 + -5.730621208149326e-01 + -5.737058785857441e-01 + -5.743457862811681e-01 + -5.749818469287452e-01 + -5.756140639044424e-01 + -5.762424408221788e-01 + -5.768669806578469e-01 + -5.774876866716016e-01 + -5.781045625480883e-01 + -5.787176116189466e-01 + -5.793268371095267e-01 + -5.799322422747063e-01 + -5.805338304985933e-01 + -5.811316053198213e-01 + -5.817255703521417e-01 + -5.823157287697720e-01 + -5.829020838792335e-01 + -5.834846393919914e-01 + -5.840633987477251e-01 + -5.846383653791880e-01 + -5.852095428966003e-01 + -5.857769347455314e-01 + -5.863405444497650e-01 + -5.869003757905312e-01 + -5.874564321893059e-01 + -5.880087171065591e-01 + -5.885572344676900e-01 + -5.891019879107314e-01 + -5.896429809482692e-01 + -5.901802172691951e-01 + -5.907137006344829e-01 + -5.912434348345698e-01 + -5.917694236578408e-01 + -5.922916709366750e-01 + -5.928101804947136e-01 + -5.933249560457028e-01 + -5.938360014505492e-01 + -5.943433207019595e-01 + -5.948469177828256e-01 + -5.953467966083078e-01 + -5.958429610716830e-01 + -5.963354151930935e-01 + -5.968241629967538e-01 + -5.973092085065336e-01 + -5.977905558475627e-01 + -5.982682091919279e-01 + -5.987421727060626e-01 + -5.992124504335189e-01 + -5.996790465513929e-01 + -6.001419654039183e-01 + -6.006012111567195e-01 + -6.010567880969444e-01 + -6.015087007096906e-01 + -6.019569532209035e-01 + -6.024015499278780e-01 + -6.028424953542454e-01 + -6.032797938560218e-01 + -6.037134498528102e-01 + -6.041434679778884e-01 + -6.045698527611498e-01 + -6.049926086966888e-01 + -6.054117403213235e-01 + -6.058272522301629e-01 + -6.062391491063152e-01 + -6.066474357377917e-01 + -6.070521167750024e-01 + -6.074531969194140e-01 + -6.078506811508277e-01 + -6.082445741313003e-01 + -6.086348804777613e-01 + -6.090216052590219e-01 + -6.094047534940796e-01 + -6.097843300758768e-01 + -6.101603397998798e-01 + -6.105327877567767e-01 + -6.109016791586246e-01 + -6.112670188349342e-01 + -6.116288118244032e-01 + -6.119870634033990e-01 + -6.123417788015699e-01 + -6.126929631816058e-01 + -6.130406216857481e-01 + -6.133847595846266e-01 + -6.137253821544012e-01 + -6.140624946688724e-01 + -6.143961025253998e-01 + -6.147262111225434e-01 + -6.150528258526081e-01 + -6.153759522847098e-01 + -6.156955958775930e-01 + -6.160117619293205e-01 + -6.163244560848270e-01 + -6.166336840291214e-01 + -6.169394513190288e-01 + -6.172417635406579e-01 + -6.175406263458638e-01 + -6.178360454670117e-01 + -6.181280266570051e-01 + -6.184165756494230e-01 + -6.187016981615432e-01 + -6.189834001775048e-01 + -6.192616876391890e-01 + -6.195365661632112e-01 + -6.198080416901866e-01 + -6.200761202902517e-01 + -6.203408078682074e-01 + -6.206021103982113e-01 + -6.208600339819080e-01 + -6.211145848662764e-01 + -6.213657689929696e-01 + -6.216135922609831e-01 + -6.218580610691606e-01 + -6.220991816188346e-01 + -6.223369599996067e-01 + -6.225714026287344e-01 + -6.228025157602012e-01 + -6.230303055354752e-01 + -6.232547783843585e-01 + -6.234759406837302e-01 + -6.236937987287140e-01 + -6.239083589372102e-01 + -6.241196278170006e-01 + -6.243276119301496e-01 + -6.245323178052680e-01 + -6.247337518435782e-01 + -6.249319204108740e-01 + -6.251268303788342e-01 + -6.253184884524475e-01 + -6.255069009766967e-01 + -6.256920746682559e-01 + -6.258740163701917e-01 + -6.260527328726909e-01 + -6.262282307801417e-01 + -6.264005167589047e-01 + -6.265695976839164e-01 + -6.267354804070123e-01 + -6.268981717782514e-01 + -6.270576786775590e-01 + -6.272140080071444e-01 + -6.273671666729116e-01 + -6.275171615794166e-01 + -6.276639997579259e-01 + -6.278076882572314e-01 + -6.279482340166599e-01 + -6.280856440870369e-01 + -6.282199255881125e-01 + -6.283510856176625e-01 + -6.284791313265480e-01 + -6.286040698559974e-01 + -6.287259082244099e-01 + -6.288446536460758e-01 + -6.289603134448759e-01 + -6.290728947784819e-01 + -6.291824049507972e-01 + -6.292888513285516e-01 + -6.293922409846477e-01 + -6.294925812787570e-01 + -6.295898797737625e-01 + -6.296841435561055e-01 + -6.297753800606519e-01 + -6.298635970427606e-01 + -6.299488015475858e-01 + -6.300310009429952e-01 + -6.301102030719377e-01 + -6.301864151575183e-01 + -6.302596446383568e-01 + -6.303298993873763e-01 + -6.303971867419816e-01 + -6.304615141097702e-01 + -6.305228892569528e-01 + -6.305813198299395e-01 + -6.306368133767261e-01 + -6.306893774095105e-01 + -6.307390196514921e-01 + -6.307857478830511e-01 + -6.308295697989852e-01 + -6.308704929504492e-01 + -6.309085250312678e-01 + -6.309436740902202e-01 + -6.309759477467396e-01 + -6.310053535533821e-01 + -6.310318994644450e-01 + -6.310555933584764e-01 + -6.310764430051494e-01 + -6.310944561130111e-01 + -6.311096405770181e-01 + -6.311220043955681e-01 + -6.311315554778594e-01 + -6.311383016234806e-01 + -6.311422506666780e-01 + -6.311434107412031e-01 + -6.311417897164122e-01 + -6.311373953205278e-01 + -6.311302357049288e-01 + -6.311203189243589e-01 + -6.311076528624781e-01 + -6.310922454230109e-01 + -6.310741047155799e-01 + -6.310532389686786e-01 + -6.310296560496979e-01 + -6.310033639455465e-01 + -6.309743708604478e-01 + -6.309426848479184e-01 + -6.309083139781310e-01 + -6.308712663782245e-01 + -6.308315500367087e-01 + -6.307891730465176e-01 + -6.307441436976022e-01 + -6.306964701860184e-01 + -6.306461606431758e-01 + -6.305932231701467e-01 + -6.305376659121696e-01 + -6.304794970062023e-01 + -6.304187245700347e-01 + -6.303553569805046e-01 + -6.302894025962669e-01 + -6.302208694979176e-01 + -6.301497657748981e-01 + -6.300760996409697e-01 + -6.299998795100692e-01 + -6.299211136514613e-01 + -6.298398102240708e-01 + -6.297559773915322e-01 + -6.296696236381925e-01 + -6.295807574013027e-01 + -6.294893864698483e-01 + -6.293955192818200e-01 + -6.292991645521353e-01 + -6.292003301703828e-01 + -6.290990243894826e-01 + -6.289952557946986e-01 + -6.288890326523825e-01 + -6.287803632353285e-01 + -6.286692558944412e-01 + -6.285557190083507e-01 + -6.284397608763040e-01 + -6.283213897612988e-01 + -6.282006141317734e-01 + -6.280774423035318e-01 + -6.279518824496017e-01 + -6.278239431715447e-01 + -6.276936329659792e-01 + -6.275609600561086e-01 + -6.274259327786519e-01 + -6.272885594754783e-01 + -6.271488484695774e-01 + -6.270068083043618e-01 + -6.268624473656752e-01 + -6.267157737459064e-01 + -6.265667960682418e-01 + -6.264155229504741e-01 + -6.262619625962428e-01 + -6.261061232036680e-01 + -6.259480131935671e-01 + -6.257876413121770e-01 + -6.256250157840939e-01 + -6.254601447340036e-01 + -6.252930366972961e-01 + -6.251237002207461e-01 + -6.249521437614608e-01 + -6.247783756272571e-01 + -6.246024042025771e-01 + -6.244242378628240e-01 + -6.242438848129136e-01 + -6.240613535991787e-01 + -6.238766528797192e-01 + -6.236897908519111e-01 + -6.235007757894835e-01 + -6.233096161276966e-01 + -6.231163203935827e-01 + -6.229208970207127e-01 + -6.227233543185018e-01 + -6.225237005131427e-01 + -6.223219439896936e-01 + -6.221180932821515e-01 + -6.219121568092019e-01 + -6.217041429518334e-01 + -6.214940600654550e-01 + -6.212819164164759e-01 + -6.210677203231969e-01 + -6.208514802076882e-01 + -6.206332045396580e-01 + -6.204129016762088e-01 + -6.201905798335827e-01 + -6.199662474146647e-01 + -6.197399127976954e-01 + -6.195115842446862e-01 + -6.192812702436963e-01 + -6.190489791767655e-01 + -6.188147191241502e-01 + -6.185784984898128e-01 + -6.183403256742428e-01 + -6.181002088023494e-01 + -6.178581563548247e-01 + -6.176141767575239e-01 + -6.173682779492388e-01 + -6.171204683326561e-01 + -6.168707564823446e-01 + -6.166191506410910e-01 + -6.163656588303806e-01 + -6.161102891648960e-01 + -6.158530502595377e-01 + -6.155939503803246e-01 + -6.153329975648972e-01 + -6.150702000825419e-01 + -6.148055662334609e-01 + -6.145391042808102e-01 + -6.142708224010276e-01 + -6.140007288452335e-01 + -6.137288318637003e-01 + -6.134551394181680e-01 + -6.131796597624336e-01 + -6.129024013716257e-01 + -6.126233721919256e-01 + -6.123425803085120e-01 + -6.120600340492245e-01 + -6.117757414641359e-01 + -6.114897106263320e-01 + -6.112019497520672e-01 + -6.109124671249474e-01 + -6.106212708396386e-01 + -6.103283687668304e-01 + -6.100337690977098e-01 + -6.097374799911853e-01 + -6.094395093910078e-01 + -6.091398653642833e-01 + -6.088385561024087e-01 + -6.085355898356886e-01 + -6.082309742898534e-01 + -6.079247173286892e-01 + -6.076168274335947e-01 + -6.073073125569597e-01 + -6.069961804304546e-01 + -6.066834389911383e-01 + -6.063690964791788e-01 + -6.060531610171422e-01 + -6.057356401425160e-01 + -6.054165419100932e-01 + -6.050958745176729e-01 + -6.047736455801236e-01 + -6.044498630713394e-01 + -6.041245351487873e-01 + -6.037976695799242e-01 + -6.034692741523835e-01 + -6.031393567367498e-01 + -6.028079252312161e-01 + -6.024749874110954e-01 + -6.021405510415967e-01 + -6.018046242357692e-01 + -6.014672148046522e-01 + -6.011283302871711e-01 + -6.007879786053585e-01 + -6.004461675660895e-01 + -6.001029047914931e-01 + -5.997581981158361e-01 + -5.994120553308485e-01 + -5.990644841299763e-01 + -5.987154923482985e-01 + -5.983650876334137e-01 + -5.980132773866208e-01 + -5.976600693793478e-01 + -5.973054714798371e-01 + -5.969494914365839e-01 + -5.965921366499265e-01 + -5.962334146660923e-01 + -5.958733334161985e-01 + -5.955119002909084e-01 + -5.951491227180785e-01 + -5.947850085981863e-01 + -5.944195652847630e-01 + -5.940528001366523e-01 + -5.936847210858313e-01 + -5.933153356463837e-01 + -5.929446511281147e-01 + -5.925726749957585e-01 + -5.921994146776245e-01 + -5.918248776317639e-01 + -5.914490714685531e-01 + -5.910720036664838e-01 + -5.906936815737919e-01 + -5.903141124838686e-01 + -5.899333037986367e-01 + -5.895512629817115e-01 + -5.891679973989596e-01 + -5.887835143677140e-01 + -5.883978211708401e-01 + -5.880109250637769e-01 + -5.876228334774148e-01 + -5.872335538851382e-01 + -5.868430932520374e-01 + -5.864514587624869e-01 + -5.860586578978172e-01 + -5.856646978273519e-01 + -5.852695857497323e-01 + -5.848733289413443e-01 + -5.844759343592291e-01 + -5.840774091773326e-01 + -5.836777608879199e-01 + -5.832769964405170e-01 + -5.828751228494087e-01 + -5.824721474461222e-01 + -5.820680771414760e-01 + -5.816629188869962e-01 + -5.812566799399100e-01 + -5.808493672421570e-01 + -5.804409877894702e-01 + -5.800315488931496e-01 + -5.796210574409676e-01 + -5.792095201878247e-01 + -5.787969440874288e-01 + -5.783833362006023e-01 + -5.779687035684036e-01 + -5.775530530727403e-01 + -5.771363914738108e-01 + -5.767187255974381e-01 + -5.763000625573806e-01 + -5.758804091701334e-01 + -5.754597721176316e-01 + -5.750381583420940e-01 + -5.746155745735496e-01 + -5.741920274506414e-01 + -5.737675239291555e-01 + -5.733420708457294e-01 + -5.729156748671344e-01 + -5.724883426083383e-01 + -5.720600807791615e-01 + -5.716308961653045e-01 + -5.712007954599810e-01 + -5.707697852850102e-01 + -5.703378722272431e-01 + -5.699050629355835e-01 + -5.694713639828742e-01 + -5.690367818720566e-01 + -5.686013232951076e-01 + -5.681649948578290e-01 + -5.677278029894381e-01 + -5.672897541841998e-01 + -5.668508549514105e-01 + -5.664111117923113e-01 + -5.659705312703284e-01 + -5.655291198708162e-01 + -5.650868839171556e-01 + -5.646438297396282e-01 + -5.641999637601537e-01 + -5.637552925169101e-01 + -5.633098223391846e-01 + -5.628635595080524e-01 + -5.624165104013904e-01 + -5.619686812129524e-01 + -5.615200782186582e-01 + -5.610707080464411e-01 + -5.606205767194389e-01 + -5.601696901727680e-01 + -5.597180550627928e-01 + -5.592656777039943e-01 + -5.588125640834879e-01 + -5.583587201544192e-01 + -5.579041522213387e-01 + -5.574488666805684e-01 + -5.569928694014434e-01 + -5.565361664370690e-01 + -5.560787640439252e-01 + -5.556206683493946e-01 + -5.551618853326125e-01 + -5.547024208857518e-01 + -5.542422809960397e-01 + -5.537814718214656e-01 + -5.533199995563840e-01 + -5.528578699065892e-01 + -5.523950887012330e-01 + -5.519316620139326e-01 + -5.514675956847120e-01 + -5.510028956792654e-01 + -5.505375681122012e-01 + -5.500716185256428e-01 + -5.496050526609592e-01 + -5.491378767346244e-01 + -5.486700964364043e-01 + -5.482017173715276e-01 + -5.477327453596050e-01 + -5.472631862648399e-01 + -5.467930458019109e-01 + -5.463223294669347e-01 + -5.458510432287255e-01 + -5.453791929736209e-01 + -5.449067840000759e-01 + -5.444338218966174e-01 + -5.439603123952597e-01 + -5.434862611282417e-01 + -5.430116738240560e-01 + -5.425365561436022e-01 + -5.420609134355956e-01 + -5.415847511352451e-01 + -5.411080748136494e-01 + -5.406308901525899e-01 + -5.401532026526268e-01 + -5.396750177177082e-01 + -5.391963408895222e-01 + -5.387171774649071e-01 + -5.382375326730170e-01 + -5.377574122460893e-01 + -5.372768215524759e-01 + -5.367957656717409e-01 + -5.363142502106338e-01 + -5.358322806031541e-01 + -5.353498619928253e-01 + -5.348669995911720e-01 + -5.343836987381033e-01 + -5.338999648334884e-01 + -5.334158029976483e-01 + -5.329312184607295e-01 + -5.324462166033185e-01 + -5.319608023124877e-01 + -5.314749807283198e-01 + -5.309887574568507e-01 + -5.305021373834015e-01 + -5.300151254489873e-01 + -5.295277270550899e-01 + -5.290399471460621e-01 + -5.285517906644440e-01 + -5.280632628772480e-01 + -5.275743687930865e-01 + -5.270851133485194e-01 + -5.265955015863814e-01 + -5.261055383771222e-01 + -5.256152286457003e-01 + -5.251245776074701e-01 + -5.246335901741112e-01 + -5.241422711040373e-01 + -5.236506252667474e-01 + -5.231586574906982e-01 + -5.226663726352896e-01 + -5.221737757253558e-01 + -5.216808715970676e-01 + -5.211876649797802e-01 + -5.206941607382560e-01 + -5.202003635069621e-01 + -5.197062778404161e-01 + -5.192119087096243e-01 + -5.187172609937223e-01 + -5.182223393579939e-01 + -5.177271482807863e-01 + -5.172316923981860e-01 + -5.167359765148800e-01 + -5.162400053033168e-01 + -5.157437833544083e-01 + -5.152473152222008e-01 + -5.147506055161414e-01 + -5.142536587718484e-01 + -5.137564794429633e-01 + -5.132590721404230e-01 + -5.127614414610688e-01 + -5.122635918987255e-01 + -5.117655278912282e-01 + -5.112672538418732e-01 + -5.107687741570007e-01 + -5.102700934318621e-01 + -5.097712161511054e-01 + -5.092721464952894e-01 + -5.087728887586368e-01 + -5.082734473837237e-01 + -5.077738269224511e-01 + -5.072740315773641e-01 + -5.067740655070005e-01 + -5.062739331645890e-01 + -5.057736389339202e-01 + -5.052731870571522e-01 + -5.047725816027976e-01 + -5.042718267556677e-01 + -5.037709267723895e-01 + -5.032698858620083e-01 + -5.027687082997551e-01 + -5.022673983228978e-01 + -5.017659599138892e-01 + -5.012643972224838e-01 + -5.007627144504877e-01 + -5.002609154317549e-01 + -4.997590043686060e-01 + -4.992569856498065e-01 + -4.987548629163329e-01 + -4.982526401066572e-01 + -4.977503215591422e-01 + -4.972479113357710e-01 + -4.967454132608579e-01 + -4.962428310876830e-01 + -4.957401690448965e-01 + -4.952374311333114e-01 + -4.947346209581790e-01 + -4.942317423902789e-01 + -4.937287995168010e-01 + -4.932257964768885e-01 + -4.927227367709692e-01 + -4.922196239985463e-01 + -4.917164622446805e-01 + -4.912132554897460e-01 + -4.907100074652099e-01 + -4.902067216434476e-01 + -4.897034018910860e-01 + -4.892000521396699e-01 + -4.886966760659724e-01 + -4.881932772071136e-01 + -4.876898592264887e-01 + -4.871864261030248e-01 + -4.866829812293292e-01 + -4.861795280147214e-01 + -4.856760706607693e-01 + -4.851726126266216e-01 + -4.846691571189501e-01 + -4.841657080652781e-01 + -4.836622690168214e-01 + -4.831588433295234e-01 + -4.826554347812969e-01 + -4.821520468729375e-01 + -4.816486828820545e-01 + -4.811453462713459e-01 + -4.806420406166251e-01 + -4.801387695127853e-01 + -4.796355363816449e-01 + -4.791323444815042e-01 + -4.786291970695780e-01 + -4.781260978727254e-01 + -4.776230503252043e-01 + -4.771200574973888e-01 + -4.766171228253449e-01 + -4.761142497486388e-01 + -4.756114415594656e-01 + -4.751087014547341e-01 + -4.746060327035595e-01 + -4.741034386828772e-01 + -4.736009226286348e-01 + -4.730984877717556e-01 + -4.725961373913972e-01 + -4.720938746127822e-01 + -4.715917026117559e-01 + -4.710896247171748e-01 + -4.705876440070008e-01 + -4.700857635192827e-01 + -4.695839864443119e-01 + -4.690823160197067e-01 + -4.685807553687465e-01 + -4.680793073815264e-01 + -4.675779752270572e-01 + -4.670767621237579e-01 + -4.665756710130068e-01 + -4.660747048828000e-01 + -4.655738667469987e-01 + -4.650731595624170e-01 + -4.645725864569897e-01 + -4.640721505529091e-01 + -4.635718546060059e-01 + -4.630717014390969e-01 + -4.625716940204364e-01 + -4.620718354412200e-01 + -4.615721285948061e-01 + -4.610725762550177e-01 + -4.605731814392849e-01 + -4.600739469669758e-01 + -4.595748755034438e-01 + -4.590759700613133e-01 + -4.585772335293120e-01 + -4.580786685902926e-01 + -4.575802780165928e-01 + -4.570820645542124e-01 + -4.565840309327809e-01 + -4.560861801183225e-01 + -4.555885148408127e-01 + -4.550910375242214e-01 + -4.545937511574892e-01 + -4.540966585092119e-01 + -4.535997618400510e-01 + -4.531030641427475e-01 + -4.526065682230286e-01 + -4.521102761991050e-01 + -4.516141909960451e-01 + -4.511183155232459e-01 + -4.506226519976986e-01 + -4.501272029129367e-01 + -4.496319709853875e-01 + -4.491369589904647e-01 + -4.486421693813144e-01 + -4.481476045149588e-01 + -4.476532669406306e-01 + -4.471591591812127e-01 + -4.466652837454304e-01 + -4.461716431800687e-01 + -4.456782399407630e-01 + -4.451850764283579e-01 + -4.446921550770006e-01 + -4.441994783152980e-01 + -4.437070485743053e-01 + -4.432148683148817e-01 + -4.427229399164072e-01 + -4.422312656936392e-01 + -4.417398479943503e-01 + -4.412486891611525e-01 + -4.407577915365379e-01 + -4.402671575060104e-01 + -4.397767893532367e-01 + -4.392866892910770e-01 + -4.387968597340107e-01 + -4.383073029681190e-01 + -4.378180210879689e-01 + -4.373290163087382e-01 + -4.368402909924953e-01 + -4.363518475687816e-01 + -4.358636880897754e-01 + -4.353758146064535e-01 + -4.348882293452391e-01 + -4.344009344375495e-01 + -4.339139321041776e-01 + -4.334272247184532e-01 + -4.329408142509990e-01 + -4.324547026649819e-01 + -4.319688922210647e-01 + -4.314833850702666e-01 + -4.309981832317592e-01 + -4.305132886299618e-01 + -4.300287034407881e-01 + -4.295444298858639e-01 + -4.290604699557538e-01 + -4.285768254794737e-01 + -4.280934983815344e-01 + -4.276104909880938e-01 + -4.271278053251724e-01 + -4.266454431999359e-01 + -4.261634065006114e-01 + -4.256816972235624e-01 + -4.252003173934318e-01 + -4.247192689049444e-01 + -4.242385536499166e-01 + -4.237581735472888e-01 + -4.232781305399061e-01 + -4.227984264773803e-01 + -4.223190631457318e-01 + -4.218400424415704e-01 + -4.213613663598799e-01 + -4.208830368540804e-01 + -4.204050553934426e-01 + -4.199274237890383e-01 + -4.194501442515862e-01 + -4.189732183034799e-01 + -4.184966476302857e-01 + -4.180204343198091e-01 + -4.175445800025869e-01 + -4.170690862458790e-01 + -4.165939547960728e-01 + -4.161191875920802e-01 + -4.156447863485650e-01 + -4.151707524172177e-01 + -4.146970878143395e-01 + -4.142237944432959e-01 + -4.137508735370036e-01 + -4.132783267358912e-01 + -4.128061559031381e-01 + -4.123343628419361e-01 + -4.118629489726368e-01 + -4.113919157251955e-01 + -4.109212649651476e-01 + -4.104509983224866e-01 + -4.099811172669397e-01 + -4.095116233202941e-01 + -4.090425181490535e-01 + -4.085738034100841e-01 + -4.081054804950061e-01 + -4.076375508831032e-01 + -4.071700161671795e-01 + -4.067028779692610e-01 + -4.062361376606066e-01 + -4.057697965353959e-01 + -4.053038563335837e-01 + -4.048383186645677e-01 + -4.043731849141807e-01 + -4.039084564103662e-01 + -4.034441345521896e-01 + -4.029802208230617e-01 + -4.025167167043049e-01 + -4.020536236099443e-01 + -4.015909428779320e-01 + -4.011286758375757e-01 + -4.006668238996902e-01 + -4.002053885607212e-01 + -3.997443712200008e-01 + -3.992837731698375e-01 + -3.988235956310492e-01 + -3.983638399923307e-01 + -3.979045076012857e-01 + -3.974455996644362e-01 + -3.969871175556028e-01 + -3.965290626455606e-01 + -3.960714361699136e-01 + -3.956142393772600e-01 + -3.951574735515524e-01 + -3.947011399985758e-01 + -3.942452398354794e-01 + -3.937897742524872e-01 + -3.933347447660869e-01 + -3.928801524442024e-01 + -3.924259983101159e-01 + -3.919722839283850e-01 + -3.915190103656777e-01 + -3.910661784756895e-01 + -3.906137895655892e-01 + -3.901618450499643e-01 + -3.897103461604648e-01 + -3.892592935529919e-01 + -3.888086884121152e-01 + -3.883585322771145e-01 + -3.879088261485191e-01 + -3.874595710701922e-01 + -3.870107681556456e-01 + -3.865624182556531e-01 + -3.861145225228043e-01 + -3.856670823544472e-01 + -3.852200986473037e-01 + -3.847735723987576e-01 + -3.843275047747315e-01 + -3.838818965026468e-01 + -3.834367486164244e-01 + -3.829920625791138e-01 + -3.825478392535004e-01 + -3.821040794322394e-01 + -3.816607841213338e-01 + -3.812179544462010e-01 + -3.807755914230820e-01 + -3.803336958584798e-01 + -3.798922686597118e-01 + -3.794513108818827e-01 + -3.790108236907996e-01 + -3.785708078449803e-01 + -3.781312640889848e-01 + -3.776921934895628e-01 + -3.772535969260590e-01 + -3.768154752452403e-01 + -3.763778294637203e-01 + -3.759406605249527e-01 + -3.755039692439986e-01 + -3.750677562951532e-01 + -3.746320226741715e-01 + -3.741967693787305e-01 + -3.737619968727901e-01 + -3.733277061470673e-01 + -3.728938983949728e-01 + -3.724605741247380e-01 + -3.720277341192338e-01 + -3.715953793429491e-01 + -3.711635103186269e-01 + -3.707321278978636e-01 + -3.703012331728173e-01 + -3.698708267439747e-01 + -3.694409092657609e-01 + -3.690114815572269e-01 + -3.685825444178367e-01 + -3.681540985405766e-01 + -3.677261445488677e-01 + -3.672986832474148e-01 + -3.668717154245260e-01 + -3.664452417818624e-01 + -3.660192630178876e-01 + -3.655937798167319e-01 + -3.651687928442244e-01 + -3.647443027770453e-01 + -3.643203103057334e-01 + -3.638968161236534e-01 + -3.634738208501973e-01 + -3.630513251204181e-01 + -3.626293296340570e-01 + -3.622078349959966e-01 + -3.617868418102546e-01 + -3.613663507559756e-01 + -3.609463624258993e-01 + -3.605268773947004e-01 + -3.601078962972172e-01 + -3.596894197319259e-01 + -3.592714482724653e-01 + -3.588539824938156e-01 + -3.584370229705016e-01 + -3.580205702765974e-01 + -3.576046249835235e-01 + -3.571891876270012e-01 + -3.567742587321382e-01 + -3.563598388637925e-01 + -3.559459285557617e-01 + -3.555325283179373e-01 + -3.551196386794110e-01 + -3.547072601423791e-01 + -3.542953931967586e-01 + -3.538840383835105e-01 + -3.534731961849680e-01 + -3.530628670336623e-01 + -3.526530514374770e-01 + -3.522437498876279e-01 + -3.518349628366106e-01 + -3.514266907403692e-01 + -3.510189340474827e-01 + -3.506116931966672e-01 + -3.502049686305037e-01 + -3.497987607886671e-01 + -3.493930701015490e-01 + -3.489878969787067e-01 + -3.485832418243141e-01 + -3.481791050461803e-01 + -3.477754870557839e-01 + -3.473723882547367e-01 + -3.469698090253131e-01 + -3.465677497415546e-01 + -3.461662107762984e-01 + -3.457651925045610e-01 + -3.453646952920019e-01 + -3.449647194961470e-01 + -3.445652654674211e-01 + -3.441663335489293e-01 + -3.437679240760669e-01 + -3.433700373751777e-01 + -3.429726737709668e-01 + -3.425758335909973e-01 + -3.421795171685511e-01 + -3.417837248082679e-01 + -3.413884567949557e-01 + -3.409937134173290e-01 + -3.405994949798623e-01 + -3.402058017865278e-01 + -3.398126341027504e-01 + -3.394199921921239e-01 + -3.390278763247643e-01 + -3.386362867748747e-01 + -3.382452237948665e-01 + -3.378546876227794e-01 + -3.374646785249709e-01 + -3.370751967392704e-01 + -3.366862424749215e-01 + -3.362978159833941e-01 + -3.359099174981644e-01 + -3.355225472182573e-01 + -3.351357053498810e-01 + -3.347493921057998e-01 + -3.343636076973308e-01 + -3.339783523006465e-01 + -3.335936261089775e-01 + -3.332094293460974e-01 + -3.328257621547543e-01 + -3.324426246881435e-01 + -3.320600171619409e-01 + -3.316779397280902e-01 + -3.312963925265998e-01 + -3.309153757279716e-01 + -3.305348894653861e-01 + -3.301549338737799e-01 + -3.297755091265357e-01 + -3.293966153413448e-01 + -3.290182526215280e-01 + -3.286404211114115e-01 + -3.282631209285871e-01 + -3.278863521751846e-01 + -3.275101149642331e-01 + -3.271344093953196e-01 + -3.267592355617253e-01 + -3.263845935667566e-01 + -3.260104834866909e-01 + -3.256369053882101e-01 + -3.252638593756906e-01 + -3.248913455268053e-01 + -3.245193638907094e-01 + -3.241479145199382e-01 + -3.237769974872735e-01 + -3.234066128661293e-01 + -3.230367606622389e-01 + -3.226674409186036e-01 + -3.222986537192250e-01 + -3.219303990783447e-01 + -3.215626770146125e-01 + -3.211954875680534e-01 + -3.208288307426270e-01 + -3.204627065455645e-01 + -3.200971150001409e-01 + -3.197320561103191e-01 + -3.193675298795836e-01 + -3.190035363166080e-01 + -3.186400754009213e-01 + -3.182771471114187e-01 + -3.179147514432106e-01 + -3.175528883799994e-01 + -3.171915578921511e-01 + -3.168307599394173e-01 + -3.164704945026028e-01 + -3.161107615528752e-01 + -3.157515610223091e-01 + -3.153928928534279e-01 + -3.150347570035595e-01 + -3.146771534412893e-01 + -3.143200821026652e-01 + -3.139635429048980e-01 + -3.136075357713601e-01 + -3.132520606345795e-01 + -3.128971174301287e-01 + -3.125427060850263e-01 + -3.121888265003789e-01 + -3.118354785699559e-01 + -3.114826622209773e-01 + -3.111303773636806e-01 + -3.107786238863177e-01 + -3.104274016699458e-01 + -3.100767106006651e-01 + -3.097265505731036e-01 + -3.093769214901858e-01 + -3.090278232197667e-01 + -3.086792556057311e-01 + -3.083312185528201e-01 + -3.079837119302323e-01 + -3.076367355606988e-01 + -3.072902893338402e-01 + -3.069443731087555e-01 + -3.065989866918071e-01 + -3.062541299629242e-01 + -3.059098027895394e-01 + -3.055660049841727e-01 + -3.052227363624680e-01 + -3.048799967605036e-01 + -3.045377860349815e-01 + -3.041961039937703e-01 + -3.038549504461246e-01 + -3.035143252370935e-01 + -3.031742281687436e-01 + -3.028346590287212e-01 + -3.024956176228422e-01 + -3.021571037727226e-01 + -3.018191172891879e-01 + -3.014816579447884e-01 + -3.011447255196590e-01 + -3.008083198102758e-01 + -3.004724406299011e-01 + -3.001370877400161e-01 + -2.998022608844934e-01 + -2.994679598576119e-01 + -2.991341844426006e-01 + -2.988009344054493e-01 + -2.984682095047237e-01 + -2.981360094999961e-01 + -2.978043341494513e-01 + -2.974731831997393e-01 + -2.971425563888731e-01 + -2.968124534589884e-01 + -2.964828741880918e-01 + -2.961538183196636e-01 + -2.958252855581221e-01 + -2.954972756291568e-01 + -2.951697882690829e-01 + -2.948428232168150e-01 + -2.945163801997789e-01 + -2.941904589349781e-01 + -2.938650591314966e-01 + -2.935401805013078e-01 + -2.932158227514122e-01 + -2.928919855851135e-01 + -2.925686687341852e-01 + -2.922458719001491e-01 + -2.919235947316832e-01 + -2.916018369508684e-01 + -2.912805982685433e-01 + -2.909598783275820e-01 + -2.906396768390501e-01 + -2.903199935181080e-01 + -2.900008280188033e-01 + -2.896821799916231e-01 + -2.893640491090957e-01 + -2.890464350819901e-01 + -2.887293375718574e-01 + -2.884127562142981e-01 + -2.880966906629407e-01 + -2.877811406014185e-01 + -2.874661057081589e-01 + -2.871515856017081e-01 + -2.868375799224188e-01 + -2.865240883310016e-01 + -2.862111104788733e-01 + -2.858986460098822e-01 + -2.855866945593247e-01 + -2.852752557499685e-01 + -2.849643292069009e-01 + -2.846539145659956e-01 + -2.843440114851778e-01 + -2.840346195818731e-01 + -2.837257384382189e-01 + -2.834173676812886e-01 + -2.831095069534547e-01 + -2.828021558855677e-01 + -2.824953140398479e-01 + -2.821889810170294e-01 + -2.818831564761255e-01 + -2.815778399984394e-01 + -2.812730311718642e-01 + -2.809687296216254e-01 + -2.806649349155874e-01 + -2.803616466281044e-01 + -2.800588643758425e-01 + -2.797565877594176e-01 + -2.794548163592918e-01 + -2.791535497376408e-01 + -2.788527874670974e-01 + -2.785525291296920e-01 + -2.782527743138438e-01 + -2.779535226034689e-01 + -2.776547735631448e-01 + -2.773565267276963e-01 + -2.770587816777879e-01 + -2.767615379983304e-01 + -2.764647952191276e-01 + -2.761685529026718e-01 + -2.758728106207560e-01 + -2.755775679024411e-01 + -2.752828243050798e-01 + -2.749885793975552e-01 + -2.746948327088052e-01 + -2.744015837838452e-01 + -2.741088321749212e-01 + -2.738165773969221e-01 + -2.735248189792139e-01 + -2.732335564721672e-01 + -2.729427894286903e-01 + -2.726525173657923e-01 + -2.723627397775934e-01 + -2.720734562117226e-01 + -2.717846661993187e-01 + -2.714963692431568e-01 + -2.712085648712142e-01 + -2.709212526021956e-01 + -2.706344319386959e-01 + -2.703481024077038e-01 + -2.700622635195931e-01 + -2.697769147573882e-01 + -2.694920556414950e-01 + -2.692076856844960e-01 + -2.689238043678598e-01 + -2.686404111894522e-01 + -2.683575056539274e-01 + -2.680750872618156e-01 + -2.677931554956217e-01 + -2.675117098420171e-01 + -2.672307498062658e-01 + -2.669502748541435e-01 + -2.666702844564393e-01 + -2.663907781339158e-01 + -2.661117553567487e-01 + -2.658332155842312e-01 + -2.655551583220328e-01 + -2.652775830228958e-01 + -2.650004891310402e-01 + -2.647238761635896e-01 + -2.644477435849875e-01 + -2.641720908275026e-01 + -2.638969173638899e-01 + -2.636222226679477e-01 + -2.633480062028563e-01 + -2.630742674151484e-01 + -2.628010057675256e-01 + -2.625282207270022e-01 + -2.622559117157733e-01 + -2.619840781930577e-01 + -2.617127196438671e-01 + -2.614418354712815e-01 + -2.611714251171109e-01 + -2.609014880694051e-01 + -2.606320237300626e-01 + -2.603630315312080e-01 + -2.600945109576975e-01 + -2.598264614192900e-01 + -2.595588823272051e-01 + -2.592917731268140e-01 + -2.590251332515323e-01 + -2.587589621335352e-01 + -2.584932592080277e-01 + -2.582280238899204e-01 + -2.579632555996659e-01 + -2.576989537753064e-01 + -2.574351178135512e-01 + -2.571717471205571e-01 + -2.569088411498421e-01 + -2.566463993032694e-01 + -2.563844209736399e-01 + -2.561229055922761e-01 + -2.558618525664796e-01 + -2.556012613001373e-01 + -2.553411312228936e-01 + -2.550814617199114e-01 + -2.548222521633088e-01 + -2.545635019702024e-01 + -2.543052105636615e-01 + -2.540473773489130e-01 + -2.537900016856341e-01 + -2.535330829668063e-01 + -2.532766206092137e-01 + -2.530206140025920e-01 + -2.527650625373169e-01 + -2.525099656058339e-01 + -2.522553225882911e-01 + -2.520011328519368e-01 + -2.517473957689335e-01 + -2.514941107682424e-01 + -2.512412772287477e-01 + -2.509888944763962e-01 + -2.507369619085763e-01 + -2.504854789235316e-01 + -2.502344448942996e-01 + -2.499838591881081e-01 + -2.497337211675947e-01 + -2.494840301941274e-01 + -2.492347856449565e-01 + -2.489859868896926e-01 + -2.487376332816026e-01 + -2.484897241934407e-01 + -2.482422589923619e-01 + -2.479952370263670e-01 + -2.477486576676466e-01 + -2.475025202765806e-01 + -2.472568241776227e-01 + -2.470115687463755e-01 + -2.467667533575219e-01 + -2.465223773319763e-01 + -2.462784400223504e-01 + -2.460349407926405e-01 + -2.457918789841980e-01 + -2.455492539346369e-01 + -2.453070649885519e-01 + -2.450653115068263e-01 + -2.448239928212929e-01 + -2.445831082525867e-01 + -2.443426571517872e-01 + -2.441026388729581e-01 + -2.438630527595843e-01 + -2.436238981283992e-01 + -2.433851743000419e-01 + -2.431468806082007e-01 + -2.429090164035606e-01 + -2.426715810065056e-01 + -2.424345737214870e-01 + -2.421979939156839e-01 + -2.419618409122474e-01 + -2.417261139893861e-01 + -2.414908125047008e-01 + -2.412559357926221e-01 + -2.410214831428485e-01 + -2.407874538901436e-01 + -2.405538473594189e-01 + -2.403206628448788e-01 + -2.400878996494245e-01 + -2.398555571012901e-01 + -2.396236345489386e-01 + -2.393921312730178e-01 + -2.391610465589564e-01 + -2.389303797400675e-01 + -2.387001301206918e-01 + -2.384702970040557e-01 + -2.382408797142012e-01 + -2.380118775445049e-01 + -2.377832897784107e-01 + -2.375551157141706e-01 + -2.373273546676602e-01 + -2.371000059435911e-01 + -2.368730688080822e-01 + -2.366465425799626e-01 + -2.364204265795865e-01 + -2.361947200488833e-01 + -2.359694222928865e-01 + -2.357445326362645e-01 + -2.355200503199650e-01 + -2.352959746331166e-01 + -2.350723049000333e-01 + -2.348490404054174e-01 + -2.346261804119323e-01 + -2.344037241869703e-01 + -2.341816710532240e-01 + -2.339600202844186e-01 + -2.337387711161095e-01 + -2.335179228570654e-01 + -2.332974748051559e-01 + -2.330774262250223e-01 + -2.328577763695832e-01 + -2.326385245095027e-01 + -2.324196699339893e-01 + -2.322012119071908e-01 + -2.319831496985562e-01 + -2.317654825913850e-01 + -2.315482098501277e-01 + -2.313313307350805e-01 + -2.311148445095759e-01 + -2.308987504304352e-01 + -2.306830477605995e-01 + -2.304677357746768e-01 + -2.302528137313455e-01 + -2.300382808821649e-01 + -2.298241364802842e-01 + -2.296103797849810e-01 + -2.293970100645507e-01 + -2.291840265929282e-01 + -2.289714285853380e-01 + -2.287592152687787e-01 + -2.285473859575702e-01 + -2.283359398767679e-01 + -2.281248762354934e-01 + -2.279141943457151e-01 + -2.277038934347241e-01 + -2.274939727028900e-01 + -2.272844314557521e-01 + -2.270752689260884e-01 + -2.268664843063303e-01 + -2.266580768713468e-01 + -2.264500458690802e-01 + -2.262423905203003e-01 + -2.260351100742427e-01 + -2.258282037663114e-01 + -2.256216708189812e-01 + -2.254155104759721e-01 + -2.252097219699820e-01 + -2.250043045201664e-01 + -2.247992573593203e-01 + -2.245945797283117e-01 + -2.243902708632074e-01 + -2.241863299547213e-01 + -2.239827562297785e-01 + -2.237795489631809e-01 + -2.235767073479459e-01 + -2.233742305913306e-01 + -2.231721179508258e-01 + -2.229703686190215e-01 + -2.227689817967141e-01 + -2.225679567331226e-01 + -2.223672926389324e-01 + -2.221669887137792e-01 + -2.219670441735496e-01 + -2.217674582593449e-01 + -2.215682301863681e-01 + -2.213693591068690e-01 + -2.211708442449674e-01 + -2.209726848493868e-01 + -2.207748801280919e-01 + -2.205774292618204e-01 + -2.203803314334422e-01 + -2.201835858632719e-01 + -2.199871917828554e-01 + -2.197911484006530e-01 + -2.195954548584606e-01 + -2.194001103587555e-01 + -2.192051141421317e-01 + -2.190104654040938e-01 + -2.188161633272981e-01 + -2.186222070944807e-01 + -2.184285959003400e-01 + -2.182353289399314e-01 + -2.180424054040691e-01 + -2.178498244760091e-01 + -2.176575853577229e-01 + -2.174656872563868e-01 + -2.172741293153170e-01 + -2.170829107184905e-01 + -2.168920306960583e-01 + -2.167014883907840e-01 + -2.165112829716549e-01 + -2.163214136638050e-01 + -2.161318796380734e-01 + -2.159426800456078e-01 + -2.157538140457635e-01 + -2.155652808465100e-01 + -2.153770796378261e-01 + -2.151892095617934e-01 + -2.150016698096599e-01 + -2.148144595574814e-01 + -2.146275779264766e-01 + -2.144410241083473e-01 + -2.142547972973645e-01 + -2.140688966286696e-01 + -2.138833212713278e-01 + -2.136980704068839e-01 + -2.135131431962469e-01 + -2.133285387811797e-01 + -2.131442563097479e-01 + -2.129602949644751e-01 + -2.127766538888946e-01 + -2.125933322205115e-01 + -2.124103291538361e-01 + -2.122276438425608e-01 + -2.120452754131807e-01 + -2.118632230196053e-01 + -2.116814858091140e-01 + -2.115000629262062e-01 + -2.113189535366684e-01 + -2.111381567835468e-01 + -2.109576717897184e-01 + -2.107774976942802e-01 + -2.105976336477213e-01 + -2.104180788038142e-01 + -2.102388322993181e-01 + -2.100598932684242e-01 + -2.098812608470688e-01 + -2.097029341689293e-01 + -2.095249123662445e-01 + -2.093471945702010e-01 + -2.091697799107427e-01 + -2.089926675162990e-01 + -2.088158565139439e-01 + -2.086393460309292e-01 + -2.084631351904399e-01 + -2.082872231124364e-01 + -2.081116089361562e-01 + -2.079362917906518e-01 + -2.077612707758083e-01 + -2.075865450013143e-01 + -2.074121135936494e-01 + -2.072379756933602e-01 + -2.070641303864229e-01 + -2.068905767613353e-01 + -2.067173139701657e-01 + -2.065443411403108e-01 + -2.063716573678470e-01 + -2.061992617242399e-01 + -2.060271533191409e-01 + -2.058553312792487e-01 + -2.056837947057731e-01 + -2.055125426973447e-01 + -2.053415743575506e-01 + -2.051708887985432e-01 + -2.050004850901530e-01 + -2.048303622987561e-01 + -2.046605195888223e-01 + -2.044909560501713e-01 + -2.043216707137636e-01 + -2.041526627003059e-01 + -2.039839311053935e-01 + -2.038154749924674e-01 + -2.036472934779214e-01 + -2.034793856435669e-01 + -2.033117505334730e-01 + -2.031443872603400e-01 + -2.029772949053144e-01 + -2.028104725040109e-01 + -2.026439191805672e-01 + -2.024776340229360e-01 + -2.023116160442759e-01 + -2.021458643362796e-01 + -2.019803779931268e-01 + -2.018151560674621e-01 + -2.016501976152565e-01 + -2.014855017030598e-01 + -2.013210674074579e-01 + -2.011568937830132e-01 + -2.009929798869589e-01 + -2.008293247967324e-01 + -2.006659275530022e-01 + -2.005027871933542e-01 + -2.003399027889975e-01 + -2.001772733993469e-01 + -2.000148980648089e-01 + -1.998527758076494e-01 + -1.996909056937942e-01 + -1.995292867991256e-01 + -1.993679181495860e-01 + -1.992067987609143e-01 + -1.990459276660739e-01 + -1.988853039482369e-01 + -1.987249266385540e-01 + -1.985647947339026e-01 + -1.984049072747179e-01 + -1.982452632992336e-01 + -1.980858618372365e-01 + -1.979267019229292e-01 + -1.977677825816225e-01 + -1.976091028269504e-01 + -1.974506616652059e-01 + -1.972924581269546e-01 + -1.971344912595772e-01 + -1.969767600601777e-01 + -1.968192635197257e-01 + -1.966620006473419e-01 + -1.965049704914111e-01 + -1.963481720619957e-01 + -1.961916043159508e-01 + -1.960352662866058e-01 + -1.958791570023236e-01 + -1.957232754408347e-01 + -1.955676205736371e-01 + -1.954121914050787e-01 + -1.952569869811404e-01 + -1.951020062511957e-01 + -1.949472481743376e-01 + -1.947927118000400e-01 + -1.946383960967118e-01 + -1.944843000224015e-01 + -1.943304226010136e-01 + -1.941767627996486e-01 + -1.940233195719773e-01 + -1.938700919198527e-01 + -1.937170788011597e-01 + -1.935642791691659e-01 + -1.934116920404960e-01 + -1.932593163702813e-01 + -1.931071510855982e-01 + -1.929551951739442e-01 + -1.928034476111422e-01 + -1.926519073523142e-01 + -1.925005733427448e-01 + -1.923494445333268e-01 + -1.921985198850023e-01 + -1.920477983694047e-01 + -1.918972789099489e-01 + -1.917469604078139e-01 + -1.915968418647559e-01 + -1.914469222323946e-01 + -1.912972003977130e-01 + -1.911476753153419e-01 + -1.909983459354311e-01 + -1.908492111828614e-01 + -1.907002699990133e-01 + -1.905515213021572e-01 + -1.904029639829450e-01 + -1.902545969863778e-01 + -1.901064192518998e-01 + -1.899584296832387e-01 + -1.898106271909556e-01 + -1.896630106872466e-01 + -1.895155790805884e-01 + -1.893683312769490e-01 + -1.892212661839438e-01 + -1.890743827110565e-01 + -1.889276797429612e-01 + -1.887811561730439e-01 + -1.886348109311961e-01 + -1.884886428944042e-01 + -1.883426509295119e-01 + -1.881968339481026e-01 + -1.880511908244114e-01 + -1.879057204210790e-01 + -1.877604216379617e-01 + -1.876152933660684e-01 + -1.874703344759240e-01 + -1.873255438107255e-01 + -1.871809202288037e-01 + -1.870364626111082e-01 + -1.868921698587295e-01 + -1.867480408184902e-01 + -1.866040743068453e-01 + -1.864602692045282e-01 + -1.863166243684211e-01 + -1.861731386269271e-01 + -1.860298108368848e-01 + -1.858866398430710e-01 + -1.857436244746902e-01 + -1.856007635808946e-01 + -1.854580560069532e-01 + -1.853155005825300e-01 + -1.851730961153894e-01 + -1.850308414342497e-01 + -1.848887353926573e-01 + -1.847467767859671e-01 + -1.846049644137440e-01 + -1.844632971091011e-01 + -1.843217736893654e-01 + -1.841803929497542e-01 + -1.840391536710132e-01 + -1.838980546953601e-01 + -1.837570948428414e-01 + -1.836162728527662e-01 + -1.834755875142904e-01 + -1.833350376404768e-01 + -1.831946220322505e-01 + -1.830543394615971e-01 + -1.829141886951903e-01 + -1.827741685199023e-01 + -1.826342777082210e-01 + -1.824945150204152e-01 + -1.823548792146146e-01 + -1.822153690716325e-01 + -1.820759833652730e-01 + -1.819367208114371e-01 + -1.817975801678411e-01 + -1.816585602158104e-01 + -1.815196596908165e-01 + -1.813808773333636e-01 + -1.812422118861797e-01 + -1.811036620617022e-01 + -1.809652266051679e-01 + -1.808269042761388e-01 + -1.806886937510042e-01 + -1.805505937426575e-01 + -1.804126030135119e-01 + -1.802747202867512e-01 + -1.801369442562599e-01 + -1.799992736029428e-01 + -1.798617070428147e-01 + -1.797242432859927e-01 + -1.795868810229852e-01 + -1.794496189531687e-01 + -1.793124557648680e-01 + -1.791753901302353e-01 + -1.790384207459855e-01 + -1.789015462957270e-01 + -1.787647654308534e-01 + -1.786280768266134e-01 + -1.784914791546937e-01 + -1.783549710639760e-01 + -1.782185512276328e-01 + -1.780822183108111e-01 + -1.779459709418989e-01 + -1.778098077766785e-01 + -1.776737274641330e-01 + -1.775377286080068e-01 + -1.774018098685905e-01 + -1.772659699092733e-01 + -1.771302073149079e-01 + -1.769945207098710e-01 + -1.768589087303928e-01 + -1.767233699571559e-01 + -1.765879030229077e-01 + -1.764525065751527e-01 + -1.763171791703831e-01 + -1.761819193770276e-01 + -1.760467257991546e-01 + -1.759115970764966e-01 + -1.757765317826701e-01 + -1.756415284467932e-01 + -1.755065856823099e-01 + -1.753717020824757e-01 + -1.752368761936218e-01 + -1.751021065398607e-01 + -1.749673916979465e-01 + -1.748327302843573e-01 + -1.746981207950505e-01 + -1.745635617515470e-01 + -1.744290517410085e-01 + -1.742945892830799e-01 + -1.741601728915786e-01 + -1.740258011048612e-01 + -1.738914724532109e-01 + -1.737571854631234e-01 + -1.736229386541751e-01 + -1.734887304969607e-01 + -1.733545594900176e-01 + -1.732204242005106e-01 + -1.730863230847530e-01 + -1.729522545880760e-01 + -1.728182172369972e-01 + -1.726842095169024e-01 + -1.725502298924380e-01 + -1.724162768405715e-01 + -1.722823488297978e-01 + -1.721484443102564e-01 + -1.720145617082366e-01 + -1.718806995062888e-01 + -1.717468561876117e-01 + -1.716130301380271e-01 + -1.714792197950507e-01 + -1.713454236195253e-01 + -1.712116399980747e-01 + -1.710778673588311e-01 + -1.709441041583024e-01 + -1.708103487974718e-01 + -1.706765996579921e-01 + -1.705428551238503e-01 + -1.704091136122197e-01 + -1.702753735243250e-01 + -1.701416332337174e-01 + -1.700078910979654e-01 + -1.698741454939726e-01 + -1.697403948188084e-01 + -1.696066374424440e-01 + -1.694728717024124e-01 + -1.693390959182572e-01 + -1.692053084687103e-01 + -1.690715077127793e-01 + -1.689376919605925e-01 + -1.688038595533757e-01 + -1.686700088249354e-01 + -1.685361380772680e-01 + -1.684022456043037e-01 + -1.682683297240474e-01 + -1.681343887869522e-01 + -1.680004210524648e-01 + -1.678664247764668e-01 + -1.677323982879569e-01 + -1.675983398888628e-01 + -1.674642478421112e-01 + -1.673301203727337e-01 + -1.671959557470875e-01 + -1.670617522514179e-01 + -1.669275081523977e-01 + -1.667932216748827e-01 + -1.666588910302535e-01 + -1.665245144618999e-01 + -1.663900902261115e-01 + -1.662556165573334e-01 + -1.661210916150787e-01 + -1.659865136192500e-01 + -1.658518808205523e-01 + -1.657171913793817e-01 + -1.655824434869752e-01 + -1.654476353589082e-01 + -1.653127651402884e-01 + -1.651778310039089e-01 + -1.650428311475997e-01 + -1.649077636947325e-01 + -1.647726268054878e-01 + -1.646374186795111e-01 + -1.645021374143022e-01 + -1.643667811219276e-01 + -1.642313479645375e-01 + -1.640958360797542e-01 + -1.639602435821208e-01 + -1.638245685678920e-01 + -1.636888091342957e-01 + -1.635529633807896e-01 + -1.634170294056715e-01 + -1.632810052843662e-01 + -1.631448890987297e-01 + -1.630086789505001e-01 + -1.628723728914803e-01 + -1.627359689604526e-01 + -1.625994652175857e-01 + -1.624628597296842e-01 + -1.623261505411777e-01 + -1.621893356498993e-01 + -1.620524130844338e-01 + -1.619153808874262e-01 + -1.617782370829140e-01 + -1.616409796594323e-01 + -1.615036066042981e-01 + -1.613661159511956e-01 + -1.612285056749289e-01 + -1.610907737177844e-01 + -1.609529180644884e-01 + -1.608149367058714e-01 + -1.606768276166446e-01 + -1.605385887249777e-01 + -1.604002179666082e-01 + -1.602617132920370e-01 + -1.601230726507729e-01 + -1.599842939686116e-01 + -1.598453751511857e-01 + -1.597063141136520e-01 + -1.595671087574746e-01 + -1.594277569704320e-01 + -1.592882566576958e-01 + -1.591486057239582e-01 + -1.590088020577491e-01 + -1.588688434990599e-01 + -1.587287278927537e-01 + -1.585884531125515e-01 + -1.584480170419727e-01 + -1.583074175205078e-01 + -1.581666523320080e-01 + -1.580257193426469e-01 + -1.578846164090064e-01 + -1.577433413163997e-01 + -1.576018918624315e-01 + -1.574602658488709e-01 + -1.573184610699215e-01 + -1.571764753211041e-01 + -1.570343063929105e-01 + -1.568919520623428e-01 + -1.567494100904384e-01 + -1.566066782348808e-01 + -1.564637542612438e-01 + -1.563206358983480e-01 + -1.561773208679784e-01 + -1.560338069324230e-01 + -1.558900918260982e-01 + -1.557461732592160e-01 + -1.556020489404925e-01 + -1.554577165574562e-01 + -1.553131737930803e-01 + -1.551684183667380e-01 + -1.550234479797016e-01 + -1.548782603038531e-01 + -1.547328529851514e-01 + -1.545872236759721e-01 + -1.544413700402710e-01 + -1.542952897416497e-01 + -1.541489804232354e-01 + -1.540024397056934e-01 + -1.538556652055174e-01 + -1.537086545589509e-01 + -1.535614054107616e-01 + -1.534139153265976e-01 + -1.532661818894184e-01 + -1.531182027303390e-01 + -1.529699754364569e-01 + -1.528214975805129e-01 + -1.526727667337492e-01 + -1.525237804315604e-01 + -1.523745362382714e-01 + -1.522250317710374e-01 + -1.520752645246755e-01 + -1.519252320010430e-01 + -1.517749318043420e-01 + -1.516243614355856e-01 + -1.514735183783821e-01 + -1.513224001894709e-01 + -1.511710043669709e-01 + -1.510193283881065e-01 + -1.508673697644896e-01 + -1.507151259726486e-01 + -1.505625944726656e-01 + -1.504097727456887e-01 + -1.502566582737337e-01 + -1.501032485283334e-01 + -1.499495409558064e-01 + -1.497955329817901e-01 + -1.496412220312461e-01 + -1.494866055649385e-01 + -1.493316810218445e-01 + -1.491764458131949e-01 + -1.490208973395277e-01 + -1.488650330073115e-01 + -1.487088502321930e-01 + -1.485523464347014e-01 + -1.483955190026080e-01 + -1.482383652905619e-01 + -1.480808826638546e-01 + -1.479230685198502e-01 + -1.477649202713839e-01 + -1.476064352431592e-01 + -1.474476107543291e-01 + -1.472884441602761e-01 + -1.471289328556787e-01 + -1.469690741904771e-01 + -1.468088654425319e-01 + -1.466483039513407e-01 + -1.464873870643751e-01 + -1.463261120992439e-01 + -1.461644763685366e-01 + -1.460024771711030e-01 + -1.458401117873900e-01 + -1.456773775256328e-01 + -1.455142717039091e-01 + -1.453507916253095e-01 + -1.451869345373153e-01 + -1.450226976893540e-01 + -1.448580783981553e-01 + -1.446930739597145e-01 + -1.445276816274984e-01 + -1.443618986028185e-01 + -1.441957221635531e-01 + -1.440291496154044e-01 + -1.438621781832398e-01 + -1.436948050802729e-01 + -1.435270275400491e-01 + -1.433588428498931e-01 + -1.431902482406432e-01 + -1.430212409022274e-01 + -1.428518180756519e-01 + -1.426819769869911e-01 + -1.425117148424586e-01 + -1.423410288662751e-01 + -1.421699162875700e-01 + -1.419983743276740e-01 + -1.418264001727286e-01 + -1.416539910114460e-01 + -1.414811440470098e-01 + -1.413078564852965e-01 + -1.411341255423312e-01 + -1.409599484327010e-01 + -1.407853222965617e-01 + -1.406102443173973e-01 + -1.404347117561954e-01 + -1.402587217519092e-01 + -1.400822714659246e-01 + -1.399053581557436e-01 + -1.397279789611117e-01 + -1.395501310267636e-01 + -1.393718115937786e-01 + -1.391930178402762e-01 + -1.390137469173205e-01 + -1.388339959972602e-01 + -1.386537622953096e-01 + -1.384730430031857e-01 + -1.382918352262208e-01 + -1.381101361784074e-01 + -1.379279430940128e-01 + -1.377452530885734e-01 + -1.375620633453186e-01 + -1.373783710804598e-01 + -1.371941734475252e-01 + -1.370094676273606e-01 + -1.368242508215203e-01 + -1.366385202106050e-01 + -1.364522729969404e-01 + -1.362655063841710e-01 + -1.360782175127518e-01 + -1.358904035964053e-01 + -1.357020618930480e-01 + -1.355131895302153e-01 + -1.353237837054462e-01 + -1.351338416922692e-01 + -1.349433606493001e-01 + -1.347523377766847e-01 + -1.345607703467432e-01 + -1.343686555800670e-01 + -1.341759906744941e-01 + -1.339827728348106e-01 + -1.337889993407819e-01 + -1.335946674413715e-01 + -1.333997743261954e-01 + -1.332043172962129e-01 + -1.330082936252972e-01 + -1.328117004983506e-01 + -1.326145352418741e-01 + -1.324167951779929e-01 + -1.322184775207451e-01 + -1.320195795498869e-01 + -1.318200985870884e-01 + -1.316200319613715e-01 + -1.314193769770063e-01 + -1.312181309395709e-01 + -1.310162911860090e-01 + -1.308138550466099e-01 + -1.306108198680959e-01 + -1.304071830473609e-01 + -1.302029419358534e-01 + -1.299980938748928e-01 + -1.297926362720222e-01 + -1.295865665431496e-01 + -1.293798820977739e-01 + -1.291725803345192e-01 + -1.289646586840201e-01 + -1.287561146028010e-01 + -1.285469455426532e-01 + -1.283371489741077e-01 + -1.281267223855238e-01 + -1.279156632656401e-01 + -1.277039691180485e-01 + -1.274916374652222e-01 + -1.272786658468367e-01 + -1.270650518164191e-01 + -1.268507929437779e-01 + -1.266358868257778e-01 + -1.264203310530910e-01 + -1.262041232080785e-01 + -1.259872609212462e-01 + -1.257697418614985e-01 + -1.255515637216261e-01 + -1.253327241582721e-01 + -1.251132208452764e-01 + -1.248930515084944e-01 + -1.246722139029198e-01 + -1.244507057917270e-01 + -1.242285249387353e-01 + -1.240056691417677e-01 + -1.237821362222557e-01 + -1.235579240163024e-01 + -1.233330303641722e-01 + -1.231074531412701e-01 + -1.228811902909497e-01 + -1.226542397328350e-01 + -1.224265993926709e-01 + -1.221982672554952e-01 + -1.219692413178169e-01 + -1.217395195880366e-01 + -1.215091001037845e-01 + -1.212779809466277e-01 + -1.210461602256936e-01 + -1.208136360512357e-01 + -1.205804065871132e-01 + -1.203464700244819e-01 + -1.201118245085727e-01 + -1.198764682774020e-01 + -1.196403996473917e-01 + -1.194036168896808e-01 + -1.191661183059585e-01 + -1.189279022478277e-01 + -1.186889671039581e-01 + -1.184493112863093e-01 + -1.182089332317922e-01 + -1.179678314226111e-01 + -1.177260043675167e-01 + -1.174834505981953e-01 + -1.172401686820595e-01 + -1.169961572351099e-01 + -1.167514149230550e-01 + -1.165059404117411e-01 + -1.162597324012717e-01 + -1.160127896494247e-01 + -1.157651109471359e-01 + -1.155166951180050e-01 + -1.152675410245315e-01 + -1.150176475647009e-01 + -1.147670136740031e-01 + -1.145156383362403e-01 + -1.142635205942373e-01 + -1.140106595167702e-01 + -1.137570541746248e-01 + -1.135027037005393e-01 + -1.132476072885310e-01 + -1.129917641930528e-01 + -1.127351736954119e-01 + -1.124778350964029e-01 + -1.122197477241451e-01 + -1.119609110122396e-01 + -1.117013244465126e-01 + -1.114409874638995e-01 + -1.111798996306716e-01 + -1.109180606010562e-01 + -1.106554699641756e-01 + -1.103921273860412e-01 + -1.101280326261970e-01 + -1.098631854961093e-01 + -1.095975858385727e-01 + -1.093312335328026e-01 + -1.090641285282797e-01 + -1.087962708201439e-01 + -1.085276604456853e-01 + -1.082582975002112e-01 + -1.079881821487157e-01 + -1.077173146235393e-01 + -1.074456951780328e-01 + -1.071733241222459e-01 + -1.069002018428373e-01 + -1.066263287812705e-01 + -1.063517054311524e-01 + -1.060763323447030e-01 + -1.058002101349244e-01 + -1.055233394662503e-01 + -1.052457210591484e-01 + -1.049673557111256e-01 + -1.046882442747131e-01 + -1.044083876525769e-01 + -1.041277868396362e-01 + -1.038464428925467e-01 + -1.035643569070283e-01 + -1.032815300276830e-01 + -1.029979634724506e-01 + -1.027136585692167e-01 + -1.024286166734134e-01 + -1.021428391952729e-01 + -1.018563276648054e-01 + -1.015690836461885e-01 + -1.012811087487812e-01 + -1.009924046817547e-01 + -1.007029732152899e-01 + -1.004128161832720e-01 + -1.001219355157012e-01 + -9.983033318947014e-02 + -9.953801123789381e-02 + -9.924497181065381e-02 + -9.895121710675164e-02 + -9.865674937610269e-02 + -9.836157098451072e-02 + -9.806568435550449e-02 + -9.776909196067303e-02 + -9.747179635418697e-02 + -9.717380018935569e-02 + -9.687510621844479e-02 + -9.657571724434684e-02 + -9.627563612429342e-02 + -9.597486578738405e-02 + -9.567340928055243e-02 + -9.537126972794066e-02 + -9.506845031433311e-02 + -9.476495428226560e-02 + -9.446078497156121e-02 + -9.415594584893169e-02 + -9.385044042616277e-02 + -9.354427227181475e-02 + -9.323744504129654e-02 + -9.292996250412121e-02 + -9.262182850819620e-02 + -9.231304696021701e-02 + -9.200362185853247e-02 + -9.169355729461479e-02 + -9.138285746240042e-02 + -9.107152658866502e-02 + -9.075956898041553e-02 + -9.044698911371001e-02 + -9.013379148226228e-02 + -8.981998063663986e-02 + -8.950556130228651e-02 + -8.919053824746566e-02 + -8.887491629233073e-02 + -8.855870039130662e-02 + -8.824189556852820e-02 + -8.792450692262105e-02 + -8.760653968435946e-02 + -8.728799913331863e-02 + -8.696889060279582e-02 + -8.664921956673162e-02 + -8.632899159487925e-02 + -8.600821233560418e-02 + -8.568688750540578e-02 + -8.536502290181033e-02 + -8.504262441718942e-02 + -8.471969805751253e-02 + -8.439624991228166e-02 + -8.407228614692197e-02 + -8.374781300392073e-02 + -8.342283682562317e-02 + -8.309736406563741e-02 + -8.277140122021633e-02 + -8.244495489588025e-02 + -8.211803185128563e-02 + -8.179063884910803e-02 + -8.146278271646745e-02 + -8.113447041766966e-02 + -8.080570906396743e-02 + -8.047650581443898e-02 + -8.014686781276095e-02 + -7.981680240792462e-02 + -7.948631704884632e-02 + -7.915541916537581e-02 + -7.882411634928695e-02 + -7.849241630024972e-02 + -7.816032674199919e-02 + -7.782785552351333e-02 + -7.749501058768483e-02 + -7.716179991262426e-02 + -7.682823159405887e-02 + -7.649431382724470e-02 + -7.616005485767063e-02 + -7.582546305035900e-02 + -7.549054686796573e-02 + -7.515531479419155e-02 + -7.481977542018518e-02 + -7.448393744841550e-02 + -7.414780964186224e-02 + -7.381140084542565e-02 + -7.347471999131863e-02 + -7.313777608894645e-02 + -7.280057821330421e-02 + -7.246313551410177e-02 + -7.212545725749871e-02 + -7.178755277686714e-02 + -7.144943146088469e-02 + -7.111110278446059e-02 + -7.077257629326426e-02 + -7.043386160590276e-02 + -7.009496843792977e-02 + -6.975590657859251e-02 + -6.941668588038064e-02 + -6.907731623736572e-02 + -6.873780762436528e-02 + -6.839817013263073e-02 + -6.805841390025939e-02 + -6.771854911509186e-02 + -6.737858603607710e-02 + -6.703853501790490e-02 + -6.669840646610939e-02 + -6.635821080020089e-02 + -6.601795854049251e-02 + -6.567766029345612e-02 + -6.533732672933422e-02 + -6.499696856244534e-02 + -6.465659655384894e-02 + -6.431622152906083e-02 + -6.397585437117004e-02 + -6.363550601749234e-02 + -6.329518746487584e-02 + -6.295490977261127e-02 + -6.261468405232740e-02 + -6.227452144919842e-02 + -6.193443314782195e-02 + -6.159443038613483e-02 + -6.125452449175782e-02 + -6.091472682299209e-02 + -6.057504875634485e-02 + -6.023550170757411e-02 + -5.989609715178513e-02 + -5.955684662483948e-02 + -5.921776169220818e-02 + -5.887885392543541e-02 + -5.854013491232313e-02 + -5.820161634720029e-02 + -5.786330995026137e-02 + -5.752522743033200e-02 + -5.718738052319666e-02 + -5.684978102238282e-02 + -5.651244078415603e-02 + -5.617537160914179e-02 + -5.583858533460867e-02 + -5.550209389764803e-02 + -5.516590918758542e-02 + -5.483004310132478e-02 + -5.449450760284144e-02 + -5.415931467224975e-02 + -5.382447627285256e-02 + -5.349000433169809e-02 + -5.315591089010736e-02 + -5.282220800586091e-02 + -5.248890761304951e-02 + -5.215602173570349e-02 + -5.182356244333215e-02 + -5.149154173522678e-02 + -5.115997163165661e-02 + -5.082886416999516e-02 + -5.049823136495267e-02 + -5.016808523392447e-02 + -4.983843779429676e-02 + -4.950930104255546e-02 + -4.918068697018742e-02 + -4.885260756307724e-02 + -4.852507478656667e-02 + -4.819810059193260e-02 + -4.787169691654435e-02 + -4.754587567726797e-02 + -4.722064876717863e-02 + -4.689602805511645e-02 + -4.657202539266345e-02 + -4.624865260469157e-02 + -4.592592148337583e-02 + -4.560384379218360e-02 + -4.528243126408893e-02 + -4.496169559628109e-02 + -4.464164845065374e-02 + -4.432230145577399e-02 + -4.400366620090135e-02 + -4.368575422918912e-02 + -4.336857704568598e-02 + -4.305214611378011e-02 + -4.273647284209545e-02 + -4.242156859535529e-02 + -4.210744469338823e-02 + -4.179411239819886e-02 + -4.148158291999365e-02 + -4.116986741259326e-02 + -4.085897697584740e-02 + -4.054892265423421e-02 + -4.023971542131075e-02 + -3.993136619382251e-02 + -3.962388583123071e-02 + -3.931728511726146e-02 + -3.901157477126550e-02 + -3.870676544906659e-02 + -3.840286772630143e-02 + -3.809989211312446e-02 + -3.779784905219891e-02 + -3.749674889469364e-02 + -3.719660192057603e-02 + -3.689741833904486e-02 + -3.659920826728452e-02 + -3.630198174507707e-02 + -3.600574873447752e-02 + -3.571051910326670e-02 + -3.541630263528623e-02 + -3.512310902944081e-02 + -3.483094789226868e-02 + -3.453982873906083e-02 + -3.424976098893085e-02 + -3.396075396966352e-02 + -3.367281691959212e-02 + -3.338595897696143e-02 + -3.310018917253339e-02 + -3.281551644593574e-02 + -3.253194963945627e-02 + -3.224949747985180e-02 + -3.196816859917648e-02 + -3.168797153104005e-02 + -3.140891468854379e-02 + -3.113100638362195e-02 + -3.085425482400445e-02 + -3.057866810270934e-02 + -3.030425420554928e-02 + -3.003102099769914e-02 + -2.975897623664901e-02 + -2.948812757423692e-02 + -2.921848253324668e-02 + -2.895004852283206e-02 + -2.868283284398848e-02 + -2.841684266935389e-02 + -2.815208505554401e-02 + -2.788856694668657e-02 + -2.762629515277662e-02 + -2.736527636581735e-02 + -2.710551716378724e-02 + -2.684702399109470e-02 + -2.658980317107453e-02 + -2.633386090723251e-02 + -2.607920326420626e-02 + -2.582583618939347e-02 + -2.557376551170278e-02 + -2.532299691452088e-02 + -2.507353595904179e-02 + -2.482538808499682e-02 + -2.457855859507147e-02 + -2.433305266394129e-02 + -2.408887533435539e-02 + -2.384603151841623e-02 + -2.360452600145211e-02 + -2.336436343201402e-02 + -2.312554832609387e-02 + -2.288808507226996e-02 + -2.265197791904223e-02 + -2.241723098404469e-02 + -2.218384825955722e-02 + -2.195183359578144e-02 + -2.172119070564114e-02 + -2.149192317903017e-02 + -2.126403446983029e-02 + -2.103752788800763e-02 + -2.081240661670658e-02 + -2.058867370373213e-02 + -2.036633206151460e-02 + -2.014538447470562e-02 + -1.992583358220780e-02 + -1.970768189350454e-02 + -1.949093179354288e-02 + -1.927558551890179e-02 + -1.906164517346932e-02 + -1.884911273803516e-02 + -1.863799005561765e-02 + -1.842827883084014e-02 + -1.821998063919436e-02 + -1.801309692347624e-02 + -1.780762899421212e-02 + -1.760357803216378e-02 + -1.740094507853177e-02 + -1.719973104881908e-02 + -1.699993673354589e-02 + -1.680156278321953e-02 + -1.660460972117107e-02 + -1.640907794332531e-02 + -1.621496771146485e-02 + -1.602227916433384e-02 + -1.583101231371427e-02 + -1.564116703862817e-02 + -1.545274309883748e-02 + -1.526574012772238e-02 + -1.508015761914186e-02 + -1.489599495303444e-02 + -1.471325139301425e-02 + -1.453192606709004e-02 + -1.435201798658663e-02 + -1.417352604127694e-02 + -1.399644899327932e-02 + -1.382078549302728e-02 + -1.364653407164367e-02 + -1.347369313289915e-02 + -1.330226097046918e-02 + -1.313223576283522e-02 + -1.296361556501821e-02 + -1.279639832327015e-02 + -1.263058187022890e-02 + -1.246616392163480e-02 + -1.230314208589229e-02 + -1.214151385550256e-02 + -1.198127661271531e-02 + -1.182242763705999e-02 + -1.166496409538715e-02 + -1.150888304589847e-02 + -1.135418144553720e-02 + -1.120085614521435e-02 + -1.104890388968280e-02 + -1.089832132231912e-02 + -1.074910498405016e-02 + -1.060125131793449e-02 + -1.045475666967276e-02 + -1.030961728045836e-02 + -1.016582929759894e-02 + -1.002338877483435e-02 + -9.882291666582974e-03 + -9.742533838318660e-03 + -9.604111064390042e-03 + -9.467019020603698e-03 + -9.331253297647066e-03 + -9.196809399717920e-03 + -9.063682741005771e-03 + -8.931868652392608e-03 + -8.801362376326071e-03 + -8.672159070075210e-03 + -8.544253813557785e-03 + -8.417641603575709e-03 + -8.292317355716863e-03 + -8.168275911736944e-03 + -8.045512032694060e-03 + -7.924020397696789e-03 + -7.803795618017998e-03 + -7.684832236645861e-03 + -7.567124714929550e-03 + -7.450667444285828e-03 + -7.335454748033539e-03 + -7.221480883382279e-03 + -7.108740043647531e-03 + -6.997226348639058e-03 + -6.886933855315346e-03 + -6.777856561420043e-03 + -6.669988397445708e-03 + -6.563323236817328e-03 + -6.457854897474280e-03 + -6.353577131920331e-03 + -6.250483639666226e-03 + -6.148568068731946e-03 + -6.047824005897748e-03 + -5.948244987599076e-03 + -5.849824501347084e-03 + -5.752555978513681e-03 + -5.656432807264865e-03 + -5.561448332218353e-03 + -5.467595840626229e-03 + -5.374868578311233e-03 + -5.283259752176146e-03 + -5.192762521793490e-03 + -5.103370006626977e-03 + -5.015075286629148e-03 + -4.927871401782054e-03 + -4.841751355904269e-03 + -4.756708115524279e-03 + -4.672734611342882e-03 + -4.589823741835811e-03 + -4.507968371897898e-03 + -4.427161334111035e-03 + -4.347395432360992e-03 + -4.268663440821394e-03 + -4.190958105123732e-03 + -4.114272145237943e-03 + -4.038598254543495e-03 + -3.963929102325757e-03 + -3.890257335680627e-03 + -3.817575578228647e-03 + -3.745876433060482e-03 + -3.675152484340320e-03 + -3.605396296371936e-03 + -3.536600416225055e-03 + -3.468757375181376e-03 + -3.401859688514519e-03 + -3.335899857279008e-03 + -3.270870369624132e-03 + -3.206763701552144e-03 + -3.143572317880366e-03 + -3.081288673370167e-03 + -3.019905214426235e-03 + -2.959414379161780e-03 + -2.899808598243805e-03 + -2.841080297295089e-03 + -2.783221897187762e-03 + -2.726225814481816e-03 + -2.670084462721576e-03 + -2.614790253659214e-03 + -2.560335598217736e-03 + -2.506712907773368e-03 + -2.453914594305456e-03 + -2.401933071402304e-03 + -2.350760756079694e-03 + -2.300390068609935e-03 + -2.250813433830373e-03 + -2.202023282926124e-03 + -2.154012052729510e-03 + -2.106772187286276e-03 + -2.060296139752280e-03 + -2.014576371403607e-03 + -1.969605353508076e-03 + -1.925375568654703e-03 + -1.881879509874747e-03 + -1.839109683164610e-03 + -1.797058608044933e-03 + -1.755718816706420e-03 + -1.715082857166331e-03 + -1.675143293280333e-03 + -1.635892703443056e-03 + -1.597323683697497e-03 + -1.559428848712492e-03 + -1.522200830321536e-03 + -1.485632280183934e-03 + -1.449715870092584e-03 + -1.414444291041649e-03 + -1.379810256474448e-03 + -1.345806501791486e-03 + -1.312425783716085e-03 + -1.279660883530597e-03 + -1.247504606026809e-03 + -1.215949779407020e-03 + -1.184989258561609e-03 + -1.154615923413642e-03 + -1.124822679454977e-03 + -1.095602461024569e-03 + -1.066948228352973e-03 + -1.038852968864840e-03 + -1.011309701783447e-03 + -9.843114734261671e-04 + -9.578513585924095e-04 + -9.319224654553773e-04 + -9.065179311555053e-04 + -8.816309237062864e-04 + -8.572546450286300e-04 + -8.333823272254078e-04 + -8.100072355517002e-04 + -7.871226705798197e-04 + -7.647219641139264e-04 + -7.427984826268421e-04 + -7.213456295816899e-04 + -7.003568409622573e-04 + -6.798255887472549e-04 + -6.597453829223955e-04 + -6.401097674232178e-04 + -6.209123240167792e-04 + -6.021466729184949e-04 + -5.838064694784330e-04 + -5.658854088227745e-04 + -5.483772251938055e-04 + -5.312756891491387e-04 + -5.145746125261390e-04 + -4.982678466736966e-04 + -4.823492804447342e-04 + -4.668128456938979e-04 + -4.516525141842837e-04 + -4.368622962674093e-04 + -4.224362466667431e-04 + -4.083684605074392e-04 + -3.946530726767535e-04 + -3.812842634726816e-04 + -3.682562540846601e-04 + -3.555633067280622e-04 + -3.431997298953713e-04 + -3.311598733734528e-04 + -3.194381292167991e-04 + -3.080289365424697e-04 + -2.969267761950205e-04 + -2.861261725181284e-04 + -2.756216974519896e-04 + -2.654079650780054e-04 + -2.554796342192304e-04 + -2.458314117831762e-04 + -2.364580472261255e-04 + -2.273543358783364e-04 + -2.185151214599497e-04 + -2.099352907310207e-04 + -2.016097775283348e-04 + -1.935335642058985e-04 + -1.857016766078902e-04 + -1.781091887621722e-04 + -1.707512232636694e-04 + -1.636229467286454e-04 + -1.567195750846747e-04 + -1.500363727286114e-04 + -1.435686485603325e-04 + -1.373117617901810e-04 + -1.312611200233150e-04 + -1.254121759173047e-04 + -1.197604333131590e-04 + -1.143014443478538e-04 + -1.090308067994204e-04 + -1.039441703359566e-04 + -9.903723276260782e-05 + -9.430573818110019e-05 + -8.974548326970851e-05 + -8.535231263786576e-05 + -8.112211782233505e-05 + -7.705084341917009e-05 + -7.313448187442813e-05 + -6.936907333027644e-05 + -6.575071119249467e-05 + -6.227553658275769e-05 + -5.893973914900695e-05 + -5.573956203853484e-05 + -5.267129595161032e-05 + -4.973128084575291e-05 + -4.691591029739419e-05 + -4.422162539456759e-05 + -4.164491727590835e-05 + -3.918233061143914e-05 + -3.683045757249665e-05 + -3.458594118927672e-05 + -3.244547785270521e-05 + -3.040581149216269e-05 + -2.846373767254703e-05 + -2.661610506551807e-05 + -2.485980997915884e-05 + -2.319180110803831e-05 + -2.160907991664170e-05 + -2.010869565536285e-05 + -1.868775067119526e-05 + -1.734339969669114e-05 + -1.607284546059277e-05 + -1.487334444060605e-05 + -1.374220506933501e-05 + -1.267678404087566e-05 + -1.167449238525668e-05 + -1.073279264625808e-05 + -9.849195952118955e-06 + -9.021268250139948e-06 + -8.246626567968640e-06 + -7.522936912951058e-06 + -6.847920492700095e-06 + -6.219349168072015e-06 + -5.635044236568559e-06 + -5.092882470932048e-06 + -4.590790895044201e-06 + -4.126746487291455e-06 + -3.698781859286729e-06 + -3.304979520120749e-06 + -2.943472506918129e-06 + -2.612449510984778e-06 + -2.310148834845521e-06 + -2.034859929271865e-06 + -1.784927798002038e-06 + -1.558746837246077e-06 + -1.354763241038800e-06 + -1.171478551126456e-06 + -1.007443551831214e-06 + -8.612614901318561e-07 + -7.315906671893518e-07 + -6.171385461507109e-07 + -5.166657190198488e-07 + -4.289874671965282e-07 + -3.529682224298676e-07 + -2.875261969469119e-07 + -2.316338735426513e-07 + -1.843129441850586e-07 + -1.446395043479685e-07 + -1.117434618507405e-07 + -8.480406305106530e-08 + -6.305553831873507e-08 + -4.578544870958251e-08 + -3.233089380928512e-08 + -2.208448022054805e-08 + -1.449165750478591e-08 + -9.047683233008124e-09 + -5.303766739728543e-09 + -2.863504097386866e-09 + -1.380623394721897e-09 + -5.650641971230870e-10 + -1.790372475752245e-10 + -3.511990521548007e-11 + -8.192061809269277e-13 + 0.000000000000000e+00 diff --git a/examples/SPIN/test_problems/validation_nve/in.spin.iron-nve b/examples/SPIN/test_problems/validation_nve/in.spin.iron-nve new file mode 100644 index 0000000000000000000000000000000000000000..f00fb1ec12500b61e3517fd307bf2c7c5dcf7cea --- /dev/null +++ b/examples/SPIN/test_problems/validation_nve/in.spin.iron-nve @@ -0,0 +1,49 @@ +# bcc iron in a 3d periodic box + +clear +units metal +atom_style spin + +dimension 3 +boundary p p p + +# necessary for the serial algorithm (sametag) +atom_modify map array + +lattice bcc 2.8665 +region box block 0.0 3.0 0.0 3.0 0.0 3.0 +create_box 1 box +create_atoms 1 box + +# setting mass, mag. moments, and interactions for bcc iron + +mass 1 55.845 +set group all spin/random 31 2.2 +velocity all create 100 4928459 rot yes dist gaussian + +pair_style hybrid/overlay eam/alloy spin/exchange 3.5 +pair_coeff * * eam/alloy Fe_Mishin2006.eam.alloy Fe +pair_coeff * * spin/exchange exchange 3.4 0.02726 0.2171 1.841 + +neighbor 0.1 bin +neigh_modify every 10 check yes delay 20 + +fix 1 all precession/spin zeeman 0.0 0.0 0.0 1.0 +fix 2 all langevin/spin 0.0 0.00 21 +fix 3 all nve/spin lattice moving +timestep 0.0001 + +# compute and output options + +compute out_mag all spin +compute out_pe all pe +compute out_ke all ke +compute out_temp all temp + +variable emag equal c_out_mag[5] +variable tmag equal c_out_mag[6] + +thermo_style custom step time v_tmag temp v_emag ke pe etotal +thermo 200 + +run 100000 diff --git a/examples/SPIN/test_problems/validation_nve/plot_nve.py b/examples/SPIN/test_problems/validation_nve/plot_nve.py new file mode 100755 index 0000000000000000000000000000000000000000..ffa7defaeda2e9599af8da0a80e4413280b470ee --- /dev/null +++ b/examples/SPIN/test_problems/validation_nve/plot_nve.py @@ -0,0 +1,46 @@ +#!/usr/bin/env python3 + +import numpy as np, pylab, tkinter +import matplotlib.pyplot as plt +from scipy.optimize import curve_fit +from decimal import * +import sys, string, os + + +argv = sys.argv +if len(argv) != 3: + print("Syntax: ./plot_precession.py res_lammps.dat") + sys.exit() + +dirname = os.path.join(os.getcwd(), "Feb_07") +lammps_file = sys.argv[1] +llg_file = sys.argv[2] + +t,tmag,temp,e_mag,e_kin,e_pot,e_tot = np.loadtxt(lammps_file,skiprows=0, usecols=(1,2,3,4,5,6,7),unpack=True) + +fig = plt.figure(figsize=(8,8)) +ax1 = plt.subplot(3,1,1) +ax2 = plt.subplot(3,1,2) +ax3 = plt.subplot(3,1,3) + +ax1.plot(t, e_tot, 'k-', label='Total energy') +ax1.plot(t, e_pot, 'r-', label='Potential energy') +ax1.set_ylabel("E (eV)") +ax1.legend(loc=3) + +ax2.plot(t, e_kin, 'b-', label='Kinetic energy') +ax2.plot(t, e_mag, 'g-', label='Magnetic energy') +ax2.set_ylabel("E (eV)") +ax2.legend(loc=3) + +ax3.plot(t, temp, 'b--', label='Latt. temperature') +ax3.plot(t, tmag, 'r--', label='Spin temperature') +ax3.set_ylabel("T (K)") +ax3.legend(loc=3) + +plt.xlabel('Time (in ps)') +plt.legend() +plt.show() + +fig.savefig(os.path.join(os.getcwd(), "nve_spin_lattice.pdf"), bbox_inches="tight") +plt.close(fig) diff --git a/examples/SPIN/test_problems/validation_nve/run-test-nve.sh b/examples/SPIN/test_problems/validation_nve/run-test-nve.sh new file mode 100755 index 0000000000000000000000000000000000000000..441e7cf46d7c3ceb27c02a8f4bc18afeb0760331 --- /dev/null +++ b/examples/SPIN/test_problems/validation_nve/run-test-nve.sh @@ -0,0 +1,16 @@ +#!/bin/bash + +# clean old res +rm res_*.dat + +# compute Lammps +./../../../../src/lmp_serial \ + -in in.spin.iron-nve +in="$(grep -n Step log.lammps | awk -F ':' '{print $1}')" +en="$(grep -n Loop log.lammps | awk -F ':' '{print $1}')" +in="$(echo "$in+1" | bc -l)" +en="$(echo "$en-$in" | bc -l)" +tail -n +$in log.lammps | head -n $en > res_lammps.dat + +# plot results +python3 -m plot_nve.py res_lammps.dat res_llg.dat diff --git a/examples/SPIN/test_problems/validation_nvt/Fe_Mishin2006.eam.alloy b/examples/SPIN/test_problems/validation_nvt/Fe_Mishin2006.eam.alloy new file mode 100644 index 0000000000000000000000000000000000000000..69231bb7eeed5677009482896fe520f4445413dd --- /dev/null +++ b/examples/SPIN/test_problems/validation_nvt/Fe_Mishin2006.eam.alloy @@ -0,0 +1,15009 @@ +comment 1 +comment 2 +Converted by Ganga P Purja Pun using C++ code on Mon Nov 3 10:48:17 2014 +1 Fe +5001 2.400000000000000e-03 5001 1.134673400048920e-03 5.673367000244601e+00 +26 5.584700000000000e+01 2.855300000000000e+00 BCC + 0.000000000000000e+00 + -2.338738741480766e-02 + -4.628214468925276e-02 + -6.912258036387915e-02 + -9.175603963501618e-02 + -1.141497214000000e-01 + -1.363388222824136e-01 + -1.583226111166723e-01 + -1.800965752913192e-01 + -2.016645989796093e-01 + -2.230289901000000e-01 + -2.441907391820846e-01 + -2.651515164004249e-01 + -2.859130554412839e-01 + -3.064769176965011e-01 + -3.268446844000000e-01 + -3.470179531091855e-01 + -3.669982968636285e-01 + -3.867872784635140e-01 + -4.063864535839295e-01 + -4.257973671999999e-01 + -4.450215551034667e-01 + -4.640605423684923e-01 + -4.829158454463851e-01 + -5.015889707095635e-01 + -5.200814146000000e-01 + -5.383946650297390e-01 + -5.565301991603658e-01 + -5.744894857268537e-01 + -5.922739837155686e-01 + -6.098851423000000e-01 + -6.273244022645037e-01 + -6.445931939756846e-01 + -6.616929394780281e-01 + -6.786250511352716e-01 + -6.953909318999999e-01 + -7.119919765952718e-01 + -7.284295696432279e-01 + -7.447050873484842e-01 + -7.608198966551055e-01 + -7.767753551999997e-01 + -7.925728126189590e-01 + -8.082136084644670e-01 + -8.236990743647939e-01 + -8.390305327768360e-01 + -8.542092970000001e-01 + -8.692366724924486e-01 + -8.841139549244775e-01 + -8.988424321942350e-01 + -9.134233831702263e-01 + -9.278580778000000e-01 + -9.421477783833053e-01 + -9.562937376266863e-01 + -9.702972006149804e-01 + -9.841594035897939e-01 + -9.978815741999999e-01 + -1.011464932626877e+00 + -1.024910689374227e+00 + -1.038220047492379e+00 + -1.051394201530088e+00 + -1.064434338000000e+00 + -1.077341636148692e+00 + -1.090117264995124e+00 + -1.102762386491716e+00 + -1.115278154872840e+00 + -1.127665716000000e+00 + -1.139926208397942e+00 + -1.152060761127338e+00 + -1.164070496370367e+00 + -1.175956528594255e+00 + -1.187719964000000e+00 + -1.199361901614307e+00 + -1.210883431375302e+00 + -1.222285636497208e+00 + -1.233569592577916e+00 + -1.244736367000000e+00 + -1.255787020138112e+00 + -1.266722603828963e+00 + -1.277544163022812e+00 + -1.288252734706093e+00 + -1.298849349000000e+00 + -1.309335029515858e+00 + -1.319710789766606e+00 + -1.329977637188551e+00 + -1.340136572985217e+00 + -1.350188590000000e+00 + -1.360134674013246e+00 + -1.369975802739515e+00 + -1.379712947700534e+00 + -1.389347073262624e+00 + -1.398879136000000e+00 + -1.408310086019347e+00 + -1.417640866058629e+00 + -1.426872412303706e+00 + -1.436005653062347e+00 + -1.445041510000000e+00 + -1.453980898788701e+00 + -1.462824726507764e+00 + -1.471573894410746e+00 + -1.480229297407323e+00 + -1.488791823000000e+00 + -1.497262352264216e+00 + -1.505641758273629e+00 + -1.513930908641532e+00 + -1.522130664940848e+00 + -1.530241881000000e+00 + -1.538265404312065e+00 + -1.546202075663511e+00 + -1.554052729949587e+00 + -1.561818194964572e+00 + -1.569499292000000e+00 + -1.577096836740392e+00 + -1.584611637631811e+00 + -1.592044497451960e+00 + -1.599396212413425e+00 + -1.606667572000000e+00 + -1.613859360067553e+00 + -1.620972353850301e+00 + -1.628007324820493e+00 + -1.634965037585305e+00 + -1.641846251000000e+00 + -1.648651718746855e+00 + -1.655382187120556e+00 + -1.662038397074428e+00 + -1.668621083574689e+00 + -1.675130975000000e+00 + -1.681568794320005e+00 + -1.687935258528783e+00 + -1.694231079461267e+00 + -1.700456962682860e+00 + -1.706613607000000e+00 + -1.712701705964896e+00 + -1.718721948142722e+00 + -1.724675016499694e+00 + -1.730561586828580e+00 + -1.736382330000000e+00 + -1.742137912457411e+00 + -1.747828994017656e+00 + -1.753456229026646e+00 + -1.759020265526974e+00 + -1.764521747000000e+00 + -1.769961312537754e+00 + -1.775339594027171e+00 + -1.780657218386706e+00 + -1.785914807192779e+00 + -1.791112977000000e+00 + -1.796252339747382e+00 + -1.801333500673453e+00 + -1.806357060360666e+00 + -1.811323614328498e+00 + -1.816233753000000e+00 + -1.821088062150410e+00 + -1.825887120985276e+00 + -1.830631504346673e+00 + -1.835321782397329e+00 + -1.839958520000000e+00 + -1.844542277375300e+00 + -1.849073608812209e+00 + -1.853553064572349e+00 + -1.857981190434394e+00 + -1.862358526000000e+00 + -1.866685606181999e+00 + -1.870962962067843e+00 + -1.875191119963197e+00 + -1.879370599902195e+00 + -1.883501918000000e+00 + -1.887585586736770e+00 + -1.891622112755978e+00 + -1.895611998485404e+00 + -1.899555741651499e+00 + -1.903453835000000e+00 + -1.907306767129976e+00 + -1.911115021853308e+00 + -1.914879078883785e+00 + -1.918599413067872e+00 + -1.922276495000000e+00 + -1.925910791456493e+00 + -1.929502763824010e+00 + -1.933052869645757e+00 + -1.936561562187136e+00 + -1.940029290000000e+00 + -1.943456497684402e+00 + -1.946843625242175e+00 + -1.950191109032846e+00 + -1.953499381145042e+00 + -1.956768869000000e+00 + -1.959999996258605e+00 + -1.963193182622893e+00 + -1.966348843806269e+00 + -1.969467390558660e+00 + -1.972549230000000e+00 + -1.975594766012145e+00 + -1.978604397775412e+00 + -1.981578520793180e+00 + -1.984517526364655e+00 + -1.987421802000000e+00 + -1.990291731861874e+00 + -1.993127695559656e+00 + -1.995930069364364e+00 + -1.998699225767272e+00 + -2.001435533000000e+00 + -2.004139355858378e+00 + -2.006811055538481e+00 + -2.009450989763890e+00 + -2.012059511961222e+00 + -2.014636972000000e+00 + -2.017183716742461e+00 + -2.019700089231340e+00 + -2.022186429001382e+00 + -2.024643071393187e+00 + -2.027070349000000e+00 + -2.029468591629637e+00 + -2.031838124095820e+00 + -2.034179268100215e+00 + -2.036492342201070e+00 + -2.038777662000000e+00 + -2.041035540156417e+00 + -2.043266284490031e+00 + -2.045470200083453e+00 + -2.047647589335177e+00 + -2.049798751000000e+00 + -2.051923980684690e+00 + -2.054023570214561e+00 + -2.056097808968247e+00 + -2.058146983649728e+00 + -2.060171377000000e+00 + -2.062171268551674e+00 + -2.064146934640815e+00 + -2.066098649159696e+00 + -2.068026683134947e+00 + -2.069931304000000e+00 + -2.071812776276246e+00 + -2.073671361471072e+00 + -2.075507318519566e+00 + -2.077320903301032e+00 + -2.079112369000000e+00 + -2.080881966139512e+00 + -2.082629940879466e+00 + -2.084356537486872e+00 + -2.086061998635378e+00 + -2.087746563000000e+00 + -2.089410466229110e+00 + -2.091053941828707e+00 + -2.092677220771137e+00 + -2.094280530723314e+00 + -2.095864097000000e+00 + -2.097428142794787e+00 + -2.098972888139794e+00 + -2.100498550462023e+00 + -2.102005344216306e+00 + -2.103493482000000e+00 + -2.104963174393948e+00 + -2.106414628045970e+00 + -2.107848047779690e+00 + -2.109263636820768e+00 + -2.110661595000000e+00 + -2.112042119471926e+00 + -2.113405405101743e+00 + -2.114751645122076e+00 + -2.116081030815763e+00 + -2.117393750000000e+00 + -2.118689987937912e+00 + -2.119969928191390e+00 + -2.121233752504371e+00 + -2.122481640223532e+00 + -2.123713768000000e+00 + -2.124930310308645e+00 + -2.126131439345980e+00 + -2.127317325650607e+00 + -2.128488137848567e+00 + -2.129644042000000e+00 + -2.130785202020548e+00 + -2.131911779449632e+00 + -2.133023934312029e+00 + -2.134121824962966e+00 + -2.135205607000000e+00 + -2.136275433910872e+00 + -2.137331457489147e+00 + -2.138373827747866e+00 + -2.139402692469194e+00 + -2.140418197999999e+00 + -2.141420489142081e+00 + -2.142409707722756e+00 + -2.143385994030927e+00 + -2.144349486926974e+00 + -2.145300323000000e+00 + -2.146238637076898e+00 + -2.147164562479522e+00 + -2.148078231051947e+00 + -2.148979772720135e+00 + -2.149869315000000e+00 + -2.150746983835218e+00 + -2.151612904662093e+00 + -2.152467200947815e+00 + -2.153309993218032e+00 + -2.154141401000000e+00 + -2.154961542883784e+00 + -2.155770535619624e+00 + -2.156568494253713e+00 + -2.157355531798206e+00 + -2.158131760000000e+00 + -2.158897289576013e+00 + -2.159652229917454e+00 + -2.160396688379106e+00 + -2.161130769707277e+00 + -2.161854579000000e+00 + -2.162568220747540e+00 + -2.163271795520776e+00 + -2.163965403104795e+00 + -2.164649143391419e+00 + -2.165323114000000e+00 + -2.165987410839904e+00 + -2.166642128874188e+00 + -2.167287362019562e+00 + -2.167923202786971e+00 + -2.168549742000000e+00 + -2.169167069289456e+00 + -2.169775273557456e+00 + -2.170374442741976e+00 + -2.170964663390078e+00 + -2.171546020000000e+00 + -2.172118595836383e+00 + -2.172682474202094e+00 + -2.173237737093693e+00 + -2.173784464448991e+00 + -2.174322736000000e+00 + -2.174852630794634e+00 + -2.175374225221640e+00 + -2.175887595177988e+00 + -2.176392816678372e+00 + -2.176889964000000e+00 + -2.177379110090651e+00 + -2.177860327096639e+00 + -2.178333686466943e+00 + -2.178799258747679e+00 + -2.179257113000000e+00 + -2.179707317299531e+00 + -2.180149939409128e+00 + -2.180585046165010e+00 + -2.181012703042297e+00 + -2.181432975000000e+00 + -2.181845926509731e+00 + -2.182251621108717e+00 + -2.182650121032542e+00 + -2.183041486916871e+00 + -2.183425780000000e+00 + -2.183803061402426e+00 + -2.184173389857596e+00 + -2.184536823542827e+00 + -2.184893420600431e+00 + -2.185243238000000e+00 + -2.185586332004080e+00 + -2.185922759056265e+00 + -2.186252574500474e+00 + -2.186575831916728e+00 + -2.186892585000000e+00 + -2.187202887393400e+00 + -2.187506791832633e+00 + -2.187804350256584e+00 + -2.188095613705712e+00 + -2.188380633000000e+00 + -2.188659458643119e+00 + -2.188932140238827e+00 + -2.189198726845117e+00 + -2.189459267002233e+00 + -2.189713809000000e+00 + -2.189962400732430e+00 + -2.190205089044370e+00 + -2.190441920581333e+00 + -2.190672942002169e+00 + -2.190898199000000e+00 + -2.191117736662499e+00 + -2.191331600149922e+00 + -2.191539834109547e+00 + -2.191742482380937e+00 + -2.191939589000000e+00 + -2.192131197889608e+00 + -2.192317351831708e+00 + -2.192498093290244e+00 + -2.192673464653123e+00 + -2.192843508000000e+00 + -2.193008265149897e+00 + -2.193167777657277e+00 + -2.193322086821774e+00 + -2.193471233640668e+00 + -2.193615259000000e+00 + -2.193754203483761e+00 + -2.193888106693908e+00 + -2.194017008313546e+00 + -2.194140948496115e+00 + -2.194259967000000e+00 + -2.194374103230534e+00 + -2.194483396307522e+00 + -2.194587885225862e+00 + -2.194687608881331e+00 + -2.194782606000000e+00 + -2.194872915200472e+00 + -2.194958575082935e+00 + -2.195039623893670e+00 + -2.195116099394696e+00 + -2.195188040000000e+00 + -2.195255484352944e+00 + -2.195318470219860e+00 + -2.195377035223315e+00 + -2.195431217130485e+00 + -2.195481054000000e+00 + -2.195526583926446e+00 + -2.195567844428364e+00 + -2.195604873029958e+00 + -2.195637707516086e+00 + -2.195666386000000e+00 + -2.195690946583878e+00 + -2.195711426545218e+00 + -2.195727863658885e+00 + -2.195740296673043e+00 + -2.195748763000000e+00 + -2.195753299607926e+00 + -2.195753945356280e+00 + -2.195750739132009e+00 + -2.195743719093693e+00 + -2.195732923000000e+00 + -2.195718388771941e+00 + -2.195700155840199e+00 + -2.195678263244660e+00 + -2.195652748934943e+00 + -2.195623652000000e+00 + -2.195591012099144e+00 + -2.195554867993407e+00 + -2.195515258985693e+00 + -2.195472225489285e+00 + -2.195425807000000e+00 + -2.195376042760528e+00 + -2.195322973614639e+00 + -2.195266640267298e+00 + -2.195207082686241e+00 + -2.195144342000000e+00 + -2.195078459809379e+00 + -2.195009476453377e+00 + -2.194937433066797e+00 + -2.194862372466152e+00 + -2.194784337000000e+00 + -2.194703368615792e+00 + -2.194619509257747e+00 + -2.194532801771278e+00 + -2.194443290305841e+00 + -2.194351018000000e+00 + -2.194256027737437e+00 + -2.194158364279782e+00 + -2.194058072250755e+00 + -2.193955195446114e+00 + -2.193849779000000e+00 + -2.193741868885436e+00 + -2.193631510785602e+00 + -2.193518750557477e+00 + -2.193403634464252e+00 + -2.193286209000000e+00 + -2.193166521091908e+00 + -2.193044618884907e+00 + -2.192920550384463e+00 + -2.192794362988794e+00 + -2.192666105000000e+00 + -2.192535825071375e+00 + -2.192403570783236e+00 + -2.192269389306454e+00 + -2.192133327558461e+00 + -2.191995432000000e+00 + -2.191855748732582e+00 + -2.191714323538803e+00 + -2.191571201647935e+00 + -2.191426427571225e+00 + -2.191280046000000e+00 + -2.191132101498374e+00 + -2.190982637495000e+00 + -2.190831697104933e+00 + -2.190679323369808e+00 + -2.190525559000000e+00 + -2.190370446239990e+00 + -2.190214026313205e+00 + -2.190056340263544e+00 + -2.189897429222788e+00 + -2.189737334000000e+00 + -2.189576094894156e+00 + -2.189413751026334e+00 + -2.189250341662785e+00 + -2.189085906605225e+00 + -2.188920484000000e+00 + -2.188754111167896e+00 + -2.188586826517446e+00 + -2.188418667831656e+00 + -2.188249671505532e+00 + -2.188079874000000e+00 + -2.187909311655257e+00 + -2.187738019850499e+00 + -2.187566033827133e+00 + -2.187393388939138e+00 + -2.187220120000000e+00 + -2.187046261198758e+00 + -2.186871845656608e+00 + -2.186696906557450e+00 + -2.186521477499284e+00 + -2.186345591000000e+00 + -2.186169278929348e+00 + -2.185992573469870e+00 + -2.185815507881449e+00 + -2.185638116930091e+00 + -2.185460435000000e+00 + -2.185282496723147e+00 + -2.185104339046128e+00 + -2.184925999471230e+00 + -2.184747515559985e+00 + -2.184568926000000e+00 + -2.184390270419004e+00 + -2.184211589307456e+00 + -2.184032923638580e+00 + -2.183854314918697e+00 + -2.183675806000000e+00 + -2.183497440664645e+00 + -2.183319263062145e+00 + -2.183141318226586e+00 + -2.182963652427783e+00 + -2.182786312000000e+00 + -2.182609343803448e+00 + -2.182432796909005e+00 + -2.182256720850984e+00 + -2.182081165100584e+00 + -2.181906180000000e+00 + -2.181731816772078e+00 + -2.181558127901617e+00 + -2.181385166690271e+00 + -2.181212987245827e+00 + -2.181041644000000e+00 + -2.180871191888493e+00 + -2.180701687214938e+00 + -2.180533187286951e+00 + -2.180365750436408e+00 + -2.180199435000000e+00 + -2.180034299706266e+00 + -2.179870405073628e+00 + -2.179707812476292e+00 + -2.179546583956951e+00 + -2.179386782000000e+00 + -2.179228469569652e+00 + -2.179071710572415e+00 + -2.178916570209873e+00 + -2.178763115274171e+00 + -2.178611412000000e+00 + -2.178461526719817e+00 + -2.178313527960817e+00 + -2.178167485170301e+00 + -2.178023468394170e+00 + -2.177881548000000e+00 + -2.177741794911888e+00 + -2.177604281585152e+00 + -2.177469081134519e+00 + -2.177336267165003e+00 + -2.177205914000000e+00 + -2.177078096781969e+00 + -2.176952892179310e+00 + -2.176830377266735e+00 + -2.176710629289710e+00 + -2.176593727000000e+00 + -2.176479750089725e+00 + -2.176368778170715e+00 + -2.176260892035270e+00 + -2.176156174290115e+00 + -2.176054707000000e+00 + -2.175956572480315e+00 + -2.175861855847520e+00 + -2.175770642395214e+00 + -2.175683016800304e+00 + -2.175599066000000e+00 + -2.175518878125867e+00 + -2.175442540126260e+00 + -2.175370140365612e+00 + -2.175301769822078e+00 + -2.175237519000000e+00 + -2.175177478422601e+00 + -2.175121740498959e+00 + -2.175070398200953e+00 + -2.175023544771637e+00 + -2.174981275000000e+00 + -2.174943684570890e+00 + -2.174910868831887e+00 + -2.174882924320826e+00 + -2.174859949548785e+00 + -2.174842043000000e+00 + -2.174829303331104e+00 + -2.174821830410927e+00 + -2.174819725228089e+00 + -2.174823090027552e+00 + -2.174832027000000e+00 + -2.174846638699704e+00 + -2.174867029559900e+00 + -2.174893304738549e+00 + -2.174925569834485e+00 + -2.174963931000000e+00 + -2.175008495084293e+00 + -2.175059370394289e+00 + -2.175116665887380e+00 + -2.175180491027200e+00 + -2.175250956000000e+00 + -2.175328171805043e+00 + -2.175412250937077e+00 + -2.175503306357684e+00 + -2.175601451271103e+00 + -2.175706800000000e+00 + -2.175819467765500e+00 + -2.175939570549688e+00 + -2.176067225041086e+00 + -2.176202548787411e+00 + -2.176345660000000e+00 + -2.176496677644949e+00 + -2.176655722183164e+00 + -2.176822914601843e+00 + -2.176998376191533e+00 + -2.177182229000000e+00 + -2.177374595921169e+00 + -2.177575601341799e+00 + -2.177785370087074e+00 + -2.178004027196875e+00 + -2.178231699000000e+00 + -2.178468512862275e+00 + -2.178714597011325e+00 + -2.178970080062299e+00 + -2.179235091002944e+00 + -2.179509760000000e+00 + -2.179794218272507e+00 + -2.180088598277346e+00 + -2.180393032665419e+00 + -2.180707654074028e+00 + -2.181032597000000e+00 + -2.181367997183408e+00 + -2.181713990526695e+00 + -2.182070713375897e+00 + -2.182438302803596e+00 + -2.182816897000000e+00 + -2.183206635150288e+00 + -2.183607657686531e+00 + -2.184020105275964e+00 + -2.184444118610974e+00 + -2.184879840000000e+00 + -2.185327412889597e+00 + -2.185786981109685e+00 + -2.186258689137973e+00 + -2.186742682377725e+00 + -2.187239107000000e+00 + -2.187748109862624e+00 + -2.188269838801850e+00 + -2.188804442677439e+00 + -2.189352071523296e+00 + -2.189912875000000e+00 + -2.190487003093955e+00 + -2.191074608322116e+00 + -2.191675843787203e+00 + -2.192290862610885e+00 + -2.192919819000000e+00 + -2.193562867915730e+00 + -2.194220164552147e+00 + -2.194891865404003e+00 + -2.195578128862665e+00 + -2.196279113000000e+00 + -2.196994976008069e+00 + -2.197725877814248e+00 + -2.198471979076637e+00 + -2.199233441010543e+00 + -2.200010426000000e+00 + -2.200803097224683e+00 + -2.201611618154960e+00 + -2.202436152922896e+00 + -2.203276866629103e+00 + -2.204133924999999e+00 + -2.205007494076377e+00 + -2.205897739759803e+00 + -2.206804828380775e+00 + -2.207728927012060e+00 + -2.208670203000000e+00 + -2.209628824019662e+00 + -2.210604958519273e+00 + -2.211598775212799e+00 + -2.212610442959744e+00 + -2.213640131000000e+00 + -2.214688008997179e+00 + -2.215754247358006e+00 + -2.216839016713686e+00 + -2.217942487809252e+00 + -2.219064832000000e+00 + -2.220206221175054e+00 + -2.221366827800435e+00 + -2.222546824259503e+00 + -2.223746382727115e+00 + -2.224965677000000e+00 + -2.226204881636015e+00 + -2.227464170011377e+00 + -2.228743716360184e+00 + -2.230043696636770e+00 + -2.231364286000000e+00 + -2.232705659360148e+00 + -2.234067993079961e+00 + -2.235451464138931e+00 + -2.236856249856844e+00 + -2.238282527000000e+00 + -2.239730472524265e+00 + -2.241200265638654e+00 + -2.242692085287406e+00 + -2.244206109271373e+00 + -2.245742517000000e+00 + -2.247301488882056e+00 + -2.248883204910052e+00 + -2.250487845315945e+00 + -2.252115590911750e+00 + -2.253766623000000e+00 + -2.255441123360801e+00 + -2.257139274542631e+00 + -2.258861259219423e+00 + -2.260607260005651e+00 + -2.262377460000000e+00 + -2.264172042724291e+00 + -2.265991192137124e+00 + -2.267835092970031e+00 + -2.269703930922391e+00 + -2.271597891000000e+00 + -2.273517158096056e+00 + -2.275461918662951e+00 + -2.277432359442962e+00 + -2.279428667085979e+00 + -2.281451029000000e+00 + -2.283499633104788e+00 + -2.285574667389452e+00 + -2.287676320195930e+00 + -2.289804780398682e+00 + -2.291960237000000e+00 + -2.294142879454985e+00 + -2.296352898805551e+00 + -2.298590485768695e+00 + -2.300855830078550e+00 + -2.303149122999999e+00 + -2.305470556795997e+00 + -2.307820323545887e+00 + -2.310198615647936e+00 + -2.312605626084681e+00 + -2.315041548000000e+00 + -2.317506574745174e+00 + -2.320000900224320e+00 + -2.322524719122656e+00 + -2.325078227061991e+00 + -2.327661619000000e+00 + -2.330275089774933e+00 + -2.332918835677479e+00 + -2.335593053485966e+00 + -2.338297940187764e+00 + -2.341033693000000e+00 + -2.343800509406319e+00 + -2.346598587410773e+00 + -2.349428125303093e+00 + -2.352289321686241e+00 + -2.355182376000000e+00 + -2.358107488272472e+00 + -2.361064858786305e+00 + -2.364054687769198e+00 + -2.367077175375671e+00 + -2.370132523000000e+00 + -2.373220932737141e+00 + -2.376342606269360e+00 + -2.379497745810629e+00 + -2.382686554578887e+00 + -2.385909236000000e+00 + -2.389165993580208e+00 + -2.392457030846979e+00 + -2.395782552198058e+00 + -2.399142763298191e+00 + -2.402537869000000e+00 + -2.405968074028050e+00 + -2.409433584975734e+00 + -2.412934608682329e+00 + -2.416471351683178e+00 + -2.420044020999999e+00 + -2.423652824137149e+00 + -2.427297969206864e+00 + -2.430979664728804e+00 + -2.434698119632543e+00 + -2.438453543000000e+00 + -2.442246144168148e+00 + -2.446076133195298e+00 + -2.449943720571852e+00 + -2.453849117184546e+00 + -2.457792534000000e+00 + -2.461774182279110e+00 + -2.465794274341647e+00 + -2.469853022790889e+00 + -2.473950640299041e+00 + -2.478087340000000e+00 + -2.482263335430129e+00 + -2.486478840559030e+00 + -2.490734069661931e+00 + -2.495029237377275e+00 + -2.499364559000000e+00 + -2.503740250274207e+00 + -2.508156527124766e+00 + -2.512613605692700e+00 + -2.517111702474631e+00 + -2.521651035000000e+00 + -2.526231821279088e+00 + -2.530854278665131e+00 + -2.535518625205626e+00 + -2.540225080261870e+00 + -2.544973863000000e+00 + -2.549765192573217e+00 + -2.554599288888442e+00 + -2.559476372494764e+00 + -2.564396664604125e+00 + -2.569360386000000e+00 + -2.574367757513646e+00 + -2.579419001423863e+00 + -2.584514340338642e+00 + -2.589653996851589e+00 + -2.594838193999999e+00 + -2.600067155253186e+00 + -2.605341104662645e+00 + -2.610660266783872e+00 + -2.616024866689215e+00 + -2.621435129000000e+00 + -2.626891278432673e+00 + -2.632393541366548e+00 + -2.637942144571998e+00 + -2.643537314797249e+00 + -2.649179279000000e+00 + -2.654868264471787e+00 + -2.660604499292826e+00 + -2.666388211776204e+00 + -2.672219630341834e+00 + -2.678098984000000e+00 + -2.684026502306392e+00 + -2.690002415494505e+00 + -2.696026954017429e+00 + -2.702100348331385e+00 + -2.708222828000000e+00 + -2.714394620651795e+00 + -2.720615948464916e+00 + -2.726887030965477e+00 + -2.733208085290139e+00 + -2.739579324000000e+00 + -2.746000955816228e+00 + -2.752473185385865e+00 + -2.758996214641690e+00 + -2.765570242469367e+00 + -2.772195463000000e+00 + -2.778872066776275e+00 + -2.785600241574056e+00 + -2.792380171842594e+00 + -2.799212037606767e+00 + -2.806096015000000e+00 + -2.813032277129447e+00 + -2.820020994035244e+00 + -2.827062331911353e+00 + -2.834156451970738e+00 + -2.841303512999999e+00 + -2.848503671252426e+00 + -2.855757077985244e+00 + -2.863063881095023e+00 + -2.870424224890850e+00 + -2.877838249999999e+00 + -2.885306093928394e+00 + -2.892827890388094e+00 + -2.900403769651381e+00 + -2.908033857857018e+00 + -2.915718277999999e+00 + -2.923457150039019e+00 + -2.931250588977881e+00 + -2.939098706889091e+00 + -2.947001612872150e+00 + -2.954959411999998e+00 + -2.962972205810575e+00 + -2.971040091434060e+00 + -2.979163163083816e+00 + -2.987341511831155e+00 + -2.995575224999998e+00 + -3.003864386499012e+00 + -3.012209075546996e+00 + -3.020609368336417e+00 + -3.029065337835770e+00 + -3.037577052999999e+00 + -3.046144579520789e+00 + -3.054767979666142e+00 + -3.063447312238444e+00 + -3.072182631692820e+00 + -3.080973988999999e+00 + -3.089821432099915e+00 + -3.098725004829577e+00 + -3.107684748048404e+00 + -3.116700699185534e+00 + -3.125772890999999e+00 + -3.134901352715559e+00 + -3.144086110699870e+00 + -3.153327188100508e+00 + -3.162624603843408e+00 + -3.171978372999998e+00 + -3.181388507546933e+00 + -3.190855016073102e+00 + -3.200377903469057e+00 + -3.209957169965227e+00 + -3.219592812999998e+00 + -3.229284827363896e+00 + -3.239033203402719e+00 + -3.248837927724427e+00 + -3.258698982652799e+00 + -3.268616347999998e+00 + -3.278590000914418e+00 + -3.288619913401403e+00 + -3.298706054004673e+00 + -3.308848387625167e+00 + -3.319046875999998e+00 + -3.329301477934322e+00 + -3.339612147844228e+00 + -3.349978836592516e+00 + -3.360401490990458e+00 + -3.370880054999998e+00 + -3.381414469596773e+00 + -3.392004670266620e+00 + -3.402650589976440e+00 + -3.413352159446950e+00 + -3.424109303999998e+00 + -3.434921945057392e+00 + -3.445790001867386e+00 + -3.456713390096515e+00 + -3.467692020464062e+00 + -3.478725800999998e+00 + -3.489814636890736e+00 + -3.500958427789171e+00 + -3.512157070764700e+00 + -3.523410460589800e+00 + -3.534718486999998e+00 + -3.546081035880271e+00 + -3.557497990199610e+00 + -3.568969229634993e+00 + -3.580494629586285e+00 + -3.592074061999998e+00 + -3.603707395759104e+00 + -3.615394495446970e+00 + -3.627135222559569e+00 + -3.638929435115233e+00 + -3.650776987000000e+00 + -3.662677728742245e+00 + -3.674631507325805e+00 + -3.686638166579447e+00 + -3.698697546469576e+00 + -3.710809483000000e+00 + -3.722973808828209e+00 + -3.735190352595157e+00 + -3.747458940125227e+00 + -3.759779394010754e+00 + -3.772151532000000e+00 + -3.784575168342916e+00 + -3.797050115062026e+00 + -3.809576180292756e+00 + -3.822153166803174e+00 + -3.834780875000000e+00 + -3.847459102820189e+00 + -3.860187643203489e+00 + -3.872966285667494e+00 + -3.885794816080159e+00 + -3.898673017000000e+00 + -3.911600667911320e+00 + -3.924577543724543e+00 + -3.937603416269590e+00 + -3.950678053996523e+00 + -3.963801221000000e+00 + -3.976972678103186e+00 + -3.990192183512261e+00 + -4.003459491521890e+00 + -4.016774351164608e+00 + -4.030136509000000e+00 + -4.043545709147031e+00 + -4.057001691149858e+00 + -4.070504190840202e+00 + -4.084052939835804e+00 + -4.097647667000000e+00 + -4.111288098419088e+00 + -4.124973955231095e+00 + -4.138704955371648e+00 + -4.152480813397504e+00 + -4.166301240000000e+00 + -4.180165942572286e+00 + -4.194074624537170e+00 + -4.208026986370140e+00 + -4.222022725101974e+00 + -4.236061533000000e+00 + -4.250143098846027e+00 + -4.264267108996074e+00 + -4.278433246261039e+00 + -4.292641188627767e+00 + -4.306890611000000e+00 + -4.321181185386233e+00 + -4.335512579090955e+00 + -4.349884456391911e+00 + -4.364296478350024e+00 + -4.378748302000000e+00 + -4.393239580901771e+00 + -4.407769964394226e+00 + -4.422339098999587e+00 + -4.436946628138934e+00 + -4.451592191000000e+00 + -4.466275423153566e+00 + -4.480995955945297e+00 + -4.495753418053649e+00 + -4.510547435209278e+00 + -4.525377628000000e+00 + -4.540243613376725e+00 + -4.555145006346341e+00 + -4.570081418154680e+00 + -4.585052454714511e+00 + -4.600057719000000e+00 + -4.615096811360685e+00 + -4.630169328028963e+00 + -4.645274861878902e+00 + -4.660413001844071e+00 + -4.675583333000000e+00 + -4.690785437259527e+00 + -4.706018892955582e+00 + -4.721283275134317e+00 + -4.736578154793736e+00 + -4.751903099000000e+00 + -4.767257671719769e+00 + -4.782641433752779e+00 + -4.798053942304498e+00 + -4.813494749953581e+00 + -4.828963406000000e+00 + -4.844459456896403e+00 + -4.859982445123970e+00 + -4.875531909767719e+00 + -4.891107385884028e+00 + -4.906708405000000e+00 + -4.922334495555203e+00 + -4.937985181840751e+00 + -4.953659984814029e+00 + -4.969358421588884e+00 + -4.985080006000000e+00 + -5.000824248840914e+00 + -5.016590656340991e+00 + -5.032378731598668e+00 + -5.048187974277996e+00 + -5.064017880000000e+00 + -5.079867940973151e+00 + -5.095737645459726e+00 + -5.111626480823102e+00 + -5.127533934923204e+00 + -5.143459499999997e+00 + -5.159402672483111e+00 + -5.175362954369220e+00 + -5.191339851303958e+00 + -5.207332872891304e+00 + -5.223341533999998e+00 + -5.239365353688981e+00 + -5.255403855076862e+00 + -5.271456565155025e+00 + -5.287523015792912e+00 + -5.303602743999997e+00 + -5.319695290809813e+00 + -5.335800201177900e+00 + -5.351917023850607e+00 + -5.368045312413205e+00 + -5.384184625999997e+00 + -5.400334527792659e+00 + -5.416494583936292e+00 + -5.432664365069262e+00 + -5.448843447960337e+00 + -5.465031412999998e+00 + -5.481227843963791e+00 + -5.497432330198948e+00 + -5.513644465003656e+00 + -5.529863846001168e+00 + -5.546090074999998e+00 + -5.562322757794160e+00 + -5.578561506278419e+00 + -5.594805935740466e+00 + -5.611055664858841e+00 + -5.627310317999997e+00 + -5.643569523867812e+00 + -5.659832914603254e+00 + -5.676100126691991e+00 + -5.692370802379017e+00 + -5.708644587999997e+00 + -5.724921133351554e+00 + -5.741200092816319e+00 + -5.757481124931912e+00 + -5.773763893288205e+00 + -5.790048065999996e+00 + -5.806333315035348e+00 + -5.822619317227983e+00 + -5.838905753168464e+00 + -5.855192307810226e+00 + -5.871478670999998e+00 + -5.887764536642293e+00 + -5.904049603224381e+00 + -5.920333573291820e+00 + -5.936616154283948e+00 + -5.952897057999997e+00 + -5.969175999997380e+00 + -5.985452700712029e+00 + -6.001726884408804e+00 + -6.017998279848357e+00 + -6.034266620999998e+00 + -6.050531645917840e+00 + -6.066793096565948e+00 + -6.083050719154321e+00 + -6.099304265265417e+00 + -6.115553489999997e+00 + -6.131798152082848e+00 + -6.148038016850530e+00 + -6.164272852974367e+00 + -6.180502432221914e+00 + -6.196726531999996e+00 + -6.212944934149927e+00 + -6.229157424398349e+00 + -6.245363792906498e+00 + -6.261563835474968e+00 + -6.277757350999996e+00 + -6.293944141712862e+00 + -6.310124016459128e+00 + -6.326296787703612e+00 + -6.342462271423720e+00 + -6.358620288999997e+00 + -6.374770666045148e+00 + -6.390913231950829e+00 + -6.407047820441565e+00 + -6.423174270811367e+00 + -6.439292425999997e+00 + -6.455402132459349e+00 + -6.471503242529590e+00 + -6.487595612302881e+00 + -6.503679101824962e+00 + -6.519753575999998e+00 + -6.535818903908587e+00 + -6.551874959678351e+00 + -6.567921621040533e+00 + -6.583958769810407e+00 + -6.599986292999997e+00 + -6.616004081814032e+00 + -6.632012031732002e+00 + -6.648010042213294e+00 + -6.663998017633650e+00 + -6.679975866999997e+00 + -6.695943503153600e+00 + -6.711900843425355e+00 + -6.727847809100131e+00 + -6.743784326279565e+00 + -6.759710325999998e+00 + -6.775625743222601e+00 + -6.791530516957345e+00 + -6.807424590371784e+00 + -6.823307911868753e+00 + -6.839180434000000e+00 + -6.855042113095231e+00 + -6.870892911056689e+00 + -6.886732793343159e+00 + -6.902561729209182e+00 + -6.918379693000000e+00 + -6.934186663377454e+00 + -6.949982623974822e+00 + -6.965767562024019e+00 + -6.981541468861679e+00 + -6.997304341000000e+00 + -7.013056179149240e+00 + -7.028796988372566e+00 + -7.044526777567921e+00 + -7.060245560311449e+00 + -7.075953355000000e+00 + -7.091650184045992e+00 + -7.107336074531737e+00 + -7.123011057484204e+00 + -7.138675168614964e+00 + -7.154328448000000e+00 + -7.169970939523060e+00 + -7.185602692089082e+00 + -7.201223758621499e+00 + -7.216834196750369e+00 + -7.232434069000000e+00 + -7.248023441650831e+00 + -7.263602384451917e+00 + -7.279170972021925e+00 + -7.294729285389790e+00 + -7.310277408000000e+00 + -7.325815426345584e+00 + -7.341343434315181e+00 + -7.356861529294433e+00 + -7.372369811668458e+00 + -7.387868387000000e+00 + -7.403357365322682e+00 + -7.418836861854650e+00 + -7.434306995371617e+00 + -7.449767888578398e+00 + -7.465219669000000e+00 + -7.480662468362842e+00 + -7.496096423635060e+00 + -7.511521675509539e+00 + -7.526938368822738e+00 + -7.542346653000000e+00 + -7.557746681513402e+00 + -7.573138613106206e+00 + -7.588522610348394e+00 + -7.603898840111169e+00 + -7.619267474000000e+00 + -7.634628687556104e+00 + -7.649982660818226e+00 + -7.665329578157865e+00 + -7.680669629212444e+00 + -7.696003007000000e+00 + -7.711329908041110e+00 + -7.726650535322031e+00 + -7.741965095546557e+00 + -7.757273799081691e+00 + -7.772576861000000e+00 + -7.787874500482072e+00 + -7.803166941820082e+00 + -7.818454413357075e+00 + -7.833737148083599e+00 + -7.849015383000000e+00 + -7.864289358883056e+00 + -7.879559322305754e+00 + -7.894825523493435e+00 + -7.910088216491122e+00 + -7.925347660000000e+00 + -7.940604117030949e+00 + -7.955857856656654e+00 + -7.971109151088187e+00 + -7.986358275553978e+00 + -8.001605510999999e+00 + -8.016851143003514e+00 + -8.032095461580266e+00 + -8.047338760488806e+00 + -8.062581337981985e+00 + -8.077823497000001e+00 + -8.093065544394179e+00 + -8.108307791577566e+00 + -8.123550554205780e+00 + -8.138794153086785e+00 + -8.154038912999997e+00 + -8.169285162395173e+00 + -8.184533235306290e+00 + -8.199783469410583e+00 + -8.215036206329255e+00 + -8.230291792999997e+00 + -8.245550580528674e+00 + -8.260812923863309e+00 + -8.276079182235739e+00 + -8.291349720375887e+00 + -8.306624906999998e+00 + -8.321905114401627e+00 + -8.337190720129563e+00 + -8.352482105562956e+00 + -8.367779656388556e+00 + -8.383083762999997e+00 + -8.398394819954635e+00 + -8.413713227271362e+00 + -8.429039388338369e+00 + -8.444373710123081e+00 + -8.459716604999997e+00 + -8.475068489773328e+00 + -8.490429785807564e+00 + -8.505800918193746e+00 + -8.521182316459129e+00 + -8.536574414999997e+00 + -8.551977652264261e+00 + -8.567392471335332e+00 + -8.582819319266729e+00 + -8.598258647834163e+00 + -8.613710912999998e+00 + -8.629176574613023e+00 + -8.644656098315155e+00 + -8.660149953296175e+00 + -8.675658612460374e+00 + -8.691182553999997e+00 + -8.706722260346437e+00 + -8.722278218076596e+00 + -8.737850917931995e+00 + -8.753440855866357e+00 + -8.769048531999996e+00 + -8.784674450012169e+00 + -8.800319118245726e+00 + -8.815983049456063e+00 + -8.831666761752983e+00 + -8.847370776999997e+00 + -8.863095620572640e+00 + -8.878841823409489e+00 + -8.894609920288579e+00 + -8.910400450202564e+00 + -8.926213956999996e+00 + -8.942050988642462e+00 + -8.957912097948702e+00 + -8.973797841249739e+00 + -8.989708778929735e+00 + -9.005645476999996e+00 + -9.021608505891232e+00 + -9.037598440089864e+00 + -9.053615857732957e+00 + -9.069661341483132e+00 + -9.085735478999997e+00 + -9.101838862125330e+00 + -9.117972087538210e+00 + -9.134135755396374e+00 + -9.150330469883286e+00 + -9.166556840999997e+00 + -9.182815483079517e+00 + -9.199107013675079e+00 + -9.215432054583626e+00 + -9.231791233265957e+00 + -9.248185180999997e+00 + -9.264614532683632e+00 + -9.281079929109534e+00 + -9.297582014702897e+00 + -9.314121437654787e+00 + -9.330698850999996e+00 + -9.347314912003528e+00 + -9.363970283188971e+00 + -9.380665630745685e+00 + -9.397401624940878e+00 + -9.414178940999998e+00 + -9.430998258244742e+00 + -9.447860260503859e+00 + -9.464765635761319e+00 + -9.481715077019253e+00 + -9.498709280999996e+00 + -9.515748948037771e+00 + -9.532834784442173e+00 + -9.549967500513571e+00 + -9.567147810785697e+00 + -9.584376433999996e+00 + -9.601654092679016e+00 + -9.618981514566920e+00 + -9.636359431588877e+00 + -9.653788580476306e+00 + -9.671269701999998e+00 + -9.688803540653204e+00 + -9.706390846469759e+00 + -9.724032373152683e+00 + -9.741728878390186e+00 + -9.759481124999997e+00 + -9.777289880050315e+00 + -9.795155915261526e+00 + -9.813080006095444e+00 + -9.831062932433847e+00 + -9.849105478999997e+00 + -9.867208434586416e+00 + -9.885372592754736e+00 + -9.903598750780114e+00 + -9.921887710289466e+00 + -9.940240277999996e+00 + -9.958657264807959e+00 + -9.977139486156000e+00 + -9.995687760994512e+00 + -1.001430291248964e+01 + -1.003298577000000e+01 + -1.005173716741557e+01 + -1.007055794170109e+01 + -1.008944893313717e+01 + -1.010841098632109e+01 + -1.012744495000000e+01 + -1.014655167843811e+01 + -1.016573203809090e+01 + -1.018498689280856e+01 + -1.020431709913334e+01 + -1.022372353000000e+01 + -1.024320706932260e+01 + -1.026276860085199e+01 + -1.028240900753776e+01 + -1.030212917226508e+01 + -1.032192999000000e+01 + -1.034181236270672e+01 + -1.036177718920571e+01 + -1.038182537682789e+01 + -1.040195784652257e+01 + -1.042217551000000e+01 + -1.044247927800797e+01 + -1.046287008429113e+01 + -1.048334886197221e+01 + -1.050391653528098e+01 + -1.052457404000000e+01 + -1.054532232135862e+01 + -1.056616233045517e+01 + -1.058709501821704e+01 + -1.060812133414642e+01 + -1.062924224000000e+01 + -1.065045870478386e+01 + -1.067177169452023e+01 + -1.069318217826154e+01 + -1.071469113174534e+01 + -1.073629954000000e+01 + -1.075800839260036e+01 + -1.077981867489276e+01 + -1.080173138018267e+01 + -1.082374751517595e+01 + -1.084586808000000e+01 + -1.086809407471729e+01 + -1.089042651905600e+01 + -1.091286643223940e+01 + -1.093541482646511e+01 + -1.095807273000000e+01 + -1.098084118002027e+01 + -1.100372120627546e+01 + -1.102671384288809e+01 + -1.104982013415814e+01 + -1.107304113000000e+01 + -1.109637788366843e+01 + -1.111983144958023e+01 + -1.114340288661973e+01 + -1.116709326043168e+01 + -1.119090364000000e+01 + -1.121483509746141e+01 + -1.123888871051257e+01 + -1.126306556352589e+01 + -1.128736674843474e+01 + -1.131179335000000e+01 + -1.133634645465832e+01 + -1.136102717560643e+01 + -1.138583662099362e+01 + -1.141077588304154e+01 + -1.143584608000000e+01 + -1.146104834278586e+01 + -1.148638378227322e+01 + -1.151185351768562e+01 + -1.153745868860526e+01 + -1.156320043000000e+01 + -1.158907987623694e+01 + -1.161509817570602e+01 + -1.164125647703402e+01 + -1.166755592508495e+01 + -1.169399768000000e+01 + -1.172058291041322e+01 + -1.174731277861368e+01 + -1.177418844974534e+01 + -1.180121109657743e+01 + -1.182838189999999e+01 + -1.185570204579555e+01 + -1.188317272006268e+01 + -1.191079511332836e+01 + -1.193857042312863e+01 + -1.196649984999999e+01 + -1.199458459773775e+01 + -1.202282587700695e+01 + -1.205122490269986e+01 + -1.207978289369385e+01 + -1.210850107000000e+01 + -1.213738065440104e+01 + -1.216642287877588e+01 + -1.219562898067898e+01 + -1.222500020303083e+01 + -1.225453779000000e+01 + -1.228424298812801e+01 + -1.231411705144751e+01 + -1.234416123799292e+01 + -1.237437680934280e+01 + -1.240476502999999e+01 + -1.243532716862228e+01 + -1.246606450371358e+01 + -1.249697831672881e+01 + -1.252806989018327e+01 + -1.255934050999999e+01 + -1.259079146663310e+01 + -1.262242406008652e+01 + -1.265423959346900e+01 + -1.268623937120698e+01 + -1.271842469999999e+01 + -1.275079689157634e+01 + -1.278335727210730e+01 + -1.281610716656313e+01 + -1.284904789393346e+01 + -1.288218078999999e+01 + -1.291550719883721e+01 + -1.294902845305343e+01 + -1.298274589252790e+01 + -1.301666087289315e+01 + -1.305077474999999e+01 + -1.308508888000826e+01 + -1.311960462335401e+01 + -1.315432334734565e+01 + -1.318924642810263e+01 + -1.322437523999999e+01 + -1.325971115825294e+01 + -1.329525556797775e+01 + -1.333100986045822e+01 + -1.336697543256989e+01 + -1.340315367999999e+01 + -1.343954599979837e+01 + -1.347615379884262e+01 + -1.351297848978655e+01 + -1.355002149050285e+01 + -1.358728421999999e+01 + -1.362476809975143e+01 + -1.366247455932581e+01 + -1.370040503112116e+01 + -1.373856094968169e+01 + -1.377694375999999e+01 + -1.381555491216690e+01 + -1.385439585021465e+01 + -1.389346802391279e+01 + -1.393277289476898e+01 + -1.397231192999999e+01 + -1.401208659972945e+01 + -1.405209837359219e+01 + -1.409234872413346e+01 + -1.413283912961124e+01 + -1.417357107999999e+01 + -1.421454607102127e+01 + -1.425576559243092e+01 + -1.429723113890712e+01 + -1.433894421536596e+01 + -1.438090632999999e+01 + -1.442311899332400e+01 + -1.446558371903957e+01 + -1.450830202765583e+01 + -1.455127544879836e+01 + -1.459450550999999e+01 + -1.463799373973040e+01 + -1.468174167767078e+01 + -1.472575086722947e+01 + -1.477002285383887e+01 + -1.481455918999999e+01 + -1.485936143285468e+01 + -1.490443114031971e+01 + -1.494976987417127e+01 + -1.499537920245961e+01 + -1.504126069999999e+01 + -1.508741594534576e+01 + -1.513384651602358e+01 + -1.518055399754435e+01 + -1.522753998778076e+01 + -1.527480607999999e+01 + -1.532235386668537e+01 + -1.537018495189360e+01 + -1.541830094448208e+01 + -1.546670345694024e+01 + -1.551539410999999e+01 + -1.556437452805486e+01 + -1.561364632974880e+01 + -1.566321114034704e+01 + -1.571307059764629e+01 + -1.576322633999999e+01 + -1.581368000886133e+01 + -1.586443325932826e+01 + -1.591548774371123e+01 + -1.596684510633198e+01 + -1.601850700999999e+01 + -1.607047512763592e+01 + -1.612275112310131e+01 + -1.617533666634843e+01 + -1.622823344044972e+01 + -1.628144312999999e+01 + -1.633496741991010e+01 + -1.638880799548294e+01 + -1.644296655089035e+01 + -1.649744479372194e+01 + -1.655224442999999e+01 + -1.660736716535794e+01 + -1.666281471098534e+01 + -1.671858878335293e+01 + -1.677469110504862e+01 + -1.683112339999999e+01 + -1.688788739643611e+01 + -1.694498483759857e+01 + -1.700241746523662e+01 + -1.706018701398879e+01 + -1.711829522999999e+01 + -1.717674386844329e+01 + -1.723553468924849e+01 + -1.729466945458232e+01 + -1.735414992865347e+01 + -1.741397788000000e+01 + -1.747415508099178e+01 + -1.753468330867943e+01 + -1.759556434768274e+01 + -1.765679999203036e+01 + -1.771839203000000e+01 + -1.778034225038387e+01 + -1.784265246094084e+01 + -1.790532446959567e+01 + -1.796836007816754e+01 + -1.803176110000000e+01 + -1.809552935720682e+01 + -1.815966667575656e+01 + -1.822417488078262e+01 + -1.828905579597735e+01 + -1.835431126000000e+01 + -1.841994311958100e+01 + -1.848595321475806e+01 + -1.855234338946741e+01 + -1.861911549709020e+01 + -1.868627140000000e+01 + -1.875381296458075e+01 + -1.882174205218422e+01 + -1.889006052915166e+01 + -1.895877027181235e+01 + -1.902787316000000e+01 + -1.909737107797965e+01 + -1.916726592078253e+01 + -1.923755957952593e+01 + -1.930825393714747e+01 + -1.937935090000000e+01 + -1.945085238647674e+01 + -1.952276030080435e+01 + -1.959507655061933e+01 + -1.966780305499929e+01 + -1.974094174000000e+01 + -1.981449453618971e+01 + -1.988846337667131e+01 + -1.996285019538828e+01 + -2.003765692760933e+01 + -2.011288552000000e+01 + -2.018853792621815e+01 + -2.026461609876727e+01 + -2.034112199510926e+01 + -2.041805758075517e+01 + -2.049542482000000e+01 + -2.057322568006621e+01 + -2.065146214471047e+01 + -2.073013619484967e+01 + -2.080924980240138e+01 + -2.088880495999999e+01 + -2.096880367169853e+01 + -2.104924793164823e+01 + -2.113013973534757e+01 + -2.121148108557274e+01 + -2.129327399999999e+01 + -2.137552050224973e+01 + -2.145822260294134e+01 + -2.154138232011573e+01 + -2.162500168821614e+01 + -2.170908273999999e+01 + -2.179362750931509e+01 + -2.187863804236205e+01 + -2.196411638687395e+01 + -2.205006458870765e+01 + -2.213648469999998e+01 + -2.222337877888525e+01 + -2.231074889087196e+01 + -2.239859710699802e+01 + -2.248692550346576e+01 + -2.257573614999999e+01 + -2.266503111825121e+01 + -2.275481250533621e+01 + -2.284508240538831e+01 + -2.293584289979252e+01 + -2.302709608999998e+01 + -2.311884408797131e+01 + -2.321108899308483e+01 + -2.330383291176923e+01 + -2.339707796636268e+01 + -2.349082627999998e+01 + -2.358507997580010e+01 + -2.367984117841246e+01 + -2.377511201965127e+01 + -2.387089464198777e+01 + -2.396719118999998e+01 + -2.406400380890314e+01 + -2.416133464354705e+01 + -2.425918584868402e+01 + -2.435755959379285e+01 + -2.445645803999998e+01 + -2.455588334675619e+01 + -2.465583769169985e+01 + -2.475632325621871e+01 + -2.485734222078360e+01 + -2.495889676999998e+01 + -2.506098909313465e+01 + -2.516362138717989e+01 + -2.526679585042222e+01 + -2.537051468121954e+01 + -2.547478008999998e+01 + -2.557959429416147e+01 + -2.568495950782481e+01 + -2.579087794894506e+01 + -2.589735184307986e+01 + -2.600438342000000e+01 + -2.611197491414786e+01 + -2.622012856937007e+01 + -2.632884662779481e+01 + -2.643813132670684e+01 + -2.654798492000000e+01 + -2.665840967182968e+01 + -2.676940784333127e+01 + -2.688098169572292e+01 + -2.699313349264397e+01 + -2.710586551000000e+01 + -2.721918002998715e+01 + -2.733307932892397e+01 + -2.744756569229334e+01 + -2.756264142140602e+01 + -2.767830881000000e+01 + -2.779457014947893e+01 + -2.791142774510221e+01 + -2.802888390934165e+01 + -2.814694096000261e+01 + -2.826560121000000e+01 + -2.838486697334714e+01 + -2.850474058224100e+01 + -2.862522436986088e+01 + -2.874632066501767e+01 + -2.886803181000000e+01 + -2.899036015446983e+01 + -2.911330804180568e+01 + -2.923687781925054e+01 + -2.936107184331833e+01 + -2.948589248000000e+01 + -2.961134209910011e+01 + -2.973742306338333e+01 + -2.986413774439124e+01 + -2.999148852946843e+01 + -3.011947780000000e+01 + -3.024810793640462e+01 + -3.037738133418102e+01 + -3.050730039248281e+01 + -3.063786751048302e+01 + -3.076908508999995e+01 + -3.090095553801825e+01 + -3.103348127528379e+01 + -3.116666472242296e+01 + -3.130050829541340e+01 + -3.143501442000000e+01 + -3.157018552904646e+01 + -3.170602405762165e+01 + -3.184253244456109e+01 + -3.197971313442012e+01 + -3.211756857999995e+01 + -3.225610123724459e+01 + -3.239531355479052e+01 + -3.253520799120049e+01 + -3.267578702273956e+01 + -3.281705312000000e+01 + -3.295900875199519e+01 + -3.310165640007095e+01 + -3.324499854981137e+01 + -3.338903768896250e+01 + -3.353377630999994e+01 + -3.367921690900354e+01 + -3.382536198480008e+01 + -3.397221404252836e+01 + -3.411977559608952e+01 + -3.426804916000000e+01 + -3.441703725062087e+01 + -3.456674239208418e+01 + -3.471716711255165e+01 + -3.486831394366235e+01 + -3.502018541999994e+01 + -3.517278408030963e+01 + -3.532611247314257e+01 + -3.548017315006599e+01 + -3.563496866378715e+01 + -3.579050157000000e+01 + -3.594677442911821e+01 + -3.610378981290209e+01 + -3.626155029281482e+01 + -3.642005843692588e+01 + -3.657931682999995e+01 + -3.673932806450152e+01 + -3.690009471994529e+01 + -3.706161938636306e+01 + -3.722390467398576e+01 + -3.738695318000000e+01 + -3.755076749872251e+01 + -3.771535025114206e+01 + -3.788070405790332e+01 + -3.804683152981476e+01 + -3.821373528999994e+01 + -3.838141797088579e+01 + -3.854988220802454e+01 + -3.871913063690455e+01 + -3.888916589260551e+01 + -3.905999062000000e+01 + -3.923160747217621e+01 + -3.940401910958111e+01 + -3.957722819105772e+01 + -3.975123737141870e+01 + -3.992604931999993e+01 + -4.010166671506960e+01 + -4.027809223215413e+01 + -4.045532854769397e+01 + -4.063337834194039e+01 + -4.081224431000000e+01 + -4.099192915380458e+01 + -4.117243556512365e+01 + -4.135376624213356e+01 + -4.153592389680070e+01 + -4.171891123999993e+01 + -4.190273098404973e+01 + -4.208738585293229e+01 + -4.227287857304115e+01 + -4.245921187066173e+01 + -4.264638848000000e+01 + -4.283441114000928e+01 + -4.302328258823673e+01 + -4.321300556988346e+01 + -4.340358284230594e+01 + -4.359501715999993e+01 + -4.378731127802528e+01 + -4.398046796379431e+01 + -4.417448998677844e+01 + -4.436938011574802e+01 + -4.456514113000000e+01 + -4.476177581459606e+01 + -4.495928695037842e+01 + -4.515767732491430e+01 + -4.535694973791337e+01 + -4.555710698999992e+01 + -4.575815188265746e+01 + -4.596008722124420e+01 + -4.616291581815827e+01 + -4.636664049491562e+01 + -4.657126407000000e+01 + -4.677678936329625e+01 + -4.698321921012249e+01 + -4.719055644645270e+01 + -4.739880390447049e+01 + -4.760796442999992e+01 + -4.781804087601476e+01 + -4.802903608806237e+01 + -4.824095291782189e+01 + -4.845379422957746e+01 + -4.866756289000000e+01 + -4.888226176793614e+01 + -4.909789373759357e+01 + -4.931446167624577e+01 + -4.953196846445736e+01 + -4.975041698999991e+01 + -4.996981014490353e+01 + -5.019015082042799e+01 + -5.041144191483806e+01 + -5.063368633767777e+01 + -5.085688700000000e+01 + -5.108104681363623e+01 + -5.130616869222998e+01 + -5.153225555529192e+01 + -5.175931033093434e+01 + -5.198733594999992e+01 + -5.221633534632925e+01 + -5.244631146064819e+01 + -5.267726723814258e+01 + -5.290920562821528e+01 + -5.314212958000000e+01 + -5.337604204603855e+01 + -5.361094599406351e+01 + -5.384684439089011e+01 + -5.408374019738633e+01 + -5.432163638999991e+01 + -5.456053595406303e+01 + -5.480044186892415e+01 + -5.504135712069162e+01 + -5.528328470761400e+01 + -5.552622762000000e+01 + -5.577018884907901e+01 + -5.601517141284037e+01 + -5.626117832498171e+01 + -5.650821258404100e+01 + -5.675627720999991e+01 + -5.700537523542541e+01 + -5.725550968441112e+01 + -5.750668358361924e+01 + -5.775889996777224e+01 + -5.801216188000000e+01 + -5.826647236807500e+01 + -5.852183447842080e+01 + -5.877825126017432e+01 + -5.903572576827786e+01 + -5.929426106999990e+01 + -5.955386023803142e+01 + -5.981452633626228e+01 + -6.007626243395679e+01 + -6.033907161265666e+01 + -6.060295696000000e+01 + -6.086792156620618e+01 + -6.113396851889991e+01 + -6.140110091270849e+01 + -6.166932185413050e+01 + -6.193863444999990e+01 + -6.220904180836374e+01 + -6.248054704389698e+01 + -6.275315327303672e+01 + -6.302686361375484e+01 + -6.330168120000000e+01 + -6.357760917255472e+01 + -6.385465065869710e+01 + -6.413280879313753e+01 + -6.441208672717147e+01 + -6.469248761000000e+01 + -6.497401459207148e+01 + -6.525667083785252e+01 + -6.554045951020694e+01 + -6.582538376572784e+01 + -6.611144677999999e+01 + -6.639865173804421e+01 + -6.668700181225154e+01 + -6.697650018322166e+01 + -6.726715004865791e+01 + -6.755895460000001e+01 + -6.785191702754956e+01 + -6.814604053706709e+01 + -6.844132833746227e+01 + -6.873778363702108e+01 + -6.903540965000001e+01 + -6.933420959649558e+01 + -6.963418670433917e+01 + -6.993534420146086e+01 + -7.023768531400407e+01 + -7.054121327999999e+01 + -7.084593134500037e+01 + -7.115184275353549e+01 + -7.145895075432828e+01 + -7.176725860332733e+01 + -7.207676955999989e+01 + -7.238748688676215e+01 + -7.269941385037480e+01 + -7.301255372170849e+01 + -7.332690977697268e+01 + -7.364248530000000e+01 + -7.395928357816831e+01 + -7.427730789465394e+01 + -7.459656154154558e+01 + -7.491704782593285e+01 + -7.523877004999987e+01 + -7.556173151464178e+01 + -7.588593553169946e+01 + -7.621138541944168e+01 + -7.653808450163682e+01 + -7.686603610000000e+01 + -7.719524353805981e+01 + -7.752571015313293e+01 + -7.785743928572181e+01 + -7.819043427631229e+01 + -7.852469846999988e+01 + -7.886023521608357e+01 + -7.919704786882774e+01 + -7.953513978918475e+01 + -7.987451434652237e+01 + -8.021517491000000e+01 + -8.055712484895521e+01 + -8.090036753598372e+01 + -8.124490635250547e+01 + -8.159074469172391e+01 + -8.193788593999987e+01 + -8.228633348416081e+01 + -8.263609073313938e+01 + -8.298716109541151e+01 + -8.333954797103145e+01 + -8.369325477000000e+01 + -8.404828491028280e+01 + -8.440464181412719e+01 + -8.476232890793086e+01 + -8.512134962287996e+01 + -8.548170738999985e+01 + -8.584340564352934e+01 + -8.620644783199920e+01 + -8.657083740482393e+01 + -8.693657780824788e+01 + -8.730367250000000e+01 + -8.767212494371194e+01 + -8.804193859639375e+01 + -8.841311692593891e+01 + -8.878566341870939e+01 + -8.915958154999986e+01 + -8.953487479168578e+01 + -8.991154663471849e+01 + -9.028960057395298e+01 + -9.066904010318096e+01 + -9.104986872000001e+01 + -9.143208992686800e+01 + -9.181570723560402e+01 + -9.220072416114067e+01 + -9.258714421980083e+01 + -9.297497092999986e+01 + -9.336420781525349e+01 + -9.375485841426487e+01 + -9.414692626313253e+01 + -9.454041488965315e+01 + -9.493532784000000e+01 + -9.533166867059026e+01 + -9.572944092950100e+01 + -9.612864816948191e+01 + -9.652929395407540e+01 + -9.693138184999984e+01 + -9.733491542620831e+01 + -9.773989825487583e+01 + -9.814633391500892e+01 + -9.855422599474231e+01 + -9.896357808000000e+01 + -9.937439375553778e+01 + -9.978667660951464e+01 + -1.002004302498873e+02 + -1.006156583113964e+02 + -1.010323643999998e+02 + -1.014505521033422e+02 + -1.018702250167552e+02 + -1.022913867648504e+02 + -1.027140410123223e+02 + -1.031381914000000e+02 + -1.035638415489902e+02 + -1.039909950728156e+02 + -1.044196556182856e+02 + -1.048498268814360e+02 + -1.052815124999998e+02 + -1.057147160851634e+02 + -1.061494413040264e+02 + -1.065856918490972e+02 + -1.070234714266025e+02 + -1.074627837000000e+02 + -1.079036323073108e+02 + -1.083460208994117e+02 + -1.087899531790557e+02 + -1.092354329168266e+02 + -1.096824637999998e+02 + -1.101310494754678e+02 + -1.105811936593542e+02 + -1.110329000832090e+02 + -1.114861724712110e+02 + -1.119410145000000e+02 + -1.123974298499644e+02 + -1.128554223365672e+02 + -1.133149957276709e+02 + -1.137761536721920e+02 + -1.142388998999998e+02 + -1.147032381951767e+02 + -1.151691723223398e+02 + -1.156367060267053e+02 + -1.161058430340008e+02 + -1.165765871000000e+02 + -1.170489420136372e+02 + -1.175229116129598e+02 + -1.179984996644491e+02 + -1.184757098197581e+02 + -1.189545458999998e+02 + -1.194350118004852e+02 + -1.199171112501401e+02 + -1.204008480035419e+02 + -1.208862259161727e+02 + -1.213732488000000e+02 + -1.218619204419225e+02 + -1.223522446637547e+02 + -1.228442252993658e+02 + -1.233378661832514e+02 + -1.238331710999998e+02 + -1.243301438371392e+02 + -1.248287883218059e+02 + -1.253291084262349e+02 + -1.258311078947497e+02 + -1.263347906000000e+02 + -1.268401604692280e+02 + -1.273472212887372e+02 + -1.278559768940106e+02 + -1.283664312433523e+02 + -1.288785881999998e+02 + -1.293924515790011e+02 + -1.299080252758494e+02 + -1.304253131892150e+02 + -1.309443191941241e+02 + -1.314650472000000e+02 + -1.319875011267033e+02 + -1.325116848422910e+02 + -1.330376022476014e+02 + -1.335652573069860e+02 + -1.340946538999998e+02 + -1.346257958892211e+02 + -1.351586873010075e+02 + -1.356933320835031e+02 + -1.362297340185993e+02 + -1.367678971000000e+02 + -1.373078254089903e+02 + -1.378495227933144e+02 + -1.383929931342302e+02 + -1.389382404506380e+02 + -1.394852686999998e+02 + -1.400340818144768e+02 + -1.405846838138316e+02 + -1.411370786853171e+02 + -1.416912703410207e+02 + -1.422472628000000e+02 + -1.428050601118040e+02 + -1.433646661562381e+02 + -1.439260848884736e+02 + -1.444893204354731e+02 + -1.450543767999998e+02 + -1.456212579173106e+02 + -1.461899678121767e+02 + -1.467605105156440e+02 + -1.473328900351724e+02 + -1.479071104000000e+02 + -1.484831756560318e+02 + -1.490610898537698e+02 + -1.496408570188282e+02 + -1.502224811435522e+02 + -1.508059663000000e+02 + -1.513913165938295e+02 + -1.519785360517816e+02 + -1.525676287092765e+02 + -1.531585986433134e+02 + -1.537514498999998e+02 + -1.543461865304275e+02 + -1.549428126935839e+02 + -1.555413324987964e+02 + -1.561417499433451e+02 + -1.567440691000000e+02 + -1.573482940967384e+02 + -1.579544290618548e+02 + -1.585624781173004e+02 + -1.591724453723425e+02 + -1.597843348999998e+02 + -1.603981507727703e+02 + -1.610138971515657e+02 + -1.616315781879854e+02 + -1.622511979884414e+02 + -1.628727607000000e+02 + -1.634962704824068e+02 + -1.641217314319286e+02 + -1.647491476962519e+02 + -1.653785235159056e+02 + -1.660098629999998e+02 + -1.666431702132707e+02 + -1.672784494025457e+02 + -1.679157047805161e+02 + -1.685549404452619e+02 + -1.691961606000000e+02 + -1.698393694891200e+02 + -1.704845712252935e+02 + -1.711317699673001e+02 + -1.717809699904770e+02 + -1.724321754999998e+02 + -1.730853906636835e+02 + -1.737406197069920e+02 + -1.743978668390772e+02 + -1.750571362267288e+02 + -1.757184321000000e+02 + -1.763817587329360e+02 + -1.770471204015179e+02 + -1.777145213342737e+02 + -1.783839656916257e+02 + -1.790554576999997e+02 + -1.797290016348361e+02 + -1.804046017812607e+02 + -1.810822624074922e+02 + -1.817619877551305e+02 + -1.824437821000000e+02 + -1.831276497291853e+02 + -1.838135948809234e+02 + -1.845016218201234e+02 + -1.851917348679873e+02 + -1.858839382999998e+02 + -1.865782363787204e+02 + -1.872746334451072e+02 + -1.879731338116912e+02 + -1.886737417231232e+02 + -1.893764615000000e+02 + -1.900812975069574e+02 + -1.907882540726982e+02 + -1.914973354967214e+02 + -1.922085460544087e+02 + -1.929218900999998e+02 + -1.936373720194894e+02 + -1.943549961169706e+02 + -1.950747667123967e+02 + -1.957966881820183e+02 + -1.965207649000000e+02 + -1.972470012275908e+02 + -1.979754014928308e+02 + -1.987059700466389e+02 + -1.994387112870401e+02 + -2.001736295999997e+02 + -2.009107293657797e+02 + -2.016500149830146e+02 + -2.023914908231823e+02 + -2.031351612174878e+02 + -2.038810306000000e+02 + -2.046291034502658e+02 + -2.053793841544099e+02 + -2.061318770718700e+02 + -2.068865865659776e+02 + -2.076435170999997e+02 + -2.084026731731890e+02 + -2.091640591716557e+02 + -2.099276794995817e+02 + -2.106935386300690e+02 + -2.114616410000000e+02 + -2.122319910255027e+02 + -2.130045931490896e+02 + -2.137794518362718e+02 + -2.145565715736208e+02 + -2.153359567999997e+02 + -2.161176119510612e+02 + -2.169015415764713e+02 + -2.176877501734888e+02 + -2.184762421224458e+02 + -2.192670219000000e+02 + -2.200600940505141e+02 + -2.208554631128035e+02 + -2.216531335679009e+02 + -2.224531098207831e+02 + -2.232553963999997e+02 + -2.240599978997985e+02 + -2.248669188401317e+02 + -2.256761637092654e+02 + -2.264877369816284e+02 + -2.273016432000000e+02 + -2.281178869415660e+02 + -2.289364727411434e+02 + -2.297574051254879e+02 + -2.305806886273285e+02 + -2.314063277999997e+02 + -2.322343272067604e+02 + -2.330646913987978e+02 + -2.338974249389632e+02 + -2.347325324124834e+02 + -2.355700184000000e+02 + -2.364098874788788e+02 + -2.372521442301691e+02 + -2.380967932316097e+02 + -2.389438390563173e+02 + -2.397932862999997e+02 + -2.406451395699314e+02 + -2.414994034603918e+02 + -2.423560825773335e+02 + -2.432151815494090e+02 + -2.440767050000000e+02 + -2.449406575494712e+02 + -2.458070438246558e+02 + -2.466758684438366e+02 + -2.475471360143982e+02 + -2.484208511999996e+02 + -2.492970186823550e+02 + -2.501756430678903e+02 + -2.510567289807632e+02 + -2.519402811010791e+02 + -2.528263041000000e+02 + -2.537148026392507e+02 + -2.546057813786489e+02 + -2.554992449908618e+02 + -2.563951981686694e+02 + -2.572936455999996e+02 + -2.581945919701986e+02 + -2.590980419711499e+02 + -2.600040002856254e+02 + -2.609124715849065e+02 + -2.618234606000000e+02 + -2.627369720784054e+02 + -2.636530106775519e+02 + -2.645715811006028e+02 + -2.654926881465747e+02 + -2.664163364999997e+02 + -2.673425308135112e+02 + -2.682712759281322e+02 + -2.692025766270102e+02 + -2.701364375396030e+02 + -2.710728634000000e+02 + -2.720118590149941e+02 + -2.729534291763713e+02 + -2.738975786300543e+02 + -2.748443120676544e+02 + -2.757936342999997e+02 + -2.767455501787848e+02 + -2.777000643997414e+02 + -2.786571816989448e+02 + -2.796169069311608e+02 + -2.805792449000000e+02 + -2.815442003833780e+02 + -2.825117782146733e+02 + -2.834819832031981e+02 + -2.844548201023671e+02 + -2.854302936999997e+02 + -2.864084088239409e+02 + -2.873891703596309e+02 + -2.883725831483384e+02 + -2.893586519481404e+02 + -2.903473816000000e+02 + -2.913387769892773e+02 + -2.923328429461174e+02 + -2.933295843055886e+02 + -2.943290059327143e+02 + -2.953311126999996e+02 + -2.963359094688269e+02 + -2.973434010446480e+02 + -2.983535922946355e+02 + -2.993664881931061e+02 + -3.003820936000000e+02 + -3.014004133189056e+02 + -3.024214522481863e+02 + -3.034452153213495e+02 + -3.044717074825456e+02 + -3.055009335999997e+02 + -3.065328985120693e+02 + -3.075676071368449e+02 + -3.086050644279766e+02 + -3.096452753553112e+02 + -3.106882447999996e+02 + -3.117339776182681e+02 + -3.127824787990806e+02 + -3.138337533166528e+02 + -3.148878060732492e+02 + -3.159446419999996e+02 + -3.170042660531784e+02 + -3.180666831989414e+02 + -3.191318984100575e+02 + -3.201999166629245e+02 + -3.212707428999996e+02 + -3.223443820580361e+02 + -3.234208391391681e+02 + -3.245001191331626e+02 + -3.255822269890704e+02 + -3.266671677000000e+02 + -3.277549462905472e+02 + -3.288455677875165e+02 + -3.299390371822755e+02 + -3.310353594166140e+02 + -3.321345394999996e+02 + -3.332365824854958e+02 + -3.343414934139734e+02 + -3.354492773045120e+02 + -3.365599391517927e+02 + -3.376734840000000e+02 + -3.387899169180687e+02 + -3.399092429402671e+02 + -3.410314670886827e+02 + -3.421565943845668e+02 + -3.432846298999996e+02 + -3.444155787253185e+02 + -3.455494458929433e+02 + -3.466862364711880e+02 + -3.478259555971263e+02 + -3.489686083000000e+02 + -3.501141995805723e+02 + -3.512627346186799e+02 + -3.524142185495274e+02 + -3.535686563776662e+02 + -3.547260531999996e+02 + -3.558864141649047e+02 + -3.570497443588797e+02 + -3.582160488781844e+02 + -3.593853328562213e+02 + -3.605576014000000e+02 + -3.617328596203877e+02 + -3.629111127187760e+02 + -3.640923658296630e+02 + -3.652766239636252e+02 + -3.664638922999996e+02 + -3.676541760949210e+02 + -3.688474804479435e+02 + -3.700438104641370e+02 + -3.712431713192604e+02 + -3.724455682000000e+02 + -3.736510062917217e+02 + -3.748594907617601e+02 + -3.760710267615897e+02 + -3.772856194324323e+02 + -3.785032739999995e+02 + -3.797239957155368e+02 + -3.809477897125092e+02 + -3.821746611611994e+02 + -3.834046153278488e+02 + -3.846376574000000e+02 + -3.858737925371631e+02 + -3.871130260109560e+02 + -3.883553630688227e+02 + -3.896008088834330e+02 + -3.908493686999996e+02 + -3.921010477895665e+02 + -3.933558513233559e+02 + -3.946137845264227e+02 + -3.958748527376295e+02 + -3.971390612000000e+02 + -3.984064151109821e+02 + -3.996769197585321e+02 + -4.009505804131749e+02 + -4.022274022910074e+02 + -4.035073906999995e+02 + -4.047905509809469e+02 + -4.060768883569506e+02 + -4.073664080804837e+02 + -4.086591154923789e+02 + -4.099550159000000e+02 + -4.112541145837781e+02 + -4.125564168232350e+02 + -4.138619279264533e+02 + -4.151706532436620e+02 + -4.164825980999995e+02 + -4.177977678009782e+02 + -4.191161676484082e+02 + -4.204378029703449e+02 + -4.217626791355866e+02 + -4.230908015000000e+02 + -4.244221753941545e+02 + -4.257568060915354e+02 + -4.270946989435893e+02 + -4.284358594322071e+02 + -4.297802928999995e+02 + -4.311280046181774e+02 + -4.324789999621266e+02 + -4.338332843406102e+02 + -4.351908631680312e+02 + -4.365517418000000e+02 + -4.379159255766193e+02 + -4.392834199290754e+02 + -4.406542302894571e+02 + -4.420283620541414e+02 + -4.434058205999995e+02 + -4.447866113008026e+02 + -4.461707395611302e+02 + -4.475582108324218e+02 + -4.489490306166049e+02 + -4.503432043000000e+02 + -4.517407372272212e+02 + -4.531416348857516e+02 + -4.545459027469901e+02 + -4.559535462055746e+02 + -4.573645706999994e+02 + -4.587789817092769e+02 + -4.601967847429616e+02 + -4.616179852648949e+02 + -4.630425886631084e+02 + -4.644706004000000e+02 + -4.659020259847504e+02 + -4.673368709042424e+02 + -4.687751406384571e+02 + -4.702168406679589e+02 + -4.716619764999995e+02 + -4.731105536500806e+02 + -4.745625775980045e+02 + -4.760180538297375e+02 + -4.774769878558138e+02 + -4.789393852000000e+02 + -4.804052513950263e+02 + -4.818745919803221e+02 + -4.833474124743740e+02 + -4.848237183656923e+02 + -4.863035151999994e+02 + -4.877868085453354e+02 + -4.892736039052198e+02 + -4.907639068268139e+02 + -4.922577229425711e+02 + -4.937550578000000e+02 + -4.952559169027076e+02 + -4.967603058178435e+02 + -4.982682301416788e+02 + -4.997796954853789e+02 + -5.012947073999994e+02 + -5.028132714194502e+02 + -5.043353931676896e+02 + -5.058610782730644e+02 + -5.073903323321115e+02 + -5.089231609000000e+02 + -5.104595695386481e+02 + -5.119995639358939e+02 + -5.135431497453484e+02 + -5.150903325247945e+02 + -5.166411178999995e+02 + -5.181955115300345e+02 + -5.197535190105982e+02 + -5.213151459679927e+02 + -5.228803980937674e+02 + -5.244492810000000e+02 + -5.260218002787250e+02 + -5.275979616609960e+02 + -5.291777708470047e+02 + -5.307612334400695e+02 + -5.323483550999995e+02 + -5.339391415258532e+02 + -5.355335984055753e+02 + -5.371317314077364e+02 + -5.387335461786030e+02 + -5.403390484000000e+02 + -5.419482437848817e+02 + -5.435611380730882e+02 + -5.451777369746786e+02 + -5.467980461477442e+02 + -5.484220712999994e+02 + -5.500498181706811e+02 + -5.516812924850077e+02 + -5.533164999617454e+02 + -5.549554463178829e+02 + -5.565981372999994e+02 + -5.582445786620732e+02 + -5.598947761113077e+02 + -5.615487353817318e+02 + -5.632064622631164e+02 + -5.648679624999994e+02 + -5.665332418238921e+02 + -5.682023060429622e+02 + -5.698751609401672e+02 + -5.715518122344557e+02 + -5.732322656999993e+02 + -5.749165271427032e+02 + -5.766046023386582e+02 + -5.782964970855437e+02 + -5.799922172195480e+02 + -5.816917684999994e+02 + -5.833951566715182e+02 + -5.851023876259811e+02 + -5.868134672043320e+02 + -5.885284011210334e+02 + -5.902471951999993e+02 + -5.919698553287222e+02 + -5.936963873375214e+02 + -5.954267970459595e+02 + -5.971610902818754e+02 + -5.988992728999993e+02 + -6.006413507613062e+02 + -6.023873296844711e+02 + -6.041372155081436e+02 + -6.058910141182311e+02 + -6.076487313999993e+02 + -6.094103732273231e+02 + -6.111759454411804e+02 + -6.129454539033432e+02 + -6.147189045204622e+02 + -6.164963032000001e+02 + -6.182776558378988e+02 + -6.200629682925465e+02 + -6.218522464515877e+02 + -6.236454962577363e+02 + -6.254427235999993e+02 + -6.272439343587159e+02 + -6.290491345295636e+02 + -6.308583300588987e+02 + -6.326715267788347e+02 + -6.344887306000001e+02 + -6.363099474872770e+02 + -6.381351833941451e+02 + -6.399644442896572e+02 + -6.417977361628546e+02 + -6.436350648999993e+02 + -6.454764363684590e+02 + -6.473218566292518e+02 + -6.491713317125350e+02 + -6.510248675271151e+02 + -6.528824700000000e+02 + -6.547441451008573e+02 + -6.566098988943567e+02 + -6.584797373808955e+02 + -6.603536664383599e+02 + -6.622316920999993e+02 + -6.641138204605409e+02 + -6.660000574329696e+02 + -6.678904089961051e+02 + -6.697848812885560e+02 + -6.716834803000000e+02 + -6.735862119462199e+02 + -6.754930822688247e+02 + -6.774040973560088e+02 + -6.793192633079277e+02 + -6.812385860999992e+02 + -6.831620716800010e+02 + -6.850897262089175e+02 + -6.870215557906422e+02 + -6.889575663679858e+02 + -6.908977640000001e+02 + -6.928421548145254e+02 + -6.947907448778678e+02 + -6.967435402481692e+02 + -6.987005469959722e+02 + -7.006617711999993e+02 + -7.026272189534540e+02 + -7.045968963883171e+02 + -7.065708096021641e+02 + -7.085489646318440e+02 + -7.105313676000000e+02 + -7.125180246666655e+02 + -7.145089419064375e+02 + -7.165041254104643e+02 + -7.185035813280965e+02 + -7.205073157999993e+02 + -7.225153349567163e+02 + -7.245276449240899e+02 + -7.265442518464891e+02 + -7.285651618951177e+02 + -7.305903812000000e+02 + -7.326199158832851e+02 + -7.346537721472801e+02 + -7.366919561576724e+02 + -7.387344740033407e+02 + -7.407813318999993e+02 + -7.428325361060332e+02 + -7.448880927069067e+02 + -7.469480078569493e+02 + -7.490122878703525e+02 + -7.510809389000000e+02 + -7.531539670309830e+02 + -7.552313785295614e+02 + -7.573131796529314e+02 + -7.593993765758833e+02 + -7.614899754999992e+02 + -7.635849826556215e+02 + -7.656844042998581e+02 + -7.677882466626152e+02 + -7.698965159244972e+02 + -7.720092183000000e+02 + -7.741263600422619e+02 + -7.762479474594095e+02 + -7.783739868214470e+02 + -7.805044843222228e+02 + -7.826394461999992e+02 + -7.847788787331309e+02 + -7.869227882276110e+02 + -7.890711809493379e+02 + -7.912240631015031e+02 + -7.933814410000000e+02 + -7.955433210068886e+02 + -7.977097093640062e+02 + -7.998806123337483e+02 + -8.020560362523712e+02 + -8.042359873999992e+02 + -8.064204720446323e+02 + -8.086094965664213e+02 + -8.108030673053524e+02 + -8.130011905039750e+02 + -8.152038725000000e+02 + -8.174111196729889e+02 + -8.196229383028856e+02 + -8.218393347070877e+02 + -8.240603152936806e+02 + -8.262858863999992e+02 + -8.285160543327190e+02 + -8.307508254786889e+02 + -8.329902062108882e+02 + -8.352342028550189e+02 + -8.374828218000000e+02 + -8.397360694583805e+02 + -8.419939521636865e+02 + -8.442564762682848e+02 + -8.465236481828920e+02 + -8.487954742999991e+02 + -8.510719610066617e+02 + -8.533531147279726e+02 + -8.556389418758610e+02 + -8.579294488297842e+02 + -8.602246420000000e+02 + -8.625245278111681e+02 + -8.648291126593311e+02 + -8.671384029773127e+02 + -8.694524052578884e+02 + -8.717711258999991e+02 + -8.740945712693658e+02 + -8.764227478547659e+02 + -8.787556621558366e+02 + -8.810933206360036e+02 + -8.834357297000000e+02 + -8.857828957473700e+02 + -8.881348253000285e+02 + -8.904915248639498e+02 + -8.928530008754832e+02 + -8.952192597999992e+02 + -8.975903081273602e+02 + -8.999661523549036e+02 + -9.023467989915350e+02 + -9.047322545556517e+02 + -9.071225255000001e+02 + -9.095176182642568e+02 + -9.119175394073789e+02 + -9.143222954857910e+02 + -9.167318930073794e+02 + -9.191463384999990e+02 + -9.215656384936522e+02 + -9.239897994653498e+02 + -9.264188279352956e+02 + -9.288527305046009e+02 + -9.312915136999991e+02 + -9.337351840217814e+02 + -9.361837480744202e+02 + -9.386372124507991e+02 + -9.410955836845210e+02 + -9.435588682999991e+02 + -9.460270728408829e+02 + -9.485002039375468e+02 + -9.509782681943145e+02 + -9.534612721474879e+02 + -9.559492223999991e+02 + -9.584421255818636e+02 + -9.609399882443452e+02 + -9.634428169536077e+02 + -9.659506183300578e+02 + -9.684633989999990e+02 + -9.709811655949806e+02 + -9.735039247636544e+02 + -9.760316831188370e+02 + -9.785644472182881e+02 + -9.811022236999991e+02 + -9.836450192407020e+02 + -9.861928404528198e+02 + -9.887456939756197e+02 + -9.913035865101050e+02 + -9.938665246999991e+02 + -9.964345151588749e+02 + -9.990075645416573e+02 + -1.001585679508894e+03 + -1.004168866725833e+03 + -1.006757132999999e+03 + -1.009350485088950e+03 + -1.011948929193798e+03 + -1.014552472017065e+03 + -1.017161121149714e+03 + -1.019774882999999e+03 + -1.022393763477281e+03 + -1.025017769745607e+03 + -1.027646908706880e+03 + -1.030281186449000e+03 + -1.032920609999999e+03 + -1.035565186772393e+03 + -1.038214923106640e+03 + -1.040869825393126e+03 + -1.043529900494233e+03 + -1.046195154999999e+03 + -1.048865595518282e+03 + -1.051541229525064e+03 + -1.054222063914517e+03 + -1.056908104442841e+03 + -1.059599357999999e+03 + -1.062295832060889e+03 + -1.064997533253958e+03 + -1.067704468147946e+03 + -1.070416643533965e+03 + -1.073134066000000e+03 + -1.075856742179453e+03 + -1.078584679453085e+03 + -1.081317884808236e+03 + -1.084056364390976e+03 + -1.086800124999999e+03 + -1.089549173751501e+03 + -1.092303517161580e+03 + -1.095063162007773e+03 + -1.097828115663242e+03 + -1.100598385000000e+03 + -1.103373976558467e+03 + -1.106154896984741e+03 + -1.108941153067517e+03 + -1.111732751768433e+03 + -1.114529699999999e+03 + -1.117332004656191e+03 + -1.120139672719820e+03 + -1.122952711033347e+03 + -1.125771126202256e+03 + -1.128594925000000e+03 + -1.131424114391635e+03 + -1.134258701616623e+03 + -1.137098693726371e+03 + -1.139944097362279e+03 + -1.142794918999999e+03 + -1.145651165298781e+03 + -1.148512843975744e+03 + -1.151379962155369e+03 + -1.154252525751212e+03 + -1.157130542000000e+03 + -1.160014018647746e+03 + -1.162902961796701e+03 + -1.165797378002409e+03 + -1.168697275086654e+03 + -1.171602659999999e+03 + -1.174513539162380e+03 + -1.177429919411751e+03 + -1.180351807863387e+03 + -1.183279211838743e+03 + -1.186212138000000e+03 + -1.189150592852472e+03 + -1.192094584016226e+03 + -1.195044118757429e+03 + -1.197999203418656e+03 + -1.200959844999999e+03 + -1.203926050837031e+03 + -1.206897827704460e+03 + -1.209875182550288e+03 + -1.212858122751144e+03 + -1.215846655000000e+03 + -1.218840785789916e+03 + -1.221840522671824e+03 + -1.224845872987532e+03 + -1.227856843385819e+03 + -1.230873440999999e+03 + -1.233895673111333e+03 + -1.236923546192640e+03 + -1.239957067026041e+03 + -1.242996243170224e+03 + -1.246041082000000e+03 + -1.249091590572761e+03 + -1.252147775334870e+03 + -1.255209643154299e+03 + -1.258277201722480e+03 + -1.261350457999999e+03 + -1.264429418673061e+03 + -1.267514091394071e+03 + -1.270604483350415e+03 + -1.273700600740823e+03 + -1.276802451000000e+03 + -1.279910042060014e+03 + -1.283023380429426e+03 + -1.286142472688095e+03 + -1.289267326090673e+03 + -1.292397947999999e+03 + -1.295534345774196e+03 + -1.298676526619691e+03 + -1.301824497524618e+03 + -1.304978265240164e+03 + -1.308137837000000e+03 + -1.311303220289759e+03 + -1.314474422298625e+03 + -1.317651449999705e+03 + -1.320834310180745e+03 + -1.324023009999999e+03 + -1.327217556910311e+03 + -1.330417958531748e+03 + -1.333624221890711e+03 + -1.336836353161044e+03 + -1.340054360000000e+03 + -1.343278250622039e+03 + -1.346508031450468e+03 + -1.349743709083262e+03 + -1.352985291084887e+03 + -1.356232784999999e+03 + -1.359486198143600e+03 + -1.362745537187869e+03 + -1.366010809195683e+03 + -1.369282022032803e+03 + -1.372559183000000e+03 + -1.375842299046690e+03 + -1.379131377356324e+03 + -1.382426425045151e+03 + -1.385727449081319e+03 + -1.389034456999999e+03 + -1.392347456524483e+03 + -1.395666454635196e+03 + -1.398991458464414e+03 + -1.402322475610563e+03 + -1.405659513000000e+03 + -1.409002577344138e+03 + -1.412351676333446e+03 + -1.415706817605260e+03 + -1.419068008353351e+03 + -1.422435255999999e+03 + -1.425808567964313e+03 + -1.429187950969556e+03 + -1.432573411998037e+03 + -1.435964958719179e+03 + -1.439362599000000e+03 + -1.442766340439504e+03 + -1.446176189225631e+03 + -1.449592152360744e+03 + -1.453014238529275e+03 + -1.456442454999999e+03 + -1.459876808245435e+03 + -1.463317305593544e+03 + -1.466763954627232e+03 + -1.470216762966463e+03 + -1.473675738000000e+03 + -1.477140887005819e+03 + -1.480612217422037e+03 + -1.484089736511155e+03 + -1.487573451238554e+03 + -1.491063368999999e+03 + -1.494559497483912e+03 + -1.498061844364458e+03 + -1.501570417048641e+03 + -1.505085222548716e+03 + -1.508606267999999e+03 + -1.512133560790714e+03 + -1.515667108906144e+03 + -1.519206919999463e+03 + -1.522753000996140e+03 + -1.526305358999999e+03 + -1.529864001422905e+03 + -1.533428936276007e+03 + -1.537000171179230e+03 + -1.540577712963951e+03 + -1.544161568999999e+03 + -1.547751747018138e+03 + -1.551348254621497e+03 + -1.554951099280540e+03 + -1.558560288310355e+03 + -1.562175828999999e+03 + -1.565797728689906e+03 + -1.569425994958102e+03 + -1.573060635400619e+03 + -1.576701657553543e+03 + -1.580349068999999e+03 + -1.584002877314684e+03 + -1.587663089901193e+03 + -1.591329713983250e+03 + -1.595002756657312e+03 + -1.598682225999999e+03 + -1.602368130282464e+03 + -1.606060476003810e+03 + -1.609759270166310e+03 + -1.613464521194204e+03 + -1.617176236999999e+03 + -1.620894424965112e+03 + -1.624619091996676e+03 + -1.628350245392540e+03 + -1.632087893195996e+03 + -1.635832042999999e+03 + -1.639582702219653e+03 + -1.643339878880967e+03 + -1.647103580589531e+03 + -1.650873814125992e+03 + -1.654650586999999e+03 + -1.658433907212865e+03 + -1.662223782656940e+03 + -1.666020220927786e+03 + -1.669823229228366e+03 + -1.673632814999999e+03 + -1.677448985879331e+03 + -1.681271749582079e+03 + -1.685101113981527e+03 + -1.688937087086922e+03 + -1.692779675999999e+03 + -1.696628887589857e+03 + -1.700484730162859e+03 + -1.704347211664743e+03 + -1.708216339003609e+03 + -1.712092119999999e+03 + -1.715974562928047e+03 + -1.719863675285195e+03 + -1.723759464515762e+03 + -1.727661938269359e+03 + -1.731571103999999e+03 + -1.735486969207614e+03 + -1.739409542118944e+03 + -1.743338830603560e+03 + -1.747274841733617e+03 + -1.751217582999999e+03 + -1.755167062315964e+03 + -1.759123288009624e+03 + -1.763086267739076e+03 + -1.767056008086542e+03 + -1.771032516999999e+03 + -1.775015803098183e+03 + -1.779005873908525e+03 + -1.783002736756524e+03 + -1.787006399126180e+03 + -1.791016869000000e+03 + -1.795034154506543e+03 + -1.799058263107071e+03 + -1.803089202321619e+03 + -1.807126980015989e+03 + -1.811171603999998e+03 + -1.815223082025504e+03 + -1.819281421835726e+03 + -1.823346631247284e+03 + -1.827418718154363e+03 + -1.831497690000000e+03 + -1.835583554215247e+03 + -1.839676319355180e+03 + -1.843775993459518e+03 + -1.847882583413063e+03 + -1.851996096999998e+03 + -1.856116542493618e+03 + -1.860243927542824e+03 + -1.864378259929794e+03 + -1.868519547846306e+03 + -1.872667799000000e+03 + -1.876823020804590e+03 + -1.880985220849939e+03 + -1.885154407199114e+03 + -1.889330588466962e+03 + -1.893513771999998e+03 + -1.897703964771626e+03 + -1.901901175652285e+03 + -1.906105412964281e+03 + -1.910316683519642e+03 + -1.914534995000000e+03 + -1.918760355678869e+03 + -1.922992773607248e+03 + -1.927232256642219e+03 + -1.931478812455566e+03 + -1.935732448999998e+03 + -1.939993174351127e+03 + -1.944260996306766e+03 + -1.948535922544343e+03 + -1.952817960710870e+03 + -1.957107119000000e+03 + -1.961403405774432e+03 + -1.965706828656891e+03 + -1.970017395435863e+03 + -1.974335114379128e+03 + -1.978659992999998e+03 + -1.982992038634364e+03 + -1.987331259958815e+03 + -1.991677665406797e+03 + -1.996031262526477e+03 + -2.000392059000000e+03 + -2.004760062662544e+03 + -2.009135281420714e+03 + -2.013517723394651e+03 + -2.017907396963966e+03 + -2.022304309999998e+03 + -2.026708470129302e+03 + -2.031119885371980e+03 + -2.035538563783372e+03 + -2.039964513323241e+03 + -2.044397742000000e+03 + -2.048838257821666e+03 + -2.053286068652342e+03 + -2.057741182613919e+03 + -2.062203608203423e+03 + -2.066673352999998e+03 + -2.071150424296029e+03 + -2.075634830690161e+03 + -2.080126580708826e+03 + -2.084625682242698e+03 + -2.089132143000000e+03 + -2.093645970720743e+03 + -2.098167173603271e+03 + -2.102695759983049e+03 + -2.107231738184183e+03 + -2.111775115999998e+03 + -2.116325901057278e+03 + -2.120884101683680e+03 + -2.125449726108530e+03 + -2.130022782163747e+03 + -2.134603278000000e+03 + -2.139191221924691e+03 + -2.143786621957349e+03 + -2.148389485981318e+03 + -2.152999821836896e+03 + -2.157617637999998e+03 + -2.162242943074696e+03 + -2.166875744534069e+03 + -2.171516050262848e+03 + -2.176163869133622e+03 + -2.180819209000000e+03 + -2.185482077327040e+03 + -2.190152482871076e+03 + -2.194830433950524e+03 + -2.199515937814626e+03 + -2.204209002999998e+03 + -2.208909638535144e+03 + -2.213617851857877e+03 + -2.218333650781778e+03 + -2.223057044225780e+03 + -2.227788040000000e+03 + -2.232526645541351e+03 + -2.237272869895315e+03 + -2.242026721580949e+03 + -2.246788207788726e+03 + -2.251557336999999e+03 + -2.256334118250544e+03 + -2.261118559161676e+03 + -2.265910667352767e+03 + -2.270710451040453e+03 + -2.275517918999998e+03 + -2.280333080014267e+03 + -2.285155941593499e+03 + -2.289986511539142e+03 + -2.294824798563590e+03 + -2.299670810999998e+03 + -2.304524556927484e+03 + -2.309386044592275e+03 + -2.314255282195762e+03 + -2.319132277836808e+03 + -2.324017039999998e+03 + -2.328909577220459e+03 + -2.333809897224200e+03 + -2.338718008145149e+03 + -2.343633918994289e+03 + -2.348557637999998e+03 + -2.353489172912608e+03 + -2.358428531797252e+03 + -2.363375723128402e+03 + -2.368330755820120e+03 + -2.373293637999998e+03 + -2.378264377427878e+03 + -2.383242982526706e+03 + -2.388229461889857e+03 + -2.393223824063392e+03 + -2.398226076999998e+03 + -2.403236228525699e+03 + -2.408254287477974e+03 + -2.413280262494937e+03 + -2.418314161547432e+03 + -2.423355992999998e+03 + -2.428405765403690e+03 + -2.433463486890615e+03 + -2.438529165661329e+03 + -2.443602810190047e+03 + -2.448684428999998e+03 + -2.453774030522361e+03 + -2.458871622761939e+03 + -2.463977214083831e+03 + -2.469090813490053e+03 + -2.474212428999998e+03 + -2.479342068313477e+03 + -2.484479740528551e+03 + -2.489625454539379e+03 + -2.494779218375099e+03 + -2.499941039999998e+03 + -2.505110927624773e+03 + -2.510288890409285e+03 + -2.515474937052364e+03 + -2.520669075212765e+03 + -2.525871312999998e+03 + -2.531081658990217e+03 + -2.536300122220549e+03 + -2.541526711425658e+03 + -2.546761434689014e+03 + -2.552004299999998e+03 + -2.557255315555890e+03 + -2.562514490474060e+03 + -2.567781833501355e+03 + -2.573057352510476e+03 + -2.578341055999998e+03 + -2.583632952807378e+03 + -2.588933051312229e+03 + -2.594241359879810e+03 + -2.599557887014108e+03 + -2.604882640999998e+03 + -2.610215630196411e+03 + -2.615556863841929e+03 + -2.620906350516468e+03 + -2.626264097579904e+03 + -2.631630113999998e+03 + -2.637004409331177e+03 + -2.642386991059378e+03 + -2.647777867311749e+03 + -2.653177047878767e+03 + -2.658584540999998e+03 + -2.664000354190328e+03 + -2.669424496446296e+03 + -2.674856976816473e+03 + -2.680297803844182e+03 + -2.685746985999998e+03 + -2.691204531699670e+03 + -2.696670449221115e+03 + -2.702144747143579e+03 + -2.707627434527642e+03 + -2.713118519999998e+03 + -2.718618011850782e+03 + -2.724125918263655e+03 + -2.729642247949266e+03 + -2.735167010382318e+03 + -2.740700213999998e+03 + -2.746241866699575e+03 + -2.751791977076697e+03 + -2.757350554006517e+03 + -2.762917606479738e+03 + -2.768493143000000e+03 + -2.774077171851313e+03 + -2.779669701724049e+03 + -2.785270741295763e+03 + -2.790880299095185e+03 + -2.796498383999998e+03 + -2.802125004968091e+03 + -2.807760170344632e+03 + -2.813403888501788e+03 + -2.819056168106567e+03 + -2.824717018000000e+03 + -2.830386447079949e+03 + -2.836064464083062e+03 + -2.841751077483182e+03 + -2.847446295475182e+03 + -2.853150126999998e+03 + -2.858862581346520e+03 + -2.864583667200011e+03 + -2.870313392988722e+03 + -2.876051767015894e+03 + -2.881798798000000e+03 + -2.887554494917011e+03 + -2.893318866668325e+03 + -2.899091922031221e+03 + -2.904873669618204e+03 + -2.910664117999998e+03 + -2.916463275808826e+03 + -2.922271151990944e+03 + -2.928087755363771e+03 + -2.933913094445438e+03 + -2.939747178000000e+03 + -2.945590014959967e+03 + -2.951441614226611e+03 + -2.957301984588625e+03 + -2.963171134666888e+03 + -2.969049072999998e+03 + -2.974935808208847e+03 + -2.980831349417174e+03 + -2.986735705755709e+03 + -2.992648886132359e+03 + -2.998570899000000e+03 + -3.004501752659864e+03 + -3.010441455936329e+03 + -3.016390017858416e+03 + -3.022347447554316e+03 + -3.028313753999998e+03 + -3.034288946006182e+03 + -3.040273032141582e+03 + -3.046266021078663e+03 + -3.052267921739149e+03 + -3.058278743000000e+03 + -3.064298493698561e+03 + -3.070327182685398e+03 + -3.076364818827055e+03 + -3.082411411001809e+03 + -3.088466967999998e+03 + -3.094531498652569e+03 + -3.100605012177602e+03 + -3.106687517554494e+03 + -3.112779023262762e+03 + -3.118879538000000e+03 + -3.124989070695736e+03 + -3.131107630527278e+03 + -3.137235226491168e+03 + -3.143371867254447e+03 + -3.149517561999998e+03 + -3.155672319953097e+03 + -3.161836149115856e+03 + -3.168009058152651e+03 + -3.174191057129923e+03 + -3.180382155000000e+03 + -3.186582360055111e+03 + -3.192791681144167e+03 + -3.199010127274887e+03 + -3.205237707493432e+03 + -3.211474430999998e+03 + -3.217720306909038e+03 + -3.223975343611381e+03 + -3.230239549889151e+03 + -3.236512935355519e+03 + -3.242795509000000e+03 + -3.249087279482800e+03 + -3.255388255944051e+03 + -3.261698447489179e+03 + -3.268017862963467e+03 + -3.274346510999998e+03 + -3.280684400401313e+03 + -3.287031541121871e+03 + -3.293387942369432e+03 + -3.299753611888159e+03 + -3.306128559000000e+03 + -3.312512793688797e+03 + -3.318906324190636e+03 + -3.325309159228279e+03 + -3.331721308860119e+03 + -3.338142781999998e+03 + -3.344573586933190e+03 + -3.351013732692941e+03 + -3.357463228591956e+03 + -3.363922084041577e+03 + -3.370390307999997e+03 + -3.376867909193196e+03 + -3.383354896616435e+03 + -3.389851279509897e+03 + -3.396357067337695e+03 + -3.402872268999997e+03 + -3.409396893188545e+03 + -3.415930949268335e+03 + -3.422474446597307e+03 + -3.429027394238212e+03 + -3.435589800999997e+03 + -3.442161675674332e+03 + -3.448743027574159e+03 + -3.455333866086035e+03 + -3.461934200499129e+03 + -3.468544039999997e+03 + -3.475163393634110e+03 + -3.481792270131310e+03 + -3.488430678432703e+03 + -3.495078627927044e+03 + -3.501736127999997e+03 + -3.508403187927853e+03 + -3.515079816661691e+03 + -3.521766023349286e+03 + -3.528461817510494e+03 + -3.535167207999998e+03 + -3.541882203477436e+03 + -3.548606813620608e+03 + -3.555341047964333e+03 + -3.562084915431213e+03 + -3.568838424999997e+03 + -3.575601585773337e+03 + -3.582374407066678e+03 + -3.589156898185297e+03 + -3.595949068354316e+03 + -3.602750926999998e+03 + -3.609562483468940e+03 + -3.616383746264014e+03 + -3.623214724488114e+03 + -3.630055428392298e+03 + -3.636905866999997e+03 + -3.643766048793625e+03 + -3.650635983516456e+03 + -3.657515680680700e+03 + -3.664405149014039e+03 + -3.671304397999997e+03 + -3.678213437374473e+03 + -3.685132275760156e+03 + -3.692060922035369e+03 + -3.698999385901594e+03 + -3.705947676999997e+03 + -3.712905804797643e+03 + -3.719873778403308e+03 + -3.726851606752037e+03 + -3.733839298718909e+03 + -3.740836863999997e+03 + -3.747844312547997e+03 + -3.754861653211674e+03 + -3.761888895074585e+03 + -3.768926047955085e+03 + -3.775973120999997e+03 + -3.783030123074376e+03 + -3.790097063813473e+03 + -3.797173952745452e+03 + -3.804260798968512e+03 + -3.811357611999997e+03 + -3.818464401472386e+03 + -3.825581176303607e+03 + -3.832707945585785e+03 + -3.839844718954238e+03 + -3.846991505999998e+03 + -3.854148316201428e+03 + -3.861315158822798e+03 + -3.868492043129635e+03 + -3.875678978458987e+03 + -3.882875973999997e+03 + -3.890083038997269e+03 + -3.897300183310783e+03 + -3.904527416633095e+03 + -3.911764748154242e+03 + -3.919012186999997e+03 + -3.926269742452437e+03 + -3.933537424464352e+03 + -3.940815242621297e+03 + -3.948103205720294e+03 + -3.955401322999997e+03 + -3.962709604107895e+03 + -3.970028058998795e+03 + -3.977356697163350e+03 + -3.984695527326294e+03 + -3.992044558999997e+03 + -3.999403802144854e+03 + -4.006773266302151e+03 + -4.014152960820400e+03 + -4.021542894928240e+03 + -4.028943077999997e+03 + -4.036353519583599e+03 + -4.043774229513202e+03 + -4.051205217431756e+03 + -4.058646492564995e+03 + -4.066098063999997e+03 + -4.073559940995820e+03 + -4.081032133755226e+03 + -4.088514652104142e+03 + -4.096007504979870e+03 + -4.103510702000000e+03 + -4.111024253097677e+03 + -4.118548167510886e+03 + -4.126082454416708e+03 + -4.133627123225803e+03 + -4.141182184000000e+03 + -4.148747646853033e+03 + -4.156323520486682e+03 + -4.163909814098826e+03 + -4.171506538118098e+03 + -4.179113701999993e+03 + -4.186731314728609e+03 + -4.194359386189681e+03 + -4.201997926116393e+03 + -4.209646943720986e+03 + -4.217306449000000e+03 + -4.224976452122954e+03 + -4.232656961817923e+03 + -4.240347987240753e+03 + -4.248049538718602e+03 + -4.255761626000000e+03 + -4.263484258397591e+03 + -4.271217445246016e+03 + -4.278961196276451e+03 + -4.286715521743729e+03 + -4.294480431000000e+03 + -4.302255933066315e+03 + -4.310042038085233e+03 + -4.317838756007569e+03 + -4.325646096087124e+03 + -4.333464067999995e+03 + -4.341292681602012e+03 + -4.349131946225953e+03 + -4.356981871466000e+03 + -4.364842467485710e+03 + -4.372713744000000e+03 + -4.380595710372718e+03 + -4.388488375861229e+03 + -4.396391750264422e+03 + -4.404305844160006e+03 + -4.412230667000000e+03 + -4.420166227736474e+03 + -4.428112536405837e+03 + -4.436069603088062e+03 + -4.444037437481978e+03 + -4.452016049000000e+03 + -4.460005447074678e+03 + -4.468005641867199e+03 + -4.476016643204103e+03 + -4.484038460200805e+03 + -4.492071102999995e+03 + -4.500114582060231e+03 + -4.508168906299815e+03 + -4.516234085098625e+03 + -4.524310129075975e+03 + -4.532397048000000e+03 + -4.540494851104932e+03 + -4.548603547974418e+03 + -4.556723148595408e+03 + -4.564853663376500e+03 + -4.572995102000000e+03 + -4.581147473755137e+03 + -4.589310788334117e+03 + -4.597485055595826e+03 + -4.605670285497996e+03 + -4.613866488000000e+03 + -4.622073673035890e+03 + -4.630291850451470e+03 + -4.638521029781397e+03 + -4.646761220207367e+03 + -4.655012431999994e+03 + -4.663274675842531e+03 + -4.671547961173437e+03 + -4.679832297267551e+03 + -4.688127693710799e+03 + -4.696434161000000e+03 + -4.704751709752170e+03 + -4.713080348793824e+03 + -4.721420087561993e+03 + -4.729770937031085e+03 + -4.738132907000000e+03 + -4.746506006604411e+03 + -4.754890245715343e+03 + -4.763285634540516e+03 + -4.771692183448750e+03 + -4.780109901999994e+03 + -4.788538799466528e+03 + -4.796978886096308e+03 + -4.805430172162917e+03 + -4.813892667577567e+03 + -4.822366381999994e+03 + -4.830851325088147e+03 + -4.839347507060687e+03 + -4.847854938123849e+03 + -4.856373628221604e+03 + -4.864903587000000e+03 + -4.873444824101478e+03 + -4.881997349859994e+03 + -4.890561174364984e+03 + -4.899136307099045e+03 + -4.907722758000000e+03 + -4.916320537362784e+03 + -4.924929655587317e+03 + -4.933550122528648e+03 + -4.942181947260091e+03 + -4.950825139999994e+03 + -4.959479711457802e+03 + -4.968145671175524e+03 + -4.976823028809056e+03 + -4.985511794647833e+03 + -4.994211978999993e+03 + -5.002923592007461e+03 + -5.011646643245516e+03 + -5.020381142480443e+03 + -5.029127099988444e+03 + -5.037884526000000e+03 + -5.046653430641881e+03 + -5.055433823857634e+03 + -5.064225715527905e+03 + -5.073029115529123e+03 + -5.081844034000000e+03 + -5.090670481166524e+03 + -5.099508466925161e+03 + -5.108358001180135e+03 + -5.117219094017154e+03 + -5.126091755999993e+03 + -5.134975997626908e+03 + -5.143871827953957e+03 + -5.152779256704796e+03 + -5.161698295082459e+03 + -5.170628952999993e+03 + -5.179571239778229e+03 + -5.188525166029071e+03 + -5.197490742130520e+03 + -5.206467977662855e+03 + -5.215456883000000e+03 + -5.224457468752808e+03 + -5.233469744262066e+03 + -5.242493719420175e+03 + -5.251529405361101e+03 + -5.260576812000000e+03 + -5.269635948683524e+03 + -5.278706825911151e+03 + -5.287789454172008e+03 + -5.296883843495917e+03 + -5.305990003999993e+03 + -5.315107945871962e+03 + -5.324237679253967e+03 + -5.333379214299059e+03 + -5.342532561186867e+03 + -5.351697729999993e+03 + -5.360874730862462e+03 + -5.370063574314554e+03 + -5.379264270604972e+03 + -5.388476829418795e+03 + -5.397701261000000e+03 + -5.406937575887649e+03 + -5.416185784228891e+03 + -5.425445896082409e+03 + -5.434717921547790e+03 + -5.444001871000000e+03 + -5.453297754883592e+03 + -5.462605583222671e+03 + -5.471925366229407e+03 + -5.481257114511772e+03 + -5.490600837999993e+03 + -5.499956546429602e+03 + -5.509324250592133e+03 + -5.518703961068116e+03 + -5.528095687743725e+03 + -5.537499440999993e+03 + -5.546915231361128e+03 + -5.556343068498348e+03 + -5.565782962476614e+03 + -5.575234924238452e+03 + -5.584698964000000e+03 + -5.594175091687396e+03 + -5.603663318133420e+03 + -5.613163653827974e+03 + -5.622676108416792e+03 + -5.632200692000000e+03 + -5.641737415094019e+03 + -5.651286288507457e+03 + -5.660847322604374e+03 + -5.670420527008017e+03 + -5.680005911999993e+03 + -5.689603488367688e+03 + -5.699213267038800e+03 + -5.708835258184300e+03 + -5.718469470901945e+03 + -5.728115915999992e+03 + -5.737774605002216e+03 + -5.747445547634946e+03 + -5.757128753652110e+03 + -5.766824233562706e+03 + -5.776531998000000e+03 + -5.786252057564687e+03 + -5.795984422575620e+03 + -5.805729103393980e+03 + -5.815486110517342e+03 + -5.825255454000000e+03 + -5.835037143865786e+03 + -5.844831191184440e+03 + -5.854637606668529e+03 + -5.864456400127173e+03 + -5.874287581999993e+03 + -5.884131163070459e+03 + -5.893987153665426e+03 + -5.903855564090225e+03 + -5.913736404781277e+03 + -5.923629686000000e+03 + -5.933535418061928e+03 + -5.943453611973397e+03 + -5.953384278439786e+03 + -5.963327427438455e+03 + -5.973283069000000e+03 + -5.983251213525049e+03 + -5.993231872573540e+03 + -6.003225056744913e+03 + -6.013230774891098e+03 + -6.023249038000000e+03 + -6.033279857947543e+03 + -6.043323244258373e+03 + -6.053379206808452e+03 + -6.063447756872029e+03 + -6.073528904999992e+03 + -6.083622661322729e+03 + -6.093729036471069e+03 + -6.103848041095609e+03 + -6.113979685699232e+03 + -6.124123981000000e+03 + -6.134280937646101e+03 + -6.144450565430006e+03 + -6.154632874755873e+03 + -6.164827877191976e+03 + -6.175035583000000e+03 + -6.185256001935748e+03 + -6.195489145360168e+03 + -6.205735024246584e+03 + -6.215993648382001e+03 + -6.226265028000000e+03 + -6.236549173839082e+03 + -6.246846097225249e+03 + -6.257155808917487e+03 + -6.267478318647532e+03 + -6.277813636999993e+03 + -6.288161775039973e+03 + -6.298522743318929e+03 + -6.308896552332133e+03 + -6.319283212690151e+03 + -6.329682735000000e+03 + -6.340095129841887e+03 + -6.350520407726451e+03 + -6.360958579315570e+03 + -6.371409655512612e+03 + -6.381873647000000e+03 + -6.392350564293673e+03 + -6.402840417873253e+03 + -6.413343218449801e+03 + -6.423858977046060e+03 + -6.434387704000000e+03 + -6.444929409479182e+03 + -6.455484104800415e+03 + -6.466051800878468e+03 + -6.476632507643834e+03 + -6.487226235999992e+03 + -6.497832997260840e+03 + -6.508452801649206e+03 + -6.519085659445890e+03 + -6.529731581482401e+03 + -6.540390579000000e+03 + -6.551062663116751e+03 + -6.561747843536938e+03 + -6.572446130639311e+03 + -6.583157536279329e+03 + -6.593882071000000e+03 + -6.604619744763902e+03 + -6.615370568925604e+03 + -6.626134554413510e+03 + -6.636911711064461e+03 + -6.647702049999992e+03 + -6.658505582840396e+03 + -6.669322319643610e+03 + -6.680152270785791e+03 + -6.690995447680221e+03 + -6.701851860999993e+03 + -6.712721521095499e+03 + -6.723604439166686e+03 + -6.734500626205399e+03 + -6.745410092579864e+03 + -6.756332849000000e+03 + -6.767268906377159e+03 + -6.778218275408767e+03 + -6.789180966973428e+03 + -6.800156992270870e+03 + -6.811146362000000e+03 + -6.822149086596000e+03 + -6.833165176809022e+03 + -6.844194643583943e+03 + -6.855237498022965e+03 + -6.866293750999992e+03 + -6.877363413246921e+03 + -6.888446495554016e+03 + -6.899543008749155e+03 + -6.910652963678518e+03 + -6.921776370999992e+03 + -6.932913241460104e+03 + -6.944063586638155e+03 + -6.955227417524035e+03 + -6.966404743973952e+03 + -6.977595577000000e+03 + -6.988799928187199e+03 + -7.000017808173458e+03 + -7.011249227729020e+03 + -7.022494198140058e+03 + -7.033752730000000e+03 + -7.045024833685246e+03 + -7.056310520605544e+03 + -7.067609802022496e+03 + -7.078922688575014e+03 + -7.090249190999992e+03 + -7.101589320140114e+03 + -7.112943086874141e+03 + -7.124310502404821e+03 + -7.135691578318693e+03 + -7.147086324999992e+03 + -7.158494752468790e+03 + -7.169916872475182e+03 + -7.181352696510882e+03 + -7.192802235036809e+03 + -7.204265499000000e+03 + -7.215742499578333e+03 + -7.227233247391960e+03 + -7.238737753333357e+03 + -7.250256028887258e+03 + -7.261788085000000e+03 + -7.273333932305611e+03 + -7.284893581718426e+03 + -7.296467044458082e+03 + -7.308054332025791e+03 + -7.319655454999992e+03 + -7.331270423697963e+03 + -7.342899249833889e+03 + -7.354541944862027e+03 + -7.366198519315069e+03 + -7.377868983999992e+03 + -7.389553350032372e+03 + -7.401251628839381e+03 + -7.412963831476617e+03 + -7.424689968390403e+03 + -7.436430051000000e+03 + -7.448184091042194e+03 + -7.459952098877861e+03 + -7.471734085033887e+03 + -7.483530060856024e+03 + -7.495340038000000e+03 + -7.507164027981260e+03 + -7.519002041143363e+03 + -7.530854088088799e+03 + -7.542720180263871e+03 + -7.554600328999991e+03 + -7.566494545476364e+03 + -7.578402840747203e+03 + -7.590325225748156e+03 + -7.602261711334166e+03 + -7.614212308999990e+03 + -7.626177030375796e+03 + -7.638155885970103e+03 + -7.650148886679111e+03 + -7.662156044359298e+03 + -7.674177370000000e+03 + -7.686212874133715e+03 + -7.698262567927072e+03 + -7.710326462858042e+03 + -7.722404570574414e+03 + -7.734496902000000e+03 + -7.746603467726753e+03 + -7.758724278933637e+03 + -7.770859347070250e+03 + -7.783008683730720e+03 + -7.795172299999991e+03 + -7.807350206747154e+03 + -7.819542415323729e+03 + -7.831748936928582e+03 + -7.843969782379609e+03 + -7.856204962999991e+03 + -7.868454490389281e+03 + -7.880718375856472e+03 + -7.892996630459527e+03 + -7.905289265033489e+03 + -7.917596291000000e+03 + -7.929917719977670e+03 + -7.942253562811284e+03 + -7.954603830544003e+03 + -7.966968534806996e+03 + -7.979347687000000e+03 + -7.991741298275563e+03 + -8.004149379532312e+03 + -8.016571941875890e+03 + -8.029008996834256e+03 + -8.041460555999991e+03 + -8.053926630829063e+03 + -8.066407232164392e+03 + -8.078902371093302e+03 + -8.091412059283156e+03 + -8.103936307999991e+03 + -8.116475128348727e+03 + -8.129028531951320e+03 + -8.141596530160446e+03 + -8.154179133753471e+03 + -8.166776354000000e+03 + -8.179388202500601e+03 + -8.192014690774517e+03 + -8.204655830155478e+03 + -8.217311631752342e+03 + -8.229982107000000e+03 + -8.242667267443709e+03 + -8.255367124181290e+03 + -8.268081688506129e+03 + -8.280810972124258e+03 + -8.293554985999990e+03 + -8.306313740930424e+03 + -8.319087249046417e+03 + -8.331875522237864e+03 + -8.344678571514016e+03 + -8.357496408000001e+03 + -8.370329042981793e+03 + -8.383176487893126e+03 + -8.396038754236946e+03 + -8.408915853538949e+03 + -8.421807796999999e+03 + -8.434714595760075e+03 + -8.447636261558551e+03 + -8.460572806112319e+03 + -8.473524240852536e+03 + -8.486490577000000e+03 + -8.499471825734363e+03 + -8.512467998550057e+03 + -8.525479106914012e+03 + -8.538505162160651e+03 + -8.551546175999989e+03 + -8.564602160205039e+03 + -8.577673125806519e+03 + -8.590759084111069e+03 + -8.603860047081474e+03 + -8.616976026000000e+03 + -8.630107031891077e+03 + -8.643253076647045e+03 + -8.656414171854482e+03 + -8.669590328370747e+03 + -8.682781558000001e+03 + -8.695987872906602e+03 + -8.709209284090668e+03 + -8.722445802791402e+03 + -8.735697441007769e+03 + -8.748964210000000e+03 + -8.762246120773598e+03 + -8.775543185390141e+03 + -8.788855415760128e+03 + -8.802182823160678e+03 + -8.815525418999991e+03 + -8.828883214778334e+03 + -8.842256221886048e+03 + -8.855644451817980e+03 + -8.869047916276779e+03 + -8.882466627000000e+03 + -8.895900595656447e+03 + -8.909349833599377e+03 + -8.922814352320849e+03 + -8.936294163622882e+03 + -8.949789279000001e+03 + -8.963299709806102e+03 + -8.976825467697834e+03 + -8.990366564425331e+03 + -9.003923011733321e+03 + -9.017494820999989e+03 + -9.031082003570244e+03 + -9.044684571593196e+03 + -9.058302536801553e+03 + -9.071935910043938e+03 + -9.085584702999991e+03 + -9.099248927805194e+03 + -9.112928596071970e+03 + -9.126623719398038e+03 + -9.140334309541779e+03 + -9.154060378000000e+03 + -9.167801936143134e+03 + -9.181558995552323e+03 + -9.195331568052554e+03 + -9.209119665711642e+03 + -9.222923300000000e+03 + -9.236742482191501e+03 + -9.250577224366738e+03 + -9.264427538348678e+03 + -9.278293435300837e+03 + -9.292174926999989e+03 + -9.306072025514850e+03 + -9.319984742353185e+03 + -9.333913089239737e+03 + -9.347857078372264e+03 + -9.361816720999988e+03 + -9.375792028076301e+03 + -9.389783011923670e+03 + -9.403789684689073e+03 + -9.417812057757259e+03 + -9.431850143000000e+03 + -9.445903952452922e+03 + -9.459973497383473e+03 + -9.474058789280491e+03 + -9.488159840242311e+03 + -9.502276662000000e+03 + -9.516409266099370e+03 + -9.530557664431180e+03 + -9.544721868948835e+03 + -9.558901891554557e+03 + -9.573097743999990e+03 + -9.587309437907974e+03 + -9.601536984771086e+03 + -9.615780396443668e+03 + -9.630039685320193e+03 + -9.644314862999989e+03 + -9.658605940694017e+03 + -9.672912930240365e+03 + -9.687235843732506e+03 + -9.701574693379191e+03 + -9.715929491000001e+03 + -9.730300248146514e+03 + -9.744686976337332e+03 + -9.759089687418043e+03 + -9.773508393705906e+03 + -9.787943106999999e+03 + -9.802393838806964e+03 + -9.816860600913731e+03 + -9.831343405392694e+03 + -9.845842264577648e+03 + -9.860357189999990e+03 + -9.874888192875391e+03 + -9.889435285292540e+03 + -9.903998479577405e+03 + -9.918577788007758e+03 + -9.933173221999989e+03 + -9.947784792760667e+03 + -9.962412512866247e+03 + -9.977056394630243e+03 + -9.991716449514770e+03 + -1.000639269000000e+04 + -1.002108512827329e+04 + -1.003579377260607e+04 + -1.005051863510592e+04 + -1.006525973450424e+04 + -1.008001708000000e+04 + -1.009479067738785e+04 + -1.010958054488143e+04 + -1.012438669671707e+04 + -1.013920913701616e+04 + -1.015404787999999e+04 + -1.016890294387830e+04 + -1.018377433451942e+04 + -1.019866206104612e+04 + -1.021356614193473e+04 + -1.022848658999999e+04 + -1.024342341422066e+04 + -1.025837662498870e+04 + -1.027334623400460e+04 + -1.028833225445739e+04 + -1.030333470000000e+04 + -1.031835358368700e+04 + -1.033338891534757e+04 + -1.034844070623467e+04 + -1.036350897076085e+04 + -1.037859372000000e+04 + -1.039369496373519e+04 + -1.040881271589677e+04 + -1.042394698923176e+04 + -1.043909779325773e+04 + -1.045426513999999e+04 + -1.046944904320307e+04 + -1.048464951626011e+04 + -1.049986657147346e+04 + -1.051510021951631e+04 + -1.053035046999999e+04 + -1.054561733346490e+04 + -1.056090082649770e+04 + -1.057620096382862e+04 + -1.059151775501402e+04 + -1.060685121000000e+04 + -1.062220133982168e+04 + -1.063756815769902e+04 + -1.065295167679853e+04 + -1.066835190951487e+04 + -1.068376887000000e+04 + -1.069920257172756e+04 + -1.071465302083269e+04 + -1.073012022736731e+04 + -1.074560420973240e+04 + -1.076110497999999e+04 + -1.077662254698522e+04 + -1.079215692468130e+04 + -1.080770812602064e+04 + -1.082327616047952e+04 + -1.083886103999999e+04 + -1.085446277832030e+04 + -1.087008138917964e+04 + -1.088571688451933e+04 + -1.090136927381244e+04 + -1.091703857000000e+04 + -1.093272478707855e+04 + -1.094842793381667e+04 + -1.096414802233435e+04 + -1.097988507119364e+04 + -1.099563909000000e+04 + -1.101141008471468e+04 + -1.102719807131307e+04 + -1.104300306633410e+04 + -1.105882508291791e+04 + -1.107466412999999e+04 + -1.109052021511841e+04 + -1.110639335038349e+04 + -1.112228355101184e+04 + -1.113819083451417e+04 + -1.115411520999999e+04 + -1.117005668368749e+04 + -1.118601527242516e+04 + -1.120199099177015e+04 + -1.121798385114509e+04 + -1.123399386000000e+04 + -1.125002102929127e+04 + -1.126606537454743e+04 + -1.128212691149971e+04 + -1.129820565394142e+04 + -1.131430161000000e+04 + -1.133041478676655e+04 + -1.134654520134832e+04 + -1.136269286880464e+04 + -1.137885779750048e+04 + -1.139503999999999e+04 + -1.141123949060806e+04 + -1.142745627830015e+04 + -1.144369037489935e+04 + -1.145994179819328e+04 + -1.147621056000000e+04 + -1.149249666929363e+04 + -1.150880014040390e+04 + -1.152512098586926e+04 + -1.154145921396878e+04 + -1.155781484000000e+04 + -1.157418788116290e+04 + -1.159057834325663e+04 + -1.160698623573862e+04 + -1.162341157750990e+04 + -1.163985437999999e+04 + -1.165631465167572e+04 + -1.167279241049137e+04 + -1.168928767028212e+04 + -1.170580043559586e+04 + -1.172233071999999e+04 + -1.173887854137991e+04 + -1.175544390951204e+04 + -1.177202683447122e+04 + -1.178862732998528e+04 + -1.180524541000000e+04 + -1.182188108744826e+04 + -1.183853437152247e+04 + -1.185520527417456e+04 + -1.187189381268968e+04 + -1.188860000000000e+04 + -1.190532384555031e+04 + -1.192206535739879e+04 + -1.193882454957090e+04 + -1.195560144455150e+04 + -1.197239604999999e+04 + -1.198920836801576e+04 + -1.200603841862060e+04 + -1.202288622005816e+04 + -1.203975178087160e+04 + -1.205663510999999e+04 + -1.207353621858988e+04 + -1.209045512337030e+04 + -1.210739183876488e+04 + -1.212434637372514e+04 + -1.214131874000000e+04 + -1.215830895146994e+04 + -1.217531702204386e+04 + -1.219234296344827e+04 + -1.220938678454126e+04 + -1.222644850000000e+04 + -1.224352812665298e+04 + -1.226062567426862e+04 + -1.227774115320455e+04 + -1.229487457740941e+04 + -1.231202595999999e+04 + -1.232919531361497e+04 + -1.234638265190763e+04 + -1.236358798719477e+04 + -1.238081132944854e+04 + -1.239805268999999e+04 + -1.241531208224867e+04 + -1.243258952373459e+04 + -1.244988502746729e+04 + -1.246719859854622e+04 + -1.248453025000000e+04 + -1.250187999937352e+04 + -1.251924785997314e+04 + -1.253663384322633e+04 + -1.255403795942784e+04 + -1.257146022000000e+04 + -1.258890063824787e+04 + -1.260635923174130e+04 + -1.262383601348307e+04 + -1.264133098848631e+04 + -1.265884416999999e+04 + -1.267637557565735e+04 + -1.269392521755929e+04 + -1.271149310837373e+04 + -1.272907926320349e+04 + -1.274668368999999e+04 + -1.276430639533002e+04 + -1.278194739917555e+04 + -1.279960671868295e+04 + -1.281728436173200e+04 + -1.283498034000000e+04 + -1.285269466774105e+04 + -1.287042735763161e+04 + -1.288817842259290e+04 + -1.290594787633268e+04 + -1.292373573000000e+04 + -1.294154199365508e+04 + -1.295936667981993e+04 + -1.297720980264566e+04 + -1.299507137776778e+04 + -1.301295141999999e+04 + -1.303084994203483e+04 + -1.304876695061188e+04 + -1.306670245535235e+04 + -1.308465647270176e+04 + -1.310262901999999e+04 + -1.312062011245361e+04 + -1.313862975604251e+04 + -1.315665796055223e+04 + -1.317470474462057e+04 + -1.319277012000000e+04 + -1.321085409533674e+04 + -1.322895668661698e+04 + -1.324707790969205e+04 + -1.326521777718879e+04 + -1.328337630000000e+04 + -1.330155348851537e+04 + -1.331974935491385e+04 + -1.333796391362056e+04 + -1.335619718140170e+04 + -1.337444916999999e+04 + -1.339271988874384e+04 + -1.341100935082290e+04 + -1.342931756987852e+04 + -1.344764455872234e+04 + -1.346599032999999e+04 + -1.348435489664480e+04 + -1.350273827293541e+04 + -1.352114047045672e+04 + -1.353956149695641e+04 + -1.355800137000000e+04 + -1.357646010972569e+04 + -1.359493772045508e+04 + -1.361343421245217e+04 + -1.363194960986463e+04 + -1.365048392000000e+04 + -1.366903714425879e+04 + -1.368760930691950e+04 + -1.370620042690972e+04 + -1.372481050688227e+04 + -1.374343955999999e+04 + -1.376208760473736e+04 + -1.378075465005087e+04 + -1.379944070672178e+04 + -1.381814579185646e+04 + -1.383686991999999e+04 + -1.385561310323773e+04 + -1.387437535187516e+04 + -1.389315667691767e+04 + -1.391195709130158e+04 + -1.393077661000000e+04 + -1.394961524865979e+04 + -1.396847302075987e+04 + -1.398734993803961e+04 + -1.400624601054151e+04 + -1.402516125000000e+04 + -1.404409566989268e+04 + -1.406304928589068e+04 + -1.408202211294199e+04 + -1.410101416389908e+04 + -1.412002544999999e+04 + -1.413905598164077e+04 + -1.415810576964489e+04 + -1.417717482985645e+04 + -1.419626318438561e+04 + -1.421537083999999e+04 + -1.423449779870650e+04 + -1.425364408441530e+04 + -1.427280971628262e+04 + -1.429199469812906e+04 + -1.431119904000000e+04 + -1.433042275698022e+04 + -1.434966586475864e+04 + -1.436892837784737e+04 + -1.438821030874347e+04 + -1.440751167000000e+04 + -1.442683247464153e+04 + -1.444617273693482e+04 + -1.446553246845352e+04 + -1.448491167696990e+04 + -1.450431037999999e+04 + -1.452372859766022e+04 + -1.454316633455064e+04 + -1.456262360064903e+04 + -1.458210041914065e+04 + -1.460159679999998e+04 + -1.462111274782618e+04 + -1.464064828275210e+04 + -1.466020342227678e+04 + -1.467977817411577e+04 + -1.469937255000000e+04 + -1.471898656425745e+04 + -1.473862022905967e+04 + -1.475827355783788e+04 + -1.477794656667906e+04 + -1.479763927000000e+04 + -1.481735168022591e+04 + -1.483708380678435e+04 + -1.485683566151257e+04 + -1.487660726097236e+04 + -1.489639861999999e+04 + -1.491620975095499e+04 + -1.493604066191429e+04 + -1.495589136614776e+04 + -1.497576188555746e+04 + -1.499565223000000e+04 + -1.501556240451360e+04 + -1.503549242791256e+04 + -1.505544231896391e+04 + -1.507541209051985e+04 + -1.509540175000000e+04 + -1.511541130465759e+04 + -1.513544077375174e+04 + -1.515549017500820e+04 + -1.517555951933053e+04 + -1.519564881999999e+04 + -1.521575809081157e+04 + -1.523588734003694e+04 + -1.525603658036919e+04 + -1.527620583277191e+04 + -1.529639510999998e+04 + -1.531660442034102e+04 + -1.533683377728779e+04 + -1.535708319443415e+04 + -1.537735268372974e+04 + -1.539764226000000e+04 + -1.541795193921473e+04 + -1.543828173411788e+04 + -1.545863165713528e+04 + -1.547900172144165e+04 + -1.549939194000000e+04 + -1.551980232569260e+04 + -1.554023289178161e+04 + -1.556068365093051e+04 + -1.558115461506463e+04 + -1.560164579999999e+04 + -1.562215722197032e+04 + -1.564268888875843e+04 + -1.566324081295743e+04 + -1.568381301679686e+04 + -1.570440550999999e+04 + -1.572501829745089e+04 + -1.574565139909988e+04 + -1.576630483256334e+04 + -1.578697860613842e+04 + -1.580767273000000e+04 + -1.582838721786272e+04 + -1.584912209052793e+04 + -1.586987736246908e+04 + -1.589065303680525e+04 + -1.591144913000000e+04 + -1.593226566336701e+04 + -1.595310264072689e+04 + -1.597396007256353e+04 + -1.599483798518879e+04 + -1.601573638999999e+04 + -1.603665529105288e+04 + -1.605759470511345e+04 + -1.607855464838671e+04 + -1.609953513161670e+04 + -1.612053616999998e+04 + -1.614155778004294e+04 + -1.616259997081388e+04 + -1.618366275348782e+04 + -1.620474614514243e+04 + -1.622585016000000e+04 + -1.624697481007329e+04 + -1.626812010728422e+04 + -1.628928606592670e+04 + -1.631047270337715e+04 + -1.633168003000000e+04 + -1.635290805454565e+04 + -1.637415679800609e+04 + -1.639542627592296e+04 + -1.641671649164588e+04 + -1.643802745999998e+04 + -1.645935920179283e+04 + -1.648071172935930e+04 + -1.650208505431875e+04 + -1.652347919039644e+04 + -1.654489414999998e+04 + -1.656632994566724e+04 + -1.658778659427021e+04 + -1.660926410974226e+04 + -1.663076250029903e+04 + -1.665228178000000e+04 + -1.667382196574960e+04 + -1.669538306946903e+04 + -1.671696510420377e+04 + -1.673856808645374e+04 + -1.676019203000000e+04 + -1.678183694695306e+04 + -1.680350285053965e+04 + -1.682518975366077e+04 + -1.684689766850574e+04 + -1.686862660999998e+04 + -1.689037659405139e+04 + -1.691214763326874e+04 + -1.693393974023558e+04 + -1.695575292860696e+04 + -1.697758720999999e+04 + -1.699944259677470e+04 + -1.702131910964586e+04 + -1.704321676352935e+04 + -1.706513556209216e+04 + -1.708707552000000e+04 + -1.710903665790321e+04 + -1.713101898938551e+04 + -1.715302252479822e+04 + -1.717504727292061e+04 + -1.719709325000000e+04 + -1.721916047545785e+04 + -1.724124896174670e+04 + -1.726335872072246e+04 + -1.728548976595536e+04 + -1.730764210999998e+04 + -1.732981576548871e+04 + -1.735201074834581e+04 + -1.737422707347338e+04 + -1.739646475299950e+04 + -1.741872379999999e+04 + -1.744100422776899e+04 + -1.746330604747148e+04 + -1.748562927386205e+04 + -1.750797392735042e+04 + -1.753034002000000e+04 + -1.755272756012299e+04 + -1.757513656385630e+04 + -1.759756704698003e+04 + -1.762001902165879e+04 + -1.764249250000000e+04 + -1.766498749503509e+04 + -1.768750402279969e+04 + -1.771004209797560e+04 + -1.773260173223158e+04 + -1.775518293999998e+04 + -1.777778573725219e+04 + -1.780041013823985e+04 + -1.782305615380817e+04 + -1.784572379125812e+04 + -1.786841306999998e+04 + -1.789112401297027e+04 + -1.791385662520795e+04 + -1.793661091551944e+04 + -1.795938690506571e+04 + -1.798218461000000e+04 + -1.800500404157250e+04 + -1.802784520726593e+04 + -1.805070812126097e+04 + -1.807359280836476e+04 + -1.809649928000000e+04 + -1.811942754077938e+04 + -1.814237760512274e+04 + -1.816534949154946e+04 + -1.818834322012563e+04 + -1.821135879999998e+04 + -1.823439623670011e+04 + -1.825745554979138e+04 + -1.828053675712656e+04 + -1.830363986886144e+04 + -1.832676489999998e+04 + -1.834991186721417e+04 + -1.837308077964562e+04 + -1.839627164834952e+04 + -1.841948449011883e+04 + -1.844271932000000e+04 + -1.846597615248214e+04 + -1.848925500551537e+04 + -1.851255589141731e+04 + -1.853587881367952e+04 + -1.855922379000000e+04 + -1.858259084403384e+04 + -1.860597998459446e+04 + -1.862939122130964e+04 + -1.865282457086503e+04 + -1.867628004999998e+04 + -1.869975767367864e+04 + -1.872325745125265e+04 + -1.874677939400045e+04 + -1.877032351829797e+04 + -1.879388983999998e+04 + -1.881747837395618e+04 + -1.884108913346766e+04 + -1.886472213066709e+04 + -1.888837737699991e+04 + -1.891205489000000e+04 + -1.893575468867888e+04 + -1.895947678210836e+04 + -1.898322118083019e+04 + -1.900698790146692e+04 + -1.903077696000000e+04 + -1.905458837122149e+04 + -1.907842214817702e+04 + -1.910227830328199e+04 + -1.912615684887913e+04 + -1.915005779999998e+04 + -1.917398117252360e+04 + -1.919792697876641e+04 + -1.922189523162585e+04 + -1.924588594641727e+04 + -1.926989913999998e+04 + -1.929393482787026e+04 + -1.931799301676958e+04 + -1.934207372057390e+04 + -1.936617696590223e+04 + -1.939030276000000e+04 + -1.941445110358184e+04 + -1.943862202401437e+04 + -1.946281554213054e+04 + -1.948703165938676e+04 + -1.951127038999998e+04 + -1.953553175531375e+04 + -1.955981576784185e+04 + -1.958412243887696e+04 + -1.960845178142548e+04 + -1.963280380999998e+04 + -1.965717854010317e+04 + -1.968157598764983e+04 + -1.970599616682758e+04 + -1.973043908928781e+04 + -1.975490477000000e+04 + -1.977939322508017e+04 + -1.980390446612710e+04 + -1.982843850672890e+04 + -1.985299536464853e+04 + -1.987757505000000e+04 + -1.990217757132781e+04 + -1.992680295149982e+04 + -1.995145120910892e+04 + -1.997612235106852e+04 + -2.000081638999998e+04 + -2.002553334291399e+04 + -2.005027322692212e+04 + -2.007503605456619e+04 + -2.009982183242756e+04 + -2.012463057999998e+04 + -2.014946232050470e+04 + -2.017431705750974e+04 + -2.019919480128925e+04 + -2.022409557869796e+04 + -2.024901940000000e+04 + -2.027396626876084e+04 + -2.029893620825063e+04 + -2.032392923791251e+04 + -2.034894536415857e+04 + -2.037398460000000e+04 + -2.039904696273123e+04 + -2.042413246681671e+04 + -2.044924112749899e+04 + -2.047437296177629e+04 + -2.049952797999998e+04 + -2.052470619105544e+04 + -2.054990761544010e+04 + -2.057513226917888e+04 + -2.060038015795331e+04 + -2.062565129999998e+04 + -2.065094571854568e+04 + -2.067626342205840e+04 + -2.070160442063917e+04 + -2.072696873225083e+04 + -2.075235637000000e+04 + -2.077776734528838e+04 + -2.080320167696219e+04 + -2.082865938214449e+04 + -2.085414047244347e+04 + -2.087964496000000e+04 + -2.090517285805777e+04 + -2.093072418166662e+04 + -2.095629894648643e+04 + -2.098189716820891e+04 + -2.100751885999998e+04 + -2.103316403410750e+04 + -2.105883270565323e+04 + -2.108452489048020e+04 + -2.111024060421226e+04 + -2.113597985999998e+04 + -2.116174267011207e+04 + -2.118752904964539e+04 + -2.121333901446366e+04 + -2.123917258027344e+04 + -2.126502976000000e+04 + -2.129091056582378e+04 + -2.131681501406569e+04 + -2.134274311932949e+04 + -2.136869489244911e+04 + -2.139467035000000e+04 + -2.142066951097057e+04 + -2.144669238829770e+04 + -2.147273899344209e+04 + -2.149880933837191e+04 + -2.152490343999998e+04 + -2.155102131698669e+04 + -2.157716298229367e+04 + -2.160332844744082e+04 + -2.162951772437019e+04 + -2.165573082999998e+04 + -2.168196778300156e+04 + -2.170822859627157e+04 + -2.173451328139519e+04 + -2.176082185053812e+04 + -2.178715432000000e+04 + -2.181351070821111e+04 + -2.183989103150391e+04 + -2.186629530288904e+04 + -2.189272353140778e+04 + -2.191917573000000e+04 + -2.194565191497987e+04 + -2.197215210512397e+04 + -2.199867631637375e+04 + -2.202522455969623e+04 + -2.205179684999998e+04 + -2.207839320363563e+04 + -2.210501363148952e+04 + -2.213165814783550e+04 + -2.215832677350680e+04 + -2.218501951999998e+04 + -2.221173639532642e+04 + -2.223847741910094e+04 + -2.226524260850044e+04 + -2.229203197306979e+04 + -2.231884553000000e+04 + -2.234568329890952e+04 + -2.237254528774074e+04 + -2.239943150806158e+04 + -2.242634198094407e+04 + -2.245327672000000e+04 + -2.248023573585785e+04 + -2.250721904853940e+04 + -2.253422667413636e+04 + -2.256125861967753e+04 + -2.258831489999998e+04 + -2.261539553480252e+04 + -2.264250054093014e+04 + -2.266962993052693e+04 + -2.269678371062339e+04 + -2.272396189999998e+04 + -2.275116452153000e+04 + -2.277839158301363e+04 + -2.280564309534358e+04 + -2.283291907950545e+04 + -2.286021955000000e+04 + -2.288754451771620e+04 + -2.291489399812011e+04 + -2.294226800704672e+04 + -2.296966655917324e+04 + -2.299708967000000e+04 + -2.302453735490683e+04 + -2.305200962641978e+04 + -2.307950649734620e+04 + -2.310702798236498e+04 + -2.313457409999998e+04 + -2.316214486856879e+04 + -2.318974029613145e+04 + -2.321736039447026e+04 + -2.324500518448656e+04 + -2.327267467999998e+04 + -2.330036889175501e+04 + -2.332808783850466e+04 + -2.335583153764027e+04 + -2.338360000121357e+04 + -2.341139324000000e+04 + -2.343921126672951e+04 + -2.346705410394532e+04 + -2.349492176951476e+04 + -2.352281427072812e+04 + -2.355073162000000e+04 + -2.357867383414989e+04 + -2.360664093193761e+04 + -2.363463292919098e+04 + -2.366264983684289e+04 + -2.369069166999998e+04 + -2.371875844507638e+04 + -2.374685017193912e+04 + -2.377496686591387e+04 + -2.380310855200050e+04 + -2.383127523999998e+04 + -2.385946693403709e+04 + -2.388768365690810e+04 + -2.391592542840760e+04 + -2.394419225713039e+04 + -2.397248416000000e+04 + -2.400080115691363e+04 + -2.402914325571854e+04 + -2.405751046800998e+04 + -2.408590281513924e+04 + -2.411432031000000e+04 + -2.414276296293371e+04 + -2.417123079796694e+04 + -2.419972383203242e+04 + -2.422824206706797e+04 + -2.425678551999998e+04 + -2.428535421485334e+04 + -2.431394816200073e+04 + -2.434256737430352e+04 + -2.437121187300517e+04 + -2.439988166999998e+04 + -2.442857677325164e+04 + -2.445729720103540e+04 + -2.448604297194451e+04 + -2.451481410082247e+04 + -2.454361060000000e+04 + -2.457243248182022e+04 + -2.460127976431730e+04 + -2.463015246522100e+04 + -2.465905059942621e+04 + -2.468797417999998e+04 + -2.471692321945616e+04 + -2.474589773222362e+04 + -2.477489773480251e+04 + -2.480392324581322e+04 + -2.483297427999998e+04 + -2.486205084917968e+04 + -2.489115296405446e+04 + -2.492028064024748e+04 + -2.494943390068509e+04 + -2.497861275999998e+04 + -2.500781722863925e+04 + -2.503704732334474e+04 + -2.506630305872901e+04 + -2.509558444448151e+04 + -2.512489150000000e+04 + -2.515422424757818e+04 + -2.518358269497819e+04 + -2.521296685328307e+04 + -2.524237674371633e+04 + -2.527181237999998e+04 + -2.530127377273551e+04 + -2.533076094162915e+04 + -2.536027390311031e+04 + -2.538981266594794e+04 + -2.541937724999998e+04 + -2.544896767801531e+04 + -2.547858395406606e+04 + -2.550822608802068e+04 + -2.553789410507042e+04 + -2.556758802000000e+04 + -2.559730784246711e+04 + -2.562705359189478e+04 + -2.565682528525429e+04 + -2.568662293247029e+04 + -2.571644655000000e+04 + -2.574629615713407e+04 + -2.577617176604459e+04 + -2.580607338891535e+04 + -2.583600104095400e+04 + -2.586595473999998e+04 + -2.589593450400127e+04 + -2.592594034522632e+04 + -2.595597227610649e+04 + -2.598603031176017e+04 + -2.601611446999998e+04 + -2.604622476879967e+04 + -2.607636122042706e+04 + -2.610652383730750e+04 + -2.613671263455693e+04 + -2.616692763000000e+04 + -2.619716884161440e+04 + -2.622743628160562e+04 + -2.625772996246335e+04 + -2.628804989951923e+04 + -2.631839611000000e+04 + -2.634876861165059e+04 + -2.637916741999917e+04 + -2.640959254907723e+04 + -2.644004401148305e+04 + -2.647052181999998e+04 + -2.650102598983489e+04 + -2.653155654491748e+04 + -2.656211350103963e+04 + -2.659269685960091e+04 + -2.662330663999998e+04 + -2.665394286925502e+04 + -2.668460555517195e+04 + -2.671529470758218e+04 + -2.674601034670874e+04 + -2.677675249000000e+04 + -2.680752115154265e+04 + -2.683831634157976e+04 + -2.686913807564717e+04 + -2.689998637786448e+04 + -2.693086126000000e+04 + -2.696176272916689e+04 + -2.699269080763921e+04 + -2.702364551500381e+04 + -2.705462686113689e+04 + -2.708563485999998e+04 + -2.711666952809900e+04 + -2.714773087942122e+04 + -2.717881892991400e+04 + -2.720993369901594e+04 + -2.724107519999998e+04 + -2.727224344400496e+04 + -2.730343845029767e+04 + -2.733466023562860e+04 + -2.736590881019403e+04 + -2.739718419000000e+04 + -2.742848639412166e+04 + -2.745981543741902e+04 + -2.749117133427855e+04 + -2.752255410001475e+04 + -2.755396375000000e+04 + -2.758540029934807e+04 + -2.761686376223195e+04 + -2.764835415476579e+04 + -2.767987149599797e+04 + -2.771141579999997e+04 + -2.774298707825893e+04 + -2.777458534547961e+04 + -2.780621061813955e+04 + -2.783786291408934e+04 + -2.786954224999998e+04 + -2.790124864062599e+04 + -2.793298209650868e+04 + -2.796474263269793e+04 + -2.799653027215609e+04 + -2.802834503000000e+04 + -2.806018691678819e+04 + -2.809205594694776e+04 + -2.812395213748840e+04 + -2.815587550739401e+04 + -2.818782607000000e+04 + -2.821980383662756e+04 + -2.825180882556652e+04 + -2.828384105454396e+04 + -2.831590053775406e+04 + -2.834798728999998e+04 + -2.838010132665882e+04 + -2.841224266303304e+04 + -2.844441131398464e+04 + -2.847660729395342e+04 + -2.850883061999998e+04 + -2.854108131015271e+04 + -2.857335937943549e+04 + -2.860566484233479e+04 + -2.863799771378746e+04 + -2.867035801000000e+04 + -2.870274574643904e+04 + -2.873516093256026e+04 + -2.876760358436649e+04 + -2.880007372909855e+04 + -2.883257138000000e+04 + -2.886509654365616e+04 + -2.889764923870952e+04 + -2.893022948372628e+04 + -2.896283729252707e+04 + -2.899547267999998e+04 + -2.902813566168059e+04 + -2.906082625190441e+04 + -2.909354446650575e+04 + -2.912629032389195e+04 + -2.915906383999998e+04 + -2.919186502919167e+04 + -2.922469390650106e+04 + -2.925755048733507e+04 + -2.929043478725063e+04 + -2.932334682000000e+04 + -2.935628660019129e+04 + -2.938925415043921e+04 + -2.942224948806936e+04 + -2.945527261979538e+04 + -2.948832356000000e+04 + -2.952140232838030e+04 + -2.955450894361826e+04 + -2.958764342089699e+04 + -2.962080577090842e+04 + -2.965399600999997e+04 + -2.968721415715336e+04 + -2.972046022629084e+04 + -2.975373423280592e+04 + -2.978703619592538e+04 + -2.982036612999997e+04 + -2.985372404652352e+04 + -2.988710995909819e+04 + -2.992052388535540e+04 + -2.995396584761164e+04 + -2.998743586000000e+04 + -3.002093393306212e+04 + -3.005446008516229e+04 + -3.008801433415196e+04 + -3.012159669410924e+04 + -3.015520717999998e+04 + -3.018884580728562e+04 + -3.022251259030155e+04 + -3.025620754490144e+04 + -3.028993068950620e+04 + -3.032368203999997e+04 + -3.035746161072607e+04 + -3.039126941699663e+04 + -3.042510547393189e+04 + -3.045896979612689e+04 + -3.049286239999998e+04 + -3.052678330335746e+04 + -3.056073252467363e+04 + -3.059471007984014e+04 + -3.062871598061521e+04 + -3.066275024000000e+04 + -3.069681287356475e+04 + -3.073090390293319e+04 + -3.076502334621974e+04 + -3.079917121404217e+04 + -3.083334751999997e+04 + -3.086755228023463e+04 + -3.090178551167921e+04 + -3.093604723225209e+04 + -3.097033746063074e+04 + -3.100465620999998e+04 + -3.103900349175437e+04 + -3.107337932446759e+04 + -3.110778372555016e+04 + -3.114221670819769e+04 + -3.117667828999997e+04 + -3.121116848957679e+04 + -3.124568731744623e+04 + -3.128023478769976e+04 + -3.131481092268889e+04 + -3.134941574000000e+04 + -3.138404925321087e+04 + -3.141871147408727e+04 + -3.145340241670125e+04 + -3.148812209933996e+04 + -3.152287053999997e+04 + -3.155764775577736e+04 + -3.159245376185456e+04 + -3.162728857279384e+04 + -3.166215220315186e+04 + -3.169704466999997e+04 + -3.173196599132658e+04 + -3.176691618227545e+04 + -3.180189525721778e+04 + -3.183690323068162e+04 + -3.187194012000000e+04 + -3.190700594323912e+04 + -3.194210071422084e+04 + -3.197722444868163e+04 + -3.201237716636405e+04 + -3.204755888000000e+04 + -3.208276960047787e+04 + -3.211800935023939e+04 + -3.215327814773632e+04 + -3.218857600158763e+04 + -3.222390292999997e+04 + -3.225925895535199e+04 + -3.229464408973093e+04 + -3.233005834462857e+04 + -3.236550173499735e+04 + -3.240097427999997e+04 + -3.243647600017841e+04 + -3.247200691143220e+04 + -3.250756702669824e+04 + -3.254315635678932e+04 + -3.257877492000000e+04 + -3.261442273792899e+04 + -3.265009982555360e+04 + -3.268580619650297e+04 + -3.272154186523808e+04 + -3.275730685000000e+04 + -3.279310116911321e+04 + -3.282892483177912e+04 + -3.286477785354587e+04 + -3.290066026202923e+04 + -3.293657206999998e+04 + -3.297251328378459e+04 + -3.300848392497173e+04 + -3.304448401407080e+04 + -3.308051356412061e+04 + -3.311657258999998e+04 + -3.315266110752813e+04 + -3.318877912993135e+04 + -3.322492667413289e+04 + -3.326110376297835e+04 + -3.329731041000000e+04 + -3.333354662539115e+04 + -3.336981243131684e+04 + -3.340610784669931e+04 + -3.344243288124504e+04 + -3.347878755000000e+04 + -3.351517187197135e+04 + -3.355158586607149e+04 + -3.358802954742114e+04 + -3.362450292603845e+04 + -3.366100601999997e+04 + -3.369753885113907e+04 + -3.373410143432544e+04 + -3.377069378324004e+04 + -3.380731591267414e+04 + -3.384396783999997e+04 + -3.388064958319757e+04 + -3.391736115628571e+04 + -3.395410257481684e+04 + -3.399087385786547e+04 + -3.402767502000000e+04 + -3.406450607498593e+04 + -3.410136704569621e+04 + -3.413825794940452e+04 + -3.417517879208190e+04 + -3.421212959000000e+04 + -3.424911036577375e+04 + -3.428612113814977e+04 + -3.432316192150666e+04 + -3.436023272579379e+04 + -3.439733356999998e+04 + -3.443446447621852e+04 + -3.447162545467578e+04 + -3.450881651888796e+04 + -3.454603769159935e+04 + -3.458328898999997e+04 + -3.462057042742187e+04 + -3.465788201822977e+04 + -3.469522377879945e+04 + -3.473259572783916e+04 + -3.476999788000000e+04 + -3.480743024920274e+04 + -3.484489285737491e+04 + -3.488238572274076e+04 + -3.491990885516477e+04 + -3.495746227000000e+04 + -3.499504598627476e+04 + -3.503266002163332e+04 + -3.507030439252002e+04 + -3.510797911399110e+04 + -3.514568419999997e+04 + -3.518341966538968e+04 + -3.522118553105182e+04 + -3.525898181605689e+04 + -3.529680853433678e+04 + -3.533466569999997e+04 + -3.537255332834070e+04 + -3.541047143775194e+04 + -3.544842004484196e+04 + -3.548639916273562e+04 + -3.552440881000000e+04 + -3.556244900769237e+04 + -3.560051977192599e+04 + -3.563862111528000e+04 + -3.567675304773126e+04 + -3.571491559000000e+04 + -3.575310876677514e+04 + -3.579133259025522e+04 + -3.582958707123636e+04 + -3.586787222387752e+04 + -3.590618806999997e+04 + -3.594453463328037e+04 + -3.598291192576281e+04 + -3.602131995866808e+04 + -3.605975874687618e+04 + -3.609822830999997e+04 + -3.613672866872384e+04 + -3.617525983663845e+04 + -3.621382182906358e+04 + -3.625241466608051e+04 + -3.629103836000000e+04 + -3.632969292147818e+04 + -3.636837837559645e+04 + -3.640709474306420e+04 + -3.644584203277781e+04 + -3.648462026000000e+04 + -3.652342944409004e+04 + -3.656226960170399e+04 + -3.660114075023598e+04 + -3.664004290875195e+04 + -3.667897608999997e+04 + -3.671794030512006e+04 + -3.675693557547587e+04 + -3.679596192058374e+04 + -3.683501935339895e+04 + -3.687410788999997e+04 + -3.691322754870546e+04 + -3.695237834723054e+04 + -3.699156030212950e+04 + -3.703077342834224e+04 + -3.707001774000000e+04 + -3.710929325203417e+04 + -3.714859998429457e+04 + -3.718793795692067e+04 + -3.722730718808447e+04 + -3.726670768999997e+04 + -3.730613947399677e+04 + -3.734560256273038e+04 + -3.738509697431393e+04 + -3.742462271654350e+04 + -3.746417980999997e+04 + -3.750376828013417e+04 + -3.754338813660564e+04 + -3.758303939267375e+04 + -3.762272207245150e+04 + -3.766243618999997e+04 + -3.770218175518502e+04 + -3.774195878945678e+04 + -3.778176731257176e+04 + -3.782160733741773e+04 + -3.786147888000000e+04 + -3.790138195864309e+04 + -3.794131659132003e+04 + -3.798128279431332e+04 + -3.802128058166662e+04 + -3.806130996999997e+04 + -3.810137097737330e+04 + -3.814146362046005e+04 + -3.818158791697343e+04 + -3.822174388615621e+04 + -3.826193153999997e+04 + -3.830215088938532e+04 + -3.834240195971708e+04 + -3.838268477130731e+04 + -3.842299933188884e+04 + -3.846334565999997e+04 + -3.850372377842891e+04 + -3.854413369633216e+04 + -3.858457542816681e+04 + -3.862504900090371e+04 + -3.866555443000000e+04 + -3.870609172486966e+04 + -3.874666090332934e+04 + -3.878726198409722e+04 + -3.882789498399841e+04 + -3.886855991999997e+04 + -3.890925680946781e+04 + -3.894998567054054e+04 + -3.899074651957592e+04 + -3.903153937021765e+04 + -3.907236423999997e+04 + -3.911322114736439e+04 + -3.915411010384250e+04 + -3.919503112747372e+04 + -3.923598424716172e+04 + -3.927696946999997e+04 + -3.931798680038228e+04 + -3.935903628964794e+04 + -3.940011793259103e+04 + -3.944123164809230e+04 + -3.948237770000000e+04 + -3.952355620675491e+04 + -3.956476584662273e+04 + -3.960600801403134e+04 + -3.964728735507886e+04 + -3.968859104999997e+04 + 1.819886919039960e+01 + 1.816405130921966e+01 + 1.812918280091599e+01 + 1.809426424653407e+01 + 1.805929622711938e+01 + 1.802427932371738e+01 + 1.798921411737356e+01 + 1.795410118913339e+01 + 1.791894112004234e+01 + 1.788373449114589e+01 + 1.784848188348950e+01 + 1.781318387811866e+01 + 1.777784105607885e+01 + 1.774245399841551e+01 + 1.770702328617416e+01 + 1.767154950040025e+01 + 1.763603322213927e+01 + 1.760047503243666e+01 + 1.756487551233793e+01 + 1.752923524288855e+01 + 1.749355480513398e+01 + 1.745783478011969e+01 + 1.742207574889119e+01 + 1.738627829249391e+01 + 1.735044299197335e+01 + 1.731457042837498e+01 + 1.727866118274428e+01 + 1.724271583612671e+01 + 1.720673496956776e+01 + 1.717071916411290e+01 + 1.713466900080759e+01 + 1.709858506069732e+01 + 1.706246792482757e+01 + 1.702631817424381e+01 + 1.699013638999150e+01 + 1.695392315311613e+01 + 1.691767904466317e+01 + 1.688140464567809e+01 + 1.684510053720637e+01 + 1.680876730029348e+01 + 1.677240551598491e+01 + 1.673601576532611e+01 + 1.669959862936258e+01 + 1.666315468913977e+01 + 1.662668452570318e+01 + 1.659018872009826e+01 + 1.655366785337049e+01 + 1.651712250656536e+01 + 1.648055326072833e+01 + 1.644396069690488e+01 + 1.640734539614049e+01 + 1.637070793948063e+01 + 1.633404890797076e+01 + 1.629736888265638e+01 + 1.626066844458294e+01 + 1.622394817479593e+01 + 1.618720865434082e+01 + 1.615045046426309e+01 + 1.611367418560821e+01 + 1.607688039942165e+01 + 1.604006968674890e+01 + 1.600324262863542e+01 + 1.596639980612668e+01 + 1.592954180026817e+01 + 1.589266919210536e+01 + 1.585578256268371e+01 + 1.581888249304872e+01 + 1.578196956424585e+01 + 1.574504435732057e+01 + 1.570810745331836e+01 + 1.567115943328470e+01 + 1.563420087826506e+01 + 1.559723236930490e+01 + 1.556025448744972e+01 + 1.552326781374499e+01 + 1.548627292923617e+01 + 1.544927041496875e+01 + 1.541226085198818e+01 + 1.537524482133997e+01 + 1.533822290406956e+01 + 1.530119568122245e+01 + 1.526416373384410e+01 + 1.522712764298000e+01 + 1.519008798967561e+01 + 1.515304535497640e+01 + 1.511600031992786e+01 + 1.507895346557546e+01 + 1.504190537296467e+01 + 1.500485662314096e+01 + 1.496780779714983e+01 + 1.493075947603672e+01 + 1.489371224084713e+01 + 1.485666667262652e+01 + 1.481962335242037e+01 + 1.478258286127416e+01 + 1.474554578023335e+01 + 1.470851269034343e+01 + 1.467148417264987e+01 + 1.463446080819813e+01 + 1.459744317803371e+01 + 1.456043186320207e+01 + 1.452342744474869e+01 + 1.448643050371903e+01 + 1.444944162115858e+01 + 1.441246137811282e+01 + 1.437549035562720e+01 + 1.433852913474722e+01 + 1.430157829651834e+01 + 1.426463842198604e+01 + 1.422771009219579e+01 + 1.419079388819307e+01 + 1.415389039102334e+01 + 1.411700018173210e+01 + 1.408012384136481e+01 + 1.404326195096694e+01 + 1.400641509158398e+01 + 1.396958384426139e+01 + 1.393276879004464e+01 + 1.389597050997923e+01 + 1.385918958511061e+01 + 1.382242659648426e+01 + 1.378568212514566e+01 + 1.374895675214029e+01 + 1.371225105851361e+01 + 1.367556562531110e+01 + 1.363890103357824e+01 + 1.360225786436050e+01 + 1.356563669870335e+01 + 1.352903811765228e+01 + 1.349246270225274e+01 + 1.345591103355023e+01 + 1.341938369259021e+01 + 1.338288126041816e+01 + 1.334640431807955e+01 + 1.330995344661985e+01 + 1.327352922708455e+01 + 1.323713224051912e+01 + 1.320076306796902e+01 + 1.316442229047974e+01 + 1.312811048909675e+01 + 1.309182824486553e+01 + 1.305557613883154e+01 + 1.301935475204027e+01 + 1.298316466553718e+01 + 1.294700646036776e+01 + 1.291088071757748e+01 + 1.287478801821181e+01 + 1.283872894331622e+01 + 1.280270407393619e+01 + 1.276671399111720e+01 + 1.273075927590472e+01 + 1.269484050934423e+01 + 1.265895827248119e+01 + 1.262311314636109e+01 + 1.258730571202939e+01 + 1.255153655053158e+01 + 1.251580624291313e+01 + 1.248011537021950e+01 + 1.244446451349619e+01 + 1.240885425378865e+01 + 1.237328517214237e+01 + 1.233775784960283e+01 + 1.230227286721548e+01 + 1.226683080602582e+01 + 1.223143224707931e+01 + 1.219607777142142e+01 + 1.216076796009764e+01 + 1.212550339415344e+01 + 1.209028465463429e+01 + 1.205511232258567e+01 + 1.201998697905305e+01 + 1.198490920508190e+01 + 1.194987958171770e+01 + 1.191489869000593e+01 + 1.187996711099206e+01 + 1.184508542572157e+01 + 1.181025421523992e+01 + 1.177547406059259e+01 + 1.174074554282507e+01 + 1.170606924298281e+01 + 1.167144574211130e+01 + 1.163687562125602e+01 + 1.160235946146243e+01 + 1.156789784377601e+01 + 1.153349134924223e+01 + 1.149914055890657e+01 + 1.146484605381452e+01 + 1.143060841501152e+01 + 1.139642822354308e+01 + 1.136230606045464e+01 + 1.132824250679170e+01 + 1.129423814359974e+01 + 1.126029355192421e+01 + 1.122640931281059e+01 + 1.119258600730437e+01 + 1.115882421645102e+01 + 1.112512452129600e+01 + 1.109148750288479e+01 + 1.105791374226288e+01 + 1.102440382047573e+01 + 1.099095831856882e+01 + 1.095757781758762e+01 + 1.092426289857761e+01 + 1.089101414258426e+01 + 1.085783213065305e+01 + 1.082471744382945e+01 + 1.079167066315892e+01 + 1.075869236968697e+01 + 1.072578314445905e+01 + 1.069294356852064e+01 + 1.066017422291721e+01 + 1.062747568869424e+01 + 1.059484854689720e+01 + 1.056229337857157e+01 + 1.052981076476282e+01 + 1.049740128651643e+01 + 1.046506552487787e+01 + 1.043280406089261e+01 + 1.040061747560614e+01 + 1.036850635006392e+01 + 1.033647126531143e+01 + 1.030451280239414e+01 + 1.027263154235754e+01 + 1.024082806624708e+01 + 1.020910295510825e+01 + 1.017745678998653e+01 + 1.014589015192738e+01 + 1.011440362197629e+01 + 1.008299778117872e+01 + 1.005167321058014e+01 + 1.002043049122605e+01 + 9.989270204161905e+00 + 9.958192930433185e+00 + 9.927199251085362e+00 + 9.896289747163912e+00 + 9.865464999714312e+00 + 9.834725589782032e+00 + 9.804072098412551e+00 + 9.773505106651340e+00 + 9.743025195543877e+00 + 9.712632946135633e+00 + 9.682328939472086e+00 + 9.652113756598707e+00 + 9.621987978560973e+00 + 9.591952186404358e+00 + 9.562006961174337e+00 + 9.532152883916382e+00 + 9.502390535675973e+00 + 9.472720497498580e+00 + 9.443143350429677e+00 + 9.413659675514742e+00 + 9.384270053799249e+00 + 9.354975066328668e+00 + 9.325775294148480e+00 + 9.296671318304156e+00 + 9.267663719841170e+00 + 9.238753079804999e+00 + 9.209939979241115e+00 + 9.181224999194994e+00 + 9.152608720712111e+00 + 9.124091724837941e+00 + 9.095674592617954e+00 + 9.067357905097630e+00 + 9.039142243322441e+00 + 9.011028188337864e+00 + 8.983016292445305e+00 + 8.955106689123129e+00 + 8.927299195109086e+00 + 8.899593619314148e+00 + 8.871989770649284e+00 + 8.844487458025464e+00 + 8.817086490353660e+00 + 8.789786676544839e+00 + 8.762587825509975e+00 + 8.735489746160036e+00 + 8.708492247405990e+00 + 8.681595138158814e+00 + 8.654798227329470e+00 + 8.628101323828931e+00 + 8.601504236568170e+00 + 8.575006774458155e+00 + 8.548608746409855e+00 + 8.522309961334242e+00 + 8.496110228142285e+00 + 8.470009355744955e+00 + 8.444007153053219e+00 + 8.418103428978053e+00 + 8.392297992430423e+00 + 8.366590652321301e+00 + 8.340981217561657e+00 + 8.315469497062459e+00 + 8.290055299734679e+00 + 8.264738434489287e+00 + 8.239518710237252e+00 + 8.214395935889545e+00 + 8.189369920357137e+00 + 8.164440472550996e+00 + 8.139607401382095e+00 + 8.114870515761401e+00 + 8.090229624599887e+00 + 8.065684536808520e+00 + 8.041235061298275e+00 + 8.016881006980118e+00 + 7.992622182765018e+00 + 7.968458397563950e+00 + 7.944389460287880e+00 + 7.920415179847782e+00 + 7.896535365154623e+00 + 7.872749825119373e+00 + 7.849058368653004e+00 + 7.825460804666484e+00 + 7.801956942070785e+00 + 7.778546589776878e+00 + 7.755229556695729e+00 + 7.732005651738313e+00 + 7.708874683815599e+00 + 7.685836461838553e+00 + 7.662890794718152e+00 + 7.640037491365358e+00 + 7.617276360691148e+00 + 7.594607211606489e+00 + 7.572029853022352e+00 + 7.549544093849708e+00 + 7.527149742999527e+00 + 7.504846609382777e+00 + 7.482634501910429e+00 + 7.460513229493455e+00 + 7.438482601042820e+00 + 7.416542425469502e+00 + 7.394692511684465e+00 + 7.372932668598682e+00 + 7.351262705123121e+00 + 7.329682430168755e+00 + 7.308191652646553e+00 + 7.286790181467484e+00 + 7.265477825542517e+00 + 7.244254393782626e+00 + 7.223119695098779e+00 + 7.202073538401945e+00 + 7.181115732603097e+00 + 7.160246086613204e+00 + 7.139464409343233e+00 + 7.118770509704159e+00 + 7.098164196606950e+00 + 7.077645278962576e+00 + 7.057213565682006e+00 + 7.036868865676214e+00 + 7.016610987856166e+00 + 6.996439741132834e+00 + 6.976354934417186e+00 + 6.956356376620197e+00 + 6.936443876652832e+00 + 6.916617243426063e+00 + 6.896876285850862e+00 + 6.877220812838198e+00 + 6.857650633299039e+00 + 6.838165556144358e+00 + 6.818765390285123e+00 + 6.799449944632306e+00 + 6.780219028096876e+00 + 6.761072449589803e+00 + 6.742010018022058e+00 + 6.723031542304612e+00 + 6.704136831348434e+00 + 6.685325694064492e+00 + 6.666597939363759e+00 + 6.647953376157203e+00 + 6.629391813355797e+00 + 6.610913059870509e+00 + 6.592516924612310e+00 + 6.574203216492170e+00 + 6.555971744421058e+00 + 6.537822317309946e+00 + 6.519754744069803e+00 + 6.501768833611600e+00 + 6.483864394846306e+00 + 6.466041236684891e+00 + 6.448299168038327e+00 + 6.430637997817582e+00 + 6.413057534933630e+00 + 6.395557588297437e+00 + 6.378137966819973e+00 + 6.360798479412210e+00 + 6.343538934985117e+00 + 6.326359142449666e+00 + 6.309258910716826e+00 + 6.292238048697567e+00 + 6.275296365302859e+00 + 6.258433669443673e+00 + 6.241649770030978e+00 + 6.224944475975745e+00 + 6.208317596188945e+00 + 6.191768939581546e+00 + 6.175298315064517e+00 + 6.158905531548833e+00 + 6.142590397945462e+00 + 6.126352723165372e+00 + 6.110192316119535e+00 + 6.094108985718921e+00 + 6.078102540874499e+00 + 6.062172790497243e+00 + 6.046319543498117e+00 + 6.030542608788095e+00 + 6.014841795278149e+00 + 5.999216911879244e+00 + 5.983667767502356e+00 + 5.968194171058448e+00 + 5.952795931458497e+00 + 5.937472857613470e+00 + 5.922224758434336e+00 + 5.907051442832068e+00 + 5.891952719717633e+00 + 5.876928398002004e+00 + 5.861978286596150e+00 + 5.847102194411042e+00 + 5.832299930357648e+00 + 5.817571303346941e+00 + 5.802916122289888e+00 + 5.788334196097460e+00 + 5.773825333680629e+00 + 5.759389343950365e+00 + 5.745026035817635e+00 + 5.730735218193414e+00 + 5.716516699988668e+00 + 5.702370290114368e+00 + 5.688295797481486e+00 + 5.674293031000990e+00 + 5.660361799583851e+00 + 5.646501912141039e+00 + 5.632713177583526e+00 + 5.618995404822279e+00 + 5.605348402768269e+00 + 5.591771980332467e+00 + 5.578265946425844e+00 + 5.564830109959368e+00 + 5.551464279844009e+00 + 5.538168264990741e+00 + 5.524941874310529e+00 + 5.511784916714348e+00 + 5.498697201113163e+00 + 5.485678536417949e+00 + 5.472728731539672e+00 + 5.459847595389306e+00 + 5.447031950668924e+00 + 5.434258417587328e+00 + 5.421509378931341e+00 + 5.408790202589383e+00 + 5.396101725502927e+00 + 5.383442552149385e+00 + 5.370812984345576e+00 + 5.358213038980171e+00 + 5.345642546622406e+00 + 5.333101463094469e+00 + 5.320589727671893e+00 + 5.308107264570896e+00 + 5.295654006874094e+00 + 5.283229887334054e+00 + 5.270834837715376e+00 + 5.258468789944041e+00 + 5.246131676000384e+00 + 5.233823428164784e+00 + 5.221543979540164e+00 + 5.209293263422158e+00 + 5.197071212820756e+00 + 5.184877759775030e+00 + 5.172712837552656e+00 + 5.160576380473933e+00 + 5.148468322098453e+00 + 5.136388595958436e+00 + 5.124337135726472e+00 + 5.112313875048248e+00 + 5.100318748362747e+00 + 5.088351690727316e+00 + 5.076412636057685e+00 + 5.064501518839616e+00 + 5.052618274474592e+00 + 5.040762837425790e+00 + 5.028935142799786e+00 + 5.017135126690616e+00 + 5.005362723409764e+00 + 4.993617868159293e+00 + 4.981900498164465e+00 + 4.970210548621045e+00 + 4.958547954855285e+00 + 4.946912653797631e+00 + 4.935304581602165e+00 + 4.923723674430540e+00 + 4.912169869219803e+00 + 4.900643102722201e+00 + 4.889143311682699e+00 + 4.877670433140317e+00 + 4.866224404407401e+00 + 4.854805162838305e+00 + 4.843412645620055e+00 + 4.832046790470948e+00 + 4.820707535433044e+00 + 4.809394818449872e+00 + 4.798108577205163e+00 + 4.786848749644187e+00 + 4.775615274885523e+00 + 4.764408091170769e+00 + 4.753227136475494e+00 + 4.742072350593207e+00 + 4.730943672320340e+00 + 4.719841039761676e+00 + 4.708764392793848e+00 + 4.697713670947889e+00 + 4.686688813308958e+00 + 4.675689760077749e+00 + 4.664716450776882e+00 + 4.653768824355144e+00 + 4.642846821849820e+00 + 4.631950383864691e+00 + 4.621079449911801e+00 + 4.610233960271208e+00 + 4.599413855814052e+00 + 4.588619077726644e+00 + 4.577849566594633e+00 + 4.567105263324451e+00 + 4.556386109499332e+00 + 4.545692045920192e+00 + 4.535023013830533e+00 + 4.524378955558838e+00 + 4.513759812087895e+00 + 4.503165524982657e+00 + 4.492596037765430e+00 + 4.482051291649467e+00 + 4.471531227881555e+00 + 4.461035790191556e+00 + 4.450564920902143e+00 + 4.440118561957067e+00 + 4.429696656605228e+00 + 4.419299148008472e+00 + 4.408925979093191e+00 + 4.398577092681390e+00 + 4.388252432408600e+00 + 4.377951941955149e+00 + 4.367675563647617e+00 + 4.357423241911437e+00 + 4.347194921954801e+00 + 4.336990545878941e+00 + 4.326810057907454e+00 + 4.316653403787664e+00 + 4.306520526395858e+00 + 4.296411370095723e+00 + 4.286325880845187e+00 + 4.276264002847886e+00 + 4.266225680614548e+00 + 4.256210859410026e+00 + 4.246219484255977e+00 + 4.236251500111860e+00 + 4.226306852214246e+00 + 4.216385487075638e+00 + 4.206487350454588e+00 + 4.196612386873075e+00 + 4.186760542346591e+00 + 4.176931763412669e+00 + 4.167125996517556e+00 + 4.157343187931778e+00 + 4.147583283659849e+00 + 4.137846229598449e+00 + 4.128131973158434e+00 + 4.118440461620333e+00 + 4.108771640965568e+00 + 4.099125458381889e+00 + 4.089501861348100e+00 + 4.079900796648449e+00 + 4.070322211621146e+00 + 4.060766054068578e+00 + 4.051232271987449e+00 + 4.041720812903752e+00 + 4.032231624389123e+00 + 4.022764654839604e+00 + 4.013319852102482e+00 + 4.003897163974346e+00 + 3.994496539375360e+00 + 3.985117927005318e+00 + 3.975761275162846e+00 + 3.966426531955261e+00 + 3.957113646635731e+00 + 3.947822569087183e+00 + 3.938553247905866e+00 + 3.929305631685672e+00 + 3.920079669524097e+00 + 3.910875311427285e+00 + 3.901692507178291e+00 + 3.892531206204140e+00 + 3.883391358396833e+00 + 3.874272913657344e+00 + 3.865175821793835e+00 + 3.856100032879644e+00 + 3.847045497225832e+00 + 3.838012165320722e+00 + 3.828999987558789e+00 + 3.820008914413926e+00 + 3.811038896595444e+00 + 3.802089885254187e+00 + 3.793161831237620e+00 + 3.784254684890362e+00 + 3.775368398252875e+00 + 3.766502923100440e+00 + 3.757658209579520e+00 + 3.748834209295840e+00 + 3.740030874433959e+00 + 3.731248156753105e+00 + 3.722486008117639e+00 + 3.713744380387517e+00 + 3.705023225280349e+00 + 3.696322495070079e+00 + 3.687642142318910e+00 + 3.678982119432947e+00 + 3.670342378801804e+00 + 3.661722872867589e+00 + 3.653123554235752e+00 + 3.644544376023881e+00 + 3.635985291634798e+00 + 3.627446254192749e+00 + 3.618927216218316e+00 + 3.610428130335504e+00 + 3.601948951051534e+00 + 3.593489632231203e+00 + 3.585050126838500e+00 + 3.576630388153148e+00 + 3.568230370457688e+00 + 3.559850028500160e+00 + 3.551489315016799e+00 + 3.543148183918080e+00 + 3.534826590807976e+00 + 3.526524489935861e+00 + 3.518241835011243e+00 + 3.509978579991082e+00 + 3.501734680809670e+00 + 3.493510092697708e+00 + 3.485304769188242e+00 + 3.477118665289576e+00 + 3.468951736765370e+00 + 3.460803939385451e+00 + 3.452675227557384e+00 + 3.444565556219660e+00 + 3.436474882078371e+00 + 3.428403160505571e+00 + 3.420350346590145e+00 + 3.412316396304707e+00 + 3.404301265792477e+00 + 3.396304911176187e+00 + 3.388327288491305e+00 + 3.380368354160161e+00 + 3.372428064623584e+00 + 3.364506375833607e+00 + 3.356603244211646e+00 + 3.348718626640740e+00 + 3.340852480236101e+00 + 3.333004761693424e+00 + 3.325175427644580e+00 + 3.317364435527293e+00 + 3.309571742493616e+00 + 3.301797305408617e+00 + 3.294041081414062e+00 + 3.286303028194412e+00 + 3.278583103726798e+00 + 3.270881265443555e+00 + 3.263197471011956e+00 + 3.255531678390248e+00 + 3.247883845209004e+00 + 3.240253929642225e+00 + 3.232641890347850e+00 + 3.225047684908113e+00 + 3.217471271425511e+00 + 3.209912608923088e+00 + 3.202371655667555e+00 + 3.194848370181972e+00 + 3.187342711658790e+00 + 3.179854638881827e+00 + 3.172384110380890e+00 + 3.164931084707051e+00 + 3.157495521384956e+00 + 3.150077380058776e+00 + 3.142676619877814e+00 + 3.135293200073600e+00 + 3.127927079946843e+00 + 3.120578218905895e+00 + 3.113246577218404e+00 + 3.105932114937815e+00 + 3.098634790846833e+00 + 3.091354565058342e+00 + 3.084091398271724e+00 + 3.076845250485478e+00 + 3.069616081755534e+00 + 3.062403852244847e+00 + 3.055208522175611e+00 + 3.048030052549899e+00 + 3.040868404439169e+00 + 3.033723537524932e+00 + 3.026595412527113e+00 + 3.019483991059011e+00 + 3.012389234177664e+00 + 3.005311102428361e+00 + 2.998249556405217e+00 + 2.991204558170310e+00 + 2.984176069441633e+00 + 2.977164051262350e+00 + 2.970168464749357e+00 + 2.963189271462946e+00 + 2.956226433370632e+00 + 2.949279912203107e+00 + 2.942349669912605e+00 + 2.935435668735732e+00 + 2.928537870478263e+00 + 2.921656236941307e+00 + 2.914790730227295e+00 + 2.907941313056430e+00 + 2.901107948114753e+00 + 2.894290597705669e+00 + 2.887489224186201e+00 + 2.880703790004707e+00 + 2.873934257778331e+00 + 2.867180590721052e+00 + 2.860442752157053e+00 + 2.853720705060128e+00 + 2.847014412004529e+00 + 2.840323835735203e+00 + 2.833648939802342e+00 + 2.826989688360529e+00 + 2.820346045051714e+00 + 2.813717971838249e+00 + 2.807105432809830e+00 + 2.800508392739872e+00 + 2.793926814285955e+00 + 2.787360661385112e+00 + 2.780809898806732e+00 + 2.774274490318202e+00 + 2.767754399418414e+00 + 2.761249589980850e+00 + 2.754760027276096e+00 + 2.748285675987487e+00 + 2.741826499952791e+00 + 2.735382462817888e+00 + 2.728953529693038e+00 + 2.722539666591989e+00 + 2.716140837199994e+00 + 2.709757005928732e+00 + 2.703388138477217e+00 + 2.697034199719776e+00 + 2.690695154612969e+00 + 2.684370968516638e+00 + 2.678061606722120e+00 + 2.671767034388748e+00 + 2.665487216663756e+00 + 2.659222119420964e+00 + 2.652971708466898e+00 + 2.646735949170681e+00 + 2.640514807328682e+00 + 2.634308248813400e+00 + 2.628116239351709e+00 + 2.621938745026414e+00 + 2.615775731978081e+00 + 2.609627166192403e+00 + 2.603493014125890e+00 + 2.597373242133807e+00 + 2.591267815972944e+00 + 2.585176702619338e+00 + 2.579099869106871e+00 + 2.573037281022092e+00 + 2.566988905295047e+00 + 2.560954709471109e+00 + 2.554934660124372e+00 + 2.548928723658388e+00 + 2.542936866838776e+00 + 2.536959057454498e+00 + 2.530995262744329e+00 + 2.525045449466102e+00 + 2.519109584724339e+00 + 2.513187636248425e+00 + 2.507279571988880e+00 + 2.501385358975255e+00 + 2.495504964649074e+00 + 2.489638357011514e+00 + 2.483785503877440e+00 + 2.477946372993181e+00 + 2.472120932153270e+00 + 2.466309149445497e+00 + 2.460510993028623e+00 + 2.454726431004756e+00 + 2.448955431279121e+00 + 2.443197962222979e+00 + 2.437453992749473e+00 + 2.431723490873920e+00 + 2.426006424702946e+00 + 2.420302763016215e+00 + 2.414612474849150e+00 + 2.408935529060812e+00 + 2.403271894158963e+00 + 2.397621539164549e+00 + 2.391984432987164e+00 + 2.386360544006294e+00 + 2.380749841635097e+00 + 2.375152295549876e+00 + 2.369567874852914e+00 + 2.363996548806182e+00 + 2.358438286639424e+00 + 2.352893057314327e+00 + 2.347360830870365e+00 + 2.341841577523073e+00 + 2.336335266205249e+00 + 2.330841866367291e+00 + 2.325361348038680e+00 + 2.319893681430557e+00 + 2.314438836350213e+00 + 2.308996782525400e+00 + 2.303567490482044e+00 + 2.298150930506590e+00 + 2.292747072570897e+00 + 2.287355886755380e+00 + 2.281977343203661e+00 + 2.276611412298537e+00 + 2.271258065216148e+00 + 2.265917272602903e+00 + 2.260589004572198e+00 + 2.255273232290290e+00 + 2.249969926489583e+00 + 2.244679057245269e+00 + 2.239400595715412e+00 + 2.234134513404378e+00 + 2.228880781619142e+00 + 2.223639370658599e+00 + 2.218410251587366e+00 + 2.213193396784469e+00 + 2.207988776668006e+00 + 2.202796362022329e+00 + 2.197616125439223e+00 + 2.192448038696543e+00 + 2.187292072961057e+00 + 2.182148199232985e+00 + 2.177016389630072e+00 + 2.171896616273634e+00 + 2.166788850281173e+00 + 2.161693063906081e+00 + 2.156609229682959e+00 + 2.151537319229026e+00 + 2.146477304323076e+00 + 2.141429157241363e+00 + 2.136392850965788e+00 + 2.131368357474257e+00 + 2.126355648357996e+00 + 2.121354696293322e+00 + 2.116365474412895e+00 + 2.111387955644702e+00 + 2.106422111701483e+00 + 2.101467915161587e+00 + 2.096525339256323e+00 + 2.091594356269759e+00 + 2.086674939419586e+00 + 2.081767062556874e+00 + 2.076870697792070e+00 + 2.071985817585338e+00 + 2.067112395385072e+00 + 2.062250405333861e+00 + 2.057399820685575e+00 + 2.052560613690088e+00 + 2.047732757766644e+00 + 2.042916226752948e+00 + 2.038110994473384e+00 + 2.033317034456518e+00 + 2.028534320143143e+00 + 2.023762825026766e+00 + 2.019002522786289e+00 + 2.014253387371010e+00 + 2.009515392980107e+00 + 2.004788513366984e+00 + 2.000072722331970e+00 + 1.995367994084281e+00 + 1.990674302528751e+00 + 1.985991621875054e+00 + 1.981319927135009e+00 + 1.976659192144684e+00 + 1.972009390577169e+00 + 1.967370497271926e+00 + 1.962742487042732e+00 + 1.958125334423246e+00 + 1.953519013586483e+00 + 1.948923499307053e+00 + 1.944338766657414e+00 + 1.939764790288013e+00 + 1.935201544608222e+00 + 1.930649004305472e+00 + 1.926107145248571e+00 + 1.921575942429786e+00 + 1.917055370205972e+00 + 1.912545403920843e+00 + 1.908046018818900e+00 + 1.903557190023903e+00 + 1.899078893306255e+00 + 1.894611103753838e+00 + 1.890153795996532e+00 + 1.885706946418488e+00 + 1.881270530851602e+00 + 1.876844524133795e+00 + 1.872428902057808e+00 + 1.868023640555410e+00 + 1.863628715350075e+00 + 1.859244102235784e+00 + 1.854869776995271e+00 + 1.850505715382929e+00 + 1.846151893336109e+00 + 1.841808287113597e+00 + 1.837474873250078e+00 + 1.833151627500553e+00 + 1.828838525627810e+00 + 1.824535544058799e+00 + 1.820242659570220e+00 + 1.815959848693184e+00 + 1.811687087278560e+00 + 1.807424351697017e+00 + 1.803171618832717e+00 + 1.798928865872756e+00 + 1.794696068965575e+00 + 1.790473204047284e+00 + 1.786260248130819e+00 + 1.782057178544553e+00 + 1.777863972462110e+00 + 1.773680606381003e+00 + 1.769507057021776e+00 + 1.765343301422396e+00 + 1.761189316819223e+00 + 1.757045080431908e+00 + 1.752910569457795e+00 + 1.748785761158555e+00 + 1.744670632638435e+00 + 1.740565161064786e+00 + 1.736469324420783e+00 + 1.732383100261040e+00 + 1.728306465595185e+00 + 1.724239397824929e+00 + 1.720181874717039e+00 + 1.716133874165168e+00 + 1.712095373335323e+00 + 1.708066350172305e+00 + 1.704046783495335e+00 + 1.700036650108550e+00 + 1.696035927584721e+00 + 1.692044595228792e+00 + 1.688062630443701e+00 + 1.684090010658294e+00 + 1.680126714513943e+00 + 1.676172720475745e+00 + 1.672228006742128e+00 + 1.668292551293985e+00 + 1.664366332353613e+00 + 1.660449328407859e+00 + 1.656541518177628e+00 + 1.652642880144113e+00 + 1.648753392536404e+00 + 1.644873033459887e+00 + 1.641001782122826e+00 + 1.637139617814172e+00 + 1.633286518510287e+00 + 1.629442462986198e+00 + 1.625607430332010e+00 + 1.621781398816242e+00 + 1.617964347766720e+00 + 1.614156256896447e+00 + 1.610357104501046e+00 + 1.606566869528149e+00 + 1.602785531410984e+00 + 1.599013068753329e+00 + 1.595249460964023e+00 + 1.591494688099418e+00 + 1.587748729316499e+00 + 1.584011563661260e+00 + 1.580283170366302e+00 + 1.576563528988570e+00 + 1.572852618951484e+00 + 1.569150419635379e+00 + 1.565456911345500e+00 + 1.561772073862832e+00 + 1.558095886092752e+00 + 1.554428327545355e+00 + 1.550769378486889e+00 + 1.547119019605569e+00 + 1.543477229774924e+00 + 1.539843988467248e+00 + 1.536219276909035e+00 + 1.532603074921508e+00 + 1.528995362108325e+00 + 1.525396118748853e+00 + 1.521805324624735e+00 + 1.518222960029189e+00 + 1.514649006474386e+00 + 1.511083443428444e+00 + 1.507526250258141e+00 + 1.503977408416516e+00 + 1.500436898413773e+00 + 1.496904700394939e+00 + 1.493380795245864e+00 + 1.489865163193006e+00 + 1.486357784560608e+00 + 1.482858641108495e+00 + 1.479367713055452e+00 + 1.475884980161266e+00 + 1.472410424507970e+00 + 1.468944026943859e+00 + 1.465485767394345e+00 + 1.462035627142284e+00 + 1.458593587684006e+00 + 1.455159630175685e+00 + 1.451733734815932e+00 + 1.448315882934573e+00 + 1.444906056735074e+00 + 1.441504236540235e+00 + 1.438110403156542e+00 + 1.434724538391589e+00 + 1.431346623689521e+00 + 1.427976640530080e+00 + 1.424614570482120e+00 + 1.421260394583763e+00 + 1.417914094214416e+00 + 1.414575651360096e+00 + 1.411245047472556e+00 + 1.407922264020345e+00 + 1.404607282835409e+00 + 1.401300085863839e+00 + 1.398000654669480e+00 + 1.394708970355802e+00 + 1.391425015768138e+00 + 1.388148773421020e+00 + 1.384880223867722e+00 + 1.381619349200565e+00 + 1.378366132070768e+00 + 1.375120554406545e+00 + 1.371882598139520e+00 + 1.368652245409923e+00 + 1.365429478679455e+00 + 1.362214280063096e+00 + 1.359006631544336e+00 + 1.355806515436745e+00 + 1.352613914349998e+00 + 1.349428810943258e+00 + 1.346251187518860e+00 + 1.343081026346772e+00 + 1.339918309785753e+00 + 1.336763020411036e+00 + 1.333615141050152e+00 + 1.330474654669161e+00 + 1.327341544046787e+00 + 1.324215791384803e+00 + 1.321097378844990e+00 + 1.317986290481943e+00 + 1.314882509034005e+00 + 1.311786015892630e+00 + 1.308696795174431e+00 + 1.305614830505543e+00 + 1.302540104058677e+00 + 1.299472598550161e+00 + 1.296412297281467e+00 + 1.293359183920592e+00 + 1.290313241355424e+00 + 1.287274452437336e+00 + 1.284242800425524e+00 + 1.281218268758570e+00 + 1.278200840971845e+00 + 1.275190500607243e+00 + 1.272187230813499e+00 + 1.269191014801793e+00 + 1.266201836184906e+00 + 1.263219678244913e+00 + 1.260244524601725e+00 + 1.257276359774731e+00 + 1.254315166659556e+00 + 1.251360928048363e+00 + 1.248413628680403e+00 + 1.245473252809453e+00 + 1.242539783866816e+00 + 1.239613204552696e+00 + 1.236693499248504e+00 + 1.233780652886690e+00 + 1.230874648458874e+00 + 1.227975469917747e+00 + 1.225083101914005e+00 + 1.222197528080320e+00 + 1.219318732110022e+00 + 1.216446698153004e+00 + 1.213581411119631e+00 + 1.210722855169846e+00 + 1.207871013783067e+00 + 1.205025871252235e+00 + 1.202187412198626e+00 + 1.199355621285526e+00 + 1.196530482820713e+00 + 1.193711981112556e+00 + 1.190900100540550e+00 + 1.188094825240966e+00 + 1.185296139829988e+00 + 1.182504029475636e+00 + 1.179718478336080e+00 + 1.176939470878376e+00 + 1.174166992368249e+00 + 1.171401026812090e+00 + 1.168641558834780e+00 + 1.165888574598542e+00 + 1.163142057955574e+00 + 1.160401992993886e+00 + 1.157668365957760e+00 + 1.154941161055026e+00 + 1.152220362585152e+00 + 1.149505957086653e+00 + 1.146797929075238e+00 + 1.144096262593592e+00 + 1.141400943461258e+00 + 1.138711957183691e+00 + 1.136029288721929e+00 + 1.133352922646698e+00 + 1.130682844729473e+00 + 1.128019040871752e+00 + 1.125361495026299e+00 + 1.122710192813904e+00 + 1.120065120718956e+00 + 1.117426263156838e+00 + 1.114793605478939e+00 + 1.112167133798269e+00 + 1.109546832911627e+00 + 1.106932688501257e+00 + 1.104324686965964e+00 + 1.101722813149718e+00 + 1.099127052563592e+00 + 1.096537391606932e+00 + 1.093953815681381e+00 + 1.091376310184498e+00 + 1.088804860939953e+00 + 1.086239454210304e+00 + 1.083680075729654e+00 + 1.081126710640132e+00 + 1.078579345517792e+00 + 1.076037966489376e+00 + 1.073502558540405e+00 + 1.070973108232868e+00 + 1.068449602380304e+00 + 1.065932027008114e+00 + 1.063420367175204e+00 + 1.060914608734753e+00 + 1.058414739347230e+00 + 1.055920744292059e+00 + 1.053432609053344e+00 + 1.050950321750202e+00 + 1.048473868029229e+00 + 1.046003233045439e+00 + 1.043538404185668e+00 + 1.041079368203120e+00 + 1.038626111099421e+00 + 1.036178618557632e+00 + 1.033736877638818e+00 + 1.031300875738098e+00 + 1.028870598541307e+00 + 1.026446032279889e+00 + 1.024027163804816e+00 + 1.021613979927458e+00 + 1.019206467749757e+00 + 1.016804614201984e+00 + 1.014408404816817e+00 + 1.012017826403038e+00 + 1.009632866898133e+00 + 1.007253512894913e+00 + 1.004879750675442e+00 + 1.002511566831996e+00 + 1.000148949144661e+00 + 9.977918847145494e-01 + 9.954403597206510e-01 + 9.930943614528360e-01 + 9.907538771638876e-01 + 9.884188936740620e-01 + 9.860893982148410e-01 + 9.837653780132122e-01 + 9.814468200970017e-01 + 9.791337116433633e-01 + 9.768260399168340e-01 + 9.745237922184445e-01 + 9.722269558574113e-01 + 9.699355181124353e-01 + 9.676494662336389e-01 + 9.653687876978898e-01 + 9.630934699744002e-01 + 9.608235003289306e-01 + 9.585588662885656e-01 + 9.562995554410040e-01 + 9.540455551859868e-01 + 9.517968530931009e-01 + 9.495534368089285e-01 + 9.473152938858177e-01 + 9.450824119343849e-01 + 9.428547786515334e-01 + 9.406323818265262e-01 + 9.384152091378831e-01 + 9.362032482272097e-01 + 9.339964869112888e-01 + 9.317949130473703e-01 + 9.295985145023118e-01 + 9.274072791539573e-01 + 9.252211948367504e-01 + 9.230402494034374e-01 + 9.208644309329761e-01 + 9.186937274260252e-01 + 9.165281267878318e-01 + 9.143676170947915e-01 + 9.122121864230248e-01 + 9.100618228160294e-01 + 9.079165144228375e-01 + 9.057762494101416e-01 + 9.036410159434681e-01 + 9.015108022852656e-01 + 8.993855966397851e-01 + 8.972653871281971e-01 + 8.951501621417270e-01 + 8.930399100640233e-01 + 8.909346191274636e-01 + 8.888342777366450e-01 + 8.867388743114113e-01 + 8.846483971822027e-01 + 8.825628348501290e-01 + 8.804821758633001e-01 + 8.784064086961259e-01 + 8.763355218399448e-01 + 8.742695038377348e-01 + 8.722083433110044e-01 + 8.701520288632569e-01 + 8.681005490981059e-01 + 8.660538926659707e-01 + 8.640120483003465e-01 + 8.619750047630993e-01 + 8.599427507590320e-01 + 8.579152750196485e-01 + 8.558925663402844e-01 + 8.538746136199826e-01 + 8.518614056598554e-01 + 8.498529312415619e-01 + 8.478491793952468e-01 + 8.458501390477595e-01 + 8.438557990450950e-01 + 8.418661484572341e-01 + 8.398811762963594e-01 + 8.379008715007146e-01 + 8.359252231704962e-01 + 8.339542204095658e-01 + 8.319878522912720e-01 + 8.300261079597043e-01 + 8.280689765769632e-01 + 8.261164473121154e-01 + 8.241685093974929e-01 + 8.222251520716921e-01 + 8.202863645582569e-01 + 8.183521361157176e-01 + 8.164224560764958e-01 + 8.144973138478017e-01 + 8.125766987264839e-01 + 8.106606000443977e-01 + 8.087490072689457e-01 + 8.068419098143643e-01 + 8.049392971238847e-01 + 8.030411587461223e-01 + 8.011474841608780e-01 + 7.992582628576694e-01 + 7.973734844327619e-01 + 7.954931384582111e-01 + 7.936172145055983e-01 + 7.917457022017643e-01 + 7.898785912282000e-01 + 7.880158712799969e-01 + 7.861575320154112e-01 + 7.843035631939634e-01 + 7.824539546080472e-01 + 7.806086959262468e-01 + 7.787677769423338e-01 + 7.769311875560446e-01 + 7.750989176225404e-01 + 7.732709569908990e-01 + 7.714472955211897e-01 + 7.696279231052234e-01 + 7.678128297211314e-01 + 7.660020053954494e-01 + 7.641954400346342e-01 + 7.623931236302374e-01 + 7.605950462809293e-01 + 7.588011979868697e-01 + 7.570115688113509e-01 + 7.552261489288551e-01 + 7.534449284973839e-01 + 7.516678976340316e-01 + 7.498950464317325e-01 + 7.481263651057625e-01 + 7.463618439154999e-01 + 7.446014731170009e-01 + 7.428452429690515e-01 + 7.410931437272748e-01 + 7.393451656574506e-01 + 7.376012991597445e-01 + 7.358615346418724e-01 + 7.341258624174279e-01 + 7.323942728636854e-01 + 7.306667564033948e-01 + 7.289433034811010e-01 + 7.272239046205010e-01 + 7.255085503342084e-01 + 7.237972310231134e-01 + 7.220899372662432e-01 + 7.203866596915919e-01 + 7.186873887451811e-01 + 7.169921150530395e-01 + 7.153008293485266e-01 + 7.136135222426403e-01 + 7.119301843519804e-01 + 7.102508063464710e-01 + 7.085753789925818e-01 + 7.069038930034782e-01 + 7.052363390742027e-01 + 7.035727080638011e-01 + 7.019129907750439e-01 + 7.002571779481277e-01 + 6.986052604437083e-01 + 6.969572291357313e-01 + 6.953130748988353e-01 + 6.936727887020229e-01 + 6.920363614522840e-01 + 6.904037839913317e-01 + 6.887750473773369e-01 + 6.871501426160253e-01 + 6.855290605871678e-01 + 6.839117924040222e-01 + 6.822983292013320e-01 + 6.806886620123715e-01 + 6.790827818618205e-01 + 6.774806798407976e-01 + 6.758823471448717e-01 + 6.742877749381793e-01 + 6.726969543916550e-01 + 6.711098767181217e-01 + 6.695265330883416e-01 + 6.679469147191758e-01 + 6.663710129607012e-01 + 6.647988190816884e-01 + 6.632303243195694e-01 + 6.616655199754741e-01 + 6.601043974442724e-01 + 6.585469481315596e-01 + 6.569931633409668e-01 + 6.554430344698831e-01 + 6.538965529680326e-01 + 6.523537102216029e-01 + 6.508144977390269e-01 + 6.492789070902356e-01 + 6.477469297088367e-01 + 6.462185570471877e-01 + 6.446937806333431e-01 + 6.431725921186934e-01 + 6.416549831028872e-01 + 6.401409451291091e-01 + 6.386304698205402e-01 + 6.371235488250266e-01 + 6.356201737964903e-01 + 6.341203364004929e-01 + 6.326240283504814e-01 + 6.311312414023209e-01 + 6.296419672600960e-01 + 6.281561976359686e-01 + 6.266739242956670e-01 + 6.251951391194286e-01 + 6.237198339322255e-01 + 6.222480004492102e-01 + 6.207796305731890e-01 + 6.193147162378443e-01 + 6.178532493027741e-01 + 6.163952216645050e-01 + 6.149406252489860e-01 + 6.134894519984210e-01 + 6.120416938491114e-01 + 6.105973427932988e-01 + 6.091563909278429e-01 + 6.077188302116784e-01 + 6.062846526061169e-01 + 6.048538502614210e-01 + 6.034264152733694e-01 + 6.020023397068369e-01 + 6.005816156757759e-01 + 5.991642353027361e-01 + 5.977501907311656e-01 + 5.963394741611191e-01 + 5.949320777981851e-01 + 5.935279938331314e-01 + 5.921272144271874e-01 + 5.907297318514260e-01 + 5.893355384452119e-01 + 5.879446264415406e-01 + 5.865569881004723e-01 + 5.851726157460215e-01 + 5.837915017610071e-01 + 5.824136384878618e-01 + 5.810390182425506e-01 + 5.796676334763571e-01 + 5.782994765837256e-01 + 5.769345398883866e-01 + 5.755728159164172e-01 + 5.742142971757567e-01 + 5.728589760824728e-01 + 5.715068451452269e-01 + 5.701578968814059e-01 + 5.688121237820786e-01 + 5.674695184134964e-01 + 5.661300733449661e-01 + 5.647937811172017e-01 + 5.634606343850478e-01 + 5.621306258016221e-01 + 5.608037479323033e-01 + 5.594799934047830e-01 + 5.581593548937616e-01 + 5.568418251014721e-01 + 5.555273967809645e-01 + 5.542160626584934e-01 + 5.529078153599613e-01 + 5.516026476869607e-01 + 5.503005524879265e-01 + 5.490015224489507e-01 + 5.477055503706971e-01 + 5.464126291394721e-01 + 5.451227516109934e-01 + 5.438359105997491e-01 + 5.425520989229732e-01 + 5.412713094911021e-01 + 5.399935352390902e-01 + 5.387187691034094e-01 + 5.374470040087604e-01 + 5.361782329113639e-01 + 5.349124487848638e-01 + 5.336496445514358e-01 + 5.323898132502169e-01 + 5.311329480044003e-01 + 5.298790417206248e-01 + 5.286280874266170e-01 + 5.273800783238198e-01 + 5.261350074387794e-01 + 5.248928678300107e-01 + 5.236536526638225e-01 + 5.224173550711992e-01 + 5.211839681868924e-01 + 5.199534851768893e-01 + 5.187258992380968e-01 + 5.175012035574781e-01 + 5.162793913049719e-01 + 5.150604557657682e-01 + 5.138443902158373e-01 + 5.126311878387027e-01 + 5.114208419243966e-01 + 5.102133457996210e-01 + 5.090086927559088e-01 + 5.078068761246483e-01 + 5.066078892445277e-01 + 5.054117254264059e-01 + 5.042183780707232e-01 + 5.030278406156905e-01 + 5.018401064512819e-01 + 5.006551689399448e-01 + 4.994730214827681e-01 + 4.982936576173500e-01 + 4.971170708196209e-01 + 4.959432545161117e-01 + 4.947722021784954e-01 + 4.936039073158257e-01 + 4.924383634713059e-01 + 4.912755642215030e-01 + 4.901155031029966e-01 + 4.889581736357913e-01 + 4.878035694426762e-01 + 4.866516841617155e-01 + 4.855025114095978e-01 + 4.843560447562852e-01 + 4.832122778219742e-01 + 4.820712043014287e-01 + 4.809328179063641e-01 + 4.797971123302187e-01 + 4.786640812406847e-01 + 4.775337183184862e-01 + 4.764060173050261e-01 + 4.752809720122764e-01 + 4.741585762111217e-01 + 4.730388236459319e-01 + 4.719217080626099e-01 + 4.708072233097221e-01 + 4.696953632391141e-01 + 4.685861216425942e-01 + 4.674794923970907e-01 + 4.663754693817960e-01 + 4.652740464091041e-01 + 4.641752174102053e-01 + 4.630789763262008e-01 + 4.619853169869301e-01 + 4.608942333544824e-01 + 4.598057194461572e-01 + 4.587197692038988e-01 + 4.576363766028796e-01 + 4.565555356433393e-01 + 4.554772403132010e-01 + 4.544014845983438e-01 + 4.533282625263808e-01 + 4.522575682421708e-01 + 4.511893957834002e-01 + 4.501237391381080e-01 + 4.490605924783677e-01 + 4.479999499003729e-01 + 4.469418054464263e-01 + 4.458861533467765e-01 + 4.448329877503518e-01 + 4.437823027182840e-01 + 4.427340924804984e-01 + 4.416883512661691e-01 + 4.406450732493647e-01 + 4.396042525949710e-01 + 4.385658835318161e-01 + 4.375299603591805e-01 + 4.364964773180230e-01 + 4.354654286529535e-01 + 4.344368086449737e-01 + 4.334106115882546e-01 + 4.323868317973252e-01 + 4.313654636098987e-01 + 4.303465013528135e-01 + 4.293299393608014e-01 + 4.283157719943348e-01 + 4.273039936389254e-01 + 4.262945986862648e-01 + 4.252875815207442e-01 + 4.242829365388910e-01 + 4.232806581737543e-01 + 4.222807409163533e-01 + 4.212831792180283e-01 + 4.202879675160039e-01 + 4.192951002821390e-01 + 4.183045720190468e-01 + 4.173163772308877e-01 + 4.163305103895081e-01 + 4.153469660738844e-01 + 4.143657388899517e-01 + 4.133868232899575e-01 + 4.124102138463511e-01 + 4.114359052122226e-01 + 4.104638919136763e-01 + 4.094941685453110e-01 + 4.085267297797091e-01 + 4.075615702608746e-01 + 4.065986846247451e-01 + 4.056380675149961e-01 + 4.046797136100241e-01 + 4.037236175791848e-01 + 4.027697740867438e-01 + 4.018181778668817e-01 + 4.008688236537185e-01 + 3.999217061664900e-01 + 3.989768201804763e-01 + 3.980341604347806e-01 + 3.970937216243767e-01 + 3.961554986257766e-01 + 3.952194862561716e-01 + 3.942856791749246e-01 + 3.933540722797152e-01 + 3.924246604937682e-01 + 3.914974386057962e-01 + 3.905724013991230e-01 + 3.896495437210211e-01 + 3.887288605266558e-01 + 3.878103467384126e-01 + 3.868939972364765e-01 + 3.859798068708922e-01 + 3.850677705778728e-01 + 3.841578833358520e-01 + 3.832501400994028e-01 + 3.823445358203205e-01 + 3.814410654593080e-01 + 3.805397240004402e-01 + 3.796405064500310e-01 + 3.787434078281850e-01 + 3.778484231550217e-01 + 3.769555474293507e-01 + 3.760647756653435e-01 + 3.751761029803938e-01 + 3.742895244689736e-01 + 3.734050351897463e-01 + 3.725226302131253e-01 + 3.716423046174657e-01 + 3.707640535037849e-01 + 3.698878720450124e-01 + 3.690137553825144e-01 + 3.681416986254492e-01 + 3.672716969834960e-01 + 3.664037456169829e-01 + 3.655378396196581e-01 + 3.646739742353085e-01 + 3.638121447254376e-01 + 3.629523462980791e-01 + 3.620945741078652e-01 + 3.612388233782960e-01 + 3.603850894480597e-01 + 3.595333675652969e-01 + 3.586836529581271e-01 + 3.578359408972814e-01 + 3.569902267099870e-01 + 3.561465057284826e-01 + 3.553047732480240e-01 + 3.544650245489661e-01 + 3.536272549462773e-01 + 3.527914598373741e-01 + 3.519576346281267e-01 + 3.511257746893044e-01 + 3.502958753213151e-01 + 3.494679319027064e-01 + 3.486419398734283e-01 + 3.478178946841421e-01 + 3.469957917542031e-01 + 3.461756264906874e-01 + 3.453573943334770e-01 + 3.445410907466465e-01 + 3.437267112053919e-01 + 3.429142511753236e-01 + 3.421037061357636e-01 + 3.412950715914754e-01 + 3.404883430871680e-01 + 3.396835161220511e-01 + 3.388805861778083e-01 + 3.380795488742585e-01 + 3.372803997559251e-01 + 3.364831342820857e-01 + 3.356877480644493e-01 + 3.348942367473924e-01 + 3.341025959445759e-01 + 3.333128211902062e-01 + 3.325249080644813e-01 + 3.317388522349806e-01 + 3.309546493345364e-01 + 3.301722950123494e-01 + 3.293917849546400e-01 + 3.286131147929292e-01 + 3.278362801760134e-01 + 3.270612768173198e-01 + 3.262881004205997e-01 + 3.255167466776044e-01 + 3.247472112772871e-01 + 3.239794899591130e-01 + 3.232135784952971e-01 + 3.224494726613195e-01 + 3.216871681318617e-01 + 3.209266606147330e-01 + 3.201679460077643e-01 + 3.194110200806869e-01 + 3.186558785671545e-01 + 3.179025173467112e-01 + 3.171509322207308e-01 + 3.164011189537259e-01 + 3.156530734030461e-01 + 3.149067914068442e-01 + 3.141622688005587e-01 + 3.134195014964591e-01 + 3.126784853846941e-01 + 3.119392163234083e-01 + 3.112016901727622e-01 + 3.104659028247113e-01 + 3.097318502149898e-01 + 3.089995283319454e-01 + 3.082689330721005e-01 + 3.075400602663161e-01 + 3.068129059444455e-01 + 3.060874661234649e-01 + 3.053637367362504e-01 + 3.046417137079979e-01 + 3.039213930418579e-01 + 3.032027708160949e-01 + 3.024858429572295e-01 + 3.017706054435225e-01 + 3.010570543910775e-01 + 3.003451858060657e-01 + 2.996349956970866e-01 + 2.989264801519126e-01 + 2.982196352437723e-01 + 2.975144570351090e-01 + 2.968109415899733e-01 + 2.961090850010212e-01 + 2.954088833712375e-01 + 2.947103327960572e-01 + 2.940134293733013e-01 + 2.933181692489545e-01 + 2.926245486550200e-01 + 2.919325636534309e-01 + 2.912422103009782e-01 + 2.905534849067459e-01 + 2.898663836341845e-01 + 2.891809025716850e-01 + 2.884970379499296e-01 + 2.878147859946116e-01 + 2.871341429080666e-01 + 2.864551048929091e-01 + 2.857776681836698e-01 + 2.851018290276999e-01 + 2.844275836247271e-01 + 2.837549281975342e-01 + 2.830838590248334e-01 + 2.824143724756855e-01 + 2.817464648036653e-01 + 2.810801321714598e-01 + 2.804153709678348e-01 + 2.797521775256636e-01 + 2.790905480675208e-01 + 2.784304789557904e-01 + 2.777719665515425e-01 + 2.771150071618110e-01 + 2.764595971293084e-01 + 2.758057328280932e-01 + 2.751534106502780e-01 + 2.745026269461392e-01 + 2.738533780697315e-01 + 2.732056604090851e-01 + 2.725594703611444e-01 + 2.719148043516682e-01 + 2.712716588414341e-01 + 2.706300302048149e-01 + 2.699899148252890e-01 + 2.693513091897057e-01 + 2.687142097803046e-01 + 2.680786130525787e-01 + 2.674445154290628e-01 + 2.668119133864937e-01 + 2.661808034370396e-01 + 2.655511820876730e-01 + 2.649230457933240e-01 + 2.642963910212357e-01 + 2.636712143601993e-01 + 2.630475123173707e-01 + 2.624252813696634e-01 + 2.618045181320832e-01 + 2.611852191534089e-01 + 2.605673809346502e-01 + 2.599510000768786e-01 + 2.593360731482656e-01 + 2.587225966857610e-01 + 2.581105673020023e-01 + 2.574999816218594e-01 + 2.568908362541323e-01 + 2.562831277681717e-01 + 2.556768527608984e-01 + 2.550720078808991e-01 + 2.544685898158210e-01 + 2.538665952029344e-01 + 2.532660206235198e-01 + 2.526668627769018e-01 + 2.520691183671673e-01 + 2.514727840477828e-01 + 2.508778564832650e-01 + 2.502843323450471e-01 + 2.496922083184503e-01 + 2.491014811741685e-01 + 2.485121476502302e-01 + 2.479242043768022e-01 + 2.473376480750936e-01 + 2.467524755330193e-01 + 2.461686835577825e-01 + 2.455862688342147e-01 + 2.450052280577099e-01 + 2.444255580815592e-01 + 2.438472556710649e-01 + 2.432703175621061e-01 + 2.426947405763887e-01 + 2.421205215374063e-01 + 2.415476572469543e-01 + 2.409761444715131e-01 + 2.404059800179439e-01 + 2.398371607406130e-01 + 2.392696835287547e-01 + 2.387035451998669e-01 + 2.381387425460481e-01 + 2.375752724876774e-01 + 2.370131319015487e-01 + 2.364523176042576e-01 + 2.358928264341899e-01 + 2.353346553264918e-01 + 2.347778012643444e-01 + 2.342222610470114e-01 + 2.336680315481888e-01 + 2.331151097630285e-01 + 2.325634926002070e-01 + 2.320131769932555e-01 + 2.314641599195968e-01 + 2.309164382391606e-01 + 2.303700088852327e-01 + 2.298248689205450e-01 + 2.292810152383314e-01 + 2.287384447851956e-01 + 2.281971546639490e-01 + 2.276571417710518e-01 + 2.271184030444375e-01 + 2.265809356255705e-01 + 2.260447364485637e-01 + 2.255098024678978e-01 + 2.249761308577043e-01 + 2.244437185775247e-01 + 2.239125625576918e-01 + 2.233826599324974e-01 + 2.228540078061592e-01 + 2.223266032159731e-01 + 2.218004431318401e-01 + 2.212755246546400e-01 + 2.207518449320089e-01 + 2.202294009962271e-01 + 2.197081899542086e-01 + 2.191882089472320e-01 + 2.186694550184439e-01 + 2.181519252528444e-01 + 2.176356167922184e-01 + 2.171205268020538e-01 + 2.166066524055817e-01 + 2.160939907132310e-01 + 2.155825389406823e-01 + 2.150722942170351e-01 + 2.145632535999474e-01 + 2.140554143128364e-01 + 2.135487735713488e-01 + 2.130433285376680e-01 + 2.125390763961598e-01 + 2.120360143225986e-01 + 2.115341394866721e-01 + 2.110334491301104e-01 + 2.105339404911263e-01 + 2.100356107692428e-01 + 2.095384571593845e-01 + 2.090424768875718e-01 + 2.085476672286868e-01 + 2.080540254649787e-01 + 2.075615488420417e-01 + 2.070702345483775e-01 + 2.065800798220710e-01 + 2.060910819584345e-01 + 2.056032383022174e-01 + 2.051165461242101e-01 + 2.046310026800104e-01 + 2.041466052775261e-01 + 2.036633511978056e-01 + 2.031812377402102e-01 + 2.027002622847228e-01 + 2.022204221329609e-01 + 2.017417145657832e-01 + 2.012641369577989e-01 + 2.007876866366623e-01 + 2.003123609141739e-01 + 1.998381571847571e-01 + 1.993650728223044e-01 + 1.988931051658790e-01 + 1.984222515391579e-01 + 1.979525093566432e-01 + 1.974838760798574e-01 + 1.970163490394448e-01 + 1.965499255924087e-01 + 1.960846031634822e-01 + 1.956203792216227e-01 + 1.951572511456189e-01 + 1.946952162469976e-01 + 1.942342720345011e-01 + 1.937744160087473e-01 + 1.933156455855021e-01 + 1.928579581617409e-01 + 1.924013511601302e-01 + 1.919458220512063e-01 + 1.914913683490730e-01 + 1.910379875218400e-01 + 1.905856769690048e-01 + 1.901344342343178e-01 + 1.896842568245793e-01 + 1.892351421122624e-01 + 1.887870876905098e-01 + 1.883400911382459e-01 + 1.878941498265747e-01 + 1.874492612709913e-01 + 1.870054230608876e-01 + 1.865626327533365e-01 + 1.861208878413260e-01 + 1.856801858136446e-01 + 1.852405242290795e-01 + 1.848019006561455e-01 + 1.843643126785636e-01 + 1.839277579090688e-01 + 1.834922338318696e-01 + 1.830577379260484e-01 + 1.826242679175190e-01 + 1.821918214082343e-01 + 1.817603959062191e-01 + 1.813299890419420e-01 + 1.809005984096844e-01 + 1.804722215715290e-01 + 1.800448561676805e-01 + 1.796184998471616e-01 + 1.791931502428031e-01 + 1.787688049585256e-01 + 1.783454616010165e-01 + 1.779231178061076e-01 + 1.775017712916434e-01 + 1.770814197185338e-01 + 1.766620606643876e-01 + 1.762436917707559e-01 + 1.758263107475443e-01 + 1.754099153420786e-01 + 1.749945031691721e-01 + 1.745800718793870e-01 + 1.741666192327871e-01 + 1.737541428912765e-01 + 1.733426405128906e-01 + 1.729321098263452e-01 + 1.725225486037993e-01 + 1.721139545737653e-01 + 1.717063253659770e-01 + 1.712996586978482e-01 + 1.708939523524782e-01 + 1.704892041326627e-01 + 1.700854117308264e-01 + 1.696825728315613e-01 + 1.692806852413719e-01 + 1.688797467224855e-01 + 1.684797550119726e-01 + 1.680807078836749e-01 + 1.676826031516292e-01 + 1.672854386236076e-01 + 1.668892120257625e-01 + 1.664939211364053e-01 + 1.660995637803862e-01 + 1.657061377653481e-01 + 1.653136408872399e-01 + 1.649220709518862e-01 + 1.645314258210089e-01 + 1.641417032838678e-01 + 1.637529010922642e-01 + 1.633650171697226e-01 + 1.629780493848234e-01 + 1.625919955117979e-01 + 1.622068533722165e-01 + 1.618226208359533e-01 + 1.614392958070308e-01 + 1.610568761629498e-01 + 1.606753597398519e-01 + 1.602947443525945e-01 + 1.599150279328092e-01 + 1.595362083976419e-01 + 1.591582835876941e-01 + 1.587812513806259e-01 + 1.584051096895935e-01 + 1.580298564486488e-01 + 1.576554895336735e-01 + 1.572820068494865e-01 + 1.569094063844064e-01 + 1.565376859935812e-01 + 1.561668435389086e-01 + 1.557968770322644e-01 + 1.554277844430587e-01 + 1.550595637013555e-01 + 1.546922127252644e-01 + 1.543257294352004e-01 + 1.539601117962810e-01 + 1.535953578647676e-01 + 1.532314655336160e-01 + 1.528684326732572e-01 + 1.525062574192351e-01 + 1.521449377506904e-01 + 1.517844715391133e-01 + 1.514248568043021e-01 + 1.510660915767141e-01 + 1.507081738546517e-01 + 1.503511015850067e-01 + 1.499948728018673e-01 + 1.496394855976185e-01 + 1.492849379312514e-01 + 1.489312277844460e-01 + 1.485783532079666e-01 + 1.482263122946834e-01 + 1.478751030581660e-01 + 1.475247234388987e-01 + 1.471751715323068e-01 + 1.468264454469171e-01 + 1.464785432366154e-01 + 1.461314629165984e-01 + 1.457852025452889e-01 + 1.454397602433564e-01 + 1.450951340257908e-01 + 1.447513219420110e-01 + 1.444083221508569e-01 + 1.440661327109938e-01 + 1.437247516822454e-01 + 1.433841772072484e-01 + 1.430444073901374e-01 + 1.427054403077353e-01 + 1.423672740371242e-01 + 1.420299067307786e-01 + 1.416933365389871e-01 + 1.413575615237460e-01 + 1.410225798197031e-01 + 1.406883895901710e-01 + 1.403549889435149e-01 + 1.400223760032770e-01 + 1.396905489310608e-01 + 1.393595059398338e-01 + 1.390292451224472e-01 + 1.386997645496112e-01 + 1.383710625136722e-01 + 1.380431371824567e-01 + 1.377159866326167e-01 + 1.373896091055998e-01 + 1.370640027752214e-01 + 1.367391657592925e-01 + 1.364150963290927e-01 + 1.360917926783734e-01 + 1.357692529162330e-01 + 1.354474752994454e-01 + 1.351264580487222e-01 + 1.348061993122180e-01 + 1.344866973181728e-01 + 1.341679503229942e-01 + 1.338499565682958e-01 + 1.335327142013654e-01 + 1.332162214320106e-01 + 1.329004765902875e-01 + 1.325854779258548e-01 + 1.322712236439755e-01 + 1.319577119415115e-01 + 1.316449410589970e-01 + 1.313329092858229e-01 + 1.310216149439378e-01 + 1.307110562100912e-01 + 1.304012313067827e-01 + 1.300921386594473e-01 + 1.297837764741680e-01 + 1.294761429396481e-01 + 1.291692364743583e-01 + 1.288630553353233e-01 + 1.285575977268189e-01 + 1.282528620001082e-01 + 1.279488464604472e-01 + 1.276455493846629e-01 + 1.273429690961771e-01 + 1.270411039265308e-01 + 1.267399521912149e-01 + 1.264395121606617e-01 + 1.261397821624623e-01 + 1.258407605612416e-01 + 1.255424456647032e-01 + 1.252448358003494e-01 + 1.249479293256652e-01 + 1.246517245985584e-01 + 1.243562199440227e-01 + 1.240614136699035e-01 + 1.237673041530004e-01 + 1.234738897833225e-01 + 1.231811689369122e-01 + 1.228891399541342e-01 + 1.225978011897444e-01 + 1.223071510285007e-01 + 1.220171878485729e-01 + 1.217279100221359e-01 + 1.214393159216827e-01 + 1.211514039479249e-01 + 1.208641725134118e-01 + 1.205776200272462e-01 + 1.202917448643591e-01 + 1.200065453999493e-01 + 1.197220200388544e-01 + 1.194381672203820e-01 + 1.191549853738593e-01 + 1.188724728867774e-01 + 1.185906281982059e-01 + 1.183094497403516e-01 + 1.180289358802264e-01 + 1.177490851172322e-01 + 1.174698959467804e-01 + 1.171913666738082e-01 + 1.169134957966049e-01 + 1.166362818664215e-01 + 1.163597231976005e-01 + 1.160838182295854e-01 + 1.158085654926154e-01 + 1.155339634301463e-01 + 1.152600105152270e-01 + 1.149867052503320e-01 + 1.147140461081585e-01 + 1.144420315115333e-01 + 1.141706598827868e-01 + 1.138999297876022e-01 + 1.136298397724347e-01 + 1.133603883121320e-01 + 1.130915738073908e-01 + 1.128233947404400e-01 + 1.125558496925181e-01 + 1.122889371862514e-01 + 1.120226557224089e-01 + 1.117570037925019e-01 + 1.114919798574519e-01 + 1.112275824488763e-01 + 1.109638101830490e-01 + 1.107006615250319e-01 + 1.104381349837027e-01 + 1.101762291935612e-01 + 1.099149425817940e-01 + 1.096542736337556e-01 + 1.093942210611990e-01 + 1.091347833750166e-01 + 1.088759590309823e-01 + 1.086177465849946e-01 + 1.083601446468375e-01 + 1.081031518187680e-01 + 1.078467666394599e-01 + 1.075909876365943e-01 + 1.073358133695979e-01 + 1.070812424691808e-01 + 1.068272734935852e-01 + 1.065739049762412e-01 + 1.063211355273724e-01 + 1.060689637753818e-01 + 1.058173883167701e-01 + 1.055664076522099e-01 + 1.053160204177178e-01 + 1.050662253083730e-01 + 1.048170208178578e-01 + 1.045684055544151e-01 + 1.043203782231123e-01 + 1.040729373745031e-01 + 1.038260815947437e-01 + 1.035798095388146e-01 + 1.033341198496129e-01 + 1.030890111353506e-01 + 1.028444819874746e-01 + 1.026005310752415e-01 + 1.023571570589419e-01 + 1.021143585605686e-01 + 1.018721342063349e-01 + 1.016304826397723e-01 + 1.013894025261397e-01 + 1.011488925387934e-01 + 1.009089513225976e-01 + 1.006695774897203e-01 + 1.004307697412456e-01 + 1.001925267601519e-01 + 9.995484714928184e-02 + 9.971772961029543e-02 + 9.948117285600222e-02 + 9.924517553207431e-02 + 9.900973631553432e-02 + 9.877485389836264e-02 + 9.854052696321766e-02 + 9.830675420513860e-02 + 9.807353432053509e-02 + 9.784086599274402e-02 + 9.760874792461041e-02 + 9.737717882679013e-02 + 9.714615739564664e-02 + 9.691568233864475e-02 + 9.668575237168565e-02 + 9.645636620785530e-02 + 9.622752256709627e-02 + 9.599922017186617e-02 + 9.577145773476621e-02 + 9.554423398421420e-02 + 9.531754766036228e-02 + 9.509139748951084e-02 + 9.486578220406576e-02 + 9.464070054491446e-02 + 9.441615125061270e-02 + 9.419213306609350e-02 + 9.396864474309072e-02 + 9.374568502973517e-02 + 9.352325267700241e-02 + 9.330134644110695e-02 + 9.307996508088016e-02 + 9.285910736057421e-02 + 9.263877204899980e-02 + 9.241895790580944e-02 + 9.219966369924239e-02 + 9.198088821288498e-02 + 9.176263021506216e-02 + 9.154488848131032e-02 + 9.132766180778470e-02 + 9.111094897456264e-02 + 9.089474876186458e-02 + 9.067905996494766e-02 + 9.046388137755315e-02 + 9.024921179550818e-02 + 9.003505002157913e-02 + 8.982139485394958e-02 + 8.960824509461397e-02 + 8.939559956013639e-02 + 8.918345705664489e-02 + 8.897181638949078e-02 + 8.876067638185769e-02 + 8.855003585659860e-02 + 8.833989363307079e-02 + 8.813024852794749e-02 + 8.792109937217552e-02 + 8.771244500411417e-02 + 8.750428424959714e-02 + 8.729661594151820e-02 + 8.708943892038122e-02 + 8.688275202450782e-02 + 8.667655409894154e-02 + 8.647084399500883e-02 + 8.626562056133152e-02 + 8.606088264727801e-02 + 8.585662910508592e-02 + 8.565285879275303e-02 + 8.544957056834111e-02 + 8.524676329099723e-02 + 8.504443583456130e-02 + 8.484258706983651e-02 + 8.464121585953427e-02 + 8.444032107793580e-02 + 8.423990160173883e-02 + 8.403995630660985e-02 + 8.384048408000297e-02 + 8.364148380739438e-02 + 8.344295436518863e-02 + 8.324489464319758e-02 + 8.304730353631981e-02 + 8.285017993778075e-02 + 8.265352274723796e-02 + 8.245733086610936e-02 + 8.226160319325253e-02 + 8.206633863307464e-02 + 8.187153609323948e-02 + 8.167719448173898e-02 + 8.148331271120264e-02 + 8.128988969775824e-02 + 8.109692435907066e-02 + 8.090441561287741e-02 + 8.071236238052074e-02 + 8.052076359329230e-02 + 8.032961817777003e-02 + 8.013892505875637e-02 + 7.994868317110082e-02 + 7.975889145271257e-02 + 7.956954884117817e-02 + 7.938065427030368e-02 + 7.919220668490153e-02 + 7.900420503735811e-02 + 7.881664826626886e-02 + 7.862953532075569e-02 + 7.844286516277023e-02 + 7.825663674598571e-02 + 7.807084902471831e-02 + 7.788550095723919e-02 + 7.770059150356423e-02 + 7.751611963202924e-02 + 7.733208431808952e-02 + 7.714848452080215e-02 + 7.696531920714285e-02 + 7.678258736267791e-02 + 7.660028796508990e-02 + 7.641841999039113e-02 + 7.623698241865759e-02 + 7.605597423593993e-02 + 7.587539442823407e-02 + 7.569524197859213e-02 + 7.551551588287067e-02 + 7.533621514035872e-02 + 7.515733874432233e-02 + 7.497888568830134e-02 + 7.480085497230264e-02 + 7.462324560850588e-02 + 7.444605660139321e-02 + 7.426928695221670e-02 + 7.409293566891996e-02 + 7.391700176673981e-02 + 7.374148426439617e-02 + 7.356638217848553e-02 + 7.339169452681224e-02 + 7.321742033027905e-02 + 7.304355861552074e-02 + 7.287010840815517e-02 + 7.269706873346385e-02 + 7.252443862192341e-02 + 7.235221710900047e-02 + 7.218040323296335e-02 + 7.200899602923243e-02 + 7.183799453782064e-02 + 7.166739780328910e-02 + 7.149720486628935e-02 + 7.132741477295296e-02 + 7.115802657678706e-02 + 7.098903933028558e-02 + 7.082045208266741e-02 + 7.065226388294948e-02 + 7.048447379884398e-02 + 7.031708089501212e-02 + 7.015008422428966e-02 + 6.998348285005500e-02 + 6.981727584178653e-02 + 6.965146227138255e-02 + 6.948604121024822e-02 + 6.932101172952453e-02 + 6.915637290177927e-02 + 6.899212381049466e-02 + 6.882826353831664e-02 + 6.866479115768206e-02 + 6.850170575553913e-02 + 6.833900642241270e-02 + 6.817669223943085e-02 + 6.801476230171261e-02 + 6.785321570853013e-02 + 6.769205154760372e-02 + 6.753126891476798e-02 + 6.737086691265436e-02 + 6.721084464422118e-02 + 6.705120121123045e-02 + 6.689193571639933e-02 + 6.673304726820108e-02 + 6.657453497707803e-02 + 6.641639795452120e-02 + 6.625863531334618e-02 + 6.610124617104705e-02 + 6.594422964866814e-02 + 6.578758486543299e-02 + 6.563131094165708e-02 + 6.547540700031643e-02 + 6.531987216906585e-02 + 6.516470557837332e-02 + 6.500990635997374e-02 + 6.485547364331327e-02 + 6.470140656204018e-02 + 6.454770425495959e-02 + 6.439436585565442e-02 + 6.424139050518185e-02 + 6.408877735587415e-02 + 6.393652554954243e-02 + 6.378463422860429e-02 + 6.363310254304622e-02 + 6.348192964216136e-02 + 6.333111467891862e-02 + 6.318065681259971e-02 + 6.303055519506789e-02 + 6.288080898167979e-02 + 6.273141734118348e-02 + 6.258237943694549e-02 + 6.243369443027962e-02 + 6.228536148636779e-02 + 6.213737977420020e-02 + 6.198974846629291e-02 + 6.184246673830131e-02 + 6.169553375986874e-02 + 6.154894870195880e-02 + 6.140271075002260e-02 + 6.125681908485271e-02 + 6.111127288458502e-02 + 6.096607133498923e-02 + 6.082121362330186e-02 + 6.067669893778977e-02 + 6.053252647002724e-02 + 6.038869541057570e-02 + 6.024520494995262e-02 + 6.010205428441878e-02 + 5.995924261312039e-02 + 5.981676913606451e-02 + 5.967463305068377e-02 + 5.953283356000520e-02 + 5.939136987405440e-02 + 5.925024120274393e-02 + 5.910944675075109e-02 + 5.896898572024133e-02 + 5.882885733338872e-02 + 5.868906080796419e-02 + 5.854959534943303e-02 + 5.841046018167366e-02 + 5.827165452667381e-02 + 5.813317759547484e-02 + 5.799502862000658e-02 + 5.785720683145133e-02 + 5.771971144629215e-02 + 5.758254169802959e-02 + 5.744569682168989e-02 + 5.730917604038396e-02 + 5.717297859181381e-02 + 5.703710371771920e-02 + 5.690155065150715e-02 + 5.676631863514842e-02 + 5.663140691176988e-02 + 5.649681471550019e-02 + 5.636254129818796e-02 + 5.622858591623749e-02 + 5.609494780637568e-02 + 5.596162621719655e-02 + 5.582862040612746e-02 + 5.569592962469259e-02 + 5.556355312969728e-02 + 5.543149018219354e-02 + 5.529974004038473e-02 + 5.516830196534387e-02 + 5.503717522021812e-02 + 5.490635906464716e-02 + 5.477585276550550e-02 + 5.464565559606692e-02 + 5.451576682310098e-02 + 5.438618571514530e-02 + 5.425691154653305e-02 + 5.412794360021059e-02 + 5.399928115030668e-02 + 5.387092346220070e-02 + 5.374286982722595e-02 + 5.361511953114147e-02 + 5.348767184376742e-02 + 5.336052605560348e-02 + 5.323368145967647e-02 + 5.310713734132736e-02 + 5.298089299097181e-02 + 5.285494769998652e-02 + 5.272930075794034e-02 + 5.260395145882699e-02 + 5.247889910164562e-02 + 5.235414299012888e-02 + 5.222968242359068e-02 + 5.210551670083303e-02 + 5.198164512479836e-02 + 5.185806699751586e-02 + 5.173478162567831e-02 + 5.161178832737659e-02 + 5.148908640731603e-02 + 5.136667516904735e-02 + 5.124455393713079e-02 + 5.112272202541198e-02 + 5.100117874145336e-02 + 5.087992340415878e-02 + 5.075895533879782e-02 + 5.063827387090040e-02 + 5.051787831631814e-02 + 5.039776799903027e-02 + 5.027794224956293e-02 + 5.015840039018700e-02 + 5.003914174911826e-02 + 4.992016566217095e-02 + 4.980147146451835e-02 + 4.968305848565534e-02 + 4.956492605368701e-02 + 4.944707351707827e-02 + 4.932950021762891e-02 + 4.921220548403189e-02 + 4.909518865563611e-02 + 4.897844908008390e-02 + 4.886198610990230e-02 + 4.874579909103274e-02 + 4.862988736593407e-02 + 4.851425027765261e-02 + 4.839888718215429e-02 + 4.828379743688660e-02 + 4.816898039344981e-02 + 4.805443540666063e-02 + 4.794016183433197e-02 + 4.782615903628512e-02 + 4.771242637003347e-02 + 4.759896319572905e-02 + 4.748576888074151e-02 + 4.737284278529100e-02 + 4.726018427180961e-02 + 4.714779271742187e-02 + 4.703566749191604e-02 + 4.692380796083007e-02 + 4.681221349433169e-02 + 4.670088346648602e-02 + 4.658981725459431e-02 + 4.647901423861556e-02 + 4.636847379587147e-02 + 4.625819530165282e-02 + 4.614817813294777e-02 + 4.603842167462240e-02 + 4.592892531626435e-02 + 4.581968844113481e-02 + 4.571071043517037e-02 + 4.560199068716930e-02 + 4.549352858172214e-02 + 4.538532351139604e-02 + 4.527737487551017e-02 + 4.516968206047602e-02 + 4.506224446147816e-02 + 4.495506148526871e-02 + 4.484813252205796e-02 + 4.474145696749865e-02 + 4.463503423038843e-02 + 4.452886371233129e-02 + 4.442294481444441e-02 + 4.431727694184067e-02 + 4.421185950249874e-02 + 4.410669190344264e-02 + 4.400177354999718e-02 + 4.389710385863231e-02 + 4.379268224561385e-02 + 4.368850811842072e-02 + 4.358458089102907e-02 + 4.348089998166713e-02 + 4.337746480946211e-02 + 4.327427479290449e-02 + 4.317132935104961e-02 + 4.306862790538591e-02 + 4.296616988021409e-02 + 4.286395470044128e-02 + 4.276198178905291e-02 + 4.266025057462805e-02 + 4.255876048879523e-02 + 4.245751096050290e-02 + 4.235650142249979e-02 + 4.225573130868781e-02 + 4.215520004666404e-02 + 4.205490707118502e-02 + 4.195485182346907e-02 + 4.185503374212908e-02 + 4.175545226547943e-02 + 4.165610683241490e-02 + 4.155699688308426e-02 + 4.145812186261490e-02 + 4.135948121993713e-02 + 4.126107439911159e-02 + 4.116290084444992e-02 + 4.106496000347922e-02 + 4.096725133001662e-02 + 4.086977427671171e-02 + 4.077252829257245e-02 + 4.067551282880393e-02 + 4.057872734137224e-02 + 4.048217129089726e-02 + 4.038584413229004e-02 + 4.028974532214836e-02 + 4.019387432351806e-02 + 4.009823059884492e-02 + 4.000281360871143e-02 + 3.990762281263916e-02 + 3.981265768084040e-02 + 3.971791768404272e-02 + 3.962340228400397e-02 + 3.952911094818634e-02 + 3.943504314911767e-02 + 3.934119836154264e-02 + 3.924757605343093e-02 + 3.915417569553582e-02 + 3.906099677494528e-02 + 3.896803876462888e-02 + 3.887530113159737e-02 + 3.878278335807980e-02 + 3.869048493136602e-02 + 3.859840533540703e-02 + 3.850654403935494e-02 + 3.841490053099362e-02 + 3.832347430867683e-02 + 3.823226484521238e-02 + 3.814127162485314e-02 + 3.805049414568009e-02 + 3.795993189727254e-02 + 3.786958436838804e-02 + 3.777945104950908e-02 + 3.768953143238456e-02 + 3.759982501241896e-02 + 3.751033128919119e-02 + 3.742104976390229e-02 + 3.733197993101921e-02 + 3.724312127956968e-02 + 3.715447331892652e-02 + 3.706603555538170e-02 + 3.697780748276271e-02 + 3.688978860838169e-02 + 3.680197844047203e-02 + 3.671437648083043e-02 + 3.662698223859462e-02 + 3.653979522528233e-02 + 3.645281495050149e-02 + 3.636604092401768e-02 + 3.627947265609178e-02 + 3.619310965841749e-02 + 3.610695145022991e-02 + 3.602099755007137e-02 + 3.593524746722872e-02 + 3.584970072102484e-02 + 3.576435683502647e-02 + 3.567921532660211e-02 + 3.559427571435374e-02 + 3.550953752116312e-02 + 3.542500027693078e-02 + 3.534066350384148e-02 + 3.525652672170999e-02 + 3.517258946309138e-02 + 3.508885125628003e-02 + 3.500531162678291e-02 + 3.492197010940873e-02 + 3.483882623525817e-02 + 3.475587953263527e-02 + 3.467312953919303e-02 + 3.459057578876406e-02 + 3.450821781198862e-02 + 3.442605515251815e-02 + 3.434408734999198e-02 + 3.426231393723483e-02 + 3.418073445581654e-02 + 3.409934844816886e-02 + 3.401815545480084e-02 + 3.393715501912345e-02 + 3.385634668688416e-02 + 3.377573000557660e-02 + 3.369530452244349e-02 + 3.361506978424043e-02 + 3.353502533757853e-02 + 3.345517073173793e-02 + 3.337550551749302e-02 + 3.329602924688495e-02 + 3.321674147756795e-02 + 3.313764176353938e-02 + 3.305872964905672e-02 + 3.298000469915312e-02 + 3.290146647870388e-02 + 3.282311452928582e-02 + 3.274494841443989e-02 + 3.266696770524984e-02 + 3.258917195579586e-02 + 3.251156072835543e-02 + 3.243413358906379e-02 + 3.235689009597382e-02 + 3.227982981604406e-02 + 3.220295232152501e-02 + 3.212625717796667e-02 + 3.204974395335523e-02 + 3.197341221860803e-02 + 3.189726154412311e-02 + 3.182129149811844e-02 + 3.174550164996338e-02 + 3.166989158019418e-02 + 3.159446086552403e-02 + 3.151920907660396e-02 + 3.144413578635114e-02 + 3.136924057603768e-02 + 3.129452303273958e-02 + 3.121998273049806e-02 + 3.114561924523454e-02 + 3.107143216011856e-02 + 3.099742105799270e-02 + 3.092358552474080e-02 + 3.084992514925186e-02 + 3.077643951122557e-02 + 3.070312819305190e-02 + 3.062999078663620e-02 + 3.055702688363699e-02 + 3.048423607160382e-02 + 3.041161793396379e-02 + 3.033917207015753e-02 + 3.026689807846873e-02 + 3.019479554128978e-02 + 3.012286404982057e-02 + 3.005110320361238e-02 + 2.997951260681279e-02 + 2.990809185255966e-02 + 2.983684053226568e-02 + 2.976575824919644e-02 + 2.969484460522792e-02 + 2.962409920087884e-02 + 2.955352163824170e-02 + 2.948311151647172e-02 + 2.941286843696999e-02 + 2.934279201383451e-02 + 2.927288185012002e-02 + 2.920313754405053e-02 + 2.913355871301240e-02 + 2.906414496442064e-02 + 2.899489589842786e-02 + 2.892581113440367e-02 + 2.885689028447655e-02 + 2.878813295173805e-02 + 2.871953875071393e-02 + 2.865110730129668e-02 + 2.858283822298987e-02 + 2.851473112218837e-02 + 2.844678561226344e-02 + 2.837900131834860e-02 + 2.831137785774055e-02 + 2.824391484910513e-02 + 2.817661191561155e-02 + 2.810946867322990e-02 + 2.804248474261467e-02 + 2.797565975421473e-02 + 2.790899332866750e-02 + 2.784248508684310e-02 + 2.777613465729838e-02 + 2.770994166752542e-02 + 2.764390574354870e-02 + 2.757802651096095e-02 + 2.751230360164656e-02 + 2.744673664902718e-02 + 2.738132528259552e-02 + 2.731606912935157e-02 + 2.725096782054994e-02 + 2.718602099881922e-02 + 2.712122829441404e-02 + 2.705658933533107e-02 + 2.699210376654040e-02 + 2.692777122629619e-02 + 2.686359134766074e-02 + 2.679956376855050e-02 + 2.673568813034148e-02 + 2.667196407449100e-02 + 2.660839123653040e-02 + 2.654496925932325e-02 + 2.648169779209303e-02 + 2.641857647953893e-02 + 2.635560496230991e-02 + 2.629278288047702e-02 + 2.623010988365326e-02 + 2.616758562366618e-02 + 2.610520975031933e-02 + 2.604298190560967e-02 + 2.598090173551063e-02 + 2.591896889422694e-02 + 2.585718303968204e-02 + 2.579554382343284e-02 + 2.573405088890056e-02 + 2.567270388987125e-02 + 2.561150248485746e-02 + 2.555044633271165e-02 + 2.548953508798725e-02 + 2.542876840653832e-02 + 2.536814594843316e-02 + 2.530766736730480e-02 + 2.524733231969847e-02 + 2.518714047250964e-02 + 2.512709148651639e-02 + 2.506718502244662e-02 + 2.500742074738894e-02 + 2.494779831751132e-02 + 2.488831739145854e-02 + 2.482897764751662e-02 + 2.476977875068464e-02 + 2.471072035836960e-02 + 2.465180213557270e-02 + 2.459302375909131e-02 + 2.453438490494015e-02 + 2.447588522684439e-02 + 2.441752439632618e-02 + 2.435930209686822e-02 + 2.430121799563831e-02 + 2.424327176191257e-02 + 2.418546306971884e-02 + 2.412779159320392e-02 + 2.407025701015483e-02 + 2.401285899981317e-02 + 2.395559723318545e-02 + 2.389847138352894e-02 + 2.384148113010493e-02 + 2.378462615809818e-02 + 2.372790614977233e-02 + 2.367132078182184e-02 + 2.361486973012364e-02 + 2.355855267628842e-02 + 2.350236930912776e-02 + 2.344631931433045e-02 + 2.339040237260871e-02 + 2.333461816188979e-02 + 2.327896637661412e-02 + 2.322344670789084e-02 + 2.316805883183489e-02 + 2.311280243515378e-02 + 2.305767721100430e-02 + 2.300268285332459e-02 + 2.294781904779433e-02 + 2.289308548135576e-02 + 2.283848185163481e-02 + 2.278400785322520e-02 + 2.272966317657758e-02 + 2.267544750906289e-02 + 2.262136054576819e-02 + 2.256740198705395e-02 + 2.251357153295969e-02 + 2.245986887460843e-02 + 2.240629370372433e-02 + 2.235284572997816e-02 + 2.229952464835474e-02 + 2.224633014749699e-02 + 2.219326193897085e-02 + 2.214031972536749e-02 + 2.208750320104361e-02 + 2.203481207216736e-02 + 2.198224604054712e-02 + 2.192980480490446e-02 + 2.187748807809197e-02 + 2.182529556587840e-02 + 2.177322696546572e-02 + 2.172128198614426e-02 + 2.166946034002218e-02 + 2.161776173674180e-02 + 2.156618587797776e-02 + 2.151473246970182e-02 + 2.146340122648612e-02 + 2.141219186176581e-02 + 2.136110408595206e-02 + 2.131013760699968e-02 + 2.125929213929720e-02 + 2.120856739943827e-02 + 2.115796310282077e-02 + 2.110747896148574e-02 + 2.105711468773744e-02 + 2.100686999708853e-02 + 2.095674460640470e-02 + 2.090673823470377e-02 + 2.085685060390323e-02 + 2.080708143284909e-02 + 2.075743043865024e-02 + 2.070789733896461e-02 + 2.065848185338519e-02 + 2.060918370358626e-02 + 2.056000261352416e-02 + 2.051093830731156e-02 + 2.046199050841276e-02 + 2.041315893918832e-02 + 2.036444332670061e-02 + 2.031584339811113e-02 + 2.026735887003067e-02 + 2.021898947028043e-02 + 2.017073493461869e-02 + 2.012259498752183e-02 + 2.007456935661649e-02 + 2.002665777297167e-02 + 1.997885996051357e-02 + 1.993117564943755e-02 + 1.988360457741823e-02 + 1.983614647798445e-02 + 1.978880107994216e-02 + 1.974156811085027e-02 + 1.969444731166336e-02 + 1.964743841723802e-02 + 1.960054115227784e-02 + 1.955375525837354e-02 + 1.950708047707909e-02 + 1.946051654129042e-02 + 1.941406318497287e-02 + 1.936772014474174e-02 + 1.932148716119990e-02 + 1.927536398140690e-02 + 1.922935034564512e-02 + 1.918344598004621e-02 + 1.913765063001423e-02 + 1.909196404425976e-02 + 1.904638595925336e-02 + 1.900091612254435e-02 + 1.895555428061772e-02 + 1.891030016469744e-02 + 1.886515352637163e-02 + 1.882011411999479e-02 + 1.877518167521970e-02 + 1.873035594232305e-02 + 1.868563668110157e-02 + 1.864102363246424e-02 + 1.859651653826993e-02 + 1.855211514697215e-02 + 1.850781921692858e-02 + 1.846362849811174e-02 + 1.841954273425713e-02 + 1.837556167722399e-02 + 1.833168508274460e-02 + 1.828791270638760e-02 + 1.824424429587613e-02 + 1.820067960186819e-02 + 1.815721838079814e-02 + 1.811386039242822e-02 + 1.807060539155448e-02 + 1.802745312809132e-02 + 1.798440336027523e-02 + 1.794145584667328e-02 + 1.789861034396235e-02 + 1.785586661445831e-02 + 1.781322441713358e-02 + 1.777068350457842e-02 + 1.772824363606736e-02 + 1.768590457480606e-02 + 1.764366608520215e-02 + 1.760152792777148e-02 + 1.755948986314423e-02 + 1.751755165530868e-02 + 1.747571306959304e-02 + 1.743397386795286e-02 + 1.739233380686453e-02 + 1.735079266012027e-02 + 1.730935019969591e-02 + 1.726800617515195e-02 + 1.722676035861175e-02 + 1.718561252878033e-02 + 1.714456244423200e-02 + 1.710360987245781e-02 + 1.706275458478830e-02 + 1.702199634263978e-02 + 1.698133492251816e-02 + 1.694077010510486e-02 + 1.690030164730331e-02 + 1.685992932068962e-02 + 1.681965290804600e-02 + 1.677947217681714e-02 + 1.673938689521877e-02 + 1.669939683666028e-02 + 1.665950177991986e-02 + 1.661970150205939e-02 + 1.657999577711447e-02 + 1.654038437906895e-02 + 1.650086708478969e-02 + 1.646144367321789e-02 + 1.642211391798679e-02 + 1.638287759543946e-02 + 1.634373448754158e-02 + 1.630468437732129e-02 + 1.626572704186934e-02 + 1.622686225251448e-02 + 1.618808979718675e-02 + 1.614940946170872e-02 + 1.611082101996680e-02 + 1.607232425440962e-02 + 1.603391895041710e-02 + 1.599560489122978e-02 + 1.595738185903658e-02 + 1.591924963852954e-02 + 1.588120801872957e-02 + 1.584325677844977e-02 + 1.580539569909259e-02 + 1.576762457813194e-02 + 1.572994319938502e-02 + 1.569235134492561e-02 + 1.565484881311209e-02 + 1.561743538476679e-02 + 1.558011083839993e-02 + 1.554287497958433e-02 + 1.550572759639263e-02 + 1.546866846769255e-02 + 1.543169739218311e-02 + 1.539481416304957e-02 + 1.535801856691179e-02 + 1.532131039389481e-02 + 1.528468944222785e-02 + 1.524815551153465e-02 + 1.521170838270258e-02 + 1.517534784896265e-02 + 1.513907371629201e-02 + 1.510288577422132e-02 + 1.506678381600347e-02 + 1.503076764230081e-02 + 1.499483704594779e-02 + 1.495899182406707e-02 + 1.492323178010325e-02 + 1.488755670734373e-02 + 1.485196640180961e-02 + 1.481646066682016e-02 + 1.478103929846549e-02 + 1.474570209596410e-02 + 1.471044886603309e-02 + 1.467527940456368e-02 + 1.464019351058384e-02 + 1.460519099481427e-02 + 1.457027165550810e-02 + 1.453543528903122e-02 + 1.450068170024789e-02 + 1.446601069487559e-02 + 1.443142207965322e-02 + 1.439691566271563e-02 + 1.436249124410753e-02 + 1.432814862414793e-02 + 1.429388761459182e-02 + 1.425970802314729e-02 + 1.422560965483165e-02 + 1.419159231701311e-02 + 1.415765581387266e-02 + 1.412379995194592e-02 + 1.409002455116132e-02 + 1.405632941792580e-02 + 1.402271435207008e-02 + 1.398917917303820e-02 + 1.395572369124169e-02 + 1.392234770932106e-02 + 1.388905104392205e-02 + 1.385583350997071e-02 + 1.382269491788422e-02 + 1.378963507987753e-02 + 1.375665380791922e-02 + 1.372375091366015e-02 + 1.369092621121959e-02 + 1.365817951715469e-02 + 1.362551064978645e-02 + 1.359291942581090e-02 + 1.356040565686591e-02 + 1.352796915179558e-02 + 1.349560973812908e-02 + 1.346332723540702e-02 + 1.343112144483463e-02 + 1.339899219360082e-02 + 1.336693930891053e-02 + 1.333496260043193e-02 + 1.330306188734133e-02 + 1.327123699224855e-02 + 1.323948773476910e-02 + 1.320781393642416e-02 + 1.317621541705235e-02 + 1.314469199166208e-02 + 1.311324348463446e-02 + 1.308186972415766e-02 + 1.305057053367403e-02 + 1.301934573289238e-02 + 1.298819514247371e-02 + 1.295711859027024e-02 + 1.292611590142988e-02 + 1.289518689817567e-02 + 1.286433140253433e-02 + 1.283354924175516e-02 + 1.280284024626999e-02 + 1.277220424320462e-02 + 1.274164105512193e-02 + 1.271115050454398e-02 + 1.268073242580564e-02 + 1.265038664885281e-02 + 1.262011299771964e-02 + 1.258991130045622e-02 + 1.255978138928737e-02 + 1.252972309744999e-02 + 1.249973624798444e-02 + 1.246982067106488e-02 + 1.243997620568067e-02 + 1.241020267461013e-02 + 1.238049990730756e-02 + 1.235086774662455e-02 + 1.232130602051964e-02 + 1.229181455798258e-02 + 1.226239319685087e-02 + 1.223304176770951e-02 + 1.220376010347082e-02 + 1.217454804486660e-02 + 1.214540542341299e-02 + 1.211633207079968e-02 + 1.208732782681391e-02 + 1.205839252771904e-02 + 1.202952600673308e-02 + 1.200072809652295e-02 + 1.197199864009422e-02 + 1.194333748171596e-02 + 1.191474445503102e-02 + 1.188621939116683e-02 + 1.185776212675846e-02 + 1.182937251288597e-02 + 1.180105038815069e-02 + 1.177279558400601e-02 + 1.174460794107161e-02 + 1.171648730396891e-02 + 1.168843351609301e-02 + 1.166044641171630e-02 + 1.163252583370262e-02 + 1.160467163102319e-02 + 1.157688364263099e-02 + 1.154916170933044e-02 + 1.152150567570712e-02 + 1.149391538555893e-02 + 1.146639068095789e-02 + 1.143893140447911e-02 + 1.141153740781534e-02 + 1.138420853673168e-02 + 1.135694462854312e-02 + 1.132974552839056e-02 + 1.130261108533809e-02 + 1.127554114921167e-02 + 1.124853556496432e-02 + 1.122159417997002e-02 + 1.119471684585664e-02 + 1.116790340283271e-02 + 1.114115369710312e-02 + 1.111446758944324e-02 + 1.108784492177717e-02 + 1.106128553754357e-02 + 1.103478929728668e-02 + 1.100835604711145e-02 + 1.098198563223047e-02 + 1.095567791133747e-02 + 1.092943273475230e-02 + 1.090324994987072e-02 + 1.087712940981543e-02 + 1.085107096608238e-02 + 1.082507447053145e-02 + 1.079913977931768e-02 + 1.077326674497864e-02 + 1.074745521859533e-02 + 1.072170505538783e-02 + 1.069601611066200e-02 + 1.067038823886727e-02 + 1.064482129354728e-02 + 1.061931513219808e-02 + 1.059386961330933e-02 + 1.056848458681972e-02 + 1.054315990640127e-02 + 1.051789543133304e-02 + 1.049269102209236e-02 + 1.046754653920045e-02 + 1.044246184044743e-02 + 1.041743677288729e-02 + 1.039247119540387e-02 + 1.036756497988909e-02 + 1.034271797805630e-02 + 1.031793004647734e-02 + 1.029320105343422e-02 + 1.026853085073464e-02 + 1.024391929539164e-02 + 1.021936625852857e-02 + 1.019487159885800e-02 + 1.017043517132599e-02 + 1.014605683522427e-02 + 1.012173646293816e-02 + 1.009747392058842e-02 + 1.007326905588179e-02 + 1.004912173629082e-02 + 1.002503183346208e-02 + 1.000099920653610e-02 + 9.977023717087764e-03 + 9.953105229386335e-03 + 9.929243608872406e-03 + 9.905438720973011e-03 + 9.881690430827046e-03 + 9.857998603258316e-03 + 9.834363104786413e-03 + 9.810783802355094e-03 + 9.787260560990621e-03 + 9.763793247942843e-03 + 9.740381731591760e-03 + 9.717025877967826e-03 + 9.693725554510663e-03 + 9.670480630152000e-03 + 9.647290973567844e-03 + 9.624156453317901e-03 + 9.601076938062841e-03 + 9.578052297039983e-03 + 9.555082399653962e-03 + 9.532167115690399e-03 + 9.509306316445141e-03 + 9.486499872512266e-03 + 9.463747653553711e-03 + 9.441049530896879e-03 + 9.418405376662433e-03 + 9.395815063104617e-03 + 9.373278461427175e-03 + 9.350795443499088e-03 + 9.328365882617906e-03 + 9.305989651970981e-03 + 9.283666624824176e-03 + 9.261396674723778e-03 + 9.239179675408710e-03 + 9.217015500757821e-03 + 9.194904024947497e-03 + 9.172845123632957e-03 + 9.150838672277813e-03 + 9.128884544858834e-03 + 9.106982617538152e-03 + 9.085132766987650e-03 + 9.063334868396023e-03 + 9.041588798714301e-03 + 9.019894435479832e-03 + 8.998251654894885e-03 + 8.976660334271958e-03 + 8.955120351755344e-03 + 8.933631585369030e-03 + 8.912193913264732e-03 + 8.890807213885918e-03 + 8.869471366214972e-03 + 8.848186249259440e-03 + 8.826951742251321e-03 + 8.805767725383001e-03 + 8.784634078744540e-03 + 8.763550682317645e-03 + 8.742517416743529e-03 + 8.721534162832835e-03 + 8.700600801502468e-03 + 8.679717214101214e-03 + 8.658883282492529e-03 + 8.638098888885700e-03 + 8.617363915025602e-03 + 8.596678243443276e-03 + 8.576041757693640e-03 + 8.555454340593486e-03 + 8.534915875110577e-03 + 8.514426244844865e-03 + 8.493985333674233e-03 + 8.473593025909724e-03 + 8.453249206335058e-03 + 8.432953759374154e-03 + 8.412706569850796e-03 + 8.392507523503252e-03 + 8.372356505624580e-03 + 8.352253401838657e-03 + 8.332198098800467e-03 + 8.312190482450988e-03 + 8.292230438871008e-03 + 8.272317855399050e-03 + 8.252452619663047e-03 + 8.232634619050869e-03 + 8.212863740331295e-03 + 8.193139871755427e-03 + 8.173462902270600e-03 + 8.153832719956143e-03 + 8.134249213438031e-03 + 8.114712271802299e-03 + 8.095221784035302e-03 + 8.075777639824947e-03 + 8.056379729417138e-03 + 8.037027942938956e-03 + 8.017722170154111e-03 + 7.998462301028743e-03 + 7.979248227381455e-03 + 7.960079840401237e-03 + 7.940957030626293e-03 + 7.921879690329333e-03 + 7.902847711453821e-03 + 7.883860985421759e-03 + 7.864919405368889e-03 + 7.846022864037674e-03 + 7.827171253341911e-03 + 7.808364466777525e-03 + 7.789602397948123e-03 + 7.770884940051978e-03 + 7.752211987488857e-03 + 7.733583434567862e-03 + 7.714999174963997e-03 + 7.696459103766686e-03 + 7.677963116338556e-03 + 7.659511107448910e-03 + 7.641102971817726e-03 + 7.622738605046243e-03 + 7.604417904226960e-03 + 7.586140765207791e-03 + 7.567907083543369e-03 + 7.549716755813157e-03 + 7.531569679511053e-03 + 7.513465752109027e-03 + 7.495404870064185e-03 + 7.477386931039745e-03 + 7.459411833357052e-03 + 7.441479474804043e-03 + 7.423589753808636e-03 + 7.405742569108545e-03 + 7.387937818890154e-03 + 7.370175402616828e-03 + 7.352455220325825e-03 + 7.334777170378787e-03 + 7.317141152312192e-03 + 7.299547066866589e-03 + 7.281994814230038e-03 + 7.264484294760120e-03 + 7.247015409129196e-03 + 7.229588058070396e-03 + 7.212202142721502e-03 + 7.194857564639825e-03 + 7.177554225359851e-03 + 7.160292026920549e-03 + 7.143070871828701e-03 + 7.125890661781023e-03 + 7.108751299151369e-03 + 7.091652687463649e-03 + 7.074594729473165e-03 + 7.057577328092346e-03 + 7.040600386920140e-03 + 7.023663809440293e-03 + 7.006767499621119e-03 + 6.989911362283671e-03 + 6.973095301761098e-03 + 6.956319222246642e-03 + 6.939583028242014e-03 + 6.922886624933184e-03 + 6.906229917977133e-03 + 6.889612813237578e-03 + 6.873035215956658e-03 + 6.856497031627250e-03 + 6.839998167124653e-03 + 6.823538528849983e-03 + 6.807118022950776e-03 + 6.790736556102037e-03 + 6.774394036012678e-03 + 6.758090370503938e-03 + 6.741825465874382e-03 + 6.725599229831710e-03 + 6.709411571076730e-03 + 6.693262397262002e-03 + 6.677151616823099e-03 + 6.661079138883049e-03 + 6.645044871881905e-03 + 6.629048724424302e-03 + 6.613090605727208e-03 + 6.597170426169362e-03 + 6.581288095176429e-03 + 6.565443521393368e-03 + 6.549636616015259e-03 + 6.533867289690503e-03 + 6.518135451870410e-03 + 6.502441013826720e-03 + 6.486783886693610e-03 + 6.471163980906190e-03 + 6.455581208648475e-03 + 6.440035481784445e-03 + 6.424526710952946e-03 + 6.409054808194274e-03 + 6.393619686148648e-03 + 6.378221257389647e-03 + 6.362859434216829e-03 + 6.347534129405275e-03 + 6.332245256702231e-03 + 6.316992728926398e-03 + 6.301776458848883e-03 + 6.286596360249587e-03 + 6.271452347303485e-03 + 6.256344334335297e-03 + 6.241272235637497e-03 + 6.226235965289892e-03 + 6.211235437617355e-03 + 6.196270567881593e-03 + 6.181341271239764e-03 + 6.166447462747857e-03 + 6.151589057705613e-03 + 6.136765971896623e-03 + 6.121978121401951e-03 + 6.107225422158738e-03 + 6.092507790132517e-03 + 6.077825141615326e-03 + 6.063177393866219e-03 + 6.048564463915550e-03 + 6.033986268442907e-03 + 6.019442724444331e-03 + 6.004933749322879e-03 + 5.990459260846786e-03 + 5.976019176895193e-03 + 5.961613415583682e-03 + 5.947241895231883e-03 + 5.932904533953020e-03 + 5.918601250164555e-03 + 5.904331962789744e-03 + 5.890096590861083e-03 + 5.875895053571317e-03 + 5.861727270328322e-03 + 5.847593160694864e-03 + 5.833492644473149e-03 + 5.819425641715960e-03 + 5.805392072163253e-03 + 5.791391855962741e-03 + 5.777424914193254e-03 + 5.763491167389796e-03 + 5.749590536018355e-03 + 5.735722941127108e-03 + 5.721888304505554e-03 + 5.708086547766434e-03 + 5.694317591457392e-03 + 5.680581357894303e-03 + 5.666877769868901e-03 + 5.653206748498332e-03 + 5.639568216215936e-03 + 5.625962096156960e-03 + 5.612388310444156e-03 + 5.598846782244085e-03 + 5.585337435180374e-03 + 5.571860191464977e-03 + 5.558414974887664e-03 + 5.545001710146245e-03 + 5.531620319651646e-03 + 5.518270727342278e-03 + 5.504952858629092e-03 + 5.491666637149790e-03 + 5.478411987013346e-03 + 5.465188833301630e-03 + 5.451997101098349e-03 + 5.438836715460566e-03 + 5.425707601454353e-03 + 5.412609684284744e-03 + 5.399542889597323e-03 + 5.386507143481766e-03 + 5.373502371672819e-03 + 5.360528500347250e-03 + 5.347585456320476e-03 + 5.334673165238440e-03 + 5.321791553290573e-03 + 5.308940548233661e-03 + 5.296120077396591e-03 + 5.283330067535706e-03 + 5.270570445063373e-03 + 5.257841138170363e-03 + 5.245142075198895e-03 + 5.232473183108559e-03 + 5.219834389656078e-03 + 5.207225623450342e-03 + 5.194646813662877e-03 + 5.182097888019903e-03 + 5.169578774433769e-03 + 5.157089403379224e-03 + 5.144629703265777e-03 + 5.132199601938705e-03 + 5.119799030212023e-03 + 5.107427917986021e-03 + 5.095086194230444e-03 + 5.082773788422456e-03 + 5.070490630851877e-03 + 5.058236652191947e-03 + 5.046011782411770e-03 + 5.033815952050060e-03 + 5.021649092096963e-03 + 5.009511132708167e-03 + 4.997402004872952e-03 + 4.985321640554899e-03 + 4.973269971256597e-03 + 4.961246927915243e-03 + 4.949252441362114e-03 + 4.937286444284467e-03 + 4.925348869112448e-03 + 4.913439647407981e-03 + 4.901558711796497e-03 + 4.889705994683389e-03 + 4.877881427891544e-03 + 4.866084944974813e-03 + 4.854316479151838e-03 + 4.842575962313763e-03 + 4.830863328342665e-03 + 4.819178511323663e-03 + 4.807521444209243e-03 + 4.795892060902922e-03 + 4.784290295384500e-03 + 4.772716080911616e-03 + 4.761169351999607e-03 + 4.749650043687660e-03 + 4.738158090505544e-03 + 4.726693426328077e-03 + 4.715255985490762e-03 + 4.703845704177584e-03 + 4.692462517255530e-03 + 4.681106359266913e-03 + 4.669777166671382e-03 + 4.658474874679097e-03 + 4.647199418051047e-03 + 4.635950733693824e-03 + 4.624728757814554e-03 + 4.613533426035275e-03 + 4.602364675085555e-03 + 4.591222441193854e-03 + 4.580106660340010e-03 + 4.569017270133631e-03 + 4.557954207729684e-03 + 4.546917409606468e-03 + 4.535906813063030e-03 + 4.524922355662980e-03 + 4.513963975024341e-03 + 4.503031608847450e-03 + 4.492125194604706e-03 + 4.481244669721014e-03 + 4.470389973075004e-03 + 4.459561043403103e-03 + 4.448757818627942e-03 + 4.437980237157132e-03 + 4.427228237584914e-03 + 4.416501758569245e-03 + 4.405800739475310e-03 + 4.395125119625431e-03 + 4.384474837838549e-03 + 4.373849833628650e-03 + 4.363250046735974e-03 + 4.352675416676511e-03 + 4.342125883231542e-03 + 4.331601386396421e-03 + 4.321101866314548e-03 + 4.310627263408189e-03 + 4.300177518182486e-03 + 4.289752570999768e-03 + 4.279352362569397e-03 + 4.268976833692708e-03 + 4.258625924837488e-03 + 4.248299577436886e-03 + 4.237997733292803e-03 + 4.227720333115902e-03 + 4.217467318344088e-03 + 4.207238631130676e-03 + 4.197034213451204e-03 + 4.186854006892898e-03 + 4.176697952964437e-03 + 4.166565994071401e-03 + 4.156458073034852e-03 + 4.146374132669977e-03 + 4.136314114934178e-03 + 4.126277962231265e-03 + 4.116265617785051e-03 + 4.106277025130100e-03 + 4.096312127225507e-03 + 4.086370866498099e-03 + 4.076453186851077e-03 + 4.066559032318193e-03 + 4.056688346384167e-03 + 4.046841072375552e-03 + 4.037017154234894e-03 + 4.027216536753351e-03 + 4.017439163691562e-03 + 4.007684978984143e-03 + 3.997953927616382e-03 + 3.988245954341580e-03 + 3.978561003853811e-03 + 3.968899020987378e-03 + 3.959259950174110e-03 + 3.949643736363211e-03 + 3.940050325917084e-03 + 3.930479663940112e-03 + 3.920931695287086e-03 + 3.911406366153988e-03 + 3.901903622192779e-03 + 3.892423408886956e-03 + 3.882965672529350e-03 + 3.873530359308857e-03 + 3.864117415340676e-03 + 3.854726787040829e-03 + 3.845358421069152e-03 + 3.836012264203419e-03 + 3.826688263119290e-03 + 3.817386364639579e-03 + 3.808106515834866e-03 + 3.798848664119608e-03 + 3.789612756624806e-03 + 3.780398740246358e-03 + 3.771206562411011e-03 + 3.762036171140922e-03 + 3.752887514765301e-03 + 3.743760540740341e-03 + 3.734655196719529e-03 + 3.725571430980986e-03 + 3.716509192135922e-03 + 3.707468428387338e-03 + 3.698449087559120e-03 + 3.689451119263604e-03 + 3.680474472533827e-03 + 3.671519094850921e-03 + 3.662584935894309e-03 + 3.653671945297336e-03 + 3.644780071212910e-03 + 3.635909263417586e-03 + 3.627059471971036e-03 + 3.618230645951014e-03 + 3.609422734605362e-03 + 3.600635687799489e-03 + 3.591869456282116e-03 + 3.583123989955615e-03 + 3.574399238584414e-03 + 3.565695152845392e-03 + 3.557011682930304e-03 + 3.548348778903569e-03 + 3.539706391532652e-03 + 3.531084471778191e-03 + 3.522482970666699e-03 + 3.513901839239252e-03 + 3.505341028388093e-03 + 3.496800489111114e-03 + 3.488280173119797e-03 + 3.479780031892506e-03 + 3.471300016604386e-03 + 3.462840078578430e-03 + 3.454400170006921e-03 + 3.445980243580072e-03 + 3.437580250715228e-03 + 3.429200142992534e-03 + 3.420839872683964e-03 + 3.412499392748279e-03 + 3.404178655562702e-03 + 3.395877612913789e-03 + 3.387596218304602e-03 + 3.379334424898988e-03 + 3.371092184764359e-03 + 3.362869450661228e-03 + 3.354666175991870e-03 + 3.346482314543412e-03 + 3.338317819175880e-03 + 3.330172642972068e-03 + 3.322046740007612e-03 + 3.313940064235304e-03 + 3.305852569386344e-03 + 3.297784208976364e-03 + 3.289734936574093e-03 + 3.281704706272533e-03 + 3.273693473070924e-03 + 3.265701191257636e-03 + 3.257727814803984e-03 + 3.249773298074863e-03 + 3.241837595979994e-03 + 3.233920663596386e-03 + 3.226022455622204e-03 + 3.218142926555998e-03 + 3.210282031163023e-03 + 3.202439725215123e-03 + 3.194615964134223e-03 + 3.186810703067027e-03 + 3.179023897602838e-03 + 3.171255503398923e-03 + 3.163505475998486e-03 + 3.155773770652277e-03 + 3.148060343553685e-03 + 3.140365151430291e-03 + 3.132688149313277e-03 + 3.125029293443853e-03 + 3.117388541383308e-03 + 3.109765848736372e-03 + 3.102161171408776e-03 + 3.094574466373093e-03 + 3.087005690728782e-03 + 3.079454801280003e-03 + 3.071921754555924e-03 + 3.064406507880629e-03 + 3.056909018530570e-03 + 3.049429243338136e-03 + 3.041967139485151e-03 + 3.034522664377966e-03 + 3.027095775562892e-03 + 3.019686430816400e-03 + 3.012294588055786e-03 + 3.004920205212209e-03 + 2.997563239705405e-03 + 2.990223649173174e-03 + 2.982901392198357e-03 + 2.975596427311395e-03 + 2.968308712822513e-03 + 2.961038206776656e-03 + 2.953784867392937e-03 + 2.946548653201694e-03 + 2.939329523194637e-03 + 2.932127436582907e-03 + 2.924942352269057e-03 + 2.917774228121468e-03 + 2.910623023643702e-03 + 2.903488699056754e-03 + 2.896371212514376e-03 + 2.889270523304112e-03 + 2.882186591679052e-03 + 2.875119376658924e-03 + 2.868068837676741e-03 + 2.861034934776638e-03 + 2.854017627809473e-03 + 2.847016876513213e-03 + 2.840032640686938e-03 + 2.833064880681456e-03 + 2.826113557103426e-03 + 2.819178630449384e-03 + 2.812260060105674e-03 + 2.805357806481411e-03 + 2.798471831428214e-03 + 2.791602094948384e-03 + 2.784748557109701e-03 + 2.777911179108391e-03 + 2.771089922400815e-03 + 2.764284748007964e-03 + 2.757495616304825e-03 + 2.750722488782177e-03 + 2.743965327115693e-03 + 2.737224092409578e-03 + 2.730498746008289e-03 + 2.723789249648372e-03 + 2.717095565426717e-03 + 2.710417654358784e-03 + 2.703755477800617e-03 + 2.697108999073383e-03 + 2.690478179939920e-03 + 2.683862981660020e-03 + 2.677263366970269e-03 + 2.670679298051182e-03 + 2.664110736894467e-03 + 2.657557646411518e-03 + 2.651019989061974e-03 + 2.644497727126834e-03 + 2.637990823748049e-03 + 2.631499241776077e-03 + 2.625022943767310e-03 + 2.618561892619121e-03 + 2.612116051581085e-03 + 2.605685383984310e-03 + 2.599269852507916e-03 + 2.592869420565223e-03 + 2.586484052278204e-03 + 2.580113710814501e-03 + 2.573758359383719e-03 + 2.567417961609419e-03 + 2.561092481362380e-03 + 2.554781882413309e-03 + 2.548486128464411e-03 + 2.542205184036424e-03 + 2.535939013422343e-03 + 2.529687580238901e-03 + 2.523450848436006e-03 + 2.517228782352248e-03 + 2.511021346720505e-03 + 2.504828506444104e-03 + 2.498650225958320e-03 + 2.492486468967693e-03 + 2.486337200680032e-03 + 2.480202386472821e-03 + 2.474081990653096e-03 + 2.467975978460781e-03 + 2.461884315215007e-03 + 2.455806965243642e-03 + 2.449743893777428e-03 + 2.443695066608286e-03 + 2.437660449328877e-03 + 2.431640007119714e-03 + 2.425633705211946e-03 + 2.419641509634817e-03 + 2.413663385966202e-03 + 2.407699299632079e-03 + 2.401749216909934e-03 + 2.395813103777745e-03 + 2.389890925926915e-03 + 2.383982649399740e-03 + 2.378088240561300e-03 + 2.372207665865560e-03 + 2.366340891258303e-03 + 2.360487883037754e-03 + 2.354648608018378e-03 + 2.348823033118129e-03 + 2.343011124539103e-03 + 2.337212848054228e-03 + 2.331428171390765e-03 + 2.325657062040943e-03 + 2.319899486412222e-03 + 2.314155410784699e-03 + 2.308424802407836e-03 + 2.302707629600105e-03 + 2.297003858807791e-03 + 2.291313456815245e-03 + 2.285636391934661e-03 + 2.279972631361444e-03 + 2.274322142294874e-03 + 2.268684892803898e-03 + 2.263060850445441e-03 + 2.257449982675230e-03 + 2.251852257331842e-03 + 2.246267642469826e-03 + 2.240696106224612e-03 + 2.235137616698782e-03 + 2.229592141925271e-03 + 2.224059650030012e-03 + 2.218540109447705e-03 + 2.213033488566449e-03 + 2.207539755750870e-03 + 2.202058879448589e-03 + 2.196590827868759e-03 + 2.191135569406817e-03 + 2.185693073538250e-03 + 2.180263309295804e-03 + 2.174846245146934e-03 + 2.169441849486111e-03 + 2.164050091629877e-03 + 2.158670941358884e-03 + 2.153304367034930e-03 + 2.147950337590323e-03 + 2.142608822828710e-03 + 2.137279792340324e-03 + 2.131963215445541e-03 + 2.126659061301170e-03 + 2.121367299363035e-03 + 2.116087899310018e-03 + 2.110820830985273e-03 + 2.105566064252215e-03 + 2.100323568822542e-03 + 2.095093314356113e-03 + 2.089875271479949e-03 + 2.084669410319118e-03 + 2.079475699908646e-03 + 2.074294110902819e-03 + 2.069124614088778e-03 + 2.063967179294363e-03 + 2.058821776747180e-03 + 2.053688376991423e-03 + 2.048566950718572e-03 + 2.043457468582260e-03 + 2.038359901240009e-03 + 2.033274219398007e-03 + 2.028200393563254e-03 + 2.023138394473247e-03 + 2.018088193625467e-03 + 2.013049761808302e-03 + 2.008023069533293e-03 + 2.003008088023720e-03 + 1.998004788922133e-03 + 1.993013143739461e-03 + 1.988033123025423e-03 + 1.983064698401174e-03 + 1.978107841939004e-03 + 1.973162523959716e-03 + 1.968228716337500e-03 + 1.963306391971906e-03 + 1.958395521239848e-03 + 1.953496075620802e-03 + 1.948608028019931e-03 + 1.943731350228688e-03 + 1.938866013789267e-03 + 1.934011990485791e-03 + 1.929169252901841e-03 + 1.924337773155020e-03 + 1.919517522737516e-03 + 1.914708474346116e-03 + 1.909910600724645e-03 + 1.905123874118434e-03 + 1.900348266781407e-03 + 1.895583751238830e-03 + 1.890830300301618e-03 + 1.886087886140893e-03 + 1.881356481302734e-03 + 1.876636059328014e-03 + 1.871926593048255e-03 + 1.867228054886164e-03 + 1.862540417322874e-03 + 1.857863653843670e-03 + 1.853197738035545e-03 + 1.848542642643349e-03 + 1.843898340659710e-03 + 1.839264805482605e-03 + 1.834642010884087e-03 + 1.830029929675155e-03 + 1.825428534756660e-03 + 1.820837800826725e-03 + 1.816257700994342e-03 + 1.811688207883416e-03 + 1.807129296515363e-03 + 1.802580940478343e-03 + 1.798043112569654e-03 + 1.793515787775185e-03 + 1.788998939681262e-03 + 1.784492541016137e-03 + 1.779996567290557e-03 + 1.775510992946437e-03 + 1.771035790955467e-03 + 1.766570935188881e-03 + 1.762116400368900e-03 + 1.757672161650980e-03 + 1.753238193179788e-03 + 1.748814468721301e-03 + 1.744400962234815e-03 + 1.739997649147064e-03 + 1.735604504535336e-03 + 1.731221502449809e-03 + 1.726848617398671e-03 + 1.722485824273258e-03 + 1.718133098140551e-03 + 1.713790413411143e-03 + 1.709457744960287e-03 + 1.705135068710917e-03 + 1.700822359316501e-03 + 1.696519591326764e-03 + 1.692226740206531e-03 + 1.687943780998710e-03 + 1.683670689031842e-03 + 1.679407440586236e-03 + 1.675154010255336e-03 + 1.670910372590760e-03 + 1.666676504276520e-03 + 1.662452380680008e-03 + 1.658237976786625e-03 + 1.654033269138933e-03 + 1.649838233189823e-03 + 1.645652843894769e-03 + 1.641477077483747e-03 + 1.637310910181093e-03 + 1.633154317979306e-03 + 1.629007276710043e-03 + 1.624869761977525e-03 + 1.620741749539434e-03 + 1.616623216289868e-03 + 1.612514138626602e-03 + 1.608414492386588e-03 + 1.604324254066237e-03 + 1.600243399893093e-03 + 1.596171905775712e-03 + 1.592109748332882e-03 + 1.588056904380057e-03 + 1.584013350591343e-03 + 1.579979063015354e-03 + 1.575954018417919e-03 + 1.571938194458784e-03 + 1.567931567017785e-03 + 1.563934112240304e-03 + 1.559945807641685e-03 + 1.555966630779868e-03 + 1.551996558434039e-03 + 1.548035566441649e-03 + 1.544083632647983e-03 + 1.540140734902817e-03 + 1.536206849423688e-03 + 1.532281953055403e-03 + 1.528366023373284e-03 + 1.524459038476067e-03 + 1.520560975283225e-03 + 1.516671810636623e-03 + 1.512791522697568e-03 + 1.508920088807869e-03 + 1.505057486015793e-03 + 1.501203692209861e-03 + 1.497358685322736e-03 + 1.493522443062933e-03 + 1.489694942724099e-03 + 1.485876162194853e-03 + 1.482066079697174e-03 + 1.478264672890618e-03 + 1.474471919644568e-03 + 1.470687798121700e-03 + 1.466912286519041e-03 + 1.463145362594138e-03 + 1.459387003990816e-03 + 1.455637189563730e-03 + 1.451895897787254e-03 + 1.448163106500405e-03 + 1.444438793947980e-03 + 1.440722938760434e-03 + 1.437015519703072e-03 + 1.433316514691718e-03 + 1.429625901910583e-03 + 1.425943660193772e-03 + 1.422269768088744e-03 + 1.418604204318803e-03 + 1.414946947952337e-03 + 1.411297977567125e-03 + 1.407657271824714e-03 + 1.404024809794961e-03 + 1.400400570139807e-03 + 1.396784531434119e-03 + 1.393176672533590e-03 + 1.389576972970703e-03 + 1.385985412235932e-03 + 1.382401969107074e-03 + 1.378826622443783e-03 + 1.375259351219489e-03 + 1.371700134514839e-03 + 1.368148952079336e-03 + 1.364605783757036e-03 + 1.361070608632290e-03 + 1.357543405835987e-03 + 1.354024154621594e-03 + 1.350512834317403e-03 + 1.347009424934256e-03 + 1.343513906652181e-03 + 1.340026258589547e-03 + 1.336546459739890e-03 + 1.333074489680093e-03 + 1.329610329681042e-03 + 1.326153959375566e-03 + 1.322705357081586e-03 + 1.319264503327096e-03 + 1.315831378649060e-03 + 1.312405962942001e-03 + 1.308988235813027e-03 + 1.305578177302038e-03 + 1.302175767936687e-03 + 1.298780987783750e-03 + 1.295393816813521e-03 + 1.292014235092867e-03 + 1.288642222828844e-03 + 1.285277760581296e-03 + 1.281920829182064e-03 + 1.278571408463430e-03 + 1.275229478684235e-03 + 1.271895021211065e-03 + 1.268568016022571e-03 + 1.265248443161927e-03 + 1.261936283866222e-03 + 1.258631518851812e-03 + 1.255334128626978e-03 + 1.252044093890807e-03 + 1.248761395151665e-03 + 1.245486013113075e-03 + 1.242217929129610e-03 + 1.238957124307338e-03 + 1.235703579418827e-03 + 1.232457274959363e-03 + 1.229218191838193e-03 + 1.225986311430220e-03 + 1.222761615473843e-03 + 1.219544084856006e-03 + 1.216333699988417e-03 + 1.213130441964228e-03 + 1.209934292565758e-03 + 1.206745233676102e-03 + 1.203563245963205e-03 + 1.200388310525061e-03 + 1.197220409053557e-03 + 1.194059523052293e-03 + 1.190905633902454e-03 + 1.187758723052301e-03 + 1.184618772531461e-03 + 1.181485763720917e-03 + 1.178359677471923e-03 + 1.175240496495629e-03 + 1.172128202790389e-03 + 1.169022777016151e-03 + 1.165924201427151e-03 + 1.162832457974330e-03 + 1.159747527667428e-03 + 1.156669393342115e-03 + 1.153598037513975e-03 + 1.150533441195656e-03 + 1.147475586343000e-03 + 1.144424455192698e-03 + 1.141380029693999e-03 + 1.138342292070108e-03 + 1.135311224784675e-03 + 1.132286810371483e-03 + 1.129269030382949e-03 + 1.126257866687504e-03 + 1.123253302806332e-03 + 1.120255320585528e-03 + 1.117263901594027e-03 + 1.114279029333705e-03 + 1.111300685926414e-03 + 1.108328853214485e-03 + 1.105363515126287e-03 + 1.102404653695880e-03 + 1.099452250276090e-03 + 1.096506289065756e-03 + 1.093566752790314e-03 + 1.090633622975802e-03 + 1.087706882683815e-03 + 1.084786514992603e-03 + 1.081872502714538e-03 + 1.078964828755093e-03 + 1.076063476054719e-03 + 1.073168427526746e-03 + 1.070279665938792e-03 + 1.067397174442816e-03 + 1.064520936417689e-03 + 1.061650934087830e-03 + 1.058787150577005e-03 + 1.055929570192933e-03 + 1.053078175257412e-03 + 1.050232948596978e-03 + 1.047393874491941e-03 + 1.044560935952646e-03 + 1.041734115621369e-03 + 1.038913396581877e-03 + 1.036098763274602e-03 + 1.033290199394467e-03 + 1.030487686748966e-03 + 1.027691209748195e-03 + 1.024900752824401e-03 + 1.022116298137994e-03 + 1.019337829638554e-03 + 1.016565331581354e-03 + 1.013798786681050e-03 + 1.011038178744547e-03 + 1.008283492069452e-03 + 1.005534710312413e-03 + 1.002791817167788e-03 + 1.000054796401326e-03 + 9.973236317525795e-04 + 9.945983071579347e-04 + 9.918788066535795e-04 + 9.891651141399331e-04 + 9.864572135795289e-04 + 9.837550890187182e-04 + 9.810587245440681e-04 + 9.783681042165289e-04 + 9.756832121036981e-04 + 9.730040324093254e-04 + 9.703305493295432e-04 + 9.676627470403841e-04 + 9.650006098016114e-04 + 9.623441219373007e-04 + 9.596932677964791e-04 + 9.570480316324495e-04 + 9.544083978205768e-04 + 9.517743508934125e-04 + 9.491458752396962e-04 + 9.465229553012878e-04 + 9.439055756501852e-04 + 9.412937207895038e-04 + 9.386873752809525e-04 + 9.360865238076440e-04 + 9.334911509791107e-04 + 9.309012414140627e-04 + 9.283167798171848e-04 + 9.257377509839119e-04 + 9.231641396993918e-04 + 9.205959306774516e-04 + 9.180331088080401e-04 + 9.154756590138127e-04 + 9.129235660962607e-04 + 9.103768149701878e-04 + 9.078353906321772e-04 + 9.052992780955343e-04 + 9.027684623946166e-04 + 9.002429285800444e-04 + 8.977226617159664e-04 + 8.952076469091944e-04 + 8.926978693026045e-04 + 8.901933140640126e-04 + 8.876939664445818e-04 + 8.851998117353022e-04 + 8.827108351548252e-04 + 8.802270219825557e-04 + 8.777483575705740e-04 + 8.752748272927118e-04 + 8.728064165680979e-04 + 8.703431108522175e-04 + 8.678848955854838e-04 + 8.654317562117358e-04 + 8.629836782258149e-04 + 8.605406473168484e-04 + 8.581026490766350e-04 + 8.556696689660546e-04 + 8.532416927295966e-04 + 8.508187061075220e-04 + 8.484006947265324e-04 + 8.459876443379812e-04 + 8.435795407180884e-04 + 8.411763696276702e-04 + 8.387781169670006e-04 + 8.363847686436173e-04 + 8.339963104952486e-04 + 8.316127284703911e-04 + 8.292340085393665e-04 + 8.268601366269382e-04 + 8.244910987818749e-04 + 8.221268810991789e-04 + 8.197674696351961e-04 + 8.174128504795555e-04 + 8.150630097863373e-04 + 8.127179337987174e-04 + 8.103776086785577e-04 + 8.080420206116735e-04 + 8.057111559859151e-04 + 8.033850010442538e-04 + 8.010635420033148e-04 + 7.987467653572807e-04 + 7.964346575211490e-04 + 7.941272048473775e-04 + 7.918243938145987e-04 + 7.895262109139402e-04 + 7.872326426395918e-04 + 7.849436755404454e-04 + 7.826592961986925e-04 + 7.803794912312032e-04 + 7.781042473133076e-04 + 7.758335511109105e-04 + 7.735673892815593e-04 + 7.713057485643111e-04 + 7.690486157536814e-04 + 7.667959776727836e-04 + 7.645478211004869e-04 + 7.623041328912646e-04 + 7.600649000053854e-04 + 7.578301093264215e-04 + 7.555997477583347e-04 + 7.533738022910566e-04 + 7.511522599897612e-04 + 7.489351079282785e-04 + 7.467223331578882e-04 + 7.445139227962291e-04 + 7.423098639775247e-04 + 7.401101438263767e-04 + 7.379147496119391e-04 + 7.357236686066337e-04 + 7.335368879604144e-04 + 7.313543950177981e-04 + 7.291761771981462e-04 + 7.270022218267318e-04 + 7.248325162821272e-04 + 7.226670479949025e-04 + 7.205058044241288e-04 + 7.183487730730944e-04 + 7.161959414766152e-04 + 7.140472971809699e-04 + 7.119028277561113e-04 + 7.097625208231147e-04 + 7.076263641063239e-04 + 7.054943452576004e-04 + 7.033664519218169e-04 + 7.012426719956601e-04 + 6.991229932510109e-04 + 6.970074033540157e-04 + 6.948958902400331e-04 + 6.927884418689321e-04 + 6.906850461485944e-04 + 6.885856909689247e-04 + 6.864903643067344e-04 + 6.843990542306164e-04 + 6.823117487354689e-04 + 6.802284359113009e-04 + 6.781491039842488e-04 + 6.760737410664455e-04 + 6.740023352773578e-04 + 6.719348748282754e-04 + 6.698713480434448e-04 + 6.678117432465053e-04 + 6.657560487034911e-04 + 6.637042527655789e-04 + 6.616563438432147e-04 + 6.596123103782944e-04 + 6.575721408025738e-04 + 6.555358236048545e-04 + 6.535033473936704e-04 + 6.514747007198682e-04 + 6.494498721244171e-04 + 6.474288502266283e-04 + 6.454116237722280e-04 + 6.433981815196293e-04 + 6.413885120963034e-04 + 6.393826043225120e-04 + 6.373804471016686e-04 + 6.353820291728463e-04 + 6.333873394523912e-04 + 6.313963669651093e-04 + 6.294091005879305e-04 + 6.274255292885601e-04 + 6.254456421348147e-04 + 6.234694281911996e-04 + 6.214968766042923e-04 + 6.195279765738893e-04 + 6.175627172048796e-04 + 6.156010877068991e-04 + 6.136430774102346e-04 + 6.116886755862946e-04 + 6.097378715435904e-04 + 6.077906546697107e-04 + 6.058470144286753e-04 + 6.039069402835228e-04 + 6.019704216802507e-04 + 6.000374481409778e-04 + 5.981080092530985e-04 + 5.961820946588096e-04 + 5.942596940083503e-04 + 5.923407969721301e-04 + 5.904253932616448e-04 + 5.885134726736782e-04 + 5.866050250202793e-04 + 5.847000400980857e-04 + 5.827985078791194e-04 + 5.809004183470366e-04 + 5.790057613579966e-04 + 5.771145269606196e-04 + 5.752267052829598e-04 + 5.733422863841403e-04 + 5.714612604000550e-04 + 5.695836175305099e-04 + 5.677093480037018e-04 + 5.658384420678564e-04 + 5.639708900266142e-04 + 5.621066823022896e-04 + 5.602458092869138e-04 + 5.583882613744714e-04 + 5.565340290827777e-04 + 5.546831029664671e-04 + 5.528354736013446e-04 + 5.509911316015094e-04 + 5.491500676402182e-04 + 5.473122724461832e-04 + 5.454777367810608e-04 + 5.436464514412940e-04 + 5.418184072613321e-04 + 5.399935951226492e-04 + 5.381720060069473e-04 + 5.363536309736959e-04 + 5.345384609776805e-04 + 5.327264870731968e-04 + 5.309177004752346e-04 + 5.291120923593077e-04 + 5.273096539494221e-04 + 5.255103765544823e-04 + 5.237142514407170e-04 + 5.219212699733492e-04 + 5.201314236865307e-04 + 5.183447040146093e-04 + 5.165611024246747e-04 + 5.147806105331874e-04 + 5.130032200114061e-04 + 5.112289225530487e-04 + 5.094577098620987e-04 + 5.076895736854020e-04 + 5.059245058583464e-04 + 5.041624983517820e-04 + 5.024035430839573e-04 + 5.006476319990773e-04 + 4.988947572035529e-04 + 4.971449107942239e-04 + 4.953980848818115e-04 + 4.936542716805855e-04 + 4.919134634956966e-04 + 4.901756526846954e-04 + 4.884408316006080e-04 + 4.867089926403434e-04 + 4.849801282731475e-04 + 4.832542310892493e-04 + 4.815312937309208e-04 + 4.798113088560132e-04 + 4.780942690954599e-04 + 4.763801672259719e-04 + 4.746689961731605e-04 + 4.729607488395965e-04 + 4.712554181333483e-04 + 4.695529970142063e-04 + 4.678534786182833e-04 + 4.661568561056742e-04 + 4.644631226216267e-04 + 4.627722714285577e-04 + 4.610842958399921e-04 + 4.593991892076899e-04 + 4.577169450300335e-04 + 4.560375568336446e-04 + 4.543610181249096e-04 + 4.526873225594637e-04 + 4.510164638467393e-04 + 4.493484356950898e-04 + 4.476832319569833e-04 + 4.460208465382815e-04 + 4.443612733350173e-04 + 4.427045064285867e-04 + 4.410505399510805e-04 + 4.393993679504339e-04 + 4.377509846774214e-04 + 4.361053844834223e-04 + 4.344625616662297e-04 + 4.328225106365193e-04 + 4.311852259097922e-04 + 4.295507020701359e-04 + 4.279189337521271e-04 + 4.262899156467061e-04 + 4.246636425301464e-04 + 4.230401092565931e-04 + 4.214193107478168e-04 + 4.198012419839599e-04 + 4.181858979868060e-04 + 4.165732738692198e-04 + 4.149633649793705e-04 + 4.133561665739344e-04 + 4.117516738453971e-04 + 4.101498823326724e-04 + 4.085507876181731e-04 + 4.069543852399522e-04 + 4.053606707914893e-04 + 4.037696400086752e-04 + 4.021812887746215e-04 + 4.005956129436248e-04 + 3.990126084760660e-04 + 3.974322714846641e-04 + 3.958545980293214e-04 + 3.942795842513983e-04 + 3.927072264688036e-04 + 3.911375211195356e-04 + 3.895704646516968e-04 + 3.880060534869329e-04 + 3.864442842922655e-04 + 3.848851538066537e-04 + 3.833286587063809e-04 + 3.817747958651508e-04 + 3.802235622593628e-04 + 3.786749548688228e-04 + 3.771289708205180e-04 + 3.755856073392733e-04 + 3.740448616816441e-04 + 3.725067311649692e-04 + 3.709712132043737e-04 + 3.694383053790672e-04 + 3.679080053579325e-04 + 3.663803108503057e-04 + 3.648552195606523e-04 + 3.633327293646475e-04 + 3.618128382932607e-04 + 3.602955444344858e-04 + 3.587808459078391e-04 + 3.572687408998931e-04 + 3.557592277792442e-04 + 3.542523049927096e-04 + 3.527479710408145e-04 + 3.512462245019904e-04 + 3.497470640500036e-04 + 3.482504884770882e-04 + 3.467564967437580e-04 + 3.452650877985240e-04 + 3.437762605764859e-04 + 3.422900143250168e-04 + 3.408063483640538e-04 + 3.393252619896345e-04 + 3.378467546103840e-04 + 3.363708257653936e-04 + 3.348974751341996e-04 + 3.334267024660963e-04 + 3.319585075646510e-04 + 3.304928903038992e-04 + 3.290298507212495e-04 + 3.275693889604049e-04 + 3.261115052402690e-04 + 3.246561999078441e-04 + 3.232034733603981e-04 + 3.217533259984899e-04 + 3.203057585048498e-04 + 3.188607716794152e-04 + 3.174183662346357e-04 + 3.159785430822741e-04 + 3.145413032833238e-04 + 3.131066479369465e-04 + 3.116745782136557e-04 + 3.102450954058189e-04 + 3.088182010197684e-04 + 3.073938965650610e-04 + 3.059721835802734e-04 + 3.045530637916020e-04 + 3.031365390386899e-04 + 3.017226112552691e-04 + 3.003112824793533e-04 + 2.989025548234045e-04 + 2.974964304955006e-04 + 2.960929118913988e-04 + 2.946920014422941e-04 + 2.932937016150965e-04 + 2.918980151023185e-04 + 2.905049446767149e-04 + 2.891144931550728e-04 + 2.877266634923031e-04 + 2.863414587568181e-04 + 2.849588821248430e-04 + 2.835789368717610e-04 + 2.822016263526234e-04 + 2.808269540128114e-04 + 2.794549234525530e-04 + 2.780855383858511e-04 + 2.767188026160350e-04 + 2.753547199733251e-04 + 2.739932944362576e-04 + 2.726345302253411e-04 + 2.712784314751994e-04 + 2.699250024118205e-04 + 2.685742475595017e-04 + 2.672261714415124e-04 + 2.658807786371782e-04 + 2.645380739000219e-04 + 2.631980619957597e-04 + 2.618607478073471e-04 + 2.605261365239288e-04 + 2.591942332540738e-04 + 2.578650431168888e-04 + 2.565385715181067e-04 + 2.552148239188000e-04 + 2.538938058269625e-04 + 2.525755228940477e-04 + 2.512599808919393e-04 + 2.499471856899045e-04 + 2.486371432244064e-04 + 2.473298595107682e-04 + 2.460253406646765e-04 + 2.447235929605613e-04 + 2.434246227773826e-04 + 2.421284365723855e-04 + 2.408350408491505e-04 + 2.395444422583646e-04 + 2.382566475978551e-04 + 2.369716636126905e-04 + 2.356894972066169e-04 + 2.344101555067014e-04 + 2.331336455922197e-04 + 2.318599746393059e-04 + 2.305891500038487e-04 + 2.293211790903458e-04 + 2.280560693749351e-04 + 2.267938284406659e-04 + 2.255344639796373e-04 + 2.242779837481179e-04 + 2.230243955584571e-04 + 2.217737074088738e-04 + 2.205259273750273e-04 + 2.192810635194828e-04 + 2.180391240377155e-04 + 2.168001172473318e-04 + 2.155640515683406e-04 + 2.143309354202995e-04 + 2.131007772856537e-04 + 2.118735858306198e-04 + 2.106493698084787e-04 + 2.094281380089542e-04 + 2.082098992208740e-04 + 2.069946624015073e-04 + 2.057824366286796e-04 + 2.045732309577213e-04 + 2.033670545521807e-04 + 2.021639166762670e-04 + 2.009638266139778e-04 + 1.997667937615743e-04 + 1.985728276099416e-04 + 1.973819376249420e-04 + 1.961941334186818e-04 + 1.950094247288422e-04 + 1.938278211445808e-04 + 1.926493324216112e-04 + 1.914739685443153e-04 + 1.903017394244089e-04 + 1.891326549660665e-04 + 1.879667251315557e-04 + 1.868039600691931e-04 + 1.856443699312781e-04 + 1.844879648170397e-04 + 1.833347550402995e-04 + 1.821847509305592e-04 + 1.810379627269367e-04 + 1.798944008330572e-04 + 1.787540757117569e-04 + 1.776169978023503e-04 + 1.764831776083264e-04 + 1.753526257075039e-04 + 1.742253527510645e-04 + 1.731013693254543e-04 + 1.719806860311682e-04 + 1.708633135911149e-04 + 1.697492627671219e-04 + 1.686385443331759e-04 + 1.675311690584120e-04 + 1.664271477052953e-04 + 1.653264910845736e-04 + 1.642292101438652e-04 + 1.631353157524277e-04 + 1.620448187436031e-04 + 1.609577300754615e-04 + 1.598740606888992e-04 + 1.587938214812250e-04 + 1.577170233258566e-04 + 1.566436772168694e-04 + 1.555737942159133e-04 + 1.545073851968179e-04 + 1.534444610998845e-04 + 1.523850329588589e-04 + 1.513291117056277e-04 + 1.502767082718022e-04 + 1.492278336091406e-04 + 1.481824986061289e-04 + 1.471407142013266e-04 + 1.461024913960903e-04 + 1.450678410475480e-04 + 1.440367739871709e-04 + 1.430093010797408e-04 + 1.419854331666308e-04 + 1.409651810501559e-04 + 1.399485554884026e-04 + 1.389355672434459e-04 + 1.379262270311977e-04 + 1.369205454852166e-04 + 1.359185332657421e-04 + 1.349202010239166e-04 + 1.339255593445051e-04 + 1.329346186642912e-04 + 1.319473893926901e-04 + 1.309638820305585e-04 + 1.299841069283569e-04 + 1.290080743627276e-04 + 1.280357946577360e-04 + 1.270672779908064e-04 + 1.261025344295187e-04 + 1.251415740258344e-04 + 1.241844068414831e-04 + 1.232310428585276e-04 + 1.222814917974582e-04 + 1.213357634573326e-04 + 1.203938676644921e-04 + 1.194558139769228e-04 + 1.185216119071049e-04 + 1.175912709437735e-04 + 1.166648004395201e-04 + 1.157422096820540e-04 + 1.148235078941047e-04 + 1.139087041565015e-04 + 1.129978074560730e-04 + 1.120908266963163e-04 + 1.111877706801771e-04 + 1.102886481165339e-04 + 1.093934676008822e-04 + 1.085022375478793e-04 + 1.076149663238430e-04 + 1.067316622735248e-04 + 1.058523335072715e-04 + 1.049769880021785e-04 + 1.041056336506420e-04 + 1.032382782134568e-04 + 1.023749293560659e-04 + 1.015155946454073e-04 + 1.006602814254268e-04 + 9.980899691604087e-05 + 9.896174827822380e-05 + 9.811854249648769e-05 + 9.727938640362722e-05 + 9.644428669167931e-05 + 9.561324990949941e-05 + 9.478628247235907e-05 + 9.396339064407664e-05 + 9.314458052650697e-05 + 9.232985807344924e-05 + 9.151922908266137e-05 + 9.071269919463392e-05 + 8.991027389908417e-05 + 8.911195851702552e-05 + 8.831775819982511e-05 + 8.752767793866873e-05 + 8.674172256023528e-05 + 8.595989672073575e-05 + 8.518220490590348e-05 + 8.440865141920385e-05 + 8.363924039733809e-05 + 8.287397580722622e-05 + 8.211286142104977e-05 + 8.135590084051729e-05 + 8.060309749193613e-05 + 7.985445459658365e-05 + 7.910997520302950e-05 + 7.836966218298747e-05 + 7.763351820320998e-05 + 7.690154574559998e-05 + 7.617374709914362e-05 + 7.545012436145964e-05 + 7.473067944430294e-05 + 7.401541405207780e-05 + 7.330432968888297e-05 + 7.259742767376570e-05 + 7.189470911942744e-05 + 7.119617492698978e-05 + 7.050182580949816e-05 + 6.981166227552030e-05 + 6.912568461899398e-05 + 6.844389294104750e-05 + 6.776628713300132e-05 + 6.709286687130013e-05 + 6.642363163388969e-05 + 6.575858067871575e-05 + 6.509771305493562e-05 + 6.444102761503343e-05 + 6.378852298738557e-05 + 6.314019758583242e-05 + 6.249604962295056e-05 + 6.185607708979005e-05 + 6.122027775903875e-05 + 6.058864919749181e-05 + 5.996118875684596e-05 + 5.933789356597989e-05 + 5.871876053888907e-05 + 5.810378637807827e-05 + 5.749296757228591e-05 + 5.688630039241354e-05 + 5.628378087841946e-05 + 5.568540486517338e-05 + 5.509116797959273e-05 + 5.450106561933422e-05 + 5.391509296529475e-05 + 5.333324497665832e-05 + 5.275551640753726e-05 + 5.218190179953343e-05 + 5.161239545977182e-05 + 5.104699148146081e-05 + 5.048568375913861e-05 + 4.992846596763329e-05 + 4.937533154817934e-05 + 4.882627374147808e-05 + 4.828128557792042e-05 + 4.774035986717692e-05 + 4.720348921279551e-05 + 4.667066599018748e-05 + 4.614188237688400e-05 + 4.561713035194944e-05 + 4.509640165438987e-05 + 4.457968783032909e-05 + 4.406698023190481e-05 + 4.355826996891768e-05 + 4.305354796420506e-05 + 4.255280495560636e-05 + 4.205603144616347e-05 + 4.156321774032957e-05 + 4.107435395613752e-05 + 4.058942999665175e-05 + 4.010843556869507e-05 + 3.963136019085871e-05 + 3.915819316952545e-05 + 3.868892361719641e-05 + 3.822354046226270e-05 + 3.776203244031561e-05 + 3.730438809005640e-05 + 3.685059575689182e-05 + 3.640064360230198e-05 + 3.595451960373741e-05 + 3.551221155134442e-05 + 3.507370705450421e-05 + 3.463899354241650e-05 + 3.420805825588243e-05 + 3.378088825986720e-05 + 3.335747045272196e-05 + 3.293779155463552e-05 + 3.252183811026268e-05 + 3.210959649877579e-05 + 3.170105292073684e-05 + 3.129619341367949e-05 + 3.089500386055728e-05 + 3.049746997239612e-05 + 3.010357730585059e-05 + 2.971331126487755e-05 + 2.932665707619367e-05 + 2.894359982344077e-05 + 2.856412445132613e-05 + 2.818821573877814e-05 + 2.781585831987375e-05 + 2.744703669454755e-05 + 2.708173520948728e-05 + 2.671993807124836e-05 + 2.636162935767626e-05 + 2.600679300301263e-05 + 2.565541280257304e-05 + 2.530747242805460e-05 + 2.496295542635910e-05 + 2.462184521206604e-05 + 2.428412507785163e-05 + 2.394977819771233e-05 + 2.361878762181457e-05 + 2.329113628448998e-05 + 2.296680701293541e-05 + 2.264578251757474e-05 + 2.232804539557172e-05 + 2.201357814530585e-05 + 2.170236315904943e-05 + 2.139438272306276e-05 + 2.108961903561866e-05 + 2.078805419745760e-05 + 2.048967020582218e-05 + 2.019444897050880e-05 + 1.990237231614296e-05 + 1.961342197777572e-05 + 1.932757961462368e-05 + 1.904482680353188e-05 + 1.876514502948172e-05 + 1.848851571515060e-05 + 1.821492021640795e-05 + 1.794433980831370e-05 + 1.767675569461099e-05 + 1.741214902258527e-05 + 1.715050088166273e-05 + 1.689179228451716e-05 + 1.663600419203502e-05 + 1.638311752659296e-05 + 1.613311314360082e-05 + 1.588597184706167e-05 + 1.564167440067926e-05 + 1.540020151829502e-05 + 1.516153387453479e-05 + 1.492565211244357e-05 + 1.469253682958783e-05 + 1.446216858599219e-05 + 1.423452791421707e-05 + 1.400959531801727e-05 + 1.378735127470914e-05 + 1.356777623611474e-05 + 1.335085063337062e-05 + 1.313655487876277e-05 + 1.292486936494610e-05 + 1.271577446639333e-05 + 1.250925054517824e-05 + 1.230527796605363e-05 + 1.210383708165599e-05 + 1.190490823144681e-05 + 1.170847175649016e-05 + 1.151450799717159e-05 + 1.132299729345123e-05 + 1.113391999104486e-05 + 1.094725644586371e-05 + 1.076298702423590e-05 + 1.058109209097755e-05 + 1.040155202830912e-05 + 1.022434724511555e-05 + 1.004945815519835e-05 + 9.876865191434875e-06 + 9.706548817576976e-06 + 9.538489515829050e-06 + 9.372667791395497e-06 + 9.209064181113714e-06 + 9.047659251528417e-06 + 8.888433598428113e-06 + 8.731367852817854e-06 + 8.576442682615395e-06 + 8.423638791088146e-06 + 8.272936922653283e-06 + 8.124317863654203e-06 + 7.977762440936675e-06 + 7.833251528895281e-06 + 7.690766049713759e-06 + 7.550286971453687e-06 + 7.411795314787993e-06 + 7.275272152381047e-06 + 7.140698608042407e-06 + 7.008055865069554e-06 + 6.877325162999093e-06 + 6.748487797069182e-06 + 6.621525126924672e-06 + 6.496418573295794e-06 + 6.373149617974847e-06 + 6.251699810845691e-06 + 6.132050767139283e-06 + 6.014184168887862e-06 + 5.898081770597224e-06 + 5.783725394973654e-06 + 5.671096936050662e-06 + 5.560178365641361e-06 + 5.450951726966341e-06 + 5.343399138917566e-06 + 5.237502802602254e-06 + 5.133244993336976e-06 + 5.030608065950253e-06 + 4.929574461382145e-06 + 4.830126698086031e-06 + 4.732247378331277e-06 + 4.635919192753656e-06 + 4.541124912789582e-06 + 4.447847398958468e-06 + 4.356069602328335e-06 + 4.265774557056776e-06 + 4.176945389932598e-06 + 4.089565320281935e-06 + 4.003617653697645e-06 + 3.919085793399028e-06 + 3.835953236362346e-06 + 3.754203567594348e-06 + 3.673820472678765e-06 + 3.594787733829004e-06 + 3.517089224074456e-06 + 3.440708918621393e-06 + 3.365630891050476e-06 + 3.291839308866544e-06 + 3.219318444550688e-06 + 3.148052669614368e-06 + 3.078026451876596e-06 + 3.009224366838337e-06 + 2.941631088840265e-06 + 2.875231390541817e-06 + 2.810010156134118e-06 + 2.745952369256776e-06 + 2.683043113446972e-06 + 2.621267584374269e-06 + 2.560611078236376e-06 + 2.501058994098514e-06 + 2.442596843868032e-06 + 2.385210240033010e-06 + 2.328884899906223e-06 + 2.273606655048426e-06 + 2.219361438179688e-06 + 2.166135288678882e-06 + 2.113914360085187e-06 + 2.062684907096663e-06 + 2.012433292648363e-06 + 1.963145994708785e-06 + 1.914809593193956e-06 + 1.867410777738679e-06 + 1.820936351687259e-06 + 1.775373220609589e-06 + 1.730708401732302e-06 + 1.686929024947410e-06 + 1.644022323067757e-06 + 1.601975642837270e-06 + 1.560776441656341e-06 + 1.520412279298016e-06 + 1.480870830315665e-06 + 1.442139880698395e-06 + 1.404207319625165e-06 + 1.367061149777226e-06 + 1.330689483155573e-06 + 1.295080535963615e-06 + 1.260222640873472e-06 + 1.226104237141460e-06 + 1.192713867093549e-06 + 1.160040189500492e-06 + 1.128071969424555e-06 + 1.096798076008267e-06 + 1.066207493417804e-06 + 1.036289310659725e-06 + 1.007032721493895e-06 + 9.784270338592895e-07 + 9.504616588874799e-07 + 9.231261128777845e-07 + 8.964100256766087e-07 + 8.703031286825232e-07 + 8.447952585150839e-07 + 8.198763641874936e-07 + 7.955364948286083e-07 + 7.717658049346632e-07 + 7.485545598914059e-07 + 7.258931238786546e-07 + 7.037719665410901e-07 + 6.821816664988581e-07 + 6.611128998791421e-07 + 6.405564483055948e-07 + 6.205032003278225e-07 + 6.009441408121614e-07 + 5.818703600152187e-07 + 5.632730528626383e-07 + 5.451435094097432e-07 + 5.274731247677268e-07 + 5.102533965000488e-07 + 4.934759162480692e-07 + 4.771323800991179e-07 + 4.612145841662162e-07 + 4.457144176881476e-07 + 4.306238737382497e-07 + 4.159350428538716e-07 + 4.016401077051372e-07 + 3.877313539402903e-07 + 3.742011622647174e-07 + 3.610420046499709e-07 + 3.482464547968944e-07 + 3.358071790150475e-07 + 3.237169340794661e-07 + 3.119685770955318e-07 + 3.005550554375413e-07 + 2.894694062090586e-07 + 2.787047650882795e-07 + 2.682543557659438e-07 + 2.581114909968296e-07 + 2.482695801165890e-07 + 2.387221182727572e-07 + 2.294626890008751e-07 + 2.204849703818711e-07 + 2.117827241548630e-07 + 2.033497996067267e-07 + 1.951801384624956e-07 + 1.872677641420447e-07 + 1.796067867093452e-07 + 1.721914062527642e-07 + 1.650159027896018e-07 + 1.580746421942365e-07 + 1.513620776690125e-07 + 1.448727406655565e-07 + 1.386012477684331e-07 + 1.325423000867771e-07 + 1.266906752868051e-07 + 1.210412352836648e-07 + 1.155889239131470e-07 + 1.103287600176973e-07 + 1.052558455547364e-07 + 1.003653617115032e-07 + 9.565256321109978e-08 + 9.111278671292873e-08 + 8.674144556415159e-08 + 8.253402527034383e-08 + 7.848609177536523e-08 + 7.459328520671134e-08 + 7.085131661573615e-08 + 6.725597593242166e-08 + 6.380312478868793e-08 + 6.048869454868003e-08 + 5.730869376312298e-08 + 5.425920030057914e-08 + 5.133636064443935e-08 + 4.853639660958214e-08 + 4.585559704969457e-08 + 4.329031836991616e-08 + 4.083699031045398e-08 + 3.849210751108346e-08 + 3.625223113812888e-08 + 3.411399355038575e-08 + 3.207408998824199e-08 + 3.012928121511996e-08 + 2.827639696078167e-08 + 2.651232793166280e-08 + 2.483402934338396e-08 + 2.323852311474514e-08 + 2.172289034680298e-08 + 2.028427559044146e-08 + 1.891988778877689e-08 + 1.762699339728036e-08 + 1.640292125402531e-08 + 1.524506224991720e-08 + 1.415086320949184e-08 + 1.311783222446413e-08 + 1.214353712508316e-08 + 1.122560019257377e-08 + 1.036170378687137e-08 + 9.549587722603005e-09 + 8.787044877843281e-09 + 8.071926961605364e-09 + 7.402140903161946e-09 + 6.775645388472587e-09 + 6.190456604129221e-09 + 5.644643792323680e-09 + 5.136326726146161e-09 + 4.663681262833891e-09 + 4.224934232596794e-09 + 3.818361845837701e-09 + 3.442294891302550e-09 + 3.095113141246544e-09 + 2.775244665814773e-09 + 2.481170514027403e-09 + 2.211418834557044e-09 + 1.964565051498559e-09 + 1.739235878927056e-09 + 1.534103359980556e-09 + 1.347885831336700e-09 + 1.179351163642234e-09 + 1.027310894648576e-09 + 8.906218977827446e-10 + 7.681887799049897e-10 + 6.589582548472836e-10 + 5.619214238374888e-10 + 4.761152985830568e-10 + 4.006175343477256e-10 + 3.345492227248809e-10 + 2.770755362128679e-10 + 2.274009179016229e-10 + 1.847722840116674e-10 + 1.484788129161787e-10 + 1.178476648704315e-10 + 9.224748788184573e-11 + 7.108739902161543e-11 + 5.381328706422649e-11 + 3.991151299277479e-11 + 2.890715266694438e-11 + 2.036091648096713e-11 + 1.387293445657948e-11 + 9.080348320515963e-12 + 5.654863833225597e-12 + 3.306507674167889e-12 + 1.780689492983021e-12 + 8.563646514161430e-13 + 3.496037276049943e-13 + 1.104943293034196e-13 + 2.161027650041889e-14 + 5.028049336448720e-16 + 0.000000000000000e+00 + 0.000000000000000e+00 + 7.485272593961791e+04 + 1.493519318697679e+05 + 2.234970831294996e+05 + 2.972876533345640e+05 + 3.707231243774131e+05 + 4.438029864272003e+05 + 5.165267379297798e+05 + 5.888938856077072e+05 + 6.609039444602393e+05 + 7.325564377633340e+05 + 8.038508970696502e+05 + 8.747868622085482e+05 + 9.453638812860892e+05 + 1.015581510685036e+06 + 1.085439315064852e+06 + 1.154936867361703e+06 + 1.224073748788454e+06 + 1.292849548834672e+06 + 1.361263865266626e+06 + 1.429316304127287e+06 + 1.497006479736322e+06 + 1.564334014690106e+06 + 1.631298539861710e+06 + 1.697899694400910e+06 + 1.764137125734180e+06 + 1.830010489564698e+06 + 1.895519449872339e+06 + 1.960663678913685e+06 + 2.025442857222013e+06 + 2.089856673607306e+06 + 2.153904825156247e+06 + 2.217587017232217e+06 + 2.280902963475303e+06 + 2.343852385802290e+06 + 2.406435014406665e+06 + 2.468650587758616e+06 + 2.530498852605031e+06 + 2.591979563969503e+06 + 2.653092485152322e+06 + 2.713837387730482e+06 + 2.774214051557675e+06 + 2.834222264764299e+06 + 2.893861823757447e+06 + 2.953132533220919e+06 + 3.012034206115212e+06 + 3.070566663677527e+06 + 3.128729735421764e+06 + 3.186523259138526e+06 + 3.243947080895115e+06 + 3.301001055035538e+06 + 3.357685044180497e+06 + 3.413998919227402e+06 + 3.469942559350358e+06 + 3.525515852000176e+06 + 3.580718692904367e+06 + 3.635550986067140e+06 + 3.690012643769410e+06 + 3.744103586568788e+06 + 3.797823743299592e+06 + 3.851173051072835e+06 + 3.904151455276238e+06 + 3.956758909574216e+06 + 4.008995375907890e+06 + 4.060860824495079e+06 + 4.112355233830309e+06 + 4.163478590684799e+06 + 4.214230890106475e+06 + 4.264612135419963e+06 + 4.314622338226588e+06 + 4.364261518404378e+06 + 4.413529704108060e+06 + 4.462426931769069e+06 + 4.510953246095533e+06 + 4.559108700072286e+06 + 4.606893354960858e+06 + 4.654307280299488e+06 + 4.701350553903108e+06 + 4.748023261863358e+06 + 4.794325498548575e+06 + 4.840257366603798e+06 + 4.885818976950768e+06 + 4.931010448787929e+06 + 4.975831909590418e+06 + 5.020283495110085e+06 + 5.064365349375471e+06 + 5.108077624691823e+06 + 5.151420481641092e+06 + 5.194394089081923e+06 + 5.236998624149668e+06 + 5.279234272256376e+06 + 5.321101227090800e+06 + 5.362599690618395e+06 + 5.403729873081312e+06 + 5.444491992998408e+06 + 5.484886277165242e+06 + 5.524912960654069e+06 + 5.564572286813851e+06 + 5.603864507270245e+06 + 5.642789881925615e+06 + 5.681348678959022e+06 + 5.719541174826232e+06 + 5.757367654259708e+06 + 5.794828410268617e+06 + 5.831923744138825e+06 + 5.868653965432902e+06 + 5.905019391990117e+06 + 5.941020349926441e+06 + 5.976657173634544e+06 + 6.011930205783804e+06 + 6.046839797320290e+06 + 6.081386307466779e+06 + 6.115570103722748e+06 + 6.149391561864376e+06 + 6.182851065944540e+06 + 6.215949008292822e+06 + 6.248685789515501e+06 + 6.281061818495561e+06 + 6.313077512392686e+06 + 6.344733296643257e+06 + 6.376029604960365e+06 + 6.406966879333793e+06 + 6.437545570030033e+06 + 6.467766135592271e+06 + 6.497629042840399e+06 + 6.527134766871008e+06 + 6.556283791057392e+06 + 6.585076607049545e+06 + 6.613513714774162e+06 + 6.641595622434638e+06 + 6.669322846511072e+06 + 6.696695911760264e+06 + 6.723715351215711e+06 + 6.750381706187615e+06 + 6.776695526262878e+06 + 6.802657369305105e+06 + 6.828267801454599e+06 + 6.853527397128366e+06 + 6.878436739020114e+06 + 6.902996418100249e+06 + 6.927207033615881e+06 + 6.951069193090819e+06 + 6.974583512325577e+06 + 6.997750615397365e+06 + 7.020571134660101e+06 + 7.043045710744397e+06 + 7.065174992557568e+06 + 7.086959637283633e+06 + 7.108400310383311e+06 + 7.129497685594021e+06 + 7.150252444929884e+06 + 7.170665278681723e+06 + 7.190736885417059e+06 + 7.210467971980117e+06 + 7.229859253491821e+06 + 7.248911453349800e+06 + 7.267625303228384e+06 + 7.286001543078595e+06 + 7.304040921128170e+06 + 7.321744193881537e+06 + 7.339112126119829e+06 + 7.356145490900878e+06 + 7.372845069559221e+06 + 7.389211651706094e+06 + 7.405246035229432e+06 + 7.420949026293878e+06 + 7.436321439340766e+06 + 7.451364097088138e+06 + 7.466077830530737e+06 + 7.480463478940005e+06 + 7.494521889864086e+06 + 7.508253919127826e+06 + 7.521660430832772e+06 + 7.534742297357169e+06 + 7.547500399355968e+06 + 7.559935625760819e+06 + 7.572048873780073e+06 + 7.583841048898782e+06 + 7.595313064878696e+06 + 7.606465843758276e+06 + 7.617300315852673e+06 + 7.627817419753745e+06 + 7.638018102330050e+06 + 7.647903318726848e+06 + 7.657474032366097e+06 + 7.666731214946462e+06 + 7.675675846443305e+06 + 7.684308915108687e+06 + 7.692631417471377e+06 + 7.700644358336839e+06 + 7.708348750787240e+06 + 7.715745616181449e+06 + 7.722835984155037e+06 + 7.729620892620270e+06 + 7.736101387766127e+06 + 7.742278524058277e+06 + 7.748153364239094e+06 + 7.753726979327655e+06 + 7.759000448619737e+06 + 7.763974859687817e+06 + 7.768651308381077e+06 + 7.773030898825390e+06 + 7.777114743423343e+06 + 7.780903962854218e+06 + 7.784399686073998e+06 + 7.787603050315368e+06 + 7.790515201087713e+06 + 7.793137292177119e+06 + 7.795470485646380e+06 + 7.797515951834979e+06 + 7.799274869359110e+06 + 7.800748425111664e+06 + 7.801937814262233e+06 + 7.802844240257111e+06 + 7.803468914819297e+06 + 7.803813057948484e+06 + 7.803877897921070e+06 + 7.803664671290156e+06 + 7.803174622885538e+06 + 7.802409005813722e+06 + 7.801369081457905e+06 + 7.800056119477995e+06 + 7.798471397810592e+06 + 7.796616202669007e+06 + 7.794491828543244e+06 + 7.792099578200010e+06 + 7.789440762682715e+06 + 7.786516701311473e+06 + 7.783328721683091e+06 + 7.779878159671083e+06 + 7.776166359425665e+06 + 7.772194673373749e+06 + 7.767964462218953e+06 + 7.763477094941595e+06 + 7.758733948798692e+06 + 7.753736409323964e+06 + 7.748485870327833e+06 + 7.742983733897421e+06 + 7.737231410396548e+06 + 7.731230318465743e+06 + 7.724981885022229e+06 + 7.718487545259933e+06 + 7.711748742649483e+06 + 7.704766928938209e+06 + 7.697543564150140e+06 + 7.690080116586007e+06 + 7.682378062823243e+06 + 7.674438887715982e+06 + 7.666264084395060e+06 + 7.657855154268012e+06 + 7.649213607019073e+06 + 7.640340960609185e+06 + 7.631238741275986e+06 + 7.621908483533815e+06 + 7.612351730173716e+06 + 7.602570032263434e+06 + 7.592564949147409e+06 + 7.582338048446788e+06 + 7.571890906059416e+06 + 7.561225106159844e+06 + 7.550342241199316e+06 + 7.539243911905785e+06 + 7.527931727283904e+06 + 7.516407304615024e+06 + 7.504672269457198e+06 + 7.492728241314434e+06 + 7.480576638153253e+06 + 7.468218723741564e+06 + 7.455655760425863e+06 + 7.442889013018662e+06 + 7.429919748798485e+06 + 7.416749237509867e+06 + 7.403378751363355e+06 + 7.389809565035504e+06 + 7.376042955668893e+06 + 7.362080202872100e+06 + 7.347922588719724e+06 + 7.333571397752370e+06 + 7.319027916976659e+06 + 7.304293435865226e+06 + 7.289369246356713e+06 + 7.274256642855777e+06 + 7.258956922233087e+06 + 7.243471383825325e+06 + 7.227801329435183e+06 + 7.211948063331366e+06 + 7.195912892248592e+06 + 7.179697125387593e+06 + 7.163302074415106e+06 + 7.146729053463890e+06 + 7.129979379132709e+06 + 7.113054370486340e+06 + 7.095955349055575e+06 + 7.078683638837219e+06 + 7.061240566294081e+06 + 7.043627460354994e+06 + 7.025845652414794e+06 + 7.007896476334333e+06 + 6.989781268440476e+06 + 6.971501367526096e+06 + 6.953058114850082e+06 + 6.934452854137335e+06 + 6.915686931578767e+06 + 6.896761695831302e+06 + 6.877678498017876e+06 + 6.858438691727439e+06 + 6.839043633014950e+06 + 6.819494680401385e+06 + 6.799793194873727e+06 + 6.779940539884974e+06 + 6.759938081354136e+06 + 6.739787187666233e+06 + 6.719489229672301e+06 + 6.699045580689385e+06 + 6.678457616500544e+06 + 6.657726715354848e+06 + 6.636854257967380e+06 + 6.615841627519235e+06 + 6.594690209657516e+06 + 6.573401392495350e+06 + 6.551976566611862e+06 + 6.530417125052197e+06 + 6.508724463327511e+06 + 6.486899979414972e+06 + 6.464945073757762e+06 + 6.442861149265066e+06 + 6.420649611312096e+06 + 6.398311867740063e+06 + 6.375849328856199e+06 + 6.353263407433745e+06 + 6.330555518711952e+06 + 6.307727080396090e+06 + 6.284779512657427e+06 + 6.261714238133261e+06 + 6.238532681926889e+06 + 6.215236271607627e+06 + 6.191826437210800e+06 + 6.168304611237747e+06 + 6.144672228655818e+06 + 6.120930726898375e+06 + 6.097081545864792e+06 + 6.073126127920459e+06 + 6.049065917896771e+06 + 6.024902363091142e+06 + 6.000636913266994e+06 + 5.976271020653763e+06 + 5.951806139946896e+06 + 5.927243728307854e+06 + 5.902585245364108e+06 + 5.877832153209144e+06 + 5.852985916402456e+06 + 5.828048001969552e+06 + 5.803019879401957e+06 + 5.777903020657199e+06 + 5.752698900158828e+06 + 5.727408994796395e+06 + 5.702034783925475e+06 + 5.676577749367647e+06 + 5.651039375410506e+06 + 5.625421148807654e+06 + 5.599724558778713e+06 + 5.573951097009313e+06 + 5.548102257651095e+06 + 5.522179537321717e+06 + 5.496184435104840e+06 + 5.470118452550147e+06 + 5.443983093673326e+06 + 5.417779864956085e+06 + 5.391510275346133e+06 + 5.365175836257203e+06 + 5.338778061569033e+06 + 5.312318467627374e+06 + 5.285798573243992e+06 + 5.259219899696662e+06 + 5.232583970729172e+06 + 5.205892312551324e+06 + 5.179146453838928e+06 + 5.152347925733812e+06 + 5.125498261843814e+06 + 5.098598998242779e+06 + 5.071651673470572e+06 + 5.044657828533064e+06 + 5.017619006902143e+06 + 4.990536754515706e+06 + 4.963412619777663e+06 + 4.936248153557934e+06 + 4.909044909192459e+06 + 4.881804442483181e+06 + 4.854528311698059e+06 + 4.827218077571064e+06 + 4.799875303302180e+06 + 4.772501554557402e+06 + 4.745098399468737e+06 + 4.717667408634203e+06 + 4.690210155117837e+06 + 4.662728214449679e+06 + 4.635223164625784e+06 + 4.607696586108224e+06 + 4.580150061825077e+06 + 4.552585177170437e+06 + 4.525003520004408e+06 + 4.497406680653105e+06 + 4.469796251908661e+06 + 4.442173829029216e+06 + 4.414541009738924e+06 + 4.386899394227949e+06 + 4.359250585152469e+06 + 4.331596187634676e+06 + 4.303937809262771e+06 + 4.276277060090966e+06 + 4.248615552639492e+06 + 4.220954901894585e+06 + 4.193296725308497e+06 + 4.165642642799490e+06 + 4.137994276751838e+06 + 4.110353252015833e+06 + 4.082721195907769e+06 + 4.055099738209962e+06 + 4.027490511170732e+06 + 3.999895149504419e+06 + 3.972315290391369e+06 + 3.944752573477943e+06 + 3.917208640876513e+06 + 3.889685137165464e+06 + 3.862183709389194e+06 + 3.834706007058111e+06 + 3.807253682148634e+06 + 3.779828389103201e+06 + 3.752431784830255e+06 + 3.725065528704253e+06 + 3.697731282565667e+06 + 3.670430710720977e+06 + 3.643165479942679e+06 + 3.615937259469279e+06 + 3.588747721005293e+06 + 3.561598538721256e+06 + 3.534491389253709e+06 + 3.507427951705208e+06 + 3.480409907644318e+06 + 3.453438941105620e+06 + 3.426516738589706e+06 + 3.399644989063177e+06 + 3.372825383958653e+06 + 3.346070405300663e+06 + 3.319465764034668e+06 + 3.293075510459727e+06 + 3.266878224028187e+06 + 3.240869303162930e+06 + 3.215052515525467e+06 + 3.189425288821125e+06 + 3.163986116962672e+06 + 3.138734196986282e+06 + 3.113668261011591e+06 + 3.088787111422079e+06 + 3.064089610843659e+06 + 3.039574592322599e+06 + 3.015240898358055e+06 + 2.991087379108502e+06 + 2.967112887579310e+06 + 2.943316282301805e+06 + 2.919696425519270e+06 + 2.896252185185970e+06 + 2.872982434032476e+06 + 2.849886048305633e+06 + 2.826961910405915e+06 + 2.804208907130155e+06 + 2.781625929123051e+06 + 2.759211873644148e+06 + 2.736965641930875e+06 + 2.714886139213983e+06 + 2.692972277509980e+06 + 2.671222972611625e+06 + 2.649637144535781e+06 + 2.628213719738566e+06 + 2.606951628696007e+06 + 2.585849806893141e+06 + 2.564907195391811e+06 + 2.544122739173453e+06 + 2.523495389008342e+06 + 2.503024101022326e+06 + 2.482707834844927e+06 + 2.462545556054412e+06 + 2.442536236120740e+06 + 2.422678849863131e+06 + 2.402972377820649e+06 + 2.383415806334849e+06 + 2.364008125120872e+06 + 2.344748329835404e+06 + 2.325635421794777e+06 + 2.306668405813749e+06 + 2.287846292982958e+06 + 2.269168099757709e+06 + 2.250632846050586e+06 + 2.232239558087812e+06 + 2.213987266957964e+06 + 2.195875007435864e+06 + 2.177901821473463e+06 + 2.160066755143500e+06 + 2.142368857948063e+06 + 2.124807187017495e+06 + 2.107380803567688e+06 + 2.090088772295509e+06 + 2.072930165358991e+06 + 2.055904058912681e+06 + 2.039009532618940e+06 + 2.022245673041180e+06 + 2.005611571515091e+06 + 1.989106323649552e+06 + 1.972729030298793e+06 + 1.956478797095825e+06 + 1.940354734917566e+06 + 1.924355960016194e+06 + 1.908481592593613e+06 + 1.892730757829583e+06 + 1.877102587255698e+06 + 1.861596215902473e+06 + 1.846210783186639e+06 + 1.830945435012332e+06 + 1.815799321323061e+06 + 1.800771597138300e+06 + 1.785861422681660e+06 + 1.771067961851037e+06 + 1.756390384114008e+06 + 1.741827864373811e+06 + 1.727379581118251e+06 + 1.713044718232857e+06 + 1.698822464839031e+06 + 1.684712013805151e+06 + 1.670712563808684e+06 + 1.656823318006428e+06 + 1.643043483055245e+06 + 1.629372271790869e+06 + 1.615808901794204e+06 + 1.602352594044968e+06 + 1.589002574975609e+06 + 1.575758076322615e+06 + 1.562618333634041e+06 + 1.549582587186907e+06 + 1.536650081999105e+06 + 1.523820067124634e+06 + 1.511091797064626e+06 + 1.498464530780005e+06 + 1.485937531189585e+06 + 1.473510066471004e+06 + 1.461181408848471e+06 + 1.448950834625962e+06 + 1.436817625926470e+06 + 1.424781068397768e+06 + 1.412840451407005e+06 + 1.400995070309470e+06 + 1.389244224245752e+06 + 1.377587216393601e+06 + 1.366023355231714e+06 + 1.354551952598923e+06 + 1.343172324427429e+06 + 1.331883792566280e+06 + 1.320685682335073e+06 + 1.309577322956444e+06 + 1.298558048406515e+06 + 1.287627196362487e+06 + 1.276784109496439e+06 + 1.266028134784103e+06 + 1.255358622320226e+06 + 1.244774926866806e+06 + 1.234276408467881e+06 + 1.223862430240984e+06 + 1.213532358913532e+06 + 1.203285566621101e+06 + 1.193121428991948e+06 + 1.183039325468658e+06 + 1.173038640304339e+06 + 1.163118761212139e+06 + 1.153279079987504e+06 + 1.143518992564451e+06 + 1.133837898317260e+06 + 1.124235201394960e+06 + 1.114710310121780e+06 + 1.105262636013577e+06 + 1.095891594215875e+06 + 1.086596604396163e+06 + 1.077377090233802e+06 + 1.068232479242110e+06 + 1.059162202266971e+06 + 1.050165693700918e+06 + 1.041242393088349e+06 + 1.032391743039430e+06 + 1.023613189178869e+06 + 1.014906181731556e+06 + 1.006270174355871e+06 + 9.977046244036794e+05 + 9.892089935677024e+05 + 9.807827465832273e+05 + 9.724253516436865e+05 + 9.641362810046984e+05 + 9.559150102252770e+05 + 9.477610188719215e+05 + 9.396737899139688e+05 + 9.316528091743080e+05 + 9.236975665277143e+05 + 9.158075561735997e+05 + 9.079822751134991e+05 + 9.002212236533747e+05 + 8.925239057014534e+05 + 8.848898281604102e+05 + 8.773185021612709e+05 + 8.698094424648809e+05 + 8.623621663528095e+05 + 8.549761944053203e+05 + 8.476510510446843e+05 + 8.403862637513808e+05 + 8.331813638606276e+05 + 8.260358860837971e+05 + 8.189493675787508e+05 + 8.119213484350282e+05 + 8.049513730504208e+05 + 7.980389891667470e+05 + 7.911837471192866e+05 + 7.843852003599521e+05 + 7.776429053419405e+05 + 7.709564221446526e+05 + 7.643253140173181e+05 + 7.577491471803443e+05 + 7.512274911598503e+05 + 7.447599180231568e+05 + 7.383460026539576e+05 + 7.319853241781880e+05 + 7.256774641850799e+05 + 7.194220067146936e+05 + 7.132185395309449e+05 + 7.070666529520636e+05 + 7.009659400728574e+05 + 6.949159975085063e+05 + 6.889164244086053e+05 + 6.829668228095188e+05 + 6.770667979456050e+05 + 6.712159574726904e+05 + 6.654139120281750e+05 + 6.596602754201142e+05 + 6.539546638052445e+05 + 6.482966962660485e+05 + 6.426859949531512e+05 + 6.371221843431445e+05 + 6.316048918617199e+05 + 6.261337478197705e+05 + 6.207083848228143e+05 + 6.153284385055641e+05 + 6.099935472682050e+05 + 6.047033517354903e+05 + 5.994574954765684e+05 + 5.942556247644721e+05 + 5.890973881315375e+05 + 5.839824370501742e+05 + 5.789104255366600e+05 + 5.738810098259439e+05 + 5.688938490610282e+05 + 5.639486048510919e+05 + 5.590449410545636e+05 + 5.541825244030216e+05 + 5.493610239467514e+05 + 5.445801109611018e+05 + 5.398394595653637e+05 + 5.351387461239359e+05 + 5.304776492529869e+05 + 5.258558503354813e+05 + 5.212730328842620e+05 + 5.167288826663374e+05 + 5.122230881980868e+05 + 5.077553400369428e+05 + 5.033253309731948e+05 + 4.989327564601310e+05 + 4.945773139811803e+05 + 4.902587033143605e+05 + 4.859766266490913e+05 + 4.817307881770549e+05 + 4.775208945372272e+05 + 4.733466546121029e+05 + 4.692077791818720e+05 + 4.651039814988278e+05 + 4.610349770333872e+05 + 4.570004830895544e+05 + 4.530002193970305e+05 + 4.490339078641191e+05 + 4.451012721716975e+05 + 4.412020383482487e+05 + 4.373359346346440e+05 + 4.335026910461138e+05 + 4.297020398291695e+05 + 4.259337153289251e+05 + 4.221974536699117e+05 + 4.184929932504728e+05 + 4.148200744355357e+05 + 4.111784393468680e+05 + 4.075678324287459e+05 + 4.039879999559653e+05 + 4.004386899065928e+05 + 3.969196525836200e+05 + 3.934306400492930e+05 + 3.899714060581240e+05 + 3.865417066557175e+05 + 3.831412995849459e+05 + 3.797699442729113e+05 + 3.764274023566474e+05 + 3.731134371233769e+05 + 3.698278135622827e+05 + 3.665702987827645e+05 + 3.633406615280775e+05 + 3.601386722825769e+05 + 3.569641034535824e+05 + 3.538167290782596e+05 + 3.506963250581825e+05 + 3.476026690576235e+05 + 3.445355402744773e+05 + 3.414947198014101e+05 + 3.384799905288533e+05 + 3.354911367821696e+05 + 3.325279446663284e+05 + 3.295902021531574e+05 + 3.266776986085196e+05 + 3.237902250531212e+05 + 3.209275743946921e+05 + 3.180895409646722e+05 + 3.152759207164211e+05 + 3.124865112943467e+05 + 3.097211117598721e+05 + 3.069795229448014e+05 + 3.042615472339510e+05 + 3.015669883675390e+05 + 2.988956518738279e+05 + 2.962473447339852e+05 + 2.936218752484120e+05 + 2.910190535228683e+05 + 2.884386911235514e+05 + 2.858806009067059e+05 + 2.833445973150213e+05 + 2.808304963224871e+05 + 2.783381153152796e+05 + 2.758672731341289e+05 + 2.734177900017136e+05 + 2.709894875428715e+05 + 2.685821889451269e+05 + 2.661957187314447e+05 + 2.638299027837526e+05 + 2.614845683836235e+05 + 2.591595441417535e+05 + 2.568546601323142e+05 + 2.545697477628685e+05 + 2.523046396706559e+05 + 2.500591699434964e+05 + 2.478331740644226e+05 + 2.456264886409644e+05 + 2.434389516128850e+05 + 2.412704023657298e+05 + 2.391206814330098e+05 + 2.369896306904384e+05 + 2.348770933197599e+05 + 2.327829136173563e+05 + 2.307069372775990e+05 + 2.286490111745211e+05 + 2.266089832623643e+05 + 2.245867029748616e+05 + 2.225820209237310e+05 + 2.205947887183862e+05 + 2.186248592921233e+05 + 2.166720868039439e+05 + 2.147363264605261e+05 + 2.128174347706827e+05 + 2.109152693889452e+05 + 2.090296889843596e+05 + 2.071605535077064e+05 + 2.053077240108720e+05 + 2.034710625599661e+05 + 2.016504325007521e+05 + 1.998456982030229e+05 + 1.980567250370223e+05 + 1.962833797138016e+05 + 1.945255298870997e+05 + 1.927830441323482e+05 + 1.910557922964590e+05 + 1.893436452442803e+05 + 1.876464748512476e+05 + 1.859641540986015e+05 + 1.842965568967865e+05 + 1.826435581738182e+05 + 1.810050340354470e+05 + 1.793808614993985e+05 + 1.777709185575675e+05 + 1.761750842223128e+05 + 1.745932384546507e+05 + 1.730252623268235e+05 + 1.714710377603550e+05 + 1.699304475698536e+05 + 1.684033757560533e+05 + 1.668897071565261e+05 + 1.653893274220018e+05 + 1.639021233234161e+05 + 1.624279825159149e+05 + 1.609667934564489e+05 + 1.595184456811041e+05 + 1.580828296015031e+05 + 1.566598363968120e+05 + 1.552493582649543e+05 + 1.538512882702573e+05 + 1.524655202573447e+05 + 1.510919491064028e+05 + 1.497304705096718e+05 + 1.483809809029638e+05 + 1.470433777326744e+05 + 1.457175592117312e+05 + 1.444034242942686e+05 + 1.431008729933990e+05 + 1.418098060421684e+05 + 1.405301248671864e+05 + 1.392617319094920e+05 + 1.380045303259556e+05 + 1.367584239714278e+05 + 1.355233176631985e+05 + 1.342991169575939e+05 + 1.330857281367400e+05 + 1.318830583220329e+05 + 1.306910153813551e+05 + 1.295095079605118e+05 + 1.283384454277201e+05 + 1.271777378619642e+05 + 1.260272961737778e+05 + 1.248870320778846e+05 + 1.237568578844075e+05 + 1.226366865814357e+05 + 1.215264320654815e+05 + 1.204260088572700e+05 + 1.193353321256488e+05 + 1.182543179024696e+05 + 1.171828828329888e+05 + 1.161209441971572e+05 + 1.150684200368906e+05 + 1.140252290172446e+05 + 1.129912905290012e+05 + 1.119665246989244e+05 + 1.109508522377596e+05 + 1.099441945145749e+05 + 1.089464735474612e+05 + 1.079576119759672e+05 + 1.069775332658437e+05 + 1.060061613940063e+05 + 1.050434208615313e+05 + 1.040892370245828e+05 + 1.031435357647047e+05 + 1.022062434696232e+05 + 1.012772873208916e+05 + 1.003565950684523e+05 + 9.944409498683986e+04 + 9.853971604124359e+04 + 9.764338777276211e+04 + 9.675504027159151e+04 + 9.587460425195689e+04 + 9.500201099602232e+04 + 9.413719236230559e+04 + 9.328008081668093e+04 + 9.243060935253548e+04 + 9.158871152497102e+04 + 9.075432150057999e+04 + 8.992737394814150e+04 + 8.910780408381460e+04 + 8.829554772812854e+04 + 8.749054118346877e+04 + 8.669272128864085e+04 + 8.590202548133289e+04 + 8.511839166524833e+04 + 8.434175826486869e+04 + 8.357206428147563e+04 + 8.280924917713979e+04 + 8.205325293940101e+04 + 8.130401609766987e+04 + 8.056147962909786e+04 + 7.982558503959214e+04 + 7.909627435336930e+04 + 7.837349003289423e+04 + 7.765717506702039e+04 + 7.694727293156023e+04 + 7.624372753229675e+04 + 7.554648331079309e+04 + 7.485548516457589e+04 + 7.417067840840557e+04 + 7.349200889763620e+04 + 7.281942291879337e+04 + 7.215286716185752e+04 + 7.149228885123666e+04 + 7.083763563584826e+04 + 7.018885556144921e+04 + 6.954589717270633e+04 + 6.890870943981725e+04 + 6.827724174191867e+04 + 6.765144392787226e+04 + 6.703126624692857e+04 + 6.641665935636370e+04 + 6.580757439267423e+04 + 6.520396286738058e+04 + 6.460577668030654e+04 + 6.401296820028803e+04 + 6.342549017134596e+04 + 6.284329573351656e+04 + 6.226633845994343e+04 + 6.169457228450359e+04 + 6.112795154311772e+04 + 6.056643099463883e+04 + 6.000996574136701e+04 + 5.945851127624574e+04 + 5.891202351267684e+04 + 5.837045869755570e+04 + 5.783377345558033e+04 + 5.730192482224794e+04 + 5.677487016169035e+04 + 5.625256720967715e+04 + 5.573497408983271e+04 + 5.522204924870504e+04 + 5.471375150828325e+04 + 5.421004006036229e+04 + 5.371087441354901e+04 + 5.321621444975662e+04 + 5.272602039469258e+04 + 5.224025278120609e+04 + 5.175887251825204e+04 + 5.128184085536604e+04 + 5.080911934597862e+04 + 5.034066989608183e+04 + 4.987645473684455e+04 + 4.941643640415772e+04 + 4.896057778639881e+04 + 4.850884207769758e+04 + 4.806119277190277e+04 + 4.761759372195903e+04 + 4.717800906318111e+04 + 4.674240321587012e+04 + 4.631074096205200e+04 + 4.588298735942246e+04 + 4.545910774537743e+04 + 4.503906779825089e+04 + 4.462283347373459e+04 + 4.421037101686000e+04 + 4.380164697651120e+04 + 4.339662816996042e+04 + 4.299528171729217e+04 + 4.259757504220949e+04 + 4.220347581706527e+04 + 4.181295199605238e+04 + 4.142597183433527e+04 + 4.104250383855765e+04 + 4.066251680332360e+04 + 4.028597979815155e+04 + 3.991286213370509e+04 + 3.954313341370015e+04 + 3.917676350485435e+04 + 3.881372250661203e+04 + 3.845398080843414e+04 + 3.809750905736740e+04 + 3.774427812448402e+04 + 3.739425915595785e+04 + 3.704742356207799e+04 + 3.670374297805164e+04 + 3.636318929176292e+04 + 3.602573463927982e+04 + 3.569135138416072e+04 + 3.536001215672983e+04 + 3.503168981923036e+04 + 3.470635744840465e+04 + 3.438398837321134e+04 + 3.406455615393208e+04 + 3.374803457309094e+04 + 3.343439765983423e+04 + 3.312361965186892e+04 + 3.281567499925836e+04 + 3.251053841177231e+04 + 3.220818480242078e+04 + 3.190858928930939e+04 + 3.161172723179306e+04 + 3.131757418548949e+04 + 3.102610591483113e+04 + 3.073729842710719e+04 + 3.045112791454117e+04 + 3.016757076691534e+04 + 2.988660361584138e+04 + 2.960820327321778e+04 + 2.933234674204399e+04 + 2.905901125674980e+04 + 2.878817423326317e+04 + 2.851981328372868e+04 + 2.825390622682930e+04 + 2.799043106146120e+04 + 2.772936599846356e+04 + 2.747068942978120e+04 + 2.721437991599866e+04 + 2.696041623625263e+04 + 2.670877735469368e+04 + 2.645944239579323e+04 + 2.621239068106394e+04 + 2.596760172331024e+04 + 2.572505519859007e+04 + 2.548473096648493e+04 + 2.524660907253227e+04 + 2.501066972455740e+04 + 2.477689330466365e+04 + 2.454526037995217e+04 + 2.431575168300119e+04 + 2.408834810912627e+04 + 2.386303072521571e+04 + 2.363978076395976e+04 + 2.341857962988761e+04 + 2.319940888531031e+04 + 2.298225025100848e+04 + 2.276708562349589e+04 + 2.255389704384009e+04 + 2.234266670372097e+04 + 2.213337697918792e+04 + 2.192601038403303e+04 + 2.172054957464747e+04 + 2.151697738916041e+04 + 2.131527680276242e+04 + 2.111543093252480e+04 + 2.091742306098243e+04 + 2.072123660422193e+04 + 2.052685512482519e+04 + 2.033426234716574e+04 + 2.014344212098682e+04 + 1.995437843426629e+04 + 1.976705544479930e+04 + 1.958145743480243e+04 + 1.939756881213320e+04 + 1.921537413684756e+04 + 1.903485810052154e+04 + 1.885600554387774e+04 + 1.867880143037429e+04 + 1.850323084111479e+04 + 1.832927901452323e+04 + 1.815693131178678e+04 + 1.798617320994377e+04 + 1.781699034075772e+04 + 1.764936845332217e+04 + 1.748329340510924e+04 + 1.731875119617678e+04 + 1.715572795110660e+04 + 1.699420990919751e+04 + 1.683418344358223e+04 + 1.667563503873475e+04 + 1.651855128954979e+04 + 1.636291893365341e+04 + 1.620872481606836e+04 + 1.605595588699932e+04 + 1.590459923143625e+04 + 1.575464203906202e+04 + 1.560607160533683e+04 + 1.545887535681969e+04 + 1.531304082443131e+04 + 1.516855564487381e+04 + 1.502540756956110e+04 + 1.488358445432479e+04 + 1.474307426938193e+04 + 1.460386509288249e+04 + 1.446594509814283e+04 + 1.432930256776952e+04 + 1.419392589719183e+04 + 1.405980357729324e+04 + 1.392692420658459e+04 + 1.379527648729671e+04 + 1.366484921045415e+04 + 1.353563127160237e+04 + 1.340761167272577e+04 + 1.328077950662285e+04 + 1.315512397004589e+04 + 1.303063434970357e+04 + 1.290730001970431e+04 + 1.278511047006237e+04 + 1.266405528001385e+04 + 1.254412410683634e+04 + 1.242530670538782e+04 + 1.230759293022181e+04 + 1.219097272173875e+04 + 1.207543611008671e+04 + 1.196097321598039e+04 + 1.184757424417080e+04 + 1.173522949287449e+04 + 1.162392934478714e+04 + 1.151366426384512e+04 + 1.140442480834694e+04 + 1.129620161634352e+04 + 1.118898540470730e+04 + 1.108276698378667e+04 + 1.097753724013271e+04 + 1.087328713748510e+04 + 1.077000773143687e+04 + 1.066769015148828e+04 + 1.056632560317495e+04 + 1.046590537899618e+04 + 1.036642084361778e+04 + 1.026786343864257e+04 + 1.017022468912003e+04 + 1.007349618928313e+04 + 9.977669609110566e+03 + 9.882736699245763e+03 + 9.788689277747368e+03 + 9.695519238085319e+03 + 9.603218551128393e+03 + 9.511779252802526e+03 + 9.421193453258842e+03 + 9.331453338088948e+03 + 9.242551155902798e+03 + 9.154479227014926e+03 + 9.067229945268125e+03 + 8.980795767109534e+03 + 8.895169220035050e+03 + 8.810342900070031e+03 + 8.726309463870590e+03 + 8.643061639313548e+03 + 8.560592220958239e+03 + 8.478894062727115e+03 + 8.397960086705119e+03 + 8.317783279679375e+03 + 8.238356687487571e+03 + 8.159673421912185e+03 + 8.081726656780256e+03 + 8.004509624589081e+03 + 7.928015622553179e+03 + 7.852238006535134e+03 + 7.777170190090504e+03 + 7.702805651284038e+03 + 7.629137923269694e+03 + 7.556160595291118e+03 + 7.483867321684783e+03 + 7.412251809739373e+03 + 7.341307820993124e+03 + 7.271029178292266e+03 + 7.201409756944273e+03 + 7.132443488123264e+03 + 7.064124361053455e+03 + 6.996446414793790e+03 + 6.929403743407001e+03 + 6.862990497342477e+03 + 6.797200875139910e+03 + 6.732029129721631e+03 + 6.667469570161823e+03 + 6.603516551523545e+03 + 6.540164480186692e+03 + 6.477407817185619e+03 + 6.415241069687017e+03 + 6.353658796883785e+03 + 6.292655608307650e+03 + 6.232226157518487e+03 + 6.172365149982773e+03 + 6.113067340658933e+03 + 6.054327527853383e+03 + 5.996140560115221e+03 + 5.938501333076975e+03 + 5.881404784939355e+03 + 5.824845903828315e+03 + 5.768819722461626e+03 + 5.713321315085574e+03 + 5.658345805472132e+03 + 5.603888359764917e+03 + 5.549944184846402e+03 + 5.496508537213697e+03 + 5.443576713947663e+03 + 5.391144051368102e+03 + 5.339205932358427e+03 + 5.287757780134069e+03 + 5.236795058291703e+03 + 5.186313275265001e+03 + 5.136307977685731e+03 + 5.086774751617681e+03 + 5.037709226449485e+03 + 4.989107068721900e+03 + 4.940963984504954e+03 + 4.893275721702213e+03 + 4.846038063285039e+03 + 4.799246830729600e+03 + 4.752897888312231e+03 + 4.706987133608333e+03 + 4.661510499922751e+03 + 4.616463963202395e+03 + 4.571843532909213e+03 + 4.527645253893021e+03 + 4.483865209302220e+03 + 4.440499515324517e+03 + 4.397544325863069e+03 + 4.354995830474305e+03 + 4.312850249817291e+03 + 4.271103841242844e+03 + 4.229752898292512e+03 + 4.188793745275323e+03 + 4.148222740634546e+03 + 4.108036277499050e+03 + 4.068230779797937e+03 + 4.028802705831530e+03 + 3.989748546349355e+03 + 3.951064821861195e+03 + 3.912748086813885e+03 + 3.874794926585441e+03 + 3.837201956255947e+03 + 3.799965825835211e+03 + 3.763083213042953e+03 + 3.726550823283946e+03 + 3.690365398229224e+03 + 3.654523706502605e+03 + 3.619022543185401e+03 + 3.583858737044133e+03 + 3.549029144619817e+03 + 3.514530650270483e+03 + 3.480360168271582e+03 + 3.446514639490202e+03 + 3.412991033253400e+03 + 3.379786348393921e+03 + 3.346897609451590e+03 + 3.314321868815865e+03 + 3.282056205761040e+03 + 3.250097724763853e+03 + 3.218443559530467e+03 + 3.187090870156345e+03 + 3.156036839918450e+03 + 3.125278679259401e+03 + 3.094813626126841e+03 + 3.064638941053712e+03 + 3.034751909739014e+03 + 3.005149845581890e+03 + 2.975830084543172e+03 + 2.946789986568892e+03 + 2.918026936797055e+03 + 2.889538343339952e+03 + 2.861321641252218e+03 + 2.833374286700636e+03 + 2.805693756659566e+03 + 2.778277556469224e+03 + 2.751123212016022e+03 + 2.724228269242043e+03 + 2.697590301914011e+03 + 2.671206904109025e+03 + 2.645075688971241e+03 + 2.619194294405700e+03 + 2.593560380141823e+03 + 2.568171626715687e+03 + 2.543025737542386e+03 + 2.518120435211838e+03 + 2.493453462030127e+03 + 2.469022585172818e+03 + 2.444825590018873e+03 + 2.420860280374604e+03 + 2.397124484732366e+03 + 2.373616049394018e+03 + 2.350332838436762e+03 + 2.327272738609171e+03 + 2.304433655218562e+03 + 2.281813512846715e+03 + 2.259410255601743e+03 + 2.237221844685107e+03 + 2.215246260811306e+03 + 2.193481506123082e+03 + 2.171925598942706e+03 + 2.150576574458654e+03 + 2.129432488764117e+03 + 2.108491414442484e+03 + 2.087751441300839e+03 + 2.067210678851041e+03 + 2.046867252353801e+03 + 2.026719303565292e+03 + 2.006764993817073e+03 + 1.987002500493615e+03 + 1.967430017215378e+03 + 1.948045754608514e+03 + 1.928847939062915e+03 + 1.909834815497017e+03 + 1.891004644375446e+03 + 1.872355700452609e+03 + 1.853886275802303e+03 + 1.835594678424827e+03 + 1.817479231062563e+03 + 1.799538272810955e+03 + 1.781770158220284e+03 + 1.764173256646331e+03 + 1.746745953278825e+03 + 1.729486647489427e+03 + 1.712393752933919e+03 + 1.695465699568615e+03 + 1.678700930817119e+03 + 1.662097903850073e+03 + 1.645655091966725e+03 + 1.629370981458450e+03 + 1.613244072202941e+03 + 1.597272880432907e+03 + 1.581455933682248e+03 + 1.565791771294578e+03 + 1.550278951289465e+03 + 1.534916043199639e+03 + 1.519701626827566e+03 + 1.504634298568118e+03 + 1.489712666891078e+03 + 1.474935351996483e+03 + 1.460300988758884e+03 + 1.445808223853118e+03 + 1.431455716350942e+03 + 1.417242138357507e+03 + 1.403166173386480e+03 + 1.389226518010158e+03 + 1.375421881007569e+03 + 1.361750982089843e+03 + 1.348212553926219e+03 + 1.334805341072190e+03 + 1.321528098720046e+03 + 1.308379594477261e+03 + 1.295358607457036e+03 + 1.282463927300085e+03 + 1.269694355823267e+03 + 1.257048705895313e+03 + 1.244525800699936e+03 + 1.232124475203576e+03 + 1.219843575042076e+03 + 1.207681956049559e+03 + 1.195638485404256e+03 + 1.183712040621380e+03 + 1.171901509388141e+03 + 1.160205790292893e+03 + 1.148623791762007e+03 + 1.137154432301071e+03 + 1.125796641257775e+03 + 1.114549357263016e+03 + 1.103411528660030e+03 + 1.092382114454342e+03 + 1.081460082700689e+03 + 1.070644411095300e+03 + 1.059934087579793e+03 + 1.049328108720195e+03 + 1.038825480494848e+03 + 1.028425218971371e+03 + 1.018126348582361e+03 + 1.007927902927668e+03 + 9.978289254104482e+02 + 9.878284675679866e+02 + 9.779255898738762e+02 + 9.681193621623704e+02 + 9.584088623012988e+02 + 9.487931771658360e+02 + 9.392714022763922e+02 + 9.298426409505287e+02 + 9.205060057185552e+02 + 9.112606172437117e+02 + 9.021056036681564e+02 + 8.930401022331439e+02 + 8.840632580637879e+02 + 8.751742235821227e+02 + 8.663721600224155e+02 + 8.576562363107178e+02 + 8.490256285516970e+02 + 8.404795212594149e+02 + 8.320171064683727e+02 + 8.236375833541338e+02 + 8.153401590664150e+02 + 8.071240480244585e+02 + 7.989884718119321e+02 + 7.909326598382663e+02 + 7.829558483527250e+02 + 7.750572805483002e+02 + 7.672362073200991e+02 + 7.594918862313154e+02 + 7.518235817392584e+02 + 7.442305655888715e+02 + 7.367121158939042e+02 + 7.292675176279554e+02 + 7.218960630476328e+02 + 7.145970504767349e+02 + 7.073697847820883e+02 + 7.002135778527235e+02 + 6.931277475695276e+02 + 6.861116184218383e+02 + 6.791645215373005e+02 + 6.722857937677298e+02 + 6.654747784472139e+02 + 6.587308253877042e+02 + 6.520532900189463e+02 + 6.454415341582659e+02 + 6.388949257382737e+02 + 6.324128381494658e+02 + 6.259946511571761e+02 + 6.196397502963263e+02 + 6.133475264197438e+02 + 6.071173768094372e+02 + 6.009487042352257e+02 + 5.948409165626937e+02 + 5.887934278801442e+02 + 5.828056577149104e+02 + 5.768770306335107e+02 + 5.710069770500405e+02 + 5.651949326339243e+02 + 5.594403381224611e+02 + 5.537426401234757e+02 + 5.481012901152631e+02 + 5.425157443662293e+02 + 5.369854648776029e+02 + 5.315099185870243e+02 + 5.260885773011631e+02 + 5.207209179649268e+02 + 5.154064223119497e+02 + 5.101445770921985e+02 + 5.049348740937783e+02 + 4.997768095346806e+02 + 4.946698844046663e+02 + 4.896136047862775e+02 + 4.846074811232588e+02 + 4.796510285618583e+02 + 4.747437670096575e+02 + 4.698852205388910e+02 + 4.650749179071526e+02 + 4.603123926691712e+02 + 4.555971823563725e+02 + 4.509288288727789e+02 + 4.463068788207030e+02 + 4.417308827523721e+02 + 4.372003955530256e+02 + 4.327149765501697e+02 + 4.282741889383891e+02 + 4.238776002586995e+02 + 4.195247821802792e+02 + 4.152153101301976e+02 + 4.109487639564401e+02 + 4.067247273397822e+02 + 4.025427875685178e+02 + 3.984025363858318e+02 + 3.943035692477232e+02 + 3.902454851077117e+02 + 3.862278871965347e+02 + 3.822503823673904e+02 + 3.783125809462488e+02 + 3.744140974100913e+02 + 3.705545496319825e+02 + 3.667335588488600e+02 + 3.629507504654170e+02 + 3.592057531920941e+02 + 3.554981990087823e+02 + 3.518277237997781e+02 + 3.481939667588409e+02 + 3.445965704231110e+02 + 3.410351808614133e+02 + 3.375094474036331e+02 + 3.340190228447264e+02 + 3.305635632260179e+02 + 3.271427276872922e+02 + 3.237561788604219e+02 + 3.204035826343936e+02 + 3.170846077594078e+02 + 3.137989262426811e+02 + 3.105462135925898e+02 + 3.073261480789523e+02 + 3.041384108878384e+02 + 3.009826866110996e+02 + 2.978586626197819e+02 + 2.947660292278245e+02 + 2.917044799774912e+02 + 2.886737110898206e+02 + 2.856734216347172e+02 + 2.827033138205502e+02 + 2.797630925185924e+02 + 2.768524653868921e+02 + 2.739711430162750e+02 + 2.711188386172004e+02 + 2.682952682417776e+02 + 2.655001507075566e+02 + 2.627332073441469e+02 + 2.599941621974095e+02 + 2.572827420191948e+02 + 2.545986760992428e+02 + 2.519416963867954e+02 + 2.493115374004747e+02 + 2.467079361520411e+02 + 2.441306322519956e+02 + 2.415793676749632e+02 + 2.390538868162835e+02 + 2.365539368283623e+02 + 2.340792670618049e+02 + 2.316296291092408e+02 + 2.292047772816256e+02 + 2.268044680583002e+02 + 2.244284601550858e+02 + 2.220765149177526e+02 + 2.197483957886078e+02 + 2.174438683808943e+02 + 2.151627007150871e+02 + 2.129046628991759e+02 + 2.106695273325222e+02 + 2.084570687245048e+02 + 2.062670637405841e+02 + 2.040992912166423e+02 + 2.019535322675416e+02 + 1.998295699356443e+02 + 1.977271893831886e+02 + 1.956461779038128e+02 + 1.935863247355415e+02 + 1.915474213798307e+02 + 1.895292611678483e+02 + 1.875316391958052e+02 + 1.855543528482985e+02 + 1.835972014670904e+02 + 1.816599861324650e+02 + 1.797425099308505e+02 + 1.778445779263947e+02 + 1.759659969484732e+02 + 1.741065756739388e+02 + 1.722661246609050e+02 + 1.704444562587039e+02 + 1.686413847511611e+02 + 1.668567261386198e+02 + 1.650902980928235e+02 + 1.633419201885993e+02 + 1.616114136777071e+02 + 1.598986014805750e+02 + 1.582033083619683e+02 + 1.565253606828442e+02 + 1.548645864376032e+02 + 1.532208154238845e+02 + 1.515938789750561e+02 + 1.499836100268175e+02 + 1.483898432531407e+02 + 1.468124148175615e+02 + 1.452511624739094e+02 + 1.437059256375598e+02 + 1.421765451600804e+02 + 1.406628634671130e+02 + 1.391647245894945e+02 + 1.376819739463268e+02 + 1.362144585029153e+02 + 1.347620267668397e+02 + 1.333245285902542e+02 + 1.319018153476916e+02 + 1.304937399101563e+02 + 1.291001564496927e+02 + 1.277209206089626e+02 + 1.263558894821456e+02 + 1.250049214462411e+02 + 1.236678763269726e+02 + 1.223446153162142e+02 + 1.210350008534558e+02 + 1.197388968258891e+02 + 1.184561684202564e+02 + 1.171866820332312e+02 + 1.159303054814129e+02 + 1.146869078350233e+02 + 1.134563593521917e+02 + 1.122385316718855e+02 + 1.110332976232454e+02 + 1.098405311979204e+02 + 1.086601077608261e+02 + 1.074919038117468e+02 + 1.063357969778381e+02 + 1.051916662270612e+02 + 1.040593916259906e+02 + 1.029388543466298e+02 + 1.018299368341955e+02 + 1.007325226151947e+02 + 9.964649633160360e+01 + 9.857174381861689e+01 + 9.750815195741964e+01 + 9.645560874783912e+01 + 9.541400332430685e+01 + 9.438322582683587e+01 + 9.336316750654088e+01 + 9.235372071959520e+01 + 9.135477878367931e+01 + 9.036623609174318e+01 + 8.938798812110527e+01 + 8.841993128541375e+01 + 8.746196304638978e+01 + 8.651398190997742e+01 + 8.557588728936869e+01 + 8.464757961904559e+01 + 8.372896034435935e+01 + 8.281993180539014e+01 + 8.192039735296085e+01 + 8.103026128111058e+01 + 8.014942874495698e+01 + 7.927780590401203e+01 + 7.841529983858037e+01 + 7.756181847617736e+01 + 7.671727071446733e+01 + 7.588156631674119e+01 + 7.505461587372024e+01 + 7.423633095310755e+01 + 7.342662394299153e+01 + 7.262540803009301e+01 + 7.183259736215271e+01 + 7.104810687905130e+01 + 7.027185230277652e+01 + 6.950375028269488e+01 + 6.874371822566854e+01 + 6.799167430460268e+01 + 6.724753760248480e+01 + 6.651122793902957e+01 + 6.578266588744034e+01 + 6.506177289160765e+01 + 6.434847109859102e+01 + 6.364268339115934e+01 + 6.294433351272004e+01 + 6.225334589309644e+01 + 6.156964567793161e+01 + 6.089315882540817e+01 + 6.022381196253272e+01 + 5.956153243192431e+01 + 5.890624835784802e+01 + 5.825788851805937e+01 + 5.761638239540161e+01 + 5.698166019812880e+01 + 5.635365277455941e+01 + 5.573229169643452e+01 + 5.511750921575248e+01 + 5.450923819422894e+01 + 5.390741220139490e+01 + 5.331196548214332e+01 + 5.272283288224639e+01 + 5.213994992103501e+01 + 5.156325275682114e+01 + 5.099267813956413e+01 + 5.042816349744366e+01 + 4.986964685712531e+01 + 4.931706681520628e+01 + 4.877036264381848e+01 + 4.822947419115650e+01 + 4.769434186145065e+01 + 4.716490671386568e+01 + 4.664111036072763e+01 + 4.612289496053356e+01 + 4.561020331071316e+01 + 4.510297873475514e+01 + 4.460116508782800e+01 + 4.410470685618211e+01 + 4.361354903662819e+01 + 4.312763714409483e+01 + 4.264691728541290e+01 + 4.217133607138089e+01 + 4.170084064118655e+01 + 4.123537869187841e+01 + 4.077489840121474e+01 + 4.031934846724150e+01 + 3.986867813088396e+01 + 3.942283710103097e+01 + 3.898177559914080e+01 + 3.854544435810492e+01 + 3.811379455962712e+01 + 3.768677789368684e+01 + 3.726434656726136e+01 + 3.684645322013298e+01 + 3.643305096011807e+01 + 3.602409338288954e+01 + 3.561953452360934e+01 + 3.521932891649128e+01 + 3.482343153306697e+01 + 3.443179775085747e+01 + 3.404438343901749e+01 + 3.366114490993698e+01 + 3.328203887889210e+01 + 3.290702252020257e+01 + 3.253605343510379e+01 + 3.216908962260722e+01 + 3.180608952699355e+01 + 3.144701200592500e+01 + 3.109181631097627e+01 + 3.074046212448961e+01 + 3.039290952642646e+01 + 3.004911898312090e+01 + 2.970905136572861e+01 + 2.937266792505025e+01 + 2.903993030352619e+01 + 2.871080057194543e+01 + 2.838524113862799e+01 + 2.806321475945346e+01 + 2.774468462701056e+01 + 2.742961427426368e+01 + 2.711796757973106e+01 + 2.680970882898042e+01 + 2.650480264209962e+01 + 2.620321398820359e+01 + 2.590490820737408e+01 + 2.560985096325826e+01 + 2.531800827674159e+01 + 2.502934653543958e+01 + 2.474383242809609e+01 + 2.446143296972707e+01 + 2.418211555345684e+01 + 2.390584787621480e+01 + 2.363259794654911e+01 + 2.336233413255323e+01 + 2.309502509558490e+01 + 2.283063979379989e+01 + 2.256914753657127e+01 + 2.231051792982671e+01 + 2.205472087402378e+01 + 2.180172658443576e+01 + 2.155150556919213e+01 + 2.130402866286656e+01 + 2.105926696778129e+01 + 2.081719185319289e+01 + 2.057777503962135e+01 + 2.034098850331043e+01 + 2.010680447006149e+01 + 1.987519550063876e+01 + 1.964613442528577e+01 + 1.941959432580914e+01 + 1.919554855827313e+01 + 1.897397075515799e+01 + 1.875483482712853e+01 + 1.853811494931854e+01 + 1.832378554313712e+01 + 1.811182128985819e+01 + 1.790219714756028e+01 + 1.769488831219516e+01 + 1.748987022919803e+01 + 1.728711861052799e+01 + 1.708660939866258e+01 + 1.688831878332332e+01 + 1.669222321036695e+01 + 1.649829934690638e+01 + 1.630652410217020e+01 + 1.611687463464447e+01 + 1.592932831698975e+01 + 1.574386275792588e+01 + 1.556045580679505e+01 + 1.537908552081595e+01 + 1.519973018767385e+01 + 1.502236832516821e+01 + 1.484697865494502e+01 + 1.467354012841447e+01 + 1.450203191274907e+01 + 1.433243337158686e+01 + 1.416472409674524e+01 + 1.399888388846149e+01 + 1.383489273805109e+01 + 1.367273085728561e+01 + 1.351237865788487e+01 + 1.335381673920349e+01 + 1.319702591751814e+01 + 1.304198719993403e+01 + 1.288868177614133e+01 + 1.273709104714046e+01 + 1.258719659672914e+01 + 1.243898018736778e+01 + 1.229242378719869e+01 + 1.214750954184370e+01 + 1.200421977308728e+01 + 1.186253699764556e+01 + 1.172244390266849e+01 + 1.158392335040491e+01 + 1.144695839482221e+01 + 1.131153225250660e+01 + 1.117762830926809e+01 + 1.104523013501555e+01 + 1.091432145806843e+01 + 1.078488617566414e+01 + 1.065690836231677e+01 + 1.053037224372639e+01 + 1.040526220941685e+01 + 1.028156282144551e+01 + 1.015925878941852e+01 + 1.003833498402321e+01 + 9.918776439618298e+00 + 9.800568334039683e+00 + 9.683696005431957e+00 + 9.568144946174611e+00 + 9.453900787919052e+00 + 9.340949322860192e+00 + 9.229276489267212e+00 + 9.118868359446189e+00 + 9.009711163642070e+00 + 8.901791273796370e+00 + 8.795095191785947e+00 + 8.689609570648638e+00 + 8.585321201853549e+00 + 8.482217005296002e+00 + 8.380284046581689e+00 + 8.279509523576925e+00 + 8.179880760330461e+00 + 8.081385224417300e+00 + 7.984010508389771e+00 + 7.887744326863491e+00 + 7.792574535206823e+00 + 7.698489109519010e+00 + 7.605476146133772e+00 + 7.513523878187234e+00 + 7.422620653280592e+00 + 7.332754935473541e+00 + 7.243915322674125e+00 + 7.156090524556396e+00 + 7.069269365741123e+00 + 6.983440797017198e+00 + 6.898593877074525e+00 + 6.814717779007339e+00 + 6.731801797516630e+00 + 6.649835331100769e+00 + 6.568807890289103e+00 + 6.488709103685009e+00 + 6.409528699865692e+00 + 6.331256515961359e+00 + 6.253882503643640e+00 + 6.177396712290002e+00 + 6.101789297547966e+00 + 6.027050522250886e+00 + 5.953170745278158e+00 + 5.880140434362498e+00 + 5.807950156612827e+00 + 5.736590570385212e+00 + 5.666052441485230e+00 + 5.596326632559173e+00 + 5.527404095182261e+00 + 5.459275884510260e+00 + 5.391933149962507e+00 + 5.325367127621260e+00 + 5.259569151260657e+00 + 5.194530647433734e+00 + 5.130243129823101e+00 + 5.066698206416531e+00 + 5.003887570881058e+00 + 4.941803001453549e+00 + 4.880436373900456e+00 + 4.819779643419130e+00 + 4.759824844738533e+00 + 4.700564110200850e+00 + 4.641989649988083e+00 + 4.584093751736625e+00 + 4.526868793565781e+00 + 4.470307230074105e+00 + 4.414401594729965e+00 + 4.359144507919768e+00 + 4.304528662004969e+00 + 4.250546825086277e+00 + 4.197191851627622e+00 + 4.144456666159979e+00 + 4.092334266478478e+00 + 4.040817732600400e+00 + 3.989900213340690e+00 + 3.939574930757155e+00 + 3.889835183170760e+00 + 3.840674335613269e+00 + 3.792085827136757e+00 + 3.744063169627271e+00 + 3.696599938809659e+00 + 3.649689781941428e+00 + 3.603326418080199e+00 + 3.557503628382808e+00 + 3.512215261374414e+00 + 3.467455236465362e+00 + 3.423217534816642e+00 + 3.379496201686086e+00 + 3.336285348654454e+00 + 3.293579148649655e+00 + 3.251371841226642e+00 + 3.209657725464606e+00 + 3.168431157939940e+00 + 3.127686563504146e+00 + 3.087418425005168e+00 + 3.047621281181530e+00 + 3.008289735457784e+00 + 2.969418446796439e+00 + 2.931002129285814e+00 + 2.893035560502260e+00 + 2.855513571053400e+00 + 2.818431044951714e+00 + 2.781782927380857e+00 + 2.745564215550934e+00 + 2.709769959926351e+00 + 2.674395268211684e+00 + 2.639435297946605e+00 + 2.604885259637663e+00 + 2.570740420206636e+00 + 2.536996093812299e+00 + 2.503647644969884e+00 + 2.470690493614489e+00 + 2.438120105903952e+00 + 2.405931997235836e+00 + 2.374121735683807e+00 + 2.342684934097179e+00 + 2.311617253784086e+00 + 2.280914406216957e+00 + 2.250572146781167e+00 + 2.220586279273893e+00 + 2.190952653478714e+00 + 2.161667162009881e+00 + 2.132725747880213e+00 + 2.104124396422602e+00 + 2.075859132902099e+00 + 2.047926031580743e+00 + 2.020321209266692e+00 + 1.993040822266800e+00 + 1.966081073072867e+00 + 1.939438205166541e+00 + 1.913108500802827e+00 + 1.887088286918805e+00 + 1.861373929947225e+00 + 1.835961834345823e+00 + 1.810848447621857e+00 + 1.786030255213551e+00 + 1.761503779943143e+00 + 1.737265586321442e+00 + 1.713312275115213e+00 + 1.689640483715834e+00 + 1.666246890168493e+00 + 1.643128207113473e+00 + 1.620281182788458e+00 + 1.597702604935450e+00 + 1.575389294699183e+00 + 1.553338108095691e+00 + 1.531545938928566e+00 + 1.510009713407906e+00 + 1.488726392261371e+00 + 1.467692971937850e+00 + 1.446906480207705e+00 + 1.426363979153670e+00 + 1.406062564959602e+00 + 1.385999363940103e+00 + 1.366171536058216e+00 + 1.346576274130787e+00 + 1.327210800124654e+00 + 1.308072368828510e+00 + 1.289158266486426e+00 + 1.270465807665891e+00 + 1.251992339187792e+00 + 1.233735237889272e+00 + 1.215691907984316e+00 + 1.197859785096899e+00 + 1.180236333919823e+00 + 1.162819045897185e+00 + 1.145605442741095e+00 + 1.128593073973588e+00 + 1.111779515284567e+00 + 1.095162371880828e+00 + 1.078739275475473e+00 + 1.062507883334588e+00 + 1.046465881646835e+00 + 1.030610981874106e+00 + 1.014940920295882e+00 + 9.994534611152829e-01 + 9.841463930086627e-01 + 9.690175291593270e-01 + 9.540647093618980e-01 + 9.392857969051628e-01 + 9.246786792729085e-01 + 9.102412696338000e-01 + 8.959715035501604e-01 + 8.818673402027871e-01 + 8.679267639726700e-01 + 8.541477806828601e-01 + 8.405284189410931e-01 + 8.270667316623297e-01 + 8.137607925445277e-01 + 8.006086976874616e-01 + 7.876085666023992e-01 + 7.747585387876328e-01 + 7.620567754307064e-01 + 7.495014602973783e-01 + 7.370907966216457e-01 + 7.248230088485250e-01 + 7.126963429559050e-01 + 7.007090638413013e-01 + 6.888594572109231e-01 + 6.771458292779966e-01 + 6.655665045807759e-01 + 6.541198279036498e-01 + 6.428041637825399e-01 + 6.316178947210964e-01 + 6.205594229105623e-01 + 6.096271692194244e-01 + 5.988195719936049e-01 + 5.881350889221284e-01 + 5.775721954595900e-01 + 5.671293841176136e-01 + 5.568051664208875e-01 + 5.465980707194322e-01 + 5.365066418737608e-01 + 5.265294432641988e-01 + 5.166650544231339e-01 + 5.069120710261563e-01 + 4.972691065208522e-01 + 4.877347899800689e-01 + 4.783077664492044e-01 + 4.689866979017357e-01 + 4.597702612073233e-01 + 4.506571489021905e-01 + 4.416460700276524e-01 + 4.327357479310139e-01 + 4.239249212044141e-01 + 4.152123442913231e-01 + 4.065967853823845e-01 + 3.980770275573000e-01 + 3.896518691214699e-01 + 3.813201217302061e-01 + 3.730806117264635e-01 + 3.649321798861945e-01 + 3.568736798624809e-01 + 3.489039797704173e-01 + 3.410219613244947e-01 + 3.332265187013593e-01 + 3.255165605086018e-01 + 3.178910083898543e-01 + 3.103487958586359e-01 + 3.028888701360887e-01 + 2.955101913786422e-01 + 2.882117315106021e-01 + 2.809924755137371e-01 + 2.738514204626846e-01 + 2.667875748867065e-01 + 2.597999604522775e-01 + 2.528876103054370e-01 + 2.460495685714950e-01 + 2.392848919788540e-01 + 2.325926484518769e-01 + 2.259719167857841e-01 + 2.194217877354759e-01 + 2.129413627175208e-01 + 2.065297538274627e-01 + 2.001860848470379e-01 + 1.939094897086202e-01 + 1.876991127051828e-01 + 1.815541094417414e-01 + 1.754736452756007e-01 + 1.694568956974621e-01 + 1.635030470498157e-01 + 1.576112950508609e-01 + 1.517808453564031e-01 + 1.460109140364644e-01 + 1.403007261766342e-01 + 1.346495165784953e-01 + 1.290565300180611e-01 + 1.235210199704221e-01 + 1.180422494287421e-01 + 1.126194909047226e-01 + 1.072520253105725e-01 + 1.019391428882170e-01 + 9.668014295417104e-02 + 9.147433293860986e-02 + 8.632102939670111e-02 + 8.121955756354367e-02 + 7.616925052308399e-02 + 7.116945022739722e-02 + 6.621950693894064e-02 + 6.131877854698166e-02 + 5.646663155698649e-02 + 5.166244039926220e-02 + 4.690558691983024e-02 + 4.219546135291571e-02 + 3.753146148005052e-02 + 3.291299228995687e-02 + 2.833946692296159e-02 + 2.381030573044091e-02 + 1.932493608562982e-02 + 1.488279323951757e-02 + 1.048331933378767e-02 + 6.125963364112487e-03 + 1.810181928441051e-03 + -2.464561780353438e-03 + -6.698797872311066e-03 + -1.089304914227914e-02 + -1.504783206514415e-02 + -1.916365656771068e-02 + -2.324102555134537e-02 + -2.728043585421590e-02 + -3.128237791440187e-02 + -3.524733543518016e-02 + -3.917578628623598e-02 + -4.306820207473552e-02 + -4.692504798332473e-02 + -5.074678357205704e-02 + -5.453386225593208e-02 + -5.828673132987599e-02 + -6.200583267980977e-02 + -6.569160218738558e-02 + -6.934446987831328e-02 + -7.296486055963237e-02 + -7.655319319650564e-02 + -8.010988114185758e-02 + -8.363533270338043e-02 + -8.712995053780122e-02 + -9.059413193193132e-02 + -9.402826926020177e-02 + -9.743274938790861e-02 + -1.008079541064505e-01 + -1.041542604608216e-01 + -1.074720401131623e-01 + -1.107616598682374e-01 + -1.140234819193764e-01 + -1.172578632830942e-01 + -1.204651563472630e-01 + -1.236457089966172e-01 + -1.267998640735528e-01 + -1.299279600346222e-01 + -1.330303309819349e-01 + -1.361073061299021e-01 + -1.391592104828469e-01 + -1.421863647988072e-01 + -1.451890851855495e-01 + -1.481676836992942e-01 + -1.511224682100277e-01 + -1.540537421399553e-01 + -1.569618050599837e-01 + -1.598469524764272e-01 + -1.627094755828420e-01 + -1.655496618778017e-01 + -1.683677949236447e-01 + -1.711641541517163e-01 + -1.739390154343296e-01 + -1.766926508045859e-01 + -1.794253283544359e-01 + -1.821373127460387e-01 + -1.848288648981078e-01 + -1.875002419786971e-01 + -1.901516978443653e-01 + -1.927834826976386e-01 + -1.953958431846420e-01 + -1.979890227559544e-01 + -2.005632612952037e-01 + -2.031187952951354e-01 + -2.056558581586019e-01 + -2.081746798356756e-01 + -2.106754870586183e-01 + -2.131585035595214e-01 + -2.156239496932611e-01 + -2.180720427808593e-01 + -2.205029972492180e-01 + -2.229170242226580e-01 + -2.253143319488933e-01 + -2.276951258807381e-01 + -2.300596082676421e-01 + -2.324079786235529e-01 + -2.347404337552020e-01 + -2.370571673694448e-01 + -2.393583705568364e-01 + -2.416442317867498e-01 + -2.439149365965413e-01 + -2.461706679522762e-01 + -2.484116061949506e-01 + -2.506379289887288e-01 + -2.528498115997045e-01 + -2.550474267213886e-01 + -2.572309443123204e-01 + -2.594005320626763e-01 + -2.615563552809436e-01 + -2.636985766193694e-01 + -2.658273564814242e-01 + -2.679428529152917e-01 + -2.700452216727706e-01 + -2.721346163277996e-01 + -2.742111879420810e-01 + -2.762750854486131e-01 + -2.783264557785196e-01 + -2.803654434689624e-01 + -2.823921908087395e-01 + -2.844068381756654e-01 + -2.864095239109061e-01 + -2.884003839950212e-01 + -2.903795524955394e-01 + -2.923471617904532e-01 + -2.943033420191942e-01 + -2.962482212763220e-01 + -2.981819256807660e-01 + -3.001045795717013e-01 + -3.020163055275332e-01 + -3.039172239885258e-01 + -3.058074538261057e-01 + -3.076871122705734e-01 + -3.095563141516905e-01 + -3.114151727559051e-01 + -3.132637999546681e-01 + -3.151023057635463e-01 + -3.169307984585886e-01 + -3.187493845723606e-01 + -3.205581689117248e-01 + -3.223572548745565e-01 + -3.241467443749414e-01 + -3.259267374142799e-01 + -3.276973325691862e-01 + -3.294586270053045e-01 + -3.312107160890871e-01 + -3.329536937962613e-01 + -3.346876527428858e-01 + -3.364126840777460e-01 + -3.381288775295205e-01 + -3.398363212268976e-01 + -3.415351019703767e-01 + -3.432253052941175e-01 + -3.449070152459444e-01 + -3.465803145779997e-01 + -3.482452848007116e-01 + -3.499020059501182e-01 + -3.515505568826250e-01 + -3.531910152859590e-01 + -3.548234573752725e-01 + -3.564479582224311e-01 + -3.580645917875246e-01 + -3.596734306319520e-01 + -3.612745463110025e-01 + -3.628680093075062e-01 + -3.644538885605036e-01 + -3.660322520458910e-01 + -3.676031668332329e-01 + -3.691666987516095e-01 + -3.707229124779602e-01 + -3.722718716670178e-01 + -3.738136390608672e-01 + -3.753482761467254e-01 + -3.768758432749062e-01 + -3.783964002465877e-01 + -3.799100056353694e-01 + -3.814167166997948e-01 + -3.829165900177774e-01 + -3.844096813827866e-01 + -3.858960456354959e-01 + -3.873757364088854e-01 + -3.888488064600710e-01 + -3.903153077375676e-01 + -3.917752913452379e-01 + -3.932288075353338e-01 + -3.946759055987133e-01 + -3.961166339473677e-01 + -3.975510402779339e-01 + -3.989791715122148e-01 + -4.004010735521537e-01 + -4.018167915706618e-01 + -4.032263700983349e-01 + -4.046298528561717e-01 + -4.060272827301947e-01 + -4.074187016384220e-01 + -4.088041511045764e-01 + -4.101836719923956e-01 + -4.115573039941210e-01 + -4.129250863351419e-01 + -4.142870577221169e-01 + -4.156432559911067e-01 + -4.169937183587125e-01 + -4.183384813924751e-01 + -4.196775807600287e-01 + -4.210110517890521e-01 + -4.223389293056927e-01 + -4.236612469859990e-01 + -4.249780381358575e-01 + -4.262893357128523e-01 + -4.275951718561576e-01 + -4.288955781548201e-01 + -4.301905856512787e-01 + -4.314802245948859e-01 + -4.327645248125306e-01 + -4.340435157401011e-01 + -4.353172261319986e-01 + -4.365856843065750e-01 + -4.378489181140523e-01 + -4.391069545111200e-01 + -4.403598201489721e-01 + -4.416075414900063e-01 + -4.428501441617211e-01 + -4.440876533447125e-01 + -4.453200938994337e-01 + -4.465474900663732e-01 + -4.477698656375739e-01 + -4.489872440132049e-01 + -4.501996482091757e-01 + -4.514071007293397e-01 + -4.526096234423685e-01 + -4.538072381973440e-01 + -4.549999664346564e-01 + -4.561878287239103e-01 + -4.573708454564815e-01 + -4.585490367840940e-01 + -4.597224223838171e-01 + -4.608910215483196e-01 + -4.620548532229073e-01 + -4.632139359470852e-01 + -4.643682878385313e-01 + -4.655179266829866e-01 + -4.666628700026897e-01 + -4.678031349656974e-01 + -4.689387384105899e-01 + -4.700696968538801e-01 + -4.711960263436956e-01 + -4.723177425902391e-01 + -4.734348612979066e-01 + -4.745473978039702e-01 + -4.756553669920032e-01 + -4.767587833133353e-01 + -4.778576611599107e-01 + -4.789520147944609e-01 + -4.800418577229591e-01 + -4.811272034289876e-01 + -4.822080654661853e-01 + -4.832844566828151e-01 + -4.843563896207272e-01 + -4.854238767122197e-01 + -4.864869303811440e-01 + -4.875455627166793e-01 + -4.885997853037442e-01 + -4.896496095260600e-01 + -4.906950466868944e-01 + -4.917361080077966e-01 + -4.927728043326091e-01 + -4.938051461993963e-01 + -4.948331438840640e-01 + -4.958568075736277e-01 + -4.968761473512240e-01 + -4.978911731225704e-01 + -4.989018945002663e-01 + -4.999083208482176e-01 + -5.009104613021941e-01 + -5.019083248972503e-01 + -5.029019205602130e-01 + -5.038912570358333e-01 + -5.048763428126108e-01 + -5.058571862004539e-01 + -5.068337954285524e-01 + -5.078061785541023e-01 + -5.087743434557772e-01 + -5.097382978215317e-01 + -5.106980492175714e-01 + -5.116536051046018e-01 + -5.126049728172039e-01 + -5.135521595357905e-01 + -5.144951722594635e-01 + -5.154340177423219e-01 + -5.163687027408718e-01 + -5.172992340140365e-01 + -5.182256180631845e-01 + -5.191478612397169e-01 + -5.200659697981208e-01 + -5.209799499565910e-01 + -5.218898077706294e-01 + -5.227955490891694e-01 + -5.236971796844924e-01 + -5.245947053253370e-01 + -5.254881317688337e-01 + -5.263774645512288e-01 + -5.272627090126604e-01 + -5.281438703531137e-01 + -5.290209539977515e-01 + -5.298939652703512e-01 + -5.307629091340913e-01 + -5.316277904778723e-01 + -5.324886142110474e-01 + -5.333453852986519e-01 + -5.341981085648844e-01 + -5.350467886587517e-01 + -5.358914300418783e-01 + -5.367320373706596e-01 + -5.375686152841432e-01 + -5.384011680734792e-01 + -5.392297001047128e-01 + -5.400542157871245e-01 + -5.408747194069761e-01 + -5.416912150785628e-01 + -5.425037068232484e-01 + -5.433121987186342e-01 + -5.441166948984431e-01 + -5.449171994793097e-01 + -5.457137163885653e-01 + -5.465062494211190e-01 + -5.472948023341125e-01 + -5.480793790518950e-01 + -5.488599834110802e-01 + -5.496366191273470e-01 + -5.504092899443518e-01 + -5.511779994928784e-01 + -5.519427513029639e-01 + -5.527035490710489e-01 + -5.534603964642170e-01 + -5.542132970155166e-01 + -5.549622540841348e-01 + -5.557072711574547e-01 + -5.564483519201564e-01 + -5.571854997347668e-01 + -5.579187179919134e-01 + -5.586480102698358e-01 + -5.593733798207278e-01 + -5.600948299343745e-01 + -5.608123641702291e-01 + -5.615259858006734e-01 + -5.622356980349319e-01 + -5.629415042452564e-01 + -5.636434078437447e-01 + -5.643414121719204e-01 + -5.650355204128609e-01 + -5.657257359067179e-01 + -5.664120620074502e-01 + -5.670945018655422e-01 + -5.677730587569899e-01 + -5.684477360210265e-01 + -5.691185368946378e-01 + -5.697854646230838e-01 + -5.704485224954847e-01 + -5.711077138615709e-01 + -5.717630418949810e-01 + -5.724145097236072e-01 + -5.730621208149326e-01 + -5.737058785857441e-01 + -5.743457862811681e-01 + -5.749818469287452e-01 + -5.756140639044424e-01 + -5.762424408221788e-01 + -5.768669806578469e-01 + -5.774876866716016e-01 + -5.781045625480883e-01 + -5.787176116189466e-01 + -5.793268371095267e-01 + -5.799322422747063e-01 + -5.805338304985933e-01 + -5.811316053198213e-01 + -5.817255703521417e-01 + -5.823157287697720e-01 + -5.829020838792335e-01 + -5.834846393919914e-01 + -5.840633987477251e-01 + -5.846383653791880e-01 + -5.852095428966003e-01 + -5.857769347455314e-01 + -5.863405444497650e-01 + -5.869003757905312e-01 + -5.874564321893059e-01 + -5.880087171065591e-01 + -5.885572344676900e-01 + -5.891019879107314e-01 + -5.896429809482692e-01 + -5.901802172691951e-01 + -5.907137006344829e-01 + -5.912434348345698e-01 + -5.917694236578408e-01 + -5.922916709366750e-01 + -5.928101804947136e-01 + -5.933249560457028e-01 + -5.938360014505492e-01 + -5.943433207019595e-01 + -5.948469177828256e-01 + -5.953467966083078e-01 + -5.958429610716830e-01 + -5.963354151930935e-01 + -5.968241629967538e-01 + -5.973092085065336e-01 + -5.977905558475627e-01 + -5.982682091919279e-01 + -5.987421727060626e-01 + -5.992124504335189e-01 + -5.996790465513929e-01 + -6.001419654039183e-01 + -6.006012111567195e-01 + -6.010567880969444e-01 + -6.015087007096906e-01 + -6.019569532209035e-01 + -6.024015499278780e-01 + -6.028424953542454e-01 + -6.032797938560218e-01 + -6.037134498528102e-01 + -6.041434679778884e-01 + -6.045698527611498e-01 + -6.049926086966888e-01 + -6.054117403213235e-01 + -6.058272522301629e-01 + -6.062391491063152e-01 + -6.066474357377917e-01 + -6.070521167750024e-01 + -6.074531969194140e-01 + -6.078506811508277e-01 + -6.082445741313003e-01 + -6.086348804777613e-01 + -6.090216052590219e-01 + -6.094047534940796e-01 + -6.097843300758768e-01 + -6.101603397998798e-01 + -6.105327877567767e-01 + -6.109016791586246e-01 + -6.112670188349342e-01 + -6.116288118244032e-01 + -6.119870634033990e-01 + -6.123417788015699e-01 + -6.126929631816058e-01 + -6.130406216857481e-01 + -6.133847595846266e-01 + -6.137253821544012e-01 + -6.140624946688724e-01 + -6.143961025253998e-01 + -6.147262111225434e-01 + -6.150528258526081e-01 + -6.153759522847098e-01 + -6.156955958775930e-01 + -6.160117619293205e-01 + -6.163244560848270e-01 + -6.166336840291214e-01 + -6.169394513190288e-01 + -6.172417635406579e-01 + -6.175406263458638e-01 + -6.178360454670117e-01 + -6.181280266570051e-01 + -6.184165756494230e-01 + -6.187016981615432e-01 + -6.189834001775048e-01 + -6.192616876391890e-01 + -6.195365661632112e-01 + -6.198080416901866e-01 + -6.200761202902517e-01 + -6.203408078682074e-01 + -6.206021103982113e-01 + -6.208600339819080e-01 + -6.211145848662764e-01 + -6.213657689929696e-01 + -6.216135922609831e-01 + -6.218580610691606e-01 + -6.220991816188346e-01 + -6.223369599996067e-01 + -6.225714026287344e-01 + -6.228025157602012e-01 + -6.230303055354752e-01 + -6.232547783843585e-01 + -6.234759406837302e-01 + -6.236937987287140e-01 + -6.239083589372102e-01 + -6.241196278170006e-01 + -6.243276119301496e-01 + -6.245323178052680e-01 + -6.247337518435782e-01 + -6.249319204108740e-01 + -6.251268303788342e-01 + -6.253184884524475e-01 + -6.255069009766967e-01 + -6.256920746682559e-01 + -6.258740163701917e-01 + -6.260527328726909e-01 + -6.262282307801417e-01 + -6.264005167589047e-01 + -6.265695976839164e-01 + -6.267354804070123e-01 + -6.268981717782514e-01 + -6.270576786775590e-01 + -6.272140080071444e-01 + -6.273671666729116e-01 + -6.275171615794166e-01 + -6.276639997579259e-01 + -6.278076882572314e-01 + -6.279482340166599e-01 + -6.280856440870369e-01 + -6.282199255881125e-01 + -6.283510856176625e-01 + -6.284791313265480e-01 + -6.286040698559974e-01 + -6.287259082244099e-01 + -6.288446536460758e-01 + -6.289603134448759e-01 + -6.290728947784819e-01 + -6.291824049507972e-01 + -6.292888513285516e-01 + -6.293922409846477e-01 + -6.294925812787570e-01 + -6.295898797737625e-01 + -6.296841435561055e-01 + -6.297753800606519e-01 + -6.298635970427606e-01 + -6.299488015475858e-01 + -6.300310009429952e-01 + -6.301102030719377e-01 + -6.301864151575183e-01 + -6.302596446383568e-01 + -6.303298993873763e-01 + -6.303971867419816e-01 + -6.304615141097702e-01 + -6.305228892569528e-01 + -6.305813198299395e-01 + -6.306368133767261e-01 + -6.306893774095105e-01 + -6.307390196514921e-01 + -6.307857478830511e-01 + -6.308295697989852e-01 + -6.308704929504492e-01 + -6.309085250312678e-01 + -6.309436740902202e-01 + -6.309759477467396e-01 + -6.310053535533821e-01 + -6.310318994644450e-01 + -6.310555933584764e-01 + -6.310764430051494e-01 + -6.310944561130111e-01 + -6.311096405770181e-01 + -6.311220043955681e-01 + -6.311315554778594e-01 + -6.311383016234806e-01 + -6.311422506666780e-01 + -6.311434107412031e-01 + -6.311417897164122e-01 + -6.311373953205278e-01 + -6.311302357049288e-01 + -6.311203189243589e-01 + -6.311076528624781e-01 + -6.310922454230109e-01 + -6.310741047155799e-01 + -6.310532389686786e-01 + -6.310296560496979e-01 + -6.310033639455465e-01 + -6.309743708604478e-01 + -6.309426848479184e-01 + -6.309083139781310e-01 + -6.308712663782245e-01 + -6.308315500367087e-01 + -6.307891730465176e-01 + -6.307441436976022e-01 + -6.306964701860184e-01 + -6.306461606431758e-01 + -6.305932231701467e-01 + -6.305376659121696e-01 + -6.304794970062023e-01 + -6.304187245700347e-01 + -6.303553569805046e-01 + -6.302894025962669e-01 + -6.302208694979176e-01 + -6.301497657748981e-01 + -6.300760996409697e-01 + -6.299998795100692e-01 + -6.299211136514613e-01 + -6.298398102240708e-01 + -6.297559773915322e-01 + -6.296696236381925e-01 + -6.295807574013027e-01 + -6.294893864698483e-01 + -6.293955192818200e-01 + -6.292991645521353e-01 + -6.292003301703828e-01 + -6.290990243894826e-01 + -6.289952557946986e-01 + -6.288890326523825e-01 + -6.287803632353285e-01 + -6.286692558944412e-01 + -6.285557190083507e-01 + -6.284397608763040e-01 + -6.283213897612988e-01 + -6.282006141317734e-01 + -6.280774423035318e-01 + -6.279518824496017e-01 + -6.278239431715447e-01 + -6.276936329659792e-01 + -6.275609600561086e-01 + -6.274259327786519e-01 + -6.272885594754783e-01 + -6.271488484695774e-01 + -6.270068083043618e-01 + -6.268624473656752e-01 + -6.267157737459064e-01 + -6.265667960682418e-01 + -6.264155229504741e-01 + -6.262619625962428e-01 + -6.261061232036680e-01 + -6.259480131935671e-01 + -6.257876413121770e-01 + -6.256250157840939e-01 + -6.254601447340036e-01 + -6.252930366972961e-01 + -6.251237002207461e-01 + -6.249521437614608e-01 + -6.247783756272571e-01 + -6.246024042025771e-01 + -6.244242378628240e-01 + -6.242438848129136e-01 + -6.240613535991787e-01 + -6.238766528797192e-01 + -6.236897908519111e-01 + -6.235007757894835e-01 + -6.233096161276966e-01 + -6.231163203935827e-01 + -6.229208970207127e-01 + -6.227233543185018e-01 + -6.225237005131427e-01 + -6.223219439896936e-01 + -6.221180932821515e-01 + -6.219121568092019e-01 + -6.217041429518334e-01 + -6.214940600654550e-01 + -6.212819164164759e-01 + -6.210677203231969e-01 + -6.208514802076882e-01 + -6.206332045396580e-01 + -6.204129016762088e-01 + -6.201905798335827e-01 + -6.199662474146647e-01 + -6.197399127976954e-01 + -6.195115842446862e-01 + -6.192812702436963e-01 + -6.190489791767655e-01 + -6.188147191241502e-01 + -6.185784984898128e-01 + -6.183403256742428e-01 + -6.181002088023494e-01 + -6.178581563548247e-01 + -6.176141767575239e-01 + -6.173682779492388e-01 + -6.171204683326561e-01 + -6.168707564823446e-01 + -6.166191506410910e-01 + -6.163656588303806e-01 + -6.161102891648960e-01 + -6.158530502595377e-01 + -6.155939503803246e-01 + -6.153329975648972e-01 + -6.150702000825419e-01 + -6.148055662334609e-01 + -6.145391042808102e-01 + -6.142708224010276e-01 + -6.140007288452335e-01 + -6.137288318637003e-01 + -6.134551394181680e-01 + -6.131796597624336e-01 + -6.129024013716257e-01 + -6.126233721919256e-01 + -6.123425803085120e-01 + -6.120600340492245e-01 + -6.117757414641359e-01 + -6.114897106263320e-01 + -6.112019497520672e-01 + -6.109124671249474e-01 + -6.106212708396386e-01 + -6.103283687668304e-01 + -6.100337690977098e-01 + -6.097374799911853e-01 + -6.094395093910078e-01 + -6.091398653642833e-01 + -6.088385561024087e-01 + -6.085355898356886e-01 + -6.082309742898534e-01 + -6.079247173286892e-01 + -6.076168274335947e-01 + -6.073073125569597e-01 + -6.069961804304546e-01 + -6.066834389911383e-01 + -6.063690964791788e-01 + -6.060531610171422e-01 + -6.057356401425160e-01 + -6.054165419100932e-01 + -6.050958745176729e-01 + -6.047736455801236e-01 + -6.044498630713394e-01 + -6.041245351487873e-01 + -6.037976695799242e-01 + -6.034692741523835e-01 + -6.031393567367498e-01 + -6.028079252312161e-01 + -6.024749874110954e-01 + -6.021405510415967e-01 + -6.018046242357692e-01 + -6.014672148046522e-01 + -6.011283302871711e-01 + -6.007879786053585e-01 + -6.004461675660895e-01 + -6.001029047914931e-01 + -5.997581981158361e-01 + -5.994120553308485e-01 + -5.990644841299763e-01 + -5.987154923482985e-01 + -5.983650876334137e-01 + -5.980132773866208e-01 + -5.976600693793478e-01 + -5.973054714798371e-01 + -5.969494914365839e-01 + -5.965921366499265e-01 + -5.962334146660923e-01 + -5.958733334161985e-01 + -5.955119002909084e-01 + -5.951491227180785e-01 + -5.947850085981863e-01 + -5.944195652847630e-01 + -5.940528001366523e-01 + -5.936847210858313e-01 + -5.933153356463837e-01 + -5.929446511281147e-01 + -5.925726749957585e-01 + -5.921994146776245e-01 + -5.918248776317639e-01 + -5.914490714685531e-01 + -5.910720036664838e-01 + -5.906936815737919e-01 + -5.903141124838686e-01 + -5.899333037986367e-01 + -5.895512629817115e-01 + -5.891679973989596e-01 + -5.887835143677140e-01 + -5.883978211708401e-01 + -5.880109250637769e-01 + -5.876228334774148e-01 + -5.872335538851382e-01 + -5.868430932520374e-01 + -5.864514587624869e-01 + -5.860586578978172e-01 + -5.856646978273519e-01 + -5.852695857497323e-01 + -5.848733289413443e-01 + -5.844759343592291e-01 + -5.840774091773326e-01 + -5.836777608879199e-01 + -5.832769964405170e-01 + -5.828751228494087e-01 + -5.824721474461222e-01 + -5.820680771414760e-01 + -5.816629188869962e-01 + -5.812566799399100e-01 + -5.808493672421570e-01 + -5.804409877894702e-01 + -5.800315488931496e-01 + -5.796210574409676e-01 + -5.792095201878247e-01 + -5.787969440874288e-01 + -5.783833362006023e-01 + -5.779687035684036e-01 + -5.775530530727403e-01 + -5.771363914738108e-01 + -5.767187255974381e-01 + -5.763000625573806e-01 + -5.758804091701334e-01 + -5.754597721176316e-01 + -5.750381583420940e-01 + -5.746155745735496e-01 + -5.741920274506414e-01 + -5.737675239291555e-01 + -5.733420708457294e-01 + -5.729156748671344e-01 + -5.724883426083383e-01 + -5.720600807791615e-01 + -5.716308961653045e-01 + -5.712007954599810e-01 + -5.707697852850102e-01 + -5.703378722272431e-01 + -5.699050629355835e-01 + -5.694713639828742e-01 + -5.690367818720566e-01 + -5.686013232951076e-01 + -5.681649948578290e-01 + -5.677278029894381e-01 + -5.672897541841998e-01 + -5.668508549514105e-01 + -5.664111117923113e-01 + -5.659705312703284e-01 + -5.655291198708162e-01 + -5.650868839171556e-01 + -5.646438297396282e-01 + -5.641999637601537e-01 + -5.637552925169101e-01 + -5.633098223391846e-01 + -5.628635595080524e-01 + -5.624165104013904e-01 + -5.619686812129524e-01 + -5.615200782186582e-01 + -5.610707080464411e-01 + -5.606205767194389e-01 + -5.601696901727680e-01 + -5.597180550627928e-01 + -5.592656777039943e-01 + -5.588125640834879e-01 + -5.583587201544192e-01 + -5.579041522213387e-01 + -5.574488666805684e-01 + -5.569928694014434e-01 + -5.565361664370690e-01 + -5.560787640439252e-01 + -5.556206683493946e-01 + -5.551618853326125e-01 + -5.547024208857518e-01 + -5.542422809960397e-01 + -5.537814718214656e-01 + -5.533199995563840e-01 + -5.528578699065892e-01 + -5.523950887012330e-01 + -5.519316620139326e-01 + -5.514675956847120e-01 + -5.510028956792654e-01 + -5.505375681122012e-01 + -5.500716185256428e-01 + -5.496050526609592e-01 + -5.491378767346244e-01 + -5.486700964364043e-01 + -5.482017173715276e-01 + -5.477327453596050e-01 + -5.472631862648399e-01 + -5.467930458019109e-01 + -5.463223294669347e-01 + -5.458510432287255e-01 + -5.453791929736209e-01 + -5.449067840000759e-01 + -5.444338218966174e-01 + -5.439603123952597e-01 + -5.434862611282417e-01 + -5.430116738240560e-01 + -5.425365561436022e-01 + -5.420609134355956e-01 + -5.415847511352451e-01 + -5.411080748136494e-01 + -5.406308901525899e-01 + -5.401532026526268e-01 + -5.396750177177082e-01 + -5.391963408895222e-01 + -5.387171774649071e-01 + -5.382375326730170e-01 + -5.377574122460893e-01 + -5.372768215524759e-01 + -5.367957656717409e-01 + -5.363142502106338e-01 + -5.358322806031541e-01 + -5.353498619928253e-01 + -5.348669995911720e-01 + -5.343836987381033e-01 + -5.338999648334884e-01 + -5.334158029976483e-01 + -5.329312184607295e-01 + -5.324462166033185e-01 + -5.319608023124877e-01 + -5.314749807283198e-01 + -5.309887574568507e-01 + -5.305021373834015e-01 + -5.300151254489873e-01 + -5.295277270550899e-01 + -5.290399471460621e-01 + -5.285517906644440e-01 + -5.280632628772480e-01 + -5.275743687930865e-01 + -5.270851133485194e-01 + -5.265955015863814e-01 + -5.261055383771222e-01 + -5.256152286457003e-01 + -5.251245776074701e-01 + -5.246335901741112e-01 + -5.241422711040373e-01 + -5.236506252667474e-01 + -5.231586574906982e-01 + -5.226663726352896e-01 + -5.221737757253558e-01 + -5.216808715970676e-01 + -5.211876649797802e-01 + -5.206941607382560e-01 + -5.202003635069621e-01 + -5.197062778404161e-01 + -5.192119087096243e-01 + -5.187172609937223e-01 + -5.182223393579939e-01 + -5.177271482807863e-01 + -5.172316923981860e-01 + -5.167359765148800e-01 + -5.162400053033168e-01 + -5.157437833544083e-01 + -5.152473152222008e-01 + -5.147506055161414e-01 + -5.142536587718484e-01 + -5.137564794429633e-01 + -5.132590721404230e-01 + -5.127614414610688e-01 + -5.122635918987255e-01 + -5.117655278912282e-01 + -5.112672538418732e-01 + -5.107687741570007e-01 + -5.102700934318621e-01 + -5.097712161511054e-01 + -5.092721464952894e-01 + -5.087728887586368e-01 + -5.082734473837237e-01 + -5.077738269224511e-01 + -5.072740315773641e-01 + -5.067740655070005e-01 + -5.062739331645890e-01 + -5.057736389339202e-01 + -5.052731870571522e-01 + -5.047725816027976e-01 + -5.042718267556677e-01 + -5.037709267723895e-01 + -5.032698858620083e-01 + -5.027687082997551e-01 + -5.022673983228978e-01 + -5.017659599138892e-01 + -5.012643972224838e-01 + -5.007627144504877e-01 + -5.002609154317549e-01 + -4.997590043686060e-01 + -4.992569856498065e-01 + -4.987548629163329e-01 + -4.982526401066572e-01 + -4.977503215591422e-01 + -4.972479113357710e-01 + -4.967454132608579e-01 + -4.962428310876830e-01 + -4.957401690448965e-01 + -4.952374311333114e-01 + -4.947346209581790e-01 + -4.942317423902789e-01 + -4.937287995168010e-01 + -4.932257964768885e-01 + -4.927227367709692e-01 + -4.922196239985463e-01 + -4.917164622446805e-01 + -4.912132554897460e-01 + -4.907100074652099e-01 + -4.902067216434476e-01 + -4.897034018910860e-01 + -4.892000521396699e-01 + -4.886966760659724e-01 + -4.881932772071136e-01 + -4.876898592264887e-01 + -4.871864261030248e-01 + -4.866829812293292e-01 + -4.861795280147214e-01 + -4.856760706607693e-01 + -4.851726126266216e-01 + -4.846691571189501e-01 + -4.841657080652781e-01 + -4.836622690168214e-01 + -4.831588433295234e-01 + -4.826554347812969e-01 + -4.821520468729375e-01 + -4.816486828820545e-01 + -4.811453462713459e-01 + -4.806420406166251e-01 + -4.801387695127853e-01 + -4.796355363816449e-01 + -4.791323444815042e-01 + -4.786291970695780e-01 + -4.781260978727254e-01 + -4.776230503252043e-01 + -4.771200574973888e-01 + -4.766171228253449e-01 + -4.761142497486388e-01 + -4.756114415594656e-01 + -4.751087014547341e-01 + -4.746060327035595e-01 + -4.741034386828772e-01 + -4.736009226286348e-01 + -4.730984877717556e-01 + -4.725961373913972e-01 + -4.720938746127822e-01 + -4.715917026117559e-01 + -4.710896247171748e-01 + -4.705876440070008e-01 + -4.700857635192827e-01 + -4.695839864443119e-01 + -4.690823160197067e-01 + -4.685807553687465e-01 + -4.680793073815264e-01 + -4.675779752270572e-01 + -4.670767621237579e-01 + -4.665756710130068e-01 + -4.660747048828000e-01 + -4.655738667469987e-01 + -4.650731595624170e-01 + -4.645725864569897e-01 + -4.640721505529091e-01 + -4.635718546060059e-01 + -4.630717014390969e-01 + -4.625716940204364e-01 + -4.620718354412200e-01 + -4.615721285948061e-01 + -4.610725762550177e-01 + -4.605731814392849e-01 + -4.600739469669758e-01 + -4.595748755034438e-01 + -4.590759700613133e-01 + -4.585772335293120e-01 + -4.580786685902926e-01 + -4.575802780165928e-01 + -4.570820645542124e-01 + -4.565840309327809e-01 + -4.560861801183225e-01 + -4.555885148408127e-01 + -4.550910375242214e-01 + -4.545937511574892e-01 + -4.540966585092119e-01 + -4.535997618400510e-01 + -4.531030641427475e-01 + -4.526065682230286e-01 + -4.521102761991050e-01 + -4.516141909960451e-01 + -4.511183155232459e-01 + -4.506226519976986e-01 + -4.501272029129367e-01 + -4.496319709853875e-01 + -4.491369589904647e-01 + -4.486421693813144e-01 + -4.481476045149588e-01 + -4.476532669406306e-01 + -4.471591591812127e-01 + -4.466652837454304e-01 + -4.461716431800687e-01 + -4.456782399407630e-01 + -4.451850764283579e-01 + -4.446921550770006e-01 + -4.441994783152980e-01 + -4.437070485743053e-01 + -4.432148683148817e-01 + -4.427229399164072e-01 + -4.422312656936392e-01 + -4.417398479943503e-01 + -4.412486891611525e-01 + -4.407577915365379e-01 + -4.402671575060104e-01 + -4.397767893532367e-01 + -4.392866892910770e-01 + -4.387968597340107e-01 + -4.383073029681190e-01 + -4.378180210879689e-01 + -4.373290163087382e-01 + -4.368402909924953e-01 + -4.363518475687816e-01 + -4.358636880897754e-01 + -4.353758146064535e-01 + -4.348882293452391e-01 + -4.344009344375495e-01 + -4.339139321041776e-01 + -4.334272247184532e-01 + -4.329408142509990e-01 + -4.324547026649819e-01 + -4.319688922210647e-01 + -4.314833850702666e-01 + -4.309981832317592e-01 + -4.305132886299618e-01 + -4.300287034407881e-01 + -4.295444298858639e-01 + -4.290604699557538e-01 + -4.285768254794737e-01 + -4.280934983815344e-01 + -4.276104909880938e-01 + -4.271278053251724e-01 + -4.266454431999359e-01 + -4.261634065006114e-01 + -4.256816972235624e-01 + -4.252003173934318e-01 + -4.247192689049444e-01 + -4.242385536499166e-01 + -4.237581735472888e-01 + -4.232781305399061e-01 + -4.227984264773803e-01 + -4.223190631457318e-01 + -4.218400424415704e-01 + -4.213613663598799e-01 + -4.208830368540804e-01 + -4.204050553934426e-01 + -4.199274237890383e-01 + -4.194501442515862e-01 + -4.189732183034799e-01 + -4.184966476302857e-01 + -4.180204343198091e-01 + -4.175445800025869e-01 + -4.170690862458790e-01 + -4.165939547960728e-01 + -4.161191875920802e-01 + -4.156447863485650e-01 + -4.151707524172177e-01 + -4.146970878143395e-01 + -4.142237944432959e-01 + -4.137508735370036e-01 + -4.132783267358912e-01 + -4.128061559031381e-01 + -4.123343628419361e-01 + -4.118629489726368e-01 + -4.113919157251955e-01 + -4.109212649651476e-01 + -4.104509983224866e-01 + -4.099811172669397e-01 + -4.095116233202941e-01 + -4.090425181490535e-01 + -4.085738034100841e-01 + -4.081054804950061e-01 + -4.076375508831032e-01 + -4.071700161671795e-01 + -4.067028779692610e-01 + -4.062361376606066e-01 + -4.057697965353959e-01 + -4.053038563335837e-01 + -4.048383186645677e-01 + -4.043731849141807e-01 + -4.039084564103662e-01 + -4.034441345521896e-01 + -4.029802208230617e-01 + -4.025167167043049e-01 + -4.020536236099443e-01 + -4.015909428779320e-01 + -4.011286758375757e-01 + -4.006668238996902e-01 + -4.002053885607212e-01 + -3.997443712200008e-01 + -3.992837731698375e-01 + -3.988235956310492e-01 + -3.983638399923307e-01 + -3.979045076012857e-01 + -3.974455996644362e-01 + -3.969871175556028e-01 + -3.965290626455606e-01 + -3.960714361699136e-01 + -3.956142393772600e-01 + -3.951574735515524e-01 + -3.947011399985758e-01 + -3.942452398354794e-01 + -3.937897742524872e-01 + -3.933347447660869e-01 + -3.928801524442024e-01 + -3.924259983101159e-01 + -3.919722839283850e-01 + -3.915190103656777e-01 + -3.910661784756895e-01 + -3.906137895655892e-01 + -3.901618450499643e-01 + -3.897103461604648e-01 + -3.892592935529919e-01 + -3.888086884121152e-01 + -3.883585322771145e-01 + -3.879088261485191e-01 + -3.874595710701922e-01 + -3.870107681556456e-01 + -3.865624182556531e-01 + -3.861145225228043e-01 + -3.856670823544472e-01 + -3.852200986473037e-01 + -3.847735723987576e-01 + -3.843275047747315e-01 + -3.838818965026468e-01 + -3.834367486164244e-01 + -3.829920625791138e-01 + -3.825478392535004e-01 + -3.821040794322394e-01 + -3.816607841213338e-01 + -3.812179544462010e-01 + -3.807755914230820e-01 + -3.803336958584798e-01 + -3.798922686597118e-01 + -3.794513108818827e-01 + -3.790108236907996e-01 + -3.785708078449803e-01 + -3.781312640889848e-01 + -3.776921934895628e-01 + -3.772535969260590e-01 + -3.768154752452403e-01 + -3.763778294637203e-01 + -3.759406605249527e-01 + -3.755039692439986e-01 + -3.750677562951532e-01 + -3.746320226741715e-01 + -3.741967693787305e-01 + -3.737619968727901e-01 + -3.733277061470673e-01 + -3.728938983949728e-01 + -3.724605741247380e-01 + -3.720277341192338e-01 + -3.715953793429491e-01 + -3.711635103186269e-01 + -3.707321278978636e-01 + -3.703012331728173e-01 + -3.698708267439747e-01 + -3.694409092657609e-01 + -3.690114815572269e-01 + -3.685825444178367e-01 + -3.681540985405766e-01 + -3.677261445488677e-01 + -3.672986832474148e-01 + -3.668717154245260e-01 + -3.664452417818624e-01 + -3.660192630178876e-01 + -3.655937798167319e-01 + -3.651687928442244e-01 + -3.647443027770453e-01 + -3.643203103057334e-01 + -3.638968161236534e-01 + -3.634738208501973e-01 + -3.630513251204181e-01 + -3.626293296340570e-01 + -3.622078349959966e-01 + -3.617868418102546e-01 + -3.613663507559756e-01 + -3.609463624258993e-01 + -3.605268773947004e-01 + -3.601078962972172e-01 + -3.596894197319259e-01 + -3.592714482724653e-01 + -3.588539824938156e-01 + -3.584370229705016e-01 + -3.580205702765974e-01 + -3.576046249835235e-01 + -3.571891876270012e-01 + -3.567742587321382e-01 + -3.563598388637925e-01 + -3.559459285557617e-01 + -3.555325283179373e-01 + -3.551196386794110e-01 + -3.547072601423791e-01 + -3.542953931967586e-01 + -3.538840383835105e-01 + -3.534731961849680e-01 + -3.530628670336623e-01 + -3.526530514374770e-01 + -3.522437498876279e-01 + -3.518349628366106e-01 + -3.514266907403692e-01 + -3.510189340474827e-01 + -3.506116931966672e-01 + -3.502049686305037e-01 + -3.497987607886671e-01 + -3.493930701015490e-01 + -3.489878969787067e-01 + -3.485832418243141e-01 + -3.481791050461803e-01 + -3.477754870557839e-01 + -3.473723882547367e-01 + -3.469698090253131e-01 + -3.465677497415546e-01 + -3.461662107762984e-01 + -3.457651925045610e-01 + -3.453646952920019e-01 + -3.449647194961470e-01 + -3.445652654674211e-01 + -3.441663335489293e-01 + -3.437679240760669e-01 + -3.433700373751777e-01 + -3.429726737709668e-01 + -3.425758335909973e-01 + -3.421795171685511e-01 + -3.417837248082679e-01 + -3.413884567949557e-01 + -3.409937134173290e-01 + -3.405994949798623e-01 + -3.402058017865278e-01 + -3.398126341027504e-01 + -3.394199921921239e-01 + -3.390278763247643e-01 + -3.386362867748747e-01 + -3.382452237948665e-01 + -3.378546876227794e-01 + -3.374646785249709e-01 + -3.370751967392704e-01 + -3.366862424749215e-01 + -3.362978159833941e-01 + -3.359099174981644e-01 + -3.355225472182573e-01 + -3.351357053498810e-01 + -3.347493921057998e-01 + -3.343636076973308e-01 + -3.339783523006465e-01 + -3.335936261089775e-01 + -3.332094293460974e-01 + -3.328257621547543e-01 + -3.324426246881435e-01 + -3.320600171619409e-01 + -3.316779397280902e-01 + -3.312963925265998e-01 + -3.309153757279716e-01 + -3.305348894653861e-01 + -3.301549338737799e-01 + -3.297755091265357e-01 + -3.293966153413448e-01 + -3.290182526215280e-01 + -3.286404211114115e-01 + -3.282631209285871e-01 + -3.278863521751846e-01 + -3.275101149642331e-01 + -3.271344093953196e-01 + -3.267592355617253e-01 + -3.263845935667566e-01 + -3.260104834866909e-01 + -3.256369053882101e-01 + -3.252638593756906e-01 + -3.248913455268053e-01 + -3.245193638907094e-01 + -3.241479145199382e-01 + -3.237769974872735e-01 + -3.234066128661293e-01 + -3.230367606622389e-01 + -3.226674409186036e-01 + -3.222986537192250e-01 + -3.219303990783447e-01 + -3.215626770146125e-01 + -3.211954875680534e-01 + -3.208288307426270e-01 + -3.204627065455645e-01 + -3.200971150001409e-01 + -3.197320561103191e-01 + -3.193675298795836e-01 + -3.190035363166080e-01 + -3.186400754009213e-01 + -3.182771471114187e-01 + -3.179147514432106e-01 + -3.175528883799994e-01 + -3.171915578921511e-01 + -3.168307599394173e-01 + -3.164704945026028e-01 + -3.161107615528752e-01 + -3.157515610223091e-01 + -3.153928928534279e-01 + -3.150347570035595e-01 + -3.146771534412893e-01 + -3.143200821026652e-01 + -3.139635429048980e-01 + -3.136075357713601e-01 + -3.132520606345795e-01 + -3.128971174301287e-01 + -3.125427060850263e-01 + -3.121888265003789e-01 + -3.118354785699559e-01 + -3.114826622209773e-01 + -3.111303773636806e-01 + -3.107786238863177e-01 + -3.104274016699458e-01 + -3.100767106006651e-01 + -3.097265505731036e-01 + -3.093769214901858e-01 + -3.090278232197667e-01 + -3.086792556057311e-01 + -3.083312185528201e-01 + -3.079837119302323e-01 + -3.076367355606988e-01 + -3.072902893338402e-01 + -3.069443731087555e-01 + -3.065989866918071e-01 + -3.062541299629242e-01 + -3.059098027895394e-01 + -3.055660049841727e-01 + -3.052227363624680e-01 + -3.048799967605036e-01 + -3.045377860349815e-01 + -3.041961039937703e-01 + -3.038549504461246e-01 + -3.035143252370935e-01 + -3.031742281687436e-01 + -3.028346590287212e-01 + -3.024956176228422e-01 + -3.021571037727226e-01 + -3.018191172891879e-01 + -3.014816579447884e-01 + -3.011447255196590e-01 + -3.008083198102758e-01 + -3.004724406299011e-01 + -3.001370877400161e-01 + -2.998022608844934e-01 + -2.994679598576119e-01 + -2.991341844426006e-01 + -2.988009344054493e-01 + -2.984682095047237e-01 + -2.981360094999961e-01 + -2.978043341494513e-01 + -2.974731831997393e-01 + -2.971425563888731e-01 + -2.968124534589884e-01 + -2.964828741880918e-01 + -2.961538183196636e-01 + -2.958252855581221e-01 + -2.954972756291568e-01 + -2.951697882690829e-01 + -2.948428232168150e-01 + -2.945163801997789e-01 + -2.941904589349781e-01 + -2.938650591314966e-01 + -2.935401805013078e-01 + -2.932158227514122e-01 + -2.928919855851135e-01 + -2.925686687341852e-01 + -2.922458719001491e-01 + -2.919235947316832e-01 + -2.916018369508684e-01 + -2.912805982685433e-01 + -2.909598783275820e-01 + -2.906396768390501e-01 + -2.903199935181080e-01 + -2.900008280188033e-01 + -2.896821799916231e-01 + -2.893640491090957e-01 + -2.890464350819901e-01 + -2.887293375718574e-01 + -2.884127562142981e-01 + -2.880966906629407e-01 + -2.877811406014185e-01 + -2.874661057081589e-01 + -2.871515856017081e-01 + -2.868375799224188e-01 + -2.865240883310016e-01 + -2.862111104788733e-01 + -2.858986460098822e-01 + -2.855866945593247e-01 + -2.852752557499685e-01 + -2.849643292069009e-01 + -2.846539145659956e-01 + -2.843440114851778e-01 + -2.840346195818731e-01 + -2.837257384382189e-01 + -2.834173676812886e-01 + -2.831095069534547e-01 + -2.828021558855677e-01 + -2.824953140398479e-01 + -2.821889810170294e-01 + -2.818831564761255e-01 + -2.815778399984394e-01 + -2.812730311718642e-01 + -2.809687296216254e-01 + -2.806649349155874e-01 + -2.803616466281044e-01 + -2.800588643758425e-01 + -2.797565877594176e-01 + -2.794548163592918e-01 + -2.791535497376408e-01 + -2.788527874670974e-01 + -2.785525291296920e-01 + -2.782527743138438e-01 + -2.779535226034689e-01 + -2.776547735631448e-01 + -2.773565267276963e-01 + -2.770587816777879e-01 + -2.767615379983304e-01 + -2.764647952191276e-01 + -2.761685529026718e-01 + -2.758728106207560e-01 + -2.755775679024411e-01 + -2.752828243050798e-01 + -2.749885793975552e-01 + -2.746948327088052e-01 + -2.744015837838452e-01 + -2.741088321749212e-01 + -2.738165773969221e-01 + -2.735248189792139e-01 + -2.732335564721672e-01 + -2.729427894286903e-01 + -2.726525173657923e-01 + -2.723627397775934e-01 + -2.720734562117226e-01 + -2.717846661993187e-01 + -2.714963692431568e-01 + -2.712085648712142e-01 + -2.709212526021956e-01 + -2.706344319386959e-01 + -2.703481024077038e-01 + -2.700622635195931e-01 + -2.697769147573882e-01 + -2.694920556414950e-01 + -2.692076856844960e-01 + -2.689238043678598e-01 + -2.686404111894522e-01 + -2.683575056539274e-01 + -2.680750872618156e-01 + -2.677931554956217e-01 + -2.675117098420171e-01 + -2.672307498062658e-01 + -2.669502748541435e-01 + -2.666702844564393e-01 + -2.663907781339158e-01 + -2.661117553567487e-01 + -2.658332155842312e-01 + -2.655551583220328e-01 + -2.652775830228958e-01 + -2.650004891310402e-01 + -2.647238761635896e-01 + -2.644477435849875e-01 + -2.641720908275026e-01 + -2.638969173638899e-01 + -2.636222226679477e-01 + -2.633480062028563e-01 + -2.630742674151484e-01 + -2.628010057675256e-01 + -2.625282207270022e-01 + -2.622559117157733e-01 + -2.619840781930577e-01 + -2.617127196438671e-01 + -2.614418354712815e-01 + -2.611714251171109e-01 + -2.609014880694051e-01 + -2.606320237300626e-01 + -2.603630315312080e-01 + -2.600945109576975e-01 + -2.598264614192900e-01 + -2.595588823272051e-01 + -2.592917731268140e-01 + -2.590251332515323e-01 + -2.587589621335352e-01 + -2.584932592080277e-01 + -2.582280238899204e-01 + -2.579632555996659e-01 + -2.576989537753064e-01 + -2.574351178135512e-01 + -2.571717471205571e-01 + -2.569088411498421e-01 + -2.566463993032694e-01 + -2.563844209736399e-01 + -2.561229055922761e-01 + -2.558618525664796e-01 + -2.556012613001373e-01 + -2.553411312228936e-01 + -2.550814617199114e-01 + -2.548222521633088e-01 + -2.545635019702024e-01 + -2.543052105636615e-01 + -2.540473773489130e-01 + -2.537900016856341e-01 + -2.535330829668063e-01 + -2.532766206092137e-01 + -2.530206140025920e-01 + -2.527650625373169e-01 + -2.525099656058339e-01 + -2.522553225882911e-01 + -2.520011328519368e-01 + -2.517473957689335e-01 + -2.514941107682424e-01 + -2.512412772287477e-01 + -2.509888944763962e-01 + -2.507369619085763e-01 + -2.504854789235316e-01 + -2.502344448942996e-01 + -2.499838591881081e-01 + -2.497337211675947e-01 + -2.494840301941274e-01 + -2.492347856449565e-01 + -2.489859868896926e-01 + -2.487376332816026e-01 + -2.484897241934407e-01 + -2.482422589923619e-01 + -2.479952370263670e-01 + -2.477486576676466e-01 + -2.475025202765806e-01 + -2.472568241776227e-01 + -2.470115687463755e-01 + -2.467667533575219e-01 + -2.465223773319763e-01 + -2.462784400223504e-01 + -2.460349407926405e-01 + -2.457918789841980e-01 + -2.455492539346369e-01 + -2.453070649885519e-01 + -2.450653115068263e-01 + -2.448239928212929e-01 + -2.445831082525867e-01 + -2.443426571517872e-01 + -2.441026388729581e-01 + -2.438630527595843e-01 + -2.436238981283992e-01 + -2.433851743000419e-01 + -2.431468806082007e-01 + -2.429090164035606e-01 + -2.426715810065056e-01 + -2.424345737214870e-01 + -2.421979939156839e-01 + -2.419618409122474e-01 + -2.417261139893861e-01 + -2.414908125047008e-01 + -2.412559357926221e-01 + -2.410214831428485e-01 + -2.407874538901436e-01 + -2.405538473594189e-01 + -2.403206628448788e-01 + -2.400878996494245e-01 + -2.398555571012901e-01 + -2.396236345489386e-01 + -2.393921312730178e-01 + -2.391610465589564e-01 + -2.389303797400675e-01 + -2.387001301206918e-01 + -2.384702970040557e-01 + -2.382408797142012e-01 + -2.380118775445049e-01 + -2.377832897784107e-01 + -2.375551157141706e-01 + -2.373273546676602e-01 + -2.371000059435911e-01 + -2.368730688080822e-01 + -2.366465425799626e-01 + -2.364204265795865e-01 + -2.361947200488833e-01 + -2.359694222928865e-01 + -2.357445326362645e-01 + -2.355200503199650e-01 + -2.352959746331166e-01 + -2.350723049000333e-01 + -2.348490404054174e-01 + -2.346261804119323e-01 + -2.344037241869703e-01 + -2.341816710532240e-01 + -2.339600202844186e-01 + -2.337387711161095e-01 + -2.335179228570654e-01 + -2.332974748051559e-01 + -2.330774262250223e-01 + -2.328577763695832e-01 + -2.326385245095027e-01 + -2.324196699339893e-01 + -2.322012119071908e-01 + -2.319831496985562e-01 + -2.317654825913850e-01 + -2.315482098501277e-01 + -2.313313307350805e-01 + -2.311148445095759e-01 + -2.308987504304352e-01 + -2.306830477605995e-01 + -2.304677357746768e-01 + -2.302528137313455e-01 + -2.300382808821649e-01 + -2.298241364802842e-01 + -2.296103797849810e-01 + -2.293970100645507e-01 + -2.291840265929282e-01 + -2.289714285853380e-01 + -2.287592152687787e-01 + -2.285473859575702e-01 + -2.283359398767679e-01 + -2.281248762354934e-01 + -2.279141943457151e-01 + -2.277038934347241e-01 + -2.274939727028900e-01 + -2.272844314557521e-01 + -2.270752689260884e-01 + -2.268664843063303e-01 + -2.266580768713468e-01 + -2.264500458690802e-01 + -2.262423905203003e-01 + -2.260351100742427e-01 + -2.258282037663114e-01 + -2.256216708189812e-01 + -2.254155104759721e-01 + -2.252097219699820e-01 + -2.250043045201664e-01 + -2.247992573593203e-01 + -2.245945797283117e-01 + -2.243902708632074e-01 + -2.241863299547213e-01 + -2.239827562297785e-01 + -2.237795489631809e-01 + -2.235767073479459e-01 + -2.233742305913306e-01 + -2.231721179508258e-01 + -2.229703686190215e-01 + -2.227689817967141e-01 + -2.225679567331226e-01 + -2.223672926389324e-01 + -2.221669887137792e-01 + -2.219670441735496e-01 + -2.217674582593449e-01 + -2.215682301863681e-01 + -2.213693591068690e-01 + -2.211708442449674e-01 + -2.209726848493868e-01 + -2.207748801280919e-01 + -2.205774292618204e-01 + -2.203803314334422e-01 + -2.201835858632719e-01 + -2.199871917828554e-01 + -2.197911484006530e-01 + -2.195954548584606e-01 + -2.194001103587555e-01 + -2.192051141421317e-01 + -2.190104654040938e-01 + -2.188161633272981e-01 + -2.186222070944807e-01 + -2.184285959003400e-01 + -2.182353289399314e-01 + -2.180424054040691e-01 + -2.178498244760091e-01 + -2.176575853577229e-01 + -2.174656872563868e-01 + -2.172741293153170e-01 + -2.170829107184905e-01 + -2.168920306960583e-01 + -2.167014883907840e-01 + -2.165112829716549e-01 + -2.163214136638050e-01 + -2.161318796380734e-01 + -2.159426800456078e-01 + -2.157538140457635e-01 + -2.155652808465100e-01 + -2.153770796378261e-01 + -2.151892095617934e-01 + -2.150016698096599e-01 + -2.148144595574814e-01 + -2.146275779264766e-01 + -2.144410241083473e-01 + -2.142547972973645e-01 + -2.140688966286696e-01 + -2.138833212713278e-01 + -2.136980704068839e-01 + -2.135131431962469e-01 + -2.133285387811797e-01 + -2.131442563097479e-01 + -2.129602949644751e-01 + -2.127766538888946e-01 + -2.125933322205115e-01 + -2.124103291538361e-01 + -2.122276438425608e-01 + -2.120452754131807e-01 + -2.118632230196053e-01 + -2.116814858091140e-01 + -2.115000629262062e-01 + -2.113189535366684e-01 + -2.111381567835468e-01 + -2.109576717897184e-01 + -2.107774976942802e-01 + -2.105976336477213e-01 + -2.104180788038142e-01 + -2.102388322993181e-01 + -2.100598932684242e-01 + -2.098812608470688e-01 + -2.097029341689293e-01 + -2.095249123662445e-01 + -2.093471945702010e-01 + -2.091697799107427e-01 + -2.089926675162990e-01 + -2.088158565139439e-01 + -2.086393460309292e-01 + -2.084631351904399e-01 + -2.082872231124364e-01 + -2.081116089361562e-01 + -2.079362917906518e-01 + -2.077612707758083e-01 + -2.075865450013143e-01 + -2.074121135936494e-01 + -2.072379756933602e-01 + -2.070641303864229e-01 + -2.068905767613353e-01 + -2.067173139701657e-01 + -2.065443411403108e-01 + -2.063716573678470e-01 + -2.061992617242399e-01 + -2.060271533191409e-01 + -2.058553312792487e-01 + -2.056837947057731e-01 + -2.055125426973447e-01 + -2.053415743575506e-01 + -2.051708887985432e-01 + -2.050004850901530e-01 + -2.048303622987561e-01 + -2.046605195888223e-01 + -2.044909560501713e-01 + -2.043216707137636e-01 + -2.041526627003059e-01 + -2.039839311053935e-01 + -2.038154749924674e-01 + -2.036472934779214e-01 + -2.034793856435669e-01 + -2.033117505334730e-01 + -2.031443872603400e-01 + -2.029772949053144e-01 + -2.028104725040109e-01 + -2.026439191805672e-01 + -2.024776340229360e-01 + -2.023116160442759e-01 + -2.021458643362796e-01 + -2.019803779931268e-01 + -2.018151560674621e-01 + -2.016501976152565e-01 + -2.014855017030598e-01 + -2.013210674074579e-01 + -2.011568937830132e-01 + -2.009929798869589e-01 + -2.008293247967324e-01 + -2.006659275530022e-01 + -2.005027871933542e-01 + -2.003399027889975e-01 + -2.001772733993469e-01 + -2.000148980648089e-01 + -1.998527758076494e-01 + -1.996909056937942e-01 + -1.995292867991256e-01 + -1.993679181495860e-01 + -1.992067987609143e-01 + -1.990459276660739e-01 + -1.988853039482369e-01 + -1.987249266385540e-01 + -1.985647947339026e-01 + -1.984049072747179e-01 + -1.982452632992336e-01 + -1.980858618372365e-01 + -1.979267019229292e-01 + -1.977677825816225e-01 + -1.976091028269504e-01 + -1.974506616652059e-01 + -1.972924581269546e-01 + -1.971344912595772e-01 + -1.969767600601777e-01 + -1.968192635197257e-01 + -1.966620006473419e-01 + -1.965049704914111e-01 + -1.963481720619957e-01 + -1.961916043159508e-01 + -1.960352662866058e-01 + -1.958791570023236e-01 + -1.957232754408347e-01 + -1.955676205736371e-01 + -1.954121914050787e-01 + -1.952569869811404e-01 + -1.951020062511957e-01 + -1.949472481743376e-01 + -1.947927118000400e-01 + -1.946383960967118e-01 + -1.944843000224015e-01 + -1.943304226010136e-01 + -1.941767627996486e-01 + -1.940233195719773e-01 + -1.938700919198527e-01 + -1.937170788011597e-01 + -1.935642791691659e-01 + -1.934116920404960e-01 + -1.932593163702813e-01 + -1.931071510855982e-01 + -1.929551951739442e-01 + -1.928034476111422e-01 + -1.926519073523142e-01 + -1.925005733427448e-01 + -1.923494445333268e-01 + -1.921985198850023e-01 + -1.920477983694047e-01 + -1.918972789099489e-01 + -1.917469604078139e-01 + -1.915968418647559e-01 + -1.914469222323946e-01 + -1.912972003977130e-01 + -1.911476753153419e-01 + -1.909983459354311e-01 + -1.908492111828614e-01 + -1.907002699990133e-01 + -1.905515213021572e-01 + -1.904029639829450e-01 + -1.902545969863778e-01 + -1.901064192518998e-01 + -1.899584296832387e-01 + -1.898106271909556e-01 + -1.896630106872466e-01 + -1.895155790805884e-01 + -1.893683312769490e-01 + -1.892212661839438e-01 + -1.890743827110565e-01 + -1.889276797429612e-01 + -1.887811561730439e-01 + -1.886348109311961e-01 + -1.884886428944042e-01 + -1.883426509295119e-01 + -1.881968339481026e-01 + -1.880511908244114e-01 + -1.879057204210790e-01 + -1.877604216379617e-01 + -1.876152933660684e-01 + -1.874703344759240e-01 + -1.873255438107255e-01 + -1.871809202288037e-01 + -1.870364626111082e-01 + -1.868921698587295e-01 + -1.867480408184902e-01 + -1.866040743068453e-01 + -1.864602692045282e-01 + -1.863166243684211e-01 + -1.861731386269271e-01 + -1.860298108368848e-01 + -1.858866398430710e-01 + -1.857436244746902e-01 + -1.856007635808946e-01 + -1.854580560069532e-01 + -1.853155005825300e-01 + -1.851730961153894e-01 + -1.850308414342497e-01 + -1.848887353926573e-01 + -1.847467767859671e-01 + -1.846049644137440e-01 + -1.844632971091011e-01 + -1.843217736893654e-01 + -1.841803929497542e-01 + -1.840391536710132e-01 + -1.838980546953601e-01 + -1.837570948428414e-01 + -1.836162728527662e-01 + -1.834755875142904e-01 + -1.833350376404768e-01 + -1.831946220322505e-01 + -1.830543394615971e-01 + -1.829141886951903e-01 + -1.827741685199023e-01 + -1.826342777082210e-01 + -1.824945150204152e-01 + -1.823548792146146e-01 + -1.822153690716325e-01 + -1.820759833652730e-01 + -1.819367208114371e-01 + -1.817975801678411e-01 + -1.816585602158104e-01 + -1.815196596908165e-01 + -1.813808773333636e-01 + -1.812422118861797e-01 + -1.811036620617022e-01 + -1.809652266051679e-01 + -1.808269042761388e-01 + -1.806886937510042e-01 + -1.805505937426575e-01 + -1.804126030135119e-01 + -1.802747202867512e-01 + -1.801369442562599e-01 + -1.799992736029428e-01 + -1.798617070428147e-01 + -1.797242432859927e-01 + -1.795868810229852e-01 + -1.794496189531687e-01 + -1.793124557648680e-01 + -1.791753901302353e-01 + -1.790384207459855e-01 + -1.789015462957270e-01 + -1.787647654308534e-01 + -1.786280768266134e-01 + -1.784914791546937e-01 + -1.783549710639760e-01 + -1.782185512276328e-01 + -1.780822183108111e-01 + -1.779459709418989e-01 + -1.778098077766785e-01 + -1.776737274641330e-01 + -1.775377286080068e-01 + -1.774018098685905e-01 + -1.772659699092733e-01 + -1.771302073149079e-01 + -1.769945207098710e-01 + -1.768589087303928e-01 + -1.767233699571559e-01 + -1.765879030229077e-01 + -1.764525065751527e-01 + -1.763171791703831e-01 + -1.761819193770276e-01 + -1.760467257991546e-01 + -1.759115970764966e-01 + -1.757765317826701e-01 + -1.756415284467932e-01 + -1.755065856823099e-01 + -1.753717020824757e-01 + -1.752368761936218e-01 + -1.751021065398607e-01 + -1.749673916979465e-01 + -1.748327302843573e-01 + -1.746981207950505e-01 + -1.745635617515470e-01 + -1.744290517410085e-01 + -1.742945892830799e-01 + -1.741601728915786e-01 + -1.740258011048612e-01 + -1.738914724532109e-01 + -1.737571854631234e-01 + -1.736229386541751e-01 + -1.734887304969607e-01 + -1.733545594900176e-01 + -1.732204242005106e-01 + -1.730863230847530e-01 + -1.729522545880760e-01 + -1.728182172369972e-01 + -1.726842095169024e-01 + -1.725502298924380e-01 + -1.724162768405715e-01 + -1.722823488297978e-01 + -1.721484443102564e-01 + -1.720145617082366e-01 + -1.718806995062888e-01 + -1.717468561876117e-01 + -1.716130301380271e-01 + -1.714792197950507e-01 + -1.713454236195253e-01 + -1.712116399980747e-01 + -1.710778673588311e-01 + -1.709441041583024e-01 + -1.708103487974718e-01 + -1.706765996579921e-01 + -1.705428551238503e-01 + -1.704091136122197e-01 + -1.702753735243250e-01 + -1.701416332337174e-01 + -1.700078910979654e-01 + -1.698741454939726e-01 + -1.697403948188084e-01 + -1.696066374424440e-01 + -1.694728717024124e-01 + -1.693390959182572e-01 + -1.692053084687103e-01 + -1.690715077127793e-01 + -1.689376919605925e-01 + -1.688038595533757e-01 + -1.686700088249354e-01 + -1.685361380772680e-01 + -1.684022456043037e-01 + -1.682683297240474e-01 + -1.681343887869522e-01 + -1.680004210524648e-01 + -1.678664247764668e-01 + -1.677323982879569e-01 + -1.675983398888628e-01 + -1.674642478421112e-01 + -1.673301203727337e-01 + -1.671959557470875e-01 + -1.670617522514179e-01 + -1.669275081523977e-01 + -1.667932216748827e-01 + -1.666588910302535e-01 + -1.665245144618999e-01 + -1.663900902261115e-01 + -1.662556165573334e-01 + -1.661210916150787e-01 + -1.659865136192500e-01 + -1.658518808205523e-01 + -1.657171913793817e-01 + -1.655824434869752e-01 + -1.654476353589082e-01 + -1.653127651402884e-01 + -1.651778310039089e-01 + -1.650428311475997e-01 + -1.649077636947325e-01 + -1.647726268054878e-01 + -1.646374186795111e-01 + -1.645021374143022e-01 + -1.643667811219276e-01 + -1.642313479645375e-01 + -1.640958360797542e-01 + -1.639602435821208e-01 + -1.638245685678920e-01 + -1.636888091342957e-01 + -1.635529633807896e-01 + -1.634170294056715e-01 + -1.632810052843662e-01 + -1.631448890987297e-01 + -1.630086789505001e-01 + -1.628723728914803e-01 + -1.627359689604526e-01 + -1.625994652175857e-01 + -1.624628597296842e-01 + -1.623261505411777e-01 + -1.621893356498993e-01 + -1.620524130844338e-01 + -1.619153808874262e-01 + -1.617782370829140e-01 + -1.616409796594323e-01 + -1.615036066042981e-01 + -1.613661159511956e-01 + -1.612285056749289e-01 + -1.610907737177844e-01 + -1.609529180644884e-01 + -1.608149367058714e-01 + -1.606768276166446e-01 + -1.605385887249777e-01 + -1.604002179666082e-01 + -1.602617132920370e-01 + -1.601230726507729e-01 + -1.599842939686116e-01 + -1.598453751511857e-01 + -1.597063141136520e-01 + -1.595671087574746e-01 + -1.594277569704320e-01 + -1.592882566576958e-01 + -1.591486057239582e-01 + -1.590088020577491e-01 + -1.588688434990599e-01 + -1.587287278927537e-01 + -1.585884531125515e-01 + -1.584480170419727e-01 + -1.583074175205078e-01 + -1.581666523320080e-01 + -1.580257193426469e-01 + -1.578846164090064e-01 + -1.577433413163997e-01 + -1.576018918624315e-01 + -1.574602658488709e-01 + -1.573184610699215e-01 + -1.571764753211041e-01 + -1.570343063929105e-01 + -1.568919520623428e-01 + -1.567494100904384e-01 + -1.566066782348808e-01 + -1.564637542612438e-01 + -1.563206358983480e-01 + -1.561773208679784e-01 + -1.560338069324230e-01 + -1.558900918260982e-01 + -1.557461732592160e-01 + -1.556020489404925e-01 + -1.554577165574562e-01 + -1.553131737930803e-01 + -1.551684183667380e-01 + -1.550234479797016e-01 + -1.548782603038531e-01 + -1.547328529851514e-01 + -1.545872236759721e-01 + -1.544413700402710e-01 + -1.542952897416497e-01 + -1.541489804232354e-01 + -1.540024397056934e-01 + -1.538556652055174e-01 + -1.537086545589509e-01 + -1.535614054107616e-01 + -1.534139153265976e-01 + -1.532661818894184e-01 + -1.531182027303390e-01 + -1.529699754364569e-01 + -1.528214975805129e-01 + -1.526727667337492e-01 + -1.525237804315604e-01 + -1.523745362382714e-01 + -1.522250317710374e-01 + -1.520752645246755e-01 + -1.519252320010430e-01 + -1.517749318043420e-01 + -1.516243614355856e-01 + -1.514735183783821e-01 + -1.513224001894709e-01 + -1.511710043669709e-01 + -1.510193283881065e-01 + -1.508673697644896e-01 + -1.507151259726486e-01 + -1.505625944726656e-01 + -1.504097727456887e-01 + -1.502566582737337e-01 + -1.501032485283334e-01 + -1.499495409558064e-01 + -1.497955329817901e-01 + -1.496412220312461e-01 + -1.494866055649385e-01 + -1.493316810218445e-01 + -1.491764458131949e-01 + -1.490208973395277e-01 + -1.488650330073115e-01 + -1.487088502321930e-01 + -1.485523464347014e-01 + -1.483955190026080e-01 + -1.482383652905619e-01 + -1.480808826638546e-01 + -1.479230685198502e-01 + -1.477649202713839e-01 + -1.476064352431592e-01 + -1.474476107543291e-01 + -1.472884441602761e-01 + -1.471289328556787e-01 + -1.469690741904771e-01 + -1.468088654425319e-01 + -1.466483039513407e-01 + -1.464873870643751e-01 + -1.463261120992439e-01 + -1.461644763685366e-01 + -1.460024771711030e-01 + -1.458401117873900e-01 + -1.456773775256328e-01 + -1.455142717039091e-01 + -1.453507916253095e-01 + -1.451869345373153e-01 + -1.450226976893540e-01 + -1.448580783981553e-01 + -1.446930739597145e-01 + -1.445276816274984e-01 + -1.443618986028185e-01 + -1.441957221635531e-01 + -1.440291496154044e-01 + -1.438621781832398e-01 + -1.436948050802729e-01 + -1.435270275400491e-01 + -1.433588428498931e-01 + -1.431902482406432e-01 + -1.430212409022274e-01 + -1.428518180756519e-01 + -1.426819769869911e-01 + -1.425117148424586e-01 + -1.423410288662751e-01 + -1.421699162875700e-01 + -1.419983743276740e-01 + -1.418264001727286e-01 + -1.416539910114460e-01 + -1.414811440470098e-01 + -1.413078564852965e-01 + -1.411341255423312e-01 + -1.409599484327010e-01 + -1.407853222965617e-01 + -1.406102443173973e-01 + -1.404347117561954e-01 + -1.402587217519092e-01 + -1.400822714659246e-01 + -1.399053581557436e-01 + -1.397279789611117e-01 + -1.395501310267636e-01 + -1.393718115937786e-01 + -1.391930178402762e-01 + -1.390137469173205e-01 + -1.388339959972602e-01 + -1.386537622953096e-01 + -1.384730430031857e-01 + -1.382918352262208e-01 + -1.381101361784074e-01 + -1.379279430940128e-01 + -1.377452530885734e-01 + -1.375620633453186e-01 + -1.373783710804598e-01 + -1.371941734475252e-01 + -1.370094676273606e-01 + -1.368242508215203e-01 + -1.366385202106050e-01 + -1.364522729969404e-01 + -1.362655063841710e-01 + -1.360782175127518e-01 + -1.358904035964053e-01 + -1.357020618930480e-01 + -1.355131895302153e-01 + -1.353237837054462e-01 + -1.351338416922692e-01 + -1.349433606493001e-01 + -1.347523377766847e-01 + -1.345607703467432e-01 + -1.343686555800670e-01 + -1.341759906744941e-01 + -1.339827728348106e-01 + -1.337889993407819e-01 + -1.335946674413715e-01 + -1.333997743261954e-01 + -1.332043172962129e-01 + -1.330082936252972e-01 + -1.328117004983506e-01 + -1.326145352418741e-01 + -1.324167951779929e-01 + -1.322184775207451e-01 + -1.320195795498869e-01 + -1.318200985870884e-01 + -1.316200319613715e-01 + -1.314193769770063e-01 + -1.312181309395709e-01 + -1.310162911860090e-01 + -1.308138550466099e-01 + -1.306108198680959e-01 + -1.304071830473609e-01 + -1.302029419358534e-01 + -1.299980938748928e-01 + -1.297926362720222e-01 + -1.295865665431496e-01 + -1.293798820977739e-01 + -1.291725803345192e-01 + -1.289646586840201e-01 + -1.287561146028010e-01 + -1.285469455426532e-01 + -1.283371489741077e-01 + -1.281267223855238e-01 + -1.279156632656401e-01 + -1.277039691180485e-01 + -1.274916374652222e-01 + -1.272786658468367e-01 + -1.270650518164191e-01 + -1.268507929437779e-01 + -1.266358868257778e-01 + -1.264203310530910e-01 + -1.262041232080785e-01 + -1.259872609212462e-01 + -1.257697418614985e-01 + -1.255515637216261e-01 + -1.253327241582721e-01 + -1.251132208452764e-01 + -1.248930515084944e-01 + -1.246722139029198e-01 + -1.244507057917270e-01 + -1.242285249387353e-01 + -1.240056691417677e-01 + -1.237821362222557e-01 + -1.235579240163024e-01 + -1.233330303641722e-01 + -1.231074531412701e-01 + -1.228811902909497e-01 + -1.226542397328350e-01 + -1.224265993926709e-01 + -1.221982672554952e-01 + -1.219692413178169e-01 + -1.217395195880366e-01 + -1.215091001037845e-01 + -1.212779809466277e-01 + -1.210461602256936e-01 + -1.208136360512357e-01 + -1.205804065871132e-01 + -1.203464700244819e-01 + -1.201118245085727e-01 + -1.198764682774020e-01 + -1.196403996473917e-01 + -1.194036168896808e-01 + -1.191661183059585e-01 + -1.189279022478277e-01 + -1.186889671039581e-01 + -1.184493112863093e-01 + -1.182089332317922e-01 + -1.179678314226111e-01 + -1.177260043675167e-01 + -1.174834505981953e-01 + -1.172401686820595e-01 + -1.169961572351099e-01 + -1.167514149230550e-01 + -1.165059404117411e-01 + -1.162597324012717e-01 + -1.160127896494247e-01 + -1.157651109471359e-01 + -1.155166951180050e-01 + -1.152675410245315e-01 + -1.150176475647009e-01 + -1.147670136740031e-01 + -1.145156383362403e-01 + -1.142635205942373e-01 + -1.140106595167702e-01 + -1.137570541746248e-01 + -1.135027037005393e-01 + -1.132476072885310e-01 + -1.129917641930528e-01 + -1.127351736954119e-01 + -1.124778350964029e-01 + -1.122197477241451e-01 + -1.119609110122396e-01 + -1.117013244465126e-01 + -1.114409874638995e-01 + -1.111798996306716e-01 + -1.109180606010562e-01 + -1.106554699641756e-01 + -1.103921273860412e-01 + -1.101280326261970e-01 + -1.098631854961093e-01 + -1.095975858385727e-01 + -1.093312335328026e-01 + -1.090641285282797e-01 + -1.087962708201439e-01 + -1.085276604456853e-01 + -1.082582975002112e-01 + -1.079881821487157e-01 + -1.077173146235393e-01 + -1.074456951780328e-01 + -1.071733241222459e-01 + -1.069002018428373e-01 + -1.066263287812705e-01 + -1.063517054311524e-01 + -1.060763323447030e-01 + -1.058002101349244e-01 + -1.055233394662503e-01 + -1.052457210591484e-01 + -1.049673557111256e-01 + -1.046882442747131e-01 + -1.044083876525769e-01 + -1.041277868396362e-01 + -1.038464428925467e-01 + -1.035643569070283e-01 + -1.032815300276830e-01 + -1.029979634724506e-01 + -1.027136585692167e-01 + -1.024286166734134e-01 + -1.021428391952729e-01 + -1.018563276648054e-01 + -1.015690836461885e-01 + -1.012811087487812e-01 + -1.009924046817547e-01 + -1.007029732152899e-01 + -1.004128161832720e-01 + -1.001219355157012e-01 + -9.983033318947014e-02 + -9.953801123789381e-02 + -9.924497181065381e-02 + -9.895121710675164e-02 + -9.865674937610269e-02 + -9.836157098451072e-02 + -9.806568435550449e-02 + -9.776909196067303e-02 + -9.747179635418697e-02 + -9.717380018935569e-02 + -9.687510621844479e-02 + -9.657571724434684e-02 + -9.627563612429342e-02 + -9.597486578738405e-02 + -9.567340928055243e-02 + -9.537126972794066e-02 + -9.506845031433311e-02 + -9.476495428226560e-02 + -9.446078497156121e-02 + -9.415594584893169e-02 + -9.385044042616277e-02 + -9.354427227181475e-02 + -9.323744504129654e-02 + -9.292996250412121e-02 + -9.262182850819620e-02 + -9.231304696021701e-02 + -9.200362185853247e-02 + -9.169355729461479e-02 + -9.138285746240042e-02 + -9.107152658866502e-02 + -9.075956898041553e-02 + -9.044698911371001e-02 + -9.013379148226228e-02 + -8.981998063663986e-02 + -8.950556130228651e-02 + -8.919053824746566e-02 + -8.887491629233073e-02 + -8.855870039130662e-02 + -8.824189556852820e-02 + -8.792450692262105e-02 + -8.760653968435946e-02 + -8.728799913331863e-02 + -8.696889060279582e-02 + -8.664921956673162e-02 + -8.632899159487925e-02 + -8.600821233560418e-02 + -8.568688750540578e-02 + -8.536502290181033e-02 + -8.504262441718942e-02 + -8.471969805751253e-02 + -8.439624991228166e-02 + -8.407228614692197e-02 + -8.374781300392073e-02 + -8.342283682562317e-02 + -8.309736406563741e-02 + -8.277140122021633e-02 + -8.244495489588025e-02 + -8.211803185128563e-02 + -8.179063884910803e-02 + -8.146278271646745e-02 + -8.113447041766966e-02 + -8.080570906396743e-02 + -8.047650581443898e-02 + -8.014686781276095e-02 + -7.981680240792462e-02 + -7.948631704884632e-02 + -7.915541916537581e-02 + -7.882411634928695e-02 + -7.849241630024972e-02 + -7.816032674199919e-02 + -7.782785552351333e-02 + -7.749501058768483e-02 + -7.716179991262426e-02 + -7.682823159405887e-02 + -7.649431382724470e-02 + -7.616005485767063e-02 + -7.582546305035900e-02 + -7.549054686796573e-02 + -7.515531479419155e-02 + -7.481977542018518e-02 + -7.448393744841550e-02 + -7.414780964186224e-02 + -7.381140084542565e-02 + -7.347471999131863e-02 + -7.313777608894645e-02 + -7.280057821330421e-02 + -7.246313551410177e-02 + -7.212545725749871e-02 + -7.178755277686714e-02 + -7.144943146088469e-02 + -7.111110278446059e-02 + -7.077257629326426e-02 + -7.043386160590276e-02 + -7.009496843792977e-02 + -6.975590657859251e-02 + -6.941668588038064e-02 + -6.907731623736572e-02 + -6.873780762436528e-02 + -6.839817013263073e-02 + -6.805841390025939e-02 + -6.771854911509186e-02 + -6.737858603607710e-02 + -6.703853501790490e-02 + -6.669840646610939e-02 + -6.635821080020089e-02 + -6.601795854049251e-02 + -6.567766029345612e-02 + -6.533732672933422e-02 + -6.499696856244534e-02 + -6.465659655384894e-02 + -6.431622152906083e-02 + -6.397585437117004e-02 + -6.363550601749234e-02 + -6.329518746487584e-02 + -6.295490977261127e-02 + -6.261468405232740e-02 + -6.227452144919842e-02 + -6.193443314782195e-02 + -6.159443038613483e-02 + -6.125452449175782e-02 + -6.091472682299209e-02 + -6.057504875634485e-02 + -6.023550170757411e-02 + -5.989609715178513e-02 + -5.955684662483948e-02 + -5.921776169220818e-02 + -5.887885392543541e-02 + -5.854013491232313e-02 + -5.820161634720029e-02 + -5.786330995026137e-02 + -5.752522743033200e-02 + -5.718738052319666e-02 + -5.684978102238282e-02 + -5.651244078415603e-02 + -5.617537160914179e-02 + -5.583858533460867e-02 + -5.550209389764803e-02 + -5.516590918758542e-02 + -5.483004310132478e-02 + -5.449450760284144e-02 + -5.415931467224975e-02 + -5.382447627285256e-02 + -5.349000433169809e-02 + -5.315591089010736e-02 + -5.282220800586091e-02 + -5.248890761304951e-02 + -5.215602173570349e-02 + -5.182356244333215e-02 + -5.149154173522678e-02 + -5.115997163165661e-02 + -5.082886416999516e-02 + -5.049823136495267e-02 + -5.016808523392447e-02 + -4.983843779429676e-02 + -4.950930104255546e-02 + -4.918068697018742e-02 + -4.885260756307724e-02 + -4.852507478656667e-02 + -4.819810059193260e-02 + -4.787169691654435e-02 + -4.754587567726797e-02 + -4.722064876717863e-02 + -4.689602805511645e-02 + -4.657202539266345e-02 + -4.624865260469157e-02 + -4.592592148337583e-02 + -4.560384379218360e-02 + -4.528243126408893e-02 + -4.496169559628109e-02 + -4.464164845065374e-02 + -4.432230145577399e-02 + -4.400366620090135e-02 + -4.368575422918912e-02 + -4.336857704568598e-02 + -4.305214611378011e-02 + -4.273647284209545e-02 + -4.242156859535529e-02 + -4.210744469338823e-02 + -4.179411239819886e-02 + -4.148158291999365e-02 + -4.116986741259326e-02 + -4.085897697584740e-02 + -4.054892265423421e-02 + -4.023971542131075e-02 + -3.993136619382251e-02 + -3.962388583123071e-02 + -3.931728511726146e-02 + -3.901157477126550e-02 + -3.870676544906659e-02 + -3.840286772630143e-02 + -3.809989211312446e-02 + -3.779784905219891e-02 + -3.749674889469364e-02 + -3.719660192057603e-02 + -3.689741833904486e-02 + -3.659920826728452e-02 + -3.630198174507707e-02 + -3.600574873447752e-02 + -3.571051910326670e-02 + -3.541630263528623e-02 + -3.512310902944081e-02 + -3.483094789226868e-02 + -3.453982873906083e-02 + -3.424976098893085e-02 + -3.396075396966352e-02 + -3.367281691959212e-02 + -3.338595897696143e-02 + -3.310018917253339e-02 + -3.281551644593574e-02 + -3.253194963945627e-02 + -3.224949747985180e-02 + -3.196816859917648e-02 + -3.168797153104005e-02 + -3.140891468854379e-02 + -3.113100638362195e-02 + -3.085425482400445e-02 + -3.057866810270934e-02 + -3.030425420554928e-02 + -3.003102099769914e-02 + -2.975897623664901e-02 + -2.948812757423692e-02 + -2.921848253324668e-02 + -2.895004852283206e-02 + -2.868283284398848e-02 + -2.841684266935389e-02 + -2.815208505554401e-02 + -2.788856694668657e-02 + -2.762629515277662e-02 + -2.736527636581735e-02 + -2.710551716378724e-02 + -2.684702399109470e-02 + -2.658980317107453e-02 + -2.633386090723251e-02 + -2.607920326420626e-02 + -2.582583618939347e-02 + -2.557376551170278e-02 + -2.532299691452088e-02 + -2.507353595904179e-02 + -2.482538808499682e-02 + -2.457855859507147e-02 + -2.433305266394129e-02 + -2.408887533435539e-02 + -2.384603151841623e-02 + -2.360452600145211e-02 + -2.336436343201402e-02 + -2.312554832609387e-02 + -2.288808507226996e-02 + -2.265197791904223e-02 + -2.241723098404469e-02 + -2.218384825955722e-02 + -2.195183359578144e-02 + -2.172119070564114e-02 + -2.149192317903017e-02 + -2.126403446983029e-02 + -2.103752788800763e-02 + -2.081240661670658e-02 + -2.058867370373213e-02 + -2.036633206151460e-02 + -2.014538447470562e-02 + -1.992583358220780e-02 + -1.970768189350454e-02 + -1.949093179354288e-02 + -1.927558551890179e-02 + -1.906164517346932e-02 + -1.884911273803516e-02 + -1.863799005561765e-02 + -1.842827883084014e-02 + -1.821998063919436e-02 + -1.801309692347624e-02 + -1.780762899421212e-02 + -1.760357803216378e-02 + -1.740094507853177e-02 + -1.719973104881908e-02 + -1.699993673354589e-02 + -1.680156278321953e-02 + -1.660460972117107e-02 + -1.640907794332531e-02 + -1.621496771146485e-02 + -1.602227916433384e-02 + -1.583101231371427e-02 + -1.564116703862817e-02 + -1.545274309883748e-02 + -1.526574012772238e-02 + -1.508015761914186e-02 + -1.489599495303444e-02 + -1.471325139301425e-02 + -1.453192606709004e-02 + -1.435201798658663e-02 + -1.417352604127694e-02 + -1.399644899327932e-02 + -1.382078549302728e-02 + -1.364653407164367e-02 + -1.347369313289915e-02 + -1.330226097046918e-02 + -1.313223576283522e-02 + -1.296361556501821e-02 + -1.279639832327015e-02 + -1.263058187022890e-02 + -1.246616392163480e-02 + -1.230314208589229e-02 + -1.214151385550256e-02 + -1.198127661271531e-02 + -1.182242763705999e-02 + -1.166496409538715e-02 + -1.150888304589847e-02 + -1.135418144553720e-02 + -1.120085614521435e-02 + -1.104890388968280e-02 + -1.089832132231912e-02 + -1.074910498405016e-02 + -1.060125131793449e-02 + -1.045475666967276e-02 + -1.030961728045836e-02 + -1.016582929759894e-02 + -1.002338877483435e-02 + -9.882291666582974e-03 + -9.742533838318660e-03 + -9.604111064390042e-03 + -9.467019020603698e-03 + -9.331253297647066e-03 + -9.196809399717920e-03 + -9.063682741005771e-03 + -8.931868652392608e-03 + -8.801362376326071e-03 + -8.672159070075210e-03 + -8.544253813557785e-03 + -8.417641603575709e-03 + -8.292317355716863e-03 + -8.168275911736944e-03 + -8.045512032694060e-03 + -7.924020397696789e-03 + -7.803795618017998e-03 + -7.684832236645861e-03 + -7.567124714929550e-03 + -7.450667444285828e-03 + -7.335454748033539e-03 + -7.221480883382279e-03 + -7.108740043647531e-03 + -6.997226348639058e-03 + -6.886933855315346e-03 + -6.777856561420043e-03 + -6.669988397445708e-03 + -6.563323236817328e-03 + -6.457854897474280e-03 + -6.353577131920331e-03 + -6.250483639666226e-03 + -6.148568068731946e-03 + -6.047824005897748e-03 + -5.948244987599076e-03 + -5.849824501347084e-03 + -5.752555978513681e-03 + -5.656432807264865e-03 + -5.561448332218353e-03 + -5.467595840626229e-03 + -5.374868578311233e-03 + -5.283259752176146e-03 + -5.192762521793490e-03 + -5.103370006626977e-03 + -5.015075286629148e-03 + -4.927871401782054e-03 + -4.841751355904269e-03 + -4.756708115524279e-03 + -4.672734611342882e-03 + -4.589823741835811e-03 + -4.507968371897898e-03 + -4.427161334111035e-03 + -4.347395432360992e-03 + -4.268663440821394e-03 + -4.190958105123732e-03 + -4.114272145237943e-03 + -4.038598254543495e-03 + -3.963929102325757e-03 + -3.890257335680627e-03 + -3.817575578228647e-03 + -3.745876433060482e-03 + -3.675152484340320e-03 + -3.605396296371936e-03 + -3.536600416225055e-03 + -3.468757375181376e-03 + -3.401859688514519e-03 + -3.335899857279008e-03 + -3.270870369624132e-03 + -3.206763701552144e-03 + -3.143572317880366e-03 + -3.081288673370167e-03 + -3.019905214426235e-03 + -2.959414379161780e-03 + -2.899808598243805e-03 + -2.841080297295089e-03 + -2.783221897187762e-03 + -2.726225814481816e-03 + -2.670084462721576e-03 + -2.614790253659214e-03 + -2.560335598217736e-03 + -2.506712907773368e-03 + -2.453914594305456e-03 + -2.401933071402304e-03 + -2.350760756079694e-03 + -2.300390068609935e-03 + -2.250813433830373e-03 + -2.202023282926124e-03 + -2.154012052729510e-03 + -2.106772187286276e-03 + -2.060296139752280e-03 + -2.014576371403607e-03 + -1.969605353508076e-03 + -1.925375568654703e-03 + -1.881879509874747e-03 + -1.839109683164610e-03 + -1.797058608044933e-03 + -1.755718816706420e-03 + -1.715082857166331e-03 + -1.675143293280333e-03 + -1.635892703443056e-03 + -1.597323683697497e-03 + -1.559428848712492e-03 + -1.522200830321536e-03 + -1.485632280183934e-03 + -1.449715870092584e-03 + -1.414444291041649e-03 + -1.379810256474448e-03 + -1.345806501791486e-03 + -1.312425783716085e-03 + -1.279660883530597e-03 + -1.247504606026809e-03 + -1.215949779407020e-03 + -1.184989258561609e-03 + -1.154615923413642e-03 + -1.124822679454977e-03 + -1.095602461024569e-03 + -1.066948228352973e-03 + -1.038852968864840e-03 + -1.011309701783447e-03 + -9.843114734261671e-04 + -9.578513585924095e-04 + -9.319224654553773e-04 + -9.065179311555053e-04 + -8.816309237062864e-04 + -8.572546450286300e-04 + -8.333823272254078e-04 + -8.100072355517002e-04 + -7.871226705798197e-04 + -7.647219641139264e-04 + -7.427984826268421e-04 + -7.213456295816899e-04 + -7.003568409622573e-04 + -6.798255887472549e-04 + -6.597453829223955e-04 + -6.401097674232178e-04 + -6.209123240167792e-04 + -6.021466729184949e-04 + -5.838064694784330e-04 + -5.658854088227745e-04 + -5.483772251938055e-04 + -5.312756891491387e-04 + -5.145746125261390e-04 + -4.982678466736966e-04 + -4.823492804447342e-04 + -4.668128456938979e-04 + -4.516525141842837e-04 + -4.368622962674093e-04 + -4.224362466667431e-04 + -4.083684605074392e-04 + -3.946530726767535e-04 + -3.812842634726816e-04 + -3.682562540846601e-04 + -3.555633067280622e-04 + -3.431997298953713e-04 + -3.311598733734528e-04 + -3.194381292167991e-04 + -3.080289365424697e-04 + -2.969267761950205e-04 + -2.861261725181284e-04 + -2.756216974519896e-04 + -2.654079650780054e-04 + -2.554796342192304e-04 + -2.458314117831762e-04 + -2.364580472261255e-04 + -2.273543358783364e-04 + -2.185151214599497e-04 + -2.099352907310207e-04 + -2.016097775283348e-04 + -1.935335642058985e-04 + -1.857016766078902e-04 + -1.781091887621722e-04 + -1.707512232636694e-04 + -1.636229467286454e-04 + -1.567195750846747e-04 + -1.500363727286114e-04 + -1.435686485603325e-04 + -1.373117617901810e-04 + -1.312611200233150e-04 + -1.254121759173047e-04 + -1.197604333131590e-04 + -1.143014443478538e-04 + -1.090308067994204e-04 + -1.039441703359566e-04 + -9.903723276260782e-05 + -9.430573818110019e-05 + -8.974548326970851e-05 + -8.535231263786576e-05 + -8.112211782233505e-05 + -7.705084341917009e-05 + -7.313448187442813e-05 + -6.936907333027644e-05 + -6.575071119249467e-05 + -6.227553658275769e-05 + -5.893973914900695e-05 + -5.573956203853484e-05 + -5.267129595161032e-05 + -4.973128084575291e-05 + -4.691591029739419e-05 + -4.422162539456759e-05 + -4.164491727590835e-05 + -3.918233061143914e-05 + -3.683045757249665e-05 + -3.458594118927672e-05 + -3.244547785270521e-05 + -3.040581149216269e-05 + -2.846373767254703e-05 + -2.661610506551807e-05 + -2.485980997915884e-05 + -2.319180110803831e-05 + -2.160907991664170e-05 + -2.010869565536285e-05 + -1.868775067119526e-05 + -1.734339969669114e-05 + -1.607284546059277e-05 + -1.487334444060605e-05 + -1.374220506933501e-05 + -1.267678404087566e-05 + -1.167449238525668e-05 + -1.073279264625808e-05 + -9.849195952118955e-06 + -9.021268250139948e-06 + -8.246626567968640e-06 + -7.522936912951058e-06 + -6.847920492700095e-06 + -6.219349168072015e-06 + -5.635044236568559e-06 + -5.092882470932048e-06 + -4.590790895044201e-06 + -4.126746487291455e-06 + -3.698781859286729e-06 + -3.304979520120749e-06 + -2.943472506918129e-06 + -2.612449510984778e-06 + -2.310148834845521e-06 + -2.034859929271865e-06 + -1.784927798002038e-06 + -1.558746837246077e-06 + -1.354763241038800e-06 + -1.171478551126456e-06 + -1.007443551831214e-06 + -8.612614901318561e-07 + -7.315906671893518e-07 + -6.171385461507109e-07 + -5.166657190198488e-07 + -4.289874671965282e-07 + -3.529682224298676e-07 + -2.875261969469119e-07 + -2.316338735426513e-07 + -1.843129441850586e-07 + -1.446395043479685e-07 + -1.117434618507405e-07 + -8.480406305106530e-08 + -6.305553831873507e-08 + -4.578544870958251e-08 + -3.233089380928512e-08 + -2.208448022054805e-08 + -1.449165750478591e-08 + -9.047683233008124e-09 + -5.303766739728543e-09 + -2.863504097386866e-09 + -1.380623394721897e-09 + -5.650641971230870e-10 + -1.790372475752245e-10 + -3.511990521548007e-11 + -8.192061809269277e-13 + 0.000000000000000e+00 diff --git a/examples/SPIN/test_problems/validation_nvt/in.spin.nvt_lattice b/examples/SPIN/test_problems/validation_nvt/in.spin.nvt_lattice new file mode 100644 index 0000000000000000000000000000000000000000..1d63f01d4378242a240c72b735c97c5fc2a2bb9a --- /dev/null +++ b/examples/SPIN/test_problems/validation_nvt/in.spin.nvt_lattice @@ -0,0 +1,51 @@ +# bcc iron in a 3d periodic box + +clear +units metal +atom_style spin + +dimension 3 +boundary p p p + +# necessary for the serial algorithm (sametag) +atom_modify map array + +lattice bcc 2.8665 +region box block 0.0 3.0 0.0 3.0 0.0 3.0 +create_box 1 box +create_atoms 1 box + +# setting mass, mag. moments, and interactions for bcc iron + +mass 1 55.845 +set group all spin 2.2 0.0 0.0 1.0 +velocity all create 400 4928459 rot yes dist gaussian + +pair_style hybrid/overlay eam/alloy spin/exchange 4.0 spin/neel 4.0 +pair_coeff * * eam/alloy Fe_Mishin2006.eam.alloy Fe +pair_coeff * * spin/exchange exchange 3.4 0.1 0.2171 1.841 +pair_coeff * * spin/neel neel 4.0 0.02 0.0 1.841 0.0 0.0 1.0 + +neighbor 0.1 bin +neigh_modify every 10 check yes delay 20 + +fix 1 all precession/spin zeeman 0.0 0.0 0.0 1.0 +fix 2 all langevin 200.0 200.0 10.0 48279 +fix 3 all langevin/spin 0.0 0.00001 321 +fix 4 all nve/spin lattice moving +timestep 0.001 + +# compute and output options + +compute out_mag all spin +compute out_pe all pe +compute out_ke all ke +compute out_temp all temp + +variable emag equal c_out_mag[5] +variable tmag equal c_out_mag[6] + +thermo_style custom step time v_tmag temp v_emag ke pe etotal +thermo 200 + +run 200000 diff --git a/examples/SPIN/test_problems/validation_nvt/in.spin.nvt_spin b/examples/SPIN/test_problems/validation_nvt/in.spin.nvt_spin new file mode 100644 index 0000000000000000000000000000000000000000..435e877bdf15577d55ce88bbbb10c5ece36c1bda --- /dev/null +++ b/examples/SPIN/test_problems/validation_nvt/in.spin.nvt_spin @@ -0,0 +1,49 @@ +# bcc iron in a 3d periodic box + +clear +units metal +atom_style spin + +dimension 3 +boundary p p p + +# necessary for the serial algorithm (sametag) +atom_modify map array + +lattice bcc 2.8665 +region box block 0.0 3.0 0.0 3.0 0.0 3.0 +create_box 1 box +create_atoms 1 box + +# setting mass, mag. moments, and interactions for bcc iron + +mass 1 55.845 +set group all spin 2.2 0.0 0.0 1.0 +velocity all create 0 4928459 rot yes dist gaussian + +pair_style hybrid/overlay eam/alloy spin/exchange 3.5 +pair_coeff * * eam/alloy Fe_Mishin2006.eam.alloy Fe +pair_coeff * * spin/exchange exchange 3.4 0.1 0.2171 1.841 + +neighbor 0.1 bin +neigh_modify every 10 check yes delay 20 + +fix 1 all precession/spin zeeman 0.0 0.0 0.0 1.0 +fix 2 all langevin/spin 200.0 0.1 321 +fix 3 all nve/spin lattice moving +timestep 0.001 + +# compute and output options + +compute out_mag all spin +compute out_pe all pe +compute out_ke all ke +compute out_temp all temp + +variable emag equal c_out_mag[5] +variable tmag equal c_out_mag[6] + +thermo_style custom step time v_tmag temp v_emag ke pe etotal +thermo 200 + +run 200000 diff --git a/examples/SPIN/test_problems/validation_nvt/plot_nvt.py b/examples/SPIN/test_problems/validation_nvt/plot_nvt.py new file mode 100755 index 0000000000000000000000000000000000000000..06c48b4c28143ce7ff4b010479bd6b85604f0651 --- /dev/null +++ b/examples/SPIN/test_problems/validation_nvt/plot_nvt.py @@ -0,0 +1,43 @@ +#!/usr/bin/env python3 + +import numpy as np, pylab, tkinter +import matplotlib.pyplot as plt +from scipy.optimize import curve_fit +from decimal import * +import sys, string, os + + +argv = sys.argv +if len(argv) != 3: + print("Syntax: ./plot_precession.py res_nvt_spin.dat res_nvt_lattice.dat") + sys.exit() + +dirname = os.path.join(os.getcwd(), "Feb_07") +nvtspin_file = sys.argv[1] +nvtlatt_file = sys.argv[2] + +ts,tmags,temps = np.loadtxt(nvtspin_file,skiprows=0, usecols=(1,2,3),unpack=True) +tl,tmagl,templ = np.loadtxt(nvtlatt_file,skiprows=0, usecols=(1,2,3),unpack=True) + +fig = plt.figure(figsize=(8,8)) +ax1 = plt.subplot(2,1,1) +ax2 = plt.subplot(2,1,2) + +ax1.plot(ts, tmags, 'r-', label='Spin temp. (thermostat)') +ax1.plot(ts, temps, 'g-', label='Lattice temp.') +ax1.set_yscale("log") +ax1.set_ylabel("T (K)") +ax1.legend(loc=3) + +ax2.plot(tl, tmagl, 'r-', label='Spin temp.') +ax2.plot(tl, templ, 'g-', label='Lattice temp. (thermostat)') +ax2.set_yscale("log") +ax2.set_ylabel("T (K)") +ax2.legend(loc=3) + +plt.xlabel('Time (in ps)') +plt.legend() +plt.show() + +fig.savefig(os.path.join(os.getcwd(), "nve_spin_lattice.pdf"), bbox_inches="tight") +plt.close(fig) diff --git a/examples/SPIN/test_problems/validation_nvt/run-test-nvt.sh b/examples/SPIN/test_problems/validation_nvt/run-test-nvt.sh new file mode 100755 index 0000000000000000000000000000000000000000..d3abbbe1a552e7489dd6be04b891aed13a21ee0b --- /dev/null +++ b/examples/SPIN/test_problems/validation_nvt/run-test-nvt.sh @@ -0,0 +1,23 @@ +#!/bin/bash + +# clean old res +rm res_*.dat + +# compute NVT Spin -> Lattice +./../../../../src/lmp_serial -in in.spin.nvt_spin +in="$(grep -n Step log.lammps | awk -F ':' '{print $1}')" +en="$(grep -n Loop log.lammps | awk -F ':' '{print $1}')" +in="$(echo "$in+1" | bc -l)" +en="$(echo "$en-$in" | bc -l)" +tail -n +$in log.lammps | head -n $en > res_nvt_spin.dat + +# compute NVT Lattice -> Spin +./../../../../src/lmp_serial -in in.spin.nvt_lattice +in="$(grep -n Step log.lammps | awk -F ':' '{print $1}')" +en="$(grep -n Loop log.lammps | awk -F ':' '{print $1}')" +in="$(echo "$in+1" | bc -l)" +en="$(echo "$en-$in" | bc -l)" +tail -n +$in log.lammps | head -n $en > res_nvt_lattice.dat + +# plot results +python3 plot_nvt.py res_nvt_spin.dat res_nvt_lattice.dat diff --git a/examples/USER/dpd/dpd-shardlow/in.dpd-shardlow b/examples/USER/dpd/dpd-shardlow/in.dpd-shardlow index e6e46bc38c1d6daa563cc98b3c48f08f470478f7..62516233749aa3da4ec4fdf8138fa99bf1c67640 100644 --- a/examples/USER/dpd/dpd-shardlow/in.dpd-shardlow +++ b/examples/USER/dpd/dpd-shardlow/in.dpd-shardlow @@ -1,5 +1,5 @@ # Input File for DPD fluid under isothermal conditions using the VV-SSA integration scheme -log log.dpd-shardlow + boundary p p p units metal diff --git a/examples/USER/dpd/dpd-vv/in.dpd-vv b/examples/USER/dpd/dpd-vv/in.dpd-vv index 5360ca24310bf4d317cf903a80bb4d1ae7d3ae9e..6890c881d499419f787e49a48e19d4eff480cc95 100644 --- a/examples/USER/dpd/dpd-vv/in.dpd-vv +++ b/examples/USER/dpd/dpd-vv/in.dpd-vv @@ -1,6 +1,5 @@ # INPUT FILE FOR DPD_Fluid -log log.dpd-vv boundary p p p units metal # ev, ps diff --git a/examples/USER/dpd/dpde-shardlow/in.dpde-shardlow b/examples/USER/dpd/dpde-shardlow/in.dpde-shardlow index 68361adfa50788972ac5e5837b2c9f1197fc3da2..c639bef9f2e2eaa69fa214f725bff923e896e254 100644 --- a/examples/USER/dpd/dpde-shardlow/in.dpde-shardlow +++ b/examples/USER/dpd/dpde-shardlow/in.dpde-shardlow @@ -1,5 +1,5 @@ # Input File for DPD fluid under isoenergetic conditions using the VV-SSA integration scheme -log log.dpde-shardlow + boundary p p p units metal # ev, ps diff --git a/examples/USER/dpd/dpde-vv/in.dpde-vv b/examples/USER/dpd/dpde-vv/in.dpde-vv index 3ffcf0ec07f922906abf8a3c48e18024d1ebcaac..52309682c372c5e79f75462020834f524a2bf68e 100644 --- a/examples/USER/dpd/dpde-vv/in.dpde-vv +++ b/examples/USER/dpd/dpde-vv/in.dpde-vv @@ -1,6 +1,5 @@ # INPUT FILE FOR DPD_Fluid -log log.dpde-vv boundary p p p units metal # ev, ps diff --git a/examples/USER/dpd/dpdh-shardlow/in.dpdh-shardlow b/examples/USER/dpd/dpdh-shardlow/in.dpdh-shardlow index e403175e7a2174f8e1338b6dac24d5cea9a14680..5353085359aa592e4db8a99a6db91ecd260e0150 100644 --- a/examples/USER/dpd/dpdh-shardlow/in.dpdh-shardlow +++ b/examples/USER/dpd/dpdh-shardlow/in.dpdh-shardlow @@ -1,5 +1,5 @@ # Input File for DPD fluid under isoenthalpic conditions using the VV-SSA integration scheme -log log.dpdh-shardlow + boundary p p p units metal # ev, ps diff --git a/examples/USER/dpd/dpdp-shardlow/in.dpdp-shardlow b/examples/USER/dpd/dpdp-shardlow/in.dpdp-shardlow index 1d5eb5dd7d5ab63604dc88be826b2a4af9723ce3..93f26bd94658b16cf14ac7522b564b5710d784a3 100644 --- a/examples/USER/dpd/dpdp-shardlow/in.dpdp-shardlow +++ b/examples/USER/dpd/dpdp-shardlow/in.dpdp-shardlow @@ -1,5 +1,5 @@ # Input File for DPD fluid under isobaric conditions using the VV-SSA integration scheme -log log.dpdp-shardlow + boundary p p p units metal diff --git a/examples/USER/dpd/dpdrx-shardlow/in.dpdrx-shardlow b/examples/USER/dpd/dpdrx-shardlow/in.dpdrx-shardlow index 815c974741d674fc74af5a025fe5b598ba93894e..f93b316e1436d81d53582768caa9ef4d70ce4e87 100755 --- a/examples/USER/dpd/dpdrx-shardlow/in.dpdrx-shardlow +++ b/examples/USER/dpd/dpdrx-shardlow/in.dpdrx-shardlow @@ -1,6 +1,5 @@ # Example for running DPD-RX -log log.dpdrx-shardlow boundary p p p units metal # ev, ps atom_style dpd diff --git a/examples/USER/dpd/multi-lucy/in.multi-lucy b/examples/USER/dpd/multi-lucy/in.multi-lucy index 26d21f66ea55e245aa2f33b2281e8bffcf22e8e8..bb223e0a25849396eb91a24f44a4ae50d9ce5d90 100644 --- a/examples/USER/dpd/multi-lucy/in.multi-lucy +++ b/examples/USER/dpd/multi-lucy/in.multi-lucy @@ -1,5 +1,5 @@ # RDX coarse-grain model -log log.multi-lucy + units metal # ev, ps atom_style dpd atom_modify map array diff --git a/examples/USER/eff/Auger-Adamantane/in.adamantane_ionized.nve b/examples/USER/eff/Auger-Adamantane/in.adamantane_ionized.nve index 77c7b0d4654259fca8c2e551577dad213da044f6..edbe76beef2671205f40c29d9aa6b2452c97c247 100644 --- a/examples/USER/eff/Auger-Adamantane/in.adamantane_ionized.nve +++ b/examples/USER/eff/Auger-Adamantane/in.adamantane_ionized.nve @@ -1,5 +1,4 @@ variable sname index adamantane_ionized -log ${sname}.nve.log units electron newton on diff --git a/examples/USER/eff/Be-solid/in.Be-solid.spe b/examples/USER/eff/Be-solid/in.Be-solid.spe index e7245cabbc29d030538ffc055dc53994a6ff2e12..ce61a21f8c3e44df7227ab5834f70eb55ce8c5e6 100644 --- a/examples/USER/eff/Be-solid/in.Be-solid.spe +++ b/examples/USER/eff/Be-solid/in.Be-solid.spe @@ -1,5 +1,4 @@ variable sname index Be-solid -log ${sname}.spe.log units electron newton on diff --git a/examples/USER/eff/CH4/in.ch4.dynamics b/examples/USER/eff/CH4/in.ch4.dynamics index 2536fa8f4817aaff8fbc1d8b3dcdefa05f6df8c5..cb06a1c8cfd5de80370000376414a14697a46c9f 100644 --- a/examples/USER/eff/CH4/in.ch4.dynamics +++ b/examples/USER/eff/CH4/in.ch4.dynamics @@ -1,5 +1,4 @@ variable sname index ch4 -log ${sname}.nve.log units electron newton on diff --git a/examples/USER/eff/CH4/in.ch4.min b/examples/USER/eff/CH4/in.ch4.min index 69b7c15bd4f6065b445d3ed2740a7ad932647bdb..df052c728e003693ee2d51b072cef62a7e9c5ba7 100644 --- a/examples/USER/eff/CH4/in.ch4.min +++ b/examples/USER/eff/CH4/in.ch4.min @@ -1,5 +1,4 @@ variable sname index ch4 -log ${sname}.nve.log units electron newton on diff --git a/examples/USER/eff/CH4/in.ch4_ionized.dynamics b/examples/USER/eff/CH4/in.ch4_ionized.dynamics index 14f214296fb65c750e43a0012f913e8e48bc2671..51ca071fc61c137b0c702d5a15184163c42231e2 100644 --- a/examples/USER/eff/CH4/in.ch4_ionized.dynamics +++ b/examples/USER/eff/CH4/in.ch4_ionized.dynamics @@ -1,5 +1,4 @@ variable sname index ch4_ionized -log ${sname}.nvt.log units electron newton on @@ -15,6 +14,7 @@ pair_coeff * * comm_modify vel yes # minimize + min_style cg min_modify line quadratic minimize 0 1.0e-6 10000 100000 diff --git a/examples/USER/eff/H/in.h_atom.spe.ang b/examples/USER/eff/H/in.h_atom.spe.ang index 2493e273c468bab8308c9d79b41ff7f209ae45e9..85bedf5b594e96ccabc437bcbed62a2a974c4241 100644 --- a/examples/USER/eff/H/in.h_atom.spe.ang +++ b/examples/USER/eff/H/in.h_atom.spe.ang @@ -1,5 +1,4 @@ variable sname index h_atom.ang -log ${sname}.spe.log units real newton on diff --git a/examples/USER/eff/H/in.h_atom.spe.bohr b/examples/USER/eff/H/in.h_atom.spe.bohr index 2f18ee4e4317d9b86d5976df895d31c0979f4fb4..91b39a70dbcdb7f51ac3b29d52afbcdc0de0b8e5 100644 --- a/examples/USER/eff/H/in.h_atom.spe.bohr +++ b/examples/USER/eff/H/in.h_atom.spe.bohr @@ -1,5 +1,4 @@ variable sname index h_atom.bohr -log ${sname}.spe.log units electron newton on diff --git a/examples/USER/eff/H2/in.h2 b/examples/USER/eff/H2/in.h2 index 8f4a63cc8439ebdc7ec913934d435861f4610d51..0c9dd620a354e6bdf46af3fd39bfcceeb2c6b9d7 100644 --- a/examples/USER/eff/H2/in.h2 +++ b/examples/USER/eff/H2/in.h2 @@ -1,5 +1,4 @@ variable sname index h2 -log ${sname}.spe.log units electron newton on @@ -47,4 +46,4 @@ unfix 3 #fix 1 all nve/eff -run 100000 +run 10000 diff --git a/examples/USER/eff/H_plasma/in.h2bulk.npt b/examples/USER/eff/H_plasma/in.h2bulk.npt index 6d9fc5d55f7e44a95c952e704744ad040b1375ee..55c3d9b16f71c8e36cb672297995792af19326d7 100644 --- a/examples/USER/eff/H_plasma/in.h2bulk.npt +++ b/examples/USER/eff/H_plasma/in.h2bulk.npt @@ -1,5 +1,4 @@ variable sname index h2bulk -log ${sname}.npt.log units electron newton on @@ -41,7 +40,8 @@ dump 2 all xyz 10000 ${sname}.npt.xyz compute 1 all property/atom spin eradius dump 3 all custom 10000 ${sname}.npt.lammpstrj id type x y z c_1[1] c_1[2] -run 10000000 +thermo 1 +run 10 unfix 1 undump 2 diff --git a/examples/USER/eff/H_plasma/in.h2bulk.nve b/examples/USER/eff/H_plasma/in.h2bulk.nve index 9786ff476f08efe495f93ff2a2d5f57023c9b22e..32b724c539e1c2406df767af3bc249b95a12537a 100644 --- a/examples/USER/eff/H_plasma/in.h2bulk.nve +++ b/examples/USER/eff/H_plasma/in.h2bulk.nve @@ -1,5 +1,4 @@ variable sname index h2bulk -log ${sname}.nve.log units electron newton on @@ -18,13 +17,13 @@ comm_modify vel yes compute effTemp all temp/eff -thermo 1000 +thermo 10 thermo_style custom step pe temp press thermo_modify temp effTemp # structure minimization min_style cg -minimize 0 1.0e-4 1000 10000 +minimize 0 1.0e-4 10 10 timestep 0.001 @@ -41,7 +40,7 @@ dump 2 all xyz 1000 ${sname}.nve.xyz compute 1 all property/atom spin eradius dump 3 all custom 1000 ${sname}.nve.lammpstrj id type x y z c_1[1] c_1[2] c_peatom c_keatom -run 100000 +run 10 unfix 1 #unfix 2 diff --git a/examples/USER/eff/H_plasma/in.h2bulk.nve.ang b/examples/USER/eff/H_plasma/in.h2bulk.nve.ang index 4935e39be3053ce32c10d75d37d164093f54eab6..3377d635803ce328958f6a9fcc6671f5b7bccebc 100644 --- a/examples/USER/eff/H_plasma/in.h2bulk.nve.ang +++ b/examples/USER/eff/H_plasma/in.h2bulk.nve.ang @@ -1,5 +1,4 @@ variable sname index h2bulk.ang -log ${sname}.nve.log units real newton on @@ -29,13 +28,13 @@ variable epauli equal c_energies[2] variable ecoul equal c_energies[3] variable erres equal c_energies[4] -thermo 100 +thermo 10 thermo_style custom step etotal pe ke v_eke v_epauli v_ecoul v_erres press v_press temp thermo_modify temp effTemp press effPress flush yes # structure minimization min_style cg -minimize 0 1.0e-4 1000 10000 +minimize 0 1.0e-4 10 10 timestep 0.001 @@ -52,7 +51,7 @@ dump 2 all xyz 1000 ${sname}.nve.xyz compute 1 all property/atom spin eradius dump 3 all custom 1000 ${sname}.nve.lammpstrj id type x y z c_1[1] c_1[2] c_peatom c_keatom -run 100000 +run 10 unfix 1 #unfix 2 diff --git a/examples/USER/eff/Li-dendritic/in.Li-dendritic.min b/examples/USER/eff/Li-dendritic/in.Li-dendritic.min index f791544e4406a9477e11bb2d9dd2ce69fc8e1985..5dfa85e52c98fe1a3a9d9c3b3d2b0cd7ff6c571e 100644 --- a/examples/USER/eff/Li-dendritic/in.Li-dendritic.min +++ b/examples/USER/eff/Li-dendritic/in.Li-dendritic.min @@ -1,5 +1,4 @@ variable sname index Li-dendritic -log ${sname}.min.log units electron newton on @@ -7,8 +6,8 @@ boundary p p p atom_style electron -#read_data data.${sname} -read_restart ${sname}.min.restart2 +read_data data.${sname} +#read_restart ${sname}.min.restart2 pair_style eff/cut 50.112 pair_coeff * * diff --git a/examples/USER/eff/Li-dendritic/in.Li-dendritic.nvt b/examples/USER/eff/Li-dendritic/in.Li-dendritic.nvt index 143e23cbc1c3cc176780b2f34761b84243e4c414..4203b50dde5b96af6223a2467457e3759f25f19b 100644 --- a/examples/USER/eff/Li-dendritic/in.Li-dendritic.nvt +++ b/examples/USER/eff/Li-dendritic/in.Li-dendritic.nvt @@ -1,5 +1,4 @@ variable sname index Li-dendritic -log ${sname}.min.log units electron newton on @@ -29,7 +28,7 @@ compute 1 all property/atom spin eradius #dump 1 all custom 100 ${sname}.min.lammpstrj id type x y z q c_1[1] c_1[2] #dump 2 all xyz 100 ${sname}.min.xyz min_modify line quadratic dmax 0.05 -minimize 0 1.0e-7 1000 2000 +minimize 0 1.0e-7 100 100 write_restart ${sname}.min.restart @@ -46,7 +45,7 @@ dump 1 all custom 100 ${sname}.nvt.lammpstrj id type x y z c_1[1] c_1 dump 2 all xyz 100 ${sname}.nvt.xyz restart 100 ${sname}.nvt.restart1 ${sname}.nvt.restart2 -run 10000 +run 100 undump 1 undump 2 diff --git a/examples/USER/eff/Li-solid/in.Li.ang b/examples/USER/eff/Li-solid/in.Li.ang index c9a726b88c191c6504a2a2d75217dedb4bb34baa..e4f5614c565a669c1194db189eb471a51bf2eadb 100644 --- a/examples/USER/eff/Li-solid/in.Li.ang +++ b/examples/USER/eff/Li-solid/in.Li.ang @@ -1,5 +1,4 @@ variable sname index Li.ang -log ${sname}.spe.log units real newton on @@ -46,13 +45,13 @@ fix 0 all temp/rescale/eff 1 10.0 3000.0 0.05 1.0 #fix 0 all langevin/eff 3000.0 3000.0 10.0 699483 fix 1 all nve/eff -run 1000 +run 200 unfix 0 unfix 1 fix 1 all nvt/eff temp 3000.0 3000.0 100.0 compute 1 all property/atom spin eradius ervel -dump 1 all custom 1000 ${sname}.nvt.lammpstrj id type q c_1[1] c_1[2] x y z vx vy vz c_1[3] +dump 1 all custom 500 ${sname}.nvt.lammpstrj id type q c_1[1] c_1[2] x y z vx vy vz c_1[3] -run 100000 +run 500 diff --git a/examples/USER/eff/Li-solid/in.Li.bohr b/examples/USER/eff/Li-solid/in.Li.bohr index 2843d3ca6a32c5f49f135ed341d72686fd920de3..2ff8b661d502f154bd5399bc4133e0ca56c8b5d8 100644 --- a/examples/USER/eff/Li-solid/in.Li.bohr +++ b/examples/USER/eff/Li-solid/in.Li.bohr @@ -1,5 +1,4 @@ variable sname index Li.bohr -log ${sname}.spe.log units electron newton off @@ -35,15 +34,15 @@ thermo_style custom step etotal pe ke v_eke v_epauli v_estatics v_errestrain thermo_modify temp effTemp press effPress min_style cg -minimize 0 1e-6 100 2000 +minimize 0 1e-6 100 200 fix 0 all temp/rescale/eff 1 0.0 3000.0 0.02 0.5 fix 1 all npt/eff temp 3000.0 3000.0 0.1 iso 1e7 1e7 1.0 compute 1 all property/atom spin eradius -dump 1 all custom 1 ${sname}.spe.lammpstrj & +dump 1 all custom 100 ${sname}.spe.lammpstrj & id type q c_1[1] c_1[2] x y z -run 1000 +run 100 diff --git a/examples/USER/reaction/nylon,6-6_melt/large_nylon_melt.data.gz b/examples/USER/reaction/nylon,6-6_melt/large_nylon_melt.data.gz new file mode 100644 index 0000000000000000000000000000000000000000..c620b879a883817b8eb7abe4495e585ecacfaf02 Binary files /dev/null and b/examples/USER/reaction/nylon,6-6_melt/large_nylon_melt.data.gz differ diff --git a/examples/USER/reaction/tiny_nylon/in.tiny_nylon.stabilized_variable_probability b/examples/USER/reaction/tiny_nylon/in.tiny_nylon.stabilized_variable_probability new file mode 100644 index 0000000000000000000000000000000000000000..2c101ac77caa67fd2424ee1ee93c7fc9baaee0c3 --- /dev/null +++ b/examples/USER/reaction/tiny_nylon/in.tiny_nylon.stabilized_variable_probability @@ -0,0 +1,56 @@ +# two monomer nylon example +# reaction produces a condensed water molecule + +units real + +boundary p p p + +atom_style full + +kspace_style pppm 1.0e-4 + +pair_style lj/class2/coul/long 8.5 + +angle_style class2 + +bond_style class2 + +dihedral_style class2 + +improper_style class2 + +read_data tiny_nylon.data + +variable runsteps equal 1000 +variable prob1 equal step/v_runsteps*2 +variable prob2 equal (step/v_runsteps)>0.5 + +velocity all create 300.0 4928459 dist gaussian + +molecule mol1 rxn1_stp1_unreacted.data_template +molecule mol2 rxn1_stp1_reacted.data_template +molecule mol3 rxn1_stp2_unreacted.data_template +molecule mol4 rxn1_stp2_reacted.data_template + +thermo 50 + +# dump 1 all xyz 1 test_vis.xyz + +fix myrxns all bond/react stabilization yes statted_grp .03 & + react rxn1 all 1 0.0 5.0 mol1 mol2 rxn1_stp1_map prob v_prob1 1234 & + react rxn2 all 1 0.0 5.0 mol3 mol4 rxn1_stp2_map prob v_prob2 1234 + +fix 1 statted_grp_REACT nvt temp 300 300 100 + +# optionally, you can customize behavior of reacting atoms, +# by using the internally-created 'bond_react_MASTER_group', like so: +fix 4 bond_react_MASTER_group temp/rescale 1 300 300 10 1 + +thermo_style custom step temp press density v_prob1 v_prob2 f_myrxns[1] f_myrxns[2] + +# restart 100 restart1 restart2 + +run ${runsteps} + +# write_restart restart_longrun +# write_data restart_longrun.data diff --git a/examples/USER/reaction/tiny_nylon/log.22Apr20.tiny_nylon.stabilized_variable_probability.g++.1 b/examples/USER/reaction/tiny_nylon/log.22Apr20.tiny_nylon.stabilized_variable_probability.g++.1 new file mode 100644 index 0000000000000000000000000000000000000000..16e4deef51ac757fe167fa08974350f69abeb133 --- /dev/null +++ b/examples/USER/reaction/tiny_nylon/log.22Apr20.tiny_nylon.stabilized_variable_probability.g++.1 @@ -0,0 +1,201 @@ +LAMMPS (15 Apr 2020) +OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:94) + using 1 OpenMP thread(s) per MPI task +# two monomer nylon example +# reaction produces a condensed water molecule + +units real + +boundary p p p + +atom_style full + +kspace_style pppm 1.0e-4 + +pair_style lj/class2/coul/long 8.5 + +angle_style class2 + +bond_style class2 + +dihedral_style class2 + +improper_style class2 + +read_data tiny_nylon.data + orthogonal box = (-25 -25 -25) to (25 25 25) + 1 by 1 by 1 MPI processor grid + reading atoms ... + 44 atoms + reading velocities ... + 44 velocities + scanning bonds ... + 9 = max bonds/atom + scanning angles ... + 21 = max angles/atom + scanning dihedrals ... + 29 = max dihedrals/atom + scanning impropers ... + 29 = max impropers/atom + reading bonds ... + 42 bonds + reading angles ... + 74 angles + reading dihedrals ... + 100 dihedrals + reading impropers ... + 44 impropers + 4 = max # of 1-2 neighbors + 6 = max # of 1-3 neighbors + 12 = max # of 1-4 neighbors + 41 = max # of special neighbors + special bonds CPU = 0.000385045 secs + read_data CPU = 0.013443 secs + +variable runsteps equal 1000 +variable prob1 equal step/v_runsteps*2 +variable prob2 equal (step/v_runsteps)>0.5 + +velocity all create 300.0 4928459 dist gaussian + +molecule mol1 rxn1_stp1_unreacted.data_template +Read molecule template mol1: + 1 molecules + 18 atoms with max type 8 + 16 bonds with max type 14 + 25 angles with max type 28 + 23 dihedrals with max type 36 + 14 impropers with max type 11 +molecule mol2 rxn1_stp1_reacted.data_template +Read molecule template mol2: + 1 molecules + 18 atoms with max type 9 + 17 bonds with max type 13 + 31 angles with max type 27 + 39 dihedrals with max type 33 + 20 impropers with max type 1 +molecule mol3 rxn1_stp2_unreacted.data_template +Read molecule template mol3: + 1 molecules + 15 atoms with max type 9 + 14 bonds with max type 13 + 25 angles with max type 27 + 30 dihedrals with max type 33 + 16 impropers with max type 1 +molecule mol4 rxn1_stp2_reacted.data_template +Read molecule template mol4: + 1 molecules + 15 atoms with max type 11 + 13 bonds with max type 15 + 19 angles with max type 29 + 16 dihedrals with max type 32 + 10 impropers with max type 13 + +thermo 50 + +# dump 1 all xyz 1 test_vis.xyz + +fix myrxns all bond/react stabilization yes statted_grp .03 react rxn1 all 1 0.0 5.0 mol1 mol2 rxn1_stp1_map prob v_prob1 1234 react rxn2 all 1 0.0 5.0 mol3 mol4 rxn1_stp2_map prob v_prob2 1234 +WARNING: Bond/react: Atom affected by reaction rxn1 too close to template edge (src/USER-REACTION/fix_bond_react.cpp:2051) +WARNING: Bond/react: Atom affected by reaction rxn2 too close to template edge (src/USER-REACTION/fix_bond_react.cpp:2051) +dynamic group bond_react_MASTER_group defined +dynamic group statted_grp_REACT defined + +fix 1 statted_grp_REACT nvt temp 300 300 100 + +# optionally, you can customize behavior of reacting atoms, +# by using the internally-created 'bond_react_MASTER_group', like so: +fix 4 bond_react_MASTER_group temp/rescale 1 300 300 10 1 + +thermo_style custom step temp press density v_prob1 v_prob2 f_myrxns[1] f_myrxns[2] + +# restart 100 restart1 restart2 + +run ${runsteps} +run 1000 +PPPM initialization ... + using 12-bit tables for long-range coulomb (src/kspace.cpp:332) + G vector (1/distance) = 0.0534597 + grid = 2 2 2 + stencil order = 5 + estimated absolute RMS force accuracy = 0.0402256 + estimated relative force accuracy = 0.000121138 + using double precision FFTW3 + 3d grid and FFT values/proc = 343 8 +Neighbor list info ... + update every 1 steps, delay 10 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 10.5 + ghost atom cutoff = 10.5 + binsize = 5.25, bins = 10 10 10 + 2 neighbor lists, perpetual/occasional/extra = 1 1 0 + (1) pair lj/class2/coul/long, perpetual + attributes: half, newton on + pair build: half/bin/newton + stencil: half/bin/3d/newton + bin: standard + (2) fix bond/react, occasional, copy from (1) + attributes: half, newton on + pair build: copy + stencil: none + bin: none +WARNING: Inconsistent image flags (src/domain.cpp:812) +Per MPI rank memory allocation (min/avg/max) = 33.78 | 33.78 | 33.78 Mbytes +Step Temp Press Density v_prob1 v_prob2 f_myrxns[1] f_myrxns[2] + 0 300 346.78165 0.0034851739 0 0 0 0 + 50 262.63913 -492.10749 0.0034851739 0.1 0 1 0 + 100 766.52962 -29.714349 0.0034851739 0.2 0 1 0 + 150 503.86837 50.220304 0.0034851739 0.3 0 1 0 + 200 456.51295 12.312892 0.0034851739 0.4 0 1 0 + 250 391.54928 9.2335844 0.0034851739 0.5 0 1 0 + 300 336.6988 -47.193937 0.0034851739 0.6 0 1 0 + 350 254.06985 -9.2867898 0.0034851739 0.7 0 1 0 + 400 259.41098 -25.657321 0.0034851739 0.8 0 1 0 + 450 258.10364 22.5086 0.0034851739 0.9 0 1 0 + 500 272.13412 -6.5391448 0.0034851739 1 0 1 0 + 550 202.75504 54.658731 0.0034851739 1.1 1 1 1 + 600 344.79887 23.798478 0.0034851739 1.2 1 1 1 + 650 328.44488 -29.908484 0.0034851739 1.3 1 1 1 + 700 280.13593 -8.3223255 0.0034851739 1.4 1 1 1 + 750 300.67624 1.0632669 0.0034851739 1.5 1 1 1 + 800 376.64234 12.488392 0.0034851739 1.6 1 1 1 + 850 321.07642 19.814074 0.0034851739 1.7 1 1 1 + 900 332.23751 30.814079 0.0034851739 1.8 1 1 1 + 950 311.14029 5.7853136 0.0034851739 1.9 1 1 1 + 1000 253.14634 -37.560642 0.0034851739 2 1 1 1 +Loop time of 0.379454 on 1 procs for 1000 steps with 44 atoms + +Performance: 227.696 ns/day, 0.105 hours/ns, 2635.368 timesteps/s +99.6% CPU use with 1 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.069723 | 0.069723 | 0.069723 | 0.0 | 18.37 +Bond | 0.14802 | 0.14802 | 0.14802 | 0.0 | 39.01 +Kspace | 0.044252 | 0.044252 | 0.044252 | 0.0 | 11.66 +Neigh | 0.072359 | 0.072359 | 0.072359 | 0.0 | 19.07 +Comm | 0.0044748 | 0.0044748 | 0.0044748 | 0.0 | 1.18 +Output | 0.0022775 | 0.0022775 | 0.0022775 | 0.0 | 0.60 +Modify | 0.036509 | 0.036509 | 0.036509 | 0.0 | 9.62 +Other | | 0.00184 | | | 0.48 + +Nlocal: 44 ave 44 max 44 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 3 ave 3 max 3 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Neighs: 722 ave 722 max 722 min +Histogram: 1 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 722 +Ave neighs/atom = 16.4091 +Ave special neighs/atom = 9.77273 +Neighbor list builds = 1000 +Dangerous builds = 0 + +# write_restart restart_longrun +# write_data restart_longrun.data + +Please see the log.cite file for references relevant to this simulation + +Total wall time: 0:00:00 diff --git a/examples/USER/reaction/tiny_nylon/log.22Apr20.tiny_nylon.stabilized_variable_probability.g++.4 b/examples/USER/reaction/tiny_nylon/log.22Apr20.tiny_nylon.stabilized_variable_probability.g++.4 new file mode 100644 index 0000000000000000000000000000000000000000..527d71ce87279c4a7e70ecedaaa4d02dbe1dd0c3 --- /dev/null +++ b/examples/USER/reaction/tiny_nylon/log.22Apr20.tiny_nylon.stabilized_variable_probability.g++.4 @@ -0,0 +1,201 @@ +LAMMPS (15 Apr 2020) +OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:94) + using 1 OpenMP thread(s) per MPI task +# two monomer nylon example +# reaction produces a condensed water molecule + +units real + +boundary p p p + +atom_style full + +kspace_style pppm 1.0e-4 + +pair_style lj/class2/coul/long 8.5 + +angle_style class2 + +bond_style class2 + +dihedral_style class2 + +improper_style class2 + +read_data tiny_nylon.data + orthogonal box = (-25 -25 -25) to (25 25 25) + 1 by 2 by 2 MPI processor grid + reading atoms ... + 44 atoms + reading velocities ... + 44 velocities + scanning bonds ... + 9 = max bonds/atom + scanning angles ... + 21 = max angles/atom + scanning dihedrals ... + 29 = max dihedrals/atom + scanning impropers ... + 29 = max impropers/atom + reading bonds ... + 42 bonds + reading angles ... + 74 angles + reading dihedrals ... + 100 dihedrals + reading impropers ... + 44 impropers + 4 = max # of 1-2 neighbors + 6 = max # of 1-3 neighbors + 12 = max # of 1-4 neighbors + 41 = max # of special neighbors + special bonds CPU = 0.000431282 secs + read_data CPU = 0.0129571 secs + +variable runsteps equal 1000 +variable prob1 equal step/v_runsteps*2 +variable prob2 equal (step/v_runsteps)>0.5 + +velocity all create 300.0 4928459 dist gaussian + +molecule mol1 rxn1_stp1_unreacted.data_template +Read molecule template mol1: + 1 molecules + 18 atoms with max type 8 + 16 bonds with max type 14 + 25 angles with max type 28 + 23 dihedrals with max type 36 + 14 impropers with max type 11 +molecule mol2 rxn1_stp1_reacted.data_template +Read molecule template mol2: + 1 molecules + 18 atoms with max type 9 + 17 bonds with max type 13 + 31 angles with max type 27 + 39 dihedrals with max type 33 + 20 impropers with max type 1 +molecule mol3 rxn1_stp2_unreacted.data_template +Read molecule template mol3: + 1 molecules + 15 atoms with max type 9 + 14 bonds with max type 13 + 25 angles with max type 27 + 30 dihedrals with max type 33 + 16 impropers with max type 1 +molecule mol4 rxn1_stp2_reacted.data_template +Read molecule template mol4: + 1 molecules + 15 atoms with max type 11 + 13 bonds with max type 15 + 19 angles with max type 29 + 16 dihedrals with max type 32 + 10 impropers with max type 13 + +thermo 50 + +# dump 1 all xyz 1 test_vis.xyz + +fix myrxns all bond/react stabilization yes statted_grp .03 react rxn1 all 1 0.0 5.0 mol1 mol2 rxn1_stp1_map prob v_prob1 1234 react rxn2 all 1 0.0 5.0 mol3 mol4 rxn1_stp2_map prob v_prob2 1234 +WARNING: Bond/react: Atom affected by reaction rxn1 too close to template edge (src/USER-REACTION/fix_bond_react.cpp:2051) +WARNING: Bond/react: Atom affected by reaction rxn2 too close to template edge (src/USER-REACTION/fix_bond_react.cpp:2051) +dynamic group bond_react_MASTER_group defined +dynamic group statted_grp_REACT defined + +fix 1 statted_grp_REACT nvt temp 300 300 100 + +# optionally, you can customize behavior of reacting atoms, +# by using the internally-created 'bond_react_MASTER_group', like so: +fix 4 bond_react_MASTER_group temp/rescale 1 300 300 10 1 + +thermo_style custom step temp press density v_prob1 v_prob2 f_myrxns[1] f_myrxns[2] + +# restart 100 restart1 restart2 + +run ${runsteps} +run 1000 +PPPM initialization ... + using 12-bit tables for long-range coulomb (src/kspace.cpp:332) + G vector (1/distance) = 0.0534597 + grid = 2 2 2 + stencil order = 5 + estimated absolute RMS force accuracy = 0.0402256 + estimated relative force accuracy = 0.000121138 + using double precision FFTW3 + 3d grid and FFT values/proc = 252 2 +Neighbor list info ... + update every 1 steps, delay 10 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 10.5 + ghost atom cutoff = 10.5 + binsize = 5.25, bins = 10 10 10 + 2 neighbor lists, perpetual/occasional/extra = 1 1 0 + (1) pair lj/class2/coul/long, perpetual + attributes: half, newton on + pair build: half/bin/newton + stencil: half/bin/3d/newton + bin: standard + (2) fix bond/react, occasional, copy from (1) + attributes: half, newton on + pair build: copy + stencil: none + bin: none +WARNING: Inconsistent image flags (src/domain.cpp:812) +Per MPI rank memory allocation (min/avg/max) = 33.66 | 33.88 | 34.43 Mbytes +Step Temp Press Density v_prob1 v_prob2 f_myrxns[1] f_myrxns[2] + 0 300 346.78165 0.0034851739 0 0 0 0 + 50 266.5092 -90.813802 0.0034851739 0.1 0 1 0 + 100 559.41271 -53.23688 0.0034851739 0.2 0 1 0 + 150 489.90516 31.555817 0.0034851739 0.3 0 1 0 + 200 326.18391 7.7889992 0.0034851739 0.4 0 1 0 + 250 339.78203 2.3919541 0.0034851739 0.5 0 1 0 + 300 370.90263 -32.01673 0.0034851739 0.6 0 1 0 + 350 294.07547 -5.4019813 0.0034851739 0.7 0 1 0 + 400 287.76477 12.254133 0.0034851739 0.8 0 1 0 + 450 293.36482 66.372956 0.0034851739 0.9 0 1 0 + 500 246.84496 26.132317 0.0034851739 1 0 1 0 + 550 253.08778 -15.350262 0.0034851739 1.1 1 1 1 + 600 358.83641 25.007371 0.0034851739 1.2 1 1 1 + 650 320.51492 -32.34823 0.0034851739 1.3 1 1 1 + 700 310.87976 -8.2306669 0.0034851739 1.4 1 1 1 + 750 307.54142 12.025818 0.0034851739 1.5 1 1 1 + 800 272.51724 -22.92823 0.0034851739 1.6 1 1 1 + 850 268.66181 10.069534 0.0034851739 1.7 1 1 1 + 900 265.5531 -10.471377 0.0034851739 1.8 1 1 1 + 950 259.43086 9.4546712 0.0034851739 1.9 1 1 1 + 1000 247.14622 20.250308 0.0034851739 2 1 1 1 +Loop time of 0.357762 on 4 procs for 1000 steps with 44 atoms + +Performance: 241.502 ns/day, 0.099 hours/ns, 2795.157 timesteps/s +99.0% CPU use with 4 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.0003917 | 0.015545 | 0.033317 | 11.9 | 4.35 +Bond | 0.0010131 | 0.030153 | 0.076975 | 18.2 | 8.43 +Kspace | 0.092857 | 0.1462 | 0.18688 | 10.7 | 40.87 +Neigh | 0.043786 | 0.044014 | 0.044189 | 0.1 | 12.30 +Comm | 0.03636 | 0.038345 | 0.040538 | 0.8 | 10.72 +Output | 0.00091578 | 0.0012541 | 0.0020923 | 1.4 | 0.35 +Modify | 0.075379 | 0.080791 | 0.086052 | 1.8 | 22.58 +Other | | 0.00146 | | | 0.41 + +Nlocal: 11 ave 32 max 0 min +Histogram: 2 0 1 0 0 0 0 0 0 1 +Nghost: 40 ave 51 max 19 min +Histogram: 1 0 0 0 0 0 0 1 0 2 +Neighs: 191 ave 529 max 0 min +Histogram: 2 0 0 0 1 0 0 0 0 1 + +Total # of neighbors = 764 +Ave neighs/atom = 17.3636 +Ave special neighs/atom = 9.77273 +Neighbor list builds = 1000 +Dangerous builds = 0 + +# write_restart restart_longrun +# write_data restart_longrun.data + +Please see the log.cite file for references relevant to this simulation + +Total wall time: 0:00:00 diff --git a/examples/USER/sph/cavity_flow/cavity_flow.lmp b/examples/USER/sph/cavity_flow/cavity_flow.lmp index 5c1517687fa795d82b7aa23196973dc54dfb456f..19d3a3c14f40a81aa3543235bbd8313e832c0357 100644 --- a/examples/USER/sph/cavity_flow/cavity_flow.lmp +++ b/examples/USER/sph/cavity_flow/cavity_flow.lmp @@ -1,6 +1,6 @@ dimension 2 units si -atom_style meso +atom_style sph # create simulation box region box block -0.050e-3 1.044e-3 -0.05e-3 1.044e-3 -1.0e-6 1.0e-6 units box @@ -28,7 +28,7 @@ group integrate_full union fluid driver mass 3 2.0e-7 mass 2 2.0e-7 mass 1 4.0e-7 -set group all meso/rho 1000.0 +set group all sph/rho 1000.0 # use Tait's EOS in combination with Morris' laminar viscosity. # We set rho_0 = 1000 kg/m^3, c = 0.1 m/s, h = 6.5e-5 m. @@ -37,8 +37,8 @@ pair_style hybrid sph/taitwater/morris pair_coeff * * sph/taitwater/morris 1000 0.1 1.0e-3 6.5e-5 pair_coeff 2 3 none # exclude interaction between walls and shear driver -compute rho_peratom all meso/rho/atom -compute e_peratom all meso/e/atom +compute rho_peratom all sph/rho/atom +compute e_peratom all sph/e/atom compute ke_peratom all ke/atom compute esph all reduce sum c_e_peratom compute ke all ke @@ -49,8 +49,8 @@ velocity driver set 0.001 0.0 0.0 units box fix freeze_fix driver setforce 0.0 0.0 0.0 # do full time integration for shear driver and fluid, but keep walls stationary -fix integrate_fix_full integrate_full meso -fix integrate_fix_stationary walls meso/stationary +fix integrate_fix_full integrate_full sph +fix integrate_fix_stationary walls sph/stationary dump dump_id all custom 100 dump.lammpstrj id type xs ys zs vx vy c_rho_peratom c_e_peratom dump_modify dump_id first yes diff --git a/examples/USER/sph/heatconduction/sph_heat_conduction_2d.lmp b/examples/USER/sph/heatconduction/sph_heat_conduction_2d.lmp index 808646059f0e88416dde82ff558401ae8e432ae5..4d0db9c75a23aa561cf08334f013d7dbdfc8bf48 100644 --- a/examples/USER/sph/heatconduction/sph_heat_conduction_2d.lmp +++ b/examples/USER/sph/heatconduction/sph_heat_conduction_2d.lmp @@ -1,4 +1,4 @@ -# mesoscopic heat conduction +# SPH heat conduction # heat flow from hot right region to cold left region # compare the temperature profile at the end opf the simulation, # contained in file dump.last, to analytic solution. @@ -6,7 +6,7 @@ # dimension 2 units si -atom_style meso +atom_style sph boundary f p p lattice sq 0.01 @@ -17,23 +17,23 @@ mass 1 1.0e-5 region left block EDGE 49.9 EDGE EDGE EDGE EDGE region right block 50 EDGE EDGE EDGE EDGE EDGE -set region left meso/e 1.0 # internal energies -set region right meso/e 2.0 -set group all meso/rho 0.1 # mesoscopic density is also needed for this pair style +set region left sph/e 1.0 # internal energies +set region right sph/e 2.0 +set group all sph/rho 0.1 # SPH density is also needed for this pair style # For correct temperature profiles, mescoscopic density and mass * number density must coincide! pair_style sph/heatconduction # i j diffusion coeff. cutoff pair_coeff 1 1 1.0e-4 2.0e-2 -compute ie_atom all meso/e/atom +compute ie_atom all sph/e/atom compute ie all reduce sum c_ie_atom thermo 10 thermo_style custom step temp c_ie timestep 0.25e-1 neighbor 0.2e-2 bin -fix integrate_fix all meso/stationary +fix integrate_fix all sph/stationary dump dump_fix all custom 10 dump.heat id type x y z c_ie_atom dump_modify dump_fix first yes diff --git a/examples/USER/sph/heatconduction/sph_heat_conduction_3d.lmp b/examples/USER/sph/heatconduction/sph_heat_conduction_3d.lmp index fc6fa07457f1a3bfd2004064461fff9892b71094..ee9a5a86616cd189dcfff4097329e7138deb36e3 100644 --- a/examples/USER/sph/heatconduction/sph_heat_conduction_3d.lmp +++ b/examples/USER/sph/heatconduction/sph_heat_conduction_3d.lmp @@ -1,11 +1,11 @@ -# mesoscopic heat conduction +# SPH heat conduction # heat flow from hot right region to cold left region # compare the temperature profile at the end opf the simulation, # contained in file dump.last, to analytic solution. # # units si -atom_style meso +atom_style sph newton on boundary f p p @@ -17,9 +17,9 @@ mass 1 1.0e-5 region left block EDGE 49.9 EDGE EDGE EDGE EDGE region right block 50 EDGE EDGE EDGE EDGE EDGE -set region left meso/e 1.0 # internal energies -set region right meso/e 2.0 -set group all meso/rho 10.0 # mesoscopic density is also needed for this pair style +set region left sph/e 1.0 # internal energies +set region right sph/e 2.0 +set group all sph/rho 10.0 # SPH density is also needed for this pair style # For correct temperature profiles, mescoscopic density and mass * number density must coincide! pair_style sph/heatconduction @@ -28,13 +28,13 @@ pair_coeff 1 1 1.0e-4 2.0e-2 neighbor 0.2e-2 bin neigh_modify every 20 delay 0 check no -compute ie_atom all meso/e/atom +compute ie_atom all sph/e/atom compute ie all reduce sum c_ie_atom thermo_style custom step temp c_ie thermo_modify norm no -fix integrate_fix all meso/stationary +fix integrate_fix all sph/stationary thermo 10 timestep 0.25e-1 diff --git a/examples/USER/sph/shock_tube/shock2d.lmp b/examples/USER/sph/shock_tube/shock2d.lmp index bd67362ca98a047b428bf69d016c515bf1952fed..32cfd8067bb4bec6211b38bd5801c3ca0e3b4245 100755 --- a/examples/USER/sph/shock_tube/shock2d.lmp +++ b/examples/USER/sph/shock_tube/shock2d.lmp @@ -1,4 +1,4 @@ -atom_style meso +atom_style sph dimension 2 boundary s p p @@ -13,20 +13,20 @@ set region right type 2 mass 1 1 mass 2 0.25 -set type 1 meso/e 2.5 # internal energy corresponding to p=1, rho=1 -set type 2 meso/e 0.625 # internal energy corresponding to p=0.25, rho=0.25 -set type 1 meso/rho 1.0 -set type 2 meso/rho 0.25 +set type 1 sph/e 2.5 # internal energy corresponding to p=1, rho=1 +set type 2 sph/e 0.625 # internal energy corresponding to p=0.25, rho=0.25 +set type 1 sph/rho 1.0 +set type 2 sph/rho 0.25 pair_style hybrid/overlay sph/rhosum 1 sph/idealgas pair_coeff * * sph/rhosum 4.0 pair_coeff * * sph/idealgas 0.75 4.0 -compute rhoatom all meso/rho/atom -compute ieatom all meso/e/atom -compute emeso all reduce sum c_ieatom # total internal energy +compute rhoatom all shp/rho/atom +compute ieatom all sph/e/atom +compute esph all reduce sum c_ieatom # total internal energy compute ke all ke -variable etot equal c_ke+c_emeso # total energy +variable etot equal c_ke+c_esph # total energy # dump positions and local density dump dump_id all custom 100 dump.2d id type x z y c_rhoatom @@ -35,10 +35,10 @@ dump_modify dump_id first yes neighbor 0.5 bin neigh_modify every 5 delay 0 check yes thermo 10 -thermo_style custom step c_ke c_emeso v_etot +thermo_style custom step c_ke c_esph v_etot thermo_modify norm no -fix integration_fix all meso +fix integration_fix all sph fix 1 all setforce NULL 0.0 0.0 # treat as a quasi 1d problem timestep 0.05 log log.2d diff --git a/examples/USER/sph/shock_tube/shock3d.lmp b/examples/USER/sph/shock_tube/shock3d.lmp index 2da892d83677d5376bb33d9c31dfc482d90d4115..d82f081e851a9cfa52cc748c7b3516e72900acf9 100644 --- a/examples/USER/sph/shock_tube/shock3d.lmp +++ b/examples/USER/sph/shock_tube/shock3d.lmp @@ -1,4 +1,4 @@ -atom_style meso +atom_style sph boundary s p p region box block -100 150 -4 4 -4 4 units box @@ -12,20 +12,20 @@ set region right type 2 mass 1 1 mass 2 0.25 -set type 1 meso/e 2.5 # internal energy corresponding to p=1, rho=1 -set type 2 meso/e 0.625 # internal energy corresponding to p=0.25, rho=0.25 -set type 1 meso/rho 1.0 -set type 2 meso/rho 0.25 +set type 1 sph/e 2.5 # internal energy corresponding to p=1, rho=1 +set type 2 sph/e 0.625 # internal energy corresponding to p=0.25, rho=0.25 +set type 1 sph/rho 1.0 +set type 2 sph/rho 0.25 pair_style hybrid/overlay sph/rhosum 1 sph/idealgas pair_coeff * * sph/rhosum 4.0 pair_coeff * * sph/idealgas 0.75 4.0 -compute rhoatom all meso/rho/atom -compute ieatom all meso/e/atom -compute emeso all reduce sum c_ieatom # total internal energy +compute rhoatom all sph/rho/atom +compute ieatom all sph/e/atom +compute esph all reduce sum c_ieatom # total internal energy compute ke all ke -variable etot equal c_ke+c_emeso # total energy +variable etot equal c_ke+c_esph # total energy # dump positions and local density dump dump_id all custom 100 dump.3d id type x z y c_rhoatom @@ -34,10 +34,10 @@ dump_modify dump_id first yes neighbor 0.5 bin neigh_modify every 5 delay 0 check yes thermo 10 -thermo_style custom step c_ke c_emeso v_etot +thermo_style custom step c_ke c_esph v_etot thermo_modify norm no -fix integration_fix all meso +fix integration_fix all sph fix 1 all setforce NULL 0.0 0.0 # treat as a quasi 1d problem timestep 0.05 log log.3d diff --git a/examples/USER/sph/water_collapse/water_collapse.lmp b/examples/USER/sph/water_collapse/water_collapse.lmp index 5e1359dae5f5367ea67812ca571c33d5b0a64f92..c1f38159473430cf7b1e43ecfa0ba4d75f6a5a8b 100644 --- a/examples/USER/sph/water_collapse/water_collapse.lmp +++ b/examples/USER/sph/water_collapse/water_collapse.lmp @@ -1,5 +1,5 @@ processors * 1 1 # manually assign processors to spatial regions -atom_style meso +atom_style sph dimension 2 newton on boundary f f p @@ -22,8 +22,8 @@ pair_coeff 1 1 sph/rhosum ${h} fix gfix water gravity -9.81 vector 0 1 0 # add gravity. This fix also computes potential energy of mass in gravity field. fix 2d_fix all enforce2d -compute rho_peratom all meso/rho/atom -compute e_peratom all meso/e/atom +compute rho_peratom all sph/rho/atom +compute e_peratom all sph/e/atom compute esph all reduce sum c_e_peratom compute ke all ke variable etot equal c_esph+c_ke+f_gfix @@ -32,10 +32,10 @@ variable etot equal c_esph+c_ke+f_gfix fix dtfix all dt/reset 1 NULL ${dt} 0.0005 units box # use a variable timestep # time-integrate position, velocities, internal energy and density of water particles -fix integrate_water_fix water meso +fix integrate_water_fix water sph # time-integrate only internal energy and density of boundary particles -fix integrate_bc_fix bc meso/stationary +fix integrate_bc_fix bc sph/stationary dump dump_id all custom 100 dump.lammpstrj id type xs ys zs c_rho_peratom c_e_peratom fx fy dump_modify dump_id first yes thermo 10 diff --git a/examples/VISCOSITY/README b/examples/VISCOSITY/README index 38bee0c58d438178f79218f662ef581da3f6d07f..8235fa1f77dc3e3518497ccc2084da620f7ec8fc 100644 --- a/examples/VISCOSITY/README +++ b/examples/VISCOSITY/README @@ -1,5 +1,6 @@ -This directory has 5 scripts that compute the viscosity (eta) of a -Lennard-Jones fluid using 5 different methods. See the discussion in +This directory has 6 scripts that compute the viscosity (eta) of fluid +using 6 different methods. 5 of them are for a Lennard-Jones fluid +and the last one is for SPC/E water model. See the discussion in Section 6.21 of the manual for an overview of the methods and pointers to doc pages for the commands which implement them. Citations for the various methods can also be found in the manual. @@ -10,7 +11,7 @@ enough to generate good statistics and highly accurate results. ------------- -These are the 5 methods for computing viscosity. The first 3 are +These are the 5 methods for computing viscosity of a LJ fluid. The first 3 are non-equilibrium methods; the last 2 are equilibrium methods. in.wall = move a wall to shear the fluid between two walls @@ -89,3 +90,18 @@ heat/flux doc page - the resulting value prints at the end of the run and is in the log file eta = 1.07 + +------------- + +in.cos.1000SPCE is an example script of using cosine periodic perturbation method +to calculate the viscosity of SPC/E water model. + +The reciprocal of eta is computed within the script, and printed out as v_invVis +in thermo_style command. The result will converge after hundreds of picoseconds. +Then eta is obtained from the reciprocal of time average of v_invVis. + +eta = 0.75 mPa*s + +Note that the calculated viscosity by this method decreases with increased acceleration. +It is therefore generally necessary to perform calculation at different accelerations +and extrapolate the viscosity to zero shear. diff --git a/examples/VISCOSITY/data.cos.1000SPCE b/examples/VISCOSITY/data.cos.1000SPCE new file mode 100644 index 0000000000000000000000000000000000000000..e04d3cbf510b9186b357e2ddececa19afe6c2668 --- /dev/null +++ b/examples/VISCOSITY/data.cos.1000SPCE @@ -0,0 +1,6043 @@ +# DFF generated LAMMPS data file +3000 atoms +2000 bonds +1000 angles +0 dihedrals +0 impropers + +2 atom types +1 bond types +1 angle types +0 dihedral types +0 improper types + + 0.0000 31.0430 xlo xhi + 0.0000 31.0430 ylo yhi + 0.0000 31.0430 zlo zhi + +Masses + + 1 15.9994 # o_2w + 2 1.0079 # h_1o + +Atoms + + 1 1 1 -0.84760 10.02000 17.96200 20.41400 # O1 + 2 1 2 0.42380 10.01000 18.85000 20.89600 # H2 + 3 1 2 0.42380 10.87100 17.45700 20.64700 # H3 + 4 2 1 -0.84760 5.99700 12.62400 25.60500 # O4 + 5 2 2 0.42380 5.78800 12.30400 26.55300 # H5 + 6 2 2 0.42380 6.69100 11.94300 25.34500 # H6 + 7 3 1 -0.84760 8.41400 5.80900 17.01200 # O7 + 8 3 2 0.42380 8.48900 5.69300 16.00800 # H8 + 9 3 2 0.42380 7.90800 4.99800 17.40500 # H9 + 10 4 1 -0.84760 17.58100 16.62000 6.43700 # O10 + 11 4 2 0.42380 17.25100 17.30600 7.17000 # H11 + 12 4 2 0.42380 18.39900 17.02700 5.90600 # H12 + 13 5 1 -0.84760 15.82700 21.92200 15.08600 # O13 + 14 5 2 0.42380 16.43600 22.69100 15.11000 # H14 + 15 5 2 0.42380 16.56400 21.17400 14.98900 # H15 + 16 6 1 -0.84760 24.18200 -0.18100 27.97700 # O16 + 17 6 2 0.42380 23.95500 -0.27600 26.96300 # H17 + 18 6 2 0.42380 23.44400 0.37300 28.30000 # H18 + 19 7 1 -0.84760 7.19500 7.91600 -0.56500 # O19 + 20 7 2 0.42380 7.55900 6.96600 -0.38300 # H20 + 21 7 2 0.42380 7.20700 8.39600 0.34200 # H21 + 22 8 1 -0.84760 5.63500 13.85300 11.25200 # O22 + 23 8 2 0.42380 6.08200 13.16700 10.62800 # H23 + 24 8 2 0.42380 4.84500 13.43100 11.72500 # H24 + 25 9 1 -0.84760 23.85900 -0.47100 19.57500 # O25 + 26 9 2 0.42380 24.23000 -0.80400 18.71100 # H26 + 27 9 2 0.42380 23.88300 -1.23400 20.25500 # H27 + 28 10 1 -0.84760 7.19100 20.92100 28.09900 # O28 + 29 10 2 0.42380 6.61400 21.56500 27.55300 # H29 + 30 10 2 0.42380 6.68200 20.08700 28.02500 # H30 + 31 11 1 -0.84760 6.10000 27.87700 18.99800 # O31 + 32 11 2 0.42380 5.49800 27.32200 18.45300 # H32 + 33 11 2 0.42380 7.03600 27.63800 18.73900 # H33 + 34 12 1 -0.84760 22.42000 9.51900 9.70000 # O34 + 35 12 2 0.42380 22.08300 9.67000 10.67900 # H35 + 36 12 2 0.42380 23.36100 9.97900 9.69000 # H36 + 37 13 1 -0.84760 29.33600 21.61500 18.38900 # O37 + 38 13 2 0.42380 29.20300 22.58600 18.29200 # H38 + 39 13 2 0.42380 28.37100 21.33000 18.42500 # H39 + 40 14 1 -0.84760 20.82900 25.68600 29.05700 # O40 + 41 14 2 0.42380 20.68200 24.91600 29.71000 # H41 + 42 14 2 0.42380 19.95500 25.65300 28.50100 # H42 + 43 15 1 -0.84760 20.16600 20.34600 17.44500 # O43 + 44 15 2 0.42380 20.37000 19.35800 17.15100 # H44 + 45 15 2 0.42380 20.89300 20.56700 18.05800 # H45 + 46 16 1 -0.84760 24.91300 27.21500 15.65400 # O46 + 47 16 2 0.42380 24.95000 27.94200 16.40800 # H47 + 48 16 2 0.42380 25.30100 27.67200 14.82300 # H48 + 49 17 1 -0.84760 10.86100 25.07200 22.61800 # O49 + 50 17 2 0.42380 10.51500 25.85100 21.97900 # H50 + 51 17 2 0.42380 10.26100 25.02600 23.45100 # H51 + 52 18 1 -0.84760 20.41700 4.62600 14.12400 # O52 + 53 18 2 0.42380 21.28400 3.99600 14.15300 # H53 + 54 18 2 0.42380 20.66000 5.60900 13.89000 # H54 + 55 19 1 -0.84760 18.65500 9.73300 16.03500 # O55 + 56 19 2 0.42380 18.81100 9.24400 15.15200 # H56 + 57 19 2 0.42380 17.82800 10.19500 15.75000 # H57 + 58 20 1 -0.84760 15.15000 10.75800 24.17300 # O58 + 59 20 2 0.42380 14.29300 11.08600 24.54700 # H59 + 60 20 2 0.42380 15.86200 11.41200 24.55500 # H60 + 61 21 1 -0.84760 0.43700 1.33900 16.19600 # O61 + 62 21 2 0.42380 0.45100 1.11700 15.20700 # H62 + 63 21 2 0.42380 0.46400 0.48900 16.74600 # H63 + 64 22 1 -0.84760 6.40400 22.65100 26.12000 # O64 + 65 22 2 0.42380 5.42300 22.87000 26.37400 # H65 + 66 22 2 0.42380 6.11500 22.28300 25.17700 # H66 + 67 23 1 -0.84760 24.88400 20.16700 25.26600 # O67 + 68 23 2 0.42380 23.95400 20.57300 24.98900 # H68 + 69 23 2 0.42380 25.39500 21.06100 25.25300 # H69 + 70 24 1 -0.84760 13.97500 16.88900 10.88100 # O70 + 71 24 2 0.42380 13.82600 16.33300 10.04100 # H71 + 72 24 2 0.42380 13.34100 16.77700 11.59500 # H72 + 73 25 1 -0.84760 0.73200 20.62100 5.08000 # O73 + 74 25 2 0.42380 0.48100 19.75800 5.45100 # H74 + 75 25 2 0.42380 0.24900 20.62700 4.22900 # H75 + 76 26 1 -0.84760 4.21500 23.27600 20.59300 # O76 + 77 26 2 0.42380 4.32700 24.17100 20.06800 # H77 + 78 26 2 0.42380 3.75400 23.53200 21.42600 # H78 + 79 27 1 -0.84760 5.08400 20.34600 6.43100 # O79 + 80 27 2 0.42380 4.33700 20.78900 5.90200 # H80 + 81 27 2 0.42380 4.78300 19.42800 6.59200 # H81 + 82 28 1 -0.84760 9.94400 22.43600 27.21700 # O82 + 83 28 2 0.42380 9.49200 21.88100 26.52400 # H83 + 84 28 2 0.42380 10.75500 21.84300 27.39500 # H84 + 85 29 1 -0.84760 22.87700 5.01000 28.11900 # O85 + 86 29 2 0.42380 22.40000 5.25100 27.22800 # H86 + 87 29 2 0.42380 23.73300 5.50100 28.05400 # H87 + 88 30 1 -0.84760 3.15000 23.45700 0.05000 # O88 + 89 30 2 0.42380 3.63500 24.06500 0.66700 # H89 + 90 30 2 0.42380 3.49800 23.55000 -0.87900 # H90 + 91 31 1 -0.84760 21.21700 14.97600 28.85900 # O91 + 92 31 2 0.42380 22.02000 15.18800 28.28200 # H92 + 93 31 2 0.42380 21.49700 15.06100 29.85600 # H93 + 94 32 1 -0.84760 18.14800 25.30800 3.57400 # O94 + 95 32 2 0.42380 17.65500 24.94900 2.75600 # H95 + 96 32 2 0.42380 17.86600 24.72600 4.39200 # H96 + 97 33 1 -0.84760 14.78100 10.19800 19.09700 # O97 + 98 33 2 0.42380 13.87800 10.49300 19.47300 # H98 + 99 33 2 0.42380 14.43200 9.89800 18.13600 # H99 + 100 34 1 -0.84760 22.84400 2.27900 23.49900 # O100 + 101 34 2 0.42380 21.82600 2.13500 23.68400 # H101 + 102 34 2 0.42380 23.22400 1.40000 23.16000 # H102 + 103 35 1 -0.84760 21.93300 14.23900 9.87300 # O103 + 104 35 2 0.42380 21.23200 13.49500 9.81800 # H104 + 105 35 2 0.42380 21.51100 15.06800 9.33000 # H105 + 106 36 1 -0.84760 19.42400 30.06700 7.14100 # O106 + 107 36 2 0.42380 18.65200 29.34600 7.16500 # H107 + 108 36 2 0.42380 20.01100 29.93000 7.93500 # H108 + 109 37 1 -0.84760 3.00900 7.29000 19.12900 # O109 + 110 37 2 0.42380 2.34300 6.56000 19.04200 # H110 + 111 37 2 0.42380 2.52200 7.60100 20.03000 # H111 + 112 38 1 -0.84760 14.46300 13.71300 10.47200 # O112 + 113 38 2 0.42380 13.77400 13.63700 9.69500 # H113 + 114 38 2 0.42380 14.93100 14.60600 10.49300 # H114 + 115 39 1 -0.84760 26.02000 3.52800 19.78800 # O115 + 116 39 2 0.42380 25.04700 3.83300 19.83300 # H116 + 117 39 2 0.42380 26.03000 2.63800 20.28600 # H117 + 118 40 1 -0.84760 15.63500 27.14400 26.49400 # O118 + 119 40 2 0.42380 14.59800 27.43000 26.44700 # H119 + 120 40 2 0.42380 15.84700 26.35000 27.11500 # H120 + 121 41 1 -0.84760 18.20200 -0.34100 13.08200 # O121 + 122 41 2 0.42380 17.63600 0.47800 12.83100 # H122 + 123 41 2 0.42380 17.53000 -1.12700 13.03800 # H123 + 124 42 1 -0.84760 5.36400 1.04500 3.37800 # O124 + 125 42 2 0.42380 6.38800 0.72200 3.40900 # H125 + 126 42 2 0.42380 4.90900 0.71200 4.24200 # H126 + 127 43 1 -0.84760 28.56000 17.87800 12.38900 # O127 + 128 43 2 0.42380 27.75900 17.74800 12.93600 # H128 + 129 43 2 0.42380 29.36300 18.37200 12.69000 # H129 + 130 44 1 -0.84760 11.17600 9.31000 19.41400 # O130 + 131 44 2 0.42380 10.42900 8.65200 19.27900 # H131 + 132 44 2 0.42380 11.96800 8.92900 18.93400 # H132 + 133 45 1 -0.84760 23.15200 11.07200 16.86400 # O133 + 134 45 2 0.42380 23.22800 11.88000 16.23700 # H134 + 135 45 2 0.42380 22.39000 10.45900 16.53300 # H135 + 136 46 1 -0.84760 17.75000 13.43200 4.45000 # O136 + 137 46 2 0.42380 18.72000 13.75500 4.33700 # H137 + 138 46 2 0.42380 17.56000 12.78800 5.29500 # H138 + 139 47 1 -0.84760 11.70100 14.33600 17.46700 # O139 + 140 47 2 0.42380 10.83000 14.15500 17.93500 # H140 + 141 47 2 0.42380 11.64900 15.19800 16.91500 # H141 + 142 48 1 -0.84760 23.22600 -0.66600 25.69700 # O142 + 143 48 2 0.42380 23.62500 0.00100 25.06700 # H143 + 144 48 2 0.42380 22.51900 -1.05400 25.16600 # H144 + 145 49 1 -0.84760 16.94400 11.52900 17.25900 # O145 + 146 49 2 0.42380 15.97000 11.88500 17.38400 # H146 + 147 49 2 0.42380 17.65000 12.05900 17.77100 # H147 + 148 50 1 -0.84760 21.12700 26.88300 23.25400 # O148 + 149 50 2 0.42380 21.07100 25.96900 22.88900 # H149 + 150 50 2 0.42380 20.32100 27.34000 22.85300 # H150 + 151 51 1 -0.84760 13.08200 28.59900 9.25700 # O151 + 152 51 2 0.42380 12.99700 27.59400 9.03200 # H152 + 153 51 2 0.42380 13.95400 28.78900 9.61000 # H153 + 154 52 1 -0.84760 18.07800 1.87000 15.56900 # O154 + 155 52 2 0.42380 17.67300 1.18000 14.94100 # H155 + 156 52 2 0.42380 18.32700 2.58700 14.90100 # H156 + 157 53 1 -0.84760 24.21600 23.08900 20.28300 # O157 + 158 53 2 0.42380 23.81800 24.02700 20.26300 # H158 + 159 53 2 0.42380 23.51800 22.38600 20.07300 # H159 + 160 54 1 -0.84760 13.49600 3.82000 4.73600 # O160 + 161 54 2 0.42380 13.46000 4.83000 4.74500 # H161 + 162 54 2 0.42380 13.12400 3.62600 5.72000 # H162 + 163 55 1 -0.84760 9.97500 10.77100 6.90400 # O163 + 164 55 2 0.42380 10.85200 10.71000 6.43600 # H164 + 165 55 2 0.42380 9.43300 10.27900 6.27000 # H165 + 166 56 1 -0.84760 2.65800 15.47300 21.75500 # O166 + 167 56 2 0.42380 2.85400 16.12500 22.44000 # H167 + 168 56 2 0.42380 2.66900 14.51500 22.11500 # H168 + 169 57 1 -0.84760 15.23100 25.00200 15.10200 # O169 + 170 57 2 0.42380 14.21300 25.02400 15.21400 # H170 + 171 57 2 0.42380 15.55100 25.61300 15.85500 # H171 + 172 58 1 -0.84760 24.76200 12.98300 29.24400 # O172 + 173 58 2 0.42380 24.23400 13.72400 29.65700 # H173 + 174 58 2 0.42380 24.20700 12.40600 28.57500 # H174 + 175 59 1 -0.84760 16.70100 23.48200 12.88000 # O175 + 176 59 2 0.42380 16.06200 24.22400 13.24000 # H176 + 177 59 2 0.42380 17.48400 23.50400 13.57700 # H177 + 178 60 1 -0.84760 5.03400 14.97500 8.22300 # O178 + 179 60 2 0.42380 4.66600 15.74600 7.70100 # H179 + 180 60 2 0.42380 5.36300 15.29600 9.11700 # H180 + 181 61 1 -0.84760 1.41800 0.11800 13.87300 # O181 + 182 61 2 0.42380 1.81800 -0.01400 14.78800 # H182 + 183 61 2 0.42380 0.38900 -0.01500 13.84100 # H183 + 184 62 1 -0.84760 29.01700 8.90400 24.43500 # O184 + 185 62 2 0.42380 28.39400 9.21500 23.74100 # H185 + 186 62 2 0.42380 29.68600 8.45500 23.89000 # H186 + 187 63 1 -0.84760 2.46500 19.03100 23.65900 # O187 + 188 63 2 0.42380 2.12900 18.43200 24.46500 # H188 + 189 63 2 0.42380 2.69700 18.32200 22.96300 # H189 + 190 64 1 -0.84760 19.67500 19.94000 27.72700 # O190 + 191 64 2 0.42380 20.13100 20.57000 27.09800 # H191 + 192 64 2 0.42380 19.18000 20.42400 28.45600 # H192 + 193 65 1 -0.84760 10.07000 23.67200 11.11200 # O193 + 194 65 2 0.42380 10.51900 23.08700 10.45100 # H194 + 195 65 2 0.42380 9.92900 24.48200 10.59100 # H195 + 196 66 1 -0.84760 13.25600 28.34400 25.62000 # O196 + 197 66 2 0.42380 12.63100 28.05800 24.83700 # H197 + 198 66 2 0.42380 13.03800 28.09500 26.62000 # H198 + 199 67 1 -0.84760 12.37800 10.79300 10.02000 # O199 + 200 67 2 0.42380 13.11900 11.13600 9.53100 # H200 + 201 67 2 0.42380 12.39300 9.81500 9.94000 # H201 + 202 68 1 -0.84760 22.75300 14.39900 7.19200 # O202 + 203 68 2 0.42380 21.78500 14.25000 6.98600 # H203 + 204 68 2 0.42380 22.98300 13.64100 7.76400 # H204 + 205 69 1 -0.84760 21.34100 2.49900 2.14600 # O205 + 206 69 2 0.42380 20.61300 2.89500 2.74300 # H206 + 207 69 2 0.42380 22.06500 3.22600 1.83100 # H207 + 208 70 1 -0.84760 11.64800 20.29400 27.70500 # O208 + 209 70 2 0.42380 11.88800 20.72800 28.56500 # H209 + 210 70 2 0.42380 11.93400 19.29500 27.96600 # H210 + 211 71 1 -0.84760 8.01800 25.70500 -0.48800 # O211 + 212 71 2 0.42380 7.69400 25.20200 -1.34500 # H212 + 213 71 2 0.42380 9.00600 25.68300 -0.45200 # H213 + 214 72 1 -0.84760 7.55000 2.04700 1.09200 # O214 + 215 72 2 0.42380 6.78400 2.29700 1.61100 # H215 + 216 72 2 0.42380 7.30700 2.15000 0.14800 # H216 + 217 73 1 -0.84760 27.52800 17.17200 8.33700 # O217 + 218 73 2 0.42380 27.39900 16.58100 7.46000 # H218 + 219 73 2 0.42380 28.56000 16.85700 8.49500 # H219 + 220 74 1 -0.84760 25.28900 27.23700 6.77400 # O220 + 221 74 2 0.42380 24.50500 27.84000 6.69400 # H221 + 222 74 2 0.42380 25.38500 26.87200 7.72400 # H222 + 223 75 1 -0.84760 26.37200 0.72700 -0.31700 # O223 + 224 75 2 0.42380 27.34600 0.85700 -0.12100 # H224 + 225 75 2 0.42380 26.01600 1.55700 -0.75100 # H225 + 226 76 1 -0.84760 26.16200 3.51400 24.32700 # O226 + 227 76 2 0.42380 27.13500 3.66200 24.08000 # H227 + 228 76 2 0.42380 25.54600 3.30400 23.57500 # H228 + 229 77 1 -0.84760 22.84800 27.59600 29.22800 # O229 + 230 77 2 0.42380 22.08000 26.90900 29.06500 # H230 + 231 77 2 0.42380 23.41000 26.96700 29.79900 # H231 + 232 78 1 -0.84760 26.87700 3.82500 29.76200 # O232 + 233 78 2 0.42380 27.54400 3.19700 30.19100 # H233 + 234 78 2 0.42380 26.75100 3.68200 28.79700 # H234 + 235 79 1 -0.84760 13.12900 12.86500 29.25300 # O235 + 236 79 2 0.42380 12.43400 13.14800 28.59400 # H236 + 237 79 2 0.42380 13.71300 13.67800 29.38000 # H237 + 238 80 1 -0.84760 17.81000 10.12300 7.12400 # O238 + 239 80 2 0.42380 17.14200 9.62900 6.54700 # H239 + 240 80 2 0.42380 18.64100 9.88200 6.63300 # H240 + 241 81 1 -0.84760 9.11100 14.30700 26.16000 # O241 + 242 81 2 0.42380 9.94000 14.12900 26.74400 # H242 + 243 81 2 0.42380 9.26700 13.63600 25.36000 # H243 + 244 82 1 -0.84760 13.93000 18.44400 22.37300 # O244 + 245 82 2 0.42380 14.20900 18.54400 23.29400 # H245 + 246 82 2 0.42380 13.59300 19.26100 21.97000 # H246 + 247 83 1 -0.84760 0.98800 6.29300 27.55700 # O247 + 248 83 2 0.42380 0.66100 5.39100 27.24600 # H248 + 249 83 2 0.42380 1.66000 6.39900 26.78000 # H249 + 250 84 1 -0.84760 16.84600 29.24900 24.51000 # O250 + 251 84 2 0.42380 16.15500 28.61600 24.90700 # H251 + 252 84 2 0.42380 16.38300 29.46200 23.67000 # H252 + 253 85 1 -0.84760 6.35100 17.25400 0.83800 # O253 + 254 85 2 0.42380 6.87700 16.45400 0.54800 # H254 + 255 85 2 0.42380 5.40800 16.85300 0.93700 # H255 + 256 86 1 -0.84760 14.99500 7.90900 26.86300 # O256 + 257 86 2 0.42380 14.70900 8.05000 27.84900 # H257 + 258 86 2 0.42380 15.49800 7.06200 26.68800 # H258 + 259 87 1 -0.84760 6.14100 28.63000 15.75200 # O259 + 260 87 2 0.42380 6.30700 28.03400 16.59200 # H260 + 261 87 2 0.42380 6.77000 29.40400 15.69900 # H261 + 262 88 1 -0.84760 18.65800 14.29600 15.00200 # O262 + 263 88 2 0.42380 19.31800 13.86500 14.37000 # H263 + 264 88 2 0.42380 19.01100 15.24500 15.11500 # H264 + 265 89 1 -0.84760 2.33700 9.03400 14.49900 # O265 + 266 89 2 0.42380 2.08400 8.54100 13.66900 # H266 + 267 89 2 0.42380 2.36800 8.41700 15.26300 # H267 + 268 90 1 -0.84760 25.94900 19.31100 7.58500 # O268 + 269 90 2 0.42380 25.95900 19.30900 8.56800 # H269 + 270 90 2 0.42380 26.66100 18.63500 7.29300 # H270 + 271 91 1 -0.84760 26.62900 23.49600 12.15600 # O271 + 272 91 2 0.42380 26.96300 22.56800 12.24600 # H272 + 273 91 2 0.42380 27.03600 24.04000 12.88200 # H273 + 274 92 1 -0.84760 11.48400 2.32400 12.59700 # O274 + 275 92 2 0.42380 11.49400 2.62300 11.62500 # H275 + 276 92 2 0.42380 10.74900 1.62200 12.64000 # H276 + 277 93 1 -0.84760 -0.51800 22.20500 8.88100 # O277 + 278 93 2 0.42380 0.24900 22.55800 8.29500 # H278 + 279 93 2 0.42380 -0.27400 22.11400 9.87800 # H279 + 280 94 1 -0.84760 9.41700 -0.60000 -0.33000 # O280 + 281 94 2 0.42380 10.01100 0.03500 0.20200 # H281 + 282 94 2 0.42380 9.97700 -0.71600 -1.18400 # H282 + 283 95 1 -0.84760 8.06700 23.08800 12.87300 # O283 + 284 95 2 0.42380 8.84700 23.20800 12.17200 # H284 + 285 95 2 0.42380 7.89200 23.83600 13.54200 # H285 + 286 96 1 -0.84760 19.90600 3.96900 6.75100 # O286 + 287 96 2 0.42380 18.90100 3.94900 6.74700 # H287 + 288 96 2 0.42380 20.12800 4.43200 5.89700 # H288 + 289 97 1 -0.84760 3.70900 13.47300 12.79500 # O289 + 290 97 2 0.42380 3.70700 14.47600 12.92800 # H290 + 291 97 2 0.42380 3.13100 13.06300 13.52000 # H291 + 292 98 1 -0.84760 8.17700 5.56700 22.63100 # O292 + 293 98 2 0.42380 8.71100 5.65200 21.78000 # H293 + 294 98 2 0.42380 8.01600 4.52300 22.82400 # H294 + 295 99 1 -0.84760 7.65500 25.50400 20.30100 # O295 + 296 99 2 0.42380 7.86200 24.54100 20.00200 # H296 + 297 99 2 0.42380 6.97300 25.75100 19.67200 # H297 + 298 100 1 -0.84760 6.31400 24.43900 23.75900 # O298 + 299 100 2 0.42380 7.09900 23.87900 24.14400 # H299 + 300 100 2 0.42380 5.98400 23.90400 22.85200 # H300 + 301 101 1 -0.84760 8.63500 28.19600 26.74700 # O301 + 302 101 2 0.42380 7.96500 28.81900 27.07100 # H302 + 303 101 2 0.42380 8.75300 27.62000 27.55300 # H303 + 304 102 1 -0.84760 19.14700 8.19000 5.28700 # O304 + 305 102 2 0.42380 18.85200 7.35700 4.87600 # H305 + 306 102 2 0.42380 19.18000 8.94500 4.66300 # H306 + 307 103 1 -0.84760 0.72400 17.61700 5.56500 # O307 + 308 103 2 0.42380 -0.26000 17.53400 5.32500 # H308 + 309 103 2 0.42380 1.10200 16.67300 5.43600 # H309 + 310 104 1 -0.84760 26.48800 8.52500 17.62200 # O310 + 311 104 2 0.42380 27.25900 8.55600 16.94700 # H311 + 312 104 2 0.42380 25.98500 9.40700 17.53100 # H312 + 313 105 1 -0.84760 26.37000 26.56500 22.42700 # O313 + 314 105 2 0.42380 26.68000 26.97900 23.27200 # H314 + 315 105 2 0.42380 26.30300 25.54500 22.60600 # H315 + 316 106 1 -0.84760 6.20600 2.71900 27.71200 # O316 + 317 106 2 0.42380 6.54100 1.75300 27.92300 # H317 + 318 106 2 0.42380 6.84600 3.50400 27.85600 # H318 + 319 107 1 -0.84760 21.33300 8.71000 15.84400 # O319 + 320 107 2 0.42380 20.96500 8.84900 16.82000 # H320 + 321 107 2 0.42380 20.61300 8.51500 15.16100 # H321 + 322 108 1 -0.84760 23.04900 8.30800 25.42000 # O322 + 323 108 2 0.42380 23.30100 8.29700 24.44100 # H323 + 324 108 2 0.42380 22.55500 7.46700 25.63500 # H324 + 325 109 1 -0.84760 28.13700 21.97400 25.15200 # O325 + 326 109 2 0.42380 28.78100 22.74100 25.08500 # H326 + 327 109 2 0.42380 28.61900 21.10300 25.05900 # H327 + 328 110 1 -0.84760 20.07800 11.96900 9.22700 # O328 + 329 110 2 0.42380 20.64100 11.21200 9.59300 # H329 + 330 110 2 0.42380 19.66900 11.65800 8.45100 # H330 + 331 111 1 -0.84760 3.18100 5.04200 11.07600 # O331 + 332 111 2 0.42380 3.60900 4.28400 11.50800 # H332 + 333 111 2 0.42380 2.80100 4.47300 10.35300 # H333 + 334 112 1 -0.84760 16.12500 13.48300 14.11400 # O334 + 335 112 2 0.42380 16.64900 14.27700 13.69200 # H335 + 336 112 2 0.42380 16.88300 13.06900 14.61500 # H336 + 337 113 1 -0.84760 7.02000 26.55300 3.72800 # O337 + 338 113 2 0.42380 6.55400 27.16200 4.38600 # H338 + 339 113 2 0.42380 6.75100 25.66300 4.02100 # H339 + 340 114 1 -0.84760 29.22600 18.67700 20.15300 # O340 + 341 114 2 0.42380 29.49900 19.55900 19.67000 # H341 + 342 114 2 0.42380 28.21200 18.73200 20.32800 # H342 + 343 115 1 -0.84760 12.55200 21.55000 5.16200 # O343 + 344 115 2 0.42380 12.98500 21.34800 6.11700 # H344 + 345 115 2 0.42380 11.61400 21.12600 5.16400 # H345 + 346 116 1 -0.84760 8.63800 -0.13900 14.55100 # O346 + 347 116 2 0.42380 9.31700 -0.85400 14.91100 # H347 + 348 116 2 0.42380 8.44100 0.61400 15.22200 # H348 + 349 117 1 -0.84760 9.80400 16.72700 17.47600 # O349 + 350 117 2 0.42380 9.76900 15.83000 17.87100 # H350 + 351 117 2 0.42380 8.86600 17.01200 17.34500 # H351 + 352 118 1 -0.84760 24.87300 17.76500 1.87500 # O352 + 353 118 2 0.42380 25.13400 17.11300 2.61000 # H353 + 354 118 2 0.42380 25.10600 18.69800 2.25800 # H354 + 355 119 1 -0.84760 4.18000 0.08600 5.94900 # O355 + 356 119 2 0.42380 3.29100 0.24300 5.70200 # H356 + 357 119 2 0.42380 3.96600 -0.00400 6.91500 # H357 + 358 120 1 -0.84760 1.99900 2.18900 3.47900 # O358 + 359 120 2 0.42380 1.53600 1.62500 4.19900 # H359 + 360 120 2 0.42380 2.34400 1.44200 2.87900 # H360 + 361 121 1 -0.84760 -0.82900 21.94500 2.26100 # O361 + 362 121 2 0.42380 -1.18100 22.83300 2.44400 # H362 + 363 121 2 0.42380 0.13700 22.20000 2.12600 # H363 + 364 122 1 -0.84760 4.26200 17.28500 15.28600 # O364 + 365 122 2 0.42380 3.38100 17.59300 14.78700 # H365 + 366 122 2 0.42380 4.52500 18.08500 15.79900 # H366 + 367 123 1 -0.84760 0.45100 7.25700 2.06100 # O367 + 368 123 2 0.42380 -0.59500 7.26500 2.17100 # H368 + 369 123 2 0.42380 0.84600 6.33100 2.34900 # H369 + 370 124 1 -0.84760 8.49200 9.41900 4.76400 # O370 + 371 124 2 0.42380 7.94000 10.31500 4.61500 # H371 + 372 124 2 0.42380 8.45800 9.16200 3.75100 # H372 + 373 125 1 -0.84760 11.76800 10.07000 21.96000 # O373 + 374 125 2 0.42380 11.79800 10.94000 22.43500 # H374 + 375 125 2 0.42380 11.34400 10.44800 21.11100 # H375 + 376 126 1 -0.84760 17.93100 4.97400 5.34200 # O376 + 377 126 2 0.42380 18.04500 5.26500 4.42800 # H377 + 378 126 2 0.42380 17.12300 4.42000 5.46300 # H378 + 379 127 1 -0.84760 13.94600 21.75000 29.55100 # O379 + 380 127 2 0.42380 14.62600 21.14800 29.12000 # H380 + 381 127 2 0.42380 14.49600 22.33000 30.24200 # H381 + 382 128 1 -0.84760 29.95900 11.24400 15.21000 # O382 + 383 128 2 0.42380 30.53100 10.86500 15.96200 # H383 + 384 128 2 0.42380 29.23500 11.90500 15.49100 # H384 + 385 129 1 -0.84760 28.73000 25.04000 8.86300 # O385 + 386 129 2 0.42380 28.78500 26.00000 8.63100 # H386 + 387 129 2 0.42380 27.89900 24.81400 9.29500 # H387 + 388 130 1 -0.84760 3.12200 2.48500 12.69900 # O388 + 389 130 2 0.42380 2.57300 2.16500 11.87300 # H389 + 390 130 2 0.42380 2.55100 2.74700 13.53700 # H390 + 391 131 1 -0.84760 12.19900 20.81200 19.63000 # O391 + 392 131 2 0.42380 12.29500 21.40500 18.85100 # H392 + 393 131 2 0.42380 12.18600 19.85400 19.25400 # H393 + 394 132 1 -0.84760 4.27600 17.63700 29.06200 # O394 + 395 132 2 0.42380 4.43200 18.55600 28.70900 # H395 + 396 132 2 0.42380 3.92800 17.79500 30.01900 # H396 + 397 133 1 -0.84760 26.46500 15.91900 13.35100 # O397 + 398 133 2 0.42380 27.22300 15.38700 12.91400 # H398 + 399 133 2 0.42380 26.22500 15.35000 14.23300 # H399 + 400 134 1 -0.84760 1.06200 24.79400 6.30800 # O400 + 401 134 2 0.42380 0.82600 24.56300 5.37600 # H401 + 402 134 2 0.42380 0.19000 24.65200 6.67800 # H402 + 403 135 1 -0.84760 11.84500 4.80100 11.12900 # O403 + 404 135 2 0.42380 10.98000 4.34500 10.76500 # H404 + 405 135 2 0.42380 11.92900 5.63200 10.54100 # H405 + 406 136 1 -0.84760 6.61800 22.08500 7.40900 # O406 + 407 136 2 0.42380 6.09300 22.97200 7.17300 # H407 + 408 136 2 0.42380 6.00700 21.57900 6.77300 # H408 + 409 137 1 -0.84760 16.37500 17.74800 14.02800 # O409 + 410 137 2 0.42380 16.44400 18.21800 13.07300 # H410 + 411 137 2 0.42380 15.38000 17.35200 14.09800 # H411 + 412 138 1 -0.84760 14.02800 0.14900 8.99200 # O412 + 413 138 2 0.42380 14.01000 0.15700 10.00200 # H413 + 414 138 2 0.42380 13.33900 0.85800 8.75100 # H414 + 415 139 1 -0.84760 19.23800 27.39900 14.06700 # O415 + 416 139 2 0.42380 20.23700 27.14300 14.17200 # H416 + 417 139 2 0.42380 19.00400 28.32900 13.75900 # H417 + 418 140 1 -0.84760 12.14500 10.56400 1.61100 # O418 + 419 140 2 0.42380 11.37500 10.03100 1.35600 # H419 + 420 140 2 0.42380 12.73500 10.54900 0.79300 # H420 + 421 141 1 -0.84760 6.73400 2.81800 6.80400 # O421 + 422 141 2 0.42380 6.04500 2.72400 6.06900 # H422 + 423 141 2 0.42380 7.65700 3.04600 6.47000 # H423 + 424 142 1 -0.84760 22.08100 23.34800 11.46100 # O424 + 425 142 2 0.42380 21.44900 22.98900 10.74200 # H425 + 426 142 2 0.42380 22.07100 24.29500 11.75100 # H426 + 427 143 1 -0.84760 -0.99100 19.78800 11.83600 # O427 + 428 143 2 0.42380 -0.66600 18.93700 11.38700 # H428 + 429 143 2 0.42380 -0.64100 20.63300 11.27700 # H429 + 430 144 1 -0.84760 27.38400 19.96600 29.05800 # O430 + 431 144 2 0.42380 26.75100 19.42900 29.70600 # H431 + 432 144 2 0.42380 26.96000 19.77900 28.17800 # H432 + 433 145 1 -0.84760 25.28400 23.63700 29.75800 # O433 + 434 145 2 0.42380 24.96000 22.87800 30.33000 # H434 + 435 145 2 0.42380 24.64700 24.39500 29.67000 # H435 + 436 146 1 -0.84760 5.18400 13.82300 3.14900 # O436 + 437 146 2 0.42380 5.79400 14.03200 3.89700 # H437 + 438 146 2 0.42380 4.24500 13.85600 3.56600 # H438 + 439 147 1 -0.84760 12.96500 23.45100 0.42800 # O439 + 440 147 2 0.42380 13.25300 23.68300 1.36400 # H440 + 441 147 2 0.42380 12.98600 22.44300 0.18800 # H441 + 442 148 1 -0.84760 3.53300 9.15500 9.68400 # O442 + 443 148 2 0.42380 3.01800 9.94300 9.63500 # H443 + 444 148 2 0.42380 4.29800 9.31000 10.26700 # H444 + 445 149 1 -0.84760 28.25100 24.91700 24.44700 # O445 + 446 149 2 0.42380 27.37900 24.50200 24.43100 # H446 + 447 149 2 0.42380 28.25600 25.80300 23.96900 # H447 + 448 150 1 -0.84760 10.72700 2.36700 0.31000 # O448 + 449 150 2 0.42380 11.29000 2.93300 0.86400 # H449 + 450 150 2 0.42380 10.60300 1.60100 0.94600 # H450 + 451 151 1 -0.84760 28.15000 24.26400 1.63500 # O451 + 452 151 2 0.42380 28.58300 23.65800 0.88000 # H452 + 453 151 2 0.42380 28.49800 24.27500 2.57800 # H453 + 454 152 1 -0.84760 0.25300 15.93600 20.26800 # O454 + 455 152 2 0.42380 0.28800 16.26900 19.32800 # H455 + 456 152 2 0.42380 0.25400 14.92700 20.17800 # H456 + 457 153 1 -0.84760 24.94900 10.19400 19.81100 # O457 + 458 153 2 0.42380 25.08300 11.14900 19.29000 # H458 + 459 153 2 0.42380 25.92900 9.72800 19.87000 # H459 + 460 154 1 -0.84760 13.75400 28.21500 16.12700 # O460 + 461 154 2 0.42380 14.06700 28.71900 16.93600 # H461 + 462 154 2 0.42380 14.51200 28.22500 15.41900 # H462 + 463 155 1 -0.84760 7.07800 24.11600 18.01800 # O463 + 464 155 2 0.42380 7.09000 23.80600 17.08400 # H464 + 465 155 2 0.42380 6.13600 23.82500 18.26600 # H465 + 466 156 1 -0.84760 27.85600 19.17100 5.01000 # O466 + 467 156 2 0.42380 27.32200 19.89900 4.55900 # H467 + 468 156 2 0.42380 28.38500 19.53800 5.78900 # H468 + 469 157 1 -0.84760 20.62000 22.45300 29.96600 # O469 + 470 157 2 0.42380 20.91100 22.66600 30.86200 # H470 + 471 157 2 0.42380 20.42400 21.47400 30.08200 # H471 + 472 158 1 -0.84760 21.08700 4.56800 21.66900 # O472 + 473 158 2 0.42380 20.58700 4.15300 20.84400 # H473 + 474 158 2 0.42380 21.88400 4.06300 22.08300 # H474 + 475 159 1 -0.84760 15.06800 27.00000 8.00000 # O475 + 476 159 2 0.42380 16.03500 26.91000 8.40000 # H476 + 477 159 2 0.42380 15.16800 27.69600 7.21300 # H477 + 478 160 1 -0.84760 14.23200 10.03000 -0.52200 # O478 + 479 160 2 0.42380 13.77600 10.13200 -1.47600 # H479 + 480 160 2 0.42380 14.84100 9.20900 -0.57500 # H480 + 481 161 1 -0.84760 12.95200 7.21000 1.31400 # O481 + 482 161 2 0.42380 12.27200 7.81500 0.88100 # H482 + 483 161 2 0.42380 13.40600 7.71600 2.08100 # H483 + 484 162 1 -0.84760 22.41200 13.99100 4.68900 # O484 + 485 162 2 0.42380 21.52000 14.48700 4.62100 # H485 + 486 162 2 0.42380 22.76900 14.50200 5.49300 # H486 + 487 163 1 -0.84760 20.07900 8.68600 -0.60200 # O487 + 488 163 2 0.42380 19.81200 9.66100 -0.32600 # H488 + 489 163 2 0.42380 21.07400 8.50100 -0.62000 # H489 + 490 164 1 -0.84760 19.40500 3.95400 19.50300 # O490 + 491 164 2 0.42380 19.26400 4.92100 19.20300 # H491 + 492 164 2 0.42380 20.12100 3.71500 18.83700 # H492 + 493 165 1 -0.84760 22.82000 22.39200 5.52600 # O493 + 494 165 2 0.42380 22.93100 22.21200 4.54800 # H494 + 495 165 2 0.42380 21.83200 22.52500 5.60500 # H495 + 496 166 1 -0.84760 18.20800 2.98900 13.31600 # O496 + 497 166 2 0.42380 18.46600 3.96300 13.54700 # H497 + 498 166 2 0.42380 19.10000 2.48200 12.98400 # H498 + 499 167 1 -0.84760 12.98300 16.84500 17.12000 # O499 + 500 167 2 0.42380 13.53200 16.05800 17.01200 # H500 + 501 167 2 0.42380 12.94100 16.80900 18.15700 # H501 + 502 168 1 -0.84760 28.53200 11.25600 19.74200 # O502 + 503 168 2 0.42380 27.95500 11.67300 20.42700 # H503 + 504 168 2 0.42380 29.21600 11.99200 19.69500 # H504 + 505 169 1 -0.84760 8.23900 7.27400 24.66700 # O505 + 506 169 2 0.42380 8.18800 6.37900 24.20300 # H506 + 507 169 2 0.42380 7.39500 7.37600 25.12300 # H507 + 508 170 1 -0.84760 12.41600 1.34000 16.33800 # O508 + 509 170 2 0.42380 12.98100 1.63300 15.55000 # H509 + 510 170 2 0.42380 11.69600 0.62700 16.12300 # H510 + 511 171 1 -0.84760 14.44100 23.55200 5.37700 # O511 + 512 171 2 0.42380 13.91700 22.64700 5.08900 # H512 + 513 171 2 0.42380 13.90100 24.38200 4.97100 # H513 + 514 172 1 -0.84760 12.34700 8.67200 4.62100 # O514 + 515 172 2 0.42380 11.63100 8.10600 4.17100 # H515 + 516 172 2 0.42380 12.19400 9.60700 4.21400 # H516 + 517 173 1 -0.84760 21.73500 15.69400 14.61100 # O517 + 518 173 2 0.42380 21.52000 14.78400 14.25600 # H518 + 519 173 2 0.42380 20.84300 16.25900 14.41100 # H519 + 520 174 1 -0.84760 26.28500 15.55500 5.80200 # O520 + 521 174 2 0.42380 26.92100 14.91600 6.29300 # H521 + 522 174 2 0.42380 25.34200 15.42500 6.13300 # H522 + 523 175 1 -0.84760 0.67500 13.59000 5.58300 # O523 + 524 175 2 0.42380 0.91700 14.27500 6.28100 # H524 + 525 175 2 0.42380 1.48100 12.98000 5.49700 # H525 + 526 176 1 -0.84760 20.33500 13.51000 22.74200 # O526 + 527 176 2 0.42380 19.46500 14.01700 22.72500 # H527 + 528 176 2 0.42380 20.47400 12.96200 23.58900 # H528 + 529 177 1 -0.84760 2.31300 28.51700 19.81500 # O529 + 530 177 2 0.42380 2.01300 28.77000 20.71500 # H530 + 531 177 2 0.42380 1.41400 28.34100 19.44700 # H531 + 532 178 1 -0.84760 17.72900 10.27700 29.56200 # O532 + 533 178 2 0.42380 17.02900 10.58200 28.90200 # H533 + 534 178 2 0.42380 18.13500 11.06100 30.09800 # H534 + 535 179 1 -0.84760 20.90800 0.61300 24.55000 # O535 + 536 179 2 0.42380 20.06900 0.85600 24.97000 # H536 + 537 179 2 0.42380 21.51200 0.43400 25.38100 # H537 + 538 180 1 -0.84760 14.32000 12.90500 22.84800 # O538 + 539 180 2 0.42380 15.00600 12.09300 22.88700 # H539 + 540 180 2 0.42380 14.64800 13.61500 22.18900 # H540 + 541 181 1 -0.84760 17.51700 13.05600 20.10500 # O541 + 542 181 2 0.42380 17.37800 13.44500 21.06400 # H542 + 543 181 2 0.42380 17.77500 12.04900 20.18600 # H543 + 544 182 1 -0.84760 3.57500 24.92100 2.24600 # O544 + 545 182 2 0.42380 3.89100 23.94600 2.43100 # H545 + 546 182 2 0.42380 3.28600 25.02900 3.18900 # H546 + 547 183 1 -0.84760 0.04900 17.15900 25.41000 # O547 + 548 183 2 0.42380 -0.72300 17.23100 24.64300 # H548 + 549 183 2 0.42380 -0.10900 17.88300 26.14300 # H549 + 550 184 1 -0.84760 8.81400 28.47200 19.58400 # O550 + 551 184 2 0.42380 8.22100 28.47700 20.40300 # H551 + 552 184 2 0.42380 8.64600 29.21600 18.92700 # H552 + 553 185 1 -0.84760 26.32400 22.12200 20.94200 # O553 + 554 185 2 0.42380 25.96700 21.18200 20.85800 # H554 + 555 185 2 0.42380 25.46800 22.66900 20.99100 # H555 + 556 186 1 -0.84760 29.84500 6.84900 20.25200 # O556 + 557 186 2 0.42380 29.85200 7.58200 20.95000 # H557 + 558 186 2 0.42380 29.05600 6.26000 20.42900 # H558 + 559 187 1 -0.84760 15.72100 10.32200 9.03100 # O559 + 560 187 2 0.42380 15.43600 9.57500 9.60800 # H560 + 561 187 2 0.42380 16.48100 9.96400 8.45500 # H561 + 562 188 1 -0.84760 16.02400 27.53700 5.47600 # O562 + 563 188 2 0.42380 15.89400 28.57400 5.36000 # H563 + 564 188 2 0.42380 17.09100 27.44100 5.69100 # H564 + 565 189 1 -0.84760 27.45800 12.03000 15.51400 # O565 + 566 189 2 0.42380 27.26400 12.99000 15.88700 # H566 + 567 189 2 0.42380 26.53200 11.59100 15.36700 # H567 + 568 190 1 -0.84760 1.37300 -0.01600 10.70200 # O568 + 569 190 2 0.42380 0.57500 0.20500 11.24100 # H569 + 570 190 2 0.42380 2.08300 -0.23200 11.40500 # H570 + 571 191 1 -0.84760 5.14400 4.21600 2.65800 # O571 + 572 191 2 0.42380 5.90100 4.44800 3.27700 # H572 + 573 191 2 0.42380 4.76000 3.40200 3.10100 # H573 + 574 192 1 -0.84760 13.62400 15.89200 13.41800 # O574 + 575 192 2 0.42380 13.21500 14.97700 13.20500 # H575 + 576 192 2 0.42380 14.14000 15.69800 14.27200 # H576 + 577 193 1 -0.84760 18.02700 18.45900 22.76700 # O577 + 578 193 2 0.42380 17.89700 18.24600 21.77000 # H578 + 579 193 2 0.42380 17.55900 17.74400 23.29200 # H579 + 580 194 1 -0.84760 14.03500 6.72100 3.82200 # O580 + 581 194 2 0.42380 13.07200 6.52400 4.10400 # H581 + 582 194 2 0.42380 14.22500 7.76000 3.75200 # H582 + 583 195 1 -0.84760 2.70000 26.70500 7.58000 # O583 + 584 195 2 0.42380 1.95400 26.02000 7.52700 # H584 + 585 195 2 0.42380 2.31900 27.44700 6.99500 # H585 + 586 196 1 -0.84760 17.29000 2.40200 1.41600 # O586 + 587 196 2 0.42380 16.56800 1.69800 1.37200 # H587 + 588 196 2 0.42380 16.67500 3.13600 1.64500 # H588 + 589 197 1 -0.84760 7.17700 20.82500 4.18200 # O589 + 590 197 2 0.42380 6.56700 20.63700 3.36400 # H590 + 591 197 2 0.42380 6.70600 20.48200 5.01000 # H591 + 592 198 1 -0.84760 4.18400 1.70500 18.56600 # O592 + 593 198 2 0.42380 3.78400 2.57600 18.83800 # H593 + 594 198 2 0.42380 4.59200 1.51500 19.45500 # H594 + 595 199 1 -0.84760 18.38500 22.81800 15.15900 # O595 + 596 199 2 0.42380 19.16100 22.19800 14.80500 # H596 + 597 199 2 0.42380 18.92800 23.67600 15.39900 # H597 + 598 200 1 -0.84760 15.22900 1.69200 22.93500 # O598 + 599 200 2 0.42380 16.02600 1.07100 22.84900 # H599 + 600 200 2 0.42380 15.04700 2.20500 22.07000 # H600 + 601 201 1 -0.84760 9.24200 2.19500 20.13300 # O601 + 602 201 2 0.42380 9.04300 3.12300 19.68400 # H602 + 603 201 2 0.42380 9.18200 2.31400 21.15400 # H603 + 604 202 1 -0.84760 21.21100 0.75700 16.20800 # O604 + 605 202 2 0.42380 20.90300 1.03400 15.29800 # H605 + 606 202 2 0.42380 21.47400 1.70800 16.57100 # H606 + 607 203 1 -0.84760 25.26300 28.96100 3.71900 # O607 + 608 203 2 0.42380 25.43100 28.36300 2.94900 # H608 + 609 203 2 0.42380 25.45900 28.49800 4.62100 # H609 + 610 204 1 -0.84760 15.04500 19.70400 3.35100 # O610 + 611 204 2 0.42380 14.63900 18.78900 3.54500 # H611 + 612 204 2 0.42380 14.46700 20.51800 3.50700 # H612 + 613 205 1 -0.84760 13.49100 8.86700 17.02500 # O613 + 614 205 2 0.42380 13.34500 7.90100 17.19000 # H614 + 615 205 2 0.42380 12.54900 8.93000 16.57100 # H615 + 616 206 1 -0.84760 18.49100 8.02900 13.87300 # O616 + 617 206 2 0.42380 17.91200 8.63900 13.22400 # H617 + 618 206 2 0.42380 18.49600 7.14700 13.40200 # H618 + 619 207 1 -0.84760 18.45500 14.51300 0.43900 # O619 + 620 207 2 0.42380 19.26700 15.00700 0.61200 # H620 + 621 207 2 0.42380 18.25500 13.99200 1.24800 # H621 + 622 208 1 -0.84760 26.66300 14.98700 10.26100 # O622 + 623 208 2 0.42380 27.33900 14.54400 9.72300 # H623 + 624 208 2 0.42380 27.08300 15.84000 10.58400 # H624 + 625 209 1 -0.84760 0.79200 15.54100 14.80600 # O625 + 626 209 2 0.42380 0.60500 16.35400 15.34800 # H626 + 627 209 2 0.42380 1.59700 14.98900 14.96500 # H627 + 628 210 1 -0.84760 1.24800 0.86300 19.58500 # O628 + 629 210 2 0.42380 1.74900 0.15400 19.04400 # H629 + 630 210 2 0.42380 2.03000 1.40800 19.93700 # H630 + 631 211 1 -0.84760 17.41700 16.44900 16.91800 # O631 + 632 211 2 0.42380 16.58900 16.94000 17.26700 # H632 + 633 211 2 0.42380 17.15400 15.56300 16.52200 # H633 + 634 212 1 -0.84760 12.61100 -0.74700 0.78800 # O634 + 635 212 2 0.42380 12.83900 -1.64100 0.34800 # H635 + 636 212 2 0.42380 12.99300 -0.02800 0.20700 # H636 + 637 213 1 -0.84760 8.58700 15.73300 6.99100 # O637 + 638 213 2 0.42380 8.15000 15.39900 7.84600 # H638 + 639 213 2 0.42380 7.96000 16.26500 6.44500 # H639 + 640 214 1 -0.84760 0.10100 8.84700 9.14300 # O640 + 641 214 2 0.42380 -0.12000 9.30800 8.23200 # H641 + 642 214 2 0.42380 0.69600 8.07800 9.00700 # H642 + 643 215 1 -0.84760 7.83200 19.40900 21.52800 # O643 + 644 215 2 0.42380 8.82700 19.74400 21.54000 # H644 + 645 215 2 0.42380 7.43400 19.98000 22.32400 # H645 + 646 216 1 -0.84760 24.88300 29.08000 22.32600 # O646 + 647 216 2 0.42380 24.29100 28.30800 22.06700 # H647 + 648 216 2 0.42380 25.66200 28.58900 22.73400 # H648 + 649 217 1 -0.84760 24.14600 8.41900 28.35000 # O649 + 650 217 2 0.42380 23.90300 8.83400 29.30300 # H650 + 651 217 2 0.42380 23.28300 8.15100 27.78300 # H651 + 652 218 1 -0.84760 2.71000 17.46700 19.40600 # O652 + 653 218 2 0.42380 1.81500 17.24400 19.87200 # H653 + 654 218 2 0.42380 3.27000 16.66600 19.10500 # H654 + 655 219 1 -0.84760 12.08300 1.09900 6.91900 # O655 + 656 219 2 0.42380 12.36500 1.00800 5.93100 # H656 + 657 219 2 0.42380 11.27700 0.50000 6.95900 # H657 + 658 220 1 -0.84760 28.61200 16.27300 0.63700 # O658 + 659 220 2 0.42380 28.64200 16.41000 -0.42900 # H659 + 660 220 2 0.42380 27.66700 16.38600 0.82000 # H660 + 661 221 1 -0.84760 17.84500 10.35800 3.96000 # O661 + 662 221 2 0.42380 18.37600 9.84700 3.27200 # H662 + 663 221 2 0.42380 17.85400 11.36300 3.75400 # H663 + 664 222 1 -0.84760 16.54600 5.94400 19.90700 # O664 + 665 222 2 0.42380 15.56700 5.95500 20.04000 # H665 + 666 222 2 0.42380 16.76000 5.76200 18.98500 # H666 + 667 223 1 -0.84760 4.76800 14.87500 19.66700 # O667 + 668 223 2 0.42380 5.24500 14.35600 18.98900 # H668 + 669 223 2 0.42380 5.00700 14.59300 20.60100 # H669 + 670 224 1 -0.84760 8.43700 26.26700 11.43900 # O670 + 671 224 2 0.42380 7.88700 26.77400 12.09200 # H671 + 672 224 2 0.42380 9.34900 26.38400 11.65300 # H672 + 673 225 1 -0.84760 11.14500 19.49700 12.30900 # O673 + 674 225 2 0.42380 10.87400 19.72900 11.26700 # H674 + 675 225 2 0.42380 10.49900 20.14800 12.82300 # H675 + 676 226 1 -0.84760 7.26600 12.28000 9.35500 # O676 + 677 226 2 0.42380 8.30600 12.10900 9.33800 # H677 + 678 226 2 0.42380 7.02700 11.30500 9.55000 # H678 + 679 227 1 -0.84760 13.84500 4.44700 12.97500 # O679 + 680 227 2 0.42380 13.17600 4.57100 13.69400 # H680 + 681 227 2 0.42380 13.26800 4.78100 12.26700 # H681 + 682 228 1 -0.84760 20.55100 18.83200 2.05500 # O682 + 683 228 2 0.42380 21.07300 18.02000 1.61900 # H683 + 684 228 2 0.42380 21.19500 19.63100 2.07600 # H684 + 685 229 1 -0.84760 14.23000 17.12400 4.30100 # O685 + 686 229 2 0.42380 14.08000 16.88000 5.37800 # H686 + 687 229 2 0.42380 14.54000 16.21400 3.84000 # H687 + 688 230 1 -0.84760 26.33600 20.79200 15.28500 # O688 + 689 230 2 0.42380 26.85300 19.93300 15.49500 # H689 + 690 230 2 0.42380 25.33100 20.70500 15.65100 # H690 + 691 231 1 -0.84760 1.50800 24.66300 11.21700 # O691 + 692 231 2 0.42380 1.28100 23.70300 11.23800 # H692 + 693 231 2 0.42380 0.99500 25.08100 10.41200 # H693 + 694 232 1 -0.84760 27.31800 3.87100 4.07400 # O694 + 695 232 2 0.42380 26.88700 4.80700 3.98200 # H695 + 696 232 2 0.42380 28.30400 4.07500 3.91500 # H696 + 697 233 1 -0.84760 5.79500 1.18200 23.83900 # O697 + 698 233 2 0.42380 6.32100 0.52000 23.26500 # H698 + 699 233 2 0.42380 5.98300 0.97000 24.82700 # H699 + 700 234 1 -0.84760 16.77600 21.32800 17.80500 # O700 + 701 234 2 0.42380 16.36100 20.57400 18.36000 # H701 + 702 234 2 0.42380 16.67300 21.14200 16.82600 # H702 + 703 235 1 -0.84760 20.02700 15.39000 25.15800 # O703 + 704 235 2 0.42380 20.28900 15.71600 26.05600 # H704 + 705 235 2 0.42380 19.97300 16.10800 24.42100 # H705 + 706 236 1 -0.84760 13.95400 5.18600 18.25200 # O706 + 707 236 2 0.42380 13.30500 4.41500 18.35000 # H707 + 708 236 2 0.42380 14.61300 4.73700 17.60200 # H708 + 709 237 1 -0.84760 24.35500 23.90700 15.00000 # O709 + 710 237 2 0.42380 24.29100 23.18100 14.25900 # H710 + 711 237 2 0.42380 23.98000 24.80500 14.76100 # H711 + 712 238 1 -0.84760 3.90100 27.25500 28.80500 # O712 + 713 238 2 0.42380 4.67800 27.81800 28.66400 # H713 + 714 238 2 0.42380 3.09100 27.67000 28.47200 # H714 + 715 239 1 -0.84760 16.57600 21.68400 25.60700 # O715 + 716 239 2 0.42380 16.06100 22.35300 24.98200 # H716 + 717 239 2 0.42380 15.94100 21.09800 26.11700 # H717 + 718 240 1 -0.84760 7.58300 17.01700 28.05600 # O718 + 719 240 2 0.42380 7.26900 16.56200 27.14400 # H719 + 720 240 2 0.42380 7.01900 17.03500 28.94900 # H720 + 721 241 1 -0.84760 21.80100 19.55400 -0.55100 # O721 + 722 241 2 0.42380 22.56300 20.00900 -1.05400 # H722 + 723 241 2 0.42380 21.04200 19.66900 -1.12700 # H723 + 724 242 1 -0.84760 11.93600 26.16500 8.75000 # O724 + 725 242 2 0.42380 12.22500 25.69700 7.91000 # H725 + 726 242 2 0.42380 12.48100 25.67400 9.46100 # H726 + 727 243 1 -0.84760 24.78600 16.49500 21.39500 # O727 + 728 243 2 0.42380 25.51200 17.20000 21.44300 # H728 + 729 243 2 0.42380 23.94700 16.91800 21.63000 # H729 + 730 244 1 -0.84760 3.50900 13.39600 23.81400 # O730 + 731 244 2 0.42380 4.27000 13.86100 24.41900 # H731 + 732 244 2 0.42380 4.17400 13.00200 23.09100 # H732 + 733 245 1 -0.84760 3.99900 7.64700 26.09300 # O733 + 734 245 2 0.42380 3.20700 7.98200 25.55400 # H734 + 735 245 2 0.42380 4.49200 7.02900 25.41300 # H735 + 736 246 1 -0.84760 3.63900 18.61900 0.59400 # O736 + 737 246 2 0.42380 3.58800 17.70200 1.06800 # H737 + 738 246 2 0.42380 4.38500 19.08900 1.14800 # H738 + 739 247 1 -0.84760 9.93300 24.42200 14.24800 # O739 + 740 247 2 0.42380 9.85900 23.58500 13.65200 # H740 + 741 247 2 0.42380 10.29100 25.28000 13.75100 # H741 + 742 248 1 -0.84760 22.78300 16.98000 10.33400 # O742 + 743 248 2 0.42380 23.14700 18.00000 10.38200 # H743 + 744 248 2 0.42380 23.13600 16.33100 11.02700 # H744 + 745 249 1 -0.84760 13.75100 1.02900 4.36700 # O745 + 746 249 2 0.42380 14.40500 1.74900 4.74500 # H746 + 747 249 2 0.42380 13.79800 1.33000 3.41000 # H747 + 748 250 1 -0.84760 16.52300 15.46700 29.56300 # O748 + 749 250 2 0.42380 17.30400 15.15000 30.08700 # H749 + 750 250 2 0.42380 15.77700 15.33700 30.25500 # H750 + 751 251 1 -0.84760 7.67200 15.32000 9.68800 # O751 + 752 251 2 0.42380 8.27100 14.50600 9.57200 # H752 + 753 251 2 0.42380 7.26500 14.97900 10.54300 # H753 + 754 252 1 -0.84760 6.73400 22.83300 21.74700 # O754 + 755 252 2 0.42380 7.33500 22.75500 20.95200 # H755 + 756 252 2 0.42380 5.96400 22.17600 21.58500 # H756 + 757 253 1 -0.84760 28.66600 24.11400 27.25200 # O757 + 758 253 2 0.42380 27.71300 23.88100 27.24200 # H758 + 759 253 2 0.42380 28.89400 24.55400 26.37100 # H759 + 760 254 1 -0.84760 26.62600 29.42200 28.66300 # O760 + 761 254 2 0.42380 25.96300 30.18600 28.63900 # H761 + 762 254 2 0.42380 26.07700 28.84600 29.29100 # H762 + 763 255 1 -0.84760 0.35000 28.67800 21.88200 # O763 + 764 255 2 0.42380 -0.61400 28.49300 22.10200 # H764 + 765 255 2 0.42380 0.71500 27.78300 22.11200 # H765 + 766 256 1 -0.84760 13.47000 24.34000 12.88700 # O766 + 767 256 2 0.42380 12.85500 23.61900 13.27400 # H767 + 768 256 2 0.42380 14.36400 24.22600 13.39700 # H768 + 769 257 1 -0.84760 20.34800 10.80800 6.75400 # O769 + 770 257 2 0.42380 21.27500 11.06400 6.42500 # H770 + 771 257 2 0.42380 19.68700 10.52300 6.07000 # H771 + 772 258 1 -0.84760 20.78700 -0.46400 11.51100 # O772 + 773 258 2 0.42380 20.27100 -0.28600 10.67000 # H773 + 774 258 2 0.42380 20.39300 0.20300 12.08400 # H774 + 775 259 1 -0.84760 26.29300 1.73100 16.35100 # O775 + 776 259 2 0.42380 26.54100 2.29000 17.11200 # H776 + 777 259 2 0.42380 27.03300 1.92500 15.72700 # H777 + 778 260 1 -0.84760 10.51000 5.51600 5.06600 # O778 + 779 260 2 0.42380 9.74700 4.89000 5.30200 # H779 + 780 260 2 0.42380 10.10300 6.19800 4.43700 # H780 + 781 261 1 -0.84760 7.03700 0.34600 28.66100 # O781 + 782 261 2 0.42380 7.74000 -0.34500 29.00900 # H782 + 783 261 2 0.42380 6.17800 -0.27900 28.71000 # H783 + 784 262 1 -0.84760 25.07900 11.33600 14.72800 # O784 + 785 262 2 0.42380 25.02600 10.82200 13.80600 # H785 + 786 262 2 0.42380 24.09800 11.64100 14.83400 # H786 + 787 263 1 -0.84760 9.44600 15.10300 3.13100 # O787 + 788 263 2 0.42380 9.72700 15.64800 2.34300 # H788 + 789 263 2 0.42380 8.51700 14.82100 2.82600 # H789 + 790 264 1 -0.84760 5.46300 18.74100 25.34700 # O790 + 791 264 2 0.42380 4.44600 18.97500 25.39300 # H791 + 792 264 2 0.42380 5.53900 17.73800 25.29600 # H792 + 793 265 1 -0.84760 5.50600 21.82300 -0.10800 # O793 + 794 265 2 0.42380 5.80500 22.77800 0.12400 # H794 + 795 265 2 0.42380 6.27700 21.17000 -0.14800 # H795 + 796 266 1 -0.84760 27.88000 19.46000 1.95200 # O796 + 797 266 2 0.42380 28.65700 19.78600 2.50700 # H797 + 798 266 2 0.42380 28.17900 18.89800 1.14400 # H798 + 799 267 1 -0.84760 12.35600 11.97700 4.46700 # O799 + 800 267 2 0.42380 13.03300 12.66500 4.21900 # H800 + 801 267 2 0.42380 12.80600 11.10300 4.25800 # H801 + 802 268 1 -0.84760 8.60200 7.28900 27.67900 # O802 + 803 268 2 0.42380 9.23400 8.09600 27.78600 # H803 + 804 268 2 0.42380 7.68200 7.66600 27.42600 # H804 + 805 269 1 -0.84760 21.65600 22.83600 27.51100 # O805 + 806 269 2 0.42380 20.93800 22.65300 28.20100 # H806 + 807 269 2 0.42380 22.06400 23.73300 27.79100 # H807 + 808 270 1 -0.84760 6.79500 15.28800 13.91400 # O808 + 809 270 2 0.42380 7.07600 14.91500 13.01700 # H809 + 810 270 2 0.42380 7.64200 15.16900 14.42100 # H810 + 811 271 1 -0.84760 12.64500 14.94700 2.61200 # O811 + 812 271 2 0.42380 11.98400 14.93400 1.79800 # H812 + 813 271 2 0.42380 12.50400 15.78800 3.01800 # H813 + 814 272 1 -0.84760 8.83000 13.27800 17.89900 # O814 + 815 272 2 0.42380 8.79600 13.47000 16.91900 # H815 + 816 272 2 0.42380 8.35400 14.09700 18.28200 # H816 + 817 273 1 -0.84760 7.36400 28.18200 29.66300 # O817 + 818 273 2 0.42380 7.16700 27.28100 30.10900 # H818 + 819 273 2 0.42380 6.58700 28.71500 30.02900 # H819 + 820 274 1 -0.84760 11.41400 15.36700 5.37700 # O820 + 821 274 2 0.42380 11.00600 15.34100 4.47400 # H821 + 822 274 2 0.42380 11.83300 14.46500 5.56600 # H822 + 823 275 1 -0.84760 7.50000 6.68900 7.27700 # O823 + 824 275 2 0.42380 7.03700 6.96300 8.11200 # H824 + 825 275 2 0.42380 7.58800 5.62800 7.34100 # H825 + 826 276 1 -0.84760 18.35000 21.26300 7.02600 # O826 + 827 276 2 0.42380 17.47500 21.76600 7.07300 # H827 + 828 276 2 0.42380 18.88500 21.62400 6.23600 # H828 + 829 277 1 -0.84760 7.05400 18.76100 16.03800 # O829 + 830 277 2 0.42380 7.99900 19.08000 16.04100 # H830 + 831 277 2 0.42380 6.72900 18.90100 15.03800 # H831 + 832 278 1 -0.84760 26.64600 -0.00100 12.35200 # O832 + 833 278 2 0.42380 27.50600 0.08800 12.98300 # H833 + 834 278 2 0.42380 26.75300 -0.86100 11.80100 # H834 + 835 279 1 -0.84760 11.29900 2.98400 18.61200 # O835 + 836 279 2 0.42380 10.33400 3.12200 19.00900 # H836 + 837 279 2 0.42380 11.56100 2.04800 18.91200 # H837 + 838 280 1 -0.84760 14.25000 29.32200 3.30900 # O838 + 839 280 2 0.42380 14.47600 29.58400 2.31600 # H839 + 840 280 2 0.42380 14.00300 30.16000 3.83400 # H840 + 841 281 1 -0.84760 2.88800 15.57300 6.31500 # O841 + 842 281 2 0.42380 3.27900 16.03900 7.15900 # H842 + 843 281 2 0.42380 3.69500 15.58300 5.59100 # H843 + 844 282 1 -0.84760 14.10700 27.19700 0.95500 # O844 + 845 282 2 0.42380 13.09600 27.01300 0.93800 # H845 + 846 282 2 0.42380 14.50500 26.49800 0.34800 # H846 + 847 283 1 -0.84760 29.93100 26.37900 12.24200 # O847 + 848 283 2 0.42380 30.61700 25.63200 12.21600 # H848 + 849 283 2 0.42380 29.00900 26.00000 12.44300 # H849 + 850 284 1 -0.84760 20.41800 -0.23900 1.17700 # O850 + 851 284 2 0.42380 21.43400 -0.19600 1.28600 # H851 + 852 284 2 0.42380 20.00400 0.53800 0.63300 # H852 + 853 285 1 -0.84760 3.20000 28.88300 4.45300 # O853 + 854 285 2 0.42380 3.24400 29.45200 5.22400 # H854 + 855 285 2 0.42380 3.93100 29.20000 3.78600 # H855 + 856 286 1 -0.84760 -0.96000 10.89700 2.95300 # O856 + 857 286 2 0.42380 -1.58100 10.26700 2.47900 # H857 + 858 286 2 0.42380 -0.13200 11.06300 2.48500 # H858 + 859 287 1 -0.84760 29.44500 1.96000 28.74200 # O859 + 860 287 2 0.42380 29.30000 2.55700 27.88200 # H860 + 861 287 2 0.42380 29.30700 2.41700 29.62200 # H861 + 862 288 1 -0.84760 6.86600 18.53900 8.97700 # O862 + 863 288 2 0.42380 6.36800 19.37400 8.91900 # H863 + 864 288 2 0.42380 6.93200 18.25100 9.96800 # H864 + 865 289 1 -0.84760 9.40600 25.21400 25.61800 # O865 + 866 289 2 0.42380 9.40600 25.19900 26.57500 # H866 + 867 289 2 0.42380 8.82900 25.94500 25.19200 # H867 + 868 290 1 -0.84760 23.07700 5.97600 14.12900 # O868 + 869 290 2 0.42380 23.87300 5.33000 13.96900 # H869 + 870 290 2 0.42380 23.44400 6.75000 14.68600 # H870 + 871 291 1 -0.84760 21.16600 22.07300 14.37800 # O871 + 872 291 2 0.42380 21.31800 22.99100 13.95800 # H872 + 873 291 2 0.42380 21.11500 21.35300 13.66200 # H873 + 874 292 1 -0.84760 2.10300 14.99800 -0.46700 # O874 + 875 292 2 0.42380 1.72700 14.12300 -0.78300 # H875 + 876 292 2 0.42380 1.43100 15.15900 0.30500 # H876 + 877 293 1 -0.84760 8.38900 17.59500 4.31200 # O877 + 878 293 2 0.42380 8.91100 16.81800 4.64300 # H878 + 879 293 2 0.42380 8.98400 18.08900 3.63000 # H879 + 880 294 1 -0.84760 18.42900 27.29600 5.48400 # O880 + 881 294 2 0.42380 19.42900 27.07200 5.80500 # H881 + 882 294 2 0.42380 18.44000 27.08100 4.50600 # H882 + 883 295 1 -0.84760 5.28600 16.08800 23.52700 # O883 + 884 295 2 0.42380 5.08800 16.61300 22.63400 # H884 + 885 295 2 0.42380 5.91600 16.69700 24.08900 # H885 + 886 296 1 -0.84760 22.21500 11.50700 11.66000 # O886 + 887 296 2 0.42380 23.23100 11.37700 11.71900 # H887 + 888 296 2 0.42380 21.95700 12.52000 11.73500 # H888 + 889 297 1 -0.84760 23.78400 2.26600 17.45100 # O889 + 890 297 2 0.42380 24.25800 1.87800 16.63300 # H890 + 891 297 2 0.42380 24.18000 3.13900 17.75600 # H891 + 892 298 1 -0.84760 10.09800 27.30300 3.37700 # O892 + 893 298 2 0.42380 10.32900 28.30300 3.50800 # H893 + 894 298 2 0.42380 9.26600 27.23200 2.81500 # H894 + 895 299 1 -0.84760 27.03800 14.30500 1.95500 # O895 + 896 299 2 0.42380 27.93500 14.71000 2.17500 # H896 + 897 299 2 0.42380 27.00900 13.49900 2.52800 # H897 + 898 300 1 -0.84760 3.36300 12.13500 19.58000 # O898 + 899 300 2 0.42380 3.96700 12.44100 20.31600 # H899 + 900 300 2 0.42380 3.46300 12.66700 18.69400 # H900 + 901 301 1 -0.84760 7.72000 7.48400 13.41300 # O901 + 902 301 2 0.42380 6.85900 7.04600 13.17400 # H902 + 903 301 2 0.42380 7.49500 8.46700 13.48200 # H903 + 904 302 1 -0.84760 15.09900 24.83500 27.68500 # O904 + 905 302 2 0.42380 15.50500 24.24700 28.42200 # H905 + 906 302 2 0.42380 14.13100 24.96300 27.90200 # H906 + 907 303 1 -0.84760 1.15900 12.92500 25.01400 # O907 + 908 303 2 0.42380 0.46100 12.64100 24.31800 # H908 + 909 303 2 0.42380 1.99400 12.37900 24.70200 # H909 + 910 304 1 -0.84760 11.69100 28.58700 17.76100 # O910 + 911 304 2 0.42380 12.03600 28.82800 16.81000 # H911 + 912 304 2 0.42380 11.25100 27.68000 17.68600 # H912 + 913 305 1 -0.84760 13.08000 28.33900 12.69100 # O913 + 914 305 2 0.42380 13.19900 27.38200 12.38900 # H914 + 915 305 2 0.42380 13.90500 28.71700 12.19500 # H915 + 916 306 1 -0.84760 20.10500 25.56600 21.26000 # O916 + 917 306 2 0.42380 19.87100 25.64200 20.19200 # H917 + 918 306 2 0.42380 19.48700 24.83800 21.61800 # H918 + 919 307 1 -0.84760 8.55100 12.04000 3.45200 # O919 + 920 307 2 0.42380 8.69600 12.98800 3.84800 # H920 + 921 307 2 0.42380 9.40800 11.52000 3.29700 # H921 + 922 308 1 -0.84760 15.03500 17.08200 19.02600 # O922 + 923 308 2 0.42380 15.80600 16.84700 18.48000 # H923 + 924 308 2 0.42380 15.26100 17.64800 19.75700 # H924 + 925 309 1 -0.84760 4.23500 10.48300 16.44300 # O925 + 926 309 2 0.42380 5.10200 10.19500 16.91000 # H926 + 927 309 2 0.42380 3.70600 9.60100 16.63900 # H927 + 928 310 1 -0.84760 29.07000 27.60700 14.61500 # O928 + 929 310 2 0.42380 28.95400 26.92600 15.29300 # H929 + 930 310 2 0.42380 29.37400 27.20200 13.76400 # H930 + 931 311 1 -0.84760 15.33700 18.69300 6.76700 # O931 + 932 311 2 0.42380 16.14700 18.23800 6.46600 # H932 + 933 311 2 0.42380 14.62200 18.99200 6.12800 # H933 + 934 312 1 -0.84760 22.97900 18.23400 23.67500 # O934 + 935 312 2 0.42380 22.66200 17.35600 23.20300 # H935 + 936 312 2 0.42380 22.95000 17.75400 24.56600 # H936 + 937 313 1 -0.84760 24.79800 10.88400 12.01000 # O937 + 938 313 2 0.42380 25.17800 11.54100 12.72900 # H938 + 939 313 2 0.42380 25.52600 10.71300 11.34900 # H939 + 940 314 1 -0.84760 7.72800 3.02500 22.95200 # O940 + 941 314 2 0.42380 7.65300 2.53200 23.83700 # H941 + 942 314 2 0.42380 7.45000 2.31600 22.31200 # H942 + 943 315 1 -0.84760 7.45000 0.58000 21.64100 # O943 + 944 315 2 0.42380 7.98500 0.31800 20.82300 # H944 + 945 315 2 0.42380 6.87900 -0.33000 21.70100 # H945 + 946 316 1 -0.84760 14.89500 15.51400 21.60900 # O946 + 947 316 2 0.42380 15.45200 16.34100 21.44600 # H947 + 948 316 2 0.42380 14.80800 15.21400 20.66100 # H948 + 949 317 1 -0.84760 16.88600 7.36400 8.30200 # O949 + 950 317 2 0.42380 16.06400 7.10400 7.87100 # H950 + 951 317 2 0.42380 17.61000 7.00500 7.70700 # H951 + 952 318 1 -0.84760 24.01500 10.35700 -0.67600 # O952 + 953 318 2 0.42380 24.22600 11.33500 -0.95900 # H953 + 954 318 2 0.42380 24.72100 10.11000 0.04100 # H954 + 955 319 1 -0.84760 16.52900 -0.79400 5.02600 # O955 + 956 319 2 0.42380 15.75700 -0.94200 4.35400 # H956 + 957 319 2 0.42380 17.35200 -0.67400 4.46300 # H957 + 958 320 1 -0.84760 7.85100 8.52700 20.99800 # O958 + 959 320 2 0.42380 8.34000 9.18900 21.59800 # H959 + 960 320 2 0.42380 7.44200 9.20700 20.42300 # H960 + 961 321 1 -0.84760 23.76700 19.80700 27.82800 # O961 + 962 321 2 0.42380 24.40800 20.44300 28.28000 # H962 + 963 321 2 0.42380 24.11000 19.80100 26.85900 # H963 + 964 322 1 -0.84760 5.43500 2.46800 11.12500 # O964 + 965 322 2 0.42380 4.73200 2.69100 11.81900 # H965 + 966 322 2 0.42380 5.34400 1.41000 10.87000 # H966 + 967 323 1 -0.84760 17.50600 29.21200 18.78000 # O967 + 968 323 2 0.42380 18.33200 29.41100 18.18900 # H968 + 969 323 2 0.42380 17.88500 29.41700 19.65600 # H969 + 970 324 1 -0.84760 24.19600 23.30400 25.38900 # O970 + 971 324 2 0.42380 24.00200 23.88900 26.15400 # H971 + 972 324 2 0.42380 24.64000 24.00300 24.75200 # H972 + 973 325 1 -0.84760 29.26600 8.08600 3.69900 # O973 + 974 325 2 0.42380 28.31500 8.14300 4.10900 # H974 + 975 325 2 0.42380 29.48200 7.20400 4.19300 # H975 + 976 326 1 -0.84760 15.93000 21.73000 10.78600 # O976 + 977 326 2 0.42380 15.61600 22.15200 11.64400 # H977 + 978 326 2 0.42380 16.91700 21.86400 10.65100 # H978 + 979 327 1 -0.84760 29.24600 28.17200 7.94900 # O979 + 980 327 2 0.42380 28.26200 28.45300 7.92100 # H980 + 981 327 2 0.42380 29.75000 28.70900 8.61600 # H981 + 982 328 1 -0.84760 24.84300 26.44100 10.97300 # O982 + 983 328 2 0.42380 24.85600 25.60700 10.37700 # H983 + 984 328 2 0.42380 24.38700 25.96700 11.80500 # H984 + 985 329 1 -0.84760 20.21700 23.06900 18.59300 # O985 + 986 329 2 0.42380 19.52300 22.36400 18.53700 # H986 + 987 329 2 0.42380 20.51900 23.05000 19.52800 # H987 + 988 330 1 -0.84760 20.38700 0.83200 29.45000 # O988 + 989 330 2 0.42380 21.14000 0.19900 29.11800 # H989 + 990 330 2 0.42380 19.56100 0.73400 28.88200 # H990 + 991 331 1 -0.84760 25.26800 10.20400 9.04900 # O991 + 992 331 2 0.42380 25.80200 9.35600 9.28400 # H992 + 993 331 2 0.42380 25.86700 10.67200 8.30300 # H993 + 994 332 1 -0.84760 20.71700 3.35500 16.84700 # O994 + 995 332 2 0.42380 21.56800 3.97200 16.97900 # H995 + 996 332 2 0.42380 20.63900 3.43900 15.87100 # H996 + 997 333 1 -0.84760 17.93100 1.63100 18.09300 # O997 + 998 333 2 0.42380 18.87100 1.99400 18.26300 # H998 + 999 333 2 0.42380 17.95900 1.84200 17.04600 # H999 + 1000 334 1 -0.84760 22.75800 29.11600 13.69100 # O1000 + 1001 334 2 0.42380 23.29100 29.73400 14.37200 # H1001 + 1002 334 2 0.42380 22.72300 29.65400 12.84700 # H1002 + 1003 335 1 -0.84760 5.20200 9.38600 29.21700 # O1003 + 1004 335 2 0.42380 4.26800 9.07500 29.46600 # H1004 + 1005 335 2 0.42380 5.87200 8.65100 29.51000 # H1005 + 1006 336 1 -0.84760 28.49100 3.00300 0.80300 # O1006 + 1007 336 2 0.42380 29.04200 2.30600 1.27400 # H1007 + 1008 336 2 0.42380 27.98500 3.55400 1.49300 # H1008 + 1009 337 1 -0.84760 9.66100 9.85800 12.27100 # O1009 + 1010 337 2 0.42380 9.79900 10.88000 12.24300 # H1010 + 1011 337 2 0.42380 10.12200 9.43700 11.51200 # H1011 + 1012 338 1 -0.84760 30.11800 19.36200 28.74500 # O1012 + 1013 338 2 0.42380 30.20200 18.72800 27.94500 # H1013 + 1014 338 2 0.42380 29.11500 19.37800 28.93800 # H1014 + 1015 339 1 -0.84760 20.70400 16.06700 3.88200 # O1015 + 1016 339 2 0.42380 21.36600 15.80000 3.10700 # H1016 + 1017 339 2 0.42380 20.46000 16.94400 3.46600 # H1017 + 1018 340 1 -0.84760 8.01600 19.14400 26.06200 # O1018 + 1019 340 2 0.42380 7.53500 19.31700 26.95300 # H1019 + 1020 340 2 0.42380 7.22000 18.86000 25.50600 # H1020 + 1021 341 1 -0.84760 11.98500 14.63800 22.91000 # O1021 + 1022 341 2 0.42380 12.47500 13.80900 23.08200 # H1022 + 1023 341 2 0.42380 11.50800 14.51300 22.00700 # H1023 + 1024 342 1 -0.84760 17.50100 12.14200 11.47000 # O1024 + 1025 342 2 0.42380 17.41100 12.56400 12.38600 # H1025 + 1026 342 2 0.42380 16.89500 12.58900 10.80200 # H1026 + 1027 343 1 -0.84760 12.78500 11.75100 25.70700 # O1027 + 1028 343 2 0.42380 12.36000 10.93700 26.23100 # H1028 + 1029 343 2 0.42380 12.22700 12.09800 24.94100 # H1029 + 1030 344 1 -0.84760 0.27100 24.57400 0.56700 # O1030 + 1031 344 2 0.42380 -0.54700 24.92000 0.04400 # H1031 + 1032 344 2 0.42380 0.50700 23.61800 0.19100 # H1032 + 1033 345 1 -0.84760 -0.57600 26.36400 19.94200 # O1033 + 1034 345 2 0.42380 -0.41900 25.31800 19.96900 # H1034 + 1035 345 2 0.42380 -0.85300 26.64200 20.85900 # H1035 + 1036 346 1 -0.84760 12.47900 9.73900 14.02500 # O1036 + 1037 346 2 0.42380 12.47700 9.94500 13.05600 # H1037 + 1038 346 2 0.42380 11.82600 10.37200 14.46100 # H1038 + 1039 347 1 -0.84760 16.60000 4.07000 29.89800 # O1039 + 1040 347 2 0.42380 15.72400 4.05800 29.31500 # H1040 + 1041 347 2 0.42380 17.10600 3.20200 29.89500 # H1041 + 1042 348 1 -0.84760 4.20800 23.49800 6.84200 # O1042 + 1043 348 2 0.42380 4.26800 24.43100 7.16900 # H1043 + 1044 348 2 0.42380 3.29200 23.07200 7.02000 # H1044 + 1045 349 1 -0.84760 9.50300 10.75300 27.56700 # O1045 + 1046 349 2 0.42380 8.81500 11.47300 27.41100 # H1046 + 1047 349 2 0.42380 9.72600 10.65600 28.55900 # H1047 + 1048 350 1 -0.84760 20.86900 21.37400 25.64300 # O1048 + 1049 350 2 0.42380 21.20700 22.09800 26.36100 # H1049 + 1050 350 2 0.42380 20.14900 21.87100 25.18600 # H1050 + 1051 351 1 -0.84760 13.25500 24.15700 10.13400 # O1051 + 1052 351 2 0.42380 13.45700 24.04700 11.14900 # H1052 + 1053 351 2 0.42380 12.81900 23.32400 9.75500 # H1053 + 1054 352 1 -0.84760 23.20100 19.39400 7.34300 # O1054 + 1055 352 2 0.42380 23.05800 20.40000 7.14300 # H1055 + 1056 352 2 0.42380 24.19600 19.23200 7.50400 # H1056 + 1057 353 1 -0.84760 14.79900 9.60300 3.02500 # O1057 + 1058 353 2 0.42380 15.68500 9.78900 3.46700 # H1058 + 1059 353 2 0.42380 14.82600 10.33200 2.28600 # H1059 + 1060 354 1 -0.84760 6.62700 24.26700 1.11000 # O1060 + 1061 354 2 0.42380 7.30600 23.51600 1.20300 # H1061 + 1062 354 2 0.42380 7.12300 24.93000 0.46800 # H1062 + 1063 355 1 -0.84760 22.06800 8.84400 12.59900 # O1063 + 1064 355 2 0.42380 21.91500 8.13000 13.31000 # H1064 + 1065 355 2 0.42380 21.47800 9.66900 12.76000 # H1065 + 1066 356 1 -0.84760 18.88100 18.17900 11.83700 # O1066 + 1067 356 2 0.42380 19.72500 18.78800 11.68400 # H1067 + 1068 356 2 0.42380 18.46300 18.44000 10.94700 # H1068 + 1069 357 1 -0.84760 18.86900 28.64200 22.10200 # O1069 + 1070 357 2 0.42380 19.12900 28.88200 21.12300 # H1070 + 1071 357 2 0.42380 18.22100 29.39800 22.32900 # H1071 + 1072 358 1 -0.84760 10.61300 20.02400 24.94600 # O1072 + 1073 358 2 0.42380 11.27500 19.71200 25.60900 # H1073 + 1074 358 2 0.42380 9.69800 19.89000 25.50600 # H1074 + 1075 359 1 -0.84760 29.45500 -0.63900 11.82500 # O1075 + 1076 359 2 0.42380 29.53900 0.35400 12.02800 # H1076 + 1077 359 2 0.42380 30.23600 -0.88300 11.24600 # H1077 + 1078 360 1 -0.84760 7.16700 15.98000 16.89600 # O1078 + 1079 360 2 0.42380 6.53600 16.15100 16.07900 # H1079 + 1080 360 2 0.42380 7.15600 16.91300 17.34200 # H1080 + 1081 361 1 -0.84760 16.94000 24.19400 17.84000 # O1081 + 1082 361 2 0.42380 16.59000 23.30400 17.63800 # H1082 + 1083 361 2 0.42380 16.73400 24.06400 18.83000 # H1083 + 1084 362 1 -0.84760 4.98300 17.16400 4.50800 # O1084 + 1085 362 2 0.42380 3.99400 17.48300 4.55000 # H1085 + 1086 362 2 0.42380 5.51400 17.50700 5.24100 # H1086 + 1087 363 1 -0.84760 17.97700 26.88800 19.70900 # O1087 + 1088 363 2 0.42380 17.71500 27.78900 19.23900 # H1088 + 1089 363 2 0.42380 17.12200 26.41300 19.34500 # H1089 + 1090 364 1 -0.84760 10.38600 29.24400 8.56100 # O1090 + 1091 364 2 0.42380 10.47000 28.57400 7.82000 # H1091 + 1092 364 2 0.42380 11.32600 29.46500 8.65700 # H1092 + 1093 365 1 -0.84760 3.07100 23.74600 27.92700 # O1093 + 1094 365 2 0.42380 2.15100 24.06200 27.61800 # H1094 + 1095 365 2 0.42380 3.22100 22.82900 27.49100 # H1095 + 1096 366 1 -0.84760 28.17200 6.11100 17.85200 # O1096 + 1097 366 2 0.42380 27.29200 6.40600 18.22600 # H1097 + 1098 366 2 0.42380 28.64900 6.99600 17.89000 # H1098 + 1099 367 1 -0.84760 18.70400 22.92800 27.25100 # O1099 + 1100 367 2 0.42380 17.77000 22.61500 26.86600 # H1100 + 1101 367 2 0.42380 19.41600 22.48600 26.68800 # H1101 + 1102 368 1 -0.84760 -0.57900 11.79900 8.34000 # O1102 + 1103 368 2 0.42380 -0.17000 11.37800 7.56800 # H1103 + 1104 368 2 0.42380 0.22000 12.28100 8.74800 # H1104 + 1105 369 1 -0.84760 0.55900 21.23800 27.27300 # O1105 + 1106 369 2 0.42380 -0.17700 21.29900 27.91400 # H1106 + 1107 369 2 0.42380 1.33800 20.79800 27.78300 # H1107 + 1108 370 1 -0.84760 21.58100 0.25900 4.21100 # O1108 + 1109 370 2 0.42380 21.83300 1.12300 3.79900 # H1109 + 1110 370 2 0.42380 21.37200 0.47600 5.17400 # H1110 + 1111 371 1 -0.84760 23.78600 4.43600 23.18800 # O1111 + 1112 371 2 0.42380 23.49500 3.49100 23.42900 # H1112 + 1113 371 2 0.42380 23.79400 4.36700 22.19500 # H1113 + 1114 372 1 -0.84760 9.17200 10.44400 1.08200 # O1114 + 1115 372 2 0.42380 8.22500 10.37500 0.74800 # H1115 + 1116 372 2 0.42380 9.39800 11.31600 1.31900 # H1116 + 1117 373 1 -0.84760 0.90500 0.14500 5.09300 # O1117 + 1118 373 2 0.42380 0.50800 -0.63200 4.52300 # H1118 + 1119 373 2 0.42380 1.18100 -0.42900 5.94500 # H1119 + 1120 374 1 -0.84760 26.47800 7.71700 9.00300 # O1120 + 1121 374 2 0.42380 26.59200 7.05100 8.27500 # H1121 + 1122 374 2 0.42380 26.08900 7.14000 9.77600 # H1122 + 1123 375 1 -0.84760 8.66100 4.75200 26.59400 # O1123 + 1124 375 2 0.42380 8.98400 5.18900 27.43700 # H1124 + 1125 375 2 0.42380 7.94500 5.38600 26.38100 # H1125 + 1126 376 1 -0.84760 20.33100 1.47700 9.50500 # O1126 + 1127 376 2 0.42380 19.35700 1.70100 9.80700 # H1127 + 1128 376 2 0.42380 20.92600 2.28200 9.69600 # H1128 + 1129 377 1 -0.84760 7.38900 10.06400 24.58700 # O1129 + 1130 377 2 0.42380 6.55500 10.06900 25.22700 # H1130 + 1131 377 2 0.42380 7.67300 9.06200 24.52600 # H1131 + 1132 378 1 -0.84760 23.35100 22.97800 17.20600 # O1132 + 1133 378 2 0.42380 23.82300 23.40700 16.36500 # H1133 + 1134 378 2 0.42380 23.24000 22.05500 16.81000 # H1134 + 1135 379 1 -0.84760 4.21700 27.30100 1.28100 # O1135 + 1136 379 2 0.42380 4.41000 26.43900 1.76000 # H1136 + 1137 379 2 0.42380 4.15900 26.86600 0.36700 # H1137 + 1138 380 1 -0.84760 19.77100 26.73800 0.47800 # O1138 + 1139 380 2 0.42380 19.56000 27.55700 1.04800 # H1139 + 1140 380 2 0.42380 19.85300 27.03500 -0.48600 # H1140 + 1141 381 1 -0.84760 13.11800 3.74900 23.60400 # O1141 + 1142 381 2 0.42380 13.10500 2.76400 23.96600 # H1142 + 1143 381 2 0.42380 14.01000 3.80500 23.10400 # H1143 + 1144 382 1 -0.84760 13.97600 -0.98600 6.60800 # O1144 + 1145 382 2 0.42380 13.86600 -1.79900 7.27300 # H1145 + 1146 382 2 0.42380 13.97000 -0.13300 7.23100 # H1146 + 1147 383 1 -0.84760 9.04800 6.04500 0.50100 # O1147 + 1148 383 2 0.42380 9.82500 5.30800 0.45000 # H1148 + 1149 383 2 0.42380 9.18300 6.38000 -0.43000 # H1149 + 1150 384 1 -0.84760 29.73900 14.83200 29.44100 # O1150 + 1151 384 2 0.42380 30.28800 15.53600 29.06500 # H1151 + 1152 384 2 0.42380 30.34200 13.99700 29.41800 # H1152 + 1153 385 1 -0.84760 19.73600 14.54500 17.95300 # O1153 + 1154 385 2 0.42380 19.45400 14.17700 17.05900 # H1154 + 1155 385 2 0.42380 19.24100 13.84400 18.45700 # H1155 + 1156 386 1 -0.84760 17.17000 9.62900 12.35200 # O1156 + 1157 386 2 0.42380 16.33500 9.71900 13.01100 # H1157 + 1158 386 2 0.42380 17.46500 10.35300 11.77000 # H1158 + 1159 387 1 -0.84760 5.81700 10.65400 5.56600 # O1159 + 1160 387 2 0.42380 5.48500 9.95900 6.21400 # H1160 + 1161 387 2 0.42380 5.06600 11.21700 5.19400 # H1161 + 1162 388 1 -0.84760 0.99700 23.71800 19.96400 # O1162 + 1163 388 2 0.42380 1.20100 23.77300 18.95900 # H1163 + 1164 388 2 0.42380 1.61700 24.26700 20.57000 # H1164 + 1165 389 1 -0.84760 1.50700 23.69800 17.30500 # O1165 + 1166 389 2 0.42380 2.45900 23.51000 17.62400 # H1166 + 1167 389 2 0.42380 1.00600 22.85400 17.52300 # H1167 + 1168 390 1 -0.84760 8.25400 15.41500 -0.26100 # O1168 + 1169 390 2 0.42380 8.23800 14.56900 -0.84600 # H1169 + 1170 390 2 0.42380 8.65500 16.01500 -0.93300 # H1170 + 1171 391 1 -0.84760 11.96500 13.76900 14.57800 # O1171 + 1172 391 2 0.42380 11.05800 13.30900 14.58900 # H1172 + 1173 391 2 0.42380 11.98400 14.04500 15.53100 # H1173 + 1174 392 1 -0.84760 16.35300 2.97200 4.61600 # O1174 + 1175 392 2 0.42380 15.80500 3.76500 5.02000 # H1175 + 1176 392 2 0.42380 16.61500 3.31000 3.69600 # H1176 + 1177 393 1 -0.84760 30.05500 22.84500 5.38300 # O1177 + 1178 393 2 0.42380 29.32600 22.74900 6.12700 # H1178 + 1179 393 2 0.42380 30.72200 22.02600 5.55000 # H1179 + 1180 394 1 -0.84760 11.94500 -0.97500 14.78500 # O1180 + 1181 394 2 0.42380 12.71500 -0.73100 15.36300 # H1181 + 1182 394 2 0.42380 12.35600 -1.53700 14.07800 # H1182 + 1183 395 1 -0.84760 8.86600 4.23900 11.67400 # O1183 + 1184 395 2 0.42380 7.98000 4.84000 11.72600 # H1184 + 1185 395 2 0.42380 8.64800 3.30600 11.34900 # H1185 + 1186 396 1 -0.84760 7.88500 3.45500 14.24200 # O1186 + 1187 396 2 0.42380 8.56900 3.49100 13.40700 # H1187 + 1188 396 2 0.42380 6.91400 3.20100 14.00900 # H1188 + 1189 397 1 -0.84760 19.58900 13.99900 12.53800 # O1189 + 1190 397 2 0.42380 20.59900 14.01700 12.66000 # H1190 + 1191 397 2 0.42380 19.41200 14.29100 11.57000 # H1191 + 1192 398 1 -0.84760 16.24000 15.62700 12.17600 # O1192 + 1193 398 2 0.42380 15.39400 15.77000 12.67600 # H1193 + 1194 398 2 0.42380 16.74100 16.48500 12.21600 # H1194 + 1195 399 1 -0.84760 7.81900 26.05800 14.78500 # O1195 + 1196 399 2 0.42380 8.63100 25.37900 14.82500 # H1196 + 1197 399 2 0.42380 8.02100 27.04900 15.09600 # H1197 + 1198 400 1 -0.84760 19.41600 16.88200 14.39100 # O1198 + 1199 400 2 0.42380 18.73900 16.83000 13.76400 # H1199 + 1200 400 2 0.42380 19.83500 17.78900 14.16800 # H1200 + 1201 401 1 -0.84760 27.37700 11.85400 23.44500 # O1201 + 1202 401 2 0.42380 26.72800 12.63200 23.44200 # H1202 + 1203 401 2 0.42380 27.77200 11.92800 24.36300 # H1203 + 1204 402 1 -0.84760 13.96500 26.27800 22.16800 # O1204 + 1205 402 2 0.42380 13.28400 27.00300 21.96100 # H1205 + 1206 402 2 0.42380 13.81100 26.05100 23.15000 # H1206 + 1207 403 1 -0.84760 6.86100 5.57000 11.48100 # O1207 + 1208 403 2 0.42380 7.73800 6.14400 11.31000 # H1208 + 1209 403 2 0.42380 6.72000 5.00200 10.64200 # H1209 + 1210 404 1 -0.84760 8.93700 8.22400 18.11400 # O1210 + 1211 404 2 0.42380 9.49200 8.44700 17.26800 # H1211 + 1212 404 2 0.42380 8.45500 7.33300 17.80600 # H1212 + 1213 405 1 -0.84760 16.21000 4.70100 14.59300 # O1213 + 1214 405 2 0.42380 16.68000 3.87100 14.20300 # H1214 + 1215 405 2 0.42380 15.25400 4.58300 14.27900 # H1215 + 1216 406 1 -0.84760 10.39700 7.31800 2.82500 # O1216 + 1217 406 2 0.42380 10.50000 6.65300 2.01600 # H1217 + 1218 406 2 0.42380 9.76400 8.16100 2.61800 # H1218 + 1219 407 1 -0.84760 10.50000 13.98200 9.00200 # O1219 + 1220 407 2 0.42380 10.99800 13.18100 8.63800 # H1220 + 1221 407 2 0.42380 11.16400 14.68800 8.74400 # H1221 + 1222 408 1 -0.84760 24.67100 4.05200 15.70500 # O1222 + 1223 408 2 0.42380 24.66200 4.89300 16.35700 # H1223 + 1224 408 2 0.42380 25.45500 4.38700 15.11500 # H1224 + 1225 409 1 -0.84760 26.50400 9.01000 4.26500 # O1225 + 1226 409 2 0.42380 26.77800 8.39500 5.00000 # H1226 + 1227 409 2 0.42380 25.93200 8.37700 3.68900 # H1227 + 1228 410 1 -0.84760 26.74200 18.07600 20.67100 # O1228 + 1229 410 2 0.42380 26.02800 18.15300 19.93300 # H1229 + 1230 410 2 0.42380 26.27100 18.67800 21.43300 # H1230 + 1231 411 1 -0.84760 17.24500 27.97100 1.85200 # O1231 + 1232 411 2 0.42380 16.32700 27.94800 2.24200 # H1232 + 1233 411 2 0.42380 17.62000 27.18900 2.37400 # H1233 + 1234 412 1 -0.84760 24.23400 10.88100 27.04900 # O1234 + 1235 412 2 0.42380 23.30800 10.89200 27.43200 # H1235 + 1236 412 2 0.42380 24.58900 10.01400 26.70000 # H1236 + 1237 413 1 -0.84760 29.26200 20.88400 15.33500 # O1237 + 1238 413 2 0.42380 28.85300 20.96700 16.24100 # H1238 + 1239 413 2 0.42380 28.72800 21.55400 14.79300 # H1239 + 1240 414 1 -0.84760 17.51200 26.36600 8.92400 # O1240 + 1241 414 2 0.42380 17.00300 25.85000 9.67200 # H1241 + 1242 414 2 0.42380 18.06100 25.66700 8.51100 # H1242 + 1243 415 1 -0.84760 21.13200 11.87100 24.81700 # O1243 + 1244 415 2 0.42380 21.05200 11.74600 25.81900 # H1244 + 1245 415 2 0.42380 20.96600 11.03400 24.28000 # H1245 + 1246 416 1 -0.84760 4.54400 20.37700 9.27100 # O1246 + 1247 416 2 0.42380 5.35000 20.97900 9.13900 # H1247 + 1248 416 2 0.42380 4.07400 20.63100 10.13500 # H1248 + 1249 417 1 -0.84760 6.19500 24.18200 10.15100 # O1249 + 1250 417 2 0.42380 5.52300 24.74800 9.70700 # H1250 + 1251 417 2 0.42380 6.99700 24.15200 9.57500 # H1251 + 1252 418 1 -0.84760 20.59200 28.17200 20.04100 # O1252 + 1253 418 2 0.42380 20.19100 27.25600 19.95500 # H1253 + 1254 418 2 0.42380 21.28800 28.19300 20.69900 # H1254 + 1255 419 1 -0.84760 28.15100 22.55200 7.17600 # O1255 + 1256 419 2 0.42380 27.58100 23.31900 6.91400 # H1256 + 1257 419 2 0.42380 28.34700 22.50000 8.17000 # H1257 + 1258 420 1 -0.84760 6.91000 10.14000 17.29200 # O1258 + 1259 420 2 0.42380 7.79000 9.72600 17.58900 # H1259 + 1260 420 2 0.42380 7.01900 11.09500 17.03600 # H1260 + 1261 421 1 -0.84760 -0.11000 23.57300 13.20400 # O1261 + 1262 421 2 0.42380 -0.73200 22.81500 13.37200 # H1262 + 1263 421 2 0.42380 0.34000 23.88300 14.05600 # H1263 + 1264 422 1 -0.84760 30.08100 6.38000 7.74300 # O1264 + 1265 422 2 0.42380 29.16800 6.51500 7.98400 # H1265 + 1266 422 2 0.42380 30.50100 5.88600 8.49900 # H1266 + 1267 423 1 -0.84760 25.34800 15.08400 0.21900 # O1267 + 1268 423 2 0.42380 25.83300 14.46400 0.85700 # H1268 + 1269 423 2 0.42380 25.81300 15.31100 -0.68600 # H1269 + 1270 424 1 -0.84760 0.45600 28.55400 1.07200 # O1270 + 1271 424 2 0.42380 1.19400 28.87700 0.46500 # H1271 + 1272 424 2 0.42380 -0.44900 28.89700 0.85500 # H1272 + 1273 425 1 -0.84760 6.94000 3.35700 20.59800 # O1273 + 1274 425 2 0.42380 7.37700 3.85300 21.37300 # H1274 + 1275 425 2 0.42380 7.53900 2.50800 20.45700 # H1275 + 1276 426 1 -0.84760 14.06700 25.47800 18.42900 # O1276 + 1277 426 2 0.42380 14.45800 26.38700 18.33300 # H1277 + 1278 426 2 0.42380 13.04000 25.51500 18.41900 # H1278 + 1279 427 1 -0.84760 14.74100 2.35200 26.58200 # O1279 + 1280 427 2 0.42380 15.70100 2.64300 26.44600 # H1280 + 1281 427 2 0.42380 14.46100 2.26300 25.61400 # H1281 + 1282 428 1 -0.84760 21.31800 7.20800 20.93500 # O1282 + 1283 428 2 0.42380 20.32100 7.28400 20.60200 # H1283 + 1284 428 2 0.42380 21.19300 6.31400 21.41100 # H1284 + 1285 429 1 -0.84760 13.40500 16.30600 24.48200 # O1285 + 1286 429 2 0.42380 13.85900 16.80300 23.73300 # H1286 + 1287 429 2 0.42380 12.97300 15.51400 24.09000 # H1287 + 1288 430 1 -0.84760 9.79400 20.26400 -0.14800 # O1288 + 1289 430 2 0.42380 10.69000 20.20200 -0.63300 # H1289 + 1290 430 2 0.42380 9.36000 21.13900 -0.37400 # H1290 + 1291 431 1 -0.84760 26.77500 22.48500 17.53200 # O1291 + 1292 431 2 0.42380 26.73400 22.35300 16.53600 # H1292 + 1293 431 2 0.42380 26.07600 23.14800 17.90000 # H1293 + 1294 432 1 -0.84760 15.54100 4.93000 10.52600 # O1294 + 1295 432 2 0.42380 14.85000 4.34000 10.03100 # H1295 + 1296 432 2 0.42380 15.31900 4.85300 11.49700 # H1296 + 1297 433 1 -0.84760 28.26200 3.88700 15.33600 # O1297 + 1298 433 2 0.42380 29.17200 4.25000 15.03200 # H1298 + 1299 433 2 0.42380 28.00100 4.48400 16.09700 # H1299 + 1300 434 1 -0.84760 18.63900 22.63800 11.06300 # O1300 + 1301 434 2 0.42380 19.53800 22.85300 11.42400 # H1301 + 1302 434 2 0.42380 17.98200 22.80800 11.80100 # H1302 + 1303 435 1 -0.84760 4.29500 -0.94000 25.45200 # O1303 + 1304 435 2 0.42380 3.70800 -0.11200 25.34500 # H1304 + 1305 435 2 0.42380 3.59200 -1.68700 25.54400 # H1305 + 1306 436 1 -0.84760 4.17200 0.09300 11.42200 # O1306 + 1307 436 2 0.42380 5.15300 -0.04400 11.55800 # H1307 + 1308 436 2 0.42380 3.78200 -0.72300 10.98000 # H1308 + 1309 437 1 -0.84760 19.50700 3.96600 26.63400 # O1309 + 1310 437 2 0.42380 19.04500 4.78100 26.29700 # H1310 + 1311 437 2 0.42380 18.81400 3.23100 26.42300 # H1311 + 1312 438 1 -0.84760 24.93300 24.23200 1.65400 # O1312 + 1313 438 2 0.42380 24.79300 23.45100 2.29100 # H1313 + 1314 438 2 0.42380 25.85500 24.56800 1.94500 # H1314 + 1315 439 1 -0.84760 4.59600 19.29000 18.01900 # O1315 + 1316 439 2 0.42380 4.90000 18.58800 17.43500 # H1316 + 1317 439 2 0.42380 4.82000 20.10800 17.42200 # H1317 + 1318 440 1 -0.84760 8.32300 28.59400 6.68700 # O1318 + 1319 440 2 0.42380 7.66000 29.28300 6.32000 # H1319 + 1320 440 2 0.42380 8.30700 27.91700 5.95300 # H1320 + 1321 441 1 -0.84760 15.91200 1.28400 13.86200 # O1321 + 1322 441 2 0.42380 15.29600 0.57200 13.49400 # H1322 + 1323 441 2 0.42380 15.53400 2.19300 13.59900 # H1323 + 1324 442 1 -0.84760 13.41300 24.14300 20.74000 # O1324 + 1325 442 2 0.42380 13.70500 24.61200 19.91300 # H1325 + 1326 442 2 0.42380 13.31600 24.89100 21.35200 # H1326 + 1327 443 1 -0.84760 29.87400 4.65600 12.60000 # O1327 + 1328 443 2 0.42380 30.05500 5.65100 12.49600 # H1328 + 1329 443 2 0.42380 29.46300 4.33800 11.68900 # H1329 + 1330 444 1 -0.84760 3.44500 25.61900 4.84600 # O1330 + 1331 444 2 0.42380 3.04900 25.33500 5.75400 # H1331 + 1332 444 2 0.42380 3.47300 26.68100 4.84000 # H1332 + 1333 445 1 -0.84760 2.81100 17.33000 12.95300 # O1333 + 1334 445 2 0.42380 2.28300 18.12300 13.24700 # H1334 + 1335 445 2 0.42380 3.78100 17.62800 12.73800 # H1335 + 1336 446 1 -0.84760 29.11700 6.06600 25.91400 # O1336 + 1337 446 2 0.42380 28.77500 6.87900 25.35200 # H1337 + 1338 446 2 0.42380 29.32700 5.35100 25.20600 # H1338 + 1339 447 1 -0.84760 25.31000 28.91300 0.60400 # O1339 + 1340 447 2 0.42380 24.58400 28.88600 -0.07600 # H1340 + 1341 447 2 0.42380 25.28900 29.87100 0.95100 # H1341 + 1342 448 1 -0.84760 28.99600 8.82900 7.25800 # O1342 + 1343 448 2 0.42380 29.30000 7.94200 7.57500 # H1343 + 1344 448 2 0.42380 29.77300 9.38800 6.88500 # H1344 + 1345 449 1 -0.84760 11.24700 24.27000 18.81000 # O1345 + 1346 449 2 0.42380 11.54700 24.38600 17.82300 # H1346 + 1347 449 2 0.42380 11.82200 23.59300 19.26500 # H1347 + 1348 450 1 -0.84760 13.90300 7.50400 14.11100 # O1348 + 1349 450 2 0.42380 13.07100 8.05600 14.39600 # H1349 + 1350 450 2 0.42380 14.59600 8.13000 14.41700 # H1350 + 1351 451 1 -0.84760 14.79100 -0.76200 17.57100 # O1351 + 1352 451 2 0.42380 14.43600 -0.29800 18.40200 # H1352 + 1353 451 2 0.42380 15.67700 -1.17400 17.79900 # H1353 + 1354 452 1 -0.84760 24.68100 6.60600 10.88500 # O1354 + 1355 452 2 0.42380 23.92500 7.25600 10.66800 # H1355 + 1356 452 2 0.42380 24.18000 5.79000 11.19400 # H1356 + 1357 453 1 -0.84760 16.58900 10.36000 26.61000 # O1357 + 1358 453 2 0.42380 16.94400 10.96200 25.84300 # H1358 + 1359 453 2 0.42380 15.63800 10.22800 26.26700 # H1359 + 1360 454 1 -0.84760 19.45900 0.43300 21.36400 # O1360 + 1361 454 2 0.42380 19.43100 1.00700 22.28700 # H1361 + 1362 454 2 0.42380 20.36400 0.52600 20.82500 # H1362 + 1363 455 1 -0.84760 29.38600 9.37200 17.37000 # O1363 + 1364 455 2 0.42380 28.87000 10.25800 17.20900 # H1364 + 1365 455 2 0.42380 29.92800 9.52900 18.22600 # H1365 + 1366 456 1 -0.84760 13.77500 19.61000 9.09000 # O1366 + 1367 456 2 0.42380 13.87800 20.32700 8.28000 # H1367 + 1368 456 2 0.42380 12.83000 19.62700 9.54000 # H1368 + 1369 457 1 -0.84760 3.81900 17.62800 7.97900 # O1369 + 1370 457 2 0.42380 4.44100 18.35100 8.15300 # H1370 + 1371 457 2 0.42380 3.33400 17.38400 8.90000 # H1371 + 1372 458 1 -0.84760 22.20500 10.96900 1.67700 # O1372 + 1373 458 2 0.42380 23.14700 11.41700 1.65000 # H1373 + 1374 458 2 0.42380 22.36500 10.03600 2.06000 # H1374 + 1375 459 1 -0.84760 22.98400 1.49200 29.71400 # O1375 + 1376 459 2 0.42380 23.16000 2.42100 29.99300 # H1376 + 1377 459 2 0.42380 22.22900 1.18000 30.30300 # H1377 + 1378 460 1 -0.84760 23.10700 24.60800 23.42100 # O1378 + 1379 460 2 0.42380 23.07100 23.74300 23.96400 # H1379 + 1380 460 2 0.42380 23.97400 25.04400 23.68800 # H1380 + 1381 461 1 -0.84760 19.01900 22.83700 24.20100 # O1381 + 1382 461 2 0.42380 18.19800 23.44100 24.14100 # H1382 + 1383 461 2 0.42380 18.74600 21.87500 24.02200 # H1383 + 1384 462 1 -0.84760 6.96400 17.85900 19.45400 # O1384 + 1385 462 2 0.42380 7.49400 18.14500 20.27300 # H1385 + 1386 462 2 0.42380 6.54900 18.70200 19.03700 # H1386 + 1387 463 1 -0.84760 28.06000 19.59000 23.10600 # O1387 + 1388 463 2 0.42380 28.02200 20.30300 22.44200 # H1388 + 1389 463 2 0.42380 27.14900 19.37800 23.56100 # H1389 + 1390 464 1 -0.84760 15.97300 6.77600 16.93600 # O1390 + 1391 464 2 0.42380 15.89100 6.78400 17.98300 # H1391 + 1392 464 2 0.42380 15.70200 5.79400 16.75900 # H1392 + 1393 465 1 -0.84760 16.72900 8.33300 0.69000 # O1393 + 1394 465 2 0.42380 17.26200 8.89900 -0.01400 # H1394 + 1395 465 2 0.42380 15.73400 8.46700 0.67400 # H1395 + 1396 466 1 -0.84760 17.38700 21.06000 23.05700 # O1396 + 1397 466 2 0.42380 17.01800 21.97800 23.15900 # H1397 + 1398 466 2 0.42380 17.11200 20.57100 23.87400 # H1398 + 1399 467 1 -0.84760 5.81900 28.61200 9.00300 # O1399 + 1400 467 2 0.42380 6.23600 28.11100 9.77800 # H1400 + 1401 467 2 0.42380 4.80700 28.32000 9.08100 # H1401 + 1402 468 1 -0.84760 6.39500 12.40500 28.77000 # O1402 + 1403 468 2 0.42380 6.90500 12.55900 29.64800 # H1403 + 1404 468 2 0.42380 5.48800 12.22600 29.21700 # H1404 + 1405 469 1 -0.84760 17.84300 20.43600 30.00400 # O1405 + 1406 469 2 0.42380 17.49000 19.70300 30.57700 # H1406 + 1407 469 2 0.42380 18.10100 21.10500 30.73400 # H1407 + 1408 470 1 -0.84760 11.63300 4.51000 28.17300 # O1408 + 1409 470 2 0.42380 11.76700 5.16900 27.36400 # H1409 + 1410 470 2 0.42380 10.66400 4.54300 28.48200 # H1410 + 1411 471 1 -0.84760 1.53100 28.54900 26.79000 # O1411 + 1412 471 2 0.42380 2.18000 28.14500 27.39500 # H1412 + 1413 471 2 0.42380 0.97900 27.71900 26.39300 # H1413 + 1414 472 1 -0.84760 -0.45000 28.31100 18.15600 # O1414 + 1415 472 2 0.42380 -0.60600 27.54200 18.86900 # H1415 + 1416 472 2 0.42380 -1.36700 28.75700 18.28400 # H1416 + 1417 473 1 -0.84760 21.14500 28.57000 3.69000 # O1417 + 1418 473 2 0.42380 20.83700 29.35100 4.26800 # H1418 + 1419 473 2 0.42380 21.46400 29.04000 2.88000 # H1419 + 1420 474 1 -0.84760 9.31500 18.47400 1.84300 # O1420 + 1421 474 2 0.42380 9.00000 18.21900 0.90700 # H1421 + 1422 474 2 0.42380 9.40000 19.43700 1.66400 # H1422 + 1423 475 1 -0.84760 25.20200 28.37100 25.77700 # O1423 + 1424 475 2 0.42380 26.20600 28.52800 25.73000 # H1424 + 1425 475 2 0.42380 24.82500 29.24300 26.03500 # H1425 + 1426 476 1 -0.84760 0.13700 23.55500 25.87000 # O1426 + 1427 476 2 0.42380 0.12600 22.74300 26.49000 # H1427 + 1428 476 2 0.42380 0.37700 23.40200 24.92400 # H1428 + 1429 477 1 -0.84760 20.94600 16.46500 8.37600 # O1429 + 1430 477 2 0.42380 20.22800 16.68200 7.79100 # H1430 + 1431 477 2 0.42380 21.77000 17.05100 8.26600 # H1431 + 1432 478 1 -0.84760 17.16600 14.75700 25.68300 # O1432 + 1433 478 2 0.42380 17.51200 14.40700 24.79100 # H1433 + 1434 478 2 0.42380 16.70400 15.70800 25.62800 # H1434 + 1435 479 1 -0.84760 28.38100 18.43900 17.44500 # O1435 + 1436 479 2 0.42380 29.14400 18.55600 16.75000 # H1436 + 1437 479 2 0.42380 28.70600 17.68700 18.08100 # H1437 + 1438 480 1 -0.84760 14.41700 4.29000 28.70700 # O1438 + 1439 480 2 0.42380 13.52000 4.59300 28.21800 # H1439 + 1440 480 2 0.42380 14.34100 3.32100 28.30000 # H1440 + 1441 481 1 -0.84760 6.78400 -0.21300 6.56700 # O1441 + 1442 481 2 0.42380 6.25800 -0.69400 7.32500 # H1442 + 1443 481 2 0.42380 6.16700 0.17900 5.88000 # H1443 + 1444 482 1 -0.84760 27.01300 6.79200 29.77400 # O1444 + 1445 482 2 0.42380 26.86900 7.75900 29.82600 # H1445 + 1446 482 2 0.42380 27.08300 6.62300 28.80600 # H1446 + 1447 483 1 -0.84760 25.24100 5.90100 17.87500 # O1447 + 1448 483 2 0.42380 26.25300 5.84100 17.97000 # H1448 + 1449 483 2 0.42380 25.03800 6.76100 18.28700 # H1449 + 1450 484 1 -0.84760 7.95600 -0.13900 19.25800 # O1450 + 1451 484 2 0.42380 7.78500 0.87300 19.12300 # H1451 + 1452 484 2 0.42380 7.13800 -0.70000 18.88700 # H1452 + 1453 485 1 -0.84760 20.00000 20.12800 22.02500 # O1453 + 1454 485 2 0.42380 19.92700 19.16900 22.25900 # H1454 + 1455 485 2 0.42380 19.04300 20.44200 22.05000 # H1455 + 1456 486 1 -0.84760 8.55100 24.64100 2.85400 # O1456 + 1457 486 2 0.42380 9.33400 24.99100 3.33700 # H1457 + 1458 486 2 0.42380 7.78000 25.33100 2.83600 # H1458 + 1459 487 1 -0.84760 12.07900 5.92500 25.86400 # O1459 + 1460 487 2 0.42380 11.54800 6.72500 25.48900 # H1460 + 1461 487 2 0.42380 12.87400 5.78900 25.20200 # H1461 + 1462 488 1 -0.84760 0.41400 27.88300 5.96800 # O1462 + 1463 488 2 0.42380 0.03400 28.46600 5.07900 # H1463 + 1464 488 2 0.42380 -0.27500 27.90400 6.78100 # H1464 + 1465 489 1 -0.84760 -0.73800 3.84500 19.94800 # O1465 + 1466 489 2 0.42380 0.11800 4.09700 19.43300 # H1466 + 1467 489 2 0.42380 -0.64100 3.53400 20.93400 # H1467 + 1468 490 1 -0.84760 29.77100 1.05100 18.82300 # O1468 + 1469 490 2 0.42380 30.76000 0.93500 18.85100 # H1469 + 1470 490 2 0.42380 29.61200 1.99000 19.09800 # H1470 + 1471 491 1 -0.84760 16.90600 -0.10900 20.84700 # O1471 + 1472 491 2 0.42380 17.96900 -0.20100 21.13600 # H1472 + 1473 491 2 0.42380 17.11400 0.85400 20.45500 # H1473 + 1474 492 1 -0.84760 5.90200 11.67300 13.97600 # O1474 + 1475 492 2 0.42380 5.58300 11.85100 14.88600 # H1475 + 1476 492 2 0.42380 6.40700 10.84900 13.99800 # H1476 + 1477 493 1 -0.84760 20.80100 17.08000 20.64000 # O1477 + 1478 493 2 0.42380 21.32100 16.53300 21.29900 # H1478 + 1479 493 2 0.42380 21.30800 17.13400 19.70000 # H1479 + 1480 494 1 -0.84760 21.95200 9.67500 22.27800 # O1480 + 1481 494 2 0.42380 21.32400 9.41800 23.05500 # H1481 + 1482 494 2 0.42380 22.06900 8.77400 21.71200 # H1482 + 1483 495 1 -0.84760 20.37200 13.01400 2.97400 # O1483 + 1484 495 2 0.42380 20.26300 13.19800 3.95800 # H1484 + 1485 495 2 0.42380 21.34000 12.71200 2.87400 # H1485 + 1486 496 1 -0.84760 7.92700 -0.11500 9.60000 # O1486 + 1487 496 2 0.42380 8.31900 -0.39700 10.45200 # H1487 + 1488 496 2 0.42380 7.70600 -0.98700 9.22300 # H1488 + 1489 497 1 -0.84760 2.86300 8.55600 21.49300 # O1489 + 1490 497 2 0.42380 2.15400 9.30000 21.55300 # H1490 + 1491 497 2 0.42380 3.54500 8.96600 20.90100 # H1491 + 1492 498 1 -0.84760 6.16100 5.61600 28.38000 # O1492 + 1493 498 2 0.42380 5.49700 5.83600 27.60600 # H1493 + 1494 498 2 0.42380 5.76600 5.49100 29.33400 # H1494 + 1495 499 1 -0.84760 14.02900 21.85200 22.68600 # O1495 + 1496 499 2 0.42380 14.84000 22.41100 22.93600 # H1496 + 1497 499 2 0.42380 13.26400 22.50000 22.47300 # H1497 + 1498 500 1 -0.84760 15.66700 24.19300 8.93900 # O1498 + 1499 500 2 0.42380 15.28700 23.41500 9.36600 # H1499 + 1500 500 2 0.42380 14.93600 24.89200 8.96900 # H1500 + 1501 501 1 -0.84760 4.37700 22.31100 2.32500 # O1501 + 1502 501 2 0.42380 4.81500 22.01900 1.38200 # H1502 + 1503 501 2 0.42380 3.68900 21.53200 2.50700 # H1503 + 1504 502 1 -0.84760 26.78600 23.05100 23.45400 # O1504 + 1505 502 2 0.42380 27.16700 22.42800 24.20200 # H1505 + 1506 502 2 0.42380 26.85900 22.54700 22.53700 # H1506 + 1507 503 1 -0.84760 2.22700 3.28000 8.34400 # O1507 + 1508 503 2 0.42380 3.08700 2.75400 8.37800 # H1508 + 1509 503 2 0.42380 2.40000 3.78300 7.49200 # H1509 + 1510 504 1 -0.84760 16.11100 10.52500 21.72300 # O1510 + 1511 504 2 0.42380 15.69700 10.22700 20.79100 # H1511 + 1512 504 2 0.42380 15.66400 9.82200 22.29300 # H1512 + 1513 505 1 -0.84760 27.91700 24.73800 14.35400 # O1513 + 1514 505 2 0.42380 27.63500 24.69400 15.29600 # H1514 + 1515 505 2 0.42380 28.86200 24.46200 14.29500 # H1515 + 1516 506 1 -0.84760 24.03000 21.38200 0.57200 # O1516 + 1517 506 2 0.42380 23.28900 22.07000 0.65800 # H1517 + 1518 506 2 0.42380 24.46200 21.12900 1.47200 # H1518 + 1519 507 1 -0.84760 9.64100 8.37300 15.27900 # O1519 + 1520 507 2 0.42380 8.78200 7.94500 14.89000 # H1520 + 1521 507 2 0.42380 10.26000 8.25200 14.43800 # H1521 + 1522 508 1 -0.84760 26.09800 16.71600 24.63300 # O1522 + 1523 508 2 0.42380 26.61600 17.53400 25.03200 # H1523 + 1524 508 2 0.42380 26.06500 16.06700 25.43100 # H1524 + 1525 509 1 -0.84760 11.84600 8.83000 26.81600 # O1525 + 1526 509 2 0.42380 12.73900 8.38400 26.71900 # H1526 + 1527 509 2 0.42380 11.12000 8.13400 26.88400 # H1527 + 1528 510 1 -0.84760 21.94300 2.01200 19.78200 # O1528 + 1529 510 2 0.42380 22.20900 1.04600 19.78200 # H1529 + 1530 510 2 0.42380 22.06200 2.21500 18.80700 # H1530 + 1531 511 1 -0.84760 20.76100 22.81700 21.03200 # O1531 + 1532 511 2 0.42380 19.80900 22.57300 21.41300 # H1532 + 1533 511 2 0.42380 21.24400 23.36500 21.77100 # H1533 + 1534 512 1 -0.84760 25.22000 13.48900 11.95200 # O1534 + 1535 512 2 0.42380 25.70900 14.36400 11.71700 # H1535 + 1536 512 2 0.42380 24.73400 13.38900 11.09400 # H1536 + 1537 513 1 -0.84760 8.04900 18.98900 11.03100 # O1537 + 1538 513 2 0.42380 7.95000 19.99900 11.07300 # H1538 + 1539 513 2 0.42380 8.49400 18.75500 10.16800 # H1539 + 1540 514 1 -0.84760 7.83100 11.23700 19.74400 # O1540 + 1541 514 2 0.42380 7.93400 12.15200 19.21900 # H1541 + 1542 514 2 0.42380 8.17100 10.34500 19.28300 # H1542 + 1543 515 1 -0.84760 29.22700 17.01700 5.31100 # O1543 + 1544 515 2 0.42380 28.49200 17.67900 5.60700 # H1544 + 1545 515 2 0.42380 29.17900 16.83600 4.36700 # H1545 + 1546 516 1 -0.84760 15.65300 29.24700 22.18300 # O1546 + 1547 516 2 0.42380 16.08300 29.85300 21.48000 # H1547 + 1548 516 2 0.42380 15.63600 28.33200 21.80000 # H1548 + 1549 517 1 -0.84760 13.75600 7.55800 7.02500 # O1549 + 1550 517 2 0.42380 14.45100 6.96100 6.56900 # H1550 + 1551 517 2 0.42380 13.09000 7.88500 6.34000 # H1551 + 1552 518 1 -0.84760 16.28000 1.61600 10.70500 # O1552 + 1553 518 2 0.42380 16.38300 2.59800 11.04500 # H1553 + 1554 518 2 0.42380 16.53500 1.66700 9.75400 # H1554 + 1555 519 1 -0.84760 25.61800 26.29400 27.77900 # O1555 + 1556 519 2 0.42380 25.65000 27.12700 27.20200 # H1556 + 1557 519 2 0.42380 24.79500 26.22500 28.38700 # H1557 + 1558 520 1 -0.84760 16.71600 8.30200 23.52000 # O1558 + 1559 520 2 0.42380 17.69400 8.52800 23.29100 # H1559 + 1560 520 2 0.42380 16.20800 9.15200 23.81500 # H1560 + 1561 521 1 -0.84760 7.85000 21.48800 10.10000 # O1561 + 1562 521 2 0.42380 7.39300 22.12800 10.71300 # H1562 + 1563 521 2 0.42380 8.17000 22.06900 9.27900 # H1563 + 1564 522 1 -0.84760 0.06000 3.51400 22.63100 # O1564 + 1565 522 2 0.42380 -0.37000 3.37400 23.54300 # H1565 + 1566 522 2 0.42380 0.70500 2.71700 22.62500 # H1566 + 1567 523 1 -0.84760 28.88200 27.38500 27.81000 # O1567 + 1568 523 2 0.42380 28.99600 28.18200 28.37700 # H1568 + 1569 523 2 0.42380 29.24800 26.67900 28.43100 # H1569 + 1570 524 1 -0.84760 1.14600 20.55500 1.57400 # O1570 + 1571 524 2 0.42380 0.31700 20.90700 1.05800 # H1571 + 1572 524 2 0.42380 1.89300 21.18300 1.48500 # H1572 + 1573 525 1 -0.84760 12.32400 28.67100 23.20500 # O1573 + 1574 525 2 0.42380 13.28800 28.95500 23.32300 # H1574 + 1575 525 2 0.42380 11.99500 29.36700 22.66400 # H1575 + 1576 526 1 -0.84760 0.98100 26.99200 29.83100 # O1576 + 1577 526 2 0.42380 0.93700 26.01200 30.07900 # H1577 + 1578 526 2 0.42380 0.13700 27.45000 29.96100 # H1578 + 1579 527 1 -0.84760 6.68500 1.77700 16.64300 # O1579 + 1580 527 2 0.42380 6.51500 2.60600 16.23600 # H1580 + 1581 527 2 0.42380 7.55500 1.68500 17.16100 # H1581 + 1582 528 1 -0.84760 1.73400 3.69500 27.76300 # O1582 + 1583 528 2 0.42380 2.34300 3.09000 28.39600 # H1583 + 1584 528 2 0.42380 1.32100 4.44500 28.34700 # H1584 + 1585 529 1 -0.84760 26.37900 13.23100 25.82200 # O1585 + 1586 529 2 0.42380 27.03100 14.02100 25.89600 # H1586 + 1587 529 2 0.42380 26.63500 12.64800 26.62300 # H1587 + 1588 530 1 -0.84760 25.90900 2.83400 7.77700 # O1588 + 1589 530 2 0.42380 26.74300 2.32000 7.97900 # H1589 + 1590 530 2 0.42380 25.68400 3.44900 8.59800 # H1590 + 1591 531 1 -0.84760 3.59100 1.74900 28.26500 # O1591 + 1592 531 2 0.42380 4.55500 2.09700 28.49900 # H1592 + 1593 531 2 0.42380 3.29500 2.13100 27.36500 # H1593 + 1594 532 1 -0.84760 7.59200 13.94200 22.65200 # O1594 + 1595 532 2 0.42380 8.27100 14.48300 23.29900 # H1595 + 1596 532 2 0.42380 6.66500 14.33300 22.99400 # H1596 + 1597 533 1 -0.84760 15.31700 9.22900 15.36300 # O1597 + 1598 533 2 0.42380 14.65400 9.16500 16.13800 # H1598 + 1599 533 2 0.42380 15.82100 8.32900 15.55000 # H1599 + 1600 534 1 -0.84760 6.28000 29.19600 3.42400 # O1600 + 1601 534 2 0.42380 6.90800 29.45800 2.67700 # H1601 + 1602 534 2 0.42380 5.83100 28.38900 2.98300 # H1602 + 1603 535 1 -0.84760 -0.54700 11.31600 23.78400 # O1603 + 1604 535 2 0.42380 -1.09100 10.85900 24.50600 # H1604 + 1605 535 2 0.42380 -1.26300 11.74200 23.23500 # H1605 + 1606 536 1 -0.84760 18.48100 19.62300 19.59100 # O1606 + 1607 536 2 0.42380 18.81300 18.97800 20.30500 # H1607 + 1608 536 2 0.42380 19.18900 19.62200 18.83900 # H1608 + 1609 537 1 -0.84760 5.17600 25.45100 12.68900 # O1609 + 1610 537 2 0.42380 4.85900 24.53100 12.93600 # H1610 + 1611 537 2 0.42380 6.11500 25.53000 13.09900 # H1611 + 1612 538 1 -0.84760 9.98200 -0.25900 23.19800 # O1612 + 1613 538 2 0.42380 9.97300 0.75600 22.99000 # H1613 + 1614 538 2 0.42380 9.10200 -0.72700 23.53100 # H1614 + 1615 539 1 -0.84760 6.33600 9.61400 1.54300 # O1615 + 1616 539 2 0.42380 6.19300 9.12300 2.47400 # H1616 + 1617 539 2 0.42380 5.40600 9.58400 1.15300 # H1617 + 1618 540 1 -0.84760 26.16600 8.35500 12.93600 # O1618 + 1619 540 2 0.42380 25.78400 7.43100 12.98900 # H1619 + 1620 540 2 0.42380 25.38900 8.69600 12.38600 # H1620 + 1621 541 1 -0.84760 1.52000 12.64700 29.34400 # O1621 + 1622 541 2 0.42380 0.89400 12.32200 30.12700 # H1622 + 1623 541 2 0.42380 1.69700 11.72300 28.95800 # H1623 + 1624 542 1 -0.84760 8.73200 19.72200 7.42000 # O1624 + 1625 542 2 0.42380 8.11400 20.48900 7.15800 # H1625 + 1626 542 2 0.42380 8.06200 18.95900 7.47000 # H1626 + 1627 543 1 -0.84760 15.89200 2.41800 20.26900 # O1627 + 1628 543 2 0.42380 14.98500 2.88300 20.13800 # H1628 + 1629 543 2 0.42380 16.32300 2.03000 19.42200 # H1629 + 1630 544 1 -0.84760 23.63900 27.48000 1.95200 # O1630 + 1631 544 2 0.42380 22.89800 27.63300 2.66900 # H1631 + 1632 544 2 0.42380 23.84000 28.33400 1.42200 # H1632 + 1633 545 1 -0.84760 15.26200 20.42800 0.70500 # O1633 + 1634 545 2 0.42380 15.48500 19.56900 0.15700 # H1634 + 1635 545 2 0.42380 15.22700 19.97500 1.63900 # H1635 + 1636 546 1 -0.84760 17.01100 22.45900 4.46700 # O1636 + 1637 546 2 0.42380 17.83100 22.03600 4.02400 # H1637 + 1638 546 2 0.42380 16.38300 22.92600 3.84900 # H1638 + 1639 547 1 -0.84760 29.37100 15.17500 8.87600 # O1639 + 1640 547 2 0.42380 29.31700 14.19500 8.65400 # H1640 + 1641 547 2 0.42380 29.88200 15.35400 9.76500 # H1641 + 1642 548 1 -0.84760 28.84500 13.35800 21.50700 # O1642 + 1643 548 2 0.42380 28.19200 13.64000 22.24600 # H1643 + 1644 548 2 0.42380 29.76800 13.68400 21.97800 # H1644 + 1645 549 1 -0.84760 1.34100 3.38200 17.78200 # O1645 + 1646 549 2 0.42380 1.08400 3.65500 16.91000 # H1646 + 1647 549 2 0.42380 1.14200 2.38000 17.64900 # H1647 + 1648 550 1 -0.84760 19.33700 10.61800 20.89500 # O1648 + 1649 550 2 0.42380 18.71800 9.98000 20.38500 # H1649 + 1650 550 2 0.42380 19.87100 9.98700 21.49000 # H1650 + 1651 551 1 -0.84760 23.10600 20.60100 10.94400 # O1651 + 1652 551 2 0.42380 22.68600 21.50600 11.17000 # H1652 + 1653 551 2 0.42380 24.06800 20.87900 10.65200 # H1653 + 1654 552 1 -0.84760 6.03500 16.99200 11.67900 # O1654 + 1655 552 2 0.42380 6.02900 16.91100 12.69600 # H1655 + 1656 552 2 0.42380 7.02600 16.87900 11.58200 # H1656 + 1657 553 1 -0.84760 14.94700 21.44300 6.62700 # O1657 + 1658 553 2 0.42380 14.92500 22.43000 6.25800 # H1658 + 1659 553 2 0.42380 15.58100 20.90500 6.05900 # H1659 + 1660 554 1 -0.84760 14.98000 4.90300 7.11400 # O1660 + 1661 554 2 0.42380 15.82400 4.70100 7.63700 # H1661 + 1662 554 2 0.42380 14.34700 4.96400 7.92100 # H1662 + 1663 555 1 -0.84760 20.05200 -0.99600 17.74900 # O1663 + 1664 555 2 0.42380 20.19200 -0.12900 17.18600 # H1664 + 1665 555 2 0.42380 20.89300 -1.06300 18.29900 # H1665 + 1666 556 1 -0.84760 11.85200 4.54000 2.25200 # O1666 + 1667 556 2 0.42380 12.44000 5.36300 2.08600 # H1667 + 1668 556 2 0.42380 11.90700 4.29600 3.22700 # H1668 + 1669 557 1 -0.84760 17.98800 22.11400 20.54600 # O1669 + 1670 557 2 0.42380 17.67100 22.39100 19.61700 # H1670 + 1671 557 2 0.42380 18.24200 21.12100 20.49900 # H1671 + 1672 558 1 -0.84760 3.61300 26.15900 18.97200 # O1672 + 1673 558 2 0.42380 3.64900 26.51100 18.02800 # H1673 + 1674 558 2 0.42380 3.07800 26.89500 19.40700 # H1674 + 1675 559 1 -0.84760 29.72700 15.51600 11.32600 # O1675 + 1676 559 2 0.42380 29.41100 14.63400 11.75400 # H1676 + 1677 559 2 0.42380 29.08400 16.31800 11.43700 # H1677 + 1678 560 1 -0.84760 21.70000 9.16900 18.44000 # O1678 + 1679 560 2 0.42380 21.31600 9.64500 19.23400 # H1679 + 1680 560 2 0.42380 22.73100 9.33200 18.52500 # H1680 + 1681 561 1 -0.84760 9.36300 27.67800 22.83200 # O1681 + 1682 561 2 0.42380 10.18300 27.84700 23.43400 # H1682 + 1683 561 2 0.42380 9.14100 28.62500 22.48900 # H1683 + 1684 562 1 -0.84760 7.20200 4.15200 8.89600 # O1684 + 1685 562 2 0.42380 6.28100 4.29900 9.26200 # H1685 + 1686 562 2 0.42380 7.07300 3.41500 8.14800 # H1686 + 1687 563 1 -0.84760 19.74900 11.57900 0.04800 # O1687 + 1688 563 2 0.42380 20.20600 11.19700 0.83900 # H1688 + 1689 563 2 0.42380 19.59500 12.54200 0.06600 # H1689 + 1690 564 1 -0.84760 1.82800 25.07400 14.50200 # O1690 + 1691 564 2 0.42380 2.07200 25.93600 13.92700 # H1691 + 1692 564 2 0.42380 1.96400 25.33100 15.47900 # H1692 + 1693 565 1 -0.84760 15.39500 13.78000 27.35300 # O1693 + 1694 565 2 0.42380 15.48800 14.31200 28.16700 # H1694 + 1695 565 2 0.42380 16.19800 13.89700 26.76500 # H1695 + 1696 566 1 -0.84760 11.47800 5.90100 21.32000 # O1696 + 1697 566 2 0.42380 11.10500 6.70400 21.76600 # H1697 + 1698 566 2 0.42380 12.11000 5.51400 21.99900 # H1698 + 1699 567 1 -0.84760 3.04600 10.66200 27.52000 # O1699 + 1700 567 2 0.42380 3.89800 10.08100 27.75900 # H1700 + 1701 567 2 0.42380 3.28400 11.62800 27.78000 # H1701 + 1702 568 1 -0.84760 17.51600 16.71200 20.54400 # O1702 + 1703 568 2 0.42380 18.12600 16.00700 20.16800 # H1703 + 1704 568 2 0.42380 17.18100 17.00200 19.67700 # H1704 + 1705 569 1 -0.84760 15.33900 19.82700 19.86000 # O1705 + 1706 569 2 0.42380 16.21900 19.60700 20.24300 # H1706 + 1707 569 2 0.42380 14.67100 19.92500 20.60900 # H1707 + 1708 570 1 -0.84760 14.67200 18.60600 25.48000 # O1708 + 1709 570 2 0.42380 14.99000 18.00700 26.27900 # H1709 + 1710 570 2 0.42380 14.11600 19.33500 25.98600 # H1710 + 1711 571 1 -0.84760 24.92900 24.16600 7.08500 # O1711 + 1712 571 2 0.42380 24.35000 24.04400 6.25700 # H1712 + 1713 571 2 0.42380 25.26500 23.23000 7.22300 # H1713 + 1714 572 1 -0.84760 12.40400 3.51600 7.29300 # O1714 + 1715 572 2 0.42380 12.40400 2.45400 7.21500 # H1715 + 1716 572 2 0.42380 11.84900 3.63600 8.09200 # H1716 + 1717 573 1 -0.84760 25.58900 2.66900 11.46900 # O1717 + 1718 573 2 0.42380 26.00800 1.83000 11.87600 # H1718 + 1719 573 2 0.42380 26.42500 3.17600 11.22200 # H1719 + 1720 574 1 -0.84760 2.77300 5.68000 6.76500 # O1720 + 1721 574 2 0.42380 1.88000 6.04800 6.83700 # H1721 + 1722 574 2 0.42380 3.16700 5.89800 7.64900 # H1722 + 1723 575 1 -0.84760 16.17700 5.49100 1.78900 # O1723 + 1724 575 2 0.42380 16.55900 5.20300 0.90100 # H1724 + 1725 575 2 0.42380 15.14800 5.43800 1.63700 # H1725 + 1726 576 1 -0.84760 13.81100 21.52500 17.30200 # O1726 + 1727 576 2 0.42380 14.43200 21.33700 16.49600 # H1727 + 1728 576 2 0.42380 14.35300 21.02100 18.06500 # H1728 + 1729 577 1 -0.84760 22.00300 19.23800 14.66100 # O1729 + 1730 577 2 0.42380 22.78700 19.26500 14.01200 # H1730 + 1731 577 2 0.42380 21.40800 19.93100 14.44600 # H1731 + 1732 578 1 -0.84760 22.73300 15.82100 1.69000 # O1732 + 1733 578 2 0.42380 23.09700 14.98000 2.20600 # H1733 + 1734 578 2 0.42380 23.60300 16.28600 1.32800 # H1734 + 1735 579 1 -0.84760 10.08200 20.27600 4.78000 # O1735 + 1736 579 2 0.42380 9.07200 20.17000 4.75100 # H1736 + 1737 579 2 0.42380 10.38700 19.46800 4.21400 # H1737 + 1738 580 1 -0.84760 22.50600 11.35600 20.48900 # O1738 + 1739 580 2 0.42380 22.13700 10.75900 21.24700 # H1739 + 1740 580 2 0.42380 23.38900 10.94600 20.18700 # H1740 + 1741 581 1 -0.84760 17.79800 3.60400 21.72000 # O1741 + 1742 581 2 0.42380 16.96900 3.70100 21.11100 # H1742 + 1743 581 2 0.42380 18.50600 3.98000 21.00300 # H1743 + 1744 582 1 -0.84760 27.14600 14.91000 16.23300 # O1744 + 1745 582 2 0.42380 26.21500 14.93400 16.70800 # H1745 + 1746 582 2 0.42380 27.81000 15.16000 16.98800 # H1746 + 1747 583 1 -0.84760 9.19700 23.05800 19.72700 # O1747 + 1748 583 2 0.42380 10.07300 23.46200 19.27300 # H1748 + 1749 583 2 0.42380 8.68200 22.71000 18.95800 # H1749 + 1750 584 1 -0.84760 15.75300 23.65600 23.56400 # O1750 + 1751 584 2 0.42380 16.48200 24.35700 23.34800 # H1751 + 1752 584 2 0.42380 14.94500 24.23900 23.93200 # H1752 + 1753 585 1 -0.84760 10.50700 5.14600 8.78400 # O1753 + 1754 585 2 0.42380 10.14600 4.50100 8.12300 # H1754 + 1755 585 2 0.42380 10.02600 6.03200 8.65200 # H1755 + 1756 586 1 -0.84760 13.66100 19.26900 13.94000 # O1756 + 1757 586 2 0.42380 12.94800 19.02800 13.29400 # H1757 + 1758 586 2 0.42380 14.61700 19.32400 13.55200 # H1758 + 1759 587 1 -0.84760 5.45300 13.15900 17.18000 # O1759 + 1760 587 2 0.42380 6.16700 13.81100 17.30800 # H1760 + 1761 587 2 0.42380 5.01600 13.57000 16.35300 # H1761 + 1762 588 1 -0.84760 10.59700 27.87900 29.62600 # O1762 + 1763 588 2 0.42380 9.90000 28.34900 30.26100 # H1763 + 1764 588 2 0.42380 11.34600 27.39200 30.13900 # H1764 + 1765 589 1 -0.84760 29.41400 0.32500 6.04600 # O1765 + 1766 589 2 0.42380 29.95800 0.06400 5.27200 # H1766 + 1767 589 2 0.42380 29.91600 1.06500 6.42700 # H1767 + 1768 590 1 -0.84760 27.98300 8.36600 15.01800 # O1768 + 1769 590 2 0.42380 28.91000 8.58500 14.76700 # H1769 + 1770 590 2 0.42380 27.34400 8.99000 14.51800 # H1770 + 1771 591 1 -0.84760 28.20700 15.05600 25.54700 # O1771 + 1772 591 2 0.42380 28.07800 15.96700 25.21900 # H1772 + 1773 591 2 0.42380 28.47600 14.66200 24.64300 # H1773 + 1774 592 1 -0.84760 22.33400 15.75800 23.11100 # O1774 + 1775 592 2 0.42380 21.86400 15.13100 22.51800 # H1775 + 1776 592 2 0.42380 22.22300 15.15000 23.92300 # H1776 + 1777 593 1 -0.84760 23.88600 1.10000 13.45000 # O1777 + 1778 593 2 0.42380 24.23200 1.03400 14.40700 # H1778 + 1779 593 2 0.42380 24.34300 0.46000 12.73900 # H1779 + 1780 594 1 -0.84760 7.85100 10.72000 29.97400 # O1780 + 1781 594 2 0.42380 8.53400 9.94800 29.99700 # H1781 + 1782 594 2 0.42380 6.93000 10.30700 29.94400 # H1782 + 1783 595 1 -0.84760 24.37900 19.47800 12.86200 # O1783 + 1784 595 2 0.42380 23.86900 19.92300 12.05700 # H1784 + 1785 595 2 0.42380 24.72500 18.54500 12.60800 # H1785 + 1786 596 1 -0.84760 8.99300 7.80100 10.34700 # O1786 + 1787 596 2 0.42380 9.99700 7.68000 10.39100 # H1787 + 1788 596 2 0.42380 8.73100 8.59600 10.87200 # H1788 + 1789 597 1 -0.84760 20.30200 23.46300 4.91100 # O1789 + 1790 597 2 0.42380 20.23600 23.93100 5.85400 # H1790 + 1791 597 2 0.42380 20.68400 24.26700 4.37200 # H1791 + 1792 598 1 -0.84760 19.80700 12.01600 18.55300 # O1792 + 1793 598 2 0.42380 20.82600 11.98000 18.61000 # H1793 + 1794 598 2 0.42380 19.58400 11.85300 19.56000 # H1794 + 1795 599 1 -0.84760 7.70400 21.14200 17.75300 # O1795 + 1796 599 2 0.42380 7.49400 20.32500 17.20700 # H1796 + 1797 599 2 0.42380 8.60900 21.04000 18.18300 # H1797 + 1798 600 1 -0.84760 20.03700 20.34500 9.75400 # O1798 + 1799 600 2 0.42380 20.81700 20.30800 9.07400 # H1799 + 1800 600 2 0.42380 19.60100 21.27800 9.58700 # H1800 + 1801 601 1 -0.84760 4.53600 10.29600 24.99400 # O1801 + 1802 601 2 0.42380 4.15600 11.01900 25.62200 # H1802 + 1803 601 2 0.42380 4.22900 10.25000 24.09500 # H1803 + 1804 602 1 -0.84760 20.20300 8.66200 2.26500 # O1804 + 1805 602 2 0.42380 21.17600 8.67800 1.89000 # H1805 + 1806 602 2 0.42380 20.07200 7.67300 2.16600 # H1806 + 1807 603 1 -0.84760 4.48000 20.89100 23.42100 # O1807 + 1808 603 2 0.42380 3.86700 20.27400 23.90400 # H1808 + 1809 603 2 0.42380 5.34700 20.73000 23.80300 # H1809 + 1810 604 1 -0.84760 -0.79400 13.79100 3.31000 # O1810 + 1811 604 2 0.42380 -1.21400 12.91900 3.18900 # H1811 + 1812 604 2 0.42380 -0.59700 13.75300 4.34300 # H1812 + 1813 605 1 -0.84760 16.63200 24.97200 6.11700 # O1813 + 1814 605 2 0.42380 16.24200 24.04600 6.11900 # H1814 + 1815 605 2 0.42380 16.13200 25.48200 6.83100 # H1815 + 1816 606 1 -0.84760 12.84600 14.23600 26.88500 # O1816 + 1817 606 2 0.42380 12.95400 13.25800 26.58000 # H1817 + 1818 606 2 0.42380 13.84900 14.46600 26.93300 # H1818 + 1819 607 1 -0.84760 8.91300 28.57900 16.66400 # O1819 + 1820 607 2 0.42380 9.83600 28.95000 16.89200 # H1820 + 1821 607 2 0.42380 8.60100 27.82600 17.23400 # H1821 + 1822 608 1 -0.84760 4.73900 17.66800 21.47000 # O1822 + 1823 608 2 0.42380 5.43000 17.54300 20.75500 # H1823 + 1824 608 2 0.42380 4.05800 18.20600 21.02000 # H1824 + 1825 609 1 -0.84760 22.72000 14.32000 18.24400 # O1825 + 1826 609 2 0.42380 21.75500 14.16700 18.09800 # H1826 + 1827 609 2 0.42380 23.11800 13.42600 18.50500 # H1827 + 1828 610 1 -0.84760 27.30700 0.98900 21.65200 # O1828 + 1829 610 2 0.42380 27.11700 0.68300 20.71800 # H1829 + 1830 610 2 0.42380 28.22900 0.70400 21.89600 # H1830 + 1831 611 1 -0.84760 12.03700 13.03000 6.86600 # O1831 + 1832 611 2 0.42380 12.97800 12.78900 7.29300 # H1832 + 1833 611 2 0.42380 11.91000 12.28200 6.25600 # H1833 + 1834 612 1 -0.84760 27.48000 24.59700 4.56500 # O1834 + 1835 612 2 0.42380 27.99100 24.89700 5.40600 # H1835 + 1836 612 2 0.42380 26.47500 24.85300 4.64600 # H1836 + 1837 613 1 -0.84760 12.63200 12.30900 19.19100 # O1837 + 1838 613 2 0.42380 11.75700 12.17800 19.61400 # H1838 + 1839 613 2 0.42380 12.38700 12.44000 18.23500 # H1839 + 1840 614 1 -0.84760 0.49800 4.06900 6.11100 # O1840 + 1841 614 2 0.42380 1.47900 3.78500 6.19400 # H1841 + 1842 614 2 0.42380 0.08100 4.01700 7.01900 # H1842 + 1843 615 1 -0.84760 3.37300 23.46700 13.07800 # O1843 + 1844 615 2 0.42380 3.07200 24.19300 12.42400 # H1844 + 1845 615 2 0.42380 2.92700 23.89600 13.86000 # H1845 + 1846 616 1 -0.84760 29.44500 25.39100 29.60400 # O1846 + 1847 616 2 0.42380 28.81600 25.69900 30.25100 # H1847 + 1848 616 2 0.42380 29.11000 24.96700 28.69700 # H1848 + 1849 617 1 -0.84760 9.04800 23.00000 24.32700 # O1849 + 1850 617 2 0.42380 8.86800 23.84500 24.87600 # H1850 + 1851 617 2 0.42380 9.56500 23.11000 23.51100 # H1851 + 1852 618 1 -0.84760 11.70500 6.73500 17.70600 # O1852 + 1853 618 2 0.42380 12.28500 6.44200 18.51700 # H1853 + 1854 618 2 0.42380 12.00300 6.01000 16.99600 # H1854 + 1855 619 1 -0.84760 5.41100 11.28000 21.91600 # O1855 + 1856 619 2 0.42380 5.59900 10.86900 20.90900 # H1856 + 1857 619 2 0.42380 6.28800 11.07700 22.44500 # H1857 + 1858 620 1 -0.84760 21.54600 14.16700 0.21200 # O1858 + 1859 620 2 0.42380 21.16100 13.58400 0.94600 # H1859 + 1860 620 2 0.42380 22.07400 14.87300 0.70100 # H1860 + 1861 621 1 -0.84760 26.64900 18.89600 10.73100 # O1861 + 1862 621 2 0.42380 26.38700 18.65600 11.61700 # H1862 + 1863 621 2 0.42380 26.76700 18.11000 10.22400 # H1863 + 1864 622 1 -0.84760 22.30600 0.74100 7.56700 # O1864 + 1865 622 2 0.42380 21.52400 1.32400 7.87000 # H1865 + 1866 622 2 0.42380 23.09500 1.13300 8.10200 # H1866 + 1867 623 1 -0.84760 18.77200 5.39900 28.79900 # O1867 + 1868 623 2 0.42380 18.08100 4.69100 29.06400 # H1868 + 1869 623 2 0.42380 18.14500 6.17400 28.64200 # H1869 + 1870 624 1 -0.84760 -0.22200 15.25500 23.14000 # O1870 + 1871 624 2 0.42380 0.25800 15.29900 22.23100 # H1871 + 1872 624 2 0.42380 0.07500 16.16500 23.55300 # H1872 + 1873 625 1 -0.84760 10.89700 17.61800 15.00500 # O1873 + 1874 625 2 0.42380 11.76800 17.59100 14.50900 # H1874 + 1875 625 2 0.42380 11.13100 17.97600 15.91500 # H1875 + 1876 626 1 -0.84760 5.31400 21.75700 11.67100 # O1876 + 1877 626 2 0.42380 5.36800 21.97300 12.55700 # H1877 + 1878 626 2 0.42380 5.41100 22.58500 11.23400 # H1878 + 1879 627 1 -0.84760 23.44300 22.96800 3.19800 # O1879 + 1880 627 2 0.42380 23.04000 23.33700 2.35600 # H1880 + 1881 627 2 0.42380 23.93200 22.18200 2.77500 # H1881 + 1882 628 1 -0.84760 25.28400 17.14300 27.44500 # O1882 + 1883 628 2 0.42380 24.70100 17.03000 28.28200 # H1883 + 1884 628 2 0.42380 24.64800 17.61900 26.83200 # H1884 + 1885 629 1 -0.84760 26.65400 3.82400 27.02600 # O1885 + 1886 629 2 0.42380 26.20600 3.53400 26.13500 # H1886 + 1887 629 2 0.42380 25.79300 4.02500 27.60000 # H1887 + 1888 630 1 -0.84760 19.16200 15.67800 10.32100 # O1888 + 1889 630 2 0.42380 19.77100 16.02000 9.59300 # H1889 + 1890 630 2 0.42380 19.16500 16.16900 11.16600 # H1890 + 1891 631 1 -0.84760 27.70400 12.60300 -0.34200 # O1891 + 1892 631 2 0.42380 27.97300 13.58300 -0.54300 # H1892 + 1893 631 2 0.42380 27.61100 12.17100 -1.29500 # H1893 + 1894 632 1 -0.84760 1.17600 21.82200 11.66500 # O1894 + 1895 632 2 0.42380 1.42500 21.09800 12.32700 # H1895 + 1896 632 2 0.42380 0.99000 22.57800 12.35900 # H1896 + 1897 633 1 -0.84760 -0.71000 18.00300 22.82400 # O1897 + 1898 633 2 0.42380 -0.34300 18.92200 23.06400 # H1898 + 1899 633 2 0.42380 -1.57500 18.15700 22.29600 # H1899 + 1900 634 1 -0.84760 21.16000 22.09300 2.65100 # O1900 + 1901 634 2 0.42380 21.77400 21.30800 2.42500 # H1901 + 1902 634 2 0.42380 20.71100 21.82100 3.46300 # H1902 + 1903 635 1 -0.84760 5.96000 -0.54800 17.77200 # O1903 + 1904 635 2 0.42380 6.12100 0.41500 17.41400 # H1904 + 1905 635 2 0.42380 5.22100 -0.59300 18.47600 # H1905 + 1906 636 1 -0.84760 17.11800 4.29100 17.54400 # O1906 + 1907 636 2 0.42380 16.98800 3.52500 18.21000 # H1907 + 1908 636 2 0.42380 17.30000 4.00300 16.56900 # H1908 + 1909 637 1 -0.84760 0.93400 23.30900 23.29900 # O1909 + 1910 637 2 0.42380 0.28800 24.10500 23.16000 # H1910 + 1911 637 2 0.42380 0.70200 22.38100 22.84900 # H1911 + 1912 638 1 -0.84760 19.73200 9.67500 26.94400 # O1912 + 1913 638 2 0.42380 19.27100 10.19500 27.67700 # H1913 + 1914 638 2 0.42380 20.75700 9.68400 27.07100 # H1914 + 1915 639 1 -0.84760 22.17200 -0.58400 22.45600 # O1915 + 1916 639 2 0.42380 21.61000 -0.46900 23.30900 # H1916 + 1917 639 2 0.42380 23.12100 -0.79600 22.77400 # H1917 + 1918 640 1 -0.84760 11.21700 22.37800 22.31500 # O1918 + 1919 640 2 0.42380 11.47000 22.40000 21.36200 # H1919 + 1920 640 2 0.42380 11.39400 23.32300 22.60600 # H1920 + 1921 641 1 -0.84760 7.18900 29.48300 24.33500 # O1921 + 1922 641 2 0.42380 7.52700 29.13400 25.18700 # H1922 + 1923 641 2 0.42380 6.29000 29.74100 24.78900 # H1923 + 1924 642 1 -0.84760 21.71400 1.70700 27.35900 # O1924 + 1925 642 2 0.42380 20.92800 1.86900 28.01200 # H1925 + 1926 642 2 0.42380 22.55400 1.99200 27.83900 # H1926 + 1927 643 1 -0.84760 1.73600 9.28600 17.29200 # O1927 + 1928 643 2 0.42380 0.93500 8.99000 16.69900 # H1928 + 1929 643 2 0.42380 1.85200 8.54800 17.93100 # H1929 + 1930 644 1 -0.84760 2.52400 19.65100 29.36500 # O1930 + 1931 644 2 0.42380 2.62800 20.03500 30.28900 # H1931 + 1932 644 2 0.42380 2.22400 18.68000 29.54500 # H1932 + 1933 645 1 -0.84760 19.07900 2.71800 23.99400 # O1933 + 1934 645 2 0.42380 19.45500 3.57100 24.35100 # H1934 + 1935 645 2 0.42380 18.48200 3.02000 23.26300 # H1935 + 1936 646 1 -0.84760 16.52300 0.10800 29.68600 # O1936 + 1937 646 2 0.42380 15.53000 0.23400 29.70700 # H1937 + 1938 646 2 0.42380 16.81900 -0.87000 29.84600 # H1938 + 1939 647 1 -0.84760 8.02200 1.91400 25.66800 # O1939 + 1940 647 2 0.42380 8.20700 2.49500 26.41500 # H1940 + 1941 647 2 0.42380 8.37100 1.06900 25.91100 # H1941 + 1942 648 1 -0.84760 9.14200 19.99600 14.37100 # O1942 + 1943 648 2 0.42380 9.84400 19.26700 14.18600 # H1943 + 1944 648 2 0.42380 9.72500 20.72300 14.75800 # H1944 + 1945 649 1 -0.84760 23.47000 -0.20900 2.08800 # O1945 + 1946 649 2 0.42380 23.85900 -0.40600 3.00500 # H1946 + 1947 649 2 0.42380 23.95700 0.65000 1.71100 # H1947 + 1948 650 1 -0.84760 5.52300 8.09700 23.48400 # O1948 + 1949 650 2 0.42380 6.19600 7.51400 23.14200 # H1949 + 1950 650 2 0.42380 5.43500 8.79100 22.79800 # H1950 + 1951 651 1 -0.84760 2.62600 16.75000 10.24000 # O1951 + 1952 651 2 0.42380 2.70600 17.32700 11.12900 # H1952 + 1953 651 2 0.42380 2.95900 15.82600 10.49100 # H1953 + 1954 652 1 -0.84760 11.19100 16.79700 26.60100 # O1954 + 1955 652 2 0.42380 11.92700 16.07000 26.47100 # H1955 + 1956 652 2 0.42380 10.82100 17.24400 25.73600 # H1956 + 1957 653 1 -0.84760 -0.48700 25.51900 17.05000 # O1957 + 1958 653 2 0.42380 0.20200 24.74700 17.04600 # H1958 + 1959 653 2 0.42380 -0.03700 26.41000 17.18200 # H1959 + 1960 654 1 -0.84760 5.73400 4.34100 16.50900 # O1960 + 1961 654 2 0.42380 5.54000 5.28500 16.76600 # H1961 + 1962 654 2 0.42380 4.98100 3.72600 16.81300 # H1962 + 1963 655 1 -0.84760 21.92600 5.03600 25.65800 # O1963 + 1964 655 2 0.42380 22.19600 4.70100 24.73700 # H1964 + 1965 655 2 0.42380 21.33700 4.28900 26.14200 # H1965 + 1966 656 1 -0.84760 21.02500 17.42000 17.74300 # O1966 + 1967 656 2 0.42380 20.79000 16.47600 17.94800 # H1967 + 1968 656 2 0.42380 20.95100 17.40600 16.73200 # H1968 + 1969 657 1 -0.84760 5.03800 7.69900 7.73600 # O1969 + 1970 657 2 0.42380 4.30100 8.08800 7.11900 # H1970 + 1971 657 2 0.42380 4.79300 7.91400 8.67800 # H1971 + 1972 658 1 -0.84760 1.44200 5.67000 20.84000 # O1972 + 1973 658 2 0.42380 1.55200 4.82000 20.29900 # H1973 + 1974 658 2 0.42380 0.46000 5.92300 20.72800 # H1974 + 1975 659 1 -0.84760 24.06400 12.94600 2.13700 # O1975 + 1976 659 2 0.42380 24.62100 13.66400 2.60700 # H1976 + 1977 659 2 0.42380 24.82000 12.35200 1.90600 # H1977 + 1978 660 1 -0.84760 2.56700 3.72000 0.18100 # O1978 + 1979 660 2 0.42380 1.70100 4.12400 -0.12600 # H1979 + 1980 660 2 0.42380 2.82500 4.04200 1.07800 # H1980 + 1981 661 1 -0.84760 -0.44700 18.58700 2.12200 # O1981 + 1982 661 2 0.42380 -1.24400 18.67000 1.57800 # H1982 + 1983 661 2 0.42380 0.27000 19.27700 1.88700 # H1983 + 1984 662 1 -0.84760 1.90300 5.38700 13.80700 # O1984 + 1985 662 2 0.42380 1.38900 6.18700 13.51700 # H1985 + 1986 662 2 0.42380 2.19500 5.12600 12.89400 # H1986 + 1987 663 1 -0.84760 18.77800 13.20600 28.18900 # O1987 + 1988 663 2 0.42380 17.91900 13.64100 27.85300 # H1988 + 1989 663 2 0.42380 19.56500 13.79800 27.80900 # H1989 + 1990 664 1 -0.84760 23.21900 4.65900 0.68700 # O1990 + 1991 664 2 0.42380 24.08900 5.05700 0.94000 # H1991 + 1992 664 2 0.42380 22.77600 5.22500 -0.01700 # H1992 + 1993 665 1 -0.84760 -0.08900 26.08200 26.11000 # O1993 + 1994 665 2 0.42380 -0.05800 25.03500 26.12000 # H1994 + 1995 665 2 0.42380 -0.87900 26.39100 25.57400 # H1995 + 1996 666 1 -0.84760 27.84000 27.57100 0.25400 # O1996 + 1997 666 2 0.42380 27.81700 26.64200 0.75400 # H1997 + 1998 666 2 0.42380 26.96200 28.06900 0.63600 # H1998 + 1999 667 1 -0.84760 16.24000 24.30800 20.74600 # O1999 + 2000 667 2 0.42380 16.50500 23.30200 20.84600 # H2000 + 2001 667 2 0.42380 15.27500 24.30800 21.02500 # H2001 + 2002 668 1 -0.84760 29.19000 12.26700 5.28000 # O2002 + 2003 668 2 0.42380 30.00800 11.72600 5.55300 # H2003 + 2004 668 2 0.42380 28.92900 11.83600 4.41100 # H2004 + 2005 669 1 -0.84760 29.74400 9.66200 13.37300 # O2005 + 2006 669 2 0.42380 29.73700 10.38500 14.12300 # H2006 + 2007 669 2 0.42380 30.21400 10.08600 12.56700 # H2007 + 2008 670 1 -0.84760 1.60800 10.91900 22.00000 # O2008 + 2009 670 2 0.42380 2.53100 11.33100 22.12900 # H2009 + 2010 670 2 0.42380 1.05700 10.98000 22.88500 # H2010 + 2011 671 1 -0.84760 18.57000 25.31600 25.79400 # O2011 + 2012 671 2 0.42380 18.52700 24.32700 25.73000 # H2012 + 2013 671 2 0.42380 18.29500 25.74400 24.86000 # H2013 + 2014 672 1 -0.84760 0.14800 2.78100 25.53200 # O2014 + 2015 672 2 0.42380 0.00400 3.72700 25.64800 # H2015 + 2016 672 2 0.42380 1.02400 2.44400 25.86700 # H2016 + 2017 673 1 -0.84760 3.56600 13.36300 28.05200 # O2017 + 2018 673 2 0.42380 3.93200 14.24500 28.48500 # H2018 + 2019 673 2 0.42380 2.76100 13.22000 28.68700 # H2019 + 2020 674 1 -0.84760 28.31900 16.08400 19.28600 # O2020 + 2021 674 2 0.42380 28.69600 15.42400 19.97700 # H2021 + 2022 674 2 0.42380 28.27600 17.06100 19.68400 # H2022 + 2023 675 1 -0.84760 23.17300 30.05100 16.60800 # O2023 + 2024 675 2 0.42380 23.11900 29.01600 16.71800 # H2024 + 2025 675 2 0.42380 22.35500 30.20300 16.00000 # H2025 + 2026 676 1 -0.84760 1.30000 5.69800 24.43900 # O2026 + 2027 676 2 0.42380 0.63300 5.47800 23.74600 # H2027 + 2028 676 2 0.42380 2.08700 6.17600 23.92400 # H2028 + 2029 677 1 -0.84760 1.42000 -0.07600 26.06900 # O2029 + 2030 677 2 0.42380 1.50800 -1.12100 26.17700 # H2030 + 2031 677 2 0.42380 0.81800 0.05000 26.84600 # H2031 + 2032 678 1 -0.84760 7.05800 7.32500 3.90700 # O2032 + 2033 678 2 0.42380 7.47300 7.81700 4.71900 # H2033 + 2034 678 2 0.42380 7.36200 6.41200 4.09600 # H2034 + 2035 679 1 -0.84760 8.60500 11.27400 14.18600 # O2035 + 2036 679 2 0.42380 8.33400 12.22700 13.93500 # H2036 + 2037 679 2 0.42380 8.75800 10.67300 13.31900 # H2037 + 2038 680 1 -0.84760 21.29500 24.95300 16.15300 # O2038 + 2039 680 2 0.42380 21.19600 23.96400 16.32100 # H2039 + 2040 680 2 0.42380 21.97300 25.14200 16.94800 # H2040 + 2041 681 1 -0.84760 26.80700 13.01900 4.59200 # O2041 + 2042 681 2 0.42380 27.58400 12.56500 5.14400 # H2042 + 2043 681 2 0.42380 27.08500 13.93400 5.10700 # H2043 + 2044 682 1 -0.84760 24.38700 1.49700 5.75700 # O2044 + 2045 682 2 0.42380 23.96900 0.58400 5.99000 # H2045 + 2046 682 2 0.42380 25.05300 1.76300 6.39600 # H2046 + 2047 683 1 -0.84760 4.71700 25.48400 26.84500 # O2047 + 2048 683 2 0.42380 4.31700 26.24600 27.32200 # H2048 + 2049 683 2 0.42380 4.37000 24.65700 27.28600 # H2049 + 2050 684 1 -0.84760 25.27600 16.20800 18.59800 # O2050 + 2051 684 2 0.42380 25.56200 16.12600 19.54300 # H2051 + 2052 684 2 0.42380 24.50400 15.60800 18.41800 # H2052 + 2053 685 1 -0.84760 11.03700 14.66000 0.63800 # O2053 + 2054 685 2 0.42380 10.83700 14.73300 -0.35700 # H2054 + 2055 685 2 0.42380 11.06500 13.68600 0.81800 # H2055 + 2056 686 1 -0.84760 25.03400 19.44600 19.16600 # O2056 + 2057 686 2 0.42380 24.05600 19.21800 18.91100 # H2057 + 2058 686 2 0.42380 25.01900 20.37000 18.84000 # H2058 + 2059 687 1 -0.84760 12.16800 4.75800 15.85200 # O2059 + 2060 687 2 0.42380 11.80000 4.04200 16.34200 # H2060 + 2061 687 2 0.42380 11.38700 5.17800 15.35600 # H2061 + 2062 688 1 -0.84760 24.08400 19.84100 16.26600 # O2062 + 2063 688 2 0.42380 24.68200 19.09500 16.57300 # H2063 + 2064 688 2 0.42380 23.32700 19.51500 15.77800 # H2064 + 2065 689 1 -0.84760 3.21400 8.80100 6.31300 # O2065 + 2066 689 2 0.42380 3.95200 8.95100 5.60900 # H2066 + 2067 689 2 0.42380 3.08200 9.67400 6.81500 # H2067 + 2068 690 1 -0.84760 1.95700 14.14100 8.85600 # O2068 + 2069 690 2 0.42380 1.69300 13.55800 9.63800 # H2069 + 2070 690 2 0.42380 1.71200 15.11200 9.09500 # H2070 + 2071 691 1 -0.84760 28.36400 0.14300 14.57400 # O2071 + 2072 691 2 0.42380 28.43900 -0.85100 14.44700 # H2072 + 2073 691 2 0.42380 28.55000 0.23800 15.60900 # H2073 + 2074 692 1 -0.84760 13.02400 22.22100 25.78100 # O2074 + 2075 692 2 0.42380 12.32600 21.85900 25.13800 # H2075 + 2076 692 2 0.42380 12.91600 21.77900 26.66000 # H2076 + 2077 693 1 -0.84760 19.23800 17.50500 29.03900 # O2077 + 2078 693 2 0.42380 19.61700 18.37400 28.63800 # H2078 + 2079 693 2 0.42380 18.97800 16.84100 28.29300 # H2079 + 2080 694 1 -0.84760 20.90500 27.74300 6.43600 # O2080 + 2081 694 2 0.42380 21.06000 27.37400 5.53500 # H2081 + 2082 694 2 0.42380 20.46100 28.57700 6.30200 # H2082 + 2083 695 1 -0.84760 9.97300 0.17100 1.97500 # O2083 + 2084 695 2 0.42380 10.51400 -0.63400 1.74000 # H2084 + 2085 695 2 0.42380 9.03200 -0.04200 2.26900 # H2085 + 2086 696 1 -0.84760 26.75400 14.96000 22.82600 # O2086 + 2087 696 2 0.42380 26.25400 14.87300 21.96100 # H2087 + 2088 696 2 0.42380 26.42300 15.50800 23.58200 # H2088 + 2089 697 1 -0.84760 5.71300 7.36000 16.36000 # O2089 + 2090 697 2 0.42380 5.93400 6.69200 17.06200 # H2090 + 2091 697 2 0.42380 5.57600 8.28600 16.80300 # H2091 + 2092 698 1 -0.84760 3.23300 2.65400 15.49000 # O2092 + 2093 698 2 0.42380 3.45700 2.26800 16.36900 # H2093 + 2094 698 2 0.42380 2.97600 3.56900 15.68500 # H2094 + 2095 699 1 -0.84760 15.03200 12.36000 3.08600 # O2095 + 2096 699 2 0.42380 15.82300 12.77100 3.55700 # H2096 + 2097 699 2 0.42380 14.73200 13.04800 2.43600 # H2097 + 2098 700 1 -0.84760 16.15000 24.98600 0.48600 # O2098 + 2099 700 2 0.42380 15.77800 24.17900 0.09600 # H2099 + 2100 700 2 0.42380 16.78100 25.26600 -0.23000 # H2100 + 2101 701 1 -0.84760 14.43800 7.83800 11.39700 # O2101 + 2102 701 2 0.42380 13.90400 7.24100 12.09000 # H2102 + 2103 701 2 0.42380 14.75200 8.69500 11.95200 # H2103 + 2104 702 1 -0.84760 0.99700 19.52600 18.22200 # O2104 + 2105 702 2 0.42380 1.95800 19.21500 18.40400 # H2105 + 2106 702 2 0.42380 0.69600 19.79400 19.08200 # H2106 + 2107 703 1 -0.84760 16.30600 17.56600 27.41500 # O2107 + 2108 703 2 0.42380 16.05600 16.65700 27.84200 # H2108 + 2109 703 2 0.42380 17.31900 17.77000 27.19500 # H2109 + 2110 704 1 -0.84760 18.94300 28.33100 29.18900 # O2110 + 2111 704 2 0.42380 18.70700 28.75200 30.06700 # H2111 + 2112 704 2 0.42380 19.91900 28.21300 29.11500 # H2112 + 2113 705 1 -0.84760 14.84300 1.93100 17.50600 # O2113 + 2114 705 2 0.42380 15.23800 1.06300 17.17300 # H2114 + 2115 705 2 0.42380 13.87600 1.60700 17.40200 # H2115 + 2116 706 1 -0.84760 17.72600 2.28600 8.42300 # O2116 + 2117 706 2 0.42380 16.90200 2.12000 7.84000 # H2117 + 2118 706 2 0.42380 18.42500 1.53000 8.36600 # H2118 + 2119 707 1 -0.84760 6.45800 29.20900 21.46100 # O2119 + 2120 707 2 0.42380 6.76400 28.87500 22.37000 # H2120 + 2121 707 2 0.42380 6.02700 28.47600 20.97400 # H2121 + 2122 708 1 -0.84760 0.46000 15.49500 1.81800 # O2122 + 2123 708 2 0.42380 -0.05500 14.68300 2.09300 # H2123 + 2124 708 2 0.42380 -0.28600 16.04800 1.46200 # H2124 + 2125 709 1 -0.84760 10.36800 19.79400 22.30400 # O2125 + 2126 709 2 0.42380 10.87200 20.66800 22.39900 # H2126 + 2127 709 2 0.42380 10.23800 19.44900 23.24500 # H2127 + 2128 710 1 -0.84760 2.72600 11.89400 6.09600 # O2128 + 2129 710 2 0.42380 3.50100 11.29700 6.28400 # H2129 + 2130 710 2 0.42380 3.08200 12.83400 6.23900 # H2130 + 2131 711 1 -0.84760 22.46300 22.56100 8.61400 # O2131 + 2132 711 2 0.42380 22.93600 21.72300 8.38100 # H2132 + 2133 711 2 0.42380 22.76600 23.35100 8.09200 # H2133 + 2134 712 1 -0.84760 12.33800 -0.14000 26.01900 # O2134 + 2135 712 2 0.42380 13.13100 0.43300 25.78800 # H2135 + 2136 712 2 0.42380 12.47900 -1.01500 25.54800 # H2136 + 2137 713 1 -0.84760 4.18500 3.69700 5.53000 # O2137 + 2138 713 2 0.42380 3.37600 3.45200 4.96800 # H2138 + 2139 713 2 0.42380 3.76700 4.40000 6.19500 # H2139 + 2140 714 1 -0.84760 24.69100 0.47500 8.96300 # O2140 + 2141 714 2 0.42380 24.71100 -0.45800 9.06100 # H2141 + 2142 714 2 0.42380 25.48000 0.71400 9.50500 # H2142 + 2143 715 1 -0.84760 21.53600 27.81900 17.15700 # O2143 + 2144 715 2 0.42380 20.87600 27.80500 16.37600 # H2144 + 2145 715 2 0.42380 21.06500 27.74000 18.01400 # H2145 + 2146 716 1 -0.84760 27.65300 16.88400 29.37400 # O2146 + 2147 716 2 0.42380 26.59900 16.91700 29.45700 # H2147 + 2148 716 2 0.42380 28.09300 16.07300 28.85600 # H2148 + 2149 717 1 -0.84760 1.93200 9.83300 4.00400 # O2149 + 2150 717 2 0.42380 1.96500 8.91200 4.40500 # H2150 + 2151 717 2 0.42380 1.47600 9.72800 3.07500 # H2151 + 2152 718 1 -0.84760 17.88200 28.63900 10.24600 # O2152 + 2153 718 2 0.42380 17.91600 29.51900 9.71400 # H2153 + 2154 718 2 0.42380 17.91500 27.82900 9.57200 # H2154 + 2155 719 1 -0.84760 25.88300 13.38800 19.14400 # O2155 + 2156 719 2 0.42380 26.77300 13.84800 19.39900 # H2156 + 2157 719 2 0.42380 25.10900 13.90300 18.75000 # H2157 + 2158 720 1 -0.84760 4.55800 12.13900 8.04500 # O2158 + 2159 720 2 0.42380 5.34200 12.80700 7.95000 # H2159 + 2160 720 2 0.42380 3.78800 12.68400 8.43400 # H2160 + 2161 721 1 -0.84760 5.39400 5.51200 25.28900 # O2161 + 2162 721 2 0.42380 5.26800 4.54800 25.58300 # H2162 + 2163 721 2 0.42380 5.43400 5.61700 24.27700 # H2163 + 2164 722 1 -0.84760 17.95400 21.11900 1.63900 # O2164 + 2165 722 2 0.42380 18.37700 21.91900 1.25300 # H2165 + 2166 722 2 0.42380 16.89300 21.23500 1.68800 # H2166 + 2167 723 1 -0.84760 9.57500 10.91500 9.53400 # O2167 + 2168 723 2 0.42380 10.34600 11.30200 9.99100 # H2168 + 2169 723 2 0.42380 10.03600 10.55100 8.69200 # H2169 + 2170 724 1 -0.84760 21.95700 13.22200 15.14600 # O2170 + 2171 724 2 0.42380 21.94000 14.04700 15.78600 # H2171 + 2172 724 2 0.42380 21.12000 12.60400 15.34100 # H2172 + 2173 725 1 -0.84760 19.22700 18.06900 25.35300 # O2173 + 2174 725 2 0.42380 19.31400 19.05000 25.55300 # H2174 + 2175 725 2 0.42380 19.25700 18.07200 24.41100 # H2175 + 2176 726 1 -0.84760 26.90300 1.16300 2.78400 # O2176 + 2177 726 2 0.42380 26.91300 0.15600 2.82300 # H2177 + 2178 726 2 0.42380 26.47500 1.50100 3.62800 # H2178 + 2179 727 1 -0.84760 8.12300 1.10700 4.21900 # O2179 + 2180 727 2 0.42380 7.97900 2.05800 4.07400 # H2180 + 2181 727 2 0.42380 8.62800 0.91100 5.07200 # H2181 + 2182 728 1 -0.84760 24.55400 2.42900 2.15600 # O2182 + 2183 728 2 0.42380 24.95200 2.40500 1.21700 # H2183 + 2184 728 2 0.42380 23.53700 2.37900 2.13500 # H2184 + 2185 729 1 -0.84760 23.25000 11.77400 8.41300 # O2185 + 2186 729 2 0.42380 22.37900 11.33200 8.55600 # H2186 + 2187 729 2 0.42380 23.91500 11.06400 8.31400 # H2187 + 2188 730 1 -0.84760 29.09400 12.51300 27.75300 # O2188 + 2189 730 2 0.42380 29.85100 12.07700 28.19800 # H2189 + 2190 730 2 0.42380 29.45400 13.32300 27.29400 # H2190 + 2191 731 1 -0.84760 28.72900 27.85500 25.34100 # O2191 + 2192 731 2 0.42380 28.50100 28.78200 25.87300 # H2192 + 2193 731 2 0.42380 28.82900 27.15400 26.09000 # H2193 + 2194 732 1 -0.84760 0.96000 16.58500 28.82500 # O2194 + 2195 732 2 0.42380 1.82200 16.24500 29.29200 # H2195 + 2196 732 2 0.42380 0.80000 15.76100 28.17800 # H2196 + 2197 733 1 -0.84760 8.23700 22.27700 1.83900 # O2197 + 2198 733 2 0.42380 8.66700 21.68400 2.53900 # H2198 + 2199 733 2 0.42380 8.38500 23.22200 2.23000 # H2199 + 2200 734 1 -0.84760 17.67200 18.47700 1.64000 # O2200 + 2201 734 2 0.42380 17.45900 19.48000 1.75900 # H2201 + 2202 734 2 0.42380 18.26800 18.28800 2.40200 # H2202 + 2203 735 1 -0.84760 29.62700 8.19700 28.35600 # O2203 + 2204 735 2 0.42380 29.30200 7.65400 27.52200 # H2204 + 2205 735 2 0.42380 30.68500 8.33600 28.20800 # H2205 + 2206 736 1 -0.84760 25.89200 18.12600 16.47200 # O2206 + 2207 736 2 0.42380 26.85700 18.04500 16.73700 # H2207 + 2208 736 2 0.42380 25.44400 17.33500 16.92100 # H2208 + 2209 737 1 -0.84760 18.13100 5.55400 24.78700 # O2209 + 2210 737 2 0.42380 17.46000 5.35000 24.08100 # H2210 + 2211 737 2 0.42380 17.90600 6.55500 25.03600 # H2211 + 2212 738 1 -0.84760 10.08500 11.61900 23.61800 # O2212 + 2213 738 2 0.42380 10.03200 10.74100 24.08500 # H2213 + 2214 738 2 0.42380 9.22900 11.69100 23.19700 # H2214 + 2215 739 1 -0.84760 14.30600 12.17100 15.93200 # O2215 + 2216 739 2 0.42380 14.08000 13.09100 15.44600 # H2216 + 2217 739 2 0.42380 14.24100 11.42100 15.18100 # H2217 + 2218 740 1 -0.84760 8.81000 14.19300 12.51200 # O2218 + 2219 740 2 0.42380 9.49000 14.04600 11.86000 # H2219 + 2220 740 2 0.42380 8.98900 15.15300 12.85600 # H2220 + 2221 741 1 -0.84760 14.78800 18.96800 16.39400 # O2221 + 2222 741 2 0.42380 13.79800 19.21900 16.30600 # H2222 + 2223 741 2 0.42380 14.91100 18.26900 15.65900 # H2223 + 2224 742 1 -0.84760 25.62000 23.70600 9.91100 # O2224 + 2225 742 2 0.42380 26.30400 23.90600 9.20200 # H2225 + 2226 742 2 0.42380 26.18500 23.66700 10.80600 # H2226 + 2227 743 1 -0.84760 22.87900 25.85800 13.06000 # O2227 + 2228 743 2 0.42380 22.57500 25.82100 14.01500 # H2228 + 2229 743 2 0.42380 22.38200 26.65800 12.72100 # H2229 + 2230 744 1 -0.84760 25.45900 28.98700 10.22500 # O2230 + 2231 744 2 0.42380 24.83800 28.34900 10.68800 # H2231 + 2232 744 2 0.42380 25.29000 28.91700 9.24400 # H2232 + 2233 745 1 -0.84760 17.35500 13.40700 8.81500 # O2233 + 2234 745 2 0.42380 17.28700 12.39100 8.92400 # H2234 + 2235 745 2 0.42380 17.99500 13.66200 9.54400 # H2235 + 2236 746 1 -0.84760 0.27800 7.20600 12.23400 # O2236 + 2237 746 2 0.42380 0.51500 8.16300 12.44300 # H2237 + 2238 746 2 0.42380 -0.68300 7.19400 11.95700 # H2238 + 2239 747 1 -0.84760 4.29000 1.99600 8.57700 # O2239 + 2240 747 2 0.42380 4.35100 1.99000 9.60900 # H2240 + 2241 747 2 0.42380 5.18600 1.78900 8.26700 # H2241 + 2242 748 1 -0.84760 28.20800 9.24900 10.44200 # O2242 + 2243 748 2 0.42380 27.36600 8.91200 9.90900 # H2243 + 2244 748 2 0.42380 27.91800 9.80900 11.22500 # H2244 + 2245 749 1 -0.84760 0.19800 10.32300 6.06600 # O2245 + 2246 749 2 0.42380 0.56300 9.43400 5.77200 # H2246 + 2247 749 2 0.42380 0.96300 11.02800 5.96400 # H2247 + 2248 750 1 -0.84760 28.52500 23.77100 20.34400 # O2248 + 2249 750 2 0.42380 27.57300 23.39600 20.36500 # H2249 + 2250 750 2 0.42380 28.50700 24.47300 19.56900 # H2250 + 2251 751 1 -0.84760 -0.59000 11.34800 -0.43000 # O2251 + 2252 751 2 0.42380 -0.47400 10.54200 -1.04400 # H2252 + 2253 751 2 0.42380 -1.46200 11.21200 0.06500 # H2253 + 2254 752 1 -0.84760 9.11900 4.02500 29.65600 # O2254 + 2255 752 2 0.42380 9.59700 3.29400 30.29600 # H2255 + 2256 752 2 0.42380 8.32200 4.28500 30.28800 # H2256 + 2257 753 1 -0.84760 16.63100 16.03300 2.70800 # O2257 + 2258 753 2 0.42380 16.15100 16.86900 2.38500 # H2258 + 2259 753 2 0.42380 17.28800 16.41900 3.39800 # H2259 + 2260 754 1 -0.84760 17.56900 7.61700 28.47100 # O2260 + 2261 754 2 0.42380 17.00200 8.17300 27.84300 # H2261 + 2262 754 2 0.42380 18.09300 8.34300 28.92900 # H2262 + 2263 755 1 -0.84760 6.78000 9.43800 9.19300 # O2263 + 2264 755 2 0.42380 6.99800 8.50200 9.12900 # H2264 + 2265 755 2 0.42380 6.74800 9.98600 8.39100 # H2265 + 2266 756 1 -0.84760 23.70200 16.38200 29.42700 # O2266 + 2267 756 2 0.42380 23.70300 15.86500 30.24000 # H2267 + 2268 756 2 0.42380 23.07000 17.10000 29.51000 # H2268 + 2269 757 1 -0.84760 7.27700 24.84000 27.49900 # O2269 + 2270 757 2 0.42380 6.86700 24.80300 26.56800 # H2270 + 2271 757 2 0.42380 7.77900 23.95200 27.60600 # H2271 + 2272 758 1 -0.84760 29.17300 6.54900 10.39700 # O2272 + 2273 758 2 0.42380 29.60000 7.08900 9.67700 # H2273 + 2274 758 2 0.42380 28.46600 7.27800 10.66900 # H2274 + 2275 759 1 -0.84760 27.49400 12.41100 9.87300 # O2275 + 2276 759 2 0.42380 27.65900 12.10800 10.86300 # H2276 + 2277 759 2 0.42380 27.58300 11.56500 9.30100 # H2277 + 2278 760 1 -0.84760 20.24700 25.57400 18.72900 # O2278 + 2279 760 2 0.42380 19.90600 26.05400 17.85700 # H2279 + 2280 760 2 0.42380 20.22100 24.58600 18.42600 # H2280 + 2281 761 1 -0.84760 16.78400 6.94700 12.26000 # O2281 + 2282 761 2 0.42380 16.08900 6.95400 11.51600 # H2282 + 2283 761 2 0.42380 16.34900 6.59700 13.07400 # H2283 + 2284 762 1 -0.84760 22.57000 25.63700 0.11600 # O2284 + 2285 762 2 0.42380 23.13600 26.11000 0.80500 # H2285 + 2286 762 2 0.42380 21.64300 25.56400 0.45100 # H2286 + 2287 763 1 -0.84760 9.65100 23.82600 5.82400 # O2287 + 2288 763 2 0.42380 9.02800 23.57900 5.10000 # H2288 + 2289 763 2 0.42380 10.50400 23.31300 5.75200 # H2289 + 2290 764 1 -0.84760 1.54200 8.65800 29.46900 # O2290 + 2291 764 2 0.42380 1.21000 7.76400 29.76200 # H2291 + 2292 764 2 0.42380 1.50600 8.84500 28.43500 # H2292 + 2293 765 1 -0.84760 13.12600 1.71300 20.73800 # O2293 + 2294 765 2 0.42380 12.95600 0.70400 20.78200 # H2294 + 2295 765 2 0.42380 12.24100 2.21000 20.64500 # H2295 + 2296 766 1 -0.84760 13.67400 3.09100 9.63500 # O2296 + 2297 766 2 0.42380 13.72300 2.14600 10.03500 # H2297 + 2298 766 2 0.42380 13.26900 3.72900 10.32700 # H2298 + 2299 767 1 -0.84760 19.04500 7.50400 10.40400 # O2299 + 2300 767 2 0.42380 18.37800 7.30500 11.10000 # H2300 + 2301 767 2 0.42380 18.60300 7.77400 9.55500 # H2301 + 2302 768 1 -0.84760 5.18700 9.60000 20.03400 # O2302 + 2303 768 2 0.42380 4.77200 8.74400 19.62400 # H2303 + 2304 768 2 0.42380 4.96100 10.40800 19.45600 # H2304 + 2305 769 1 -0.84760 29.84200 1.89000 12.29500 # O2305 + 2306 769 2 0.42380 29.66700 2.63300 12.96200 # H2306 + 2307 769 2 0.42380 29.95100 2.43200 11.41000 # H2307 + 2308 770 1 -0.84760 26.43400 5.46400 13.90200 # O2308 + 2309 770 2 0.42380 27.13100 4.83800 13.66200 # H2309 + 2310 770 2 0.42380 26.88700 6.36500 13.99100 # H2310 + 2311 771 1 -0.84760 10.16300 -0.07500 27.45300 # O2311 + 2312 771 2 0.42380 9.84400 -0.46600 26.60600 # H2312 + 2313 771 2 0.42380 11.17400 0.14800 27.24500 # H2313 + 2314 772 1 -0.84760 2.82500 18.44100 3.80600 # O2314 + 2315 772 2 0.42380 2.44700 18.35400 2.84900 # H2315 + 2316 772 2 0.42380 1.86400 18.53800 4.13500 # H2316 + 2317 773 1 -0.84760 29.69300 26.85700 2.59000 # O2317 + 2318 773 2 0.42380 29.55900 26.12000 1.91900 # H2318 + 2319 773 2 0.42380 30.68900 26.88200 2.85300 # H2319 + 2320 774 1 -0.84760 25.31800 8.52000 22.93200 # O2320 + 2321 774 2 0.42380 25.81900 9.40600 22.97700 # H2321 + 2322 774 2 0.42380 25.47100 7.88800 23.63800 # H2322 + 2323 775 1 -0.84760 16.39800 -0.97200 8.15100 # O2323 + 2324 775 2 0.42380 15.41400 -0.73300 8.31700 # H2324 + 2325 775 2 0.42380 16.51800 -0.67200 7.17500 # H2325 + 2326 776 1 -0.84760 15.08500 26.48200 11.27100 # O2326 + 2327 776 2 0.42380 15.36000 25.50900 11.09400 # H2327 + 2328 776 2 0.42380 15.77600 26.86200 11.87900 # H2328 + 2329 777 1 -0.84760 20.45900 2.14900 12.30600 # O2329 + 2330 777 2 0.42380 21.17600 2.84600 12.60300 # H2330 + 2331 777 2 0.42380 21.09000 1.39400 12.07500 # H2331 + 2332 778 1 -0.84760 27.47100 27.74100 17.37300 # O2332 + 2333 778 2 0.42380 27.41300 27.84200 16.33900 # H2333 + 2334 778 2 0.42380 26.48700 27.88200 17.63000 # H2334 + 2335 779 1 -0.84760 6.16500 24.19800 4.87200 # O2335 + 2336 779 2 0.42380 5.16600 24.21400 4.48000 # H2336 + 2337 779 2 0.42380 6.45000 23.35700 4.28000 # H2337 + 2338 780 1 -0.84760 10.41500 13.47400 20.92500 # O2338 + 2339 780 2 0.42380 10.18000 14.16800 20.21500 # H2339 + 2340 780 2 0.42380 9.58500 13.27200 21.44000 # H2340 + 2341 781 1 -0.84760 10.36500 1.76800 9.28700 # O2341 + 2342 781 2 0.42380 9.73100 1.82200 8.48800 # H2342 + 2343 781 2 0.42380 9.81200 1.22800 9.89500 # H2343 + 2344 782 1 -0.84760 24.92600 18.04400 4.82600 # O2344 + 2345 782 2 0.42380 25.90500 17.88100 4.93300 # H2345 + 2346 782 2 0.42380 24.46900 17.73600 5.66000 # H2346 + 2347 783 1 -0.84760 3.16800 0.32100 2.13300 # O2347 + 2348 783 2 0.42380 4.10800 0.51900 2.40000 # H2348 + 2349 783 2 0.42380 3.06600 0.24000 1.11500 # H2349 + 2350 784 1 -0.84760 20.54100 5.21300 10.22700 # O2350 + 2351 784 2 0.42380 19.61200 5.06000 10.45600 # H2351 + 2352 784 2 0.42380 20.64300 6.05400 9.62000 # H2352 + 2353 785 1 -0.84760 25.14800 0.38800 24.10600 # O2353 + 2354 785 2 0.42380 25.53200 1.24400 23.93900 # H2354 + 2355 785 2 0.42380 25.83200 -0.29900 24.34900 # H2355 + 2356 786 1 -0.84760 20.18900 8.65200 24.70400 # O2356 + 2357 786 2 0.42380 20.05300 9.08400 25.64700 # H2357 + 2358 786 2 0.42380 20.28800 7.69100 24.91400 # H2358 + 2359 787 1 -0.84760 24.38900 25.85000 3.93000 # O2359 + 2360 787 2 0.42380 24.47700 26.79400 3.56100 # H2360 + 2361 787 2 0.42380 24.27600 25.25700 3.07600 # H2361 + 2362 788 1 -0.84760 19.77700 24.87200 12.92000 # O2362 + 2363 788 2 0.42380 20.36600 24.77200 12.06800 # H2363 + 2364 788 2 0.42380 19.76800 25.84400 13.19100 # H2364 + 2365 789 1 -0.84760 15.63900 20.15800 28.13500 # O2365 + 2366 789 2 0.42380 16.39900 20.42400 28.77800 # H2366 + 2367 789 2 0.42380 15.73800 19.15400 28.01500 # H2367 + 2368 790 1 -0.84760 2.20700 -0.88500 7.84200 # O2368 + 2369 790 2 0.42380 2.11600 -1.65900 8.53000 # H2369 + 2370 790 2 0.42380 1.82500 -0.15900 8.43400 # H2370 + 2371 791 1 -0.84760 9.15600 0.87100 6.79700 # O2371 + 2372 791 2 0.42380 9.67400 0.14500 7.29100 # H2372 + 2373 791 2 0.42380 8.26500 0.99600 7.26200 # H2373 + 2374 792 1 -0.84760 27.60400 9.71600 30.20100 # O2374 + 2375 792 2 0.42380 26.72000 9.97400 29.82900 # H2375 + 2376 792 2 0.42380 28.17000 9.40900 29.38400 # H2376 + 2377 793 1 -0.84760 15.06700 13.85100 19.30500 # O2377 + 2378 793 2 0.42380 15.17200 12.81900 19.29400 # H2378 + 2379 793 2 0.42380 15.94800 14.27900 19.45300 # H2379 + 2380 794 1 -0.84760 12.00100 25.06200 3.34400 # O2380 + 2381 794 2 0.42380 12.45700 25.93300 3.38400 # H2381 + 2382 794 2 0.42380 11.31300 25.08600 3.98700 # H2382 + 2383 795 1 -0.84760 21.85000 25.84600 4.38800 # O2383 + 2384 795 2 0.42380 22.81600 25.80200 3.96600 # H2384 + 2385 795 2 0.42380 22.06700 25.76000 5.33800 # H2385 + 2386 796 1 -0.84760 14.84300 14.95700 16.24800 # O2386 + 2387 796 2 0.42380 14.25900 14.58400 16.91200 # H2387 + 2388 796 2 0.42380 15.27400 14.05200 16.00700 # H2388 + 2389 797 1 -0.84760 4.40700 8.69100 3.47700 # O2389 + 2390 797 2 0.42380 3.50300 9.12300 3.60800 # H2390 + 2391 797 2 0.42380 4.28600 7.85900 2.86600 # H2391 + 2392 798 1 -0.84760 9.76400 1.78200 16.65700 # O2392 + 2393 798 2 0.42380 10.45900 2.34000 17.19600 # H2393 + 2394 798 2 0.42380 9.57900 2.02600 15.70900 # H2394 + 2395 799 1 -0.84760 27.53400 20.92500 12.70800 # O2395 + 2396 799 2 0.42380 26.81200 20.60100 13.39700 # H2396 + 2397 799 2 0.42380 27.41800 20.39900 11.81700 # H2397 + 2398 800 1 -0.84760 0.49400 7.14100 16.48600 # O2398 + 2399 800 2 0.42380 0.89900 6.47500 15.81000 # H2399 + 2400 800 2 0.42380 -0.08300 7.83600 15.97000 # H2400 + 2401 801 1 -0.84760 20.83400 26.81600 10.17700 # O2401 + 2402 801 2 0.42380 20.43000 27.74900 10.48800 # H2402 + 2403 801 2 0.42380 21.56400 26.98200 9.51000 # H2403 + 2404 802 1 -0.84760 25.39300 18.85500 -0.45100 # O2404 + 2405 802 2 0.42380 24.97600 18.21400 0.20700 # H2405 + 2406 802 2 0.42380 24.93700 19.76300 -0.33600 # H2406 + 2407 803 1 -0.84760 9.55500 17.60200 9.10400 # O2407 + 2408 803 2 0.42380 9.37900 18.19200 8.28700 # H2408 + 2409 803 2 0.42380 8.66100 17.02300 9.10100 # H2409 + 2410 804 1 -0.84760 24.74800 27.92500 18.36700 # O2410 + 2411 804 2 0.42380 25.03200 27.46200 19.26100 # H2411 + 2412 804 2 0.42380 23.78700 27.58500 18.16300 # H2412 + 2413 805 1 -0.84760 18.21000 11.16600 24.43800 # O2413 + 2414 805 2 0.42380 19.00700 11.68400 24.78400 # H2414 + 2415 805 2 0.42380 18.62000 10.28100 24.19300 # H2415 + 2416 806 1 -0.84760 0.28700 12.14200 19.06800 # O2416 + 2417 806 2 0.42380 0.90000 11.60000 18.57500 # H2417 + 2418 806 2 0.42380 0.79000 12.31800 19.92900 # H2418 + 2419 807 1 -0.84760 18.90200 29.76000 26.00800 # O2419 + 2420 807 2 0.42380 19.67500 29.95200 25.39100 # H2420 + 2421 807 2 0.42380 17.98700 29.72400 25.49700 # H2421 + 2422 808 1 -0.84760 14.12600 24.98200 25.35100 # O2422 + 2423 808 2 0.42380 13.67800 24.28200 25.99600 # H2423 + 2424 808 2 0.42380 14.86100 25.45000 25.84100 # H2424 + 2425 809 1 -0.84760 22.65300 4.18800 11.66200 # O2425 + 2426 809 2 0.42380 23.49900 3.72000 11.29400 # H2426 + 2427 809 2 0.42380 22.22000 4.81600 10.98700 # H2427 + 2428 810 1 -0.84760 2.52300 19.46000 10.60100 # O2428 + 2429 810 2 0.42380 2.07400 20.33400 10.60800 # H2429 + 2430 810 2 0.42380 2.69100 19.12400 9.63700 # H2430 + 2431 811 1 -0.84760 20.65000 24.89500 7.68000 # O2431 + 2432 811 2 0.42380 20.46400 25.86000 7.35500 # H2432 + 2433 811 2 0.42380 20.27300 24.74800 8.65900 # H2433 + 2434 812 1 -0.84760 14.28500 12.49800 7.87100 # O2434 + 2435 812 2 0.42380 14.82600 11.68400 7.75300 # H2435 + 2436 812 2 0.42380 14.90200 13.33700 7.80100 # H2436 + 2437 813 1 -0.84760 2.22000 18.21700 26.46900 # O2437 + 2438 813 2 0.42380 2.06700 17.86000 27.44400 # H2438 + 2439 813 2 0.42380 1.68800 17.55800 25.80300 # H2439 + 2440 814 1 -0.84760 1.58300 0.32800 23.40600 # O2440 + 2441 814 2 0.42380 0.97500 -0.33000 22.94300 # H2441 + 2442 814 2 0.42380 1.75900 0.02600 24.34900 # H2442 + 2443 815 1 -0.84760 17.40100 9.56500 18.97400 # O2443 + 2444 815 2 0.42380 17.95200 9.42400 18.18600 # H2444 + 2445 815 2 0.42380 16.51700 9.93400 18.67700 # H2445 + 2446 816 1 -0.84760 27.14400 10.87300 7.47200 # O2446 + 2447 816 2 0.42380 27.69100 9.95800 7.56500 # H2447 + 2448 816 2 0.42380 27.31500 11.34200 6.54000 # H2448 + 2449 817 1 -0.84760 3.40000 5.57600 16.90500 # O2449 + 2450 817 2 0.42380 3.11500 6.10600 17.74900 # H2450 + 2451 817 2 0.42380 4.06400 6.16800 16.37100 # H2451 + 2452 818 1 -0.84760 1.75300 9.18800 24.26400 # O2452 + 2453 818 2 0.42380 1.91600 10.23200 24.22000 # H2453 + 2454 818 2 0.42380 2.53000 8.67300 23.80800 # H2454 + 2455 819 1 -0.84760 27.23900 27.46700 12.06200 # O2455 + 2456 819 2 0.42380 27.72400 28.33800 11.90300 # H2456 + 2457 819 2 0.42380 26.42800 27.30100 11.44900 # H2457 + 2458 820 1 -0.84760 14.85200 9.70400 6.13000 # O2458 + 2459 820 2 0.42380 14.67800 8.81200 6.64400 # H2459 + 2460 820 2 0.42380 14.59700 9.49700 5.19000 # H2460 + 2461 821 1 -0.84760 1.88400 12.18800 14.14100 # O2461 + 2462 821 2 0.42380 2.22100 11.37900 14.68200 # H2462 + 2463 821 2 0.42380 0.88300 12.15000 14.17400 # H2463 + 2464 822 1 -0.84760 12.28900 18.61900 -0.04600 # O2464 + 2465 822 2 0.42380 11.31400 18.62000 0.24000 # H2465 + 2466 822 2 0.42380 12.95000 18.13800 0.54600 # H2466 + 2467 823 1 -0.84760 10.60600 20.27600 17.14500 # O2467 + 2468 823 2 0.42380 11.58700 20.30700 17.38000 # H2468 + 2469 823 2 0.42380 10.29100 19.33900 17.33700 # H2469 + 2470 824 1 -0.84760 3.32700 5.02100 22.56700 # O2470 + 2471 824 2 0.42380 2.60100 5.38500 21.91900 # H2471 + 2472 824 2 0.42380 3.73800 4.45500 21.84900 # H2472 + 2473 825 1 -0.84760 6.03300 13.89100 5.74600 # O2473 + 2474 825 2 0.42380 6.43000 12.97900 5.94000 # H2474 + 2475 825 2 0.42380 6.71700 14.61100 5.68500 # H2475 + 2476 826 1 -0.84760 4.79400 6.98500 1.45900 # O2476 + 2477 826 2 0.42380 5.17300 6.04300 1.67200 # H2477 + 2478 826 2 0.42380 3.85400 6.91800 1.03300 # H2478 + 2479 827 1 -0.84760 17.50700 19.86600 15.28100 # O2479 + 2480 827 2 0.42380 18.42700 19.91100 15.68400 # H2480 + 2481 827 2 0.42380 17.27100 18.85600 15.27400 # H2481 + 2482 828 1 -0.84760 4.73400 22.71400 17.97900 # O2482 + 2483 828 2 0.42380 4.83700 21.77300 17.64900 # H2483 + 2484 828 2 0.42380 4.19400 22.56900 18.81300 # H2484 + 2485 829 1 -0.84760 10.66500 3.07600 22.45000 # O2485 + 2486 829 2 0.42380 11.63100 2.91100 22.34500 # H2486 + 2487 829 2 0.42380 10.30400 3.04900 23.44300 # H2487 + 2488 830 1 -0.84760 -0.16900 4.00100 -0.25500 # O2488 + 2489 830 2 0.42380 -0.83000 4.56000 -0.75800 # H2489 + 2490 830 2 0.42380 -0.12300 4.22500 0.72200 # H2490 + 2491 831 1 -0.84760 1.98500 6.69500 9.30800 # O2491 + 2492 831 2 0.42380 2.24600 7.60300 9.68200 # H2492 + 2493 831 2 0.42380 2.31300 6.07600 10.05700 # H2493 + 2494 832 1 -0.84760 21.51000 7.76000 7.87100 # O2494 + 2495 832 2 0.42380 21.81400 8.49300 8.57100 # H2495 + 2496 832 2 0.42380 21.23400 8.14800 6.92700 # H2496 + 2497 833 1 -0.84760 -0.47200 29.18200 4.02100 # O2497 + 2498 833 2 0.42380 0.18300 28.92900 3.28100 # H2498 + 2499 833 2 0.42380 -1.39700 29.43100 3.64500 # H2499 + 2500 834 1 -0.84760 25.51300 13.14900 7.82600 # O2500 + 2501 834 2 0.42380 24.63400 12.84200 8.14000 # H2501 + 2502 834 2 0.42380 26.03900 12.98500 8.60100 # H2502 + 2503 835 1 -0.84760 28.51500 3.16200 6.31200 # O2503 + 2504 835 2 0.42380 27.75800 3.33600 6.92400 # H2504 + 2505 835 2 0.42380 28.08800 2.68500 5.55500 # H2505 + 2506 836 1 -0.84760 5.98400 4.04300 -0.64900 # O2506 + 2507 836 2 0.42380 5.00100 4.17100 -0.29500 # H2507 + 2508 836 2 0.42380 6.07100 4.15500 -1.69900 # H2508 + 2509 837 1 -0.84760 3.72300 27.96800 17.04100 # O2509 + 2510 837 2 0.42380 4.64300 28.32900 16.90200 # H2510 + 2511 837 2 0.42380 3.13500 28.37200 16.26800 # H2511 + 2512 838 1 -0.84760 22.92000 25.10600 18.92300 # O2512 + 2513 838 2 0.42380 22.80100 24.33800 18.27100 # H2513 + 2514 838 2 0.42380 21.95300 25.29700 19.09700 # H2514 + 2515 839 1 -0.84760 15.63900 -1.00500 1.26800 # O2515 + 2516 839 2 0.42380 16.26800 -0.24500 1.29200 # H2516 + 2517 839 2 0.42380 15.81800 -1.40100 0.34000 # H2517 + 2518 840 1 -0.84760 3.41000 28.27500 10.60800 # O2518 + 2519 840 2 0.42380 3.61800 28.16800 11.61100 # H2519 + 2520 840 2 0.42380 3.24800 27.32400 10.37400 # H2520 + 2521 841 1 -0.84760 5.11300 8.92200 12.89300 # O2521 + 2522 841 2 0.42380 4.75500 8.96000 13.80400 # H2522 + 2523 841 2 0.42380 4.98000 9.83300 12.52200 # H2523 + 2524 842 1 -0.84760 17.80000 26.20000 23.17700 # O2524 + 2525 842 2 0.42380 17.87700 26.39800 22.18700 # H2525 + 2526 842 2 0.42380 18.21400 27.06300 23.43600 # H2526 + 2527 843 1 -0.84760 6.21300 8.56200 26.79900 # O2527 + 2528 843 2 0.42380 6.06600 8.63300 27.78400 # H2528 + 2529 843 2 0.42380 5.26000 8.43400 26.29500 # H2529 + 2530 844 1 -0.84760 10.78900 3.22500 25.75200 # O2530 + 2531 844 2 0.42380 11.22000 3.93500 25.20000 # H2531 + 2532 844 2 0.42380 9.99300 3.61300 26.12300 # H2532 + 2533 845 1 -0.84760 9.54500 3.50500 6.39300 # O2533 + 2534 845 2 0.42380 9.79000 3.38500 5.40800 # H2534 + 2535 845 2 0.42380 9.69400 2.56000 6.75900 # H2535 + 2536 846 1 -0.84760 25.36500 25.81600 24.73400 # O2536 + 2537 846 2 0.42380 25.47000 25.54300 25.68700 # H2537 + 2538 846 2 0.42380 25.00400 26.78100 24.70000 # H2538 + 2539 847 1 -0.84760 15.62000 14.36600 6.84800 # O2539 + 2540 847 2 0.42380 16.31600 14.18000 7.59400 # H2540 + 2541 847 2 0.42380 16.04900 15.11700 6.28000 # H2541 + 2542 848 1 -0.84760 12.03600 8.19300 9.68400 # O2542 + 2543 848 2 0.42380 13.00200 8.08500 10.03700 # H2543 + 2544 848 2 0.42380 11.89500 8.16800 8.64800 # H2544 + 2545 849 1 -0.84760 12.69400 27.95400 28.16300 # O2545 + 2546 849 2 0.42380 12.35100 28.93300 28.27800 # H2546 + 2547 849 2 0.42380 11.87400 27.41200 28.42500 # H2547 + 2548 850 1 -0.84760 26.47400 6.65400 6.01500 # O2548 + 2549 850 2 0.42380 26.60600 5.64900 6.19700 # H2549 + 2550 850 2 0.42380 25.51600 6.84100 6.23300 # H2550 + 2551 851 1 -0.84760 18.17300 26.20800 16.73700 # O2551 + 2552 851 2 0.42380 17.62200 25.38800 16.89700 # H2552 + 2553 851 2 0.42380 18.63500 26.09700 15.80200 # H2553 + 2554 852 1 -0.84760 6.09600 12.52200 1.04600 # O2554 + 2555 852 2 0.42380 6.50000 11.69700 1.35400 # H2555 + 2556 852 2 0.42380 5.94100 13.10100 1.91200 # H2556 + 2557 853 1 -0.84760 19.10200 4.96500 1.46300 # O2557 + 2558 853 2 0.42380 18.28400 5.50700 1.72400 # H2558 + 2559 853 2 0.42380 18.91300 4.55100 0.58000 # H2559 + 2560 854 1 -0.84760 20.90300 6.99500 27.14800 # O2560 + 2561 854 2 0.42380 21.07500 6.09400 26.66800 # H2561 + 2562 854 2 0.42380 20.32400 6.69200 28.00300 # H2562 + 2563 855 1 -0.84760 25.48600 20.41100 2.72700 # O2563 + 2564 855 2 0.42380 26.50200 20.18400 2.47600 # H2564 + 2565 855 2 0.42380 25.42600 20.35100 3.72600 # H2565 + 2566 856 1 -0.84760 12.07200 19.23600 6.61000 # O2566 + 2567 856 2 0.42380 11.07500 19.22400 6.80400 # H2567 + 2568 856 2 0.42380 12.14400 19.22200 5.61600 # H2568 + 2569 857 1 -0.84760 11.35200 0.35700 19.15000 # O2569 + 2570 857 2 0.42380 10.95500 0.00800 20.07700 # H2570 + 2571 857 2 0.42380 10.78100 0.27400 18.22500 # H2571 + 2572 858 1 -0.84760 16.95800 22.96900 29.27200 # O2572 + 2573 858 2 0.42380 17.87100 23.37300 29.06500 # H2573 + 2574 858 2 0.42380 16.59600 22.51700 28.45600 # H2574 + 2575 859 1 -0.84760 18.03600 -0.71100 2.79300 # O2575 + 2576 859 2 0.42380 18.03900 -1.60800 2.27500 # H2576 + 2577 859 2 0.42380 18.81300 -0.19500 2.41000 # H2577 + 2578 860 1 -0.84760 11.18400 23.20400 8.36000 # O2578 + 2579 860 2 0.42380 11.98200 23.63300 7.92400 # H2579 + 2580 860 2 0.42380 10.38700 23.46600 7.82400 # H2580 + 2581 861 1 -0.84760 22.50600 21.38000 22.94900 # O2581 + 2582 861 2 0.42380 21.78300 21.77100 22.49500 # H2582 + 2583 861 2 0.42380 22.02900 20.54800 23.39100 # H2583 + 2584 862 1 -0.84760 22.88900 8.41600 5.38400 # O2584 + 2585 862 2 0.42380 22.50600 8.68500 4.43600 # H2585 + 2586 862 2 0.42380 23.24100 9.28900 5.76600 # H2586 + 2587 863 1 -0.84760 12.09400 22.95000 15.20900 # O2587 + 2588 863 2 0.42380 12.24700 22.56200 16.13000 # H2588 + 2589 863 2 0.42380 11.95000 23.91400 15.45100 # H2589 + 2590 864 1 -0.84760 11.93300 16.47400 9.09000 # O2590 + 2591 864 2 0.42380 11.12300 17.10000 9.17100 # H2591 + 2592 864 2 0.42380 12.40200 16.64900 8.15000 # H2592 + 2593 865 1 -0.84760 24.32000 16.40000 8.04600 # O2593 + 2594 865 2 0.42380 23.88200 16.80400 8.85200 # H2594 + 2595 865 2 0.42380 23.54800 15.76700 7.72900 # H2595 + 2596 866 1 -0.84760 3.74400 1.04900 21.57800 # O2596 + 2597 866 2 0.42380 4.14500 1.77800 22.19700 # H2597 + 2598 866 2 0.42380 3.09400 0.52300 22.09200 # H2598 + 2599 867 1 -0.84760 13.89600 -0.22100 28.49400 # O2599 + 2600 867 2 0.42380 13.78900 0.67900 28.06000 # H2600 + 2601 867 2 0.42380 14.61800 -0.82600 28.11500 # H2601 + 2602 868 1 -0.84760 11.65000 26.80100 0.90800 # O2602 + 2603 868 2 0.42380 11.18200 26.82200 1.81100 # H2603 + 2604 868 2 0.42380 11.51200 25.84700 0.50500 # H2604 + 2605 869 1 -0.84760 24.89600 7.87100 0.44100 # O2605 + 2606 869 2 0.42380 23.99000 7.70900 0.91300 # H2606 + 2607 869 2 0.42380 25.13000 7.06600 -0.17400 # H2607 + 2608 870 1 -0.84760 23.05200 14.96800 25.49500 # O2608 + 2609 870 2 0.42380 22.91400 14.20300 26.16100 # H2609 + 2610 870 2 0.42380 23.99300 15.03700 25.31100 # H2610 + 2611 871 1 -0.84760 4.19800 15.95000 1.05600 # O2611 + 2612 871 2 0.42380 4.70800 15.28200 1.64600 # H2612 + 2613 871 2 0.42380 3.53500 15.34300 0.58400 # H2613 + 2614 872 1 -0.84760 9.05600 16.78100 13.10400 # O2614 + 2615 872 2 0.42380 9.39400 17.23100 12.26800 # H2615 + 2616 872 2 0.42380 9.86800 17.04900 13.70500 # H2616 + 2617 873 1 -0.84760 17.81400 25.77000 28.22200 # O2617 + 2618 873 2 0.42380 17.34100 26.53600 27.73100 # H2618 + 2619 873 2 0.42380 17.75900 24.82900 27.79000 # H2619 + 2620 874 1 -0.84760 15.21000 5.91000 22.77600 # O2620 + 2621 874 2 0.42380 15.64100 6.63400 22.19400 # H2621 + 2622 874 2 0.42380 14.21000 6.17900 22.91700 # H2622 + 2623 875 1 -0.84760 19.26100 19.74100 4.14100 # O2623 + 2624 875 2 0.42380 19.89100 19.60600 3.29500 # H2624 + 2625 875 2 0.42380 19.86800 19.79800 4.95700 # H2625 + 2626 876 1 -0.84760 8.04800 15.53500 19.72100 # O2626 + 2627 876 2 0.42380 7.49800 16.39800 19.50200 # H2627 + 2628 876 2 0.42380 8.53300 15.73700 20.56600 # H2628 + 2629 877 1 -0.84760 24.69700 1.96400 21.46200 # O2629 + 2630 877 2 0.42380 24.04800 2.41300 20.79000 # H2630 + 2631 877 2 0.42380 24.85500 1.04900 21.00200 # H2631 + 2632 878 1 -0.84760 8.65600 1.72900 12.29000 # O2632 + 2633 878 2 0.42380 8.27500 1.26800 13.11800 # H2633 + 2634 878 2 0.42380 7.94600 1.83900 11.63900 # H2634 + 2635 879 1 -0.84760 21.85100 5.92100 17.32100 # O2635 + 2636 879 2 0.42380 22.08000 5.93600 16.33600 # H2636 + 2637 879 2 0.42380 21.08500 6.55900 17.26400 # H2637 + 2638 880 1 -0.84760 9.30600 26.60000 7.99000 # O2638 + 2639 880 2 0.42380 9.05800 27.58500 7.65900 # H2639 + 2640 880 2 0.42380 10.29000 26.44900 8.25400 # H2640 + 2641 881 1 -0.84760 13.64500 16.80500 6.93000 # O2641 + 2642 881 2 0.42380 13.98700 17.76400 7.22700 # H2642 + 2643 881 2 0.42380 14.32500 16.03200 7.15900 # H2643 + 2644 882 1 -0.84760 10.23500 7.60200 7.00900 # O2644 + 2645 882 2 0.42380 10.71100 6.76500 6.65200 # H2645 + 2646 882 2 0.42380 9.25700 7.30500 6.90300 # H2646 + 2647 883 1 -0.84760 23.56100 4.97000 20.27300 # O2647 + 2648 883 2 0.42380 22.67400 4.73700 19.89900 # H2648 + 2649 883 2 0.42380 24.01700 5.29800 19.44100 # H2649 + 2650 884 1 -0.84760 22.35800 5.57100 6.01000 # O2650 + 2651 884 2 0.42380 22.53900 6.47800 5.77500 # H2651 + 2652 884 2 0.42380 21.44400 5.60600 6.35700 # H2652 + 2653 885 1 -0.84760 29.29000 6.01200 4.97700 # O2653 + 2654 885 2 0.42380 28.85200 6.17600 5.93700 # H2654 + 2655 885 2 0.42380 29.68200 5.08100 4.95700 # H2655 + 2656 886 1 -0.84760 25.10800 5.82700 25.52100 # O2656 + 2657 886 2 0.42380 24.49400 5.36500 24.81800 # H2657 + 2658 886 2 0.42380 25.76000 5.11900 25.73200 # H2658 + 2659 887 1 -0.84760 20.22900 16.56800 0.25300 # O2659 + 2660 887 2 0.42380 20.00900 17.32700 -0.49600 # H2660 + 2661 887 2 0.42380 20.19100 15.69000 -0.30900 # H2661 + 2662 888 1 -0.84760 1.28100 27.85200 15.99800 # O2662 + 2663 888 2 0.42380 1.65000 27.58800 16.88800 # H2663 + 2664 888 2 0.42380 0.51600 28.42100 16.29100 # H2664 + 2665 889 1 -0.84760 26.77200 6.23000 21.72000 # O2665 + 2666 889 2 0.42380 26.72400 6.31700 20.72000 # H2666 + 2667 889 2 0.42380 25.85100 6.69500 21.97600 # H2667 + 2668 890 1 -0.84760 1.84000 22.39600 7.26800 # O2668 + 2669 890 2 0.42380 1.21700 23.09700 6.87000 # H2669 + 2670 890 2 0.42380 1.62900 21.44200 7.12700 # H2670 + 2671 891 1 -0.84760 4.09500 14.72700 15.45600 # O2671 + 2672 891 2 0.42380 4.88700 14.41100 14.82800 # H2672 + 2673 891 2 0.42380 4.19700 15.77900 15.26700 # H2673 + 2674 892 1 -0.84760 24.47900 10.89300 4.96400 # O2674 + 2675 892 2 0.42380 25.15000 11.55300 4.58100 # H2675 + 2676 892 2 0.42380 25.03900 10.47700 5.69700 # H2676 + 2677 893 1 -0.84760 1.72200 0.25800 30.03500 # O2677 + 2678 893 2 0.42380 0.99000 0.60000 29.36200 # H2678 + 2679 893 2 0.42380 1.80100 1.14500 30.50800 # H2679 + 2680 894 1 -0.84760 25.46700 29.76400 15.08200 # O2680 + 2681 894 2 0.42380 26.03700 30.35300 15.69800 # H2681 + 2682 894 2 0.42380 26.01500 29.72400 14.24600 # H2682 + 2683 895 1 -0.84760 8.64100 4.12700 2.77800 # O2683 + 2684 895 2 0.42380 8.49900 4.79100 1.93200 # H2684 + 2685 895 2 0.42380 8.98400 3.24900 2.39300 # H2685 + 2686 896 1 -0.84760 2.50200 11.78600 0.48900 # O2686 + 2687 896 2 0.42380 2.27200 12.37400 1.30100 # H2687 + 2688 896 2 0.42380 3.52200 11.79200 0.49000 # H2688 + 2689 897 1 -0.84760 3.41100 2.92600 24.99700 # O2689 + 2690 897 2 0.42380 4.29000 2.83200 25.37400 # H2690 + 2691 897 2 0.42380 3.32100 3.78400 24.54100 # H2691 + 2692 898 1 -0.84760 12.77600 28.10100 20.25000 # O2692 + 2693 898 2 0.42380 11.92800 27.98500 19.74800 # H2693 + 2694 898 2 0.42380 13.25100 28.65200 19.57200 # H2694 + 2695 899 1 -0.84760 11.10000 15.30700 11.55700 # O2695 + 2696 899 2 0.42380 10.89100 15.59000 10.55400 # H2696 + 2697 899 2 0.42380 11.97700 14.81600 11.39300 # H2697 + 2698 900 1 -0.84760 3.99600 21.61700 26.08100 # O2698 + 2699 900 2 0.42380 3.57700 21.70500 25.12900 # H2699 + 2700 900 2 0.42380 4.73100 20.86700 26.06400 # H2700 + 2701 901 1 -0.84760 10.98700 24.58400 -0.64200 # O2701 + 2702 901 2 0.42380 11.10200 24.39200 -1.64800 # H2702 + 2703 901 2 0.42380 11.43700 23.92200 -0.07500 # H2703 + 2704 902 1 -0.84760 26.78100 -0.21900 18.90300 # O2704 + 2705 902 2 0.42380 27.51400 -0.50400 18.31300 # H2705 + 2706 902 2 0.42380 26.08500 0.11300 18.30400 # H2706 + 2707 903 1 -0.84760 13.76100 3.04100 1.00800 # O2707 + 2708 903 2 0.42380 13.61800 3.26800 0.04300 # H2708 + 2709 903 2 0.42380 13.14500 3.67200 1.58600 # H2709 + 2710 904 1 -0.84760 26.55900 5.01200 10.12100 # O2710 + 2711 904 2 0.42380 26.30300 5.65200 10.82100 # H2711 + 2712 904 2 0.42380 25.91900 5.05500 9.34000 # H2712 + 2713 905 1 -0.84760 22.06800 11.56800 28.50100 # O2713 + 2714 905 2 0.42380 22.69900 11.44000 29.30000 # H2714 + 2715 905 2 0.42380 21.25200 12.16700 28.74000 # H2715 + 2716 906 1 -0.84760 10.74900 5.90700 13.73800 # O2716 + 2717 906 2 0.42380 10.25300 5.03600 13.40500 # H2717 + 2718 906 2 0.42380 10.16600 6.69600 13.53000 # H2718 + 2719 907 1 -0.84760 12.24200 15.66600 19.62300 # O2719 + 2720 907 2 0.42380 12.89500 16.24400 20.09800 # H2720 + 2721 907 2 0.42380 12.60500 14.73700 19.66000 # H2721 + 2722 908 1 -0.84760 3.29100 21.55100 4.79300 # O2722 + 2723 908 2 0.42380 2.27600 21.50000 4.63700 # H2723 + 2724 908 2 0.42380 3.51300 22.31200 4.14900 # H2724 + 2725 909 1 -0.84760 25.00600 19.42800 22.35500 # O2725 + 2726 909 2 0.42380 25.30200 19.83600 23.18900 # H2726 + 2727 909 2 0.42380 24.28700 18.82100 22.80200 # H2727 + 2728 910 1 -0.84760 11.86400 25.83300 15.79200 # O2728 + 2729 910 2 0.42380 11.51900 26.73100 15.45800 # H2729 + 2730 910 2 0.42380 10.99800 25.32500 15.81300 # H2730 + 2731 911 1 -0.84760 24.45600 7.93800 15.09300 # O2731 + 2732 911 2 0.42380 24.13300 8.79500 14.77400 # H2732 + 2733 911 2 0.42380 25.34700 8.13100 15.55700 # H2733 + 2734 912 1 -0.84760 8.47500 22.53100 29.92000 # O2734 + 2735 912 2 0.42380 7.77100 22.07500 29.41100 # H2735 + 2736 912 2 0.42380 8.44900 22.30300 30.87900 # H2736 + 2737 913 1 -0.84760 22.29300 2.94200 14.79900 # O2737 + 2738 913 2 0.42380 23.07600 3.52700 15.14900 # H2738 + 2739 913 2 0.42380 22.60800 2.09800 14.35400 # H2739 + 2740 914 1 -0.84760 21.35200 5.40100 2.87400 # O2740 + 2741 914 2 0.42380 22.20600 4.94000 2.58800 # H2741 + 2742 914 2 0.42380 20.63300 5.16500 2.21800 # H2742 + 2743 915 1 -0.84760 12.65300 7.73400 23.02000 # O2743 + 2744 915 2 0.42380 12.19100 8.40000 22.38300 # H2744 + 2745 915 2 0.42380 12.39200 8.02700 23.97000 # H2745 + 2746 916 1 -0.84760 -0.66500 21.80500 21.46200 # O2746 + 2747 916 2 0.42380 -1.10200 22.67900 21.07800 # H2747 + 2748 916 2 0.42380 -1.19000 20.99900 21.19000 # H2748 + 2749 917 1 -0.84760 5.73400 5.98600 20.23700 # O2749 + 2750 917 2 0.42380 5.70900 6.88000 20.63400 # H2750 + 2751 917 2 0.42380 6.69000 5.76400 20.57400 # H2751 + 2752 918 1 -0.84760 15.59400 30.01200 11.74600 # O2752 + 2753 918 2 0.42380 15.78000 30.97900 11.49300 # H2753 + 2754 918 2 0.42380 15.90000 29.44300 10.93800 # H2754 + 2755 919 1 -0.84760 22.53800 19.33000 4.21800 # O2755 + 2756 919 2 0.42380 22.12100 19.18100 5.12300 # H2756 + 2757 919 2 0.42380 23.50600 19.10200 4.32400 # H2757 + 2758 920 1 -0.84760 9.56400 25.74000 17.31700 # O2758 + 2759 920 2 0.42380 8.65500 25.27600 17.30500 # H2759 + 2760 920 2 0.42380 10.14900 25.23900 18.02200 # H2760 + 2761 921 1 -0.84760 14.28400 10.92800 27.99100 # O2761 + 2762 921 2 0.42380 13.76500 11.60700 28.49000 # H2762 + 2763 921 2 0.42380 15.24200 10.84100 28.24500 # H2763 + 2764 922 1 -0.84760 9.34600 15.22700 15.34500 # O2764 + 2765 922 2 0.42380 9.19100 15.95800 16.01200 # H2765 + 2766 922 2 0.42380 9.40500 15.73200 14.48100 # H2766 + 2767 923 1 -0.84760 16.63400 29.65300 15.00300 # O2767 + 2768 923 2 0.42380 16.63300 30.66600 15.05700 # H2768 + 2769 923 2 0.42380 17.52000 29.34800 15.36800 # H2769 + 2770 924 1 -0.84760 2.49000 11.86300 10.53200 # O2770 + 2771 924 2 0.42380 2.85800 12.68100 11.17300 # H2771 + 2772 924 2 0.42380 2.50300 11.14700 11.27800 # H2772 + 2773 925 1 -0.84760 1.71400 20.68000 20.46600 # O2773 + 2774 925 2 0.42380 0.92600 21.18300 20.72000 # H2774 + 2775 925 2 0.42380 2.35900 21.12000 21.05300 # H2775 + 2776 926 1 -0.84760 10.98300 7.57400 -0.71500 # O2776 + 2777 926 2 0.42380 11.77700 7.35000 -1.20400 # H2777 + 2778 926 2 0.42380 10.53000 8.33000 -1.23100 # H2778 + 2779 927 1 -0.84760 13.20700 27.26500 4.50000 # O2779 + 2780 927 2 0.42380 13.93500 26.65300 4.78400 # H2780 + 2781 927 2 0.42380 13.55600 28.04400 3.89100 # H2781 + 2782 928 1 -0.84760 -0.46800 11.41300 11.34800 # O2782 + 2783 928 2 0.42380 0.29400 11.96100 10.94600 # H2783 + 2784 928 2 0.42380 -1.25300 11.11600 10.80700 # H2784 + 2785 929 1 -0.84760 15.77800 19.10800 11.50500 # O2785 + 2786 929 2 0.42380 15.80200 20.07200 11.08600 # H2786 + 2787 929 2 0.42380 15.25400 18.50500 10.83500 # H2787 + 2788 930 1 -0.84760 -0.35200 2.12700 2.31100 # O2788 + 2789 930 2 0.42380 -0.23500 1.67700 1.42300 # H2789 + 2790 930 2 0.42380 0.21100 2.95400 2.28200 # H2790 + 2791 931 1 -0.84760 22.05700 3.67900 8.65300 # O2791 + 2792 931 2 0.42380 22.20400 3.81800 7.65000 # H2792 + 2793 931 2 0.42380 21.38600 4.30700 9.15700 # H2793 + 2794 932 1 -0.84760 20.63000 18.22700 6.35000 # O2794 + 2795 932 2 0.42380 20.72300 17.56000 5.60500 # H2795 + 2796 932 2 0.42380 21.59700 18.38300 6.57900 # H2796 + 2797 933 1 -0.84760 10.33600 14.73200 29.18100 # O2797 + 2798 933 2 0.42380 11.21500 15.22900 28.92900 # H2798 + 2799 933 2 0.42380 9.70000 15.50300 28.86600 # H2799 + 2800 934 1 -0.84760 9.00000 16.90300 22.63500 # O2800 + 2801 934 2 0.42380 9.63800 16.85800 23.56400 # H2801 + 2802 934 2 0.42380 9.35700 17.71900 22.10000 # H2802 + 2803 935 1 -0.84760 18.72600 6.63300 17.16400 # O2803 + 2804 935 2 0.42380 17.72400 6.36500 17.23700 # H2804 + 2805 935 2 0.42380 18.76000 7.63400 16.96200 # H2805 + 2806 936 1 -0.84760 6.15100 19.41500 13.49200 # O2806 + 2807 936 2 0.42380 6.97600 19.09700 13.10800 # H2807 + 2808 936 2 0.42380 5.56400 19.60900 12.65100 # H2808 + 2809 937 1 -0.84760 5.17700 20.76200 16.11500 # O2809 + 2810 937 2 0.42380 5.98100 20.79700 15.46000 # H2810 + 2811 937 2 0.42380 4.21100 20.80200 15.58700 # H2811 + 2812 938 1 -0.84760 -0.80000 21.79300 -0.70400 # O2812 + 2813 938 2 0.42380 -1.82200 21.88600 -0.76200 # H2813 + 2814 938 2 0.42380 -0.52100 21.16000 -1.43000 # H2814 + 2815 939 1 -0.84760 24.75000 4.40000 5.35500 # O2815 + 2816 939 2 0.42380 25.42300 4.24100 4.62900 # H2816 + 2817 939 2 0.42380 24.33000 3.50200 5.56200 # H2817 + 2818 940 1 -0.84760 26.38700 10.98700 1.37700 # O2818 + 2819 940 2 0.42380 27.02400 10.83700 2.14100 # H2819 + 2820 940 2 0.42380 26.93000 11.40200 0.57500 # H2820 + 2821 941 1 -0.84760 19.70000 14.87400 6.04800 # O2821 + 2822 941 2 0.42380 19.49700 14.39500 6.90200 # H2822 + 2823 941 2 0.42380 18.85200 14.73300 5.51900 # H2823 + 2824 942 1 -0.84760 0.67000 19.62200 14.19600 # O2824 + 2825 942 2 0.42380 0.16700 19.21600 14.98100 # H2825 + 2826 942 2 0.42380 -0.04400 20.33000 14.02300 # H2826 + 2827 943 1 -0.84760 4.85500 -0.97200 29.97500 # O2827 + 2828 943 2 0.42380 4.13800 -0.34800 29.74500 # H2828 + 2829 943 2 0.42380 4.59500 -1.27000 30.90600 # H2829 + 2830 944 1 -0.84760 11.55400 -0.78500 4.88300 # O2830 + 2831 944 2 0.42380 12.20500 -1.56800 5.10300 # H2831 + 2832 944 2 0.42380 12.04700 -0.13900 4.28200 # H2832 + 2833 945 1 -0.84760 10.68200 20.44500 9.63900 # O2833 + 2834 945 2 0.42380 10.96500 20.47600 8.67100 # H2834 + 2835 945 2 0.42380 10.09900 21.33000 9.66700 # H2835 + 2836 946 1 -0.84760 9.43500 28.83400 12.17100 # O2836 + 2837 946 2 0.42380 10.23300 28.48000 11.62600 # H2837 + 2838 946 2 0.42380 9.70700 29.71600 12.68300 # H2838 + 2839 947 1 -0.84760 24.42900 15.38000 15.37300 # O2839 + 2840 947 2 0.42380 24.73800 16.32600 15.59700 # H2840 + 2841 947 2 0.42380 23.52700 15.54000 14.96200 # H2841 + 2842 948 1 -0.84760 28.53700 3.45800 10.49200 # O2842 + 2843 948 2 0.42380 27.97200 2.81900 9.98300 # H2843 + 2844 948 2 0.42380 28.10700 4.40200 10.39900 # H2844 + 2845 949 1 -0.84760 23.18600 26.69300 21.30600 # O2845 + 2846 949 2 0.42380 22.69800 25.99500 20.76100 # H2846 + 2847 949 2 0.42380 22.67300 26.92500 22.19500 # H2847 + 2848 950 1 -0.84760 29.35700 5.29100 22.99300 # O2848 + 2849 950 2 0.42380 28.53700 5.31300 22.33100 # H2849 + 2850 950 2 0.42380 30.05900 4.53300 22.62400 # H2850 + 2851 951 1 -0.84760 3.26000 21.15000 14.57200 # O2851 + 2852 951 2 0.42380 3.40500 21.94100 13.87800 # H2852 + 2853 951 2 0.42380 2.32200 20.78800 14.44200 # H2853 + 2854 952 1 -0.84760 28.70500 14.28000 13.80700 # O2854 + 2855 952 2 0.42380 29.43900 13.68300 14.21800 # H2855 + 2856 952 2 0.42380 27.90500 14.15300 14.48200 # H2856 + 2857 953 1 -0.84760 3.74200 28.83400 13.44000 # O2857 + 2858 953 2 0.42380 3.46400 29.57900 14.08200 # H2858 + 2859 953 2 0.42380 4.73500 28.72500 13.61800 # H2859 + 2860 954 1 -0.84760 19.87600 20.34500 12.64100 # O2860 + 2861 954 2 0.42380 18.83200 20.11900 12.67200 # H2861 + 2862 954 2 0.42380 19.86900 20.91200 11.81300 # H2862 + 2863 955 1 -0.84760 2.81200 16.09900 24.66600 # O2863 + 2864 955 2 0.42380 3.80800 16.18900 24.40500 # H2864 + 2865 955 2 0.42380 2.31700 15.22100 24.52100 # H2865 + 2866 956 1 -0.84760 22.68500 25.32700 26.75400 # O2866 + 2867 956 2 0.42380 21.85800 25.65800 27.12300 # H2867 + 2868 956 2 0.42380 22.68700 25.72400 25.80900 # H2868 + 2869 957 1 -0.84760 17.33800 18.81900 8.73000 # O2869 + 2870 957 2 0.42380 17.73800 19.57000 8.27200 # H2870 + 2871 957 2 0.42380 16.54400 19.16600 9.08000 # H2871 + 2872 958 1 -0.84760 10.48700 27.75000 14.43100 # O2872 + 2873 958 2 0.42380 10.60400 27.95800 13.42400 # H2873 + 2874 958 2 0.42380 9.52300 27.92700 14.58000 # H2874 + 2875 959 1 -0.84760 28.15200 11.71000 12.35700 # O2875 + 2876 959 2 0.42380 28.31400 12.37800 13.17700 # H2876 + 2877 959 2 0.42380 29.07200 11.76800 11.94400 # H2877 + 2878 960 1 -0.84760 0.81100 14.61800 27.22200 # O2878 + 2879 960 2 0.42380 1.55400 14.19000 26.70400 # H2879 + 2880 960 2 0.42380 0.28100 15.11800 26.54500 # H2880 + 2881 961 1 -0.84760 17.70900 6.95200 3.29300 # O2881 + 2882 961 2 0.42380 16.87100 6.55000 2.84100 # H2882 + 2883 961 2 0.42380 17.50200 7.94400 3.11300 # H2883 + 2884 962 1 -0.84760 4.26200 -0.02300 14.65800 # O2884 + 2885 962 2 0.42380 4.57300 0.57700 15.33200 # H2885 + 2886 962 2 0.42380 3.76700 0.51300 13.90800 # H2886 + 2887 963 1 -0.84760 11.58300 18.56700 3.53200 # O2887 + 2888 963 2 0.42380 11.24100 18.02700 2.77300 # H2888 + 2889 963 2 0.42380 12.54700 18.36500 3.77400 # H2889 + 2890 964 1 -0.84760 0.28400 27.96600 9.95200 # O2890 + 2891 964 2 0.42380 -0.61700 27.77600 10.28200 # H2891 + 2892 964 2 0.42380 0.90600 27.92100 10.73700 # H2892 + 2893 965 1 -0.84760 2.86300 14.32900 3.84300 # O2893 + 2894 965 2 0.42380 2.06700 14.55900 3.34300 # H2894 + 2895 965 2 0.42380 2.47100 14.46900 4.81000 # H2895 + 2896 966 1 -0.84760 5.81300 25.66500 7.58200 # O2896 + 2897 966 2 0.42380 6.54500 26.29500 7.76000 # H2897 + 2898 966 2 0.42380 5.40200 25.95500 6.72600 # H2898 + 2899 967 1 -0.84760 27.61900 18.33900 26.23400 # O2899 + 2900 967 2 0.42380 27.83600 19.09700 26.83800 # H2900 + 2901 967 2 0.42380 27.79900 17.50200 26.76300 # H2901 + 2902 968 1 -0.84760 28.15500 21.08800 10.10000 # O2902 + 2903 968 2 0.42380 27.30900 20.54500 10.01000 # H2903 + 2904 968 2 0.42380 28.66500 20.74000 10.90400 # H2904 + 2905 969 1 -0.84760 14.10600 7.19100 29.21700 # O2905 + 2906 969 2 0.42380 13.84100 7.15400 30.13100 # H2906 + 2907 969 2 0.42380 14.49600 6.26300 29.09300 # H2907 + 2908 970 1 -0.84760 22.89900 28.88500 8.08900 # O2908 + 2909 970 2 0.42380 22.57700 29.91800 8.11200 # H2909 + 2910 970 2 0.42380 22.40100 28.22300 7.48300 # H2910 + 2911 971 1 -0.84760 24.28100 7.57300 19.86400 # O2911 + 2912 971 2 0.42380 24.34900 8.63500 19.85500 # H2912 + 2913 971 2 0.42380 23.36000 7.31300 20.28200 # H2913 + 2914 972 1 -0.84760 14.69000 14.93000 0.56800 # O2914 + 2915 972 2 0.42380 15.34700 15.32300 1.23300 # H2915 + 2916 972 2 0.42380 13.79800 15.01700 1.02400 # H2916 + 2917 973 1 -0.84760 21.92500 20.22800 19.85100 # O2917 + 2918 973 2 0.42380 21.29300 20.93200 20.09200 # H2918 + 2919 973 2 0.42380 22.46800 20.18300 20.68300 # H2919 + 2920 974 1 -0.84760 9.36100 4.79600 19.61900 # O2920 + 2921 974 2 0.42380 8.99500 5.22200 18.77600 # H2921 + 2922 974 2 0.42380 10.19300 5.32400 19.45300 # H2922 + 2923 975 1 -0.84760 27.01500 7.03400 2.22100 # O2923 + 2924 975 2 0.42380 28.04900 7.10900 2.11500 # H2924 + 2925 975 2 0.42380 26.73100 7.87400 1.69400 # H2925 + 2926 976 1 -0.84760 3.68400 25.08900 23.94900 # O2926 + 2927 976 2 0.42380 3.37000 24.45900 24.65800 # H2927 + 2928 976 2 0.42380 4.71700 25.12100 23.99000 # H2928 + 2929 977 1 -0.84760 15.56400 28.53900 -0.79300 # O2929 + 2930 977 2 0.42380 15.51600 27.90500 -1.53600 # H2930 + 2931 977 2 0.42380 15.91500 27.91800 -0.04900 # H2931 + 2932 978 1 -0.84760 11.59700 12.21700 12.44700 # O2932 + 2933 978 2 0.42380 12.58500 11.83500 12.18100 # H2933 + 2934 978 2 0.42380 11.75300 13.09700 12.93800 # H2934 + 2935 979 1 -0.84760 25.65600 21.36700 6.38200 # O2935 + 2936 979 2 0.42380 25.71400 20.46600 6.86800 # H2936 + 2937 979 2 0.42380 26.47900 21.85000 6.73200 # H2937 + 2938 980 1 -0.84760 24.32900 6.83900 3.81300 # O2938 + 2939 980 2 0.42380 24.69400 5.94000 4.12200 # H2939 + 2940 980 2 0.42380 23.34000 6.78200 3.77900 # H2940 + 2941 981 1 -0.84760 0.86900 4.76800 3.28200 # O2941 + 2942 981 2 0.42380 0.96600 3.72200 3.49000 # H2942 + 2943 981 2 0.42380 0.85200 5.28800 4.15800 # H2943 + 2944 982 1 -0.84760 19.13800 23.57400 1.38400 # O2944 + 2945 982 2 0.42380 18.88900 24.55400 1.39300 # H2945 + 2946 982 2 0.42380 19.80700 23.39200 2.11900 # H2946 + 2947 983 1 -0.84760 6.53100 15.10900 26.06900 # O2947 + 2948 983 2 0.42380 6.10100 14.24000 26.22500 # H2948 + 2949 983 2 0.42380 7.57600 15.07800 25.95300 # H2949 + 2950 984 1 -0.84760 26.23600 8.42900 26.73400 # O2950 + 2951 984 2 0.42380 25.48000 8.39800 27.39900 # H2951 + 2952 984 2 0.42380 26.07400 7.74800 26.04700 # H2952 + 2953 985 1 -0.84760 24.57800 5.44600 8.08000 # O2953 + 2954 985 2 0.42380 24.47700 5.17400 7.05100 # H2954 + 2955 985 2 0.42380 23.65100 5.21700 8.41700 # H2955 + 2956 986 1 -0.84760 17.70800 1.71000 25.85400 # O2956 + 2957 986 2 0.42380 17.94700 1.97800 24.88200 # H2957 + 2958 986 2 0.42380 17.92600 0.76600 26.16300 # H2958 + 2959 987 1 -0.84760 3.39800 27.20600 22.11100 # O2959 + 2960 987 2 0.42380 3.61700 27.64700 21.25400 # H2960 + 2961 987 2 0.42380 3.92700 26.36400 22.40100 # H2961 + 2962 988 1 -0.84760 15.53600 18.22400 30.10500 # O2962 + 2963 988 2 0.42380 16.26400 18.07900 29.41900 # H2963 + 2964 988 2 0.42380 15.23600 17.22900 30.21600 # H2964 + 2965 989 1 -0.84760 18.67400 7.96200 20.94000 # O2965 + 2966 989 2 0.42380 18.15100 8.33300 20.11200 # H2966 + 2967 989 2 0.42380 17.97400 7.29100 21.31300 # H2967 + 2968 990 1 -0.84760 25.40900 21.16600 9.51300 # O2968 + 2969 990 2 0.42380 25.79200 21.14100 8.59800 # H2969 + 2970 990 2 0.42380 25.33300 22.17200 9.72600 # H2970 + 2971 991 1 -0.84760 19.75300 11.42500 13.98700 # O2971 + 2972 991 2 0.42380 19.83500 10.56700 14.48800 # H2972 + 2973 991 2 0.42380 19.00900 11.20900 13.35300 # H2973 + 2974 992 1 -0.84760 17.63800 13.68500 22.98500 # O2974 + 2975 992 2 0.42380 18.21300 12.84500 22.86900 # H2975 + 2976 992 2 0.42380 16.73000 13.27000 23.12100 # H2976 + 2977 993 1 -0.84760 27.39900 29.95700 26.23000 # O2977 + 2978 993 2 0.42380 27.70800 30.93500 26.31300 # H2978 + 2979 993 2 0.42380 26.69500 29.76400 26.96200 # H2979 + 2980 994 1 -0.84760 0.92500 26.26400 23.00600 # O2980 + 2981 994 2 0.42380 1.16900 26.54200 22.08600 # H2981 + 2982 994 2 0.42380 1.24800 26.99400 23.63500 # H2982 + 2983 995 1 -0.84760 10.67600 11.09800 15.98400 # O2983 + 2984 995 2 0.42380 10.30800 11.91200 16.45100 # H2984 + 2985 995 2 0.42380 9.86300 10.52900 15.64000 # H2985 + 2986 996 1 -0.84760 10.01800 17.14400 28.86700 # O2986 + 2987 996 2 0.42380 10.79400 17.22300 28.11500 # H2987 + 2988 996 2 0.42380 9.13000 17.25600 28.26800 # H2988 + 2989 997 1 -0.84760 7.67500 20.66300 23.83000 # O2989 + 2990 997 2 0.42380 8.37200 21.38200 24.04200 # H2990 + 2991 997 2 0.42380 7.87000 19.70500 24.21700 # H2991 + 2992 998 1 -0.84760 14.19000 12.06800 12.40500 # O2992 + 2993 998 2 0.42380 14.44200 12.51300 11.44100 # H2993 + 2994 998 2 0.42380 14.95300 12.46900 12.94900 # H2994 + 2995 999 1 -0.84760 29.27300 7.39000 0.56900 # O2995 + 2996 999 2 0.42380 28.67000 6.78700 0.03200 # H2996 + 2997 999 2 0.42380 29.05800 8.33200 0.22800 # H2997 + 2998 1000 1 -0.84760 12.04100 24.19700 27.58700 # O2998 + 2999 1000 2 0.42380 11.79500 24.66500 26.69800 # H2999 + 3000 1000 2 0.42380 11.47500 23.36800 27.42600 # H3000 + +Bonds + + 1 1 1 2 + 2 1 1 3 + 3 1 4 5 + 4 1 4 6 + 5 1 7 8 + 6 1 7 9 + 7 1 10 11 + 8 1 10 12 + 9 1 13 14 + 10 1 13 15 + 11 1 16 17 + 12 1 16 18 + 13 1 19 20 + 14 1 19 21 + 15 1 22 23 + 16 1 22 24 + 17 1 25 26 + 18 1 25 27 + 19 1 28 29 + 20 1 28 30 + 21 1 31 32 + 22 1 31 33 + 23 1 34 35 + 24 1 34 36 + 25 1 37 38 + 26 1 37 39 + 27 1 40 41 + 28 1 40 42 + 29 1 43 44 + 30 1 43 45 + 31 1 46 47 + 32 1 46 48 + 33 1 49 50 + 34 1 49 51 + 35 1 52 53 + 36 1 52 54 + 37 1 55 56 + 38 1 55 57 + 39 1 58 59 + 40 1 58 60 + 41 1 61 62 + 42 1 61 63 + 43 1 64 65 + 44 1 64 66 + 45 1 67 68 + 46 1 67 69 + 47 1 70 71 + 48 1 70 72 + 49 1 73 74 + 50 1 73 75 + 51 1 76 77 + 52 1 76 78 + 53 1 79 80 + 54 1 79 81 + 55 1 82 83 + 56 1 82 84 + 57 1 85 86 + 58 1 85 87 + 59 1 88 89 + 60 1 88 90 + 61 1 91 92 + 62 1 91 93 + 63 1 94 95 + 64 1 94 96 + 65 1 97 98 + 66 1 97 99 + 67 1 100 101 + 68 1 100 102 + 69 1 103 104 + 70 1 103 105 + 71 1 106 107 + 72 1 106 108 + 73 1 109 110 + 74 1 109 111 + 75 1 112 113 + 76 1 112 114 + 77 1 115 116 + 78 1 115 117 + 79 1 118 119 + 80 1 118 120 + 81 1 121 122 + 82 1 121 123 + 83 1 124 125 + 84 1 124 126 + 85 1 127 128 + 86 1 127 129 + 87 1 130 131 + 88 1 130 132 + 89 1 133 134 + 90 1 133 135 + 91 1 136 137 + 92 1 136 138 + 93 1 139 140 + 94 1 139 141 + 95 1 142 143 + 96 1 142 144 + 97 1 145 146 + 98 1 145 147 + 99 1 148 149 + 100 1 148 150 + 101 1 151 152 + 102 1 151 153 + 103 1 154 155 + 104 1 154 156 + 105 1 157 158 + 106 1 157 159 + 107 1 160 161 + 108 1 160 162 + 109 1 163 164 + 110 1 163 165 + 111 1 166 167 + 112 1 166 168 + 113 1 169 170 + 114 1 169 171 + 115 1 172 173 + 116 1 172 174 + 117 1 175 176 + 118 1 175 177 + 119 1 178 179 + 120 1 178 180 + 121 1 181 182 + 122 1 181 183 + 123 1 184 185 + 124 1 184 186 + 125 1 187 188 + 126 1 187 189 + 127 1 190 191 + 128 1 190 192 + 129 1 193 194 + 130 1 193 195 + 131 1 196 197 + 132 1 196 198 + 133 1 199 200 + 134 1 199 201 + 135 1 202 203 + 136 1 202 204 + 137 1 205 206 + 138 1 205 207 + 139 1 208 209 + 140 1 208 210 + 141 1 211 212 + 142 1 211 213 + 143 1 214 215 + 144 1 214 216 + 145 1 217 218 + 146 1 217 219 + 147 1 220 221 + 148 1 220 222 + 149 1 223 224 + 150 1 223 225 + 151 1 226 227 + 152 1 226 228 + 153 1 229 230 + 154 1 229 231 + 155 1 232 233 + 156 1 232 234 + 157 1 235 236 + 158 1 235 237 + 159 1 238 239 + 160 1 238 240 + 161 1 241 242 + 162 1 241 243 + 163 1 244 245 + 164 1 244 246 + 165 1 247 248 + 166 1 247 249 + 167 1 250 251 + 168 1 250 252 + 169 1 253 254 + 170 1 253 255 + 171 1 256 257 + 172 1 256 258 + 173 1 259 260 + 174 1 259 261 + 175 1 262 263 + 176 1 262 264 + 177 1 265 266 + 178 1 265 267 + 179 1 268 269 + 180 1 268 270 + 181 1 271 272 + 182 1 271 273 + 183 1 274 275 + 184 1 274 276 + 185 1 277 278 + 186 1 277 279 + 187 1 280 281 + 188 1 280 282 + 189 1 283 284 + 190 1 283 285 + 191 1 286 287 + 192 1 286 288 + 193 1 289 290 + 194 1 289 291 + 195 1 292 293 + 196 1 292 294 + 197 1 295 296 + 198 1 295 297 + 199 1 298 299 + 200 1 298 300 + 201 1 301 302 + 202 1 301 303 + 203 1 304 305 + 204 1 304 306 + 205 1 307 308 + 206 1 307 309 + 207 1 310 311 + 208 1 310 312 + 209 1 313 314 + 210 1 313 315 + 211 1 316 317 + 212 1 316 318 + 213 1 319 320 + 214 1 319 321 + 215 1 322 323 + 216 1 322 324 + 217 1 325 326 + 218 1 325 327 + 219 1 328 329 + 220 1 328 330 + 221 1 331 332 + 222 1 331 333 + 223 1 334 335 + 224 1 334 336 + 225 1 337 338 + 226 1 337 339 + 227 1 340 341 + 228 1 340 342 + 229 1 343 344 + 230 1 343 345 + 231 1 346 347 + 232 1 346 348 + 233 1 349 350 + 234 1 349 351 + 235 1 352 353 + 236 1 352 354 + 237 1 355 356 + 238 1 355 357 + 239 1 358 359 + 240 1 358 360 + 241 1 361 362 + 242 1 361 363 + 243 1 364 365 + 244 1 364 366 + 245 1 367 368 + 246 1 367 369 + 247 1 370 371 + 248 1 370 372 + 249 1 373 374 + 250 1 373 375 + 251 1 376 377 + 252 1 376 378 + 253 1 379 380 + 254 1 379 381 + 255 1 382 383 + 256 1 382 384 + 257 1 385 386 + 258 1 385 387 + 259 1 388 389 + 260 1 388 390 + 261 1 391 392 + 262 1 391 393 + 263 1 394 395 + 264 1 394 396 + 265 1 397 398 + 266 1 397 399 + 267 1 400 401 + 268 1 400 402 + 269 1 403 404 + 270 1 403 405 + 271 1 406 407 + 272 1 406 408 + 273 1 409 410 + 274 1 409 411 + 275 1 412 413 + 276 1 412 414 + 277 1 415 416 + 278 1 415 417 + 279 1 418 419 + 280 1 418 420 + 281 1 421 422 + 282 1 421 423 + 283 1 424 425 + 284 1 424 426 + 285 1 427 428 + 286 1 427 429 + 287 1 430 431 + 288 1 430 432 + 289 1 433 434 + 290 1 433 435 + 291 1 436 437 + 292 1 436 438 + 293 1 439 440 + 294 1 439 441 + 295 1 442 443 + 296 1 442 444 + 297 1 445 446 + 298 1 445 447 + 299 1 448 449 + 300 1 448 450 + 301 1 451 452 + 302 1 451 453 + 303 1 454 455 + 304 1 454 456 + 305 1 457 458 + 306 1 457 459 + 307 1 460 461 + 308 1 460 462 + 309 1 463 464 + 310 1 463 465 + 311 1 466 467 + 312 1 466 468 + 313 1 469 470 + 314 1 469 471 + 315 1 472 473 + 316 1 472 474 + 317 1 475 476 + 318 1 475 477 + 319 1 478 479 + 320 1 478 480 + 321 1 481 482 + 322 1 481 483 + 323 1 484 485 + 324 1 484 486 + 325 1 487 488 + 326 1 487 489 + 327 1 490 491 + 328 1 490 492 + 329 1 493 494 + 330 1 493 495 + 331 1 496 497 + 332 1 496 498 + 333 1 499 500 + 334 1 499 501 + 335 1 502 503 + 336 1 502 504 + 337 1 505 506 + 338 1 505 507 + 339 1 508 509 + 340 1 508 510 + 341 1 511 512 + 342 1 511 513 + 343 1 514 515 + 344 1 514 516 + 345 1 517 518 + 346 1 517 519 + 347 1 520 521 + 348 1 520 522 + 349 1 523 524 + 350 1 523 525 + 351 1 526 527 + 352 1 526 528 + 353 1 529 530 + 354 1 529 531 + 355 1 532 533 + 356 1 532 534 + 357 1 535 536 + 358 1 535 537 + 359 1 538 539 + 360 1 538 540 + 361 1 541 542 + 362 1 541 543 + 363 1 544 545 + 364 1 544 546 + 365 1 547 548 + 366 1 547 549 + 367 1 550 551 + 368 1 550 552 + 369 1 553 554 + 370 1 553 555 + 371 1 556 557 + 372 1 556 558 + 373 1 559 560 + 374 1 559 561 + 375 1 562 563 + 376 1 562 564 + 377 1 565 566 + 378 1 565 567 + 379 1 568 569 + 380 1 568 570 + 381 1 571 572 + 382 1 571 573 + 383 1 574 575 + 384 1 574 576 + 385 1 577 578 + 386 1 577 579 + 387 1 580 581 + 388 1 580 582 + 389 1 583 584 + 390 1 583 585 + 391 1 586 587 + 392 1 586 588 + 393 1 589 590 + 394 1 589 591 + 395 1 592 593 + 396 1 592 594 + 397 1 595 596 + 398 1 595 597 + 399 1 598 599 + 400 1 598 600 + 401 1 601 602 + 402 1 601 603 + 403 1 604 605 + 404 1 604 606 + 405 1 607 608 + 406 1 607 609 + 407 1 610 611 + 408 1 610 612 + 409 1 613 614 + 410 1 613 615 + 411 1 616 617 + 412 1 616 618 + 413 1 619 620 + 414 1 619 621 + 415 1 622 623 + 416 1 622 624 + 417 1 625 626 + 418 1 625 627 + 419 1 628 629 + 420 1 628 630 + 421 1 631 632 + 422 1 631 633 + 423 1 634 635 + 424 1 634 636 + 425 1 637 638 + 426 1 637 639 + 427 1 640 641 + 428 1 640 642 + 429 1 643 644 + 430 1 643 645 + 431 1 646 647 + 432 1 646 648 + 433 1 649 650 + 434 1 649 651 + 435 1 652 653 + 436 1 652 654 + 437 1 655 656 + 438 1 655 657 + 439 1 658 659 + 440 1 658 660 + 441 1 661 662 + 442 1 661 663 + 443 1 664 665 + 444 1 664 666 + 445 1 667 668 + 446 1 667 669 + 447 1 670 671 + 448 1 670 672 + 449 1 673 674 + 450 1 673 675 + 451 1 676 677 + 452 1 676 678 + 453 1 679 680 + 454 1 679 681 + 455 1 682 683 + 456 1 682 684 + 457 1 685 686 + 458 1 685 687 + 459 1 688 689 + 460 1 688 690 + 461 1 691 692 + 462 1 691 693 + 463 1 694 695 + 464 1 694 696 + 465 1 697 698 + 466 1 697 699 + 467 1 700 701 + 468 1 700 702 + 469 1 703 704 + 470 1 703 705 + 471 1 706 707 + 472 1 706 708 + 473 1 709 710 + 474 1 709 711 + 475 1 712 713 + 476 1 712 714 + 477 1 715 716 + 478 1 715 717 + 479 1 718 719 + 480 1 718 720 + 481 1 721 722 + 482 1 721 723 + 483 1 724 725 + 484 1 724 726 + 485 1 727 728 + 486 1 727 729 + 487 1 730 731 + 488 1 730 732 + 489 1 733 734 + 490 1 733 735 + 491 1 736 737 + 492 1 736 738 + 493 1 739 740 + 494 1 739 741 + 495 1 742 743 + 496 1 742 744 + 497 1 745 746 + 498 1 745 747 + 499 1 748 749 + 500 1 748 750 + 501 1 751 752 + 502 1 751 753 + 503 1 754 755 + 504 1 754 756 + 505 1 757 758 + 506 1 757 759 + 507 1 760 761 + 508 1 760 762 + 509 1 763 764 + 510 1 763 765 + 511 1 766 767 + 512 1 766 768 + 513 1 769 770 + 514 1 769 771 + 515 1 772 773 + 516 1 772 774 + 517 1 775 776 + 518 1 775 777 + 519 1 778 779 + 520 1 778 780 + 521 1 781 782 + 522 1 781 783 + 523 1 784 785 + 524 1 784 786 + 525 1 787 788 + 526 1 787 789 + 527 1 790 791 + 528 1 790 792 + 529 1 793 794 + 530 1 793 795 + 531 1 796 797 + 532 1 796 798 + 533 1 799 800 + 534 1 799 801 + 535 1 802 803 + 536 1 802 804 + 537 1 805 806 + 538 1 805 807 + 539 1 808 809 + 540 1 808 810 + 541 1 811 812 + 542 1 811 813 + 543 1 814 815 + 544 1 814 816 + 545 1 817 818 + 546 1 817 819 + 547 1 820 821 + 548 1 820 822 + 549 1 823 824 + 550 1 823 825 + 551 1 826 827 + 552 1 826 828 + 553 1 829 830 + 554 1 829 831 + 555 1 832 833 + 556 1 832 834 + 557 1 835 836 + 558 1 835 837 + 559 1 838 839 + 560 1 838 840 + 561 1 841 842 + 562 1 841 843 + 563 1 844 845 + 564 1 844 846 + 565 1 847 848 + 566 1 847 849 + 567 1 850 851 + 568 1 850 852 + 569 1 853 854 + 570 1 853 855 + 571 1 856 857 + 572 1 856 858 + 573 1 859 860 + 574 1 859 861 + 575 1 862 863 + 576 1 862 864 + 577 1 865 866 + 578 1 865 867 + 579 1 868 869 + 580 1 868 870 + 581 1 871 872 + 582 1 871 873 + 583 1 874 875 + 584 1 874 876 + 585 1 877 878 + 586 1 877 879 + 587 1 880 881 + 588 1 880 882 + 589 1 883 884 + 590 1 883 885 + 591 1 886 887 + 592 1 886 888 + 593 1 889 890 + 594 1 889 891 + 595 1 892 893 + 596 1 892 894 + 597 1 895 896 + 598 1 895 897 + 599 1 898 899 + 600 1 898 900 + 601 1 901 902 + 602 1 901 903 + 603 1 904 905 + 604 1 904 906 + 605 1 907 908 + 606 1 907 909 + 607 1 910 911 + 608 1 910 912 + 609 1 913 914 + 610 1 913 915 + 611 1 916 917 + 612 1 916 918 + 613 1 919 920 + 614 1 919 921 + 615 1 922 923 + 616 1 922 924 + 617 1 925 926 + 618 1 925 927 + 619 1 928 929 + 620 1 928 930 + 621 1 931 932 + 622 1 931 933 + 623 1 934 935 + 624 1 934 936 + 625 1 937 938 + 626 1 937 939 + 627 1 940 941 + 628 1 940 942 + 629 1 943 944 + 630 1 943 945 + 631 1 946 947 + 632 1 946 948 + 633 1 949 950 + 634 1 949 951 + 635 1 952 953 + 636 1 952 954 + 637 1 955 956 + 638 1 955 957 + 639 1 958 959 + 640 1 958 960 + 641 1 961 962 + 642 1 961 963 + 643 1 964 965 + 644 1 964 966 + 645 1 967 968 + 646 1 967 969 + 647 1 970 971 + 648 1 970 972 + 649 1 973 974 + 650 1 973 975 + 651 1 976 977 + 652 1 976 978 + 653 1 979 980 + 654 1 979 981 + 655 1 982 983 + 656 1 982 984 + 657 1 985 986 + 658 1 985 987 + 659 1 988 989 + 660 1 988 990 + 661 1 991 992 + 662 1 991 993 + 663 1 994 995 + 664 1 994 996 + 665 1 997 998 + 666 1 997 999 + 667 1 1000 1001 + 668 1 1000 1002 + 669 1 1003 1004 + 670 1 1003 1005 + 671 1 1006 1007 + 672 1 1006 1008 + 673 1 1009 1010 + 674 1 1009 1011 + 675 1 1012 1013 + 676 1 1012 1014 + 677 1 1015 1016 + 678 1 1015 1017 + 679 1 1018 1019 + 680 1 1018 1020 + 681 1 1021 1022 + 682 1 1021 1023 + 683 1 1024 1025 + 684 1 1024 1026 + 685 1 1027 1028 + 686 1 1027 1029 + 687 1 1030 1031 + 688 1 1030 1032 + 689 1 1033 1034 + 690 1 1033 1035 + 691 1 1036 1037 + 692 1 1036 1038 + 693 1 1039 1040 + 694 1 1039 1041 + 695 1 1042 1043 + 696 1 1042 1044 + 697 1 1045 1046 + 698 1 1045 1047 + 699 1 1048 1049 + 700 1 1048 1050 + 701 1 1051 1052 + 702 1 1051 1053 + 703 1 1054 1055 + 704 1 1054 1056 + 705 1 1057 1058 + 706 1 1057 1059 + 707 1 1060 1061 + 708 1 1060 1062 + 709 1 1063 1064 + 710 1 1063 1065 + 711 1 1066 1067 + 712 1 1066 1068 + 713 1 1069 1070 + 714 1 1069 1071 + 715 1 1072 1073 + 716 1 1072 1074 + 717 1 1075 1076 + 718 1 1075 1077 + 719 1 1078 1079 + 720 1 1078 1080 + 721 1 1081 1082 + 722 1 1081 1083 + 723 1 1084 1085 + 724 1 1084 1086 + 725 1 1087 1088 + 726 1 1087 1089 + 727 1 1090 1091 + 728 1 1090 1092 + 729 1 1093 1094 + 730 1 1093 1095 + 731 1 1096 1097 + 732 1 1096 1098 + 733 1 1099 1100 + 734 1 1099 1101 + 735 1 1102 1103 + 736 1 1102 1104 + 737 1 1105 1106 + 738 1 1105 1107 + 739 1 1108 1109 + 740 1 1108 1110 + 741 1 1111 1112 + 742 1 1111 1113 + 743 1 1114 1115 + 744 1 1114 1116 + 745 1 1117 1118 + 746 1 1117 1119 + 747 1 1120 1121 + 748 1 1120 1122 + 749 1 1123 1124 + 750 1 1123 1125 + 751 1 1126 1127 + 752 1 1126 1128 + 753 1 1129 1130 + 754 1 1129 1131 + 755 1 1132 1133 + 756 1 1132 1134 + 757 1 1135 1136 + 758 1 1135 1137 + 759 1 1138 1139 + 760 1 1138 1140 + 761 1 1141 1142 + 762 1 1141 1143 + 763 1 1144 1145 + 764 1 1144 1146 + 765 1 1147 1148 + 766 1 1147 1149 + 767 1 1150 1151 + 768 1 1150 1152 + 769 1 1153 1154 + 770 1 1153 1155 + 771 1 1156 1157 + 772 1 1156 1158 + 773 1 1159 1160 + 774 1 1159 1161 + 775 1 1162 1163 + 776 1 1162 1164 + 777 1 1165 1166 + 778 1 1165 1167 + 779 1 1168 1169 + 780 1 1168 1170 + 781 1 1171 1172 + 782 1 1171 1173 + 783 1 1174 1175 + 784 1 1174 1176 + 785 1 1177 1178 + 786 1 1177 1179 + 787 1 1180 1181 + 788 1 1180 1182 + 789 1 1183 1184 + 790 1 1183 1185 + 791 1 1186 1187 + 792 1 1186 1188 + 793 1 1189 1190 + 794 1 1189 1191 + 795 1 1192 1193 + 796 1 1192 1194 + 797 1 1195 1196 + 798 1 1195 1197 + 799 1 1198 1199 + 800 1 1198 1200 + 801 1 1201 1202 + 802 1 1201 1203 + 803 1 1204 1205 + 804 1 1204 1206 + 805 1 1207 1208 + 806 1 1207 1209 + 807 1 1210 1211 + 808 1 1210 1212 + 809 1 1213 1214 + 810 1 1213 1215 + 811 1 1216 1217 + 812 1 1216 1218 + 813 1 1219 1220 + 814 1 1219 1221 + 815 1 1222 1223 + 816 1 1222 1224 + 817 1 1225 1226 + 818 1 1225 1227 + 819 1 1228 1229 + 820 1 1228 1230 + 821 1 1231 1232 + 822 1 1231 1233 + 823 1 1234 1235 + 824 1 1234 1236 + 825 1 1237 1238 + 826 1 1237 1239 + 827 1 1240 1241 + 828 1 1240 1242 + 829 1 1243 1244 + 830 1 1243 1245 + 831 1 1246 1247 + 832 1 1246 1248 + 833 1 1249 1250 + 834 1 1249 1251 + 835 1 1252 1253 + 836 1 1252 1254 + 837 1 1255 1256 + 838 1 1255 1257 + 839 1 1258 1259 + 840 1 1258 1260 + 841 1 1261 1262 + 842 1 1261 1263 + 843 1 1264 1265 + 844 1 1264 1266 + 845 1 1267 1268 + 846 1 1267 1269 + 847 1 1270 1271 + 848 1 1270 1272 + 849 1 1273 1274 + 850 1 1273 1275 + 851 1 1276 1277 + 852 1 1276 1278 + 853 1 1279 1280 + 854 1 1279 1281 + 855 1 1282 1283 + 856 1 1282 1284 + 857 1 1285 1286 + 858 1 1285 1287 + 859 1 1288 1289 + 860 1 1288 1290 + 861 1 1291 1292 + 862 1 1291 1293 + 863 1 1294 1295 + 864 1 1294 1296 + 865 1 1297 1298 + 866 1 1297 1299 + 867 1 1300 1301 + 868 1 1300 1302 + 869 1 1303 1304 + 870 1 1303 1305 + 871 1 1306 1307 + 872 1 1306 1308 + 873 1 1309 1310 + 874 1 1309 1311 + 875 1 1312 1313 + 876 1 1312 1314 + 877 1 1315 1316 + 878 1 1315 1317 + 879 1 1318 1319 + 880 1 1318 1320 + 881 1 1321 1322 + 882 1 1321 1323 + 883 1 1324 1325 + 884 1 1324 1326 + 885 1 1327 1328 + 886 1 1327 1329 + 887 1 1330 1331 + 888 1 1330 1332 + 889 1 1333 1334 + 890 1 1333 1335 + 891 1 1336 1337 + 892 1 1336 1338 + 893 1 1339 1340 + 894 1 1339 1341 + 895 1 1342 1343 + 896 1 1342 1344 + 897 1 1345 1346 + 898 1 1345 1347 + 899 1 1348 1349 + 900 1 1348 1350 + 901 1 1351 1352 + 902 1 1351 1353 + 903 1 1354 1355 + 904 1 1354 1356 + 905 1 1357 1358 + 906 1 1357 1359 + 907 1 1360 1361 + 908 1 1360 1362 + 909 1 1363 1364 + 910 1 1363 1365 + 911 1 1366 1367 + 912 1 1366 1368 + 913 1 1369 1370 + 914 1 1369 1371 + 915 1 1372 1373 + 916 1 1372 1374 + 917 1 1375 1376 + 918 1 1375 1377 + 919 1 1378 1379 + 920 1 1378 1380 + 921 1 1381 1382 + 922 1 1381 1383 + 923 1 1384 1385 + 924 1 1384 1386 + 925 1 1387 1388 + 926 1 1387 1389 + 927 1 1390 1391 + 928 1 1390 1392 + 929 1 1393 1394 + 930 1 1393 1395 + 931 1 1396 1397 + 932 1 1396 1398 + 933 1 1399 1400 + 934 1 1399 1401 + 935 1 1402 1403 + 936 1 1402 1404 + 937 1 1405 1406 + 938 1 1405 1407 + 939 1 1408 1409 + 940 1 1408 1410 + 941 1 1411 1412 + 942 1 1411 1413 + 943 1 1414 1415 + 944 1 1414 1416 + 945 1 1417 1418 + 946 1 1417 1419 + 947 1 1420 1421 + 948 1 1420 1422 + 949 1 1423 1424 + 950 1 1423 1425 + 951 1 1426 1427 + 952 1 1426 1428 + 953 1 1429 1430 + 954 1 1429 1431 + 955 1 1432 1433 + 956 1 1432 1434 + 957 1 1435 1436 + 958 1 1435 1437 + 959 1 1438 1439 + 960 1 1438 1440 + 961 1 1441 1442 + 962 1 1441 1443 + 963 1 1444 1445 + 964 1 1444 1446 + 965 1 1447 1448 + 966 1 1447 1449 + 967 1 1450 1451 + 968 1 1450 1452 + 969 1 1453 1454 + 970 1 1453 1455 + 971 1 1456 1457 + 972 1 1456 1458 + 973 1 1459 1460 + 974 1 1459 1461 + 975 1 1462 1463 + 976 1 1462 1464 + 977 1 1465 1466 + 978 1 1465 1467 + 979 1 1468 1469 + 980 1 1468 1470 + 981 1 1471 1472 + 982 1 1471 1473 + 983 1 1474 1475 + 984 1 1474 1476 + 985 1 1477 1478 + 986 1 1477 1479 + 987 1 1480 1481 + 988 1 1480 1482 + 989 1 1483 1484 + 990 1 1483 1485 + 991 1 1486 1487 + 992 1 1486 1488 + 993 1 1489 1490 + 994 1 1489 1491 + 995 1 1492 1493 + 996 1 1492 1494 + 997 1 1495 1496 + 998 1 1495 1497 + 999 1 1498 1499 + 1000 1 1498 1500 + 1001 1 1501 1502 + 1002 1 1501 1503 + 1003 1 1504 1505 + 1004 1 1504 1506 + 1005 1 1507 1508 + 1006 1 1507 1509 + 1007 1 1510 1511 + 1008 1 1510 1512 + 1009 1 1513 1514 + 1010 1 1513 1515 + 1011 1 1516 1517 + 1012 1 1516 1518 + 1013 1 1519 1520 + 1014 1 1519 1521 + 1015 1 1522 1523 + 1016 1 1522 1524 + 1017 1 1525 1526 + 1018 1 1525 1527 + 1019 1 1528 1529 + 1020 1 1528 1530 + 1021 1 1531 1532 + 1022 1 1531 1533 + 1023 1 1534 1535 + 1024 1 1534 1536 + 1025 1 1537 1538 + 1026 1 1537 1539 + 1027 1 1540 1541 + 1028 1 1540 1542 + 1029 1 1543 1544 + 1030 1 1543 1545 + 1031 1 1546 1547 + 1032 1 1546 1548 + 1033 1 1549 1550 + 1034 1 1549 1551 + 1035 1 1552 1553 + 1036 1 1552 1554 + 1037 1 1555 1556 + 1038 1 1555 1557 + 1039 1 1558 1559 + 1040 1 1558 1560 + 1041 1 1561 1562 + 1042 1 1561 1563 + 1043 1 1564 1565 + 1044 1 1564 1566 + 1045 1 1567 1568 + 1046 1 1567 1569 + 1047 1 1570 1571 + 1048 1 1570 1572 + 1049 1 1573 1574 + 1050 1 1573 1575 + 1051 1 1576 1577 + 1052 1 1576 1578 + 1053 1 1579 1580 + 1054 1 1579 1581 + 1055 1 1582 1583 + 1056 1 1582 1584 + 1057 1 1585 1586 + 1058 1 1585 1587 + 1059 1 1588 1589 + 1060 1 1588 1590 + 1061 1 1591 1592 + 1062 1 1591 1593 + 1063 1 1594 1595 + 1064 1 1594 1596 + 1065 1 1597 1598 + 1066 1 1597 1599 + 1067 1 1600 1601 + 1068 1 1600 1602 + 1069 1 1603 1604 + 1070 1 1603 1605 + 1071 1 1606 1607 + 1072 1 1606 1608 + 1073 1 1609 1610 + 1074 1 1609 1611 + 1075 1 1612 1613 + 1076 1 1612 1614 + 1077 1 1615 1616 + 1078 1 1615 1617 + 1079 1 1618 1619 + 1080 1 1618 1620 + 1081 1 1621 1622 + 1082 1 1621 1623 + 1083 1 1624 1625 + 1084 1 1624 1626 + 1085 1 1627 1628 + 1086 1 1627 1629 + 1087 1 1630 1631 + 1088 1 1630 1632 + 1089 1 1633 1634 + 1090 1 1633 1635 + 1091 1 1636 1637 + 1092 1 1636 1638 + 1093 1 1639 1640 + 1094 1 1639 1641 + 1095 1 1642 1643 + 1096 1 1642 1644 + 1097 1 1645 1646 + 1098 1 1645 1647 + 1099 1 1648 1649 + 1100 1 1648 1650 + 1101 1 1651 1652 + 1102 1 1651 1653 + 1103 1 1654 1655 + 1104 1 1654 1656 + 1105 1 1657 1658 + 1106 1 1657 1659 + 1107 1 1660 1661 + 1108 1 1660 1662 + 1109 1 1663 1664 + 1110 1 1663 1665 + 1111 1 1666 1667 + 1112 1 1666 1668 + 1113 1 1669 1670 + 1114 1 1669 1671 + 1115 1 1672 1673 + 1116 1 1672 1674 + 1117 1 1675 1676 + 1118 1 1675 1677 + 1119 1 1678 1679 + 1120 1 1678 1680 + 1121 1 1681 1682 + 1122 1 1681 1683 + 1123 1 1684 1685 + 1124 1 1684 1686 + 1125 1 1687 1688 + 1126 1 1687 1689 + 1127 1 1690 1691 + 1128 1 1690 1692 + 1129 1 1693 1694 + 1130 1 1693 1695 + 1131 1 1696 1697 + 1132 1 1696 1698 + 1133 1 1699 1700 + 1134 1 1699 1701 + 1135 1 1702 1703 + 1136 1 1702 1704 + 1137 1 1705 1706 + 1138 1 1705 1707 + 1139 1 1708 1709 + 1140 1 1708 1710 + 1141 1 1711 1712 + 1142 1 1711 1713 + 1143 1 1714 1715 + 1144 1 1714 1716 + 1145 1 1717 1718 + 1146 1 1717 1719 + 1147 1 1720 1721 + 1148 1 1720 1722 + 1149 1 1723 1724 + 1150 1 1723 1725 + 1151 1 1726 1727 + 1152 1 1726 1728 + 1153 1 1729 1730 + 1154 1 1729 1731 + 1155 1 1732 1733 + 1156 1 1732 1734 + 1157 1 1735 1736 + 1158 1 1735 1737 + 1159 1 1738 1739 + 1160 1 1738 1740 + 1161 1 1741 1742 + 1162 1 1741 1743 + 1163 1 1744 1745 + 1164 1 1744 1746 + 1165 1 1747 1748 + 1166 1 1747 1749 + 1167 1 1750 1751 + 1168 1 1750 1752 + 1169 1 1753 1754 + 1170 1 1753 1755 + 1171 1 1756 1757 + 1172 1 1756 1758 + 1173 1 1759 1760 + 1174 1 1759 1761 + 1175 1 1762 1763 + 1176 1 1762 1764 + 1177 1 1765 1766 + 1178 1 1765 1767 + 1179 1 1768 1769 + 1180 1 1768 1770 + 1181 1 1771 1772 + 1182 1 1771 1773 + 1183 1 1774 1775 + 1184 1 1774 1776 + 1185 1 1777 1778 + 1186 1 1777 1779 + 1187 1 1780 1781 + 1188 1 1780 1782 + 1189 1 1783 1784 + 1190 1 1783 1785 + 1191 1 1786 1787 + 1192 1 1786 1788 + 1193 1 1789 1790 + 1194 1 1789 1791 + 1195 1 1792 1793 + 1196 1 1792 1794 + 1197 1 1795 1796 + 1198 1 1795 1797 + 1199 1 1798 1799 + 1200 1 1798 1800 + 1201 1 1801 1802 + 1202 1 1801 1803 + 1203 1 1804 1805 + 1204 1 1804 1806 + 1205 1 1807 1808 + 1206 1 1807 1809 + 1207 1 1810 1811 + 1208 1 1810 1812 + 1209 1 1813 1814 + 1210 1 1813 1815 + 1211 1 1816 1817 + 1212 1 1816 1818 + 1213 1 1819 1820 + 1214 1 1819 1821 + 1215 1 1822 1823 + 1216 1 1822 1824 + 1217 1 1825 1826 + 1218 1 1825 1827 + 1219 1 1828 1829 + 1220 1 1828 1830 + 1221 1 1831 1832 + 1222 1 1831 1833 + 1223 1 1834 1835 + 1224 1 1834 1836 + 1225 1 1837 1838 + 1226 1 1837 1839 + 1227 1 1840 1841 + 1228 1 1840 1842 + 1229 1 1843 1844 + 1230 1 1843 1845 + 1231 1 1846 1847 + 1232 1 1846 1848 + 1233 1 1849 1850 + 1234 1 1849 1851 + 1235 1 1852 1853 + 1236 1 1852 1854 + 1237 1 1855 1856 + 1238 1 1855 1857 + 1239 1 1858 1859 + 1240 1 1858 1860 + 1241 1 1861 1862 + 1242 1 1861 1863 + 1243 1 1864 1865 + 1244 1 1864 1866 + 1245 1 1867 1868 + 1246 1 1867 1869 + 1247 1 1870 1871 + 1248 1 1870 1872 + 1249 1 1873 1874 + 1250 1 1873 1875 + 1251 1 1876 1877 + 1252 1 1876 1878 + 1253 1 1879 1880 + 1254 1 1879 1881 + 1255 1 1882 1883 + 1256 1 1882 1884 + 1257 1 1885 1886 + 1258 1 1885 1887 + 1259 1 1888 1889 + 1260 1 1888 1890 + 1261 1 1891 1892 + 1262 1 1891 1893 + 1263 1 1894 1895 + 1264 1 1894 1896 + 1265 1 1897 1898 + 1266 1 1897 1899 + 1267 1 1900 1901 + 1268 1 1900 1902 + 1269 1 1903 1904 + 1270 1 1903 1905 + 1271 1 1906 1907 + 1272 1 1906 1908 + 1273 1 1909 1910 + 1274 1 1909 1911 + 1275 1 1912 1913 + 1276 1 1912 1914 + 1277 1 1915 1916 + 1278 1 1915 1917 + 1279 1 1918 1919 + 1280 1 1918 1920 + 1281 1 1921 1922 + 1282 1 1921 1923 + 1283 1 1924 1925 + 1284 1 1924 1926 + 1285 1 1927 1928 + 1286 1 1927 1929 + 1287 1 1930 1931 + 1288 1 1930 1932 + 1289 1 1933 1934 + 1290 1 1933 1935 + 1291 1 1936 1937 + 1292 1 1936 1938 + 1293 1 1939 1940 + 1294 1 1939 1941 + 1295 1 1942 1943 + 1296 1 1942 1944 + 1297 1 1945 1946 + 1298 1 1945 1947 + 1299 1 1948 1949 + 1300 1 1948 1950 + 1301 1 1951 1952 + 1302 1 1951 1953 + 1303 1 1954 1955 + 1304 1 1954 1956 + 1305 1 1957 1958 + 1306 1 1957 1959 + 1307 1 1960 1961 + 1308 1 1960 1962 + 1309 1 1963 1964 + 1310 1 1963 1965 + 1311 1 1966 1967 + 1312 1 1966 1968 + 1313 1 1969 1970 + 1314 1 1969 1971 + 1315 1 1972 1973 + 1316 1 1972 1974 + 1317 1 1975 1976 + 1318 1 1975 1977 + 1319 1 1978 1979 + 1320 1 1978 1980 + 1321 1 1981 1982 + 1322 1 1981 1983 + 1323 1 1984 1985 + 1324 1 1984 1986 + 1325 1 1987 1988 + 1326 1 1987 1989 + 1327 1 1990 1991 + 1328 1 1990 1992 + 1329 1 1993 1994 + 1330 1 1993 1995 + 1331 1 1996 1997 + 1332 1 1996 1998 + 1333 1 1999 2000 + 1334 1 1999 2001 + 1335 1 2002 2003 + 1336 1 2002 2004 + 1337 1 2005 2006 + 1338 1 2005 2007 + 1339 1 2008 2009 + 1340 1 2008 2010 + 1341 1 2011 2012 + 1342 1 2011 2013 + 1343 1 2014 2015 + 1344 1 2014 2016 + 1345 1 2017 2018 + 1346 1 2017 2019 + 1347 1 2020 2021 + 1348 1 2020 2022 + 1349 1 2023 2024 + 1350 1 2023 2025 + 1351 1 2026 2027 + 1352 1 2026 2028 + 1353 1 2029 2030 + 1354 1 2029 2031 + 1355 1 2032 2033 + 1356 1 2032 2034 + 1357 1 2035 2036 + 1358 1 2035 2037 + 1359 1 2038 2039 + 1360 1 2038 2040 + 1361 1 2041 2042 + 1362 1 2041 2043 + 1363 1 2044 2045 + 1364 1 2044 2046 + 1365 1 2047 2048 + 1366 1 2047 2049 + 1367 1 2050 2051 + 1368 1 2050 2052 + 1369 1 2053 2054 + 1370 1 2053 2055 + 1371 1 2056 2057 + 1372 1 2056 2058 + 1373 1 2059 2060 + 1374 1 2059 2061 + 1375 1 2062 2063 + 1376 1 2062 2064 + 1377 1 2065 2066 + 1378 1 2065 2067 + 1379 1 2068 2069 + 1380 1 2068 2070 + 1381 1 2071 2072 + 1382 1 2071 2073 + 1383 1 2074 2075 + 1384 1 2074 2076 + 1385 1 2077 2078 + 1386 1 2077 2079 + 1387 1 2080 2081 + 1388 1 2080 2082 + 1389 1 2083 2084 + 1390 1 2083 2085 + 1391 1 2086 2087 + 1392 1 2086 2088 + 1393 1 2089 2090 + 1394 1 2089 2091 + 1395 1 2092 2093 + 1396 1 2092 2094 + 1397 1 2095 2096 + 1398 1 2095 2097 + 1399 1 2098 2099 + 1400 1 2098 2100 + 1401 1 2101 2102 + 1402 1 2101 2103 + 1403 1 2104 2105 + 1404 1 2104 2106 + 1405 1 2107 2108 + 1406 1 2107 2109 + 1407 1 2110 2111 + 1408 1 2110 2112 + 1409 1 2113 2114 + 1410 1 2113 2115 + 1411 1 2116 2117 + 1412 1 2116 2118 + 1413 1 2119 2120 + 1414 1 2119 2121 + 1415 1 2122 2123 + 1416 1 2122 2124 + 1417 1 2125 2126 + 1418 1 2125 2127 + 1419 1 2128 2129 + 1420 1 2128 2130 + 1421 1 2131 2132 + 1422 1 2131 2133 + 1423 1 2134 2135 + 1424 1 2134 2136 + 1425 1 2137 2138 + 1426 1 2137 2139 + 1427 1 2140 2141 + 1428 1 2140 2142 + 1429 1 2143 2144 + 1430 1 2143 2145 + 1431 1 2146 2147 + 1432 1 2146 2148 + 1433 1 2149 2150 + 1434 1 2149 2151 + 1435 1 2152 2153 + 1436 1 2152 2154 + 1437 1 2155 2156 + 1438 1 2155 2157 + 1439 1 2158 2159 + 1440 1 2158 2160 + 1441 1 2161 2162 + 1442 1 2161 2163 + 1443 1 2164 2165 + 1444 1 2164 2166 + 1445 1 2167 2168 + 1446 1 2167 2169 + 1447 1 2170 2171 + 1448 1 2170 2172 + 1449 1 2173 2174 + 1450 1 2173 2175 + 1451 1 2176 2177 + 1452 1 2176 2178 + 1453 1 2179 2180 + 1454 1 2179 2181 + 1455 1 2182 2183 + 1456 1 2182 2184 + 1457 1 2185 2186 + 1458 1 2185 2187 + 1459 1 2188 2189 + 1460 1 2188 2190 + 1461 1 2191 2192 + 1462 1 2191 2193 + 1463 1 2194 2195 + 1464 1 2194 2196 + 1465 1 2197 2198 + 1466 1 2197 2199 + 1467 1 2200 2201 + 1468 1 2200 2202 + 1469 1 2203 2204 + 1470 1 2203 2205 + 1471 1 2206 2207 + 1472 1 2206 2208 + 1473 1 2209 2210 + 1474 1 2209 2211 + 1475 1 2212 2213 + 1476 1 2212 2214 + 1477 1 2215 2216 + 1478 1 2215 2217 + 1479 1 2218 2219 + 1480 1 2218 2220 + 1481 1 2221 2222 + 1482 1 2221 2223 + 1483 1 2224 2225 + 1484 1 2224 2226 + 1485 1 2227 2228 + 1486 1 2227 2229 + 1487 1 2230 2231 + 1488 1 2230 2232 + 1489 1 2233 2234 + 1490 1 2233 2235 + 1491 1 2236 2237 + 1492 1 2236 2238 + 1493 1 2239 2240 + 1494 1 2239 2241 + 1495 1 2242 2243 + 1496 1 2242 2244 + 1497 1 2245 2246 + 1498 1 2245 2247 + 1499 1 2248 2249 + 1500 1 2248 2250 + 1501 1 2251 2252 + 1502 1 2251 2253 + 1503 1 2254 2255 + 1504 1 2254 2256 + 1505 1 2257 2258 + 1506 1 2257 2259 + 1507 1 2260 2261 + 1508 1 2260 2262 + 1509 1 2263 2264 + 1510 1 2263 2265 + 1511 1 2266 2267 + 1512 1 2266 2268 + 1513 1 2269 2270 + 1514 1 2269 2271 + 1515 1 2272 2273 + 1516 1 2272 2274 + 1517 1 2275 2276 + 1518 1 2275 2277 + 1519 1 2278 2279 + 1520 1 2278 2280 + 1521 1 2281 2282 + 1522 1 2281 2283 + 1523 1 2284 2285 + 1524 1 2284 2286 + 1525 1 2287 2288 + 1526 1 2287 2289 + 1527 1 2290 2291 + 1528 1 2290 2292 + 1529 1 2293 2294 + 1530 1 2293 2295 + 1531 1 2296 2297 + 1532 1 2296 2298 + 1533 1 2299 2300 + 1534 1 2299 2301 + 1535 1 2302 2303 + 1536 1 2302 2304 + 1537 1 2305 2306 + 1538 1 2305 2307 + 1539 1 2308 2309 + 1540 1 2308 2310 + 1541 1 2311 2312 + 1542 1 2311 2313 + 1543 1 2314 2315 + 1544 1 2314 2316 + 1545 1 2317 2318 + 1546 1 2317 2319 + 1547 1 2320 2321 + 1548 1 2320 2322 + 1549 1 2323 2324 + 1550 1 2323 2325 + 1551 1 2326 2327 + 1552 1 2326 2328 + 1553 1 2329 2330 + 1554 1 2329 2331 + 1555 1 2332 2333 + 1556 1 2332 2334 + 1557 1 2335 2336 + 1558 1 2335 2337 + 1559 1 2338 2339 + 1560 1 2338 2340 + 1561 1 2341 2342 + 1562 1 2341 2343 + 1563 1 2344 2345 + 1564 1 2344 2346 + 1565 1 2347 2348 + 1566 1 2347 2349 + 1567 1 2350 2351 + 1568 1 2350 2352 + 1569 1 2353 2354 + 1570 1 2353 2355 + 1571 1 2356 2357 + 1572 1 2356 2358 + 1573 1 2359 2360 + 1574 1 2359 2361 + 1575 1 2362 2363 + 1576 1 2362 2364 + 1577 1 2365 2366 + 1578 1 2365 2367 + 1579 1 2368 2369 + 1580 1 2368 2370 + 1581 1 2371 2372 + 1582 1 2371 2373 + 1583 1 2374 2375 + 1584 1 2374 2376 + 1585 1 2377 2378 + 1586 1 2377 2379 + 1587 1 2380 2381 + 1588 1 2380 2382 + 1589 1 2383 2384 + 1590 1 2383 2385 + 1591 1 2386 2387 + 1592 1 2386 2388 + 1593 1 2389 2390 + 1594 1 2389 2391 + 1595 1 2392 2393 + 1596 1 2392 2394 + 1597 1 2395 2396 + 1598 1 2395 2397 + 1599 1 2398 2399 + 1600 1 2398 2400 + 1601 1 2401 2402 + 1602 1 2401 2403 + 1603 1 2404 2405 + 1604 1 2404 2406 + 1605 1 2407 2408 + 1606 1 2407 2409 + 1607 1 2410 2411 + 1608 1 2410 2412 + 1609 1 2413 2414 + 1610 1 2413 2415 + 1611 1 2416 2417 + 1612 1 2416 2418 + 1613 1 2419 2420 + 1614 1 2419 2421 + 1615 1 2422 2423 + 1616 1 2422 2424 + 1617 1 2425 2426 + 1618 1 2425 2427 + 1619 1 2428 2429 + 1620 1 2428 2430 + 1621 1 2431 2432 + 1622 1 2431 2433 + 1623 1 2434 2435 + 1624 1 2434 2436 + 1625 1 2437 2438 + 1626 1 2437 2439 + 1627 1 2440 2441 + 1628 1 2440 2442 + 1629 1 2443 2444 + 1630 1 2443 2445 + 1631 1 2446 2447 + 1632 1 2446 2448 + 1633 1 2449 2450 + 1634 1 2449 2451 + 1635 1 2452 2453 + 1636 1 2452 2454 + 1637 1 2455 2456 + 1638 1 2455 2457 + 1639 1 2458 2459 + 1640 1 2458 2460 + 1641 1 2461 2462 + 1642 1 2461 2463 + 1643 1 2464 2465 + 1644 1 2464 2466 + 1645 1 2467 2468 + 1646 1 2467 2469 + 1647 1 2470 2471 + 1648 1 2470 2472 + 1649 1 2473 2474 + 1650 1 2473 2475 + 1651 1 2476 2477 + 1652 1 2476 2478 + 1653 1 2479 2480 + 1654 1 2479 2481 + 1655 1 2482 2483 + 1656 1 2482 2484 + 1657 1 2485 2486 + 1658 1 2485 2487 + 1659 1 2488 2489 + 1660 1 2488 2490 + 1661 1 2491 2492 + 1662 1 2491 2493 + 1663 1 2494 2495 + 1664 1 2494 2496 + 1665 1 2497 2498 + 1666 1 2497 2499 + 1667 1 2500 2501 + 1668 1 2500 2502 + 1669 1 2503 2504 + 1670 1 2503 2505 + 1671 1 2506 2507 + 1672 1 2506 2508 + 1673 1 2509 2510 + 1674 1 2509 2511 + 1675 1 2512 2513 + 1676 1 2512 2514 + 1677 1 2515 2516 + 1678 1 2515 2517 + 1679 1 2518 2519 + 1680 1 2518 2520 + 1681 1 2521 2522 + 1682 1 2521 2523 + 1683 1 2524 2525 + 1684 1 2524 2526 + 1685 1 2527 2528 + 1686 1 2527 2529 + 1687 1 2530 2531 + 1688 1 2530 2532 + 1689 1 2533 2534 + 1690 1 2533 2535 + 1691 1 2536 2537 + 1692 1 2536 2538 + 1693 1 2539 2540 + 1694 1 2539 2541 + 1695 1 2542 2543 + 1696 1 2542 2544 + 1697 1 2545 2546 + 1698 1 2545 2547 + 1699 1 2548 2549 + 1700 1 2548 2550 + 1701 1 2551 2552 + 1702 1 2551 2553 + 1703 1 2554 2555 + 1704 1 2554 2556 + 1705 1 2557 2558 + 1706 1 2557 2559 + 1707 1 2560 2561 + 1708 1 2560 2562 + 1709 1 2563 2564 + 1710 1 2563 2565 + 1711 1 2566 2567 + 1712 1 2566 2568 + 1713 1 2569 2570 + 1714 1 2569 2571 + 1715 1 2572 2573 + 1716 1 2572 2574 + 1717 1 2575 2576 + 1718 1 2575 2577 + 1719 1 2578 2579 + 1720 1 2578 2580 + 1721 1 2581 2582 + 1722 1 2581 2583 + 1723 1 2584 2585 + 1724 1 2584 2586 + 1725 1 2587 2588 + 1726 1 2587 2589 + 1727 1 2590 2591 + 1728 1 2590 2592 + 1729 1 2593 2594 + 1730 1 2593 2595 + 1731 1 2596 2597 + 1732 1 2596 2598 + 1733 1 2599 2600 + 1734 1 2599 2601 + 1735 1 2602 2603 + 1736 1 2602 2604 + 1737 1 2605 2606 + 1738 1 2605 2607 + 1739 1 2608 2609 + 1740 1 2608 2610 + 1741 1 2611 2612 + 1742 1 2611 2613 + 1743 1 2614 2615 + 1744 1 2614 2616 + 1745 1 2617 2618 + 1746 1 2617 2619 + 1747 1 2620 2621 + 1748 1 2620 2622 + 1749 1 2623 2624 + 1750 1 2623 2625 + 1751 1 2626 2627 + 1752 1 2626 2628 + 1753 1 2629 2630 + 1754 1 2629 2631 + 1755 1 2632 2633 + 1756 1 2632 2634 + 1757 1 2635 2636 + 1758 1 2635 2637 + 1759 1 2638 2639 + 1760 1 2638 2640 + 1761 1 2641 2642 + 1762 1 2641 2643 + 1763 1 2644 2645 + 1764 1 2644 2646 + 1765 1 2647 2648 + 1766 1 2647 2649 + 1767 1 2650 2651 + 1768 1 2650 2652 + 1769 1 2653 2654 + 1770 1 2653 2655 + 1771 1 2656 2657 + 1772 1 2656 2658 + 1773 1 2659 2660 + 1774 1 2659 2661 + 1775 1 2662 2663 + 1776 1 2662 2664 + 1777 1 2665 2666 + 1778 1 2665 2667 + 1779 1 2668 2669 + 1780 1 2668 2670 + 1781 1 2671 2672 + 1782 1 2671 2673 + 1783 1 2674 2675 + 1784 1 2674 2676 + 1785 1 2677 2678 + 1786 1 2677 2679 + 1787 1 2680 2681 + 1788 1 2680 2682 + 1789 1 2683 2684 + 1790 1 2683 2685 + 1791 1 2686 2687 + 1792 1 2686 2688 + 1793 1 2689 2690 + 1794 1 2689 2691 + 1795 1 2692 2693 + 1796 1 2692 2694 + 1797 1 2695 2696 + 1798 1 2695 2697 + 1799 1 2698 2699 + 1800 1 2698 2700 + 1801 1 2701 2702 + 1802 1 2701 2703 + 1803 1 2704 2705 + 1804 1 2704 2706 + 1805 1 2707 2708 + 1806 1 2707 2709 + 1807 1 2710 2711 + 1808 1 2710 2712 + 1809 1 2713 2714 + 1810 1 2713 2715 + 1811 1 2716 2717 + 1812 1 2716 2718 + 1813 1 2719 2720 + 1814 1 2719 2721 + 1815 1 2722 2723 + 1816 1 2722 2724 + 1817 1 2725 2726 + 1818 1 2725 2727 + 1819 1 2728 2729 + 1820 1 2728 2730 + 1821 1 2731 2732 + 1822 1 2731 2733 + 1823 1 2734 2735 + 1824 1 2734 2736 + 1825 1 2737 2738 + 1826 1 2737 2739 + 1827 1 2740 2741 + 1828 1 2740 2742 + 1829 1 2743 2744 + 1830 1 2743 2745 + 1831 1 2746 2747 + 1832 1 2746 2748 + 1833 1 2749 2750 + 1834 1 2749 2751 + 1835 1 2752 2753 + 1836 1 2752 2754 + 1837 1 2755 2756 + 1838 1 2755 2757 + 1839 1 2758 2759 + 1840 1 2758 2760 + 1841 1 2761 2762 + 1842 1 2761 2763 + 1843 1 2764 2765 + 1844 1 2764 2766 + 1845 1 2767 2768 + 1846 1 2767 2769 + 1847 1 2770 2771 + 1848 1 2770 2772 + 1849 1 2773 2774 + 1850 1 2773 2775 + 1851 1 2776 2777 + 1852 1 2776 2778 + 1853 1 2779 2780 + 1854 1 2779 2781 + 1855 1 2782 2783 + 1856 1 2782 2784 + 1857 1 2785 2786 + 1858 1 2785 2787 + 1859 1 2788 2789 + 1860 1 2788 2790 + 1861 1 2791 2792 + 1862 1 2791 2793 + 1863 1 2794 2795 + 1864 1 2794 2796 + 1865 1 2797 2798 + 1866 1 2797 2799 + 1867 1 2800 2801 + 1868 1 2800 2802 + 1869 1 2803 2804 + 1870 1 2803 2805 + 1871 1 2806 2807 + 1872 1 2806 2808 + 1873 1 2809 2810 + 1874 1 2809 2811 + 1875 1 2812 2813 + 1876 1 2812 2814 + 1877 1 2815 2816 + 1878 1 2815 2817 + 1879 1 2818 2819 + 1880 1 2818 2820 + 1881 1 2821 2822 + 1882 1 2821 2823 + 1883 1 2824 2825 + 1884 1 2824 2826 + 1885 1 2827 2828 + 1886 1 2827 2829 + 1887 1 2830 2831 + 1888 1 2830 2832 + 1889 1 2833 2834 + 1890 1 2833 2835 + 1891 1 2836 2837 + 1892 1 2836 2838 + 1893 1 2839 2840 + 1894 1 2839 2841 + 1895 1 2842 2843 + 1896 1 2842 2844 + 1897 1 2845 2846 + 1898 1 2845 2847 + 1899 1 2848 2849 + 1900 1 2848 2850 + 1901 1 2851 2852 + 1902 1 2851 2853 + 1903 1 2854 2855 + 1904 1 2854 2856 + 1905 1 2857 2858 + 1906 1 2857 2859 + 1907 1 2860 2861 + 1908 1 2860 2862 + 1909 1 2863 2864 + 1910 1 2863 2865 + 1911 1 2866 2867 + 1912 1 2866 2868 + 1913 1 2869 2870 + 1914 1 2869 2871 + 1915 1 2872 2873 + 1916 1 2872 2874 + 1917 1 2875 2876 + 1918 1 2875 2877 + 1919 1 2878 2879 + 1920 1 2878 2880 + 1921 1 2881 2882 + 1922 1 2881 2883 + 1923 1 2884 2885 + 1924 1 2884 2886 + 1925 1 2887 2888 + 1926 1 2887 2889 + 1927 1 2890 2891 + 1928 1 2890 2892 + 1929 1 2893 2894 + 1930 1 2893 2895 + 1931 1 2896 2897 + 1932 1 2896 2898 + 1933 1 2899 2900 + 1934 1 2899 2901 + 1935 1 2902 2903 + 1936 1 2902 2904 + 1937 1 2905 2906 + 1938 1 2905 2907 + 1939 1 2908 2909 + 1940 1 2908 2910 + 1941 1 2911 2912 + 1942 1 2911 2913 + 1943 1 2914 2915 + 1944 1 2914 2916 + 1945 1 2917 2918 + 1946 1 2917 2919 + 1947 1 2920 2921 + 1948 1 2920 2922 + 1949 1 2923 2924 + 1950 1 2923 2925 + 1951 1 2926 2927 + 1952 1 2926 2928 + 1953 1 2929 2930 + 1954 1 2929 2931 + 1955 1 2932 2933 + 1956 1 2932 2934 + 1957 1 2935 2936 + 1958 1 2935 2937 + 1959 1 2938 2939 + 1960 1 2938 2940 + 1961 1 2941 2942 + 1962 1 2941 2943 + 1963 1 2944 2945 + 1964 1 2944 2946 + 1965 1 2947 2948 + 1966 1 2947 2949 + 1967 1 2950 2951 + 1968 1 2950 2952 + 1969 1 2953 2954 + 1970 1 2953 2955 + 1971 1 2956 2957 + 1972 1 2956 2958 + 1973 1 2959 2960 + 1974 1 2959 2961 + 1975 1 2962 2963 + 1976 1 2962 2964 + 1977 1 2965 2966 + 1978 1 2965 2967 + 1979 1 2968 2969 + 1980 1 2968 2970 + 1981 1 2971 2972 + 1982 1 2971 2973 + 1983 1 2974 2975 + 1984 1 2974 2976 + 1985 1 2977 2978 + 1986 1 2977 2979 + 1987 1 2980 2981 + 1988 1 2980 2982 + 1989 1 2983 2984 + 1990 1 2983 2985 + 1991 1 2986 2987 + 1992 1 2986 2988 + 1993 1 2989 2990 + 1994 1 2989 2991 + 1995 1 2992 2993 + 1996 1 2992 2994 + 1997 1 2995 2996 + 1998 1 2995 2997 + 1999 1 2998 2999 + 2000 1 2998 3000 + +Angles + + 1 1 2 1 3 + 2 1 5 4 6 + 3 1 8 7 9 + 4 1 11 10 12 + 5 1 14 13 15 + 6 1 17 16 18 + 7 1 20 19 21 + 8 1 23 22 24 + 9 1 26 25 27 + 10 1 29 28 30 + 11 1 32 31 33 + 12 1 35 34 36 + 13 1 38 37 39 + 14 1 41 40 42 + 15 1 44 43 45 + 16 1 47 46 48 + 17 1 50 49 51 + 18 1 53 52 54 + 19 1 56 55 57 + 20 1 59 58 60 + 21 1 62 61 63 + 22 1 65 64 66 + 23 1 68 67 69 + 24 1 71 70 72 + 25 1 74 73 75 + 26 1 77 76 78 + 27 1 80 79 81 + 28 1 83 82 84 + 29 1 86 85 87 + 30 1 89 88 90 + 31 1 92 91 93 + 32 1 95 94 96 + 33 1 98 97 99 + 34 1 101 100 102 + 35 1 104 103 105 + 36 1 107 106 108 + 37 1 110 109 111 + 38 1 113 112 114 + 39 1 116 115 117 + 40 1 119 118 120 + 41 1 122 121 123 + 42 1 125 124 126 + 43 1 128 127 129 + 44 1 131 130 132 + 45 1 134 133 135 + 46 1 137 136 138 + 47 1 140 139 141 + 48 1 143 142 144 + 49 1 146 145 147 + 50 1 149 148 150 + 51 1 152 151 153 + 52 1 155 154 156 + 53 1 158 157 159 + 54 1 161 160 162 + 55 1 164 163 165 + 56 1 167 166 168 + 57 1 170 169 171 + 58 1 173 172 174 + 59 1 176 175 177 + 60 1 179 178 180 + 61 1 182 181 183 + 62 1 185 184 186 + 63 1 188 187 189 + 64 1 191 190 192 + 65 1 194 193 195 + 66 1 197 196 198 + 67 1 200 199 201 + 68 1 203 202 204 + 69 1 206 205 207 + 70 1 209 208 210 + 71 1 212 211 213 + 72 1 215 214 216 + 73 1 218 217 219 + 74 1 221 220 222 + 75 1 224 223 225 + 76 1 227 226 228 + 77 1 230 229 231 + 78 1 233 232 234 + 79 1 236 235 237 + 80 1 239 238 240 + 81 1 242 241 243 + 82 1 245 244 246 + 83 1 248 247 249 + 84 1 251 250 252 + 85 1 254 253 255 + 86 1 257 256 258 + 87 1 260 259 261 + 88 1 263 262 264 + 89 1 266 265 267 + 90 1 269 268 270 + 91 1 272 271 273 + 92 1 275 274 276 + 93 1 278 277 279 + 94 1 281 280 282 + 95 1 284 283 285 + 96 1 287 286 288 + 97 1 290 289 291 + 98 1 293 292 294 + 99 1 296 295 297 + 100 1 299 298 300 + 101 1 302 301 303 + 102 1 305 304 306 + 103 1 308 307 309 + 104 1 311 310 312 + 105 1 314 313 315 + 106 1 317 316 318 + 107 1 320 319 321 + 108 1 323 322 324 + 109 1 326 325 327 + 110 1 329 328 330 + 111 1 332 331 333 + 112 1 335 334 336 + 113 1 338 337 339 + 114 1 341 340 342 + 115 1 344 343 345 + 116 1 347 346 348 + 117 1 350 349 351 + 118 1 353 352 354 + 119 1 356 355 357 + 120 1 359 358 360 + 121 1 362 361 363 + 122 1 365 364 366 + 123 1 368 367 369 + 124 1 371 370 372 + 125 1 374 373 375 + 126 1 377 376 378 + 127 1 380 379 381 + 128 1 383 382 384 + 129 1 386 385 387 + 130 1 389 388 390 + 131 1 392 391 393 + 132 1 395 394 396 + 133 1 398 397 399 + 134 1 401 400 402 + 135 1 404 403 405 + 136 1 407 406 408 + 137 1 410 409 411 + 138 1 413 412 414 + 139 1 416 415 417 + 140 1 419 418 420 + 141 1 422 421 423 + 142 1 425 424 426 + 143 1 428 427 429 + 144 1 431 430 432 + 145 1 434 433 435 + 146 1 437 436 438 + 147 1 440 439 441 + 148 1 443 442 444 + 149 1 446 445 447 + 150 1 449 448 450 + 151 1 452 451 453 + 152 1 455 454 456 + 153 1 458 457 459 + 154 1 461 460 462 + 155 1 464 463 465 + 156 1 467 466 468 + 157 1 470 469 471 + 158 1 473 472 474 + 159 1 476 475 477 + 160 1 479 478 480 + 161 1 482 481 483 + 162 1 485 484 486 + 163 1 488 487 489 + 164 1 491 490 492 + 165 1 494 493 495 + 166 1 497 496 498 + 167 1 500 499 501 + 168 1 503 502 504 + 169 1 506 505 507 + 170 1 509 508 510 + 171 1 512 511 513 + 172 1 515 514 516 + 173 1 518 517 519 + 174 1 521 520 522 + 175 1 524 523 525 + 176 1 527 526 528 + 177 1 530 529 531 + 178 1 533 532 534 + 179 1 536 535 537 + 180 1 539 538 540 + 181 1 542 541 543 + 182 1 545 544 546 + 183 1 548 547 549 + 184 1 551 550 552 + 185 1 554 553 555 + 186 1 557 556 558 + 187 1 560 559 561 + 188 1 563 562 564 + 189 1 566 565 567 + 190 1 569 568 570 + 191 1 572 571 573 + 192 1 575 574 576 + 193 1 578 577 579 + 194 1 581 580 582 + 195 1 584 583 585 + 196 1 587 586 588 + 197 1 590 589 591 + 198 1 593 592 594 + 199 1 596 595 597 + 200 1 599 598 600 + 201 1 602 601 603 + 202 1 605 604 606 + 203 1 608 607 609 + 204 1 611 610 612 + 205 1 614 613 615 + 206 1 617 616 618 + 207 1 620 619 621 + 208 1 623 622 624 + 209 1 626 625 627 + 210 1 629 628 630 + 211 1 632 631 633 + 212 1 635 634 636 + 213 1 638 637 639 + 214 1 641 640 642 + 215 1 644 643 645 + 216 1 647 646 648 + 217 1 650 649 651 + 218 1 653 652 654 + 219 1 656 655 657 + 220 1 659 658 660 + 221 1 662 661 663 + 222 1 665 664 666 + 223 1 668 667 669 + 224 1 671 670 672 + 225 1 674 673 675 + 226 1 677 676 678 + 227 1 680 679 681 + 228 1 683 682 684 + 229 1 686 685 687 + 230 1 689 688 690 + 231 1 692 691 693 + 232 1 695 694 696 + 233 1 698 697 699 + 234 1 701 700 702 + 235 1 704 703 705 + 236 1 707 706 708 + 237 1 710 709 711 + 238 1 713 712 714 + 239 1 716 715 717 + 240 1 719 718 720 + 241 1 722 721 723 + 242 1 725 724 726 + 243 1 728 727 729 + 244 1 731 730 732 + 245 1 734 733 735 + 246 1 737 736 738 + 247 1 740 739 741 + 248 1 743 742 744 + 249 1 746 745 747 + 250 1 749 748 750 + 251 1 752 751 753 + 252 1 755 754 756 + 253 1 758 757 759 + 254 1 761 760 762 + 255 1 764 763 765 + 256 1 767 766 768 + 257 1 770 769 771 + 258 1 773 772 774 + 259 1 776 775 777 + 260 1 779 778 780 + 261 1 782 781 783 + 262 1 785 784 786 + 263 1 788 787 789 + 264 1 791 790 792 + 265 1 794 793 795 + 266 1 797 796 798 + 267 1 800 799 801 + 268 1 803 802 804 + 269 1 806 805 807 + 270 1 809 808 810 + 271 1 812 811 813 + 272 1 815 814 816 + 273 1 818 817 819 + 274 1 821 820 822 + 275 1 824 823 825 + 276 1 827 826 828 + 277 1 830 829 831 + 278 1 833 832 834 + 279 1 836 835 837 + 280 1 839 838 840 + 281 1 842 841 843 + 282 1 845 844 846 + 283 1 848 847 849 + 284 1 851 850 852 + 285 1 854 853 855 + 286 1 857 856 858 + 287 1 860 859 861 + 288 1 863 862 864 + 289 1 866 865 867 + 290 1 869 868 870 + 291 1 872 871 873 + 292 1 875 874 876 + 293 1 878 877 879 + 294 1 881 880 882 + 295 1 884 883 885 + 296 1 887 886 888 + 297 1 890 889 891 + 298 1 893 892 894 + 299 1 896 895 897 + 300 1 899 898 900 + 301 1 902 901 903 + 302 1 905 904 906 + 303 1 908 907 909 + 304 1 911 910 912 + 305 1 914 913 915 + 306 1 917 916 918 + 307 1 920 919 921 + 308 1 923 922 924 + 309 1 926 925 927 + 310 1 929 928 930 + 311 1 932 931 933 + 312 1 935 934 936 + 313 1 938 937 939 + 314 1 941 940 942 + 315 1 944 943 945 + 316 1 947 946 948 + 317 1 950 949 951 + 318 1 953 952 954 + 319 1 956 955 957 + 320 1 959 958 960 + 321 1 962 961 963 + 322 1 965 964 966 + 323 1 968 967 969 + 324 1 971 970 972 + 325 1 974 973 975 + 326 1 977 976 978 + 327 1 980 979 981 + 328 1 983 982 984 + 329 1 986 985 987 + 330 1 989 988 990 + 331 1 992 991 993 + 332 1 995 994 996 + 333 1 998 997 999 + 334 1 1001 1000 1002 + 335 1 1004 1003 1005 + 336 1 1007 1006 1008 + 337 1 1010 1009 1011 + 338 1 1013 1012 1014 + 339 1 1016 1015 1017 + 340 1 1019 1018 1020 + 341 1 1022 1021 1023 + 342 1 1025 1024 1026 + 343 1 1028 1027 1029 + 344 1 1031 1030 1032 + 345 1 1034 1033 1035 + 346 1 1037 1036 1038 + 347 1 1040 1039 1041 + 348 1 1043 1042 1044 + 349 1 1046 1045 1047 + 350 1 1049 1048 1050 + 351 1 1052 1051 1053 + 352 1 1055 1054 1056 + 353 1 1058 1057 1059 + 354 1 1061 1060 1062 + 355 1 1064 1063 1065 + 356 1 1067 1066 1068 + 357 1 1070 1069 1071 + 358 1 1073 1072 1074 + 359 1 1076 1075 1077 + 360 1 1079 1078 1080 + 361 1 1082 1081 1083 + 362 1 1085 1084 1086 + 363 1 1088 1087 1089 + 364 1 1091 1090 1092 + 365 1 1094 1093 1095 + 366 1 1097 1096 1098 + 367 1 1100 1099 1101 + 368 1 1103 1102 1104 + 369 1 1106 1105 1107 + 370 1 1109 1108 1110 + 371 1 1112 1111 1113 + 372 1 1115 1114 1116 + 373 1 1118 1117 1119 + 374 1 1121 1120 1122 + 375 1 1124 1123 1125 + 376 1 1127 1126 1128 + 377 1 1130 1129 1131 + 378 1 1133 1132 1134 + 379 1 1136 1135 1137 + 380 1 1139 1138 1140 + 381 1 1142 1141 1143 + 382 1 1145 1144 1146 + 383 1 1148 1147 1149 + 384 1 1151 1150 1152 + 385 1 1154 1153 1155 + 386 1 1157 1156 1158 + 387 1 1160 1159 1161 + 388 1 1163 1162 1164 + 389 1 1166 1165 1167 + 390 1 1169 1168 1170 + 391 1 1172 1171 1173 + 392 1 1175 1174 1176 + 393 1 1178 1177 1179 + 394 1 1181 1180 1182 + 395 1 1184 1183 1185 + 396 1 1187 1186 1188 + 397 1 1190 1189 1191 + 398 1 1193 1192 1194 + 399 1 1196 1195 1197 + 400 1 1199 1198 1200 + 401 1 1202 1201 1203 + 402 1 1205 1204 1206 + 403 1 1208 1207 1209 + 404 1 1211 1210 1212 + 405 1 1214 1213 1215 + 406 1 1217 1216 1218 + 407 1 1220 1219 1221 + 408 1 1223 1222 1224 + 409 1 1226 1225 1227 + 410 1 1229 1228 1230 + 411 1 1232 1231 1233 + 412 1 1235 1234 1236 + 413 1 1238 1237 1239 + 414 1 1241 1240 1242 + 415 1 1244 1243 1245 + 416 1 1247 1246 1248 + 417 1 1250 1249 1251 + 418 1 1253 1252 1254 + 419 1 1256 1255 1257 + 420 1 1259 1258 1260 + 421 1 1262 1261 1263 + 422 1 1265 1264 1266 + 423 1 1268 1267 1269 + 424 1 1271 1270 1272 + 425 1 1274 1273 1275 + 426 1 1277 1276 1278 + 427 1 1280 1279 1281 + 428 1 1283 1282 1284 + 429 1 1286 1285 1287 + 430 1 1289 1288 1290 + 431 1 1292 1291 1293 + 432 1 1295 1294 1296 + 433 1 1298 1297 1299 + 434 1 1301 1300 1302 + 435 1 1304 1303 1305 + 436 1 1307 1306 1308 + 437 1 1310 1309 1311 + 438 1 1313 1312 1314 + 439 1 1316 1315 1317 + 440 1 1319 1318 1320 + 441 1 1322 1321 1323 + 442 1 1325 1324 1326 + 443 1 1328 1327 1329 + 444 1 1331 1330 1332 + 445 1 1334 1333 1335 + 446 1 1337 1336 1338 + 447 1 1340 1339 1341 + 448 1 1343 1342 1344 + 449 1 1346 1345 1347 + 450 1 1349 1348 1350 + 451 1 1352 1351 1353 + 452 1 1355 1354 1356 + 453 1 1358 1357 1359 + 454 1 1361 1360 1362 + 455 1 1364 1363 1365 + 456 1 1367 1366 1368 + 457 1 1370 1369 1371 + 458 1 1373 1372 1374 + 459 1 1376 1375 1377 + 460 1 1379 1378 1380 + 461 1 1382 1381 1383 + 462 1 1385 1384 1386 + 463 1 1388 1387 1389 + 464 1 1391 1390 1392 + 465 1 1394 1393 1395 + 466 1 1397 1396 1398 + 467 1 1400 1399 1401 + 468 1 1403 1402 1404 + 469 1 1406 1405 1407 + 470 1 1409 1408 1410 + 471 1 1412 1411 1413 + 472 1 1415 1414 1416 + 473 1 1418 1417 1419 + 474 1 1421 1420 1422 + 475 1 1424 1423 1425 + 476 1 1427 1426 1428 + 477 1 1430 1429 1431 + 478 1 1433 1432 1434 + 479 1 1436 1435 1437 + 480 1 1439 1438 1440 + 481 1 1442 1441 1443 + 482 1 1445 1444 1446 + 483 1 1448 1447 1449 + 484 1 1451 1450 1452 + 485 1 1454 1453 1455 + 486 1 1457 1456 1458 + 487 1 1460 1459 1461 + 488 1 1463 1462 1464 + 489 1 1466 1465 1467 + 490 1 1469 1468 1470 + 491 1 1472 1471 1473 + 492 1 1475 1474 1476 + 493 1 1478 1477 1479 + 494 1 1481 1480 1482 + 495 1 1484 1483 1485 + 496 1 1487 1486 1488 + 497 1 1490 1489 1491 + 498 1 1493 1492 1494 + 499 1 1496 1495 1497 + 500 1 1499 1498 1500 + 501 1 1502 1501 1503 + 502 1 1505 1504 1506 + 503 1 1508 1507 1509 + 504 1 1511 1510 1512 + 505 1 1514 1513 1515 + 506 1 1517 1516 1518 + 507 1 1520 1519 1521 + 508 1 1523 1522 1524 + 509 1 1526 1525 1527 + 510 1 1529 1528 1530 + 511 1 1532 1531 1533 + 512 1 1535 1534 1536 + 513 1 1538 1537 1539 + 514 1 1541 1540 1542 + 515 1 1544 1543 1545 + 516 1 1547 1546 1548 + 517 1 1550 1549 1551 + 518 1 1553 1552 1554 + 519 1 1556 1555 1557 + 520 1 1559 1558 1560 + 521 1 1562 1561 1563 + 522 1 1565 1564 1566 + 523 1 1568 1567 1569 + 524 1 1571 1570 1572 + 525 1 1574 1573 1575 + 526 1 1577 1576 1578 + 527 1 1580 1579 1581 + 528 1 1583 1582 1584 + 529 1 1586 1585 1587 + 530 1 1589 1588 1590 + 531 1 1592 1591 1593 + 532 1 1595 1594 1596 + 533 1 1598 1597 1599 + 534 1 1601 1600 1602 + 535 1 1604 1603 1605 + 536 1 1607 1606 1608 + 537 1 1610 1609 1611 + 538 1 1613 1612 1614 + 539 1 1616 1615 1617 + 540 1 1619 1618 1620 + 541 1 1622 1621 1623 + 542 1 1625 1624 1626 + 543 1 1628 1627 1629 + 544 1 1631 1630 1632 + 545 1 1634 1633 1635 + 546 1 1637 1636 1638 + 547 1 1640 1639 1641 + 548 1 1643 1642 1644 + 549 1 1646 1645 1647 + 550 1 1649 1648 1650 + 551 1 1652 1651 1653 + 552 1 1655 1654 1656 + 553 1 1658 1657 1659 + 554 1 1661 1660 1662 + 555 1 1664 1663 1665 + 556 1 1667 1666 1668 + 557 1 1670 1669 1671 + 558 1 1673 1672 1674 + 559 1 1676 1675 1677 + 560 1 1679 1678 1680 + 561 1 1682 1681 1683 + 562 1 1685 1684 1686 + 563 1 1688 1687 1689 + 564 1 1691 1690 1692 + 565 1 1694 1693 1695 + 566 1 1697 1696 1698 + 567 1 1700 1699 1701 + 568 1 1703 1702 1704 + 569 1 1706 1705 1707 + 570 1 1709 1708 1710 + 571 1 1712 1711 1713 + 572 1 1715 1714 1716 + 573 1 1718 1717 1719 + 574 1 1721 1720 1722 + 575 1 1724 1723 1725 + 576 1 1727 1726 1728 + 577 1 1730 1729 1731 + 578 1 1733 1732 1734 + 579 1 1736 1735 1737 + 580 1 1739 1738 1740 + 581 1 1742 1741 1743 + 582 1 1745 1744 1746 + 583 1 1748 1747 1749 + 584 1 1751 1750 1752 + 585 1 1754 1753 1755 + 586 1 1757 1756 1758 + 587 1 1760 1759 1761 + 588 1 1763 1762 1764 + 589 1 1766 1765 1767 + 590 1 1769 1768 1770 + 591 1 1772 1771 1773 + 592 1 1775 1774 1776 + 593 1 1778 1777 1779 + 594 1 1781 1780 1782 + 595 1 1784 1783 1785 + 596 1 1787 1786 1788 + 597 1 1790 1789 1791 + 598 1 1793 1792 1794 + 599 1 1796 1795 1797 + 600 1 1799 1798 1800 + 601 1 1802 1801 1803 + 602 1 1805 1804 1806 + 603 1 1808 1807 1809 + 604 1 1811 1810 1812 + 605 1 1814 1813 1815 + 606 1 1817 1816 1818 + 607 1 1820 1819 1821 + 608 1 1823 1822 1824 + 609 1 1826 1825 1827 + 610 1 1829 1828 1830 + 611 1 1832 1831 1833 + 612 1 1835 1834 1836 + 613 1 1838 1837 1839 + 614 1 1841 1840 1842 + 615 1 1844 1843 1845 + 616 1 1847 1846 1848 + 617 1 1850 1849 1851 + 618 1 1853 1852 1854 + 619 1 1856 1855 1857 + 620 1 1859 1858 1860 + 621 1 1862 1861 1863 + 622 1 1865 1864 1866 + 623 1 1868 1867 1869 + 624 1 1871 1870 1872 + 625 1 1874 1873 1875 + 626 1 1877 1876 1878 + 627 1 1880 1879 1881 + 628 1 1883 1882 1884 + 629 1 1886 1885 1887 + 630 1 1889 1888 1890 + 631 1 1892 1891 1893 + 632 1 1895 1894 1896 + 633 1 1898 1897 1899 + 634 1 1901 1900 1902 + 635 1 1904 1903 1905 + 636 1 1907 1906 1908 + 637 1 1910 1909 1911 + 638 1 1913 1912 1914 + 639 1 1916 1915 1917 + 640 1 1919 1918 1920 + 641 1 1922 1921 1923 + 642 1 1925 1924 1926 + 643 1 1928 1927 1929 + 644 1 1931 1930 1932 + 645 1 1934 1933 1935 + 646 1 1937 1936 1938 + 647 1 1940 1939 1941 + 648 1 1943 1942 1944 + 649 1 1946 1945 1947 + 650 1 1949 1948 1950 + 651 1 1952 1951 1953 + 652 1 1955 1954 1956 + 653 1 1958 1957 1959 + 654 1 1961 1960 1962 + 655 1 1964 1963 1965 + 656 1 1967 1966 1968 + 657 1 1970 1969 1971 + 658 1 1973 1972 1974 + 659 1 1976 1975 1977 + 660 1 1979 1978 1980 + 661 1 1982 1981 1983 + 662 1 1985 1984 1986 + 663 1 1988 1987 1989 + 664 1 1991 1990 1992 + 665 1 1994 1993 1995 + 666 1 1997 1996 1998 + 667 1 2000 1999 2001 + 668 1 2003 2002 2004 + 669 1 2006 2005 2007 + 670 1 2009 2008 2010 + 671 1 2012 2011 2013 + 672 1 2015 2014 2016 + 673 1 2018 2017 2019 + 674 1 2021 2020 2022 + 675 1 2024 2023 2025 + 676 1 2027 2026 2028 + 677 1 2030 2029 2031 + 678 1 2033 2032 2034 + 679 1 2036 2035 2037 + 680 1 2039 2038 2040 + 681 1 2042 2041 2043 + 682 1 2045 2044 2046 + 683 1 2048 2047 2049 + 684 1 2051 2050 2052 + 685 1 2054 2053 2055 + 686 1 2057 2056 2058 + 687 1 2060 2059 2061 + 688 1 2063 2062 2064 + 689 1 2066 2065 2067 + 690 1 2069 2068 2070 + 691 1 2072 2071 2073 + 692 1 2075 2074 2076 + 693 1 2078 2077 2079 + 694 1 2081 2080 2082 + 695 1 2084 2083 2085 + 696 1 2087 2086 2088 + 697 1 2090 2089 2091 + 698 1 2093 2092 2094 + 699 1 2096 2095 2097 + 700 1 2099 2098 2100 + 701 1 2102 2101 2103 + 702 1 2105 2104 2106 + 703 1 2108 2107 2109 + 704 1 2111 2110 2112 + 705 1 2114 2113 2115 + 706 1 2117 2116 2118 + 707 1 2120 2119 2121 + 708 1 2123 2122 2124 + 709 1 2126 2125 2127 + 710 1 2129 2128 2130 + 711 1 2132 2131 2133 + 712 1 2135 2134 2136 + 713 1 2138 2137 2139 + 714 1 2141 2140 2142 + 715 1 2144 2143 2145 + 716 1 2147 2146 2148 + 717 1 2150 2149 2151 + 718 1 2153 2152 2154 + 719 1 2156 2155 2157 + 720 1 2159 2158 2160 + 721 1 2162 2161 2163 + 722 1 2165 2164 2166 + 723 1 2168 2167 2169 + 724 1 2171 2170 2172 + 725 1 2174 2173 2175 + 726 1 2177 2176 2178 + 727 1 2180 2179 2181 + 728 1 2183 2182 2184 + 729 1 2186 2185 2187 + 730 1 2189 2188 2190 + 731 1 2192 2191 2193 + 732 1 2195 2194 2196 + 733 1 2198 2197 2199 + 734 1 2201 2200 2202 + 735 1 2204 2203 2205 + 736 1 2207 2206 2208 + 737 1 2210 2209 2211 + 738 1 2213 2212 2214 + 739 1 2216 2215 2217 + 740 1 2219 2218 2220 + 741 1 2222 2221 2223 + 742 1 2225 2224 2226 + 743 1 2228 2227 2229 + 744 1 2231 2230 2232 + 745 1 2234 2233 2235 + 746 1 2237 2236 2238 + 747 1 2240 2239 2241 + 748 1 2243 2242 2244 + 749 1 2246 2245 2247 + 750 1 2249 2248 2250 + 751 1 2252 2251 2253 + 752 1 2255 2254 2256 + 753 1 2258 2257 2259 + 754 1 2261 2260 2262 + 755 1 2264 2263 2265 + 756 1 2267 2266 2268 + 757 1 2270 2269 2271 + 758 1 2273 2272 2274 + 759 1 2276 2275 2277 + 760 1 2279 2278 2280 + 761 1 2282 2281 2283 + 762 1 2285 2284 2286 + 763 1 2288 2287 2289 + 764 1 2291 2290 2292 + 765 1 2294 2293 2295 + 766 1 2297 2296 2298 + 767 1 2300 2299 2301 + 768 1 2303 2302 2304 + 769 1 2306 2305 2307 + 770 1 2309 2308 2310 + 771 1 2312 2311 2313 + 772 1 2315 2314 2316 + 773 1 2318 2317 2319 + 774 1 2321 2320 2322 + 775 1 2324 2323 2325 + 776 1 2327 2326 2328 + 777 1 2330 2329 2331 + 778 1 2333 2332 2334 + 779 1 2336 2335 2337 + 780 1 2339 2338 2340 + 781 1 2342 2341 2343 + 782 1 2345 2344 2346 + 783 1 2348 2347 2349 + 784 1 2351 2350 2352 + 785 1 2354 2353 2355 + 786 1 2357 2356 2358 + 787 1 2360 2359 2361 + 788 1 2363 2362 2364 + 789 1 2366 2365 2367 + 790 1 2369 2368 2370 + 791 1 2372 2371 2373 + 792 1 2375 2374 2376 + 793 1 2378 2377 2379 + 794 1 2381 2380 2382 + 795 1 2384 2383 2385 + 796 1 2387 2386 2388 + 797 1 2390 2389 2391 + 798 1 2393 2392 2394 + 799 1 2396 2395 2397 + 800 1 2399 2398 2400 + 801 1 2402 2401 2403 + 802 1 2405 2404 2406 + 803 1 2408 2407 2409 + 804 1 2411 2410 2412 + 805 1 2414 2413 2415 + 806 1 2417 2416 2418 + 807 1 2420 2419 2421 + 808 1 2423 2422 2424 + 809 1 2426 2425 2427 + 810 1 2429 2428 2430 + 811 1 2432 2431 2433 + 812 1 2435 2434 2436 + 813 1 2438 2437 2439 + 814 1 2441 2440 2442 + 815 1 2444 2443 2445 + 816 1 2447 2446 2448 + 817 1 2450 2449 2451 + 818 1 2453 2452 2454 + 819 1 2456 2455 2457 + 820 1 2459 2458 2460 + 821 1 2462 2461 2463 + 822 1 2465 2464 2466 + 823 1 2468 2467 2469 + 824 1 2471 2470 2472 + 825 1 2474 2473 2475 + 826 1 2477 2476 2478 + 827 1 2480 2479 2481 + 828 1 2483 2482 2484 + 829 1 2486 2485 2487 + 830 1 2489 2488 2490 + 831 1 2492 2491 2493 + 832 1 2495 2494 2496 + 833 1 2498 2497 2499 + 834 1 2501 2500 2502 + 835 1 2504 2503 2505 + 836 1 2507 2506 2508 + 837 1 2510 2509 2511 + 838 1 2513 2512 2514 + 839 1 2516 2515 2517 + 840 1 2519 2518 2520 + 841 1 2522 2521 2523 + 842 1 2525 2524 2526 + 843 1 2528 2527 2529 + 844 1 2531 2530 2532 + 845 1 2534 2533 2535 + 846 1 2537 2536 2538 + 847 1 2540 2539 2541 + 848 1 2543 2542 2544 + 849 1 2546 2545 2547 + 850 1 2549 2548 2550 + 851 1 2552 2551 2553 + 852 1 2555 2554 2556 + 853 1 2558 2557 2559 + 854 1 2561 2560 2562 + 855 1 2564 2563 2565 + 856 1 2567 2566 2568 + 857 1 2570 2569 2571 + 858 1 2573 2572 2574 + 859 1 2576 2575 2577 + 860 1 2579 2578 2580 + 861 1 2582 2581 2583 + 862 1 2585 2584 2586 + 863 1 2588 2587 2589 + 864 1 2591 2590 2592 + 865 1 2594 2593 2595 + 866 1 2597 2596 2598 + 867 1 2600 2599 2601 + 868 1 2603 2602 2604 + 869 1 2606 2605 2607 + 870 1 2609 2608 2610 + 871 1 2612 2611 2613 + 872 1 2615 2614 2616 + 873 1 2618 2617 2619 + 874 1 2621 2620 2622 + 875 1 2624 2623 2625 + 876 1 2627 2626 2628 + 877 1 2630 2629 2631 + 878 1 2633 2632 2634 + 879 1 2636 2635 2637 + 880 1 2639 2638 2640 + 881 1 2642 2641 2643 + 882 1 2645 2644 2646 + 883 1 2648 2647 2649 + 884 1 2651 2650 2652 + 885 1 2654 2653 2655 + 886 1 2657 2656 2658 + 887 1 2660 2659 2661 + 888 1 2663 2662 2664 + 889 1 2666 2665 2667 + 890 1 2669 2668 2670 + 891 1 2672 2671 2673 + 892 1 2675 2674 2676 + 893 1 2678 2677 2679 + 894 1 2681 2680 2682 + 895 1 2684 2683 2685 + 896 1 2687 2686 2688 + 897 1 2690 2689 2691 + 898 1 2693 2692 2694 + 899 1 2696 2695 2697 + 900 1 2699 2698 2700 + 901 1 2702 2701 2703 + 902 1 2705 2704 2706 + 903 1 2708 2707 2709 + 904 1 2711 2710 2712 + 905 1 2714 2713 2715 + 906 1 2717 2716 2718 + 907 1 2720 2719 2721 + 908 1 2723 2722 2724 + 909 1 2726 2725 2727 + 910 1 2729 2728 2730 + 911 1 2732 2731 2733 + 912 1 2735 2734 2736 + 913 1 2738 2737 2739 + 914 1 2741 2740 2742 + 915 1 2744 2743 2745 + 916 1 2747 2746 2748 + 917 1 2750 2749 2751 + 918 1 2753 2752 2754 + 919 1 2756 2755 2757 + 920 1 2759 2758 2760 + 921 1 2762 2761 2763 + 922 1 2765 2764 2766 + 923 1 2768 2767 2769 + 924 1 2771 2770 2772 + 925 1 2774 2773 2775 + 926 1 2777 2776 2778 + 927 1 2780 2779 2781 + 928 1 2783 2782 2784 + 929 1 2786 2785 2787 + 930 1 2789 2788 2790 + 931 1 2792 2791 2793 + 932 1 2795 2794 2796 + 933 1 2798 2797 2799 + 934 1 2801 2800 2802 + 935 1 2804 2803 2805 + 936 1 2807 2806 2808 + 937 1 2810 2809 2811 + 938 1 2813 2812 2814 + 939 1 2816 2815 2817 + 940 1 2819 2818 2820 + 941 1 2822 2821 2823 + 942 1 2825 2824 2826 + 943 1 2828 2827 2829 + 944 1 2831 2830 2832 + 945 1 2834 2833 2835 + 946 1 2837 2836 2838 + 947 1 2840 2839 2841 + 948 1 2843 2842 2844 + 949 1 2846 2845 2847 + 950 1 2849 2848 2850 + 951 1 2852 2851 2853 + 952 1 2855 2854 2856 + 953 1 2858 2857 2859 + 954 1 2861 2860 2862 + 955 1 2864 2863 2865 + 956 1 2867 2866 2868 + 957 1 2870 2869 2871 + 958 1 2873 2872 2874 + 959 1 2876 2875 2877 + 960 1 2879 2878 2880 + 961 1 2882 2881 2883 + 962 1 2885 2884 2886 + 963 1 2888 2887 2889 + 964 1 2891 2890 2892 + 965 1 2894 2893 2895 + 966 1 2897 2896 2898 + 967 1 2900 2899 2901 + 968 1 2903 2902 2904 + 969 1 2906 2905 2907 + 970 1 2909 2908 2910 + 971 1 2912 2911 2913 + 972 1 2915 2914 2916 + 973 1 2918 2917 2919 + 974 1 2921 2920 2922 + 975 1 2924 2923 2925 + 976 1 2927 2926 2928 + 977 1 2930 2929 2931 + 978 1 2933 2932 2934 + 979 1 2936 2935 2937 + 980 1 2939 2938 2940 + 981 1 2942 2941 2943 + 982 1 2945 2944 2946 + 983 1 2948 2947 2949 + 984 1 2951 2950 2952 + 985 1 2954 2953 2955 + 986 1 2957 2956 2958 + 987 1 2960 2959 2961 + 988 1 2963 2962 2964 + 989 1 2966 2965 2967 + 990 1 2969 2968 2970 + 991 1 2972 2971 2973 + 992 1 2975 2974 2976 + 993 1 2978 2977 2979 + 994 1 2981 2980 2982 + 995 1 2984 2983 2985 + 996 1 2987 2986 2988 + 997 1 2990 2989 2991 + 998 1 2993 2992 2994 + 999 1 2996 2995 2997 + 1000 1 2999 2998 3000 + +Pair Coeffs + + 1 0.1553 3.1655 + 2 0.0000 0.0000 + +Bond Coeffs + + 1 450.0000 1.0000 + +Angle Coeffs + + 1 55.0000 109.4700 diff --git a/examples/VISCOSITY/in.cos.1000SPCE b/examples/VISCOSITY/in.cos.1000SPCE new file mode 100644 index 0000000000000000000000000000000000000000..415341f0ebb942a341b63358038197c5581c466d --- /dev/null +++ b/examples/VISCOSITY/in.cos.1000SPCE @@ -0,0 +1,53 @@ +# DFF generated Lammps input file + +units real +atom_style full +boundary p p p + +pair_style lj/cut/coul/long 10.0 +pair_modify mix arithmetic +pair_modify tail yes +kspace_style pppm 1.0e-4 +dielectric 1.0 +special_bonds amber +bond_style harmonic +angle_style harmonic +dihedral_style none +improper_style none + +read_data data.cos.1000SPCE + +variable T equal 300 +variable P equal 1.0 + +velocity all create ${T} 12345 mom yes rot yes dist gaussian + +timestep 1.0 + +# Constraint ################################## +fix com all momentum 100 linear 1 1 1 +fix rigid all shake 1e-4 20 0 b 1 a 1 + +# Viscosity ################################## +variable A equal 0.05e-5 # angstrom/fs^2 + +fix cos all accelerate/cos ${A} +compute cos all viscosity/cos + +variable density equal density +variable lz equal lz +variable vMax equal c_cos[7] # velocity of atoms at z=0 +variable invVis equal v_vMax/${A}/v_density*39.4784/v_lz/v_lz*100 # reciprocal of viscosity 1/Pa/s + +fix npt all npt temp ${T} ${T} 100 iso ${P} ${P} 1000 +fix_modify npt temp cos + +thermo_style custom step cpu temp press pe density v_vMax v_invVis +thermo_modify temp cos +thermo 100 +################################################ + +dump 1 all custom 10000 dump.lammpstrj id mol type element q xu yu zu +dump_modify 1 sort id element O H + +run 2000 diff --git a/examples/VISCOSITY/log.30Apr20.cos.1000SPCE.g++.1 b/examples/VISCOSITY/log.30Apr20.cos.1000SPCE.g++.1 new file mode 100644 index 0000000000000000000000000000000000000000..896539a09310ae7fa0b444d753cf9b1c98ad2342 --- /dev/null +++ b/examples/VISCOSITY/log.30Apr20.cos.1000SPCE.g++.1 @@ -0,0 +1,160 @@ +LAMMPS (3 Mar 2020) +OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:94) + using 1 OpenMP thread(s) per MPI task +# DFF generated Lammps input file + +units real +atom_style full +boundary p p p + +pair_style lj/cut/coul/long 10.0 +pair_modify mix arithmetic +pair_modify tail yes +kspace_style pppm 1.0e-4 +dielectric 1.0 +special_bonds amber +bond_style harmonic +angle_style harmonic +dihedral_style none +improper_style none + +read_data data.1000SPCE.lmp + orthogonal box = (0 0 0) to (31.043 31.043 31.043) + 2 by 2 by 2 MPI processor grid + reading atoms ... + 3000 atoms + scanning bonds ... + 2 = max bonds/atom + scanning angles ... + 1 = max angles/atom + reading bonds ... + 2000 bonds + reading angles ... + 1000 angles + 2 = max # of 1-2 neighbors + 1 = max # of 1-3 neighbors + 1 = max # of 1-4 neighbors + 2 = max # of special neighbors + special bonds CPU = 0.00114917 secs + read_data CPU = 0.00953543 secs + +variable T equal 300 +variable P equal 1.0 + +velocity all create ${T} 12345 mom yes rot yes dist gaussian +velocity all create 300 12345 mom yes rot yes dist gaussian + +timestep 1.0 + +# Constraint ################################## +fix com all momentum 100 linear 1 1 1 +fix rigid all shake 1e-4 20 0 b 1 a 1 + 0 = # of size 2 clusters + 0 = # of size 3 clusters + 0 = # of size 4 clusters + 1000 = # of frozen angles + find clusters CPU = 0.000442737 secs + +# Viscosity ################################## +variable A equal 0.02e-5 # angstrom/fs^2 + +fix cos all accelerate/cos ${A} +fix cos all accelerate/cos 2e-07 +compute cos all viscosity/cos + +variable density equal density +variable lz equal lz +variable vMax equal c_cos[7] # velocity of atoms at z=0 +variable invVis equal v_vMax/${A}/v_density*39.4784/v_lz/v_lz*100 # reciprocal of viscosity 1/Pa/s +variable invVis equal v_vMax/2e-07/v_density*39.4784/v_lz/v_lz*100 + +fix npt all npt temp ${T} ${T} 100 iso ${P} ${P} 1000 +fix npt all npt temp 300 ${T} 100 iso ${P} ${P} 1000 +fix npt all npt temp 300 300 100 iso ${P} ${P} 1000 +fix npt all npt temp 300 300 100 iso 1 ${P} 1000 +fix npt all npt temp 300 300 100 iso 1 1 1000 +fix_modify npt temp cos + +thermo_style custom step cpu temp press pe density v_vMax v_invVis +thermo_modify temp cos +thermo 100 +################################################ + +dump 1 all custom 10000 dump.lammpstrj id mol type element q xu yu zu +dump_modify 1 sort id element O H + +run 2000 +PPPM initialization ... + using 12-bit tables for long-range coulomb (src/kspace.cpp:332) + G vector (1/distance) = 0.263539 + grid = 16 16 16 + stencil order = 5 + estimated absolute RMS force accuracy = 0.0325342 + estimated relative force accuracy = 9.79757e-05 + using double precision MKL FFT + 3d grid and FFT values/proc = 3375 512 +Neighbor list info ... + update every 1 steps, delay 10 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 12 + ghost atom cutoff = 12 + binsize = 6, bins = 6 6 6 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair lj/cut/coul/long, perpetual + attributes: half, newton on + pair build: half/bin/newton + stencil: half/bin/3d/newton + bin: standard +Per MPI rank memory allocation (min/avg/max) = 10.14 | 10.14 | 10.14 Mbytes +Step CPU Temp Press PotEng Density v_vMax v_invVis + 0 0 450.04468 9838.6886 -7651.736 0.99999331 0.0001293705 2649.9663 + 100 0.33736925 497.65155 2024.4827 -8342.2499 0.98595028 0.00019602427 4034.2452 + 200 0.67116638 446.48518 27.075082 -8908.9684 0.9652009 0.00027615455 5723.7907 + 300 0.99760895 401.79875 -776.99871 -9381.8986 0.95205822 0.00019626685 4086.6103 + 400 1.3239019 369.65373 -510.5336 -9803.6463 0.94817309 0.00022998514 4795.2142 + 500 1.6488092 343.35807 -936.31982 -10146.023 0.94840581 0.0001434423 2990.5423 + 600 1.9826063 319.86131 -1381.3302 -10405.812 0.95459202 6.6411532e-05 1381.5767 + 700 2.3172637 307.74606 -98.775733 -10643.5 0.96669652 0.00010446317 2164.0664 + 800 2.6562841 305.14214 -540.57804 -10865.742 0.97808367 5.4381233e-05 1122.1765 + 900 2.9938415 288.01316 639.00486 -10925.39 0.98686357 0.00010878474 2238.1355 + 1000 3.327893 295.07773 -226.06503 -11033.826 0.99128496 0.00011935058 2451.8608 + 1100 3.6618862 299.21578 306.34231 -11049.152 0.99552203 8.9538943e-05 1836.8166 + 1200 3.9984287 301.82462 85.804646 -11013.564 0.99713434 0.00015912276 3262.51 + 1300 4.3320735 308.6009 268.08897 -11009.836 0.99695358 0.00026212596 5374.72 + 1400 4.668875 298.36903 -258.75495 -10962.299 0.99503447 0.00033087355 6788.7027 + 1500 5.0003694 299.96073 99.512082 -10980.551 0.99315631 0.00033996557 6979.6425 + 1600 5.3367337 304.18018 -500.65441 -11002.054 0.9914558 0.00039075642 8026.9849 + 1700 5.6780828 301.63978 -499.07458 -10992.88 0.99234354 0.00038101175 7824.4738 + 1800 6.0140638 303.25858 640.03432 -11053.335 0.99553958 0.00041336203 8479.7267 + 1900 6.3532521 301.40882 208.28331 -11119.481 0.99534534 0.00032474734 6662.3144 + 2000 6.6938104 298.0462 -236.47954 -11162.212 0.99421846 0.00023869721 4898.8129 +Loop time of 6.69387 on 8 procs for 2000 steps with 3000 atoms + +Performance: 25.815 ns/day, 0.930 hours/ns, 298.781 timesteps/s +99.7% CPU use with 8 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 4.36 | 4.4981 | 4.6781 | 5.1 | 67.20 +Bond | 0.00074545 | 0.00088463 | 0.0012464 | 0.0 | 0.01 +Kspace | 0.86696 | 1.0476 | 1.1863 | 10.5 | 15.65 +Neigh | 0.37733 | 0.37785 | 0.3784 | 0.1 | 5.64 +Comm | 0.19874 | 0.20168 | 0.20729 | 0.6 | 3.01 +Output | 0.0015529 | 0.0015803 | 0.0017546 | 0.2 | 0.02 +Modify | 0.54083 | 0.55143 | 0.55445 | 0.6 | 8.24 +Other | | 0.01483 | | | 0.22 + +Nlocal: 375 ave 385 max 361 min +Histogram: 1 1 0 0 1 0 2 0 1 2 +Nghost: 5772.25 ave 5789 max 5757 min +Histogram: 1 1 2 0 0 0 2 0 0 2 +Neighs: 135285 ave 144189 max 127550 min +Histogram: 1 2 1 1 0 0 0 0 1 2 + +Total # of neighbors = 1082280 +Ave neighs/atom = 360.76 +Ave special neighs/atom = 2 +Neighbor list builds = 101 +Dangerous builds = 1 +Total wall time: 0:00:06 diff --git a/examples/granular/in.pour.drum b/examples/granular/in.pour.drum index c30f30b37783a3d243dc58ac14f49b971bc0c2c2..54372cd391ae968a46a471d6af7ad19f5d979df0 100644 --- a/examples/granular/in.pour.drum +++ b/examples/granular/in.pour.drum @@ -92,6 +92,8 @@ fix 5 all wall/gran/region granular hertz/material 1e5 0.1 0.3 tangential mindl # 'Turn' drum by switching the direction of gravity unfix grav +unfix ins1 +unfix ins2 fix grav all gravity 10 vector 0 -1 0 variable theta equal 2*PI*elapsed/20000.0 diff --git a/examples/qeq/in.qeq.buck b/examples/qeq/in.qeq.buck index f7ec2bb808f30d55a174d0193ead647a9780153b..2258a9e2ae91ba5eeb30cef5390c29b043054843 100644 --- a/examples/qeq/in.qeq.buck +++ b/examples/qeq/in.qeq.buck @@ -24,7 +24,7 @@ compute charge2 type2 property/atom q compute q2 type2 reduce ave c_charge2 variable qtot equal count(type1)*c_q1+count(type2)*c_q2 -thermo_style custom step pe c_q1 c_q2 v_qtot spcpu +thermo_style custom step pe c_q1 c_q2 v_qtot thermo 10 timestep 0.0001 diff --git a/examples/streitz/in.streitz.wolf b/examples/streitz/in.streitz.wolf index ff4479448e09b62f9308348e82893b858de6cedc..cdf7cf33c93d85e729573a61d3c94ce7b94bc051 100644 --- a/examples/streitz/in.streitz.wolf +++ b/examples/streitz/in.streitz.wolf @@ -39,7 +39,7 @@ neigh_modify every 10 delay 0 check yes timestep 0.0004 thermo_style custom step temp etotal pe evdwl ecoul elong & - c_q1 c_q2 v_qsum press spcpu + c_q1 c_q2 v_qsum press thermo_modify norm yes thermo 10 diff --git a/lib/atc/Function.cpp b/lib/atc/Function.cpp index 70f8bbfa41b5e8ade3ac80c0f01b5cad93626bb3..062cbcb9b27a2ff6a87acd4fd15bfdd122825881 100644 --- a/lib/atc/Function.cpp +++ b/lib/atc/Function.cpp @@ -1,5 +1,11 @@ -#ifndef _WIN32 +#if !defined(_WIN32) + +#if defined(__FreeBSD__) || defined(__DragonFly__) || defined(__OpenBSD__) || defined(__NetBSD__) +#include +#else #include +#endif + #endif #include "Function.h" #include "ATC_Error.h" diff --git a/lib/colvars/Makefile.common b/lib/colvars/Makefile.common index 0482cff74a21f010f19892025b4519125e586631..2f2e2beffb2faefd448cfd590994428a899670f9 100644 --- a/lib/colvars/Makefile.common +++ b/lib/colvars/Makefile.common @@ -61,7 +61,7 @@ ifeq ($(COLVARS_LEPTON),no) LEPTON_INCFLAGS = COLVARS_OBJS = $(COLVARS_SRCS:.cpp=.o) else -LEPTON_INCFLAGS = -Ilepton/include -DLEPTON +LEPTON_INCFLAGS = -Ilepton/include -DLEPTON -DLEPTON_USE_STATIC_LIBRARIES COLVARS_OBJS = $(COLVARS_SRCS:.cpp=.o) $(LEPTON_SRCS:.cpp=.o) endif @@ -82,4 +82,20 @@ Makefile.deps: $(COLVARS_SRCS) done include Makefile.deps + +# Exceptions to pattern rule above for Lepton objects + +lepton/src/CompiledExpression.o: lepton/src/CompiledExpression.cpp + $(CXX) $(CXXFLAGS) -Ilepton/include -DLEPTON_BUILDING_STATIC_LIBRARY -c -o $@ $< +lepton/src/ExpressionProgram.o: lepton/src/ExpressionProgram.cpp + $(CXX) $(CXXFLAGS) -Ilepton/include -DLEPTON_BUILDING_STATIC_LIBRARY -c -o $@ $< +lepton/src/ExpressionTreeNode.o: lepton/src/ExpressionTreeNode.cpp + $(CXX) $(CXXFLAGS) -Ilepton/include -DLEPTON_BUILDING_STATIC_LIBRARY -c -o $@ $< +lepton/src/Operation.o: lepton/src/Operation.cpp + $(CXX) $(CXXFLAGS) -Ilepton/include -DLEPTON_BUILDING_STATIC_LIBRARY -c -o $@ $< +lepton/src/ParsedExpression.o: lepton/src/ParsedExpression.cpp + $(CXX) $(CXXFLAGS) -Ilepton/include -DLEPTON_BUILDING_STATIC_LIBRARY -c -o $@ $< +lepton/src/Parser.o: lepton/src/Parser.cpp + $(CXX) $(CXXFLAGS) -Ilepton/include -DLEPTON_BUILDING_STATIC_LIBRARY -c -o $@ $< + include Makefile.lepton.deps # Hand-generated diff --git a/lib/colvars/lepton/src/MSVC_erfc.h b/lib/colvars/lepton/src/MSVC_erfc.h index c30a8ce542157a22db338c81b261678e3258cd8f..b1cd87a2896600a8db4cb2ab9fd0459c4e117712 100644 --- a/lib/colvars/lepton/src/MSVC_erfc.h +++ b/lib/colvars/lepton/src/MSVC_erfc.h @@ -8,9 +8,13 @@ * (VC11 has _MSC_VER=1700). */ -#if defined(_MSC_VER) +#if defined(_MSC_VER) || defined(__MINGW32__) +#if !defined(M_PI) #define M_PI 3.14159265358979323846264338327950288 +#endif +#endif +#if defined(_MSC_VER) #if _MSC_VER <= 1700 // 1700 is VC11, 1800 is VC12 /*************************** * erf.cpp diff --git a/lib/gpu/.gitignore b/lib/gpu/.gitignore index 7b5254e4808cebde170a59bf91821de6a46147d9..d32b287c1e05c2d509a37324cef7f8bafeea51bb 100644 --- a/lib/gpu/.gitignore +++ b/lib/gpu/.gitignore @@ -2,6 +2,7 @@ /obj_ocl /ocl_get_devices /nvc_get_devices +/hip_get_devices /*.cubin /*_cubin.h /*_cl.h diff --git a/lib/gpu/Makefile.hip b/lib/gpu/Makefile.hip new file mode 100644 index 0000000000000000000000000000000000000000..62d34592d1974cc8b33760c87071fc75067b4a2a --- /dev/null +++ b/lib/gpu/Makefile.hip @@ -0,0 +1,148 @@ +# /* ---------------------------------------------------------------------- +# Generic Linux Makefile for HIP +# - export HIP_PLATFORM=hcc (or nvcc) before execution +# - change HIP_ARCH for your GPU +# ------------------------------------------------------------------------- */ + +# this setting should match LAMMPS Makefile +# one of LAMMPS_SMALLBIG (default), LAMMPS_BIGBIG and LAMMPS_SMALLSMALL + +LMP_INC = -DLAMMPS_SMALLBIG + +# precision for GPU calculations +# -D_SINGLE_SINGLE # Single precision for all calculations +# -D_DOUBLE_DOUBLE # Double precision for all calculations +# -D_SINGLE_DOUBLE # Accumulation of forces, etc. in double + +HIP_PRECISION = -D_SINGLE_DOUBLE + +HIP_OPTS = -O3 +HIP_HOST_OPTS = -Wno-deprecated-declarations +HIP_HOST_INCLUDE = + +# use device sort +# requires linking with hipcc and hipCUB + (rocPRIM or CUB for AMD or Nvidia respectively) +HIP_HOST_OPTS += -DUSE_HIP_DEVICE_SORT +# path to cub +HIP_HOST_INCLUDE += -I./ +# path to hipcub +HIP_HOST_INCLUDE += -I$(HIP_PATH)/../include + +# use mpi +HIP_HOST_OPTS += -DMPI_GERYON -DUCL_NO_EXIT +# this settings should match LAMMPS Makefile +MPI_COMP_OPTS = $(shell mpicxx --showme:compile) +MPI_LINK_OPTS = $(shell mpicxx --showme:link) +#MPI_COMP_OPTS += -I/usr/include/mpi -DMPICH_IGNORE_CXX_SEEK -DOMPI_SKIP_MPICXX=1 + +HIP_PATH ?= $(wildcard /opt/rocm/hip) +HIP_PLATFORM=$(shell $(HIP_PATH)/bin/hipconfig --compiler) + +ifeq (hcc,$(HIP_PLATFORM)) + HIP_OPTS += -ffast-math + # possible values: gfx803,gfx900,gfx906 + HIP_ARCH = gfx906 +else ifeq (nvcc,$(HIP_PLATFORM)) + HIP_OPTS += --use_fast_math + HIP_ARCH = -gencode arch=compute_30,code=[sm_30,compute_30] -gencode arch=compute_32,code=[sm_32,compute_32] -gencode arch=compute_35,code=[sm_35,compute_35] \ + -gencode arch=compute_50,code=[sm_50,compute_50] -gencode arch=compute_52,code=[sm_52,compute_52] -gencode arch=compute_53,code=[sm_53,compute_53]\ + -gencode arch=compute_60,code=[sm_60,compute_60] -gencode arch=compute_61,code=[sm_61,compute_61] -gencode arch=compute_62,code=[sm_62,compute_62]\ + -gencode arch=compute_70,code=[sm_70,compute_70] -gencode arch=compute_72,code=[sm_72,compute_72] -gencode arch=compute_75,code=[sm_75,compute_75] +else + $(error Specify HIP platform using 'export HIP_PLATFORM=(hcc,nvcc)') +endif + +BIN_DIR = . +OBJ_DIR = ./obj +LIB_DIR = . +AR = ar +BSH = /bin/sh + + +# /* ---------------------------------------------------------------------- +# don't change section below without need +# ------------------------------------------------------------------------- */ + +HIP_OPTS += -DUSE_HIP $(HIP_PRECISION) +HIP_GPU_OPTS += $(HIP_OPTS) -I./ + +ifeq (hcc,$(HIP_PLATFORM)) + HIP_HOST_OPTS += -fPIC + HIP_GPU_CC = $(HIP_PATH)/bin/hipcc --genco + HIP_GPU_OPTS_S = -t="$(HIP_ARCH)" -f=\" + HIP_GPU_OPTS_E = \" + HIP_KERNEL_SUFFIX = .cpp + HIP_LIBS_TARGET = export HCC_AMDGPU_TARGET := $(HIP_ARCH) + export HCC_AMDGPU_TARGET := $(HIP_ARCH) +else ifeq (nvcc,$(HIP_PLATFORM)) + HIP_GPU_CC = $(HIP_PATH)/bin/hipcc --fatbin + HIP_GPU_OPTS += $(HIP_ARCH) + HIP_GPU_SORT_ARCH = $(HIP_ARCH) + # fix nvcc can't handle -pthread flag + MPI_COMP_OPTS := $(subst -pthread,-Xcompiler -pthread,$(MPI_COMP_OPTS)) + MPI_LINK_OPTS := $(subst -pthread,-Xcompiler -pthread,$(MPI_LINK_OPTS)) +endif + +# hipcc is essential for device sort, because of hipcub is header only library and ROCm gpu code generation is deferred to the linking stage +HIP_HOST_CC = $(HIP_PATH)/bin/hipcc +HIP_HOST_OPTS += $(HIP_OPTS) $(MPI_COMP_OPTS) $(LMP_INC) +HIP_HOST_CC_CMD = $(HIP_HOST_CC) $(HIP_HOST_OPTS) $(HIP_HOST_INCLUDE) + +# sources + +ALL_H = $(wildcard ./geryon/ucl*.h) $(wildcard ./geryon/hip*.h) $(wildcard ./lal_*.h) +SRCS := $(wildcard ./lal_*.cpp) +OBJS := $(subst ./,$(OBJ_DIR)/,$(SRCS:%.cpp=%.o)) +CUS := $(wildcard lal_*.cu) +CUHS := $(filter-out pppm_cubin.h, $(CUS:lal_%.cu=%_cubin.h)) pppm_f_cubin.h pppm_d_cubin.h +CUHS := $(addprefix $(OBJ_DIR)/, $(CUHS)) + +all: $(OBJ_DIR) $(CUHS) $(LIB_DIR)/libgpu.a $(BIN_DIR)/hip_get_devices + +$(OBJ_DIR): + mkdir -p $@ + +# GPU kernels compilation + +$(OBJ_DIR)/pppm_f_cubin.h: lal_pppm.cu $(ALL_H) + @cp $< $(OBJ_DIR)/temp_pppm_f.cu$(HIP_KERNEL_SUFFIX) + $(HIP_GPU_CC) $(HIP_GPU_OPTS_S) $(HIP_GPU_OPTS) -Dgrdtyp=float -Dgrdtyp4=float4 $(HIP_GPU_OPTS_E) -o $(OBJ_DIR)/pppm_f.cubin $(OBJ_DIR)/temp_pppm_f.cu$(HIP_KERNEL_SUFFIX) + @xxd -i $(OBJ_DIR)/pppm_f.cubin $@ + @sed -i "s/[a-zA-Z0-9_]*pppm_f_cubin/pppm_f/g" $@ + @rm $(OBJ_DIR)/temp_pppm_f.cu$(HIP_KERNEL_SUFFIX) $(OBJ_DIR)/pppm_f.cubin + +$(OBJ_DIR)/pppm_d_cubin.h: lal_pppm.cu $(ALL_H) + @cp $< $(OBJ_DIR)/temp_pppm_d.cu$(HIP_KERNEL_SUFFIX) + $(HIP_GPU_CC) $(HIP_GPU_OPTS_S) $(HIP_GPU_OPTS) -Dgrdtyp=double -Dgrdtyp4=double4 $(HIP_GPU_OPTS_E) -o $(OBJ_DIR)/pppm_d.cubin $(OBJ_DIR)/temp_pppm_d.cu$(HIP_KERNEL_SUFFIX) + @xxd -i $(OBJ_DIR)/pppm_d.cubin $@ + @sed -i "s/[a-zA-Z0-9_]*pppm_d_cubin/pppm_d/g" $@ + @rm $(OBJ_DIR)/temp_pppm_d.cu$(HIP_KERNEL_SUFFIX) $(OBJ_DIR)/pppm_d.cubin + +$(OBJ_DIR)/%_cubin.h: lal_%.cu $(ALL_H) + @cp $< $(OBJ_DIR)/temp_$*.cu$(HIP_KERNEL_SUFFIX) + $(HIP_GPU_CC) $(HIP_GPU_OPTS_S) $(HIP_GPU_OPTS) $(HIP_GPU_OPTS_E) -o $(OBJ_DIR)/$*.cubin $(OBJ_DIR)/temp_$*.cu$(HIP_KERNEL_SUFFIX) + @xxd -i $(OBJ_DIR)/$*.cubin $@ + @sed -i "s/[a-zA-Z0-9_]*$*_cubin/$*/g" $@ + @rm $(OBJ_DIR)/temp_$*.cu$(HIP_KERNEL_SUFFIX) $(OBJ_DIR)/$*.cubin + +# host sources compilation + +$(OBJ_DIR)/lal_atom.o: lal_atom.cpp $(CUHS) $(ALL_H) + $(HIP_HOST_CC_CMD) -o $@ -c $< -I$(OBJ_DIR) $(HIP_GPU_SORT_ARCH) + +$(OBJ_DIR)/lal_%.o: lal_%.cpp $(CUHS) $(ALL_H) + $(HIP_HOST_CC_CMD) -o $@ -c $< -I$(OBJ_DIR) + +# libgpu building + +$(LIB_DIR)/libgpu.a: $(OBJS) + $(AR) -crs $@ $(OBJS) + printf "export HIP_PLATFORM := %s\n%s\n" "$(HIP_PLATFORM)" "$(HIP_LIBS_TARGET)" > Makefile.lammps + +# test app building + +$(BIN_DIR)/hip_get_devices: ./geryon/ucl_get_devices.cpp $(ALL_H) + $(HIP_HOST_CC_CMD) -o $@ $< -DUCL_HIP $(MPI_LINK_OPTS) + +clean: + -rm -f $(BIN_DIR)/hip_get_devices $(LIB_DIR)/libgpu.a $(OBJS) $(OBJ_DIR)/temp_* $(CUHS) diff --git a/lib/gpu/README b/lib/gpu/README index 2ef8ce9556c6d559a60848d5e4b39ce5e3961c30..dfa8dcf7ff4bef41002749540e63a60b15625b0f 100644 --- a/lib/gpu/README +++ b/lib/gpu/README @@ -67,8 +67,8 @@ library requires installing the CUDA GPU driver and CUDA toolkit for your operating system. Installation of the CUDA SDK is not necessary. In addition to the LAMMPS library, the binary nvc_get_devices will also be built. This can be used to query the names and properties of GPU -devices on your system. A Makefile for OpenCL compilation is provided, -but support for OpenCL use is not currently provided by the developers. +devices on your system. A Makefile for OpenCL and ROCm HIP compilation +is provided, but support for it is not currently provided by the developers. Details of the implementation are provided in: ---- @@ -169,6 +169,25 @@ NOTE: The system-specific setting LAMMPS_SMALLBIG (default), LAMMPS_BIGBIG, src/MAKE/Makefile.foo) should be consistent with that specified when building libgpu.a (i.e. by LMP_INC in the lib/gpu/Makefile.bar). + BUILDING FOR HIP FRAMEWORK + -------------------------------- +1. Install the latest ROCm framework (https://github.com/RadeonOpenCompute/ROCm). +2. GPU sorting requires installing hipcub +(https://github.com/ROCmSoftwarePlatform/hipCUB). The HIP CUDA-backend +additionally requires cub (https://nvlabs.github.io/cub). Download and +extract the cub directory to lammps/lib/gpu/ or specify an appropriate +path in lammps/lib/gpu/Makefile.hip. +3. In Makefile.hip it is possible to specify the target platform via +export HIP_PLATFORM=hcc or HIP_PLATFORM=nvcc as well as the target +architecture (gfx803, gfx900, gfx906 etc.) +4. If your MPI implementation does not support `mpicxx --showme` command, +it is required to specify the corresponding MPI compiler and linker flags +in lammps/lib/gpu/Makefile.hip and in lammps/src/MAKE/OPTIONS/Makefile.hip. +5. Building the GPU library (libgpu.a): + cd lammps/lib/gpu; make -f Makefile.hip -j +6. Building the LAMMPS executable (lmp_hip): + cd ../../src; make hip -j + EXAMPLE CONVENTIONAL BUILD PROCESS -------------------------------- diff --git a/lib/gpu/geryon/hip_device.h b/lib/gpu/geryon/hip_device.h new file mode 100644 index 0000000000000000000000000000000000000000..93f38d28bbf773ace806e7746bc598a715859ce5 --- /dev/null +++ b/lib/gpu/geryon/hip_device.h @@ -0,0 +1,519 @@ +/* ----------------------------------------------------------------------- + Copyright (2009) Sandia Corporation. Under the terms of Contract + DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains + certain rights in this software. This software is distributed under + the Simplified BSD License. + ----------------------------------------------------------------------- */ + +#ifndef HIP_DEVICE +#define HIP_DEVICE + + +#include +#include +#include +#include +#include +#include "hip_macros.h" +#include "ucl_types.h" + +namespace ucl_hip { + +// -------------------------------------------------------------------------- +// - COMMAND QUEUE STUFF +// -------------------------------------------------------------------------- +typedef hipStream_t command_queue; + +inline void ucl_sync(hipStream_t &stream) { + CU_SAFE_CALL(hipStreamSynchronize(stream)); +} + +struct NVDProperties { + int device_id; + std::string name; + int major; + int minor; + CUDA_INT_TYPE totalGlobalMem; + int multiProcessorCount; + + int maxThreadsPerBlock; + int maxThreadsDim[3]; + int maxGridSize[3]; + int sharedMemPerBlock; + int totalConstantMemory; + int SIMDWidth; + int memPitch; + int regsPerBlock; + int clockRate; + int textureAlign; + + int kernelExecTimeoutEnabled; + int integrated; + int canMapHostMemory; + int concurrentKernels; + int ECCEnabled; + int computeMode; +}; + +/// Class for looking at device properties +/** \note Calls to change the device outside of the class results in incorrect + * behavior + * \note There is no error checking for indexing past the number of devices **/ +class UCL_Device { + public: + /// Collect properties for every GPU on the node + /** \note You must set the active GPU with set() before using the device **/ + inline UCL_Device(); + + inline ~UCL_Device(); + + /// Returns 1 (For compatibility with OpenCL) + inline int num_platforms() { return 1; } + + /// Return a string with name and info of the current platform + inline std::string platform_name() + { return "HIP platform"; } + + /// Delete any contexts/data and set the platform number to be used + inline int set_platform(const int pid); + + /// Return the number of devices that support CUDA + inline int num_devices() { return _properties.size(); } + + /// Set the CUDA device to the specified device number + /** A context and default command queue will be created for the device + * Returns UCL_SUCCESS if successful or UCL_ERROR if the device could not + * be allocated for use. clear() is called to delete any contexts and + * associated data from previous calls to set(). **/ + inline int set(int num); + + /// Delete any context and associated data stored from a call to set() + inline void clear(); + + /// Get the current device number + inline int device_num() { return _device; } + + /// Returns the default stream for the current device + inline command_queue & cq() { return cq(0); } + + /// Returns the stream indexed by i + inline command_queue & cq(const int i) { return _cq[i]; } + + /// Block until all commands in the default stream have completed + inline void sync() { sync(0); } + + /// Block until all commands in the specified stream have completed + inline void sync(const int i) { ucl_sync(cq(i)); } + + /// Get the number of command queues currently available on device + inline int num_queues() + { return _cq.size(); } + + /// Add a stream for device computations + inline void push_command_queue() { + _cq.push_back(hipStream_t()); + CU_SAFE_CALL(hipStreamCreateWithFlags(&_cq.back(),0)); + } + + /// Remove a stream for device computations + /** \note You cannot delete the default stream **/ + inline void pop_command_queue() { + if (_cq.size()<2) return; + CU_SAFE_CALL_NS(hipStreamDestroy(_cq.back())); + _cq.pop_back(); + } + + /// Set the default command queue (by default this is the null stream) + /** \param i index of the command queue (as added by push_command_queue()) + If i is 0, the default command queue is set to the null stream **/ + inline void set_command_queue(const int i) { + if (i==0) _cq[0]=0; + else _cq[0]=_cq[i]; + } + + /// Get the current CUDA device name + inline std::string name() { return name(_device); } + /// Get the CUDA device name + inline std::string name(const int i) + { return std::string(_properties[i].name); } + + /// Get a string telling the type of the current device + inline std::string device_type_name() { return device_type_name(_device); } + /// Get a string telling the type of the device + inline std::string device_type_name(const int i) { return "GPU"; } + + /// Get current device type (UCL_CPU, UCL_GPU, UCL_ACCELERATOR, UCL_DEFAULT) + inline int device_type() { return device_type(_device); } + /// Get device type (UCL_CPU, UCL_GPU, UCL_ACCELERATOR, UCL_DEFAULT) + inline int device_type(const int i) { return UCL_GPU; } + + /// Returns true if host memory is efficiently addressable from device + inline bool shared_memory() { return shared_memory(_device); } + /// Returns true if host memory is efficiently addressable from device + inline bool shared_memory(const int i) { return device_type(i)==UCL_CPU; } + + /// Returns true if double precision is support for the current device + inline bool double_precision() { return double_precision(_device); } + /// Returns true if double precision is support for the device + inline bool double_precision(const int i) {return arch(i)>=1.3;} + + /// Get the number of compute units on the current device + inline unsigned cus() { return cus(_device); } + /// Get the number of compute units + inline unsigned cus(const int i) + { return _properties[i].multiProcessorCount; } + + /// Get the number of cores in the current device + inline unsigned cores() { return cores(_device); } + /// Get the number of cores + inline unsigned cores(const int i) + { if (arch(i)<2.0) return _properties[i].multiProcessorCount*8; + else if (arch(i)<2.1) return _properties[i].multiProcessorCount*32; + else if (arch(i)<3.0) return _properties[i].multiProcessorCount*48; + else return _properties[i].multiProcessorCount*192; } + + /// Get the gigabytes of global memory in the current device + inline double gigabytes() { return gigabytes(_device); } + /// Get the gigabytes of global memory + inline double gigabytes(const int i) + { return static_cast(_properties[i].totalGlobalMem)/1073741824; } + + /// Get the bytes of global memory in the current device + inline size_t bytes() { return bytes(_device); } + /// Get the bytes of global memory + inline size_t bytes(const int i) { return _properties[i].totalGlobalMem; } + + // Get the gigabytes of free memory in the current device + inline double free_gigabytes() { return free_gigabytes(_device); } + // Get the gigabytes of free memory + inline double free_gigabytes(const int i) + { return static_cast(free_bytes(i))/1073741824; } + + // Get the bytes of free memory in the current device + inline size_t free_bytes() { return free_bytes(_device); } + // Get the bytes of free memory + inline size_t free_bytes(const int i) { + CUDA_INT_TYPE dfree, dtotal; + CU_SAFE_CALL_NS(hipMemGetInfo(&dfree, &dtotal)); + return static_cast(dfree); + } + + /// Return the GPGPU compute capability for current device + inline double arch() { return arch(_device); } + /// Return the GPGPU compute capability + inline double arch(const int i) + { return static_cast(_properties[i].minor)/10+_properties[i].major;} + + /// Clock rate in GHz for current device + inline double clock_rate() { return clock_rate(_device); } + /// Clock rate in GHz + inline double clock_rate(const int i) + { return _properties[i].clockRate*1e-6;} + + /// Get the maximum number of threads per block + inline size_t group_size() { return group_size(_device); } + /// Get the maximum number of threads per block + inline size_t group_size(const int i) + { return _properties[i].maxThreadsPerBlock; } + + /// Return the maximum memory pitch in bytes for current device + inline size_t max_pitch() { return max_pitch(_device); } + /// Return the maximum memory pitch in bytes + inline size_t max_pitch(const int i) { return _properties[i].memPitch; } + + /// Returns false if accelerator cannot be shared by multiple processes + /** If it cannot be determined, true is returned **/ + inline bool sharing_supported() { return sharing_supported(_device); } + /// Returns false if accelerator cannot be shared by multiple processes + /** If it cannot be determined, true is returned **/ + inline bool sharing_supported(const int i) + { return (_properties[i].computeMode == hipComputeModeDefault); } + + /// True if splitting device into equal subdevices supported + inline bool fission_equal() + { return fission_equal(_device); } + /// True if splitting device into equal subdevices supported + inline bool fission_equal(const int i) + { return false; } + /// True if splitting device into subdevices by specified counts supported + inline bool fission_by_counts() + { return fission_by_counts(_device); } + /// True if splitting device into subdevices by specified counts supported + inline bool fission_by_counts(const int i) + { return false; } + /// True if splitting device into subdevices by affinity domains supported + inline bool fission_by_affinity() + { return fission_by_affinity(_device); } + /// True if splitting device into subdevices by affinity domains supported + inline bool fission_by_affinity(const int i) + { return false; } + + /// Maximum number of subdevices allowed from device fission + inline int max_sub_devices() + { return max_sub_devices(_device); } + /// Maximum number of subdevices allowed from device fission + inline int max_sub_devices(const int i) + { return 0; } + + /// List all devices along with all properties + inline void print_all(std::ostream &out); + + /// Select the platform that has accelerators (for compatibility with OpenCL) + inline int set_platform_accelerator(int pid=-1) { return UCL_SUCCESS; } + + inline int load_module(const void* program, hipModule_t& module, std::string *log=NULL){ + auto it = _loaded_modules.emplace(program, hipModule_t()); + if(!it.second){ + module = it.first->second; + return UCL_SUCCESS; + } + const unsigned int num_opts=2; + hipJitOption options[num_opts]; + void *values[num_opts]; + + // set up size of compilation log buffer + options[0] = hipJitOptionInfoLogBufferSizeBytes; + values[0] = (void *)(int)10240; + // set up pointer to the compilation log buffer + options[1] = hipJitOptionInfoLogBuffer; + char clog[10240] = { 0 }; + values[1] = clog; + + hipError_t err=hipModuleLoadDataEx(&module,program,num_opts, options,(void **)values); + + if (log!=NULL) + *log=std::string(clog); + + if (err != hipSuccess) { + #ifndef UCL_NO_EXIT + std::cerr << std::endl + << "----------------------------------------------------------\n" + << " UCL Error: Error compiling PTX Program...\n" + << "----------------------------------------------------------\n"; + std::cerr << log << std::endl; + #endif + _loaded_modules.erase(it.first); + return UCL_COMPILE_ERROR; + } + it.first->second = module; + return UCL_SUCCESS; + } + private: + std::unordered_map _loaded_modules; + int _device, _num_devices; + std::vector _properties; + std::vector _cq; + hipDevice_t _cu_device; +}; + +// Grabs the properties for all devices +UCL_Device::UCL_Device() { + CU_SAFE_CALL_NS(hipInit(0)); + CU_SAFE_CALL_NS(hipGetDeviceCount(&_num_devices)); + for (int i=0; i<_num_devices; ++i) { + hipDevice_t dev; + CU_SAFE_CALL_NS(hipDeviceGet(&dev,i)); + int major, minor; + CU_SAFE_CALL_NS(hipDeviceGetAttribute(&major, hipDeviceAttributeComputeCapabilityMajor, dev)); + CU_SAFE_CALL_NS(hipDeviceGetAttribute(&minor, hipDeviceAttributeComputeCapabilityMinor, dev)); + if (major==9999) + continue; + + NVDProperties prop; + prop.device_id = i; + prop.major=major; + prop.minor=minor; + + char namecstr[1024]; + CU_SAFE_CALL_NS(hipDeviceGetName(namecstr,1024,dev)); + prop.name=namecstr; + + CU_SAFE_CALL_NS(hipDeviceTotalMem(&prop.totalGlobalMem,dev)); + CU_SAFE_CALL_NS(hipDeviceGetAttribute(&prop.multiProcessorCount, hipDeviceAttributeMultiprocessorCount, dev)); + + CU_SAFE_CALL_NS(hipDeviceGetAttribute(&prop.maxThreadsPerBlock, hipDeviceAttributeMaxThreadsPerBlock, dev)); + CU_SAFE_CALL_NS(hipDeviceGetAttribute(&prop.maxThreadsDim[0], hipDeviceAttributeMaxBlockDimX, dev)); + CU_SAFE_CALL_NS(hipDeviceGetAttribute(&prop.maxThreadsDim[1], hipDeviceAttributeMaxBlockDimY, dev)); + CU_SAFE_CALL_NS(hipDeviceGetAttribute(&prop.maxThreadsDim[2], hipDeviceAttributeMaxBlockDimZ, dev)); + CU_SAFE_CALL_NS(hipDeviceGetAttribute(&prop.maxGridSize[0], hipDeviceAttributeMaxGridDimX, dev)); + CU_SAFE_CALL_NS(hipDeviceGetAttribute(&prop.maxGridSize[1], hipDeviceAttributeMaxGridDimY, dev)); + CU_SAFE_CALL_NS(hipDeviceGetAttribute(&prop.maxGridSize[2], hipDeviceAttributeMaxGridDimZ, dev)); + CU_SAFE_CALL_NS(hipDeviceGetAttribute(&prop.sharedMemPerBlock, hipDeviceAttributeMaxSharedMemoryPerBlock, dev)); + CU_SAFE_CALL_NS(hipDeviceGetAttribute(&prop.totalConstantMemory, hipDeviceAttributeTotalConstantMemory, dev)); + CU_SAFE_CALL_NS(hipDeviceGetAttribute(&prop.SIMDWidth, hipDeviceAttributeWarpSize, dev)); + //CU_SAFE_CALL_NS(hipDeviceGetAttribute(&prop.memPitch, CU_DEVICE_ATTRIBUTE_MAX_PITCH, dev)); + CU_SAFE_CALL_NS(hipDeviceGetAttribute(&prop.regsPerBlock, hipDeviceAttributeMaxRegistersPerBlock, dev)); + CU_SAFE_CALL_NS(hipDeviceGetAttribute(&prop.clockRate, hipDeviceAttributeClockRate, dev)); + //CU_SAFE_CALL_NS(hipDeviceGetAttribute(&prop.textureAlign, CU_DEVICE_ATTRIBUTE_TEXTURE_ALIGNMENT, dev)); + + //#if CUDA_VERSION >= 2020 + //CU_SAFE_CALL_NS(hipDeviceGetAttribute(&prop.kernelExecTimeoutEnabled, CU_DEVICE_ATTRIBUTE_KERNEL_EXEC_TIMEOUT,dev)); + CU_SAFE_CALL_NS(hipDeviceGetAttribute(&prop.integrated, hipDeviceAttributeIntegrated, dev)); + //CU_SAFE_CALL_NS(hipDeviceGetAttribute(&prop.canMapHostMemory, CU_DEVICE_ATTRIBUTE_CAN_MAP_HOST_MEMORY, dev)); + CU_SAFE_CALL_NS(hipDeviceGetAttribute(&prop.computeMode, hipDeviceAttributeComputeMode,dev)); + //#endif + //#if CUDA_VERSION >= 3010 + CU_SAFE_CALL_NS(hipDeviceGetAttribute(&prop.concurrentKernels, hipDeviceAttributeConcurrentKernels, dev)); + //CU_SAFE_CALL_NS(hipDeviceGetAttribute(&prop.ECCEnabled, CU_DEVICE_ATTRIBUTE_ECC_ENABLED, dev)); + //#endif + + _properties.push_back(prop); + } + _device=-1; + _cq.push_back(hipStream_t()); + _cq.back()=0; +} + +UCL_Device::~UCL_Device() { + clear(); +} + +int UCL_Device::set_platform(const int pid) { + clear(); + #ifdef UCL_DEBUG + assert(pid-1) { + for (int i=1; i= 2020 + int driver_version; + hipDriverGetVersion(&driver_version); + out << "Driver Version: " + << driver_version/1000 << "." << driver_version%100 + << std::endl; + //#endif + + if (num_devices() == 0) + out << "There is no device supporting HIP\n"; + for (int i=0; i= 2000 + out << " Number of compute units/multiprocessors: " + << _properties[i].multiProcessorCount << std::endl; + out << " Number of cores: " + << cores(i) << std::endl; + //#endif + out << " Total amount of constant memory: " + << _properties[i].totalConstantMemory << " bytes\n"; + out << " Total amount of local/shared memory per block: " + << _properties[i].sharedMemPerBlock << " bytes\n"; + out << " Total number of registers available per block: " + << _properties[i].regsPerBlock << std::endl; + out << " Warp size: " + << _properties[i].SIMDWidth << std::endl; + out << " Maximum number of threads per block: " + << _properties[i].maxThreadsPerBlock << std::endl; + out << " Maximum group size (# of threads per block) " + << _properties[i].maxThreadsDim[0] << " x " + << _properties[i].maxThreadsDim[1] << " x " + << _properties[i].maxThreadsDim[2] << std::endl; + out << " Maximum item sizes (# threads for each dim) " + << _properties[i].maxGridSize[0] << " x " + << _properties[i].maxGridSize[1] << " x " + << _properties[i].maxGridSize[2] << std::endl; + //out << " Maximum memory pitch: " + // << max_pitch(i) << " bytes\n"; + //out << " Texture alignment: " + // << _properties[i].textureAlign << " bytes\n"; + out << " Clock rate: " + << clock_rate(i) << " GHz\n"; + //#if CUDA_VERSION >= 2020 + //out << " Run time limit on kernels: "; + //if (_properties[i].kernelExecTimeoutEnabled) + // out << "Yes\n"; + //else + // out << "No\n"; + out << " Integrated: "; + if (_properties[i].integrated) + out << "Yes\n"; + else + out << "No\n"; + //out << " Support host page-locked memory mapping: "; + //if (_properties[i].canMapHostMemory) + // out << "Yes\n"; + //else + // out << "No\n"; + out << " Compute mode: "; + if (_properties[i].computeMode == hipComputeModeDefault) + out << "Default\n"; // multiple threads can use device +//#if CUDA_VERSION >= 8000 +// else if (_properties[i].computeMode == hipComputeModeExclusiveProcess) +//#else + else if (_properties[i].computeMode == hipComputeModeExclusive) +//#endif + out << "Exclusive\n"; // only thread can use device + else if (_properties[i].computeMode == hipComputeModeProhibited) + out << "Prohibited\n"; // no thread can use device + //#if CUDART_VERSION >= 4000 + else if (_properties[i].computeMode == hipComputeModeExclusiveProcess) + out << "Exclusive Process\n"; // multiple threads 1 process + //#endif + else + out << "Unknown\n"; + //#endif + //#if CUDA_VERSION >= 3010 + out << " Concurrent kernel execution: "; + if (_properties[i].concurrentKernels) + out << "Yes\n"; + else + out << "No\n"; + //out << " Device has ECC support enabled: "; + //if (_properties[i].ECCEnabled) + // out << "Yes\n"; + //else + // out << "No\n"; + //#endif + } +} + +} + +#endif diff --git a/lib/gpu/geryon/hip_kernel.h b/lib/gpu/geryon/hip_kernel.h new file mode 100644 index 0000000000000000000000000000000000000000..654eb44772371461d32078057f91be6289870c1b --- /dev/null +++ b/lib/gpu/geryon/hip_kernel.h @@ -0,0 +1,298 @@ +/* ----------------------------------------------------------------------- + Copyright (2010) Sandia Corporation. Under the terms of Contract + DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains + certain rights in this software. This software is distributed under + the Simplified BSD License. + ----------------------------------------------------------------------- */ + +#ifndef HIP_KERNEL +#define HIP_KERNEL + + +#include +#include "hip_device.h" +#include +#include +#include + +namespace ucl_hip { + +class UCL_Texture; +template class UCL_D_Vec; +template class UCL_D_Mat; +template class UCL_Vector; +template class UCL_Matrix; +#define UCL_MAX_KERNEL_ARGS 256 + +/// Class storing 1 or more kernel functions from a single string or file +class UCL_Program { + UCL_Device* _device_ptr; + public: + inline UCL_Program(UCL_Device &device) { _device_ptr = &device; _cq=device.cq(); } + inline UCL_Program(UCL_Device &device, const void *program, + const char *flags="", std::string *log=NULL) { + _device_ptr = &device; _cq=device.cq(); + init(device); + load_string(program,flags,log); + } + + inline ~UCL_Program() {} + + /// Initialize the program with a device + inline void init(UCL_Device &device) { _device_ptr = &device; _cq=device.cq(); } + + /// Clear any data associated with program + /** \note Must call init() after each clear **/ + inline void clear() { } + + /// Load a program from a file and compile with flags + inline int load(const char *filename, const char *flags="", std::string *log=NULL) { + std::ifstream in(filename); + if (!in || in.is_open()==false) { + #ifndef UCL_NO_EXIT + std::cerr << "UCL Error: Could not open kernel file: " + << filename << std::endl; + UCL_GERYON_EXIT; + #endif + return UCL_FILE_NOT_FOUND; + } + + std::string program((std::istreambuf_iterator(in)), + std::istreambuf_iterator()); + in.close(); + return load_string(program.c_str(),flags,log); + } + + /// Load a program from a string and compile with flags + inline int load_string(const void *program, const char *flags="", std::string *log=NULL) { + return _device_ptr->load_module(program, _module, log); + } + + friend class UCL_Kernel; + private: + hipModule_t _module; + hipStream_t _cq; + friend class UCL_Texture; +}; + +/// Class for dealing with CUDA Driver kernels +class UCL_Kernel { + public: + UCL_Kernel() : _dimensions(1), _num_args(0) { + _num_blocks[0]=0; + } + + UCL_Kernel(UCL_Program &program, const char *function) : + _dimensions(1), _num_args(0) { + _num_blocks[0]=0; + set_function(program,function); + _cq=program._cq; + } + + ~UCL_Kernel() {} + + /// Clear any function associated with the kernel + inline void clear() { } + + /// Get the kernel function from a program + /** \ret UCL_ERROR_FLAG (UCL_SUCCESS, UCL_FILE_NOT_FOUND, UCL_ERROR) **/ + inline int set_function(UCL_Program &program, const char *function) { + hipError_t err=hipModuleGetFunction(&_kernel,program._module,function); + if (err!=hipSuccess) { + #ifndef UCL_NO_EXIT + std::cerr << "UCL Error: Could not find function: " << function + << " in program.\n"; + UCL_GERYON_EXIT; + #endif + return UCL_FUNCTION_NOT_FOUND; + } + _cq=program._cq; + return UCL_SUCCESS; + } + + /// Set the kernel argument. + /** If not a device pointer, this must be repeated each time the argument + * changes + * \note To set kernel parameter i (i>0), parameter i-1 must be set **/ + template + inline void set_arg(const unsigned index, const dtype * const arg) { + if (index==_num_args) + add_arg(arg); + else if (index<_num_args){ + assert(0==1); // not implemented + } + else + assert(0==1); // Must add kernel parameters in sequential order + } + + /// Set a geryon container as a kernel argument. + template + inline void set_arg(const UCL_D_Vec * const arg) + { set_arg(&arg->begin()); } + + /// Set a geryon container as a kernel argument. + template + inline void set_arg(const UCL_D_Mat * const arg) + { set_arg(&arg->begin()); } + + /// Set a geryon container as a kernel argument. + template + inline void set_arg(const UCL_Vector * const arg) + { set_arg(&arg->device.begin()); } + + /// Set a geryon container as a kernel argument. + template + inline void set_arg(const UCL_Matrix * const arg) + { set_arg(&arg->device.begin()); } + + /// Add a kernel argument. + inline void add_arg(const hipDeviceptr_t* const arg) { + add_arg((void**)arg); + } + + /// Add a kernel argument. + template + inline void add_arg(const dtype* const arg) { + const auto old_size = _hip_kernel_args.size(); + const auto aligned_size = (old_size+alignof(dtype)-1) & ~(alignof(dtype)-1); + const auto arg_size = sizeof(dtype); + _hip_kernel_args.resize(aligned_size + arg_size); + *((dtype*)(&_hip_kernel_args[aligned_size])) = *arg; + _num_args++; + if (_num_args>UCL_MAX_KERNEL_ARGS) assert(0==1); + } + + /// Add a geryon container as a kernel argument. + template + inline void add_arg(const UCL_D_Vec * const arg) + { add_arg(&arg->begin()); } + + /// Add a geryon container as a kernel argument. + template + inline void add_arg(const UCL_D_Mat * const arg) + { add_arg(&arg->begin()); } + + /// Add a geryon container as a kernel argument. + template + inline void add_arg(const UCL_Vector * const arg) + { add_arg(&arg->device.begin()); } + + /// Add a geryon container as a kernel argument. + template + inline void add_arg(const UCL_Matrix * const arg) + { add_arg(&arg->device.begin()); } + + /// Set the number of thread blocks and the number of threads in each block + /** \note This should be called before any arguments have been added + \note The default command queue is used for the kernel execution **/ + inline void set_size(const size_t num_blocks, const size_t block_size) { + _dimensions=1; + _num_blocks[0]=num_blocks; + _num_blocks[1]=1; + _num_blocks[2]=1; + + _block_size[0]=block_size; + _block_size[1]=1; + _block_size[2]=1; + } + + /// Set the number of thread blocks and the number of threads in each block + /** \note This should be called before any arguments have been added + \note The default command queue for the kernel is changed to cq **/ + inline void set_size(const size_t num_blocks, const size_t block_size, + command_queue &cq) + { _cq=cq; set_size(num_blocks,block_size); } + + /// Set the number of thread blocks and the number of threads in each block + /** \note This should be called before any arguments have been added + \note The default command queue is used for the kernel execution **/ + inline void set_size(const size_t num_blocks_x, const size_t num_blocks_y, + const size_t block_size_x, const size_t block_size_y) { + _dimensions=2; + _num_blocks[0]=num_blocks_x; + _num_blocks[1]=num_blocks_y; + _num_blocks[2]=1; + + _block_size[0]=block_size_x; + _block_size[1]=block_size_y; + _block_size[2]=1; + } + + /// Set the number of thread blocks and the number of threads in each block + /** \note This should be called before any arguments have been added + \note The default command queue for the kernel is changed to cq **/ + inline void set_size(const size_t num_blocks_x, const size_t num_blocks_y, + const size_t block_size_x, const size_t block_size_y, + command_queue &cq) + {_cq=cq; set_size(num_blocks_x, num_blocks_y, block_size_x, block_size_y);} + + /// Set the number of thread blocks and the number of threads in each block + /** \note This should be called before any arguments have been added + \note The default command queue is used for the kernel execution **/ + inline void set_size(const size_t num_blocks_x, const size_t num_blocks_y, + const size_t block_size_x, + const size_t block_size_y, const size_t block_size_z) { + _dimensions=2; + _num_blocks[0]=num_blocks_x; + _num_blocks[1]=num_blocks_y; + _num_blocks[2]=1; + + _block_size[0]=block_size_x; + _block_size[1]=block_size_y; + _block_size[2]=block_size_z; + } + + /// Set the number of thread blocks and the number of threads in each block + /** \note This should be called before any arguments have been added + \note The default command queue is used for the kernel execution **/ + inline void set_size(const size_t num_blocks_x, const size_t num_blocks_y, + const size_t block_size_x, const size_t block_size_y, + const size_t block_size_z, command_queue &cq) { + _cq=cq; + set_size(num_blocks_x, num_blocks_y, block_size_x, block_size_y, + block_size_z); + } + + /// Run the kernel in the default command queue + inline void run() { + size_t args_size = _hip_kernel_args.size(); + void *config[] = { + HIP_LAUNCH_PARAM_BUFFER_POINTER, (void*)_hip_kernel_args.data(), + HIP_LAUNCH_PARAM_BUFFER_SIZE, &args_size, + HIP_LAUNCH_PARAM_END + }; + const auto res = hipModuleLaunchKernel(_kernel,_num_blocks[0],_num_blocks[1], + _num_blocks[2],_block_size[0],_block_size[1], + _block_size[2],0,_cq, NULL, config); + CU_SAFE_CALL(res); +//#endif + } + + /// Clear any arguments associated with the kernel + inline void clear_args() { + _num_args=0; + _hip_kernel_args.clear(); + } + + /// Return the default command queue/stream associated with this data + inline command_queue & cq() { return _cq; } + /// Change the default command queue associated with matrix + inline void cq(command_queue &cq_in) { _cq=cq_in; } + #include "ucl_arg_kludge.h" + + private: + hipFunction_t _kernel; + hipStream_t _cq; + unsigned _dimensions; + unsigned _num_blocks[3]; + unsigned _num_args; + friend class UCL_Texture; + + unsigned _block_size[3]; + std::vector _hip_kernel_args; +}; + +} // namespace + +#endif + diff --git a/lib/gpu/geryon/hip_macros.h b/lib/gpu/geryon/hip_macros.h new file mode 100644 index 0000000000000000000000000000000000000000..9c9971b89638d08cbe444b1c5a3617bdf6c11b3b --- /dev/null +++ b/lib/gpu/geryon/hip_macros.h @@ -0,0 +1,83 @@ +#ifndef HIP_MACROS_H +#define HIP_MACROS_H + +#include +#include +#include + +//#if CUDA_VERSION >= 3020 +#define CUDA_INT_TYPE size_t +//#else +//#define CUDA_INT_TYPE unsigned +//#endif + +#ifdef MPI_GERYON +#include "mpi.h" +#define NVD_GERYON_EXIT do { \ + int is_final; \ + MPI_Finalized(&is_final); \ + if (!is_final) \ + MPI_Abort(MPI_COMM_WORLD,-1); \ + } while(0) +#else +#define NVD_GERYON_EXIT assert(0==1) +#endif + +#ifndef UCL_GERYON_EXIT +#define UCL_GERYON_EXIT NVD_GERYON_EXIT +#endif + +#ifdef UCL_DEBUG +#define UCL_SYNC_DEBUG +#define UCL_DESTRUCT_CHECK +#endif + +#ifndef UCL_NO_API_CHECK + +#define CU_SAFE_CALL_NS( call ) do { \ + hipError_t err = call; \ + if( hipSuccess != err) { \ + fprintf(stderr, "HIP runtime error %d in call at file '%s' in line %i.\n", \ + err, __FILE__, __LINE__ ); \ + NVD_GERYON_EXIT; \ + } } while (0) + +#ifdef UCL_SYNC_DEBUG + +#define CU_SAFE_CALL( call ) do { \ + CU_SAFE_CALL_NS( call ); \ + hipError_t err=hipCtxSynchronize(); \ + if( hipSuccess != err) { \ + fprintf(stderr, "HIP runtime error %d in file '%s' in line %i.\n", \ + err, __FILE__, __LINE__ ); \ + NVD_GERYON_EXIT; \ + } } while (0) + +#else + +#define CU_SAFE_CALL( call ) CU_SAFE_CALL_NS( call ) + +#endif + +#else // not DEBUG + +// void macros for performance reasons +#define CU_SAFE_CALL_NS( call ) call +#define CU_SAFE_CALL( call) call + +#endif + +#ifdef UCL_DESTRUCT_CHECK + +#define CU_DESTRUCT_CALL( call) CU_SAFE_CALL( call) +#define CU_DESTRUCT_CALL_NS( call) CU_SAFE_CALL_NS( call) + +#else + +#define CU_DESTRUCT_CALL( call) call +#define CU_DESTRUCT_CALL_NS( call) call + +#endif + +#endif + diff --git a/lib/gpu/geryon/hip_mat.h b/lib/gpu/geryon/hip_mat.h new file mode 100644 index 0000000000000000000000000000000000000000..d9bbb4e5218f940fcab9791b4945562c7fb2e03e --- /dev/null +++ b/lib/gpu/geryon/hip_mat.h @@ -0,0 +1,43 @@ +/* ----------------------------------------------------------------------- + Copyright (2010) Sandia Corporation. Under the terms of Contract + DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains + certain rights in this software. This software is distributed under + the Simplified BSD License. + ----------------------------------------------------------------------- */ + +/*! \file */ + +#ifndef HIP_MAT_H +#define HIP_MAT_H + + +#include +#include "hip_memory.h" + +/// Namespace for CUDA Driver routines +namespace ucl_hip { + +#define _UCL_MAT_ALLOW +#define _UCL_DEVICE_PTR_MAT +#include "ucl_basemat.h" +#include "ucl_h_vec.h" +#include "ucl_h_mat.h" +#include "ucl_d_vec.h" +#include "ucl_d_mat.h" +#include "ucl_s_obj_help.h" +#include "ucl_vector.h" +#include "ucl_matrix.h" +#undef _UCL_DEVICE_PTR_MAT +#undef _UCL_MAT_ALLOW + +#define UCL_COPY_ALLOW +#include "ucl_copy.h" +#undef UCL_COPY_ALLOW + +#define UCL_PRINT_ALLOW +#include "ucl_print.h" +#undef UCL_PRINT_ALLOW + +} // namespace ucl_cudadr + +#endif diff --git a/lib/gpu/geryon/hip_memory.h b/lib/gpu/geryon/hip_memory.h new file mode 100644 index 0000000000000000000000000000000000000000..13f60ad93963ecbfcbdc5ab6e44dcd39161bfffb --- /dev/null +++ b/lib/gpu/geryon/hip_memory.h @@ -0,0 +1,279 @@ +/* ----------------------------------------------------------------------- + Copyright (2010) Sandia Corporation. Under the terms of Contract + DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains + certain rights in this software. This software is distributed under + the Simplified BSD License. + ----------------------------------------------------------------------- */ + +#ifndef HIP_MEMORY_H +#define HIP_MEMORY_H + + +#include +#include +#include +#include +#include "hip_macros.h" +#include "hip_device.h" +#include "ucl_types.h" + +namespace ucl_hip { + +// -------------------------------------------------------------------------- +// - API Specific Types +// -------------------------------------------------------------------------- +//typedef dim3 ucl_kernel_dim; + +#ifdef __HIP_PLATFORM_NVCC__ +typedef enum hipArray_Format { + HIP_AD_FORMAT_UNSIGNED_INT8 = 0x01, + HIP_AD_FORMAT_UNSIGNED_INT16 = 0x02, + HIP_AD_FORMAT_UNSIGNED_INT32 = 0x03, + HIP_AD_FORMAT_SIGNED_INT8 = 0x08, + HIP_AD_FORMAT_SIGNED_INT16 = 0x09, + HIP_AD_FORMAT_SIGNED_INT32 = 0x0a, + HIP_AD_FORMAT_HALF = 0x10, + HIP_AD_FORMAT_FLOAT = 0x20 +}hipArray_Format; +#endif + +// -------------------------------------------------------------------------- +// - API SPECIFIC DEVICE POINTERS +// -------------------------------------------------------------------------- +typedef hipDeviceptr_t device_ptr; + +// -------------------------------------------------------------------------- +// - HOST MEMORY ALLOCATION ROUTINES +// -------------------------------------------------------------------------- +template +inline int _host_alloc(mat_type &mat, copy_type &cm, const size_t n, + const enum UCL_MEMOPT kind, const enum UCL_MEMOPT kind2){ + hipError_t err=hipSuccess; + if (kind==UCL_NOT_PINNED) + *(mat.host_ptr())=(typename mat_type::data_type*)malloc(n); + else if (kind==UCL_WRITE_ONLY) + err=hipHostMalloc((void **)mat.host_ptr(),n,hipHostMallocWriteCombined); + else + err=hipHostMalloc((void **)mat.host_ptr(),n,hipHostMallocDefault); + if (err!=hipSuccess || *(mat.host_ptr())==NULL) + return UCL_MEMORY_ERROR; + mat.cq()=cm.cq(); + return UCL_SUCCESS; +} + +template +inline int _host_alloc(mat_type &mat, UCL_Device &dev, const size_t n, + const enum UCL_MEMOPT kind, const enum UCL_MEMOPT kind2){ + hipError_t err=hipSuccess; + if (kind==UCL_NOT_PINNED) + *(mat.host_ptr())=(typename mat_type::data_type*)malloc(n); + else if (kind==UCL_WRITE_ONLY) + err=hipHostMalloc((void **)mat.host_ptr(),n,hipHostMallocWriteCombined); + else + err=hipHostMalloc((void **)mat.host_ptr(),n,hipHostMallocDefault); + if (err!=hipSuccess || *(mat.host_ptr())==NULL) + return UCL_MEMORY_ERROR; + mat.cq()=dev.cq(); + return UCL_SUCCESS; +} + +template +inline void _host_free(mat_type &mat) { + if (mat.kind()==UCL_VIEW) + return; + else if (mat.kind()!=UCL_NOT_PINNED) + CU_DESTRUCT_CALL(hipHostFree(mat.begin())); + else + free(mat.begin()); +} + +template +inline int _host_resize(mat_type &mat, const size_t n) { + _host_free(mat); + hipError_t err=hipSuccess; + if (mat.kind()==UCL_NOT_PINNED) + *(mat.host_ptr())=(typename mat_type::data_type*)malloc(n); + else if (mat.kind()==UCL_WRITE_ONLY) + err=hipHostMalloc((void **)mat.host_ptr(),n,hipHostMallocWriteCombined); + else + err=hipHostMalloc((void **)mat.host_ptr(),n,hipHostMallocDefault); + if (err!=hipSuccess || *(mat.host_ptr())==NULL) + return UCL_MEMORY_ERROR; + return UCL_SUCCESS; +} + +// -------------------------------------------------------------------------- +// - DEVICE MEMORY ALLOCATION ROUTINES +// -------------------------------------------------------------------------- +template +inline int _device_alloc(mat_type &mat, copy_type &cm, const size_t n, + const enum UCL_MEMOPT kind) { + hipError_t err=hipMalloc((void**)&mat.cbegin(),n); + if (err!=hipSuccess) + return UCL_MEMORY_ERROR; + mat.cq()=cm.cq(); + return UCL_SUCCESS; +} + +template +inline int _device_alloc(mat_type &mat, UCL_Device &dev, const size_t n, + const enum UCL_MEMOPT kind) { + hipError_t err=hipMalloc((void**)&mat.cbegin(),n); + if (err!=hipSuccess) + return UCL_MEMORY_ERROR; + mat.cq()=dev.cq(); + return UCL_SUCCESS; +} + +template +inline int _device_alloc(mat_type &mat, copy_type &cm, const size_t rows, + const size_t cols, size_t &pitch, + const enum UCL_MEMOPT kind) { + hipError_t err; + size_t upitch; + err=hipMallocPitch((void**)&mat.cbegin(),&upitch, + cols*sizeof(typename mat_type::data_type),rows); + pitch=static_cast(upitch); + if (err!=hipSuccess) + return UCL_MEMORY_ERROR; + mat.cq()=cm.cq(); + return UCL_SUCCESS; +} + +template +inline int _device_alloc(mat_type &mat, UCL_Device &d, const size_t rows, + const size_t cols, size_t &pitch, + const enum UCL_MEMOPT kind) { + hipError_t err; + size_t upitch; + err=hipMallocPitch((void**)&mat.cbegin(),&upitch, + cols*sizeof(typename mat_type::data_type),rows); + pitch=static_cast(upitch); + if (err!=hipSuccess) + return UCL_MEMORY_ERROR; + mat.cq()=d.cq(); + return UCL_SUCCESS; +} + +template +inline void _device_free(mat_type &mat) { + if (mat.kind()!=UCL_VIEW){ + CU_DESTRUCT_CALL(hipFree((void*)mat.cbegin())); + } +} + +template +inline int _device_resize(mat_type &mat, const size_t n) { + _device_free(mat); + hipError_t err=hipMalloc((void**)&mat.cbegin(),n); + if (err!=hipSuccess) + return UCL_MEMORY_ERROR; + return UCL_SUCCESS; +} + +template +inline int _device_resize(mat_type &mat, const size_t rows, + const size_t cols, size_t &pitch) { + _device_free(mat); + hipError_t err; + size_t upitch; + err=hipMallocPitch((void**)&mat.cbegin(),&upitch, + cols*sizeof(typename mat_type::data_type),rows); + pitch=static_cast(upitch); + if (err!=hipSuccess) + return UCL_MEMORY_ERROR; + return UCL_SUCCESS; +} + +inline void _device_view(hipDeviceptr_t *ptr, hipDeviceptr_t &in) { + *ptr=in; +} + +template +inline void _device_view(hipDeviceptr_t *ptr, numtyp *in) { + *ptr=0; +} + +inline void _device_view(hipDeviceptr_t *ptr, hipDeviceptr_t &in, + const size_t offset, const size_t numsize) { + *ptr=(hipDeviceptr_t)(((char*)in)+offset*numsize); +} + +template +inline void _device_view(hipDeviceptr_t *ptr, numtyp *in, + const size_t offset, const size_t numsize) { + *ptr=0; +} + +// -------------------------------------------------------------------------- +// - DEVICE IMAGE ALLOCATION ROUTINES +// -------------------------------------------------------------------------- +template +inline void _device_image_alloc(mat_type &mat, copy_type &cm, const size_t rows, + const size_t cols) { + assert(0==1); +} + +template +inline void _device_image_alloc(mat_type &mat, UCL_Device &d, const size_t rows, + const size_t cols) { + assert(0==1); +} + +template +inline void _device_image_free(mat_type &mat) { + assert(0==1); +} + +// -------------------------------------------------------------------------- +// - ZERO ROUTINES +// -------------------------------------------------------------------------- +inline void _host_zero(void *ptr, const size_t n) { + memset(ptr,0,n); +} + +template +inline void _device_zero(mat_type &mat, const size_t n, command_queue &cq) { + CU_SAFE_CALL(hipMemsetAsync((void*)mat.cbegin(),0,n,cq)); +} + + +// -------------------------------------------------------------------------- +// - MEMCPY ROUTINES +// -------------------------------------------------------------------------- + + +template +hipMemcpyKind _memcpy_kind(mat1 &dst, const mat2 &src){ + assert(mat1::MEM_TYPE < 2 && mat2::MEM_TYPE < 2); + return (hipMemcpyKind)((1 - mat2::MEM_TYPE)*2 + (1 - mat1::MEM_TYPE)); +} + +template +inline void ucl_mv_cpy(mat1 &dst, const mat2 &src, const size_t n) { + CU_SAFE_CALL(hipMemcpy((void*)dst.begin(), (void*)src.begin(), n, _memcpy_kind(dst, src))); +} + +template +inline void ucl_mv_cpy(mat1 &dst, const mat2 &src, const size_t n, hipStream_t &cq) { + CU_SAFE_CALL(hipMemcpyAsync((void*)dst.begin(), (void*)src.begin(), n, _memcpy_kind(dst, src), cq)); +} + +template +inline void ucl_mv_cpy(mat1 &dst, const size_t dpitch, const mat2 &src, + const size_t spitch, const size_t cols, + const size_t rows) { + CU_SAFE_CALL(hipMemcpy2D((void*)dst.begin(), dpitch, (void*)src.begin(), spitch, cols, rows, _memcpy_kind(dst, src))); +} + +template +inline void ucl_mv_cpy(mat1 &dst, const size_t dpitch, const mat2 &src, + const size_t spitch, const size_t cols, + const size_t rows,hipStream_t &cq) { + CU_SAFE_CALL(hipMemcpy2DAsync((void*)dst.begin(), dpitch, (void*)src.begin(), spitch, cols, rows, _memcpy_kind(dst, src), cq)); +} + +} // namespace ucl_cudart + +#endif + diff --git a/lib/gpu/geryon/hip_texture.h b/lib/gpu/geryon/hip_texture.h new file mode 100644 index 0000000000000000000000000000000000000000..e7aa4e1461e25c2c0cdcbee35761d64832bc6b8c --- /dev/null +++ b/lib/gpu/geryon/hip_texture.h @@ -0,0 +1,113 @@ +/* ----------------------------------------------------------------------- + Copyright (2010) Sandia Corporation. Under the terms of Contract + DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains + certain rights in this software. This software is distributed under + the Simplified BSD License. + ----------------------------------------------------------------------- */ + +#ifndef HIP_TEXTURE +#define HIP_TEXTURE + + +#include +#include "hip_kernel.h" +#include "hip_mat.h" + +namespace ucl_hip { + +#ifdef __HIP_PLATFORM_NVCC__ +inline hipError_t hipModuleGetTexRef(CUtexref* texRef, hipModule_t hmod, const char* name){ + return hipCUResultTohipError(cuModuleGetTexRef(texRef, hmod, name)); +} +inline hipError_t hipTexRefSetFormat(CUtexref tex, hipArray_Format fmt, int NumPackedComponents) { + return hipCUResultTohipError(cuTexRefSetFormat(tex, (CUarray_format)fmt, NumPackedComponents )); +} +inline hipError_t hipTexRefSetAddress(size_t* offset, CUtexref tex, hipDeviceptr_t devPtr, size_t size) { + return hipCUResultTohipError(cuTexRefSetAddress(offset, tex, devPtr, size)); +} +#endif + +/// Class storing a texture reference +class UCL_Texture { + public: + UCL_Texture() {} + ~UCL_Texture() {} + /// Construct with a specified texture reference + inline UCL_Texture(UCL_Program &prog, const char *texture_name) + { get_texture(prog,texture_name); } + /// Set the texture reference for this object + inline void get_texture(UCL_Program &prog, const char *texture_name) + { + #ifdef __HIP_PLATFORM_NVCC__ + CU_SAFE_CALL(hipModuleGetTexRef(&_tex, prog._module, texture_name)); + #else + size_t _global_var_size; + CU_SAFE_CALL(hipModuleGetGlobal(&_device_ptr_to_global_var, &_global_var_size, prog._module, texture_name)); + #endif + } + + /// Bind a float array where each fetch grabs a vector of length numel + template + inline void bind_float(UCL_D_Vec &vec, const unsigned numel) + { _bind_float(vec,numel); } + + /// Bind a float array where each fetch grabs a vector of length numel + template + inline void bind_float(UCL_D_Mat &vec, const unsigned numel) + { _bind_float(vec,numel); } + + /// Bind a float array where each fetch grabs a vector of length numel + template + inline void bind_float(UCL_Vector &vec, const unsigned numel) + { _bind_float(vec.device,numel); } + + /// Bind a float array where each fetch grabs a vector of length numel + template + inline void bind_float(UCL_Matrix &vec, const unsigned numel) + { _bind_float(vec.device,numel); } + + /// Unbind the texture reference from the memory allocation + inline void unbind() { } + + /// Make a texture reference available to kernel + inline void allow(UCL_Kernel &kernel) { + //#if CUDA_VERSION < 4000 + //CU_SAFE_CALL(cuParamSetTexRef(kernel._kernel, CU_PARAM_TR_DEFAULT, _tex)); + //#endif + } + + private: +#ifdef __HIP_PLATFORM_NVCC__ + CUtexref _tex; +#else + void* _device_ptr_to_global_var; +#endif + friend class UCL_Kernel; + + template + inline void _bind_float(mat_typ &vec, const unsigned numel) { + #ifdef UCL_DEBUG + assert(numel!=0 && numel<5); + #endif + +#ifdef __HIP_PLATFORM_NVCC__ + if (vec.element_size()==sizeof(float)) + CU_SAFE_CALL(hipTexRefSetFormat(_tex, HIP_AD_FORMAT_FLOAT, numel)); + else { + if (numel>2) + CU_SAFE_CALL(hipTexRefSetFormat(_tex, HIP_AD_FORMAT_SIGNED_INT32, numel)); + else + CU_SAFE_CALL(hipTexRefSetFormat(_tex,HIP_AD_FORMAT_SIGNED_INT32,numel*2)); + } + CU_SAFE_CALL(hipTexRefSetAddress(NULL, _tex, vec.cbegin(), vec.numel()*vec.element_size())); +#else + void* data_ptr = (void*)vec.cbegin(); + CU_SAFE_CALL(hipMemcpyHtoD(hipDeviceptr_t(_device_ptr_to_global_var), &data_ptr, sizeof(void*))); +#endif + } +}; + +} // namespace + +#endif + diff --git a/lib/gpu/geryon/hip_timer.h b/lib/gpu/geryon/hip_timer.h new file mode 100644 index 0000000000000000000000000000000000000000..3be0b8cfd665d5d630f45fdb160845fc15ac7a44 --- /dev/null +++ b/lib/gpu/geryon/hip_timer.h @@ -0,0 +1,107 @@ +/* ----------------------------------------------------------------------- + Copyright (2010) Sandia Corporation. Under the terms of Contract + DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains + certain rights in this software. This software is distributed under + the Simplified BSD License. + ----------------------------------------------------------------------- */ + +#ifndef HIP_TIMER_H +#define HIP_TIMER_H + + +#include +#include "hip_macros.h" +#include "hip_device.h" + +namespace ucl_hip { + +/// Class for timing CUDA Driver events +class UCL_Timer { + public: + inline UCL_Timer() : _total_time(0.0f), _initialized(false) { } + inline UCL_Timer(UCL_Device &dev) : _total_time(0.0f), _initialized(false) + { init(dev); } + + inline ~UCL_Timer() { clear(); } + + /// Clear any data associated with timer + /** \note init() must be called to reuse timer after a clear() **/ + inline void clear() { + if (_initialized) { + CU_DESTRUCT_CALL(hipEventDestroy(start_event)); + CU_DESTRUCT_CALL(hipEventDestroy(stop_event)); + _initialized=false; + _total_time=0.0; + } + } + + /// Initialize default command queue for timing + inline void init(UCL_Device &dev) { init(dev, dev.cq()); } + + /// Initialize command queue for timing + inline void init(UCL_Device &dev, command_queue &cq) { + clear(); + _cq=cq; + _initialized=true; + CU_SAFE_CALL( hipEventCreateWithFlags(&start_event,0) ); + CU_SAFE_CALL( hipEventCreateWithFlags(&stop_event,0) ); + } + + /// Start timing on command queue + inline void start() { CU_SAFE_CALL(hipEventRecord(start_event,_cq)); } + + /// Stop timing on command queue + inline void stop() { CU_SAFE_CALL(hipEventRecord(stop_event,_cq)); } + + /// Block until the start event has been reached on device + inline void sync_start() + { CU_SAFE_CALL(hipEventSynchronize(start_event)); } + + /// Block until the stop event has been reached on device + inline void sync_stop() + { CU_SAFE_CALL(hipEventSynchronize(stop_event)); } + + /// Set the time elapsed to zero (not the total_time) + inline void zero() { + CU_SAFE_CALL(hipEventRecord(start_event,_cq)); + CU_SAFE_CALL(hipEventRecord(stop_event,_cq)); + } + + /// Set the total time to zero + inline void zero_total() { _total_time=0.0; } + + /// Add time from previous start and stop to total + /** Forces synchronization **/ + inline double add_to_total() + { double t=time(); _total_time+=t; return t/1000.0; } + + /// Add a user specified time to the total (ms) + inline void add_time_to_total(const double t) { _total_time+=t; } + + /// Return the time (ms) of last start to stop - Forces synchronization + inline double time() { + float timer; + CU_SAFE_CALL(hipEventSynchronize(stop_event)); + CU_SAFE_CALL( hipEventElapsedTime(&timer,start_event,stop_event) ); + return timer; + } + + /// Return the time (s) of last start to stop - Forces synchronization + inline double seconds() { return time()/1000.0; } + + /// Return the total time in ms + inline double total_time() { return _total_time; } + + /// Return the total time in seconds + inline double total_seconds() { return _total_time/1000.0; } + + private: + hipEvent_t start_event, stop_event; + hipStream_t _cq; + double _total_time; + bool _initialized; +}; + +} // namespace + +#endif diff --git a/lib/gpu/geryon/ucl_get_devices.cpp b/lib/gpu/geryon/ucl_get_devices.cpp index 1fa758fb462fbea69014d7d9d647a797cc33c055..b8dfc6f7b12a7c8a8e140fd5b4f7f92618884e53 100644 --- a/lib/gpu/geryon/ucl_get_devices.cpp +++ b/lib/gpu/geryon/ucl_get_devices.cpp @@ -36,6 +36,11 @@ using namespace ucl_cudadr; using namespace ucl_cudart; #endif +#ifdef UCL_HIP +#include "hip_device.h" +using namespace ucl_hip; +#endif + int main(int argc, char** argv) { UCL_Device cop; std::cout << "Found " << cop.num_platforms() << " platform(s).\n"; diff --git a/lib/gpu/lal_answer.cpp b/lib/gpu/lal_answer.cpp index aa6d33d33492890080ed09661a6d715939d3a7c4..95d40c0d0a765ea69bc22808e776ac58dd88f5fb 100644 --- a/lib/gpu/lal_answer.cpp +++ b/lib/gpu/lal_answer.cpp @@ -179,13 +179,15 @@ double AnswerT::energy_virial(double *eatom, double **vatom, if (_eflag) { for (int i=0; i<_inum; i++) evdwl+=engv[i]; - if (_ef_atom) - if (_ilist==NULL) + if (_ef_atom) { + if (_ilist==NULL) { for (int i=0; i<_inum; i++) eatom[i]+=engv[i]; - else + } else { for (int i=0; i<_inum; i++) eatom[_ilist[i]]+=engv[i]; + } + } vstart=_inum; } if (_vflag) { @@ -193,7 +195,7 @@ double AnswerT::energy_virial(double *eatom, double **vatom, for (int j=0; j<6; j++) { for (int i=vstart; i +#include +#endif + namespace LAMMPS_AL { #define AtomT Atom @@ -70,6 +75,26 @@ bool AtomT::alloc(const int nall) { } #endif + #ifdef USE_HIP_DEVICE_SORT + if (_gpu_nbor==1) { + size_t temp_storage_bytes = 0; + if(hipSuccess != hipcub::DeviceRadixSort::SortPairs(nullptr, temp_storage_bytes, sort_out_keys, sort_out_keys, sort_out_values, sort_out_values, _max_atoms)) + return false; + if(sort_out_size < _max_atoms){ + if (sort_out_keys ) hipFree(sort_out_keys); + if (sort_out_values) hipFree(sort_out_values); + hipMalloc(&sort_out_keys , _max_atoms * sizeof(unsigned)); + hipMalloc(&sort_out_values, _max_atoms * sizeof(int )); + sort_out_size = _max_atoms; + } + if(temp_storage_bytes > sort_temp_storage_size){ + if(sort_temp_storage) hipFree(sort_temp_storage); + hipMalloc(&sort_temp_storage, temp_storage_bytes); + sort_temp_storage_size = temp_storage_bytes; + } + } + #endif + // --------------------------- Device allocations int gpu_bytes=0; success=success && (x.alloc(_max_atoms*4,*dev,UCL_WRITE_ONLY, @@ -184,6 +209,27 @@ bool AtomT::add_fields(const bool charge, const bool rot, return false; } #endif + + #ifdef USE_HIP_DEVICE_SORT + if (_gpu_nbor==1) { + size_t temp_storage_bytes = 0; + if(hipSuccess != hipcub::DeviceRadixSort::SortPairs(nullptr, temp_storage_bytes, sort_out_keys, sort_out_keys, sort_out_values, sort_out_values, _max_atoms)) + return false; + if(sort_out_size < _max_atoms){ + if (sort_out_keys ) hipFree(sort_out_keys); + if (sort_out_values) hipFree(sort_out_values); + hipMalloc(&sort_out_keys , _max_atoms * sizeof(unsigned)); + hipMalloc(&sort_out_values, _max_atoms * sizeof(int )); + sort_out_size = _max_atoms; + } + if(temp_storage_bytes > sort_temp_storage_size){ + if(sort_temp_storage) hipFree(sort_temp_storage); + hipMalloc(&sort_temp_storage, temp_storage_bytes); + sort_temp_storage_size = temp_storage_bytes; + } + } + #endif + success=success && (dev_particle_id.alloc(_max_atoms,*dev, UCL_READ_ONLY)==UCL_SUCCESS); gpu_bytes+=dev_particle_id.row_bytes(); @@ -275,6 +321,19 @@ void AtomT::clear_resize() { if (_gpu_nbor==1) cudppDestroyPlan(sort_plan); #endif + #ifdef USE_HIP_DEVICE_SORT + if (_gpu_nbor==1) { + if(sort_out_keys) hipFree(sort_out_keys); + if(sort_out_values) hipFree(sort_out_values); + if(sort_temp_storage) hipFree(sort_temp_storage); + sort_out_keys = nullptr; + sort_out_values = nullptr; + sort_temp_storage = nullptr; + sort_temp_storage_size = 0; + sort_out_size = 0; + } + #endif + if (_gpu_nbor==2) { host_particle_id.clear(); host_cell_id.clear(); @@ -326,6 +385,22 @@ void AtomT::sort_neighbor(const int num_atoms) { UCL_GERYON_EXIT; } #endif + + #ifdef USE_HIP_DEVICE_SORT + if(sort_out_size < num_atoms){ + printf("AtomT::sort_neighbor: invalid temp buffer size\n"); + UCL_GERYON_EXIT; + } + if(hipSuccess != hipcub::DeviceRadixSort::SortPairs(sort_temp_storage, sort_temp_storage_size, (unsigned *)dev_cell_id.begin(), sort_out_keys, (int *)dev_particle_id.begin(), sort_out_values, num_atoms)){ + printf("AtomT::sort_neighbor: DeviceRadixSort error\n"); + UCL_GERYON_EXIT; + } + if(hipSuccess != hipMemcpy((unsigned *)dev_cell_id.begin(), sort_out_keys , num_atoms*sizeof(unsigned), hipMemcpyDeviceToDevice) || + hipSuccess != hipMemcpy((int *) dev_particle_id.begin(), sort_out_values, num_atoms*sizeof(int ), hipMemcpyDeviceToDevice)){ + printf("AtomT::sort_neighbor: copy output error\n"); + UCL_GERYON_EXIT; + } + #endif } #ifdef GPU_CAST diff --git a/lib/gpu/lal_atom.cu b/lib/gpu/lal_atom.cu index 28ff31c5660fb0690e5309a869857ddfe49f800d..14184593018bde93e008cc45a669ee78e51cfdfa 100644 --- a/lib/gpu/lal_atom.cu +++ b/lib/gpu/lal_atom.cu @@ -11,9 +11,9 @@ // // begin : // email : brownw@ornl.gov -// ***************************************************************************/ +// *************************************************************************** -#ifdef NV_KERNEL +#if defined(NV_KERNEL) || defined(USE_HIP) #include "lal_preprocessor.h" #endif diff --git a/lib/gpu/lal_atom.h b/lib/gpu/lal_atom.h index 57880d7ca976c029ab7006b9c2a5035da8018cfc..e39740d6c8293eb5099850171031269c24861a5e 100644 --- a/lib/gpu/lal_atom.h +++ b/lib/gpu/lal_atom.h @@ -29,6 +29,11 @@ using namespace ucl_opencl; #include "geryon/nvc_mat.h" #include "geryon/nvc_kernel.h" using namespace ucl_cudart; +#elif defined(USE_HIP) +#include "geryon/hip_timer.h" +#include "geryon/hip_mat.h" +#include "geryon/hip_kernel.h" +using namespace ucl_hip; #else #include "geryon/nvd_timer.h" #include "geryon/nvd_mat.h" @@ -477,6 +482,14 @@ class Atom { CUDPPConfiguration sort_config; CUDPPHandle sort_plan; #endif + + #ifdef USE_HIP_DEVICE_SORT + unsigned* sort_out_keys = nullptr; + int* sort_out_values = nullptr; + void* sort_temp_storage = nullptr; + size_t sort_temp_storage_size = 0; + size_t sort_out_size = 0; + #endif }; } diff --git a/lib/gpu/lal_aux_fun1.h b/lib/gpu/lal_aux_fun1.h index 47a216ff6f1c6fa84eefec11a48ad79e3e697804..5b7150d950fbd43e75921ee3d26c3fa690d591b8 100644 --- a/lib/gpu/lal_aux_fun1.h +++ b/lib/gpu/lal_aux_fun1.h @@ -13,7 +13,7 @@ // email : brownw@ornl.gov // ***************************************************************************/ -#ifdef NV_KERNEL +#if defined(NV_KERNEL) || defined(USE_HIP) #include "lal_preprocessor.h" #endif diff --git a/lib/gpu/lal_base_atomic.h b/lib/gpu/lal_base_atomic.h index da17bd928db3506f3199fa3c34c7f587293e0df6..c97f42c50e66f6df6fccf44610fad2a94ef8c217 100644 --- a/lib/gpu/lal_base_atomic.h +++ b/lib/gpu/lal_base_atomic.h @@ -24,6 +24,8 @@ #include "geryon/ocl_texture.h" #elif defined(USE_CUDART) #include "geryon/nvc_texture.h" +#elif defined(USE_HIP) +#include "geryon/hip_texture.h" #else #include "geryon/nvd_texture.h" #endif diff --git a/lib/gpu/lal_base_charge.h b/lib/gpu/lal_base_charge.h index 29554ebfd5acd9423ea817db3e1b39293486a548..b6d3e9e3f8e82179497ed7f5dd22c6d83d5192ec 100644 --- a/lib/gpu/lal_base_charge.h +++ b/lib/gpu/lal_base_charge.h @@ -25,6 +25,8 @@ #include "geryon/ocl_texture.h" #elif defined(USE_CUDART) #include "geryon/nvc_texture.h" +#elif defined(USE_HIP) +#include "geryon/hip_texture.h" #else #include "geryon/nvd_texture.h" #endif diff --git a/lib/gpu/lal_base_dipole.h b/lib/gpu/lal_base_dipole.h index eecdcd3aab06e302fc8f997dab04405e72aee6ce..856b69b56b617767cb3be58b325201b5bf92da1e 100644 --- a/lib/gpu/lal_base_dipole.h +++ b/lib/gpu/lal_base_dipole.h @@ -23,6 +23,8 @@ #ifdef USE_OPENCL #include "geryon/ocl_texture.h" +#elif defined(USE_HIP) +#include "geryon/hip_texture.h" #else #include "geryon/nvd_texture.h" #endif diff --git a/lib/gpu/lal_base_dpd.h b/lib/gpu/lal_base_dpd.h index b46de2197dcd0d384b7931d85e7ab6516d9b80d4..5d1573c1a9e7e54d260719bedf584aa8b89e0d32 100644 --- a/lib/gpu/lal_base_dpd.h +++ b/lib/gpu/lal_base_dpd.h @@ -23,6 +23,8 @@ #ifdef USE_OPENCL #include "geryon/ocl_texture.h" +#elif defined(USE_HIP) +#include "geryon/hip_texture.h" #else #include "geryon/nvd_texture.h" #endif diff --git a/lib/gpu/lal_base_ellipsoid.h b/lib/gpu/lal_base_ellipsoid.h index d4bdd9e96989c823767034039923dac6b5e264db..dc1e624a2fe83acffb0d4d2fdc634cc54662e9b0 100644 --- a/lib/gpu/lal_base_ellipsoid.h +++ b/lib/gpu/lal_base_ellipsoid.h @@ -24,6 +24,8 @@ #include "geryon/ocl_texture.h" #elif defined(USE_CUDART) #include "geryon/nvc_texture.h" +#elif defined(USE_HIP) +#include "geryon/hip_texture.h" #else #include "geryon/nvd_texture.h" #endif diff --git a/lib/gpu/lal_base_three.h b/lib/gpu/lal_base_three.h index 96ca928edc0429ee8a10e1efd8ad318377b285cf..38af78b78ece17e14b4ef7b2cd38f83b3c3ecd37 100644 --- a/lib/gpu/lal_base_three.h +++ b/lib/gpu/lal_base_three.h @@ -24,6 +24,8 @@ #include "geryon/ocl_texture.h" #elif defined(USE_CUDART) #include "geryon/nvc_texture.h" +#elif defined(USE_HIP) +#include "geryon/hip_texture.h" #else #include "geryon/nvd_texture.h" #endif diff --git a/lib/gpu/lal_beck.cu b/lib/gpu/lal_beck.cu index 7d72128b5fba5145c96bfb9a517382c6d2d22a20..f24132b9a28c0015829ead20c8e707f4bf332058 100644 --- a/lib/gpu/lal_beck.cu +++ b/lib/gpu/lal_beck.cu @@ -11,14 +11,14 @@ // // begin : // email : nguyentd@ornl.gov -// ***************************************************************************/ +// *************************************************************************** -#ifdef NV_KERNEL +#if defined(NV_KERNEL) || defined(USE_HIP) #include "lal_aux_fun1.h" #ifndef _DOUBLE_DOUBLE -texture pos_tex; +_texture( pos_tex,float4); #else -texture pos_tex; +_texture_2d( pos_tex,int4); #endif #else #define pos_tex x_ diff --git a/lib/gpu/lal_born.cu b/lib/gpu/lal_born.cu index 0ca7fea5febbac35b0e0feb07d2faa8c163a50aa..f9fea6d618d46fe038ba54b748aec6745b216b79 100644 --- a/lib/gpu/lal_born.cu +++ b/lib/gpu/lal_born.cu @@ -11,14 +11,14 @@ // // begin : // email : nguyentd@ornl.gov -// ***************************************************************************/ +// *************************************************************************** -#ifdef NV_KERNEL +#if defined(NV_KERNEL) || defined(USE_HIP) #include "lal_aux_fun1.h" #ifndef _DOUBLE_DOUBLE -texture pos_tex; +_texture( pos_tex,float4); #else -texture pos_tex; +_texture_2d( pos_tex,int4); #endif #else #define pos_tex x_ diff --git a/lib/gpu/lal_born_coul_long.cu b/lib/gpu/lal_born_coul_long.cu index 71e5e0ae502e8847bc006788deaf82da9477868d..14e644b45af94f2890ef6a3b692c9cff1d83dc0d 100644 --- a/lib/gpu/lal_born_coul_long.cu +++ b/lib/gpu/lal_born_coul_long.cu @@ -11,17 +11,17 @@ // // begin : // email : nguyentd@ornl.gov -// ***************************************************************************/ +// *************************************************************************** -#ifdef NV_KERNEL +#if defined(NV_KERNEL) || defined(USE_HIP) #include "lal_aux_fun1.h" #ifndef _DOUBLE_DOUBLE -texture pos_tex; -texture q_tex; +_texture( pos_tex,float4); +_texture( q_tex,float); #else -texture pos_tex; -texture q_tex; +_texture_2d( pos_tex,int4); +_texture( q_tex,int2); #endif #else diff --git a/lib/gpu/lal_born_coul_long_cs.cu b/lib/gpu/lal_born_coul_long_cs.cu index b3e79d9ec841afd0d31cf64b5af1c74f9469a811..6f04fcea945c435c8625e4957810bf46938b90ca 100644 --- a/lib/gpu/lal_born_coul_long_cs.cu +++ b/lib/gpu/lal_born_coul_long_cs.cu @@ -11,17 +11,18 @@ // // begin : June 2018 // email : ndactrung@gmail.com -// ***************************************************************************/ +// *************************************************************************** -#ifdef NV_KERNEL +#if defined(NV_KERNEL) || defined(USE_HIP) #include "lal_aux_fun1.h" + #ifndef _DOUBLE_DOUBLE -texture pos_tex; -texture q_tex; +_texture( pos_tex,float4); +_texture( q_tex,float); #else -texture pos_tex; -texture q_tex; +_texture_2d( pos_tex,int4); +_texture( q_tex,int2); #endif #else @@ -108,7 +109,7 @@ __kernel void k_born_coul_long_cs(const __global numtyp4 *restrict x_, numtyp rsq = delx*delx+dely*dely+delz*delz; int mtype=itype*lj_types+jtype; - if (rsq pos_tex; -texture q_tex; +_texture( pos_tex,float4); +_texture( q_tex,float); #else -texture pos_tex; -texture q_tex; +_texture_2d( pos_tex,int4); +_texture( q_tex,int2); #endif #else diff --git a/lib/gpu/lal_born_coul_wolf_cs.cu b/lib/gpu/lal_born_coul_wolf_cs.cu index 847387bfe8c1adbe2e1f3f2a3ed21964d08c5989..b957b8be69b53eb814c1b9cdf6df597c0a5c369f 100644 --- a/lib/gpu/lal_born_coul_wolf_cs.cu +++ b/lib/gpu/lal_born_coul_wolf_cs.cu @@ -11,17 +11,17 @@ // // begin : // email : ndactrung@gmail.com -// ***************************************************************************/ +// *************************************************************************** -#ifdef NV_KERNEL +#if defined(NV_KERNEL) || defined(USE_HIP) #include "lal_aux_fun1.h" #ifndef _DOUBLE_DOUBLE -texture pos_tex; -texture q_tex; +_texture( pos_tex,float4); +_texture( q_tex,float); #else -texture pos_tex; -texture q_tex; +_texture_2d( pos_tex,int4); +_texture( q_tex,int2); #endif #else diff --git a/lib/gpu/lal_buck.cu b/lib/gpu/lal_buck.cu index c1e1c7d7e251bfad2c1e0ffe71abc9a1bd1f9580..0f9044cefc9f40fd2ce53e7222df174bcad90053 100644 --- a/lib/gpu/lal_buck.cu +++ b/lib/gpu/lal_buck.cu @@ -11,14 +11,14 @@ // // begin : // email : nguyentd@ornl.gov -// ***************************************************************************/ +// *************************************************************************** -#ifdef NV_KERNEL +#if defined(NV_KERNEL) || defined(USE_HIP) #include "lal_aux_fun1.h" #ifndef _DOUBLE_DOUBLE -texture pos_tex; +_texture( pos_tex,float4); #else -texture pos_tex; +_texture_2d( pos_tex,int4); #endif #else #define pos_tex x_ diff --git a/lib/gpu/lal_buck_coul.cu b/lib/gpu/lal_buck_coul.cu index 6f0d414825562f4999ef627313ec1f8f81b31255..163c8e43624fd210d615be44238bc2e254ae4139 100644 --- a/lib/gpu/lal_buck_coul.cu +++ b/lib/gpu/lal_buck_coul.cu @@ -11,17 +11,17 @@ // // begin : // email : nguyentd@ornl.gov -// ***************************************************************************/ +// *************************************************************************** -#ifdef NV_KERNEL +#if defined(NV_KERNEL) || defined(USE_HIP) #include "lal_aux_fun1.h" #ifndef _DOUBLE_DOUBLE -texture pos_tex; -texture q_tex; +_texture( pos_tex,float4); +_texture( q_tex,float); #else -texture pos_tex; -texture q_tex; +_texture_2d( pos_tex,int4); +_texture( q_tex,int2); #endif #else diff --git a/lib/gpu/lal_buck_coul_long.cu b/lib/gpu/lal_buck_coul_long.cu index da3237a31fd41cd38f70ea7f0064c1cb05e9c787..b1bbf67bc227827fa5010b9838658c31394b016a 100644 --- a/lib/gpu/lal_buck_coul_long.cu +++ b/lib/gpu/lal_buck_coul_long.cu @@ -11,17 +11,17 @@ // // begin : // email : nguyentd@ornl.gov -// ***************************************************************************/ +// *************************************************************************** -#ifdef NV_KERNEL +#if defined(NV_KERNEL) || defined(USE_HIP) #include "lal_aux_fun1.h" #ifndef _DOUBLE_DOUBLE -texture pos_tex; -texture q_tex; +_texture( pos_tex,float4); +_texture( q_tex,float); #else -texture pos_tex; -texture q_tex; +_texture_2d( pos_tex,int4); +_texture( q_tex,int2); #endif #else diff --git a/lib/gpu/lal_charmm_long.cu b/lib/gpu/lal_charmm_long.cu index 244131f8338fab3254ca7a494b2318ec0abbde39..4e9802f36831bb71dba9ecc9591403caa2ec9706 100644 --- a/lib/gpu/lal_charmm_long.cu +++ b/lib/gpu/lal_charmm_long.cu @@ -11,17 +11,17 @@ // // begin : // email : brownw@ornl.gov -// ***************************************************************************/ +// *************************************************************************** -#ifdef NV_KERNEL +#if defined(NV_KERNEL) || defined(USE_HIP) #include "lal_aux_fun1.h" #ifndef _DOUBLE_DOUBLE -texture pos_tex; -texture q_tex; +_texture( pos_tex,float4); +_texture( q_tex,float); #else -texture pos_tex; -texture q_tex; +_texture_2d( pos_tex,int4); +_texture( q_tex,int2); #endif #else diff --git a/lib/gpu/lal_colloid.cu b/lib/gpu/lal_colloid.cu index 28a9809b192aa2328cdcfabb95c0a2cf425fab02..4983142aa051a452204c8796884f9e8d9d8c6a97 100644 --- a/lib/gpu/lal_colloid.cu +++ b/lib/gpu/lal_colloid.cu @@ -11,14 +11,14 @@ // // begin : // email : nguyentd@ornl.gov -// ***************************************************************************/ +// *************************************************************************** -#ifdef NV_KERNEL +#if defined(NV_KERNEL) || defined(USE_HIP) #include "lal_aux_fun1.h" #ifndef _DOUBLE_DOUBLE -texture pos_tex; +_texture( pos_tex,float4); #else -texture pos_tex; +_texture_2d( pos_tex,int4); #endif #else #define pos_tex x_ diff --git a/lib/gpu/lal_coul.cu b/lib/gpu/lal_coul.cu index 503e674c817cd90cf64177df47d411a445cd6898..03fc568c77525796c089b2b01332cd8c2227b2d8 100644 --- a/lib/gpu/lal_coul.cu +++ b/lib/gpu/lal_coul.cu @@ -11,17 +11,17 @@ // // begin : // email : ndtrung@umich.edu -// ***************************************************************************/ +// *************************************************************************** -#ifdef NV_KERNEL +#if defined(NV_KERNEL) || defined(USE_HIP) #include "lal_aux_fun1.h" #ifndef _DOUBLE_DOUBLE -texture pos_tex; -texture q_tex; +_texture( pos_tex,float4); +_texture( q_tex,float); #else -texture pos_tex; -texture q_tex; +_texture_2d( pos_tex,int4); +_texture( q_tex,int2); #endif #else diff --git a/lib/gpu/lal_coul_debye.cu b/lib/gpu/lal_coul_debye.cu index 464a1b18def652095e85ab7c87735d365d40a5d5..e7f0b97e23a488fd746cac6e481897a3c9c14453 100644 --- a/lib/gpu/lal_coul_debye.cu +++ b/lib/gpu/lal_coul_debye.cu @@ -11,17 +11,17 @@ // // begin : // email : ndtrung@umich.edu -// ***************************************************************************/ +// *************************************************************************** -#ifdef NV_KERNEL +#if defined(NV_KERNEL) || defined(USE_HIP) #include "lal_aux_fun1.h" #ifndef _DOUBLE_DOUBLE -texture pos_tex; -texture q_tex; +_texture( pos_tex,float4); +_texture( q_tex,float); #else -texture pos_tex; -texture q_tex; +_texture_2d( pos_tex,int4); +_texture( q_tex,int2); #endif #else diff --git a/lib/gpu/lal_coul_dsf.cu b/lib/gpu/lal_coul_dsf.cu index 82c44cd382e5f65d1adec3e1b816e86afba68d4c..190fb5b7fd95a91c88ee6846f7763243e85c2e43 100644 --- a/lib/gpu/lal_coul_dsf.cu +++ b/lib/gpu/lal_coul_dsf.cu @@ -11,17 +11,17 @@ // // begin : 8/15/2012 // email : nguyentd@ornl.gov -// ***************************************************************************/ +// *************************************************************************** -#ifdef NV_KERNEL +#if defined(NV_KERNEL) || defined(USE_HIP) #include "lal_aux_fun1.h" #ifndef _DOUBLE_DOUBLE -texture pos_tex; -texture q_tex; +_texture( pos_tex,float4); +_texture( q_tex,float); #else -texture pos_tex; -texture q_tex; +_texture_2d( pos_tex,int4); +_texture( q_tex,int2); #endif #else diff --git a/lib/gpu/lal_coul_long.cu b/lib/gpu/lal_coul_long.cu index 365195e00c5809e0c48d6cc20b915fbb02860e67..7adcdbbabc7badf75c5f8a50cb789e635953946b 100644 --- a/lib/gpu/lal_coul_long.cu +++ b/lib/gpu/lal_coul_long.cu @@ -11,17 +11,17 @@ // // begin : July 2011 // email : a.kohlmeyer@temple.edu -// ***************************************************************************/ +// *************************************************************************** -#ifdef NV_KERNEL +#if defined(NV_KERNEL) || defined(USE_HIP) #include "lal_aux_fun1.h" #ifndef _DOUBLE_DOUBLE -texture pos_tex; -texture q_tex; +_texture( pos_tex,float4); +_texture( q_tex,float); #else -texture pos_tex; -texture q_tex; +_texture_2d( pos_tex,int4); +_texture( q_tex,int2); #endif #else diff --git a/lib/gpu/lal_coul_long_cs.cu b/lib/gpu/lal_coul_long_cs.cu index 3c34666131d2d363c03bc6f684bd9b573b54c043..85c9d84bdb0500b7597e64e77105d3122f8f86fe 100644 --- a/lib/gpu/lal_coul_long_cs.cu +++ b/lib/gpu/lal_coul_long_cs.cu @@ -11,17 +11,17 @@ // // begin : June 2018 // email : ndactrung@gmail.com -// ***************************************************************************/ +// *************************************************************************** -#ifdef NV_KERNEL +#if defined(NV_KERNEL) || defined(USE_HIP) #include "lal_aux_fun1.h" #ifndef _DOUBLE_DOUBLE -texture pos_tex; -texture q_tex; +_texture( pos_tex,float4); +_texture( q_tex,float); #else -texture pos_tex; -texture q_tex; +_texture_2d( pos_tex,int4); +_texture( q_tex,int2); #endif #else diff --git a/lib/gpu/lal_device.cpp b/lib/gpu/lal_device.cpp index 5bd306ea5b45be9c5830fafbfd1fea1b9ec2eee5..aaf74ed28c314bed0152667b43294ffe0055cae2 100644 --- a/lib/gpu/lal_device.cpp +++ b/lib/gpu/lal_device.cpp @@ -268,7 +268,7 @@ int DeviceT::init(Answer &ans, const bool charge, gpu_nbor=1; else if (_gpu_mode==Device::GPU_HYB_NEIGH) gpu_nbor=2; - #ifndef USE_CUDPP + #if !defined(USE_CUDPP) && !defined(USE_HIP_DEVICE_SORT) if (gpu_nbor==1) gpu_nbor=2; #endif @@ -341,7 +341,7 @@ int DeviceT::init_nbor(Neighbor *nbor, const int nlocal, gpu_nbor=1; else if (_gpu_mode==Device::GPU_HYB_NEIGH) gpu_nbor=2; - #ifndef USE_CUDPP + #if !defined(USE_CUDPP) && !defined(USE_HIP_DEVICE_SORT) if (gpu_nbor==1) gpu_nbor=2; #endif @@ -712,7 +712,7 @@ int DeviceT::compile_kernels() { gpu_lib_data.update_host(false); _ptx_arch=static_cast(gpu_lib_data[0])/100.0; - #ifndef USE_OPENCL + #if !(defined(USE_OPENCL) || defined(USE_HIP)) if (_ptx_arch>gpu->arch() || floor(_ptx_arch)arch())) return -4; #endif diff --git a/lib/gpu/lal_device.cu b/lib/gpu/lal_device.cu index 37d07588458ef4a69325f53d3e838dd1b19ab71b..afc7a0b988777e6c8cf9e045c1739b95dd8ae97a 100644 --- a/lib/gpu/lal_device.cu +++ b/lib/gpu/lal_device.cu @@ -13,7 +13,7 @@ // email : brownw@ornl.gov // *************************************************************************** -#ifdef NV_KERNEL +#if defined(NV_KERNEL) || defined(USE_HIP) #include "lal_preprocessor.h" #endif diff --git a/lib/gpu/lal_dipole_lj.cu b/lib/gpu/lal_dipole_lj.cu index 745bdb7f274e133a7a8df75fc21bd33cbf88afbc..a3ed0d8d40eb8b67e4ad8a7bd7728606b5a4d217 100644 --- a/lib/gpu/lal_dipole_lj.cu +++ b/lib/gpu/lal_dipole_lj.cu @@ -11,18 +11,18 @@ // // begin : // email : nguyentd@ornl.gov -// ***************************************************************************/ +// *************************************************************************** -#ifdef NV_KERNEL +#if defined(NV_KERNEL) || defined(USE_HIP) #include "lal_aux_fun1.h" #ifndef _DOUBLE_DOUBLE -texture pos_tex; -texture q_tex; -texture mu_tex; +_texture( pos_tex,float4); +_texture( q_tex,float); +_texture( mu_tex,float4); #else -texture pos_tex; -texture q_tex; -texture mu_tex; +_texture_2d( pos_tex,int4); +_texture( q_tex,int2); +_texture_2d( mu_tex,int4); #endif #else diff --git a/lib/gpu/lal_dipole_lj_sf.cu b/lib/gpu/lal_dipole_lj_sf.cu index 9847e84823da2cc76a55a8585cd25d2cbd642648..8032ae82ed78dc22e65e97fa6c2d4b0daf389433 100644 --- a/lib/gpu/lal_dipole_lj_sf.cu +++ b/lib/gpu/lal_dipole_lj_sf.cu @@ -11,19 +11,19 @@ // // begin : // email : nguyentd@ornl.gov -// ***************************************************************************/ +// *************************************************************************** -#ifdef NV_KERNEL +#if defined(NV_KERNEL) || defined(USE_HIP) #include "lal_aux_fun1.h" #ifndef _DOUBLE_DOUBLE -texture pos_tex; -texture q_tex; -texture mu_tex; +_texture( pos_tex,float4); +_texture( q_tex,float); +_texture( mu_tex,float4); #else -texture pos_tex; -texture q_tex; -texture mu_tex; +_texture_2d( pos_tex,int4); +_texture( q_tex,int2); +_texture_2d( mu_tex,int4); #endif #else diff --git a/lib/gpu/lal_dipole_long_lj.cu b/lib/gpu/lal_dipole_long_lj.cu index f888dece9b513001b4af9309ebc76e7b30f060d2..3aafba43aa5218cc5fc09cc7e82eead66522c71e 100644 --- a/lib/gpu/lal_dipole_long_lj.cu +++ b/lib/gpu/lal_dipole_long_lj.cu @@ -11,18 +11,18 @@ // // begin : // email : nguyentd@ornl.gov -// ***************************************************************************/ +// *************************************************************************** -#ifdef NV_KERNEL +#if defined(NV_KERNEL) || defined(USE_HIP) #include "lal_aux_fun1.h" #ifndef _DOUBLE_DOUBLE -texture pos_tex; -texture q_tex; -texture mu_tex; +_texture( pos_tex,float4); +_texture( q_tex,float); +_texture( mu_tex,float4); #else -texture pos_tex; -texture q_tex; -texture mu_tex; +_texture_2d( pos_tex,int4); +_texture( q_tex,int2); +_texture_2d( mu_tex,int4); #endif #else diff --git a/lib/gpu/lal_dpd.cu b/lib/gpu/lal_dpd.cu index 462401ad7007bc927fce4f5ca86a8553e21c0f71..a29e04fc7f177cd8cff946b0f70ec8dcf2b556f0 100644 --- a/lib/gpu/lal_dpd.cu +++ b/lib/gpu/lal_dpd.cu @@ -11,16 +11,16 @@ // // begin : Jan 15, 2014 // email : nguyentd@ornl.gov -// ***************************************************************************/ +// *************************************************************************** -#ifdef NV_KERNEL +#if defined(NV_KERNEL) || defined(USE_HIP) #include "lal_aux_fun1.h" #ifndef _DOUBLE_DOUBLE -texture pos_tex; -texture vel_tex; +_texture( pos_tex,float4); +_texture( vel_tex,float4); #else -texture pos_tex; -texture vel_tex; +_texture_2d( pos_tex,int4); +_texture_2d( vel_tex,int4); #endif #else #define pos_tex x_ diff --git a/lib/gpu/lal_eam.cu b/lib/gpu/lal_eam.cu index 13440b7d45a8e1594afffa69f5b53475ad2ca3f7..b22ce7b575a3a8562584580df18dfb5e0d01963d 100644 --- a/lib/gpu/lal_eam.cu +++ b/lib/gpu/lal_eam.cu @@ -11,29 +11,29 @@ // // begin : // email : brownw@ornl.gov nguyentd@ornl.gov -// ***************************************************************************/ +// *************************************************************************** -#ifdef NV_KERNEL +#if defined(NV_KERNEL) || defined(USE_HIP) #include "lal_aux_fun1.h" #ifndef _DOUBLE_DOUBLE -texture pos_tex; -texture fp_tex; -texture rhor_sp1_tex; -texture rhor_sp2_tex; -texture frho_sp1_tex; -texture frho_sp2_tex; -texture z2r_sp1_tex; -texture z2r_sp2_tex; +_texture( pos_tex,float4); +_texture( fp_tex,float); +_texture( rhor_sp1_tex,float4); +_texture( rhor_sp2_tex,float4); +_texture( frho_sp1_tex,float4); +_texture( frho_sp2_tex,float4); +_texture( z2r_sp1_tex,float4); +_texture( z2r_sp2_tex,float4); #else -texture pos_tex; -texture fp_tex; -texture rhor_sp1_tex; -texture rhor_sp2_tex; -texture frho_sp1_tex; -texture frho_sp2_tex; -texture z2r_sp1_tex; -texture z2r_sp2_tex; +_texture( pos_tex,int4); +_texture( fp_tex,int2); +_texture( rhor_sp1_tex,int4); +_texture( rhor_sp2_tex,int4); +_texture( frho_sp1_tex,int4); +_texture( frho_sp2_tex,int4); +_texture( z2r_sp1_tex,int4); +_texture( z2r_sp2_tex,int4); #endif #else diff --git a/lib/gpu/lal_ellipsoid_extra.h b/lib/gpu/lal_ellipsoid_extra.h index 71668f5e0280d4b0359c28a61404e912d1874d3d..e6122c740450143e25b505534a9aecb4c2c877dd 100644 --- a/lib/gpu/lal_ellipsoid_extra.h +++ b/lib/gpu/lal_ellipsoid_extra.h @@ -18,12 +18,14 @@ enum{SPHERE_SPHERE,SPHERE_ELLIPSE,ELLIPSE_SPHERE,ELLIPSE_ELLIPSE}; -#ifdef NV_KERNEL +#if defined(NV_KERNEL) || defined(USE_HIP) #include "lal_aux_fun1.h" #ifndef _DOUBLE_DOUBLE -texture pos_tex, quat_tex; +_texture( pos_tex, float4); +_texture( quat_tex,float4); #else -texture pos_tex, quat_tex; +_texture_2d( pos_tex,int4); +_texture_2d( quat_tex,int4); #endif #else #define pos_tex x_ diff --git a/lib/gpu/lal_ellipsoid_nbor.cu b/lib/gpu/lal_ellipsoid_nbor.cu index cac77f5dd38fb786cd4cbbec0089258a17cedb2b..5ad935ba9b7a72e669973c21855de423acccaebf 100644 --- a/lib/gpu/lal_ellipsoid_nbor.cu +++ b/lib/gpu/lal_ellipsoid_nbor.cu @@ -9,16 +9,15 @@ // This file is part of the LAMMPS Accelerator Library (LAMMPS_AL) // __________________________________________________________________________ // -// begin : // email : brownw@ornl.gov -// ***************************************************************************/ +// *************************************************************************** -#ifdef NV_KERNEL +#if defined(NV_KERNEL) || defined(USE_HIP) #include "lal_preprocessor.h" #ifndef _DOUBLE_DOUBLE -texture pos_tex; +_texture( pos_tex,float4); #else -texture pos_tex; +_texture_2d( pos_tex,int4); #endif #else #define pos_tex x_ @@ -53,8 +52,8 @@ __kernel void kernel_nbor(const __global numtyp4 *restrict x_, int itype=fast_mul(iw,ntypes); int newj=0; for ( ; nbor pos_tex; +_texture( pos_tex,float4); #else -texture pos_tex; +_texture_2d( pos_tex,int4); #endif #else #define pos_tex x_ diff --git a/lib/gpu/lal_gayberne.cu b/lib/gpu/lal_gayberne.cu index cd1ee59fc66c25d4a08e974007dbabf966f757b2..c9d0353ca88c9bfad7fe1fa8ee697e45f62dab28 100644 --- a/lib/gpu/lal_gayberne.cu +++ b/lib/gpu/lal_gayberne.cu @@ -11,9 +11,9 @@ // // begin : // email : brownw@ornl.gov -// ***************************************************************************/ +// *************************************************************************** -#ifdef NV_KERNEL +#if defined(NV_KERNEL) || defined(USE_HIP) #include "lal_ellipsoid_extra.h" #endif diff --git a/lib/gpu/lal_gayberne_lj.cu b/lib/gpu/lal_gayberne_lj.cu index 7925b72784ab4002d3bab679855586d81e354cef..fdf40720aa874b0bb43203c0e002ff0cbe6b0eb6 100644 --- a/lib/gpu/lal_gayberne_lj.cu +++ b/lib/gpu/lal_gayberne_lj.cu @@ -11,9 +11,9 @@ // // begin : // email : brownw@ornl.gov -// ***************************************************************************/ +// *************************************************************************** -#ifdef NV_KERNEL +#if defined(NV_KERNEL) || defined(USE_HIP) #include "lal_ellipsoid_extra.h" #endif diff --git a/lib/gpu/lal_lj.cu b/lib/gpu/lal_lj.cu index 5838ac95cf130c2f67b3e9676704d2878a755f0a..7297a287e6784fd1bf7d627995e9e06a1a4432a6 100644 --- a/lib/gpu/lal_lj.cu +++ b/lib/gpu/lal_lj.cu @@ -11,14 +11,14 @@ // // begin : // email : brownw@ornl.gov -// ***************************************************************************/ +// *************************************************************************** -#ifdef NV_KERNEL +#if defined(NV_KERNEL) || defined(USE_HIP) #include "lal_aux_fun1.h" #ifndef _DOUBLE_DOUBLE -texture pos_tex; +_texture( pos_tex,float4); #else -texture pos_tex; +_texture_2d( pos_tex,int4); #endif #else #define pos_tex x_ diff --git a/lib/gpu/lal_lj96.cu b/lib/gpu/lal_lj96.cu index 8dd63ef9203f206fc452089ceebd13890176c11e..c602e7555eccd34c6f5d867eb0b8c3261e83902e 100644 --- a/lib/gpu/lal_lj96.cu +++ b/lib/gpu/lal_lj96.cu @@ -11,14 +11,14 @@ // // begin : // email : brownw@ornl.gov -// ***************************************************************************/ +// *************************************************************************** -#ifdef NV_KERNEL +#if defined(NV_KERNEL) || defined(USE_HIP) #include "lal_aux_fun1.h" #ifndef _DOUBLE_DOUBLE -texture pos_tex; +_texture( pos_tex,float4); #else -texture pos_tex; +_texture_2d( pos_tex,int4); #endif #else #define pos_tex x_ diff --git a/lib/gpu/lal_lj_class2_long.cu b/lib/gpu/lal_lj_class2_long.cu index 41ceca35d74d0ef8a6ffcfc47ea53116c734bbbd..65f0bf993c7be6e8038c3f643ff30595770740ac 100644 --- a/lib/gpu/lal_lj_class2_long.cu +++ b/lib/gpu/lal_lj_class2_long.cu @@ -11,17 +11,17 @@ // // begin : Mon May 16 2011 // email : brownw@ornl.gov -// ***************************************************************************/ +// *************************************************************************** -#ifdef NV_KERNEL +#if defined(NV_KERNEL) || defined(USE_HIP) #include "lal_aux_fun1.h" #ifndef _DOUBLE_DOUBLE -texture pos_tex; -texture q_tex; +_texture( pos_tex,float4); +_texture( q_tex,float); #else -texture pos_tex; -texture q_tex; +_texture_2d( pos_tex,int4); +_texture( q_tex,int2); #endif #else diff --git a/lib/gpu/lal_lj_coul.cu b/lib/gpu/lal_lj_coul.cu index 5c7f0da46fd066eb7573b4a74345240a0c5c0b37..afbb972942e5da29d769cb3b573325dd03764016 100644 --- a/lib/gpu/lal_lj_coul.cu +++ b/lib/gpu/lal_lj_coul.cu @@ -11,17 +11,17 @@ // // begin : // email : brownw@ornl.gov -// ***************************************************************************/ +// *************************************************************************** -#ifdef NV_KERNEL +#if defined(NV_KERNEL) || defined(USE_HIP) #include "lal_aux_fun1.h" #ifndef _DOUBLE_DOUBLE -texture pos_tex; -texture q_tex; +_texture( pos_tex,float4); +_texture( q_tex,float); #else -texture pos_tex; -texture q_tex; +_texture_2d( pos_tex,int4); +_texture( q_tex,int2); #endif #else diff --git a/lib/gpu/lal_lj_coul_debye.cu b/lib/gpu/lal_lj_coul_debye.cu index 91b105b3da672b608aa11a73306e2c512f2baf98..053fbeccc813ce0451a1906a0f70b74456ffe93f 100644 --- a/lib/gpu/lal_lj_coul_debye.cu +++ b/lib/gpu/lal_lj_coul_debye.cu @@ -11,17 +11,17 @@ // // begin : // email : nguyentd@ornl.gov -// ***************************************************************************/ +// *************************************************************************** -#ifdef NV_KERNEL +#if defined(NV_KERNEL) || defined(USE_HIP) #include "lal_aux_fun1.h" #ifndef _DOUBLE_DOUBLE -texture pos_tex; -texture q_tex; +_texture( pos_tex,float4); +_texture( q_tex,float); #else -texture pos_tex; -texture q_tex; +_texture_2d( pos_tex,int4); +_texture( q_tex,int2); #endif #else diff --git a/lib/gpu/lal_lj_coul_long.cu b/lib/gpu/lal_lj_coul_long.cu index 0e25bb2dbc15a6781bbc6202da87d52163593baf..ac3479421fcf3e0ba8ec949df1fb066edb738a6c 100644 --- a/lib/gpu/lal_lj_coul_long.cu +++ b/lib/gpu/lal_lj_coul_long.cu @@ -11,17 +11,17 @@ // // begin : // email : brownw@ornl.gov -// ***************************************************************************/ +// *************************************************************************** -#ifdef NV_KERNEL +#if defined(NV_KERNEL) || defined(USE_HIP) #include "lal_aux_fun1.h" #ifndef _DOUBLE_DOUBLE -texture pos_tex; -texture q_tex; +_texture( pos_tex,float4); +_texture( q_tex,float); #else -texture pos_tex; -texture q_tex; +_texture_2d( pos_tex,int4); +_texture( q_tex,int2); #endif #else diff --git a/lib/gpu/lal_lj_coul_msm.cu b/lib/gpu/lal_lj_coul_msm.cu index 3f73c6f47d6615f1a57505ada7a81976e8d9f996..a3c36eed8547b44b2ebd0b2202e338f33099533a 100644 --- a/lib/gpu/lal_lj_coul_msm.cu +++ b/lib/gpu/lal_lj_coul_msm.cu @@ -11,21 +11,21 @@ // // begin : // email : nguyentd@ornl.gov -// ***************************************************************************/ +// *************************************************************************** -#ifdef NV_KERNEL +#if defined(NV_KERNEL) || defined(USE_HIP) #include "lal_aux_fun1.h" #ifndef _DOUBLE_DOUBLE -texture pos_tex; -texture q_tex; -texture gcons_tex; -texture dgcons_tex; +_texture( pos_tex,float4); +_texture( q_tex,float); +_texture( gcons_tex,float); +_texture( dgcons_tex,float); #else -texture pos_tex; -texture q_tex; -texture gcons_tex; -texture dgcons_tex; +_texture_2d( pos_tex,int4); +_texture( q_tex,int2); +_texture( gcons_tex,int2); +_texture( dgcons_tex,int2); #endif #else diff --git a/lib/gpu/lal_lj_cubic.cu b/lib/gpu/lal_lj_cubic.cu index 683c6b2aacd2882e623e9adcbfc4748e079d3f18..f93013fe7544320e731600f37166609c3f14d296 100644 --- a/lib/gpu/lal_lj_cubic.cu +++ b/lib/gpu/lal_lj_cubic.cu @@ -11,14 +11,14 @@ // // begin : // email : ndactrung@gmail.com -// ***************************************************************************/ +// *************************************************************************** -#ifdef NV_KERNEL +#if defined(NV_KERNEL) || defined(USE_HIP) #include "lal_aux_fun1.h" #ifndef _DOUBLE_DOUBLE -texture pos_tex; +_texture( pos_tex,float4); #else -texture pos_tex; +_texture_2d( pos_tex,int4); #endif #else #define pos_tex x_ diff --git a/lib/gpu/lal_lj_dsf.cu b/lib/gpu/lal_lj_dsf.cu index 323576fe779dca0a46eb0464f15cfb948a10c475..c1bb197148114a67896546b608a71ffdbbc12af1 100644 --- a/lib/gpu/lal_lj_dsf.cu +++ b/lib/gpu/lal_lj_dsf.cu @@ -11,17 +11,17 @@ // // begin : 7/12/2012 // email : brownw@ornl.gov -// ***************************************************************************/ +// *************************************************************************** -#ifdef NV_KERNEL +#if defined(NV_KERNEL) || defined(USE_HIP) #include "lal_aux_fun1.h" #ifndef _DOUBLE_DOUBLE -texture pos_tex; -texture q_tex; +_texture( pos_tex,float4); +_texture( q_tex,float); #else -texture pos_tex; -texture q_tex; +_texture_2d( pos_tex,int4); +_texture( q_tex,int2); #endif #else diff --git a/lib/gpu/lal_lj_expand.cu b/lib/gpu/lal_lj_expand.cu index 9281ad27bd67b9c1fe9f4332a31791a3cbfb7902..46ed9e2a31ea9624a7efdb8a395168234da36757 100644 --- a/lib/gpu/lal_lj_expand.cu +++ b/lib/gpu/lal_lj_expand.cu @@ -11,15 +11,15 @@ // // begin : // email : ibains@nvidia.com -// ***************************************************************************/ +// *************************************************************************** -#ifdef NV_KERNEL +#if defined(NV_KERNEL) || defined(USE_HIP) #include "lal_aux_fun1.h" #ifndef _DOUBLE_DOUBLE -texture pos_tex; +_texture( pos_tex,float4); #else -texture pos_tex; +_texture_2d( pos_tex,int4); #endif #else diff --git a/lib/gpu/lal_lj_expand_coul_long.cu b/lib/gpu/lal_lj_expand_coul_long.cu index aa8f02be8c521134f80201e873ad5636b33783e4..0f0fe4c2fbf653b521308d54a69d4d3307d8115e 100644 --- a/lib/gpu/lal_lj_expand_coul_long.cu +++ b/lib/gpu/lal_lj_expand_coul_long.cu @@ -11,17 +11,17 @@ // // begin : // email : ndactrung@gmail.com -// ***************************************************************************/ +// *************************************************************************** -#ifdef NV_KERNEL +#if defined(NV_KERNEL) || defined(USE_HIP) #include "lal_aux_fun1.h" #ifndef _DOUBLE_DOUBLE -texture pos_tex; -texture q_tex; +_texture( pos_tex,float4); +_texture( q_tex,float); #else -texture pos_tex; -texture q_tex; +_texture_2d( pos_tex,int4); +_texture( q_tex,int2); #endif #else diff --git a/lib/gpu/lal_lj_gromacs.cu b/lib/gpu/lal_lj_gromacs.cu index 93dc3d945619b7c14f32642fffffbaff608ad3f1..21381bef3062f3ab5308c58d37013d7d7d751cff 100644 --- a/lib/gpu/lal_lj_gromacs.cu +++ b/lib/gpu/lal_lj_gromacs.cu @@ -11,15 +11,15 @@ // // begin : // email : nguyentd@ornl.gov -// ***************************************************************************/ +// *************************************************************************** -#ifdef NV_KERNEL +#if defined(NV_KERNEL) || defined(USE_HIP) #include "lal_aux_fun1.h" #ifndef _DOUBLE_DOUBLE -texture pos_tex; +_texture( pos_tex,float4); #else -texture pos_tex; +_texture_2d( pos_tex,int4); #endif #else diff --git a/lib/gpu/lal_lj_sdk.cu b/lib/gpu/lal_lj_sdk.cu index 01b2cdd18d287b14737984e9167e67df2b5a1487..249b29a4b28567bf9fa9e7803ca2015354091556 100644 --- a/lib/gpu/lal_lj_sdk.cu +++ b/lib/gpu/lal_lj_sdk.cu @@ -11,14 +11,14 @@ // // begin : // email : brownw@ornl.gov -// ***************************************************************************/ +// *************************************************************************** -#ifdef NV_KERNEL +#if defined(NV_KERNEL) || defined(USE_HIP) #include "lal_aux_fun1.h" #ifndef _DOUBLE_DOUBLE -texture pos_tex; +_texture( pos_tex,float4); #else -texture pos_tex; +_texture_2d( pos_tex,int4); #endif #else #define pos_tex x_ diff --git a/lib/gpu/lal_lj_sdk_long.cu b/lib/gpu/lal_lj_sdk_long.cu index 5ff64b22540cd48b7f85a5a3eaf8c0ebefeb9e66..6dd1829c71429ccc86c06232e213c90b54127ce9 100644 --- a/lib/gpu/lal_lj_sdk_long.cu +++ b/lib/gpu/lal_lj_sdk_long.cu @@ -11,17 +11,17 @@ // // begin : // email : brownw@ornl.gov -// ***************************************************************************/ +// *************************************************************************** -#ifdef NV_KERNEL +#if defined(NV_KERNEL) || defined(USE_HIP) #include "lal_aux_fun1.h" #ifndef _DOUBLE_DOUBLE -texture pos_tex; -texture q_tex; +_texture( pos_tex,float4); +_texture( q_tex,float); #else -texture pos_tex; -texture q_tex; +_texture_2d( pos_tex,int4); +_texture( q_tex,int2); #endif #else diff --git a/lib/gpu/lal_lj_tip4p_long.cpp b/lib/gpu/lal_lj_tip4p_long.cpp index f60f162d7be20ae380349c2d5cbb7901a4602a78..5dd082df33bf8b80ca3238b0b2e5d09ee24d34b4 100644 --- a/lib/gpu/lal_lj_tip4p_long.cpp +++ b/lib/gpu/lal_lj_tip4p_long.cpp @@ -23,7 +23,7 @@ const char *lj_tip4p=0; #include "lal_lj_tip4p_long.h" #include -using namespace LAMMPS_AL; +namespace LAMMPS_AL { #define LJTIP4PLongT LJ_TIP4PLong extern Device device; @@ -381,6 +381,5 @@ int** LJTIP4PLongT::compute(const int ago, const int inum_full, } - - template class LJ_TIP4PLong; +} diff --git a/lib/gpu/lal_lj_tip4p_long.cu b/lib/gpu/lal_lj_tip4p_long.cu index c1011964332b644f501f919c7c5f81326d507dbb..66c9a6071e708d3c3e894110e7925cea03a211ed 100644 --- a/lib/gpu/lal_lj_tip4p_long.cu +++ b/lib/gpu/lal_lj_tip4p_long.cu @@ -13,7 +13,7 @@ // email : thevsevak@gmail.com // *************************************************************************** -#ifdef NV_KERNEL +#if defined(NV_KERNEL) || defined(USE_HIP) #include "lal_aux_fun1.h" #ifdef LAMMPS_SMALLBIG @@ -27,11 +27,11 @@ #define tagint int #endif #ifndef _DOUBLE_DOUBLE -texture pos_tex; -texture q_tex; +_texture( pos_tex,float4); +_texture( q_tex,float); #else -texture pos_tex; -texture q_tex; +_texture_2d( pos_tex,int4); +_texture( q_tex,int2); #endif #else diff --git a/lib/gpu/lal_mie.cu b/lib/gpu/lal_mie.cu index 33018566eb2f018cd672711960bd2691ce61d7b3..36ec8a496b157fad3ac7c1d0d7924df427462ce2 100644 --- a/lib/gpu/lal_mie.cu +++ b/lib/gpu/lal_mie.cu @@ -11,14 +11,14 @@ // // begin : // email : nguyentd@ornl.gov -// ***************************************************************************/ +// *************************************************************************** -#ifdef NV_KERNEL +#if defined(NV_KERNEL) || defined(USE_HIP) #include "lal_aux_fun1.h" #ifndef _DOUBLE_DOUBLE -texture pos_tex; +_texture( pos_tex,float4); #else -texture pos_tex; +_texture_2d( pos_tex,int4); #endif #else #define pos_tex x_ diff --git a/lib/gpu/lal_morse.cu b/lib/gpu/lal_morse.cu index 0a14071d1978f4faf81b807983916153ec295419..d6bab1e1313a2a44d33c1e00e962e4fc885d7f45 100644 --- a/lib/gpu/lal_morse.cu +++ b/lib/gpu/lal_morse.cu @@ -11,15 +11,15 @@ // // begin : // email : brownw@ornl.gov -// ***************************************************************************/ +// *************************************************************************** -#ifdef NV_KERNEL +#if defined(NV_KERNEL) || defined(USE_HIP) #include "lal_aux_fun1.h" #ifndef _DOUBLE_DOUBLE -texture pos_tex; +_texture( pos_tex,float4); #else -texture pos_tex; +_texture_2d( pos_tex,int4); #endif #else diff --git a/lib/gpu/lal_neighbor_cpu.cu b/lib/gpu/lal_neighbor_cpu.cu index d005eb9f9738a72ea4ba284cf570df2a93f7e900..f8b32e17467735f366f74688e7f481771ee55a51 100644 --- a/lib/gpu/lal_neighbor_cpu.cu +++ b/lib/gpu/lal_neighbor_cpu.cu @@ -11,9 +11,9 @@ // // begin : // email : brownw@ornl.gov -// ***************************************************************************/ +// *************************************************************************** -#ifdef NV_KERNEL +#if defined(NV_KERNEL) || defined(USE_HIP) #include "lal_preprocessor.h" #endif diff --git a/lib/gpu/lal_neighbor_gpu.cu b/lib/gpu/lal_neighbor_gpu.cu index 83692a24e4c04bfd9d1441c2a49b5da01fc9813e..f1da437c86b26182532852b018d9c19fabeee64c 100644 --- a/lib/gpu/lal_neighbor_gpu.cu +++ b/lib/gpu/lal_neighbor_gpu.cu @@ -12,9 +12,9 @@ // // begin : // email : penwang@nvidia.com, brownw@ornl.gov -// ***************************************************************************/ +// *************************************************************************** -#ifdef NV_KERNEL +#if defined(NV_KERNEL) || defined(USE_HIP) #include "lal_preprocessor.h" #ifdef LAMMPS_SMALLBIG #define tagint int @@ -27,9 +27,9 @@ #define tagint int #endif #ifndef _DOUBLE_DOUBLE -texture pos_tex; +_texture( pos_tex,float4); #else -texture pos_tex; +_texture_2d( pos_tex,int4); #endif __kernel void calc_cell_id(const numtyp4 *restrict pos, diff --git a/lib/gpu/lal_neighbor_shared.h b/lib/gpu/lal_neighbor_shared.h index 834ee8406d34a1fa7d4c709f46b6e6b423a82906..5cfc4e47678359b36818ebca814c948e6a430cd5 100644 --- a/lib/gpu/lal_neighbor_shared.h +++ b/lib/gpu/lal_neighbor_shared.h @@ -24,6 +24,10 @@ using namespace ucl_opencl; #include "geryon/nvc_kernel.h" #include "geryon/nvc_texture.h" using namespace ucl_cudart; +#elif defined(USE_HIP) +#include "geryon/hip_kernel.h" +#include "geryon/hip_texture.h" +using namespace ucl_hip; #else #include "geryon/nvd_kernel.h" #include "geryon/nvd_texture.h" diff --git a/lib/gpu/lal_pppm.cu b/lib/gpu/lal_pppm.cu index 24636b9a9303251f1f8daf31c13c81e2786df429..6cf8aafbd0a9f17f675b0600dd4144af61a17781 100644 --- a/lib/gpu/lal_pppm.cu +++ b/lib/gpu/lal_pppm.cu @@ -11,17 +11,17 @@ // // begin : // email : brownw@ornl.gov -// ***************************************************************************/ +// *************************************************************************** -#ifdef NV_KERNEL +#if defined(NV_KERNEL) || defined(USE_HIP) #include "lal_preprocessor.h" #ifndef _DOUBLE_DOUBLE -texture pos_tex; -texture q_tex; +_texture( pos_tex,float4); +_texture( q_tex,float); #else -texture pos_tex; -texture q_tex; +_texture_2d( pos_tex,int4); +_texture( q_tex,int2); #endif // Allow PPPM to compile without atomics for NVIDIA 1.0 cards, error diff --git a/lib/gpu/lal_pppm.h b/lib/gpu/lal_pppm.h index 65af1575134b3bdaa8f51672a985d9f40d405c58..499aa265d305809bac1e39902c0c26b22b8edb68 100644 --- a/lib/gpu/lal_pppm.h +++ b/lib/gpu/lal_pppm.h @@ -23,6 +23,8 @@ #include "geryon/ocl_texture.h" #elif defined(USE_CUDART) #include "geryon/nvc_texture.h" +#elif defined(USE_HIP) +#include "geryon/hip_texture.h" #else #include "geryon/nvd_texture.h" #endif diff --git a/lib/gpu/lal_precision.h b/lib/gpu/lal_precision.h index d5b1b9b6c05fb7bda08c7acef1e15917a07f2436..7f82ba18aa92d033f5aca5be60fcda278e9c480b 100644 --- a/lib/gpu/lal_precision.h +++ b/lib/gpu/lal_precision.h @@ -24,9 +24,11 @@ struct _lgpu_int2 { int x; int y; }; +#ifndef USE_HIP #ifndef int2 #define int2 _lgpu_int2 #endif +#endif struct _lgpu_float2 { float x; float y; diff --git a/lib/gpu/lal_preprocessor.h b/lib/gpu/lal_preprocessor.h index 566a451c21b83c34090fcc8a8a150fe42d4eef17..cd95355ee40f5951aea8f525011940eacc37096c 100644 --- a/lib/gpu/lal_preprocessor.h +++ b/lib/gpu/lal_preprocessor.h @@ -1,4 +1,4 @@ -// ************************************************************************** +// ************************************************************************** // preprocessor.cu // ------------------- // W. Michael Brown (ORNL) @@ -60,6 +60,150 @@ // //*************************************************************************/ +#define _texture(name, type) texture name +#define _texture_2d(name, type) texture name + +// ------------------------------------------------------------------------- +// HIP DEFINITIONS +// ------------------------------------------------------------------------- + +#ifdef USE_HIP + #include + #ifdef __HIP_PLATFORM_HCC__ + #define mul24(x, y) __mul24(x, y) + #undef _texture + #undef _texture_2d + #define _texture(name, type) __device__ type* name + #define _texture_2d(name, type) __device__ type* name + #endif + #define GLOBAL_ID_X threadIdx.x+mul24(blockIdx.x,blockDim.x) + #define GLOBAL_ID_Y threadIdx.y+mul24(blockIdx.y,blockDim.y) + #define GLOBAL_SIZE_X mul24(gridDim.x,blockDim.x); + #define GLOBAL_SIZE_Y mul24(gridDim.y,blockDim.y); + #define THREAD_ID_X threadIdx.x + #define THREAD_ID_Y threadIdx.y + #define BLOCK_ID_X blockIdx.x + #define BLOCK_ID_Y blockIdx.y + #define BLOCK_SIZE_X blockDim.x + #define BLOCK_SIZE_Y blockDim.y + #define __kernel extern "C" __global__ + #ifdef __local + #undef __local + #endif + #define __local __shared__ + #define __global + #define restrict __restrict__ + #define atom_add atomicAdd + #define ucl_inline static __inline__ __device__ + + #define THREADS_PER_ATOM 4 + #define THREADS_PER_CHARGE 8 + #define BLOCK_NBOR_BUILD 128 + #define BLOCK_PAIR 256 + #define BLOCK_BIO_PAIR 256 + #define BLOCK_ELLIPSE 128 + #define MAX_SHARED_TYPES 11 + + #ifdef _SINGLE_SINGLE + ucl_inline double shfl_xor(double var, int laneMask, int width) { + #ifdef __HIP_PLATFORM_HCC__ + return __shfl_xor(var, laneMask, width); + #else + return __shfl_xor_sync(0xffffffff, var, laneMask, width); + #endif + } + #else + ucl_inline double shfl_xor(double var, int laneMask, int width) { + int2 tmp; + tmp.x = __double2hiint(var); + tmp.y = __double2loint(var); + #ifdef __HIP_PLATFORM_HCC__ + tmp.x = __shfl_xor(tmp.x,laneMask,width); + tmp.y = __shfl_xor(tmp.y,laneMask,width); + #else + tmp.x = __shfl_xor_sync(0xffffffff, tmp.x,laneMask,width); + tmp.y = __shfl_xor_sync(0xffffffff, tmp.y,laneMask,width); + #endif + return __hiloint2double(tmp.x,tmp.y); + } + #endif + + #ifdef __HIP_PLATFORM_HCC__ + #define ARCH 600 + #define WARP_SIZE 64 + #endif + + #ifdef __HIP_PLATFORM_NVCC__ + #define ARCH __CUDA_ARCH__ + #define WARP_SIZE 32 + #endif + + #define fast_mul(X,Y) (X)*(Y) + + #define MEM_THREADS WARP_SIZE + #define PPPM_BLOCK_1D 64 + #define BLOCK_CELL_2D 8 + #define BLOCK_CELL_ID 128 + #define MAX_BIO_SHARED_TYPES 128 + + #ifdef __HIP_PLATFORM_NVCC__ + #ifdef _DOUBLE_DOUBLE + #define fetch4(ans,i,pos_tex) { \ + int4 xy = tex1Dfetch(pos_tex,i*2); \ + int4 zt = tex1Dfetch(pos_tex,i*2+1); \ + ans.x=__hiloint2double(xy.y, xy.x); \ + ans.y=__hiloint2double(xy.w, xy.z); \ + ans.z=__hiloint2double(zt.y, zt.x); \ + ans.w=__hiloint2double(zt.w, zt.z); \ + } + #define fetch(ans,i,q_tex) { \ + int2 qt = tex1Dfetch(q_tex,i); \ + ans=__hiloint2double(qt.y, qt.x); \ + } + #else + #define fetch4(ans,i,pos_tex) ans=tex1Dfetch(pos_tex, i); + #define fetch(ans,i,q_tex) ans=tex1Dfetch(q_tex,i); + #endif + #else + #ifdef _DOUBLE_DOUBLE + #define fetch4(ans,i,pos_tex) (ans=*(((double4*)pos_tex) + i)) + #define fetch(ans,i,q_tex) (ans=*(((double *) q_tex) + i)) + #else + #define fetch4(ans,i,pos_tex) (ans=*(((float4*)pos_tex) + i)) + #define fetch(ans,i,q_tex) (ans=*(((float *) q_tex) + i)) + #endif + #endif + + #ifdef _DOUBLE_DOUBLE + #define ucl_exp exp + #define ucl_powr pow + #define ucl_atan atan + #define ucl_cbrt cbrt + #define ucl_ceil ceil + #define ucl_abs fabs + #define ucl_rsqrt rsqrt + #define ucl_sqrt sqrt + #define ucl_recip(x) ((numtyp)1.0/(x)) + + #else + #define ucl_atan atanf + #define ucl_cbrt cbrtf + #define ucl_ceil ceilf + #define ucl_abs fabsf + #define ucl_recip(x) ((numtyp)1.0/(x)) + #define ucl_rsqrt rsqrtf + #define ucl_sqrt sqrtf + + #ifdef NO_HARDWARE_TRANSCENDENTALS + #define ucl_exp expf + #define ucl_powr powf + #else + #define ucl_exp __expf + #define ucl_powr __powf + #endif + #endif +#endif + // ------------------------------------------------------------------------- // CUDA DEFINITIONS // ------------------------------------------------------------------------- diff --git a/lib/gpu/lal_re_squared.cu b/lib/gpu/lal_re_squared.cu index e238734074849da8db2760635571e74a25835915..8852a4691311150750ad72f8449ac24dcc925516 100644 --- a/lib/gpu/lal_re_squared.cu +++ b/lib/gpu/lal_re_squared.cu @@ -11,9 +11,9 @@ // // begin : Fri May 06 2011 // email : brownw@ornl.gov -// ***************************************************************************/ +// *************************************************************************** -#ifdef NV_KERNEL +#if defined(NV_KERNEL) || defined(USE_HIP) #include "lal_ellipsoid_extra.h" #endif diff --git a/lib/gpu/lal_re_squared_lj.cu b/lib/gpu/lal_re_squared_lj.cu index d69dae2461ff699646bd5760f20d36674b1f9ad6..112a4db8d9bee7a7c077a6ceac221c07493c90cf 100644 --- a/lib/gpu/lal_re_squared_lj.cu +++ b/lib/gpu/lal_re_squared_lj.cu @@ -11,9 +11,9 @@ // // begin : Fri May 06 2011 // email : brownw@ornl.gov -// ***************************************************************************/ +// *************************************************************************** -#ifdef NV_KERNEL +#if defined(NV_KERNEL) || defined(USE_HIP) #include "lal_ellipsoid_extra.h" #endif diff --git a/lib/gpu/lal_soft.cu b/lib/gpu/lal_soft.cu index 831b986725a135355158ce439308a6c6abaa1284..5df34e7b1de89cfb1bd1eccea1aeee375c516f1c 100644 --- a/lib/gpu/lal_soft.cu +++ b/lib/gpu/lal_soft.cu @@ -11,14 +11,14 @@ // // begin : // email : nguyentd@ornl.gov -// ***************************************************************************/ +// *************************************************************************** -#ifdef NV_KERNEL +#if defined(NV_KERNEL) || defined(USE_HIP) #include "lal_aux_fun1.h" #ifndef _DOUBLE_DOUBLE -texture pos_tex; +_texture( pos_tex,float4); #else -texture pos_tex; +_texture_2d( pos_tex,int4); #endif #else #define pos_tex x_ diff --git a/lib/gpu/lal_sw.cu b/lib/gpu/lal_sw.cu index 3b6de5a683d603e74f53b8c2364942fd0f83f2cf..6076c55283410c2a9e9a3ab28903acb89b44e5b5 100644 --- a/lib/gpu/lal_sw.cu +++ b/lib/gpu/lal_sw.cu @@ -11,21 +11,21 @@ // // begin : Tue March 26, 2013 // email : brownw@ornl.gov -// ***************************************************************************/ +// *************************************************************************** -#ifdef NV_KERNEL +#if defined(NV_KERNEL) || defined(USE_HIP) #include "lal_aux_fun1.h" #ifndef _DOUBLE_DOUBLE -texture pos_tex; -texture sw1_tex; -texture sw2_tex; -texture sw3_tex; +_texture( pos_tex,float4); +_texture( sw1_tex,float4); +_texture( sw2_tex,float4); +_texture( sw3_tex,float4); #else -texture pos_tex; -texture sw1_tex; -texture sw2_tex; -texture sw3_tex; +_texture_2d( pos_tex,int4); +_texture( sw1_tex,int4); +_texture( sw2_tex,int4); +_texture( sw3_tex,int4); #endif #else diff --git a/lib/gpu/lal_table.cu b/lib/gpu/lal_table.cu index 971b56d96e5b4955acd687f60a1110e1fa645552..0cf0de2af051717e25d2092dc466213937149936 100644 --- a/lib/gpu/lal_table.cu +++ b/lib/gpu/lal_table.cu @@ -11,14 +11,14 @@ // // begin : // email : nguyentd@ornl.gov -// ***************************************************************************/ +// *************************************************************************** -#ifdef NV_KERNEL +#if defined(NV_KERNEL) || defined(USE_HIP) #include "lal_aux_fun1.h" #ifndef _DOUBLE_DOUBLE -texture pos_tex; +_texture( pos_tex,float4); #else -texture pos_tex; +_texture_2d( pos_tex,int4); #endif #else #define pos_tex x_ diff --git a/lib/gpu/lal_tersoff.cu b/lib/gpu/lal_tersoff.cu index 2e29ca721b00d7c4a8563bce6f997c5d3a055ad7..2e68215ff86015936817248d18294ca14f0eb8db 100644 --- a/lib/gpu/lal_tersoff.cu +++ b/lib/gpu/lal_tersoff.cu @@ -11,25 +11,25 @@ // // begin : Thu April 17, 2014 // email : ndactrung@gmail.com -// ***************************************************************************/ +// *************************************************************************** -#ifdef NV_KERNEL +#if defined(NV_KERNEL) || defined(USE_HIP) #include "lal_tersoff_extra.h" #ifndef _DOUBLE_DOUBLE -texture pos_tex; -texture ts1_tex; -texture ts2_tex; -texture ts3_tex; -texture ts4_tex; -texture ts5_tex; +_texture( pos_tex,float4); +_texture( ts1_tex,float4); +_texture( ts2_tex,float4); +_texture( ts3_tex,float4); +_texture( ts4_tex,float4); +_texture( ts5_tex,float4); #else -texture pos_tex; -texture ts1_tex; -texture ts2_tex; -texture ts3_tex; -texture ts4_tex; -texture ts5_tex; +_texture_2d( pos_tex,int4); +_texture( ts1_tex,int4); +_texture( ts2_tex,int4); +_texture( ts3_tex,int4); +_texture( ts4_tex,int4); +_texture( ts5_tex,int4); #endif #else diff --git a/lib/gpu/lal_tersoff_extra.h b/lib/gpu/lal_tersoff_extra.h index 47d16678f088be320463ca4f6dca4299fee1dd82..7ee29751b7014d7c34c5a0bde286e3aa1b3b9755 100644 --- a/lib/gpu/lal_tersoff_extra.h +++ b/lib/gpu/lal_tersoff_extra.h @@ -16,7 +16,7 @@ #ifndef LAL_TERSOFF_EXTRA_H #define LAL_TERSOFF_EXTRA_H -#ifdef NV_KERNEL +#if defined(NV_KERNEL) || defined(USE_HIP) #include "lal_aux_fun1.h" #else #endif diff --git a/lib/gpu/lal_tersoff_mod.cu b/lib/gpu/lal_tersoff_mod.cu index c85f5e08ca4821b84bf607bdbf8b0bd9ad74954c..c26c17969f3c3cbbb12b7da4257675016baa9f74 100644 --- a/lib/gpu/lal_tersoff_mod.cu +++ b/lib/gpu/lal_tersoff_mod.cu @@ -11,25 +11,25 @@ // // begin : // email : ndactrung@gmail.com -// ***************************************************************************/ +// *************************************************************************** -#ifdef NV_KERNEL +#if defined(NV_KERNEL) || defined(USE_HIP) #include "lal_tersoff_mod_extra.h" #ifndef _DOUBLE_DOUBLE -texture pos_tex; -texture ts1_tex; -texture ts2_tex; -texture ts3_tex; -texture ts4_tex; -texture ts5_tex; +_texture( pos_tex,float4); +_texture( ts1_tex,float4); +_texture( ts2_tex,float4); +_texture( ts3_tex,float4); +_texture( ts4_tex,float4); +_texture( ts5_tex,float4); #else -texture pos_tex; -texture ts1_tex; -texture ts2_tex; -texture ts3_tex; -texture ts4_tex; -texture ts5_tex; +_texture_2d( pos_tex,int4); +_texture( ts1_tex,int4); +_texture( ts2_tex,int4); +_texture( ts3_tex,int4); +_texture( ts4_tex,int4); +_texture( ts5_tex,int4); #endif #else diff --git a/lib/gpu/lal_tersoff_mod_extra.h b/lib/gpu/lal_tersoff_mod_extra.h index a130d98488d8a281233d1587c7a123a3889b5816..fb658cb0da1d3e1167fdc7f416ef944ff3ccc953 100644 --- a/lib/gpu/lal_tersoff_mod_extra.h +++ b/lib/gpu/lal_tersoff_mod_extra.h @@ -16,7 +16,7 @@ #ifndef LAL_TERSOFF_MOD_EXTRA_H #define LAL_TERSOFF_MOD_EXTRA_H -#ifdef NV_KERNEL +#if defined(NV_KERNEL) || defined(USE_HIP) #include "lal_aux_fun1.h" #else #endif diff --git a/lib/gpu/lal_tersoff_zbl.cu b/lib/gpu/lal_tersoff_zbl.cu index b574a529c019437c6275a50b8c80d88121a140f2..b97f9247d0fcf35341c3a057e9422b728582c3ef 100644 --- a/lib/gpu/lal_tersoff_zbl.cu +++ b/lib/gpu/lal_tersoff_zbl.cu @@ -11,27 +11,27 @@ // // begin : // email : ndactrung@gmail.com -// ***************************************************************************/ +// *************************************************************************** -#ifdef NV_KERNEL +#if defined(NV_KERNEL) || defined(USE_HIP) #include "lal_tersoff_zbl_extra.h" #ifndef _DOUBLE_DOUBLE -texture pos_tex; -texture ts1_tex; -texture ts2_tex; -texture ts3_tex; -texture ts4_tex; -texture ts5_tex; -texture ts6_tex; +_texture( pos_tex,float4); +_texture( ts1_tex,float4); +_texture( ts2_tex,float4); +_texture( ts3_tex,float4); +_texture( ts4_tex,float4); +_texture( ts5_tex,float4); +_texture( ts6_tex,float4); #else -texture pos_tex; -texture ts1_tex; -texture ts2_tex; -texture ts3_tex; -texture ts4_tex; -texture ts5_tex; -texture ts6_tex; +_texture_2d( pos_tex,int4); +_texture( ts1_tex,int4); +_texture( ts2_tex,int4); +_texture( ts3_tex,int4); +_texture( ts4_tex,int4); +_texture( ts5_tex,int4); +_texture( ts6_tex,int4); #endif #else diff --git a/lib/gpu/lal_tersoff_zbl_extra.h b/lib/gpu/lal_tersoff_zbl_extra.h index 32c05a3716b19719e33922391d81608d639cb89a..9e5bcb10b44a8e320578949a77bff891eabbe691 100644 --- a/lib/gpu/lal_tersoff_zbl_extra.h +++ b/lib/gpu/lal_tersoff_zbl_extra.h @@ -16,7 +16,7 @@ #ifndef LAL_TERSOFF_ZBL_EXTRA_H #define LAL_TERSOFF_ZBL_EXTRA_H -#ifdef NV_KERNEL +#if defined(NV_KERNEL) || defined(USE_HIP) #include "lal_aux_fun1.h" #else #endif diff --git a/lib/gpu/lal_ufm.cu b/lib/gpu/lal_ufm.cu index 51c4df3b5b9cfac3516ece739aebb0e7b3afd123..03d1e85bdf8c533a9f4e25a523721c035be992b0 100644 --- a/lib/gpu/lal_ufm.cu +++ b/lib/gpu/lal_ufm.cu @@ -10,17 +10,17 @@ This file is part of the LAMMPS Accelerator Library (LAMMPS_AL) __________________________________________________________________________ - begin : + begin : email : pl.rodolfo@gmail.com dekoning@ifi.unicamp.br ***************************************************************************/ -#ifdef NV_KERNEL +#if defined(NV_KERNEL) || defined(USE_HIP) #include "lal_aux_fun1.h" #ifndef _DOUBLE_DOUBLE -texture pos_tex; +_texture( pos_tex,float4); #else -texture pos_tex; +_texture_2d( pos_tex,int4); #endif #else #define pos_tex x_ @@ -31,10 +31,10 @@ __kernel void k_ufm(const __global numtyp4 *restrict x_, const __global numtyp4 *restrict uf3, const int lj_types, const __global numtyp *restrict sp_lj, - const __global int * dev_nbor, - const __global int * dev_packed, - __global acctyp4 *restrict ans, - __global acctyp *restrict engv, + const __global int * dev_nbor, + const __global int * dev_packed, + __global acctyp4 *restrict ans, + __global acctyp *restrict engv, const int eflag, const int vflag, const int inum, const int nbor_pitch, const int t_per_atom) { int tid, ii, offset; @@ -46,19 +46,19 @@ __kernel void k_ufm(const __global numtyp4 *restrict x_, acctyp virial[6]; for (int i=0; i<6; i++) virial[i]=(acctyp)0; - + if (ii0) uf3[tid]=uf3_in[tid]; } - + acctyp energy=(acctyp)0; acctyp4 f; f.x=(acctyp)0; f.y=(acctyp)0; f.z=(acctyp)0; @@ -132,7 +132,7 @@ __kernel void k_ufm_fast(const __global numtyp4 *restrict x_, virial[i]=(acctyp)0; __syncthreads(); - + if (ii pos_tex; -texture param1_tex; -texture param2_tex; -texture param3_tex; -texture param4_tex; -texture param5_tex; +_texture( pos_tex,float4); +_texture( param1_tex,float4); +_texture( param2_tex,float4); +_texture( param3_tex,float4); +_texture( param4_tex,float4); +_texture( param5_tex,float4); #else -texture pos_tex; -texture param1_tex; -texture param2_tex; -texture param3_tex; -texture param4_tex; -texture param5_tex; +_texture_2d( pos_tex,int4); +_texture( param1_tex,int4); +_texture( param2_tex,int4); +_texture( param3_tex,int4); +_texture( param4_tex,int4); +_texture( param5_tex,int4); #endif #else @@ -290,7 +290,7 @@ __kernel void k_vashishta(const __global numtyp4 *restrict x_, if (eflag>0) energy += (param3_bigh*reta+vc2-vc3-param3_bigw*r6inv-r*param3_dvrc+param3_c0); - + if (vflag>0) { virial[0] += delx*delx*force; virial[1] += dely*dely*force; @@ -471,13 +471,13 @@ __kernel void k_vashishta_three_center(const __global numtyp4 *restrict x_, numtyp rsq1 = delr1x*delr1x+delr1y*delr1y+delr1z*delr1z; int ijparam=elem2param[itype*nelements*nelements+jtype*nelements+jtype]; - + numtyp4 param4_ijparam; fetch4(param4_ijparam,ijparam,param4_tex); param_r0sq_ij=param4_ijparam.x; if (rsq1 > param_r0sq_ij) continue; // still keep this for neigh no and tpa > 1 param_gamma_ij=param4_ijparam.y; param_r0_ij=param4_ijparam.w; - + int nbor_k,k_end; if (dev_packed==dev_nbor) { nbor_k=nborj_start-offset_j+offset_k; @@ -619,7 +619,7 @@ __kernel void k_vashishta_three_end(const __global numtyp4 *restrict x_, param_gamma_ij=param4_ijparam.y; param_r0_ij = param4_ijparam.w; - + int nbor_k,numk; if (dev_nbor==dev_packed) { if (gpu_nbor) nbor_k=j+nbor_pitch; @@ -665,14 +665,14 @@ __kernel void k_vashishta_three_end(const __global numtyp4 *restrict x_, if (rsq2 < param_r0sq_ik) { param_gamma_ik=param4_ikparam.y; param_r0_ik=param4_ikparam.w; - + int ijkparam=elem2param[jtype*nelements*nelements+itype*nelements+ktype]; //jik numtyp4 param5_ijkparam; fetch4(param5_ijkparam,ijkparam,param5_tex); param_bigc_ijk=param5_ijkparam.x; param_costheta_ijk=param5_ijkparam.y; param_bigb_ijk=param5_ijkparam.z; param_big2b_ijk=param5_ijkparam.w; - + numtyp fjx, fjy, fjz; //if (evatom==0) { threebody_half(delr1x,delr1y,delr1z); @@ -774,7 +774,7 @@ __kernel void k_vashishta_three_end_vatom(const __global numtyp4 *restrict x_, param_gamma_ij=param4_ijparam.y; param_r0_ij=param4_ijparam.w; - + int nbor_k,numk; if (dev_nbor==dev_packed) { if (gpu_nbor) nbor_k=j+nbor_pitch; @@ -827,7 +827,7 @@ __kernel void k_vashishta_three_end_vatom(const __global numtyp4 *restrict x_, param_costheta_ijk=param5_ijkparam.y; param_bigb_ijk=param5_ijkparam.z; param_big2b_ijk=param5_ijkparam.w; - + numtyp fjx, fjy, fjz, fkx, fky, fkz; threebody(delr1x,delr1y,delr1z,eflag,energy); diff --git a/lib/gpu/lal_yukawa.cu b/lib/gpu/lal_yukawa.cu index a8d637ec97e7d92b95726175a21f17b4d2e58b63..62bc013dc61a44e13c02861665b3135f69e5cc93 100644 --- a/lib/gpu/lal_yukawa.cu +++ b/lib/gpu/lal_yukawa.cu @@ -11,14 +11,14 @@ // // begin : // email : nguyentd@ornl.gov -// ***************************************************************************/ +// *************************************************************************** -#ifdef NV_KERNEL +#if defined(NV_KERNEL) || defined(USE_HIP) #include "lal_aux_fun1.h" #ifndef _DOUBLE_DOUBLE -texture pos_tex; +_texture( pos_tex,float4); #else -texture pos_tex; +_texture_2d( pos_tex,int4); #endif #else #define pos_tex x_ diff --git a/lib/gpu/lal_yukawa_colloid.cu b/lib/gpu/lal_yukawa_colloid.cu index a3cbbbc11ccecd22eb596f1d591a09d4f12d7c38..30b458fec780fd9177f80c003d4b630663e904df 100644 --- a/lib/gpu/lal_yukawa_colloid.cu +++ b/lib/gpu/lal_yukawa_colloid.cu @@ -11,17 +11,17 @@ // // begin : // email : nguyentd@ornl.gov -// ***************************************************************************/ +// *************************************************************************** -#ifdef NV_KERNEL +#if defined(NV_KERNEL) || defined(USE_HIP) #include "lal_aux_fun1.h" #ifndef _DOUBLE_DOUBLE -texture pos_tex; -texture rad_tex; +_texture( pos_tex,float4); +_texture( rad_tex,float); #else -texture pos_tex; -texture rad_tex; +_texture_2d( pos_tex,int4); +_texture( rad_tex,int2); #endif #else diff --git a/lib/gpu/lal_zbl.cu b/lib/gpu/lal_zbl.cu index 33c850e1347f4062edb6de2b8f60a0f90d405680..2539c0ddd7e069503a4b1071631e51503d344bb3 100644 --- a/lib/gpu/lal_zbl.cu +++ b/lib/gpu/lal_zbl.cu @@ -11,14 +11,14 @@ // // begin : // email : ndactrung@gmail.com -// ***************************************************************************/ +// *************************************************************************** -#ifdef NV_KERNEL +#if defined(NV_KERNEL) || defined(USE_HIP) #include "lal_aux_fun1.h" #ifndef _DOUBLE_DOUBLE -texture pos_tex; +_texture( pos_tex,float4); #else -texture pos_tex; +_texture_2d( pos_tex,int4); #endif #else #define pos_tex x_ diff --git a/lib/kokkos/BUILD.md b/lib/kokkos/BUILD.md index 84a1bc3b3788c2ba99c7b2ab4c992108737188db..63dbf7fdb229e37ecf35c0ca56709e80a2f2391d 100644 --- a/lib/kokkos/BUILD.md +++ b/lib/kokkos/BUILD.md @@ -40,6 +40,13 @@ cmake ${srcdir} \ ```` which activates the OpenMP backend. All of the options controlling device backends, options, architectures, and third-party libraries (TPLs) are given below. +## Platform-specific Problems + +### Cray + +* The Cray compiler wrappers do static linking by default. This seems to break the Kokkos build. You will likely need to set the environment variable `CRAYPE_LINK_TYPE=dynamic` in order to link correctly. Kokkos warns during configure if this is missing. +* The Cray compiler identifies to CMake as Clang, but it sometimes has its own flags that differ from Clang. We try to include all exceptions, but flag errors may occur in which a Clang-specific flag is passed that the Cray compiler does not recognize. + ## Spack An alternative to manually building with the CMake is to use the Spack package manager. To do so, download the `kokkos-spack` git repo and add to the package list: @@ -63,6 +70,7 @@ For a complete list of Kokkos options, run: ```` spack info kokkos ```` +More details can be found in the kokkos-spack repository [README](https://github.com/kokkos/kokkos-spack/blob/master/README.md). #### Spack Development Spack currently installs packages to a location determined by a unique hash. This hash name is not really "human readable". @@ -73,32 +81,8 @@ spack find -p kokkos ... ```` where `...` is the unique spec identifying the particular Kokkos configuration and version. -A better way to use Spack for doing Kokkos development is the DIY feature of Spack. -If you wish to develop Kokkos itself, go to the Kokkos source folder: -```` -spack diy -u cmake kokkos@diy ... -```` -where `...` is a Spack spec identifying the exact Kokkos configuration. -This then creates a `spack-build` directory where you can run `make`. - -If doing development on a downstream project, you can do almost exactly the same thing. -```` -spack diy -u cmake ${myproject}@${myversion} ... ^kokkos... -```` -where the `...` are the specs for your project and the desired Kokkos configuration. -Again, a `spack-build` directory will be created where you can run `make`. - -Spack has a few idiosyncracies that make building outside of Spack annoying related to Spack forcing use of a compiler wrapper. This can be worked around by having a `-DSpack_WORKAROUND=On` given your CMake. Then add the block of code to your CMakeLists.txt: - -```` -if (Spack_WORKAROUND) - set(SPACK_CXX $ENV{SPACK_CXX}) - if(SPACK_CXX) - set(CMAKE_CXX_COMPILER ${SPACK_CXX} CACHE STRING "the C++ compiler" FORCE) - set(ENV{CXX} ${SPACK_CXX}) - endif() -endif() -```` +A better way to use Spack for doing Kokkos development is the dev-build feature of Spack. +For dev-build details, consult the kokkos-spack repository [README](https://github.com/kokkos/kokkos-spack/blob/master/README.md). # Kokkos Keyword Listing @@ -157,6 +141,9 @@ Options can be enabled by specifying `-DKokkos_ENABLE_X`. * Kokkos_ENABLE_DEPRECATED_CODE * Whether to enable deprecated code * BOOL Default: OFF +* Kokkos_ENABLE_EXAMPLES + * Whether to enable building examples + * BOOL Default: OFF * Kokkos_ENABLE_HPX_ASYNC_DISPATCH * Whether HPX supports asynchronous dispatch * BOOL Default: OFF diff --git a/lib/kokkos/CHANGELOG.md b/lib/kokkos/CHANGELOG.md index 1d54b4c21defdcf9b19579aeef28bdfad119c94f..9595b03ff93066631fc1c8d32bb7ccaab04f4980 100644 --- a/lib/kokkos/CHANGELOG.md +++ b/lib/kokkos/CHANGELOG.md @@ -1,5 +1,72 @@ # Change Log +## [3.1.1](https://github.com/kokkos/kokkos/tree/3.1.1) (2020-04-14) +[Full Changelog](https://github.com/kokkos/kokkos/compare/3.1.00...3.1.1) + +**Fixed bugs:** + +- Fix complex_double misalignment in reduce, clang+CUDA [\#2989](https://github.com/kokkos/kokkos/issues/2989) +- Fix compilation fails when profiling disabled and CUDA enabled [\#3001](https://github.com/kokkos/kokkos/issues/3001) +- Fix cuda reduction of non-trivial scalars of size 4 [\#2990](https://github.com/kokkos/kokkos/issues/2990) +- Configure and install version file when building in Trilinos [\#2957](https://github.com/kokkos/kokkos/pull/2957) +- Fix OpenMPTarget build missing include and namespace [\#3000](https://github.com/kokkos/kokkos/issues/3000) +- fix typo in KOKKOS_SET_EXE_PROPERTY() [\#2959](https://github.com/kokkos/kokkos/issues/2959) +- Fix non-zero span subviews of zero sized subviews [\#2979](https://github.com/kokkos/kokkos/issues/2979) + +## [3.1.00](https://github.com/kokkos/kokkos/tree/3.1.00) (2020-04-14) +[Full Changelog](https://github.com/kokkos/kokkos/compare/3.0.00...3.1.00) + +**Features:** + +- HIP Support for AMD +- OpenMPTarget Support with clang +- Windows VS19 (Serial) Support [\#1533](https://github.com/kokkos/kokkos/issues/1533) + +**Implemented enhancements:** + +- generate\_makefile.bash should allow tests to be disabled [\#2886](https://github.com/kokkos/kokkos/issues/2886) +- clang/7+cuda/9 build -Werror-unused parameter error in nightly test [\#2884](https://github.com/kokkos/kokkos/issues/2884) +- ScatterView memory space is not user settable [\#2826](https://github.com/kokkos/kokkos/issues/2826) +- clang/8+cuda/10.0 build error with c++17 [\#2809](https://github.com/kokkos/kokkos/issues/2809) +- warnings.... [\#2805](https://github.com/kokkos/kokkos/issues/2805) +- Kokkos version in cpp define [\#2787](https://github.com/kokkos/kokkos/issues/2787) +- Remove Defunct QThreads Backend [\#2751](https://github.com/kokkos/kokkos/issues/2751) +- Improve Kokkos::fence behavior with multiple execution spaces [\#2659](https://github.com/kokkos/kokkos/issues/2659) +- polylithic\(?\) initialization of Kokkos [\#2658](https://github.com/kokkos/kokkos/issues/2658) +- Unnecessary\(?\) check for host execution space initialization from Cuda initialization [\#2652](https://github.com/kokkos/kokkos/issues/2652) +- Kokkos error reporting failures with CUDA GPUs in exclusive mode [\#2471](https://github.com/kokkos/kokkos/issues/2471) +- atomicMax equivalent \(and other atomics\) [\#2401](https://github.com/kokkos/kokkos/issues/2401) +- Fix alignment for Kokkos::complex [\#2255](https://github.com/kokkos/kokkos/issues/2255) +- Warnings with Cuda 10.1 [\#2206](https://github.com/kokkos/kokkos/issues/2206) +- dual view with Kokkos::ViewAllocateWithoutInitializing [\#2188](https://github.com/kokkos/kokkos/issues/2188) +- Check error code from cudaOccupancyMaxActiveBlocksPerMultiprocessor [\#2172](https://github.com/kokkos/kokkos/issues/2172) +- Add non-member Kokkos::resize/realloc for DualView [\#2170](https://github.com/kokkos/kokkos/issues/2170) +- Construct DualView without initialization [\#2046](https://github.com/kokkos/kokkos/issues/2046) +- Expose is\_assignable to determine if one view can be assigned to another [\#1936](https://github.com/kokkos/kokkos/issues/1936) +- profiling label [\#1935](https://github.com/kokkos/kokkos/issues/1935) +- team\_broadcast of bool failed on CUDA backend [\#1908](https://github.com/kokkos/kokkos/issues/1908) +- View static\_extent [\#660](https://github.com/kokkos/kokkos/issues/660) +- Misleading Kokkos::Cuda::initialize ERROR message when compiled for wrong GPU architecture [\#1944](https://github.com/kokkos/kokkos/issues/1944) +- Cryptic Error When Malloc Fails [\#2164](https://github.com/kokkos/kokkos/issues/2164) +- Drop support for intermediate standards in CMake [\#2336](https://github.com/kokkos/kokkos/issues/2336) + +**Fixed bugs:** + +- DualView sync\_device with length zero creates cuda errors [\#2946](https://github.com/kokkos/kokkos/issues/2946) +- building with nvcc and clang \(or clang based XL\) as host compiler: "Kokkos::atomic\_fetch\_min\(volatile int \*, int\)" has already been defined [\#2903](https://github.com/kokkos/kokkos/issues/2903) +- Cuda 9.1,10.1 debug builds failing due to -Werror=unused-parameter [\#2880](https://github.com/kokkos/kokkos/issues/2880) +- clang -Werror: Kokkos\_FixedBufferMemoryPool.hpp:140:28: error: unused parameter 'alloc\_size' [\#2869](https://github.com/kokkos/kokkos/issues/2869) +- intel/16.0.1, intel/17.0.1 nightly build failures with debugging enabled [\#2867](https://github.com/kokkos/kokkos/issues/2867) +- intel/16.0.1 debug build errors [\#2863](https://github.com/kokkos/kokkos/issues/2863) +- xl/16.1.1 with cpp14, openmp build, nightly test failures [\#2856](https://github.com/kokkos/kokkos/issues/2856) +- Intel nightly test failures: team\_vector [\#2852](https://github.com/kokkos/kokkos/issues/2852) +- Kokkos Views with intmax/2\_ROOT variables") CMAKE_POLICY(SET CMP0074 NEW) ENDIF() -# Load either the real TriBITS or a TriBITS wrapper +# Load either the real TriBITS or a TriBITS wrapper # for certain utility functions that are universal (like GLOBAL_SET) INCLUDE(${KOKKOS_SRC_PATH}/cmake/fake_tribits.cmake) @@ -118,18 +129,14 @@ ENDIF() # These are the variables we will append to as we go # I really wish these were regular variables # but scoping issues can make it difficult -GLOBAL_RESET(KOKKOS_COMPILE_OPTIONS) -GLOBAL_RESET(KOKKOS_LINK_OPTIONS) -GLOBAL_RESET(KOKKOS_CUDA_OPTIONS) -GLOBAL_RESET(KOKKOS_CUDAFE_OPTIONS) -GLOBAL_RESET(KOKKOS_XCOMPILER_OPTIONS) +GLOBAL_SET(KOKKOS_COMPILE_OPTIONS) +GLOBAL_SET(KOKKOS_LINK_OPTIONS) +GLOBAL_SET(KOKKOS_CUDA_OPTIONS) +GLOBAL_SET(KOKKOS_CUDAFE_OPTIONS) +GLOBAL_SET(KOKKOS_XCOMPILER_OPTIONS) # We need to append text here for making sure TPLs # we import are available for an installed Kokkos -GLOBAL_RESET(KOKKOS_TPL_EXPORTS) -# We need these for controlling the exact -std flag -GLOBAL_RESET(KOKKOS_DONT_ALLOW_EXTENSIONS) -GLOBAL_RESET(KOKKOS_USE_CXX_EXTENSIONS) -GLOBAL_RESET(KOKKOS_CXX_STANDARD_FEATURE) +GLOBAL_SET(KOKKOS_TPL_EXPORTS) # Include a set of Kokkos-specific wrapper functions that # will either call raw CMake or TriBITS @@ -137,6 +144,9 @@ GLOBAL_RESET(KOKKOS_CXX_STANDARD_FEATURE) INCLUDE(${KOKKOS_SRC_PATH}/cmake/kokkos_tribits.cmake) +# Check the environment and set certain variables +# to allow platform-specific checks +INCLUDE(${KOKKOS_SRC_PATH}/cmake/kokkos_check_env.cmake) # The build environment setup goes in the following steps # 1) Check all the enable options. This includes checking Kokkos_DEVICES # 2) Check the compiler ID (type and version) @@ -187,14 +197,21 @@ IF (KOKKOS_HAS_TRILINOS) # Because Tribits doesn't use lists, it uses spaces for the list of CXX flags # we have to match the annoying behavior STRING(REPLACE ";" " " KOKKOSCORE_COMPILE_OPTIONS "${KOKKOS_COMPILE_OPTIONS}") - STRING(REPLACE ";" " " KOKKOSCORE_CUDA_OPTIONS "${KOKKOS_CUDA_OPTIONS}") - FOREACH(CUDAFE_FLAG ${KOKKOS_CUDAFE_OPTIONS}) - SET(KOKKOSCORE_CUDAFE_OPTIONS "${KOKKOSCORE_CUDAFE_OPTIONS} -Xcudafe ${CUDAFE_FLAG}") - ENDFOREACH() + LIST(APPEND KOKKOS_ALL_COMPILE_OPTIONS ${KOKKOS_COMPILE_OPTIONS}) + LIST(APPEND KOKKOS_ALL_COMPILE_OPTIONS ${KOKKOS_CUDA_OPTIONS}) FOREACH(XCOMP_FLAG ${KOKKOS_XCOMPILER_OPTIONS}) SET(KOKKOSCORE_XCOMPILER_OPTIONS "${KOKKOSCORE_XCOMPILER_OPTIONS} -Xcompiler ${XCOMP_FLAG}") + LIST(APPEND KOKKOS_ALL_COMPILE_OPTIONS -Xcompiler ${XCOMP_FLAG}) ENDFOREACH() - SET(KOKKOSCORE_CXX_FLAGS "${KOKKOSCORE_COMPILE_OPTIONS} ${CMAKE_CXX${KOKKOS_CXX_STANDARD}_STANDARD_COMPILE_OPTION} ${KOKKOSCORE_CUDA_OPTIONS} ${KOKKOSCORE_CUDAFE_OPTIONS} ${KOKKOSCORE_XCOMPILER_OPTIONS}") + SET(KOKKOSCORE_CXX_FLAGS "${KOKKOSCORE_COMPILE_OPTIONS} ${CMAKE_CXX${KOKKOS_CXX_STANDARD}_STANDARD_COMPILE_OPTION} ${KOKKOSCORE_XCOMPILER_OPTIONS}") + IF (KOKKOS_ENABLE_CUDA) + STRING(REPLACE ";" " " KOKKOSCORE_CUDA_OPTIONS "${KOKKOS_CUDA_OPTIONS}") + FOREACH(CUDAFE_FLAG ${KOKKOS_CUDAFE_OPTIONS}) + SET(KOKKOSCORE_CUDAFE_OPTIONS "${KOKKOSCORE_CUDAFE_OPTIONS} -Xcudafe ${CUDAFE_FLAG}") + LIST(APPEND KOKKOS_ALL_COMPILE_OPTIONS -Xcudafe ${CUDAFE_FLAG}) + ENDFOREACH() + SET(KOKKOSCORE_CXX_FLAGS "${KOKKOSCORE_CXX_FLAGS} ${KOKKOSCORE_CUDA_OPTIONS} ${KOKKOSCORE_CUDAFE_OPTIONS}") + ENDIF() # Both parent scope and this package # In ProjectCompilerPostConfig.cmake, we capture the "global" flags Trilinos wants in # TRILINOS_TOPLEVEL_CXX_FLAGS @@ -203,6 +220,8 @@ IF (KOKKOS_HAS_TRILINOS) #CMAKE_CXX_FLAGS will get added to Kokkos and Kokkos dependencies automatically here #These flags get set up in KOKKOS_PACKAGE_DECL, which means they #must be configured before KOKKOS_PACKAGE_DECL + SET(KOKKOS_ALL_COMPILE_OPTIONS + $<$:${KOKKOS_ALL_COMPILE_OPTIONS}>) ENDIF() KOKKOS_PACKAGE_DECL() @@ -250,7 +269,7 @@ INSTALL(FILES "${CMAKE_CURRENT_BINARY_DIR}/KokkosCore_config.h" DESTINATION ${CM IF (HAS_PARENT) FOREACH(DEV Kokkos_ENABLED_DEVICES) #I would much rather not make these cache variables or global properties, but I can't - #make any guarantees on whether PARENT_SCOPE is good enough to make + #make any guarantees on whether PARENT_SCOPE is good enough to make #these variables visible where I need them SET(Kokkos_ENABLE_${DEV} ON PARENT_SCOPE) SET_PROPERTY(GLOBAL PROPERTY Kokkos_ENABLE_${DEV} ON) diff --git a/lib/kokkos/Copyright.txt b/lib/kokkos/Copyright.txt index 06184796b268ee8b6edb8255aebcd0d28f8dfaa5..5e2f8d8647b53b8def2e240c92fdbad04b1550ec 100644 --- a/lib/kokkos/Copyright.txt +++ b/lib/kokkos/Copyright.txt @@ -1,13 +1,13 @@ //@HEADER // ************************************************************************ -// +// // Kokkos v. 3.0 // Copyright (2020) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). -// +// // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. -// +// // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are // met: @@ -36,6 +36,6 @@ // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // // Questions? Contact Christian R. Trott (crtrott@sandia.gov) -// +// // ************************************************************************ //@HEADER diff --git a/lib/kokkos/Makefile.kokkos b/lib/kokkos/Makefile.kokkos index fd96e14bb55a6bb162afa16ccddd5bcab52c200d..dc53de0a12e8036cddf2b09fd30844a0533de918 100644 --- a/lib/kokkos/Makefile.kokkos +++ b/lib/kokkos/Makefile.kokkos @@ -6,15 +6,20 @@ ifndef KOKKOS_PATH endif CXXFLAGS=$(CCFLAGS) -# Options: Cuda,ROCm,OpenMP,Pthreads,Qthreads,Serial +KOKKOS_VERSION_MAJOR = 3 +KOKKOS_VERSION_MINOR = 1 +KOKKOS_VERSION_PATCH = 1 +KOKKOS_VERSION = $(shell echo $(KOKKOS_VERSION_MAJOR)*10000+$(KOKKOS_VERSION_MINOR)*100+$(KOKKOS_VERSION_PATCH) | bc) + +# Options: Cuda,HIP,ROCm,OpenMP,Pthread,Serial KOKKOS_DEVICES ?= "OpenMP" -#KOKKOS_DEVICES ?= "Pthreads" +#KOKKOS_DEVICES ?= "Pthread" # Options: # Intel: KNC,KNL,SNB,HSW,BDW,SKX # NVIDIA: Kepler,Kepler30,Kepler32,Kepler35,Kepler37,Maxwell,Maxwell50,Maxwell52,Maxwell53,Pascal60,Pascal61,Volta70,Volta72,Turing75 # ARM: ARMv80,ARMv81,ARMv8-ThunderX,ARMv8-TX2 # IBM: BGQ,Power7,Power8,Power9 -# AMD-GPUS: Kaveri,Carrizo,Fiji,Vega +# AMD-GPUS: Vega900,Vega906 # AMD-CPUS: AMDAVX,Ryzen,EPYC KOKKOS_ARCH ?= "" # Options: yes,no @@ -35,6 +40,9 @@ KOKKOS_STANDALONE_CMAKE ?= "no" # Options: force_uvm,use_ldg,rdc,enable_lambda,enable_constexpr KOKKOS_CUDA_OPTIONS ?= "enable_lambda" +# Options: rdc +KOKKOS_HIP_OPTIONS ?= "" + # Default settings specific options. # Options: enable_async_dispatch KOKKOS_HPX_OPTIONS ?= "" @@ -82,29 +90,50 @@ KOKKOS_INTERNAL_CUDA_USE_CONSTEXPR := $(call kokkos_has_string,$(KOKKOS_CUDA_OPT KOKKOS_INTERNAL_HPX_ENABLE_ASYNC_DISPATCH := $(call kokkos_has_string,$(KOKKOS_HPX_OPTIONS),enable_async_dispatch) KOKKOS_INTERNAL_ENABLE_ETI := $(call kokkos_has_string,$(KOKKOS_OPTIONS),enable_eti) +KOKKOS_INTERNAL_HIP_USE_RELOC := $(call kokkos_has_string,$(KOKKOS_HIP_OPTIONS),rdc) # Check for Kokkos Host Execution Spaces one of which must be on. KOKKOS_INTERNAL_USE_OPENMP := $(call kokkos_has_string,$(subst OpenMPTarget,,$(KOKKOS_DEVICES)),OpenMP) KOKKOS_INTERNAL_USE_PTHREADS := $(call kokkos_has_string,$(KOKKOS_DEVICES),Pthread) -KOKKOS_INTERNAL_USE_QTHREADS := $(call kokkos_has_string,$(KOKKOS_DEVICES),Qthreads) KOKKOS_INTERNAL_USE_HPX := $(call kokkos_has_string,$(KOKKOS_DEVICES),HPX) KOKKOS_INTERNAL_USE_SERIAL := $(call kokkos_has_string,$(KOKKOS_DEVICES),Serial) ifeq ($(KOKKOS_INTERNAL_USE_OPENMP), 0) ifeq ($(KOKKOS_INTERNAL_USE_PTHREADS), 0) - ifeq ($(KOKKOS_INTERNAL_USE_QTHREADS), 0) - ifeq ($(KOKKOS_INTERNAL_USE_HPX), 0) - KOKKOS_INTERNAL_USE_SERIAL := 1 - endif + ifeq ($(KOKKOS_INTERNAL_USE_HPX), 0) + KOKKOS_INTERNAL_USE_SERIAL := 1 endif endif endif # Check for other Execution Spaces. KOKKOS_INTERNAL_USE_CUDA := $(call kokkos_has_string,$(KOKKOS_DEVICES),Cuda) -KOKKOS_INTERNAL_USE_ROCM := $(call kokkos_has_string,$(KOKKOS_DEVICES),ROCm) +KOKKOS_INTERNAL_USE_HIP := $(call kokkos_has_string,$(KOKKOS_DEVICES),HIP) KOKKOS_INTERNAL_USE_OPENMPTARGET := $(call kokkos_has_string,$(KOKKOS_DEVICES),OpenMPTarget) +KOKKOS_DEVICELIST = +ifeq ($(KOKKOS_INTERNAL_USE_SERIAL), 1) + KOKKOS_DEVICELIST += Serial +endif +ifeq ($(KOKKOS_INTERNAL_USE_OPENMP), 1) + KOKKOS_DEVICELIST += OpenMP +endif +ifeq ($(KOKKOS_INTERNAL_USE_PTHREADS), 1) + KOKKOS_DEVICELIST += Threads +endif +ifeq ($(KOKKOS_INTERNAL_USE_HPX), 1) + KOKKOS_DEVICELIST += HPX +endif +ifeq ($(KOKKOS_INTERNAL_USE_CUDA), 1) + KOKKOS_DEVICELIST += Cuda +endif +ifeq ($(KOKKOS_INTERNAL_USE_HIP), 1) + KOKKOS_DEVICELIST += HIP +endif +ifeq ($(KOKKOS_INTERNAL_USE_OPENMPTARGET), 1) + KOKKOS_DEVICELIST += OPENMPTARGET +endif + ifeq ($(KOKKOS_INTERNAL_USE_CUDA), 1) KOKKOS_INTERNAL_NVCC_PATH := $(shell which nvcc) ifeq ($(origin CUDA_PATH), undefined) @@ -128,10 +157,11 @@ KOKKOS_INTERNAL_COMPILER_INTEL := $(call kokkos_has_string,$(KOKKOS_CXX_VE KOKKOS_INTERNAL_COMPILER_PGI := $(call kokkos_has_string,$(KOKKOS_CXX_VERSION),PGI) KOKKOS_INTERNAL_COMPILER_XL := $(strip $(shell $(CXX) -qversion 2>&1 | grep XL | wc -l)) KOKKOS_INTERNAL_COMPILER_CRAY := $(strip $(shell $(CXX) -craype-verbose 2>&1 | grep "CC-" | wc -l)) -KOKKOS_INTERNAL_COMPILER_NVCC := $(strip $(shell export OMPI_CXX=$(OMPI_CXX); export MPICH_CXX=$(MPICH_CXX); echo "$(shell $(CXX) --version 2>&1 | grep nvcc | wc -l)>0" | bc)) +KOKKOS_INTERNAL_COMPILER_NVCC := $(strip $(shell echo "$(shell export OMPI_CXX=$(OMPI_CXX); export MPICH_CXX=$(MPICH_CXX); $(CXX) --version 2>&1 | grep nvcc | wc -l)>0" | bc)) KOKKOS_INTERNAL_COMPILER_CLANG := $(call kokkos_has_string,$(KOKKOS_CXX_VERSION),clang) KOKKOS_INTERNAL_COMPILER_APPLE_CLANG := $(call kokkos_has_string,$(KOKKOS_CXX_VERSION),Apple LLVM) KOKKOS_INTERNAL_COMPILER_HCC := $(call kokkos_has_string,$(KOKKOS_CXX_VERSION),HCC) +KOKKOS_INTERNAL_COMPILER_GCC := $(call kokkos_has_string,$(KOKKOS_CXX_VERSION),GCC) # Check Host Compiler if using NVCC through nvcc_wrapper ifeq ($(KOKKOS_INTERNAL_COMPILER_NVCC), 1) @@ -180,20 +210,20 @@ ifeq ($(KOKKOS_INTERNAL_ENABLE_COMPILER_WARNINGS), 1) KOKKOS_INTERNAL_COMPILER_WARNINGS = else ifeq ($(KOKKOS_INTERNAL_COMPILER_CLANG), 1) - KOKKOS_INTERNAL_COMPILER_WARNINGS = -Wall -Wshadow -pedantic -Wsign-compare -Wtype-limits -Wuninitialized + KOKKOS_INTERNAL_COMPILER_WARNINGS = -Wall -Wunused-parameter -Wshadow -pedantic -Wsign-compare -Wtype-limits -Wuninitialized else ifeq ($(KOKKOS_INTERNAL_COMPILER_APPLE_CLANG), 1) - KOKKOS_INTERNAL_COMPILER_WARNINGS = -Wall -Wshadow -pedantic -Wsign-compare -Wtype-limits -Wuninitialized + KOKKOS_INTERNAL_COMPILER_WARNINGS = -Wall -Wunused-parameter -Wshadow -pedantic -Wsign-compare -Wtype-limits -Wuninitialized else ifeq ($(KOKKOS_INTERNAL_COMPILER_XL), 1) - KOKKOS_INTERNAL_COMPILER_WARNINGS = -Wall -Wshadow -pedantic -Wsign-compare -Wtype-limits -Wuninitialized + KOKKOS_INTERNAL_COMPILER_WARNINGS = -Wall -Wunused-parameter -Wshadow -pedantic -Wsign-compare -Wtype-limits -Wuninitialized else ifeq ($(KOKKOS_INTERNAL_COMPILER_CRAY), 1) # TODO check if cray accepts GNU style warnings KOKKOS_INTERNAL_COMPILER_WARNINGS = else #gcc - KOKKOS_INTERNAL_COMPILER_WARNINGS = -Wall -Wshadow -pedantic -Wsign-compare -Wtype-limits -Wignored-qualifiers -Wempty-body -Wclobbered -Wuninitialized + KOKKOS_INTERNAL_COMPILER_WARNINGS = -Wall -Wunused-parameter -Wshadow -pedantic -Wsign-compare -Wtype-limits -Wignored-qualifiers -Wempty-body -Wclobbered -Wuninitialized endif endif endif @@ -230,7 +260,12 @@ ifeq ($(KOKKOS_INTERNAL_COMPILER_XL), 1) KOKKOS_INTERNAL_OPENMPTARGET_FLAG := -DKOKKOS_IBM_XL_OMP45_WORKAROUND -qsmp=omp -qoffload -qnoeh else ifeq ($(KOKKOS_INTERNAL_COMPILER_CLANG), 1) - KOKKOS_INTERNAL_OPENMPTARGET_FLAG := -DKOKKOS_BUG_WORKAROUND_IBM_CLANG_OMP45_VIEW_INIT -fopenmp-implicit-declare-target -fopenmp-targets=nvptx64-nvidia-cuda -fopenmp -fopenmp=libomp + #KOKKOS_INTERNAL_OPENMPTARGET_FLAG := -DKOKKOS_BUG_WORKAROUND_IBM_CLANG_OMP45_VIEW_INIT -fopenmp-implicit-declare-target -fopenmp-targets=nvptx64-nvidia-cuda -fopenmp -fopenmp=libomp + KOKKOS_INTERNAL_OPENMPTARGET_FLAG := -DKOKKOS_WORKAROUND_OPENMPTARGET_CLANG -fopenmp -fopenmp=libomp + KOKKOS_INTERNAL_OPENMPTARGET_LIB := -lomptarget + else + #Assume GCC + KOKKOS_INTERNAL_OPENMPTARGET_FLAG := -fopenmp -foffload=nvptx-none endif endif @@ -353,11 +388,8 @@ KOKKOS_INTERNAL_USE_ARCH_IBM := $(strip $(shell echo $(KOKKOS_INTERNAL_USE_ARCH_ KOKKOS_INTERNAL_USE_ARCH_AMDAVX := $(call kokkos_has_string,$(KOKKOS_ARCH),AMDAVX) KOKKOS_INTERNAL_USE_ARCH_RYZEN := $(call kokkos_has_string,$(KOKKOS_ARCH),Ryzen) KOKKOS_INTERNAL_USE_ARCH_EPYC := $(call kokkos_has_string,$(KOKKOS_ARCH),EPYC) -KOKKOS_INTERNAL_USE_ARCH_KAVERI := $(call kokkos_has_string,$(KOKKOS_ARCH),Kaveri) -KOKKOS_INTERNAL_USE_ARCH_CARRIZO := $(call kokkos_has_string,$(KOKKOS_ARCH),Carrizo) -KOKKOS_INTERNAL_USE_ARCH_FIJI := $(call kokkos_has_string,$(KOKKOS_ARCH),Fiji) -KOKKOS_INTERNAL_USE_ARCH_VEGA := $(call kokkos_has_string,$(KOKKOS_ARCH),Vega) -KOKKOS_INTERNAL_USE_ARCH_GFX901 := $(call kokkos_has_string,$(KOKKOS_ARCH),gfx901) +KOKKOS_INTERNAL_USE_ARCH_VEGA900 := $(call kokkos_has_string,$(KOKKOS_ARCH),Vega900) +KOKKOS_INTERNAL_USE_ARCH_VEGA906 := $(call kokkos_has_string,$(KOKKOS_ARCH),Vega906) # Any AVX? KOKKOS_INTERNAL_USE_ARCH_SSE42 := $(shell expr $(KOKKOS_INTERNAL_USE_ARCH_WSM)) @@ -430,6 +462,10 @@ tmp := $(call kokkos_append_header,'\#error "Do not include $(KOKKOS_CONFIG_HEAD tmp := $(call kokkos_append_header,'\#else') tmp := $(call kokkos_append_header,'\#define KOKKOS_CORE_CONFIG_H') tmp := $(call kokkos_append_header,'\#endif') + +tmp := $(call kokkos_append_header,"") +tmp := $(call kokkos_append_header,"\#define KOKKOS_VERSION $(KOKKOS_VERSION)") +tmp := $(call kokkos_append_header,"") tmp := $(call kokkos_append_header,"/* Execution Spaces */") @@ -442,9 +478,15 @@ ifeq ($(KOKKOS_INTERNAL_USE_ROCM), 1) tmp := $(call kokkos_append_header,'\#define KOKKOS_ENABLE_ROCM') tmp := $(call kokkos_append_header,'\#define KOKKOS_IMPL_ROCM_CLANG_WORKAROUND 1') endif +ifeq ($(KOKKOS_INTERNAL_USE_HIP), 1) + tmp := $(call kokkos_append_header,'\#define KOKKOS_ENABLE_HIP') +endif ifeq ($(KOKKOS_INTERNAL_USE_OPENMPTARGET), 1) tmp := $(call kokkos_append_header,'\#define KOKKOS_ENABLE_OPENMPTARGET') + ifeq ($(KOKKOS_INTERNAL_COMPILER_GCC), 1) + tmp := $(call kokkos_append_header,"\#define KOKKOS_WORKAROUND_OPENMPTARGET_GCC") + endif endif ifeq ($(KOKKOS_INTERNAL_USE_OPENMP), 1) @@ -455,10 +497,6 @@ ifeq ($(KOKKOS_INTERNAL_USE_PTHREADS), 1) tmp := $(call kokkos_append_header,"\#define KOKKOS_ENABLE_THREADS") endif -ifeq ($(KOKKOS_INTERNAL_USE_QTHREADS), 1) - tmp := $(call kokkos_append_header,"\#define KOKKOS_ENABLE_QTHREADS") -endif - ifeq ($(KOKKOS_INTERNAL_USE_HPX), 1) tmp := $(call kokkos_append_header,"\#define KOKKOS_ENABLE_HPX") endif @@ -966,6 +1004,14 @@ endif # Figure out the architecture flag for Cuda. ifeq ($(KOKKOS_INTERNAL_USE_CUDA), 1) + KOKKOS_INTERNAL_USE_CUDA_ARCH=1 +endif +ifeq ($(KOKKOS_INTERNAL_USE_HIP), 1) + ifeq ($(KOKKOS_INTERNAL_COMPILER_NVCC), 1) + KOKKOS_INTERNAL_USE_CUDA_ARCH=1 + endif +endif +ifeq ($(KOKKOS_INTERNAL_USE_CUDA_ARCH), 1) ifeq ($(KOKKOS_INTERNAL_COMPILER_NVCC), 1) KOKKOS_INTERNAL_CUDA_ARCH_FLAG=-arch else ifeq ($(KOKKOS_INTERNAL_COMPILER_CLANG), 1) @@ -974,7 +1020,17 @@ ifeq ($(KOKKOS_INTERNAL_USE_CUDA), 1) else $(error Makefile.kokkos: CUDA is enabled but the compiler is neither NVCC nor Clang (got version string $(KOKKOS_CXX_VERSION)) ) endif + KOKKOS_INTERNAL_USE_CUDA_ARCH = 1 +endif +ifeq ($(KOKKOS_INTERNAL_USE_OPENMPTARGET), 1) + ifeq ($(KOKKOS_INTERNAL_COMPILER_CLANG), 1) + KOKKOS_INTERNAL_CUDA_ARCH_FLAG=-fopenmp-targets=nvptx64-nvidia-cuda -Xopenmp-target -march + endif + KOKKOS_INTERNAL_USE_CUDA_ARCH = 1 +endif + +ifeq ($(KOKKOS_INTERNAL_USE_CUDA_ARCH), 1) ifeq ($(KOKKOS_INTERNAL_USE_ARCH_KEPLER30), 1) tmp := $(call kokkos_append_header,"\#define KOKKOS_ARCH_KEPLER") tmp := $(call kokkos_append_header,"\#define KOKKOS_ARCH_KEPLER30") @@ -1042,55 +1098,49 @@ ifeq ($(KOKKOS_INTERNAL_USE_CUDA), 1) ifeq ($(KOKKOS_INTERNAL_COMPILER_NVCC), 1) KOKKOS_LDFLAGS += $(KOKKOS_INTERNAL_CUDA_ARCH_FLAG) endif + ifeq ($(KOKKOS_INTERNAL_COMPILER_CLANG), 1) + ifeq ($(KOKKOS_INTERNAL_USE_OPENMPTARGET), 1) + KOKKOS_LDFLAGS += $(KOKKOS_INTERNAL_CUDA_ARCH_FLAG) + endif + endif + endif + ifeq ($(KOKKOS_INTERNAL_USE_HIP), 1) + KOKKOS_CXXFLAGS += --expt-extended-lambda endif endif + # Figure out the architecture flag for ROCm. -ifeq ($(KOKKOS_INTERNAL_USE_ROCM), 1) +ifeq ($(KOKKOS_INTERNAL_USE_HIP), 1) # Lets start with adding architecture defines - ifeq ($(KOKKOS_INTERNAL_USE_ARCH_KAVERI), 1) - tmp := $(call kokkos_append_header,"\#define KOKKOS_ARCH_ROCM 701") - tmp := $(call kokkos_append_header,"\#define KOKKOS_ARCH_KAVERI") - KOKKOS_INTERNAL_ROCM_ARCH_FLAG := --amdgpu-target=gfx701 - endif - ifeq ($(KOKKOS_INTERNAL_USE_ARCH_CARRIZO), 1) - tmp := $(call kokkos_append_header,"\#define KOKKOS_ARCH_ROCM 801") - tmp := $(call kokkos_append_header,"\#define KOKKOS_ARCH_CARRIZO") - KOKKOS_INTERNAL_ROCM_ARCH_FLAG := --amdgpu-target=gfx801 - endif - ifeq ($(KOKKOS_INTERNAL_USE_ARCH_FIJI), 1) - tmp := $(call kokkos_append_header,"\#define KOKKOS_ARCH_ROCM 803") - tmp := $(call kokkos_append_header,"\#define KOKKOS_ARCH_FIJI") - KOKKOS_INTERNAL_ROCM_ARCH_FLAG := --amdgpu-target=gfx803 + ifeq ($(KOKKOS_INTERNAL_USE_ARCH_VEGA900), 1) + tmp := $(call kokkos_append_header,"\#define KOKKOS_ARCH_HIP 900") + tmp := $(call kokkos_append_header,"\#define KOKKOS_ARCH_VEGA900") + KOKKOS_INTERNAL_HIP_ARCH_FLAG := --amdgpu-target=gfx900 endif - ifeq ($(KOKKOS_INTERNAL_USE_ARCH_VEGA), 1) - tmp := $(call kokkos_append_header,"\#define KOKKOS_ARCH_ROCM 900") - tmp := $(call kokkos_append_header,"\#define KOKKOS_ARCH_VEGA") - KOKKOS_INTERNAL_ROCM_ARCH_FLAG := --amdgpu-target=gfx900 + ifeq ($(KOKKOS_INTERNAL_USE_ARCH_VEGA906), 1) + tmp := $(call kokkos_append_header,"\#define KOKKOS_ARCH_HIP 906") + tmp := $(call kokkos_append_header,"\#define KOKKOS_ARCH_VEGA906") + KOKKOS_INTERNAL_HIP_ARCH_FLAG := --amdgpu-target=gfx906 endif - ifeq ($(KOKKOS_INTERNAL_USE_ARCH_GFX901), 1) - tmp := $(call kokkos_append_header,"\#define KOKKOS_ARCH_ROCM 901") - tmp := $(call kokkos_append_header,"\#define KOKKOS_ARCH_GFX901") - KOKKOS_INTERNAL_ROCM_ARCH_FLAG := --amdgpu-target=gfx901 + + KOKKOS_SRC += $(wildcard $(KOKKOS_PATH)/core/src/HIP/*.cpp) + KOKKOS_HEADERS += $(wildcard $(KOKKOS_PATH)/core/src/HIP/*.hpp) + + KOKKOS_CXXFLAGS+=$(KOKKOS_INTERNAL_HIP_ARCH_FLAG) + KOKKOS_LDFLAGS+=$(KOKKOS_INTERNAL_HIP_ARCH_FLAG) + + ifeq ($(KOKKOS_INTERNAL_HIP_USE_RELOC), 1) + tmp := $(call kokkos_append_header,"\#define KOKKOS_ENABLE_HIP_RELOCATABLE_DEVICE_CODE") + KOKKOS_CXXFLAGS+=-fgpu-rdc + KOKKOS_LDFLAGS+=-fgpu-rdc + else + KOKKOS_CXXFLAGS+=-fno-gpu-rdc + KOKKOS_LDFLAGS+=-fno-gpu-rdc endif - - - KOKKOS_INTERNAL_HCC_PATH := $(shell which $(CXX)) - ROCM_HCC_PATH ?= $(KOKKOS_INTERNAL_HCC_PATH:/bin/clang++=) - - KOKKOS_CXXFLAGS += $(shell $(ROCM_HCC_PATH)/bin/hcc-config --cxxflags) - KOKKOS_LDFLAGS += $(shell $(ROCM_HCC_PATH)/bin/hcc-config --ldflags) -lhc_am -lm - KOKKOS_CXXLDFLAGS += $(shell $(ROCM_HCC_PATH)/bin/hcc-config --ldflags) -lhc_am -lm - KOKKOS_TPL_LIBRARY_NAMES += hc_am m - KOKKOS_LDFLAGS += $(KOKKOS_INTERNAL_ROCM_ARCH_FLAG) - - KOKKOS_SRC += $(wildcard $(KOKKOS_PATH)/core/src/ROCm/*.cpp) -ifeq ($(KOKKOS_INTERNAL_ENABLE_ETI), 1) - KOKKOS_SRC += $(wildcard $(KOKKOS_ETI_PATH)/ROCm/*.cpp) -endif - KOKKOS_HEADERS += $(wildcard $(KOKKOS_PATH)/core/src/ROCm/*.hpp) endif + KOKKOS_INTERNAL_LS_CONFIG := $(shell ls KokkosCore_config.h 2>&1) ifeq ($(KOKKOS_INTERNAL_LS_CONFIG), KokkosCore_config.h) @@ -1141,7 +1191,7 @@ endif endif ifeq ($(KOKKOS_INTERNAL_USE_OPENMPTARGET), 1) - KOKKOS_SRC += $(KOKKOS_PATH)/core/src/OpenMPTarget/Kokkos_OpenMPTarget_Exec.cpp $(KOKKOS_PATH)/core/src/OpenMPTarget/Kokkos_OpenMPTargetSpace.cpp + KOKKOS_SRC += $(wildcard $(KOKKOS_PATH)/core/src/OpenMPTarget/*.cpp) KOKKOS_HEADERS += $(wildcard $(KOKKOS_PATH)/core/src/OpenMPTarget/*.hpp) ifeq ($(KOKKOS_INTERNAL_USE_CUDA), 1) KOKKOS_CXXFLAGS += -Xcompiler $(KOKKOS_INTERNAL_OPENMPTARGET_FLAG) @@ -1149,6 +1199,7 @@ ifeq ($(KOKKOS_INTERNAL_USE_OPENMPTARGET), 1) KOKKOS_CXXFLAGS += $(KOKKOS_INTERNAL_OPENMPTARGET_FLAG) endif KOKKOS_LDFLAGS += $(KOKKOS_INTERNAL_OPENMPTARGET_FLAG) + KOKKOS_LIBS += $(KOKKOS_INTERNAL_OPENMPTARGET_LIB) endif ifeq ($(KOKKOS_INTERNAL_USE_OPENMP), 1) @@ -1178,22 +1229,6 @@ endif KOKKOS_TPL_LIBRARY_NAMES += pthread endif -ifeq ($(KOKKOS_INTERNAL_USE_QTHREADS), 1) - KOKKOS_SRC += $(wildcard $(KOKKOS_PATH)/core/src/Qthreads/*.cpp) - KOKKOS_HEADERS += $(wildcard $(KOKKOS_PATH)/core/src/Qthreads/*.hpp) - ifneq ($(KOKKOS_CMAKE), yes) - ifneq ($(QTHREADS_PATH),) - KOKKOS_CPPFLAGS += -I$(QTHREADS_PATH)/include - KOKKOS_LIBDIRS += -L$(QTHREADS_PATH)/lib - KOKKOS_CXXLDFLAGS += -L$(QTHREADS_PATH)/lib - KOKKOS_TPL_INCLUDE_DIRS += $(QTHREADS_PATH)/include - KOKKOS_TPL_LIBRARY_DIRS += $(QTHREADS_PATH)/lib64 - endif - KOKKOS_LIBS += -lqthread - KOKKOS_TPL_LIBRARY_NAMES += qthread - endif -endif - ifeq ($(KOKKOS_INTERNAL_USE_HPX), 1) KOKKOS_SRC += $(wildcard $(KOKKOS_PATH)/core/src/HPX/*.cpp) KOKKOS_HEADERS += $(wildcard $(KOKKOS_PATH)/core/src/HPX/*.hpp) diff --git a/lib/kokkos/Makefile.targets b/lib/kokkos/Makefile.targets index 0a1f5220161521832e0f7736789de6e88f6f11b8..18e37a71f7157afd0be6dc8d793cc2cb4102f4d3 100644 --- a/lib/kokkos/Makefile.targets +++ b/lib/kokkos/Makefile.targets @@ -55,6 +55,17 @@ ifeq ($(KOKKOS_INTERNAL_ENABLE_ETI), 1) endif endif +ifeq ($(KOKKOS_INTERNAL_USE_HIP), 1) +Kokkos_HIP_Space.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_PATH)/core/src/HIP/Kokkos_HIP_Space.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_PATH)/core/src/HIP/Kokkos_HIP_Space.cpp +Kokkos_HIP_Instance.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_PATH)/core/src/HIP/Kokkos_HIP_Instance.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_PATH)/core/src/HIP/Kokkos_HIP_Instance.cpp +Kokkos_HIP_KernelLaunch.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_PATH)/core/src/HIP/Kokkos_HIP_KernelLaunch.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_PATH)/core/src/HIP/Kokkos_HIP_KernelLaunch.cpp +Kokkos_HIP_Locks.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_PATH)/core/src/HIP/Kokkos_HIP_Locks.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_PATH)/core/src/HIP/Kokkos_HIP_Locks.cpp +endif + ifeq ($(KOKKOS_INTERNAL_USE_ROCM), 1) Kokkos_ROCm_Exec.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_PATH)/core/src/ROCm/Kokkos_ROCm_Exec.cpp $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_PATH)/core/src/ROCm/Kokkos_ROCm_Exec.cpp @@ -79,13 +90,6 @@ ifeq ($(KOKKOS_INTERNAL_ENABLE_ETI), 1) endif endif -ifeq ($(KOKKOS_INTERNAL_USE_QTHREADS), 1) -Kokkos_QthreadsExec.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_PATH)/core/src/Qthreads/Kokkos_QthreadsExec.cpp - $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_PATH)/core/src/Qthreads/Kokkos_QthreadsExec.cpp -Kokkos_Qthreads_Task.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_PATH)/core/src/Qthreads/Kokkos_Qthreads_Task.cpp - $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_PATH)/core/src/Qthreads/Kokkos_Qthreads_Task.cpp -endif - ifeq ($(KOKKOS_INTERNAL_USE_OPENMP), 1) Kokkos_OpenMP_Exec.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_PATH)/core/src/OpenMP/Kokkos_OpenMP_Exec.cpp $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_PATH)/core/src/OpenMP/Kokkos_OpenMP_Exec.cpp @@ -106,10 +110,12 @@ endif ifeq ($(KOKKOS_INTERNAL_USE_OPENMPTARGET), 1) Kokkos_OpenMPTarget_Exec.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_PATH)/core/src/OpenMPTarget/Kokkos_OpenMPTarget_Exec.cpp $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_PATH)/core/src/OpenMPTarget/Kokkos_OpenMPTarget_Exec.cpp +Kokkos_OpenMPTarget_Instance.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_PATH)/core/src/OpenMPTarget/Kokkos_OpenMPTarget_Instance.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_PATH)/core/src/OpenMPTarget/Kokkos_OpenMPTarget_Instance.cpp Kokkos_OpenMPTargetSpace.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_PATH)/core/src/OpenMPTarget/Kokkos_OpenMPTargetSpace.cpp $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_PATH)/core/src/OpenMPTarget/Kokkos_OpenMPTargetSpace.cpp -#Kokkos_OpenMPTarget_Task.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_PATH)/core/src/OpenMPTarget/Kokkos_OpenMPTarget_Task.cpp -# $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_PATH)/core/src/OpenMPTarget/Kokkos_OpenMPTarget_Task.cpp +Kokkos_OpenMPTarget_Task.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_PATH)/core/src/OpenMPTarget/Kokkos_OpenMPTarget_Task.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_PATH)/core/src/OpenMPTarget/Kokkos_OpenMPTarget_Task.cpp endif Kokkos_HBWSpace.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_PATH)/core/src/impl/Kokkos_HBWSpace.cpp diff --git a/lib/kokkos/README.md b/lib/kokkos/README.md index 322dabfdab7745b600696b92ecb4ec7e148bc7bd..a04df9eb9b653cfc83fba290705ec10338e5a486 100644 --- a/lib/kokkos/README.md +++ b/lib/kokkos/README.md @@ -11,8 +11,8 @@ CUDA, HPX, OpenMP and Pthreads as backend programming models with several other backends in development. Kokkos Core is part of the Kokkos C++ Performance Portability Programming EcoSystem, -which also provides math kernels (https://github.com/kokkos/kokkos-kernels), as well as -profiling and debugging tools (https://github.com/kokkos/kokkos-tools). +which also provides math kernels (https://github.com/kokkos/kokkos-kernels), as well as +profiling and debugging tools (https://github.com/kokkos/kokkos-tools). # Learning about Kokkos @@ -23,7 +23,7 @@ For questions find us on Slack: https://kokkosteam.slack.com or open a github is For non-public questions send an email to crtrott(at)sandia.gov -A separate repository with extensive tutorial material can be found under +A separate repository with extensive tutorial material can be found under https://github.com/kokkos/kokkos-tutorials. Furthermore, the 'example/tutorial' directory provides step by step tutorial @@ -41,12 +41,12 @@ To learn more about Kokkos consider watching one of our presentations: # Contributing to Kokkos -We are open and try to encourage contributions from external developers. +We are open and try to encourage contributions from external developers. To do so please first open an issue describing the contribution and then issue a pull request against the develop branch. For larger features it may be good -to get guidance from the core development team first through the github issue. +to get guidance from the core development team first through the github issue. -Note that Kokkos Core is licensed under standard 3-clause BSD terms of use. +Note that Kokkos Core is licensed under standard 3-clause BSD terms of use. Which means contributing to Kokkos allows anyone else to use your contributions not just for public purposes but also for closed source commercial projects. For specifics see the LICENSE file contained in the repository or distribution. @@ -94,9 +94,9 @@ For specifics see the LICENSE file contained in the repository or distribution. * Intel 18.2.199 (with gcc 4.9.3) ### Primary tested compilers on ARM (Cavium ThunderX2) -* GCC 7.2.0 +* GCC 7.2.0 * ARM/Clang 18.4.0 - + ### Other compilers working: * X86: * Cygwin 2.1.0 64bit with gcc 4.9.3 @@ -110,47 +110,47 @@ For specifics see the LICENSE file contained in the repository or distribution. Primary tested compiler are passing in release mode -with warnings as errors. They also are tested with a comprehensive set of +with warnings as errors. They also are tested with a comprehensive set of backend combinations (i.e. OpenMP, Pthreads, Serial, OpenMP+Serial, ...). We are using the following set of flags: -* GCC: +* GCC: ```` - -Wall -Wshadow -pedantic + -Wall -Wunused-parameter -Wshadow -pedantic -Werror -Wsign-compare -Wtype-limits - -Wignored-qualifiers -Wempty-body + -Wignored-qualifiers -Wempty-body -Wclobbered -Wuninitialized ```` -* Intel: +* Intel: ```` - -Wall -Wshadow -pedantic - -Werror -Wsign-compare -Wtype-limits + -Wall -Wunused-parameter -Wshadow -pedantic + -Werror -Wsign-compare -Wtype-limits -Wuninitialized ```` -* Clang: +* Clang: ```` - -Wall -Wshadow -pedantic - -Werror -Wsign-compare -Wtype-limits + -Wall -Wunused-parameter -Wshadow -pedantic + -Werror -Wsign-compare -Wtype-limits -Wuninitialized - ```` + ```` -* NVCC: +* NVCC: ```` - -Wall -Wshadow -pedantic - -Werror -Wsign-compare -Wtype-limits + -Wall -Wunused-parameter -Wshadow -pedantic + -Werror -Wsign-compare -Wtype-limits -Wuninitialized ```` -Other compilers are tested occasionally, in particular when pushing from develop to +Other compilers are tested occasionally, in particular when pushing from develop to master branch. These are tested less rigorously without `-Werror` and only for a select set of backends. # Building and Installing Kokkos -Kokkos provide a CMake build system and a raw Makefile build system. +Kokkos provide a CMake build system and a raw Makefile build system. The CMake build system is strongly encouraged and will be the most rigorously supported in future releases. Full details are given in the [build instructions](BUILD.md). Basic setups are shown here: ## CMake -The best way to install Kokkos is using the CMake build system. Assuming Kokkos lives in `$srcdir`: +The best way to install Kokkos is using the CMake build system. Assuming Kokkos lives in `$srcdir`: ```` cmake $srcdir \ -DCMAKE_CXX_COMPILER=$path_to_compiler \ @@ -162,9 +162,9 @@ cmake $srcdir \ ```` then simply type `make install`. The Kokkos CMake package will then be installed in `$path_to_install` to be used by downstream packages. -To validate the Kokkos build, configure with +To validate the Kokkos build, configure with ```` - -DKokkos_ENABLE_TESTS=On + -DKokkos_ENABLE_TESTS=On ```` and run `make test` after completing the build. @@ -209,7 +209,7 @@ For a complete list of Kokkos options, run: spack info kokkos ```` Spack currently installs packages to a location determined by a unique hash. This hash name is not really "human readable". -Generally, Spack usage should never really require you to reference the computer-generated unique install folder. +Generally, Spack usage should never really require you to reference the computer-generated unique install folder. More details are given in the [build instructions](BUILD.md). If you must know, you can locate Spack Kokkos installations with: ```` spack find -p kokkos ... @@ -217,7 +217,7 @@ spack find -p kokkos ... where `...` is the unique spec identifying the particular Kokkos configuration and version. -## Raw Makefile +## Raw Makefile A bash script is provided to generate raw makefiles. To install Kokkos as a library create a build directory and run the following ```` @@ -240,33 +240,33 @@ changing the device type for which to build. For individual projects, it may be preferable to build Kokkos inline rather than link to an installed package. The main reason is that you may otherwise need many different configurations of Kokkos installed depending on the required compile time -features an application needs. For example there is only one default +features an application needs. For example there is only one default execution space, which means you need different installations to have OpenMP or Pthreads as the default space. Also for the CUDA backend there are certain -choices, such as allowing relocatable device code, which must be made at +choices, such as allowing relocatable device code, which must be made at installation time. Building Kokkos inline uses largely the same process -as compiling an application against an installed Kokkos library. +as compiling an application against an installed Kokkos library. For CMake, this means copying over the Kokkos source code into your project and adding `add_subdirectory(kokkos)` to your CMakeLists.txt. -For raw Makefiles, see the example benchmarks/bytes_and_flops/Makefile which can be used with an installed library and or an inline build. +For raw Makefiles, see the example benchmarks/bytes_and_flops/Makefile which can be used with an installed library and or an inline build. # Kokkos and CUDA UVM -Kokkos does support UVM as a specific memory space called CudaUVMSpace. -Allocations made with that space are accessible from host and device. +Kokkos does support UVM as a specific memory space called CudaUVMSpace. +Allocations made with that space are accessible from host and device. You can tell Kokkos to use that as the default space for Cuda allocations. In either case UVM comes with a number of restrictions: -* You can't access allocations on the host while a kernel is potentially -running. This will lead to segfaults. To avoid that you either need to +* You can't access allocations on the host while a kernel is potentially +running. This will lead to segfaults. To avoid that you either need to call Kokkos::Cuda::fence() (or just Kokkos::fence()), after kernels, or you can set the environment variable CUDA_LAUNCH_BLOCKING=1. -* In multi socket multi GPU machines without NVLINK, UVM defaults +* In multi socket multi GPU machines without NVLINK, UVM defaults to using zero copy allocations for technical reasons related to using multiple GPUs from the same process. If an executable doesn't do that (e.g. each -MPI rank of an application uses a single GPU [can be the same GPU for +MPI rank of an application uses a single GPU [can be the same GPU for multiple MPI ranks]) you can set CUDA_MANAGED_FORCE_DEVICE_ALLOC=1. -This will enforce proper UVM allocations, but can lead to errors if +This will enforce proper UVM allocations, but can lead to errors if more than a single GPU is used by a single process. diff --git a/lib/kokkos/algorithms/src/Kokkos_Random.hpp b/lib/kokkos/algorithms/src/Kokkos_Random.hpp index 078db18eddf699a983503763a2de98fbc618215c..0a7967523656cda4f96ca911116a4a5a06a30830 100644 --- a/lib/kokkos/algorithms/src/Kokkos_Random.hpp +++ b/lib/kokkos/algorithms/src/Kokkos_Random.hpp @@ -537,6 +537,145 @@ struct rand > { } }; +template +class Random_XorShift1024_Pool; + +namespace Impl { + +template +struct Random_XorShift1024_State { + uint64_t state_[16]; + KOKKOS_DEFAULTED_FUNCTION + Random_XorShift1024_State() = default; + + template + KOKKOS_FUNCTION Random_XorShift1024_State(const StateViewType& v, + int state_idx) { + for (int i = 0; i < 16; i++) state_[i] = v(state_idx, i); + } + + KOKKOS_FUNCTION + uint64_t operator[](const int i) const { return state_[i]; } + + KOKKOS_FUNCTION + uint64_t& operator[](const int i) { return state_[i]; } +}; + +template <> +struct Random_XorShift1024_State { + uint64_t* state_; + const int stride_; + KOKKOS_FUNCTION + Random_XorShift1024_State() : state_(nullptr), stride_(1){}; + + template + KOKKOS_FUNCTION Random_XorShift1024_State(const StateViewType& v, + int state_idx) + : state_(&v(state_idx, 0)), stride_(v.stride_1()) {} + + KOKKOS_FUNCTION + uint64_t operator[](const int i) const { return state_[i * stride_]; } + + KOKKOS_FUNCTION + uint64_t& operator[](const int i) { return state_[i * stride_]; } +}; + +template +struct Random_XorShift1024_UseCArrayState : std::true_type {}; + +#ifdef KOKKOS_ENABLE_CUDA +template <> +struct Random_XorShift1024_UseCArrayState : std::false_type {}; +#endif +#ifdef KOKKOS_ENABLE_HIP +template <> +struct Random_XorShift1024_UseCArrayState + : std::false_type {}; +#endif +#ifdef KOKKOS_ENABLE_OPENMPTARGET +template <> +struct Random_XorShift1024_UseCArrayState + : std::false_type {}; +#endif + +template +struct Random_UniqueIndex { + using locks_view_type = View; + KOKKOS_FUNCTION + static int get_state_idx(const locks_view_type) { +#ifdef KOKKOS_ACTIVE_EXECUTION_MEMORY_SPACE_HOST +#ifdef KOKKOS_ENABLE_DEPRECATED_CODE + const int i = ExecutionSpace::hardware_thread_id(); +#else + const int i = ExecutionSpace::impl_hardware_thread_id(); +#endif + return i; +#else + return 0; +#endif + } +}; + +#ifdef KOKKOS_ENABLE_CUDA +template <> +struct Random_UniqueIndex { + using locks_view_type = View; + KOKKOS_FUNCTION + static int get_state_idx(const locks_view_type& locks_) { +#ifdef __CUDA_ARCH__ + const int i_offset = + (threadIdx.x * blockDim.y + threadIdx.y) * blockDim.z + threadIdx.z; + int i = (((blockIdx.x * gridDim.y + blockIdx.y) * gridDim.z + blockIdx.z) * + blockDim.x * blockDim.y * blockDim.z + + i_offset) % + locks_.extent(0); + while (Kokkos::atomic_compare_exchange(&locks_(i), 0, 1)) { + i += blockDim.x * blockDim.y * blockDim.z; + if (i >= static_cast(locks_.extent(0))) { + i = i_offset; + } + } + return i; +#else + (void)locks_; + return 0; +#endif + } +}; +#endif + +#ifdef KOKKOS_ENABLE_HIP +template <> +struct Random_UniqueIndex { + using locks_view_type = View; + KOKKOS_FUNCTION + static int get_state_idx(const locks_view_type& locks_) { +#ifdef __HIP_DEVICE_COMPILE__ + const int i_offset = + (hipThreadIdx_x * hipBlockDim_y + hipThreadIdx_y) * hipBlockDim_z + + hipThreadIdx_z; + int i = (((hipBlockIdx_x * hipGridDim_y + hipBlockIdx_y) * hipGridDim_z + + hipBlockIdx_z) * + hipBlockDim_x * hipBlockDim_y * hipBlockDim_z + + i_offset) % + locks_.extent(0); + while (Kokkos::atomic_compare_exchange(&locks_(i), 0, 1)) { + i += hipBlockDim_x * hipBlockDim_y * hipBlockDim_z; + if (i >= static_cast(locks_.extent(0))) { + i = i_offset; + } + } + return i; +#else + (void)locks_; + return 0; +#endif + } +}; +#endif + +} // namespace Impl + template class Random_XorShift64_Pool; @@ -550,10 +689,10 @@ class Random_XorShift64 { public: typedef DeviceType device_type; - enum { MAX_URAND = 0xffffffffU }; - enum { MAX_URAND64 = 0xffffffffffffffffULL - 1 }; - enum { MAX_RAND = static_cast(0xffffffff / 2) }; - enum { MAX_RAND64 = static_cast(0xffffffffffffffffLL / 2 - 1) }; + constexpr static uint32_t MAX_URAND = std::numeric_limits::max(); + constexpr static uint64_t MAX_URAND64 = std::numeric_limits::max(); + constexpr static int32_t MAX_RAND = std::numeric_limits::max(); + constexpr static int64_t MAX_RAND64 = std::numeric_limits::max(); KOKKOS_INLINE_FUNCTION Random_XorShift64(uint64_t state, int state_idx = 0) @@ -637,10 +776,12 @@ class Random_XorShift64 { } KOKKOS_INLINE_FUNCTION - float frand() { return 1.0f * urand64() / MAX_URAND64; } + float frand() { return urand64() / static_cast(MAX_URAND64); } KOKKOS_INLINE_FUNCTION - float frand(const float& range) { return range * urand64() / MAX_URAND64; } + float frand(const float& range) { + return range * urand64() / static_cast(MAX_URAND64); + } KOKKOS_INLINE_FUNCTION float frand(const float& start, const float& end) { @@ -648,10 +789,12 @@ class Random_XorShift64 { } KOKKOS_INLINE_FUNCTION - double drand() { return 1.0 * urand64() / MAX_URAND64; } + double drand() { return urand64() / static_cast(MAX_URAND64); } KOKKOS_INLINE_FUNCTION - double drand(const double& range) { return range * urand64() / MAX_URAND64; } + double drand(const double& range) { + return range * urand64() / static_cast(MAX_URAND64); + } KOKKOS_INLINE_FUNCTION double drand(const double& start, const double& end) { @@ -662,6 +805,11 @@ class Random_XorShift64 { // number KOKKOS_INLINE_FUNCTION double normal() { +#ifndef __HIP_DEVICE_COMPILE__ // FIXME_HIP + using std::sqrt; +#else + using ::sqrt; +#endif double S = 2.0; double U; while (S >= 1.0) { @@ -669,7 +817,7 @@ class Random_XorShift64 { const double V = 2.0 * drand() - 1.0; S = U * U + V * V; } - return U * std::sqrt(-2.0 * log(S) / S); + return U * sqrt(-2.0 * log(S) / S); } KOKKOS_INLINE_FUNCTION @@ -681,9 +829,10 @@ class Random_XorShift64 { template class Random_XorShift64_Pool { private: - typedef View lock_type; + using execution_space = typename DeviceType::execution_space; + typedef View locks_type; typedef View state_data_type; - lock_type locks_; + locks_type locks_; state_data_type state_; int num_states_; @@ -695,11 +844,8 @@ class Random_XorShift64_Pool { Random_XorShift64_Pool() { num_states_ = 0; } Random_XorShift64_Pool(uint64_t seed) { num_states_ = 0; -#ifdef KOKKOS_ENABLE_DEPRECATED_CODE - init(seed, DeviceType::max_hardware_threads()); -#else - init(seed, DeviceType::impl_max_hardware_threads()); -#endif + + init(seed, execution_space().concurrency()); } KOKKOS_INLINE_FUNCTION @@ -719,11 +865,11 @@ class Random_XorShift64_Pool { num_states_ = num_states; - locks_ = lock_type("Kokkos::Random_XorShift64::locks", num_states_); + locks_ = locks_type("Kokkos::Random_XorShift64::locks", num_states_); state_ = state_data_type("Kokkos::Random_XorShift64::state", num_states_); typename state_data_type::HostMirror h_state = create_mirror_view(state_); - typename lock_type::HostMirror h_lock = create_mirror_view(locks_); + typename locks_type::HostMirror h_lock = create_mirror_view(locks_); // Execute on the HostMirror's default execution space. Random_XorShift64 @@ -746,13 +892,8 @@ class Random_XorShift64_Pool { KOKKOS_INLINE_FUNCTION Random_XorShift64 get_state() const { -#ifdef KOKKOS_ENABLE_DEPRECATED_CODE - const int i = DeviceType::hardware_thread_id(); - ; -#else - const int i = DeviceType::impl_hardware_thread_id(); - ; -#endif + const int i = + Impl::Random_UniqueIndex::get_state_idx(locks_); return Random_XorShift64(state_(i), i); } @@ -765,35 +906,35 @@ class Random_XorShift64_Pool { KOKKOS_INLINE_FUNCTION void free_state(const Random_XorShift64& state) const { state_(state.state_idx_) = state.state_; + locks_(state.state_idx_) = 0; } }; -template -class Random_XorShift1024_Pool; - template class Random_XorShift1024 { + using execution_space = typename DeviceType::execution_space; + private: int p_; const int state_idx_; - uint64_t state_[16]; + Impl::Random_XorShift1024_State< + Impl::Random_XorShift1024_UseCArrayState::value> + state_; friend class Random_XorShift1024_Pool; public: typedef Random_XorShift1024_Pool pool_type; typedef DeviceType device_type; - enum { MAX_URAND = 0xffffffffU }; - enum { MAX_URAND64 = 0xffffffffffffffffULL - 1 }; - enum { MAX_RAND = static_cast(0xffffffffU / 2) }; - enum { MAX_RAND64 = static_cast(0xffffffffffffffffULL / 2 - 1) }; + constexpr static uint32_t MAX_URAND = std::numeric_limits::max(); + constexpr static uint64_t MAX_URAND64 = std::numeric_limits::max(); + constexpr static int32_t MAX_RAND = std::numeric_limits::max(); + constexpr static int64_t MAX_RAND64 = std::numeric_limits::max(); KOKKOS_INLINE_FUNCTION Random_XorShift1024(const typename pool_type::state_data_type& state, int p, int state_idx = 0) - : p_(p), state_idx_(state_idx) { - for (int i = 0; i < 16; i++) state_[i] = state(state_idx, i); - } + : p_(p), state_idx_(state_idx), state_(state, state_idx) {} KOKKOS_INLINE_FUNCTION uint32_t urand() { @@ -876,10 +1017,12 @@ class Random_XorShift1024 { } KOKKOS_INLINE_FUNCTION - float frand() { return 1.0f * urand64() / MAX_URAND64; } + float frand() { return urand64() / static_cast(MAX_URAND64); } KOKKOS_INLINE_FUNCTION - float frand(const float& range) { return range * urand64() / MAX_URAND64; } + float frand(const float& range) { + return range * urand64() / static_cast(MAX_URAND64); + } KOKKOS_INLINE_FUNCTION float frand(const float& start, const float& end) { @@ -887,10 +1030,12 @@ class Random_XorShift1024 { } KOKKOS_INLINE_FUNCTION - double drand() { return 1.0 * urand64() / MAX_URAND64; } + double drand() { return urand64() / static_cast(MAX_URAND64); } KOKKOS_INLINE_FUNCTION - double drand(const double& range) { return range * urand64() / MAX_URAND64; } + double drand(const double& range) { + return range * urand64() / static_cast(MAX_URAND64); + } KOKKOS_INLINE_FUNCTION double drand(const double& start, const double& end) { @@ -901,6 +1046,11 @@ class Random_XorShift1024 { // number KOKKOS_INLINE_FUNCTION double normal() { +#ifndef KOKKOS_ENABLE_HIP // FIXME_HIP + using std::sqrt; +#else + using ::sqrt; +#endif double S = 2.0; double U; while (S >= 1.0) { @@ -908,7 +1058,7 @@ class Random_XorShift1024 { const double V = 2.0 * drand() - 1.0; S = U * U + V * V; } - return U * std::sqrt(-2.0 * log(S) / S); + return U * sqrt(-2.0 * log(S) / S); } KOKKOS_INLINE_FUNCTION @@ -920,10 +1070,12 @@ class Random_XorShift1024 { template class Random_XorShift1024_Pool { private: + using execution_space = typename DeviceType::execution_space; + typedef View locks_type; typedef View int_view_type; typedef View state_data_type; - int_view_type locks_; + locks_type locks_; state_data_type state_; int_view_type p_; int num_states_; @@ -939,11 +1091,8 @@ class Random_XorShift1024_Pool { inline Random_XorShift1024_Pool(uint64_t seed) { num_states_ = 0; -#ifdef KOKKOS_ENABLE_DEPRECATED_CODE - init(seed, DeviceType::max_hardware_threads()); -#else - init(seed, DeviceType::impl_max_hardware_threads()); -#endif + + init(seed, execution_space().concurrency()); } KOKKOS_INLINE_FUNCTION @@ -965,12 +1114,12 @@ class Random_XorShift1024_Pool { inline void init(uint64_t seed, int num_states) { if (seed == 0) seed = uint64_t(1318319); num_states_ = num_states; - locks_ = int_view_type("Kokkos::Random_XorShift1024::locks", num_states_); + locks_ = locks_type("Kokkos::Random_XorShift1024::locks", num_states_); state_ = state_data_type("Kokkos::Random_XorShift1024::state", num_states_); p_ = int_view_type("Kokkos::Random_XorShift1024::p", num_states_); typename state_data_type::HostMirror h_state = create_mirror_view(state_); - typename int_view_type::HostMirror h_lock = create_mirror_view(locks_); + typename locks_type::HostMirror h_lock = create_mirror_view(locks_); typename int_view_type::HostMirror h_p = create_mirror_view(p_); // Execute on the HostMirror's default execution space. @@ -997,11 +1146,8 @@ class Random_XorShift1024_Pool { KOKKOS_INLINE_FUNCTION Random_XorShift1024 get_state() const { -#ifdef KOKKOS_ENABLE_DEPRECATED_CODE - const int i = DeviceType::hardware_thread_id(); -#else - const int i = DeviceType::impl_hardware_thread_id(); -#endif + const int i = + Impl::Random_UniqueIndex::get_state_idx(locks_); return Random_XorShift1024(state_, p_(i), i); }; @@ -1014,482 +1160,11 @@ class Random_XorShift1024_Pool { KOKKOS_INLINE_FUNCTION void free_state(const Random_XorShift1024& state) const { for (int i = 0; i < 16; i++) state_(state.state_idx_, i) = state.state_[i]; - p_(state.state_idx_) = state.p_; + p_(state.state_idx_) = state.p_; + locks_(state.state_idx_) = 0; } }; -#if defined(KOKKOS_ENABLE_CUDA) && defined(__CUDACC__) - -template <> -class Random_XorShift1024 { - private: - int p_; - const int state_idx_; - uint64_t* state_; - const int stride_; - friend class Random_XorShift1024_Pool; - - public: - typedef Kokkos::Cuda device_type; - typedef Random_XorShift1024_Pool pool_type; - - enum { MAX_URAND = 0xffffffffU }; - enum { MAX_URAND64 = 0xffffffffffffffffULL - 1 }; - enum { MAX_RAND = static_cast(0xffffffffU / 2) }; - enum { MAX_RAND64 = static_cast(0xffffffffffffffffULL / 2 - 1) }; - - KOKKOS_INLINE_FUNCTION - Random_XorShift1024(const typename pool_type::state_data_type& state, int p, - int state_idx = 0) - : p_(p), - state_idx_(state_idx), - state_(&state(state_idx, 0)), - stride_(state.stride_1()) {} - - KOKKOS_INLINE_FUNCTION - uint32_t urand() { - uint64_t state_0 = state_[p_ * stride_]; - uint64_t state_1 = state_[(p_ = (p_ + 1) & 15) * stride_]; - state_1 ^= state_1 << 31; - state_1 ^= state_1 >> 11; - state_0 ^= state_0 >> 30; - uint64_t tmp = - (state_[p_ * stride_] = state_0 ^ state_1) * 1181783497276652981ULL; - tmp = tmp >> 16; - return static_cast(tmp & MAX_URAND); - } - - KOKKOS_INLINE_FUNCTION - uint64_t urand64() { - uint64_t state_0 = state_[p_ * stride_]; - uint64_t state_1 = state_[(p_ = (p_ + 1) & 15) * stride_]; - state_1 ^= state_1 << 31; - state_1 ^= state_1 >> 11; - state_0 ^= state_0 >> 30; - return ((state_[p_ * stride_] = state_0 ^ state_1) * - 1181783497276652981LL) - - 1; - } - - KOKKOS_INLINE_FUNCTION - uint32_t urand(const uint32_t& range) { - const uint32_t max_val = (MAX_URAND / range) * range; - uint32_t tmp = urand(); - while (tmp >= max_val) urand(); - return tmp % range; - } - - KOKKOS_INLINE_FUNCTION - uint32_t urand(const uint32_t& start, const uint32_t& end) { - return urand(end - start) + start; - } - - KOKKOS_INLINE_FUNCTION - uint64_t urand64(const uint64_t& range) { - const uint64_t max_val = (MAX_URAND64 / range) * range; - uint64_t tmp = urand64(); - while (tmp >= max_val) urand64(); - return tmp % range; - } - - KOKKOS_INLINE_FUNCTION - uint64_t urand64(const uint64_t& start, const uint64_t& end) { - return urand64(end - start) + start; - } - - KOKKOS_INLINE_FUNCTION - int rand() { return static_cast(urand() / 2); } - - KOKKOS_INLINE_FUNCTION - int rand(const int& range) { - const int max_val = (MAX_RAND / range) * range; - int tmp = rand(); - while (tmp >= max_val) rand(); - return tmp % range; - } - - KOKKOS_INLINE_FUNCTION - int rand(const int& start, const int& end) { - return rand(end - start) + start; - } - - KOKKOS_INLINE_FUNCTION - int64_t rand64() { return static_cast(urand64() / 2); } - - KOKKOS_INLINE_FUNCTION - int64_t rand64(const int64_t& range) { - const int64_t max_val = (MAX_RAND64 / range) * range; - int64_t tmp = rand64(); - while (tmp >= max_val) rand64(); - return tmp % range; - } - - KOKKOS_INLINE_FUNCTION - int64_t rand64(const int64_t& start, const int64_t& end) { - return rand64(end - start) + start; - } - - KOKKOS_INLINE_FUNCTION - float frand() { return 1.0f * urand64() / MAX_URAND64; } - - KOKKOS_INLINE_FUNCTION - float frand(const float& range) { return range * urand64() / MAX_URAND64; } - - KOKKOS_INLINE_FUNCTION - float frand(const float& start, const float& end) { - return frand(end - start) + start; - } - - KOKKOS_INLINE_FUNCTION - double drand() { return 1.0 * urand64() / MAX_URAND64; } - - KOKKOS_INLINE_FUNCTION - double drand(const double& range) { return range * urand64() / MAX_URAND64; } - - KOKKOS_INLINE_FUNCTION - double drand(const double& start, const double& end) { - return frand(end - start) + start; - } - - // Marsaglia polar method for drawing a standard normal distributed random - // number - KOKKOS_INLINE_FUNCTION - double normal() { - double S = 2.0; - double U; - while (S >= 1.0) { - U = 2.0 * drand() - 1.0; - const double V = 2.0 * drand() - 1.0; - S = U * U + V * V; - } - return U * std::sqrt(-2.0 * log(S) / S); - } - - KOKKOS_INLINE_FUNCTION - double normal(const double& mean, const double& std_dev = 1.0) { - return mean + normal() * std_dev; - } -}; - -template <> -inline Random_XorShift64_Pool::Random_XorShift64_Pool( - uint64_t seed) { - num_states_ = 0; - init(seed, 4 * 32768); -} - -template <> -KOKKOS_INLINE_FUNCTION Random_XorShift64 -Random_XorShift64_Pool::get_state() const { -#ifdef __CUDA_ARCH__ - const int i_offset = - (threadIdx.x * blockDim.y + threadIdx.y) * blockDim.z + threadIdx.z; - int i = (((blockIdx.x * gridDim.y + blockIdx.y) * gridDim.z + blockIdx.z) * - blockDim.x * blockDim.y * blockDim.z + - i_offset) % - num_states_; - while (Kokkos::atomic_compare_exchange(&locks_(i), 0, 1)) { - i += blockDim.x * blockDim.y * blockDim.z; - if (i >= num_states_) { - i = i_offset; - } - } - - return Random_XorShift64(state_(i), i); -#else - return Random_XorShift64(state_(0), 0); -#endif -} - -template <> -KOKKOS_INLINE_FUNCTION void Random_XorShift64_Pool::free_state( - const Random_XorShift64& state) const { - state_(state.state_idx_) = state.state_; -#ifdef __CUDA_ARCH__ - locks_(state.state_idx_) = 0; - return; -#endif -} - -template <> -inline Random_XorShift1024_Pool::Random_XorShift1024_Pool( - uint64_t seed) { - num_states_ = 0; - init(seed, 4 * 32768); -} - -template <> -KOKKOS_INLINE_FUNCTION Random_XorShift1024 -Random_XorShift1024_Pool::get_state() const { -#ifdef __CUDA_ARCH__ - const int i_offset = - (threadIdx.x * blockDim.y + threadIdx.y) * blockDim.z + threadIdx.z; - int i = (((blockIdx.x * gridDim.y + blockIdx.y) * gridDim.z + blockIdx.z) * - blockDim.x * blockDim.y * blockDim.z + - i_offset) % - num_states_; - while (Kokkos::atomic_compare_exchange(&locks_(i), 0, 1)) { - i += blockDim.x * blockDim.y * blockDim.z; - if (i >= num_states_) { - i = i_offset; - } - } - - return Random_XorShift1024(state_, p_(i), i); -#else - return Random_XorShift1024(state_, p_(0), 0); -#endif -} - -template <> -KOKKOS_INLINE_FUNCTION void Random_XorShift1024_Pool::free_state( - const Random_XorShift1024& state) const { - for (int i = 0; i < 16; i++) state_(state.state_idx_, i) = state.state_[i]; -#ifdef __CUDA_ARCH__ - locks_(state.state_idx_) = 0; - return; -#endif -} - -#endif - -#if defined(KOKKOS_ENABLE_ROCM) - -template <> -class Random_XorShift1024 { - private: - int p_; - const int state_idx_; - uint64_t* state_; - const int stride_; - friend class Random_XorShift1024_Pool; - - public: - typedef Kokkos::Experimental::ROCm device_type; - typedef Random_XorShift1024_Pool pool_type; - - enum { MAX_URAND = 0xffffffffU }; - enum { MAX_URAND64 = 0xffffffffffffffffULL - 1 }; - enum { MAX_RAND = static_cast(0xffffffffU / 2) }; - enum { MAX_RAND64 = static_cast(0xffffffffffffffffULL / 2 - 1) }; - - KOKKOS_INLINE_FUNCTION - Random_XorShift1024(const typename pool_type::state_data_type& state, int p, - int state_idx = 0) - : p_(p), - state_idx_(state_idx), - state_(&state(state_idx, 0)), - stride_(state.stride_1()) {} - - KOKKOS_INLINE_FUNCTION - uint32_t urand() { - uint64_t state_0 = state_[p_ * stride_]; - uint64_t state_1 = state_[(p_ = (p_ + 1) & 15) * stride_]; - state_1 ^= state_1 << 31; - state_1 ^= state_1 >> 11; - state_0 ^= state_0 >> 30; - uint64_t tmp = - (state_[p_ * stride_] = state_0 ^ state_1) * 1181783497276652981ULL; - tmp = tmp >> 16; - return static_cast(tmp & MAX_URAND); - } - - KOKKOS_INLINE_FUNCTION - uint64_t urand64() { - uint64_t state_0 = state_[p_ * stride_]; - uint64_t state_1 = state_[(p_ = (p_ + 1) & 15) * stride_]; - state_1 ^= state_1 << 31; - state_1 ^= state_1 >> 11; - state_0 ^= state_0 >> 30; - return ((state_[p_ * stride_] = state_0 ^ state_1) * - 1181783497276652981LL) - - 1; - } - - KOKKOS_INLINE_FUNCTION - uint32_t urand(const uint32_t& range) { - const uint32_t max_val = (MAX_URAND / range) * range; - uint32_t tmp = urand(); - while (tmp >= max_val) urand(); - return tmp % range; - } - - KOKKOS_INLINE_FUNCTION - uint32_t urand(const uint32_t& start, const uint32_t& end) { - return urand(end - start) + start; - } - - KOKKOS_INLINE_FUNCTION - uint64_t urand64(const uint64_t& range) { - const uint64_t max_val = (MAX_URAND64 / range) * range; - uint64_t tmp = urand64(); - while (tmp >= max_val) urand64(); - return tmp % range; - } - - KOKKOS_INLINE_FUNCTION - uint64_t urand64(const uint64_t& start, const uint64_t& end) { - return urand64(end - start) + start; - } - - KOKKOS_INLINE_FUNCTION - int rand() { return static_cast(urand() / 2); } - - KOKKOS_INLINE_FUNCTION - int rand(const int& range) { - const int max_val = (MAX_RAND / range) * range; - int tmp = rand(); - while (tmp >= max_val) rand(); - return tmp % range; - } - - KOKKOS_INLINE_FUNCTION - int rand(const int& start, const int& end) { - return rand(end - start) + start; - } - - KOKKOS_INLINE_FUNCTION - int64_t rand64() { return static_cast(urand64() / 2); } - - KOKKOS_INLINE_FUNCTION - int64_t rand64(const int64_t& range) { - const int64_t max_val = (MAX_RAND64 / range) * range; - int64_t tmp = rand64(); - while (tmp >= max_val) rand64(); - return tmp % range; - } - - KOKKOS_INLINE_FUNCTION - int64_t rand64(const int64_t& start, const int64_t& end) { - return rand64(end - start) + start; - } - - KOKKOS_INLINE_FUNCTION - float frand() { return 1.0f * urand64() / MAX_URAND64; } - - KOKKOS_INLINE_FUNCTION - float frand(const float& range) { return range * urand64() / MAX_URAND64; } - - KOKKOS_INLINE_FUNCTION - float frand(const float& start, const float& end) { - return frand(end - start) + start; - } - - KOKKOS_INLINE_FUNCTION - double drand() { return 1.0 * urand64() / MAX_URAND64; } - - KOKKOS_INLINE_FUNCTION - double drand(const double& range) { return range * urand64() / MAX_URAND64; } - - KOKKOS_INLINE_FUNCTION - double drand(const double& start, const double& end) { - return frand(end - start) + start; - } - - // Marsaglia polar method for drawing a standard normal distributed random - // number - KOKKOS_INLINE_FUNCTION - double normal() { - double S = 2.0; - double U; - while (S >= 1.0) { - U = 2.0 * drand() - 1.0; - const double V = 2.0 * drand() - 1.0; - S = U * U + V * V; - } - return U * std::sqrt(-2.0 * log(S) / S); - } - - KOKKOS_INLINE_FUNCTION - double normal(const double& mean, const double& std_dev = 1.0) { - return mean + normal() * std_dev; - } -}; - -template <> -inline Random_XorShift64_Pool< - Kokkos::Experimental::ROCm>::Random_XorShift64_Pool(uint64_t seed) { - num_states_ = 0; - init(seed, 4 * 32768); -} - -template <> -KOKKOS_INLINE_FUNCTION Random_XorShift64 -Random_XorShift64_Pool::get_state() const { -#ifdef __HCC_ACCELERATOR__ - const int i_offset = - (threadIdx_x * blockDim_y + threadIdx_y) * blockDim_z + threadIdx_z; - int i = (((blockIdx_x * gridDim_y + blockIdx_y) * gridDim_z + blockIdx_z) * - blockDim_x * blockDim_y * blockDim_z + - i_offset) % - num_states_; - while (Kokkos::atomic_compare_exchange(&locks_(i), 0, 1)) { - i += blockDim_x * blockDim_y * blockDim_z; - if (i >= num_states_) { - i = i_offset; - } - } - - return Random_XorShift64(state_(i), i); -#else - return Random_XorShift64(state_(0), 0); -#endif -} - -template <> -KOKKOS_INLINE_FUNCTION void -Random_XorShift64_Pool::free_state( - const Random_XorShift64& state) const { -#ifdef __HCC_ACCELERATOR__ - state_(state.state_idx_) = state.state_; - locks_(state.state_idx_) = 0; - return; -#endif -} - -template <> -inline Random_XorShift1024_Pool< - Kokkos::Experimental::ROCm>::Random_XorShift1024_Pool(uint64_t seed) { - num_states_ = 0; - init(seed, 4 * 32768); -} - -template <> -KOKKOS_INLINE_FUNCTION Random_XorShift1024 -Random_XorShift1024_Pool::get_state() const { -#ifdef __HCC_ACCELERATOR__ - const int i_offset = - (threadIdx_x * blockDim_y + threadIdx_y) * blockDim_z + threadIdx_z; - int i = (((blockIdx_x * gridDim_y + blockIdx_y) * gridDim_z + blockIdx_z) * - blockDim_x * blockDim_y * blockDim_z + - i_offset) % - num_states_; - while (Kokkos::atomic_compare_exchange(&locks_(i), 0, 1)) { - i += blockDim_x * blockDim_y * blockDim_z; - if (i >= num_states_) { - i = i_offset; - } - } - - return Random_XorShift1024(state_, p_(i), i); -#else - return Random_XorShift1024(state_, p_(0), 0); -#endif -} - -template <> -KOKKOS_INLINE_FUNCTION void -Random_XorShift1024_Pool::free_state( - const Random_XorShift1024& state) const { -#ifdef __HCC_ACCELERATOR__ - for (int i = 0; i < 16; i++) state_(state.state_idx_, i) = state.state_[i]; - locks_(state.state_idx_) = 0; - return; -#endif -} - -#endif - namespace Impl { template 0) - parallel_for((LDA + 127) / 128, + parallel_for("Kokkos::fill_random", (LDA + 127) / 128, Impl::fill_random_functor_range( a, g, range)); @@ -2055,7 +1730,7 @@ void fill_random(ViewType a, RandomPool g, typename ViewType::const_value_type end) { int64_t LDA = a.extent(0); if (LDA > 0) - parallel_for((LDA + 127) / 128, + parallel_for("Kokkos::fill_random", (LDA + 127) / 128, Impl::fill_random_functor_begin_end( a, g, begin, end)); diff --git a/lib/kokkos/algorithms/src/Kokkos_Sort.hpp b/lib/kokkos/algorithms/src/Kokkos_Sort.hpp index b7a988361f52f382263beb2725758468138fec4f..1c79a505bb916a5190a37961620349b10a1babe5 100644 --- a/lib/kokkos/algorithms/src/Kokkos_Sort.hpp +++ b/lib/kokkos/algorithms/src/Kokkos_Sort.hpp @@ -201,7 +201,7 @@ class BinSort { bool sort_within_bins; public: - BinSort() {} + BinSort() = default; //---------------------------------------- // Constructor: takes the keys, the binning_operator and optionally whether to @@ -327,7 +327,7 @@ class BinSort { Kokkos::RangePolicy(0, len), functor); } - Kokkos::fence(); + execution_space().fence(); } template @@ -349,14 +349,14 @@ class BinSort { public: KOKKOS_INLINE_FUNCTION - void operator()(const bin_count_tag& tag, const int& i) const { + void operator()(const bin_count_tag& /*tag*/, const int i) const { const int j = range_begin + i; bin_count_atomic(bin_op.bin(keys, j))++; } KOKKOS_INLINE_FUNCTION - void operator()(const bin_offset_tag& tag, const int& i, value_type& offset, - const bool& final) const { + void operator()(const bin_offset_tag& /*tag*/, const int i, + value_type& offset, const bool& final) const { if (final) { bin_offsets(i) = offset; } @@ -364,7 +364,7 @@ class BinSort { } KOKKOS_INLINE_FUNCTION - void operator()(const bin_binning_tag& tag, const int& i) const { + void operator()(const bin_binning_tag& /*tag*/, const int i) const { const int j = range_begin + i; const int bin = bin_op.bin(keys, j); const int count = bin_count_atomic(bin)++; @@ -373,7 +373,7 @@ class BinSort { } KOKKOS_INLINE_FUNCTION - void operator()(const bin_sort_bins_tag& tag, const int& i) const { + void operator()(const bin_sort_bins_tag& /*tag*/, const int i) const { auto bin_size = bin_count_const(i); if (bin_size <= 1) return; int upper_bound = bin_offsets(i) + bin_size; @@ -381,7 +381,7 @@ class BinSort { while (!sorted) { sorted = true; int old_idx = sort_order(bin_offsets(i)); - int new_idx; + int new_idx = 0; for (int k = bin_offsets(i) + 1; k < upper_bound; k++) { new_idx = sort_order(k); @@ -446,7 +446,7 @@ struct BinOp3D { typename KeyViewType::non_const_value_type range_[3]; typename KeyViewType::non_const_value_type min_[3]; - BinOp3D() {} + BinOp3D() = default; BinOp3D(int max_bins__[], typename KeyViewType::const_value_type min[], typename KeyViewType::const_value_type max[]) { diff --git a/lib/kokkos/algorithms/unit_tests/CMakeLists.txt b/lib/kokkos/algorithms/unit_tests/CMakeLists.txt index 6fb08ce2edb8b8632969b00bd69fdb495ce73cf2..e3563a8b98bca7cf853df4e1deeae8ab9a34ee6b 100644 --- a/lib/kokkos/algorithms/unit_tests/CMakeLists.txt +++ b/lib/kokkos/algorithms/unit_tests/CMakeLists.txt @@ -20,16 +20,38 @@ KOKKOS_ADD_TEST_LIBRARY( HEADERS ${GTEST_SOURCE_DIR}/gtest/gtest.h SOURCES ${GTEST_SOURCE_DIR}/gtest/gtest-all.cc ) -KOKKOS_TARGET_COMPILE_DEFINITIONS(kokkosalgorithms_gtest PUBLIC "-DGTEST_HAS_PTHREAD=0") +# WORKAROUND FOR HIPCC +IF(Kokkos_ENABLE_HIP) + TARGET_COMPILE_DEFINITIONS(kokkosalgorithms_gtest PUBLIC "-DGTEST_HAS_PTHREAD=0 --amdgpu-target=gfx906") +ELSE() + TARGET_COMPILE_DEFINITIONS(kokkosalgorithms_gtest PUBLIC "-DGTEST_HAS_PTHREAD=0") +ENDIF() + +TARGET_COMPILE_FEATURES(kokkosalgorithms_gtest PUBLIC cxx_std_11) SET(SOURCES - UnitTestMain.cpp - TestCuda.cpp - ) + UnitTestMain.cpp +) IF(Kokkos_ENABLE_OPENMP) LIST( APPEND SOURCES TestOpenMP.cpp + TestOpenMP_Sort1D.cpp + TestOpenMP_Sort3D.cpp + TestOpenMP_SortDynamicView.cpp + TestOpenMP_Random.cpp + ) +ENDIF() + +IF(Kokkos_ENABLE_HIP) + LIST( APPEND SOURCES + TestHIP.cpp + ) +ENDIF() + +IF(Kokkos_ENABLE_CUDA) + LIST( APPEND SOURCES + TestCuda.cpp ) ENDIF() diff --git a/lib/kokkos/algorithms/unit_tests/Makefile b/lib/kokkos/algorithms/unit_tests/Makefile index 3c862d03dc9a40aa5e8fb7de630ae36aa5ed7116..4a192b08ec88362b31dccec25c7d79de01ea3abd 100644 --- a/lib/kokkos/algorithms/unit_tests/Makefile +++ b/lib/kokkos/algorithms/unit_tests/Makefile @@ -44,7 +44,7 @@ ifeq ($(KOKKOS_INTERNAL_USE_PTHREADS), 1) endif ifeq ($(KOKKOS_INTERNAL_USE_OPENMP), 1) - OBJ_OPENMP = TestOpenMP.o UnitTestMain.o gtest-all.o + OBJ_OPENMP = TestOpenMP.o TestOpenMP_Random.o TestOpenMP_Sort1D.o TestOpenMP_Sort3D.o TestOpenMP_SortDynamicView.o UnitTestMain.o gtest-all.o TARGETS += KokkosAlgorithms_UnitTest_OpenMP TEST_TARGETS += test-openmp endif diff --git a/lib/kokkos/algorithms/unit_tests/TestCuda.cpp b/lib/kokkos/algorithms/unit_tests/TestCuda.cpp index ab727b0326dd2d456845c39d5e8b5173a667d6bc..86cee61f64f31800515e25a6052e8ac599ee423e 100644 --- a/lib/kokkos/algorithms/unit_tests/TestCuda.cpp +++ b/lib/kokkos/algorithms/unit_tests/TestCuda.cpp @@ -59,11 +59,15 @@ namespace Test { void cuda_test_random_xorshift64(int num_draws) { - Impl::test_random >(num_draws); + Impl::test_random>(num_draws); + Impl::test_random>>(num_draws); } void cuda_test_random_xorshift1024(int num_draws) { - Impl::test_random >(num_draws); + Impl::test_random>(num_draws); + Impl::test_random>>(num_draws); } #define CUDA_RANDOM_XORSHIFT64(num_draws) \ diff --git a/lib/kokkos/algorithms/unit_tests/TestHIP.cpp b/lib/kokkos/algorithms/unit_tests/TestHIP.cpp new file mode 100644 index 0000000000000000000000000000000000000000..5e5ccb6a2eb8e988986eaa4ce06e34cf028bf6ed --- /dev/null +++ b/lib/kokkos/algorithms/unit_tests/TestHIP.cpp @@ -0,0 +1,83 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 3.0 +// Copyright (2020) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +#include +#ifdef KOKKOS_ENABLE_HIP + +#include +#include +#include + +#include + +#include + +#include +#include + +namespace Test { + +void hip_test_random_xorshift64(size_t num_draws) { + Impl::test_random>( + num_draws); + Impl::test_random>>(num_draws); +} + +void hip_test_random_xorshift1024(size_t num_draws) { + Impl::test_random< + Kokkos::Random_XorShift1024_Pool>(num_draws); + Impl::test_random>>(num_draws); +} + +TEST(hip, Random_XorShift64) { hip_test_random_xorshift64(132141141); } +TEST(hip, Random_XorShift1024_0) { hip_test_random_xorshift1024(52428813); } +TEST(hip, SortUnsigned) { + Impl::test_sort(171); +} +} // namespace Test +#else +void KOKKOS_ALGORITHMS_UNITTESTS_TESTHIP_PREVENT_LINK_ERROR() {} +#endif /* #ifdef KOKKOS_ENABLE_HIP */ diff --git a/lib/kokkos/algorithms/unit_tests/TestOpenMP.cpp b/lib/kokkos/algorithms/unit_tests/TestOpenMP.cpp index 3a9e306014b27a2c80b1c133b2f61873c2337325..5ded3ce39065dc5fb7510973de40577703429f8d 100644 --- a/lib/kokkos/algorithms/unit_tests/TestOpenMP.cpp +++ b/lib/kokkos/algorithms/unit_tests/TestOpenMP.cpp @@ -55,30 +55,8 @@ namespace Test { -#define OPENMP_RANDOM_XORSHIFT64(num_draws) \ - TEST(openmp, Random_XorShift64) { \ - Impl::test_random >( \ - num_draws); \ - } +TEST(openmp, SortIssue1160) { Impl::test_issue_1160_sort(); } -#define OPENMP_RANDOM_XORSHIFT1024(num_draws) \ - TEST(openmp, Random_XorShift1024) { \ - Impl::test_random >( \ - num_draws); \ - } - -#define OPENMP_SORT_UNSIGNED(size) \ - TEST(openmp, SortUnsigned) { \ - Impl::test_sort(size); \ - } - -OPENMP_RANDOM_XORSHIFT64(10240000) -OPENMP_RANDOM_XORSHIFT1024(10130144) -OPENMP_SORT_UNSIGNED(171) - -#undef OPENMP_RANDOM_XORSHIFT64 -#undef OPENMP_RANDOM_XORSHIFT1024 -#undef OPENMP_SORT_UNSIGNED } // namespace Test #else void KOKKOS_ALGORITHMS_UNITTESTS_TESTOPENMP_PREVENT_LINK_ERROR() {} diff --git a/lib/kokkos/algorithms/unit_tests/TestOpenMP_Random.cpp b/lib/kokkos/algorithms/unit_tests/TestOpenMP_Random.cpp new file mode 100644 index 0000000000000000000000000000000000000000..1ca8e0a828f06176c0959c744fe20045856534b2 --- /dev/null +++ b/lib/kokkos/algorithms/unit_tests/TestOpenMP_Random.cpp @@ -0,0 +1,77 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 3.0 +// Copyright (2020) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +#include +#ifdef KOKKOS_ENABLE_OPENMP + +#include +#include + +//---------------------------------------------------------------------------- +#include +#include + +namespace Test { + +#define OPENMP_RANDOM_XORSHIFT64(num_draws) \ + TEST(openmp, Random_XorShift64) { \ + Impl::test_random >( \ + num_draws); \ + } + +#define OPENMP_RANDOM_XORSHIFT1024(num_draws) \ + TEST(openmp, Random_XorShift1024) { \ + Impl::test_random >( \ + num_draws); \ + } + +OPENMP_RANDOM_XORSHIFT64(10240000) +OPENMP_RANDOM_XORSHIFT1024(10130144) + +#undef OPENMP_RANDOM_XORSHIFT64 +#undef OPENMP_RANDOM_XORSHIFT1024 +} // namespace Test +#else +void KOKKOS_ALGORITHMS_UNITTESTS_TESTOPENMP_PREVENT_LINK_ERROR() {} +#endif diff --git a/lib/kokkos/algorithms/unit_tests/TestOpenMP_Sort1D.cpp b/lib/kokkos/algorithms/unit_tests/TestOpenMP_Sort1D.cpp new file mode 100644 index 0000000000000000000000000000000000000000..a9b2010ad025bd0c967071aca37407bea4a351bf --- /dev/null +++ b/lib/kokkos/algorithms/unit_tests/TestOpenMP_Sort1D.cpp @@ -0,0 +1,65 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 3.0 +// Copyright (2020) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +#include +#ifdef KOKKOS_ENABLE_OPENMP + +#include +#include + +//---------------------------------------------------------------------------- +#include +#include +#include + +namespace Test { + +TEST(openmp, SortUnsigned1D) { + Impl::test_1D_sort(171); +} + +} // namespace Test +#else +void KOKKOS_ALGORITHMS_UNITTESTS_TESTOPENMP_PREVENT_LINK_ERROR() {} +#endif diff --git a/lib/kokkos/algorithms/unit_tests/TestOpenMP_Sort3D.cpp b/lib/kokkos/algorithms/unit_tests/TestOpenMP_Sort3D.cpp new file mode 100644 index 0000000000000000000000000000000000000000..127d911d7ca3856957646698b431089b5deb2caa --- /dev/null +++ b/lib/kokkos/algorithms/unit_tests/TestOpenMP_Sort3D.cpp @@ -0,0 +1,65 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 3.0 +// Copyright (2020) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +#include +#ifdef KOKKOS_ENABLE_OPENMP + +#include +#include + +//---------------------------------------------------------------------------- +#include +#include +#include + +namespace Test { + +TEST(openmp, SortUnsigned3D) { + Impl::test_3D_sort(171); +} + +} // namespace Test +#else +void KOKKOS_ALGORITHMS_UNITTESTS_TESTOPENMP_PREVENT_LINK_ERROR() {} +#endif diff --git a/lib/kokkos/algorithms/unit_tests/TestOpenMP_SortDynamicView.cpp b/lib/kokkos/algorithms/unit_tests/TestOpenMP_SortDynamicView.cpp new file mode 100644 index 0000000000000000000000000000000000000000..3dc88540443f7af219b18b85425408afbc1fda6e --- /dev/null +++ b/lib/kokkos/algorithms/unit_tests/TestOpenMP_SortDynamicView.cpp @@ -0,0 +1,65 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 3.0 +// Copyright (2020) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +#include +#ifdef KOKKOS_ENABLE_OPENMP + +#include +#include + +//---------------------------------------------------------------------------- +#include +#include +#include + +namespace Test { + +TEST(openmp, SortUnsignedDynamicView) { + Impl::test_dynamic_view_sort(171); +} + +} // namespace Test +#else +void KOKKOS_ALGORITHMS_UNITTESTS_TESTOPENMP_PREVENT_LINK_ERROR() {} +#endif diff --git a/lib/kokkos/algorithms/unit_tests/TestRandom.hpp b/lib/kokkos/algorithms/unit_tests/TestRandom.hpp index bc55ebfad355bff785ad92d115ac45cff698482f..10a496242b692ba9987ca8b1bf62812cd189235f 100644 --- a/lib/kokkos/algorithms/unit_tests/TestRandom.hpp +++ b/lib/kokkos/algorithms/unit_tests/TestRandom.hpp @@ -140,7 +140,7 @@ struct test_random_functor { density_3d(d3d) {} KOKKOS_INLINE_FUNCTION - void operator()(int i, RandomProperties& prop) const { + void operator()(int /*i*/, RandomProperties& prop) const { using Kokkos::atomic_fetch_add; rnd_type rand_gen = rand_pool.get_state(); diff --git a/lib/kokkos/algorithms/unit_tests/TestSort.hpp b/lib/kokkos/algorithms/unit_tests/TestSort.hpp index 310a93c93d1d55baad4d33d9d34540ca523c9433..b6ff91c25fa9b6c28bea35f6ac5f5df2800a4121 100644 --- a/lib/kokkos/algorithms/unit_tests/TestSort.hpp +++ b/lib/kokkos/algorithms/unit_tests/TestSort.hpp @@ -130,7 +130,7 @@ struct sum3D { }; template -void test_1D_sort(unsigned int n, bool force_kokkos) { +void test_1D_sort_impl(unsigned int n, bool force_kokkos) { typedef Kokkos::View KeyViewType; KeyViewType keys("Keys", n); @@ -165,7 +165,7 @@ void test_1D_sort(unsigned int n, bool force_kokkos) { } template -void test_3D_sort(unsigned int n) { +void test_3D_sort_impl(unsigned int n) { typedef Kokkos::View KeyViewType; KeyViewType keys("Keys", n * n * n); @@ -214,7 +214,7 @@ void test_3D_sort(unsigned int n) { //---------------------------------------------------------------------------- template -void test_dynamic_view_sort(unsigned int n) { +void test_dynamic_view_sort_impl(unsigned int n) { typedef Kokkos::Experimental::DynamicView KeyDynamicViewType; typedef Kokkos::View KeyViewType; @@ -278,7 +278,7 @@ void test_dynamic_view_sort(unsigned int n) { //---------------------------------------------------------------------------- template -void test_issue_1160() { +void test_issue_1160_impl() { Kokkos::View element_("element", 10); Kokkos::View x_("x", 10); Kokkos::View v_("y", 10); @@ -345,17 +345,34 @@ void test_issue_1160() { //---------------------------------------------------------------------------- +template +void test_1D_sort(unsigned int N) { + test_1D_sort_impl(N * N * N, true); + test_1D_sort_impl(N * N * N, false); +} + +template +void test_3D_sort(unsigned int N) { + test_3D_sort_impl(N); +} + +template +void test_dynamic_view_sort(unsigned int N) { + test_dynamic_view_sort_impl(N * N); +} + +template +void test_issue_1160_sort() { + test_issue_1160_impl(); +} + template void test_sort(unsigned int N) { - test_1D_sort(N * N * N, true); - test_1D_sort(N * N * N, false); -#if !defined(KOKKOS_ENABLE_ROCM) + test_1D_sort(N); test_3D_sort(N); - test_dynamic_view_sort(N * N); -#endif - test_issue_1160(); + test_dynamic_view_sort(N); + test_issue_1160_sort(); } - } // namespace Impl } // namespace Test #endif /* KOKKOS_ALGORITHMS_UNITTESTS_TESTSORT_HPP */ diff --git a/lib/kokkos/appveyor.yml b/lib/kokkos/appveyor.yml new file mode 100644 index 0000000000000000000000000000000000000000..8f139ba6ab1b20749dac0275aa8cf64618087380 --- /dev/null +++ b/lib/kokkos/appveyor.yml @@ -0,0 +1,10 @@ +image: + - Visual Studio 2019 +clone_folder: c:\projects\source +build_script: +- cmd: >- + mkdir build && + cd build && + cmake c:\projects\source -DKokkos_ENABLE_TESTS=ON -DKokkos_ENABLE_LIBDL=OFF -DKokkos_ENABLE_PROFILING=OFF && + cmake --build . --target install && + ctest -C Debug -V diff --git a/lib/kokkos/benchmarks/gups/gups-kokkos.cc b/lib/kokkos/benchmarks/gups/gups-kokkos.cc index 9ac59be4a6b348d28d19757f8f0acb7c59686fe2..36fc36925b90e6e1c9fee0abab7fc3d8342ba2d9 100644 --- a/lib/kokkos/benchmarks/gups/gups-kokkos.cc +++ b/lib/kokkos/benchmarks/gups/gups-kokkos.cc @@ -61,7 +61,7 @@ typedef int GUPSIndex; double now() { struct timeval now; - gettimeofday(&now, NULL); + gettimeofday(&now, nullptr); return (double) now.tv_sec + ((double) now.tv_usec * 1.0e-6); } diff --git a/lib/kokkos/benchmarks/stream/stream-kokkos.cc b/lib/kokkos/benchmarks/stream/stream-kokkos.cc index 6ce789dd82049a81bf9ed2ff5ba2318093c948af..8d604079d485c40183234ef6fa159ce8e2ec5102 100644 --- a/lib/kokkos/benchmarks/stream/stream-kokkos.cc +++ b/lib/kokkos/benchmarks/stream/stream-kokkos.cc @@ -64,7 +64,7 @@ typedef int StreamIndex; double now() { struct timeval now; - gettimeofday(&now, NULL); + gettimeofday(&now, nullptr); return (double) now.tv_sec + ((double) now.tv_usec * 1.0e-6); } diff --git a/lib/kokkos/cm_generate_makefile.bash b/lib/kokkos/cm_generate_makefile.bash deleted file mode 100755 index fd7cfe2d325bb817aeeaa0027fcb99d0169de95c..0000000000000000000000000000000000000000 --- a/lib/kokkos/cm_generate_makefile.bash +++ /dev/null @@ -1,339 +0,0 @@ -#!/bin/bash - -update_kokkos_devices() { - SEARCH_TEXT="*$1*" - if [[ $KOKKOS_DEVICES == $SEARCH_TEXT ]]; then - echo kokkos devices already includes $SEARCH_TEXT - else - if [ "$KOKKOS_DEVICES" = "" ]; then - KOKKOS_DEVICES="$1" - echo reseting kokkos devices to $KOKKOS_DEVICES - else - KOKKOS_DEVICES="${KOKKOS_DEVICES},$1" - echo appending to kokkos devices $KOKKOS_DEVICES - fi - fi -} - -get_kokkos_device_list() { - KOKKOS_DEVICE_CMD= - PARSE_DEVICES_LST=$(echo $KOKKOS_DEVICES | tr "," "\n") - for DEVICE_ in $PARSE_DEVICES_LST - do - UC_DEVICE=$(echo $DEVICE_ | tr "[:lower:]" "[:upper:]") - KOKKOS_DEVICE_CMD="-DKokkos_ENABLE_${UC_DEVICE}=ON ${KOKKOS_DEVICE_CMD}" - done -} - -get_kokkos_arch_list() { - KOKKOS_ARCH_CMD= - PARSE_ARCH_LST=$(echo $KOKKOS_ARCH | tr "," "\n") - for ARCH_ in $PARSE_ARCH_LST - do - UC_ARCH=$(echo $ARCH_ | tr "[:lower:]" "[:upper:]") - KOKKOS_ARCH_CMD="-DKokkos_ARCH_${UC_ARCH}=ON ${KOKKOS_ARCH_CMD}" - done -} - -get_kokkos_cuda_option_list() { - echo parsing KOKKOS_CUDA_OPTIONS=$KOKKOS_CUDA_OPTIONS - KOKKOS_CUDA_OPTION_CMD= - PARSE_CUDA_LST=$(echo $KOKKOS_CUDA_OPTIONS | tr "," "\n") - for CUDA_ in $PARSE_CUDA_LST - do - CUDA_OPT_NAME= - if [ "${CUDA_}" == "enable_lambda" ]; then - CUDA_OPT_NAME=CUDA_LAMBDA - elif [ "${CUDA_}" == "rdc" ]; then - CUDA_OPT_NAME=CUDA_RELOCATABLE_DEVICE_CODE - elif [ "${CUDA_}" == "force_uvm" ]; then - CUDA_OPT_NAME=CUDA_UVM - elif [ "${CUDA_}" == "use_ldg" ]; then - CUDA_OPT_NAME=CUDA_LDG_INTRINSIC - else - echo "${CUDA_} is not a valid cuda options..." - fi - if [ "${CUDA_OPT_NAME}" != "" ]; then - KOKKOS_CUDA_OPTION_CMD="-DKokkos_ENABLE_${CUDA_OPT_NAME}=ON ${KOKKOS_CUDA_OPTION_CMD}" - fi - done -} - -get_kokkos_option_list() { - echo parsing KOKKOS_OPTIONS=$KOKKOS_OPTIONS - KOKKOS_OPTION_CMD= - PARSE_OPTIONS_LST=$(echo $KOKKOS_OPTIONS | tr "," "\n") - for OPT_ in $PARSE_OPTIONS_LST - do - UC_OPT_=$(echo $OPT_ | tr "[:lower:]" "[:upper:]") - if [[ "$UC_OPT_" == *DISABLE* ]]; then - FLIP_OPT_=${UC_OPT_/DISABLE/ENABLE} - KOKKOS_OPTION_CMD="-DKokkos_${FLIP_OPT_}=OFF ${KOKKOS_OPTION_CMD}" - elif [[ "$UC_OPT_" == *ENABLE* ]]; then - KOKKOS_OPTION_CMD="-DKokkos_${UC_OPT_}=ON ${KOKKOS_OPTION_CMD}" - else - KOKKOS_OPTION_CMD="-DKokkos_ENABLE_${UC_OPT_}=ON ${KOKKOS_OPTION_CMD}" - fi - done -} - -display_help_text() { - - echo "Kokkos configure options:" - echo "" - echo "--kokkos-path=/Path/To/Kokkos: Path to the Kokkos root directory." - echo "--prefix=/Install/Path: Path to install the Kokkos library." - echo "" - echo "--with-cuda[=/Path/To/Cuda]: Enable Cuda and set path to Cuda Toolkit." - echo "--with-openmp: Enable OpenMP backend." - echo "--with-pthread: Enable Pthreads backend." - echo "--with-serial: Enable Serial backend." - echo "--with-devices: Explicitly add a set of backends." - echo "" - echo "--arch=[OPT]: Set target architectures. Options are:" - echo " [AMD]" - echo " AMDAVX = AMD CPU" - echo " EPYC = AMD EPYC Zen-Core CPU" - echo " [ARM]" - echo " ARMv80 = ARMv8.0 Compatible CPU" - echo " ARMv81 = ARMv8.1 Compatible CPU" - echo " ARMv8-ThunderX = ARMv8 Cavium ThunderX CPU" - echo " ARMv8-TX2 = ARMv8 Cavium ThunderX2 CPU" - echo " [IBM]" - echo " BGQ = IBM Blue Gene Q" - echo " Power7 = IBM POWER7 and POWER7+ CPUs" - echo " Power8 = IBM POWER8 CPUs" - echo " Power9 = IBM POWER9 CPUs" - echo " [Intel]" - echo " WSM = Intel Westmere CPUs" - echo " SNB = Intel Sandy/Ivy Bridge CPUs" - echo " HSW = Intel Haswell CPUs" - echo " BDW = Intel Broadwell Xeon E-class CPUs" - echo " SKX = Intel Sky Lake Xeon E-class HPC CPUs (AVX512)" - echo " [Intel Xeon Phi]" - echo " KNC = Intel Knights Corner Xeon Phi" - echo " KNL = Intel Knights Landing Xeon Phi" - echo " [NVIDIA]" - echo " Kepler30 = NVIDIA Kepler generation CC 3.0" - echo " Kepler32 = NVIDIA Kepler generation CC 3.2" - echo " Kepler35 = NVIDIA Kepler generation CC 3.5" - echo " Kepler37 = NVIDIA Kepler generation CC 3.7" - echo " Maxwell50 = NVIDIA Maxwell generation CC 5.0" - echo " Maxwell52 = NVIDIA Maxwell generation CC 5.2" - echo " Maxwell53 = NVIDIA Maxwell generation CC 5.3" - echo " Pascal60 = NVIDIA Pascal generation CC 6.0" - echo " Pascal61 = NVIDIA Pascal generation CC 6.1" - echo " Volta70 = NVIDIA Volta generation CC 7.0" - echo " Volta72 = NVIDIA Volta generation CC 7.2" - echo "" - echo "--compiler=/Path/To/Compiler Set the compiler." - echo "--debug,-dbg: Enable Debugging." - echo "--cxxflags=[FLAGS] Overwrite CXXFLAGS for library build and test" - echo " build. This will still set certain required" - echo " flags via KOKKOS_CXXFLAGS (such as -fopenmp," - echo " --std=c++11, etc.)." - echo "--cxxstandard=[FLAGS] Overwrite KOKKOS_CXX_STANDARD for library build and test" - echo " c++11 (default), c++14, c++17, c++1y, c++1z, c++2a" - echo "--ldflags=[FLAGS] Overwrite LDFLAGS for library build and test" - echo " build. This will still set certain required" - echo " flags via KOKKOS_LDFLAGS (such as -fopenmp," - echo " -lpthread, etc.)." - echo "--with-gtest=/Path/To/Gtest: Set path to gtest. (Used in unit and performance" - echo " tests.)" - echo "--with-hwloc=/Path/To/Hwloc: Set path to hwloc library." - echo "--with-memkind=/Path/To/MemKind: Set path to memkind library." - echo "--with-options=[OPT]: Additional options to Kokkos:" - echo " compiler_warnings" - echo " aggressive_vectorization = add ivdep on loops" - echo " disable_profiling = do not compile with profiling hooks" - echo " " - echo "--with-cuda-options=[OPT]: Additional options to CUDA:" - echo " force_uvm, use_ldg, enable_lambda, rdc" - echo "--with-hpx-options=[OPT]: Additional options to HPX:" - echo " enable_async_dispatch" - echo "--gcc-toolchain=/Path/To/GccRoot: Set the gcc toolchain to use with clang (e.g. /usr)" - echo "--make-j=[NUM]: DEPRECATED: call make with appropriate" - echo " -j flag" - -} - -while [[ $# > 0 ]] -do - key="$1" - - case $key in - --kokkos-path*) - KOKKOS_PATH="${key#*=}" - ;; - --hpx-path*) - HPX_PATH="${key#*=}" - ;; - --prefix*) - PREFIX="${key#*=}" - ;; - --with-cuda) - update_kokkos_devices Cuda - CUDA_PATH_NVCC=$(command -v nvcc) - CUDA_PATH=${CUDA_PATH_NVCC%/bin/nvcc} - ;; - # Catch this before '--with-cuda*' - --with-cuda-options*) - KOKKOS_CUDA_OPTIONS="${key#*=}" - ;; - --with-cuda*) - update_kokkos_devices Cuda - CUDA_PATH="${key#*=}" - ;; - --with-openmp) - update_kokkos_devices OpenMP - ;; - --with-pthread) - update_kokkos_devices Pthread - ;; - --with-serial) - update_kokkos_devices Serial - ;; - --with-hpx-options*) - KOKKOS_HPX_OPT="${key#*=}" - ;; - --with-hpx*) - update_kokkos_devices HPX - if [ -z "$HPX_PATH" ]; then - HPX_PATH="${key#*=}" - fi - ;; - --with-devices*) - DEVICES="${key#*=}" - PARSE_DEVICES=$(echo $DEVICES | tr "," "\n") - for DEVICE_ in $PARSE_DEVICES - do - update_kokkos_devices $DEVICE_ - done - ;; - --with-gtest*) - GTEST_PATH="${key#*=}" - ;; - --with-hwloc*) - HWLOC_PATH="${key#*=}" - ;; - --with-memkind*) - MEMKIND_PATH="${key#*=}" - ;; - --arch*) - KOKKOS_ARCH="${key#*=}" - ;; - --cxxflags*) - KOKKOS_CXXFLAGS="${key#*=}" - KOKKOS_CXXFLAGS=${KOKKOS_CXXFLAGS//,/ } - ;; - --cxxstandard*) - KOKKOS_CXX_STANDARD="${key#*=}" - ;; - --ldflags*) - KOKKOS_LDFLAGS="${key#*=}" - ;; - --debug|-dbg) - KOKKOS_DEBUG=yes - ;; - --make-j*) - echo "Warning: ${key} is deprecated" - echo "Call make with appropriate -j flag" - ;; - --compiler*) - COMPILER="${key#*=}" - CNUM=$(command -v ${COMPILER} 2>&1 >/dev/null | grep "no ${COMPILER}" | wc -l) - if [ ${CNUM} -gt 0 ]; then - echo "Invalid compiler by --compiler command: '${COMPILER}'" - exit - fi - if [[ ! -n ${COMPILER} ]]; then - echo "Empty compiler specified by --compiler command." - exit - fi - CNUM=$(command -v ${COMPILER} | grep ${COMPILER} | wc -l) - if [ ${CNUM} -eq 0 ]; then - echo "Invalid compiler by --compiler command: '${COMPILER}'" - exit - fi - # ... valid compiler, ensure absolute path set - WCOMPATH=$(command -v $COMPILER) - COMPDIR=$(dirname $WCOMPATH) - COMPNAME=$(basename $WCOMPATH) - COMPILER=${COMPDIR}/${COMPNAME} - ;; - --with-options*) - KOKKOS_OPTIONS="${key#*=}" - ;; - --gcc-toolchain*) - KOKKOS_GCC_TOOLCHAIN="${key#*=}" - ;; - --help) - display_help_text - exit 0 - ;; - *) - echo "warning: ignoring unknown option $key" - ;; - esac - - shift -done - - -if [ "$COMPILER" == "" ]; then - COMPILER_CMD= -else - COMPILER_CMD=-DCMAKE_CXX_COMPILER=$COMPILER -fi - -if [ "$KOKKOS_DEBUG" == "" ]; then - KOKKOS_DEBUG_CMD=-DCMAKE_BUILD_TYPE=RELEASE -else - KOKKOS_DEBUG_CMD=-DCMAKE_BUILD_TYPE=DEBUG -fi - -if [ ! -e ${KOKKOS_PATH}/CMakeLists.txt ]; then - if [ "${KOKKOS_PATH}" == "" ]; then - CM_SCRIPT=$0 - KOKKOS_PATH=`dirname $CM_SCRIPT` - if [ ! -e ${KOKKOS_PATH}/CMakeLists.txt ]; then - echo "${KOKKOS_PATH} repository appears to not be complete. please verify and try again" - exit 0 - fi - else - echo "KOKKOS_PATH does not appear to be set properly. please specify in location of CMakeLists.txt" - display_help_text - exit 0 - fi -fi - -get_kokkos_device_list -get_kokkos_option_list -get_kokkos_arch_list -get_kokkos_cuda_option_list - -## if HPX is enabled, we need to enforce cxx standard = 14 -if [[ ${KOKKOS_DEVICE_CMD} == *Kokkos_ENABLE_HPX* ]]; then - if [ "${KOKKOS_CXX_STANDARD}" == "" ] || [ ${#KOKKOS_CXX_STANDARD} -lt 14 ]; then - echo CXX Standard must be 14 or higher for HPX to work. - KOKKOS_CXX_STANDARD=14 - fi -fi - -if [ "$KOKKOS_CXX_STANDARD" == "" ]; then - STANDARD_CMD= -else - STANDARD_CMD=-DKokkos_CXX_STANDARD=${KOKKOS_CXX_STANDARD} -fi - -if [[ ${COMPILER} == *clang* ]]; then - gcc_path=$(which g++ | awk --field-separator='/bin/g++' '{printf $1}' ) - KOKKOS_CXXFLAGS="${KOKKOS_CXXFLAGS} --gcc-toolchain=${gcc_path}" - - if [ ! "${CUDA_PATH}" == "" ]; then - KOKKOS_CXXFLAGS="${KOKKOS_CXXFLAGS} --cuda-path=${CUDA_PATH}" - fi -fi - -echo cmake $COMPILER_CMD -DCMAKE_CXX_FLAGS="${KOKKOS_CXXFLAGS}" -DCMAKE_EXE_LINKER_FLAGS="${KOKKOS_LDFLAGS}" -DCMAKE_INSTALL_PREFIX=${PREFIX} ${KOKKOS_DEVICE_CMD} ${KOKKOS_ARCH_CMD} -DKokkos_ENABLE_TESTS=ON ${KOKKOS_OPTION_CMD} ${KOKKOS_CUDA_OPTION_CMD} -DCMAKE_VERBOSE_MAKEFILE=ON -DCMAKE_CXX_EXTENSIONS=OFF ${STANDARD_CMD} ${KOKKOS_DEBUG_CMD} ${KOKKOS_PATH} -cmake $COMPILER_CMD -DCMAKE_CXX_FLAGS="${KOKKOS_CXXFLAGS//\"}" -DCMAKE_EXE_LINKER_FLAGS="${KOKKOS_LDFLAGS//\"}" -DCMAKE_INSTALL_PREFIX=${PREFIX} ${KOKKOS_DEVICE_CMD} ${KOKKOS_ARCH_CMD} -DKokkos_ENABLE_TESTS=ON ${KOKKOS_OPTION_CMD} ${KOKKOS_CUDA_OPTION_CMD} -DCMAKE_VERBOSE_MAKEFILE=ON -DCMAKE_CXX_EXTENSIONS=OFF ${STANDARD_CMD} ${KOKKOS_DEBUG_CMD} ${KOKKOS_PATH} diff --git a/lib/kokkos/cmake/Dependencies.cmake b/lib/kokkos/cmake/Dependencies.cmake index 8c51eab4d78b68f9c01e64f63352a22cf8f2086d..c0be9f56411311a38a0f43a9b07b1109a0135bd8 100644 --- a/lib/kokkos/cmake/Dependencies.cmake +++ b/lib/kokkos/cmake/Dependencies.cmake @@ -6,5 +6,4 @@ TRIBITS_PACKAGE_DEFINE_DEPENDENCIES( Core core PS REQUIRED Containers containers PS OPTIONAL Algorithms algorithms PS OPTIONAL - Example example EX OPTIONAL ) diff --git a/lib/kokkos/cmake/KokkosConfigCommon.cmake.in b/lib/kokkos/cmake/KokkosConfigCommon.cmake.in index da9c61976c596e7318bd7a055ced6c6b527d2f60..8c663d01c1e74ad65b32532360ad43d34c172a9f 100644 --- a/lib/kokkos/cmake/KokkosConfigCommon.cmake.in +++ b/lib/kokkos/cmake/KokkosConfigCommon.cmake.in @@ -73,6 +73,9 @@ function(kokkos_check) # use it to check that there are variables defined for all required # arguments. Success or failure messages will be displayed but we are # responsible for signaling failure and skip the build system generation. + if (KOKKOS_CHECK_RETURN_VALUE) + set(Kokkos_${arg}_FIND_QUIETLY ON) + endif() find_package_handle_standard_args("Kokkos_${arg}" DEFAULT_MSG ${KOKKOS_CHECK_${arg}}) if(NOT Kokkos_${arg}_FOUND) diff --git a/lib/kokkos/cmake/KokkosCore_config.h.in b/lib/kokkos/cmake/KokkosCore_config.h.in index 084afba8a803b16031fdd6b1fb9e96c419d90fff..1d0b58fe02d9183849f007460599921fbe134a8b 100644 --- a/lib/kokkos/cmake/KokkosCore_config.h.in +++ b/lib/kokkos/cmake/KokkosCore_config.h.in @@ -5,11 +5,19 @@ #define KOKKOS_CORE_CONFIG_H #endif +// KOKKOS_VERSION % 100 is the patch level +// KOKKOS_VERSION / 100 % 100 is the minor version +// KOKKOS_VERSION / 10000 is the major version +#cmakedefine KOKKOS_VERSION @KOKKOS_VERSION@ + + /* Execution Spaces */ #cmakedefine KOKKOS_ENABLE_SERIAL #cmakedefine KOKKOS_ENABLE_OPENMP +#cmakedefine KOKKOS_ENABLE_OPENMPTARGET #cmakedefine KOKKOS_ENABLE_THREADS #cmakedefine KOKKOS_ENABLE_CUDA +#cmakedefine KOKKOS_ENABLE_HIP #cmakedefine KOKKOS_ENABLE_HPX #cmakedefine KOKKOS_ENABLE_MEMKIND #cmakedefine KOKKOS_ENABLE_LIBRT @@ -33,6 +41,7 @@ #cmakedefine KOKKOS_ENABLE_CUDA_LAMBDA #cmakedefine KOKKOS_ENABLE_CUDA_CONSTEXPR #cmakedefine KOKKOS_ENABLE_CUDA_LDG_INTRINSIC +#cmakedefine KOKKOS_ENABLE_HIP_RELOCATABLE_DEVICE_CODE #cmakedefine KOKKOS_ENABLE_HPX_ASYNC_DISPATCH #cmakedefine KOKKOS_ENABLE_DEBUG #cmakedefine KOKKOS_ENABLE_DEBUG_DUALVIEW_MODIFY_CHECK diff --git a/lib/kokkos/cmake/KokkosTrilinosConfig.cmake.in b/lib/kokkos/cmake/KokkosTrilinosConfig.cmake.in new file mode 100644 index 0000000000000000000000000000000000000000..626ef5a8ebefcaf7adcdeaa3b285f44892527dbc --- /dev/null +++ b/lib/kokkos/cmake/KokkosTrilinosConfig.cmake.in @@ -0,0 +1,17 @@ +IF (NOT TARGET Kokkos::kokkos) + # Compute the installation prefix relative to this file. + get_filename_component(KOKKOS_IMPORT_PREFIX "${CMAKE_CURRENT_LIST_FILE}" PATH) + get_filename_component(KOKKOS_IMPORT_PREFIX "${KOKKOS_IMPORT_PREFIX}" PATH) + get_filename_component(KOKKOS_IMPORT_PREFIX "${KOKKOS_IMPORT_PREFIX}" PATH) + get_filename_component(KOKKOS_IMPORT_PREFIX "${KOKKOS_IMPORT_PREFIX}" PATH) + if(KOKKOS_IMPORT_PREFIX STREQUAL "/") + set(KOKKOS_IMPORT_PREFIX "") + endif() + add_library(Kokkos::kokkos INTERFACE IMPORTED) + set_target_properties(Kokkos::kokkos PROPERTIES + INTERFACE_LINK_LIBRARIES "@Kokkos_LIBRARIES@;@KOKKOS_LINK_OPTIONS@" + INTERFACE_COMPILE_FEATURES "@KOKKOS_CXX_STANDARD_FEATURE@" + INTERFACE_COMPILE_OPTIONS "@KOKKOS_ALL_COMPILE_OPTIONS@" + INTERFACE_INCLUDE_DIRECTORIES "${KOKKOS_IMPORT_PREFIX}/include" + ) +ENDIF() diff --git a/lib/kokkos/cmake/Modules/FindTPLCUDA.cmake b/lib/kokkos/cmake/Modules/FindTPLCUDA.cmake index 36aefcdb44fdc52c2ee62b50973ad28b02a8fbf5..1b36ab819f0d891ff20bc0d3e2c95f92e23250f2 100644 --- a/lib/kokkos/cmake/Modules/FindTPLCUDA.cmake +++ b/lib/kokkos/cmake/Modules/FindTPLCUDA.cmake @@ -1,8 +1,12 @@ IF (KOKKOS_CXX_COMPILER_ID STREQUAL Clang) + # Note: "stubs" suffix allows CMake to find the dummy + # libcuda.so provided by the NVIDIA CUDA Toolkit for + # cross-compiling CUDA on a host without a GPU. KOKKOS_FIND_IMPORTED(CUDA INTERFACE LIBRARIES cudart cuda - LIBRARY_PATHS ENV LD_LIBRARY_PATH ENV CUDA_PATH + LIBRARY_PATHS ENV LD_LIBRARY_PATH ENV CUDA_PATH /usr/local/cuda + LIBRARY_SUFFIXES lib lib64 lib/stubs lib64/stubs ALLOW_SYSTEM_PATH_FALLBACK ) ELSE() diff --git a/lib/kokkos/cmake/Modules/FindTPLPTHREAD.cmake b/lib/kokkos/cmake/Modules/FindTPLPTHREAD.cmake index b4b8c34122a67ba73fc991ed52e35176c7df2fa1..1d154e29afff16479663d9c8d495f81142e5cf82 100644 --- a/lib/kokkos/cmake/Modules/FindTPLPTHREAD.cmake +++ b/lib/kokkos/cmake/Modules/FindTPLPTHREAD.cmake @@ -3,15 +3,18 @@ TRY_COMPILE(KOKKOS_HAS_PTHREAD_ARG ${KOKKOS_TOP_BUILD_DIR}/tpl_tests ${KOKKOS_SOURCE_DIR}/cmake/compile_tests/pthread.cpp LINK_LIBRARIES -pthread - COMPILE_DEFINITIONS -pthread) + COMPILE_DEFINITIONS -pthread +) +# The test no longer requires C++11 +# if we did needed C++ standard support, then we should add option +# ${CMAKE_CXX${KOKKOS_CXX_STANDARD}_STANDARD_COMPILE_OPTION} INCLUDE(FindPackageHandleStandardArgs) FIND_PACKAGE_HANDLE_STANDARD_ARGS(PTHREAD DEFAULT_MSG KOKKOS_HAS_PTHREAD_ARG) - -KOKKOS_CREATE_IMPORTED_TPL(PTHREAD - INTERFACE #this is not a real library with a real location - COMPILE_OPTIONS -pthread - LINK_OPTIONS -pthread) - - - +#Only create the TPL if we succeed +IF (KOKKOS_HAS_PTHREAD_ARG) + KOKKOS_CREATE_IMPORTED_TPL(PTHREAD + INTERFACE #this is not a real library with a real location + COMPILE_OPTIONS -pthread + LINK_OPTIONS -pthread) +ENDIF() diff --git a/lib/kokkos/cmake/README.md b/lib/kokkos/cmake/README.md index 0543a18e89cc9ed70472ee3381d2fc2834e14d7b..6d0cc2daf10d86e77ff93f96948991536fa8086c 100644 --- a/lib/kokkos/cmake/README.md +++ b/lib/kokkos/cmake/README.md @@ -67,7 +67,7 @@ Note that all of these use `PUBLIC`! Almost every Kokkos flag is not private to ### Compiler Features and Compiler Options -Compiler options are flags like `-fopenmp` that do not need to be "resolved." +Compiler options are flags like `-fopenmp` that do not need to be "resolved." The flag is either on or off. Compiler features are more fine-grained and require conflicting requests to be resolved. Suppose I have @@ -145,11 +145,11 @@ If Kokkos depends on, e.g. `hwloc` the downstream project will also need to link There are three stages in adding a new third-party library (TPL): * Finding: find the desired library on the system and verify the installation is correct * Importing: create a CMake target, if necessary, that is compatible with `target_link_libraries`. This is mostly relevant for TPLs not installed with CMake. -* Exporting: make the desired library visible to downstream projects +* Exporting: make the desired library visible to downstream projects TPLs are somewhat complicated by whether the library was installed with CMake or some other build system. If CMake, our lives are greatly simplified. We simply use `find_package` to locate the installed CMake project then call `target_link_libraries(kokkoscore PUBLIC/PRIVATE TPL)`. For libaries not installed with CMake, the process is a bit more complex. -It is up to the Kokkos developers to "convert" the library into a CMake target as if it had been installed as a valid modern CMake target with properties. +It is up to the Kokkos developers to "convert" the library into a CMake target as if it had been installed as a valid modern CMake target with properties. There are helper functions for simplifying the process of importing TPLs in Kokkos, but we walk through the process in detail to clearly illustrate the steps involved. #### TPL Search Order @@ -166,8 +166,9 @@ There are 3 possibilities that could be used: The following is the search order that Kokkos follows. Note: This differs from the default search order used by CMake `find_library` and `find_header`. CMake prefers default system paths over user-provided paths. For Kokkos (and package managers in general), it is better to prefer user-provided paths since this usually indicates a specific version we want. -1. `_ROOT` -1. `Kokkos__DIR` +1. `_ROOT` command line option +1. `_ROOT` environment variable +1. `Kokkos__DIR` command line option 1. Paths added by Kokkos CMake logic 1. Default system paths (if allowed) diff --git a/lib/kokkos/cmake/compile_tests/clang_omp.cpp b/lib/kokkos/cmake/compile_tests/clang_omp.cpp index ce3bbfb262377248628385f56578db9d8c5b6a33..60a5c522820cdb03cbde8a2cf3a796c57292b46b 100644 --- a/lib/kokkos/cmake/compile_tests/clang_omp.cpp +++ b/lib/kokkos/cmake/compile_tests/clang_omp.cpp @@ -1,6 +1,6 @@ #include -int main(int argc, char** argv) { +int main(int, char**) { int thr = omp_get_num_threads(); if (thr > 0) return thr; diff --git a/lib/kokkos/cmake/compile_tests/pthread.cpp b/lib/kokkos/cmake/compile_tests/pthread.cpp index 3b13f7ba357f6c05ffad30a61b01620fb33666b0..92310da0293704a121e265766dbe2979fc66513e 100644 --- a/lib/kokkos/cmake/compile_tests/pthread.cpp +++ b/lib/kokkos/cmake/compile_tests/pthread.cpp @@ -4,6 +4,10 @@ void* kokkos_test(void* args) { return args; } int main(void) { pthread_t thread; + /* Use NULL to avoid C++11. Some compilers + do not have C++11 by default. Forcing C++11 + in the compile tests can be done, but is unnecessary + */ pthread_create(&thread, NULL, kokkos_test, NULL); pthread_join(thread, NULL); return 0; diff --git a/lib/kokkos/cmake/fake_tribits.cmake b/lib/kokkos/cmake/fake_tribits.cmake index 26948d2cfbbd3bf724703447a81e66ee29ea000e..acee4a249d172cbef6f0409d5a6182349d35c6d4 100644 --- a/lib/kokkos/cmake/fake_tribits.cmake +++ b/lib/kokkos/cmake/fake_tribits.cmake @@ -24,10 +24,6 @@ IF(NOT ${MACRO_DEFINE_NAME} STREQUAL "") ENDIF() ENDMACRO() -MACRO(GLOBAL_RESET VARNAME) - SET(${VARNAME} "" CACHE INTERNAL "" FORCE) -ENDMACRO() - MACRO(GLOBAL_OVERWRITE VARNAME VALUE TYPE) SET(${VARNAME} ${VALUE} CACHE ${TYPE} "" FORCE) ENDMACRO() @@ -88,13 +84,9 @@ MACRO(ADD_INTERFACE_LIBRARY LIB_NAME) SET_TARGET_PROPERTIES(${LIB_NAME} PROPERTIES INTERFACE TRUE) ENDMACRO() -IF(NOT TARGET check) - ADD_CUSTOM_TARGET(check COMMAND ${CMAKE_CTEST_COMMAND} -VV -C ${CMAKE_CFG_INTDIR}) -ENDIF() - FUNCTION(KOKKOS_ADD_TEST) if (KOKKOS_HAS_TRILINOS) - CMAKE_PARSE_ARGUMENTS(TEST + CMAKE_PARSE_ARGUMENTS(TEST "" "EXE;NAME" "" @@ -108,22 +100,27 @@ FUNCTION(KOKKOS_ADD_TEST) TRIBITS_ADD_TEST( ${EXE_ROOT} NAME ${TEST_NAME} - ${ARGN} COMM serial mpi NUM_MPI_PROCS 1 ${TEST_UNPARSED_ARGUMENTS} ) else() - CMAKE_PARSE_ARGUMENTS(TEST + CMAKE_PARSE_ARGUMENTS(TEST "WILL_FAIL" "FAIL_REGULAR_EXPRESSION;PASS_REGULAR_EXPRESSION;EXE;NAME" "CATEGORIES;CMD_ARGS" ${ARGN}) + # To match Tribits, we should always be receiving + # the root names of exes/libs IF(TEST_EXE) - SET(EXE ${TEST_EXE}) + SET(EXE_ROOT ${TEST_EXE}) ELSE() - SET(EXE ${TEST_NAME}) + SET(EXE_ROOT ${TEST_NAME}) ENDIF() + # Prepend package name to the test name + # These should be the full target name + SET(TEST_NAME ${PACKAGE_NAME}_${TEST_NAME}) + SET(EXE ${PACKAGE_NAME}_${EXE_ROOT}) IF(WIN32) ADD_TEST(NAME ${TEST_NAME} WORKING_DIRECTORY ${LIBRARY_OUTPUT_PATH} COMMAND ${EXE}${CMAKE_EXECUTABLE_SUFFIX} ${TEST_CMD_ARGS}) ELSE() @@ -160,7 +157,7 @@ FUNCTION(KOKKOS_TPL_FIND_INCLUDE_DIRS_AND_LIBRARIES TPL_NAME) if (KOKKOS_HAS_TRILINOS) TRIBITS_TPL_FIND_INCLUDE_DIRS_AND_LIBRARIES(${TPL_NAME} ${ARGN}) else() - CMAKE_PARSE_ARGUMENTS(PARSE + CMAKE_PARSE_ARGUMENTS(PARSE "" "" "REQUIRED_HEADERS;REQUIRED_LIBS_NAMES" @@ -214,13 +211,13 @@ ENDFUNCTION() FUNCTION(KOKKOS_TARGET_INCLUDE_DIRECTORIES TARGET) IF(KOKKOS_HAS_TRILINOS) - KOKKOS_LIB_TYPE(${TARGET} INCTYPE) + KOKKOS_LIB_TYPE(${TARGET} INCTYPE) #don't trust tribits to do this correctly - but need to add package name TARGET_INCLUDE_DIRECTORIES(${TARGET} ${INCTYPE} ${ARGN}) -ELSEIF(TARGET ${TARGET}) +ELSEIF(TARGET ${TARGET}) #the target actually exists - this means we are doing separate libs #or this a test library - KOKKOS_LIB_TYPE(${TARGET} INCTYPE) + KOKKOS_LIB_TYPE(${TARGET} INCTYPE) TARGET_INCLUDE_DIRECTORIES(${TARGET} ${INCTYPE} ${ARGN}) ELSE() GET_PROPERTY(LIBS GLOBAL PROPERTY KOKKOS_LIBRARIES_NAMES) @@ -239,7 +236,7 @@ ELSE() SET(options INTERFACE) SET(oneValueArgs) SET(multiValueArgs) - CMAKE_PARSE_ARGUMENTS(PARSE + CMAKE_PARSE_ARGUMENTS(PARSE "INTERFACE" "" "" @@ -264,7 +261,7 @@ ELSE() SET(oneValueArgs) SET(multiValueArgs HEADERS SOURCES) - CMAKE_PARSE_ARGUMENTS(PARSE + CMAKE_PARSE_ARGUMENTS(PARSE "STATIC;SHARED" "" "HEADERS;SOURCES" @@ -277,10 +274,6 @@ ELSE() LIST(REMOVE_DUPLICATES PARSE_SOURCES) ENDIF() ADD_LIBRARY(${NAME} ${PARSE_SOURCES}) - target_link_libraries( - ${NAME} - PUBLIC kokkos - ) ENDIF() ENDFUNCTION() diff --git a/lib/kokkos/cmake/kokkos_arch.cmake b/lib/kokkos/cmake/kokkos_arch.cmake index c33247c9550f026d3ac5f611ecb049fe82333b03..d73a353981812a2643af209cd9945a37626daba1 100644 --- a/lib/kokkos/cmake/kokkos_arch.cmake +++ b/lib/kokkos/cmake/kokkos_arch.cmake @@ -9,52 +9,6 @@ FUNCTION(KOKKOS_ARCH_OPTION SUFFIX DEV_TYPE DESCRIPTION) SET(KOKKOS_ARCH_${SUFFIX} ${KOKKOS_ARCH_${SUFFIX}} PARENT_SCOPE) ENDFUNCTION() -FUNCTION(ARCH_FLAGS) - SET(COMPILERS NVIDIA PGI XL DEFAULT Cray Intel Clang AppleClang GNU) - CMAKE_PARSE_ARGUMENTS( - PARSE - "LINK_ONLY;COMPILE_ONLY" - "" - "${COMPILERS}" - ${ARGN}) - - SET(COMPILER ${KOKKOS_CXX_COMPILER_ID}) - - SET(FLAGS) - SET(NEW_COMPILE_OPTIONS) - SET(NEW_XCOMPILER_OPTIONS) - SET(NEW_LINK_OPTIONS) - LIST(APPEND NEW_XCOMPILER_OPTIONS ${KOKKOS_XCOMPILER_OPTIONS}) - LIST(APPEND NEW_COMPILE_OPTIONS ${KOKKOS_COMPILE_OPTIONS}) - LIST(APPEND NEW_LINK_OPTIONS ${KOKKOS_LINK_OPTIONS}) - FOREACH(COMP ${COMPILERS}) - IF (COMPILER STREQUAL "${COMP}") - IF (PARSE_${COMPILER}) - IF (NOT "${PARSE_${COMPILER}}" STREQUAL "NO-VALUE-SPECIFIED") - SET(FLAGS ${PARSE_${COMPILER}}) - ENDIF() - ELSEIF(PARSE_DEFAULT) - SET(FLAGS ${PARSE_DEFAULT}) - ENDIF() - ENDIF() - ENDFOREACH() - - IF (NOT LINK_ONLY) - # The funky logic here is for future handling of argument deduplication - # If we naively pass multiple -Xcompiler flags to target_compile_options - # -Xcompiler will get deduplicated and break the build - IF ("-Xcompiler" IN_LIST FLAGS) - LIST(REMOVE_ITEM FLAGS "-Xcompiler") - GLOBAL_APPEND(KOKKOS_XCOMPILER_OPTIONS ${FLAGS}) - ELSE() - GLOBAL_APPEND(KOKKOS_COMPILE_OPTIONS ${FLAGS}) - ENDIF() - ENDIF() - - IF (NOT COMPILE_ONLY) - GLOBAL_APPEND(KOKKOS_LINK_OPTIONS ${FLAGS}) - ENDIF() -ENDFUNCTION() # Make sure devices and compiler ID are done KOKKOS_CFG_DEPENDS(ARCH COMPILER_ID) @@ -98,14 +52,15 @@ KOKKOS_ARCH_OPTION(VOLTA70 GPU "NVIDIA Volta generation CC 7.0") KOKKOS_ARCH_OPTION(VOLTA72 GPU "NVIDIA Volta generation CC 7.2") KOKKOS_ARCH_OPTION(TURING75 GPU "NVIDIA Turing generation CC 7.5") KOKKOS_ARCH_OPTION(EPYC HOST "AMD Epyc architecture") - +KOKKOS_ARCH_OPTION(VEGA900 GPU "AMD GPU MI25 GFX900") +KOKKOS_ARCH_OPTION(VEGA906 GPU "AMD GPU MI50/MI60 GFX906") IF (KOKKOS_ENABLE_CUDA) #Regardless of version, make sure we define the general architecture name IF (KOKKOS_ARCH_KEPLER30 OR KOKKOS_ARCH_KEPLER32 OR KOKKOS_ARCH_KEPLER35 OR KOKKOS_ARCH_KEPLER37) SET(KOKKOS_ARCH_KEPLER ON) ENDIF() - + #Regardless of version, make sure we define the general architecture name IF (KOKKOS_ARCH_MAXWELL50 OR KOKKOS_ARCH_MAXWELL52 OR KOKKOS_ARCH_MAXWELL53) SET(KOKKOS_ARCH_MAXWELL ON) @@ -126,13 +81,13 @@ ENDIF() IF(KOKKOS_ENABLE_COMPILER_WARNINGS) SET(COMMON_WARNINGS - "-Wall" "-Wshadow" "-pedantic" + "-Wall" "-Wunused-parameter" "-Wshadow" "-pedantic" "-Wsign-compare" "-Wtype-limits" "-Wuninitialized") SET(GNU_WARNINGS "-Wempty-body" "-Wclobbered" "-Wignored-qualifiers" ${COMMON_WARNINGS}) - ARCH_FLAGS( + COMPILER_SPECIFIC_FLAGS( PGI NO-VALUE-SPECIFIED GNU ${GNU_WARNINGS} DEFAULT ${COMMON_WARNINGS} @@ -141,7 +96,8 @@ ENDIF() #------------------------------- KOKKOS_CUDA_OPTIONS --------------------------- -GLOBAL_RESET(KOKKOS_CUDA_OPTIONS) +#clear anything that might be in the cache +GLOBAL_SET(KOKKOS_CUDA_OPTIONS) # Construct the Makefile options IF (KOKKOS_ENABLE_CUDA_LAMBDA) IF(KOKKOS_CXX_COMPILER_ID STREQUAL NVIDIA) @@ -157,6 +113,7 @@ ENDIF() IF (KOKKOS_CXX_COMPILER_ID STREQUAL Clang) SET(CUDA_ARCH_FLAG "--cuda-gpu-arch") + SET(AMDGPU_ARCH_FLAG "--amdgpu-target") GLOBAL_APPEND(KOKKOS_CUDA_OPTIONS -x cuda) IF (KOKKOS_ENABLE_CUDA) SET(KOKKOS_IMPL_CUDA_CLANG_WORKAROUND ON CACHE BOOL "enable CUDA Clang workarounds" FORCE) @@ -171,27 +128,13 @@ IF (KOKKOS_CXX_COMPILER_ID STREQUAL NVIDIA) GLOBAL_APPEND(KOKKOS_CUDA_OPTIONS -lineinfo) ENDIF() UNSET(_UPPERCASE_CMAKE_BUILD_TYPE) - IF (KOKKOS_CXX_COMPILER_VERSION VERSION_GREATER 9.0 OR KOKKOS_CXX_COMPILER_VERSION VERSION_EQUAL 9.0) - GLOBAL_APPEND(KOKKOS_CUDAFE_OPTIONS --diag_suppress=esa_on_defaulted_function_ignored) + IF (KOKKOS_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 9.0 AND KOKKOS_CXX_COMPILER_VERSION VERSION_LESS 10.0) + GLOBAL_APPEND(KOKKOS_CUDAFE_OPTIONS --diag_suppress=esa_on_defaulted_function_ignored) ENDIF() ENDIF() -IF(KOKKOS_ENABLE_OPENMP) - IF (KOKKOS_CXX_COMPILER_ID STREQUAL AppleClang) - MESSAGE(FATAL_ERROR "Apple Clang does not support OpenMP. Use native Clang instead") - ENDIF() - ARCH_FLAGS( - Clang -fopenmp=libomp - PGI -mp - NVIDIA -Xcompiler -fopenmp - Cray NO-VALUE-SPECIFIED - XL -qsmp=omp - DEFAULT -fopenmp - ) -ENDIF() - IF (KOKKOS_ARCH_ARMV80) - ARCH_FLAGS( + COMPILER_SPECIFIC_FLAGS( Cray NO-VALUE-SPECIFIED PGI NO-VALUE-SPECIFIED DEFAULT -march=armv8-a @@ -199,7 +142,7 @@ IF (KOKKOS_ARCH_ARMV80) ENDIF() IF (KOKKOS_ARCH_ARMV81) - ARCH_FLAGS( + COMPILER_SPECIFIC_FLAGS( Cray NO-VALUE-SPECIFIED PGI NO-VALUE-SPECIFIED DEFAULT -march=armv8.1-a @@ -208,7 +151,7 @@ ENDIF() IF (KOKKOS_ARCH_ARMV8_THUNDERX) SET(KOKKOS_ARCH_ARMV80 ON) #Not a cache variable - ARCH_FLAGS( + COMPILER_SPECIFIC_FLAGS( Cray NO-VALUE-SPECIFIED PGI NO-VALUE-SPECIFIED DEFAULT -march=armv8-a -mtune=thunderx @@ -217,7 +160,7 @@ ENDIF() IF (KOKKOS_ARCH_ARMV8_THUNDERX2) SET(KOKKOS_ARCH_ARMV81 ON) #Not a cache variable - ARCH_FLAGS( + COMPILER_SPECIFIC_FLAGS( Cray NO-VALUE-SPECIFIED PGI NO-VALUE-SPECIFIED DEFAULT -mcpu=thunderx2t99 -mtune=thunderx2t99 @@ -225,7 +168,7 @@ IF (KOKKOS_ARCH_ARMV8_THUNDERX2) ENDIF() IF (KOKKOS_ARCH_EPYC) - ARCH_FLAGS( + COMPILER_SPECIFIC_FLAGS( Intel -mavx2 DEFAULT -march=znver1 -mtune=znver1 ) @@ -234,7 +177,7 @@ IF (KOKKOS_ARCH_EPYC) ENDIF() IF (KOKKOS_ARCH_WSM) - ARCH_FLAGS( + COMPILER_SPECIFIC_FLAGS( Intel -xSSE4.2 PGI -tp=nehalem Cray NO-VALUE-SPECIFIED @@ -245,7 +188,7 @@ ENDIF() IF (KOKKOS_ARCH_SNB OR KOKKOS_ARCH_AMDAVX) SET(KOKKOS_ARCH_AVX ON) - ARCH_FLAGS( + COMPILER_SPECIFIC_FLAGS( Intel -mavx PGI -tp=sandybridge Cray NO-VALUE-SPECIFIED @@ -255,7 +198,7 @@ ENDIF() IF (KOKKOS_ARCH_HSW) SET(KOKKOS_ARCH_AVX2 ON) - ARCH_FLAGS( + COMPILER_SPECIFIC_FLAGS( Intel -xCORE-AVX2 PGI -tp=haswell Cray NO-VALUE-SPECIFIED @@ -265,7 +208,7 @@ ENDIF() IF (KOKKOS_ARCH_BDW) SET(KOKKOS_ARCH_AVX2 ON) - ARCH_FLAGS( + COMPILER_SPECIFIC_FLAGS( Intel -xCORE-AVX2 PGI -tp=haswell Cray NO-VALUE-SPECIFIED @@ -275,7 +218,7 @@ ENDIF() IF (KOKKOS_ARCH_EPYC) SET(KOKKOS_ARCH_AMD_AVX2 ON) - ARCH_FLAGS( + COMPILER_SPECIFIC_FLAGS( Intel -mvax2 DEFAULT -march=znver1 -mtune=znver1 ) @@ -284,7 +227,7 @@ ENDIF() IF (KOKKOS_ARCH_KNL) #avx512-mic SET(KOKKOS_ARCH_AVX512MIC ON) #not a cache variable - ARCH_FLAGS( + COMPILER_SPECIFIC_FLAGS( Intel -xMIC-AVX512 PGI NO-VALUE-SPECIFIED Cray NO-VALUE-SPECIFIED @@ -294,7 +237,7 @@ ENDIF() IF (KOKKOS_ARCH_KNC) SET(KOKKOS_USE_ISA_KNC ON) - ARCH_FLAGS( + COMPILER_SPECIFIC_FLAGS( DEFAULT -mmic ) ENDIF() @@ -302,7 +245,7 @@ ENDIF() IF (KOKKOS_ARCH_SKX) #avx512-xeon SET(KOKKOS_ARCH_AVX512XEON ON) - ARCH_FLAGS( + COMPILER_SPECIFIC_FLAGS( Intel -xCORE-AVX512 PGI NO-VALUE-SPECIFIED Cray NO-VALUE-SPECIFIED @@ -319,7 +262,7 @@ IF (KOKKOS_ARCH_BDW OR KOKKOS_ARCH_SKX) ENDIF() IF (KOKKOS_ARCH_POWER7) - ARCH_FLAGS( + COMPILER_SPECIFIC_FLAGS( PGI NO-VALUE-SPECIFIED DEFAULT -mcpu=power7 -mtune=power7 ) @@ -327,7 +270,7 @@ IF (KOKKOS_ARCH_POWER7) ENDIF() IF (KOKKOS_ARCH_POWER8) - ARCH_FLAGS( + COMPILER_SPECIFIC_FLAGS( PGI NO-VALUE-SPECIFIED NVIDIA NO-VALUE-SPECIFIED DEFAULT -mcpu=power8 -mtune=power8 @@ -335,7 +278,7 @@ IF (KOKKOS_ARCH_POWER8) ENDIF() IF (KOKKOS_ARCH_POWER9) - ARCH_FLAGS( + COMPILER_SPECIFIC_FLAGS( PGI NO-VALUE-SPECIFIED NVIDIA NO-VALUE-SPECIFIED DEFAULT -mcpu=power9 -mtune=power9 @@ -347,33 +290,50 @@ IF (KOKKOS_ARCH_POWER8 OR KOKKOS_ARCH_POWER9) ENDIF() IF (Kokkos_ENABLE_CUDA_RELOCATABLE_DEVICE_CODE) - ARCH_FLAGS( + COMPILER_SPECIFIC_FLAGS( Clang -fcuda-rdc NVIDIA --relocatable-device-code=true ) ENDIF() +#Right now we cannot get the compiler ID when cross-compiling, so just check +#that HIP is enabled +IF (Kokkos_ENABLE_HIP) + IF (Kokkos_ENABLE_HIP_RELOCATABLE_DEVICE_CODE) + COMPILER_SPECIFIC_FLAGS( + DEFAULT -fgpu-rdc + ) + ELSE() + COMPILER_SPECIFIC_FLAGS( + DEFAULT -fno-gpu-rdc + ) + ENDIF() +ENDIF() + SET(CUDA_ARCH_ALREADY_SPECIFIED "") FUNCTION(CHECK_CUDA_ARCH ARCH FLAG) -IF(KOKKOS_ARCH_${ARCH}) - IF(CUDA_ARCH_ALREADY_SPECIFIED) - MESSAGE(FATAL_ERROR "Multiple GPU architectures given! Already have ${CUDA_ARCH_ALREADY_SPECIFIED}, but trying to add ${ARCH}. If you are re-running CMake, try clearing the cache and running again.") - ENDIF() - SET(CUDA_ARCH_ALREADY_SPECIFIED ${ARCH} PARENT_SCOPE) - IF (NOT KOKKOS_ENABLE_CUDA) - MESSAGE(WARNING "Given CUDA arch ${ARCH}, but Kokkos_ENABLE_CUDA is OFF. Option will be ignored.") - UNSET(KOKKOS_ARCH_${ARCH} PARENT_SCOPE) - ELSE() - GLOBAL_APPEND(KOKKOS_CUDA_OPTIONS "${CUDA_ARCH_FLAG}=${FLAG}") - IF(KOKKOS_ENABLE_CUDA_RELOCATABLE_DEVICE_CODE) - GLOBAL_APPEND(KOKKOS_LINK_OPTIONS "${CUDA_ARCH_FLAG}=${FLAG}") + IF(KOKKOS_ARCH_${ARCH}) + IF(CUDA_ARCH_ALREADY_SPECIFIED) + MESSAGE(FATAL_ERROR "Multiple GPU architectures given! Already have ${CUDA_ARCH_ALREADY_SPECIFIED}, but trying to add ${ARCH}. If you are re-running CMake, try clearing the cache and running again.") + ENDIF() + SET(CUDA_ARCH_ALREADY_SPECIFIED ${ARCH} PARENT_SCOPE) + IF (NOT KOKKOS_ENABLE_CUDA AND NOT KOKKOS_ENABLE_OPENMPTARGET) + MESSAGE(WARNING "Given CUDA arch ${ARCH}, but Kokkos_ENABLE_CUDA and Kokkos_ENABLE_OPENMPTARGET are OFF. Option will be ignored.") + UNSET(KOKKOS_ARCH_${ARCH} PARENT_SCOPE) + ELSE() + SET(KOKKOS_CUDA_ARCH_FLAG ${FLAG} PARENT_SCOPE) + GLOBAL_APPEND(KOKKOS_CUDA_OPTIONS "${CUDA_ARCH_FLAG}=${FLAG}") + IF(KOKKOS_ENABLE_CUDA_RELOCATABLE_DEVICE_CODE) + GLOBAL_APPEND(KOKKOS_LINK_OPTIONS "${CUDA_ARCH_FLAG}=${FLAG}") + ENDIF() ENDIF() ENDIF() -ENDIF() ENDFUNCTION() +#These will define KOKKOS_CUDA_ARCH_FLAG +#to the corresponding flag name if ON CHECK_CUDA_ARCH(KEPLER30 sm_30) CHECK_CUDA_ARCH(KEPLER32 sm_32) CHECK_CUDA_ARCH(KEPLER35 sm_35) @@ -383,18 +343,76 @@ CHECK_CUDA_ARCH(MAXWELL52 sm_52) CHECK_CUDA_ARCH(MAXWELL53 sm_53) CHECK_CUDA_ARCH(PASCAL60 sm_60) CHECK_CUDA_ARCH(PASCAL61 sm_61) -CHECK_CUDA_ARCH(VOLTA70 sm_70) -CHECK_CUDA_ARCH(VOLTA72 sm_72) +CHECK_CUDA_ARCH(VOLTA70 sm_70) +CHECK_CUDA_ARCH(VOLTA72 sm_72) CHECK_CUDA_ARCH(TURING75 sm_75) +SET(AMDGPU_ARCH_ALREADY_SPECIFIED "") +FUNCTION(CHECK_AMDGPU_ARCH ARCH FLAG) + IF(KOKKOS_ARCH_${ARCH}) + IF(AMDGPU_ARCH_ALREADY_SPECIFIED) + MESSAGE(FATAL_ERROR "Multiple GPU architectures given! Already have ${AMDGPU_ARCH_ALREADY_SPECIFIED}, but trying to add ${ARCH}. If you are re-running CMake, try clearing the cache and running again.") + ENDIF() + SET(AMDGPU_ARCH_ALREADY_SPECIFIED ${ARCH} PARENT_SCOPE) + IF (NOT KOKKOS_ENABLE_HIP AND NOT KOKKOS_ENABLE_OPENMPTARGET) + MESSAGE(WARNING "Given HIP arch ${ARCH}, but Kokkos_ENABLE_AMDGPU and Kokkos_ENABLE_OPENMPTARGET are OFF. Option will be ignored.") + UNSET(KOKKOS_ARCH_${ARCH} PARENT_SCOPE) + ELSE() + SET(KOKKOS_AMDGPU_ARCH_FLAG ${FLAG} PARENT_SCOPE) + GLOBAL_APPEND(KOKKOS_AMDGPU_OPTIONS "${AMDGPU_ARCH_FLAG}=${FLAG}") + IF(KOKKOS_ENABLE_HIP) + GLOBAL_APPEND(KOKKOS_LINK_OPTIONS "${AMDGPU_ARCH_FLAG}=${FLAG}") + ENDIF() + ENDIF() + ENDIF() +ENDFUNCTION() + +#These will define KOKKOS_AMDGPU_ARCH_FLAG +#to the corresponding flag name if ON +CHECK_AMDGPU_ARCH(VEGA900 gfx900) # Radeon Instinct MI25 +CHECK_AMDGPU_ARCH(VEGA906 gfx906) # Radeon Instinct MI50 and MI60 + +IF (KOKKOS_ENABLE_OPENMPTARGET) + SET(CLANG_CUDA_ARCH ${KOKKOS_CUDA_ARCH_FLAG}) + IF (CLANG_CUDA_ARCH) + COMPILER_SPECIFIC_FLAGS( + Clang -Xopenmp-target -march=${CLANG_CUDA_ARCH} -fopenmp-targets=nvptx64-nvidia-cuda + XL -qtgtarch=${KOKKOS_CUDA_ARCH_FLAG} + ) + ENDIF() + SET(CLANG_AMDGPU_ARCH ${KOKKOS_AMDGPU_ARCH_FLAG}) + IF (CLANG_AMDGPU_ARCH) + COMPILER_SPECIFIC_FLAGS( + Clang -Xopenmp-target=amdgcn-amd-amdhsa -march=${CLANG_AMDGPU_ARCH} -fopenmp-targets=amdgcn-amd-amdhsa + ) + ENDIF() +ENDIF() + +IF(KOKKOS_ENABLE_CUDA AND NOT CUDA_ARCH_ALREADY_SPECIFIED) + MESSAGE(SEND_ERROR "CUDA enabled but no NVIDIA GPU architecture currently enabled. Please give one -DKokkos_ARCH_{..}=ON' to enable an NVIDIA GPU architecture.") +ENDIF() + #CMake verbose is kind of pointless #Let's just always print things MESSAGE(STATUS "Execution Spaces:") -IF(KOKKOS_ENABLE_CUDA) - MESSAGE(STATUS " Device Parallel: CUDA") -ELSE() - MESSAGE(STATUS " Device Parallel: NONE") + +FOREACH (_BACKEND CUDA OPENMPTARGET HIP) + IF(KOKKOS_ENABLE_${_BACKEND}) + IF(_DEVICE_PARALLEL) + MESSAGE(FATAL_ERROR "Multiple device parallel execution spaces are not allowed! " + "Trying to enable execution space ${_BACKEND}, " + "but execution space ${_DEVICE_PARALLEL} is already enabled. " + "Remove the CMakeCache.txt file and re-configure.") + ENDIF() + SET(_DEVICE_PARALLEL ${_BACKEND}) + ENDIF() +ENDFOREACH() +IF(NOT _DEVICE_PARALLEL) + SET(_DEVICE_PARALLEL "NONE") ENDIF() +MESSAGE(STATUS " Device Parallel: ${_DEVICE_PARALLEL}") +UNSET(_DEVICE_PARALLEL) + FOREACH (_BACKEND OPENMP PTHREAD HPX) IF(KOKKOS_ENABLE_${_BACKEND}) diff --git a/lib/kokkos/cmake/kokkos_check_env.cmake b/lib/kokkos/cmake/kokkos_check_env.cmake new file mode 100644 index 0000000000000000000000000000000000000000..a455a403b9d5ed0fa3772d2d8e619347061bd65e --- /dev/null +++ b/lib/kokkos/cmake/kokkos_check_env.cmake @@ -0,0 +1,12 @@ +SET(CRAYPE_VERSION $ENV{CRAYPE_VERSION}) +IF (CRAYPE_VERSION) + SET(KOKKOS_IS_CRAYPE TRUE) + SET(CRAYPE_LINK_TYPE $ENV{CRAYPE_LINK_TYPE}) + IF (CRAYPE_LINK_TYPE) + IF (NOT CRAYPE_LINK_TYPE STREQUAL "dynamic") + MESSAGE(WARNING "CRAYPE_LINK_TYPE is set to ${CRAYPE_LINK_TYPE}. Linking is likely to fail unless this is set to 'dynamic'") + ENDIF() + ELSE() + MESSAGE(WARNING "CRAYPE_LINK_TYPE is not set. Linking is likely to fail unless this is set to 'dynamic'") + ENDIF() +ENDIF() diff --git a/lib/kokkos/cmake/kokkos_compiler_id.cmake b/lib/kokkos/cmake/kokkos_compiler_id.cmake index d239c3b32e5d2d853a6a5ad9705a49aec895c5a5..cd5e7c9e4e40217ffcfb1c6f64710cfe6f34a584 100644 --- a/lib/kokkos/cmake/kokkos_compiler_id.cmake +++ b/lib/kokkos/cmake/kokkos_compiler_id.cmake @@ -13,7 +13,7 @@ EXECUTE_PROCESS(COMMAND ${CMAKE_CXX_COMPILER} --version STRING(REGEX REPLACE "^ +" "" - INTERNAL_HAVE_COMPILER_NVCC ${INTERNAL_HAVE_COMPILER_NVCC}) + INTERNAL_HAVE_COMPILER_NVCC "${INTERNAL_HAVE_COMPILER_NVCC}") IF(INTERNAL_HAVE_COMPILER_NVCC) @@ -31,16 +31,32 @@ IF(INTERNAL_HAVE_COMPILER_NVCC) SET(KOKKOS_CXX_COMPILER_VERSION ${TEMP_CXX_COMPILER_VERSION} CACHE STRING INTERNAL FORCE) ENDIF() -IF(KOKKOS_CXX_COMPILER_ID STREQUAL Cray) - # SET nvcc's compiler version. +IF(KOKKOS_CXX_COMPILER_ID STREQUAL Clang) + # The Cray compiler reports as Clang to most versions of CMake + EXECUTE_PROCESS(COMMAND ${CMAKE_CXX_COMPILER} --version + COMMAND grep Cray + COMMAND wc -l + OUTPUT_VARIABLE INTERNAL_HAVE_CRAY_COMPILER + OUTPUT_STRIP_TRAILING_WHITESPACE) + IF (INTERNAL_HAVE_CRAY_COMPILER) #not actually Clang + SET(KOKKOS_CLANG_IS_CRAY TRUE) + ENDIF() +ENDIF() + +IF(KOKKOS_CXX_COMPILER_ID STREQUAL Cray OR KOKKOS_CLANG_IS_CRAY) + # SET Cray's compiler version. EXECUTE_PROCESS(COMMAND ${CMAKE_CXX_COMPILER} --version OUTPUT_VARIABLE INTERNAL_CXX_COMPILER_VERSION OUTPUT_STRIP_TRAILING_WHITESPACE) - STRING(REGEX MATCH "[0-9]+\\.[0-9]+\\.[0-9]+$" + STRING(REGEX MATCH "[0-9]+\\.[0-9]+\\.[0-9]+" TEMP_CXX_COMPILER_VERSION ${INTERNAL_CXX_COMPILER_VERSION}) - SET(KOKKOS_CXX_COMPILER_VERSION ${TEMP_CXX_COMPILER_VERSION} CACHE STRING INTERNAL FORCE) + IF (KOKKOS_CLANG_IS_CRAY) + SET(KOKKOS_CLANG_CRAY_COMPILER_VERSION ${TEMP_CXX_COMPILER_VERSION}) + ELSE() + SET(KOKKOS_CXX_COMPILER_VERSION ${TEMP_CXX_COMPILER_VERSION} CACHE STRING INTERNAL FORCE) + ENDIF() ENDIF() # Enforce the minimum compilers supported by Kokkos. diff --git a/lib/kokkos/cmake/kokkos_corner_cases.cmake b/lib/kokkos/cmake/kokkos_corner_cases.cmake index c03c385faf69a533fd0f91107fd07668fbb9cdab..e30be3c841ec7913feb41c0545160c6eb48cb704 100644 --- a/lib/kokkos/cmake/kokkos_corner_cases.cmake +++ b/lib/kokkos/cmake/kokkos_corner_cases.cmake @@ -1,4 +1,4 @@ -IF(KOKKOS_CXX_COMPILER_ID STREQUAL Clang AND KOKKOS_ENABLE_OPENMP) +IF(KOKKOS_CXX_COMPILER_ID STREQUAL Clang AND KOKKOS_ENABLE_OPENMP AND NOT KOKKOS_CLANG_IS_CRAY) # The clang "version" doesn't actually tell you what runtimes and tools # were built into Clang. We should therefore make sure that libomp # was actually built into Clang. Otherwise the user will get nonsensical @@ -11,7 +11,7 @@ IF(KOKKOS_CXX_COMPILER_ID STREQUAL Clang AND KOKKOS_ENABLE_OPENMP) #also - this is easier to use than CMakeCheckCXXSourceCompiles TRY_COMPILE(CLANG_HAS_OMP ${KOKKOS_TOP_BUILD_DIR}/corner_cases - ${KOKKOS_SOURCE_DIR}/cmake/compile_tests/clang_omp.cpp + ${KOKKOS_SOURCE_DIR}/cmake/compile_tests/clang_omp.cpp COMPILE_DEFINITIONS -fopenmp=libomp LINK_LIBRARIES -fopenmp=libomp ) @@ -22,6 +22,30 @@ IF(KOKKOS_CXX_COMPILER_ID STREQUAL Clang AND KOKKOS_ENABLE_OPENMP) UNSET(CLANG_HAS_OMP CACHE) #make sure CMake always re-runs this ENDIF() +IF(KOKKOS_CXX_COMPILER_ID STREQUAL AppleClang AND KOKKOS_ENABLE_OPENMP) + # The clang "version" doesn't actually tell you what runtimes and tools + # were built into Clang. We should therefore make sure that libomp + # was actually built into Clang. Otherwise the user will get nonsensical + # errors when they try to build. + + #Try compile is the height of CMake nonsense + #I can't just give it compiler and link flags + #I have to hackily pretend that compiler flags are compiler definitions + #and that linker flags are libraries + #also - this is easier to use than CMakeCheckCXXSourceCompiles + TRY_COMPILE(APPLECLANG_HAS_OMP + ${KOKKOS_TOP_BUILD_DIR}/corner_cases + ${KOKKOS_SOURCE_DIR}/cmake/compile_tests/clang_omp.cpp + COMPILE_DEFINITIONS -Xpreprocessor -fopenmp + LINK_LIBRARIES -lomp + ) + IF (NOT APPLECLANG_HAS_OMP) + UNSET(APPLECLANG_HAS_OMP CACHE) #make sure CMake always re-runs this + MESSAGE(FATAL_ERROR "AppleClang failed OpenMP check. You have requested -DKokkos_ENABLE_OPENMP=ON, but the AppleClang compiler does not appear to have been built with OpenMP support") + ENDIF() + UNSET(APPLECLANG_HAS_OMP CACHE) #make sure CMake always re-runs this +ENDIF() + IF (KOKKOS_CXX_STANDARD STREQUAL 17) IF (KOKKOS_CXX_COMPILER_ID STREQUAL GNU AND KOKKOS_CXX_COMPILER_VERSION VERSION_LESS 7) diff --git a/lib/kokkos/cmake/kokkos_enable_devices.cmake b/lib/kokkos/cmake/kokkos_enable_devices.cmake index ff098766736dd80efb121fb691c8466e5f99f404..7b50cfe458a46c50b06b627a86a70eb36a0c4a5c 100644 --- a/lib/kokkos/cmake/kokkos_enable_devices.cmake +++ b/lib/kokkos/cmake/kokkos_enable_devices.cmake @@ -31,6 +31,41 @@ ELSE() SET(OMP_DEFAULT OFF) ENDIF() KOKKOS_DEVICE_OPTION(OPENMP ${OMP_DEFAULT} HOST "Whether to build OpenMP backend") +IF(KOKKOS_ENABLE_OPENMP) + SET(ClangOpenMPFlag -fopenmp=libomp) + IF(KOKKOS_CLANG_IS_CRAY) + SET(ClangOpenMPFlag -fopenmp) + ENDIF() + COMPILER_SPECIFIC_FLAGS( + Clang ${ClangOpenMPFlag} + AppleClang -Xpreprocessor -fopenmp + PGI -mp + NVIDIA -Xcompiler -fopenmp + Cray NO-VALUE-SPECIFIED + XL -qsmp=omp + DEFAULT -fopenmp + ) + COMPILER_SPECIFIC_LIBS( + AppleClang -lomp + ) +ENDIF() + +KOKKOS_DEVICE_OPTION(OPENMPTARGET OFF DEVICE "Whether to build the OpenMP target backend") +IF (KOKKOS_ENABLE_OPENMPTARGET) + COMPILER_SPECIFIC_FLAGS( + Clang -fopenmp -fopenmp=libomp + XL -qsmp=omp -qoffload -qnoeh + DEFAULT -fopenmp + ) + COMPILER_SPECIFIC_DEFS( + XL KOKKOS_IBM_XL_OMP45_WORKAROUND + Clang KOKKOS_WORKAROUND_OPENMPTARGET_CLANG + ) +# Are there compilers which identify as Clang and need this library? +# COMPILER_SPECIFIC_LIBS( +# Clang -lopenmptarget +# ) +ENDIF() IF(Trilinos_ENABLE_Kokkos AND TPL_ENABLE_CUDA) SET(CUDA_DEFAULT ON) @@ -59,3 +94,5 @@ ENDIF() KOKKOS_DEVICE_OPTION(SERIAL ${SERIAL_DEFAULT} HOST "Whether to build serial backend") KOKKOS_DEVICE_OPTION(HPX OFF HOST "Whether to build HPX backend (experimental)") + +KOKKOS_DEVICE_OPTION(HIP OFF DEVICE "Whether to build HIP backend") diff --git a/lib/kokkos/cmake/kokkos_enable_options.cmake b/lib/kokkos/cmake/kokkos_enable_options.cmake index c0e49482b66c51de0f897bf9730c7db35436e787..4560c3df8fbfd8901bb350d2d41820263061cfd3 100644 --- a/lib/kokkos/cmake/kokkos_enable_options.cmake +++ b/lib/kokkos/cmake/kokkos_enable_options.cmake @@ -21,6 +21,7 @@ ENDFUNCTION() # Certain defaults will depend on knowing the enabled devices KOKKOS_CFG_DEPENDS(OPTIONS DEVICES) +KOKKOS_CFG_DEPENDS(OPTIONS COMPILER_ID) # Put a check in just in case people are using this option KOKKOS_DEPRECATED_LIST(OPTIONS ENABLE) @@ -28,8 +29,10 @@ KOKKOS_DEPRECATED_LIST(OPTIONS ENABLE) KOKKOS_ENABLE_OPTION(CUDA_RELOCATABLE_DEVICE_CODE OFF "Whether to enable relocatable device code (RDC) for CUDA") KOKKOS_ENABLE_OPTION(CUDA_UVM OFF "Whether to use unified memory (UM) for CUDA by default") KOKKOS_ENABLE_OPTION(CUDA_LDG_INTRINSIC OFF "Whether to use CUDA LDG intrinsics") +KOKKOS_ENABLE_OPTION(HIP_RELOCATABLE_DEVICE_CODE OFF "Whether to enable relocatable device code (RDC) for HIP") KOKKOS_ENABLE_OPTION(HPX_ASYNC_DISPATCH OFF "Whether HPX supports asynchronous dispatch") KOKKOS_ENABLE_OPTION(TESTS OFF "Whether to build the unit tests") +KOKKOS_ENABLE_OPTION(EXAMPLES OFF "Whether to build the examples") STRING(TOUPPER "${CMAKE_BUILD_TYPE}" UPPERCASE_CMAKE_BUILD_TYPE) IF(UPPERCASE_CMAKE_BUILD_TYPE STREQUAL "DEBUG") KOKKOS_ENABLE_OPTION(DEBUG ON "Whether to activate extra debug features - may increase compile times") @@ -51,12 +54,14 @@ IF (KOKKOS_ENABLE_CUDA) SET(KOKKOS_COMPILER_CUDA_VERSION "${KOKKOS_COMPILER_VERSION_MAJOR}${KOKKOS_COMPILER_VERSION_MINOR}") ENDIF() -IF (Trilinos_ENABLE_Kokkos AND TPL_ENABLE_CUDA AND DEFINED KOKKOS_COMPILER_CUDA_VERSION AND KOKKOS_COMPILER_CUDA_VERSION GREATER 70) - SET(LAMBDA_DEFAULT ON) +IF (Trilinos_ENABLE_Kokkos AND TPL_ENABLE_CUDA) + SET(CUDA_LAMBDA_DEFAULT ON) +ELSEIF (KOKKOS_ENABLE_CUDA AND (KOKKOS_CXX_COMPILER_ID STREQUAL Clang)) + SET(CUDA_LAMBDA_DEFAULT ON) ELSE() - SET(LAMBDA_DEFAULT OFF) + SET(CUDA_LAMBDA_DEFAULT OFF) ENDIF() -KOKKOS_ENABLE_OPTION(CUDA_LAMBDA ${LAMBDA_DEFAULT} "Whether to activate experimental lambda features") +KOKKOS_ENABLE_OPTION(CUDA_LAMBDA ${CUDA_LAMBDA_DEFAULT} "Whether to activate experimental lambda features") IF (Trilinos_ENABLE_Kokkos) SET(COMPLEX_ALIGN_DEFAULT OFF) ELSE() @@ -64,7 +69,13 @@ ELSE() ENDIF() KOKKOS_ENABLE_OPTION(COMPLEX_ALIGN ${COMPLEX_ALIGN_DEFAULT} "Whether to align Kokkos::complex to 2*alignof(RealType)") -KOKKOS_ENABLE_OPTION(CUDA_CONSTEXPR OFF "Whether to activate experimental relaxed constexpr functions") + +IF (KOKKOS_ENABLE_CUDA AND (KOKKOS_CXX_COMPILER_ID STREQUAL Clang)) + SET(CUDA_CONSTEXPR_DEFAULT ON) +ELSE() + SET(CUDA_CONSTEXPR_DEFAULT OFF) +ENDIF() +KOKKOS_ENABLE_OPTION(CUDA_CONSTEXPR ${CUDA_CONSTEXPR_DEFAULT} "Whether to activate experimental relaxed constexpr functions") FUNCTION(check_device_specific_options) CMAKE_PARSE_ARGUMENTS(SOME "" "DEVICE" "OPTIONS" ${ARGN}) @@ -84,9 +95,18 @@ FUNCTION(check_device_specific_options) ENDFUNCTION() CHECK_DEVICE_SPECIFIC_OPTIONS(DEVICE CUDA OPTIONS CUDA_UVM CUDA_RELOCATABLE_DEVICE_CODE CUDA_LAMBDA CUDA_CONSTEXPR CUDA_LDG_INTRINSIC) +CHECK_DEVICE_SPECIFIC_OPTIONS(DEVICE HIP OPTIONS HIP_RELOCATABLE_DEVICE_CODE) CHECK_DEVICE_SPECIFIC_OPTIONS(DEVICE HPX OPTIONS HPX_ASYNC_DISPATCH) # Needed due to change from deprecated name to new header define name IF (KOKKOS_ENABLE_AGGRESSIVE_VECTORIZATION) SET(KOKKOS_OPT_RANGE_AGGRESSIVE_VECTORIZATION ON) ENDIF() + +# This is known to occur with Clang 9. We would need to use nvcc as the linker +# http://lists.llvm.org/pipermail/cfe-dev/2018-June/058296.html +# TODO: Through great effort we can use a different linker by hacking +# CMAKE_CXX_LINK_EXECUTABLE in a future release +IF (KOKKOS_ENABLE_CUDA_RELOCATABLE_DEVICE_CODE AND KOKKOS_CXX_COMPILER_ID STREQUAL Clang) + MESSAGE(FATAL_ERROR "Relocatable device code is currently not supported with Clang - must use nvcc_wrapper or turn off RDC") +ENDIF() diff --git a/lib/kokkos/cmake/kokkos_functions.cmake b/lib/kokkos/cmake/kokkos_functions.cmake index 3644c48ddde7c861e29727805323cbb21ac37d33..fd04966bafa30e59bd9693f536aeb284dcc220a4 100644 --- a/lib/kokkos/cmake/kokkos_functions.cmake +++ b/lib/kokkos/cmake/kokkos_functions.cmake @@ -3,9 +3,9 @@ # kokkos_option # Validate options are given with correct case and define an internal -# upper-case version for use within +# upper-case version for use within -# +# # # @FUNCTION: kokkos_deprecated_list # @@ -62,7 +62,7 @@ FUNCTION(kokkos_option CAMEL_SUFFIX DEFAULT TYPE DOCSTRING) UNSET(${opt} CACHE) ELSE() MESSAGE(FATAL_ERROR "Matching option found for ${CAMEL_NAME} with the wrong case ${opt}. Please delete your CMakeCache.txt and change option to -D${CAMEL_NAME}=${${opt}}. This is now enforced to avoid hard-to-debug CMake cache inconsistencies.") - ENDIF() + ENDIF() ENDIF() ENDIF() ENDFOREACH() @@ -125,7 +125,7 @@ MACRO(kokkos_export_imported_tpl NAME) KOKKOS_APPEND_CONFIG_LINE("IF(NOT TARGET ${NAME})") KOKKOS_APPEND_CONFIG_LINE("ADD_LIBRARY(${NAME} UNKNOWN IMPORTED)") KOKKOS_APPEND_CONFIG_LINE("SET_TARGET_PROPERTIES(${NAME} PROPERTIES") - + GET_TARGET_PROPERTY(TPL_LIBRARY ${NAME} IMPORTED_LOCATION) IF(TPL_LIBRARY) KOKKOS_APPEND_CONFIG_LINE("IMPORTED_LOCATION ${TPL_LIBRARY}") @@ -198,7 +198,7 @@ MACRO(kokkos_import_tpl NAME) # I have still been getting errors about ROOT variables being ignored # I'm not sure if this is a scope issue - but make sure # the policy is set before we do any find_package calls - IF(${CMAKE_VERSION} VERSION_GREATER_EQUAL "3.12.0") + IF(${CMAKE_VERSION} VERSION_GREATER_EQUAL "3.12.0") CMAKE_POLICY(SET CMP0074 NEW) ENDIF() @@ -341,11 +341,12 @@ ENDMACRO() # default, custom paths are prioritized over system paths. The searched # order is: # 1. _ROOT variable -# 2. Kokkos__DIR variable -# 3. Locations in the PATHS option -# 4. Default system paths, if allowed. +# 2. _ROOT environment variable +# 3. Kokkos__DIR variable +# 4. Locations in the PATHS option +# 5. Default system paths, if allowed. # -# Default system paths are allowed if none of options (1)-(3) are specified +# Default system paths are allowed if none of options (1)-(4) are specified # or if default paths are specifically allowed via ALLOW_SYSTEM_PATH_FALLBACK # # Usage:: @@ -387,33 +388,29 @@ MACRO(kokkos_find_header VAR_NAME HEADER TPL_NAME) "PATHS" ${ARGN}) - SET(${HEADER}_FOUND FALSE) + SET(${VAR_NAME} "${VARNAME}-NOTFOUND") SET(HAVE_CUSTOM_PATHS FALSE) - IF(NOT ${HEADER}_FOUND AND DEFINED ${TPL_NAME}_ROOT) - #ONLY look in the root directory - FIND_PATH(${VAR_NAME} ${HEADER} PATHS ${${TPL_NAME}_ROOT}/include NO_DEFAULT_PATH) - SET(HAVE_CUSTOM_PATHS TRUE) - ENDIF() - IF(NOT ${HEADER}_FOUND AND DEFINED KOKKOS_${TPL_NAME}_DIR) - #ONLY look in the root directory - FIND_PATH(${VAR_NAME} ${HEADER} PATHS ${KOKKOS_${TPL_NAME}_DIR}/include NO_DEFAULT_PATH) + IF(DEFINED ${TPL_NAME}_ROOT OR + DEFINED ENV{${TPL_NAME}_ROOT} OR + DEFINED KOKKOS_${TPL_NAME}_DIR OR + TPL_PATHS) + FIND_PATH(${VAR_NAME} ${HEADER} + PATHS + ${${TPL_NAME}_ROOT} + $ENV{${TPL_NAME}_ROOT} + ${KOKKOS_${TPL_NAME}_DIR} + ${TPL_PATHS} + PATH_SUFFIXES include + NO_DEFAULT_PATH) SET(HAVE_CUSTOM_PATHS TRUE) ENDIF() - IF (NOT ${HEADER}_FOUND AND TPL_PATHS) - #we got custom paths - #ONLY look in these paths and nowhere else - FIND_PATH(${VAR_NAME} ${HEADER} PATHS ${TPL_PATHS} NO_DEFAULT_PATH) - SET(HAVE_CUSTOM_PATHS TRUE) + IF(NOT HAVE_CUSTOM_PATHS OR TPL_ALLOW_SYSTEM_PATH_FALLBACK) + #No-op if ${VAR_NAME} set by previous call + FIND_PATH(${VAR_NAME} ${HEADER}) ENDIF() - IF (NOT HAVE_CUSTOM_PATHS OR TPL_ALLOW_SYSTEM_PATH_FALLBACK) - #Now go ahead and look in system paths - IF (NOT ${HEADER}_FOUND) - FIND_PATH(${VAR_NAME} ${HEADER}) - ENDIF() - ENDIF() ENDMACRO() # @@ -424,9 +421,10 @@ ENDMACRO() # default, custom paths are prioritized over system paths. The search # order is: # 1. _ROOT variable -# 2. Kokkos__DIR variable -# 3. Locations in the PATHS option -# 4. Default system paths, if allowed. +# 2. _ROOT environment variable +# 3. Kokkos__DIR variable +# 4. Locations in the PATHS option +# 5. Default system paths, if allowed. # # Default system paths are allowed if none of options (1)-(3) are specified # or if default paths are specifically allowed via ALLOW_SYSTEM_PATH_FALLBACK @@ -439,6 +437,7 @@ ENDMACRO() # # [ALLOW_SYSTEM_PATH_FALLBACK] # [PATHS path1 [path2 ...]] +# [SUFFIXES suffix1 [suffix2 ...]] # ) # # ```` @@ -463,39 +462,46 @@ ENDMACRO() # # Custom paths to search for the library # +# ``SUFFIXES`` +# +# Suffixes appended to PATHS when attempting to locate +# the library. Defaults to {lib, lib64}. +# MACRO(kokkos_find_library VAR_NAME LIB TPL_NAME) CMAKE_PARSE_ARGUMENTS(TPL "ALLOW_SYSTEM_PATH_FALLBACK" "" - "PATHS" + "PATHS;SUFFIXES" ${ARGN}) - SET(${LIB}_FOUND FALSE) - SET(HAVE_CUSTOM_PATHS FALSE) - IF(NOT ${LIB}_FOUND AND DEFINED ${TPL_NAME}_ROOT) - FIND_LIBRARY(${VAR_NAME} ${LIB} PATHS ${${TPL_NAME}_ROOT}/lib ${${TPL_NAME}_ROOT}/lib64 NO_DEFAULT_PATH) - SET(HAVE_CUSTOM_PATHS TRUE) + IF(NOT TPL_SUFFIXES) + SET(TPL_SUFFIXES lib lib64) ENDIF() - IF(NOT ${LIB}_FOUND AND DEFINED KOKKOS_${TPL_NAME}_DIR) - #we got root paths, only look in these paths and nowhere else - FIND_LIBRARY(${VAR_NAME} ${LIB} PATHS ${KOKKOS_${TPL_NAME}_DIR}/lib ${KOKKOS_${TPL_NAME}_DIR}/lib64 NO_DEFAULT_PATH) - SET(HAVE_CUSTOM_PATHS TRUE) - ENDIF() + SET(${VAR_NAME} "${VARNAME}-NOTFOUND") + SET(HAVE_CUSTOM_PATHS FALSE) - IF (NOT ${LIB}_FOUND AND TPL_PATHS) - #we got custom paths, only look in these paths and nowhere else - FIND_LIBRARY(${VAR_NAME} ${LIB} PATHS ${TPL_PATHS} NO_DEFAULT_PATH) + IF(DEFINED ${TPL_NAME}_ROOT OR + DEFINED ENV{${TPL_NAME}_ROOT} OR + DEFINED KOKKOS_${TPL_NAME}_DIR OR + TPL_PATHS) + FIND_LIBRARY(${VAR_NAME} ${LIB} + PATHS + ${${TPL_NAME}_ROOT} + $ENV{${TPL_NAME}_ROOT} + ${KOKKOS_${TPL_NAME}_DIR} + ${TPL_PATHS} + PATH_SUFFIXES + ${TPL_SUFFIXES} + NO_DEFAULT_PATH) SET(HAVE_CUSTOM_PATHS TRUE) ENDIF() - - IF (NOT HAVE_CUSTOM_PATHS OR TPL_ALLOW_SYSTEM_PATH_FALLBACK) - IF (NOT ${LIB}_FOUND) - #Now go ahead and look in system paths - FIND_LIBRARY(${VAR_NAME} ${LIB}) - ENDIF() + IF(NOT HAVE_CUSTOM_PATHS OR TPL_ALLOW_SYSTEM_PATH_FALLBACK) + #No-op if ${VAR_NAME} set by previous call + FIND_LIBRARY(${VAR_NAME} ${LIB} PATH_SUFFIXES ${TPL_SUFFIXES}) ENDIF() + ENDMACRO() # @@ -510,26 +516,28 @@ ENDMACRO() # # INTERFACE # ALLOW_SYSTEM_PATH_FALLBACK -# LIBRARY -# LINK_LIBRARIES ... -# COMPILE_OPTIONS ... -# LINK_OPTIONS ... +# MODULE_NAME +# IMPORTED_NAME +# LIBRARY +# LIBRARIES ... +# LIBRARY_PATHS ... +# LIBRARY_SUFFIXES ... +# HEADER +# HEADERS ... +# HEADER_PATHS ... +# ) # # ``INTERFACE`` # # If specified, this TPL will build an INTERFACE library rather than an # IMPORTED target # -# ``ALLOW_SYSTEM_PATH_FALLBACK" +# ``ALLOW_SYSTEM_PATH_FALLBACK`` # # If custom paths are given and the library is not found # should we be allowed to search default system paths # or error out if not found in given paths. # -# ``LIBRARY `` -# -# If specified, this gives the name of the library to look for -# # ``MODULE_NAME `` # # If specified, the name of the enclosing module passed to @@ -541,29 +549,42 @@ ENDMACRO() # If specified, this gives the name of the target to build. # Defaults to Kokkos:: # +# ``LIBRARY `` +# +# If specified, this gives the name of the library to look for +# +# ``LIBRARIES ...`` +# +# If specified, this gives a list of libraries to find for the package +# # ``LIBRARY_PATHS ...`` # -# If specified, this gives a list of paths to search for the library -# If not given, _ROOT/lib and _ROOT/lib64 will be searched. +# If specified, this gives a list of paths to search for the library. +# If not given, _ROOT will be searched. # -# ``HEADER_PATHS ...`` +# ``LIBRARY_SUFFIXES ...`` # -# If specified, this gives a list of paths to search for the headers -# If not given, _ROOT/include and _ROOT/include will be searched. +# Suffixes appended to LIBRARY_PATHS when attempting to locate +# libraries. If not given, defaults to {lib, lib64}. +# +# ``HEADER `` +# +# If specified, this gives the name of a header to to look for # # ``HEADERS ...`` # # If specified, this gives a list of headers to find for the package # -# ``LIBRARIES ...`` +# ``HEADER_PATHS ...`` # -# If specified, this gives a list of libraries to find for the package +# If specified, this gives a list of paths to search for the headers +# If not given, _ROOT/include and _ROOT/include will be searched. # MACRO(kokkos_find_imported NAME) CMAKE_PARSE_ARGUMENTS(TPL "INTERFACE;ALLOW_SYSTEM_PATH_FALLBACK" - "HEADER;LIBRARY;IMPORTED_NAME;MODULE_NAME" - "HEADER_PATHS;LIBRARY_PATHS;HEADERS;LIBRARIES" + "IMPORTED_NAME;MODULE_NAME;LIBRARY;HEADER" + "LIBRARIES;LIBRARY_PATHS;LIBRARY_SUFFIXES;HEADERS;HEADER_PATHS" ${ARGN}) IF(NOT TPL_MODULE_NAME) @@ -584,6 +605,10 @@ MACRO(kokkos_find_imported NAME) ENDIF() ENDIF() + IF (NOT TPL_LIBRARY_SUFFIXES) + SET(TPL_LIBRARY_SUFFIXES lib lib64) + ENDIF() + SET(${NAME}_INCLUDE_DIRS) IF (TPL_HEADER) KOKKOS_FIND_HEADER(${NAME}_INCLUDE_DIRS ${TPL_HEADER} ${NAME} ${ALLOW_PATH_FALLBACK_OPT} PATHS ${TPL_HEADER_PATHS}) @@ -598,16 +623,22 @@ MACRO(kokkos_find_imported NAME) SET(${NAME}_LIBRARY) IF(TPL_LIBRARY) - KOKKOS_FIND_LIBRARY(${NAME}_LIBRARY ${TPL_LIBRARY} ${NAME} ${ALLOW_PATH_FALLBACK_OPT} PATHS ${TPL_LIBRARY_PATHS}) + KOKKOS_FIND_LIBRARY(${NAME}_LIBRARY ${TPL_LIBRARY} ${NAME} + ${ALLOW_PATH_FALLBACK_OPT} + PATHS ${TPL_LIBRARY_PATHS} + SUFFIXES ${TPL_LIBRARY_SUFFIXES}) ENDIF() SET(${NAME}_FOUND_LIBRARIES) FOREACH(LIB ${TPL_LIBRARIES}) - KOKKOS_FIND_LIBRARY(${LIB}_LOCATION ${LIB} ${NAME} ${ALLOW_PATH_FALLBACK_OPT} PATHS ${TPL_LIBRARY_PATHS}) + KOKKOS_FIND_LIBRARY(${LIB}_LOCATION ${LIB} ${NAME} + ${ALLOW_PATH_FALLBACK_OPT} + PATHS ${TPL_LIBRARY_PATHS} + SUFFIXES ${TPL_LIBRARY_SUFFIXES}) IF(${LIB}_LOCATION) LIST(APPEND ${NAME}_FOUND_LIBRARIES ${${LIB}_LOCATION}) ELSE() - SET(${NAME}_FOUND_LIBRARIES ${${LIB}_LOCATION}) + SET(${NAME}_FOUND_LIBRARIES ${${LIB}_LOCATION}) BREAK() ENDIF() ENDFOREACH() @@ -629,6 +660,13 @@ MACRO(kokkos_find_imported NAME) MARK_AS_ADVANCED(${NAME}_INCLUDE_DIRS ${NAME}_FOUND_LIBRARIES ${NAME}_LIBRARY) + #this is so much fun on a Cray system + #/usr/include should never be added as a -isystem include + #this freaks out the compiler include search order + IF (KOKKOS_IS_CRAYPE) + LIST(REMOVE_ITEM ${NAME}_INCLUDE_DIRS "/usr/include") + ENDIF() + IF (${TPL_MODULE_NAME}_FOUND) SET(IMPORT_TYPE) IF (TPL_INTERFACE) @@ -698,3 +736,66 @@ FUNCTION(kokkos_link_tpl TARGET) ENDIF() ENDFUNCTION() +FUNCTION(COMPILER_SPECIFIC_OPTIONS_HELPER) + SET(COMPILERS NVIDIA PGI XL DEFAULT Cray Intel Clang AppleClang GNU) + CMAKE_PARSE_ARGUMENTS( + PARSE + "LINK_OPTIONS;COMPILE_OPTIONS;COMPILE_DEFINITIONS;LINK_LIBRARIES" + "" + "${COMPILERS}" + ${ARGN}) + IF(PARSE_UNPARSED_ARGUMENTS) + MESSAGE(SEND_ERROR "'${PARSE_UNPARSED_ARGUMENTS}' argument(s) not recognized when providing compiler specific options") + ENDIF() + + SET(COMPILER ${KOKKOS_CXX_COMPILER_ID}) + + SET(COMPILER_SPECIFIC_FLAGS_TMP) + FOREACH(COMP ${COMPILERS}) + IF (COMPILER STREQUAL "${COMP}") + IF (PARSE_${COMPILER}) + IF (NOT "${PARSE_${COMPILER}}" STREQUAL "NO-VALUE-SPECIFIED") + SET(COMPILER_SPECIFIC_FLAGS_TMP ${PARSE_${COMPILER}}) + ENDIF() + ELSEIF(PARSE_DEFAULT) + SET(COMPILER_SPECIFIC_FLAGS_TMP ${PARSE_DEFAULT}) + ENDIF() + ENDIF() + ENDFOREACH() + + IF (PARSE_COMPILE_OPTIONS) + # The funky logic here is for future handling of argument deduplication + # If we naively pass multiple -Xcompiler flags to target_compile_options + # -Xcompiler will get deduplicated and break the build + IF ("-Xcompiler" IN_LIST COMPILER_SPECIFIC_FLAGS_TMP) + LIST(REMOVE_ITEM COMPILER_SPECIFIC_FLAGS_TMP "-Xcompiler") + GLOBAL_APPEND(KOKKOS_XCOMPILER_OPTIONS ${COMPILER_SPECIFIC_FLAGS_TMP}) + ELSE() + GLOBAL_APPEND(KOKKOS_COMPILE_OPTIONS ${COMPILER_SPECIFIC_FLAGS_TMP}) + ENDIF() + ENDIF() + + IF (PARSE_LINK_OPTIONS) + GLOBAL_APPEND(KOKKOS_LINK_OPTIONS ${COMPILER_SPECIFIC_FLAGS_TMP}) + ENDIF() + + IF (PARSE_COMPILE_DEFINITIONS) + GLOBAL_APPEND(KOKKOS_COMPILE_DEFINITIONS ${COMPILER_SPECIFIC_FLAGS_TMP}) + ENDIF() + + IF (PARSE_LINK_LIBRARIES) + GLOBAL_APPEND(KOKKOS_LINK_LIBRARIES ${COMPILER_SPECIFIC_FLAGS_TMP}) + ENDIF() +ENDFUNCTION(COMPILER_SPECIFIC_OPTIONS_HELPER) + +FUNCTION(COMPILER_SPECIFIC_FLAGS) + COMPILER_SPECIFIC_OPTIONS_HELPER(${ARGN} COMPILE_OPTIONS LINK_OPTIONS) +ENDFUNCTION(COMPILER_SPECIFIC_FLAGS) + +FUNCTION(COMPILER_SPECIFIC_DEFS) + COMPILER_SPECIFIC_OPTIONS_HELPER(${ARGN} COMPILE_DEFINITIONS) +ENDFUNCTION(COMPILER_SPECIFIC_DEFS) + +FUNCTION(COMPILER_SPECIFIC_LIBS) + COMPILER_SPECIFIC_OPTIONS_HELPER(${ARGN} LINK_LIBRARIES) +ENDFUNCTION(COMPILER_SPECIFIC_LIBS) diff --git a/lib/kokkos/cmake/kokkos_install.cmake b/lib/kokkos/cmake/kokkos_install.cmake index 1e4a5a2aad7e2dfd1eb7fd7d804fd175fef9d564..97bb2bd0b052a31052d7ac3b947501a722ab0e5b 100644 --- a/lib/kokkos/cmake/kokkos_install.cmake +++ b/lib/kokkos/cmake/kokkos_install.cmake @@ -1,3 +1,4 @@ +INCLUDE(CMakePackageConfigHelpers) IF (NOT KOKKOS_HAS_TRILINOS) INCLUDE(GNUInstallDirs) @@ -11,7 +12,6 @@ IF (NOT KOKKOS_HAS_TRILINOS) "${Kokkos_BINARY_DIR}/KokkosConfig.cmake" INSTALL_DESTINATION ${CMAKE_INSTALL_FULL_LIBDIR}/cmake) - INCLUDE(CMakePackageConfigHelpers) CONFIGURE_PACKAGE_CONFIG_FILE( cmake/KokkosConfigCommon.cmake.in "${Kokkos_BINARY_DIR}/KokkosConfigCommon.cmake" @@ -31,12 +31,18 @@ IF (NOT KOKKOS_HAS_TRILINOS) ELSE() CONFIGURE_FILE(cmake/KokkosConfigCommon.cmake.in ${Kokkos_BINARY_DIR}/KokkosConfigCommon.cmake @ONLY) file(READ ${Kokkos_BINARY_DIR}/KokkosConfigCommon.cmake KOKKOS_CONFIG_COMMON) - file(APPEND "${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/KokkosConfig_install.cmake" ${KOKKOS_CONFIG_COMMON}) -ENDIF() + file(APPEND "${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/KokkosConfig_install.cmake" "${KOKKOS_CONFIG_COMMON}") + CONFIGURE_FILE(cmake/KokkosTrilinosConfig.cmake.in ${Kokkos_BINARY_DIR}/KokkosTrilinosConfig.cmake @ONLY) + file(READ ${Kokkos_BINARY_DIR}/KokkosTrilinosConfig.cmake KOKKOS_TRILINOS_CONFIG) + file(APPEND "${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/KokkosConfig_install.cmake" "${KOKKOS_TRILINOS_CONFIG}") + + WRITE_BASIC_PACKAGE_VERSION_FILE("${CMAKE_CURRENT_BINARY_DIR}/KokkosConfigVersion.cmake" + VERSION "${Kokkos_VERSION}" + COMPATIBILITY SameMajorVersion) -# build and install pkgconfig file -CONFIGURE_FILE(core/src/kokkos.pc.in kokkos.pc @ONLY) -INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/kokkos.pc DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig) + install(FILES ${CMAKE_CURRENT_BINARY_DIR}/KokkosConfigVersion.cmake + DESTINATION "${${PROJECT_NAME}_INSTALL_LIB_DIR}/cmake/${PACKAGE_NAME}") +ENDIF() INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/KokkosCore_config.h DESTINATION ${KOKKOS_HEADER_DIR}) diff --git a/lib/kokkos/cmake/kokkos_test_cxx_std.cmake b/lib/kokkos/cmake/kokkos_test_cxx_std.cmake index c264517abe114bc306a19ca3459f584548506dd5..603b4b3d7aef3d48d86aa63b42c1e20dd3f25d04 100644 --- a/lib/kokkos/cmake/kokkos_test_cxx_std.cmake +++ b/lib/kokkos/cmake/kokkos_test_cxx_std.cmake @@ -14,12 +14,12 @@ FUNCTION(kokkos_set_cxx_standard_feature standard) ENDIF() ELSEIF(CMAKE_CXX_EXTENSIONS) IF(KOKKOS_DONT_ALLOW_EXTENSIONS) - MESSAGE(FATAL_ERROR "The chosen configuration does not support CXX extensions flags: ${KOKKOS_DONT_ALLOW_EXTENSIONS}. Must set CMAKE_CXX_EXTENSIONS=OFF to continue") + MESSAGE(FATAL_ERROR "The chosen configuration does not support CXX extensions flags: ${KOKKOS_DONT_ALLOW_EXTENSIONS}. Must set CMAKE_CXX_EXTENSIONS=OFF to continue") ELSE() GLOBAL_SET(KOKKOS_USE_CXX_EXTENSIONS ON) ENDIF() ELSE() - #For trilinos, we need to make sure downstream projects + #For trilinos, we need to make sure downstream projects GLOBAL_SET(KOKKOS_USE_CXX_EXTENSIONS OFF) ENDIF() @@ -29,6 +29,10 @@ FUNCTION(kokkos_set_cxx_standard_feature standard) ELSEIF(NOT KOKKOS_USE_CXX_EXTENSIONS AND ${STANDARD_NAME}) MESSAGE(STATUS "Using ${${STANDARD_NAME}} for C++${standard} standard as feature") GLOBAL_SET(KOKKOS_CXX_STANDARD_FEATURE ${FEATURE_NAME}) + ELSEIF(KOKKOS_CXX_COMPILER_ID STREQUAL "MSVC") + #MSVC doesn't need a command line flag, that doesn't mean it has no support + MESSAGE(STATUS "Using no flag for C++${standard} standard as feature") + GLOBAL_SET(KOKKOS_CXX_STANDARD_FEATURE ${FEATURE_NAME}) ELSE() #nope, we can't do anything here MESSAGE(WARNING "C++${standard} is not supported as a compiler feature. We will choose custom flags for now, but this behavior has been deprecated. Please open an issue at https://github.com/kokkos/kokkos/issues reporting that ${KOKKOS_CXX_COMPILER_ID} ${KOKKOS_CXX_COMPILER_VERSION} failed for ${KOKKOS_CXX_STANDARD}, preferrably including your CMake command.") @@ -119,6 +123,9 @@ IF (NOT KOKKOS_CXX_STANDARD_FEATURE) ELSEIF(KOKKOS_CXX_COMPILER_ID STREQUAL Intel) INCLUDE(${KOKKOS_SRC_PATH}/cmake/intel.cmake) kokkos_set_intel_flags(${KOKKOS_CXX_STANDARD} ${KOKKOS_CXX_INTERMEDIATE_STANDARD}) + ELSEIF(KOKKOS_CXX_COMPILER_ID STREQUAL "MSVC") + INCLUDE(${KOKKOS_SRC_PATH}/cmake/msvc.cmake) + kokkos_set_msvc_flags(${KOKKOS_CXX_STANDARD} ${KOKKOS_CXX_INTERMEDIATE_STANDARD}) ELSE() INCLUDE(${KOKKOS_SRC_PATH}/cmake/gnu.cmake) kokkos_set_gnu_flags(${KOKKOS_CXX_STANDARD} ${KOKKOS_CXX_INTERMEDIATE_STANDARD}) @@ -128,9 +135,9 @@ IF (NOT KOKKOS_CXX_STANDARD_FEATURE) IF (DEFINED CXX_STD_FLAGS_ACCEPTED) UNSET(CXX_STD_FLAGS_ACCEPTED CACHE) ENDIF() - CHECK_CXX_COMPILER_FLAG(${KOKKOS_CXX_STANDARD_FLAG} CXX_STD_FLAGS_ACCEPTED) + CHECK_CXX_COMPILER_FLAG("${KOKKOS_CXX_STANDARD_FLAG}" CXX_STD_FLAGS_ACCEPTED) IF (NOT CXX_STD_FLAGS_ACCEPTED) - CHECK_CXX_COMPILER_FLAG(${KOKKOS_CXX_INTERMEDIATE_STANDARD_FLAG} CXX_INT_STD_FLAGS_ACCEPTED) + CHECK_CXX_COMPILER_FLAG("${KOKKOS_CXX_INTERMEDIATE_STANDARD_FLAG}" CXX_INT_STD_FLAGS_ACCEPTED) IF (NOT CXX_INT_STD_FLAGS_ACCEPTED) MESSAGE(FATAL_ERROR "${KOKKOS_CXX_COMPILER_ID} did not accept ${KOKKOS_CXX_STANDARD_FLAG} or ${KOKKOS_CXX_INTERMEDIATE_STANDARD_FLAG}. You likely need to reduce the level of the C++ standard from ${KOKKOS_CXX_STANDARD}") ENDIF() diff --git a/lib/kokkos/cmake/kokkos_tpls.cmake b/lib/kokkos/cmake/kokkos_tpls.cmake index 181a497d52a0e5f579e4a5ffbe05c1c1591edc29..76efd428479424013aa346895458f99d084e9310 100644 --- a/lib/kokkos/cmake/kokkos_tpls.cmake +++ b/lib/kokkos/cmake/kokkos_tpls.cmake @@ -15,6 +15,10 @@ KOKKOS_TPL_OPTION(CUDA Off) KOKKOS_TPL_OPTION(LIBRT Off) KOKKOS_TPL_OPTION(LIBDL On) +IF(KOKKOS_ENABLE_PROFILING AND NOT KOKKOS_ENABLE_LIBDL) + MESSAGE(SEND_ERROR "Kokkos_ENABLE_PROFILING requires Kokkos_ENABLE_LIBDL=ON") +ENDIF() + IF(Trilinos_ENABLE_Kokkos AND TPL_ENABLE_HPX) SET(HPX_DEFAULT ON) ELSE() diff --git a/lib/kokkos/cmake/kokkos_tribits.cmake b/lib/kokkos/cmake/kokkos_tribits.cmake index d2317d2446ffdbf2626fff6117941af7510db865..6ee1409aa72127d4ae4c127d097b4420a9149cb1 100644 --- a/lib/kokkos/cmake/kokkos_tribits.cmake +++ b/lib/kokkos/cmake/kokkos_tribits.cmake @@ -43,6 +43,8 @@ MACRO(KOKKOS_SUBPACKAGE NAME) SET(PACKAGE_NAME ${PACKAGE_NAME}${NAME}) STRING(TOUPPER ${PACKAGE_NAME} PACKAGE_NAME_UC) SET(${PACKAGE_NAME}_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}) + #ADD_INTERFACE_LIBRARY(PACKAGE_${PACKAGE_NAME}) + #GLOBAL_SET(${PACKAGE_NAME}_LIBS "") endif() ENDMACRO() @@ -114,57 +116,63 @@ MACRO(KOKKOS_INTERNAL_ADD_LIBRARY_INSTALL LIBRARY_NAME) VERIFY_EMPTY(KOKKOS_ADD_LIBRARY ${PARSE_UNPARSED_ARGUMENTS}) ENDMACRO() -FUNCTION(KOKKOS_ADD_EXECUTABLE EXE_NAME) +FUNCTION(KOKKOS_ADD_EXECUTABLE ROOT_NAME) if (KOKKOS_HAS_TRILINOS) - TRIBITS_ADD_EXECUTABLE(${EXE_NAME} ${ARGN}) + TRIBITS_ADD_EXECUTABLE(${ROOT_NAME} ${ARGN}) else() - CMAKE_PARSE_ARGUMENTS(PARSE + CMAKE_PARSE_ARGUMENTS(PARSE "TESTONLY" "" "SOURCES;TESTONLYLIBS" ${ARGN}) + SET(EXE_NAME ${PACKAGE_NAME}_${ROOT_NAME}) ADD_EXECUTABLE(${EXE_NAME} ${PARSE_SOURCES}) IF (PARSE_TESTONLYLIBS) - TARGET_LINK_LIBRARIES(${EXE_NAME} ${PARSE_TESTONLYLIBS}) + TARGET_LINK_LIBRARIES(${EXE_NAME} PRIVATE ${PARSE_TESTONLYLIBS}) ENDIF() VERIFY_EMPTY(KOKKOS_ADD_EXECUTABLE ${PARSE_UNPARSED_ARGUMENTS}) + #All executables must link to all the kokkos targets + #This is just private linkage because exe is final + TARGET_LINK_LIBRARIES(${EXE_NAME} PRIVATE kokkos) endif() ENDFUNCTION() -IF(NOT TARGET check) - ADD_CUSTOM_TARGET(check COMMAND ${CMAKE_CTEST_COMMAND} -VV -C ${CMAKE_CFG_INTDIR}) -ENDIF() - - FUNCTION(KOKKOS_ADD_EXECUTABLE_AND_TEST ROOT_NAME) IF (KOKKOS_HAS_TRILINOS) TRIBITS_ADD_EXECUTABLE_AND_TEST( - ${ROOT_NAME} - TESTONLYLIBS kokkos_gtest + ${ROOT_NAME} + TESTONLYLIBS kokkos_gtest ${ARGN} NUM_MPI_PROCS 1 COMM serial mpi FAIL_REGULAR_EXPRESSION " FAILED " ) ELSE() - CMAKE_PARSE_ARGUMENTS(PARSE + CMAKE_PARSE_ARGUMENTS(PARSE "" "" "SOURCES;CATEGORIES" ${ARGN}) VERIFY_EMPTY(KOKKOS_ADD_EXECUTABLE_AND_TEST ${PARSE_UNPARSED_ARGUMENTS}) - SET(EXE_NAME ${PACKAGE_NAME}_${ROOT_NAME}) - KOKKOS_ADD_TEST_EXECUTABLE(${EXE_NAME} + KOKKOS_ADD_TEST_EXECUTABLE(${ROOT_NAME} SOURCES ${PARSE_SOURCES} ) - KOKKOS_ADD_TEST(NAME ${ROOT_NAME} - EXE ${EXE_NAME} + KOKKOS_ADD_TEST(NAME ${ROOT_NAME} + EXE ${ROOT_NAME} FAIL_REGULAR_EXPRESSION " FAILED " ) ENDIF() ENDFUNCTION() +FUNCTION(KOKKOS_SET_EXE_PROPERTY ROOT_NAME) + SET(TARGET_NAME ${PACKAGE_NAME}_${ROOT_NAME}) + IF (NOT TARGET ${TARGET_NAME}) + MESSAGE(SEND_ERROR "No target ${TARGET_NAME} exists - cannot set target properties") + ENDIF() + SET_PROPERTY(TARGET ${TARGET_NAME} PROPERTY ${ARGN}) +ENDFUNCTION() + MACRO(KOKKOS_SETUP_BUILD_ENVIRONMENT) INCLUDE(${KOKKOS_SRC_PATH}/cmake/kokkos_compiler_id.cmake) INCLUDE(${KOKKOS_SRC_PATH}/cmake/kokkos_enable_devices.cmake) @@ -178,20 +186,17 @@ MACRO(KOKKOS_SETUP_BUILD_ENVIRONMENT) INCLUDE(${KOKKOS_SRC_PATH}/cmake/kokkos_corner_cases.cmake) ENDMACRO() -MACRO(KOKKOS_ADD_TEST_EXECUTABLE EXE_NAME) - CMAKE_PARSE_ARGUMENTS(PARSE +MACRO(KOKKOS_ADD_TEST_EXECUTABLE ROOT_NAME) + CMAKE_PARSE_ARGUMENTS(PARSE "" "" "SOURCES" ${ARGN}) - KOKKOS_ADD_EXECUTABLE(${EXE_NAME} + KOKKOS_ADD_EXECUTABLE(${ROOT_NAME} SOURCES ${PARSE_SOURCES} ${PARSE_UNPARSED_ARGUMENTS} TESTONLYLIBS kokkos_gtest ) - IF (NOT KOKKOS_HAS_TRILINOS) - ADD_DEPENDENCIES(check ${EXE_NAME}) - ENDIF() ENDMACRO() MACRO(KOKKOS_PACKAGE_POSTPROCESS) @@ -201,7 +206,7 @@ MACRO(KOKKOS_PACKAGE_POSTPROCESS) ENDMACRO() FUNCTION(KOKKOS_SET_LIBRARY_PROPERTIES LIBRARY_NAME) - CMAKE_PARSE_ARGUMENTS(PARSE + CMAKE_PARSE_ARGUMENTS(PARSE "PLAIN_STYLE" "" "" @@ -230,6 +235,15 @@ FUNCTION(KOKKOS_SET_LIBRARY_PROPERTIES LIBRARY_NAME) $<$:${KOKKOS_COMPILE_OPTIONS}> ) + TARGET_COMPILE_DEFINITIONS( + ${LIBRARY_NAME} PUBLIC + $<$:${KOKKOS_COMPILE_DEFINITIONS}> + ) + + TARGET_LINK_LIBRARIES( + ${LIBRARY_NAME} PUBLIC ${KOKKOS_LINK_LIBRARIES} + ) + IF (KOKKOS_ENABLE_CUDA) TARGET_COMPILE_OPTIONS( ${LIBRARY_NAME} @@ -240,11 +254,18 @@ FUNCTION(KOKKOS_SET_LIBRARY_PROPERTIES LIBRARY_NAME) LIST(APPEND NODEDUP_CUDAFE_OPTIONS -Xcudafe ${OPT}) ENDFOREACH() TARGET_COMPILE_OPTIONS( - ${LIBRARY_NAME} + ${LIBRARY_NAME} PUBLIC $<$:${NODEDUP_CUDAFE_OPTIONS}> ) ENDIF() + IF (KOKKOS_ENABLE_HIP) + TARGET_COMPILE_OPTIONS( + ${LIBRARY_NAME} + PUBLIC $<$:${KOKKOS_AMDGPU_OPTIONS}> + ) + ENDIF() + LIST(LENGTH KOKKOS_XCOMPILER_OPTIONS XOPT_LENGTH) IF (XOPT_LENGTH GREATER 1) MESSAGE(FATAL_ERROR "CMake deduplication does not allow multiple -Xcompiler flags (${KOKKOS_XCOMPILER_OPTIONS}): will require Kokkos to upgrade to minimum 3.12") @@ -253,12 +274,12 @@ FUNCTION(KOKKOS_SET_LIBRARY_PROPERTIES LIBRARY_NAME) SET(NODEDUP_XCOMPILER_OPTIONS) FOREACH(OPT ${KOKKOS_XCOMPILER_OPTIONS}) #I have to do this for now because we can't guarantee 3.12 support - #I really should do this with the shell option - LIST(APPEND NODEDUP_XCOMPILER_OPTIONS -Xcompiler) - LIST(APPEND NODEDUP_XCOMPILER_OPTIONS ${OPT}) + #I really should do this with the shell option + LIST(APPEND NODEDUP_XCOMPILER_OPTIONS -Xcompiler) + LIST(APPEND NODEDUP_XCOMPILER_OPTIONS ${OPT}) ENDFOREACH() TARGET_COMPILE_OPTIONS( - ${LIBRARY_NAME} + ${LIBRARY_NAME} PUBLIC $<$:${NODEDUP_XCOMPILER_OPTIONS}> ) ENDIF() @@ -276,7 +297,7 @@ FUNCTION(KOKKOS_SET_LIBRARY_PROPERTIES LIBRARY_NAME) ENDFUNCTION() FUNCTION(KOKKOS_INTERNAL_ADD_LIBRARY LIBRARY_NAME) - CMAKE_PARSE_ARGUMENTS(PARSE + CMAKE_PARSE_ARGUMENTS(PARSE "STATIC;SHARED" "" "HEADERS;SOURCES" @@ -362,7 +383,7 @@ FUNCTION(KOKKOS_LIB_INCLUDE_DIRECTORIES TARGET) #ignore the target, tribits doesn't do anything directly with targets TRIBITS_INCLUDE_DIRECTORIES(${ARGN}) ELSE() #append to a list for later - KOKKOS_LIB_TYPE(${TARGET} INCTYPE) + KOKKOS_LIB_TYPE(${TARGET} INCTYPE) FOREACH(DIR ${ARGN}) TARGET_INCLUDE_DIRECTORIES(${TARGET} ${INCTYPE} $) ENDFOREACH() @@ -390,3 +411,15 @@ MACRO(KOKKOS_ADD_TEST_DIRECTORIES) ENDIF() ENDIF() ENDMACRO() + +MACRO(KOKKOS_ADD_EXAMPLE_DIRECTORIES) + if (KOKKOS_HAS_TRILINOS) + TRIBITS_ADD_EXAMPLE_DIRECTORIES(${ARGN}) + else() + IF(KOKKOS_ENABLE_EXAMPLES) + FOREACH(EXAMPLE_DIR ${ARGN}) + ADD_SUBDIRECTORY(${EXAMPLE_DIR}) + ENDFOREACH() + ENDIF() + endif() +ENDMACRO() diff --git a/lib/kokkos/cmake/msvc.cmake b/lib/kokkos/cmake/msvc.cmake new file mode 100644 index 0000000000000000000000000000000000000000..85421bdbaaa46dd5d671f4e86b50d52b25d98d30 --- /dev/null +++ b/lib/kokkos/cmake/msvc.cmake @@ -0,0 +1,11 @@ + +FUNCTION(kokkos_set_msvc_flags full_standard int_standard) + IF (CMAKE_CXX_EXTENSIONS) + SET(KOKKOS_CXX_STANDARD_FLAG "" PARENT_SCOPE) + SET(KOKKOS_CXX_INTERMEDIATE_STANDARD_FLAG "" PARENT_SCOPE) + ELSE() + SET(KOKKOS_CXX_STANDARD_FLAG "" PARENT_SCOPE) + SET(KOKKOS_CXX_INTERMEDIATE_STANDARD_FLAG "" PARENT_SCOPE) + ENDIF() +ENDFUNCTION() + diff --git a/lib/kokkos/cmake/tpls/FindTPLCUSPARSE.cmake b/lib/kokkos/cmake/tpls/FindTPLCUSPARSE.cmake index b8cee04804cd6cbfdb475b2631c1b1beddfa7b41..a59868b73bc203f69d992b3a19f569a20b359761 100644 --- a/lib/kokkos/cmake/tpls/FindTPLCUSPARSE.cmake +++ b/lib/kokkos/cmake/tpls/FindTPLCUSPARSE.cmake @@ -55,19 +55,9 @@ # Check for CUDA support -IF (NOT TPL_ENABLE_CUDA OR CUDA_VERSION VERSION_LESS "4.1") - MESSAGE(FATAL_ERROR "\nCUSPARSE: did not find acceptable version of CUDA libraries (4.1 or greater)") +IF (NOT TPL_ENABLE_CUDA) + MESSAGE(FATAL_ERROR "\nCUSPARSE requires CUDA") ELSE() - IF(CMAKE_VERSION VERSION_LESS "2.8.8") - # FindCUDA before CMake 2.8.8 does not find cusparse library; therefore, we must - find_library(CUDA_cusparse_LIBRARY - cusparse - HINTS ${CUDA_TOOLKIT_ROOT_DIR}/lib - ) - IF(CUDA_cusparse_LIBRARY STREQUAL "CUDA_cusparse_LIBRARY-NOTFOUND") - MESSAGE(FATAL_ERROR "\nCUSPARSE: could not find cuspasre library.") - ENDIF() - ENDIF() GLOBAL_SET(TPL_CUSPARSE_LIBRARY_DIRS) GLOBAL_SET(TPL_CUSPARSE_INCLUDE_DIRS ${TPL_CUDA_INCLUDE_DIRS}) GLOBAL_SET(TPL_CUSPARSE_LIBRARIES ${CUDA_cusparse_LIBRARY}) diff --git a/lib/kokkos/config/test_all_sandia b/lib/kokkos/config/test_all_sandia index d94c38cbc698be3f54e3c82b47faa3561c03f520..193a162a4e6e385db674d7b3410fe39f81d4e648 100755 --- a/lib/kokkos/config/test_all_sandia +++ b/lib/kokkos/config/test_all_sandia @@ -76,19 +76,18 @@ CLANG_BUILD_LIST="Pthread,Serial,Pthread_Serial" CUDA_BUILD_LIST="Cuda_OpenMP,Cuda_Pthread,Cuda_Serial" CUDA_IBM_BUILD_LIST="Cuda_OpenMP,Cuda_Serial" -GCC_WARNING_FLAGS="-Wall,-Wshadow,-pedantic,-Werror,-Wsign-compare,-Wtype-limits,-Wignored-qualifiers,-Wempty-body,-Wclobbered,-Wuninitialized" -IBM_WARNING_FLAGS="-Wall,-Wshadow,-pedantic,-Werror,-Wsign-compare,-Wtype-limits,-Wuninitialized" -CLANG_WARNING_FLAGS="-Wall,-Wshadow,-pedantic,-Werror,-Wsign-compare,-Wtype-limits,-Wuninitialized" -INTEL_WARNING_FLAGS="-Wall,-Wshadow,-pedantic,-Werror,-Wsign-compare,-Wtype-limits,-Wuninitialized" -#CUDA_WARNING_FLAGS="-Wall,-Wshadow,-pedantic,-Werror,-Wsign-compare,-Wtype-limits,-Wuninitialized" -CUDA_WARNING_FLAGS="-Wall,-Wshadow,-pedantic,-Wsign-compare,-Wtype-limits,-Wuninitialized" +GCC_WARNING_FLAGS="-Wall,-Wunused-parameter,-Wshadow,-pedantic,-Werror,-Wsign-compare,-Wtype-limits,-Wignored-qualifiers,-Wempty-body,-Wclobbered,-Wuninitialized" +IBM_WARNING_FLAGS="-Wall,-Wunused-parameter,-Wshadow,-pedantic,-Werror,-Wsign-compare,-Wtype-limits,-Wuninitialized" +CLANG_WARNING_FLAGS="-Wall,-Wunused-parameter,-Wshadow,-pedantic,-Werror,-Wsign-compare,-Wtype-limits,-Wuninitialized" +INTEL_WARNING_FLAGS="-Wall,-Wunused-parameter,-Wshadow,-pedantic,-Werror,-Wsign-compare,-Wtype-limits,-Wuninitialized" +#CUDA_WARNING_FLAGS="-Wall,-Wunused-parameter,-Wshadow,-pedantic,-Werror,-Wsign-compare,-Wtype-limits,-Wuninitialized" +CUDA_WARNING_FLAGS="-Wall,-Wunused-parameter,-Wshadow,-pedantic,-Wsign-compare,-Wtype-limits,-Wuninitialized" PGI_WARNING_FLAGS="" # Default. Machine specific can override. DEBUG=False ARGS="" CUSTOM_BUILD_LIST="" -QTHREADS_PATH="" DRYRUN=False BUILD_ONLY=False declare -i NUM_JOBS_TO_RUN_IN_PARALLEL=1 @@ -114,9 +113,6 @@ do --kokkos-path*) KOKKOS_PATH="${key#*=}" ;; - --qthreads-path*) - QTHREADS_PATH="${key#*=}" - ;; --build-list*) CUSTOM_BUILD_LIST="${key#*=}" ;; @@ -417,8 +413,8 @@ if [ "$PRINT_HELP" = "True" ]; then echo "--build-list=BUILD,BUILD,BUILD..." echo " Provide a comma-separated list of builds instead of running all builds" echo " Valid items:" - echo " OpenMP, Pthread, Qthreads, Serial, OpenMP_Serial, Pthread_Serial" - echo " Qthreads_Serial, Cuda_OpenMP, Cuda_Pthread, Cuda_Serial" + echo " OpenMP, Pthread, Serial, OpenMP_Serial, Pthread_Serial" + echo " Cuda_OpenMP, Cuda_Pthread, Cuda_Serial" echo "" echo "ARGS: list of expressions matching compilers to test" @@ -483,33 +479,6 @@ for ARG in $ARGS; do done done -# Check if Qthreads build requested. -HAVE_QTHREADS_BUILD="False" -if [ -n "$CUSTOM_BUILD_LIST" ]; then - if [[ "$CUSTOM_BUILD_LIST" = *Qthreads* ]]; then - HAVE_QTHREADS_BUILD="True" - fi -else - for COMPILER_DATA in "${COMPILERS[@]}"; do - ARR=($COMPILER_DATA) - BUILD_LIST=${ARR[2]} - if [[ "$BUILD_LIST" = *Qthreads* ]]; then - HAVE_QTHREADS_BUILD="True" - fi - done -fi - -# Ensure Qthreads path is set if Qthreads build is requested. -if [ "$HAVE_QTHREADS_BUILD" = "True" ]; then - if [ -z "$QTHREADS_PATH" ]; then - echo "Need to supply Qthreads path (--qthreads-path) when testing Qthreads backend." >&2 - exit 1 - else - # Strip trailing slashes from path. - QTHREADS_PATH=$(echo $QTHREADS_PATH | sed 's/\/*$//') - fi -fi - # # Functions. # @@ -627,14 +596,6 @@ single_build_and_test() { local extra_args=--with-hwloc=$(dirname $(dirname $(which hwloc-info))) fi - if [[ "$build" = *Qthreads* ]]; then - if [[ "$build_type" = hwloc* ]]; then - local extra_args="$extra_args --qthreads-path=${QTHREADS_PATH}_hwloc" - else - local extra_args="$extra_args --qthreads-path=$QTHREADS_PATH" - fi - fi - if [[ "$OPT_FLAG" = "" ]]; then OPT_FLAG="-O3" fi diff --git a/lib/kokkos/containers/performance_tests/CMakeLists.txt b/lib/kokkos/containers/performance_tests/CMakeLists.txt index ca76808190d43be58fccd9bceb58b9faaa7fc167..1011cb8fd17eb44bbe5edd3e616af74eef1299b2 100644 --- a/lib/kokkos/containers/performance_tests/CMakeLists.txt +++ b/lib/kokkos/containers/performance_tests/CMakeLists.txt @@ -5,58 +5,42 @@ KOKKOS_INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/../src ) IF(Kokkos_ENABLE_CUDA) SET(SOURCES - TestMain.cpp + TestMain.cpp TestCuda.cpp ) - KOKKOS_ADD_TEST_EXECUTABLE( PerfTestExec_Cuda + KOKKOS_ADD_EXECUTABLE_AND_TEST( PerformanceTest_Cuda SOURCES ${SOURCES} ) - - KOKKOS_ADD_TEST( NAME PerformanceTest_Cuda - EXE PerfTestExec_Cuda - ) ENDIF() IF(Kokkos_ENABLE_PTHREAD) SET(SOURCES - TestMain.cpp + TestMain.cpp TestThreads.cpp ) - KOKKOS_ADD_TEST_EXECUTABLE( PerfTestExec_Threads + KOKKOS_ADD_EXECUTABLE_AND_TEST( PerformanceTest_Threads SOURCES ${SOURCES} ) - - KOKKOS_ADD_TEST( NAME PerformanceTest_Threads - EXE PerfTestExec_Threads - ) ENDIF() IF(Kokkos_ENABLE_OPENMP) SET(SOURCES - TestMain.cpp + TestMain.cpp TestOpenMP.cpp ) - KOKKOS_ADD_TEST_EXECUTABLE( PerfTestExec_OpenMP + KOKKOS_ADD_EXECUTABLE_AND_TEST( PerformanceTest_OpenMP SOURCES ${SOURCES} ) - - KOKKOS_ADD_TEST( NAME PerformanceTest_OpenMP - EXE PerfTestExec_OpenMP - ) ENDIF() IF(Kokkos_ENABLE_HPX) SET(SOURCES - TestMain.cpp + TestMain.cpp TestHPX.cpp ) - KOKKOS_ADD_TEST_EXECUTABLE( PerfTestExec_HPX + KOKKOS_ADD_EXECUTABLE_AND_TEST( PerformanceTest_HPX SOURCES ${SOURCES} ) - - KOKKOS_ADD_TEST( NAME PerformanceTest_HPX - EXE PerfTestExec_HPX - ) ENDIF() diff --git a/lib/kokkos/containers/src/Kokkos_Bitset.hpp b/lib/kokkos/containers/src/Kokkos_Bitset.hpp index 3596c7653ac1de08f748ef35de2070af4f16630f..ab75fc1e1d006e31c0efce756e85f4354f0c5588 100644 --- a/lib/kokkos/containers/src/Kokkos_Bitset.hpp +++ b/lib/kokkos/containers/src/Kokkos_Bitset.hpp @@ -103,19 +103,19 @@ class Bitset { } } - KOKKOS_INLINE_FUNCTION + KOKKOS_DEFAULTED_FUNCTION Bitset(const Bitset&) = default; - KOKKOS_INLINE_FUNCTION + KOKKOS_DEFAULTED_FUNCTION Bitset& operator=(const Bitset&) = default; - KOKKOS_INLINE_FUNCTION + KOKKOS_DEFAULTED_FUNCTION Bitset(Bitset&&) = default; - KOKKOS_INLINE_FUNCTION + KOKKOS_DEFAULTED_FUNCTION Bitset& operator=(Bitset&&) = default; - KOKKOS_INLINE_FUNCTION + KOKKOS_DEFAULTED_FUNCTION ~Bitset() = default; /// number of bits in the set diff --git a/lib/kokkos/containers/src/Kokkos_DualView.hpp b/lib/kokkos/containers/src/Kokkos_DualView.hpp index d8a3ebc1ae947b6ef617d106de8d954ca4bfbc77..ede7d9a31f045a6346f41401d283f94a54675904 100644 --- a/lib/kokkos/containers/src/Kokkos_DualView.hpp +++ b/lib/kokkos/containers/src/Kokkos_DualView.hpp @@ -238,6 +238,53 @@ class DualView : public ViewTraits { #endif } + /// \brief Constructor that allocates View objects on both host and device. + /// + /// This constructor works like the analogous constructor of View. + /// The first arguments are wrapped up in a ViewCtor class, this allows + /// for a label, without initializing, and all of the other things that can + /// be wrapped up in a Ctor class. + /// The arguments that follow are the dimensions of the + /// View objects. For example, if the View has three dimensions, + /// the first three integer arguments will be nonzero, and you may + /// omit the integer arguments that follow. + template + DualView(const Impl::ViewCtorProp& arg_prop, + typename std::enable_if::has_pointer, + size_t>::type const n0 = + KOKKOS_IMPL_CTOR_DEFAULT_ARG, + const size_t n1 = KOKKOS_IMPL_CTOR_DEFAULT_ARG, + const size_t n2 = KOKKOS_IMPL_CTOR_DEFAULT_ARG, + const size_t n3 = KOKKOS_IMPL_CTOR_DEFAULT_ARG, + const size_t n4 = KOKKOS_IMPL_CTOR_DEFAULT_ARG, + const size_t n5 = KOKKOS_IMPL_CTOR_DEFAULT_ARG, + const size_t n6 = KOKKOS_IMPL_CTOR_DEFAULT_ARG, + const size_t n7 = KOKKOS_IMPL_CTOR_DEFAULT_ARG) + : d_view(arg_prop, n0, n1, n2, n3, n4, n5, n6, n7), + h_view(create_mirror_view(d_view)) // without UVM, host View mirrors + , + modified_flags(t_modified_flags("DualView::modified_flags")) { +#ifdef KOKKOS_ENABLE_DEPRECATED_CODE + modified_host = t_modified_flag(modified_flags, 0); + modified_device = t_modified_flag(modified_flags, 1); +#endif + } + + explicit inline DualView(const ViewAllocateWithoutInitializing& arg_prop, + const size_t arg_N0 = KOKKOS_IMPL_CTOR_DEFAULT_ARG, + const size_t arg_N1 = KOKKOS_IMPL_CTOR_DEFAULT_ARG, + const size_t arg_N2 = KOKKOS_IMPL_CTOR_DEFAULT_ARG, + const size_t arg_N3 = KOKKOS_IMPL_CTOR_DEFAULT_ARG, + const size_t arg_N4 = KOKKOS_IMPL_CTOR_DEFAULT_ARG, + const size_t arg_N5 = KOKKOS_IMPL_CTOR_DEFAULT_ARG, + const size_t arg_N6 = KOKKOS_IMPL_CTOR_DEFAULT_ARG, + const size_t arg_N7 = KOKKOS_IMPL_CTOR_DEFAULT_ARG) + : DualView(Impl::ViewCtorProp( + arg_prop.label, Kokkos::WithoutInitializing), + arg_N0, arg_N1, arg_N2, arg_N3, arg_N4, arg_N5, arg_N6, + arg_N7) {} + //! Copy constructor (shallow copy) template DualView(const DualView& src) @@ -470,23 +517,43 @@ class DualView : public ViewTraits { /// as modified, by calling the modify() method with the /// appropriate template parameter. template - void sync(const typename Impl::enable_if< + void sync(const typename std::enable_if< (std::is_same::value) || (std::is_same::value), int>::type& = 0) { - if (modified_flags.data() == NULL) return; + if (modified_flags.data() == nullptr) return; int dev = get_device_side(); if (dev == 1) { // if Device is the same as DualView's device type if ((modified_flags(0) > 0) && (modified_flags(0) >= modified_flags(1))) { +#ifdef KOKKOS_ENABLE_CUDA + if (std::is_same::value) { + if (d_view.data() == h_view.data()) + Kokkos::Impl::cuda_prefetch_pointer( + Kokkos::Cuda(), d_view.data(), + sizeof(typename t_dev::value_type) * d_view.span(), true); + } +#endif + deep_copy(d_view, h_view); modified_flags(0) = modified_flags(1) = 0; } } if (dev == 0) { // hopefully Device is the same as DualView's host type if ((modified_flags(1) > 0) && (modified_flags(1) >= modified_flags(0))) { +#ifdef KOKKOS_ENABLE_CUDA + if (std::is_same::value) { + if (d_view.data() == h_view.data()) + Kokkos::Impl::cuda_prefetch_pointer( + Kokkos::Cuda(), d_view.data(), + sizeof(typename t_dev::value_type) * d_view.span(), false); + } +#endif + deep_copy(h_view, d_view); modified_flags(0) = modified_flags(1) = 0; } @@ -499,12 +566,12 @@ class DualView : public ViewTraits { } template - void sync(const typename Impl::enable_if< + void sync(const typename std::enable_if< (!std::is_same::value) || (std::is_same::value), int>::type& = 0) { - if (modified_flags.data() == NULL) return; + if (modified_flags.data() == nullptr) return; int dev = get_device_side(); @@ -527,8 +594,18 @@ class DualView : public ViewTraits { typename traits::non_const_data_type>::value) Impl::throw_runtime_exception( "Calling sync_host on a DualView with a const datatype."); - if (modified_flags.data() == NULL) return; + if (modified_flags.data() == nullptr) return; if (modified_flags(1) > modified_flags(0)) { +#ifdef KOKKOS_ENABLE_CUDA + if (std::is_same::value) { + if (d_view.data() == h_view.data()) + Kokkos::Impl::cuda_prefetch_pointer( + Kokkos::Cuda(), d_view.data(), + sizeof(typename t_dev::value_type) * d_view.span(), false); + } +#endif + deep_copy(h_view, d_view); modified_flags(1) = modified_flags(0) = 0; } @@ -539,8 +616,18 @@ class DualView : public ViewTraits { typename traits::non_const_data_type>::value) Impl::throw_runtime_exception( "Calling sync_device on a DualView with a const datatype."); - if (modified_flags.data() == NULL) return; + if (modified_flags.data() == nullptr) return; if (modified_flags(0) > modified_flags(1)) { +#ifdef KOKKOS_ENABLE_CUDA + if (std::is_same::value) { + if (d_view.data() == h_view.data()) + Kokkos::Impl::cuda_prefetch_pointer( + Kokkos::Cuda(), d_view.data(), + sizeof(typename t_dev::value_type) * d_view.span(), true); + } +#endif + deep_copy(d_view, h_view); modified_flags(1) = modified_flags(0) = 0; } @@ -548,7 +635,7 @@ class DualView : public ViewTraits { template bool need_sync() const { - if (modified_flags.data() == NULL) return false; + if (modified_flags.data() == nullptr) return false; int dev = get_device_side(); if (dev == 1) { // if Device is the same as DualView's device type @@ -565,12 +652,12 @@ class DualView : public ViewTraits { } inline bool need_sync_host() const { - if (modified_flags.data() == NULL) return false; + if (modified_flags.data() == nullptr) return false; return modified_flags(0) < modified_flags(1); } inline bool need_sync_device() const { - if (modified_flags.data() == NULL) return false; + if (modified_flags.data() == nullptr) return false; return modified_flags(1) < modified_flags(0); } @@ -581,7 +668,7 @@ class DualView : public ViewTraits { /// data as modified. template void modify() { - if (modified_flags.data() == NULL) return; + if (modified_flags.data() == nullptr) return; int dev = get_device_side(); if (dev == 1) { // if Device is the same as DualView's device type @@ -612,7 +699,7 @@ class DualView : public ViewTraits { } inline void modify_host() { - if (modified_flags.data() != NULL) { + if (modified_flags.data() != nullptr) { modified_flags(0) = (modified_flags(1) > modified_flags(0) ? modified_flags(1) : modified_flags(0)) + @@ -631,7 +718,7 @@ class DualView : public ViewTraits { } inline void modify_device() { - if (modified_flags.data() != NULL) { + if (modified_flags.data() != nullptr) { modified_flags(1) = (modified_flags(1) > modified_flags(0) ? modified_flags(1) : modified_flags(0)) + @@ -650,7 +737,7 @@ class DualView : public ViewTraits { } inline void clear_sync_state() { - if (modified_flags.data() != NULL) + if (modified_flags.data() != nullptr) modified_flags(1) = modified_flags(0) = 0; } @@ -675,7 +762,7 @@ class DualView : public ViewTraits { h_view = create_mirror_view(d_view); /* Reset dirty flags */ - if (modified_flags.data() == NULL) { + if (modified_flags.data() == nullptr) { modified_flags = t_modified_flags("DualView::modified_flags"); } else modified_flags(1) = modified_flags(0) = 0; @@ -693,7 +780,7 @@ class DualView : public ViewTraits { const size_t n5 = KOKKOS_IMPL_CTOR_DEFAULT_ARG, const size_t n6 = KOKKOS_IMPL_CTOR_DEFAULT_ARG, const size_t n7 = KOKKOS_IMPL_CTOR_DEFAULT_ARG) { - if (modified_flags.data() == NULL) { + if (modified_flags.data() == nullptr) { modified_flags = t_modified_flags("DualView::modified_flags"); } if (modified_flags(1) >= modified_flags(0)) { @@ -866,4 +953,27 @@ void deep_copy( } // namespace Kokkos +//---------------------------------------------------------------------------- +//---------------------------------------------------------------------------- + +namespace Kokkos { + +// +// Non-member resize and realloc +// + +template +void resize(DualView& dv, Args&&... args) noexcept( + noexcept(dv.resize(std::forward(args)...))) { + dv.resize(std::forward(args)...); +} + +template +void realloc(DualView& dv, Args&&... args) noexcept( + noexcept(dv.realloc(std::forward(args)...))) { + dv.realloc(std::forward(args)...); +} + +} // end namespace Kokkos + #endif diff --git a/lib/kokkos/containers/src/Kokkos_DynRankView.hpp b/lib/kokkos/containers/src/Kokkos_DynRankView.hpp index 0ceb9d5d397e77fcfc8ef0a119e99cd6386a184b..4ab212d7b9a9237c5c45f9d3713dffd28a0d147d 100644 --- a/lib/kokkos/containers/src/Kokkos_DynRankView.hpp +++ b/lib/kokkos/containers/src/Kokkos_DynRankView.hpp @@ -293,6 +293,7 @@ KOKKOS_INLINE_FUNCTION void dyn_rank_view_verify_operator_bounds( dyn_rank_view_error_operator_bounds<0>(buffer + n, LEN - n, map, args...); Kokkos::Impl::throw_runtime_exception(std::string(buffer)); #else + (void)tracker; Kokkos::abort("DynRankView bounds error"); #endif } @@ -1065,8 +1066,8 @@ class DynRankView : public ViewTraits { //---------------------------------------- // Standard constructor, destructor, and assignment operators... - KOKKOS_INLINE_FUNCTION - ~DynRankView() {} + KOKKOS_DEFAULTED_FUNCTION + ~DynRankView() = default; KOKKOS_INLINE_FUNCTION DynRankView() : m_track(), m_map(), m_rank() {} // Default ctor @@ -1773,7 +1774,7 @@ struct DynRankViewRemap { const Kokkos::Impl::ParallelFor closure( *this, Policy(0, n0)); closure.execute(); - // Kokkos::fence(); // ?? + // ExecSpace().fence(); // ?? } KOKKOS_INLINE_FUNCTION @@ -1806,7 +1807,8 @@ inline void deep_copy( const DynRankView& dst, typename ViewTraits::const_value_type& value, typename std::enable_if::specialize, void>::value>::type* = 0) { + typename ViewTraits::specialize, void>::value>::type* = + nullptr) { static_assert( std::is_same::non_const_value_type, typename ViewTraits::value_type>::value, @@ -1843,7 +1845,7 @@ inline void deep_copy( (std::is_same::value && std::is_same::value && (Kokkos::is_dyn_rank_view::value || - Kokkos::is_dyn_rank_view::value))>::type* = 0) { + Kokkos::is_dyn_rank_view::value))>::type* = nullptr) { static_assert( std::is_same::value, @@ -2009,7 +2011,7 @@ inline typename DynRankView::HostMirror create_mirror( typename std::enable_if< std::is_same::specialize, void>::value && !std::is_same::array_layout, - Kokkos::LayoutStride>::value>::type* = 0) { + Kokkos::LayoutStride>::value>::type* = nullptr) { typedef DynRankView src_type; typedef typename src_type::HostMirror dst_type; @@ -2036,7 +2038,8 @@ template typename Impl::MirrorDRVType::view_type create_mirror( const Space&, const Kokkos::DynRankView& src, typename std::enable_if::specialize, void>::value>::type* = 0) { + typename ViewTraits::specialize, void>::value>::type* = + nullptr) { return typename Impl::MirrorDRVType::view_type( src.label(), Impl::reconstructLayout(src.layout(), src.rank())); } @@ -2050,7 +2053,7 @@ inline typename DynRankView::HostMirror create_mirror_view( typename DynRankView::HostMirror::memory_space>::value && std::is_same::data_type, typename DynRankView::HostMirror::data_type>:: - value)>::type* = 0) { + value)>::type* = nullptr) { return src; } @@ -2072,7 +2075,8 @@ template typename Impl::MirrorDRViewType::view_type create_mirror_view( const Space&, const Kokkos::DynRankView& src, typename std::enable_if< - Impl::MirrorDRViewType::is_same_memspace>::type* = 0) { + Impl::MirrorDRViewType::is_same_memspace>::type* = + nullptr) { return src; } @@ -2094,7 +2098,8 @@ create_mirror_view_and_copy( const Space&, const Kokkos::DynRankView& src, std::string const& name = "", typename std::enable_if< - Impl::MirrorDRViewType::is_same_memspace>::type* = 0) { + Impl::MirrorDRViewType::is_same_memspace>::type* = + nullptr) { (void)name; return src; } @@ -2139,7 +2144,7 @@ inline void resize(DynRankView& v, static_assert(Kokkos::ViewTraits::is_managed, "Can only resize managed views"); - drview_type v_resized(v.label(), n0, n1, n2, n3, n4, n5, n6); + drview_type v_resized(v.label(), n0, n1, n2, n3, n4, n5, n6, n7); Kokkos::Impl::DynRankViewRemap(v_resized, v); @@ -2166,7 +2171,7 @@ inline void realloc(DynRankView& v, const std::string label = v.label(); v = drview_type(); // Deallocate first, if the only view to allocation - v = drview_type(label, n0, n1, n2, n3, n4, n5, n6); + v = drview_type(label, n0, n1, n2, n3, n4, n5, n6, n7); } } // namespace Kokkos diff --git a/lib/kokkos/containers/src/Kokkos_DynamicView.hpp b/lib/kokkos/containers/src/Kokkos_DynamicView.hpp index 35a64d164fa10055f3de165939581c83fe5bf97f..ebbbcc5e8ca841d6406473cd8a0e402a524f39b1 100644 --- a/lib/kokkos/containers/src/Kokkos_DynamicView.hpp +++ b/lib/kokkos/containers/src/Kokkos_DynamicView.hpp @@ -70,10 +70,10 @@ struct ChunkArraySpace { using memory_space = typename Kokkos::CudaUVMSpace; }; #endif -#ifdef KOKKOS_ENABLE_ROCM +#ifdef KOKKOS_ENABLE_HIP template <> -struct ChunkArraySpace { - using memory_space = typename Kokkos::Experimental::ROCmHostPinnedSpace; +struct ChunkArraySpace { + using memory_space = typename Kokkos::Experimental::HIPHostPinnedSpace; }; #endif } // end namespace Impl @@ -248,8 +248,8 @@ class DynamicView : public Kokkos::ViewTraits { //---------------------------------------- template - KOKKOS_INLINE_FUNCTION reference_type operator()(const I0& i0, - const Args&... args) const { + KOKKOS_INLINE_FUNCTION reference_type + operator()(const I0& i0, const Args&... /*args*/) const { static_assert(Kokkos::Impl::are_integral::value, "Indices must be integral type"); @@ -265,7 +265,7 @@ class DynamicView : public Kokkos::ViewTraits { // If not bounds checking then we assume a non-zero pointer is valid. #if !defined(KOKKOS_ENABLE_DEBUG_BOUNDS_CHECK) - if (0 == *ch) + if (nullptr == *ch) #endif { // Verify that allocation of the requested chunk in in progress. @@ -280,7 +280,7 @@ class DynamicView : public Kokkos::ViewTraits { // Allocation of this chunk is in progress // so wait for allocation to complete. - while (0 == *ch) + while (nullptr == *ch) ; } @@ -325,7 +325,7 @@ class DynamicView : public Kokkos::ViewTraits { --*pc; typename traits::memory_space().deallocate( m_chunks[*pc], sizeof(local_value_type) << m_chunk_shift); - m_chunks[*pc] = 0; + m_chunks[*pc] = nullptr; } } // *m_chunks[m_chunk_max+1] stores the 'extent' requested by resize @@ -366,10 +366,10 @@ class DynamicView : public Kokkos::ViewTraits { // Initialize or destroy array of chunk pointers. // Two entries beyond the max chunks are allocation counters. inline void operator()(unsigned i) const { - if (m_destroy && i < m_chunk_max && 0 != m_chunks[i]) { + if (m_destroy && i < m_chunk_max && nullptr != m_chunks[i]) { typename traits::memory_space().deallocate(m_chunks[i], m_chunk_size); } - m_chunks[i] = 0; + m_chunks[i] = nullptr; } void execute(bool arg_destroy) { @@ -419,7 +419,7 @@ class DynamicView : public Kokkos::ViewTraits { const unsigned min_chunk_size, const unsigned max_extent) : m_track(), - m_chunks(0) + m_chunks(nullptr) // The chunk size is guaranteed to be a power of two , m_chunk_shift(Kokkos::Impl::integral_power_of_two_that_contains( @@ -528,7 +528,7 @@ struct CommonSubview, typedef SrcType src_subview_type; dst_subview_type dst_sub; src_subview_type src_sub; - CommonSubview(const DstType& dst, const SrcType& src, const Arg0& arg0) + CommonSubview(const DstType& dst, const SrcType& src, const Arg0& /*arg0*/) : dst_sub(dst), src_sub(src) {} }; diff --git a/lib/kokkos/containers/src/Kokkos_ErrorReporter.hpp b/lib/kokkos/containers/src/Kokkos_ErrorReporter.hpp index 25335771e4cced618e960dad39da90a9acebf56e..e07c386b7d9c027e426dd61933a1adddce4cf2ce 100644 --- a/lib/kokkos/containers/src/Kokkos_ErrorReporter.hpp +++ b/lib/kokkos/containers/src/Kokkos_ErrorReporter.hpp @@ -187,7 +187,7 @@ template void ErrorReporter::resize(const size_t new_size) { m_reports.resize(new_size); m_reporters.resize(new_size); - Kokkos::fence(); + typename DeviceType::execution_space().fence(); } } // namespace Experimental diff --git a/lib/kokkos/containers/src/Kokkos_OffsetView.hpp b/lib/kokkos/containers/src/Kokkos_OffsetView.hpp index a1fe793cc5447c1436a9b455f4ede5eab9a59367..c3c66f0d7f6999b9ec3500624577652359b4c074 100644 --- a/lib/kokkos/containers/src/Kokkos_OffsetView.hpp +++ b/lib/kokkos/containers/src/Kokkos_OffsetView.hpp @@ -362,19 +362,18 @@ class OffsetView : public ViewTraits { //---------------------------------------- private: - enum { - is_layout_left = - std::is_same::value, + static constexpr bool is_layout_left = + std::is_same::value; - is_layout_right = - std::is_same::value, + static constexpr bool is_layout_right = + std::is_same::value; - is_layout_stride = std::is_same::value, + static constexpr bool is_layout_stride = + std::is_same::value; - is_default_map = std::is_same::value && - (is_layout_left || is_layout_right || is_layout_stride) - }; + static constexpr bool is_default_map = + std::is_same::value && + (is_layout_left || is_layout_right || is_layout_stride); template ::accessible> @@ -804,8 +803,8 @@ class OffsetView : public ViewTraits { //---------------------------------------- // Standard destructor, constructors, and assignment operators - KOKKOS_INLINE_FUNCTION - ~OffsetView() {} + KOKKOS_DEFAULTED_FUNCTION + ~OffsetView() = default; KOKKOS_INLINE_FUNCTION OffsetView() : m_track(), m_map() { @@ -1317,7 +1316,7 @@ KOKKOS_INLINE_FUNCTION KOKKOS_INLINE_FUNCTION Kokkos::Impl::ALL_t shift_input(const Kokkos::Impl::ALL_t arg, - const int64_t offset) { + const int64_t /*offset*/) { return arg; } @@ -1347,9 +1346,9 @@ KOKKOS_INLINE_FUNCTION void map_arg_to_new_begin( template KOKKOS_INLINE_FUNCTION void map_arg_to_new_begin( - const size_t i, Kokkos::Array& subviewBegins, - typename std::enable_if::type shiftedArg, const Arg arg, - const A viewBegins, size_t& counter) {} + const size_t /*i*/, Kokkos::Array& /*subviewBegins*/, + typename std::enable_if::type /*shiftedArg*/, + const Arg /*arg*/, const A /*viewBegins*/, size_t& /*counter*/) {} template KOKKOS_INLINE_FUNCTION @@ -1832,7 +1831,8 @@ inline void deep_copy( const OffsetView& dst, typename ViewTraits::const_value_type& value, typename std::enable_if::specialize, void>::value>::type* = 0) { + typename ViewTraits::specialize, void>::value>::type* = + nullptr) { static_assert( std::is_same::non_const_value_type, typename ViewTraits::value_type>::value, @@ -1846,7 +1846,8 @@ template inline void deep_copy( const OffsetView& dst, const OffsetView& value, typename std::enable_if::specialize, void>::value>::type* = 0) { + typename ViewTraits::specialize, void>::value>::type* = + nullptr) { static_assert( std::is_same::value_type, typename ViewTraits::non_const_value_type>::value, @@ -1859,7 +1860,8 @@ template inline void deep_copy( const OffsetView& dst, const View& value, typename std::enable_if::specialize, void>::value>::type* = 0) { + typename ViewTraits::specialize, void>::value>::type* = + nullptr) { static_assert( std::is_same::value_type, typename ViewTraits::non_const_value_type>::value, @@ -1873,7 +1875,8 @@ template inline void deep_copy( const View& dst, const OffsetView& value, typename std::enable_if::specialize, void>::value>::type* = 0) { + typename ViewTraits::specialize, void>::value>::type* = + nullptr) { static_assert( std::is_same::value_type, typename ViewTraits::non_const_value_type>::value, @@ -2011,7 +2014,7 @@ create_mirror_view( std::is_same< typename Kokkos::Experimental::OffsetView::data_type, typename Kokkos::Experimental::OffsetView< - T, P...>::HostMirror::data_type>::value)>::type* = 0) { + T, P...>::HostMirror::data_type>::value)>::type* = nullptr) { return src; } diff --git a/lib/kokkos/containers/src/Kokkos_ScatterView.hpp b/lib/kokkos/containers/src/Kokkos_ScatterView.hpp index ec3a9663259c15c9cb27b736af3749dc79edcb94..eb3bc1f2bcd0a217e067906915a62a210f5047d1 100644 --- a/lib/kokkos/containers/src/Kokkos_ScatterView.hpp +++ b/lib/kokkos/containers/src/Kokkos_ScatterView.hpp @@ -171,24 +171,41 @@ struct DefaultContribution +struct DefaultDuplication { + enum : int { value = Kokkos::Experimental::ScatterNonDuplicated }; +}; +template <> +struct DefaultContribution { + enum : int { value = Kokkos::Experimental::ScatterAtomic }; +}; +template <> +struct DefaultContribution { + enum : int { value = Kokkos::Experimental::ScatterAtomic }; +}; +#endif + /* ScatterValue is the object returned by the access operator() of ScatterAccess, This class inherits from the Sum<> reducer and it wraps join(dest, src) with convenient operator+=, etc. Note the addition of update(ValueType const& rhs) and reset() so that all reducers can have common functions See ReduceDuplicates and ResetDuplicates ) */ -template +template struct ScatterValue; -template -struct ScatterValue +struct ScatterValue - : Sum { + : Sum { public: KOKKOS_FORCEINLINE_FUNCTION ScatterValue(ValueType& value_in) - : Sum(value_in) {} + : Sum(value_in) {} KOKKOS_FORCEINLINE_FUNCTION ScatterValue(ScatterValue&& other) - : Sum(other.reference()) {} + : Sum(other.reference()) {} KOKKOS_FORCEINLINE_FUNCTION void operator+=(ValueType const& rhs) { this->join(this->reference(), rhs); } @@ -206,13 +223,13 @@ struct ScatterValue -struct ScatterValue +struct ScatterValue - : Sum { + : Sum { public: KOKKOS_FORCEINLINE_FUNCTION ScatterValue(ValueType& value_in) - : Sum(value_in) {} + : Sum(value_in) {} KOKKOS_FORCEINLINE_FUNCTION void operator+=(ValueType const& rhs) { this->join(this->reference(), rhs); @@ -244,15 +261,15 @@ struct ScatterValue -struct ScatterValue +struct ScatterValue - : Prod { + : Prod { public: KOKKOS_FORCEINLINE_FUNCTION ScatterValue(ValueType& value_in) - : Prod(value_in) {} + : Prod(value_in) {} KOKKOS_FORCEINLINE_FUNCTION ScatterValue(ScatterValue&& other) - : Prod(other.reference()) {} + : Prod(other.reference()) {} KOKKOS_FORCEINLINE_FUNCTION void operator*=(ValueType const& rhs) { this->join(this->reference(), rhs); } @@ -271,13 +288,13 @@ struct ScatterValue -struct ScatterValue +struct ScatterValue - : Prod { + : Prod { public: KOKKOS_FORCEINLINE_FUNCTION ScatterValue(ValueType& value_in) - : Prod(value_in) {} + : Prod(value_in) {} KOKKOS_FORCEINLINE_FUNCTION void operator*=(ValueType const& rhs) { this->join(this->reference(), rhs); @@ -320,15 +337,15 @@ struct ScatterValue -struct ScatterValue +struct ScatterValue - : Min { + : Min { public: KOKKOS_FORCEINLINE_FUNCTION ScatterValue(ValueType& value_in) - : Min(value_in) {} + : Min(value_in) {} KOKKOS_FORCEINLINE_FUNCTION ScatterValue(ScatterValue&& other) - : Min(other.reference()) {} + : Min(other.reference()) {} KOKKOS_FORCEINLINE_FUNCTION void update(ValueType const& rhs) { this->join(this->reference(), rhs); } @@ -340,13 +357,13 @@ struct ScatterValue -struct ScatterValue +struct ScatterValue - : Min { + : Min { public: KOKKOS_FORCEINLINE_FUNCTION ScatterValue(ValueType& value_in) - : Min(value_in) {} + : Min(value_in) {} KOKKOS_FORCEINLINE_FUNCTION void atomic_min(ValueType& dest, const ValueType& src) const { @@ -382,15 +399,15 @@ struct ScatterValue -struct ScatterValue +struct ScatterValue - : Max { + : Max { public: KOKKOS_FORCEINLINE_FUNCTION ScatterValue(ValueType& value_in) - : Max(value_in) {} + : Max(value_in) {} KOKKOS_FORCEINLINE_FUNCTION ScatterValue(ScatterValue&& other) - : Max(other.reference()) {} + : Max(other.reference()) {} KOKKOS_FORCEINLINE_FUNCTION void update(ValueType const& rhs) { this->join(this->reference(), rhs); } @@ -402,13 +419,13 @@ struct ScatterValue -struct ScatterValue +struct ScatterValue - : Max { + : Max { public: KOKKOS_FORCEINLINE_FUNCTION ScatterValue(ValueType& value_in) - : Max(value_in) {} + : Max(value_in) {} KOKKOS_FORCEINLINE_FUNCTION void atomic_max(ValueType& dest, const ValueType& src) const { @@ -558,6 +575,8 @@ struct ReduceDuplicatesBase { Kokkos::Profiling::beginParallelFor(std::string("reduce_") + name, 0, &kpID); } +#else + (void)name; #endif typedef RangePolicy policy_type; typedef Kokkos::Impl::ParallelFor closure_type; @@ -584,8 +603,9 @@ struct ReduceDuplicates : Base(src_in, dst_in, stride_in, start_in, n_in, name) {} KOKKOS_FORCEINLINE_FUNCTION void operator()(size_t i) const { for (size_t j = Base::start; j < Base::n; ++j) { - ScatterValue sv( - Base::dst[i]); + ScatterValue + sv(Base::dst[i]); sv.update(Base::src[i + Base::stride * j]); } } @@ -607,6 +627,8 @@ struct ResetDuplicatesBase { Kokkos::Profiling::beginParallelFor(std::string("reduce_") + name, 0, &kpID); } +#else + (void)name; #endif typedef RangePolicy policy_type; typedef Kokkos::Impl::ParallelFor closure_type; @@ -630,8 +652,9 @@ struct ResetDuplicates : public ResetDuplicatesBase { ResetDuplicates(ValueType* data_in, size_t size_in, std::string const& name) : Base(data_in, size_in, name) {} KOKKOS_FORCEINLINE_FUNCTION void operator()(size_t i) const { - ScatterValue sv( - Base::data[i]); + ScatterValue + sv(Base::data[i]); sv.reset(); } }; @@ -768,8 +791,8 @@ class ScatterAccess view_type; typedef typename view_type::original_value_type original_value_type; - typedef Kokkos::Impl::Experimental::ScatterValue + typedef Kokkos::Impl::Experimental::ScatterValue< + original_value_type, Op, DeviceType, override_contribution> value_type; KOKKOS_INLINE_FUNCTION @@ -777,13 +800,8 @@ class ScatterAccess KOKKOS_FORCEINLINE_FUNCTION value_type operator()(Args... args) const { @@ -1190,8 +1208,8 @@ class ScatterAccess view_type; typedef typename view_type::original_value_type original_value_type; - typedef Kokkos::Impl::Experimental::ScatterValue + typedef Kokkos::Impl::Experimental::ScatterValue< + original_value_type, Op, DeviceType, override_contribution> value_type; KOKKOS_FORCEINLINE_FUNCTION diff --git a/lib/kokkos/containers/src/Kokkos_StaticCrsGraph.hpp b/lib/kokkos/containers/src/Kokkos_StaticCrsGraph.hpp index 26c16c4e003df7c7f68746a79be70917d20dd9de..c11413d62789029396ab7cc7fa6ced197d874ac5 100644 --- a/lib/kokkos/containers/src/Kokkos_StaticCrsGraph.hpp +++ b/lib/kokkos/containers/src/Kokkos_StaticCrsGraph.hpp @@ -112,7 +112,7 @@ struct StaticCrsGraphBalancerFunctor { } } else { if ((count >= (current_block + 1) * cost_per_workset) || - (iRow + 2 == row_offsets.extent(0))) { + (iRow + 2 == int_type(row_offsets.extent(0)))) { if (end_block > current_block + 1) { int_type num_block = end_block - current_block; row_block_offsets(current_block + 1) = iRow; @@ -358,8 +358,8 @@ class StaticCrsGraph { /** \brief Destroy this view of the array. * If the last view then allocated memory is deallocated. */ - KOKKOS_INLINE_FUNCTION - ~StaticCrsGraph() {} + KOKKOS_DEFAULTED_FUNCTION + ~StaticCrsGraph() = default; /** \brief Return number of rows in the graph */ @@ -396,7 +396,7 @@ class StaticCrsGraph { const data_type count = static_cast(row_map(i + 1) - start); if (count == 0) { - return GraphRowViewConst(NULL, 1, 0); + return GraphRowViewConst(nullptr, 1, 0); } else { return GraphRowViewConst(entries, 1, count, start); } @@ -414,9 +414,10 @@ class StaticCrsGraph { row_map_type, View > partitioner(row_map, block_offsets, fix_cost_per_row, num_blocks); - Kokkos::parallel_for(Kokkos::RangePolicy(0, numRows()), + Kokkos::parallel_for("Kokkos::StaticCrsGraph::create_block_partitioning", + Kokkos::RangePolicy(0, numRows()), partitioner); - Kokkos::fence(); + typename device_type::execution_space().fence(); row_block_offsets = block_offsets; } @@ -522,7 +523,8 @@ DataType maximum_entry(const StaticCrsGraph FunctorType; DataType result = 0; - Kokkos::parallel_reduce(graph.entries.extent(0), FunctorType(graph), result); + Kokkos::parallel_reduce("Kokkos::maximum_entry", graph.entries.extent(0), + FunctorType(graph), result); return result; } diff --git a/lib/kokkos/containers/src/Kokkos_UnorderedMap.hpp b/lib/kokkos/containers/src/Kokkos_UnorderedMap.hpp index 32c04996bb4225fca860fc8ee6fac49f2557f3fa..6f0434dd04d160ecf141850d950070ec0beed7b6 100644 --- a/lib/kokkos/containers/src/Kokkos_UnorderedMap.hpp +++ b/lib/kokkos/containers/src/Kokkos_UnorderedMap.hpp @@ -201,9 +201,9 @@ class UnorderedMapInsertResult { /// template ::type>, + typename Hasher = pod_hash::type>, typename EqualTo = - pod_equal_to::type> > + pod_equal_to::type> > class UnorderedMap { private: typedef typename ViewTraits::host_mirror_space @@ -215,13 +215,13 @@ class UnorderedMap { // key_types typedef Key declared_key_type; - typedef typename Impl::remove_const::type key_type; - typedef typename Impl::add_const::type const_key_type; + typedef typename std::remove_const::type key_type; + typedef typename std::add_const::type const_key_type; // value_types typedef Value declared_value_type; - typedef typename Impl::remove_const::type value_type; - typedef typename Impl::add_const::type const_value_type; + typedef typename std::remove_const::type value_type; + typedef typename std::add_const::type const_value_type; typedef Device device_type; typedef typename Device::execution_space execution_space; @@ -296,25 +296,13 @@ class UnorderedMap { //! \name Public member functions //@{ - UnorderedMap() - : m_bounded_insert(), - m_hasher(), - m_equal_to(), - m_size(), - m_available_indexes(), - m_hash_lists(), - m_next_index(), - m_keys(), - m_values(), - m_scalars() {} - /// \brief Constructor /// /// \param capacity_hint [in] Initial guess of how many unique keys will be /// inserted into the map \param hash [in] Hasher function for \c Key /// instances. The /// default value usually suffices. - UnorderedMap(size_type capacity_hint, hasher_type hasher = hasher_type(), + UnorderedMap(size_type capacity_hint = 0, hasher_type hasher = hasher_type(), equal_to_type equal_to = equal_to_type()) : m_bounded_insert(true), m_hasher(hasher), @@ -689,7 +677,7 @@ class UnorderedMap { template UnorderedMap( UnorderedMap const &src, - typename Impl::enable_if< + typename std::enable_if< Impl::UnorderedMapCanAssign::value, int>::type = 0) @@ -705,7 +693,7 @@ class UnorderedMap { m_scalars(src.m_scalars) {} template - typename Impl::enable_if< + typename std::enable_if< Impl::UnorderedMapCanAssign::value, declared_map_type &>::type @@ -724,9 +712,9 @@ class UnorderedMap { } template - typename Impl::enable_if< - std::is_same::type, key_type>::value && - std::is_same::type, + typename std::enable_if< + std::is_same::type, key_type>::value && + std::is_same::type, value_type>::value>::type create_copy_view( UnorderedMap const &src) { diff --git a/lib/kokkos/containers/src/Kokkos_Vector.hpp b/lib/kokkos/containers/src/Kokkos_Vector.hpp index 0641eeba82fb6a0444f58f3d4c47495f1c31aec6..02c3e44fc48b0b9069d0c0b09ce9fd3b8219406e 100644 --- a/lib/kokkos/containers/src/Kokkos_Vector.hpp +++ b/lib/kokkos/containers/src/Kokkos_Vector.hpp @@ -118,12 +118,12 @@ class vector : public DualView { if (DV::template need_sync()) { set_functor_host f(DV::h_view, val); - parallel_for(n, f); + parallel_for("Kokkos::vector::assign", n, f); typename DV::t_host::execution_space().fence(); DV::template modify(); } else { set_functor f(DV::d_view, val); - parallel_for(n, f); + parallel_for("Kokkos::vector::assign", n, f); typename DV::t_dev::execution_space().fence(); DV::template modify(); } diff --git a/lib/kokkos/containers/src/impl/Kokkos_Bitset_impl.hpp b/lib/kokkos/containers/src/impl/Kokkos_Bitset_impl.hpp index f5fa4d518a07744162078bfbb37244cf3f0cfb99..6fd4319a822161bb1082c39043704d8b732c65e2 100644 --- a/lib/kokkos/containers/src/impl/Kokkos_Bitset_impl.hpp +++ b/lib/kokkos/containers/src/impl/Kokkos_Bitset_impl.hpp @@ -77,7 +77,8 @@ struct BitsetCount { size_type apply() const { size_type count = 0u; - parallel_reduce(m_bitset.m_blocks.extent(0), *this, count); + parallel_reduce("Kokkos::Impl::BitsetCount::apply", + m_bitset.m_blocks.extent(0), *this, count); return count; } diff --git a/lib/kokkos/containers/src/impl/Kokkos_StaticCrsGraph_factory.hpp b/lib/kokkos/containers/src/impl/Kokkos_StaticCrsGraph_factory.hpp index d644c57c0ac1c4a57623aefbd7a31dfba6076134..a5fb9990f6a2cda37872eeffe75cb810c4c1cca1 100644 --- a/lib/kokkos/containers/src/impl/Kokkos_StaticCrsGraph_factory.hpp +++ b/lib/kokkos/containers/src/impl/Kokkos_StaticCrsGraph_factory.hpp @@ -58,8 +58,8 @@ inline typename StaticCrsGraph& view, - typename Impl::enable_if::is_hostspace>::type* = 0) { + typename std::enable_if::is_hostspace>::type* = 0) { return view; } #else @@ -70,8 +70,8 @@ inline typename StaticCrsGraph& view, - typename Impl::enable_if::is_hostspace>::type* = 0) { + typename std::enable_if::is_hostspace>::type* = 0) { return view; } #endif @@ -128,8 +128,8 @@ inline typename StaticCrsGraph& view, - typename Impl::enable_if::is_hostspace>::type* = 0) + typename std::enable_if::is_hostspace>::type* = 0) #else template @@ -138,8 +138,8 @@ inline typename StaticCrsGraph& view, - typename Impl::enable_if::is_hostspace>::type* = 0) + typename std::enable_if::is_hostspace>::type* = 0) #endif { return create_mirror(view); diff --git a/lib/kokkos/containers/src/impl/Kokkos_UnorderedMap_impl.hpp b/lib/kokkos/containers/src/impl/Kokkos_UnorderedMap_impl.hpp index 55e76c424df86746db72c9451844aa8e9c4107f7..813936575cf79bf8161b38d623b4f543b7e6b92d 100644 --- a/lib/kokkos/containers/src/impl/Kokkos_UnorderedMap_impl.hpp +++ b/lib/kokkos/containers/src/impl/Kokkos_UnorderedMap_impl.hpp @@ -71,7 +71,10 @@ struct UnorderedMapRehash { UnorderedMapRehash(map_type const& dst, const_map_type const& src) : m_dst(dst), m_src(src) {} - void apply() const { parallel_for(m_src.capacity(), *this); } + void apply() const { + parallel_for("Kokkos::Impl::UnorderedMapRehash::apply", m_src.capacity(), + *this); + } KOKKOS_INLINE_FUNCTION void operator()(size_type i) const { @@ -91,7 +94,10 @@ struct UnorderedMapErase { UnorderedMapErase(map_type const& map) : m_map(map) {} - void apply() const { parallel_for(m_map.m_hash_lists.extent(0), *this); } + void apply() const { + parallel_for("Kokkos::Impl::UnorderedMapErase::apply", + m_map.m_hash_lists.extent(0), *this); + } KOKKOS_INLINE_FUNCTION void operator()(size_type i) const { @@ -152,7 +158,10 @@ struct UnorderedMapHistogram { m_distance("UnorderedMap Histogram"), m_block_distance("UnorderedMap Histogram") {} - void calculate() { parallel_for(m_map.m_hash_lists.extent(0), *this); } + void calculate() { + parallel_for("Kokkos::Impl::UnorderedMapHistogram::calculate", + m_map.m_hash_lists.extent(0), *this); + } void clear() { Kokkos::deep_copy(m_length, 0); @@ -229,7 +238,10 @@ struct UnorderedMapPrint { UnorderedMapPrint(map_type const& map) : m_map(map) {} - void apply() { parallel_for(m_map.m_hash_lists.extent(0), *this); } + void apply() { + parallel_for("Kokkos::Impl::UnorderedMapPrint::apply", + m_map.m_hash_lists.extent(0), *this); + } KOKKOS_INLINE_FUNCTION void operator()(size_type i) const { @@ -245,21 +257,22 @@ struct UnorderedMapPrint { }; template -struct UnorderedMapCanAssign : public false_ {}; +struct UnorderedMapCanAssign : public std::false_type {}; template -struct UnorderedMapCanAssign : public true_ {}; +struct UnorderedMapCanAssign : public std::true_type {}; template -struct UnorderedMapCanAssign : public true_ {}; +struct UnorderedMapCanAssign + : public std::true_type {}; template struct UnorderedMapCanAssign - : public true_ {}; + : public std::true_type {}; template struct UnorderedMapCanAssign - : public true_ {}; + : public std::true_type {}; } // namespace Impl } // namespace Kokkos diff --git a/lib/kokkos/containers/unit_tests/CMakeLists.txt b/lib/kokkos/containers/unit_tests/CMakeLists.txt index a83ab1293c19d257106012e0f879a83bebbd42e8..448cdf4386765e4f658b2a64e416085b62ba1a69 100644 --- a/lib/kokkos/containers/unit_tests/CMakeLists.txt +++ b/lib/kokkos/containers/unit_tests/CMakeLists.txt @@ -3,7 +3,7 @@ KOKKOS_INCLUDE_DIRECTORIES(${CMAKE_CURRENT_BINARY_DIR}) KOKKOS_INCLUDE_DIRECTORIES(REQUIRED_DURING_INSTALLATION_TESTING ${CMAKE_CURRENT_SOURCE_DIR}) KOKKOS_INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/../src ) -foreach(Tag Threads;Serial;OpenMP;HPX;Cuda) +foreach(Tag Threads;Serial;OpenMP;HPX;Cuda;HIP) # Because there is always an exception to the rule if(Tag STREQUAL "Threads") set(DEVICE "PTHREAD") @@ -13,23 +13,31 @@ foreach(Tag Threads;Serial;OpenMP;HPX;Cuda) string(TOLOWER ${Tag} dir) # Add test for that backend if it is enabled if(Kokkos_ENABLE_${DEVICE}) - KOKKOS_ADD_EXECUTABLE_AND_TEST( - UnitTest_${Tag} - SOURCES - UnitTestMain.cpp - ${dir}/Test${Tag}_BitSet.cpp - ${dir}/Test${Tag}_DualView.cpp - ${dir}/Test${Tag}_DynamicView.cpp - ${dir}/Test${Tag}_DynRankViewAPI_generic.cpp - ${dir}/Test${Tag}_DynRankViewAPI_rank12345.cpp - ${dir}/Test${Tag}_DynRankViewAPI_rank67.cpp - ${dir}/Test${Tag}_ErrorReporter.cpp - ${dir}/Test${Tag}_OffsetView.cpp - ${dir}/Test${Tag}_ScatterView.cpp - ${dir}/Test${Tag}_StaticCrsGraph.cpp - ${dir}/Test${Tag}_UnorderedMap.cpp - ${dir}/Test${Tag}_Vector.cpp - ${dir}/Test${Tag}_ViewCtorPropEmbeddedDim.cpp + set(UnitTestSources UnitTestMain.cpp) + set(dir ${CMAKE_CURRENT_BINARY_DIR}/${dir}) + file(MAKE_DIRECTORY ${dir}) + foreach(Name + Bitset + DualView + DynamicView + DynViewAPI_generic + DynViewAPI_rank12345 + DynViewAPI_rank67 + ErrorReporter + OffsetView + ScatterView + StaticCrsGraph + UnorderedMap + Vector + ViewCtorPropEmbeddedDim + ) + set(file ${dir}/Test${Tag}_${Name}.cpp) + file(WRITE ${file} + "#include \n" + "#include \n" ) + list(APPEND UnitTestSources ${file}) + endforeach() + KOKKOS_ADD_EXECUTABLE_AND_TEST(UnitTest_${Tag} SOURCES ${UnitTestSources}) endif() endforeach() diff --git a/lib/kokkos/containers/unit_tests/Makefile b/lib/kokkos/containers/unit_tests/Makefile index a7e0233f8a58790bcd8f845a314703d0f2b6e2f5..308b5aa8b5ff5cb39fabb20143ef742c6992a86d 100644 --- a/lib/kokkos/containers/unit_tests/Makefile +++ b/lib/kokkos/containers/unit_tests/Makefile @@ -9,7 +9,7 @@ vpath %.cpp ${KOKKOS_PATH}/containers/unit_tests/serial vpath %.cpp ${KOKKOS_PATH}/containers/unit_tests/threads vpath %.cpp ${KOKKOS_PATH}/containers/unit_tests/rocm vpath %.cpp ${KOKKOS_PATH}/containers/unit_tests/cuda - +vpath %.cpp ${CURDIR} default: build_all echo "End Build" @@ -31,14 +31,24 @@ KOKKOS_CXXFLAGS += -I$(GTEST_PATH) -I${KOKKOS_PATH}/containers/unit_tests TEST_TARGETS = TARGETS = +TESTS = Bitset DualView DynamicView DynViewAPI_generic DynViewAPI_rank12345 DynViewAPI_rank67 ErrorReporter OffsetView ScatterView StaticCrsGraph UnorderedMap Vector ViewCtorPropEmbeddedDim +tmp := $(foreach device, $(KOKKOS_DEVICELIST), \ + tmp2 := $(foreach test, $(TESTS), \ + $(if $(filter Test$(device)_$(test).cpp, $(shell ls Test$(device)_$(test).cpp 2>/dev/null)),,\ + $(shell echo "\#include" > Test$(device)_$(test).cpp); \ + $(shell echo "\#include" >> Test$(device)_$(test).cpp); \ + )\ + ) \ +) + ifeq ($(KOKKOS_INTERNAL_USE_CUDA), 1) OBJ_CUDA = UnitTestMain.o gtest-all.o - OBJ_CUDA += TestCuda_BitSet.o + OBJ_CUDA += TestCuda_Bitset.o OBJ_CUDA += TestCuda_DualView.o OBJ_CUDA += TestCuda_DynamicView.o - OBJ_CUDA += TestCuda_DynRankViewAPI_generic.o - OBJ_CUDA += TestCuda_DynRankViewAPI_rank12345.o - OBJ_CUDA += TestCuda_DynRankViewAPI_rank67.o + OBJ_CUDA += TestCuda_DynViewAPI_generic.o + OBJ_CUDA += TestCuda_DynViewAPI_rank12345.o + OBJ_CUDA += TestCuda_DynViewAPI_rank67.o OBJ_CUDA += TestCuda_ErrorReporter.o OBJ_CUDA += TestCuda_OffsetView.o OBJ_CUDA += TestCuda_ScatterView.o @@ -50,33 +60,14 @@ ifeq ($(KOKKOS_INTERNAL_USE_CUDA), 1) TEST_TARGETS += test-cuda endif -ifeq ($(KOKKOS_INTERNAL_USE_ROCM), 1) - OBJ_ROCM = UnitTestMain.o gtest-all.o - OBJ_ROCM += TestROCm_BitSet.o - OBJ_ROCM += TestROCm_DualView.o - OBJ_ROCM += TestROCm_DynamicView.o - OBJ_ROCM += TestROCm_DynRankViewAPI_generic.o - OBJ_ROCM += TestROCm_DynRankViewAPI_rank12345.o - OBJ_ROCM += TestROCm_DynRankViewAPI_rank67.o - OBJ_ROCM += TestROCm_ErrorReporter.o - OBJ_ROCM += TestROCm_OffsetView.o - OBJ_ROCM += TestROCm_ScatterView.o - OBJ_ROCM += TestROCm_StaticCrsGraph.o - OBJ_ROCM += TestROCm_UnorderedMap.o - OBJ_ROCM += TestROCm_Vector.o - OBJ_ROCM += TestROCm_ViewCtorPropEmbeddedDim.o - TARGETS += KokkosContainers_UnitTest_ROCm - TEST_TARGETS += test-rocm -endif - ifeq ($(KOKKOS_INTERNAL_USE_PTHREADS), 1) OBJ_THREADS = UnitTestMain.o gtest-all.o - OBJ_THREADS += TestThreads_BitSet.o + OBJ_THREADS += TestThreads_Bitset.o OBJ_THREADS += TestThreads_DualView.o OBJ_THREADS += TestThreads_DynamicView.o - OBJ_THREADS += TestThreads_DynRankViewAPI_generic.o - OBJ_THREADS += TestThreads_DynRankViewAPI_rank12345.o - OBJ_THREADS += TestThreads_DynRankViewAPI_rank67.o + OBJ_THREADS += TestThreads_DynViewAPI_generic.o + OBJ_THREADS += TestThreads_DynViewAPI_rank12345.o + OBJ_THREADS += TestThreads_DynViewAPI_rank67.o OBJ_THREADS += TestThreads_ErrorReporter.o OBJ_THREADS += TestThreads_OffsetView.o OBJ_THREADS += TestThreads_ScatterView.o @@ -90,12 +81,12 @@ endif ifeq ($(KOKKOS_INTERNAL_USE_OPENMP), 1) OBJ_OPENMP = UnitTestMain.o gtest-all.o - OBJ_OPENMP += TestOpenMP_BitSet.o + OBJ_OPENMP += TestOpenMP_Bitset.o OBJ_OPENMP += TestOpenMP_DualView.o OBJ_OPENMP += TestOpenMP_DynamicView.o - OBJ_OPENMP += TestOpenMP_DynRankViewAPI_generic.o - OBJ_OPENMP += TestOpenMP_DynRankViewAPI_rank12345.o - OBJ_OPENMP += TestOpenMP_DynRankViewAPI_rank67.o + OBJ_OPENMP += TestOpenMP_DynViewAPI_generic.o + OBJ_OPENMP += TestOpenMP_DynViewAPI_rank12345.o + OBJ_OPENMP += TestOpenMP_DynViewAPI_rank67.o OBJ_OPENMP += TestOpenMP_ErrorReporter.o OBJ_OPENMP += TestOpenMP_OffsetView.o OBJ_OPENMP += TestOpenMP_ScatterView.o @@ -109,12 +100,12 @@ endif ifeq ($(KOKKOS_INTERNAL_USE_HPX), 1) OBJ_HPX = UnitTestMain.o gtest-all.o - OBJ_HPX += TestHPX_BitSet.o + OBJ_HPX += TestHPX_Bitset.o OBJ_HPX += TestHPX_DualView.o OBJ_HPX += TestHPX_DynamicView.o - OBJ_HPX += TestHPX_DynRankViewAPI_generic.o - OBJ_HPX += TestHPX_DynRankViewAPI_rank12345.o - OBJ_HPX += TestHPX_DynRankViewAPI_rank67.o + OBJ_HPX += TestHPX_DynViewAPI_generic.o + OBJ_HPX += TestHPX_DynViewAPI_rank12345.o + OBJ_HPX += TestHPX_DynViewAPI_rank67.o OBJ_HPX += TestHPX_ErrorReporter.o OBJ_HPX += TestHPX_OffsetView.o OBJ_HPX += TestHPX_ScatterView.o @@ -128,12 +119,12 @@ endif ifeq ($(KOKKOS_INTERNAL_USE_SERIAL), 1) OBJ_SERIAL = UnitTestMain.o gtest-all.o - OBJ_SERIAL += TestSerial_BitSet.o + OBJ_SERIAL += TestSerial_Bitset.o OBJ_SERIAL += TestSerial_DualView.o OBJ_SERIAL += TestSerial_DynamicView.o - OBJ_SERIAL += TestSerial_DynRankViewAPI_generic.o - OBJ_SERIAL += TestSerial_DynRankViewAPI_rank12345.o - OBJ_SERIAL += TestSerial_DynRankViewAPI_rank67.o + OBJ_SERIAL += TestSerial_DynViewAPI_generic.o + OBJ_SERIAL += TestSerial_DynViewAPI_rank12345.o + OBJ_SERIAL += TestSerial_DynViewAPI_rank67.o OBJ_SERIAL += TestSerial_ErrorReporter.o OBJ_SERIAL += TestSerial_OffsetView.o OBJ_SERIAL += TestSerial_ScatterView.o @@ -148,9 +139,6 @@ endif KokkosContainers_UnitTest_Cuda: $(OBJ_CUDA) $(KOKKOS_LINK_DEPENDS) $(LINK) $(EXTRA_PATH) $(OBJ_CUDA) $(KOKKOS_LIBS) $(LIB) $(KOKKOS_LDFLAGS) $(LDFLAGS) -o KokkosContainers_UnitTest_Cuda -KokkosContainers_UnitTest_ROCm: $(OBJ_ROCM) $(KOKKOS_LINK_DEPENDS) - $(LINK) $(EXTRA_PATH) $(OBJ_ROCM) $(KOKKOS_LIBS) $(LIB) $(KOKKOS_LDFLAGS) $(LDFLAGS) -o KokkosContainers_UnitTest_ROCm - KokkosContainers_UnitTest_Threads: $(OBJ_THREADS) $(KOKKOS_LINK_DEPENDS) $(LINK) $(EXTRA_PATH) $(OBJ_THREADS) $(KOKKOS_LIBS) $(LIB) $(KOKKOS_LDFLAGS) $(LDFLAGS) -o KokkosContainers_UnitTest_Threads @@ -166,9 +154,6 @@ KokkosContainers_UnitTest_Serial: $(OBJ_SERIAL) $(KOKKOS_LINK_DEPENDS) test-cuda: KokkosContainers_UnitTest_Cuda ./KokkosContainers_UnitTest_Cuda -test-rocm: KokkosContainers_UnitTest_ROCm - ./KokkosContainers_UnitTest_ROCm - test-threads: KokkosContainers_UnitTest_Threads ./KokkosContainers_UnitTest_Threads @@ -186,7 +171,7 @@ build_all: $(TARGETS) test: $(TEST_TARGETS) clean: kokkos-clean - rm -f *.o $(TARGETS) + rm -f *.o $(TARGETS) *.cpp # Compilation rules diff --git a/lib/kokkos/containers/unit_tests/TestBitset.hpp b/lib/kokkos/containers/unit_tests/TestBitset.hpp index ebd35d3ae721e5fbdceddea39cff7d675f74acac..661a1365cb51d3e8f6fac51310a3867dd2b1e76a 100644 --- a/lib/kokkos/containers/unit_tests/TestBitset.hpp +++ b/lib/kokkos/containers/unit_tests/TestBitset.hpp @@ -253,8 +253,10 @@ void test_bitset() { } } +// FIXME_HIP deadlock +#ifndef KOKKOS_ENABLE_HIP TEST(TEST_CATEGORY, bitset) { test_bitset(); } - +#endif } // namespace Test #endif // KOKKOS_TEST_BITSET_HPP diff --git a/lib/kokkos/containers/unit_tests/cuda/TestCuda_Category.hpp b/lib/kokkos/containers/unit_tests/TestCuda_Category.hpp similarity index 100% rename from lib/kokkos/containers/unit_tests/cuda/TestCuda_Category.hpp rename to lib/kokkos/containers/unit_tests/TestCuda_Category.hpp diff --git a/lib/kokkos/containers/unit_tests/TestDualView.hpp b/lib/kokkos/containers/unit_tests/TestDualView.hpp index 572ef48839f6c1f92127028e44e8d52dc47a2771..665f25115803cd332bc2d54686e34fce97e23aac 100644 --- a/lib/kokkos/containers/unit_tests/TestDualView.hpp +++ b/lib/kokkos/containers/unit_tests/TestDualView.hpp @@ -67,11 +67,17 @@ struct test_dualview_combinations { Scalar result; template - Scalar run_me(unsigned int n, unsigned int m) { + Scalar run_me(unsigned int n, unsigned int m, bool with_init) { if (n < 10) n = 10; if (m < 3) m = 3; - ViewType a("A", n, m); + ViewType a; + + if (with_init) { + a = ViewType("A", n, m); + } else { + a = ViewType(Kokkos::ViewAllocateWithoutInitializing("A"), n, m); + } Kokkos::deep_copy(a.d_view, 1); a.template modify(); @@ -96,9 +102,9 @@ struct test_dualview_combinations { return count - a.d_view.extent(0) * a.d_view.extent(1) - 2 - 4 - 3 * 2; } - test_dualview_combinations(unsigned int size) { + test_dualview_combinations(unsigned int size, bool with_init) { result = run_me >( - size, 3); + size, 3, with_init); } }; @@ -124,18 +130,25 @@ struct test_dual_view_deep_copy { typedef Device execution_space; template - void run_me() { - const unsigned int n = 10; - const unsigned int m = 5; - const unsigned int sum_total = n * m; - - ViewType a("A", n, m); - ViewType b("B", n, m); + void run_me(int n, const int m, const bool use_templ_sync) { + ViewType a, b; + if (n >= 0) { + a = ViewType("A", n, m); + b = ViewType("B", n, m); + } else { + n = 0; + } + const scalar_type sum_total = scalar_type(n * m); Kokkos::deep_copy(a.d_view, 1); - a.template modify(); - a.template sync(); + if (use_templ_sync) { + a.template modify(); + a.template sync(); + } else { + a.modify_device(); + a.sync_host(); + } // Check device view is initialized as expected scalar_type a_d_sum = 0; @@ -159,7 +172,11 @@ struct test_dual_view_deep_copy { // Test deep_copy Kokkos::deep_copy(b, a); - b.template sync(); + if (use_templ_sync) { + b.template sync(); + } else { + b.sync_host(); + } // Perform same checks on b as done on a // Check device view is initialized as expected @@ -183,6 +200,145 @@ struct test_dual_view_deep_copy { } // end run_me test_dual_view_deep_copy() { + run_me >(10, 5, + true); + run_me >(10, 5, + false); + // Test zero length but allocated (a.d_view.data!=nullptr but + // a.d_view.span()==0) + run_me >(0, 5, true); + run_me >(0, 5, + false); + + // Test default constructed view + run_me >(-1, 5, + true); + run_me >(-1, 5, + false); + } +}; + +template +struct test_dualview_resize { + typedef Scalar scalar_type; + typedef Device execution_space; + + template + void run_me() { + const unsigned int n = 10; + const unsigned int m = 5; + const unsigned int factor = 2; + + ViewType a("A", n, m); + Kokkos::deep_copy(a.d_view, 1); + + /* Covers case "Resize on Device" */ + a.modify_device(); + Kokkos::resize(a, factor * n, factor * m); + ASSERT_EQ(a.extent(0), n * factor); + ASSERT_EQ(a.extent(1), m * factor); + + Kokkos::deep_copy(a.d_view, 1); + a.sync_host(); + + // Check device view is initialized as expected + scalar_type a_d_sum = 0; + // Execute on the execution_space associated with t_dev's memory space + typedef typename ViewType::t_dev::memory_space::execution_space + t_dev_exec_space; + Kokkos::parallel_reduce( + Kokkos::RangePolicy(0, a.d_view.extent(0)), + SumViewEntriesFunctor(a.d_view), + a_d_sum); + + // Check host view is synced as expected + scalar_type a_h_sum = 0; + for (size_t i = 0; i < a.h_view.extent(0); ++i) + for (size_t j = 0; j < a.h_view.extent(1); ++j) { + a_h_sum += a.h_view(i, j); + } + + // Check + ASSERT_EQ(a_h_sum, a_d_sum); + ASSERT_EQ(a_h_sum, a.extent(0) * a.extent(1)); + + /* Covers case "Resize on Host" */ + a.modify_host(); + + Kokkos::resize(a, n / factor, m / factor); + ASSERT_EQ(a.extent(0), n / factor); + ASSERT_EQ(a.extent(1), m / factor); + + a.sync_device(); + + // Check device view is initialized as expected + a_d_sum = 0; + // Execute on the execution_space associated with t_dev's memory space + typedef typename ViewType::t_dev::memory_space::execution_space + t_dev_exec_space; + Kokkos::parallel_reduce( + Kokkos::RangePolicy(0, a.d_view.extent(0)), + SumViewEntriesFunctor(a.d_view), + a_d_sum); + + // Check host view is synced as expected + a_h_sum = 0; + for (size_t i = 0; i < a.h_view.extent(0); ++i) + for (size_t j = 0; j < a.h_view.extent(1); ++j) { + a_h_sum += a.h_view(i, j); + } + + // Check + ASSERT_EQ(a_h_sum, a.extent(0) * a.extent(1)); + ASSERT_EQ(a_h_sum, a_d_sum); + + } // end run_me + + test_dualview_resize() { + run_me >(); + } +}; + +template +struct test_dualview_realloc { + typedef Scalar scalar_type; + typedef Device execution_space; + + template + void run_me() { + const unsigned int n = 10; + const unsigned int m = 5; + + ViewType a("A", n, m); + Kokkos::realloc(a, n, m); + + Kokkos::deep_copy(a.d_view, 1); + a.modify_device(); + a.sync_host(); + + // Check device view is initialized as expected + scalar_type a_d_sum = 0; + // Execute on the execution_space associated with t_dev's memory space + typedef typename ViewType::t_dev::memory_space::execution_space + t_dev_exec_space; + Kokkos::parallel_reduce( + Kokkos::RangePolicy(0, a.d_view.extent(0)), + SumViewEntriesFunctor(a.d_view), + a_d_sum); + + // Check host view is synced as expected + scalar_type a_h_sum = 0; + for (size_t i = 0; i < a.h_view.extent(0); ++i) + for (size_t j = 0; j < a.h_view.extent(1); ++j) { + a_h_sum += a.h_view(i, j); + } + + // Check + ASSERT_EQ(a_h_sum, a.extent(0) * a.extent(1)); + ASSERT_EQ(a_h_sum, a_d_sum); + } // end run_me + + test_dualview_realloc() { run_me >(); } }; @@ -190,8 +346,8 @@ struct test_dual_view_deep_copy { } // namespace Impl template -void test_dualview_combinations(unsigned int size) { - Impl::test_dualview_combinations test(size); +void test_dualview_combinations(unsigned int size, bool with_init) { + Impl::test_dualview_combinations test(size, with_init); ASSERT_EQ(test.result, 0); } @@ -200,8 +356,22 @@ void test_dualview_deep_copy() { Impl::test_dual_view_deep_copy(); } +template +void test_dualview_realloc() { + Impl::test_dualview_realloc(); +} + +template +void test_dualview_resize() { + Impl::test_dualview_resize(); +} + TEST(TEST_CATEGORY, dualview_combination) { - test_dualview_combinations(10); + test_dualview_combinations(10, true); +} + +TEST(TEST_CATEGORY, dualview_combinations_without_init) { + test_dualview_combinations(10, false); } TEST(TEST_CATEGORY, dualview_deep_copy) { @@ -209,6 +379,14 @@ TEST(TEST_CATEGORY, dualview_deep_copy) { test_dualview_deep_copy(); } +TEST(TEST_CATEGORY, dualview_realloc) { + test_dualview_realloc(); +} + +TEST(TEST_CATEGORY, dualview_resize) { + test_dualview_resize(); +} + } // namespace Test -#endif // KOKKOS_TEST_UNORDERED_MAP_HPP +#endif // KOKKOS_TEST_DUALVIEW_HPP diff --git a/lib/kokkos/containers/unit_tests/TestDynViewAPI.hpp b/lib/kokkos/containers/unit_tests/TestDynViewAPI.hpp index 3692aa8a125240407b0331158dd9a1d7febed6c4..5c1d0229cbaa131d2e8b629051c3076df72d2b92 100644 --- a/lib/kokkos/containers/unit_tests/TestDynViewAPI.hpp +++ b/lib/kokkos/containers/unit_tests/TestDynViewAPI.hpp @@ -706,8 +706,6 @@ class TestDynViewAPI { typedef typename View0::host_mirror_space host_view_space; - TestDynViewAPI() {} - static void run_tests() { run_test_resize_realloc(); run_test_mirror(); @@ -1078,12 +1076,12 @@ class TestDynViewAPI { ASSERT_TRUE(Kokkos::is_dyn_rank_view::value); ASSERT_FALSE(Kokkos::is_dyn_rank_view >::value); - ASSERT_TRUE(dx.data() == 0); // Okay with UVM - ASSERT_TRUE(dy.data() == 0); // Okay with UVM - ASSERT_TRUE(dz.data() == 0); // Okay with UVM - ASSERT_TRUE(hx.data() == 0); - ASSERT_TRUE(hy.data() == 0); - ASSERT_TRUE(hz.data() == 0); + ASSERT_TRUE(dx.data() == nullptr); // Okay with UVM + ASSERT_TRUE(dy.data() == nullptr); // Okay with UVM + ASSERT_TRUE(dz.data() == nullptr); // Okay with UVM + ASSERT_TRUE(hx.data() == nullptr); + ASSERT_TRUE(hy.data() == nullptr); + ASSERT_TRUE(hz.data() == nullptr); ASSERT_EQ(dx.extent(0), 0u); // Okay with UVM ASSERT_EQ(dy.extent(0), 0u); // Okay with UVM ASSERT_EQ(dz.extent(0), 0u); // Okay with UVM @@ -1154,11 +1152,11 @@ class TestDynViewAPI { ASSERT_EQ(dx.use_count(), size_t(2)); - ASSERT_FALSE(dx.data() == 0); - ASSERT_FALSE(const_dx.data() == 0); - ASSERT_FALSE(unmanaged_dx.data() == 0); - ASSERT_FALSE(unmanaged_from_ptr_dx.data() == 0); - ASSERT_FALSE(dy.data() == 0); + ASSERT_FALSE(dx.data() == nullptr); + ASSERT_FALSE(const_dx.data() == nullptr); + ASSERT_FALSE(unmanaged_dx.data() == nullptr); + ASSERT_FALSE(unmanaged_from_ptr_dx.data() == nullptr); + ASSERT_FALSE(dy.data() == nullptr); ASSERT_NE(dx, dy); ASSERT_EQ(dx.extent(0), unsigned(N0)); @@ -1318,17 +1316,17 @@ class TestDynViewAPI { ASSERT_NE(dx, dz); dx = dView0(); - ASSERT_TRUE(dx.data() == 0); - ASSERT_FALSE(dy.data() == 0); - ASSERT_FALSE(dz.data() == 0); + ASSERT_TRUE(dx.data() == nullptr); + ASSERT_FALSE(dy.data() == nullptr); + ASSERT_FALSE(dz.data() == nullptr); dy = dView0(); - ASSERT_TRUE(dx.data() == 0); - ASSERT_TRUE(dy.data() == 0); - ASSERT_FALSE(dz.data() == 0); + ASSERT_TRUE(dx.data() == nullptr); + ASSERT_TRUE(dy.data() == nullptr); + ASSERT_FALSE(dz.data() == nullptr); dz = dView0(); - ASSERT_TRUE(dx.data() == 0); - ASSERT_TRUE(dy.data() == 0); - ASSERT_TRUE(dz.data() == 0); + ASSERT_TRUE(dx.data() == nullptr); + ASSERT_TRUE(dy.data() == nullptr); + ASSERT_TRUE(dz.data() == nullptr); // View - DynRankView Interoperability tests // deep_copy from view to dynrankview diff --git a/lib/kokkos/containers/unit_tests/TestDynViewAPI_generic.hpp b/lib/kokkos/containers/unit_tests/TestDynViewAPI_generic.hpp index 90ca5df194d5c33f53446125470ab7f464085095..b3e2812b4402b23213606bba7a9c34485a3e18a2 100644 --- a/lib/kokkos/containers/unit_tests/TestDynViewAPI_generic.hpp +++ b/lib/kokkos/containers/unit_tests/TestDynViewAPI_generic.hpp @@ -44,7 +44,10 @@ #include namespace Test { +// FIXME_HIP attempt to access inaccessible memory space +#ifndef KOKKOS_ENABLE_HIP TEST(TEST_CATEGORY, dyn_rank_view_api_generic) { TestDynViewAPI::run_tests(); } +#endif } // namespace Test diff --git a/lib/kokkos/containers/unit_tests/TestDynViewAPI_rank12345.hpp b/lib/kokkos/containers/unit_tests/TestDynViewAPI_rank12345.hpp index 050ebbe35cab5e85b726b7ad5f9a10f3170607bb..86a2e4e9548cb7cd37dedf30897327a09c526392 100644 --- a/lib/kokkos/containers/unit_tests/TestDynViewAPI_rank12345.hpp +++ b/lib/kokkos/containers/unit_tests/TestDynViewAPI_rank12345.hpp @@ -45,7 +45,10 @@ #include namespace Test { +// FIXME_HIP failing with wrong value +#ifndef KOKKOS_ENABLE_HIP TEST(TEST_CATEGORY, dyn_rank_view_api_operator_rank12345) { TestDynViewAPI::run_operator_test_rank12345(); } +#endif } // namespace Test diff --git a/lib/kokkos/containers/unit_tests/TestDynamicView.hpp b/lib/kokkos/containers/unit_tests/TestDynamicView.hpp index 235464ef07e0648088153fb94b0613d4fdab376a..8eabbcb3718fcba29c4285a49ab8ddc63ff1d9da 100644 --- a/lib/kokkos/containers/unit_tests/TestDynamicView.hpp +++ b/lib/kokkos/containers/unit_tests/TestDynamicView.hpp @@ -79,7 +79,6 @@ struct TestDynamicView { ASSERT_EQ(da.size(), da_size); #if defined(KOKKOS_ENABLE_CXX11_DISPATCH_LAMBDA) -#if !defined(KOKKOS_ENABLE_CUDA) || (8000 <= CUDA_VERSION) Kokkos::parallel_for( Kokkos::RangePolicy(0, da_size), KOKKOS_LAMBDA(const int i) { da(i) = Scalar(i); }); @@ -93,7 +92,6 @@ struct TestDynamicView { result_sum); ASSERT_EQ(result_sum, (value_type)(da_size * (da_size - 1) / 2)); -#endif #endif // add 3x more entries i.e. 4x larger than previous size @@ -103,7 +101,6 @@ struct TestDynamicView { ASSERT_EQ(da.size(), da_resize); #if defined(KOKKOS_ENABLE_CXX11_DISPATCH_LAMBDA) -#if !defined(KOKKOS_ENABLE_CUDA) || (8000 <= CUDA_VERSION) Kokkos::parallel_for( Kokkos::RangePolicy(da_size, da_resize), KOKKOS_LAMBDA(const int i) { da(i) = Scalar(i); }); @@ -118,7 +115,6 @@ struct TestDynamicView { ASSERT_EQ(new_result_sum + result_sum, (value_type)(da_resize * (da_resize - 1) / 2)); -#endif #endif } // end scope @@ -135,7 +131,6 @@ struct TestDynamicView { ASSERT_EQ(da.size(), da_size); #if defined(KOKKOS_ENABLE_CXX11_DISPATCH_LAMBDA) -#if !defined(KOKKOS_ENABLE_CUDA) || (8000 <= CUDA_VERSION) Kokkos::parallel_for( Kokkos::RangePolicy(0, da_size), KOKKOS_LAMBDA(const int i) { da(i) = Scalar(i); }); @@ -149,7 +144,6 @@ struct TestDynamicView { result_sum); ASSERT_EQ(result_sum, (value_type)(da_size * (da_size - 1) / 2)); -#endif #endif // add 3x more entries i.e. 4x larger than previous size @@ -159,7 +153,6 @@ struct TestDynamicView { ASSERT_EQ(da.size(), da_resize); #if defined(KOKKOS_ENABLE_CXX11_DISPATCH_LAMBDA) -#if !defined(KOKKOS_ENABLE_CUDA) || (8000 <= CUDA_VERSION) Kokkos::parallel_for( Kokkos::RangePolicy(da_size, da_resize), KOKKOS_LAMBDA(const int i) { da(i) = Scalar(i); }); @@ -174,7 +167,6 @@ struct TestDynamicView { ASSERT_EQ(new_result_sum + result_sum, (value_type)(da_resize * (da_resize - 1) / 2)); -#endif #endif } // end scope @@ -191,7 +183,6 @@ struct TestDynamicView { ASSERT_EQ(da.size(), da_size); #if defined(KOKKOS_ENABLE_CXX11_DISPATCH_LAMBDA) -#if !defined(KOKKOS_ENABLE_CUDA) || (8000 <= CUDA_VERSION) Kokkos::parallel_for( Kokkos::RangePolicy(0, da_size), KOKKOS_LAMBDA(const int i) { da(i) = Scalar(i); }); @@ -205,7 +196,6 @@ struct TestDynamicView { result_sum); ASSERT_EQ(result_sum, (value_type)(da_size * (da_size - 1) / 2)); -#endif #endif // remove the final 3/4 entries i.e. first 1/4 remain @@ -214,7 +204,6 @@ struct TestDynamicView { ASSERT_EQ(da.size(), da_resize); #if defined(KOKKOS_ENABLE_CXX11_DISPATCH_LAMBDA) -#if !defined(KOKKOS_ENABLE_CUDA) || (8000 <= CUDA_VERSION) Kokkos::parallel_for( Kokkos::RangePolicy(0, da_resize), KOKKOS_LAMBDA(const int i) { da(i) = Scalar(i); }); @@ -228,7 +217,6 @@ struct TestDynamicView { new_result_sum); ASSERT_EQ(new_result_sum, (value_type)(da_resize * (da_resize - 1) / 2)); -#endif #endif } // end scope } diff --git a/lib/kokkos/containers/unit_tests/TestErrorReporter.hpp b/lib/kokkos/containers/unit_tests/TestErrorReporter.hpp index 49b71cdea7a3449b56cffcb1b2cbfc3bc2f2f6e9..318132500c57b32511ece11d4472b883d40164a7 100644 --- a/lib/kokkos/containers/unit_tests/TestErrorReporter.hpp +++ b/lib/kokkos/containers/unit_tests/TestErrorReporter.hpp @@ -50,9 +50,13 @@ #include #include +#ifndef M_PI +#define M_PI 3.14159265358979323846 +#endif + namespace Test { -// Just save the data in the report. Informative text goies in the +// Just save the data in the report. Informative text goes in the // operator<<(..). template struct ThreeValReport { @@ -85,7 +89,7 @@ struct ErrorReporterDriverBase { error_reporter_type; error_reporter_type m_errorReporter; - ErrorReporterDriverBase(int reporter_capacity, int test_size) + ErrorReporterDriverBase(int reporter_capacity, int /*test_size*/) : m_errorReporter(reporter_capacity) {} KOKKOS_INLINE_FUNCTION bool error_condition(const int work_idx) const { @@ -176,7 +180,8 @@ struct ErrorReporterDriver : public ErrorReporterDriverBase { } }; -#if defined(KOKKOS_CLASS_LAMBDA) +#if defined(KOKKOS_CLASS_LAMBDA) && \ + (!defined(KOKKOS_ENABLE_CUDA) || defined(KOKKOS_ENABLE_CUDA_LAMBDA)) template struct ErrorReporterDriverUseLambda : public ErrorReporterDriverBase { @@ -225,7 +230,8 @@ struct ErrorReporterDriverNativeOpenMP }; #endif -#if defined(KOKKOS_CLASS_LAMBDA) +#if defined(KOKKOS_CLASS_LAMBDA) && \ + (!defined(KOKKOS_ENABLE_CUDA) || defined(KOKKOS_ENABLE_CUDA_LAMBDA)) TEST(TEST_CATEGORY, ErrorReporterViaLambda) { TestErrorReporter>(); } diff --git a/lib/kokkos/containers/unit_tests/rocm/TestROCm_Category.hpp b/lib/kokkos/containers/unit_tests/TestHIP_Category.hpp similarity index 93% rename from lib/kokkos/containers/unit_tests/rocm/TestROCm_Category.hpp rename to lib/kokkos/containers/unit_tests/TestHIP_Category.hpp index d37cd05db68163a0e24bf61204e3054860537a5d..c2d60d18148b30674de5ee559ecafc09d23d126f 100644 --- a/lib/kokkos/containers/unit_tests/rocm/TestROCm_Category.hpp +++ b/lib/kokkos/containers/unit_tests/TestHIP_Category.hpp @@ -42,10 +42,10 @@ //@HEADER */ -#ifndef KOKKOS_TEST_ROCM_HPP -#define KOKKOS_TEST_ROCM_HPP +#ifndef KOKKOS_TEST_HIP_HPP +#define KOKKOS_TEST_HIP_HPP -#define TEST_CATEGORY rocm -#define TEST_EXECSPACE Kokkos::Experimental::ROCm +#define TEST_CATEGORY hip +#define TEST_EXECSPACE Kokkos::Experimental::HIP #endif diff --git a/lib/kokkos/containers/unit_tests/hpx/TestHPX_Category.hpp b/lib/kokkos/containers/unit_tests/TestHPX_Category.hpp similarity index 100% rename from lib/kokkos/containers/unit_tests/hpx/TestHPX_Category.hpp rename to lib/kokkos/containers/unit_tests/TestHPX_Category.hpp diff --git a/lib/kokkos/containers/unit_tests/TestOffsetView.hpp b/lib/kokkos/containers/unit_tests/TestOffsetView.hpp index 12bcda9524ee7c179b697b41be9450b5018740df..5114b8022faf8835512965c31a3787485a7de38d 100644 --- a/lib/kokkos/containers/unit_tests/TestOffsetView.hpp +++ b/lib/kokkos/containers/unit_tests/TestOffsetView.hpp @@ -60,7 +60,7 @@ using std::endl; namespace Test { template -void test_offsetview_construction(unsigned int size) { +void test_offsetview_construction() { typedef Kokkos::Experimental::OffsetView offset_view_type; typedef Kokkos::View view_type; @@ -185,15 +185,17 @@ void test_offsetview_construction(unsigned int size) { Kokkos::deep_copy(view3D, 1); - Kokkos::Array begins = {{-10, -20, -30}}; - Kokkos::Experimental::OffsetView offsetView3D(view3D, - begins); - typedef Kokkos::MDRangePolicy, Kokkos::IndexType > range3_type; typedef typename range3_type::point_type point3_type; + typename point3_type::value_type begins0 = -10, begins1 = -20, + begins2 = -30; + Kokkos::Array begins = {{begins0, begins1, begins2}}; + Kokkos::Experimental::OffsetView offsetView3D(view3D, + begins); + range3_type rangePolicy3DZero(point3_type{{0, 0, 0}}, point3_type{{extent0, extent1, extent2}}); @@ -207,9 +209,8 @@ void test_offsetview_construction(unsigned int size) { view3DSum); range3_type rangePolicy3D( - point3_type{{begins[0], begins[1], begins[2]}}, - point3_type{ - {begins[0] + extent0, begins[1] + extent1, begins[2] + extent2}}); + point3_type{{begins0, begins1, begins2}}, + point3_type{{begins0 + extent0, begins1 + extent1, begins2 + extent2}}); int offsetView3DSum = 0; Kokkos::parallel_reduce( @@ -388,7 +389,7 @@ void test_offsetview_unmanaged_construction() { } template -void test_offsetview_subview(unsigned int size) { +void test_offsetview_subview() { { // test subview 1 Kokkos::Experimental::OffsetView sliceMe("offsetToSlice", {-10, 20}); @@ -675,7 +676,7 @@ void test_offsetview_offsets_rank3() { #endif TEST(TEST_CATEGORY, offsetview_construction) { - test_offsetview_construction(10); + test_offsetview_construction(); } TEST(TEST_CATEGORY, offsetview_unmanaged_construction) { @@ -683,7 +684,7 @@ TEST(TEST_CATEGORY, offsetview_unmanaged_construction) { } TEST(TEST_CATEGORY, offsetview_subview) { - test_offsetview_subview(10); + test_offsetview_subview(); } #if defined(KOKKOS_ENABLE_CUDA_LAMBDA) || !defined(KOKKOS_ENABLE_CUDA) diff --git a/lib/kokkos/containers/unit_tests/openmp/TestOpenMP_Category.hpp b/lib/kokkos/containers/unit_tests/TestOpenMP_Category.hpp similarity index 100% rename from lib/kokkos/containers/unit_tests/openmp/TestOpenMP_Category.hpp rename to lib/kokkos/containers/unit_tests/TestOpenMP_Category.hpp diff --git a/lib/kokkos/containers/unit_tests/TestScatterView.hpp b/lib/kokkos/containers/unit_tests/TestScatterView.hpp index 93b69cc769c28dd9c165983e8ba3b5cce81c6ccf..915d96d321009aa41f9562c52562ebd330470259 100644 --- a/lib/kokkos/containers/unit_tests/TestScatterView.hpp +++ b/lib/kokkos/containers/unit_tests/TestScatterView.hpp @@ -50,21 +50,21 @@ namespace Test { -template struct test_scatter_view_impl_cls; -template -struct test_scatter_view_impl_cls { public: - typedef Kokkos::Experimental::ScatterView scatter_view_type; - typedef Kokkos::View orig_view_type; + typedef Kokkos::View orig_view_type; scatter_view_type scatter_view; int scatterSize; @@ -90,7 +90,8 @@ struct test_scatter_view_impl_cls(0, n); + auto policy = + Kokkos::RangePolicy(0, n); Kokkos::parallel_for(policy, *this, "scatter_view_test: Sum"); } @@ -123,17 +124,17 @@ struct test_scatter_view_impl_cls -struct test_scatter_view_impl_cls { public: - typedef Kokkos::Experimental::ScatterView scatter_view_type; - typedef Kokkos::View orig_view_type; + typedef Kokkos::View orig_view_type; scatter_view_type scatter_view; int scatterSize; @@ -159,7 +160,8 @@ struct test_scatter_view_impl_cls(0, n); + auto policy = + Kokkos::RangePolicy(0, n); Kokkos::parallel_for(policy, *this, "scatter_view_test: Prod"); } @@ -192,17 +194,17 @@ struct test_scatter_view_impl_cls -struct test_scatter_view_impl_cls { public: - typedef Kokkos::Experimental::ScatterView scatter_view_type; - typedef Kokkos::View orig_view_type; + typedef Kokkos::View orig_view_type; scatter_view_type scatter_view; int scatterSize; @@ -228,7 +230,8 @@ struct test_scatter_view_impl_cls(0, n); + auto policy = + Kokkos::RangePolicy(0, n); Kokkos::parallel_for(policy, *this, "scatter_view_test: Prod"); } @@ -261,17 +264,17 @@ struct test_scatter_view_impl_cls -struct test_scatter_view_impl_cls { public: - typedef Kokkos::Experimental::ScatterView scatter_view_type; - typedef Kokkos::View orig_view_type; + typedef Kokkos::View orig_view_type; scatter_view_type scatter_view; int scatterSize; @@ -297,7 +300,7 @@ struct test_scatter_view_impl_cls(0, n); + Kokkos::RangePolicy policy(0, n); Kokkos::parallel_for(policy, *this, "scatter_view_test: Prod"); } @@ -330,20 +333,18 @@ struct test_scatter_view_impl_cls struct test_scatter_view_config { public: typedef - typename test_scatter_view_impl_cls::scatter_view_type scatter_view_def; - typedef typename test_scatter_view_impl_cls::orig_view_type orig_view_def; - test_scatter_view_config() {} - void run_test(int n) { // Test creation via create_scatter_view { @@ -351,7 +352,7 @@ struct test_scatter_view_config { scatter_view_def scatter_view = Kokkos::Experimental::create_scatter_view< op, duplication, contribution>(original_view); - test_scatter_view_impl_cls scatter_view_test_impl(scatter_view); scatter_view_test_impl.initialize(original_view); @@ -379,7 +380,7 @@ struct test_scatter_view_config { orig_view_def original_view("original_view", n); scatter_view_def scatter_view(original_view); - test_scatter_view_impl_cls scatter_view_test_impl(scatter_view); scatter_view_test_impl.initialize(original_view); @@ -405,17 +406,18 @@ struct test_scatter_view_config { } }; -template +template struct TestDuplicatedScatterView { TestDuplicatedScatterView(int n) { // ScatterSum test - test_scatter_view_config< - ExecSpace, Kokkos::LayoutRight, Kokkos::Experimental::ScatterDuplicated, - Kokkos::Experimental::ScatterNonAtomic, ScatterType> + test_scatter_view_config test_sv_right_config; test_sv_right_config.run_test(n); test_scatter_view_config< - ExecSpace, Kokkos::LayoutLeft, Kokkos::Experimental::ScatterDuplicated, + DeviceType, Kokkos::LayoutLeft, Kokkos::Experimental::ScatterDuplicated, Kokkos::Experimental::ScatterNonAtomic, ScatterType> test_sv_left_config; test_sv_left_config.run_test(n); @@ -429,6 +431,16 @@ template struct TestDuplicatedScatterView { TestDuplicatedScatterView(int) {} }; +template +struct TestDuplicatedScatterView< + Kokkos::Device, ScatterType> { + TestDuplicatedScatterView(int) {} +}; +template +struct TestDuplicatedScatterView< + Kokkos::Device, ScatterType> { + TestDuplicatedScatterView(int) {} +}; #endif #ifdef KOKKOS_ENABLE_ROCM @@ -440,17 +452,15 @@ struct TestDuplicatedScatterView { }; #endif -template +template void test_scatter_view(int n) { - // all of these configurations should compile okay, but only some of them are - // correct and/or sensible in terms of memory use - Kokkos::Experimental::UniqueToken unique_token{ExecSpace()}; + using execution_space = typename DeviceType::execution_space; // no atomics or duplication is only sensible if the execution space // is running essentially in serial (doesn't have to be Serial though, // we also test OpenMP with one thread: LAMMPS cares about that) - if (unique_token.size() == 1) { - test_scatter_view_config @@ -458,9 +468,9 @@ void test_scatter_view(int n) { test_sv_config.run_test(n); } #ifdef KOKKOS_ENABLE_SERIAL - if (!std::is_same::value) { + if (!std::is_same::value) { #endif - test_scatter_view_config test_sv_config; @@ -473,16 +483,18 @@ void test_scatter_view(int n) { constexpr std::size_t maximum_allowed_total_bytes = 8ull * 1024ull * 1024ull * 1024ull; std::size_t const maximum_allowed_copy_bytes = - maximum_allowed_total_bytes / std::size_t(unique_token.size()); + maximum_allowed_total_bytes / + std::size_t(execution_space().concurrency()); constexpr std::size_t bytes_per_value = sizeof(double) * 3; std::size_t const maximum_allowed_copy_values = maximum_allowed_copy_bytes / bytes_per_value; n = std::min(n, int(maximum_allowed_copy_values)); - TestDuplicatedScatterView duptest(n); + TestDuplicatedScatterView duptest(n); } +// FIXME_HIP ScatterView requires UniqueToken +#ifndef KOKKOS_ENABLE_HIP TEST(TEST_CATEGORY, scatterview) { -#ifndef KOKKOS_ENABLE_ROCM test_scatter_view(10); test_scatter_view(10); test_scatter_view(10); @@ -504,8 +516,38 @@ TEST(TEST_CATEGORY, scatterview) { test_scatter_view(big_n); test_scatter_view(big_n); test_scatter_view(big_n); +} + +TEST(TEST_CATEGORY, scatterview_devicetype) { + using device_type = + Kokkos::Device; + + test_scatter_view(10); + test_scatter_view(10); + test_scatter_view(10); + test_scatter_view(10); + +#ifdef KOKKOS_ENABLE_CUDA + if (std::is_same::value) { + using cuda_device_type = Kokkos::Device; + test_scatter_view(10); + test_scatter_view(10); + test_scatter_view(10); + test_scatter_view(10); + using cudauvm_device_type = + Kokkos::Device; + test_scatter_view( + 10); + test_scatter_view( + 10); + test_scatter_view( + 10); + test_scatter_view( + 10); + } #endif } +#endif } // namespace Test diff --git a/lib/kokkos/containers/unit_tests/serial/TestSerial_Category.hpp b/lib/kokkos/containers/unit_tests/TestSerial_Category.hpp similarity index 100% rename from lib/kokkos/containers/unit_tests/serial/TestSerial_Category.hpp rename to lib/kokkos/containers/unit_tests/TestSerial_Category.hpp diff --git a/lib/kokkos/containers/unit_tests/threads/TestThreads_Category.hpp b/lib/kokkos/containers/unit_tests/TestThreads_Category.hpp similarity index 100% rename from lib/kokkos/containers/unit_tests/threads/TestThreads_Category.hpp rename to lib/kokkos/containers/unit_tests/TestThreads_Category.hpp diff --git a/lib/kokkos/containers/unit_tests/TestUnorderedMap.hpp b/lib/kokkos/containers/unit_tests/TestUnorderedMap.hpp index 82782d3bf43b27cf3e63ea56435c305bf6a4ebd9..3ec3a4e5ec2a575943b107ea0e7a340eadf6ea44 100644 --- a/lib/kokkos/containers/unit_tests/TestUnorderedMap.hpp +++ b/lib/kokkos/containers/unit_tests/TestUnorderedMap.hpp @@ -174,6 +174,9 @@ struct TestFind { } // namespace Impl +// MSVC reports a syntax error for this test. +// WORKAROUND MSVC +#ifndef _WIN32 template void test_insert(uint32_t num_nodes, uint32_t num_inserts, uint32_t num_duplicates, bool near) { @@ -225,6 +228,7 @@ void test_insert(uint32_t num_nodes, uint32_t num_inserts, EXPECT_EQ(0u, map.size()); } } +#endif template void test_failed_insert(uint32_t num_nodes) { @@ -291,12 +295,17 @@ void test_deep_copy(uint32_t num_nodes) { } } +// FIXME_HIP deadlock +#ifndef KOKKOS_ENABLE_HIP +// WORKAROUND MSVC +#ifndef _WIN32 TEST(TEST_CATEGORY, UnorderedMap_insert) { for (int i = 0; i < 500; ++i) { test_insert(100000, 90000, 100, true); test_insert(100000, 90000, 100, false); } } +#endif TEST(TEST_CATEGORY, UnorderedMap_failed_insert) { for (int i = 0; i < 1000; ++i) test_failed_insert(10000); @@ -305,6 +314,19 @@ TEST(TEST_CATEGORY, UnorderedMap_failed_insert) { TEST(TEST_CATEGORY, UnorderedMap_deep_copy) { for (int i = 0; i < 2; ++i) test_deep_copy(10000); } +#endif + +TEST(TEST_CATEGORY, UnorderedMap_valid_empty) { + using Key = int; + using Value = int; + using Map = Kokkos::UnorderedMap; + + Map m{}; + Map n{}; + n = Map{m.capacity()}; + n.rehash(m.capacity()); + Kokkos::deep_copy(n, m); +} } // namespace Test diff --git a/lib/kokkos/containers/unit_tests/cuda/TestCuda_DynRankViewAPI_rank67.cpp b/lib/kokkos/containers/unit_tests/cuda/TestCuda_DynRankViewAPI_rank67.cpp deleted file mode 100644 index 19e248dd9330486a2c3faf440cc7d4adb4f73757..0000000000000000000000000000000000000000 --- a/lib/kokkos/containers/unit_tests/cuda/TestCuda_DynRankViewAPI_rank67.cpp +++ /dev/null @@ -1,47 +0,0 @@ - -/* -//@HEADER -// ************************************************************************ -// -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering -// Solutions of Sandia, LLC (NTESS). -// -// Under the terms of Contract DE-NA0003525 with NTESS, -// the U.S. Government retains certain rights in this software. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Christian R. Trott (crtrott@sandia.gov) -// -// ************************************************************************ -//@HEADER -*/ - -#include -#include diff --git a/lib/kokkos/containers/unit_tests/cuda/TestCuda_ScatterView.cpp b/lib/kokkos/containers/unit_tests/cuda/TestCuda_ScatterView.cpp deleted file mode 100644 index 10b63d037d7e20575d4987ccfcc87c36ec591a8f..0000000000000000000000000000000000000000 --- a/lib/kokkos/containers/unit_tests/cuda/TestCuda_ScatterView.cpp +++ /dev/null @@ -1,47 +0,0 @@ - -/* -//@HEADER -// ************************************************************************ -// -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering -// Solutions of Sandia, LLC (NTESS). -// -// Under the terms of Contract DE-NA0003525 with NTESS, -// the U.S. Government retains certain rights in this software. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Christian R. Trott (crtrott@sandia.gov) -// -// ************************************************************************ -//@HEADER -*/ - -#include -#include diff --git a/lib/kokkos/containers/unit_tests/cuda/TestCuda_StaticCrsGraph.cpp b/lib/kokkos/containers/unit_tests/cuda/TestCuda_StaticCrsGraph.cpp deleted file mode 100644 index 9c93da9c503ea73c7c29332f0e33da12c7562c83..0000000000000000000000000000000000000000 --- a/lib/kokkos/containers/unit_tests/cuda/TestCuda_StaticCrsGraph.cpp +++ /dev/null @@ -1,47 +0,0 @@ - -/* -//@HEADER -// ************************************************************************ -// -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering -// Solutions of Sandia, LLC (NTESS). -// -// Under the terms of Contract DE-NA0003525 with NTESS, -// the U.S. Government retains certain rights in this software. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Christian R. Trott (crtrott@sandia.gov) -// -// ************************************************************************ -//@HEADER -*/ - -#include -#include diff --git a/lib/kokkos/containers/unit_tests/cuda/TestCuda_UnorderedMap.cpp b/lib/kokkos/containers/unit_tests/cuda/TestCuda_UnorderedMap.cpp deleted file mode 100644 index b204e68977f1c84a79eff2a8fa44d5d9722081a8..0000000000000000000000000000000000000000 --- a/lib/kokkos/containers/unit_tests/cuda/TestCuda_UnorderedMap.cpp +++ /dev/null @@ -1,47 +0,0 @@ - -/* -//@HEADER -// ************************************************************************ -// -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering -// Solutions of Sandia, LLC (NTESS). -// -// Under the terms of Contract DE-NA0003525 with NTESS, -// the U.S. Government retains certain rights in this software. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Christian R. Trott (crtrott@sandia.gov) -// -// ************************************************************************ -//@HEADER -*/ - -#include -#include diff --git a/lib/kokkos/containers/unit_tests/cuda/TestCuda_ViewCtorPropEmbeddedDim.cpp b/lib/kokkos/containers/unit_tests/cuda/TestCuda_ViewCtorPropEmbeddedDim.cpp deleted file mode 100644 index c865deb0b252018fb3ae9aa5d444999124fe4551..0000000000000000000000000000000000000000 --- a/lib/kokkos/containers/unit_tests/cuda/TestCuda_ViewCtorPropEmbeddedDim.cpp +++ /dev/null @@ -1,47 +0,0 @@ - -/* -//@HEADER -// ************************************************************************ -// -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering -// Solutions of Sandia, LLC (NTESS). -// -// Under the terms of Contract DE-NA0003525 with NTESS, -// the U.S. Government retains certain rights in this software. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Christian R. Trott (crtrott@sandia.gov) -// -// ************************************************************************ -//@HEADER -*/ - -#include -#include diff --git a/lib/kokkos/containers/unit_tests/hpx/TestHPX_DynRankViewAPI_generic.cpp b/lib/kokkos/containers/unit_tests/hpx/TestHPX_DynRankViewAPI_generic.cpp deleted file mode 100644 index 778bd891d68befa2f3cc8a1ff39cc64d073da05f..0000000000000000000000000000000000000000 --- a/lib/kokkos/containers/unit_tests/hpx/TestHPX_DynRankViewAPI_generic.cpp +++ /dev/null @@ -1,47 +0,0 @@ - -/* -//@HEADER -// ************************************************************************ -// -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering -// Solutions of Sandia, LLC (NTESS). -// -// Under the terms of Contract DE-NA0003525 with NTESS, -// the U.S. Government retains certain rights in this software. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Christian R. Trott (crtrott@sandia.gov) -// -// ************************************************************************ -//@HEADER -*/ - -#include -#include diff --git a/lib/kokkos/containers/unit_tests/hpx/TestHPX_DynRankViewAPI_rank12345.cpp b/lib/kokkos/containers/unit_tests/hpx/TestHPX_DynRankViewAPI_rank12345.cpp deleted file mode 100644 index 0bb77a266d5b1feb85c02c65576eeaf76651b11f..0000000000000000000000000000000000000000 --- a/lib/kokkos/containers/unit_tests/hpx/TestHPX_DynRankViewAPI_rank12345.cpp +++ /dev/null @@ -1,47 +0,0 @@ - -/* -//@HEADER -// ************************************************************************ -// -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering -// Solutions of Sandia, LLC (NTESS). -// -// Under the terms of Contract DE-NA0003525 with NTESS, -// the U.S. Government retains certain rights in this software. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Christian R. Trott (crtrott@sandia.gov) -// -// ************************************************************************ -//@HEADER -*/ - -#include -#include diff --git a/lib/kokkos/containers/unit_tests/hpx/TestHPX_DynRankViewAPI_rank67.cpp b/lib/kokkos/containers/unit_tests/hpx/TestHPX_DynRankViewAPI_rank67.cpp deleted file mode 100644 index 6594cb3213f49b005e27f7a455ebc6e1cf639e0e..0000000000000000000000000000000000000000 --- a/lib/kokkos/containers/unit_tests/hpx/TestHPX_DynRankViewAPI_rank67.cpp +++ /dev/null @@ -1,47 +0,0 @@ - -/* -//@HEADER -// ************************************************************************ -// -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering -// Solutions of Sandia, LLC (NTESS). -// -// Under the terms of Contract DE-NA0003525 with NTESS, -// the U.S. Government retains certain rights in this software. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Christian R. Trott (crtrott@sandia.gov) -// -// ************************************************************************ -//@HEADER -*/ - -#include -#include diff --git a/lib/kokkos/containers/unit_tests/hpx/TestHPX_DynamicView.cpp b/lib/kokkos/containers/unit_tests/hpx/TestHPX_DynamicView.cpp deleted file mode 100644 index c1efc778a69455dd17d764330bd9420628c58dfd..0000000000000000000000000000000000000000 --- a/lib/kokkos/containers/unit_tests/hpx/TestHPX_DynamicView.cpp +++ /dev/null @@ -1,47 +0,0 @@ - -/* -//@HEADER -// ************************************************************************ -// -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering -// Solutions of Sandia, LLC (NTESS). -// -// Under the terms of Contract DE-NA0003525 with NTESS, -// the U.S. Government retains certain rights in this software. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Christian R. Trott (crtrott@sandia.gov) -// -// ************************************************************************ -//@HEADER -*/ - -#include -#include diff --git a/lib/kokkos/containers/unit_tests/hpx/TestHPX_ErrorReporter.cpp b/lib/kokkos/containers/unit_tests/hpx/TestHPX_ErrorReporter.cpp deleted file mode 100644 index 3f68c6d07f3bb0375f981f167497d21aa78c40be..0000000000000000000000000000000000000000 --- a/lib/kokkos/containers/unit_tests/hpx/TestHPX_ErrorReporter.cpp +++ /dev/null @@ -1,47 +0,0 @@ - -/* -//@HEADER -// ************************************************************************ -// -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering -// Solutions of Sandia, LLC (NTESS). -// -// Under the terms of Contract DE-NA0003525 with NTESS, -// the U.S. Government retains certain rights in this software. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Christian R. Trott (crtrott@sandia.gov) -// -// ************************************************************************ -//@HEADER -*/ - -#include -#include diff --git a/lib/kokkos/containers/unit_tests/hpx/TestHPX_OffsetView.cpp b/lib/kokkos/containers/unit_tests/hpx/TestHPX_OffsetView.cpp deleted file mode 100644 index 171930022820eb0a8d707612c4df6b3380283bac..0000000000000000000000000000000000000000 --- a/lib/kokkos/containers/unit_tests/hpx/TestHPX_OffsetView.cpp +++ /dev/null @@ -1,47 +0,0 @@ - -/* -//@HEADER -// ************************************************************************ -// -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering -// Solutions of Sandia, LLC (NTESS). -// -// Under the terms of Contract DE-NA0003525 with NTESS, -// the U.S. Government retains certain rights in this software. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Christian R. Trott (crtrott@sandia.gov) -// -// ************************************************************************ -//@HEADER -*/ - -#include -#include diff --git a/lib/kokkos/containers/unit_tests/hpx/TestHPX_ScatterView.cpp b/lib/kokkos/containers/unit_tests/hpx/TestHPX_ScatterView.cpp deleted file mode 100644 index 8f9eb059189b266af3359f5c9de97bf07b8e1ef8..0000000000000000000000000000000000000000 --- a/lib/kokkos/containers/unit_tests/hpx/TestHPX_ScatterView.cpp +++ /dev/null @@ -1,47 +0,0 @@ - -/* -//@HEADER -// ************************************************************************ -// -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering -// Solutions of Sandia, LLC (NTESS). -// -// Under the terms of Contract DE-NA0003525 with NTESS, -// the U.S. Government retains certain rights in this software. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Christian R. Trott (crtrott@sandia.gov) -// -// ************************************************************************ -//@HEADER -*/ - -#include -#include diff --git a/lib/kokkos/containers/unit_tests/hpx/TestHPX_StaticCrsGraph.cpp b/lib/kokkos/containers/unit_tests/hpx/TestHPX_StaticCrsGraph.cpp deleted file mode 100644 index 4f513efb0f0e981d88f91af075cc13ff2d73e524..0000000000000000000000000000000000000000 --- a/lib/kokkos/containers/unit_tests/hpx/TestHPX_StaticCrsGraph.cpp +++ /dev/null @@ -1,47 +0,0 @@ - -/* -//@HEADER -// ************************************************************************ -// -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering -// Solutions of Sandia, LLC (NTESS). -// -// Under the terms of Contract DE-NA0003525 with NTESS, -// the U.S. Government retains certain rights in this software. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Christian R. Trott (crtrott@sandia.gov) -// -// ************************************************************************ -//@HEADER -*/ - -#include -#include diff --git a/lib/kokkos/containers/unit_tests/hpx/TestHPX_UnorderedMap.cpp b/lib/kokkos/containers/unit_tests/hpx/TestHPX_UnorderedMap.cpp deleted file mode 100644 index 517135290a8ad7cf16b9ed20c4495e725e788148..0000000000000000000000000000000000000000 --- a/lib/kokkos/containers/unit_tests/hpx/TestHPX_UnorderedMap.cpp +++ /dev/null @@ -1,47 +0,0 @@ - -/* -//@HEADER -// ************************************************************************ -// -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering -// Solutions of Sandia, LLC (NTESS). -// -// Under the terms of Contract DE-NA0003525 with NTESS, -// the U.S. Government retains certain rights in this software. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Christian R. Trott (crtrott@sandia.gov) -// -// ************************************************************************ -//@HEADER -*/ - -#include -#include diff --git a/lib/kokkos/containers/unit_tests/hpx/TestHPX_ViewCtorPropEmbeddedDim.cpp b/lib/kokkos/containers/unit_tests/hpx/TestHPX_ViewCtorPropEmbeddedDim.cpp deleted file mode 100644 index de2e96be7301cc8bae137162463a6b8fbd6fa5a4..0000000000000000000000000000000000000000 --- a/lib/kokkos/containers/unit_tests/hpx/TestHPX_ViewCtorPropEmbeddedDim.cpp +++ /dev/null @@ -1,47 +0,0 @@ - -/* -//@HEADER -// ************************************************************************ -// -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering -// Solutions of Sandia, LLC (NTESS). -// -// Under the terms of Contract DE-NA0003525 with NTESS, -// the U.S. Government retains certain rights in this software. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Christian R. Trott (crtrott@sandia.gov) -// -// ************************************************************************ -//@HEADER -*/ - -#include -#include diff --git a/lib/kokkos/containers/unit_tests/openmp/TestOpenMP_DynRankViewAPI_generic.cpp b/lib/kokkos/containers/unit_tests/openmp/TestOpenMP_DynRankViewAPI_generic.cpp deleted file mode 100644 index 637be64dfa07202ef3c6a4950bb5f9cf2ab8e8e9..0000000000000000000000000000000000000000 --- a/lib/kokkos/containers/unit_tests/openmp/TestOpenMP_DynRankViewAPI_generic.cpp +++ /dev/null @@ -1,47 +0,0 @@ - -/* -//@HEADER -// ************************************************************************ -// -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering -// Solutions of Sandia, LLC (NTESS). -// -// Under the terms of Contract DE-NA0003525 with NTESS, -// the U.S. Government retains certain rights in this software. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Christian R. Trott (crtrott@sandia.gov) -// -// ************************************************************************ -//@HEADER -*/ - -#include -#include diff --git a/lib/kokkos/containers/unit_tests/openmp/TestOpenMP_DynRankViewAPI_rank12345.cpp b/lib/kokkos/containers/unit_tests/openmp/TestOpenMP_DynRankViewAPI_rank12345.cpp deleted file mode 100644 index 01b57a1690a70df1161b99004ea0af901ee8515a..0000000000000000000000000000000000000000 --- a/lib/kokkos/containers/unit_tests/openmp/TestOpenMP_DynRankViewAPI_rank12345.cpp +++ /dev/null @@ -1,47 +0,0 @@ - -/* -//@HEADER -// ************************************************************************ -// -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering -// Solutions of Sandia, LLC (NTESS). -// -// Under the terms of Contract DE-NA0003525 with NTESS, -// the U.S. Government retains certain rights in this software. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Christian R. Trott (crtrott@sandia.gov) -// -// ************************************************************************ -//@HEADER -*/ - -#include -#include diff --git a/lib/kokkos/containers/unit_tests/openmp/TestOpenMP_DynRankViewAPI_rank67.cpp b/lib/kokkos/containers/unit_tests/openmp/TestOpenMP_DynRankViewAPI_rank67.cpp deleted file mode 100644 index 7d742eaeed19353ef61eee454e8982169002c8f7..0000000000000000000000000000000000000000 --- a/lib/kokkos/containers/unit_tests/openmp/TestOpenMP_DynRankViewAPI_rank67.cpp +++ /dev/null @@ -1,47 +0,0 @@ - -/* -//@HEADER -// ************************************************************************ -// -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering -// Solutions of Sandia, LLC (NTESS). -// -// Under the terms of Contract DE-NA0003525 with NTESS, -// the U.S. Government retains certain rights in this software. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Christian R. Trott (crtrott@sandia.gov) -// -// ************************************************************************ -//@HEADER -*/ - -#include -#include diff --git a/lib/kokkos/containers/unit_tests/openmp/TestOpenMP_DynamicView.cpp b/lib/kokkos/containers/unit_tests/openmp/TestOpenMP_DynamicView.cpp deleted file mode 100644 index 75b616f168c0a6ad58c989b1f99d972e72d39c2a..0000000000000000000000000000000000000000 --- a/lib/kokkos/containers/unit_tests/openmp/TestOpenMP_DynamicView.cpp +++ /dev/null @@ -1,47 +0,0 @@ - -/* -//@HEADER -// ************************************************************************ -// -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering -// Solutions of Sandia, LLC (NTESS). -// -// Under the terms of Contract DE-NA0003525 with NTESS, -// the U.S. Government retains certain rights in this software. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Christian R. Trott (crtrott@sandia.gov) -// -// ************************************************************************ -//@HEADER -*/ - -#include -#include diff --git a/lib/kokkos/containers/unit_tests/openmp/TestOpenMP_ErrorReporter.cpp b/lib/kokkos/containers/unit_tests/openmp/TestOpenMP_ErrorReporter.cpp deleted file mode 100644 index 1f00f1853282b5dac360225ca35ecf31d12e476d..0000000000000000000000000000000000000000 --- a/lib/kokkos/containers/unit_tests/openmp/TestOpenMP_ErrorReporter.cpp +++ /dev/null @@ -1,47 +0,0 @@ - -/* -//@HEADER -// ************************************************************************ -// -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering -// Solutions of Sandia, LLC (NTESS). -// -// Under the terms of Contract DE-NA0003525 with NTESS, -// the U.S. Government retains certain rights in this software. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Christian R. Trott (crtrott@sandia.gov) -// -// ************************************************************************ -//@HEADER -*/ - -#include -#include diff --git a/lib/kokkos/containers/unit_tests/openmp/TestOpenMP_OffsetView.cpp b/lib/kokkos/containers/unit_tests/openmp/TestOpenMP_OffsetView.cpp deleted file mode 100644 index 98531ff212e0b821a848a805b49443f855cb699d..0000000000000000000000000000000000000000 --- a/lib/kokkos/containers/unit_tests/openmp/TestOpenMP_OffsetView.cpp +++ /dev/null @@ -1,47 +0,0 @@ - -/* -//@HEADER -// ************************************************************************ -// -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering -// Solutions of Sandia, LLC (NTESS). -// -// Under the terms of Contract DE-NA0003525 with NTESS, -// the U.S. Government retains certain rights in this software. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Christian R. Trott (crtrott@sandia.gov) -// -// ************************************************************************ -//@HEADER -*/ - -#include -#include diff --git a/lib/kokkos/containers/unit_tests/openmp/TestOpenMP_ScatterView.cpp b/lib/kokkos/containers/unit_tests/openmp/TestOpenMP_ScatterView.cpp deleted file mode 100644 index c49577f75ddb63c0b0238c634ffadf14169373ef..0000000000000000000000000000000000000000 --- a/lib/kokkos/containers/unit_tests/openmp/TestOpenMP_ScatterView.cpp +++ /dev/null @@ -1,47 +0,0 @@ - -/* -//@HEADER -// ************************************************************************ -// -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering -// Solutions of Sandia, LLC (NTESS). -// -// Under the terms of Contract DE-NA0003525 with NTESS, -// the U.S. Government retains certain rights in this software. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Christian R. Trott (crtrott@sandia.gov) -// -// ************************************************************************ -//@HEADER -*/ - -#include -#include diff --git a/lib/kokkos/containers/unit_tests/openmp/TestOpenMP_StaticCrsGraph.cpp b/lib/kokkos/containers/unit_tests/openmp/TestOpenMP_StaticCrsGraph.cpp deleted file mode 100644 index d8ab7b6b211ab8e17a39e279a7c55e306265f518..0000000000000000000000000000000000000000 --- a/lib/kokkos/containers/unit_tests/openmp/TestOpenMP_StaticCrsGraph.cpp +++ /dev/null @@ -1,47 +0,0 @@ - -/* -//@HEADER -// ************************************************************************ -// -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering -// Solutions of Sandia, LLC (NTESS). -// -// Under the terms of Contract DE-NA0003525 with NTESS, -// the U.S. Government retains certain rights in this software. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Christian R. Trott (crtrott@sandia.gov) -// -// ************************************************************************ -//@HEADER -*/ - -#include -#include diff --git a/lib/kokkos/containers/unit_tests/openmp/TestOpenMP_UnorderedMap.cpp b/lib/kokkos/containers/unit_tests/openmp/TestOpenMP_UnorderedMap.cpp deleted file mode 100644 index c3db0c0d888c8c0e439dd16998a44245f388091e..0000000000000000000000000000000000000000 --- a/lib/kokkos/containers/unit_tests/openmp/TestOpenMP_UnorderedMap.cpp +++ /dev/null @@ -1,47 +0,0 @@ - -/* -//@HEADER -// ************************************************************************ -// -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering -// Solutions of Sandia, LLC (NTESS). -// -// Under the terms of Contract DE-NA0003525 with NTESS, -// the U.S. Government retains certain rights in this software. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Christian R. Trott (crtrott@sandia.gov) -// -// ************************************************************************ -//@HEADER -*/ - -#include -#include diff --git a/lib/kokkos/containers/unit_tests/openmp/TestOpenMP_Vector.cpp b/lib/kokkos/containers/unit_tests/openmp/TestOpenMP_Vector.cpp deleted file mode 100644 index 7ac49f24fb3000b6852289311ae8b9e1189f9dce..0000000000000000000000000000000000000000 --- a/lib/kokkos/containers/unit_tests/openmp/TestOpenMP_Vector.cpp +++ /dev/null @@ -1,47 +0,0 @@ - -/* -//@HEADER -// ************************************************************************ -// -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering -// Solutions of Sandia, LLC (NTESS). -// -// Under the terms of Contract DE-NA0003525 with NTESS, -// the U.S. Government retains certain rights in this software. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Christian R. Trott (crtrott@sandia.gov) -// -// ************************************************************************ -//@HEADER -*/ - -#include -#include diff --git a/lib/kokkos/containers/unit_tests/openmp/TestOpenMP_ViewCtorPropEmbeddedDim.cpp b/lib/kokkos/containers/unit_tests/openmp/TestOpenMP_ViewCtorPropEmbeddedDim.cpp deleted file mode 100644 index b9ae5d80ed93666e8d7be610d4763adfebac9290..0000000000000000000000000000000000000000 --- a/lib/kokkos/containers/unit_tests/openmp/TestOpenMP_ViewCtorPropEmbeddedDim.cpp +++ /dev/null @@ -1,47 +0,0 @@ - -/* -//@HEADER -// ************************************************************************ -// -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering -// Solutions of Sandia, LLC (NTESS). -// -// Under the terms of Contract DE-NA0003525 with NTESS, -// the U.S. Government retains certain rights in this software. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Christian R. Trott (crtrott@sandia.gov) -// -// ************************************************************************ -//@HEADER -*/ - -#include -#include diff --git a/lib/kokkos/containers/unit_tests/rocm/TestROCm_BitSet.cpp b/lib/kokkos/containers/unit_tests/rocm/TestROCm_BitSet.cpp deleted file mode 100644 index c72077eb4c7a1bd519eed3b2f0322d99409a7ebf..0000000000000000000000000000000000000000 --- a/lib/kokkos/containers/unit_tests/rocm/TestROCm_BitSet.cpp +++ /dev/null @@ -1,47 +0,0 @@ - -/* -//@HEADER -// ************************************************************************ -// -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering -// Solutions of Sandia, LLC (NTESS). -// -// Under the terms of Contract DE-NA0003525 with NTESS, -// the U.S. Government retains certain rights in this software. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Christian R. Trott (crtrott@sandia.gov) -// -// ************************************************************************ -//@HEADER -*/ - -#include -#include diff --git a/lib/kokkos/containers/unit_tests/rocm/TestROCm_DualView.cpp b/lib/kokkos/containers/unit_tests/rocm/TestROCm_DualView.cpp deleted file mode 100644 index e9820395ba5bdba199e2948ac39956b3ae5c3b33..0000000000000000000000000000000000000000 --- a/lib/kokkos/containers/unit_tests/rocm/TestROCm_DualView.cpp +++ /dev/null @@ -1,47 +0,0 @@ - -/* -//@HEADER -// ************************************************************************ -// -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering -// Solutions of Sandia, LLC (NTESS). -// -// Under the terms of Contract DE-NA0003525 with NTESS, -// the U.S. Government retains certain rights in this software. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Christian R. Trott (crtrott@sandia.gov) -// -// ************************************************************************ -//@HEADER -*/ - -#include -#include diff --git a/lib/kokkos/containers/unit_tests/rocm/TestROCm_DynRankViewAPI_generic.cpp b/lib/kokkos/containers/unit_tests/rocm/TestROCm_DynRankViewAPI_generic.cpp deleted file mode 100644 index 7a3dd65f0efc1eb4ba5b5d7fa0912b6f0d09aee0..0000000000000000000000000000000000000000 --- a/lib/kokkos/containers/unit_tests/rocm/TestROCm_DynRankViewAPI_generic.cpp +++ /dev/null @@ -1,47 +0,0 @@ - -/* -//@HEADER -// ************************************************************************ -// -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering -// Solutions of Sandia, LLC (NTESS). -// -// Under the terms of Contract DE-NA0003525 with NTESS, -// the U.S. Government retains certain rights in this software. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Christian R. Trott (crtrott@sandia.gov) -// -// ************************************************************************ -//@HEADER -*/ - -#include -#include diff --git a/lib/kokkos/containers/unit_tests/rocm/TestROCm_DynRankViewAPI_rank12345.cpp b/lib/kokkos/containers/unit_tests/rocm/TestROCm_DynRankViewAPI_rank12345.cpp deleted file mode 100644 index 3963dd9c9cf8fbffc4a3763f472ca1073e7b9dbc..0000000000000000000000000000000000000000 --- a/lib/kokkos/containers/unit_tests/rocm/TestROCm_DynRankViewAPI_rank12345.cpp +++ /dev/null @@ -1,47 +0,0 @@ - -/* -//@HEADER -// ************************************************************************ -// -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering -// Solutions of Sandia, LLC (NTESS). -// -// Under the terms of Contract DE-NA0003525 with NTESS, -// the U.S. Government retains certain rights in this software. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Christian R. Trott (crtrott@sandia.gov) -// -// ************************************************************************ -//@HEADER -*/ - -#include -#include diff --git a/lib/kokkos/containers/unit_tests/rocm/TestROCm_DynRankViewAPI_rank67.cpp b/lib/kokkos/containers/unit_tests/rocm/TestROCm_DynRankViewAPI_rank67.cpp deleted file mode 100644 index b9a4582622807bb1f52aaf3e6c9302cf372fbb2f..0000000000000000000000000000000000000000 --- a/lib/kokkos/containers/unit_tests/rocm/TestROCm_DynRankViewAPI_rank67.cpp +++ /dev/null @@ -1,47 +0,0 @@ - -/* -//@HEADER -// ************************************************************************ -// -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering -// Solutions of Sandia, LLC (NTESS). -// -// Under the terms of Contract DE-NA0003525 with NTESS, -// the U.S. Government retains certain rights in this software. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Christian R. Trott (crtrott@sandia.gov) -// -// ************************************************************************ -//@HEADER -*/ - -#include -#include diff --git a/lib/kokkos/containers/unit_tests/rocm/TestROCm_DynamicView.cpp b/lib/kokkos/containers/unit_tests/rocm/TestROCm_DynamicView.cpp deleted file mode 100644 index 285ed916c432d499d4b230d9c63600a7f41e803f..0000000000000000000000000000000000000000 --- a/lib/kokkos/containers/unit_tests/rocm/TestROCm_DynamicView.cpp +++ /dev/null @@ -1,47 +0,0 @@ - -/* -//@HEADER -// ************************************************************************ -// -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering -// Solutions of Sandia, LLC (NTESS). -// -// Under the terms of Contract DE-NA0003525 with NTESS, -// the U.S. Government retains certain rights in this software. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Christian R. Trott (crtrott@sandia.gov) -// -// ************************************************************************ -//@HEADER -*/ - -#include -#include diff --git a/lib/kokkos/containers/unit_tests/rocm/TestROCm_ErrorReporter.cpp b/lib/kokkos/containers/unit_tests/rocm/TestROCm_ErrorReporter.cpp deleted file mode 100644 index 2af2f79a16806659b4650313950d00aaa4d684bd..0000000000000000000000000000000000000000 --- a/lib/kokkos/containers/unit_tests/rocm/TestROCm_ErrorReporter.cpp +++ /dev/null @@ -1,47 +0,0 @@ - -/* -//@HEADER -// ************************************************************************ -// -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering -// Solutions of Sandia, LLC (NTESS). -// -// Under the terms of Contract DE-NA0003525 with NTESS, -// the U.S. Government retains certain rights in this software. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Christian R. Trott (crtrott@sandia.gov) -// -// ************************************************************************ -//@HEADER -*/ - -#include -#include diff --git a/lib/kokkos/containers/unit_tests/rocm/TestROCm_ScatterView.cpp b/lib/kokkos/containers/unit_tests/rocm/TestROCm_ScatterView.cpp deleted file mode 100644 index f7000bc99e206e852081488405d21fc24c1d9f04..0000000000000000000000000000000000000000 --- a/lib/kokkos/containers/unit_tests/rocm/TestROCm_ScatterView.cpp +++ /dev/null @@ -1,47 +0,0 @@ - -/* -//@HEADER -// ************************************************************************ -// -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering -// Solutions of Sandia, LLC (NTESS). -// -// Under the terms of Contract DE-NA0003525 with NTESS, -// the U.S. Government retains certain rights in this software. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Christian R. Trott (crtrott@sandia.gov) -// -// ************************************************************************ -//@HEADER -*/ - -#include -#include diff --git a/lib/kokkos/containers/unit_tests/rocm/TestROCm_StaticCrsGraph.cpp b/lib/kokkos/containers/unit_tests/rocm/TestROCm_StaticCrsGraph.cpp deleted file mode 100644 index bb1e04c53647f2457f852f23230d9178ab2b1211..0000000000000000000000000000000000000000 --- a/lib/kokkos/containers/unit_tests/rocm/TestROCm_StaticCrsGraph.cpp +++ /dev/null @@ -1,47 +0,0 @@ - -/* -//@HEADER -// ************************************************************************ -// -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering -// Solutions of Sandia, LLC (NTESS). -// -// Under the terms of Contract DE-NA0003525 with NTESS, -// the U.S. Government retains certain rights in this software. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Christian R. Trott (crtrott@sandia.gov) -// -// ************************************************************************ -//@HEADER -*/ - -#include -#include diff --git a/lib/kokkos/containers/unit_tests/rocm/TestROCm_UnorderedMap.cpp b/lib/kokkos/containers/unit_tests/rocm/TestROCm_UnorderedMap.cpp deleted file mode 100644 index 7b8172fabdcdd04d81a0d9441abe5690ecb256bb..0000000000000000000000000000000000000000 --- a/lib/kokkos/containers/unit_tests/rocm/TestROCm_UnorderedMap.cpp +++ /dev/null @@ -1,47 +0,0 @@ - -/* -//@HEADER -// ************************************************************************ -// -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering -// Solutions of Sandia, LLC (NTESS). -// -// Under the terms of Contract DE-NA0003525 with NTESS, -// the U.S. Government retains certain rights in this software. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Christian R. Trott (crtrott@sandia.gov) -// -// ************************************************************************ -//@HEADER -*/ - -#include -#include diff --git a/lib/kokkos/containers/unit_tests/rocm/TestROCm_Vector.cpp b/lib/kokkos/containers/unit_tests/rocm/TestROCm_Vector.cpp deleted file mode 100644 index 1759797487c45f0c4ccb8b48e9140b4034bb4fdc..0000000000000000000000000000000000000000 --- a/lib/kokkos/containers/unit_tests/rocm/TestROCm_Vector.cpp +++ /dev/null @@ -1,47 +0,0 @@ - -/* -//@HEADER -// ************************************************************************ -// -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering -// Solutions of Sandia, LLC (NTESS). -// -// Under the terms of Contract DE-NA0003525 with NTESS, -// the U.S. Government retains certain rights in this software. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Christian R. Trott (crtrott@sandia.gov) -// -// ************************************************************************ -//@HEADER -*/ - -#include -#include diff --git a/lib/kokkos/containers/unit_tests/rocm/TestROCm_ViewCtorPropEmbeddedDim.cpp b/lib/kokkos/containers/unit_tests/rocm/TestROCm_ViewCtorPropEmbeddedDim.cpp deleted file mode 100644 index e95680445b5d75864367c1cf0c4268ac50907c15..0000000000000000000000000000000000000000 --- a/lib/kokkos/containers/unit_tests/rocm/TestROCm_ViewCtorPropEmbeddedDim.cpp +++ /dev/null @@ -1,47 +0,0 @@ - -/* -//@HEADER -// ************************************************************************ -// -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering -// Solutions of Sandia, LLC (NTESS). -// -// Under the terms of Contract DE-NA0003525 with NTESS, -// the U.S. Government retains certain rights in this software. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Christian R. Trott (crtrott@sandia.gov) -// -// ************************************************************************ -//@HEADER -*/ - -#include -#include diff --git a/lib/kokkos/containers/unit_tests/serial/TestSerial_DynRankViewAPI_generic.cpp b/lib/kokkos/containers/unit_tests/serial/TestSerial_DynRankViewAPI_generic.cpp deleted file mode 100644 index e8f577c6ac3d5445027298a208b823b66ca81576..0000000000000000000000000000000000000000 --- a/lib/kokkos/containers/unit_tests/serial/TestSerial_DynRankViewAPI_generic.cpp +++ /dev/null @@ -1,47 +0,0 @@ - -/* -//@HEADER -// ************************************************************************ -// -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering -// Solutions of Sandia, LLC (NTESS). -// -// Under the terms of Contract DE-NA0003525 with NTESS, -// the U.S. Government retains certain rights in this software. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Christian R. Trott (crtrott@sandia.gov) -// -// ************************************************************************ -//@HEADER -*/ - -#include -#include diff --git a/lib/kokkos/containers/unit_tests/serial/TestSerial_DynRankViewAPI_rank12345.cpp b/lib/kokkos/containers/unit_tests/serial/TestSerial_DynRankViewAPI_rank12345.cpp deleted file mode 100644 index 7db8983c1b1332840d76aa4cfc748d9379a4e469..0000000000000000000000000000000000000000 --- a/lib/kokkos/containers/unit_tests/serial/TestSerial_DynRankViewAPI_rank12345.cpp +++ /dev/null @@ -1,47 +0,0 @@ - -/* -//@HEADER -// ************************************************************************ -// -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering -// Solutions of Sandia, LLC (NTESS). -// -// Under the terms of Contract DE-NA0003525 with NTESS, -// the U.S. Government retains certain rights in this software. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Christian R. Trott (crtrott@sandia.gov) -// -// ************************************************************************ -//@HEADER -*/ - -#include -#include diff --git a/lib/kokkos/containers/unit_tests/serial/TestSerial_DynRankViewAPI_rank67.cpp b/lib/kokkos/containers/unit_tests/serial/TestSerial_DynRankViewAPI_rank67.cpp deleted file mode 100644 index a3a745efb5d1faa9fcd7e31c0014115290368249..0000000000000000000000000000000000000000 --- a/lib/kokkos/containers/unit_tests/serial/TestSerial_DynRankViewAPI_rank67.cpp +++ /dev/null @@ -1,47 +0,0 @@ - -/* -//@HEADER -// ************************************************************************ -// -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering -// Solutions of Sandia, LLC (NTESS). -// -// Under the terms of Contract DE-NA0003525 with NTESS, -// the U.S. Government retains certain rights in this software. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Christian R. Trott (crtrott@sandia.gov) -// -// ************************************************************************ -//@HEADER -*/ - -#include -#include diff --git a/lib/kokkos/containers/unit_tests/serial/TestSerial_DynamicView.cpp b/lib/kokkos/containers/unit_tests/serial/TestSerial_DynamicView.cpp deleted file mode 100644 index 6624e3aa07f1fe0d790b9f517db8b3bd85fbcb40..0000000000000000000000000000000000000000 --- a/lib/kokkos/containers/unit_tests/serial/TestSerial_DynamicView.cpp +++ /dev/null @@ -1,47 +0,0 @@ - -/* -//@HEADER -// ************************************************************************ -// -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering -// Solutions of Sandia, LLC (NTESS). -// -// Under the terms of Contract DE-NA0003525 with NTESS, -// the U.S. Government retains certain rights in this software. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Christian R. Trott (crtrott@sandia.gov) -// -// ************************************************************************ -//@HEADER -*/ - -#include -#include diff --git a/lib/kokkos/containers/unit_tests/serial/TestSerial_ErrorReporter.cpp b/lib/kokkos/containers/unit_tests/serial/TestSerial_ErrorReporter.cpp deleted file mode 100644 index 280302275fe1bd6278ee7cbb9e7403af5642bbda..0000000000000000000000000000000000000000 --- a/lib/kokkos/containers/unit_tests/serial/TestSerial_ErrorReporter.cpp +++ /dev/null @@ -1,47 +0,0 @@ - -/* -//@HEADER -// ************************************************************************ -// -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering -// Solutions of Sandia, LLC (NTESS). -// -// Under the terms of Contract DE-NA0003525 with NTESS, -// the U.S. Government retains certain rights in this software. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Christian R. Trott (crtrott@sandia.gov) -// -// ************************************************************************ -//@HEADER -*/ - -#include -#include diff --git a/lib/kokkos/containers/unit_tests/serial/TestSerial_OffsetView.cpp b/lib/kokkos/containers/unit_tests/serial/TestSerial_OffsetView.cpp deleted file mode 100644 index 5f8caf7c3f09af0022e041c7255ba970ca261634..0000000000000000000000000000000000000000 --- a/lib/kokkos/containers/unit_tests/serial/TestSerial_OffsetView.cpp +++ /dev/null @@ -1,46 +0,0 @@ -/* -//@HEADER -// ************************************************************************ -// -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering -// Solutions of Sandia, LLC (NTESS). -// -// Under the terms of Contract DE-NA0003525 with NTESS, -// the U.S. Government retains certain rights in this software. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Christian R. Trott (crtrott@sandia.gov) -// -// ************************************************************************ -//@HEADER -*/ - -#include -#include diff --git a/lib/kokkos/containers/unit_tests/serial/TestSerial_ScatterView.cpp b/lib/kokkos/containers/unit_tests/serial/TestSerial_ScatterView.cpp deleted file mode 100644 index 3f102e5cbc9d301664f9ca102b1db824c3540a7a..0000000000000000000000000000000000000000 --- a/lib/kokkos/containers/unit_tests/serial/TestSerial_ScatterView.cpp +++ /dev/null @@ -1,47 +0,0 @@ - -/* -//@HEADER -// ************************************************************************ -// -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering -// Solutions of Sandia, LLC (NTESS). -// -// Under the terms of Contract DE-NA0003525 with NTESS, -// the U.S. Government retains certain rights in this software. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Christian R. Trott (crtrott@sandia.gov) -// -// ************************************************************************ -//@HEADER -*/ - -#include -#include diff --git a/lib/kokkos/containers/unit_tests/serial/TestSerial_StaticCrsGraph.cpp b/lib/kokkos/containers/unit_tests/serial/TestSerial_StaticCrsGraph.cpp deleted file mode 100644 index 64f09e76e5899dc60541a1ea7ddc47a55c1c7bf4..0000000000000000000000000000000000000000 --- a/lib/kokkos/containers/unit_tests/serial/TestSerial_StaticCrsGraph.cpp +++ /dev/null @@ -1,47 +0,0 @@ - -/* -//@HEADER -// ************************************************************************ -// -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering -// Solutions of Sandia, LLC (NTESS). -// -// Under the terms of Contract DE-NA0003525 with NTESS, -// the U.S. Government retains certain rights in this software. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Christian R. Trott (crtrott@sandia.gov) -// -// ************************************************************************ -//@HEADER -*/ - -#include -#include diff --git a/lib/kokkos/containers/unit_tests/serial/TestSerial_UnorderedMap.cpp b/lib/kokkos/containers/unit_tests/serial/TestSerial_UnorderedMap.cpp deleted file mode 100644 index a72be8e2fc25febb9afa102ed1cf2c5cf72d711e..0000000000000000000000000000000000000000 --- a/lib/kokkos/containers/unit_tests/serial/TestSerial_UnorderedMap.cpp +++ /dev/null @@ -1,47 +0,0 @@ - -/* -//@HEADER -// ************************************************************************ -// -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering -// Solutions of Sandia, LLC (NTESS). -// -// Under the terms of Contract DE-NA0003525 with NTESS, -// the U.S. Government retains certain rights in this software. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Christian R. Trott (crtrott@sandia.gov) -// -// ************************************************************************ -//@HEADER -*/ - -#include -#include diff --git a/lib/kokkos/containers/unit_tests/serial/TestSerial_Vector.cpp b/lib/kokkos/containers/unit_tests/serial/TestSerial_Vector.cpp deleted file mode 100644 index 3826dab1d7053a12b821e5034fe52d8d52280d37..0000000000000000000000000000000000000000 --- a/lib/kokkos/containers/unit_tests/serial/TestSerial_Vector.cpp +++ /dev/null @@ -1,47 +0,0 @@ - -/* -//@HEADER -// ************************************************************************ -// -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering -// Solutions of Sandia, LLC (NTESS). -// -// Under the terms of Contract DE-NA0003525 with NTESS, -// the U.S. Government retains certain rights in this software. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Christian R. Trott (crtrott@sandia.gov) -// -// ************************************************************************ -//@HEADER -*/ - -#include -#include diff --git a/lib/kokkos/containers/unit_tests/serial/TestSerial_ViewCtorPropEmbeddedDim.cpp b/lib/kokkos/containers/unit_tests/serial/TestSerial_ViewCtorPropEmbeddedDim.cpp deleted file mode 100644 index 1251808bed7e610aa7eddb4e36b6973edf657712..0000000000000000000000000000000000000000 --- a/lib/kokkos/containers/unit_tests/serial/TestSerial_ViewCtorPropEmbeddedDim.cpp +++ /dev/null @@ -1,47 +0,0 @@ - -/* -//@HEADER -// ************************************************************************ -// -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering -// Solutions of Sandia, LLC (NTESS). -// -// Under the terms of Contract DE-NA0003525 with NTESS, -// the U.S. Government retains certain rights in this software. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Christian R. Trott (crtrott@sandia.gov) -// -// ************************************************************************ -//@HEADER -*/ - -#include -#include diff --git a/lib/kokkos/containers/unit_tests/threads/TestThreads_DynRankViewAPI_generic.cpp b/lib/kokkos/containers/unit_tests/threads/TestThreads_DynRankViewAPI_generic.cpp deleted file mode 100644 index b015683bb9d9ac0f97c87a153b4260d9d86b351a..0000000000000000000000000000000000000000 --- a/lib/kokkos/containers/unit_tests/threads/TestThreads_DynRankViewAPI_generic.cpp +++ /dev/null @@ -1,47 +0,0 @@ - -/* -//@HEADER -// ************************************************************************ -// -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering -// Solutions of Sandia, LLC (NTESS). -// -// Under the terms of Contract DE-NA0003525 with NTESS, -// the U.S. Government retains certain rights in this software. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Christian R. Trott (crtrott@sandia.gov) -// -// ************************************************************************ -//@HEADER -*/ - -#include -#include diff --git a/lib/kokkos/containers/unit_tests/threads/TestThreads_DynRankViewAPI_rank12345.cpp b/lib/kokkos/containers/unit_tests/threads/TestThreads_DynRankViewAPI_rank12345.cpp deleted file mode 100644 index dea56c408bd093d75895f8e32d76fa0e5a0ca672..0000000000000000000000000000000000000000 --- a/lib/kokkos/containers/unit_tests/threads/TestThreads_DynRankViewAPI_rank12345.cpp +++ /dev/null @@ -1,47 +0,0 @@ - -/* -//@HEADER -// ************************************************************************ -// -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering -// Solutions of Sandia, LLC (NTESS). -// -// Under the terms of Contract DE-NA0003525 with NTESS, -// the U.S. Government retains certain rights in this software. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Christian R. Trott (crtrott@sandia.gov) -// -// ************************************************************************ -//@HEADER -*/ - -#include -#include diff --git a/lib/kokkos/containers/unit_tests/threads/TestThreads_DynRankViewAPI_rank67.cpp b/lib/kokkos/containers/unit_tests/threads/TestThreads_DynRankViewAPI_rank67.cpp deleted file mode 100644 index 17a289b506538dcf2249f0f85a96104b40f1b824..0000000000000000000000000000000000000000 --- a/lib/kokkos/containers/unit_tests/threads/TestThreads_DynRankViewAPI_rank67.cpp +++ /dev/null @@ -1,47 +0,0 @@ - -/* -//@HEADER -// ************************************************************************ -// -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering -// Solutions of Sandia, LLC (NTESS). -// -// Under the terms of Contract DE-NA0003525 with NTESS, -// the U.S. Government retains certain rights in this software. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Christian R. Trott (crtrott@sandia.gov) -// -// ************************************************************************ -//@HEADER -*/ - -#include -#include diff --git a/lib/kokkos/containers/unit_tests/threads/TestThreads_DynamicView.cpp b/lib/kokkos/containers/unit_tests/threads/TestThreads_DynamicView.cpp deleted file mode 100644 index 499321dbbea92f52e12a0a21321425ef5f5d423e..0000000000000000000000000000000000000000 --- a/lib/kokkos/containers/unit_tests/threads/TestThreads_DynamicView.cpp +++ /dev/null @@ -1,47 +0,0 @@ - -/* -//@HEADER -// ************************************************************************ -// -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering -// Solutions of Sandia, LLC (NTESS). -// -// Under the terms of Contract DE-NA0003525 with NTESS, -// the U.S. Government retains certain rights in this software. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Christian R. Trott (crtrott@sandia.gov) -// -// ************************************************************************ -//@HEADER -*/ - -#include -#include diff --git a/lib/kokkos/containers/unit_tests/threads/TestThreads_ErrorReporter.cpp b/lib/kokkos/containers/unit_tests/threads/TestThreads_ErrorReporter.cpp deleted file mode 100644 index 513fdc4af62d92d83e8f21b74e5e300d33d2d1a8..0000000000000000000000000000000000000000 --- a/lib/kokkos/containers/unit_tests/threads/TestThreads_ErrorReporter.cpp +++ /dev/null @@ -1,47 +0,0 @@ - -/* -//@HEADER -// ************************************************************************ -// -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering -// Solutions of Sandia, LLC (NTESS). -// -// Under the terms of Contract DE-NA0003525 with NTESS, -// the U.S. Government retains certain rights in this software. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Christian R. Trott (crtrott@sandia.gov) -// -// ************************************************************************ -//@HEADER -*/ - -#include -#include diff --git a/lib/kokkos/containers/unit_tests/threads/TestThreads_OffsetView.cpp b/lib/kokkos/containers/unit_tests/threads/TestThreads_OffsetView.cpp deleted file mode 100644 index 717967b2ef3d8bdafe6c92efdc3b556811a96a47..0000000000000000000000000000000000000000 --- a/lib/kokkos/containers/unit_tests/threads/TestThreads_OffsetView.cpp +++ /dev/null @@ -1,47 +0,0 @@ - -/* -//@HEADER -// ************************************************************************ -// -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering -// Solutions of Sandia, LLC (NTESS). -// -// Under the terms of Contract DE-NA0003525 with NTESS, -// the U.S. Government retains certain rights in this software. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Christian R. Trott (crtrott@sandia.gov) -// -// ************************************************************************ -//@HEADER -*/ - -#include -#include diff --git a/lib/kokkos/containers/unit_tests/threads/TestThreads_ScatterView.cpp b/lib/kokkos/containers/unit_tests/threads/TestThreads_ScatterView.cpp deleted file mode 100644 index fbb37606ea01e358b62accc2349a7e7268179b99..0000000000000000000000000000000000000000 --- a/lib/kokkos/containers/unit_tests/threads/TestThreads_ScatterView.cpp +++ /dev/null @@ -1,47 +0,0 @@ - -/* -//@HEADER -// ************************************************************************ -// -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering -// Solutions of Sandia, LLC (NTESS). -// -// Under the terms of Contract DE-NA0003525 with NTESS, -// the U.S. Government retains certain rights in this software. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Christian R. Trott (crtrott@sandia.gov) -// -// ************************************************************************ -//@HEADER -*/ - -#include -#include diff --git a/lib/kokkos/containers/unit_tests/threads/TestThreads_StaticCrsGraph.cpp b/lib/kokkos/containers/unit_tests/threads/TestThreads_StaticCrsGraph.cpp deleted file mode 100644 index 29117c4ef6546190a130947094fe6918bbfc3f7c..0000000000000000000000000000000000000000 --- a/lib/kokkos/containers/unit_tests/threads/TestThreads_StaticCrsGraph.cpp +++ /dev/null @@ -1,47 +0,0 @@ - -/* -//@HEADER -// ************************************************************************ -// -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering -// Solutions of Sandia, LLC (NTESS). -// -// Under the terms of Contract DE-NA0003525 with NTESS, -// the U.S. Government retains certain rights in this software. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Christian R. Trott (crtrott@sandia.gov) -// -// ************************************************************************ -//@HEADER -*/ - -#include -#include diff --git a/lib/kokkos/containers/unit_tests/threads/TestThreads_UnorderedMap.cpp b/lib/kokkos/containers/unit_tests/threads/TestThreads_UnorderedMap.cpp deleted file mode 100644 index 9a06288de46c989f992cf07eda485a29fd4f6d8a..0000000000000000000000000000000000000000 --- a/lib/kokkos/containers/unit_tests/threads/TestThreads_UnorderedMap.cpp +++ /dev/null @@ -1,47 +0,0 @@ - -/* -//@HEADER -// ************************************************************************ -// -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering -// Solutions of Sandia, LLC (NTESS). -// -// Under the terms of Contract DE-NA0003525 with NTESS, -// the U.S. Government retains certain rights in this software. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Christian R. Trott (crtrott@sandia.gov) -// -// ************************************************************************ -//@HEADER -*/ - -#include -#include diff --git a/lib/kokkos/containers/unit_tests/threads/TestThreads_Vector.cpp b/lib/kokkos/containers/unit_tests/threads/TestThreads_Vector.cpp deleted file mode 100644 index 33e8b26c8ef375c61bc26ef2d961cb3494aeaa2b..0000000000000000000000000000000000000000 --- a/lib/kokkos/containers/unit_tests/threads/TestThreads_Vector.cpp +++ /dev/null @@ -1,47 +0,0 @@ - -/* -//@HEADER -// ************************************************************************ -// -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering -// Solutions of Sandia, LLC (NTESS). -// -// Under the terms of Contract DE-NA0003525 with NTESS, -// the U.S. Government retains certain rights in this software. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Christian R. Trott (crtrott@sandia.gov) -// -// ************************************************************************ -//@HEADER -*/ - -#include -#include diff --git a/lib/kokkos/containers/unit_tests/threads/TestThreads_ViewCtorPropEmbeddedDim.cpp b/lib/kokkos/containers/unit_tests/threads/TestThreads_ViewCtorPropEmbeddedDim.cpp deleted file mode 100644 index 567b2241953b5cbb956a6d04ad8b7acea93ff8cf..0000000000000000000000000000000000000000 --- a/lib/kokkos/containers/unit_tests/threads/TestThreads_ViewCtorPropEmbeddedDim.cpp +++ /dev/null @@ -1,47 +0,0 @@ - -/* -//@HEADER -// ************************************************************************ -// -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering -// Solutions of Sandia, LLC (NTESS). -// -// Under the terms of Contract DE-NA0003525 with NTESS, -// the U.S. Government retains certain rights in this software. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Christian R. Trott (crtrott@sandia.gov) -// -// ************************************************************************ -//@HEADER -*/ - -#include -#include diff --git a/lib/kokkos/core/cmake/Dependencies.cmake b/lib/kokkos/core/cmake/Dependencies.cmake index 9ad7660bdf675f00758ddbaf7ef5a0555946d5cc..cc901a4ede0c6b17fbb89bfa9edfaf6544d7b269 100644 --- a/lib/kokkos/core/cmake/Dependencies.cmake +++ b/lib/kokkos/core/cmake/Dependencies.cmake @@ -1,5 +1,5 @@ TRIBITS_PACKAGE_DEFINE_DEPENDENCIES( - LIB_OPTIONAL_TPLS Pthread CUDA HWLOC QTHREADS DLlib HPX + LIB_OPTIONAL_TPLS Pthread CUDA HWLOC DLlib HPX TEST_OPTIONAL_TPLS CUSPARSE ) diff --git a/lib/kokkos/core/cmake/KokkosCore_config.h.in b/lib/kokkos/core/cmake/KokkosCore_config.h.in index f430c2b5f6512ee2e389ec61c322fefaffbfc7fc..095c869a32d1997a902898b8e5861299fc0a9e30 100644 --- a/lib/kokkos/core/cmake/KokkosCore_config.h.in +++ b/lib/kokkos/core/cmake/KokkosCore_config.h.in @@ -12,6 +12,7 @@ #endif #cmakedefine KOKKOS_ENABLE_CUDA +#cmakedefine KOKKOS_ENABLE_HIP #cmakedefine KOKKOS_ENABLE_OPENMP #cmakedefine KOKKOS_ENABLE_THREADS #cmakedefine KOKKOS_ENABLE_SERIAL @@ -63,6 +64,10 @@ #cmakedefine KOKKOS_ENABLE_ISA_POWERPCLE #endif +#ifdef KOKKOS_ENABLE_HIP +#cmakedefine KOKKOS_ENABLE_HIP_RELOCATABLE_DEVICE_CODE +#endif + #cmakedefine KOKKOS_ARCH_ARMV80 1 #cmakedefine KOKKOS_ARCH_ARMV81 1 #cmakedefine KOKKOS_ARCH_ARMV8_THUNDERX 1 diff --git a/lib/kokkos/core/perf_test/CMakeLists.txt b/lib/kokkos/core/perf_test/CMakeLists.txt index 79567835ee0446347acbd35b7f182cae58f03cb5..ca695e2700dd98f8838b042d6cea49854be637ef 100644 --- a/lib/kokkos/core/perf_test/CMakeLists.txt +++ b/lib/kokkos/core/perf_test/CMakeLists.txt @@ -48,6 +48,14 @@ SET(SOURCES PerfTest_ViewResize_8.cpp ) +IF(Kokkos_ENABLE_HIP) +# FIXME requires TeamPolicy + LIST(REMOVE_ITEM SOURCES + PerfTest_CustomReduction.cpp + PerfTest_ExecSpacePartitioning.cpp + ) +ENDIF() + # Per #374, we always want to build this test, but we only want to run # it as a PERFORMANCE test. That's why we separate building the test # from running the test. @@ -58,11 +66,14 @@ KOKKOS_INCLUDE_DIRECTORIES("${CMAKE_CURRENT_SOURCE_DIR}/../../algorithms/src") KOKKOS_INCLUDE_DIRECTORIES(${CMAKE_CURRENT_BINARY_DIR}) KOKKOS_INCLUDE_DIRECTORIES(REQUIRED_DURING_INSTALLATION_TESTING ${CMAKE_CURRENT_SOURCE_DIR}) -KOKKOS_ADD_EXECUTABLE_AND_TEST( - PerfTestExec - SOURCES ${SOURCES} - CATEGORIES PERFORMANCE -) +# This test currently times out for MSVC +IF(NOT KOKKOS_CXX_COMPILER_ID STREQUAL "MSVC") + KOKKOS_ADD_EXECUTABLE_AND_TEST( + PerfTestExec + SOURCES ${SOURCES} + CATEGORIES PERFORMANCE + ) +ENDIF() KOKKOS_ADD_EXECUTABLE_AND_TEST( PerformanceTest_TaskDag diff --git a/lib/kokkos/core/perf_test/PerfTestBlasKernels.hpp b/lib/kokkos/core/perf_test/PerfTestBlasKernels.hpp index a5a376565d812b69d48b217bd528c4fe769d448f..2717b133bd6915f8a4725f0e33a8add69b604324 100644 --- a/lib/kokkos/core/perf_test/PerfTestBlasKernels.hpp +++ b/lib/kokkos/core/perf_test/PerfTestBlasKernels.hpp @@ -49,64 +49,9 @@ namespace Kokkos { -template -struct Dot; - -template -struct DotSingle; - -template -struct Scale; - -template -struct AXPBY; - -/** \brief Y = alpha * X + beta * Y */ -template -void axpby(const ConstScalarType& alpha, const ConstVectorType& X, - const ConstScalarType& beta, const VectorType& Y) { - typedef AXPBY functor; - - parallel_for(Y.extent(0), functor(alpha, X, beta, Y)); -} - -/** \brief Y *= alpha */ -template -void scale(const ConstScalarType& alpha, const VectorType& Y) { - typedef Scale functor; - - parallel_for(Y.extent(0), functor(alpha, Y)); -} - -template -void dot(const ConstVectorType& X, const ConstVectorType& Y, - const Finalize& finalize) { - typedef Dot functor; - - parallel_reduce(X.extent(0), functor(X, Y), finalize); -} - -template -void dot(const ConstVectorType& X, const Finalize& finalize) { - typedef DotSingle functor; - - parallel_reduce(X.extent(0), functor(X), finalize); -} - -} /* namespace Kokkos */ - -//---------------------------------------------------------------------------- -//---------------------------------------------------------------------------- - -namespace Kokkos { - -template +template struct Dot { - typedef typename Device::execution_space execution_space; + typedef typename Type::execution_space execution_space; static_assert(static_cast(Type::Rank) == static_cast(1), "Dot static_assert Fail: Rank != 1"); @@ -136,9 +81,9 @@ struct Dot { static void init(value_type& update) { update = 0; } }; -template +template struct DotSingle { - typedef typename Device::execution_space execution_space; + typedef typename Type::execution_space execution_space; static_assert(static_cast(Type::Rank) == static_cast(1), "DotSingle static_assert Fail: Rank != 1"); @@ -169,9 +114,9 @@ struct DotSingle { static void init(value_type& update) { update = 0; } }; -template +template struct Scale { - typedef typename Device::execution_space execution_space; + typedef typename VectorType::execution_space execution_space; static_assert(static_cast(ScalarType::Rank) == static_cast(0), @@ -196,10 +141,9 @@ struct Scale { void operator()(int i) const { Y[i] *= alpha(); } }; -template +template struct AXPBY { - typedef typename Device::execution_space execution_space; + typedef typename VectorType::execution_space execution_space; static_assert(static_cast(ScalarType::Rank) == static_cast(0), @@ -233,4 +177,42 @@ struct AXPBY { } /* namespace Kokkos */ +//---------------------------------------------------------------------------- +//---------------------------------------------------------------------------- + +namespace Kokkos { +/** \brief Y = alpha * X + beta * Y */ +template +void axpby(const ConstScalarType& alpha, const ConstVectorType& X, + const ConstScalarType& beta, const VectorType& Y) { + typedef AXPBY functor; + + parallel_for(Y.extent(0), functor(alpha, X, beta, Y)); +} + +/** \brief Y *= alpha */ +template +void scale(const ConstScalarType& alpha, const VectorType& Y) { + typedef Scale functor; + + parallel_for(Y.extent(0), functor(alpha, Y)); +} + +template +void dot(const ConstVectorType& X, const ConstVectorType& Y, + const Finalize& finalize) { + typedef Dot functor; + + parallel_reduce(X.extent(0), functor(X, Y), finalize); +} + +template +void dot(const ConstVectorType& X, const Finalize& finalize) { + typedef DotSingle functor; + + parallel_reduce(X.extent(0), functor(X), finalize); +} + +} /* namespace Kokkos */ + #endif /* #ifndef KOKKOS_BLAS_KERNELS_HPP */ diff --git a/lib/kokkos/core/perf_test/PerfTestGramSchmidt.cpp b/lib/kokkos/core/perf_test/PerfTestGramSchmidt.cpp index 5e85163acfce8a648dca4732a3194af821d4dfb5..0916b230ecb65a50247fee3b31d5bb954dda247f 100644 --- a/lib/kokkos/core/perf_test/PerfTestGramSchmidt.cpp +++ b/lib/kokkos/core/perf_test/PerfTestGramSchmidt.cpp @@ -69,7 +69,10 @@ struct InvNorm2 : public Kokkos::DotSingle { KOKKOS_INLINE_FUNCTION void final(value_type& result) const { - result = std::sqrt(result); +#ifndef KOKKOS_ENABLE_HIP // FIXME_HIP + using std::sqrt; +#endif + result = sqrt(result); Rjj() = result; inv() = (0 < result) ? 1.0 / result : 0; } diff --git a/lib/kokkos/core/perf_test/PerfTestMain.cpp b/lib/kokkos/core/perf_test/PerfTestMain.cpp index 8cd015fbe85ccddbddbc1f3f9afc162424071ea8..8f4d48d57bf3f2c21ed78054a22abc6c4694bdcb 100644 --- a/lib/kokkos/core/perf_test/PerfTestMain.cpp +++ b/lib/kokkos/core/perf_test/PerfTestMain.cpp @@ -54,13 +54,13 @@ int command_line_num_args(int n = 0) { return n_args; } -const char* command_line_arg(int k, char** input_args = NULL) { +const char* command_line_arg(int k, char** input_args = nullptr) { static char** args; - if (input_args != NULL) args = input_args; + if (input_args != nullptr) args = input_args; if (command_line_num_args() > k) return args[k]; else - return NULL; + return nullptr; } } // namespace Test diff --git a/lib/kokkos/core/perf_test/PerfTest_Category.hpp b/lib/kokkos/core/perf_test/PerfTest_Category.hpp index c2cff22502096a670e863c2c1402c5e2fe20a1c8..0f24490bfeb77df3e86b4af14e9dcfdf5680efbb 100644 --- a/lib/kokkos/core/perf_test/PerfTest_Category.hpp +++ b/lib/kokkos/core/perf_test/PerfTest_Category.hpp @@ -50,7 +50,7 @@ namespace Test { extern int command_line_num_args(int n = 0); -extern const char* command_line_arg(int k, char** input_args = NULL); +extern const char* command_line_arg(int k, char** input_args = nullptr); } // namespace Test diff --git a/lib/kokkos/core/perf_test/PerfTest_CustomReduction.cpp b/lib/kokkos/core/perf_test/PerfTest_CustomReduction.cpp index d06851ec9b3cc553bb703d637782dbd68a1723da..75ca4a0d5a461f823edbd2b52a932902acfed1ea 100644 --- a/lib/kokkos/core/perf_test/PerfTest_CustomReduction.cpp +++ b/lib/kokkos/core/perf_test/PerfTest_CustomReduction.cpp @@ -76,8 +76,8 @@ void custom_reduction_test(int N, int R, int num_trials) { Kokkos::ThreadVectorRange(team, 32), [&](const int& k, Scalar& max_) { const Scalar val = a((i * 32 + j) * 32 + k); - if (val > lmax) lmax = val; - if ((k == 11) && (j == 17) && (i == 2)) lmax = 11.5; + if (val > max_) max_ = val; + if ((k == 11) && (j == 17) && (i == 2)) max_ = 11.5; }, Kokkos::Max(t_max)); if (t_max > thread_max) thread_max = t_max; @@ -106,8 +106,8 @@ void custom_reduction_test(int N, int R, int num_trials) { Kokkos::ThreadVectorRange(team, 32), [&](const int& k, Scalar& max_) { const Scalar val = a((i * 32 + j) * 32 + k); - if (val > lmax) lmax = val; - if ((k == 11) && (j == 17) && (i == 2)) lmax = 11.5; + if (val > max_) max_ = val; + if ((k == 11) && (j == 17) && (i == 2)) max_ = 11.5; }, Kokkos::Max(t_max)); if (t_max > thread_max) thread_max = t_max; diff --git a/lib/kokkos/core/src/CMakeLists.txt b/lib/kokkos/core/src/CMakeLists.txt index eb058a982e199c3244e5640b61a95df5f61dd6c3..5b91b30787ae968b3cb05fa9a0ccee600023d0c3 100644 --- a/lib/kokkos/core/src/CMakeLists.txt +++ b/lib/kokkos/core/src/CMakeLists.txt @@ -35,6 +35,10 @@ IF (KOKKOS_ENABLE_OPENMP) ENDIF() ENDIF() +IF (KOKKOS_ENABLE_OPENMPTARGET) + APPEND_GLOB(KOKKOS_CORE_SRCS ${CMAKE_CURRENT_SOURCE_DIR}/OpenMPTarget/*.cpp) +ENDIF() + IF (KOKKOS_ENABLE_PTHREAD) APPEND_GLOB(KOKKOS_CORE_SRCS ${CMAKE_CURRENT_SOURCE_DIR}/Threads/*.cpp) IF (KOKKOS_ENABLE_ETI) @@ -42,6 +46,10 @@ IF (KOKKOS_ENABLE_PTHREAD) ENDIF() ENDIF() +IF (KOKKOS_ENABLE_HIP) + APPEND_GLOB(KOKKOS_CORE_SRCS ${CMAKE_CURRENT_SOURCE_DIR}/HIP/*.cpp) +ENDIF() + IF (KOKKOS_ENABLE_HPX) APPEND_GLOB(KOKKOS_CORE_SRCS ${CMAKE_CURRENT_SOURCE_DIR}/HPX/*.cpp) ENDIF() diff --git a/lib/kokkos/core/src/Cuda/Kokkos_CudaSpace.cpp b/lib/kokkos/core/src/Cuda/Kokkos_CudaSpace.cpp index 24be022d24c7f494c30e2f1f3a002f725e74314e..e11961d763a40821e21ae865aa3c21fd7123526a 100644 --- a/lib/kokkos/core/src/Cuda/Kokkos_CudaSpace.cpp +++ b/lib/kokkos/core/src/Cuda/Kokkos_CudaSpace.cpp @@ -147,7 +147,7 @@ void CudaSpace::access_error(const void *const) { /*--------------------------------------------------------------------------*/ bool CudaUVMSpace::available() { -#if defined(CUDA_VERSION) && (6000 <= CUDA_VERSION) && !defined(__APPLE__) +#if defined(CUDA_VERSION) && !defined(__APPLE__) enum { UVM_available = true }; #else enum { UVM_available = false }; @@ -219,19 +219,10 @@ void *CudaSpace::allocate(const size_t arg_alloc_size) const { void *CudaUVMSpace::allocate(const size_t arg_alloc_size) const { void *ptr = nullptr; - enum { max_uvm_allocations = 65536 }; - Cuda::impl_static_fence(); if (arg_alloc_size > 0) { Kokkos::Impl::num_uvm_allocations++; - if (Kokkos::Impl::num_uvm_allocations.load() > max_uvm_allocations) { - throw Experimental::CudaRawMemoryAllocationFailure( - arg_alloc_size, 1, - Experimental::RawMemoryAllocationFailure::FailureMode:: - MaximumCudaUVMAllocationsExceeded); - } - auto error_code = cudaMallocManaged(&ptr, arg_alloc_size, cudaMemAttachGlobal); @@ -360,7 +351,8 @@ SharedAllocationRecord::attach_texture_object( resDesc.res.linear.sizeInBytes = alloc_size; resDesc.res.linear.devPtr = alloc_ptr; - CUDA_SAFE_CALL(cudaCreateTextureObject(&tex_obj, &resDesc, &texDesc, NULL)); + CUDA_SAFE_CALL( + cudaCreateTextureObject(&tex_obj, &resDesc, &texDesc, nullptr)); return tex_obj; } @@ -797,6 +789,8 @@ SharedAllocationRecord // Iterate records to print orphaned memory ... void SharedAllocationRecord::print_records( std::ostream &s, const Kokkos::CudaSpace &, bool detail) { + (void)s; + (void)detail; #ifdef KOKKOS_DEBUG SharedAllocationRecord *r = &s_root_record; @@ -869,6 +863,8 @@ void SharedAllocationRecord::print_records( void SharedAllocationRecord::print_records( std::ostream &s, const Kokkos::CudaUVMSpace &, bool detail) { + (void)s; + (void)detail; #ifdef KOKKOS_DEBUG SharedAllocationRecord::print_host_accessible_records( s, "CudaUVM", &s_root_record, detail); @@ -881,6 +877,8 @@ void SharedAllocationRecord::print_records( void SharedAllocationRecord::print_records( std::ostream &s, const Kokkos::CudaHostPinnedSpace &, bool detail) { + (void)s; + (void)detail; #ifdef KOKKOS_DEBUG SharedAllocationRecord::print_host_accessible_records( s, "CudaHostPinned", &s_root_record, detail); @@ -895,7 +893,7 @@ void SharedAllocationRecord::print_records( //============================================================================== void *cuda_resize_scratch_space(std::int64_t bytes, bool force_shrink) { - static void *ptr = NULL; + static void *ptr = nullptr; static std::int64_t current_size = 0; if (current_size == 0) { current_size = bytes; @@ -917,6 +915,27 @@ void *cuda_resize_scratch_space(std::int64_t bytes, bool force_shrink) { return ptr; } +void cuda_prefetch_pointer(const Cuda &space, const void *ptr, size_t bytes, + bool to_device) { + if ((ptr == nullptr) || (bytes == 0)) return; + cudaPointerAttributes attr; + CUDA_SAFE_CALL(cudaPointerGetAttributes(&attr, ptr)); + // I measured this and it turns out prefetching towards the host slows + // DualView syncs down. Probably because the latency is not too bad in the + // first place for the pull down. If we want to change that provde + // cudaCpuDeviceId as the device if to_device is false +#if CUDA_VERSION < 10000 + bool is_managed = attr.isManaged; +#else + bool is_managed = attr.type == cudaMemoryTypeManaged; +#endif + if (to_device && is_managed && + space.cuda_device_prop().concurrentManagedAccess) { + CUDA_SAFE_CALL(cudaMemPrefetchAsync(ptr, bytes, space.cuda_device(), + space.cuda_stream())); + } +} + } // namespace Impl } // namespace Kokkos #else diff --git a/lib/kokkos/core/src/Cuda/Kokkos_Cuda_Error.hpp b/lib/kokkos/core/src/Cuda/Kokkos_Cuda_Error.hpp index 3b674bbb30d13f1a2e68b6ed4749a73edcf80d40..01e60315ee0b7c2d8e06c618e44a521a3fc902ac 100644 --- a/lib/kokkos/core/src/Cuda/Kokkos_Cuda_Error.hpp +++ b/lib/kokkos/core/src/Cuda/Kokkos_Cuda_Error.hpp @@ -58,10 +58,10 @@ namespace Impl { void cuda_device_synchronize(); void cuda_internal_error_throw(cudaError e, const char* name, - const char* file = NULL, const int line = 0); + const char* file = nullptr, const int line = 0); inline void cuda_internal_safe_call(cudaError e, const char* name, - const char* file = NULL, + const char* file = nullptr, const int line = 0) { if (cudaSuccess != e) { cuda_internal_error_throw(e, name, file, line); diff --git a/lib/kokkos/core/src/Cuda/Kokkos_Cuda_Instance.cpp b/lib/kokkos/core/src/Cuda/Kokkos_Cuda_Instance.cpp index b3c7edf67cdb1662399285893cd1e01e188f7556..37d0ffb687e40930e9599a169297efcaf81fb465 100644 --- a/lib/kokkos/core/src/Cuda/Kokkos_Cuda_Instance.cpp +++ b/lib/kokkos/core/src/Cuda/Kokkos_Cuda_Instance.cpp @@ -115,10 +115,14 @@ __global__ void query_cuda_kernel_arch(int *d_arch) { /** Query what compute capability is actually launched to the device: */ int cuda_kernel_arch() { - int *d_arch = 0; + int arch = 0; + int *d_arch = nullptr; + cudaMalloc((void **)&d_arch, sizeof(int)); + cudaMemcpy(d_arch, &arch, sizeof(int), cudaMemcpyDefault); + query_cuda_kernel_arch<<<1, 1>>>(d_arch); - int arch = 0; + cudaMemcpy(&arch, d_arch, sizeof(int), cudaMemcpyDefault); cudaFree(d_arch); return arch; @@ -313,6 +317,7 @@ void CudaInternal::initialize(int cuda_device_id, cudaStream_t stream) { enum { WordSize = sizeof(size_type) }; +#ifndef KOKKOS_IMPL_TURN_OFF_CUDA_HOST_INIT_CHECK #ifdef KOKKOS_ENABLE_DEPRECATED_CODE if (!HostSpace::execution_space::is_initialized()) { #else @@ -323,6 +328,7 @@ void CudaInternal::initialize(int cuda_device_id, cudaStream_t stream) { "initialized"); throw_runtime_exception(msg); } +#endif const CudaInternalDevices &dev_info = CudaInternalDevices::singleton(); @@ -340,7 +346,8 @@ void CudaInternal::initialize(int cuda_device_id, cudaStream_t stream) { if (ok_init && ok_dev) { const struct cudaDeviceProp &cudaProp = dev_info.m_cudaProp[cuda_device_id]; - m_cudaDev = cuda_device_id; + m_cudaDev = cuda_device_id; + m_deviceProp = cudaProp; CUDA_SAFE_CALL(cudaSetDevice(m_cudaDev)); Kokkos::Impl::cuda_device_synchronize(); @@ -348,17 +355,24 @@ void CudaInternal::initialize(int cuda_device_id, cudaStream_t stream) { // Query what compute capability architecture a kernel executes: m_cudaArch = cuda_kernel_arch(); + if (m_cudaArch == 0) { + std::stringstream ss; + ss << "Kokkos::Cuda::initialize ERROR: likely mismatch of architecture" + << std::endl; + std::string msg = ss.str(); + Kokkos::abort(msg.c_str()); + } + int compiled_major = m_cudaArch / 100; int compiled_minor = (m_cudaArch % 100) / 10; - if (compiled_major < 5 && cudaProp.major >= 5) { + if (compiled_major != cudaProp.major || compiled_minor < cudaProp.minor) { std::stringstream ss; ss << "Kokkos::Cuda::initialize ERROR: running kernels compiled for " "compute capability " << compiled_major << "." << compiled_minor - << " (< 5.0) on device with compute capability " << cudaProp.major - << "." << cudaProp.minor - << " (>=5.0), this would give incorrect results!" << std::endl; + << " on device with compute capability " << cudaProp.major << "." + << cudaProp.minor << " is not supported by CUDA!" << std::endl; std::string msg = ss.str(); Kokkos::abort(msg.c_str()); } @@ -742,7 +756,7 @@ int Cuda::impl_is_initialized() void Cuda::initialize(const Cuda::SelectDevice config, size_t num_instances) #else void Cuda::impl_initialize(const Cuda::SelectDevice config, - size_t num_instances) + size_t /*num_instances*/) #endif { Impl::CudaInternal::singleton().initialize(config.cuda_device_id, 0); @@ -826,6 +840,9 @@ const char *Cuda::name() { return "Cuda"; } cudaStream_t Cuda::cuda_stream() const { return m_space_instance->m_stream; } int Cuda::cuda_device() const { return m_space_instance->m_cudaDev; } +const cudaDeviceProp &Cuda::cuda_device_prop() const { + return m_space_instance->m_deviceProp; +} } // namespace Kokkos diff --git a/lib/kokkos/core/src/Cuda/Kokkos_Cuda_Instance.hpp b/lib/kokkos/core/src/Cuda/Kokkos_Cuda_Instance.hpp index 9d2c939af85305cfb09a3b2fc53f85edfa2e86bc..2158f03dd58df353aa26ca7addd7485445921aec 100644 --- a/lib/kokkos/core/src/Cuda/Kokkos_Cuda_Instance.hpp +++ b/lib/kokkos/core/src/Cuda/Kokkos_Cuda_Instance.hpp @@ -97,6 +97,8 @@ class CudaInternal { int m_maxThreadsPerSM; int m_maxThreadsPerBlock; + cudaDeviceProp m_deviceProp; + mutable size_type m_scratchSpaceCount; mutable size_type m_scratchFlagsCount; mutable size_type m_scratchUnifiedCount; diff --git a/lib/kokkos/core/src/Cuda/Kokkos_Cuda_KernelLaunch.hpp b/lib/kokkos/core/src/Cuda/Kokkos_Cuda_KernelLaunch.hpp index 590fa7a7847733c65189a815b37857a2d94ee57c..ca72b3b3021baca225fe0e61f188f0306a51c458 100644 --- a/lib/kokkos/core/src/Cuda/Kokkos_Cuda_KernelLaunch.hpp +++ b/lib/kokkos/core/src/Cuda/Kokkos_Cuda_KernelLaunch.hpp @@ -150,7 +150,7 @@ template __global__ static void cuda_parallel_launch_constant_or_global_memory( const DriverType* driver_ptr) { const DriverType& driver = - driver_ptr != NULL + driver_ptr != nullptr ? *driver_ptr : *((const DriverType*)kokkos_impl_cuda_constant_memory_buffer); @@ -162,7 +162,7 @@ __global__ __launch_bounds__(maxTperB, minBperSM) static void cuda_parallel_launch_constant_or_global_memory( const DriverType* driver_ptr) { const DriverType& driver = - driver_ptr != NULL + driver_ptr != nullptr ? *driver_ptr : *((const DriverType*)kokkos_impl_cuda_constant_memory_buffer); @@ -260,6 +260,8 @@ struct CudaParallelLaunch< (prefer_shmem ? cudaFuncCachePreferShared : cudaFuncCachePreferL1))); } +#else + (void)prefer_shmem; #endif // Copy functor to constant memory on the device @@ -317,6 +319,8 @@ struct CudaParallelLaunch, (prefer_shmem ? cudaFuncCachePreferShared : cudaFuncCachePreferL1))); } +#else + (void)prefer_shmem; #endif // Copy functor to constant memory on the device @@ -371,6 +375,8 @@ struct CudaParallelLaunch< (prefer_shmem ? cudaFuncCachePreferShared : cudaFuncCachePreferL1))); } +#else + (void)prefer_shmem; #endif KOKKOS_ENSURE_CUDA_LOCK_ARRAYS_ON_DEVICE(); @@ -419,6 +425,8 @@ struct CudaParallelLaunch, (prefer_shmem ? cudaFuncCachePreferShared : cudaFuncCachePreferL1))); } +#else + (void)prefer_shmem; #endif KOKKOS_ENSURE_CUDA_LOCK_ARRAYS_ON_DEVICE(); @@ -465,11 +473,13 @@ struct CudaParallelLaunch< (prefer_shmem ? cudaFuncCachePreferShared : cudaFuncCachePreferL1))); } +#else + (void)prefer_shmem; #endif KOKKOS_ENSURE_CUDA_LOCK_ARRAYS_ON_DEVICE(); - DriverType* driver_ptr = NULL; + DriverType* driver_ptr = nullptr; driver_ptr = reinterpret_cast( cuda_instance->scratch_functor(sizeof(DriverType))); cudaMemcpyAsync(driver_ptr, &driver, sizeof(DriverType), @@ -516,11 +526,13 @@ struct CudaParallelLaunch, (prefer_shmem ? cudaFuncCachePreferShared : cudaFuncCachePreferL1))); } +#else + (void)prefer_shmem; #endif KOKKOS_ENSURE_CUDA_LOCK_ARRAYS_ON_DEVICE(); - DriverType* driver_ptr = NULL; + DriverType* driver_ptr = nullptr; driver_ptr = reinterpret_cast( cuda_instance->scratch_functor(sizeof(DriverType))); cudaMemcpyAsync(driver_ptr, &driver, sizeof(DriverType), diff --git a/lib/kokkos/core/src/Cuda/Kokkos_Cuda_Parallel.hpp b/lib/kokkos/core/src/Cuda/Kokkos_Cuda_Parallel.hpp index 78db807478642fbfb4aa4450643d2e344d80f159..71ddadf74e275398eb3b87d67742e4834db8f80c 100644 --- a/lib/kokkos/core/src/Cuda/Kokkos_Cuda_Parallel.hpp +++ b/lib/kokkos/core/src/Cuda/Kokkos_Cuda_Parallel.hpp @@ -192,7 +192,7 @@ class TeamPolicyInternal } template - inline int team_size_max(const FunctorType& f, const ReducerType& r, + inline int team_size_max(const FunctorType& f, const ReducerType& /*r*/, const ParallelReduceTag&) const { using closure_type = Impl::ParallelReduce, @@ -304,7 +304,7 @@ class TeamPolicyInternal return m_thread_scratch_size[level]; } - inline typename traits::execution_space space() const { return m_space; } + const typename traits::execution_space& space() const { return m_space; } TeamPolicyInternal() : m_space(typename traits::execution_space()), @@ -895,10 +895,10 @@ class ParallelFor, // Functor's reduce memory, team scan memory, and team shared memory depend // upon team size. - m_scratch_ptr[0] = NULL; + m_scratch_ptr[0] = nullptr; m_scratch_ptr[1] = m_team_size <= 0 - ? NULL + ? nullptr : cuda_resize_scratch_space( static_cast(m_scratch_size[1]) * static_cast(Cuda::concurrency() / @@ -1207,7 +1207,7 @@ class ParallelReduce, ReducerType, ParallelReduce(const FunctorType& arg_functor, const Policy& arg_policy, const ViewType& arg_result, typename std::enable_if::value, - void*>::type = NULL) + void*>::type = nullptr) : m_functor(arg_functor), m_policy(arg_policy), m_reducer(InvalidType()), @@ -1499,7 +1499,7 @@ class ParallelReduce, ReducerType, ParallelReduce(const FunctorType& arg_functor, const Policy& arg_policy, const ViewType& arg_result, typename std::enable_if::value, - void*>::type = NULL) + void*>::type = nullptr) : m_functor(arg_functor), m_policy(arg_policy), m_reducer(InvalidType()), @@ -1810,7 +1810,7 @@ class ParallelReduce, ParallelReduce(const FunctorType& arg_functor, const Policy& arg_policy, const ViewType& arg_result, typename std::enable_if::value, - void*>::type = NULL) + void*>::type = nullptr) : m_functor(arg_functor), m_policy(arg_policy), m_reducer(InvalidType()), @@ -1824,7 +1824,7 @@ class ParallelReduce, m_team_begin(0), m_shmem_begin(0), m_shmem_size(0), - m_scratch_ptr{NULL, NULL}, + m_scratch_ptr{nullptr, nullptr}, m_league_size(arg_policy.league_size()), m_team_size(arg_policy.team_size()), m_vector_size(arg_policy.vector_length()) { @@ -1861,7 +1861,7 @@ class ParallelReduce, m_scratch_size[1] = m_policy.scratch_size(1, m_team_size); m_scratch_ptr[1] = m_team_size <= 0 - ? NULL + ? nullptr : cuda_resize_scratch_space( static_cast(m_scratch_size[1]) * (static_cast(Cuda::concurrency() / @@ -1923,7 +1923,7 @@ class ParallelReduce, m_team_begin(0), m_shmem_begin(0), m_shmem_size(0), - m_scratch_ptr{NULL, NULL}, + m_scratch_ptr{nullptr, nullptr}, m_league_size(arg_policy.league_size()), m_team_size(arg_policy.team_size()), m_vector_size(arg_policy.vector_length()) { @@ -1960,7 +1960,7 @@ class ParallelReduce, m_scratch_size[1] = m_policy.scratch_size(1, m_team_size); m_scratch_ptr[1] = m_team_size <= 0 - ? NULL + ? nullptr : cuda_resize_scratch_space( static_cast(m_scratch_size[1]) * static_cast(Cuda::concurrency() / diff --git a/lib/kokkos/core/src/Cuda/Kokkos_Cuda_ReduceScan.hpp b/lib/kokkos/core/src/Cuda/Kokkos_Cuda_ReduceScan.hpp index 41431bfb8da350341deac44f7e764c17b43c73dc..8795eb5a38b289c68768de4ddfa553307bb75152 100644 --- a/lib/kokkos/core/src/Cuda/Kokkos_Cuda_ReduceScan.hpp +++ b/lib/kokkos/core/src/Cuda/Kokkos_Cuda_ReduceScan.hpp @@ -97,7 +97,9 @@ __device__ inline // Depending on the ValueType _shared__ memory must be aligned up to 8byte // boundaries The reason not to use ValueType directly is that for types with // constructors it could lead to race conditions - __shared__ double sh_result[(sizeof(ValueType) + 7) / 8 * STEP_WIDTH]; + alignas(alignof(ValueType) > alignof(double) ? alignof(ValueType) + : alignof(double)) + __shared__ double sh_result[(sizeof(ValueType) + 7) / 8 * STEP_WIDTH]; ValueType* result = (ValueType*)&sh_result; const int step = 32 / blockDim.x; int shift = STEP_WIDTH; @@ -133,7 +135,8 @@ __device__ bool cuda_inter_block_reduction( typename FunctorValueTraits::reference_type value, typename FunctorValueTraits::reference_type neutral, const JoinOp& join, Cuda::size_type* const m_scratch_space, - typename FunctorValueTraits::pointer_type const result, + typename FunctorValueTraits::pointer_type const /*result*/, Cuda::size_type* const m_scratch_flags, const int max_active_thread = blockDim.y) { #ifdef __CUDA_ARCH__ @@ -236,6 +239,12 @@ __device__ bool cuda_inter_block_reduction( // "value" return last_block; #else + (void)value; + (void)neutral; + (void)join; + (void)m_scratch_space; + (void)m_scratch_flags; + (void)max_active_thread; return true; #endif } @@ -275,7 +284,9 @@ __device__ inline // Depending on the ValueType _shared__ memory must be aligned up to 8byte // boundaries The reason not to use ValueType directly is that for types with // constructors it could lead to race conditions - __shared__ double sh_result[(sizeof(ValueType) + 7) / 8 * STEP_WIDTH]; + alignas(alignof(ValueType) > alignof(double) ? alignof(ValueType) + : alignof(double)) + __shared__ double sh_result[(sizeof(ValueType) + 7) / 8 * STEP_WIDTH]; ValueType* result = (ValueType*)&sh_result; const int step = 32 / blockDim.x; int shift = STEP_WIDTH; @@ -426,6 +437,10 @@ __device__ inline // "value" return last_block; #else + (void)reducer; + (void)m_scratch_space; + (void)m_scratch_flags; + (void)max_active_thread; return true; #endif } @@ -500,7 +515,7 @@ struct CudaReductionsFunctor { } __device__ static inline bool scalar_inter_block_reduction( - const FunctorType& functor, const Cuda::size_type block_id, + const FunctorType& functor, const Cuda::size_type /*block_id*/, const Cuda::size_type block_count, Cuda::size_type* const shared_data, Cuda::size_type* const global_data, Cuda::size_type* const global_flags) { Scalar* const global_team_buffer_element = ((Scalar*)global_data); @@ -577,7 +592,7 @@ struct CudaReductionsFunctor { __device__ static inline void scalar_intra_block_reduction( const FunctorType& functor, Scalar value, const bool skip, Scalar* result, - const int shared_elements, Scalar* shared_team_buffer_element) { + const int /*shared_elements*/, Scalar* shared_team_buffer_element) { const int warp_id = (threadIdx.y * blockDim.x) / 32; Scalar* const my_shared_team_buffer_element = shared_team_buffer_element + threadIdx.y * blockDim.x + threadIdx.x; @@ -601,7 +616,7 @@ struct CudaReductionsFunctor { } __device__ static inline bool scalar_inter_block_reduction( - const FunctorType& functor, const Cuda::size_type block_id, + const FunctorType& functor, const Cuda::size_type /*block_id*/, const Cuda::size_type block_count, Cuda::size_type* const shared_data, Cuda::size_type* const global_data, Cuda::size_type* const global_flags) { Scalar* const global_team_buffer_element = ((Scalar*)global_data); diff --git a/lib/kokkos/core/src/Cuda/Kokkos_Cuda_Task.hpp b/lib/kokkos/core/src/Cuda/Kokkos_Cuda_Task.hpp index 237d2430d6cd6820aab0bb8773d6baf44a61e681..decbecc5e67bf4e42b27bacec7ce9935d10c53a1 100644 --- a/lib/kokkos/core/src/Cuda/Kokkos_Cuda_Task.hpp +++ b/lib/kokkos/core/src/Cuda/Kokkos_Cuda_Task.hpp @@ -128,7 +128,7 @@ class TaskQueueSpecialization> { auto current_task = OptionalRef(); // Loop until all queues are empty and no tasks in flight - while (not queue.is_done()) { + while (!queue.is_done()) { if (warp_lane == 0) { // should be (?) same as team_exec.team_rank() == 0 // pop off a task current_task = diff --git a/lib/kokkos/core/src/Cuda/Kokkos_Cuda_Team.hpp b/lib/kokkos/core/src/Cuda/Kokkos_Cuda_Team.hpp index ac9ab9660cbdd092fc8ccdeafc6f3bb68faf8649..d9d5ed0bf3265bab12dd94948343693736c25b7e 100644 --- a/lib/kokkos/core/src/Cuda/Kokkos_Cuda_Team.hpp +++ b/lib/kokkos/core/src/Cuda/Kokkos_Cuda_Team.hpp @@ -164,6 +164,8 @@ class CudaTeamMember { template KOKKOS_INLINE_FUNCTION void team_broadcast(ValueType& val, const int& thread_id) const { + (void)val; + (void)thread_id; #ifdef __CUDA_ARCH__ if (1 == blockDim.z) { // team == block __syncthreads(); @@ -184,6 +186,9 @@ class CudaTeamMember { template KOKKOS_INLINE_FUNCTION void team_broadcast(Closure const& f, ValueType& val, const int& thread_id) const { + (void)f; + (void)val; + (void)thread_id; #ifdef __CUDA_ARCH__ f(val); @@ -230,6 +235,8 @@ class CudaTeamMember { typename std::enable_if::value>::type team_reduce(ReducerType const& reducer, typename ReducerType::value_type& value) const noexcept { + (void)reducer; + (void)value; #ifdef __CUDA_ARCH__ cuda_intra_block_reduction(reducer, value, blockDim.y); #endif /* #ifdef __CUDA_ARCH__ */ @@ -274,6 +281,8 @@ class CudaTeamMember { return base_data[threadIdx.y]; #else + (void)value; + (void)global_accum; return Type(); #endif } @@ -302,6 +311,8 @@ class CudaTeamMember { typename std::enable_if::value>::type vector_reduce(ReducerType const& reducer, typename ReducerType::value_type& value) { + (void)reducer; + (void)value; #ifdef __CUDA_ARCH__ if (blockDim.x == 1) return; @@ -509,6 +520,11 @@ class CudaTeamMember { return 0; #else + (void)reducer; + (void)global_scratch_flags; + (void)global_scratch_space; + (void)shmem; + (void)shmem_size; return 0; #endif } @@ -683,6 +699,8 @@ KOKKOS_INLINE_FUNCTION void parallel_for( const Impl::TeamThreadRangeBoundariesStruct& loop_boundaries, const Closure& closure) { + (void)loop_boundaries; + (void)closure; #ifdef __CUDA_ARCH__ for (iType i = loop_boundaries.start + threadIdx.y; i < loop_boundaries.end; i += blockDim.y) @@ -706,6 +724,9 @@ KOKKOS_INLINE_FUNCTION parallel_reduce(const Impl::TeamThreadRangeBoundariesStruct< iType, Impl::CudaTeamMember>& loop_boundaries, const Closure& closure, const ReducerType& reducer) { + (void)loop_boundaries; + (void)closure; + (void)reducer; #ifdef __CUDA_ARCH__ typename ReducerType::value_type value; reducer.init(value); @@ -734,6 +755,9 @@ KOKKOS_INLINE_FUNCTION parallel_reduce(const Impl::TeamThreadRangeBoundariesStruct< iType, Impl::CudaTeamMember>& loop_boundaries, const Closure& closure, ValueType& result) { + (void)loop_boundaries; + (void)closure; + (void)result; #ifdef __CUDA_ARCH__ ValueType val; Kokkos::Sum reducer(val); @@ -755,6 +779,8 @@ KOKKOS_INLINE_FUNCTION void parallel_for( const Impl::TeamVectorRangeBoundariesStruct& loop_boundaries, const Closure& closure) { + (void)loop_boundaries; + (void)closure; #ifdef __CUDA_ARCH__ for (iType i = loop_boundaries.start + threadIdx.y * blockDim.x + threadIdx.x; i < loop_boundaries.end; i += blockDim.y * blockDim.x) @@ -768,6 +794,9 @@ KOKKOS_INLINE_FUNCTION parallel_reduce(const Impl::TeamVectorRangeBoundariesStruct< iType, Impl::CudaTeamMember>& loop_boundaries, const Closure& closure, const ReducerType& reducer) { + (void)loop_boundaries; + (void)closure; + (void)reducer; #ifdef __CUDA_ARCH__ typename ReducerType::value_type value; reducer.init(value); @@ -788,6 +817,9 @@ KOKKOS_INLINE_FUNCTION parallel_reduce(const Impl::TeamVectorRangeBoundariesStruct< iType, Impl::CudaTeamMember>& loop_boundaries, const Closure& closure, ValueType& result) { + (void)loop_boundaries; + (void)closure; + (void)result; #ifdef __CUDA_ARCH__ ValueType val; Kokkos::Sum reducer(val); @@ -818,6 +850,8 @@ KOKKOS_INLINE_FUNCTION void parallel_for( const Impl::ThreadVectorRangeBoundariesStruct& loop_boundaries, const Closure& closure) { + (void)loop_boundaries; + (void)closure; #ifdef __CUDA_ARCH__ for (iType i = loop_boundaries.start + threadIdx.x; i < loop_boundaries.end; i += blockDim.x) { @@ -853,6 +887,9 @@ KOKKOS_INLINE_FUNCTION parallel_reduce(Impl::ThreadVectorRangeBoundariesStruct< iType, Impl::CudaTeamMember> const& loop_boundaries, Closure const& closure, ReducerType const& reducer) { + (void)loop_boundaries; + (void)closure; + (void)reducer; #ifdef __CUDA_ARCH__ reducer.init(reducer.reference()); @@ -884,6 +921,9 @@ KOKKOS_INLINE_FUNCTION parallel_reduce(Impl::ThreadVectorRangeBoundariesStruct< iType, Impl::CudaTeamMember> const& loop_boundaries, Closure const& closure, ValueType& result) { + (void)loop_boundaries; + (void)closure; + (void)result; #ifdef __CUDA_ARCH__ result = ValueType(); @@ -912,6 +952,8 @@ KOKKOS_INLINE_FUNCTION void parallel_scan( const Impl::ThreadVectorRangeBoundariesStruct& loop_boundaries, const Closure& closure) { + (void)loop_boundaries; + (void)closure; #ifdef __CUDA_ARCH__ // Extract value_type from closure @@ -986,6 +1028,7 @@ template KOKKOS_INLINE_FUNCTION void single( const Impl::VectorSingleStruct&, const FunctorType& lambda) { + (void)lambda; #ifdef __CUDA_ARCH__ if (threadIdx.x == 0) lambda(); #ifdef KOKKOS_IMPL_CUDA_SYNCWARP_NEEDS_MASK @@ -1003,6 +1046,7 @@ template KOKKOS_INLINE_FUNCTION void single( const Impl::ThreadSingleStruct&, const FunctorType& lambda) { + (void)lambda; #ifdef __CUDA_ARCH__ if (threadIdx.x == 0 && threadIdx.y == 0) lambda(); #ifdef KOKKOS_IMPL_CUDA_SYNCWARP_NEEDS_MASK @@ -1020,6 +1064,8 @@ template KOKKOS_INLINE_FUNCTION void single( const Impl::VectorSingleStruct&, const FunctorType& lambda, ValueType& val) { + (void)lambda; + (void)val; #ifdef __CUDA_ARCH__ if (threadIdx.x == 0) lambda(val); unsigned mask = blockDim.x == 32 @@ -1034,6 +1080,9 @@ template KOKKOS_INLINE_FUNCTION void single( const Impl::ThreadSingleStruct& single_struct, const FunctorType& lambda, ValueType& val) { + (void)single_struct; + (void)lambda; + (void)val; #ifdef __CUDA_ARCH__ if (threadIdx.x == 0 && threadIdx.y == 0) { lambda(val); diff --git a/lib/kokkos/core/src/Cuda/Kokkos_Cuda_UniqueToken.hpp b/lib/kokkos/core/src/Cuda/Kokkos_Cuda_UniqueToken.hpp index a0de4eaa7f429f0cc28dce861fd1316c9063ee84..3b470edbc35dd456f9da0d8d95002b54b7a612a2 100644 --- a/lib/kokkos/core/src/Cuda/Kokkos_Cuda_UniqueToken.hpp +++ b/lib/kokkos/core/src/Cuda/Kokkos_Cuda_UniqueToken.hpp @@ -76,41 +76,17 @@ class UniqueToken { explicit UniqueToken(execution_space const& = execution_space()); #endif -#ifdef KOKKOS_CUDA_9_DEFAULTED_BUG_WORKAROUND - KOKKOS_INLINE_FUNCTION - UniqueToken(const UniqueToken& rhs) - : m_buffer(rhs.m_buffer), m_count(rhs.m_count) {} - - KOKKOS_INLINE_FUNCTION - UniqueToken(UniqueToken&& rhs) - : m_buffer(std::move(rhs.m_buffer)), m_count(std::move(rhs.m_count)) {} - - KOKKOS_INLINE_FUNCTION - UniqueToken& operator=(const UniqueToken& rhs) { - m_buffer = rhs.m_buffer; - m_count = rhs.m_count; - return *this; - } - - KOKKOS_INLINE_FUNCTION - UniqueToken& operator=(UniqueToken&& rhs) { - m_buffer = std::move(rhs.m_buffer); - m_count = std::move(rhs.m_count); - return *this; - } -#else - KOKKOS_INLINE_FUNCTION + KOKKOS_DEFAULTED_FUNCTION UniqueToken(const UniqueToken&) = default; - KOKKOS_INLINE_FUNCTION + KOKKOS_DEFAULTED_FUNCTION UniqueToken(UniqueToken&&) = default; - KOKKOS_INLINE_FUNCTION + KOKKOS_DEFAULTED_FUNCTION UniqueToken& operator=(const UniqueToken&) = default; - KOKKOS_INLINE_FUNCTION + KOKKOS_DEFAULTED_FUNCTION UniqueToken& operator=(UniqueToken&&) = default; -#endif /// \brief upper bound for acquired values, i.e. 0 <= value < size() KOKKOS_INLINE_FUNCTION diff --git a/lib/kokkos/core/src/Cuda/Kokkos_Cuda_Vectorization.hpp b/lib/kokkos/core/src/Cuda/Kokkos_Cuda_Vectorization.hpp index 085262b8040660bd84ad7720da142354cce7148a..62966f859d1e88acfd96bf0949a6acfeac5ef89c 100644 --- a/lib/kokkos/core/src/Cuda/Kokkos_Cuda_Vectorization.hpp +++ b/lib/kokkos/core/src/Cuda/Kokkos_Cuda_Vectorization.hpp @@ -55,7 +55,7 @@ namespace Kokkos { namespace Impl { // Include all lanes -constexpr unsigned shfl_all_mask = 0xffffffff; +constexpr unsigned shfl_all_mask = 0xffffffffu; //---------------------------------------------------------------------------- // Shuffle operations require input to be a register (stack) variable @@ -71,20 +71,33 @@ struct in_place_shfl_op { return *static_cast(this); } - // sizeof(Scalar) == sizeof(int) case + // sizeof(Scalar) <= sizeof(int) case template // requires _assignable_from_bits - __device__ inline typename std::enable_if::type + __device__ inline typename std::enable_if::type operator()(Scalar& out, Scalar const& in, int lane_or_delta, int width, unsigned mask = shfl_all_mask) const noexcept { + using shfl_type = int; + union conv_type { + Scalar orig; + shfl_type conv; + // This should be fine, members get explicitly reset, which changes the + // active member + KOKKOS_FUNCTION conv_type() { conv = 0; } + }; + conv_type tmp_in; + tmp_in.orig = in; + shfl_type tmp_out; + tmp_out = reinterpret_cast(tmp_in.orig); + conv_type res; //------------------------------------------------ - reinterpret_cast(out) = self().do_shfl_op( - mask, reinterpret_cast(in), lane_or_delta, width); + res.conv = self().do_shfl_op(mask, tmp_out, lane_or_delta, width); //------------------------------------------------ + out = reinterpret_cast(res.conv); } // TODO: figure out why 64-bit shfl fails in Clang -#if (CUDA_VERSION >= 9000) && (!defined(KOKKOS_COMPILER_CLANG)) +#if !defined(KOKKOS_COMPILER_CLANG) // sizeof(Scalar) == sizeof(double) case // requires _assignable_from_bits template @@ -140,6 +153,10 @@ struct in_place_shfl_fn : in_place_shfl_op { __device__ KOKKOS_IMPL_FORCEINLINE T do_shfl_op(unsigned mask, T& val, int lane, int width) const noexcept { + (void)mask; + (void)val; + (void)lane; + (void)width; return KOKKOS_IMPL_CUDA_SHFL_MASK(mask, val, lane, width); } }; @@ -167,6 +184,10 @@ struct in_place_shfl_down_fn : in_place_shfl_op { __device__ KOKKOS_IMPL_FORCEINLINE T do_shfl_op(unsigned mask, T& val, int lane, int width) const noexcept { + (void)mask; + (void)val; + (void)lane; + (void)width; return KOKKOS_IMPL_CUDA_SHFL_DOWN_MASK(mask, val, lane, width); } }; diff --git a/lib/kokkos/core/src/Cuda/Kokkos_Cuda_Version_9_8_Compatibility.hpp b/lib/kokkos/core/src/Cuda/Kokkos_Cuda_Version_9_8_Compatibility.hpp index 66231e55f9c0dd55956c34f77519ce8a5fddb501..0cdd84ce27157e118065c6fbcf2da71a875b81e0 100644 --- a/lib/kokkos/core/src/Cuda/Kokkos_Cuda_Version_9_8_Compatibility.hpp +++ b/lib/kokkos/core/src/Cuda/Kokkos_Cuda_Version_9_8_Compatibility.hpp @@ -1,20 +1,6 @@ #include #if defined(__CUDA_ARCH__) -#if (CUDA_VERSION < 9000) -#define KOKKOS_IMPL_CUDA_ACTIVEMASK 0 -#define KOKKOS_IMPL_CUDA_SYNCWARP __threadfence_block() -#define KOKKOS_IMPL_CUDA_SYNCWARP_MASK(m) \ - if (m) __threadfence_block() -#define KOKKOS_IMPL_CUDA_BALLOT(x) __ballot(x) -#define KOKKOS_IMPL_CUDA_BALLOT_MASK(m, x) __ballot(x) -#define KOKKOS_IMPL_CUDA_SHFL(x, y, z) __shfl(x, y, z) -#define KOKKOS_IMPL_CUDA_SHFL_MASK(m, x, y, z) __shfl(x, y, z) -#define KOKKOS_IMPL_CUDA_SHFL_UP(x, y, z) __shfl_up(x, y, z) -#define KOKKOS_IMPL_CUDA_SHFL_UP_MASK(m, x, y, z) __shfl_up(x, y, z) -#define KOKKOS_IMPL_CUDA_SHFL_DOWN(x, y, z) __shfl_down(x, y, z) -#define KOKKOS_IMPL_CUDA_SHFL_DOWN_MASK(m, x, y, z) __shfl_down(x, y, z) -#else #define KOKKOS_IMPL_CUDA_ACTIVEMASK __activemask() #define KOKKOS_IMPL_CUDA_SYNCWARP __syncwarp(0xffffffff) #define KOKKOS_IMPL_CUDA_SYNCWARP_MASK(m) __syncwarp(m) @@ -27,7 +13,6 @@ #define KOKKOS_IMPL_CUDA_SHFL_DOWN(x, y, z) \ __shfl_down_sync(0xffffffff, x, y, z) #define KOKKOS_IMPL_CUDA_SHFL_DOWN_MASK(m, x, y, z) __shfl_down_sync(m, x, y, z) -#endif #else #define KOKKOS_IMPL_CUDA_ACTIVEMASK 0 #define KOKKOS_IMPL_CUDA_SYNCWARP @@ -41,25 +26,13 @@ #define KOKKOS_IMPL_CUDA_SHFL_DOWN_MASK(m, x, y, z) 0 #endif -#if (CUDA_VERSION >= 9000) && (!defined(KOKKOS_COMPILER_CLANG)) +#if !defined(KOKKOS_COMPILER_CLANG) #define KOKKOS_IMPL_CUDA_MAX_SHFL_SIZEOF sizeof(long long) #else #define KOKKOS_IMPL_CUDA_MAX_SHFL_SIZEOF sizeof(int) #endif #if defined(__CUDA_ARCH__) -#if (CUDA_VERSION < 9000) -#define KOKKOS_IMPL_CUDA_SYNCWARP_OR_RETURN(MSG) \ - { \ - const unsigned b = __ballot(1); \ - if (b != 0xffffffff) { \ - printf(" SYNCWARP AT %s (%d,%d,%d) (%d,%d,%d) failed %x\n", MSG, \ - blockIdx.x, blockIdx.y, blockIdx.z, threadIdx.x, threadIdx.y, \ - threadIdx.z, b); \ - return; \ - } \ - } -#else #define KOKKOS_IMPL_CUDA_SYNCWARP_OR_RETURN(MSG) \ { \ __syncwarp(); \ @@ -71,7 +44,6 @@ return; \ } \ } -#endif #else #define KOKKOS_IMPL_CUDA_SYNCWARP_OR_RETURN(MSG) #endif diff --git a/lib/kokkos/core/src/Cuda/Kokkos_Cuda_View.hpp b/lib/kokkos/core/src/Cuda/Kokkos_Cuda_View.hpp index 08fdbea38728e7bcf0d1d57ff7c594180d6cc90a..364f334a4cdb944d40c2ff7813562a043834db5d 100644 --- a/lib/kokkos/core/src/Cuda/Kokkos_Cuda_View.hpp +++ b/lib/kokkos/core/src/Cuda/Kokkos_Cuda_View.hpp @@ -84,8 +84,8 @@ struct CudaTextureFetch { KOKKOS_INLINE_FUNCTION CudaTextureFetch() : m_obj(), m_ptr(), m_offset() {} - KOKKOS_INLINE_FUNCTION - ~CudaTextureFetch() {} + KOKKOS_DEFAULTED_FUNCTION + ~CudaTextureFetch() = default; KOKKOS_INLINE_FUNCTION CudaTextureFetch(const CudaTextureFetch& rhs) @@ -153,8 +153,8 @@ struct CudaLDGFetch { KOKKOS_INLINE_FUNCTION CudaLDGFetch() : m_ptr() {} - KOKKOS_INLINE_FUNCTION - ~CudaLDGFetch() {} + KOKKOS_DEFAULTED_FUNCTION + ~CudaLDGFetch() = default; KOKKOS_INLINE_FUNCTION CudaLDGFetch(const CudaLDGFetch& rhs) : m_ptr(rhs.m_ptr) {} @@ -250,7 +250,7 @@ class ViewDataHandle< KOKKOS_INLINE_FUNCTION static handle_type assign(value_type* arg_data_ptr, track_type const& arg_tracker) { - if (arg_data_ptr == NULL) return handle_type(); + if (arg_data_ptr == nullptr) return handle_type(); #if defined(KOKKOS_ACTIVE_EXECUTION_MEMORY_SPACE_HOST) // Assignment of texture = non-texture requires creation of a texture object @@ -273,6 +273,7 @@ class ViewDataHandle< return handle_type(arg_data_ptr, r); #else + (void)arg_tracker; Kokkos::Impl::cuda_abort( "Cannot create Cuda texture object from within a Cuda kernel"); return handle_type(); diff --git a/lib/kokkos/core/src/Cuda/Kokkos_Cuda_fwd.hpp b/lib/kokkos/core/src/Cuda/Kokkos_Cuda_fwd.hpp new file mode 100644 index 0000000000000000000000000000000000000000..4bda5e9411f05bfd76495c346f053acf958a84a7 --- /dev/null +++ b/lib/kokkos/core/src/Cuda/Kokkos_Cuda_fwd.hpp @@ -0,0 +1,67 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 3.0 +// Copyright (2020) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +#ifndef KOKKOS_CUDA_FWD_HPP_ +#define KOKKOS_CUDA_FWD_HPP_ +#if defined(KOKKOS_ENABLE_CUDA) +namespace Kokkos { + +class CudaSpace; ///< Memory space on Cuda GPU +class CudaUVMSpace; ///< Memory space on Cuda GPU with UVM +class CudaHostPinnedSpace; ///< Memory space on Host accessible to Cuda GPU +class Cuda; ///< Execution space for Cuda GPU + +namespace Impl { + +template +void cuda_prefetch_pointer(const ExecSpace& /*space*/, const void* /*ptr*/, + size_t /*bytes*/, bool /*to_device*/) {} + +void cuda_prefetch_pointer(const Cuda& space, const void* ptr, size_t bytes, + bool to_device); + +} // namespace Impl +} // namespace Kokkos +#endif +#endif diff --git a/lib/kokkos/core/src/HIP/KokkosExp_HIP_IterateTile.hpp b/lib/kokkos/core/src/HIP/KokkosExp_HIP_IterateTile.hpp new file mode 100644 index 0000000000000000000000000000000000000000..e2525d70c175e109663511078caae2a574a9f413 --- /dev/null +++ b/lib/kokkos/core/src/HIP/KokkosExp_HIP_IterateTile.hpp @@ -0,0 +1,3296 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 3.0 +// Copyright (2020) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +#ifndef KOKKOS_HIP_EXP_ITERATE_TILE_REFACTOR_HPP +#define KOKKOS_HIP_EXP_ITERATE_TILE_REFACTOR_HPP + +#include +#if defined(__HIPCC__) + +#include +#include +#include + +#include + +#if defined(KOKKOS_ENABLE_PROFILING) +#include +#include +#endif + +namespace Kokkos { +namespace Impl { + +// ------------------------------------------------------------------ // +// ParallelFor iteration pattern +template +struct DeviceIterateTile; + +// Rank 2 +// Specializations for void tag type +template +struct DeviceIterateTile<2, PolicyType, Functor, void> { + using index_type = typename PolicyType::index_type; + + __device__ DeviceIterateTile(const PolicyType& policy_, const Functor& f_) + : m_policy(policy_), m_func(f_) {} + + KOKKOS_INLINE_FUNCTION + void exec_range() const { + // LL + if (PolicyType::inner_direction == PolicyType::Left) { + for (index_type tile_id1 = static_cast(hipBlockIdx_y); + tile_id1 < m_policy.m_tile_end[1]; tile_id1 += hipGridDim_y) { + const index_type offset_1 = + tile_id1 * m_policy.m_tile[1] + + static_cast(hipThreadIdx_y) + + static_cast(m_policy.m_lower[1]); + if (offset_1 < m_policy.m_upper[1] && + static_cast(hipThreadIdx_y) < m_policy.m_tile[1]) { + for (index_type tile_id0 = static_cast(hipBlockIdx_x); + tile_id0 < m_policy.m_tile_end[0]; tile_id0 += hipGridDim_x) { + const index_type offset_0 = + tile_id0 * m_policy.m_tile[0] + + static_cast(hipThreadIdx_x) + + static_cast(m_policy.m_lower[0]); + if (offset_0 < m_policy.m_upper[0] && + static_cast(hipThreadIdx_x) < m_policy.m_tile[0]) { + m_func(offset_0, offset_1); + } + } + } + } + } + // LR + else { + for (index_type tile_id0 = static_cast(hipBlockIdx_x); + tile_id0 < m_policy.m_tile_end[0]; tile_id0 += hipGridDim_x) { + const index_type offset_0 = + tile_id0 * m_policy.m_tile[0] + + static_cast(hipThreadIdx_x) + + static_cast(m_policy.m_lower[0]); + if (offset_0 < m_policy.m_upper[0] && + static_cast(hipThreadIdx_x) < m_policy.m_tile[0]) { + for (index_type tile_id1 = static_cast(hipBlockIdx_y); + tile_id1 < m_policy.m_tile_end[1]; tile_id1 += hipGridDim_y) { + const index_type offset_1 = + tile_id1 * m_policy.m_tile[1] + + static_cast(hipThreadIdx_y) + + static_cast(m_policy.m_lower[1]); + if (offset_1 < m_policy.m_upper[1] && + static_cast(hipThreadIdx_y) < m_policy.m_tile[1]) { + m_func(offset_0, offset_1); + } + } + } + } + } + } // end exec_range + + private: + const PolicyType& m_policy; + const Functor& m_func; +}; + +// Specializations for tag type +template +struct DeviceIterateTile<2, PolicyType, Functor, Tag> { + using index_type = typename PolicyType::index_type; + + KOKKOS_INLINE_FUNCTION + DeviceIterateTile(const PolicyType& policy_, const Functor& f_) + : m_policy(policy_), m_func(f_) {} + + KOKKOS_INLINE_FUNCTION + void exec_range() const { + if (PolicyType::inner_direction == PolicyType::Left) { + // Loop over size maxnumblocks until full range covered + for (index_type tile_id1 = static_cast(hipBlockIdx_y); + tile_id1 < m_policy.m_tile_end[1]; tile_id1 += hipGridDim_y) { + const index_type offset_1 = + tile_id1 * m_policy.m_tile[1] + + static_cast(hipThreadIdx_y) + + static_cast(m_policy.m_lower[1]); + if (offset_1 < m_policy.m_upper[1] && + static_cast(hipThreadIdx_y) < m_policy.m_tile[1]) { + for (index_type tile_id0 = static_cast(hipBlockIdx_x); + tile_id0 < m_policy.m_tile_end[0]; tile_id0 += hipGridDim_x) { + const index_type offset_0 = + tile_id0 * m_policy.m_tile[0] + + static_cast(hipThreadIdx_x) + + static_cast(m_policy.m_lower[0]); + if (offset_0 < m_policy.m_upper[0] && + static_cast(hipThreadIdx_x) < m_policy.m_tile[0]) { + m_func(Tag(), offset_0, offset_1); + } + } + } + } + } else { + for (index_type tile_id0 = static_cast(hipBlockIdx_x); + tile_id0 < m_policy.m_tile_end[0]; tile_id0 += hipGridDim_x) { + const index_type offset_0 = + tile_id0 * m_policy.m_tile[0] + + static_cast(hipThreadIdx_x) + + static_cast(m_policy.m_lower[0]); + if (offset_0 < m_policy.m_upper[0] && + static_cast(hipThreadIdx_x) < m_policy.m_tile[0]) { + for (index_type tile_id1 = static_cast(hipBlockIdx_y); + tile_id1 < m_policy.m_tile_end[1]; tile_id1 += hipGridDim_y) { + const index_type offset_1 = + tile_id1 * m_policy.m_tile[1] + + static_cast(hipThreadIdx_y) + + static_cast(m_policy.m_lower[1]); + if (offset_1 < m_policy.m_upper[1] && + static_cast(hipThreadIdx_y) < m_policy.m_tile[1]) { + m_func(Tag(), offset_0, offset_1); + } + } + } + } + } + } // end exec_range + + private: + const PolicyType& m_policy; + const Functor& m_func; +}; + +// Rank 3 +// Specializations for void tag type +template +struct DeviceIterateTile<3, PolicyType, Functor, void> { + using index_type = typename PolicyType::index_type; + + __device__ DeviceIterateTile(const PolicyType& policy_, const Functor& f_) + : m_policy(policy_), m_func(f_) {} + + KOKKOS_INLINE_FUNCTION + void exec_range() const { + // LL + if (PolicyType::inner_direction == PolicyType::Left) { + for (index_type tile_id2 = static_cast(hipBlockIdx_z); + tile_id2 < m_policy.m_tile_end[2]; tile_id2 += hipGridDim_z) { + const index_type offset_2 = + tile_id2 * m_policy.m_tile[2] + + static_cast(hipThreadIdx_z) + + static_cast(m_policy.m_lower[2]); + if (offset_2 < m_policy.m_upper[2] && + static_cast(hipThreadIdx_z) < m_policy.m_tile[2]) { + for (index_type tile_id1 = static_cast(hipBlockIdx_y); + tile_id1 < m_policy.m_tile_end[1]; tile_id1 += hipGridDim_y) { + const index_type offset_1 = + tile_id1 * m_policy.m_tile[1] + + static_cast(hipThreadIdx_y) + + static_cast(m_policy.m_lower[1]); + if (offset_1 < m_policy.m_upper[1] && + static_cast(hipThreadIdx_y) < m_policy.m_tile[1]) { + for (index_type tile_id0 = static_cast(hipBlockIdx_x); + tile_id0 < m_policy.m_tile_end[0]; + tile_id0 += hipGridDim_x) { + const index_type offset_0 = + tile_id0 * m_policy.m_tile[0] + + static_cast(hipThreadIdx_x) + + static_cast(m_policy.m_lower[0]); + if (offset_0 < m_policy.m_upper[0] && + static_cast(hipThreadIdx_x) < + m_policy.m_tile[0]) { + m_func(offset_0, offset_1, offset_2); + } + } + } + } + } + } + } + // LR + else { + for (index_type tile_id0 = static_cast(hipBlockIdx_x); + tile_id0 < m_policy.m_tile_end[0]; tile_id0 += hipGridDim_x) { + const index_type offset_0 = + tile_id0 * m_policy.m_tile[0] + + static_cast(hipThreadIdx_x) + + static_cast(m_policy.m_lower[0]); + if (offset_0 < m_policy.m_upper[0] && + static_cast(hipThreadIdx_x) < m_policy.m_tile[0]) { + for (index_type tile_id1 = static_cast(hipBlockIdx_y); + tile_id1 < m_policy.m_tile_end[1]; tile_id1 += hipGridDim_y) { + const index_type offset_1 = + tile_id1 * m_policy.m_tile[1] + + static_cast(hipThreadIdx_y) + + static_cast(m_policy.m_lower[1]); + if (offset_1 < m_policy.m_upper[1] && + static_cast(hipThreadIdx_y) < m_policy.m_tile[1]) { + for (index_type tile_id2 = static_cast(hipBlockIdx_z); + tile_id2 < m_policy.m_tile_end[2]; + tile_id2 += hipGridDim_z) { + const index_type offset_2 = + tile_id2 * m_policy.m_tile[2] + + static_cast(hipThreadIdx_z) + + static_cast(m_policy.m_lower[2]); + if (offset_2 < m_policy.m_upper[2] && + static_cast(hipThreadIdx_z) < + m_policy.m_tile[2]) { + m_func(offset_0, offset_1, offset_2); + } + } + } + } + } + } + } + } // end exec_range + + private: + const PolicyType& m_policy; + const Functor& m_func; +}; + +// Specializations for void tag type +template +struct DeviceIterateTile<3, PolicyType, Functor, Tag> { + using index_type = typename PolicyType::index_type; + + KOKKOS_INLINE_FUNCTION + DeviceIterateTile(const PolicyType& policy_, const Functor& f_) + : m_policy(policy_), m_func(f_) {} + + KOKKOS_INLINE_FUNCTION + void exec_range() const { + if (PolicyType::inner_direction == PolicyType::Left) { + for (index_type tile_id2 = static_cast(hipBlockIdx_z); + tile_id2 < m_policy.m_tile_end[2]; tile_id2 += hipGridDim_z) { + const index_type offset_2 = + tile_id2 * m_policy.m_tile[2] + + static_cast(hipThreadIdx_z) + + static_cast(m_policy.m_lower[2]); + if (offset_2 < m_policy.m_upper[2] && + static_cast(hipThreadIdx_z) < m_policy.m_tile[2]) { + for (index_type tile_id1 = static_cast(hipBlockIdx_y); + tile_id1 < m_policy.m_tile_end[1]; tile_id1 += hipGridDim_y) { + const index_type offset_1 = + tile_id1 * m_policy.m_tile[1] + + static_cast(hipThreadIdx_y) + + static_cast(m_policy.m_lower[1]); + if (offset_1 < m_policy.m_upper[1] && + static_cast(hipThreadIdx_y) < m_policy.m_tile[1]) { + for (index_type tile_id0 = static_cast(hipBlockIdx_x); + tile_id0 < m_policy.m_tile_end[0]; + tile_id0 += hipGridDim_x) { + const index_type offset_0 = + tile_id0 * m_policy.m_tile[0] + + static_cast(hipThreadIdx_x) + + static_cast(m_policy.m_lower[0]); + if (offset_0 < m_policy.m_upper[0] && + static_cast(hipThreadIdx_x) < + m_policy.m_tile[0]) { + m_func(Tag(), offset_0, offset_1, offset_2); + } + } + } + } + } + } + } else { + for (index_type tile_id0 = static_cast(hipBlockIdx_x); + tile_id0 < m_policy.m_tile_end[0]; tile_id0 += hipGridDim_x) { + const index_type offset_0 = + tile_id0 * m_policy.m_tile[0] + + static_cast(hipThreadIdx_x) + + static_cast(m_policy.m_lower[0]); + if (offset_0 < m_policy.m_upper[0] && + static_cast(hipThreadIdx_x) < m_policy.m_tile[0]) { + for (index_type tile_id1 = static_cast(hipBlockIdx_y); + tile_id1 < m_policy.m_tile_end[1]; tile_id1 += hipGridDim_y) { + const index_type offset_1 = + tile_id1 * m_policy.m_tile[1] + + static_cast(hipThreadIdx_y) + + static_cast(m_policy.m_lower[1]); + if (offset_1 < m_policy.m_upper[1] && + static_cast(hipThreadIdx_y) < m_policy.m_tile[1]) { + for (index_type tile_id2 = static_cast(hipBlockIdx_z); + tile_id2 < m_policy.m_tile_end[2]; + tile_id2 += hipGridDim_z) { + const index_type offset_2 = + tile_id2 * m_policy.m_tile[2] + + static_cast(hipThreadIdx_z) + + static_cast(m_policy.m_lower[2]); + if (offset_2 < m_policy.m_upper[2] && + static_cast(hipThreadIdx_z) < + m_policy.m_tile[2]) { + m_func(Tag(), offset_0, offset_1, offset_2); + } + } + } + } + } + } + } + } // end exec_range + + private: + const PolicyType& m_policy; + const Functor& m_func; +}; + +// Rank 4 +// Specializations for void tag type +template +struct DeviceIterateTile<4, PolicyType, Functor, void> { + using index_type = typename PolicyType::index_type; + + __device__ DeviceIterateTile(const PolicyType& policy_, const Functor& f_) + : m_policy(policy_), m_func(f_) {} + + static constexpr index_type max_blocks = 65535; + + KOKKOS_INLINE_FUNCTION + void exec_range() const { + // LL + if (PolicyType::inner_direction == PolicyType::Left) { + const index_type temp0 = m_policy.m_tile_end[0]; + const index_type temp1 = m_policy.m_tile_end[1]; + const index_type numbl0 = (temp0 <= max_blocks ? temp0 : max_blocks); + const index_type numbl1 = + (temp0 * temp1 > max_blocks + ? index_type(max_blocks / numbl0) + : (temp1 <= max_blocks ? temp1 : max_blocks)); + + const index_type tile_id0 = + static_cast(hipBlockIdx_x) % numbl0; + const index_type tile_id1 = + static_cast(hipBlockIdx_x) / numbl0; + const index_type thr_id0 = + static_cast(hipThreadIdx_x) % m_policy.m_tile[0]; + const index_type thr_id1 = + static_cast(hipThreadIdx_x) / m_policy.m_tile[0]; + + for (index_type tile_id3 = static_cast(hipBlockIdx_z); + tile_id3 < m_policy.m_tile_end[3]; tile_id3 += hipGridDim_z) { + const index_type offset_3 = + tile_id3 * m_policy.m_tile[3] + + static_cast(hipThreadIdx_z) + + static_cast(m_policy.m_lower[3]); + if (offset_3 < m_policy.m_upper[3] && + static_cast(hipThreadIdx_z) < m_policy.m_tile[3]) { + for (index_type tile_id2 = static_cast(hipBlockIdx_y); + tile_id2 < m_policy.m_tile_end[2]; tile_id2 += hipGridDim_y) { + const index_type offset_2 = + tile_id2 * m_policy.m_tile[2] + + static_cast(hipThreadIdx_y) + + static_cast(m_policy.m_lower[2]); + if (offset_2 < m_policy.m_upper[2] && + static_cast(hipThreadIdx_y) < m_policy.m_tile[2]) { + for (index_type j = tile_id1; j < m_policy.m_tile_end[1]; + j += numbl1) { + const index_type offset_1 = + j * m_policy.m_tile[1] + thr_id1 + + static_cast(m_policy.m_lower[1]); + if (offset_1 < m_policy.m_upper[1] && + thr_id1 < m_policy.m_tile[1]) { + for (index_type i = tile_id0; i < m_policy.m_tile_end[0]; + i += numbl0) { + const index_type offset_0 = + i * m_policy.m_tile[0] + thr_id0 + + static_cast(m_policy.m_lower[0]); + if (offset_0 < m_policy.m_upper[0] && + thr_id0 < m_policy.m_tile[0]) { + m_func(offset_0, offset_1, offset_2, offset_3); + } + } + } + } + } + } + } + } + } + // LR + else { + const index_type temp0 = m_policy.m_tile_end[0]; + const index_type temp1 = m_policy.m_tile_end[1]; + const index_type numbl1 = (temp1 <= max_blocks ? temp1 : max_blocks); + const index_type numbl0 = + (temp0 * temp1 > max_blocks + ? index_type(max_blocks / numbl1) + : (temp0 <= max_blocks ? temp0 : max_blocks)); + + const index_type tile_id0 = + static_cast(hipBlockIdx_x) / numbl1; + const index_type tile_id1 = + static_cast(hipBlockIdx_x) % numbl1; + const index_type thr_id0 = + static_cast(hipThreadIdx_x) / m_policy.m_tile[1]; + const index_type thr_id1 = + static_cast(hipThreadIdx_x) % m_policy.m_tile[1]; + + for (index_type i = tile_id0; i < m_policy.m_tile_end[0]; i += numbl0) { + const index_type offset_0 = + i * m_policy.m_tile[0] + thr_id0 + + static_cast(m_policy.m_lower[0]); + if (offset_0 < m_policy.m_upper[0] && thr_id0 < m_policy.m_tile[0]) { + for (index_type j = tile_id1; j < m_policy.m_tile_end[1]; + j += numbl1) { + const index_type offset_1 = + j * m_policy.m_tile[1] + thr_id1 + + static_cast(m_policy.m_lower[1]); + if (offset_1 < m_policy.m_upper[1] && + thr_id1 < m_policy.m_tile[1]) { + for (index_type tile_id2 = static_cast(hipBlockIdx_y); + tile_id2 < m_policy.m_tile_end[2]; + tile_id2 += hipGridDim_y) { + const index_type offset_2 = + tile_id2 * m_policy.m_tile[2] + + static_cast(hipThreadIdx_y) + + static_cast(m_policy.m_lower[2]); + if (offset_2 < m_policy.m_upper[2] && + static_cast(hipThreadIdx_y) < + m_policy.m_tile[2]) { + for (index_type tile_id3 = + static_cast(hipBlockIdx_z); + tile_id3 < m_policy.m_tile_end[3]; + tile_id3 += hipGridDim_z) { + const index_type offset_3 = + tile_id3 * m_policy.m_tile[3] + + static_cast(hipThreadIdx_z) + + static_cast(m_policy.m_lower[3]); + if (offset_3 < m_policy.m_upper[3] && + static_cast(hipThreadIdx_z) < + m_policy.m_tile[3]) { + m_func(offset_0, offset_1, offset_2, offset_3); + } + } + } + } + } + } + } + } + } + } // end exec_range + + private: + const PolicyType& m_policy; + const Functor& m_func; +}; + +// Specializations for void tag type +template +struct DeviceIterateTile<4, PolicyType, Functor, Tag> { + using index_type = typename PolicyType::index_type; + + KOKKOS_INLINE_FUNCTION + DeviceIterateTile(const PolicyType& policy_, const Functor& f_) + : m_policy(policy_), m_func(f_) {} + + static constexpr index_type max_blocks = 65535; + + KOKKOS_INLINE_FUNCTION + void exec_range() const { + if (PolicyType::inner_direction == PolicyType::Left) { + const index_type temp0 = m_policy.m_tile_end[0]; + const index_type temp1 = m_policy.m_tile_end[1]; + const index_type numbl0 = (temp0 <= max_blocks ? temp0 : max_blocks); + const index_type numbl1 = + (temp0 * temp1 > max_blocks + ? static_cast(max_blocks / numbl0) + : (temp1 <= max_blocks ? temp1 : max_blocks)); + + const index_type tile_id0 = + static_cast(hipBlockIdx_x) % numbl0; + const index_type tile_id1 = + static_cast(hipBlockIdx_x) / numbl0; + const index_type thr_id0 = + static_cast(hipThreadIdx_x) % m_policy.m_tile[0]; + const index_type thr_id1 = + static_cast(hipThreadIdx_x) / m_policy.m_tile[0]; + + for (index_type tile_id3 = static_cast(hipBlockIdx_z); + tile_id3 < m_policy.m_tile_end[3]; tile_id3 += hipGridDim_z) { + const index_type offset_3 = + tile_id3 * m_policy.m_tile[3] + + static_cast(hipThreadIdx_z) + + static_cast(m_policy.m_lower[3]); + if (offset_3 < m_policy.m_upper[3] && + static_cast(hipThreadIdx_z) < m_policy.m_tile[3]) { + for (index_type tile_id2 = static_cast(hipBlockIdx_y); + tile_id2 < m_policy.m_tile_end[2]; tile_id2 += hipGridDim_y) { + const index_type offset_2 = + tile_id2 * m_policy.m_tile[2] + + static_cast(hipThreadIdx_y) + + static_cast(m_policy.m_lower[2]); + if (offset_2 < m_policy.m_upper[2] && + static_cast(hipThreadIdx_y) < m_policy.m_tile[2]) { + for (index_type j = tile_id1; j < m_policy.m_tile_end[1]; + j += numbl1) { + const index_type offset_1 = + j * m_policy.m_tile[1] + thr_id1 + + static_cast(m_policy.m_lower[1]); + if (offset_1 < m_policy.m_upper[1] && + thr_id1 < m_policy.m_tile[1]) { + for (index_type i = tile_id0; i < m_policy.m_tile_end[0]; + i += numbl0) { + const index_type offset_0 = + i * m_policy.m_tile[0] + thr_id0 + + static_cast(m_policy.m_lower[0]); + if (offset_0 < m_policy.m_upper[0] && + thr_id0 < m_policy.m_tile[0]) { + m_func(Tag(), offset_0, offset_1, offset_2, offset_3); + } + } + } + } + } + } + } + } + } else { + const index_type temp0 = m_policy.m_tile_end[0]; + const index_type temp1 = m_policy.m_tile_end[1]; + const index_type numbl1 = (temp1 <= max_blocks ? temp1 : max_blocks); + const index_type numbl0 = + (temp0 * temp1 > max_blocks + ? index_type(max_blocks / numbl1) + : (temp0 <= max_blocks ? temp0 : max_blocks)); + + const index_type tile_id0 = + static_cast(hipBlockIdx_x) / numbl1; + const index_type tile_id1 = + static_cast(hipBlockIdx_x) % numbl1; + const index_type thr_id0 = + static_cast(hipThreadIdx_x) / m_policy.m_tile[1]; + const index_type thr_id1 = + static_cast(hipThreadIdx_x) % m_policy.m_tile[1]; + + for (index_type i = tile_id0; i < m_policy.m_tile_end[0]; i += numbl0) { + const index_type offset_0 = + i * m_policy.m_tile[0] + thr_id0 + + static_cast(m_policy.m_lower[0]); + if (offset_0 < m_policy.m_upper[0] && thr_id0 < m_policy.m_tile[0]) { + for (index_type j = tile_id1; j < m_policy.m_tile_end[1]; + j += numbl1) { + const index_type offset_1 = + tile_id1 * m_policy.m_tile[1] + thr_id1 + + static_cast(m_policy.m_lower[1]); + if (offset_1 < m_policy.m_upper[1] && + thr_id1 < m_policy.m_tile[1]) { + for (index_type tile_id2 = static_cast(hipBlockIdx_y); + tile_id2 < m_policy.m_tile_end[2]; + tile_id2 += hipGridDim_y) { + const index_type offset_2 = + tile_id2 * m_policy.m_tile[2] + + static_cast(hipThreadIdx_y) + + static_cast(m_policy.m_lower[2]); + if (offset_2 < m_policy.m_upper[2] && + static_cast(hipThreadIdx_y) < + m_policy.m_tile[2]) { + for (index_type tile_id3 = + static_cast(hipBlockIdx_z); + tile_id3 < m_policy.m_tile_end[3]; + tile_id3 += hipGridDim_z) { + const index_type offset_3 = + tile_id3 * m_policy.m_tile[3] + + static_cast(hipThreadIdx_z) + + static_cast(m_policy.m_lower[3]); + if (offset_3 < m_policy.m_upper[3] && + static_cast(hipThreadIdx_z) < + m_policy.m_tile[3]) { + m_func(Tag(), offset_0, offset_1, offset_2, offset_3); + } + } + } + } + } + } + } + } + } + } // end exec_range + + private: + const PolicyType& m_policy; + const Functor& m_func; +}; + +// Rank 5 +// Specializations for void tag type +template +struct DeviceIterateTile<5, PolicyType, Functor, void> { + using index_type = typename PolicyType::index_type; + + __device__ DeviceIterateTile(const PolicyType& policy_, const Functor& f_) + : m_policy(policy_), m_func(f_) {} + + static constexpr index_type max_blocks = 65535; + + KOKKOS_INLINE_FUNCTION + void exec_range() const { + // LL + if (PolicyType::inner_direction == PolicyType::Left) { + index_type temp0 = m_policy.m_tile_end[0]; + index_type temp1 = m_policy.m_tile_end[1]; + const index_type numbl0 = (temp0 <= max_blocks ? temp0 : max_blocks); + const index_type numbl1 = + (temp0 * temp1 > max_blocks + ? index_type(max_blocks / numbl0) + : (temp1 <= max_blocks ? temp1 : max_blocks)); + + const index_type tile_id0 = + static_cast(hipBlockIdx_x) % numbl0; + const index_type tile_id1 = + static_cast(hipBlockIdx_x) / numbl0; + const index_type thr_id0 = + static_cast(hipThreadIdx_x) % m_policy.m_tile[0]; + const index_type thr_id1 = + static_cast(hipThreadIdx_x) / m_policy.m_tile[0]; + + temp0 = m_policy.m_tile_end[2]; + temp1 = m_policy.m_tile_end[3]; + const index_type numbl2 = (temp0 <= max_blocks ? temp0 : max_blocks); + const index_type numbl3 = + (temp0 * temp1 > max_blocks + ? index_type(max_blocks / numbl2) + : (temp1 <= max_blocks ? temp1 : max_blocks)); + + const index_type tile_id2 = + static_cast(hipBlockIdx_y) % numbl2; + const index_type tile_id3 = + static_cast(hipBlockIdx_y) / numbl2; + const index_type thr_id2 = + static_cast(hipThreadIdx_y) % m_policy.m_tile[2]; + const index_type thr_id3 = + static_cast(hipThreadIdx_y) / m_policy.m_tile[2]; + + for (index_type tile_id4 = static_cast(hipBlockIdx_z); + tile_id4 < m_policy.m_tile_end[4]; tile_id4 += hipGridDim_z) { + const index_type offset_4 = + tile_id4 * m_policy.m_tile[4] + + static_cast(hipThreadIdx_z) + + static_cast(m_policy.m_lower[4]); + if (offset_4 < m_policy.m_upper[4] && + static_cast(hipThreadIdx_z) < m_policy.m_tile[4]) { + for (index_type l = tile_id3; l < m_policy.m_tile_end[3]; + l += numbl3) { + const index_type offset_3 = + l * m_policy.m_tile[3] + thr_id3 + + static_cast(m_policy.m_lower[3]); + if (offset_3 < m_policy.m_upper[3] && + thr_id3 < m_policy.m_tile[3]) { + for (index_type k = tile_id2; k < m_policy.m_tile_end[2]; + k += numbl2) { + const index_type offset_2 = + k * m_policy.m_tile[2] + thr_id2 + + static_cast(m_policy.m_lower[2]); + if (offset_2 < m_policy.m_upper[2] && + thr_id2 < m_policy.m_tile[2]) { + for (index_type j = tile_id1; j < m_policy.m_tile_end[1]; + j += numbl1) { + const index_type offset_1 = + j * m_policy.m_tile[1] + thr_id1 + + static_cast(m_policy.m_lower[1]); + if (offset_1 < m_policy.m_upper[1] && + thr_id1 < m_policy.m_tile[1]) { + for (index_type i = tile_id0; i < m_policy.m_tile_end[0]; + i += numbl0) { + const index_type offset_0 = + i * m_policy.m_tile[0] + thr_id0 + + static_cast(m_policy.m_lower[0]); + if (offset_0 < m_policy.m_upper[0] && + thr_id0 < m_policy.m_tile[0]) { + m_func(offset_0, offset_1, offset_2, offset_3, + offset_4); + } + } + } + } + } + } + } + } + } + } + } + // LR + else { + index_type temp0 = m_policy.m_tile_end[0]; + index_type temp1 = m_policy.m_tile_end[1]; + const index_type numbl1 = (temp1 <= max_blocks ? temp1 : max_blocks); + const index_type numbl0 = + (temp0 * temp1 > max_blocks + ? index_type(max_blocks / numbl1) + : (temp0 <= max_blocks ? temp0 : max_blocks)); + + const index_type tile_id0 = + static_cast(hipBlockIdx_x) / numbl1; + const index_type tile_id1 = + static_cast(hipBlockIdx_x) % numbl1; + const index_type thr_id0 = + static_cast(hipThreadIdx_x) / m_policy.m_tile[1]; + const index_type thr_id1 = + static_cast(hipThreadIdx_x) % m_policy.m_tile[1]; + + temp0 = m_policy.m_tile_end[2]; + temp1 = m_policy.m_tile_end[3]; + const index_type numbl3 = (temp1 <= max_blocks ? temp1 : max_blocks); + const index_type numbl2 = + (temp0 * temp1 > max_blocks + ? index_type(max_blocks / numbl3) + : (temp0 <= max_blocks ? temp0 : max_blocks)); + + const index_type tile_id2 = + static_cast(hipBlockIdx_y) / numbl3; + const index_type tile_id3 = + static_cast(hipBlockIdx_y) % numbl3; + const index_type thr_id2 = + static_cast(hipThreadIdx_y) / m_policy.m_tile[3]; + const index_type thr_id3 = + static_cast(hipThreadIdx_y) % m_policy.m_tile[3]; + + for (index_type i = tile_id0; i < m_policy.m_tile_end[0]; i += numbl0) { + const index_type offset_0 = + i * m_policy.m_tile[0] + thr_id0 + + static_cast(m_policy.m_lower[0]); + if (offset_0 < m_policy.m_upper[0] && thr_id0 < m_policy.m_tile[0]) { + for (index_type j = tile_id1; j < m_policy.m_tile_end[1]; + j += numbl1) { + const index_type offset_1 = + j * m_policy.m_tile[1] + thr_id1 + + static_cast(m_policy.m_lower[1]); + if (offset_1 < m_policy.m_upper[1] && + thr_id1 < m_policy.m_tile[1]) { + for (index_type k = tile_id2; k < m_policy.m_tile_end[2]; + k += numbl2) { + const index_type offset_2 = + k * m_policy.m_tile[2] + thr_id2 + + static_cast(m_policy.m_lower[2]); + if (offset_2 < m_policy.m_upper[2] && + thr_id2 < m_policy.m_tile[2]) { + for (index_type l = tile_id3; l < m_policy.m_tile_end[3]; + l += numbl3) { + const index_type offset_3 = + l * m_policy.m_tile[3] + thr_id3 + + static_cast(m_policy.m_lower[3]); + if (offset_3 < m_policy.m_upper[3] && + thr_id3 < m_policy.m_tile[3]) { + for (index_type tile_id4 = + static_cast(hipBlockIdx_z); + tile_id4 < m_policy.m_tile_end[4]; + tile_id4 += hipGridDim_z) { + const index_type offset_4 = + tile_id4 * m_policy.m_tile[4] + + static_cast(hipThreadIdx_z) + + static_cast(m_policy.m_lower[4]); + if (offset_4 < m_policy.m_upper[4] && + static_cast(hipThreadIdx_z) < + m_policy.m_tile[4]) { + m_func(offset_0, offset_1, offset_2, offset_3, + offset_4); + } + } + } + } + } + } + } + } + } + } + } + } // end exec_range + + private: + const PolicyType& m_policy; + const Functor& m_func; +}; + +// Specializations for tag type +template +struct DeviceIterateTile<5, PolicyType, Functor, Tag> { + using index_type = typename PolicyType::index_type; + + KOKKOS_INLINE_FUNCTION + DeviceIterateTile(const PolicyType& policy_, const Functor& f_) + : m_policy(policy_), m_func(f_) {} + + static constexpr index_type max_blocks = 65535; + + KOKKOS_INLINE_FUNCTION + void exec_range() const { + // LL + if (PolicyType::inner_direction == PolicyType::Left) { + index_type temp0 = m_policy.m_tile_end[0]; + index_type temp1 = m_policy.m_tile_end[1]; + const index_type numbl0 = (temp0 <= max_blocks ? temp0 : max_blocks); + const index_type numbl1 = + (temp0 * temp1 > max_blocks + ? index_type(max_blocks / numbl0) + : (temp1 <= max_blocks ? temp1 : max_blocks)); + + const index_type tile_id0 = + static_cast(hipBlockIdx_x) % numbl0; + const index_type tile_id1 = + static_cast(hipBlockIdx_x) / numbl0; + const index_type thr_id0 = + static_cast(hipThreadIdx_x) % m_policy.m_tile[0]; + const index_type thr_id1 = + static_cast(hipThreadIdx_x) / m_policy.m_tile[0]; + + temp0 = m_policy.m_tile_end[2]; + temp1 = m_policy.m_tile_end[3]; + const index_type numbl2 = (temp0 <= max_blocks ? temp0 : max_blocks); + const index_type numbl3 = + (temp0 * temp1 > max_blocks + ? index_type(max_blocks / numbl2) + : (temp1 <= max_blocks ? temp1 : max_blocks)); + + const index_type tile_id2 = + static_cast(hipBlockIdx_y) % numbl2; + const index_type tile_id3 = + static_cast(hipBlockIdx_y) / numbl2; + const index_type thr_id2 = + static_cast(hipThreadIdx_y) % m_policy.m_tile[2]; + const index_type thr_id3 = + static_cast(hipThreadIdx_y) / m_policy.m_tile[2]; + + for (index_type tile_id4 = static_cast(hipBlockIdx_z); + tile_id4 < m_policy.m_tile_end[4]; tile_id4 += hipGridDim_z) { + const index_type offset_4 = + tile_id4 * m_policy.m_tile[4] + + static_cast(hipThreadIdx_z) + + static_cast(m_policy.m_lower[4]); + if (offset_4 < m_policy.m_upper[4] && + static_cast(hipThreadIdx_z) < m_policy.m_tile[4]) { + for (index_type l = tile_id3; l < m_policy.m_tile_end[3]; + l += numbl3) { + const index_type offset_3 = + l * m_policy.m_tile[3] + thr_id3 + + static_cast(m_policy.m_lower[3]); + if (offset_3 < m_policy.m_upper[3] && + thr_id3 < m_policy.m_tile[3]) { + for (index_type k = tile_id2; k < m_policy.m_tile_end[2]; + k += numbl2) { + const index_type offset_2 = + k * m_policy.m_tile[2] + thr_id2 + + static_cast(m_policy.m_lower[2]); + if (offset_2 < m_policy.m_upper[2] && + thr_id2 < m_policy.m_tile[2]) { + for (index_type j = tile_id1; j < m_policy.m_tile_end[1]; + j += numbl1) { + const index_type offset_1 = + j * m_policy.m_tile[1] + thr_id1 + + static_cast(m_policy.m_lower[1]); + if (offset_1 < m_policy.m_upper[1] && + thr_id1 < m_policy.m_tile[1]) { + for (index_type i = tile_id0; i < m_policy.m_tile_end[0]; + i += numbl0) { + const index_type offset_0 = + i * m_policy.m_tile[0] + thr_id0 + + static_cast(m_policy.m_lower[0]); + if (offset_0 < m_policy.m_upper[0] && + thr_id0 < m_policy.m_tile[0]) { + m_func(Tag(), offset_0, offset_1, offset_2, offset_3, + offset_4); + } + } + } + } + } + } + } + } + } + } + } + // LR + else { + index_type temp0 = m_policy.m_tile_end[0]; + index_type temp1 = m_policy.m_tile_end[1]; + const index_type numbl1 = (temp1 <= max_blocks ? temp1 : max_blocks); + const index_type numbl0 = + (temp0 * temp1 > max_blocks + ? static_cast(max_blocks / numbl1) + : (temp0 <= max_blocks ? temp0 : max_blocks)); + + const index_type tile_id0 = + static_cast(hipBlockIdx_x) / numbl1; + const index_type tile_id1 = + static_cast(hipBlockIdx_x) % numbl1; + const index_type thr_id0 = + static_cast(hipThreadIdx_x) / m_policy.m_tile[1]; + const index_type thr_id1 = + static_cast(hipThreadIdx_x) % m_policy.m_tile[1]; + + temp0 = m_policy.m_tile_end[2]; + temp1 = m_policy.m_tile_end[3]; + const index_type numbl3 = (temp1 <= max_blocks ? temp1 : max_blocks); + const index_type numbl2 = + (temp0 * temp1 > max_blocks + ? index_type(max_blocks / numbl3) + : (temp0 <= max_blocks ? temp0 : max_blocks)); + + const index_type tile_id2 = + static_cast(hipBlockIdx_y) / numbl3; + const index_type tile_id3 = + static_cast(hipBlockIdx_y) % numbl3; + const index_type thr_id2 = + static_cast(hipThreadIdx_y) / m_policy.m_tile[3]; + const index_type thr_id3 = + static_cast(hipThreadIdx_y) % m_policy.m_tile[3]; + + for (index_type i = tile_id0; i < m_policy.m_tile_end[0]; i += numbl0) { + const index_type offset_0 = + i * m_policy.m_tile[0] + thr_id0 + + static_cast(m_policy.m_lower[0]); + if (offset_0 < m_policy.m_upper[0] && thr_id0 < m_policy.m_tile[0]) { + for (index_type j = tile_id1; j < m_policy.m_tile_end[1]; + j += numbl1) { + const index_type offset_1 = + j * m_policy.m_tile[1] + thr_id1 + + static_cast(m_policy.m_lower[1]); + if (offset_1 < m_policy.m_upper[1] && + thr_id1 < m_policy.m_tile[1]) { + for (index_type k = tile_id2; k < m_policy.m_tile_end[2]; + k += numbl2) { + const index_type offset_2 = + k * m_policy.m_tile[2] + thr_id2 + + static_cast(m_policy.m_lower[2]); + if (offset_2 < m_policy.m_upper[2] && + thr_id2 < m_policy.m_tile[2]) { + for (index_type l = tile_id3; l < m_policy.m_tile_end[3]; + l += numbl3) { + const index_type offset_3 = + l * m_policy.m_tile[3] + thr_id3 + + static_cast(m_policy.m_lower[3]); + if (offset_3 < m_policy.m_upper[3] && + thr_id3 < m_policy.m_tile[3]) { + for (index_type tile_id4 = + static_cast(hipBlockIdx_z); + tile_id4 < m_policy.m_tile_end[4]; + tile_id4 += hipGridDim_z) { + const index_type offset_4 = + tile_id4 * m_policy.m_tile[4] + + static_cast(hipThreadIdx_z) + + static_cast(m_policy.m_lower[4]); + if (offset_4 < m_policy.m_upper[4] && + static_cast(hipThreadIdx_z) < + m_policy.m_tile[4]) { + m_func(Tag(), offset_0, offset_1, offset_2, offset_3, + offset_4); + } + } + } + } + } + } + } + } + } + } + } + } // end exec_range + + private: + const PolicyType& m_policy; + const Functor& m_func; +}; + +// Rank 6 +// Specializations for void tag type +template +struct DeviceIterateTile<6, PolicyType, Functor, void> { + using index_type = typename PolicyType::index_type; + + __device__ DeviceIterateTile(const PolicyType& rp_, const Functor& f_) + : m_policy(rp_), m_func(f_) {} + + static constexpr index_type max_blocks = 65535; + + KOKKOS_INLINE_FUNCTION + void exec_range() const { + // LL + if (PolicyType::inner_direction == PolicyType::Left) { + index_type temp0 = m_policy.m_tile_end[0]; + index_type temp1 = m_policy.m_tile_end[1]; + const index_type numbl0 = (temp0 <= max_blocks ? temp0 : max_blocks); + const index_type numbl1 = + (temp0 * temp1 > max_blocks + ? static_cast(max_blocks / numbl0) + : (temp1 <= max_blocks ? temp1 : max_blocks)); + + const index_type tile_id0 = + static_cast(hipBlockIdx_x) % numbl0; + const index_type tile_id1 = + static_cast(hipBlockIdx_x) / numbl0; + const index_type thr_id0 = + static_cast(hipThreadIdx_x) % m_policy.m_tile[0]; + const index_type thr_id1 = + static_cast(hipThreadIdx_x) / m_policy.m_tile[0]; + + temp0 = m_policy.m_tile_end[2]; + temp1 = m_policy.m_tile_end[3]; + const index_type numbl2 = (temp0 <= max_blocks ? temp0 : max_blocks); + const index_type numbl3 = + (temp0 * temp1 > max_blocks + ? index_type(max_blocks / numbl2) + : (temp1 <= max_blocks ? temp1 : max_blocks)); + + const index_type tile_id2 = + static_cast(hipBlockIdx_y) % numbl2; + const index_type tile_id3 = + static_cast(hipBlockIdx_y) / numbl2; + const index_type thr_id2 = + static_cast(hipThreadIdx_y) % m_policy.m_tile[2]; + const index_type thr_id3 = + static_cast(hipThreadIdx_y) / m_policy.m_tile[2]; + + temp0 = m_policy.m_tile_end[4]; + temp1 = m_policy.m_tile_end[5]; + const index_type numbl4 = (temp0 <= max_blocks ? temp0 : max_blocks); + const index_type numbl5 = + (temp0 * temp1 > max_blocks + ? static_cast(max_blocks / numbl4) + : (temp1 <= max_blocks ? temp1 : max_blocks)); + + const index_type tile_id4 = + static_cast(hipBlockIdx_z) % numbl4; + const index_type tile_id5 = + static_cast(hipBlockIdx_z) / numbl4; + const index_type thr_id4 = + static_cast(hipThreadIdx_z) % m_policy.m_tile[4]; + const index_type thr_id5 = + static_cast(hipThreadIdx_z) / m_policy.m_tile[4]; + + for (index_type n = tile_id5; n < m_policy.m_tile_end[5]; n += numbl5) { + const index_type offset_5 = + n * m_policy.m_tile[5] + thr_id5 + + static_cast(m_policy.m_lower[5]); + if (offset_5 < m_policy.m_upper[5] && thr_id5 < m_policy.m_tile[5]) { + for (index_type m = tile_id4; m < m_policy.m_tile_end[4]; + m += numbl4) { + const index_type offset_4 = + m * m_policy.m_tile[4] + thr_id4 + + static_cast(m_policy.m_lower[4]); + if (offset_4 < m_policy.m_upper[4] && + thr_id4 < m_policy.m_tile[4]) { + for (index_type l = tile_id3; l < m_policy.m_tile_end[3]; + l += numbl3) { + const index_type offset_3 = + l * m_policy.m_tile[3] + thr_id3 + + static_cast(m_policy.m_lower[3]); + if (offset_3 < m_policy.m_upper[3] && + thr_id3 < m_policy.m_tile[3]) { + for (index_type k = tile_id2; k < m_policy.m_tile_end[2]; + k += numbl2) { + const index_type offset_2 = + k * m_policy.m_tile[2] + thr_id2 + + static_cast(m_policy.m_lower[2]); + if (offset_2 < m_policy.m_upper[2] && + thr_id2 < m_policy.m_tile[2]) { + for (index_type j = tile_id1; j < m_policy.m_tile_end[1]; + j += numbl1) { + const index_type offset_1 = + j * m_policy.m_tile[1] + thr_id1 + + static_cast(m_policy.m_lower[1]); + if (offset_1 < m_policy.m_upper[1] && + thr_id1 < m_policy.m_tile[1]) { + for (index_type i = tile_id0; + i < m_policy.m_tile_end[0]; i += numbl0) { + const index_type offset_0 = + i * m_policy.m_tile[0] + thr_id0 + + static_cast(m_policy.m_lower[0]); + if (offset_0 < m_policy.m_upper[0] && + thr_id0 < m_policy.m_tile[0]) { + m_func(offset_0, offset_1, offset_2, offset_3, + offset_4, offset_5); + } + } + } + } + } + } + } + } + } + } + } + } + } + // LR + else { + index_type temp0 = m_policy.m_tile_end[0]; + index_type temp1 = m_policy.m_tile_end[1]; + const index_type numbl1 = (temp1 <= max_blocks ? temp1 : max_blocks); + const index_type numbl0 = + (temp0 * temp1 > max_blocks + ? static_cast(max_blocks / numbl1) + : (temp0 <= max_blocks ? temp0 : max_blocks)); + + const index_type tile_id0 = + static_cast(hipBlockIdx_x) / numbl1; + const index_type tile_id1 = + static_cast(hipBlockIdx_x) % numbl1; + const index_type thr_id0 = + static_cast(hipThreadIdx_x) / m_policy.m_tile[1]; + const index_type thr_id1 = + static_cast(hipThreadIdx_x) % m_policy.m_tile[1]; + + temp0 = m_policy.m_tile_end[2]; + temp1 = m_policy.m_tile_end[3]; + const index_type numbl3 = (temp1 <= max_blocks ? temp1 : max_blocks); + const index_type numbl2 = + (temp0 * temp1 > max_blocks + ? index_type(max_blocks / numbl3) + : (temp0 <= max_blocks ? temp0 : max_blocks)); + + const index_type tile_id2 = + static_cast(hipBlockIdx_y) / numbl3; + const index_type tile_id3 = + static_cast(hipBlockIdx_y) % numbl3; + const index_type thr_id2 = + static_cast(hipThreadIdx_y) / m_policy.m_tile[3]; + const index_type thr_id3 = + static_cast(hipThreadIdx_y) % m_policy.m_tile[3]; + + temp0 = m_policy.m_tile_end[4]; + temp1 = m_policy.m_tile_end[5]; + const index_type numbl5 = (temp1 <= max_blocks ? temp1 : max_blocks); + const index_type numbl4 = + (temp0 * temp1 > max_blocks + ? index_type(max_blocks / numbl5) + : (temp0 <= max_blocks ? temp0 : max_blocks)); + + const index_type tile_id4 = + static_cast(hipBlockIdx_z) / numbl5; + const index_type tile_id5 = + static_cast(hipBlockIdx_z) % numbl5; + const index_type thr_id4 = + static_cast(hipThreadIdx_z) / m_policy.m_tile[5]; + const index_type thr_id5 = + static_cast(hipThreadIdx_z) % m_policy.m_tile[5]; + + for (index_type i = tile_id0; i < m_policy.m_tile_end[0]; i += numbl0) { + const index_type offset_0 = + i * m_policy.m_tile[0] + thr_id0 + + static_cast(m_policy.m_lower[0]); + if (offset_0 < m_policy.m_upper[0] && thr_id0 < m_policy.m_tile[0]) { + for (index_type j = tile_id1; j < m_policy.m_tile_end[1]; + j += numbl1) { + const index_type offset_1 = + j * m_policy.m_tile[1] + thr_id1 + + static_cast(m_policy.m_lower[1]); + if (offset_1 < m_policy.m_upper[1] && + thr_id1 < m_policy.m_tile[1]) { + for (index_type k = tile_id2; k < m_policy.m_tile_end[2]; + k += numbl2) { + const index_type offset_2 = + k * m_policy.m_tile[2] + thr_id2 + + static_cast(m_policy.m_lower[2]); + if (offset_2 < m_policy.m_upper[2] && + thr_id2 < m_policy.m_tile[2]) { + for (index_type l = tile_id3; l < m_policy.m_tile_end[3]; + l += numbl3) { + const index_type offset_3 = + l * m_policy.m_tile[3] + thr_id3 + + static_cast(m_policy.m_lower[3]); + if (offset_3 < m_policy.m_upper[3] && + thr_id3 < m_policy.m_tile[3]) { + for (index_type m = tile_id4; m < m_policy.m_tile_end[4]; + m += numbl4) { + const index_type offset_4 = + m * m_policy.m_tile[4] + thr_id4 + + static_cast(m_policy.m_lower[4]); + if (offset_4 < m_policy.m_upper[4] && + thr_id4 < m_policy.m_tile[4]) { + for (index_type n = tile_id5; + n < m_policy.m_tile_end[5]; n += numbl5) { + const index_type offset_5 = + n * m_policy.m_tile[5] + thr_id5 + + static_cast(m_policy.m_lower[5]); + if (offset_5 < m_policy.m_upper[5] && + thr_id5 < m_policy.m_tile[5]) { + m_func(offset_0, offset_1, offset_2, offset_3, + offset_4, offset_5); + } + } + } + } + } + } + } + } + } + } + } + } + } + } // end exec_range + + private: + const PolicyType& m_policy; + const Functor& m_func; +}; + +// Specializations for tag type +template +struct DeviceIterateTile<6, PolicyType, Functor, Tag> { + using index_type = typename PolicyType::index_type; + + KOKKOS_INLINE_FUNCTION + DeviceIterateTile(const PolicyType& policy_, const Functor& f_) + : m_policy(policy_), m_func(f_) {} + + static constexpr index_type max_blocks = 65535; + + KOKKOS_INLINE_FUNCTION + void exec_range() const { + // LL + if (PolicyType::inner_direction == PolicyType::Left) { + index_type temp0 = m_policy.m_tile_end[0]; + index_type temp1 = m_policy.m_tile_end[1]; + const index_type numbl0 = (temp0 <= max_blocks ? temp0 : max_blocks); + const index_type numbl1 = + (temp0 * temp1 > max_blocks + ? static_cast(max_blocks / numbl0) + : (temp1 <= max_blocks ? temp1 : max_blocks)); + + const index_type tile_id0 = + static_cast(hipBlockIdx_x) % numbl0; + const index_type tile_id1 = + static_cast(hipBlockIdx_x) / numbl0; + const index_type thr_id0 = + static_cast(hipThreadIdx_x) % m_policy.m_tile[0]; + const index_type thr_id1 = + static_cast(hipThreadIdx_x) / m_policy.m_tile[0]; + + temp0 = m_policy.m_tile_end[2]; + temp1 = m_policy.m_tile_end[3]; + const index_type numbl2 = (temp0 <= max_blocks ? temp0 : max_blocks); + const index_type numbl3 = + (temp0 * temp1 > max_blocks + ? static_cast(max_blocks / numbl2) + : (temp1 <= max_blocks ? temp1 : max_blocks)); + + const index_type tile_id2 = + static_cast(hipBlockIdx_y) % numbl2; + const index_type tile_id3 = + static_cast(hipBlockIdx_y) / numbl2; + const index_type thr_id2 = + static_cast(hipThreadIdx_y) % m_policy.m_tile[2]; + const index_type thr_id3 = + static_cast(hipThreadIdx_y) / m_policy.m_tile[2]; + + temp0 = m_policy.m_tile_end[4]; + temp1 = m_policy.m_tile_end[5]; + const index_type numbl4 = (temp0 <= max_blocks ? temp0 : max_blocks); + const index_type numbl5 = + (temp0 * temp1 > max_blocks + ? static_cast(max_blocks / numbl4) + : (temp1 <= max_blocks ? temp1 : max_blocks)); + + const index_type tile_id4 = + static_cast(hipBlockIdx_z) % numbl4; + const index_type tile_id5 = + static_cast(hipBlockIdx_z) / numbl4; + const index_type thr_id4 = + static_cast(hipThreadIdx_z) % m_policy.m_tile[4]; + const index_type thr_id5 = + static_cast(hipThreadIdx_z) / m_policy.m_tile[4]; + + for (index_type n = tile_id5; n < m_policy.m_tile_end[5]; n += numbl5) { + const index_type offset_5 = + n * m_policy.m_tile[5] + thr_id5 + + static_cast(m_policy.m_lower[5]); + if (offset_5 < m_policy.m_upper[5] && thr_id5 < m_policy.m_tile[5]) { + for (index_type m = tile_id4; m < m_policy.m_tile_end[4]; + m += numbl4) { + const index_type offset_4 = + m * m_policy.m_tile[4] + thr_id4 + + static_cast(m_policy.m_lower[4]); + if (offset_4 < m_policy.m_upper[4] && + thr_id4 < m_policy.m_tile[4]) { + for (index_type l = tile_id3; l < m_policy.m_tile_end[3]; + l += numbl3) { + const index_type offset_3 = + l * m_policy.m_tile[3] + thr_id3 + + static_cast(m_policy.m_lower[3]); + if (offset_3 < m_policy.m_upper[3] && + thr_id3 < m_policy.m_tile[3]) { + for (index_type k = tile_id2; k < m_policy.m_tile_end[2]; + k += numbl2) { + const index_type offset_2 = + k * m_policy.m_tile[2] + thr_id2 + + static_cast(m_policy.m_lower[2]); + if (offset_2 < m_policy.m_upper[2] && + thr_id2 < m_policy.m_tile[2]) { + for (index_type j = tile_id1; j < m_policy.m_tile_end[1]; + j += numbl1) { + const index_type offset_1 = + j * m_policy.m_tile[1] + thr_id1 + + static_cast(m_policy.m_lower[1]); + if (offset_1 < m_policy.m_upper[1] && + thr_id1 < m_policy.m_tile[1]) { + for (index_type i = tile_id0; + i < m_policy.m_tile_end[0]; i += numbl0) { + const index_type offset_0 = + i * m_policy.m_tile[0] + thr_id0 + + static_cast(m_policy.m_lower[0]); + if (offset_0 < m_policy.m_upper[0] && + thr_id0 < m_policy.m_tile[0]) { + m_func(Tag(), offset_0, offset_1, offset_2, + offset_3, offset_4, offset_5); + } + } + } + } + } + } + } + } + } + } + } + } + } + // LR + else { + index_type temp0 = m_policy.m_tile_end[0]; + index_type temp1 = m_policy.m_tile_end[1]; + const index_type numbl1 = (temp1 <= max_blocks ? temp1 : max_blocks); + const index_type numbl0 = + (temp0 * temp1 > max_blocks + ? static_cast(max_blocks / numbl1) + : (temp0 <= max_blocks ? temp0 : max_blocks)); + + const index_type tile_id0 = + static_cast(hipBlockIdx_x) / numbl1; + const index_type tile_id1 = + static_cast(hipBlockIdx_x) % numbl1; + const index_type thr_id0 = + static_cast(hipThreadIdx_x) / m_policy.m_tile[1]; + const index_type thr_id1 = + static_cast(hipThreadIdx_x) % m_policy.m_tile[1]; + + temp0 = m_policy.m_tile_end[2]; + temp1 = m_policy.m_tile_end[3]; + const index_type numbl3 = (temp1 <= max_blocks ? temp1 : max_blocks); + const index_type numbl2 = + (temp0 * temp1 > max_blocks + ? static_cast(max_blocks / numbl3) + : (temp0 <= max_blocks ? temp0 : max_blocks)); + + const index_type tile_id2 = + static_cast(hipBlockIdx_y) / numbl3; + const index_type tile_id3 = + static_cast(hipBlockIdx_y) % numbl3; + const index_type thr_id2 = + static_cast(hipThreadIdx_y) / m_policy.m_tile[3]; + const index_type thr_id3 = + static_cast(hipThreadIdx_y) % m_policy.m_tile[3]; + + temp0 = m_policy.m_tile_end[4]; + temp1 = m_policy.m_tile_end[5]; + const index_type numbl5 = (temp1 <= max_blocks ? temp1 : max_blocks); + const index_type numbl4 = + (temp0 * temp1 > max_blocks + ? static_cast(max_blocks / numbl5) + : (temp0 <= max_blocks ? temp0 : max_blocks)); + + const index_type tile_id4 = + static_cast(hipBlockIdx_z) / numbl5; + const index_type tile_id5 = + static_cast(hipBlockIdx_z) % numbl5; + const index_type thr_id4 = + static_cast(hipThreadIdx_z) / m_policy.m_tile[5]; + const index_type thr_id5 = + static_cast(hipThreadIdx_z) % m_policy.m_tile[5]; + + for (index_type i = tile_id0; i < m_policy.m_tile_end[0]; i += numbl0) { + const index_type offset_0 = + i * m_policy.m_tile[0] + thr_id0 + + static_cast(m_policy.m_lower[0]); + if (offset_0 < m_policy.m_upper[0] && thr_id0 < m_policy.m_tile[0]) { + for (index_type j = tile_id1; j < m_policy.m_tile_end[1]; + j += numbl1) { + const index_type offset_1 = + j * m_policy.m_tile[1] + thr_id1 + + static_cast(m_policy.m_lower[1]); + if (offset_1 < m_policy.m_upper[1] && + thr_id1 < m_policy.m_tile[1]) { + for (index_type k = tile_id2; k < m_policy.m_tile_end[2]; + k += numbl2) { + const index_type offset_2 = + k * m_policy.m_tile[2] + thr_id2 + + static_cast(m_policy.m_lower[2]); + if (offset_2 < m_policy.m_upper[2] && + thr_id2 < m_policy.m_tile[2]) { + for (index_type l = tile_id3; l < m_policy.m_tile_end[3]; + l += numbl3) { + const index_type offset_3 = + l * m_policy.m_tile[3] + thr_id3 + + static_cast(m_policy.m_lower[3]); + if (offset_3 < m_policy.m_upper[3] && + thr_id3 < m_policy.m_tile[3]) { + for (index_type m = tile_id4; m < m_policy.m_tile_end[4]; + m += numbl4) { + const index_type offset_4 = + m * m_policy.m_tile[4] + thr_id4 + + static_cast(m_policy.m_lower[4]); + if (offset_4 < m_policy.m_upper[4] && + thr_id4 < m_policy.m_tile[4]) { + for (index_type n = tile_id5; + n < m_policy.m_tile_end[5]; n += numbl5) { + const index_type offset_5 = + n * m_policy.m_tile[5] + thr_id5 + + static_cast(m_policy.m_lower[5]); + if (offset_5 < m_policy.m_upper[5] && + thr_id5 < m_policy.m_tile[5]) { + m_func(Tag(), offset_0, offset_1, offset_2, + offset_3, offset_4, offset_5); + } + } + } + } + } + } + } + } + } + } + } + } + } + } // end exec_range + + private: + const PolicyType& m_policy; + const Functor& m_func; +}; + +// ---------------------------------------------------------------------------------- + +namespace Reduce { + +template +using is_void = std::is_same; + +template +struct is_array_type : std::false_type { + using value_type = T; +}; + +template +struct is_array_type : std::true_type { + using value_type = T; +}; + +template +struct is_array_type : std::true_type { + using value_type = T; +}; + +// ------------------------------------------------------------------ // +template +struct DeviceIterateTile; + +// ParallelReduce iteration pattern +// Scalar reductions + +// num_blocks = min( num_tiles, max_num_blocks ); //i.e. determined by number of +// tiles and reduction algorithm constraints extract n-dim tile offsets (i.e. +// tile's global starting mulit-index) from the tileid = blockid using tile +// dimensions local indices within a tile extracted from (index_type)threadIdx_x +// using tile dims, constrained by blocksize combine tile and local id info for +// multi-dim global ids + +// Pattern: +// Each block+thread is responsible for a tile+local_id combo (additional when +// striding by num_blocks) +// 1. create offset arrays +// 2. loop over number of tiles, striding by griddim (equal to num tiles, or max +// num blocks) +// 3. temps set for tile_idx and thrd_idx, which will be modified +// 4. if LL vs LR: +// determine tile starting point offsets (multidim) +// determine local index offsets (multidim) +// concatentate tile offset + local offset for global multi-dim index +// if offset withinin range bounds AND local offset within tile bounds, call +// functor + +// ValueType = T +// Rank 2 +// Specializations for void tag type +template +struct DeviceIterateTile< + 2, PolicyType, Functor, void, ValueType, + typename std::enable_if::value>::type> { + using index_type = typename PolicyType::index_type; + + __device__ DeviceIterateTile(const PolicyType& rp_, const Functor& f_, + ValueType& v_) + : m_policy(rp_), m_func(f_), m_v(v_) {} + + KOKKOS_INLINE_FUNCTION + void exec_range() const { + if (static_cast(hipBlockIdx_x) < m_policy.m_num_tiles && + static_cast(hipThreadIdx_y) < m_policy.m_prod_tile_dims) { + index_type m_offset[PolicyType::rank]; // tile starting global id offset + index_type + m_local_offset[PolicyType::rank]; // tile starting global id offset + + for (index_type tileidx = static_cast(hipBlockIdx_x); + tileidx < m_policy.m_num_tiles; tileidx += hipGridDim_x) { + index_type tile_idx = + tileidx; // temp because tile_idx will be modified while + // determining tile starting point offsets + index_type thrd_idx = static_cast(hipThreadIdx_y); + bool in_bounds = true; + + // LL + if (PolicyType::inner_direction == PolicyType::Left) { + for (int i = 0; i < PolicyType::rank; ++i) { + // Deduce this blocks tile_id + m_offset[i] = + (tile_idx % m_policy.m_tile_end[i]) * m_policy.m_tile[i] + + m_policy.m_lower[i]; + tile_idx /= m_policy.m_tile_end[i]; + + m_local_offset[i] = (thrd_idx % m_policy.m_tile[i]); + thrd_idx /= m_policy.m_tile[i]; + + m_offset[i] += m_local_offset[i]; + if (!(m_offset[i] < m_policy.m_upper[i] && + m_local_offset[i] < m_policy.m_tile[i])) { + in_bounds &= false; + } + } + if (in_bounds) { + m_func(m_offset[0], m_offset[1], m_v); + } + } + // LR + else { + for (int i = PolicyType::rank - 1; i >= 0; --i) { + m_offset[i] = + (tile_idx % m_policy.m_tile_end[i]) * m_policy.m_tile[i] + + m_policy.m_lower[i]; + tile_idx /= m_policy.m_tile_end[i]; + + m_local_offset[i] = (thrd_idx % m_policy.m_tile[i]); + thrd_idx /= m_policy.m_tile[i]; + + m_offset[i] += m_local_offset[i]; + if (!(m_offset[i] < m_policy.m_upper[i] && + m_local_offset[i] < m_policy.m_tile[i])) { + in_bounds &= false; + } + } + if (in_bounds) { + m_func(m_offset[0], m_offset[1], m_v); + } + } + } + } + + } // end exec_range + + private: + const PolicyType& m_policy; + const Functor& m_func; + ValueType& m_v; +}; + +// Specializations for tag type +template +struct DeviceIterateTile< + 2, PolicyType, Functor, Tag, ValueType, + typename std::enable_if::value && + !is_void::value>::type> { + using index_type = typename PolicyType::index_type; + + KOKKOS_INLINE_FUNCTION + DeviceIterateTile(const PolicyType& rp_, const Functor& f_, ValueType& v_) + : m_policy(rp_), m_func(f_), m_v(v_) {} + + KOKKOS_INLINE_FUNCTION + void exec_range() const { + if (static_cast(hipBlockIdx_x) < m_policy.m_num_tiles && + static_cast(hipThreadIdx_y) < m_policy.m_prod_tile_dims) { + index_type m_offset[PolicyType::rank]; // tile starting global id offset + index_type + m_local_offset[PolicyType::rank]; // tile starting global id offset + + for (index_type tileidx = static_cast(hipBlockIdx_x); + tileidx < m_policy.m_num_tiles; tileidx += hipGridDim_x) { + index_type tile_idx = + tileidx; // temp because tile_idx will be modified while + // determining tile starting point offsets + index_type thrd_idx = static_cast(hipThreadIdx_y); + bool in_bounds = true; + + // LL + if (PolicyType::inner_direction == PolicyType::Left) { + for (int i = 0; i < PolicyType::rank; ++i) { + m_offset[i] = + (tile_idx % m_policy.m_tile_end[i]) * m_policy.m_tile[i] + + m_policy.m_lower[i]; + tile_idx /= m_policy.m_tile_end[i]; + + // tile-local indices identified with (index_type)threadIdx_y + m_local_offset[i] = (thrd_idx % m_policy.m_tile[i]); + thrd_idx /= m_policy.m_tile[i]; + + m_offset[i] += m_local_offset[i]; + if (!(m_offset[i] < m_policy.m_upper[i] && + m_local_offset[i] < m_policy.m_tile[i])) { + in_bounds &= false; + } + } + if (in_bounds) { + m_func(Tag(), m_offset[0], m_offset[1], m_v); + } + } + // LR + else { + for (int i = PolicyType::rank - 1; i >= 0; --i) { + m_offset[i] = + (tile_idx % m_policy.m_tile_end[i]) * m_policy.m_tile[i] + + m_policy.m_lower[i]; + tile_idx /= m_policy.m_tile_end[i]; + + // tile-local indices identified with (index_type)threadIdx_y + m_local_offset[i] = + (thrd_idx % + m_policy.m_tile[i]); // Move this to first computation, + // add to m_offset right away + thrd_idx /= m_policy.m_tile[i]; + + m_offset[i] += m_local_offset[i]; + if (!(m_offset[i] < m_policy.m_upper[i] && + m_local_offset[i] < m_policy.m_tile[i])) { + in_bounds &= false; + } + } + if (in_bounds) { + m_func(Tag(), m_offset[0], m_offset[1], m_v); + } + } + } + } + } // end exec_range + + private: + const PolicyType& m_policy; + const Functor& m_func; + ValueType& m_v; +}; + +// Rank 3 +// Specializations for void tag type +template +struct DeviceIterateTile< + 3, PolicyType, Functor, void, ValueType, + typename std::enable_if::value>::type> { + using index_type = typename PolicyType::index_type; + + __device__ DeviceIterateTile(const PolicyType& policy_, const Functor& f_, + ValueType& v_) + : m_policy(policy_), m_func(f_), m_v(v_) {} + + KOKKOS_INLINE_FUNCTION + void exec_range() const { + if (static_cast(hipBlockIdx_x) < m_policy.m_num_tiles && + static_cast(hipThreadIdx_y) < m_policy.m_prod_tile_dims) { + index_type m_offset[PolicyType::rank]; // tile starting global id offset + index_type + m_local_offset[PolicyType::rank]; // tile starting global id offset + + for (index_type tileidx = static_cast(hipBlockIdx_x); + tileidx < m_policy.m_num_tiles; tileidx += hipGridDim_x) { + index_type tile_idx = + tileidx; // temp because tile_idx will be modified while + // determining tile starting point offsets + index_type thrd_idx = static_cast(hipThreadIdx_y); + bool in_bounds = true; + + // LL + if (PolicyType::inner_direction == PolicyType::Left) { + for (int i = 0; i < PolicyType::rank; ++i) { + m_offset[i] = + (tile_idx % m_policy.m_tile_end[i]) * m_policy.m_tile[i] + + m_policy.m_lower[i]; + tile_idx /= m_policy.m_tile_end[i]; + + // tile-local indices identified with (index_type)threadIdx_y + m_local_offset[i] = (thrd_idx % m_policy.m_tile[i]); + thrd_idx /= m_policy.m_tile[i]; + + m_offset[i] += m_local_offset[i]; + if (!(m_offset[i] < m_policy.m_upper[i] && + m_local_offset[i] < m_policy.m_tile[i])) { + in_bounds &= false; + } + } + if (in_bounds) { + m_func(m_offset[0], m_offset[1], m_offset[2], m_v); + } + } + // LR + else { + for (int i = PolicyType::rank - 1; i >= 0; --i) { + m_offset[i] = + (tile_idx % m_policy.m_tile_end[i]) * m_policy.m_tile[i] + + m_policy.m_lower[i]; + tile_idx /= m_policy.m_tile_end[i]; + + // tile-local indices identified with (index_type)threadIdx_y + m_local_offset[i] = + (thrd_idx % + m_policy.m_tile[i]); // Move this to first computation, + // add to m_offset right away + thrd_idx /= m_policy.m_tile[i]; + + m_offset[i] += m_local_offset[i]; + if (!(m_offset[i] < m_policy.m_upper[i] && + m_local_offset[i] < m_policy.m_tile[i])) { + in_bounds &= false; + } + } + if (in_bounds) { + m_func(m_offset[0], m_offset[1], m_offset[2], m_v); + } + } + } + } + } // end exec_range + + private: + const PolicyType& m_policy; + const Functor& m_func; + ValueType& m_v; +}; + +// Specializations for void tag type +template +struct DeviceIterateTile< + 3, PolicyType, Functor, Tag, ValueType, + typename std::enable_if::value && + !is_void::value>::type> { + using index_type = typename PolicyType::index_type; + + KOKKOS_INLINE_FUNCTION + DeviceIterateTile(const PolicyType& policy_, const Functor& f_, ValueType& v_) + : m_policy(policy_), m_func(f_), m_v(v_) {} + + KOKKOS_INLINE_FUNCTION + void exec_range() const { + if (static_cast(hipBlockIdx_x) < m_policy.m_num_tiles && + static_cast(hipThreadIdx_y) < m_policy.m_prod_tile_dims) { + index_type m_offset[PolicyType::rank]; // tile starting global id offset + index_type + m_local_offset[PolicyType::rank]; // tile starting global id offset + + for (index_type tileidx = static_cast(hipBlockIdx_x); + tileidx < m_policy.m_num_tiles; tileidx += hipGridDim_x) { + index_type tile_idx = + tileidx; // temp because tile_idx will be modified while + // determining tile starting point offsets + index_type thrd_idx = static_cast(hipThreadIdx_y); + bool in_bounds = true; + + // LL + if (PolicyType::inner_direction == PolicyType::Left) { + for (int i = 0; i < PolicyType::rank; ++i) { + m_offset[i] = + (tile_idx % m_policy.m_tile_end[i]) * m_policy.m_tile[i] + + m_policy.m_lower[i]; + tile_idx /= m_policy.m_tile_end[i]; + + // tile-local indices identified with (index_type)threadIdx_y + m_local_offset[i] = (thrd_idx % m_policy.m_tile[i]); + thrd_idx /= m_policy.m_tile[i]; + + m_offset[i] += m_local_offset[i]; + if (!(m_offset[i] < m_policy.m_upper[i] && + m_local_offset[i] < m_policy.m_tile[i])) { + in_bounds &= false; + } + } + if (in_bounds) { + m_func(Tag(), m_offset[0], m_offset[1], m_offset[2], m_v); + } + } + // LR + else { + for (int i = PolicyType::rank - 1; i >= 0; --i) { + m_offset[i] = + (tile_idx % m_policy.m_tile_end[i]) * m_policy.m_tile[i] + + m_policy.m_lower[i]; + tile_idx /= m_policy.m_tile_end[i]; + + // tile-local indices identified with (index_type)threadIdx_y + m_local_offset[i] = + (thrd_idx % + m_policy.m_tile[i]); // Move this to first computation, + // add to m_offset right away + thrd_idx /= m_policy.m_tile[i]; + + m_offset[i] += m_local_offset[i]; + if (!(m_offset[i] < m_policy.m_upper[i] && + m_local_offset[i] < m_policy.m_tile[i])) { + in_bounds &= false; + } + } + if (in_bounds) { + m_func(Tag(), m_offset[0], m_offset[1], m_offset[2], m_v); + } + } + } + } + } // end exec_range + + private: + const PolicyType& m_policy; + const Functor& m_func; + ValueType& m_v; +}; + +// Rank 4 +// Specializations for void tag type +template +struct DeviceIterateTile< + 4, PolicyType, Functor, void, ValueType, + typename std::enable_if::value>::type> { + using index_type = typename PolicyType::index_type; + + __device__ DeviceIterateTile(const PolicyType& policy_, const Functor& f_, + ValueType& v_) + : m_policy(policy_), m_func(f_), m_v(v_) {} + + static constexpr index_type max_blocks = 65535; + + KOKKOS_INLINE_FUNCTION + void exec_range() const { + if (static_cast(hipBlockIdx_x) < m_policy.m_num_tiles && + static_cast(hipThreadIdx_y) < m_policy.m_prod_tile_dims) { + index_type m_offset[PolicyType::rank]; // tile starting global id offset + index_type + m_local_offset[PolicyType::rank]; // tile starting global id offset + + for (index_type tileidx = static_cast(hipBlockIdx_x); + tileidx < m_policy.m_num_tiles; tileidx += hipGridDim_x) { + index_type tile_idx = + tileidx; // temp because tile_idx will be modified while + // determining tile starting point offsets + index_type thrd_idx = static_cast(hipThreadIdx_y); + bool in_bounds = true; + + // LL + if (PolicyType::inner_direction == PolicyType::Left) { + for (int i = 0; i < PolicyType::rank; ++i) { + m_offset[i] = + (tile_idx % m_policy.m_tile_end[i]) * m_policy.m_tile[i] + + m_policy.m_lower[i]; + tile_idx /= m_policy.m_tile_end[i]; + + // tile-local indices identified with (index_type)hipThreadIdx_y + m_local_offset[i] = (thrd_idx % m_policy.m_tile[i]); + thrd_idx /= m_policy.m_tile[i]; + + m_offset[i] += m_local_offset[i]; + if (!(m_offset[i] < m_policy.m_upper[i] && + m_local_offset[i] < m_policy.m_tile[i])) { + in_bounds &= false; + } + } + if (in_bounds) { + m_func(m_offset[0], m_offset[1], m_offset[2], m_offset[3], m_v); + } + } + // LR + else { + for (int i = PolicyType::rank - 1; i >= 0; --i) { + m_offset[i] = + (tile_idx % m_policy.m_tile_end[i]) * m_policy.m_tile[i] + + m_policy.m_lower[i]; + tile_idx /= m_policy.m_tile_end[i]; + + // tile-local indices identified with (index_type)threadIdx_y + m_local_offset[i] = (thrd_idx % m_policy.m_tile[i]); + thrd_idx /= m_policy.m_tile[i]; + + m_offset[i] += m_local_offset[i]; + if (!(m_offset[i] < m_policy.m_upper[i] && + m_local_offset[i] < m_policy.m_tile[i])) { + in_bounds &= false; + } + } + if (in_bounds) { + m_func(m_offset[0], m_offset[1], m_offset[2], m_offset[3], m_v); + } + } + } + } + } // end exec_range + + private: + const PolicyType& m_policy; + const Functor& m_func; + ValueType& m_v; +}; + +// Specializations for void tag type +template +struct DeviceIterateTile< + 4, PolicyType, Functor, Tag, ValueType, + typename std::enable_if::value && + !is_void::value>::type> { + using index_type = typename PolicyType::index_type; + + KOKKOS_INLINE_FUNCTION + DeviceIterateTile(const PolicyType& policy_, const Functor& f_, ValueType& v_) + : m_policy(policy_), m_func(f_), m_v(v_) {} + + static constexpr index_type max_blocks = 65535; + + KOKKOS_INLINE_FUNCTION + void exec_range() const { + if (static_cast(hipBlockIdx_x) < m_policy.m_num_tiles && + static_cast(hipThreadIdx_y) < m_policy.m_prod_tile_dims) { + index_type m_offset[PolicyType::rank]; // tile starting global id offset + index_type + m_local_offset[PolicyType::rank]; // tile starting global id offset + + for (index_type tileidx = static_cast(hipBlockIdx_x); + tileidx < m_policy.m_num_tiles; tileidx += hipGridDim_x) { + index_type tile_idx = + tileidx; // temp because tile_idx will be modified while + // determining tile starting point offsets + index_type thrd_idx = static_cast(hipThreadIdx_y); + bool in_bounds = true; + + // LL + if (PolicyType::inner_direction == PolicyType::Left) { + for (int i = 0; i < PolicyType::rank; ++i) { + m_offset[i] = + (tile_idx % m_policy.m_tile_end[i]) * m_policy.m_tile[i] + + m_policy.m_lower[i]; + tile_idx /= m_policy.m_tile_end[i]; + + // tile-local indices identified with hipThreadIdx_y + m_local_offset[i] = (thrd_idx % m_policy.m_tile[i]); + thrd_idx /= m_policy.m_tile[i]; + + m_offset[i] += m_local_offset[i]; + if (!(m_offset[i] < m_policy.m_upper[i] && + m_local_offset[i] < m_policy.m_tile[i])) { + in_bounds &= false; + } + } + if (in_bounds) { + m_func(Tag(), m_offset[0], m_offset[1], m_offset[2], m_offset[3], + m_v); + } + } + // LR + else { + for (int i = PolicyType::rank - 1; i >= 0; --i) { + m_offset[i] = + (tile_idx % m_policy.m_tile_end[i]) * m_policy.m_tile[i] + + m_policy.m_lower[i]; + tile_idx /= m_policy.m_tile_end[i]; + + // tile-local indices identified with hipThreadIdx_y + m_local_offset[i] = (thrd_idx % m_policy.m_tile[i]); + thrd_idx /= m_policy.m_tile[i]; + + m_offset[i] += m_local_offset[i]; + if (!(m_offset[i] < m_policy.m_upper[i] && + m_local_offset[i] < m_policy.m_tile[i])) { + in_bounds &= false; + } + } + if (in_bounds) { + m_func(Tag(), m_offset[0], m_offset[1], m_offset[2], m_offset[3], + m_v); + } + } + } + } + } // end exec_range + + private: + const PolicyType& m_policy; + const Functor& m_func; + ValueType& m_v; +}; + +// Rank 5 +// Specializations for void tag type +template +struct DeviceIterateTile< + 5, PolicyType, Functor, void, ValueType, + typename std::enable_if::value>::type> { + using index_type = typename PolicyType::index_type; + + __device__ DeviceIterateTile(const PolicyType& policy_, const Functor& f_, + ValueType& v_) + : m_policy(policy_), m_func(f_), m_v(v_) {} + + static constexpr index_type max_blocks = 65535; + + KOKKOS_INLINE_FUNCTION + void exec_range() const { + if (static_cast(hipBlockIdx_x) < m_policy.m_num_tiles && + static_cast(hipThreadIdx_y) < m_policy.m_prod_tile_dims) { + index_type m_offset[PolicyType::rank]; // tile starting global id offset + index_type + m_local_offset[PolicyType::rank]; // tile starting global id offset + + for (index_type tileidx = static_cast(hipBlockIdx_x); + tileidx < m_policy.m_num_tiles; tileidx += hipGridDim_x) { + index_type tile_idx = + tileidx; // temp because tile_idx will be modified while + // determining tile starting point offsets + index_type thrd_idx = static_cast(hipThreadIdx_y); + bool in_bounds = true; + + // LL + if (PolicyType::inner_direction == PolicyType::Left) { + for (int i = 0; i < PolicyType::rank; ++i) { + m_offset[i] = + (tile_idx % m_policy.m_tile_end[i]) * m_policy.m_tile[i] + + m_policy.m_lower[i]; + tile_idx /= m_policy.m_tile_end[i]; + + // tile-local indices identified with (index_type)threadIdx_y + m_local_offset[i] = (thrd_idx % m_policy.m_tile[i]); + thrd_idx /= m_policy.m_tile[i]; + + m_offset[i] += m_local_offset[i]; + if (!(m_offset[i] < m_policy.m_upper[i] && + m_local_offset[i] < m_policy.m_tile[i])) { + in_bounds &= false; + } + } + if (in_bounds) { + m_func(m_offset[0], m_offset[1], m_offset[2], m_offset[3], + m_offset[4], m_v); + } + } + // LR + else { + for (int i = PolicyType::rank - 1; i >= 0; --i) { + m_offset[i] = + (tile_idx % m_policy.m_tile_end[i]) * m_policy.m_tile[i] + + m_policy.m_lower[i]; + tile_idx /= m_policy.m_tile_end[i]; + + // tile-local indices identified with hipThreadIdx_y + m_local_offset[i] = (thrd_idx % m_policy.m_tile[i]); + thrd_idx /= m_policy.m_tile[i]; + + m_offset[i] += m_local_offset[i]; + if (!(m_offset[i] < m_policy.m_upper[i] && + m_local_offset[i] < m_policy.m_tile[i])) { + in_bounds &= false; + } + } + if (in_bounds) { + m_func(m_offset[0], m_offset[1], m_offset[2], m_offset[3], + m_offset[4], m_v); + } + } + } + } + } // end exec_range + + private: + const PolicyType& m_policy; + const Functor& m_func; + ValueType& m_v; +}; + +// Specializations for tag type +template +struct DeviceIterateTile< + 5, PolicyType, Functor, Tag, ValueType, + typename std::enable_if::value && + !is_void::value>::type> { + using index_type = typename PolicyType::index_type; + + __device__ DeviceIterateTile(const PolicyType& policy_, const Functor& f_, + ValueType& v_) + : m_policy(policy_), m_func(f_), m_v(v_) {} + + static constexpr index_type max_blocks = 65535; + + KOKKOS_INLINE_FUNCTION + void exec_range() const { + if (static_cast(hipBlockIdx_x) < m_policy.m_num_tiles && + static_cast(hipThreadIdx_y) < m_policy.m_prod_tile_dims) { + index_type m_offset[PolicyType::rank]; // tile starting global id offset + index_type + m_local_offset[PolicyType::rank]; // tile starting global id offset + + for (index_type tileidx = static_cast(hipBlockIdx_x); + tileidx < m_policy.m_num_tiles; tileidx += hipGridDim_x) { + index_type tile_idx = + tileidx; // temp because tile_idx will be modified while + // determining tile starting point offsets + index_type thrd_idx = static_cast(hipThreadIdx_y); + bool in_bounds = true; + + // LL + if (PolicyType::inner_direction == PolicyType::Left) { + for (int i = 0; i < PolicyType::rank; ++i) { + m_offset[i] = + (tile_idx % m_policy.m_tile_end[i]) * m_policy.m_tile[i] + + m_policy.m_lower[i]; + tile_idx /= m_policy.m_tile_end[i]; + + // tile-local indices identified with hipThreadIdx_y + m_local_offset[i] = (thrd_idx % m_policy.m_tile[i]); + thrd_idx /= m_policy.m_tile[i]; + + m_offset[i] += m_local_offset[i]; + if (!(m_offset[i] < m_policy.m_upper[i] && + m_local_offset[i] < m_policy.m_tile[i])) { + in_bounds &= false; + } + } + if (in_bounds) { + m_func(Tag(), m_offset[0], m_offset[1], m_offset[2], m_offset[3], + m_offset[4], m_v); + } + } + // LR + else { + for (int i = PolicyType::rank - 1; i >= 0; --i) { + m_offset[i] = + (tile_idx % m_policy.m_tile_end[i]) * m_policy.m_tile[i] + + m_policy.m_lower[i]; + tile_idx /= m_policy.m_tile_end[i]; + + // tile-local indices identified with hipThreadIdx_y + m_local_offset[i] = (thrd_idx % m_policy.m_tile[i]); + thrd_idx /= m_policy.m_tile[i]; + + m_offset[i] += m_local_offset[i]; + if (!(m_offset[i] < m_policy.m_upper[i] && + m_local_offset[i] < m_policy.m_tile[i])) { + in_bounds &= false; + } + } + if (in_bounds) { + m_func(Tag(), m_offset[0], m_offset[1], m_offset[2], m_offset[3], + m_offset[4], m_v); + } + } + } + } + } // end exec_range + + private: + const PolicyType& m_policy; + const Functor& m_func; + ValueType& m_v; +}; + +// Rank 6 +// Specializations for void tag type +template +struct DeviceIterateTile< + 6, PolicyType, Functor, void, ValueType, + typename std::enable_if::value>::type> { + using index_type = typename PolicyType::index_type; + + __device__ DeviceIterateTile(const PolicyType& policy_, const Functor& f_, + ValueType& v_) + : m_policy(policy_), m_func(f_), m_v(v_) {} + + static constexpr index_type max_blocks = 65535; + + KOKKOS_INLINE_FUNCTION + void exec_range() const { + if (static_cast(hipBlockIdx_x) < m_policy.m_num_tiles && + static_cast(hipThreadIdx_y) < m_policy.m_prod_tile_dims) { + index_type m_offset[PolicyType::rank]; // tile starting global id offset + index_type + m_local_offset[PolicyType::rank]; // tile starting global id offset + + for (index_type tileidx = static_cast(hipBlockIdx_x); + tileidx < m_policy.m_num_tiles; tileidx += hipGridDim_x) { + index_type tile_idx = + tileidx; // temp because tile_idx will be modified while + // determining tile starting point offsets + index_type thrd_idx = static_cast(hipThreadIdx_y); + bool in_bounds = true; + + // LL + if (PolicyType::inner_direction == PolicyType::Left) { + for (int i = 0; i < PolicyType::rank; ++i) { + m_offset[i] = + (tile_idx % m_policy.m_tile_end[i]) * m_policy.m_tile[i] + + m_policy.m_lower[i]; + tile_idx /= m_policy.m_tile_end[i]; + + // tile-local indices identified with hipThreadIdx_y + m_local_offset[i] = (thrd_idx % m_policy.m_tile[i]); + thrd_idx /= m_policy.m_tile[i]; + + m_offset[i] += m_local_offset[i]; + if (!(m_offset[i] < m_policy.m_upper[i] && + m_local_offset[i] < m_policy.m_tile[i])) { + in_bounds &= false; + } + } + if (in_bounds) { + m_func(m_offset[0], m_offset[1], m_offset[2], m_offset[3], + m_offset[4], m_offset[5], m_v); + } + } + // LR + else { + for (int i = PolicyType::rank - 1; i >= 0; --i) { + m_offset[i] = + (tile_idx % m_policy.m_tile_end[i]) * m_policy.m_tile[i] + + m_policy.m_lower[i]; + tile_idx /= m_policy.m_tile_end[i]; + + // tile-local indices identified with hipThreadIdx_y + m_local_offset[i] = (thrd_idx % m_policy.m_tile[i]); + thrd_idx /= m_policy.m_tile[i]; + + m_offset[i] += m_local_offset[i]; + if (!(m_offset[i] < m_policy.m_upper[i] && + m_local_offset[i] < m_policy.m_tile[i])) { + in_bounds &= false; + } + } + if (in_bounds) { + m_func(m_offset[0], m_offset[1], m_offset[2], m_offset[3], + m_offset[4], m_offset[5], m_v); + } + } + } + } + } // end exec_range + + private: + const PolicyType& m_policy; + const Functor& m_func; + ValueType& m_v; +}; + +// Specializations for tag type +template +struct DeviceIterateTile< + 6, PolicyType, Functor, Tag, ValueType, + typename std::enable_if::value && + !is_void::value>::type> { + using index_type = typename PolicyType::index_type; + + __device__ DeviceIterateTile(const PolicyType& rp_, const Functor& f_, + ValueType& v_) + : m_policy(rp_), m_func(f_), m_v(v_) {} + + static constexpr index_type max_blocks = 65535; + + KOKKOS_INLINE_FUNCTION + void exec_range() const { + if (static_cast(hipBlockIdx_x) < m_policy.m_num_tiles && + static_cast(hipThreadIdx_y) < m_policy.m_prod_tile_dims) { + index_type m_offset[PolicyType::rank]; // tile starting global id offset + index_type + m_local_offset[PolicyType::rank]; // tile starting global id offset + + for (index_type tileidx = static_cast(hipBlockIdx_x); + tileidx < m_policy.m_num_tiles; tileidx += hipGridDim_x) { + index_type tile_idx = + tileidx; // temp because tile_idx will be modified while + // determining tile starting point offsets + index_type thrd_idx = static_cast(hipThreadIdx_y); + bool in_bounds = true; + + // LL + if (PolicyType::inner_direction == PolicyType::Left) { + for (int i = 0; i < PolicyType::rank; ++i) { + m_offset[i] = + (tile_idx % m_policy.m_tile_end[i]) * m_policy.m_tile[i] + + m_policy.m_lower[i]; + tile_idx /= m_policy.m_tile_end[i]; + + // tile-local indices identified with (index_type)threadIdx_y + m_local_offset[i] = (thrd_idx % m_policy.m_tile[i]); + thrd_idx /= m_policy.m_tile[i]; + + m_offset[i] += m_local_offset[i]; + if (!(m_offset[i] < m_policy.m_upper[i] && + m_local_offset[i] < m_policy.m_tile[i])) { + in_bounds &= false; + } + } + if (in_bounds) { + m_func(Tag(), m_offset[0], m_offset[1], m_offset[2], m_offset[3], + m_offset[4], m_offset[5], m_v); + } + } + // LR + else { + for (int i = PolicyType::rank - 1; i >= 0; --i) { + m_offset[i] = + (tile_idx % m_policy.m_tile_end[i]) * m_policy.m_tile[i] + + m_policy.m_lower[i]; + tile_idx /= m_policy.m_tile_end[i]; + + // tile-local indices identified with (index_type)threadIdx_y + m_local_offset[i] = (thrd_idx % m_policy.m_tile[i]); + thrd_idx /= m_policy.m_tile[i]; + + m_offset[i] += m_local_offset[i]; + if (!(m_offset[i] < m_policy.m_upper[i] && + m_local_offset[i] < m_policy.m_tile[i])) { + in_bounds &= false; + } + } + if (in_bounds) { + m_func(Tag(), m_offset[0], m_offset[1], m_offset[2], m_offset[3], + m_offset[4], m_offset[5], m_v); + } + } + } + } + } // end exec_range + + private: + const PolicyType& m_policy; + const Functor& m_func; + ValueType& m_v; +}; + +// ValueType = T[], T* +// Rank 2 +// Specializations for void tag type +template +struct DeviceIterateTile< + 2, PolicyType, Functor, void, ValueType, + typename std::enable_if::value>::type> { + using index_type = typename PolicyType::index_type; + using value_type = typename is_array_type::value_type; + + __device__ DeviceIterateTile(const PolicyType& policy_, const Functor& f_, + value_type* v_) + : m_policy(policy_), m_func(f_), m_v(v_) {} + + KOKKOS_INLINE_FUNCTION + void exec_range() const { + if (static_cast(hipBlockIdx_x) < m_policy.m_num_tiles && + static_cast(hipThreadIdx_y) < m_policy.m_prod_tile_dims) { + index_type m_offset[PolicyType::rank]; // tile starting global id offset + index_type + m_local_offset[PolicyType::rank]; // tile starting global id offset + + for (index_type tileidx = static_cast(hipBlockIdx_x); + tileidx < m_policy.m_num_tiles; tileidx += hipGridDim_x) { + index_type tile_idx = + tileidx; // temp because tile_idx will be modified while + // determining tile starting point offsets + index_type thrd_idx = static_cast(hipThreadIdx_y); + bool in_bounds = true; + + // LL + if (PolicyType::inner_direction == PolicyType::Left) { + for (int i = 0; i < PolicyType::rank; ++i) { + m_offset[i] = + (tile_idx % m_policy.m_tile_end[i]) * m_policy.m_tile[i] + + m_policy.m_lower[i]; + tile_idx /= m_policy.m_tile_end[i]; + + m_local_offset[i] = (thrd_idx % m_policy.m_tile[i]); + thrd_idx /= m_policy.m_tile[i]; + + m_offset[i] += m_local_offset[i]; + if (!(m_offset[i] < m_policy.m_upper[i] && + m_local_offset[i] < m_policy.m_tile[i])) { + in_bounds &= false; + } + } + if (in_bounds) { + m_func(m_offset[0], m_offset[1], m_v); + } + } + // LR + else { + for (int i = PolicyType::rank - 1; i >= 0; --i) { + m_offset[i] = + (tile_idx % m_policy.m_tile_end[i]) * m_policy.m_tile[i] + + m_policy.m_lower[i]; + tile_idx /= m_policy.m_tile_end[i]; + + // tile-local indices identified with (index_type)threadIdx_y + m_local_offset[i] = + (thrd_idx % + m_policy.m_tile[i]); // Move this to first computation, + // add to m_offset right away + thrd_idx /= m_policy.m_tile[i]; + + m_offset[i] += m_local_offset[i]; + if (!(m_offset[i] < m_policy.m_upper[i] && + m_local_offset[i] < m_policy.m_tile[i])) { + in_bounds &= false; + } + } + if (in_bounds) { + m_func(m_offset[0], m_offset[1], m_v); + } + } + } + } + } // end exec_range + + private: + const PolicyType& m_policy; + const Functor& m_func; + value_type* m_v; +}; + +// Specializations for tag type +template +struct DeviceIterateTile< + 2, PolicyType, Functor, Tag, ValueType, + typename std::enable_if::value && + !is_void::value>::type> { + using index_type = typename PolicyType::index_type; + using value_type = typename is_array_type::value_type; + + KOKKOS_INLINE_FUNCTION + DeviceIterateTile(const PolicyType& rp_, const Functor& f_, value_type* v_) + : m_policy(rp_), m_func(f_), m_v(v_) {} + + KOKKOS_INLINE_FUNCTION + void exec_range() const { + if (static_cast(hipBlockIdx_x) < m_policy.m_num_tiles && + static_cast(hipThreadIdx_y) < m_policy.m_prod_tile_dims) { + index_type m_offset[PolicyType::rank]; // tile starting global id offset + index_type + m_local_offset[PolicyType::rank]; // tile starting global id offset + + for (index_type tileidx = static_cast(hipBlockIdx_x); + tileidx < m_policy.m_num_tiles; tileidx += hipGridDim_x) { + index_type tile_idx = + tileidx; // temp because tile_idx will be modified while + // determining tile starting point offsets + index_type thrd_idx = static_cast(hipThreadIdx_y); + bool in_bounds = true; + + // LL + if (PolicyType::inner_direction == PolicyType::Left) { + for (int i = 0; i < PolicyType::rank; ++i) { + m_offset[i] = + (tile_idx % m_policy.m_tile_end[i]) * m_policy.m_tile[i] + + m_policy.m_lower[i]; + tile_idx /= m_policy.m_tile_end[i]; + + // tile-local indices identified with (index_type)threadIdx_y + m_local_offset[i] = (thrd_idx % m_policy.m_tile[i]); + thrd_idx /= m_policy.m_tile[i]; + + m_offset[i] += m_local_offset[i]; + if (!(m_offset[i] < m_policy.m_upper[i] && + m_local_offset[i] < m_policy.m_tile[i])) { + in_bounds &= false; + } + } + if (in_bounds) { + m_func(Tag(), m_offset[0], m_offset[1], m_v); + } + } + // LR + else { + for (int i = PolicyType::rank - 1; i >= 0; --i) { + m_offset[i] = + (tile_idx % m_policy.m_tile_end[i]) * m_policy.m_tile[i] + + m_policy.m_lower[i]; + tile_idx /= m_policy.m_tile_end[i]; + + // tile-local indices identified with (index_type)threadIdx_y + m_local_offset[i] = (thrd_idx % m_policy.m_tile[i]); + thrd_idx /= m_policy.m_tile[i]; + + m_offset[i] += m_local_offset[i]; + if (!(m_offset[i] < m_policy.m_upper[i] && + m_local_offset[i] < m_policy.m_tile[i])) { + in_bounds &= false; + } + } + if (in_bounds) { + m_func(Tag(), m_offset[0], m_offset[1], m_v); + } + } + } // end for loop over num_tiles - product of tiles in each direction + } + } // end exec_range + + private: + const PolicyType& m_policy; + const Functor& m_func; + value_type* m_v; +}; + +// Rank 3 +// Specializations for void tag type +template +struct DeviceIterateTile< + 3, PolicyType, Functor, void, ValueType, + typename std::enable_if::value>::type> { + using index_type = typename PolicyType::index_type; + using value_type = typename is_array_type::value_type; + + KOKKOS_INLINE_FUNCTION + DeviceIterateTile(const PolicyType& policy_, const Functor& f_, + value_type* v_) + : m_policy(policy_), m_func(f_), m_v(v_) {} + + KOKKOS_INLINE_FUNCTION + void exec_range() const { + if (static_cast(hipBlockIdx_x) < m_policy.m_num_tiles && + static_cast(hipThreadIdx_y) < m_policy.m_prod_tile_dims) { + index_type m_offset[PolicyType::rank]; // tile starting global id offset + index_type + m_local_offset[PolicyType::rank]; // tile starting global id offset + + for (index_type tileidx = static_cast(hipBlockIdx_x); + tileidx < m_policy.m_num_tiles; tileidx += hipGridDim_x) { + index_type tile_idx = + tileidx; // temp because tile_idx will be modified while + // determining tile starting point offsets + index_type thrd_idx = static_cast(hipThreadIdx_y); + bool in_bounds = true; + + // LL + if (PolicyType::inner_direction == PolicyType::Left) { + for (int i = 0; i < PolicyType::rank; ++i) { + m_offset[i] = + (tile_idx % m_policy.m_tile_end[i]) * m_policy.m_tile[i] + + m_policy.m_lower[i]; + tile_idx /= m_policy.m_tile_end[i]; + + // tile-local indices identified with (index_type)threadIdx_y + m_local_offset[i] = + (thrd_idx % + m_policy.m_tile[i]); // Move this to first computation, + // add to m_offset right away + thrd_idx /= m_policy.m_tile[i]; + + m_offset[i] += m_local_offset[i]; + if (!(m_offset[i] < m_policy.m_upper[i] && + m_local_offset[i] < m_policy.m_tile[i])) { + in_bounds &= false; + } + } + if (in_bounds) { + m_func(m_offset[0], m_offset[1], m_offset[2], m_v); + } + } + // LR + else { + for (int i = PolicyType::rank - 1; i >= 0; --i) { + m_offset[i] = + (tile_idx % m_policy.m_tile_end[i]) * m_policy.m_tile[i] + + m_policy.m_lower[i]; + tile_idx /= m_policy.m_tile_end[i]; + + // tile-local indices identified with (index_type)threadIdx_y + m_local_offset[i] = + (thrd_idx % + m_policy.m_tile[i]); // Move this to first computation, + // add to m_offset right away + thrd_idx /= m_policy.m_tile[i]; + + m_offset[i] += m_local_offset[i]; + if (!(m_offset[i] < m_policy.m_upper[i] && + m_local_offset[i] < m_policy.m_tile[i])) { + in_bounds &= false; + } + } + if (in_bounds) { + m_func(m_offset[0], m_offset[1], m_offset[2], m_v); + } + } + } + } + } // end exec_range + + private: + const PolicyType& m_policy; + const Functor& m_func; + value_type* m_v; +}; + +// Specializations for void tag type +template +struct DeviceIterateTile< + 3, PolicyType, Functor, Tag, ValueType, + typename std::enable_if::value && + !is_void::value>::type> { + using index_type = typename PolicyType::index_type; + using value_type = typename is_array_type::value_type; + + KOKKOS_INLINE_FUNCTION + DeviceIterateTile(const PolicyType& policy_, const Functor& f_, + value_type* v_) + : m_policy(policy_), m_func(f_), m_v(v_) {} + + KOKKOS_INLINE_FUNCTION + void exec_range() const { + if (static_cast(hipBlockIdx_x) < m_policy.m_num_tiles && + static_cast(hipThreadIdx_y) < m_policy.m_prod_tile_dims) { + index_type m_offset[PolicyType::rank]; // tile starting global id offset + index_type + m_local_offset[PolicyType::rank]; // tile starting global id offset + + for (index_type tileidx = static_cast(hipBlockIdx_x); + tileidx < m_policy.m_num_tiles; tileidx += hipGridDim_x) { + index_type tile_idx = + tileidx; // temp because tile_idx will be modified while + // determining tile starting point offsets + index_type thrd_idx = static_cast(hipThreadIdx_y); + bool in_bounds = true; + + // LL + if (PolicyType::inner_direction == PolicyType::Left) { + for (int i = 0; i < PolicyType::rank; ++i) { + m_offset[i] = + (tile_idx % m_policy.m_tile_end[i]) * m_policy.m_tile[i] + + m_policy.m_lower[i]; + tile_idx /= m_policy.m_tile_end[i]; + + // tile-local indices identified with hipThreadIdx_y + m_local_offset[i] = (thrd_idx % m_policy.m_tile[i]); + thrd_idx /= m_policy.m_tile[i]; + + m_offset[i] += m_local_offset[i]; + if (!(m_offset[i] < m_policy.m_upper[i] && + m_local_offset[i] < m_policy.m_tile[i])) { + in_bounds &= false; + } + } + if (in_bounds) { + m_func(Tag(), m_offset[0], m_offset[1], m_offset[2], m_v); + } + } + // LR + else { + for (int i = PolicyType::rank - 1; i >= 0; --i) { + m_offset[i] = + (tile_idx % m_policy.m_tile_end[i]) * m_policy.m_tile[i] + + m_policy.m_lower[i]; + tile_idx /= m_policy.m_tile_end[i]; + + // tile-local indices identified with (index_type)threadIdx_y + m_local_offset[i] = (thrd_idx % m_policy.m_tile[i]); + thrd_idx /= m_policy.m_tile[i]; + + m_offset[i] += m_local_offset[i]; + if (!(m_offset[i] < m_policy.m_upper[i] && + m_local_offset[i] < m_policy.m_tile[i])) { + in_bounds &= false; + } + } + if (in_bounds) { + m_func(Tag(), m_offset[0], m_offset[1], m_offset[2], m_v); + } + } + } + } + } // end exec_range + + private: + const PolicyType& m_policy; + const Functor& m_func; + value_type* m_v; +}; + +// Rank 4 +// Specializations for void tag type +template +struct DeviceIterateTile< + 4, PolicyType, Functor, void, ValueType, + typename std::enable_if::value>::type> { + using index_type = typename PolicyType::index_type; + using value_type = typename is_array_type::value_type; + + KOKKOS_INLINE_FUNCTION + DeviceIterateTile(const PolicyType& policy_, const Functor& f_, + value_type* v_) + : m_policy(policy_), m_func(f_), m_v(v_) {} + + static constexpr index_type max_blocks = 65535; + + KOKKOS_INLINE_FUNCTION + void exec_range() const { + if (static_cast(hipBlockIdx_x) < m_policy.m_num_tiles && + static_cast(hipThreadIdx_y) < m_policy.m_prod_tile_dims) { + index_type m_offset[PolicyType::rank]; // tile starting global id offset + index_type + m_local_offset[PolicyType::rank]; // tile starting global id offset + + for (index_type tileidx = static_cast(hipBlockIdx_x); + tileidx < m_policy.m_num_tiles; tileidx += hipGridDim_x) { + index_type tile_idx = + tileidx; // temp because tile_idx will be modified while + // determining tile starting point offsets + index_type thrd_idx = static_cast(hipThreadIdx_y); + bool in_bounds = true; + + // LL + if (PolicyType::inner_direction == PolicyType::Left) { + for (int i = 0; i < PolicyType::rank; ++i) { + m_offset[i] = + (tile_idx % m_policy.m_tile_end[i]) * m_policy.m_tile[i] + + m_policy.m_lower[i]; + tile_idx /= m_policy.m_tile_end[i]; + + // tile-local indices identified with hipThreadIdx_y + m_local_offset[i] = (thrd_idx % m_policy.m_tile[i]); + thrd_idx /= m_policy.m_tile[i]; + + m_offset[i] += m_local_offset[i]; + if (!(m_offset[i] < m_policy.m_upper[i] && + m_local_offset[i] < m_policy.m_tile[i])) { + in_bounds &= false; + } + } + if (in_bounds) { + m_func(m_offset[0], m_offset[1], m_offset[2], m_offset[3], m_v); + } + } + // LR + else { + for (int i = PolicyType::rank - 1; i >= 0; --i) { + m_offset[i] = + (tile_idx % m_policy.m_tile_end[i]) * m_policy.m_tile[i] + + m_policy.m_lower[i]; + tile_idx /= m_policy.m_tile_end[i]; + + // tile-local indices identified with hipThreadIdx_y + m_local_offset[i] = (thrd_idx % m_policy.m_tile[i]); + thrd_idx /= m_policy.m_tile[i]; + + m_offset[i] += m_local_offset[i]; + if (!(m_offset[i] < m_policy.m_upper[i] && + m_local_offset[i] < m_policy.m_tile[i])) { + in_bounds &= false; + } + } + if (in_bounds) { + m_func(m_offset[0], m_offset[1], m_offset[2], m_offset[3], m_v); + } + } + } + } + } // end exec_range + + private: + const PolicyType& m_policy; + const Functor& m_func; + value_type* m_v; +}; + +// Specializations for void tag type +template +struct DeviceIterateTile< + 4, PolicyType, Functor, Tag, ValueType, + typename std::enable_if::value && + !is_void::value>::type> { + using index_type = typename PolicyType::index_type; + using value_type = typename is_array_type::value_type; + + KOKKOS_INLINE_FUNCTION + DeviceIterateTile(const PolicyType& policy_, const Functor& f_, + value_type* v_) + : m_policy(policy_), m_func(f_), m_v(v_) {} + + static constexpr index_type max_blocks = 65535; + + KOKKOS_INLINE_FUNCTION + void exec_range() const { + if (static_cast(hipBlockIdx_x) < m_policy.m_num_tiles && + static_cast(hipThreadIdx_y) < m_policy.m_prod_tile_dims) { + index_type m_offset[PolicyType::rank]; // tile starting global id offset + index_type + m_local_offset[PolicyType::rank]; // tile starting global id offset + + for (index_type tileidx = static_cast(hipBlockIdx_x); + tileidx < m_policy.m_num_tiles; tileidx += hipGridDim_x) { + index_type tile_idx = + tileidx; // temp because tile_idx will be modified while + // determining tile starting point offsets + index_type thrd_idx = static_cast(hipThreadIdx_y); + bool in_bounds = true; + + // LL + if (PolicyType::inner_direction == PolicyType::Left) { + for (int i = 0; i < PolicyType::rank; ++i) { + m_offset[i] = + (tile_idx % m_policy.m_tile_end[i]) * m_policy.m_tile[i] + + m_policy.m_lower[i]; + tile_idx /= m_policy.m_tile_end[i]; + + // tile-local indices identified with (index_type)threadIdx_y + m_local_offset[i] = (thrd_idx % m_policy.m_tile[i]); + thrd_idx /= m_policy.m_tile[i]; + + m_offset[i] += m_local_offset[i]; + if (!(m_offset[i] < m_policy.m_upper[i] && + m_local_offset[i] < m_policy.m_tile[i])) { + in_bounds &= false; + } + } + if (in_bounds) { + m_func(Tag(), m_offset[0], m_offset[1], m_offset[2], m_offset[3], + m_v); + } + } + // LR + else { + for (int i = PolicyType::rank - 1; i >= 0; --i) { + m_offset[i] = + (tile_idx % m_policy.m_tile_end[i]) * m_policy.m_tile[i] + + m_policy.m_lower[i]; + tile_idx /= m_policy.m_tile_end[i]; + + // tile-local indices identified with (index_type)threadIdx_y + m_local_offset[i] = (thrd_idx % m_policy.m_tile[i]); + thrd_idx /= m_policy.m_tile[i]; + + m_offset[i] += m_local_offset[i]; + if (!(m_offset[i] < m_policy.m_upper[i] && + m_local_offset[i] < m_policy.m_tile[i])) { + in_bounds &= false; + } + } + if (in_bounds) { + m_func(Tag(), m_offset[0], m_offset[1], m_offset[2], m_offset[3], + m_v); + } + } + } + } + } // end exec_range + + private: + const PolicyType& m_policy; + const Functor& m_func; + value_type* m_v; +}; + +// Rank 5 +// Specializations for void tag type +template +struct DeviceIterateTile< + 5, PolicyType, Functor, void, ValueType, + typename std::enable_if::value>::type> { + using index_type = typename PolicyType::index_type; + using value_type = typename is_array_type::value_type; + + KOKKOS_INLINE_FUNCTION + DeviceIterateTile(const PolicyType& policy_, const Functor& f_, + value_type* v_) + : m_policy(policy_), m_func(f_), m_v(v_) {} + + static constexpr index_type max_blocks = 65535; + + KOKKOS_INLINE_FUNCTION + void exec_range() const { + if (static_cast(hipBlockIdx_x) < m_policy.m_num_tiles && + static_cast(hipThreadIdx_y) < m_policy.m_prod_tile_dims) { + index_type m_offset[PolicyType::rank]; // tile starting global id offset + index_type + m_local_offset[PolicyType::rank]; // tile starting global id offset + + for (index_type tileidx = static_cast(hipBlockIdx_x); + tileidx < m_policy.m_num_tiles; tileidx += hipGridDim_x) { + index_type tile_idx = + tileidx; // temp because tile_idx will be modified while + // determining tile starting point offsets + index_type thrd_idx = static_cast(hipThreadIdx_y); + bool in_bounds = true; + + // LL + if (PolicyType::inner_direction == PolicyType::Left) { + for (int i = 0; i < PolicyType::rank; ++i) { + m_offset[i] = + (tile_idx % m_policy.m_tile_end[i]) * m_policy.m_tile[i] + + m_policy.m_lower[i]; + tile_idx /= m_policy.m_tile_end[i]; + + // tile-local indices identified with hipThreadIdx_y + m_local_offset[i] = (thrd_idx % m_policy.m_tile[i]); + thrd_idx /= m_policy.m_tile[i]; + + m_offset[i] += m_local_offset[i]; + if (!(m_offset[i] < m_policy.m_upper[i] && + m_local_offset[i] < m_policy.m_tile[i])) { + in_bounds &= false; + } + } + if (in_bounds) { + m_func(m_offset[0], m_offset[1], m_offset[2], m_offset[3], + m_offset[4], m_v); + } + } + // LR + else { + for (int i = PolicyType::rank - 1; i >= 0; --i) { + m_offset[i] = + (tile_idx % m_policy.m_tile_end[i]) * m_policy.m_tile[i] + + m_policy.m_lower[i]; + tile_idx /= m_policy.m_tile_end[i]; + + // tile-local indices identified with hipThreadIdx_y + m_local_offset[i] = (thrd_idx % m_policy.m_tile[i]); + thrd_idx /= m_policy.m_tile[i]; + + m_offset[i] += m_local_offset[i]; + if (!(m_offset[i] < m_policy.m_upper[i] && + m_local_offset[i] < m_policy.m_tile[i])) { + in_bounds &= false; + } + } + if (in_bounds) { + m_func(m_offset[0], m_offset[1], m_offset[2], m_offset[3], + m_offset[4], m_v); + } + } + } + } + } // end exec_range + + private: + const PolicyType& m_policy; + const Functor& m_func; + value_type* m_v; +}; + +// Specializations for tag type +template +struct DeviceIterateTile< + 5, PolicyType, Functor, Tag, ValueType, + typename std::enable_if::value && + !is_void::value>::type> { + using index_type = typename PolicyType::index_type; + using value_type = typename is_array_type::value_type; + + KOKKOS_INLINE_FUNCTION + DeviceIterateTile(const PolicyType& policy_, const Functor& f_, + value_type* v_) + : m_policy(policy_), m_func(f_), m_v(v_) {} + + static constexpr index_type max_blocks = 65535; + + KOKKOS_INLINE_FUNCTION + void exec_range() const { + if (static_cast(hipBlockIdx_x) < m_policy.m_num_tiles && + static_cast(hipThreadIdx_y) < m_policy.m_prod_tile_dims) { + index_type m_offset[PolicyType::rank]; // tile starting global id offset + index_type + m_local_offset[PolicyType::rank]; // tile starting global id offset + + for (index_type tileidx = static_cast(hipBlockIdx_x); + tileidx < m_policy.m_num_tiles; tileidx += hipGridDim_x) { + index_type tile_idx = + tileidx; // temp because tile_idx will be modified while + // determining tile starting point offsets + index_type thrd_idx = static_cast(hipThreadIdx_y); + bool in_bounds = true; + + // LL + if (PolicyType::inner_direction == PolicyType::Left) { + for (int i = 0; i < PolicyType::rank; ++i) { + m_offset[i] = + (tile_idx % m_policy.m_tile_end[i]) * m_policy.m_tile[i] + + m_policy.m_lower[i]; + tile_idx /= m_policy.m_tile_end[i]; + + // tile-local indices identified with hipThreadIdx_y + m_local_offset[i] = (thrd_idx % m_policy.m_tile[i]); + thrd_idx /= m_policy.m_tile[i]; + + m_offset[i] += m_local_offset[i]; + if (!(m_offset[i] < m_policy.m_upper[i] && + m_local_offset[i] < m_policy.m_tile[i])) { + in_bounds &= false; + } + } + if (in_bounds) { + m_func(Tag(), m_offset[0], m_offset[1], m_offset[2], m_offset[3], + m_offset[4], m_v); + } + } + // LR + else { + for (int i = PolicyType::rank - 1; i >= 0; --i) { + m_offset[i] = + (tile_idx % m_policy.m_tile_end[i]) * m_policy.m_tile[i] + + m_policy.m_lower[i]; + tile_idx /= m_policy.m_tile_end[i]; + + // tile-local indices identified with hipThreadIdx_y + m_local_offset[i] = (thrd_idx % m_policy.m_tile[i]); + thrd_idx /= m_policy.m_tile[i]; + + m_offset[i] += m_local_offset[i]; + if (!(m_offset[i] < m_policy.m_upper[i] && + m_local_offset[i] < m_policy.m_tile[i])) { + in_bounds &= false; + } + } + if (in_bounds) { + m_func(Tag(), m_offset[0], m_offset[1], m_offset[2], m_offset[3], + m_offset[4], m_v); + } + } + } + } + } // end exec_range + + private: + const PolicyType& m_policy; + const Functor& m_func; + value_type* m_v; +}; + +// Rank 6 +// Specializations for void tag type +template +struct DeviceIterateTile< + 6, PolicyType, Functor, void, ValueType, + typename std::enable_if::value>::type> { + using index_type = typename PolicyType::index_type; + using value_type = typename is_array_type::value_type; + + KOKKOS_INLINE_FUNCTION + DeviceIterateTile(const PolicyType& policy_, const Functor& f_, + value_type* v_) + : m_policy(policy_), m_func(f_), m_v(v_) {} + + static constexpr index_type max_blocks = 65535; + + KOKKOS_INLINE_FUNCTION + void exec_range() const { + if (static_cast(hipBlockIdx_x) < m_policy.m_num_tiles && + static_cast(hipThreadIdx_y) < m_policy.m_prod_tile_dims) { + index_type m_offset[PolicyType::rank]; // tile starting global id offset + index_type + m_local_offset[PolicyType::rank]; // tile starting global id offset + + for (index_type tileidx = static_cast(hipBlockIdx_x); + tileidx < m_policy.m_num_tiles; tileidx += hipGridDim_x) { + index_type tile_idx = + tileidx; // temp because tile_idx will be modified while + // determining tile starting point offsets + index_type thrd_idx = static_cast(hipThreadIdx_y); + bool in_bounds = true; + + // LL + if (PolicyType::inner_direction == PolicyType::Left) { + for (int i = 0; i < PolicyType::rank; ++i) { + m_offset[i] = + (tile_idx % m_policy.m_tile_end[i]) * m_policy.m_tile[i] + + m_policy.m_lower[i]; + tile_idx /= m_policy.m_tile_end[i]; + + // tile-local indices identified with hipThreadIdx_y + m_local_offset[i] = (thrd_idx % m_policy.m_tile[i]); + thrd_idx /= m_policy.m_tile[i]; + + m_offset[i] += m_local_offset[i]; + if (!(m_offset[i] < m_policy.m_upper[i] && + m_local_offset[i] < m_policy.m_tile[i])) { + in_bounds &= false; + } + } + if (in_bounds) { + m_func(m_offset[0], m_offset[1], m_offset[2], m_offset[3], + m_offset[4], m_offset[5], m_v); + } + } + // LR + else { + for (int i = PolicyType::rank - 1; i >= 0; --i) { + m_offset[i] = + (tile_idx % m_policy.m_tile_end[i]) * m_policy.m_tile[i] + + m_policy.m_lower[i]; + tile_idx /= m_policy.m_tile_end[i]; + + // tile-local indices identified with hipThreadIdx_y + m_local_offset[i] = (thrd_idx % m_policy.m_tile[i]); + thrd_idx /= m_policy.m_tile[i]; + + m_offset[i] += m_local_offset[i]; + if (!(m_offset[i] < m_policy.m_upper[i] && + m_local_offset[i] < m_policy.m_tile[i])) { + in_bounds &= false; + } + } + if (in_bounds) { + m_func(m_offset[0], m_offset[1], m_offset[2], m_offset[3], + m_offset[4], m_offset[5], m_v); + } + } + } + } + } // end exec_range + + private: + const PolicyType& m_policy; + const Functor& m_func; + value_type* m_v; +}; + +// Specializations for tag type +template +struct DeviceIterateTile< + 6, PolicyType, Functor, Tag, ValueType, + typename std::enable_if::value && + !is_void::value>::type> { + using index_type = typename PolicyType::index_type; + using value_type = typename is_array_type::value_type; + + KOKKOS_INLINE_FUNCTION + DeviceIterateTile(const PolicyType& policy_, const Functor& f_, + value_type* v_) + : m_policy(policy_), m_func(f_), m_v(v_) {} + + static constexpr index_type max_blocks = 65535; + + KOKKOS_INLINE_FUNCTION + void exec_range() const { + if (static_cast(hipBlockIdx_x) < m_policy.m_num_tiles && + static_cast(hipThreadIdx_y) < m_policy.m_prod_tile_dims) { + index_type m_offset[PolicyType::rank]; // tile starting global id offset + index_type + m_local_offset[PolicyType::rank]; // tile starting global id offset + + for (index_type tileidx = static_cast(hipBlockIdx_x); + tileidx < m_policy.m_num_tiles; tileidx += hipGridDim_x) { + index_type tile_idx = + tileidx; // temp because tile_idx will be modified while + // determining tile starting point offsets + index_type thrd_idx = static_cast(hipThreadIdx_y); + bool in_bounds = true; + + // LL + if (PolicyType::inner_direction == PolicyType::Left) { + for (int i = 0; i < PolicyType::rank; ++i) { + m_offset[i] = + (tile_idx % m_policy.m_tile_end[i]) * m_policy.m_tile[i] + + m_policy.m_lower[i]; + tile_idx /= m_policy.m_tile_end[i]; + + // tile-local indices identified with hipThreadIdx_y + m_local_offset[i] = (thrd_idx % m_policy.m_tile[i]); + thrd_idx /= m_policy.m_tile[i]; + + m_offset[i] += m_local_offset[i]; + if (!(m_offset[i] < m_policy.m_upper[i] && + m_local_offset[i] < m_policy.m_tile[i])) { + in_bounds &= false; + } + } + if (in_bounds) { + m_func(Tag(), m_offset[0], m_offset[1], m_offset[2], m_offset[3], + m_offset[4], m_offset[5], m_v); + } + } + // LR + else { + for (int i = PolicyType::rank - 1; i >= 0; --i) { + m_offset[i] = + (tile_idx % m_policy.m_tile_end[i]) * m_policy.m_tile[i] + + m_policy.m_lower[i]; + tile_idx /= m_policy.m_tile_end[i]; + + // tile-local indices identified with hipThreadIdx_y + m_local_offset[i] = (thrd_idx % m_policy.m_tile[i]); + thrd_idx /= m_policy.m_tile[i]; + + m_offset[i] += m_local_offset[i]; + if (!(m_offset[i] < m_policy.m_upper[i] && + m_local_offset[i] < m_policy.m_tile[i])) { + in_bounds &= false; + } + } + if (in_bounds) { + m_func(Tag(), m_offset[0], m_offset[1], m_offset[2], m_offset[3], + m_offset[4], m_offset[5], m_v); + } + } + } + } + } // end exec_range + + private: + const PolicyType& m_policy; + const Functor& m_func; + value_type* m_v; +}; + +} // namespace Reduce +} // namespace Impl +} // namespace Kokkos +#endif +#endif diff --git a/lib/kokkos/core/src/HIP/Kokkos_HIP_Abort.hpp b/lib/kokkos/core/src/HIP/Kokkos_HIP_Abort.hpp new file mode 100644 index 0000000000000000000000000000000000000000..1eaae38302477865f2072450aae93991618bb10e --- /dev/null +++ b/lib/kokkos/core/src/HIP/Kokkos_HIP_Abort.hpp @@ -0,0 +1,68 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 3.0 +// Copyright (2020) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +#ifndef KOKKOS_HIP_ABORT_HPP +#define KOKKOS_HIP_ABORT_HPP + +#include +#if defined(KOKKOS_ENABLE_HIP) + +#include + +namespace Kokkos { +namespace Impl { + +__device__ inline void hip_abort(char const *msg) { + printf("%s", msg); + // FIXME_HIP both abort and the __assertfail system call are currently + // implemented with __builtin_trap which causes the program to exit abnormally + // without printing the error message. + // abort(); +} + +} // namespace Impl +} // namespace Kokkos + +#endif +#endif diff --git a/lib/kokkos/core/src/HIP/Kokkos_HIP_Atomic.hpp b/lib/kokkos/core/src/HIP/Kokkos_HIP_Atomic.hpp new file mode 100644 index 0000000000000000000000000000000000000000..c09e09f50041528a096f0a1edba7649d0fb5776a --- /dev/null +++ b/lib/kokkos/core/src/HIP/Kokkos_HIP_Atomic.hpp @@ -0,0 +1,576 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 3.0 +// Copyright (2020) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +#ifndef KOKKOS_HIP_ATOMIC_HPP +#define KOKKOS_HIP_ATOMIC_HPP + +#ifdef KOKKOS_ENABLE_HIP_ATOMICS + +namespace Kokkos { +// HIP can do: +// Types int/unsigned int +// variants: +// atomic_exchange/compare_exchange/fetch_add/fetch_sub/fetch_max/fetch_min/fetch_and/fetch_or/fetch_xor/fetch_inc/fetch_dec + +// atomic_exchange ------------------------------------------------------------- + +__inline__ __device__ int atomic_exchange(volatile int *const dest, + const int val) { + return atomicExch(const_cast(dest), val); +} + +__inline__ __device__ unsigned int atomic_exchange( + volatile unsigned int *const dest, const unsigned int val) { + return atomicExch(const_cast(dest), val); +} + +__inline__ __device__ unsigned long long int atomic_exchange( + volatile unsigned long long int *const dest, + const unsigned long long int val) { + return atomicExch(const_cast(dest), val); +} + +__inline__ __device__ float atomic_exchange(volatile float *const dest, + const float val) { + return atomicExch(const_cast(dest), val); +} + +template +__inline__ __device__ T atomic_exchange( + volatile T *const dest, + typename std::enable_if::type val) { + int tmp = atomicExch(reinterpret_cast(const_cast(dest)), + *reinterpret_cast(const_cast(&val))); + return reinterpret_cast(tmp); +} + +template +__inline__ __device__ T atomic_exchange( + volatile T *const dest, + typename std::enable_if::type val) { + typedef unsigned long long int type; + + type tmp = atomicExch(reinterpret_cast(const_cast(dest)), + *reinterpret_cast(const_cast(&val))); + return reinterpret_cast(tmp); +} + +template +__inline__ __device__ T +atomic_exchange(volatile T *const dest, + typename std::enable_if::type &val) { + // FIXME_HIP + Kokkos::abort("atomic_exchange not implemented for large types.\n"); + T return_val; + int done = 0; + unsigned int active = __ballot(1); + unsigned int done_active = 0; + while (active != done_active) { + if (!done) { + // if (Impl::lock_address_hip_space((void*)dest)) + { + return_val = *dest; + *dest = val; + // Impl::unlock_address_hip_space((void*)dest); + done = 1; + } + } + done_active = __ballot(done); + } + return return_val; +} + +// atomic_assign --------------------------------------------------------------- + +template +__inline__ __device__ void atomic_assign( + volatile T *const dest, + typename std::enable_if::type val) { + atomicExch(reinterpret_cast(const_cast(dest)), + *reinterpret_cast(const_cast(&val))); +} + +template +__inline__ __device__ void atomic_assign( + volatile T *const dest, + typename std::enable_if::type val) { + typedef unsigned long long int type; + atomicExch(reinterpret_cast(const_cast(dest)), + *reinterpret_cast(const_cast(&val))); +} + +template +__inline__ __device__ void atomic_assign( + volatile T *const dest, + typename std::enable_if::type val) { + atomic_exchange(dest, val); +} + +// atomic_compare_exchange ----------------------------------------------------- + +inline __device__ int atomic_compare_exchange(volatile int *dest, int compare, + const int &val) { + return atomicCAS(const_cast(dest), compare, val); +} + +inline __device__ unsigned int atomic_compare_exchange( + volatile unsigned int *dest, unsigned int compare, + const unsigned int &val) { + return atomicCAS(const_cast(dest), compare, val); +} + +inline __device__ unsigned long long int atomic_compare_exchange( + volatile unsigned long long int *dest, unsigned long long int compare, + const unsigned long long int &val) { + return atomicCAS(const_cast(dest), compare, val); +} + +template +__inline__ __device__ T atomic_compare_exchange( + volatile T *dest, T compare, + typename std::enable_if::type val) { + // FIXME_HIP UB + union U { + int i; + T f; + __inline__ __device__ U() {} + } idest, icompare, ival; + icompare.f = compare; + ival.f = val; + idest.i = atomicCAS(reinterpret_cast(const_cast(dest)), + icompare.i, ival.i); + return idest.f; +} + +template +__inline__ __device__ T atomic_compare_exchange( + volatile T *dest, T compare, + typename std::enable_if::type val) { + // FIXME_HIP UB + union U { + unsigned long long int i; + T f; + __inline__ __device__ U() {} + } idest, icompare, ival; + icompare.f = compare; + ival.f = val; + idest.i = atomicCAS( + reinterpret_cast(const_cast(dest)), + icompare.i, ival.i); + return idest.f; +} + +template +__inline__ __device__ T atomic_compare_exchange( + volatile T *const dest, const T &compare, + typename std::enable_if::type &val) { + // FIXME_HIP + Kokkos::abort("atomic_compare_exchange not implemented for large types.\n"); + T return_val; + int done = 0; + unsigned int active = __ballot(1); + unsigned int done_active = 0; + while (active != done_active) { + if (!done) { + // if (Impl::lock_address_hip_space((void*)dest)) + { + return_val = *dest; + if (return_val == compare) *dest = val; + // Impl::unlock_address_hip_space((void*)dest); + done = 1; + } + } + done_active = __ballot(done); + } + return return_val; +} + +// atomic_fetch_add ------------------------------------------------------------ + +inline __device__ int atomic_fetch_add(volatile int *dest, const int &val) { + return atomicAdd(const_cast(dest), val); +} + +inline __device__ unsigned int atomic_fetch_add(volatile unsigned int *dest, + const unsigned int &val) { + return atomicAdd(const_cast(dest), val); +} + +inline __device__ unsigned long long atomic_fetch_add( + volatile unsigned long long *dest, const unsigned long long &val) { + return atomicAdd(const_cast(dest), val); +} + +inline __device__ float atomic_fetch_add(volatile float *dest, + const float &val) { + return atomicAdd(const_cast(dest), val); +} + +template +inline __device__ T atomic_fetch_add( + volatile T *const dest, + typename std::enable_if::type val) { + // FIXME_HIP UB + union U { + int i; + T t; + __inline__ __device__ U() {} + } assume, oldval, newval; + + oldval.t = *dest; + + do { + assume.i = oldval.i; + newval.t = assume.t + val; + oldval.i = atomicCAS(reinterpret_cast(const_cast(dest)), + assume.i, newval.i); + } while (assume.i != oldval.i); + + return oldval.t; +} + +template +inline __device__ T atomic_fetch_add( + volatile T *const dest, + typename std::enable_if::type + val) { + // FIXME_HIP UB + union U { + unsigned long long i; + T t; + __inline__ __device__ U() {} + } assume, oldval, newval; + + oldval.t = *dest; + + do { + assume.i = oldval.i; + newval.t = assume.t + val; + oldval.i = atomic_compare_exchange( + reinterpret_cast(dest), assume.i, + newval.i); + } while (assume.i != oldval.i); + + return oldval.t; +} + +__inline__ __device__ char atomic_fetch_add(volatile char *dest, + const char &val) { + unsigned int oldval, newval, assume; + oldval = *reinterpret_cast(&dest); + + do { + assume = oldval; + newval = assume & 0x7fffff00 + ((assume & 0xff) + val) & 0xff; + oldval = + atomicCAS(reinterpret_cast(const_cast(dest)), + assume, newval); + } while (assume != oldval); + + return oldval; +} + +__inline__ __device__ short atomic_fetch_add(volatile short *dest, + const short &val) { + unsigned int oldval, newval, assume; + oldval = *reinterpret_cast(&dest); + + do { + assume = oldval; + newval = assume & 0x7fff0000 + ((assume & 0xffff) + val) & 0xffff; + oldval = + atomicCAS(reinterpret_cast(const_cast(dest)), + assume, newval); + } while (assume != oldval); + + return oldval; +} + +__inline__ __device__ long long atomic_fetch_add(volatile long long *dest, + const long long &val) { + return atomicAdd( + reinterpret_cast(const_cast(dest)), + val); +} + +template +__inline__ __device__ T +atomic_fetch_add(volatile T *dest, + typename std::enable_if::type val) { + // FIXME_HIP + Kokkos::abort("atomic_fetch_add not implemented for large types.\n"); + T return_val; + int done = 0; + unsigned int active = __ballot(1); + unsigned int done_active = 0; + while (active != done_active) { + if (!done) { + // if(Kokkos::Impl::lock_address_hip_space((void *)dest)) + { + return_val = *dest; + *dest = return_val + val; + // Kokkos::Impl::unlock_address_hip_space((void *)dest); + done = 1; + } + } + done_active = __ballot(done); + } + return return_val; +} + +// atmic_fetch_sub ------------------------------------------------------------- + +__inline__ __device__ int atomic_fetch_sub(volatile int *dest, int const &val) { + return atomicSub(const_cast(dest), val); +} + +__inline__ __device__ unsigned int atomic_fetch_sub(volatile unsigned int *dest, + unsigned int const &val) { + return atomicSub(const_cast(dest), val); +} + +__inline__ __device__ unsigned long long atomic_fetch_sub( + unsigned long long *dest, int64_t const &val) { + return atomicAdd(reinterpret_cast(dest), + -reinterpret_cast(val)); +} + +__inline__ __device__ char atomic_fetch_sub(volatile char *dest, + const char &val) { + unsigned int oldval, newval, assume; + oldval = *reinterpret_cast(dest); + + do { + assume = oldval; + newval = assume & 0x7fffff00 + ((assume & 0xff) - val) & 0xff; + oldval = + atomicCAS(reinterpret_cast(const_cast(dest)), + assume, newval); + } while (assume != oldval); + + return oldval; +} + +__inline__ __device__ short atomic_fetch_sub(volatile short *dest, + const short &val) { + unsigned int oldval, newval, assume; + oldval = *reinterpret_cast(dest); + + do { + assume = oldval; + newval = assume & 0x7fff0000 + ((assume & 0xffff) - val) & 0xffff; + oldval = + atomicCAS(reinterpret_cast(const_cast(dest)), + assume, newval); + } while (assume != oldval); + + return oldval; +} + +__inline__ __device__ long long atomic_fetch_sub(volatile long long *dest, + const long long &val) { + return static_cast(atomicAdd( + reinterpret_cast(const_cast(dest)), + -reinterpret_cast(val))); +} + +template +__inline__ __device__ T atomic_fetch_sub( + volatile T *dest, + typename std::enable_if::type val) { + // FIXME_HIP UB + union U { + int i; + T t; + __inline__ __device__ U() {} + } assume, oldval, newval; + + oldval.t = *dest; + + do { + assume.i = oldval.i; + newval.t = assume.t - val; + oldval.i = atomic_compare_exchange(reinterpret_cast(dest), + assume.i, newval.i); + } while (assume.i != oldval.i); + + return oldval.t; +} + +template +inline __device__ T atomic_fetch_sub( + volatile T *const dest, + typename std::enable_if::type + val) { + // FIXME_HIP UB + union U { + unsigned long long i; + T t; + __inline__ __device__ U() {} + } assume, oldval, newval; + + oldval.t = *dest; + + do { + assume.i = oldval.i; + newval.t = assume.t - val; + oldval.i = atomic_compare_exchange( + reinterpret_cast(dest), assume.i, + newval.i); + } while (assume.i != oldval.i); + + return oldval.t; +} + +template +__inline__ __device__ T atomic_fetch_sub( + volatile T *dest, + typename std::enable_if::type val) { + unsigned int oldval, newval, assume; + oldval = *reinterpret_cast(dest); + + do { + assume = oldval; + newval = assume & 0x7fffff00 + ((assume & 0xff) - val) & 0xff; + oldval = atomicCAS(reinterpret_cast(dest), assume, newval); + } while (assume != oldval); + + return reinterpret_cast(oldval) & 0xff; +} + +template +__inline__ __device__ T atomic_fetch_sub( + volatile T *dest, + typename std::enable_if::type val) { + unsigned int oldval, newval, assume; + oldval = *reinterpret_cast(dest); + + do { + assume = oldval; + newval = assume & 0x7fff0000 + ((assume & 0xffff) - val) & 0xffff; + oldval = atomicCAS(reinterpret_cast(dest), assume, newval); + } while (assume != oldval); + + return reinterpret_cast(oldval) & 0xffff; +} + +template +__inline__ __device__ T +atomic_fetch_sub(volatile T *const dest, + typename std::enable_if::type &val) { + // FIXME_HIP + Kokkos::abort("atomic_fetch_sub not implemented for large types.\n"); + T return_val; + int done = 0; + unsigned int active = __ballot(1); + unsigned int done_active = 0; + while (active != done_active) { + if (!done) { + /*if (Impl::lock_address_hip_space((void*)dest)) */ + { + return_val = *dest; + *dest = return_val - val; + // Impl::unlock_address_hip_space((void*)dest); + done = 1; + } + } + done_active = __ballot(done); + } + return return_val; +} + +// atomic_fetch_or ------------------------------------------------------------- + +__inline__ __device__ int atomic_fetch_or(volatile int *const dest, + int const val) { + return atomicOr(const_cast(dest), val); +} + +__inline__ __device__ unsigned int atomic_fetch_or( + volatile unsigned int *const dest, unsigned int const val) { + return atomicOr(const_cast(dest), val); +} + +__inline__ __device__ unsigned long long int atomic_fetch_or( + volatile unsigned long long int *const dest, + unsigned long long int const val) { + return atomicOr(const_cast(dest), val); +} + +// atomic_fetch_and ------------------------------------------------------------ + +__inline__ __device__ int atomic_fetch_and(volatile int *const dest, + int const val) { + return atomicAnd(const_cast(dest), val); +} + +__inline__ __device__ unsigned int atomic_fetch_and( + volatile unsigned int *const dest, unsigned int const val) { + return atomicAnd(const_cast(dest), val); +} + +__inline__ __device__ unsigned long long int atomic_fetch_and( + volatile unsigned long long int *const dest, + unsigned long long int const val) { + return atomicAnd(const_cast(dest), val); +} +} // namespace Kokkos +#endif + +#endif diff --git a/lib/kokkos/core/src/HIP/Kokkos_HIP_BlockSize_Deduction.hpp b/lib/kokkos/core/src/HIP/Kokkos_HIP_BlockSize_Deduction.hpp new file mode 100644 index 0000000000000000000000000000000000000000..8799d359ff012462232a2a742c85d3195717379d --- /dev/null +++ b/lib/kokkos/core/src/HIP/Kokkos_HIP_BlockSize_Deduction.hpp @@ -0,0 +1,339 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 3.0 +// Copyright (2020) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +#ifndef KOKKOS_HIP_BLOCKSIZE_DEDUCTION_HPP +#define KOKKOS_HIP_BLOCKSIZE_DEDUCTION_HPP + +#include + +#if defined(__HIPCC__) + +#include +#include + +namespace Kokkos { +namespace Experimental { +namespace Impl { +template +struct HIPGetMaxBlockSize; + +template +int hip_get_max_block_size(typename DriverType::functor_type const &f, + size_t const vector_length, + size_t const shmem_extra_block, + size_t const shmem_extra_thread) { + return HIPGetMaxBlockSize::get_block_size( + f, vector_length, shmem_extra_block, shmem_extra_thread); +} + +template +int hip_get_max_block_size(const HIPInternal * /*hip_instance*/, + const hipFuncAttributes &attr, + const FunctorType & /*f*/, + const size_t /*vector_length*/, + const size_t /*shmem_block*/, + const size_t /*shmem_thread*/) { + // FIXME_HIP find a better algorithm. Be aware that + // maxThreadsPerMultiProcessor, regsPerBlock, and l2CacheSize are bugged and + // always return zero + // https://github.com/ROCm-Developer-Tools/HIP/blob/6c5fa32815650cc20a4f783d09b013610348a4d5/include/hip/hcc_detail/hip_runtime_api.h#L438-L440 + // and we don't have access to the same information than we do for CUDA + + int const max_threads_per_block_mi60 = 1024; + int const max_threads_per_block = LaunchBounds::maxTperB == 0 + ? max_threads_per_block_mi60 + : LaunchBounds::maxTperB; + return std::min(attr.maxThreadsPerBlock, max_threads_per_block); +} + +template +struct HIPGetMaxBlockSize, true> { + static int get_block_size(typename DriverType::functor_type const &f, + size_t const vector_length, + size_t const shmem_extra_block, + size_t const shmem_extra_thread) { + unsigned int numBlocks = 0; + int blockSize = 1024; + int sharedmem = + shmem_extra_block + shmem_extra_thread * (blockSize / vector_length) + + ::Kokkos::Impl::FunctorTeamShmemSize< + typename DriverType::functor_type>::value(f, blockSize / + vector_length); + hipOccupancyMaxActiveBlocksPerMultiprocessor( + &numBlocks, hip_parallel_launch_constant_memory, blockSize, + sharedmem); + + if (numBlocks > 0) return blockSize; + while (blockSize > HIPTraits::WarpSize && numBlocks == 0) { + blockSize /= 2; + sharedmem = + shmem_extra_block + shmem_extra_thread * (blockSize / vector_length) + + ::Kokkos::Impl::FunctorTeamShmemSize< + typename DriverType::functor_type>::value(f, blockSize / + vector_length); + + hipOccupancyMaxActiveBlocksPerMultiprocessor( + &numBlocks, hip_parallel_launch_constant_memory, + blockSize, sharedmem); + } + int blockSizeUpperBound = blockSize * 2; + while (blockSize < blockSizeUpperBound && numBlocks > 0) { + blockSize += HIPTraits::WarpSize; + sharedmem = + shmem_extra_block + shmem_extra_thread * (blockSize / vector_length) + + ::Kokkos::Impl::FunctorTeamShmemSize< + typename DriverType::functor_type>::value(f, blockSize / + vector_length); + + hipOccupancyMaxActiveBlocksPerMultiprocessor( + &numBlocks, hip_parallel_launch_constant_memory, + blockSize, sharedmem); + } + return blockSize - HIPTraits::WarpSize; + } +}; + +template +struct HIPGetOptBlockSize; + +template +int hip_get_opt_block_size(typename DriverType::functor_type const &f, + size_t const vector_length, + size_t const shmem_extra_block, + size_t const shmem_extra_thread) { + return HIPGetOptBlockSize< + DriverType, LaunchBounds, + (HIPTraits::ConstantMemoryUseThreshold < + sizeof(DriverType))>::get_block_size(f, vector_length, shmem_extra_block, + shmem_extra_thread); +} + +template +int hip_get_opt_block_size(HIPInternal const * /*hip_instance*/, + hipFuncAttributes const &attr, + FunctorType const & /*f*/, + size_t const /*vector_length*/, + size_t const /*shmem_block*/, + size_t const /*shmem_thread*/) { + // FIXME_HIP find a better algorithm. Be aware that + // maxThreadsPerMultiProcessor, regsPerBlock, and l2CacheSize are bugged and + // always return zero + // https://github.com/ROCm-Developer-Tools/HIP/blob/6c5fa32815650cc20a4f783d09b013610348a4d5/include/hip/hcc_detail/hip_runtime_api.h#L438-L440 + // and we don't have access to the same information than we do for CUDA + + int const max_threads_per_block_mi60 = 1024; + int const max_threads_per_block = LaunchBounds::maxTperB == 0 + ? max_threads_per_block_mi60 + : LaunchBounds::maxTperB; + return std::min(attr.maxThreadsPerBlock, max_threads_per_block); +} + +// FIXME_HIP the code is identical to the false struct except for +// hip_parallel_launch_constant_memory +template +struct HIPGetOptBlockSize, true> { + static int get_block_size(typename DriverType::functor_type const &f, + size_t const vector_length, + size_t const shmem_extra_block, + size_t const shmem_extra_thread) { + int blockSize = HIPTraits::WarpSize / 2; + int numBlocks; + int sharedmem; + int maxOccupancy = 0; + int bestBlockSize = 0; + + while (blockSize < 1024) { + blockSize *= 2; + + // calculate the occupancy with that optBlockSize and check whether its + // larger than the largest one found so far + sharedmem = + shmem_extra_block + shmem_extra_thread * (blockSize / vector_length) + + ::Kokkos::Impl::FunctorTeamShmemSize< + typename DriverType::functor_type>::value(f, blockSize / + vector_length); + hipOccupancyMaxActiveBlocksPerMultiprocessor( + &numBlocks, hip_parallel_launch_constant_memory, + blockSize, sharedmem); + if (maxOccupancy < numBlocks * blockSize) { + maxOccupancy = numBlocks * blockSize; + bestBlockSize = blockSize; + } + } + return bestBlockSize; + } +}; + +template +struct HIPGetOptBlockSize, false> { + static int get_block_size(const typename DriverType::functor_type &f, + const size_t vector_length, + const size_t shmem_extra_block, + const size_t shmem_extra_thread) { + int blockSize = HIPTraits::WarpSize / 2; + int numBlocks; + int sharedmem; + int maxOccupancy = 0; + int bestBlockSize = 0; + + while (blockSize < 1024) { + blockSize *= 2; + sharedmem = + shmem_extra_block + shmem_extra_thread * (blockSize / vector_length) + + ::Kokkos::Impl::FunctorTeamShmemSize< + typename DriverType::functor_type>::value(f, blockSize / + vector_length); + + hipOccupancyMaxActiveBlocksPerMultiprocessor( + &numBlocks, hip_parallel_launch_local_memory, blockSize, + sharedmem); + + if (maxOccupancy < numBlocks * blockSize) { + maxOccupancy = numBlocks * blockSize; + bestBlockSize = blockSize; + } + } + return bestBlockSize; + } +}; + +// FIXME_HIP the code is identical to the false struct except for +// hip_parallel_launch_constant_memory +template +struct HIPGetOptBlockSize< + DriverType, Kokkos::LaunchBounds, + true> { + static int get_block_size(const typename DriverType::functor_type &f, + const size_t vector_length, + const size_t shmem_extra_block, + const size_t shmem_extra_thread) { + int blockSize = HIPTraits::WarpSize / 2; + int numBlocks; + int sharedmem; + int maxOccupancy = 0; + int bestBlockSize = 0; + int max_threads_per_block = + std::min(MaxThreadsPerBlock, + hip_internal_maximum_warp_count() * HIPTraits::WarpSize); + + while (blockSize < max_threads_per_block) { + blockSize *= 2; + + // calculate the occupancy with that optBlockSize and check whether its + // larger than the largest one found so far + sharedmem = + shmem_extra_block + shmem_extra_thread * (blockSize / vector_length) + + ::Kokkos::Impl::FunctorTeamShmemSize< + typename DriverType::functor_type>::value(f, blockSize / + vector_length); + hipOccupancyMaxActiveBlocksPerMultiprocessor( + &numBlocks, + hip_parallel_launch_constant_memory, + blockSize, sharedmem); + if (numBlocks >= static_cast(MinBlocksPerSM) && + blockSize <= static_cast(MaxThreadsPerBlock)) { + if (maxOccupancy < numBlocks * blockSize) { + maxOccupancy = numBlocks * blockSize; + bestBlockSize = blockSize; + } + } + } + if (maxOccupancy > 0) return bestBlockSize; + return -1; + } +}; + +template +struct HIPGetOptBlockSize< + DriverType, Kokkos::LaunchBounds, + false> { + static int get_block_size(const typename DriverType::functor_type &f, + const size_t vector_length, + const size_t shmem_extra_block, + const size_t shmem_extra_thread) { + int blockSize = HIPTraits::WarpSize / 2; + int numBlocks; + int sharedmem; + int maxOccupancy = 0; + int bestBlockSize = 0; + int max_threads_per_block = + std::min(MaxThreadsPerBlock, + hip_internal_maximum_warp_count() * HIPTraits::WarpSize); + + while (blockSize < max_threads_per_block) { + blockSize *= 2; + sharedmem = + shmem_extra_block + shmem_extra_thread * (blockSize / vector_length) + + ::Kokkos::Impl::FunctorTeamShmemSize< + typename DriverType::functor_type>::value(f, blockSize / + vector_length); + + hipOccupancyMaxActiveBlocksPerMultiprocessor( + &numBlocks, + hip_parallel_launch_local_memory, + blockSize, sharedmem); + if (numBlocks >= int(MinBlocksPerSM) && + blockSize <= int(MaxThreadsPerBlock)) { + if (maxOccupancy < numBlocks * blockSize) { + maxOccupancy = numBlocks * blockSize; + bestBlockSize = blockSize; + } + } + } + if (maxOccupancy > 0) return bestBlockSize; + return -1; + } +}; + +} // namespace Impl +} // namespace Experimental +} // namespace Kokkos + +#endif + +#endif diff --git a/lib/kokkos/core/unit_test/qthreads/TestQthreads_ViewAPI_b.cpp b/lib/kokkos/core/src/HIP/Kokkos_HIP_Error.hpp similarity index 50% rename from lib/kokkos/core/unit_test/qthreads/TestQthreads_ViewAPI_b.cpp rename to lib/kokkos/core/src/HIP/Kokkos_HIP_Error.hpp index b37937369a6df295d96e5e5e9e1fa7ef52995797..2abded0e99a6ab1cd5719789e100156aa3ef9cc1 100644 --- a/lib/kokkos/core/unit_test/qthreads/TestQthreads_ViewAPI_b.cpp +++ b/lib/kokkos/core/src/HIP/Kokkos_HIP_Error.hpp @@ -42,91 +42,69 @@ //@HEADER */ -#include +#ifndef KOKKOS_HIP_ERROR_HPP +#define KOKKOS_HIP_ERROR_HPP -namespace Test { +#include +#include -TEST_F(qthreads, impl_shared_alloc) { -#if 0 - test_shared_alloc< Kokkos::HostSpace, Kokkos::Qthreads >(); -#endif -} - -TEST_F(qthreads, impl_view_mapping_b) { -#if 0 - test_view_mapping_subview< Kokkos::Qthreads >(); - TestViewMappingAtomic< Kokkos::Qthreads >::run(); -#endif -} +#include -TEST_F(qthreads, view_api) { -#if 0 - TestViewAPI< double, Kokkos::Qthreads >(); -#endif -} +#include -TEST_F(qthreads, view_nested_view) { -#if 0 - ::Test::view_nested_view< Kokkos::Qthreads >(); -#endif -} +namespace Kokkos { +namespace Impl { -TEST_F(qthreads, view_remap) { -#if 0 - enum { N0 = 3, N1 = 2, N2 = 8, N3 = 9 }; +void hip_internal_error_throw(hipError_t e, const char* name, + const char* file = NULL, const int line = 0); - typedef Kokkos::View< double*[N1][N2][N3], - Kokkos::LayoutRight, - Kokkos::Qthreads > output_type; +inline void hip_internal_safe_call(hipError_t e, const char* name, + const char* file = NULL, + const int line = 0) { + if (hipSuccess != e) { + hip_internal_error_throw(e, name, file, line); + } +} - typedef Kokkos::View< int**[N2][N3], - Kokkos::LayoutLeft, - Kokkos::Qthreads > input_type; +} // namespace Impl +} // namespace Kokkos - typedef Kokkos::View< int*[N0][N2][N3], - Kokkos::LayoutLeft, - Kokkos::Qthreads > diff_type; +#define HIP_SAFE_CALL(call) \ + Kokkos::Impl::hip_internal_safe_call(call, #call, __FILE__, __LINE__) - output_type output( "output", N0 ); - input_type input ( "input", N0, N1 ); - diff_type diff ( "diff", N0 ); +namespace Kokkos { +namespace Experimental { - int value = 0; +class HIPRawMemoryAllocationFailure : public RawMemoryAllocationFailure { + private: + hipError_t m_error_code = hipSuccess; - for ( size_t i3 = 0; i3 < N3; ++i3 ) - for ( size_t i2 = 0; i2 < N2; ++i2 ) - for ( size_t i1 = 0; i1 < N1; ++i1 ) - for ( size_t i0 = 0; i0 < N0; ++i0 ) - { - input( i0, i1, i2, i3 ) = ++value; + static FailureMode get_failure_mode(hipError_t error_code) { + switch (error_code) { + case hipErrorMemoryAllocation: return FailureMode::OutOfMemoryError; + case hipErrorInvalidValue: return FailureMode::InvalidAllocationSize; + default: return FailureMode::Unknown; + } } - // Kokkos::deep_copy( diff, input ); // Throw with incompatible shape. - Kokkos::deep_copy( output, input ); - - value = 0; - - for ( size_t i3 = 0; i3 < N3; ++i3 ) - for ( size_t i2 = 0; i2 < N2; ++i2 ) - for ( size_t i1 = 0; i1 < N1; ++i1 ) - for ( size_t i0 = 0; i0 < N0; ++i0 ) - { - ++value; - ASSERT_EQ( value, ( (int) output( i0, i1, i2, i3 ) ) ); + public: + HIPRawMemoryAllocationFailure(size_t arg_attempted_size, + hipError_t arg_error_code, + AllocationMechanism arg_mechanism) noexcept + : RawMemoryAllocationFailure( + arg_attempted_size, /* HIPSpace doesn't handle alignment? */ 1, + get_failure_mode(arg_error_code), arg_mechanism), + m_error_code(arg_error_code) {} + + void append_additional_error_information(std::ostream& o) const override { + if (m_error_code != hipSuccess) { + o << " The HIP allocation returned the error code \"\"" + << hipGetErrorName(m_error_code) << "\"."; + } } -#endif -} +}; -TEST_F(qthreads, view_aggregate) { -#if 0 - TestViewAggregate< Kokkos::Qthreads >(); -#endif -} +} // namespace Experimental +} // namespace Kokkos -TEST_F(qthreads, template_meta_functions) { -#if 0 - TestTemplateMetaFunctions< int, Kokkos::Qthreads >(); #endif -} - -} // namespace Test diff --git a/lib/kokkos/core/src/HIP/Kokkos_HIP_Instance.cpp b/lib/kokkos/core/src/HIP/Kokkos_HIP_Instance.cpp new file mode 100644 index 0000000000000000000000000000000000000000..1dcba0ff3e7322a3713583ef2a683fee64552d40 --- /dev/null +++ b/lib/kokkos/core/src/HIP/Kokkos_HIP_Instance.cpp @@ -0,0 +1,373 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 3.0 +// Copyright (2020) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +/*--------------------------------------------------------------------------*/ +/* Kokkos interfaces */ + +#include + +#include +#include +#include +#include + +/*--------------------------------------------------------------------------*/ +/* Standard 'C' libraries */ +#include + +/* Standard 'C++' libraries */ +#include +#include +#include +#include + +namespace Kokkos { +namespace Experimental { +namespace { +class HIPInternalDevices { + public: + enum { MAXIMUM_DEVICE_COUNT = 64 }; + struct hipDeviceProp_t m_hipProp[MAXIMUM_DEVICE_COUNT]; + int m_hipDevCount; + + HIPInternalDevices(); + + static HIPInternalDevices const &singleton(); +}; + +HIPInternalDevices::HIPInternalDevices() { + HIP_SAFE_CALL(hipGetDeviceCount(&m_hipDevCount)); + + if (m_hipDevCount > MAXIMUM_DEVICE_COUNT) { + Kokkos::abort( + "Sorry, you have more GPUs per node than we thought anybody would ever " + "have. Please report this to github.com/kokkos/kokkos."); + } + for (int i = 0; i < m_hipDevCount; ++i) { + HIP_SAFE_CALL(hipGetDeviceProperties(m_hipProp + i, i)); + } +} + +const HIPInternalDevices &HIPInternalDevices::singleton() { + static HIPInternalDevices self; + return self; +} +} // namespace + +namespace Impl { + +int HIPInternal::was_initialized = 0; +int HIPInternal::was_finalized = 0; +//---------------------------------------------------------------------------- + +void HIPInternal::print_configuration(std::ostream & /*s*/) const { + // FIXME_HIP + Kokkos::abort("print_configuration not implemented!\n"); + /*const HIPInternalDevices & dev_info = HIPInternalDevices::singleton(); + +#if defined( KOKKOS_ENABLE_HIP ) + s << "macro KOKKOS_ENABLE_HIP : defined" << std::endl ; +#endif +#if defined( __hcc_version__ ) + s << "macro __hcc_version__ = " << __hcc_version__ + << std::endl ; +#endif + + for ( int i = 0 ; i < dev_info.m_hipDevCount ; ++i ) { + s << "Kokkos::Experimental::HIP[ " << i << " ] " + << dev_info.m_hipProp[i].name + << " version " << (dev_info.m_hipProp[i].major) << "." << +dev_info.m_hipProp[i].minor + << ", Total Global Memory: " << +human_memory_size(dev_info.m_hipProp[i].totalGlobalMem) + << ", Shared Memory per Wavefront: " << +human_memory_size(dev_info.m_hipProp[i].sharedMemPerWavefront); if ( m_hipDev == +i ) s << " : Selected" ; s << std::endl ; + }*/ +} + +//---------------------------------------------------------------------------- + +HIPInternal::~HIPInternal() { + if (m_scratchSpace || m_scratchFlags) { + std::cerr << "Kokkos::Experimental::HIP ERROR: Failed to call " + "Kokkos::Experimental::HIP::finalize()" + << std::endl; + std::cerr.flush(); + } + + m_hipDev = -1; + m_hipArch = -1; + m_multiProcCount = 0; + m_maxWarpCount = 0; + m_maxSharedWords = 0; + m_maxShmemPerBlock = 0; + m_scratchSpaceCount = 0; + m_scratchFlagsCount = 0; + m_scratchSpace = 0; + m_scratchFlags = 0; +} + +int HIPInternal::verify_is_initialized(const char *const label) const { + if (m_hipDev < 0) { + std::cerr << "Kokkos::Experimental::HIP::" << label + << " : ERROR device not initialized" << std::endl; + } + return 0 <= m_hipDev; +} + +HIPInternal &HIPInternal::singleton() { + static HIPInternal *self = nullptr; + if (!self) { + self = new HIPInternal(); + } + return *self; +} + +void HIPInternal::initialize(int hip_device_id) { + if (was_finalized) + Kokkos::abort("Calling HIP::initialize after HIP::finalize is illegal\n"); + + if (is_initialized()) return; + + enum { WordSize = sizeof(size_type) }; + + if (!HostSpace::execution_space::impl_is_initialized()) { + const std::string msg( + "HIP::initialize ERROR : HostSpace::execution_space " + "is not initialized"); + Kokkos::Impl::throw_runtime_exception(msg); + } + + const HIPInternalDevices &dev_info = HIPInternalDevices::singleton(); + + const bool ok_init = 0 == m_scratchSpace || 0 == m_scratchFlags; + + // Need at least a GPU device + const bool ok_id = + 0 <= hip_device_id && hip_device_id < dev_info.m_hipDevCount; + + if (ok_init && ok_id) { + const struct hipDeviceProp_t &hipProp = dev_info.m_hipProp[hip_device_id]; + + m_hipDev = hip_device_id; + + hipSetDevice(m_hipDev); + + // FIXME_HIP for now always uses default stream + m_stream = 0; + + // number of multiprocessors + m_multiProcCount = hipProp.multiProcessorCount; + + //---------------------------------- + // Maximum number of warps, + // at most one warp per thread in a warp for reduction. + m_maxWarpCount = hipProp.maxThreadsPerBlock / Impl::HIPTraits::WarpSize; + if (HIPTraits::WarpSize < m_maxWarpCount) { + m_maxWarpCount = Impl::HIPTraits::WarpSize; + } + m_maxSharedWords = hipProp.sharedMemPerBlock / WordSize; + + //---------------------------------- + // Maximum number of blocks + m_maxBlock = hipProp.maxGridSize[0]; + + m_shmemPerSM = hipProp.maxSharedMemoryPerMultiProcessor; + m_maxShmemPerBlock = hipProp.sharedMemPerBlock; + m_maxThreadsPerSM = hipProp.maxThreadsPerMultiProcessor; + m_maxThreadsPerBlock = hipProp.maxThreadsPerBlock; + + //---------------------------------- + // Multiblock reduction uses scratch flags for counters + // and scratch space for partial reduction values. + // Allocate some initial space. This will grow as needed. + { + const unsigned reduce_block_count = + m_maxWarpCount * Impl::HIPTraits::WarpSize; + + (void)scratch_flags(reduce_block_count * 2 * sizeof(size_type)); + (void)scratch_space(reduce_block_count * 16 * sizeof(size_type)); + } + //---------------------------------- + } else { + std::ostringstream msg; + msg << "Kokkos::Experimental::HIP::initialize(" << hip_device_id + << ") FAILED"; + + if (!ok_init) { + msg << " : Already initialized"; + } + if (!ok_id) { + msg << " : Device identifier out of range " + << "[0.." << dev_info.m_hipDevCount - 1 << "]"; + } + Kokkos::Impl::throw_runtime_exception(msg.str()); + } + + // Init the array for used for arbitrarily sized atomics + // FIXME_HIP uncomment this when global variable works + // if (m_stream == 0) ::Kokkos::Impl::initialize_host_hip_lock_arrays(); +} + +//---------------------------------------------------------------------------- + +typedef Kokkos::Experimental::HIP::size_type + ScratchGrain[Impl::HIPTraits::WarpSize]; +enum { sizeScratchGrain = sizeof(ScratchGrain) }; + +Kokkos::Experimental::HIP::size_type *HIPInternal::scratch_space( + const Kokkos::Experimental::HIP::size_type size) { + if (verify_is_initialized("scratch_space") && + m_scratchSpaceCount * sizeScratchGrain < size) { + m_scratchSpaceCount = (size + sizeScratchGrain - 1) / sizeScratchGrain; + + typedef Kokkos::Impl::SharedAllocationRecord + Record; + + static Record *const r = Record::allocate( + Kokkos::Experimental::HIPSpace(), "InternalScratchSpace", + (sizeScratchGrain * m_scratchSpaceCount)); + + Record::increment(r); + + m_scratchSpace = reinterpret_cast(r->data()); + } + + return m_scratchSpace; +} + +Kokkos::Experimental::HIP::size_type *HIPInternal::scratch_flags( + const Kokkos::Experimental::HIP::size_type size) { + if (verify_is_initialized("scratch_flags") && + m_scratchFlagsCount * sizeScratchGrain < size) { + m_scratchFlagsCount = (size + sizeScratchGrain - 1) / sizeScratchGrain; + + typedef Kokkos::Impl::SharedAllocationRecord + Record; + + Record *const r = Record::allocate( + Kokkos::Experimental::HIPSpace(), "InternalScratchFlags", + (sizeScratchGrain * m_scratchFlagsCount)); + + Record::increment(r); + + m_scratchFlags = reinterpret_cast(r->data()); + + hipMemset(m_scratchFlags, 0, m_scratchFlagsCount * sizeScratchGrain); + } + + return m_scratchFlags; +} + +//---------------------------------------------------------------------------- + +void HIPInternal::finalize() { + HIP().fence(); + was_finalized = 1; + if (0 != m_scratchSpace || 0 != m_scratchFlags) { + typedef Kokkos::Impl::SharedAllocationRecord + RecordHIP; + + RecordHIP::decrement(RecordHIP::get_record(m_scratchFlags)); + RecordHIP::decrement(RecordHIP::get_record(m_scratchSpace)); + + m_hipDev = -1; + m_hipArch = -1; + m_multiProcCount = 0; + m_maxWarpCount = 0; + m_maxBlock = 0; + m_maxSharedWords = 0; + m_maxShmemPerBlock = 0; + m_scratchSpaceCount = 0; + m_scratchFlagsCount = 0; + m_scratchSpace = 0; + m_scratchFlags = 0; + } +} + +//---------------------------------------------------------------------------- + +Kokkos::Experimental::HIP::size_type hip_internal_maximum_warp_count() { + return HIPInternal::singleton().m_maxWarpCount; +} + +Kokkos::Experimental::HIP::size_type hip_internal_maximum_grid_count() { + return HIPInternal::singleton().m_maxBlock; +} + +Kokkos::Experimental::HIP::size_type *hip_internal_scratch_space( + const Kokkos::Experimental::HIP::size_type size) { + return HIPInternal::singleton().scratch_space(size); +} + +Kokkos::Experimental::HIP::size_type *hip_internal_scratch_flags( + const Kokkos::Experimental::HIP::size_type size) { + return HIPInternal::singleton().scratch_flags(size); +} + +} // namespace Impl +} // namespace Experimental +} // namespace Kokkos + +//---------------------------------------------------------------------------- + +namespace Kokkos { +namespace Impl { +void hip_device_synchronize() { HIP_SAFE_CALL(hipDeviceSynchronize()); } + +void hip_internal_error_throw(hipError_t e, const char *name, const char *file, + const int line) { + std::ostringstream out; + out << name << " error( " << hipGetErrorName(e) + << "): " << hipGetErrorString(e); + if (file) { + out << " " << file << ":" << line; + } + throw_runtime_exception(out.str()); +} +} // namespace Impl +} // namespace Kokkos diff --git a/lib/kokkos/core/src/HIP/Kokkos_HIP_Instance.hpp b/lib/kokkos/core/src/HIP/Kokkos_HIP_Instance.hpp new file mode 100644 index 0000000000000000000000000000000000000000..c66fb2776f56b471b293d2f6b7d5d30bb0e5f4db --- /dev/null +++ b/lib/kokkos/core/src/HIP/Kokkos_HIP_Instance.hpp @@ -0,0 +1,141 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 3.0 +// Copyright (2020) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +/*--------------------------------------------------------------------------*/ + +#ifndef KOKKOS_HIP_INSTANCE_HPP +#define KOKKOS_HIP_INSTANCE_HPP + +#include + +namespace Kokkos { +namespace Experimental { +namespace Impl { + +struct HIPTraits { + static int constexpr WarpSize = 64; + static int constexpr WarpIndexShift = 6; /* WarpSize == 1 << WarpShift*/ + + static int constexpr ConstantMemoryUsage = 0x008000; /* 32k bytes */ + static int constexpr ConstantMemoryUseThreshold = 0x000200; /* 512 bytes */ +}; + +//---------------------------------------------------------------------------- + +HIP::size_type hip_internal_maximum_warp_count(); +HIP::size_type hip_internal_maximum_grid_count(); + +HIP::size_type *hip_internal_scratch_space(const HIP::size_type size); +HIP::size_type *hip_internal_scratch_flags(const HIP::size_type size); + +//---------------------------------------------------------------------------- + +class HIPInternal { + private: + HIPInternal(const HIPInternal &); + HIPInternal &operator=(const HIPInternal &); + + public: + using size_type = ::Kokkos::Experimental::HIP::size_type; + + int m_hipDev; + int m_hipArch; + unsigned m_multiProcCount; + unsigned m_maxWarpCount; + unsigned m_maxBlock; + unsigned m_maxSharedWords; + int m_shmemPerSM; + int m_maxShmemPerBlock; + int m_maxThreadsPerSM; + int m_maxThreadsPerBlock; + size_type m_scratchSpaceCount; + size_type m_scratchFlagsCount; + size_type *m_scratchSpace; + size_type *m_scratchFlags; + + hipStream_t m_stream; + + static int was_initialized; + static int was_finalized; + + static HIPInternal &singleton(); + + int verify_is_initialized(const char *const label) const; + + int is_initialized() const { + return m_hipDev >= 0; + } // 0 != m_scratchSpace && 0 != m_scratchFlags ; } + + void initialize(int hip_device_id); + void finalize(); + + void print_configuration(std::ostream &) const; + + ~HIPInternal(); + + HIPInternal() + : m_hipDev(-1), + m_hipArch(-1), + m_multiProcCount(0), + m_maxWarpCount(0), + m_maxBlock(0), + m_maxSharedWords(0), + m_shmemPerSM(0), + m_maxShmemPerBlock(0), + m_maxThreadsPerSM(0), + m_maxThreadsPerBlock(0), + m_scratchSpaceCount(0), + m_scratchFlagsCount(0), + m_scratchSpace(0), + m_scratchFlags(0) {} + + size_type *scratch_space(const size_type size); + size_type *scratch_flags(const size_type size); +}; + +} // namespace Impl +} // namespace Experimental +} // namespace Kokkos + +#endif diff --git a/lib/kokkos/core/src/HIP/Kokkos_HIP_KernelLaunch.cpp b/lib/kokkos/core/src/HIP/Kokkos_HIP_KernelLaunch.cpp new file mode 100644 index 0000000000000000000000000000000000000000..7c8582ef0ea55f3909ddfe68f9fa20d83da05c9f --- /dev/null +++ b/lib/kokkos/core/src/HIP/Kokkos_HIP_KernelLaunch.cpp @@ -0,0 +1,72 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 3.0 +// Copyright (2020) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +#include +#include +#include + +namespace Kokkos { +namespace Experimental { +namespace Impl { + +void *hip_resize_scratch_space(std::int64_t bytes, bool force_shrink) { + static void *ptr = nullptr; + static std::int64_t current_size = 0; + if (bytes > current_size) { + current_size = bytes; + if (ptr) Kokkos::kokkos_free<::Kokkos::Experimental::HIPSpace>(ptr); + ptr = Kokkos::kokkos_malloc( + "HIPSpace::ScratchMemory", current_size); + } + if ((bytes < current_size) && (force_shrink)) { + current_size = bytes; + Kokkos::kokkos_free<::Kokkos::Experimental::HIPSpace>(ptr); + ptr = Kokkos::kokkos_malloc( + "HIPSpace::ScratchMemory", current_size); + } + return ptr; +} +} // namespace Impl +} // namespace Experimental +} // namespace Kokkos diff --git a/lib/kokkos/core/src/HIP/Kokkos_HIP_KernelLaunch.hpp b/lib/kokkos/core/src/HIP/Kokkos_HIP_KernelLaunch.hpp new file mode 100644 index 0000000000000000000000000000000000000000..5c19a3e0da58a7b9871ae7501de8e78951a921fb --- /dev/null +++ b/lib/kokkos/core/src/HIP/Kokkos_HIP_KernelLaunch.hpp @@ -0,0 +1,212 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 3.0 +// Copyright (2020) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +#ifndef KOKKOS_HIP_KERNEL_LAUNCH_HPP +#define KOKKOS_HIP_KERNEL_LAUNCH_HPP + +#include + +#if defined(__HIPCC__) + +#include +#include +#include + +// FIXME_HIP cannot use global variable on the device with ROCm 2.9 +//__device__ __constant__ unsigned long kokkos_impl_hip_constant_memory_buffer +// [Kokkos::Experimental::Impl::HIPTraits::ConstantMemoryUsage / +// sizeof(unsigned long)]; + +namespace Kokkos { +namespace Experimental { +template +inline __device__ T *kokkos_impl_hip_shared_memory() { + extern __shared__ HIPSpace::size_type sh[]; + return (T *)sh; +} +} // namespace Experimental +} // namespace Kokkos + +namespace Kokkos { +namespace Experimental { +namespace Impl { + +void *hip_resize_scratch_space(std::int64_t bytes, bool force_shrink = false); + +template +__global__ static void hip_parallel_launch_constant_memory() { + __device__ __constant__ unsigned long kokkos_impl_hip_constant_memory_buffer + [Kokkos::Experimental::Impl::HIPTraits::ConstantMemoryUsage / + sizeof(unsigned long)]; + + const DriverType &driver = *(reinterpret_cast( + kokkos_impl_hip_constant_memory_buffer)); + + driver(); +} + +template +__global__ static void hip_parallel_launch_local_memory( + const DriverType driver) { + driver(); +} + +template +__global__ __launch_bounds__( + maxTperB, + minBperSM) static void hip_parallel_launch_local_memory(const DriverType + driver) { + driver(); +} + +enum class HIPLaunchMechanism : unsigned { + Default = 0, + ConstantMemory = 1, + GlobalMemory = 2, + LocalMemory = 4 +}; + +constexpr inline HIPLaunchMechanism operator|(HIPLaunchMechanism p1, + HIPLaunchMechanism p2) { + return static_cast(static_cast(p1) | + static_cast(p2)); +} +constexpr inline HIPLaunchMechanism operator&(HIPLaunchMechanism p1, + HIPLaunchMechanism p2) { + return static_cast(static_cast(p1) & + static_cast(p2)); +} + +template +struct HIPDispatchProperties { + HIPLaunchMechanism launch_mechanism = l; +}; + +template , + HIPLaunchMechanism LaunchMechanism = HIPLaunchMechanism::LocalMemory> +struct HIPParallelLaunch; + +template +struct HIPParallelLaunch< + DriverType, Kokkos::LaunchBounds, + HIPLaunchMechanism::LocalMemory> { + inline HIPParallelLaunch(const DriverType &driver, const dim3 &grid, + const dim3 &block, const int shmem, + const HIPInternal *hip_instance, + const bool /*prefer_shmem*/) { + if ((grid.x != 0) && ((block.x * block.y * block.z) != 0)) { + if (hip_instance->m_maxShmemPerBlock < shmem) { + Kokkos::Impl::throw_runtime_exception( + "HIPParallelLaunch FAILED: shared memory request is too large"); + } + + // Invoke the driver function on the device + printf("%i %i %i | %i %i %i | %i\n", grid.x, grid.y, grid.z, block.x, + block.y, block.z, shmem); + printf("Pre Launch Error: %s\n", hipGetErrorName(hipGetLastError())); + + hipLaunchKernelGGL( + (hip_parallel_launch_local_memory), + grid, block, shmem, hip_instance->m_stream, driver); + + Kokkos::Experimental::HIP().fence(); + printf("Post Launch Error: %s\n", hipGetErrorName(hipGetLastError())); +#if defined(KOKKOS_ENABLE_DEBUG_BOUNDS_CHECK) + HIP_SAFE_CALL(hipGetLastError()); + Kokkos::Experimental::HIP().fence(); +#endif + } + } + + static hipFuncAttributes get_hip_func_attributes() { + hipFuncAttributes attr; + hipFuncGetAttributes( + &attr, hip_parallel_launch_local_memory); + return attr; + } +}; + +template +struct HIPParallelLaunch, + HIPLaunchMechanism::LocalMemory> { + inline HIPParallelLaunch(const DriverType &driver, const dim3 &grid, + const dim3 &block, const int shmem, + const HIPInternal *hip_instance, + const bool /*prefer_shmem*/) { + if ((grid.x != 0) && ((block.x * block.y * block.z) != 0)) { + if (hip_instance->m_maxShmemPerBlock < shmem) { + Kokkos::Impl::throw_runtime_exception(std::string( + "HIPParallelLaunch FAILED: shared memory request is too large")); + } + + // Invoke the driver function on the device + hipLaunchKernelGGL(hip_parallel_launch_local_memory, grid, + block, shmem, hip_instance->m_stream, driver); + + Kokkos::Experimental::HIP().fence(); +#if defined(KOKKOS_ENABLE_DEBUG_BOUNDS_CHECK) + HIP_SAFE_CALL(hipGetLastError()); + Kokkos::Experimental::HIP().fence(); +#endif + } + } + + static hipFuncAttributes get_hip_func_attributes() { + hipFuncAttributes attr; + hipFuncGetAttributes(&attr, + reinterpret_cast( + &hip_parallel_launch_local_memory)); + return attr; + } +}; +} // namespace Impl +} // namespace Experimental +} // namespace Kokkos + +#endif + +#endif diff --git a/lib/kokkos/core/src/HIP/Kokkos_HIP_Locks.cpp b/lib/kokkos/core/src/HIP/Kokkos_HIP_Locks.cpp new file mode 100644 index 0000000000000000000000000000000000000000..0a34ed505b700bee79cc3b758373230d505e8002 --- /dev/null +++ b/lib/kokkos/core/src/HIP/Kokkos_HIP_Locks.cpp @@ -0,0 +1,118 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 3.0 +// Copyright (2020) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +#include + +#include +#include +#include + +#include + +#include + +#ifdef KOKKOS_ENABLE_HIP_RELOCATABLE_DEVICE_CODE +__device__ __constant__ HIPLockArrays g_device_hip_lock_arrays = {nullptr, + nullptr, 0}; +#endif + +namespace Kokkos { + +namespace { + +__global__ void init_lock_array_kernel_atomic() { + unsigned i = hipBlockIdx_x * hipBlockDim_x + hipThreadIdx_x; + if (i < KOKKOS_IMPL_HIP_SPACE_ATOMIC_MASK + 1) { + g_device_hip_lock_arrays.atomic[i] = 0; + } +} + +__global__ void init_lock_array_kernel_threadid(int N) { + unsigned i = hipBlockIdx_x * hipBlockDim_x + hipThreadIdx_x; + if (i < static_cast(N)) { + g_device_hip_lock_arrays.scratch[i] = 0; + } +} + +} // namespace + +namespace Impl { + +HIPLockArrays g_host_hip_lock_arrays = {nullptr, nullptr, 0}; + +void initialize_host_hip_lock_arrays() { + if (g_host_hip_lock_arrays.atomic != nullptr) return; + HIP_SAFE_CALL(hipMalloc( + &g_host_hip_lock_arrays.atomic, + sizeof(std::int32_t) * (KOKKOS_IMPL_HIP_SPACE_ATOMIC_MASK + 1))); + HIP_SAFE_CALL(hipMalloc( + &g_host_hip_lock_arrays.scratch, + sizeof(std::int32_t) * (::Kokkos::Experimental::HIP::concurrency()))); + + g_host_hip_lock_arrays.n = ::Kokkos::Experimental::HIP::concurrency(); + + KOKKOS_COPY_HIP_LOCK_ARRAYS_TO_DEVICE(); + hipLaunchKernelGGL(init_lock_array_kernel_atomic, + (KOKKOS_IMPL_HIP_SPACE_ATOMIC_MASK + 1 + 255) / 256, 256, + 0, 0); + hipLaunchKernelGGL(init_lock_array_kernel_threadid, + (::Kokkos::Experimental::HIP::concurrency() + 255) / 256, + 256, 0, 0, ::Kokkos::Experimental::HIP::concurrency()); +} + +void finalize_host_hip_lock_arrays() { + if (g_host_hip_lock_arrays.atomic == nullptr) return; + hipFree(g_host_hip_lock_arrays.atomic); + g_host_hip_lock_arrays.atomic = nullptr; + hipFree(g_host_hip_lock_arrays.scratch); + g_host_hip_lock_arrays.scratch = nullptr; + g_host_hip_lock_arrays.n = 0; +#ifdef KOKKOS_ENABLE_HIP_RELOCATABLE_DEVICE_CODE + KOKKOS_COPY_HIP_LOCK_ARRAYS_TO_DEVICE(); +#endif +} + +} // namespace Impl + +} // namespace Kokkos diff --git a/lib/kokkos/core/src/HIP/Kokkos_HIP_Locks.hpp b/lib/kokkos/core/src/HIP/Kokkos_HIP_Locks.hpp new file mode 100644 index 0000000000000000000000000000000000000000..fb6728ea14aaefc52c892accee32534157c519cf --- /dev/null +++ b/lib/kokkos/core/src/HIP/Kokkos_HIP_Locks.hpp @@ -0,0 +1,174 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 3.0 +// Copyright (2020) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +#ifndef KOKKOS_HIP_LOCKS_HPP +#define KOKKOS_HIP_LOCKS_HPP + +#include + +#include + +#include + +// FIXME_HIP We cannot use global variables defined in a namespace + +struct HIPLockArrays { + std::int32_t* atomic; + std::int32_t* scratch; + std::int32_t n; +}; + +/// \brief This global variable in Host space is the central definition +/// of these arrays. +extern HIPLockArrays g_host_hip_lock_arrays; + +namespace Kokkos { +namespace Impl { + +/// \brief After this call, the g_host_hip_lock_arrays variable has +/// valid, initialized arrays. +/// +/// This call is idempotent. +void initialize_host_hip_lock_arrays(); + +/// \brief After this call, the g_host_hip_lock_arrays variable has +/// all null pointers, and all array memory has been freed. +/// +/// This call is idempotent. +void finalize_host_hip_lock_arrays(); + +} // namespace Impl +} // namespace Kokkos + +#if defined(__HIPCC__) + +/// \brief This global variable in HIP space is what kernels use +/// to get access to the lock arrays. +/// +/// When relocatable device code is enabled, there can be one single +/// instance of this global variable for the entire executable, +/// whose definition will be in Kokkos_HIP_Locks.cpp (and whose declaration +/// here must then be extern). +/// This one instance will be initialized by initialize_host_HIP_lock_arrays +/// and need not be modified afterwards. +/// +/// When relocatable device code is disabled, an instance of this variable +/// will be created in every translation unit that sees this header file. +/// Since the Kokkos_HIP_Locks.cpp translation unit cannot initialize the +/// instances in other translation units, we must update this HIP global +/// variable based on the Host global variable prior to running any kernels +/// that will use it. +/// That is the purpose of the KOKKOS_ENSURE_HIP_LOCK_ARRAYS_ON_DEVICE macro. +__device__ +#ifdef KOKKOS_ENABLE_HIP_RELOCATABLE_DEVICE_CODE + __constant__ extern +#endif + HIPLockArrays g_device_hip_lock_arrays; + +#define KOKKOS_IMPL_HIP_SPACE_ATOMIC_MASK 0x1FFFF + +namespace Kokkos { +namespace Impl { + +/// \brief Acquire a lock for the address +/// +/// This function tries to acquire the lock for the hash value derived +/// from the provided ptr. If the lock is successfully acquired the +/// function returns true. Otherwise it returns false. +__device__ inline bool lock_address_hip_space(void* ptr) { + auto offset = reinterpret_cast(ptr); + offset = offset >> 2; + offset = offset & KOKKOS_IMPL_HIP_SPACE_ATOMIC_MASK; + return (0 == atomicCAS(&g_device_hip_lock_arrays.atomic[offset], 0, 1)); +} + +/// \brief Release lock for the address +/// +/// This function releases the lock for the hash value derived +/// from the provided ptr. This function should only be called +/// after previously successfully aquiring a lock with +/// lock_address. +__device__ inline void unlock_address_hip_space(void* ptr) { + auto offset = reinterpret_cast(ptr); + offset = offset >> 2; + offset = offset & KOKKOS_IMPL_HIP_SPACE_ATOMIC_MASK; + atomicExch(&g_device_hip_lock_arrays.atomic[offset], 0); +} + +} // namespace Impl +} // namespace Kokkos + +// Make lock_array_copied an explicit translation unit scope thingy +namespace Kokkos { +namespace Impl { +namespace { +static int lock_array_copied = 0; +inline int eliminate_warning_for_lock_array() { return lock_array_copied; } +} // namespace +} // namespace Impl +} // namespace Kokkos + +/* Dan Ibanez: it is critical that this code be a macro, so that it will + capture the right address for g_device_hip_lock_arrays! + putting this in an inline function will NOT do the right thing! */ +#define KOKKOS_COPY_HIP_LOCK_ARRAYS_TO_DEVICE() \ + { \ + if (::Kokkos::Impl::lock_array_copied == 0) { \ + HIP_SAFE_CALL(hipMemcpyToSymbol(HIP_SYMBOL(g_device_hip_lock_arrays), \ + &g_host_hip_lock_arrays, \ + sizeof(HIPLockArrays))); \ + } \ + lock_array_copied = 1; \ + } + +#ifdef KOKKOS_ENABLE_HIP_RELOCATABLE_DEVICE_CODE +#define KOKKOS_ENSURE_HIP_LOCK_ARRAYS_ON_DEVICE() +#else +#define KOKKOS_ENSURE_HIP_LOCK_ARRAYS_ON_DEVICE() \ + KOKKOS_COPY_HIP_LOCK_ARRAYS_TO_DEVICE() +#endif + +#endif /* defined( __HIPCC__ ) */ + +#endif /* #ifndef KOKKOS_HIP_LOCKS_HPP */ diff --git a/lib/kokkos/core/src/HIP/Kokkos_HIP_Parallel_MDRange.hpp b/lib/kokkos/core/src/HIP/Kokkos_HIP_Parallel_MDRange.hpp new file mode 100644 index 0000000000000000000000000000000000000000..7a6161346c7d3a53afe000056548938aa24a617b --- /dev/null +++ b/lib/kokkos/core/src/HIP/Kokkos_HIP_Parallel_MDRange.hpp @@ -0,0 +1,411 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 3.0 +// Copyright (2020) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +#ifndef KOKKOS_HIP_PARALLEL_MDRANGE_HPP +#define KOKKOS_HIP_PARALLEL_MDRANGE_HPP + +#include +#include +#include +#include +#include + +namespace Kokkos { +namespace Impl { +// ParallelFor +template +class ParallelFor, + Kokkos::Experimental::HIP> { + public: + using Policy = Kokkos::MDRangePolicy; + + private: + using array_index_type = typename Policy::array_index_type; + using index_type = typename Policy::index_type; + using LaunchBounds = typename Policy::launch_bounds; + + const FunctorType m_functor; + const Policy m_policy; + + ParallelFor() = delete; + ParallelFor& operator=(ParallelFor const&) = delete; + + public: + inline __device__ void operator()(void) const { + Kokkos::Impl::DeviceIterateTile(m_policy, + m_functor) + .exec_range(); + } + + inline void execute() const { + if (m_policy.m_num_tiles == 0) return; + array_index_type const maxblocks = static_cast( + m_policy.space().impl_internal_space_instance()->m_maxBlock); + if (Policy::rank == 2) { + dim3 const block(m_policy.m_tile[0], m_policy.m_tile[1], 1); + dim3 const grid( + std::min((m_policy.m_upper[0] - m_policy.m_lower[0] + block.x - 1) / + block.x, + maxblocks), + std::min((m_policy.m_upper[1] - m_policy.m_lower[1] + block.y - 1) / + block.y, + maxblocks), + 1); + Kokkos::Experimental::Impl::HIPParallelLaunch( + *this, grid, block, 0, + m_policy.space().impl_internal_space_instance(), false); + } else if (Policy::rank == 3) { + dim3 const block(m_policy.m_tile[0], m_policy.m_tile[1], + m_policy.m_tile[2]); + dim3 const grid( + std::min((m_policy.m_upper[0] - m_policy.m_lower[0] + block.x - 1) / + block.x, + maxblocks), + std::min((m_policy.m_upper[1] - m_policy.m_lower[1] + block.y - 1) / + block.y, + maxblocks), + std::min((m_policy.m_upper[2] - m_policy.m_lower[2] + block.z - 1) / + block.z, + maxblocks)); + Kokkos::Experimental::Impl::HIPParallelLaunch( + *this, grid, block, 0, + m_policy.space().impl_internal_space_instance(), false); + } else if (Policy::rank == 4) { + // id0,id1 encoded within hipThreadIdx_x; id2 to hipThreadIdx_y; id3 to + // hipThreadIdx_z + dim3 const block(m_policy.m_tile[0] * m_policy.m_tile[1], + m_policy.m_tile[2], m_policy.m_tile[3]); + dim3 const grid( + std::min(static_cast(m_policy.m_tile_end[0] * + m_policy.m_tile_end[1]), + static_cast(maxblocks)), + std::min((m_policy.m_upper[2] - m_policy.m_lower[2] + block.y - 1) / + block.y, + maxblocks), + std::min((m_policy.m_upper[3] - m_policy.m_lower[3] + block.z - 1) / + block.z, + maxblocks)); + Kokkos::Experimental::Impl::HIPParallelLaunch( + *this, grid, block, 0, + m_policy.space().impl_internal_space_instance(), false); + } else if (Policy::rank == 5) { + // id0,id1 encoded within hipThreadIdx_x; id2,id3 to hipThreadIdx_y; id4 + // to hipThreadIdx_z + dim3 const block(m_policy.m_tile[0] * m_policy.m_tile[1], + m_policy.m_tile[2] * m_policy.m_tile[3], + m_policy.m_tile[4]); + dim3 const grid( + std::min(static_cast(m_policy.m_tile_end[0] * + m_policy.m_tile_end[1]), + static_cast(maxblocks)), + std::min(static_cast(m_policy.m_tile_end[2] * + m_policy.m_tile_end[3]), + static_cast(maxblocks)), + std::min((m_policy.m_upper[4] - m_policy.m_lower[4] + block.z - 1) / + block.z, + maxblocks)); + Kokkos::Experimental::Impl::HIPParallelLaunch( + *this, grid, block, 0, + m_policy.space().impl_internal_space_instance(), false); + } else if (Policy::rank == 6) { + // id0,id1 encoded within hipThreadIdx_x; id2,id3 to hipThreadIdx_y; + // id4,id5 to hipThreadIdx_z + dim3 const block(m_policy.m_tile[0] * m_policy.m_tile[1], + m_policy.m_tile[2] * m_policy.m_tile[3], + m_policy.m_tile[4] * m_policy.m_tile[5]); + dim3 const grid(std::min(static_cast(m_policy.m_tile_end[0] * + m_policy.m_tile_end[1]), + static_cast(maxblocks)), + std::min(static_cast(m_policy.m_tile_end[2] * + m_policy.m_tile_end[3]), + static_cast(maxblocks)), + std::min(static_cast(m_policy.m_tile_end[4] * + m_policy.m_tile_end[5]), + static_cast(maxblocks))); + Kokkos::Experimental::Impl::HIPParallelLaunch( + *this, grid, block, 0, + m_policy.space().impl_internal_space_instance(), false); + } else { + printf("Kokkos::MDRange Error: Exceeded rank bounds with HIP\n"); + Kokkos::abort("Aborting"); + } + + } // end execute + + ParallelFor(FunctorType const& arg_functor, Policy const& arg_policy) + : m_functor(arg_functor), m_policy(arg_policy) {} +}; + +// ParallelReduce +template +class ParallelReduce, ReducerType, + Kokkos::Experimental::HIP> { + public: + using Policy = Kokkos::MDRangePolicy; + + private: + using array_index_type = typename Policy::array_index_type; + using index_type = typename Policy::index_type; + + using WorkTag = typename Policy::work_tag; + using Member = typename Policy::member_type; + using LaunchBounds = typename Policy::launch_bounds; + + using ReducerConditional = + Kokkos::Impl::if_c::value, + FunctorType, ReducerType>; + using ReducerTypeFwd = typename ReducerConditional::type; + using WorkTagFwd = + typename Kokkos::Impl::if_c::value, + WorkTag, void>::type; + + using ValueTraits = + Kokkos::Impl::FunctorValueTraits; + using ValueInit = Kokkos::Impl::FunctorValueInit; + using ValueJoin = Kokkos::Impl::FunctorValueJoin; + + public: + using pointer_type = typename ValueTraits::pointer_type; + using value_type = typename ValueTraits::value_type; + using reference_type = typename ValueTraits::reference_type; + using functor_type = FunctorType; + using size_type = Experimental::HIP::size_type; + + // Algorithmic constraints: blockSize is a power of two AND hipBlockDim_y == + // hipBlockDim_z == 1 + + const FunctorType m_functor; + const Policy m_policy; // used for workrange and nwork + const ReducerType m_reducer; + const pointer_type m_result_ptr; + const bool m_result_ptr_device_accessible; + size_type* m_scratch_space; + size_type* m_scratch_flags; + + using DeviceIteratePattern = typename Kokkos::Impl::Reduce::DeviceIterateTile< + Policy::rank, Policy, FunctorType, WorkTag, reference_type>; + + // Shall we use the shfl based reduction or not (only use it for static sized + // types of more than 128bit + enum { + UseShflReduction = ((sizeof(value_type) > 2 * sizeof(double)) && + (ValueTraits::StaticValueSize != 0)) + }; + // Some crutch to do function overloading + private: + using DummyShflReductionType = double; + using DummySHMEMReductionType = int; + + public: + inline __device__ void exec_range(reference_type update) const { + DeviceIteratePattern(m_policy, m_functor, update).exec_range(); + } + + inline __device__ void operator()(void) const { + const integral_nonzero_constant + word_count(ValueTraits::value_size( + ReducerConditional::select(m_functor, m_reducer)) / + sizeof(size_type)); + + { + reference_type value = ValueInit::init( + ReducerConditional::select(m_functor, m_reducer), + Experimental::kokkos_impl_hip_shared_memory() + + hipThreadIdx_y * word_count.value); + + // Number of blocks is bounded so that the reduction can be limited to two + // passes. Each thread block is given an approximately equal amount of + // work to perform. Accumulate the values for this block. The accumulation + // ordering does not match the final pass, but is arithmatically + // equivalent. + + this->exec_range(value); + } + + // Reduce with final value at hipBlockDim_y - 1 location. + // Problem: non power-of-two blockDim + if (::Kokkos::Impl::hip_single_inter_block_reduce_scan< + false, ReducerTypeFwd, WorkTagFwd>( + ReducerConditional::select(m_functor, m_reducer), hipBlockIdx_x, + hipGridDim_x, + Experimental::kokkos_impl_hip_shared_memory(), + m_scratch_space, m_scratch_flags)) { + // This is the final block with the final result at the final threads' + // location + size_type* const shared = + Experimental::kokkos_impl_hip_shared_memory() + + (hipBlockDim_y - 1) * word_count.value; + size_type* const global = m_result_ptr_device_accessible + ? reinterpret_cast(m_result_ptr) + : m_scratch_space; + + if (hipThreadIdx_y == 0) { + Kokkos::Impl::FunctorFinal::final( + ReducerConditional::select(m_functor, m_reducer), shared); + } + + if (Experimental::Impl::HIPTraits::WarpSize < word_count.value) { + __syncthreads(); + } + + for (unsigned i = hipThreadIdx_y; i < word_count.value; + i += hipBlockDim_y) { + global[i] = shared[i]; + } + } + } + + // Determine block size constrained by shared memory: + // This is copy/paste from Kokkos_HIP_Parallel_Range + inline unsigned local_block_size(const FunctorType& f) { + unsigned n = Experimental::Impl::HIPTraits::WarpSize * 8; + int shmem_size = ::Kokkos::Impl::hip_single_inter_block_reduce_scan_shmem< + false, FunctorType, WorkTag>(f, n); + while ( + (n && + (m_policy.space().impl_internal_space_instance()->m_maxShmemPerBlock < + shmem_size)) || + (n > static_cast( + ::Kokkos::Experimental::Impl::hip_get_max_block_size< + ParallelReduce, LaunchBounds>(f, 1, shmem_size, 0)))) { + n >>= 1; + shmem_size = ::Kokkos::Impl::hip_single_inter_block_reduce_scan_shmem< + false, FunctorType, WorkTag>(f, n); + } + return n; + } + + inline void execute() { + const int nwork = m_policy.m_num_tiles; + if (nwork) { + int block_size = m_policy.m_prod_tile_dims; + // CONSTRAINT: Algorithm requires block_size >= product of tile dimensions + // Nearest power of two + int exponent_pow_two = std::ceil(std::log2(block_size)); + block_size = std::pow(2, exponent_pow_two); + int suggested_blocksize = local_block_size(m_functor); + + block_size = (block_size > suggested_blocksize) + ? block_size + : suggested_blocksize; // Note: block_size must be less + // than or equal to 512 + + m_scratch_space = + ::Kokkos::Experimental::Impl::hip_internal_scratch_space( + ValueTraits::value_size( + ReducerConditional::select(m_functor, m_reducer)) * + block_size /* block_size == max block_count */); + m_scratch_flags = + ::Kokkos::Experimental::Impl::hip_internal_scratch_flags( + sizeof(size_type)); + + // REQUIRED ( 1 , N , 1 ) + const dim3 block(1, block_size, 1); + // Required grid.x <= block.y + const dim3 grid(std::min(int(block.y), int(nwork)), 1, 1); + + const int shmem = + UseShflReduction + ? 0 + : ::Kokkos::Impl::hip_single_inter_block_reduce_scan_shmem< + false, FunctorType, WorkTag>(m_functor, block.y); + + Kokkos::Experimental::Impl::HIPParallelLaunch( + *this, grid, block, shmem, + m_policy.space().impl_internal_space_instance(), + false); // copy to device and execute + + if (!m_result_ptr_device_accessible) { + Experimental::HIP().fence(); + + if (m_result_ptr) { + const int size = ValueTraits::value_size( + ReducerConditional::select(m_functor, m_reducer)); + DeepCopy(m_result_ptr, + m_scratch_space, size); + } + } + } else { + if (m_result_ptr) { + ValueInit::init(ReducerConditional::select(m_functor, m_reducer), + m_result_ptr); + } + } + } + + template + ParallelReduce(const FunctorType& arg_functor, const Policy& arg_policy, + const ViewType& arg_result, + typename std::enable_if::value, + void*>::type = NULL) + : m_functor(arg_functor), + m_policy(arg_policy), + m_reducer(InvalidType()), + m_result_ptr(arg_result.data()), + m_result_ptr_device_accessible( + MemorySpaceAccess::accessible), + m_scratch_space(0), + m_scratch_flags(0) {} + + ParallelReduce(const FunctorType& arg_functor, const Policy& arg_policy, + const ReducerType& reducer) + : m_functor(arg_functor), + m_policy(arg_policy), + m_reducer(reducer), + m_result_ptr(reducer.view().data()), + m_result_ptr_device_accessible( + MemorySpaceAccess::accessible), + m_scratch_space(0), + m_scratch_flags(0) {} +}; +} // namespace Impl +} // namespace Kokkos + +#endif diff --git a/lib/kokkos/core/src/HIP/Kokkos_HIP_Parallel_Range.hpp b/lib/kokkos/core/src/HIP/Kokkos_HIP_Parallel_Range.hpp new file mode 100644 index 0000000000000000000000000000000000000000..a9c44606e4a497ba66b6e3838604b70a90fb02dd --- /dev/null +++ b/lib/kokkos/core/src/HIP/Kokkos_HIP_Parallel_Range.hpp @@ -0,0 +1,655 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 3.0 +// Copyright (2020) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +#ifndef KOKKO_HIP_PARALLEL_RANGE_HPP +#define KOKKO_HIP_PARALLEL_RANGE_HPP + +#include + +#if defined(__HIPCC__) + +#include +#include +#include + +namespace Kokkos { +namespace Impl { + +template +class ParallelFor, + Kokkos::Experimental::HIP> { + public: + using Policy = Kokkos::RangePolicy; + + private: + using Member = typename Policy::member_type; + using WorkTag = typename Policy::work_tag; + using LaunchBounds = typename Policy::launch_bounds; + + const FunctorType m_functor; + const Policy m_policy; + + ParallelFor() = delete; + ParallelFor& operator=(const ParallelFor&) = delete; + + template + inline __device__ + typename std::enable_if::value>::type + exec_range(const Member i) const { + m_functor(i); + } + + template + inline __device__ + typename std::enable_if::value>::type + exec_range(const Member i) const { + m_functor(TagType(), i); + } + + public: + using functor_type = FunctorType; + + inline __device__ void operator()(void) const { + const Member work_stride = hipBlockDim_y * hipGridDim_x; + const Member work_end = m_policy.end(); + + for (Member iwork = + m_policy.begin() + hipThreadIdx_y + hipBlockDim_y * hipBlockIdx_x; + iwork < work_end; + iwork = iwork < work_end - work_stride ? iwork + work_stride + : work_end) { + this->template exec_range(iwork); + } + } + + inline void execute() const { + const typename Policy::index_type nwork = m_policy.end() - m_policy.begin(); + + const int block_size = 256; // FIXME_HIP Choose block_size better + const dim3 block(1, block_size, 1); + const dim3 grid( + typename Policy::index_type((nwork + block.y - 1) / block.y), 1, 1); + + Kokkos::Experimental::Impl::HIPParallelLaunch( + *this, grid, block, 0, m_policy.space().impl_internal_space_instance(), + false); + } + + ParallelFor(const FunctorType& arg_functor, const Policy& arg_policy) + : m_functor(arg_functor), m_policy(arg_policy) {} +}; + +//---------------------------------------------------------------------------- +//---------------------------------------------------------------------------- + +template +class ParallelReduce, ReducerType, + Kokkos::Experimental::HIP> { + public: + using Policy = Kokkos::RangePolicy; + + private: + using WorkRange = typename Policy::WorkRange; + using WorkTag = typename Policy::work_tag; + using Member = typename Policy::member_type; + using LaunchBounds = typename Policy::launch_bounds; + + using ReducerConditional = + Kokkos::Impl::if_c::value, + FunctorType, ReducerType>; + using ReducerTypeFwd = typename ReducerConditional::type; + using WorkTagFwd = + typename Kokkos::Impl::if_c::value, + WorkTag, void>::type; + + using ValueTraits = + Kokkos::Impl::FunctorValueTraits; + using ValueInit = Kokkos::Impl::FunctorValueInit; + using ValueJoin = Kokkos::Impl::FunctorValueJoin; + + public: + using pointer_type = typename ValueTraits::pointer_type; + using value_type = typename ValueTraits::value_type; + using reference_type = typename ValueTraits::reference_type; + using functor_type = FunctorType; + using size_type = Kokkos::Experimental::HIP::size_type; + using index_type = typename Policy::index_type; + + // Algorithmic constraints: blockSize is a power of two AND hipBlockDim_y == + // hipBlockDim_z == 1 + + const FunctorType m_functor; + const Policy m_policy; + const ReducerType m_reducer; + const pointer_type m_result_ptr; + const bool m_result_ptr_device_accessible; + size_type* m_scratch_space = nullptr; + size_type* m_scratch_flags = nullptr; + + // Shall we use the shfl based reduction or not (only use it for static sized + // types of more than 128bit) + enum { + UseShflReduction = false + }; //((sizeof(value_type)>2*sizeof(double)) && ValueTraits::StaticValueSize) + //}; + // Some crutch to do function overloading + private: + using DummyShflReductionType = double; + using DummySHMEMReductionType = int; + + public: + // Make the exec_range calls call to Reduce::DeviceIterateTile + template + __device__ inline + typename std::enable_if::value>::type + exec_range(const Member& i, reference_type update) const { + m_functor(i, update); + } + + template + __device__ inline + typename std::enable_if::value>::type + exec_range(const Member& i, reference_type update) const { + m_functor(TagType(), i, update); + } + + __device__ inline void operator()() const { + const integral_nonzero_constant + word_count(ValueTraits::value_size( + ReducerConditional::select(m_functor, m_reducer)) / + sizeof(size_type)); + + { + reference_type value = ValueInit::init( + ReducerConditional::select(m_functor, m_reducer), + ::Kokkos::Experimental::kokkos_impl_hip_shared_memory() + + hipThreadIdx_y * word_count.value); + + // Number of blocks is bounded so that the reduction can be limited to two + // passes. Each thread block is given an approximately equal amount of + // work to perform. Accumulate the values for this block. The accumulation + // ordering does not match the final pass, but is arithmetically + // equivalent. + + const WorkRange range(m_policy, hipBlockIdx_x, hipGridDim_x); + + for (Member iwork = range.begin() + hipThreadIdx_y, + iwork_end = range.end(); + iwork < iwork_end; iwork += hipBlockDim_y) { + this->template exec_range(iwork, value); + } + } + + // Reduce with final value at hipBlockDim_y - 1 location. + if (hip_single_inter_block_reduce_scan( + ReducerConditional::select(m_functor, m_reducer), hipBlockIdx_x, + hipGridDim_x, + ::Kokkos::Experimental::kokkos_impl_hip_shared_memory(), + m_scratch_space, m_scratch_flags)) { + // This is the final block with the final result at the final threads' + // location + + size_type* const shared = + ::Kokkos::Experimental::kokkos_impl_hip_shared_memory() + + (hipBlockDim_y - 1) * word_count.value; + size_type* const global = m_result_ptr_device_accessible + ? reinterpret_cast(m_result_ptr) + : m_scratch_space; + + if (hipThreadIdx_y == 0) { + Kokkos::Impl::FunctorFinal::final( + ReducerConditional::select(m_functor, m_reducer), shared); + } + + if (::Kokkos::Experimental::Impl::HIPTraits::WarpSize < + word_count.value) { + __syncthreads(); + } + + for (unsigned i = hipThreadIdx_y; i < word_count.value; + i += hipBlockDim_y) { + global[i] = shared[i]; + } + } + } + + // Determine block size constrained by shared memory: + inline unsigned local_block_size(const FunctorType& f) { + // FIXME_HIP I don't know where 8 comes from + unsigned int n = ::Kokkos::Experimental::Impl::HIPTraits::WarpSize * 8; + int shmem_size = + hip_single_inter_block_reduce_scan_shmem( + f, n); + while ( + (n && + (m_policy.space().impl_internal_space_instance()->m_maxShmemPerBlock < + shmem_size)) || + (n > static_cast( + Kokkos::Experimental::Impl::hip_get_max_block_size< + ParallelReduce, LaunchBounds>(f, 1, shmem_size, 0)))) { + n >>= 1; + shmem_size = + hip_single_inter_block_reduce_scan_shmem( + f, n); + } + return n; + } + + inline void execute() { + const index_type nwork = m_policy.end() - m_policy.begin(); + if (nwork) { + const int block_size = local_block_size(m_functor); + + m_scratch_space = + ::Kokkos::Experimental::Impl::hip_internal_scratch_space( + ValueTraits::value_size( + ReducerConditional::select(m_functor, m_reducer)) * + block_size /* block_size == max block_count */); + m_scratch_flags = + ::Kokkos::Experimental::Impl::hip_internal_scratch_flags( + sizeof(size_type)); + + // REQUIRED ( 1 , N , 1 ) + const dim3 block(1, block_size, 1); + // Required grid.x <= block.y + const dim3 grid( + std::min(int(block.y), int((nwork + block.y - 1) / block.y)), 1, 1); + + const int shmem = + UseShflReduction + ? 0 + : hip_single_inter_block_reduce_scan_shmem(m_functor, + block.y); + + Kokkos::Experimental::Impl::HIPParallelLaunch( + *this, grid, block, shmem, + m_policy.space().impl_internal_space_instance(), + false); // copy to device and execute + + if (!m_result_ptr_device_accessible) { + ::Kokkos::Experimental::HIP().fence(); + + if (m_result_ptr) { + const int size = ValueTraits::value_size( + ReducerConditional::select(m_functor, m_reducer)); + DeepCopy( + m_result_ptr, m_scratch_space, size); + } + } + } else { + if (m_result_ptr) { + ValueInit::init(ReducerConditional::select(m_functor, m_reducer), + m_result_ptr); + } + } + } + + template + ParallelReduce(const FunctorType& arg_functor, const Policy& arg_policy, + const ViewType& arg_result, + typename std::enable_if::value, + void*>::type = NULL) + : m_functor(arg_functor), + m_policy(arg_policy), + m_reducer(InvalidType()), + m_result_ptr(arg_result.data()), + m_result_ptr_device_accessible( + MemorySpaceAccess::accessible) {} + + ParallelReduce(const FunctorType& arg_functor, const Policy& arg_policy, + const ReducerType& reducer) + : m_functor(arg_functor), + m_policy(arg_policy), + m_reducer(reducer), + m_result_ptr(reducer.view().data()), + m_result_ptr_device_accessible( + MemorySpaceAccess::accessible) {} +}; + +template +class ParallelScanHIPBase { + public: + using Policy = Kokkos::RangePolicy; + + protected: + using Member = typename Policy::member_type; + using WorkTag = typename Policy::work_tag; + using WorkRange = typename Policy::WorkRange; + using LaunchBounds = typename Policy::launch_bounds; + + using ValueTraits = Kokkos::Impl::FunctorValueTraits; + using ValueInit = Kokkos::Impl::FunctorValueInit; + using ValueOps = Kokkos::Impl::FunctorValueOps; + + public: + using pointer_type = typename ValueTraits::pointer_type; + using reference_type = typename ValueTraits::reference_type; + using functor_type = FunctorType; + using size_type = Kokkos::Experimental::HIP::size_type; + using index_type = typename Policy::index_type; + + protected: + // Algorithmic constraints: + // (a) hipBlockDim_y is a power of two + // (b) hipBlockDim_x == hipBlockDim_z == 1 + // (c) hipGridDim_x <= hipBlockDim_y * hipBlockDim_y + // (d) hipGridDim_y == hipGridDim_z == 1 + + const FunctorType m_functor; + const Policy m_policy; + size_type* m_scratch_space = nullptr; + size_type* m_scratch_flags = nullptr; + size_type m_final = false; + int m_grid_x = 0; + + private: + template + __device__ inline + typename std::enable_if::value>::type + exec_range(const Member& i, reference_type update, + const bool final_result) const { + m_functor(i, update, final_result); + } + + template + __device__ inline + typename std::enable_if::value>::type + exec_range(const Member& i, reference_type update, + const bool final_result) const { + m_functor(TagType(), i, update, final_result); + } + + //---------------------------------------- + + __device__ inline void initial(void) const { + const integral_nonzero_constant + word_count(ValueTraits::value_size(m_functor) / sizeof(size_type)); + + size_type* const shared_value = + Kokkos::Experimental::kokkos_impl_hip_shared_memory() + + word_count.value * hipThreadIdx_y; + + ValueInit::init(m_functor, shared_value); + + // Number of blocks is bounded so that the reduction can be limited to two + // passes. Each thread block is given an approximately equal amount of work + // to perform. Accumulate the values for this block. The accumulation + // ordering does not match the final pass, but is arithmetically equivalent. + + const WorkRange range(m_policy, hipBlockIdx_x, hipGridDim_x); + + for (Member iwork = range.begin() + hipThreadIdx_y, iwork_end = range.end(); + iwork < iwork_end; iwork += hipBlockDim_y) { + this->template exec_range( + iwork, ValueOps::reference(shared_value), false); + } + + // Reduce and scan, writing out scan of blocks' totals and block-groups' + // totals. Blocks' scan values are written to 'hipBlockIdx_x' location. + // Block-groups' scan values are at: i = ( j * hipBlockDim_y - 1 ) for i < + // hipGridDim_x + hip_single_inter_block_reduce_scan( + m_functor, hipBlockIdx_x, hipGridDim_x, + Kokkos::Experimental::kokkos_impl_hip_shared_memory(), + m_scratch_space, m_scratch_flags); + } + + //---------------------------------------- + + __device__ inline void final(void) const { + const integral_nonzero_constant + word_count(ValueTraits::value_size(m_functor) / sizeof(size_type)); + + // Use shared memory as an exclusive scan: { 0 , value[0] , value[1] , + // value[2] , ... } + size_type* const shared_data = + Kokkos::Experimental::kokkos_impl_hip_shared_memory(); + size_type* const shared_prefix = + shared_data + word_count.value * hipThreadIdx_y; + size_type* const shared_accum = + shared_data + word_count.value * (hipBlockDim_y + 1); + + // Starting value for this thread block is the previous block's total. + if (hipBlockIdx_x) { + size_type* const block_total = + m_scratch_space + word_count.value * (hipBlockIdx_x - 1); + for (unsigned i = hipThreadIdx_y; i < word_count.value; ++i) { + shared_accum[i] = block_total[i]; + } + } else if (0 == hipThreadIdx_y) { + ValueInit::init(m_functor, shared_accum); + } + + const WorkRange range(m_policy, hipBlockIdx_x, hipGridDim_x); + + for (typename Policy::member_type iwork_base = range.begin(); + iwork_base < range.end(); iwork_base += hipBlockDim_y) { + const typename Policy::member_type iwork = iwork_base + hipThreadIdx_y; + + __syncthreads(); // Don't overwrite previous iteration values until they + // are used + + ValueInit::init(m_functor, shared_prefix + word_count.value); + + // Copy previous block's accumulation total into thread[0] prefix and + // inclusive scan value of this block + for (unsigned i = hipThreadIdx_y; i < word_count.value; ++i) { + shared_data[i + word_count.value] = shared_data[i] = shared_accum[i]; + } + + // Make sure the write is seen by all threads + __threadfence_block(); + + // Call functor to accumulate inclusive scan value for this work item + const bool doWork = (iwork < range.end()); + if (doWork) { + this->template exec_range( + iwork, ValueOps::reference(shared_prefix + word_count.value), + false); + } + + // Scan block values into locations shared_data[1..hipBlockDim_y] + hip_intra_block_reduce_scan( + m_functor, + typename ValueTraits::pointer_type(shared_data + word_count.value)); + + { + size_type* const block_total = + shared_data + word_count.value * hipBlockDim_y; + for (unsigned i = hipThreadIdx_y; i < word_count.value; ++i) { + shared_accum[i] = block_total[i]; + } + } + + // Call functor with exclusive scan value + if (doWork) { + this->template exec_range( + iwork, ValueOps::reference(shared_prefix), true); + } + } + } + + public: + //---------------------------------------- + + __device__ inline void operator()(void) const { + if (!m_final) { + initial(); + } else { + final(); + } + } + + // Determine block size constrained by shared memory: + inline unsigned local_block_size(const FunctorType& f) { + // hipBlockDim_y must be power of two = 128 (2 warps) or 256 (4 warps) or + // 512 (8 warps) hipGridDim_x <= hipBlockDim_y * hipBlockDim_y + // + // TODO check best option + + unsigned n = Experimental::Impl::HIPTraits::WarpSize * 4; + while (n && static_cast(m_policy.space() + .impl_internal_space_instance() + ->m_maxShmemPerBlock) < + hip_single_inter_block_reduce_scan_shmem(f, n)) { + n >>= 1; + } + return n; + } + + inline void impl_execute() { + const index_type nwork = m_policy.end() - m_policy.begin(); + if (nwork) { + // FIXME_HIP we cannot choose it larger for large work sizes to work + // correctly, the unit tests fail with wrong results + const int gridMaxComputeCapability_2x = 0x01fff; + + // FIXME_HIP block sizes greater than 256 don't work correctly, + // the unit tests fail with wrong results + const int block_size = + std::min(static_cast(local_block_size(m_functor)), 256); + + const int grid_max = + std::min(block_size * block_size, gridMaxComputeCapability_2x); + + // At most 'max_grid' blocks: + const int max_grid = + std::min(grid_max, (nwork + block_size - 1) / block_size); + + // How much work per block: + const int work_per_block = (nwork + max_grid - 1) / max_grid; + + // How many block are really needed for this much work: + m_grid_x = (nwork + work_per_block - 1) / work_per_block; + + m_scratch_space = Kokkos::Experimental::Impl::hip_internal_scratch_space( + ValueTraits::value_size(m_functor) * m_grid_x); + m_scratch_flags = Kokkos::Experimental::Impl::hip_internal_scratch_flags( + sizeof(size_type) * 1); + + dim3 grid(m_grid_x, 1, 1); + dim3 block(1, block_size, 1); // REQUIRED DIMENSIONS ( 1 , N , 1 ) + const int shmem = ValueTraits::value_size(m_functor) * (block_size + 2); + + m_final = false; + Kokkos::Experimental::Impl::HIPParallelLaunch( + *this, grid, block, shmem, + m_policy.space().impl_internal_space_instance(), + false); // copy to device and execute + + m_final = true; + Kokkos::Experimental::Impl::HIPParallelLaunch( + *this, grid, block, shmem, + m_policy.space().impl_internal_space_instance(), + false); // copy to device and execute + } + } + + ParallelScanHIPBase(const FunctorType& arg_functor, const Policy& arg_policy) + : m_functor(arg_functor), m_policy(arg_policy) {} +}; + +template +class ParallelScan, + Kokkos::Experimental::HIP> + : private ParallelScanHIPBase { + public: + using Base = ParallelScanHIPBase; + using Base::operator(); + + inline void execute() { Base::impl_execute(); } + + ParallelScan(const FunctorType& arg_functor, + const typename Base::Policy& arg_policy) + : Base(arg_functor, arg_policy) {} +}; + +//---------------------------------------------------------------------------- + +template +class ParallelScanWithTotal, + ReturnType, Kokkos::Experimental::HIP> + : private ParallelScanHIPBase { + public: + using Base = ParallelScanHIPBase; + using Base::operator(); + + ReturnType& m_returnvalue; + + inline void execute() { + Base::impl_execute(); + + const auto nwork = Base::m_policy.end() - Base::m_policy.begin(); + if (nwork) { + const int size = Base::ValueTraits::value_size(Base::m_functor); + DeepCopy( + &m_returnvalue, + Base::m_scratch_space + (Base::m_grid_x - 1) * size / sizeof(int), + size); + } + } + + ParallelScanWithTotal(const FunctorType& arg_functor, + const typename Base::Policy& arg_policy, + ReturnType& arg_returnvalue) + : Base(arg_functor, arg_policy), m_returnvalue(arg_returnvalue) {} +}; + +} // namespace Impl +} // namespace Kokkos + +#endif + +#endif diff --git a/lib/kokkos/core/src/HIP/Kokkos_HIP_Parallel_Team.hpp b/lib/kokkos/core/src/HIP/Kokkos_HIP_Parallel_Team.hpp new file mode 100644 index 0000000000000000000000000000000000000000..53097f36431678e83f10231afca96bbb72bf2c42 --- /dev/null +++ b/lib/kokkos/core/src/HIP/Kokkos_HIP_Parallel_Team.hpp @@ -0,0 +1,562 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 3.0 +// Copyright (2020) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +#ifndef KOKKO_HIP_PARALLEL_TEAM_HPP +#define KOKKO_HIP_PARALLEL_TEAM_HPP + +#include + +#if defined(__HIPCC__) + +#include +#include +#include +#include + +namespace Kokkos { +namespace Impl { +template +class TeamPolicyInternal + : public PolicyTraits { + public: + using execution_policy = TeamPolicyInternal; + + using traits = PolicyTraits; + + template + friend class TeamPolicyInternal; + + private: + static int constexpr MAX_WARP = 8; + + typename traits::execution_space m_space; + int m_league_size; + int m_team_size; + int m_vector_length; + int m_team_scratch_size[2]; + int m_thread_scratch_size[2]; + int m_chunk_size; + + public: + using execution_space = Kokkos::Experimental::HIP; + + template + TeamPolicyInternal(TeamPolicyInternal const& p) { + m_league_size = p.m_league_size; + m_team_size = p.m_team_size; + m_vector_length = p.m_vector_length; + m_team_scratch_size[0] = p.m_team_scratch_size[0]; + m_team_scratch_size[1] = p.m_team_scratch_size[1]; + m_thread_scratch_size[0] = p.m_thread_scratch_size[0]; + m_thread_scratch_size[1] = p.m_thread_scratch_size[1]; + m_chunk_size = p.m_chunk_size; + m_space = p.m_space; + } + + TeamPolicyInternal& operator=(TeamPolicyInternal const& p) { + m_league_size = p.m_league_size; + m_team_size = p.m_team_size; + m_vector_length = p.m_vector_length; + m_team_scratch_size[0] = p.m_team_scratch_size[0]; + m_team_scratch_size[1] = p.m_team_scratch_size[1]; + m_thread_scratch_size[0] = p.m_thread_scratch_size[0]; + m_thread_scratch_size[1] = p.m_thread_scratch_size[1]; + m_chunk_size = p.m_chunk_size; + m_space = p.m_space; + return *this; + } + + template + int team_size_max(FunctorType const& f, ParallelForTag const&) const { + using closure_type = + Impl::ParallelFor >; + hipFuncAttributes attr = ::Kokkos::Experimental::Impl::HIPParallelLaunch< + closure_type, + typename traits::launch_bounds>::get_hip_func_attributes(); + int const block_size = ::Kokkos::Experimental::Impl::hip_get_max_block_size< + FunctorType, typename traits::launch_bounds>( + space().impl_internal_space_instance(), attr, f, + static_cast(vector_length()), + static_cast(team_scratch_size(0)) + 2 * sizeof(double), + static_cast(thread_scratch_size(0)) + sizeof(double)); + return block_size / vector_length(); + } + + template + int team_size_recommended(FunctorType const& f, ParallelForTag const&) const { + typedef Impl::ParallelFor > + closure_type; + hipFuncAttributes attr = ::Kokkos::Experimental::Impl::HIPParallelLaunch< + closure_type, + typename traits::launch_bounds>::get_hip_func_attributes(); + int const block_size = ::Kokkos::Experimental::Impl::hip_get_opt_block_size< + FunctorType, typename traits::launch_bounds>( + space().impl_internal_space_instance(), attr, f, + static_cast(vector_length()), + static_cast(team_scratch_size(0)) + 2 * sizeof(double), + static_cast(thread_scratch_size(0)) + sizeof(double)); + return block_size / vector_length(); + } + + static int vector_length_max() { + return ::Kokkos::Experimental::Impl::HIPTraits::WarpSize; + } + + static int verify_requested_vector_length(int requested_vector_length) { + int test_vector_length = + std::min(requested_vector_length, vector_length_max()); + + // Allow only power-of-two vector_length + if (!(is_integral_power_of_two(test_vector_length))) { + int test_pow2 = 1; + for (int i = 0; i < 5; i++) { + test_pow2 = test_pow2 << 1; + if (test_pow2 > test_vector_length) { + break; + } + } + test_vector_length = test_pow2 >> 1; + } + + return test_vector_length; + } + + static int scratch_size_max(int level) { + return ( + level == 0 ? 1024 * 40 : // FIXME_HIP arbitrarily setting this to 48kB + 20 * 1024 * 1024); // FIXME_HIP arbitrarily setting this to 20MB + } + + int vector_length() const { return m_vector_length; } + + int team_size() const { return m_team_size; } + + int league_size() const { return m_league_size; } + + int scratch_size(int level, int team_size_ = -1) const { + if (team_size_ < 0) team_size_ = m_team_size; + return m_team_scratch_size[level] + + team_size_ * m_thread_scratch_size[level]; + } + + int team_scratch_size(int level) const { return m_team_scratch_size[level]; } + + int thread_scratch_size(int level) const { + return m_thread_scratch_size[level]; + } + + typename traits::execution_space space() const { return m_space; } + + TeamPolicyInternal() + : m_space(typename traits::execution_space()), + m_league_size(0), + m_team_size(-1), + m_vector_length(0), + m_team_scratch_size{0, 0}, + m_thread_scratch_size{0, 0}, + m_chunk_size(::Kokkos::Experimental::Impl::HIPTraits::WarpSize) {} + + /** \brief Specify league size, request team size */ + TeamPolicyInternal(const execution_space space_, int league_size_, + int team_size_request, int vector_length_request = 1) + : m_space(space_), + m_league_size(league_size_), + m_team_size(team_size_request), + m_vector_length(verify_requested_vector_length(vector_length_request)), + m_team_scratch_size{0, 0}, + m_thread_scratch_size{0, 0}, + m_chunk_size(::Kokkos::Experimental::Impl::HIPTraits::WarpSize) { + // Make sure league size is permissable + if (league_size_ >= + static_cast( + ::Kokkos::Experimental::Impl::hip_internal_maximum_grid_count())) + Impl::throw_runtime_exception( + "Requested too large league_size for TeamPolicy on HIP execution " + "space."); + + // Make sure total block size is permissable + if (m_team_size * m_vector_length > 1024) { + Impl::throw_runtime_exception( + std::string("Kokkos::TeamPolicy< HIP > the team size is too large. " + "Team size x vector length must be smaller than 1024.")); + } + } + + /** \brief Specify league size, request team size */ + TeamPolicyInternal(const execution_space space_, int league_size_, + const Kokkos::AUTO_t& /* team_size_request */, + int vector_length_request = 1) + : m_space(space_), + m_league_size(league_size_), + m_team_size(-1), + m_vector_length(verify_requested_vector_length(vector_length_request)), + m_team_scratch_size{0, 0}, + m_thread_scratch_size{0, 0}, + m_chunk_size(::Kokkos::Experimental::Impl::HIPTraits::WarpSize) { + // Make sure league size is permissable + if (league_size_ >= + static_cast( + ::Kokkos::Experimental::Impl::hip_internal_maximum_grid_count())) + Impl::throw_runtime_exception( + "Requested too large league_size for TeamPolicy on HIP execution " + "space."); + } + + TeamPolicyInternal(int league_size_, int team_size_request, + int vector_length_request = 1) + : m_space(typename traits::execution_space()), + m_league_size(league_size_), + m_team_size(team_size_request), + m_vector_length(verify_requested_vector_length(vector_length_request)), + m_team_scratch_size{0, 0}, + m_thread_scratch_size{0, 0}, + m_chunk_size(::Kokkos::Experimental::Impl::HIPTraits::WarpSize) { + // Make sure league size is permissable + if (league_size_ >= + static_cast( + ::Kokkos::Experimental::Impl::hip_internal_maximum_grid_count())) + Impl::throw_runtime_exception( + "Requested too large league_size for TeamPolicy on HIP execution " + "space."); + + // Make sure total block size is permissable + if (m_team_size * m_vector_length > 1024) { + Impl::throw_runtime_exception( + std::string("Kokkos::TeamPolicy< HIP > the team size is too large. " + "Team size x vector length must be smaller than 1024.")); + } + } + + TeamPolicyInternal(int league_size_, + const Kokkos::AUTO_t& /* team_size_request */, + int vector_length_request = 1) + : m_space(typename traits::execution_space()), + m_league_size(league_size_), + m_team_size(-1), + m_vector_length(verify_requested_vector_length(vector_length_request)), + m_team_scratch_size{0, 0}, + m_thread_scratch_size{0, 0}, + m_chunk_size(::Kokkos::Experimental::Impl::HIPTraits::WarpSize) { + // Make sure league size is permissable + if (league_size_ >= + static_cast( + ::Kokkos::Experimental::Impl::hip_internal_maximum_grid_count())) + Impl::throw_runtime_exception( + "Requested too large league_size for TeamPolicy on HIP execution " + "space."); + } + + int chunk_size() const { return m_chunk_size; } + + TeamPolicyInternal& set_chunk_size(typename traits::index_type chunk_size_) { + m_chunk_size = chunk_size_; + return *this; + } + + /** \brief set per team scratch size for a specific level of the scratch + * hierarchy */ + TeamPolicyInternal& set_scratch_size(int level, + PerTeamValue const& per_team) { + m_team_scratch_size[level] = per_team.value; + return *this; + } + + /** \brief set per thread scratch size for a specific level of the scratch + * hierarchy */ + TeamPolicyInternal& set_scratch_size(int level, + PerThreadValue const& per_thread) { + m_thread_scratch_size[level] = per_thread.value; + return *this; + } + + /** \brief set per thread and per team scratch size for a specific level of + * the scratch hierarchy */ + TeamPolicyInternal& set_scratch_size(int level, PerTeamValue const& per_team, + PerThreadValue const& per_thread) { + m_team_scratch_size[level] = per_team.value; + m_thread_scratch_size[level] = per_thread.value; + return *this; + } + + using member_type = Kokkos::Impl::HIPTeamMember; + + protected: + template + int internal_team_size_common(const FunctorType& f, + BlockSizeCallable&& block_size_callable) const { + using closure_type = ClosureType; + using functor_value_traits = + Impl::FunctorValueTraits; + + hipFuncAttributes attr = ::Kokkos::Experimental::Impl::HIPParallelLaunch< + closure_type, + typename traits::launch_bounds>::get_hip_func_attributes(); + const int block_size = std::forward(block_size_callable)( + space().impl_internal_space_instance(), attr, f, + static_cast(vector_length()), + static_cast(team_scratch_size(0)) + 2 * sizeof(double), + static_cast(thread_scratch_size(0)) + sizeof(double) + + ((functor_value_traits::StaticValueSize != 0) + ? 0 + : functor_value_traits::value_size(f))); + KOKKOS_ASSERT(block_size > 0); + + // Currently we require Power-of-2 team size for reductions. + int p2 = 1; + while (p2 <= block_size) p2 *= 2; + p2 /= 2; + return p2 / vector_length(); + } + + template + int internal_team_size_max(const FunctorType& f) const { + return internal_team_size_common( + f, ::Kokkos::Experimental::Impl::hip_get_max_block_size< + FunctorType, typename traits::launch_bounds>); + } + + template + int internal_team_size_recommended(const FunctorType& f) const { + return internal_team_size_common( + f, ::Kokkos::Experimental::Impl::hip_get_opt_block_size< + FunctorType, typename traits::launch_bounds>); + } +}; + +struct HIPLockArrays { + std::int32_t* atomic = nullptr; + std::int32_t* scratch = nullptr; + std::int32_t n = 0; +}; + +template +class ParallelFor, + Kokkos::Experimental::HIP> { + public: + using Policy = TeamPolicyInternal; + using functor_type = FunctorType; + using size_type = ::Kokkos::Experimental::HIP::size_type; + + private: + using Member = typename Policy::member_type; + using WorkTag = typename Policy::work_tag; + using LaunchBounds = typename Policy::launch_bounds; + + // Algorithmic constraints: hipBlockDim_y is a power of two AND hipBlockDim_y + // == hipBlockDim_z == 1 shared memory utilization: + // + // [ team reduce space ] + // [ team shared space ] + + FunctorType const m_functor; + Policy const m_policy; + size_type const m_league_size; + int m_team_size; + size_type const m_vector_size; + int m_shmem_begin; + int m_shmem_size; + void* m_scratch_ptr[2]; + int m_scratch_size[2]; + mutable HIPLockArrays hip_lock_arrays; + + template + __device__ inline + typename std::enable_if::value>::type + exec_team(const Member& member) const { + m_functor(member); + } + + template + __device__ inline + typename std::enable_if::value>::type + exec_team(const Member& member) const { + m_functor(TagType(), member); + } + + public: + __device__ inline void operator()(void) const { + // Iterate this block through the league + int64_t threadid = 0; + if (m_scratch_size[1] > 0) { + __shared__ int64_t base_thread_id; + if (hipThreadIdx_x == 0 && hipThreadIdx_y == 0) { + threadid = (hipBlockIdx_x * hipBlockDim_z + hipThreadIdx_z) % + (hip_lock_arrays.n / (hipBlockDim_x * hipBlockDim_y)); + threadid *= hipBlockDim_x * hipBlockDim_y; + int done = 0; + while (!done) { + done = (0 == atomicCAS(&hip_lock_arrays.scratch[threadid], 0, 1)); + if (!done) { + threadid += hipBlockDim_x * hipBlockDim_y; + if (int64_t(threadid + hipBlockDim_x * hipBlockDim_y) >= + int64_t(hip_lock_arrays.n)) + threadid = 0; + } + } + base_thread_id = threadid; + } + __syncthreads(); + threadid = base_thread_id; + } + + int const int_league_size = static_cast(m_league_size); + for (int league_rank = hipBlockIdx_x; league_rank < int_league_size; + league_rank += hipGridDim_x) { + this->template exec_team(typename Policy::member_type( + ::Kokkos::Experimental::kokkos_impl_hip_shared_memory(), + m_shmem_begin, m_shmem_size, + static_cast( + static_cast(m_scratch_ptr[1]) + + ptrdiff_t(threadid / (hipBlockDim_x * hipBlockDim_y)) * + m_scratch_size[1]), + m_scratch_size[1], league_rank, m_league_size)); + } + if (m_scratch_size[1] > 0) { + __syncthreads(); + if (hipThreadIdx_x == 0 && hipThreadIdx_y == 0) + hip_lock_arrays.scratch[threadid] = 0; + } + } + + inline void execute() const { + HIP_SAFE_CALL(hipMalloc( + &hip_lock_arrays.atomic, + sizeof(std::int32_t) * (KOKKOS_IMPL_HIP_SPACE_ATOMIC_MASK + 1))); + HIP_SAFE_CALL(hipMalloc( + &hip_lock_arrays.scratch, + sizeof(std::int32_t) * (::Kokkos::Experimental::HIP::concurrency()))); + HIP_SAFE_CALL(hipMemset( + hip_lock_arrays.scratch, 0, + sizeof(std::int32_t) * (::Kokkos::Experimental::HIP::concurrency()))); + hip_lock_arrays.n = ::Kokkos::Experimental::HIP::concurrency(); + + int64_t const shmem_size_total = m_shmem_begin + m_shmem_size; + dim3 const grid(static_cast(m_league_size), 1, 1); + dim3 const block(static_cast(m_vector_size), + static_cast(m_team_size), 1); + + ::Kokkos::Experimental::Impl::HIPParallelLaunch( + *this, grid, block, shmem_size_total, + m_policy.space().impl_internal_space_instance(), + true); // copy to device and execute + + if (hip_lock_arrays.atomic) { + HIP_SAFE_CALL(hipFree(hip_lock_arrays.atomic)); + hip_lock_arrays.atomic = nullptr; + } + if (hip_lock_arrays.scratch) { + HIP_SAFE_CALL(hipFree(hip_lock_arrays.scratch)); + hip_lock_arrays.scratch = nullptr; + } + hip_lock_arrays.n = 0; + } + + ParallelFor(FunctorType const& arg_functor, Policy const& arg_policy) + : m_functor(arg_functor), + m_policy(arg_policy), + m_league_size(arg_policy.league_size()), + m_team_size(arg_policy.team_size()), + m_vector_size(arg_policy.vector_length()) { + hipFuncAttributes attr = ::Kokkos::Experimental::Impl::HIPParallelLaunch< + ParallelFor, LaunchBounds>::get_hip_func_attributes(); + m_team_size = + m_team_size >= 0 + ? m_team_size + : ::Kokkos::Experimental::Impl::hip_get_opt_block_size< + FunctorType, LaunchBounds>( + m_policy.space().impl_internal_space_instance(), attr, + m_functor, m_vector_size, m_policy.team_scratch_size(0), + m_policy.thread_scratch_size(0)) / + m_vector_size; + + m_shmem_begin = (sizeof(double) * (m_team_size + 2)); + m_shmem_size = + (m_policy.scratch_size(0, m_team_size) + + FunctorTeamShmemSize::value(m_functor, m_team_size)); + m_scratch_size[0] = m_policy.scratch_size(0, m_team_size); + m_scratch_size[1] = m_policy.scratch_size(1, m_team_size); + + // Functor's reduce memory, team scan memory, and team shared memory depend + // upon team size. + m_scratch_ptr[0] = nullptr; + m_scratch_ptr[1] = + m_team_size <= 0 + ? nullptr + : ::Kokkos::Experimental::Impl::hip_resize_scratch_space( + static_cast(m_scratch_size[1]) * + static_cast( + ::Kokkos::Experimental::HIP::concurrency() / + (m_team_size * m_vector_size))); + + int const shmem_size_total = m_shmem_begin + m_shmem_size; + if (m_policy.space().impl_internal_space_instance()->m_maxShmemPerBlock < + shmem_size_total) { + printf( + "%i %i\n", + m_policy.space().impl_internal_space_instance()->m_maxShmemPerBlock, + shmem_size_total); + Kokkos::Impl::throw_runtime_exception(std::string( + "Kokkos::Impl::ParallelFor< HIP > insufficient shared memory")); + } + + if (static_cast(m_team_size) > + static_cast( + ::Kokkos::Experimental::Impl::hip_get_max_block_size( + m_policy.space().impl_internal_space_instance(), attr, + arg_functor, arg_policy.vector_length(), + arg_policy.team_scratch_size(0), + arg_policy.thread_scratch_size(0)) / + arg_policy.vector_length())) { + Kokkos::Impl::throw_runtime_exception(std::string( + "Kokkos::Impl::ParallelFor< HIP > requested too large team size.")); + } + } +}; +} // namespace Impl +} // namespace Kokkos + +#endif + +#endif diff --git a/lib/kokkos/core/src/HIP/Kokkos_HIP_ReduceScan.hpp b/lib/kokkos/core/src/HIP/Kokkos_HIP_ReduceScan.hpp new file mode 100644 index 0000000000000000000000000000000000000000..362128c41195d450070fb7a13610d2436c11aed7 --- /dev/null +++ b/lib/kokkos/core/src/HIP/Kokkos_HIP_ReduceScan.hpp @@ -0,0 +1,420 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 3.0 +// Copyright (2020) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +#ifndef KOKKOS_HIP_REDUCESCAN_HPP +#define KOKKOS_HIP_REDUCESCAN_HPP + +#include + +#if defined(__HIPCC__) + +namespace Kokkos { +namespace Impl { +template +struct HIPReductionsFunctor; + +template +struct HIPReductionsFunctor { + using ValueTraits = FunctorValueTraits; + using ValueJoin = FunctorValueJoin; + using ValueInit = FunctorValueInit; + using ValueOps = FunctorValueOps; + using pointer_type = typename ValueTraits::pointer_type; + using Scalar = typename ValueTraits::value_type; + + __device__ static inline void scalar_intra_warp_reduction( + FunctorType const& functor, + Scalar* value, // Contribution + bool const skip_vector, // Skip threads if Kokkos vector lanes are not + // part of the reduction + int const width) // How much of the warp participates + { + int const lane_id = (hipThreadIdx_y * hipBlockDim_x + hipThreadIdx_x) % + ::Kokkos::Experimental::Impl::HIPTraits::WarpSize; + for (int delta = skip_vector ? hipBlockDim_x : 1; delta < width; + delta *= 2) { + if (lane_id + delta < ::Kokkos::Experimental::Impl::HIPTraits::WarpSize) { + ValueJoin::join(functor, value, value + delta); + } + } + *value = *(value - lane_id); + } + + __device__ static inline void scalar_intra_block_reduction( + FunctorType const& functor, Scalar value, bool const skip, Scalar* result, + int const /*shared_elements*/, Scalar* shared_team_buffer_element) { + int const warp_id = (hipThreadIdx_y * hipBlockDim_x) / + ::Kokkos::Experimental::Impl::HIPTraits::WarpSize; + Scalar* const my_shared_team_buffer_element = + shared_team_buffer_element + hipThreadIdx_y * hipBlockDim_x + + hipThreadIdx_x; + *my_shared_team_buffer_element = value; + // Warp Level Reduction, ignoring Kokkos vector entries + scalar_intra_warp_reduction( + functor, my_shared_team_buffer_element, skip, + ::Kokkos::Experimental::Impl::HIPTraits::WarpSize); + // Wait for every warp to be done before using one warp to do final cross + // warp reduction + __syncthreads(); + + if (warp_id == 0) { + const unsigned int delta = + (hipThreadIdx_y * hipBlockDim_x + hipThreadIdx_x) * + ::Kokkos::Experimental::Impl::HIPTraits::WarpSize; + if (delta < hipBlockDim_x * hipBlockDim_y) + *my_shared_team_buffer_element = shared_team_buffer_element[delta]; + scalar_intra_warp_reduction( + functor, my_shared_team_buffer_element, false, + hipBlockDim_x * hipBlockDim_y / + ::Kokkos::Experimental::Impl::HIPTraits::WarpSize); + if (hipThreadIdx_x + hipThreadIdx_y == 0) + *result = *shared_team_buffer_element; + } + } + + __device__ static inline bool scalar_inter_block_reduction( + FunctorType const& functor, + ::Kokkos::Experimental::HIP::size_type const /*block_id*/, + ::Kokkos::Experimental::HIP::size_type const block_count, + ::Kokkos::Experimental::HIP::size_type* const shared_data, + ::Kokkos::Experimental::HIP::size_type* const global_data, + ::Kokkos::Experimental::HIP::size_type* const global_flags) { + Scalar* const global_team_buffer_element = + reinterpret_cast(global_data); + Scalar* const my_global_team_buffer_element = + global_team_buffer_element + hipBlockIdx_x; + Scalar* shared_team_buffer_elements = + reinterpret_cast(shared_data); + Scalar value = shared_team_buffer_elements[hipThreadIdx_y]; + int shared_elements = (hipBlockDim_x * hipBlockDim_y) / + ::Kokkos::Experimental::Impl::HIPTraits::WarpSize; + int global_elements = block_count; + __syncthreads(); + + // Do the scalar reduction inside each block + scalar_intra_block_reduction(functor, value, true, + my_global_team_buffer_element, shared_elements, + shared_team_buffer_elements); + __syncthreads(); + + // Use the last block that is done to do the do the reduction across the + // block + __shared__ unsigned int num_teams_done; + if (hipThreadIdx_x + hipThreadIdx_y == 0) { + __threadfence(); + num_teams_done = Kokkos::atomic_fetch_add(global_flags, 1) + 1; + } + bool is_last_block = false; + // FIXME_HIP HIP does not support syncthreads_or. That's why we need to make + // num_teams_done __shared__ + // if (__syncthreads_or(num_teams_done == hipGridDim_x)) {*/ + __syncthreads(); + if (num_teams_done == hipGridDim_x) { + is_last_block = true; + *global_flags = 0; + ValueInit::init(functor, &value); + for (int i = hipThreadIdx_y * hipBlockDim_x + hipThreadIdx_x; + i < global_elements; i += hipBlockDim_x * hipBlockDim_y) { + ValueJoin::join(functor, &value, &global_team_buffer_element[i]); + } + scalar_intra_block_reduction( + functor, value, false, + shared_team_buffer_elements + (hipBlockDim_y - 1), shared_elements, + shared_team_buffer_elements); + } + + return is_last_block; + } +}; + +//---------------------------------------------------------------------------- +/* + * Algorithmic constraints: + * (a) hipBlockDim_y is a power of two + * (b) hipBlockDim_y <= 1024 + * (c) hipBlockDim_x == hipBlockDim_z == 1 + */ + +template +__device__ void hip_intra_block_reduce_scan( + FunctorType const& functor, + typename FunctorValueTraits::pointer_type const + base_data) { + using ValueTraits = FunctorValueTraits; + using ValueJoin = FunctorValueJoin; + + using pointer_type = typename ValueTraits::pointer_type; + + unsigned int const value_count = ValueTraits::value_count(functor); + unsigned int const BlockSizeMask = hipBlockDim_y - 1; + int const WarpMask = Experimental::Impl::HIPTraits::WarpSize - 1; + + // Must have power of two thread count + if ((hipBlockDim_y - 1) & hipBlockDim_y) { + Kokkos::abort( + "HIP::hip_intra_block_reduce_scan requires power-of-two " + "hipBlockDim_y\n"); + } + + auto block_reduce_step = + [&functor, value_count](int const R, pointer_type const TD, int const S) { + if (R > ((1 << S) - 1)) { + ValueJoin::join(functor, TD, (TD - (value_count << S))); + } + }; + + { // Intra-warp reduction: + const unsigned rtid_intra = hipThreadIdx_y & WarpMask; + const pointer_type tdata_intra = base_data + value_count * hipThreadIdx_y; + + block_reduce_step(rtid_intra, tdata_intra, 0); + block_reduce_step(rtid_intra, tdata_intra, 1); + block_reduce_step(rtid_intra, tdata_intra, 2); + block_reduce_step(rtid_intra, tdata_intra, 3); + block_reduce_step(rtid_intra, tdata_intra, 4); + block_reduce_step(rtid_intra, tdata_intra, 5); + } + + __syncthreads(); // Wait for all warps to reduce + + { // Inter-warp reduce-scan by a single warp to avoid extra synchronizations + unsigned int const rtid_inter = + ((hipThreadIdx_y + 1) + << Experimental::Impl::HIPTraits::WarpIndexShift) - + 1; + + if (rtid_inter < hipBlockDim_y) { + pointer_type const tdata_inter = base_data + value_count * rtid_inter; + + if ((1 << 6) < BlockSizeMask) { + block_reduce_step(rtid_inter, tdata_inter, 6); + } + if ((1 << 7) < BlockSizeMask) { + block_reduce_step(rtid_inter, tdata_inter, 7); + } + if ((1 << 8) < BlockSizeMask) { + block_reduce_step(rtid_inter, tdata_inter, 8); + } + if ((1 << 9) < BlockSizeMask) { + block_reduce_step(rtid_inter, tdata_inter, 9); + } + if ((1 << 10) < BlockSizeMask) { + block_reduce_step(rtid_inter, tdata_inter, 10); + } + } + } + + __syncthreads(); // Wait for inter-warp reduce-scan to complete + + if (DoScan) { + // Update all the values for the respective warps (except for the last one) + // by adding from the last value of the previous warp. + if (hipThreadIdx_y >= Experimental::Impl::HIPTraits::WarpSize && + (hipThreadIdx_y & WarpMask) != + Experimental::Impl::HIPTraits::WarpSize - 1) { + const int offset_to_previous_warp_total = + (hipThreadIdx_y & (~WarpMask)) - 1; + ValueJoin::join(functor, base_data + value_count * hipThreadIdx_y, + base_data + value_count * offset_to_previous_warp_total); + } + } +} + +//---------------------------------------------------------------------------- +/**\brief Input value-per-thread starting at 'shared_data'. + * Reduction value at last thread's location. + * + * If 'DoScan' then write blocks' scan values and block-groups' scan values. + * + * Global reduce result is in the last threads' 'shared_data' location. + */ + +template +__device__ bool hip_single_inter_block_reduce_scan2( + FunctorType const& functor, + ::Kokkos::Experimental::HIP::size_type const block_id, + ::Kokkos::Experimental::HIP::size_type const block_count, + ::Kokkos::Experimental::HIP::size_type* const shared_data, + ::Kokkos::Experimental::HIP::size_type* const global_data, + ::Kokkos::Experimental::HIP::size_type* const global_flags) { + using size_type = ::Kokkos::Experimental::HIP::size_type; + using ValueTraits = FunctorValueTraits; + using ValueJoin = FunctorValueJoin; + using ValueInit = FunctorValueInit; + using ValueOps = FunctorValueOps; + + using pointer_type = typename ValueTraits::pointer_type; + + // '__ffs' = position of the least significant bit set to 1. + // 'hipBlockDim_y' is guaranteed to be a power of two so this + // is the integral shift value that can replace an integral divide. + unsigned int const BlockSizeShift = __ffs(hipBlockDim_y) - 1; + unsigned int const BlockSizeMask = hipBlockDim_y - 1; + + // Must have power of two thread count + if (BlockSizeMask & hipBlockDim_y) { + Kokkos::abort( + "HIP::hip_single_inter_block_reduce_scan requires power-of-two " + "blockDim"); + } + + integral_nonzero_constant const + word_count(ValueTraits::value_size(functor) / sizeof(size_type)); + + // Reduce the accumulation for the entire block. + hip_intra_block_reduce_scan( + functor, pointer_type(shared_data)); + + { + // Write accumulation total to global scratch space. + // Accumulation total is the last thread's data. + size_type* const shared = shared_data + word_count.value * BlockSizeMask; + size_type* const global = global_data + word_count.value * block_id; + + for (size_t i = hipThreadIdx_y; i < word_count.value; i += hipBlockDim_y) { + global[i] = shared[i]; + } + } + + // Contributing blocks note that their contribution has been completed via an + // atomic-increment flag If this block is not the last block to contribute to + // this group then the block is done. + // FIXME_HIP __syncthreads_or is not supported by HIP yet. + // const bool is_last_block = !__syncthreads_or( + // threadIdx.y + // ? 0 + // : (1 + atomicInc(global_flags, block_count - 1) < block_count)); + __shared__ int n_done; + n_done = 0; + __syncthreads(); + if (hipThreadIdx_y == 0) { + __threadfence(); + n_done = 1 + atomicInc(global_flags, block_count - 1); + } + __syncthreads(); + bool const is_last_block = (n_done == static_cast(block_count)); + + if (is_last_block) { + size_type const b = (static_cast(block_count) * + static_cast(hipThreadIdx_y)) >> + BlockSizeShift; + size_type const e = (static_cast(block_count) * + static_cast(hipThreadIdx_y + 1)) >> + BlockSizeShift; + + { + void* const shared_ptr = shared_data + word_count.value * hipThreadIdx_y; + /* reference_type shared_value = */ ValueInit::init(functor, shared_ptr); + + for (size_type i = b; i < e; ++i) { + ValueJoin::join(functor, shared_ptr, + global_data + word_count.value * i); + } + } + + hip_intra_block_reduce_scan( + functor, pointer_type(shared_data)); + + if (DoScan) { + size_type* const shared_value = + shared_data + word_count.value * (hipThreadIdx_y ? hipThreadIdx_y - 1 + : hipBlockDim_y); + + if (!hipThreadIdx_y) { + ValueInit::init(functor, shared_value); + } + + // Join previous inclusive scan value to each member + for (size_type i = b; i < e; ++i) { + size_type* const global_value = global_data + word_count.value * i; + ValueJoin::join(functor, shared_value, global_value); + ValueOps::copy(functor, global_value, shared_value); + } + } + } + + return is_last_block; +} + +template +__device__ bool hip_single_inter_block_reduce_scan( + FunctorType const& functor, + ::Kokkos::Experimental::HIP::size_type const block_id, + ::Kokkos::Experimental::HIP::size_type const block_count, + ::Kokkos::Experimental::HIP::size_type* const shared_data, + ::Kokkos::Experimental::HIP::size_type* const global_data, + ::Kokkos::Experimental::HIP::size_type* const global_flags) { + using ValueTraits = FunctorValueTraits; + if (!DoScan && /*FIXME*/ (bool)ValueTraits::StaticValueSize) + // FIXME_HIP For now we don't use shuffle + // return Kokkos::Impl::HIPReductionsFunctor< + // FunctorType, ArgTag, false, (ValueTraits::StaticValueSize > 16)>:: + // scalar_inter_block_reduction(functor, block_id, block_count, + // shared_data, global_data, global_flags); + return Kokkos::Impl::HIPReductionsFunctor< + FunctorType, ArgTag, false, + false>::scalar_inter_block_reduction(functor, block_id, block_count, + shared_data, global_data, + global_flags); + else { + return hip_single_inter_block_reduce_scan2( + functor, block_id, block_count, shared_data, global_data, global_flags); + } +} + +// Size in bytes required for inter block reduce or scan +template +inline unsigned hip_single_inter_block_reduce_scan_shmem( + const FunctorType& functor, const unsigned BlockSize) { + return (BlockSize + 2) * + Impl::FunctorValueTraits::value_size(functor); +} + +} // namespace Impl +} // namespace Kokkos + +#endif + +#endif diff --git a/lib/kokkos/core/src/HIP/Kokkos_HIP_Space.cpp b/lib/kokkos/core/src/HIP/Kokkos_HIP_Space.cpp new file mode 100644 index 0000000000000000000000000000000000000000..2dca7f13c956c135b87e53b39bedad52caab6ca0 --- /dev/null +++ b/lib/kokkos/core/src/HIP/Kokkos_HIP_Space.cpp @@ -0,0 +1,636 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 3.0 +// Copyright (2020) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include + +#include +#include + +/*--------------------------------------------------------------------------*/ +/*--------------------------------------------------------------------------*/ +namespace Kokkos { +namespace Impl { + +namespace { +hipStream_t get_deep_copy_stream() { + static hipStream_t s = 0; + if (s == 0) { + HIP_SAFE_CALL(hipStreamCreate(&s)); + } + return s; +} +} // namespace + +DeepCopy::DeepCopy(void* dst, const void* src, + size_t n) { + HIP_SAFE_CALL(hipMemcpy(dst, src, n, hipMemcpyDefault)); +} + +DeepCopy::DeepCopy(void* dst, const void* src, + size_t n) { + HIP_SAFE_CALL(hipMemcpy(dst, src, n, hipMemcpyDefault)); +} + +DeepCopy::DeepCopy(void* dst, const void* src, + size_t n) { + HIP_SAFE_CALL(hipMemcpy(dst, src, n, hipMemcpyDefault)); +} + +DeepCopy::DeepCopy(const Kokkos::Experimental::HIP& + /*instance*/, + void* dst, const void* src, + size_t n) { + // FIXME_HIP use instance + HIP_SAFE_CALL(hipMemcpy(dst, src, n, hipMemcpyDefault)); +} + +DeepCopy:: + DeepCopy(const Kokkos::Experimental::HIP& /*instance*/, void* dst, + const void* src, size_t n) { + // FIXME_HIP use instance + HIP_SAFE_CALL(hipMemcpy(dst, src, n, hipMemcpyDefault)); +} + +DeepCopy:: + DeepCopy(const Kokkos::Experimental::HIP& /*instance*/, void* dst, + const void* src, size_t n) { + // FIXME_HIP use instance + HIP_SAFE_CALL(hipMemcpy(dst, src, n, hipMemcpyDefault)); +} + +DeepCopy::DeepCopy(void* dst, const void* src, + size_t n) { + HIP_SAFE_CALL(hipMemcpy(dst, src, n, hipMemcpyDefault)); +} + +DeepCopy::DeepCopy(void* dst, const void* src, + size_t n) { + HIP_SAFE_CALL(hipMemcpy(dst, src, n, hipMemcpyDefault)); +} + +DeepCopy::DeepCopy(void* dst, const void* src, + size_t n) { + HIP_SAFE_CALL(hipMemcpy(dst, src, n, hipMemcpyDefault)); +} + +DeepCopy:: + DeepCopy(const Kokkos::Experimental::HIP& /*instance*/, void* dst, + const void* src, size_t n) { + // FIXME_HIP use instance + HIP_SAFE_CALL(hipMemcpy(dst, src, n, hipMemcpyDefault)); +} + +DeepCopy::DeepCopy(const Kokkos::Experimental::HIP& + /*instance*/, + void* dst, const void* src, + size_t n) { + // FIXME_HIP use instance + HIP_SAFE_CALL(hipMemcpy(dst, src, n, hipMemcpyDefault)); +} + +DeepCopy::DeepCopy(const Kokkos::Experimental::HIP& + /*instance*/, + void* dst, const void* src, + size_t n) { + // FIXME_HIP use instance + HIP_SAFE_CALL(hipMemcpy(dst, src, n, hipMemcpyDefault)); +} + +void DeepCopyAsyncHIP(void* dst, void const* src, size_t n) { + hipStream_t s = get_deep_copy_stream(); + HIP_SAFE_CALL(hipMemcpyAsync(dst, src, n, hipMemcpyDefault, s)); + hipStreamSynchronize(s); +} + +} // namespace Impl +} // namespace Kokkos + +/*--------------------------------------------------------------------------*/ +/*--------------------------------------------------------------------------*/ + +namespace Kokkos { + +void Experimental::HIPSpace::access_error() { + const std::string msg( + "Kokkos::Experimental::HIPSpace::access_error attempt to execute " + "Experimental::HIP function from non-HIP space"); + Kokkos::Impl::throw_runtime_exception(msg); +} + +void Experimental::HIPSpace::access_error(const void* const) { + const std::string msg( + "Kokkos::Experimental::HIPSpace::access_error attempt to execute " + "Experimental::HIP function from non-HIP space"); + Kokkos::Impl::throw_runtime_exception(msg); +} + +} // namespace Kokkos + +/*--------------------------------------------------------------------------*/ +/*--------------------------------------------------------------------------*/ + +namespace Kokkos { +namespace Experimental { + +HIPSpace::HIPSpace() : m_device(HIP().hip_device()) {} + +HIPHostPinnedSpace::HIPHostPinnedSpace() {} + +void* HIPSpace::allocate(const size_t arg_alloc_size) const { + void* ptr = nullptr; + + auto const error_code = hipMalloc(&ptr, arg_alloc_size); + if (error_code != hipSuccess) { + hipGetLastError(); // This is the only way to clear the last error, which + // we should do here since we're turning it into an + // exception here + throw HIPRawMemoryAllocationFailure( + arg_alloc_size, error_code, + RawMemoryAllocationFailure::AllocationMechanism::HIPMalloc); + } + + return ptr; +} + +void* HIPHostPinnedSpace::allocate(const size_t arg_alloc_size) const { + void* ptr = nullptr; + + auto const error_code = hipHostMalloc(&ptr, arg_alloc_size); + if (error_code != hipSuccess) { + hipGetLastError(); // This is the only way to clear the last error, which + // we should do here since we're turning it into an + // exception here + throw HIPRawMemoryAllocationFailure( + arg_alloc_size, error_code, + RawMemoryAllocationFailure::AllocationMechanism::HIPHostMalloc); + } + + return ptr; +} + +void HIPSpace::deallocate(void* const arg_alloc_ptr, + const size_t /* arg_alloc_size */) const { + HIP_SAFE_CALL(hipFree(arg_alloc_ptr)); +} + +void HIPHostPinnedSpace::deallocate(void* const arg_alloc_ptr, + const size_t /* arg_alloc_size */) const { + HIP_SAFE_CALL(hipHostFree(arg_alloc_ptr)); +} + +} // namespace Experimental +} // namespace Kokkos + +//---------------------------------------------------------------------------- +//---------------------------------------------------------------------------- + +namespace Kokkos { +namespace Impl { + +#ifdef KOKKOS_DEBUG +SharedAllocationRecord + SharedAllocationRecord::s_root_record; + +SharedAllocationRecord SharedAllocationRecord< + Kokkos::Experimental::HIPHostPinnedSpace, void>::s_root_record; +#endif + +std::string SharedAllocationRecord::get_label() const { + SharedAllocationHeader header; + + Kokkos::Impl::DeepCopy( + &header, RecordBase::head(), sizeof(SharedAllocationHeader)); + + return std::string(header.m_label); +} + +std::string SharedAllocationRecord::get_label() const { + return std::string(RecordBase::head()->m_label); +} + +SharedAllocationRecord* +SharedAllocationRecord::allocate( + const Kokkos::Experimental::HIPSpace& arg_space, + const std::string& arg_label, const size_t arg_alloc_size) { + return new SharedAllocationRecord(arg_space, arg_label, arg_alloc_size); +} + +SharedAllocationRecord* +SharedAllocationRecord:: + allocate(const Kokkos::Experimental::HIPHostPinnedSpace& arg_space, + const std::string& arg_label, const size_t arg_alloc_size) { + return new SharedAllocationRecord(arg_space, arg_label, arg_alloc_size); +} + +void SharedAllocationRecord::deallocate( + SharedAllocationRecord* arg_rec) { + delete static_cast(arg_rec); +} + +void SharedAllocationRecord:: + deallocate(SharedAllocationRecord* arg_rec) { + delete static_cast(arg_rec); +} + +SharedAllocationRecord::~SharedAllocationRecord() { +#if defined(KOKKOS_ENABLE_PROFILING) + if (Kokkos::Profiling::profileLibraryLoaded()) { + SharedAllocationHeader header; + Kokkos::Impl::DeepCopy( + &header, RecordBase::m_alloc_ptr, sizeof(SharedAllocationHeader)); + + Kokkos::Profiling::deallocateData( + Kokkos::Profiling::SpaceHandle(Kokkos::Experimental::HIPSpace::name()), + header.m_label, data(), size()); + } +#endif + + m_space.deallocate(SharedAllocationRecord::m_alloc_ptr, + SharedAllocationRecord::m_alloc_size); +} + +SharedAllocationRecord::~SharedAllocationRecord() { +#if defined(KOKKOS_ENABLE_PROFILING) + if (Kokkos::Profiling::profileLibraryLoaded()) { + Kokkos::Profiling::deallocateData( + Kokkos::Profiling::SpaceHandle( + Kokkos::Experimental::HIPHostPinnedSpace::name()), + RecordBase::m_alloc_ptr->m_label, data(), size()); + } +#endif + + m_space.deallocate(SharedAllocationRecord::m_alloc_ptr, + SharedAllocationRecord::m_alloc_size); +} + +SharedAllocationRecord:: + SharedAllocationRecord( + const Kokkos::Experimental::HIPSpace& arg_space, + const std::string& arg_label, const size_t arg_alloc_size, + const SharedAllocationRecord::function_type arg_dealloc) + // Pass through allocated [ SharedAllocationHeader , user_memory ] + // Pass through deallocation function + : SharedAllocationRecord( +#ifdef KOKKOS_DEBUG + &SharedAllocationRecord::s_root_record, +#endif + Kokkos::Impl::checked_allocation_with_header(arg_space, arg_label, + arg_alloc_size), + sizeof(SharedAllocationHeader) + arg_alloc_size, arg_dealloc), + m_space(arg_space) { +#if defined(KOKKOS_ENABLE_PROFILING) + if (Kokkos::Profiling::profileLibraryLoaded()) { + Kokkos::Profiling::allocateData( + Kokkos::Profiling::SpaceHandle(arg_space.name()), arg_label, data(), + arg_alloc_size); + } +#endif + + SharedAllocationHeader header; + + // Fill in the Header information + header.m_record = static_cast*>(this); + + strncpy(header.m_label, arg_label.c_str(), + SharedAllocationHeader::maximum_label_length); + // Set last element zero, in case c_str is too long + header.m_label[SharedAllocationHeader::maximum_label_length - 1] = (char)0; + + // Copy to device memory + Kokkos::Impl::DeepCopy( + RecordBase::m_alloc_ptr, &header, sizeof(SharedAllocationHeader)); +} + +SharedAllocationRecord:: + SharedAllocationRecord( + const Kokkos::Experimental::HIPHostPinnedSpace& arg_space, + const std::string& arg_label, const size_t arg_alloc_size, + const SharedAllocationRecord::function_type arg_dealloc) + // Pass through allocated [ SharedAllocationHeader , user_memory ] + // Pass through deallocation function + : SharedAllocationRecord( +#ifdef KOKKOS_DEBUG + &SharedAllocationRecord::s_root_record, +#endif + Kokkos::Impl::checked_allocation_with_header(arg_space, arg_label, + arg_alloc_size), + sizeof(SharedAllocationHeader) + arg_alloc_size, arg_dealloc), + m_space(arg_space) { +#if defined(KOKKOS_ENABLE_PROFILING) + if (Kokkos::Profiling::profileLibraryLoaded()) { + Kokkos::Profiling::allocateData( + Kokkos::Profiling::SpaceHandle(arg_space.name()), arg_label, data(), + arg_alloc_size); + } +#endif + // Fill in the Header information, directly accessible via host pinned memory + + RecordBase::m_alloc_ptr->m_record = this; + + strncpy(RecordBase::m_alloc_ptr->m_label, arg_label.c_str(), + SharedAllocationHeader::maximum_label_length); + // Set last element zero, in case c_str is too long + RecordBase::m_alloc_ptr + ->m_label[SharedAllocationHeader::maximum_label_length - 1] = (char)0; +} + +//---------------------------------------------------------------------------- + +void* SharedAllocationRecord:: + allocate_tracked(const Kokkos::Experimental::HIPSpace& arg_space, + const std::string& arg_alloc_label, + const size_t arg_alloc_size) { + if (!arg_alloc_size) return (void*)0; + + SharedAllocationRecord* const r = + allocate(arg_space, arg_alloc_label, arg_alloc_size); + + RecordBase::increment(r); + + return r->data(); +} + +void SharedAllocationRecord::deallocate_tracked(void* const + arg_alloc_ptr) { + if (arg_alloc_ptr != 0) { + SharedAllocationRecord* const r = get_record(arg_alloc_ptr); + + RecordBase::decrement(r); + } +} + +void* SharedAllocationRecord:: + reallocate_tracked(void* const arg_alloc_ptr, const size_t arg_alloc_size) { + SharedAllocationRecord* const r_old = get_record(arg_alloc_ptr); + SharedAllocationRecord* const r_new = + allocate(r_old->m_space, r_old->get_label(), arg_alloc_size); + + Kokkos::Impl::DeepCopy( + r_new->data(), r_old->data(), std::min(r_old->size(), r_new->size())); + + RecordBase::increment(r_new); + RecordBase::decrement(r_old); + + return r_new->data(); +} + +//---------------------------------------------------------------------------- + +SharedAllocationRecord* +SharedAllocationRecord::get_record( + void* alloc_ptr) { + using Header = SharedAllocationHeader; + using RecordHIP = + SharedAllocationRecord; + + // Copy the header from the allocation + Header head; + + Header const* const head_hip = + alloc_ptr ? Header::get_header(alloc_ptr) : (Header*)0; + + if (alloc_ptr) { + Kokkos::Impl::DeepCopy( + &head, head_hip, sizeof(SharedAllocationHeader)); + } + + RecordHIP* const record = + alloc_ptr ? static_cast(head.m_record) : (RecordHIP*)0; + + if (!alloc_ptr || record->m_alloc_ptr != head_hip) { + Kokkos::Impl::throw_runtime_exception(std::string( + "Kokkos::Impl::SharedAllocationRecord< Kokkos::Experimental::HIPSpace " + ", void >::get_record ERROR")); + } + + return record; +} + +// Iterate records to print orphaned memory ... +void SharedAllocationRecord:: + print_records(std::ostream& s, const Kokkos::Experimental::HIPSpace& space, + bool detail) { +#ifdef KOKKOS_DEBUG + SharedAllocationRecord* r = &s_root_record; + + char buffer[256]; + + SharedAllocationHeader head; + + if (detail) { + do { + if (r->m_alloc_ptr) { + Kokkos::Impl::DeepCopy( + &head, r->m_alloc_ptr, sizeof(SharedAllocationHeader)); + } else { + head.m_label[0] = 0; + } + + // Formatting dependent on sizeof(uintptr_t) + const char* format_string; + + if (sizeof(uintptr_t) == sizeof(unsigned long)) { + format_string = + "HIP addr( 0x%.12lx ) list( 0x%.12lx 0x%.12lx ) extent[ 0x%.12lx + " + "%.8ld ] count(%d) dealloc(0x%.12lx) %s\n"; + } else if (sizeof(uintptr_t) == sizeof(unsigned long long)) { + format_string = + "HIP addr( 0x%.12llx ) list( 0x%.12llx 0x%.12llx ) extent[ " + "0x%.12llx + %.8ld ] count(%d) dealloc(0x%.12llx) %s\n"; + } + + snprintf(buffer, 256, format_string, reinterpret_cast(r), + reinterpret_cast(r->m_prev), + reinterpret_cast(r->m_next), + reinterpret_cast(r->m_alloc_ptr), r->m_alloc_size, + r->m_count, reinterpret_cast(r->m_dealloc), + head.m_label); + std::cout << buffer; + r = r->m_next; + } while (r != &s_root_record); + } else { + do { + if (r->m_alloc_ptr) { + Kokkos::Impl::DeepCopy( + &head, r->m_alloc_ptr, sizeof(SharedAllocationHeader)); + + // Formatting dependent on sizeof(uintptr_t) + const char* format_string; + + if (sizeof(uintptr_t) == sizeof(unsigned long)) { + format_string = "HIP [ 0x%.12lx + %ld ] %s\n"; + } else if (sizeof(uintptr_t) == sizeof(unsigned long long)) { + format_string = "HIP [ 0x%.12llx + %ld ] %s\n"; + } + + snprintf(buffer, 256, format_string, + reinterpret_cast(r->data()), r->size(), + head.m_label); + } else { + snprintf(buffer, 256, "HIP [ 0 + 0 ]\n"); + } + std::cout << buffer; + r = r->m_next; + } while (r != &s_root_record); + } +#else + (void)s; + (void)space; + (void)detail; + throw_runtime_exception( + "Kokkos::Impl::SharedAllocationRecord::print_records" + " only works with KOKKOS_DEBUG enabled"); +#endif +} + +/*--------------------------------------------------------------------------*/ +/*--------------------------------------------------------------------------*/ + +void* hip_resize_scratch_space(size_t bytes, bool force_shrink) { + static void* ptr = NULL; + static size_t current_size = 0; + if (current_size == 0) { + current_size = bytes; + ptr = Kokkos::kokkos_malloc( + "HIPSpace::ScratchMemory", current_size); + } + if (bytes > current_size) { + current_size = bytes; + ptr = Kokkos::kokkos_realloc(ptr, + current_size); + } + if ((bytes < current_size) && (force_shrink)) { + current_size = bytes; + Kokkos::kokkos_free(ptr); + ptr = Kokkos::kokkos_malloc( + "HIPSpace::ScratchMemory", current_size); + } + return ptr; +} + +} // namespace Impl +} // namespace Kokkos + +/*--------------------------------------------------------------------------*/ +/*--------------------------------------------------------------------------*/ +namespace Kokkos { +namespace Experimental { + +// HIP::size_type HIP::detect_device_count() +//{ return Impl::HIPInternalDevices::singleton().m_hipDevCount ; } + +int HIP::concurrency() { + // FIXME_HIP + // MI60: ThreadsPerComputeUnit*ComputeUnits/ShaderEngine*ShaderEngines) + return 2536 * 16 * 4; +} +int HIP::impl_is_initialized() { + return Impl::HIPInternal::singleton().is_initialized(); +} + +void HIP::impl_initialize(const HIP::SelectDevice config) { + Impl::HIPInternal::singleton().initialize(config.hip_device_id); + +#if defined(KOKKOS_ENABLE_PROFILING) + Kokkos::Profiling::initialize(); +#endif +} + +void HIP::impl_finalize() { + Impl::HIPInternal::singleton().finalize(); + +#if defined(KOKKOS_ENABLE_PROFILING) + Kokkos::Profiling::finalize(); +#endif +} + +HIP::HIP() : m_space_instance(&Impl::HIPInternal::singleton()) { + Impl::HIPInternal::singleton().verify_is_initialized( + "HIP instance constructor"); +} + +// HIP::HIP( const int instance_id ) +// : m_device( Impl::HIPInternal::singleton().m_hipDev ) +//{} + +void HIP::print_configuration(std::ostream& s, const bool) { + Impl::HIPInternal::singleton().print_configuration(s); +} + +void HIP::fence() const { HIP_SAFE_CALL(hipDeviceSynchronize()); } + +int HIP::hip_device() const { return impl_internal_space_instance()->m_hipDev; } +const char* HIP::name() { return "HIP"; } + +} // namespace Experimental +} // namespace Kokkos diff --git a/lib/kokkos/core/src/HIP/Kokkos_HIP_Team.hpp b/lib/kokkos/core/src/HIP/Kokkos_HIP_Team.hpp new file mode 100644 index 0000000000000000000000000000000000000000..b3c4f4609b4f96ab37c07bf9e0359fe11b5981d2 --- /dev/null +++ b/lib/kokkos/core/src/HIP/Kokkos_HIP_Team.hpp @@ -0,0 +1,1106 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 3.0 +// Copyright (2020) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +#ifndef KOKKOS_HIP_TEAM_HPP +#define KOKKOS_HIP_TEAM_HPP + +#include + +#if defined(__HIPCC__) + +#include +#include + +#include +#include +#include +#include + +//---------------------------------------------------------------------------- +//---------------------------------------------------------------------------- + +namespace Kokkos { +namespace Impl { + +template +struct HIPJoinFunctor { + typedef Type value_type; + + KOKKOS_INLINE_FUNCTION + static void join(volatile value_type& update, + volatile const value_type& input) { + update += input; + } +}; + +/**\brief Team member_type passed to TeamPolicy or TeamTask closures. + * + * HIP thread blocks for team closures are dimensioned as: + * hipBlockDim_x == number of "vector lanes" per "thread" + * hipBlockDim_y == number of "threads" per team + * hipBlockDim_z == number of teams in a block + * where + * A set of teams exactly fill a warp OR a team is the whole block + * ( 0 == WarpSize % ( hipBlockDim_x * hipBlockDim_y ) ) + * OR + * ( 1 == hipBlockDim_z ) + + * Thus when 1 < hipBlockDim_z the team is warp-synchronous + * and __syncthreads should not be called in team collectives. + * + * When multiple teams are mapped onto a single block then the + * total available shared memory must be partitioned among teams. + */ +class HIPTeamMember { + public: + using execution_space = Kokkos::Experimental::HIP; + using scratch_memory_space = execution_space::scratch_memory_space; + + private: + mutable void* m_team_reduce; + scratch_memory_space m_team_shared; + int m_team_reduce_size; + int m_league_rank; + int m_league_size; + + public: + KOKKOS_INLINE_FUNCTION + const execution_space::scratch_memory_space& team_shmem() const { + return m_team_shared.set_team_thread_mode(0, 1, 0); + } + + KOKKOS_INLINE_FUNCTION + const execution_space::scratch_memory_space& team_scratch( + const int& level) const { + return m_team_shared.set_team_thread_mode(level, 1, 0); + } + + KOKKOS_INLINE_FUNCTION + const execution_space::scratch_memory_space& thread_scratch( + const int& level) const { + return m_team_shared.set_team_thread_mode(level, team_size(), team_rank()); + } + + KOKKOS_INLINE_FUNCTION int league_rank() const { return m_league_rank; } + KOKKOS_INLINE_FUNCTION int league_size() const { return m_league_size; } + KOKKOS_INLINE_FUNCTION int team_rank() const { +#ifdef __HIP_DEVICE_COMPILE__ + return hipThreadIdx_y; +#else + return 0; +#endif + } + + KOKKOS_INLINE_FUNCTION int team_size() const { +#ifdef __HIP_DEVICE_COMPILE__ + return hipBlockDim_y; +#else + return 1; +#endif + } + + KOKKOS_INLINE_FUNCTION void team_barrier() const { +#ifdef __HIP_DEVICE_COMPILE__ + if (1 == hipBlockDim_z) + __syncthreads(); // team == block + else + __threadfence_block(); // team <= warp +#endif + } + + //-------------------------------------------------------------------------- + + template + KOKKOS_INLINE_FUNCTION void team_broadcast(ValueType& val, + const int& thread_id) const { +#ifdef __HIP_DEVICE_COMPILE__ + if (1 == hipBlockDim_z) { // team == block + __syncthreads(); + // Wait for shared data write until all threads arrive here + if (hipThreadIdx_x == 0u && + hipThreadIdx_y == static_cast(thread_id)) { + *(reinterpret_cast(m_team_reduce)) = val; + } + __syncthreads(); // Wait for shared data read until root thread writes + val = *(reinterpret_cast(m_team_reduce)); + } else { // team <= warp + ValueType tmp(val); // input might not be a register variable + ::Kokkos::Experimental::Impl::in_place_shfl( + val, tmp, hipBlockDim_x * thread_id, hipBlockDim_x * hipBlockDim_y); + } +#else + (void)val; + (void)thread_id; +#endif + } + + template + KOKKOS_INLINE_FUNCTION void team_broadcast(Closure const& f, ValueType& val, + const int& thread_id) const { +#ifdef __HIP_DEVICE_COMPILE__ + f(val); + + if (1 == hipBlockDim_z) { // team == block + __syncthreads(); + // Wait for shared data write until all threads arrive here + if (hipThreadIdx_x == 0u && + hipThreadIdx_y == static_cast(thread_id)) { + *(reinterpret_cast(m_team_reduce)) = val; + } + __syncthreads(); // Wait for shared data read until root thread writes + val = *(reinterpret_cast(m_team_reduce)); + } else { // team <= warp + ValueType tmp(val); // input might not be a register variable + ::Kokkos::Experimental::Impl::in_place_shfl( + val, tmp, hipBlockDim_x * thread_id, hipBlockDim_x * hipBlockDim_y); + } +#else + (void)f; + (void)val; + (void)thread_id; +#endif + } + + //-------------------------------------------------------------------------- + /**\brief Reduction across a team + * + * Mapping of teams onto blocks: + * hipBlockDim_x is "vector lanes" + * hipBlockDim_y is team "threads" + * hipBlockDim_z is number of teams per block + * + * Requires: + * hipBlockDim_x is power two + * hipBlockDim_x <= HIPTraits::WarpSize + * ( 0 == HIPTraits::WarpSize % ( hipBlockDim_x * hipBlockDim_y ) + * OR + * ( 1 == hipBlockDim_z ) + */ + template + KOKKOS_INLINE_FUNCTION + typename std::enable_if::value>::type + team_reduce(ReducerType const& reducer) const noexcept { + team_reduce(reducer, reducer.reference()); + } + + template + KOKKOS_INLINE_FUNCTION + typename std::enable_if::value>::type + team_reduce(ReducerType const& reducer, + typename ReducerType::value_type& value) const noexcept { +#ifdef __HIP_DEVICE_COMPILE__ + hip_intra_block_reduction(reducer, value, hipBlockDim_y); +#else + (void)reducer; + (void)value; +#endif + } + + //-------------------------------------------------------------------------- + /** \brief Intra-team exclusive prefix sum with team_rank() ordering + * with intra-team non-deterministic ordering accumulation. + * + * The global inter-team accumulation value will, at the end of the + * league's parallel execution, be the scan's total. + * Parallel execution ordering of the league's teams is non-deterministic. + * As such the base value for each team's scan operation is similarly + * non-deterministic. + */ + template + KOKKOS_INLINE_FUNCTION Type team_scan(const Type& value, + Type* const global_accum) const { +#ifdef __HIP_DEVICE_COMPILE__ + Type* const base_data = reinterpret_cast(m_team_reduce); + + __syncthreads(); // Don't write in to shared data until all threads have + // entered this function + + if (0 == hipThreadIdx_y) { + base_data[0] = 0; + } + + base_data[hipThreadIdx_y + 1] = value; + + Impl::hip_intra_block_reduce_scan, void>( + Impl::HIPJoinFunctor(), base_data + 1); + + if (global_accum) { + if (hipBlockDim_y == hipThreadIdx_y + 1) { + base_data[hipBlockDim_y] = + atomic_fetch_add(global_accum, base_data[hipBlockDim_y]); + } + __syncthreads(); // Wait for atomic + base_data[hipThreadIdx_y] += base_data[hipBlockDim_y]; + } + + return base_data[hipThreadIdx_y]; +#else + (void)value; + (void)global_accum; + return Type(); +#endif + } + + /** \brief Intra-team exclusive prefix sum with team_rank() ordering. + * + * The highest rank thread can compute the reduction total as + * reduction_total = dev.team_scan( value ) + value ; + */ + template + KOKKOS_INLINE_FUNCTION Type team_scan(const Type& value) const { + return this->template team_scan(value, 0); + } + + //---------------------------------------- + + template + KOKKOS_INLINE_FUNCTION static + typename std::enable_if::value>::type + vector_reduce(ReducerType const& reducer) { + vector_reduce(reducer, reducer.reference()); + } + + template + KOKKOS_INLINE_FUNCTION static + typename std::enable_if::value>::type + vector_reduce(ReducerType const& reducer, + typename ReducerType::value_type& value) { +#ifdef __HIP_DEVICE_COMPILE__ + if (hipBlockDim_x == 1) return; + + // Intra vector lane shuffle reduction: + typename ReducerType::value_type tmp(value); + typename ReducerType::value_type tmp2 = tmp; + + int constexpr warp_size = ::Kokkos::Experimental::Impl::HIPTraits::WarpSize; + unsigned mask = + hipBlockDim_x == warp_size + ? 0xffffffff + : ((1 << hipBlockDim_x) - 1) + << ((hipThreadIdx_y % (warp_size / hipBlockDim_x)) * + hipBlockDim_x); + + for (int i = hipBlockDim_x; (i >>= 1);) { + ::Kokkos::Experimental::Impl::in_place_shfl_down(tmp2, tmp, i, + hipBlockDim_x, mask); + if (static_cast(hipThreadIdx_x) < i) { + reducer.join(tmp, tmp2); + } + } + + // Broadcast from root lane to all other lanes. + // Cannot use "butterfly" algorithm to avoid the broadcast + // because floating point summation is not associative + // and thus different threads could have different results. + + ::Kokkos::Experimental::Impl::in_place_shfl(tmp2, tmp, 0, hipBlockDim_x, + mask); + value = tmp2; + reducer.reference() = tmp2; +#else + (void)reducer; + (void)value; +#endif + } + + //-------------------------------------------------------------------------- + /**\brief Global reduction across all blocks + * + * Return !0 if reducer contains the final value + */ + template + KOKKOS_INLINE_FUNCTION static + typename std::enable_if::value, int>::type + global_reduce(ReducerType const& reducer, int* const global_scratch_flags, + void* const global_scratch_space, void* const shmem, + int const shmem_size) { +#ifdef __HIP_COMPILE_DEVICE__ + + typedef typename ReducerType::value_type value_type; + typedef value_type volatile* pointer_type; + + // Number of shared memory entries for the reduction: + const int nsh = shmem_size / sizeof(value_type); + + // Number of HIP threads in the block, rank within the block + const int nid = hipBlockDim_x * hipBlockDim_y * hipBlockDim_z; + const int tid = + hipThreadIdx_x + + hipBlockDim_x * (hipThreadIdx_y + hipBlockDim_y * hipThreadIdx_z); + + // Reduces within block using all available shared memory + // Contributes if it is the root "vector lane" + + // wn == number of warps in the block + // wx == which lane within the warp + // wy == which warp within the block + + const int wn = + (nid + HIPTraits::WarpIndexMask) >> HIPTraits::WarpIndexShift; + const int wx = tid & HIPTraits::WarpIndexMask; + const int wy = tid >> HIPTraits::WarpIndexShift; + + //------------------------ + { // Intra warp shuffle reduction from contributing CUDA threads + + value_type tmp(reducer.reference()); + + int constexpr warp_size = + ::Kokkos::Experimental::Impl::HIPTraits::WarpSize; + for (int i = warp_size; static_cast(hipBlockDim_x) <= (i >>= 1);) { + Impl::in_place_shfl_down(reducer.reference(), tmp, i, warp_size); + + // Root of each vector lane reduces "thread" contribution + if (0 == hipThreadIdx_x && wx < i) { + reducer.join(&tmp, reducer.data()); + } + } + + // Reduce across warps using shared memory. + // Number of warps may not be power of two. + + __syncthreads(); // Wait before shared data write + + // Number of shared memory entries for the reduction + // is at most one per warp + const int nentry = wn < nsh ? wn : nsh; + + if (0 == wx && wy < nentry) { + // Root thread of warp 'wy' has warp's value to contribute + (reinterpret_cast(shmem))[wy] = tmp; + } + + __syncthreads(); // Wait for write to be visible to block + + // When more warps than shared entries + // then warps must take turns joining their contribution + // to the designated shared memory entry. + for (int i = nentry; i < wn; i += nentry) { + const int k = wy - i; + + if (0 == wx && i <= wy && k < nentry) { + // Root thread of warp 'wy' has warp's value to contribute + reducer.join((reinterpret_cast(shmem)) + k, &tmp); + } + + __syncthreads(); // Wait for write to be visible to block + } + + // One warp performs the inter-warp reduction: + + if (0 == wy) { + // Start fan-in at power of two covering nentry + + for (int i = (1 << (32 - __clz(nentry - 1))); (i >>= 1);) { + const int k = wx + i; + if (wx < i && k < nentry) { + reducer.join((reinterpret_cast(shmem)) + wx, + (reinterpret_cast(shmem)) + k); + __threadfence_block(); // Wait for write to be visible to warp + } + } + } + } + //------------------------ + { // Write block's value to global_scratch_memory + + int last_block = 0; + + if (0 == wx) { + reducer.copy((reinterpret_cast(global_scratch_space)) + + hipBlockIdx_x * reducer.length(), + reducer.data()); + + __threadfence(); // Wait until global write is visible. + + last_block = static_cast(hipGridDim_x) == + 1 + Kokkos::atomic_fetch_add(global_scratch_flags, 1); + + // If last block then reset count + if (last_block) *global_scratch_flags = 0; + } + + // FIXME hip does not support __syncthreads_or so we need to do it by hand + // last_block = __syncthreads_or(last_block); + + __shared__ int last_block_shared; + if (last_block) last_block_shared = last_block; + __threadfence_block(); + + if (!last_block_shared) return 0; + } + //------------------------ + // Last block reads global_scratch_memory into shared memory. + + const int nentry = nid < hipGridDim_x + ? (nid < nsh ? nid : nsh) + : (hipGridDim_x < nsh ? hipGridDim_x : nsh); + + // nentry = min( nid , nsh , gridDim.x ) + + // whole block reads global memory into shared memory: + + if (tid < nentry) { + const int offset = tid * reducer.length(); + + reducer.copy( + (reinterpret_cast(shmem)) + offset, + (reinterpret_cast(global_scratch_space)) + offset); + + for (int i = nentry + tid; i < static_cast(hipGridDim_x); + i += nentry) { + reducer.join((reinterpret_cast(shmem)) + offset, + (reinterpret_cast(global_scratch_space)) + + i * reducer.length()); + } + } + + __syncthreads(); // Wait for writes to be visible to block + + if (0 == wy) { + // Iterate to reduce shared memory to single warp fan-in size + + int constexpr warp_size = + ::Kokkos::Experimental::Impl::HIPTraits::WarpSize; + const int nreduce = warp_size < nentry ? warp_size : nentry; + + if (wx < nreduce && nreduce < nentry) { + for (int i = nreduce + wx; i < nentry; i += nreduce) { + reducer.join(((pointer_type)shmem) + wx, ((pointer_type)shmem) + i); + } + __threadfence_block(); // Wait for writes to be visible to warp + } + + // Start fan-in at power of two covering nentry + + for (int i = (1 << (warp_size - __clz(nreduce - 1))); (i >>= 1);) { + const int k = wx + i; + if (wx < i && k < nreduce) { + reducer.join((reinterpret_cast(shmem)) + wx, + (reinterpret_cast(shmem)) + k); + __threadfence_block(); // Wait for writes to be visible to warp + } + } + + if (0 == wx) { + reducer.copy(reducer.data(), reinterpret_cast(shmem)); + return 1; + } + } + return 0; + +#else + (void)reducer; + (void)global_scratch_flags; + (void)shmem; + (void)global_scratch_space; + (void)shmem_size; + return 0; +#endif + } + + //---------------------------------------- + // Private for the driver + + KOKKOS_INLINE_FUNCTION + HIPTeamMember(void* shared, const int shared_begin, const int shared_size, + void* scratch_level_1_ptr, const int scratch_level_1_size, + const int arg_league_rank, const int arg_league_size) + : m_team_reduce(shared), + m_team_shared(((char*)shared) + shared_begin, shared_size, + scratch_level_1_ptr, scratch_level_1_size), + m_team_reduce_size(shared_begin), + m_league_rank(arg_league_rank), + m_league_size(arg_league_size) {} + + public: + // Declare to avoid unused private member warnings which are trigger + // when SFINAE excludes the member function which uses these variables + // Making another class a friend also surpresses these warnings + bool impl_avoid_sfinae_warning() const noexcept { + return m_team_reduce_size > 0 && m_team_reduce != nullptr; + } +}; + +} // namespace Impl +} // namespace Kokkos + +//---------------------------------------------------------------------------- +//---------------------------------------------------------------------------- + +namespace Kokkos { +namespace Impl { + +template +struct TeamThreadRangeBoundariesStruct { + typedef iType index_type; + const HIPTeamMember& member; + const iType start; + const iType end; + + KOKKOS_INLINE_FUNCTION + TeamThreadRangeBoundariesStruct(const HIPTeamMember& thread_, iType count) + : member(thread_), start(0), end(count) {} + + KOKKOS_INLINE_FUNCTION + TeamThreadRangeBoundariesStruct(const HIPTeamMember& thread_, iType begin_, + iType end_) + : member(thread_), start(begin_), end(end_) {} +}; + +template +struct TeamVectorRangeBoundariesStruct { + typedef iType index_type; + const HIPTeamMember& member; + const iType start; + const iType end; + + KOKKOS_INLINE_FUNCTION + TeamVectorRangeBoundariesStruct(const HIPTeamMember& thread_, + const iType& count) + : member(thread_), start(0), end(count) {} + + KOKKOS_INLINE_FUNCTION + TeamVectorRangeBoundariesStruct(const HIPTeamMember& thread_, + const iType& begin_, const iType& end_) + : member(thread_), start(begin_), end(end_) {} +}; + +template +struct ThreadVectorRangeBoundariesStruct { + typedef iType index_type; + const index_type start; + const index_type end; + + KOKKOS_INLINE_FUNCTION + ThreadVectorRangeBoundariesStruct(const HIPTeamMember, index_type count) + : start(static_cast(0)), end(count) {} + + KOKKOS_INLINE_FUNCTION + ThreadVectorRangeBoundariesStruct(index_type count) + : start(static_cast(0)), end(count) {} + + KOKKOS_INLINE_FUNCTION + ThreadVectorRangeBoundariesStruct(const HIPTeamMember, index_type arg_begin, + index_type arg_end) + : start(arg_begin), end(arg_end) {} + + KOKKOS_INLINE_FUNCTION + ThreadVectorRangeBoundariesStruct(index_type arg_begin, index_type arg_end) + : start(arg_begin), end(arg_end) {} +}; + +} // namespace Impl + +template +KOKKOS_INLINE_FUNCTION + Impl::TeamThreadRangeBoundariesStruct + TeamThreadRange(const Impl::HIPTeamMember& thread, iType count) { + return Impl::TeamThreadRangeBoundariesStruct( + thread, count); +} + +template +KOKKOS_INLINE_FUNCTION Impl::TeamThreadRangeBoundariesStruct< + typename std::common_type::type, Impl::HIPTeamMember> +TeamThreadRange(const Impl::HIPTeamMember& thread, iType1 begin, iType2 end) { + typedef typename std::common_type::type iType; + return Impl::TeamThreadRangeBoundariesStruct( + thread, iType(begin), iType(end)); +} + +template +KOKKOS_INLINE_FUNCTION + Impl::TeamVectorRangeBoundariesStruct + TeamVectorRange(const Impl::HIPTeamMember& thread, const iType& count) { + return Impl::TeamVectorRangeBoundariesStruct( + thread, count); +} + +template +KOKKOS_INLINE_FUNCTION Impl::TeamVectorRangeBoundariesStruct< + typename std::common_type::type, Impl::HIPTeamMember> +TeamVectorRange(const Impl::HIPTeamMember& thread, const iType1& begin, + const iType2& end) { + typedef typename std::common_type::type iType; + return Impl::TeamVectorRangeBoundariesStruct( + thread, iType(begin), iType(end)); +} + +template +KOKKOS_INLINE_FUNCTION + Impl::ThreadVectorRangeBoundariesStruct + ThreadVectorRange(const Impl::HIPTeamMember& thread, iType count) { + return Impl::ThreadVectorRangeBoundariesStruct( + thread, count); +} + +template +KOKKOS_INLINE_FUNCTION + Impl::ThreadVectorRangeBoundariesStruct + ThreadVectorRange(const Impl::HIPTeamMember& thread, iType arg_begin, + iType arg_end) { + return Impl::ThreadVectorRangeBoundariesStruct( + thread, arg_begin, arg_end); +} + +KOKKOS_INLINE_FUNCTION +Impl::ThreadSingleStruct PerTeam( + const Impl::HIPTeamMember& thread) { + return Impl::ThreadSingleStruct(thread); +} + +KOKKOS_INLINE_FUNCTION +Impl::VectorSingleStruct PerThread( + const Impl::HIPTeamMember& thread) { + return Impl::VectorSingleStruct(thread); +} + +//---------------------------------------------------------------------------- + +/** \brief Inter-thread parallel_for. + * + * Executes closure(iType i) for each i=[0..N). + * + * The range [0..N) is mapped to all threads of the the calling thread team. + */ +template +KOKKOS_INLINE_FUNCTION void parallel_for( + const Impl::TeamThreadRangeBoundariesStruct& + loop_boundaries, + const Closure& closure) { +#ifdef __HIP_DEVICE_COMPILE__ + for (iType i = loop_boundaries.start + hipThreadIdx_y; + i < loop_boundaries.end; i += hipBlockDim_y) + closure(i); +#else + (void)loop_boundaries; + (void)closure; +#endif +} + +//---------------------------------------------------------------------------- + +/** \brief Inter-thread parallel_reduce with a reducer. + * + * Executes closure(iType i, ValueType & val) for each i=[0..N) + * + * The range [0..N) is mapped to all threads of the + * calling thread team and a summation of val is + * performed and put into result. + */ +template +KOKKOS_INLINE_FUNCTION + typename std::enable_if::value>::type + parallel_reduce(const Impl::TeamThreadRangeBoundariesStruct< + iType, Impl::HIPTeamMember>& loop_boundaries, + const Closure& closure, const ReducerType& reducer) { +#ifdef __HIP_DEVICE_COMPILE__ + typename ReducerType::value_type value; + reducer.init(value); + + for (iType i = loop_boundaries.start + hipThreadIdx_y; + i < loop_boundaries.end; i += hipBlockDim_y) { + closure(i, value); + } + + loop_boundaries.member.team_reduce(reducer, value); +#else + (void)loop_boundaries; + (void)closure; + (void)reducer; +#endif +} + +/** \brief Inter-thread parallel_reduce assuming summation. + * + * Executes closure(iType i, ValueType & val) for each i=[0..N) + * + * The range [0..N) is mapped to all threads of the + * calling thread team and a summation of val is + * performed and put into result. + */ +template +KOKKOS_INLINE_FUNCTION + typename std::enable_if::value>::type + parallel_reduce(const Impl::TeamThreadRangeBoundariesStruct< + iType, Impl::HIPTeamMember>& loop_boundaries, + const Closure& closure, ValueType& result) { +#ifdef __HIP_DEVICE_COMPILE__ + ValueType val; + Kokkos::Sum reducer(val); + + reducer.init(reducer.reference()); + + for (iType i = loop_boundaries.start + hipThreadIdx_y; + i < loop_boundaries.end; i += hipBlockDim_y) { + closure(i, val); + } + + loop_boundaries.member.team_reduce(reducer, val); + result = reducer.reference(); +#else + (void)loop_boundaries; + (void)closure; + (void)result; +#endif +} + +template +KOKKOS_INLINE_FUNCTION void parallel_for( + const Impl::TeamVectorRangeBoundariesStruct& + loop_boundaries, + const Closure& closure) { +#ifdef __HIP_DEVICE_COMPILE__ + for (iType i = loop_boundaries.start + hipThreadIdx_y * hipBlockDim_x + + hipThreadIdx_x; + i < loop_boundaries.end; i += hipBlockDim_y * hipBlockDim_x) + closure(i); +#else + (void)loop_boundaries; + (void)closure; +#endif +} + +template +KOKKOS_INLINE_FUNCTION + typename std::enable_if::value>::type + parallel_reduce(const Impl::TeamVectorRangeBoundariesStruct< + iType, Impl::HIPTeamMember>& loop_boundaries, + const Closure& closure, const ReducerType& reducer) { +#ifdef __HIP_DEVICE_COMPILE__ + typename ReducerType::value_type value; + reducer.init(value); + + for (iType i = loop_boundaries.start + hipThreadIdx_y * hipBlockDim_x + + hipThreadIdx_x; + i < loop_boundaries.end; i += hipBlockDim_y * hipBlockDim_x) { + closure(i, value); + } + + loop_boundaries.member.vector_reduce(reducer, value); + loop_boundaries.member.team_reduce(reducer, value); +#else + (void)loop_boundaries; + (void)closure; + (void)reducer; +#endif +} + +template +KOKKOS_INLINE_FUNCTION + typename std::enable_if::value>::type + parallel_reduce(const Impl::TeamVectorRangeBoundariesStruct< + iType, Impl::HIPTeamMember>& loop_boundaries, + const Closure& closure, ValueType& result) { +#ifdef __HIP_DEVICE_COMPILE__ + ValueType val; + Kokkos::Sum reducer(val); + + reducer.init(reducer.reference()); + + for (iType i = loop_boundaries.start + hipThreadIdx_y * hipBlockDim_x + + hipThreadIdx_x; + i < loop_boundaries.end; i += hipBlockDim_y * hipBlockDim_x) { + closure(i, val); + } + + loop_boundaries.member.vector_reduce(reducer); + loop_boundaries.member.team_reduce(reducer); + result = reducer.reference(); +#else + (void)loop_boundaries; + (void)closure; + (void)result; +#endif +} + +//---------------------------------------------------------------------------- + +/** \brief Intra-thread vector parallel_for. + * + * Executes closure(iType i) for each i=[0..N) + * + * The range [0..N) is mapped to all vector lanes of the the calling thread. + */ +template +KOKKOS_INLINE_FUNCTION void parallel_for( + const Impl::ThreadVectorRangeBoundariesStruct& + loop_boundaries, + const Closure& closure) { +#ifdef __HIP_DEVICE_COMPILE__ + for (iType i = loop_boundaries.start + hipThreadIdx_x; + i < loop_boundaries.end; i += hipBlockDim_x) { + closure(i); + } +#else + (void)loop_boundaries; + (void)closure; +#endif +} + +//---------------------------------------------------------------------------- + +/** \brief Intra-thread vector parallel_reduce. + * + * Calls closure(iType i, ValueType & val) for each i=[0..N). + * + * The range [0..N) is mapped to all vector lanes of + * the calling thread and a reduction of val is performed using += + * and output into result. + * + * The identity value for the += operator is assumed to be the default + * constructed value. + */ +template +KOKKOS_INLINE_FUNCTION + typename std::enable_if::value>::type + parallel_reduce(Impl::ThreadVectorRangeBoundariesStruct< + iType, Impl::HIPTeamMember> const& loop_boundaries, + Closure const& closure, ReducerType const& reducer) { +#ifdef __HIP_DEVICE_COMPILE__ + reducer.init(reducer.reference()); + + for (iType i = loop_boundaries.start + hipThreadIdx_x; + i < loop_boundaries.end; i += hipBlockDim_x) { + closure(i, reducer.reference()); + } + + Impl::HIPTeamMember::vector_reduce(reducer); +#else + (void)loop_boundaries; + (void)closure; + (void)reducer; +#endif +} + +/** \brief Intra-thread vector parallel_reduce. + * + * Calls closure(iType i, ValueType & val) for each i=[0..N). + * + * The range [0..N) is mapped to all vector lanes of + * the calling thread and a reduction of val is performed using += + * and output into result. + * + * The identity value for the += operator is assumed to be the default + * constructed value. + */ +template +KOKKOS_INLINE_FUNCTION + typename std::enable_if::value>::type + parallel_reduce(Impl::ThreadVectorRangeBoundariesStruct< + iType, Impl::HIPTeamMember> const& loop_boundaries, + Closure const& closure, ValueType& result) { +#ifdef __HIP_DEVICE_COMPILE__ + result = ValueType(); + + for (iType i = loop_boundaries.start + hipThreadIdx_x; + i < loop_boundaries.end; i += hipBlockDim_x) { + closure(i, result); + } + + Impl::HIPTeamMember::vector_reduce(Kokkos::Sum(result)); +#else + (void)loop_boundaries; + (void)closure; + (void)result; +#endif +} + +//---------------------------------------------------------------------------- + +/** \brief Intra-thread vector parallel exclusive prefix sum. + * + * Executes closure(iType i, ValueType & val, bool final) for each i=[0..N) + * + * The range [0..N) is mapped to all vector lanes in the + * thread and a scan operation is performed. + * The last call to closure has final == true. + */ +template +KOKKOS_INLINE_FUNCTION void parallel_scan( + const Impl::ThreadVectorRangeBoundariesStruct& + loop_boundaries, + const Closure& closure) { +#ifdef __HIP_DEVICE_COMPILE__ + // Extract value_type from closure + + using value_type = typename Kokkos::Impl::FunctorAnalysis< + Kokkos::Impl::FunctorPatternInterface::SCAN, void, Closure>::value_type; + + // Loop through boundaries by vector-length chunks + // must scan at each iteration + + value_type accum = 0; + + // All thread "lanes" must loop the same number of times. + // Determine an loop end for all thread "lanes." + // Requires: + // hipBlockDim_x is power of two and thus + // ( end % hipBlockDim_x ) == ( end & ( hipBlockDim_x - 1 ) ) + // 1 <= hipBlockDim_x <= HIPTraits::WarpSize + + int constexpr warp_size = ::Kokkos::Experimental::Impl::HIPTraits::WarpSize; + const int mask = hipBlockDim_x - 1; + const unsigned active_mask = + blockDim.x == warp_size + ? 0xffffffff + : ((1 << hipBlockDim_x) - 1) + << (hipThreadIdx_y % (warp_size / hipBlockDim_x)) * + hipBlockDim_x; + const int rem = loop_boundaries.end & mask; // == end % hipBlockDim_x + const int end = loop_boundaries.end + (rem ? hipBlockDim_x - rem : 0); + + for (int i = hipThreadIdx_x; i < end; i += hipBlockDim_x) { + value_type val = 0; + + // First acquire per-lane contributions: + if (i < loop_boundaries.end) closure(i, val, false); + + value_type sval = val; + + // Bottom up inclusive scan in triangular pattern + // where each HIP thread is the root of a reduction tree + // from the zeroth "lane" to itself. + // [t] += [t-1] if t >= 1 + // [t] += [t-2] if t >= 2 + // [t] += [t-4] if t >= 4 + // ... + + for (int j = 1; j < static_cast(hipBlockDim_x); j <<= 1) { + value_type tmp = 0; + ::Kokkos::Experimental::Impl::in_place_shfl_up( + tmp, sval, j, hipBlockDim_x, active_mask); + if (j <= static_cast(hipThreadIdx_x)) { + sval += tmp; + } + } + + // Include accumulation and remove value for exclusive scan: + val = accum + sval - val; + + // Provide exclusive scan value: + if (i < loop_boundaries.end) closure(i, val, true); + + // Accumulate the last value in the inclusive scan: + ::Kokkos::Experimental::Impl::in_place_shfl(sval, sval, mask, blockDim.x, + active_mask); + + accum += sval; + } +#else + (void)loop_boundaries; + (void)closure; +#endif +} + +} // namespace Kokkos + +namespace Kokkos { + +template +KOKKOS_INLINE_FUNCTION void single( + const Impl::VectorSingleStruct&, + const FunctorType& lambda) { +#ifdef __HIP_DEVICE_COMPILE__ + if (hipThreadIdx_x == 0) lambda(); +#else + (void)lambda; +#endif +} + +template +KOKKOS_INLINE_FUNCTION void single( + const Impl::ThreadSingleStruct&, + const FunctorType& lambda) { +#ifdef __HIP_DEVICE_COMPILE__ + if (hipThreadIdx_x == 0 && hipThreadIdx_y == 0) lambda(); +#else + (void)lambda; +#endif +} + +template +KOKKOS_INLINE_FUNCTION void single( + const Impl::VectorSingleStruct&, + const FunctorType& lambda, ValueType& val) { +#ifdef __HIP_DEVICE_COMPILE__ + int constexpr warp_size = ::Kokkos::Experimental::Impl::HIPTraits::WarpSize; + if (hipThreadIdx_x == 0) lambda(val); + unsigned mask = hipBlockDim_x == warp_size + ? 0xffffffff + : ((1 << hipBlockDim_x) - 1) + << ((hipThreadIdx_y % (warp_size / hipBlockDim_x)) * + hipBlockDim_x); + ::Kokkos::Experimental::Impl::in_place_shfl(val, val, 0, hipBlockDim_x, mask); +#else + (void)lambda; + (void)val; +#endif +} + +template +KOKKOS_INLINE_FUNCTION void single( + const Impl::ThreadSingleStruct& single_struct, + const FunctorType& lambda, ValueType& val) { + (void)single_struct; + (void)lambda; + (void)val; +#ifdef __HIP_DEVICE_COMPILE__ + if (hipThreadIdx_x == 0 && hipThreadIdx_y == 0) { + lambda(val); + } + single_struct.team_member.team_broadcast(val, 0); +#else + (void)single_struct; + (void)lambda; + (void)val; +#endif +} + +} // namespace Kokkos + +#endif /* defined( __HIPCC__ ) */ + +#endif /* #ifndef KOKKOS_CUDA_TEAM_HPP */ diff --git a/lib/kokkos/core/src/HIP/Kokkos_HIP_Vectorization.hpp b/lib/kokkos/core/src/HIP/Kokkos_HIP_Vectorization.hpp new file mode 100644 index 0000000000000000000000000000000000000000..58b5abb2eefad23f8325c7ea90bb2147a86e62df --- /dev/null +++ b/lib/kokkos/core/src/HIP/Kokkos_HIP_Vectorization.hpp @@ -0,0 +1,160 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 3.0 +// Copyright (2020) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +#ifndef KOKKOS_HIP_VECTORIZATION_HPP +#define KOKKOS_HIP_VECTORIZATION_HPP + +#include +#include + +namespace Kokkos { +namespace Experimental { +namespace Impl { + +// Include all lanes +constexpr unsigned shfl_all_mask = 0xffffffff; + +//---------------------------------------------------------------------------- +// Shuffle operations require input to be a register (stack) variable + +// Derived implements do_shfl_op(unsigned mask, T& in, int lane, int width), +// which turns in to one of KOKKOS_IMPL_HIP_SHFL(_UP_|_DOWN_|_)MASK +// Since the logic with respect to value sizes, etc., is the same everywhere, +// put it all in one place. +template +struct in_place_shfl_op { + // CRTP boilerplate + __device__ KOKKOS_IMPL_FORCEINLINE const Derived& self() const noexcept { + return *static_cast(this); + } + + // sizeof(Scalar) == sizeof(int) case + template + // requires _assignable_from_bits + __device__ inline typename std::enable_if::type + operator()(Scalar& out, Scalar const& in, int lane_or_delta, int width, + unsigned mask = shfl_all_mask) const noexcept { + //------------------------------------------------ + reinterpret_cast(out) = self().do_shfl_op( + mask, reinterpret_cast(in), lane_or_delta, width); + //------------------------------------------------ + } + + template + __device__ inline + typename std::enable_if::type + operator()(Scalar& out, Scalar const& in, int lane_or_delta, int width, + unsigned mask = shfl_all_mask) const noexcept { + //------------------------------------------------ + reinterpret_cast(out) = self().do_shfl_op( + mask, *reinterpret_cast(&in), lane_or_delta, width); + //------------------------------------------------ + } + + // sizeof(Scalar) > sizeof(double) case + template + __device__ inline + typename std::enable_if<(sizeof(Scalar) > sizeof(double))>::type + operator()(Scalar& out, const Scalar& val, int lane_or_delta, int width, + unsigned mask = shfl_all_mask) const noexcept { + using shuffle_as_t = int; + enum : int { N = sizeof(Scalar) / sizeof(shuffle_as_t) }; + + for (int i = 0; i < N; ++i) { + reinterpret_cast(&out)[i] = self().do_shfl_op( + mask, reinterpret_cast(&val)[i], lane_or_delta, + width); + } + } +}; + +struct in_place_shfl_fn : in_place_shfl_op { + template + __device__ KOKKOS_IMPL_FORCEINLINE T do_shfl_op(unsigned mask, T& val, + int lane, int width) const + noexcept { + return KOKKOS_IMPL_HIP_SHFL_MASK(mask, val, lane, width); + } +}; + +template +__device__ KOKKOS_IMPL_FORCEINLINE void in_place_shfl(Args&&... args) noexcept { + in_place_shfl_fn{}((Args &&) args...); +} + +struct in_place_shfl_up_fn : in_place_shfl_op { + template + __device__ KOKKOS_IMPL_FORCEINLINE T do_shfl_op(unsigned mask, T& val, + int lane, int width) const + noexcept { + return KOKKOS_IMPL_HIP_SHFL_UP_MASK(mask, val, lane, width); + } +}; + +template +__device__ KOKKOS_IMPL_FORCEINLINE void in_place_shfl_up( + Args&&... args) noexcept { + in_place_shfl_up_fn{}((Args &&) args...); +} + +struct in_place_shfl_down_fn : in_place_shfl_op { + template + __device__ KOKKOS_IMPL_FORCEINLINE T do_shfl_op(unsigned mask, T& val, + int lane, int width) const + noexcept { + return KOKKOS_IMPL_HIP_SHFL_DOWN_MASK(mask, val, lane, width); + } +}; + +template +__device__ KOKKOS_IMPL_FORCEINLINE void in_place_shfl_down( + Args&&... args) noexcept { + in_place_shfl_down_fn{}((Args &&) args...); +} + +} // namespace Impl +} // namespace Experimental +} // namespace Kokkos + +#endif diff --git a/lib/kokkos/core/src/HPX/Kokkos_HPX.cpp b/lib/kokkos/core/src/HPX/Kokkos_HPX.cpp index 0c4cca70f8ee0cdec9d2884a5ab30f78a0b95536..acbd1074fde913f4e4a267cd2c991db9ac5a494d 100644 --- a/lib/kokkos/core/src/HPX/Kokkos_HPX.cpp +++ b/lib/kokkos/core/src/HPX/Kokkos_HPX.cpp @@ -85,6 +85,9 @@ void HPX::impl_initialize(int thread_count) { char *argv_hpx[] = {name, nullptr}; hpx::start(nullptr, argc_hpx, argv_hpx, config); +#if HPX_VERSION_FULL < 0x010400 + // This has been fixed in HPX 1.4.0. + // // NOTE: Wait for runtime to start. hpx::start returns as soon as // possible, meaning some operations are not allowed immediately // after hpx::start. Notably, hpx::stop needs state_running. This @@ -94,6 +97,7 @@ void HPX::impl_initialize(int thread_count) { rt = hpx::get_runtime_ptr(); hpx::util::yield_while( [rt]() { return rt->get_state() < hpx::state_running; }); +#endif m_hpx_initialized = true; } diff --git a/lib/kokkos/core/src/KokkosExp_MDRangePolicy.hpp b/lib/kokkos/core/src/KokkosExp_MDRangePolicy.hpp index 7981c04b4f411a0ec98ea4031a7ad85c55509ca4..3195dbdedf0607f6d8413d81e5240e67fca4437a 100644 --- a/lib/kokkos/core/src/KokkosExp_MDRangePolicy.hpp +++ b/lib/kokkos/core/src/KokkosExp_MDRangePolicy.hpp @@ -63,6 +63,10 @@ #include #endif +#if defined(__HIPCC__) && defined(KOKKOS_ENABLE_HIP) +#include +#endif + namespace Kokkos { // ------------------------------------------------------------------ // @@ -79,7 +83,8 @@ enum class Iterate template struct default_outer_direction { using type = Iterate; -#if defined(KOKKOS_ENABLE_CUDA) || defined(KOKKOS_ENABLE_ROCM) +#if defined(KOKKOS_ENABLE_CUDA) || defined(KOKKOS_ENABLE_ROCM) || \ + defined(KOKKOS_ENABLE_HIP) static constexpr Iterate value = Iterate::Left; #else static constexpr Iterate value = Iterate::Right; @@ -89,7 +94,8 @@ struct default_outer_direction { template struct default_inner_direction { using type = Iterate; -#if defined(KOKKOS_ENABLE_CUDA) || defined(KOKKOS_ENABLE_ROCM) +#if defined(KOKKOS_ENABLE_CUDA) || defined(KOKKOS_ENABLE_ROCM) || \ + defined(KOKKOS_ENABLE_HIP) static constexpr Iterate value = Iterate::Left; #else static constexpr Iterate value = Iterate::Right; @@ -256,6 +262,10 @@ struct MDRangePolicy : public Kokkos::Impl::PolicyTraits { #if defined(KOKKOS_ENABLE_ROCM) && !std::is_same::value +#endif +#if defined(KOKKOS_ENABLE_HIP) + && !std::is_same::value #endif ) { index_type span; @@ -275,7 +285,7 @@ struct MDRangePolicy : public Kokkos::Impl::PolicyTraits { m_prod_tile_dims *= m_tile[i]; } } -#if defined(KOKKOS_ENABLE_CUDA) +#if defined(KOKKOS_ENABLE_CUDA) || defined(KOKKOS_ENABLE_HIP) else // Cuda { index_type span; @@ -287,15 +297,21 @@ struct MDRangePolicy : public Kokkos::Impl::PolicyTraits { rank_start = rank - 1; rank_end = -1; } + bool is_cuda_exec_space = +#if defined(KOKKOS_ENABLE_CUDA) + std::is_same::value; +#else + false; +#endif for (int i = rank_start; i != rank_end; i += increment) { span = m_upper[i] - m_lower[i]; if (m_tile[i] <= 0) { - // TODO: determine what is a good default tile size for cuda + // TODO: determine what is a good default tile size for cuda and HIP // may be rank dependent if (((int)inner_direction == (int)Right && (i < rank - 1)) || ((int)inner_direction == (int)Left && (i > 0))) { if (m_prod_tile_dims < 256) { - m_tile[i] = 2; + m_tile[i] = (is_cuda_exec_space) ? 2 : 4; } else { m_tile[i] = 1; } @@ -311,13 +327,18 @@ struct MDRangePolicy : public Kokkos::Impl::PolicyTraits { if (m_prod_tile_dims > 1024) { // Match Cuda restriction for ParallelReduce; 1024,1024,64 // max per dim (Kepler), but product num_threads < 1024 - printf(" Tile dimensions exceed Cuda limits\n"); - Kokkos::abort( - " Cuda ExecSpace Error: MDRange tile dims exceed maximum number of " - "threads per block - choose smaller tile dims"); - // Kokkos::Impl::throw_runtime_exception( " Cuda ExecSpace Error: - // MDRange tile dims exceed maximum number of threads per block - choose - // smaller tile dims"); + if (is_cuda_exec_space) { + printf(" Tile dimensions exceed Cuda limits\n"); + Kokkos::abort( + " Cuda ExecSpace Error: MDRange tile dims exceed maximum number " + "of " + "threads per block - choose smaller tile dims"); + } else { + printf(" Tile dimensions exceed HIP limits\n"); + Kokkos::abort( + "HIP ExecSpace Error: MDRange tile dims exceed maximum number of " + "threads per block - choose smaller tile dims"); + } } } #endif @@ -396,6 +417,10 @@ struct MDRangePolicy : public Kokkos::Impl::PolicyTraits { #if defined(KOKKOS_ENABLE_ROCM) && !std::is_same::value +#endif +#if defined(KOKKOS_ENABLE_HIP) + && !std::is_same::value #endif ) { index_type span; @@ -415,8 +440,8 @@ struct MDRangePolicy : public Kokkos::Impl::PolicyTraits { m_prod_tile_dims *= m_tile[i]; } } -#if defined(KOKKOS_ENABLE_CUDA) - else // Cuda +#if defined(KOKKOS_ENABLE_CUDA) || defined(KOKKOS_ENABLE_HIP) + else // Cuda or HIP { index_type span; int increment = 1; @@ -451,13 +476,17 @@ struct MDRangePolicy : public Kokkos::Impl::PolicyTraits { if (m_prod_tile_dims > 1024) { // Match Cuda restriction for ParallelReduce; 1024,1024,64 // max per dim (Kepler), but product num_threads < 1024 +#if defined(KOKKOS_ENABLE_CUDA) printf(" Tile dimensions exceed Cuda limits\n"); Kokkos::abort( " Cuda ExecSpace Error: MDRange tile dims exceed maximum number of " "threads per block - choose smaller tile dims"); - // Kokkos::Impl::throw_runtime_exception( " Cuda ExecSpace Error: - // MDRange tile dims exceed maximum number of threads per block - choose - // smaller tile dims"); +#else + printf(" Tile dimensions exceed HIP limits\n"); + Kokkos::abort( + " HIP ExecSpace Error: MDRange tile dims exceed maximum number of " + "threads per block - choose smaller tile dims"); +#endif } } #endif diff --git a/lib/kokkos/core/src/Kokkos_Array.hpp b/lib/kokkos/core/src/Kokkos_Array.hpp index 88e7883cb97cd6bd4d2d286446f2d3c9763dfa40..d830616bd67225eb4a1f0b6cb1c3f235307cf037 100644 --- a/lib/kokkos/core/src/Kokkos_Array.hpp +++ b/lib/kokkos/core/src/Kokkos_Array.hpp @@ -159,22 +159,21 @@ struct Array { return &m_internal_implementation_private_member_data[0]; } -#ifdef KOKKOS_IMPL_ROCM_CLANG_WORKAROUND +#ifdef KOKKOS_IMPL_HIP_CLANG_WORKAROUND // Do not default unless move and move-assignment are also defined - KOKKOS_INLINE_FUNCTION - ~Array() = default; - Array() = default; - Array(const Array&) = default; - Array& operator=(const Array&) = default; + KOKKOS_DEFAULTED_FUNCTION ~Array() = default; + KOKKOS_DEFAULTED_FUNCTION Array() = default; + KOKKOS_DEFAULTED_FUNCTION Array(const Array&) = default; + KOKKOS_DEFAULTED_FUNCTION Array& operator=(const Array&) = default; // Some supported compilers are not sufficiently C++11 compliant // for default move constructor and move assignment operator. - Array(Array&&) = default; - Array& operator=(Array&&) = default; + KOKKOS_DEFAULTED_FUNCTION Array(Array&&) = default; + KOKKOS_DEFAULTED_FUNCTION Array& operator=(Array&&) = default; KOKKOS_INLINE_FUNCTION Array(const std::initializer_list& vals) { - for (int i = 0; i < N; i++) { + for (size_t i = 0; i < N; i++) { m_internal_implementation_private_member_data[i] = vals.begin()[i]; } } @@ -217,17 +216,10 @@ struct Array { KOKKOS_INLINE_FUNCTION pointer data() { return pointer(0); } KOKKOS_INLINE_FUNCTION const_pointer data() const { return const_pointer(0); } -#ifdef KOKKOS_CUDA_9_DEFAULTED_BUG_WORKAROUND - KOKKOS_INLINE_FUNCTION ~Array() {} - KOKKOS_INLINE_FUNCTION Array() {} - KOKKOS_INLINE_FUNCTION Array(const Array&) {} - KOKKOS_INLINE_FUNCTION Array& operator=(const Array&) {} -#else - KOKKOS_INLINE_FUNCTION ~Array() = default; - KOKKOS_INLINE_FUNCTION Array() = default; - KOKKOS_INLINE_FUNCTION Array(const Array&) = default; - KOKKOS_INLINE_FUNCTION Array& operator=(const Array&) = default; -#endif + KOKKOS_DEFAULTED_FUNCTION ~Array() = default; + KOKKOS_DEFAULTED_FUNCTION Array() = default; + KOKKOS_DEFAULTED_FUNCTION Array(const Array&) = default; + KOKKOS_DEFAULTED_FUNCTION Array& operator=(const Array&) = default; // Some supported compilers are not sufficiently C++11 compliant // for default move constructor and move assignment operator. @@ -281,13 +273,9 @@ struct Array::contiguous> { KOKKOS_INLINE_FUNCTION pointer data() { return m_elem; } KOKKOS_INLINE_FUNCTION const_pointer data() const { return m_elem; } -#ifdef KOKKOS_CUDA_9_DEFAULTED_BUG_WORKAROUND - KOKKOS_INLINE_FUNCTION ~Array() {} -#else - KOKKOS_INLINE_FUNCTION ~Array() = default; -#endif - Array() = delete; - Array(const Array& rhs) = delete; + KOKKOS_DEFAULTED_FUNCTION ~Array() = default; + KOKKOS_INLINE_FUNCTION_DELETED Array() = delete; + KOKKOS_INLINE_FUNCTION_DELETED Array(const Array& rhs) = delete; // Some supported compilers are not sufficiently C++11 compliant // for default move constructor and move assignment operator. @@ -354,13 +342,9 @@ struct Array::strided> { KOKKOS_INLINE_FUNCTION pointer data() { return m_elem; } KOKKOS_INLINE_FUNCTION const_pointer data() const { return m_elem; } -#ifdef KOKKOS_CUDA_9_DEFAULTED_BUG_WORKAROUND - KOKKOS_INLINE_FUNCTION ~Array() {} -#else - KOKKOS_INLINE_FUNCTION ~Array() = default; -#endif - Array() = delete; - Array(const Array&) = delete; + KOKKOS_DEFAULTED_FUNCTION ~Array() = default; + KOKKOS_INLINE_FUNCTION_DELETED Array() = delete; + KOKKOS_INLINE_FUNCTION_DELETED Array(const Array&) = delete; // Some supported compilers are not sufficiently C++11 compliant // for default move constructor and move assignment operator. diff --git a/lib/kokkos/core/src/Kokkos_Atomic.hpp b/lib/kokkos/core/src/Kokkos_Atomic.hpp index c4f7fa3ec14dc58414904a62942938bd8b73493e..55139d07b94aaa7c0b621a515335f31307d70101 100644 --- a/lib/kokkos/core/src/Kokkos_Atomic.hpp +++ b/lib/kokkos/core/src/Kokkos_Atomic.hpp @@ -86,6 +86,10 @@ #define KOKKOS_ENABLE_ROCM_ATOMICS +#elif defined(KOKKOS_ACTIVE_EXECUTION_MEMORY_SPACE_HIP_GPU) + +#define KOKKOS_ENABLE_HIP_ATOMICS + #endif #if !defined(KOKKOS_ENABLE_GNU_ATOMICS) && \ @@ -178,11 +182,13 @@ extern KOKKOS_INLINE_FUNCTION void unlock_address_rocm_space(void* ptr); } // namespace Kokkos #include #endif +#if defined(KOKKOS_ENABLE_HIP) +#include +#endif #ifdef _WIN32 #include "impl/Kokkos_Atomic_Windows.hpp" #else - //---------------------------------------------------------------------------- // Atomic Assembly // @@ -209,6 +215,11 @@ extern KOKKOS_INLINE_FUNCTION void unlock_address_rocm_space(void* ptr); #include "impl/Kokkos_Atomic_Compare_Exchange_Strong.hpp" +#endif //_WIN32 + +#include "impl/Kokkos_Atomic_Generic.hpp" + +#ifndef _WIN32 //---------------------------------------------------------------------------- // Atomic fetch and add // @@ -262,6 +273,18 @@ extern KOKKOS_INLINE_FUNCTION void unlock_address_rocm_space(void* ptr); // { T tmp = *dest ; *dest = tmp & val ; return tmp ; } #include "impl/Kokkos_Atomic_Fetch_And.hpp" + +//---------------------------------------------------------------------------- +// Atomic MinMax +// +// template +// T atomic_min(volatile T* const dest, const T val) +// { T tmp = *dest ; *dest = min(*dest, val); return tmp ; } +// template +// T atomic_max(volatile T* const dest, const T val) +// { T tmp = *dest ; *dest = max(*dest, val); return tmp ; } + +#include "impl/Kokkos_Atomic_MinMax.hpp" #endif /*Not _WIN32*/ //---------------------------------------------------------------------------- @@ -284,16 +307,14 @@ extern KOKKOS_INLINE_FUNCTION void unlock_address_rocm_space(void* ptr); #include "impl/Kokkos_Volatile_Load.hpp" -#ifndef _WIN32 -#include "impl/Kokkos_Atomic_Generic.hpp" -#endif - //---------------------------------------------------------------------------- // Provide atomic loads and stores with memory order semantics #include "impl/Kokkos_Atomic_Load.hpp" #include "impl/Kokkos_Atomic_Store.hpp" +// Generic functions using the above defined functions +#include "impl/Kokkos_Atomic_Generic_Secondary.hpp" //---------------------------------------------------------------------------- // This atomic-style macro should be an inlined function, not a macro diff --git a/lib/kokkos/core/src/Kokkos_Complex.hpp b/lib/kokkos/core/src/Kokkos_Complex.hpp index a9af073b4193d9e643d6f3c31c7dbd0837f65b60..fec5d62c3dd6c988fc542dcf3aeb43e58030dce7 100644 --- a/lib/kokkos/core/src/Kokkos_Complex.hpp +++ b/lib/kokkos/core/src/Kokkos_Complex.hpp @@ -73,14 +73,14 @@ class using value_type = RealType; //! Default constructor (initializes both real and imaginary parts to zero). - KOKKOS_INLINE_FUNCTION + KOKKOS_DEFAULTED_FUNCTION complex() noexcept = default; //! Copy constructor. - KOKKOS_INLINE_FUNCTION + KOKKOS_DEFAULTED_FUNCTION complex(const complex&) noexcept = default; - KOKKOS_INLINE_FUNCTION + KOKKOS_DEFAULTED_FUNCTION complex& operator=(const complex&) noexcept = default; /// \brief Conversion constructor from compatible RType @@ -219,7 +219,10 @@ class // Scale (by the "1-norm" of y) to avoid unwarranted overflow. // If the real part is +/-Inf and the imaginary part is -/+Inf, // this won't change the result. - const RealType s = std::fabs(y.real()) + std::fabs(y.imag()); +#if !defined(__HIP_DEVICE_COMPILE__) // FIXME_HIP + using std::fabs; +#endif + const RealType s = fabs(y.real()) + fabs(y.imag()); // If s is 0, then y is zero, so x/y == real(x)/0 + i*imag(x)/0. // In that case, the relation x/y == (x/s) / (y/s) doesn't hold, @@ -247,7 +250,10 @@ class // Scale (by the "1-norm" of y) to avoid unwarranted overflow. // If the real part is +/-Inf and the imaginary part is -/+Inf, // this won't change the result. - const RealType s = std::fabs(y.real()) + std::fabs(y.imag()); +#if !defined(__HIP_DEVICE_COMPILE__) // FIXME_HIP + using std::fabs; +#endif + const RealType s = fabs(y.real()) + fabs(y.imag()); // If s is 0, then y is zero, so x/y == real(x)/0 + i*imag(x)/0. // In that case, the relation x/y == (x/s) / (y/s) doesn't hold, @@ -298,8 +304,21 @@ class /// complex& . See Kokkos Issue #177 for the /// explanation. In practice, this means that you should not chain /// assignments with volatile lvalues. - KOKKOS_INLINE_FUNCTION void operator=( - const complex& src) volatile noexcept { + // + // Templated, so as not to be a copy assignment operator (Kokkos issue #2577) + // Intended to behave as + // void operator=(const complex&) volatile noexcept + // + // Use cases: + // complex r; + // const complex cr; + // volatile complex vl; + // vl = r; + // vl = cr; + template ::value, + int>::type = 0> + KOKKOS_INLINE_FUNCTION void operator=(const Complex& src) volatile noexcept { re_ = src.re_; im_ = src.im_; // We deliberately do not return anything here. See explanation @@ -308,16 +327,45 @@ class //! Assignment operator, volatile LHS and volatile RHS // TODO Should this return void like the other volatile assignment operators? + // + // Templated, so as not to be a copy assignment operator (Kokkos issue #2577) + // Intended to behave as + // volatile complex& operator=(const volatile complex&) volatile noexcept + // + // Use cases: + // volatile complex vr; + // const volatile complex cvr; + // volatile complex vl; + // vl = vr; + // vl = cvr; + template ::value, + int>::type = 0> KOKKOS_INLINE_FUNCTION volatile complex& operator=( - const volatile complex& src) volatile noexcept { + const volatile Complex& src) volatile noexcept { re_ = src.re_; im_ = src.im_; return *this; } //! Assignment operator, volatile RHS and non-volatile LHS + // + // Templated, so as not to be a copy assignment operator (Kokkos issue #2577) + // Intended to behave as + // complex& operator=(const volatile complex&) noexcept + // + // Use cases: + // volatile complex vr; + // const volatile complex cvr; + // complex l; + // l = vr; + // l = cvr; + // + template ::value, + int>::type = 0> KOKKOS_INLINE_FUNCTION complex& operator=( - const volatile complex& src) noexcept { + const volatile Complex& src) noexcept { re_ = src.re_; im_ = src.im_; return *this; @@ -650,7 +698,8 @@ KOKKOS_INLINE_FUNCTION RealType real(const complex& x) noexcept { //! Absolute value (magnitude) of a complex number. template KOKKOS_INLINE_FUNCTION RealType abs(const complex& x) { -#ifndef __CUDA_ARCH__ +#if !defined(__CUDA_ARCH__) && \ + !defined(__HIP_DEVICE_COMPILE__) // FIXME_CUDA FIXME_HIP using std::hypot; #endif return hypot(x.real(), x.imag()); @@ -660,20 +709,32 @@ KOKKOS_INLINE_FUNCTION RealType abs(const complex& x) { template KOKKOS_INLINE_FUNCTION Kokkos::complex pow(const complex& x, const RealType& e) { - RealType r = abs(x); - RealType phi = std::atan(x.imag() / x.real()); - return std::pow(r, e) * - Kokkos::complex(std::cos(phi * e), std::sin(phi * e)); + RealType r = abs(x); +#if !defined(__HIP_DEVICE_COMPILE__) // FIXME_HIP + using std::atan; + using std::cos; + using std::pow; + using std::sin; +#endif + using ::pow; + RealType phi = atan(x.imag() / x.real()); + return pow(r, e) * Kokkos::complex(cos(phi * e), sin(phi * e)); } //! Square root of a complex number. template KOKKOS_INLINE_FUNCTION Kokkos::complex sqrt( const complex& x) { - RealType r = abs(x); - RealType phi = std::atan(x.imag() / x.real()); - return std::sqrt(r) * - Kokkos::complex(std::cos(phi * 0.5), std::sin(phi * 0.5)); + RealType r = abs(x); +#if !defined(__HIP_DEVICE_COMPILE__) // FIXME_HIP + using std::atan; + using std::cos; + using std::sin; + using std::sqrt; +#endif + using ::sqrt; + RealType phi = atan(x.imag() / x.real()); + return sqrt(r) * Kokkos::complex(cos(phi * 0.5), sin(phi * 0.5)); } //! Conjugate of a complex number. @@ -686,8 +747,14 @@ KOKKOS_INLINE_FUNCTION complex conj( //! Exponential of a complex number. template KOKKOS_INLINE_FUNCTION complex exp(const complex& x) { - return std::exp(x.real()) * - complex(std::cos(x.imag()), std::sin(x.imag())); +#if !defined(__HIP_DEVICE_COMPILE__) // FIXME_HIP + using std::cos; + using std::exp; + using std::sin; +#else + using ::exp; +#endif + return exp(x.real()) * complex(cos(x.imag()), sin(x.imag())); } /// This function cannot be called in a CUDA device function, @@ -720,9 +787,12 @@ KOKKOS_INLINE_FUNCTION // Scale (by the "1-norm" of y) to avoid unwarranted overflow. // If the real part is +/-Inf and the imaginary part is -/+Inf, // this won't change the result. +#if !defined(__HIP_DEVICE_COMPILE__) // FIXME_HIP + using std::fabs; +#endif typedef typename std::common_type::type common_real_type; - const common_real_type s = std::fabs(real(y)) + std::fabs(imag(y)); + const common_real_type s = fabs(real(y)) + fabs(imag(y)); // If s is 0, then y is zero, so x/y == real(x)/0 + i*imag(x)/0. // In that case, the relation x/y == (x/s) / (y/s) doesn't hold, diff --git a/lib/kokkos/core/src/Kokkos_Concepts.hpp b/lib/kokkos/core/src/Kokkos_Concepts.hpp index 99b7aa9aab185d8a4cfc25a224acfcf25f7e816c..13d7925c127c2353af68d11d8746263047dfd1dc 100644 --- a/lib/kokkos/core/src/Kokkos_Concepts.hpp +++ b/lib/kokkos/core/src/Kokkos_Concepts.hpp @@ -153,19 +153,17 @@ namespace Kokkos { template \ struct have : std::false_type {}; \ template \ - struct have::type, \ - typename std::remove_cv::type>::type> \ + struct have::type> \ : std::true_type {}; \ template \ struct have::type, \ - typename std::remove_cv::type>::type> \ + typename std::is_base_of::type> \ : std::true_type {}; \ \ public: \ - enum { value = is_##CONCEPT::template have::value }; \ + static constexpr bool value = \ + is_##CONCEPT::template have::type>::value; \ + constexpr operator bool() const noexcept { return value; } \ }; // Public concept: @@ -205,6 +203,43 @@ KOKKOS_IMPL_IS_CONCEPT(host_thread_team_member) } // namespace Kokkos +namespace Kokkos { +namespace Impl { + +template +class has_member_team_shmem_size { + template + static int32_t test_for_member(decltype(&T::team_shmem_size)) { + return int32_t(0); + } + template + static int64_t test_for_member(...) { + return int64_t(0); + } + + public: + constexpr static bool value = + sizeof(test_for_member(0)) == sizeof(int32_t); +}; + +template +class has_member_shmem_size { + template + static int32_t test_for_member(decltype(&T::shmem_size_me)) { + return int32_t(0); + } + template + static int64_t test_for_member(...) { + return int64_t(0); + } + + public: + constexpr static bool value = + sizeof(test_for_member(0)) == sizeof(int32_t); +}; + +} // namespace Impl +} // namespace Kokkos //---------------------------------------------------------------------------- namespace Kokkos { @@ -220,6 +255,23 @@ struct Device { typedef Device device_type; }; +namespace Impl { + +template +struct is_device_helper : std::false_type {}; + +template +struct is_device_helper> : std::true_type { +}; + +} // namespace Impl + +template +using is_device = + typename Impl::is_device_helper::type>::type; + +//---------------------------------------------------------------------------- + template struct is_space { private: @@ -259,12 +311,17 @@ struct is_space { typedef typename U::device_type space; }; - typedef typename is_space::template exe is_exe; - typedef typename is_space::template mem is_mem; - typedef typename is_space::template dev is_dev; + typedef typename is_space::template exe::type> + is_exe; + typedef typename is_space::template mem::type> + is_mem; + typedef typename is_space::template dev::type> + is_dev; public: - enum { value = is_exe::value || is_mem::value || is_dev::value }; + static constexpr bool value = is_exe::value || is_mem::value || is_dev::value; + + constexpr operator bool() const noexcept { return value; } typedef typename is_exe::space execution_space; typedef typename is_mem::space memory_space; @@ -300,7 +357,7 @@ struct is_space { typedef typename std::conditional< std::is_same::value && std::is_same::value, - T, Kokkos::Device >::type + T, Kokkos::Device>::type host_mirror_space; }; @@ -426,7 +483,7 @@ struct SpaceAccessibility { std::is_same::value || !exe_access::accessible, AccessSpace, - Kokkos::Device >::type + Kokkos::Device>::type space; }; diff --git a/lib/kokkos/core/src/Kokkos_CopyViews.hpp b/lib/kokkos/core/src/Kokkos_CopyViews.hpp index 9b3db1277d677cf0e7a86a74ec0b161d55a466bc..810b71273330ffa183d2d305a2ce23af30bdedaa 100644 --- a/lib/kokkos/core/src/Kokkos_CopyViews.hpp +++ b/lib/kokkos/core/src/Kokkos_CopyViews.hpp @@ -84,7 +84,7 @@ struct ViewFill { ViewType a; typename ViewType::const_value_type val; typedef typename ViewType::non_const_value_type ST; - ViewFill(const ViewType&, const ST&); + ViewFill(const ViewType&, const ST&, const ExecSpace&); }; template { ViewType a; typename ViewType::const_value_type val; typedef typename ViewType::non_const_value_type ST; - ViewFill(const ViewType&, const ST&); + ViewFill(const ViewType&, const ST&, const ExecSpace&); KOKKOS_INLINE_FUNCTION void operator()(const iType&) const; }; @@ -104,7 +104,7 @@ struct ViewFill { ViewType a; typename ViewType::const_value_type val; typedef typename ViewType::non_const_value_type ST; - ViewFill(const ViewType&, const ST&); + ViewFill(const ViewType&, const ST&, const ExecSpace&); KOKKOS_INLINE_FUNCTION void operator()(const iType&, const iType&) const; }; @@ -115,7 +115,7 @@ struct ViewFill { ViewType a; typename ViewType::const_value_type val; typedef typename ViewType::non_const_value_type ST; - ViewFill(const ViewType&, const ST&); + ViewFill(const ViewType&, const ST&, const ExecSpace&); KOKKOS_INLINE_FUNCTION void operator()(const iType&, const iType&, const iType&) const; }; @@ -126,7 +126,7 @@ struct ViewFill { ViewType a; typename ViewType::const_value_type val; typedef typename ViewType::non_const_value_type ST; - ViewFill(const ViewType&, const ST&); + ViewFill(const ViewType&, const ST&, const ExecSpace&); KOKKOS_INLINE_FUNCTION void operator()(const iType&, const iType&, const iType&, const iType&) const; }; @@ -137,7 +137,7 @@ struct ViewFill { ViewType a; typename ViewType::const_value_type val; typedef typename ViewType::non_const_value_type ST; - ViewFill(const ViewType&, const ST&); + ViewFill(const ViewType&, const ST&, const ExecSpace&); KOKKOS_INLINE_FUNCTION void operator()(const iType&, const iType&, const iType&, const iType&, const iType&) const; @@ -149,7 +149,7 @@ struct ViewFill { ViewType a; typename ViewType::const_value_type val; typedef typename ViewType::non_const_value_type ST; - ViewFill(const ViewType&, const ST&); + ViewFill(const ViewType&, const ST&, const ExecSpace&); KOKKOS_INLINE_FUNCTION void operator()(const iType&, const iType&, const iType&, const iType&, const iType&, const iType&) const; @@ -161,7 +161,7 @@ struct ViewFill { ViewType a; typename ViewType::const_value_type val; typedef typename ViewType::non_const_value_type ST; - ViewFill(const ViewType&, const ST&); + ViewFill(const ViewType&, const ST&, const ExecSpace&); KOKKOS_INLINE_FUNCTION void operator()(const iType&, const iType&, const iType&, const iType&, const iType&, const iType&, const iType&) const; @@ -173,7 +173,7 @@ struct ViewFill { ViewType a; typename ViewType::const_value_type val; typedef typename ViewType::non_const_value_type ST; - ViewFill(const ViewType&, const ST&); + ViewFill(const ViewType&, const ST&, const ExecSpace&); KOKKOS_INLINE_FUNCTION void operator()(const iType&, const iType&, const iType&, const iType&, const iType&, const iType&, const iType&, const iType&) const; @@ -183,9 +183,9 @@ template struct ViewFill { typedef typename ViewType::non_const_value_type ST; - ViewFill(const ViewType& a, const ST& val) { - Kokkos::Impl::DeepCopy( - a.data(), &val, sizeof(ST)); + ViewFill(const ViewType& a, const ST& val, const ExecSpace& space) { + Kokkos::Impl::DeepCopy(space, a.data(), &val, sizeof(ST)); } }; @@ -196,12 +196,11 @@ struct ViewFill> policy_type; - ViewFill(const ViewType& a_, typename ViewType::const_value_type& val_) + ViewFill(const ViewType& a_, typename ViewType::const_value_type& val_, + const ExecSpace& space) : a(a_), val(val_) { - ExecSpace().fence(); - Kokkos::parallel_for("Kokkos::ViewFill-1D", policy_type(0, a.extent(0)), - *this); - ExecSpace().fence(); + Kokkos::parallel_for("Kokkos::ViewFill-1D", + policy_type(space, 0, a.extent(0)), *this); } KOKKOS_INLINE_FUNCTION @@ -221,13 +220,12 @@ struct ViewFill> policy_type; - ViewFill(const ViewType& a_, typename ViewType::const_value_type& val_) + ViewFill(const ViewType& a_, typename ViewType::const_value_type& val_, + const ExecSpace& space) : a(a_), val(val_) { - ExecSpace().fence(); Kokkos::parallel_for("Kokkos::ViewFill-2D", - policy_type({0, 0}, {a.extent(0), a.extent(1)}), + policy_type(space, {0, 0}, {a.extent(0), a.extent(1)}), *this); - ExecSpace().fence(); } KOKKOS_INLINE_FUNCTION @@ -247,13 +245,13 @@ struct ViewFill> policy_type; - ViewFill(const ViewType& a_, typename ViewType::const_value_type& val_) + ViewFill(const ViewType& a_, typename ViewType::const_value_type& val_, + const ExecSpace& space) : a(a_), val(val_) { - ExecSpace().fence(); Kokkos::parallel_for( "Kokkos::ViewFill-3D", - policy_type({0, 0, 0}, {a.extent(0), a.extent(1), a.extent(2)}), *this); - ExecSpace().fence(); + policy_type(space, {0, 0, 0}, {a.extent(0), a.extent(1), a.extent(2)}), + *this); } KOKKOS_INLINE_FUNCTION @@ -275,14 +273,14 @@ struct ViewFill> policy_type; - ViewFill(const ViewType& a_, typename ViewType::const_value_type& val_) + ViewFill(const ViewType& a_, typename ViewType::const_value_type& val_, + const ExecSpace& space) : a(a_), val(val_) { - ExecSpace().fence(); - Kokkos::parallel_for("Kokkos::ViewFill-4D", - policy_type({0, 0, 0, 0}, {a.extent(0), a.extent(1), - a.extent(2), a.extent(3)}), - *this); - ExecSpace().fence(); + Kokkos::parallel_for( + "Kokkos::ViewFill-4D", + policy_type(space, {0, 0, 0, 0}, + {a.extent(0), a.extent(1), a.extent(2), a.extent(3)}), + *this); } KOKKOS_INLINE_FUNCTION @@ -305,15 +303,14 @@ struct ViewFill> policy_type; - ViewFill(const ViewType& a_, typename ViewType::const_value_type& val_) + ViewFill(const ViewType& a_, typename ViewType::const_value_type& val_, + const ExecSpace& space) : a(a_), val(val_) { - ExecSpace().fence(); - Kokkos::parallel_for( - "Kokkos::ViewFill-5D", - policy_type({0, 0, 0, 0, 0}, {a.extent(0), a.extent(1), a.extent(2), + Kokkos::parallel_for("Kokkos::ViewFill-5D", + policy_type(space, {0, 0, 0, 0, 0}, + {a.extent(0), a.extent(1), a.extent(2), a.extent(3), a.extent(4)}), - *this); - ExecSpace().fence(); + *this); } KOKKOS_INLINE_FUNCTION @@ -336,15 +333,14 @@ struct ViewFill> policy_type; - ViewFill(const ViewType& a_, typename ViewType::const_value_type& val_) + ViewFill(const ViewType& a_, typename ViewType::const_value_type& val_, + const ExecSpace& space) : a(a_), val(val_) { - ExecSpace().fence(); Kokkos::parallel_for("Kokkos::ViewFill-6D", - policy_type({0, 0, 0, 0, 0, 0}, + policy_type(space, {0, 0, 0, 0, 0, 0}, {a.extent(0), a.extent(1), a.extent(2), a.extent(3), a.extent(4), a.extent(5)}), *this); - ExecSpace().fence(); } KOKKOS_INLINE_FUNCTION @@ -367,15 +363,14 @@ struct ViewFill> policy_type; - ViewFill(const ViewType& a_, typename ViewType::const_value_type& val_) + ViewFill(const ViewType& a_, typename ViewType::const_value_type& val_, + const ExecSpace& space) : a(a_), val(val_) { - ExecSpace().fence(); Kokkos::parallel_for("Kokkos::ViewFill-7D", - policy_type({0, 0, 0, 0, 0, 0}, + policy_type(space, {0, 0, 0, 0, 0, 0}, {a.extent(0), a.extent(1), a.extent(2), a.extent(3), a.extent(5), a.extent(6)}), *this); - ExecSpace().fence(); } KOKKOS_INLINE_FUNCTION @@ -399,15 +394,14 @@ struct ViewFill> policy_type; - ViewFill(const ViewType& a_, typename ViewType::const_value_type& val_) + ViewFill(const ViewType& a_, typename ViewType::const_value_type& val_, + const ExecSpace& space) : a(a_), val(val_) { - ExecSpace().fence(); Kokkos::parallel_for("Kokkos::ViewFill-8D", - policy_type({0, 0, 0, 0, 0, 0}, + policy_type(space, {0, 0, 0, 0, 0, 0}, {a.extent(0), a.extent(1), a.extent(3), a.extent(5), a.extent(6), a.extent(7)}), *this); - ExecSpace().fence(); } KOKKOS_INLINE_FUNCTION @@ -424,7 +418,7 @@ template { ViewTypeA a; ViewTypeB b; - ViewCopy(const ViewTypeA&, const ViewTypeB&); + ViewCopy(const ViewTypeA&, const ViewTypeB&, const ExecSpace&); KOKKOS_INLINE_FUNCTION void operator()(const iType& i0) const; }; @@ -434,7 +428,7 @@ template { ViewTypeA a; ViewTypeB b; - ViewCopy(const ViewTypeA&, const ViewTypeB&); + ViewCopy(const ViewTypeA&, const ViewTypeB&, const ExecSpace&); KOKKOS_INLINE_FUNCTION void operator()(const iType& i0, const iType& i1) const; }; @@ -444,7 +438,7 @@ template { ViewTypeA a; ViewTypeB b; - ViewCopy(const ViewTypeA&, const ViewTypeB&); + ViewCopy(const ViewTypeA&, const ViewTypeB&, const ExecSpace&); KOKKOS_INLINE_FUNCTION void operator()(const iType& i0, const iType& i1, const iType& i2) const; }; @@ -454,7 +448,7 @@ template { ViewTypeA a; ViewTypeB b; - ViewCopy(const ViewTypeA&, const ViewTypeB&); + ViewCopy(const ViewTypeA&, const ViewTypeB&, const ExecSpace&); KOKKOS_INLINE_FUNCTION void operator()(const iType& i0, const iType& i1, const iType& i2, const iType& i3) const; @@ -465,7 +459,7 @@ template { ViewTypeA a; ViewTypeB b; - ViewCopy(const ViewTypeA&, const ViewTypeB&); + ViewCopy(const ViewTypeA&, const ViewTypeB&, const ExecSpace&); KOKKOS_INLINE_FUNCTION void operator()(const iType& i0, const iType& i1, const iType& i2, const iType& i3, const iType& i4) const; @@ -476,7 +470,7 @@ template { ViewTypeA a; ViewTypeB b; - ViewCopy(const ViewTypeA&, const ViewTypeB&); + ViewCopy(const ViewTypeA&, const ViewTypeB&, const ExecSpace&); KOKKOS_INLINE_FUNCTION void operator()(const iType& i0, const iType& i1, const iType& i2, const iType& i3, const iType& i4, const iType& i5) const; @@ -487,7 +481,7 @@ template { ViewTypeA a; ViewTypeB b; - ViewCopy(const ViewTypeA&, const ViewTypeB&); + ViewCopy(const ViewTypeA&, const ViewTypeB&, const ExecSpace&); KOKKOS_INLINE_FUNCTION void operator()(const iType& i0, const iType& i1, const iType& i2, const iType& i3, const iType& i4, const iType& i5, @@ -499,7 +493,7 @@ template { ViewTypeA a; ViewTypeB b; - ViewCopy(const ViewTypeA&, const ViewTypeB&); + ViewCopy(const ViewTypeA&, const ViewTypeB&, const ExecSpace&); KOKKOS_INLINE_FUNCTION void operator()(const iType& i0, const iType& i1, const iType& i2, const iType& i3, const iType& i4, const iType& i5, @@ -515,11 +509,11 @@ struct ViewCopy> policy_type; - ViewCopy(const ViewTypeA& a_, const ViewTypeB& b_) : a(a_), b(b_) { - ExecSpace().fence(); - Kokkos::parallel_for("Kokkos::ViewCopy-1D", policy_type(0, a.extent(0)), - *this); - ExecSpace().fence(); + ViewCopy(const ViewTypeA& a_, const ViewTypeB& b_, + const ExecSpace space = ExecSpace()) + : a(a_), b(b_) { + Kokkos::parallel_for("Kokkos::ViewCopy-1D", + policy_type(space, 0, a.extent(0)), *this); } KOKKOS_INLINE_FUNCTION @@ -542,12 +536,12 @@ struct ViewCopy> policy_type; - ViewCopy(const ViewTypeA& a_, const ViewTypeB& b_) : a(a_), b(b_) { - ExecSpace().fence(); + ViewCopy(const ViewTypeA& a_, const ViewTypeB& b_, + const ExecSpace space = ExecSpace()) + : a(a_), b(b_) { Kokkos::parallel_for("Kokkos::ViewCopy-2D", - policy_type({0, 0}, {a.extent(0), a.extent(1)}), + policy_type(space, {0, 0}, {a.extent(0), a.extent(1)}), *this); - ExecSpace().fence(); } KOKKOS_INLINE_FUNCTION @@ -573,12 +567,13 @@ struct ViewCopy> policy_type; - ViewCopy(const ViewTypeA& a_, const ViewTypeB& b_) : a(a_), b(b_) { - ExecSpace().fence(); + ViewCopy(const ViewTypeA& a_, const ViewTypeB& b_, + const ExecSpace space = ExecSpace()) + : a(a_), b(b_) { Kokkos::parallel_for( "Kokkos::ViewCopy-3D", - policy_type({0, 0, 0}, {a.extent(0), a.extent(1), a.extent(2)}), *this); - ExecSpace().fence(); + policy_type(space, {0, 0, 0}, {a.extent(0), a.extent(1), a.extent(2)}), + *this); } KOKKOS_INLINE_FUNCTION @@ -604,13 +599,14 @@ struct ViewCopy> policy_type; - ViewCopy(const ViewTypeA& a_, const ViewTypeB& b_) : a(a_), b(b_) { - ExecSpace().fence(); - Kokkos::parallel_for("Kokkos::ViewCopy-4D", - policy_type({0, 0, 0, 0}, {a.extent(0), a.extent(1), - a.extent(2), a.extent(3)}), - *this); - ExecSpace().fence(); + ViewCopy(const ViewTypeA& a_, const ViewTypeB& b_, + const ExecSpace space = ExecSpace()) + : a(a_), b(b_) { + Kokkos::parallel_for( + "Kokkos::ViewCopy-4D", + policy_type(space, {0, 0, 0, 0}, + {a.extent(0), a.extent(1), a.extent(2), a.extent(3)}), + *this); } KOKKOS_INLINE_FUNCTION @@ -637,14 +633,14 @@ struct ViewCopy> policy_type; - ViewCopy(const ViewTypeA& a_, const ViewTypeB& b_) : a(a_), b(b_) { - ExecSpace().fence(); - Kokkos::parallel_for( - "Kokkos::ViewCopy-5D", - policy_type({0, 0, 0, 0, 0}, {a.extent(0), a.extent(1), a.extent(2), + ViewCopy(const ViewTypeA& a_, const ViewTypeB& b_, + const ExecSpace space = ExecSpace()) + : a(a_), b(b_) { + Kokkos::parallel_for("Kokkos::ViewCopy-5D", + policy_type(space, {0, 0, 0, 0, 0}, + {a.extent(0), a.extent(1), a.extent(2), a.extent(3), a.extent(4)}), - *this); - ExecSpace().fence(); + *this); } KOKKOS_INLINE_FUNCTION @@ -671,14 +667,14 @@ struct ViewCopy> policy_type; - ViewCopy(const ViewTypeA& a_, const ViewTypeB& b_) : a(a_), b(b_) { - ExecSpace().fence(); + ViewCopy(const ViewTypeA& a_, const ViewTypeB& b_, + const ExecSpace space = ExecSpace()) + : a(a_), b(b_) { Kokkos::parallel_for("Kokkos::ViewCopy-6D", - policy_type({0, 0, 0, 0, 0, 0}, + policy_type(space, {0, 0, 0, 0, 0, 0}, {a.extent(0), a.extent(1), a.extent(2), a.extent(3), a.extent(4), a.extent(5)}), *this); - ExecSpace().fence(); } KOKKOS_INLINE_FUNCTION @@ -705,14 +701,14 @@ struct ViewCopy> policy_type; - ViewCopy(const ViewTypeA& a_, const ViewTypeB& b_) : a(a_), b(b_) { - ExecSpace().fence(); + ViewCopy(const ViewTypeA& a_, const ViewTypeB& b_, + const ExecSpace space = ExecSpace()) + : a(a_), b(b_) { Kokkos::parallel_for("Kokkos::ViewCopy-7D", - policy_type({0, 0, 0, 0, 0, 0}, + policy_type(space, {0, 0, 0, 0, 0, 0}, {a.extent(0), a.extent(1), a.extent(3), a.extent(4), a.extent(5), a.extent(6)}), *this); - ExecSpace().fence(); } KOKKOS_INLINE_FUNCTION @@ -740,14 +736,14 @@ struct ViewCopy> policy_type; - ViewCopy(const ViewTypeA& a_, const ViewTypeB& b_) : a(a_), b(b_) { - ExecSpace().fence(); + ViewCopy(const ViewTypeA& a_, const ViewTypeB& b_, + const ExecSpace space = ExecSpace()) + : a(a_), b(b_) { Kokkos::parallel_for("Kokkos::ViewCopy-8D", - policy_type({0, 0, 0, 0, 0, 0}, + policy_type(space, {0, 0, 0, 0, 0, 0}, {a.extent(0), a.extent(1), a.extent(3), a.extent(5), a.extent(6), a.extent(7)}), *this); - ExecSpace().fence(); } KOKKOS_INLINE_FUNCTION @@ -767,6 +763,85 @@ struct ViewCopy +void view_copy(const ExecutionSpace& space, const DstType& dst, + const SrcType& src) { + typedef typename DstType::memory_space dst_memory_space; + typedef typename SrcType::memory_space src_memory_space; + + enum { + ExecCanAccessSrc = + Kokkos::Impl::SpaceAccessibility::accessible + }; + enum { + ExecCanAccessDst = + Kokkos::Impl::SpaceAccessibility::accessible + }; + + if (!(ExecCanAccessSrc && ExecCanAccessDst)) { + Kokkos::Impl::throw_runtime_exception( + "Kokkos::Impl::view_copy called with invalid execution space"); + } else { + // Figure out iteration order in case we need it + int64_t strides[DstType::Rank + 1]; + dst.stride(strides); + Kokkos::Iterate iterate; + if (Kokkos::is_layouttiled::value) { + iterate = Kokkos::layout_iterate_type_selector< + typename DstType::array_layout>::outer_iteration_pattern; + } else if (std::is_same::value) { + iterate = Kokkos::Iterate::Right; + } else if (std::is_same::value) { + iterate = Kokkos::Iterate::Left; + } else if (std::is_same::value) { + if (strides[0] > strides[DstType::Rank - 1]) + iterate = Kokkos::Iterate::Right; + else + iterate = Kokkos::Iterate::Left; + } else { + if (std::is_same::value) + iterate = Kokkos::Iterate::Right; + else + iterate = Kokkos::Iterate::Left; + } + + if ((dst.span() >= size_t(std::numeric_limits::max())) || + (src.span() >= size_t(std::numeric_limits::max()))) { + if (iterate == Kokkos::Iterate::Right) + Kokkos::Impl::ViewCopy< + typename DstType::uniform_runtime_nomemspace_type, + typename SrcType::uniform_runtime_const_nomemspace_type, + Kokkos::LayoutRight, ExecutionSpace, DstType::Rank, int64_t>( + dst, src, space); + else + Kokkos::Impl::ViewCopy< + typename DstType::uniform_runtime_nomemspace_type, + typename SrcType::uniform_runtime_const_nomemspace_type, + Kokkos::LayoutLeft, ExecutionSpace, DstType::Rank, int64_t>( + dst, src, space); + } else { + if (iterate == Kokkos::Iterate::Right) + Kokkos::Impl::ViewCopy< + typename DstType::uniform_runtime_nomemspace_type, + typename SrcType::uniform_runtime_const_nomemspace_type, + Kokkos::LayoutRight, ExecutionSpace, DstType::Rank, int>(dst, src, + space); + else + Kokkos::Impl::ViewCopy< + typename DstType::uniform_runtime_nomemspace_type, + typename SrcType::uniform_runtime_const_nomemspace_type, + Kokkos::LayoutLeft, ExecutionSpace, DstType::Rank, int>(dst, src, + space); + } + } +} + template void view_copy(const DstType& dst, const SrcType& src) { typedef typename DstType::execution_space dst_execution_space; @@ -1421,21 +1496,22 @@ inline void deep_copy( const View& dst, typename ViewTraits::const_value_type& value, typename std::enable_if::specialize, void>::value>::type* = 0) { + typename ViewTraits::specialize, void>::value>::type* = + nullptr) { typedef View ViewType; + using exec_space_type = typename ViewType::execution_space; #if defined(KOKKOS_ENABLE_PROFILING) if (Kokkos::Profiling::profileLibraryLoaded()) { Kokkos::Profiling::beginDeepCopy( - Kokkos::Profiling::SpaceHandle( - typename ViewType::memory_space().name()), + Kokkos::Profiling::SpaceHandle(ViewType::memory_space::name()), dst.label(), dst.data(), - Kokkos::Profiling::SpaceHandle(Kokkos::HostSpace().name()), "Scalar", + Kokkos::Profiling::SpaceHandle(Kokkos::HostSpace::name()), "Scalar", &value, dst.span() * sizeof(typename ViewType::value_type)); } #endif - if (dst.data() == NULL) { + if (dst.data() == nullptr) { Kokkos::fence(); #if defined(KOKKOS_ENABLE_PROFILING) if (Kokkos::Profiling::profileLibraryLoaded()) { @@ -1463,13 +1539,13 @@ inline void deep_copy( ViewTypeFlat dst_flat(dst.data(), dst.size()); if (dst.span() < static_cast(std::numeric_limits::max())) { - Kokkos::Impl::ViewFill(dst_flat, value); + Kokkos::Impl::ViewFill(dst_flat, value, + exec_space_type()); } else - Kokkos::Impl::ViewFill(dst_flat, value); + Kokkos::Impl::ViewFill(dst_flat, value, + exec_space_type()); Kokkos::fence(); #if defined(KOKKOS_ENABLE_PROFILING) if (Kokkos::Profiling::profileLibraryLoaded()) { @@ -1511,21 +1587,21 @@ inline void deep_copy( if (dst.span() > static_cast(std::numeric_limits::max())) { if (iterate == Kokkos::Iterate::Right) Kokkos::Impl::ViewFill(dst, value); + exec_space_type, ViewType::Rank, int64_t>( + dst, value, exec_space_type()); else Kokkos::Impl::ViewFill(dst, value); + exec_space_type, ViewType::Rank, int64_t>( + dst, value, exec_space_type()); } else { if (iterate == Kokkos::Iterate::Right) Kokkos::Impl::ViewFill(dst, value); + exec_space_type, ViewType::Rank, int>( + dst, value, exec_space_type()); else Kokkos::Impl::ViewFill(dst, value); + exec_space_type, ViewType::Rank, int>( + dst, value, exec_space_type()); } Kokkos::fence(); @@ -1542,7 +1618,8 @@ inline void deep_copy( typename ViewTraits::non_const_value_type& dst, const View& src, typename std::enable_if::specialize, void>::value>::type* = 0) { + typename ViewTraits::specialize, void>::value>::type* = + nullptr) { typedef ViewTraits src_traits; typedef typename src_traits::memory_space src_memory_space; @@ -1552,14 +1629,14 @@ inline void deep_copy( #if defined(KOKKOS_ENABLE_PROFILING) if (Kokkos::Profiling::profileLibraryLoaded()) { Kokkos::Profiling::beginDeepCopy( - Kokkos::Profiling::SpaceHandle(Kokkos::HostSpace().name()), "Scalar", - &dst, Kokkos::Profiling::SpaceHandle(src_memory_space().name()), + Kokkos::Profiling::SpaceHandle(Kokkos::HostSpace::name()), "Scalar", + &dst, Kokkos::Profiling::SpaceHandle(src_memory_space::name()), src.label(), src.data(), src.span() * sizeof(typename src_traits::value_type)); } #endif - if (src.data() == NULL) { + if (src.data() == nullptr) { Kokkos::fence(); #if defined(KOKKOS_ENABLE_PROFILING) if (Kokkos::Profiling::profileLibraryLoaded()) { @@ -1587,7 +1664,8 @@ inline void deep_copy( std::is_same::specialize, void>::value && std::is_same::specialize, void>::value && (unsigned(ViewTraits::rank) == unsigned(0) && - unsigned(ViewTraits::rank) == unsigned(0)))>::type* = 0) { + unsigned(ViewTraits::rank) == unsigned(0)))>::type* = + nullptr) { typedef View dst_type; typedef View src_type; @@ -1602,14 +1680,14 @@ inline void deep_copy( #if defined(KOKKOS_ENABLE_PROFILING) if (Kokkos::Profiling::profileLibraryLoaded()) { Kokkos::Profiling::beginDeepCopy( - Kokkos::Profiling::SpaceHandle(dst_memory_space().name()), dst.label(), - dst.data(), Kokkos::Profiling::SpaceHandle(src_memory_space().name()), + Kokkos::Profiling::SpaceHandle(dst_memory_space::name()), dst.label(), + dst.data(), Kokkos::Profiling::SpaceHandle(src_memory_space::name()), src.label(), src.data(), src.span() * sizeof(typename dst_type::value_type)); } #endif - if (dst.data() == NULL && src.data() == NULL) { + if (dst.data() == nullptr && src.data() == nullptr) { Kokkos::fence(); #if defined(KOKKOS_ENABLE_PROFILING) if (Kokkos::Profiling::profileLibraryLoaded()) { @@ -1643,7 +1721,7 @@ inline void deep_copy( std::is_same::specialize, void>::value && std::is_same::specialize, void>::value && (unsigned(ViewTraits::rank) != 0 || - unsigned(ViewTraits::rank) != 0))>::type* = 0) { + unsigned(ViewTraits::rank) != 0))>::type* = nullptr) { typedef View dst_type; typedef View src_type; typedef typename dst_type::execution_space dst_execution_space; @@ -1663,14 +1741,14 @@ inline void deep_copy( #if defined(KOKKOS_ENABLE_PROFILING) if (Kokkos::Profiling::profileLibraryLoaded()) { Kokkos::Profiling::beginDeepCopy( - Kokkos::Profiling::SpaceHandle(dst_memory_space().name()), dst.label(), - dst.data(), Kokkos::Profiling::SpaceHandle(src_memory_space().name()), + Kokkos::Profiling::SpaceHandle(dst_memory_space::name()), dst.label(), + dst.data(), Kokkos::Profiling::SpaceHandle(src_memory_space::name()), src.label(), src.data(), src.span() * sizeof(typename dst_type::value_type)); } #endif - if (dst.data() == NULL || src.data() == NULL) { + if (dst.data() == nullptr || src.data() == nullptr) { #ifdef KOKKOS_ENABLE_DEPRECATED_CODE // do nothing #else @@ -1874,7 +1952,7 @@ void KOKKOS_INLINE_FUNCTION local_deep_copy( const View& src, typename std::enable_if<(unsigned(ViewTraits::rank) == 1 && unsigned(ViewTraits::rank) == - 1)>::type* = 0) { + 1)>::type* = nullptr) { if (dst.data() == nullptr) { return; } @@ -1893,7 +1971,7 @@ void KOKKOS_INLINE_FUNCTION local_deep_copy( const View& src, typename std::enable_if<(unsigned(ViewTraits::rank) == 2 && unsigned(ViewTraits::rank) == - 2)>::type* = 0) { + 2)>::type* = nullptr) { if (dst.data() == nullptr) { return; } @@ -1921,7 +1999,7 @@ void KOKKOS_INLINE_FUNCTION local_deep_copy( const View& src, typename std::enable_if<(unsigned(ViewTraits::rank) == 3 && unsigned(ViewTraits::rank) == - 3)>::type* = 0) { + 3)>::type* = nullptr) { if (dst.data() == nullptr) { return; } @@ -1951,7 +2029,7 @@ void KOKKOS_INLINE_FUNCTION local_deep_copy( const View& src, typename std::enable_if<(unsigned(ViewTraits::rank) == 4 && unsigned(ViewTraits::rank) == - 4)>::type* = 0) { + 4)>::type* = nullptr) { if (dst.data() == nullptr) { return; } @@ -1984,7 +2062,7 @@ void KOKKOS_INLINE_FUNCTION local_deep_copy( const View& src, typename std::enable_if<(unsigned(ViewTraits::rank) == 5 && unsigned(ViewTraits::rank) == - 5)>::type* = 0) { + 5)>::type* = nullptr) { if (dst.data() == nullptr) { return; } @@ -2019,7 +2097,7 @@ void KOKKOS_INLINE_FUNCTION local_deep_copy( const View& src, typename std::enable_if<(unsigned(ViewTraits::rank) == 6 && unsigned(ViewTraits::rank) == - 6)>::type* = 0) { + 6)>::type* = nullptr) { if (dst.data() == nullptr) { return; } @@ -2056,7 +2134,7 @@ void KOKKOS_INLINE_FUNCTION local_deep_copy( const View& src, typename std::enable_if<(unsigned(ViewTraits::rank) == 7 && unsigned(ViewTraits::rank) == - 7)>::type* = 0) { + 7)>::type* = nullptr) { if (dst.data() == nullptr) { return; } @@ -2095,7 +2173,7 @@ void KOKKOS_INLINE_FUNCTION local_deep_copy( const View& dst, const View& src, typename std::enable_if<(unsigned(ViewTraits::rank) == 1 && unsigned(ViewTraits::rank) == - 1)>::type* = 0) { + 1)>::type* = nullptr) { if (dst.data() == nullptr) { return; } @@ -2112,7 +2190,7 @@ void KOKKOS_INLINE_FUNCTION local_deep_copy( const View& dst, const View& src, typename std::enable_if<(unsigned(ViewTraits::rank) == 2 && unsigned(ViewTraits::rank) == - 2)>::type* = 0) { + 2)>::type* = nullptr) { if (dst.data() == nullptr) { return; } @@ -2130,7 +2208,7 @@ void KOKKOS_INLINE_FUNCTION local_deep_copy( const View& dst, const View& src, typename std::enable_if<(unsigned(ViewTraits::rank) == 3 && unsigned(ViewTraits::rank) == - 3)>::type* = 0) { + 3)>::type* = nullptr) { if (dst.data() == nullptr) { return; } @@ -2150,7 +2228,7 @@ void KOKKOS_INLINE_FUNCTION local_deep_copy( const View& dst, const View& src, typename std::enable_if<(unsigned(ViewTraits::rank) == 4 && unsigned(ViewTraits::rank) == - 4)>::type* = 0) { + 4)>::type* = nullptr) { if (dst.data() == nullptr) { return; } @@ -2171,7 +2249,7 @@ void KOKKOS_INLINE_FUNCTION local_deep_copy( const View& dst, const View& src, typename std::enable_if<(unsigned(ViewTraits::rank) == 5 && unsigned(ViewTraits::rank) == - 5)>::type* = 0) { + 5)>::type* = nullptr) { if (dst.data() == nullptr) { return; } @@ -2193,7 +2271,7 @@ void KOKKOS_INLINE_FUNCTION local_deep_copy( const View& dst, const View& src, typename std::enable_if<(unsigned(ViewTraits::rank) == 6 && unsigned(ViewTraits::rank) == - 6)>::type* = 0) { + 6)>::type* = nullptr) { if (dst.data() == nullptr) { return; } @@ -2216,7 +2294,7 @@ void KOKKOS_INLINE_FUNCTION local_deep_copy( const View& dst, const View& src, typename std::enable_if<(unsigned(ViewTraits::rank) == 7 && unsigned(ViewTraits::rank) == - 7)>::type* = 0) { + 7)>::type* = nullptr) { if (dst.data() == nullptr) { return; } @@ -2260,7 +2338,7 @@ void KOKKOS_INLINE_FUNCTION local_deep_copy( const TeamType& team, const View& dst, typename ViewTraits::const_value_type& value, typename std::enable_if<(unsigned(ViewTraits::rank) == - 1)>::type* = 0) { + 1)>::type* = nullptr) { if (dst.data() == nullptr) { return; } @@ -2278,7 +2356,7 @@ void KOKKOS_INLINE_FUNCTION local_deep_copy( const TeamType& team, const View& dst, typename ViewTraits::const_value_type& value, typename std::enable_if<(unsigned(ViewTraits::rank) == - 2)>::type* = 0) { + 2)>::type* = nullptr) { if (dst.data() == nullptr) { return; } @@ -2305,7 +2383,7 @@ void KOKKOS_INLINE_FUNCTION local_deep_copy( const TeamType& team, const View& dst, typename ViewTraits::const_value_type& value, typename std::enable_if<(unsigned(ViewTraits::rank) == - 3)>::type* = 0) { + 3)>::type* = nullptr) { if (dst.data() == nullptr) { return; } @@ -2334,7 +2412,7 @@ void KOKKOS_INLINE_FUNCTION local_deep_copy( const TeamType& team, const View& dst, typename ViewTraits::const_value_type& value, typename std::enable_if<(unsigned(ViewTraits::rank) == - 4)>::type* = 0) { + 4)>::type* = nullptr) { if (dst.data() == nullptr) { return; } @@ -2366,7 +2444,7 @@ void KOKKOS_INLINE_FUNCTION local_deep_copy( const TeamType& team, const View& dst, typename ViewTraits::const_value_type& value, typename std::enable_if<(unsigned(ViewTraits::rank) == - 5)>::type* = 0) { + 5)>::type* = nullptr) { if (dst.data() == nullptr) { return; } @@ -2400,7 +2478,7 @@ void KOKKOS_INLINE_FUNCTION local_deep_copy( const TeamType& team, const View& dst, typename ViewTraits::const_value_type& value, typename std::enable_if<(unsigned(ViewTraits::rank) == - 6)>::type* = 0) { + 6)>::type* = nullptr) { if (dst.data() == nullptr) { return; } @@ -2436,7 +2514,7 @@ void KOKKOS_INLINE_FUNCTION local_deep_copy( const TeamType& team, const View& dst, typename ViewTraits::const_value_type& value, typename std::enable_if<(unsigned(ViewTraits::rank) == - 7)>::type* = 0) { + 7)>::type* = nullptr) { if (dst.data() == nullptr) { return; } @@ -2475,7 +2553,7 @@ void KOKKOS_INLINE_FUNCTION local_deep_copy( const View& dst, typename ViewTraits::const_value_type& value, typename std::enable_if<(unsigned(ViewTraits::rank) == - 1)>::type* = 0) { + 1)>::type* = nullptr) { if (dst.data() == nullptr) { return; } @@ -2492,7 +2570,7 @@ void KOKKOS_INLINE_FUNCTION local_deep_copy( const View& dst, typename ViewTraits::const_value_type& value, typename std::enable_if<(unsigned(ViewTraits::rank) == - 2)>::type* = 0) { + 2)>::type* = nullptr) { if (dst.data() == nullptr) { return; } @@ -2510,7 +2588,7 @@ void KOKKOS_INLINE_FUNCTION local_deep_copy( const View& dst, typename ViewTraits::const_value_type& value, typename std::enable_if<(unsigned(ViewTraits::rank) == - 3)>::type* = 0) { + 3)>::type* = nullptr) { if (dst.data() == nullptr) { return; } @@ -2529,7 +2607,7 @@ void KOKKOS_INLINE_FUNCTION local_deep_copy( const View& dst, typename ViewTraits::const_value_type& value, typename std::enable_if<(unsigned(ViewTraits::rank) == - 4)>::type* = 0) { + 4)>::type* = nullptr) { if (dst.data() == nullptr) { return; } @@ -2550,7 +2628,7 @@ void KOKKOS_INLINE_FUNCTION local_deep_copy( const View& dst, typename ViewTraits::const_value_type& value, typename std::enable_if<(unsigned(ViewTraits::rank) == - 5)>::type* = 0) { + 5)>::type* = nullptr) { if (dst.data() == nullptr) { return; } @@ -2572,7 +2650,7 @@ void KOKKOS_INLINE_FUNCTION local_deep_copy( const View& dst, typename ViewTraits::const_value_type& value, typename std::enable_if<(unsigned(ViewTraits::rank) == - 6)>::type* = 0) { + 6)>::type* = nullptr) { if (dst.data() == nullptr) { return; } @@ -2595,7 +2673,7 @@ void KOKKOS_INLINE_FUNCTION local_deep_copy( const View& dst, typename ViewTraits::const_value_type& value, typename std::enable_if<(unsigned(ViewTraits::rank) == - 7)>::type* = 0) { + 7)>::type* = nullptr) { if (dst.data() == nullptr) { return; } @@ -2621,33 +2699,88 @@ void KOKKOS_INLINE_FUNCTION local_deep_copy( namespace Kokkos { -/** \brief Deep copy a value from Host memory into a view. */ +/** \brief Deep copy a value from Host memory into a view. ExecSpace can access + * dst */ template inline void deep_copy( - const ExecSpace&, const View& dst, + const ExecSpace& space, const View& dst, typename ViewTraits::const_value_type& value, typename std::enable_if< Kokkos::Impl::is_execution_space::value && - std::is_same::specialize, - void>::value>::type* = 0) { + std::is_same::specialize, void>::value && + Kokkos::Impl::SpaceAccessibility< + ExecSpace, + typename ViewTraits::memory_space>::accessible>::type* = + nullptr) { typedef ViewTraits dst_traits; + static_assert(std::is_same::value, + "deep_copy requires non-const type"); +#if defined(KOKKOS_ENABLE_PROFILING) typedef typename dst_traits::memory_space dst_memory_space; + if (Kokkos::Profiling::profileLibraryLoaded()) { + Kokkos::Profiling::beginDeepCopy( + Kokkos::Profiling::SpaceHandle(dst_memory_space::name()), dst.label(), + dst.data(), Kokkos::Profiling::SpaceHandle(Kokkos::HostSpace::name()), + "(none)", &value, dst.span() * sizeof(typename dst_traits::value_type)); + } +#endif + if (dst.data() == nullptr) { + space.fence(); + } else { + using ViewTypeUniform = typename std::conditional< + View::Rank == 0, + typename View::uniform_runtime_type, + typename View::uniform_runtime_nomemspace_type>::type; + Kokkos::Impl::ViewFill(dst, value, space); + } +#if defined(KOKKOS_ENABLE_PROFILING) + if (Kokkos::Profiling::profileLibraryLoaded()) { + Kokkos::Profiling::endDeepCopy(); + } +#endif +} + +/** \brief Deep copy a value from Host memory into a view. ExecSpace can not + * access dst */ +template +inline void deep_copy( + const ExecSpace& space, const View& dst, + typename ViewTraits::const_value_type& value, + typename std::enable_if< + Kokkos::Impl::is_execution_space::value && + std::is_same::specialize, void>::value && + !Kokkos::Impl::SpaceAccessibility< + ExecSpace, + typename ViewTraits::memory_space>::accessible>::type* = + nullptr) { + typedef ViewTraits dst_traits; static_assert(std::is_same::value, "deep_copy requires non-const type"); #if defined(KOKKOS_ENABLE_PROFILING) + typedef typename dst_traits::memory_space dst_memory_space; if (Kokkos::Profiling::profileLibraryLoaded()) { Kokkos::Profiling::beginDeepCopy( - Kokkos::Profiling::SpaceHandle(dst_memory_space().name()), dst.label(), - dst.data(), Kokkos::Profiling::SpaceHandle(Kokkos::HostSpace().name()), + Kokkos::Profiling::SpaceHandle(dst_memory_space::name()), dst.label(), + dst.data(), Kokkos::Profiling::SpaceHandle(Kokkos::HostSpace::name()), "(none)", &value, dst.span() * sizeof(typename dst_traits::value_type)); } #endif - ExecSpace().fence(); - typedef - typename View::uniform_runtime_nomemspace_type ViewTypeUniform; - Kokkos::Impl::ViewFill(dst, value); - ExecSpace().fence(); + if (dst.data() == nullptr) { + space.fence(); + } else { + space.fence(); + using ViewTypeUniform = typename std::conditional< + View::Rank == 0, + typename View::uniform_runtime_type, + typename View::uniform_runtime_nomemspace_type>::type; + using fill_exec_space = typename dst_traits::memory_space::execution_space; + Kokkos::Impl::ViewFill(dst, value, fill_exec_space()); + fill_exec_space().fence(); + } #if defined(KOKKOS_ENABLE_PROFILING) if (Kokkos::Profiling::profileLibraryLoaded()) { Kokkos::Profiling::endDeepCopy(); @@ -2672,13 +2805,13 @@ inline void deep_copy( #if defined(KOKKOS_ENABLE_PROFILING) if (Kokkos::Profiling::profileLibraryLoaded()) { Kokkos::Profiling::beginDeepCopy( - Kokkos::Profiling::SpaceHandle(Kokkos::HostSpace().name()), "(none)", - &dst, Kokkos::Profiling::SpaceHandle(src_memory_space().name()), + Kokkos::Profiling::SpaceHandle(Kokkos::HostSpace::name()), "(none)", + &dst, Kokkos::Profiling::SpaceHandle(src_memory_space::name()), src.label(), src.data(), sizeof(ST)); } #endif - if (src.data() == NULL) { + if (src.data() == nullptr) { exec_space.fence(); #if defined(KOKKOS_ENABLE_PROFILING) if (Kokkos::Profiling::profileLibraryLoaded()) { @@ -2721,13 +2854,13 @@ inline void deep_copy( #if defined(KOKKOS_ENABLE_PROFILING) if (Kokkos::Profiling::profileLibraryLoaded()) { Kokkos::Profiling::beginDeepCopy( - Kokkos::Profiling::SpaceHandle(dst_memory_space().name()), dst.label(), - dst.data(), Kokkos::Profiling::SpaceHandle(src_memory_space().name()), + Kokkos::Profiling::SpaceHandle(dst_memory_space::name()), dst.label(), + dst.data(), Kokkos::Profiling::SpaceHandle(src_memory_space::name()), src.label(), src.data(), sizeof(DT)); } #endif - if (dst.data() == NULL && src.data() == NULL) { + if (dst.data() == nullptr && src.data() == nullptr) { exec_space.fence(); #if defined(KOKKOS_ENABLE_PROFILING) if (Kokkos::Profiling::profileLibraryLoaded()) { @@ -2737,13 +2870,11 @@ inline void deep_copy( return; } - exec_space.fence(); if (dst.data() != src.data()) { Kokkos::Impl::DeepCopy( exec_space, dst.data(), src.data(), sizeof(typename dst_traits::value_type)); } - exec_space.fence(); #if defined(KOKKOS_ENABLE_PROFILING) if (Kokkos::Profiling::profileLibraryLoaded()) { Kokkos::Profiling::endDeepCopy(); @@ -2764,7 +2895,7 @@ inline void deep_copy( std::is_same::specialize, void>::value && std::is_same::specialize, void>::value && (unsigned(ViewTraits::rank) != 0 || - unsigned(ViewTraits::rank) != 0))>::type* = 0) { + unsigned(ViewTraits::rank) != 0))>::type* = nullptr) { typedef View dst_type; typedef View src_type; @@ -2785,13 +2916,21 @@ inline void deep_copy( #if defined(KOKKOS_ENABLE_PROFILING) if (Kokkos::Profiling::profileLibraryLoaded()) { Kokkos::Profiling::beginDeepCopy( - Kokkos::Profiling::SpaceHandle(dst_memory_space().name()), dst.label(), - dst.data(), Kokkos::Profiling::SpaceHandle(src_memory_space().name()), + Kokkos::Profiling::SpaceHandle(dst_memory_space::name()), dst.label(), + dst.data(), Kokkos::Profiling::SpaceHandle(src_memory_space::name()), src.label(), src.data(), dst.span() * sizeof(dst_value_type)); } #endif - if (dst.data() == NULL || src.data() == NULL) { + dst_value_type* dst_start = dst.data(); + dst_value_type* dst_end = dst.data() + dst.span(); + src_value_type* src_start = src.data(); + src_value_type* src_end = src.data() + src.span(); + + // Early dropout if identical range + if ((dst_start == nullptr || src_start == nullptr) || + ((std::ptrdiff_t(dst_start) == std::ptrdiff_t(src_start)) && + (std::ptrdiff_t(dst_end) == std::ptrdiff_t(src_end)))) { #ifdef KOKKOS_ENABLE_DEPRECATED_CODE // do nothing #else @@ -2823,7 +2962,6 @@ inline void deep_copy( Kokkos::Impl::throw_runtime_exception(message); } #endif - exec_space.fence(); #if defined(KOKKOS_ENABLE_PROFILING) if (Kokkos::Profiling::profileLibraryLoaded()) { Kokkos::Profiling::endDeepCopy(); @@ -2851,11 +2989,7 @@ inline void deep_copy( dst_memory_space>::accessible }; - // Checking for Overlapping Views. - dst_value_type* dst_start = dst.data(); - dst_value_type* dst_end = dst.data() + dst.span(); - src_value_type* src_start = src.data(); - src_value_type* src_end = src.data() + src.span(); + // Error out for non-identical overlapping views. if ((((std::ptrdiff_t)dst_start < (std::ptrdiff_t)src_end) && ((std::ptrdiff_t)dst_end > (std::ptrdiff_t)src_start)) && ((dst.span_is_contiguous() && src.span_is_contiguous()))) { @@ -2881,23 +3015,27 @@ inline void deep_copy( (src.extent(4) != dst.extent(4)) || (src.extent(5) != dst.extent(5)) || (src.extent(6) != dst.extent(6)) || (src.extent(7) != dst.extent(7))) { #ifdef KOKKOS_ENABLE_DEPRECATED_CODE - exec_space.fence(); if (ExecCanAccessSrcDst) { Kokkos::Impl::ViewRemap(dst, src); + exec_space.fence(); } else if (DstExecCanAccessSrc) { // Copying data between views in accessible memory spaces and either // non-contiguous or incompatible shape. - Kokkos::Impl::ViewRemap(dst, src); + exec_space.fence(); + Kokkos::Impl::ViewRemap(dst, + src); + dst_execution_space().fence(); } else if (SrcExecCanAccessDst) { // Copying data between views in accessible memory spaces and either // non-contiguous or incompatible shape. + exec_space.fence(); Kokkos::Impl::ViewRemap(dst, src); + src_execution_space().fence(); } else { Kokkos::Impl::throw_runtime_exception( "deep_copy given views that would require a temporary allocation"); } - exec_space.fence(); #if defined(KOKKOS_ENABLE_PROFILING) if (Kokkos::Profiling::profileLibraryLoaded()) { Kokkos::Profiling::endDeepCopy(); @@ -2946,16 +3084,26 @@ inline void deep_copy( ((dst_type::rank < 7) || (dst.stride_6() == src.stride_6())) && ((dst_type::rank < 8) || (dst.stride_7() == src.stride_7()))) { const size_t nbytes = sizeof(typename dst_type::value_type) * dst.span(); - exec_space.fence(); if ((void*)dst.data() != (void*)src.data()) { Kokkos::Impl::DeepCopy( exec_space, dst.data(), src.data(), nbytes); } - exec_space.fence(); } else { - exec_space.fence(); - Impl::view_copy(dst, src); - exec_space.fence(); + // Copying data between views in accessible memory spaces and either + // non-contiguous or incompatible shape. + if (ExecCanAccessSrcDst) { + Impl::view_copy(exec_space, dst, src); + } else if (DstExecCanAccessSrc || SrcExecCanAccessDst) { + using cpy_exec_space = + typename std::conditional::type; + exec_space.fence(); + Impl::view_copy(cpy_exec_space(), dst, src); + cpy_exec_space().fence(); + } else { + Kokkos::Impl::throw_runtime_exception( + "deep_copy given views that would require a temporary allocation"); + } } #if defined(KOKKOS_ENABLE_PROFILING) if (Kokkos::Profiling::profileLibraryLoaded()) { @@ -3285,7 +3433,7 @@ inline typename Kokkos::View::HostMirror create_mirror( typename std::enable_if< std::is_same::specialize, void>::value && !std::is_same::array_layout, - Kokkos::LayoutStride>::value>::type* = 0) { + Kokkos::LayoutStride>::value>::type* = nullptr) { typedef View src_type; typedef typename src_type::HostMirror dst_type; @@ -3321,7 +3469,7 @@ inline typename Kokkos::View::HostMirror create_mirror( typename std::enable_if< std::is_same::specialize, void>::value && std::is_same::array_layout, - Kokkos::LayoutStride>::value>::type* = 0) { + Kokkos::LayoutStride>::value>::type* = nullptr) { typedef View src_type; typedef typename src_type::HostMirror dst_type; @@ -3353,7 +3501,8 @@ template typename Impl::MirrorType::view_type create_mirror( const Space&, const Kokkos::View& src, typename std::enable_if::specialize, void>::value>::type* = 0) { + typename ViewTraits::specialize, void>::value>::type* = + nullptr) { return typename Impl::MirrorType::view_type(src.label(), src.layout()); } @@ -3367,7 +3516,7 @@ inline typename Kokkos::View::HostMirror create_mirror_view( typename Kokkos::View::HostMirror::memory_space>::value && std::is_same::data_type, typename Kokkos::View::HostMirror::data_type>:: - value)>::type* = 0) { + value)>::type* = nullptr) { return src; } @@ -3389,7 +3538,8 @@ template typename Impl::MirrorViewType::view_type create_mirror_view( const Space&, const Kokkos::View& src, typename std::enable_if< - Impl::MirrorViewType::is_same_memspace>::type* = 0) { + Impl::MirrorViewType::is_same_memspace>::type* = + nullptr) { return src; } @@ -3411,8 +3561,10 @@ create_mirror_view_and_copy( const Space&, const Kokkos::View& src, std::string const& name = "", typename std::enable_if< - Impl::MirrorViewType::is_same_memspace>::type* = 0) { + Impl::MirrorViewType::is_same_memspace>::type* = + nullptr) { (void)name; + fence(); // same behavior as deep_copy(src, src) return src; } @@ -3427,7 +3579,8 @@ create_mirror_view_and_copy( !Impl::MirrorViewType::is_same_memspace>::type* = 0) { using Mirror = typename Impl::MirrorViewType::view_type; std::string label = name.empty() ? src.label() : name; - auto mirror = Mirror(ViewAllocateWithoutInitializing(label), src.layout()); + auto mirror = typename Mirror::non_const_type{ + ViewAllocateWithoutInitializing(label), src.layout()}; deep_copy(mirror, src); return mirror; } @@ -3439,7 +3592,8 @@ typename Impl::MirrorViewType::view_type create_mirror_view( const Space&, const Kokkos::View& src, Kokkos::Impl::WithoutInitializing_t, typename std::enable_if< - Impl::MirrorViewType::is_same_memspace>::type* = 0) { + Impl::MirrorViewType::is_same_memspace>::type* = + nullptr) { return src; } diff --git a/lib/kokkos/core/src/Kokkos_Core.hpp b/lib/kokkos/core/src/Kokkos_Core.hpp index 7661efeca7954ecefb441bdcb2fb5127f21b628b..8392f0f3e56677fc3e7d7cc2d30c60973c2fb131 100644 --- a/lib/kokkos/core/src/Kokkos_Core.hpp +++ b/lib/kokkos/core/src/Kokkos_Core.hpp @@ -58,13 +58,9 @@ #include #endif -//#if defined( KOKKOS_ENABLE_OPENMPTARGET ) +#if defined(KOKKOS_ENABLE_OPENMPTARGET) #include #include -//#endif - -#if defined(KOKKOS_ENABLE_QTHREADS) -#include #endif #if defined(KOKKOS_ENABLE_HPX) @@ -82,6 +78,9 @@ #if defined(KOKKOS_ENABLE_ROCM) #include #endif +#if defined(KOKKOS_ENABLE_HIP) +#include +#endif #include #include @@ -93,9 +92,7 @@ #include #include #include - #include - #include #include #include @@ -123,7 +120,15 @@ struct InitArguments { void initialize(int& narg, char* arg[]); -void initialize(const InitArguments& args = InitArguments()); +void initialize(InitArguments args = InitArguments()); + +namespace Impl { + +void pre_initialize(const InitArguments& args); + +void post_initialize(const InitArguments& args); + +} // namespace Impl bool is_initialized() noexcept; diff --git a/lib/kokkos/core/src/Kokkos_Core_fwd.hpp b/lib/kokkos/core/src/Kokkos_Core_fwd.hpp index 5b89dc51ca47b81d149eafefc60c9dcf75369dfc..4828a95775188938710cb4fd5f2ee0511b65f90f 100644 --- a/lib/kokkos/core/src/Kokkos_Core_fwd.hpp +++ b/lib/kokkos/core/src/Kokkos_Core_fwd.hpp @@ -99,10 +99,6 @@ class HBWSpace; /// Memory space for hbw_malloc from memkind (e.g. for KNL class Serial; ///< Execution space main process on CPU. #endif -#if defined(KOKKOS_ENABLE_QTHREADS) -class Qthreads; ///< Execution space with Qthreads back-end. -#endif - #if defined(KOKKOS_ENABLE_HPX) namespace Experimental { class HPX; ///< Execution space with HPX back-end. @@ -124,13 +120,6 @@ class OpenMPTargetSpace; } // namespace Experimental #endif -#if defined(KOKKOS_ENABLE_CUDA) -class CudaSpace; ///< Memory space on Cuda GPU -class CudaUVMSpace; ///< Memory space on Cuda GPU with UVM -class CudaHostPinnedSpace; ///< Memory space on Host accessible to Cuda GPU -class Cuda; ///< Execution space for Cuda GPU -#endif - #if defined(KOKKOS_ENABLE_ROCM) namespace Experimental { class ROCmSpace; ///< Memory space on ROCm GPU @@ -138,11 +127,20 @@ class ROCm; ///< Execution space for ROCm GPU } // namespace Experimental #endif +#if defined(KOKKOS_ENABLE_HIP) +namespace Experimental { +class HIPSpace; ///< Memory space on HIP GPU +class HIP; ///< Execution space for HIP GPU +} // namespace Experimental +#endif + template struct Device; } // namespace Kokkos +#include "Cuda/Kokkos_Cuda_fwd.hpp" + //---------------------------------------------------------------------------- // Set the default execution space. @@ -157,44 +155,42 @@ namespace Kokkos { typedef Cuda DefaultExecutionSpace; #elif defined(KOKKOS_ENABLE_DEFAULT_DEVICE_TYPE_OPENMPTARGET) typedef Experimental::OpenMPTarget DefaultExecutionSpace; +#elif defined(KOKKOS_ENABLE_DEFAULT_DEVICE_TYPE_HIP) +typedef Experimental::HIP DefaultExecutionSpace; #elif defined(KOKKOS_ENABLE_DEFAULT_DEVICE_TYPE_ROCM) typedef Experimental::ROCm DefaultExecutionSpace; #elif defined(KOKKOS_ENABLE_DEFAULT_DEVICE_TYPE_OPENMP) typedef OpenMP DefaultExecutionSpace; #elif defined(KOKKOS_ENABLE_DEFAULT_DEVICE_TYPE_THREADS) typedef Threads DefaultExecutionSpace; -//#elif defined( KOKKOS_ENABLE_DEFAULT_DEVICE_TYPE_QTHREADS ) -// typedef Qthreads DefaultExecutionSpace; #elif defined(KOKKOS_ENABLE_DEFAULT_DEVICE_TYPE_HPX) typedef Kokkos::Experimental::HPX DefaultExecutionSpace; #elif defined(KOKKOS_ENABLE_DEFAULT_DEVICE_TYPE_SERIAL) typedef Serial DefaultExecutionSpace; #else #error \ - "At least one of the following execution spaces must be defined in order to use Kokkos: Kokkos::Cuda, Kokkos::Experimental::OpenMPTarget, Kokkos::OpenMP, Kokkos::Threads, Kokkos::Qthreads, or Kokkos::Serial." + "At least one of the following execution spaces must be defined in order to use Kokkos: Kokkos::Cuda, Kokkos::Experimental::HIP, Kokkos::Experimental::OpenMPTarget, Kokkos::OpenMP, Kokkos::Threads, Kokkos::Experimental::HPX, or Kokkos::Serial." #endif #if defined(KOKKOS_ENABLE_DEFAULT_DEVICE_TYPE_OPENMP) typedef OpenMP DefaultHostExecutionSpace; #elif defined(KOKKOS_ENABLE_DEFAULT_DEVICE_TYPE_THREADS) typedef Threads DefaultHostExecutionSpace; -//#elif defined( KOKKOS_ENABLE_DEFAULT_DEVICE_TYPE_QTHREADS ) -// typedef Qthreads DefaultHostExecutionSpace; +#elif defined(KOKKOS_ENABLE_DEFAULT_DEVICE_TYPE_HPX) +typedef Kokkos::Experimental::HPX DefaultHostExecutionSpace; #elif defined(KOKKOS_ENABLE_DEFAULT_DEVICE_TYPE_SERIAL) typedef Serial DefaultHostExecutionSpace; #elif defined(KOKKOS_ENABLE_OPENMP) typedef OpenMP DefaultHostExecutionSpace; #elif defined(KOKKOS_ENABLE_THREADS) typedef Threads DefaultHostExecutionSpace; -//#elif defined( KOKKOS_ENABLE_QTHREADS ) -// typedef Qthreads DefaultHostExecutionSpace; #elif defined(KOKKOS_ENABLE_HPX) typedef Kokkos::Experimental::HPX DefaultHostExecutionSpace; #elif defined(KOKKOS_ENABLE_SERIAL) typedef Serial DefaultHostExecutionSpace; #else #error \ - "At least one of the following execution spaces must be defined in order to use Kokkos: Kokkos::OpenMP, Kokkos::Threads, Kokkos::Qthreads, or Kokkos::Serial." + "At least one of the following execution spaces must be defined in order to use Kokkos: Kokkos::OpenMP, Kokkos::Threads, Kokkos::Experimental::HPX, or Kokkos::Serial." #endif } // namespace Kokkos @@ -213,6 +209,8 @@ namespace Impl { typedef Kokkos::CudaSpace ActiveExecutionMemorySpace; #elif defined(KOKKOS_ACTIVE_EXECUTION_MEMORY_SPACE_ROCM_GPU) typedef Kokkos::HostSpace ActiveExecutionMemorySpace; +#elif defined(KOKKOS_ACTIVE_EXECUTION_MEMORY_SPACE_HIP_GPU) +typedef Kokkos::Experimental::HIPSpace ActiveExecutionMemorySpace; #elif defined(KOKKOS_ACTIVE_EXECUTION_MEMORY_SPACE_HOST) typedef Kokkos::HostSpace ActiveExecutionMemorySpace; #else diff --git a/lib/kokkos/core/src/Kokkos_Crs.hpp b/lib/kokkos/core/src/Kokkos_Crs.hpp index f57863263b6120ca2ef11bd6c4eddc80d29b79e1..3725ba2604ad40e7912b6afea92ccb629206554e 100644 --- a/lib/kokkos/core/src/Kokkos_Crs.hpp +++ b/lib/kokkos/core/src/Kokkos_Crs.hpp @@ -105,12 +105,12 @@ class Crs { /* * Default Constructors, operators and destructor */ - KOKKOS_FUNCTION Crs() = default; - KOKKOS_FUNCTION Crs(Crs const&) = default; - KOKKOS_FUNCTION Crs(Crs&&) = default; - KOKKOS_FUNCTION Crs& operator=(Crs const&) = default; - KOKKOS_FUNCTION Crs& operator=(Crs&&) = default; - KOKKOS_FUNCTION ~Crs() = default; + KOKKOS_DEFAULTED_FUNCTION Crs() = default; + KOKKOS_DEFAULTED_FUNCTION Crs(Crs const&) = default; + KOKKOS_DEFAULTED_FUNCTION Crs(Crs&&) = default; + KOKKOS_DEFAULTED_FUNCTION Crs& operator=(Crs const&) = default; + KOKKOS_DEFAULTED_FUNCTION Crs& operator=(Crs&&) = default; + KOKKOS_DEFAULTED_FUNCTION ~Crs() = default; /** \brief Assign to a view of the rhs array. * If the old view is the last view @@ -313,7 +313,7 @@ struct CountAndFillBase; template struct CountAndFillBase { - using data_type = typename CrsType::size_type; + using data_type = typename CrsType::data_type; using size_type = typename CrsType::size_type; using row_map_type = typename CrsType::row_map_type; using counts_type = row_map_type; @@ -343,7 +343,7 @@ struct CountAndFillBase { #if defined(KOKKOS_ENABLE_CUDA) template struct CountAndFillBase { - using data_type = typename CrsType::size_type; + using data_type = typename CrsType::data_type; using size_type = typename CrsType::size_type; using row_map_type = typename CrsType::row_map_type; using counts_type = row_map_type; diff --git a/lib/kokkos/core/src/Kokkos_Cuda.hpp b/lib/kokkos/core/src/Kokkos_Cuda.hpp index ad62ecf38357c2a8de9d2e99fb52f73ea0e770f3..ed51e95778f93ab4ce0e835a9ca5afba0939ea7a 100644 --- a/lib/kokkos/core/src/Kokkos_Cuda.hpp +++ b/lib/kokkos/core/src/Kokkos_Cuda.hpp @@ -199,8 +199,7 @@ class Cuda { //-------------------------------------------------- //! \name Cuda space instances - KOKKOS_INLINE_FUNCTION - ~Cuda() {} + ~Cuda() = default; Cuda(); @@ -258,6 +257,7 @@ class Cuda { cudaStream_t cuda_stream() const; int cuda_device() const; + const cudaDeviceProp& cuda_device_prop() const; //@} //-------------------------------------------------------------------------- @@ -267,11 +267,21 @@ class Cuda { inline Impl::CudaInternal* impl_internal_space_instance() const { return m_space_instance; } + uint32_t impl_instance_id() const noexcept { return 0; } private: Impl::CudaInternal* m_space_instance; }; +namespace Profiling { +namespace Experimental { +template <> +struct DeviceTypeTraits { + /// \brief An ID to differentiate (for example) Serial from OpenMP in Tooling + static constexpr DeviceType id = DeviceType::Cuda; +}; +} // namespace Experimental +} // namespace Profiling } // namespace Kokkos /*--------------------------------------------------------------------------*/ diff --git a/lib/kokkos/core/src/Kokkos_CudaSpace.hpp b/lib/kokkos/core/src/Kokkos_CudaSpace.hpp index 34db47f1c0096aac753b2f9b3c9af66740377bf6..7db5dd9561ece7679b7cf5b24bd381b143e7a6f9 100644 --- a/lib/kokkos/core/src/Kokkos_CudaSpace.hpp +++ b/lib/kokkos/core/src/Kokkos_CudaSpace.hpp @@ -56,6 +56,8 @@ #include +#include + #include #ifdef KOKKOS_IMPL_DEBUG_CUDA_PIN_UVM_TO_HOST @@ -166,7 +168,7 @@ class CudaUVMSpace { /*--------------------------------*/ /** \brief CudaUVMSpace specific routine */ - static int number_of_allocations(); + KOKKOS_DEPRECATED static int number_of_allocations(); /*--------------------------------*/ @@ -401,6 +403,126 @@ struct DeepCopy { DeepCopy(const Cuda&, void* dst, const void* src, size_t); }; +template <> +struct DeepCopy { + DeepCopy(void* dst, const void* src, size_t n) { + (void)DeepCopy(dst, src, n); + } + DeepCopy(const Cuda& instance, void* dst, const void* src, size_t n) { + (void)DeepCopy(instance, dst, src, n); + } +}; + +template <> +struct DeepCopy { + DeepCopy(void* dst, const void* src, size_t n) { + (void)DeepCopy(dst, src, n); + } + DeepCopy(const Cuda& instance, void* dst, const void* src, size_t n) { + (void)DeepCopy(instance, dst, src, n); + } +}; + +template <> +struct DeepCopy { + DeepCopy(void* dst, const void* src, size_t n) { + (void)DeepCopy(dst, src, n); + } + DeepCopy(const Cuda& instance, void* dst, const void* src, size_t n) { + (void)DeepCopy(instance, dst, src, n); + } +}; + +template <> +struct DeepCopy { + DeepCopy(void* dst, const void* src, size_t n) { + (void)DeepCopy(dst, src, n); + } + DeepCopy(const Cuda& instance, void* dst, const void* src, size_t n) { + (void)DeepCopy(instance, dst, src, n); + } +}; + +template <> +struct DeepCopy { + DeepCopy(void* dst, const void* src, size_t n) { + (void)DeepCopy(dst, src, n); + } + DeepCopy(const Cuda& instance, void* dst, const void* src, size_t n) { + (void)DeepCopy(instance, dst, src, n); + } +}; + +template <> +struct DeepCopy { + DeepCopy(void* dst, const void* src, size_t n) { + (void)DeepCopy(dst, src, n); + } + DeepCopy(const Cuda& instance, void* dst, const void* src, size_t n) { + (void)DeepCopy(instance, dst, src, n); + } +}; + +template <> +struct DeepCopy { + DeepCopy(void* dst, const void* src, size_t n) { + (void)DeepCopy(dst, src, n); + } + DeepCopy(const Cuda& instance, void* dst, const void* src, size_t n) { + (void)DeepCopy(instance, dst, src, n); + } +}; + +template <> +struct DeepCopy { + DeepCopy(void* dst, const void* src, size_t n) { + (void)DeepCopy(dst, src, n); + } + DeepCopy(const Cuda& instance, void* dst, const void* src, size_t n) { + (void)DeepCopy(instance, dst, src, n); + } +}; + +template <> +struct DeepCopy { + DeepCopy(void* dst, const void* src, size_t n) { + (void)DeepCopy(dst, src, n); + } + DeepCopy(const Cuda& instance, void* dst, const void* src, size_t n) { + (void)DeepCopy(instance, dst, src, n); + } +}; + +template <> +struct DeepCopy { + DeepCopy(void* dst, const void* src, size_t n) { + (void)DeepCopy(dst, src, n); + } + DeepCopy(const Cuda& instance, void* dst, const void* src, size_t n) { + (void)DeepCopy(instance, dst, src, n); + } +}; + +template <> +struct DeepCopy { + DeepCopy(void* dst, const void* src, size_t n) { + (void)DeepCopy(dst, src, n); + } + DeepCopy(const Cuda& instance, void* dst, const void* src, size_t n) { + (void)DeepCopy(instance, dst, src, n); + } +}; + +template <> +struct DeepCopy { + DeepCopy(void* dst, const void* src, size_t n) { + (void)DeepCopy(dst, src, n); + } + DeepCopy(const Cuda& instance, void* dst, const void* src, size_t n) { + (void)DeepCopy(instance, dst, src, n); + } +}; + template struct DeepCopy { inline DeepCopy(void* dst, const void* src, size_t n) { @@ -640,8 +762,8 @@ struct VerifyExecutionCanAccessMemorySpace struct VerifyExecutionCanAccessMemorySpace< - typename enable_if::value, - Kokkos::CudaSpace>::type, + typename std::enable_if::value, + Kokkos::CudaSpace>::type, OtherSpace> { enum { value = false }; KOKKOS_INLINE_FUNCTION static void verify(void) { diff --git a/lib/kokkos/core/src/Kokkos_ExecPolicy.hpp b/lib/kokkos/core/src/Kokkos_ExecPolicy.hpp index bf3a134b64b3e89d9e8f3a1650cd1cb2ef7c1794..11910138d3322a8cfad4266e2323bcfbd0d8dcc7 100644 --- a/lib/kokkos/core/src/Kokkos_ExecPolicy.hpp +++ b/lib/kokkos/core/src/Kokkos_ExecPolicy.hpp @@ -193,6 +193,7 @@ class RangePolicy : public Impl::PolicyTraits { inline void set(const ChunkSize& chunksize, Args... args) { m_granularity = chunksize.value; m_granularity_mask = m_granularity - 1; + set(args...); } public: @@ -210,8 +211,8 @@ class RangePolicy : public Impl::PolicyTraits { private: /** \brief finalize chunk_size if it was set to AUTO*/ inline void set_auto_chunk_size() { - typename traits::index_type concurrency = - traits::execution_space::concurrency(); + int64_t concurrency = + static_cast(traits::execution_space::concurrency()); if (concurrency == 0) concurrency = 1; if (m_granularity > 0) { @@ -219,12 +220,14 @@ class RangePolicy : public Impl::PolicyTraits { Kokkos::abort("RangePolicy blocking granularity must be power of two"); } - member_type new_chunk_size = 1; - while (new_chunk_size * 100 * concurrency < m_end - m_begin) + int64_t new_chunk_size = 1; + while (new_chunk_size * 100 * concurrency < + static_cast(m_end - m_begin)) new_chunk_size *= 2; if (new_chunk_size < 128) { new_chunk_size = 1; - while ((new_chunk_size * 40 * concurrency < m_end - m_begin) && + while ((new_chunk_size * 40 * concurrency < + static_cast(m_end - m_begin)) && (new_chunk_size < 128)) new_chunk_size *= 2; } @@ -483,7 +486,6 @@ struct ScratchRequest { level = level_; per_team = 0; per_thread = thread_value.value; - ; } inline ScratchRequest(const int& level_, const Impl::PerTeamValue& team_value, @@ -491,7 +493,6 @@ struct ScratchRequest { level = level_; per_team = team_value.value; per_thread = thread_value.value; - ; } inline ScratchRequest(const int& level_, @@ -500,7 +501,6 @@ struct ScratchRequest { level = level_; per_team = team_value.value; per_thread = thread_value.value; - ; } }; diff --git a/lib/kokkos/core/src/Kokkos_Extents.hpp b/lib/kokkos/core/src/Kokkos_Extents.hpp index 2e07e8b76b69e6c2fa2932d57dc3c4941cb946ce..856adf9cf9744d8c6ce03cfb0f13ac5bb3277efd 100644 --- a/lib/kokkos/core/src/Kokkos_Extents.hpp +++ b/lib/kokkos/core/src/Kokkos_Extents.hpp @@ -97,36 +97,39 @@ struct _parse_impl { // backwards template struct _parse_impl< - T*, Experimental::Extents, + T*, Kokkos::Experimental::Extents, typename std::enable_if<_all_remaining_extents_dynamic::value>::type> - : _parse_impl> {}; + : _parse_impl> { +}; // int*(*[x])[y] should still work also (meaning int[][x][][y]) template -struct _parse_impl, - typename std::enable_if< - not _all_remaining_extents_dynamic::value>::type> { +struct _parse_impl< + T*, Kokkos::Experimental::Extents, + typename std::enable_if::value>::type> { using _next = Kokkos::Experimental::AppendExtent< - typename _parse_impl, void>::type, - Experimental::dynamic_extent>; + typename _parse_impl, + void>::type, + Kokkos::Experimental::dynamic_extent>; using type = typename _next::type; }; template -struct _parse_impl, void> - : _parse_impl, void> + : _parse_impl< + T, Kokkos::Experimental::Extents // TODO @pedantic this // could be a // narrowing cast - > {}; + > {}; } // end namespace _parse_view_extents_impl template struct ParseViewExtents { using type = typename _parse_view_extents_impl ::_parse_impl< - DataType, Experimental::Extents<>>::type; + DataType, Kokkos::Experimental::Extents<>>::type; }; template @@ -135,7 +138,7 @@ struct ApplyExtent { }; template -struct ApplyExtent { +struct ApplyExtent { using type = ValueType*; }; @@ -150,15 +153,17 @@ struct ApplyExtent { }; template -struct ApplyExtent { +struct ApplyExtent { using type = - typename ApplyExtent::type*; + typename ApplyExtent::type*; }; template -struct ApplyExtent { +struct ApplyExtent { using type = - typename ApplyExtent::type[N]; + typename ApplyExtent::type[N]; }; } // end namespace Impl diff --git a/lib/kokkos/core/src/Kokkos_Future.hpp b/lib/kokkos/core/src/Kokkos_Future.hpp index 15a5d39aad989a89f0897be93fafa983863028f7..1995e2609a8faf978597dd9c0898db9646e97960 100644 --- a/lib/kokkos/core/src/Kokkos_Future.hpp +++ b/lib/kokkos/core/src/Kokkos_Future.hpp @@ -296,7 +296,8 @@ class BasicFuture { task_base* m_task; - KOKKOS_INLINE_FUNCTION explicit BasicFuture(task_base* task) : m_task(0) { + KOKKOS_INLINE_FUNCTION explicit BasicFuture(task_base* task) + : m_task(nullptr) { if (task) queue_type::assign(&m_task, task); } @@ -306,7 +307,7 @@ class BasicFuture { //---------------------------------------- KOKKOS_INLINE_FUNCTION - bool is_null() const { return 0 == m_task; } + bool is_null() const { return nullptr == m_task; } KOKKOS_INLINE_FUNCTION int reference_count() const { @@ -317,7 +318,7 @@ class BasicFuture { KOKKOS_INLINE_FUNCTION void clear() { - if (m_task) queue_type::assign(&m_task, (task_base*)0); + if (m_task) queue_type::assign(&m_task, nullptr); } //---------------------------------------- @@ -332,11 +333,11 @@ class BasicFuture { KOKKOS_INLINE_FUNCTION BasicFuture(BasicFuture&& rhs) noexcept : m_task(rhs.m_task) { - rhs.m_task = 0; + rhs.m_task = nullptr; } KOKKOS_INLINE_FUNCTION - BasicFuture(const BasicFuture& rhs) : m_task(0) { + BasicFuture(const BasicFuture& rhs) : m_task(nullptr) { if (rhs.m_task) queue_type::assign(&m_task, rhs.m_task); } @@ -344,7 +345,7 @@ class BasicFuture { BasicFuture& operator=(BasicFuture&& rhs) noexcept { clear(); m_task = rhs.m_task; - rhs.m_task = 0; + rhs.m_task = nullptr; return *this; } @@ -420,13 +421,13 @@ class BasicFuture { KOKKOS_INLINE_FUNCTION int is_ready() const noexcept { - return (0 == m_task) || + return (nullptr == m_task) || (((task_base*)task_base::LockTag) == m_task->m_wait); } KOKKOS_INLINE_FUNCTION const typename Impl::TaskResult::reference_type get() const { - if (0 == m_task) { + if (nullptr == m_task) { Kokkos::abort("Kokkos:::Future::get ERROR: is_null()"); } return Impl::TaskResult::get(m_task); diff --git a/lib/kokkos/core/src/Kokkos_HBWSpace.hpp b/lib/kokkos/core/src/Kokkos_HBWSpace.hpp index c1f03f8962b0ad14788b3eb092b115478635a51f..ce36b018cf4c16580aa2aad7b468e5419e573fd0 100644 --- a/lib/kokkos/core/src/Kokkos_HBWSpace.hpp +++ b/lib/kokkos/core/src/Kokkos_HBWSpace.hpp @@ -110,19 +110,15 @@ class HBWSpace { typedef Kokkos::OpenMP execution_space; #elif defined(KOKKOS_ENABLE_DEFAULT_DEVICE_TYPE_THREADS) typedef Kokkos::Threads execution_space; -//#elif defined( KOKKOS_ENABLE_DEFAULT_DEVICE_TYPE_QTHREADS ) -// typedef Kokkos::Qthreads execution_space; #elif defined(KOKKOS_ENABLE_OPENMP) typedef Kokkos::OpenMP execution_space; #elif defined(KOKKOS_ENABLE_THREADS) typedef Kokkos::Threads execution_space; -//#elif defined( KOKKOS_ENABLE_QTHREADS ) -// typedef Kokkos::Qthreads execution_space; #elif defined(KOKKOS_ENABLE_SERIAL) typedef Kokkos::Serial execution_space; #else #error \ - "At least one of the following host execution spaces must be defined: Kokkos::OpenMP, Kokkos::Threads, Kokkos::Qhreads, or Kokkos::Serial. You might be seeing this message if you disabled the Kokkos::Serial device explicitly using the Kokkos_ENABLE_Serial:BOOL=OFF CMake option, but did not enable any of the other host execution space devices." + "At least one of the following host execution spaces must be defined: Kokkos::OpenMP, Kokkos::Threads, or Kokkos::Serial. You might be seeing this message if you disabled the Kokkos::Serial device explicitly using the Kokkos_ENABLE_Serial:BOOL=OFF CMake option, but did not enable any of the other host execution space devices." #endif //! This memory space preferred device_type @@ -192,7 +188,12 @@ class SharedAllocationRecord const Kokkos::Experimental::HBWSpace m_space; protected: - ~SharedAllocationRecord(); + ~SharedAllocationRecord() +#if defined( \ + KOKKOS_IMPL_INTEL_WORKAROUND_NOEXCEPT_SPECIFICATION_VIRTUAL_FUNCTION) + noexcept +#endif + ; SharedAllocationRecord() = default; SharedAllocationRecord( diff --git a/lib/kokkos/core/src/Kokkos_HIP.hpp b/lib/kokkos/core/src/Kokkos_HIP.hpp new file mode 100644 index 0000000000000000000000000000000000000000..4e9325c2d28352fcf575079f5dfac0a3807aa002 --- /dev/null +++ b/lib/kokkos/core/src/Kokkos_HIP.hpp @@ -0,0 +1,65 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 3.0 +// Copyright (2020) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +#ifndef KOKKOS_HIP_HPP +#define KOKKOS_HIP_HPP + +#include + +#if defined(KOKKOS_ENABLE_HIP) + +//---------------------------------------------------------------------------- +//---------------------------------------------------------------------------- + +#include +#include +#include + +#include +#include +#include +#include + +#endif +#endif diff --git a/lib/kokkos/core/src/Kokkos_HIP_Space.hpp b/lib/kokkos/core/src/Kokkos_HIP_Space.hpp new file mode 100644 index 0000000000000000000000000000000000000000..90bdb7b9130c9288fb5b63def3cc17890ce95b22 --- /dev/null +++ b/lib/kokkos/core/src/Kokkos_HIP_Space.hpp @@ -0,0 +1,758 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 3.0 +// Copyright (2020) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +#ifndef KOKKOS_HIPSPACE_HPP +#define KOKKOS_HIPSPACE_HPP + +#include + +#if defined(KOKKOS_ENABLE_HIP) + +#include +#include +#include +#include +#include + +#include +#include +#include + +#include + +#include +/*--------------------------------------------------------------------------*/ + +namespace Kokkos { +namespace Experimental { +/** \brief HIP on-device memory management */ + +class HIPSpace { + public: + //! Tag this class as a kokkos memory space + using memory_space = HIPSpace; + using execution_space = Kokkos::Experimental::HIP; + using device_type = Kokkos::Device; + + using size_type = unsigned int; + + /*--------------------------------*/ + + HIPSpace(); + HIPSpace(HIPSpace&& rhs) = default; + HIPSpace(const HIPSpace& rhs) = default; + HIPSpace& operator=(HIPSpace&& rhs) = default; + HIPSpace& operator=(const HIPSpace& rhs) = default; + ~HIPSpace() = default; + + /**\brief Allocate untracked memory in the hip space */ + void* allocate(const size_t arg_alloc_size) const; + + /**\brief Deallocate untracked memory in the hip space */ + void deallocate(void* const arg_alloc_ptr, const size_t arg_alloc_size) const; + + /**\brief Return Name of the MemorySpace */ + static constexpr const char* name() { return "HIP"; } + + /*--------------------------------*/ + /** \brief Error reporting for HostSpace attempt to access HIPSpace */ + static void access_error(); + static void access_error(const void* const); + + private: + int m_device; ///< Which HIP device + + friend class Kokkos::Impl::SharedAllocationRecord< + Kokkos::Experimental::HIPSpace, void>; +}; + +} // namespace Experimental + +namespace Impl { + +/// \brief Initialize lock array for arbitrary size atomics. +/// +/// Arbitrary atomics are implemented using a hash table of locks +/// where the hash value is derived from the address of the +/// object for which an atomic operation is performed. +/// This function initializes the locks to zero (unset). +void init_lock_arrays_hip_space(); + +/// \brief Retrieve the pointer to the lock array for arbitrary size atomics. +/// +/// Arbitrary atomics are implemented using a hash table of locks +/// where the hash value is derived from the address of the +/// object for which an atomic operation is performed. +/// This function retrieves the lock array pointer. +/// If the array is not yet allocated it will do so. +int* atomic_lock_array_hip_space_ptr(bool deallocate = false); + +/// \brief Retrieve the pointer to the scratch array for team and thread private +/// global memory. +/// +/// Team and Thread private scratch allocations in +/// global memory are acquired via locks. +/// This function retrieves the lock array pointer. +/// If the array is not yet allocated it will do so. +int* scratch_lock_array_hip_space_ptr(bool deallocate = false); + +/// \brief Retrieve the pointer to the scratch array for unique identifiers. +/// +/// Unique identifiers in the range 0-HIP::concurrency +/// are provided via locks. +/// This function retrieves the lock array pointer. +/// If the array is not yet allocated it will do so. +int* threadid_lock_array_hip_space_ptr(bool deallocate = false); +} // namespace Impl +} // namespace Kokkos + +/*--------------------------------------------------------------------------*/ +/*--------------------------------------------------------------------------*/ + +namespace Kokkos { +namespace Experimental { +/** \brief Host memory that is accessible to HIP execution space + * through HIP's host-pinned memory allocation. + */ +class HIPHostPinnedSpace { + public: + //! Tag this class as a kokkos memory space + /** \brief Memory is in HostSpace so use the HostSpace::execution_space */ + using execution_space = HostSpace::execution_space; + using memory_space = HIPHostPinnedSpace; + using device_type = Kokkos::Device; + using size_type = unsigned int; + + /*--------------------------------*/ + + HIPHostPinnedSpace(); + HIPHostPinnedSpace(HIPHostPinnedSpace&& rhs) = default; + HIPHostPinnedSpace(const HIPHostPinnedSpace& rhs) = default; + HIPHostPinnedSpace& operator=(HIPHostPinnedSpace&& rhs) = default; + HIPHostPinnedSpace& operator=(const HIPHostPinnedSpace& rhs) = default; + ~HIPHostPinnedSpace() = default; + + /**\brief Allocate untracked memory in the space */ + void* allocate(const size_t arg_alloc_size) const; + + /**\brief Deallocate untracked memory in the space */ + void deallocate(void* const arg_alloc_ptr, const size_t arg_alloc_size) const; + + /**\brief Return Name of the MemorySpace */ + static constexpr const char* name() { return "HIPHostPinned"; } + + /*--------------------------------*/ +}; +} // namespace Experimental +} // namespace Kokkos + +/*--------------------------------------------------------------------------*/ +/*--------------------------------------------------------------------------*/ + +namespace Kokkos { +namespace Impl { + +static_assert( + Kokkos::Impl::MemorySpaceAccess::assignable, + ""); + +//---------------------------------------- + +template <> +struct MemorySpaceAccess { + enum { assignable = false }; + enum { accessible = false }; + enum { deepcopy = true }; +}; + +template <> +struct MemorySpaceAccess { + // HostSpace::execution_space == HIPHostPinnedSpace::execution_space + enum { assignable = true }; + enum { accessible = true }; + enum { deepcopy = true }; +}; + +//---------------------------------------- + +template <> +struct MemorySpaceAccess { + enum { assignable = false }; + enum { accessible = false }; + enum { deepcopy = true }; +}; + +template <> +struct MemorySpaceAccess { + // HIPSpace::execution_space != HIPHostPinnedSpace::execution_space + enum { assignable = false }; + enum { accessible = true }; // HIPSpace::execution_space + enum { deepcopy = true }; +}; + +//---------------------------------------- +// HIPHostPinnedSpace::execution_space == HostSpace::execution_space +// HIPHostPinnedSpace accessible to both HIP and Host + +template <> +struct MemorySpaceAccess { + enum { assignable = false }; // Cannot access from HIP + enum { accessible = true }; // HIPHostPinnedSpace::execution_space + enum { deepcopy = true }; +}; + +template <> +struct MemorySpaceAccess { + enum { assignable = false }; // Cannot access from Host + enum { accessible = false }; + enum { deepcopy = true }; +}; + +}; // namespace Impl +//---------------------------------------- + +} // namespace Kokkos + +/*--------------------------------------------------------------------------*/ +/*--------------------------------------------------------------------------*/ + +namespace Kokkos { +namespace Impl { + +void DeepCopyAsyncHIP(void* dst, const void* src, size_t n); + +template <> +struct DeepCopy { + DeepCopy(void* dst, const void* src, size_t); + DeepCopy(const Kokkos::Experimental::HIP&, void* dst, const void* src, + size_t); +}; + +template <> +struct DeepCopy { + DeepCopy(void* dst, const void* src, size_t); + DeepCopy(const Kokkos::Experimental::HIP&, void* dst, const void* src, + size_t); +}; + +template <> +struct DeepCopy { + DeepCopy(void* dst, const void* src, size_t); + DeepCopy(const Kokkos::Experimental::HIP&, void* dst, const void* src, + size_t); +}; + +template +struct DeepCopy { + inline DeepCopy(void* dst, const void* src, size_t n) { + (void)DeepCopy( + dst, src, n); + } + + inline DeepCopy(const ExecutionSpace& exec, void* dst, const void* src, + size_t n) { + exec.fence(); + DeepCopyAsyncHIP(dst, src, n); + } +}; + +template +struct DeepCopy { + inline DeepCopy(void* dst, const void* src, size_t n) { + (void)DeepCopy(dst, src, n); + } + + inline DeepCopy(const ExecutionSpace& exec, void* dst, const void* src, + size_t n) { + exec.fence(); + DeepCopyAsyncHIP(dst, src, n); + } +}; + +template +struct DeepCopy { + inline DeepCopy(void* dst, const void* src, size_t n) { + (void)DeepCopy(dst, src, n); + } + + inline DeepCopy(const ExecutionSpace& exec, void* dst, const void* src, + size_t n) { + exec.fence(); + DeepCopyAsyncHIP(dst, src, n); + } +}; + +template <> +struct DeepCopy { + DeepCopy(void* dst, const void* src, size_t); + DeepCopy(const Kokkos::Experimental::HIP&, void* dst, const void* src, + size_t); +}; + +template <> +struct DeepCopy { + DeepCopy(void* dst, const void* src, size_t); + DeepCopy(const Kokkos::Experimental::HIP&, void* dst, const void* src, + size_t); +}; + +template <> +struct DeepCopy { + DeepCopy(void* dst, const void* src, size_t); + DeepCopy(const Kokkos::Experimental::HIP&, void* dst, const void* src, + size_t); +}; + +template +struct DeepCopy { + inline DeepCopy(void* dst, const void* src, size_t n) { + (void)DeepCopy(dst, src, n); + } + + inline DeepCopy(const ExecutionSpace& exec, void* dst, const void* src, + size_t n) { + exec.fence(); + DeepCopyAsyncHIP(dst, src, n); + } +}; + +template +struct DeepCopy { + inline DeepCopy(void* dst, const void* src, size_t n) { + (void)DeepCopy(dst, src, n); + } + + inline DeepCopy(const ExecutionSpace& exec, void* dst, const void* src, + size_t n) { + exec.fence(); + DeepCopyAsyncHIP(dst, src, n); + } +}; + +template +struct DeepCopy { + inline DeepCopy(void* dst, const void* src, size_t n) { + (void)DeepCopy(dst, src, n); + } + + inline DeepCopy(const ExecutionSpace& exec, void* dst, const void* src, + size_t n) { + exec.fence(); + DeepCopyAsyncHIP(dst, src, n); + } +}; + +template +struct DeepCopy { + inline DeepCopy(void* dst, const void* src, size_t n) { + (void)DeepCopy(dst, src, n); + } + + inline DeepCopy(const ExecutionSpace& exec, void* dst, const void* src, + size_t n) { + exec.fence(); + DeepCopyAsyncHIP(dst, src, n); + } +}; + +template +struct DeepCopy { + inline DeepCopy(void* dst, const void* src, size_t n) { + (void)DeepCopy(dst, src, n); + } + + inline DeepCopy(const ExecutionSpace& exec, void* dst, const void* src, + size_t n) { + exec.fence(); + DeepCopyAsyncHIP(dst, src, n); + } +}; +} // namespace Impl +} // namespace Kokkos + +//---------------------------------------------------------------------------- +//---------------------------------------------------------------------------- + +namespace Kokkos { +namespace Impl { + +/** Running in HIPSpace attempting to access HostSpace: error */ +template <> +struct VerifyExecutionCanAccessMemorySpace { + enum { value = false }; + KOKKOS_INLINE_FUNCTION static void verify(void) { + Kokkos::abort("HIP code attempted to access HostSpace memory"); + } + + KOKKOS_INLINE_FUNCTION static void verify(const void*) { + Kokkos::abort("HIP code attempted to access HostSpace memory"); + } +}; + +/** Running in HIPSpace accessing HIPHostPinnedSpace: ok */ +template <> +struct VerifyExecutionCanAccessMemorySpace< + Kokkos::Experimental::HIPSpace, Kokkos::Experimental::HIPHostPinnedSpace> { + enum { value = true }; + KOKKOS_INLINE_FUNCTION static void verify(void) {} + KOKKOS_INLINE_FUNCTION static void verify(const void*) {} +}; + +/** Running in HIPSpace attempting to access an unknown space: error */ +template +struct VerifyExecutionCanAccessMemorySpace< + typename std::enable_if< + !std::is_same::value, + Kokkos::Experimental::HIPSpace>::type, + OtherSpace> { + enum { value = false }; + KOKKOS_INLINE_FUNCTION static void verify(void) { + Kokkos::abort("HIP code attempted to access unknown Space memory"); + } + + KOKKOS_INLINE_FUNCTION static void verify(const void*) { + Kokkos::abort("HIP code attempted to access unknown Space memory"); + } +}; + +//---------------------------------------------------------------------------- +/** Running in HostSpace attempting to access HIPSpace */ +template <> +struct VerifyExecutionCanAccessMemorySpace { + enum { value = false }; + inline static void verify(void) { + Kokkos::Experimental::HIPSpace::access_error(); + } + inline static void verify(const void* p) { + Kokkos::Experimental::HIPSpace::access_error(p); + } +}; + +/** Running in HostSpace accessing HIPHostPinnedSpace is OK */ +template <> +struct VerifyExecutionCanAccessMemorySpace< + Kokkos::HostSpace, Kokkos::Experimental::HIPHostPinnedSpace> { + enum { value = true }; + KOKKOS_INLINE_FUNCTION static void verify(void) {} + KOKKOS_INLINE_FUNCTION static void verify(const void*) {} +}; +} // namespace Impl +} // namespace Kokkos + +//---------------------------------------------------------------------------- +//---------------------------------------------------------------------------- + +namespace Kokkos { +namespace Impl { + +template <> +class SharedAllocationRecord + : public SharedAllocationRecord { + private: + typedef SharedAllocationRecord RecordBase; + + SharedAllocationRecord(const SharedAllocationRecord&) = delete; + SharedAllocationRecord& operator=(const SharedAllocationRecord&) = delete; + + static void deallocate(RecordBase*); + +#ifdef KOKKOS_DEBUG + static RecordBase s_root_record; +#endif + + const Kokkos::Experimental::HIPSpace m_space; + + protected: + ~SharedAllocationRecord(); + + SharedAllocationRecord( + const Kokkos::Experimental::HIPSpace& arg_space, + const std::string& arg_label, const size_t arg_alloc_size, + const RecordBase::function_type arg_dealloc = &deallocate); + + public: + std::string get_label() const; + + static SharedAllocationRecord* allocate( + const Kokkos::Experimental::HIPSpace& arg_space, + const std::string& arg_label, const size_t arg_alloc_size); + + /**\brief Allocate tracked memory in the space */ + static void* allocate_tracked(const Kokkos::Experimental::HIPSpace& arg_space, + const std::string& arg_label, + const size_t arg_alloc_size); + + /**\brief Reallocate tracked memory in the space */ + static void* reallocate_tracked(void* const arg_alloc_ptr, + const size_t arg_alloc_size); + + /**\brief Deallocate tracked memory in the space */ + static void deallocate_tracked(void* const arg_alloc_ptr); + + static SharedAllocationRecord* get_record(void* arg_alloc_ptr); + + static void print_records(std::ostream&, + const Kokkos::Experimental::HIPSpace&, + bool detail = false); +}; + +template <> +class SharedAllocationRecord + : public SharedAllocationRecord { + private: + typedef SharedAllocationRecord RecordBase; + + SharedAllocationRecord(const SharedAllocationRecord&) = delete; + SharedAllocationRecord& operator=(const SharedAllocationRecord&) = delete; + + static void deallocate(RecordBase*); + +#ifdef KOKKOS_DEBUG + static RecordBase s_root_record; +#endif + + const Kokkos::Experimental::HIPHostPinnedSpace m_space; + + protected: + ~SharedAllocationRecord(); + SharedAllocationRecord() : RecordBase(), m_space() {} + + SharedAllocationRecord( + const Kokkos::Experimental::HIPHostPinnedSpace& arg_space, + const std::string& arg_label, const size_t arg_alloc_size, + const RecordBase::function_type arg_dealloc = &deallocate); + + public: + std::string get_label() const; + + static SharedAllocationRecord* allocate( + const Kokkos::Experimental::HIPHostPinnedSpace& arg_space, + const std::string& arg_label, const size_t arg_alloc_size); + /**\brief Allocate tracked memory in the space */ + static void* allocate_tracked( + const Kokkos::Experimental::HIPHostPinnedSpace& arg_space, + const std::string& arg_label, const size_t arg_alloc_size); + + /**\brief Reallocate tracked memory in the space */ + static void* reallocate_tracked(void* const arg_alloc_ptr, + const size_t arg_alloc_size); + + /**\brief Deallocate tracked memory in the space */ + static void deallocate_tracked(void* const arg_alloc_ptr); + + static SharedAllocationRecord* get_record(void* arg_alloc_ptr); + + static void print_records(std::ostream&, + const Kokkos::Experimental::HIPHostPinnedSpace&, + bool detail = false); +}; +} // namespace Impl +} // namespace Kokkos + +//---------------------------------------------------------------------------- +//---------------------------------------------------------------------------- + +namespace Kokkos { +namespace Experimental { +namespace Impl { +class HIPInternal; +} +/// \class HIP +/// \brief Kokkos device for multicore processors in the host memory space. +class HIP { + public: + //------------------------------------ + //! \name Type declarations that all Kokkos devices must provide. + //@{ + + //! Tag this class as a kokkos execution space + using execution_space = HIP; + using memory_space = HIPSpace; + using device_type = Kokkos::Device; + + using array_layout = LayoutLeft; + using size_type = HIPSpace::size_type; + + using scratch_memory_space = ScratchMemorySpace; + + ~HIP() = default; + HIP(); + // explicit HIP( const int instance_id ); + + HIP(HIP&&) = default; + HIP(const HIP&) = default; + HIP& operator=(HIP&&) = default; + HIP& operator=(const HIP&) = default; + + //@} + //------------------------------------ + //! \name Functions that all Kokkos devices must implement. + //@{ + + KOKKOS_INLINE_FUNCTION static int in_parallel() { +#if defined(__HIP_ARCH__) + return true; +#else + return false; +#endif + } + + /** \brief Wait until all dispatched functors complete. A noop for OpenMP. */ + static void impl_static_fence(); + void fence() const; + + /// \brief Print configuration information to the given output stream. + static void print_configuration(std::ostream&, const bool detail = false); + + /// \brief Free any resources being consumed by the device. + static void impl_finalize(); + + /** \brief Initialize the device. + * + */ + struct SelectDevice { + int hip_device_id; + SelectDevice() : hip_device_id(0) {} + explicit SelectDevice(int id) : hip_device_id(id) {} + }; + + int hip_device() const; + + static void impl_initialize(const SelectDevice = SelectDevice()); + + static int impl_is_initialized(); + + // static size_type device_arch(); + + // static size_type detect_device_count(); + + static int concurrency(); + static const char* name(); + + inline Impl::HIPInternal* impl_internal_space_instance() const { + return m_space_instance; + } + + uint32_t impl_instance_id() const noexcept { return 0; } + + private: + Impl::HIPInternal* m_space_instance; +}; +} // namespace Experimental +namespace Profiling { +namespace Experimental { +template <> +struct DeviceTypeTraits { + static constexpr DeviceType id = DeviceType::HIP; +}; +} // namespace Experimental +} // namespace Profiling +} // namespace Kokkos + +namespace Kokkos { +namespace Impl { + +template <> +struct MemorySpaceAccess { + enum { assignable = false }; + enum { accessible = true }; + enum { deepcopy = false }; +}; + +template <> +struct VerifyExecutionCanAccessMemorySpace< + Kokkos::Experimental::HIP::memory_space, + Kokkos::Experimental::HIP::scratch_memory_space> { + enum { value = true }; + KOKKOS_INLINE_FUNCTION static void verify(void) {} + KOKKOS_INLINE_FUNCTION static void verify(const void*) {} +}; + +template <> +struct VerifyExecutionCanAccessMemorySpace< + Kokkos::HostSpace, Kokkos::Experimental::HIP::scratch_memory_space> { + enum { value = false }; + inline static void verify(void) { + Kokkos::Experimental::HIPSpace::access_error(); + } + inline static void verify(const void* p) { + Kokkos::Experimental::HIPSpace::access_error(p); + } +}; + +} // namespace Impl +} // namespace Kokkos + +#endif /* #if defined( KOKKOS_ENABLE_HIP ) */ +#endif /* #define KOKKOS_HIPSPACE_HPP */ diff --git a/lib/kokkos/core/src/Kokkos_HPX.hpp b/lib/kokkos/core/src/Kokkos_HPX.hpp index 46101c824f24e6a62512a9a927b776b67ab61e6f..10354635c5857952b751267881eca0a7f5b2043a 100644 --- a/lib/kokkos/core/src/Kokkos_HPX.hpp +++ b/lib/kokkos/core/src/Kokkos_HPX.hpp @@ -83,6 +83,7 @@ #include #include #include +#include #include #include @@ -194,6 +195,7 @@ class HPX { const bool /* verbose */ = false) { std::cout << "HPX backend" << std::endl; } + uint32_t impl_instance_id() const noexcept { return 0; } static bool in_parallel(HPX const & = HPX()) noexcept { return false; } static void impl_static_fence(HPX const & = HPX()) @@ -228,8 +230,8 @@ class HPX { } template - static void partition_master(F const &f, int requested_num_partitions = 0, - int requested_partition_size = 0) { + static void partition_master(F const &, int requested_num_partitions = 0, + int = 0) { if (requested_num_partitions > 1) { Kokkos::abort( "Kokkos::Experimental::HPX::partition_master: can't partition an " @@ -297,6 +299,15 @@ class HPX { }; } // namespace Experimental +namespace Profiling { +namespace Experimental { +template <> +struct DeviceTypeTraits { + constexpr static DeviceType id = DeviceType::HPX; +}; +} // namespace Experimental +} // namespace Profiling + namespace Impl { template inline void dispatch_execute_task(Closure *closure) { @@ -462,7 +473,7 @@ struct HPXTeamMember { template KOKKOS_INLINE_FUNCTION typename std::enable_if::value>::type - team_reduce(const ReducerType &reducer) const {} + team_reduce(const ReducerType &) const {} template KOKKOS_INLINE_FUNCTION Type @@ -590,6 +601,11 @@ class TeamPolicyInternal template friend class TeamPolicyInternal; + const typename traits::execution_space &space() const { + static typename traits::execution_space m_space; + return m_space; + } + template TeamPolicyInternal(const TeamPolicyInternal &p) { @@ -612,8 +628,7 @@ class TeamPolicyInternal } TeamPolicyInternal(const typename traits::execution_space &, - int league_size_request, - const Kokkos::AUTO_t &team_size_request, + int league_size_request, const Kokkos::AUTO_t &, int /* vector_length_request */ = 1) : m_team_scratch_size{0, 0}, m_thread_scratch_size{0, 0}, @@ -629,8 +644,7 @@ class TeamPolicyInternal init(league_size_request, team_size_request); } - TeamPolicyInternal(int league_size_request, - const Kokkos::AUTO_t &team_size_request, + TeamPolicyInternal(int league_size_request, const Kokkos::AUTO_t &, int /* vector_length_request */ = 1) : m_team_scratch_size{0, 0}, m_thread_scratch_size{0, 0}, @@ -1169,7 +1183,7 @@ class ParallelReduce, ReducerType, const ViewType &arg_view, typename std::enable_if::value && !Kokkos::is_reducer_type::value, - void *>::type = NULL) + void *>::type = nullptr) : m_functor(arg_functor), m_policy(arg_policy), m_reducer(InvalidType()), @@ -1359,7 +1373,7 @@ class ParallelReduce, ReducerType, const ViewType &arg_view, typename std::enable_if::value && !Kokkos::is_reducer_type::value, - void *>::type = NULL) + void *>::type = nullptr) : m_functor(arg_functor), m_mdr_policy(arg_policy), m_policy(Policy(0, m_mdr_policy.m_num_tiles).set_chunk_size(1)), @@ -1990,7 +2004,7 @@ class ParallelReduce, const ViewType &arg_result, typename std::enable_if::value && !Kokkos::is_reducer_type::value, - void *>::type = NULL) + void *>::type = nullptr) : m_functor(arg_functor), m_league(arg_policy.league_size()), m_policy(arg_policy), @@ -2241,28 +2255,28 @@ KOKKOS_INLINE_FUNCTION void parallel_scan( template KOKKOS_INLINE_FUNCTION void single( - const Impl::VectorSingleStruct &single_struct, + const Impl::VectorSingleStruct &, const FunctorType &lambda) { lambda(); } template KOKKOS_INLINE_FUNCTION void single( - const Impl::ThreadSingleStruct &single_struct, + const Impl::ThreadSingleStruct &, const FunctorType &lambda) { lambda(); } template KOKKOS_INLINE_FUNCTION void single( - const Impl::VectorSingleStruct &single_struct, + const Impl::VectorSingleStruct &, const FunctorType &lambda, ValueType &val) { lambda(val); } template KOKKOS_INLINE_FUNCTION void single( - const Impl::ThreadSingleStruct &single_struct, + const Impl::ThreadSingleStruct &, const FunctorType &lambda, ValueType &val) { lambda(val); } diff --git a/lib/kokkos/core/src/Kokkos_HostSpace.hpp b/lib/kokkos/core/src/Kokkos_HostSpace.hpp index c1b842c1c4a743eb7a85a9c698032c39be0e7715..5bc50c7ff086a3d0ab972a9dbdbea9432788ceda 100644 --- a/lib/kokkos/core/src/Kokkos_HostSpace.hpp +++ b/lib/kokkos/core/src/Kokkos_HostSpace.hpp @@ -118,21 +118,17 @@ class HostSpace { typedef Kokkos::Threads execution_space; #elif defined(KOKKOS_ENABLE_DEFAULT_DEVICE_TYPE_HPX) typedef Kokkos::Experimental::HPX execution_space; -//#elif defined( KOKKOS_ENABLE_DEFAULT_DEVICE_TYPE_QTHREADS ) -// typedef Kokkos::Qthreads execution_space; #elif defined(KOKKOS_ENABLE_OPENMP) typedef Kokkos::OpenMP execution_space; #elif defined(KOKKOS_ENABLE_THREADS) typedef Kokkos::Threads execution_space; -//#elif defined( KOKKOS_ENABLE_QTHREADS ) -// typedef Kokkos::Qthreads execution_space; #elif defined(KOKKOS_ENABLE_HPX) typedef Kokkos::Experimental::HPX execution_space; #elif defined(KOKKOS_ENABLE_SERIAL) typedef Kokkos::Serial execution_space; #else #error \ - "At least one of the following host execution spaces must be defined: Kokkos::OpenMP, Kokkos::Threads, Kokkos::Qthreads, or Kokkos::Serial. You might be seeing this message if you disabled the Kokkos::Serial device explicitly using the Kokkos_ENABLE_Serial:BOOL=OFF CMake option, but did not enable any of the other host execution space devices." + "At least one of the following host execution spaces must be defined: Kokkos::OpenMP, Kokkos::Threads, or Kokkos::Serial. You might be seeing this message if you disabled the Kokkos::Serial device explicitly using the Kokkos_ENABLE_Serial:BOOL=OFF CMake option, but did not enable any of the other host execution space devices." #endif //! This memory space preferred device_type @@ -248,7 +244,12 @@ class SharedAllocationRecord const Kokkos::HostSpace m_space; protected: - ~SharedAllocationRecord(); + ~SharedAllocationRecord() +#if defined( \ + KOKKOS_IMPL_INTEL_WORKAROUND_NOEXCEPT_SPECIFICATION_VIRTUAL_FUNCTION) + noexcept +#endif + ; SharedAllocationRecord() = default; SharedAllocationRecord( @@ -267,6 +268,9 @@ class SharedAllocationRecord #if defined(KOKKOS_ACTIVE_EXECUTION_MEMORY_SPACE_HOST) return new SharedAllocationRecord(arg_space, arg_label, arg_alloc_size); #else + (void)arg_space; + (void)arg_label; + (void)arg_alloc_size; return (SharedAllocationRecord*)0; #endif } diff --git a/lib/kokkos/core/src/Kokkos_Macros.hpp b/lib/kokkos/core/src/Kokkos_Macros.hpp index 5649d12e97fbf187b24d8a48554f5848dcd34065..00a07bdcf9d63621c9d3edcd015b1c64a70d0984 100644 --- a/lib/kokkos/core/src/Kokkos_Macros.hpp +++ b/lib/kokkos/core/src/Kokkos_Macros.hpp @@ -50,7 +50,6 @@ * * KOKKOS_ENABLE_CUDA Kokkos::Cuda execution and memory spaces * KOKKOS_ENABLE_THREADS Kokkos::Threads execution space - * KOKKOS_ENABLE_QTHREADS Kokkos::Qthreads execution space * KOKKOS_ENABLE_HPX Kokkos::Experimental::HPX execution space * KOKKOS_ENABLE_OPENMP Kokkos::OpenMP execution space * KOKKOS_ENABLE_OPENMPTARGET Kokkos::Experimental::OpenMPTarget @@ -80,6 +79,7 @@ * KOKKOS_COMPILER_APPLECC * KOKKOS_COMPILER_CLANG * KOKKOS_COMPILER_PGI + * KOKKOS_COMPILER_MSVC * * Macros for which compiler extension to use for atomics on intrinsice types * @@ -99,17 +99,17 @@ //---------------------------------------------------------------------------- -#if defined(KOKKOS_ENABLE_SERIAL) || defined(KOKKOS_ENABLE_THREADS) || \ - defined(KOKKOS_ENABLE_OPENMP) || defined(KOKKOS_ENABLE_QTHREADS) || \ - defined(KOKKOS_ENABLE_HPX) || defined(KOKKOS_ENABLE_ROCM) || \ - defined(KOKKOS_ENABLE_OPENMPTARGET) +#if defined(KOKKOS_ENABLE_SERIAL) || defined(KOKKOS_ENABLE_THREADS) || \ + defined(KOKKOS_ENABLE_OPENMP) || defined(KOKKOS_ENABLE_HPX) || \ + defined(KOKKOS_ENABLE_ROCM) || defined(KOKKOS_ENABLE_OPENMPTARGET) || \ + defined(KOKKOS_ENABLE_HIP) #define KOKKOS_INTERNAL_ENABLE_NON_CUDA_BACKEND #endif -#if !defined(KOKKOS_ENABLE_THREADS) && !defined(KOKKOS_ENABLE_CUDA) && \ - !defined(KOKKOS_ENABLE_OPENMP) && !defined(KOKKOS_ENABLE_QTHREADS) && \ - !defined(KOKKOS_ENABLE_HPX) && !defined(KOKKOS_ENABLE_ROCM) && \ - !defined(KOKKOS_ENABLE_OPENMPTARGET) +#if !defined(KOKKOS_ENABLE_THREADS) && !defined(KOKKOS_ENABLE_CUDA) && \ + !defined(KOKKOS_ENABLE_OPENMP) && !defined(KOKKOS_ENABLE_HPX) && \ + !defined(KOKKOS_ENABLE_ROCM) && !defined(KOKKOS_ENABLE_OPENMPTARGET) && \ + !defined(KOKKOS_ENABLE_HIP) #define KOKKOS_INTERNAL_NOT_PARALLEL #endif @@ -131,37 +131,17 @@ #error "#include did not define CUDA_VERSION." #endif -#if (CUDA_VERSION < 7000) -// CUDA supports C++11 in device code starting with version 7.0. -// This includes auto type and device code internal lambdas. -#error "Cuda version 7.0 or greater required." -#endif - #if defined(__CUDA_ARCH__) && (__CUDA_ARCH__ < 300) // Compiling with CUDA compiler for device code. #error "Cuda device capability >= 3.0 is required." #endif #ifdef KOKKOS_ENABLE_CUDA_LAMBDA -#if (CUDA_VERSION < 7050) -// CUDA supports C++11 lambdas generated in host code to be given -// to the device starting with version 7.5. But the release candidate (7.5.6) -// still identifies as 7.0. -#error "Cuda version 7.5 or greater required for host-to-device Lambda support." -#endif - -#if (CUDA_VERSION < 8000) && defined(__NVCC__) -#define KOKKOS_LAMBDA [=] __device__ -#if defined(KOKKOS_INTERNAL_ENABLE_NON_CUDA_BACKEND) -#undef KOKKOS_ENABLE_CXX11_DISPATCH_LAMBDA -#endif -#else #define KOKKOS_LAMBDA [=] __host__ __device__ #if defined(KOKKOS_ENABLE_CXX17) || defined(KOKKOS_ENABLE_CXX20) #define KOKKOS_CLASS_LAMBDA [ =, *this ] __host__ __device__ #endif -#endif #if defined(__NVCC__) #define KOKKOS_IMPL_NEED_FUNCTOR_WRAPPER @@ -170,12 +150,6 @@ #undef KOKKOS_ENABLE_CXX11_DISPATCH_LAMBDA #endif // !defined(KOKKOS_ENABLE_CUDA_LAMBDA) -#if (9000 <= CUDA_VERSION) && (CUDA_VERSION < 10000) -// CUDA 9 introduced an incorrect warning, -// see https://github.com/kokkos/kokkos/issues/1470 -#define KOKKOS_CUDA_9_DEFAULTED_BUG_WORKAROUND -#endif - #if (10000 > CUDA_VERSION) #define KOKKOS_ENABLE_PRE_CUDA_10_DEPRECATION_API #endif @@ -194,6 +168,17 @@ #endif // #if defined( KOKKOS_ENABLE_CUDA ) && defined( __CUDACC__ ) +#if defined(KOKKOS_ENABLE_HIP) + +#define KOKKOS_IMPL_HIP_CLANG_WORKAROUND + +#define HIP_ENABLE_PRINTF +#include +#include + +#define KOKKOS_LAMBDA [=] __host__ __device__ +#endif // #if defined(KOKKOS_ENABLE_HIP) + //---------------------------------------------------------------------------- // Mapping compiler built-ins to KOKKOS_COMPILER_*** macros @@ -267,6 +252,10 @@ #endif #endif +#if defined(_MSC_VER) && !defined(KOKKOS_COMPILER_INTEL) +#define KOKKOS_COMPILER_MSVC _MSC_VER +#endif + //#endif // #if !defined( __CUDA_ARCH__ ) //---------------------------------------------------------------------------- // Language info: C++, CUDA, OPENMP @@ -283,7 +272,24 @@ #else #define KOKKOS_INLINE_FUNCTION_DELETED __device__ __host__ inline #endif -#endif // #if defined( __CUDA_ARCH__ ) +#if (CUDA_VERSION < 10000) +#define KOKKOS_DEFAULTED_FUNCTION __host__ __device__ inline +#else +#define KOKKOS_DEFAULTED_FUNCTION inline +#endif +#endif + +#if defined(KOKKOS_ENABLE_HIP) + +#define KOKKOS_FORCEINLINE_FUNCTION __device__ __host__ __forceinline__ +#define KOKKOS_INLINE_FUNCTION __device__ __host__ inline +#define KOKKOS_DEFAULTED_FUNCTION __device__ __host__ inline +#define KOKKOS_INLINE_FUNCTION_DELETED __device__ __host__ inline +#define KOKKOS_FUNCTION __device__ __host__ +#if defined(KOKKOS_ENABLE_CXX17) || defined(KOKKOS_ENABLE_CXX20) +#define KOKKOS_CLASS_LAMBDA [ =, *this ] __host__ __device__ +#endif +#endif // #if defined( KOKKOS_ENABLE_HIP ) #if defined(KOKKOS_ENABLE_ROCM) && defined(__HCC__) @@ -291,6 +297,7 @@ #define KOKKOS_INLINE_FUNCTION __attribute__((amp, cpu)) inline #define KOKKOS_FUNCTION __attribute__((amp, cpu)) #define KOKKOS_LAMBDA [=] __attribute__((amp, cpu)) +#define KOKKOS_DEFAULTED_FUNCTION __attribute__((amp, cpu)) inline #endif #if defined(_OPENMP) @@ -355,6 +362,10 @@ #endif #endif +#if (1800 > KOKKOS_COMPILER_INTEL) +#define KOKKOS_IMPL_INTEL_WORKAROUND_NOEXCEPT_SPECIFICATION_VIRTUAL_FUNCTION +#endif + #if defined(__MIC__) // Compiling for Xeon Phi #endif @@ -470,6 +481,10 @@ #if !defined(KOKKOS_INLINE_FUNCTION_DELETED) #define KOKKOS_INLINE_FUNCTION_DELETED inline #endif + +#if !defined(KOKKOS_DEFAULTED_FUNCTION) +#define KOKKOS_DEFAULTED_FUNCTION inline +#endif //---------------------------------------------------------------------------- // Define empty macro for restrict if necessary: @@ -497,28 +512,30 @@ // There is zero or one default execution space specified. #if 1 < ((defined(KOKKOS_ENABLE_DEFAULT_DEVICE_TYPE_CUDA) ? 1 : 0) + \ + (defined(KOKKOS_ENABLE_DEFAULT_DEVICE_TYPE_HIP) ? 1 : 0) + \ (defined(KOKKOS_ENABLE_DEFAULT_DEVICE_TYPE_ROCM) ? 1 : 0) + \ (defined(KOKKOS_ENABLE_DEFAULT_DEVICE_TYPE_OPENMPTARGET) ? 1 : 0) + \ (defined(KOKKOS_ENABLE_DEFAULT_DEVICE_TYPE_OPENMP) ? 1 : 0) + \ (defined(KOKKOS_ENABLE_DEFAULT_DEVICE_TYPE_THREADS) ? 1 : 0) + \ - (defined(KOKKOS_ENABLE_DEFAULT_DEVICE_TYPE_QTHREADS) ? 1 : 0) + \ (defined(KOKKOS_ENABLE_DEFAULT_DEVICE_TYPE_HPX) ? 1 : 0) + \ (defined(KOKKOS_ENABLE_DEFAULT_DEVICE_TYPE_SERIAL) ? 1 : 0)) #error "More than one KOKKOS_ENABLE_DEFAULT_DEVICE_TYPE_* specified." #endif // If default is not specified then chose from enabled execution spaces. -// Priority: CUDA, OPENMP, THREADS, QTHREADS, HPX, SERIAL +// Priority: CUDA, HIP, ROCM, OPENMPTARGET, OPENMP, THREADS, HPX, SERIAL #if defined(KOKKOS_ENABLE_DEFAULT_DEVICE_TYPE_CUDA) +#elif defined(KOKKOS_ENABLE_DEFAULT_DEVICE_TYPE_HIP) #elif defined(KOKKOS_ENABLE_DEFAULT_DEVICE_TYPE_ROCM) #elif defined(KOKKOS_ENABLE_DEFAULT_DEVICE_TYPE_OPENMPTARGET) #elif defined(KOKKOS_ENABLE_DEFAULT_DEVICE_TYPE_OPENMP) #elif defined(KOKKOS_ENABLE_DEFAULT_DEVICE_TYPE_THREADS) -//#elif defined( KOKKOS_ENABLE_DEFAULT_DEVICE_TYPE_QTHREADS ) #elif defined(KOKKOS_ENABLE_DEFAULT_DEVICE_TYPE_HPX) #elif defined(KOKKOS_ENABLE_DEFAULT_DEVICE_TYPE_SERIAL) #elif defined(KOKKOS_ENABLE_CUDA) #define KOKKOS_ENABLE_DEFAULT_DEVICE_TYPE_CUDA +#elif defined(KOKKOS_ENABLE_HIP) +#define KOKKOS_ENABLE_DEFAULT_DEVICE_TYPE_HIP #elif defined(KOKKOS_ENABLE_ROCM) #define KOKKOS_ENABLE_DEFAULT_DEVICE_TYPE_ROCM #elif defined(KOKKOS_ENABLE_OPENMPTARGET) @@ -527,8 +544,6 @@ #define KOKKOS_ENABLE_DEFAULT_DEVICE_TYPE_OPENMP #elif defined(KOKKOS_ENABLE_THREADS) #define KOKKOS_ENABLE_DEFAULT_DEVICE_TYPE_THREADS -//#elif defined( KOKKOS_ENABLE_QTHREADS ) -// #define KOKKOS_ENABLE_DEFAULT_DEVICE_TYPE_QTHREADS #elif defined(KOKKOS_ENABLE_HPX) #define KOKKOS_ENABLE_DEFAULT_DEVICE_TYPE_HPX #else @@ -543,6 +558,10 @@ #elif defined(__HCC__) && defined(__HCC_ACCELERATOR__) && \ defined(KOKKOS_ENABLE_ROCM) #define KOKKOS_ACTIVE_EXECUTION_MEMORY_SPACE_ROCM_GPU +#elif defined(__HIPCC__) && \ + (defined(__HCC_ACCELERATOR__) || defined(__CUDA_ARCH__)) && \ + defined(KOKKOS_ENABLE_HIP) +#define KOKKOS_ACTIVE_EXECUTION_MEMORY_SPACE_HIP_GPU #else #define KOKKOS_ACTIVE_EXECUTION_MEMORY_SPACE_HOST #endif @@ -557,27 +576,25 @@ #endif //---------------------------------------------------------------------------- -// If compiling with CUDA then must be using CUDA 8 or better -// and use relocateable device code to enable the task policy. -// nvcc relocatable device code option: --relocatable-device-code=true +// If compiling with CUDA, we must use relocateable device code +// to enable the task policy. -#if (defined(KOKKOS_ENABLE_CUDA)) -#if (8000 <= CUDA_VERSION) && \ - defined(KOKKOS_ENABLE_CUDA_RELOCATABLE_DEVICE_CODE) +#if defined(KOKKOS_ENABLE_CUDA) +#if defined(KOKKOS_ENABLE_CUDA_RELOCATABLE_DEVICE_CODE) #define KOKKOS_ENABLE_TASKDAG #endif #else +#ifndef KOKKOS_ENABLE_HIP #define KOKKOS_ENABLE_TASKDAG #endif +#endif #if defined(KOKKOS_ENABLE_CUDA) -#if (9000 <= CUDA_VERSION) #define KOKKOS_IMPL_CUDA_VERSION_9_WORKAROUND #if (__CUDA_ARCH__) #define KOKKOS_IMPL_CUDA_SYNCWARP_NEEDS_MASK #endif #endif -#endif #define KOKKOS_INVALID_INDEX (~std::size_t(0)) @@ -622,4 +639,17 @@ #define KOKKOS_IMPL_ENABLE_CXXABI #endif +// WORKAROUND for AMD aomp which apparently defines CUDA_ARCH when building for +// AMD GPUs with OpenMP Target ??? +#if defined(__CUDA_ARCH__) && !defined(__CUDACC__) && \ + !defined(KOKKOS_ENABLE_HIP) && !defined(KOKKOS_ENABLE_CUDA) +#undef __CUDA_ARCH__ +#endif + +#if defined(KOKKOS_COMPILER_MSVC) +#define KOKKOS_THREAD_LOCAL __declspec(thread) +#else +#define KOKKOS_THREAD_LOCAL __thread +#endif + #endif // #ifndef KOKKOS_MACROS_HPP diff --git a/lib/kokkos/core/src/Kokkos_MemoryPool.hpp b/lib/kokkos/core/src/Kokkos_MemoryPool.hpp index 5228f3661206d016e14dfa94fa4b6c2c2cec4b9b..da0754470188df0801eafb26f591a34f82fbae81 100644 --- a/lib/kokkos/core/src/Kokkos_MemoryPool.hpp +++ b/lib/kokkos/core/src/Kokkos_MemoryPool.hpp @@ -257,61 +257,14 @@ class MemoryPool { //-------------------------------------------------------------------------- -#ifdef KOKKOS_CUDA_9_DEFAULTED_BUG_WORKAROUND - KOKKOS_INLINE_FUNCTION MemoryPool(MemoryPool &&rhs) - : m_tracker(std::move(rhs.m_tracker)), - m_sb_state_array(std::move(rhs.m_sb_state_array)), - m_sb_state_size(std::move(rhs.m_sb_state_size)), - m_sb_size_lg2(std::move(rhs.m_sb_size_lg2)), - m_max_block_size_lg2(std::move(rhs.m_max_block_size_lg2)), - m_min_block_size_lg2(std::move(rhs.m_min_block_size_lg2)), - m_sb_count(std::move(rhs.m_sb_count)), - m_hint_offset(std::move(rhs.m_hint_offset)), - m_data_offset(std::move(rhs.m_data_offset)) {} - KOKKOS_INLINE_FUNCTION MemoryPool(const MemoryPool &rhs) - : m_tracker(rhs.m_tracker), - m_sb_state_array(rhs.m_sb_state_array), - m_sb_state_size(rhs.m_sb_state_size), - m_sb_size_lg2(rhs.m_sb_size_lg2), - m_max_block_size_lg2(rhs.m_max_block_size_lg2), - m_min_block_size_lg2(rhs.m_min_block_size_lg2), - m_sb_count(rhs.m_sb_count), - m_hint_offset(rhs.m_hint_offset), - m_data_offset(rhs.m_data_offset) {} - KOKKOS_INLINE_FUNCTION MemoryPool &operator=(MemoryPool &&rhs) { - m_tracker = std::move(rhs.m_tracker); - m_sb_state_array = std::move(rhs.m_sb_state_array); - m_sb_state_size = std::move(rhs.m_sb_state_size); - m_sb_size_lg2 = std::move(rhs.m_sb_size_lg2); - m_max_block_size_lg2 = std::move(rhs.m_max_block_size_lg2); - m_min_block_size_lg2 = std::move(rhs.m_min_block_size_lg2); - m_sb_count = std::move(rhs.m_sb_count); - m_hint_offset = std::move(rhs.m_hint_offset); - m_data_offset = std::move(rhs.m_data_offset); - return *this; - } - KOKKOS_INLINE_FUNCTION MemoryPool &operator=(const MemoryPool &rhs) { - m_tracker = rhs.m_tracker; - m_sb_state_array = rhs.m_sb_state_array; - m_sb_state_size = rhs.m_sb_state_size; - m_sb_size_lg2 = rhs.m_sb_size_lg2; - m_max_block_size_lg2 = rhs.m_max_block_size_lg2; - m_min_block_size_lg2 = rhs.m_min_block_size_lg2; - m_sb_count = rhs.m_sb_count; - m_hint_offset = rhs.m_hint_offset; - m_data_offset = rhs.m_data_offset; - return *this; - } -#else - KOKKOS_INLINE_FUNCTION MemoryPool(MemoryPool &&) = default; - KOKKOS_INLINE_FUNCTION MemoryPool(const MemoryPool &) = default; - KOKKOS_INLINE_FUNCTION MemoryPool &operator=(MemoryPool &&) = default; - KOKKOS_INLINE_FUNCTION MemoryPool &operator=(const MemoryPool &) = default; -#endif + KOKKOS_DEFAULTED_FUNCTION MemoryPool(MemoryPool &&) = default; + KOKKOS_DEFAULTED_FUNCTION MemoryPool(const MemoryPool &) = default; + KOKKOS_DEFAULTED_FUNCTION MemoryPool &operator=(MemoryPool &&) = default; + KOKKOS_DEFAULTED_FUNCTION MemoryPool &operator=(const MemoryPool &) = default; KOKKOS_INLINE_FUNCTION MemoryPool() : m_tracker(), - m_sb_state_array(0), + m_sb_state_array(nullptr), m_sb_state_size(0), m_sb_size_lg2(0), m_max_block_size_lg2(0), @@ -339,7 +292,7 @@ class MemoryPool { const size_t min_total_alloc_size, size_t min_block_alloc_size = 0, size_t max_block_alloc_size = 0, size_t min_superblock_size = 0) : m_tracker(), - m_sb_state_array(0), + m_sb_state_array(nullptr), m_sb_state_size(0), m_sb_size_lg2(0), m_max_block_size_lg2(0), @@ -547,9 +500,9 @@ class MemoryPool { "allocation size"); } - if (0 == alloc_size) return (void *)0; + if (0 == alloc_size) return nullptr; - void *p = 0; + void *p = nullptr; const uint32_t block_size_lg2 = get_block_size_lg2(alloc_size); @@ -590,7 +543,7 @@ class MemoryPool { int32_t sb_id = -1; - volatile uint32_t *sb_state_array = 0; + volatile uint32_t *sb_state_array = nullptr; while (attempt_limit) { int32_t hint_sb_id = -1; @@ -784,7 +737,7 @@ class MemoryPool { */ KOKKOS_INLINE_FUNCTION void deallocate(void *p, size_t /* alloc_size */) const noexcept { - if (0 == p) return; + if (nullptr == p) return; // Determine which superblock and block const ptrdiff_t d = diff --git a/lib/kokkos/core/src/Kokkos_NumericTraits.hpp b/lib/kokkos/core/src/Kokkos_NumericTraits.hpp index 666bb3326623ec84d0d8fb92edebf22e29ef602d..88040bcbaa6946fd727c2df6907131204b57ce93 100644 --- a/lib/kokkos/core/src/Kokkos_NumericTraits.hpp +++ b/lib/kokkos/core/src/Kokkos_NumericTraits.hpp @@ -160,8 +160,8 @@ struct reduction_identity { KOKKOS_FORCEINLINE_FUNCTION constexpr static long prod() { return static_cast(1); } - KOKKOS_FORCEINLINE_FUNCTION constexpr static long max() { return LLONG_MIN; } - KOKKOS_FORCEINLINE_FUNCTION constexpr static long min() { return LLONG_MAX; } + KOKKOS_FORCEINLINE_FUNCTION constexpr static long max() { return LONG_MIN; } + KOKKOS_FORCEINLINE_FUNCTION constexpr static long min() { return LONG_MAX; } KOKKOS_FORCEINLINE_FUNCTION constexpr static long bor() { return static_cast(0x0); } @@ -368,7 +368,8 @@ struct reduction_identity { KOKKOS_FORCEINLINE_FUNCTION constexpr static double min() { return DBL_MAX; } }; -#if !defined(KOKKOS_ACTIVE_EXECUTION_MEMORY_SPACE_CUDA) +#if !defined(KOKKOS_ACTIVE_EXECUTION_MEMORY_SPACE_CUDA) && \ + !defined(KOKKOS_ACTIVE_EXECUTION_MEMORY_SPACE_HIP_GPU) template <> struct reduction_identity { KOKKOS_FORCEINLINE_FUNCTION constexpr static long double sum() { diff --git a/lib/kokkos/core/src/Kokkos_OpenMP.hpp b/lib/kokkos/core/src/Kokkos_OpenMP.hpp index 3955c061562e17017b71b1b1ca6b21afcf47f17f..d9b9077c6df877f069eb3b2e6c3cd78439fbbf8f 100644 --- a/lib/kokkos/core/src/Kokkos_OpenMP.hpp +++ b/lib/kokkos/core/src/Kokkos_OpenMP.hpp @@ -94,9 +94,6 @@ class OpenMP { using size_type = memory_space::size_type; using scratch_memory_space = ScratchMemorySpace; - /// \brief Get a handle to the default execution space instance - inline OpenMP() noexcept; - /// \brief Print configuration information to the given output stream. static void print_configuration(std::ostream&, const bool verbose = false); @@ -225,8 +222,17 @@ class OpenMP { #endif static constexpr const char* name() noexcept { return "OpenMP"; } + uint32_t impl_instance_id() const noexcept { return 0; } }; +namespace Profiling { +namespace Experimental { +template <> +struct DeviceTypeTraits { + static constexpr DeviceType id = DeviceType::OpenMP; +}; +} // namespace Experimental +} // namespace Profiling } // namespace Kokkos /*--------------------------------------------------------------------------*/ diff --git a/lib/kokkos/core/src/Kokkos_OpenMPTarget.hpp b/lib/kokkos/core/src/Kokkos_OpenMPTarget.hpp index 9706751f9cf8de95bed61f36f0cb6255a4ccb717..e853b8228d07364c45b28aa669feaef2c502dbdb 100644 --- a/lib/kokkos/core/src/Kokkos_OpenMPTarget.hpp +++ b/lib/kokkos/core/src/Kokkos_OpenMPTarget.hpp @@ -59,12 +59,16 @@ #include #include #include - +#include #include /*--------------------------------------------------------------------------*/ namespace Kokkos { namespace Experimental { +namespace Impl { +class OpenMPTargetInternal; +} + /// \class OpenMPTarget /// \brief Kokkos device for multicore processors in the host memory space. class OpenMPTarget { @@ -84,76 +88,48 @@ class OpenMPTarget { typedef ScratchMemorySpace scratch_memory_space; - //@} - //------------------------------------ - //! \name Functions that all Kokkos execution spaces must implement. - //@{ - inline static bool in_parallel() { return omp_in_parallel(); } - /** \brief Set the device in a "sleep" state. A noop for OpenMPTarget. */ - static bool sleep(); - - /** \brief Wake the device from the 'sleep' state. A noop for OpenMPTarget. */ - static bool wake(); - - /** \brief Wait until all dispatched functors complete. A noop for - * OpenMPTarget. */ - static void fence() {} - - /// \brief Print configuration information to the given output stream. - static void print_configuration(std::ostream&, const bool detail = false); - - /// \brief Free any resources being consumed by the device. - static void finalize(); - - /** \brief Initialize the device. - * - * 1) If the hardware locality library is enabled and OpenMPTarget has not - * already bound threads then bind OpenMPTarget threads to maximize - * core utilization and group for memory hierarchy locality. - * - * 2) Allocate a HostThread for each OpenMPTarget thread to hold its - * topology and fan in/out data. - */ - static void initialize(unsigned thread_count = 0, unsigned use_numa_count = 0, - unsigned use_cores_per_numa = 0); - - static int is_initialized(); + static void fence(); /** \brief Return the maximum amount of concurrency. */ static int concurrency(); - //@} - //------------------------------------ - /** \brief This execution space has a topological thread pool which can be - * queried. - * - * All threads within a pool have a common memory space for which they are - * cache coherent. depth = 0 gives the number of threads in the whole pool. - * depth = 1 gives the number of threads in a NUMA region, typically - * sharing L3 cache. depth = 2 gives the number of threads at the finest - * granularity, typically sharing L1 cache. - */ - inline static int thread_pool_size(int depth = 0); - - /** \brief The rank of the executing thread in this thread pool */ - KOKKOS_INLINE_FUNCTION static int thread_pool_rank(); + //! Print configuration information to the given output stream. + void print_configuration(std::ostream&, const bool detail = false); - //------------------------------------ + static const char* name(); - inline static unsigned max_hardware_threads() { return thread_pool_size(0); } + //! Free any resources being consumed by the device. + void impl_finalize(); - KOKKOS_INLINE_FUNCTION static unsigned hardware_thread_id() { - return thread_pool_rank(); + //! Has been initialized + static int impl_is_initialized(); + + //! Initialize, telling the CUDA run-time library which device to use. + void impl_initialize(); + + inline Impl::OpenMPTargetInternal* impl_internal_space_instance() const { + return m_space_instance; } - static const char* name(); + OpenMPTarget(); + uint32_t impl_instance_id() const noexcept { return 0; } private: - static bool m_is_initialized; + Impl::OpenMPTargetInternal* m_space_instance; +}; +} // namespace Experimental + +namespace Profiling { +namespace Experimental { +template <> +struct DeviceTypeTraits<::Kokkos::Experimental::OpenMPTarget> { + static constexpr DeviceType id = + ::Kokkos::Profiling::Experimental::DeviceType::OpenMPTarget; }; } // namespace Experimental +} // namespace Profiling } // namespace Kokkos /*--------------------------------------------------------------------------*/ @@ -179,6 +155,7 @@ struct VerifyExecutionCanAccessMemorySpace< #include #include +#include #include /*--------------------------------------------------------------------------*/ diff --git a/lib/kokkos/core/src/Kokkos_OpenMPTargetSpace.hpp b/lib/kokkos/core/src/Kokkos_OpenMPTargetSpace.hpp index eef5893be5bf4ed8d3f53cef6f92c80815e487e6..9d24a342e7b27f2fa7fa2b0f67f8f2688cc57c77 100644 --- a/lib/kokkos/core/src/Kokkos_OpenMPTargetSpace.hpp +++ b/lib/kokkos/core/src/Kokkos_OpenMPTargetSpace.hpp @@ -128,6 +128,8 @@ class OpenMPTargetSpace { /**\brief Deallocate untracked memory in the space */ void deallocate(void* const arg_alloc_ptr, const size_t arg_alloc_size) const; + static constexpr const char* name() { return "OpenMPTargetSpace"; } + private: friend class Kokkos::Impl::SharedAllocationRecord< Kokkos::Experimental::OpenMPTargetSpace, void>; @@ -174,7 +176,13 @@ class SharedAllocationRecord KOKKOS_INLINE_FUNCTION static SharedAllocationRecord* allocate( const Kokkos::Experimental::OpenMPTargetSpace& arg_space, - const std::string& arg_label, const size_t arg_alloc_size); + const std::string& arg_label, const size_t arg_alloc_size) { +#if defined(KOKKOS_ACTIVE_EXECUTION_MEMORY_SPACE_HOST) + return new SharedAllocationRecord(arg_space, arg_label, arg_alloc_size); +#else + return nullptr; +#endif + } /**\brief Allocate tracked memory in the space */ static void* allocate_tracked( diff --git a/lib/kokkos/core/src/Kokkos_Pair.hpp b/lib/kokkos/core/src/Kokkos_Pair.hpp index ee9797b4b34f5ed8b1e60869fe55630248400876..23bb755e33432bcd6d352c4e77da53f9d5598806 100644 --- a/lib/kokkos/core/src/Kokkos_Pair.hpp +++ b/lib/kokkos/core/src/Kokkos_Pair.hpp @@ -78,14 +78,7 @@ struct pair { /// This calls the default constructors of T1 and T2. It won't /// compile if those default constructors are not defined and /// public. - KOKKOS_FORCEINLINE_FUNCTION constexpr -#ifdef KOKKOS_CUDA_9_DEFAULTED_BUG_WORKAROUND - pair() - : first(), second() { - } -#else - pair() = default; -#endif + KOKKOS_DEFAULTED_FUNCTION constexpr pair() = default; /// \brief Constructor that takes both elements of the pair. /// @@ -439,14 +432,7 @@ struct pair { first_type first; enum { second = 0 }; - KOKKOS_FORCEINLINE_FUNCTION constexpr -#ifdef KOKKOS_CUDA_9_DEFAULTED_BUG_WORKAROUND - pair() - : first() { - } -#else - pair() = default; -#endif + KOKKOS_DEFAULTED_FUNCTION constexpr pair() = default; KOKKOS_FORCEINLINE_FUNCTION constexpr pair(const first_type& f) : first(f) {} diff --git a/lib/kokkos/core/src/Kokkos_Parallel.hpp b/lib/kokkos/core/src/Kokkos_Parallel.hpp index 7277ce287a17df96799d734eddb57c01fc746435..775ab9203c5a20b5b3a11f32e0da14e8514533b1 100644 --- a/lib/kokkos/core/src/Kokkos_Parallel.hpp +++ b/lib/kokkos/core/src/Kokkos_Parallel.hpp @@ -114,7 +114,7 @@ struct FunctorPolicyExecutionSpace< Functor, Policy, typename enable_if_type::type, EnablePolicy> { - typedef typename Functor::device_type execution_space; + typedef typename Functor::device_type::execution_space execution_space; }; template @@ -158,16 +158,21 @@ template inline void parallel_for( const ExecPolicy& policy, const FunctorType& functor, const std::string& str = "", - typename Impl::enable_if< - Kokkos::Impl::is_execution_policy::value>::type* = 0) { + typename std::enable_if< + Kokkos::Impl::is_execution_policy::value>::type* = + nullptr) { #if defined(KOKKOS_ENABLE_PROFILING) uint64_t kpID = 0; if (Kokkos::Profiling::profileLibraryLoaded()) { Kokkos::Impl::ParallelConstructName name(str); - Kokkos::Profiling::beginParallelFor(name.get(), 0, &kpID); + Kokkos::Profiling::beginParallelFor( + name.get(), Kokkos::Profiling::Experimental::device_id(policy.space()), + &kpID); } +#else + (void)str; #endif Kokkos::Impl::shared_allocation_tracking_disable(); @@ -194,8 +199,12 @@ inline void parallel_for(const size_t work_count, const FunctorType& functor, uint64_t kpID = 0; if (Kokkos::Profiling::profileLibraryLoaded()) { Kokkos::Impl::ParallelConstructName name(str); - Kokkos::Profiling::beginParallelFor(name.get(), 0, &kpID); + Kokkos::Profiling::beginParallelFor( + name.get(), + Kokkos::Profiling::Experimental::device_id(policy().space()), &kpID); } +#else + (void)str; #endif Kokkos::Impl::shared_allocation_tracking_disable(); @@ -403,16 +412,21 @@ template inline void parallel_scan( const ExecutionPolicy& policy, const FunctorType& functor, const std::string& str = "", - typename Impl::enable_if< - Kokkos::Impl::is_execution_policy::value>::type* = 0) { + typename std::enable_if< + Kokkos::Impl::is_execution_policy::value>::type* = + nullptr) { #if defined(KOKKOS_ENABLE_PROFILING) uint64_t kpID = 0; if (Kokkos::Profiling::profileLibraryLoaded()) { Kokkos::Impl::ParallelConstructName name(str); - Kokkos::Profiling::beginParallelScan(name.get(), 0, &kpID); + Kokkos::Profiling::beginParallelScan( + name.get(), Kokkos::Profiling::Experimental::device_id(policy.space()), + &kpID); } +#else + (void)str; #endif Kokkos::Impl::shared_allocation_tracking_disable(); @@ -440,8 +454,12 @@ inline void parallel_scan(const size_t work_count, const FunctorType& functor, uint64_t kpID = 0; if (Kokkos::Profiling::profileLibraryLoaded()) { Kokkos::Impl::ParallelConstructName name(str); - Kokkos::Profiling::beginParallelScan(name.get(), 0, &kpID); + Kokkos::Profiling::beginParallelScan( + name.get(), + Kokkos::Profiling::Experimental::device_id(policy().space()), &kpID); } +#else + (void)str; #endif Kokkos::Impl::shared_allocation_tracking_disable(); @@ -479,16 +497,21 @@ template inline void parallel_scan( const ExecutionPolicy& policy, const FunctorType& functor, ReturnType& return_value, const std::string& str = "", - typename Impl::enable_if< - Kokkos::Impl::is_execution_policy::value>::type* = 0) { + typename std::enable_if< + Kokkos::Impl::is_execution_policy::value>::type* = + nullptr) { #if defined(KOKKOS_ENABLE_PROFILING) uint64_t kpID = 0; if (Kokkos::Profiling::profileLibraryLoaded()) { Kokkos::Impl::ParallelConstructName name(str); - Kokkos::Profiling::beginParallelScan(name.get(), 0, &kpID); + Kokkos::Profiling::beginParallelScan( + name.get(), Kokkos::Profiling::Experimental::device_id(policy.space()), + &kpID); } +#else + (void)str; #endif Kokkos::Impl::shared_allocation_tracking_disable(); @@ -503,7 +526,7 @@ inline void parallel_scan( Kokkos::Profiling::endParallelScan(kpID); } #endif - Kokkos::fence(); + policy.space().fence(); } template @@ -519,8 +542,12 @@ inline void parallel_scan(const size_t work_count, const FunctorType& functor, uint64_t kpID = 0; if (Kokkos::Profiling::profileLibraryLoaded()) { Kokkos::Impl::ParallelConstructName name(str); - Kokkos::Profiling::beginParallelScan(name.get(), 0, &kpID); + Kokkos::Profiling::beginParallelScan( + name.get(), + Kokkos::Profiling::Experimental::device_id(policy().space()), &kpID); } +#else + (void)str; #endif Kokkos::Impl::shared_allocation_tracking_disable(); @@ -535,7 +562,7 @@ inline void parallel_scan(const size_t work_count, const FunctorType& functor, Kokkos::Profiling::endParallelScan(kpID); } #endif - Kokkos::fence(); + execution_space().fence(); } template @@ -564,7 +591,10 @@ inline void parallel_scan(const std::string& str, const ExecutionPolicy& policy, namespace Kokkos { namespace Impl { -template +template ::value, + bool HasShmemSize = has_member_shmem_size::value> struct FunctorTeamShmemSize { KOKKOS_INLINE_FUNCTION static size_t value(const FunctorType&, int) { return 0; @@ -572,22 +602,27 @@ struct FunctorTeamShmemSize { }; template -struct FunctorTeamShmemSize< - FunctorType, - typename Impl::enable_if<0 < sizeof(&FunctorType::team_shmem_size)>::type> { +struct FunctorTeamShmemSize { static inline size_t value(const FunctorType& f, int team_size) { return f.team_shmem_size(team_size); } }; template -struct FunctorTeamShmemSize< - FunctorType, - typename Impl::enable_if<0 < sizeof(&FunctorType::shmem_size)>::type> { +struct FunctorTeamShmemSize { static inline size_t value(const FunctorType& f, int team_size) { return f.shmem_size(team_size); } }; +template +struct FunctorTeamShmemSize { + static inline size_t value(const FunctorType& /*f*/, int /*team_size*/) { + Kokkos::abort( + "Functor with both team_shmem_size and shmem_size defined is " + "not allowed"); + return 0; + } +}; } // namespace Impl } // namespace Kokkos diff --git a/lib/kokkos/core/src/Kokkos_Parallel_Reduce.hpp b/lib/kokkos/core/src/Kokkos_Parallel_Reduce.hpp index dbd33860fbc32a744a50c81970626eff61b594e7..4ef2dbdf0d7cf33564689bcbfdc5762108dc8a50 100644 --- a/lib/kokkos/core/src/Kokkos_Parallel_Reduce.hpp +++ b/lib/kokkos/core/src/Kokkos_Parallel_Reduce.hpp @@ -543,7 +543,6 @@ struct MaxLoc { KOKKOS_INLINE_FUNCTION void init(value_type& val) const { val.val = reduction_identity::max(); - ; val.loc = reduction_identity::min(); } @@ -622,7 +621,6 @@ struct MinMax { KOKKOS_INLINE_FUNCTION void init(value_type& val) const { val.max_val = reduction_identity::max(); - ; val.min_val = reduction_identity::min(); } @@ -711,7 +709,6 @@ struct MinMaxLoc { KOKKOS_INLINE_FUNCTION void init(value_type& val) const { val.max_val = reduction_identity::max(); - ; val.min_val = reduction_identity::min(); val.max_loc = reduction_identity::min(); val.min_loc = reduction_identity::min(); @@ -772,7 +769,7 @@ struct ParallelReduceReturnValue< template struct ParallelReduceReturnValue< - typename std::enable_if<(is_array::value || + typename std::enable_if<(std::is_array::value || std::is_pointer::value)>::type, ReturnType, FunctorType> { typedef Kokkos::View::type, @@ -788,7 +785,7 @@ struct ParallelReduceReturnValue< #ifdef KOKKOS_ENABLE_DEPRECATED_CODE return return_type(return_val, functor.value_count); #else - if (is_array::value) + if (std::is_array::value) return return_type(return_val); else return return_type(return_val, functor.value_count); @@ -865,6 +862,8 @@ struct ParallelReduceAdaptor { name(label); Kokkos::Profiling::beginParallelReduce(name.get(), 0, &kpID); } +#else + (void)label; #endif Kokkos::Impl::shared_allocation_tracking_disable(); @@ -915,22 +914,25 @@ struct ReducerHasTestReferenceFunction { static std::false_type test_func(...); enum { - value = std::is_same(0))>::value + value = std::is_same(nullptr))>::value }; }; -template ::value> +template ::value> struct ParallelReduceFence { - static void fence(const T&) { Kokkos::fence(); } + static void fence(const ExecutionSpace& execution_space, const T&) { + execution_space.fence(); + } }; -template -struct ParallelReduceFence, false> { - static void fence(const View){}; +template +struct ParallelReduceFence, false> { + static void fence(const ExecutionSpace&, const View){}; }; -template -struct ParallelReduceFence { - static void fence(const T& reducer) { - if (reducer.references_scalar()) Kokkos::fence(); +template +struct ParallelReduceFence { + static void fence(const ExecutionSpace& execution_space, const T& reducer) { + if (reducer.references_scalar()) execution_space.fence(); } }; } // namespace Impl @@ -976,22 +978,26 @@ template inline void parallel_reduce( const std::string& label, const PolicyType& policy, const FunctorType& functor, ReturnType& return_value, - typename Impl::enable_if< - Kokkos::Impl::is_execution_policy::value>::type* = 0) { + typename std::enable_if< + Kokkos::Impl::is_execution_policy::value>::type* = + nullptr) { Impl::ParallelReduceAdaptor::execute( label, policy, functor, return_value); - Impl::ParallelReduceFence::fence(return_value); + Impl::ParallelReduceFence::fence(policy.space(), return_value); } template inline void parallel_reduce( const PolicyType& policy, const FunctorType& functor, ReturnType& return_value, - typename Impl::enable_if< - Kokkos::Impl::is_execution_policy::value>::type* = 0) { + typename std::enable_if< + Kokkos::Impl::is_execution_policy::value>::type* = + nullptr) { Impl::ParallelReduceAdaptor::execute( "", policy, functor, return_value); - Impl::ParallelReduceFence::fence(return_value); + Impl::ParallelReduceFence::fence(policy.space(), return_value); } template @@ -1001,7 +1007,8 @@ inline void parallel_reduce(const size_t& policy, const FunctorType& functor, void, size_t, FunctorType>::policy_type policy_type; Impl::ParallelReduceAdaptor::execute( "", policy_type(0, policy), functor, return_value); - Impl::ParallelReduceFence::fence(return_value); + Impl::ParallelReduceFence:: + fence(typename policy_type::execution_space(), return_value); } template @@ -1012,7 +1019,8 @@ inline void parallel_reduce(const std::string& label, const size_t& policy, void, size_t, FunctorType>::policy_type policy_type; Impl::ParallelReduceAdaptor::execute( label, policy_type(0, policy), functor, return_value); - Impl::ParallelReduceFence::fence(return_value); + Impl::ParallelReduceFence:: + fence(typename policy_type::execution_space(), return_value); } // ReturnValue as View or Reducer: take by copy to allow for inline construction @@ -1021,24 +1029,28 @@ template inline void parallel_reduce( const std::string& label, const PolicyType& policy, const FunctorType& functor, const ReturnType& return_value, - typename Impl::enable_if< - Kokkos::Impl::is_execution_policy::value>::type* = 0) { + typename std::enable_if< + Kokkos::Impl::is_execution_policy::value>::type* = + nullptr) { ReturnType return_value_impl = return_value; Impl::ParallelReduceAdaptor::execute( label, policy, functor, return_value_impl); - Impl::ParallelReduceFence::fence(return_value); + Impl::ParallelReduceFence::fence(policy.space(), return_value); } template inline void parallel_reduce( const PolicyType& policy, const FunctorType& functor, const ReturnType& return_value, - typename Impl::enable_if< - Kokkos::Impl::is_execution_policy::value>::type* = 0) { + typename std::enable_if< + Kokkos::Impl::is_execution_policy::value>::type* = + nullptr) { ReturnType return_value_impl = return_value; Impl::ParallelReduceAdaptor::execute( "", policy, functor, return_value_impl); - Impl::ParallelReduceFence::fence(return_value); + Impl::ParallelReduceFence::fence(policy.space(), return_value); } template @@ -1049,7 +1061,8 @@ inline void parallel_reduce(const size_t& policy, const FunctorType& functor, ReturnType return_value_impl = return_value; Impl::ParallelReduceAdaptor::execute( "", policy_type(0, policy), functor, return_value_impl); - Impl::ParallelReduceFence::fence(return_value); + Impl::ParallelReduceFence:: + fence(typename policy_type::execution_space(), return_value); } template @@ -1061,7 +1074,8 @@ inline void parallel_reduce(const std::string& label, const size_t& policy, ReturnType return_value_impl = return_value; Impl::ParallelReduceAdaptor::execute( label, policy_type(0, policy), functor, return_value_impl); - Impl::ParallelReduceFence::fence(return_value); + Impl::ParallelReduceFence:: + fence(typename policy_type::execution_space(), return_value); } // No Return Argument @@ -1070,8 +1084,9 @@ template inline void parallel_reduce( const std::string& label, const PolicyType& policy, const FunctorType& functor, - typename Impl::enable_if< - Kokkos::Impl::is_execution_policy::value>::type* = 0) { + typename std::enable_if< + Kokkos::Impl::is_execution_policy::value>::type* = + nullptr) { typedef Kokkos::Impl::FunctorValueTraits ValueTraits; typedef typename Kokkos::Impl::if_c< (ValueTraits::StaticValueSize != 0), typename ValueTraits::value_type, @@ -1094,8 +1109,9 @@ inline void parallel_reduce( template inline void parallel_reduce( const PolicyType& policy, const FunctorType& functor, - typename Impl::enable_if< - Kokkos::Impl::is_execution_policy::value>::type* = 0) { + typename std::enable_if< + Kokkos::Impl::is_execution_policy::value>::type* = + nullptr) { typedef Kokkos::Impl::FunctorValueTraits ValueTraits; typedef typename Kokkos::Impl::if_c< (ValueTraits::StaticValueSize != 0), typename ValueTraits::value_type, diff --git a/lib/kokkos/core/src/Kokkos_Profiling_ProfileSection.hpp b/lib/kokkos/core/src/Kokkos_Profiling_ProfileSection.hpp index 3c667f4432030862311dbfa533299f2341aac3f8..3999ccb96632bc2c4b6d01832ed2464e584a6b5c 100644 --- a/lib/kokkos/core/src/Kokkos_Profiling_ProfileSection.hpp +++ b/lib/kokkos/core/src/Kokkos_Profiling_ProfileSection.hpp @@ -1,46 +1,46 @@ /* -//@HEADER -// ************************************************************************ -// -// Kokkos v. 3.0 + //@HEADER + // ************************************************************************ + // + // Kokkos v. 3.0 // Copyright (2020) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). -// -// Under the terms of Contract DE-NA0003525 with NTESS, -// the U.S. Government retains certain rights in this software. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Christian R. Trott (crtrott@sandia.gov) -// -// ************************************************************************ -//@HEADER -*/ + // + // Under the terms of Contract DE-NA0003525 with NTESS, + // the U.S. Government retains certain rights in this software. + // + // Redistribution and use in source and binary forms, with or without + // modification, are permitted provided that the following conditions are + // met: + // + // 1. Redistributions of source code must retain the above copyright + // notice, this list of conditions and the following disclaimer. + // + // 2. Redistributions in binary form must reproduce the above copyright + // notice, this list of conditions and the following disclaimer in the + // documentation and/or other materials provided with the distribution. + // + // 3. Neither the name of the Corporation nor the names of the + // contributors may be used to endorse or promote products derived from + // this software without specific prior written permission. + // + // THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY + // EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + // PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE + // CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + // PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + // LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + // NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + // + // Questions? Contact Christian R. Trott (crtrott@sandia.gov) + // + // ************************************************************************ + //@HEADER + */ #ifndef KOKKOSP_PROFILE_SECTION_HPP #define KOKKOSP_PROFILE_SECTION_HPP diff --git a/lib/kokkos/core/src/Kokkos_Qthreads.hpp b/lib/kokkos/core/src/Kokkos_Qthreads.hpp deleted file mode 100644 index e10bd48593aa19b43c75acaba74c16911338b497..0000000000000000000000000000000000000000 --- a/lib/kokkos/core/src/Kokkos_Qthreads.hpp +++ /dev/null @@ -1,196 +0,0 @@ -/* -//@HEADER -// ************************************************************************ -// -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering -// Solutions of Sandia, LLC (NTESS). -// -// Under the terms of Contract DE-NA0003525 with NTESS, -// the U.S. Government retains certain rights in this software. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Christian R. Trott (crtrott@sandia.gov) -// -// ************************************************************************ -//@HEADER -*/ - -#ifndef KOKKOS_QTHREADS_HPP -#define KOKKOS_QTHREADS_HPP - -#include -#if defined(KOKKOS_ENABLE_QTHREADS) - -#include - -// Defines to enable experimental Qthreads functionality. -#define QTHREAD_LOCAL_PRIORITY -#define CLONED_TASKS - -#include - -#include -#include - -#include -#include -#include -//#include -//#include -//#include // Uncomment when Tasking working. -#include -#include -#include - -/*--------------------------------------------------------------------------*/ - -namespace Kokkos { - -namespace Impl { - -class QthreadsExec; - -} // namespace Impl - -} // namespace Kokkos - -/*--------------------------------------------------------------------------*/ - -namespace Kokkos { - -/** \brief Execution space supported by Qthreads */ -class Qthreads { - public: - //! \name Type declarations that all Kokkos devices must provide. - //@{ - - //! Tag this class as an execution space - typedef Qthreads execution_space; - typedef Kokkos::HostSpace memory_space; - //! This execution space preferred device_type - typedef Kokkos::Device device_type; - - typedef Kokkos::LayoutRight array_layout; - typedef memory_space::size_type size_type; - - typedef ScratchMemorySpace scratch_memory_space; - - //@} - /*------------------------------------------------------------------------*/ - - /** \brief Initialization will construct one or more instances */ - static Qthreads& instance(int = 0); - - /** \brief Set the execution space to a "sleep" state. - * - * This function sets the "sleep" state in which it is not ready for work. - * This may consume less resources than in an "ready" state, - * but it may also take time to transition to the "ready" state. - * - * \return True if enters or is in the "sleep" state. - * False if functions are currently executing. - */ - bool sleep(); - - /** \brief Wake from the sleep state. - * - * \return True if enters or is in the "ready" state. - * False if functions are currently executing. - */ - static bool wake(); - - /** \brief Wait until all dispatched functions to complete. - * - * The parallel_for or parallel_reduce dispatch of a functor may - * return asynchronously, before the functor completes. This - * method does not return until all dispatched functors on this - * device have completed. - */ - static void fence(); - - /*------------------------------------------------------------------------*/ - - static int in_parallel(); - - static int is_initialized(); - - /** \brief Return maximum amount of concurrency */ - static int concurrency(); - - static void initialize(int thread_count); - static void finalize(); - - /** \brief Print configuration information to the given output stream. */ - static void print_configuration(std::ostream&, const bool detail = false); - - int shepherd_size() const; - int shepherd_worker_size() const; - - static const char* name(); -}; - -} // namespace Kokkos - -/*--------------------------------------------------------------------------*/ - -namespace Kokkos { - -namespace Impl { - -template <> -struct MemorySpaceAccess { - enum { assignable = false }; - enum { accessible = true }; - enum { deepcopy = false }; -}; - -template <> -struct VerifyExecutionCanAccessMemorySpace< - Kokkos::Qthreads::memory_space, Kokkos::Qthreads::scratch_memory_space> { - enum { value = true }; - inline static void verify(void) {} - inline static void verify(const void*) {} -}; - -} // namespace Impl - -} // namespace Kokkos - -/*--------------------------------------------------------------------------*/ - -#include -#include -//#include // Uncomment when Tasking -// working. #include // Uncomment when -// Tasking working. - -#endif // #define KOKKOS_ENABLE_QTHREADS -#endif // #define KOKKOS_QTHREADS_HPP diff --git a/lib/kokkos/core/src/Kokkos_ROCmSpace.hpp b/lib/kokkos/core/src/Kokkos_ROCmSpace.hpp index df13a7c2aae6f6f1794dff03a91c591c9da7fc00..56a1a93b9d0350a6364a9c5c56a9d5d004e6f6cf 100644 --- a/lib/kokkos/core/src/Kokkos_ROCmSpace.hpp +++ b/lib/kokkos/core/src/Kokkos_ROCmSpace.hpp @@ -481,7 +481,7 @@ struct VerifyExecutionCanAccessMemorySpace< /** Running in ROCmSpace attempting to access an unknown space: error */ template struct VerifyExecutionCanAccessMemorySpace< - typename enable_if< + typename std::enable_if< !is_same::value, Kokkos::Experimental::ROCmSpace>::type, OtherSpace> { diff --git a/lib/kokkos/core/src/Kokkos_ScratchSpace.hpp b/lib/kokkos/core/src/Kokkos_ScratchSpace.hpp index c2337f08a111d5e875977f8fbf9af3d64e108362..708e0218b7b9327de6945dd698f8d72b7a60622c 100644 --- a/lib/kokkos/core/src/Kokkos_ScratchSpace.hpp +++ b/lib/kokkos/core/src/Kokkos_ScratchSpace.hpp @@ -92,6 +92,8 @@ class ScratchMemorySpace { typedef typename ExecSpace::array_layout array_layout; typedef typename ExecSpace::size_type size_type; + static constexpr const char* name() { return "ScratchMemorySpace"; } + template KOKKOS_INLINE_FUNCTION static IntType align(const IntType& size) { return (size + MASK) & ~MASK; @@ -108,13 +110,13 @@ class ScratchMemorySpace { #ifdef KOKKOS_DEBUG // mfh 23 Jun 2015: printf call consumes 25 registers // in a CUDA build, so only print in debug mode. The - // function still returns NULL if not enough memory. + // function still returns nullptr if not enough memory. printf( "ScratchMemorySpace<...>::get_shmem: Failed to allocate " "%ld byte(s); remaining capacity is %ld byte(s)\n", long(size), long(m_end_L0 - m_iter_L0)); #endif // KOKKOS_DEBUG - tmp = 0; + tmp = nullptr; } return tmp; } else { @@ -124,13 +126,13 @@ class ScratchMemorySpace { #ifdef KOKKOS_DEBUG // mfh 23 Jun 2015: printf call consumes 25 registers // in a CUDA build, so only print in debug mode. The - // function still returns NULL if not enough memory. + // function still returns nullptr if not enough memory. printf( "ScratchMemorySpace<...>::get_shmem: Failed to allocate " "%ld byte(s); remaining capacity is %ld byte(s)\n", long(size), long(m_end_L1 - m_iter_L1)); #endif // KOKKOS_DEBUG - tmp = 0; + tmp = nullptr; } return tmp; } @@ -151,13 +153,13 @@ class ScratchMemorySpace { #ifdef KOKKOS_DEBUG // mfh 23 Jun 2015: printf call consumes 25 registers // in a CUDA build, so only print in debug mode. The - // function still returns NULL if not enough memory. + // function still returns nullptr if not enough memory. printf( "ScratchMemorySpace<...>::get_shmem: Failed to allocate " "%ld byte(s); remaining capacity is %ld byte(s)\n", long(size), long(m_end_L0 - m_iter_L0)); #endif // KOKKOS_DEBUG - tmp = 0; + tmp = nullptr; } return tmp; } else { @@ -171,13 +173,13 @@ class ScratchMemorySpace { #ifdef KOKKOS_DEBUG // mfh 23 Jun 2015: printf call consumes 25 registers // in a CUDA build, so only print in debug mode. The - // function still returns NULL if not enough memory. + // function still returns nullptr if not enough memory. printf( "ScratchMemorySpace<...>::get_shmem: Failed to allocate " "%ld byte(s); remaining capacity is %ld byte(s)\n", long(size), long(m_end_L1 - m_iter_L1)); #endif // KOKKOS_DEBUG - tmp = 0; + tmp = nullptr; } return tmp; } @@ -186,7 +188,7 @@ class ScratchMemorySpace { template KOKKOS_INLINE_FUNCTION ScratchMemorySpace(void* ptr_L0, const IntType& size_L0, - void* ptr_L1 = NULL, + void* ptr_L1 = nullptr, const IntType& size_L1 = 0) : m_iter_L0((char*)ptr_L0), m_end_L0(m_iter_L0 + size_L0), diff --git a/lib/kokkos/core/src/Kokkos_Serial.hpp b/lib/kokkos/core/src/Kokkos_Serial.hpp index e30598be21244e28b565f2b2c6bb80300ee339b6..1f97998ea50d3c8b8aec335db8837ef41c3acdb5 100644 --- a/lib/kokkos/core/src/Kokkos_Serial.hpp +++ b/lib/kokkos/core/src/Kokkos_Serial.hpp @@ -181,11 +181,20 @@ class Serial { return impl_thread_pool_size(0); } #endif + uint32_t impl_instance_id() const noexcept { return 0; } static const char* name(); //-------------------------------------------------------------------------- }; +namespace Profiling { +namespace Experimental { +template <> +struct DeviceTypeTraits { + static constexpr DeviceType id = DeviceType::Serial; +}; +} // namespace Experimental +} // namespace Profiling } // namespace Kokkos /*--------------------------------------------------------------------------*/ @@ -257,6 +266,11 @@ class TeamPolicyInternal //! Execution space of this execution policy: typedef Kokkos::Serial execution_space; + const typename traits::execution_space& space() const { + static typename traits::execution_space m_space; + return m_space; + } + TeamPolicyInternal& operator=(const TeamPolicyInternal& p) { m_league_size = p.m_league_size; m_team_scratch_size[0] = p.m_team_scratch_size[0]; @@ -641,7 +655,7 @@ class ParallelReduce, ReducerType, const HostViewType& arg_result_view, typename std::enable_if::value && !Kokkos::is_reducer_type::value, - void*>::type = NULL) + void*>::type = nullptr) : m_functor(arg_functor), m_policy(arg_policy), m_reducer(InvalidType()), @@ -912,7 +926,7 @@ class ParallelReduce, ReducerType, const HostViewType& arg_result_view, typename std::enable_if::value && !Kokkos::is_reducer_type::value, - void*>::type = NULL) + void*>::type = nullptr) : m_functor(arg_functor), m_mdr_policy(arg_policy), m_policy(Policy(0, m_mdr_policy.m_num_tiles).set_chunk_size(1)), @@ -1087,7 +1101,7 @@ class ParallelReduce, const ViewType& arg_result, typename std::enable_if::value && !Kokkos::is_reducer_type::value, - void*>::type = NULL) + void*>::type = nullptr) : m_functor(arg_functor), m_league(arg_policy.league_size()), m_reducer(InvalidType()), diff --git a/lib/kokkos/core/src/Kokkos_TaskScheduler.hpp b/lib/kokkos/core/src/Kokkos_TaskScheduler.hpp index 4a78d6aca1cbf4717032271f5217d9d23802ca76..6b9608d6290a51ecf04b5643bd7f4a15499cd643 100644 --- a/lib/kokkos/core/src/Kokkos_TaskScheduler.hpp +++ b/lib/kokkos/core/src/Kokkos_TaskScheduler.hpp @@ -143,7 +143,7 @@ class BasicTaskScheduler : public Impl::TaskSchedulerBase { Kokkos::BasicFuture _spawn_impl(DepTaskType* arg_predecessor_task, TaskPriority arg_priority, typename task_base::function_type arg_function, - typename task_base::destroy_type arg_destroy, + typename task_base::destroy_type /*arg_destroy*/, FunctorType&& arg_functor) { using functor_future_type = future_type_for_functor::type>; @@ -203,7 +203,7 @@ class BasicTaskScheduler : public Impl::TaskSchedulerBase { public: KOKKOS_INLINE_FUNCTION - BasicTaskScheduler() : m_track(), m_queue(0) {} + BasicTaskScheduler() : m_track(), m_queue(nullptr) {} KOKKOS_INLINE_FUNCTION BasicTaskScheduler(BasicTaskScheduler&& rhs) noexcept @@ -231,7 +231,7 @@ class BasicTaskScheduler : public Impl::TaskSchedulerBase { } explicit BasicTaskScheduler(memory_pool const& arg_memory_pool) noexcept - : m_track(), m_queue(0) { + : m_track(), m_queue(nullptr) { typedef Kokkos::Impl::SharedAllocationRecord record_type; @@ -349,7 +349,7 @@ class BasicTaskScheduler : public Impl::TaskSchedulerBase { task->m_priority = static_cast(arg_priority); - task->add_dependence((task_base*)0); + task->add_dependence(nullptr); // Postcondition: task is in Executing-Respawn state } @@ -380,8 +380,8 @@ class BasicTaskScheduler : public Impl::TaskSchedulerBase { } } - if (q != 0) { // this should probably handle the queue == 0 case, but - // this is deprecated code anyway + if (q != nullptr) { // this should probably handle the queue == 0 case, + // but this is deprecated code anyway size_t const alloc_size = q->when_all_allocation_size(narg); @@ -459,7 +459,7 @@ class BasicTaskScheduler : public Impl::TaskSchedulerBase { for (int i = 0; i < narg; ++i) { const input_type arg_f = func(i); - if (0 != arg_f.m_task) { + if (nullptr != arg_f.m_task) { // Not scheduled, so task scheduler is not yet set // if ( m_queue != static_cast< BasicTaskScheduler const * >( // arg_f.m_task->m_scheduler )->m_queue ) { diff --git a/lib/kokkos/core/src/Kokkos_Threads.hpp b/lib/kokkos/core/src/Kokkos_Threads.hpp index d44042b062b5bd98e020e1bc6298ecffebd4df8f..9dd644df2eac700db270cccd9f95c1fc91060ec1 100644 --- a/lib/kokkos/core/src/Kokkos_Threads.hpp +++ b/lib/kokkos/core/src/Kokkos_Threads.hpp @@ -56,6 +56,7 @@ #include #include #include +#include #include /*--------------------------------------------------------------------------*/ @@ -200,11 +201,21 @@ class Threads { } #endif + uint32_t impl_instance_id() const noexcept { return 0; } + static const char* name(); //@} //---------------------------------------- }; +namespace Profiling { +namespace Experimental { +template <> +struct DeviceTypeTraits { + static constexpr DeviceType id = DeviceType::Threads; +}; +} // namespace Experimental +} // namespace Profiling } // namespace Kokkos /*--------------------------------------------------------------------------*/ diff --git a/lib/kokkos/core/src/Kokkos_Timer.hpp b/lib/kokkos/core/src/Kokkos_Timer.hpp index 117f097f66d01d46812431c7fdb58dc834526dac..1dab73b44cb325f74f095f0232614d892c539b7f 100644 --- a/lib/kokkos/core/src/Kokkos_Timer.hpp +++ b/lib/kokkos/core/src/Kokkos_Timer.hpp @@ -60,7 +60,7 @@ class Timer { public: inline void reset() { m_old = std::chrono::high_resolution_clock::now(); } - inline ~Timer() {} + inline ~Timer() = default; inline Timer() { reset(); } diff --git a/lib/kokkos/core/src/Kokkos_Vectorization.hpp b/lib/kokkos/core/src/Kokkos_Vectorization.hpp index 2604538b1c113c001f74be77069784510f691686..cd24734100e6bf07f32e1e20a9096e81734a4848 100644 --- a/lib/kokkos/core/src/Kokkos_Vectorization.hpp +++ b/lib/kokkos/core/src/Kokkos_Vectorization.hpp @@ -49,6 +49,8 @@ #if defined(KOKKOS_ENABLE_CUDA) #include +#elif defined(KOKKOS_ENABLE_HIP) +#include #endif #endif diff --git a/lib/kokkos/core/src/Kokkos_View.hpp b/lib/kokkos/core/src/Kokkos_View.hpp index 6610bb842bd549ade6c015ec786d3a4a2b49d510..3d68d780a2ee92eb67e0a9215f23566915eaf40b 100644 --- a/lib/kokkos/core/src/Kokkos_View.hpp +++ b/lib/kokkos/core/src/Kokkos_View.hpp @@ -450,6 +450,70 @@ struct ViewTraits { template class View; +template +struct is_always_assignable_impl; + +template +struct is_always_assignable_impl, + Kokkos::View> { + using mapping_type = Kokkos::Impl::ViewMapping< + typename Kokkos::View::traits, + typename Kokkos::View::traits, + typename Kokkos::View::traits::specialize>; + + constexpr static bool value = + mapping_type::is_assignable && + static_cast(Kokkos::View::rank_dynamic) >= + static_cast(Kokkos::View::rank_dynamic); +}; + +template +using is_always_assignable = is_always_assignable_impl< + typename std::remove_reference::type, + typename std::remove_const< + typename std::remove_reference::type>::type>; + +#ifdef KOKKOS_ENABLE_CXX17 +template +inline constexpr bool is_always_assignable_v = + is_always_assignable::value; +#endif + +template +constexpr bool is_assignable(const Kokkos::View& dst, + const Kokkos::View& src) { + using DstTraits = typename Kokkos::View::traits; + using SrcTraits = typename Kokkos::View::traits; + using mapping_type = + Kokkos::Impl::ViewMapping; + +#ifdef KOKKOS_ENABLE_CXX17 + return is_always_assignable_v, + Kokkos::View> || +#else + return is_always_assignable, + Kokkos::View>::value || +#endif + (mapping_type::is_assignable && + ((DstTraits::dimension::rank_dynamic >= 1) || + (dst.static_extent(0) == src.extent(0))) && + ((DstTraits::dimension::rank_dynamic >= 2) || + (dst.static_extent(1) == src.extent(1))) && + ((DstTraits::dimension::rank_dynamic >= 3) || + (dst.static_extent(2) == src.extent(2))) && + ((DstTraits::dimension::rank_dynamic >= 4) || + (dst.static_extent(3) == src.extent(3))) && + ((DstTraits::dimension::rank_dynamic >= 5) || + (dst.static_extent(4) == src.extent(4))) && + ((DstTraits::dimension::rank_dynamic >= 6) || + (dst.static_extent(5) == src.extent(5))) && + ((DstTraits::dimension::rank_dynamic >= 7) || + (dst.static_extent(6) == src.extent(6))) && + ((DstTraits::dimension::rank_dynamic >= 8) || + (dst.static_extent(7) == src.extent(7)))); +} + } /* namespace Kokkos */ //---------------------------------------------------------------------------- @@ -793,19 +857,18 @@ class View : public ViewTraits { //---------------------------------------- private: - enum { - is_layout_left = - std::is_same::value, + static constexpr bool is_layout_left = + std::is_same::value; - is_layout_right = - std::is_same::value, + static constexpr bool is_layout_right = + std::is_same::value; - is_layout_stride = std::is_same::value, + static constexpr bool is_layout_stride = + std::is_same::value; - is_default_map = std::is_same::value && - (is_layout_left || is_layout_right || is_layout_stride) - }; + static constexpr bool is_default_map = + std::is_same::value && + (is_layout_left || is_layout_right || is_layout_stride); template ::accessible> @@ -823,6 +886,8 @@ class View : public ViewTraits { #if defined(KOKKOS_ENABLE_DEBUG_BOUNDS_CHECK) +#define KOKKOS_IMPL_SINK(ARG) ARG + #define KOKKOS_IMPL_VIEW_OPERATOR_VERIFY(ARG) \ View::template verify_space< \ Kokkos::Impl::ActiveExecutionMemorySpace>::check(); \ @@ -830,6 +895,8 @@ class View : public ViewTraits { #else +#define KOKKOS_IMPL_SINK(ARG) + #define KOKKOS_IMPL_VIEW_OPERATOR_VERIFY(ARG) \ View::template verify_space< \ Kokkos::Impl::ActiveExecutionMemorySpace>::check(); @@ -1452,8 +1519,9 @@ class View : public ViewTraits { typename std::enable_if<(Kokkos::Impl::are_integral::value && (0 == Rank)), reference_type>::type - access(Args... args) const { - KOKKOS_IMPL_VIEW_OPERATOR_VERIFY((m_track, m_map, args...)) + access(Args... KOKKOS_IMPL_SINK(args)) const { + KOKKOS_IMPL_VIEW_OPERATOR_VERIFY( + KOKKOS_IMPL_SINK((m_track, m_map, args...))) return m_map.reference(); } @@ -1462,8 +1530,9 @@ class View : public ViewTraits { typename std::enable_if<(Kokkos::Impl::are_integral::value && (1 == Rank) && !is_default_map), reference_type>::type - access(const I0& i0, Args... args) const { - KOKKOS_IMPL_VIEW_OPERATOR_VERIFY((m_track, m_map, i0, args...)) + access(const I0& i0, Args... KOKKOS_IMPL_SINK(args)) const { + KOKKOS_IMPL_VIEW_OPERATOR_VERIFY( + KOKKOS_IMPL_SINK((m_track, m_map, i0, args...))) return m_map.reference(i0); } @@ -1473,8 +1542,9 @@ class View : public ViewTraits { (1 == Rank) && is_default_map && !is_layout_stride), reference_type>::type - access(const I0& i0, Args... args) const { - KOKKOS_IMPL_VIEW_OPERATOR_VERIFY((m_track, m_map, i0, args...)) + access(const I0& i0, Args... KOKKOS_IMPL_SINK(args)) const { + KOKKOS_IMPL_VIEW_OPERATOR_VERIFY( + KOKKOS_IMPL_SINK((m_track, m_map, i0, args...))) return m_map.m_impl_handle[i0]; } @@ -1484,8 +1554,9 @@ class View : public ViewTraits { (1 == Rank) && is_default_map && is_layout_stride), reference_type>::type - access(const I0& i0, Args... args) const { - KOKKOS_IMPL_VIEW_OPERATOR_VERIFY((m_track, m_map, i0, args...)) + access(const I0& i0, Args... KOKKOS_IMPL_SINK(args)) const { + KOKKOS_IMPL_VIEW_OPERATOR_VERIFY( + KOKKOS_IMPL_SINK((m_track, m_map, i0, args...))) return m_map.m_impl_handle[m_map.m_impl_offset.m_stride.S0 * i0]; } @@ -1494,8 +1565,9 @@ class View : public ViewTraits { (Kokkos::Impl::are_integral::value && (2 == Rank) && !is_default_map), reference_type>::type - access(const I0& i0, const I1& i1, Args... args) const { - KOKKOS_IMPL_VIEW_OPERATOR_VERIFY((m_track, m_map, i0, i1, args...)) + access(const I0& i0, const I1& i1, Args... KOKKOS_IMPL_SINK(args)) const { + KOKKOS_IMPL_VIEW_OPERATOR_VERIFY( + KOKKOS_IMPL_SINK((m_track, m_map, i0, i1, args...))) return m_map.reference(i0, i1); } @@ -1504,8 +1576,9 @@ class View : public ViewTraits { (Kokkos::Impl::are_integral::value && (2 == Rank) && is_default_map && is_layout_left && (traits::rank_dynamic == 0)), reference_type>::type - access(const I0& i0, const I1& i1, Args... args) const { - KOKKOS_IMPL_VIEW_OPERATOR_VERIFY((m_track, m_map, i0, i1, args...)) + access(const I0& i0, const I1& i1, Args... KOKKOS_IMPL_SINK(args)) const { + KOKKOS_IMPL_VIEW_OPERATOR_VERIFY( + KOKKOS_IMPL_SINK((m_track, m_map, i0, i1, args...))) return m_map.m_impl_handle[i0 + m_map.m_impl_offset.m_dim.N0 * i1]; } @@ -1514,8 +1587,9 @@ class View : public ViewTraits { (Kokkos::Impl::are_integral::value && (2 == Rank) && is_default_map && is_layout_left && (traits::rank_dynamic != 0)), reference_type>::type - access(const I0& i0, const I1& i1, Args... args) const { - KOKKOS_IMPL_VIEW_OPERATOR_VERIFY((m_track, m_map, i0, i1, args...)) + access(const I0& i0, const I1& i1, Args... KOKKOS_IMPL_SINK(args)) const { + KOKKOS_IMPL_VIEW_OPERATOR_VERIFY( + KOKKOS_IMPL_SINK((m_track, m_map, i0, i1, args...))) return m_map.m_impl_handle[i0 + m_map.m_impl_offset.m_stride * i1]; } @@ -1524,8 +1598,9 @@ class View : public ViewTraits { (Kokkos::Impl::are_integral::value && (2 == Rank) && is_default_map && is_layout_right && (traits::rank_dynamic == 0)), reference_type>::type - access(const I0& i0, const I1& i1, Args... args) const { - KOKKOS_IMPL_VIEW_OPERATOR_VERIFY((m_track, m_map, i0, i1, args...)) + access(const I0& i0, const I1& i1, Args... KOKKOS_IMPL_SINK(args)) const { + KOKKOS_IMPL_VIEW_OPERATOR_VERIFY( + KOKKOS_IMPL_SINK((m_track, m_map, i0, i1, args...))) return m_map.m_impl_handle[i1 + m_map.m_impl_offset.m_dim.N1 * i0]; } @@ -1534,8 +1609,9 @@ class View : public ViewTraits { (Kokkos::Impl::are_integral::value && (2 == Rank) && is_default_map && is_layout_right && (traits::rank_dynamic != 0)), reference_type>::type - access(const I0& i0, const I1& i1, Args... args) const { - KOKKOS_IMPL_VIEW_OPERATOR_VERIFY((m_track, m_map, i0, i1, args...)) + access(const I0& i0, const I1& i1, Args... KOKKOS_IMPL_SINK(args)) const { + KOKKOS_IMPL_VIEW_OPERATOR_VERIFY( + KOKKOS_IMPL_SINK((m_track, m_map, i0, i1, args...))) return m_map.m_impl_handle[i1 + m_map.m_impl_offset.m_stride * i0]; } @@ -1544,8 +1620,9 @@ class View : public ViewTraits { (Kokkos::Impl::are_integral::value && (2 == Rank) && is_default_map && is_layout_stride), reference_type>::type - access(const I0& i0, const I1& i1, Args... args) const { - KOKKOS_IMPL_VIEW_OPERATOR_VERIFY((m_track, m_map, i0, i1, args...)) + access(const I0& i0, const I1& i1, Args... KOKKOS_IMPL_SINK(args)) const { + KOKKOS_IMPL_VIEW_OPERATOR_VERIFY( + KOKKOS_IMPL_SINK((m_track, m_map, i0, i1, args...))) return m_map.m_impl_handle[i0 * m_map.m_impl_offset.m_stride.S0 + i1 * m_map.m_impl_offset.m_stride.S1]; } @@ -1558,8 +1635,10 @@ class View : public ViewTraits { (Kokkos::Impl::are_integral::value && (3 == Rank) && is_default_map), reference_type>::type - access(const I0& i0, const I1& i1, const I2& i2, Args... args) const { - KOKKOS_IMPL_VIEW_OPERATOR_VERIFY((m_track, m_map, i0, i1, i2, args...)) + access(const I0& i0, const I1& i1, const I2& i2, + Args... KOKKOS_IMPL_SINK(args)) const { + KOKKOS_IMPL_VIEW_OPERATOR_VERIFY( + KOKKOS_IMPL_SINK((m_track, m_map, i0, i1, i2, args...))) return m_map.m_impl_handle[m_map.m_impl_offset(i0, i1, i2)]; } @@ -1568,8 +1647,10 @@ class View : public ViewTraits { (Kokkos::Impl::are_integral::value && (3 == Rank) && !is_default_map), reference_type>::type - access(const I0& i0, const I1& i1, const I2& i2, Args... args) const { - KOKKOS_IMPL_VIEW_OPERATOR_VERIFY((m_track, m_map, i0, i1, i2, args...)) + access(const I0& i0, const I1& i1, const I2& i2, + Args... KOKKOS_IMPL_SINK(args)) const { + KOKKOS_IMPL_VIEW_OPERATOR_VERIFY( + KOKKOS_IMPL_SINK((m_track, m_map, i0, i1, i2, args...))) return m_map.reference(i0, i1, i2); } @@ -1582,8 +1663,9 @@ class View : public ViewTraits { (4 == Rank) && is_default_map), reference_type>::type access(const I0& i0, const I1& i1, const I2& i2, const I3& i3, - Args... args) const { - KOKKOS_IMPL_VIEW_OPERATOR_VERIFY((m_track, m_map, i0, i1, i2, i3, args...)) + Args... KOKKOS_IMPL_SINK(args)) const { + KOKKOS_IMPL_VIEW_OPERATOR_VERIFY( + KOKKOS_IMPL_SINK((m_track, m_map, i0, i1, i2, i3, args...))) return m_map.m_impl_handle[m_map.m_impl_offset(i0, i1, i2, i3)]; } @@ -1593,8 +1675,9 @@ class View : public ViewTraits { (4 == Rank) && !is_default_map), reference_type>::type access(const I0& i0, const I1& i1, const I2& i2, const I3& i3, - Args... args) const { - KOKKOS_IMPL_VIEW_OPERATOR_VERIFY((m_track, m_map, i0, i1, i2, i3, args...)) + Args... KOKKOS_IMPL_SINK(args)) const { + KOKKOS_IMPL_VIEW_OPERATOR_VERIFY( + KOKKOS_IMPL_SINK((m_track, m_map, i0, i1, i2, i3, args...))) return m_map.reference(i0, i1, i2, i3); } @@ -1608,9 +1691,9 @@ class View : public ViewTraits { (5 == Rank) && is_default_map), reference_type>::type access(const I0& i0, const I1& i1, const I2& i2, const I3& i3, const I4& i4, - Args... args) const { + Args... KOKKOS_IMPL_SINK(args)) const { KOKKOS_IMPL_VIEW_OPERATOR_VERIFY( - (m_track, m_map, i0, i1, i2, i3, i4, args...)) + KOKKOS_IMPL_SINK((m_track, m_map, i0, i1, i2, i3, i4, args...))) return m_map.m_impl_handle[m_map.m_impl_offset(i0, i1, i2, i3, i4)]; } @@ -1621,9 +1704,9 @@ class View : public ViewTraits { (5 == Rank) && !is_default_map), reference_type>::type access(const I0& i0, const I1& i1, const I2& i2, const I3& i3, const I4& i4, - Args... args) const { + Args... KOKKOS_IMPL_SINK(args)) const { KOKKOS_IMPL_VIEW_OPERATOR_VERIFY( - (m_track, m_map, i0, i1, i2, i3, i4, args...)) + KOKKOS_IMPL_SINK((m_track, m_map, i0, i1, i2, i3, i4, args...))) return m_map.reference(i0, i1, i2, i3, i4); } @@ -1637,9 +1720,9 @@ class View : public ViewTraits { (6 == Rank) && is_default_map), reference_type>::type access(const I0& i0, const I1& i1, const I2& i2, const I3& i3, const I4& i4, - const I5& i5, Args... args) const { + const I5& i5, Args... KOKKOS_IMPL_SINK(args)) const { KOKKOS_IMPL_VIEW_OPERATOR_VERIFY( - (m_track, m_map, i0, i1, i2, i3, i4, i5, args...)) + KOKKOS_IMPL_SINK((m_track, m_map, i0, i1, i2, i3, i4, i5, args...))) return m_map.m_impl_handle[m_map.m_impl_offset(i0, i1, i2, i3, i4, i5)]; } @@ -1650,9 +1733,9 @@ class View : public ViewTraits { (6 == Rank) && !is_default_map), reference_type>::type access(const I0& i0, const I1& i1, const I2& i2, const I3& i3, const I4& i4, - const I5& i5, Args... args) const { + const I5& i5, Args... KOKKOS_IMPL_SINK(args)) const { KOKKOS_IMPL_VIEW_OPERATOR_VERIFY( - (m_track, m_map, i0, i1, i2, i3, i4, i5, args...)) + KOKKOS_IMPL_SINK((m_track, m_map, i0, i1, i2, i3, i4, i5, args...))) return m_map.reference(i0, i1, i2, i3, i4, i5); } @@ -1666,9 +1749,9 @@ class View : public ViewTraits { (7 == Rank) && is_default_map), reference_type>::type access(const I0& i0, const I1& i1, const I2& i2, const I3& i3, const I4& i4, - const I5& i5, const I6& i6, Args... args) const { + const I5& i5, const I6& i6, Args... KOKKOS_IMPL_SINK(args)) const { KOKKOS_IMPL_VIEW_OPERATOR_VERIFY( - (m_track, m_map, i0, i1, i2, i3, i4, i5, i6, args...)) + KOKKOS_IMPL_SINK((m_track, m_map, i0, i1, i2, i3, i4, i5, i6, args...))) return m_map.m_impl_handle[m_map.m_impl_offset(i0, i1, i2, i3, i4, i5, i6)]; } @@ -1679,9 +1762,9 @@ class View : public ViewTraits { (7 == Rank) && !is_default_map), reference_type>::type access(const I0& i0, const I1& i1, const I2& i2, const I3& i3, const I4& i4, - const I5& i5, const I6& i6, Args... args) const { + const I5& i5, const I6& i6, Args... KOKKOS_IMPL_SINK(args)) const { KOKKOS_IMPL_VIEW_OPERATOR_VERIFY( - (m_track, m_map, i0, i1, i2, i3, i4, i5, i6, args...)) + KOKKOS_IMPL_SINK((m_track, m_map, i0, i1, i2, i3, i4, i5, i6, args...))) return m_map.reference(i0, i1, i2, i3, i4, i5, i6); } @@ -1696,9 +1779,10 @@ class View : public ViewTraits { (8 == Rank) && is_default_map), reference_type>::type access(const I0& i0, const I1& i1, const I2& i2, const I3& i3, const I4& i4, - const I5& i5, const I6& i6, const I7& i7, Args... args) const { - KOKKOS_IMPL_VIEW_OPERATOR_VERIFY( - (m_track, m_map, i0, i1, i2, i3, i4, i5, i6, i7, args...)) + const I5& i5, const I6& i6, const I7& i7, + Args... KOKKOS_IMPL_SINK(args)) const { + KOKKOS_IMPL_VIEW_OPERATOR_VERIFY(KOKKOS_IMPL_SINK( + (m_track, m_map, i0, i1, i2, i3, i4, i5, i6, i7, args...))) return m_map .m_impl_handle[m_map.m_impl_offset(i0, i1, i2, i3, i4, i5, i6, i7)]; } @@ -1711,9 +1795,10 @@ class View : public ViewTraits { (8 == Rank) && !is_default_map), reference_type>::type access(const I0& i0, const I1& i1, const I2& i2, const I3& i3, const I4& i4, - const I5& i5, const I6& i6, const I7& i7, Args... args) const { - KOKKOS_IMPL_VIEW_OPERATOR_VERIFY( - (m_track, m_map, i0, i1, i2, i3, i4, i5, i6, i7, args...)) + const I5& i5, const I6& i6, const I7& i7, + Args... KOKKOS_IMPL_SINK(args)) const { + KOKKOS_IMPL_VIEW_OPERATOR_VERIFY(KOKKOS_IMPL_SINK( + (m_track, m_map, i0, i1, i2, i3, i4, i5, i6, i7, args...))) return m_map.reference(i0, i1, i2, i3, i4, i5, i6, i7); } @@ -1722,8 +1807,8 @@ class View : public ViewTraits { //---------------------------------------- // Standard destructor, constructors, and assignment operators - KOKKOS_INLINE_FUNCTION - ~View() {} + KOKKOS_DEFAULTED_FUNCTION + ~View() = default; KOKKOS_INLINE_FUNCTION View() : m_track(), m_map() {} @@ -1759,7 +1844,8 @@ class View : public ViewTraits { const View& rhs, typename std::enable_if::traits, - typename traits::specialize>::is_assignable_data_type>::type* = 0) + typename traits::specialize>::is_assignable_data_type>::type* = + nullptr) : m_track(rhs.m_track, traits::is_managed), m_map() { typedef typename View::traits SrcTraits; typedef Kokkos::Impl::ViewMapping { // If allocating in CudaUVMSpace must fence before and after // the allocation to protect against possible concurrent access // on the CPU and the GPU. - // Fence using the trait's executon space (which will be Kokkos::Cuda) - // to avoid incomplete type errors from usng Kokkos::Cuda directly. + // Fence using the trait's execution space (which will be Kokkos::Cuda) + // to avoid incomplete type errors from using Kokkos::Cuda directly. if (std::is_same::value) { typename traits::device_type::memory_space::execution_space().fence(); diff --git a/lib/kokkos/core/src/Kokkos_WorkGraphPolicy.hpp b/lib/kokkos/core/src/Kokkos_WorkGraphPolicy.hpp index 26df7e03a287d6c04ae108d211f2f17699fb5b83..6ff2f0d4b72178f9ee9ef0cc0d042af1f7275bee 100644 --- a/lib/kokkos/core/src/Kokkos_WorkGraphPolicy.hpp +++ b/lib/kokkos/core/src/Kokkos_WorkGraphPolicy.hpp @@ -199,6 +199,8 @@ class WorkGraphPolicy : public Kokkos::Impl::PolicyTraits { if (0 == count_queue[w]) push_work(w); } + execution_space space() const { return execution_space(); } + WorkGraphPolicy(const graph_type& arg_graph) : m_graph(arg_graph), m_queue(view_alloc("queue", WithoutInitializing), diff --git a/lib/kokkos/core/src/OpenMP/Kokkos_OpenMP_Exec.cpp b/lib/kokkos/core/src/OpenMP/Kokkos_OpenMP_Exec.cpp index d152fd62dc47e3cb247cec400a18c9422dde7d7a..21151156e3d210f6ce39e79661d9361d1f95e871 100644 --- a/lib/kokkos/core/src/OpenMP/Kokkos_OpenMP_Exec.cpp +++ b/lib/kokkos/core/src/OpenMP/Kokkos_OpenMP_Exec.cpp @@ -149,12 +149,12 @@ void OpenMPExec::clear_thread_data() { { const int rank = omp_get_thread_num(); - if (0 != m_pool[rank]) { + if (nullptr != m_pool[rank]) { m_pool[rank]->disband_pool(); space.deallocate(m_pool[rank], old_alloc_bytes); - m_pool[rank] = 0; + m_pool[rank] = nullptr; } } /* END #pragma omp parallel */ @@ -211,7 +211,7 @@ void OpenMPExec::resize_thread_data(size_t pool_reduce_bytes, { const int rank = omp_get_thread_num(); - if (0 != m_pool[rank]) { + if (nullptr != m_pool[rank]) { m_pool[rank]->disband_pool(); space.deallocate(m_pool[rank], old_alloc_bytes); @@ -447,7 +447,7 @@ void OpenMP::impl_finalize() //---------------------------------------------------------------------------- -void OpenMP::print_configuration(std::ostream &s, const bool verbose) { +void OpenMP::print_configuration(std::ostream &s, const bool /*verbose*/) { s << "Kokkos::OpenMP"; const bool is_initialized = Impl::t_openmp_instance != nullptr; diff --git a/lib/kokkos/core/src/OpenMP/Kokkos_OpenMP_Exec.hpp b/lib/kokkos/core/src/OpenMP/Kokkos_OpenMP_Exec.hpp index 6a8773a58f53fd61c4f9c4a0ceef64742369b450..6614050f025b2579d6b0756d2973b4b6c6dacb4e 100644 --- a/lib/kokkos/core/src/OpenMP/Kokkos_OpenMP_Exec.hpp +++ b/lib/kokkos/core/src/OpenMP/Kokkos_OpenMP_Exec.hpp @@ -129,8 +129,6 @@ class OpenMPExec { namespace Kokkos { -inline OpenMP::OpenMP() noexcept {} - inline #ifdef KOKKOS_ENABLE_DEPRECATED_CODE bool @@ -176,20 +174,24 @@ int OpenMP::impl_thread_pool_rank() noexcept #endif } -inline void OpenMP::impl_static_fence(OpenMP const& instance) noexcept {} +inline void OpenMP::impl_static_fence(OpenMP const& /*instance*/) noexcept {} #ifdef KOKKOS_ENABLE_DEPRECATED_CODE inline void OpenMP::fence(OpenMP const& instance) noexcept {} #endif -inline bool OpenMP::is_asynchronous(OpenMP const& instance) noexcept { +inline bool OpenMP::is_asynchronous(OpenMP const& /*instance*/) noexcept { return false; } template void OpenMP::partition_master(F const& f, int num_partitions, int partition_size) { - if (omp_get_nested()) { +#if _OPENMP >= 201811 + if (omp_get_max_active_levels() > 1) { +#else + if (omp_get_nested() > 1) { +#endif using Exec = Impl::OpenMPExec; Exec* prev_instance = Impl::t_openmp_instance; diff --git a/lib/kokkos/core/src/OpenMP/Kokkos_OpenMP_Parallel.hpp b/lib/kokkos/core/src/OpenMP/Kokkos_OpenMP_Parallel.hpp index 5442119e73678544d74a8ac8d7200bdba0078980..83773ac3055213563b7e90c5f4108e61853a0ef9 100644 --- a/lib/kokkos/core/src/OpenMP/Kokkos_OpenMP_Parallel.hpp +++ b/lib/kokkos/core/src/OpenMP/Kokkos_OpenMP_Parallel.hpp @@ -389,7 +389,7 @@ class ParallelReduce, ReducerType, const ViewType& arg_view, typename std::enable_if::value && !Kokkos::is_reducer_type::value, - void*>::type = NULL) + void*>::type = nullptr) : m_instance(t_openmp_instance), m_functor(arg_functor), m_policy(arg_policy), @@ -551,7 +551,7 @@ class ParallelReduce, ReducerType, const ViewType& arg_view, typename std::enable_if::value && !Kokkos::is_reducer_type::value, - void*>::type = NULL) + void*>::type = nullptr) : m_instance(t_openmp_instance), m_functor(arg_functor), m_mdr_policy(arg_policy), @@ -1146,7 +1146,7 @@ class ParallelReduce, const ViewType& arg_result, typename std::enable_if::value && !Kokkos::is_reducer_type::value, - void*>::type = NULL) + void*>::type = nullptr) : m_instance(t_openmp_instance), m_functor(arg_functor), m_policy(arg_policy), diff --git a/lib/kokkos/core/src/OpenMP/Kokkos_OpenMP_Task.hpp b/lib/kokkos/core/src/OpenMP/Kokkos_OpenMP_Task.hpp index 0cbdfbbdaa64c27b76cef3b0d1478b105c54ea9b..62f0a77d0e10363b3c14671193ea56545ea6e109 100644 --- a/lib/kokkos/core/src/OpenMP/Kokkos_OpenMP_Task.hpp +++ b/lib/kokkos/core/src/OpenMP/Kokkos_OpenMP_Task.hpp @@ -132,14 +132,14 @@ class TaskQueueSpecialization > { auto current_task = OptionalRef(nullptr); - while (not queue.is_done()) { + while (!queue.is_done()) { // Each team lead attempts to acquire either a thread team task // or a single thread task for the team. if (team_exec.team_rank() == 0) { // loop while both: // - the queue is not done // - the most recently popped task is a single task or empty - while (not queue.is_done()) { + while (!queue.is_done()) { current_task = queue.pop_ready_task(team_scheduler.team_scheduler_info()); diff --git a/lib/kokkos/core/src/OpenMP/Kokkos_OpenMP_Team.hpp b/lib/kokkos/core/src/OpenMP/Kokkos_OpenMP_Team.hpp index 39fd5ae0337c232820cb4df9c59aa1625a554d1f..f54b6e2d51dfcb1b47a15c8aaafc38399b49d608 100644 --- a/lib/kokkos/core/src/OpenMP/Kokkos_OpenMP_Team.hpp +++ b/lib/kokkos/core/src/OpenMP/Kokkos_OpenMP_Team.hpp @@ -62,6 +62,11 @@ class TeamPolicyInternal typedef PolicyTraits traits; + const typename traits::execution_space& space() const { + static typename traits::execution_space m_space; + return m_space; + } + TeamPolicyInternal& operator=(const TeamPolicyInternal& p) { m_league_size = p.m_league_size; m_team_size = p.m_team_size; diff --git a/lib/kokkos/core/src/OpenMPTarget/Kokkos_OpenMPTargetSpace.cpp b/lib/kokkos/core/src/OpenMPTarget/Kokkos_OpenMPTargetSpace.cpp index 2dd038dce72359546565a938967a5bf71d3330be..ab833b03637b707aa7541b5e0f177f30696014bc 100644 --- a/lib/kokkos/core/src/OpenMPTarget/Kokkos_OpenMPTargetSpace.cpp +++ b/lib/kokkos/core/src/OpenMPTarget/Kokkos_OpenMPTargetSpace.cpp @@ -111,14 +111,6 @@ std::string SharedAllocationRecord * -SharedAllocationRecord::allocate( - const Kokkos::Experimental::OpenMPTargetSpace &arg_space, - const std::string &arg_label, const size_t arg_alloc_size) { - return new SharedAllocationRecord(arg_space, arg_label, arg_alloc_size); -} - void SharedAllocationRecord::deallocate(SharedAllocationRecord *arg_rec) { @@ -151,6 +143,8 @@ SharedAllocationRecord:: header.m_label[SharedAllocationHeader::maximum_label_length - 1] = (char)0; // TODO DeepCopy // DeepCopy + Kokkos::Impl::DeepCopy( + RecordBase::m_alloc_ptr, &header, sizeof(SharedAllocationHeader)); } //---------------------------------------------------------------------------- @@ -203,18 +197,22 @@ SharedAllocationRecord typedef SharedAllocationRecord RecordHost; - SharedAllocationHeader const *const head = - alloc_ptr ? Header::get_header(alloc_ptr) : (SharedAllocationHeader *)0; - RecordHost *const record = - head ? static_cast(head->m_record) : (RecordHost *)0; + if (alloc_ptr) { + Header head; + const Header *const head_ompt = Header::get_header(alloc_ptr); - if (!alloc_ptr || record->m_alloc_ptr != head) { - Kokkos::Impl::throw_runtime_exception(std::string( - "Kokkos::Experimental::Impl::SharedAllocationRecord< " - "Kokkos::Experimental::OpenMPTargetSpace , void >::get_record ERROR")); - } + Kokkos::Impl::DeepCopy( + &head, head_ompt, sizeof(SharedAllocationHeader)); - return record; + RecordHost *record = static_cast(head.m_record); + if (record->m_alloc_ptr == head_ompt) { + return record; + } + } + Kokkos::Impl::throw_runtime_exception(std::string( + "Kokkos::Experimental::Impl::SharedAllocationRecord< " + "Kokkos::Experimental::OpenMPTargetSpace , void >::get_record ERROR")); + return nullptr; } // Iterate records to print orphaned memory ... diff --git a/lib/kokkos/core/src/OpenMPTarget/Kokkos_OpenMPTarget_Exec.cpp b/lib/kokkos/core/src/OpenMPTarget/Kokkos_OpenMPTarget_Exec.cpp index 140a4cb88ec2a767a483da03b7df6d6ddebc4fbd..b09dbeba3a5c68271c3f4468634b3b918a2acc38 100644 --- a/lib/kokkos/core/src/OpenMPTarget/Kokkos_OpenMPTarget_Exec.cpp +++ b/lib/kokkos/core/src/OpenMPTarget/Kokkos_OpenMPTarget_Exec.cpp @@ -61,17 +61,8 @@ namespace { KOKKOS_INLINE_FUNCTION int kokkos_omp_in_parallel(); -int kokkos_omp_in_critical_region = - (Kokkos::HostSpace::register_in_parallel(kokkos_omp_in_parallel), 0); - KOKKOS_INLINE_FUNCTION -int kokkos_omp_in_parallel() { -#ifndef __CUDA_ARCH__ - return omp_in_parallel() && !kokkos_omp_in_critical_region; -#else - return 0; -#endif -} +int kokkos_omp_in_parallel() { return omp_in_parallel(); } bool s_using_hwloc = false; @@ -79,23 +70,9 @@ bool s_using_hwloc = false; } // namespace Impl } // namespace Kokkos -namespace Kokkos { -namespace Experimental { -bool OpenMPTarget::m_is_initialized = false; -} -} // namespace Kokkos - namespace Kokkos { namespace Impl { -// int OpenMPTargetExec::m_map_rank[ OpenMPTargetExec::MAX_THREAD_COUNT ] = { 0 -// }; - -// int OpenMPTargetExec::m_pool_topo[ 4 ] = { 0 }; - -// OpenMPTargetExec * OpenMPTargetExec::m_pool[ -// OpenMPTargetExec::MAX_THREAD_COUNT ] = { 0 }; - void OpenMPTargetExec::verify_is_process(const char* const label) { if (omp_in_parallel()) { std::string msg(label); @@ -105,28 +82,21 @@ void OpenMPTargetExec::verify_is_process(const char* const label) { } void OpenMPTargetExec::verify_initialized(const char* const label) { - if (0 == Kokkos::Experimental::OpenMPTarget::is_initialized()) { + if (0 == Kokkos::Experimental::OpenMPTarget().impl_is_initialized()) { std::string msg(label); msg.append(" ERROR: not initialized"); Kokkos::Impl::throw_runtime_exception(msg); } - - if (omp_get_max_threads() != - Kokkos::Experimental::OpenMPTarget::thread_pool_size(0)) { - std::string msg(label); - msg.append(" ERROR: Initialized but threads modified inappropriately"); - Kokkos::Impl::throw_runtime_exception(msg); - } } -void* OpenMPTargetExec::m_scratch_ptr = NULL; +void* OpenMPTargetExec::m_scratch_ptr = nullptr; int64_t OpenMPTargetExec::m_scratch_size = 0; void OpenMPTargetExec::clear_scratch() { Kokkos::Experimental::OpenMPTargetSpace space; space.deallocate(m_scratch_ptr, m_scratch_size); - m_scratch_ptr = NULL; - m_scratch_size = NULL; + m_scratch_ptr = nullptr; + m_scratch_size = 0; } void* OpenMPTargetExec::get_scratch_ptr() { return m_scratch_ptr; } @@ -151,122 +121,4 @@ void OpenMPTargetExec::resize_scratch(int64_t reduce_bytes, } // namespace Impl } // namespace Kokkos -//---------------------------------------------------------------------------- -//---------------------------------------------------------------------------- - -namespace Kokkos { -namespace Experimental { -//---------------------------------------------------------------------------- - -int OpenMPTarget::is_initialized() { - return m_is_initialized; -} // != Impl::OpenMPTargetExec::m_pool[0]; } - -void OpenMPTarget::initialize(unsigned thread_count, unsigned use_numa_count, - unsigned use_cores_per_numa) { - // Before any other call to OMP query the maximum number of threads - // and save the value for re-initialization unit testing. - - // Init the array for used for arbitrarily sized atomics - Kokkos::Impl::init_lock_array_host_space(); - -#ifdef KOKKOS_ENABLE_PROFILING - Kokkos::Profiling::initialize(); -#endif - m_is_initialized = true; -} - -//---------------------------------------------------------------------------- - -void OpenMPTarget::finalize() { - Kokkos::Impl::OpenMPTargetExec::verify_initialized("OpenMPTarget::finalize"); - Kokkos::Impl::OpenMPTargetExec::verify_is_process("OpenMPTarget::finalize"); - - m_is_initialized = false; - - omp_set_num_threads(1); - - if (Kokkos::Impl::s_using_hwloc && Kokkos::hwloc::can_bind_threads()) { - hwloc::unbind_this_thread(); - } - -#ifdef KOKKOS_ENABLE_PROFILING - Kokkos::Profiling::finalize(); -#endif -} - -//---------------------------------------------------------------------------- - -void OpenMPTarget::print_configuration(std::ostream& s, const bool detail) { - Kokkos::Impl::OpenMPTargetExec::verify_is_process( - "OpenMPTarget::print_configuration"); - /* - s << "Kokkos::Experimental::OpenMPTarget" ; - - #if defined( KOKKOS_ENABLE_OPENMPTARGET ) - s << " KOKKOS_ENABLE_OPENMPTARGET" ; - #endif - #if defined( KOKKOS_ENABLE_HWLOC ) - - const unsigned numa_count_ = - Kokkos::hwloc::get_available_numa_count(); const unsigned cores_per_numa = - Kokkos::hwloc::get_available_cores_per_numa(); const unsigned threads_per_core - = Kokkos::hwloc::get_available_threads_per_core(); - - s << " hwloc[" << numa_count_ << "x" << cores_per_numa << "x" << - threads_per_core << "]" - << " hwloc_binding_" << ( Impl::s_using_hwloc ? "enabled" : "disabled" ) - ; - #endif - - const bool is_initialized = 0 != Impl::OpenMPTargetExec::m_pool[0] ; - - if ( is_initialized ) { - const int numa_count = Kokkos::Impl::OpenMPTargetExec::m_pool_topo[0] - / Kokkos::Impl::OpenMPTargetExec::m_pool_topo[1] ; const int core_per_numa = - Kokkos::Impl::OpenMPTargetExec::m_pool_topo[1] / - Kokkos::Impl::OpenMPTargetExec::m_pool_topo[2] ; const int thread_per_core = - Kokkos::Impl::OpenMPTargetExec::m_pool_topo[2] ; - - s << " thread_pool_topology[ " << numa_count - << " x " << core_per_numa - << " x " << thread_per_core - << " ]" - << std::endl ; - - if ( detail ) { - std::vector< std::pair > coord( - Kokkos::Impl::OpenMPTargetExec::m_pool_topo[0] ); - - #pragma omp parallel - { - #pragma omp critical - { - coord[ omp_get_thread_num() ] = hwloc::get_this_thread_coordinate(); - } - // END #pragma omp critical - } - // END #pragma omp parallel - - for ( unsigned i = 0 ; i < coord.size() ; ++i ) { - s << " thread omp_rank[" << i << "]" - << " kokkos_rank[" << Impl::OpenMPTargetExec::m_map_rank[ i ] << "]" - << " hwloc_coord[" << coord[i].first << "." << coord[i].second << - "]" - << std::endl ; - } - } - } - else { - s << " not initialized" << std::endl ; - } - */ -} - -int OpenMPTarget::concurrency() { return thread_pool_size(0); } - -const char* OpenMPTarget::name() { return "OpenMPTarget"; } -} // namespace Experimental -} // namespace Kokkos - #endif // KOKKOS_ENABLE_OPENMPTARGET diff --git a/lib/kokkos/core/src/OpenMPTarget/Kokkos_OpenMPTarget_Exec.hpp b/lib/kokkos/core/src/OpenMPTarget/Kokkos_OpenMPTarget_Exec.hpp index c9d8543eab0662baccbd030572c0124b30a9e53f..be6ddb5ed42260eaebbe3fdbf805223d555b9b0c 100644 --- a/lib/kokkos/core/src/OpenMPTarget/Kokkos_OpenMPTarget_Exec.hpp +++ b/lib/kokkos/core/src/OpenMPTarget/Kokkos_OpenMPTarget_Exec.hpp @@ -341,19 +341,39 @@ class TeamPolicyInternal //---------------------------------------- template - inline static int team_size_max(const FunctorType&) { - return 1024; + inline static int team_size_max(const FunctorType&, const ParallelForTag&) { + return 256; } template - inline static int team_size_recommended(const FunctorType&) { + inline static int team_size_max(const FunctorType&, + const ParallelReduceTag&) { + return 256; + } + + template + inline static int team_size_max(const FunctorType&, const ReducerType&, + const ParallelReduceTag&) { return 256; } template inline static int team_size_recommended(const FunctorType&, - const int& vector_length) { - return 256 / vector_length; + const ParallelForTag&) { + return 128; + } + + template + inline static int team_size_recommended(const FunctorType&, + const ParallelReduceTag&) { + return 128; + } + + template + inline static int team_size_recommended(const FunctorType&, + const ReducerType&, + const ParallelReduceTag&) { + return 128; } //---------------------------------------- @@ -391,6 +411,10 @@ class TeamPolicyInternal team_size_ * m_thread_scratch_size[level]; } + inline Kokkos::Experimental::OpenMPTarget space() const { + return Kokkos::Experimental::OpenMPTarget(); + } + /** \brief Specify league size, request team size */ TeamPolicyInternal(typename traits::execution_space&, int league_size_request, int team_size_request, int vector_length_request = 1) @@ -540,8 +564,8 @@ class TeamPolicyInternal private: /** \brief finalize chunk_size if it was set to AUTO*/ inline void set_auto_chunk_size() { - int concurrency = - traits::execution_space::thread_pool_size(0) / m_team_alloc; + int concurrency = 2048 * 128; + if (concurrency == 0) concurrency = 1; if (m_chunk_size > 0) { @@ -568,23 +592,6 @@ class TeamPolicyInternal } // namespace Kokkos -//---------------------------------------------------------------------------- -//---------------------------------------------------------------------------- - -namespace Kokkos { -namespace Experimental { - -inline int OpenMPTarget::thread_pool_size(int depth) { - // return Impl::OpenMPTargetExec::pool_size(depth); - return omp_get_max_threads(); -} - -KOKKOS_INLINE_FUNCTION -int OpenMPTarget::thread_pool_rank() { return omp_get_thread_num(); } - -} // namespace Experimental -} // namespace Kokkos - namespace Kokkos { template diff --git a/lib/kokkos/core/src/OpenMPTarget/Kokkos_OpenMPTarget_Instance.cpp b/lib/kokkos/core/src/OpenMPTarget/Kokkos_OpenMPTarget_Instance.cpp new file mode 100644 index 0000000000000000000000000000000000000000..011bb1c8e1a4fea3ab7e83705f0a44cc4f3d4844 --- /dev/null +++ b/lib/kokkos/core/src/OpenMPTarget/Kokkos_OpenMPTarget_Instance.cpp @@ -0,0 +1,50 @@ +#include + +namespace Kokkos { +namespace Experimental { +namespace Impl { +void OpenMPTargetInternal::fence() {} +int OpenMPTargetInternal::concurrency() { return 128000; } +const char* OpenMPTargetInternal::name() { return "OpenMPTarget"; } +void OpenMPTargetInternal::print_configuration(std::ostream& stream, + const bool) { + printf("Using OpenMPTarget\n"); +} + +void OpenMPTargetInternal::impl_finalize() { m_is_initialized = false; } +void OpenMPTargetInternal::impl_initialize() { m_is_initialized = true; } +int OpenMPTargetInternal::impl_is_initialized() { + return m_is_initialized ? 1 : 0; +} + +OpenMPTargetInternal* OpenMPTargetInternal::impl_singleton() { + static OpenMPTargetInternal self; + return &self; +} +} // Namespace Impl + +OpenMPTarget::OpenMPTarget() + : m_space_instance(Impl::OpenMPTargetInternal::impl_singleton()) {} + +const char* OpenMPTarget::name() { + return Impl::OpenMPTargetInternal::impl_singleton()->name(); +} +void OpenMPTarget::print_configuration(std::ostream& stream, + const bool detail) { + m_space_instance->print_configuration(stream, detail); +} + +int OpenMPTarget::concurrency() { + return Impl::OpenMPTargetInternal::impl_singleton()->concurrency(); +} +void OpenMPTarget::fence() { + Impl::OpenMPTargetInternal::impl_singleton()->fence(); +} + +void OpenMPTarget::impl_initialize() { m_space_instance->impl_initialize(); } +void OpenMPTarget::impl_finalize() { m_space_instance->impl_finalize(); } +int OpenMPTarget::impl_is_initialized() { + return Impl::OpenMPTargetInternal::impl_singleton()->impl_is_initialized(); +} +} // Namespace Experimental +} // Namespace Kokkos diff --git a/lib/kokkos/core/src/OpenMPTarget/Kokkos_OpenMPTarget_Instance.hpp b/lib/kokkos/core/src/OpenMPTarget/Kokkos_OpenMPTarget_Instance.hpp new file mode 100644 index 0000000000000000000000000000000000000000..2087226d7cce8eb5f84428d494e70ca0a41a39a5 --- /dev/null +++ b/lib/kokkos/core/src/OpenMPTarget/Kokkos_OpenMPTarget_Instance.hpp @@ -0,0 +1,40 @@ +#include + +namespace Kokkos { +namespace Experimental { +namespace Impl { + +class OpenMPTargetInternal { + private: + OpenMPTargetInternal() = default; + OpenMPTargetInternal(const OpenMPTargetInternal&) = default; + OpenMPTargetInternal& operator=(const OpenMPTargetInternal&) = default; + + public: + void fence(); + + /** \brief Return the maximum amount of concurrency. */ + int concurrency(); + + //! Print configuration information to the given output stream. + void print_configuration(std::ostream&, const bool detail = false); + + static const char* name(); + + //! Free any resources being consumed by the device. + void impl_finalize(); + + //! Has been initialized + int impl_is_initialized(); + + //! Initialize, telling the CUDA run-time library which device to use. + void impl_initialize(); + + static OpenMPTargetInternal* impl_singleton(); + + private: + bool m_is_initialized = false; +}; +} // Namespace Impl +} // Namespace Experimental +} // Namespace Kokkos diff --git a/lib/kokkos/core/src/OpenMPTarget/Kokkos_OpenMPTarget_Parallel.hpp b/lib/kokkos/core/src/OpenMPTarget/Kokkos_OpenMPTarget_Parallel.hpp index 2252cf0372fcbf54ba596c31723718f2b77b709d..d5b62f60b89900db7466ae40788bc0dfa130d4ab 100644 --- a/lib/kokkos/core/src/OpenMPTarget/Kokkos_OpenMPTarget_Parallel.hpp +++ b/lib/kokkos/core/src/OpenMPTarget/Kokkos_OpenMPTarget_Parallel.hpp @@ -57,6 +57,374 @@ namespace Kokkos { namespace Impl { +template +struct OpenMPTargetReducerWrapper { + typedef typename Reducer::value_type value_type; + + KOKKOS_INLINE_FUNCTION + static void join(value_type&, const value_type&) { + printf( + "Using a generic unknown Reducer for the OpenMPTarget backend is not " + "implemented."); + } + + KOKKOS_INLINE_FUNCTION + static void join(volatile value_type&, const volatile value_type&) { + printf( + "Using a generic unknown Reducer for the OpenMPTarget backend is not " + "implemented."); + } + + KOKKOS_INLINE_FUNCTION + static void init(value_type&) { + printf( + "Using a generic unknown Reducer for the OpenMPTarget backend is not " + "implemented."); + } +}; + +template +struct OpenMPTargetReducerWrapper> { + public: + // Required + typedef typename std::remove_cv::type value_type; + + // Required + KOKKOS_INLINE_FUNCTION + static void join(value_type& dest, const value_type& src) { dest += src; } + + KOKKOS_INLINE_FUNCTION + static void join(volatile value_type& dest, const volatile value_type& src) { + dest += src; + } + + KOKKOS_INLINE_FUNCTION + static void init(value_type& val) { + val = reduction_identity::sum(); + } +}; + +template +struct OpenMPTargetReducerWrapper> { + public: + // Required + typedef typename std::remove_cv::type value_type; + + // Required + KOKKOS_INLINE_FUNCTION + static void join(value_type& dest, const value_type& src) { dest *= src; } + + KOKKOS_INLINE_FUNCTION + static void join(volatile value_type& dest, const volatile value_type& src) { + dest *= src; + } + + KOKKOS_INLINE_FUNCTION + static void init(value_type& val) { + val = reduction_identity::prod(); + } +}; + +template +struct OpenMPTargetReducerWrapper> { + public: + // Required + typedef typename std::remove_cv::type value_type; + + // Required + KOKKOS_INLINE_FUNCTION + static void join(value_type& dest, const value_type& src) { + if (src < dest) dest = src; + } + + KOKKOS_INLINE_FUNCTION + static void join(volatile value_type& dest, const volatile value_type& src) { + if (src < dest) dest = src; + } + + KOKKOS_INLINE_FUNCTION + static void init(value_type& val) { + val = reduction_identity::min(); + } +}; + +template +struct OpenMPTargetReducerWrapper> { + public: + // Required + typedef typename std::remove_cv::type value_type; + + // Required + KOKKOS_INLINE_FUNCTION + static void join(value_type& dest, const value_type& src) { + if (src > dest) dest = src; + } + + KOKKOS_INLINE_FUNCTION + static void join(volatile value_type& dest, const volatile value_type& src) { + if (src > dest) dest = src; + } + + // Required + KOKKOS_INLINE_FUNCTION + static void init(value_type& val) { + val = reduction_identity::max(); + } +}; + +template +struct OpenMPTargetReducerWrapper> { + public: + // Required + typedef typename std::remove_cv::type value_type; + + KOKKOS_INLINE_FUNCTION + static void join(value_type& dest, const value_type& src) { + dest = dest && src; + } + + KOKKOS_INLINE_FUNCTION + static void join(volatile value_type& dest, const volatile value_type& src) { + dest = dest && src; + } + + KOKKOS_INLINE_FUNCTION + static void init(value_type& val) { + val = reduction_identity::land(); + } +}; + +template +struct OpenMPTargetReducerWrapper> { + public: + // Required + typedef typename std::remove_cv::type value_type; + + typedef Kokkos::View result_view_type; + + // Required + KOKKOS_INLINE_FUNCTION + static void join(value_type& dest, const value_type& src) { + dest = dest || src; + } + + KOKKOS_INLINE_FUNCTION + static void join(volatile value_type& dest, const volatile value_type& src) { + dest = dest || src; + } + + KOKKOS_INLINE_FUNCTION + static void init(value_type& val) { + val = reduction_identity::lor(); + } +}; + +template +struct OpenMPTargetReducerWrapper> { + public: + // Required + typedef typename std::remove_cv::type value_type; + + // Required + KOKKOS_INLINE_FUNCTION + static void join(value_type& dest, const value_type& src) { + dest = dest & src; + } + + KOKKOS_INLINE_FUNCTION + static void join(volatile value_type& dest, const volatile value_type& src) { + dest = dest & src; + } + + KOKKOS_INLINE_FUNCTION + static void init(value_type& val) { + val = reduction_identity::band(); + } +}; + +template +struct OpenMPTargetReducerWrapper> { + public: + // Required + typedef typename std::remove_cv::type value_type; + + // Required + KOKKOS_INLINE_FUNCTION + static void join(value_type& dest, const value_type& src) { + dest = dest | src; + } + + KOKKOS_INLINE_FUNCTION + static void join(volatile value_type& dest, const volatile value_type& src) { + dest = dest | src; + } + + KOKKOS_INLINE_FUNCTION + static void init(value_type& val) { + val = reduction_identity::bor(); + } +}; + +template +struct OpenMPTargetReducerWrapper> { + private: + typedef typename std::remove_cv::type scalar_type; + typedef typename std::remove_cv::type index_type; + + public: + // Required + typedef ValLocScalar value_type; + + // Required + KOKKOS_INLINE_FUNCTION + static void join(value_type& dest, const value_type& src) { + if (src.val < dest.val) dest = src; + } + + KOKKOS_INLINE_FUNCTION + static void join(volatile value_type& dest, const volatile value_type& src) { + if (src.val < dest.val) dest = src; + } + + KOKKOS_INLINE_FUNCTION + static void init(value_type& val) { + val.val = reduction_identity::min(); + val.loc = reduction_identity::min(); + } +}; + +template +struct OpenMPTargetReducerWrapper> { + private: + typedef typename std::remove_cv::type scalar_type; + typedef typename std::remove_cv::type index_type; + + public: + // Required + typedef ValLocScalar value_type; + + KOKKOS_INLINE_FUNCTION + static void join(value_type& dest, const value_type& src) { + if (src.val > dest.val) dest = src; + } + + KOKKOS_INLINE_FUNCTION + static void join(volatile value_type& dest, const volatile value_type& src) { + if (src.val > dest.val) dest = src; + } + + KOKKOS_INLINE_FUNCTION + static void init(value_type& val) { + val.val = reduction_identity::max(); + val.loc = reduction_identity::min(); + } +}; + +template +struct OpenMPTargetReducerWrapper> { + private: + typedef typename std::remove_cv::type scalar_type; + + public: + // Required + typedef MinMaxScalar value_type; + + // Required + KOKKOS_INLINE_FUNCTION + static void join(value_type& dest, const value_type& src) { + if (src.min_val < dest.min_val) { + dest.min_val = src.min_val; + } + if (src.max_val > dest.max_val) { + dest.max_val = src.max_val; + } + } + + KOKKOS_INLINE_FUNCTION + static void join(volatile value_type& dest, const volatile value_type& src) { + if (src.min_val < dest.min_val) { + dest.min_val = src.min_val; + } + if (src.max_val > dest.max_val) { + dest.max_val = src.max_val; + } + } + + KOKKOS_INLINE_FUNCTION + static void init(value_type& val) { + val.max_val = reduction_identity::max(); + val.min_val = reduction_identity::min(); + } +}; + +template +struct OpenMPTargetReducerWrapper> { + private: + typedef typename std::remove_cv::type scalar_type; + typedef typename std::remove_cv::type index_type; + + public: + // Required + typedef MinMaxLocScalar value_type; + + // Required + KOKKOS_INLINE_FUNCTION + static void join(value_type& dest, const value_type& src) { + if (src.min_val < dest.min_val) { + dest.min_val = src.min_val; + dest.min_loc = src.min_loc; + } + if (src.max_val > dest.max_val) { + dest.max_val = src.max_val; + dest.max_loc = src.max_loc; + } + } + + KOKKOS_INLINE_FUNCTION + static void join(volatile value_type& dest, const volatile value_type& src) { + if (src.min_val < dest.min_val) { + dest.min_val = src.min_val; + dest.min_loc = src.min_loc; + } + if (src.max_val > dest.max_val) { + dest.max_val = src.max_val; + dest.max_loc = src.max_loc; + } + } + + KOKKOS_INLINE_FUNCTION + static void init(value_type& val) { + val.max_val = reduction_identity::max(); + val.min_val = reduction_identity::min(); + val.max_loc = reduction_identity::min(); + val.min_loc = reduction_identity::min(); + } +}; +/* +template +class OpenMPTargetReducerWrapper { + public: + const ReducerType& reducer; + typedef typename ReducerType::value_type value_type; + value_type& value; + + KOKKOS_INLINE_FUNCTION + void join(const value_type& upd) { + reducer.join(value,upd); + } + + KOKKOS_INLINE_FUNCTION + void init(const value_type& upd) { + reducer.init(value,upd); + } +};*/ + +} // namespace Impl +} // namespace Kokkos + +namespace Kokkos { +namespace Impl { + template class ParallelFor, Kokkos::Experimental::OpenMPTarget> { @@ -71,7 +439,21 @@ class ParallelFor, public: inline void execute() const { execute_impl(); } - + /* + template + inline typename std::enable_if::value>::type + execute_impl() const { + OpenMPTargetExec::verify_is_process( + "Kokkos::Experimental::OpenMPTarget parallel_for"); + OpenMPTargetExec::verify_initialized( + "Kokkos::Experimental::OpenMPTarget parallel_for"); + const typename Policy::member_type begin = m_policy.begin(); + const typename Policy::member_type end = m_policy.end(); + + #pragma omp target teams distribute parallel for map(to: this->m_functor) + for (int i = begin; i < end; i++) m_functor(i); + } + */ template inline typename std::enable_if::value>::type execute_impl() const { @@ -82,8 +464,12 @@ class ParallelFor, const typename Policy::member_type begin = m_policy.begin(); const typename Policy::member_type end = m_policy.end(); -#pragma omp target teams distribute parallel for map(to : this->m_functor) - for (int i = begin; i < end; i++) m_functor(i); + if (end <= begin) return; + + FunctorType a_functor(m_functor); + +#pragma omp target teams distribute parallel for map(to : a_functor) + for (int i = begin; i < end; i++) a_functor(i); } template @@ -96,10 +482,13 @@ class ParallelFor, const typename Policy::member_type begin = m_policy.begin(); const typename Policy::member_type end = m_policy.end(); + if (end <= begin) return; + + FunctorType a_functor(m_functor); #pragma omp target teams distribute parallel for num_threads(128) \ map(to \ - : this->m_functor) - for (int i = begin; i < end; i++) m_functor(TagType(), i); + : a_functor) + for (int i = begin; i < end; i++) a_functor(TagType(), i); } inline ParallelFor(const FunctorType& arg_functor, Policy arg_policy) @@ -143,8 +532,11 @@ struct ParallelReduceSpecialize, const typename PolicyType::member_type begin = p.begin(); const typename PolicyType::member_type end = p.end(); + if (end <= begin) return; + ValueType result = ValueType(); -#pragma omp target teams distribute parallel for num_teams(512) map(to:f) map(tofrom:result) reduction(+: result) +#pragma omp target teams distribute parallel for num_teams(512) \ + map(to:f) map(tofrom:result) reduction(+: result) for (int i = begin; i < end; i++) f(i, result); *result_ptr = result; @@ -162,8 +554,12 @@ struct ParallelReduceSpecialize, const typename PolicyType::member_type begin = p.begin(); const typename PolicyType::member_type end = p.end(); + if (end <= begin) return; + ValueType result = ValueType(); -#pragma omp target teams distribute parallel for num_teams(512) map(to:f) map(tofrom: result) reduction(+: result) +#pragma omp target teams distribute parallel for \ + num_teams(512) map(to:f) map(tofrom: result) \ + reduction(+: result) for (int i = begin; i < end; i++) f(TagType(), i, result); *result_ptr = result; @@ -174,62 +570,73 @@ struct ParallelReduceSpecialize, execute_impl(f, p, ptr); } }; -/* -template struct ParallelReduceSpecialize { - #pragma omp declare reduction(custom: ValueType : ReducerType::join(omp_out, -omp_in)) initializer ( ReducerType::init(omp_priv) ) +template +struct ParallelReduceSpecialize { +#pragma omp declare reduction( \ + custom:ValueType \ + : OpenMPTargetReducerWrapper ::join(omp_out, omp_in)) \ + initializer(OpenMPTargetReducerWrapper ::init(omp_priv)) - template< class TagType > + template inline static - typename std::enable_if< std::is_same< TagType , void >::value >::type - execute_impl(const FunctorType& f, const PolicyType& p, PointerType -result_ptr) - { - OpenMPTargetExec::verify_is_process("Kokkos::Experimental::OpenMPTarget -parallel_for"); - OpenMPTargetExec::verify_initialized("Kokkos::Experimental::OpenMPTarget -parallel_for"); const typename PolicyType::member_type begin = p.begin(); const -typename PolicyType::member_type end = p.end(); - - ValueType result = ValueType(); - #pragma omp target teams distribute parallel for num_teams(512) map(to:f) -map(tofrom:result) reduction(custom: result) for(int i=begin; i::value>::type + execute_impl(const FunctorType& f, const PolicyType& p, + PointerType result_ptr) { + OpenMPTargetExec::verify_is_process( + "Kokkos::Experimental::OpenMPTarget parallel_for"); + OpenMPTargetExec::verify_initialized( + "Kokkos::Experimental::OpenMPTarget parallel_for"); + const typename PolicyType::member_type begin = p.begin(); + const typename PolicyType::member_type end = p.end(); + if (end <= begin) return; - template< class TagType > + ValueType result = ValueType(); + OpenMPTargetReducerWrapper::init(result); + +// clang-format off +#pragma omp target teams distribute parallel for num_teams(512) map(to: f) \ + map(tofrom: result) reduction(custom: result) + for (int i = begin; i < end; i++) f(i, result); + // clang-format on + + *result_ptr = result; + } + + template inline static - typename std::enable_if< ! std::is_same< TagType , void >::value >::type - execute_impl(const FunctorType& f, const PolicyType& p, PointerType -result_ptr) - { - OpenMPTargetExec::verify_is_process("Kokkos::Experimental::OpenMPTarget -parallel_for"); - OpenMPTargetExec::verify_initialized("Kokkos::Experimental::OpenMPTarget -parallel_for"); const typename PolicyType::member_type begin = p.begin(); const -typename PolicyType::member_type end = p.end(); - - ValueType result = ValueType(); - #pragma omp target teams distribute parallel for num_teams(512) map(to:f) -map(tofrom: result) reduction(custom: result) for(int i=begin; i::value>::type + execute_impl(const FunctorType& f, const PolicyType& p, + PointerType result_ptr) { + OpenMPTargetExec::verify_is_process( + "Kokkos::Experimental::OpenMPTarget parallel_for"); + OpenMPTargetExec::verify_initialized( + "Kokkos::Experimental::OpenMPTarget parallel_for"); + const typename PolicyType::member_type begin = p.begin(); + const typename PolicyType::member_type end = p.end(); + if (end <= begin) return; - inline static - void execute(const FunctorType& f, const PolicyType& p, PointerType ptr) { - execute_impl(f,p,ptr); - } + ValueType result = ValueType(); + OpenMPTargetReducerWrapper::init(result); + +// clang-format off +#pragma omp target teams distribute parallel for num_teams(512) map(to: f) \ + map(tofrom: result) reduction(custom: result) + for (int i = begin; i < end; i++) f(TagType(), i, result); +//clang format on + + *result_ptr = result; + } + + inline static void execute(const FunctorType& f, const PolicyType& p, + PointerType ptr) { + execute_impl(f, p, ptr); + } }; -*/ template class ParallelReduce, ReducerType, @@ -265,7 +672,7 @@ class ParallelReduce, ReducerType, typedef ParallelReduceSpecialize< FunctorType, Policy, ReducerType, pointer_type, typename ValueTraits::value_type, HasJoin, UseReducer> - ParForSpecialize; + ParReduceSpecialize; const FunctorType m_functor; const Policy m_policy; @@ -274,7 +681,7 @@ class ParallelReduce, ReducerType, public: inline void execute() const { - ParForSpecialize::execute(m_functor, m_policy, m_result_ptr); + ParReduceSpecialize::execute(m_functor, m_policy, m_result_ptr); } template @@ -283,28 +690,18 @@ class ParallelReduce, ReducerType, const ViewType& arg_result_view, typename std::enable_if::value && !Kokkos::is_reducer_type::value, - void*>::type = NULL) + void*>::type = nullptr) : m_functor(arg_functor), m_policy(arg_policy), m_reducer(InvalidType()), - m_result_ptr(arg_result_view.data()) { - /*static_assert( std::is_same< typename ViewType::memory_space - , Kokkos::HostSpace >::value - , "Reduction result on Kokkos::Experimental::OpenMPTarget must be a - Kokkos::View in HostSpace" );*/ - } + m_result_ptr(arg_result_view.data()) {} inline ParallelReduce(const FunctorType& arg_functor, Policy arg_policy, const ReducerType& reducer) : m_functor(arg_functor), m_policy(arg_policy), m_reducer(reducer), - m_result_ptr(reducer.result_view().data()) { - /*static_assert( std::is_same< typename ViewType::memory_space - , Kokkos::HostSpace >::value - , "Reduction result on Kokkos::Experimental::OpenMPTarget must be a - Kokkos::View in HostSpace" );*/ - } + m_result_ptr(reducer.view().data()) {} }; } // namespace Impl @@ -488,10 +885,11 @@ class ParallelFor, 0, 0); void* scratch_ptr = OpenMPTargetExec::get_scratch_ptr(); + FunctorType a_functor(m_functor); #pragma omp target teams distribute parallel for num_teams(league_size) \ num_threads(team_size* vector_length) schedule(static, 1) \ map(to \ - : this->m_functor, scratch_ptr) + : a_functor, scratch_ptr) for (int i = 0; i < league_size * team_size * vector_length; i++) { typename Policy::member_type team(i / (team_size * vector_length), league_size, team_size, vector_length, @@ -513,6 +911,7 @@ class ParallelFor, const int nteams = OpenMPTargetExec::MAX_ACTIVE_TEAMS < league_size ? OpenMPTargetExec::MAX_ACTIVE_TEAMS : league_size; + FunctorType a_functor(m_functor); OpenMPTargetExec::resize_scratch(0, Policy::member_type::TEAM_REDUCE_SIZE, 0, 0); @@ -520,7 +919,7 @@ class ParallelFor, #pragma omp target teams distribute parallel for num_teams(league_size) \ num_threads(team_size* vector_length) schedule(static, 1) \ map(to \ - : this->m_functor, scratch_ptr) + : a_functor, scratch_ptr) for (int i = 0; i < league_size; i++) { typename Policy::member_type team(i / (team_size * vector_length), league_size, team_size, vector_length, @@ -663,7 +1062,7 @@ class ParallelReduce, public: inline void execute() const { - ParForSpecialize::execute(m_functor, m_policy, m_result_ptr); + // ParForSpecialize::execute(m_functor, m_policy, m_result_ptr); } template @@ -672,11 +1071,11 @@ class ParallelReduce, const ViewType& arg_result, typename std::enable_if::value && !Kokkos::is_reducer_type::value, - void*>::type = NULL) + void*>::type = nullptr) : m_functor(arg_functor), m_policy(arg_policy), m_reducer(InvalidType()), - m_result_ptr(arg_result.ptr_on_device()), + m_result_ptr(arg_result.data()), m_shmem_size(arg_policy.scratch_size(0) + arg_policy.scratch_size(1) + FunctorTeamShmemSize::value( arg_functor, arg_policy.team_size())) {} @@ -686,7 +1085,7 @@ class ParallelReduce, : m_functor(arg_functor), m_policy(arg_policy), m_reducer(reducer), - m_result_ptr(reducer.result_view().data()), + m_result_ptr(reducer.view().data()), m_shmem_size(arg_policy.scratch_size(0) + arg_policy.scratch_size(1) + FunctorTeamShmemSize::value( arg_functor, arg_policy.team_size())) { diff --git a/lib/kokkos/core/src/OpenMPTarget/Kokkos_OpenMPTarget_Parallel_MDRange.hpp b/lib/kokkos/core/src/OpenMPTarget/Kokkos_OpenMPTarget_Parallel_MDRange.hpp new file mode 100644 index 0000000000000000000000000000000000000000..4ce2dee122e86f608a00b315971965af171138d8 --- /dev/null +++ b/lib/kokkos/core/src/OpenMPTarget/Kokkos_OpenMPTarget_Parallel_MDRange.hpp @@ -0,0 +1,549 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 3.0 +// Copyright (2020) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +#ifndef KOKKOS_OPENMPTARGET_PARALLEL_MDRANGE_HPP +#define KOKKOS_OPENMPTARGET_PARALLEL_MDRANGE_HPP + +#include +#include +#include +#include +#include + +//---------------------------------------------------------------------------- +//---------------------------------------------------------------------------- + +namespace Kokkos { +namespace Impl { + +template +class ParallelFor, + Kokkos::Experimental::OpenMPTarget> { + private: + typedef Kokkos::MDRangePolicy Policy; + typedef typename Policy::work_tag WorkTag; + typedef typename Policy::member_type Member; + + const FunctorType m_functor; + const Policy m_policy; + + public: + inline void execute() const { + OpenMPTargetExec::verify_is_process( + "Kokkos::Experimental::OpenMPTarget parallel_for"); + OpenMPTargetExec::verify_initialized( + "Kokkos::Experimental::OpenMPTarget parallel_for"); + const int64_t begin = 0; + const int64_t end = m_policy.m_num_tiles; + FunctorType functor(m_functor); + Policy policy = m_policy; +#pragma omp target teams distribute map(to : functor) num_teams(end - begin) + { + for (ptrdiff_t tile_idx = begin; tile_idx < end; tile_idx++) { +#pragma omp parallel + { + typename Policy::point_type offset; + if (Policy::outer_direction == Policy::Left) { + for (int i = 0; i < Policy::rank; ++i) { + offset[i] = (tile_idx % policy.m_tile_end[i]) * policy.m_tile[i] + + policy.m_lower[i]; + tile_idx /= policy.m_tile_end[i]; + } + } else { + for (int i = Policy::rank - 1; i >= 0; --i) { + offset[i] = (tile_idx % policy.m_tile_end[i]) * policy.m_tile[i] + + policy.m_lower[i]; + tile_idx /= policy.m_tile_end[i]; + } + } + execute_tile(offset, functor, policy); + } + } + } + } + + template + inline typename std::enable_if::type execute_tile( + typename Policy::point_type offset, const FunctorType& functor, + const Policy& policy) const { + const ptrdiff_t begin_0 = offset[0]; + ptrdiff_t end_0 = begin_0 + policy.m_tile[0]; + end_0 = end_0 < policy.m_upper[0] ? end_0 : policy.m_upper[0]; +#pragma omp for + for (ptrdiff_t i0 = begin_0; i0 < end_0; i0++) { + functor(i0); + } + } + + template + inline typename std::enable_if::type execute_tile( + typename Policy::point_type offset, const FunctorType& functor, + const Policy& policy) const { + const ptrdiff_t begin_0 = offset[0]; + ptrdiff_t end_0 = begin_0 + policy.m_tile[0]; + end_0 = end_0 < policy.m_upper[0] ? end_0 : policy.m_upper[0]; + + const ptrdiff_t begin_1 = offset[1]; + ptrdiff_t end_1 = begin_1 + policy.m_tile[1]; + end_1 = end_1 < policy.m_upper[1] ? end_1 : policy.m_upper[1]; + +#pragma omp for collapse(2) + for (ptrdiff_t i0 = begin_0; i0 < end_0; i0++) + for (ptrdiff_t i1 = begin_1; i1 < end_1; i1++) functor(i0, i1); + } + + template + inline typename std::enable_if::type execute_tile( + typename Policy::point_type offset, const FunctorType& functor, + const Policy& policy) const { + const ptrdiff_t begin_0 = offset[0]; + ptrdiff_t end_0 = begin_0 + policy.m_tile[0]; + end_0 = end_0 < policy.m_upper[0] ? end_0 : policy.m_upper[0]; + + const ptrdiff_t begin_1 = offset[1]; + ptrdiff_t end_1 = begin_1 + policy.m_tile[1]; + end_1 = end_1 < policy.m_upper[1] ? end_1 : policy.m_upper[1]; + + const ptrdiff_t begin_2 = offset[2]; + ptrdiff_t end_2 = begin_2 + policy.m_tile[2]; + end_2 = end_2 < policy.m_upper[2] ? end_2 : policy.m_upper[2]; + +#pragma omp for collapse(3) + for (ptrdiff_t i0 = begin_0; i0 < end_0; i0++) + for (ptrdiff_t i1 = begin_1; i1 < end_1; i1++) + for (ptrdiff_t i2 = begin_2; i2 < end_2; i2++) functor(i0, i1, i2); + } + + template + inline typename std::enable_if::type execute_tile( + typename Policy::point_type offset, const FunctorType& functor, + const Policy& policy) const { + const ptrdiff_t begin_0 = offset[0]; + ptrdiff_t end_0 = begin_0 + policy.m_tile[0]; + end_0 = end_0 < policy.m_upper[0] ? end_0 : policy.m_upper[0]; + + const ptrdiff_t begin_1 = offset[1]; + ptrdiff_t end_1 = begin_1 + policy.m_tile[1]; + end_1 = end_1 < policy.m_upper[1] ? end_1 : policy.m_upper[1]; + + const ptrdiff_t begin_2 = offset[2]; + ptrdiff_t end_2 = begin_2 + policy.m_tile[2]; + end_2 = end_2 < policy.m_upper[2] ? end_2 : policy.m_upper[2]; + + const ptrdiff_t begin_3 = offset[3]; + ptrdiff_t end_3 = begin_3 + policy.m_tile[3]; + end_3 = end_3 < policy.m_upper[3] ? end_3 : policy.m_upper[3]; + +#pragma omp for collapse(4) + for (ptrdiff_t i0 = begin_0; i0 < end_0; i0++) + for (ptrdiff_t i1 = begin_1; i1 < end_1; i1++) + for (ptrdiff_t i2 = begin_2; i2 < end_2; i2++) + for (ptrdiff_t i3 = begin_3; i3 < end_3; i3++) + functor(i0, i1, i2, i3); + } + + template + inline typename std::enable_if::type execute_tile( + typename Policy::point_type offset, const FunctorType& functor, + const Policy& policy) const { + const ptrdiff_t begin_0 = offset[0]; + ptrdiff_t end_0 = begin_0 + policy.m_tile[0]; + end_0 = end_0 < policy.m_upper[0] ? end_0 : policy.m_upper[0]; + + const ptrdiff_t begin_1 = offset[1]; + ptrdiff_t end_1 = begin_1 + policy.m_tile[1]; + end_1 = end_1 < policy.m_upper[1] ? end_1 : policy.m_upper[1]; + + const ptrdiff_t begin_2 = offset[2]; + ptrdiff_t end_2 = begin_2 + policy.m_tile[2]; + end_2 = end_2 < policy.m_upper[2] ? end_2 : policy.m_upper[2]; + + const ptrdiff_t begin_3 = offset[3]; + ptrdiff_t end_3 = begin_3 + policy.m_tile[3]; + end_3 = end_3 < policy.m_upper[3] ? end_3 : policy.m_upper[3]; + + const ptrdiff_t begin_4 = offset[4]; + ptrdiff_t end_4 = begin_4 + policy.m_tile[4]; + end_4 = end_4 < policy.m_upper[4] ? end_4 : policy.m_upper[4]; + +#pragma omp for collapse(5) + for (ptrdiff_t i0 = begin_0; i0 < end_0; i0++) + for (ptrdiff_t i1 = begin_1; i1 < end_1; i1++) + for (ptrdiff_t i2 = begin_2; i2 < end_2; i2++) + for (ptrdiff_t i3 = begin_3; i3 < end_3; i3++) + for (ptrdiff_t i4 = begin_4; i4 < end_4; i4++) + functor(i0, i1, i2, i3, i4); + } + + template + inline typename std::enable_if::type execute_tile( + typename Policy::point_type offset, const FunctorType& functor, + const Policy& policy) const { + const ptrdiff_t begin_0 = offset[0]; + ptrdiff_t end_0 = begin_0 + policy.m_tile[0]; + end_0 = end_0 < policy.m_upper[0] ? end_0 : policy.m_upper[0]; + + const ptrdiff_t begin_1 = offset[1]; + ptrdiff_t end_1 = begin_1 + policy.m_tile[1]; + end_1 = end_1 < policy.m_upper[1] ? end_1 : policy.m_upper[1]; + + const ptrdiff_t begin_2 = offset[2]; + ptrdiff_t end_2 = begin_2 + policy.m_tile[2]; + end_2 = end_2 < policy.m_upper[2] ? end_2 : policy.m_upper[2]; + + const ptrdiff_t begin_3 = offset[3]; + ptrdiff_t end_3 = begin_3 + policy.m_tile[3]; + end_3 = end_3 < policy.m_upper[3] ? end_3 : policy.m_upper[3]; + + const ptrdiff_t begin_4 = offset[4]; + ptrdiff_t end_4 = begin_4 + policy.m_tile[4]; + end_4 = end_4 < policy.m_upper[4] ? end_4 : policy.m_upper[4]; + + const ptrdiff_t begin_5 = offset[5]; + ptrdiff_t end_5 = begin_5 + policy.m_tile[5]; + end_5 = end_5 < policy.m_upper[5] ? end_5 : policy.m_upper[5]; + +#pragma omp for collapse(6) + for (ptrdiff_t i0 = begin_0; i0 < end_0; i0++) + for (ptrdiff_t i1 = begin_1; i1 < end_1; i1++) + for (ptrdiff_t i2 = begin_2; i2 < end_2; i2++) + for (ptrdiff_t i3 = begin_3; i3 < end_3; i3++) + for (ptrdiff_t i4 = begin_4; i4 < end_4; i4++) + for (ptrdiff_t i5 = begin_5; i5 < end_5; i5++) + functor(i0, i1, i2, i3, i4, i5); + } + + template + inline typename std::enable_if::type execute_tile( + typename Policy::point_type offset, const FunctorType& functor, + const Policy& policy) const { + const ptrdiff_t begin_0 = offset[0]; + ptrdiff_t end_0 = begin_0 + policy.m_tile[0]; + end_0 = end_0 < policy.m_upper[0] ? end_0 : policy.m_upper[0]; + + const ptrdiff_t begin_1 = offset[1]; + ptrdiff_t end_1 = begin_1 + policy.m_tile[1]; + end_1 = end_1 < policy.m_upper[1] ? end_1 : policy.m_upper[1]; + + const ptrdiff_t begin_2 = offset[2]; + ptrdiff_t end_2 = begin_2 + policy.m_tile[2]; + end_2 = end_2 < policy.m_upper[2] ? end_2 : policy.m_upper[2]; + + const ptrdiff_t begin_3 = offset[3]; + ptrdiff_t end_3 = begin_3 + policy.m_tile[3]; + end_3 = end_3 < policy.m_upper[3] ? end_3 : policy.m_upper[3]; + + const ptrdiff_t begin_4 = offset[4]; + ptrdiff_t end_4 = begin_4 + policy.m_tile[4]; + end_4 = end_4 < policy.m_upper[4] ? end_4 : policy.m_upper[4]; + + const ptrdiff_t begin_5 = offset[5]; + ptrdiff_t end_5 = begin_5 + policy.m_tile[5]; + end_5 = end_5 < policy.m_upper[5] ? end_5 : policy.m_upper[5]; + + const ptrdiff_t begin_6 = offset[6]; + ptrdiff_t end_6 = begin_6 + policy.m_tile[6]; + end_6 = end_6 < policy.m_upper[6] ? end_6 : policy.m_upper[6]; + +#pragma omp for collapse(7) + for (ptrdiff_t i0 = begin_0; i0 < end_0; i0++) + for (ptrdiff_t i1 = begin_1; i1 < end_1; i1++) + for (ptrdiff_t i2 = begin_2; i2 < end_2; i2++) + for (ptrdiff_t i3 = begin_3; i3 < end_3; i3++) + for (ptrdiff_t i4 = begin_4; i4 < end_4; i4++) + for (ptrdiff_t i5 = begin_5; i5 < end_5; i5++) + for (ptrdiff_t i6 = begin_6; i6 < end_6; i6++) + functor(i0, i1, i2, i3, i4, i5, i6); + } + + template + inline typename std::enable_if::type execute_tile( + typename Policy::point_type offset, const FunctorType& functor, + const Policy& policy) const { + const ptrdiff_t begin_0 = offset[0]; + ptrdiff_t end_0 = begin_0 + policy.m_tile[0]; + end_0 = end_0 < policy.m_upper[0] ? end_0 : policy.m_upper[0]; + + const ptrdiff_t begin_1 = offset[1]; + ptrdiff_t end_1 = begin_1 + policy.m_tile[1]; + end_1 = end_1 < policy.m_upper[1] ? end_1 : policy.m_upper[1]; + + const ptrdiff_t begin_2 = offset[2]; + ptrdiff_t end_2 = begin_2 + policy.m_tile[2]; + end_2 = end_2 < policy.m_upper[2] ? end_2 : policy.m_upper[2]; + + const ptrdiff_t begin_3 = offset[3]; + ptrdiff_t end_3 = begin_3 + policy.m_tile[3]; + end_3 = end_3 < policy.m_upper[3] ? end_3 : policy.m_upper[3]; + + const ptrdiff_t begin_4 = offset[4]; + ptrdiff_t end_4 = begin_4 + policy.m_tile[4]; + end_4 = end_4 < policy.m_upper[4] ? end_4 : policy.m_upper[4]; + + const ptrdiff_t begin_5 = offset[5]; + ptrdiff_t end_5 = begin_5 + policy.m_tile[5]; + end_5 = end_5 < policy.m_upper[5] ? end_5 : policy.m_upper[5]; + + const ptrdiff_t begin_6 = offset[6]; + ptrdiff_t end_6 = begin_6 + policy.m_tile[6]; + end_6 = end_6 < policy.m_upper[6] ? end_6 : policy.m_upper[6]; + + const ptrdiff_t begin_7 = offset[7]; + ptrdiff_t end_7 = begin_7 + policy.m_tile[7]; + end_7 = end_7 < policy.m_upper[7] ? end_7 : policy.m_upper[7]; + +#pragma omp for collapse(8) + for (ptrdiff_t i0 = begin_0; i0 < end_0; i0++) + for (ptrdiff_t i1 = begin_1; i1 < end_1; i1++) + for (ptrdiff_t i2 = begin_2; i2 < end_2; i2++) + for (ptrdiff_t i3 = begin_3; i3 < end_3; i3++) + for (ptrdiff_t i4 = begin_4; i4 < end_4; i4++) + for (ptrdiff_t i5 = begin_5; i5 < end_5; i5++) + for (ptrdiff_t i6 = begin_6; i6 < end_6; i6++) + for (ptrdiff_t i7 = begin_7; i7 < end_7; i7++) + functor(i0, i1, i2, i3, i4, i5, i6, i7); + } + + inline ParallelFor(const FunctorType& arg_functor, Policy arg_policy) + : m_functor(arg_functor), m_policy(arg_policy) {} +}; + +} // namespace Impl +} // namespace Kokkos + +//---------------------------------------------------------------------------- +//---------------------------------------------------------------------------- + +namespace Kokkos { +namespace Impl { + +template +struct ParallelReduceSpecialize, + ReducerType, PointerType, ValueType, 0, 0> { + typedef Kokkos::RangePolicy PolicyType; + template + inline static + typename std::enable_if::value>::type + execute_impl(const FunctorType& f, const PolicyType& p, + PointerType result_ptr) { + OpenMPTargetExec::verify_is_process( + "Kokkos::Experimental::OpenMPTarget parallel_for"); + OpenMPTargetExec::verify_initialized( + "Kokkos::Experimental::OpenMPTarget parallel_for"); + const typename PolicyType::member_type begin = p.begin(); + const typename PolicyType::member_type end = p.end(); + + ValueType result = ValueType(); +#pragma omp target teams distribute parallel for num_teams(512) map(to:f) map(tofrom:result) reduction(+: result) + for (int i = begin; i < end; i++) f(i, result); + + *result_ptr = result; + } + + template + inline static + typename std::enable_if::value>::type + execute_impl(const FunctorType& f, const PolicyType& p, + PointerType result_ptr) { + OpenMPTargetExec::verify_is_process( + "Kokkos::Experimental::OpenMPTarget parallel_for"); + OpenMPTargetExec::verify_initialized( + "Kokkos::Experimental::OpenMPTarget parallel_for"); + const typename PolicyType::member_type begin = p.begin(); + const typename PolicyType::member_type end = p.end(); + + ValueType result = ValueType(); +#pragma omp target teams distribute parallel for num_teams(512) map(to:f) map(tofrom: result) reduction(+: result) + for (int i = begin; i < end; i++) f(TagType(), i, result); + + *result_ptr = result; + } + + inline static void execute(const FunctorType& f, const PolicyType& p, + PointerType ptr) { + execute_impl(f, p, ptr); + } +}; +/* +template struct ParallelReduceSpecialize { + + #pragma omp declare reduction(custom: ValueType : ReducerType::join(omp_out, +omp_in)) initializer ( ReducerType::init(omp_priv) ) + + template< class TagType > + inline static + typename std::enable_if< std::is_same< TagType , void >::value >::type + execute_impl(const FunctorType& f, const PolicyType& p, PointerType +result_ptr) + { + OpenMPTargetExec::verify_is_process("Kokkos::Experimental::OpenMPTarget +parallel_for"); + OpenMPTargetExec::verify_initialized("Kokkos::Experimental::OpenMPTarget +parallel_for"); const typename PolicyType::member_type begin = p.begin(); const +typename PolicyType::member_type end = p.end(); + + ValueType result = ValueType(); + #pragma omp target teams distribute parallel for num_teams(512) map(to:f) +map(tofrom:result) reduction(custom: result) for(int i=begin; i + inline static + typename std::enable_if< ! std::is_same< TagType , void >::value >::type + execute_impl(const FunctorType& f, const PolicyType& p, PointerType +result_ptr) + { + OpenMPTargetExec::verify_is_process("Kokkos::Experimental::OpenMPTarget +parallel_for"); + OpenMPTargetExec::verify_initialized("Kokkos::Experimental::OpenMPTarget +parallel_for"); const typename PolicyType::member_type begin = p.begin(); const +typename PolicyType::member_type end = p.end(); + + ValueType result = ValueType(); + #pragma omp target teams distribute parallel for num_teams(512) map(to:f) +map(tofrom: result) reduction(custom: result) for(int i=begin; i(f,p,ptr); + } +}; + + +template +class ParallelReduce, ReducerType, + Kokkos::Experimental::OpenMPTarget> { + private: + typedef Kokkos::MDRangePolicy Policy; + + typedef typename Policy::work_tag WorkTag; + typedef typename Policy::WorkRange WorkRange; + typedef typename Policy::member_type Member; + + typedef Kokkos::Impl::if_c::value, + FunctorType, ReducerType> + ReducerConditional; + typedef typename ReducerConditional::type ReducerTypeFwd; + typedef + typename Kokkos::Impl::if_c::value, + WorkTag, void>::type WorkTagFwd; + + // Static Assert WorkTag void if ReducerType not InvalidType + + typedef Kokkos::Impl::FunctorValueTraits + ValueTraits; + typedef Kokkos::Impl::FunctorValueInit ValueInit; + typedef Kokkos::Impl::FunctorValueJoin ValueJoin; + + enum { HasJoin = ReduceFunctorHasJoin::value }; + enum { UseReducer = is_reducer_type::value }; + + typedef typename ValueTraits::pointer_type pointer_type; + typedef typename ValueTraits::reference_type reference_type; + + typedef ParallelReduceSpecialize< + FunctorType, Policy, ReducerType, pointer_type, + typename ValueTraits::value_type, HasJoin, UseReducer> + ParForSpecialize; + + const FunctorType m_functor; + const Policy m_policy; + const ReducerType m_reducer; + const pointer_type m_result_ptr; + + public: + inline void execute() const { + ParForSpecialize::execute(m_functor, m_policy, m_result_ptr); + } + + template + inline ParallelReduce( + const FunctorType& arg_functor, Policy arg_policy, + const ViewType& arg_result_view, + typename std::enable_if::value && + !Kokkos::is_reducer_type::value, + void*>::type = NULL) + : m_functor(arg_functor), + m_policy(arg_policy), + m_reducer(InvalidType()), + m_result_ptr(arg_result_view.data()) { + //static_assert( std::is_same< typename ViewType::memory_space + // , Kokkos::HostSpace >::value + // , "Reduction result on Kokkos::Experimental::OpenMPTarget must be a + // Kokkos::View in HostSpace" ); + } + + inline ParallelReduce(const FunctorType& arg_functor, Policy arg_policy, + const ReducerType& reducer) + : m_functor(arg_functor), + m_policy(arg_policy), + m_reducer(reducer), + m_result_ptr(reducer.view().data()) { + //static_assert( std::is_same< typename ViewType::memory_space + // , Kokkos::HostSpace >::value + // , "Reduction result on Kokkos::Experimental::OpenMPTarget must be a + // Kokkos::View in HostSpace" ); + } +};*/ + +} // namespace Impl +} // namespace Kokkos + +//---------------------------------------------------------------------------- +//---------------------------------------------------------------------------- + +#endif /* KOKKOS_OPENMPTARGET_PARALLEL_HPP */ diff --git a/lib/kokkos/core/src/OpenMPTarget/Kokkos_OpenMPTarget_Task.hpp b/lib/kokkos/core/src/OpenMPTarget/Kokkos_OpenMPTarget_Task.hpp index a40ec19e798a31dfec081a33d0bc4a8d9b2ce51c..19956dad2e706825a20b6e91a966b4ea2b8c7ac6 100644 --- a/lib/kokkos/core/src/OpenMPTarget/Kokkos_OpenMPTarget_Task.hpp +++ b/lib/kokkos/core/src/OpenMPTarget/Kokkos_OpenMPTarget_Task.hpp @@ -113,7 +113,7 @@ class TaskExec { public: #if defined(KOKKOS_ACTIVE_EXECUTION_MEMORY_SPACE_HOST) void* team_shared() const { - return m_team_exec ? m_team_exec->scratch_thread() : (void*)0; + return m_team_exec ? m_team_exec->scratch_thread() : nullptr; } int team_shared_size() const { diff --git a/lib/kokkos/core/src/Qthreads/Kokkos_QthreadsExec.cpp b/lib/kokkos/core/src/Qthreads/Kokkos_QthreadsExec.cpp deleted file mode 100644 index 4372f3ce807fd8424f22c451205facd0c6503bdf..0000000000000000000000000000000000000000 --- a/lib/kokkos/core/src/Qthreads/Kokkos_QthreadsExec.cpp +++ /dev/null @@ -1,535 +0,0 @@ -/* -//@HEADER -// ************************************************************************ -// -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering -// Solutions of Sandia, LLC (NTESS). -// -// Under the terms of Contract DE-NA0003525 with NTESS, -// the U.S. Government retains certain rights in this software. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Christian R. Trott (crtrott@sandia.gov) -// -// ************************************************************************ -//@HEADER -*/ - -#include -#if defined(KOKKOS_ENABLE_QTHREADS) - -#include - -#include -#include -#include -#include -#include - -#include -#include -#include - -// Defines to enable experimental Qthreads functionality. -//#define QTHREAD_LOCAL_PRIORITY -//#define CLONED_TASKS - -//#include - -//---------------------------------------------------------------------------- - -namespace Kokkos { - -namespace Impl { - -namespace { - -enum { MAXIMUM_QTHREADS_WORKERS = 1024 }; - -/** s_exec is indexed by the reverse rank of the workers - * for faster fan-in / fan-out lookups - * [ n - 1, n - 2, ..., 0 ] - */ -QthreadsExec *s_exec[MAXIMUM_QTHREADS_WORKERS]; - -int s_number_shepherds = 0; -int s_number_workers_per_shepherd = 0; -int s_number_workers = 0; - -inline QthreadsExec **worker_exec() { - return s_exec + s_number_workers - - (qthread_shep() * s_number_workers_per_shepherd + - qthread_worker_local(NULL) + 1); -} - -const int s_base_size = QthreadsExec::align_alloc(sizeof(QthreadsExec)); - -int s_worker_reduce_end = 0; // End of worker reduction memory. -int s_worker_shared_end = 0; // Total of worker scratch memory. -int s_worker_shared_begin = 0; // Beginning of worker shared memory. - -QthreadsExecFunctionPointer volatile s_active_function = 0; -const void *volatile s_active_function_arg = 0; - -} // namespace - -} // namespace Impl - -} // namespace Kokkos - -//---------------------------------------------------------------------------- - -namespace Kokkos { - -int Qthreads::is_initialized() { return Impl::s_number_workers != 0; } - -int Qthreads::concurrency() { return Impl::s_number_workers_per_shepherd; } - -int Qthreads::in_parallel() { return Impl::s_active_function != 0; } - -void Qthreads::initialize(int thread_count) { - // Environment variable: QTHREAD_NUM_SHEPHERDS - // Environment variable: QTHREAD_NUM_WORKERS_PER_SHEP - // Environment variable: QTHREAD_HWPAR - - { - char buffer[256]; - snprintf(buffer, sizeof(buffer), "QTHREAD_HWPAR=%d", thread_count); - putenv(buffer); - } - - const bool ok_init = - (QTHREAD_SUCCESS == qthread_initialize()) && - (thread_count == - qthread_num_shepherds() * qthread_num_workers_local(NO_SHEPHERD)) && - (thread_count == qthread_num_workers()); - - bool ok_symmetry = true; - - if (ok_init) { - Impl::s_number_shepherds = qthread_num_shepherds(); - Impl::s_number_workers_per_shepherd = - qthread_num_workers_local(NO_SHEPHERD); - Impl::s_number_workers = - Impl::s_number_shepherds * Impl::s_number_workers_per_shepherd; - - for (int i = 0; ok_symmetry && i < Impl::s_number_shepherds; ++i) { - ok_symmetry = - (Impl::s_number_workers_per_shepherd == qthread_num_workers_local(i)); - } - } - - if (!ok_init || !ok_symmetry) { - std::ostringstream msg; - - msg << "Kokkos::Qthreads::initialize(" << thread_count << ") FAILED"; - msg << " : qthread_num_shepherds = " << qthread_num_shepherds(); - msg << " : qthread_num_workers_per_shepherd = " - << qthread_num_workers_local(NO_SHEPHERD); - msg << " : qthread_num_workers = " << qthread_num_workers(); - - if (!ok_symmetry) { - msg << " : qthread_num_workers_local = {"; - for (int i = 0; i < Impl::s_number_shepherds; ++i) { - msg << " " << qthread_num_workers_local(i); - } - msg << " }"; - } - - Impl::s_number_workers = 0; - Impl::s_number_shepherds = 0; - Impl::s_number_workers_per_shepherd = 0; - - if (ok_init) { - qthread_finalize(); - } - - Kokkos::Impl::throw_runtime_exception(msg.str()); - } - - Impl::QthreadsExec::resize_worker_scratch(256, 256); - - // Init the array for used for arbitrarily sized atomics. - Impl::init_lock_array_host_space(); -} - -void Qthreads::finalize() { - Impl::QthreadsExec::clear_workers(); - - if (Impl::s_number_workers) { - qthread_finalize(); - } - - Impl::s_number_workers = 0; - Impl::s_number_shepherds = 0; - Impl::s_number_workers_per_shepherd = 0; -} - -void Qthreads::print_configuration(std::ostream &s, const bool detail) { - s << "Kokkos::Qthreads {" - << " num_shepherds(" << Impl::s_number_shepherds << ")" - << " num_workers_per_shepherd(" << Impl::s_number_workers_per_shepherd - << ")" - << " }" << std::endl; -} - -Qthreads &Qthreads::instance(int) { - static Qthreads q; - return q; -} - -void Qthreads::fence() {} - -int Qthreads::shepherd_size() const { return Impl::s_number_shepherds; } -int Qthreads::shepherd_worker_size() const { - return Impl::s_number_workers_per_shepherd; -} - -const char *Qthreads::name() { return "Qthreads"; } - -} // namespace Kokkos - -//---------------------------------------------------------------------------- - -namespace Kokkos { - -namespace Impl { - -namespace { - -aligned_t driver_exec_all(void *arg) { - QthreadsExec &exec = **worker_exec(); - - (*s_active_function)(exec, s_active_function_arg); - - /* - fprintf( stdout - , "QthreadsExec driver worker(%d:%d) shepherd(%d:%d) - shepherd_worker(%d:%d) done\n" , exec.worker_rank() , exec.worker_size() , - exec.shepherd_rank() , exec.shepherd_size() , exec.shepherd_worker_rank() , - exec.shepherd_worker_size() - ); - fflush(stdout); - */ - - return 0; -} - -aligned_t driver_resize_worker_scratch(void *arg) { - static volatile int lock_begin = 0; - static volatile int lock_end = 0; - - QthreadsExec **const exec = worker_exec(); - - //---------------------------------------- - // Serialize allocation for thread safety. - - while (!atomic_compare_exchange_strong(&lock_begin, 0, 1)) - ; // Spin wait to claim lock. - - const bool ok = 0 == *exec; - - if (ok) { - *exec = (QthreadsExec *)malloc(s_base_size + s_worker_shared_end); - } - - lock_begin = 0; // Release lock. - - if (ok) { - new (*exec) QthreadsExec(); - } - - //---------------------------------------- - // Wait for all calls to complete to insure that each worker has executed. - - if (s_number_workers == 1 + atomic_fetch_add(&lock_end, 1)) { - lock_end = 0; - } - - while (lock_end) - ; - - /* - fprintf( stdout - , "QthreadsExec resize worker(%d:%d) shepherd(%d:%d) - shepherd_worker(%d:%d) done\n" , (**exec).worker_rank() , - (**exec).worker_size() , (**exec).shepherd_rank() , (**exec).shepherd_size() - , (**exec).shepherd_worker_rank() - , (**exec).shepherd_worker_size() - ); - fflush(stdout); - */ - - //---------------------------------------- - - if (!ok) { - fprintf(stderr, "Kokkos::QthreadsExec resize failed\n"); - fflush(stderr); - } - - return 0; -} - -void verify_is_process(const char *const label, bool not_active = false) { - const bool not_process = - 0 != qthread_shep() || 0 != qthread_worker_local(NULL); - const bool is_active = - not_active && (s_active_function || s_active_function_arg); - - if (not_process || is_active) { - std::string msg(label); - msg.append(" : FAILED"); - if (not_process) msg.append(" : not called by main process"); - if (is_active) msg.append(" : parallel execution in progress"); - Kokkos::Impl::throw_runtime_exception(msg); - } -} - -} // namespace - -int QthreadsExec::worker_per_shepherd() { - return s_number_workers_per_shepherd; -} - -QthreadsExec::QthreadsExec() { - const int shepherd_rank = qthread_shep(); - const int shepherd_worker_rank = qthread_worker_local(NULL); - const int worker_rank = - shepherd_rank * s_number_workers_per_shepherd + shepherd_worker_rank; - - m_worker_base = s_exec; - m_shepherd_base = s_exec + s_number_workers_per_shepherd * - ((s_number_shepherds - (shepherd_rank + 1))); - m_scratch_alloc = ((unsigned char *)this) + s_base_size; - m_reduce_end = s_worker_reduce_end; - m_shepherd_rank = shepherd_rank; - m_shepherd_size = s_number_shepherds; - m_shepherd_worker_rank = shepherd_worker_rank; - m_shepherd_worker_size = s_number_workers_per_shepherd; - m_worker_rank = worker_rank; - m_worker_size = s_number_workers; - m_worker_state = QthreadsExec::Active; -} - -void QthreadsExec::clear_workers() { - for (int iwork = 0; iwork < s_number_workers; ++iwork) { - QthreadsExec *const exec = s_exec[iwork]; - s_exec[iwork] = 0; - free(exec); - } -} - -void QthreadsExec::shared_reset(Qthreads::scratch_memory_space &space) { - new (&space) Qthreads::scratch_memory_space( - ((unsigned char *)(**m_shepherd_base).m_scratch_alloc) + - s_worker_shared_begin, - s_worker_shared_end - s_worker_shared_begin); -} - -void QthreadsExec::resize_worker_scratch(const int reduce_size, - const int shared_size) { - const int exec_all_reduce_alloc = align_alloc(reduce_size); - const int shepherd_scan_alloc = align_alloc(8); - const int shepherd_shared_end = - exec_all_reduce_alloc + shepherd_scan_alloc + align_alloc(shared_size); - - if (s_worker_reduce_end < exec_all_reduce_alloc || - s_worker_shared_end < shepherd_shared_end) { - /* - fprintf( stdout, "QthreadsExec::resize\n"); - fflush(stdout); - */ - - // Clear current worker memory before allocating new worker memory. - clear_workers(); - - // Increase the buffers to an aligned allocation. - s_worker_reduce_end = exec_all_reduce_alloc; - s_worker_shared_begin = exec_all_reduce_alloc + shepherd_scan_alloc; - s_worker_shared_end = shepherd_shared_end; - - // Need to query which shepherd this main 'process' is running. - - const int main_shep = qthread_shep(); - - // Have each worker resize its memory for proper first-touch. -#if 0 - for ( int jshep = 0; jshep < s_number_shepherds; ++jshep ) { - for ( int i = jshep != main_shep ? 0 : 1; i < s_number_workers_per_shepherd; ++i ) { - qthread_fork_to( driver_resize_worker_scratch, NULL, NULL, jshep ); - } - } -#else - // If this function is used before the 'qthreads.task_policy' unit test, - // the 'qthreads.task_policy' unit test fails with a seg-fault within - // libqthread.so. - for (int jshep = 0; jshep < s_number_shepherds; ++jshep) { - const int num_clone = jshep != main_shep - ? s_number_workers_per_shepherd - : s_number_workers_per_shepherd - 1; - - if (num_clone) { - const int ret = qthread_fork_clones_to_local_priority( - driver_resize_worker_scratch // Function - , - NULL // Function data block - , - NULL // Pointer to return value feb - , - jshep // Shepherd number - , - num_clone - 1 // Number of instances - 1 - ); - - assert(ret == QTHREAD_SUCCESS); - } - } -#endif - - driver_resize_worker_scratch(NULL); - - // Verify all workers allocated. - - bool ok = true; - for (int iwork = 0; ok && iwork < s_number_workers; ++iwork) { - ok = 0 != s_exec[iwork]; - } - - if (!ok) { - std::ostringstream msg; - msg << "Kokkos::Impl::QthreadsExec::resize : FAILED for workers {"; - for (int iwork = 0; iwork < s_number_workers; ++iwork) { - if (0 == s_exec[iwork]) { - msg << " " << (s_number_workers - (iwork + 1)); - } - } - msg << " }"; - Kokkos::Impl::throw_runtime_exception(msg.str()); - } - } -} - -void QthreadsExec::exec_all(Qthreads &, QthreadsExecFunctionPointer func, - const void *arg) { - verify_is_process("QthreadsExec::exec_all(...)", true); - - /* - fprintf( stdout, "QthreadsExec::exec_all\n"); - fflush(stdout); - */ - - s_active_function = func; - s_active_function_arg = arg; - - // Need to query which shepherd this main 'process' is running. - - const int main_shep = qthread_shep(); - -#if 0 - for ( int jshep = 0, iwork = 0; jshep < s_number_shepherds; ++jshep ) { - for ( int i = jshep != main_shep ? 0 : 1; i < s_number_workers_per_shepherd; ++i, ++iwork ) { - qthread_fork_to( driver_exec_all, NULL, NULL, jshep ); - } - } -#else - // If this function is used before the 'qthreads.task_policy' unit test, - // the 'qthreads.task_policy' unit test fails with a seg-fault within - // libqthread.so. - for (int jshep = 0; jshep < s_number_shepherds; ++jshep) { - const int num_clone = jshep != main_shep - ? s_number_workers_per_shepherd - : s_number_workers_per_shepherd - 1; - - if (num_clone) { - const int ret = qthread_fork_clones_to_local_priority( - driver_exec_all // Function - , - NULL // Function data block - , - NULL // Pointer to return value feb - , - jshep // Shepherd number - , - num_clone - 1 // Number of instances - 1 - ); - - assert(ret == QTHREAD_SUCCESS); - } - } -#endif - - driver_exec_all(NULL); - - s_active_function = 0; - s_active_function_arg = 0; -} - -void *QthreadsExec::exec_all_reduce_result() { - return s_exec[0]->m_scratch_alloc; -} - -} // namespace Impl - -} // namespace Kokkos - -namespace Kokkos { - -namespace Impl { - -QthreadsTeamPolicyMember::QthreadsTeamPolicyMember() - : m_exec(**worker_exec()), - m_team_shared(0, 0), - m_team_size(1), - m_team_rank(0), - m_league_size(1), - m_league_end(1), - m_league_rank(0) { - m_exec.shared_reset(m_team_shared); -} - -QthreadsTeamPolicyMember::QthreadsTeamPolicyMember( - const QthreadsTeamPolicyMember::TaskTeam &) - : m_exec(**worker_exec()), - m_team_shared(0, 0), - m_team_size(s_number_workers_per_shepherd), - m_team_rank(m_exec.shepherd_worker_rank()), - m_league_size(1), - m_league_end(1), - m_league_rank(0) { - m_exec.shared_reset(m_team_shared); -} - -} // namespace Impl - -} // namespace Kokkos - -#else -void KOKKOS_SRC_QTHREADS_EXEC_PREVENT_LINK_ERROR() {} -#endif // #if defined( KOKKOS_ENABLE_QTHREADS ) diff --git a/lib/kokkos/core/src/Qthreads/Kokkos_QthreadsExec.hpp b/lib/kokkos/core/src/Qthreads/Kokkos_QthreadsExec.hpp deleted file mode 100644 index aa0fd73a4abced088cefd24b036d11b30dadcbef..0000000000000000000000000000000000000000 --- a/lib/kokkos/core/src/Qthreads/Kokkos_QthreadsExec.hpp +++ /dev/null @@ -1,687 +0,0 @@ -/* -//@HEADER -// ************************************************************************ -// -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering -// Solutions of Sandia, LLC (NTESS). -// -// Under the terms of Contract DE-NA0003525 with NTESS, -// the U.S. Government retains certain rights in this software. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Christian R. Trott (crtrott@sandia.gov) -// -// ************************************************************************ -//@HEADER -*/ - -#ifndef KOKKOS_QTHREADSEXEC_HPP -#define KOKKOS_QTHREADSEXEC_HPP - -#include -#if defined(KOKKOS_ENABLE_QTHREADS) - -#include - -//---------------------------------------------------------------------------- - -namespace Kokkos { - -namespace Impl { - -class QthreadsExec; - -typedef void (*QthreadsExecFunctionPointer)(QthreadsExec &, const void *); - -class QthreadsExec { - private: - enum { Inactive = 0, Active = 1 }; - - const QthreadsExec *const *m_worker_base; - const QthreadsExec *const *m_shepherd_base; - - void *m_scratch_alloc; ///< Scratch memory [ reduce, team, shared ] - int m_reduce_end; ///< End of scratch reduction memory - - int m_shepherd_rank; - int m_shepherd_size; - - int m_shepherd_worker_rank; - int m_shepherd_worker_size; - - /* - * m_worker_rank = m_shepherd_rank * m_shepherd_worker_size + - * m_shepherd_worker_rank m_worker_size = m_shepherd_size * - * m_shepherd_worker_size - */ - int m_worker_rank; - int m_worker_size; - - int mutable volatile m_worker_state; - - friend class Kokkos::Qthreads; - - ~QthreadsExec(); - QthreadsExec(const QthreadsExec &); - QthreadsExec &operator=(const QthreadsExec &); - - public: - QthreadsExec(); - - /** Execute the input function on all available Qthreads workers. */ - static void exec_all(Qthreads &, QthreadsExecFunctionPointer, const void *); - - /** Barrier across all workers participating in the 'exec_all'. */ - void exec_all_barrier() const { - const int rev_rank = m_worker_size - (m_worker_rank + 1); - - int n, j; - - for (n = 1; (!(rev_rank & n)) && ((j = rev_rank + n) < m_worker_size); - n <<= 1) { - Impl::spinwait_while_equal(m_worker_base[j]->m_worker_state, - QthreadsExec::Active); - } - - if (rev_rank) { - m_worker_state = QthreadsExec::Inactive; - Impl::spinwait_while_equal(m_worker_state, QthreadsExec::Inactive); - } - - for (n = 1; (!(rev_rank & n)) && ((j = rev_rank + n) < m_worker_size); - n <<= 1) { - m_worker_base[j]->m_worker_state = QthreadsExec::Active; - } - } - - /** Barrier across workers within the shepherd with rank < team_rank. */ - void shepherd_barrier(const int team_size) const { - if (m_shepherd_worker_rank < team_size) { - const int rev_rank = team_size - (m_shepherd_worker_rank + 1); - - int n, j; - - for (n = 1; (!(rev_rank & n)) && ((j = rev_rank + n) < team_size); - n <<= 1) { - Impl::spinwait_while_equal(m_shepherd_base[j]->m_worker_state, - QthreadsExec::Active); - } - - if (rev_rank) { - m_worker_state = QthreadsExec::Inactive; - Impl::spinwait_while_equal(m_worker_state, QthreadsExec::Inactive); - } - - for (n = 1; (!(rev_rank & n)) && ((j = rev_rank + n) < team_size); - n <<= 1) { - m_shepherd_base[j]->m_worker_state = QthreadsExec::Active; - } - } - } - - /** Reduce across all workers participating in the 'exec_all'. */ - template - inline void exec_all_reduce(const FunctorType &func, - const ReducerType &reduce) const { - typedef Kokkos::Impl::if_c::value, - FunctorType, ReducerType> - ReducerConditional; - typedef typename ReducerConditional::type ReducerTypeFwd; - typedef Kokkos::Impl::FunctorValueJoin ValueJoin; - - const int rev_rank = m_worker_size - (m_worker_rank + 1); - - int n, j; - - for (n = 1; (!(rev_rank & n)) && ((j = rev_rank + n) < m_worker_size); - n <<= 1) { - const QthreadsExec &fan = *m_worker_base[j]; - - Impl::spinwait_while_equal(fan.m_worker_state, QthreadsExec::Active); - - ValueJoin::join(ReducerConditional::select(func, reduce), m_scratch_alloc, - fan.m_scratch_alloc); - } - - if (rev_rank) { - m_worker_state = QthreadsExec::Inactive; - Impl::spinwait_while_equal(m_worker_state, QthreadsExec::Inactive); - } - - for (n = 1; (!(rev_rank & n)) && ((j = rev_rank + n) < m_worker_size); - n <<= 1) { - m_worker_base[j]->m_worker_state = QthreadsExec::Active; - } - } - - /** Scan across all workers participating in the 'exec_all'. */ - template - inline void exec_all_scan(const FunctorType &func) const { - typedef Kokkos::Impl::FunctorValueInit ValueInit; - typedef Kokkos::Impl::FunctorValueJoin ValueJoin; - typedef Kokkos::Impl::FunctorValueOps ValueOps; - - const int rev_rank = m_worker_size - (m_worker_rank + 1); - - int n, j; - - for (n = 1; (!(rev_rank & n)) && ((j = rev_rank + n) < m_worker_size); - n <<= 1) { - Impl::spinwait_while_equal(m_worker_base[j]->m_worker_state, - QthreadsExec::Active); - } - - if (rev_rank) { - m_worker_state = QthreadsExec::Inactive; - Impl::spinwait_while_equal(m_worker_state, QthreadsExec::Inactive); - } else { - // Root thread scans across values before releasing threads. - // Worker data is in reverse order, so m_worker_base[0] is the - // highest ranking thread. - - // Copy from lower ranking to higher ranking worker. - for (int i = 1; i < m_worker_size; ++i) { - ValueOps::copy(func, m_worker_base[i - 1]->m_scratch_alloc, - m_worker_base[i]->m_scratch_alloc); - } - - ValueInit::init(func, m_worker_base[m_worker_size - 1]->m_scratch_alloc); - - // Join from lower ranking to higher ranking worker. - // Value at m_worker_base[n-1] is zero so skip adding it to - // m_worker_base[n-2]. - for (int i = m_worker_size - 1; --i > 0;) { - ValueJoin::join(func, m_worker_base[i - 1]->m_scratch_alloc, - m_worker_base[i]->m_scratch_alloc); - } - } - - for (n = 1; (!(rev_rank & n)) && ((j = rev_rank + n) < m_worker_size); - n <<= 1) { - m_worker_base[j]->m_worker_state = QthreadsExec::Active; - } - } - - //---------------------------------------- - - template - inline volatile Type *shepherd_team_scratch_value() const { - return (volatile Type *)(((unsigned char *)m_scratch_alloc) + m_reduce_end); - } - - template - inline void shepherd_broadcast(Type &value, const int team_size, - const int team_rank) const { - if (m_shepherd_base) { - Type *const shared_value = - m_shepherd_base[0]->shepherd_team_scratch_value(); - if (m_shepherd_worker_rank == team_rank) { - *shared_value = value; - } - memory_fence(); - shepherd_barrier(team_size); - value = *shared_value; - } - } - - template - inline Type shepherd_reduce(const int team_size, const Type &value) const { - volatile Type *const shared_value = shepherd_team_scratch_value(); - *shared_value = value; - // *shepherd_team_scratch_value() = value; - - memory_fence(); - - const int rev_rank = team_size - (m_shepherd_worker_rank + 1); - - int n, j; - - for (n = 1; (!(rev_rank & n)) && ((j = rev_rank + n) < team_size); - n <<= 1) { - Impl::spinwait_while_equal(m_shepherd_base[j]->m_worker_state, - QthreadsExec::Active); - } - - if (rev_rank) { - m_worker_state = QthreadsExec::Inactive; - Impl::spinwait_while_equal(m_worker_state, QthreadsExec::Inactive); - } else { - Type &accum = *m_shepherd_base[0]->shepherd_team_scratch_value(); - for (int i = 1; i < n; ++i) { - accum += *m_shepherd_base[i]->shepherd_team_scratch_value(); - } - for (int i = 1; i < n; ++i) { - *m_shepherd_base[i]->shepherd_team_scratch_value() = accum; - } - - memory_fence(); - } - - for (n = 1; (!(rev_rank & n)) && ((j = rev_rank + n) < team_size); - n <<= 1) { - m_shepherd_base[j]->m_worker_state = QthreadsExec::Active; - } - - return *shepherd_team_scratch_value(); - } - - template - inline typename JoinOp::value_type shepherd_reduce( - const int team_size, const typename JoinOp::value_type &value, - const JoinOp &op) const { - typedef typename JoinOp::value_type Type; - - volatile Type *const shared_value = shepherd_team_scratch_value(); - *shared_value = value; - // *shepherd_team_scratch_value() = value; - - memory_fence(); - - const int rev_rank = team_size - (m_shepherd_worker_rank + 1); - - int n, j; - - for (n = 1; (!(rev_rank & n)) && ((j = rev_rank + n) < team_size); - n <<= 1) { - Impl::spinwait_while_equal(m_shepherd_base[j]->m_worker_state, - QthreadsExec::Active); - } - - if (rev_rank) { - m_worker_state = QthreadsExec::Inactive; - Impl::spinwait_while_equal(m_worker_state, QthreadsExec::Inactive); - } else { - volatile Type &accum = - *m_shepherd_base[0]->shepherd_team_scratch_value(); - for (int i = 1; i < team_size; ++i) { - op.join(accum, - *m_shepherd_base[i]->shepherd_team_scratch_value()); - } - for (int i = 1; i < team_size; ++i) { - *m_shepherd_base[i]->shepherd_team_scratch_value() = accum; - } - - memory_fence(); - } - - for (n = 1; (!(rev_rank & n)) && ((j = rev_rank + n) < team_size); - n <<= 1) { - m_shepherd_base[j]->m_worker_state = QthreadsExec::Active; - } - - return *shepherd_team_scratch_value(); - } - - template - inline Type shepherd_scan(const int team_size, const Type &value, - Type *const global_value = 0) const { - *shepherd_team_scratch_value() = value; - - memory_fence(); - - const int rev_rank = team_size - (m_shepherd_worker_rank + 1); - - int n, j; - - for (n = 1; (!(rev_rank & n)) && ((j = rev_rank + n) < team_size); - n <<= 1) { - Impl::spinwait_while_equal(m_shepherd_base[j]->m_worker_state, - QthreadsExec::Active); - } - - if (rev_rank) { - m_worker_state = QthreadsExec::Inactive; - Impl::spinwait_while_equal(m_worker_state, QthreadsExec::Inactive); - } else { - // Root thread scans across values before releasing threads. - // Worker data is in reverse order, so m_shepherd_base[0] is the - // highest ranking thread. - - // Copy from lower ranking to higher ranking worker. - - Type accum = *m_shepherd_base[0]->shepherd_team_scratch_value(); - for (int i = 1; i < team_size; ++i) { - const Type tmp = - *m_shepherd_base[i]->shepherd_team_scratch_value(); - accum += tmp; - *m_shepherd_base[i - 1]->shepherd_team_scratch_value() = tmp; - } - - *m_shepherd_base[team_size - 1]->shepherd_team_scratch_value() = - global_value ? atomic_fetch_add(global_value, accum) : 0; - - // Join from lower ranking to higher ranking worker. - for (int i = team_size; --i;) { - *m_shepherd_base[i - 1]->shepherd_team_scratch_value() += - *m_shepherd_base[i]->shepherd_team_scratch_value(); - } - - memory_fence(); - } - - for (n = 1; (!(rev_rank & n)) && ((j = rev_rank + n) < team_size); - n <<= 1) { - m_shepherd_base[j]->m_worker_state = QthreadsExec::Active; - } - - return *shepherd_team_scratch_value(); - } - - //---------------------------------------- - - static inline int align_alloc(int size) { - enum { ALLOC_GRAIN = 1 << 6 /* power of two, 64bytes */ }; - enum { ALLOC_GRAIN_MASK = ALLOC_GRAIN - 1 }; - return (size + ALLOC_GRAIN_MASK) & ~ALLOC_GRAIN_MASK; - } - - void shared_reset(Qthreads::scratch_memory_space &); - - void *exec_all_reduce_value() const { return m_scratch_alloc; } - - static void *exec_all_reduce_result(); - - static void resize_worker_scratch(const int reduce_size, - const int shared_size); - static void clear_workers(); - - //---------------------------------------- - - inline int worker_rank() const { return m_worker_rank; } - inline int worker_size() const { return m_worker_size; } - inline int shepherd_worker_rank() const { return m_shepherd_worker_rank; } - inline int shepherd_worker_size() const { return m_shepherd_worker_size; } - inline int shepherd_rank() const { return m_shepherd_rank; } - inline int shepherd_size() const { return m_shepherd_size; } - - static int worker_per_shepherd(); -}; - -} // namespace Impl - -} // namespace Kokkos - -//---------------------------------------------------------------------------- - -namespace Kokkos { - -namespace Impl { - -class QthreadsTeamPolicyMember { - private: - typedef Kokkos::Qthreads execution_space; - typedef execution_space::scratch_memory_space scratch_memory_space; - - Impl::QthreadsExec &m_exec; - scratch_memory_space m_team_shared; - const int m_team_size; - const int m_team_rank; - const int m_league_size; - const int m_league_end; - int m_league_rank; - - public: - KOKKOS_INLINE_FUNCTION - const scratch_memory_space &team_shmem() const { return m_team_shared; } - - KOKKOS_INLINE_FUNCTION int league_rank() const { return m_league_rank; } - KOKKOS_INLINE_FUNCTION int league_size() const { return m_league_size; } - KOKKOS_INLINE_FUNCTION int team_rank() const { return m_team_rank; } - KOKKOS_INLINE_FUNCTION int team_size() const { return m_team_size; } - - KOKKOS_INLINE_FUNCTION void team_barrier() const -#if !defined(KOKKOS_ACTIVE_EXECUTION_MEMORY_SPACE_HOST) - { - } -#else - { - m_exec.shepherd_barrier(m_team_size); - } -#endif - - template - KOKKOS_INLINE_FUNCTION Type team_broadcast(const Type &value, int rank) const -#if !defined(KOKKOS_ACTIVE_EXECUTION_MEMORY_SPACE_HOST) - { - return Type(); - } -#else - { - return m_exec.template shepherd_broadcast(value, m_team_size, rank); - } -#endif - - template - KOKKOS_INLINE_FUNCTION Type team_reduce(const Type &value) const -#if !defined(KOKKOS_ACTIVE_EXECUTION_MEMORY_SPACE_HOST) - { - return Type(); - } -#else - { - return m_exec.template shepherd_reduce(m_team_size, value); - } -#endif - - template - KOKKOS_INLINE_FUNCTION typename JoinOp::value_type team_reduce( - const typename JoinOp::value_type &value, const JoinOp &op) const -#if !defined(KOKKOS_ACTIVE_EXECUTION_MEMORY_SPACE_HOST) - { - return typename JoinOp::value_type(); - } -#else - { - return m_exec.template shepherd_reduce(m_team_size, value, op); - } -#endif - - /** \brief Intra-team exclusive prefix sum with team_rank() ordering. - * - * The highest rank thread can compute the reduction total as - * reduction_total = dev.team_scan( value ) + value; - */ - template - KOKKOS_INLINE_FUNCTION Type team_scan(const Type &value) const -#if !defined(KOKKOS_ACTIVE_EXECUTION_MEMORY_SPACE_HOST) - { - return Type(); - } -#else - { - return m_exec.template shepherd_scan(m_team_size, value); - } -#endif - - /** \brief Intra-team exclusive prefix sum with team_rank() ordering - * with intra-team non-deterministic ordering accumulation. - * - * The global inter-team accumulation value will, at the end of the league's - * parallel execution, be the scan's total. Parallel execution ordering of - * the league's teams is non-deterministic. As such the base value for each - * team's scan operation is similarly non-deterministic. - */ - template - KOKKOS_INLINE_FUNCTION Type team_scan(const Type &value, - Type *const global_accum) const -#if !defined(KOKKOS_ACTIVE_EXECUTION_MEMORY_SPACE_HOST) - { - return Type(); - } -#else - { - return m_exec.template shepherd_scan(m_team_size, value, - global_accum); - } -#endif - - //---------------------------------------- - // Private driver for task-team parallel. - - struct TaskTeam {}; - - QthreadsTeamPolicyMember(); - explicit QthreadsTeamPolicyMember(const TaskTeam &); - - //---------------------------------------- - // Private for the driver ( for ( member_type i( exec, team ); i; - // i.next_team() ) { ... } - - // Initialize. - template - QthreadsTeamPolicyMember( - Impl::QthreadsExec &exec, - const Kokkos::Impl::TeamPolicyInternal &team) - : m_exec(exec), - m_team_shared(0, 0), - m_team_size(team.m_team_size), - m_team_rank(exec.shepherd_worker_rank()), - m_league_size(team.m_league_size), - m_league_end(team.m_league_size - - team.m_shepherd_iter * - (exec.shepherd_size() - (exec.shepherd_rank() + 1))), - m_league_rank(m_league_end > team.m_shepherd_iter - ? m_league_end - team.m_shepherd_iter - : 0) { - m_exec.shared_reset(m_team_shared); - } - - // Continue. - operator bool() const { return m_league_rank < m_league_end; } - - // Iterate. - void next_team() { - ++m_league_rank; - m_exec.shared_reset(m_team_shared); - } -}; - -template -class TeamPolicyInternal - : public PolicyTraits { - private: - const int m_league_size; - const int m_team_size; - const int m_shepherd_iter; - - public: - //! Tag this class as a kokkos execution policy. - typedef TeamPolicyInternal execution_policy; - typedef Qthreads execution_space; - typedef PolicyTraits traits; - - //---------------------------------------- - - template - inline static int team_size_max(const FunctorType &) { - return Qthreads::instance().shepherd_worker_size(); - } - - template - static int team_size_recommended(const FunctorType &f) { - return team_size_max(f); - } - - template - inline static int team_size_recommended(const FunctorType &f, const int &) { - return team_size_max(f); - } - - //---------------------------------------- - - inline int team_size() const { return m_team_size; } - inline int league_size() const { return m_league_size; } - - // One active team per shepherd. - TeamPolicyInternal(Kokkos::Qthreads &q, const int league_size, - const int team_size, const int /* vector_length */ = 0) - : m_league_size(league_size), - m_team_size(team_size < q.shepherd_worker_size() - ? team_size - : q.shepherd_worker_size()), - m_shepherd_iter((league_size + q.shepherd_size() - 1) / - q.shepherd_size()) {} - - // TODO: Make sure this is correct. - // One active team per shepherd. - TeamPolicyInternal(Kokkos::Qthreads &q, const int league_size, - const Kokkos::AUTO_t & /* team_size_request */ - , - const int /* vector_length */ = 0) - : m_league_size(league_size), - m_team_size(q.shepherd_worker_size()), - m_shepherd_iter((league_size + q.shepherd_size() - 1) / - q.shepherd_size()) {} - - // One active team per shepherd. - TeamPolicyInternal(const int league_size, const int team_size, - const int /* vector_length */ = 0) - : m_league_size(league_size), - m_team_size(team_size < Qthreads::instance().shepherd_worker_size() - ? team_size - : Qthreads::instance().shepherd_worker_size()), - m_shepherd_iter( - (league_size + Qthreads::instance().shepherd_size() - 1) / - Qthreads::instance().shepherd_size()) {} - - // TODO: Make sure this is correct. - // One active team per shepherd. - TeamPolicyInternal(const int league_size, - const Kokkos::AUTO_t & /* team_size_request */ - , - const int /* vector_length */ = 0) - : m_league_size(league_size), - m_team_size(Qthreads::instance().shepherd_worker_size()), - m_shepherd_iter( - (league_size + Qthreads::instance().shepherd_size() - 1) / - Qthreads::instance().shepherd_size()) {} - - // TODO: Doesn't do anything yet. Fix this. - /** \brief set chunk_size to a discrete value*/ - inline TeamPolicyInternal set_chunk_size( - typename traits::index_type chunk_size_) const { - TeamPolicyInternal p = *this; - // p.m_chunk_size = chunk_size_; - return p; - } - - typedef Impl::QthreadsTeamPolicyMember member_type; - - friend class Impl::QthreadsTeamPolicyMember; -}; - -} // namespace Impl - -} // namespace Kokkos - -//---------------------------------------------------------------------------- - -#endif -#endif // #define KOKKOS_QTHREADSEXEC_HPP diff --git a/lib/kokkos/core/src/Qthreads/Kokkos_Qthreads_Parallel.hpp b/lib/kokkos/core/src/Qthreads/Kokkos_Qthreads_Parallel.hpp deleted file mode 100644 index 8611818e27cbd385b21aa7c96f8c121fbc91a251..0000000000000000000000000000000000000000 --- a/lib/kokkos/core/src/Qthreads/Kokkos_Qthreads_Parallel.hpp +++ /dev/null @@ -1,753 +0,0 @@ -/* -//@HEADER -// ************************************************************************ -// -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering -// Solutions of Sandia, LLC (NTESS). -// -// Under the terms of Contract DE-NA0003525 with NTESS, -// the U.S. Government retains certain rights in this software. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Christian R. Trott (crtrott@sandia.gov) -// -// ************************************************************************ -//@HEADER -*/ - -#ifndef KOKKOS_QTHREADS_PARALLEL_HPP -#define KOKKOS_QTHREADS_PARALLEL_HPP - -#include -#if defined(KOKKOS_ENABLE_QTHREADS) - -#include - -#include - -#include - -#include - -//---------------------------------------------------------------------------- - -namespace Kokkos { -namespace Impl { - -//---------------------------------------------------------------------------- - -template -class ParallelFor, - Kokkos::Qthreads> { - private: - typedef Kokkos::RangePolicy Policy; - - typedef typename Policy::work_tag WorkTag; - typedef typename Policy::member_type Member; - typedef typename Policy::WorkRange WorkRange; - - const FunctorType m_functor; - const Policy m_policy; - - template - inline static - typename std::enable_if::value>::type - exec_range(const FunctorType& functor, const Member ibeg, - const Member iend) { - for (Member i = ibeg; i < iend; ++i) { - functor(i); - } - } - - template - inline static - typename std::enable_if::value>::type - exec_range(const FunctorType& functor, const Member ibeg, - const Member iend) { - const TagType t{}; - for (Member i = ibeg; i < iend; ++i) { - functor(t, i); - } - } - - // Function is called once by every concurrent thread. - static void exec(QthreadsExec& exec, const void* arg) { - const ParallelFor& self = *((const ParallelFor*)arg); - - const WorkRange range(self.m_policy, exec.worker_rank(), - exec.worker_size()); - - ParallelFor::template exec_range(self.m_functor, range.begin(), - range.end()); - - // All threads wait for completion. - exec.exec_all_barrier(); - } - - public: - inline void execute() const { - Impl::QthreadsExec::exec_all(Qthreads::instance(), &ParallelFor::exec, - this); - } - - ParallelFor(const FunctorType& arg_functor, const Policy& arg_policy) - : m_functor(arg_functor), m_policy(arg_policy) {} -}; - -//---------------------------------------------------------------------------- - -template -class ParallelReduce, ReducerType, - Kokkos::Qthreads> { - private: - typedef Kokkos::RangePolicy Policy; - - typedef typename Policy::work_tag WorkTag; - typedef typename Policy::WorkRange WorkRange; - typedef typename Policy::member_type Member; - - typedef Kokkos::Impl::if_c::value, - FunctorType, ReducerType> - ReducerConditional; - typedef typename ReducerConditional::type ReducerTypeFwd; - typedef - typename Kokkos::Impl::if_c::value, - WorkTag, void>::type WorkTagFwd; - - // Static Assert WorkTag void if ReducerType not InvalidType - - typedef Kokkos::Impl::FunctorValueTraits - ValueTraits; - typedef Kokkos::Impl::FunctorValueInit ValueInit; - - typedef typename ValueTraits::pointer_type pointer_type; - typedef typename ValueTraits::reference_type reference_type; - - const FunctorType m_functor; - const Policy m_policy; - const ReducerType m_reducer; - const pointer_type m_result_ptr; - - template - inline static - typename std::enable_if::value>::type - exec_range(const FunctorType& functor, const Member ibeg, - const Member iend, reference_type update) { - for (Member i = ibeg; i < iend; ++i) { - functor(i, update); - } - } - - template - inline static - typename std::enable_if::value>::type - exec_range(const FunctorType& functor, const Member ibeg, - const Member iend, reference_type update) { - const TagType t{}; - for (Member i = ibeg; i < iend; ++i) { - functor(t, i, update); - } - } - - static void exec(QthreadsExec& exec, const void* arg) { - const ParallelReduce& self = *((const ParallelReduce*)arg); - - const WorkRange range(self.m_policy, exec.worker_rank(), - exec.worker_size()); - - ParallelReduce::template exec_range( - self.m_functor, range.begin(), range.end(), - ValueInit::init( - ReducerConditional::select(self.m_functor, self.m_reducer), - exec.exec_all_reduce_value())); - - exec.template exec_all_reduce( - self.m_functor, self.m_reducer); - } - - public: - inline void execute() const { - QthreadsExec::resize_worker_scratch( - ValueTraits::value_size( - ReducerConditional::select(m_functor, m_reducer)), - 0); - Impl::QthreadsExec::exec_all(Qthreads::instance(), &ParallelReduce::exec, - this); - - const pointer_type data = - (pointer_type)QthreadsExec::exec_all_reduce_result(); - - Kokkos::Impl::FunctorFinal::final( - ReducerConditional::select(m_functor, m_reducer), data); - - if (m_result_ptr) { - const unsigned n = ValueTraits::value_count( - ReducerConditional::select(m_functor, m_reducer)); - for (unsigned i = 0; i < n; ++i) { - m_result_ptr[i] = data[i]; - } - } - } - - template - ParallelReduce( - const FunctorType& arg_functor, const Policy& arg_policy, - const ViewType& arg_result_view, - typename std::enable_if::value && - !Kokkos::is_reducer_type::value, - void*>::type = NULL) - : m_functor(arg_functor), - m_policy(arg_policy), - m_reducer(InvalidType()), - m_result_ptr(arg_result_view.data()) {} - - ParallelReduce(const FunctorType& arg_functor, Policy arg_policy, - const ReducerType& reducer) - : m_functor(arg_functor), - m_policy(arg_policy), - m_reducer(reducer), - m_result_ptr(reducer.result_view().data()) {} -}; - -//---------------------------------------------------------------------------- - -template -class ParallelFor, Kokkos::Qthreads> { - private: - typedef Kokkos::Impl::TeamPolicyInternal - Policy; - typedef typename Policy::member_type Member; - typedef typename Policy::work_tag WorkTag; - - const FunctorType m_functor; - const Policy m_policy; - - template - inline static - typename std::enable_if::value>::type - exec_team(const FunctorType& functor, Member member) { - while (member) { - functor(member); - member.team_barrier(); - member.next_team(); - } - } - - template - inline static - typename std::enable_if::value>::type - exec_team(const FunctorType& functor, Member member) { - const TagType t{}; - while (member) { - functor(t, member); - member.team_barrier(); - member.next_team(); - } - } - - static void exec(QthreadsExec& exec, const void* arg) { - const ParallelFor& self = *((const ParallelFor*)arg); - - ParallelFor::template exec_team(self.m_functor, - Member(exec, self.m_policy)); - - exec.exec_all_barrier(); - } - - public: - inline void execute() const { - QthreadsExec::resize_worker_scratch( - /* reduction memory */ 0, - /* team shared memory */ FunctorTeamShmemSize::value( - m_functor, m_policy.team_size())); - Impl::QthreadsExec::exec_all(Qthreads::instance(), &ParallelFor::exec, - this); - } - - ParallelFor(const FunctorType& arg_functor, const Policy& arg_policy) - : m_functor(arg_functor), m_policy(arg_policy) {} -}; - -//---------------------------------------------------------------------------- - -template -class ParallelReduce, ReducerType, - Kokkos::Qthreads> { - private: - typedef Kokkos::Impl::TeamPolicyInternal - Policy; - - typedef typename Policy::work_tag WorkTag; - typedef typename Policy::member_type Member; - - typedef Kokkos::Impl::if_c::value, - FunctorType, ReducerType> - ReducerConditional; - typedef typename ReducerConditional::type ReducerTypeFwd; - typedef - typename Kokkos::Impl::if_c::value, - WorkTag, void>::type WorkTagFwd; - - typedef Kokkos::Impl::FunctorValueTraits - ValueTraits; - typedef Kokkos::Impl::FunctorValueInit ValueInit; - - typedef typename ValueTraits::pointer_type pointer_type; - typedef typename ValueTraits::reference_type reference_type; - - const FunctorType m_functor; - const Policy m_policy; - const ReducerType m_reducer; - const pointer_type m_result_ptr; - - template - inline static - typename std::enable_if::value>::type - exec_team(const FunctorType& functor, Member member, - reference_type update) { - while (member) { - functor(member, update); - member.team_barrier(); - member.next_team(); - } - } - - template - inline static - typename std::enable_if::value>::type - exec_team(const FunctorType& functor, Member member, - reference_type update) { - const TagType t{}; - while (member) { - functor(t, member, update); - member.team_barrier(); - member.next_team(); - } - } - - static void exec(QthreadsExec& exec, const void* arg) { - const ParallelReduce& self = *((const ParallelReduce*)arg); - - ParallelReduce::template exec_team( - self.m_functor, Member(exec, self.m_policy), - ValueInit::init( - ReducerConditional::select(self.m_functor, self.m_reducer), - exec.exec_all_reduce_value())); - - exec.template exec_all_reduce( - self.m_functor, self.m_reducer); - } - - public: - inline void execute() const { - QthreadsExec::resize_worker_scratch( - /* reduction memory */ ValueTraits::value_size( - ReducerConditional::select(m_functor, m_reducer)), - /* team shared memory */ FunctorTeamShmemSize::value( - m_functor, m_policy.team_size())); - - Impl::QthreadsExec::exec_all(Qthreads::instance(), &ParallelReduce::exec, - this); - - const pointer_type data = - (pointer_type)QthreadsExec::exec_all_reduce_result(); - - Kokkos::Impl::FunctorFinal::final( - ReducerConditional::select(m_functor, m_reducer), data); - - if (m_result_ptr) { - const unsigned n = ValueTraits::value_count( - ReducerConditional::select(m_functor, m_reducer)); - for (unsigned i = 0; i < n; ++i) { - m_result_ptr[i] = data[i]; - } - } - } - - template - ParallelReduce( - const FunctorType& arg_functor, const Policy& arg_policy, - const ViewType& arg_result, - typename std::enable_if::value && - !Kokkos::is_reducer_type::value, - void*>::type = NULL) - : m_functor(arg_functor), - m_policy(arg_policy), - m_reducer(InvalidType()), - m_result_ptr(arg_result.ptr_on_device()) {} - - inline ParallelReduce(const FunctorType& arg_functor, Policy arg_policy, - const ReducerType& reducer) - : m_functor(arg_functor), - m_policy(arg_policy), - m_reducer(reducer), - m_result_ptr(reducer.result_view().data()) {} -}; - -//---------------------------------------------------------------------------- -//---------------------------------------------------------------------------- - -template -class ParallelScan, - Kokkos::Qthreads> { - private: - typedef Kokkos::RangePolicy Policy; - - typedef typename Policy::work_tag WorkTag; - typedef typename Policy::WorkRange WorkRange; - typedef typename Policy::member_type Member; - - typedef Kokkos::Impl::FunctorValueTraits ValueTraits; - typedef Kokkos::Impl::FunctorValueInit ValueInit; - - typedef typename ValueTraits::pointer_type pointer_type; - typedef typename ValueTraits::reference_type reference_type; - - const FunctorType m_functor; - const Policy m_policy; - - template - inline static - typename std::enable_if::value>::type - exec_range(const FunctorType& functor, const Member ibeg, - const Member iend, reference_type update, const bool final) { - for (Member i = ibeg; i < iend; ++i) { - functor(i, update, final); - } - } - - template - inline static - typename std::enable_if::value>::type - exec_range(const FunctorType& functor, const Member ibeg, - const Member iend, reference_type update, const bool final) { - const TagType t{}; - for (Member i = ibeg; i < iend; ++i) { - functor(t, i, update, final); - } - } - - static void exec(QthreadsExec& exec, const void* arg) { - const ParallelScan& self = *((const ParallelScan*)arg); - - const WorkRange range(self.m_policy, exec.worker_rank(), - exec.worker_size()); - - // Initialize thread-local value - reference_type update = - ValueInit::init(self.m_functor, exec.exec_all_reduce_value()); - - ParallelScan::template exec_range(self.m_functor, range.begin(), - range.end(), update, false); - - exec.template exec_all_scan( - self.m_functor); - - ParallelScan::template exec_range(self.m_functor, range.begin(), - range.end(), update, true); - - exec.exec_all_barrier(); - } - - public: - inline void execute() const { - QthreadsExec::resize_worker_scratch(ValueTraits::value_size(m_functor), 0); - Impl::QthreadsExec::exec_all(Qthreads::instance(), &ParallelScan::exec, - this); - } - - ParallelScan(const FunctorType& arg_functor, const Policy& arg_policy) - : m_functor(arg_functor), m_policy(arg_policy) {} -}; - -} // namespace Impl - -} // namespace Kokkos - -//---------------------------------------------------------------------------- -//---------------------------------------------------------------------------- - -namespace Kokkos { - -template -KOKKOS_INLINE_FUNCTION - Impl::TeamThreadRangeBoundariesStruct - TeamThreadRange(const Impl::QthreadsTeamPolicyMember& thread, - const iType& count) { - return Impl::TeamThreadRangeBoundariesStruct( - thread, count); -} - -template -KOKKOS_INLINE_FUNCTION Impl::TeamThreadRangeBoundariesStruct< - typename std::common_type::type, - Impl::QthreadsTeamPolicyMember> -TeamThreadRange(const Impl::QthreadsTeamPolicyMember& thread, - const iType1& begin, const iType2& end) { - typedef typename std::common_type::type iType; - return Impl::TeamThreadRangeBoundariesStruct( - thread, iType(begin), iType(end)); -} - -template -KOKKOS_INLINE_FUNCTION Impl::ThreadVectorRangeBoundariesStruct< - iType, Impl::QthreadsTeamPolicyMember> -ThreadVectorRange(const Impl::QthreadsTeamPolicyMember& thread, - const iType& count) { - return Impl::ThreadVectorRangeBoundariesStruct< - iType, Impl::QthreadsTeamPolicyMember>(thread, count); -} - -template -KOKKOS_INLINE_FUNCTION Impl::ThreadVectorRangeBoundariesStruct< - iType, Impl::QthreadsTeamPolicyMember> -ThreadVectorRange(const Impl::QthreadsTeamPolicyMember& thread, - const iType& arg_begin, const iType& arg_end) { - return Impl::ThreadVectorRangeBoundariesStruct< - iType, Impl::QthreadsTeamPolicyMember>(thread, arg_begin, arg_end); -} - -KOKKOS_INLINE_FUNCTION -Impl::ThreadSingleStruct PerTeam( - const Impl::QthreadsTeamPolicyMember& thread) { - return Impl::ThreadSingleStruct(thread); -} - -KOKKOS_INLINE_FUNCTION -Impl::VectorSingleStruct PerThread( - const Impl::QthreadsTeamPolicyMember& thread) { - return Impl::VectorSingleStruct(thread); -} - -/** \brief Inter-thread parallel_for. Executes lambda(iType i) for each - * i=0..N-1. - * - * The range i=0..N-1 is mapped to all threads of the the calling thread team. - * This functionality requires C++11 support.*/ -template -KOKKOS_INLINE_FUNCTION void parallel_for( - const Impl::TeamThreadRangeBoundariesStruct< - iType, Impl::QthreadsTeamPolicyMember>& loop_boundaries, - const Lambda& lambda) { - for (iType i = loop_boundaries.start; i < loop_boundaries.end; - i += loop_boundaries.increment) - lambda(i); -} - -/** \brief Inter-thread vector parallel_reduce. Executes lambda(iType i, - * ValueType & val) for each i=0..N-1. - * - * The range i=0..N-1 is mapped to all threads of the the calling thread team - * and a summation of val is performed and put into result. This functionality - * requires C++11 support.*/ -template -KOKKOS_INLINE_FUNCTION void parallel_reduce( - const Impl::TeamThreadRangeBoundariesStruct< - iType, Impl::QthreadsTeamPolicyMember>& loop_boundaries, - const Lambda& lambda, ValueType& result) { - result = ValueType(); - - for (iType i = loop_boundaries.start; i < loop_boundaries.end; - i += loop_boundaries.increment) { - ValueType tmp = ValueType(); - lambda(i, tmp); - result += tmp; - } - - result = - loop_boundaries.thread.team_reduce(result, Impl::JoinAdd()); -} - -/** \brief Intra-thread vector parallel_reduce. Executes lambda(iType i, - * ValueType & val) for each i=0..N-1. - * - * The range i=0..N-1 is mapped to all vector lanes of the the calling thread - * and a reduction of val is performed using JoinType(ValueType& val, const - * ValueType& update) and put into init_result. The input value of init_result - * is used as initializer for temporary variables of ValueType. Therefore the - * input value should be the neutral element with respect to the join operation - * (e.g. '0 for +-' or '1 for *'). This functionality requires C++11 support.*/ -template -KOKKOS_INLINE_FUNCTION void parallel_reduce( - const Impl::TeamThreadRangeBoundariesStruct< - iType, Impl::QthreadsTeamPolicyMember>& loop_boundaries, - const Lambda& lambda, const JoinType& join, ValueType& init_result) { - ValueType result = init_result; - - for (iType i = loop_boundaries.start; i < loop_boundaries.end; - i += loop_boundaries.increment) { - ValueType tmp = ValueType(); - lambda(i, tmp); - join(result, tmp); - } - - init_result = loop_boundaries.thread.team_reduce( - result, Impl::JoinLambdaAdapter(join)); -} - -/** \brief Intra-thread vector parallel_for. Executes lambda(iType i) for each - * i=0..N-1. - * - * The range i=0..N-1 is mapped to all vector lanes of the the calling thread. - * This functionality requires C++11 support.*/ -template -KOKKOS_INLINE_FUNCTION void parallel_for( - const Impl::ThreadVectorRangeBoundariesStruct< - iType, Impl::QthreadsTeamPolicyMember>& loop_boundaries, - const Lambda& lambda) { -#ifdef KOKKOS_ENABLE_PRAGMA_IVDEP -#pragma ivdep -#endif - for (iType i = loop_boundaries.start; i < loop_boundaries.end; - i += loop_boundaries.increment) - lambda(i); -} - -/** \brief Intra-thread vector parallel_reduce. Executes lambda(iType i, - * ValueType & val) for each i=0..N-1. - * - * The range i=0..N-1 is mapped to all vector lanes of the the calling thread - * and a summation of val is performed and put into result. This functionality - * requires C++11 support.*/ -template -KOKKOS_INLINE_FUNCTION void parallel_reduce( - const Impl::ThreadVectorRangeBoundariesStruct< - iType, Impl::QthreadsTeamPolicyMember>& loop_boundaries, - const Lambda& lambda, ValueType& result) { - result = ValueType(); -#ifdef KOKKOS_ENABLE_PRAGMA_IVDEP -#pragma ivdep -#endif - for (iType i = loop_boundaries.start; i < loop_boundaries.end; - i += loop_boundaries.increment) { - ValueType tmp = ValueType(); - lambda(i, tmp); - result += tmp; - } -} - -/** \brief Intra-thread vector parallel_reduce. Executes lambda(iType i, - * ValueType & val) for each i=0..N-1. - * - * The range i=0..N-1 is mapped to all vector lanes of the the calling thread - * and a reduction of val is performed using JoinType(ValueType& val, const - * ValueType& update) and put into init_result. The input value of init_result - * is used as initializer for temporary variables of ValueType. Therefore the - * input value should be the neutral element with respect to the join operation - * (e.g. '0 for +-' or '1 for *'). This functionality requires C++11 support.*/ -template -KOKKOS_INLINE_FUNCTION void parallel_reduce( - const Impl::ThreadVectorRangeBoundariesStruct< - iType, Impl::QthreadsTeamPolicyMember>& loop_boundaries, - const Lambda& lambda, const JoinType& join, ValueType& init_result) { - ValueType result = init_result; -#ifdef KOKKOS_ENABLE_PRAGMA_IVDEP -#pragma ivdep -#endif - for (iType i = loop_boundaries.start; i < loop_boundaries.end; - i += loop_boundaries.increment) { - ValueType tmp = ValueType(); - lambda(i, tmp); - join(result, tmp); - } - init_result = result; -} - -/** \brief Intra-thread vector parallel exclusive prefix sum. Executes - * lambda(iType i, ValueType & val, bool final) for each i=0..N-1. - * - * The range i=0..N-1 is mapped to all vector lanes in the thread and a scan - * operation is performed. Depending on the target execution space the operator - * might be called twice: once with final=false and once with final=true. When - * final==true val contains the prefix sum value. The contribution of this "i" - * needs to be added to val no matter whether final==true or not. In a serial - * execution (i.e. team_size==1) the operator is only called once with - * final==true. Scan_val will be set to the final sum value over all vector - * lanes. This functionality requires C++11 support.*/ -template -KOKKOS_INLINE_FUNCTION void parallel_scan( - const Impl::ThreadVectorRangeBoundariesStruct< - iType, Impl::QthreadsTeamPolicyMember>& loop_boundaries, - const FunctorType& lambda) { - typedef Kokkos::Impl::FunctorValueTraits ValueTraits; - typedef typename ValueTraits::value_type value_type; - - value_type scan_val = value_type(); - -#ifdef KOKKOS_ENABLE_PRAGMA_IVDEP -#pragma ivdep -#endif - for (iType i = loop_boundaries.start; i < loop_boundaries.end; - i += loop_boundaries.increment) { - lambda(i, scan_val, true); - } -} - -template -KOKKOS_INLINE_FUNCTION void single( - const Impl::VectorSingleStruct& - single_struct, - const FunctorType& lambda) { - lambda(); -} - -template -KOKKOS_INLINE_FUNCTION void single( - const Impl::ThreadSingleStruct& - single_struct, - const FunctorType& lambda) { - if (single_struct.team_member.team_rank() == 0) lambda(); -} - -template -KOKKOS_INLINE_FUNCTION void single( - const Impl::VectorSingleStruct& - single_struct, - const FunctorType& lambda, ValueType& val) { - lambda(val); -} - -template -KOKKOS_INLINE_FUNCTION void single( - const Impl::ThreadSingleStruct& - single_struct, - const FunctorType& lambda, ValueType& val) { - if (single_struct.team_member.team_rank() == 0) { - lambda(val); - } - single_struct.team_member.team_broadcast(val, 0); -} - -} // namespace Kokkos - -#endif -#endif /* #define KOKKOS_QTHREADS_PARALLEL_HPP */ diff --git a/lib/kokkos/core/src/Qthreads/Kokkos_Qthreads_Task.cpp b/lib/kokkos/core/src/Qthreads/Kokkos_Qthreads_Task.cpp deleted file mode 100644 index b3a903494a60e85115e97acf748170dd67b99ca4..0000000000000000000000000000000000000000 --- a/lib/kokkos/core/src/Qthreads/Kokkos_Qthreads_Task.cpp +++ /dev/null @@ -1,308 +0,0 @@ -/* -//@HEADER -// ************************************************************************ -// -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering -// Solutions of Sandia, LLC (NTESS). -// -// Under the terms of Contract DE-NA0003525 with NTESS, -// the U.S. Government retains certain rights in this software. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Christian R. Trott (crtrott@sandia.gov) -// -// ************************************************************************ -//@HEADER -*/ - -#include -#if defined(KOKKOS_ENABLE_QTHREADS) && defined(KOKKOS_ENABLE_TASKPOLICY) - -#include -#include - -//---------------------------------------------------------------------------- -//---------------------------------------------------------------------------- - -namespace Kokkos { -namespace Impl { - -template class TaskQueue; - -//---------------------------------------------------------------------------- - -TaskExec::TaskExec() - : m_self_exec(0), - m_team_exec(0), - m_sync_mask(0), - m_sync_value(0), - m_sync_step(0), - m_group_rank(0), - m_team_rank(0), - m_team_size(1) {} - -TaskExec::TaskExec(Kokkos::Impl::QthreadsExec &arg_exec, - int const arg_team_size) - : m_self_exec(&arg_exec), - m_team_exec(arg_exec.pool_rev(arg_exec.pool_rank_rev() / arg_team_size)), - m_sync_mask(0), - m_sync_value(0), - m_sync_step(0), - m_group_rank(arg_exec.pool_rank_rev() / arg_team_size), - m_team_rank(arg_exec.pool_rank_rev() % arg_team_size), - m_team_size(arg_team_size) { - // This team spans - // m_self_exec->pool_rev( team_size * group_rank ) - // m_self_exec->pool_rev( team_size * ( group_rank + 1 ) - 1 ) - - int64_t volatile *const sync = (int64_t *)m_self_exec->scratch_reduce(); - - sync[0] = int64_t(0); - sync[1] = int64_t(0); - - for (int i = 0; i < m_team_size; ++i) { - m_sync_value |= int64_t(1) << (8 * i); - m_sync_mask |= int64_t(3) << (8 * i); - } - - Kokkos::memory_fence(); -} - -#if defined(KOKKOS_ACTIVE_EXECUTION_MEMORY_SPACE_HOST) - -void TaskExec::team_barrier() const { - if (1 < m_team_size) { - if (m_team_exec->scratch_reduce_size() < int(2 * sizeof(int64_t))) { - Kokkos::abort("TaskQueue scratch_reduce memory too small"); - } - - // Use team shared memory to synchronize. - // Alternate memory locations between barriers to avoid a sequence - // of barriers overtaking one another. - - int64_t volatile *const sync = - ((int64_t *)m_team_exec->scratch_reduce()) + (m_sync_step & 0x01); - - // This team member sets one byte within the sync variable - int8_t volatile *const sync_self = ((int8_t *)sync) + m_team_rank; - -#if 0 -fprintf( stdout, - "barrier group(%d) member(%d) step(%d) wait(%lx) : before(%lx)\n", - m_group_rank, - m_team_rank, - m_sync_step, - m_sync_value, - *sync - ); -fflush(stdout); -#endif - - *sync_self = int8_t(m_sync_value & 0x03); // signal arrival - - while (m_sync_value != *sync) - ; // wait for team to arrive - -#if 0 -fprintf( stdout, - "barrier group(%d) member(%d) step(%d) wait(%lx) : after(%lx)\n", - m_group_rank, - m_team_rank, - m_sync_step, - m_sync_value, - *sync - ); -fflush(stdout); -#endif - - ++m_sync_step; - - if (0 == (0x01 & m_sync_step)) { // Every other step - m_sync_value ^= m_sync_mask; - if (1000 < m_sync_step) m_sync_step = 0; - } - } -} - -#endif - -//---------------------------------------------------------------------------- - -void TaskQueueSpecialization::execute( - TaskQueue *const queue) { - using execution_space = Kokkos::Qthreads; - using queue_type = TaskQueue; - using task_root_type = TaskBase; - using PoolExec = Kokkos::Impl::QthreadsExec; - using Member = TaskExec; - - task_root_type *const end = (task_root_type *)task_root_type::EndTag; - - // Required: team_size <= 8 - - const int team_size = PoolExec::pool_size(2); // Threads per core - // const int team_size = PoolExec::pool_size(1); // Threads per NUMA - - if (8 < team_size) { - Kokkos::abort("TaskQueue unsupported team size"); - } - -#pragma omp parallel - { - PoolExec &self = *PoolExec::get_thread_omp(); - - Member single_exec; - Member team_exec(self, team_size); - - // Team shared memory - task_root_type *volatile *const task_shared = - (task_root_type **)team_exec.m_team_exec->scratch_thread(); - -// Barrier across entire Qthreads thread pool to insure initialization -#pragma omp barrier - - // Loop until all queues are empty and no tasks in flight - - do { - // Each team lead attempts to acquire either a thread team task - // or collection of single thread tasks for the team. - - if (0 == team_exec.team_rank()) { - task_root_type *tmp = - 0 < *((volatile int *)&queue->m_ready_count) ? end : 0; - - // Loop by priority and then type - for (int i = 0; i < queue_type::NumQueue && end == tmp; ++i) { - for (int j = 0; j < 2 && end == tmp; ++j) { - tmp = queue_type::pop_task(&queue->m_ready[i][j]); - } - } - - *task_shared = tmp; - - // Fence to be sure shared_task_array is stored - Kokkos::memory_fence(); - } - - // Whole team waits for every team member to reach this statement - team_exec.team_barrier(); - - Kokkos::memory_fence(); - - task_root_type *const task = *task_shared; - -#if 0 -fprintf( stdout, - "\nexecute group(%d) member(%d) task_shared(0x%lx) task(0x%lx)\n", - team_exec.m_group_rank, - team_exec.m_team_rank, - uintptr_t(task_shared), - uintptr_t(task) - ); -fflush(stdout); -#endif - - if (0 == task) break; // 0 == m_ready_count - - if (end == task) { - team_exec.team_barrier(); - } else if (task_root_type::TaskTeam == task->m_task_type) { - // Thread Team Task - (*task->m_apply)(task, &team_exec); - - // The m_apply function performs a barrier - - if (0 == team_exec.team_rank()) { - // team member #0 completes the task, which may delete the task - queue->complete(task); - } - } else { - // Single Thread Task - - if (0 == team_exec.team_rank()) { - (*task->m_apply)(task, &single_exec); - - queue->complete(task); - } - - // All team members wait for whole team to reach this statement. - // Not necessary to complete the task. - // Is necessary to prevent task_shared from being updated - // before it is read by all threads. - team_exec.team_barrier(); - } - } while (1); - } - // END #pragma omp parallel -} - -void TaskQueueSpecialization:: - iff_single_thread_recursive_execute( - TaskQueue *const queue) { - using execution_space = Kokkos::Qthreads; - using queue_type = TaskQueue; - using task_root_type = TaskBase; - using Member = TaskExec; - - if (1 == omp_get_num_threads()) { - task_root_type *const end = (task_root_type *)task_root_type::EndTag; - - Member single_exec; - - task_root_type *task = end; - - do { - task = end; - - // Loop by priority and then type - for (int i = 0; i < queue_type::NumQueue && end == task; ++i) { - for (int j = 0; j < 2 && end == task; ++j) { - task = queue_type::pop_task(&queue->m_ready[i][j]); - } - } - - if (end == task) break; - - (*task->m_apply)(task, &single_exec); - - queue->complete(task); - - } while (1); - } -} - -} // namespace Impl -} // namespace Kokkos - -//---------------------------------------------------------------------------- -#else -void KOKKOS_SRC_QTHREADS_TASK_PREVENT_LINK_ERROR() {} -#endif /* #if defined( KOKKOS_ENABLE_QTHREADS ) && defined( \ - KOKKOS_ENABLE_TASKPOLICY ) */ diff --git a/lib/kokkos/core/src/Qthreads/Kokkos_Qthreads_Task.hpp b/lib/kokkos/core/src/Qthreads/Kokkos_Qthreads_Task.hpp deleted file mode 100644 index 1b2c3d3855e19d0a79af18257d2641eaf42239b5..0000000000000000000000000000000000000000 --- a/lib/kokkos/core/src/Qthreads/Kokkos_Qthreads_Task.hpp +++ /dev/null @@ -1,149 +0,0 @@ -/* -//@HEADER -// ************************************************************************ -// -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering -// Solutions of Sandia, LLC (NTESS). -// -// Under the terms of Contract DE-NA0003525 with NTESS, -// the U.S. Government retains certain rights in this software. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Christian R. Trott (crtrott@sandia.gov) -// -// ************************************************************************ -//@HEADER -*/ - -#ifndef KOKKOS_IMPL_QTHREADS_TASK_HPP -#define KOKKOS_IMPL_QTHREADS_TASK_HPP - -#include -#if defined(KOKKOS_ENABLE_QTHREADS) && defined(KOKKOS_ENABLE_TASKPOLICY) - -//---------------------------------------------------------------------------- -//---------------------------------------------------------------------------- - -namespace Kokkos { -namespace Impl { - -template <> -class TaskQueueSpecialization { - public: - using execution_space = Kokkos::Qthreads; - using queue_type = Kokkos::Impl::TaskQueue; - using task_base_type = Kokkos::Impl::TaskBase; - - // Must specify memory space - using memory_space = Kokkos::HostSpace; - - static void iff_single_thread_recursive_execute(queue_type* const); - - // Must provide task queue execution function - static void execute(queue_type* const); - - // Must provide mechanism to set function pointer in - // execution space from the host process. - template - static void proc_set_apply(task_base_type::function_type* ptr) { - using TaskType = TaskBase; - *ptr = TaskType::apply; - } -}; - -extern template class TaskQueue; - -//---------------------------------------------------------------------------- - -template <> -class TaskExec { - private: - TaskExec(TaskExec&&) = delete; - TaskExec(TaskExec const&) = delete; - TaskExec& operator=(TaskExec&&) = delete; - TaskExec& operator=(TaskExec const&) = delete; - - using PoolExec = Kokkos::Impl::QthreadsExec; - - friend class Kokkos::Impl::TaskQueue; - friend class Kokkos::Impl::TaskQueueSpecialization; - - PoolExec* const m_self_exec; ///< This thread's thread pool data structure - PoolExec* const m_team_exec; ///< Team thread's thread pool data structure - int64_t m_sync_mask; - int64_t mutable m_sync_value; - int mutable m_sync_step; - int m_group_rank; ///< Which "team" subset of thread pool - int m_team_rank; ///< Which thread within a team - int m_team_size; - - TaskExec(); - TaskExec(PoolExec& arg_exec, int arg_team_size); - - public: -#if defined(KOKKOS_ACTIVE_EXECUTION_MEMORY_SPACE_HOST) - void* team_shared() const { - return m_team_exec ? m_team_exec->scratch_thread() : (void*)0; - } - - int team_shared_size() const { - return m_team_exec ? m_team_exec->scratch_thread_size() : 0; - } - - /**\brief Whole team enters this function call - * before any teeam member returns from - * this function call. - */ - void team_barrier() const; -#else - KOKKOS_INLINE_FUNCTION void team_barrier() const {} - KOKKOS_INLINE_FUNCTION void* team_shared() const { return 0; } - KOKKOS_INLINE_FUNCTION int team_shared_size() const { return 0; } -#endif - - KOKKOS_INLINE_FUNCTION - int team_rank() const { return m_team_rank; } - - KOKKOS_INLINE_FUNCTION - int team_size() const { return m_team_size; } -}; - -} // namespace Impl -} // namespace Kokkos - -//---------------------------------------------------------------------------- -//---------------------------------------------------------------------------- - -//---------------------------------------------------------------------------- -//---------------------------------------------------------------------------- - -#endif /* #if defined( KOKKOS_ENABLE_TASKPOLICY ) */ -#endif /* #ifndef KOKKOS_IMPL_QTHREADS_TASK_HPP */ diff --git a/lib/kokkos/core/src/Qthreads/Kokkos_Qthreads_TaskPolicy.cpp.old b/lib/kokkos/core/src/Qthreads/Kokkos_Qthreads_TaskPolicy.cpp.old deleted file mode 100644 index a59afb2881e9f6771f8b9808af07ed6f54e25496..0000000000000000000000000000000000000000 --- a/lib/kokkos/core/src/Qthreads/Kokkos_Qthreads_TaskPolicy.cpp.old +++ /dev/null @@ -1,493 +0,0 @@ -/* -//@HEADER -// ************************************************************************ -// -// Kokkos v. 2.0 -// Copyright (2014) Sandia Corporation -// -// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, -// the U.S. Government retains certain rights in this software. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact H. Carter Edwards (hcedwar@sandia.gov) -// -// ************************************************************************ -//@HEADER -*/ - -// Experimental unified task-data parallel manycore LDRD. - - -#include -#if defined( KOKKOS_ENABLE_QTHREADS ) - -#include - -#include -#include - -#include -#include -#include -#include - -#include -#include - -#if defined( KOKKOS_ENABLE_TASKDAG ) - -namespace Kokkos { -namespace Experimental { -namespace Impl { - -typedef TaskMember< Kokkos::Qthreads , void , void > Task ; - -namespace { - -inline -unsigned padded_sizeof_derived( unsigned sizeof_derived ) -{ - return sizeof_derived + - ( sizeof_derived % sizeof(Task*) ? sizeof(Task*) - sizeof_derived % sizeof(Task*) : 0 ); -} - -// int lock_alloc_dealloc = 0 ; - -} // namespace - -void Task::deallocate( void * ptr ) -{ - // Counting on 'free' thread safety so lock/unlock not required. - // However, isolate calls here to mitigate future need to introduce lock/unlock. - - // lock - - // while ( ! Kokkos::atomic_compare_exchange_strong( & lock_alloc_dealloc , 0 , 1 ) ); - - free( ptr ); - - // unlock - - // Kokkos::atomic_compare_exchange_strong( & lock_alloc_dealloc , 1 , 0 ); -} - -void * Task::allocate( const unsigned arg_sizeof_derived - , const unsigned arg_dependence_capacity ) -{ - // Counting on 'malloc' thread safety so lock/unlock not required. - // However, isolate calls here to mitigate future need to introduce lock/unlock. - - // lock - - // while ( ! Kokkos::atomic_compare_exchange_strong( & lock_alloc_dealloc , 0 , 1 ) ); - - void * const ptr = malloc( padded_sizeof_derived( arg_sizeof_derived ) + arg_dependence_capacity * sizeof(Task*) ); - - // unlock - - // Kokkos::atomic_compare_exchange_strong( & lock_alloc_dealloc , 1 , 0 ); - - return ptr ; -} - -Task::~TaskMember() -{ - -} - - -Task::TaskMember( const function_verify_type arg_verify - , const function_dealloc_type arg_dealloc - , const function_single_type arg_apply_single - , const function_team_type arg_apply_team - , volatile int & arg_active_count - , const unsigned arg_sizeof_derived - , const unsigned arg_dependence_capacity - ) - : m_dealloc( arg_dealloc ) - , m_verify( arg_verify ) - , m_apply_single( arg_apply_single ) - , m_apply_team( arg_apply_team ) - , m_active_count( & arg_active_count ) - , m_qfeb(0) - , m_dep( (Task **)( ((unsigned char *) this) + padded_sizeof_derived( arg_sizeof_derived ) ) ) - , m_dep_capacity( arg_dependence_capacity ) - , m_dep_size( 0 ) - , m_ref_count( 0 ) - , m_state( Kokkos::Experimental::TASK_STATE_CONSTRUCTING ) -{ - qthread_empty( & m_qfeb ); // Set to full when complete - for ( unsigned i = 0 ; i < arg_dependence_capacity ; ++i ) m_dep[i] = 0 ; -} - -Task::TaskMember( const function_dealloc_type arg_dealloc - , const function_single_type arg_apply_single - , const function_team_type arg_apply_team - , volatile int & arg_active_count - , const unsigned arg_sizeof_derived - , const unsigned arg_dependence_capacity - ) - : m_dealloc( arg_dealloc ) - , m_verify( & Task::verify_type ) - , m_apply_single( arg_apply_single ) - , m_apply_team( arg_apply_team ) - , m_active_count( & arg_active_count ) - , m_qfeb(0) - , m_dep( (Task **)( ((unsigned char *) this) + padded_sizeof_derived( arg_sizeof_derived ) ) ) - , m_dep_capacity( arg_dependence_capacity ) - , m_dep_size( 0 ) - , m_ref_count( 0 ) - , m_state( Kokkos::Experimental::TASK_STATE_CONSTRUCTING ) -{ - qthread_empty( & m_qfeb ); // Set to full when complete - for ( unsigned i = 0 ; i < arg_dependence_capacity ; ++i ) m_dep[i] = 0 ; -} - -//---------------------------------------------------------------------------- - -void Task::throw_error_add_dependence() const -{ - std::cerr << "TaskMember< Qthreads >::add_dependence ERROR" - << " state(" << m_state << ")" - << " dep_size(" << m_dep_size << ")" - << std::endl ; - throw std::runtime_error("TaskMember< Qthreads >::add_dependence ERROR"); -} - -void Task::throw_error_verify_type() -{ - throw std::runtime_error("TaskMember< Qthreads >::verify_type ERROR"); -} - -//---------------------------------------------------------------------------- - -#if defined( KOKKOS_ACTIVE_EXECUTION_MEMORY_SPACE_HOST ) -void Task::assign( Task ** const lhs , Task * rhs , const bool no_throw ) -{ - static const char msg_error_header[] = "Kokkos::Impl::TaskManager::assign ERROR" ; - static const char msg_error_count[] = ": negative reference count" ; - static const char msg_error_complete[] = ": destroy task that is not complete" ; - static const char msg_error_dependences[] = ": destroy task that has dependences" ; - static const char msg_error_exception[] = ": caught internal exception" ; - - if ( rhs ) { Kokkos::atomic_increment( &(*rhs).m_ref_count ); } - - Task * const lhs_val = Kokkos::atomic_exchange( lhs , rhs ); - - if ( lhs_val ) { - - const int count = Kokkos::atomic_fetch_add( & (*lhs_val).m_ref_count , -1 ); - - const char * msg_error = 0 ; - - try { - - if ( 1 == count ) { - - // Reference count at zero, delete it - - // Should only be deallocating a completed task - if ( (*lhs_val).m_state == Kokkos::Experimental::TASK_STATE_COMPLETE ) { - - // A completed task should not have dependences... - for ( int i = 0 ; i < (*lhs_val).m_dep_size && 0 == msg_error ; ++i ) { - if ( (*lhs_val).m_dep[i] ) msg_error = msg_error_dependences ; - } - } - else { - msg_error = msg_error_complete ; - } - - if ( 0 == msg_error ) { - // Get deletion function and apply it - const Task::function_dealloc_type d = (*lhs_val).m_dealloc ; - - (*d)( lhs_val ); - } - } - else if ( count <= 0 ) { - msg_error = msg_error_count ; - } - } - catch( ... ) { - if ( 0 == msg_error ) msg_error = msg_error_exception ; - } - - if ( 0 != msg_error ) { - if ( no_throw ) { - std::cerr << msg_error_header << msg_error << std::endl ; - std::cerr.flush(); - } - else { - std::string msg(msg_error_header); - msg.append(msg_error); - throw std::runtime_error( msg ); - } - } - } -} -#endif - - -//---------------------------------------------------------------------------- - -void Task::closeout() -{ - enum { RESPAWN = int( Kokkos::Experimental::TASK_STATE_WAITING ) | - int( Kokkos::Experimental::TASK_STATE_EXECUTING ) }; - -#if 0 -fprintf( stdout - , "worker(%d.%d) task 0x%.12lx %s\n" - , qthread_shep() - , qthread_worker_local(NULL) - , reinterpret_cast(this) - , ( m_state == RESPAWN ? "respawn" : "complete" ) - ); -fflush(stdout); -#endif - - // When dependent tasks run there would be a race - // condition between destroying this task and - // querying the active count pointer from this task. - int volatile * const active_count = m_active_count ; - - if ( m_state == RESPAWN ) { - // Task requests respawn, set state to waiting and reschedule the task - m_state = Kokkos::Experimental::TASK_STATE_WAITING ; - schedule(); - } - else { - - // Task did not respawn, is complete - m_state = Kokkos::Experimental::TASK_STATE_COMPLETE ; - - // Release dependences before allowing dependent tasks to run. - // Otherwise there is a thread race condition for removing dependences. - for ( int i = 0 ; i < m_dep_size ; ++i ) { - assign( & m_dep[i] , 0 ); - } - - // Set Qthreads FEB to full so that dependent tasks are allowed to execute. - // This 'task' may be deleted immediately following this function call. - qthread_fill( & m_qfeb ); - - // The dependent task could now complete and destroy 'this' task - // before the call to 'qthread_fill' returns. Therefore, for - // thread safety assume that 'this' task has now been destroyed. - } - - // Decrement active task count before returning. - Kokkos::atomic_decrement( active_count ); -} - -aligned_t Task::qthread_func( void * arg ) -{ - Task * const task = reinterpret_cast< Task * >(arg); - - // First member of the team change state to executing. - // Use compare-exchange to avoid race condition with a respawn. - Kokkos::atomic_compare_exchange_strong( & task->m_state - , int(Kokkos::Experimental::TASK_STATE_WAITING) - , int(Kokkos::Experimental::TASK_STATE_EXECUTING) - ); - - if ( task->m_apply_team && ! task->m_apply_single ) { - Kokkos::Impl::QthreadsTeamPolicyMember::TaskTeam task_team_tag ; - - // Initialize team size and rank with shephered info - Kokkos::Impl::QthreadsTeamPolicyMember member( task_team_tag ); - - (*task->m_apply_team)( task , member ); - -#if 0 -fprintf( stdout - , "worker(%d.%d) task 0x%.12lx executed by member(%d:%d)\n" - , qthread_shep() - , qthread_worker_local(NULL) - , reinterpret_cast(task) - , member.team_rank() - , member.team_size() - ); -fflush(stdout); -#endif - - member.team_barrier(); - if ( member.team_rank() == 0 ) task->closeout(); - member.team_barrier(); - } - else if ( task->m_apply_team && task->m_apply_single == reinterpret_cast(1) ) { - // Team hard-wired to one, no cloning - Kokkos::Impl::QthreadsTeamPolicyMember member ; - (*task->m_apply_team)( task , member ); - task->closeout(); - } - else { - (*task->m_apply_single)( task ); - task->closeout(); - } - -#if 0 -fprintf( stdout - , "worker(%d.%d) task 0x%.12lx return\n" - , qthread_shep() - , qthread_worker_local(NULL) - , reinterpret_cast(task) - ); -fflush(stdout); -#endif - - return 0 ; -} - -void Task::respawn() -{ - // Change state from pure executing to ( waiting | executing ) - // to avoid confusion with simply waiting. - Kokkos::atomic_compare_exchange_strong( & m_state - , int(Kokkos::Experimental::TASK_STATE_EXECUTING) - , int(Kokkos::Experimental::TASK_STATE_WAITING | - Kokkos::Experimental::TASK_STATE_EXECUTING) - ); -} - -void Task::schedule() -{ - // Is waiting for execution - - // Increment active task count before spawning. - Kokkos::atomic_increment( m_active_count ); - - // spawn in Qthreads. must malloc the precondition array and give to Qthreads. - // Qthreads will eventually free this allocation so memory will not be leaked. - - // concern with thread safety of malloc, does this need to be guarded? - aligned_t ** qprecon = (aligned_t **) malloc( ( m_dep_size + 1 ) * sizeof(aligned_t *) ); - - qprecon[0] = reinterpret_cast( uintptr_t(m_dep_size) ); - - for ( int i = 0 ; i < m_dep_size ; ++i ) { - qprecon[i+1] = & m_dep[i]->m_qfeb ; // Qthreads precondition flag - } - - if ( m_apply_team && ! m_apply_single ) { - // If more than one shepherd spawn on a shepherd other than this shepherd - const int num_shepherd = qthread_num_shepherds(); - const int num_worker_per_shepherd = qthread_num_workers_local(NO_SHEPHERD); - const int this_shepherd = qthread_shep(); - - int spawn_shepherd = ( this_shepherd + 1 ) % num_shepherd ; - -#if 0 -fprintf( stdout - , "worker(%d.%d) task 0x%.12lx spawning on shepherd(%d) clone(%d)\n" - , qthread_shep() - , qthread_worker_local(NULL) - , reinterpret_cast(this) - , spawn_shepherd - , num_worker_per_shepherd - 1 - ); -fflush(stdout); -#endif - - qthread_spawn_cloneable - ( & Task::qthread_func - , this - , 0 - , NULL - , m_dep_size , qprecon /* dependences */ - , spawn_shepherd - , unsigned( QTHREAD_SPAWN_SIMPLE | QTHREAD_SPAWN_LOCAL_PRIORITY ) - , num_worker_per_shepherd - 1 - ); - } - else { - qthread_spawn( & Task::qthread_func /* function */ - , this /* function argument */ - , 0 - , NULL - , m_dep_size , qprecon /* dependences */ - , NO_SHEPHERD - , QTHREAD_SPAWN_SIMPLE /* allows optimization for non-blocking task */ - ); - } -} - -} // namespace Impl -} // namespace Experimental -} // namespace Kokkos - -namespace Kokkos { -namespace Experimental { - -TaskPolicy< Kokkos::Qthreads >:: -TaskPolicy - ( const unsigned /* arg_task_max_count */ - , const unsigned /* arg_task_max_size */ - , const unsigned arg_task_default_dependence_capacity - , const unsigned arg_task_team_size - ) - : m_default_dependence_capacity( arg_task_default_dependence_capacity ) - , m_team_size( arg_task_team_size != 0 ? arg_task_team_size : unsigned(qthread_num_workers_local(NO_SHEPHERD)) ) - , m_active_count_root(0) - , m_active_count( m_active_count_root ) -{ - const unsigned num_worker_per_shepherd = unsigned( qthread_num_workers_local(NO_SHEPHERD) ); - - if ( m_team_size != 1 && m_team_size != num_worker_per_shepherd ) { - std::ostringstream msg ; - msg << "Kokkos::Experimental::TaskPolicy< Kokkos::Qthreads >( " - << "default_depedence = " << arg_task_default_dependence_capacity - << " , team_size = " << arg_task_team_size - << " ) ERROR, valid team_size arguments are { (omitted) , 1 , " << num_worker_per_shepherd << " }" ; - Kokkos::Impl::throw_runtime_exception(msg.str()); - } -} - -TaskPolicy< Kokkos::Qthreads >::member_type & -TaskPolicy< Kokkos::Qthreads >::member_single() -{ - static member_type s ; - return s ; -} - -void wait( Kokkos::Experimental::TaskPolicy< Kokkos::Qthreads > & policy ) -{ - volatile int * const active_task_count = & policy.m_active_count ; - while ( *active_task_count ) qthread_yield(); -} - -} // namespace Experimental -} // namespace Kokkos - -#else -void KOKKOS_CORE_SRC_QTHREADS_KOKKOS_QTHREADS_TASKPOLICY_PREVENT_LINK_ERROR() {} -#endif // #if defined( KOKKOS_ENABLE_TASKDAG ) -#endif // #if defined( KOKKOS_ENABLE_QTHREADS ) - diff --git a/lib/kokkos/core/src/Qthreads/Kokkos_Qthreads_TaskPolicy.hpp.old b/lib/kokkos/core/src/Qthreads/Kokkos_Qthreads_TaskPolicy.hpp.old deleted file mode 100644 index adb6859763d39fbded63fdf476a6b04f639241cf..0000000000000000000000000000000000000000 --- a/lib/kokkos/core/src/Qthreads/Kokkos_Qthreads_TaskPolicy.hpp.old +++ /dev/null @@ -1,666 +0,0 @@ -/* -//@HEADER -// ************************************************************************ -// -// Kokkos v. 2.0 -// Copyright (2014) Sandia Corporation -// -// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, -// the U.S. Government retains certain rights in this software. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact H. Carter Edwards (hcedwar@sandia.gov) -// -// ************************************************************************ -//@HEADER -*/ - -// Experimental unified task-data parallel manycore LDRD - -#ifndef KOKKOS_QTHREADS_TASKSCHEDULER_HPP -#define KOKKOS_QTHREADS_TASKSCHEDULER_HPP - -#include -#if defined( KOKKOS_ENABLE_TASKDAG ) - -#include -#include -#include - -//---------------------------------------------------------------------------- -// Defines to enable experimental Qthreads functionality - -#define QTHREAD_LOCAL_PRIORITY -#define CLONED_TASKS - -#include - -#undef QTHREAD_LOCAL_PRIORITY -#undef CLONED_TASKS - -//---------------------------------------------------------------------------- - -#include -#include -#include - -#include - - -//---------------------------------------------------------------------------- - -namespace Kokkos { -namespace Experimental { -namespace Impl { - -template<> -class TaskMember< Kokkos::Qthreads , void , void > -{ -public: - - typedef TaskMember * (* function_verify_type) ( TaskMember * ); - typedef void (* function_single_type) ( TaskMember * ); - typedef void (* function_team_type) ( TaskMember * , Kokkos::Impl::QthreadsTeamPolicyMember & ); - typedef void (* function_dealloc_type)( TaskMember * ); - -private: - - const function_dealloc_type m_dealloc ; ///< Deallocation - const function_verify_type m_verify ; ///< Result type verification - const function_single_type m_apply_single ; ///< Apply function - const function_team_type m_apply_team ; ///< Apply function - int volatile * const m_active_count ; ///< Count of active tasks on this policy - aligned_t m_qfeb ; ///< Qthreads full/empty bit - TaskMember ** const m_dep ; ///< Dependences - const int m_dep_capacity ; ///< Capacity of dependences - int m_dep_size ; ///< Actual count of dependences - int m_ref_count ; ///< Reference count - int m_state ; ///< State of the task - - TaskMember() /* = delete */ ; - TaskMember( const TaskMember & ) /* = delete */ ; - TaskMember & operator = ( const TaskMember & ) /* = delete */ ; - - static aligned_t qthread_func( void * arg ); - - static void * allocate( const unsigned arg_sizeof_derived , const unsigned arg_dependence_capacity ); - static void deallocate( void * ); - - void throw_error_add_dependence() const ; - static void throw_error_verify_type(); - - template < class DerivedTaskType > - static - void deallocate( TaskMember * t ) - { - DerivedTaskType * ptr = static_cast< DerivedTaskType * >(t); - ptr->~DerivedTaskType(); - deallocate( (void *) ptr ); - } - - void schedule(); - void closeout(); - -protected : - - ~TaskMember(); - - // Used by TaskMember< Qthreads , ResultType , void > - TaskMember( const function_verify_type arg_verify - , const function_dealloc_type arg_dealloc - , const function_single_type arg_apply_single - , const function_team_type arg_apply_team - , volatile int & arg_active_count - , const unsigned arg_sizeof_derived - , const unsigned arg_dependence_capacity - ); - - // Used for TaskMember< Qthreads , void , void > - TaskMember( const function_dealloc_type arg_dealloc - , const function_single_type arg_apply_single - , const function_team_type arg_apply_team - , volatile int & arg_active_count - , const unsigned arg_sizeof_derived - , const unsigned arg_dependence_capacity - ); - -public: - - template< typename ResultType > - KOKKOS_FUNCTION static - TaskMember * verify_type( TaskMember * t ) - { - enum { check_type = ! std::is_same< ResultType , void >::value }; - - if ( check_type && t != 0 ) { - - // Verify that t->m_verify is this function - const function_verify_type self = & TaskMember::template verify_type< ResultType > ; - - if ( t->m_verify != self ) { - t = 0 ; -#if defined( KOKKOS_ACTIVE_EXECUTION_MEMORY_SPACE_HOST ) - throw_error_verify_type(); -#endif - } - } - return t ; - } - - //---------------------------------------- - /* Inheritence Requirements on task types: - * typedef FunctorType::value_type value_type ; - * class DerivedTaskType - * : public TaskMember< Qthreads , value_type , FunctorType > - * { ... }; - * class TaskMember< Qthreads , value_type , FunctorType > - * : public TaskMember< Qthreads , value_type , void > - * , public Functor - * { ... }; - * If value_type != void - * class TaskMember< Qthreads , value_type , void > - * : public TaskMember< Qthreads , void , void > - * - * Allocate space for DerivedTaskType followed by TaskMember*[ dependence_capacity ] - * - */ - - /** \brief Allocate and construct a single-thread task */ - template< class DerivedTaskType > - static - TaskMember * create_single( const typename DerivedTaskType::functor_type & arg_functor - , volatile int & arg_active_count - , const unsigned arg_dependence_capacity ) - { - typedef typename DerivedTaskType::functor_type functor_type ; - typedef typename functor_type::value_type value_type ; - - DerivedTaskType * const task = - new( allocate( sizeof(DerivedTaskType) , arg_dependence_capacity ) ) - DerivedTaskType( & TaskMember::template deallocate< DerivedTaskType > - , & TaskMember::template apply_single< functor_type , value_type > - , 0 - , arg_active_count - , sizeof(DerivedTaskType) - , arg_dependence_capacity - , arg_functor ); - - return static_cast< TaskMember * >( task ); - } - - /** \brief Allocate and construct a team-thread task */ - template< class DerivedTaskType > - static - TaskMember * create_team( const typename DerivedTaskType::functor_type & arg_functor - , volatile int & arg_active_count - , const unsigned arg_dependence_capacity - , const bool arg_is_team ) - { - typedef typename DerivedTaskType::functor_type functor_type ; - typedef typename functor_type::value_type value_type ; - - const function_single_type flag = reinterpret_cast( arg_is_team ? 0 : 1 ); - - DerivedTaskType * const task = - new( allocate( sizeof(DerivedTaskType) , arg_dependence_capacity ) ) - DerivedTaskType( & TaskMember::template deallocate< DerivedTaskType > - , flag - , & TaskMember::template apply_team< functor_type , value_type > - , arg_active_count - , sizeof(DerivedTaskType) - , arg_dependence_capacity - , arg_functor ); - - return static_cast< TaskMember * >( task ); - } - - void respawn(); - void spawn() - { - m_state = Kokkos::Experimental::TASK_STATE_WAITING ; - schedule(); - } - - //---------------------------------------- - - typedef FutureValueTypeIsVoidError get_result_type ; - - KOKKOS_INLINE_FUNCTION - get_result_type get() const { return get_result_type() ; } - - KOKKOS_INLINE_FUNCTION - Kokkos::Experimental::TaskState get_state() const { return Kokkos::Experimental::TaskState( m_state ); } - - //---------------------------------------- - -#if defined( KOKKOS_ACTIVE_EXECUTION_MEMORY_SPACE_HOST ) - static - void assign( TaskMember ** const lhs , TaskMember * const rhs , const bool no_throw = false ); -#else - KOKKOS_INLINE_FUNCTION static - void assign( TaskMember ** const lhs , TaskMember * const rhs , const bool no_throw = false ) {} -#endif - - KOKKOS_INLINE_FUNCTION - TaskMember * get_dependence( int i ) const - { return ( Kokkos::Experimental::TASK_STATE_EXECUTING == m_state && 0 <= i && i < m_dep_size ) ? m_dep[i] : (TaskMember*) 0 ; } - - KOKKOS_INLINE_FUNCTION - int get_dependence() const - { return m_dep_size ; } - - KOKKOS_INLINE_FUNCTION - void clear_dependence() - { - for ( int i = 0 ; i < m_dep_size ; ++i ) assign( m_dep + i , 0 ); - m_dep_size = 0 ; - } - - KOKKOS_INLINE_FUNCTION - void add_dependence( TaskMember * before ) - { - if ( ( Kokkos::Experimental::TASK_STATE_CONSTRUCTING == m_state || - Kokkos::Experimental::TASK_STATE_EXECUTING == m_state ) && - m_dep_size < m_dep_capacity ) { - assign( m_dep + m_dep_size , before ); - ++m_dep_size ; - } - else { - throw_error_add_dependence(); - } - } - - //---------------------------------------- - - template< class FunctorType , class ResultType > - KOKKOS_INLINE_FUNCTION static - void apply_single( typename std::enable_if< ! std::is_same< ResultType , void >::value , TaskMember * >::type t ) - { - typedef TaskMember< Kokkos::Qthreads , ResultType , FunctorType > derived_type ; - - // TaskMember< Kokkos::Qthreads , ResultType , FunctorType > - // : public TaskMember< Kokkos::Qthreads , ResultType , void > - // , public FunctorType - // { ... }; - - derived_type & m = * static_cast< derived_type * >( t ); - - Kokkos::Impl::FunctorApply< FunctorType , void , ResultType & >::apply( (FunctorType &) m , & m.m_result ); - } - - template< class FunctorType , class ResultType > - KOKKOS_INLINE_FUNCTION static - void apply_single( typename std::enable_if< std::is_same< ResultType , void >::value , TaskMember * >::type t ) - { - typedef TaskMember< Kokkos::Qthreads , ResultType , FunctorType > derived_type ; - - // TaskMember< Kokkos::Qthreads , ResultType , FunctorType > - // : public TaskMember< Kokkos::Qthreads , ResultType , void > - // , public FunctorType - // { ... }; - - derived_type & m = * static_cast< derived_type * >( t ); - - Kokkos::Impl::FunctorApply< FunctorType , void , void >::apply( (FunctorType &) m ); - } - - //---------------------------------------- - - template< class FunctorType , class ResultType > - KOKKOS_INLINE_FUNCTION static - void apply_team( typename std::enable_if< ! std::is_same< ResultType , void >::value , TaskMember * >::type t - , Kokkos::Impl::QthreadsTeamPolicyMember & member ) - { - typedef TaskMember< Kokkos::Qthreads , ResultType , FunctorType > derived_type ; - - derived_type & m = * static_cast< derived_type * >( t ); - - m.FunctorType::apply( member , m.m_result ); - } - - template< class FunctorType , class ResultType > - KOKKOS_INLINE_FUNCTION static - void apply_team( typename std::enable_if< std::is_same< ResultType , void >::value , TaskMember * >::type t - , Kokkos::Impl::QthreadsTeamPolicyMember & member ) - { - typedef TaskMember< Kokkos::Qthreads , ResultType , FunctorType > derived_type ; - - derived_type & m = * static_cast< derived_type * >( t ); - - m.FunctorType::apply( member ); - } -}; - -//---------------------------------------------------------------------------- -/** \brief Base class for tasks with a result value in the Qthreads execution space. - * - * The FunctorType must be void because this class is accessed by the - * Future class for the task and result value. - * - * Must be derived from TaskMember 'root class' so the Future class - * can correctly static_cast from the 'root class' to this class. - */ -template < class ResultType > -class TaskMember< Kokkos::Qthreads , ResultType , void > - : public TaskMember< Kokkos::Qthreads , void , void > -{ -public: - - ResultType m_result ; - - typedef const ResultType & get_result_type ; - - KOKKOS_INLINE_FUNCTION - get_result_type get() const { return m_result ; } - -protected: - - typedef TaskMember< Kokkos::Qthreads , void , void > task_root_type ; - typedef task_root_type::function_dealloc_type function_dealloc_type ; - typedef task_root_type::function_single_type function_single_type ; - typedef task_root_type::function_team_type function_team_type ; - - inline - TaskMember( const function_dealloc_type arg_dealloc - , const function_single_type arg_apply_single - , const function_team_type arg_apply_team - , volatile int & arg_active_count - , const unsigned arg_sizeof_derived - , const unsigned arg_dependence_capacity - ) - : task_root_type( & task_root_type::template verify_type< ResultType > - , arg_dealloc - , arg_apply_single - , arg_apply_team - , arg_active_count - , arg_sizeof_derived - , arg_dependence_capacity ) - , m_result() - {} -}; - -template< class ResultType , class FunctorType > -class TaskMember< Kokkos::Qthreads , ResultType , FunctorType > - : public TaskMember< Kokkos::Qthreads , ResultType , void > - , public FunctorType -{ -public: - - typedef FunctorType functor_type ; - - typedef TaskMember< Kokkos::Qthreads , void , void > task_root_type ; - typedef TaskMember< Kokkos::Qthreads , ResultType , void > task_base_type ; - typedef task_root_type::function_dealloc_type function_dealloc_type ; - typedef task_root_type::function_single_type function_single_type ; - typedef task_root_type::function_team_type function_team_type ; - - inline - TaskMember( const function_dealloc_type arg_dealloc - , const function_single_type arg_apply_single - , const function_team_type arg_apply_team - , volatile int & arg_active_count - , const unsigned arg_sizeof_derived - , const unsigned arg_dependence_capacity - , const functor_type & arg_functor - ) - : task_base_type( arg_dealloc - , arg_apply_single - , arg_apply_team - , arg_active_count - , arg_sizeof_derived - , arg_dependence_capacity ) - , functor_type( arg_functor ) - {} -}; - -} /* namespace Impl */ -} /* namespace Experimental */ -} /* namespace Kokkos */ - -//---------------------------------------------------------------------------- -//---------------------------------------------------------------------------- - -namespace Kokkos { -namespace Experimental { - -void wait( TaskPolicy< Kokkos::Qthreads > & ); - -template<> -class TaskPolicy< Kokkos::Qthreads > -{ -public: - - typedef Kokkos::Qthreads execution_space ; - typedef TaskPolicy execution_policy ; - typedef Kokkos::Impl::QthreadsTeamPolicyMember member_type ; - -private: - - typedef Impl::TaskMember< execution_space , void , void > task_root_type ; - - template< class FunctorType > - static inline - const task_root_type * get_task_root( const FunctorType * f ) - { - typedef Impl::TaskMember< execution_space , typename FunctorType::value_type , FunctorType > task_type ; - return static_cast< const task_root_type * >( static_cast< const task_type * >(f) ); - } - - template< class FunctorType > - static inline - task_root_type * get_task_root( FunctorType * f ) - { - typedef Impl::TaskMember< execution_space , typename FunctorType::value_type , FunctorType > task_type ; - return static_cast< task_root_type * >( static_cast< task_type * >(f) ); - } - - unsigned m_default_dependence_capacity ; - unsigned m_team_size ; - volatile int m_active_count_root ; - volatile int & m_active_count ; - -public: - - TaskPolicy - ( const unsigned arg_task_max_count - , const unsigned arg_task_max_size - , const unsigned arg_task_default_dependence_capacity = 4 - , const unsigned arg_task_team_size = 0 /* choose default */ - ); - - KOKKOS_FUNCTION TaskPolicy() = default ; - KOKKOS_FUNCTION TaskPolicy( TaskPolicy && rhs ) = default ; - KOKKOS_FUNCTION TaskPolicy( const TaskPolicy & rhs ) = default ; - KOKKOS_FUNCTION TaskPolicy & operator = ( TaskPolicy && rhs ) = default ; - KOKKOS_FUNCTION TaskPolicy & operator = ( const TaskPolicy & rhs ) = default ; - - //---------------------------------------- - - KOKKOS_INLINE_FUNCTION - int allocated_task_count() const { return m_active_count ; } - - template< class ValueType > - const Future< ValueType , execution_space > & - spawn( const Future< ValueType , execution_space > & f - , const bool priority = false ) const - { -#if defined( KOKKOS_ACTIVE_EXECUTION_MEMORY_SPACE_HOST ) - f.m_task->spawn(); -#endif - return f ; - } - - // Create single-thread task - - template< class FunctorType > - KOKKOS_INLINE_FUNCTION - Future< typename FunctorType::value_type , execution_space > - task_create( const FunctorType & functor - , const unsigned dependence_capacity = ~0u ) const - { - typedef typename FunctorType::value_type value_type ; - typedef Impl::TaskMember< execution_space , value_type , FunctorType > task_type ; - return Future< value_type , execution_space >( -#if defined( KOKKOS_ACTIVE_EXECUTION_MEMORY_SPACE_HOST ) - task_root_type::create_single< task_type > - ( functor - , m_active_count - , ( ~0u == dependence_capacity ? m_default_dependence_capacity : dependence_capacity ) - ) -#endif - ); - } - - template< class FunctorType > - Future< typename FunctorType::value_type , execution_space > - proc_create( const FunctorType & functor - , const unsigned dependence_capacity = ~0u ) const - { return task_create( functor , dependence_capacity ); } - - // Create thread-team task - - template< class FunctorType > - KOKKOS_INLINE_FUNCTION - Future< typename FunctorType::value_type , execution_space > - task_create_team( const FunctorType & functor - , const unsigned dependence_capacity = ~0u ) const - { - typedef typename FunctorType::value_type value_type ; - typedef Impl::TaskMember< execution_space , value_type , FunctorType > task_type ; - - return Future< value_type , execution_space >( -#if defined( KOKKOS_ACTIVE_EXECUTION_MEMORY_SPACE_HOST ) - task_root_type::create_team< task_type > - ( functor - , m_active_count - , ( ~0u == dependence_capacity ? m_default_dependence_capacity : dependence_capacity ) - , 1 < m_team_size - ) -#endif - ); - } - - template< class FunctorType > - KOKKOS_INLINE_FUNCTION - Future< typename FunctorType::value_type , execution_space > - proc_create_team( const FunctorType & functor - , const unsigned dependence_capacity = ~0u ) const - { return task_create_team( functor , dependence_capacity ); } - - // Add dependence - template< class A1 , class A2 , class A3 , class A4 > - void add_dependence( const Future & after - , const Future & before - , typename std::enable_if - < std::is_same< typename Future::execution_space , execution_space >::value - && - std::is_same< typename Future::execution_space , execution_space >::value - >::type * = 0 - ) - { -#if defined( KOKKOS_ACTIVE_EXECUTION_MEMORY_SPACE_HOST ) - after.m_task->add_dependence( before.m_task ); -#endif - } - - //---------------------------------------- - // Functions for an executing task functor to query dependences, - // set new dependences, and respawn itself. - - template< class FunctorType > - Future< void , execution_space > - get_dependence( const FunctorType * task_functor , int i ) const - { - return Future( -#if defined( KOKKOS_ACTIVE_EXECUTION_MEMORY_SPACE_HOST ) - get_task_root(task_functor)->get_dependence(i) -#endif - ); - } - - template< class FunctorType > - int get_dependence( const FunctorType * task_functor ) const -#if defined( KOKKOS_ACTIVE_EXECUTION_MEMORY_SPACE_HOST ) - { return get_task_root(task_functor)->get_dependence(); } -#else - { return 0 ; } -#endif - - template< class FunctorType > - void clear_dependence( FunctorType * task_functor ) const - { -#if defined( KOKKOS_ACTIVE_EXECUTION_MEMORY_SPACE_HOST ) - get_task_root(task_functor)->clear_dependence(); -#endif - } - - template< class FunctorType , class A3 , class A4 > - void add_dependence( FunctorType * task_functor - , const Future & before - , typename std::enable_if - < std::is_same< typename Future::execution_space , execution_space >::value - >::type * = 0 - ) - { -#if defined( KOKKOS_ACTIVE_EXECUTION_MEMORY_SPACE_HOST ) - get_task_root(task_functor)->add_dependence( before.m_task ); -#endif - } - - template< class FunctorType > - void respawn( FunctorType * task_functor - , const bool priority = false ) const - { -#if defined( KOKKOS_ACTIVE_EXECUTION_MEMORY_SPACE_HOST ) - get_task_root(task_functor)->respawn(); -#endif - } - - template< class FunctorType > - void respawn_needing_memory( FunctorType * task_functor ) const - { -#if defined( KOKKOS_ACTIVE_EXECUTION_MEMORY_SPACE_HOST ) - get_task_root(task_functor)->respawn(); -#endif - } - - static member_type & member_single(); - - friend void wait( TaskPolicy< Kokkos::Qthreads > & ); -}; - -} /* namespace Experimental */ -} // namespace Kokkos - -//---------------------------------------------------------------------------- -//---------------------------------------------------------------------------- - -#endif /* #if defined( KOKKOS_ENABLE_TASKDAG ) */ -#endif /* #define KOKKOS_QTHREADS_TASK_HPP */ - diff --git a/lib/kokkos/core/src/Qthreads/Kokkos_Qthreads_TaskQueue.hpp b/lib/kokkos/core/src/Qthreads/Kokkos_Qthreads_TaskQueue.hpp deleted file mode 100644 index b9b6dd86e41eaa750cb5c3fae4d5d732aac94d89..0000000000000000000000000000000000000000 --- a/lib/kokkos/core/src/Qthreads/Kokkos_Qthreads_TaskQueue.hpp +++ /dev/null @@ -1,321 +0,0 @@ -/* -//@HEADER -// ************************************************************************ -// -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering -// Solutions of Sandia, LLC (NTESS). -// -// Under the terms of Contract DE-NA0003525 with NTESS, -// the U.S. Government retains certain rights in this software. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Christian R. Trott (crtrott@sandia.gov) -// -// ************************************************************************ -//@HEADER -*/ - -#ifndef KOKKOS_QTHREADS_TASKQUEUE_HPP -#define KOKKOS_QTHREADS_TASKQUEUE_HPP - -#include -#if defined(KOKKOS_ENABLE_QTHREADS) && defined(KOKKOS_ENABLE_TASKPOLICY) - -//---------------------------------------------------------------------------- -//---------------------------------------------------------------------------- - -namespace Kokkos { -namespace Impl { - -/** \brief Manage task allocation, deallocation, and scheduling. - * - * Task execution is handled here directly for the Qthread implementation. - */ -template <> -class TaskQueue { - private: - using execution_space = Kokkos::Qthread; - using memory_space = Kokkos::HostSpace using device_type = - Kokkos::Device; - using memory_pool = Kokkos::MemoryPool; - using task_root_type = Kokkos::Impl::TaskBase; - - friend class Kokkos::TaskScheduler; - - struct Destroy { - TaskQueue* m_queue; - void destroy_shared_allocation(); - }; - - //---------------------------------------- - - enum : int { - TASK_STATE_NULL = 0, ///< Does not exist - TASK_STATE_CONSTRUCTING = 1, ///< Is under construction - TASK_STATE_WAITING = 2, ///< Is waiting for execution - TASK_STATE_EXECUTING = 4, ///< Is executing - TASK_STATE_RESPAWN = 8, ///< Requested respawn - TASK_STATE_COMPLETE = 16 ///< Execution is complete - }; - - // Queue is organized as [ priority ][ type ] - - memory_pool m_memory; - unsigned m_team_size; // Number of threads in a team - long m_accum_alloc; // Accumulated number of allocations - int m_count_alloc; // Current number of allocations - int m_max_alloc; // Maximum number of allocations - int m_ready_count; // Number of ready or executing - - //---------------------------------------- - - ~TaskQueue(); - TaskQueue() = delete; - TaskQueue(TaskQueue&&) = delete; - TaskQueue(TaskQueue const&) = delete; - TaskQueue& operator=(TaskQueue&&) = delete; - TaskQueue& operator=(TaskQueue const&) = delete; - - TaskQueue(const memory_space& arg_space, - unsigned const arg_memory_pool_capacity, - unsigned const arg_memory_pool_superblock_capacity_log2); - - // Schedule a task - // Precondition: - // task is not executing - // task->m_next is the dependence or zero - // Postcondition: - // task->m_next is linked list membership - KOKKOS_FUNCTION - void schedule(task_root_type* const); - - // Reschedule a task - // Precondition: - // task is in Executing state - // task->m_next == LockTag - // Postcondition: - // task is in Executing-Respawn state - // task->m_next == 0 (no dependence) - KOKKOS_FUNCTION - void reschedule(task_root_type*); - - // Complete a task - // Precondition: - // task is not executing - // task->m_next == LockTag => task is complete - // task->m_next != LockTag => task is respawn - // Postcondition: - // task->m_wait == LockTag => task is complete - // task->m_wait != LockTag => task is waiting - KOKKOS_FUNCTION - void complete(task_root_type*); - - public: - // If and only if the execution space is a single thread - // then execute ready tasks. - KOKKOS_INLINE_FUNCTION - void iff_single_thread_recursive_execute() { -#if defined(KOKKOS_ACTIVE_EXECUTION_MEMORY_SPACE_HOST) - specialization::iff_single_thread_recursive_execute(this); -#endif - } - - void execute() { specialization::execute(this); } - - template - void proc_set_apply(typename task_root_type::function_type* ptr) { - specialization::template proc_set_apply(ptr); - } - - // Assign task pointer with reference counting of assigned tasks - template - KOKKOS_FUNCTION static void assign( - TaskBase** const lhs, - TaskBase* const rhs) { - using task_lhs = TaskBase; -#if 0 - { - printf( "assign( 0x%lx { 0x%lx %d %d }, 0x%lx { 0x%lx %d %d } )\n", - uintptr_t( lhs ? *lhs : 0 ), - uintptr_t( lhs && *lhs ? (*lhs)->m_next : 0 ), - int( lhs && *lhs ? (*lhs)->m_task_type : 0 ), - int( lhs && *lhs ? (*lhs)->m_ref_count : 0 ), - uintptr_t(rhs), - uintptr_t( rhs ? rhs->m_next : 0 ), - int( rhs ? rhs->m_task_type : 0 ), - int( rhs ? rhs->m_ref_count : 0 ) - ); - fflush( stdout ); - } -#endif - - if (*lhs) { - const int count = Kokkos::atomic_fetch_add(&((*lhs)->m_ref_count), -1); - - if ((1 == count) && ((*lhs)->m_state == TASK_STATE_COMPLETE)) { - // Reference count is zero and task is complete, deallocate. - (*lhs)->m_queue->deallocate(*lhs, (*lhs)->m_alloc_size); - } else if (count <= 1) { - Kokkos::abort( - "TaskScheduler task has negative reference count or is incomplete"); - } - - // GEM: Should I check that there are no dependences here? Can the state - // be set to complete while there are still dependences? - } - - if (rhs) { - Kokkos::atomic_fetch_add(&(rhs->m_ref_count), 1); - } - - // Force write of *lhs - - *static_cast(lhs) = rhs; - - Kokkos::memory_fence(); - } - - KOKKOS_FUNCTION - size_t allocate_block_size(size_t n); ///< Actual block size allocated - - KOKKOS_FUNCTION - void* allocate(size_t n); ///< Allocate from the memory pool - - KOKKOS_FUNCTION - void deallocate(void* p, size_t n); ///< Deallocate to the memory pool -}; - -} /* namespace Impl */ -} /* namespace Kokkos */ - -//---------------------------------------------------------------------------- -//---------------------------------------------------------------------------- - -namespace Kokkos { -namespace Impl { - -template <> -class TaskBase { - public: - enum : int16_t { - TaskTeam = TaskBase::TaskTeam, - TaskSingle = TaskBase::TaskSingle, - Aggregate = TaskBase::Aggregate - }; - - enum : uintptr_t { - LockTag = TaskBase::LockTag, - EndTag = TaskBase::EndTag - }; - - using execution_space = Kokkos::Qthread; - using queue_type = TaskQueue; - - template - friend class Kokkos::TaskScheduler; - - typedef void (*function_type)(TaskBase*, void*); - - // sizeof(TaskBase) == 48 - - function_type m_apply; ///< Apply function pointer - queue_type* m_queue; ///< Queue in which this task resides - TaskBase* m_dep; ///< Dependence - int32_t m_ref_count; ///< Reference count - int32_t m_alloc_size; ///< Allocation size - int32_t m_dep_count; ///< Aggregate's number of dependences - int16_t m_task_type; ///< Type of task - int16_t m_priority; ///< Priority of runnable task - aligned_t m_qfeb; ///< Qthread full/empty bit - int m_state; ///< State of the task - - TaskBase(TaskBase&&) = delete; - TaskBase(const TaskBase&) = delete; - TaskBase& operator=(TaskBase&&) = delete; - TaskBase& operator=(const TaskBase&) = delete; - - KOKKOS_INLINE_FUNCTION ~TaskBase() = default; - - KOKKOS_INLINE_FUNCTION - constexpr TaskBase() noexcept - : m_apply(0), - m_queue(0), - m_dep(0), - m_ref_count(0), - m_alloc_size(0), - m_dep_count(0), - m_task_type(TaskSingle), - m_priority(1 /* TaskRegularPriority */), - m_qfeb(0), - m_state(queue_type::TASK_STATE_CONSTRUCTING) { - qthread_empty(&m_qfeb); // Set to full when complete - } - - //---------------------------------------- - - static aligned_t qthread_func(void* arg); - - KOKKOS_INLINE_FUNCTION - TaskBase** aggregate_dependences() { - return reinterpret_cast(this + 1); - } - - KOKKOS_INLINE_FUNCTION - void requested_respawn() { return m_state == queue_type::TASK_STATE_RESPAWN; } - - KOKKOS_INLINE_FUNCTION - void add_dependence(TaskBase* dep) { - // Assign dependence to m_dep. It will be processed in the subsequent - // call to schedule. Error if the dependence is reset. - if (0 != Kokkos::atomic_exchange(&m_dep, dep)) { - Kokkos::abort("TaskScheduler ERROR: resetting task dependence"); - } - - if (0 != dep) { - // The future may be destroyed upon returning from this call - // so increment reference count to track this assignment. - Kokkos::atomic_fetch_add(&(dep->m_ref_count), 1); - } - } - - using get_return_type = void; - - KOKKOS_INLINE_FUNCTION - get_return_type get() const {} -}; - -} /* namespace Impl */ -} /* namespace Kokkos */ - -//---------------------------------------------------------------------------- -//---------------------------------------------------------------------------- - -#endif /* #if defined( KOKKOS_ENABLE_TASKPOLICY ) */ -#endif // KOKKOS_QTHREADS_TASKQUEUE_HPP diff --git a/lib/kokkos/core/src/Qthreads/Kokkos_Qthreads_TaskQueue_impl.hpp b/lib/kokkos/core/src/Qthreads/Kokkos_Qthreads_TaskQueue_impl.hpp deleted file mode 100644 index 7a91103ae77a25916282ae8437bb2337f6da3a7b..0000000000000000000000000000000000000000 --- a/lib/kokkos/core/src/Qthreads/Kokkos_Qthreads_TaskQueue_impl.hpp +++ /dev/null @@ -1,398 +0,0 @@ -/* -//@HEADER -// ************************************************************************ -// -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering -// Solutions of Sandia, LLC (NTESS). -// -// Under the terms of Contract DE-NA0003525 with NTESS, -// the U.S. Government retains certain rights in this software. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Christian R. Trott (crtrott@sandia.gov) -// -// ************************************************************************ -//@HEADER -*/ - -#ifndef KOKKOS_QTHREADS_TASKQUEUE_IMPL_HPP -#define KOKKOS_QTHREADS_TASKQUEUE_IMPL_HPP - -#include -#if defined(KOKKOS_ENABLE_QTHREADS) && defined(KOKKOS_ENABLE_TASKPOLICY) - -namespace Kokkos { -namespace Impl { - -//---------------------------------------------------------------------------- - -template -void TaskQueue::Destroy::destroy_shared_allocation() { - m_queue->~TaskQueue(); -} - -//---------------------------------------------------------------------------- - -template -TaskQueue::TaskQueue( - const TaskQueue::memory_space &arg_space, - unsigned const arg_memory_pool_capacity, - unsigned const arg_memory_pool_superblock_capacity_log2) - : m_memory(arg_space, arg_memory_pool_capacity, - arg_memory_pool_superblock_capacity_log2) - m_team_size(unsigned(qthread_num_workers_local(NO_SHEPHERD))), - m_accum_alloc(0), - m_count_alloc(0), - m_max_alloc(0), - m_ready_count(0) {} - -//---------------------------------------------------------------------------- - -template -TaskQueue::~TaskQueue() { - // Verify that ready count is zero. - if (0 != m_ready_count) { - Kokkos::abort("TaskQueue::~TaskQueue ERROR: has ready or executing tasks"); - } -} - -//---------------------------------------------------------------------------- - -template -KOKKOS_FUNCTION size_t TaskQueue::allocate_block_size(size_t n) { - return m_memory.allocate_block_size(n); -} - -//---------------------------------------------------------------------------- - -template -KOKKOS_FUNCTION void *TaskQueue::allocate(size_t n) { - void *const p = m_memory.allocate(n); - - if (p) { - Kokkos::atomic_increment(&m_accum_alloc); - Kokkos::atomic_increment(&m_count_alloc); - - if (m_max_alloc < m_count_alloc) m_max_alloc = m_count_alloc; - } - - return p; -} - -//---------------------------------------------------------------------------- - -template -KOKKOS_FUNCTION void TaskQueue::deallocate(void *p, size_t n) { - m_memory.deallocate(p, n); - Kokkos::atomic_decrement(&m_count_alloc); -} - -//---------------------------------------------------------------------------- - -template -KOKKOS_FUNCTION void TaskQueue::schedule( - TaskQueue::task_root_type *const task) { -#if 0 - printf( "schedule( 0x%lx { %d %d %d }\n", - uintptr_t(task), - task->m_task_type, - task->m_priority, - task->m_ref_count ); -#endif - - // The task has been constructed and is waiting to be executed. - task->m_state = TASK_STATE_WAITING; - - if (task->m_task_type != task_root_type::Aggregate) { - // Scheduling a single or team task. - - // Increment active task count before spawning. - Kokkos::atomic_increment(m_ready_count); - - if (task->m_dep == 0) { - // Schedule a task with no dependences. - - if (task_root_type::TaskTeam == task->m_task_type && m_team_size > 1) { - // If more than one shepherd spawn on a shepherd other than this - // shepherd - const int num_shepherd = qthread_num_shepherds(); - const int this_shepherd = qthread_shep(); - int spawn_shepherd = (this_shepherd + 1) % num_shepherd; - -#if 0 - fprintf( stdout, - "worker(%d.%d) task 0x%.12lx spawning on shepherd(%d) clone(%d)\n", - qthread_shep(), - qthread_worker_local(NULL), - reinterpret_cast(this), - spawn_shepherd, - m_team_size - 1 - ); - fflush(stdout); -#endif - - qthread_spawn_cloneable( - &task_root_type::qthread_func, task, 0, NULL, - 0, // no depenedences - 0, // dependences array - spawn_shepherd, - unsigned(QTHREAD_SPAWN_SIMPLE | QTHREAD_SPAWN_LOCAL_PRIORITY), - m_team_size - 1); - } else { - qthread_spawn( - &task_root_type::qthread_func, task, 0, NULL, - 0, // no depenedences - 0, // dependences array - NO_SHEPHERD, - QTHREAD_SPAWN_SIMPLE /* allows optimization for non-blocking task */ - ); - } - } else if (task->m_dep->m_task_type != task_root_type::Aggregate) - // Malloc the precondition array to pass to qthread_spawn(). For - // non-aggregate tasks, it is a single pointer since there are no - // dependences. Qthreads will eventually free this allocation so memory - // will not be leaked. Is malloc thread-safe? Should this call be - // guarded? The memory can't be allocated from the pool allocator because - // Qthreads frees it using free(). - aligned_t **qprecon = (aligned_t **)malloc(sizeof(aligned_t *)); - - *qprecon = reinterpret_cast(uintptr_t(m_dep_size)); - - if (task->m_task_type == task_root_type::TaskTeam && m_team_size > 1) { - // If more than one shepherd spawn on a shepherd other than this shepherd - const int num_shepherd = qthread_num_shepherds(); - const int this_shepherd = qthread_shep(); - int spawn_shepherd = (this_shepherd + 1) % num_shepherd; - -#if 0 - fprintf( stdout, - "worker(%d.%d) task 0x%.12lx spawning on shepherd(%d) clone(%d)\n", - qthread_shep(), - qthread_worker_local(NULL), - reinterpret_cast(this), - spawn_shepherd, - m_team_size - 1 - ); - fflush(stdout); -#endif - - qthread_spawn_cloneable( - &Task::qthread_func, this, 0, NULL, m_dep_size, - qprecon, /* dependences */ - spawn_shepherd, - unsigned(QTHREAD_SPAWN_SIMPLE | QTHREAD_SPAWN_LOCAL_PRIORITY), - m_team_size - 1); - } else { - qthread_spawn( - &Task::qthread_func, /* function */ - this, /* function argument */ - 0, NULL, m_dep_size, qprecon, /* dependences */ - NO_SHEPHERD, - QTHREAD_SPAWN_SIMPLE /* allows optimization for non-blocking task */ - ); - } - } else { - // GEM: How do I handle an aggregate (when_all) task? - } -} - -//---------------------------------------------------------------------------- - -template -KOKKOS_FUNCTION void TaskQueue::reschedule(task_root_type *task) { - // Precondition: - // task is in Executing state - // task->m_next == LockTag - // - // Postcondition: - // task is in Executing-Respawn state - // task->m_next == 0 (no dependence) - - task_root_type *const zero = (task_root_type *)0; - task_root_type *const lock = (task_root_type *)task_root_type::LockTag; - - if (lock != Kokkos::atomic_exchange(&task->m_next, zero)) { - Kokkos::abort("TaskScheduler::respawn ERROR: already respawned"); - } -} - -//---------------------------------------------------------------------------- - -template -KOKKOS_FUNCTION void TaskQueue::complete( - TaskQueue::task_root_type *task) { - // Complete a runnable task that has finished executing - // or a when_all task when all of its dependeneces are complete. - - task_root_type *const zero = (task_root_type *)0; - task_root_type *const lock = (task_root_type *)task_root_type::LockTag; - task_root_type *const end = (task_root_type *)task_root_type::EndTag; - -#if 0 - printf( "complete( 0x%lx { 0x%lx 0x%lx %d %d %d }\n", - uintptr_t(task), - uintptr_t(task->m_wait), - uintptr_t(task->m_next), - task->m_task_type, - task->m_priority, - task->m_ref_count - ); - fflush( stdout ); -#endif - - const bool runnable = task_root_type::Aggregate != task->m_task_type; - - //---------------------------------------- - - if (runnable && lock != task->m_next) { - // Is a runnable task has finished executing and requested respawn. - // Schedule the task for subsequent execution. - - schedule(task); - } - //---------------------------------------- - else { - // Is either an aggregate or a runnable task that executed - // and did not respawn. Transition this task to complete. - - // If 'task' is an aggregate then any of the runnable tasks that - // it depends upon may be attempting to complete this 'task'. - // Must only transition a task once to complete status. - // This is controled by atomically locking the wait queue. - - // Stop other tasks from adding themselves to this task's wait queue - // by locking the head of this task's wait queue. - - task_root_type *x = Kokkos::atomic_exchange(&task->m_wait, lock); - - if (x != (task_root_type *)lock) { - // This thread has transitioned this 'task' to complete. - // 'task' is no longer in a queue and is not executing - // so decrement the reference count from 'task's creation. - // If no other references to this 'task' then it will be deleted. - - TaskQueue::assign(&task, zero); - - // This thread has exclusive access to the wait list so - // the concurrency-safe pop_task function is not needed. - // Schedule the tasks that have been waiting on the input 'task', - // which may have been deleted. - - while (x != end) { - // Set x->m_next = zero <= no dependence - - task_root_type *const next = - (task_root_type *)Kokkos::atomic_exchange(&x->m_next, zero); - - schedule(x); - - x = next; - } - } - } - - if (runnable) { - // A runnable task was popped from a ready queue and executed. - // If respawned into a ready queue then the ready count was incremented - // so decrement whether respawned or not. - Kokkos::atomic_decrement(&m_ready_count); - } -} - -//---------------------------------------------------------------------------- - -template <> -aligned_t TaskBase::qthread_func(void *arg) { - using execution_space = Kokkos::Qthreads; - using task_root_type = TaskBase; - using Member = Kokkos::Impl::QthreadsTeamPolicyMember; - - task_root_type *const task = reinterpret_cast(arg); - - // First member of the team change state to executing. - // Use compare-exchange to avoid race condition with a respawn. - Kokkos::atomic_compare_exchange_strong(&task->m_state, - queue_type::TASK_STATE_WAITING, - queue_type::TASK_STATE_EXECUTING); - - if (task_root_type::TaskTeam == task->m_task_type) { - if (1 < task->m_queue->m_team_size) { - // Team task with team size of more than 1. - Member::TaskTeam task_team_tag; - - // Initialize team size and rank with shephered info - Member member(task_team_tag); - - (*task->m_apply)(task, &member); - -#if 0 - fprintf( stdout, - "worker(%d.%d) task 0x%.12lx executed by member(%d:%d)\n", - qthread_shep(), - qthread_worker_local(NULL), - reinterpret_cast(task), - member.team_rank(), - member.team_size() - ); - fflush(stdout); -#endif - - member.team_barrier(); - if (member.team_rank() == 0) task->closeout(); - member.team_barrier(); - } else { - // Team task with team size of 1. - Member member; - (*task->m_apply)(task, &member); - task->closeout(); - } - } else { - (*task->m_apply)(task); - task->closeout(); - } - -#if 0 -fprintf( stdout - , "worker(%d.%d) task 0x%.12lx return\n" - , qthread_shep() - , qthread_worker_local(NULL) - , reinterpret_cast(task) - ); -fflush(stdout); -#endif - - return 0; -} - -} /* namespace Impl */ -} /* namespace Kokkos */ - -#endif /* #if defined( KOKKOS_ENABLE_TASKPOLICY ) */ -#endif // KOKKOS_QTHREADS_TASKQUEUE_IMPL_HPP diff --git a/lib/kokkos/core/src/Qthreads/README b/lib/kokkos/core/src/Qthreads/README deleted file mode 100644 index e35b1f698ec7ca3e3ee020eeee4445de43023c78..0000000000000000000000000000000000000000 --- a/lib/kokkos/core/src/Qthreads/README +++ /dev/null @@ -1,24 +0,0 @@ - -# This Qthreads back-end uses an experimental branch of the Qthreads repository with special #define options. - -# Cloning repository and branch: - -git clone git@github.com:Qthreads/qthreads.git qthreads - -cd qthreads - -# checkout branch with "cloned tasks" - -git checkout dev-kokkos - -# Configure/autogen - -sh autogen.sh - -# configure with 'hwloc' installation: - -./configure CFLAGS="-DCLONED_TASKS -DQTHREAD_LOCAL_PRIORITY" --with-hwloc=${HWLOCDIR} --prefix=${INSTALLDIR} - -# install - -make install diff --git a/lib/kokkos/core/src/ROCm/Kokkos_ROCm_Parallel.hpp b/lib/kokkos/core/src/ROCm/Kokkos_ROCm_Parallel.hpp index 4ebcdc6f95892bbbef28853865a66a3678c18b75..8a4d8c07d0b480ff04b45ee548fefd47581439cf 100644 --- a/lib/kokkos/core/src/ROCm/Kokkos_ROCm_Parallel.hpp +++ b/lib/kokkos/core/src/ROCm/Kokkos_ROCm_Parallel.hpp @@ -293,7 +293,6 @@ class TeamPolicyInternal } KOKKOS_INLINE_FUNCTION int team_size() const { return (m_team_size > 0) ? m_team_size : Impl::get_max_tile_thread(); - ; } KOKKOS_INLINE_FUNCTION int league_size() const { return m_league_size; } @@ -837,7 +836,7 @@ class ParallelFor, if (total_size == 0) return; const auto shared_size = FunctorTeamShmemSize::value(f, team_size); - char* scratch = NULL; + char* scratch = nullptr; char* shared = (char*)rocm_device_allocate(shared_size * league_size + scratch_size0 * league_size); if (0 < scratch_size1) @@ -889,7 +888,7 @@ class ParallelReduce, ReducerType, const FunctorType& f, const Policy& policy, const ViewType& result_view, typename std::enable_if::value && !Kokkos::is_reducer_type::value, - void*>::type = NULL) { + void*>::type = nullptr) { typedef typename Policy::work_tag Tag; typedef Kokkos::Impl::FunctorValueTraits ValueTraits; typedef Kokkos::Impl::FunctorValueInit ValueInit; @@ -1106,7 +1105,7 @@ class ParallelReduce, ReducerType, ParallelReduce(const FunctorType& arg_functor, const Policy& arg_policy, const HostViewType& arg_result, typename std::enable_if::value, - void*>::type = NULL) + void*>::type = nullptr) : m_functor(arg_functor), m_policy(arg_policy), m_reducer(InvalidType()), @@ -1149,7 +1148,7 @@ class ParallelReduce, ReducerType, const FunctorType& f, const Policy& policy, const ViewType& result_view, typename std::enable_if::value && !Kokkos::is_reducer_type::value, - void*>::type = NULL) { + void*>::type = nullptr) { const int league_size = policy.league_size(); const int team_size = policy.team_size(f); const int vector_length = policy.vector_length(); @@ -1172,7 +1171,7 @@ class ParallelReduce, ReducerType, FunctorTeamShmemSize::value(f, team_size); char* shared; - char* scratch = NULL; + char* scratch = nullptr; shared = (char*)rocm_device_allocate(league_size * (shared_size + scratch_size0)); @@ -1223,7 +1222,7 @@ class ParallelReduce, ReducerType, const int scratch_size1 = policy.scratch_size(1, team_size); char* shared; - char* scratch = NULL; + char* scratch = nullptr; shared = (char*)rocm_device_allocate((shared_size + scratch_size0) * league_size); if (0 < scratch_size1) diff --git a/lib/kokkos/core/src/ROCm/Kokkos_ROCm_Space.cpp b/lib/kokkos/core/src/ROCm/Kokkos_ROCm_Space.cpp index 501567406ddf0ab67748044d1454ebabb7fc7df7..1a79425f493c3b0644293c08124622395866c0b8 100644 --- a/lib/kokkos/core/src/ROCm/Kokkos_ROCm_Space.cpp +++ b/lib/kokkos/core/src/ROCm/Kokkos_ROCm_Space.cpp @@ -409,7 +409,7 @@ void* SharedAllocationRecord:: allocate_tracked(const Kokkos::Experimental::ROCmSpace& arg_space, const std::string& arg_alloc_label, const size_t arg_alloc_size) { - if (!arg_alloc_size) return (void*)0; + if (!arg_alloc_size) return nullptr; SharedAllocationRecord* const r = allocate(arg_space, arg_alloc_label, arg_alloc_size); @@ -621,7 +621,7 @@ namespace Kokkos { namespace { void* rocm_resize_scratch_space(size_t bytes, bool force_shrink) { - static void* ptr = NULL; + static void* ptr = nullptr; static size_t current_size = 0; if (current_size == 0) { current_size = bytes; diff --git a/lib/kokkos/core/src/ROCm/Kokkos_ROCm_Tile.hpp b/lib/kokkos/core/src/ROCm/Kokkos_ROCm_Tile.hpp index da95064eea8bd3691ccd9c8d1cdc39e080e1fbfc..3d80b4d4409349ae13c29dc2b77de7cd8a5634c3 100644 --- a/lib/kokkos/core/src/ROCm/Kokkos_ROCm_Tile.hpp +++ b/lib/kokkos/core/src/ROCm/Kokkos_ROCm_Tile.hpp @@ -293,8 +293,9 @@ struct tile_buffer { } template - typename Impl::enable_if<(sizeof(Q) <= 8), void>::type action_at( - std::size_t i, Action a) [[hc]] { + typename std::enable_if<(sizeof(Q) <= 8), void>::type action_at(std::size_t i, + Action a) + [[hc]] { element_type* value = (*this)[i]; #if defined(ROCM15) a(value); @@ -316,7 +317,7 @@ struct tile_buffer { } template - typename Impl::enable_if::type action_at( + typename std::enable_if::type action_at( std::size_t i, Action a) [[hc]] { element_type* value = (*this)[i]; #if defined(ROCM15) diff --git a/lib/kokkos/core/src/ROCm/Kokkos_ROCm_Vectorization.hpp b/lib/kokkos/core/src/ROCm/Kokkos_ROCm_Vectorization.hpp index 157c15695b0a0985c8487033f1536d62934b8ae8..ae52f8da34680ebf115719be9efdbb45f8d5f41b 100644 --- a/lib/kokkos/core/src/ROCm/Kokkos_ROCm_Vectorization.hpp +++ b/lib/kokkos/core/src/ROCm/Kokkos_ROCm_Vectorization.hpp @@ -163,7 +163,7 @@ float shfl(const float& val, const int& srcLane, const int& width) { template KOKKOS_INLINE_FUNCTION Scalar shfl(const Scalar& val, const int& srcLane, - const typename Impl::enable_if<(sizeof(Scalar) == 4), int>::type& width) { + const typename std::enable_if<(sizeof(Scalar) == 4), int>::type& width) { Scalar tmp1 = val; float tmp = *reinterpret_cast(&tmp1); tmp = __shfl(tmp, srcLane, width); @@ -182,7 +182,7 @@ double shfl(const double& val, const int& srcLane, const int& width) { template KOKKOS_INLINE_FUNCTION Scalar shfl(const Scalar& val, const int& srcLane, - const typename Impl::enable_if<(sizeof(Scalar) == 8), int>::type& width) { + const typename std::enable_if<(sizeof(Scalar) == 8), int>::type& width) { int lo = __double2loint(*reinterpret_cast(&val)); int hi = __double2hiint(*reinterpret_cast(&val)); lo = __shfl(lo, srcLane, width); @@ -194,7 +194,7 @@ shfl(const Scalar& val, const int& srcLane, template KOKKOS_INLINE_FUNCTION Scalar shfl(const Scalar& val, const int& srcLane, - const typename Impl::enable_if<(sizeof(Scalar) > 8), int>::type& width) { + const typename std::enable_if<(sizeof(Scalar) > 8), int>::type& width) { Impl::shfl_union s_val; Impl::shfl_union r_val; s_val = val; @@ -217,7 +217,7 @@ float shfl_down(const float& val, const int& delta, const int& width) { template KOKKOS_INLINE_FUNCTION Scalar shfl_down( const Scalar& val, const int& delta, - const typename Impl::enable_if<(sizeof(Scalar) == 4), int>::type& width) { + const typename std::enable_if<(sizeof(Scalar) == 4), int>::type& width) { Scalar tmp1 = val; float tmp = *reinterpret_cast(&tmp1); tmp = __shfl_down(tmp, delta, width); @@ -245,7 +245,7 @@ double shfl_down(const double& val, const int& delta, const int& width) { template KOKKOS_INLINE_FUNCTION Scalar shfl_down( const Scalar& val, const int& delta, - const typename Impl::enable_if<(sizeof(Scalar) == 8), int>::type& width) { + const typename std::enable_if<(sizeof(Scalar) == 8), int>::type& width) { int lo = __double2loint(*reinterpret_cast(&val)); int hi = __double2hiint(*reinterpret_cast(&val)); lo = __shfl_down(lo, delta, width); @@ -257,7 +257,7 @@ KOKKOS_INLINE_FUNCTION Scalar shfl_down( template KOKKOS_INLINE_FUNCTION Scalar shfl_down( const Scalar& val, const int& delta, - const typename Impl::enable_if<(sizeof(Scalar) > 8), int>::type& width) { + const typename std::enable_if<(sizeof(Scalar) > 8), int>::type& width) { Impl::shfl_union s_val; Impl::shfl_union r_val; s_val = val; @@ -280,7 +280,7 @@ float shfl_up(const float& val, const int& delta, const int& width) { template KOKKOS_INLINE_FUNCTION Scalar shfl_up( const Scalar& val, const int& delta, - const typename Impl::enable_if<(sizeof(Scalar) == 4), int>::type& width) { + const typename std::enable_if<(sizeof(Scalar) == 4), int>::type& width) { Scalar tmp1 = val; float tmp = *reinterpret_cast(&tmp1); tmp = __shfl_up(tmp, delta, width); @@ -299,7 +299,7 @@ double shfl_up(const double& val, const int& delta, const int& width) { template KOKKOS_INLINE_FUNCTION Scalar shfl_up( const Scalar& val, const int& delta, - const typename Impl::enable_if<(sizeof(Scalar) == 8), int>::type& width) { + const typename std::enable_if<(sizeof(Scalar) == 8), int>::type& width) { int lo = __double2loint(*reinterpret_cast(&val)); int hi = __double2hiint(*reinterpret_cast(&val)); lo = __shfl_up(lo, delta, width); @@ -309,9 +309,9 @@ KOKKOS_INLINE_FUNCTION Scalar shfl_up( } template -KOKKOS_INLINE_FUNCTION Scalar shfl_up( - const Scalar& val, const int& delta, - const typename Impl::enable_if<(sizeof(Scalar) > 8), int>::type& width) { +KOKKOS_INLINE_FUNCTION Scalar +shfl_up(const Scalar& val, const int& delta, + const typename std::enable_if<(sizeof(Scalar) > 8), int>::type& width) { Impl::shfl_union s_val; Impl::shfl_union r_val; s_val = val; diff --git a/lib/kokkos/core/src/Threads/Kokkos_ThreadsExec.cpp b/lib/kokkos/core/src/Threads/Kokkos_ThreadsExec.cpp index d106abf6881fb75c7cc3bfe8de5eec081ec1c240..7adfd127de42bc998bfa6826570adbcfe9e33ebb 100644 --- a/lib/kokkos/core/src/Threads/Kokkos_ThreadsExec.cpp +++ b/lib/kokkos/core/src/Threads/Kokkos_ThreadsExec.cpp @@ -65,7 +65,7 @@ namespace Impl { namespace { ThreadsExec s_threads_process; -ThreadsExec *s_threads_exec[ThreadsExec::MAX_THREAD_COUNT] = {0}; +ThreadsExec *s_threads_exec[ThreadsExec::MAX_THREAD_COUNT] = {nullptr}; pthread_t s_threads_pid[ThreadsExec::MAX_THREAD_COUNT] = {0}; std::pair s_threads_coord[ThreadsExec::MAX_THREAD_COUNT]; @@ -75,11 +75,9 @@ unsigned s_current_reduce_size = 0; unsigned s_current_shared_size = 0; void (*volatile s_current_function)(ThreadsExec &, const void *); -const void *volatile s_current_function_arg = 0; +const void *volatile s_current_function_arg = nullptr; struct Sentinel { - Sentinel() {} - ~Sentinel() { if (s_thread_pool_size[0] || s_thread_pool_size[1] || s_thread_pool_size[2] || s_current_reduce_size || @@ -129,8 +127,8 @@ void ThreadsExec::driver(void) { } ThreadsExec::ThreadsExec() - : m_pool_base(0), - m_scratch(0), + : m_pool_base(nullptr), + m_scratch(nullptr), m_scratch_reduce_end(0), m_scratch_thread_end(0), m_numa_rank(0), @@ -142,7 +140,7 @@ ThreadsExec::ThreadsExec() if (&s_threads_process != this) { // A spawned thread - ThreadsExec *const nil = 0; + ThreadsExec *const nil = nullptr; // Which entry in 's_threads_exec', possibly determined from hwloc binding const int entry = @@ -192,12 +190,12 @@ ThreadsExec::~ThreadsExec() { if (m_scratch) { Record *const r = Record::get_record(m_scratch); - m_scratch = 0; + m_scratch = nullptr; Record::decrement(r); } - m_pool_base = 0; + m_pool_base = nullptr; m_scratch_reduce_end = 0; m_scratch_thread_end = 0; m_numa_rank = 0; @@ -209,7 +207,7 @@ ThreadsExec::~ThreadsExec() { m_pool_state = ThreadsExec::Terminating; if (&s_threads_process != this && entry < MAX_THREAD_COUNT) { - ThreadsExec *const nil = 0; + ThreadsExec *const nil = nullptr; atomic_compare_exchange(s_threads_exec + entry, this, nil); @@ -223,13 +221,13 @@ ThreadsExec *ThreadsExec::get_thread(const int init_thread_rank) { ThreadsExec *const th = init_thread_rank < s_thread_pool_size[0] ? s_threads_exec[s_thread_pool_size[0] - (init_thread_rank + 1)] - : 0; + : nullptr; - if (0 == th || th->m_pool_rank != init_thread_rank) { + if (nullptr == th || th->m_pool_rank != init_thread_rank) { std::ostringstream msg; msg << "Kokkos::Impl::ThreadsExec::get_thread ERROR : " << "thread " << init_thread_rank << " of " << s_thread_pool_size[0]; - if (0 == th) { + if (nullptr == th) { msg << " does not exist"; } else { msg << " has wrong thread_rank " << th->m_pool_rank; @@ -299,8 +297,8 @@ void ThreadsExec::fence() { ThreadsExec::Active); } - s_current_function = 0; - s_current_function_arg = 0; + s_current_function = nullptr; + s_current_function_arg = nullptr; // Make sure function and arguments are cleared before // potentially re-activating threads with a subsequent launch. @@ -364,7 +362,7 @@ bool ThreadsExec::wake() { ThreadsExec::global_unlock(); if (s_threads_process.m_pool_base) { - execute_sleep(s_threads_process, 0); + execute_sleep(s_threads_process, nullptr); s_threads_process.m_pool_state = ThreadsExec::Inactive; } @@ -394,12 +392,12 @@ void ThreadsExec::execute_serial(void (*func)(ThreadsExec &, const void *)) { if (s_threads_process.m_pool_base) { s_threads_process.m_pool_state = ThreadsExec::Active; - (*func)(s_threads_process, 0); + (*func)(s_threads_process, nullptr); s_threads_process.m_pool_state = ThreadsExec::Inactive; } - s_current_function_arg = 0; - s_current_function = 0; + s_current_function_arg = nullptr; + s_current_function = nullptr; // Make sure function and arguments are cleared before proceeding. memory_fence(); @@ -417,7 +415,7 @@ void ThreadsExec::execute_resize_scratch(ThreadsExec &exec, const void *) { if (exec.m_scratch) { Record *const r = Record::get_record(exec.m_scratch); - exec.m_scratch = 0; + exec.m_scratch = nullptr; Record::decrement(r); } @@ -508,7 +506,7 @@ void ThreadsExec::print_configuration(std::ostream &s, const bool detail) { s << " threads[" << s_thread_pool_size[0] << "]" << " threads_per_numa[" << s_thread_pool_size[1] << "]" << " threads_per_core[" << s_thread_pool_size[2] << "]"; - if (0 == s_threads_process.m_pool_base) { + if (nullptr == s_threads_process.m_pool_base) { s << " Asynchronous"; } s << " ReduceScratch[" << s_current_reduce_size << "]" @@ -547,19 +545,20 @@ void ThreadsExec::print_configuration(std::ostream &s, const bool detail) { //---------------------------------------------------------------------------- -int ThreadsExec::is_initialized() { return 0 != s_threads_exec[0]; } +int ThreadsExec::is_initialized() { return nullptr != s_threads_exec[0]; } void ThreadsExec::initialize(unsigned thread_count, unsigned use_numa_count, unsigned use_cores_per_numa, bool allow_asynchronous_threadpool) { - static const Sentinel sentinel; + // need to provide an initializer for Intel compilers + static const Sentinel sentinel = {}; const bool is_initialized = 0 != s_thread_pool_size[0]; unsigned thread_spawn_failed = 0; for (int i = 0; i < ThreadsExec::MAX_THREAD_COUNT; i++) - s_threads_exec[i] = NULL; + s_threads_exec[i] = nullptr; if (!is_initialized) { // If thread_count, use_numa_count, or use_cores_per_numa are zero @@ -631,8 +630,8 @@ void ThreadsExec::initialize(unsigned thread_count, unsigned use_numa_count, } } - s_current_function = 0; - s_current_function_arg = 0; + s_current_function = nullptr; + s_current_function_arg = nullptr; s_threads_process.m_pool_state = ThreadsExec::Inactive; memory_fence(); @@ -659,7 +658,7 @@ void ThreadsExec::initialize(unsigned thread_count, unsigned use_numa_count, s_threads_process.m_pool_rank, s_threads_process.m_pool_size); s_threads_pid[s_threads_process.m_pool_rank] = pthread_self(); } else { - s_threads_process.m_pool_base = 0; + s_threads_process.m_pool_base = nullptr; s_threads_process.m_pool_rank = 0; s_threads_process.m_pool_size = 0; s_threads_process.m_pool_fan_size = 0; @@ -740,7 +739,7 @@ void ThreadsExec::finalize() { if (s_threads_process.m_pool_base) { (&s_threads_process)->~ThreadsExec(); - s_threads_exec[0] = 0; + s_threads_exec[0] = nullptr; } if (Kokkos::hwloc::can_bind_threads()) { @@ -754,7 +753,7 @@ void ThreadsExec::finalize() { // Reset master thread to run solo. s_threads_process.m_numa_rank = 0; s_threads_process.m_numa_core_rank = 0; - s_threads_process.m_pool_base = 0; + s_threads_process.m_pool_base = nullptr; s_threads_process.m_pool_rank = 0; s_threads_process.m_pool_size = 1; s_threads_process.m_pool_fan_size = 0; diff --git a/lib/kokkos/core/src/Threads/Kokkos_ThreadsExec_base.cpp b/lib/kokkos/core/src/Threads/Kokkos_ThreadsExec_base.cpp index ed7b884a870ad2fb78858e6a41b45d202ac62133..40a09ed22ab1d6d73b62084549049521e0eb3150 100644 --- a/lib/kokkos/core/src/Threads/Kokkos_ThreadsExec_base.cpp +++ b/lib/kokkos/core/src/Threads/Kokkos_ThreadsExec_base.cpp @@ -87,7 +87,7 @@ void* internal_pthread_driver(void*) { std::cerr.flush(); std::abort(); } - return NULL; + return nullptr; } } // namespace @@ -105,7 +105,7 @@ bool ThreadsExec::spawn() { 0 == pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED)) { pthread_t pt; - result = 0 == pthread_create(&pt, &attr, internal_pthread_driver, 0); + result = 0 == pthread_create(&pt, &attr, internal_pthread_driver, nullptr); } pthread_attr_destroy(&attr); diff --git a/lib/kokkos/core/src/Threads/Kokkos_ThreadsTeam.hpp b/lib/kokkos/core/src/Threads/Kokkos_ThreadsTeam.hpp index 2cd9d73b2a43137f6f6e9b158e8c6619f83eb308..fe1a1e8b08efafd090a6ebdc0f1d7c01753c5e1f 100644 --- a/lib/kokkos/core/src/Threads/Kokkos_ThreadsTeam.hpp +++ b/lib/kokkos/core/src/Threads/Kokkos_ThreadsTeam.hpp @@ -169,7 +169,10 @@ class ThreadsExecTeamMember { KOKKOS_INLINE_FUNCTION void team_broadcast(ValueType& value, const int& thread_id) const { #if !defined(KOKKOS_ACTIVE_EXECUTION_MEMORY_SPACE_HOST) - {} + { + (void)value; + (void)thread_id; + } #else // Make sure there is enough scratch space: typedef typename if_cscratch_memory()); + memory_fence(); + team_barrier(); if (team_rank() == thread_id) *local_value = value; memory_fence(); team_barrier(); @@ -189,7 +194,11 @@ class ThreadsExecTeamMember { KOKKOS_INLINE_FUNCTION void team_broadcast(Closure const& f, ValueType& value, const int& thread_id) const { #if !defined(KOKKOS_ACTIVE_EXECUTION_MEMORY_SPACE_HOST) - {} + { + (void)f; + (void)value; + (void)thread_id; + } #else // Make sure there is enough scratch space: typedef typename if_cscratch_memory()); + memory_fence(); + team_barrier(); if (team_rank() == thread_id) *local_value = value; memory_fence(); team_barrier(); @@ -211,7 +222,7 @@ class ThreadsExecTeamMember { team_reduce(const Type& value) const #if !defined(KOKKOS_ACTIVE_EXECUTION_MEMORY_SPACE_HOST) { - return Type(); + return value; } #else { @@ -221,13 +232,15 @@ class ThreadsExecTeamMember { if (0 == m_exec) return value; - *((volatile type*)m_exec->scratch_memory()) = value; + if (team_rank() != team_size() - 1) + *((volatile type*)m_exec->scratch_memory()) = value; memory_fence(); type& accum = *((type*)m_team_base[0]->scratch_memory()); if (team_fan_in()) { + accum = value; for (int i = 1; i < m_team_size; ++i) { accum += *((type*)m_team_base[i]->scratch_memory()); } @@ -267,7 +280,7 @@ class ThreadsExecTeamMember { type* const local_value = ((type*)m_exec->scratch_memory()); // Set this thread's contribution - *local_value = contribution; + if (team_rank() != team_size() - 1) *local_value = contribution; // Fence to make sure the base team member has access: memory_fence(); @@ -277,6 +290,7 @@ class ThreadsExecTeamMember { // team_fan_out() type* const team_value = ((type*)m_team_base[0]->scratch_memory()); + *team_value = contribution; // Join to the team value: for (int i = 1; i < m_team_size; ++i) { reducer.join(*team_value, *((type*)m_team_base[i]->scratch_memory())); @@ -313,7 +327,8 @@ class ThreadsExecTeamMember { ArgType* const global_accum) const #if !defined(KOKKOS_ACTIVE_EXECUTION_MEMORY_SPACE_HOST) { - return ArgType(); + (void)global_accum; + return value; } #else { @@ -607,6 +622,11 @@ class TeamPolicyInternal typedef PolicyTraits traits; + const typename traits::execution_space& space() const { + static typename traits::execution_space m_space; + return m_space; + } + TeamPolicyInternal& operator=(const TeamPolicyInternal& p) { m_league_size = p.m_league_size; m_team_size = p.m_team_size; @@ -1167,7 +1187,8 @@ namespace Kokkos { template KOKKOS_INLINE_FUNCTION void single( - const Impl::VectorSingleStruct& single_struct, + const Impl::VectorSingleStruct< + Impl::ThreadsExecTeamMember>& /*single_struct*/, const FunctorType& lambda) { lambda(); } @@ -1181,7 +1202,8 @@ KOKKOS_INLINE_FUNCTION void single( template KOKKOS_INLINE_FUNCTION void single( - const Impl::VectorSingleStruct& single_struct, + const Impl::VectorSingleStruct< + Impl::ThreadsExecTeamMember>& /*single_struct*/, const FunctorType& lambda, ValueType& val) { lambda(val); } diff --git a/lib/kokkos/core/src/Threads/Kokkos_Threads_Parallel.hpp b/lib/kokkos/core/src/Threads/Kokkos_Threads_Parallel.hpp index f45830cb24c8e8d65157a35273089a869d8312c5..fbc83e9a5550e0dad15ba42a0b32d757328ea0a8 100644 --- a/lib/kokkos/core/src/Threads/Kokkos_Threads_Parallel.hpp +++ b/lib/kokkos/core/src/Threads/Kokkos_Threads_Parallel.hpp @@ -492,7 +492,7 @@ class ParallelReduce, ReducerType, const HostViewType &arg_result_view, typename std::enable_if::value && !Kokkos::is_reducer_type::value, - void *>::type = NULL) + void *>::type = nullptr) : m_functor(arg_functor), m_policy(arg_policy), m_reducer(InvalidType()), @@ -650,7 +650,7 @@ class ParallelReduce, ReducerType, const HostViewType &arg_result_view, typename std::enable_if::value && !Kokkos::is_reducer_type::value, - void *>::type = NULL) + void *>::type = nullptr) : m_functor(arg_functor), m_mdr_policy(arg_policy), m_policy(Policy(0, m_mdr_policy.m_num_tiles).set_chunk_size(1)), @@ -774,7 +774,7 @@ class ParallelReduce, const ViewType &arg_result, typename std::enable_if::value && !Kokkos::is_reducer_type::value, - void *>::type = NULL) + void *>::type = nullptr) : m_functor(arg_functor), m_policy(arg_policy), m_reducer(InvalidType()), diff --git a/lib/kokkos/core/src/Threads/Kokkos_Threads_WorkGraphPolicy.hpp b/lib/kokkos/core/src/Threads/Kokkos_Threads_WorkGraphPolicy.hpp index ec2b1d983fa6e86510a1590df612c3bb002313cf..7bcd9aaee06cfa3f7a2278d694c5058ff757ae78 100644 --- a/lib/kokkos/core/src/Threads/Kokkos_Threads_WorkGraphPolicy.hpp +++ b/lib/kokkos/core/src/Threads/Kokkos_Threads_WorkGraphPolicy.hpp @@ -87,9 +87,10 @@ class ParallelFor, } } - static inline void thread_main(ThreadsExec&, const void* arg) noexcept { + static inline void thread_main(ThreadsExec& exec, const void* arg) noexcept { const Self& self = *(static_cast(arg)); self.exec_one_thread(); + exec.fan_in(); } public: diff --git a/lib/kokkos/core/src/impl/CMakeLists.txt b/lib/kokkos/core/src/impl/CMakeLists.txt index 2f6d8e78a3c0e7e283fd7473a0872ea46b5126bf..361a85b7381a2f337e7916e2905a3cc62bedcfb9 100644 --- a/lib/kokkos/core/src/impl/CMakeLists.txt +++ b/lib/kokkos/core/src/impl/CMakeLists.txt @@ -9,7 +9,7 @@ TRIBITS_ADD_LIBRARY( kokkoscore_impl NOINSTALLHEADERS ${HEADERS} SOURCES ${SOURCES} - DEPLIBS + DEPLIBS ) SET(TRILINOS_INCDIR ${CMAKE_INSTALL_PREFIX}/${${PROJECT_NAME}_INSTALL_INCLUDE_DIR}) diff --git a/lib/kokkos/core/src/impl/Kokkos_AnalyzePolicy.hpp b/lib/kokkos/core/src/impl/Kokkos_AnalyzePolicy.hpp index ac8665143347554acb3fa5a4184f3573c55030c4..739e2d4f462d9624d59026a8a3ac5189347c02e7 100644 --- a/lib/kokkos/core/src/impl/Kokkos_AnalyzePolicy.hpp +++ b/lib/kokkos/core/src/impl/Kokkos_AnalyzePolicy.hpp @@ -177,11 +177,14 @@ struct AnalyzePolicy is_launch_bounds::value, SetLaunchBounds, typename std::conditional< - Experimental::is_work_item_property< - T>::value, + Kokkos::Experimental:: + is_work_item_property::value, SetWorkItemProperty, - SetWorkTag >::type>::type>:: - type>::type>::type>::type>::type::type, + typename std::conditional< + !std::is_void::value, + SetWorkTag, Base>::type>:: + type>::type>::type>::type>::type>::type>:: + type::type, Traits...> {}; template @@ -201,9 +204,9 @@ struct AnalyzePolicy { using index_type = typename std::conditional::value, IndexType, - typename Base::index_type>::type :: - type // nasty hack to make index_type into an integral_type - ; // instead of the wrapped IndexType for backwards compatibility + typename Base::index_type>::type::type; + // nasty hack to make index_type into an integral_type + // instead of the wrapped IndexType for backwards compatibility using iteration_pattern = typename std::conditional< is_void::value, diff --git a/lib/kokkos/core/src/impl/Kokkos_Atomic_Assembly.hpp b/lib/kokkos/core/src/impl/Kokkos_Atomic_Assembly.hpp index 786ffc902f641bef5961d2d871908db8d6a9dcc7..a31dd1cf49365bd1b05d0f188637e398417a0dd7 100644 --- a/lib/kokkos/core/src/impl/Kokkos_Atomic_Assembly.hpp +++ b/lib/kokkos/core/src/impl/Kokkos_Atomic_Assembly.hpp @@ -48,6 +48,8 @@ namespace Kokkos { namespace Impl { + +#if !defined(_WIN32) struct cas128_t { uint64_t lower; uint64_t upper; @@ -85,6 +87,7 @@ struct cas128_t { upper = a.upper; } } __attribute__((__aligned__(16))); +#endif #if defined(KOKKOS_ENABLE_ASM) && defined(KOKKOS_ENABLE_ISA_X86_64) inline cas128_t cas128(volatile cas128_t* ptr, cas128_t cmp, cas128_t swap) { diff --git a/lib/kokkos/core/src/impl/Kokkos_Atomic_Compare_Exchange_Strong.hpp b/lib/kokkos/core/src/impl/Kokkos_Atomic_Compare_Exchange_Strong.hpp index 4fe72ad1426b358c8dd42973f0e928728c6f6843..c25b80a825b22bb635afc63d252164c9cd9621c8 100644 --- a/lib/kokkos/core/src/impl/Kokkos_Atomic_Compare_Exchange_Strong.hpp +++ b/lib/kokkos/core/src/impl/Kokkos_Atomic_Compare_Exchange_Strong.hpp @@ -92,8 +92,7 @@ __inline__ __device__ unsigned long long int atomic_compare_exchange( template __inline__ __device__ T atomic_compare_exchange( volatile T* const dest, const T& compare, - typename Kokkos::Impl::enable_if::type - val) { + typename std::enable_if::type val) { const int tmp = atomicCAS((int*)dest, *((int*)&compare), *((int*)&val)); return *((T*)&tmp); } @@ -101,9 +100,9 @@ __inline__ __device__ T atomic_compare_exchange( template __inline__ __device__ T atomic_compare_exchange( volatile T* const dest, const T& compare, - typename Kokkos::Impl::enable_if< - sizeof(T) != sizeof(int) && sizeof(T) == sizeof(unsigned long long int), - const T&>::type val) { + typename std::enable_if::type val) { typedef unsigned long long int type; const type tmp = atomicCAS((type*)dest, *((type*)&compare), *((type*)&val)); return *((T*)&tmp); @@ -112,8 +111,8 @@ __inline__ __device__ T atomic_compare_exchange( template __inline__ __device__ T atomic_compare_exchange( volatile T* const dest, const T& compare, - typename Kokkos::Impl::enable_if<(sizeof(T) != 4) && (sizeof(T) != 8), - const T>::type& val) { + typename std::enable_if<(sizeof(T) != 4) && (sizeof(T) != 8), + const T>::type& val) { T return_val; // This is a way to (hopefully) avoid dead lock in a warp int done = 0; @@ -147,7 +146,7 @@ __inline__ __device__ T atomic_compare_exchange( //---------------------------------------------------------------------------- // GCC native CAS supports int, long, unsigned int, unsigned long. // Intel native CAS support int and long with the same interface as GCC. -#if !defined(KOKKOS_ENABLE_ROCM_ATOMICS) +#if !defined(KOKKOS_ENABLE_ROCM_ATOMICS) || !defined(KOKKOS_ENABLE_HIP_ATOMICS) #if !defined(__CUDA_ARCH__) || defined(KOKKOS_IMPL_CUDA_CLANG_WORKAROUND) #if defined(KOKKOS_ENABLE_GNU_ATOMICS) || defined(KOKKOS_ENABLE_INTEL_ATOMICS) @@ -188,12 +187,11 @@ inline unsigned long atomic_compare_exchange(volatile unsigned long* const dest, template inline T atomic_compare_exchange( volatile T* const dest, const T& compare, - typename Kokkos::Impl::enable_if::type - val) { + typename std::enable_if::type val) { union U { int i; T t; - KOKKOS_INLINE_FUNCTION U(){}; + KOKKOS_INLINE_FUNCTION U() {} } tmp; #if defined(KOKKOS_ENABLE_RFO_PREFETCH) @@ -208,13 +206,13 @@ inline T atomic_compare_exchange( template inline T atomic_compare_exchange( volatile T* const dest, const T& compare, - typename Kokkos::Impl::enable_if::type val) { + typename std::enable_if::type val) { union U { long i; T t; - KOKKOS_INLINE_FUNCTION U(){}; + KOKKOS_INLINE_FUNCTION U() {} } tmp; #if defined(KOKKOS_ENABLE_RFO_PREFETCH) @@ -230,14 +228,14 @@ inline T atomic_compare_exchange( template inline T atomic_compare_exchange( volatile T* const dest, const T& compare, - typename Kokkos::Impl::enable_if::type val) { + typename std::enable_if::type val) { union U { Impl::cas128_t i; T t; - KOKKOS_INLINE_FUNCTION U(){}; + KOKKOS_INLINE_FUNCTION U() {} } tmp; #if defined(KOKKOS_ENABLE_RFO_PREFETCH) @@ -253,12 +251,12 @@ inline T atomic_compare_exchange( template inline T atomic_compare_exchange( volatile T* const dest, const T compare, - typename Kokkos::Impl::enable_if<(sizeof(T) != 4) && (sizeof(T) != 8) + typename std::enable_if<(sizeof(T) != 4) && (sizeof(T) != 8) #if defined(KOKKOS_ENABLE_ASM) && defined(KOKKOS_ENABLE_ISA_X86_64) - && (sizeof(T) != 16) + && (sizeof(T) != 16) #endif - , - const T>::type& val) { + , + const T>::type& val) { #if defined(KOKKOS_ENABLE_RFO_PREFETCH) _mm_prefetch((const char*)dest, _MM_HINT_ET0); #endif diff --git a/lib/kokkos/core/src/impl/Kokkos_Atomic_Compare_Exchange_Weak.hpp b/lib/kokkos/core/src/impl/Kokkos_Atomic_Compare_Exchange_Weak.hpp index c2aad61975fd5aa64428937f8981ada117315ac1..e3fd1c53db3e9fdbc91a044104726c3de9dfc0b7 100644 --- a/lib/kokkos/core/src/impl/Kokkos_Atomic_Compare_Exchange_Weak.hpp +++ b/lib/kokkos/core/src/impl/Kokkos_Atomic_Compare_Exchange_Weak.hpp @@ -226,7 +226,7 @@ bool atomic_compare_exchange_weak( // GCC native CAS supports int, long, unsigned int, unsigned long. // Intel native CAS support int and long with the same interface as GCC. -#if !defined(KOKKOS_ENABLE_ROCM_ATOMICS) +#if !defined(KOKKOS_ENABLE_ROCM_ATOMICS) || !defined(KOKKOS_ENABLE_HIP_ATOMICS) #if !defined(__CUDA_ARCH__) || defined(KOKKOS_IMPL_CUDA_CLANG_WORKAROUND) #if defined(KOKKOS_ENABLE_GNU_ATOMICS) || defined(KOKKOS_ENABLE_INTEL_ATOMICS) @@ -267,12 +267,11 @@ inline unsigned long atomic_compare_exchange(volatile unsigned long* const dest, template inline T atomic_compare_exchange( volatile T* const dest, const T& compare, - typename Kokkos::Impl::enable_if::type - val) { + typename std::enable_if::type val) { union U { int i; T t; - KOKKOS_INLINE_FUNCTION U(){}; + KOKKOS_INLINE_FUNCTION U() {} } tmp; #if defined(KOKKOS_ENABLE_RFO_PREFETCH) @@ -287,13 +286,13 @@ inline T atomic_compare_exchange( template inline T atomic_compare_exchange( volatile T* const dest, const T& compare, - typename Kokkos::Impl::enable_if::type val) { + typename std::enable_if::type val) { union U { long i; T t; - KOKKOS_INLINE_FUNCTION U(){}; + KOKKOS_INLINE_FUNCTION U() {} } tmp; #if defined(KOKKOS_ENABLE_RFO_PREFETCH) @@ -309,14 +308,14 @@ inline T atomic_compare_exchange( template inline T atomic_compare_exchange( volatile T* const dest, const T& compare, - typename Kokkos::Impl::enable_if::type val) { + typename std::enable_if::type val) { union U { Impl::cas128_t i; T t; - KOKKOS_INLINE_FUNCTION U(){}; + KOKKOS_INLINE_FUNCTION U() {} } tmp; #if defined(KOKKOS_ENABLE_RFO_PREFETCH) @@ -332,12 +331,12 @@ inline T atomic_compare_exchange( template inline T atomic_compare_exchange( volatile T* const dest, const T compare, - typename Kokkos::Impl::enable_if<(sizeof(T) != 4) && (sizeof(T) != 8) + typename std::enable_if<(sizeof(T) != 4) && (sizeof(T) != 8) #if defined(KOKKOS_ENABLE_ASM) && defined(KOKKOS_ENABLE_ISA_X86_64) - && (sizeof(T) != 16) + && (sizeof(T) != 16) #endif - , - const T>::type& val) { + , + const T>::type& val) { #if defined(KOKKOS_ENABLE_RFO_PREFETCH) _mm_prefetch((const char*)dest, _MM_HINT_ET0); #endif diff --git a/lib/kokkos/core/src/impl/Kokkos_Atomic_Decrement.hpp b/lib/kokkos/core/src/impl/Kokkos_Atomic_Decrement.hpp index 992ae3c0052b72e89ef661d62e6b66ebe6be27f9..47961b5c717fcd88c2b6a66266a42a6df256a00b 100644 --- a/lib/kokkos/core/src/impl/Kokkos_Atomic_Decrement.hpp +++ b/lib/kokkos/core/src/impl/Kokkos_Atomic_Decrement.hpp @@ -54,7 +54,7 @@ namespace Kokkos { -// Atomic increment +// Atomic decrement template <> KOKKOS_INLINE_FUNCTION void atomic_decrement(volatile char* a) { #if defined(KOKKOS_ENABLE_ASM) && defined(KOKKOS_ENABLE_ISA_X86_64) && \ diff --git a/lib/kokkos/core/src/impl/Kokkos_Atomic_Exchange.hpp b/lib/kokkos/core/src/impl/Kokkos_Atomic_Exchange.hpp index 37aebf9a3d38bab019e92136fa392e76b51ba2dd..4a9a786df4dccdb11a4a8db026fbd651ffcbd177 100644 --- a/lib/kokkos/core/src/impl/Kokkos_Atomic_Exchange.hpp +++ b/lib/kokkos/core/src/impl/Kokkos_Atomic_Exchange.hpp @@ -84,8 +84,7 @@ __inline__ __device__ unsigned long long int atomic_exchange( template __inline__ __device__ T atomic_exchange( volatile T* const dest, - typename Kokkos::Impl::enable_if::type - val) { + typename std::enable_if::type val) { // int tmp = __ullAtomicExch( (int*) dest , *((int*)&val) ); #if defined(KOKKOS_ENABLE_RFO_PREFETCH) _mm_prefetch((const char*)dest, _MM_HINT_ET0); @@ -98,9 +97,9 @@ __inline__ __device__ T atomic_exchange( template __inline__ __device__ T atomic_exchange( volatile T* const dest, - typename Kokkos::Impl::enable_if< - sizeof(T) != sizeof(int) && sizeof(T) == sizeof(unsigned long long int), - const T&>::type val) { + typename std::enable_if::type val) { typedef unsigned long long int type; #if defined(KOKKOS_ENABLE_RFO_PREFETCH) @@ -113,10 +112,10 @@ __inline__ __device__ T atomic_exchange( } template -__inline__ __device__ T atomic_exchange( - volatile T* const dest, - typename Kokkos::Impl::enable_if<(sizeof(T) != 4) && (sizeof(T) != 8), - const T>::type& val) { +__inline__ __device__ T +atomic_exchange(volatile T* const dest, + typename std::enable_if<(sizeof(T) != 4) && (sizeof(T) != 8), + const T>::type& val) { T return_val; // This is a way to (hopefully) avoid dead lock in a warp #if defined(KOKKOS_ENABLE_RFO_PREFETCH) @@ -152,8 +151,7 @@ __inline__ __device__ T atomic_exchange( template __inline__ __device__ void atomic_assign( volatile T* const dest, - typename Kokkos::Impl::enable_if::type - val) { + typename std::enable_if::type val) { // (void) __ullAtomicExch( (int*) dest , *((int*)&val) ); (void)atomicExch(((int*)dest), *((int*)&val)); } @@ -161,9 +159,9 @@ __inline__ __device__ void atomic_assign( template __inline__ __device__ void atomic_assign( volatile T* const dest, - typename Kokkos::Impl::enable_if< - sizeof(T) != sizeof(int) && sizeof(T) == sizeof(unsigned long long int), - const T&>::type val) { + typename std::enable_if::type val) { typedef unsigned long long int type; // (void) __ullAtomicExch( (type*) dest , *((type*)&val) ); (void)atomicExch(((type*)dest), *((type*)&val)); @@ -172,9 +170,9 @@ __inline__ __device__ void atomic_assign( template __inline__ __device__ void atomic_assign( volatile T* const dest, - typename Kokkos::Impl::enable_if< - sizeof(T) != sizeof(int) && sizeof(T) != sizeof(unsigned long long int), - const T&>::type val) { + typename std::enable_if::type val) { (void)atomic_exchange(dest, val); } @@ -187,11 +185,10 @@ __inline__ __device__ void atomic_assign( #if defined(KOKKOS_ENABLE_GNU_ATOMICS) || defined(KOKKOS_ENABLE_INTEL_ATOMICS) template -inline T atomic_exchange( - volatile T* const dest, - typename Kokkos::Impl::enable_if::type val) { +inline T atomic_exchange(volatile T* const dest, + typename std::enable_if::type val) { typedef typename Kokkos::Impl::if_c::type type; #if defined(KOKKOS_ENABLE_RFO_PREFETCH) @@ -205,7 +202,7 @@ inline T atomic_exchange( union U { T val_T; type val_type; - inline U(){}; + inline U() {} } old; old.val_T = *dest; @@ -223,8 +220,8 @@ inline T atomic_exchange( template inline T atomic_exchange( volatile T* const dest, - typename Kokkos::Impl::enable_if::type val) { + typename std::enable_if::type + val) { #if defined(KOKKOS_ENABLE_RFO_PREFETCH) _mm_prefetch((const char*)dest, _MM_HINT_ET0); #endif @@ -232,7 +229,7 @@ inline T atomic_exchange( union U { Impl::cas128_t i; T t; - inline U(){}; + inline U() {} } assume, oldval, newval; oldval.t = *dest; @@ -252,12 +249,12 @@ inline T atomic_exchange( template inline T atomic_exchange( volatile T* const dest, - typename Kokkos::Impl::enable_if<(sizeof(T) != 4) && (sizeof(T) != 8) + typename std::enable_if<(sizeof(T) != 4) && (sizeof(T) != 8) #if defined(KOKKOS_ENABLE_ASM) && defined(KOKKOS_ENABLE_ISA_X86_64) - && (sizeof(T) != 16) + && (sizeof(T) != 16) #endif - , - const T>::type& val) { + , + const T>::type& val) { while (!Impl::lock_address_host_space((void*)dest)) ; T return_val = *dest; @@ -280,11 +277,10 @@ inline T atomic_exchange( } template -inline void atomic_assign( - volatile T* const dest, - typename Kokkos::Impl::enable_if::type val) { +inline void atomic_assign(volatile T* const dest, + typename std::enable_if::type val) { typedef typename Kokkos::Impl::if_c::type type; @@ -299,7 +295,7 @@ inline void atomic_assign( union U { T val_T; type val_type; - inline U(){}; + inline U() {} } old; old.val_T = *dest; @@ -315,8 +311,8 @@ inline void atomic_assign( template inline void atomic_assign( volatile T* const dest, - typename Kokkos::Impl::enable_if::type val) { + typename std::enable_if::type + val) { #if defined(KOKKOS_ENABLE_RFO_PREFETCH) _mm_prefetch((const char*)dest, _MM_HINT_ET0); #endif @@ -324,7 +320,7 @@ inline void atomic_assign( union U { Impl::cas128_t i; T t; - inline U(){}; + inline U() {} } assume, oldval, newval; oldval.t = *dest; @@ -339,12 +335,12 @@ inline void atomic_assign( template inline void atomic_assign( volatile T* const dest, - typename Kokkos::Impl::enable_if<(sizeof(T) != 4) && (sizeof(T) != 8) + typename std::enable_if<(sizeof(T) != 4) && (sizeof(T) != 8) #if defined(KOKKOS_ENABLE_ASM) && defined(KOKKOS_ENABLE_ISA_X86_64) - && (sizeof(T) != 16) + && (sizeof(T) != 16) #endif - , - const T>::type& val) { + , + const T>::type& val) { while (!Impl::lock_address_host_space((void*)dest)) ; // This is likely an aggregate type with a defined diff --git a/lib/kokkos/core/src/impl/Kokkos_Atomic_Fetch_Add.hpp b/lib/kokkos/core/src/impl/Kokkos_Atomic_Fetch_Add.hpp index 58277740da1e2de7803f9dbbc711a9089bae0d60..0a6900f84092defac80166544d44b85642a54837 100644 --- a/lib/kokkos/core/src/impl/Kokkos_Atomic_Fetch_Add.hpp +++ b/lib/kokkos/core/src/impl/Kokkos_Atomic_Fetch_Add.hpp @@ -94,14 +94,13 @@ __inline__ __device__ double atomic_fetch_add(volatile double* const dest, template __inline__ __device__ T atomic_fetch_add( volatile T* const dest, - typename Kokkos::Impl::enable_if::type - val) { + typename std::enable_if::type val) { // to work around a bug in the clang cuda compiler, the name here needs to be // different from the one internal to the other overloads union U1 { int i; T t; - KOKKOS_INLINE_FUNCTION U1(){}; + KOKKOS_INLINE_FUNCTION U1() {} } assume, oldval, newval; oldval.t = *dest; @@ -118,15 +117,15 @@ __inline__ __device__ T atomic_fetch_add( template __inline__ __device__ T atomic_fetch_add( volatile T* const dest, - typename Kokkos::Impl::enable_if< - sizeof(T) != sizeof(int) && sizeof(T) == sizeof(unsigned long long int), - const T>::type val) { + typename std::enable_if::type val) { // to work around a bug in the clang cuda compiler, the name here needs to be // different from the one internal to the other overloads union U2 { unsigned long long int i; T t; - KOKKOS_INLINE_FUNCTION U2(){}; + KOKKOS_INLINE_FUNCTION U2() {} } assume, oldval, newval; oldval.t = *dest; @@ -143,10 +142,10 @@ __inline__ __device__ T atomic_fetch_add( //---------------------------------------------------------------------------- template -__inline__ __device__ T atomic_fetch_add( - volatile T* const dest, - typename Kokkos::Impl::enable_if<(sizeof(T) != 4) && (sizeof(T) != 8), - const T>::type& val) { +__inline__ __device__ T +atomic_fetch_add(volatile T* const dest, + typename std::enable_if<(sizeof(T) != 4) && (sizeof(T) != 8), + const T>::type& val) { T return_val; // This is a way to (hopefully) avoid dead lock in a warp int done = 0; @@ -179,7 +178,7 @@ __inline__ __device__ T atomic_fetch_add( #endif #endif //---------------------------------------------------------------------------- -#if !defined(KOKKOS_ENABLE_ROCM_ATOMICS) +#if !defined(KOKKOS_ENABLE_ROCM_ATOMICS) || !defined(KOKKOS_ENABLE_HIP_ATOMICS) #if !defined(__CUDA_ARCH__) || defined(KOKKOS_IMPL_CUDA_CLANG_WORKAROUND) #if defined(KOKKOS_ENABLE_GNU_ATOMICS) || defined(KOKKOS_ENABLE_INTEL_ATOMICS) @@ -239,12 +238,11 @@ inline unsigned long int atomic_fetch_add( template inline T atomic_fetch_add( volatile T* const dest, - typename Kokkos::Impl::enable_if::type - val) { + typename std::enable_if::type val) { union U { int i; T t; - inline U(){}; + inline U() {} } assume, oldval, newval; #if defined(KOKKOS_ENABLE_RFO_PREFETCH) @@ -263,15 +261,14 @@ inline T atomic_fetch_add( } template -inline T atomic_fetch_add( - volatile T* const dest, - typename Kokkos::Impl::enable_if::type val) { +inline T atomic_fetch_add(volatile T* const dest, + typename std::enable_if::type val) { union U { long i; T t; - inline U(){}; + inline U() {} } assume, oldval, newval; #if defined(KOKKOS_ENABLE_RFO_PREFETCH) @@ -293,14 +290,14 @@ inline T atomic_fetch_add( template inline T atomic_fetch_add( volatile T* const dest, - typename Kokkos::Impl::enable_if::type val) { + typename std::enable_if::type val) { union U { Impl::cas128_t i; T t; - inline U(){}; + inline U() {} } assume, oldval, newval; #if defined(KOKKOS_ENABLE_RFO_PREFETCH) @@ -324,12 +321,12 @@ inline T atomic_fetch_add( template inline T atomic_fetch_add( volatile T* const dest, - typename Kokkos::Impl::enable_if<(sizeof(T) != 4) && (sizeof(T) != 8) + typename std::enable_if<(sizeof(T) != 4) && (sizeof(T) != 8) #if defined(KOKKOS_ENABLE_ASM) && defined(KOKKOS_ENABLE_ISA_X86_64) - && (sizeof(T) != 16) + && (sizeof(T) != 16) #endif - , - const T>::type& val) { + , + const T>::type& val) { while (!Impl::lock_address_host_space((void*)dest)) ; T return_val = *dest; @@ -390,11 +387,5 @@ __inline__ __device__ T atomic_fetch_add(volatile T* const, } #endif -// Simpler version of atomic_fetch_add without the fetch -template -KOKKOS_INLINE_FUNCTION void atomic_add(volatile T* const dest, const T src) { - atomic_fetch_add(dest, src); -} - } // namespace Kokkos #endif diff --git a/lib/kokkos/core/src/impl/Kokkos_Atomic_Fetch_Sub.hpp b/lib/kokkos/core/src/impl/Kokkos_Atomic_Fetch_Sub.hpp index 91da9fdcaa40ce5d02e9a1868b3ffdb1bc511be0..c14749f1b73c871613ce2fbd4dc3eda9f0b3abed 100644 --- a/lib/kokkos/core/src/impl/Kokkos_Atomic_Fetch_Sub.hpp +++ b/lib/kokkos/core/src/impl/Kokkos_Atomic_Fetch_Sub.hpp @@ -93,8 +93,7 @@ __inline__ __device__ unsigned int atomic_fetch_sub(volatile double* const dest, template __inline__ __device__ T atomic_fetch_sub( volatile T* const dest, - typename Kokkos::Impl::enable_if::type - val) { + typename std::enable_if::type val) { union U { int i; T t; @@ -115,9 +114,9 @@ __inline__ __device__ T atomic_fetch_sub( template __inline__ __device__ T atomic_fetch_sub( volatile T* const dest, - typename Kokkos::Impl::enable_if< - sizeof(T) != sizeof(int) && sizeof(T) == sizeof(unsigned long long int), - const T>::type val) { + typename std::enable_if::type val) { union U { unsigned long long int i; T t; @@ -138,10 +137,10 @@ __inline__ __device__ T atomic_fetch_sub( //---------------------------------------------------------------------------- template -__inline__ __device__ T atomic_fetch_sub( - volatile T* const dest, - typename Kokkos::Impl::enable_if<(sizeof(T) != 4) && (sizeof(T) != 8), - const T>::type& val) { +__inline__ __device__ T +atomic_fetch_sub(volatile T* const dest, + typename std::enable_if<(sizeof(T) != 4) && (sizeof(T) != 8), + const T>::type& val) { T return_val; // This is a way to (hopefully) avoid dead lock in a warp int done = 0; @@ -172,7 +171,7 @@ __inline__ __device__ T atomic_fetch_sub( #endif #endif //---------------------------------------------------------------------------- -#if !defined(KOKKOS_ENABLE_ROCM_ATOMICS) +#if !defined(KOKKOS_ENABLE_ROCM_ATOMICS) || !defined(KOKKOS_ENABLE_HIP_ATOMICS) #if !defined(__CUDA_ARCH__) || defined(KOKKOS_IMPL_CUDA_CLANG_WORKAROUND) #if defined(KOKKOS_ENABLE_GNU_ATOMICS) || defined(KOKKOS_ENABLE_INTEL_ATOMICS) @@ -214,8 +213,7 @@ inline unsigned long int atomic_fetch_sub( template inline T atomic_fetch_sub( volatile T* const dest, - typename Kokkos::Impl::enable_if::type - val) { + typename std::enable_if::type val) { union U { int i; T t; @@ -238,11 +236,10 @@ inline T atomic_fetch_sub( } template -inline T atomic_fetch_sub( - volatile T* const dest, - typename Kokkos::Impl::enable_if::type val) { +inline T atomic_fetch_sub(volatile T* const dest, + typename std::enable_if::type val) { #if defined(KOKKOS_ENABLE_RFO_PREFETCH) _mm_prefetch((const char*)dest, _MM_HINT_ET0); #endif @@ -269,8 +266,8 @@ inline T atomic_fetch_sub( template inline T atomic_fetch_sub( volatile T* const dest, - typename Kokkos::Impl::enable_if<(sizeof(T) != 4) && (sizeof(T) != 8), - const T>::type& val) { + typename std::enable_if<(sizeof(T) != 4) && (sizeof(T) != 8), + const T>::type& val) { #if defined(KOKKOS_ENABLE_RFO_PREFETCH) _mm_prefetch((const char*)dest, _MM_HINT_ET0); #endif @@ -321,12 +318,6 @@ __inline__ __device__ T atomic_fetch_sub(volatile T* const, } #endif -// Simpler version of atomic_fetch_sub without the fetch -template -KOKKOS_INLINE_FUNCTION void atomic_sub(volatile T* const dest, const T src) { - atomic_fetch_sub(dest, src); -} - } // namespace Kokkos #include diff --git a/lib/kokkos/core/src/impl/Kokkos_Atomic_Generic.hpp b/lib/kokkos/core/src/impl/Kokkos_Atomic_Generic.hpp index 160a4e79218a50345fe413bdace7c856ee30d30f..49ee86b2c45b44e7a6dcfdcc567b94704caa716a 100644 --- a/lib/kokkos/core/src/impl/Kokkos_Atomic_Generic.hpp +++ b/lib/kokkos/core/src/impl/Kokkos_Atomic_Generic.hpp @@ -155,9 +155,9 @@ struct RShiftOper { template KOKKOS_INLINE_FUNCTION T atomic_fetch_oper( const Oper& op, volatile T* const dest, - typename Kokkos::Impl::enable_if< - sizeof(T) != sizeof(int) && sizeof(T) == sizeof(unsigned long long int), - const T>::type val) { + typename std::enable_if::type val) { union U { unsigned long long int i; T t; @@ -179,9 +179,9 @@ KOKKOS_INLINE_FUNCTION T atomic_fetch_oper( template KOKKOS_INLINE_FUNCTION T atomic_oper_fetch( const Oper& op, volatile T* const dest, - typename Kokkos::Impl::enable_if< - sizeof(T) != sizeof(int) && sizeof(T) == sizeof(unsigned long long int), - const T>::type val) { + typename std::enable_if::type val) { union U { unsigned long long int i; T t; @@ -192,7 +192,7 @@ KOKKOS_INLINE_FUNCTION T atomic_oper_fetch( do { assume.i = oldval.i; - newval.t = Oper::apply(assume.t, val); + newval.t = op.apply(assume.t, val); oldval.i = Kokkos::atomic_compare_exchange((unsigned long long int*)dest, assume.i, newval.i); } while (assume.i != oldval.i); @@ -203,8 +203,7 @@ KOKKOS_INLINE_FUNCTION T atomic_oper_fetch( template KOKKOS_INLINE_FUNCTION T atomic_fetch_oper( const Oper& op, volatile T* const dest, - typename Kokkos::Impl::enable_if::type - val) { + typename std::enable_if::type val) { union U { int i; T t; @@ -225,8 +224,7 @@ KOKKOS_INLINE_FUNCTION T atomic_fetch_oper( template KOKKOS_INLINE_FUNCTION T atomic_oper_fetch( const Oper& op, volatile T* const dest, - typename Kokkos::Impl::enable_if::type - val) { + typename std::enable_if::type val) { union U { int i; T t; @@ -237,7 +235,7 @@ KOKKOS_INLINE_FUNCTION T atomic_oper_fetch( do { assume.i = oldval.i; - newval.t = Oper::apply(assume.t, val); + newval.t = op.apply(assume.t, val); oldval.i = Kokkos::atomic_compare_exchange((int*)dest, assume.i, newval.i); } while (assume.i != oldval.i); @@ -247,13 +245,13 @@ KOKKOS_INLINE_FUNCTION T atomic_oper_fetch( template KOKKOS_INLINE_FUNCTION T atomic_fetch_oper( const Oper& op, volatile T* const dest, - typename Kokkos::Impl::enable_if<(sizeof(T) != 4) && (sizeof(T) != 8), - const T>::type val) { + typename std::enable_if<(sizeof(T) != 4) && (sizeof(T) != 8), const T>::type + val) { #ifdef KOKKOS_ACTIVE_EXECUTION_MEMORY_SPACE_HOST while (!Impl::lock_address_host_space((void*)dest)) ; T return_val = *dest; - *dest = Oper::apply(return_val, val); + *dest = op.apply(return_val, val); Impl::unlock_address_host_space((void*)dest); return return_val; #elif defined(KOKKOS_ACTIVE_EXECUTION_MEMORY_SPACE_CUDA) @@ -271,8 +269,7 @@ KOKKOS_INLINE_FUNCTION T atomic_fetch_oper( if (!done) { if (Impl::lock_address_cuda_space((void*)dest)) { return_val = *dest; - *dest = Oper::apply(return_val, val); - ; + *dest = op.apply(return_val, val); Impl::unlock_address_cuda_space((void*)dest); done = 1; } @@ -284,24 +281,44 @@ KOKKOS_INLINE_FUNCTION T atomic_fetch_oper( #endif } return return_val; +#elif defined(__HIP_DEVICE_COMPILE__) + // FIXME_HIP + Kokkos::abort("atomic_fetch_oper not implemented for large types."); + T return_val = *dest; + int done = 0; + unsigned int active = __ballot(1); + unsigned int done_active = 0; + while (active != done_active) { + if (!done) { + // if (Impl::lock_address_hip_space((void*)dest)) + { + return_val = *dest; + *dest = op.apply(return_val, val); + // Impl::unlock_address_hip_space((void*)dest); + done = 1; + } + } + done_active = __ballot(done); + } + return return_val; #endif } template -KOKKOS_INLINE_FUNCTION T atomic_oper_fetch( - const Oper& op, volatile T* const dest, - typename Kokkos::Impl::enable_if<(sizeof(T) != 4) && (sizeof(T) != 8) +KOKKOS_INLINE_FUNCTION T +atomic_oper_fetch(const Oper& op, volatile T* const dest, + typename std::enable_if<(sizeof(T) != 4) && (sizeof(T) != 8) #if defined(KOKKOS_ENABLE_ASM) && \ defined(KOKKOS_ACTIVE_EXECUTION_MEMORY_SPACE_HOST) - && (sizeof(T) != 16) + && (sizeof(T) != 16) #endif - , - const T>::type& val) { + , + const T>::type& val) { #ifdef KOKKOS_ACTIVE_EXECUTION_MEMORY_SPACE_HOST while (!Impl::lock_address_host_space((void*)dest)) ; - T return_val = Oper::apply(*dest, val); + T return_val = op.apply(*dest, val); *dest = return_val; Impl::unlock_address_host_space((void*)dest); return return_val; @@ -319,7 +336,7 @@ KOKKOS_INLINE_FUNCTION T atomic_oper_fetch( while (active != done_active) { if (!done) { if (Impl::lock_address_cuda_space((void*)dest)) { - return_val = Oper::apply(*dest, val); + return_val = op.apply(*dest, val); *dest = return_val; Impl::unlock_address_cuda_space((void*)dest); done = 1; @@ -332,6 +349,26 @@ KOKKOS_INLINE_FUNCTION T atomic_oper_fetch( #endif } return return_val; +#elif defined(__HIP_DEVICE_COMPILE__) + // FIXME_HIP + Kokkos::abort("atomic_oper_fetch not implemented for large types."); + T return_val; + int done = 0; + unsigned int active = __ballot(1); + unsigned int done_active = 0; + while (active != done_active) { + if (!done) { + // if (Impl::lock_address_hip_space((void*)dest)) + { + return_val = op.apply(*dest, val); + *dest = return_val; + // Impl::unlock_address_hip_space((void*)dest); + done = 1; + } + } + done_active = __ballot(done); + } + return return_val; #endif } @@ -454,5 +491,27 @@ KOKKOS_INLINE_FUNCTION T atomic_rshift_fetch(volatile T* const dest, dest, val); } +#ifdef _WIN32 +template +KOKKOS_INLINE_FUNCTION T atomic_add_fetch(volatile T* const dest, const T val) { + return Impl::atomic_oper_fetch(Impl::AddOper(), dest, val); +} + +template +KOKKOS_INLINE_FUNCTION T atomic_sub_fetch(volatile T* const dest, const T val) { + return Impl::atomic_oper_fetch(Impl::SubOper(), dest, val); +} + +template +KOKKOS_INLINE_FUNCTION T atomic_fetch_add(volatile T* const dest, const T val) { + return Impl::atomic_fetch_oper(Impl::AddOper(), dest, val); +} + +template +KOKKOS_INLINE_FUNCTION T atomic_fetch_sub(volatile T* const dest, const T val) { + return Impl::atomic_fetch_oper(Impl::SubOper(), dest, val); +} +#endif + } // namespace Kokkos #endif diff --git a/lib/kokkos/core/src/impl/Kokkos_Atomic_Generic_Secondary.hpp b/lib/kokkos/core/src/impl/Kokkos_Atomic_Generic_Secondary.hpp new file mode 100644 index 0000000000000000000000000000000000000000..9d0172b653798f468fa6d7092a221789ba786234 --- /dev/null +++ b/lib/kokkos/core/src/impl/Kokkos_Atomic_Generic_Secondary.hpp @@ -0,0 +1,76 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 3.0 +// Copyright (2020) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +#if defined(KOKKOS_ATOMIC_HPP) && !defined(KOKKOS_ATOMIC_GENERIC_SECONDARY_HPP) +#define KOKKOS_ATOMIC_GENERIC_SECONDARY_HPP +#include + +namespace Kokkos { + +#ifndef KOKKOS_ENABLE_SERIAL_ATOMICS +template +KOKKOS_INLINE_FUNCTION T atomic_exchange(volatile T* const dest, const T val) { + T oldval = *dest; + T assume; + do { + assume = oldval; + oldval = atomic_compare_exchange(dest, assume, val); + } while (assume != oldval); + + return oldval; +} +#endif + +template +KOKKOS_INLINE_FUNCTION void atomic_add(volatile T* const dest, const T val) { + (void)atomic_fetch_add(dest, val); +} + +template +KOKKOS_INLINE_FUNCTION void atomic_sub(volatile T* const dest, const T val) { + (void)atomic_fetch_sub(dest, val); +} + +} // namespace Kokkos +#endif diff --git a/lib/kokkos/core/src/impl/Kokkos_Atomic_Increment.hpp b/lib/kokkos/core/src/impl/Kokkos_Atomic_Increment.hpp index f0ffebef9a22683c586136ccafc458961c87bd01..65630aa84cdf9845afca761d56e68c6ffe3ef269 100644 --- a/lib/kokkos/core/src/impl/Kokkos_Atomic_Increment.hpp +++ b/lib/kokkos/core/src/impl/Kokkos_Atomic_Increment.hpp @@ -91,6 +91,7 @@ KOKKOS_INLINE_FUNCTION void atomic_increment(volatile short* a) { #endif } +#ifndef _WIN32 template <> KOKKOS_INLINE_FUNCTION void atomic_increment(volatile int* a) { #if defined(KOKKOS_ENABLE_ASM) && defined(KOKKOS_ENABLE_ISA_X86_64) && \ @@ -109,6 +110,7 @@ KOKKOS_INLINE_FUNCTION void atomic_increment(volatile int* a) { Kokkos::atomic_fetch_add(a, int(1)); #endif } +#endif template <> KOKKOS_INLINE_FUNCTION void atomic_increment( diff --git a/lib/kokkos/core/src/impl/Kokkos_Atomic_Load.hpp b/lib/kokkos/core/src/impl/Kokkos_Atomic_Load.hpp index 6b4c82b6203ccf1ba2ad5f7aa3a96b283279917c..f3b77a297629867a11ef25225b1302f1d68aa937 100644 --- a/lib/kokkos/core/src/impl/Kokkos_Atomic_Load.hpp +++ b/lib/kokkos/core/src/impl/Kokkos_Atomic_Load.hpp @@ -125,8 +125,7 @@ __device__ __inline__ T _relaxed_atomic_load_impl( void const**>::type = nullptr) { T rv{}; // TODO remove a copy operation here? - Kokkos::Impl::atomic_oper_fetch(NoOpOper{}, &rv, rv); - return rv; + return Kokkos::Impl::atomic_oper_fetch(NoOpOper{}, ptr, rv); } template @@ -168,6 +167,14 @@ inline T _atomic_load(T* ptr, MemoryOrder) { return *ptr; } +#elif defined(KOKKOS_ENABLE_WINDOWS_ATOMICS) + +template +inline T _atomic_load(T* ptr, MemoryOrder) { + atomic_compare_exchange(ptr, 0, 0); + return *ptr; +} + #endif // end of all atomic implementations template @@ -189,7 +196,7 @@ KOKKOS_FORCEINLINE_FUNCTION T atomic_load(T* ptr, } template -KOKKOS_FORCEINLINE_FUNCTION T atomic_load(T* ptr, +KOKKOS_FORCEINLINE_FUNCTION T atomic_load(T* /*ptr*/, Impl::memory_order_release_t) { static_assert( sizeof(T) == 0, // just something that will always be false, but only on @@ -198,7 +205,7 @@ KOKKOS_FORCEINLINE_FUNCTION T atomic_load(T* ptr, } template -KOKKOS_FORCEINLINE_FUNCTION T atomic_load(T* ptr, +KOKKOS_FORCEINLINE_FUNCTION T atomic_load(T* /*ptr*/, Impl::memory_order_acq_rel_t) { static_assert( sizeof(T) == 0, // just something that will always be false, but only on diff --git a/lib/kokkos/core/src/impl/Kokkos_Atomic_MinMax.hpp b/lib/kokkos/core/src/impl/Kokkos_Atomic_MinMax.hpp new file mode 100644 index 0000000000000000000000000000000000000000..8a886d0a7757ae085a223511162a0ed956dd6d6a --- /dev/null +++ b/lib/kokkos/core/src/impl/Kokkos_Atomic_MinMax.hpp @@ -0,0 +1,223 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 3.0 +// Copyright (2020) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +#include +#if defined(KOKKOS_ATOMIC_HPP) && !defined(KOKKOS_ATOMIC_MINMAX_HPP) +#define KOKKOS_ATOMIC_MINMAX_HPP + +namespace Kokkos { + +//---------------------------------------------------------------------------- + +#if defined(KOKKOS_ENABLE_CUDA) +#if defined(__CUDA_ARCH__) || defined(KOKKOS_IMPL_CUDA_CLANG_WORKAROUND) + +// Support for int, unsigned int, unsigned long long int, and float + +// Atomic_fetch_{min,max} + +#ifdef KOKKOS_IMPL_CUDA_CLANG_WORKAROUND + +// Host implementations for CLANG compiler + +inline __host__ int atomic_fetch_min(volatile int* const dest, const int val) { + return Impl::atomic_fetch_oper(Impl::MinOper(), dest, + val); +} + +inline __host__ unsigned int atomic_fetch_min(volatile unsigned int* const dest, + const unsigned int val) { + return Impl::atomic_fetch_oper( + Impl::MinOper(), dest, val); +} + +inline __host__ unsigned long long int atomic_fetch_min( + volatile unsigned long long int* const dest, + const unsigned long long int val) { + return Impl::atomic_fetch_oper(Impl::MinOper(), + dest, val); +} + +inline __host__ int atomic_fetch_max(volatile int* const dest, const int val) { + return Impl::atomic_fetch_oper(Impl::MaxOper(), dest, + val); +} + +inline __host__ unsigned int atomic_fetch_max(volatile unsigned int* const dest, + const unsigned int val) { + return Impl::atomic_fetch_oper( + Impl::MaxOper(), dest, val); +} + +inline __host__ unsigned long long int atomic_fetch_max( + volatile unsigned long long int* const dest, + const unsigned long long int val) { + return Impl::atomic_fetch_oper(Impl::MaxOper(), + dest, val); +} + +#endif + +inline __device__ int atomic_fetch_min(volatile int* const dest, + const int val) { + return atomicMin((int*)dest, val); +} + +inline __device__ unsigned int atomic_fetch_min( + volatile unsigned int* const dest, const unsigned int val) { + return atomicMin((unsigned int*)dest, val); +} + +inline __device__ unsigned long long int atomic_fetch_min( + volatile unsigned long long int* const dest, + const unsigned long long int val) { + return atomicMin((unsigned long long int*)dest, val); +} + +inline __device__ int atomic_fetch_max(volatile int* const dest, + const int val) { + return atomicMax((int*)dest, val); +} + +inline __device__ unsigned int atomic_fetch_max( + volatile unsigned int* const dest, const unsigned int val) { + return atomicMax((unsigned int*)dest, val); +} + +inline __device__ unsigned long long int atomic_fetch_max( + volatile unsigned long long int* const dest, + const unsigned long long int val) { + return atomicMax((unsigned long long int*)dest, val); +} + +// Atomic_{min,max}_fetch + +#ifdef KOKKOS_IMPL_CUDA_CLANG_WORKAROUND + +// Host implementations for CLANG compiler + +inline __host__ int atomic_min_fetch(volatile int* const dest, const int val) { + return Impl::atomic_oper_fetch(Impl::MinOper(), dest, + val); +} + +inline __host__ unsigned int atomic_min_fetch(volatile unsigned int* const dest, + const unsigned int val) { + return Impl::atomic_oper_fetch( + Impl::MinOper(), dest, val); +} + +inline __host__ unsigned long long int atomic_min_fetch( + volatile unsigned long long int* const dest, + const unsigned long long int val) { + return Impl::atomic_oper_fetch(Impl::MinOper(), + dest, val); +} + +inline __host__ int atomic_max_fetch(volatile int* const dest, const int val) { + return Impl::atomic_oper_fetch(Impl::MaxOper(), dest, + val); +} + +inline __host__ unsigned int atomic_max_fetch(volatile unsigned int* const dest, + const unsigned int val) { + return Impl::atomic_oper_fetch( + Impl::MaxOper(), dest, val); +} + +inline __host__ unsigned long long int atomic_max_fetch( + volatile unsigned long long int* const dest, + const unsigned long long int val) { + return Impl::atomic_oper_fetch(Impl::MaxOper(), + dest, val); +} +#endif + +inline __device__ int atomic_min_fetch(volatile int* const dest, + const int val) { + const int old = atomicMin((int*)dest, val); + return old < val ? old : val; +} + +inline __device__ unsigned int atomic_min_fetch( + volatile unsigned int* const dest, const unsigned int val) { + const unsigned int old = atomicMin((unsigned int*)dest, val); + return old < val ? old : val; +} + +inline __device__ unsigned long long int atomic_min_fetch( + volatile unsigned long long int* const dest, + const unsigned long long int val) { + const unsigned long long old = atomicMin((unsigned long long*)dest, val); + return old < val ? old : val; +} + +inline __device__ int atomic_max_fetch(volatile int* const dest, + const int val) { + const int old = atomicMax((int*)dest, val); + return old >= val ? old : val; +} + +inline __device__ unsigned int atomic_max_fetch( + volatile unsigned int* const dest, const unsigned int val) { + const unsigned int old = atomicMax((unsigned int*)dest, val); + return old >= val ? old : val; +} + +inline __device__ unsigned long long int atomic_max_fetch( + volatile unsigned long long int* const dest, + const unsigned long long int val) { + const unsigned long long old = atomicMax((unsigned long long*)dest, val); + return old >= val ? old : val; +} + +#endif +#endif +} // namespace Kokkos + +#endif diff --git a/lib/kokkos/core/src/impl/Kokkos_Atomic_Store.hpp b/lib/kokkos/core/src/impl/Kokkos_Atomic_Store.hpp index 6cd246e3ae9476f44532f8c4558edd2a7494398a..264d6beaf5d8a9f3741deafca4c67820c0649b90 100644 --- a/lib/kokkos/core/src/impl/Kokkos_Atomic_Store.hpp +++ b/lib/kokkos/core/src/impl/Kokkos_Atomic_Store.hpp @@ -164,6 +164,13 @@ inline void _atomic_store(T* ptr, T val, MemoryOrder) { *ptr = val; } +#elif defined(KOKKOS_ENABLE_WINDOWS_ATOMICS) + +template +inline void _atomic_store(T* ptr, T val, MemoryOrder) { + atomic_exchange(ptr, val); +} + #endif // end of all atomic implementations template @@ -185,7 +192,7 @@ KOKKOS_FORCEINLINE_FUNCTION void atomic_store(T* ptr, T val, } template -KOKKOS_FORCEINLINE_FUNCTION void atomic_store(T* ptr, T val, +KOKKOS_FORCEINLINE_FUNCTION void atomic_store(T* /*ptr*/, T /*val*/, Impl::memory_order_acquire_t) { static_assert( sizeof(T) == 0, // just something that will always be false, but only on @@ -194,7 +201,7 @@ KOKKOS_FORCEINLINE_FUNCTION void atomic_store(T* ptr, T val, } template -KOKKOS_FORCEINLINE_FUNCTION void atomic_store(T* ptr, T val, +KOKKOS_FORCEINLINE_FUNCTION void atomic_store(T* /*ptr*/, T /*val*/, Impl::memory_order_acq_rel_t) { static_assert( sizeof(T) == 0, // just something that will always be false, but only on @@ -205,7 +212,7 @@ KOKKOS_FORCEINLINE_FUNCTION void atomic_store(T* ptr, T val, template KOKKOS_FORCEINLINE_FUNCTION void atomic_store(T* ptr, T val) { // relaxed by default! - _atomic_store(ptr, Impl::memory_order_relaxed); + _atomic_store(ptr, val, Impl::memory_order_relaxed); } } // end namespace Impl diff --git a/lib/kokkos/core/src/impl/Kokkos_Atomic_View.hpp b/lib/kokkos/core/src/impl/Kokkos_Atomic_View.hpp index bfe9bcd0b33fd21d10569ac9e5135c2ae35d2b81..c3719bed229ccfd95b0b34cff3e6bb967900a7d9 100644 --- a/lib/kokkos/core/src/impl/Kokkos_Atomic_View.hpp +++ b/lib/kokkos/core/src/impl/Kokkos_Atomic_View.hpp @@ -347,7 +347,7 @@ class AtomicViewDataHandle { typename ViewTraits::value_type* ptr; KOKKOS_INLINE_FUNCTION - AtomicViewDataHandle() : ptr(NULL) {} + AtomicViewDataHandle() : ptr(nullptr) {} KOKKOS_INLINE_FUNCTION AtomicViewDataHandle(typename ViewTraits::value_type* ptr_) : ptr(ptr_) {} diff --git a/lib/kokkos/core/src/impl/Kokkos_Atomic_Windows.hpp b/lib/kokkos/core/src/impl/Kokkos_Atomic_Windows.hpp index 25230982ec79aea5e7cdf6d146562d0d8ca5c29a..c5d3466c6c1b59a56019a24e5f94256d75f012bd 100644 --- a/lib/kokkos/core/src/impl/Kokkos_Atomic_Windows.hpp +++ b/lib/kokkos/core/src/impl/Kokkos_Atomic_Windows.hpp @@ -52,6 +52,8 @@ #include #include +#undef VOID + namespace Kokkos { namespace Impl { #ifdef _MSC_VER @@ -74,14 +76,43 @@ __attribute__((aligned(16))) template KOKKOS_INLINE_FUNCTION T atomic_compare_exchange( volatile T* const dest, const T& compare, - typename Kokkos::Impl::enable_if::type - val) { + typename std::enable_if::type val) { union U { - LONG i; + CHAR i; + T t; + KOKKOS_INLINE_FUNCTION U(){}; + } tmp; + + tmp.i = _InterlockedCompareExchange8((CHAR*)dest, *((CHAR*)&val), + *((CHAR*)&compare)); + return tmp.t; +} + +template +KOKKOS_INLINE_FUNCTION T atomic_compare_exchange( + volatile T* const dest, const T& compare, + typename std::enable_if::type val) { + union U { + SHORT i; T t; KOKKOS_INLINE_FUNCTION U(){}; } tmp; + tmp.i = _InterlockedCompareExchange16((SHORT*)dest, *((SHORT*)&val), + *((SHORT*)&compare)); + return tmp.t; +} + +template +KOKKOS_INLINE_FUNCTION T atomic_compare_exchange( + volatile T* const dest, const T& compare, + typename std::enable_if::type val) { + union U { + LONG i; + T t; + KOKKOS_INLINE_FUNCTION U() {} + } tmp; + tmp.i = _InterlockedCompareExchange((LONG*)dest, *((LONG*)&val), *((LONG*)&compare)); return tmp.t; @@ -90,12 +121,12 @@ KOKKOS_INLINE_FUNCTION T atomic_compare_exchange( template KOKKOS_INLINE_FUNCTION T atomic_compare_exchange( volatile T* const dest, const T& compare, - typename Kokkos::Impl::enable_if::type val) { + typename std::enable_if::type + val) { union U { LONGLONG i; T t; - KOKKOS_INLINE_FUNCTION U(){}; + KOKKOS_INLINE_FUNCTION U() {} } tmp; tmp.i = _InterlockedCompareExchange64((LONGLONG*)dest, *((LONGLONG*)&val), @@ -106,18 +137,19 @@ KOKKOS_INLINE_FUNCTION T atomic_compare_exchange( template KOKKOS_INLINE_FUNCTION T atomic_compare_exchange( volatile T* const dest, const T& compare, - typename Kokkos::Impl::enable_if::type val) { + typename std::enable_if::type + val) { + T compare_and_result(compare); union U { Impl::cas128_t i; T t; KOKKOS_INLINE_FUNCTION U(){}; - } tmp, newval; + } newval; newval.t = val; _InterlockedCompareExchange128((LONGLONG*)dest, newval.i.upper, - newval.i.lower, ((LONGLONG*)&compare)); - tmp.t = dest; - return tmp.t; + newval.i.lower, + ((LONGLONG*)&compare_and_result)); + return compare_and_result; } template @@ -127,117 +159,6 @@ KOKKOS_INLINE_FUNCTION T atomic_compare_exchange_strong(volatile T* const dest, return atomic_compare_exchange(dest, compare, val); } -template -T atomic_fetch_or(volatile T* const dest, const T val) { - T oldval = *dest; - T assume; - do { - assume = oldval; - T newval = val | oldval; - oldval = atomic_compare_exchange(dest, assume, newval); - } while (assume != oldval); - - return oldval; -} - -template -T atomic_fetch_and(volatile T* const dest, const T val) { - T oldval = *dest; - T assume; - do { - assume = oldval; - T newval = val & oldval; - oldval = atomic_compare_exchange(dest, assume, newval); - } while (assume != oldval); - - return oldval; -} - -template -T atomic_fetch_add(volatile T* const dest, const T val) { - T oldval = *dest; - T assume; - do { - assume = oldval; - T newval = val + oldval; - oldval = atomic_compare_exchange(dest, assume, newval); - } while (assume != oldval); - - return oldval; -} - -template -T atomic_fetch_sub(volatile T* const dest, const T val) { - T oldval = *dest; - T assume; - do { - assume = oldval; - T newval = val - oldval; - oldval = atomic_compare_exchange(dest, assume, newval); - } while (assume != oldval); - - return oldval; -} - -template -T atomic_exchange(volatile T* const dest, const T val) { - T oldval = *dest; - T assume; - do { - assume = oldval; - oldval = atomic_compare_exchange(dest, assume, val); - } while (assume != oldval); - - return oldval; -} - -template -void atomic_or(volatile T* const dest, const T val) { - atomic_fetch_or(dest, val); -} - -template -void atomic_and(volatile T* const dest, const T val) { - atomic_fetch_and(dest, val); -} - -template -void atomic_add(volatile T* const dest, const T val) { - atomic_fetch_add(dest, val); -} - -template -void atomic_sub(volatile T* const dest, const T val) { - atomic_fetch_sub(dest, val); -} - -template -void atomic_assign(volatile T* const dest, const T val) { - atomic_fetch_exchange(dest, val); -} - -template -T atomic_increment(volatile T* const dest) { - T oldval = *dest; - T assume; - do { - assume = oldval; - T newval = assume++; - oldval = atomic_compare_exchange(dest, assume, newval); - } while (assume != oldval); -} - -template -T atomic_decrement(volatile T* const dest) { - T oldval = *dest; - T assume; - do { - assume = oldval; - T newval = assume--; - oldval = atomic_compare_exchange(dest, assume, newval); - } while (assume != oldval); -} - } // namespace Kokkos #endif #endif diff --git a/lib/kokkos/core/src/impl/Kokkos_ChaseLev.hpp b/lib/kokkos/core/src/impl/Kokkos_ChaseLev.hpp index bff0ed8315aab5f6ac5c19743d3bb71eb08c9c3e..e2283f11fd20d08e5fb554581547622d7140a039 100644 --- a/lib/kokkos/core/src/impl/Kokkos_ChaseLev.hpp +++ b/lib/kokkos/core/src/impl/Kokkos_ChaseLev.hpp @@ -48,8 +48,7 @@ #define KOKKOS_IMPL_LOCKFREEDEQUE_HPP #include -#ifdef KOKKOS_ENABLE_TASKDAG // Note: implies CUDA_VERSION >= 8000 if using - // CUDA +#ifdef KOKKOS_ENABLE_TASKDAG #include @@ -191,11 +190,21 @@ struct ChaseLevDeque { return_value = *static_cast(a[b]); // relaxed load if (t == b) { /* single last element in the queue. */ - if (not Impl::atomic_compare_exchange_strong( +#ifdef _WIN32 + Kokkos::memory_fence(); + bool const success = + Kokkos::atomic_compare_exchange_strong(&m_top, t, t + 1); + Kokkos::memory_fence(); + if (!success) { + return_value = nullptr; + } +#else + if (!Impl::atomic_compare_exchange_strong( &m_top, t, t + 1, memory_order_seq_cst, memory_order_relaxed)) { /* failed race, someone else stole it */ return_value = nullptr; } +#endif m_bottom = b + 1; // memory order relaxed } } else { @@ -241,10 +250,20 @@ struct ChaseLevDeque { Kokkos::load_fence(); // TODO @tasking @memory_order DSH memory order // instead of fence return_value = *static_cast(a[t]); // relaxed - if (not Impl::atomic_compare_exchange_strong( +#ifdef _WIN32 + Kokkos::memory_fence(); + bool const success = + Kokkos::atomic_compare_exchange_strong(&m_top, t, t + 1); + Kokkos::memory_fence(); + if (!success) { + return_value = nullptr; + } +#else + if (!Impl::atomic_compare_exchange_strong( &m_top, t, t + 1, memory_order_seq_cst, memory_order_relaxed)) { return_value = nullptr; } +#endif } return return_value; } diff --git a/lib/kokkos/core/src/impl/Kokkos_ClockTic.hpp b/lib/kokkos/core/src/impl/Kokkos_ClockTic.hpp index ad13fb7548df932b11066f73092dd76419a48a78..386b5918d03c4d88b2a87341f4da23e3120f863f 100644 --- a/lib/kokkos/core/src/impl/Kokkos_ClockTic.hpp +++ b/lib/kokkos/core/src/impl/Kokkos_ClockTic.hpp @@ -75,7 +75,10 @@ uint64_t clock_tic(void) noexcept { #elif defined(__HCC_ACCELERATOR__) // Get clock register return hc::__clock_u64(); - +#elif defined(KOKKOS_ENABLE_OPENMPTARGET) + return (uint64_t)std::chrono::high_resolution_clock::now() + .time_since_epoch() + .count(); #elif defined(__i386__) || defined(__x86_64) // Return value of 64-bit hi-res clock register. diff --git a/lib/kokkos/core/src/impl/Kokkos_Core.cpp b/lib/kokkos/core/src/impl/Kokkos_Core.cpp index 53f3fd9ce20279a796d42617eed44c1ec6bb2642..9640e0fccb7595c884ace5a9097cbb09026400ce 100644 --- a/lib/kokkos/core/src/impl/Kokkos_Core.cpp +++ b/lib/kokkos/core/src/impl/Kokkos_Core.cpp @@ -50,19 +50,122 @@ #include #include #include +#include +#include #include +#ifndef _WIN32 #include +#endif //---------------------------------------------------------------------------- - namespace { bool g_is_initialized = false; bool g_show_warnings = true; -std::stack > finalize_hooks; +// When compiling with clang/LLVM and using the GNU (GCC) C++ Standard Library +// (any recent version between GCC 7.3 and GCC 9.2), std::deque SEGV's during +// the unwinding of the atexit(3C) handlers at program termination. However, +// this bug is not observable when building with GCC. +// As an added bonus, std::list provides constant insertion and +// deletion time complexity, which translates to better run-time performance. As +// opposed to std::deque which does not provide the same constant time +// complexity for inserts/removals, since std::deque is implemented as a +// segmented array. +using hook_function_type = std::function; +std::stack> finalize_hooks; } // namespace namespace Kokkos { namespace Impl { + +int get_ctest_gpu(const char* local_rank_str) { + auto const* ctest_kokkos_device_type = + std::getenv("CTEST_KOKKOS_DEVICE_TYPE"); + if (!ctest_kokkos_device_type) { + return 0; + } + + auto const* ctest_resource_group_count_str = + std::getenv("CTEST_RESOURCE_GROUP_COUNT"); + if (!ctest_resource_group_count_str) { + return 0; + } + + // Make sure rank is within bounds of resource groups specified by CTest + auto resource_group_count = std::atoi(ctest_resource_group_count_str); + auto local_rank = std::atoi(local_rank_str); + if (local_rank >= resource_group_count) { + std::ostringstream ss; + ss << "Error: local rank " << local_rank + << " is outside the bounds of resource groups provided by CTest. Raised" + << " by Kokkos::Impl::get_ctest_gpu()."; + throw_runtime_exception(ss.str()); + } + + // Get the resource types allocated to this resource group + std::ostringstream ctest_resource_group; + ctest_resource_group << "CTEST_RESOURCE_GROUP_" << local_rank; + std::string ctest_resource_group_name = ctest_resource_group.str(); + auto const* ctest_resource_group_str = + std::getenv(ctest_resource_group_name.c_str()); + if (!ctest_resource_group_str) { + std::ostringstream ss; + ss << "Error: " << ctest_resource_group_name << " is not specified. Raised" + << " by Kokkos::Impl::get_ctest_gpu()."; + throw_runtime_exception(ss.str()); + } + + // Look for the device type specified in CTEST_KOKKOS_DEVICE_TYPE + bool found_device = false; + std::string ctest_resource_group_cxx_str = ctest_resource_group_str; + std::istringstream instream(ctest_resource_group_cxx_str); + while (true) { + std::string devName; + std::getline(instream, devName, ','); + if (devName == ctest_kokkos_device_type) { + found_device = true; + break; + } + if (instream.eof() || devName.length() == 0) { + break; + } + } + + if (!found_device) { + std::ostringstream ss; + ss << "Error: device type '" << ctest_kokkos_device_type + << "' not included in " << ctest_resource_group_name + << ". Raised by Kokkos::Impl::get_ctest_gpu()."; + throw_runtime_exception(ss.str()); + } + + // Get the device ID + std::string ctest_device_type_upper = ctest_kokkos_device_type; + for (auto& c : ctest_device_type_upper) { + c = std::toupper(c); + } + ctest_resource_group << "_" << ctest_device_type_upper; + + std::string ctest_resource_group_id_name = ctest_resource_group.str(); + auto resource_str = std::getenv(ctest_resource_group_id_name.c_str()); + if (!resource_str) { + std::ostringstream ss; + ss << "Error: " << ctest_resource_group_id_name + << " is not specified. Raised by Kokkos::Impl::get_ctest_gpu()."; + throw_runtime_exception(ss.str()); + } + + auto const* comma = std::strchr(resource_str, ','); + if (!comma || strncmp(resource_str, "id:", 3)) { + std::ostringstream ss; + ss << "Error: invalid value of " << ctest_resource_group_id_name << ": '" + << resource_str << "'. Raised by Kokkos::Impl::get_ctest_gpu()."; + throw_runtime_exception(ss.str()); + } + + std::string id(resource_str + 3, comma - resource_str - 3); + return std::atoi(id.c_str()); +} + namespace { bool is_unsigned_int(const char* str) { @@ -74,7 +177,8 @@ bool is_unsigned_int(const char* str) { } return true; } -void initialize_internal(const InitArguments& args) { + +void initialize_backends(const InitArguments& args) { // This is an experimental setting // For KNL in Flat mode this variable should be set, so that // memkind allocates high bandwidth memory correctly. @@ -82,10 +186,6 @@ void initialize_internal(const InitArguments& args) { setenv("MEMKIND_HBW_NODES", "1", 0); #endif - if (args.disable_warnings) { - g_show_warnings = false; - } - // Protect declarations, to prevent "unused variable" warnings. #if defined(KOKKOS_ENABLE_OPENMP) || defined(KOKKOS_ENABLE_THREADS) || \ defined(KOKKOS_ENABLE_OPENMPTARGET) || defined(KOKKOS_ENABLE_HPX) @@ -94,25 +194,39 @@ void initialize_internal(const InitArguments& args) { #if defined(KOKKOS_ENABLE_THREADS) || defined(KOKKOS_ENABLE_OPENMPTARGET) const int use_numa = args.num_numa; #endif -#if defined(KOKKOS_ENABLE_CUDA) || defined(KOKKOS_ENABLE_ROCM) +#if defined(KOKKOS_ENABLE_CUDA) || defined(KOKKOS_ENABLE_ROCM) || \ + defined(KOKKOS_ENABLE_HIP) int use_gpu = args.device_id; const int ndevices = args.ndevices; const int skip_device = args.skip_device; // if the exact device is not set, but ndevices was given, assign round-robin // using on-node MPI rank - if (use_gpu < 0 && ndevices >= 0) { - auto local_rank_str = std::getenv("OMPI_COMM_WORLD_LOCAL_RANK"); // OpenMPI + if (use_gpu < 0) { + auto const* local_rank_str = + std::getenv("OMPI_COMM_WORLD_LOCAL_RANK"); // OpenMPI if (!local_rank_str) local_rank_str = std::getenv("MV2_COMM_WORLD_LOCAL_RANK"); // MVAPICH2 if (!local_rank_str) local_rank_str = std::getenv("SLURM_LOCALID"); // SLURM - if (local_rank_str) { - auto local_rank = std::atoi(local_rank_str); - use_gpu = local_rank % ndevices; - } else { - // user only gave us ndevices, but the MPI environment variable wasn't - // set. start with GPU 0 at this point - use_gpu = 0; + + auto const* ctest_kokkos_device_type = + std::getenv("CTEST_KOKKOS_DEVICE_TYPE"); // CTest + auto const* ctest_resource_group_count_str = + std::getenv("CTEST_RESOURCE_GROUP_COUNT"); // CTest + if (ctest_kokkos_device_type && ctest_resource_group_count_str && + local_rank_str) { + // Use the device assigned by CTest + use_gpu = get_ctest_gpu(local_rank_str); + } else if (ndevices >= 0) { + // Use the device assigned by the rank + if (local_rank_str) { + auto local_rank = std::atoi(local_rank_str); + use_gpu = local_rank % ndevices; + } else { + // user only gave use ndevices, but the MPI environment variable wasn't + // set. start with GPU 0 at this point + use_gpu = 0; + } } // shift assignments over by one so no one is assigned to "skip_device" if (use_gpu >= skip_device) ++use_gpu; @@ -199,17 +313,9 @@ void initialize_internal(const InitArguments& args) { #endif #if defined(KOKKOS_ENABLE_OPENMPTARGET) - if (Impl::is_same::value) { - if (num_threads > 0) { - if (use_numa > 0) { - Kokkos::Experimental::OpenMPTarget::initialize(num_threads, use_numa); - } else { - Kokkos::Experimental::OpenMPTarget::initialize(num_threads); - } - } else { - Kokkos::Experimental::OpenMPTarget::initialize(); - } + if (std::is_same::value) { + Kokkos::Experimental::OpenMPTarget().impl_initialize(); // std::cout << "Kokkos::initialize() fyi: OpenMP enabled and initialized" // << std::endl ; } else { @@ -254,6 +360,23 @@ void initialize_internal(const InitArguments& args) { } #endif +#if defined(KOKKOS_ENABLE_HIP) + if (std::is_same::value || + 0 < use_gpu) { + if (use_gpu > -1) { + Kokkos::Experimental::HIP::impl_initialize( + Kokkos::Experimental::HIP::SelectDevice(use_gpu)); + } else { + Kokkos::Experimental::HIP::impl_initialize(); + } + std::cout << "Kokkos::initialize() fyi: HIP enabled and initialized" + << std::endl; + } +#endif +} + +void initialize_profiling(const InitArguments&) { #if defined(KOKKOS_ENABLE_PROFILING) Kokkos::Profiling::initialize(); #else @@ -263,9 +386,23 @@ void initialize_internal(const InitArguments& args) { << std::endl; } #endif +} + +void pre_initialize_internal(const InitArguments& args) { + if (args.disable_warnings) g_show_warnings = false; +} + +void post_initialize_internal(const InitArguments& args) { + initialize_profiling(args); g_is_initialized = true; } +void initialize_internal(const InitArguments& args) { + pre_initialize_internal(args); + initialize_backends(args); + post_initialize_internal(args); +} + void finalize_internal(const bool all_spaces = false) { typename decltype(finalize_hooks)::size_type numSuccessfulCalls = 0; while (!finalize_hooks.empty()) { @@ -320,12 +457,20 @@ void finalize_internal(const bool all_spaces = false) { } #endif +#if defined(KOKKOS_ENABLE_HIP) + if (std::is_same::value || + all_spaces) { + if (Kokkos::Experimental::HIP::impl_is_initialized()) + Kokkos::Experimental::HIP::impl_finalize(); + } +#endif #if defined(KOKKOS_ENABLE_OPENMPTARGET) if (std::is_same::value || all_spaces) { - if (Kokkos::Experimental::OpenMPTarget::is_initialized()) - Kokkos::Experimental::OpenMPTarget::finalize(); + if (Kokkos::Experimental::OpenMPTarget().impl_is_initialized()) + Kokkos::Experimental::OpenMPTarget().impl_finalize(); } #endif @@ -380,23 +525,19 @@ void finalize_internal(const bool all_spaces = false) { void fence_internal() { #if defined(KOKKOS_ENABLE_CUDA) - if (std::is_same::value) { - Kokkos::Cuda::impl_static_fence(); - } + Kokkos::Cuda::impl_static_fence(); #endif #if defined(KOKKOS_ENABLE_ROCM) - if (std::is_same::value) { - Kokkos::Experimental::ROCm().fence(); - } + Kokkos::Experimental::ROCm().fence(); +#endif + +#if defined(KOKKOS_ENABLE_HIP) + Kokkos::Experimental::HIP().fence(); #endif #if defined(KOKKOS_ENABLE_OPENMP) - if (std::is_same::value || - std::is_same::value) { - Kokkos::OpenMP::impl_static_fence(); - } + Kokkos::OpenMP::impl_static_fence(); #endif #if defined(KOKKOS_ENABLE_HPX) @@ -404,18 +545,11 @@ void fence_internal() { #endif #if defined(KOKKOS_ENABLE_THREADS) - if (std::is_same::value || - std::is_same::value) { - Kokkos::Threads::impl_static_fence(); - } + Kokkos::Threads::impl_static_fence(); #endif #if defined(KOKKOS_ENABLE_SERIAL) - if (std::is_same::value || - std::is_same::value) { - Kokkos::Serial::impl_static_fence(); - } + Kokkos::Serial::impl_static_fence(); #endif } @@ -454,22 +588,31 @@ bool check_int_arg(char const* arg, char const* expected, int* value) { return true; } -} // namespace - -} // namespace Impl -} // namespace Kokkos - -//---------------------------------------------------------------------------- +void warn_deprecated_command_line_argument(std::string deprecated, + std::string valid) { + std::cerr + << "Warning: command line argument '" << deprecated + << "' is deprecated. Use '" << valid + << "' instead. Raised by Kokkos::initialize(int narg, char* argc[])." + << std::endl; +} -namespace Kokkos { +unsigned get_process_id() { +#ifdef _WIN32 + return unsigned(GetCurrentProcessId()); +#else + return unsigned(getpid()); +#endif +} -void initialize(int& narg, char* arg[]) { - int num_threads = -1; - int numa = -1; - int device = -1; - int ndevices = -1; - int skip_device = 9999; - bool disable_warnings = false; +void parse_command_line_arguments(int& narg, char* arg[], + InitArguments& arguments) { + auto& num_threads = arguments.num_threads; + auto& numa = arguments.num_numa; + auto& device = arguments.device_id; + auto& ndevices = arguments.ndevices; + auto& skip_device = arguments.skip_device; + auto& disable_warnings = arguments.disable_warnings; int kokkos_threads_found = 0; int kokkos_numa_found = 0; @@ -479,76 +622,97 @@ void initialize(int& narg, char* arg[]) { int iarg = 0; while (iarg < narg) { - if (Impl::check_int_arg(arg[iarg], "--kokkos-threads", &num_threads)) { + if (check_int_arg(arg[iarg], "--kokkos-threads", &num_threads)) { for (int k = iarg; k < narg - 1; k++) { arg[k] = arg[k + 1]; } kokkos_threads_found = 1; narg--; } else if (!kokkos_threads_found && - Impl::check_int_arg(arg[iarg], "--threads", &num_threads)) { + check_int_arg(arg[iarg], "--threads", &num_threads)) { iarg++; - } else if (Impl::check_int_arg(arg[iarg], "--kokkos-numa", &numa)) { + } else if (check_int_arg(arg[iarg], "--kokkos-numa", &numa)) { for (int k = iarg; k < narg - 1; k++) { arg[k] = arg[k + 1]; } kokkos_numa_found = 1; narg--; } else if (!kokkos_numa_found && - Impl::check_int_arg(arg[iarg], "--numa", &numa)) { + check_int_arg(arg[iarg], "--numa", &numa)) { iarg++; - } else if (Impl::check_int_arg(arg[iarg], "--kokkos-device", &device)) { + } else if (check_int_arg(arg[iarg], "--kokkos-device-id", &device) || + check_int_arg(arg[iarg], "--kokkos-device", &device)) { + if (check_arg(arg[iarg], "--kokkos-device")) { + warn_deprecated_command_line_argument("--kokkos-device", + "--kokkos-device-id"); + } for (int k = iarg; k < narg - 1; k++) { arg[k] = arg[k + 1]; } kokkos_device_found = 1; narg--; } else if (!kokkos_device_found && - Impl::check_int_arg(arg[iarg], "--device", &device)) { + (check_int_arg(arg[iarg], "--device-id", &device) || + check_int_arg(arg[iarg], "--device", &device))) { + if (check_arg(arg[iarg], "--device")) { + warn_deprecated_command_line_argument("--device", "--device-id"); + } iarg++; - } else if (Impl::check_arg(arg[iarg], "--kokkos-ndevices") || - Impl::check_arg(arg[iarg], "--ndevices")) { + } else if (check_arg(arg[iarg], "--kokkos-num-devices") || + check_arg(arg[iarg], "--num-devices") || + check_arg(arg[iarg], "--kokkos-ndevices") || + check_arg(arg[iarg], "--ndevices")) { + if (check_arg(arg[iarg], "--ndevices")) { + warn_deprecated_command_line_argument("--ndevices", "--num-devices"); + } + if (check_arg(arg[iarg], "--kokkos-ndevices")) { + warn_deprecated_command_line_argument("--kokkos-ndevices", + "--kokkos-num-devices"); + } // Find the number of device (expecting --device=XX) - if (!((strncmp(arg[iarg], "--kokkos-ndevices=", 18) == 0) || + if (!((strncmp(arg[iarg], "--kokkos-num-devices=", 21) == 0) || + (strncmp(arg[iarg], "--num-ndevices=", 14) == 0) || + (strncmp(arg[iarg], "--kokkos-ndevices=", 18) == 0) || (strncmp(arg[iarg], "--ndevices=", 11) == 0))) - Impl::throw_runtime_exception( + throw_runtime_exception( "Error: expecting an '=INT[,INT]' after command line argument " - "'--ndevices/--kokkos-ndevices'. Raised by Kokkos::initialize(int " - "narg, char* argc[])."); + "'--num-devices/--kokkos-num-devices'. Raised by " + "Kokkos::initialize(int narg, char* argc[])."); char* num1 = strchr(arg[iarg], '=') + 1; char* num2 = strpbrk(num1, ","); - int num1_len = num2 == NULL ? strlen(num1) : num2 - num1; + int num1_len = num2 == nullptr ? strlen(num1) : num2 - num1; char* num1_only = new char[num1_len + 1]; strncpy(num1_only, num1, num1_len); num1_only[num1_len] = 0; - if (!Impl::is_unsigned_int(num1_only) || (strlen(num1_only) == 0)) { - Impl::throw_runtime_exception( + if (!is_unsigned_int(num1_only) || (strlen(num1_only) == 0)) { + throw_runtime_exception( "Error: expecting an integer number after command line argument " - "'--kokkos-ndevices'. Raised by Kokkos::initialize(int narg, char* " - "argc[])."); + "'--kokkos-numdevices'. Raised by " + "Kokkos::initialize(int narg, char* argc[])."); } - if ((strncmp(arg[iarg], "--kokkos-ndevices", 17) == 0) || - !kokkos_ndevices_found) + if (check_arg(arg[iarg], "--kokkos-num-devices") || + check_arg(arg[iarg], "--kokkos-ndevices") || !kokkos_ndevices_found) ndevices = atoi(num1_only); delete[] num1_only; - if (num2 != NULL) { - if ((!Impl::is_unsigned_int(num2 + 1)) || (strlen(num2) == 1)) - Impl::throw_runtime_exception( + if (num2 != nullptr) { + if ((!is_unsigned_int(num2 + 1)) || (strlen(num2) == 1)) + throw_runtime_exception( "Error: expecting an integer number after command line argument " - "'--kokkos-ndevices=XX,'. Raised by Kokkos::initialize(int narg, " - "char* argc[])."); + "'--kokkos-num-devices=XX,'. Raised by " + "Kokkos::initialize(int narg, char* argc[])."); - if ((strncmp(arg[iarg], "--kokkos-ndevices", 17) == 0) || - !kokkos_ndevices_found) + if (check_arg(arg[iarg], "--kokkos-num-devices") || + check_arg(arg[iarg], "--kokkos-ndevices") || !kokkos_ndevices_found) skip_device = atoi(num2 + 1); } - // Remove the --kokkos-ndevices argument from the list but leave - // --ndevices - if (strncmp(arg[iarg], "--kokkos-ndevices", 17) == 0) { + // Remove the --kokkos-num-devices argument from the list but leave + // --num-devices + if (check_arg(arg[iarg], "--kokkos-num-devices") || + check_arg(arg[iarg], "--kokkos-ndevices")) { for (int k = iarg; k < narg - 1; k++) { arg[k] = arg[k + 1]; } @@ -557,88 +721,45 @@ void initialize(int& narg, char* arg[]) { } else { iarg++; } - } else if (strcmp(arg[iarg], "--kokkos-disable-warnings") == 0) { + } else if (check_arg(arg[iarg], "--kokkos-disable-warnings")) { disable_warnings = true; for (int k = iarg; k < narg - 1; k++) { arg[k] = arg[k + 1]; } narg--; - } else if ((strcmp(arg[iarg], "--kokkos-help") == 0) || - (strcmp(arg[iarg], "--help") == 0)) { - std::cout << std::endl; - std::cout << "-----------------------------------------------------------" - "---------------------" - << std::endl; - std::cout << "-------------Kokkos command line " - "arguments--------------------------------------" - << std::endl; - std::cout << "-----------------------------------------------------------" - "---------------------" - << std::endl; - std::cout << "The following arguments exist also without prefix 'kokkos' " - "(e.g. --help)." - << std::endl; - std::cout << "The prefixed arguments will be removed from the list by " - "Kokkos::initialize()," - << std::endl; - std::cout << "the non-prefixed ones are not removed. Prefixed versions " - "take precedence over " - << std::endl; - std::cout << "non prefixed ones, and the last occurrence of an argument " - "overwrites prior" - << std::endl; - std::cout << "settings." << std::endl; - std::cout << std::endl; - std::cout << "--kokkos-help : print this message" - << std::endl; - std::cout - << "--kokkos-disable-warnings : disable kokkos warning messages" - << std::endl; - std::cout - << "--kokkos-threads=INT : specify total number of threads or" - << std::endl; - std::cout << " number of threads per NUMA " - "region if " - << std::endl; - std::cout << " used in conjunction with " - "'--numa' option. " - << std::endl; - std::cout << "--kokkos-numa=INT : specify number of NUMA " - "regions used by process." - << std::endl; - std::cout << "--kokkos-device=INT : specify device id to be used " - "by Kokkos. " - << std::endl; - std::cout << "--kokkos-ndevices=INT[,INT] : used when running MPI jobs. " - "Specify number of" - << std::endl; - std::cout << " devices per node to be used. " - "Process to device" - << std::endl; - std::cout << " mapping happens by obtaining " - "the local MPI rank" - << std::endl; - std::cout << " and assigning devices " - "round-robin. The optional" - << std::endl; - std::cout << " second argument allows for " - "an existing device" - << std::endl; - std::cout << " to be ignored. This is most " - "useful on workstations" - << std::endl; - std::cout << " with multiple GPUs of which " - "one is used to drive" - << std::endl; - std::cout << " screen output." << std::endl; - std::cout << std::endl; - std::cout << "-----------------------------------------------------------" - "---------------------" - << std::endl; - std::cout << std::endl; - - // Remove the --kokkos-help argument from the list but leave --ndevices - if (strcmp(arg[iarg], "--kokkos-help") == 0) { + } else if (check_arg(arg[iarg], "--kokkos-help") || + check_arg(arg[iarg], "--help")) { + auto const help_message = R"( + -------------------------------------------------------------------------------- + -------------Kokkos command line arguments-------------------------------------- + -------------------------------------------------------------------------------- + The following arguments exist also without prefix 'kokkos' (e.g. --help). + The prefixed arguments will be removed from the list by Kokkos::initialize(), + the non-prefixed ones are not removed. Prefixed versions take precedence over + non prefixed ones, and the last occurrence of an argument overwrites prior + settings. + + --kokkos-help : print this message + --kokkos-disable-warnings : disable kokkos warning messages + --kokkos-threads=INT : specify total number of threads or + number of threads per NUMA region if + used in conjunction with '--numa' option. + --kokkos-numa=INT : specify number of NUMA regions used by process. + --kokkos-device-id=INT : specify device id to be used by Kokkos. + --kokkos-num-devices=INT[,INT] : used when running MPI jobs. Specify number of + devices per node to be used. Process to device + mapping happens by obtaining the local MPI rank + and assigning devices round-robin. The optional + second argument allows for an existing device + to be ignored. This is most useful on workstations + with multiple GPUs of which one is used to drive + screen output. + -------------------------------------------------------------------------------- +)"; + std::cout << help_message << std::endl; + + // Remove the --kokkos-help argument from the list but leave --help + if (check_arg(arg[iarg], "--kokkos-help")) { for (int k = iarg; k < narg - 1; k++) { arg[k] = arg[k + 1]; } @@ -649,8 +770,16 @@ void initialize(int& narg, char* arg[]) { } else iarg++; } +} + +void parse_environment_variables(InitArguments& arguments) { + auto& num_threads = arguments.num_threads; + auto& numa = arguments.num_numa; + auto& device = arguments.device_id; + auto& ndevices = arguments.ndevices; + auto& skip_device = arguments.skip_device; + auto& disable_warnings = arguments.disable_warnings; - // Read environment variables char* endptr; auto env_num_threads_str = std::getenv("KOKKOS_NUM_THREADS"); if (env_num_threads_str != nullptr) { @@ -783,7 +912,7 @@ void initialize(int& narg, char* arg[]) { "Error: cannot KOKKOS_SKIP_DEVICE the only KOKKOS_RAND_DEVICE. " "Raised by Kokkos::initialize(int narg, char* argc[])."); - std::srand(getpid()); + std::srand(get_process_id()); while (device < 0) { int test_device = std::rand() % rdevices; if (test_device != skip_device) device = test_device; @@ -804,21 +933,40 @@ void initialize(int& narg, char* arg[]) { "KOKKOS_DISABLE_WARNINGS if both are set. Raised by " "Kokkos::initialize(int narg, char* argc[])."); } +} +} // namespace + +} // namespace Impl +} // namespace Kokkos + +//---------------------------------------------------------------------------- + +namespace Kokkos { + +void initialize(int& narg, char* arg[]) { InitArguments arguments; - arguments.num_threads = num_threads; - arguments.num_numa = numa; - arguments.device_id = device; - arguments.ndevices = ndevices; - arguments.skip_device = skip_device; - arguments.disable_warnings = disable_warnings; + Impl::parse_command_line_arguments(narg, arg, arguments); + Impl::parse_environment_variables(arguments); Impl::initialize_internal(arguments); } -void initialize(const InitArguments& arguments) { +void initialize(InitArguments arguments) { + Impl::parse_environment_variables(arguments); Impl::initialize_internal(arguments); } +namespace Impl { + +void pre_initialize(const InitArguments& args) { + pre_initialize_internal(args); +} + +void post_initialize(const InitArguments& args) { + post_initialize_internal(args); +} +} // namespace Impl + void push_finalize_hook(std::function f) { finalize_hooks.push(f); } void finalize() { Impl::finalize_internal(); } @@ -833,6 +981,10 @@ void fence() { Impl::fence_internal(); } void print_configuration(std::ostream& out, const bool detail) { std::ostringstream msg; + msg << "Kokkos Version:" << std::endl; + msg << " " << KOKKOS_VERSION / 10000 << "." << (KOKKOS_VERSION % 10000) / 100 + << "." << KOKKOS_VERSION % 100 << std::endl; + msg << "Compiler:" << std::endl; #ifdef KOKKOS_COMPILER_APPLECC msg << " KOKKOS_COMPILER_APPLECC: " << KOKKOS_COMPILER_APPLECC << std::endl; @@ -882,6 +1034,12 @@ void print_configuration(std::ostream& out, const bool detail) { msg << "yes" << std::endl; #else msg << "no" << std::endl; +#endif + msg << " KOKKOS_ENABLE_HIP: "; +#ifdef KOKKOS_ENABLE_HIP + msg << "yes" << std::endl; +#else + msg << "no" << std::endl; #endif msg << " KOKKOS_ENABLE_OPENMP: "; #ifdef KOKKOS_ENABLE_OPENMP @@ -900,12 +1058,6 @@ void print_configuration(std::ostream& out, const bool detail) { msg << "yes" << std::endl; #else msg << "no" << std::endl; -#endif - msg << " KOKKOS_ENABLE_QTHREADS: "; -#ifdef KOKKOS_ENABLE_QTHREADS - msg << "yes" << std::endl; -#else - msg << "no" << std::endl; #endif msg << " KOKKOS_ENABLE_SERIAL: "; #ifdef KOKKOS_ENABLE_SERIAL @@ -921,20 +1073,20 @@ void print_configuration(std::ostream& out, const bool detail) { #else msg << "no" << std::endl; #endif - msg << " KOKKOS_ENABLE_DEFAULT_DEVICE_TYPE_OPENMP: "; -#ifdef KOKKOS_ENABLE_DEFAULT_DEVICE_TYPE_OPENMP + msg << " KOKKOS_ENABLE_DEFAULT_DEVICE_TYPE_HIP: "; +#ifdef KOKKOS_ENABLE_DEFAULT_DEVICE_TYPE_HIP msg << "yes" << std::endl; #else msg << "no" << std::endl; #endif - msg << " KOKKOS_ENABLE_DEFAULT_DEVICE_TYPE_THREADS: "; -#ifdef KOKKOS_ENABLE_DEFAULT_DEVICE_TYPE_THREADS + msg << " KOKKOS_ENABLE_DEFAULT_DEVICE_TYPE_OPENMP: "; +#ifdef KOKKOS_ENABLE_DEFAULT_DEVICE_TYPE_OPENMP msg << "yes" << std::endl; #else msg << "no" << std::endl; #endif - msg << " KOKKOS_ENABLE_DEFAULT_DEVICE_TYPE_QTHREADS: "; -#ifdef KOKKOS_ENABLE_DEFAULT_DEVICE_TYPE_QTHREADS + msg << " KOKKOS_ENABLE_DEFAULT_DEVICE_TYPE_THREADS: "; +#ifdef KOKKOS_ENABLE_DEFAULT_DEVICE_TYPE_THREADS msg << "yes" << std::endl; #else msg << "no" << std::endl; @@ -1131,12 +1283,25 @@ void print_configuration(std::ostream& out, const bool detail) { msg << "no" << std::endl; #endif +#endif + +#ifdef KOKKOS_ENABLE_HIP + msg << "HIP Options:" << std::endl; + msg << " KOKKOS_ENABLE_HIP_RELOCATABLE_DEVICE_CODE: "; +#ifdef KOKKOS_ENABLE_HIP_RELOCATABLE_DEVICE_CODE + msg << "yes" << std::endl; +#else + msg << "no" << std::endl; +#endif #endif msg << "\nRuntime Configuration:" << std::endl; #ifdef KOKKOS_ENABLE_CUDA Cuda::print_configuration(msg, detail); #endif +#ifdef KOKKOS_ENABLE_HIP + Experimental::HIP::print_configuration(msg, detail); +#endif #ifdef KOKKOS_ENABLE_OPENMP OpenMP::print_configuration(msg, detail); #endif @@ -1146,9 +1311,6 @@ void print_configuration(std::ostream& out, const bool detail) { #if defined(KOKKOS_ENABLE_THREADS) Threads::print_configuration(msg, detail); #endif -#ifdef KOKKOS_ENABLE_QTHREADS - Qthreads::print_configuration(msg, detail); -#endif #ifdef KOKKOS_ENABLE_SERIAL Serial::print_configuration(msg, detail); #endif diff --git a/lib/kokkos/core/src/impl/Kokkos_EBO.hpp b/lib/kokkos/core/src/impl/Kokkos_EBO.hpp index 5adf4bd5f16c9665eaf684854358ee8afd0c9c92..39e855a55eb7ec230c8edcfcfa1933c3706f3f94 100644 --- a/lib/kokkos/core/src/impl/Kokkos_EBO.hpp +++ b/lib/kokkos/core/src/impl/Kokkos_EBO.hpp @@ -117,21 +117,21 @@ struct EBOBaseImpl { : EBOBaseImpl(_constexpr_14_workaround_no_device_tag{}, T(std::forward(args)...)) {} - KOKKOS_FORCEINLINE_FUNCTION + KOKKOS_DEFAULTED_FUNCTION constexpr EBOBaseImpl(EBOBaseImpl const&) = default; - KOKKOS_FORCEINLINE_FUNCTION + KOKKOS_DEFAULTED_FUNCTION constexpr EBOBaseImpl(EBOBaseImpl&&) = default; - KOKKOS_FORCEINLINE_FUNCTION + KOKKOS_DEFAULTED_FUNCTION KOKKOS_CONSTEXPR_14 EBOBaseImpl& operator=(EBOBaseImpl const&) = default; - KOKKOS_FORCEINLINE_FUNCTION + KOKKOS_DEFAULTED_FUNCTION KOKKOS_CONSTEXPR_14 EBOBaseImpl& operator=(EBOBaseImpl&&) = default; - KOKKOS_FORCEINLINE_FUNCTION + KOKKOS_DEFAULTED_FUNCTION ~EBOBaseImpl() = default; KOKKOS_INLINE_FUNCTION @@ -184,21 +184,21 @@ struct EBOBaseImpl { // TODO @tasking @minor DSH noexcept in the right places? - KOKKOS_FORCEINLINE_FUNCTION + KOKKOS_DEFAULTED_FUNCTION constexpr EBOBaseImpl(EBOBaseImpl const&) = default; - KOKKOS_FORCEINLINE_FUNCTION + KOKKOS_DEFAULTED_FUNCTION constexpr EBOBaseImpl(EBOBaseImpl&&) noexcept = default; - KOKKOS_FORCEINLINE_FUNCTION + KOKKOS_DEFAULTED_FUNCTION KOKKOS_CONSTEXPR_14 EBOBaseImpl& operator=(EBOBaseImpl const&) = default; - KOKKOS_FORCEINLINE_FUNCTION + KOKKOS_DEFAULTED_FUNCTION KOKKOS_CONSTEXPR_14 EBOBaseImpl& operator=(EBOBaseImpl&&) = default; - KOKKOS_FORCEINLINE_FUNCTION + KOKKOS_DEFAULTED_FUNCTION ~EBOBaseImpl() = default; KOKKOS_INLINE_FUNCTION diff --git a/lib/kokkos/core/src/impl/Kokkos_Error.cpp b/lib/kokkos/core/src/impl/Kokkos_Error.cpp index 817c9a0581c26595d4ad41e899b128680c8917db..a42b916f8053ba94cd599657e0ddd799deb6e260 100644 --- a/lib/kokkos/core/src/impl/Kokkos_Error.cpp +++ b/lib/kokkos/core/src/impl/Kokkos_Error.cpp @@ -129,6 +129,8 @@ void Experimental::RawMemoryAllocationFailure::print_error_message( o << "cudaMallocManaged()."; break; case AllocationMechanism::CudaHostAlloc: o << "cudaHostAlloc()."; break; + case AllocationMechanism::HIPMalloc: o << "hipMalloc()."; break; + case AllocationMechanism::HIPHostMalloc: o << "hipHostMalloc()."; break; } append_additional_error_information(o); o << ")" << std::endl; diff --git a/lib/kokkos/core/src/impl/Kokkos_Error.hpp b/lib/kokkos/core/src/impl/Kokkos_Error.hpp index 44f77710426ab100aa3492a10da7583981828494..41be6737e7b61bbccbd412360af04625387335b9 100644 --- a/lib/kokkos/core/src/impl/Kokkos_Error.hpp +++ b/lib/kokkos/core/src/impl/Kokkos_Error.hpp @@ -51,6 +51,9 @@ #ifdef KOKKOS_ENABLE_CUDA #include #endif +#ifdef KOKKOS_ENABLE_HIP +#include +#endif #ifndef KOKKOS_ABORT_MESSAGE_BUFFER_SIZE #define KOKKOS_ABORT_MESSAGE_BUFFER_SIZE 2048 @@ -87,7 +90,9 @@ class RawMemoryAllocationFailure : public std::bad_alloc { IntelMMAlloc, CudaMalloc, CudaMallocManaged, - CudaHostAlloc + CudaHostAlloc, + HIPMalloc, + HIPHostMalloc }; private: @@ -124,7 +129,7 @@ class RawMemoryAllocationFailure : public std::bad_alloc { const char *what() const noexcept override { if (m_failure_mode == FailureMode::OutOfMemoryError) { return "Memory allocation error: out of memory"; - } else if (m_failure_mode == FailureMode::OutOfMemoryError) { + } else if (m_failure_mode == FailureMode::AllocationNotAligned) { return "Memory allocation error: allocation result was under-aligned"; } @@ -164,11 +169,11 @@ KOKKOS_INLINE_FUNCTION void abort(const char *const message) { #if defined(KOKKOS_ENABLE_CUDA) && defined(__CUDA_ARCH__) Kokkos::Impl::cuda_abort(message); -#else -#if !defined(KOKKOS_ENABLE_OPENMPTARGET) && !defined(__HCC_ACCELERATOR__) +#elif defined(KOKKOS_ENABLE_HIP) && defined(__HIP_DEVICE_COMPILE__) + Kokkos::Impl::hip_abort(message); +#elif !defined(KOKKOS_ENABLE_OPENMPTARGET) && !defined(__HCC_ACCELERATOR__) Kokkos::Impl::host_abort(message); #endif -#endif } } // namespace Kokkos diff --git a/lib/kokkos/core/src/impl/Kokkos_FixedBufferMemoryPool.hpp b/lib/kokkos/core/src/impl/Kokkos_FixedBufferMemoryPool.hpp index a304e8eff26ac8d62373d007ffe2c3c31d41310b..2651229a706038fe3b8cfe8033bd4d521675003e 100644 --- a/lib/kokkos/core/src/impl/Kokkos_FixedBufferMemoryPool.hpp +++ b/lib/kokkos/core/src/impl/Kokkos_FixedBufferMemoryPool.hpp @@ -126,18 +126,19 @@ class FixedBlockSizeMemoryPool actual_size) { /* forwarding ctor, must be empty */ } - KOKKOS_INLINE_FUNCTION FixedBlockSizeMemoryPool() = default; - KOKKOS_INLINE_FUNCTION FixedBlockSizeMemoryPool(FixedBlockSizeMemoryPool&&) = - default; - KOKKOS_INLINE_FUNCTION FixedBlockSizeMemoryPool( - FixedBlockSizeMemoryPool const&) = default; - KOKKOS_INLINE_FUNCTION FixedBlockSizeMemoryPool& operator=( + KOKKOS_DEFAULTED_FUNCTION FixedBlockSizeMemoryPool() = default; + KOKKOS_DEFAULTED_FUNCTION FixedBlockSizeMemoryPool( FixedBlockSizeMemoryPool&&) = default; - KOKKOS_INLINE_FUNCTION FixedBlockSizeMemoryPool& operator=( + KOKKOS_DEFAULTED_FUNCTION FixedBlockSizeMemoryPool( + FixedBlockSizeMemoryPool const&) = default; + KOKKOS_DEFAULTED_FUNCTION FixedBlockSizeMemoryPool& operator=( + FixedBlockSizeMemoryPool&&) = default; + KOKKOS_DEFAULTED_FUNCTION FixedBlockSizeMemoryPool& operator=( FixedBlockSizeMemoryPool const&) = default; KOKKOS_INLINE_FUNCTION void* allocate(size_type alloc_size) const noexcept { + (void)alloc_size; KOKKOS_EXPECTS(alloc_size <= Size); auto free_idx_counter = Kokkos::atomic_fetch_add( (volatile size_type*)&m_first_free_idx, size_type(1)); @@ -161,7 +162,7 @@ class FixedBlockSizeMemoryPool } KOKKOS_INLINE_FUNCTION - void deallocate(void* ptr, size_type alloc_size) const noexcept { + void deallocate(void* ptr, size_type /*alloc_size*/) const noexcept { // figure out which block we are auto offset = intptr_t(ptr) - intptr_t(m_first_block); @@ -250,11 +251,11 @@ public: ) : FixedBlockSizeMemoryPool(mem_space, mempool_capacity / actual_size) { /* forwarding ctor, must be empty */ } - KOKKOS_INLINE_FUNCTION FixedBlockSizeMemoryPool() = default; - KOKKOS_INLINE_FUNCTION FixedBlockSizeMemoryPool(FixedBlockSizeMemoryPool&&) = default; - KOKKOS_INLINE_FUNCTION FixedBlockSizeMemoryPool(FixedBlockSizeMemoryPool const&) = default; - KOKKOS_INLINE_FUNCTION FixedBlockSizeMemoryPool& operator=(FixedBlockSizeMemoryPool&&) = default; - KOKKOS_INLINE_FUNCTION FixedBlockSizeMemoryPool& operator=(FixedBlockSizeMemoryPool const&) = default; + KOKKOS_DEFAULTED_FUNCTION FixedBlockSizeMemoryPool() = default; + KOKKOS_DEFAULTED_FUNCTION FixedBlockSizeMemoryPool(FixedBlockSizeMemoryPool&&) = default; + KOKKOS_DEFAULTED_FUNCTION FixedBlockSizeMemoryPool(FixedBlockSizeMemoryPool const&) = default; + KOKKOS_DEFAULTED_FUNCTION FixedBlockSizeMemoryPool& operator=(FixedBlockSizeMemoryPool&&) = default; + KOKKOS_DEFAULTED_FUNCTION FixedBlockSizeMemoryPool& operator=(FixedBlockSizeMemoryPool const&) = default; KOKKOS_INLINE_FUNCTION diff --git a/lib/kokkos/core/src/impl/Kokkos_FunctorAdapter.hpp b/lib/kokkos/core/src/impl/Kokkos_FunctorAdapter.hpp index e981e903664a02d04bdff8a40da27f3108ab6abd..b777dac02178b0229e5db5f600c96aff617eb8a6 100644 --- a/lib/kokkos/core/src/impl/Kokkos_FunctorAdapter.hpp +++ b/lib/kokkos/core/src/impl/Kokkos_FunctorAdapter.hpp @@ -64,7 +64,7 @@ struct ReduceFunctorHasInit { template struct ReduceFunctorHasInit< FunctorType, - typename Impl::enable_if<0 < sizeof(&FunctorType::init)>::type> { + typename std::enable_if<0 < sizeof(&FunctorType::init)>::type> { enum { value = true }; }; @@ -76,7 +76,7 @@ struct ReduceFunctorHasJoin { template struct ReduceFunctorHasJoin< FunctorType, - typename Impl::enable_if<0 < sizeof(&FunctorType::join)>::type> { + typename std::enable_if<0 < sizeof(&FunctorType::join)>::type> { enum { value = true }; }; @@ -88,7 +88,7 @@ struct ReduceFunctorHasFinal { template struct ReduceFunctorHasFinal< FunctorType, - typename Impl::enable_if<0 < sizeof(&FunctorType::final)>::type> { + typename std::enable_if<0 < sizeof(&FunctorType::final)>::type> { enum { value = true }; }; @@ -100,18 +100,18 @@ struct ReduceFunctorHasShmemSize { template struct ReduceFunctorHasShmemSize< FunctorType, - typename Impl::enable_if<0 < sizeof(&FunctorType::team_shmem_size)>::type> { + typename std::enable_if<0 < sizeof(&FunctorType::team_shmem_size)>::type> { enum { value = true }; }; template -struct FunctorDeclaresValueType : public Impl::false_type {}; +struct FunctorDeclaresValueType : public std::false_type {}; template struct FunctorDeclaresValueType< FunctorType, ArgTag, typename Impl::enable_if_type::type> - : public Impl::true_type {}; + : public std::true_type {}; template ::value) || @@ -174,18 +174,19 @@ struct FunctorValueTraits { template struct FunctorValueTraits { - typedef typename Impl::remove_extent::type + typedef typename std::remove_extent::type value_type; typedef FunctorType functor_type; - static_assert(0 == (sizeof(value_type) % sizeof(int)), + static_assert((sizeof(value_type) < sizeof(int)) || + 0 == (sizeof(value_type) % sizeof(int)), "Reduction functor's declared value_type requires: 0 == " "sizeof(value_type) % sizeof(int)"); /* this cast to bool is needed for correctness by NVCC */ enum : bool { IsArray = static_cast( - Impl::is_array::value) + std::is_array::value) }; // If not an array then what is the sizeof(value_type) @@ -202,8 +203,8 @@ struct FunctorValueTraits KOKKOS_FORCEINLINE_FUNCTION static - typename Impl::enable_if::value && !IsArray, - unsigned>::type + typename std::enable_if::value && !IsArray, + unsigned>::type value_count(const F&) { return 1; } @@ -213,8 +214,8 @@ struct FunctorValueTraits KOKKOS_FORCEINLINE_FUNCTION static - typename Impl::enable_if::value && IsArray, - unsigned>::type + typename std::enable_if::value && IsArray, + unsigned>::type value_count(const F& f) { return f.value_count; } @@ -1412,8 +1413,10 @@ struct FunctorValueInit< // First substitution failure when FunctorType::init does not exist. // Second substitution failure when FunctorType::init is not compatible. , - decltype(FunctorValueInitFunction::enable_if( - &FunctorType::init))> { + typename std::enable_if< + !std::is_same::value, + decltype(FunctorValueInitFunction::enable_if( + &FunctorType::init))>::type> { KOKKOS_FORCEINLINE_FUNCTION static T& init(const FunctorType& f, void* p) { f.init(ArgTag(), *((T*)p)); return *((T*)p); @@ -1428,8 +1431,10 @@ struct FunctorValueInit< // First substitution failure when FunctorType::init does not exist. // Second substitution failure when FunctorType::init is not compatible , - decltype(FunctorValueInitFunction::enable_if( - &FunctorType::init))> { + typename std::enable_if< + !std::is_same::value, + decltype(FunctorValueInitFunction::enable_if( + &FunctorType::init))>::type> { KOKKOS_FORCEINLINE_FUNCTION static T* init(const FunctorType& f, void* p) { f.init(ArgTag(), (T*)p); return (T*)p; @@ -1525,7 +1530,7 @@ struct FunctorValueJoin { KOKKOS_FORCEINLINE_FUNCTION FunctorValueJoin(const FunctorType&) {} - KOKKOS_FORCEINLINE_FUNCTION static void join(const FunctorType& f, + KOKKOS_FORCEINLINE_FUNCTION static void join(const FunctorType& /*f*/, volatile void* const lhs, const volatile void* const rhs) { *((volatile T*)lhs) += *((const volatile T*)rhs); @@ -1760,8 +1765,8 @@ template struct JoinAdd { typedef ValueType value_type; - KOKKOS_INLINE_FUNCTION - JoinAdd() {} + KOKKOS_DEFAULTED_FUNCTION + JoinAdd() = default; KOKKOS_INLINE_FUNCTION void join(volatile value_type& dst, const volatile value_type& src) const { diff --git a/lib/kokkos/core/src/impl/Kokkos_FunctorAnalysis.hpp b/lib/kokkos/core/src/impl/Kokkos_FunctorAnalysis.hpp index a8f3b5042ac3b3328b2b4b2d78b7e8b168cc6e4b..827a9f346d36c41b433914773e7d4202563b0b0b 100644 --- a/lib/kokkos/core/src/impl/Kokkos_FunctorAnalysis.hpp +++ b/lib/kokkos/core/src/impl/Kokkos_FunctorAnalysis.hpp @@ -797,7 +797,7 @@ struct FunctorAnalysis { using rebind = Reducer; KOKKOS_INLINE_FUNCTION explicit constexpr Reducer( - Functor const* arg_functor = 0, ValueType* arg_value = 0) noexcept + Functor const* arg_functor = 0, ValueType* arg_value = nullptr) noexcept : m_functor(arg_functor), m_result(arg_value) {} }; }; diff --git a/lib/kokkos/core/src/impl/Kokkos_HBWSpace.cpp b/lib/kokkos/core/src/impl/Kokkos_HBWSpace.cpp index 8a83aef4c9fb04ca5c7546d232c79f2a9c810f2c..9b5bee227912b9bb0ad3ed22cf86d9234677b77a 100644 --- a/lib/kokkos/core/src/impl/Kokkos_HBWSpace.cpp +++ b/lib/kokkos/core/src/impl/Kokkos_HBWSpace.cpp @@ -136,8 +136,8 @@ void *HBWSpace::allocate(const size_t arg_alloc_size) const { case STD_MALLOC: msg << "STD_MALLOC"; break; } msg << " ]( " << arg_alloc_size << " ) FAILED"; - if (ptr == NULL) { - msg << " NULL"; + if (ptr == nullptr) { + msg << " nullptr"; } else { msg << " NOT ALIGNED " << ptr; } @@ -181,7 +181,12 @@ void SharedAllocationRecord::deallocate( } SharedAllocationRecord::~SharedAllocationRecord() { + void>::~SharedAllocationRecord() +#if defined( \ + KOKKOS_IMPL_INTEL_WORKAROUND_NOEXCEPT_SPECIFICATION_VIRTUAL_FUNCTION) + noexcept +#endif +{ #if defined(KOKKOS_ENABLE_PROFILING) if (Kokkos::Profiling::profileLibraryLoaded()) { Kokkos::Profiling::deallocateData( diff --git a/lib/kokkos/core/src/impl/Kokkos_HostBarrier.cpp b/lib/kokkos/core/src/impl/Kokkos_HostBarrier.cpp index 0b96add432f859d50a93a7aaae133379266756b4..55d70985dcd1f921d4082b507cf84d1044ad8fbb 100644 --- a/lib/kokkos/core/src/impl/Kokkos_HostBarrier.cpp +++ b/lib/kokkos/core/src/impl/Kokkos_HostBarrier.cpp @@ -92,7 +92,7 @@ void HostBarrier::impl_backoff_wait_until_equal( #endif } #else // _WIN32 - while (!try_wait()) { + while (!test_equal(ptr, v)) { #if defined(KOKKOS_ENABLE_ASM) for (int j = 0; j < num_nops; ++j) { __asm__ __volatile__("nop\n"); diff --git a/lib/kokkos/core/src/impl/Kokkos_HostBarrier.hpp b/lib/kokkos/core/src/impl/Kokkos_HostBarrier.hpp index ce7a1408a3dc742f3e32982aae9fd7e80fda7d29..4b9235ab70260e3b4a80d4bec735e033f71bf443 100644 --- a/lib/kokkos/core/src/impl/Kokkos_HostBarrier.hpp +++ b/lib/kokkos/core/src/impl/Kokkos_HostBarrier.hpp @@ -235,6 +235,7 @@ class HostBarrier { impl_backoff_wait_until_equal(ptr, v, active_wait); } #else + (void)active_wait; while (!test_equal(ptr, v)) { } #endif diff --git a/lib/kokkos/core/src/impl/Kokkos_HostSpace.cpp b/lib/kokkos/core/src/impl/Kokkos_HostSpace.cpp index 94490b83001b54c0f52eb3f5397aa026e9260fb5..59d14e539220d27615402150efd9d77e0903ee05 100644 --- a/lib/kokkos/core/src/impl/Kokkos_HostSpace.cpp +++ b/lib/kokkos/core/src/impl/Kokkos_HostSpace.cpp @@ -221,18 +221,19 @@ void *HostSpace::allocate(const size_t arg_alloc_size) const { // read write access to private memory - ptr = mmap(NULL /* address hint, if NULL OS kernel chooses address */ - , - arg_alloc_size /* size in bytes */ - , - prot /* memory protection */ - , - flags /* visibility of updates */ - , - -1 /* file descriptor */ - , - 0 /* offset */ - ); + ptr = + mmap(nullptr /* address hint, if nullptr OS kernel chooses address */ + , + arg_alloc_size /* size in bytes */ + , + prot /* memory protection */ + , + flags /* visibility of updates */ + , + -1 /* file descriptor */ + , + 0 /* offset */ + ); /* Associated reallocation: ptr = mremap( old_ptr , old_size , new_size , MREMAP_MAYMOVE ); @@ -325,7 +326,12 @@ void SharedAllocationRecord::deallocate( delete static_cast(arg_rec); } -SharedAllocationRecord::~SharedAllocationRecord() { +SharedAllocationRecord::~SharedAllocationRecord() +#if defined( \ + KOKKOS_IMPL_INTEL_WORKAROUND_NOEXCEPT_SPECIFICATION_VIRTUAL_FUNCTION) + noexcept +#endif +{ #if defined(KOKKOS_ENABLE_PROFILING) if (Kokkos::Profiling::profileLibraryLoaded()) { Kokkos::Profiling::deallocateData( @@ -397,7 +403,7 @@ SharedAllocationRecord::SharedAllocationRecord( void *SharedAllocationRecord::allocate_tracked( const Kokkos::HostSpace &arg_space, const std::string &arg_alloc_label, const size_t arg_alloc_size) { - if (!arg_alloc_size) return (void *)nullptr; + if (!arg_alloc_size) return nullptr; SharedAllocationRecord *const r = allocate(arg_space, arg_alloc_label, arg_alloc_size); @@ -409,7 +415,7 @@ void *SharedAllocationRecord::allocate_tracked( void SharedAllocationRecord::deallocate_tracked( void *const arg_alloc_ptr) { - if (arg_alloc_ptr != 0) { + if (arg_alloc_ptr != nullptr) { SharedAllocationRecord *const r = get_record(arg_alloc_ptr); RecordBase::decrement(r); @@ -437,9 +443,9 @@ SharedAllocationRecord::get_record(void *alloc_ptr) { typedef SharedAllocationRecord RecordHost; SharedAllocationHeader const *const head = - alloc_ptr ? Header::get_header(alloc_ptr) : (SharedAllocationHeader *)0; + alloc_ptr ? Header::get_header(alloc_ptr) : nullptr; RecordHost *const record = - head ? static_cast(head->m_record) : (RecordHost *)0; + head ? static_cast(head->m_record) : nullptr; if (!alloc_ptr || record->m_alloc_ptr != head) { Kokkos::Impl::throw_runtime_exception( diff --git a/lib/kokkos/core/src/impl/Kokkos_HostThreadTeam.cpp b/lib/kokkos/core/src/impl/Kokkos_HostThreadTeam.cpp index 92e9aa24b0f02ded1a3115faaec91e3bc0de8a38..2e5587e4a342c8c2b167f307f8c8b3a3215f304a 100644 --- a/lib/kokkos/core/src/impl/Kokkos_HostThreadTeam.cpp +++ b/lib/kokkos/core/src/impl/Kokkos_HostThreadTeam.cpp @@ -62,7 +62,8 @@ void HostThreadTeamData::organize_pool(HostThreadTeamData *members[], // Verify not already a member of a pool: for (int rank = 0; rank < size && ok; ++rank) { - ok = (nullptr != members[rank]) && (0 == members[rank]->m_pool_scratch); + ok = (nullptr != members[rank]) && + (nullptr == members[rank]->m_pool_scratch); } if (ok) { @@ -106,8 +107,8 @@ void HostThreadTeamData::organize_pool(HostThreadTeamData *members[], void HostThreadTeamData::disband_pool() { m_work_range.first = -1; m_work_range.second = -1; - m_pool_scratch = 0; - m_team_scratch = 0; + m_pool_scratch = nullptr; + m_team_scratch = nullptr; m_pool_rank = 0; m_pool_size = 1; m_team_base = 0; @@ -121,7 +122,7 @@ void HostThreadTeamData::disband_pool() { int HostThreadTeamData::organize_team(const int team_size) { // Pool is initialized - const bool ok_pool = 0 != m_pool_scratch; + const bool ok_pool = nullptr != m_pool_scratch; // Team is not set const bool ok_team = diff --git a/lib/kokkos/core/src/impl/Kokkos_HostThreadTeam.hpp b/lib/kokkos/core/src/impl/Kokkos_HostThreadTeam.hpp index fce665f6b156b0449ec574c3aec2cc90b961d6a8..9e4dda941b8e007bf2f50c482020323ea539dad5 100644 --- a/lib/kokkos/core/src/impl/Kokkos_HostThreadTeam.hpp +++ b/lib/kokkos/core/src/impl/Kokkos_HostThreadTeam.hpp @@ -53,7 +53,8 @@ #include #include -#include // std::numeric_limits +#include // std::numeric_limits +#include // std::max //---------------------------------------------------------------------------- //---------------------------------------------------------------------------- @@ -188,9 +189,9 @@ class HostThreadTeamData { constexpr HostThreadTeamData() noexcept : m_work_range(-1, -1), m_work_end(0), - m_scratch(0), - m_pool_scratch(0), - m_team_scratch(0), + m_scratch(nullptr), + m_pool_scratch(nullptr), + m_team_scratch(nullptr), m_pool_rank(0), m_pool_size(1), m_team_reduce(0), @@ -538,6 +539,8 @@ class HostThreadTeamMember { } #else { + (void)value; + (void)source_team_rank; Kokkos::abort("HostThreadTeamMember team_broadcast\n"); } #endif @@ -574,6 +577,9 @@ class HostThreadTeamMember { } #else { + (void)f; + (void)value; + (void)source_team_rank; Kokkos::abort("HostThreadTeamMember team_broadcast\n"); } #endif @@ -640,6 +646,8 @@ class HostThreadTeamMember { } #else { + (void)reducer; + (void)contribution; Kokkos::abort("HostThreadTeamMember team_reduce\n"); } #endif @@ -693,8 +701,8 @@ class HostThreadTeamMember { #endif*/ template - KOKKOS_INLINE_FUNCTION T team_scan(T const& value, T* const global = 0) const - noexcept + KOKKOS_INLINE_FUNCTION T team_scan(T const& value, + T* const global = nullptr) const noexcept #if defined(KOKKOS_ACTIVE_EXECUTION_MEMORY_SPACE_HOST) { if (0 != m_data.m_team_rank) { @@ -751,6 +759,8 @@ class HostThreadTeamMember { } #else { + (void)value; + (void)global; Kokkos::abort("HostThreadTeamMember team_scan\n"); return T(); } diff --git a/lib/kokkos/core/src/impl/Kokkos_LIFO.hpp b/lib/kokkos/core/src/impl/Kokkos_LIFO.hpp index 67e9af5c402b963bd2db7dd9ca69e3f4d0c3630e..683c5c9b18ba5b8c802eebf5cdcc62cac42bf616 100644 --- a/lib/kokkos/core/src/impl/Kokkos_LIFO.hpp +++ b/lib/kokkos/core/src/impl/Kokkos_LIFO.hpp @@ -48,8 +48,7 @@ #define KOKKOS_IMPL_LIFO_HPP #include -#ifdef KOKKOS_ENABLE_TASKDAG // Note: implies CUDA_VERSION >= 8000 if using - // CUDA +#ifdef KOKKOS_ENABLE_TASKDAG #include @@ -305,7 +304,7 @@ class SingleConsumeOperationLIFO : private LockBasedLIFOCommon { public: using value_type = typename base_t::value_type; // = T - KOKKOS_INLINE_FUNCTION + KOKKOS_DEFAULTED_FUNCTION SingleConsumeOperationLIFO() noexcept = default; SingleConsumeOperationLIFO(SingleConsumeOperationLIFO const&) = delete; @@ -314,7 +313,7 @@ class SingleConsumeOperationLIFO : private LockBasedLIFOCommon { delete; SingleConsumeOperationLIFO& operator=(SingleConsumeOperationLIFO&&) = delete; - KOKKOS_INLINE_FUNCTION + KOKKOS_DEFAULTED_FUNCTION ~SingleConsumeOperationLIFO() = default; KOKKOS_INLINE_FUNCTION diff --git a/lib/kokkos/core/src/impl/Kokkos_LinkedListNode.hpp b/lib/kokkos/core/src/impl/Kokkos_LinkedListNode.hpp index 1b7918ed78895d718e13a1cab73079dadb21d616..79aeca5da0691264c4cb215f62e17bdb8dbe95e1 100644 --- a/lib/kokkos/core/src/impl/Kokkos_LinkedListNode.hpp +++ b/lib/kokkos/core/src/impl/Kokkos_LinkedListNode.hpp @@ -48,8 +48,7 @@ #define KOKKOS_IMPL_LINKEDLISTNODE_HPP #include -#ifdef KOKKOS_ENABLE_TASKDAG // Note: implies CUDA_VERSION >= 8000 if using - // CUDA +#ifdef KOKKOS_ENABLE_TASKDAG #include diff --git a/lib/kokkos/core/src/impl/Kokkos_MemoryPoolAllocator.hpp b/lib/kokkos/core/src/impl/Kokkos_MemoryPoolAllocator.hpp index 54f91eb68d09a308b3a19b5b9835ea0ba1ae04ae..2218405766cacb1215604ff7e7cb749b509be56e 100644 --- a/lib/kokkos/core/src/impl/Kokkos_MemoryPoolAllocator.hpp +++ b/lib/kokkos/core/src/impl/Kokkos_MemoryPoolAllocator.hpp @@ -65,17 +65,17 @@ class MemoryPoolAllocator { memory_pool m_pool; public: - KOKKOS_INLINE_FUNCTION + KOKKOS_DEFAULTED_FUNCTION MemoryPoolAllocator() = default; - KOKKOS_INLINE_FUNCTION + KOKKOS_DEFAULTED_FUNCTION MemoryPoolAllocator(MemoryPoolAllocator const&) = default; - KOKKOS_INLINE_FUNCTION + KOKKOS_DEFAULTED_FUNCTION MemoryPoolAllocator(MemoryPoolAllocator&&) = default; - KOKKOS_INLINE_FUNCTION + KOKKOS_DEFAULTED_FUNCTION MemoryPoolAllocator& operator=(MemoryPoolAllocator const&) = default; - KOKKOS_INLINE_FUNCTION + KOKKOS_DEFAULTED_FUNCTION MemoryPoolAllocator& operator=(MemoryPoolAllocator&&) = default; - KOKKOS_INLINE_FUNCTION + KOKKOS_DEFAULTED_FUNCTION ~MemoryPoolAllocator() = default; KOKKOS_INLINE_FUNCTION diff --git a/lib/kokkos/core/src/impl/Kokkos_Memory_Fence.hpp b/lib/kokkos/core/src/impl/Kokkos_Memory_Fence.hpp index f8bef72b77f405997b9d9416f375e0028d9a2fb0..eae14a92d581876f96dad75d7f9c727dfccdf074 100644 --- a/lib/kokkos/core/src/impl/Kokkos_Memory_Fence.hpp +++ b/lib/kokkos/core/src/impl/Kokkos_Memory_Fence.hpp @@ -55,6 +55,8 @@ void memory_fence() { __threadfence(); #elif defined(KOKKOS_ENABLE_ROCM_ATOMICS) amp_barrier(CLK_LOCAL_MEM_FENCE | CLK_GLOBAL_MEM_FENCE); +#elif defined(KOKKOS_ENABLE_HIP_ATOMICS) + __threadfence(); #elif defined(KOKKOS_ENABLE_ASM) && defined(KOKKOS_ENABLE_ISA_X86_64) asm volatile("mfence" ::: "memory"); #elif defined(KOKKOS_ENABLE_GNU_ATOMICS) || \ diff --git a/lib/kokkos/core/src/impl/Kokkos_MultipleTaskQueue.hpp b/lib/kokkos/core/src/impl/Kokkos_MultipleTaskQueue.hpp index 675547ba5e86dd58beb28f6179b25be69f5f1bec..fe78cfbacc632d353844a5cb17f89a5d5ba067ff 100644 --- a/lib/kokkos/core/src/impl/Kokkos_MultipleTaskQueue.hpp +++ b/lib/kokkos/core/src/impl/Kokkos_MultipleTaskQueue.hpp @@ -125,7 +125,7 @@ struct MultipleTaskQueueTeamEntry { KOKKOS_INLINE_FUNCTION OptionalRef _pop_failed_insertion( int priority, TaskType type, typename std::enable_if< - task_queue_traits::ready_queue_insertion_may_fail and + task_queue_traits::ready_queue_insertion_may_fail && std::is_void<_always_void>::value, void*>::type = nullptr) { auto* rv_ptr = m_failed_heads[priority][(int)type]; @@ -142,9 +142,9 @@ struct MultipleTaskQueueTeamEntry { template KOKKOS_INLINE_FUNCTION OptionalRef _pop_failed_insertion( - int priority, TaskType type, + int /*priority*/, TaskType /*type*/, typename std::enable_if< - not task_queue_traits::ready_queue_insertion_may_fail and + !task_queue_traits::ready_queue_insertion_may_fail && std::is_void<_always_void>::value, void*>::type = nullptr) { return OptionalRef{nullptr}; @@ -181,13 +181,13 @@ struct MultipleTaskQueueTeamEntry { auto return_value = OptionalRef{}; for (int i_priority = 0; i_priority < NumPriorities; ++i_priority) { return_value = _pop_failed_insertion(i_priority, TaskTeam); - if (not return_value) + if (!return_value) return_value = m_ready_queues[i_priority][TaskTeam].pop(); if (return_value) return return_value; // Check for a single task with this priority return_value = _pop_failed_insertion(i_priority, TaskSingle); - if (not return_value) + if (!return_value) return_value = m_ready_queues[i_priority][TaskSingle].pop(); if (return_value) return return_value; } @@ -203,7 +203,7 @@ struct MultipleTaskQueueTeamEntry { KOKKOS_INLINE_FUNCTION void do_handle_failed_insertion( runnable_task_base_type&& task, typename std::enable_if< - task_queue_traits::ready_queue_insertion_may_fail and + task_queue_traits::ready_queue_insertion_may_fail && std::is_void<_always_void>::value, void*>::type = nullptr) { // failed insertions, if they happen, must be from the only thread that @@ -217,9 +217,9 @@ struct MultipleTaskQueueTeamEntry { template KOKKOS_INLINE_FUNCTION void do_handle_failed_insertion( - runnable_task_base_type&& task, + runnable_task_base_type&& /*task*/, typename std::enable_if< - not task_queue_traits::ready_queue_insertion_may_fail and + !task_queue_traits::ready_queue_insertion_may_fail && std::is_void<_always_void>::value, void*>::type = nullptr) { Kokkos::abort("should be unreachable!"); @@ -229,7 +229,7 @@ struct MultipleTaskQueueTeamEntry { KOKKOS_INLINE_FUNCTION void flush_failed_insertions( int priority, int task_type, typename std::enable_if< - task_queue_traits::ready_queue_insertion_may_fail and + task_queue_traits::ready_queue_insertion_may_fail && std::is_void<_always_void>::value, // just to make this dependent // on template parameter int>::type = 0) { @@ -258,7 +258,7 @@ struct MultipleTaskQueueTeamEntry { KOKKOS_INLINE_FUNCTION void flush_failed_insertions( int, int, typename std::enable_if< - not task_queue_traits::ready_queue_insertion_may_fail and + !task_queue_traits::ready_queue_insertion_may_fail && std::is_void<_always_void>::value, // just to make this dependent // on template parameter int>::type = 0) {} @@ -335,22 +335,22 @@ class MultipleTaskQueue final constexpr explicit SchedulerInfo(team_queue_id_t association) noexcept : team_association(association) {} - KOKKOS_INLINE_FUNCTION + KOKKOS_DEFAULTED_FUNCTION SchedulerInfo() = default; - KOKKOS_INLINE_FUNCTION + KOKKOS_DEFAULTED_FUNCTION SchedulerInfo(SchedulerInfo const&) = default; - KOKKOS_INLINE_FUNCTION + KOKKOS_DEFAULTED_FUNCTION SchedulerInfo(SchedulerInfo&&) = default; - KOKKOS_INLINE_FUNCTION + KOKKOS_DEFAULTED_FUNCTION SchedulerInfo& operator=(SchedulerInfo const&) = default; - KOKKOS_INLINE_FUNCTION + KOKKOS_DEFAULTED_FUNCTION SchedulerInfo& operator=(SchedulerInfo&&) = default; - KOKKOS_INLINE_FUNCTION + KOKKOS_DEFAULTED_FUNCTION ~SchedulerInfo() = default; }; @@ -438,7 +438,7 @@ class MultipleTaskQueue final return_value = team_queue_info.pop_ready_task(); - if (not return_value) { + if (!return_value) { // loop through the rest of the teams and try to steal for (auto isteal = (team_association + 1) % this->n_queues(); isteal != team_association; @@ -484,32 +484,32 @@ class MultipleTaskQueue final // Provide a sensible default that can be overridden KOKKOS_INLINE_FUNCTION void update_scheduling_info_from_completed_predecessor( - runnable_task_base_type& ready_task, - runnable_task_base_type const& predecessor) const { + runnable_task_base_type& /*ready_task*/, + runnable_task_base_type const& /*predecessor*/) const { // Do nothing; we're using the extra storage for the failure linked list } // Provide a sensible default that can be overridden KOKKOS_INLINE_FUNCTION void update_scheduling_info_from_completed_predecessor( - aggregate_task_type& aggregate, - runnable_task_base_type const& predecessor) const { + aggregate_task_type& /*aggregate*/, + runnable_task_base_type const& /*predecessor*/) const { // Do nothing; we're using the extra storage for the failure linked list } // Provide a sensible default that can be overridden KOKKOS_INLINE_FUNCTION void update_scheduling_info_from_completed_predecessor( - aggregate_task_type& aggregate, - aggregate_task_type const& predecessor) const { + aggregate_task_type& /*aggregate*/, + aggregate_task_type const& /*predecessor*/) const { // Do nothing; we're using the extra storage for the failure linked list } // Provide a sensible default that can be overridden KOKKOS_INLINE_FUNCTION void update_scheduling_info_from_completed_predecessor( - runnable_task_base_type& ready_task, - aggregate_task_type const& predecessor) const { + runnable_task_base_type& /*ready_task*/, + aggregate_task_type const& /*predecessor*/) const { // Do nothing; we're using the extra storage for the failure linked list } diff --git a/lib/kokkos/core/src/impl/Kokkos_OldMacros.hpp b/lib/kokkos/core/src/impl/Kokkos_OldMacros.hpp index 6b1e8b63cceff7fd1ba7b29aa18c10375591ce6d..fbb921d7f260aa291591459e1a165b307b7ce96f 100644 --- a/lib/kokkos/core/src/impl/Kokkos_OldMacros.hpp +++ b/lib/kokkos/core/src/impl/Kokkos_OldMacros.hpp @@ -245,12 +245,6 @@ #endif #endif -#ifdef KOKKOS_HAVE_QTHREADS -#ifndef KOKKOS_ENABLE_QTHREADS -#define KOKKOS_ENABLE_QTHREADS KOKKOS_HAVE_QTHREADS -#endif -#endif - #ifdef KOKKOS_HAVE_SERIAL #ifndef KOKKOS_ENABLE_SERIAL #define KOKKOS_ENABLE_SERIAL KOKKOS_HAVE_SERIAL @@ -474,10 +468,6 @@ #define KOKKOS_HAVE_PTHREAD 1 #endif -#if (!defined(KOKKOS_HAVE_QTHREADS)) && defined(KOKKOS_ENABLE_QTHREADS) -#define KOKKOS_HAVE_QTHREADS 1 -#endif - #if (!defined(KOKKOS_HAVE_SERIAL)) && defined(KOKKOS_ENABLE_SERIAL) #define KOKKOS_HAVE_SERIAL 1 #endif diff --git a/lib/kokkos/core/src/impl/Kokkos_OptionalRef.hpp b/lib/kokkos/core/src/impl/Kokkos_OptionalRef.hpp index 668e7c09161409298b84e840bdad3f77259af68c..12f6c9f5fdb42e8383f3c9b174ea17c28ff04fe7 100644 --- a/lib/kokkos/core/src/impl/Kokkos_OptionalRef.hpp +++ b/lib/kokkos/core/src/impl/Kokkos_OptionalRef.hpp @@ -69,17 +69,22 @@ struct OptionalRef { public: using value_type = T; - KOKKOS_INLINE_FUNCTION + KOKKOS_DEFAULTED_FUNCTION OptionalRef() = default; - KOKKOS_INLINE_FUNCTION + KOKKOS_DEFAULTED_FUNCTION OptionalRef(OptionalRef const&) = default; - KOKKOS_INLINE_FUNCTION + KOKKOS_DEFAULTED_FUNCTION OptionalRef(OptionalRef&&) = default; KOKKOS_INLINE_FUNCTION - OptionalRef& operator=(OptionalRef const&) = default; + // MSVC requires that this copy constructor is not defaulted + // if there exists a (non-defaulted) volatile one. + OptionalRef& operator=(OptionalRef const& other) noexcept { + m_value = other.m_value; + return *this; + } KOKKOS_INLINE_FUNCTION // Can't return a reference to volatile OptionalRef, since GCC issues a @@ -88,10 +93,10 @@ struct OptionalRef { m_value = other.m_value; } - KOKKOS_INLINE_FUNCTION + KOKKOS_DEFAULTED_FUNCTION OptionalRef& operator=(OptionalRef&&) = default; - KOKKOS_INLINE_FUNCTION + KOKKOS_DEFAULTED_FUNCTION ~OptionalRef() = default; KOKKOS_INLINE_FUNCTION diff --git a/lib/kokkos/core/src/impl/Kokkos_Profiling_DeviceInfo.hpp b/lib/kokkos/core/src/impl/Kokkos_Profiling_DeviceInfo.hpp index e35ff84e9787be40ad36a1a74e68afe1e651cdd9..51d1446ef5cde325eac33af8fb923288218676dc 100644 --- a/lib/kokkos/core/src/impl/Kokkos_Profiling_DeviceInfo.hpp +++ b/lib/kokkos/core/src/impl/Kokkos_Profiling_DeviceInfo.hpp @@ -1,45 +1,45 @@ /* -//@HEADER -// ************************************************************************ -// -// Kokkos v. 3.0 + //@HEADER + // ************************************************************************ + // + // Kokkos v. 3.0 // Copyright (2020) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). -// -// Under the terms of Contract DE-NA0003525 with NTESS, -// the U.S. Government retains certain rights in this software. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Christian R. Trott (crtrott@sandia.gov) -// -// ************************************************************************ -//@HEADER + // + // Under the terms of Contract DE-NA0003525 with NTESS, + // the U.S. Government retains certain rights in this software. + // + // Redistribution and use in source and binary forms, with or without + // modification, are permitted provided that the following conditions are + // met: + // + // 1. Redistributions of source code must retain the above copyright + // notice, this list of conditions and the following disclaimer. + // + // 2. Redistributions in binary form must reproduce the above copyright + // notice, this list of conditions and the following disclaimer in the + // documentation and/or other materials provided with the distribution. + // + // 3. Neither the name of the Corporation nor the names of the + // contributors may be used to endorse or promote products derived from + // this software without specific prior written permission. + // + // THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY + // EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + // PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE + // CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + // PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + // LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + // NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + // + // Questions? Contact Christian R. Trott (crtrott@sandia.gov) + // + // ************************************************************************ + //@HEADER */ #ifndef KOKKOSP_DEVICE_INFO_HPP diff --git a/lib/kokkos/core/src/impl/Kokkos_Profiling_Interface.cpp b/lib/kokkos/core/src/impl/Kokkos_Profiling_Interface.cpp index a069a695fc4e7fec79c02c489716e69d623a9c4d..cf52caea90582f6f4aea85a2e8f1e991c94bde4e 100644 --- a/lib/kokkos/core/src/impl/Kokkos_Profiling_Interface.cpp +++ b/lib/kokkos/core/src/impl/Kokkos_Profiling_Interface.cpp @@ -1,46 +1,46 @@ /* -//@HEADER -// ************************************************************************ -// -// Kokkos v. 3.0 + //@HEADER + // ************************************************************************ + // + // Kokkos v. 3.0 // Copyright (2020) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). -// -// Under the terms of Contract DE-NA0003525 with NTESS, -// the U.S. Government retains certain rights in this software. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Christian R. Trott (crtrott@sandia.gov) -// -// ************************************************************************ -//@HEADER -*/ + // + // Under the terms of Contract DE-NA0003525 with NTESS, + // the U.S. Government retains certain rights in this software. + // + // Redistribution and use in source and binary forms, with or without + // modification, are permitted provided that the following conditions are + // met: + // + // 1. Redistributions of source code must retain the above copyright + // notice, this list of conditions and the following disclaimer. + // + // 2. Redistributions in binary form must reproduce the above copyright + // notice, this list of conditions and the following disclaimer in the + // documentation and/or other materials provided with the distribution. + // + // 3. Neither the name of the Corporation nor the names of the + // contributors may be used to endorse or promote products derived from + // this software without specific prior written permission. + // + // THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY + // EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + // PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE + // CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + // PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + // LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + // NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + // + // Questions? Contact Christian R. Trott (crtrott@sandia.gov) + // + // ************************************************************************ + //@HEADER + */ #include diff --git a/lib/kokkos/core/src/impl/Kokkos_Profiling_Interface.hpp b/lib/kokkos/core/src/impl/Kokkos_Profiling_Interface.hpp index ac37401e1080fcedbbac1d01ac52860699f82ea5..df17501ff40af1801962a1dfb1f4d1cd177e2e8c 100644 --- a/lib/kokkos/core/src/impl/Kokkos_Profiling_Interface.hpp +++ b/lib/kokkos/core/src/impl/Kokkos_Profiling_Interface.hpp @@ -1,46 +1,46 @@ /* -//@HEADER -// ************************************************************************ -// -// Kokkos v. 3.0 + //@HEADER + // ************************************************************************ + // + // Kokkos v. 3.0 // Copyright (2020) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). -// -// Under the terms of Contract DE-NA0003525 with NTESS, -// the U.S. Government retains certain rights in this software. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Christian R. Trott (crtrott@sandia.gov) -// -// ************************************************************************ -//@HEADER -*/ + // + // Under the terms of Contract DE-NA0003525 with NTESS, + // the U.S. Government retains certain rights in this software. + // + // Redistribution and use in source and binary forms, with or without + // modification, are permitted provided that the following conditions are + // met: + // + // 1. Redistributions of source code must retain the above copyright + // notice, this list of conditions and the following disclaimer. + // + // 2. Redistributions in binary form must reproduce the above copyright + // notice, this list of conditions and the following disclaimer in the + // documentation and/or other materials provided with the distribution. + // + // 3. Neither the name of the Corporation nor the names of the + // contributors may be used to endorse or promote products derived from + // this software without specific prior written permission. + // + // THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY + // EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + // PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE + // CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + // PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + // LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + // NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + // + // Questions? Contact Christian R. Trott (crtrott@sandia.gov) + // + // ************************************************************************ + //@HEADER + */ #ifndef KOKKOSP_INTERFACE_HPP #define KOKKOSP_INTERFACE_HPP @@ -54,7 +54,37 @@ #include #include +// NOTE: in this Kokkos::Profiling block, do not define anything that shouldn't +// exist should Profiling be disabled + +namespace Kokkos { +namespace Profiling { +namespace Experimental { +enum struct DeviceType { + Serial, + OpenMP, + Cuda, + HIP, + OpenMPTarget, + HPX, + Threads +}; +template +struct DeviceTypeTraits; + +constexpr const size_t device_type_bits = 8; +constexpr const size_t instance_bits = 24; +template +inline uint32_t device_id(ExecutionSpace const& space) noexcept { + auto device_id = static_cast(DeviceTypeTraits::id); + return (device_id << instance_bits) + space.impl_instance_id(); +} +} // namespace Experimental +} // namespace Profiling +} // end namespace Kokkos + #if defined(KOKKOS_ENABLE_PROFILING) +// We check at configure time that libdl is available. #include #include diff --git a/lib/kokkos/core/src/impl/Kokkos_Serial.cpp b/lib/kokkos/core/src/impl/Kokkos_Serial.cpp index 40aeaa1b7a9a6d5259bbd05e9f25e64b17d262f4..b39f9dfeea9dca5e94062e635d6cd6ce6d3036a8 100644 --- a/lib/kokkos/core/src/impl/Kokkos_Serial.cpp +++ b/lib/kokkos/core/src/impl/Kokkos_Serial.cpp @@ -192,7 +192,7 @@ void Serial::impl_finalize() space.deallocate(Impl::g_serial_thread_team_data.scratch_buffer(), Impl::g_serial_thread_team_data.scratch_bytes()); - Impl::g_serial_thread_team_data.scratch_assign((void*)0, 0, 0, 0, 0, 0); + Impl::g_serial_thread_team_data.scratch_assign(nullptr, 0, 0, 0, 0, 0); } #if defined(KOKKOS_ENABLE_PROFILING) diff --git a/lib/kokkos/core/src/impl/Kokkos_Serial_Task.hpp b/lib/kokkos/core/src/impl/Kokkos_Serial_Task.hpp index 6871e4f14a4d80290a8a4e33bd0880f73f384fb5..3ac3899acaf9f3695025472fc5f02cb0708f64fb 100644 --- a/lib/kokkos/core/src/impl/Kokkos_Serial_Task.hpp +++ b/lib/kokkos/core/src/impl/Kokkos_Serial_Task.hpp @@ -92,7 +92,7 @@ class TaskQueueSpecialization > { auto current_task = OptionalRef(nullptr); - while (not queue.is_done()) { + while (!queue.is_done()) { // Each team lead attempts to acquire either a thread team task // or a single thread task for the team. diff --git a/lib/kokkos/core/src/impl/Kokkos_SharedAlloc.cpp b/lib/kokkos/core/src/impl/Kokkos_SharedAlloc.cpp index 3688f069e56e0d8ec457ca30b9e8e31faf41c626..6a054f73a19f265a6abcdcb094638f126020ba63 100644 --- a/lib/kokkos/core/src/impl/Kokkos_SharedAlloc.cpp +++ b/lib/kokkos/core/src/impl/Kokkos_SharedAlloc.cpp @@ -47,7 +47,8 @@ namespace Kokkos { namespace Impl { -__thread int SharedAllocationRecord::t_tracking_enabled = 1; +KOKKOS_THREAD_LOCAL int SharedAllocationRecord::t_tracking_enabled = + 1; #ifdef KOKKOS_DEBUG bool SharedAllocationRecord::is_sane( @@ -100,7 +101,7 @@ bool SharedAllocationRecord::is_sane( reinterpret_cast(rec->m_next), reinterpret_cast(rec->m_prev), reinterpret_cast( - rec->m_next != NULL ? rec->m_next->m_prev : NULL), + rec->m_next != nullptr ? rec->m_next->m_prev : nullptr), reinterpret_cast(rec->m_prev != rec->m_root ? rec->m_prev->m_next : root_next)); @@ -186,7 +187,7 @@ SharedAllocationRecord::SharedAllocationRecord( #endif , m_count(0) { - if (0 != arg_alloc_ptr) { + if (nullptr != arg_alloc_ptr) { #ifdef KOKKOS_DEBUG // Insert into the root double-linked list for tracking // @@ -197,7 +198,7 @@ SharedAllocationRecord::SharedAllocationRecord( m_prev = m_root; static constexpr SharedAllocationRecord* zero = nullptr; - // Read root->m_next and lock by setting to NULL + // Read root->m_next and lock by setting to nullptr while ((m_next = Kokkos::atomic_exchange(&m_root->m_next, zero)) == nullptr) ; @@ -214,7 +215,7 @@ SharedAllocationRecord::SharedAllocationRecord( } else { Kokkos::Impl::throw_runtime_exception( - "Kokkos::Impl::SharedAllocationRecord given NULL allocation"); + "Kokkos::Impl::SharedAllocationRecord given nullptr allocation"); } } @@ -288,7 +289,7 @@ SharedAllocationRecord* SharedAllocationRecord< function_type d = arg_record->m_dealloc; (*d)(arg_record); - arg_record = 0; + arg_record = nullptr; } else if (old_count < 1) { // Error fprintf(stderr, "Kokkos::Impl::SharedAllocationRecord '%s' failed decrement count " diff --git a/lib/kokkos/core/src/impl/Kokkos_SharedAlloc.hpp b/lib/kokkos/core/src/impl/Kokkos_SharedAlloc.hpp index b68c0834c913f2ea653ae7d2a1b82722821332d9..6e954e8f2710f4390efa23f1ab962dae607c308f 100644 --- a/lib/kokkos/core/src/impl/Kokkos_SharedAlloc.hpp +++ b/lib/kokkos/core/src/impl/Kokkos_SharedAlloc.hpp @@ -115,7 +115,7 @@ class SharedAllocationRecord { SharedAllocationHeader* arg_alloc_ptr, size_t arg_alloc_size, function_type arg_dealloc); private: - static __thread int t_tracking_enabled; + static KOKKOS_THREAD_LOCAL int t_tracking_enabled; public: virtual std::string get_label() const { return std::string("Unmanaged"); } @@ -132,7 +132,7 @@ class SharedAllocationRecord { */ static void tracking_enable() { t_tracking_enabled = 1; } - virtual ~SharedAllocationRecord() {} + virtual ~SharedAllocationRecord() = default; SharedAllocationRecord() : m_alloc_ptr(nullptr), @@ -245,6 +245,9 @@ class SharedAllocationRecord #if defined(KOKKOS_ACTIVE_EXECUTION_MEMORY_SPACE_HOST) return new SharedAllocationRecord(arg_space, arg_label, arg_alloc); #else + (void)arg_space; + (void)arg_label; + (void)arg_alloc; return (SharedAllocationRecord*)0; #endif } diff --git a/lib/kokkos/core/src/impl/Kokkos_SimpleTaskScheduler.hpp b/lib/kokkos/core/src/impl/Kokkos_SimpleTaskScheduler.hpp index f01bdce17b5f5feee9056ec8410d30cfa2689bb3..a01b22e4e9bd0c99138b65236abf8d378bdb06f5 100644 --- a/lib/kokkos/core/src/impl/Kokkos_SimpleTaskScheduler.hpp +++ b/lib/kokkos/core/src/impl/Kokkos_SimpleTaskScheduler.hpp @@ -226,13 +226,13 @@ class SimpleTaskScheduler } template - KOKKOS_FUNCTION - future_type_for_functor::type> - _spawn_impl( - DepTaskType arg_predecessor_task, TaskPriority arg_priority, - typename runnable_task_base_type::function_type apply_function_ptr, - typename runnable_task_base_type::destroy_type destroy_function_ptr, - FunctorType&& functor) { + KOKKOS_FUNCTION future_type_for_functor< + typename std::decay::type> + _spawn_impl( + DepTaskType arg_predecessor_task, TaskPriority arg_priority, + typename runnable_task_base_type::function_type apply_function_ptr, + typename runnable_task_base_type::destroy_type /*destroy_function_ptr*/, + FunctorType&& functor) { KOKKOS_EXPECTS(m_queue != nullptr); using functor_future_type = @@ -445,7 +445,7 @@ class SimpleTaskScheduler KOKKOS_EXPECTS(!task.get_respawn_flag()); task.set_priority(priority); - KOKKOS_ASSERT(not task.has_predecessor()); + KOKKOS_ASSERT(!task.has_predecessor()); task.set_respawn_flag(true); } diff --git a/lib/kokkos/core/src/impl/Kokkos_SingleTaskQueue.hpp b/lib/kokkos/core/src/impl/Kokkos_SingleTaskQueue.hpp index 8c149e978f7985fce3b59800c32aa4bbe6645993..a0eccffb627f39f1810978aa0d3ab25c9458e4e8 100644 --- a/lib/kokkos/core/src/impl/Kokkos_SingleTaskQueue.hpp +++ b/lib/kokkos/core/src/impl/Kokkos_SingleTaskQueue.hpp @@ -154,7 +154,7 @@ class SingleTaskQueue KOKKOS_FUNCTION OptionalRef pop_ready_task( - team_scheduler_info_type const& info) { + team_scheduler_info_type const& /*info*/) { OptionalRef return_value; // always loop in order of priority first, then prefer team tasks over // single tasks diff --git a/lib/kokkos/core/src/impl/Kokkos_Stacktrace.cpp b/lib/kokkos/core/src/impl/Kokkos_Stacktrace.cpp index 582f6979363cd0d63689bd323affb4bb3e184575..c0c1fdf6be7e2024aa92692b21b4d0996e370bca 100644 --- a/lib/kokkos/core/src/impl/Kokkos_Stacktrace.cpp +++ b/lib/kokkos/core/src/impl/Kokkos_Stacktrace.cpp @@ -18,7 +18,7 @@ namespace Kokkos { namespace Impl { #ifndef KOKKOS_IMPL_ENABLE_STACKTRACE int backtrace(void**, int) { return 0; } -char** backtrace_symbols(void* const*, int) { return NULL; } +char** backtrace_symbols(void* const*, int) { return nullptr; } #endif std::string demangle(const std::string& name) { diff --git a/lib/kokkos/core/src/impl/Kokkos_TaskBase.hpp b/lib/kokkos/core/src/impl/Kokkos_TaskBase.hpp index e3de5d0eb9a13a32ca9317d83f17b9dabf41428c..8078c68dbd1bc2a36eb6ffc990faea75f20780a6 100644 --- a/lib/kokkos/core/src/impl/Kokkos_TaskBase.hpp +++ b/lib/kokkos/core/src/impl/Kokkos_TaskBase.hpp @@ -167,11 +167,7 @@ class TaskBase { TaskBase& operator=(TaskBase&&) = delete; TaskBase& operator=(const TaskBase&) = delete; -#ifdef KOKKOS_CUDA_9_DEFAULTED_BUG_WORKAROUND - KOKKOS_INLINE_FUNCTION ~TaskBase(){}; -#else - KOKKOS_INLINE_FUNCTION ~TaskBase() = default; -#endif + KOKKOS_DEFAULTED_FUNCTION ~TaskBase() = default; KOKKOS_INLINE_FUNCTION constexpr TaskBase() : m_apply(nullptr), @@ -211,7 +207,7 @@ class TaskBase { Kokkos::abort("TaskScheduler ERROR: resetting task dependence"); } - if (0 != dep) { + if (nullptr != dep) { // The future may be destroyed upon returning from this call // so increment reference count to track this assignment. Kokkos::atomic_increment(&(dep->m_ref_count)); @@ -226,7 +222,44 @@ class TaskBase { } }; -static_assert(sizeof(TaskBase) == 48, "Verifying expected sizeof(TaskBase)"); +//------------------------------------------------------------------------------ +// {{{2 + +// Workaround: some compilers implement int16_t as 4 bytes, so the size might +// not actually be 48 bytes. +// There's not a lot of reason to keep checking this here; the program will +// work fine if this isn't true. I think this check was originally here to +// emphasize the fact that adding to the size of TaskBase could have a +// significant performance penalty, since doing so could substantially decrease +// the number of full task types that fit into a cache line. We'll leave it +// here for now, though, since we're probably going to be ripping all of the +// old TaskBase stuff out eventually anyway. +constexpr size_t unpadded_task_base_size = 44 + 2 * sizeof(int16_t); +// don't forget padding: +constexpr size_t task_base_misalignment = + unpadded_task_base_size % alignof(void*); +constexpr size_t task_base_padding_size = + (alignof(void*) - task_base_misalignment) % alignof(void*); +constexpr size_t expected_task_base_size = + unpadded_task_base_size + task_base_padding_size; + +// Produce a more readable compiler error message than the plain static assert +template +struct verify_task_base_size_is_48_note_actual_size_is_ {}; +template <> +struct verify_task_base_size_is_48_note_actual_size_is_< + expected_task_base_size> { + using type = int; +}; +static constexpr + typename verify_task_base_size_is_48_note_actual_size_is_::type verify = {}; + +static_assert(sizeof(TaskBase) == expected_task_base_size, + "Verifying expected sizeof(TaskBase)"); + +// end Verify the size of TaskBase is as expected }}}2 +//------------------------------------------------------------------------------ } /* namespace Impl */ } /* namespace Kokkos */ diff --git a/lib/kokkos/core/src/impl/Kokkos_TaskNode.hpp b/lib/kokkos/core/src/impl/Kokkos_TaskNode.hpp index 1ea7fc2049a722c8f965616c44517ce0c91b08c3..42afa93cdcc4db4f4c0223d7b85f5edb8256ee31 100644 --- a/lib/kokkos/core/src/impl/Kokkos_TaskNode.hpp +++ b/lib/kokkos/core/src/impl/Kokkos_TaskNode.hpp @@ -308,7 +308,7 @@ class TaskNode template KOKKOS_INLINE_FUNCTION void consume_wait_queue(Function&& f) { - KOKKOS_EXPECTS(not m_wait_queue.is_consumed()); + KOKKOS_EXPECTS(!m_wait_queue.is_consumed()); m_wait_queue.consume(std::forward(f)); } @@ -620,7 +620,7 @@ class alignas(16) RunnableTask ~RunnableTask() = delete; KOKKOS_INLINE_FUNCTION - void update_scheduling_info(member_type& member) { + void update_scheduling_info(member_type& /*member*/) { // TODO @tasking @generalization DSH call a queue-specific hook here; for // now, this info is already updated elsewhere this->scheduling_info() = // member.scheduler().scheduling_info(); @@ -639,7 +639,7 @@ class alignas(16) RunnableTask this->functor_type::operator()(*member, *val); } - KOKKOS_FUNCTION static void destroy(task_base_type* root) { + KOKKOS_FUNCTION static void destroy(task_base_type* /*root*/) { // TaskResult::destroy(root); } diff --git a/lib/kokkos/core/src/impl/Kokkos_TaskPolicyData.hpp b/lib/kokkos/core/src/impl/Kokkos_TaskPolicyData.hpp index c5b8c2fc686f4365f506149ef2293408ac734de1..09113628a76f8c9282ae8d30e0f29e7c407ed962 100644 --- a/lib/kokkos/core/src/impl/Kokkos_TaskPolicyData.hpp +++ b/lib/kokkos/core/src/impl/Kokkos_TaskPolicyData.hpp @@ -75,20 +75,20 @@ struct TaskPolicyWithPredecessor { TaskPolicyWithPredecessor() = delete; - KOKKOS_INLINE_FUNCTION + KOKKOS_DEFAULTED_FUNCTION TaskPolicyWithPredecessor(TaskPolicyWithPredecessor const&) = default; - KOKKOS_INLINE_FUNCTION + KOKKOS_DEFAULTED_FUNCTION TaskPolicyWithPredecessor(TaskPolicyWithPredecessor&&) = default; - KOKKOS_INLINE_FUNCTION + KOKKOS_DEFAULTED_FUNCTION TaskPolicyWithPredecessor& operator=(TaskPolicyWithPredecessor const&) = default; - KOKKOS_INLINE_FUNCTION + KOKKOS_DEFAULTED_FUNCTION TaskPolicyWithPredecessor& operator=(TaskPolicyWithPredecessor&&) = default; - KOKKOS_INLINE_FUNCTION + KOKKOS_DEFAULTED_FUNCTION ~TaskPolicyWithPredecessor() = default; KOKKOS_INLINE_FUNCTION @@ -129,19 +129,19 @@ struct TaskPolicyWithScheduler { TaskPolicyWithScheduler() = delete; - KOKKOS_INLINE_FUNCTION + KOKKOS_DEFAULTED_FUNCTION TaskPolicyWithScheduler(TaskPolicyWithScheduler const&) = default; - KOKKOS_INLINE_FUNCTION + KOKKOS_DEFAULTED_FUNCTION TaskPolicyWithScheduler(TaskPolicyWithScheduler&&) = default; - KOKKOS_INLINE_FUNCTION + KOKKOS_DEFAULTED_FUNCTION TaskPolicyWithScheduler& operator=(TaskPolicyWithScheduler const&) = default; - KOKKOS_INLINE_FUNCTION + KOKKOS_DEFAULTED_FUNCTION TaskPolicyWithScheduler& operator=(TaskPolicyWithScheduler&&) = default; - KOKKOS_INLINE_FUNCTION + KOKKOS_DEFAULTED_FUNCTION ~TaskPolicyWithScheduler() = default; KOKKOS_INLINE_FUNCTION @@ -155,7 +155,7 @@ struct TaskPolicyWithScheduler { KOKKOS_INLINE_FUNCTION static constexpr bool has_predecessor() noexcept { - return not std::is_same::value; + return !std::is_same::value; } KOKKOS_INLINE_FUNCTION diff --git a/lib/kokkos/core/src/impl/Kokkos_TaskQueue.hpp b/lib/kokkos/core/src/impl/Kokkos_TaskQueue.hpp index f7787dae0cf07dd4764c524172199b29f2ecd80d..c0d2eca9c106305e1bfdeb8efd634f657df90c8b 100644 --- a/lib/kokkos/core/src/impl/Kokkos_TaskQueue.hpp +++ b/lib/kokkos/core/src/impl/Kokkos_TaskQueue.hpp @@ -168,13 +168,13 @@ class TaskQueue : public TaskQueueBase { int allocation_count() const noexcept { return m_count_alloc; } KOKKOS_INLINE_FUNCTION - void initialize_team_queues(int pool_size) const noexcept {} + void initialize_team_queues(int /*pool_size*/) const noexcept {} KOKKOS_INLINE_FUNCTION task_root_type* attempt_to_steal_task() const noexcept { return nullptr; } KOKKOS_INLINE_FUNCTION - team_queue_type& get_team_queue(int team_rank) { return *this; } + team_queue_type& get_team_queue(int /*team_rank*/) { return *this; } // void execute() { specialization::execute( this ); } diff --git a/lib/kokkos/core/src/impl/Kokkos_TaskQueueCommon.hpp b/lib/kokkos/core/src/impl/Kokkos_TaskQueueCommon.hpp index b3444420d613280da831083dbcd3e8a628270b02..cd53a81b1b821773f7cde30a1268529e44071e47 100644 --- a/lib/kokkos/core/src/impl/Kokkos_TaskQueueCommon.hpp +++ b/lib/kokkos/core/src/impl/Kokkos_TaskQueueCommon.hpp @@ -259,9 +259,9 @@ class TaskQueueCommonMixin { // we've lost exclusive access and should nt touch task again // If the predecessor is not done, then task is not ready - task_is_ready = not predecessor_not_ready; + task_is_ready = !predecessor_not_ready; - if (task_is_ready and predecessor.is_runnable()) { + if (task_is_ready && predecessor.is_runnable()) { // this is our last chance to update the scheduling info before // predecessor is potentially deleted _self().update_scheduling_info_from_completed_predecessor( @@ -299,7 +299,7 @@ class TaskQueueCommonMixin { // and enqueue the task // (can't move because the task isn't expired unless the push succeeds bool push_success = ready_queue.push(task); - if (not push_success) { + if (!push_success) { _self().handle_failed_ready_queue_insertion(std::move(task), ready_queue, info); } @@ -312,8 +312,8 @@ class TaskQueueCommonMixin { template KOKKOS_INLINE_FUNCTION void handle_failed_ready_queue_insertion( - RunnableTaskBase&& task, ReadyQueueType& ready_queue, - TeamSchedulerInfo const& info) { + RunnableTaskBase&& /*task*/, + ReadyQueueType& /*ready_queue*/, TeamSchedulerInfo const& /*info*/) { Kokkos::abort("Unhandled failure of ready task queue insertion!\n"); } @@ -325,7 +325,7 @@ class TaskQueueCommonMixin { AggregateTask&& aggregate, TeamSchedulerInfo const& info) { // Because the aggregate is being scheduled, should not be in any queue - KOKKOS_EXPECTS(not aggregate.is_enqueued()); + KOKKOS_EXPECTS(!aggregate.is_enqueued()); using task_scheduling_info_type = typename Derived::task_scheduling_info_type; @@ -369,7 +369,7 @@ class TaskQueueCommonMixin { // ready yet incomplete_dependence_found = pred_not_ready; - if (not pred_not_ready) { + if (!pred_not_ready) { // A predecessor was done, and we didn't enqueue the aggregate // Update the aggregate's scheduling info (we still have exclusive // access to it here) @@ -403,7 +403,7 @@ class TaskQueueCommonMixin { // dependence was found, because some other thread could have already popped // it off of another waiting queue - if (not incomplete_dependence_found) { + if (!incomplete_dependence_found) { // all of the predecessors were completed, so we can complete `task` _self().complete(std::move(aggregate), info); } @@ -462,15 +462,16 @@ class TaskQueueCommonMixin { template KOKKOS_INLINE_FUNCTION void initialize_scheduling_info_from_predecessor( - TaskNode& task, - TaskNode& predecessor) const { + TaskNode& /*task*/, + TaskNode& /*predecessor*/) const { /* do nothing by default */ } template KOKKOS_INLINE_FUNCTION void initialize_scheduling_info_from_team_scheduler_info( - TaskNode& task, TeamSchedulerInfo const& info) const { + TaskNode& /*task*/, + TeamSchedulerInfo const& /*info*/) const { /* do nothing by default */ } diff --git a/lib/kokkos/core/src/impl/Kokkos_TaskQueue_impl.hpp b/lib/kokkos/core/src/impl/Kokkos_TaskQueue_impl.hpp index c64c497966b596968e0815216f45ef6b36c9f875..fe3cac7bda6fa02a27140ad14124df4667b6e87a 100644 --- a/lib/kokkos/core/src/impl/Kokkos_TaskQueue_impl.hpp +++ b/lib/kokkos/core/src/impl/Kokkos_TaskQueue_impl.hpp @@ -181,7 +181,7 @@ KOKKOS_FUNCTION bool TaskQueue::push_task( task->m_priority, task->m_ref_count); #endif - task_root_type *const zero = (task_root_type *)0; + task_root_type *const zero = nullptr; task_root_type *const lock = (task_root_type *)task_root_type::LockTag; task_root_type *volatile &next = task->m_next; @@ -254,7 +254,7 @@ TaskQueue::pop_ready_task( // // If queue is locked then just read by guaranteeing the CAS will fail. - if (lock == task) task = 0; + if (lock == task) task = nullptr; task_root_type *const x = task; @@ -334,7 +334,7 @@ KOKKOS_FUNCTION void TaskQueue::schedule_runnable( task->m_priority, task->m_ref_count); #endif - task_root_type *const zero = (task_root_type *)0; + task_root_type *const zero = nullptr; task_root_type *const lock = (task_root_type *)task_root_type::LockTag; task_root_type *const end = (task_root_type *)task_root_type::EndTag; @@ -382,16 +382,16 @@ KOKKOS_FUNCTION void TaskQueue::schedule_runnable( // If we don't have a dependency, or if pushing onto the wait queue of that // dependency failed (since the only time that queue should be locked is when // the task is transitioning to complete??!?) - const bool is_ready = (0 == dep) || (!push_task(&dep->m_wait, task)); + const bool is_ready = (nullptr == dep) || (!push_task(&dep->m_wait, task)); - if ((0 != dep) && respawn) { + if ((nullptr != dep) && respawn) { // Reference count for dep was incremented when // respawn assigned dependency to task->m_next // so that if dep completed prior to the // above push_task dep would not be destroyed. // dep reference count can now be decremented, // which may deallocate the task. - TaskQueue::assign(&dep, (task_root_type *)0); + TaskQueue::assign(&dep, nullptr); } if (is_ready) { @@ -452,7 +452,7 @@ KOKKOS_FUNCTION void TaskQueue::schedule_aggregate( task->m_ref_count); #endif - task_root_type *const zero = (task_root_type *)0; + task_root_type *const zero = nullptr; task_root_type *const lock = (task_root_type *)task_root_type::LockTag; task_root_type *const end = (task_root_type *)task_root_type::EndTag; @@ -551,7 +551,7 @@ KOKKOS_FUNCTION void TaskQueue::reschedule( // task is in Executing-Respawn state // task->m_next == 0 (no dependence) - task_root_type *const zero = (task_root_type *)0; + task_root_type *const zero = nullptr; task_root_type *const lock = (task_root_type *)task_root_type::LockTag; if (lock != Kokkos::atomic_exchange(&task->m_next, zero)) { @@ -567,7 +567,7 @@ KOKKOS_FUNCTION void TaskQueue::complete( // Complete a runnable task that has finished executing // or a when_all task when all of its dependeneces are complete. - task_root_type *const zero = (task_root_type *)0; + task_root_type *const zero = nullptr; task_root_type *const lock = (task_root_type *)task_root_type::LockTag; task_root_type *const end = (task_root_type *)task_root_type::EndTag; @@ -624,7 +624,7 @@ KOKKOS_FUNCTION void TaskQueue::complete( task_root_type volatile &vx = *x; task_root_type *const next = vx.m_next; - vx.m_next = 0; + vx.m_next = nullptr; Kokkos::memory_fence(); diff --git a/lib/kokkos/core/src/impl/Kokkos_TaskResult.hpp b/lib/kokkos/core/src/impl/Kokkos_TaskResult.hpp index f846ff4ea6237742a5df18ec1cabfb36ce122ed4..40a9c3bf57cfbe36e5a2646b963b71338c410cf7 100644 --- a/lib/kokkos/core/src/impl/Kokkos_TaskResult.hpp +++ b/lib/kokkos/core/src/impl/Kokkos_TaskResult.hpp @@ -113,20 +113,20 @@ struct TaskResult { using reference_type = void; template - KOKKOS_INLINE_FUNCTION static void* ptr(TaskNode* task) { + KOKKOS_INLINE_FUNCTION static void* ptr(TaskNode* /*task*/) { return nullptr; } - KOKKOS_INLINE_FUNCTION static void* ptr(TaskBase*) { return (void*)nullptr; } + KOKKOS_INLINE_FUNCTION static void* ptr(TaskBase*) { return nullptr; } template KOKKOS_INLINE_FUNCTION static reference_type get( - TaskNode* task) { /* Should never be called */ + TaskNode* /*task*/) { /* Should never be called */ } KOKKOS_INLINE_FUNCTION static reference_type get(TaskBase*) {} - KOKKOS_INLINE_FUNCTION static void destroy(TaskBase* task) {} + KOKKOS_INLINE_FUNCTION static void destroy(TaskBase* /*task*/) {} // template // KOKKOS_INLINE_FUNCTION static diff --git a/lib/kokkos/core/src/impl/Kokkos_TaskTeamMember.hpp b/lib/kokkos/core/src/impl/Kokkos_TaskTeamMember.hpp index 5a9d4c77bf601e230b2c320f780592e1cb577e7f..2faab5794907ecd43ccead5f74e09e414a8f3541 100644 --- a/lib/kokkos/core/src/impl/Kokkos_TaskTeamMember.hpp +++ b/lib/kokkos/core/src/impl/Kokkos_TaskTeamMember.hpp @@ -90,22 +90,22 @@ class TaskTeamMemberAdapter : public TeamMember { // (rule of 6 constructors) - KOKKOS_INLINE_FUNCTION + KOKKOS_DEFAULTED_FUNCTION TaskTeamMemberAdapter() = default; - KOKKOS_INLINE_FUNCTION + KOKKOS_DEFAULTED_FUNCTION TaskTeamMemberAdapter(TaskTeamMemberAdapter const&) = default; - KOKKOS_INLINE_FUNCTION + KOKKOS_DEFAULTED_FUNCTION TaskTeamMemberAdapter(TaskTeamMemberAdapter&&) = default; - KOKKOS_INLINE_FUNCTION + KOKKOS_DEFAULTED_FUNCTION TaskTeamMemberAdapter& operator=(TaskTeamMemberAdapter const&) = default; - KOKKOS_INLINE_FUNCTION + KOKKOS_DEFAULTED_FUNCTION TaskTeamMemberAdapter& operator=(TaskTeamMemberAdapter&&) = default; - KOKKOS_INLINE_FUNCTION ~TaskTeamMemberAdapter() = default; + KOKKOS_DEFAULTED_FUNCTION ~TaskTeamMemberAdapter() = default; //---------------------------------------- diff --git a/lib/kokkos/core/src/impl/Kokkos_Traits.hpp b/lib/kokkos/core/src/impl/Kokkos_Traits.hpp index 6f7e164bafbd6728f3a4e0d4277e50339d4ac8ef..32e78b7f5f620fd8d5bcf802703f1d07cb7171a4 100644 --- a/lib/kokkos/core/src/impl/Kokkos_Traits.hpp +++ b/lib/kokkos/core/src/impl/Kokkos_Traits.hpp @@ -137,132 +137,6 @@ struct are_integral { }; //---------------------------------------------------------------------------- -/* C++11 conformal compile-time type traits utilities. - * Prefer to use C++11 when portably available. - */ -//---------------------------------------------------------------------------- -// C++11 Helpers: - -template -struct integral_constant { - // Declaration of 'static const' causes an unresolved linker symbol in debug - // static const T value = v ; - enum { value = T(v) }; - typedef T value_type; - typedef integral_constant type; - KOKKOS_INLINE_FUNCTION operator T() { return v; } -}; - -typedef integral_constant false_type; -typedef integral_constant true_type; - -//---------------------------------------------------------------------------- -// C++11 Type relationships: - -template -struct is_same : public false_type {}; -template -struct is_same : public true_type {}; - -//---------------------------------------------------------------------------- -// C++11 Type properties: - -template -struct is_const : public false_type {}; -template -struct is_const : public true_type {}; -template -struct is_const : public true_type {}; - -template -struct is_array : public false_type {}; -template -struct is_array : public true_type {}; -template -struct is_array : public true_type {}; - -//---------------------------------------------------------------------------- -// C++11 Type transformations: - -template -struct remove_const { - typedef T type; -}; -template -struct remove_const { - typedef T type; -}; -template -struct remove_const { - typedef T& type; -}; - -template -struct add_const { - typedef const T type; -}; -template -struct add_const { - typedef const T& type; -}; -template -struct add_const { - typedef const T type; -}; -template -struct add_const { - typedef const T& type; -}; - -template -struct remove_reference { - typedef T type; -}; -template -struct remove_reference { - typedef T type; -}; -template -struct remove_reference { - typedef const T type; -}; - -template -struct remove_extent { - typedef T type; -}; -template -struct remove_extent { - typedef T type; -}; -template -struct remove_extent { - typedef T type; -}; - -//---------------------------------------------------------------------------- -// C++11 Other type generators: - -template -struct condition { - typedef F type; -}; - -template -struct condition { - typedef T type; -}; - -template -struct enable_if; - -template -struct enable_if { - typedef T type; -}; - -//---------------------------------------------------------------------------- - } // namespace Impl } // namespace Kokkos @@ -280,19 +154,6 @@ struct enable_if_type { typedef T type; }; -//---------------------------------------------------------------------------- - -template -struct bool_ : public integral_constant {}; - -template -struct unsigned_ : public integral_constant {}; - -template -struct int_ : public integral_constant {}; - -typedef bool_ true_; -typedef bool_ false_; //---------------------------------------------------------------------------- // if_ @@ -302,10 +163,10 @@ struct if_c { typedef FalseType type; - typedef typename remove_const::type>::type - value_type; + typedef typename std::remove_const< + typename std::remove_reference::type>::type value_type; - typedef typename add_const::type const_value_type; + typedef typename std::add_const::type const_value_type; static KOKKOS_INLINE_FUNCTION const_value_type& select(const_value_type& v) { return v; @@ -337,10 +198,10 @@ struct if_c { typedef TrueType type; - typedef typename remove_const::type>::type - value_type; + typedef typename std::remove_const< + typename std::remove_reference::type>::type value_type; - typedef typename add_const::type const_value_type; + typedef typename std::add_const::type const_value_type; static KOKKOS_INLINE_FUNCTION const_value_type& select(const_value_type& v) { return v; @@ -387,50 +248,26 @@ struct if_ : public if_c {}; //---------------------------------------------------------------------------- -// Allows aliased types: -template -struct is_integral - : public integral_constant< - bool, - (std::is_same::value || - std::is_same::value || - std::is_same::value || - std::is_same::value || - std::is_same::value || - std::is_same::value || - std::is_same::value || - std::is_same::value || - std::is_same::value || - std::is_same::value || - - std::is_same::value || std::is_same::value || - std::is_same::value || std::is_same::value || - std::is_same::value || - std::is_same::value || - std::is_same::value || - std::is_same::value)> {}; -//---------------------------------------------------------------------------- - template -struct is_label : public false_type {}; +struct is_label : public std::false_type {}; template <> -struct is_label : public true_type {}; +struct is_label : public std::true_type {}; template <> -struct is_label : public true_type {}; +struct is_label : public std::true_type {}; template -struct is_label : public true_type {}; +struct is_label : public std::true_type {}; template -struct is_label : public true_type {}; +struct is_label : public std::true_type {}; template <> -struct is_label : public true_type {}; +struct is_label : public std::true_type {}; template <> -struct is_label : public true_type {}; +struct is_label : public std::true_type {}; // These 'constexpr'functions can be used as // both regular functions and meta-function. @@ -515,20 +352,6 @@ struct integral_nonzero_constant { //---------------------------------------------------------------------------- -template -struct is_integral_constant : public false_ { - typedef void integral_type; - enum { integral_value = 0 }; -}; - -template -struct is_integral_constant> : public true_ { - typedef T integral_type; - enum { integral_value = v }; -}; - -//---------------------------------------------------------------------------- - template class TypeList; diff --git a/lib/kokkos/core/src/impl/Kokkos_VLAEmulation.hpp b/lib/kokkos/core/src/impl/Kokkos_VLAEmulation.hpp index 2746932878631039a1f842421fbb9ef8112ee7eb..9b90864199c8ad71b018ced96bcd4fc68f66dea5 100644 --- a/lib/kokkos/core/src/impl/Kokkos_VLAEmulation.hpp +++ b/lib/kokkos/core/src/impl/Kokkos_VLAEmulation.hpp @@ -185,7 +185,7 @@ struct ObjectWithVLAEmulation { // Note: We can't do this at class scope because it unnecessarily requires // vla_value_type to be a complete type - static_assert(not std::is_abstract::value, + static_assert(!std::is_abstract::value, "Can't use abstract type with VLA emulation"); KOKKOS_EXPECTS(num_entries >= 0); diff --git a/lib/kokkos/core/src/impl/Kokkos_ViewArray.hpp b/lib/kokkos/core/src/impl/Kokkos_ViewArray.hpp index 6123a608a7ca9329bc6cf8727395e9b9a16c8c11..119ad4eccf88fab63cba3fc984aa2877793e0532 100644 --- a/lib/kokkos/core/src/impl/Kokkos_ViewArray.hpp +++ b/lib/kokkos/core/src/impl/Kokkos_ViewArray.hpp @@ -338,7 +338,7 @@ class ViewMapping > { //---------------------------------------- - KOKKOS_INLINE_FUNCTION ~ViewMapping() {} + KOKKOS_DEFAULTED_FUNCTION ~ViewMapping() = default; KOKKOS_INLINE_FUNCTION ViewMapping() : m_impl_handle(), m_impl_offset(), m_stride(0) {} KOKKOS_INLINE_FUNCTION ViewMapping(const ViewMapping &rhs) @@ -349,7 +349,6 @@ class ViewMapping > { m_impl_handle = rhs.m_impl_handle; m_impl_offset = rhs.m_impl_offset; m_stride = rhs.m_stride; - ; return *this; } @@ -469,7 +468,7 @@ class ViewMapping< KOKKOS_INLINE_FUNCTION static void assign(DstType &dst, const SrcType &src, - const TrackType &src_track) { + const TrackType & /*src_track*/) { static_assert(is_assignable, "Can only convert to array_type"); typedef typename DstType::offset_type dst_offset_type; diff --git a/lib/kokkos/core/src/impl/Kokkos_ViewCtor.hpp b/lib/kokkos/core/src/impl/Kokkos_ViewCtor.hpp index 33c6e73f0564199c66c20099ddb24d9bfcbc3442..93a267ffa321f7732cd989c10da9a61ca3f1e33e 100644 --- a/lib/kokkos/core/src/impl/Kokkos_ViewCtor.hpp +++ b/lib/kokkos/core/src/impl/Kokkos_ViewCtor.hpp @@ -238,7 +238,10 @@ struct ViewCtorProp : public ViewCtorProp... { /* Copy from a matching property subset */ template ViewCtorProp(ViewCtorProp const &arg) - : ViewCtorProp(((ViewCtorProp const &)arg))... {} + : ViewCtorProp( + static_cast const &>(arg))... { + (void)arg; + } }; } /* namespace Impl */ diff --git a/lib/kokkos/core/src/impl/Kokkos_ViewLayoutTiled.hpp b/lib/kokkos/core/src/impl/Kokkos_ViewLayoutTiled.hpp index 2071f931e39571239111aad65831c4b2fee8197d..27f4375e56650a46d69d7fd462eb55252be33aac 100644 --- a/lib/kokkos/core/src/impl/Kokkos_ViewLayoutTiled.hpp +++ b/lib/kokkos/core/src/impl/Kokkos_ViewLayoutTiled.hpp @@ -601,39 +601,10 @@ struct ViewOffset< //---------------------------------------- -#ifdef KOKKOS_CUDA_9_DEFAULTED_BUG_WORKAROUND - KOKKOS_INLINE_FUNCTION ~ViewOffset() {} - KOKKOS_INLINE_FUNCTION ViewOffset() {} - KOKKOS_INLINE_FUNCTION ViewOffset(const ViewOffset& rhs) - : m_dim(rhs.m_dim), - m_tile_N0(rhs.m_tile_N0), - m_tile_N1(rhs.m_tile_N1), - m_tile_N2(rhs.m_tile_N2), - m_tile_N3(rhs.m_tile_N3), - m_tile_N4(rhs.m_tile_N4), - m_tile_N5(rhs.m_tile_N5), - m_tile_N6(rhs.m_tile_N6), - m_tile_N7(rhs.m_tile_N7) {} - - KOKKOS_INLINE_FUNCTION ViewOffset& operator=(const ViewOffset& rhs) { - m_dim = rhs.m_dim; - m_tile_N0 = rhs.m_tile_N0; - m_tile_N1 = rhs.m_tile_N1; - m_tile_N2 = rhs.m_tile_N2; - m_tile_N3 = rhs.m_tile_N3; - m_tile_N4 = rhs.m_tile_N4; - m_tile_N5 = rhs.m_tile_N5; - m_tile_N6 = rhs.m_tile_N6; - m_tile_N7 = rhs.m_tile_N7; - return *this; - } - -#else - KOKKOS_INLINE_FUNCTION ~ViewOffset() = default; - KOKKOS_INLINE_FUNCTION ViewOffset() = default; - KOKKOS_INLINE_FUNCTION ViewOffset(const ViewOffset&) = default; - KOKKOS_INLINE_FUNCTION ViewOffset& operator=(const ViewOffset&) = default; -#endif + KOKKOS_DEFAULTED_FUNCTION ~ViewOffset() = default; + KOKKOS_DEFAULTED_FUNCTION ViewOffset() = default; + KOKKOS_DEFAULTED_FUNCTION ViewOffset(const ViewOffset&) = default; + KOKKOS_DEFAULTED_FUNCTION ViewOffset& operator=(const ViewOffset&) = default; template KOKKOS_INLINE_FUNCTION constexpr ViewOffset( diff --git a/lib/kokkos/core/src/impl/Kokkos_ViewMapping.hpp b/lib/kokkos/core/src/impl/Kokkos_ViewMapping.hpp index f6dfacb4d8b4e48baad75977b4d877ffacda8bc9..c8230169e7ce873036d797251827e8e4d75db24b 100644 --- a/lib/kokkos/core/src/impl/Kokkos_ViewMapping.hpp +++ b/lib/kokkos/core/src/impl/Kokkos_ViewMapping.hpp @@ -252,7 +252,7 @@ template struct ViewDimensionJoin; template -struct ViewDimensionJoin, ViewDimension > { +struct ViewDimensionJoin, ViewDimension> { typedef ViewDimension type; }; @@ -263,7 +263,7 @@ struct ViewDimensionAssignable; template struct ViewDimensionAssignable, - ViewDimension > { + ViewDimension> { typedef ViewDimension dst; typedef ViewDimension src; @@ -327,18 +327,18 @@ struct is_integral_extent_type { }; template -struct is_integral_extent_type > { +struct is_integral_extent_type> { enum { value = std::is_integral::value ? 1 : 0 }; }; template -struct is_integral_extent_type > { +struct is_integral_extent_type> { enum { value = std::is_integral::value ? 1 : 0 }; }; // Assuming '2 == initializer_list::size()' template -struct is_integral_extent_type > { +struct is_integral_extent_type> { enum { value = std::is_integral::value ? 1 : 0 }; }; @@ -641,10 +641,10 @@ struct SubviewExtents { error(buf + n, buf_len - n, domain_rank + 1, range_rank + 1, dim, args...); } +#if defined(KOKKOS_ACTIVE_EXECUTION_MEMORY_SPACE_HOST) template KOKKOS_FORCEINLINE_FUNCTION void error(const ViewDimension& dim, Args... args) const { -#if defined(KOKKOS_ACTIVE_EXECUTION_MEMORY_SPACE_HOST) enum { LEN = 1024 }; char buffer[LEN]; @@ -652,10 +652,14 @@ struct SubviewExtents { error(buffer + n, LEN - n, 0, 0, dim, args...); Kokkos::Impl::throw_runtime_exception(std::string(buffer)); + } #else + template + KOKKOS_FORCEINLINE_FUNCTION void error(const ViewDimension&, + Args...) const { Kokkos::abort("Kokkos::subview bounds error"); -#endif } +#endif #else @@ -726,18 +730,18 @@ template struct ViewDataType; template -struct ViewDataType > { +struct ViewDataType> { typedef T type; }; template -struct ViewDataType > { - typedef typename ViewDataType >::type type; +struct ViewDataType> { + typedef typename ViewDataType>::type type; }; template -struct ViewDataType > { - typedef typename ViewDataType >::type type[N]; +struct ViewDataType> { + typedef typename ViewDataType>::type type[N]; }; /**\brief Analysis of View data type. @@ -1282,8 +1286,8 @@ struct ViewOffset< /* Span of the range space */ KOKKOS_INLINE_FUNCTION constexpr size_type span() const { - return m_stride * m_dim.N1 * m_dim.N2 * m_dim.N3 * m_dim.N4 * m_dim.N5 * - m_dim.N6 * m_dim.N7; + return (m_dim.N0 > size_type(0) ? m_stride : size_type(0)) * m_dim.N1 * + m_dim.N2 * m_dim.N3 * m_dim.N4 * m_dim.N5 * m_dim.N6 * m_dim.N7; } KOKKOS_INLINE_FUNCTION constexpr bool span_is_contiguous() const { @@ -1878,7 +1882,9 @@ struct ViewOffset< /* Span of the range space */ KOKKOS_INLINE_FUNCTION - constexpr size_type span() const { return m_dim.N0 * m_stride; } + constexpr size_type span() const { + return size() > 0 ? m_dim.N0 * m_stride : 0; + } KOKKOS_INLINE_FUNCTION constexpr bool span_is_contiguous() const { return m_stride == m_dim.N7 * m_dim.N6 * m_dim.N5 * m_dim.N4 * m_dim.N3 * @@ -2394,14 +2400,16 @@ struct ViewOffset { /* Span of the range space, largest stride * dimension */ KOKKOS_INLINE_FUNCTION constexpr size_type span() const { - return Max(m_dim.N0 * m_stride.S0, - Max(m_dim.N1 * m_stride.S1, - Max(m_dim.N2 * m_stride.S2, - Max(m_dim.N3 * m_stride.S3, - Max(m_dim.N4 * m_stride.S4, - Max(m_dim.N5 * m_stride.S5, - Max(m_dim.N6 * m_stride.S6, - m_dim.N7 * m_stride.S7))))))); + return size() == size_type(0) + ? size_type(0) + : Max(m_dim.N0 * m_stride.S0, + Max(m_dim.N1 * m_stride.S1, + Max(m_dim.N2 * m_stride.S2, + Max(m_dim.N3 * m_stride.S3, + Max(m_dim.N4 * m_stride.S4, + Max(m_dim.N5 * m_stride.S5, + Max(m_dim.N6 * m_stride.S6, + m_dim.N7 * m_stride.S7))))))); } KOKKOS_INLINE_FUNCTION constexpr bool span_is_contiguous() const { @@ -2740,7 +2748,7 @@ struct ViewValueFunctor; template struct ViewValueFunctor { - typedef Kokkos::RangePolicy PolicyType; + typedef Kokkos::RangePolicy> PolicyType; typedef typename ExecSpace::execution_space Exec; Exec space; @@ -2778,6 +2786,12 @@ struct ViewValueFunctor { : "Kokkos::View::initialization"), 0, &kpID); } +#endif +#ifdef KOKKOS_ENABLE_CUDA + if (std::is_same::value) { + Kokkos::Impl::cuda_prefetch_pointer(space, ptr, sizeof(ValueType) * n, + true); + } #endif const Kokkos::Impl::ParallelFor closure( *this, PolicyType(0, n)); @@ -2800,7 +2814,7 @@ struct ViewValueFunctor { template struct ViewValueFunctor { - typedef Kokkos::RangePolicy PolicyType; + typedef Kokkos::RangePolicy> PolicyType; ExecSpace space; ValueType* ptr; @@ -2825,6 +2839,12 @@ struct ViewValueFunctor { Kokkos::Profiling::beginParallelFor("Kokkos::View::initialization", 0, &kpID); } +#endif +#ifdef KOKKOS_ENABLE_CUDA + if (std::is_same::value) { + Kokkos::Impl::cuda_prefetch_pointer(space, ptr, sizeof(ValueType) * n, + true); + } #endif const Kokkos::Impl::ParallelFor closure( *this, PolicyType(0, n)); @@ -3069,7 +3089,7 @@ class ViewMapping< //---------------------------------------- - KOKKOS_INLINE_FUNCTION ~ViewMapping() {} + KOKKOS_DEFAULTED_FUNCTION ~ViewMapping() = default; KOKKOS_INLINE_FUNCTION ViewMapping() : m_impl_handle(), m_impl_offset() {} KOKKOS_INLINE_FUNCTION ViewMapping(const ViewMapping& rhs) : m_impl_handle(rhs.m_impl_handle), m_impl_offset(rhs.m_impl_offset) {} @@ -3493,7 +3513,7 @@ struct SubViewDataTypeImpl; /* base case */ template -struct SubViewDataTypeImpl > { +struct SubViewDataTypeImpl> { using type = ValueType; }; @@ -3503,16 +3523,17 @@ template ::type>::value>::type, - ValueType, Experimental::Extents, Integral, Args...> - : SubViewDataTypeImpl, - Args...> {}; + ValueType, Kokkos::Experimental::Extents, Integral, Args...> + : SubViewDataTypeImpl, Args...> {}; /* for ALL slice, subview has the same dimension */ template -struct SubViewDataTypeImpl, - ALL_t, Args...> +struct SubViewDataTypeImpl, ALL_t, + Args...> : SubViewDataTypeImpl::type, - Experimental::Extents, Args...> {}; + Kokkos::Experimental::Extents, Args...> {}; /* for pair-style slice, subview has dynamic dimension, since pair doesn't give * static sizes */ @@ -3522,10 +3543,10 @@ template struct SubViewDataTypeImpl< typename std::enable_if::value>::type, ValueType, - Experimental::Extents, PairLike, Args...> + Kokkos::Experimental::Extents, PairLike, Args...> : SubViewDataTypeImpl< void, typename make_all_extents_into_pointers::type*, - Experimental::Extents, Args...> {}; + Kokkos::Experimental::Extents, Args...> {}; template struct SubViewDataType : SubViewDataTypeImpl {}; diff --git a/lib/kokkos/core/src/impl/Kokkos_ViewTile.hpp b/lib/kokkos/core/src/impl/Kokkos_ViewTile.hpp index f1227c2ab61d548c7a02fe6eec48eed7ef1f5603..342927ef7754a9fb52e6b2f6b519dd31bd2df25e 100644 --- a/lib/kokkos/core/src/impl/Kokkos_ViewTile.hpp +++ b/lib/kokkos/core/src/impl/Kokkos_ViewTile.hpp @@ -146,22 +146,10 @@ struct ViewOffset< //---------------------------------------- -#ifdef KOKKOS_CUDA_9_DEFAULTED_BUG_WORKAROUND - KOKKOS_INLINE_FUNCTION ~ViewOffset() {} - KOKKOS_INLINE_FUNCTION ViewOffset() {} - KOKKOS_INLINE_FUNCTION ViewOffset(const ViewOffset& rhs) - : m_dim(rhs.m_dim), m_tile_N0(rhs.m_tile_N0) {} - KOKKOS_INLINE_FUNCTION ViewOffset& operator=(const ViewOffset& rhs) { - m_dim = rhs.m_dim; - m_tile_N0 = rhs.m_tile_N0; - return *this; - } -#else - KOKKOS_INLINE_FUNCTION ~ViewOffset() = default; - KOKKOS_INLINE_FUNCTION ViewOffset() = default; - KOKKOS_INLINE_FUNCTION ViewOffset(const ViewOffset&) = default; - KOKKOS_INLINE_FUNCTION ViewOffset& operator=(const ViewOffset&) = default; -#endif + KOKKOS_DEFAULTED_FUNCTION ~ViewOffset() = default; + KOKKOS_DEFAULTED_FUNCTION ViewOffset() = default; + KOKKOS_DEFAULTED_FUNCTION ViewOffset(const ViewOffset&) = default; + KOKKOS_DEFAULTED_FUNCTION ViewOffset& operator=(const ViewOffset&) = default; template KOKKOS_INLINE_FUNCTION constexpr ViewOffset( diff --git a/lib/kokkos/core/src/kokkos.pc.in b/lib/kokkos/core/src/kokkos.pc.in deleted file mode 100644 index 47786faefb9668a62763ed9b79fe71254fe3e500..0000000000000000000000000000000000000000 --- a/lib/kokkos/core/src/kokkos.pc.in +++ /dev/null @@ -1,71 +0,0 @@ -# -# Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering -// Solutions of Sandia, LLC (NTESS). -# -# Under the terms of Contract DE-NA0003525 with NTESS, -# the U.S. Government retains certain rights in this software. -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are -# met: -# -# 1. Redistributions of source code must retain the above copyright -# notice, this list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright -# notice, this list of conditions and the following disclaimer in the -# documentation and/or other materials provided with the distribution. -# -# 3. Neither the name of the Corporation nor the names of the -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# Questions? Contact Christian R. Trott (crtrott@sandia.gov) -# - -# Add the directory where kokkos.pc got installed to your PKG_CONFIG_PATH - -# Use this on commandline with: -# c++ `pkg-config --cflags --libs kokkos` -o myapp myapp.cpp - -# Use this in a Makefile: -# myapp: myapp.cpp -# $(CC) `pkg-config --cflags --libs kokkos` -o $@ $< - -# Use this in autotools: -# configure.ac: -# PKG_CHECK_MODULES([KOKKOS], [kokkos]) -# Makefile.am: -# myapp_CFLAGS = $(KOKKOS_CFLAGS) -# myapp_LDADD = $(KOKKOS_LIBS) - -# Use this in CMake: -# CMakeLists.txt: -# find_package(PkgConfig) -# pkg_check_modules(KOKKOS IMPORTED_TARGET kokkos) -# target_link_libraries( PkgConfig::KOKKOS) - -libdir=@CMAKE_INSTALL_FULL_LIBDIR@ -includedir=@CMAKE_INSTALL_FULL_INCLUDEDIR@ - -Name: kokkos -Description: Kokkos C++ Performance Portability Programming EcoSystem -URL: https://github.com/kokkos -Version: @Kokkos_VERSION@ -Requires: -Libs: -L${libdir} -lkokkos @KOKKOS_EXTRA_LIBS_LIST@ @KOKKOS_LINK_FLAGS@ -Libs.private: -lm -Cflags: -I${includedir} @KOKKOS_CXXFLAGS@ diff --git a/lib/kokkos/core/unit_test/CMakeLists.txt b/lib/kokkos/core/unit_test/CMakeLists.txt index c0957e83a886f4464dcdc01893177a775768dfc4..dec2f5e920759de0c9353f77a932de3a028562e7 100644 --- a/lib/kokkos/core/unit_test/CMakeLists.txt +++ b/lib/kokkos/core/unit_test/CMakeLists.txt @@ -12,8 +12,38 @@ KOKKOS_ADD_TEST_LIBRARY( HEADERS ${GTEST_SOURCE_DIR}/gtest/gtest.h SOURCES ${GTEST_SOURCE_DIR}/gtest/gtest-all.cc ) -KOKKOS_TARGET_COMPILE_DEFINITIONS(kokkos_gtest PUBLIC "-DGTEST_HAS_PTHREAD=0") -KOKKOS_TARGET_INCLUDE_DIRECTORIES(kokkos_gtest PUBLIC ${GTEST_SOURCE_DIR}) +#These can be direct, no need for Tribits or Kokkos wrappers + +# WORKAROUND FOR HIPCC +IF(Kokkos_ENABLE_HIP) + TARGET_COMPILE_DEFINITIONS(kokkos_gtest PUBLIC "-DGTEST_HAS_PTHREAD=0 --amdgpu-target=gfx906") +ELSE() + TARGET_COMPILE_DEFINITIONS(kokkos_gtest PUBLIC "-DGTEST_HAS_PTHREAD=0") +ENDIF() + +TARGET_INCLUDE_DIRECTORIES(kokkos_gtest PUBLIC ${GTEST_SOURCE_DIR}) +#Gtest minimally requires C++11 +TARGET_COMPILE_FEATURES(kokkos_gtest PUBLIC cxx_std_11) + +# +# Define Incremental Testing Feature Levels +# Define Device name mappings (i.e. what comes after Kokkos:: for the ExecSpace) +# + +SET(KOKKOS_CUDA_FEATURE_LEVEL 999) +SET(KOKKOS_CUDA_NAME Cuda) +SET(KOKKOS_HIP_FEATURE_LEVEL 12) +SET(KOKKOS_HIP_NAME Experimental::HIP) +SET(KOKKOS_HPX_FEATURE_LEVEL 999) +SET(KOKKOS_HPX_NAME Experimental::HPX) +SET(KOKKOS_OPENMP_FEATURE_LEVEL 999) +SET(KOKKOS_OPENMP_NAME OpenMP) +SET(KOKKOS_OPENMPTARGET_FEATURE_LEVEL 10) +SET(KOKKOS_OPENMPTARGET_NAME Experimental::OpenMPTarget) +SET(KOKKOS_SERIAL_FEATURE_LEVEL 999) +SET(KOKKOS_SERIAL_NAME Serial) +SET(KOKKOS_THREADS_FEATURE_LEVEL 999) +SET(KOKKOS_THREADS_NAME Threads) # @@ -24,7 +54,7 @@ KOKKOS_TARGET_INCLUDE_DIRECTORIES(kokkos_gtest PUBLIC ${GTEST_SOURCE_DIR}) KOKKOS_INCLUDE_DIRECTORIES(${CMAKE_CURRENT_BINARY_DIR}) KOKKOS_INCLUDE_DIRECTORIES(REQUIRED_DURING_INSTALLATION_TESTING ${CMAKE_CURRENT_SOURCE_DIR}) -foreach(Tag Threads;Serial;OpenMP;Cuda;HPX) +foreach(Tag Threads;Serial;OpenMP;Cuda;HPX;OpenMPTarget;HIP) # Because there is always an exception to the rule if(Tag STREQUAL "Threads") set(DEVICE "PTHREAD") @@ -46,6 +76,7 @@ foreach(Tag Threads;Serial;OpenMP;Cuda;HPX) ${dir}/Test${Tag}_AtomicOperations_complexfloat.cpp ${dir}/Test${Tag}_AtomicViews.cpp ${dir}/Test${Tag}_Atomics.cpp + ${dir}/Test${Tag}_Concepts.cpp ${dir}/Test${Tag}_Complex.cpp ${dir}/Test${Tag}_Crs.cpp ${dir}/Test${Tag}_DeepCopyAlignment.cpp @@ -59,6 +90,7 @@ foreach(Tag Threads;Serial;OpenMP;Cuda;HPX) ${dir}/Test${Tag}_MDRange_e.cpp ${dir}/Test${Tag}_Other.cpp ${dir}/Test${Tag}_RangePolicy.cpp + ${dir}/Test${Tag}_RangePolicyRequire.cpp ${dir}/Test${Tag}_Reductions.cpp ${dir}/Test${Tag}_Reducers_a.cpp ${dir}/Test${Tag}_Reducers_b.cpp @@ -104,6 +136,30 @@ foreach(Tag Threads;Serial;OpenMP;Cuda;HPX) ) endforeach() +if(Kokkos_ENABLE_OPENMPTARGET) + list(REMOVE_ITEM OpenMPTarget_SOURCES + openmptarget/TestOpenMPTarget_AtomicOperations_complexdouble.cpp + openmptarget/TestOpenMPTarget_MDRange_a.cpp + openmptarget/TestOpenMPTarget_MDRange_b.cpp + openmptarget/TestOpenMPTarget_MDRange_c.cpp + openmptarget/TestOpenMPTarget_MDRange_d.cpp + openmptarget/TestOpenMPTarget_MDRange_e.cpp + openmptarget/TestOpenMPTarget_Other.cpp + openmptarget/TestOpenMPTarget_Scan.cpp + openmptarget/TestOpenMPTarget_Team.cpp + openmptarget/TestOpenMPTarget_TeamScratch.cpp + openmptarget/TestOpenMPTarget_ViewAPI_e.cpp + openmptarget/TestOpenMPTarget_ViewMapping_subview.cpp + openmptarget/TestOpenMPTarget_ViewOfClass.cpp + ) +endif() + +if(Kokkos_ENABLE_HIP) + # FIXME Linktime error: undefined reference to + # Kokkos::Impl::ViewDimensin<0ul, ...>(unsigned int, ...) + list(REMOVE_ITEM Serial_SOURCES serial/TestSerial_ViewLayoutStrideAssignment.cpp) +endif() + if(Kokkos_ENABLE_SERIAL) KOKKOS_ADD_EXECUTABLE_AND_TEST( UnitTest_Serial @@ -150,42 +206,11 @@ if(Kokkos_ENABLE_HPX) ) endif() -if(Kokkos_ENABLE_QTHREADS) +if(Kokkos_ENABLE_OPENMPTARGET) KOKKOS_ADD_EXECUTABLE_AND_TEST( - UnitTest_Qthreads + UnitTest_OpenMPTarget SOURCES - UnitTestMainInit.cpp - qthreads/TestQthreads_Atomics.cpp - qthreads/TestQthreads_Complex.cpp - qthreads/TestQthreads_DeepCopyAlignment.cpp - qthreads/TestQthreads_Other.cpp - qthreads/TestQthreads_Reductions.cpp - qthreads/TestQthreads_Reducers_a.cpp - qthreads/TestQthreads_Reducers_b.cpp - qthreads/TestQthreads_Reducers_c.cpp - qthreads/TestQthreads_Reducers_d.cpp - qthreads/TestQthreads_SubView_a.cpp - qthreads/TestQthreads_SubView_b.cpp - qthreads/TestQthreads_SubView_c01.cpp - qthreads/TestQthreads_SubView_c02.cpp - qthreads/TestQthreads_SubView_c03.cpp - qthreads/TestQthreads_SubView_c04.cpp - qthreads/TestQthreads_SubView_c05.cpp - qthreads/TestQthreads_SubView_c06.cpp - qthreads/TestQthreads_SubView_c07.cpp - qthreads/TestQthreads_SubView_c08.cpp - qthreads/TestQthreads_SubView_c09.cpp - qthreads/TestQthreads_SubView_c10.cpp - qthreads/TestQthreads_SubView_c11.cpp - qthreads/TestQthreads_SubView_c12.cpp - qthreads/TestQthreads_SubView_c13.cpp - qthreads/TestQthreads_Team.cpp - qthreads/TestQthreads_View_64bit.cpp - qthreads/TestQthreads_ViewAPI_a.cpp - qthreads/TestQthreads_ViewAPI_b.cpp - qthreads/TestQthreads_ViewAPI_c.cpp - qthreads/TestQthreads_ViewAPI_d.cpp - qthreads/TestQthreads_ViewAPI_e.cpp + ${OpenMPTarget_SOURCES} ) endif() @@ -233,22 +258,66 @@ if(Kokkos_ENABLE_CUDA) ) endif() +if(Kokkos_ENABLE_HIP) + # FIXME_HIP + LIST(REMOVE_ITEM HIP_SOURCES + hip/TestHIP_AtomicOperations_complexdouble.cpp + hip/TestHIP_Other.cpp + hip/TestHIP_Reductions_DeviceView.cpp + hip/TestHIP_Team.cpp + hip/TestHIP_TeamReductionScan.cpp + hip/TestHIP_TeamScratch.cpp + hip/TestHIP_TeamTeamSize.cpp + hip/TestHIP_TeamVectorRange.cpp + hip/TestHIP_UniqueToken.cpp + hip/TestHIP_ViewAPI_a.cpp + hip/TestHIP_ViewAPI_b.cpp + hip/TestHIP_ViewAPI_e.cpp + hip/TestHIP_ViewLayoutStrideAssignment.cpp + hip/TestHIP_WorkGraph.cpp + ) + + KOKKOS_ADD_EXECUTABLE_AND_TEST( + UnitTest_HIP + SOURCES + ${HIP_SOURCES} + hip/TestHIPHostPinned_ViewAPI_a.cpp + hip/TestHIPHostPinned_ViewAPI_b.cpp + hip/TestHIPHostPinned_ViewAPI_c.cpp + hip/TestHIPHostPinned_ViewAPI_d.cpp + hip/TestHIPHostPinned_ViewAPI_e.cpp + hip/TestHIPHostPinned_ViewCopy.cpp + hip/TestHIPHostPinned_ViewMapping_a.cpp + hip/TestHIPHostPinned_ViewMapping_b.cpp + hip/TestHIPHostPinned_ViewMapping_subview.cpp + ) + KOKKOS_ADD_EXECUTABLE_AND_TEST( + UnitTest_HIPInterOpInit + SOURCES + UnitTestMain.cpp + hip/TestHIP_InterOp_Init.cpp + ) +endif() + +SET(DEFAULT_DEVICE_SOURCES + UnitTestMainInit.cpp + default/TestDefaultDeviceType.cpp + default/TestDefaultDeviceType_a1.cpp + default/TestDefaultDeviceType_b1.cpp + default/TestDefaultDeviceType_c1.cpp + default/TestDefaultDeviceType_a2.cpp + default/TestDefaultDeviceType_b2.cpp + default/TestDefaultDeviceType_c2.cpp + default/TestDefaultDeviceType_a3.cpp + default/TestDefaultDeviceType_b3.cpp + default/TestDefaultDeviceType_c3.cpp + default/TestDefaultDeviceType_d.cpp + default/TestDefaultDeviceTypeResize.cpp +) + KOKKOS_ADD_EXECUTABLE_AND_TEST( UnitTest_Default - SOURCES - UnitTestMainInit.cpp - default/TestDefaultDeviceType.cpp - default/TestDefaultDeviceType_a1.cpp - default/TestDefaultDeviceType_b1.cpp - default/TestDefaultDeviceType_c1.cpp - default/TestDefaultDeviceType_a2.cpp - default/TestDefaultDeviceType_b2.cpp - default/TestDefaultDeviceType_c2.cpp - default/TestDefaultDeviceType_a3.cpp - default/TestDefaultDeviceType_b3.cpp - default/TestDefaultDeviceType_c3.cpp - default/TestDefaultDeviceType_d.cpp - default/TestDefaultDeviceTypeResize.cpp + SOURCES ${DEFAULT_DEVICE_SOURCES} ) KOKKOS_ADD_EXECUTABLE_AND_TEST( @@ -275,6 +344,7 @@ KOKKOS_ADD_ADVANCED_TEST( UnitTest_PushFinalizeHook_terminate ALWAYS_FAIL_ON_ZERO_RETURN ) +if(NOT KOKKOS_HAS_TRILINOS) KOKKOS_ADD_TEST_EXECUTABLE( StackTraceTestExec SOURCES @@ -287,20 +357,9 @@ KOKKOS_ADD_TEST_EXECUTABLE( ) # We need -rdynamic on GNU platforms for the stacktrace functionality # to work correctly with shared libraries -if(NOT KOKKOS_HAS_TRILINOS) -SET_PROPERTY(TARGET StackTraceTestExec PROPERTY ENABLE_EXPORTS 1) - -KOKKOS_ADD_TEST( NAME UnitTest_StackTraceTest_normal - EXE StackTraceTestExec - FAIL_REGULAR_EXPRESSION "FAILED" - ) - -KOKKOS_ADD_TEST( NAME UnitTest_StackTraceTest_terminate - EXE StackTraceTestExec - FAIL_REGULAR_EXPRESSION "FAILED" - ) +KOKKOS_SET_EXE_PROPERTY(StackTraceTestExec ENABLE_EXPORTS ON) -KOKKOS_ADD_TEST( NAME UnitTest_StackTraceTest_generic_term +KOKKOS_ADD_TEST( NAME UnitTest_StackTraceTest EXE StackTraceTestExec FAIL_REGULAR_EXPRESSION "FAILED" ) @@ -325,5 +384,52 @@ KOKKOS_ADD_EXECUTABLE_AND_TEST( SOURCES UnitTestMain.cpp TestHostBarrier.cpp ) +FUNCTION (KOKKOS_ADD_INCREMENTAL_TEST DEVICE) + KOKKOS_OPTION( ${DEVICE}_EXCLUDE_TESTS "" STRING "Incremental test exclude list" ) + # Add unit test main + SET(${DEVICE}_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/UnitTestMainInit.cpp) + + # Iterate over incremental tests in directory + APPEND_GLOB(INCREMENTAL_FILE_LIST ${CMAKE_CURRENT_SOURCE_DIR}/incremental/*.hpp) + SET(DEVICE_NAME ${KOKKOS_${DEVICE}_NAME}) + FOREACH (CURRENT_FILE_PATH ${INCREMENTAL_FILE_LIST}) + GET_FILENAME_COMPONENT( CURRENT_FILE_NAME ${CURRENT_FILE_PATH} NAME ) + STRING (REPLACE ".hpp" "" CURRENT_TEST_NAME ${CURRENT_FILE_NAME}) + IF (NOT CURRENT_TEST_NAME IN_LIST Kokkos_${DEVICE}_EXCLUDE_TESTS) + SET (CURRENT_TEST_OUTPUT_FILENAME ${CURRENT_TEST_NAME}_${DEVICE}) + FILE( STRINGS ${CURRENT_FILE_PATH} CURRENT_REQUIRED_FEATURE_LINE REGEX "Kokkos_Feature_Level_Required" ) + # From each test get level implementation required + STRING( REGEX REPLACE ".*Kokkos_Feature_Level_Required:" "" CURRENT_REQUIRED_FEATURE_LEVEL ${CURRENT_REQUIRED_FEATURE_LINE} ) + # Cross-reference list of dependencies with selected feature list > matching feature test files are added to test applications + IF (KOKKOS_${DEVICE}_FEATURE_LEVEL GREATER_EQUAL CURRENT_REQUIRED_FEATURE_LEVEL) + CONFIGURE_FILE (IncrementalTest.cpp.in ${CMAKE_BINARY_DIR}/core/unit_test/generated/${CURRENT_TEST_OUTPUT_FILENAME}.cpp ) + SET(${DEVICE}_SOURCES ${${DEVICE}_SOURCES}; ${CMAKE_BINARY_DIR}/core/unit_test/generated/${CURRENT_TEST_OUTPUT_FILENAME}.cpp) + ENDIF() + ENDIF() + ENDFOREACH() + + STRING(TOUPPER ${DEVICE} UC_DEVICE) + + KOKKOS_OPTION ( + ENABLE_${UC_DEVICE} ON BOOL "ENABLE ${UC_DEVICE}" + ) + + KOKKOS_ADD_EXECUTABLE_AND_TEST( + IncrementalTest_${DEVICE} + SOURCES ${${DEVICE}_SOURCES} + ) + + TARGET_INCLUDE_DIRECTORIES( ${PACKAGE_NAME}_IncrementalTest_${DEVICE} PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/incremental ) + +ENDFUNCTION() + +FOREACH (DEVICE ${KOKKOS_ENABLED_DEVICES}) + KOKKOS_ADD_INCREMENTAL_TEST(${DEVICE}) +ENDFOREACH() + +KOKKOS_ADD_EXECUTABLE_AND_TEST( + UnitTest_CTestDevice + SOURCES UnitTestMain.cpp TestCTestDevice.cpp +) diff --git a/lib/kokkos/core/unit_test/IncrementalTest.cpp.in b/lib/kokkos/core/unit_test/IncrementalTest.cpp.in new file mode 100644 index 0000000000000000000000000000000000000000..e4358efe9dd8683e025b5a2be67a4e9bd83e7552 --- /dev/null +++ b/lib/kokkos/core/unit_test/IncrementalTest.cpp.in @@ -0,0 +1,58 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 3.0 +// Copyright (2020) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#ifndef KOKKOS_TEST_@BACK_END_NAME@_@CURRENT_TEST_NAME@ +#define KOKKOS_TEST_@BACK_END_NAME@_@CURRENT_TEST_NAME@ + +#include +#include + +#define TEST_CATEGORY @DEVICE@ +#define TEST_EXECSPACE Kokkos::@DEVICE_NAME@ + +#if defined(KOKKOS_ENABLE_CXX11_DISPATCH_LAMBDA) +#include <@CURRENT_FILE_NAME@> +#endif + +#endif + + diff --git a/lib/kokkos/core/unit_test/Makefile b/lib/kokkos/core/unit_test/Makefile index cf945bd718f5f346cff72c3cdc7c2cae1bfd5f25..1a386adc4aa88a5dc4e5d0518d853b2914ca96e1 100644 --- a/lib/kokkos/core/unit_test/Makefile +++ b/lib/kokkos/core/unit_test/Makefile @@ -8,7 +8,7 @@ vpath %.cpp ${KOKKOS_PATH}/core/unit_test/serial vpath %.cpp ${KOKKOS_PATH}/core/unit_test/threads vpath %.cpp ${KOKKOS_PATH}/core/unit_test/openmp vpath %.cpp ${KOKKOS_PATH}/core/unit_test/openmptarget -vpath %.cpp ${KOKKOS_PATH}/core/unit_test/qthreads +vpath %.cpp ${KOKKOS_PATH}/core/unit_test/hip vpath %.cpp ${KOKKOS_PATH}/core/unit_test/hpx vpath %.cpp ${KOKKOS_PATH}/core/unit_test/cuda vpath %.cpp ${KOKKOS_PATH}/core/unit_test/rocm @@ -67,7 +67,7 @@ ifeq ($(KOKKOS_INTERNAL_USE_CUDA), 1) OBJ_CUDA = UnitTestMainInit.o gtest-all.o OBJ_CUDA += TestCuda_Init.o OBJ_CUDA += TestCuda_SharedAlloc.o TestCudaUVM_SharedAlloc.o TestCudaHostPinned_SharedAlloc.o - OBJ_CUDA += TestCuda_RangePolicy.o + OBJ_CUDA += TestCuda_RangePolicy.o TestCuda_RangePolicyRequire.o OBJ_CUDA += TestCuda_ViewAPI_a.o TestCuda_ViewAPI_b.o TestCuda_ViewAPI_c.o TestCuda_ViewAPI_d.o TestCuda_ViewAPI_e.o OBJ_CUDA += TestCuda_DeepCopyAlignment.o OBJ_CUDA += TestCuda_ViewMapping_a.o TestCuda_ViewMapping_b.o TestCuda_ViewMapping_subview.o TestCuda_ViewResize.o TestCuda_ViewLayoutStrideAssignment.o @@ -103,7 +103,7 @@ ifeq ($(KOKKOS_INTERNAL_USE_CUDA), 1) OBJ_CUDA += TestCuda_LocalDeepCopy.o OBJ_CUDA += TestCuda_DebugSerialExecution.o OBJ_CUDA += TestCuda_DebugPinUVMSpace.o - + TARGETS += KokkosCore_UnitTest_Cuda TARGETS += KokkosCore_UnitTest_CudaInterOpInit TARGETS += KokkosCore_UnitTest_CudaInterOpStreams @@ -166,7 +166,7 @@ ifeq ($(KOKKOS_INTERNAL_USE_PTHREADS), 1) OBJ_THREADS = UnitTestMainInit.o gtest-all.o OBJ_THREADS += TestThreads_Init.o OBJ_THREADS += TestThreads_SharedAlloc.o - OBJ_THREADS += TestThreads_RangePolicy.o + OBJ_THREADS += TestThreads_RangePolicy.o TestThreads_RangePolicyRequire.o OBJ_THREADS += TestThreads_View_64bit.o OBJ_THREADS += TestThreads_ViewAPI_a.o TestThreads_ViewAPI_b.o TestThreads_ViewAPI_c.o TestThreads_ViewAPI_d.o TestThreads_ViewAPI_e.o OBJ_THREADS += TestThreads_DeepCopyAlignment.o @@ -201,7 +201,7 @@ ifeq ($(KOKKOS_INTERNAL_USE_OPENMP), 1) OBJ_OPENMP = UnitTestMainInit.o gtest-all.o OBJ_OPENMP += TestOpenMP_Init.o OBJ_OPENMP += TestOpenMP_SharedAlloc.o - OBJ_OPENMP += TestOpenMP_RangePolicy.o + OBJ_OPENMP += TestOpenMP_RangePolicy.o TestOpenMP_RangePolicyRequire.o OBJ_OPENMP += TestOpenMP_View_64bit.o OBJ_OPENMP += TestOpenMP_ViewAPI_a.o TestOpenMP_ViewAPI_b.o TestOpenMP_ViewAPI_c.o TestOpenMP_ViewAPI_d.o TestOpenMP_ViewAPI_e.o OBJ_OPENMP += TestOpenMP_DeepCopyAlignment.o @@ -242,11 +242,12 @@ ifeq ($(KOKKOS_INTERNAL_USE_OPENMPTARGET), 1) OBJ_OPENMPTARGET += TestOpenMPTarget_Init.o #OBJ_OPENMPTARGET += TestOpenMPTarget_SharedAlloc.o OBJ_OPENMPTARGET += TestOpenMPTarget_RangePolicy.o - OBJ_OPENMPTARGET += TestOpenMPTarget_ViewAPI_a.o TestOpenMPTarget_ViewAPI_b.o TestOpenMPTarget_ViewAPI_c.o TestOpenMPTarget_ViewAPI_d.o TestOpenMPTarget_ViewAPI_e.o #Some commented out code + OBJ_OPENMPTARGET += TestOpenMPTarget_ViewAPI_a.o TestOpenMPTarget_ViewAPI_b.o TestOpenMPTarget_ViewAPI_c.o TestOpenMPTarget_ViewAPI_d.o #Some commented out code + #OBJ_OPENMPTARGET += TestOpenMPTarget_ViewAPI_e.o OBJ_OPENMPTARGET += TestOpenMPTarget_DeepCopyAlignment.o OBJ_OPENMPTARGET += TestOpenMPTarget_ViewMapping_a.o OBJ_OPENMPTARGET += TestOpenMPTarget_ViewMapping_b.o - OBJ_OPENMPTARGET += TestOpenMPTarget_ViewMapping_subview.o + #OBJ_OPENMPTARGET += TestOpenMPTarget_ViewMapping_subview.o #OBJ_OPENMPTARGET += TestOpenMPTarget_ViewOfClass.o OBJ_OPENMPTARGET += TestOpenMPTarget_SubView_a.o TestOpenMPTarget_SubView_b.o #The following subview tests need something like UVM: @@ -255,12 +256,13 @@ ifeq ($(KOKKOS_INTERNAL_USE_OPENMPTARGET), 1) #OBJ_OPENMPTARGET += TestOpenMPTarget_SubView_c07.o TestOpenMPTarget_SubView_c08.o TestOpenMPTarget_SubView_c09.o #OBJ_OPENMPTARGET += TestOpenMPTarget_SubView_c10.o TestOpenMPTarget_SubView_c11.o TestOpenMPTarget_SubView_c12.o #OBJ_OPENMPTARGET += TestOpenMPTarget_Reductions.o # Need custom reductions - #OBJ_OPENMPTARGET += TestOpenMPTarget_Reducers_a.o TestOpenMPTarget_Reducers_b.o TestOpenMPTarget_Reducers_c.o TestOpenMPTarget_Reducers_d.o + OBJ_OPENMPTARGET += TestOpenMPTarget_Reducers_a.o TestOpenMPTarget_Reducers_b.o TestOpenMPTarget_Reducers_c.o TestOpenMPTarget_Reducers_d.o #OBJ_OPENMPTARGET += TestOpenMPTarget_Scan.o OBJ_OPENMPTARGET += TestOpenMPTarget_Complex.o OBJ_OPENMPTARGET += TestOpenMPTarget_AtomicOperations_int.o TestOpenMPTarget_AtomicOperations_unsignedint.o TestOpenMPTarget_AtomicOperations_longint.o OBJ_OPENMPTARGET += TestOpenMPTarget_AtomicOperations_unsignedlongint.o TestOpenMPTarget_AtomicOperations_longlongint.o TestOpenMPTarget_AtomicOperations_double.o TestOpenMPTarget_AtomicOperations_float.o - OBJ_OPENMPTARGET += TestOpenMPTarget_AtomicOperations_complexfloat.o TestOpenMPTarget_AtomicOperations_complexdouble.o + #OBJ_OPENMPTARGET += TestOpenMPTarget_AtomicOperations_complexfloat.o + #OBJ_OPENMPTARGET += TestOpenMPTarget_AtomicOperations_complexdouble.o OBJ_OPENMPTARGET += TestOpenMPTarget_AtomicViews.o OBJ_OPENMPTARGET += TestOpenMPTarget_Atomics.o # Commented Out Arbitrary Type Atomics #OBJ_OPENMPTARGET += TestOpenMPTarget_Team.o # There is still a static function in this @@ -275,28 +277,26 @@ ifeq ($(KOKKOS_INTERNAL_USE_OPENMPTARGET), 1) TEST_TARGETS += test-openmptarget endif -ifeq ($(KOKKOS_INTERNAL_USE_QTHREADS), 1) - OBJ_QTHREADS = TestQthreads_Other.o TestQthreads_Reductions.o TestQthreads_Atomics.o TestQthreads_Team.o - OBJ_QTHREADS += TestQthreads_SubView_a.o TestQthreads_SubView_b.o - OBJ_QTHREADS += TestQthreads_SubView_c01.o TestQthreads_SubView_c02.o TestQthreads_SubView_c03.o - OBJ_QTHREADS += TestQthreads_SubView_c04.o TestQthreads_SubView_c05.o TestQthreads_SubView_c06.o - OBJ_QTHREADS += TestQthreads_SubView_c07.o TestQthreads_SubView_c08.o TestQthreads_SubView_c09.o - OBJ_QTHREADS += TestQthreads_SubView_c10.o TestQthreads_SubView_c11.o TestQthreads_SubView_c12.o - OBJ_QTHREADS += TestQthreads_ViewAPI_a.o TestQthreads_ViewAPI_b.o TestQthreads_ViewAPI_c.o TestQthreads_ViewAPI_d.o TestQthreads_ViewAPI_e.o UnitTestMain.o gtest-all.o - TARGETS += KokkosCore_UnitTest_Qthreads - - OBJ_QTHREADS2 = UnitTestMainInit.o gtest-all.o - OBJ_QTHREADS2 += TestQthreads_Complex.o - TARGETS += KokkosCore_UnitTest_Qthreads2 - - TEST_TARGETS += test-qthreads +ifeq ($(KOKKOS_INTERNAL_USE_HIP), 1) + OBJ_HIP = UnitTestMainInit.o gtest-all.o + OBJ_HIP += TestHIP_Init.o + OBJ_HIP += TestHIP_Reducers_a.o TestHIP_Reducers_b.o TestHIP_Reducers_c.o TestHIP_Reducers_d.o + OBJ_HIP += TestHIP_Reductions.o + OBJ_HIP += TestHIP_MDRange_a.o TestHIP_MDRange_b.o TestHIP_MDRange_c.o TestHIP_MDRange_d.o TestHIP_MDRange_e.o + OBJ_HIP += TestHIP_Spaces.o + OBJ_HIP += TestHIPHostPinned_ViewCopy.o TestHIPHostPinned_ViewAPI_a.o TestHIPHostPinned_ViewAPI_b.o TestHIPHostPinned_ViewAPI_c.o TestHIPHostPinned_ViewAPI_d.o TestHIPHostPinned_ViewAPI_e.o + OBJ_HIP += TestHIPHostPinned_ViewMapping_a.o TestHIPHostPinned_ViewMapping_b.o TestHIPHostPinned_ViewMapping_subview.o + + TARGETS += KokkosCore_UnitTest_HIP + + TEST_TARGETS += test-hip endif ifeq ($(KOKKOS_INTERNAL_USE_HPX), 1) OBJ_HPX = UnitTestMainInit.o gtest-all.o OBJ_HPX += TestHPX_Init.o OBJ_HPX += TestHPX_SharedAlloc.o - OBJ_HPX += TestHPX_RangePolicy.o + OBJ_HPX += TestHPX_RangePolicy.o TestHPX_RangePolicyRequire.o OBJ_HPX += TestHPX_View_64bit.o OBJ_HPX += TestHPX_ViewAPI_a.o TestHPX_ViewAPI_b.o TestHPX_ViewAPI_c.o TestHPX_ViewAPI_d.o TestHPX_ViewAPI_e.o OBJ_HPX += TestHPX_ViewMapping_a.o TestHPX_ViewMapping_b.o TestHPX_ViewMapping_subview.o TestHPX_ViewResize.o @@ -335,7 +335,7 @@ ifeq ($(KOKKOS_INTERNAL_USE_SERIAL), 1) OBJ_SERIAL = UnitTestMainInit.o gtest-all.o OBJ_SERIAL += TestSerial_Init.o OBJ_SERIAL += TestSerial_SharedAlloc.o - OBJ_SERIAL += TestSerial_RangePolicy.o + OBJ_SERIAL += TestSerial_RangePolicy.o TestSerial_RangePolicyRequire.o OBJ_SERIAL += TestSerial_View_64bit.o OBJ_SERIAL += TestSerial_ViewAPI_a.o TestSerial_ViewAPI_b.o TestSerial_ViewAPI_c.o TestSerial_ViewAPI_d.o TestSerial_ViewAPI_e.o OBJ_SERIAL += TestSerial_DeepCopyAlignment.o @@ -414,7 +414,7 @@ TEST_TARGETS += ${INITTESTS_TEST_TARGETS} KokkosCore_UnitTest_Cuda: $(OBJ_CUDA) $(KOKKOS_LINK_DEPENDS) $(LINK) $(EXTRA_PATH) $(OBJ_CUDA) $(KOKKOS_LIBS) $(LIB) $(KOKKOS_LDFLAGS) $(LDFLAGS) -o KokkosCore_UnitTest_Cuda - + KokkosCore_UnitTest_CudaInterOpInit: UnitTestMain.o gtest-all.o TestCuda_InterOp_Init.o $(KOKKOS_LINK_DEPENDS) $(LINK) $(EXTRA_PATH) UnitTestMain.o gtest-all.o TestCuda_InterOp_Init.o $(KOKKOS_LIBS) $(LIB) $(KOKKOS_LDFLAGS) $(LDFLAGS) -o KokkosCore_UnitTest_CudaInterOpInit KokkosCore_UnitTest_CudaInterOpStreams: UnitTestMain.o gtest-all.o TestCuda_InterOp_Streams.o $(KOKKOS_LINK_DEPENDS) @@ -438,11 +438,8 @@ KokkosCore_UnitTest_OpenMPTarget: $(OBJ_OPENMPTARGET) $(KOKKOS_LINK_DEPENDS) KokkosCore_UnitTest_Serial: $(OBJ_SERIAL) $(KOKKOS_LINK_DEPENDS) $(LINK) $(EXTRA_PATH) $(OBJ_SERIAL) $(KOKKOS_LIBS) $(LIB) $(KOKKOS_LDFLAGS) $(LDFLAGS) -o KokkosCore_UnitTest_Serial -KokkosCore_UnitTest_Qthreads: $(OBJ_QTHREADS) $(KOKKOS_LINK_DEPENDS) - $(LINK) $(EXTRA_PATH) $(OBJ_QTHREADS) $(KOKKOS_LIBS) $(LIB) $(KOKKOS_LDFLAGS) $(LDFLAGS) -o KokkosCore_UnitTest_Qthreads - -KokkosCore_UnitTest_Qthreads2: $(OBJ_QTHREADS2) $(KOKKOS_LINK_DEPENDS) - $(LINK) $(EXTRA_PATH) $(OBJ_QTHREADS2) $(KOKKOS_LIBS) $(LIB) $(KOKKOS_LDFLAGS) $(LDFLAGS) -o KokkosCore_UnitTest_Qthreads2 +KokkosCore_UnitTest_HIP: $(OBJ_HIP) $(KOKKOS_LINK_DEPENDS) + $(LINK) $(EXTRA_PATH) $(OBJ_HIP) $(KOKKOS_LIBS) $(LIB) $(KOKKOS_LDFLAGS) $(LDFLAGS) -o KokkosCore_UnitTest_HIP KokkosCore_UnitTest_HPX: $(OBJ_HPX) $(KOKKOS_LINK_DEPENDS) $(LINK) $(EXTRA_PATH) $(OBJ_HPX) $(KOKKOS_LIBS) $(LIB) $(KOKKOS_LDFLAGS) $(LDFLAGS) -o KokkosCore_UnitTest_HPX @@ -496,9 +493,8 @@ test-openmptarget: KokkosCore_UnitTest_OpenMPTarget test-serial: KokkosCore_UnitTest_Serial ./KokkosCore_UnitTest_Serial -test-qthreads: KokkosCore_UnitTest_Qthreads KokkosCore_UnitTest_Qthreads2 - ./KokkosCore_UnitTest_Qthreads - ./KokkosCore_UnitTest_Qthreads2 +test-hip: KokkosCore_UnitTest_HIP + ./KokkosCore_UnitTest_HIP test-hpx: KokkosCore_UnitTest_HPX ./KokkosCore_UnitTest_HPX diff --git a/lib/kokkos/core/unit_test/TestAtomic.hpp b/lib/kokkos/core/unit_test/TestAtomic.hpp index a72a179e02e62132fdb4b59249565b119a24859e..809f9dc01fd78f5a0994746febcb794ed8181065 100644 --- a/lib/kokkos/core/unit_test/TestAtomic.hpp +++ b/lib/kokkos/core/unit_test/TestAtomic.hpp @@ -527,7 +527,19 @@ TEST(TEST_CATEGORY, atomics) { ASSERT_TRUE((TestAtomic::Loop(100, 3))); #ifndef KOKKOS_ENABLE_OPENMPTARGET -#ifndef KOKKOS_ENABLE_ROCM // ROCM doesn't yet support atomics for >64bit types + ASSERT_TRUE((TestAtomic::Loop, TEST_EXECSPACE>(1, 1))); + ASSERT_TRUE((TestAtomic::Loop, TEST_EXECSPACE>(1, 2))); + ASSERT_TRUE((TestAtomic::Loop, TEST_EXECSPACE>(1, 3))); + + ASSERT_TRUE( + (TestAtomic::Loop, TEST_EXECSPACE>(100, 1))); + ASSERT_TRUE( + (TestAtomic::Loop, TEST_EXECSPACE>(100, 2))); + ASSERT_TRUE( + (TestAtomic::Loop, TEST_EXECSPACE>(100, 3))); + + // FIXME_HIP HIP doesn't yet support atomics for >64bit types properly +#ifndef KOKKOS_ENABLE_HIP ASSERT_TRUE( (TestAtomic::Loop, TEST_EXECSPACE>(1, 1))); ASSERT_TRUE( @@ -542,17 +554,8 @@ TEST(TEST_CATEGORY, atomics) { ASSERT_TRUE( (TestAtomic::Loop, TEST_EXECSPACE>(100, 3))); - ASSERT_TRUE((TestAtomic::Loop, TEST_EXECSPACE>(1, 1))); - ASSERT_TRUE((TestAtomic::Loop, TEST_EXECSPACE>(1, 2))); - ASSERT_TRUE((TestAtomic::Loop, TEST_EXECSPACE>(1, 3))); - - ASSERT_TRUE( - (TestAtomic::Loop, TEST_EXECSPACE>(100, 1))); - ASSERT_TRUE( - (TestAtomic::Loop, TEST_EXECSPACE>(100, 2))); - ASSERT_TRUE( - (TestAtomic::Loop, TEST_EXECSPACE>(100, 3))); - +// WORKAROUND MSVC +#ifndef _WIN32 ASSERT_TRUE( (TestAtomic::Loop, TEST_EXECSPACE>(100, 1))); ASSERT_TRUE( @@ -561,6 +564,7 @@ TEST(TEST_CATEGORY, atomics) { (TestAtomic::Loop, TEST_EXECSPACE>(100, 3))); #endif #endif +#endif } } // namespace Test diff --git a/lib/kokkos/core/unit_test/TestAtomicViews.hpp b/lib/kokkos/core/unit_test/TestAtomicViews.hpp index d7a45dc40fe8cc529db6fa53d8374537a6cdb659..109598e8c609133869ee884bfad2f043e71cec38 100644 --- a/lib/kokkos/core/unit_test/TestAtomicViews.hpp +++ b/lib/kokkos/core/unit_test/TestAtomicViews.hpp @@ -97,8 +97,8 @@ struct TestViewOperator_LeftAndRight { right_view right; stride_view left_stride; stride_view right_stride; - long left_alloc; - long right_alloc; + int64_t left_alloc; + int64_t right_alloc; TestViewOperator_LeftAndRight() : left("left"), @@ -255,11 +255,11 @@ class TestAtomicViewAPI { ASSERT_EQ(ax.use_count(), size_t(4)); ASSERT_EQ(const_ax.use_count(), ax.use_count()); - ASSERT_FALSE(ax.data() == 0); - ASSERT_FALSE(const_ax.data() == 0); // referenceable ptr - ASSERT_FALSE(unmanaged_ax.data() == 0); - ASSERT_FALSE(unmanaged_ax_from_ptr_dx.data() == 0); - ASSERT_FALSE(ay.data() == 0); + ASSERT_FALSE(ax.data() == nullptr); + ASSERT_FALSE(const_ax.data() == nullptr); // referenceable ptr + ASSERT_FALSE(unmanaged_ax.data() == nullptr); + ASSERT_FALSE(unmanaged_ax_from_ptr_dx.data() == nullptr); + ASSERT_FALSE(ay.data() == nullptr); // ASSERT_NE( ax, ay ); // Above test results in following runtime error from gtest: // Expected: (ax) != (ay), actual: 32-byte object <30-01 D0-A0 D8-7F @@ -318,13 +318,13 @@ struct InitFunctor_Seq { typedef Kokkos::View view_type; view_type input; - const long length; + const int64_t length; - InitFunctor_Seq(view_type& input_, const long length_) + InitFunctor_Seq(view_type& input_, const int64_t length_) : input(input_), length(length_) {} KOKKOS_INLINE_FUNCTION - void operator()(const long i) const { + void operator()(const int64_t i) const { if (i < length) { input(i) = (T)i; } @@ -336,15 +336,15 @@ struct InitFunctor_ModTimes { typedef Kokkos::View view_type; view_type input; - const long length; - const long remainder; + const int64_t length; + const int64_t remainder; - InitFunctor_ModTimes(view_type& input_, const long length_, - const long remainder_) + InitFunctor_ModTimes(view_type& input_, const int64_t length_, + const int64_t remainder_) : input(input_), length(length_), remainder(remainder_) {} KOKKOS_INLINE_FUNCTION - void operator()(const long i) const { + void operator()(const int64_t i) const { if (i < length) { if (i % (remainder + 1) == remainder) { input(i) = (T)2; @@ -360,15 +360,15 @@ struct InitFunctor_ModShift { typedef Kokkos::View view_type; view_type input; - const long length; - const long remainder; + const int64_t length; + const int64_t remainder; - InitFunctor_ModShift(view_type& input_, const long length_, - const long remainder_) + InitFunctor_ModShift(view_type& input_, const int64_t length_, + const int64_t remainder_) : input(input_), length(length_), remainder(remainder_) {} KOKKOS_INLINE_FUNCTION - void operator()(const long i) const { + void operator()(const int64_t i) const { if (i < length) { if (i % (remainder + 1) == remainder) { input(i) = 1; @@ -390,15 +390,15 @@ struct PlusEqualAtomicViewFunctor { view_type input; atomic_view_type even_odd_result; - const long length; + const int64_t length; // Wrap the result view in an atomic view, use this for operator PlusEqualAtomicViewFunctor(const view_type& input_, - view_type& even_odd_result_, const long length_) + view_type& even_odd_result_, const int64_t length_) : input(input_), even_odd_result(even_odd_result_), length(length_) {} KOKKOS_INLINE_FUNCTION - void operator()(const long i) const { + void operator()(const int64_t i) const { if (i < length) { if (i % 2 == 0) { even_odd_result(0) += input(i); @@ -410,11 +410,11 @@ struct PlusEqualAtomicViewFunctor { }; template -T PlusEqualAtomicView(const long input_length) { +T PlusEqualAtomicView(const int64_t input_length) { typedef Kokkos::View view_type; typedef typename view_type::HostMirror host_view_type; - const long length = input_length; + const int64_t length = input_length; view_type input("input_view", length); view_type result_view("result_view", 2); @@ -435,19 +435,19 @@ T PlusEqualAtomicView(const long input_length) { } template -T PlusEqualAtomicViewCheck(const long input_length) { - const long N = input_length; +T PlusEqualAtomicViewCheck(const int64_t input_length) { + const int64_t N = input_length; T result[2]; if (N % 2 == 0) { - const long half_sum_end = (N / 2) - 1; - const long full_sum_end = N - 1; + const int64_t half_sum_end = (N / 2) - 1; + const int64_t full_sum_end = N - 1; result[0] = half_sum_end * (half_sum_end + 1) / 2; // Even sum. result[1] = (full_sum_end * (full_sum_end + 1) / 2) - result[0]; // Odd sum. } else { - const long half_sum_end = (T)(N / 2); - const long full_sum_end = N - 2; + const int64_t half_sum_end = (T)(N / 2); + const int64_t full_sum_end = N - 2; result[0] = half_sum_end * (half_sum_end - 1) / 2; // Even sum. result[1] = (full_sum_end * (full_sum_end - 1) / 2) - result[0]; // Odd sum. @@ -457,7 +457,7 @@ T PlusEqualAtomicViewCheck(const long input_length) { } template -bool PlusEqualAtomicViewTest(long input_length) { +bool PlusEqualAtomicViewTest(int64_t input_length) { T res = PlusEqualAtomicView(input_length); T resSerial = PlusEqualAtomicViewCheck(input_length); @@ -487,15 +487,16 @@ struct MinusEqualAtomicViewFunctor { view_type input; atomic_view_type even_odd_result; - const long length; + const int64_t length; // Wrap the result view in an atomic view, use this for operator. MinusEqualAtomicViewFunctor(const view_type& input_, - view_type& even_odd_result_, const long length_) + view_type& even_odd_result_, + const int64_t length_) : input(input_), even_odd_result(even_odd_result_), length(length_) {} KOKKOS_INLINE_FUNCTION - void operator()(const long i) const { + void operator()(const int64_t i) const { if (i < length) { if (i % 2 == 0) { even_odd_result(0) -= input(i); @@ -507,11 +508,11 @@ struct MinusEqualAtomicViewFunctor { }; template -T MinusEqualAtomicView(const long input_length) { +T MinusEqualAtomicView(const int64_t input_length) { typedef Kokkos::View view_type; typedef typename view_type::HostMirror host_view_type; - const long length = input_length; + const int64_t length = input_length; view_type input("input_view", length); view_type result_view("result_view", 2); @@ -532,19 +533,19 @@ T MinusEqualAtomicView(const long input_length) { } template -T MinusEqualAtomicViewCheck(const long input_length) { - const long N = input_length; +T MinusEqualAtomicViewCheck(const int64_t input_length) { + const int64_t N = input_length; T result[2]; if (N % 2 == 0) { - const long half_sum_end = (N / 2) - 1; - const long full_sum_end = N - 1; + const int64_t half_sum_end = (N / 2) - 1; + const int64_t full_sum_end = N - 1; result[0] = -1 * (half_sum_end * (half_sum_end + 1) / 2); // Even sum. result[1] = -1 * ((full_sum_end * (full_sum_end + 1) / 2) + result[0]); // Odd sum. } else { - const long half_sum_end = (long)(N / 2); - const long full_sum_end = N - 2; + const int64_t half_sum_end = (int64_t)(N / 2); + const int64_t full_sum_end = N - 2; result[0] = -1 * (half_sum_end * (half_sum_end - 1) / 2); // Even sum. result[1] = -1 * ((full_sum_end * (full_sum_end - 1) / 2) + result[0]); // Odd sum. @@ -554,7 +555,7 @@ T MinusEqualAtomicViewCheck(const long input_length) { } template -bool MinusEqualAtomicViewTest(long input_length) { +bool MinusEqualAtomicViewTest(int64_t input_length) { T res = MinusEqualAtomicView(input_length); T resSerial = MinusEqualAtomicViewCheck(input_length); @@ -584,15 +585,15 @@ struct TimesEqualAtomicViewFunctor { view_type input; atomic_view_type result; - const long length; + const int64_t length; // Wrap the result view in an atomic view, use this for operator TimesEqualAtomicViewFunctor(const view_type& input_, view_type& result_, - const long length_) + const int64_t length_) : input(input_), result(result_), length(length_) {} KOKKOS_INLINE_FUNCTION - void operator()(const long i) const { + void operator()(const int64_t i) const { if (i < length && i > 0) { result(0) *= (double)input(i); } @@ -600,11 +601,11 @@ struct TimesEqualAtomicViewFunctor { }; template -T TimesEqualAtomicView(const long input_length, const long remainder) { +T TimesEqualAtomicView(const int64_t input_length, const int64_t remainder) { typedef Kokkos::View view_type; typedef typename view_type::HostMirror host_view_type; - const long length = input_length; + const int64_t length = input_length; view_type input("input_view", length); view_type result_view("result_view", 1); @@ -626,12 +627,13 @@ T TimesEqualAtomicView(const long input_length, const long remainder) { } template -T TimesEqualAtomicViewCheck(const long input_length, const long remainder) { +T TimesEqualAtomicViewCheck(const int64_t input_length, + const int64_t remainder) { // Analytical result. - const long N = input_length; - T result = 1.0; + const int64_t N = input_length; + T result = 1.0; - for (long i = 2; i < N; ++i) { + for (int64_t i = 2; i < N; ++i) { if (i % (remainder + 1) == remainder) { result *= 2.0; } else { @@ -643,8 +645,8 @@ T TimesEqualAtomicViewCheck(const long input_length, const long remainder) { } template -bool TimesEqualAtomicViewTest(const long input_length) { - const long remainder = 23; +bool TimesEqualAtomicViewTest(const int64_t input_length) { + const int64_t remainder = 23; T res = TimesEqualAtomicView(input_length, remainder); T resSerial = TimesEqualAtomicViewCheck(input_length, remainder); @@ -675,15 +677,15 @@ struct DivEqualAtomicViewFunctor { view_type input; atomic_view_type result; - const long length; + const int64_t length; // Wrap the result view in an atomic view, use this for operator. DivEqualAtomicViewFunctor(const view_type& input_, scalar_view_type& result_, - const long length_) + const int64_t length_) : input(input_), result(result_), length(length_) {} KOKKOS_INLINE_FUNCTION - void operator()(const long i) const { + void operator()(const int64_t i) const { if (i < length && i > 0) { result() /= (double)(input(i)); } @@ -691,12 +693,12 @@ struct DivEqualAtomicViewFunctor { }; template -T DivEqualAtomicView(const long input_length, const long remainder) { +T DivEqualAtomicView(const int64_t input_length, const int64_t remainder) { typedef Kokkos::View view_type; typedef Kokkos::View scalar_view_type; typedef typename scalar_view_type::HostMirror host_scalar_view_type; - const long length = input_length; + const int64_t length = input_length; view_type input("input_view", length); scalar_view_type result_view("result_view"); @@ -718,10 +720,10 @@ T DivEqualAtomicView(const long input_length, const long remainder) { } template -T DivEqualAtomicViewCheck(const long input_length, const long remainder) { - const long N = input_length; - T result = 12121212121.0; - for (long i = 2; i < N; ++i) { +T DivEqualAtomicViewCheck(const int64_t input_length, const int64_t remainder) { + const int64_t N = input_length; + T result = 12121212121.0; + for (int64_t i = 2; i < N; ++i) { if (i % (remainder + 1) == remainder) { result /= 1.0; } else { @@ -733,8 +735,8 @@ T DivEqualAtomicViewCheck(const long input_length, const long remainder) { } template -bool DivEqualAtomicViewTest(const long input_length) { - const long remainder = 23; +bool DivEqualAtomicViewTest(const int64_t input_length) { + const int64_t remainder = 23; T res = DivEqualAtomicView(input_length, remainder); T resSerial = DivEqualAtomicViewCheck(input_length, remainder); @@ -766,15 +768,15 @@ struct ModEqualAtomicViewFunctor { view_type input; atomic_view_type result; - const long length; + const int64_t length; // Wrap the result view in an atomic view, use this for operator. ModEqualAtomicViewFunctor(const view_type& input_, scalar_view_type& result_, - const long length_) + const int64_t length_) : input(input_), result(result_), length(length_) {} KOKKOS_INLINE_FUNCTION - void operator()(const long i) const { + void operator()(const int64_t i) const { if (i < length && i > 0) { result() %= (double)(input(i)); } @@ -782,12 +784,12 @@ struct ModEqualAtomicViewFunctor { }; template -T ModEqualAtomicView(const long input_length, const long remainder) { +T ModEqualAtomicView(const int64_t input_length, const int64_t remainder) { typedef Kokkos::View view_type; typedef Kokkos::View scalar_view_type; typedef typename scalar_view_type::HostMirror host_scalar_view_type; - const long length = input_length; + const int64_t length = input_length; view_type input("input_view", length); scalar_view_type result_view("result_view"); @@ -809,10 +811,10 @@ T ModEqualAtomicView(const long input_length, const long remainder) { } template -T ModEqualAtomicViewCheck(const long input_length, const long remainder) { - const long N = input_length; - T result = 12121212121; - for (long i = 2; i < N; ++i) { +T ModEqualAtomicViewCheck(const int64_t input_length, const int64_t remainder) { + const int64_t N = input_length; + T result = 12121212121; + for (int64_t i = 2; i < N; ++i) { if (i % (remainder + 1) == remainder) { result %= 1; } else { @@ -824,12 +826,12 @@ T ModEqualAtomicViewCheck(const long input_length, const long remainder) { } template -bool ModEqualAtomicViewTest(const long input_length) { +bool ModEqualAtomicViewTest(const int64_t input_length) { static_assert(std::is_integral::value, "ModEqualAtomicView Error: Type must be integral type for this " "unit test"); - const long remainder = 23; + const int64_t remainder = 23; T res = ModEqualAtomicView(input_length, remainder); T resSerial = ModEqualAtomicViewCheck(input_length, remainder); @@ -861,16 +863,16 @@ struct RSEqualAtomicViewFunctor { const view_type input; atomic_view_type result; - const long length; - const long value; + const int64_t length; + const int64_t value; // Wrap the result view in an atomic view, use this for operator. RSEqualAtomicViewFunctor(const view_type& input_, result_view_type& result_, - const long& length_, const long& value_) + const int64_t& length_, const int64_t& value_) : input(input_), result(result_), length(length_), value(value_) {} KOKKOS_INLINE_FUNCTION - void operator()(const long i) const { + void operator()(const int64_t i) const { if (i < length) { if (i % 4 == 0) { result(1, 0, 0, 0) >>= input(i); @@ -886,13 +888,13 @@ struct RSEqualAtomicViewFunctor { }; template -T RSEqualAtomicView(const long input_length, const long value, - const long remainder) { +T RSEqualAtomicView(const int64_t input_length, const int64_t value, + const int64_t remainder) { typedef Kokkos::View view_type; typedef Kokkos::View result_view_type; typedef typename result_view_type::HostMirror host_scalar_view_type; - const long length = input_length; + const int64_t length = input_length; view_type input("input_view", length); result_view_type result_view("result_view", 2, 2, 2, 2); @@ -918,8 +920,8 @@ T RSEqualAtomicView(const long input_length, const long value, } template -T RSEqualAtomicViewCheck(const long input_length, const long value, - const long remainder) { +T RSEqualAtomicViewCheck(const int64_t input_length, const int64_t value, + const int64_t remainder) { T result[4]; result[0] = value; result[1] = value; @@ -927,7 +929,7 @@ T RSEqualAtomicViewCheck(const long input_length, const long value, result[3] = value; T* input = new T[input_length]; - for (long i = 0; i < input_length; ++i) { + for (int64_t i = 0; i < input_length; ++i) { if (i % (remainder + 1) == remainder) { input[i] = 1; } else { @@ -935,7 +937,7 @@ T RSEqualAtomicViewCheck(const long input_length, const long value, } } - for (long i = 0; i < input_length; ++i) { + for (int64_t i = 0; i < input_length; ++i) { if (i % 4 == 0) { result[0] >>= input[i]; } else if (i % 4 == 1) { @@ -953,12 +955,12 @@ T RSEqualAtomicViewCheck(const long input_length, const long value, } template -bool RSEqualAtomicViewTest(const long input_length) { +bool RSEqualAtomicViewTest(const int64_t input_length) { static_assert(std::is_integral::value, "RSEqualAtomicViewTest: Must be integral type for test"); - const long remainder = 61042; // prime - 1 - const long value = 1073741825; // 2^30+1 + const int64_t remainder = 61042; // prime - 1 + const int64_t value = 1073741825; // 2^30+1 T res = RSEqualAtomicView(input_length, value, remainder); T resSerial = RSEqualAtomicViewCheck(input_length, value, remainder); @@ -989,16 +991,16 @@ struct LSEqualAtomicViewFunctor { view_type input; atomic_view_type result; - const long length; - const long value; + const int64_t length; + const int64_t value; // Wrap the result view in an atomic view, use this for operator. LSEqualAtomicViewFunctor(const view_type& input_, result_view_type& result_, - const long& length_, const long& value_) + const int64_t& length_, const int64_t& value_) : input(input_), result(result_), length(length_), value(value_) {} KOKKOS_INLINE_FUNCTION - void operator()(const long i) const { + void operator()(const int64_t i) const { if (i < length) { if (i % 4 == 0) { result(1, 0, 0, 0) <<= input(i); @@ -1014,13 +1016,13 @@ struct LSEqualAtomicViewFunctor { }; template -T LSEqualAtomicView(const long input_length, const long value, - const long remainder) { +T LSEqualAtomicView(const int64_t input_length, const int64_t value, + const int64_t remainder) { typedef Kokkos::View view_type; typedef Kokkos::View result_view_type; typedef typename result_view_type::HostMirror host_scalar_view_type; - const long length = input_length; + const int64_t length = input_length; view_type input("input_view", length); result_view_type result_view("result_view", 2, 2, 2, 2); @@ -1046,8 +1048,8 @@ T LSEqualAtomicView(const long input_length, const long value, } template -T LSEqualAtomicViewCheck(const long input_length, const long value, - const long remainder) { +T LSEqualAtomicViewCheck(const int64_t input_length, const int64_t value, + const int64_t remainder) { T result[4]; result[0] = value; result[1] = value; @@ -1055,7 +1057,7 @@ T LSEqualAtomicViewCheck(const long input_length, const long value, result[3] = value; T* input = new T[input_length]; - for (long i = 0; i < input_length; ++i) { + for (int64_t i = 0; i < input_length; ++i) { if (i % (remainder + 1) == remainder) { input[i] = 1; } else { @@ -1063,7 +1065,7 @@ T LSEqualAtomicViewCheck(const long input_length, const long value, } } - for (long i = 0; i < input_length; ++i) { + for (int64_t i = 0; i < input_length; ++i) { if (i % 4 == 0) { result[0] <<= input[i]; } else if (i % 4 == 1) { @@ -1081,12 +1083,12 @@ T LSEqualAtomicViewCheck(const long input_length, const long value, } template -bool LSEqualAtomicViewTest(const long input_length) { +bool LSEqualAtomicViewTest(const int64_t input_length) { static_assert(std::is_integral::value, "LSEqualAtomicViewTest: Must be integral type for test"); - const long remainder = 61042; // prime - 1 - const long value = 1; // 2^30+1 + const int64_t remainder = 61042; // prime - 1 + const int64_t value = 1; // 2^30+1 T res = LSEqualAtomicView(input_length, value, remainder); T resSerial = LSEqualAtomicViewCheck(input_length, value, remainder); @@ -1116,15 +1118,15 @@ struct AndEqualAtomicViewFunctor { view_type input; atomic_view_type even_odd_result; - const long length; + const int64_t length; // Wrap the result view in an atomic view, use this for operator. AndEqualAtomicViewFunctor(const view_type& input_, - view_type& even_odd_result_, const long length_) + view_type& even_odd_result_, const int64_t length_) : input(input_), even_odd_result(even_odd_result_), length(length_) {} KOKKOS_INLINE_FUNCTION - void operator()(const long i) const { + void operator()(const int64_t i) const { if (i < length) { if (i % 2 == 0) { even_odd_result(0) &= input(i); @@ -1136,11 +1138,11 @@ struct AndEqualAtomicViewFunctor { }; template -T AndEqualAtomicView(const long input_length) { +T AndEqualAtomicView(const int64_t input_length) { typedef Kokkos::View view_type; typedef typename view_type::HostMirror host_view_type; - const long length = input_length; + const int64_t length = input_length; view_type input("input_view", length); view_type result_view("result_view", 2); @@ -1162,10 +1164,10 @@ T AndEqualAtomicView(const long input_length) { } template -T AndEqualAtomicViewCheck(const long input_length) { - const long N = input_length; - T result[2] = {1}; - for (long i = 0; i < N; ++i) { +T AndEqualAtomicViewCheck(const int64_t input_length) { + const int64_t N = input_length; + T result[2] = {1}; + for (int64_t i = 0; i < N; ++i) { if (N % 2 == 0) { result[0] &= (T)i; } else { @@ -1177,7 +1179,7 @@ T AndEqualAtomicViewCheck(const long input_length) { } template -bool AndEqualAtomicViewTest(long input_length) { +bool AndEqualAtomicViewTest(int64_t input_length) { static_assert(std::is_integral::value, "AndEqualAtomicViewTest: Must be integral type for test"); @@ -1210,15 +1212,15 @@ struct OrEqualAtomicViewFunctor { view_type input; atomic_view_type even_odd_result; - const long length; + const int64_t length; // Wrap the result view in an atomic view, use this for operator. OrEqualAtomicViewFunctor(const view_type& input_, view_type& even_odd_result_, - const long length_) + const int64_t length_) : input(input_), even_odd_result(even_odd_result_), length(length_) {} KOKKOS_INLINE_FUNCTION - void operator()(const long i) const { + void operator()(const int64_t i) const { if (i < length) { if (i % 2 == 0) { even_odd_result(0) |= input(i); @@ -1230,11 +1232,11 @@ struct OrEqualAtomicViewFunctor { }; template -T OrEqualAtomicView(const long input_length) { +T OrEqualAtomicView(const int64_t input_length) { typedef Kokkos::View view_type; typedef typename view_type::HostMirror host_view_type; - const long length = input_length; + const int64_t length = input_length; view_type input("input_view", length); view_type result_view("result_view", 2); @@ -1255,10 +1257,10 @@ T OrEqualAtomicView(const long input_length) { } template -T OrEqualAtomicViewCheck(const long input_length) { - const long N = input_length; - T result[2] = {0}; - for (long i = 0; i < N; ++i) { +T OrEqualAtomicViewCheck(const int64_t input_length) { + const int64_t N = input_length; + T result[2] = {0}; + for (int64_t i = 0; i < N; ++i) { if (i % 2 == 0) { result[0] |= (T)i; } else { @@ -1270,7 +1272,7 @@ T OrEqualAtomicViewCheck(const long input_length) { } template -bool OrEqualAtomicViewTest(long input_length) { +bool OrEqualAtomicViewTest(int64_t input_length) { static_assert(std::is_integral::value, "OrEqualAtomicViewTest: Must be integral type for test"); @@ -1303,15 +1305,15 @@ struct XOrEqualAtomicViewFunctor { view_type input; atomic_view_type even_odd_result; - const long length; + const int64_t length; // Wrap the result view in an atomic view, use this for operator. XOrEqualAtomicViewFunctor(const view_type& input_, - view_type& even_odd_result_, const long length_) + view_type& even_odd_result_, const int64_t length_) : input(input_), even_odd_result(even_odd_result_), length(length_) {} KOKKOS_INLINE_FUNCTION - void operator()(const long i) const { + void operator()(const int64_t i) const { if (i < length) { if (i % 2 == 0) { even_odd_result(0) ^= input(i); @@ -1323,11 +1325,11 @@ struct XOrEqualAtomicViewFunctor { }; template -T XOrEqualAtomicView(const long input_length) { +T XOrEqualAtomicView(const int64_t input_length) { typedef Kokkos::View view_type; typedef typename view_type::HostMirror host_view_type; - const long length = input_length; + const int64_t length = input_length; view_type input("input_view", length); view_type result_view("result_view", 2); @@ -1348,10 +1350,10 @@ T XOrEqualAtomicView(const long input_length) { } template -T XOrEqualAtomicViewCheck(const long input_length) { - const long N = input_length; - T result[2] = {0}; - for (long i = 0; i < N; ++i) { +T XOrEqualAtomicViewCheck(const int64_t input_length) { + const int64_t N = input_length; + T result[2] = {0}; + for (int64_t i = 0; i < N; ++i) { if (i % 2 == 0) { result[0] ^= (T)i; } else { @@ -1363,7 +1365,7 @@ T XOrEqualAtomicViewCheck(const long input_length) { } template -bool XOrEqualAtomicViewTest(long input_length) { +bool XOrEqualAtomicViewTest(int64_t input_length) { static_assert(std::is_integral::value, "XOrEqualAtomicViewTest: Must be integral type for test"); @@ -1426,38 +1428,38 @@ bool AtomicViewsTestNonIntegralType(const int length, int test) { namespace Test { TEST(TEST_CATEGORY, atomic_views_integral) { - const long length = 1000000; + const int64_t length = 1000000; { // Integral Types. ASSERT_TRUE( - (TestAtomicViews::AtomicViewsTestIntegralType( + (TestAtomicViews::AtomicViewsTestIntegralType( length, 1))); ASSERT_TRUE( - (TestAtomicViews::AtomicViewsTestIntegralType( + (TestAtomicViews::AtomicViewsTestIntegralType( length, 2))); ASSERT_TRUE( - (TestAtomicViews::AtomicViewsTestIntegralType( + (TestAtomicViews::AtomicViewsTestIntegralType( length, 3))); ASSERT_TRUE( - (TestAtomicViews::AtomicViewsTestIntegralType( + (TestAtomicViews::AtomicViewsTestIntegralType( length, 4))); ASSERT_TRUE( - (TestAtomicViews::AtomicViewsTestIntegralType( + (TestAtomicViews::AtomicViewsTestIntegralType( length, 5))); ASSERT_TRUE( - (TestAtomicViews::AtomicViewsTestIntegralType( + (TestAtomicViews::AtomicViewsTestIntegralType( length, 6))); ASSERT_TRUE( - (TestAtomicViews::AtomicViewsTestIntegralType( + (TestAtomicViews::AtomicViewsTestIntegralType( length, 7))); ASSERT_TRUE( - (TestAtomicViews::AtomicViewsTestIntegralType( + (TestAtomicViews::AtomicViewsTestIntegralType( length, 8))); } } TEST(TEST_CATEGORY, atomic_views_nonintegral) { - const long length = 1000000; + const int64_t length = 1000000; { // Non-Integral Types. ASSERT_TRUE(( diff --git a/lib/kokkos/core/unit_test/TestCTestDevice.cpp b/lib/kokkos/core/unit_test/TestCTestDevice.cpp new file mode 100644 index 0000000000000000000000000000000000000000..b2ee79b856b0b995bb86b39d8f7fedb4548c5a7d --- /dev/null +++ b/lib/kokkos/core/unit_test/TestCTestDevice.cpp @@ -0,0 +1,138 @@ +#include + +namespace Kokkos { +namespace Impl { + +int get_ctest_gpu(const char *local_rank_str); + +} // namespace Impl +} // namespace Kokkos + +#ifdef _WIN32 +int setenv(const char *name, const char *value, int overwrite) { + int errcode = 0; + if (!overwrite) { + size_t envsize = 0; + errcode = getenv_s(&envsize, NULL, 0, name); + if (errcode || envsize) return errcode; + } + return _putenv_s(name, value); +} + +int unsetenv(const char *name) { return _putenv_s(name, ""); } +#endif + +// Needed because https://github.com/google/googletest/issues/952 has not been +// resolved +#define EXPECT_THROW_WITH_MESSAGE(stmt, etype, whatstring) \ + EXPECT_THROW( \ + try { stmt; } catch (const etype &ex) { \ + EXPECT_EQ(whatstring, std::string(ex.what())); \ + throw; \ + }, \ + etype) + +class ctest_environment : public ::testing::Test { + protected: + void SetUp(); +}; + +void ctest_environment::SetUp() { + setenv("CTEST_KOKKOS_DEVICE_TYPE", "gpus", 1); + setenv("CTEST_RESOURCE_GROUP_COUNT", "10", 1); + unsetenv("CTEST_RESOURCE_GROUP_0"); + setenv("CTEST_RESOURCE_GROUP_1", "threads", 1); + setenv("CTEST_RESOURCE_GROUP_2", "threads,cores", 1); + + setenv("CTEST_RESOURCE_GROUP_3", "gpus", 1); + unsetenv("CTEST_RESOURCE_GROUP_3_GPUS"); + + setenv("CTEST_RESOURCE_GROUP_4", "gpus", 1); + setenv("CTEST_RESOURCE_GROUP_4_GPUS", "id:2", 1); + + setenv("CTEST_RESOURCE_GROUP_5", "gpus", 1); + setenv("CTEST_RESOURCE_GROUP_5_GPUS", "slots:1,id:2", 1); + + setenv("CTEST_RESOURCE_GROUP_6", "gpus", 1); + setenv("CTEST_RESOURCE_GROUP_6_GPUS", "id:2,slots:1", 1); + + setenv("CTEST_RESOURCE_GROUP_7", "threads,gpus", 1); + setenv("CTEST_RESOURCE_GROUP_7_GPUS", "id:3,slots:1", 1); + + setenv("CTEST_RESOURCE_GROUP_8", "gpus,threads", 1); + setenv("CTEST_RESOURCE_GROUP_8_GPUS", "id:1,slots:1", 1); + + setenv("CTEST_RESOURCE_GROUP_9", "cores,gpus,threads", 1); + setenv("CTEST_RESOURCE_GROUP_9_GPUS", "id:4,slots:1", 1); +} + +TEST_F(ctest_environment, no_device_type) { + unsetenv("CTEST_KOKKOS_DEVICE_TYPE"); + EXPECT_EQ(Kokkos::Impl::get_ctest_gpu("0"), 0); +} + +TEST_F(ctest_environment, no_process_count) { + unsetenv("CTEST_RESOURCE_GROUP_COUNT"); + EXPECT_EQ(Kokkos::Impl::get_ctest_gpu("0"), 0); +} + +TEST_F(ctest_environment, invalid_rank) { + EXPECT_THROW_WITH_MESSAGE( + Kokkos::Impl::get_ctest_gpu("10"), std::runtime_error, + "Error: local rank 10 is outside the bounds of resource groups provided " + "by" + " CTest. Raised by Kokkos::Impl::get_ctest_gpu().\nTraceback " + "functionality" + " not available\n"); +} + +TEST_F(ctest_environment, no_type_str) { + EXPECT_THROW_WITH_MESSAGE( + Kokkos::Impl::get_ctest_gpu("0"), std::runtime_error, + "Error: CTEST_RESOURCE_GROUP_0 is not specified. Raised by " + "Kokkos::Impl::get_ctest_gpu().\nTraceback functionality not " + "available\n"); +} + +TEST_F(ctest_environment, missing_type) { + EXPECT_THROW_WITH_MESSAGE( + Kokkos::Impl::get_ctest_gpu("1"), std::runtime_error, + "Error: device type 'gpus' not included in CTEST_RESOURCE_GROUP_1. " + "Raised " + "by Kokkos::Impl::get_ctest_gpu().\nTraceback functionality not available" + "\n"); + EXPECT_THROW_WITH_MESSAGE( + Kokkos::Impl::get_ctest_gpu("2"), std::runtime_error, + "Error: device type 'gpus' not included in CTEST_RESOURCE_GROUP_2. " + "Raised " + "by Kokkos::Impl::get_ctest_gpu().\nTraceback functionality not available" + "\n"); +} + +TEST_F(ctest_environment, no_id_str) { + EXPECT_THROW_WITH_MESSAGE( + Kokkos::Impl::get_ctest_gpu("3"), std::runtime_error, + "Error: CTEST_RESOURCE_GROUP_3_GPUS is not specified. Raised by " + "Kokkos::Impl::get_ctest_gpu().\nTraceback functionality not " + "available\n"); +} + +TEST_F(ctest_environment, invalid_id_str) { + EXPECT_THROW_WITH_MESSAGE( + Kokkos::Impl::get_ctest_gpu("4"), std::runtime_error, + "Error: invalid value of CTEST_RESOURCE_GROUP_4_GPUS: 'id:2'. Raised by " + "Kokkos::Impl::get_ctest_gpu().\nTraceback functionality not " + "available\n"); + EXPECT_THROW_WITH_MESSAGE( + Kokkos::Impl::get_ctest_gpu("5"), std::runtime_error, + "Error: invalid value of CTEST_RESOURCE_GROUP_5_GPUS: 'slots:1,id:2'. " + "Raised by Kokkos::Impl::get_ctest_gpu().\nTraceback functionality not " + "available\n"); +} + +TEST_F(ctest_environment, good) { + EXPECT_EQ(Kokkos::Impl::get_ctest_gpu("6"), 2); + EXPECT_EQ(Kokkos::Impl::get_ctest_gpu("7"), 3); + EXPECT_EQ(Kokkos::Impl::get_ctest_gpu("8"), 1); + EXPECT_EQ(Kokkos::Impl::get_ctest_gpu("9"), 4); +} diff --git a/lib/kokkos/core/unit_test/TestCXX11.hpp b/lib/kokkos/core/unit_test/TestCXX11.hpp index 876a3b5da80193356339d5f39ebf4a13b2877b17..405652b29e6d5ec68f16ab619ea7f31f1063f589 100644 --- a/lib/kokkos/core/unit_test/TestCXX11.hpp +++ b/lib/kokkos/core/unit_test/TestCXX11.hpp @@ -361,6 +361,7 @@ bool Test(int test) { return passed; #else + (void)test; return true; #endif } diff --git a/lib/kokkos/core/unit_test/TestCompilerMacros.hpp b/lib/kokkos/core/unit_test/TestCompilerMacros.hpp index e8daab9db606d0e1dbb606c63461ec2fee912a9b..c644daca0e24b7ea9d004e62a62c5fc68aa12185 100644 --- a/lib/kokkos/core/unit_test/TestCompilerMacros.hpp +++ b/lib/kokkos/core/unit_test/TestCompilerMacros.hpp @@ -44,10 +44,7 @@ #include -#if defined(KOKKOS_ENABLE_CUDA) && \ - (!defined(KOKKOS_ENABLE_CUDA_LAMBDA) || \ - ((defined(KOKKOS_ENABLE_SERIAL) || defined(KOKKOS_ENABLE_OPENMP)) && \ - ((CUDA_VERSION < 8000) && defined(__NVCC__)))) +#if defined(KOKKOS_ENABLE_CUDA) && !defined(KOKKOS_ENABLE_CUDA_LAMBDA) #if defined(KOKKOS_ENABLE_CXX11_DISPATCH_LAMBDA) #error "Macro bug: KOKKOS_ENABLE_CXX11_DISPATCH_LAMBDA shouldn't be defined" #endif diff --git a/lib/kokkos/core/unit_test/TestComplex.hpp b/lib/kokkos/core/unit_test/TestComplex.hpp index e049dcd17566a7ed9c800a5876e877c96cba28a7..2bb81052fea2158fbfd6a645e1df4b98465be8b8 100644 --- a/lib/kokkos/core/unit_test/TestComplex.hpp +++ b/lib/kokkos/core/unit_test/TestComplex.hpp @@ -84,8 +84,9 @@ struct TestComplexConstruction { ASSERT_FLOAT_EQ(h_results(8).real(), double(8)); ASSERT_FLOAT_EQ(h_results(8).imag(), 0.0); -#ifndef KOKKOS_ENABLE_ROCM // Copy construction conversion between - // Kokkos::complex and std::complex doesn't compile + // Copy construction conversion between + // Kokkos::complex and std::complex doesn't compile +#ifndef KOKKOS_ENABLE_HIP // FIXME_HIP Kokkos::complex a(1.5, 2.5), b(3.25, 5.25), r_kk; std::complex sa(a), sb(3.25, 5.25), r; r = a; @@ -104,7 +105,7 @@ struct TestComplexConstruction { } KOKKOS_INLINE_FUNCTION - void operator()(const int &i) const { + void operator()(const int & /*i*/) const { Kokkos::complex a(1.5, 2.5); d_results(0) = a; Kokkos::complex b(a); @@ -164,8 +165,10 @@ struct TestComplexBasicMath { ASSERT_FLOAT_EQ(h_results(2).real(), r.real()); ASSERT_FLOAT_EQ(h_results(2).imag(), r.imag()); r = a / b; +#ifndef KOKKOS_WORKAROUND_OPENMPTARGET_CLANG ASSERT_FLOAT_EQ(h_results(3).real(), r.real()); ASSERT_FLOAT_EQ(h_results(3).imag(), r.imag()); +#endif r = d + a; ASSERT_FLOAT_EQ(h_results(4).real(), r.real()); ASSERT_FLOAT_EQ(h_results(4).imag(), r.imag()); @@ -212,8 +215,10 @@ struct TestComplexBasicMath { ASSERT_FLOAT_EQ(h_results(18).real(), r.real()); ASSERT_FLOAT_EQ(h_results(18).imag(), r.imag()); r = c / a; +#ifndef KOKKOS_WORKAROUND_OPENMPTARGET_CLANG ASSERT_FLOAT_EQ(h_results(19).real(), r.real()); ASSERT_FLOAT_EQ(h_results(19).imag(), r.imag()); +#endif r = a; /* r = a+e; */ ASSERT_FLOAT_EQ(h_results(20).real(), r.real() + e); @@ -227,7 +232,7 @@ struct TestComplexBasicMath { } KOKKOS_INLINE_FUNCTION - void operator()(const int &i) const { + void operator()(const int & /*i*/) const { Kokkos::complex a(1.5, 2.5); Kokkos::complex b(3.25, 5.75); // Basic math complex / complex @@ -320,7 +325,7 @@ struct TestComplexSpecialFunctions { } KOKKOS_INLINE_FUNCTION - void operator()(const int &i) const { + void operator()(const int & /*i*/) const { Kokkos::complex a(1.5, 2.5); Kokkos::complex b(3.25, 5.75); double c = 9.3; @@ -356,4 +361,41 @@ TEST(TEST_CATEGORY, complex_special_funtions) { TEST(TEST_CATEGORY, complex_io) { testComplexIO(); } +TEST(TEST_CATEGORY, complex_trivially_copyable) { + using RealType = double; + + // Kokkos::complex is trivially copyable when RealType is + // trivially copyable + // Simply disable the check for IBM's XL compiler since we can't reliably + // check for a version that defines relevant functions. +#if !defined(__ibmxl__) + // clang claims compatibility with gcc 4.2.1 but all versions tested know + // about std::is_trivially_copyable. +#if !defined(__clang__) +#define KOKKOS_COMPILER_GNU_VERSION \ + __GNUC__ * 100 + __GNUC_MINOR__ * 10 + __GNUC_PATCHLEVEL__ +#endif +#if KOKKOS_COMPILER_GNU_VERSION == 0 || KOKKOS_COMPILER_GNU_VERSION > 500 + ASSERT_TRUE(std::is_trivially_copyable>::value || + !std::is_trivially_copyable::value); +#elif KOKKOS_COMPILER_GNU_VERSION > 480 + ASSERT_TRUE( + (std::has_trivial_copy_constructor>::value && + std::has_trivial_copy_assign>::value && + std::is_trivially_destructible>::value) || + !(std::has_trivial_copy_constructor::value && + std::has_trivial_copy_assign::value && + std::is_trivially_destructible::value)); +#else + ASSERT_TRUE( + (std::has_trivial_copy_constructor>::value && + std::has_trivial_copy_assign>::value && + std::has_trivial_destructor>::value) || + !(std::has_trivial_copy_constructor::value && + std::has_trivial_copy_assign::value && + std::has_trivial_destructor::value)); +#endif +#endif +} + } // namespace Test diff --git a/lib/kokkos/core/unit_test/TestConcepts.hpp b/lib/kokkos/core/unit_test/TestConcepts.hpp new file mode 100644 index 0000000000000000000000000000000000000000..dcd4d948a65e51eae8957d51e36cd181270edf9e --- /dev/null +++ b/lib/kokkos/core/unit_test/TestConcepts.hpp @@ -0,0 +1,81 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 3.0 +// Copyright (2020) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +#include + +namespace TestConcept { + +using ExecutionSpace = TEST_EXECSPACE; +using MemorySpace = typename ExecutionSpace::memory_space; +using DeviceType = typename ExecutionSpace::device_type; + +static_assert(Kokkos::is_execution_space{}, ""); +static_assert(Kokkos::is_execution_space{}, ""); +static_assert(!Kokkos::is_execution_space{}, ""); +static_assert(!Kokkos::is_execution_space{}, ""); + +static_assert(Kokkos::is_memory_space{}, ""); +static_assert(Kokkos::is_memory_space{}, ""); +static_assert(!Kokkos::is_memory_space{}, ""); +static_assert(!Kokkos::is_memory_space{}, ""); + +static_assert(Kokkos::is_device{}, ""); +static_assert(Kokkos::is_device{}, ""); +static_assert(!Kokkos::is_device{}, ""); +static_assert(!Kokkos::is_device{}, ""); + +static_assert(!Kokkos::is_device{}, ""); +static_assert(!Kokkos::is_device{}, ""); + +static_assert(Kokkos::is_space{}, ""); +static_assert(Kokkos::is_space{}, ""); +static_assert(Kokkos::is_space{}, ""); +static_assert(Kokkos::is_space{}, ""); +static_assert(Kokkos::is_space{}, ""); +static_assert(Kokkos::is_space{}, ""); +static_assert(!Kokkos::is_space{}, ""); +static_assert(!Kokkos::is_space{}, ""); +static_assert(!Kokkos::is_space{}, ""); + +} // namespace TestConcept diff --git a/lib/kokkos/core/unit_test/TestCrs.hpp b/lib/kokkos/core/unit_test/TestCrs.hpp index 580710960191f306d152835c5ddd600fa0a24a31..296235aad01fe689e2252a9bcbfe2fc3fa693abe 100644 --- a/lib/kokkos/core/unit_test/TestCrs.hpp +++ b/lib/kokkos/core/unit_test/TestCrs.hpp @@ -53,7 +53,7 @@ namespace { template struct CountFillFunctor { KOKKOS_INLINE_FUNCTION - std::int32_t operator()(std::int32_t row, std::int32_t *fill) const { + std::int32_t operator()(std::int32_t row, float *fill) const { auto n = (row % 4) + 1; if (fill) { for (std::int32_t j = 0; j < n; ++j) { @@ -153,7 +153,7 @@ struct RunUpdateCrsTest { template void test_count_fill(std::int32_t nrows) { - Kokkos::Crs graph; + Kokkos::Crs graph; Kokkos::count_and_fill_crs(graph, nrows, CountFillFunctor()); ASSERT_EQ(graph.numRows(), nrows); auto row_map = Kokkos::create_mirror_view(graph.row_map); @@ -176,12 +176,12 @@ void test_count_fill(std::int32_t nrows) { template void test_constructor(std::int32_t nrows) { for (int nTest = 1; nTest < 5; nTest++) { - typedef Kokkos::Crs crs_int32; - crs_int32 graph; + typedef Kokkos::Crs crs_type; + crs_type graph; Kokkos::count_and_fill_crs(graph, nrows, CountFillFunctor()); ASSERT_EQ(graph.numRows(), nrows); - RunUpdateCrsTest crstest(graph); + RunUpdateCrsTest crstest(graph); crstest.run_test(nTest); auto row_map = Kokkos::create_mirror_view(graph.row_map); diff --git a/lib/kokkos/core/unit_test/TestDeepCopy.hpp b/lib/kokkos/core/unit_test/TestDeepCopy.hpp index a7e80cef366742e4a78bdb74f5943eebc6dd2da0..56c259ff6a3f3f10825320020eb82dbfa300bccf 100644 --- a/lib/kokkos/core/unit_test/TestDeepCopy.hpp +++ b/lib/kokkos/core/unit_test/TestDeepCopy.hpp @@ -2,6 +2,7 @@ namespace Test { +#ifdef KOKKOS_ENABLE_CXX11_DISPATCH_LAMBDA namespace Impl { template struct TestDeepCopy { @@ -210,5 +211,149 @@ TEST(TEST_CATEGORY, deep_copy_alignment) { Kokkos::HostSpace>::run_test(100000); } } +#endif +// KOKKOS_IMPL_HIP_CLANG_WORKAROUND +#ifndef KOKKOS_ENABLE_HIP +namespace Impl { +template +struct TestDeepCopyScalarConversion { + struct TagFill {}; + struct TagCompare {}; + + using view_type_s1_1d = Kokkos::View; + using view_type_s2_1d = Kokkos::View; + using view_type_s1_2d = Kokkos::View; + using view_type_s2_2d = Kokkos::View; + + using base_layout1 = typename std::conditional< + std::is_same::value, Kokkos::LayoutLeft, + Layout1>::type; + using base_layout2 = typename std::conditional< + std::is_same::value, Kokkos::LayoutLeft, + Layout2>::type; + + using base_type_s1_1d = Kokkos::View; + using base_type_s2_1d = Kokkos::View; + using base_type_s1_2d = Kokkos::View; + using base_type_s2_2d = Kokkos::View; + + view_type_s1_1d view_s1_1d; + view_type_s2_1d view_s2_1d; + view_type_s1_2d view_s1_2d; + view_type_s2_2d view_s2_2d; + + Kokkos::View error_count; + + void create_views(int64_t N0, int64_t N1) { + base_type_s1_1d b_s1_1d("TestDeepCopyConversion::b_s1_1d", N0); + base_type_s2_1d b_s2_1d("TestDeepCopyConversion::b_s2_1d", N0); + base_type_s1_2d b_s1_2d("TestDeepCopyConversion::b_s1_2d", N0, N1); + base_type_s2_2d b_s2_2d("TestDeepCopyConversion::b_s2_2d", N0, N1); + + view_s1_1d = view_type_s1_1d(b_s1_1d, Kokkos::ALL); + view_s2_1d = view_type_s2_1d(b_s2_1d, Kokkos::ALL); + view_s1_2d = view_type_s1_2d(b_s1_2d, Kokkos::ALL, Kokkos::ALL); + view_s2_2d = view_type_s2_2d(b_s2_2d, Kokkos::ALL, Kokkos::ALL); + + error_count = Kokkos::View( + "TestDeepCopyConversion::error_count"); + } + + KOKKOS_FUNCTION + void operator()(TagFill, const int64_t i) const { + view_s2_1d(i) = static_cast(i + 1); + for (int64_t j = 0; j < static_cast(view_s2_2d.extent(1)); j++) + view_s2_2d(i, j) = static_cast((i + 1) * 1000 + j + 1); + } + + KOKKOS_FUNCTION + void operator()(TagCompare, const int64_t i) const { + int64_t errors = 0; + if (view_s1_1d(i) != static_cast(static_cast(i + 1))) + errors++; + for (int64_t j = 0; j < static_cast(view_s1_2d.extent(1)); j++) { + if (view_s1_2d(i, j) != + static_cast(static_cast((i + 1) * 1000 + j + 1))) + errors++; + } + if (errors > 0) Kokkos::atomic_add(&error_count(), errors); + } + + void run_tests(int64_t N0, int64_t N1) { + create_views(N0, N1); + + Kokkos::parallel_for("TestDeepCopyConversion::Fill", + Kokkos::RangePolicy>(0, N0), + *this); + + Kokkos::deep_copy(view_s1_1d, view_s2_1d); + Kokkos::deep_copy(view_s1_2d, view_s2_2d); + + Kokkos::parallel_for("TestDeepCopyConversion::Compare", + Kokkos::RangePolicy>(0, N0), + *this); + + int64_t errors = 0; + Kokkos::deep_copy(errors, error_count); + ASSERT_TRUE(errors == 0); + + Kokkos::deep_copy(view_s1_1d, static_cast(0)); + Kokkos::deep_copy(view_s1_2d, static_cast(0)); + + Kokkos::parallel_for("TestDeepCopyConversion::Compare", + Kokkos::RangePolicy>(0, N0), + *this); + Kokkos::deep_copy(errors, error_count); + ASSERT_TRUE(errors > 0); + + Kokkos::deep_copy(error_count, 0); + Kokkos::deep_copy(TEST_EXECSPACE(), view_s1_1d, view_s2_1d); + Kokkos::deep_copy(TEST_EXECSPACE(), view_s1_2d, view_s2_2d); + + Kokkos::parallel_for("TestDeepCopyConversion::Compare", + Kokkos::RangePolicy>(0, N0), + *this); + + Kokkos::deep_copy(errors, error_count); + ASSERT_TRUE(errors == 0); + } +}; +} // namespace Impl + +TEST(TEST_CATEGORY, deep_copy_conversion) { + int64_t N0 = 19381; + int64_t N1 = 17; + + using right = Kokkos::LayoutRight; + using left = Kokkos::LayoutLeft; + using stride = Kokkos::LayoutStride; + + Impl::TestDeepCopyScalarConversion().run_tests( + N0, N1); + Impl::TestDeepCopyScalarConversion().run_tests( + N0, N1); + Impl::TestDeepCopyScalarConversion().run_tests( + N0, N1); + Impl::TestDeepCopyScalarConversion().run_tests( + N0, N1); + Impl::TestDeepCopyScalarConversion().run_tests( + N0, N1); + + Impl::TestDeepCopyScalarConversion().run_tests( + N0, N1); + Impl::TestDeepCopyScalarConversion().run_tests( + N0, N1); + Impl::TestDeepCopyScalarConversion().run_tests( + N0, N1); + Impl::TestDeepCopyScalarConversion().run_tests( + N0, N1); + Impl::TestDeepCopyScalarConversion().run_tests( + N0, N1); +} +#endif } // namespace Test diff --git a/lib/kokkos/core/unit_test/TestLocalDeepCopy.hpp b/lib/kokkos/core/unit_test/TestLocalDeepCopy.hpp index 9bca373a407bc0bd2676a65ea0ff59ce3043170d..c776481c706878f674ced031a7eecbe28223383d 100644 --- a/lib/kokkos/core/unit_test/TestLocalDeepCopy.hpp +++ b/lib/kokkos/core/unit_test/TestLocalDeepCopy.hpp @@ -934,7 +934,6 @@ void impl_test_local_deepcopy_rangepolicy_rank_7(const int N) { //------------------------------------------------------------------------------------------------------------- #if defined(KOKKOS_ENABLE_CXX11_DISPATCH_LAMBDA) -#if !defined(KOKKOS_ENABLE_CUDA) || (8000 <= CUDA_VERSION) TEST(TEST_CATEGORY, local_deepcopy_teampolicy_layoutleft) { typedef TEST_EXECSPACE ExecSpace; typedef Kokkos::View ViewType; @@ -1043,5 +1042,73 @@ TEST(TEST_CATEGORY, local_deepcopy_rangepolicy_layoutright) { } } #endif -#endif + +namespace Impl { +template +using ShMemView = + Kokkos::View; + +struct DeepCopyScratchFunctor { + DeepCopyScratchFunctor( + Kokkos::View check_view_1, + Kokkos::View check_view_2) + : check_view_1_(check_view_1), + check_view_2_(check_view_2), + N_(check_view_1.extent(0)) {} + + KOKKOS_INLINE_FUNCTION void operator()( + Kokkos::TeamPolicy>::member_type team) + const { + using ShmemType = TEST_EXECSPACE::scratch_memory_space; + auto shview = + Impl::ShMemView(team.team_scratch(1), N_, 1); + + Kokkos::parallel_for( + Kokkos::TeamThreadRange(team, N_), KOKKOS_LAMBDA(const size_t& index) { + auto thread_shview = Kokkos::subview(shview, index, Kokkos::ALL()); + Kokkos::Experimental::local_deep_copy(thread_shview, index); + }); + Kokkos::Experimental::local_deep_copy( + team, check_view_1_, Kokkos::subview(shview, Kokkos::ALL(), 0)); + + Kokkos::Experimental::local_deep_copy(team, shview, 6.); + Kokkos::Experimental::local_deep_copy( + team, check_view_2_, Kokkos::subview(shview, Kokkos::ALL(), 0)); + } + + Kokkos::View check_view_1_; + Kokkos::View check_view_2_; + int const N_; +}; +} // namespace Impl + +TEST(TEST_CATEGORY, deep_copy_scratch) { + using TestDeviceTeamPolicy = Kokkos::TeamPolicy; + + const int N = 8; + const int bytes_per_team = + Impl::ShMemView::shmem_size(N, 1); + + TestDeviceTeamPolicy policy(1, Kokkos::AUTO); + auto team_exec = policy.set_scratch_size(1, Kokkos::PerTeam(bytes_per_team)); + + Kokkos::View check_view_1("check_1", + N); + Kokkos::View check_view_2("check_2", + N); + + Kokkos::parallel_for( + team_exec, Impl::DeepCopyScratchFunctor{check_view_1, check_view_2}); + auto host_copy_1 = + Kokkos::create_mirror_view_and_copy(Kokkos::HostSpace(), check_view_1); + auto host_copy_2 = + Kokkos::create_mirror_view_and_copy(Kokkos::HostSpace(), check_view_2); + + for (unsigned int i = 0; i < N; ++i) { + ASSERT_EQ(host_copy_1(i), i); + ASSERT_EQ(host_copy_2(i), 6.0); + } +} } // namespace Test diff --git a/lib/kokkos/core/unit_test/TestMDRange.hpp b/lib/kokkos/core/unit_test/TestMDRange.hpp index 1e1bd869ca0857dac84521403b5f426df223534a..c4288f21a111a297dd7f973781853c46d1560bb8 100644 --- a/lib/kokkos/core/unit_test/TestMDRange.hpp +++ b/lib/kokkos/core/unit_test/TestMDRange.hpp @@ -256,7 +256,6 @@ struct TestMDRange_2D { static void test_reduce2(const int N0, const int N1) { #if defined(KOKKOS_ENABLE_CXX11_DISPATCH_LAMBDA) -#if !defined(KOKKOS_ENABLE_CUDA) || (8000 <= CUDA_VERSION) { typedef typename Kokkos::MDRangePolicy, Kokkos::IndexType > @@ -269,13 +268,12 @@ struct TestMDRange_2D { double sum = 0.0; parallel_reduce( range, - KOKKOS_LAMBDA(const int i, const int j, double &lsum) { + KOKKOS_LAMBDA(const int /*i*/, const int /*j*/, double &lsum) { lsum += 1.0; }, sum); ASSERT_EQ(sum, N0 * N1); } -#endif #endif { @@ -361,7 +359,6 @@ struct TestMDRange_2D { } // Test Min reducer with lambda #if defined(KOKKOS_ENABLE_CXX11_DISPATCH_LAMBDA) -#if !defined(KOKKOS_ENABLE_CUDA) || (8000 <= CUDA_VERSION) { typedef typename Kokkos::MDRangePolicy, Kokkos::IndexType > @@ -387,7 +384,6 @@ struct TestMDRange_2D { ASSERT_EQ(min, 4.0); } -#endif #endif // Tagged operator test { @@ -532,7 +528,6 @@ struct TestMDRange_2D { static void test_for2(const int N0, const int N1) { #if defined(KOKKOS_ENABLE_CXX11_DISPATCH_LAMBDA) -#if !defined(KOKKOS_ENABLE_CUDA) || (8000 <= CUDA_VERSION) { typedef typename Kokkos::MDRangePolicy, Kokkos::IndexType > @@ -571,7 +566,6 @@ struct TestMDRange_2D { ASSERT_EQ(counter, 0); } -#endif #endif { @@ -909,7 +903,6 @@ struct TestMDRange_3D { static void test_reduce3(const int N0, const int N1, const int N2) { #if defined(KOKKOS_ENABLE_CXX11_DISPATCH_LAMBDA) -#if !defined(KOKKOS_ENABLE_CUDA) || (8000 <= CUDA_VERSION) { typedef typename Kokkos::MDRangePolicy, Kokkos::IndexType > @@ -922,13 +915,11 @@ struct TestMDRange_3D { double sum = 0.0; parallel_reduce( range, - KOKKOS_LAMBDA(const int i, const int j, const int k, double &lsum) { - lsum += 1.0; - }, + KOKKOS_LAMBDA(const int /*i*/, const int /*j*/, const int /*k*/, + double &lsum) { lsum += 1.0; }, sum); ASSERT_EQ(sum, N0 * N1 * N2); } -#endif #endif { @@ -1013,7 +1004,6 @@ struct TestMDRange_3D { } // Test Min reducer with lambda #if defined(KOKKOS_ENABLE_CXX11_DISPATCH_LAMBDA) -#if !defined(KOKKOS_ENABLE_CUDA) || (8000 <= CUDA_VERSION) { typedef typename Kokkos::MDRangePolicy, Kokkos::IndexType > @@ -1046,7 +1036,6 @@ struct TestMDRange_3D { ASSERT_EQ(min, min_identity); } } -#endif #endif // Tagged operator test @@ -1193,7 +1182,6 @@ struct TestMDRange_3D { static void test_for3(const int N0, const int N1, const int N2) { #if defined(KOKKOS_ENABLE_CXX11_DISPATCH_LAMBDA) -#if !defined(KOKKOS_ENABLE_CUDA) || (8000 <= CUDA_VERSION) { typedef typename Kokkos::MDRangePolicy, Kokkos::IndexType > @@ -1236,7 +1224,6 @@ struct TestMDRange_3D { ASSERT_EQ(counter, 0); } -#endif #endif { @@ -1549,7 +1536,6 @@ struct TestMDRange_4D { static void test_reduce4(const int N0, const int N1, const int N2, const int N3) { #if defined(KOKKOS_ENABLE_CXX11_DISPATCH_LAMBDA) -#if !defined(KOKKOS_ENABLE_CUDA) || (8000 <= CUDA_VERSION) { typedef typename Kokkos::MDRangePolicy, Kokkos::IndexType > @@ -1562,12 +1548,11 @@ struct TestMDRange_4D { double sum = 0.0; parallel_reduce( range, - KOKKOS_LAMBDA(const int i, const int j, const int k, const int l, - double &lsum) { lsum += 1.0; }, + KOKKOS_LAMBDA(const int /*i*/, const int /*j*/, const int /*k*/, + const int /*l*/, double &lsum) { lsum += 1.0; }, sum); ASSERT_EQ(sum, N0 * N1 * N2 * N3); } -#endif #endif { @@ -1656,7 +1641,6 @@ struct TestMDRange_4D { // Test Min reducer with lambda #if defined(KOKKOS_ENABLE_CXX11_DISPATCH_LAMBDA) -#if !defined(KOKKOS_ENABLE_CUDA) || (8000 <= CUDA_VERSION) { typedef typename Kokkos::MDRangePolicy, Kokkos::IndexType > @@ -1684,7 +1668,6 @@ struct TestMDRange_4D { ASSERT_EQ(min, 16.0); } -#endif #endif // Tagged operator test @@ -1834,7 +1817,6 @@ struct TestMDRange_4D { static void test_for4(const int N0, const int N1, const int N2, const int N3) { #if defined(KOKKOS_ENABLE_CXX11_DISPATCH_LAMBDA) -#if !defined(KOKKOS_ENABLE_CUDA) || (8000 <= CUDA_VERSION) { typedef typename Kokkos::MDRangePolicy, Kokkos::IndexType > @@ -1878,7 +1860,6 @@ struct TestMDRange_4D { ASSERT_EQ(counter, 0); } -#endif #endif { @@ -2206,7 +2187,6 @@ struct TestMDRange_5D { static void test_reduce5(const int N0, const int N1, const int N2, const int N3, const int N4) { #if defined(KOKKOS_ENABLE_CXX11_DISPATCH_LAMBDA) -#if !defined(KOKKOS_ENABLE_CUDA) || (8000 <= CUDA_VERSION) { typedef typename Kokkos::MDRangePolicy, Kokkos::IndexType > @@ -2220,12 +2200,12 @@ struct TestMDRange_5D { double sum = 0.0; parallel_reduce( range, - KOKKOS_LAMBDA(const int i, const int j, const int k, const int l, - const int m, double &lsum) { lsum += 1.0; }, + KOKKOS_LAMBDA(const int /*i*/, const int /*j*/, const int /*k*/, + const int /*l*/, const int /*m*/, + double &lsum) { lsum += 1.0; }, sum); ASSERT_EQ(sum, N0 * N1 * N2 * N3 * N4); } -#endif #endif { @@ -2320,7 +2300,6 @@ struct TestMDRange_5D { // Test Min reducer with lambda #if defined(KOKKOS_ENABLE_CXX11_DISPATCH_LAMBDA) -#if !defined(KOKKOS_ENABLE_CUDA) || (8000 <= CUDA_VERSION) { typedef typename Kokkos::MDRangePolicy, Kokkos::IndexType > @@ -2352,7 +2331,6 @@ struct TestMDRange_5D { ASSERT_EQ(min, 32.0); } -#endif #endif // Tagged operator test @@ -2404,7 +2382,6 @@ struct TestMDRange_5D { static void test_for5(const int N0, const int N1, const int N2, const int N3, const int N4) { #if defined(KOKKOS_ENABLE_CXX11_DISPATCH_LAMBDA) -#if !defined(KOKKOS_ENABLE_CUDA) || (8000 <= CUDA_VERSION) { typedef typename Kokkos::MDRangePolicy, Kokkos::IndexType > @@ -2452,7 +2429,6 @@ struct TestMDRange_5D { ASSERT_EQ(counter, 0); } -#endif #endif { @@ -2798,7 +2774,6 @@ struct TestMDRange_6D { static void test_reduce6(const int N0, const int N1, const int N2, const int N3, const int N4, const int N5) { #if defined(KOKKOS_ENABLE_CXX11_DISPATCH_LAMBDA) -#if !defined(KOKKOS_ENABLE_CUDA) || (8000 <= CUDA_VERSION) { typedef typename Kokkos::MDRangePolicy, Kokkos::IndexType > @@ -2812,13 +2787,12 @@ struct TestMDRange_6D { double sum = 0.0; parallel_reduce( range, - KOKKOS_LAMBDA(const int i, const int j, const int k, const int l, - const int m, const int n, + KOKKOS_LAMBDA(const int /*i*/, const int /*j*/, const int /*k*/, + const int /*l*/, const int /*m*/, const int /*n*/, double &lsum) { lsum += 1.0; }, sum); ASSERT_EQ(sum, N0 * N1 * N2 * N3 * N4 * N5); } -#endif #endif { @@ -2914,7 +2888,6 @@ struct TestMDRange_6D { // Test Min reducer with lambda #if defined(KOKKOS_ENABLE_CXX11_DISPATCH_LAMBDA) -#if !defined(KOKKOS_ENABLE_CUDA) || (8000 <= CUDA_VERSION) { typedef typename Kokkos::MDRangePolicy, Kokkos::IndexType > @@ -2948,7 +2921,6 @@ struct TestMDRange_6D { ASSERT_EQ(min, 64.0); } -#endif #endif // Tagged operator test @@ -3001,7 +2973,6 @@ struct TestMDRange_6D { static void test_for6(const int N0, const int N1, const int N2, const int N3, const int N4, const int N5) { #if defined(KOKKOS_ENABLE_CXX11_DISPATCH_LAMBDA) -#if !defined(KOKKOS_ENABLE_CUDA) || (8000 <= CUDA_VERSION) { typedef typename Kokkos::MDRangePolicy, Kokkos::IndexType > @@ -3051,7 +3022,6 @@ struct TestMDRange_6D { ASSERT_EQ(counter, 0); } -#endif #endif { diff --git a/lib/kokkos/core/unit_test/TestMemoryPool.hpp b/lib/kokkos/core/unit_test/TestMemoryPool.hpp index bc78a2908ed316f1c48a645c75fea8b5abbd1337..cc18a90305171640a8ecb02cabd970939ecc90f5 100644 --- a/lib/kokkos/core/unit_test/TestMemoryPool.hpp +++ b/lib/kokkos/core/unit_test/TestMemoryPool.hpp @@ -162,10 +162,10 @@ void test_host_memory_pool_stats() { // Aborts because exceeds max block size: // void * p2048 = pool.allocate(2048); - ASSERT_NE(p0064, (void*)0); - ASSERT_NE(p0128, (void*)0); - ASSERT_NE(p0256, (void*)0); - ASSERT_NE(p1024, (void*)0); + ASSERT_NE(p0064, nullptr); + ASSERT_NE(p0128, nullptr); + ASSERT_NE(p0256, nullptr); + ASSERT_NE(p1024, nullptr); pool.deallocate(p0064, 64); pool.deallocate(p0128, 128); @@ -475,17 +475,15 @@ void test_memory_pool_corners(const bool print_statistics, template struct TestMemoryPoolHuge { - TestMemoryPoolHuge() {} - enum : size_t { num_superblock = 0 }; using value_type = long; KOKKOS_INLINE_FUNCTION - void operator()(int i, long& err) const noexcept {} + void operator()(int /*i*/, long& /*err*/) const noexcept {} KOKKOS_INLINE_FUNCTION - void operator()(int i) const noexcept {} + void operator()(int /*i*/) const noexcept {} }; template diff --git a/lib/kokkos/core/unit_test/TestRange.hpp b/lib/kokkos/core/unit_test/TestRange.hpp index 1fd6a508f783a6126cea57a998c53b4c509533c1..9bd13ad23958f1ce0a8c8897d10b73af00894f65 100644 --- a/lib/kokkos/core/unit_test/TestRange.hpp +++ b/lib/kokkos/core/unit_test/TestRange.hpp @@ -54,9 +54,10 @@ template struct TestRange { typedef int value_type; ///< typedef required for the parallel_reduce - typedef Kokkos::View view_type; + typedef Kokkos::View view_type; view_type m_flags; + view_type result_view; struct VerifyInitTag {}; struct ResetTag {}; @@ -65,9 +66,19 @@ struct TestRange { struct VerifyOffsetTag {}; int N; +#ifndef KOKKOS_WORKAROUND_OPENMPTARGET_GCC static const int offset = 13; +#else + int offset; +#endif TestRange(const size_t N_) - : m_flags(Kokkos::ViewAllocateWithoutInitializing("flags"), N_), N(N_) {} + : m_flags(Kokkos::ViewAllocateWithoutInitializing("flags"), N_), + result_view(Kokkos::ViewAllocateWithoutInitializing("results"), N_), + N(N_) { +#ifdef KOKKOS_WORKAROUND_OPENMPTARGET_GCC + offset = 13; +#endif + } void test_for() { typename view_type::HostMirror host_flags = @@ -185,7 +196,7 @@ struct TestRange { //---------------------------------------- void test_reduce() { - int total = 0; + value_type total = 0; Kokkos::parallel_for(Kokkos::RangePolicy(0, N), *this); @@ -220,15 +231,31 @@ struct TestRange { Kokkos::parallel_for(Kokkos::RangePolicy(0, N), *this); + auto check_scan_results = [&]() { + auto const host_mirror = + Kokkos::create_mirror_view_and_copy(Kokkos::HostSpace(), result_view); + for (int i = 0; i < N; ++i) { + if (((i + 1) * i) / 2 != host_mirror(i)) { + std::cout << "Error at " << i << std::endl; + EXPECT_EQ(size_t(((i + 1) * i) / 2), size_t(host_mirror(i))); + } + } + }; + Kokkos::parallel_scan( "TestKernelScan", Kokkos::RangePolicy(0, N), *this); - int total = 0; + check_scan_results(); + + value_type total = 0; Kokkos::parallel_scan( "TestKernelScanWithTotal", Kokkos::RangePolicy(0, N), *this, total); + + check_scan_results(); + ASSERT_EQ(size_t((N - 1) * (N) / 2), size_t(total)); // sum( 0 .. N-1 ) } @@ -239,16 +266,16 @@ struct TestRange { if (final) { if (update != (i * (i + 1)) / 2) { - printf("TestRange::test_scan error %d : %d != %d\n", i, - (i * (i + 1)) / 2, m_flags(i)); + printf("TestRange::test_scan error (%d,%d) : %d != %d\n", i, m_flags(i), + (i * (i + 1)) / 2, update); } + result_view(i) = update; } } void test_dynamic_policy() { - auto const N_no_implicit_capture = N; #if defined(KOKKOS_ENABLE_CXX11_DISPATCH_LAMBDA) -#if !defined(KOKKOS_ENABLE_CUDA) || (8000 <= CUDA_VERSION) + auto const N_no_implicit_capture = N; typedef Kokkos::RangePolicy > policy_t; @@ -273,7 +300,7 @@ struct TestRange { int error = 0; Kokkos::parallel_reduce( Kokkos::RangePolicy(0, N), - KOKKOS_LAMBDA(const int &i, int &lsum) { + KOKKOS_LAMBDA(const int &i, value_type &lsum) { lsum += (a(i) != (i < N_no_implicit_capture / 2 ? 1 : 10000)); }, error); @@ -300,10 +327,10 @@ struct TestRange { count("Count", ExecSpace::concurrency()); Kokkos::View a("A", N); - int sum = 0; + value_type sum = 0; Kokkos::parallel_reduce( policy_t(0, N), - KOKKOS_LAMBDA(const int &i, int &lsum) { + KOKKOS_LAMBDA(const int &i, value_type &lsum) { for (int k = 0; k < (i < N_no_implicit_capture / 2 ? 1 : 10000); k++) { a(i)++; @@ -321,7 +348,7 @@ struct TestRange { int error = 0; Kokkos::parallel_reduce( Kokkos::RangePolicy(0, N), - KOKKOS_LAMBDA(const int &i, int &lsum) { + KOKKOS_LAMBDA(const int &i, value_type &lsum) { lsum += (a(i) != (i < N_no_implicit_capture / 2 ? 1 : 10000)); }, error); @@ -342,7 +369,6 @@ struct TestRange { //} } } -#endif #endif } }; @@ -417,7 +443,7 @@ TEST(TEST_CATEGORY, range_scan) { TestRange > f(0); f.test_scan(); } -#if !defined(KOKKOS_ENABLE_CUDA) && !defined(KOKKOS_ENABLE_ROCM) +#if !defined(KOKKOS_ENABLE_CUDA) && !defined(KOKKOS_ENABLE_HIP) { TestRange > f(0); f.test_dynamic_policy(); @@ -432,7 +458,7 @@ TEST(TEST_CATEGORY, range_scan) { TestRange > f(3); f.test_scan(); } -#if !defined(KOKKOS_ENABLE_CUDA) && !defined(KOKKOS_ENABLE_ROCM) +#if !defined(KOKKOS_ENABLE_CUDA) && !defined(KOKKOS_ENABLE_HIP) { TestRange > f(3); f.test_dynamic_policy(); @@ -447,7 +473,7 @@ TEST(TEST_CATEGORY, range_scan) { TestRange > f(1001); f.test_scan(); } -#if !defined(KOKKOS_ENABLE_CUDA) && !defined(KOKKOS_ENABLE_ROCM) +#if !defined(KOKKOS_ENABLE_CUDA) && !defined(KOKKOS_ENABLE_HIP) { TestRange > f(1001); f.test_dynamic_policy(); diff --git a/lib/kokkos/core/unit_test/TestRangeRequire.hpp b/lib/kokkos/core/unit_test/TestRangeRequire.hpp new file mode 100644 index 0000000000000000000000000000000000000000..a75af0b95b812cdafe317350f4a6d3683a27d97b --- /dev/null +++ b/lib/kokkos/core/unit_test/TestRangeRequire.hpp @@ -0,0 +1,518 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 3.0 +// Copyright (2020) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +#include + +#include + +// This file is largely duplicating TestRange.hpp but it applies +// Kokkos::Experimental require at every place where a parallel +// operation is executed. + +namespace Test { + +namespace { + +template +struct TestRangeRequire { + typedef int value_type; ///< typedef required for the parallel_reduce + + typedef Kokkos::View view_type; + + view_type m_flags; + + struct VerifyInitTag {}; + struct ResetTag {}; + struct VerifyResetTag {}; + struct OffsetTag {}; + struct VerifyOffsetTag {}; + + int N; + static const int offset = 13; + TestRangeRequire(const size_t N_) + : m_flags(Kokkos::ViewAllocateWithoutInitializing("flags"), N_), N(N_) {} + + void test_for() { + typename view_type::HostMirror host_flags = + Kokkos::create_mirror_view(m_flags); + + Kokkos::parallel_for( + Kokkos::Experimental::require( + Kokkos::RangePolicy(0, N), Property()), + *this); + +#if defined(KOKKOS_ENABLE_PROFILING) + { + typedef TestRangeRequire ThisType; + std::string label("parallel_for"); + Kokkos::Impl::ParallelConstructName pcn(label); + ASSERT_EQ(pcn.get(), label); + std::string empty_label(""); + Kokkos::Impl::ParallelConstructName empty_pcn( + empty_label); + ASSERT_EQ(empty_pcn.get(), typeid(ThisType).name()); + } +#endif + + Kokkos::parallel_for( + Kokkos::Experimental::require( + Kokkos::RangePolicy(0, N), + Property()), + *this); + +#if defined(KOKKOS_ENABLE_PROFILING) + { + typedef TestRangeRequire ThisType; + std::string label("parallel_for"); + Kokkos::Impl::ParallelConstructName pcn(label); + ASSERT_EQ(pcn.get(), label); + std::string empty_label(""); + Kokkos::Impl::ParallelConstructName empty_pcn( + empty_label); + ASSERT_EQ(empty_pcn.get(), std::string(typeid(ThisType).name()) + "/" + + typeid(VerifyInitTag).name()); + } +#endif + + Kokkos::deep_copy(host_flags, m_flags); + + int error_count = 0; + for (int i = 0; i < N; ++i) { + if (int(i) != host_flags(i)) ++error_count; + } + ASSERT_EQ(error_count, int(0)); + + Kokkos::parallel_for( + Kokkos::Experimental::require( + Kokkos::RangePolicy(0, N), + Property()), + *this); + Kokkos::parallel_for( + std::string("TestKernelFor"), + Kokkos::Experimental::require( + Kokkos::RangePolicy(0, N), + Property()), + *this); + + Kokkos::deep_copy(host_flags, m_flags); + + error_count = 0; + for (int i = 0; i < N; ++i) { + if (int(2 * i) != host_flags(i)) ++error_count; + } + ASSERT_EQ(error_count, int(0)); + + Kokkos::parallel_for( + Kokkos::Experimental::require( + Kokkos::RangePolicy(offset, + N + offset), + Property()), + *this); + Kokkos::parallel_for( + std::string("TestKernelFor"), + Kokkos::Experimental::require( + Kokkos::RangePolicy, + VerifyOffsetTag>(0, N), + Property()), + *this); + + Kokkos::deep_copy(host_flags, m_flags); + + error_count = 0; + for (int i = 0; i < N; ++i) { + if (i + offset != host_flags(i)) ++error_count; + } + ASSERT_EQ(error_count, int(0)); + } + + KOKKOS_INLINE_FUNCTION + void operator()(const int i) const { m_flags(i) = i; } + + KOKKOS_INLINE_FUNCTION + void operator()(const VerifyInitTag &, const int i) const { + if (i != m_flags(i)) { + printf("TestRangeRequire::test_for error at %d != %d\n", i, m_flags(i)); + } + } + + KOKKOS_INLINE_FUNCTION + void operator()(const ResetTag &, const int i) const { + m_flags(i) = 2 * m_flags(i); + } + + KOKKOS_INLINE_FUNCTION + void operator()(const VerifyResetTag &, const int i) const { + if (2 * i != m_flags(i)) { + printf("TestRangeRequire::test_for error at %d != %d\n", i, m_flags(i)); + } + } + + KOKKOS_INLINE_FUNCTION + void operator()(const OffsetTag &, const int i) const { + m_flags(i - offset) = i; + } + + KOKKOS_INLINE_FUNCTION + void operator()(const VerifyOffsetTag &, const int i) const { + if (i + offset != m_flags(i)) { + printf("TestRangeRequire::test_for error at %d != %d\n", i + offset, + m_flags(i)); + } + } + + //---------------------------------------- + + void test_reduce() { + int total = 0; + + Kokkos::parallel_for( + Kokkos::Experimental::require( + Kokkos::RangePolicy(0, N), Property()), + *this); + + Kokkos::parallel_reduce( + "TestKernelReduce", + Kokkos::Experimental::require( + Kokkos::RangePolicy(0, N), Property()), + *this, total); + // sum( 0 .. N-1 ) + ASSERT_EQ(size_t((N - 1) * (N) / 2), size_t(total)); + + Kokkos::parallel_reduce( + Kokkos::Experimental::require( + Kokkos::RangePolicy(offset, + N + offset), + Property()), + *this, total); + // sum( 1 .. N ) + ASSERT_EQ(size_t((N) * (N + 1) / 2), size_t(total)); + } + + KOKKOS_INLINE_FUNCTION + void operator()(const int i, value_type &update) const { + update += m_flags(i); + } + + KOKKOS_INLINE_FUNCTION + void operator()(const OffsetTag &, const int i, value_type &update) const { + update += 1 + m_flags(i - offset); + } + + //---------------------------------------- + + void test_scan() { + Kokkos::parallel_for(Kokkos::RangePolicy(0, N), + *this); + + Kokkos::parallel_scan( + "TestKernelScan", + Kokkos::RangePolicy(0, N), *this); + + int total = 0; + Kokkos::parallel_scan( + "TestKernelScanWithTotal", + Kokkos::RangePolicy(0, N), *this, + total); + ASSERT_EQ(size_t((N - 1) * (N) / 2), size_t(total)); // sum( 0 .. N-1 ) + } + + KOKKOS_INLINE_FUNCTION + void operator()(const OffsetTag &, const int i, value_type &update, + bool final) const { + update += m_flags(i); + + if (final) { + if (update != (i * (i + 1)) / 2) { + printf("TestRangeRequire::test_scan error %d : %d != %d\n", i, + (i * (i + 1)) / 2, m_flags(i)); + } + } + } + + void test_dynamic_policy() { +#if defined(KOKKOS_ENABLE_CXX11_DISPATCH_LAMBDA) + auto const N_no_implicit_capture = N; + typedef Kokkos::RangePolicy > + policy_t; + + { + Kokkos::View > + count("Count", ExecSpace::concurrency()); + Kokkos::View a("A", N); + + Kokkos::parallel_for( + policy_t(0, N), KOKKOS_LAMBDA(const int &i) { + for (int k = 0; k < (i < N_no_implicit_capture / 2 ? 1 : 10000); + k++) { + a(i)++; + } +#ifdef KOKKOS_ENABLE_DEPRECATED_CODE + count(ExecSpace::hardware_thread_id())++; +#else + count( ExecSpace::impl_hardware_thread_id() )++; +#endif + }); + + int error = 0; + Kokkos::parallel_reduce( + Kokkos::RangePolicy(0, N), + KOKKOS_LAMBDA(const int &i, int &lsum) { + lsum += (a(i) != (i < N_no_implicit_capture / 2 ? 1 : 10000)); + }, + error); + ASSERT_EQ(error, 0); + + if ((ExecSpace::concurrency() > (int)1) && + (N > static_cast(4 * ExecSpace::concurrency()))) { + size_t min = N; + size_t max = 0; + for (int t = 0; t < ExecSpace::concurrency(); t++) { + if (count(t) < min) min = count(t); + if (count(t) > max) max = count(t); + } + ASSERT_TRUE(min < max); + + // if ( ExecSpace::concurrency() > 2 ) { + // ASSERT_TRUE( 2 * min < max ); + //} + } + } + + { + Kokkos::View > + count("Count", ExecSpace::concurrency()); + Kokkos::View a("A", N); + + int sum = 0; + Kokkos::parallel_reduce( + policy_t(0, N), + KOKKOS_LAMBDA(const int &i, int &lsum) { + for (int k = 0; k < (i < N_no_implicit_capture / 2 ? 1 : 10000); + k++) { + a(i)++; + } +#ifdef KOKKOS_ENABLE_DEPRECATED_CODE + count(ExecSpace::hardware_thread_id())++; +#else + count(ExecSpace::impl_hardware_thread_id())++; +#endif + lsum++; + }, + sum); + ASSERT_EQ(sum, N); + + int error = 0; + Kokkos::parallel_reduce( + Kokkos::RangePolicy(0, N), + KOKKOS_LAMBDA(const int &i, int &lsum) { + lsum += (a(i) != (i < N_no_implicit_capture / 2 ? 1 : 10000)); + }, + error); + ASSERT_EQ(error, 0); + + if ((ExecSpace::concurrency() > (int)1) && + (N > static_cast(4 * ExecSpace::concurrency()))) { + size_t min = N; + size_t max = 0; + for (int t = 0; t < ExecSpace::concurrency(); t++) { + if (count(t) < min) min = count(t); + if (count(t) > max) max = count(t); + } + ASSERT_TRUE(min < max); + + // if ( ExecSpace::concurrency() > 2 ) { + // ASSERT_TRUE( 2 * min < max ); + //} + } + } +#endif + } +}; + +} // namespace + +TEST(TEST_CATEGORY, range_for_require) { + using Property = Kokkos::Experimental::WorkItemProperty::HintLightWeight_t; + { + TestRangeRequire, Property> + f(0); + f.test_for(); + } + { + TestRangeRequire, + Property> + f(0); + f.test_for(); + } + + { + TestRangeRequire, Property> + f(2); + f.test_for(); + } + { + TestRangeRequire, + Property> + f(3); + f.test_for(); + } + + { + TestRangeRequire, Property> + f(1000); + f.test_for(); + } + { + TestRangeRequire, + Property> + f(1001); + f.test_for(); + } +} + +TEST(TEST_CATEGORY, range_reduce_require) { + using Property = Kokkos::Experimental::WorkItemProperty::HintLightWeight_t; + { + TestRangeRequire, Property> + f(0); + f.test_reduce(); + } + { + TestRangeRequire, + Property> + f(0); + f.test_reduce(); + } + + { + TestRangeRequire, Property> + f(2); + f.test_reduce(); + } + { + TestRangeRequire, + Property> + f(3); + f.test_reduce(); + } + + { + TestRangeRequire, Property> + f(1000); + f.test_reduce(); + } + { + TestRangeRequire, + Property> + f(1001); + f.test_reduce(); + } +} + +#ifndef KOKKOS_ENABLE_OPENMPTARGET +TEST(TEST_CATEGORY, range_scan_require) { + using Property = Kokkos::Experimental::WorkItemProperty::HintLightWeight_t; + { + TestRangeRequire, Property> + f(0); + f.test_scan(); + } + { + TestRangeRequire, + Property> + f(0); + f.test_scan(); + } +#if !defined(KOKKOS_ENABLE_CUDA) && !defined(KOKKOS_ENABLE_HIP) + { + TestRangeRequire, + Property> + f(0); + f.test_dynamic_policy(); + } +#endif + + { + TestRangeRequire, Property> + f(2); + f.test_scan(); + } + { + TestRangeRequire, + Property> + f(3); + f.test_scan(); + } +#if !defined(KOKKOS_ENABLE_CUDA) && !defined(KOKKOS_ENABLE_HIP) + { + TestRangeRequire, + Property> + f(3); + f.test_dynamic_policy(); + } +#endif + + { + TestRangeRequire, Property> + f(1000); + f.test_scan(); + } + { + TestRangeRequire, + Property> + f(1001); + f.test_scan(); + } +#if !defined(KOKKOS_ENABLE_CUDA) && !defined(KOKKOS_ENABLE_HIP) + { + TestRangeRequire, + Property> + f(1001); + f.test_dynamic_policy(); + } +#endif +} +#endif +} // namespace Test diff --git a/lib/kokkos/core/unit_test/TestReduce.hpp b/lib/kokkos/core/unit_test/TestReduce.hpp index 6c518429a05c8bda0df9ad89ddddb14a4446a686..d63d5e8d4a75d5c29d4b2afadaeadb1790f77ba6 100644 --- a/lib/kokkos/core/unit_test/TestReduce.hpp +++ b/lib/kokkos/core/unit_test/TestReduce.hpp @@ -95,12 +95,12 @@ class ReduceFunctor { }; template -class ReduceFunctorFinal : public ReduceFunctor { +class ReduceFunctorFinal : public ReduceFunctor { public: - typedef typename ReduceFunctor::value_type value_type; + typedef typename ReduceFunctor::value_type value_type; KOKKOS_INLINE_FUNCTION - ReduceFunctorFinal(const size_t n) : ReduceFunctor(n) {} + ReduceFunctorFinal(const size_t n) : ReduceFunctor(n) {} KOKKOS_INLINE_FUNCTION void final(value_type& dst) const { @@ -198,11 +198,11 @@ class RuntimeReduceMinMax { template class RuntimeReduceFunctorFinal - : public RuntimeReduceFunctor { + : public RuntimeReduceFunctor { public: - typedef RuntimeReduceFunctor base_type; + typedef RuntimeReduceFunctor base_type; typedef typename base_type::value_type value_type; - typedef long scalar_type; + typedef int64_t scalar_type; RuntimeReduceFunctorFinal(const size_t theNwork, const size_t count) : base_type(theNwork, count) {} @@ -237,9 +237,8 @@ class TestReduce { value_type result[Repeat]; - const unsigned long nw = nwork; - const unsigned long nsum = - nw % 2 ? nw * ((nw + 1) / 2) : (nw / 2) * (nw + 1); + const uint64_t nw = nwork; + const uint64_t nsum = nw % 2 ? nw * ((nw + 1) / 2) : (nw / 2) * (nw + 1); for (unsigned i = 0; i < Repeat; ++i) { Kokkos::parallel_reduce(nwork, functor_type(nwork), result[i]); @@ -247,7 +246,7 @@ class TestReduce { for (unsigned i = 0; i < Repeat; ++i) { for (unsigned j = 0; j < Count; ++j) { - const unsigned long correct = 0 == j % 3 ? nw : nsum; + const uint64_t correct = 0 == j % 3 ? nw : nsum; ASSERT_EQ((ScalarType)correct, result[i].value[j]); } } @@ -262,9 +261,8 @@ class TestReduce { value_type result[Repeat]; - const unsigned long nw = nwork; - const unsigned long nsum = - nw % 2 ? nw * ((nw + 1) / 2) : (nw / 2) * (nw + 1); + const uint64_t nw = nwork; + const uint64_t nsum = nw % 2 ? nw * ((nw + 1) / 2) : (nw / 2) * (nw + 1); for (unsigned i = 0; i < Repeat; ++i) { if (i % 2 == 0) { @@ -277,7 +275,7 @@ class TestReduce { for (unsigned i = 0; i < Repeat; ++i) { for (unsigned j = 0; j < Count; ++j) { - const unsigned long correct = 0 == j % 3 ? nw : nsum; + const uint64_t correct = 0 == j % 3 ? nw : nsum; ASSERT_EQ((ScalarType)correct, -result[i].value[j]); } } @@ -305,9 +303,8 @@ class TestReduceDynamic { ScalarType result[Repeat][Count]; - const unsigned long nw = nwork; - const unsigned long nsum = - nw % 2 ? nw * ((nw + 1) / 2) : (nw / 2) * (nw + 1); + const uint64_t nw = nwork; + const uint64_t nsum = nw % 2 ? nw * ((nw + 1) / 2) : (nw / 2) * (nw + 1); for (unsigned i = 0; i < Repeat; ++i) { if (i % 2 == 0) { @@ -320,7 +317,7 @@ class TestReduceDynamic { for (unsigned i = 0; i < Repeat; ++i) { for (unsigned j = 0; j < Count; ++j) { - const unsigned long correct = 0 == j % 3 ? nw : nsum; + const uint64_t correct = 0 == j % 3 ? nw : nsum; ASSERT_EQ((ScalarType)correct, result[i][j]); } } @@ -351,7 +348,7 @@ class TestReduceDynamic { const ScalarType correct = (j % 2) ? amax : amin; ASSERT_EQ((ScalarType)correct, result[i][j]); } else { - const unsigned long correct = j % 2 ? 1 : nwork; + const uint64_t correct = j % 2 ? 1 : nwork; ASSERT_EQ((ScalarType)correct, result[i][j]); } } @@ -366,9 +363,8 @@ class TestReduceDynamic { typename functor_type::scalar_type result[Repeat][Count]; - const unsigned long nw = nwork; - const unsigned long nsum = - nw % 2 ? nw * ((nw + 1) / 2) : (nw / 2) * (nw + 1); + const uint64_t nw = nwork; + const uint64_t nsum = nw % 2 ? nw * ((nw + 1) / 2) : (nw / 2) * (nw + 1); for (unsigned i = 0; i < Repeat; ++i) { if (i % 2 == 0) { @@ -381,7 +377,7 @@ class TestReduceDynamic { for (unsigned i = 0; i < Repeat; ++i) { for (unsigned j = 0; j < Count; ++j) { - const unsigned long correct = 0 == j % 3 ? nw : nsum; + const uint64_t correct = 0 == j % 3 ? nw : nsum; ASSERT_EQ((ScalarType)correct, -result[i][j]); } } @@ -405,9 +401,8 @@ class TestReduceDynamicView { const unsigned CountLimit = 23; - const unsigned long nw = nwork; - const unsigned long nsum = - nw % 2 ? nw * ((nw + 1) / 2) : (nw / 2) * (nw + 1); + const uint64_t nw = nwork; + const uint64_t nsum = nw % 2 ? nw * ((nw + 1) / 2) : (nw / 2) * (nw + 1); for (unsigned count = 0; count < CountLimit; ++count) { result_type result("result", count); @@ -425,7 +420,7 @@ class TestReduceDynamicView { } for (unsigned j = 0; j < count; ++j) { - const unsigned long correct = 0 == j % 3 ? nw : nsum; + const uint64_t correct = 0 == j % 3 ? nw : nsum; ASSERT_EQ(host_result(j), (ScalarType)correct); host_result(j) = 0; } @@ -435,9 +430,9 @@ class TestReduceDynamicView { } // namespace -TEST(TEST_CATEGORY, long_reduce) { - TestReduce(0); - TestReduce(1000000); +TEST(TEST_CATEGORY, int64_t_reduce) { + TestReduce(0); + TestReduce(1000000); } TEST(TEST_CATEGORY, double_reduce) { @@ -445,9 +440,9 @@ TEST(TEST_CATEGORY, double_reduce) { TestReduce(1000000); } -TEST(TEST_CATEGORY, long_reduce_dynamic) { - TestReduceDynamic(0); - TestReduceDynamic(1000000); +TEST(TEST_CATEGORY, int64_t_reduce_dynamic) { + TestReduceDynamic(0); + TestReduceDynamic(1000000); } TEST(TEST_CATEGORY, double_reduce_dynamic) { @@ -455,9 +450,9 @@ TEST(TEST_CATEGORY, double_reduce_dynamic) { TestReduceDynamic(1000000); } -TEST(TEST_CATEGORY, long_reduce_dynamic_view) { - TestReduceDynamicView(0); - TestReduceDynamicView(1000000); +TEST(TEST_CATEGORY, int64_t_reduce_dynamic_view) { + TestReduceDynamicView(0); + TestReduceDynamicView(1000000); } } // namespace Test diff --git a/lib/kokkos/core/unit_test/TestReduceCombinatorical.hpp b/lib/kokkos/core/unit_test/TestReduceCombinatorical.hpp index a03dbd114189106ce16d5cc5a5a0b03e5ee332dd..fe85f360cb3cee8a11248f786af688f5bb8bcc2b 100644 --- a/lib/kokkos/core/unit_test/TestReduceCombinatorical.hpp +++ b/lib/kokkos/core/unit_test/TestReduceCombinatorical.hpp @@ -467,10 +467,10 @@ struct TestReduceCombinatoricalInstantiation { } template - static void AddLambdaRange(Kokkos::InvalidType, Args... args) {} + static void AddLambdaRange(Kokkos::InvalidType, Args... /*args*/) {} template - static void AddLambdaTeam(Kokkos::InvalidType, Args... args) {} + static void AddLambdaTeam(Kokkos::InvalidType, Args... /*args*/) {} template static void AddFunctor(Args... args) { diff --git a/lib/kokkos/core/unit_test/TestResize.hpp b/lib/kokkos/core/unit_test/TestResize.hpp index 14d1295538132ad83a31d8214fd75b9464c4f7e7..32a85f03e9ae30347eac6011dcf6dd217f34713b 100644 --- a/lib/kokkos/core/unit_test/TestResize.hpp +++ b/lib/kokkos/core/unit_test/TestResize.hpp @@ -71,7 +71,7 @@ void impl_testResize() { typedef Kokkos::View view_type; view_type view_1d("view_1d", sizes[0]); const int* oldPointer = view_1d.data(); - EXPECT_TRUE(oldPointer != NULL); + EXPECT_TRUE(oldPointer != nullptr); resize_dispatch(Tag{}, view_1d, sizes[0]); const int* newPointer = view_1d.data(); EXPECT_TRUE(oldPointer == newPointer); @@ -80,7 +80,7 @@ void impl_testResize() { typedef Kokkos::View view_type; view_type view_2d("view_2d", sizes[0], sizes[1]); const int* oldPointer = view_2d.data(); - EXPECT_TRUE(oldPointer != NULL); + EXPECT_TRUE(oldPointer != nullptr); resize_dispatch(Tag{}, view_2d, sizes[0], sizes[1]); const int* newPointer = view_2d.data(); EXPECT_TRUE(oldPointer == newPointer); @@ -89,7 +89,7 @@ void impl_testResize() { typedef Kokkos::View view_type; view_type view_3d("view_3d", sizes[0], sizes[1], sizes[2]); const int* oldPointer = view_3d.data(); - EXPECT_TRUE(oldPointer != NULL); + EXPECT_TRUE(oldPointer != nullptr); resize_dispatch(Tag{}, view_3d, sizes[0], sizes[1], sizes[2]); const int* newPointer = view_3d.data(); EXPECT_TRUE(oldPointer == newPointer); @@ -98,7 +98,7 @@ void impl_testResize() { typedef Kokkos::View view_type; view_type view_4d("view_4d", sizes[0], sizes[1], sizes[2], sizes[3]); const int* oldPointer = view_4d.data(); - EXPECT_TRUE(oldPointer != NULL); + EXPECT_TRUE(oldPointer != nullptr); resize_dispatch(Tag{}, view_4d, sizes[0], sizes[1], sizes[2], sizes[3]); const int* newPointer = view_4d.data(); EXPECT_TRUE(oldPointer == newPointer); @@ -108,7 +108,7 @@ void impl_testResize() { view_type view_5d("view_5d", sizes[0], sizes[1], sizes[2], sizes[3], sizes[4]); const int* oldPointer = view_5d.data(); - EXPECT_TRUE(oldPointer != NULL); + EXPECT_TRUE(oldPointer != nullptr); resize_dispatch(Tag{}, view_5d, sizes[0], sizes[1], sizes[2], sizes[3], sizes[4]); const int* newPointer = view_5d.data(); @@ -119,7 +119,7 @@ void impl_testResize() { view_type view_6d("view_6d", sizes[0], sizes[1], sizes[2], sizes[3], sizes[4], sizes[5]); const int* oldPointer = view_6d.data(); - EXPECT_TRUE(oldPointer != NULL); + EXPECT_TRUE(oldPointer != nullptr); resize_dispatch(Tag{}, view_6d, sizes[0], sizes[1], sizes[2], sizes[3], sizes[4], sizes[5]); const int* newPointer = view_6d.data(); @@ -130,7 +130,7 @@ void impl_testResize() { view_type view_7d("view_7d", sizes[0], sizes[1], sizes[2], sizes[3], sizes[4], sizes[5], sizes[6]); const int* oldPointer = view_7d.data(); - EXPECT_TRUE(oldPointer != NULL); + EXPECT_TRUE(oldPointer != nullptr); resize_dispatch(Tag{}, view_7d, sizes[0], sizes[1], sizes[2], sizes[3], sizes[4], sizes[5], sizes[6]); const int* newPointer = view_7d.data(); @@ -141,7 +141,7 @@ void impl_testResize() { view_type view_8d("view_8d", sizes[0], sizes[1], sizes[2], sizes[3], sizes[4], sizes[5], sizes[6], sizes[7]); const int* oldPointer = view_8d.data(); - EXPECT_TRUE(oldPointer != NULL); + EXPECT_TRUE(oldPointer != nullptr); resize_dispatch(Tag{}, view_8d, sizes[0], sizes[1], sizes[2], sizes[3], sizes[4], sizes[5], sizes[6], sizes[7]); const int* newPointer = view_8d.data(); diff --git a/lib/kokkos/core/unit_test/TestScan.hpp b/lib/kokkos/core/unit_test/TestScan.hpp index 483f1868802c95601954ca6d06f5681916eda32d..f7ebbb62a30fb9127356dd66619c9b9db7cf9db4 100644 --- a/lib/kokkos/core/unit_test/TestScan.hpp +++ b/lib/kokkos/core/unit_test/TestScan.hpp @@ -50,7 +50,7 @@ namespace Test { template struct TestScan { typedef Device execution_space; - typedef long int value_type; + typedef int64_t value_type; Kokkos::View > errors; @@ -98,10 +98,12 @@ struct TestScan { Kokkos::parallel_scan(N, *this); - long long int total = 0; + int64_t total = 0; Kokkos::parallel_scan(N, *this, total); - run_check(size_t((N + 1) * N / 2), size_t(total)); + // We can't return a value in a constructor so use a lambda as wrapper to + // ignore it. + [&] { ASSERT_EQ(size_t((N + 1) * N / 2), size_t(total)); }(); check_error(); } @@ -129,10 +131,6 @@ struct TestScan { (void)TestScan(i); } } - - void run_check(const size_t& expected, const size_t& actual) { - ASSERT_EQ(expected, actual); - } }; TEST(TEST_CATEGORY, scan) { diff --git a/lib/kokkos/core/unit_test/TestSharedAlloc.hpp b/lib/kokkos/core/unit_test/TestSharedAlloc.hpp index d284b7d61eed0a3b147c29ef26744606c82ceb6a..1b67e29d70922c1605ea14ae72bf65a97707a758 100644 --- a/lib/kokkos/core/unit_test/TestSharedAlloc.hpp +++ b/lib/kokkos/core/unit_test/TestSharedAlloc.hpp @@ -116,7 +116,7 @@ void test_shared_alloc() { #endif Kokkos::parallel_for(range, [=](size_t i) { - while (0 != + while (nullptr != (r[i] = static_cast(RecordBase::decrement(r[i])))) { #ifdef KOKKOS_DEBUG if (r[i]->use_count() == 1) RecordBase::is_sane(r[i]); @@ -157,7 +157,7 @@ void test_shared_alloc() { #endif Kokkos::parallel_for(range, [=](size_t i) { - while (0 != + while (nullptr != (r[i] = static_cast(RecordBase::decrement(r[i])))) { #ifdef KOKKOS_DEBUG if (r[i]->use_count() == 1) RecordBase::is_sane(r[i]); diff --git a/lib/kokkos/core/unit_test/TestTaskScheduler.hpp b/lib/kokkos/core/unit_test/TestTaskScheduler.hpp index 9f593a00fdac800b1ecd4b67efb479d4fbea5c23..ebfdcf1df3fb9b350c21515d88c1bbdf2f25dafc 100644 --- a/lib/kokkos/core/unit_test/TestTaskScheduler.hpp +++ b/lib/kokkos/core/unit_test/TestTaskScheduler.hpp @@ -843,11 +843,14 @@ struct TestMultipleDependence { #undef TEST_SCHEDULER #undef TEST_SCHEDULER_SUFFIX +// KOKKOS WORKAROUND WIN32: Theses tests hang with msvc +#ifndef _WIN32 #define TEST_SCHEDULER_SUFFIX _chase_lev #define TEST_SCHEDULER Kokkos::ChaseLevTaskScheduler #include "TestTaskScheduler_single.hpp" #undef TEST_SCHEDULER #undef TEST_SCHEDULER_SUFFIX +#endif #if 0 #define TEST_SCHEDULER_SUFFIX _fixed_mempool diff --git a/lib/kokkos/core/unit_test/TestTeam.hpp b/lib/kokkos/core/unit_test/TestTeam.hpp index e19c1c160d2625e09dc820a13dcef592b6d9ade1..d1ee0039696e9f1c0e94f8bdd23b7c90948398c8 100644 --- a/lib/kokkos/core/unit_test/TestTeam.hpp +++ b/lib/kokkos/core/unit_test/TestTeam.hpp @@ -100,7 +100,7 @@ struct TestTeamPolicy { struct NoOpTag {}; KOKKOS_INLINE_FUNCTION - void operator()(const NoOpTag &, const team_member &member) const {} + void operator()(const NoOpTag &, const team_member & /*member*/) const {} static void test_small_league_size() { int bs = 8; // batch size (number of elements per batch) @@ -139,7 +139,7 @@ struct TestTeamPolicy { struct ReduceTag {}; - typedef long value_type; + typedef int64_t value_type; KOKKOS_INLINE_FUNCTION void operator()(const team_member &member, value_type &update) const { @@ -164,9 +164,9 @@ struct TestTeamPolicy { policy_type_reduce(league_size, 1) .team_size_max(functor, Kokkos::ParallelReduceTag()); - const long N = team_size * league_size; + const int64_t N = team_size * league_size; - long total = 0; + int64_t total = 0; Kokkos::parallel_reduce(policy_type(league_size, team_size), functor, total); @@ -263,9 +263,8 @@ class TestReduceTeam { value_type result[Repeat]; - const unsigned long nw = nwork; - const unsigned long nsum = - nw % 2 ? nw * ((nw + 1) / 2) : (nw / 2) * (nw + 1); + const uint64_t nw = nwork; + const uint64_t nsum = nw % 2 ? nw * ((nw + 1) / 2) : (nw / 2) * (nw + 1); policy_type team_exec(nw, 1); @@ -284,7 +283,7 @@ class TestReduceTeam { for (unsigned i = 0; i < Repeat; ++i) { for (unsigned j = 0; j < Count; ++j) { - const unsigned long correct = 0 == j % 3 ? nw : nsum; + const uint64_t correct = 0 == j % 3 ? nw : nsum; ASSERT_EQ((ScalarType)correct, result[i].value[j]); } } @@ -302,7 +301,7 @@ class ScanTeamFunctor { public: typedef DeviceType execution_space; typedef Kokkos::TeamPolicy policy_type; - typedef long int value_type; + typedef int64_t value_type; Kokkos::View accum; Kokkos::View total; @@ -319,7 +318,7 @@ class ScanTeamFunctor { } struct JoinMax { - typedef long int value_type; + typedef int64_t value_type; KOKKOS_INLINE_FUNCTION void join(value_type volatile &dst, @@ -332,31 +331,31 @@ class ScanTeamFunctor { void operator()(const typename policy_type::member_type ind, value_type &error) const { if (0 == ind.league_rank() && 0 == ind.team_rank()) { - const long int thread_count = ind.league_size() * ind.team_size(); - total() = (thread_count * (thread_count + 1)) / 2; + const int64_t thread_count = ind.league_size() * ind.team_size(); + total() = (thread_count * (thread_count + 1)) / 2; } // Team max: - int long m = (long int)(ind.league_rank() + ind.team_rank()); - ind.team_reduce(Kokkos::Max(m)); + int64_t m = (int64_t)(ind.league_rank() + ind.team_rank()); + ind.team_reduce(Kokkos::Max(m)); if (m != ind.league_rank() + (ind.team_size() - 1)) { printf( "ScanTeamFunctor[%d.%d of %d.%d] reduce_max_answer(%ld) != " "reduce_max(%ld)\n", ind.league_rank(), ind.team_rank(), ind.league_size(), - ind.team_size(), - (long int)(ind.league_rank() + (ind.team_size() - 1)), m); + ind.team_size(), (int64_t)(ind.league_rank() + (ind.team_size() - 1)), + m); } // Scan: - const long int answer = (ind.league_rank() + 1) * ind.team_rank() + - (ind.team_rank() * (ind.team_rank() + 1)) / 2; + const int64_t answer = (ind.league_rank() + 1) * ind.team_rank() + + (ind.team_rank() * (ind.team_rank() + 1)) / 2; - const long int result = + const int64_t result = ind.team_scan(ind.league_rank() + 1 + ind.team_rank() + 1); - const long int result2 = + const int64_t result2 = ind.team_scan(ind.league_rank() + 1 + ind.team_rank() + 1); if (answer != result || answer != result2) { @@ -369,7 +368,7 @@ class ScanTeamFunctor { error = 1; } - const long int thread_rank = + const int64_t thread_rank = ind.team_rank() + ind.team_size() * ind.league_rank(); ind.team_scan(1 + thread_rank, accum.data()); } @@ -379,14 +378,14 @@ template class TestScanTeam { public: typedef DeviceType execution_space; - typedef long int value_type; + typedef int64_t value_type; typedef Kokkos::TeamPolicy policy_type; typedef Test::ScanTeamFunctor functor_type; TestScanTeam(const size_t nteam) { run_test(nteam); } void run_test(const size_t nteam) { - typedef Kokkos::View + typedef Kokkos::View result_type; const unsigned REPEAT = 100000; @@ -405,9 +404,9 @@ class TestScanTeam { nteam, team_exec.team_size_max(functor, Kokkos::ParallelReduceTag())); for (unsigned i = 0; i < Repeat; ++i) { - long int accum = 0; - long int total = 0; - long int error = 0; + int64_t accum = 0; + int64_t total = 0; + int64_t error = 0; Kokkos::deep_copy(functor.accum, total); Kokkos::parallel_reduce(team_exec, functor, result_type(&error)); @@ -445,7 +444,7 @@ struct SharedTeamFunctor { shared_int_array_type; // Tell how much shared memory will be required by this functor. - inline unsigned team_shmem_size(int team_size) const { + inline unsigned team_shmem_size(int /*team_size*/) const { return shared_int_array_type::shmem_size(SHARED_COUNT) + shared_int_array_type::shmem_size(SHARED_COUNT); } @@ -462,7 +461,7 @@ struct SharedTeamFunctor { "member( %d/%d , %d/%d ) Failed to allocate shared memory of size " "%lu\n", ind.league_rank(), ind.league_size(), ind.team_rank(), - ind.team_size(), static_cast(SHARED_COUNT)); + ind.team_size(), static_cast(SHARED_COUNT)); ++update; // Failure to allocate is an error. } else { @@ -523,7 +522,6 @@ struct TestSharedTeam { namespace Test { #if defined(KOKKOS_ENABLE_CXX11_DISPATCH_LAMBDA) -#if !defined(KOKKOS_ENABLE_CUDA) || (8000 <= CUDA_VERSION) template struct TestLambdaSharedTeam { TestLambdaSharedTeam() { run(); } @@ -568,7 +566,7 @@ struct TestLambdaSharedTeam { if ((shared_A.data() == nullptr && SHARED_COUNT > 0) || (shared_B.data() == nullptr && SHARED_COUNT > 0)) { printf("Failed to allocate shared memory of size %lu\n", - static_cast(SHARED_COUNT)); + static_cast(SHARED_COUNT)); ++update; // Failure to allocate is an error. } else { @@ -601,7 +599,6 @@ struct TestLambdaSharedTeam { } }; #endif -#endif } // namespace Test @@ -636,7 +633,7 @@ struct ScratchTeamFunctor { (scratch_A.data() == nullptr && SHARED_TEAM_COUNT > 0) || (scratch_B.data() == nullptr && SHARED_THREAD_COUNT > 0)) { printf("Failed to allocate shared memory of size %lu\n", - static_cast(SHARED_TEAM_COUNT)); + static_cast(SHARED_TEAM_COUNT)); ++update; // Failure to allocate is an error. } else { @@ -739,22 +736,22 @@ KOKKOS_INLINE_FUNCTION int test_team_mulit_level_scratch_loop_body( a_thread2(team.thread_scratch(0), 16); Kokkos::View > - b_team1(team.team_scratch(1), 128000); + b_team1(team.team_scratch(1), 12800); Kokkos::View > - b_thread1(team.thread_scratch(1), 16000); + b_thread1(team.thread_scratch(1), 1600); Kokkos::View > - b_team2(team.team_scratch(1), 128000); + b_team2(team.team_scratch(1), 12800); Kokkos::View > - b_thread2(team.thread_scratch(1), 16000); + b_thread2(team.thread_scratch(1), 1600); Kokkos::View > a_team3(team.team_scratch(0), 128); Kokkos::View > a_thread3(team.thread_scratch(0), 16); Kokkos::View > - b_team3(team.team_scratch(1), 128000); + b_team3(team.team_scratch(1), 12800); Kokkos::View > - b_thread3(team.thread_scratch(1), 16000); + b_thread3(team.thread_scratch(1), 1600); // The explicit types for 0 and 128 are here to test TeamThreadRange accepting // different types for begin and end. @@ -775,7 +772,7 @@ KOKKOS_INLINE_FUNCTION int test_team_mulit_level_scratch_loop_body( team.league_rank() * 100000; }); - Kokkos::parallel_for(Kokkos::TeamThreadRange(team, 0, 128000), + Kokkos::parallel_for(Kokkos::TeamThreadRange(team, 0, 12800), [&](const int &i) { b_team1(i) = 1000000 + i + team.league_rank() * 100000; b_team2(i) = 2000000 + i + team.league_rank() * 100000; @@ -783,7 +780,7 @@ KOKKOS_INLINE_FUNCTION int test_team_mulit_level_scratch_loop_body( }); team.team_barrier(); - Kokkos::parallel_for(Kokkos::ThreadVectorRange(team, 16000), + Kokkos::parallel_for(Kokkos::ThreadVectorRange(team, 1600), [&](const int &i) { b_thread1(i) = 1000000 + 100000 * team.team_rank() + 16 - i + team.league_rank() * 100000; @@ -817,7 +814,7 @@ KOKKOS_INLINE_FUNCTION int test_team_mulit_level_scratch_loop_body( }); Kokkos::parallel_for( - Kokkos::TeamThreadRange(team, 0, 128000), [&](const int &i) { + Kokkos::TeamThreadRange(team, 0, 12800), [&](const int &i) { if (b_team1(i) != 1000000 + i + team.league_rank() * 100000) error++; if (b_team2(i) != 2000000 + i + team.league_rank() * 100000) error++; if (b_team3(i) != 3000000 + i + team.league_rank() * 100000) error++; @@ -825,7 +822,7 @@ KOKKOS_INLINE_FUNCTION int test_team_mulit_level_scratch_loop_body( team.team_barrier(); Kokkos::parallel_for( - Kokkos::ThreadVectorRange(team, 16000), [&](const int &i) { + Kokkos::ThreadVectorRange(team, 1600), [&](const int &i) { if (b_thread1(i) != 1000000 + 100000 * team.team_rank() + 16 - i + team.league_rank() * 100000) error++; @@ -879,11 +876,11 @@ struct ClassNoShmemSizeFunction { const int per_team1 = 3 * Kokkos::View< double *, ExecSpace, - Kokkos::MemoryTraits >::shmem_size(128000); + Kokkos::MemoryTraits >::shmem_size(12800); const int per_thread1 = 3 * Kokkos::View< double *, ExecSpace, - Kokkos::MemoryTraits >::shmem_size(16000); + Kokkos::MemoryTraits >::shmem_size(1600); int team_size = 8; if (team_size > ExecSpace::concurrency()) @@ -952,11 +949,11 @@ struct ClassWithShmemSizeFunction { const int per_team1 = 3 * Kokkos::View< double *, ExecSpace, - Kokkos::MemoryTraits >::shmem_size(128000); + Kokkos::MemoryTraits >::shmem_size(12800); const int per_thread1 = 3 * Kokkos::View< double *, ExecSpace, - Kokkos::MemoryTraits >::shmem_size(16000); + Kokkos::MemoryTraits >::shmem_size(1600); int team_size = 8; if (team_size > ExecSpace::concurrency()) @@ -1008,7 +1005,6 @@ struct ClassWithShmemSizeFunction { template void test_team_mulit_level_scratch_test_lambda() { #ifdef KOKKOS_ENABLE_CXX11_DISPATCH_LAMBDA -#if !defined(KOKKOS_ENABLE_CUDA) || (8000 <= CUDA_VERSION) Kokkos::View > errors; Kokkos::View d_errors("Errors"); errors = d_errors; @@ -1023,13 +1019,13 @@ void test_team_mulit_level_scratch_test_lambda() { Kokkos::MemoryTraits >::shmem_size(16); const int per_team1 = - 3 * Kokkos::View< - double *, ExecSpace, - Kokkos::MemoryTraits >::shmem_size(128000); + 3 * + Kokkos::View >::shmem_size(12800); const int per_thread1 = 3 * Kokkos::View >::shmem_size(16000); + Kokkos::MemoryTraits >::shmem_size(1600); int team_size = 8; if (team_size > ExecSpace::concurrency()) @@ -1070,7 +1066,6 @@ void test_team_mulit_level_scratch_test_lambda() { error); ASSERT_EQ(error, 0); #endif -#endif } } // namespace Test @@ -1102,7 +1097,7 @@ struct TestShmemSize { TestShmemSize() { run(); } void run() { - typedef Kokkos::View view_type; + typedef Kokkos::View view_type; size_t d1 = 5; size_t d2 = 6; @@ -1110,7 +1105,7 @@ struct TestShmemSize { size_t size = view_type::shmem_size(d1, d2, d3); - ASSERT_EQ(size, (d1 * d2 * d3 + 1) * sizeof(long)); + ASSERT_EQ(size, (d1 * d2 * d3 + 1) * sizeof(int64_t)); test_layout_stride(); } @@ -1137,16 +1132,129 @@ namespace Test { namespace { -template -struct TestTeamBroadcast { - typedef typename Kokkos::TeamPolicy::member_type - team_member; +template +struct TestTeamBroadcast; + +template +struct TestTeamBroadcast< + ExecSpace, ScheduleType, T, + typename std::enable_if<(sizeof(T) == sizeof(char)), void>::type> { + using team_member = + typename Kokkos::TeamPolicy::member_type; + using memory_space = typename ExecSpace::memory_space; + using value_type = T; + + const value_type offset; - TestTeamBroadcast(const size_t league_size) {} + TestTeamBroadcast(const size_t /*league_size*/, const value_type os_) + : offset(os_) {} struct BroadcastTag {}; - typedef long value_type; + KOKKOS_INLINE_FUNCTION + void operator()(const team_member &teamMember, value_type &update) const { + int lid = teamMember.league_rank(); + int tid = teamMember.team_rank(); + int ts = teamMember.team_size(); + + value_type parUpdate = 0; + value_type value = (value_type)(tid % 0xFF) + offset; + + // broadcast boolean and value to team from source thread + teamMember.team_broadcast(value, lid % ts); + + Kokkos::parallel_reduce( + Kokkos::TeamThreadRange(teamMember, ts), + [&](const int /*j*/, value_type &teamUpdate) { teamUpdate |= value; }, + Kokkos::BOr(parUpdate)); + + if (teamMember.team_rank() == 0) update |= parUpdate; + } + + KOKKOS_INLINE_FUNCTION + void operator()(const BroadcastTag &, const team_member &teamMember, + value_type &update) const { + int lid = teamMember.league_rank(); + int tid = teamMember.team_rank(); + int ts = teamMember.team_size(); + + value_type parUpdate = 0; + value_type value = (value_type)(tid % 0xFF) + offset; + + teamMember.team_broadcast([&](value_type &var) { var -= offset; }, value, + lid % ts); + + Kokkos::parallel_reduce( + Kokkos::TeamThreadRange(teamMember, ts), + [&](const int /*j*/, value_type &teamUpdate) { teamUpdate |= value; }, + Kokkos::BOr(parUpdate)); + + if (teamMember.team_rank() == 0) update |= parUpdate; + } + + static void test_teambroadcast(const size_t league_size, + const value_type off) { + TestTeamBroadcast functor(league_size, off); + + typedef Kokkos::TeamPolicy policy_type; + typedef Kokkos::TeamPolicy + policy_type_f; + + const int team_size = + policy_type_f(league_size, 1) + .team_size_max( + functor, + Kokkos:: + ParallelReduceTag()); // printf("team_size=%d\n",team_size); + + // team_broadcast with value + value_type total = 0; + + Kokkos::parallel_reduce(policy_type(league_size, team_size), functor, + Kokkos::BOr(total)); + + value_type expected_result = 0; + for (unsigned int i = 0; i < league_size; i++) { + value_type val = (value_type((i % team_size % 0xFF)) + off); + expected_result |= val; + } + ASSERT_EQ(expected_result, total); + // printf("team_broadcast with value --" + //"expected_result=%x," + //"total=%x\n",expected_result, total); + + // team_broadcast with function object + total = 0; + + Kokkos::parallel_reduce(policy_type_f(league_size, team_size), functor, + Kokkos::BOr(total)); + + expected_result = 0; + for (unsigned int i = 0; i < league_size; i++) { + value_type val = ((value_type)((i % team_size % 0xFF))); + expected_result |= val; + } + ASSERT_EQ(expected_result, total); + // printf("team_broadcast with function object --" + // "expected_result=%x," + // "total=%x\n",expected_result, total); + } +}; + +template +struct TestTeamBroadcast< + ExecSpace, ScheduleType, T, + typename std::enable_if<(sizeof(T) > sizeof(char)), void>::type> { + using team_member = + typename Kokkos::TeamPolicy::member_type; + using value_type = T; + + const value_type offset; + + TestTeamBroadcast(const size_t /*league_size*/, const value_type os_) + : offset(os_) {} + + struct BroadcastTag {}; KOKKOS_INLINE_FUNCTION void operator()(const team_member &teamMember, value_type &update) const { @@ -1155,16 +1263,26 @@ struct TestTeamBroadcast { int ts = teamMember.team_size(); value_type parUpdate = 0; - value_type value = tid * 3 + 1; + value_type value = (value_type)(tid * 3) + offset; + + // setValue is used to determine if the update should be + // performed at the bottom. The thread id must match the + // thread id used to broadcast the value. It is the + // thread id that matches the league rank mod team size + // this way each league rank will use a different thread id + // which is likely not 0 + bool setValue = ((lid % ts) == tid); + // broadcast boolean and value to team from source thread teamMember.team_broadcast(value, lid % ts); + teamMember.team_broadcast(setValue, lid % ts); Kokkos::parallel_reduce( Kokkos::TeamThreadRange(teamMember, ts), - [&](const int j, value_type &teamUpdate) { teamUpdate += value; }, + [&](const int /*j*/, value_type &teamUpdate) { teamUpdate += value; }, parUpdate); - if (teamMember.team_rank() == 0) update += parUpdate; + if (teamMember.team_rank() == 0 && setValue) update += parUpdate; } KOKKOS_INLINE_FUNCTION @@ -1175,21 +1293,53 @@ struct TestTeamBroadcast { int ts = teamMember.team_size(); value_type parUpdate = 0; - value_type value = tid * 3 + 1; + value_type value = (value_type)(tid * 3) + offset; + + // setValue is used to determine if the update should be + // performed at the bottom. The thread id must match the + // thread id used to broadcast the value. It is the + // thread id that matches the league rank mod team size + // this way each league rank will use a different thread id + // which is likely not 0. Note the logic is switched from + // above because the functor switches it back. + bool setValue = ((lid % ts) != tid); teamMember.team_broadcast([&](value_type &var) { var *= 2; }, value, lid % ts); + teamMember.team_broadcast([&](bool &bVar) { bVar = !bVar; }, setValue, + lid % ts); Kokkos::parallel_reduce( Kokkos::TeamThreadRange(teamMember, ts), - [&](const int j, value_type &teamUpdate) { teamUpdate += value; }, + [&](const int /*j*/, value_type &teamUpdate) { teamUpdate += value; }, parUpdate); - if (teamMember.team_rank() == 0) update += parUpdate; + if (teamMember.team_rank() == 0 && setValue) update += parUpdate; + } + + template + static inline + typename std::enable_if::value, void>::type + compare_test(ScalarType A, ScalarType B) { + if (std::is_same::value) { + ASSERT_DOUBLE_EQ((double)A, (double)B); + } else if (std::is_same::value) { + ASSERT_FLOAT_EQ((double)A, (double)B); + } else { + ASSERT_EQ(A, B); + } + } + + template + static inline + typename std::enable_if::value, void>::type + compare_test(ScalarType A, ScalarType B) { + ASSERT_EQ(A, B); } - static void test_teambroadcast(const size_t league_size) { - TestTeamBroadcast functor(league_size); + static void test_teambroadcast(const size_t league_size, + const value_type off) { + TestTeamBroadcast functor(league_size, off); typedef Kokkos::TeamPolicy policy_type; typedef Kokkos::TeamPolicy @@ -1203,20 +1353,21 @@ struct TestTeamBroadcast { ParallelReduceTag()); // printf("team_size=%d\n",team_size); // team_broadcast with value - long total = 0; + value_type total = 0; Kokkos::parallel_reduce(policy_type(league_size, team_size), functor, total); value_type expected_result = 0; for (unsigned int i = 0; i < league_size; i++) { - value_type val = ((i % team_size) * 3 + 1) * team_size; + value_type val = + (value_type((i % team_size) * 3) + off) * (value_type)team_size; expected_result += val; } - ASSERT_EQ(size_t(expected_result), - size_t(total)); // printf("team_broadcast with value -- - // expected_result=%d, - // total=%d\n",expected_result, total); + compare_test(expected_result, + total); // printf("team_broadcast with value -- + // expected_result=%d, + // total=%d\n",expected_result, total); // team_broadcast with function object total = 0; @@ -1226,13 +1377,14 @@ struct TestTeamBroadcast { expected_result = 0; for (unsigned int i = 0; i < league_size; i++) { - value_type val = ((i % team_size) * 3 + 1) * 2 * team_size; + value_type val = ((value_type)((i % team_size) * 3) + off) * + (value_type)(2 * team_size); expected_result += val; } - ASSERT_EQ(size_t(expected_result), - size_t(total)); // printf("team_broadcast with function object -- - // expected_result=%d, - // total=%d\n",expected_result, total); + compare_test(expected_result, + total); // printf("team_broadcast with function object -- + // expected_result=%d, + // total=%d\n",expected_result, total); } }; diff --git a/lib/kokkos/core/unit_test/TestTeamTeamSize.hpp b/lib/kokkos/core/unit_test/TestTeamTeamSize.hpp index 4a9b7c41a4adba60f304aeffa79e13c09645c5eb..0703f90cf8a3cd374202e510f163f842bcf12846 100644 --- a/lib/kokkos/core/unit_test/TestTeamTeamSize.hpp +++ b/lib/kokkos/core/unit_test/TestTeamTeamSize.hpp @@ -78,13 +78,13 @@ template struct FunctorFor { double static_array[S]; KOKKOS_INLINE_FUNCTION - void operator()(const typename PolicyType::member_type& team) const {} + void operator()(const typename PolicyType::member_type& /*team*/) const {} }; template struct FunctorReduce { double static_array[S]; KOKKOS_INLINE_FUNCTION - void operator()(const typename PolicyType::member_type& team, + void operator()(const typename PolicyType::member_type& /*team*/, MyArray& lval) const { for (int j = 0; j < N; j++) lval.values[j] += 1 + lval.values[0]; } @@ -191,7 +191,7 @@ struct PrintFunctor2 { }; TEST(TEST_CATEGORY, team_policy_max_scalar_without_plus_equal_k) { - using ExecSpace = Kokkos::DefaultExecutionSpace; + using ExecSpace = TEST_EXECSPACE; using ReducerType = Kokkos::MinMax; using ReducerValueType = typename ReducerType::value_type; using DynamicScheduleType = Kokkos::Schedule; diff --git a/lib/kokkos/core/unit_test/TestTeamVector.hpp b/lib/kokkos/core/unit_test/TestTeamVector.hpp index 4cf0ceaf475561e2afff33e198e0ebc59fa02a45..c313988efc2930d8a98d26f8f9405048b1454c91 100644 --- a/lib/kokkos/core/unit_test/TestTeamVector.hpp +++ b/lib/kokkos/core/unit_test/TestTeamVector.hpp @@ -622,7 +622,7 @@ struct functor_vec_single { Scalar value2 = 0; Kokkos::parallel_reduce( Kokkos::ThreadVectorRange(team, nStart, nEnd), - [&](int i, Scalar &val) { val += value; }, value2); + [&](int /*i*/, Scalar &val) { val += value; }, value2); if (value2 != (value * (nEnd - nStart))) { printf("FAILED vector_single broadcast %i %i %f %f\n", team.league_rank(), @@ -895,8 +895,7 @@ namespace Test { // Computes y^T*A*x // ( modified from kokkos-tutorials/GTC2016/Exercises/ThreeLevelPar ) -#if (!defined(KOKKOS_ENABLE_CUDA)) || \ - (defined(KOKKOS_ENABLE_CUDA_LAMBDA) && (8000 <= CUDA_VERSION)) +#if (!defined(KOKKOS_ENABLE_CUDA)) || defined(KOKKOS_ENABLE_CUDA_LAMBDA) template class TestTripleNestedReduce { public: diff --git a/lib/kokkos/core/unit_test/TestTeamVectorRange.hpp b/lib/kokkos/core/unit_test/TestTeamVectorRange.hpp index 71351c19815ce994110e83aa64abb97aa7cd7b5e..cc83785185971bbd3a01c09478bccd7dac13ba44 100644 --- a/lib/kokkos/core/unit_test/TestTeamVectorRange.hpp +++ b/lib/kokkos/core/unit_test/TestTeamVectorRange.hpp @@ -233,7 +233,7 @@ struct functor_teamvector_for { typedef typename ExecutionSpace::scratch_memory_space shmem_space; typedef Kokkos::View shared_int; - unsigned team_shmem_size(int team_size) const { + unsigned team_shmem_size(int /*team_size*/) const { return shared_int::shmem_size(131); } diff --git a/lib/kokkos/core/unit_test/TestTemplateMetaFunctions.hpp b/lib/kokkos/core/unit_test/TestTemplateMetaFunctions.hpp index 1e25d46dfebed595eb43fa4a0dc0abde7c3952b2..b9c16f506c2f52fd16f4496decd8940f3fa9bf7b 100644 --- a/lib/kokkos/core/unit_test/TestTemplateMetaFunctions.hpp +++ b/lib/kokkos/core/unit_test/TestTemplateMetaFunctions.hpp @@ -58,7 +58,7 @@ struct SumPlain { SumPlain(type view_) : view(view_) {} KOKKOS_INLINE_FUNCTION - void operator()(int i, Scalar& val) { val += Scalar(); } + void operator()(int /*i*/, Scalar& val) { val += Scalar(); } }; template @@ -80,7 +80,7 @@ struct SumInitJoinFinalValueType { } KOKKOS_INLINE_FUNCTION - void operator()(int i, value_type& val) const { val += value_type(); } + void operator()(int /*i*/, value_type& val) const { val += value_type(); } }; template @@ -102,7 +102,7 @@ struct SumInitJoinFinalValueType2 { } KOKKOS_INLINE_FUNCTION - void operator()(int i, value_type& val) const { val += value_type(); } + void operator()(int /*i*/, value_type& val) const { val += value_type(); } }; template @@ -157,7 +157,7 @@ struct SumWrongInitJoinFinalValueType { } KOKKOS_INLINE_FUNCTION - void operator()(int i, value_type& val) const { val += value_type(); } + void operator()(int /*i*/, value_type& val) const { val += value_type(); } }; template diff --git a/lib/kokkos/core/unit_test/TestViewAPI.hpp b/lib/kokkos/core/unit_test/TestViewAPI.hpp index 36d158d643b5c5e2dbc3b24b24bcbe3edd165b8a..b9847773b60ca8fc455f1e5dd33e663d7e80692d 100644 --- a/lib/kokkos/core/unit_test/TestViewAPI.hpp +++ b/lib/kokkos/core/unit_test/TestViewAPI.hpp @@ -841,6 +841,22 @@ struct TestViewMirror { ASSERT_EQ(a_org(5), a_h3(5)); } + template + static typename View::const_type view_const_cast(View const &v) { + return v; + } + + static void test_mirror_copy_const_data_type() { + using ExecutionSpace = typename DeviceType::execution_space; + int const N = 100; + Kokkos::View v("v", N); + Kokkos::deep_copy(v, 255); + auto v_m1 = Kokkos::create_mirror_view_and_copy( + Kokkos::DefaultHostExecutionSpace(), view_const_cast(v)); + auto v_m2 = Kokkos::create_mirror_view_and_copy(ExecutionSpace(), + view_const_cast(v)); + } + template struct CopyUnInit { typedef typename Kokkos::Impl::MirrorViewType< @@ -896,6 +912,7 @@ struct TestViewMirror { test_mirror_view >(); test_mirror_copy >(); test_mirror_copy >(); + test_mirror_copy_const_data_type(); test_mirror_no_initialize >(); test_mirror_no_initialize >(); } @@ -920,8 +937,6 @@ class TestViewAPI { dView4_unmanaged; typedef typename dView0::host_mirror_space host; - TestViewAPI() {} - static void run_test_view_operator_a() { { TestViewOperator f; @@ -1034,12 +1049,12 @@ class TestViewAPI { dView4 dx, dy, dz; hView4 hx, hy, hz; - ASSERT_TRUE(dx.data() == 0); - ASSERT_TRUE(dy.data() == 0); - ASSERT_TRUE(dz.data() == 0); - ASSERT_TRUE(hx.data() == 0); - ASSERT_TRUE(hy.data() == 0); - ASSERT_TRUE(hz.data() == 0); + ASSERT_TRUE(dx.data() == nullptr); + ASSERT_TRUE(dy.data() == nullptr); + ASSERT_TRUE(dz.data() == nullptr); + ASSERT_TRUE(hx.data() == nullptr); + ASSERT_TRUE(hy.data() == nullptr); + ASSERT_TRUE(hz.data() == nullptr); ASSERT_EQ(dx.extent(0), 0u); ASSERT_EQ(dy.extent(0), 0u); ASSERT_EQ(dz.extent(0), 0u); @@ -1096,11 +1111,11 @@ class TestViewAPI { ASSERT_EQ(dx.use_count(), size_t(2)); - ASSERT_FALSE(dx.data() == 0); - ASSERT_FALSE(const_dx.data() == 0); - ASSERT_FALSE(unmanaged_dx.data() == 0); - ASSERT_FALSE(unmanaged_from_ptr_dx.data() == 0); - ASSERT_FALSE(dy.data() == 0); + ASSERT_FALSE(dx.data() == nullptr); + ASSERT_FALSE(const_dx.data() == nullptr); + ASSERT_FALSE(unmanaged_dx.data() == nullptr); + ASSERT_FALSE(unmanaged_from_ptr_dx.data() == nullptr); + ASSERT_FALSE(dy.data() == nullptr); ASSERT_NE(dx, dy); ASSERT_EQ(dx.extent(0), unsigned(N0)); @@ -1139,6 +1154,7 @@ class TestViewAPI { Kokkos::deep_copy(typename hView4::execution_space(), dx, hx); Kokkos::deep_copy(typename hView4::execution_space(), dy, dx); Kokkos::deep_copy(typename hView4::execution_space(), hy, dy); + typename dView4::execution_space().fence(); for (size_t ip = 0; ip < N0; ++ip) for (size_t i1 = 0; i1 < N1; ++i1) @@ -1149,6 +1165,7 @@ class TestViewAPI { Kokkos::deep_copy(typename hView4::execution_space(), dx, T(0)); Kokkos::deep_copy(typename hView4::execution_space(), hx, dx); + typename dView4::execution_space().fence(); for (size_t ip = 0; ip < N0; ++ip) for (size_t i1 = 0; i1 < N1; ++i1) @@ -1172,6 +1189,7 @@ class TestViewAPI { Kokkos::deep_copy(typename dView4::execution_space(), dx, hx); Kokkos::deep_copy(typename dView4::execution_space(), dy, dx); Kokkos::deep_copy(typename dView4::execution_space(), hy, dy); + typename dView4::execution_space().fence(); for (size_t ip = 0; ip < N0; ++ip) for (size_t i1 = 0; i1 < N1; ++i1) @@ -1182,6 +1200,7 @@ class TestViewAPI { Kokkos::deep_copy(typename dView4::execution_space(), dx, T(0)); Kokkos::deep_copy(typename dView4::execution_space(), hx, dx); + typename dView4::execution_space().fence(); for (size_t ip = 0; ip < N0; ++ip) for (size_t i1 = 0; i1 < N1; ++i1) @@ -1233,19 +1252,19 @@ class TestViewAPI { ASSERT_NE(dx, dz); dx = dView4(); - ASSERT_TRUE(dx.data() == 0); - ASSERT_FALSE(dy.data() == 0); - ASSERT_FALSE(dz.data() == 0); + ASSERT_TRUE(dx.data() == nullptr); + ASSERT_FALSE(dy.data() == nullptr); + ASSERT_FALSE(dz.data() == nullptr); dy = dView4(); - ASSERT_TRUE(dx.data() == 0); - ASSERT_TRUE(dy.data() == 0); - ASSERT_FALSE(dz.data() == 0); + ASSERT_TRUE(dx.data() == nullptr); + ASSERT_TRUE(dy.data() == nullptr); + ASSERT_FALSE(dz.data() == nullptr); dz = dView4(); - ASSERT_TRUE(dx.data() == 0); - ASSERT_TRUE(dy.data() == 0); - ASSERT_TRUE(dz.data() == 0); + ASSERT_TRUE(dx.data() == nullptr); + ASSERT_TRUE(dy.data() == nullptr); + ASSERT_TRUE(dz.data() == nullptr); } static void run_test_deep_copy_empty() { @@ -1450,6 +1469,11 @@ class TestViewAPI { } static void run_test_error() { +#ifdef KOKKOS_ENABLE_OPENMPTARGET + if (std::is_same::value) + return; +#endif auto alloc_size = std::numeric_limits::max() - 42; try { auto should_always_fail = dView1("hello_world_failure", alloc_size); diff --git a/lib/kokkos/core/unit_test/TestViewAPI_e.hpp b/lib/kokkos/core/unit_test/TestViewAPI_e.hpp index e433535236d819be39cc21a6980caba54a8d1158..40ae0836307b49da833d3b03e4fb380baf56e691 100644 --- a/lib/kokkos/core/unit_test/TestViewAPI_e.hpp +++ b/lib/kokkos/core/unit_test/TestViewAPI_e.hpp @@ -204,13 +204,13 @@ TEST(TEST_CATEGORY, anonymous_space) { test_anonymous_space(); } template struct TestViewOverloadResolution { // Overload based on value_type and rank - static int foo(Kokkos::View a) { return 1; } - static int foo(Kokkos::View a) { return 2; } - static int foo(Kokkos::View a) { return 3; } + static int foo(Kokkos::View /*a*/) { return 1; } + static int foo(Kokkos::View /*a*/) { return 2; } + static int foo(Kokkos::View /*a*/) { return 3; } // Overload based on compile time dimensions - static int bar(Kokkos::View a) { return 4; } - static int bar(Kokkos::View a) { return 5; } + static int bar(Kokkos::View /*a*/) { return 4; } + static int bar(Kokkos::View /*a*/) { return 5; } static void test_function_overload() { Kokkos::View::test_function_overload(); } } // namespace Test + +#include diff --git a/lib/kokkos/core/unit_test/TestViewCopy.hpp b/lib/kokkos/core/unit_test/TestViewCopy.hpp index 27018e7f7ba70706fc60325ccfda0142322eb9d8..6db2d3a4f6d90f1c0073c3fa21b4afdb60a667f9 100644 --- a/lib/kokkos/core/unit_test/TestViewCopy.hpp +++ b/lib/kokkos/core/unit_test/TestViewCopy.hpp @@ -52,124 +52,446 @@ namespace Test { namespace { -template -struct TestViewCopy { - using InExecSpace = ExecSpace; - - static void test_view_copy(const int dim0, const int dim1, const int dim2) { -#if defined(KOKKOS_ENABLE_CUDA) || defined(KOKKOS_ENABLE_ROCM) - // ExecSpace = CudaUVM, CudaHostPinned - // This test will fail at runtime with an illegal memory access if something - // goes wrong Test 1: deep_copy from host_mirror_space to ExecSpace and - // ExecSpace back to host_mirror_space - { - typedef Kokkos::View Rank4ViewType; - Rank4ViewType view_4; - view_4 = Rank4ViewType("view_4", dim0, dim1, dim2, dim2); - - typedef typename Kokkos::Impl::is_space< - InExecSpace>::host_mirror_space::execution_space host_space_type; - Kokkos::View srcView( - "srcView", dim2, dim2); - - // Strided dst view - auto dstView = - Kokkos::subview(view_4, 0, 0, Kokkos::ALL(), Kokkos::ALL()); - - // host_mirror_space to ExecSpace - Kokkos::deep_copy(dstView, srcView); - Kokkos::fence(); - - // ExecSpace to host_mirror_space - Kokkos::deep_copy(srcView, dstView); - Kokkos::fence(); +template +struct CheckResult { + using value_type = typename ViewType::non_const_value_type; + ViewType v; + value_type value; + CheckResult(ViewType v_, value_type value_) : v(v_), value(value_){}; + KOKKOS_FUNCTION + void operator()(const int i, int& lsum) const { + for (int j = 0; j < static_cast(v.extent(1)); j++) { + if (v.access(i, j) != value) lsum++; } + } +}; - // Test 2: deep_copy from Cuda to ExecSpace and ExecSpace back to Cuda - { - typedef Kokkos::View Rank4ViewType; - Rank4ViewType view_4; - view_4 = Rank4ViewType("view_4", dim0, dim1, dim2, dim2); - -#if defined(KOKKOS_ENABLE_CUDA) - typedef typename std::conditional< - Kokkos::Impl::MemorySpaceAccess< - Kokkos::CudaSpace, - typename InExecSpace::memory_space>::accessible, - Kokkos::CudaSpace, InExecSpace>::type space_type; -#endif -#if defined(KOKKOS_ENABLE_ROCM) - typedef typename std::conditional< - Kokkos::Impl::MemorySpaceAccess< - Kokkos::ROCmSpace, - typename InExecSpace::memory_space>::accessible, - Kokkos::ROCmSpace, InExecSpace>::type space_type; -#endif - Kokkos::View srcView( - "srcView", dim2, dim2); - - // Strided dst view - auto dstView = - Kokkos::subview(view_4, 0, 0, Kokkos::ALL(), Kokkos::ALL()); - - // Cuda to ExecSpace - Kokkos::deep_copy(dstView, srcView); - Kokkos::fence(); - - // ExecSpace to Cuda - Kokkos::deep_copy(srcView, dstView); - Kokkos::fence(); - } +template +bool run_check(ViewType v, typename ViewType::value_type value) { + using exec_space = typename ViewType::memory_space::execution_space; + int errors = 0; + Kokkos::fence(); + Kokkos::parallel_reduce(Kokkos::RangePolicy(0, v.extent(0)), + CheckResult(v, value), errors); + return errors == 0; +} - // Test 3: deep_copy from host_space to ExecSpace and ExecSpace back to - // host_space - { - typedef Kokkos::View Rank4ViewType; - Rank4ViewType view_4; - view_4 = Rank4ViewType("view_4", dim0, dim1, dim2, dim2); +} // namespace - typedef Kokkos::HostSpace host_space_type; - Kokkos::View srcView( - "srcView", dim2, dim2); +TEST(TEST_CATEGORY, view_copy_tests) { + int N = 10000; + int M = 10; - // Strided dst view - auto dstView = - Kokkos::subview(view_4, 0, 0, Kokkos::ALL(), Kokkos::ALL()); + Kokkos::View defaulted; + Kokkos::View a("A", N, M); + Kokkos::View b("B", N, M); + auto h_a = Kokkos::create_mirror(a); + auto h_b = Kokkos::create_mirror(b); + auto m_a = Kokkos::create_mirror_view(a); + auto s_a = Kokkos::subview(a, Kokkos::ALL, 1); + auto s_b = Kokkos::subview(b, Kokkos::ALL, 1); + auto hs_a = Kokkos::subview(h_a, Kokkos::ALL, 1); + auto hs_b = Kokkos::subview(h_b, Kokkos::ALL, 1); + auto dev = typename TEST_EXECSPACE::execution_space(); + auto host = Kokkos::DefaultHostExecutionSpace(); + + constexpr bool DevExecCanAccessHost = + Kokkos::Impl::SpaceAccessibility::accessible; + + constexpr bool HostExecCanAccessDev = Kokkos::Impl::SpaceAccessibility< + typename Kokkos::HostSpace::execution_space, + typename TEST_EXECSPACE::memory_space>::accessible; + + // Contiguous copies + { Kokkos::deep_copy(defaulted, defaulted); } + { + Kokkos::deep_copy(a, 1); + ASSERT_TRUE(run_check(a, 1)); + } + { + Kokkos::deep_copy(a, a); + ASSERT_TRUE(run_check(a, 1)); + } + { + Kokkos::deep_copy(m_a, a); + ASSERT_TRUE(run_check(m_a, 1)); + } + { + Kokkos::deep_copy(m_a, 2); + ASSERT_TRUE(run_check(m_a, 2)); + } + { + Kokkos::deep_copy(a, m_a); + ASSERT_TRUE(run_check(a, 2)); + } + { + Kokkos::deep_copy(b, 3); + ASSERT_TRUE(run_check(b, 3)); + } + { + Kokkos::deep_copy(h_a, 4); + ASSERT_TRUE(run_check(h_a, 4)); + } + { + Kokkos::deep_copy(a, b); + ASSERT_TRUE(run_check(a, 3)); + } + { + Kokkos::deep_copy(h_b, h_a); + ASSERT_TRUE(run_check(h_b, 4)); + } + { + Kokkos::deep_copy(h_a, a); + ASSERT_TRUE(run_check(h_a, 3)); + } + { + Kokkos::deep_copy(b, h_b); + ASSERT_TRUE(run_check(b, 4)); + } + // Non contiguous copies + { + Kokkos::deep_copy(s_a, 5); + ASSERT_TRUE(run_check(s_a, 5)); + } + { + Kokkos::deep_copy(hs_a, 6); + ASSERT_TRUE(run_check(hs_a, 6)); + } + { + Kokkos::deep_copy(s_b, s_a); + ASSERT_TRUE(run_check(s_b, 5)); + } + { + Kokkos::deep_copy(hs_b, hs_a); + ASSERT_TRUE(run_check(hs_b, 6)); + } + if (DevExecCanAccessHost || HostExecCanAccessDev) { + { + Kokkos::deep_copy(hs_b, s_b); + ASSERT_TRUE(run_check(hs_b, 5)); + } + { + Kokkos::deep_copy(s_a, hs_a); + ASSERT_TRUE(run_check(s_a, 6)); + } + } - // host_space to ExecSpace - Kokkos::deep_copy(dstView, srcView); - Kokkos::fence(); + // Contiguous copies + { Kokkos::deep_copy(dev, defaulted, defaulted); } + { + Kokkos::deep_copy(dev, a, 1); + ASSERT_TRUE(run_check(a, 1)); + } + { + Kokkos::deep_copy(dev, a, a); + ASSERT_TRUE(run_check(a, 1)); + } + { + Kokkos::deep_copy(dev, m_a, a); + ASSERT_TRUE(run_check(m_a, 1)); + } + { + Kokkos::deep_copy(dev, m_a, 2); + ASSERT_TRUE(run_check(m_a, 2)); + } + { + Kokkos::deep_copy(dev, a, m_a); + ASSERT_TRUE(run_check(a, 2)); + } + { + Kokkos::deep_copy(dev, b, 3); + ASSERT_TRUE(run_check(b, 3)); + } + { + Kokkos::deep_copy(dev, h_a, 4); + ASSERT_TRUE(run_check(h_a, 4)); + } + { + Kokkos::deep_copy(dev, a, b); + ASSERT_TRUE(run_check(a, 3)); + } + { + Kokkos::deep_copy(dev, h_b, h_a); + ASSERT_TRUE(run_check(h_b, 4)); + } + { + Kokkos::deep_copy(dev, h_a, a); + ASSERT_TRUE(run_check(h_a, 3)); + } + { + Kokkos::deep_copy(dev, b, h_b); + ASSERT_TRUE(run_check(b, 4)); + } + // Non contiguous copies + { + Kokkos::deep_copy(dev, s_a, 5); + ASSERT_TRUE(run_check(s_a, 5)); + } + { + Kokkos::deep_copy(dev, hs_a, 6); + ASSERT_TRUE(run_check(hs_a, 6)); + } + { + Kokkos::deep_copy(dev, s_b, s_a); + ASSERT_TRUE(run_check(s_b, 5)); + } + { + Kokkos::deep_copy(dev, hs_b, hs_a); + ASSERT_TRUE(run_check(hs_b, 6)); + } + if (DevExecCanAccessHost || HostExecCanAccessDev) { + { + Kokkos::deep_copy(dev, hs_b, s_b); + ASSERT_TRUE(run_check(hs_b, 5)); + } + { + Kokkos::deep_copy(dev, s_a, hs_a); + ASSERT_TRUE(run_check(s_a, 6)); + } + } - // ExecSpace to host_space - Kokkos::deep_copy(srcView, dstView); - Kokkos::fence(); + // Contiguous copies + { Kokkos::deep_copy(host, defaulted, defaulted); } + { + Kokkos::deep_copy(host, a, 1); + ASSERT_TRUE(run_check(a, 1)); + } + { + Kokkos::deep_copy(host, a, a); + ASSERT_TRUE(run_check(a, 1)); + } + { + Kokkos::deep_copy(host, m_a, a); + ASSERT_TRUE(run_check(m_a, 1)); + } + { + Kokkos::deep_copy(host, m_a, 2); + ASSERT_TRUE(run_check(m_a, 2)); + } + { + Kokkos::deep_copy(host, a, m_a); + ASSERT_TRUE(run_check(a, 2)); + } + { + Kokkos::deep_copy(host, b, 3); + ASSERT_TRUE(run_check(b, 3)); + } + { + Kokkos::deep_copy(host, h_a, 4); + ASSERT_TRUE(run_check(h_a, 4)); + } + { + Kokkos::deep_copy(host, a, b); + ASSERT_TRUE(run_check(a, 3)); + } + { + Kokkos::deep_copy(host, h_b, h_a); + ASSERT_TRUE(run_check(h_b, 4)); + } + { + Kokkos::deep_copy(host, h_a, a); + ASSERT_TRUE(run_check(h_a, 3)); + } + { + Kokkos::deep_copy(host, b, h_b); + ASSERT_TRUE(run_check(b, 4)); + } + // Non contiguous copies + { + Kokkos::deep_copy(host, s_a, 5); + ASSERT_TRUE(run_check(s_a, 5)); + } + { + Kokkos::deep_copy(host, hs_a, 6); + ASSERT_TRUE(run_check(hs_a, 6)); + } + { + Kokkos::deep_copy(host, s_b, s_a); + ASSERT_TRUE(run_check(s_b, 5)); + } + { + Kokkos::deep_copy(host, hs_b, hs_a); + ASSERT_TRUE(run_check(hs_b, 6)); + } + if (DevExecCanAccessHost || HostExecCanAccessDev) { + { + Kokkos::deep_copy(host, hs_b, s_b); + ASSERT_TRUE(run_check(hs_b, 5)); } -#endif - } // end test_view_copy + { + Kokkos::deep_copy(host, s_a, hs_a); + ASSERT_TRUE(run_check(s_a, 6)); + } + } +} -}; // end struct +TEST(TEST_CATEGORY, view_copy_tests_rank_0) { + Kokkos::View defaulted; + Kokkos::View a("A"); + Kokkos::View b("B"); + auto h_a = Kokkos::create_mirror(a); + auto h_b = Kokkos::create_mirror(b); + auto m_a = Kokkos::create_mirror_view(a); + auto dev = typename TEST_EXECSPACE::execution_space(); + auto host = Kokkos::DefaultHostExecutionSpace(); -} // namespace + // No execution space + { Kokkos::deep_copy(defaulted, defaulted); } + { + Kokkos::deep_copy(a, 1); + ASSERT_TRUE(run_check(a, 1)); + } + { + Kokkos::deep_copy(a, a); + ASSERT_TRUE(run_check(a, 1)); + } + { + Kokkos::deep_copy(m_a, a); + ASSERT_TRUE(run_check(m_a, 1)); + } + { + Kokkos::deep_copy(m_a, 2); + ASSERT_TRUE(run_check(m_a, 2)); + } + { + Kokkos::deep_copy(a, m_a); + ASSERT_TRUE(run_check(a, 2)); + } + { + Kokkos::deep_copy(b, 3); + ASSERT_TRUE(run_check(b, 3)); + } + { + Kokkos::deep_copy(h_a, 4); + ASSERT_TRUE(run_check(h_a, 4)); + } + { + Kokkos::deep_copy(a, b); + ASSERT_TRUE(run_check(a, 3)); + } + { + Kokkos::deep_copy(h_b, h_a); + ASSERT_TRUE(run_check(h_b, 4)); + } + { + Kokkos::deep_copy(h_a, a); + ASSERT_TRUE(run_check(h_a, 3)); + } + { + Kokkos::deep_copy(b, h_b); + ASSERT_TRUE(run_check(b, 4)); + } -TEST(TEST_CATEGORY, view_copy_tests) { - // Only include this file to be compiled with CudaUVM and CudaHostPinned - TestViewCopy::test_view_copy(4, 2, 3); - TestViewCopy::test_view_copy(4, 2, 0); + // Device + { Kokkos::deep_copy(dev, defaulted, defaulted); } + { + Kokkos::deep_copy(dev, a, 1); + ASSERT_TRUE(run_check(a, 1)); + } + { + Kokkos::deep_copy(dev, a, a); + ASSERT_TRUE(run_check(a, 1)); + } + { + Kokkos::deep_copy(dev, m_a, a); + ASSERT_TRUE(run_check(m_a, 1)); + } + { + Kokkos::deep_copy(dev, m_a, 2); + ASSERT_TRUE(run_check(m_a, 2)); + } + { + Kokkos::deep_copy(dev, a, m_a); + ASSERT_TRUE(run_check(a, 2)); + } + { + Kokkos::deep_copy(dev, b, 3); + ASSERT_TRUE(run_check(b, 3)); + } + { + Kokkos::deep_copy(dev, h_a, 4); + ASSERT_TRUE(run_check(h_a, 4)); + } + { + Kokkos::deep_copy(dev, a, b); + ASSERT_TRUE(run_check(a, 3)); + } + { + Kokkos::deep_copy(dev, h_b, h_a); + ASSERT_TRUE(run_check(h_b, 4)); + } + { + Kokkos::deep_copy(dev, h_a, a); + ASSERT_TRUE(run_check(h_a, 3)); + } + { + Kokkos::deep_copy(dev, b, h_b); + ASSERT_TRUE(run_check(b, 4)); + } + + // Host + { Kokkos::deep_copy(host, defaulted, defaulted); } + { + Kokkos::deep_copy(host, a, 1); + ASSERT_TRUE(run_check(a, 1)); + } + { + Kokkos::deep_copy(host, a, a); + ASSERT_TRUE(run_check(a, 1)); + } + { + Kokkos::deep_copy(host, m_a, a); + ASSERT_TRUE(run_check(m_a, 1)); + } + { + Kokkos::deep_copy(host, m_a, 2); + ASSERT_TRUE(run_check(m_a, 2)); + } + { + Kokkos::deep_copy(host, a, m_a); + ASSERT_TRUE(run_check(a, 2)); + } + { + Kokkos::deep_copy(host, b, 3); + ASSERT_TRUE(run_check(b, 3)); + } + { + Kokkos::deep_copy(host, h_a, 4); + ASSERT_TRUE(run_check(h_a, 4)); + } + { + Kokkos::deep_copy(host, a, b); + ASSERT_TRUE(run_check(a, 3)); + } + { + Kokkos::deep_copy(host, h_b, h_a); + ASSERT_TRUE(run_check(h_b, 4)); + } + { + Kokkos::deep_copy(host, h_a, a); + ASSERT_TRUE(run_check(h_a, 3)); + } + { + Kokkos::deep_copy(host, b, h_b); + ASSERT_TRUE(run_check(b, 4)); + } } TEST(TEST_CATEGORY, view_copy_degenerated) { - // Only include this file to be compiled with CudaUVM and CudaHostPinned - Kokkos::View> v_um_def_1; - Kokkos::View> v_um_1( - reinterpret_cast(-1), 0); - Kokkos::View v_m_def_1; - Kokkos::View v_m_1("v_m_1", 0); - - Kokkos::View> v_um_def_2; - Kokkos::View> v_um_2( - reinterpret_cast(-1), 0); - Kokkos::View v_m_def_2; - Kokkos::View v_m_2("v_m_2", 0); + Kokkos::View> + v_um_def_1; + Kokkos::View> + v_um_1(reinterpret_cast(-1), 0); + Kokkos::View v_m_def_1; + Kokkos::View v_m_1("v_m_1", 0); + + Kokkos::View> + v_um_def_2; + Kokkos::View> + v_um_2(reinterpret_cast(-1), 0); + Kokkos::View v_m_def_2; + Kokkos::View v_m_2("v_m_2", 0); Kokkos::deep_copy(v_um_def_1, v_um_def_2); Kokkos::deep_copy(v_um_def_1, v_um_2); diff --git a/lib/kokkos/core/unit_test/TestViewIsAssignable.hpp b/lib/kokkos/core/unit_test/TestViewIsAssignable.hpp new file mode 100644 index 0000000000000000000000000000000000000000..fcf9f75f37a22019e5e5e0713104e2fb7fed30ee --- /dev/null +++ b/lib/kokkos/core/unit_test/TestViewIsAssignable.hpp @@ -0,0 +1,145 @@ +#include + +namespace Test { +namespace Impl { +template +struct TestAssignability { + using mapping_type = + Kokkos::Impl::ViewMapping; + + template + static void try_assign( + ViewTypeDst& dst, ViewTypeSrc& src, + typename std::enable_if::type* = nullptr) { + dst = src; + } + + template + static void try_assign( + ViewTypeDst&, ViewTypeSrc&, + typename std::enable_if::type* = nullptr) { + Kokkos::Impl::throw_runtime_exception( + "TestAssignability::try_assign: Unexpected call path"); + } + + template + static void test(bool always, bool sometimes, Dimensions... dims) { + ViewTypeDst dst; + ViewTypeSrc src("SRC", dims...); + + bool is_always_assignable = + Kokkos::is_always_assignable::value; + bool is_assignable = Kokkos::is_assignable(dst, src); + + // Print out if there is an error with typeid so you can just filter the + // output with c++filt -t to see which assignment causes the error. + if (is_always_assignable != always || is_assignable != sometimes) + printf( + "is_always_assignable: %i (%i), is_assignable: %i (%i) [ %s ] to [ " + "%s ]\n", + is_always_assignable ? 1 : 0, always ? 1 : 0, is_assignable ? 1 : 0, + sometimes ? 1 : 0, typeid(ViewTypeSrc).name(), + typeid(ViewTypeDst).name()); + if (sometimes) { + ASSERT_NO_THROW(try_assign(dst, src)); + } + ASSERT_EQ(always, is_always_assignable); + ASSERT_EQ(sometimes, is_assignable); + } +}; + +} // namespace Impl + +TEST(TEST_CATEGORY, view_is_assignable) { + using namespace Kokkos; + using h_exec = typename DefaultHostExecutionSpace::memory_space; + using d_exec = typename TEST_EXECSPACE::memory_space; + using left = LayoutLeft; + using right = LayoutRight; + using stride = LayoutStride; + // Static/Dynamic Extents + Impl::TestAssignability, + View>::test(true, true, 10); + Impl::TestAssignability, + View>::test(false, true, 10); + Impl::TestAssignability, + View>::test(false, false, 10); + Impl::TestAssignability, + View>::test(true, true); + Impl::TestAssignability, + View>::test(true, true); + Impl::TestAssignability, + View>::test(false, false); + Impl::TestAssignability, + View>::test(true, true, 10, 10); + Impl::TestAssignability, + View>::test(false, true, 10, 10); + Impl::TestAssignability, + View>::test(false, false, 10, + 10); + Impl::TestAssignability, + View>::test(true, true, 10); + Impl::TestAssignability, + View>::test(true, true, 10); + Impl::TestAssignability, + View>::test(false, false, + 10); + + // Mismatch value_type + Impl::TestAssignability, + View>::test(false, false, 10); + + // Layout assignment + Impl::TestAssignability, + View>::test(true, true, 10); + + // This could be made possible (due to the degenerate nature of the views) but + // we do not allow this yet + // TestAssignability,View>::test(false,true,10,1); + Impl::TestAssignability, + View>::test(false, false, 10, + 2); + Impl::TestAssignability, + View>::test(true, true, 10, 2); + Impl::TestAssignability, + View>::test(true, true, 10, 2); + + // Space Assignment + bool expected = Kokkos::Impl::MemorySpaceAccess::assignable; + Impl::TestAssignability, + View>::test(expected, expected, + 10); + expected = Kokkos::Impl::MemorySpaceAccess::assignable; + Impl::TestAssignability, + View>::test(expected, expected, + 10); + + // reference type and const-qualified types + using SomeViewType = View; +#if defined(KOKKOS_ENABLE_CXX17) + static_assert(is_always_assignable_v); + static_assert(is_always_assignable_v); + static_assert(is_always_assignable_v); + static_assert(is_always_assignable_v); + static_assert(is_always_assignable_v); + static_assert(is_always_assignable_v); + static_assert(is_always_assignable_v); + static_assert(is_always_assignable_v); +#else + static_assert(is_always_assignable::value, ""); + static_assert(is_always_assignable::value, ""); + static_assert(is_always_assignable::value, + ""); + static_assert(is_always_assignable::value, + ""); + static_assert(is_always_assignable::value, ""); + static_assert(is_always_assignable::value, ""); + static_assert(is_always_assignable::value, + ""); + static_assert(is_always_assignable::value, + ""); +#endif +} +} // namespace Test diff --git a/lib/kokkos/core/unit_test/TestViewLayoutStrideAssignment.hpp b/lib/kokkos/core/unit_test/TestViewLayoutStrideAssignment.hpp index 5e373dbbc913be77decd59214c54e4d3f87b979c..583d135f351a1eeb7306105d00f0b022d7160ee5 100644 --- a/lib/kokkos/core/unit_test/TestViewLayoutStrideAssignment.hpp +++ b/lib/kokkos/core/unit_test/TestViewLayoutStrideAssignment.hpp @@ -56,7 +56,7 @@ namespace Test { TEST(TEST_CATEGORY, view_layoutstride_left_to_layoutleft_assignment) { typedef TEST_EXECSPACE exec_space; - auto t = time(0); + auto t = time(nullptr); srand(t); // Use current time as seed for random generator printf("view_layoutstride_left_to_layoutleft_assignment: srand(%lu)\n", size_t(t)); @@ -338,7 +338,7 @@ TEST(TEST_CATEGORY, view_layoutstride_left_to_layoutleft_assignment) { TEST(TEST_CATEGORY, view_layoutstride_right_to_layoutright_assignment) { typedef TEST_EXECSPACE exec_space; - auto t = time(0); + auto t = time(nullptr); srand(t); // Use current time as seed for random generator printf("view_layoutstride_right_to_layoutright_assignment: srand(%lu)\n", size_t(t)); @@ -620,7 +620,7 @@ TEST(TEST_CATEGORY, view_layoutstride_right_to_layoutright_assignment) { TEST(TEST_CATEGORY_DEATH, view_layoutstride_right_to_layoutleft_assignment) { typedef TEST_EXECSPACE exec_space; - auto t = time(0); + auto t = time(nullptr); srand(t); // Use current time as seed for random generator printf("view_layoutstride_right_to_layoutleft_assignment: srand(%lu)\n", size_t(t)); @@ -771,7 +771,7 @@ TEST(TEST_CATEGORY_DEATH, view_layoutstride_right_to_layoutleft_assignment) { TEST(TEST_CATEGORY_DEATH, view_layoutstride_left_to_layoutright_assignment) { typedef TEST_EXECSPACE exec_space; - auto t = time(0); + auto t = time(nullptr); srand(t); // Use current time as seed for random generator printf("view_layoutstride_left_to_layoutright_assignment: srand(%lu)\n", size_t(t)); diff --git a/lib/kokkos/core/unit_test/TestViewLayoutTiled.hpp b/lib/kokkos/core/unit_test/TestViewLayoutTiled.hpp index 2526a3e7e3cc627733d062615c7cbc8c04c5d9f2..75eef2d69e9c05c913e1c7efb84229f8f9c06209 100644 --- a/lib/kokkos/core/unit_test/TestViewLayoutTiled.hpp +++ b/lib/kokkos/core/unit_test/TestViewLayoutTiled.hpp @@ -112,9 +112,10 @@ struct TestViewLayoutTiled { Kokkos::Iterate::Right, Kokkos::Iterate::Right, T0, T1, T2, T3> LayoutRR_4D_2x4x4x2; +#if !defined(KOKKOS_ENABLE_CXX11_DISPATCH_LAMBDA) + static void test_view_layout_tiled_2d(const int, const int) { +#else static void test_view_layout_tiled_2d(const int N0, const int N1) { -#if defined(KOKKOS_ENABLE_CXX11_DISPATCH_LAMBDA) -#if !defined(KOKKOS_ENABLE_CUDA) || (8000 <= CUDA_VERSION) const int FT = T0 * T1; const int NT0 = int(std::ceil(N0 / T0)); @@ -382,15 +383,14 @@ struct TestViewLayoutTiled { ASSERT_EQ(counter_subview, long(0)); ASSERT_EQ(counter_inc, long(0)); } // end scope -#endif #endif } // end test_view_layout_tiled_2d +#if !defined(KOKKOS_ENABLE_CXX11_DISPATCH_LAMBDA) + static void test_view_layout_tiled_3d(const int, const int, const int) { +#else static void test_view_layout_tiled_3d(const int N0, const int N1, const int N2) { -#if defined(KOKKOS_ENABLE_CXX11_DISPATCH_LAMBDA) -#if !defined(KOKKOS_ENABLE_CUDA) || (8000 <= CUDA_VERSION) - const int FT = T0 * T1 * T2; const int NT0 = int(std::ceil(N0 / T0)); @@ -680,14 +680,15 @@ struct TestViewLayoutTiled { ASSERT_EQ(counter_subview, long(0)); ASSERT_EQ(counter_inc, long(0)); } // end scope -#endif #endif } // end test_view_layout_tiled_3d +#if !defined(KOKKOS_ENABLE_CXX11_DISPATCH_LAMBDA) + static void test_view_layout_tiled_4d(const int, const int, const int, + const int){ +#else static void test_view_layout_tiled_4d(const int N0, const int N1, const int N2, const int N3) { -#if defined(KOKKOS_ENABLE_CXX11_DISPATCH_LAMBDA) -#if !defined(KOKKOS_ENABLE_CUDA) || (8000 <= CUDA_VERSION) const int FT = T0 * T1 * T2 * T3; const int NT0 = int(std::ceil(N0 / T0)); @@ -1027,7 +1028,6 @@ struct TestViewLayoutTiled { ASSERT_EQ(counter_subview, long(0)); ASSERT_EQ(counter_inc, long(0)); } // end scope -#endif #endif } // end test_view_layout_tiled_4d diff --git a/lib/kokkos/core/unit_test/TestViewMapping_a.hpp b/lib/kokkos/core/unit_test/TestViewMapping_a.hpp index 5e27cc5e51fac77c2f69e827f6ff2dc8f27d09c3..7bd6353c2b8f881e80f429a30cab75859246fba0 100644 --- a/lib/kokkos/core/unit_test/TestViewMapping_a.hpp +++ b/lib/kokkos/core/unit_test/TestViewMapping_a.hpp @@ -77,7 +77,9 @@ void test_view_mapping() { typedef Kokkos::Impl::ViewDimension<0, 0, 0, 0, 0, 0, 0, 0> dim_s0_s0_s0_s0_s0_s0_s0_s0; - // Fully static dimensions should not be larger than an int. +// Fully static dimensions should not be larger than an int. +#ifndef _WIN32 // For some reason on Windows the first test here fails with + // size being 7 bytes on windows??? ASSERT_LE(sizeof(dim_0), sizeof(int)); ASSERT_LE(sizeof(dim_s2), sizeof(int)); ASSERT_LE(sizeof(dim_s2_s3), sizeof(int)); @@ -98,7 +100,7 @@ void test_view_mapping() { ASSERT_EQ(sizeof(dim_s0_s0_s0_s0_s0_s0), 6 * sizeof(unsigned)); ASSERT_LE(sizeof(dim_s0_s0_s0_s0_s0_s0_s0), 8 * sizeof(unsigned)); ASSERT_EQ(sizeof(dim_s0_s0_s0_s0_s0_s0_s0_s0), 8 * sizeof(unsigned)); - +#endif static_assert(int(dim_0::rank) == int(0), ""); static_assert(int(dim_0::rank_dynamic) == int(0), ""); static_assert(int(dim_0::ArgN0) == 1, ""); @@ -900,7 +902,7 @@ void test_view_mapping() { ASSERT_TRUE(offset.span_is_contiguous()); Kokkos::Impl::ViewMapping v( - Kokkos::Impl::ViewCtorProp((int*)0), stride); + Kokkos::Impl::ViewCtorProp(nullptr), stride); } { @@ -1076,17 +1078,20 @@ void test_view_mapping() { typedef typename Kokkos::Impl::HostMirror::Space::execution_space host_exec_space; - Kokkos::parallel_for( - Kokkos::RangePolicy(0, 10), KOKKOS_LAMBDA(int) { - // 'a' is captured by copy, and the capture mechanism converts 'a' to + int errors = 0; + Kokkos::parallel_reduce( + Kokkos::RangePolicy(0, 10), + KOKKOS_LAMBDA(int, int& e) { // an unmanaged copy. When the parallel dispatch accepts a move for // the lambda, this count should become 1. - ASSERT_EQ(a.use_count(), 2); + if (a.use_count() != 2) ++e; V x = a; - ASSERT_EQ(a.use_count(), 2); - ASSERT_EQ(x.use_count(), 2); - }); + if (a.use_count() != 2) ++e; + if (x.use_count() != 2) ++e; + }, + errors); + ASSERT_EQ(errors, 0); #endif // #if !defined( KOKKOS_ENABLE_CUDA_LAMBDA ) } } @@ -1106,7 +1111,7 @@ struct TestViewMapOperator { #endif KOKKOS_INLINE_FUNCTION - void test_left(size_t i0, long& error_count) const { + void test_left(size_t i0, int64_t& error_count) const { #ifdef KOKKOS_ENABLE_DEPPRECATED_CODE typename ViewType::value_type* const base_ptr = &v(0, 0, 0, 0, 0, 0, 0, 0); #else @@ -1121,7 +1126,7 @@ struct TestViewMapOperator { const size_t n6 = v.extent(6); const size_t n7 = v.extent(7); - long offset = 0; + int64_t offset = 0; for (size_t i7 = 0; i7 < n7; ++i7) for (size_t i6 = 0; i6 < n6; ++i6) @@ -1131,9 +1136,10 @@ struct TestViewMapOperator { for (size_t i2 = 0; i2 < n2; ++i2) for (size_t i1 = 0; i1 < n1; ++i1) { #ifdef KOKKOS_ENABLE_DEPRECATED_CODE - const long d = &v(i0, i1, i2, i3, i4, i5, i6, i7) - base_ptr; + const int64_t d = + &v(i0, i1, i2, i3, i4, i5, i6, i7) - base_ptr; #else - const long d = + const int64_t d = &v.access(i0, i1, i2, i3, i4, i5, i6, i7) - base_ptr; #endif if (d < offset) ++error_count; @@ -1144,7 +1150,7 @@ struct TestViewMapOperator { } KOKKOS_INLINE_FUNCTION - void test_right(size_t i0, long& error_count) const { + void test_right(size_t i0, int64_t& error_count) const { #ifdef KOKKOS_ENABLE_DEPRECATED_CODE typename ViewType::value_type* const base_ptr = &v(0, 0, 0, 0, 0, 0, 0, 0); #else @@ -1159,7 +1165,7 @@ struct TestViewMapOperator { const size_t n6 = v.extent(6); const size_t n7 = v.extent(7); - long offset = 0; + int64_t offset = 0; for (size_t i1 = 0; i1 < n1; ++i1) for (size_t i2 = 0; i2 < n2; ++i2) @@ -1169,9 +1175,10 @@ struct TestViewMapOperator { for (size_t i6 = 0; i6 < n6; ++i6) for (size_t i7 = 0; i7 < n7; ++i7) { #ifdef KOKKOS_ENABLE_DEPRECATED_CODE - const long d = &v(i0, i1, i2, i3, i4, i5, i6, i7) - base_ptr; + const int64_t d = + &v(i0, i1, i2, i3, i4, i5, i6, i7) - base_ptr; #else - const long d = + const int64_t d = &v.access(i0, i1, i2, i3, i4, i5, i6, i7) - base_ptr; #endif if (d < offset) ++error_count; @@ -1182,7 +1189,7 @@ struct TestViewMapOperator { } KOKKOS_INLINE_FUNCTION - void operator()(size_t i, long& error_count) const { + void operator()(size_t i, int64_t& error_count) const { if (std::is_same::value) { test_left(i, error_count); @@ -1245,7 +1252,7 @@ struct TestViewMapOperator { v.extent(4) * v.extent(5) * v.extent(6) * v.extent(7), v.span()); - long error_count; + int64_t error_count; Kokkos::RangePolicy range(0, v.extent(0)); Kokkos::parallel_reduce(range, *this, error_count); diff --git a/lib/kokkos/core/unit_test/TestView_64bit.hpp b/lib/kokkos/core/unit_test/TestView_64bit.hpp index 0b7b9d425aae0f7b27490000baefda62067f04c6..7dc47ccb0f299133a30f042626c2f45151de19ee 100644 --- a/lib/kokkos/core/unit_test/TestView_64bit.hpp +++ b/lib/kokkos/core/unit_test/TestView_64bit.hpp @@ -55,7 +55,7 @@ void test_64bit() { Kokkos::parallel_reduce( Kokkos::RangePolicy>(0, N), - KOKKOS_LAMBDA(const int64_t& i, int64_t& lsum) { lsum += 1; }, sum); + KOKKOS_LAMBDA(const int64_t& /*i*/, int64_t& lsum) { lsum += 1; }, sum); ASSERT_EQ(N, sum); } { diff --git a/lib/kokkos/core/unit_test/UnitTestConfig.make b/lib/kokkos/core/unit_test/UnitTestConfig.make index 97f4af5a8b7d9eeb7568363eeca17b0cca2f8533..5c93bf69fbda1d0388aa833aa790b8b91e116e01 100644 --- a/lib/kokkos/core/unit_test/UnitTestConfig.make +++ b/lib/kokkos/core/unit_test/UnitTestConfig.make @@ -8,7 +8,7 @@ KOKKOS_ARCH_OPTIONS="None AMDAVX ARMv80 ARMv81 ARMv8-ThunderX \ Maxwell Maxwell50 Maxwell52 Maxwell53 Pascal60 Pascal61" #KOKKOS_ARCH_OPTIONS="AMDAVX" -KOKKOS_DEVICE_OPTIONS="Cuda ROCm OpenMP Pthread Serial Qthreads" +KOKKOS_DEVICE_OPTIONS="Cuda ROCm OpenMP Pthread Serial" #KOKKOS_DEVICE_OPTIONS="Cuda" # Configure paths to enable environment query in Makefile.kokkos to work diff --git a/lib/kokkos/core/unit_test/config/cmaketest/CMakeLists.txt b/lib/kokkos/core/unit_test/config/cmaketest/CMakeLists.txt index 72fef0a3e81fc52f321f25476149e675aede9042..5d5901739447b66c4ac5c73182482d4a055dee31 100644 --- a/lib/kokkos/core/unit_test/config/cmaketest/CMakeLists.txt +++ b/lib/kokkos/core/unit_test/config/cmaketest/CMakeLists.txt @@ -56,20 +56,20 @@ foreach(KOKKOS_HOST_ARCH ${KOKKOS_HOST_ARCH_LIST}) set(NEWCONFH ${PREFIX}${KOKKOS_CONFIG_HEADER}) file(RENAME ${KOKKOS_CMAKEFILE} ${NEWCMAKE}) file(RENAME ${KOKKOS_CONFIG_HEADER} ${NEWCONFH}) - - add_test(NAME ${NEWCMAKE}-test + + add_test(NAME ${NEWCMAKE}-test COMMAND ${KOKKOS_TESTDIR}/testmake.sh ${NEWCMAKE} ${KOKKOS_HOST_ARCH} ${KOKKOS_DEV} WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} ) - set_tests_properties(${NEWCMAKE}-test + set_tests_properties(${NEWCMAKE}-test PROPERTIES PASS_REGULAR_EXPRESSION Passed TIMEOUT 15 ) - add_test(NAME ${NEWCONFH}-test - COMMAND ${KOKKOS_TESTDIR}/diffconfig.sh ${NEWCONFH} + add_test(NAME ${NEWCONFH}-test + COMMAND ${KOKKOS_TESTDIR}/diffconfig.sh ${NEWCONFH} WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} ) - set_tests_properties(${NEWCONFH}-test + set_tests_properties(${NEWCONFH}-test PROPERTIES PASS_REGULAR_EXPRESSION Passed TIMEOUT 15 ) diff --git a/lib/kokkos/core/unit_test/config/results/AMDAVX_Qthreads_KokkosCore_config.h b/lib/kokkos/core/unit_test/config/results/AMDAVX_Qthreads_KokkosCore_config.h deleted file mode 100644 index fb5d2146300a1c256f054d74f369af05a89c9f5e..0000000000000000000000000000000000000000 --- a/lib/kokkos/core/unit_test/config/results/AMDAVX_Qthreads_KokkosCore_config.h +++ /dev/null @@ -1,17 +0,0 @@ -/* --------------------------------------------- -Makefile constructed configuration: -Fri Sep 22 17:22:11 MDT 2017 -----------------------------------------------*/ -#if !defined(KOKKOS_MACROS_HPP) || defined(KOKKOS_CORE_CONFIG_H) -#error "Do not include KokkosCore_config.h directly; include Kokkos_Macros.hpp instead." -#else -#define KOKKOS_CORE_CONFIG_H -#endif -/* Execution Spaces */ -#define KOKKOS_HAVE_QTHREADS 1 -/* General Settings */ -#define KOKKOS_HAVE_CXX11 1 -#define KOKKOS_ENABLE_PROFILING -/* Optimization Settings */ -/* Cuda Settings */ -#define KOKKOS_ARCH_AVX 1 diff --git a/lib/kokkos/core/unit_test/config/results/ARMv8-ThunderX_Qthreads_KokkosCore_config.h b/lib/kokkos/core/unit_test/config/results/ARMv8-ThunderX_Qthreads_KokkosCore_config.h deleted file mode 100644 index 3865bc4a9a78f8de925bf1a9f12e64677cb6a4c3..0000000000000000000000000000000000000000 --- a/lib/kokkos/core/unit_test/config/results/ARMv8-ThunderX_Qthreads_KokkosCore_config.h +++ /dev/null @@ -1,18 +0,0 @@ -/* --------------------------------------------- -Makefile constructed configuration: -Fri Sep 22 17:22:20 MDT 2017 -----------------------------------------------*/ -#if !defined(KOKKOS_MACROS_HPP) || defined(KOKKOS_CORE_CONFIG_H) -#error "Do not include KokkosCore_config.h directly; include Kokkos_Macros.hpp instead." -#else -#define KOKKOS_CORE_CONFIG_H -#endif -/* Execution Spaces */ -#define KOKKOS_HAVE_QTHREADS 1 -/* General Settings */ -#define KOKKOS_HAVE_CXX11 1 -#define KOKKOS_ENABLE_PROFILING -/* Optimization Settings */ -/* Cuda Settings */ -#define KOKKOS_ARCH_ARMV80 1 -#define KOKKOS_ARCH_ARMV8_THUNDERX 1 diff --git a/lib/kokkos/core/unit_test/config/results/ARMv80_Qthreads_KokkosCore_config.h b/lib/kokkos/core/unit_test/config/results/ARMv80_Qthreads_KokkosCore_config.h deleted file mode 100644 index 7259a9e9641c999ca267fe68c2b1103db3c0f7b3..0000000000000000000000000000000000000000 --- a/lib/kokkos/core/unit_test/config/results/ARMv80_Qthreads_KokkosCore_config.h +++ /dev/null @@ -1,17 +0,0 @@ -/* --------------------------------------------- -Makefile constructed configuration: -Fri Sep 22 17:22:14 MDT 2017 -----------------------------------------------*/ -#if !defined(KOKKOS_MACROS_HPP) || defined(KOKKOS_CORE_CONFIG_H) -#error "Do not include KokkosCore_config.h directly; include Kokkos_Macros.hpp instead." -#else -#define KOKKOS_CORE_CONFIG_H -#endif -/* Execution Spaces */ -#define KOKKOS_HAVE_QTHREADS 1 -/* General Settings */ -#define KOKKOS_HAVE_CXX11 1 -#define KOKKOS_ENABLE_PROFILING -/* Optimization Settings */ -/* Cuda Settings */ -#define KOKKOS_ARCH_ARMV80 1 diff --git a/lib/kokkos/core/unit_test/config/results/ARMv81_Qthreads_KokkosCore_config.h b/lib/kokkos/core/unit_test/config/results/ARMv81_Qthreads_KokkosCore_config.h deleted file mode 100644 index e9fc71ad9b6e3bc87104ed9e01ff77962c6454d7..0000000000000000000000000000000000000000 --- a/lib/kokkos/core/unit_test/config/results/ARMv81_Qthreads_KokkosCore_config.h +++ /dev/null @@ -1,17 +0,0 @@ -/* --------------------------------------------- -Makefile constructed configuration: -Fri Sep 22 17:22:17 MDT 2017 -----------------------------------------------*/ -#if !defined(KOKKOS_MACROS_HPP) || defined(KOKKOS_CORE_CONFIG_H) -#error "Do not include KokkosCore_config.h directly; include Kokkos_Macros.hpp instead." -#else -#define KOKKOS_CORE_CONFIG_H -#endif -/* Execution Spaces */ -#define KOKKOS_HAVE_QTHREADS 1 -/* General Settings */ -#define KOKKOS_HAVE_CXX11 1 -#define KOKKOS_ENABLE_PROFILING -/* Optimization Settings */ -/* Cuda Settings */ -#define KOKKOS_ARCH_ARMV81 1 diff --git a/lib/kokkos/core/unit_test/config/results/BDW_Qthreads_KokkosCore_config.h b/lib/kokkos/core/unit_test/config/results/BDW_Qthreads_KokkosCore_config.h deleted file mode 100644 index e879e7e1fe97c136d8a9b9b918ef12ed6fa8a7d9..0000000000000000000000000000000000000000 --- a/lib/kokkos/core/unit_test/config/results/BDW_Qthreads_KokkosCore_config.h +++ /dev/null @@ -1,23 +0,0 @@ -/* --------------------------------------------- -Makefile constructed configuration: -Fri Sep 22 17:22:39 MDT 2017 -----------------------------------------------*/ -#if !defined(KOKKOS_MACROS_HPP) || defined(KOKKOS_CORE_CONFIG_H) -#error "Do not include KokkosCore_config.h directly; include Kokkos_Macros.hpp instead." -#else -#define KOKKOS_CORE_CONFIG_H -#endif -/* Execution Spaces */ -#define KOKKOS_HAVE_QTHREADS 1 -#ifndef __CUDA_ARCH__ -#define KOKKOS_ENABLE_TM -#endif -#ifndef __CUDA_ARCH__ -#define KOKKOS_USE_ISA_X86_64 -#endif -/* General Settings */ -#define KOKKOS_HAVE_CXX11 1 -#define KOKKOS_ENABLE_PROFILING -/* Optimization Settings */ -/* Cuda Settings */ -#define KOKKOS_ARCH_AVX2 1 diff --git a/lib/kokkos/core/unit_test/config/results/BGQ_Qthreads_KokkosCore_config.h b/lib/kokkos/core/unit_test/config/results/BGQ_Qthreads_KokkosCore_config.h deleted file mode 100644 index 60c7ddcdb5ee17892128e8708df6ec3a01f7184c..0000000000000000000000000000000000000000 --- a/lib/kokkos/core/unit_test/config/results/BGQ_Qthreads_KokkosCore_config.h +++ /dev/null @@ -1,16 +0,0 @@ -/* --------------------------------------------- -Makefile constructed configuration: -Tue Sep 26 15:19:44 MDT 2017 -----------------------------------------------*/ -#if !defined(KOKKOS_MACROS_HPP) || defined(KOKKOS_CORE_CONFIG_H) -#error "Do not include KokkosCore_config.h directly; include Kokkos_Macros.hpp instead." -#else -#define KOKKOS_CORE_CONFIG_H -#endif -/* Execution Spaces */ -#define KOKKOS_HAVE_QTHREADS 1 -/* General Settings */ -#define KOKKOS_HAVE_CXX11 1 -#define KOKKOS_ENABLE_PROFILING -/* Optimization Settings */ -/* Cuda Settings */ diff --git a/lib/kokkos/core/unit_test/config/results/HSW_Qthreads_KokkosCore_config.h b/lib/kokkos/core/unit_test/config/results/HSW_Qthreads_KokkosCore_config.h deleted file mode 100644 index 253dc35bdfd023ea433d70f9851354f012b936a0..0000000000000000000000000000000000000000 --- a/lib/kokkos/core/unit_test/config/results/HSW_Qthreads_KokkosCore_config.h +++ /dev/null @@ -1,20 +0,0 @@ -/* --------------------------------------------- -Makefile constructed configuration: -Fri Sep 22 17:22:36 MDT 2017 -----------------------------------------------*/ -#if !defined(KOKKOS_MACROS_HPP) || defined(KOKKOS_CORE_CONFIG_H) -#error "Do not include KokkosCore_config.h directly; include Kokkos_Macros.hpp instead." -#else -#define KOKKOS_CORE_CONFIG_H -#endif -/* Execution Spaces */ -#define KOKKOS_HAVE_QTHREADS 1 -#ifndef __CUDA_ARCH__ -#define KOKKOS_USE_ISA_X86_64 -#endif -/* General Settings */ -#define KOKKOS_HAVE_CXX11 1 -#define KOKKOS_ENABLE_PROFILING -/* Optimization Settings */ -/* Cuda Settings */ -#define KOKKOS_ARCH_AVX2 1 diff --git a/lib/kokkos/core/unit_test/config/results/KNC_Qthreads_KokkosCore_config.h b/lib/kokkos/core/unit_test/config/results/KNC_Qthreads_KokkosCore_config.h deleted file mode 100644 index 5f95a83c272fba8de39b91e292307946adf2d062..0000000000000000000000000000000000000000 --- a/lib/kokkos/core/unit_test/config/results/KNC_Qthreads_KokkosCore_config.h +++ /dev/null @@ -1,20 +0,0 @@ -/* --------------------------------------------- -Makefile constructed configuration: -Fri Sep 22 17:22:45 MDT 2017 -----------------------------------------------*/ -#if !defined(KOKKOS_MACROS_HPP) || defined(KOKKOS_CORE_CONFIG_H) -#error "Do not include KokkosCore_config.h directly; include Kokkos_Macros.hpp instead." -#else -#define KOKKOS_CORE_CONFIG_H -#endif -/* Execution Spaces */ -#define KOKKOS_HAVE_QTHREADS 1 -#ifndef __CUDA_ARCH__ -#define KOKKOS_USE_ISA_KNC -#endif -/* General Settings */ -#define KOKKOS_HAVE_CXX11 1 -#define KOKKOS_ENABLE_PROFILING -/* Optimization Settings */ -/* Cuda Settings */ -#define KOKKOS_ARCH_KNC 1 diff --git a/lib/kokkos/core/unit_test/config/results/KNL_Qthreads_KokkosCore_config.h b/lib/kokkos/core/unit_test/config/results/KNL_Qthreads_KokkosCore_config.h deleted file mode 100644 index 6d179d82f8eb3601b289caaad130079145c53d89..0000000000000000000000000000000000000000 --- a/lib/kokkos/core/unit_test/config/results/KNL_Qthreads_KokkosCore_config.h +++ /dev/null @@ -1,20 +0,0 @@ -/* --------------------------------------------- -Makefile constructed configuration: -Fri Sep 22 17:22:48 MDT 2017 -----------------------------------------------*/ -#if !defined(KOKKOS_MACROS_HPP) || defined(KOKKOS_CORE_CONFIG_H) -#error "Do not include KokkosCore_config.h directly; include Kokkos_Macros.hpp instead." -#else -#define KOKKOS_CORE_CONFIG_H -#endif -/* Execution Spaces */ -#define KOKKOS_HAVE_QTHREADS 1 -#ifndef __CUDA_ARCH__ -#define KOKKOS_USE_ISA_X86_64 -#endif -/* General Settings */ -#define KOKKOS_HAVE_CXX11 1 -#define KOKKOS_ENABLE_PROFILING -/* Optimization Settings */ -/* Cuda Settings */ -#define KOKKOS_ARCH_AVX512MIC 1 diff --git a/lib/kokkos/core/unit_test/config/results/Kepler30_Qthreads_KokkosCore_config.h b/lib/kokkos/core/unit_test/config/results/Kepler30_Qthreads_KokkosCore_config.h deleted file mode 100644 index 410ba5ea1599c4d4dda57f0853e58572fb1a35fe..0000000000000000000000000000000000000000 --- a/lib/kokkos/core/unit_test/config/results/Kepler30_Qthreads_KokkosCore_config.h +++ /dev/null @@ -1,16 +0,0 @@ -/* --------------------------------------------- -Makefile constructed configuration: -Fri Sep 22 17:22:50 MDT 2017 -----------------------------------------------*/ -#if !defined(KOKKOS_MACROS_HPP) || defined(KOKKOS_CORE_CONFIG_H) -#error "Do not include KokkosCore_config.h directly; include Kokkos_Macros.hpp instead." -#else -#define KOKKOS_CORE_CONFIG_H -#endif -/* Execution Spaces */ -#define KOKKOS_HAVE_QTHREADS 1 -/* General Settings */ -#define KOKKOS_HAVE_CXX11 1 -#define KOKKOS_ENABLE_PROFILING -/* Optimization Settings */ -/* Cuda Settings */ diff --git a/lib/kokkos/core/unit_test/config/results/Kepler32_Qthreads_KokkosCore_config.h b/lib/kokkos/core/unit_test/config/results/Kepler32_Qthreads_KokkosCore_config.h deleted file mode 100644 index f42d0cc5f2fb11a336d37ee7588bd010fdbf4d0e..0000000000000000000000000000000000000000 --- a/lib/kokkos/core/unit_test/config/results/Kepler32_Qthreads_KokkosCore_config.h +++ /dev/null @@ -1,16 +0,0 @@ -/* --------------------------------------------- -Makefile constructed configuration: -Fri Sep 22 17:22:53 MDT 2017 -----------------------------------------------*/ -#if !defined(KOKKOS_MACROS_HPP) || defined(KOKKOS_CORE_CONFIG_H) -#error "Do not include KokkosCore_config.h directly; include Kokkos_Macros.hpp instead." -#else -#define KOKKOS_CORE_CONFIG_H -#endif -/* Execution Spaces */ -#define KOKKOS_HAVE_QTHREADS 1 -/* General Settings */ -#define KOKKOS_HAVE_CXX11 1 -#define KOKKOS_ENABLE_PROFILING -/* Optimization Settings */ -/* Cuda Settings */ diff --git a/lib/kokkos/core/unit_test/config/results/Kepler35_Qthreads_KokkosCore_config.h b/lib/kokkos/core/unit_test/config/results/Kepler35_Qthreads_KokkosCore_config.h deleted file mode 100644 index 429f5e9e28df4de2a5c559bf8e4b20fe623653cf..0000000000000000000000000000000000000000 --- a/lib/kokkos/core/unit_test/config/results/Kepler35_Qthreads_KokkosCore_config.h +++ /dev/null @@ -1,16 +0,0 @@ -/* --------------------------------------------- -Makefile constructed configuration: -Fri Sep 22 17:22:55 MDT 2017 -----------------------------------------------*/ -#if !defined(KOKKOS_MACROS_HPP) || defined(KOKKOS_CORE_CONFIG_H) -#error "Do not include KokkosCore_config.h directly; include Kokkos_Macros.hpp instead." -#else -#define KOKKOS_CORE_CONFIG_H -#endif -/* Execution Spaces */ -#define KOKKOS_HAVE_QTHREADS 1 -/* General Settings */ -#define KOKKOS_HAVE_CXX11 1 -#define KOKKOS_ENABLE_PROFILING -/* Optimization Settings */ -/* Cuda Settings */ diff --git a/lib/kokkos/core/unit_test/config/results/Kepler37_Qthreads_KokkosCore_config.h b/lib/kokkos/core/unit_test/config/results/Kepler37_Qthreads_KokkosCore_config.h deleted file mode 100644 index 2b8a7f818350f4861cc71e9d65ce9235ef84dc00..0000000000000000000000000000000000000000 --- a/lib/kokkos/core/unit_test/config/results/Kepler37_Qthreads_KokkosCore_config.h +++ /dev/null @@ -1,16 +0,0 @@ -/* --------------------------------------------- -Makefile constructed configuration: -Fri Sep 22 17:22:59 MDT 2017 -----------------------------------------------*/ -#if !defined(KOKKOS_MACROS_HPP) || defined(KOKKOS_CORE_CONFIG_H) -#error "Do not include KokkosCore_config.h directly; include Kokkos_Macros.hpp instead." -#else -#define KOKKOS_CORE_CONFIG_H -#endif -/* Execution Spaces */ -#define KOKKOS_HAVE_QTHREADS 1 -/* General Settings */ -#define KOKKOS_HAVE_CXX11 1 -#define KOKKOS_ENABLE_PROFILING -/* Optimization Settings */ -/* Cuda Settings */ diff --git a/lib/kokkos/core/unit_test/config/results/Kepler_Qthreads_KokkosCore_config.h b/lib/kokkos/core/unit_test/config/results/Kepler_Qthreads_KokkosCore_config.h deleted file mode 100644 index 021d18c0025b208c04c402e47b93e3251f37382b..0000000000000000000000000000000000000000 --- a/lib/kokkos/core/unit_test/config/results/Kepler_Qthreads_KokkosCore_config.h +++ /dev/null @@ -1,16 +0,0 @@ -/* --------------------------------------------- -Makefile constructed configuration: -Tue Sep 26 15:19:51 MDT 2017 -----------------------------------------------*/ -#if !defined(KOKKOS_MACROS_HPP) || defined(KOKKOS_CORE_CONFIG_H) -#error "Do not include KokkosCore_config.h directly; include Kokkos_Macros.hpp instead." -#else -#define KOKKOS_CORE_CONFIG_H -#endif -/* Execution Spaces */ -#define KOKKOS_HAVE_QTHREADS 1 -/* General Settings */ -#define KOKKOS_HAVE_CXX11 1 -#define KOKKOS_ENABLE_PROFILING -/* Optimization Settings */ -/* Cuda Settings */ diff --git a/lib/kokkos/core/unit_test/config/results/Maxwell50_Qthreads_KokkosCore_config.h b/lib/kokkos/core/unit_test/config/results/Maxwell50_Qthreads_KokkosCore_config.h deleted file mode 100644 index be1353365c71f9681ff2b281d94a36016523f39c..0000000000000000000000000000000000000000 --- a/lib/kokkos/core/unit_test/config/results/Maxwell50_Qthreads_KokkosCore_config.h +++ /dev/null @@ -1,16 +0,0 @@ -/* --------------------------------------------- -Makefile constructed configuration: -Fri Sep 22 17:23:02 MDT 2017 -----------------------------------------------*/ -#if !defined(KOKKOS_MACROS_HPP) || defined(KOKKOS_CORE_CONFIG_H) -#error "Do not include KokkosCore_config.h directly; include Kokkos_Macros.hpp instead." -#else -#define KOKKOS_CORE_CONFIG_H -#endif -/* Execution Spaces */ -#define KOKKOS_HAVE_QTHREADS 1 -/* General Settings */ -#define KOKKOS_HAVE_CXX11 1 -#define KOKKOS_ENABLE_PROFILING -/* Optimization Settings */ -/* Cuda Settings */ diff --git a/lib/kokkos/core/unit_test/config/results/Maxwell52_Qthreads_KokkosCore_config.h b/lib/kokkos/core/unit_test/config/results/Maxwell52_Qthreads_KokkosCore_config.h deleted file mode 100644 index 58a043c6a3ed49a89b8d29a3a9ba857a6174cc81..0000000000000000000000000000000000000000 --- a/lib/kokkos/core/unit_test/config/results/Maxwell52_Qthreads_KokkosCore_config.h +++ /dev/null @@ -1,16 +0,0 @@ -/* --------------------------------------------- -Makefile constructed configuration: -Fri Sep 22 17:23:05 MDT 2017 -----------------------------------------------*/ -#if !defined(KOKKOS_MACROS_HPP) || defined(KOKKOS_CORE_CONFIG_H) -#error "Do not include KokkosCore_config.h directly; include Kokkos_Macros.hpp instead." -#else -#define KOKKOS_CORE_CONFIG_H -#endif -/* Execution Spaces */ -#define KOKKOS_HAVE_QTHREADS 1 -/* General Settings */ -#define KOKKOS_HAVE_CXX11 1 -#define KOKKOS_ENABLE_PROFILING -/* Optimization Settings */ -/* Cuda Settings */ diff --git a/lib/kokkos/core/unit_test/config/results/Maxwell53_Qthreads_KokkosCore_config.h b/lib/kokkos/core/unit_test/config/results/Maxwell53_Qthreads_KokkosCore_config.h deleted file mode 100644 index 96fdbef3dcbe8960e8d0db572321f88b0d3eccc5..0000000000000000000000000000000000000000 --- a/lib/kokkos/core/unit_test/config/results/Maxwell53_Qthreads_KokkosCore_config.h +++ /dev/null @@ -1,16 +0,0 @@ -/* --------------------------------------------- -Makefile constructed configuration: -Fri Sep 22 17:23:08 MDT 2017 -----------------------------------------------*/ -#if !defined(KOKKOS_MACROS_HPP) || defined(KOKKOS_CORE_CONFIG_H) -#error "Do not include KokkosCore_config.h directly; include Kokkos_Macros.hpp instead." -#else -#define KOKKOS_CORE_CONFIG_H -#endif -/* Execution Spaces */ -#define KOKKOS_HAVE_QTHREADS 1 -/* General Settings */ -#define KOKKOS_HAVE_CXX11 1 -#define KOKKOS_ENABLE_PROFILING -/* Optimization Settings */ -/* Cuda Settings */ diff --git a/lib/kokkos/core/unit_test/config/results/Maxwell_Qthreads_KokkosCore_config.h b/lib/kokkos/core/unit_test/config/results/Maxwell_Qthreads_KokkosCore_config.h deleted file mode 100644 index a7f1fd3803bfffd03caaca89dcd72a0213ccada2..0000000000000000000000000000000000000000 --- a/lib/kokkos/core/unit_test/config/results/Maxwell_Qthreads_KokkosCore_config.h +++ /dev/null @@ -1,16 +0,0 @@ -/* --------------------------------------------- -Makefile constructed configuration: -Tue Sep 26 15:20:01 MDT 2017 -----------------------------------------------*/ -#if !defined(KOKKOS_MACROS_HPP) || defined(KOKKOS_CORE_CONFIG_H) -#error "Do not include KokkosCore_config.h directly; include Kokkos_Macros.hpp instead." -#else -#define KOKKOS_CORE_CONFIG_H -#endif -/* Execution Spaces */ -#define KOKKOS_HAVE_QTHREADS 1 -/* General Settings */ -#define KOKKOS_HAVE_CXX11 1 -#define KOKKOS_ENABLE_PROFILING -/* Optimization Settings */ -/* Cuda Settings */ diff --git a/lib/kokkos/core/unit_test/config/results/None_Qthreads_KokkosCore_config.h b/lib/kokkos/core/unit_test/config/results/None_Qthreads_KokkosCore_config.h deleted file mode 100644 index 6bd8addd97479b4ffe9aca8cb0bc5fa904d38164..0000000000000000000000000000000000000000 --- a/lib/kokkos/core/unit_test/config/results/None_Qthreads_KokkosCore_config.h +++ /dev/null @@ -1,16 +0,0 @@ -/* --------------------------------------------- -Makefile constructed configuration: -Tue Sep 26 15:19:23 MDT 2017 -----------------------------------------------*/ -#if !defined(KOKKOS_MACROS_HPP) || defined(KOKKOS_CORE_CONFIG_H) -#error "Do not include KokkosCore_config.h directly; include Kokkos_Macros.hpp instead." -#else -#define KOKKOS_CORE_CONFIG_H -#endif -/* Execution Spaces */ -#define KOKKOS_HAVE_QTHREADS 1 -/* General Settings */ -#define KOKKOS_HAVE_CXX11 1 -#define KOKKOS_ENABLE_PROFILING -/* Optimization Settings */ -/* Cuda Settings */ diff --git a/lib/kokkos/core/unit_test/config/results/Pascal60_Qthreads_KokkosCore_config.h b/lib/kokkos/core/unit_test/config/results/Pascal60_Qthreads_KokkosCore_config.h deleted file mode 100644 index c5a2d1d707ff8effffb4b99bfe8066ef7706ad9f..0000000000000000000000000000000000000000 --- a/lib/kokkos/core/unit_test/config/results/Pascal60_Qthreads_KokkosCore_config.h +++ /dev/null @@ -1,16 +0,0 @@ -/* --------------------------------------------- -Makefile constructed configuration: -Fri Sep 22 17:23:10 MDT 2017 -----------------------------------------------*/ -#if !defined(KOKKOS_MACROS_HPP) || defined(KOKKOS_CORE_CONFIG_H) -#error "Do not include KokkosCore_config.h directly; include Kokkos_Macros.hpp instead." -#else -#define KOKKOS_CORE_CONFIG_H -#endif -/* Execution Spaces */ -#define KOKKOS_HAVE_QTHREADS 1 -/* General Settings */ -#define KOKKOS_HAVE_CXX11 1 -#define KOKKOS_ENABLE_PROFILING -/* Optimization Settings */ -/* Cuda Settings */ diff --git a/lib/kokkos/core/unit_test/config/results/Pascal61_Qthreads_KokkosCore_config.h b/lib/kokkos/core/unit_test/config/results/Pascal61_Qthreads_KokkosCore_config.h deleted file mode 100644 index 958aac11da7b579c2d7642a2eae5d74952c13423..0000000000000000000000000000000000000000 --- a/lib/kokkos/core/unit_test/config/results/Pascal61_Qthreads_KokkosCore_config.h +++ /dev/null @@ -1,16 +0,0 @@ -/* --------------------------------------------- -Makefile constructed configuration: -Fri Sep 22 17:23:13 MDT 2017 -----------------------------------------------*/ -#if !defined(KOKKOS_MACROS_HPP) || defined(KOKKOS_CORE_CONFIG_H) -#error "Do not include KokkosCore_config.h directly; include Kokkos_Macros.hpp instead." -#else -#define KOKKOS_CORE_CONFIG_H -#endif -/* Execution Spaces */ -#define KOKKOS_HAVE_QTHREADS 1 -/* General Settings */ -#define KOKKOS_HAVE_CXX11 1 -#define KOKKOS_ENABLE_PROFILING -/* Optimization Settings */ -/* Cuda Settings */ diff --git a/lib/kokkos/core/unit_test/config/results/Power7_Qthreads_KokkosCore_config.h b/lib/kokkos/core/unit_test/config/results/Power7_Qthreads_KokkosCore_config.h deleted file mode 100644 index dffa8a3f58214b5d7637970bca815e0d22419d3e..0000000000000000000000000000000000000000 --- a/lib/kokkos/core/unit_test/config/results/Power7_Qthreads_KokkosCore_config.h +++ /dev/null @@ -1,20 +0,0 @@ -/* --------------------------------------------- -Makefile constructed configuration: -Fri Sep 22 17:22:22 MDT 2017 -----------------------------------------------*/ -#if !defined(KOKKOS_MACROS_HPP) || defined(KOKKOS_CORE_CONFIG_H) -#error "Do not include KokkosCore_config.h directly; include Kokkos_Macros.hpp instead." -#else -#define KOKKOS_CORE_CONFIG_H -#endif -/* Execution Spaces */ -#define KOKKOS_HAVE_QTHREADS 1 -#ifndef __CUDA_ARCH__ -#define KOKKOS_USE_ISA_POWERPCBE -#endif -/* General Settings */ -#define KOKKOS_HAVE_CXX11 1 -#define KOKKOS_ENABLE_PROFILING -/* Optimization Settings */ -/* Cuda Settings */ -#define KOKKOS_ARCH_POWER7 1 diff --git a/lib/kokkos/core/unit_test/config/results/Power8_Qthreads_KokkosCore_config.h b/lib/kokkos/core/unit_test/config/results/Power8_Qthreads_KokkosCore_config.h deleted file mode 100644 index 9da90f4f7e823e7c267f790d6c9f588c8d038c5d..0000000000000000000000000000000000000000 --- a/lib/kokkos/core/unit_test/config/results/Power8_Qthreads_KokkosCore_config.h +++ /dev/null @@ -1,20 +0,0 @@ -/* --------------------------------------------- -Makefile constructed configuration: -Fri Sep 22 17:22:25 MDT 2017 -----------------------------------------------*/ -#if !defined(KOKKOS_MACROS_HPP) || defined(KOKKOS_CORE_CONFIG_H) -#error "Do not include KokkosCore_config.h directly; include Kokkos_Macros.hpp instead." -#else -#define KOKKOS_CORE_CONFIG_H -#endif -/* Execution Spaces */ -#define KOKKOS_HAVE_QTHREADS 1 -#ifndef __CUDA_ARCH__ -#define KOKKOS_USE_ISA_POWERPCLE -#endif -/* General Settings */ -#define KOKKOS_HAVE_CXX11 1 -#define KOKKOS_ENABLE_PROFILING -/* Optimization Settings */ -/* Cuda Settings */ -#define KOKKOS_ARCH_POWER8 1 diff --git a/lib/kokkos/core/unit_test/config/results/Power9_Qthreads_KokkosCore_config.h b/lib/kokkos/core/unit_test/config/results/Power9_Qthreads_KokkosCore_config.h deleted file mode 100644 index 5c5be2ed3cbc5328d0c639d58d2f503a0ca8da3a..0000000000000000000000000000000000000000 --- a/lib/kokkos/core/unit_test/config/results/Power9_Qthreads_KokkosCore_config.h +++ /dev/null @@ -1,20 +0,0 @@ -/* --------------------------------------------- -Makefile constructed configuration: -Fri Sep 22 17:22:28 MDT 2017 -----------------------------------------------*/ -#if !defined(KOKKOS_MACROS_HPP) || defined(KOKKOS_CORE_CONFIG_H) -#error "Do not include KokkosCore_config.h directly; include Kokkos_Macros.hpp instead." -#else -#define KOKKOS_CORE_CONFIG_H -#endif -/* Execution Spaces */ -#define KOKKOS_HAVE_QTHREADS 1 -#ifndef __CUDA_ARCH__ -#define KOKKOS_USE_ISA_POWERPCLE -#endif -/* General Settings */ -#define KOKKOS_HAVE_CXX11 1 -#define KOKKOS_ENABLE_PROFILING -/* Optimization Settings */ -/* Cuda Settings */ -#define KOKKOS_ARCH_POWER9 1 diff --git a/lib/kokkos/core/unit_test/config/results/SKX_Qthreads_KokkosCore_config.h b/lib/kokkos/core/unit_test/config/results/SKX_Qthreads_KokkosCore_config.h deleted file mode 100644 index 2e4b1d61ef92c6580ce2d25e4b2a1855b5e06221..0000000000000000000000000000000000000000 --- a/lib/kokkos/core/unit_test/config/results/SKX_Qthreads_KokkosCore_config.h +++ /dev/null @@ -1,23 +0,0 @@ -/* --------------------------------------------- -Makefile constructed configuration: -Fri Sep 22 17:22:42 MDT 2017 -----------------------------------------------*/ -#if !defined(KOKKOS_MACROS_HPP) || defined(KOKKOS_CORE_CONFIG_H) -#error "Do not include KokkosCore_config.h directly; include Kokkos_Macros.hpp instead." -#else -#define KOKKOS_CORE_CONFIG_H -#endif -/* Execution Spaces */ -#define KOKKOS_HAVE_QTHREADS 1 -#ifndef __CUDA_ARCH__ -#define KOKKOS_ENABLE_TM -#endif -#ifndef __CUDA_ARCH__ -#define KOKKOS_USE_ISA_X86_64 -#endif -/* General Settings */ -#define KOKKOS_HAVE_CXX11 1 -#define KOKKOS_ENABLE_PROFILING -/* Optimization Settings */ -/* Cuda Settings */ -#define KOKKOS_ARCH_AVX512XEON 1 diff --git a/lib/kokkos/core/unit_test/config/results/SNB_Qthreads_KokkosCore_config.h b/lib/kokkos/core/unit_test/config/results/SNB_Qthreads_KokkosCore_config.h deleted file mode 100644 index 2f0216f9c4b859024720575e59c5881d3131eb4b..0000000000000000000000000000000000000000 --- a/lib/kokkos/core/unit_test/config/results/SNB_Qthreads_KokkosCore_config.h +++ /dev/null @@ -1,20 +0,0 @@ -/* --------------------------------------------- -Makefile constructed configuration: -Fri Sep 22 17:22:34 MDT 2017 -----------------------------------------------*/ -#if !defined(KOKKOS_MACROS_HPP) || defined(KOKKOS_CORE_CONFIG_H) -#error "Do not include KokkosCore_config.h directly; include Kokkos_Macros.hpp instead." -#else -#define KOKKOS_CORE_CONFIG_H -#endif -/* Execution Spaces */ -#define KOKKOS_HAVE_QTHREADS 1 -#ifndef __CUDA_ARCH__ -#define KOKKOS_USE_ISA_X86_64 -#endif -/* General Settings */ -#define KOKKOS_HAVE_CXX11 1 -#define KOKKOS_ENABLE_PROFILING -/* Optimization Settings */ -/* Cuda Settings */ -#define KOKKOS_ARCH_AVX 1 diff --git a/lib/kokkos/core/unit_test/config/results/WSM_Qthreads_KokkosCore_config.h b/lib/kokkos/core/unit_test/config/results/WSM_Qthreads_KokkosCore_config.h deleted file mode 100644 index d4a78790e399737f15b9f2507bcf41d531281a21..0000000000000000000000000000000000000000 --- a/lib/kokkos/core/unit_test/config/results/WSM_Qthreads_KokkosCore_config.h +++ /dev/null @@ -1,20 +0,0 @@ -/* --------------------------------------------- -Makefile constructed configuration: -Fri Sep 22 17:22:31 MDT 2017 -----------------------------------------------*/ -#if !defined(KOKKOS_MACROS_HPP) || defined(KOKKOS_CORE_CONFIG_H) -#error "Do not include KokkosCore_config.h directly; include Kokkos_Macros.hpp instead." -#else -#define KOKKOS_CORE_CONFIG_H -#endif -/* Execution Spaces */ -#define KOKKOS_HAVE_QTHREADS 1 -#ifndef __CUDA_ARCH__ -#define KOKKOS_USE_ISA_X86_64 -#endif -/* General Settings */ -#define KOKKOS_HAVE_CXX11 1 -#define KOKKOS_ENABLE_PROFILING -/* Optimization Settings */ -/* Cuda Settings */ -#define KOKKOS_ARCH_SSE42 1 diff --git a/lib/kokkos/containers/unit_tests/cuda/TestCuda_BitSet.cpp b/lib/kokkos/core/unit_test/cuda/TestCuda_Concepts.cpp similarity index 98% rename from lib/kokkos/containers/unit_tests/cuda/TestCuda_BitSet.cpp rename to lib/kokkos/core/unit_test/cuda/TestCuda_Concepts.cpp index 5306ab3883753875bf9b3a2ee3ce6b9058eddfe6..31b36cbd8a453ca4b769635f84e5f376605d6344 100644 --- a/lib/kokkos/containers/unit_tests/cuda/TestCuda_BitSet.cpp +++ b/lib/kokkos/core/unit_test/cuda/TestCuda_Concepts.cpp @@ -1,4 +1,3 @@ - /* //@HEADER // ************************************************************************ @@ -44,4 +43,4 @@ */ #include -#include +#include diff --git a/lib/kokkos/core/unit_test/cuda/TestCuda_DeepCopyAlignment.cpp b/lib/kokkos/core/unit_test/cuda/TestCuda_DeepCopyAlignment.cpp index 16793abe0824f6a7cafb4ecac4fa32dde6be00e8..e8ce7381b4cc5838f05f2a5c8e205606a2a46e66 100644 --- a/lib/kokkos/core/unit_test/cuda/TestCuda_DeepCopyAlignment.cpp +++ b/lib/kokkos/core/unit_test/cuda/TestCuda_DeepCopyAlignment.cpp @@ -43,6 +43,4 @@ */ #include -#if defined(KOKKOS_ENABLE_CXX11_DISPATCH_LAMBDA) #include -#endif diff --git a/lib/kokkos/containers/unit_tests/cuda/TestCuda_OffsetView.cpp b/lib/kokkos/core/unit_test/cuda/TestCuda_RangePolicyRequire.cpp similarity index 98% rename from lib/kokkos/containers/unit_tests/cuda/TestCuda_OffsetView.cpp rename to lib/kokkos/core/unit_test/cuda/TestCuda_RangePolicyRequire.cpp index b2e851d0999ad1267bc0906bed123220c58bf5b8..1317705399cf0ce4e302e4238a19971c9338b0ae 100644 --- a/lib/kokkos/containers/unit_tests/cuda/TestCuda_OffsetView.cpp +++ b/lib/kokkos/core/unit_test/cuda/TestCuda_RangePolicyRequire.cpp @@ -44,4 +44,4 @@ */ #include -#include +#include diff --git a/lib/kokkos/core/unit_test/cuda/TestCuda_Spaces.cpp b/lib/kokkos/core/unit_test/cuda/TestCuda_Spaces.cpp index 800d589e94a044a41b92e9daa90285cda6e4e7cf..d68ffb0865507c356247a8b3a5fcad6f9090b019 100644 --- a/lib/kokkos/core/unit_test/cuda/TestCuda_Spaces.cpp +++ b/lib/kokkos/core/unit_test/cuda/TestCuda_Spaces.cpp @@ -280,73 +280,6 @@ TEST(cuda, uvm) { } } -/* Removing UVM Allocs Test due to added time to complete overall unit test - * The issue verified with this unit test appears to no longer be an - * problem. Refer to github issue 1880 for more details - * -TEST( cuda, uvm_num_allocs ) -{ - // The max number of UVM allocations allowed is 65536. - #define MAX_NUM_ALLOCS 65536 - - if ( Kokkos::CudaUVMSpace::available() ) { - struct TestMaxUVMAllocs { - - using view_type = Kokkos::View< double*, Kokkos::CudaUVMSpace >; - using view_of_view_type = Kokkos::View< view_type[ MAX_NUM_ALLOCS ] - , Kokkos::CudaUVMSpace >; - - TestMaxUVMAllocs() : view_allocs_test( "view_allocs_test" ) - { - for ( auto i = 0; i < MAX_NUM_ALLOCS; ++i ) { - - // Kokkos will throw a runtime exception if an attempt is made to - // allocate more than the maximum number of uvm allocations. - - // In this test, the max num of allocs occurs when i = MAX_NUM_ALLOCS -- 1 - // since the 'outer' view counts as one UVM allocation, leaving - // 65535 possible UVM allocations, that is 'i in [0, 65535)'. - - // The test will catch the exception thrown in this case and continue. - - if ( i == ( MAX_NUM_ALLOCS - 1 ) ) { - EXPECT_ANY_THROW( { view_allocs_test( i ) = view_type( "inner_view", -1 ); } ); - } - else { - if ( i < MAX_NUM_ALLOCS - 1000 ) { - EXPECT_NO_THROW( { view_allocs_test( i ) = view_type( -"inner_view", 1 ); } ); } else { // This might or might not throw depending on -compilation options. try { view_allocs_test( i ) = view_type( "inner_view", 1 ); - } - catch ( ... ) {} - } - } - - } // End allocation for loop. - - for ( auto i = 0; i < MAX_NUM_ALLOCS - 1; ++i ) { - - view_allocs_test( i ) = view_type(); - - } // End deallocation for loop. - - view_allocs_test = view_of_view_type(); // Deallocate the view of views. - } - - // Member. - view_of_view_type view_allocs_test; - }; - - // Trigger the test via the TestMaxUVMAllocs constructor. - TestMaxUVMAllocs(); - } - - #undef MAX_NUM_ALLOCS -} -*/ - template struct TestViewCudaAccessible { enum { N = 1000 }; diff --git a/lib/kokkos/core/unit_test/cuda/TestCuda_Team.cpp b/lib/kokkos/core/unit_test/cuda/TestCuda_Team.cpp index 93aae95baccc42fb9a7af94115e5226456770a1a..fe57437989ed15fbfdd2b75802baa257a79c225c 100644 --- a/lib/kokkos/core/unit_test/cuda/TestCuda_Team.cpp +++ b/lib/kokkos/core/unit_test/cuda/TestCuda_Team.cpp @@ -79,26 +79,100 @@ TEST(TEST_CATEGORY, team_reduce) { Kokkos::Schedule >::test_reduce(1000); } -TEST(TEST_CATEGORY, team_broadcast) { - TestTeamBroadcast >::test_teambroadcast(0); - TestTeamBroadcast >::test_teambroadcast(0); - - TestTeamBroadcast >::test_teambroadcast(2); - TestTeamBroadcast >::test_teambroadcast(2); - - TestTeamBroadcast >::test_teambroadcast(16); - TestTeamBroadcast >::test_teambroadcast(16); - - TestTeamBroadcast >:: - test_teambroadcast(1000); - TestTeamBroadcast >:: - test_teambroadcast(1000); +TEST(TEST_CATEGORY, team_broadcast_long) { + TestTeamBroadcast, + long>::test_teambroadcast(0, 1); + TestTeamBroadcast, + long>::test_teambroadcast(0, 1); + + TestTeamBroadcast, + long>::test_teambroadcast(2, 1); + TestTeamBroadcast, + long>::test_teambroadcast(2, 1); + + TestTeamBroadcast, + long>::test_teambroadcast(16, 1); + TestTeamBroadcast, + long>::test_teambroadcast(16, 1); + + // TestTeamBroadcast, long + // >:: + // test_teambroadcast(1000, 1); + // TestTeamBroadcast, long + // >:: + // test_teambroadcast(1000, 1); +} + +TEST(TEST_CATEGORY, team_broadcast_char) { + TestTeamBroadcast, + unsigned char>::test_teambroadcast(0, 1); + TestTeamBroadcast, + unsigned char>::test_teambroadcast(0, 1); + + TestTeamBroadcast, + unsigned char>::test_teambroadcast(2, 1); + TestTeamBroadcast, + unsigned char>::test_teambroadcast(2, 1); + + TestTeamBroadcast, + unsigned char>::test_teambroadcast(16, 1); + TestTeamBroadcast, + unsigned char>::test_teambroadcast(16, 1); + + // TestTeamBroadcast, long + // >:: + // test_teambroadcast(1000, 1); + // TestTeamBroadcast, long + // >:: + // test_teambroadcast(1000, 1); +} + +TEST(TEST_CATEGORY, team_broadcast_float) { + TestTeamBroadcast, + float>::test_teambroadcast(0, 1.3); + TestTeamBroadcast, + float>::test_teambroadcast(0, 1.3); + + TestTeamBroadcast, + float>::test_teambroadcast(2, 1.3); + TestTeamBroadcast, + float>::test_teambroadcast(2, 1.3); + + TestTeamBroadcast, + float>::test_teambroadcast(16, 1.3); + TestTeamBroadcast, + float>::test_teambroadcast(16, 1.3); + + // TestTeamBroadcast, float + // >:: + // test_teambroadcast(1000, 1.3); + // TestTeamBroadcast, float + // >:: + // test_teambroadcast(1000, 1.3); +} + +TEST(TEST_CATEGORY, team_broadcast_double) { + TestTeamBroadcast, + double>::test_teambroadcast(0, 1.3); + TestTeamBroadcast, + double>::test_teambroadcast(0, 1.3); + + TestTeamBroadcast, + double>::test_teambroadcast(2, 1.3); + TestTeamBroadcast, + double>::test_teambroadcast(2, 1.3); + + TestTeamBroadcast, + double>::test_teambroadcast(16, 1.3); + TestTeamBroadcast, + double>::test_teambroadcast(16, 1.3); + + // TestTeamBroadcast, double + // >:: + // test_teambroadcast(1000, 1.3); + // TestTeamBroadcast, + // double >:: + // test_teambroadcast(1000, 1.3); } } // namespace Test diff --git a/lib/kokkos/core/unit_test/cuda/TestCuda_TeamScratch.cpp b/lib/kokkos/core/unit_test/cuda/TestCuda_TeamScratch.cpp index 858bf599b5e92eb98968adfe28692b3bee77153b..63291dbbb4980001c54ef99b5f636c0ebb360235 100644 --- a/lib/kokkos/core/unit_test/cuda/TestCuda_TeamScratch.cpp +++ b/lib/kokkos/core/unit_test/cuda/TestCuda_TeamScratch.cpp @@ -58,7 +58,6 @@ TEST(TEST_CATEGORY, team_scratch_request) { } #if defined(KOKKOS_ENABLE_CXX11_DISPATCH_LAMBDA) -#if !defined(KOKKOS_ENABLE_CUDA) || (8000 <= CUDA_VERSION) TEST(TEST_CATEGORY, team_lambda_shared_request) { TestLambdaSharedTeam >(); @@ -68,7 +67,6 @@ TEST(TEST_CATEGORY, team_lambda_shared_request) { TEST(TEST_CATEGORY, scratch_align) { TestScratchAlignment(); } #endif -#endif TEST(TEST_CATEGORY, shmem_size) { TestShmemSize(); } diff --git a/lib/kokkos/core/unit_test/cuda/TestCuda_ViewAPI_e.cpp b/lib/kokkos/core/unit_test/cuda/TestCuda_ViewAPI_e.cpp index a15bdbd8d3a756221b55739d76cd3591d212d051..754b90acac452b5bcaf4813dfb715a23b8c35dc8 100644 --- a/lib/kokkos/core/unit_test/cuda/TestCuda_ViewAPI_e.cpp +++ b/lib/kokkos/core/unit_test/cuda/TestCuda_ViewAPI_e.cpp @@ -44,3 +44,4 @@ #include #include +#include diff --git a/lib/kokkos/core/unit_test/default/TestDefaultDeviceType_d.cpp b/lib/kokkos/core/unit_test/default/TestDefaultDeviceType_d.cpp index 3502e1762f3bbc8aa59cfd2bf55f006e80e9b0d8..ff87b7802cfdababbd3ce6994f8f794d44bb4d24 100644 --- a/lib/kokkos/core/unit_test/default/TestDefaultDeviceType_d.cpp +++ b/lib/kokkos/core/unit_test/default/TestDefaultDeviceType_d.cpp @@ -61,7 +61,7 @@ TEST(defaultdevicetype, malloc) { Kokkos::kokkos_free(data); int* data2 = (int*)Kokkos::kokkos_malloc(0); - ASSERT_TRUE(data2 == NULL); + ASSERT_TRUE(data2 == nullptr); Kokkos::kokkos_free(data2); } diff --git a/lib/kokkos/core/unit_test/qthreads/TestQthreads_Category.hpp b/lib/kokkos/core/unit_test/hip/TestHIPHostPinned_Category.hpp similarity index 91% rename from lib/kokkos/core/unit_test/qthreads/TestQthreads_Category.hpp rename to lib/kokkos/core/unit_test/hip/TestHIPHostPinned_Category.hpp index fc0a08870044a6b6949f4928efca4e24a457ab84..12c69926c7bfc10ec7fef02d9e96c39691c557d6 100644 --- a/lib/kokkos/core/unit_test/qthreads/TestQthreads_Category.hpp +++ b/lib/kokkos/core/unit_test/hip/TestHIPHostPinned_Category.hpp @@ -42,13 +42,12 @@ //@HEADER */ -#ifndef KOKKOS_TEST_QTHREADS_HPP -#define KOKKOS_TEST_QTHREADS_HPP +#ifndef KOKKOS_TEST_HIPHOSTPINNED_HPP +#define KOKKOS_TEST_HIPHOSTPINNED_HPP #include -#define TEST_CATEGORY qthreads -#define TEST_CATEGORY_DEATH qthreads_DeathTest -#define TEST_EXECSPACE Kokkos::Qthreads +#define TEST_CATEGORY hip_hostpinned +#define TEST_EXECSPACE Kokkos::Experimental::HIPHostPinnedSpace #endif diff --git a/lib/kokkos/core/unit_test/qthreads/TestQthreads_SubView_c10.cpp b/lib/kokkos/core/unit_test/hip/TestHIPHostPinned_SharedAlloc.cpp similarity index 91% rename from lib/kokkos/core/unit_test/qthreads/TestQthreads_SubView_c10.cpp rename to lib/kokkos/core/unit_test/hip/TestHIPHostPinned_SharedAlloc.cpp index e42c464020d9efab7f6b5a8c60d963aaa44604bd..7b2db4f8bcc3025c2ca1cc365291a0c1e5a700fb 100644 --- a/lib/kokkos/core/unit_test/qthreads/TestQthreads_SubView_c10.cpp +++ b/lib/kokkos/core/unit_test/hip/TestHIPHostPinned_SharedAlloc.cpp @@ -42,14 +42,13 @@ //@HEADER */ -#include +#include +#include namespace Test { -TEST_F(qthreads, view_subview_3d_from_5d_right) { -#if 0 - TestViewSubview::test_3d_subview_5d_right< Kokkos::Qthreads >(); -#endif +TEST(TEST_CATEGORY, impl_shared_alloc) { + test_shared_alloc(); } } // namespace Test diff --git a/lib/kokkos/core/unit_test/qthreads/TestQqthreads_ViewAPI_a.cpp b/lib/kokkos/core/unit_test/hip/TestHIPHostPinned_ViewAPI_a.cpp similarity index 97% rename from lib/kokkos/core/unit_test/qthreads/TestQqthreads_ViewAPI_a.cpp rename to lib/kokkos/core/unit_test/hip/TestHIPHostPinned_ViewAPI_a.cpp index 4339c1b5a020b17aec80ad9cc4dafec5f92e28c4..53f0371b23dfd0cd32044ba70a4b106f2f7b9a45 100644 --- a/lib/kokkos/core/unit_test/qthreads/TestQqthreads_ViewAPI_a.cpp +++ b/lib/kokkos/core/unit_test/hip/TestHIPHostPinned_ViewAPI_a.cpp @@ -42,5 +42,5 @@ //@HEADER */ -#include +#include #include diff --git a/lib/kokkos/core/unit_test/qthreads/TestQqthreads_ViewAPI_b.cpp b/lib/kokkos/core/unit_test/hip/TestHIPHostPinned_ViewAPI_b.cpp similarity index 97% rename from lib/kokkos/core/unit_test/qthreads/TestQqthreads_ViewAPI_b.cpp rename to lib/kokkos/core/unit_test/hip/TestHIPHostPinned_ViewAPI_b.cpp index bcbef94ab7ee63c11d8fc8dbe35c64ea8e528380..2e3685d6102d75b8516846f80bc4c3fb959a93b7 100644 --- a/lib/kokkos/core/unit_test/qthreads/TestQqthreads_ViewAPI_b.cpp +++ b/lib/kokkos/core/unit_test/hip/TestHIPHostPinned_ViewAPI_b.cpp @@ -42,5 +42,5 @@ //@HEADER */ -#include +#include #include diff --git a/lib/kokkos/core/unit_test/qthreads/TestQqthreads_ViewAPI_c.cpp b/lib/kokkos/core/unit_test/hip/TestHIPHostPinned_ViewAPI_c.cpp similarity index 97% rename from lib/kokkos/core/unit_test/qthreads/TestQqthreads_ViewAPI_c.cpp rename to lib/kokkos/core/unit_test/hip/TestHIPHostPinned_ViewAPI_c.cpp index 21c9fd890cf8240e5f21c565ef78f8eb3d7463fe..079a244d43ee4e2570dc85cdb6bc6d8957769d55 100644 --- a/lib/kokkos/core/unit_test/qthreads/TestQqthreads_ViewAPI_c.cpp +++ b/lib/kokkos/core/unit_test/hip/TestHIPHostPinned_ViewAPI_c.cpp @@ -42,5 +42,5 @@ //@HEADER */ -#include +#include #include diff --git a/lib/kokkos/core/unit_test/qthreads/TestQqthreads_ViewAPI_d.cpp b/lib/kokkos/core/unit_test/hip/TestHIPHostPinned_ViewAPI_d.cpp similarity index 97% rename from lib/kokkos/core/unit_test/qthreads/TestQqthreads_ViewAPI_d.cpp rename to lib/kokkos/core/unit_test/hip/TestHIPHostPinned_ViewAPI_d.cpp index ef4bddc57253cfc1f14397f2adfd116e57e97f7b..bc3843b2c1dcc0eff3282c40426af11c1a7e8098 100644 --- a/lib/kokkos/core/unit_test/qthreads/TestQqthreads_ViewAPI_d.cpp +++ b/lib/kokkos/core/unit_test/hip/TestHIPHostPinned_ViewAPI_d.cpp @@ -42,5 +42,5 @@ //@HEADER */ -#include +#include #include diff --git a/lib/kokkos/core/unit_test/qthreads/TestQqthreads_ViewAPI_e.cpp b/lib/kokkos/core/unit_test/hip/TestHIPHostPinned_ViewAPI_e.cpp similarity index 97% rename from lib/kokkos/core/unit_test/qthreads/TestQqthreads_ViewAPI_e.cpp rename to lib/kokkos/core/unit_test/hip/TestHIPHostPinned_ViewAPI_e.cpp index bba5916a5ab99d29181670aca118b708aae58248..1c80e05fe0f9f5671f6c394f2ab37ba9fece0d48 100644 --- a/lib/kokkos/core/unit_test/qthreads/TestQqthreads_ViewAPI_e.cpp +++ b/lib/kokkos/core/unit_test/hip/TestHIPHostPinned_ViewAPI_e.cpp @@ -42,5 +42,5 @@ //@HEADER */ -#include +#include #include diff --git a/lib/kokkos/containers/unit_tests/cuda/TestCuda_DynamicView.cpp b/lib/kokkos/core/unit_test/hip/TestHIPHostPinned_ViewCopy.cpp similarity index 96% rename from lib/kokkos/containers/unit_tests/cuda/TestCuda_DynamicView.cpp rename to lib/kokkos/core/unit_test/hip/TestHIPHostPinned_ViewCopy.cpp index 9eccb05a25d55165da409e45100c375ff3a3e0ae..59674ad22f67cabc8dbad834966e93be2c519176 100644 --- a/lib/kokkos/containers/unit_tests/cuda/TestCuda_DynamicView.cpp +++ b/lib/kokkos/core/unit_test/hip/TestHIPHostPinned_ViewCopy.cpp @@ -1,4 +1,3 @@ - /* //@HEADER // ************************************************************************ @@ -43,5 +42,5 @@ //@HEADER */ -#include -#include +#include +#include diff --git a/lib/kokkos/containers/unit_tests/cuda/TestCuda_DynRankViewAPI_rank12345.cpp b/lib/kokkos/core/unit_test/hip/TestHIPHostPinned_ViewMapping_a.cpp similarity index 96% rename from lib/kokkos/containers/unit_tests/cuda/TestCuda_DynRankViewAPI_rank12345.cpp rename to lib/kokkos/core/unit_test/hip/TestHIPHostPinned_ViewMapping_a.cpp index 66d2d17e8b499daf78fd7d114a3c66c4bbb027fe..f9b5608d1b2b7a7a413d24b31e5f2f09e832fc54 100644 --- a/lib/kokkos/containers/unit_tests/cuda/TestCuda_DynRankViewAPI_rank12345.cpp +++ b/lib/kokkos/core/unit_test/hip/TestHIPHostPinned_ViewMapping_a.cpp @@ -1,4 +1,3 @@ - /* //@HEADER // ************************************************************************ @@ -43,5 +42,5 @@ //@HEADER */ -#include -#include +#include +#include diff --git a/lib/kokkos/containers/unit_tests/cuda/TestCuda_DynRankViewAPI_generic.cpp b/lib/kokkos/core/unit_test/hip/TestHIPHostPinned_ViewMapping_b.cpp similarity index 96% rename from lib/kokkos/containers/unit_tests/cuda/TestCuda_DynRankViewAPI_generic.cpp rename to lib/kokkos/core/unit_test/hip/TestHIPHostPinned_ViewMapping_b.cpp index 609c8b41a535213a1a9dac6053ae74e24fa5aa1b..bff68fc07253e3602412a133abc61ee5f4a4e062 100644 --- a/lib/kokkos/containers/unit_tests/cuda/TestCuda_DynRankViewAPI_generic.cpp +++ b/lib/kokkos/core/unit_test/hip/TestHIPHostPinned_ViewMapping_b.cpp @@ -1,4 +1,3 @@ - /* //@HEADER // ************************************************************************ @@ -43,5 +42,5 @@ //@HEADER */ -#include -#include +#include +#include diff --git a/lib/kokkos/core/unit_test/hip/TestHIPHostPinned_ViewMapping_subview.cpp b/lib/kokkos/core/unit_test/hip/TestHIPHostPinned_ViewMapping_subview.cpp new file mode 100644 index 0000000000000000000000000000000000000000..cfa9da549593e817b3eb79cd33fd75ce87953e73 --- /dev/null +++ b/lib/kokkos/core/unit_test/hip/TestHIPHostPinned_ViewMapping_subview.cpp @@ -0,0 +1,46 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 3.0 +// Copyright (2020) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +#include +#include diff --git a/lib/kokkos/core/unit_test/qthreads/TestQqthreads_AtomicOperations_complexdouble.cpp b/lib/kokkos/core/unit_test/hip/TestHIP_AtomicOperations_complexdouble.cpp similarity index 97% rename from lib/kokkos/core/unit_test/qthreads/TestQqthreads_AtomicOperations_complexdouble.cpp rename to lib/kokkos/core/unit_test/hip/TestHIP_AtomicOperations_complexdouble.cpp index 9c6589539a981e6c9eceea5713d7775e490713bb..644a825bfceb7362a8424715ee5e8e5a460873d1 100644 --- a/lib/kokkos/core/unit_test/qthreads/TestQqthreads_AtomicOperations_complexdouble.cpp +++ b/lib/kokkos/core/unit_test/hip/TestHIP_AtomicOperations_complexdouble.cpp @@ -42,5 +42,5 @@ //@HEADER */ -#include +#include #include diff --git a/lib/kokkos/core/unit_test/qthreads/TestQqthreads_AtomicOperations_complexfloat.cpp b/lib/kokkos/core/unit_test/hip/TestHIP_AtomicOperations_complexfloat.cpp similarity index 97% rename from lib/kokkos/core/unit_test/qthreads/TestQqthreads_AtomicOperations_complexfloat.cpp rename to lib/kokkos/core/unit_test/hip/TestHIP_AtomicOperations_complexfloat.cpp index 1163da7285d45cc56b9920fb48b0220920b4a9eb..f8aaed88cba947ef0414e724f91a5a31f34a9982 100644 --- a/lib/kokkos/core/unit_test/qthreads/TestQqthreads_AtomicOperations_complexfloat.cpp +++ b/lib/kokkos/core/unit_test/hip/TestHIP_AtomicOperations_complexfloat.cpp @@ -42,5 +42,5 @@ //@HEADER */ -#include +#include #include diff --git a/lib/kokkos/core/unit_test/qthreads/TestQqthreads_AtomicOperations_double.cpp b/lib/kokkos/core/unit_test/hip/TestHIP_AtomicOperations_double.cpp similarity index 97% rename from lib/kokkos/core/unit_test/qthreads/TestQqthreads_AtomicOperations_double.cpp rename to lib/kokkos/core/unit_test/hip/TestHIP_AtomicOperations_double.cpp index aee8ccde7fc79335591ebd22860f97ae0553dacf..9adeaa76ba0b9211ae0bdc4a4b3414b85ef8ed77 100644 --- a/lib/kokkos/core/unit_test/qthreads/TestQqthreads_AtomicOperations_double.cpp +++ b/lib/kokkos/core/unit_test/hip/TestHIP_AtomicOperations_double.cpp @@ -42,5 +42,5 @@ //@HEADER */ -#include +#include #include diff --git a/lib/kokkos/core/unit_test/qthreads/TestQqthreads_AtomicOperations_float.cpp b/lib/kokkos/core/unit_test/hip/TestHIP_AtomicOperations_float.cpp similarity index 97% rename from lib/kokkos/core/unit_test/qthreads/TestQqthreads_AtomicOperations_float.cpp rename to lib/kokkos/core/unit_test/hip/TestHIP_AtomicOperations_float.cpp index 0bfa8d43d6aa9a12d26813781c2d796e70cfc77b..ba7c6d9bc3a215ece362392b3e898b95837d224d 100644 --- a/lib/kokkos/core/unit_test/qthreads/TestQqthreads_AtomicOperations_float.cpp +++ b/lib/kokkos/core/unit_test/hip/TestHIP_AtomicOperations_float.cpp @@ -42,5 +42,5 @@ //@HEADER */ -#include +#include #include diff --git a/lib/kokkos/core/unit_test/qthreads/TestQqthreads_AtomicOperations_int.cpp b/lib/kokkos/core/unit_test/hip/TestHIP_AtomicOperations_int.cpp similarity index 97% rename from lib/kokkos/core/unit_test/qthreads/TestQqthreads_AtomicOperations_int.cpp rename to lib/kokkos/core/unit_test/hip/TestHIP_AtomicOperations_int.cpp index 8900daf81ea5aaa6482d87a5106d6a0d11b9403e..840f2dbd061c3f423e7e888e200944ee6d445ee7 100644 --- a/lib/kokkos/core/unit_test/qthreads/TestQqthreads_AtomicOperations_int.cpp +++ b/lib/kokkos/core/unit_test/hip/TestHIP_AtomicOperations_int.cpp @@ -42,5 +42,5 @@ //@HEADER */ -#include +#include #include diff --git a/lib/kokkos/core/unit_test/qthreads/TestQqthreads_AtomicOperations_longint.cpp b/lib/kokkos/core/unit_test/hip/TestHIP_AtomicOperations_longint.cpp similarity index 97% rename from lib/kokkos/core/unit_test/qthreads/TestQqthreads_AtomicOperations_longint.cpp rename to lib/kokkos/core/unit_test/hip/TestHIP_AtomicOperations_longint.cpp index 9dcff9231284beda7f3ab416628d2a94afd40fa3..be305076636e1fc1c1fe981bfb513101fd645db9 100644 --- a/lib/kokkos/core/unit_test/qthreads/TestQqthreads_AtomicOperations_longint.cpp +++ b/lib/kokkos/core/unit_test/hip/TestHIP_AtomicOperations_longint.cpp @@ -42,5 +42,5 @@ //@HEADER */ -#include +#include #include diff --git a/lib/kokkos/core/unit_test/qthreads/TestQqthreads_AtomicOperations_longlongint.cpp b/lib/kokkos/core/unit_test/hip/TestHIP_AtomicOperations_longlongint.cpp similarity index 97% rename from lib/kokkos/core/unit_test/qthreads/TestQqthreads_AtomicOperations_longlongint.cpp rename to lib/kokkos/core/unit_test/hip/TestHIP_AtomicOperations_longlongint.cpp index 0f5a0b7df744d4658cab72b199159136b6ab4e90..85f54dee1413e15acee8bdae89d3a2decfa54968 100644 --- a/lib/kokkos/core/unit_test/qthreads/TestQqthreads_AtomicOperations_longlongint.cpp +++ b/lib/kokkos/core/unit_test/hip/TestHIP_AtomicOperations_longlongint.cpp @@ -42,5 +42,5 @@ //@HEADER */ -#include +#include #include diff --git a/lib/kokkos/core/unit_test/qthreads/TestQqthreads_AtomicOperations_unsignedint.cpp b/lib/kokkos/core/unit_test/hip/TestHIP_AtomicOperations_unsignedint.cpp similarity index 97% rename from lib/kokkos/core/unit_test/qthreads/TestQqthreads_AtomicOperations_unsignedint.cpp rename to lib/kokkos/core/unit_test/hip/TestHIP_AtomicOperations_unsignedint.cpp index eee44e84a322f20c9d1c149d54731ad9a6671f08..d738b608c2938a0513349500b1ad07b42d6ab4c0 100644 --- a/lib/kokkos/core/unit_test/qthreads/TestQqthreads_AtomicOperations_unsignedint.cpp +++ b/lib/kokkos/core/unit_test/hip/TestHIP_AtomicOperations_unsignedint.cpp @@ -42,5 +42,5 @@ //@HEADER */ -#include +#include #include diff --git a/lib/kokkos/core/unit_test/qthreads/TestQqthreads_AtomicOperations_unsignedlongint.cpp b/lib/kokkos/core/unit_test/hip/TestHIP_AtomicOperations_unsignedlongint.cpp similarity index 97% rename from lib/kokkos/core/unit_test/qthreads/TestQqthreads_AtomicOperations_unsignedlongint.cpp rename to lib/kokkos/core/unit_test/hip/TestHIP_AtomicOperations_unsignedlongint.cpp index 9379a6efa87e2b12dc85f57b1296ff529b47df67..ab25f5d142a3c0078ce17c839ae0376d01d07e0d 100644 --- a/lib/kokkos/core/unit_test/qthreads/TestQqthreads_AtomicOperations_unsignedlongint.cpp +++ b/lib/kokkos/core/unit_test/hip/TestHIP_AtomicOperations_unsignedlongint.cpp @@ -42,5 +42,5 @@ //@HEADER */ -#include +#include #include diff --git a/lib/kokkos/containers/unit_tests/cuda/TestCuda_DualView.cpp b/lib/kokkos/core/unit_test/hip/TestHIP_AtomicViews.cpp similarity index 96% rename from lib/kokkos/containers/unit_tests/cuda/TestCuda_DualView.cpp rename to lib/kokkos/core/unit_test/hip/TestHIP_AtomicViews.cpp index 5641966db432f2764eab8b1c0f3b6488306172ca..0dae0cb9ebb858cbed9822b31514852f6d13f0ec 100644 --- a/lib/kokkos/containers/unit_tests/cuda/TestCuda_DualView.cpp +++ b/lib/kokkos/core/unit_test/hip/TestHIP_AtomicViews.cpp @@ -43,5 +43,5 @@ //@HEADER */ -#include -#include +#include +#include diff --git a/lib/kokkos/core/unit_test/hip/TestHIP_Atomics.cpp b/lib/kokkos/core/unit_test/hip/TestHIP_Atomics.cpp new file mode 100644 index 0000000000000000000000000000000000000000..dda1388237d3379a34cb210817e3c6af445bd9eb --- /dev/null +++ b/lib/kokkos/core/unit_test/hip/TestHIP_Atomics.cpp @@ -0,0 +1,46 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 3.0 +// Copyright (2020) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +#include +#include diff --git a/lib/kokkos/core/unit_test/hip/TestHIP_Category.hpp b/lib/kokkos/core/unit_test/hip/TestHIP_Category.hpp new file mode 100644 index 0000000000000000000000000000000000000000..8cae165c3374330148023ac58d832b317692a752 --- /dev/null +++ b/lib/kokkos/core/unit_test/hip/TestHIP_Category.hpp @@ -0,0 +1,53 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 3.0 +// Copyright (2020) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +#ifndef KOKKOS_TEST_HIP_HPP +#define KOKKOS_TEST_HIP_HPP + +#include + +#define TEST_CATEGORY hip +#define TEST_EXECSPACE Kokkos::Experimental::HIP + +#endif diff --git a/lib/kokkos/containers/unit_tests/hpx/TestHPX_DualView.cpp b/lib/kokkos/core/unit_test/hip/TestHIP_Complex.cpp similarity index 96% rename from lib/kokkos/containers/unit_tests/hpx/TestHPX_DualView.cpp rename to lib/kokkos/core/unit_test/hip/TestHIP_Complex.cpp index 368cdde95c68b8ba48f5377e7dfd1fbd4cee18f0..f628fb834f174971d394279e90d81348dafd75a1 100644 --- a/lib/kokkos/containers/unit_tests/hpx/TestHPX_DualView.cpp +++ b/lib/kokkos/core/unit_test/hip/TestHIP_Complex.cpp @@ -43,5 +43,5 @@ //@HEADER */ -#include -#include +#include +#include diff --git a/lib/kokkos/core/unit_test/hip/TestHIP_Concepts.cpp b/lib/kokkos/core/unit_test/hip/TestHIP_Concepts.cpp new file mode 100644 index 0000000000000000000000000000000000000000..bfdfda15dbe307722a5d87fd58d63f1954622245 --- /dev/null +++ b/lib/kokkos/core/unit_test/hip/TestHIP_Concepts.cpp @@ -0,0 +1,46 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 3.0 +// Copyright (2020) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +#include +#include diff --git a/lib/kokkos/core/unit_test/hip/TestHIP_Crs.cpp b/lib/kokkos/core/unit_test/hip/TestHIP_Crs.cpp new file mode 100644 index 0000000000000000000000000000000000000000..b01b787743a87faab6e5d4e71ace54538cd82164 --- /dev/null +++ b/lib/kokkos/core/unit_test/hip/TestHIP_Crs.cpp @@ -0,0 +1,46 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 3.0 +// Copyright (2020) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +#include +#include diff --git a/lib/kokkos/core/unit_test/qthreads/TestQthreads_DeepCopyAlignment.cpp b/lib/kokkos/core/unit_test/hip/TestHIP_DeepCopyAlignment.cpp similarity index 97% rename from lib/kokkos/core/unit_test/qthreads/TestQthreads_DeepCopyAlignment.cpp rename to lib/kokkos/core/unit_test/hip/TestHIP_DeepCopyAlignment.cpp index edfaa08d29ec24ae5bde5f799f1bc647fb928dff..43f9d4b5c305dd934cba4b72dbb5ae87f641b31f 100644 --- a/lib/kokkos/core/unit_test/qthreads/TestQthreads_DeepCopyAlignment.cpp +++ b/lib/kokkos/core/unit_test/hip/TestHIP_DeepCopyAlignment.cpp @@ -42,5 +42,5 @@ //@HEADER */ -#include +#include #include diff --git a/lib/kokkos/containers/unit_tests/cuda/TestCuda_ErrorReporter.cpp b/lib/kokkos/core/unit_test/hip/TestHIP_FunctorAnalysis.cpp similarity index 96% rename from lib/kokkos/containers/unit_tests/cuda/TestCuda_ErrorReporter.cpp rename to lib/kokkos/core/unit_test/hip/TestHIP_FunctorAnalysis.cpp index 806a3c6eccb10cf0d02c0ad0a709513572f86a6d..f3ae5f47ca9a9fcd864e09fa1de554da16bac819 100644 --- a/lib/kokkos/containers/unit_tests/cuda/TestCuda_ErrorReporter.cpp +++ b/lib/kokkos/core/unit_test/hip/TestHIP_FunctorAnalysis.cpp @@ -43,5 +43,5 @@ //@HEADER */ -#include -#include +#include +#include diff --git a/lib/kokkos/core/unit_test/hip/TestHIP_Init.cpp b/lib/kokkos/core/unit_test/hip/TestHIP_Init.cpp new file mode 100644 index 0000000000000000000000000000000000000000..16a73293b37a0afdd321e1834cf010e377323285 --- /dev/null +++ b/lib/kokkos/core/unit_test/hip/TestHIP_Init.cpp @@ -0,0 +1,49 @@ + +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 3.0 +// Copyright (2020) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +#include +#include +#include +#include diff --git a/lib/kokkos/core/unit_test/hip/TestHIP_InterOp_Init.cpp b/lib/kokkos/core/unit_test/hip/TestHIP_InterOp_Init.cpp new file mode 100644 index 0000000000000000000000000000000000000000..0dc279fc78aa9e36b0306ef7fc7e1f4a8cc7dc5c --- /dev/null +++ b/lib/kokkos/core/unit_test/hip/TestHIP_InterOp_Init.cpp @@ -0,0 +1,85 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 3.0 +// Copyright (2020) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +#include +#include + +namespace Test { + +__global__ void offset(int* p) { + int idx = hipBlockIdx_x * hipBlockDim_x + hipThreadIdx_x; + if (idx < 100) { + p[idx] += idx; + } +} + +// Test whether allocations survive Kokkos initialize/finalize if done via Raw +// HIP. +TEST(hip, raw_hip_interop) { + int* p; + hipMalloc(&p, sizeof(int) * 100); + Kokkos::InitArguments arguments{-1, -1, -1, false}; + Kokkos::initialize(arguments); + + Kokkos::View> v(p, 100); + Kokkos::deep_copy(v, 5); + + Kokkos::finalize(); + + hipLaunchKernelGGL(offset, dim3(100), dim3(100), 0, 0, p); + HIP_SAFE_CALL(hipDeviceSynchronize()); + + int* h_p = new int[100]; + hipMemcpy(h_p, p, sizeof(int) * 100, hipMemcpyDefault); + HIP_SAFE_CALL(hipDeviceSynchronize()); + int64_t sum = 0; + int64_t sum_expect = 0; + for (int i = 0; i < 100; i++) { + sum += h_p[i]; + sum_expect += 5 + i; + } + + ASSERT_EQ(sum, sum_expect); +} +} // namespace Test diff --git a/lib/kokkos/core/unit_test/hip/TestHIP_LocalDeepCopy.cpp b/lib/kokkos/core/unit_test/hip/TestHIP_LocalDeepCopy.cpp new file mode 100644 index 0000000000000000000000000000000000000000..4fc7ca680b1508ebe867d6c35ce1d53a9c41abff --- /dev/null +++ b/lib/kokkos/core/unit_test/hip/TestHIP_LocalDeepCopy.cpp @@ -0,0 +1,46 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 3.0 +// Copyright (2020) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +#include +#include diff --git a/lib/kokkos/core/unit_test/qthreads/TestQqthreads_MDRange_a.cpp b/lib/kokkos/core/unit_test/hip/TestHIP_MDRange_a.cpp similarity index 97% rename from lib/kokkos/core/unit_test/qthreads/TestQqthreads_MDRange_a.cpp rename to lib/kokkos/core/unit_test/hip/TestHIP_MDRange_a.cpp index 7067d841e3e3458a5d9828846b2b8602098d46cb..6bf23f1b2c219b02211c75513c36054915c44f14 100644 --- a/lib/kokkos/core/unit_test/qthreads/TestQqthreads_MDRange_a.cpp +++ b/lib/kokkos/core/unit_test/hip/TestHIP_MDRange_a.cpp @@ -43,5 +43,5 @@ //@HEADER */ -#include +#include #include diff --git a/lib/kokkos/core/unit_test/qthreads/TestQqthreads_MDRange_b.cpp b/lib/kokkos/core/unit_test/hip/TestHIP_MDRange_b.cpp similarity index 97% rename from lib/kokkos/core/unit_test/qthreads/TestQqthreads_MDRange_b.cpp rename to lib/kokkos/core/unit_test/hip/TestHIP_MDRange_b.cpp index 1f4ba9c984f6e0ee7fc24293793a80f0b2f74b0e..d820fa02c9f10b68aa23467c68d7f1c4a6f2440d 100644 --- a/lib/kokkos/core/unit_test/qthreads/TestQqthreads_MDRange_b.cpp +++ b/lib/kokkos/core/unit_test/hip/TestHIP_MDRange_b.cpp @@ -43,5 +43,5 @@ //@HEADER */ -#include +#include #include diff --git a/lib/kokkos/core/unit_test/qthreads/TestQqthreads_MDRange_c.cpp b/lib/kokkos/core/unit_test/hip/TestHIP_MDRange_c.cpp similarity index 97% rename from lib/kokkos/core/unit_test/qthreads/TestQqthreads_MDRange_c.cpp rename to lib/kokkos/core/unit_test/hip/TestHIP_MDRange_c.cpp index 37b4671d0553339a98090f6c3b4c36f77d6b6f74..5c70cf6c6ce49f498a3b50edc85321a537f4678e 100644 --- a/lib/kokkos/core/unit_test/qthreads/TestQqthreads_MDRange_c.cpp +++ b/lib/kokkos/core/unit_test/hip/TestHIP_MDRange_c.cpp @@ -43,5 +43,5 @@ //@HEADER */ -#include +#include #include diff --git a/lib/kokkos/core/unit_test/qthreads/TestQqthreads_MDRange_d.cpp b/lib/kokkos/core/unit_test/hip/TestHIP_MDRange_d.cpp similarity index 97% rename from lib/kokkos/core/unit_test/qthreads/TestQqthreads_MDRange_d.cpp rename to lib/kokkos/core/unit_test/hip/TestHIP_MDRange_d.cpp index 2bd1fbbfd512b06204ca940c6cd816a10e44ca8a..a18fc24d118542630d59bbb6c53f39ed598c2ae0 100644 --- a/lib/kokkos/core/unit_test/qthreads/TestQqthreads_MDRange_d.cpp +++ b/lib/kokkos/core/unit_test/hip/TestHIP_MDRange_d.cpp @@ -43,5 +43,5 @@ //@HEADER */ -#include +#include #include diff --git a/lib/kokkos/core/unit_test/qthreads/TestQqthreads_MDRange_e.cpp b/lib/kokkos/core/unit_test/hip/TestHIP_MDRange_e.cpp similarity index 97% rename from lib/kokkos/core/unit_test/qthreads/TestQqthreads_MDRange_e.cpp rename to lib/kokkos/core/unit_test/hip/TestHIP_MDRange_e.cpp index 659dd23d7fd03e9ad8a86fa22250c90002ed2d99..fe011213d3c3d39456193ced47e69668b019b476 100644 --- a/lib/kokkos/core/unit_test/qthreads/TestQqthreads_MDRange_e.cpp +++ b/lib/kokkos/core/unit_test/hip/TestHIP_MDRange_e.cpp @@ -43,5 +43,5 @@ //@HEADER */ -#include +#include #include diff --git a/lib/kokkos/containers/unit_tests/cuda/TestCuda_Vector.cpp b/lib/kokkos/core/unit_test/hip/TestHIP_RangePolicy.cpp similarity index 96% rename from lib/kokkos/containers/unit_tests/cuda/TestCuda_Vector.cpp rename to lib/kokkos/core/unit_test/hip/TestHIP_RangePolicy.cpp index 408d0c76fc2860b753a0a82ee5699ea420268ff3..5c8741820998b6253209d77f2e2c2879f3ba628a 100644 --- a/lib/kokkos/containers/unit_tests/cuda/TestCuda_Vector.cpp +++ b/lib/kokkos/core/unit_test/hip/TestHIP_RangePolicy.cpp @@ -43,5 +43,5 @@ //@HEADER */ -#include -#include +#include +#include diff --git a/lib/kokkos/core/unit_test/hip/TestHIP_RangePolicyRequire.cpp b/lib/kokkos/core/unit_test/hip/TestHIP_RangePolicyRequire.cpp new file mode 100644 index 0000000000000000000000000000000000000000..6cf9a36f9fd2b250f3c9f4e848b0a154a2933baf --- /dev/null +++ b/lib/kokkos/core/unit_test/hip/TestHIP_RangePolicyRequire.cpp @@ -0,0 +1,47 @@ + +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 3.0 +// Copyright (2020) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +#include +#include diff --git a/lib/kokkos/core/unit_test/hip/TestHIP_Reducers_a.cpp b/lib/kokkos/core/unit_test/hip/TestHIP_Reducers_a.cpp new file mode 100644 index 0000000000000000000000000000000000000000..ec9331d50cf0a3f993578e1622588b3549d8d092 --- /dev/null +++ b/lib/kokkos/core/unit_test/hip/TestHIP_Reducers_a.cpp @@ -0,0 +1,46 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 3.0 +// Copyright (2020) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +#include +#include diff --git a/lib/kokkos/core/unit_test/hip/TestHIP_Reducers_b.cpp b/lib/kokkos/core/unit_test/hip/TestHIP_Reducers_b.cpp new file mode 100644 index 0000000000000000000000000000000000000000..c51c76ae2f2a5e326caf28b88eb23a816f7a9406 --- /dev/null +++ b/lib/kokkos/core/unit_test/hip/TestHIP_Reducers_b.cpp @@ -0,0 +1,46 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 3.0 +// Copyright (2020) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +#include +#include diff --git a/lib/kokkos/core/unit_test/hip/TestHIP_Reducers_c.cpp b/lib/kokkos/core/unit_test/hip/TestHIP_Reducers_c.cpp new file mode 100644 index 0000000000000000000000000000000000000000..42c21390a2cec861647414465d428ce86a7ec4e0 --- /dev/null +++ b/lib/kokkos/core/unit_test/hip/TestHIP_Reducers_c.cpp @@ -0,0 +1,46 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 3.0 +// Copyright (2020) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +#include +#include diff --git a/lib/kokkos/core/unit_test/hip/TestHIP_Reducers_d.cpp b/lib/kokkos/core/unit_test/hip/TestHIP_Reducers_d.cpp new file mode 100644 index 0000000000000000000000000000000000000000..6014405c376274abb50b035bd6e448eb42e25e58 --- /dev/null +++ b/lib/kokkos/core/unit_test/hip/TestHIP_Reducers_d.cpp @@ -0,0 +1,46 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 3.0 +// Copyright (2020) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +#include +#include diff --git a/lib/kokkos/core/unit_test/hip/TestHIP_Reductions.cpp b/lib/kokkos/core/unit_test/hip/TestHIP_Reductions.cpp new file mode 100644 index 0000000000000000000000000000000000000000..8bf8cc63aa2bb7a03b6f8d93d497fb2fa680eb3e --- /dev/null +++ b/lib/kokkos/core/unit_test/hip/TestHIP_Reductions.cpp @@ -0,0 +1,47 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 3.0 +// Copyright (2020) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +#include +#include +#include diff --git a/lib/kokkos/core/unit_test/hip/TestHIP_Scan.cpp b/lib/kokkos/core/unit_test/hip/TestHIP_Scan.cpp new file mode 100644 index 0000000000000000000000000000000000000000..8dc06c706059f98cd0ac6eb61acddcbf6e59d00a --- /dev/null +++ b/lib/kokkos/core/unit_test/hip/TestHIP_Scan.cpp @@ -0,0 +1,47 @@ + +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 3.0 +// Copyright (2020) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +#include +#include diff --git a/lib/kokkos/core/unit_test/qthreads/TestQthreads_SubView_a.cpp b/lib/kokkos/core/unit_test/hip/TestHIP_ScanUnit.cpp similarity index 56% rename from lib/kokkos/core/unit_test/qthreads/TestQthreads_SubView_a.cpp rename to lib/kokkos/core/unit_test/hip/TestHIP_ScanUnit.cpp index f3d3396520a171a9aa47828ac3d4527a3bd15fea..ea38596883f77244f36191e3ad20a99140fa5b35 100644 --- a/lib/kokkos/core/unit_test/qthreads/TestQthreads_SubView_a.cpp +++ b/lib/kokkos/core/unit_test/hip/TestHIP_ScanUnit.cpp @@ -1,3 +1,4 @@ + /* //@HEADER // ************************************************************************ @@ -42,74 +43,55 @@ //@HEADER */ -#include - -namespace Test { - -TEST_F(qthreads, view_subview_auto_1d_left) { -#if 0 - TestViewSubview::test_auto_1d< Kokkos::LayoutLeft, Kokkos::Qthreads >(); -#endif -} - -TEST_F(qthreads, view_subview_auto_1d_right) { -#if 0 - TestViewSubview::test_auto_1d< Kokkos::LayoutRight, Kokkos::Qthreads >(); -#endif -} - -TEST_F(qthreads, view_subview_auto_1d_stride) { -#if 0 - TestViewSubview::test_auto_1d< Kokkos::LayoutStride, Kokkos::Qthreads >(); -#endif -} - -TEST_F(qthreads, view_subview_assign_strided) { -#if 0 - TestViewSubview::test_1d_strided_assignment< Kokkos::Qthreads >(); -#endif -} - -TEST_F(qthreads, view_subview_left_0) { -#if 0 - TestViewSubview::test_left_0< Kokkos::Qthreads >(); -#endif -} +#include +#include -TEST_F(qthreads, view_subview_left_1) { -#if 0 - TestViewSubview::test_left_1< Kokkos::Qthreads >(); -#endif -} +struct DummyFunctor { + using value_type = int; + void operator()(const int, value_type &, bool) const {} +}; -TEST_F(qthreads, view_subview_left_2) { -#if 0 - TestViewSubview::test_left_2< Kokkos::Qthreads >(); -#endif -} +template +__global__ void start_intra_block_scan() { + __shared__ DummyFunctor::value_type values[N]; + const int i = hipThreadIdx_y; + values[i] = i + 1; + __syncthreads(); -TEST_F(qthreads, view_subview_left_3) { -#if 0 - TestViewSubview::test_left_3< Kokkos::Qthreads >(); -#endif -} + DummyFunctor f; + Kokkos::Impl::hip_intra_block_reduce_scan(f, + values); -TEST_F(qthreads, view_subview_right_0) { -#if 0 - TestViewSubview::test_right_0< Kokkos::Qthreads >(); -#endif + __syncthreads(); + if (values[i] != ((i + 2) * (i + 1)) / 2) { + printf("Value for %d should be %d but is %d\n", i, ((i + 2) * (i + 1)) / 2, + values[i]); + Kokkos::abort("Test for intra_block_reduce_scan failed!"); + } } -TEST_F(qthreads, view_subview_right_1) { -#if 0 - TestViewSubview::test_right_1< Kokkos::Qthreads >(); -#endif +template +void test_intra_block_scan() { + dim3 grid(1, 1, 1); + dim3 block(1, N, 1); + hipLaunchKernelGGL(start_intra_block_scan, grid, block, 0, 0); } -TEST_F(qthreads, view_subview_right_3) { -#if 0 - TestViewSubview::test_right_3< Kokkos::Qthreads >(); -#endif +TEST(TEST_CATEGORY, scan_unit) { + if (std::is_same< + TEST_EXECSPACE, + typename Kokkos::Experimental::HIPSpace::execution_space>::value) { + test_intra_block_scan<1>(); + test_intra_block_scan<2>(); + test_intra_block_scan<4>(); + test_intra_block_scan<8>(); + test_intra_block_scan<16>(); + test_intra_block_scan<32>(); + test_intra_block_scan<64>(); + test_intra_block_scan<128>(); + test_intra_block_scan<256>(); + // FIXME_HIP block sizes larger than 256 give wrong results. + // test_intra_block_scan<512>(); + // test_intra_block_scan<1024>(); + } } - -} // namespace Test diff --git a/lib/kokkos/core/unit_test/qthreads/TestQthreads_SubView_c03.cpp b/lib/kokkos/core/unit_test/hip/TestHIP_SharedAlloc.cpp similarity index 90% rename from lib/kokkos/core/unit_test/qthreads/TestQthreads_SubView_c03.cpp rename to lib/kokkos/core/unit_test/hip/TestHIP_SharedAlloc.cpp index 89b68ae42c1eaca3819121013165a23b25d8f7be..c66e01fe0a0ecb4172af41d94b3ca8908426cc4a 100644 --- a/lib/kokkos/core/unit_test/qthreads/TestQthreads_SubView_c03.cpp +++ b/lib/kokkos/core/unit_test/hip/TestHIP_SharedAlloc.cpp @@ -42,14 +42,14 @@ //@HEADER */ -#include +#include +#include namespace Test { -TEST_F(qthreads, view_subview_1d_assign_randomaccess) { -#if 0 - TestViewSubview::test_1d_assign< Kokkos::Qthreads, Kokkos::MemoryTraits >(); -#endif +TEST(TEST_CATEGORY, impl_shared_alloc) { + test_shared_alloc(); } } // namespace Test diff --git a/lib/kokkos/core/unit_test/hip/TestHIP_Spaces.cpp b/lib/kokkos/core/unit_test/hip/TestHIP_Spaces.cpp new file mode 100644 index 0000000000000000000000000000000000000000..f13400d096db8682083293ad56c08c57f1cbbea0 --- /dev/null +++ b/lib/kokkos/core/unit_test/hip/TestHIP_Spaces.cpp @@ -0,0 +1,233 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 3.0 +// Copyright (2020) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +#include +#include + +namespace Test { + +__global__ void test_abort() { Kokkos::abort("test_abort"); } + +__global__ void test_hip_spaces_int_value(int *ptr) { + if (*ptr == 42) { + *ptr = 2 * 42; + } +} + +TEST(hip, space_access) { + static_assert(Kokkos::Impl::MemorySpaceAccess::assignable, + ""); + + static_assert(Kokkos::Impl::MemorySpaceAccess< + Kokkos::HostSpace, + Kokkos::Experimental::HIPHostPinnedSpace>::assignable, + ""); + + static_assert( + !Kokkos::Impl::MemorySpaceAccess< + Kokkos::HostSpace, Kokkos::Experimental::HIPSpace>::assignable, + ""); + + static_assert( + !Kokkos::Impl::MemorySpaceAccess< + Kokkos::HostSpace, Kokkos::Experimental::HIPSpace>::accessible, + ""); + + //-------------------------------------- + + static_assert(Kokkos::Impl::MemorySpaceAccess< + Kokkos::Experimental::HIPSpace, + Kokkos::Experimental::HIPSpace>::assignable, + ""); + + static_assert(!Kokkos::Impl::MemorySpaceAccess< + Kokkos::Experimental::HIPSpace, + Kokkos::Experimental::HIPHostPinnedSpace>::assignable, + ""); + + static_assert(Kokkos::Impl::MemorySpaceAccess< + Kokkos::Experimental::HIPSpace, + Kokkos::Experimental::HIPHostPinnedSpace>::accessible, + ""); + + static_assert(!Kokkos::Impl::MemorySpaceAccess::assignable, + ""); + + static_assert(!Kokkos::Impl::MemorySpaceAccess::accessible, + ""); + + //-------------------------------------- + + static_assert(Kokkos::Impl::MemorySpaceAccess< + Kokkos::Experimental::HIPHostPinnedSpace, + Kokkos::Experimental::HIPHostPinnedSpace>::assignable, + ""); + + static_assert( + !Kokkos::Impl::MemorySpaceAccess::assignable, + ""); + + static_assert( + Kokkos::Impl::MemorySpaceAccess::accessible, + ""); + + static_assert(!Kokkos::Impl::MemorySpaceAccess< + Kokkos::Experimental::HIPHostPinnedSpace, + Kokkos::Experimental::HIPSpace>::assignable, + ""); + + static_assert(!Kokkos::Impl::MemorySpaceAccess< + Kokkos::Experimental::HIPHostPinnedSpace, + Kokkos::Experimental::HIPSpace>::accessible, + ""); + + //-------------------------------------- + + static_assert( + !Kokkos::Impl::SpaceAccessibility::accessible, + ""); + + static_assert(Kokkos::Impl::SpaceAccessibility< + Kokkos::Experimental::HIP, + Kokkos::Experimental::HIPSpace>::accessible, + ""); + + static_assert(Kokkos::Impl::SpaceAccessibility< + Kokkos::Experimental::HIP, + Kokkos::Experimental::HIPHostPinnedSpace>::accessible, + ""); + + static_assert( + !Kokkos::Impl::SpaceAccessibility< + Kokkos::HostSpace, Kokkos::Experimental::HIPSpace>::accessible, + ""); + + static_assert(Kokkos::Impl::SpaceAccessibility< + Kokkos::HostSpace, + Kokkos::Experimental::HIPHostPinnedSpace>::accessible, + ""); + + static_assert( + std::is_same< + Kokkos::Impl::HostMirror::Space, + Kokkos::HostSpace>::value, + ""); + + static_assert( + std::is_same::Space, + Kokkos::Experimental::HIPHostPinnedSpace>::value, + ""); + + static_assert(Kokkos::Impl::SpaceAccessibility< + Kokkos::Impl::HostMirror::Space, + Kokkos::HostSpace>::accessible, + ""); + + static_assert( + Kokkos::Impl::SpaceAccessibility< + Kokkos::Impl::HostMirror::Space, + Kokkos::HostSpace>::accessible, + ""); + + static_assert(Kokkos::Impl::SpaceAccessibility< + Kokkos::Impl::HostMirror< + Kokkos::Experimental::HIPHostPinnedSpace>::Space, + Kokkos::HostSpace>::accessible, + ""); +} + +template +struct TestViewHIPAccessible { + enum { N = 1000 }; + + using V = Kokkos::View; + + V m_base; + + struct TagInit {}; + struct TagTest {}; + + KOKKOS_INLINE_FUNCTION + void operator()(const TagInit &, const int i) const { m_base[i] = i + 1; } + + KOKKOS_INLINE_FUNCTION + void operator()(const TagTest &, const int i, long &error_count) const { + if (m_base[i] != i + 1) ++error_count; + } + + TestViewHIPAccessible() : m_base("base", N) {} + + static void run() { + TestViewHIPAccessible self; + Kokkos::parallel_for( + Kokkos::RangePolicy(0, N), + self); + typename MemSpace::execution_space().fence(); + + // Next access is a different execution space, must complete prior kernel. + long error_count = -1; + Kokkos::parallel_reduce(Kokkos::RangePolicy(0, N), self, + error_count); + EXPECT_EQ(error_count, 0); + } +}; + +TEST(hip, impl_view_accessible) { + TestViewHIPAccessible::run(); + + TestViewHIPAccessible::run(); + TestViewHIPAccessible::run(); +} + +} // namespace Test diff --git a/lib/kokkos/core/unit_test/hip/TestHIP_SubView_a.cpp b/lib/kokkos/core/unit_test/hip/TestHIP_SubView_a.cpp new file mode 100644 index 0000000000000000000000000000000000000000..df7b474afd8ef433bc743a3d0971c4d680e907ce --- /dev/null +++ b/lib/kokkos/core/unit_test/hip/TestHIP_SubView_a.cpp @@ -0,0 +1,102 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 3.0 +// Copyright (2020) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +#include +#include + +namespace Test { + +TEST(TEST_CATEGORY, view_subview_auto_1d_left) { + TestViewSubview::test_auto_1d(); +} + +TEST(TEST_CATEGORY, view_subview_auto_1d_right) { + TestViewSubview::test_auto_1d(); +} + +TEST(TEST_CATEGORY, view_subview_auto_1d_stride) { + TestViewSubview::test_auto_1d(); +} + +TEST(TEST_CATEGORY, view_subview_assign_strided) { + TestViewSubview::test_1d_strided_assignment(); +} + +TEST(TEST_CATEGORY, view_subview_left_0) { + TestViewSubview::test_left_0(); +} + +TEST(TEST_CATEGORY, view_subview_left_1) { + TestViewSubview::test_left_1(); +} + +TEST(TEST_CATEGORY, view_subview_left_2) { + TestViewSubview::test_left_2(); +} + +TEST(TEST_CATEGORY, view_subview_left_3) { + TestViewSubview::test_left_3(); +} + +TEST(TEST_CATEGORY, view_subview_right_0) { + TestViewSubview::test_right_0(); +} + +TEST(TEST_CATEGORY, view_subview_right_1) { + TestViewSubview::test_right_1(); +} + +TEST(TEST_CATEGORY, view_subview_right_3) { + TestViewSubview::test_right_3(); +} + +TEST(TEST_CATEGORY, view_static_tests) { + TestViewSubview::TestSubviewStaticSizes()(); + TestViewSubview::TestSubviewStaticSizes()(); + TestViewSubview::TestExtentsStaticTests(); +} + +} // namespace Test diff --git a/lib/kokkos/core/unit_test/qthreads/TestQthreads_SubView_b.cpp b/lib/kokkos/core/unit_test/hip/TestHIP_SubView_b.cpp similarity index 71% rename from lib/kokkos/core/unit_test/qthreads/TestQthreads_SubView_b.cpp rename to lib/kokkos/core/unit_test/hip/TestHIP_SubView_b.cpp index 6ef5dc4cf124674fe0126301db5f744221eddc15..5fdaefcf21e6772352ee2f3dd509166d54325ebe 100644 --- a/lib/kokkos/core/unit_test/qthreads/TestQthreads_SubView_b.cpp +++ b/lib/kokkos/core/unit_test/hip/TestHIP_SubView_b.cpp @@ -42,24 +42,25 @@ //@HEADER */ -#include +#include +#include namespace Test { -TEST_F(qthreads, view_subview_layoutleft_to_layoutleft) { -#if 0 - TestViewSubview::test_layoutleft_to_layoutleft< Kokkos::Qthreads >(); - TestViewSubview::test_layoutleft_to_layoutleft< Kokkos::Qthreads, Kokkos::MemoryTraits >(); - TestViewSubview::test_layoutleft_to_layoutleft< Kokkos::Qthreads, Kokkos::MemoryTraits >(); -#endif +TEST(TEST_CATEGORY, view_subview_layoutleft_to_layoutleft) { + TestViewSubview::test_layoutleft_to_layoutleft(); + TestViewSubview::test_layoutleft_to_layoutleft< + TEST_EXECSPACE, Kokkos::MemoryTraits >(); + TestViewSubview::test_layoutleft_to_layoutleft< + TEST_EXECSPACE, Kokkos::MemoryTraits >(); } -TEST_F(qthreads, view_subview_layoutright_to_layoutright) { -#if 0 - TestViewSubview::test_layoutright_to_layoutright< Kokkos::Qthreads >(); - TestViewSubview::test_layoutright_to_layoutright< Kokkos::Qthreads, Kokkos::MemoryTraits >(); - TestViewSubview::test_layoutright_to_layoutright< Kokkos::Qthreads, Kokkos::MemoryTraits >(); -#endif +TEST(TEST_CATEGORY, view_subview_layoutright_to_layoutright) { + TestViewSubview::test_layoutright_to_layoutright(); + TestViewSubview::test_layoutright_to_layoutright< + TEST_EXECSPACE, Kokkos::MemoryTraits >(); + TestViewSubview::test_layoutright_to_layoutright< + TEST_EXECSPACE, Kokkos::MemoryTraits >(); } } // namespace Test diff --git a/lib/kokkos/core/unit_test/qthreads/TestQthreads_SubView_c07.cpp b/lib/kokkos/core/unit_test/hip/TestHIP_SubView_c01.cpp similarity index 91% rename from lib/kokkos/core/unit_test/qthreads/TestQthreads_SubView_c07.cpp rename to lib/kokkos/core/unit_test/hip/TestHIP_SubView_c01.cpp index 5857f67d19dbcd4e43cda0372d0f60bb5b591b75..79bb42bc59625ead71af3be536a3eed103900b7a 100644 --- a/lib/kokkos/core/unit_test/qthreads/TestQthreads_SubView_c07.cpp +++ b/lib/kokkos/core/unit_test/hip/TestHIP_SubView_c01.cpp @@ -42,14 +42,13 @@ //@HEADER */ -#include +#include +#include namespace Test { -TEST_F(qthreads, view_subview_3d_from_5d_left) { -#if 0 - TestViewSubview::test_3d_subview_5d_left< Kokkos::Qthreads >(); -#endif +TEST(TEST_CATEGORY, view_subview_1d_assign) { + TestViewSubview::test_1d_assign(); } } // namespace Test diff --git a/lib/kokkos/core/unit_test/hip/TestHIP_SubView_c02.cpp b/lib/kokkos/core/unit_test/hip/TestHIP_SubView_c02.cpp new file mode 100644 index 0000000000000000000000000000000000000000..c38dee484e3e55cea79f5c2173970813ee28cd50 --- /dev/null +++ b/lib/kokkos/core/unit_test/hip/TestHIP_SubView_c02.cpp @@ -0,0 +1,55 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 3.0 +// Copyright (2020) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +#include +#include + +namespace Test { + +TEST(TEST_CATEGORY, view_subview_1d_assign_atomic) { + TestViewSubview::test_1d_assign >(); +} + +} // namespace Test diff --git a/lib/kokkos/core/unit_test/hip/TestHIP_SubView_c03.cpp b/lib/kokkos/core/unit_test/hip/TestHIP_SubView_c03.cpp new file mode 100644 index 0000000000000000000000000000000000000000..c35f786d38f07ab4405edb3a933f14eea17d635a --- /dev/null +++ b/lib/kokkos/core/unit_test/hip/TestHIP_SubView_c03.cpp @@ -0,0 +1,55 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 3.0 +// Copyright (2020) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +#include +#include + +namespace Test { + +TEST(TEST_CATEGORY, view_subview_1d_assign_randomaccess) { + TestViewSubview::test_1d_assign< + TEST_EXECSPACE, Kokkos::MemoryTraits >(); +} + +} // namespace Test diff --git a/lib/kokkos/core/unit_test/qthreads/TestQthreads_SubView_c04.cpp b/lib/kokkos/core/unit_test/hip/TestHIP_SubView_c04.cpp similarity index 91% rename from lib/kokkos/core/unit_test/qthreads/TestQthreads_SubView_c04.cpp rename to lib/kokkos/core/unit_test/hip/TestHIP_SubView_c04.cpp index 0ee4d6887c9b82d27820f7f560f220e361768693..3a0cafdbe116b1922df431f8e61ff25430bf5cd6 100644 --- a/lib/kokkos/core/unit_test/qthreads/TestQthreads_SubView_c04.cpp +++ b/lib/kokkos/core/unit_test/hip/TestHIP_SubView_c04.cpp @@ -42,14 +42,13 @@ //@HEADER */ -#include +#include +#include namespace Test { -TEST_F(qthreads, view_subview_2d_from_3d) { -#if 0 - TestViewSubview::test_2d_subview_3d< Kokkos::Qthreads >(); -#endif +TEST(TEST_CATEGORY, view_subview_2d_from_3d) { + TestViewSubview::test_2d_subview_3d(); } } // namespace Test diff --git a/lib/kokkos/core/unit_test/hip/TestHIP_SubView_c05.cpp b/lib/kokkos/core/unit_test/hip/TestHIP_SubView_c05.cpp new file mode 100644 index 0000000000000000000000000000000000000000..7b3710f428ee90aa3ba46845b9b7e376e54e6d88 --- /dev/null +++ b/lib/kokkos/core/unit_test/hip/TestHIP_SubView_c05.cpp @@ -0,0 +1,55 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 3.0 +// Copyright (2020) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +#include +#include + +namespace Test { + +TEST(TEST_CATEGORY, view_subview_2d_from_3d_atomic) { + TestViewSubview::test_2d_subview_3d >(); +} + +} // namespace Test diff --git a/lib/kokkos/core/unit_test/hip/TestHIP_SubView_c06.cpp b/lib/kokkos/core/unit_test/hip/TestHIP_SubView_c06.cpp new file mode 100644 index 0000000000000000000000000000000000000000..f0ac19f2c45071204778defaf286db06ae4be3b0 --- /dev/null +++ b/lib/kokkos/core/unit_test/hip/TestHIP_SubView_c06.cpp @@ -0,0 +1,55 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 3.0 +// Copyright (2020) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +#include +#include + +namespace Test { + +TEST(TEST_CATEGORY, view_subview_2d_from_3d_randomaccess) { + TestViewSubview::test_2d_subview_3d< + TEST_EXECSPACE, Kokkos::MemoryTraits >(); +} + +} // namespace Test diff --git a/lib/kokkos/core/unit_test/qthreads/TestQthreads_SubView_c01.cpp b/lib/kokkos/core/unit_test/hip/TestHIP_SubView_c07.cpp similarity index 91% rename from lib/kokkos/core/unit_test/qthreads/TestQthreads_SubView_c01.cpp rename to lib/kokkos/core/unit_test/hip/TestHIP_SubView_c07.cpp index 1f560c24f687133b7fde206ad3bddd341a6fef1f..b9743ab0a43bacfd25ccd98a11d851b14ba97426 100644 --- a/lib/kokkos/core/unit_test/qthreads/TestQthreads_SubView_c01.cpp +++ b/lib/kokkos/core/unit_test/hip/TestHIP_SubView_c07.cpp @@ -42,14 +42,13 @@ //@HEADER */ -#include +#include +#include namespace Test { -TEST_F(qthreads, view_subview_1d_assign) { -#if 0 - TestViewSubview::test_1d_assign< Kokkos::Qthreads >(); -#endif +TEST(TEST_CATEGORY, view_subview_3d_from_5d_left) { + TestViewSubview::test_3d_subview_5d_left(); } } // namespace Test diff --git a/lib/kokkos/core/unit_test/hip/TestHIP_SubView_c08.cpp b/lib/kokkos/core/unit_test/hip/TestHIP_SubView_c08.cpp new file mode 100644 index 0000000000000000000000000000000000000000..30bef76d7fc3b542fa717ab7df517913cfcb4019 --- /dev/null +++ b/lib/kokkos/core/unit_test/hip/TestHIP_SubView_c08.cpp @@ -0,0 +1,55 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 3.0 +// Copyright (2020) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +#include +#include + +namespace Test { + +TEST(TEST_CATEGORY, view_subview_3d_from_5d_left_atomic) { + TestViewSubview::test_3d_subview_5d_left< + TEST_EXECSPACE, Kokkos::MemoryTraits >(); +} + +} // namespace Test diff --git a/lib/kokkos/core/unit_test/hip/TestHIP_SubView_c09.cpp b/lib/kokkos/core/unit_test/hip/TestHIP_SubView_c09.cpp new file mode 100644 index 0000000000000000000000000000000000000000..2e63849f35b57b228ee1ef14227aaa87a3f66e8c --- /dev/null +++ b/lib/kokkos/core/unit_test/hip/TestHIP_SubView_c09.cpp @@ -0,0 +1,55 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 3.0 +// Copyright (2020) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +#include +#include + +namespace Test { + +TEST(TEST_CATEGORY, view_subview_3d_from_5d_left_randomaccess) { + TestViewSubview::test_3d_subview_5d_left< + TEST_EXECSPACE, Kokkos::MemoryTraits >(); +} + +} // namespace Test diff --git a/lib/kokkos/core/unit_test/hip/TestHIP_SubView_c10.cpp b/lib/kokkos/core/unit_test/hip/TestHIP_SubView_c10.cpp new file mode 100644 index 0000000000000000000000000000000000000000..dae65a4d3b213cf7f1a3c552a5cad66f4d2c99ac --- /dev/null +++ b/lib/kokkos/core/unit_test/hip/TestHIP_SubView_c10.cpp @@ -0,0 +1,54 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 3.0 +// Copyright (2020) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +#include +#include + +namespace Test { + +TEST(TEST_CATEGORY, view_subview_3d_from_5d_right) { + TestViewSubview::test_3d_subview_5d_right(); +} + +} // namespace Test diff --git a/lib/kokkos/core/unit_test/hip/TestHIP_SubView_c11.cpp b/lib/kokkos/core/unit_test/hip/TestHIP_SubView_c11.cpp new file mode 100644 index 0000000000000000000000000000000000000000..570658bf550c868b46e31989a7d9fc2ec5422959 --- /dev/null +++ b/lib/kokkos/core/unit_test/hip/TestHIP_SubView_c11.cpp @@ -0,0 +1,55 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 3.0 +// Copyright (2020) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +#include +#include + +namespace Test { + +TEST(TEST_CATEGORY, view_subview_3d_from_5d_right_atomic) { + TestViewSubview::test_3d_subview_5d_right< + TEST_EXECSPACE, Kokkos::MemoryTraits >(); +} + +} // namespace Test diff --git a/lib/kokkos/core/unit_test/hip/TestHIP_SubView_c12.cpp b/lib/kokkos/core/unit_test/hip/TestHIP_SubView_c12.cpp new file mode 100644 index 0000000000000000000000000000000000000000..4e943c68f0887cfadbc381ace98e608d0e30458c --- /dev/null +++ b/lib/kokkos/core/unit_test/hip/TestHIP_SubView_c12.cpp @@ -0,0 +1,55 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 3.0 +// Copyright (2020) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +#include +#include + +namespace Test { + +TEST(TEST_CATEGORY, view_subview_3d_from_5d_right_randomaccess) { + TestViewSubview::test_3d_subview_5d_right< + TEST_EXECSPACE, Kokkos::MemoryTraits >(); +} + +} // namespace Test diff --git a/lib/kokkos/core/unit_test/qthreads/TestQthreads_SubView_c02.cpp b/lib/kokkos/core/unit_test/hip/TestHIP_SubView_c13.cpp similarity index 90% rename from lib/kokkos/core/unit_test/qthreads/TestQthreads_SubView_c02.cpp rename to lib/kokkos/core/unit_test/hip/TestHIP_SubView_c13.cpp index e4065d22b271ad988271ee89cbba0e4faa142f50..52a065f2bd59847a74ab7afa965612f9ebc69bb0 100644 --- a/lib/kokkos/core/unit_test/qthreads/TestQthreads_SubView_c02.cpp +++ b/lib/kokkos/core/unit_test/hip/TestHIP_SubView_c13.cpp @@ -42,14 +42,13 @@ //@HEADER */ -#include +#include +#include namespace Test { -TEST_F(qthreads, view_subview_1d_assign_atomic) { -#if 0 - TestViewSubview::test_1d_assign< Kokkos::Qthreads, Kokkos::MemoryTraits >(); -#endif +TEST(TEST_CATEGORY, view_test_unmanaged_subview_reset) { + TestViewSubview::test_unmanaged_subview_reset(); } } // namespace Test diff --git a/lib/kokkos/core/unit_test/hip/TestHIP_ViewAPI_c.cpp b/lib/kokkos/core/unit_test/hip/TestHIP_ViewAPI_c.cpp new file mode 100644 index 0000000000000000000000000000000000000000..4dc72a07868b9d6e023e6021bb5c82dfbeead35a --- /dev/null +++ b/lib/kokkos/core/unit_test/hip/TestHIP_ViewAPI_c.cpp @@ -0,0 +1,46 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 3.0 +// Copyright (2020) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +#include +#include diff --git a/lib/kokkos/core/unit_test/hip/TestHIP_ViewAPI_d.cpp b/lib/kokkos/core/unit_test/hip/TestHIP_ViewAPI_d.cpp new file mode 100644 index 0000000000000000000000000000000000000000..c96d39feeb724402062ce6b3458967be23964f2e --- /dev/null +++ b/lib/kokkos/core/unit_test/hip/TestHIP_ViewAPI_d.cpp @@ -0,0 +1,46 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 3.0 +// Copyright (2020) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +#include +#include diff --git a/lib/kokkos/core/unit_test/hip/TestHIP_ViewMapping_a.cpp b/lib/kokkos/core/unit_test/hip/TestHIP_ViewMapping_a.cpp new file mode 100644 index 0000000000000000000000000000000000000000..146f06fc6e9cd578ca3afd1d53680ec3be9afbdf --- /dev/null +++ b/lib/kokkos/core/unit_test/hip/TestHIP_ViewMapping_a.cpp @@ -0,0 +1,46 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 3.0 +// Copyright (2020) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +#include +#include diff --git a/lib/kokkos/core/unit_test/hip/TestHIP_ViewMapping_b.cpp b/lib/kokkos/core/unit_test/hip/TestHIP_ViewMapping_b.cpp new file mode 100644 index 0000000000000000000000000000000000000000..00f931ce9b57509ea39880bf0d8b4f5d6402b164 --- /dev/null +++ b/lib/kokkos/core/unit_test/hip/TestHIP_ViewMapping_b.cpp @@ -0,0 +1,46 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 3.0 +// Copyright (2020) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +#include +#include diff --git a/lib/kokkos/core/unit_test/hip/TestHIP_ViewMapping_subview.cpp b/lib/kokkos/core/unit_test/hip/TestHIP_ViewMapping_subview.cpp new file mode 100644 index 0000000000000000000000000000000000000000..f0e76e0400d1575ad83ad702707dc89279d810e1 --- /dev/null +++ b/lib/kokkos/core/unit_test/hip/TestHIP_ViewMapping_subview.cpp @@ -0,0 +1,46 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 3.0 +// Copyright (2020) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +#include +#include diff --git a/lib/kokkos/core/unit_test/hip/TestHIP_ViewOfClass.cpp b/lib/kokkos/core/unit_test/hip/TestHIP_ViewOfClass.cpp new file mode 100644 index 0000000000000000000000000000000000000000..c673ffb354cff8e2ab6146195ac1c8594556b6a4 --- /dev/null +++ b/lib/kokkos/core/unit_test/hip/TestHIP_ViewOfClass.cpp @@ -0,0 +1,46 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 3.0 +// Copyright (2020) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +#include +#include diff --git a/lib/kokkos/core/unit_test/hip/TestHIP_ViewResize.cpp b/lib/kokkos/core/unit_test/hip/TestHIP_ViewResize.cpp new file mode 100644 index 0000000000000000000000000000000000000000..35e3125915afb413ce24a2cde4452c606a51c8c2 --- /dev/null +++ b/lib/kokkos/core/unit_test/hip/TestHIP_ViewResize.cpp @@ -0,0 +1,46 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 3.0 +// Copyright (2020) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +#include +#include diff --git a/lib/kokkos/core/unit_test/hip/TestHIP_View_64bit.cpp b/lib/kokkos/core/unit_test/hip/TestHIP_View_64bit.cpp new file mode 100644 index 0000000000000000000000000000000000000000..fed256043fcaa9faa88be01e44698f8ea20b1037 --- /dev/null +++ b/lib/kokkos/core/unit_test/hip/TestHIP_View_64bit.cpp @@ -0,0 +1,46 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 3.0 +// Copyright (2020) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +#include +#include diff --git a/lib/kokkos/containers/unit_tests/hpx/TestHPX_Vector.cpp b/lib/kokkos/core/unit_test/hpx/TestHPX_Concepts.cpp similarity index 98% rename from lib/kokkos/containers/unit_tests/hpx/TestHPX_Vector.cpp rename to lib/kokkos/core/unit_test/hpx/TestHPX_Concepts.cpp index d42cef4b28809b6c220b78201a22028f59d83771..197a99a1e4923c63d950182d0051eee8a8350709 100644 --- a/lib/kokkos/containers/unit_tests/hpx/TestHPX_Vector.cpp +++ b/lib/kokkos/core/unit_test/hpx/TestHPX_Concepts.cpp @@ -1,4 +1,3 @@ - /* //@HEADER // ************************************************************************ @@ -44,4 +43,4 @@ */ #include -#include +#include diff --git a/lib/kokkos/containers/unit_tests/hpx/TestHPX_BitSet.cpp b/lib/kokkos/core/unit_test/hpx/TestHPX_RangePolicyRequire.cpp similarity index 98% rename from lib/kokkos/containers/unit_tests/hpx/TestHPX_BitSet.cpp rename to lib/kokkos/core/unit_test/hpx/TestHPX_RangePolicyRequire.cpp index 179cfcc7b486e09bf7c0d266a5d6fd2d18cc67e0..c76750e8fdea29360f934fdce690bb3205315634 100644 --- a/lib/kokkos/containers/unit_tests/hpx/TestHPX_BitSet.cpp +++ b/lib/kokkos/core/unit_test/hpx/TestHPX_RangePolicyRequire.cpp @@ -44,4 +44,4 @@ */ #include -#include +#include diff --git a/lib/kokkos/core/unit_test/hpx/TestHPX_TeamScratch.cpp b/lib/kokkos/core/unit_test/hpx/TestHPX_TeamScratch.cpp index 14cbfb8f417a3c1f060e99946d2a5e7257432bef..232bed509bc7194c68b8c857169b03ea879925cc 100644 --- a/lib/kokkos/core/unit_test/hpx/TestHPX_TeamScratch.cpp +++ b/lib/kokkos/core/unit_test/hpx/TestHPX_TeamScratch.cpp @@ -58,7 +58,6 @@ TEST(TEST_CATEGORY, team_scratch_request) { } #if defined(KOKKOS_ENABLE_CXX11_DISPATCH_LAMBDA) -#if !defined(KOKKOS_ENABLE_CUDA) || (8000 <= CUDA_VERSION) TEST(TEST_CATEGORY, team_lambda_shared_request) { TestLambdaSharedTeam >(); @@ -66,7 +65,6 @@ TEST(TEST_CATEGORY, team_lambda_shared_request) { Kokkos::Schedule >(); } #endif -#endif TEST(TEST_CATEGORY, shmem_size) { TestShmemSize(); } diff --git a/lib/kokkos/core/unit_test/incremental/Test01_execspace.hpp b/lib/kokkos/core/unit_test/incremental/Test01_execspace.hpp new file mode 100644 index 0000000000000000000000000000000000000000..9f118bfb49f881d00dd6444dc07ff88eb935cd30 --- /dev/null +++ b/lib/kokkos/core/unit_test/incremental/Test01_execspace.hpp @@ -0,0 +1,111 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 3.0 +// Copyright (2020) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +/// @Kokkos_Feature_Level_Required:1 + +#include +#include +#include +#include +#include + +namespace Test { + +// Unit test for Execution Space +// Test1 - testing for memory_space, execution_space, scratch space and +// array_layout of an execution space +// Test2 - Test if the is_execution_space evaluation is working correctly + +template +struct TestIncrExecSpaceTypedef { + void testit() { + const bool passed = + (!std::is_same::value) && + std::is_same::value && + !std::is_same::value && + !std::is_same::value; + static_assert(passed == true, + "The memory and execution spaces are defined"); + } +}; + +template +struct TestIncrExecSpace { + void testit() { + typedef typename ExecSpace::device_type device_type; + typedef typename device_type::memory_space memory_space; + typedef typename device_type::execution_space execution_space; + + const bool passed = + std::is_same>::value; + + static_assert(passed == true, + "Checking if the is_execution_space is evaluated correctly"); + + ExecSpace().print_configuration(std::cout); + ExecSpace().fence(); + + auto concurrency = ExecSpace().concurrency(); + ASSERT_TRUE(concurrency > 0); + + int in_parallel = ExecSpace::in_parallel(); + ASSERT_FALSE(in_parallel); + + const char* name = ExecSpace::name(); + std::cout << name << std::endl; + } +}; + +TEST(TEST_CATEGORY, IncrTest_01_execspace_typedef) { + TestIncrExecSpaceTypedef test; + test.testit(); +} + +TEST(TEST_CATEGORY, IncrTest_01_execspace) { + ASSERT_TRUE(Kokkos::is_execution_space::value); + ASSERT_FALSE(Kokkos::is_execution_space< + TestIncrExecSpaceTypedef>::value); +} +} // namespace Test diff --git a/lib/kokkos/core/unit_test/incremental/Test02_atomic_host.hpp b/lib/kokkos/core/unit_test/incremental/Test02_atomic_host.hpp new file mode 100644 index 0000000000000000000000000000000000000000..4617ede99e65d36cb3f640d43d3178c78c5ceadb --- /dev/null +++ b/lib/kokkos/core/unit_test/incremental/Test02_atomic_host.hpp @@ -0,0 +1,97 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 3.0 +// Copyright (2020) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +/// @Kokkos_Feature_Level_Required:2 +// Unit test for atomic exchange, atomic add and atomic sub. +// Atomic exchange test : we interchange value1 with value2 and check for +// correctness. Atomic add test : we add value2 to value1 and check for +// correctness. Atomic sub test : we subtract value2 from value1 and check for +// correctmess. + +#include +#include + +using value_type = double; + +namespace Test { + +struct TestIncrAtomic { + value_type value1 = 1.5, value2 = 0.5; + + void testExchange() { + value_type ret_value = Kokkos::atomic_exchange(&value1, value2); + + ASSERT_EQ(value1, 0.5); + ASSERT_EQ(ret_value, 1.5); + } + + void testAdd() { + Kokkos::atomic_add(&value1, value2); + + ASSERT_EQ(value1, 2.0); + } + + void testSub() { + Kokkos::atomic_sub(&value1, value2); + + ASSERT_EQ(value1, 1.0); + } +}; + +TEST(TEST_CATEGORY, IncrTest_01_AtomicExchange) { + TestIncrAtomic test; + test.testExchange(); +} + +TEST(TEST_CATEGORY, IncrTest_02_AtomicAdd) { + TestIncrAtomic test; + test.testAdd(); +} + +TEST(TEST_CATEGORY, IncrTest_02_AtomicSub) { + TestIncrAtomic test; + test.testSub(); +} + +} // namespace Test diff --git a/lib/kokkos/core/unit_test/incremental/Test03a_MemorySpace_malloc.hpp b/lib/kokkos/core/unit_test/incremental/Test03a_MemorySpace_malloc.hpp new file mode 100644 index 0000000000000000000000000000000000000000..da808be21918892b423854db0e162706d9b0672b --- /dev/null +++ b/lib/kokkos/core/unit_test/incremental/Test03a_MemorySpace_malloc.hpp @@ -0,0 +1,80 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 3.0 +// Copyright (2020) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +#include +#include + +/// @Kokkos_Feature_Level_Required:3 +// Unit Test for Kokkos malloc. +// Allocate memory to a pointer and check if the allocation has not returned a +// null pointer. + +namespace Test { + +using value_type = double; +const int num_elements = 10; + +template +struct TestIncrMemorySpace_malloc { + using memory_space = typename ExecSpace::memory_space; + + void test_malloc() { + // Allocate memory + auto *data = static_cast(Kokkos::kokkos_malloc( + "data", num_elements * sizeof(value_type))); + + // Check if the allocated memory has not returned a NULL + ASSERT_NE(data, nullptr); + + // Free the allocated memory + Kokkos::kokkos_free(data); + } +}; + +TEST(TEST_CATEGORY, IncrTest_03a_memspace_malloc) { + TestIncrMemorySpace_malloc test; + test.test_malloc(); +} + +} // namespace Test diff --git a/lib/kokkos/core/unit_test/incremental/Test03b_MemorySpace_free.hpp b/lib/kokkos/core/unit_test/incremental/Test03b_MemorySpace_free.hpp new file mode 100644 index 0000000000000000000000000000000000000000..f7ee76ec9de45e23b6d7fbd2849ef51ac21443da --- /dev/null +++ b/lib/kokkos/core/unit_test/incremental/Test03b_MemorySpace_free.hpp @@ -0,0 +1,83 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 3.0 +// Copyright (2020) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +/// @Kokkos_Feature_Level_Required:3 +// Unit test for Kokkos free. +// We constantly allocate and free the memory. +// If the kokkos_free does not free the allocated memory, +// we will exceed the available space. + +#include +#include + +namespace Test { + +using value_type = double; + +// Allocate M number of value_type elements N number of times. +const int N = 100000; +const int M = 100000; + +template +struct TestIncrMemorySpace_free { + using memory_space = typename ExecSpace::memory_space; + + void test_free() { + for (int i = 0; i < N; ++i) { + auto *data = static_cast( + Kokkos::kokkos_malloc("data", M * sizeof(value_type))); + + ASSERT_NE(data, nullptr); + + Kokkos::kokkos_free(data); + } + } +}; + +TEST(TEST_CATEGORY, IncrTest_03b_memspace_free) { + TestIncrMemorySpace_free test; + test.test_free(); +} + +} // namespace Test diff --git a/lib/kokkos/core/unit_test/incremental/Test04_ParallelFor_RangePolicy.hpp b/lib/kokkos/core/unit_test/incremental/Test04_ParallelFor_RangePolicy.hpp new file mode 100644 index 0000000000000000000000000000000000000000..5e50b51dd1e720e331be8a01d252b646b4b9f56f --- /dev/null +++ b/lib/kokkos/core/unit_test/incremental/Test04_ParallelFor_RangePolicy.hpp @@ -0,0 +1,169 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 3.0 +// Copyright (2020) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +#include +#include + +/// @Kokkos_Feature_Level_Required:4 +// parallel-for unit test. +// In this test, different elements of an array are updated by different +// threads. + +namespace Test { + +using value_type = double; +int num_elements = 10; +const value_type value = 0.5; + +struct ParallelForFunctor { + value_type *_data; + + ParallelForFunctor(value_type *data) : _data(data) {} + + KOKKOS_INLINE_FUNCTION + void operator()(const int i) const { _data[i] = (i + 1) * value; } +}; + +template +struct TestParallel_For { + // Memory space type for Device and Host data + using d_memspace_type = typename ExecSpace::memory_space; + using h_memspace_type = Kokkos::HostSpace; + + value_type *deviceData, *hostData; + + // Check if the array values are updated correctly. + void correctness_check(value_type *data) { + for (int i = 0; i < num_elements; ++i) { + ASSERT_EQ((i + 1) * value, data[i]) + << "Values in index " << i << " are incorrect"; + } + } + + // Routine to allocate memory in a specific memory space. + template + value_type *allocate_mem(int N) { + return (static_cast( + Kokkos::kokkos_malloc("deviceData", N * sizeof(value_type)))); + } + + // Routine to free the memory from a specific memory space. + template + void free_mem(value_type *data) { + Kokkos::kokkos_free(data); + } + + void init() { + // Allocate memory on Device space. + deviceData = allocate_mem(num_elements); + ASSERT_NE(deviceData, nullptr); + + // Allocate memory on Host space. + hostData = allocate_mem(num_elements); + ASSERT_NE(hostData, nullptr); + } + + void check_correctness_and_cleanup() { + // Copy the data back to Host memory space + Kokkos::Impl::DeepCopy( + hostData, deviceData, num_elements * sizeof(value_type)); + + // Check if all data has been update correctly + correctness_check(hostData); + + // free the allocated memory + free_mem(deviceData); + free_mem(hostData); + } + + // A simple parallel for test with functors + void simple_test() { + // Allocates memory for num_elements number of value_type elements in the + // host and device memory spaces. + init(); + + // parallel-for functor called for num_elements number of iterations. + Kokkos::parallel_for("parallel_for", num_elements, + ParallelForFunctor(deviceData)); + + Kokkos::fence(); + // Checks if parallel_for gave the correct results. + // Frees the allocated memory in init(). + check_correctness_and_cleanup(); + } + + // A parallel_for test with user defined RangePolicy + void range_policy() { + // Allocates memory for num_elements number of value_type elements in the + // host and device memory spaces. + init(); + + // Creates a range policy that uses dynamic scheduling. + typedef Kokkos::RangePolicy > + range_policy_t; + + // parallel-for functor with range-policy from 0 to num_elements iterations. + Kokkos::parallel_for("RangePolicy_ParallelFor", + range_policy_t(0, num_elements), + ParallelForFunctor(deviceData)); + + // Checks if parallel_for gave the correct results. + // Free the allocated memory in init(). + check_correctness_and_cleanup(); + } +}; + +TEST(TEST_CATEGORY, IncrTest_04_simple_parallelFor) { + if (std::is_same::value) { + TestParallel_For test; + test.simple_test(); + } +} + +TEST(TEST_CATEGORY, IncrTest_04_RangePolicy_parallelFor) { + TestParallel_For test; + test.range_policy(); +} + +} // namespace Test diff --git a/lib/kokkos/core/unit_test/incremental/Test05_ParallelReduce_RangePolicy.hpp b/lib/kokkos/core/unit_test/incremental/Test05_ParallelReduce_RangePolicy.hpp new file mode 100644 index 0000000000000000000000000000000000000000..7c147e47cc3f0cb57ae2e57d749c233f62162cdb --- /dev/null +++ b/lib/kokkos/core/unit_test/incremental/Test05_ParallelReduce_RangePolicy.hpp @@ -0,0 +1,154 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 3.0 +// Copyright (2020) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +#include +#include + +/// @Kokkos_Feature_Level_Required:5 +// Unit test for reduction of native data type. +// Assigns an index based value to elements of an array. +// Performs an reduction over the addition operation. + +namespace Test { + +using value_type = double; +const double value = 0.5; +const int num_elements = 10; + +struct ReduceFunctor { + value_type *_data; + + ReduceFunctor(value_type *data) : _data(data) {} + + KOKKOS_INLINE_FUNCTION + void operator()(const int i, double &UpdateSum) const { + _data[i] = (i + 1) * value; + UpdateSum += _data[i]; + } +}; + +template +struct TestReduction { + // Memory space type for Device and Host data + using d_memspace_type = typename ExecSpace::memory_space; + using h_memspace_type = Kokkos::HostSpace; + + value_type *deviceData, *hostData; + value_type sum = 0.0; + + // compare and equal + void check_correctness() { + int sum_local = 0; + for (int i = 0; i < num_elements; ++i) sum_local += (i + 1); + + ASSERT_EQ(sum, sum_local * value) + << "The reduced value does not match the expected answer"; + } + + // Routine to allocate memory in a specific memory space. + template + value_type *allocate_mem(int N) { + return (static_cast( + Kokkos::kokkos_malloc("deviceData", N * sizeof(value_type)))); + } + + // Routine to free the memory from a specific memory space. + template + void free_mem(value_type *data) { + Kokkos::kokkos_free(data); + } + + // Free the allocated memory + void free_mem() { + Kokkos::kokkos_free(deviceData); + Kokkos::kokkos_free(hostData); + } + + // Allocate Memory for both device and host memory spaces + void init() { + // Allocate memory on Device space. + deviceData = allocate_mem(num_elements); + ASSERT_NE(deviceData, nullptr); + + // Allocate memory on Host space. + hostData = allocate_mem(num_elements); + ASSERT_NE(hostData, nullptr); + + // Initialize the sum value to zero. + sum = 0.0; + } + + void check_correctness_and_cleanup() { + // Check if reduction has produced correct results + check_correctness(); + + // free the allocated memory + free_mem(deviceData); + free_mem(hostData); + } + + void sum_reduction() { + // Allocates memory for num_elements number of value_type elements in the + // host and device memory spaces. + init(); + + // Creates a range policy that uses dynamic schedule. + typedef Kokkos::RangePolicy > + range_policy; + + // parallel_reduce call with range policy over num_elements number of + // iterations + Kokkos::parallel_reduce("Reduction", range_policy(0, num_elements), + ReduceFunctor(deviceData), sum); + + check_correctness_and_cleanup(); + } +}; + +TEST(TEST_CATEGORY, IncrTest_05_reduction) { + TestReduction test; + test.sum_reduction(); +} + +} // namespace Test diff --git a/lib/kokkos/core/unit_test/incremental/Test06_ParallelFor_MDRangePolicy.hpp b/lib/kokkos/core/unit_test/incremental/Test06_ParallelFor_MDRangePolicy.hpp new file mode 100644 index 0000000000000000000000000000000000000000..d9e5a37b558eab7e00f0d064382c2fbf761b52e1 --- /dev/null +++ b/lib/kokkos/core/unit_test/incremental/Test06_ParallelFor_MDRangePolicy.hpp @@ -0,0 +1,263 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 3.0 +// Copyright (2020) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +#include +#include + +/// @Kokkos_Feature_Level_Required:6 +// Unit Test for MDRangePolicy without Views uptil 4 ranks. +// For each of the MDRangePolicy test from 2-to-4 ranks, we create an equivalent +// dimensional array implemented in 1D. In each of these arrays we update the +// elements as a product of iterator indexes and a constant. At the end, we +// check for correctness. + +namespace Test04 { + +using value_type = double; +const int N = 10; +const int M = 10; +const value_type delta = 0.5; + +struct MDFunctor { + value_type *_data; + + MDFunctor(value_type *data) : _data(data) {} + + // 2D + KOKKOS_INLINE_FUNCTION + void operator()(const int i, const int j) const { + _data[i * M + j] = i * j * delta; + } + + // 3D + KOKKOS_INLINE_FUNCTION + void operator()(const int i, const int j, const int k) const { + _data[i * M * N + j * M + k] = i * j * k * delta; + } + + // 4D + KOKKOS_INLINE_FUNCTION + void operator()(const int i, const int j, const int k, const int l) const { + _data[i * M * N * M + j * M * N + k * M + l] = i * j * k * l * delta; + } +}; + +template +struct TestMDRangePolicy { + // Memory space type for Device and Host data + using d_memspace_type = typename ExecSpace::memory_space; + using h_memspace_type = Kokkos::HostSpace; + + // Index Type for the iterator + using int_index = Kokkos::IndexType; + + // An MDRangePolicy for 2 nested loops + using MDPolicyType_2D = typename Kokkos::Experimental::MDRangePolicy< + ExecSpace, Kokkos::Experimental::Rank<2>, int_index>; + + // An MDRangePolicy for 3 nested loops + using MDPolicyType_3D = typename Kokkos::Experimental::MDRangePolicy< + ExecSpace, Kokkos::Experimental::Rank<3>, int_index>; + + // An MDRangePolicy for 4 nested loops + using MDPolicyType_4D = typename Kokkos::Experimental::MDRangePolicy< + ExecSpace, Kokkos::Experimental::Rank<4>, int_index>; + + // Device and Host Data structure pointer + value_type *deviceData, *hostData; + + // Routine to allocate memory in a specific memory space. + template + value_type *allocate_mem(int N_) { + return (static_cast( + Kokkos::kokkos_malloc("Data", N_ * sizeof(value_type)))); + } + + // Routine to free the memory from a specific memory space. + template + void free_mem(value_type *data) { + Kokkos::kokkos_free(data); + } + + // compare and equal + void compare_equal_2D() { + for (int i = 0; i < N; ++i) + for (int j = 0; j < M; ++j) ASSERT_EQ(hostData[i * M + j], i * j * delta); + } + + // compare and equal + void compare_equal_3D() { + for (int i = 0; i < N; ++i) + for (int j = 0; j < M; ++j) + for (int k = 0; k < N; ++k) + ASSERT_EQ(hostData[i * M * N + j * M + k], i * j * k * delta); + } + + // compare and equal + void compare_equal_4D() { + for (int i = 0; i < N; ++i) + for (int j = 0; j < M; ++j) + for (int k = 0; k < N; ++k) + for (int l = 0; l < M; ++l) + ASSERT_EQ(hostData[i * M * N * M + j * M * N + k * M + l], + i * j * k * l * delta); + } + + // A 2-D MDRangePolicy + void mdRange2D() { + MDPolicyType_2D mdPolicy_2D({0, 0}, {N, M}); + + // Total number of elements + int num_elements = N * M; + + // Allocate Memory for both device and host memory spaces + // Data[M*N] + deviceData = allocate_mem(num_elements); + ASSERT_NE(deviceData, nullptr); + + hostData = allocate_mem(num_elements); + ASSERT_NE(hostData, nullptr); + + // parallel_for call + MDFunctor Functor_2D(deviceData); + Kokkos::parallel_for("MDRange2D", mdPolicy_2D, Functor_2D); + + // Copy the data back to Host memory space + Kokkos::Impl::DeepCopy( + hostData, deviceData, num_elements * sizeof(value_type)); + + // Check if all data has been update correctly + compare_equal_2D(); + + // free the allocated memory + free_mem(deviceData); + free_mem(hostData); + } + + // A 3-D MDRangePolicy + void mdRange3D() { + MDPolicyType_3D mdPolicy_3D({0, 0, 0}, {N, M, N}); + + // Total number of elements + int num_elements = N * M * N; + + // Allocate Memory for both device and host memory spaces + // Data[M*N*N] + deviceData = allocate_mem(num_elements); + ASSERT_NE(deviceData, nullptr); + + hostData = allocate_mem(num_elements); + ASSERT_NE(hostData, nullptr); + + // parallel_for call + MDFunctor Functor_3D(deviceData); + Kokkos::parallel_for("MDRange3D", mdPolicy_3D, Functor_3D); + + // Copy the data back to Host memory space + Kokkos::Impl::DeepCopy( + hostData, deviceData, num_elements * sizeof(value_type)); + + // Check if all data has been update correctly + compare_equal_3D(); + + // free the allocated memory + free_mem(deviceData); + free_mem(hostData); + } + + // A 4-D MDRangePolicy + void mdRange4D() { + MDPolicyType_4D mdPolicy_4D({0, 0, 0, 0}, {N, M, N, M}); + + // Total number of elements + int num_elements = N * M * N * M; + + // Allocate Memory for both device and host memory spaces + // Data[M*N*N*M] + deviceData = allocate_mem(num_elements); + ASSERT_NE(deviceData, nullptr); + + hostData = allocate_mem(num_elements); + ASSERT_NE(hostData, nullptr); + + // parallel_for call + MDFunctor Functor_4D(deviceData); + Kokkos::parallel_for("MDRange4D", mdPolicy_4D, Functor_4D); + + // Copy the data back to Host memory space + Kokkos::Impl::DeepCopy( + hostData, deviceData, num_elements * sizeof(value_type)); + + // Check if all data has been update correctly + compare_equal_4D(); + + // free the allocated memory + free_mem(deviceData); + free_mem(hostData); + } +}; + +} // namespace Test04 + +namespace Test { + +// 2D MDRangePolicy +TEST(TEST_CATEGORY, IncrTest_06_mdrange2D) { + Test04::TestMDRangePolicy test; + test.mdRange2D(); +} + +// 3D MDRangePolicy +TEST(TEST_CATEGORY, IncrTest_06_mdrange3D) { + Test04::TestMDRangePolicy test; + test.mdRange3D(); +} + +// 4D MDRangePolicy +TEST(TEST_CATEGORY, IncrTest_06_mdrange4D) { + Test04::TestMDRangePolicy test; + test.mdRange4D(); +} + +} // namespace Test diff --git a/lib/kokkos/core/unit_test/incremental/Test08_deep_copy.hpp b/lib/kokkos/core/unit_test/incremental/Test08_deep_copy.hpp new file mode 100644 index 0000000000000000000000000000000000000000..5166f5a9f0de05b24166161654c9eaab4ff2ad82 --- /dev/null +++ b/lib/kokkos/core/unit_test/incremental/Test08_deep_copy.hpp @@ -0,0 +1,207 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 3.0 +// Copyright (2020) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +#include +#include + +/// @Kokkos_Feature_Level_Required:8 +// Unit Test for MDRangePolicy without Views uptil 4 ranks. +// For each of the MDRangePolicy test from 2-to-4 ranks, we create an equivalent +// dimensional view. In each of these views we update the +// elements as a product of iterator indexes and a constant inside a +// parallel_for lambda. At the end, we check for correctness. + +namespace Test05 { + +using value_type = double; +const int N = 10; +const int M = 10; + +template +struct TestMDRangePolicy { + // 2D View + using View_2D = typename Kokkos::View; + using Host_View_2D = typename View_2D::HostMirror; + Host_View_2D hostDataView_2D; + + // 3D View + using View_3D = typename Kokkos::View; + using Host_View_3D = typename View_3D::HostMirror; + Host_View_3D hostDataView_3D; + + // 4D View + using View_4D = typename Kokkos::View; + using Host_View_4D = typename View_4D::HostMirror; + Host_View_4D hostDataView_4D; + + // Memory space type for Device and Host data + using d_memspace_type = typename ExecSpace::memory_space; + using h_memspace_type = Kokkos::HostSpace; + + // Index Type for the iterator + using int_index = Kokkos::IndexType; + + // An MDRangePolicy for 2 nested loops + using MDPolicyType_2D = typename Kokkos::Experimental::MDRangePolicy< + ExecSpace, Kokkos::Experimental::Rank<2>, int_index>; + + // An MDRangePolicy for 3 nested loops + using MDPolicyType_3D = typename Kokkos::Experimental::MDRangePolicy< + ExecSpace, Kokkos::Experimental::Rank<3>, int_index>; + + // An MDRangePolicy for 4 nested loops + using MDPolicyType_4D = typename Kokkos::Experimental::MDRangePolicy< + ExecSpace, Kokkos::Experimental::Rank<4>, int_index>; + + // compare and equal + void compare_equal_2D() { + for (int i = 0; i < N; ++i) + for (int j = 0; j < M; ++j) ASSERT_EQ(hostDataView_2D(i, j), i * M + j); + } + + // compare and equal + void compare_equal_3D() { + for (int i = 0; i < N; ++i) + for (int j = 0; j < M; ++j) + for (int k = 0; k < N; ++k) + ASSERT_EQ(hostDataView_3D(i, j, k), i * M * N + j * N + k); + } + + // compare and equal + void compare_equal_4D() { + for (int i = 0; i < N; ++i) + for (int j = 0; j < M; ++j) + for (int k = 0; k < N; ++k) + for (int l = 0; l < M; ++l) + ASSERT_EQ(hostDataView_4D(i, j, k, l), + i * M * N * M + j * N * M + k * M + l); + } + + // A 2-D MDRangePolicy + void mdRange2D() { + View_2D deviceDataView_2D("deviceData_2D", N, M); + hostDataView_2D = create_mirror_view(deviceDataView_2D); + + MDPolicyType_2D mdPolicy_2D({0, 0}, {N, M}); + + Kokkos::parallel_for( + mdPolicy_2D, KOKKOS_LAMBDA(const int i, const int j) { + deviceDataView_2D(i, j) = i * M + j; + }); + + // Copy data back to host view. + Kokkos::deep_copy(hostDataView_2D, deviceDataView_2D); + + // Check if all data has been update correctly + compare_equal_2D(); + } + + // A 3-D MDRangePolicy + void mdRange3D() { + View_3D deviceDataView_3D("deviceData_3D", N, M, N); + hostDataView_3D = create_mirror_view(deviceDataView_3D); + + MDPolicyType_3D mdPolicy_3D({0, 0, 0}, {N, M, N}); + + Kokkos::parallel_for( + mdPolicy_3D, KOKKOS_LAMBDA(const int i, const int j, const int k) { + deviceDataView_3D(i, j, k) = i * M * N + j * N + k; + }); + + // Copy data back to host view. + Kokkos::deep_copy(hostDataView_3D, deviceDataView_3D); + + // Check if all data has been update correctly + compare_equal_3D(); + } + + // A 4-D MDRangePolicy + void mdRange4D() { + View_4D deviceDataView_4D("deviceData_4D", N, M, N, M); + hostDataView_4D = create_mirror_view(deviceDataView_4D); + + MDPolicyType_4D mdPolicy_4D({0, 0, 0, 0}, {N, M, N, M}); + + Kokkos::parallel_for( + mdPolicy_4D, + KOKKOS_LAMBDA(const int i, const int j, const int k, const int l) { + deviceDataView_4D(i, j, k, l) = i * M * N * M + j * N * M + k * M + l; + }); + + Kokkos::deep_copy(hostDataView_4D, deviceDataView_4D); + + // Check if all data has been update correctly + compare_equal_4D(); + } +}; + +} // namespace Test05 + +namespace Test { + +// 2D MDRangePolicy +TEST(TEST_CATEGORY, IncrTest_08_deep_copy_2D) { + { + Test05::TestMDRangePolicy test; + test.mdRange2D(); + } +} + +// 3D MDRangePolicy +TEST(TEST_CATEGORY, IncrTest_08_deep_copy_3D) { + { + Test05::TestMDRangePolicy test; + test.mdRange3D(); + } +} + +// 4D MDRangePolicy +TEST(TEST_CATEGORY, IncrTest_08_deep_copy_4D) { + { + Test05::TestMDRangePolicy test; + test.mdRange4D(); + } +} + +} // namespace Test diff --git a/lib/kokkos/core/unit_test/incremental/Test10_HierarchicalBasics.hpp b/lib/kokkos/core/unit_test/incremental/Test10_HierarchicalBasics.hpp new file mode 100644 index 0000000000000000000000000000000000000000..a5e478c30faced583b61378afc45daab742c096d --- /dev/null +++ b/lib/kokkos/core/unit_test/incremental/Test10_HierarchicalBasics.hpp @@ -0,0 +1,101 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 3.0 +// Copyright (2020) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +// @Kokkos_Feature_Level_Required:10 +// Unit test for hierarchical parallelism +// Create concurrent work hierarchically and verify if +// contributions of paticipating processing units corresponds to expected value + +#include +#include + +namespace Test { + +template +struct HierarchicalBasics { + using policy_t = Kokkos::TeamPolicy; + using team_t = typename policy_t::member_type; + + void run(const int nP, int nT) { + if (nT > ExecSpace::concurrency()) nT = ExecSpace::concurrency(); + + policy_t pol(nP, nT); + + ASSERT_EQ(pol.league_size(), nP); + ASSERT_LE(pol.team_size(), nT); + nT = pol.team_size(); + + Kokkos::View v("Array_A", nP, nT); + Kokkos::parallel_for( + "Teams", pol, KOKKOS_LAMBDA(const team_t &team) { + const int tR = team.team_rank(); + const int tS = team.team_size(); + const int lR = team.league_rank(); + const int lS = team.league_size(); + if (lR < lS) { + v(lR, tR) = lR * tS + tR; + } else { + v(lR, tR) = 100000; + } + }); + Kokkos::fence(); + auto h_v = Kokkos::create_mirror_view_and_copy(Kokkos::HostSpace(), v); + + size_t check = 0; + size_t ref = nP * nT; + for (int i = 0; i < nP; ++i) + for (int j = 0; j < nT; ++j) check += h_v(i, j); + + ASSERT_EQ(check, ref * (ref - 1) / 2); + } +}; + +TEST(TEST_CATEGORY, IncrTest_10_Hierarchical_Basics) { + HierarchicalBasics test; + test.run(1, 4); + test.run(8, 16); + test.run(11, 13); +} + +} // namespace Test diff --git a/lib/kokkos/core/unit_test/incremental/Test11a_ParallelFor_TeamThreadRange.hpp b/lib/kokkos/core/unit_test/incremental/Test11a_ParallelFor_TeamThreadRange.hpp new file mode 100644 index 0000000000000000000000000000000000000000..e36b8f9d3f9a531e6a9f7a2dcb89e9ccb13d2cf2 --- /dev/null +++ b/lib/kokkos/core/unit_test/incremental/Test11a_ParallelFor_TeamThreadRange.hpp @@ -0,0 +1,99 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 3.0 +// Copyright (2020) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +// @Kokkos_Feature_Level_Required:11 +// Unit test for hierarchical parallelism +// Create concurrent work hierarchically and verify if +// contributions of paticipating processing units corresponds to expected value + +#include +#include + +namespace Test { + +template +struct Hierarchical_ForLoop_A { + void run(const int pN, const int sX, const int sY) { + typedef Kokkos::TeamPolicy team_policy; + typedef typename Kokkos::TeamPolicy::member_type member_type; + + typedef Kokkos::View viewDataType; + viewDataType v("Matrix", sX, sY); + + Kokkos::parallel_for( + "Team", team_policy(pN, Kokkos::AUTO), + KOKKOS_LAMBDA(const member_type &team) { + const int n = team.league_rank(); + const int ls = team.league_size(); + + const int startDim1 = n * (int)(sX / ls); + const int modDim1 = n == ls - 1 ? sX % ls : 0; + + Kokkos::parallel_for( + Kokkos::TeamThreadRange(team, v.extent(1)), [&](const int m) { + for (int i = startDim1; + i < (startDim1 + (int)(sX / ls) + modDim1); ++i) + v(i, m) = i * v.extent(1) + m; + }); + }); + + Kokkos::fence(); + auto v_H = Kokkos::create_mirror_view_and_copy(Kokkos::HostSpace(), v); + + int check = 0; + const int s = sY * sX; + for (int i = 0; i < sX; ++i) + for (int j = 0; j < sY; ++j) check += v_H(i, j); + ASSERT_EQ(check, s * (s - 1) / 2); + } +}; + +TEST(TEST_CATEGORY, IncrTest_11a_Hierarchical_ForLoop) { + Hierarchical_ForLoop_A test; + test.run(4, 5, 200); + test.run(4, 7, 19); + test.run(14, 277, 321); +} + +} // namespace Test diff --git a/lib/kokkos/core/unit_test/incremental/Test11b_ParallelFor_TeamVectorRange.hpp b/lib/kokkos/core/unit_test/incremental/Test11b_ParallelFor_TeamVectorRange.hpp new file mode 100644 index 0000000000000000000000000000000000000000..7e4bb2aa3b7499e942aa21c27d4cc36a419744d3 --- /dev/null +++ b/lib/kokkos/core/unit_test/incremental/Test11b_ParallelFor_TeamVectorRange.hpp @@ -0,0 +1,99 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 3.0 +// Copyright (2020) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +// @Kokkos_Feature_Level_Required:11 +// Unit test for hierarchical parallelism +// Create concurrent work hierarchically and verify if +// contributions of paticipating processing units corresponds to expected value + +#include +#include + +namespace Test { + +template +struct Hierarchical_ForLoop_B { + void run(const int pN, const int sX, const int sY) { + typedef Kokkos::TeamPolicy team_policy; + typedef typename Kokkos::TeamPolicy::member_type member_type; + + typedef Kokkos::View viewDataType; + viewDataType v("Matrix", sX, sY); + + Kokkos::parallel_for( + "Team", team_policy(pN, Kokkos::AUTO), + KOKKOS_LAMBDA(const member_type &team) { + const int n = team.league_rank(); + const int ls = team.league_size(); + + const int startDim1 = n * (int)(sX / ls); + const int modDim1 = n == ls - 1 ? sX % ls : 0; + + Kokkos::parallel_for( + Kokkos::TeamVectorRange(team, v.extent(1)), [&](const int m) { + for (int i = startDim1; + i < (startDim1 + (int)(sX / ls) + modDim1); ++i) + v(i, m) = i * v.extent(1) + m; + }); + }); + + Kokkos::fence(); + auto v_H = Kokkos::create_mirror_view_and_copy(Kokkos::HostSpace(), v); + + int check = 0; + const int s = sY * sX; + for (int i = 0; i < sX; ++i) + for (int j = 0; j < sY; ++j) check += v_H(i, j); + ASSERT_EQ(check, s * (s - 1) / 2); + } +}; + +TEST(TEST_CATEGORY, IncrTest_11b_Hierarchical_ForLoop) { + Hierarchical_ForLoop_B test; + test.run(1, 6, 400); + test.run(6, 7, 19); + test.run(12, 277, 321); +} + +} // namespace Test diff --git a/lib/kokkos/core/unit_test/incremental/Test11c_ParallelFor_ThreadVectorRange.hpp b/lib/kokkos/core/unit_test/incremental/Test11c_ParallelFor_ThreadVectorRange.hpp new file mode 100644 index 0000000000000000000000000000000000000000..c6998a5781c4f046306098713e25e17cc1867ee7 --- /dev/null +++ b/lib/kokkos/core/unit_test/incremental/Test11c_ParallelFor_ThreadVectorRange.hpp @@ -0,0 +1,105 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 3.0 +// Copyright (2020) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +// @Kokkos_Feature_Level_Required:11 +// Unit test for hierarchical parallelism +// Create concurrent work hierarchically and verify if +// contributions of paticipating processing units corresponds to expected value + +#include +#include + +namespace Test { + +template +struct Hierarchical_ForLoop_C { + void run(const int pN, const int sX, const int sY, const int sZ) { + typedef Kokkos::TeamPolicy team_policy; + typedef typename Kokkos::TeamPolicy::member_type member_type; + + typedef Kokkos::View viewDataType; + viewDataType v("Matrix", sX, sY, sZ); + + Kokkos::parallel_for( + "Team", team_policy(pN, Kokkos::AUTO), + KOKKOS_LAMBDA(const member_type &team) { + int n = team.league_rank(); + int ls = team.league_size(); + + int startDim1 = n * (int)(sX / ls); + int modDim1 = n == ls - 1 ? sX % ls : 0; + + Kokkos::parallel_for( + Kokkos::TeamThreadRange(team, v.extent(1)), [&](const int m) { + Kokkos::parallel_for( + Kokkos::ThreadVectorRange(team, v.extent(2)), + [&](const int k) { + for (int i = startDim1; + i < (startDim1 + (int)(sX / ls) + modDim1); ++i) + v(i, m, k) = + i * v.extent(1) * v.extent(2) + m * v.extent(2) + k; + }); + }); + }); + + Kokkos::fence(); + auto v_H = Kokkos::create_mirror_view_and_copy(Kokkos::HostSpace(), v); + + size_t check = 0; + const size_t s = sX * sY * sZ; + for (int i = 0; i < sX; ++i) + for (int j = 0; j < sY; ++j) + for (int k = 0; k < sZ; ++k) check += v_H(i, j, k); + ASSERT_EQ(check, s * (s - 1) / 2); + } +}; + +TEST(TEST_CATEGORY, IncrTest_11c_Hierarchical_ForLoop) { + Hierarchical_ForLoop_C test; + test.run(4, 16, 16, 16); + test.run(8, 12, 333, 16); + test.run(12, 277, 321, 345); +} + +} // namespace Test diff --git a/lib/kokkos/core/unit_test/incremental/Test12a_ThreadScratch.hpp b/lib/kokkos/core/unit_test/incremental/Test12a_ThreadScratch.hpp new file mode 100644 index 0000000000000000000000000000000000000000..8eb1c243c5df409350fb499be82b2796ab7223aa --- /dev/null +++ b/lib/kokkos/core/unit_test/incremental/Test12a_ThreadScratch.hpp @@ -0,0 +1,125 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 3.0 +// Copyright (2020) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +// @Kokkos_Feature_Level_Required:12 +// Unit test for hierarchical parallelism +// Create concurrent work hierarchically and verify if +// contributions of paticipating processing units corresponds to expected value +// Use a scratch pad memory for each team +#include +#include + +namespace Test { + +template +struct ThreadScratch { + using policy_t = Kokkos::TeamPolicy; + using team_t = typename Kokkos::TeamPolicy::member_type; + using data_t = Kokkos::View; + + using scratch_t = Kokkos::View >; + + int sX, sY; + data_t v; + KOKKOS_FUNCTION + void operator()(const team_t &team) const { + // Allocate and use scratch pad memory + scratch_t v_S(team.thread_scratch(1), sY); + int n = team.league_rank(); + + for (int i = 0; i < sY; ++i) v_S(i) = 0; + + Kokkos::parallel_for(Kokkos::TeamThreadRange(team, sX), [&](const int m) { + Kokkos::parallel_for( + Kokkos::ThreadVectorRange(team, sY), + [&](const int k) { v_S(k) += sX * sY * n + sY * m + k; }); + }); + + team.team_barrier(); + + for (int i = 0; i < sY; ++i) { + v(n, team.team_rank()) += v_S(i); + } + } + + void run(const int pN, const int sX_, const int sY_) { + sX = sX_; + sY = sY_; + + int scratchSize = scratch_t::shmem_size(sY); + // So this works with deprecated code enabled: + policy_t policy = policy_t(pN, Kokkos::AUTO) + .set_scratch_size(1, Kokkos::PerThread(scratchSize)); + + int max_team_size = policy.team_size_max(*this, Kokkos::ParallelForTag()); + v = data_t("Matrix", pN, max_team_size); + + Kokkos::parallel_for( + "Test12a_ThreadScratch", + policy_t(pN, max_team_size) + .set_scratch_size(1, Kokkos::PerThread(scratchSize)), + *this); + + Kokkos::fence(); + auto v_H = Kokkos::create_mirror_view_and_copy(Kokkos::HostSpace(), v); + + size_t check = 0; + const size_t s = pN * sX * sY; + for (int n = 0; n < pN; ++n) + for (int m = 0; m < max_team_size; ++m) { + check += v_H(n, m); + } + ASSERT_EQ(s * (s - 1) / 2, check); + } +}; + +TEST(TEST_CATEGORY, IncrTest_12a_ThreadScratch) { + ThreadScratch test; + test.run(1, 55, 9); + test.run(2, 4, 22); + test.run(14, 277, 321); +} + +} // namespace Test diff --git a/lib/kokkos/core/unit_test/incremental/Test12b_TeamScratch.hpp b/lib/kokkos/core/unit_test/incremental/Test12b_TeamScratch.hpp new file mode 100644 index 0000000000000000000000000000000000000000..169491af3fbcc747b2160998a3a90310f3d8cb0c --- /dev/null +++ b/lib/kokkos/core/unit_test/incremental/Test12b_TeamScratch.hpp @@ -0,0 +1,113 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 3.0 +// Copyright (2020) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +// @Kokkos_Feature_Level_Required:12 +// Unit test for hierarchical parallelism +// Create concurrent work hierarchically and verify if +// contributions of paticipating processing units corresponds to expected value +// Use a scratch pad memory for each team +#include +#include + +namespace Test { + +template +struct TeamScratch { + void run(const int pN, const int sX, const int sY) { + using policy_t = Kokkos::TeamPolicy; + using team_t = typename Kokkos::TeamPolicy::member_type; + using data_t = Kokkos::View; + data_t v("Matrix", pN, sX); + + using scratch_t = Kokkos::View >; + int scratchSize = scratch_t::shmem_size(sX, sY); + + Kokkos::parallel_for( + "Team", + policy_t(pN, Kokkos::AUTO) + .set_scratch_size(1, Kokkos::PerTeam(scratchSize)), + KOKKOS_LAMBDA(const team_t &team) { + // Allocate and use scratch pad memory + scratch_t v_S(team.team_scratch(1), sX, sY); + int n = team.league_rank(); + + Kokkos::parallel_for( + Kokkos::TeamThreadRange(team, sX), [&](const int m) { + Kokkos::parallel_for( + Kokkos::ThreadVectorRange(team, sY), [&](const int k) { + v_S(m, k) = v_S.extent(0) * v_S.extent(1) * n + + v_S.extent(1) * m + k; + }); + }); + + team.team_barrier(); + + // Sum up contributions and reduce by one dimension + Kokkos::parallel_for(Kokkos::TeamThreadRange(team, sX), + [&](const int m) { + for (int i = 0; i < sY; ++i) + v(n, m) += v_S(m, i); + }); + }); + + Kokkos::fence(); + auto v_H = Kokkos::create_mirror_view_and_copy(Kokkos::HostSpace(), v); + + size_t check = 0; + const size_t s = pN * sX * sY; + for (int n = 0; n < pN; ++n) + for (int m = 0; m < sX; ++m) check += v_H(n, m); + ASSERT_EQ(check, s * (s - 1) / 2); + } +}; + +TEST(TEST_CATEGORY, IncrTest_12b_TeamScratch) { + TeamScratch test; + test.run(1, 4, 4); + test.run(4, 7, 10); + test.run(14, 277, 321); +} + +} // namespace Test diff --git a/lib/kokkos/core/unit_test/incremental/Test13a_ParallelRed_TeamThreadRange.hpp b/lib/kokkos/core/unit_test/incremental/Test13a_ParallelRed_TeamThreadRange.hpp new file mode 100644 index 0000000000000000000000000000000000000000..b5467da9215eb368c1022f19c5e028c01db8e9c7 --- /dev/null +++ b/lib/kokkos/core/unit_test/incremental/Test13a_ParallelRed_TeamThreadRange.hpp @@ -0,0 +1,105 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 3.0 +// Copyright (2020) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +// @Kokkos_Feature_Level_Required:13 +// Unit test for hierarchical parallelism +// Create concurrent work hierarchically and verify if +// sum of created processing units corresponds to expected value + +#include +#include + +// Degrees of concurrency per nesting level + +using SCALAR_TYPE = int; + +namespace Test { + +template +struct Hierarchical_Red_A { + void run(const int pN, const int sX) { + typedef Kokkos::TeamPolicy team_policy; + typedef typename Kokkos::TeamPolicy::member_type member_type; + + typedef Kokkos::View viewDataType; + viewDataType v("Vector", pN); + + Kokkos::parallel_for( + "Team", team_policy(pN, Kokkos::AUTO), + KOKKOS_LAMBDA(const member_type &team) { + const int n = team.league_rank(); + SCALAR_TYPE out = 0; + + Kokkos::parallel_reduce( + Kokkos::TeamThreadRange(team, sX), + [=](const int i, SCALAR_TYPE &tmp) { + tmp += n * v.extent(0) + i; + }, + out); + + Kokkos::single(Kokkos::PerTeam(team), [&]() { v(n) += out; }); + }); + + Kokkos::fence(); + auto v_H = Kokkos::create_mirror_view_and_copy(Kokkos::HostSpace(), v); + + SCALAR_TYPE check = 0; + SCALAR_TYPE ref = 0; + for (int i = 0; i < pN; ++i) { + check += v_H(i); + ref += + (sX + i * pN) * (sX + i * pN - 1) / 2 - ((i * pN) * (i * pN - 1) / 2); + } + ASSERT_EQ(check, ref); + } +}; + +TEST(TEST_CATEGORY, IncrTest_13a_Hierarchical_Red) { + Hierarchical_Red_A test; + test.run(4, 16); + test.run(2, 39); + test.run(39, 3); +} + +} // namespace Test diff --git a/lib/kokkos/core/unit_test/qthreads/TestQthreads.hpp b/lib/kokkos/core/unit_test/incremental/Test13b_ParallelRed_TeamVectorRange.hpp similarity index 57% rename from lib/kokkos/core/unit_test/qthreads/TestQthreads.hpp rename to lib/kokkos/core/unit_test/incremental/Test13b_ParallelRed_TeamVectorRange.hpp index c45433d77d4f2b34102f8bc8092745e4e9e6c86d..ada295591e62de99bfa64d1fdab4e8b9d45165df 100644 --- a/lib/kokkos/core/unit_test/qthreads/TestQthreads.hpp +++ b/lib/kokkos/core/unit_test/incremental/Test13b_ParallelRed_TeamVectorRange.hpp @@ -42,68 +42,61 @@ //@HEADER */ -#ifndef KOKKOS_TEST_QTHREADS_HPP -#define KOKKOS_TEST_QTHREADS_HPP +// @Kokkos_Feature_Level_Required:13 +// Unit test for hierarchical parallelism +// Create concurrent work hierarchically and verify if +// sum of created processing units corresponds to expected value #include +#include -#include +using SCALAR_TYPE = int; -#ifdef KOKKOS_LAMBDA -#undef KOKKOS_LAMBDA -#endif -#define KOKKOS_LAMBDA [=] +namespace Test { -#include +template +struct Hierarchical_Red_B { + void run(const int pN, const int sX) { + typedef Kokkos::TeamPolicy team_policy; + typedef typename Kokkos::TeamPolicy::member_type member_type; -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include + typedef Kokkos::View viewDataType; + viewDataType v("Vector", pN); -namespace Test { + Kokkos::parallel_for( + "Team", team_policy(pN, Kokkos::AUTO), + KOKKOS_LAMBDA(const member_type &team) { + const int n = team.league_rank(); + SCALAR_TYPE out = 0; -class qthreads : public ::testing::Test { - protected: - static void SetUpTestCase() { - const unsigned numa_count = Kokkos::hwloc::get_available_numa_count(); - const unsigned cores_per_numa = - Kokkos::hwloc::get_available_cores_per_numa(); - const unsigned threads_per_core = - Kokkos::hwloc::get_available_threads_per_core(); + Kokkos::parallel_reduce( + Kokkos::TeamVectorRange(team, sX), + [=](const int i, SCALAR_TYPE &tmp) { + tmp += n * v.extent(0) + i; + }, + out); - const unsigned threads_count = - std::max(1u, numa_count) * - std::max(2u, (cores_per_numa * threads_per_core) / 2); + Kokkos::single(Kokkos::PerTeam(team), [&]() { v(n) += out; }); + }); - Kokkos::Qthreads::initialize(threads_count); - Kokkos::print_configuration(std::cout, true); + Kokkos::fence(); + auto v_H = Kokkos::create_mirror_view_and_copy(Kokkos::HostSpace(), v); - srand(10231); + SCALAR_TYPE check = 0; + SCALAR_TYPE ref = 0; + for (int i = 0; i < pN; ++i) { + check += v_H(i); + ref += ((sX + i * pN) * (sX + i * pN - 1) - (i * pN * (i * pN - 1))) / 2; + } + ASSERT_EQ(check, ref); } - - static void TearDownTestCase() { Kokkos::Qthreads::finalize(); } }; -} // namespace Test +TEST(TEST_CATEGORY, IncrTest_13b_Hierarchical_Red) { + Hierarchical_Red_B test; + test.run(4, 16); + test.run(2, 39); + test.run(39, 3); +} -#endif +} // namespace Test diff --git a/lib/kokkos/core/unit_test/incremental/Test13c_ParallelRed_ThreadVectorRange.hpp b/lib/kokkos/core/unit_test/incremental/Test13c_ParallelRed_ThreadVectorRange.hpp new file mode 100644 index 0000000000000000000000000000000000000000..7df940c58de4a3eacc90a80be621492cca08f7c1 --- /dev/null +++ b/lib/kokkos/core/unit_test/incremental/Test13c_ParallelRed_ThreadVectorRange.hpp @@ -0,0 +1,112 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 3.0 +// Copyright (2020) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +// @Kokkos_Feature_Level_Required:13 +// Unit test for hierarchical parallelism +// Create concurrent work hierarchically and verify if +// sum of created processing units corresponds to expected value + +#include +#include + +using SCALAR_TYPE = int; + +namespace Test { + +template +struct Hierarchical_Red_C { + void run(const int pN, const int sX, const int sY) { + typedef Kokkos::TeamPolicy team_policy; + typedef typename Kokkos::TeamPolicy::member_type member_type; + + typedef Kokkos::View viewDataType; + viewDataType v("Vector", pN); + + Kokkos::parallel_for( + "Team", team_policy(pN, Kokkos::AUTO), + KOKKOS_LAMBDA(const member_type &team) { + int n = team.league_rank(); + SCALAR_TYPE out = 0; + + Kokkos::parallel_reduce( + Kokkos::TeamThreadRange(team, sX), + [=](const int i, SCALAR_TYPE &tmp) { + SCALAR_TYPE out_inner = 0; + Kokkos::parallel_reduce( + Kokkos::ThreadVectorRange(team, sY), + [=](const int k, int &tmp_inner) { + tmp_inner += n * sX * v.extent(0) + sX * i + k; + }, + out_inner); + + Kokkos::single(Kokkos::PerThread(team), + [&]() { tmp += out_inner; }); + }, + out); + + Kokkos::single(Kokkos::PerTeam(team), [&]() { v(n) += out; }); + }); + + Kokkos::fence(); + auto v_H = Kokkos::create_mirror_view_and_copy(Kokkos::HostSpace(), v); + + SCALAR_TYPE check = 0; + SCALAR_TYPE ref = 0; + for (int i = 0; i < pN; ++i) { + check += v_H(i); + for (int j = 0; j < sX; ++j) + for (int k = 0; k < sY; ++k) ref += i * sX * pN + sX * j + k; + } + ASSERT_EQ(check, ref); + } +}; + +TEST(TEST_CATEGORY, IncrTest_13c_Hierarchical_Red) { + Hierarchical_Red_C test; + test.run(1, 4, 8); + test.run(2, 39, 12); + test.run(39, 3, 235); +} + +} // namespace Test diff --git a/lib/kokkos/containers/unit_tests/openmp/TestOpenMP_BitSet.cpp b/lib/kokkos/core/unit_test/openmp/TestOpenMP_Concepts.cpp similarity index 98% rename from lib/kokkos/containers/unit_tests/openmp/TestOpenMP_BitSet.cpp rename to lib/kokkos/core/unit_test/openmp/TestOpenMP_Concepts.cpp index db110171594657a9ca659827bb065ab9137fea05..5480af5aaf9f2b0f28da0e5b3fd7f6631839fdad 100644 --- a/lib/kokkos/containers/unit_tests/openmp/TestOpenMP_BitSet.cpp +++ b/lib/kokkos/core/unit_test/openmp/TestOpenMP_Concepts.cpp @@ -1,4 +1,3 @@ - /* //@HEADER // ************************************************************************ @@ -44,4 +43,4 @@ */ #include -#include +#include diff --git a/lib/kokkos/core/unit_test/openmp/TestOpenMP_Other.cpp b/lib/kokkos/core/unit_test/openmp/TestOpenMP_Other.cpp index 6e7463a33fddcfb3ce8aba33fb7cfda6d44c7d03..7043432517b407a9c9d097f0d166664a7b84b9a1 100644 --- a/lib/kokkos/core/unit_test/openmp/TestOpenMP_Other.cpp +++ b/lib/kokkos/core/unit_test/openmp/TestOpenMP_Other.cpp @@ -63,7 +63,7 @@ TEST(openmp, partition_master) { Mutex mtx; int errors = 0; - auto master = [&errors, &mtx](int partition_id, int num_partitions) { + auto master = [&errors, &mtx](int /*partition_id*/, int /*num_partitions*/) { #ifdef KOKKOS_ENABLE_DEPRECATED_CODE const int pool_size = Kokkos::OpenMP::thread_pool_size(); diff --git a/lib/kokkos/containers/unit_tests/openmp/TestOpenMP_DualView.cpp b/lib/kokkos/core/unit_test/openmp/TestOpenMP_RangePolicyRequire.cpp similarity index 98% rename from lib/kokkos/containers/unit_tests/openmp/TestOpenMP_DualView.cpp rename to lib/kokkos/core/unit_test/openmp/TestOpenMP_RangePolicyRequire.cpp index ed4eb23a8bd3a6eb0d43af28f3c2b742bdd0d5ed..284a65a21ee707eb229a19441661a8e5f8ebb16b 100644 --- a/lib/kokkos/containers/unit_tests/openmp/TestOpenMP_DualView.cpp +++ b/lib/kokkos/core/unit_test/openmp/TestOpenMP_RangePolicyRequire.cpp @@ -44,4 +44,4 @@ */ #include -#include +#include diff --git a/lib/kokkos/core/unit_test/openmp/TestOpenMP_Team.cpp b/lib/kokkos/core/unit_test/openmp/TestOpenMP_Team.cpp index c389ebac3736e683b5234132e0535254ae377433..2409307387d2cf991f615c995b5eb64e488bcdf9 100644 --- a/lib/kokkos/core/unit_test/openmp/TestOpenMP_Team.cpp +++ b/lib/kokkos/core/unit_test/openmp/TestOpenMP_Team.cpp @@ -80,25 +80,25 @@ TEST(TEST_CATEGORY, team_reduce) { } TEST(TEST_CATEGORY, team_broadcast) { - TestTeamBroadcast >::test_teambroadcast(0); - TestTeamBroadcast >::test_teambroadcast(0); + TestTeamBroadcast, + long>::test_teambroadcast(0, 1); + TestTeamBroadcast, + long>::test_teambroadcast(0, 1); - TestTeamBroadcast >::test_teambroadcast(2); - TestTeamBroadcast >::test_teambroadcast(2); + TestTeamBroadcast, + long>::test_teambroadcast(2, 1); + TestTeamBroadcast, + long>::test_teambroadcast(2, 1); - TestTeamBroadcast >::test_teambroadcast(16); - TestTeamBroadcast >::test_teambroadcast(16); + TestTeamBroadcast, + long>::test_teambroadcast(16, 1); + TestTeamBroadcast, + long>::test_teambroadcast(16, 1); - TestTeamBroadcast >:: - test_teambroadcast(1000); - TestTeamBroadcast >:: - test_teambroadcast(1000); + TestTeamBroadcast, + long>::test_teambroadcast(1000, 1); + TestTeamBroadcast, + long>::test_teambroadcast(1000, 1); } } // namespace Test diff --git a/lib/kokkos/core/unit_test/openmp/TestOpenMP_TeamScratch.cpp b/lib/kokkos/core/unit_test/openmp/TestOpenMP_TeamScratch.cpp index 5c283a622643e2f2cab160cdb91a5a4275e77fef..b42bdf754f61871efe27338c8d34b31b862ea985 100644 --- a/lib/kokkos/core/unit_test/openmp/TestOpenMP_TeamScratch.cpp +++ b/lib/kokkos/core/unit_test/openmp/TestOpenMP_TeamScratch.cpp @@ -58,7 +58,6 @@ TEST(TEST_CATEGORY, team_scratch_request) { } #if defined(KOKKOS_ENABLE_CXX11_DISPATCH_LAMBDA) -#if !defined(KOKKOS_ENABLE_CUDA) || (8000 <= CUDA_VERSION) TEST(TEST_CATEGORY, team_lambda_shared_request) { TestLambdaSharedTeam >(); @@ -67,7 +66,6 @@ TEST(TEST_CATEGORY, team_lambda_shared_request) { } TEST(TEST_CATEGORY, scratch_align) { TestScratchAlignment(); } #endif -#endif TEST(TEST_CATEGORY, shmem_size) { TestShmemSize(); } diff --git a/lib/kokkos/core/unit_test/openmptarget/TestOpenMPTarget_Concepts.cpp b/lib/kokkos/core/unit_test/openmptarget/TestOpenMPTarget_Concepts.cpp new file mode 100644 index 0000000000000000000000000000000000000000..8896339f9969f113abbc2c019e4e2263facc5901 --- /dev/null +++ b/lib/kokkos/core/unit_test/openmptarget/TestOpenMPTarget_Concepts.cpp @@ -0,0 +1,46 @@ +/* +//@HEADER +// ************************************************************************ +// +// Kokkos v. 3.0 +// Copyright (2020) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Christian R. Trott (crtrott@sandia.gov) +// +// ************************************************************************ +//@HEADER +*/ + +#include +#include diff --git a/lib/kokkos/core/unit_test/openmptarget/TestOpenMPTarget_Crs.cpp b/lib/kokkos/core/unit_test/openmptarget/TestOpenMPTarget_Crs.cpp new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/lib/kokkos/core/unit_test/openmptarget/TestOpenMPTarget_FunctorAnalysis.cpp b/lib/kokkos/core/unit_test/openmptarget/TestOpenMPTarget_FunctorAnalysis.cpp new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/lib/kokkos/core/unit_test/openmptarget/TestOpenMPTarget_LocalDeepCopy.cpp b/lib/kokkos/core/unit_test/openmptarget/TestOpenMPTarget_LocalDeepCopy.cpp new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/lib/kokkos/core/unit_test/openmptarget/TestOpenMPTarget_RangePolicyRequire.cpp b/lib/kokkos/core/unit_test/openmptarget/TestOpenMPTarget_RangePolicyRequire.cpp new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/lib/kokkos/core/unit_test/openmptarget/TestOpenMPTarget_Reductions_DeviceView.cpp b/lib/kokkos/core/unit_test/openmptarget/TestOpenMPTarget_Reductions_DeviceView.cpp new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/lib/kokkos/core/unit_test/openmptarget/TestOpenMPTarget_SharedAlloc.cpp b/lib/kokkos/core/unit_test/openmptarget/TestOpenMPTarget_SharedAlloc.cpp index aa0d9cfe27d9260761c6e6c327afc196f2237091..6d5645547bc8c6ccd819ba2ffe2e09ec5eca543e 100644 --- a/lib/kokkos/core/unit_test/openmptarget/TestOpenMPTarget_SharedAlloc.cpp +++ b/lib/kokkos/core/unit_test/openmptarget/TestOpenMPTarget_SharedAlloc.cpp @@ -47,7 +47,7 @@ namespace Test { -TEST_F(TEST_CATEGORY, impl_shared_alloc) { +TEST(TEST_CATEGORY, impl_shared_alloc) { test_shared_alloc(); } diff --git a/lib/kokkos/core/unit_test/openmptarget/TestOpenMPTarget_SubView_a.cpp b/lib/kokkos/core/unit_test/openmptarget/TestOpenMPTarget_SubView_a.cpp index 6f6255af87a4c0a8940138404e2f84d10e29cce3..4be6218e23d03ead322108b8a3f52817cb1ebda7 100644 --- a/lib/kokkos/core/unit_test/openmptarget/TestOpenMPTarget_SubView_a.cpp +++ b/lib/kokkos/core/unit_test/openmptarget/TestOpenMPTarget_SubView_a.cpp @@ -47,51 +47,51 @@ namespace Test { -TEST_F(TEST_CATEGORY, view_subview_auto_1d_left) { +TEST(TEST_CATEGORY, view_subview_auto_1d_left) { TestViewSubview::test_auto_1d(); } -TEST_F(TEST_CATEGORY, view_subview_auto_1d_right) { +TEST(TEST_CATEGORY, view_subview_auto_1d_right) { TestViewSubview::test_auto_1d(); } -TEST_F(TEST_CATEGORY, view_subview_auto_1d_stride) { +TEST(TEST_CATEGORY, view_subview_auto_1d_stride) { TestViewSubview::test_auto_1d(); } -TEST_F(TEST_CATEGORY, view_subview_assign_strided) { +TEST(TEST_CATEGORY, view_subview_assign_strided) { TestViewSubview::test_1d_strided_assignment(); } -TEST_F(TEST_CATEGORY, view_subview_left_0) { +TEST(TEST_CATEGORY, view_subview_left_0) { TestViewSubview::test_left_0(); } -TEST_F(TEST_CATEGORY, view_subview_left_1) { +TEST(TEST_CATEGORY, view_subview_left_1) { TestViewSubview::test_left_1(); } -TEST_F(TEST_CATEGORY, view_subview_left_2) { +TEST(TEST_CATEGORY, view_subview_left_2) { TestViewSubview::test_left_2(); } -TEST_F(TEST_CATEGORY, view_subview_left_3) { +TEST(TEST_CATEGORY, view_subview_left_3) { TestViewSubview::test_left_3(); } -TEST_F(TEST_CATEGORY, view_subview_right_0) { +TEST(TEST_CATEGORY, view_subview_right_0) { TestViewSubview::test_right_0(); } -TEST_F(TEST_CATEGORY, view_subview_right_1) { +TEST(TEST_CATEGORY, view_subview_right_1) { TestViewSubview::test_right_1(); } -TEST_F(TEST_CATEGORY, view_subview_right_3) { +TEST(TEST_CATEGORY, view_subview_right_3) { TestViewSubview::test_right_3(); } -TEST_F(TEST_CATEGORY, view_static_tests) { +TEST(TEST_CATEGORY, view_static_tests) { TestViewSubview::TestSubviewStaticSizes()(); TestViewSubview::TestSubviewStaticSizes(); TestViewSubview::test_layoutleft_to_layoutleft< TEST_EXECSPACE, Kokkos::MemoryTraits >(); @@ -55,7 +55,7 @@ TEST_F(TEST_CATEGORY, view_subview_layoutleft_to_layoutleft) { TEST_EXECSPACE, Kokkos::MemoryTraits >(); } -TEST_F(TEST_CATEGORY, view_subview_layoutright_to_layoutright) { +TEST(TEST_CATEGORY, view_subview_layoutright_to_layoutright) { TestViewSubview::test_layoutright_to_layoutright(); TestViewSubview::test_layoutright_to_layoutright< TEST_EXECSPACE, Kokkos::MemoryTraits >(); diff --git a/lib/kokkos/core/unit_test/openmptarget/TestOpenMPTarget_SubView_c01.cpp b/lib/kokkos/core/unit_test/openmptarget/TestOpenMPTarget_SubView_c01.cpp index 953c383bf98d0936a215065242e61b86fcb3c586..3361efcc16cdc25bb754185c645d53796e15a75c 100644 --- a/lib/kokkos/core/unit_test/openmptarget/TestOpenMPTarget_SubView_c01.cpp +++ b/lib/kokkos/core/unit_test/openmptarget/TestOpenMPTarget_SubView_c01.cpp @@ -47,7 +47,7 @@ namespace Test { -TEST_F(TEST_CATEGORY, view_subview_1d_assign) { +TEST(TEST_CATEGORY, view_subview_1d_assign) { TestViewSubview::test_1d_assign(); } diff --git a/lib/kokkos/core/unit_test/openmptarget/TestOpenMPTarget_SubView_c02.cpp b/lib/kokkos/core/unit_test/openmptarget/TestOpenMPTarget_SubView_c02.cpp index 3a6245e258173d49ab59bbdc1b88ce2e4d086775..c4887cf3dbce98f8949a5149a51ca27c4462ccbd 100644 --- a/lib/kokkos/core/unit_test/openmptarget/TestOpenMPTarget_SubView_c02.cpp +++ b/lib/kokkos/core/unit_test/openmptarget/TestOpenMPTarget_SubView_c02.cpp @@ -47,7 +47,7 @@ namespace Test { -TEST_F(TEST_CATEGORY, view_subview_1d_assign_atomic) { +TEST(TEST_CATEGORY, view_subview_1d_assign_atomic) { TestViewSubview::test_1d_assign >(); } diff --git a/lib/kokkos/core/unit_test/openmptarget/TestOpenMPTarget_SubView_c03.cpp b/lib/kokkos/core/unit_test/openmptarget/TestOpenMPTarget_SubView_c03.cpp index e9e912dd0e7d8e16ad2e15554596b00a74131260..b172b0c61984860cea5e5036dd3418dcd45aed81 100644 --- a/lib/kokkos/core/unit_test/openmptarget/TestOpenMPTarget_SubView_c03.cpp +++ b/lib/kokkos/core/unit_test/openmptarget/TestOpenMPTarget_SubView_c03.cpp @@ -47,7 +47,7 @@ namespace Test { -TEST_F(TEST_CATEGORY, view_subview_1d_assign_randomaccess) { +TEST(TEST_CATEGORY, view_subview_1d_assign_randomaccess) { TestViewSubview::test_1d_assign< TEST_EXECSPACE, Kokkos::MemoryTraits >(); } diff --git a/lib/kokkos/core/unit_test/openmptarget/TestOpenMPTarget_SubView_c04.cpp b/lib/kokkos/core/unit_test/openmptarget/TestOpenMPTarget_SubView_c04.cpp index 0c5b9c8c019f5e28d81a2c9c06e0feac577bda5d..faf0ef7a412e1df2938f953c63b603548ab02281 100644 --- a/lib/kokkos/core/unit_test/openmptarget/TestOpenMPTarget_SubView_c04.cpp +++ b/lib/kokkos/core/unit_test/openmptarget/TestOpenMPTarget_SubView_c04.cpp @@ -47,7 +47,7 @@ namespace Test { -TEST_F(TEST_CATEGORY, view_subview_2d_from_3d) { +TEST(TEST_CATEGORY, view_subview_2d_from_3d) { TestViewSubview::test_2d_subview_3d(); } diff --git a/lib/kokkos/core/unit_test/openmptarget/TestOpenMPTarget_SubView_c05.cpp b/lib/kokkos/core/unit_test/openmptarget/TestOpenMPTarget_SubView_c05.cpp index 0e11c637e615eb3847d0391488af578ea7d398d4..a3fb95fbefbcad6701771a1c36c7ceb5b072597b 100644 --- a/lib/kokkos/core/unit_test/openmptarget/TestOpenMPTarget_SubView_c05.cpp +++ b/lib/kokkos/core/unit_test/openmptarget/TestOpenMPTarget_SubView_c05.cpp @@ -47,7 +47,7 @@ namespace Test { -TEST_F(openmptarget, view_subview_2d_from_3d_atomic) { +TEST(openmptarget, view_subview_2d_from_3d_atomic) { TestViewSubview::test_2d_subview_3d >(); } diff --git a/lib/kokkos/core/unit_test/openmptarget/TestOpenMPTarget_SubView_c06.cpp b/lib/kokkos/core/unit_test/openmptarget/TestOpenMPTarget_SubView_c06.cpp index e9a30a1835ac50df52bd3498e1ee4b14682f6ea7..056b392cd5de827394bb4e2345f43007208c5881 100644 --- a/lib/kokkos/core/unit_test/openmptarget/TestOpenMPTarget_SubView_c06.cpp +++ b/lib/kokkos/core/unit_test/openmptarget/TestOpenMPTarget_SubView_c06.cpp @@ -47,7 +47,7 @@ namespace Test { -TEST_F(TEST_CATEGORY, view_subview_2d_from_3d_randomaccess) { +TEST(TEST_CATEGORY, view_subview_2d_from_3d_randomaccess) { TestViewSubview::test_2d_subview_3d< TEST_EXECSPACE, Kokkos::MemoryTraits >(); } diff --git a/lib/kokkos/core/unit_test/openmptarget/TestOpenMPTarget_SubView_c07.cpp b/lib/kokkos/core/unit_test/openmptarget/TestOpenMPTarget_SubView_c07.cpp index 7d230d7e8547eed11866497c51a310622721d77d..033bce86335a205c82cbc42c38601715970c1884 100644 --- a/lib/kokkos/core/unit_test/openmptarget/TestOpenMPTarget_SubView_c07.cpp +++ b/lib/kokkos/core/unit_test/openmptarget/TestOpenMPTarget_SubView_c07.cpp @@ -47,7 +47,7 @@ namespace Test { -TEST_F(TEST_CATEGORY, view_subview_3d_from_5d_left) { +TEST(TEST_CATEGORY, view_subview_3d_from_5d_left) { TestViewSubview::test_3d_subview_5d_left(); } diff --git a/lib/kokkos/core/unit_test/openmptarget/TestOpenMPTarget_SubView_c08.cpp b/lib/kokkos/core/unit_test/openmptarget/TestOpenMPTarget_SubView_c08.cpp index e0b1f17a9869f5b872a3e737ce01de57de4eddc4..58ef4236089937de431b7abfd07d1f8624299bae 100644 --- a/lib/kokkos/core/unit_test/openmptarget/TestOpenMPTarget_SubView_c08.cpp +++ b/lib/kokkos/core/unit_test/openmptarget/TestOpenMPTarget_SubView_c08.cpp @@ -47,7 +47,7 @@ namespace Test { -TEST_F(TEST_CATEGORY, view_subview_3d_from_5d_left_atomic) { +TEST(TEST_CATEGORY, view_subview_3d_from_5d_left_atomic) { TestViewSubview::test_3d_subview_5d_left< TEST_EXECSPACE, Kokkos::MemoryTraits >(); } diff --git a/lib/kokkos/core/unit_test/openmptarget/TestOpenMPTarget_SubView_c09.cpp b/lib/kokkos/core/unit_test/openmptarget/TestOpenMPTarget_SubView_c09.cpp index 0b5d94b5274bba68f040429253fb1a484d2884e8..6e6c2af8e9402655753f4ef34bbb2b0f5f1ba155 100644 --- a/lib/kokkos/core/unit_test/openmptarget/TestOpenMPTarget_SubView_c09.cpp +++ b/lib/kokkos/core/unit_test/openmptarget/TestOpenMPTarget_SubView_c09.cpp @@ -47,7 +47,7 @@ namespace Test { -TEST_F(TEST_CATEGORY, view_subview_3d_from_5d_left_randomaccess) { +TEST(TEST_CATEGORY, view_subview_3d_from_5d_left_randomaccess) { TestViewSubview::test_3d_subview_5d_left< TEST_EXECSPACE, Kokkos::MemoryTraits >(); } diff --git a/lib/kokkos/core/unit_test/openmptarget/TestOpenMPTarget_SubView_c10.cpp b/lib/kokkos/core/unit_test/openmptarget/TestOpenMPTarget_SubView_c10.cpp index da2605da03ad63f495fd856c623549965045bf92..2ad95d38cf72df4d40e90cf9c12f67cfe275b27c 100644 --- a/lib/kokkos/core/unit_test/openmptarget/TestOpenMPTarget_SubView_c10.cpp +++ b/lib/kokkos/core/unit_test/openmptarget/TestOpenMPTarget_SubView_c10.cpp @@ -47,7 +47,7 @@ namespace Test { -TEST_F(TEST_CATEGORY, view_subview_3d_from_5d_right) { +TEST(TEST_CATEGORY, view_subview_3d_from_5d_right) { TestViewSubview::test_3d_subview_5d_right(); } diff --git a/lib/kokkos/core/unit_test/openmptarget/TestOpenMPTarget_SubView_c11.cpp b/lib/kokkos/core/unit_test/openmptarget/TestOpenMPTarget_SubView_c11.cpp index 3aa927190c7bb1de77f78f2d62fb334c0397284f..da8684d21ce4a6f28cd9c85a4ee09ea7bfcc5fee 100644 --- a/lib/kokkos/core/unit_test/openmptarget/TestOpenMPTarget_SubView_c11.cpp +++ b/lib/kokkos/core/unit_test/openmptarget/TestOpenMPTarget_SubView_c11.cpp @@ -47,7 +47,7 @@ namespace Test { -TEST_F(TEST_CATEGORY, view_subview_3d_from_5d_right_atomic) { +TEST(TEST_CATEGORY, view_subview_3d_from_5d_right_atomic) { TestViewSubview::test_3d_subview_5d_right< TEST_EXECSPACE, Kokkos::MemoryTraits >(); } diff --git a/lib/kokkos/core/unit_test/openmptarget/TestOpenMPTarget_SubView_c12.cpp b/lib/kokkos/core/unit_test/openmptarget/TestOpenMPTarget_SubView_c12.cpp index dde0db7dd84f22b53dbe8f94d1bd89af316d1810..dde7d5176208a5189c7969c18e6fbd8bd4948d9b 100644 --- a/lib/kokkos/core/unit_test/openmptarget/TestOpenMPTarget_SubView_c12.cpp +++ b/lib/kokkos/core/unit_test/openmptarget/TestOpenMPTarget_SubView_c12.cpp @@ -47,7 +47,7 @@ namespace Test { -TEST_F(TEST_CATEGORY, view_subview_3d_from_5d_right_randomaccess) { +TEST(TEST_CATEGORY, view_subview_3d_from_5d_right_randomaccess) { TestViewSubview::test_3d_subview_5d_right< TEST_EXECSPACE, Kokkos::MemoryTraits >(); } diff --git a/lib/kokkos/core/unit_test/openmptarget/TestOpenMPTarget_SubView_c13.cpp b/lib/kokkos/core/unit_test/openmptarget/TestOpenMPTarget_SubView_c13.cpp new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/lib/kokkos/core/unit_test/openmptarget/TestOpenMPTarget_Team.cpp b/lib/kokkos/core/unit_test/openmptarget/TestOpenMPTarget_Team.cpp index f2d063c25f94479b0c8ecfe6f649e053ea9508dd..74b74d784ca0422a5bccc4287d9c1ada9ace4ad6 100644 --- a/lib/kokkos/core/unit_test/openmptarget/TestOpenMPTarget_Team.cpp +++ b/lib/kokkos/core/unit_test/openmptarget/TestOpenMPTarget_Team.cpp @@ -47,7 +47,7 @@ namespace Test { -TEST_F(TEST_CATEGORY, team_for) { +TEST(TEST_CATEGORY, team_for) { TestTeamPolicy >::test_for( 0); TestTeamPolicy >::test_for( @@ -64,7 +64,7 @@ TEST_F(TEST_CATEGORY, team_for) { 1000); } -TEST_F(TEST_CATEGORY, team_reduce) { +TEST(TEST_CATEGORY, team_reduce) { TestTeamPolicy >::test_reduce(0); TestTeamPolicy >(0); TestScanTeam >(0); TestScanTeam >(10); @@ -56,7 +56,7 @@ TEST_F(TEST_CATEGORY, team_scan) { TestScanTeam >(10000); } -TEST_F(TEST_CATEGORY, team_long_reduce) { +TEST(TEST_CATEGORY, team_long_reduce) { TestReduceTeam >(0); TestReduceTeam >(0); TestReduceTeam >(3); @@ -67,7 +67,7 @@ TEST_F(TEST_CATEGORY, team_long_reduce) { 100000); } -TEST_F(TEST_CATEGORY, team_double_reduce) { +TEST(TEST_CATEGORY, team_double_reduce) { TestReduceTeam >(0); TestReduceTeam >(0); TestReduceTeam >(3); diff --git a/lib/kokkos/core/unit_test/openmptarget/TestOpenMPTarget_TeamScratch.cpp b/lib/kokkos/core/unit_test/openmptarget/TestOpenMPTarget_TeamScratch.cpp index b0a75432d76f5bee0563ac44ae7a3a6de4850628..729e3591878252aefcb91db8f66689eb8c77671d 100644 --- a/lib/kokkos/core/unit_test/openmptarget/TestOpenMPTarget_TeamScratch.cpp +++ b/lib/kokkos/core/unit_test/openmptarget/TestOpenMPTarget_TeamScratch.cpp @@ -47,18 +47,17 @@ namespace Test { -TEST_F(TEST_CATEGORY, team_shared_request) { +TEST(TEST_CATEGORY, team_shared_request) { TestSharedTeam >(); TestSharedTeam >(); } -TEST_F(TEST_CATEGORY, team_scratch_request) { +TEST(TEST_CATEGORY, team_scratch_request) { TestScratchTeam >(); TestScratchTeam >(); } #if defined(KOKKOS_ENABLE_CXX11_DISPATCH_LAMBDA) -#if !defined(KOKKOS_ENABLE_CUDA) || (8000 <= CUDA_VERSION) TEST_F(TEST_CATEGORY, team_lambda_shared_request) { TestLambdaSharedTeam >(); @@ -66,11 +65,10 @@ TEST_F(TEST_CATEGORY, team_lambda_shared_request) { Kokkos::Schedule >(); } #endif -#endif -TEST_F(TEST_CATEGORY, shmem_size) { TestShmemSize(); } +TEST(TEST_CATEGORY, shmem_size) { TestShmemSize(); } -TEST_F(TEST_CATEGORY, multi_level_scratch) { +TEST(TEST_CATEGORY, multi_level_scratch) { TestMultiLevelScratchTeam >(); TestMultiLevelScratchTeam - -namespace Test { - -TEST_F(qthreads, atomics) { -#if 0 - const int loop_count = 1e4; - - ASSERT_TRUE( ( TestAtomic::Loop< int, Kokkos::Qthreads >( loop_count, 1 ) ) ); - ASSERT_TRUE( ( TestAtomic::Loop< int, Kokkos::Qthreads >( loop_count, 2 ) ) ); - ASSERT_TRUE( ( TestAtomic::Loop< int, Kokkos::Qthreads >( loop_count, 3 ) ) ); - - ASSERT_TRUE( ( TestAtomic::Loop< unsigned int, Kokkos::Qthreads >( loop_count, 1 ) ) ); - ASSERT_TRUE( ( TestAtomic::Loop< unsigned int, Kokkos::Qthreads >( loop_count, 2 ) ) ); - ASSERT_TRUE( ( TestAtomic::Loop< unsigned int, Kokkos::Qthreads >( loop_count, 3 ) ) ); - - ASSERT_TRUE( ( TestAtomic::Loop< long int, Kokkos::Qthreads >( loop_count, 1 ) ) ); - ASSERT_TRUE( ( TestAtomic::Loop< long int, Kokkos::Qthreads >( loop_count, 2 ) ) ); - ASSERT_TRUE( ( TestAtomic::Loop< long int, Kokkos::Qthreads >( loop_count, 3 ) ) ); - - ASSERT_TRUE( ( TestAtomic::Loop< unsigned long int, Kokkos::Qthreads >( loop_count, 1 ) ) ); - ASSERT_TRUE( ( TestAtomic::Loop< unsigned long int, Kokkos::Qthreads >( loop_count, 2 ) ) ); - ASSERT_TRUE( ( TestAtomic::Loop< unsigned long int, Kokkos::Qthreads >( loop_count, 3 ) ) ); - - ASSERT_TRUE( ( TestAtomic::Loop< long long int, Kokkos::Qthreads >( loop_count, 1 ) ) ); - ASSERT_TRUE( ( TestAtomic::Loop< long long int, Kokkos::Qthreads >( loop_count, 2 ) ) ); - ASSERT_TRUE( ( TestAtomic::Loop< long long int, Kokkos::Qthreads >( loop_count, 3 ) ) ); - - ASSERT_TRUE( ( TestAtomic::Loop< double, Kokkos::Qthreads >( loop_count, 1 ) ) ); - ASSERT_TRUE( ( TestAtomic::Loop< double, Kokkos::Qthreads >( loop_count, 2 ) ) ); - ASSERT_TRUE( ( TestAtomic::Loop< double, Kokkos::Qthreads >( loop_count, 3 ) ) ); - - ASSERT_TRUE( ( TestAtomic::Loop< float, Kokkos::Qthreads >( 100, 1 ) ) ); - ASSERT_TRUE( ( TestAtomic::Loop< float, Kokkos::Qthreads >( 100, 2 ) ) ); - ASSERT_TRUE( ( TestAtomic::Loop< float, Kokkos::Qthreads >( 100, 3 ) ) ); - - ASSERT_TRUE( ( TestAtomic::Loop< Kokkos::complex, Kokkos::Qthreads >( 100, 1 ) ) ); - ASSERT_TRUE( ( TestAtomic::Loop< Kokkos::complex, Kokkos::Qthreads >( 100, 2 ) ) ); - ASSERT_TRUE( ( TestAtomic::Loop< Kokkos::complex, Kokkos::Qthreads >( 100, 3 ) ) ); - - ASSERT_TRUE( ( TestAtomic::Loop< TestAtomic::SuperScalar<4>, Kokkos::Qthreads >( 100, 1 ) ) ); - ASSERT_TRUE( ( TestAtomic::Loop< TestAtomic::SuperScalar<4>, Kokkos::Qthreads >( 100, 2 ) ) ); - ASSERT_TRUE( ( TestAtomic::Loop< TestAtomic::SuperScalar<4>, Kokkos::Qthreads >( 100, 3 ) ) ); -#endif -} - -TEST_F(qthreads, atomic_operations) { -#if 0 - const int start = 1; // Avoid zero for division. - const int end = 11; - - for ( int i = start; i < end; ++i ) - { - ASSERT_TRUE( ( TestAtomicOperations::AtomicOperationsTestIntegralType< int, Kokkos::Qthreads >( start, end - i, 1 ) ) ); - ASSERT_TRUE( ( TestAtomicOperations::AtomicOperationsTestIntegralType< int, Kokkos::Qthreads >( start, end - i, 2 ) ) ); - ASSERT_TRUE( ( TestAtomicOperations::AtomicOperationsTestIntegralType< int, Kokkos::Qthreads >( start, end - i, 3 ) ) ); - ASSERT_TRUE( ( TestAtomicOperations::AtomicOperationsTestIntegralType< int, Kokkos::Qthreads >( start, end - i, 4 ) ) ); - ASSERT_TRUE( ( TestAtomicOperations::AtomicOperationsTestIntegralType< int, Kokkos::Qthreads >( start, end - i, 5 ) ) ); - ASSERT_TRUE( ( TestAtomicOperations::AtomicOperationsTestIntegralType< int, Kokkos::Qthreads >( start, end - i, 6 ) ) ); - ASSERT_TRUE( ( TestAtomicOperations::AtomicOperationsTestIntegralType< int, Kokkos::Qthreads >( start, end - i, 7 ) ) ); - ASSERT_TRUE( ( TestAtomicOperations::AtomicOperationsTestIntegralType< int, Kokkos::Qthreads >( start, end - i, 8 ) ) ); - ASSERT_TRUE( ( TestAtomicOperations::AtomicOperationsTestIntegralType< int, Kokkos::Qthreads >( start, end - i, 9 ) ) ); - ASSERT_TRUE( ( TestAtomicOperations::AtomicOperationsTestIntegralType< int, Kokkos::Qthreads >( start, end - i, 11 ) ) ); - ASSERT_TRUE( ( TestAtomicOperations::AtomicOperationsTestIntegralType< int, Kokkos::Qthreads >( start, end - i, 12 ) ) ); - - ASSERT_TRUE( ( TestAtomicOperations::AtomicOperationsTestIntegralType< unsigned int, Kokkos::Qthreads >( start, end - i, 1 ) ) ); - ASSERT_TRUE( ( TestAtomicOperations::AtomicOperationsTestIntegralType< unsigned int, Kokkos::Qthreads >( start, end - i, 2 ) ) ); - ASSERT_TRUE( ( TestAtomicOperations::AtomicOperationsTestIntegralType< unsigned int, Kokkos::Qthreads >( start, end - i, 3 ) ) ); - ASSERT_TRUE( ( TestAtomicOperations::AtomicOperationsTestIntegralType< unsigned int, Kokkos::Qthreads >( start, end - i, 4 ) ) ); - ASSERT_TRUE( ( TestAtomicOperations::AtomicOperationsTestIntegralType< unsigned int, Kokkos::Qthreads >( start, end - i, 5 ) ) ); - ASSERT_TRUE( ( TestAtomicOperations::AtomicOperationsTestIntegralType< unsigned int, Kokkos::Qthreads >( start, end - i, 6 ) ) ); - ASSERT_TRUE( ( TestAtomicOperations::AtomicOperationsTestIntegralType< unsigned int, Kokkos::Qthreads >( start, end - i, 7 ) ) ); - ASSERT_TRUE( ( TestAtomicOperations::AtomicOperationsTestIntegralType< unsigned int, Kokkos::Qthreads >( start, end - i, 8 ) ) ); - ASSERT_TRUE( ( TestAtomicOperations::AtomicOperationsTestIntegralType< unsigned int, Kokkos::Qthreads >( start, end - i, 9 ) ) ); - ASSERT_TRUE( ( TestAtomicOperations::AtomicOperationsTestIntegralType< unsigned int, Kokkos::Qthreads >( start, end - i, 11 ) ) ); - ASSERT_TRUE( ( TestAtomicOperations::AtomicOperationsTestIntegralType< unsigned int, Kokkos::Qthreads >( start, end - i, 12 ) ) ); - - ASSERT_TRUE( ( TestAtomicOperations::AtomicOperationsTestIntegralType< long int, Kokkos::Qthreads >( start, end - i, 1 ) ) ); - ASSERT_TRUE( ( TestAtomicOperations::AtomicOperationsTestIntegralType< long int, Kokkos::Qthreads >( start, end - i, 2 ) ) ); - ASSERT_TRUE( ( TestAtomicOperations::AtomicOperationsTestIntegralType< long int, Kokkos::Qthreads >( start, end - i, 3 ) ) ); - ASSERT_TRUE( ( TestAtomicOperations::AtomicOperationsTestIntegralType< long int, Kokkos::Qthreads >( start, end - i, 4 ) ) ); - ASSERT_TRUE( ( TestAtomicOperations::AtomicOperationsTestIntegralType< long int, Kokkos::Qthreads >( start, end - i, 5 ) ) ); - ASSERT_TRUE( ( TestAtomicOperations::AtomicOperationsTestIntegralType< long int, Kokkos::Qthreads >( start, end - i, 6 ) ) ); - ASSERT_TRUE( ( TestAtomicOperations::AtomicOperationsTestIntegralType< long int, Kokkos::Qthreads >( start, end - i, 7 ) ) ); - ASSERT_TRUE( ( TestAtomicOperations::AtomicOperationsTestIntegralType< long int, Kokkos::Qthreads >( start, end - i, 8 ) ) ); - ASSERT_TRUE( ( TestAtomicOperations::AtomicOperationsTestIntegralType< long int, Kokkos::Qthreads >( start, end - i, 9 ) ) ); - ASSERT_TRUE( ( TestAtomicOperations::AtomicOperationsTestIntegralType< long int, Kokkos::Qthreads >( start, end - i, 11 ) ) ); - ASSERT_TRUE( ( TestAtomicOperations::AtomicOperationsTestIntegralType< long int, Kokkos::Qthreads >( start, end - i, 12 ) ) ); - - ASSERT_TRUE( ( TestAtomicOperations::AtomicOperationsTestIntegralType< unsigned long int, Kokkos::Qthreads >( start, end - i, 1 ) ) ); - ASSERT_TRUE( ( TestAtomicOperations::AtomicOperationsTestIntegralType< unsigned long int, Kokkos::Qthreads >( start, end - i, 2 ) ) ); - ASSERT_TRUE( ( TestAtomicOperations::AtomicOperationsTestIntegralType< unsigned long int, Kokkos::Qthreads >( start, end - i, 3 ) ) ); - ASSERT_TRUE( ( TestAtomicOperations::AtomicOperationsTestIntegralType< unsigned long int, Kokkos::Qthreads >( start, end - i, 4 ) ) ); - ASSERT_TRUE( ( TestAtomicOperations::AtomicOperationsTestIntegralType< unsigned long int, Kokkos::Qthreads >( start, end - i, 5 ) ) ); - ASSERT_TRUE( ( TestAtomicOperations::AtomicOperationsTestIntegralType< unsigned long int, Kokkos::Qthreads >( start, end - i, 6 ) ) ); - ASSERT_TRUE( ( TestAtomicOperations::AtomicOperationsTestIntegralType< unsigned long int, Kokkos::Qthreads >( start, end - i, 7 ) ) ); - ASSERT_TRUE( ( TestAtomicOperations::AtomicOperationsTestIntegralType< unsigned long int, Kokkos::Qthreads >( start, end - i, 8 ) ) ); - ASSERT_TRUE( ( TestAtomicOperations::AtomicOperationsTestIntegralType< unsigned long int, Kokkos::Qthreads >( start, end - i, 9 ) ) ); - ASSERT_TRUE( ( TestAtomicOperations::AtomicOperationsTestIntegralType< unsigned long int, Kokkos::Qthreads >( start, end - i, 11 ) ) ); - ASSERT_TRUE( ( TestAtomicOperations::AtomicOperationsTestIntegralType< unsigned long int, Kokkos::Qthreads >( start, end - i, 12 ) ) ); - - ASSERT_TRUE( ( TestAtomicOperations::AtomicOperationsTestIntegralType< long long int, Kokkos::Qthreads >( start, end - i, 1 ) ) ); - ASSERT_TRUE( ( TestAtomicOperations::AtomicOperationsTestIntegralType< long long int, Kokkos::Qthreads >( start, end - i, 2 ) ) ); - ASSERT_TRUE( ( TestAtomicOperations::AtomicOperationsTestIntegralType< long long int, Kokkos::Qthreads >( start, end - i, 3 ) ) ); - ASSERT_TRUE( ( TestAtomicOperations::AtomicOperationsTestIntegralType< long long int, Kokkos::Qthreads >( start, end - i, 4 ) ) ); - ASSERT_TRUE( ( TestAtomicOperations::AtomicOperationsTestIntegralType< long long int, Kokkos::Qthreads >( start, end - i, 5 ) ) ); - ASSERT_TRUE( ( TestAtomicOperations::AtomicOperationsTestIntegralType< long long int, Kokkos::Qthreads >( start, end - i, 6 ) ) ); - ASSERT_TRUE( ( TestAtomicOperations::AtomicOperationsTestIntegralType< long long int, Kokkos::Qthreads >( start, end - i, 7 ) ) ); - ASSERT_TRUE( ( TestAtomicOperations::AtomicOperationsTestIntegralType< long long int, Kokkos::Qthreads >( start, end - i, 8 ) ) ); - ASSERT_TRUE( ( TestAtomicOperations::AtomicOperationsTestIntegralType< long long int, Kokkos::Qthreads >( start, end - i, 9 ) ) ); - ASSERT_TRUE( ( TestAtomicOperations::AtomicOperationsTestIntegralType< long long int, Kokkos::Qthreads >( start, end - i, 11 ) ) ); - ASSERT_TRUE( ( TestAtomicOperations::AtomicOperationsTestIntegralType< long long int, Kokkos::Qthreads >( start, end - i, 12 ) ) ); - - ASSERT_TRUE( ( TestAtomicOperations::AtomicOperationsTestNonIntegralType< double, Kokkos::Qthreads >( start, end - i, 1 ) ) ); - ASSERT_TRUE( ( TestAtomicOperations::AtomicOperationsTestNonIntegralType< double, Kokkos::Qthreads >( start, end - i, 2 ) ) ); - ASSERT_TRUE( ( TestAtomicOperations::AtomicOperationsTestNonIntegralType< double, Kokkos::Qthreads >( start, end - i, 3 ) ) ); - ASSERT_TRUE( ( TestAtomicOperations::AtomicOperationsTestNonIntegralType< double, Kokkos::Qthreads >( start, end - i, 4 ) ) ); - - ASSERT_TRUE( ( TestAtomicOperations::AtomicOperationsTestNonIntegralType< float, Kokkos::Qthreads >( start, end - i, 1 ) ) ); - ASSERT_TRUE( ( TestAtomicOperations::AtomicOperationsTestNonIntegralType< float, Kokkos::Qthreads >( start, end - i, 2 ) ) ); - ASSERT_TRUE( ( TestAtomicOperations::AtomicOperationsTestNonIntegralType< float, Kokkos::Qthreads >( start, end - i, 3 ) ) ); - ASSERT_TRUE( ( TestAtomicOperations::AtomicOperationsTestNonIntegralType< float, Kokkos::Qthreads >( start, end - i, 4 ) ) ); - } -#endif -} - -TEST_F(qthreads, atomic_views_integral) { -#if 0 - const long length = 1000000; - - { - // Integral Types. - ASSERT_TRUE( ( TestAtomicViews::AtomicViewsTestIntegralType< long, Kokkos::Qthreads >( length, 1 ) ) ); - ASSERT_TRUE( ( TestAtomicViews::AtomicViewsTestIntegralType< long, Kokkos::Qthreads >( length, 2 ) ) ); - ASSERT_TRUE( ( TestAtomicViews::AtomicViewsTestIntegralType< long, Kokkos::Qthreads >( length, 3 ) ) ); - ASSERT_TRUE( ( TestAtomicViews::AtomicViewsTestIntegralType< long, Kokkos::Qthreads >( length, 4 ) ) ); - ASSERT_TRUE( ( TestAtomicViews::AtomicViewsTestIntegralType< long, Kokkos::Qthreads >( length, 5 ) ) ); - ASSERT_TRUE( ( TestAtomicViews::AtomicViewsTestIntegralType< long, Kokkos::Qthreads >( length, 6 ) ) ); - ASSERT_TRUE( ( TestAtomicViews::AtomicViewsTestIntegralType< long, Kokkos::Qthreads >( length, 7 ) ) ); - ASSERT_TRUE( ( TestAtomicViews::AtomicViewsTestIntegralType< long, Kokkos::Qthreads >( length, 8 ) ) ); - } -#endif -} - -TEST_F(qthreads, atomic_views_nonintegral) { -#if 0 - const long length = 1000000; - - { - // Non-Integral Types. - ASSERT_TRUE( ( TestAtomicViews::AtomicViewsTestNonIntegralType< double, Kokkos::Qthreads >( length, 1 ) ) ); - ASSERT_TRUE( ( TestAtomicViews::AtomicViewsTestNonIntegralType< double, Kokkos::Qthreads >( length, 2 ) ) ); - ASSERT_TRUE( ( TestAtomicViews::AtomicViewsTestNonIntegralType< double, Kokkos::Qthreads >( length, 3 ) ) ); - ASSERT_TRUE( ( TestAtomicViews::AtomicViewsTestNonIntegralType< double, Kokkos::Qthreads >( length, 4 ) ) ); - } -#endif -} - -TEST_F(qthreads, atomic_view_api) { -#if 0 - TestAtomicViews::TestAtomicViewAPI< int, Kokkos::Qthreads >(); -#endif -} - -} // namespace Test diff --git a/lib/kokkos/core/unit_test/qthreads/TestQthreads_Complex.cpp b/lib/kokkos/core/unit_test/qthreads/TestQthreads_Complex.cpp deleted file mode 100644 index 09e1ca3e24c0b18bb6734cc5dd7627370e399c4e..0000000000000000000000000000000000000000 --- a/lib/kokkos/core/unit_test/qthreads/TestQthreads_Complex.cpp +++ /dev/null @@ -1,2 +0,0 @@ -#include -#include diff --git a/lib/kokkos/core/unit_test/qthreads/TestQthreads_Other.cpp b/lib/kokkos/core/unit_test/qthreads/TestQthreads_Other.cpp deleted file mode 100644 index 7d5461661319cd67365650062407f0f35da7f321..0000000000000000000000000000000000000000 --- a/lib/kokkos/core/unit_test/qthreads/TestQthreads_Other.cpp +++ /dev/null @@ -1,196 +0,0 @@ -/* -//@HEADER -// ************************************************************************ -// -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering -// Solutions of Sandia, LLC (NTESS). -// -// Under the terms of Contract DE-NA0003525 with NTESS, -// the U.S. Government retains certain rights in this software. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Christian R. Trott (crtrott@sandia.gov) -// -// ************************************************************************ -//@HEADER -*/ - -#include - -namespace Test { - -TEST_F(qthreads, init) { ; } - -TEST_F(qthreads, md_range) { -#if 0 - TestMDRange_2D< Kokkos::Qthreads >::test_for2( 100, 100 ); - TestMDRange_3D< Kokkos::Qthreads >::test_for3( 100, 100, 100 ); -#endif -} - -TEST_F(qthreads, policy_construction) { -#if 0 - TestRangePolicyConstruction< Kokkos::Qthreads >(); - TestTeamPolicyConstruction< Kokkos::Qthreads >(); -#endif -} - -TEST_F(qthreads, range_tag) { -#if 0 - TestRange< Kokkos::Qthreads, Kokkos::Schedule >::test_for( 0 ); - TestRange< Kokkos::Qthreads, Kokkos::Schedule >::test_reduce( 0 ); - TestRange< Kokkos::Qthreads, Kokkos::Schedule >::test_scan( 0 ); - TestRange< Kokkos::Qthreads, Kokkos::Schedule >::test_for( 0 ); - TestRange< Kokkos::Qthreads, Kokkos::Schedule >::test_reduce( 0 ); - TestRange< Kokkos::Qthreads, Kokkos::Schedule >::test_scan( 0 ); - TestRange< Kokkos::Qthreads, Kokkos::Schedule >::test_dynamic_policy( 0 ); - - TestRange< Kokkos::Qthreads, Kokkos::Schedule >::test_for( 2 ); - TestRange< Kokkos::Qthreads, Kokkos::Schedule >::test_reduce( 2 ); - TestRange< Kokkos::Qthreads, Kokkos::Schedule >::test_scan( 2 ); - - TestRange< Kokkos::Qthreads, Kokkos::Schedule >::test_for( 3 ); - TestRange< Kokkos::Qthreads, Kokkos::Schedule >::test_reduce( 3 ); - TestRange< Kokkos::Qthreads, Kokkos::Schedule >::test_scan( 3 ); - TestRange< Kokkos::Qthreads, Kokkos::Schedule >::test_dynamic_policy( 3 ); - - TestRange< Kokkos::Qthreads, Kokkos::Schedule >::test_for( 1000 ); - TestRange< Kokkos::Qthreads, Kokkos::Schedule >::test_reduce( 1000 ); - TestRange< Kokkos::Qthreads, Kokkos::Schedule >::test_scan( 1000 ); - - TestRange< Kokkos::Qthreads, Kokkos::Schedule >::test_for( 1001 ); - TestRange< Kokkos::Qthreads, Kokkos::Schedule >::test_reduce( 1001 ); - TestRange< Kokkos::Qthreads, Kokkos::Schedule >::test_scan( 1001 ); - TestRange< Kokkos::Qthreads, Kokkos::Schedule >::test_dynamic_policy( 1000 ); -#endif -} - -//---------------------------------------------------------------------------- - -TEST_F(qthreads, compiler_macros) { -#if 0 - ASSERT_TRUE( ( TestCompilerMacros::Test< Kokkos::Qthreads >() ) ); -#endif -} - -//---------------------------------------------------------------------------- - -TEST_F(qthreads, memory_pool) { -#if 0 - -#endif -} - -//---------------------------------------------------------------------------- - -#if defined(KOKKOS_ENABLE_TASKDAG) - -TEST_F(qthreads, task_fib) { -#if 0 - const int N = 24 ; // 25 triggers tbd bug on Cuda/Pascal - for ( int i = 0; i < N; ++i ) { - TestTaskScheduler::TestFib< Kokkos::Qthreads >::run( i, ( i + 1 ) * ( i + 1 ) * 10000 ); - } -#endif -} - -TEST_F(qthreads, task_depend) { -#if 0 - for ( int i = 0; i < 25; ++i ) { - TestTaskScheduler::TestTaskDependence< Kokkos::Qthreads >::run( i ); - } -#endif -} - -TEST_F(qthreads, task_team) { -#if 0 - TestTaskScheduler::TestTaskTeam< Kokkos::Qthreads >::run( 1000 ); - //TestTaskScheduler::TestTaskTeamValue< Kokkos::Qthreads >::run( 1000 ); // Put back after testing. -#endif -} - -#endif // #if defined( KOKKOS_ENABLE_TASKDAG ) - -//---------------------------------------------------------------------------- - -#if defined(KOKKOS_ENABLE_DEFAULT_DEVICE_TYPE_QTHREADS) - -TEST_F(qthreads, cxx11) { -#if 0 - if ( std::is_same< Kokkos::DefaultExecutionSpace, Kokkos::Qthreads >::value ) { - ASSERT_TRUE( ( TestCXX11::Test< Kokkos::Qthreads >( 1 ) ) ); - ASSERT_TRUE( ( TestCXX11::Test< Kokkos::Qthreads >( 2 ) ) ); - ASSERT_TRUE( ( TestCXX11::Test< Kokkos::Qthreads >( 3 ) ) ); - ASSERT_TRUE( ( TestCXX11::Test< Kokkos::Qthreads >( 4 ) ) ); - } -#endif -} - -#endif - -TEST_F(qthreads, tile_layout) { -#if 0 - TestTile::test< Kokkos::Qthreads, 1, 1 >( 1, 1 ); - TestTile::test< Kokkos::Qthreads, 1, 1 >( 2, 3 ); - TestTile::test< Kokkos::Qthreads, 1, 1 >( 9, 10 ); - - TestTile::test< Kokkos::Qthreads, 2, 2 >( 1, 1 ); - TestTile::test< Kokkos::Qthreads, 2, 2 >( 2, 3 ); - TestTile::test< Kokkos::Qthreads, 2, 2 >( 4, 4 ); - TestTile::test< Kokkos::Qthreads, 2, 2 >( 9, 9 ); - - TestTile::test< Kokkos::Qthreads, 2, 4 >( 9, 9 ); - TestTile::test< Kokkos::Qthreads, 4, 2 >( 9, 9 ); - - TestTile::test< Kokkos::Qthreads, 4, 4 >( 1, 1 ); - TestTile::test< Kokkos::Qthreads, 4, 4 >( 4, 4 ); - TestTile::test< Kokkos::Qthreads, 4, 4 >( 9, 9 ); - TestTile::test< Kokkos::Qthreads, 4, 4 >( 9, 11 ); - - TestTile::test< Kokkos::Qthreads, 8, 8 >( 1, 1 ); - TestTile::test< Kokkos::Qthreads, 8, 8 >( 4, 4 ); - TestTile::test< Kokkos::Qthreads, 8, 8 >( 9, 9 ); - TestTile::test< Kokkos::Qthreads, 8, 8 >( 9, 11 ); -#endif -} - -TEST_F(qthreads, dispatch) { -#if 0 - const int repeat = 100; - for ( int i = 0; i < repeat; ++i ) { - for ( int j = 0; j < repeat; ++j ) { - Kokkos::parallel_for( Kokkos::RangePolicy< Kokkos::Qthreads >( 0, j ) - , KOKKOS_LAMBDA( int ) {} ); - } - } -#endif -} - -} // namespace Test diff --git a/lib/kokkos/core/unit_test/qthreads/TestQthreads_Reductions.cpp b/lib/kokkos/core/unit_test/qthreads/TestQthreads_Reductions.cpp deleted file mode 100644 index 9e60ad123f638c85e27bbbaa3b721c3383bf4333..0000000000000000000000000000000000000000 --- a/lib/kokkos/core/unit_test/qthreads/TestQthreads_Reductions.cpp +++ /dev/null @@ -1,157 +0,0 @@ -/* -//@HEADER -// ************************************************************************ -// -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering -// Solutions of Sandia, LLC (NTESS). -// -// Under the terms of Contract DE-NA0003525 with NTESS, -// the U.S. Government retains certain rights in this software. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Christian R. Trott (crtrott@sandia.gov) -// -// ************************************************************************ -//@HEADER -*/ - -#include - -namespace Test { - -TEST_F(qthreads, long_reduce) { -#if 0 - TestReduce< long, Kokkos::Qthreads >( 0 ); - TestReduce< long, Kokkos::Qthreads >( 1000000 ); -#endif -} - -TEST_F(qthreads, double_reduce) { -#if 0 - TestReduce< double, Kokkos::Qthreads >( 0 ); - TestReduce< double, Kokkos::Qthreads >( 1000000 ); -#endif -} - -TEST_F(qthreads, reducers) { -#if 0 - TestReducers< int, Kokkos::Qthreads >::execute_integer(); - TestReducers< size_t, Kokkos::Qthreads >::execute_integer(); - TestReducers< double, Kokkos::Qthreads >::execute_float(); - TestReducers< Kokkos::complex, Kokkos::Qthreads>::execute_basic(); -#endif -} - -TEST_F(qthreads, long_reduce_dynamic) { -#if 0 - TestReduceDynamic< long, Kokkos::Qthreads >( 0 ); - TestReduceDynamic< long, Kokkos::Qthreads >( 1000000 ); -#endif -} - -TEST_F(qthreads, double_reduce_dynamic) { -#if 0 - TestReduceDynamic< double, Kokkos::Qthreads >( 0 ); - TestReduceDynamic< double, Kokkos::Qthreads >( 1000000 ); -#endif -} - -TEST_F(qthreads, long_reduce_dynamic_view) { -#if 0 - TestReduceDynamicView< long, Kokkos::Qthreads >( 0 ); - TestReduceDynamicView< long, Kokkos::Qthreads >( 1000000 ); -#endif -} - -TEST_F(qthreads, scan) { -#if 0 - TestScan< Kokkos::Qthreads >::test_range( 1, 1000 ); - TestScan< Kokkos::Qthreads >( 0 ); - TestScan< Kokkos::Qthreads >( 100000 ); - TestScan< Kokkos::Qthreads >( 10000000 ); - Kokkos::Qthreads().fence(); -#endif -} - -TEST_F(qthreads, scan_small) { -#if 0 - typedef TestScan< Kokkos::Qthreads, Kokkos::Impl::QthreadsExecUseScanSmall > TestScanFunctor; - - for ( int i = 0; i < 1000; ++i ) { - TestScanFunctor( 10 ); - TestScanFunctor( 10000 ); - } - TestScanFunctor( 1000000 ); - TestScanFunctor( 10000000 ); - - Kokkos::Qthreads().fence(); -#endif -} - -TEST_F(qthreads, team_scan) { -#if 0 - TestScanTeam< Kokkos::Qthreads, Kokkos::Schedule >( 0 ); - TestScanTeam< Kokkos::Qthreads, Kokkos::Schedule >( 0 ); - TestScanTeam< Kokkos::Qthreads, Kokkos::Schedule >( 10 ); - TestScanTeam< Kokkos::Qthreads, Kokkos::Schedule >( 10 ); - TestScanTeam< Kokkos::Qthreads, Kokkos::Schedule >( 10000 ); - TestScanTeam< Kokkos::Qthreads, Kokkos::Schedule >( 10000 ); -#endif -} - -TEST_F(qthreads, team_long_reduce) { -#if 0 - TestReduceTeam< long, Kokkos::Qthreads, Kokkos::Schedule >( 0 ); - TestReduceTeam< long, Kokkos::Qthreads, Kokkos::Schedule >( 0 ); - TestReduceTeam< long, Kokkos::Qthreads, Kokkos::Schedule >( 3 ); - TestReduceTeam< long, Kokkos::Qthreads, Kokkos::Schedule >( 3 ); - TestReduceTeam< long, Kokkos::Qthreads, Kokkos::Schedule >( 100000 ); - TestReduceTeam< long, Kokkos::Qthreads, Kokkos::Schedule >( 100000 ); -#endif -} - -TEST_F(qthreads, team_double_reduce) { -#if 0 - TestReduceTeam< double, Kokkos::Qthreads, Kokkos::Schedule >( 0 ); - TestReduceTeam< double, Kokkos::Qthreads, Kokkos::Schedule >( 0 ); - TestReduceTeam< double, Kokkos::Qthreads, Kokkos::Schedule >( 3 ); - TestReduceTeam< double, Kokkos::Qthreads, Kokkos::Schedule >( 3 ); - TestReduceTeam< double, Kokkos::Qthreads, Kokkos::Schedule >( 100000 ); - TestReduceTeam< double, Kokkos::Qthreads, Kokkos::Schedule >( 100000 ); -#endif -} - -TEST_F(qthreads, reduction_deduction) { -#if 0 - TestCXX11::test_reduction_deduction< Kokkos::Qthreads >(); -#endif -} - -} // namespace Test diff --git a/lib/kokkos/core/unit_test/qthreads/TestQthreads_SubView_c05.cpp b/lib/kokkos/core/unit_test/qthreads/TestQthreads_SubView_c05.cpp deleted file mode 100644 index 1e6b6736621dc44ec1c08b1619ec92e0f16c0bf8..0000000000000000000000000000000000000000 --- a/lib/kokkos/core/unit_test/qthreads/TestQthreads_SubView_c05.cpp +++ /dev/null @@ -1,55 +0,0 @@ -/* -//@HEADER -// ************************************************************************ -// -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering -// Solutions of Sandia, LLC (NTESS). -// -// Under the terms of Contract DE-NA0003525 with NTESS, -// the U.S. Government retains certain rights in this software. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Christian R. Trott (crtrott@sandia.gov) -// -// ************************************************************************ -//@HEADER -*/ - -#include - -namespace Test { - -TEST_F(qthreads, view_subview_2d_from_3d_atomic) { -#if 0 - TestViewSubview::test_2d_subview_3d< Kokkos::Qthreads, Kokkos::MemoryTraits >(); -#endif -} - -} // namespace Test diff --git a/lib/kokkos/core/unit_test/qthreads/TestQthreads_SubView_c06.cpp b/lib/kokkos/core/unit_test/qthreads/TestQthreads_SubView_c06.cpp deleted file mode 100644 index b2ef924f875f04d051fe788d12400025db83056b..0000000000000000000000000000000000000000 --- a/lib/kokkos/core/unit_test/qthreads/TestQthreads_SubView_c06.cpp +++ /dev/null @@ -1,55 +0,0 @@ -/* -//@HEADER -// ************************************************************************ -// -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering -// Solutions of Sandia, LLC (NTESS). -// -// Under the terms of Contract DE-NA0003525 with NTESS, -// the U.S. Government retains certain rights in this software. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Christian R. Trott (crtrott@sandia.gov) -// -// ************************************************************************ -//@HEADER -*/ - -#include - -namespace Test { - -TEST_F(qthreads, view_subview_2d_from_3d_randomaccess) { -#if 0 - TestViewSubview::test_2d_subview_3d< Kokkos::Qthreads, Kokkos::MemoryTraits >(); -#endif -} - -} // namespace Test diff --git a/lib/kokkos/core/unit_test/qthreads/TestQthreads_SubView_c08.cpp b/lib/kokkos/core/unit_test/qthreads/TestQthreads_SubView_c08.cpp deleted file mode 100644 index 0bc591c128f9b67db57a265fbee1315d6a14ccc0..0000000000000000000000000000000000000000 --- a/lib/kokkos/core/unit_test/qthreads/TestQthreads_SubView_c08.cpp +++ /dev/null @@ -1,55 +0,0 @@ -/* -//@HEADER -// ************************************************************************ -// -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering -// Solutions of Sandia, LLC (NTESS). -// -// Under the terms of Contract DE-NA0003525 with NTESS, -// the U.S. Government retains certain rights in this software. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Christian R. Trott (crtrott@sandia.gov) -// -// ************************************************************************ -//@HEADER -*/ - -#include - -namespace Test { - -TEST_F(qthreads, view_subview_3d_from_5d_left_atomic) { -#if 0 - TestViewSubview::test_3d_subview_5d_left< Kokkos::Qthreads, Kokkos::MemoryTraits >(); -#endif -} - -} // namespace Test diff --git a/lib/kokkos/core/unit_test/qthreads/TestQthreads_SubView_c09.cpp b/lib/kokkos/core/unit_test/qthreads/TestQthreads_SubView_c09.cpp deleted file mode 100644 index 45d878fcea3d4e90acbad7893cdca72c992788c4..0000000000000000000000000000000000000000 --- a/lib/kokkos/core/unit_test/qthreads/TestQthreads_SubView_c09.cpp +++ /dev/null @@ -1,55 +0,0 @@ -/* -//@HEADER -// ************************************************************************ -// -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering -// Solutions of Sandia, LLC (NTESS). -// -// Under the terms of Contract DE-NA0003525 with NTESS, -// the U.S. Government retains certain rights in this software. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Christian R. Trott (crtrott@sandia.gov) -// -// ************************************************************************ -//@HEADER -*/ - -#include - -namespace Test { - -TEST_F(qthreads, view_subview_3d_from_5d_left_randomaccess) { -#if 0 - TestViewSubview::test_3d_subview_5d_left< Kokkos::Qthreads, Kokkos::MemoryTraits >(); -#endif -} - -} // namespace Test diff --git a/lib/kokkos/core/unit_test/qthreads/TestQthreads_SubView_c11.cpp b/lib/kokkos/core/unit_test/qthreads/TestQthreads_SubView_c11.cpp deleted file mode 100644 index 6bfd19ad65a7284a51557b4f5c3394ac89501c3b..0000000000000000000000000000000000000000 --- a/lib/kokkos/core/unit_test/qthreads/TestQthreads_SubView_c11.cpp +++ /dev/null @@ -1,55 +0,0 @@ -/* -//@HEADER -// ************************************************************************ -// -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering -// Solutions of Sandia, LLC (NTESS). -// -// Under the terms of Contract DE-NA0003525 with NTESS, -// the U.S. Government retains certain rights in this software. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Christian R. Trott (crtrott@sandia.gov) -// -// ************************************************************************ -//@HEADER -*/ - -#include - -namespace Test { - -TEST_F(qthreads, view_subview_3d_from_5d_right_atomic) { -#if 0 - TestViewSubview::test_3d_subview_5d_right< Kokkos::Qthreads, Kokkos::MemoryTraits >(); -#endif -} - -} // namespace Test diff --git a/lib/kokkos/core/unit_test/qthreads/TestQthreads_SubView_c12.cpp b/lib/kokkos/core/unit_test/qthreads/TestQthreads_SubView_c12.cpp deleted file mode 100644 index 9b6896d3eebbad2db8c434af53716b71767a0ab7..0000000000000000000000000000000000000000 --- a/lib/kokkos/core/unit_test/qthreads/TestQthreads_SubView_c12.cpp +++ /dev/null @@ -1,55 +0,0 @@ -/* -//@HEADER -// ************************************************************************ -// -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering -// Solutions of Sandia, LLC (NTESS). -// -// Under the terms of Contract DE-NA0003525 with NTESS, -// the U.S. Government retains certain rights in this software. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Christian R. Trott (crtrott@sandia.gov) -// -// ************************************************************************ -//@HEADER -*/ - -#include - -namespace Test { - -TEST_F(qthreads, view_subview_3d_from_5d_right_randomaccess) { -#if 0 - TestViewSubview::test_3d_subview_5d_right< Kokkos::Qthreads, Kokkos::MemoryTraits >(); -#endif -} - -} // namespace Test diff --git a/lib/kokkos/core/unit_test/qthreads/TestQthreads_SubView_c13.cpp b/lib/kokkos/core/unit_test/qthreads/TestQthreads_SubView_c13.cpp deleted file mode 100644 index e03190d5146c988729d44aaf5688cf700a856e33..0000000000000000000000000000000000000000 --- a/lib/kokkos/core/unit_test/qthreads/TestQthreads_SubView_c13.cpp +++ /dev/null @@ -1,55 +0,0 @@ -/* -//@HEADER -// ************************************************************************ -// -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering -// Solutions of Sandia, LLC (NTESS). -// -// Under the terms of Contract DE-NA0003525 with NTESS, -// the U.S. Government retains certain rights in this software. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Christian R. Trott (crtrott@sandia.gov) -// -// ************************************************************************ -//@HEADER -*/ - -#include - -namespace Test { - -TEST_F(qthreads, view_test_unmanaged_subview_reset) { -#if 0 - TestViewSubview::test_unmanaged_subview_reset< TEST_EXECSPACE >(); -#endif -} - -} // namespace Test diff --git a/lib/kokkos/core/unit_test/qthreads/TestQthreads_SubView_c_all.cpp b/lib/kokkos/core/unit_test/qthreads/TestQthreads_SubView_c_all.cpp deleted file mode 100644 index d8ea958a5d4911d0fa39eb34f6fc231cb1e95e1c..0000000000000000000000000000000000000000 --- a/lib/kokkos/core/unit_test/qthreads/TestQthreads_SubView_c_all.cpp +++ /dev/null @@ -1,13 +0,0 @@ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include diff --git a/lib/kokkos/core/unit_test/qthreads/TestQthreads_Team.cpp b/lib/kokkos/core/unit_test/qthreads/TestQthreads_Team.cpp deleted file mode 100644 index 6a4d9323a7148e38dd26b8c6c2a273973724091a..0000000000000000000000000000000000000000 --- a/lib/kokkos/core/unit_test/qthreads/TestQthreads_Team.cpp +++ /dev/null @@ -1,136 +0,0 @@ -/* -//@HEADER -// ************************************************************************ -// -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering -// Solutions of Sandia, LLC (NTESS). -// -// Under the terms of Contract DE-NA0003525 with NTESS, -// the U.S. Government retains certain rights in this software. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Christian R. Trott (crtrott@sandia.gov) -// -// ************************************************************************ -//@HEADER -*/ - -#include - -namespace Test { - -TEST_F(qthreads, team_tag) { -#if 0 - TestTeamPolicy< Kokkos::Qthreads, Kokkos::Schedule >::test_for( 0 ); - TestTeamPolicy< Kokkos::Qthreads, Kokkos::Schedule >::test_reduce( 0 ); - TestTeamPolicy< Kokkos::Qthreads, Kokkos::Schedule >::test_for( 0 ); - TestTeamPolicy< Kokkos::Qthreads, Kokkos::Schedule >::test_reduce( 0 ); - - TestTeamPolicy< Kokkos::Qthreads, Kokkos::Schedule >::test_for( 2 ); - TestTeamPolicy< Kokkos::Qthreads, Kokkos::Schedule >::test_reduce( 2 ); - TestTeamPolicy< Kokkos::Qthreads, Kokkos::Schedule >::test_for( 2 ); - TestTeamPolicy< Kokkos::Qthreads, Kokkos::Schedule >::test_reduce( 2 ); - - TestTeamPolicy< Kokkos::Qthreads, Kokkos::Schedule >::test_for( 1000 ); - TestTeamPolicy< Kokkos::Qthreads, Kokkos::Schedule >::test_reduce( 1000 ); - TestTeamPolicy< Kokkos::Qthreads, Kokkos::Schedule >::test_for( 1000 ); - TestTeamPolicy< Kokkos::Qthreads, Kokkos::Schedule >::test_reduce( 1000 ); -#endif -} - -TEST_F(qthreads, team_shared_request) { -#if 0 - TestSharedTeam< Kokkos::Qthreads, Kokkos::Schedule >(); - TestSharedTeam< Kokkos::Qthreads, Kokkos::Schedule >(); -#endif -} - -TEST_F(qthreads, team_scratch_request) { -#if 0 - TestScratchTeam< Kokkos::Qthreads, Kokkos::Schedule >(); - TestScratchTeam< Kokkos::Qthreads, Kokkos::Schedule >(); -#endif -} - -#if defined(KOKKOS_ENABLE_CXX11_DISPATCH_LAMBDA) -TEST_F(qthreads, team_lambda_shared_request) { -#if 0 - TestLambdaSharedTeam< Kokkos::HostSpace, Kokkos::Qthreads, Kokkos::Schedule >(); - TestLambdaSharedTeam< Kokkos::HostSpace, Kokkos::Qthreads, Kokkos::Schedule >(); -#endif -} -#endif - -TEST_F(qthreads, shmem_size) { -#if 0 - TestShmemSize< Kokkos::Qthreads >(); -#endif -} - -TEST_F(qthreads, multi_level_scratch) { -#if 0 - TestMultiLevelScratchTeam< Kokkos::Qthreads, Kokkos::Schedule >(); - TestMultiLevelScratchTeam< Kokkos::Qthreads, Kokkos::Schedule >(); -#endif -} - -TEST_F(qthreads, team_vector) { -#if 0 - ASSERT_TRUE( ( TestTeamVector::Test< Kokkos::Qthreads >( 0 ) ) ); - ASSERT_TRUE( ( TestTeamVector::Test< Kokkos::Qthreads >( 1 ) ) ); - ASSERT_TRUE( ( TestTeamVector::Test< Kokkos::Qthreads >( 2 ) ) ); - ASSERT_TRUE( ( TestTeamVector::Test< Kokkos::Qthreads >( 3 ) ) ); - ASSERT_TRUE( ( TestTeamVector::Test< Kokkos::Qthreads >( 4 ) ) ); - ASSERT_TRUE( ( TestTeamVector::Test< Kokkos::Qthreads >( 5 ) ) ); - ASSERT_TRUE( ( TestTeamVector::Test< Kokkos::Qthreads >( 6 ) ) ); - ASSERT_TRUE( ( TestTeamVector::Test< Kokkos::Qthreads >( 7 ) ) ); - ASSERT_TRUE( ( TestTeamVector::Test< Kokkos::Qthreads >( 8 ) ) ); - ASSERT_TRUE( ( TestTeamVector::Test< Kokkos::Qthreads >( 9 ) ) ); - ASSERT_TRUE( ( TestTeamVector::Test< Kokkos::Qthreads >( 10 ) ) ); -#endif -} - -#ifdef KOKKOS_COMPILER_GNU -#if (KOKKOS_COMPILER_GNU == 472) -#define SKIP_TEST -#endif -#endif - -#ifndef SKIP_TEST -TEST_F(qthreads, triple_nested_parallelism) { -#if 0 - TestTripleNestedReduce< double, Kokkos::Qthreads >( 8192, 2048, 32, 32 ); - TestTripleNestedReduce< double, Kokkos::Qthreads >( 8192, 2048, 32, 16 ); - TestTripleNestedReduce< double, Kokkos::Qthreads >( 8192, 2048, 16, 16 ); -#endif -} -#endif - -} // namespace Test diff --git a/lib/kokkos/core/unit_test/qthreads/TestQthreads_ViewAPI_a.cpp b/lib/kokkos/core/unit_test/qthreads/TestQthreads_ViewAPI_a.cpp deleted file mode 100644 index fad6473d204c2c8837ea553fe3d6c116c2122325..0000000000000000000000000000000000000000 --- a/lib/kokkos/core/unit_test/qthreads/TestQthreads_ViewAPI_a.cpp +++ /dev/null @@ -1,56 +0,0 @@ -/* -//@HEADER -// ************************************************************************ -// -// Kokkos v. 3.0 -// Copyright (2020) National Technology & Engineering -// Solutions of Sandia, LLC (NTESS). -// -// Under the terms of Contract DE-NA0003525 with NTESS, -// the U.S. Government retains certain rights in this software. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of the Corporation nor the names of the -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NTESS OR THE -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Questions? Contact Christian R. Trott (crtrott@sandia.gov) -// -// ************************************************************************ -//@HEADER -*/ - -#include - -namespace Test { - -TEST_F(qthreads, impl_view_mapping_a) { -#if 0 - test_view_mapping< Kokkos::Qthreads >(); - test_view_mapping_operator< Kokkos::Qthreads >(); -#endif -} - -} // namespace Test diff --git a/lib/kokkos/containers/unit_tests/serial/TestSerial_BitSet.cpp b/lib/kokkos/core/unit_test/serial/TestSerial_Concepts.cpp similarity index 98% rename from lib/kokkos/containers/unit_tests/serial/TestSerial_BitSet.cpp rename to lib/kokkos/core/unit_test/serial/TestSerial_Concepts.cpp index 322e88a6af9d700854a46be8c18d6984e97c30a1..aa2c1577ce2016f72bdcc4c53a99a62c4ba75451 100644 --- a/lib/kokkos/containers/unit_tests/serial/TestSerial_BitSet.cpp +++ b/lib/kokkos/core/unit_test/serial/TestSerial_Concepts.cpp @@ -1,4 +1,3 @@ - /* //@HEADER // ************************************************************************ @@ -44,4 +43,4 @@ */ #include -#include +#include diff --git a/lib/kokkos/containers/unit_tests/serial/TestSerial_DualView.cpp b/lib/kokkos/core/unit_test/serial/TestSerial_RangePolicyRequire.cpp similarity index 98% rename from lib/kokkos/containers/unit_tests/serial/TestSerial_DualView.cpp rename to lib/kokkos/core/unit_test/serial/TestSerial_RangePolicyRequire.cpp index c1646ed13ba6c215017aec202acf091cacf02353..dcc77054d6dbb573a1edb879f69992102791df48 100644 --- a/lib/kokkos/containers/unit_tests/serial/TestSerial_DualView.cpp +++ b/lib/kokkos/core/unit_test/serial/TestSerial_RangePolicyRequire.cpp @@ -44,4 +44,4 @@ */ #include -#include +#include diff --git a/lib/kokkos/core/unit_test/serial/TestSerial_Team.cpp b/lib/kokkos/core/unit_test/serial/TestSerial_Team.cpp index e85ea86f3f68a2d372d25ad8b777f890d18750cc..1ee69468105e86c3861a80cd1ddca595fe8fef20 100644 --- a/lib/kokkos/core/unit_test/serial/TestSerial_Team.cpp +++ b/lib/kokkos/core/unit_test/serial/TestSerial_Team.cpp @@ -79,26 +79,87 @@ TEST(TEST_CATEGORY, team_reduce) { Kokkos::Schedule >::test_reduce(1000); } -TEST(TEST_CATEGORY, team_broadcast) { - TestTeamBroadcast >::test_teambroadcast(0); - TestTeamBroadcast >::test_teambroadcast(0); - - TestTeamBroadcast >::test_teambroadcast(2); - TestTeamBroadcast >::test_teambroadcast(2); - - TestTeamBroadcast >::test_teambroadcast(16); - TestTeamBroadcast >::test_teambroadcast(16); - - TestTeamBroadcast >:: - test_teambroadcast(1000); - TestTeamBroadcast >:: - test_teambroadcast(1000); +TEST(TEST_CATEGORY, team_broadcast_long) { + TestTeamBroadcast, + long>::test_teambroadcast(0, 1); + TestTeamBroadcast, + long>::test_teambroadcast(0, 1); + + TestTeamBroadcast, + long>::test_teambroadcast(2, 1); + TestTeamBroadcast, + long>::test_teambroadcast(2, 1); + + TestTeamBroadcast, + long>::test_teambroadcast(16, 1); + TestTeamBroadcast, + long>::test_teambroadcast(16, 1); + + TestTeamBroadcast, + long>::test_teambroadcast(1000, 1); + TestTeamBroadcast, + long>::test_teambroadcast(1000, 1); +} + +TEST(TEST_CATEGORY, team_broadcast_char) { + TestTeamBroadcast, + unsigned char>::test_teambroadcast(0, 1); + TestTeamBroadcast, + unsigned char>::test_teambroadcast(0, 1); + + TestTeamBroadcast, + unsigned char>::test_teambroadcast(2, 1); + TestTeamBroadcast, + unsigned char>::test_teambroadcast(2, 1); + + TestTeamBroadcast, + unsigned char>::test_teambroadcast(16, 1); + TestTeamBroadcast, + unsigned char>::test_teambroadcast(16, 1); +} + +TEST(TEST_CATEGORY, team_broadcast_float) { + TestTeamBroadcast, + float>::test_teambroadcast(0, 1.3); + TestTeamBroadcast, + float>::test_teambroadcast(0, 1.3); + + TestTeamBroadcast, + float>::test_teambroadcast(2, 1.3); + TestTeamBroadcast, + float>::test_teambroadcast(2, 1.3); + + TestTeamBroadcast, + float>::test_teambroadcast(16, 1.3); + TestTeamBroadcast, + float>::test_teambroadcast(16, 1.3); + + TestTeamBroadcast, + float>::test_teambroadcast(1000, 1.3); + TestTeamBroadcast, + float>::test_teambroadcast(1000, 1.3); +} + +TEST(TEST_CATEGORY, team_broadcast_double) { + TestTeamBroadcast, + double>::test_teambroadcast(0, 1.3); + TestTeamBroadcast, + double>::test_teambroadcast(0, 1.3); + + TestTeamBroadcast, + double>::test_teambroadcast(2, 1.3); + TestTeamBroadcast, + double>::test_teambroadcast(2, 1.3); + + TestTeamBroadcast, + double>::test_teambroadcast(16, 1.3); + TestTeamBroadcast, + double>::test_teambroadcast(16, 1.3); + + TestTeamBroadcast, + double>::test_teambroadcast(1000, 1.3); + TestTeamBroadcast, + double>::test_teambroadcast(1000, 1.3); } } // namespace Test diff --git a/lib/kokkos/core/unit_test/serial/TestSerial_TeamScratch.cpp b/lib/kokkos/core/unit_test/serial/TestSerial_TeamScratch.cpp index e70b3e34d61e6c474bd3a4f0a5c73c1155445a29..5d10c0c5e9a06c0a17b84618e3ab51c8c2cabc02 100644 --- a/lib/kokkos/core/unit_test/serial/TestSerial_TeamScratch.cpp +++ b/lib/kokkos/core/unit_test/serial/TestSerial_TeamScratch.cpp @@ -58,7 +58,6 @@ TEST(TEST_CATEGORY, team_scratch_request) { } #if defined(KOKKOS_ENABLE_CXX11_DISPATCH_LAMBDA) -#if !defined(KOKKOS_ENABLE_CUDA) || (8000 <= CUDA_VERSION) TEST(TEST_CATEGORY, team_lambda_shared_request) { TestLambdaSharedTeam >(); @@ -68,7 +67,6 @@ TEST(TEST_CATEGORY, team_lambda_shared_request) { TEST(TEST_CATEGORY, scratch_align) { TestScratchAlignment(); } #endif -#endif TEST(TEST_CATEGORY, shmem_size) { TestShmemSize(); } diff --git a/lib/kokkos/core/unit_test/standalone/Makefile b/lib/kokkos/core/unit_test/standalone/Makefile index c910cc5fd182a4861fa3c73b18ef4f2fc43ef44e..d60422233d69b51761335caf9c53a1860416aa42 100644 --- a/lib/kokkos/core/unit_test/standalone/Makefile +++ b/lib/kokkos/core/unit_test/standalone/Makefile @@ -9,7 +9,6 @@ ifndef KOKKOS_PATH endif SRC = $(wildcard $(MAKEFILE_PATH)*.cpp) -SRC += $(MAKEFILE_PATH)/../TestStackTrace.cpp HEADERS = $(wildcard $(MAKEFILE_PATH)*.hpp) HEADERS = $(wildcard $(MAKEFILE_PATH)/../*.hpp) @@ -42,7 +41,7 @@ include $(KOKKOS_PATH)/Makefile.kokkos build: $(EXE) $(EXE): $(OBJ) $(KOKKOS_LINK_DEPENDS) gtest-all.o - $(LINK) $(KOKKOS_LDFLAGS) $(LINKFLAGS) $(EXTRA_PATH) $(OBJ) $(KOKKOS_LIBS) $(LIB) gtest-all.o -o $(EXE) + $(LINK) $(KOKKOS_LDFLAGS) $(LINKFLAGS) $(EXTRA_PATH) $(OBJ) $(KOKKOS_LIBS) $(LIB) gtest-all.o -lpthread -o $(EXE) clean: kokkos-clean rm -f *.o *.cuda *.host diff --git a/lib/kokkos/core/unit_test/standalone/UnitTestMainInit.cpp b/lib/kokkos/core/unit_test/standalone/UnitTestMainInit.cpp index 8f8bac7b23cff25099dc0b2c29f58dc53faecc73..c5d4a36677efd58be2ad3b03873efec225b5be0f 100644 --- a/lib/kokkos/core/unit_test/standalone/UnitTestMainInit.cpp +++ b/lib/kokkos/core/unit_test/standalone/UnitTestMainInit.cpp @@ -62,12 +62,15 @@ #ifdef KOKKOS_ENABLE_HPX #include #endif +#ifdef KOKKOS_ENABLE_OPENMPTARGET +#include +#endif #ifndef TEST_EXECSPACE #ifdef KOKKOS_ENABLE_SERIAL #include #endif #endif -#include +#include int main(int argc, char *argv[]) { Kokkos::initialize(argc, argv); diff --git a/lib/kokkos/containers/unit_tests/threads/TestThreads_BitSet.cpp b/lib/kokkos/core/unit_test/threads/TestThreads_Concepts.cpp similarity index 98% rename from lib/kokkos/containers/unit_tests/threads/TestThreads_BitSet.cpp rename to lib/kokkos/core/unit_test/threads/TestThreads_Concepts.cpp index ec93bb121cf94bb5256258e42305267f436a904c..ed2d61ed3be680ad8c82d4e67642cbcbead3fb75 100644 --- a/lib/kokkos/containers/unit_tests/threads/TestThreads_BitSet.cpp +++ b/lib/kokkos/core/unit_test/threads/TestThreads_Concepts.cpp @@ -1,4 +1,3 @@ - /* //@HEADER // ************************************************************************ @@ -44,4 +43,4 @@ */ #include -#include +#include diff --git a/lib/kokkos/containers/unit_tests/threads/TestThreads_DualView.cpp b/lib/kokkos/core/unit_test/threads/TestThreads_RangePolicyRequire.cpp similarity index 98% rename from lib/kokkos/containers/unit_tests/threads/TestThreads_DualView.cpp rename to lib/kokkos/core/unit_test/threads/TestThreads_RangePolicyRequire.cpp index f6967bf0d4e1d2e4f8a12b628ec1f66e15e518e1..7a10b82658544caa091e9568587fa8718f229d7b 100644 --- a/lib/kokkos/containers/unit_tests/threads/TestThreads_DualView.cpp +++ b/lib/kokkos/core/unit_test/threads/TestThreads_RangePolicyRequire.cpp @@ -44,4 +44,4 @@ */ #include -#include +#include diff --git a/lib/kokkos/core/unit_test/threads/TestThreads_Team.cpp b/lib/kokkos/core/unit_test/threads/TestThreads_Team.cpp index b931c5cb61a84984d917dc91d5e0d960c8756b13..5d2e360734247e5dfd65c9ce07aeae68730fd10c 100644 --- a/lib/kokkos/core/unit_test/threads/TestThreads_Team.cpp +++ b/lib/kokkos/core/unit_test/threads/TestThreads_Team.cpp @@ -80,25 +80,25 @@ TEST(TEST_CATEGORY, team_reduce) { } TEST(TEST_CATEGORY, team_broadcast) { - TestTeamBroadcast >::test_teambroadcast(0); - TestTeamBroadcast >::test_teambroadcast(0); + TestTeamBroadcast, + long>::test_teambroadcast(0, 1); + TestTeamBroadcast, + long>::test_teambroadcast(0, 1); - TestTeamBroadcast >::test_teambroadcast(2); - TestTeamBroadcast >::test_teambroadcast(2); + TestTeamBroadcast, + long>::test_teambroadcast(2, 1); + TestTeamBroadcast, + long>::test_teambroadcast(2, 1); - TestTeamBroadcast >::test_teambroadcast(16); - TestTeamBroadcast >::test_teambroadcast(16); + TestTeamBroadcast, + long>::test_teambroadcast(16, 1); + TestTeamBroadcast, + long>::test_teambroadcast(16, 1); - TestTeamBroadcast >:: - test_teambroadcast(1000); - TestTeamBroadcast >:: - test_teambroadcast(1000); + TestTeamBroadcast, + long>::test_teambroadcast(1000, 1); + TestTeamBroadcast, + long>::test_teambroadcast(1000, 1); } } // namespace Test diff --git a/lib/kokkos/core/unit_test/threads/TestThreads_TeamScratch.cpp b/lib/kokkos/core/unit_test/threads/TestThreads_TeamScratch.cpp index d793a9050fd0023f42a71b2d9626b7d20de22568..a37369fc049226bdcd619b366436f0e79ff6f198 100644 --- a/lib/kokkos/core/unit_test/threads/TestThreads_TeamScratch.cpp +++ b/lib/kokkos/core/unit_test/threads/TestThreads_TeamScratch.cpp @@ -58,7 +58,6 @@ TEST(TEST_CATEGORY, team_scratch_request) { } #if defined(KOKKOS_ENABLE_CXX11_DISPATCH_LAMBDA) -#if !defined(KOKKOS_ENABLE_CUDA) || (8000 <= CUDA_VERSION) TEST(TEST_CATEGORY, team_lambda_shared_request) { TestLambdaSharedTeam >(); @@ -68,7 +67,6 @@ TEST(TEST_CATEGORY, team_lambda_shared_request) { TEST(TEST_CATEGORY, scratch_align) { TestScratchAlignment(); } #endif -#endif TEST(TEST_CATEGORY, shmem_size) { TestShmemSize(); } diff --git a/lib/kokkos/example/CMakeLists.txt b/lib/kokkos/example/CMakeLists.txt index c7d60995463701f1df28c36e7cc40f15ea507e5f..34157329d09b349debe094768d85a36b9f932cc5 100644 --- a/lib/kokkos/example/CMakeLists.txt +++ b/lib/kokkos/example/CMakeLists.txt @@ -2,19 +2,11 @@ # Subpackage name must match what appears in kokkos/cmake/Dependencies.cmake # -#KOKKOS_SUBPACKAGE(Example) +KOKKOS_SUBPACKAGE(Example) -#KOKKOS_ADD_EXAMPLE_DIRECTORIES(query_device) -#KOKKOS_ADD_EXAMPLE_DIRECTORIES(fixture) -#KOKKOS_ADD_EXAMPLE_DIRECTORIES(feint) -#KOKKOS_ADD_EXAMPLE_DIRECTORIES(fenl) -#KOKKOS_ADD_EXAMPLE_DIRECTORIES(multi_fem) -#KOKKOS_ADD_EXAMPLE_DIRECTORIES(md_skeleton) -#KOKKOS_ADD_EXAMPLE_DIRECTORIES(global_2_local_ids) -#KOKKOS_ADD_EXAMPLE_DIRECTORIES(grow_array) -#KOKKOS_ADD_EXAMPLE_DIRECTORIES(sort_array) -#if(NOT Kokkos_ENABLE_CUDA) -#KOKKOS_ADD_EXAMPLE_DIRECTORIES(tutorial) -#endif() -#KOKKOS_SUBPACKAGE_POSTPROCESS() +KOKKOS_ADD_EXAMPLE_DIRECTORIES(query_device) +if(NOT Kokkos_ENABLE_CUDA) + KOKKOS_ADD_EXAMPLE_DIRECTORIES(tutorial) +endif() +KOKKOS_SUBPACKAGE_POSTPROCESS() diff --git a/lib/kokkos/example/README b/lib/kokkos/example/README index ec64004842b0f254de2f1d67a9cb5c272bf15607..66860512448a25c0019b862babbbe08d7cf351cf 100644 --- a/lib/kokkos/example/README +++ b/lib/kokkos/example/README @@ -5,12 +5,5 @@ Tpetra. MANIFEST: - - common: Header files used by different examples - - feint: Unstructured finite-element method - - fixture: Some other finite-element method example - - global_2_local_ids: Example of global-to-local index lookup - - grow_array: Parallel dynamic memory allocation - - md_skeleton: Molecular dynamics - query_device: Kokkos' HWLOC wrapper for querying device topology - - sort_array: Parallel sort - tutorial: Kokkos tutorial (START HERE) diff --git a/lib/kokkos/example/build_cmake_in_tree/cmake_example.cpp b/lib/kokkos/example/build_cmake_in_tree/cmake_example.cpp index c6bbaeca8181a9d02edffd5b68df88677352a7a6..63875d013f8819883725def3068d8b17e108deb4 100644 --- a/lib/kokkos/example/build_cmake_in_tree/cmake_example.cpp +++ b/lib/kokkos/example/build_cmake_in_tree/cmake_example.cpp @@ -57,7 +57,7 @@ int main(int argc, char* argv[]) { exit(1); } - const long n = strtol(argv[1], NULL, 10); + const long n = strtol(argv[1], nullptr, 10); printf("Number of even integers from 0 to %ld\n", n - 1); diff --git a/lib/kokkos/example/build_cmake_installed/cmake_example.cpp b/lib/kokkos/example/build_cmake_installed/cmake_example.cpp index c6bbaeca8181a9d02edffd5b68df88677352a7a6..63875d013f8819883725def3068d8b17e108deb4 100644 --- a/lib/kokkos/example/build_cmake_installed/cmake_example.cpp +++ b/lib/kokkos/example/build_cmake_installed/cmake_example.cpp @@ -57,7 +57,7 @@ int main(int argc, char* argv[]) { exit(1); } - const long n = strtol(argv[1], NULL, 10); + const long n = strtol(argv[1], nullptr, 10); printf("Number of even integers from 0 to %ld\n", n - 1); diff --git a/lib/kokkos/example/cmake/Dependencies.cmake b/lib/kokkos/example/cmake/Dependencies.cmake deleted file mode 100644 index 741db6a0c426bb8290c28275794fc19fe9d96ffc..0000000000000000000000000000000000000000 --- a/lib/kokkos/example/cmake/Dependencies.cmake +++ /dev/null @@ -1,3 +0,0 @@ -TRIBITS_PACKAGE_DEFINE_DEPENDENCIES( - TEST_OPTIONAL_TPLS CUSPARSE MKL HPX - ) diff --git a/lib/kokkos/example/query_device/query_device.cpp b/lib/kokkos/example/query_device/query_device.cpp index 0ce7fc9eca9d79b21fa20afd3b458e6fa6aa3085..a563b06b2864d5d0e855a80b836f3ef70f33f3a1 100644 --- a/lib/kokkos/example/query_device/query_device.cpp +++ b/lib/kokkos/example/query_device/query_device.cpp @@ -59,6 +59,8 @@ int main(int argc, char** argv) { std::ostringstream msg; + (void)argc; + (void)argv; #if defined(KOKKOS_ENABLE_MPI) MPI_Init(&argc, &argv); diff --git a/lib/kokkos/example/tutorial/CMakeLists.txt b/lib/kokkos/example/tutorial/CMakeLists.txt index 2d8259506a40e3d25a5d650a08414f39afc78140..fd471fa6bea712ebf64952c1eedfc8c20c597efa 100644 --- a/lib/kokkos/example/tutorial/CMakeLists.txt +++ b/lib/kokkos/example/tutorial/CMakeLists.txt @@ -8,11 +8,9 @@ KOKKOS_ADD_EXAMPLE_DIRECTORIES(06_simple_mdrangepolicy) KOKKOS_ADD_EXAMPLE_DIRECTORIES(Advanced_Views) KOKKOS_ADD_EXAMPLE_DIRECTORIES(Hierarchical_Parallelism) -IF (Kokkos_ENABLE_CXX11) - KOKKOS_ADD_EXAMPLE_DIRECTORIES(01_hello_world_lambda) - KOKKOS_ADD_EXAMPLE_DIRECTORIES(02_simple_reduce_lambda) - KOKKOS_ADD_EXAMPLE_DIRECTORIES(03_simple_view_lambda) -ENDIF () +KOKKOS_ADD_EXAMPLE_DIRECTORIES(01_hello_world_lambda) +KOKKOS_ADD_EXAMPLE_DIRECTORIES(02_simple_reduce_lambda) +KOKKOS_ADD_EXAMPLE_DIRECTORIES(03_simple_view_lambda) diff --git a/lib/kokkos/example/tutorial/README b/lib/kokkos/example/tutorial/README index 4ba0b3a5d9e15e3c58326559d7a7f30e5b51ea4c..c46ace0d1150760832899457e586f738e875c49f 100644 --- a/lib/kokkos/example/tutorial/README +++ b/lib/kokkos/example/tutorial/README @@ -2,16 +2,11 @@ Build the examples by typing in each directory: make -j 16 To specify a target device: -make openmp -j 16 -make pthreads -j 16 -make serial -j 16 -make cuda -j 16 +KOKKOS_DEVICES=OpenMP make -j 16 +KOKKOS_DEVICES=Pthread make -j 16 +KOKKOS_DEVICES=Serial make -j 16 +KOKKOS_DEVICES=Cuda make -j 16 -The lambda variants can not be build with CUDA=yes at the moment, since -CUDA does not support lambdas from the host. Some of the advanced topics try to highlight performance impacts by timing different variants of doing the same thing. -Also some of the advanced topics (in particular hierarchical parallelism) -require C++11 even with out using host side lambdas. CUDA 6.5 can be used -to compile those. diff --git a/lib/kokkos/example/virtual_functions/Makefile b/lib/kokkos/example/virtual_functions/Makefile index 06186786c27b02d9a0cf3739e7756115ce35570b..fbc54510da0f795ed2976ea7ed9e2d6a8a4774d8 100644 --- a/lib/kokkos/example/virtual_functions/Makefile +++ b/lib/kokkos/example/virtual_functions/Makefile @@ -1,5 +1,5 @@ KOKKOS_DEVICES=Cuda -KOKKOS_CUDA_OPTIONS=enable_lambda +KOKKOS_CUDA_OPTIONS=enable_lambda,rdc KOKKOS_ARCH = "SNB,Kepler35" #KOKKOS_DEVICES=OpenMP diff --git a/lib/kokkos/generate_makefile.bash b/lib/kokkos/generate_makefile.bash index 7ef477b9f20565687892702f2f50328cb8efc699..555f0b30a1a63f6c54ced217d0174b8073e011e6 100755 --- a/lib/kokkos/generate_makefile.bash +++ b/lib/kokkos/generate_makefile.bash @@ -1,6 +1,166 @@ #!/bin/bash -KOKKOS_DEVICES="" +update_kokkos_devices() { + SEARCH_TEXT="*$1*" + if [[ $KOKKOS_DEVICES == $SEARCH_TEXT ]]; then + echo kokkos devices already includes $SEARCH_TEXT + else + if [ "$KOKKOS_DEVICES" = "" ]; then + KOKKOS_DEVICES="$1" + echo reseting kokkos devices to $KOKKOS_DEVICES + else + KOKKOS_DEVICES="${KOKKOS_DEVICES},$1" + echo appending to kokkos devices $KOKKOS_DEVICES + fi + fi +} + +get_kokkos_device_list() { + KOKKOS_DEVICE_CMD= + PARSE_DEVICES_LST=$(echo $KOKKOS_DEVICES | tr "," "\n") + PARSE_DEVICES_LST=$(echo $PARSE_DEVICES_LST | tr "_" "\n") + for DEVICE_ in $PARSE_DEVICES_LST + do + UC_DEVICE=$(echo $DEVICE_ | tr "[:lower:]" "[:upper:]") + KOKKOS_DEVICE_CMD="-DKokkos_ENABLE_${UC_DEVICE}=ON ${KOKKOS_DEVICE_CMD}" + done +} + +get_kokkos_arch_list() { + KOKKOS_ARCH_CMD= + PARSE_ARCH_LST=$(echo $KOKKOS_ARCH | tr "," "\n") + for ARCH_ in $PARSE_ARCH_LST + do + UC_ARCH=$(echo $ARCH_ | tr "[:lower:]" "[:upper:]") + KOKKOS_ARCH_CMD="-DKokkos_ARCH_${UC_ARCH}=ON ${KOKKOS_ARCH_CMD}" + done +} + +get_kokkos_cuda_option_list() { + echo parsing KOKKOS_CUDA_OPTIONS=$KOKKOS_CUDA_OPTIONS + KOKKOS_CUDA_OPTION_CMD= + PARSE_CUDA_LST=$(echo $KOKKOS_CUDA_OPTIONS | tr "," "\n") + for CUDA_ in $PARSE_CUDA_LST + do + CUDA_OPT_NAME= + if [ "${CUDA_}" == "enable_lambda" ]; then + CUDA_OPT_NAME=CUDA_LAMBDA + elif [ "${CUDA_}" == "rdc" ]; then + CUDA_OPT_NAME=CUDA_RELOCATABLE_DEVICE_CODE + elif [ "${CUDA_}" == "force_uvm" ]; then + CUDA_OPT_NAME=CUDA_UVM + elif [ "${CUDA_}" == "use_ldg" ]; then + CUDA_OPT_NAME=CUDA_LDG_INTRINSIC + else + echo "${CUDA_} is not a valid cuda options..." + fi + if [ "${CUDA_OPT_NAME}" != "" ]; then + KOKKOS_CUDA_OPTION_CMD="-DKokkos_ENABLE_${CUDA_OPT_NAME}=ON ${KOKKOS_CUDA_OPTION_CMD}" + fi + done +} + +get_kokkos_option_list() { + echo parsing KOKKOS_OPTIONS=$KOKKOS_OPTIONS + KOKKOS_OPTION_CMD= + PARSE_OPTIONS_LST=$(echo $KOKKOS_OPTIONS | tr "," "\n") + for OPT_ in $PARSE_OPTIONS_LST + do + UC_OPT_=$(echo $OPT_ | tr "[:lower:]" "[:upper:]") + if [[ "$UC_OPT_" == *DISABLE* ]]; then + FLIP_OPT_=${UC_OPT_/DISABLE/ENABLE} + KOKKOS_OPTION_CMD="-DKokkos_${FLIP_OPT_}=OFF ${KOKKOS_OPTION_CMD}" + elif [[ "$UC_OPT_" == *ENABLE* ]]; then + KOKKOS_OPTION_CMD="-DKokkos_${UC_OPT_}=ON ${KOKKOS_OPTION_CMD}" + else + KOKKOS_OPTION_CMD="-DKokkos_ENABLE_${UC_OPT_}=ON ${KOKKOS_OPTION_CMD}" + fi + done +} + +display_help_text() { + + echo "Kokkos configure options:" + echo "" + echo "--kokkos-path=/Path/To/Kokkos: Path to the Kokkos root directory." + echo "--prefix=/Install/Path: Path to install the Kokkos library." + echo "" + echo "--with-cuda[=/Path/To/Cuda]: Enable Cuda and set path to Cuda Toolkit." + echo "--with-openmp: Enable OpenMP backend." + echo "--with-pthread: Enable Pthreads backend." + echo "--with-serial: Enable Serial backend." + echo "--with-devices: Explicitly add a set of backends." + echo "" + echo "--arch=[OPT]: Set target architectures. Options are:" + echo " [AMD]" + echo " AMDAVX = AMD CPU" + echo " EPYC = AMD EPYC Zen-Core CPU" + echo " [ARM]" + echo " ARMv80 = ARMv8.0 Compatible CPU" + echo " ARMv81 = ARMv8.1 Compatible CPU" + echo " ARMv8-ThunderX = ARMv8 Cavium ThunderX CPU" + echo " ARMv8-TX2 = ARMv8 Cavium ThunderX2 CPU" + echo " [IBM]" + echo " BGQ = IBM Blue Gene Q" + echo " Power7 = IBM POWER7 and POWER7+ CPUs" + echo " Power8 = IBM POWER8 CPUs" + echo " Power9 = IBM POWER9 CPUs" + echo " [Intel]" + echo " WSM = Intel Westmere CPUs" + echo " SNB = Intel Sandy/Ivy Bridge CPUs" + echo " HSW = Intel Haswell CPUs" + echo " BDW = Intel Broadwell Xeon E-class CPUs" + echo " SKX = Intel Sky Lake Xeon E-class HPC CPUs (AVX512)" + echo " [Intel Xeon Phi]" + echo " KNC = Intel Knights Corner Xeon Phi" + echo " KNL = Intel Knights Landing Xeon Phi" + echo " [NVIDIA]" + echo " Kepler30 = NVIDIA Kepler generation CC 3.0" + echo " Kepler32 = NVIDIA Kepler generation CC 3.2" + echo " Kepler35 = NVIDIA Kepler generation CC 3.5" + echo " Kepler37 = NVIDIA Kepler generation CC 3.7" + echo " Maxwell50 = NVIDIA Maxwell generation CC 5.0" + echo " Maxwell52 = NVIDIA Maxwell generation CC 5.2" + echo " Maxwell53 = NVIDIA Maxwell generation CC 5.3" + echo " Pascal60 = NVIDIA Pascal generation CC 6.0" + echo " Pascal61 = NVIDIA Pascal generation CC 6.1" + echo " Volta70 = NVIDIA Volta generation CC 7.0" + echo " Volta72 = NVIDIA Volta generation CC 7.2" + echo "" + echo "--compiler=/Path/To/Compiler Set the compiler." + echo "--debug,-dbg: Enable Debugging." + echo "--disable-tests Disable compilation of unit tests (enabled by default)" + echo "--cxxflags=[FLAGS] Overwrite CXXFLAGS for library build and test" + echo " build. This will still set certain required" + echo " flags via KOKKOS_CXXFLAGS (such as -fopenmp," + echo " --std=c++11, etc.)." + echo "--cxxstandard=[FLAGS] Overwrite KOKKOS_CXX_STANDARD for library build and test" + echo " c++11 (default), c++14, c++17, c++1y, c++1z, c++2a" + echo "--ldflags=[FLAGS] Overwrite LDFLAGS for library build and test" + echo " build. This will still set certain required" + echo " flags via KOKKOS_LDFLAGS (such as -fopenmp," + echo " -lpthread, etc.)." + echo "--with-gtest=/Path/To/Gtest: Set path to gtest. (Used in unit and performance" + echo " tests.)" + echo "--with-hwloc=/Path/To/Hwloc: Set path to hwloc library." + echo "--with-memkind=/Path/To/MemKind: Set path to memkind library." + echo "--with-options=[OPT]: Additional options to Kokkos:" + echo " compiler_warnings" + echo " aggressive_vectorization = add ivdep on loops" + echo " disable_profiling = do not compile with profiling hooks" + echo " " + echo "--with-cuda-options=[OPT]: Additional options to CUDA:" + echo " force_uvm, use_ldg, enable_lambda, rdc" + echo "--with-hpx-options=[OPT]: Additional options to HPX:" + echo " enable_async_dispatch" + echo "--gcc-toolchain=/Path/To/GccRoot: Set the gcc toolchain to use with clang (e.g. /usr)" + echo "--make-j=[NUM]: DEPRECATED: call make with appropriate" + echo " -j flag" + +} + +KOKKOS_DO_TESTS=ON +KOKKOS_DO_EXAMPLES=OFF while [[ $# > 0 ]] do @@ -17,68 +177,84 @@ do PREFIX="${key#*=}" ;; --with-cuda) - KOKKOS_DEVICES="${KOKKOS_DEVICES},Cuda" + update_kokkos_devices Cuda CUDA_PATH_NVCC=$(command -v nvcc) CUDA_PATH=${CUDA_PATH_NVCC%/bin/nvcc} ;; # Catch this before '--with-cuda*' --with-cuda-options*) - KOKKOS_CUDA_OPT="${key#*=}" + KOKKOS_CUDA_OPTIONS="${key#*=}" ;; --with-cuda*) - KOKKOS_DEVICES="${KOKKOS_DEVICES},Cuda" + update_kokkos_devices Cuda CUDA_PATH="${key#*=}" ;; --with-openmp) - KOKKOS_DEVICES="${KOKKOS_DEVICES},OpenMP" + update_kokkos_devices OpenMP ;; --with-pthread) - KOKKOS_DEVICES="${KOKKOS_DEVICES},Pthread" + update_kokkos_devices Pthread ;; --with-serial) - KOKKOS_DEVICES="${KOKKOS_DEVICES},Serial" + update_kokkos_devices Serial ;; --with-hpx-options*) KOKKOS_HPX_OPT="${key#*=}" ;; --with-hpx*) - KOKKOS_DEVICES="${KOKKOS_DEVICES},HPX" + update_kokkos_devices HPX if [ -z "$HPX_PATH" ]; then HPX_PATH="${key#*=}" fi ;; --with-devices*) DEVICES="${key#*=}" - KOKKOS_DEVICES="${KOKKOS_DEVICES},${DEVICES}" + PARSE_DEVICES=$(echo $DEVICES | tr "," "\n") + for DEVICE_ in $PARSE_DEVICES + do + update_kokkos_devices $DEVICE_ + done ;; --with-gtest*) GTEST_PATH="${key#*=}" ;; --with-hwloc*) + KOKKOS_HWLOC=ON HWLOC_PATH="${key#*=}" ;; --with-memkind*) + KOKKOS_MEMKIND=ON MEMKIND_PATH="${key#*=}" ;; --arch*) KOKKOS_ARCH="${key#*=}" ;; --cxxflags*) - CXXFLAGS="${key#*=}" + KOKKOS_CXXFLAGS="${key#*=}" + KOKKOS_CXXFLAGS=${KOKKOS_CXXFLAGS//,/ } ;; --cxxstandard*) KOKKOS_CXX_STANDARD="${key#*=}" ;; --ldflags*) - LDFLAGS="${key#*=}" + KOKKOS_LDFLAGS="${key#*=}" ;; --debug|-dbg) - KOKKOS_DEBUG=yes + KOKKOS_DEBUG=ON ;; --make-j*) echo "Warning: ${key} is deprecated" echo "Call make with appropriate -j flag" ;; + --disable-tests) + KOKKOS_DO_TESTS=OFF + ;; + --no-examples) + KOKKOS_DO_EXAMPLES=OFF + ;; + --enable-examples) + KOKKOS_DO_EXAMPLES=ON + ;; --compiler*) COMPILER="${key#*=}" CNUM=$(command -v ${COMPILER} 2>&1 >/dev/null | grep "no ${COMPILER}" | wc -l) @@ -102,87 +278,13 @@ do COMPILER=${COMPDIR}/${COMPNAME} ;; --with-options*) - KOKKOS_OPT="${key#*=}" + KOKKOS_OPTIONS="${key#*=}" ;; --gcc-toolchain*) KOKKOS_GCC_TOOLCHAIN="${key#*=}" ;; --help) - echo "Kokkos configure options:" - echo "" - echo "--kokkos-path=/Path/To/Kokkos: Path to the Kokkos root directory." - echo "--prefix=/Install/Path: Path to install the Kokkos library." - echo "" - echo "--with-cuda[=/Path/To/Cuda]: Enable Cuda and set path to Cuda Toolkit." - echo "--with-openmp: Enable OpenMP backend." - echo "--with-pthread: Enable Pthreads backend." - echo "--with-serial: Enable Serial backend." - echo "--with-devices: Explicitly add a set of backends." - echo "" - echo "--arch=[OPT]: Set target architectures. Options are:" - echo " [AMD]" - echo " AMDAVX = AMD CPU" - echo " EPYC = AMD EPYC Zen-Core CPU" - echo " [ARM]" - echo " ARMv80 = ARMv8.0 Compatible CPU" - echo " ARMv81 = ARMv8.1 Compatible CPU" - echo " ARMv8-ThunderX = ARMv8 Cavium ThunderX CPU" - echo " ARMv8-TX2 = ARMv8 Cavium ThunderX2 CPU" - echo " [IBM]" - echo " BGQ = IBM Blue Gene Q" - echo " Power7 = IBM POWER7 and POWER7+ CPUs" - echo " Power8 = IBM POWER8 CPUs" - echo " Power9 = IBM POWER9 CPUs" - echo " [Intel]" - echo " WSM = Intel Westmere CPUs" - echo " SNB = Intel Sandy/Ivy Bridge CPUs" - echo " HSW = Intel Haswell CPUs" - echo " BDW = Intel Broadwell Xeon E-class CPUs" - echo " SKX = Intel Sky Lake Xeon E-class HPC CPUs (AVX512)" - echo " [Intel Xeon Phi]" - echo " KNC = Intel Knights Corner Xeon Phi" - echo " KNL = Intel Knights Landing Xeon Phi" - echo " [NVIDIA]" - echo " Kepler30 = NVIDIA Kepler generation CC 3.0" - echo " Kepler32 = NVIDIA Kepler generation CC 3.2" - echo " Kepler35 = NVIDIA Kepler generation CC 3.5" - echo " Kepler37 = NVIDIA Kepler generation CC 3.7" - echo " Maxwell50 = NVIDIA Maxwell generation CC 5.0" - echo " Maxwell52 = NVIDIA Maxwell generation CC 5.2" - echo " Maxwell53 = NVIDIA Maxwell generation CC 5.3" - echo " Pascal60 = NVIDIA Pascal generation CC 6.0" - echo " Pascal61 = NVIDIA Pascal generation CC 6.1" - echo " Volta70 = NVIDIA Volta generation CC 7.0" - echo " Volta72 = NVIDIA Volta generation CC 7.2" - echo "" - echo "--compiler=/Path/To/Compiler Set the compiler." - echo "--debug,-dbg: Enable Debugging." - echo "--cxxflags=[FLAGS] Overwrite CXXFLAGS for library build and test" - echo " build. This will still set certain required" - echo " flags via KOKKOS_CXXFLAGS (such as -fopenmp," - echo " --std=c++11, etc.)." - echo "--cxxstandard=[FLAGS] Overwrite KOKKOS_CXX_STANDARD for library build and test" - echo " c++11 (default), c++14, c++17, c++1y, c++1z, c++2a" - echo "--ldflags=[FLAGS] Overwrite LDFLAGS for library build and test" - echo " build. This will still set certain required" - echo " flags via KOKKOS_LDFLAGS (such as -fopenmp," - echo " -lpthread, etc.)." - echo "--with-gtest=/Path/To/Gtest: Set path to gtest. (Used in unit and performance" - echo " tests.)" - echo "--with-hwloc=/Path/To/Hwloc: Set path to hwloc library." - echo "--with-memkind=/Path/To/MemKind: Set path to memkind library." - echo "--with-options=[OPT]: Additional options to Kokkos:" - echo " compiler_warnings" - echo " aggressive_vectorization = add ivdep on loops" - echo " disable_profiling = do not compile with profiling hooks" - echo " " - echo "--with-cuda-options=[OPT]: Additional options to CUDA:" - echo " force_uvm, use_ldg, enable_lambda, rdc, enable_constexpr" - echo "--with-hpx-options=[OPT]: Additional options to HPX:" - echo " enable_async_dispatch" - echo "--gcc-toolchain=/Path/To/GccRoot: Set the gcc toolchain to use with clang (e.g. /usr)" - echo "--make-j=[NUM]: DEPRECATED: call make with appropriate" - echo " -j flag" + display_help_text exit 0 ;; *) @@ -193,265 +295,79 @@ do shift done -# Remove leading ',' from KOKKOS_DEVICES. -KOKKOS_DEVICES=$(echo $KOKKOS_DEVICES | sed 's/^,//') -# If KOKKOS_PATH undefined, assume parent dir of this script is the KOKKOS_PATH. -if [ -z "$KOKKOS_PATH" ]; then - KOKKOS_PATH=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd ) +if [ "$COMPILER" == "" ]; then + COMPILER_CMD= else - # Ensure KOKKOS_PATH is abs path - KOKKOS_PATH=$( cd $KOKKOS_PATH && pwd ) -fi - -if [ "${KOKKOS_PATH}" = "${PWD}" ] || [ "${KOKKOS_PATH}" = "${PWD}/" ]; then - echo "Running generate_makefile.bash in the Kokkos root directory is not allowed" - exit -fi - -KOKKOS_SRC_PATH=${KOKKOS_PATH} - -KOKKOS_SETTINGS="KOKKOS_SRC_PATH=${KOKKOS_SRC_PATH}" - -# The double [[ ]] in the elif branch is not a typo -if [ ${#COMPILER} -gt 0 ]; then - KOKKOS_SETTINGS="${KOKKOS_SETTINGS} CXX=${COMPILER}" -elif - [ ${#COMPILER} -eq 0 ] && [[ ${KOKKOS_DEVICES} =~ .*Cuda.* ]]; then - COMPILER="${KOKKOS_PATH}/bin/nvcc_wrapper" - KOKKOS_SETTINGS="${KOKKOS_SETTINGS} CXX=${COMPILER}" -fi - -if [ ${#KOKKOS_DEVICES} -gt 0 ]; then - KOKKOS_SETTINGS="${KOKKOS_SETTINGS} KOKKOS_DEVICES=${KOKKOS_DEVICES}" -fi - -if [ ${#KOKKOS_ARCH} -gt 0 ]; then - KOKKOS_SETTINGS="${KOKKOS_SETTINGS} KOKKOS_ARCH=${KOKKOS_ARCH}" -fi - -if [ ${#KOKKOS_DEBUG} -gt 0 ]; then - KOKKOS_SETTINGS="${KOKKOS_SETTINGS} KOKKOS_DEBUG=${KOKKOS_DEBUG}" -fi - -if [ ${#CUDA_PATH} -gt 0 ]; then - KOKKOS_SETTINGS="${KOKKOS_SETTINGS} CUDA_PATH=${CUDA_PATH}" -fi - -if [ ${#CXXFLAGS} -gt 0 ]; then - KOKKOS_SETTINGS="${KOKKOS_SETTINGS} CXXFLAGS=\"${CXXFLAGS}\"" -fi - -if [ ${#KOKKOS_CXX_STANDARD} -gt 0 ]; then - KOKKOS_SETTINGS="${KOKKOS_SETTINGS} KOKKOS_CXX_STANDARD=\"${KOKKOS_CXX_STANDARD}\"" -fi - -if [ ${#LDFLAGS} -gt 0 ]; then - KOKKOS_SETTINGS="${KOKKOS_SETTINGS} LDFLAGS=\"${LDFLAGS}\"" + COMPILER_CMD=-DCMAKE_CXX_COMPILER=$COMPILER fi -if [ ${#GTEST_PATH} -gt 0 ]; then - KOKKOS_SETTINGS="${KOKKOS_SETTINGS} GTEST_PATH=${GTEST_PATH}" +if [ "$KOKKOS_DEBUG" == "ON" ]; then + KOKKOS_DEBUG_CMD=-DCMAKE_BUILD_TYPE=DEBUG else - GTEST_PATH=${KOKKOS_PATH}/tpls/gtest - KOKKOS_SETTINGS="${KOKKOS_SETTINGS} GTEST_PATH=${GTEST_PATH}" + KOKKOS_DEBUG_CMD=-DCMAKE_BUILD_TYPE=RELEASE fi -if [ ${#HWLOC_PATH} -gt 0 ]; then - KOKKOS_SETTINGS="${KOKKOS_SETTINGS} HWLOC_PATH=${HWLOC_PATH}" - KOKKOS_USE_TPLS="${KOKKOS_USE_TPLS},hwloc" +if [ "$KOKKOS_HWLOC" == "ON" ]; then + KOKKOS_HWLOC_CMD=-DKokkos_ENABLE_HWLOC=ON + if [ "$HWLOC_PATH" != "" ]; then + KOKKOS_HWLOC_PATH_CMD=-DHWLOC_ROOT=$HWLOC_PATH + fi +else + KOKKOS_HWLOC_CMD= fi -if [ ${#MEMKIND_PATH} -gt 0 ]; then - KOKKOS_SETTINGS="${KOKKOS_SETTINGS} MEMKIND_PATH=${MEMKIND_PATH}" - KOKKOS_USE_TPLS="${KOKKOS_USE_TPLS},experimental_memkind" +if [ "$KOKKOS_MEMKIND" == "ON" ]; then + KOKKOS_MEMKIND_CMD=-DKokkos_ENABLE_MEMKIND=ON + if [ "$MEMKIND_PATH" != "" ]; then + KOKKOS_MEMKIND_PATH_CMD=-DMEMKIND_ROOT=$MEMKIND_PATH + fi +else + KOKKOS_MEMKIND_CMD= fi -if [ ${#KOKKOS_USE_TPLS} -gt 0 ]; then - KOKKOS_SETTINGS="${KOKKOS_SETTINGS} KOKKOS_USE_TPLS=${KOKKOS_USE_TPLS}" +if [ ! -e ${KOKKOS_PATH}/CMakeLists.txt ]; then + if [ "${KOKKOS_PATH}" == "" ]; then + CM_SCRIPT=$0 + KOKKOS_PATH=`dirname $CM_SCRIPT` + if [ ! -e ${KOKKOS_PATH}/CMakeLists.txt ]; then + echo "${KOKKOS_PATH} repository appears to not be complete. please verify and try again" + exit 0 + fi + else + echo "KOKKOS_PATH does not appear to be set properly. please specify in location of CMakeLists.txt" + display_help_text + exit 0 + fi fi -if [ ${#HPX_PATH} -gt 0 ]; then - KOKKOS_SETTINGS="${KOKKOS_SETTINGS} HPX_PATH=${HPX_PATH}" +get_kokkos_device_list +get_kokkos_option_list +get_kokkos_arch_list +get_kokkos_cuda_option_list + +## if HPX is enabled, we need to enforce cxx standard = 14 +if [[ ${KOKKOS_DEVICE_CMD} == *Kokkos_ENABLE_HPX* ]]; then + if [ "${KOKKOS_CXX_STANDARD}" == "" ] || [ ${#KOKKOS_CXX_STANDARD} -lt 14 ]; then + echo CXX Standard must be 14 or higher for HPX to work. + KOKKOS_CXX_STANDARD=14 + fi fi -if [ ${#KOKKOS_OPT} -gt 0 ]; then - KOKKOS_SETTINGS="${KOKKOS_SETTINGS} KOKKOS_OPTIONS=${KOKKOS_OPT}" +if [ "$KOKKOS_CXX_STANDARD" == "" ]; then + STANDARD_CMD= +else + STANDARD_CMD=-DKokkos_CXX_STANDARD=${KOKKOS_CXX_STANDARD} fi -if [ ${#KOKKOS_CUDA_OPT} -gt 0 ]; then - KOKKOS_SETTINGS="${KOKKOS_SETTINGS} KOKKOS_CUDA_OPTIONS=${KOKKOS_CUDA_OPT}" -fi +if [[ ${COMPILER} == *clang* ]]; then + gcc_path=$(which g++ | awk --field-separator='/bin/g++' '{printf $1}' ) + KOKKOS_CXXFLAGS="${KOKKOS_CXXFLAGS} --gcc-toolchain=${gcc_path}" -if [ ${#KOKKOS_HPX_OPT} -gt 0 ]; then - KOKKOS_SETTINGS="${KOKKOS_SETTINGS} KOKKOS_HPX_OPTIONS=${KOKKOS_HPX_OPT}" + if [ ! "${CUDA_PATH}" == "" ]; then + KOKKOS_CXXFLAGS="${KOKKOS_CXXFLAGS} --cuda-path=${CUDA_PATH}" + fi fi - -if [ ${#KOKKOS_GCC_TOOLCHAIN} -gt 0 ]; then - KOKKOS_SETTINGS="${KOKKOS_SETTINGS} KOKKOS_INTERNAL_GCC_TOOLCHAIN=${KOKKOS_GCC_TOOLCHAIN}" -fi - -KOKKOS_SETTINGS_NO_KOKKOS_PATH="${KOKKOS_SETTINGS}" - - -gen_makefile=Makefile.kokkos -mkdir -p core -mkdir -p core/unit_test -mkdir -p core/perf_test -mkdir -p containers -mkdir -p containers/unit_tests -mkdir -p containers/performance_tests -mkdir -p algorithms -mkdir -p algorithms/unit_tests -mkdir -p algorithms/performance_tests -mkdir -p example -mkdir -p example/fixture -mkdir -p example/feint -mkdir -p example/fenl -mkdir -p example/make_buildlink -mkdir -p example/tutorial - -KOKKOS_SETTINGS="${KOKKOS_SETTINGS_NO_KOKKOS_PATH} KOKKOS_PATH=${KOKKOS_PATH}" - -# Generate subdirectory makefiles. -echo "KOKKOS_SETTINGS=${KOKKOS_SETTINGS}" > core/unit_test/Makefile -echo "" >> core/unit_test/Makefile -echo "all:" >> core/unit_test/Makefile -echo -e "\t\$(MAKE) -f ${KOKKOS_PATH}/core/unit_test/Makefile ${KOKKOS_SETTINGS}" >> core/unit_test/Makefile -echo "" >> core/unit_test/Makefile -echo "test: all" >> core/unit_test/Makefile -echo -e "\t\$(MAKE) -f ${KOKKOS_PATH}/core/unit_test/Makefile ${KOKKOS_SETTINGS} test" >> core/unit_test/Makefile -echo "" >> core/unit_test/Makefile -echo "clean:" >> core/unit_test/Makefile -echo -e "\t\$(MAKE) -f ${KOKKOS_PATH}/core/unit_test/Makefile ${KOKKOS_SETTINGS} clean" >> core/unit_test/Makefile - -echo "KOKKOS_SETTINGS=${KOKKOS_SETTINGS}" > core/perf_test/Makefile -echo "" >> core/perf_test/Makefile -echo "all:" >> core/perf_test/Makefile -echo -e "\t\$(MAKE) -f ${KOKKOS_PATH}/core/perf_test/Makefile ${KOKKOS_SETTINGS}" >> core/perf_test/Makefile -echo "" >> core/perf_test/Makefile -echo "test: all" >> core/perf_test/Makefile -echo -e "\t\$(MAKE) -f ${KOKKOS_PATH}/core/perf_test/Makefile ${KOKKOS_SETTINGS} test" >> core/perf_test/Makefile -echo "" >> core/perf_test/Makefile -echo "clean:" >> core/perf_test/Makefile -echo -e "\t\$(MAKE) -f ${KOKKOS_PATH}/core/perf_test/Makefile ${KOKKOS_SETTINGS} clean" >> core/perf_test/Makefile - -echo "KOKKOS_SETTINGS=${KOKKOS_SETTINGS}" > containers/unit_tests/Makefile -echo "" >> containers/unit_tests/Makefile -echo "all:" >> containers/unit_tests/Makefile -echo -e "\t\$(MAKE) -f ${KOKKOS_PATH}/containers/unit_tests/Makefile ${KOKKOS_SETTINGS}" >> containers/unit_tests/Makefile -echo "" >> containers/unit_tests/Makefile -echo "test: all" >> containers/unit_tests/Makefile -echo -e "\t\$(MAKE) -f ${KOKKOS_PATH}/containers/unit_tests/Makefile ${KOKKOS_SETTINGS} test" >> containers/unit_tests/Makefile -echo "" >> containers/unit_tests/Makefile -echo "clean:" >> containers/unit_tests/Makefile -echo -e "\t\$(MAKE) -f ${KOKKOS_PATH}/containers/unit_tests/Makefile ${KOKKOS_SETTINGS} clean" >> containers/unit_tests/Makefile - -echo "KOKKOS_SETTINGS=${KOKKOS_SETTINGS}" > containers/performance_tests/Makefile -echo "" >> containers/performance_tests/Makefile -echo "all:" >> containers/performance_tests/Makefile -echo -e "\t\$(MAKE) -f ${KOKKOS_PATH}/containers/performance_tests/Makefile ${KOKKOS_SETTINGS}" >> containers/performance_tests/Makefile -echo "" >> containers/performance_tests/Makefile -echo "test: all" >> containers/performance_tests/Makefile -echo -e "\t\$(MAKE) -f ${KOKKOS_PATH}/containers/performance_tests/Makefile ${KOKKOS_SETTINGS} test" >> containers/performance_tests/Makefile -echo "" >> containers/performance_tests/Makefile -echo "clean:" >> containers/performance_tests/Makefile -echo -e "\t\$(MAKE) -f ${KOKKOS_PATH}/containers/performance_tests/Makefile ${KOKKOS_SETTINGS} clean" >> containers/performance_tests/Makefile - -echo "KOKKOS_SETTINGS=${KOKKOS_SETTINGS}" > algorithms/unit_tests/Makefile -echo "" >> algorithms/unit_tests/Makefile -echo "all:" >> algorithms/unit_tests/Makefile -echo -e "\t\$(MAKE) -f ${KOKKOS_PATH}/algorithms/unit_tests/Makefile ${KOKKOS_SETTINGS}" >> algorithms/unit_tests/Makefile -echo "" >> algorithms/unit_tests/Makefile -echo "test: all" >> algorithms/unit_tests/Makefile -echo -e "\t\$(MAKE) -f ${KOKKOS_PATH}/algorithms/unit_tests/Makefile ${KOKKOS_SETTINGS} test" >> algorithms/unit_tests/Makefile -echo "" >> algorithms/unit_tests/Makefile -echo "clean:" >> algorithms/unit_tests/Makefile -echo -e "\t\$(MAKE) -f ${KOKKOS_PATH}/algorithms/unit_tests/Makefile ${KOKKOS_SETTINGS} clean" >> algorithms/unit_tests/Makefile - -echo "KOKKOS_SETTINGS=${KOKKOS_SETTINGS}" > example/fixture/Makefile -echo "" >> example/fixture/Makefile -echo "all:" >> example/fixture/Makefile -echo -e "\t\$(MAKE) -f ${KOKKOS_PATH}/example/fixture/Makefile ${KOKKOS_SETTINGS}" >> example/fixture/Makefile -echo "" >> example/fixture/Makefile -echo "test: all" >> example/fixture/Makefile -echo -e "\t\$(MAKE) -f ${KOKKOS_PATH}/example/fixture/Makefile ${KOKKOS_SETTINGS} test" >> example/fixture/Makefile -echo "" >> example/fixture/Makefile -echo "clean:" >> example/fixture/Makefile -echo -e "\t\$(MAKE) -f ${KOKKOS_PATH}/example/fixture/Makefile ${KOKKOS_SETTINGS} clean" >> example/fixture/Makefile - -echo "KOKKOS_SETTINGS=${KOKKOS_SETTINGS}" > example/feint/Makefile -echo "" >> example/feint/Makefile -echo "all:" >> example/feint/Makefile -echo -e "\t\$(MAKE) -f ${KOKKOS_PATH}/example/feint/Makefile ${KOKKOS_SETTINGS}" >> example/feint/Makefile -echo "" >> example/feint/Makefile -echo "test: all" >> example/feint/Makefile -echo -e "\t\$(MAKE) -f ${KOKKOS_PATH}/example/feint/Makefile ${KOKKOS_SETTINGS} test" >> example/feint/Makefile -echo "" >> example/feint/Makefile -echo "clean:" >> example/feint/Makefile -echo -e "\t\$(MAKE) -f ${KOKKOS_PATH}/example/feint/Makefile ${KOKKOS_SETTINGS} clean" >> example/feint/Makefile - -echo "KOKKOS_SETTINGS=${KOKKOS_SETTINGS}" > example/fenl/Makefile -echo "" >> example/fenl/Makefile -echo "all:" >> example/fenl/Makefile -echo -e "\t\$(MAKE) -f ${KOKKOS_PATH}/example/fenl/Makefile ${KOKKOS_SETTINGS}" >> example/fenl/Makefile -echo "" >> example/fenl/Makefile -echo "test: all" >> example/fenl/Makefile -echo -e "\t\$(MAKE) -f ${KOKKOS_PATH}/example/fenl/Makefile ${KOKKOS_SETTINGS} test" >> example/fenl/Makefile -echo "" >> example/fenl/Makefile -echo "clean:" >> example/fenl/Makefile -echo -e "\t\$(MAKE) -f ${KOKKOS_PATH}/example/fenl/Makefile ${KOKKOS_SETTINGS} clean" >> example/fenl/Makefile - -echo "KOKKOS_SETTINGS=${KOKKOS_SETTINGS}" > example/make_buildlink/Makefile -echo "" >> example/make_buildlink/Makefile -echo "build:" >> example/make_buildlink/Makefile -echo -e "\t\$(MAKE) -f ${KOKKOS_PATH}/example/make_buildlink/Makefile ${KOKKOS_SETTINGS} build" >> example/make_buildlink/Makefile -echo "" >> example/make_buildlink/Makefile -echo "test: build" >> example/make_buildlink/Makefile -echo -e "\t\$(MAKE) -f ${KOKKOS_PATH}/example/make_buildlink/Makefile ${KOKKOS_SETTINGS} test" >> example/make_buildlink/Makefile -echo "" >> example/make_buildlink/Makefile -echo "clean:" >> example/make_buildlink/Makefile -echo -e "\t\$(MAKE) -f ${KOKKOS_PATH}/example/make_buildlink/Makefile ${KOKKOS_SETTINGS} clean" >> example/make_buildlink/Makefile - -echo "KOKKOS_SETTINGS=${KOKKOS_SETTINGS}" > example/tutorial/Makefile -echo "" >> example/tutorial/Makefile -echo "build:" >> example/tutorial/Makefile -echo -e "\t\$(MAKE) -f ${KOKKOS_PATH}/example/tutorial/Makefile KOKKOS_SETTINGS='${KOKKOS_SETTINGS}' KOKKOS_PATH=${KOKKOS_PATH} build">> example/tutorial/Makefile -echo "" >> example/tutorial/Makefile -echo "test: build" >> example/tutorial/Makefile -echo -e "\t\$(MAKE) -f ${KOKKOS_PATH}/example/tutorial/Makefile KOKKOS_SETTINGS='${KOKKOS_SETTINGS}' KOKKOS_PATH=${KOKKOS_PATH} test" >> example/tutorial/Makefile -echo "" >> example/tutorial/Makefile -echo "clean:" >> example/tutorial/Makefile -echo -e "\t\$(MAKE) -f ${KOKKOS_PATH}/example/tutorial/Makefile KOKKOS_SETTINGS='${KOKKOS_SETTINGS}' KOKKOS_PATH=${KOKKOS_PATH} clean" >> example/tutorial/Makefile - -# Generate top level directory makefile. -echo "Generating Makefiles with options " ${KOKKOS_SETTINGS} -echo "KOKKOS_SETTINGS=${KOKKOS_SETTINGS}" > Makefile -echo "" >> Makefile -echo "build-test:" >> Makefile -echo -e "\t\$(MAKE) -C core/unit_test" >> Makefile -echo -e "\t\$(MAKE) -C core/perf_test" >> Makefile -echo -e "\t\$(MAKE) -C containers/unit_tests" >> Makefile -echo -e "\t\$(MAKE) -C containers/performance_tests" >> Makefile -echo -e "\t\$(MAKE) -C algorithms/unit_tests" >> Makefile -echo "" >> Makefile -echo "test: build-test" >> Makefile -echo -e "\t\$(MAKE) -C core/unit_test test" >> Makefile -echo -e "\t\$(MAKE) -C core/perf_test test" >> Makefile -echo -e "\t\$(MAKE) -C containers/unit_tests test" >> Makefile -echo -e "\t\$(MAKE) -C containers/performance_tests test" >> Makefile -echo -e "\t\$(MAKE) -C algorithms/unit_tests test" >> Makefile -echo "" >> Makefile -echo "unit-tests-only:" >> Makefile -echo -e "\t\$(MAKE) -C core/unit_test test" >> Makefile -echo -e "\t\$(MAKE) -C containers/unit_tests test" >> Makefile -echo -e "\t\$(MAKE) -C algorithms/unit_tests test" >> Makefile -echo "" >> Makefile - -echo "clean:" >> Makefile -echo -e "\t\$(MAKE) -C core/unit_test clean" >> Makefile -echo -e "\t\$(MAKE) -C core/perf_test clean" >> Makefile -echo -e "\t\$(MAKE) -C containers/unit_tests clean" >> Makefile -echo -e "\t\$(MAKE) -C containers/performance_tests clean" >> Makefile -echo -e "\t\$(MAKE) -C algorithms/unit_tests clean" >> Makefile - + +echo cmake $COMPILER_CMD -DCMAKE_CXX_FLAGS="${KOKKOS_CXXFLAGS}" -DCMAKE_EXE_LINKER_FLAGS="${KOKKOS_LDFLAGS}" -DCMAKE_INSTALL_PREFIX=${PREFIX} ${KOKKOS_DEVICE_CMD} ${KOKKOS_ARCH_CMD} -DKokkos_ENABLE_TESTS=${KOKKOS_DO_TESTS} -DKokkos_ENABLE_EXAMPLES=${KOKKOS_DO_EXAMPLES} ${KOKKOS_OPTION_CMD} ${KOKKOS_CUDA_OPTION_CMD} -DCMAKE_VERBOSE_MAKEFILE=ON -DCMAKE_CXX_EXTENSIONS=OFF ${STANDARD_CMD} ${KOKKOS_DEBUG_CMD} ${KOKKOS_HWLOC_CMD} ${KOKKOS_HWLOC_PATH_CMD} ${KOKKOS_MEMKIND_CMD} ${KOKKOS_MEMKIND_PATH_CMD} ${KOKKOS_PATH} +cmake $COMPILER_CMD -DCMAKE_CXX_FLAGS="${KOKKOS_CXXFLAGS//\"}" -DCMAKE_EXE_LINKER_FLAGS="${KOKKOS_LDFLAGS//\"}" -DCMAKE_INSTALL_PREFIX=${PREFIX} ${KOKKOS_DEVICE_CMD} ${KOKKOS_ARCH_CMD} -DKokkos_ENABLE_TESTS=${KOKKOS_DO_TESTS} -DKokkos_ENABLE_EXAMPLES=${KOKKOS_DO_EXAMPLES} ${KOKKOS_OPTION_CMD} ${KOKKOS_CUDA_OPTION_CMD} -DCMAKE_VERBOSE_MAKEFILE=ON -DCMAKE_CXX_EXTENSIONS=OFF ${STANDARD_CMD} ${KOKKOS_DEBUG_CMD} ${KOKKOS_HWLOC_CMD} ${KOKKOS_HWLOC_PATH_CMD} ${KOKKOS_MEMKIND_CMD} ${KOKKOS_MEMKIND_PATH_CMD} ${KOKKOS_PATH} diff --git a/lib/kokkos/gnu_generate_makefile.bash b/lib/kokkos/gnu_generate_makefile.bash new file mode 100755 index 0000000000000000000000000000000000000000..42b26bf4a4d1f5b52ecde043d519d81e8715f336 --- /dev/null +++ b/lib/kokkos/gnu_generate_makefile.bash @@ -0,0 +1,484 @@ +#!/bin/bash + +KOKKOS_DEVICES="" + +KOKKOS_DO_EXAMPLES="1" + +while [[ $# > 0 ]] +do + key="$1" + + case $key in + --kokkos-path*) + KOKKOS_PATH="${key#*=}" + ;; + --hpx-path*) + HPX_PATH="${key#*=}" + ;; + --prefix*) + PREFIX="${key#*=}" + ;; + --with-cuda) + KOKKOS_DEVICES="${KOKKOS_DEVICES},Cuda" + CUDA_PATH_NVCC=$(command -v nvcc) + CUDA_PATH=${CUDA_PATH_NVCC%/bin/nvcc} + ;; + # Catch this before '--with-cuda*' + --with-cuda-options*) + KOKKOS_CUDA_OPT="${key#*=}" + ;; + --with-cuda*) + KOKKOS_DEVICES="${KOKKOS_DEVICES},Cuda" + CUDA_PATH="${key#*=}" + ;; + --with-openmp) + KOKKOS_DEVICES="${KOKKOS_DEVICES},OpenMP" + ;; + --with-pthread) + KOKKOS_DEVICES="${KOKKOS_DEVICES},Pthread" + ;; + --with-serial) + KOKKOS_DEVICES="${KOKKOS_DEVICES},Serial" + ;; + --with-hpx-options*) + KOKKOS_HPX_OPT="${key#*=}" + ;; + --with-hpx*) + KOKKOS_DEVICES="${KOKKOS_DEVICES},HPX" + if [ -z "$HPX_PATH" ]; then + HPX_PATH="${key#*=}" + fi + ;; + --with-devices*) + DEVICES="${key#*=}" + KOKKOS_DEVICES="${KOKKOS_DEVICES},${DEVICES}" + ;; + --with-gtest*) + GTEST_PATH="${key#*=}" + ;; + --with-hwloc*) + HWLOC_PATH="${key#*=}" + ;; + --with-memkind*) + MEMKIND_PATH="${key#*=}" + ;; + --arch*) + KOKKOS_ARCH="${key#*=}" + ;; + --cxxflags*) + CXXFLAGS="${key#*=}" + ;; + --cxxstandard*) + KOKKOS_CXX_STANDARD="${key#*=}" + ;; + --ldflags*) + LDFLAGS="${key#*=}" + ;; + --debug|-dbg) + KOKKOS_DEBUG=yes + ;; + --make-j*) + echo "Warning: ${key} is deprecated" + echo "Call make with appropriate -j flag" + ;; + --no-examples) + KOKKOS_DO_EXAMPLES="0" + ;; + --compiler*) + COMPILER="${key#*=}" + CNUM=$(command -v ${COMPILER} 2>&1 >/dev/null | grep "no ${COMPILER}" | wc -l) + if [ ${CNUM} -gt 0 ]; then + echo "Invalid compiler by --compiler command: '${COMPILER}'" + exit + fi + if [[ ! -n ${COMPILER} ]]; then + echo "Empty compiler specified by --compiler command." + exit + fi + CNUM=$(command -v ${COMPILER} | grep ${COMPILER} | wc -l) + if [ ${CNUM} -eq 0 ]; then + echo "Invalid compiler by --compiler command: '${COMPILER}'" + exit + fi + # ... valid compiler, ensure absolute path set + WCOMPATH=$(command -v $COMPILER) + COMPDIR=$(dirname $WCOMPATH) + COMPNAME=$(basename $WCOMPATH) + COMPILER=${COMPDIR}/${COMPNAME} + ;; + --with-options*) + KOKKOS_OPT="${key#*=}" + ;; + --gcc-toolchain*) + KOKKOS_GCC_TOOLCHAIN="${key#*=}" + ;; + --help) + echo "Kokkos configure options:" + echo "" + echo "--kokkos-path=/Path/To/Kokkos: Path to the Kokkos root directory." + echo "--prefix=/Install/Path: Path to install the Kokkos library." + echo "" + echo "--with-cuda[=/Path/To/Cuda]: Enable Cuda and set path to Cuda Toolkit." + echo "--with-openmp: Enable OpenMP backend." + echo "--with-pthread: Enable Pthreads backend." + echo "--with-serial: Enable Serial backend." + echo "--with-devices: Explicitly add a set of backends." + echo "" + echo "--arch=[OPT]: Set target architectures. Options are:" + echo " [AMD]" + echo " AMDAVX = AMD CPU" + echo " EPYC = AMD EPYC Zen-Core CPU" + echo " [ARM]" + echo " ARMv80 = ARMv8.0 Compatible CPU" + echo " ARMv81 = ARMv8.1 Compatible CPU" + echo " ARMv8-ThunderX = ARMv8 Cavium ThunderX CPU" + echo " ARMv8-TX2 = ARMv8 Cavium ThunderX2 CPU" + echo " [IBM]" + echo " BGQ = IBM Blue Gene Q" + echo " Power7 = IBM POWER7 and POWER7+ CPUs" + echo " Power8 = IBM POWER8 CPUs" + echo " Power9 = IBM POWER9 CPUs" + echo " [Intel]" + echo " WSM = Intel Westmere CPUs" + echo " SNB = Intel Sandy/Ivy Bridge CPUs" + echo " HSW = Intel Haswell CPUs" + echo " BDW = Intel Broadwell Xeon E-class CPUs" + echo " SKX = Intel Sky Lake Xeon E-class HPC CPUs (AVX512)" + echo " [Intel Xeon Phi]" + echo " KNC = Intel Knights Corner Xeon Phi" + echo " KNL = Intel Knights Landing Xeon Phi" + echo " [NVIDIA]" + echo " Kepler30 = NVIDIA Kepler generation CC 3.0" + echo " Kepler32 = NVIDIA Kepler generation CC 3.2" + echo " Kepler35 = NVIDIA Kepler generation CC 3.5" + echo " Kepler37 = NVIDIA Kepler generation CC 3.7" + echo " Maxwell50 = NVIDIA Maxwell generation CC 5.0" + echo " Maxwell52 = NVIDIA Maxwell generation CC 5.2" + echo " Maxwell53 = NVIDIA Maxwell generation CC 5.3" + echo " Pascal60 = NVIDIA Pascal generation CC 6.0" + echo " Pascal61 = NVIDIA Pascal generation CC 6.1" + echo " Volta70 = NVIDIA Volta generation CC 7.0" + echo " Volta72 = NVIDIA Volta generation CC 7.2" + echo "" + echo "--compiler=/Path/To/Compiler Set the compiler." + echo "--debug,-dbg: Enable Debugging." + echo "--cxxflags=[FLAGS] Overwrite CXXFLAGS for library build and test" + echo " build. This will still set certain required" + echo " flags via KOKKOS_CXXFLAGS (such as -fopenmp," + echo " --std=c++11, etc.)." + echo "--cxxstandard=[FLAGS] Overwrite KOKKOS_CXX_STANDARD for library build and test" + echo " c++11 (default), c++14, c++17, c++1y, c++1z, c++2a" + echo "--ldflags=[FLAGS] Overwrite LDFLAGS for library build and test" + echo " build. This will still set certain required" + echo " flags via KOKKOS_LDFLAGS (such as -fopenmp," + echo " -lpthread, etc.)." + echo "--with-gtest=/Path/To/Gtest: Set path to gtest. (Used in unit and performance" + echo " tests.)" + echo "--with-hwloc=/Path/To/Hwloc: Set path to hwloc library." + echo "--with-memkind=/Path/To/MemKind: Set path to memkind library." + echo "--with-options=[OPT]: Additional options to Kokkos:" + echo " compiler_warnings" + echo " aggressive_vectorization = add ivdep on loops" + echo " disable_profiling = do not compile with profiling hooks" + echo " " + echo "--with-cuda-options=[OPT]: Additional options to CUDA:" + echo " force_uvm, use_ldg, enable_lambda, rdc, enable_constexpr" + echo "--with-hpx-options=[OPT]: Additional options to HPX:" + echo " enable_async_dispatch" + echo "--gcc-toolchain=/Path/To/GccRoot: Set the gcc toolchain to use with clang (e.g. /usr)" + echo "--make-j=[NUM]: DEPRECATED: call make with appropriate" + echo " -j flag" + exit 0 + ;; + *) + echo "warning: ignoring unknown option $key" + ;; + esac + + shift +done + +# Remove leading ',' from KOKKOS_DEVICES. +KOKKOS_DEVICES=$(echo $KOKKOS_DEVICES | sed 's/^,//') + +# If KOKKOS_PATH undefined, assume parent dir of this script is the KOKKOS_PATH. +if [ -z "$KOKKOS_PATH" ]; then + KOKKOS_PATH=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd ) +else + # Ensure KOKKOS_PATH is abs path + KOKKOS_PATH=$( cd $KOKKOS_PATH && pwd ) +fi + +if [ "${KOKKOS_PATH}" = "${PWD}" ] || [ "${KOKKOS_PATH}" = "${PWD}/" ]; then + echo "Running generate_makefile.bash in the Kokkos root directory is not allowed" + exit +fi + +KOKKOS_SRC_PATH=${KOKKOS_PATH} + +KOKKOS_SETTINGS="KOKKOS_SRC_PATH=${KOKKOS_SRC_PATH}" + +# The double [[ ]] in the elif branch is not a typo +if [ ${#COMPILER} -gt 0 ]; then + KOKKOS_SETTINGS="${KOKKOS_SETTINGS} CXX=${COMPILER}" +elif + [ ${#COMPILER} -eq 0 ] && [[ ${KOKKOS_DEVICES} =~ .*Cuda.* ]]; then + COMPILER="${KOKKOS_PATH}/bin/nvcc_wrapper" + KOKKOS_SETTINGS="${KOKKOS_SETTINGS} CXX=${COMPILER}" +fi + +if [ ${#KOKKOS_DEVICES} -gt 0 ]; then + KOKKOS_SETTINGS="${KOKKOS_SETTINGS} KOKKOS_DEVICES=${KOKKOS_DEVICES}" +fi + +if [ ${#KOKKOS_ARCH} -gt 0 ]; then + KOKKOS_SETTINGS="${KOKKOS_SETTINGS} KOKKOS_ARCH=${KOKKOS_ARCH}" +fi + +if [ ${#KOKKOS_DEBUG} -gt 0 ]; then + KOKKOS_SETTINGS="${KOKKOS_SETTINGS} KOKKOS_DEBUG=${KOKKOS_DEBUG}" +fi + +if [ ${#CUDA_PATH} -gt 0 ]; then + KOKKOS_SETTINGS="${KOKKOS_SETTINGS} CUDA_PATH=${CUDA_PATH}" +fi + +if [ ${#CXXFLAGS} -gt 0 ]; then + KOKKOS_SETTINGS="${KOKKOS_SETTINGS} CXXFLAGS=\"${CXXFLAGS}\"" +fi + +if [ ${#KOKKOS_CXX_STANDARD} -gt 0 ]; then + KOKKOS_SETTINGS="${KOKKOS_SETTINGS} KOKKOS_CXX_STANDARD=\"${KOKKOS_CXX_STANDARD}\"" +fi + +if [ ${#LDFLAGS} -gt 0 ]; then + KOKKOS_SETTINGS="${KOKKOS_SETTINGS} LDFLAGS=\"${LDFLAGS}\"" +fi + +if [ ${#GTEST_PATH} -gt 0 ]; then + KOKKOS_SETTINGS="${KOKKOS_SETTINGS} GTEST_PATH=${GTEST_PATH}" +else + GTEST_PATH=${KOKKOS_PATH}/tpls/gtest + KOKKOS_SETTINGS="${KOKKOS_SETTINGS} GTEST_PATH=${GTEST_PATH}" +fi + +if [ ${#HWLOC_PATH} -gt 0 ]; then + KOKKOS_SETTINGS="${KOKKOS_SETTINGS} HWLOC_PATH=${HWLOC_PATH}" + KOKKOS_USE_TPLS="${KOKKOS_USE_TPLS},hwloc" +fi + +if [ ${#MEMKIND_PATH} -gt 0 ]; then + KOKKOS_SETTINGS="${KOKKOS_SETTINGS} MEMKIND_PATH=${MEMKIND_PATH}" + KOKKOS_USE_TPLS="${KOKKOS_USE_TPLS},experimental_memkind" +fi + +if [ ${#KOKKOS_USE_TPLS} -gt 0 ]; then + KOKKOS_SETTINGS="${KOKKOS_SETTINGS} KOKKOS_USE_TPLS=${KOKKOS_USE_TPLS}" +fi + +if [ ${#HPX_PATH} -gt 0 ]; then + KOKKOS_SETTINGS="${KOKKOS_SETTINGS} HPX_PATH=${HPX_PATH}" +fi + +if [ ${#KOKKOS_OPT} -gt 0 ]; then + KOKKOS_SETTINGS="${KOKKOS_SETTINGS} KOKKOS_OPTIONS=${KOKKOS_OPT}" +fi + +if [ ${#KOKKOS_CUDA_OPT} -gt 0 ]; then + KOKKOS_SETTINGS="${KOKKOS_SETTINGS} KOKKOS_CUDA_OPTIONS=${KOKKOS_CUDA_OPT}" +fi + +if [ ${#KOKKOS_HPX_OPT} -gt 0 ]; then + KOKKOS_SETTINGS="${KOKKOS_SETTINGS} KOKKOS_HPX_OPTIONS=${KOKKOS_HPX_OPT}" +fi + +if [ ${#KOKKOS_GCC_TOOLCHAIN} -gt 0 ]; then + KOKKOS_SETTINGS="${KOKKOS_SETTINGS} KOKKOS_INTERNAL_GCC_TOOLCHAIN=${KOKKOS_GCC_TOOLCHAIN}" +fi + +KOKKOS_SETTINGS_NO_KOKKOS_PATH="${KOKKOS_SETTINGS}" + + +gen_makefile=Makefile.kokkos +mkdir -p core +mkdir -p core/unit_test +mkdir -p core/perf_test +mkdir -p containers +mkdir -p containers/unit_tests +mkdir -p containers/performance_tests +mkdir -p algorithms +mkdir -p algorithms/unit_tests +mkdir -p algorithms/performance_tests +mkdir -p example +mkdir -p example/fixture +mkdir -p example/feint +mkdir -p example/fenl +mkdir -p example/make_buildlink +mkdir -p example/tutorial + +KOKKOS_SETTINGS="${KOKKOS_SETTINGS_NO_KOKKOS_PATH} KOKKOS_PATH=${KOKKOS_PATH}" + +# Generate subdirectory makefiles. +echo "KOKKOS_SETTINGS=${KOKKOS_SETTINGS}" > core/unit_test/Makefile +echo "" >> core/unit_test/Makefile +echo "all:" >> core/unit_test/Makefile +echo -e "\t\$(MAKE) -f ${KOKKOS_PATH}/core/unit_test/Makefile ${KOKKOS_SETTINGS}" >> core/unit_test/Makefile +echo "" >> core/unit_test/Makefile +echo "test: all" >> core/unit_test/Makefile +echo -e "\t\$(MAKE) -f ${KOKKOS_PATH}/core/unit_test/Makefile ${KOKKOS_SETTINGS} test" >> core/unit_test/Makefile +echo "" >> core/unit_test/Makefile +echo "clean:" >> core/unit_test/Makefile +echo -e "\t\$(MAKE) -f ${KOKKOS_PATH}/core/unit_test/Makefile ${KOKKOS_SETTINGS} clean" >> core/unit_test/Makefile + +echo "KOKKOS_SETTINGS=${KOKKOS_SETTINGS}" > core/perf_test/Makefile +echo "" >> core/perf_test/Makefile +echo "all:" >> core/perf_test/Makefile +echo -e "\t\$(MAKE) -f ${KOKKOS_PATH}/core/perf_test/Makefile ${KOKKOS_SETTINGS}" >> core/perf_test/Makefile +echo "" >> core/perf_test/Makefile +echo "test: all" >> core/perf_test/Makefile +echo -e "\t\$(MAKE) -f ${KOKKOS_PATH}/core/perf_test/Makefile ${KOKKOS_SETTINGS} test" >> core/perf_test/Makefile +echo "" >> core/perf_test/Makefile +echo "clean:" >> core/perf_test/Makefile +echo -e "\t\$(MAKE) -f ${KOKKOS_PATH}/core/perf_test/Makefile ${KOKKOS_SETTINGS} clean" >> core/perf_test/Makefile + +echo "KOKKOS_SETTINGS=${KOKKOS_SETTINGS}" > containers/unit_tests/Makefile +echo "" >> containers/unit_tests/Makefile +echo "all:" >> containers/unit_tests/Makefile +echo -e "\t\$(MAKE) -f ${KOKKOS_PATH}/containers/unit_tests/Makefile ${KOKKOS_SETTINGS}" >> containers/unit_tests/Makefile +echo "" >> containers/unit_tests/Makefile +echo "test: all" >> containers/unit_tests/Makefile +echo -e "\t\$(MAKE) -f ${KOKKOS_PATH}/containers/unit_tests/Makefile ${KOKKOS_SETTINGS} test" >> containers/unit_tests/Makefile +echo "" >> containers/unit_tests/Makefile +echo "clean:" >> containers/unit_tests/Makefile +echo -e "\t\$(MAKE) -f ${KOKKOS_PATH}/containers/unit_tests/Makefile ${KOKKOS_SETTINGS} clean" >> containers/unit_tests/Makefile + +echo "KOKKOS_SETTINGS=${KOKKOS_SETTINGS}" > containers/performance_tests/Makefile +echo "" >> containers/performance_tests/Makefile +echo "all:" >> containers/performance_tests/Makefile +echo -e "\t\$(MAKE) -f ${KOKKOS_PATH}/containers/performance_tests/Makefile ${KOKKOS_SETTINGS}" >> containers/performance_tests/Makefile +echo "" >> containers/performance_tests/Makefile +echo "test: all" >> containers/performance_tests/Makefile +echo -e "\t\$(MAKE) -f ${KOKKOS_PATH}/containers/performance_tests/Makefile ${KOKKOS_SETTINGS} test" >> containers/performance_tests/Makefile +echo "" >> containers/performance_tests/Makefile +echo "clean:" >> containers/performance_tests/Makefile +echo -e "\t\$(MAKE) -f ${KOKKOS_PATH}/containers/performance_tests/Makefile ${KOKKOS_SETTINGS} clean" >> containers/performance_tests/Makefile + +echo "KOKKOS_SETTINGS=${KOKKOS_SETTINGS}" > algorithms/unit_tests/Makefile +echo "" >> algorithms/unit_tests/Makefile +echo "all:" >> algorithms/unit_tests/Makefile +echo -e "\t\$(MAKE) -f ${KOKKOS_PATH}/algorithms/unit_tests/Makefile ${KOKKOS_SETTINGS}" >> algorithms/unit_tests/Makefile +echo "" >> algorithms/unit_tests/Makefile +echo "test: all" >> algorithms/unit_tests/Makefile +echo -e "\t\$(MAKE) -f ${KOKKOS_PATH}/algorithms/unit_tests/Makefile ${KOKKOS_SETTINGS} test" >> algorithms/unit_tests/Makefile +echo "" >> algorithms/unit_tests/Makefile +echo "clean:" >> algorithms/unit_tests/Makefile +echo -e "\t\$(MAKE) -f ${KOKKOS_PATH}/algorithms/unit_tests/Makefile ${KOKKOS_SETTINGS} clean" >> algorithms/unit_tests/Makefile + +echo "KOKKOS_SETTINGS=${KOKKOS_SETTINGS}" > example/fixture/Makefile +echo "" >> example/fixture/Makefile +echo "all:" >> example/fixture/Makefile +echo -e "\t\$(MAKE) -f ${KOKKOS_PATH}/example/fixture/Makefile ${KOKKOS_SETTINGS}" >> example/fixture/Makefile +echo "" >> example/fixture/Makefile +echo "test: all" >> example/fixture/Makefile +echo -e "\t\$(MAKE) -f ${KOKKOS_PATH}/example/fixture/Makefile ${KOKKOS_SETTINGS} test" >> example/fixture/Makefile +echo "" >> example/fixture/Makefile +echo "clean:" >> example/fixture/Makefile +echo -e "\t\$(MAKE) -f ${KOKKOS_PATH}/example/fixture/Makefile ${KOKKOS_SETTINGS} clean" >> example/fixture/Makefile + +echo "KOKKOS_SETTINGS=${KOKKOS_SETTINGS}" > example/feint/Makefile +echo "" >> example/feint/Makefile +echo "all:" >> example/feint/Makefile +echo -e "\t\$(MAKE) -f ${KOKKOS_PATH}/example/feint/Makefile ${KOKKOS_SETTINGS}" >> example/feint/Makefile +echo "" >> example/feint/Makefile +echo "test: all" >> example/feint/Makefile +echo -e "\t\$(MAKE) -f ${KOKKOS_PATH}/example/feint/Makefile ${KOKKOS_SETTINGS} test" >> example/feint/Makefile +echo "" >> example/feint/Makefile +echo "clean:" >> example/feint/Makefile +echo -e "\t\$(MAKE) -f ${KOKKOS_PATH}/example/feint/Makefile ${KOKKOS_SETTINGS} clean" >> example/feint/Makefile + +echo "KOKKOS_SETTINGS=${KOKKOS_SETTINGS}" > example/fenl/Makefile +echo "" >> example/fenl/Makefile +echo "all:" >> example/fenl/Makefile +echo -e "\t\$(MAKE) -f ${KOKKOS_PATH}/example/fenl/Makefile ${KOKKOS_SETTINGS}" >> example/fenl/Makefile +echo "" >> example/fenl/Makefile +echo "test: all" >> example/fenl/Makefile +echo -e "\t\$(MAKE) -f ${KOKKOS_PATH}/example/fenl/Makefile ${KOKKOS_SETTINGS} test" >> example/fenl/Makefile +echo "" >> example/fenl/Makefile +echo "clean:" >> example/fenl/Makefile +echo -e "\t\$(MAKE) -f ${KOKKOS_PATH}/example/fenl/Makefile ${KOKKOS_SETTINGS} clean" >> example/fenl/Makefile + +echo "KOKKOS_SETTINGS=${KOKKOS_SETTINGS}" > example/make_buildlink/Makefile +echo "" >> example/make_buildlink/Makefile +echo "build:" >> example/make_buildlink/Makefile +echo -e "\t\$(MAKE) -f ${KOKKOS_PATH}/example/make_buildlink/Makefile ${KOKKOS_SETTINGS} build" >> example/make_buildlink/Makefile +echo "" >> example/make_buildlink/Makefile +echo "test: build" >> example/make_buildlink/Makefile +echo -e "\t\$(MAKE) -f ${KOKKOS_PATH}/example/make_buildlink/Makefile ${KOKKOS_SETTINGS} test" >> example/make_buildlink/Makefile +echo "" >> example/make_buildlink/Makefile +echo "clean:" >> example/make_buildlink/Makefile +echo -e "\t\$(MAKE) -f ${KOKKOS_PATH}/example/make_buildlink/Makefile ${KOKKOS_SETTINGS} clean" >> example/make_buildlink/Makefile + +echo "KOKKOS_SETTINGS=${KOKKOS_SETTINGS}" > example/tutorial/Makefile +echo "" >> example/tutorial/Makefile +echo "build:" >> example/tutorial/Makefile +echo -e "\t\$(MAKE) -f ${KOKKOS_PATH}/example/tutorial/Makefile KOKKOS_SETTINGS='${KOKKOS_SETTINGS}' KOKKOS_PATH=${KOKKOS_PATH} build">> example/tutorial/Makefile +echo "" >> example/tutorial/Makefile +echo "test: build" >> example/tutorial/Makefile +echo -e "\t\$(MAKE) -f ${KOKKOS_PATH}/example/tutorial/Makefile KOKKOS_SETTINGS='${KOKKOS_SETTINGS}' KOKKOS_PATH=${KOKKOS_PATH} test" >> example/tutorial/Makefile +echo "" >> example/tutorial/Makefile +echo "clean:" >> example/tutorial/Makefile +echo -e "\t\$(MAKE) -f ${KOKKOS_PATH}/example/tutorial/Makefile KOKKOS_SETTINGS='${KOKKOS_SETTINGS}' KOKKOS_PATH=${KOKKOS_PATH} clean" >> example/tutorial/Makefile + +# Generate top level directory makefile. +echo "Generating Makefiles with options " ${KOKKOS_SETTINGS} +echo "KOKKOS_SETTINGS=${KOKKOS_SETTINGS}" > Makefile +echo "" >> Makefile +echo "build-test:" >> Makefile +echo -e "\t\$(MAKE) -C core/unit_test" >> Makefile +echo -e "\t\$(MAKE) -C core/perf_test" >> Makefile +echo -e "\t\$(MAKE) -C containers/unit_tests" >> Makefile +echo -e "\t\$(MAKE) -C containers/performance_tests" >> Makefile +echo -e "\t\$(MAKE) -C algorithms/unit_tests" >> Makefile +if [ ${KOKKOS_DO_EXAMPLES} -gt 0 ]; then +$() +echo -e "\t\$(MAKE) -C example/fixture" >> Makefile +echo -e "\t\$(MAKE) -C example/feint" >> Makefile +echo -e "\t\$(MAKE) -C example/fenl" >> Makefile +echo -e "\t\$(MAKE) -C example/make_buildlink build" >> Makefile +echo -e "\t\$(MAKE) -C example/tutorial build" >> Makefile +fi +echo "" >> Makefile +echo "test: build-test" >> Makefile +echo -e "\t\$(MAKE) -C core/unit_test test" >> Makefile +echo -e "\t\$(MAKE) -C core/perf_test test" >> Makefile +echo -e "\t\$(MAKE) -C containers/unit_tests test" >> Makefile +echo -e "\t\$(MAKE) -C containers/performance_tests test" >> Makefile +echo -e "\t\$(MAKE) -C algorithms/unit_tests test" >> Makefile +if [ ${KOKKOS_DO_EXAMPLES} -gt 0 ]; then +echo -e "\t\$(MAKE) -C example/fixture test" >> Makefile +echo -e "\t\$(MAKE) -C example/feint test" >> Makefile +echo -e "\t\$(MAKE) -C example/fenl test" >> Makefile +echo -e "\t\$(MAKE) -C example/make_buildlink test" >> Makefile +echo -e "\t\$(MAKE) -C example/tutorial test" >> Makefile +fi +echo "" >> Makefile +echo "unit-tests-only:" >> Makefile +echo -e "\t\$(MAKE) -C core/unit_test test" >> Makefile +echo -e "\t\$(MAKE) -C containers/unit_tests test" >> Makefile +echo -e "\t\$(MAKE) -C algorithms/unit_tests test" >> Makefile +echo "" >> Makefile + +echo "clean:" >> Makefile +echo -e "\t\$(MAKE) -C core/unit_test clean" >> Makefile +echo -e "\t\$(MAKE) -C core/perf_test clean" >> Makefile +echo -e "\t\$(MAKE) -C containers/unit_tests clean" >> Makefile +echo -e "\t\$(MAKE) -C containers/performance_tests clean" >> Makefile +echo -e "\t\$(MAKE) -C algorithms/unit_tests clean" >> Makefile +if [ ${KOKKOS_DO_EXAMPLES} -gt 0 ]; then +echo -e "\t\$(MAKE) -C example/fixture clean" >> Makefile +echo -e "\t\$(MAKE) -C example/feint clean" >> Makefile +echo -e "\t\$(MAKE) -C example/fenl clean" >> Makefile +echo -e "\t\$(MAKE) -C example/make_buildlink clean" >> Makefile +echo -e "\t\$(MAKE) -C example/tutorial clean" >> Makefile +fi + diff --git a/lib/kokkos/master_history.txt b/lib/kokkos/master_history.txt index ee5238be8c999a20ca371587eb0cf7e2e858a604..11e803e76026ef9be546255ef1c5406972ca07c4 100644 --- a/lib/kokkos/master_history.txt +++ b/lib/kokkos/master_history.txt @@ -18,3 +18,5 @@ tag: 2.7.24 date: 11:04:2018 master: d3a94192 develop: 7a06fc81 tag: 2.8.00 date: 02:05:2019 master: 34931a36 develop: d1659d1d tag: 2.9.00 date: 06:24:2019 master: 5d6e7fb3 develop: 4c6cb80a tag: 3.0.00 date: 01:31:2020 master: 2983b80d release-candidate-3.0: fdc904a6 +tag: 3.1.00 date: 04:14:2020 master: cd1b1d0a develop: fd90af43 +tag: 3.1.1 date: 05:04:2020 master: 785d19f2 release: 2be028bc diff --git a/lib/latte/Install.py b/lib/latte/Install.py index 25c12aeb4077754506921b3ab050c6994d66cf55..94879ff4a063aae134bbe985e9c754c3e5683d3a 100644 --- a/lib/latte/Install.py +++ b/lib/latte/Install.py @@ -17,7 +17,7 @@ parser = ArgumentParser(prog='Install.py', # settings -version = '1.2.1' +version = '1.2.2' suffix = 'gfortran' # known checksums for different LATTE versions. used to validate the download. @@ -25,6 +25,7 @@ checksums = { \ '1.1.0' : '533635721ee222d0ed2925a18fb5b294', \ '1.2.0' : '68bf0db879da5e068a71281020239ae7', \ '1.2.1' : '85ac414fdada2d04619c8f936344df14', \ + '1.2.2' : '820e73a457ced178c08c71389a385de7', \ } # help message @@ -33,12 +34,12 @@ HELP = """ Syntax from src dir: make lib-latte args="-b" or: make lib-latte args="-p /usr/local/latte" or: make lib-latte args="-m gfortran" - or: make lib-latte args="-b -v 1.2.1" + or: make lib-latte args="-b -v 1.2.2" Syntax from lib dir: python Install.py -b or: python Install.py -p /usr/local/latte or: python Install.py -m gfortran - or: python Install.py -v 1.2.1 -b + or: python Install.py -v 1.2.2 -b Example: diff --git a/lib/message/cslib/src/STUBS_ZMQ/zmq.h b/lib/message/cslib/src/STUBS_ZMQ/zmq.h index 2f02eb4035c75cab753f430c3a31810c961d4702..a335ee5e01f43e0725a15bc03c90d977e0b02666 100644 --- a/lib/message/cslib/src/STUBS_ZMQ/zmq.h +++ b/lib/message/cslib/src/STUBS_ZMQ/zmq.h @@ -17,6 +17,8 @@ #ifndef ZMQ_DUMMY_H #define ZMQ_DUMMY_H +#include + namespace CSLIB_NS { #define ZMQ_REQ 0 diff --git a/lib/plumed/Makefile.lammps.runtime b/lib/plumed/Makefile.lammps.runtime index b8c8636940ca1dc10c4f052c5cf358310db51dc5..55801b9aea9885350f6392a62876e930edcb1fa3 100644 --- a/lib/plumed/Makefile.lammps.runtime +++ b/lib/plumed/Makefile.lammps.runtime @@ -1,5 +1,5 @@ # Settings that the LAMMPS build will import when this package library is used -plumed_SYSINC = -D__PLUMED_HAS_DLOPEN=1 -D__PLUMED_DEFAULT_KERNEL=$(PLUMED_LIBDIR)/libplumedKernel.so +plumed_SYSINC = -D__PLUMED_DEFAULT_KERNEL=$(PLUMED_LIBDIR)/libplumedKernel.so plumed_SYSLIB = $(PLUMED_LOAD) -rdynamic plumed_SYSPATH = diff --git a/lib/plumed/Makefile.lammps.runtime.macosx b/lib/plumed/Makefile.lammps.runtime.macosx index d0ae6e82a5f57e7ef3da6dba07e08ac80dbfec77..e25a1dd776070f6c402670cfb6fa63344333ad2c 100644 --- a/lib/plumed/Makefile.lammps.runtime.macosx +++ b/lib/plumed/Makefile.lammps.runtime.macosx @@ -1,5 +1,5 @@ # Settings that the LAMMPS build will import when this package library is used -plumed_SYSINC = -D__PLUMED_HAS_DLOPEN=1 -D__PLUMED_DEFAULT_KERNEL=$(PLUMED_LIBDIR)/libplumedKernel.dylib +plumed_SYSINC = -D__PLUMED_DEFAULT_KERNEL=$(PLUMED_LIBDIR)/libplumedKernel.dylib plumed_SYSLIB = $(PLUMED_LOAD) -rdynamic plumed_SYSPATH = diff --git a/lib/plumed/Makefile.lammps.static b/lib/plumed/Makefile.lammps.static index 2ca0858610e495f0626a7b85d621035a792ed98d..e670d28fa55029908c934b862c628bb04ac85cf5 100644 --- a/lib/plumed/Makefile.lammps.static +++ b/lib/plumed/Makefile.lammps.static @@ -2,6 +2,6 @@ # Use statically linked C++ interface to plumed -plumed_SYSINC = -D__PLUMED_WRAPPER_CXX=1 +plumed_SYSINC = plumed_SYSLIB = $(PLUMED_LOAD) plumed_SYSPATH = diff --git a/lib/voronoi/voro-make.patch b/lib/voronoi/voro-make.patch new file mode 100644 index 0000000000000000000000000000000000000000..f51bd086143217ffca52e190437e73be7a98000e --- /dev/null +++ b/lib/voronoi/voro-make.patch @@ -0,0 +1,30 @@ +--- src/Makefile.orig 2020-05-03 03:50:23.501557199 -0400 ++++ src/Makefile 2020-05-03 03:53:32.147681674 -0400 +@@ -10,10 +10,10 @@ + # List of the common source files + objs=cell.o common.o container.o unitcell.o v_compute.o c_loops.o \ + v_base.o wall.o pre_container.o container_prd.o +-src=$(patsubst %.o,%.cc,$(objs)) ++src=$(objs:.o=.cc) + + # Makefile rules +-all: libvoro++.a voro++ ++all: depend libvoro++.a voro++ + + depend: + $(CXX) -MM $(src) >Makefile.dep +@@ -22,12 +22,12 @@ + + libvoro++.a: $(objs) + rm -f libvoro++.a +- ar rs libvoro++.a $^ ++ $(AR) rs libvoro++.a $(objs) + + voro++: libvoro++.a cmd_line.cc + $(CXX) $(CFLAGS) -L. -o voro++ cmd_line.cc -lvoro++ + +-%.o: %.cc ++.cc.o: + $(CXX) $(CFLAGS) -c $< + + help: Doxyfile $(SOURCE) diff --git a/potentials/FeCH_BOP_I.poly b/potentials/FeCH_BOP_I.poly new file mode 100644 index 0000000000000000000000000000000000000000..87dea13df524342639e9e2cae1f6c97229b5523e --- /dev/null +++ b/potentials/FeCH_BOP_I.poly @@ -0,0 +1,33617 @@ +# DATE 2018-12-18 CONTRIBUTOR: X. W. Zhou, xzhou@sandia.gov CITATION: X. W. Zhou, +# M. E. Foster, J. A. Ronevich, and C. W San Marchi, J. Comp. Chem., 41, 1299 (2020). +# M. Muller, P. Erhart, and K. Albe, J. Phys.: Condens. Matter, 19, 326220 (2007). +# D. W. Brenner, Phys. Rev. B, 42, 9458 (1990). N. Juslin et al, J. Appl. Phys., +# 98, 123520 (2005). P. Kuopanportti et al, Comp. Mater. Sci., 111, 525 (2016). +# K. O. E. Hendriksson, and K. Nordlund, Phys. Rev. B, 79, 144107 (2009). + 3 3 + 26. 5.58500000e+01 Fe + 6. 1.20100000e+01 C + 1. 1.01000000e+00 H + 2000 2000 4000 2.00000000e+02 + 3.35000000e+00 1.00000000e+00 + 2.00000000e+00 1.00000000e+00 + 1.70000000e+00 1.00000000e+00 + 2.70000000e+00 1.00000000e+00 + 2.69660000e+00 1.00000000e+00 + 1.80000000e+00 1.00000000e+00 + 9.05461601e+06 5.36400429e+06 2.63461103e+06 1.72573643e+06 1.27196396e+06 + 1.00021130e+06 8.19451798e+05 6.90674672e+05 5.94375068e+05 5.19717409e+05 + 4.60200739e+05 4.11688423e+05 3.71423001e+05 3.37495720e+05 3.08543417e+05 + 2.83566642e+05 2.61815992e+05 2.42718557e+05 2.25828890e+05 2.10795455e+05 + 1.97337145e+05 1.85226505e+05 1.74277539e+05 1.64336688e+05 1.55276068e+05 + 1.46988336e+05 1.39382733e+05 1.32382007e+05 1.25920006e+05 1.19939754e+05 + 1.14391924e+05 1.09233599e+05 1.04427270e+05 9.99400149e+04 9.57428218e+04 + 9.18100283e+04 8.81188552e+04 8.46490156e+04 8.13823855e+04 7.83027252e+04 + 7.53954428e+04 7.26473922e+04 7.00467000e+04 6.75826165e+04 6.52453872e+04 + 6.30261416e+04 6.09167962e+04 5.89099701e+04 5.69989113e+04 5.51774319e+04 + 5.34398509e+04 5.17809444e+04 5.01959007e+04 4.86802814e+04 4.72299860e+04 + 4.58412213e+04 4.45104728e+04 4.32344809e+04 4.20102176e+04 4.08348673e+04 + 3.97058085e+04 3.86205977e+04 3.75769545e+04 3.65727491e+04 3.56059895e+04 + 3.46748114e+04 3.37774676e+04 3.29123197e+04 3.20778299e+04 3.12725529e+04 + 3.04951300e+04 2.97442821e+04 2.90188046e+04 2.83175618e+04 2.76394824e+04 + 2.69835548e+04 2.63488233e+04 2.57343842e+04 2.51393827e+04 2.45630092e+04 + 2.40044967e+04 2.34631182e+04 2.29381839e+04 2.24290391e+04 2.19350619e+04 + 2.14556614e+04 2.09902755e+04 2.05383695e+04 2.00994344e+04 1.96729855e+04 + 1.92585606e+04 1.88557194e+04 1.84640414e+04 1.80831257e+04 1.77125894e+04 + 1.73520664e+04 1.70012072e+04 1.66596774e+04 1.63271571e+04 1.60033402e+04 + 1.56879336e+04 1.53806565e+04 1.50812401e+04 1.47894263e+04 1.45049679e+04 + 1.42276276e+04 1.39571778e+04 1.36933997e+04 1.34360835e+04 1.31850274e+04 + 1.29400376e+04 1.27009275e+04 1.24675180e+04 1.22396366e+04 1.20171172e+04 + 1.17998000e+04 1.15875312e+04 1.13801624e+04 1.11775509e+04 1.09795589e+04 + 1.07860536e+04 1.05969071e+04 1.04119957e+04 1.02312003e+04 1.00544059e+04 + 9.88150120e+03 9.71237907e+03 9.54693582e+03 9.38507131e+03 9.22668873e+03 + 9.07169452e+03 8.91999818e+03 8.77151221e+03 8.62615193e+03 8.48383542e+03 + 8.34448337e+03 8.20801901e+03 8.07436802e+03 7.94345839e+03 7.81522038e+03 + 7.68958642e+03 7.56649102e+03 7.44587069e+03 7.32766388e+03 7.21181093e+03 + 7.09825393e+03 6.98693673e+03 6.87780486e+03 6.77080544e+03 6.66588714e+03 + 6.56300015e+03 6.46209609e+03 6.36312798e+03 6.26605019e+03 6.17081839e+03 + 6.07738950e+03 5.98572168e+03 5.89577424e+03 5.80750762e+03 5.72088339e+03 + 5.63586415e+03 5.55241353e+03 5.47049616e+03 5.39007764e+03 5.31112448e+03 + 5.23360410e+03 5.15748479e+03 5.08273568e+03 5.00932671e+03 4.93722863e+03 + 4.86641295e+03 4.79685190e+03 4.72851846e+03 4.66138630e+03 4.59542975e+03 + 4.53062382e+03 4.46694413e+03 4.40436693e+03 4.34286908e+03 4.28242800e+03 + 4.22302168e+03 4.16462866e+03 4.10722802e+03 4.05079934e+03 3.99532269e+03 + 3.94077867e+03 3.88714830e+03 3.83441308e+03 3.78255498e+03 3.73155636e+03 + 3.68140002e+03 3.63206918e+03 3.58354745e+03 3.53581881e+03 3.48886764e+03 + 3.44267867e+03 3.39723699e+03 3.35252804e+03 3.30853758e+03 3.26525173e+03 + 3.22265689e+03 3.18073979e+03 3.13948747e+03 3.09888724e+03 3.05892672e+03 + 3.01959379e+03 2.98087661e+03 2.94276360e+03 2.90524344e+03 2.86830507e+03 + 2.83193765e+03 2.79613060e+03 2.76087356e+03 2.72615640e+03 2.69196921e+03 + 2.65830228e+03 2.62514615e+03 2.59249151e+03 2.56032930e+03 2.52865060e+03 + 2.49744673e+03 2.46670917e+03 2.43642957e+03 2.40659978e+03 2.37721180e+03 + 2.34825782e+03 2.31973016e+03 2.29162133e+03 2.26392397e+03 2.23663090e+03 + 2.20973506e+03 2.18322956e+03 2.15710762e+03 2.13136263e+03 2.10598809e+03 + 2.08097764e+03 2.05632506e+03 2.03202423e+03 2.00806917e+03 1.98445402e+03 + 1.96117302e+03 1.93822056e+03 1.91559109e+03 1.89327921e+03 1.87127961e+03 + 1.84958709e+03 1.82819654e+03 1.80710296e+03 1.78630146e+03 1.76578720e+03 + 1.74555549e+03 1.72560169e+03 1.70592126e+03 1.68650975e+03 1.66736279e+03 + 1.64847611e+03 1.62984549e+03 1.61146682e+03 1.59333605e+03 1.57544921e+03 + 1.55780240e+03 1.54039180e+03 1.52321367e+03 1.50626431e+03 1.48954012e+03 + 1.47303755e+03 1.45675312e+03 1.44068341e+03 1.42482506e+03 1.40917478e+03 + 1.39372935e+03 1.37848557e+03 1.36344035e+03 1.34859060e+03 1.33393334e+03 + 1.31946560e+03 1.30518449e+03 1.29108716e+03 1.27717082e+03 1.26343271e+03 + 1.24987014e+03 1.23648046e+03 1.22326106e+03 1.21020939e+03 1.19732293e+03 + 1.18459921e+03 1.17203582e+03 1.15963035e+03 1.14738048e+03 1.13528390e+03 + 1.12333834e+03 1.11154159e+03 1.09989146e+03 1.08838579e+03 1.07702249e+03 + 1.06579947e+03 1.05471469e+03 1.04376616e+03 1.03295189e+03 1.02226995e+03 + 1.01171844e+03 1.00129547e+03 9.90999221e+02 9.80827866e+02 9.70779627e+02 + 9.60852753e+02 9.51045522e+02 9.41356240e+02 9.31783240e+02 9.22324884e+02 + 9.12979560e+02 9.03745682e+02 8.94621693e+02 8.85606056e+02 8.76697264e+02 + 8.67893832e+02 8.59194298e+02 8.50597227e+02 8.42101203e+02 8.33704837e+02 + 8.25406759e+02 8.17205622e+02 8.09100100e+02 8.01088890e+02 7.93170707e+02 + 7.85344289e+02 7.77608391e+02 7.69961790e+02 7.62403281e+02 7.54931679e+02 + 7.47545817e+02 7.40244545e+02 7.33026733e+02 7.25891267e+02 7.18837051e+02 + 7.11863007e+02 7.04968070e+02 6.98151197e+02 6.91411355e+02 6.84747531e+02 + 6.78158727e+02 6.71643958e+02 6.65202257e+02 6.58832668e+02 6.52534254e+02 + 6.46306089e+02 6.40147261e+02 6.34056873e+02 6.28034042e+02 6.22077896e+02 + 6.16187577e+02 6.10362242e+02 6.04601056e+02 5.98903202e+02 5.93267870e+02 + 5.87694264e+02 5.82181602e+02 5.76729110e+02 5.71336026e+02 5.66001601e+02 + 5.60725097e+02 5.55505783e+02 5.50342944e+02 5.45235871e+02 5.40183867e+02 + 5.35186247e+02 5.30242332e+02 5.25351455e+02 5.20512960e+02 5.15726197e+02 + 5.10990527e+02 5.06305322e+02 5.01669960e+02 4.97083829e+02 4.92546326e+02 + 4.88056856e+02 4.83614833e+02 4.79219679e+02 4.74870824e+02 4.70567705e+02 + 4.66309770e+02 4.62096471e+02 4.57927271e+02 4.53801637e+02 4.49719046e+02 + 4.45678982e+02 4.41680935e+02 4.37724403e+02 4.33808890e+02 4.29933908e+02 + 4.26098976e+02 4.22303617e+02 4.18547364e+02 4.14829753e+02 4.11150329e+02 + 4.07508641e+02 4.03904247e+02 4.00336708e+02 3.96805592e+02 3.93310474e+02 + 3.89850933e+02 3.86426555e+02 3.83036929e+02 3.79681654e+02 3.76360330e+02 + 3.73072565e+02 3.69817971e+02 3.66596165e+02 3.63406770e+02 3.60249413e+02 + 3.57123727e+02 3.54029350e+02 3.50965922e+02 3.47933091e+02 3.44930508e+02 + 3.41957830e+02 3.39014715e+02 3.36100830e+02 3.33215844e+02 3.30359429e+02 + 3.27531263e+02 3.24731029e+02 3.21958412e+02 3.19213102e+02 3.16494793e+02 + 3.13803184e+02 3.11137975e+02 3.08498872e+02 3.05885585e+02 3.03297826e+02 + 3.00735313e+02 2.98197764e+02 2.95684905e+02 2.93196463e+02 2.90732167e+02 + 2.88291753e+02 2.85874957e+02 2.83481521e+02 2.81111187e+02 2.78763704e+02 + 2.76438822e+02 2.74136293e+02 2.71855875e+02 2.69597327e+02 2.67360411e+02 + 2.65144894e+02 2.62950542e+02 2.60777127e+02 2.58624423e+02 2.56492207e+02 + 2.54380259e+02 2.52288359e+02 2.50216294e+02 2.48163850e+02 2.46130818e+02 + 2.44116990e+02 2.42122161e+02 2.40146129e+02 2.38188694e+02 2.36249657e+02 + 2.34328824e+02 2.32426002e+02 2.30541001e+02 2.28673631e+02 2.26823707e+02 + 2.24991045e+02 2.23175464e+02 2.21376784e+02 2.19594827e+02 2.17829418e+02 + 2.16080385e+02 2.14347555e+02 2.12630760e+02 2.10929833e+02 2.09244609e+02 + 2.07574923e+02 2.05920616e+02 2.04281526e+02 2.02657498e+02 2.01048375e+02 + 1.99454003e+02 1.97874230e+02 1.96308905e+02 1.94757881e+02 1.93221009e+02 + 1.91698145e+02 1.90189145e+02 1.88693868e+02 1.87212173e+02 1.85743920e+02 + 1.84288974e+02 1.82847199e+02 1.81418460e+02 1.80002626e+02 1.78599565e+02 + 1.77209147e+02 1.75831246e+02 1.74465733e+02 1.73112485e+02 1.71771377e+02 + 1.70442287e+02 1.69125095e+02 1.67819680e+02 1.66525924e+02 1.65243711e+02 + 1.63972925e+02 1.62713451e+02 1.61465177e+02 1.60227990e+02 1.59001781e+02 + 1.57786440e+02 1.56581858e+02 1.55387929e+02 1.54204547e+02 1.53031608e+02 + 1.51869008e+02 1.50716645e+02 1.49574417e+02 1.48442226e+02 1.47319971e+02 + 1.46207555e+02 1.45104882e+02 1.44011854e+02 1.42928379e+02 1.41854362e+02 + 1.40789710e+02 1.39734332e+02 1.38688137e+02 1.37651036e+02 1.36622940e+02 + 1.35603760e+02 1.34593412e+02 1.33591807e+02 1.32598863e+02 1.31614494e+02 + 1.30638617e+02 1.29671151e+02 1.28712014e+02 1.27761125e+02 1.26818405e+02 + 1.25883774e+02 1.24957157e+02 1.24038474e+02 1.23127650e+02 1.22224609e+02 + 1.21329277e+02 1.20441579e+02 1.19561443e+02 1.18688797e+02 1.17823568e+02 + 1.16965686e+02 1.16115081e+02 1.15271684e+02 1.14435425e+02 1.13606238e+02 + 1.12784054e+02 1.11968807e+02 1.11160433e+02 1.10358864e+02 1.09564038e+02 + 1.08775890e+02 1.07994357e+02 1.07219377e+02 1.06450888e+02 1.05688829e+02 + 1.04933139e+02 1.04183758e+02 1.03440628e+02 1.02703689e+02 1.01972884e+02 + 1.01248155e+02 1.00529444e+02 9.98166971e+01 9.91098568e+01 9.84088685e+01 + 9.77136777e+01 9.70242302e+01 9.63404726e+01 9.56623521e+01 9.49898161e+01 + 9.43228130e+01 9.36612913e+01 9.30052002e+01 9.23544895e+01 9.17091095e+01 + 9.10690107e+01 9.04341445e+01 8.98044625e+01 8.91799170e+01 8.85604607e+01 + 8.79460467e+01 8.73366286e+01 8.67321606e+01 8.61325973e+01 8.55378935e+01 + 8.49480049e+01 8.43628874e+01 8.37824972e+01 8.32067912e+01 8.26357266e+01 + 8.20692610e+01 8.15073526e+01 8.09499598e+01 8.03970415e+01 7.98485571e+01 + 7.93044662e+01 7.87647290e+01 7.82293059e+01 7.76981580e+01 7.71712464e+01 + 7.66485329e+01 7.61299794e+01 7.56155485e+01 7.51052029e+01 7.45989058e+01 + 7.40966207e+01 7.35983115e+01 7.31039424e+01 7.26134780e+01 7.21268833e+01 + 7.16441236e+01 7.11651643e+01 7.06899717e+01 7.02185118e+01 6.97507513e+01 + 6.92866573e+01 6.88261968e+01 6.83693376e+01 6.79160476e+01 6.74662949e+01 + 6.70200480e+01 6.65772759e+01 6.61379476e+01 6.57020326e+01 6.52695006e+01 + 6.48403216e+01 6.44144660e+01 6.39919043e+01 6.35726074e+01 6.31565465e+01 + 6.27436931e+01 6.23340188e+01 6.19274956e+01 6.15240959e+01 6.11237920e+01 + 6.07265569e+01 6.03323636e+01 5.99411853e+01 5.95529958e+01 5.91677686e+01 + 5.87854781e+01 5.84060984e+01 5.80296042e+01 5.76559702e+01 5.72851715e+01 + 5.69171834e+01 5.65519814e+01 5.61895413e+01 5.58298391e+01 5.54728509e+01 + 5.51185533e+01 5.47669228e+01 5.44179365e+01 5.40715713e+01 5.37278046e+01 + 5.33866140e+01 5.30479772e+01 5.27118722e+01 5.23782772e+01 5.20471704e+01 + 5.17185306e+01 5.13923365e+01 5.10685671e+01 5.07472016e+01 5.04282193e+01 + 5.01115998e+01 4.97973230e+01 4.94853687e+01 4.91757171e+01 4.88683486e+01 + 4.85632436e+01 4.82603829e+01 4.79597473e+01 4.76613179e+01 4.73650760e+01 + 4.70710029e+01 4.67790803e+01 4.64892899e+01 4.62016137e+01 4.59160336e+01 + 4.56325321e+01 4.53510916e+01 4.50716945e+01 4.47943238e+01 4.45189623e+01 + 4.42455931e+01 4.39741994e+01 4.37047647e+01 4.34372724e+01 4.31717063e+01 + 4.29080503e+01 4.26462882e+01 4.23864043e+01 4.21283829e+01 4.18722084e+01 + 4.16178654e+01 4.13653386e+01 4.11146129e+01 4.08656732e+01 4.06185049e+01 + 4.03730930e+01 4.01294231e+01 3.98874807e+01 3.96472515e+01 3.94087213e+01 + 3.91718761e+01 3.89367019e+01 3.87031849e+01 3.84713115e+01 3.82410682e+01 + 3.80124414e+01 3.77854180e+01 3.75599847e+01 3.73361285e+01 3.71138365e+01 + 3.68930959e+01 3.66738939e+01 3.64562179e+01 3.62400556e+01 3.60253946e+01 + 3.58122225e+01 3.56005273e+01 3.53902971e+01 3.51815197e+01 3.49741836e+01 + 3.47682769e+01 3.45637881e+01 3.43607057e+01 3.41590183e+01 3.39587147e+01 + 3.37597837e+01 3.35622142e+01 3.33659952e+01 3.31711159e+01 3.29775655e+01 + 3.27853334e+01 3.25944089e+01 3.24047816e+01 3.22164410e+01 3.20293769e+01 + 3.18435792e+01 3.16590376e+01 3.14757421e+01 3.12936829e+01 3.11128501e+01 + 3.09332339e+01 3.07548247e+01 3.05776129e+01 3.04015890e+01 3.02267437e+01 + 3.00530675e+01 2.98805512e+01 2.97091858e+01 2.95389621e+01 2.93698711e+01 + 2.92019039e+01 2.90350517e+01 2.88693057e+01 2.87046574e+01 2.85410979e+01 + 2.83786189e+01 2.82172119e+01 2.80568686e+01 2.78975805e+01 2.77393396e+01 + 2.75821376e+01 2.74259665e+01 2.72708183e+01 2.71166850e+01 2.69635588e+01 + 2.68114319e+01 2.66602966e+01 2.65101451e+01 2.63609700e+01 2.62127637e+01 + 2.60655187e+01 2.59192276e+01 2.57738831e+01 2.56294781e+01 2.54860051e+01 + 2.53434572e+01 2.52018273e+01 2.50611083e+01 2.49212933e+01 2.47823754e+01 + 2.46443478e+01 2.45072037e+01 2.43709365e+01 2.42355394e+01 2.41010058e+01 + 2.39673294e+01 2.38345034e+01 2.37025216e+01 2.35713776e+01 2.34410651e+01 + 2.33115778e+01 2.31829095e+01 2.30550541e+01 2.29280055e+01 2.28017576e+01 + 2.26763044e+01 2.25516401e+01 2.24277587e+01 2.23046545e+01 2.21823215e+01 + 2.20607542e+01 2.19399467e+01 2.18198935e+01 2.17005890e+01 2.15820277e+01 + 2.14642040e+01 2.13471125e+01 2.12307479e+01 2.11151047e+01 2.10001777e+01 + 2.08859616e+01 2.07724512e+01 2.06596413e+01 2.05475268e+01 2.04361027e+01 + 2.03253638e+01 2.02153052e+01 2.01059220e+01 1.99972092e+01 1.98891619e+01 + 1.97817754e+01 1.96750448e+01 1.95689655e+01 1.94635326e+01 1.93587416e+01 + 1.92545877e+01 1.91510665e+01 1.90481733e+01 1.89459038e+01 1.88442533e+01 + 1.87432174e+01 1.86427918e+01 1.85429721e+01 1.84437540e+01 1.83451332e+01 + 1.82471054e+01 1.81496665e+01 1.80528122e+01 1.79565384e+01 1.78608409e+01 + 1.77657158e+01 1.76711590e+01 1.75771664e+01 1.74837341e+01 1.73908582e+01 + 1.72985347e+01 1.72067597e+01 1.71155295e+01 1.70248401e+01 1.69346879e+01 + 1.68450691e+01 1.67559799e+01 1.66674167e+01 1.65793758e+01 1.64918535e+01 + 1.64048464e+01 1.63183507e+01 1.62323630e+01 1.61468798e+01 1.60618976e+01 + 1.59774129e+01 1.58934223e+01 1.58099224e+01 1.57269098e+01 1.56443812e+01 + 1.55623334e+01 1.54807629e+01 1.53996665e+01 1.53190411e+01 1.52388833e+01 + 1.51591901e+01 1.50799582e+01 1.50011845e+01 1.49228660e+01 1.48449995e+01 + 1.47675820e+01 1.46906104e+01 1.46140818e+01 1.45379931e+01 1.44623414e+01 + 1.43871239e+01 1.43123374e+01 1.42379793e+01 1.41640465e+01 1.40905364e+01 + 1.40174459e+01 1.39447724e+01 1.38725131e+01 1.38006652e+01 1.37292261e+01 + 1.36581928e+01 1.35875629e+01 1.35173336e+01 1.34475023e+01 1.33780664e+01 + 1.33090232e+01 1.32403701e+01 1.31721047e+01 1.31042244e+01 1.30367265e+01 + 1.29696088e+01 1.29028685e+01 1.28365034e+01 1.27705109e+01 1.27048887e+01 + 1.26396342e+01 1.25747452e+01 1.25102192e+01 1.24460540e+01 1.23822471e+01 + 1.23187962e+01 1.22556992e+01 1.21929536e+01 1.21305572e+01 1.20685078e+01 + 1.20068031e+01 1.19454410e+01 1.18844192e+01 1.18237356e+01 1.17633880e+01 + 1.17033742e+01 1.16436922e+01 1.15843398e+01 1.15253150e+01 1.14666156e+01 + 1.14082396e+01 1.13501849e+01 1.12924496e+01 1.12350315e+01 1.11779288e+01 + 1.11211393e+01 1.10646612e+01 1.10084925e+01 1.09526312e+01 1.08970754e+01 + 1.08418233e+01 1.07868728e+01 1.07322221e+01 1.06778695e+01 1.06238129e+01 + 1.05700505e+01 1.05165806e+01 1.04634013e+01 1.04105108e+01 1.03579073e+01 + 1.03055891e+01 1.02535544e+01 1.02018014e+01 1.01503283e+01 1.00991336e+01 + 1.00482155e+01 9.99757219e+00 9.94720209e+00 9.89710351e+00 9.84727478e+00 + 9.79771426e+00 9.74842031e+00 9.69939130e+00 9.65062562e+00 9.60212167e+00 + 9.55387786e+00 9.50589262e+00 9.45816438e+00 9.41069157e+00 9.36347267e+00 + 9.31650613e+00 9.26979044e+00 9.22332408e+00 9.17710556e+00 9.13113337e+00 + 9.08540606e+00 9.03992214e+00 8.99468017e+00 8.94967869e+00 8.90491626e+00 + 8.86039147e+00 8.81610289e+00 8.77204912e+00 8.72822876e+00 8.68464043e+00 + 8.64128274e+00 8.59815434e+00 8.55525386e+00 8.51257996e+00 8.47013129e+00 + 8.42790653e+00 8.38590436e+00 8.34412347e+00 8.30256256e+00 8.26122033e+00 + 8.22009551e+00 8.17918681e+00 8.13849297e+00 8.09801274e+00 8.05774487e+00 + 8.01768811e+00 7.97784124e+00 7.93820303e+00 7.89877228e+00 7.85954777e+00 + 7.82052831e+00 7.78171270e+00 7.74309977e+00 7.70468835e+00 7.66647727e+00 + 7.62846537e+00 7.59065151e+00 7.55303453e+00 7.51561332e+00 7.47838674e+00 + 7.44135367e+00 7.40451301e+00 7.36786365e+00 7.33140449e+00 7.29513445e+00 + 7.25905245e+00 7.22315741e+00 7.18744826e+00 7.15192396e+00 7.11658343e+00 + 7.08142564e+00 7.04644956e+00 7.01165414e+00 6.97703837e+00 6.94260122e+00 + 6.90834169e+00 6.87425877e+00 6.84035146e+00 6.80661878e+00 6.77305973e+00 + 6.73967334e+00 6.70645864e+00 6.67341467e+00 6.64054045e+00 6.60783505e+00 + 6.57529751e+00 6.54292690e+00 6.51072227e+00 6.47868271e+00 6.44680729e+00 + 6.41509509e+00 6.38354521e+00 6.35215673e+00 6.32092877e+00 6.28986042e+00 + 6.25895081e+00 6.22819905e+00 6.19760426e+00 6.16716558e+00 6.13688214e+00 + 6.10675309e+00 6.07677756e+00 6.04695472e+00 6.01728371e+00 5.98776371e+00 + 5.95839388e+00 5.92917339e+00 5.90010142e+00 5.87117717e+00 5.84239981e+00 + 5.81376854e+00 5.78528256e+00 5.75694108e+00 5.72874330e+00 5.70068845e+00 + 5.67277573e+00 5.64500437e+00 5.61737361e+00 5.58988267e+00 5.56253080e+00 + 5.53531723e+00 5.50824123e+00 5.48130203e+00 5.45449890e+00 5.42783110e+00 + 5.40129789e+00 5.37489855e+00 5.34863236e+00 5.32249859e+00 5.29649653e+00 + 5.27062546e+00 5.24488469e+00 5.21927350e+00 5.19379121e+00 5.16843711e+00 + 5.14321052e+00 5.11811076e+00 5.09313713e+00 5.06828897e+00 5.04356560e+00 + 5.01896636e+00 4.99449057e+00 4.97013759e+00 4.94590674e+00 4.92179739e+00 + 4.89780888e+00 4.87394056e+00 4.85019180e+00 4.82656195e+00 4.80305039e+00 + 4.77965649e+00 4.75637962e+00 4.73321916e+00 4.71017449e+00 4.68724499e+00 + 4.66443006e+00 4.64172909e+00 4.61914148e+00 4.59666662e+00 4.57430392e+00 + 4.55205278e+00 4.52991263e+00 4.50788286e+00 4.48596291e+00 4.46415218e+00 + 4.44245011e+00 4.42085612e+00 4.39936965e+00 4.37799012e+00 4.35671699e+00 + 4.33554968e+00 4.31448764e+00 4.29353033e+00 4.27267718e+00 4.25192766e+00 + 4.23128123e+00 4.21073734e+00 4.19029546e+00 4.16995505e+00 4.14971559e+00 + 4.12957654e+00 4.10953739e+00 4.08959761e+00 4.06975669e+00 4.05001410e+00 + 4.03036935e+00 4.01082191e+00 3.99137129e+00 3.97201698e+00 3.95275847e+00 + 3.93359529e+00 3.91452691e+00 3.89555287e+00 3.87667266e+00 3.85788581e+00 + 3.83919182e+00 3.82059022e+00 3.80208053e+00 3.78366227e+00 3.76533498e+00 + 3.74709818e+00 3.72895141e+00 3.71089420e+00 3.69292608e+00 3.67504661e+00 + 3.65725533e+00 3.63955177e+00 3.62193549e+00 3.60440604e+00 3.58696298e+00 + 3.56960585e+00 3.55233422e+00 3.53514766e+00 3.51804571e+00 3.50102796e+00 + 3.48409396e+00 3.46724329e+00 3.45047553e+00 3.43379024e+00 3.41718700e+00 + 3.40066541e+00 3.38422503e+00 3.36786545e+00 3.35158627e+00 3.33538707e+00 + 3.31926744e+00 3.30322698e+00 3.28726528e+00 3.27138194e+00 3.25557657e+00 + 3.23984876e+00 3.22419813e+00 3.20862427e+00 3.19312680e+00 3.17770533e+00 + 3.16235948e+00 3.14708885e+00 3.13189308e+00 3.11677177e+00 3.10172455e+00 + 3.08675105e+00 3.07185089e+00 3.05702370e+00 3.04226911e+00 3.02758675e+00 + 3.01297626e+00 2.99843728e+00 2.98396943e+00 2.96957237e+00 2.95524574e+00 + 2.94098917e+00 2.92680232e+00 2.91268483e+00 2.89863636e+00 2.88465656e+00 + 2.87074507e+00 2.85690156e+00 2.84312568e+00 2.82941710e+00 2.81577547e+00 + 2.80220045e+00 2.78869172e+00 2.77524894e+00 2.76187177e+00 2.74855989e+00 + 2.73531297e+00 2.72213068e+00 2.70901271e+00 2.69595871e+00 2.68296839e+00 + 2.67004141e+00 2.65717745e+00 2.64437621e+00 2.63163737e+00 2.61896061e+00 + 2.60634563e+00 2.59379211e+00 2.58129976e+00 2.56886825e+00 2.55649729e+00 + 2.54418658e+00 2.53193581e+00 2.51974468e+00 2.50761290e+00 2.49554018e+00 + 2.48352620e+00 2.47157070e+00 2.45967336e+00 2.44783390e+00 2.43605203e+00 + 2.42432747e+00 2.41265993e+00 2.40104912e+00 2.38949477e+00 2.37799659e+00 + 2.36655430e+00 2.35516763e+00 2.34383629e+00 2.33256002e+00 2.32133853e+00 + 2.31017156e+00 2.29905884e+00 2.28800009e+00 2.27699505e+00 2.26604346e+00 + 2.25514503e+00 2.24429952e+00 2.23350666e+00 2.22276619e+00 2.21207785e+00 + 2.20144138e+00 2.19085652e+00 2.18032302e+00 2.16984062e+00 2.15940907e+00 + 2.14902812e+00 2.13869751e+00 2.12841701e+00 2.11818636e+00 2.10800531e+00 + 2.09787362e+00 2.08779104e+00 2.07775734e+00 2.06777226e+00 2.05783558e+00 + 2.04794705e+00 2.03810643e+00 2.02831349e+00 2.01856799e+00 2.00886969e+00 + 1.99921838e+00 1.98961380e+00 1.98005574e+00 1.97054395e+00 1.96107823e+00 + 1.95165833e+00 1.94228403e+00 1.93295511e+00 1.92367134e+00 1.91443251e+00 + 1.90523838e+00 1.89608874e+00 1.88698338e+00 1.87792206e+00 1.86890459e+00 + 1.85993073e+00 1.85100028e+00 1.84211302e+00 1.83326875e+00 1.82446724e+00 + 1.81570829e+00 1.80699169e+00 1.79831723e+00 1.78968471e+00 1.78109391e+00 + 1.77254464e+00 1.76403669e+00 1.75556986e+00 1.74714394e+00 1.73875873e+00 + 1.73041405e+00 1.72210967e+00 1.71384542e+00 1.70562109e+00 1.69743648e+00 + 1.68929141e+00 1.68118567e+00 1.67311908e+00 1.66509145e+00 1.65710257e+00 + 1.64915227e+00 1.64124035e+00 1.63336663e+00 1.62553091e+00 1.61773302e+00 + 1.60997277e+00 1.60224997e+00 1.59456444e+00 1.58691600e+00 1.57930447e+00 + 1.57172966e+00 1.56419140e+00 1.55668951e+00 1.54922381e+00 1.54179412e+00 + 1.53440027e+00 1.52704208e+00 1.51971938e+00 1.51243200e+00 1.50517976e+00 + 1.49796249e+00 1.49078002e+00 1.48363218e+00 1.47651881e+00 1.46943972e+00 + 1.46239477e+00 1.45538377e+00 1.44840657e+00 1.44146299e+00 1.43455288e+00 + 1.42767608e+00 1.42083241e+00 1.41402172e+00 1.40724385e+00 1.40049863e+00 + 1.39378592e+00 1.38710554e+00 1.38045735e+00 1.37384119e+00 1.36725689e+00 + 1.36070431e+00 1.35418329e+00 1.34769367e+00 1.34123531e+00 1.33480805e+00 + 1.32841174e+00 1.32204623e+00 1.31571137e+00 1.30940702e+00 1.30313301e+00 + 1.29688921e+00 1.29067547e+00 1.28449163e+00 1.27833757e+00 1.27221313e+00 + 1.26611816e+00 1.26005253e+00 1.25401609e+00 1.24800870e+00 1.24203022e+00 + 1.23608051e+00 1.23015943e+00 1.22426684e+00 1.21840259e+00 1.21256657e+00 + 1.20675861e+00 1.20097860e+00 1.19522640e+00 1.18950186e+00 1.18380486e+00 + 1.17813526e+00 1.17249293e+00 1.16687773e+00 1.16128954e+00 1.15572823e+00 + 1.15019366e+00 1.14468570e+00 1.13920423e+00 1.13374911e+00 1.12832022e+00 + 1.12291743e+00 1.11754062e+00 1.11218966e+00 1.10686442e+00 1.10156477e+00 + 1.09629061e+00 1.09104179e+00 1.08581821e+00 1.08061973e+00 1.07544623e+00 + 1.07029760e+00 1.06517371e+00 1.06007445e+00 1.05499969e+00 1.04994931e+00 + 1.04492320e+00 1.03992125e+00 1.03494332e+00 1.02998931e+00 1.02505910e+00 + 1.02015258e+00 1.01526963e+00 1.01041014e+00 1.00557399e+00 1.00076107e+00 + 9.95971269e-01 9.91204474e-01 9.86460574e-01 9.81739459e-01 9.77041017e-01 + 9.72365141e-01 9.67711719e-01 9.63080644e-01 9.58471808e-01 9.53885103e-01 + 9.49320422e-01 9.44777659e-01 9.40256708e-01 9.35757463e-01 9.31279819e-01 + 9.26823673e-01 9.22388920e-01 9.17975456e-01 9.13583180e-01 9.09211987e-01 + 9.04861778e-01 9.00532450e-01 8.96223902e-01 8.91936035e-01 8.87668748e-01 + 8.83421941e-01 8.79195517e-01 8.74989376e-01 8.70803420e-01 8.66637553e-01 + 8.62491677e-01 8.58365695e-01 8.54259512e-01 8.50173032e-01 8.46106160e-01 + 8.42058801e-01 8.38030861e-01 8.34022246e-01 8.30032864e-01 8.26062621e-01 + 8.22111425e-01 8.18179184e-01 8.14265806e-01 8.10371202e-01 8.06495279e-01 + 8.02637948e-01 7.98799120e-01 7.94978705e-01 7.91176614e-01 7.87392758e-01 + 7.83627051e-01 7.79879404e-01 7.76149731e-01 7.72437944e-01 7.68743958e-01 + 7.65067686e-01 7.61409044e-01 7.57767945e-01 7.54144307e-01 7.50538044e-01 + 7.46949073e-01 7.43377311e-01 7.39822674e-01 7.36285080e-01 7.32764446e-01 + 7.29260693e-01 7.25773736e-01 7.22303497e-01 7.18849895e-01 7.15412848e-01 + 7.11992278e-01 7.08588105e-01 7.05200250e-01 7.01828635e-01 6.98473181e-01 + 6.95133811e-01 6.91810447e-01 6.88503011e-01 6.85211428e-01 6.81935621e-01 + 6.78675514e-01 6.75431031e-01 6.72202097e-01 6.68988638e-01 6.65790578e-01 + 6.62607844e-01 6.59440362e-01 6.56288059e-01 6.53150861e-01 6.50028696e-01 + 6.46921491e-01 6.43829174e-01 6.40751674e-01 6.37688920e-01 6.34640840e-01 + 6.31607364e-01 6.28588422e-01 6.25583943e-01 6.22593858e-01 6.19618099e-01 + 6.16656595e-01 6.13709278e-01 6.10776081e-01 6.07856935e-01 6.04951772e-01 + 6.02060526e-01 5.99183129e-01 5.96319515e-01 5.93469617e-01 5.90633370e-01 + 5.87810708e-01 5.85001566e-01 5.82205878e-01 5.79423580e-01 5.76654607e-01 + 5.73898896e-01 5.71156383e-01 5.68427004e-01 5.65710696e-01 5.63007396e-01 + 5.60317042e-01 5.57639571e-01 5.54974922e-01 5.52323033e-01 5.49683843e-01 + 5.47057290e-01 5.44443314e-01 5.41841854e-01 5.39252851e-01 5.36676244e-01 + 5.34111973e-01 5.31559981e-01 5.29020206e-01 5.26492592e-01 5.23977079e-01 + 5.21473609e-01 5.18982125e-01 5.16502568e-01 5.14034882e-01 5.11579010e-01 + 5.09134894e-01 5.06702479e-01 5.04281707e-01 5.01872524e-01 4.99474873e-01 + 4.97088699e-01 4.94713948e-01 4.92350563e-01 4.89998491e-01 4.87657677e-01 + 4.85328067e-01 4.83009607e-01 4.80702244e-01 4.78405925e-01 4.76120596e-01 + 4.73846204e-01 4.71582698e-01 4.69330025e-01 4.67088133e-01 4.64856970e-01 + 4.62636484e-01 4.60426625e-01 4.58227341e-01 4.56038581e-01 4.53860296e-01 + 4.51692435e-01 4.49534947e-01 4.47387783e-01 4.45250893e-01 4.43124229e-01 + 4.41007741e-01 4.38901379e-01 4.36805097e-01 4.34718844e-01 4.32642574e-01 + 4.30576237e-01 4.28519788e-01 4.26473177e-01 4.24436358e-01 4.22409284e-01 + 4.20391908e-01 4.18384183e-01 4.16386064e-01 4.14397504e-01 4.12418457e-01 + 4.10448878e-01 4.08488721e-01 4.06537941e-01 4.04596493e-01 4.02664332e-01 + 4.00741414e-01 3.98827694e-01 3.96923129e-01 3.95027674e-01 3.93141285e-01 + 3.91263920e-01 3.89395535e-01 3.87536086e-01 3.85685532e-01 3.83843828e-01 + 3.82010934e-01 3.80186806e-01 3.78371402e-01 3.76564682e-01 3.74766602e-01 + 3.72977122e-01 3.71196200e-01 3.69423796e-01 3.67659868e-01 3.65904377e-01 + 3.64157280e-01 3.62418539e-01 3.60688113e-01 3.58965962e-01 3.57252046e-01 + 3.55546327e-01 3.53848764e-01 3.52159319e-01 3.50477953e-01 3.48804627e-01 + 3.47139302e-01 3.45481941e-01 3.43832504e-01 3.42190955e-01 3.40557254e-01 + 3.38931366e-01 3.37313251e-01 3.35702873e-01 3.34100195e-01 3.32505179e-01 + 3.30917790e-01 3.29337990e-01 3.27765744e-01 3.26201014e-01 3.24643766e-01 + 3.23093962e-01 3.21551569e-01 3.20016548e-01 3.18488867e-01 3.16968489e-01 + 3.15455379e-01 3.13949503e-01 3.12450826e-01 3.10959314e-01 3.09474931e-01 + 3.07997645e-01 3.06527420e-01 3.05064224e-01 3.03608022e-01 3.02158781e-01 + 3.00716467e-01 2.99281048e-01 2.97852490e-01 2.96430761e-01 2.95015827e-01 + 2.93607657e-01 2.92206218e-01 2.90811477e-01 2.89423403e-01 2.88041963e-01 + 2.86667126e-01 2.85298860e-01 2.83937134e-01 2.82581916e-01 2.81233175e-01 + 2.79890881e-01 2.78555001e-01 2.77225507e-01 2.75902366e-01 2.74585549e-01 + 2.73275025e-01 2.71970764e-01 2.70672736e-01 2.69380912e-01 2.68095261e-01 + 2.66815754e-01 2.65542362e-01 2.64275055e-01 2.63013804e-01 2.61758580e-01 + 2.60509355e-01 2.59266099e-01 2.58028784e-01 2.56797382e-01 2.55571864e-01 + 2.54352202e-01 2.53138368e-01 2.51930334e-01 2.50728072e-01 2.49531555e-01 + 2.48340756e-01 2.47155646e-01 2.45976199e-01 2.44802387e-01 2.43634184e-01 + 2.42471562e-01 2.41314495e-01 2.40162957e-01 2.39016920e-01 2.37876359e-01 + 2.36741248e-01 2.35611559e-01 2.34487268e-01 2.33368348e-01 2.32254774e-01 + 2.31146520e-01 2.30043561e-01 2.28945871e-01 2.27853426e-01 2.26766199e-01 + 2.25684166e-01 2.24607302e-01 2.23535583e-01 2.22468984e-01 2.21407480e-01 + 2.20351047e-01 2.19299660e-01 2.18253296e-01 2.17211931e-01 2.16175540e-01 + 2.15144100e-01 2.14113243e-01 2.13069891e-01 2.12013376e-01 2.10943940e-01 + 2.09861825e-01 2.08767274e-01 2.07660532e-01 2.06541843e-01 2.05411450e-01 + 2.04269601e-01 2.03116539e-01 2.01952510e-01 2.00777762e-01 1.99592539e-01 + 1.98397087e-01 1.97191654e-01 1.95976486e-01 1.94751828e-01 1.93517927e-01 + 1.92275030e-01 1.91023382e-01 1.89763228e-01 1.88494815e-01 1.87218387e-01 + 1.85934189e-01 1.84642465e-01 1.83343460e-01 1.82037416e-01 1.80724576e-01 + 1.79405183e-01 1.78079478e-01 1.76747703e-01 1.75410096e-01 1.74066898e-01 + 1.72718347e-01 1.71364681e-01 1.70006137e-01 1.68642951e-01 1.67275357e-01 + 1.65903590e-01 1.64527883e-01 1.63148467e-01 1.61765573e-01 1.60379431e-01 + 1.58990269e-01 1.57598315e-01 1.56203794e-01 1.54806930e-01 1.53407948e-01 + 1.52007068e-01 1.50604512e-01 1.49200499e-01 1.47795247e-01 1.46388970e-01 + 1.44981885e-01 1.43574205e-01 1.42166140e-01 1.40757901e-01 1.39349697e-01 + 1.37941733e-01 1.36534215e-01 1.35127346e-01 1.33721328e-01 1.32316360e-01 + 1.30912641e-01 1.29510367e-01 1.28109732e-01 1.26710929e-01 1.25314148e-01 + 1.23919578e-01 1.22527407e-01 1.21137818e-01 1.19750996e-01 1.18367121e-01 + 1.16986372e-01 1.15608926e-01 1.14234958e-01 1.12864641e-01 1.11498147e-01 + 1.10135644e-01 1.08777298e-01 1.07423275e-01 1.06073737e-01 1.04728844e-01 + 1.03388755e-01 1.02053626e-01 1.00723611e-01 9.93988621e-02 9.80795283e-02 + 9.67657573e-02 9.54576944e-02 9.41554826e-02 9.28592628e-02 9.15691736e-02 + 9.02853512e-02 8.90079298e-02 8.77370413e-02 8.64728153e-02 8.52153791e-02 + 8.39648579e-02 8.27213744e-02 8.14850493e-02 8.02560007e-02 7.90343447e-02 + 7.78201951e-02 7.66136632e-02 7.54148582e-02 7.42238870e-02 7.30408542e-02 + 7.18658621e-02 7.06990106e-02 6.95403977e-02 6.83901186e-02 6.72482667e-02 + 6.61149327e-02 6.49902053e-02 6.38741708e-02 6.27669135e-02 6.16685149e-02 + 6.05790548e-02 5.94986105e-02 5.84272569e-02 5.73650669e-02 5.63121110e-02 + 5.52684577e-02 5.42341729e-02 5.32093207e-02 5.21939626e-02 5.11881582e-02 + 5.01919647e-02 4.92054373e-02 4.82286288e-02 4.72615900e-02 4.63043694e-02 + 4.53570136e-02 4.44195668e-02 4.34920712e-02 4.25745668e-02 4.16670917e-02 + 4.07696815e-02 3.98823701e-02 3.90051893e-02 3.81381685e-02 3.72813355e-02 + 3.64347158e-02 3.55983328e-02 3.47722083e-02 3.39563616e-02 3.31508103e-02 + 3.23555701e-02 3.15706545e-02 3.07960754e-02 3.00318424e-02 2.92779635e-02 + 2.85344447e-02 2.78012900e-02 2.70785019e-02 2.63660805e-02 2.56640247e-02 + 2.49723312e-02 2.42909949e-02 2.36200091e-02 2.29593653e-02 2.23090532e-02 + 2.16690608e-02 2.10393744e-02 2.04199786e-02 1.98108565e-02 1.92119892e-02 + 1.86233564e-02 1.80449363e-02 1.74767052e-02 1.69186380e-02 1.63707081e-02 + 1.58328873e-02 1.53051458e-02 1.47874523e-02 1.42797743e-02 1.37820775e-02 + 1.32943263e-02 1.28164837e-02 1.23485112e-02 1.18903690e-02 1.14420160e-02 + 1.10034096e-02 1.05745061e-02 1.01552602e-02 9.74562554e-03 9.34555446e-03 + 8.95499803e-03 8.57390613e-03 8.20222740e-03 7.83990935e-03 7.48689830e-03 + 7.14313944e-03 6.80857685e-03 6.48315351e-03 6.16681133e-03 5.85949117e-03 + 5.56113283e-03 5.27167514e-03 4.99105590e-03 4.71921196e-03 4.45607922e-03 + 4.20159263e-03 3.95568626e-03 3.71829328e-03 3.48934599e-03 3.26877583e-03 + 3.05651345e-03 2.85248865e-03 2.65663049e-03 2.46886724e-03 2.28912643e-03 + 2.11733486e-03 1.95341864e-03 1.79730319e-03 1.64891328e-03 1.50817302e-03 + 1.37500590e-03 1.24933483e-03 1.13108212e-03 1.02016951e-03 9.16518227e-04 + 8.20048948e-04 7.30681861e-04 6.48336671e-04 5.72932617e-04 5.04388498e-04 + 4.42622685e-04 3.87553146e-04 3.39097464e-04 2.97172855e-04 2.61696185e-04 + 2.32583995e-04 2.09752512e-04 1.93117675e-04 1.82595147e-04 1.78100339e-04 + 5.10303315e+05 5.10046225e+05 2.53097548e+05 1.67464388e+05 1.24659895e+05 + 9.89867038e+04 8.18790278e+04 6.96658180e+04 6.05115520e+04 5.33964966e+04 + 4.77088135e+04 4.30591523e+04 3.91879473e+04 3.59155003e+04 3.31134563e+04 + 3.06876893e+04 2.85676056e+04 2.66992224e+04 2.50405539e+04 2.35584542e+04 + 2.22264069e+04 2.10229471e+04 1.99305132e+04 1.89345980e+04 1.80231129e+04 + 1.71859038e+04 1.64143793e+04 1.57012210e+04 1.50401564e+04 1.44257787e+04 + 1.38534022e+04 1.33189460e+04 1.28188399e+04 1.23499464e+04 1.19094977e+04 + 1.14950424e+04 1.11044018e+04 1.07356328e+04 1.03869972e+04 1.00569354e+04 + 9.74404375e+03 9.44705580e+03 9.16482594e+03 8.89631528e+03 8.64057954e+03 + 8.39675857e+03 8.16406712e+03 7.94178697e+03 7.72925986e+03 7.52588141e+03 + 7.33109575e+03 7.14439069e+03 6.96529360e+03 6.79336763e+03 6.62820838e+03 + 6.46944099e+03 6.31671748e+03 6.16971439e+03 6.02813065e+03 5.89168572e+03 + 5.76011783e+03 5.63318249e+03 5.51065103e+03 5.39230941e+03 5.27795704e+03 + 5.16740574e+03 5.06047881e+03 4.95701018e+03 4.85684361e+03 4.75983198e+03 + 4.66583665e+03 4.57472683e+03 4.48637909e+03 4.40067679e+03 4.31750967e+03 + 4.23677339e+03 4.15836916e+03 4.08220338e+03 4.00818728e+03 3.93623666e+03 + 3.86627154e+03 3.79821596e+03 3.73199770e+03 3.66754806e+03 3.60480166e+03 + 3.54369622e+03 3.48417242e+03 3.42617367e+03 3.36964602e+03 3.31453796e+03 + 3.26080030e+03 3.20838606e+03 3.15725033e+03 3.10735015e+03 3.05864443e+03 + 3.01109383e+03 2.96466068e+03 2.91930891e+03 2.87500390e+03 2.83171251e+03 + 2.78940292e+03 2.74804459e+03 2.70760821e+03 2.66806564e+03 2.62938983e+03 + 2.59155479e+03 2.55453552e+03 2.51830799e+03 2.48284908e+03 2.44813652e+03 + 2.41414887e+03 2.38086551e+03 2.34826654e+03 2.31633280e+03 2.28504581e+03 + 2.25438775e+03 2.22434144e+03 2.19489029e+03 2.16601829e+03 2.13770999e+03 + 2.10995046e+03 2.08272529e+03 2.05602053e+03 2.02982273e+03 2.00411886e+03 + 1.97889633e+03 1.95414296e+03 1.92984697e+03 1.90599695e+03 1.88258187e+03 + 1.85959103e+03 1.83701408e+03 1.81484100e+03 1.79306205e+03 1.77166784e+03 + 1.75064922e+03 1.72999735e+03 1.70970364e+03 1.68975977e+03 1.67015765e+03 + 1.65088945e+03 1.63194756e+03 1.61332459e+03 1.59501336e+03 1.57700693e+03 + 1.55929851e+03 1.54188153e+03 1.52474960e+03 1.50789653e+03 1.49131626e+03 + 1.47500294e+03 1.45895085e+03 1.44315444e+03 1.42760833e+03 1.41230725e+03 + 1.39724609e+03 1.38241988e+03 1.36782377e+03 1.35345305e+03 1.33930313e+03 + 1.32536953e+03 1.31164791e+03 1.29813401e+03 1.28482370e+03 1.27171296e+03 + 1.25879786e+03 1.24607457e+03 1.23353935e+03 1.22118857e+03 1.20901868e+03 + 1.19702622e+03 1.18520781e+03 1.17356016e+03 1.16208005e+03 1.15076434e+03 + 1.13960999e+03 1.12861399e+03 1.11777342e+03 1.10708545e+03 1.09654729e+03 + 1.08615621e+03 1.07590958e+03 1.06580478e+03 1.05583930e+03 1.04601066e+03 + 1.03631643e+03 1.02675426e+03 1.01732183e+03 1.00801689e+03 9.98837223e+02 + 9.89780672e+02 9.80845126e+02 9.72028519e+02 9.63328832e+02 9.54744087e+02 + 9.46272351e+02 9.37911733e+02 9.29660381e+02 9.21516483e+02 9.13478267e+02 + 9.05543995e+02 8.97711969e+02 8.89980525e+02 8.82348035e+02 8.74812902e+02 + 8.67373564e+02 8.60028492e+02 8.52776186e+02 8.45615178e+02 8.38544029e+02 + 8.31561330e+02 8.24665699e+02 8.17855783e+02 8.11130255e+02 8.04487814e+02 + 7.97927187e+02 7.91447123e+02 7.85046396e+02 7.78723806e+02 7.72478175e+02 + 7.66308347e+02 7.60213188e+02 7.54191588e+02 7.48242457e+02 7.42364723e+02 + 7.36557340e+02 7.30819275e+02 7.25149520e+02 7.19547083e+02 7.14010990e+02 + 7.08540286e+02 7.03134035e+02 6.97791316e+02 6.92511225e+02 6.87292875e+02 + 6.82135395e+02 6.77037931e+02 6.71999642e+02 6.67019703e+02 6.62097305e+02 + 6.57231651e+02 6.52421960e+02 6.47667464e+02 6.42967409e+02 6.38321053e+02 + 6.33727668e+02 6.29186538e+02 6.24696960e+02 6.20258243e+02 6.15869708e+02 + 6.11530686e+02 6.07240521e+02 6.02998567e+02 5.98804191e+02 5.94656769e+02 + 5.90555686e+02 5.86500341e+02 5.82490139e+02 5.78524499e+02 5.74602845e+02 + 5.70724613e+02 5.66889250e+02 5.63096208e+02 5.59344950e+02 5.55634949e+02 + 5.51965684e+02 5.48336644e+02 5.44747325e+02 5.41197231e+02 5.37685877e+02 + 5.34212781e+02 5.30777471e+02 5.27379483e+02 5.24018359e+02 5.20693648e+02 + 5.17404908e+02 5.14151701e+02 5.10933598e+02 5.07750176e+02 5.04601017e+02 + 5.01485712e+02 4.98403856e+02 4.95355051e+02 4.92338905e+02 4.89355032e+02 + 4.86403051e+02 4.83482588e+02 4.80593273e+02 4.77734743e+02 4.74906640e+02 + 4.72108610e+02 4.69340305e+02 4.66601383e+02 4.63891506e+02 4.61210340e+02 + 4.58557558e+02 4.55932836e+02 4.53335856e+02 4.50766302e+02 4.48223866e+02 + 4.45708241e+02 4.43219127e+02 4.40756227e+02 4.38319248e+02 4.35907902e+02 + 4.33521903e+02 4.31160971e+02 4.28824829e+02 4.26513205e+02 4.24225829e+02 + 4.21962435e+02 4.19722762e+02 4.17506550e+02 4.15313545e+02 4.13143496e+02 + 4.10996155e+02 4.08871275e+02 4.06768616e+02 4.04687940e+02 4.02629011e+02 + 4.00591597e+02 3.98575469e+02 3.96580400e+02 3.94606168e+02 3.92652552e+02 + 3.90719335e+02 3.88806302e+02 3.86913240e+02 3.85039942e+02 3.83186199e+02 + 3.81351809e+02 3.79536569e+02 3.77740281e+02 3.75962749e+02 3.74203778e+02 + 3.72463176e+02 3.70740756e+02 3.69036329e+02 3.67349711e+02 3.65680719e+02 + 3.64029175e+02 3.62394898e+02 3.60777715e+02 3.59177450e+02 3.57593933e+02 + 3.56026994e+02 3.54476464e+02 3.52942179e+02 3.51423975e+02 3.49921689e+02 + 3.48435163e+02 3.46964237e+02 3.45508756e+02 3.44068565e+02 3.42643511e+02 + 3.41233444e+02 3.39838215e+02 3.38457674e+02 3.37091678e+02 3.35740081e+02 + 3.34402740e+02 3.33079515e+02 3.31770266e+02 3.30474855e+02 3.29193145e+02 + 3.27925002e+02 3.26670291e+02 3.25428880e+02 3.24200640e+02 3.22985439e+02 + 3.21783151e+02 3.20593649e+02 3.19416806e+02 3.18252500e+02 3.17100608e+02 + 3.15961007e+02 3.14833578e+02 3.13718202e+02 3.12614761e+02 3.11523138e+02 + 3.10443218e+02 3.09374887e+02 3.08318030e+02 3.07272538e+02 3.06238297e+02 + 3.05215199e+02 3.04203134e+02 3.03201996e+02 3.02211676e+02 3.01232070e+02 + 3.00263073e+02 2.99304581e+02 2.98356492e+02 2.97418703e+02 2.96491113e+02 + 2.95573624e+02 2.94666135e+02 2.93768550e+02 2.92880770e+02 2.92002699e+02 + 2.91134242e+02 2.90275304e+02 2.89425791e+02 2.88585611e+02 2.87754672e+02 + 2.86932882e+02 2.86120150e+02 2.85316386e+02 2.84521503e+02 2.83735411e+02 + 2.82958023e+02 2.82189252e+02 2.81429013e+02 2.80677219e+02 2.79933787e+02 + 2.79198632e+02 2.78471671e+02 2.77752821e+02 2.77042001e+02 2.76339129e+02 + 2.75644124e+02 2.74956907e+02 2.74277399e+02 2.73605519e+02 2.72941192e+02 + 2.72284337e+02 2.71634880e+02 2.70992743e+02 2.70357851e+02 2.69730128e+02 + 2.69109499e+02 2.68495891e+02 2.67889230e+02 2.67289443e+02 2.66696458e+02 + 2.66110201e+02 2.65530603e+02 2.64957592e+02 2.64391096e+02 2.63831048e+02 + 2.63277376e+02 2.62730013e+02 2.62188888e+02 2.61653935e+02 2.61125086e+02 + 2.60602273e+02 2.60085431e+02 2.59574492e+02 2.59069390e+02 2.58570061e+02 + 2.58076440e+02 2.57588462e+02 2.57106063e+02 2.56629179e+02 2.56157746e+02 + 2.55691703e+02 2.55230987e+02 2.54775535e+02 2.54325287e+02 2.53880179e+02 + 2.53440153e+02 2.53005147e+02 2.52575100e+02 2.52149954e+02 2.51729649e+02 + 2.51314126e+02 2.50903326e+02 2.50497191e+02 2.50095662e+02 2.49698683e+02 + 2.49306196e+02 2.48918144e+02 2.48534470e+02 2.48155118e+02 2.47780033e+02 + 2.47409158e+02 2.47042438e+02 2.46679819e+02 2.46321246e+02 2.45966664e+02 + 2.45616020e+02 2.45269260e+02 2.44926330e+02 2.44587178e+02 2.44251750e+02 + 2.43919995e+02 2.43591860e+02 2.43267294e+02 2.42946244e+02 2.42628660e+02 + 2.42314491e+02 2.42003686e+02 2.41696195e+02 2.41391967e+02 2.41090953e+02 + 2.40793105e+02 2.40498371e+02 2.40206704e+02 2.39918055e+02 2.39632375e+02 + 2.39349617e+02 2.39069733e+02 2.38792675e+02 2.38518396e+02 2.38246849e+02 + 2.37977988e+02 2.37711767e+02 2.37448138e+02 2.37187057e+02 2.36928477e+02 + 2.36672354e+02 2.36418643e+02 2.36167298e+02 2.35918276e+02 2.35671532e+02 + 2.35427023e+02 2.35184704e+02 2.34944533e+02 2.34706466e+02 2.34470460e+02 + 2.34236473e+02 2.34004463e+02 2.33774388e+02 2.33546205e+02 2.33319874e+02 + 2.33095353e+02 2.32872602e+02 2.32651579e+02 2.32432244e+02 2.32214558e+02 + 2.31998480e+02 2.31783971e+02 2.31570991e+02 2.31359501e+02 2.31149464e+02 + 2.30940839e+02 2.30733589e+02 2.30527677e+02 2.30323063e+02 2.30119712e+02 + 2.29917585e+02 2.29716646e+02 2.29516859e+02 2.29318186e+02 2.29120593e+02 + 2.28924042e+02 2.28728500e+02 2.28533929e+02 2.28340297e+02 2.28147567e+02 + 2.27955705e+02 2.27764678e+02 2.27574452e+02 2.27384992e+02 2.27196266e+02 + 2.27008241e+02 2.26820884e+02 2.26634163e+02 2.26448044e+02 2.26262498e+02 + 2.26077491e+02 2.25892993e+02 2.25708972e+02 2.25525399e+02 2.25342242e+02 + 2.25159470e+02 2.24977056e+02 2.24794968e+02 2.24613177e+02 2.24431655e+02 + 2.24250372e+02 2.24069301e+02 2.23888413e+02 2.23707679e+02 2.23527074e+02 + 2.23346568e+02 2.23166136e+02 2.22985751e+02 2.22805385e+02 2.22625013e+02 + 2.22444610e+02 2.22264149e+02 2.22083605e+02 2.21902954e+02 2.21722170e+02 + 2.21541230e+02 2.21360109e+02 2.21178783e+02 2.20997229e+02 2.20815424e+02 + 2.20633345e+02 2.20450968e+02 2.20268273e+02 2.20085237e+02 2.19901837e+02 + 2.19718053e+02 2.19533864e+02 2.19349248e+02 2.19164186e+02 2.18978656e+02 + 2.18792640e+02 2.18606116e+02 2.18419067e+02 2.18231472e+02 2.18043313e+02 + 2.17854572e+02 2.17665230e+02 2.17475270e+02 2.17284673e+02 2.17093423e+02 + 2.16901503e+02 2.16708895e+02 2.16515584e+02 2.16321553e+02 2.16126786e+02 + 2.15931269e+02 2.15734985e+02 2.15537919e+02 2.15340058e+02 2.15141386e+02 + 2.14941889e+02 2.14741555e+02 2.14540368e+02 2.14338316e+02 2.14135386e+02 + 2.13931566e+02 2.13726842e+02 2.13521203e+02 2.13314637e+02 2.13107133e+02 + 2.12898678e+02 2.12689263e+02 2.12478876e+02 2.12267508e+02 2.12055147e+02 + 2.11841784e+02 2.11627410e+02 2.11412015e+02 2.11195590e+02 2.10978127e+02 + 2.10759616e+02 2.10540050e+02 2.10319420e+02 2.10097719e+02 2.09874940e+02 + 2.09651076e+02 2.09426118e+02 2.09200061e+02 2.08972899e+02 2.08744625e+02 + 2.08515233e+02 2.08284718e+02 2.08053074e+02 2.07820297e+02 2.07586381e+02 + 2.07351321e+02 2.07115114e+02 2.06877755e+02 2.06639241e+02 2.06399567e+02 + 2.06158730e+02 2.05916728e+02 2.05673556e+02 2.05429214e+02 2.05183697e+02 + 2.04937004e+02 2.04689132e+02 2.04440081e+02 2.04189848e+02 2.03938432e+02 + 2.03685832e+02 2.03432047e+02 2.03177076e+02 2.02920920e+02 2.02663577e+02 + 2.02405047e+02 2.02145331e+02 2.01884430e+02 2.01622343e+02 2.01359072e+02 + 2.01094617e+02 2.00828980e+02 2.00562162e+02 2.00294164e+02 2.00024989e+02 + 1.99754638e+02 1.99483114e+02 1.99210418e+02 1.98936553e+02 1.98661523e+02 + 1.98385329e+02 1.98107975e+02 1.97829464e+02 1.97549799e+02 1.97268984e+02 + 1.96987023e+02 1.96703919e+02 1.96419677e+02 1.96134301e+02 1.95847795e+02 + 1.95560163e+02 1.95271410e+02 1.94981542e+02 1.94690563e+02 1.94398477e+02 + 1.94105292e+02 1.93811010e+02 1.93515640e+02 1.93219185e+02 1.92921652e+02 + 1.92623046e+02 1.92323374e+02 1.92022643e+02 1.91720857e+02 1.91418024e+02 + 1.91114151e+02 1.90809243e+02 1.90503308e+02 1.90196352e+02 1.89888383e+02 + 1.89579408e+02 1.89269434e+02 1.88958468e+02 1.88646517e+02 1.88333590e+02 + 1.88019694e+02 1.87704836e+02 1.87389025e+02 1.87072268e+02 1.86754573e+02 + 1.86435949e+02 1.86116403e+02 1.85795944e+02 1.85474580e+02 1.85152320e+02 + 1.84829171e+02 1.84505143e+02 1.84180245e+02 1.83854484e+02 1.83527870e+02 + 1.83200411e+02 1.82872117e+02 1.82542996e+02 1.82213057e+02 1.81882310e+02 + 1.81550763e+02 1.81218426e+02 1.80885308e+02 1.80551418e+02 1.80216766e+02 + 1.79881360e+02 1.79545211e+02 1.79208327e+02 1.78870719e+02 1.78532395e+02 + 1.78193366e+02 1.77853641e+02 1.77513229e+02 1.77172140e+02 1.76830384e+02 + 1.76487971e+02 1.76144911e+02 1.75801212e+02 1.75456885e+02 1.75111940e+02 + 1.74766387e+02 1.74420235e+02 1.74073494e+02 1.73726174e+02 1.73378285e+02 + 1.73029837e+02 1.72680840e+02 1.72331304e+02 1.71981238e+02 1.71630653e+02 + 1.71279558e+02 1.70927963e+02 1.70575879e+02 1.70223315e+02 1.69870281e+02 + 1.69516787e+02 1.69162843e+02 1.68808459e+02 1.68453644e+02 1.68098409e+02 + 1.67742764e+02 1.67386718e+02 1.67030281e+02 1.66673463e+02 1.66316274e+02 + 1.65958724e+02 1.65600822e+02 1.65242578e+02 1.64884002e+02 1.64525104e+02 + 1.64165893e+02 1.63806379e+02 1.63446572e+02 1.63086481e+02 1.62726115e+02 + 1.62365486e+02 1.62004601e+02 1.61643471e+02 1.61282104e+02 1.60920511e+02 + 1.60558701e+02 1.60196684e+02 1.59834467e+02 1.59472062e+02 1.59109477e+02 + 1.58746721e+02 1.58383804e+02 1.58020734e+02 1.57657521e+02 1.57294175e+02 + 1.56930703e+02 1.56567116e+02 1.56203421e+02 1.55839629e+02 1.55475747e+02 + 1.55111785e+02 1.54747751e+02 1.54383654e+02 1.54019504e+02 1.53655308e+02 + 1.53291075e+02 1.52926813e+02 1.52562532e+02 1.52198240e+02 1.51833945e+02 + 1.51469655e+02 1.51105379e+02 1.50741125e+02 1.50376902e+02 1.50012717e+02 + 1.49648578e+02 1.49284494e+02 1.48920473e+02 1.48556522e+02 1.48192650e+02 + 1.47828864e+02 1.47465173e+02 1.47101583e+02 1.46738103e+02 1.46374741e+02 + 1.46011503e+02 1.45648398e+02 1.45285432e+02 1.44922614e+02 1.44559950e+02 + 1.44197449e+02 1.43835116e+02 1.43472960e+02 1.43110988e+02 1.42749206e+02 + 1.42387622e+02 1.42026243e+02 1.41665075e+02 1.41304126e+02 1.40943402e+02 + 1.40582910e+02 1.40222657e+02 1.39862648e+02 1.39502892e+02 1.39143395e+02 + 1.38784162e+02 1.38425200e+02 1.38066516e+02 1.37708117e+02 1.37350007e+02 + 1.36992193e+02 1.36634682e+02 1.36277480e+02 1.35920592e+02 1.35564024e+02 + 1.35207783e+02 1.34851874e+02 1.34496303e+02 1.34141076e+02 1.33786198e+02 + 1.33431675e+02 1.33077512e+02 1.32723715e+02 1.32370290e+02 1.32017242e+02 + 1.31664575e+02 1.31312296e+02 1.30960410e+02 1.30608921e+02 1.30257835e+02 + 1.29907157e+02 1.29556892e+02 1.29207045e+02 1.28857620e+02 1.28508623e+02 + 1.28160058e+02 1.27811930e+02 1.27464243e+02 1.27117003e+02 1.26770214e+02 + 1.26423879e+02 1.26078005e+02 1.25732594e+02 1.25387652e+02 1.25043183e+02 + 1.24699190e+02 1.24355679e+02 1.24012652e+02 1.23670115e+02 1.23328071e+02 + 1.22986525e+02 1.22645479e+02 1.22304939e+02 1.21964907e+02 1.21625388e+02 + 1.21286385e+02 1.20947903e+02 1.20609943e+02 1.20272511e+02 1.19935610e+02 + 1.19599242e+02 1.19263412e+02 1.18928123e+02 1.18593378e+02 1.18259180e+02 + 1.17925533e+02 1.17592440e+02 1.17259904e+02 1.16927927e+02 1.16596514e+02 + 1.16265667e+02 1.15935389e+02 1.15605682e+02 1.15276550e+02 1.14947996e+02 + 1.14620022e+02 1.14292630e+02 1.13965825e+02 1.13639607e+02 1.13313981e+02 + 1.12988947e+02 1.12664510e+02 1.12340671e+02 1.12017432e+02 1.11694796e+02 + 1.11372766e+02 1.11051343e+02 1.10730530e+02 1.10410329e+02 1.10090743e+02 + 1.09771772e+02 1.09453420e+02 1.09135688e+02 1.08818579e+02 1.08502094e+02 + 1.08186235e+02 1.07871004e+02 1.07556404e+02 1.07242435e+02 1.06929099e+02 + 1.06616399e+02 1.06304336e+02 1.05992911e+02 1.05682126e+02 1.05371983e+02 + 1.05062483e+02 1.04753628e+02 1.04445420e+02 1.04137859e+02 1.03830947e+02 + 1.03524685e+02 1.03219075e+02 1.02914119e+02 1.02609816e+02 1.02306169e+02 + 1.02003179e+02 1.01700846e+02 1.01399173e+02 1.01098160e+02 1.00797808e+02 + 1.00498118e+02 1.00199091e+02 9.99007283e+01 9.96030307e+01 9.93059992e+01 + 9.90096345e+01 9.87139375e+01 9.84189091e+01 9.81245500e+01 9.78308609e+01 + 9.75378427e+01 9.72454959e+01 9.69538214e+01 9.66628197e+01 9.63724914e+01 + 9.60828371e+01 9.57938574e+01 9.55055529e+01 9.52179239e+01 9.49309711e+01 + 9.46446949e+01 9.43590956e+01 9.40741738e+01 9.37899297e+01 9.35063638e+01 + 9.32234763e+01 9.29412676e+01 9.26597379e+01 9.23788875e+01 9.20987167e+01 + 9.18192256e+01 9.15404144e+01 9.12622833e+01 9.09848325e+01 9.07080619e+01 + 9.04319719e+01 9.01565623e+01 8.98818333e+01 8.96077848e+01 8.93344170e+01 + 8.90617297e+01 8.87897230e+01 8.85183968e+01 8.82477510e+01 8.79777855e+01 + 8.77085002e+01 8.74398950e+01 8.71719697e+01 8.69047241e+01 8.66381581e+01 + 8.63722714e+01 8.61070638e+01 8.58425350e+01 8.55786849e+01 8.53155130e+01 + 8.50530192e+01 8.47912030e+01 8.45300641e+01 8.42696023e+01 8.40098170e+01 + 8.37507080e+01 8.34922748e+01 8.32345170e+01 8.29774342e+01 8.27210259e+01 + 8.24652916e+01 8.22102308e+01 8.19558432e+01 8.17021280e+01 8.14490849e+01 + 8.11967133e+01 8.09450125e+01 8.06939821e+01 8.04436215e+01 8.01939300e+01 + 7.99449070e+01 7.96965520e+01 7.94488642e+01 7.92018430e+01 7.89554878e+01 + 7.87097978e+01 7.84647724e+01 7.82204109e+01 7.79767125e+01 7.77336765e+01 + 7.74913023e+01 7.72495889e+01 7.70085357e+01 7.67681418e+01 7.65284066e+01 + 7.62893292e+01 7.60509087e+01 7.58131444e+01 7.55760354e+01 7.53395809e+01 + 7.51037800e+01 7.48686319e+01 7.46341358e+01 7.44002906e+01 7.41670955e+01 + 7.39345497e+01 7.37026521e+01 7.34714020e+01 7.32407983e+01 7.30108401e+01 + 7.27815265e+01 7.25528565e+01 7.23248291e+01 7.20974435e+01 7.18706985e+01 + 7.16445932e+01 7.14191266e+01 7.11942977e+01 7.09701055e+01 7.07465489e+01 + 7.05236270e+01 7.03013386e+01 7.00796828e+01 6.98586585e+01 6.96382647e+01 + 6.94185002e+01 6.91993640e+01 6.89808550e+01 6.87629722e+01 6.85457144e+01 + 6.83290806e+01 6.81130696e+01 6.78976804e+01 6.76829117e+01 6.74687626e+01 + 6.72552318e+01 6.70423183e+01 6.68300208e+01 6.66183384e+01 6.64072697e+01 + 6.61968136e+01 6.59869691e+01 6.57777348e+01 6.55691097e+01 6.53610926e+01 + 6.51536823e+01 6.49468776e+01 6.47406774e+01 6.45350803e+01 6.43300853e+01 + 6.41256912e+01 6.39218966e+01 6.37187005e+01 6.35161016e+01 6.33140987e+01 + 6.31126905e+01 6.29118759e+01 6.27116536e+01 6.25120224e+01 6.23129810e+01 + 6.21145283e+01 6.19166629e+01 6.17193836e+01 6.15226892e+01 6.13265785e+01 + 6.11310501e+01 6.09361028e+01 6.07417354e+01 6.05479465e+01 6.03547350e+01 + 6.01620996e+01 5.99700389e+01 5.97785518e+01 5.95876369e+01 5.93972930e+01 + 5.92075188e+01 5.90183130e+01 5.88296743e+01 5.86416014e+01 5.84540932e+01 + 5.82671481e+01 5.80807651e+01 5.78949427e+01 5.77096798e+01 5.75249749e+01 + 5.73408269e+01 5.71572343e+01 5.69741960e+01 5.67917105e+01 5.66097767e+01 + 5.64283931e+01 5.62475586e+01 5.60672718e+01 5.58875313e+01 5.57083359e+01 + 5.55296843e+01 5.53515752e+01 5.51740072e+01 5.49969790e+01 5.48204894e+01 + 5.46445370e+01 5.44691206e+01 5.42942387e+01 5.41198901e+01 5.39460735e+01 + 5.37727875e+01 5.36000309e+01 5.34278023e+01 5.32561004e+01 5.30849240e+01 + 5.29142716e+01 5.27441420e+01 5.25745339e+01 5.24054459e+01 5.22368767e+01 + 5.20688251e+01 5.19012896e+01 5.17342691e+01 5.15677621e+01 5.14017674e+01 + 5.12362836e+01 5.10713095e+01 5.09068437e+01 5.07428849e+01 5.05794318e+01 + 5.04164830e+01 5.02540374e+01 5.00920935e+01 4.99306501e+01 4.97697059e+01 + 4.96092595e+01 4.94493096e+01 4.92898550e+01 4.91308942e+01 4.89724261e+01 + 4.88144493e+01 4.86569626e+01 4.84999645e+01 4.83434539e+01 4.81874293e+01 + 4.80318896e+01 4.78768334e+01 4.77222594e+01 4.75681664e+01 4.74145529e+01 + 4.72614178e+01 4.71087598e+01 4.69565775e+01 4.68048696e+01 4.66536350e+01 + 4.65028722e+01 4.63525800e+01 4.62027572e+01 4.60534023e+01 4.59045143e+01 + 4.57560917e+01 4.56081333e+01 4.54606378e+01 4.53136040e+01 4.51670306e+01 + 4.50209162e+01 4.48752597e+01 4.47300597e+01 4.45853150e+01 4.44410244e+01 + 4.42971865e+01 4.41538001e+01 4.40108640e+01 4.38683768e+01 4.37263374e+01 + 4.35847444e+01 4.34435966e+01 4.33028929e+01 4.31626318e+01 4.30228122e+01 + 4.28834328e+01 4.27444924e+01 4.26059897e+01 4.24679235e+01 4.23302926e+01 + 4.21930956e+01 4.20563315e+01 4.19199989e+01 4.17840967e+01 4.16486235e+01 + 4.15135782e+01 4.13789595e+01 4.12447663e+01 4.11109973e+01 4.09776512e+01 + 4.08447269e+01 4.07122232e+01 4.05801387e+01 4.04484725e+01 4.03172231e+01 + 4.01863895e+01 4.00559704e+01 3.99259645e+01 3.97963709e+01 3.96671881e+01 + 3.95384150e+01 3.94100505e+01 3.92820933e+01 3.91545423e+01 3.90273962e+01 + 3.89006540e+01 3.87743143e+01 3.86483760e+01 3.85228381e+01 3.83976991e+01 + 3.82729581e+01 3.81486139e+01 3.80246652e+01 3.79011109e+01 3.77779498e+01 + 3.76551809e+01 3.75328028e+01 3.74108145e+01 3.72892149e+01 3.71680027e+01 + 3.70471769e+01 3.69267362e+01 3.68066795e+01 3.66870058e+01 3.65677138e+01 + 3.64488024e+01 3.63302705e+01 3.62121170e+01 3.60943407e+01 3.59769405e+01 + 3.58599153e+01 3.57432639e+01 3.56269853e+01 3.55110783e+01 3.53955418e+01 + 3.52803747e+01 3.51655759e+01 3.50511443e+01 3.49370788e+01 3.48233782e+01 + 3.47100416e+01 3.45970677e+01 3.44844555e+01 3.43722040e+01 3.42603119e+01 + 3.41487783e+01 3.40376020e+01 3.39267820e+01 3.38163172e+01 3.37062065e+01 + 3.35964488e+01 3.34870432e+01 3.33779884e+01 3.32692834e+01 3.31609272e+01 + 3.30529188e+01 3.29452570e+01 3.28379408e+01 3.27309691e+01 3.26243410e+01 + 3.25180553e+01 3.24121110e+01 3.23065071e+01 3.22012425e+01 3.20963161e+01 + 3.19917271e+01 3.18874742e+01 3.17835566e+01 3.16799731e+01 3.15767228e+01 + 3.14738046e+01 3.13712175e+01 3.12689604e+01 3.11670325e+01 3.10654326e+01 + 3.09641597e+01 3.08632129e+01 3.07625912e+01 3.06622934e+01 3.05623187e+01 + 3.04626661e+01 3.03633345e+01 3.02643230e+01 3.01656305e+01 3.00672562e+01 + 2.99691989e+01 2.98714578e+01 2.97740318e+01 2.96769199e+01 2.95801213e+01 + 2.94836349e+01 2.93874598e+01 2.92915949e+01 2.91960394e+01 2.91007922e+01 + 2.90058525e+01 2.89112192e+01 2.88168915e+01 2.87228682e+01 2.86291486e+01 + 2.85357317e+01 2.84426165e+01 2.83498020e+01 2.82572874e+01 2.81650717e+01 + 2.80731540e+01 2.79815334e+01 2.78902088e+01 2.77991795e+01 2.77084444e+01 + 2.76180027e+01 2.75278535e+01 2.74379957e+01 2.73484286e+01 2.72591511e+01 + 2.71701625e+01 2.70814617e+01 2.69930480e+01 2.69049203e+01 2.68170778e+01 + 2.67295196e+01 2.66422449e+01 2.65552526e+01 2.64685420e+01 2.63821121e+01 + 2.62959621e+01 2.62100910e+01 2.61244981e+01 2.60391824e+01 2.59541430e+01 + 2.58693792e+01 2.57848899e+01 2.57006744e+01 2.56167319e+01 2.55330613e+01 + 2.54496619e+01 2.53665329e+01 2.52836733e+01 2.52010823e+01 2.51187591e+01 + 2.50367028e+01 2.49549127e+01 2.48733877e+01 2.47921272e+01 2.47111302e+01 + 2.46303959e+01 2.45499236e+01 2.44697123e+01 2.43897613e+01 2.43100697e+01 + 2.42306367e+01 2.41514615e+01 2.40725433e+01 2.39938812e+01 2.39154744e+01 + 2.38373222e+01 2.37594237e+01 2.36817781e+01 2.36043846e+01 2.35272425e+01 + 2.34503509e+01 2.33737090e+01 2.32973160e+01 2.32211711e+01 2.31452736e+01 + 2.30696227e+01 2.29942176e+01 2.29190574e+01 2.28441415e+01 2.27694690e+01 + 2.26950391e+01 2.26208512e+01 2.25469044e+01 2.24731979e+01 2.23997310e+01 + 2.23265030e+01 2.22535130e+01 2.21807603e+01 2.21082441e+01 2.20359638e+01 + 2.19639185e+01 2.18921075e+01 2.18205300e+01 2.17491853e+01 2.16780727e+01 + 2.16071914e+01 2.15365407e+01 2.14661198e+01 2.13959280e+01 2.13259646e+01 + 2.12562288e+01 2.11867200e+01 2.11174373e+01 2.10483801e+01 2.09795476e+01 + 2.09109392e+01 2.08425541e+01 2.07743915e+01 2.07064508e+01 2.06387313e+01 + 2.05712323e+01 2.05039530e+01 2.04368928e+01 2.03700509e+01 2.03034266e+01 + 2.02370194e+01 2.01708283e+01 2.01048528e+01 2.00390922e+01 1.99735458e+01 + 1.99082129e+01 1.98430927e+01 1.97781847e+01 1.97134882e+01 1.96490024e+01 + 1.95847267e+01 1.95206604e+01 1.94568028e+01 1.93931533e+01 1.93297112e+01 + 1.92664759e+01 1.92034466e+01 1.91406227e+01 1.90780035e+01 1.90155885e+01 + 1.89533769e+01 1.88913680e+01 1.88295613e+01 1.87679561e+01 1.87065517e+01 + 1.86453474e+01 1.85843427e+01 1.85235369e+01 1.84629294e+01 1.84025194e+01 + 1.83423064e+01 1.82822898e+01 1.82224689e+01 1.81628431e+01 1.81034117e+01 + 1.80441741e+01 1.79851297e+01 1.79262779e+01 1.78676181e+01 1.78091496e+01 + 1.77508718e+01 1.76927841e+01 1.76348859e+01 1.75771766e+01 1.75196556e+01 + 1.74623222e+01 1.74051759e+01 1.73482160e+01 1.72914420e+01 1.72348532e+01 + 1.71784491e+01 1.71222290e+01 1.70661924e+01 1.70103386e+01 1.69546672e+01 + 1.68991774e+01 1.68438687e+01 1.67887405e+01 1.67337923e+01 1.66790234e+01 + 1.66244333e+01 1.65700214e+01 1.65157871e+01 1.64617298e+01 1.64078490e+01 + 1.63541441e+01 1.63006145e+01 1.62472597e+01 1.61940791e+01 1.61410721e+01 + 1.60882382e+01 1.60355768e+01 1.59830874e+01 1.59307693e+01 1.58786221e+01 + 1.58266452e+01 1.57748380e+01 1.57232000e+01 1.56717306e+01 1.56204294e+01 + 1.55692956e+01 1.55183289e+01 1.54675287e+01 1.54168943e+01 1.53664254e+01 + 1.53161213e+01 1.52659815e+01 1.52160055e+01 1.51661927e+01 1.51165427e+01 + 1.50670549e+01 1.50177287e+01 1.49685637e+01 1.49195593e+01 1.48707150e+01 + 1.48220303e+01 1.47735047e+01 1.47251376e+01 1.46769285e+01 1.46288769e+01 + 1.45809824e+01 1.45332444e+01 1.44856623e+01 1.44382358e+01 1.43909642e+01 + 1.43438471e+01 1.42968840e+01 1.42500743e+01 1.42034177e+01 1.41569135e+01 + 1.41105613e+01 1.40643606e+01 1.40183109e+01 1.39724117e+01 1.39266625e+01 + 1.38810629e+01 1.38356123e+01 1.37903103e+01 1.37451563e+01 1.37001500e+01 + 1.36552907e+01 1.36105781e+01 1.35660117e+01 1.35215910e+01 1.34773155e+01 + 1.34331847e+01 1.33891982e+01 1.33453555e+01 1.33016562e+01 1.32580997e+01 + 1.32146856e+01 1.31714135e+01 1.31282829e+01 1.30852932e+01 1.30424442e+01 + 1.29997352e+01 1.29571659e+01 1.29147358e+01 1.28724444e+01 1.28302914e+01 + 1.27882761e+01 1.27463983e+01 1.27046574e+01 1.26630530e+01 1.26215847e+01 + 1.25802519e+01 1.25390544e+01 1.24979916e+01 1.24570630e+01 1.24162684e+01 + 1.23756071e+01 1.23350789e+01 1.22946831e+01 1.22544196e+01 1.22142877e+01 + 1.21742870e+01 1.21344172e+01 1.20946778e+01 1.20550684e+01 1.20155886e+01 + 1.19762379e+01 1.19370159e+01 1.18979222e+01 1.18589564e+01 1.18201180e+01 + 1.17814067e+01 1.17428220e+01 1.17043636e+01 1.16660310e+01 1.16278237e+01 + 1.15897415e+01 1.15517839e+01 1.15139504e+01 1.14762407e+01 1.14386544e+01 + 1.14011910e+01 1.13638502e+01 1.13266316e+01 1.12895347e+01 1.12525593e+01 + 1.12157048e+01 1.11789708e+01 1.11423571e+01 1.11058632e+01 1.10694887e+01 + 1.10332332e+01 1.09970963e+01 1.09610777e+01 1.09251769e+01 1.08893936e+01 + 1.08537274e+01 1.08181779e+01 1.07827447e+01 1.07474275e+01 1.07122258e+01 + 1.06771394e+01 1.06421677e+01 1.06073105e+01 1.05725674e+01 1.05379379e+01 + 1.05034218e+01 1.04690187e+01 1.04347281e+01 1.04005498e+01 1.03664833e+01 + 1.03325283e+01 1.02986844e+01 1.02649513e+01 1.02313286e+01 1.01978159e+01 + 1.01644129e+01 1.01311193e+01 1.00979346e+01 1.00648585e+01 1.00318907e+01 + 9.99903076e+00 9.96627839e+00 9.93363322e+00 9.90109490e+00 9.86866308e+00 + 9.83614239e+00 9.80319678e+00 9.76982516e+00 9.73603257e+00 9.70182408e+00 + 9.66720477e+00 9.63217974e+00 9.59675413e+00 9.56093309e+00 9.52472178e+00 + 9.48812539e+00 9.45114912e+00 9.41379820e+00 9.37607786e+00 9.33799336e+00 + 9.29954996e+00 9.26075296e+00 9.22160764e+00 9.18211931e+00 9.14229331e+00 + 9.10213495e+00 9.06164959e+00 9.02084257e+00 8.97971926e+00 8.93828502e+00 + 8.89654524e+00 8.85450530e+00 8.81217059e+00 8.76954651e+00 8.72663845e+00 + 8.68345183e+00 8.63999205e+00 8.59626452e+00 8.55227466e+00 8.50802788e+00 + 8.46352960e+00 8.41878522e+00 8.37380017e+00 8.32857986e+00 8.28312970e+00 + 8.23745510e+00 8.19156147e+00 8.14545420e+00 8.09913868e+00 8.05262033e+00 + 8.00590451e+00 7.95899661e+00 7.91190200e+00 7.86462604e+00 7.81717409e+00 + 7.76955150e+00 7.72176361e+00 7.67381573e+00 7.62571320e+00 7.57746130e+00 + 7.52906535e+00 7.48053061e+00 7.43186235e+00 7.38306584e+00 7.33414631e+00 + 7.28510898e+00 7.23595907e+00 7.18670176e+00 7.13734225e+00 7.08788568e+00 + 7.03833721e+00 6.98870196e+00 6.93898503e+00 6.88919151e+00 6.83932648e+00 + 6.78939499e+00 6.73940205e+00 6.68935268e+00 6.63925187e+00 6.58910458e+00 + 6.53891575e+00 6.48869031e+00 6.43843314e+00 6.38814912e+00 6.33784310e+00 + 6.28751990e+00 6.23718433e+00 6.18684115e+00 6.13649511e+00 6.08615093e+00 + 6.03581331e+00 5.98548692e+00 5.93517639e+00 5.88488633e+00 5.83462134e+00 + 5.78438596e+00 5.73418472e+00 5.68402212e+00 5.63390262e+00 5.58383066e+00 + 5.53381065e+00 5.48384696e+00 5.43394394e+00 5.38410590e+00 5.33433712e+00 + 5.28464184e+00 5.23502429e+00 5.18548865e+00 5.13603907e+00 5.08667967e+00 + 5.03741453e+00 4.98824769e+00 4.93918318e+00 4.89022498e+00 4.84137703e+00 + 4.79264324e+00 4.74402749e+00 4.69553363e+00 4.64716544e+00 4.59892671e+00 + 4.55082117e+00 4.50285251e+00 4.45502439e+00 4.40734043e+00 4.35980422e+00 + 4.31241932e+00 4.26518921e+00 4.21811739e+00 4.17120729e+00 4.12446230e+00 + 4.07788579e+00 4.03148106e+00 3.98525142e+00 3.93920009e+00 3.89333028e+00 + 3.84764517e+00 3.80214787e+00 3.75684147e+00 3.71172903e+00 3.66681354e+00 + 3.62209799e+00 3.57758528e+00 3.53327833e+00 3.48917997e+00 3.44529302e+00 + 3.40162024e+00 3.35816437e+00 3.31492809e+00 3.27191405e+00 3.22912486e+00 + 3.18656308e+00 3.14423125e+00 3.10213185e+00 3.06026733e+00 3.01864009e+00 + 2.97725249e+00 2.93610687e+00 2.89520550e+00 2.85455062e+00 2.81414444e+00 + 2.77398912e+00 2.73408678e+00 2.69443950e+00 2.65504931e+00 2.61591822e+00 + 2.57704818e+00 2.53844110e+00 2.50009887e+00 2.46202332e+00 2.42421623e+00 + 2.38667938e+00 2.34941446e+00 2.31242315e+00 2.27570709e+00 2.23926786e+00 + 2.20310702e+00 2.16722608e+00 2.13162650e+00 2.09630973e+00 2.06127714e+00 + 2.02653009e+00 1.99206990e+00 1.95789783e+00 1.92401511e+00 1.89042294e+00 + 1.85712247e+00 1.82411481e+00 1.79140103e+00 1.75898217e+00 1.72685923e+00 + 1.69503316e+00 1.66350488e+00 1.63227527e+00 1.60134517e+00 1.57071538e+00 + 1.54038667e+00 1.51035976e+00 1.48063534e+00 1.45121406e+00 1.42209654e+00 + 1.39328335e+00 1.36477502e+00 1.33657207e+00 1.30867494e+00 1.28108408e+00 + 1.25379988e+00 1.22682267e+00 1.20015280e+00 1.17379052e+00 1.14773611e+00 + 1.12198975e+00 1.09655164e+00 1.07142191e+00 1.04660066e+00 1.02208796e+00 + 9.97883860e-01 9.73988350e-01 9.50401399e-01 9.27122941e-01 9.04152875e-01 + 8.81491067e-01 8.59137350e-01 8.37091523e-01 8.15353353e-01 7.93922575e-01 + 7.72798890e-01 7.51981967e-01 7.31471445e-01 7.11266929e-01 6.91367995e-01 + 6.71774185e-01 6.52485014e-01 6.33499962e-01 6.14818482e-01 5.96439995e-01 + 5.78363892e-01 5.60589536e-01 5.43116259e-01 5.25943365e-01 5.09070129e-01 + 4.92495797e-01 4.76219586e-01 4.60240687e-01 4.44558262e-01 4.29171445e-01 + 4.14079344e-01 3.99281039e-01 3.84775584e-01 3.70562007e-01 3.56639309e-01 + 3.43006466e-01 3.29662427e-01 3.16606118e-01 3.03836438e-01 2.91352263e-01 + 2.79152444e-01 2.67235806e-01 2.55601154e-01 2.44247267e-01 2.33172900e-01 + 2.22376787e-01 2.11857640e-01 2.01614145e-01 1.91644970e-01 1.81948759e-01 + 1.72524135e-01 1.63369700e-01 1.54484036e-01 1.45865702e-01 1.37513239e-01 + 1.29425168e-01 1.21599989e-01 1.14036184e-01 1.06732215e-01 9.96865252e-02 + 9.28975401e-02 8.63636667e-02 8.00832940e-02 7.40547937e-02 6.82765202e-02 + 6.27468109e-02 5.74639865e-02 5.24263517e-02 4.76321948e-02 4.30797886e-02 + 3.87673904e-02 3.46932424e-02 3.08555720e-02 2.72525920e-02 2.38825011e-02 + 2.07434841e-02 1.78337121e-02 1.51513430e-02 1.26945216e-02 1.04613800e-02 + 8.45003801e-03 6.65860321e-03 5.08517143e-03 3.72782701e-03 2.58464306e-03 + 1.65368178e-03 9.32994753e-04 4.20623265e-04 1.14598566e-04 1.29421836e-05 + 1.42532190e+04 1.42532190e+04 8.35034822e+03 5.54302535e+03 4.13949198e+03 + 3.29747342e+03 2.73621144e+03 2.33538110e+03 2.03481994e+03 1.80110437e+03 + 1.61418025e+03 1.46128584e+03 1.33391334e+03 1.22617273e+03 1.13385685e+03 + 1.05388046e+03 9.83929637e+02 9.22234903e+02 8.67420006e+02 8.18398433e+02 + 7.74300975e+02 7.34423991e+02 6.98191774e+02 6.65128743e+02 6.34838584e+02 + 6.06988393e+02 5.81296485e+02 5.57522906e+02 5.35461985e+02 5.14936419e+02 + 4.95792548e+02 4.77896540e+02 4.61131293e+02 4.45393901e+02 4.30593565e+02 + 4.16649865e+02 4.03491318e+02 3.91054168e+02 3.79281373e+02 3.68121742e+02 + 3.57529204e+02 3.47462184e+02 3.37883066e+02 3.28757736e+02 3.20055180e+02 + 3.11747144e+02 3.03807830e+02 2.96213636e+02 2.88942929e+02 2.81975842e+02 + 2.75294097e+02 2.68880852e+02 2.62720560e+02 2.56798848e+02 2.51102410e+02 + 2.45618906e+02 2.40336878e+02 2.35245675e+02 2.30335379e+02 2.25596746e+02 + 2.21021147e+02 2.16600522e+02 2.12327330e+02 2.08194509e+02 2.04195440e+02 + 2.00323909e+02 1.96574084e+02 1.92940476e+02 1.89417923e+02 1.86001562e+02 + 1.82686808e+02 1.79469334e+02 1.76345054e+02 1.73310107e+02 1.70360841e+02 + 1.67493798e+02 1.64705704e+02 1.61993454e+02 1.59354103e+02 1.56784856e+02 + 1.54283057e+02 1.51846183e+02 1.49471832e+02 1.47157720e+02 1.44901673e+02 + 1.42701615e+02 1.40555573e+02 1.38461660e+02 1.36418077e+02 1.34423107e+02 + 1.32475108e+02 1.30572512e+02 1.28713816e+02 1.26897587e+02 1.25122449e+02 + 1.23387086e+02 1.21690237e+02 1.20030692e+02 1.18407293e+02 1.16818927e+02 + 1.15264525e+02 1.13743063e+02 1.12253557e+02 1.10795059e+02 1.09366659e+02 + 1.07967484e+02 1.06596690e+02 1.05253468e+02 1.03937038e+02 1.02646649e+02 + 1.01381577e+02 1.00141124e+02 9.89246189e+01 9.77314125e+01 9.65608793e+01 + 9.54124160e+01 9.42854397e+01 9.31793879e+01 9.20937174e+01 9.10279032e+01 + 8.99814378e+01 8.89538311e+01 8.79446087e+01 8.69533121e+01 8.59794975e+01 + 8.50227355e+01 8.40826106e+01 8.31587203e+01 8.22506749e+01 8.13580969e+01 + 8.04806206e+01 7.96178913e+01 7.87695656e+01 7.79353102e+01 7.71148019e+01 + 7.63077273e+01 7.55137824e+01 7.47326719e+01 7.39641093e+01 7.32078166e+01 + 7.24635236e+01 7.17309679e+01 7.10098949e+01 7.03000567e+01 6.96012128e+01 + 6.89131293e+01 6.82355787e+01 6.75683399e+01 6.69111977e+01 6.62639431e+01 + 6.56263723e+01 6.49982874e+01 6.43794956e+01 6.37698091e+01 6.31690453e+01 + 6.25770263e+01 6.19935787e+01 6.14185338e+01 6.08517272e+01 6.02929986e+01 + 5.97421918e+01 5.91991547e+01 5.86637390e+01 5.81357998e+01 5.76151962e+01 + 5.71017906e+01 5.65954489e+01 5.60960400e+01 5.56034362e+01 5.51175129e+01 + 5.46381485e+01 5.41652242e+01 5.36986241e+01 5.32382349e+01 5.27839462e+01 + 5.23356501e+01 5.18932410e+01 5.14566160e+01 5.10256745e+01 5.06003182e+01 + 5.01804510e+01 4.97659789e+01 4.93568102e+01 4.89528552e+01 4.85540261e+01 + 4.81602371e+01 4.77714044e+01 4.73874459e+01 4.70082813e+01 4.66338322e+01 + 4.62640217e+01 4.58987746e+01 4.55380174e+01 4.51816782e+01 4.48296865e+01 + 4.44819732e+01 4.41384709e+01 4.37991135e+01 4.34638362e+01 4.31325757e+01 + 4.28052699e+01 4.24818579e+01 4.21622802e+01 4.18464784e+01 4.15343953e+01 + 4.12259749e+01 4.09211624e+01 4.06199038e+01 4.03221464e+01 4.00278386e+01 + 3.97369296e+01 3.94493698e+01 3.91651104e+01 3.88841037e+01 3.86063027e+01 + 3.83316615e+01 3.80601351e+01 3.77916792e+01 3.75262504e+01 3.72638062e+01 + 3.70043048e+01 3.67477053e+01 3.64939673e+01 3.62430514e+01 3.59949189e+01 + 3.57495317e+01 3.55068525e+01 3.52668446e+01 3.50294720e+01 3.47946994e+01 + 3.45624920e+01 3.43328158e+01 3.41056372e+01 3.38809233e+01 3.36586419e+01 + 3.34387612e+01 3.32212499e+01 3.30060774e+01 3.27932136e+01 3.25826288e+01 + 3.23742940e+01 3.21681806e+01 3.19642604e+01 3.17625057e+01 3.15628894e+01 + 3.13653847e+01 3.11699654e+01 3.09766056e+01 3.07852799e+01 3.05959632e+01 + 3.04086309e+01 3.02232588e+01 3.00398232e+01 2.98583005e+01 2.96786677e+01 + 2.95009021e+01 2.93249814e+01 2.91508835e+01 2.89785868e+01 2.88080701e+01 + 2.86393122e+01 2.84722926e+01 2.83069909e+01 2.81433870e+01 2.79814613e+01 + 2.78211942e+01 2.76625666e+01 2.75055597e+01 2.73501548e+01 2.71963336e+01 + 2.70440781e+01 2.68933704e+01 2.67441931e+01 2.65965287e+01 2.64503604e+01 + 2.63056711e+01 2.61624445e+01 2.60206641e+01 2.58803138e+01 2.57413777e+01 + 2.56038401e+01 2.54676856e+01 2.53328988e+01 2.51994647e+01 2.50673684e+01 + 2.49365953e+01 2.48071308e+01 2.46789607e+01 2.45520708e+01 2.44264471e+01 + 2.43020760e+01 2.41789438e+01 2.40570371e+01 2.39363426e+01 2.38168472e+01 + 2.36985380e+01 2.35814021e+01 2.34654270e+01 2.33506000e+01 2.32369090e+01 + 2.31243415e+01 2.30128857e+01 2.29025295e+01 2.27932611e+01 2.26850689e+01 + 2.25779413e+01 2.24718668e+01 2.23668342e+01 2.22628324e+01 2.21598501e+01 + 2.20578765e+01 2.19569007e+01 2.18569121e+01 2.17578999e+01 2.16598537e+01 + 2.15627630e+01 2.14666176e+01 2.13714072e+01 2.12771217e+01 2.11837511e+01 + 2.10912855e+01 2.09997150e+01 2.09090298e+01 2.08192204e+01 2.07302772e+01 + 2.06421906e+01 2.05549512e+01 2.04685498e+01 2.03829771e+01 2.02982239e+01 + 2.02142812e+01 2.01311398e+01 2.00487910e+01 1.99672258e+01 1.98864354e+01 + 1.98064111e+01 1.97271442e+01 1.96486262e+01 1.95708485e+01 1.94938027e+01 + 1.94174804e+01 1.93418732e+01 1.92669729e+01 1.91927713e+01 1.91192603e+01 + 1.90464316e+01 1.89742774e+01 1.89027897e+01 1.88319605e+01 1.87617819e+01 + 1.86922463e+01 1.86233458e+01 1.85550727e+01 1.84874195e+01 1.84203785e+01 + 1.83539421e+01 1.82881030e+01 1.82228537e+01 1.81581868e+01 1.80940949e+01 + 1.80305708e+01 1.79676074e+01 1.79051973e+01 1.78433334e+01 1.77820088e+01 + 1.77212163e+01 1.76609489e+01 1.76011998e+01 1.75419620e+01 1.74832287e+01 + 1.74249931e+01 1.73672484e+01 1.73099880e+01 1.72532052e+01 1.71968933e+01 + 1.71410459e+01 1.70856564e+01 1.70307183e+01 1.69762252e+01 1.69221707e+01 + 1.68685486e+01 1.68153525e+01 1.67625761e+01 1.67102134e+01 1.66582581e+01 + 1.66067041e+01 1.65555455e+01 1.65047762e+01 1.64543902e+01 1.64043816e+01 + 1.63547447e+01 1.63054735e+01 1.62565623e+01 1.62080053e+01 1.61597970e+01 + 1.61119317e+01 1.60644038e+01 1.60172077e+01 1.59703381e+01 1.59237895e+01 + 1.58775564e+01 1.58316337e+01 1.57860159e+01 1.57406980e+01 1.56956746e+01 + 1.56509407e+01 1.56064912e+01 1.55623210e+01 1.55184252e+01 1.54747989e+01 + 1.54314371e+01 1.53883351e+01 1.53454881e+01 1.53028914e+01 1.52605403e+01 + 1.52184302e+01 1.51765565e+01 1.51349148e+01 1.50935005e+01 1.50523092e+01 + 1.50113367e+01 1.49705786e+01 1.49300307e+01 1.48896888e+01 1.48495487e+01 + 1.48096064e+01 1.47698579e+01 1.47302991e+01 1.46909262e+01 1.46517353e+01 + 1.46127226e+01 1.45738843e+01 1.45352167e+01 1.44967163e+01 1.44583793e+01 + 1.44202022e+01 1.43821817e+01 1.43443142e+01 1.43065963e+01 1.42690248e+01 + 1.42315964e+01 1.41943079e+01 1.41571561e+01 1.41201380e+01 1.40832504e+01 + 1.40464903e+01 1.40098550e+01 1.39733414e+01 1.39369467e+01 1.39006681e+01 + 1.38645030e+01 1.38284486e+01 1.37925024e+01 1.37566617e+01 1.37209240e+01 + 1.36852870e+01 1.36497481e+01 1.36143050e+01 1.35789554e+01 1.35436970e+01 + 1.35085277e+01 1.34734452e+01 1.34384476e+01 1.34035326e+01 1.33686983e+01 + 1.33339428e+01 1.32992641e+01 1.32646604e+01 1.32301299e+01 1.31956707e+01 + 1.31612811e+01 1.31269596e+01 1.30927044e+01 1.30585140e+01 1.30243869e+01 + 1.29903215e+01 1.29563163e+01 1.29223701e+01 1.28884813e+01 1.28546488e+01 + 1.28208712e+01 1.27871473e+01 1.27534759e+01 1.27198558e+01 1.26862859e+01 + 1.26527651e+01 1.26192925e+01 1.25858669e+01 1.25524875e+01 1.25191534e+01 + 1.24858635e+01 1.24526171e+01 1.24194134e+01 1.23862516e+01 1.23531309e+01 + 1.23200507e+01 1.22870102e+01 1.22540087e+01 1.22210458e+01 1.21881208e+01 + 1.21552331e+01 1.21223823e+01 1.20895678e+01 1.20567892e+01 1.20240460e+01 + 1.19913379e+01 1.19586644e+01 1.19260252e+01 1.18934200e+01 1.18608486e+01 + 1.18283105e+01 1.17958056e+01 1.17633336e+01 1.17308944e+01 1.16984877e+01 + 1.16661134e+01 1.16337715e+01 1.16014616e+01 1.15691839e+01 1.15369381e+01 + 1.15047243e+01 1.14725424e+01 1.14403924e+01 1.14082743e+01 1.13761882e+01 + 1.13441340e+01 1.13121118e+01 1.12801217e+01 1.12481638e+01 1.12162382e+01 + 1.11843451e+01 1.11524844e+01 1.11206564e+01 1.10888613e+01 1.10570992e+01 + 1.10253702e+01 1.09936747e+01 1.09620128e+01 1.09303847e+01 1.08987906e+01 + 1.08672309e+01 1.08357056e+01 1.08042152e+01 1.07727598e+01 1.07413398e+01 + 1.07099554e+01 1.06786069e+01 1.06472947e+01 1.06160189e+01 1.05847800e+01 + 1.05535783e+01 1.05224140e+01 1.04912875e+01 1.04601992e+01 1.04291494e+01 + 1.03981385e+01 1.03671667e+01 1.03362344e+01 1.03053421e+01 1.02744901e+01 + 1.02436786e+01 1.02129082e+01 1.01821791e+01 1.01514918e+01 1.01208466e+01 + 1.00902439e+01 1.00596841e+01 1.00291676e+01 9.99869465e+00 9.96826576e+00 + 9.93788127e+00 9.90754156e+00 9.87724703e+00 9.84699806e+00 9.81679503e+00 + 9.78663832e+00 9.75652833e+00 9.72646541e+00 9.69644998e+00 9.66648239e+00 + 9.63656303e+00 9.60669228e+00 9.57687051e+00 9.54709811e+00 9.51737543e+00 + 9.48770285e+00 9.45808075e+00 9.42850948e+00 9.39898941e+00 9.36952091e+00 + 9.34010432e+00 9.31074002e+00 9.28142834e+00 9.25216964e+00 9.22296427e+00 + 9.19381257e+00 9.16471488e+00 9.13567154e+00 9.10668288e+00 9.07774924e+00 + 9.04887094e+00 9.02004831e+00 8.99128166e+00 8.96257131e+00 8.93391757e+00 + 8.90532075e+00 8.87678116e+00 8.84829910e+00 8.81987485e+00 8.79150872e+00 + 8.76320099e+00 8.73495195e+00 8.70676187e+00 8.67863103e+00 8.65055970e+00 + 8.62254815e+00 8.59459664e+00 8.56670543e+00 8.53887477e+00 8.51110492e+00 + 8.48339611e+00 8.45574859e+00 8.42816259e+00 8.40063835e+00 8.37317608e+00 + 8.34577603e+00 8.31843839e+00 8.29116339e+00 8.26395124e+00 8.23680214e+00 + 8.20971629e+00 8.18269388e+00 8.15573511e+00 8.12884017e+00 8.10200923e+00 + 8.07524248e+00 8.04854008e+00 8.02190221e+00 7.99532904e+00 7.96882072e+00 + 7.94237740e+00 7.91599925e+00 7.88968640e+00 7.86343901e+00 7.83725720e+00 + 7.81114112e+00 7.78509089e+00 7.75910664e+00 7.73318849e+00 7.70733656e+00 + 7.68155097e+00 7.65583181e+00 7.63017921e+00 7.60459325e+00 7.57907404e+00 + 7.55362167e+00 7.52823623e+00 7.50291780e+00 7.47766647e+00 7.45248231e+00 + 7.42736540e+00 7.40231580e+00 7.37733359e+00 7.35241882e+00 7.32757156e+00 + 7.30279186e+00 7.27807976e+00 7.25343533e+00 7.22885860e+00 7.20434961e+00 + 7.17990840e+00 7.15553501e+00 7.13122946e+00 7.10699178e+00 7.08282200e+00 + 7.05872014e+00 7.03468621e+00 7.01072022e+00 6.98682220e+00 6.96299214e+00 + 6.93923004e+00 6.91553592e+00 6.89190977e+00 6.86835159e+00 6.84486136e+00 + 6.82143907e+00 6.79808472e+00 6.77479828e+00 6.75157975e+00 6.72842908e+00 + 6.70534627e+00 6.68233128e+00 6.65938408e+00 6.63650464e+00 6.61369293e+00 + 6.59094890e+00 6.56827252e+00 6.54566374e+00 6.52312252e+00 6.50064881e+00 + 6.47824255e+00 6.45590371e+00 6.43363221e+00 6.41142801e+00 6.38929105e+00 + 6.36722125e+00 6.34521857e+00 6.32328293e+00 6.30141427e+00 6.27961251e+00 + 6.25787758e+00 6.23620941e+00 6.21460793e+00 6.19307305e+00 6.17160469e+00 + 6.15020277e+00 6.12886721e+00 6.10759793e+00 6.08639483e+00 6.06525782e+00 + 6.04418682e+00 6.02318173e+00 6.00224246e+00 5.98136891e+00 5.96056098e+00 + 5.93981858e+00 5.91914161e+00 5.89852995e+00 5.87798352e+00 5.85750219e+00 + 5.83708588e+00 5.81673446e+00 5.79644783e+00 5.77622588e+00 5.75606849e+00 + 5.73597556e+00 5.71594697e+00 5.69598259e+00 5.67608233e+00 5.65624605e+00 + 5.63647363e+00 5.61676497e+00 5.59711992e+00 5.57753838e+00 5.55802022e+00 + 5.53856531e+00 5.51917352e+00 5.49984474e+00 5.48057882e+00 5.46137565e+00 + 5.44223509e+00 5.42315701e+00 5.40414129e+00 5.38518777e+00 5.36629635e+00 + 5.34746687e+00 5.32869920e+00 5.30999322e+00 5.29134877e+00 5.27276573e+00 + 5.25424395e+00 5.23578330e+00 5.21738364e+00 5.19904482e+00 5.18076671e+00 + 5.16254917e+00 5.14439204e+00 5.12629520e+00 5.10825849e+00 5.09028177e+00 + 5.07236490e+00 5.05450773e+00 5.03671012e+00 5.01897192e+00 5.00129298e+00 + 4.98367316e+00 4.96611231e+00 4.94861028e+00 4.93116692e+00 4.91378209e+00 + 4.89645563e+00 4.87918740e+00 4.86197724e+00 4.84482501e+00 4.82773055e+00 + 4.81069372e+00 4.79371436e+00 4.77679233e+00 4.75992746e+00 4.74311961e+00 + 4.72636862e+00 4.70967435e+00 4.69303663e+00 4.67645533e+00 4.65993027e+00 + 4.64346132e+00 4.62704831e+00 4.61069110e+00 4.59438952e+00 4.57814343e+00 + 4.56195267e+00 4.54581708e+00 4.52973652e+00 4.51371082e+00 4.49773984e+00 + 4.48182341e+00 4.46596139e+00 4.45015361e+00 4.43439993e+00 4.41870018e+00 + 4.40305422e+00 4.38746188e+00 4.37192301e+00 4.35643746e+00 4.34100508e+00 + 4.32562570e+00 4.31029917e+00 4.29502534e+00 4.27980405e+00 4.26463514e+00 + 4.24951847e+00 4.23445387e+00 4.21944120e+00 4.20448029e+00 4.18957099e+00 + 4.17471315e+00 4.15990661e+00 4.14515122e+00 4.13044682e+00 4.11579326e+00 + 4.10119038e+00 4.08663804e+00 4.07213607e+00 4.05768433e+00 4.04328265e+00 + 4.02893089e+00 4.01462889e+00 4.00037650e+00 3.98617357e+00 3.97201993e+00 + 3.95791545e+00 3.94385997e+00 3.92985333e+00 3.91589538e+00 3.90198597e+00 + 3.88812495e+00 3.87431217e+00 3.86054747e+00 3.84683071e+00 3.83316173e+00 + 3.81954038e+00 3.80596652e+00 3.79243998e+00 3.77896063e+00 3.76552831e+00 + 3.75214287e+00 3.73880416e+00 3.72551204e+00 3.71226635e+00 3.69906694e+00 + 3.68591367e+00 3.67280639e+00 3.65974495e+00 3.64672921e+00 3.63375901e+00 + 3.62083421e+00 3.60795466e+00 3.59512021e+00 3.58233073e+00 3.56958605e+00 + 3.55688605e+00 3.54423056e+00 3.53161946e+00 3.51905258e+00 3.50652979e+00 + 3.49405095e+00 3.48161590e+00 3.46922451e+00 3.45687663e+00 3.44457213e+00 + 3.43231084e+00 3.42009264e+00 3.40791739e+00 3.39578493e+00 3.38369513e+00 + 3.37164785e+00 3.35964295e+00 3.34768028e+00 3.33575971e+00 3.32388109e+00 + 3.31204429e+00 3.30024917e+00 3.28849559e+00 3.27678341e+00 3.26511249e+00 + 3.25348269e+00 3.24189388e+00 3.23034592e+00 3.21883867e+00 3.20737200e+00 + 3.19594577e+00 3.18455984e+00 3.17321408e+00 3.16190835e+00 3.15064252e+00 + 3.13941646e+00 3.12823003e+00 3.11708309e+00 3.10597552e+00 3.09490717e+00 + 3.08387793e+00 3.07288764e+00 3.06193620e+00 3.05102345e+00 3.04014927e+00 + 3.02931353e+00 3.01851611e+00 3.00775685e+00 2.99703565e+00 2.98635237e+00 + 2.97570688e+00 2.96509904e+00 2.95452874e+00 2.94399585e+00 2.93350023e+00 + 2.92304176e+00 2.91262032e+00 2.90223577e+00 2.89188799e+00 2.88157685e+00 + 2.87130223e+00 2.86106401e+00 2.85086205e+00 2.84069624e+00 2.83056645e+00 + 2.82047255e+00 2.81041442e+00 2.80039195e+00 2.79040500e+00 2.78045345e+00 + 2.77053719e+00 2.76065609e+00 2.75081003e+00 2.74099889e+00 2.73122254e+00 + 2.72148088e+00 2.71177377e+00 2.70210110e+00 2.69246275e+00 2.68285861e+00 + 2.67328854e+00 2.66375244e+00 2.65425019e+00 2.64478167e+00 2.63534676e+00 + 2.62594535e+00 2.61657732e+00 2.60724255e+00 2.59794093e+00 2.58867235e+00 + 2.57943668e+00 2.57023382e+00 2.56106365e+00 2.55192606e+00 2.54282093e+00 + 2.53374816e+00 2.52470762e+00 2.51569920e+00 2.50672280e+00 2.49777830e+00 + 2.48886559e+00 2.47998457e+00 2.47113511e+00 2.46231711e+00 2.45353046e+00 + 2.44477506e+00 2.43605078e+00 2.42735752e+00 2.41869518e+00 2.41006365e+00 + 2.40146281e+00 2.39289257e+00 2.38435280e+00 2.37584342e+00 2.36736430e+00 + 2.35891535e+00 2.35049646e+00 2.34210752e+00 2.33374843e+00 2.32541909e+00 + 2.31711938e+00 2.30884921e+00 2.30060847e+00 2.29239706e+00 2.28421488e+00 + 2.27606182e+00 2.26793778e+00 2.25984266e+00 2.25177636e+00 2.24373877e+00 + 2.23572980e+00 2.22774934e+00 2.21979730e+00 2.21187357e+00 2.20397806e+00 + 2.19611066e+00 2.18827128e+00 2.18045982e+00 2.17267618e+00 2.16492026e+00 + 2.15719196e+00 2.14949119e+00 2.14181785e+00 2.13417184e+00 2.12655307e+00 + 2.11896144e+00 2.11139686e+00 2.10385922e+00 2.09634844e+00 2.08886442e+00 + 2.08140707e+00 2.07397629e+00 2.06657198e+00 2.05919406e+00 2.05184243e+00 + 2.04451700e+00 2.03721767e+00 2.02994436e+00 2.02269697e+00 2.01547541e+00 + 2.00827959e+00 2.00110941e+00 1.99396479e+00 1.98684564e+00 1.97975187e+00 + 1.97268338e+00 1.96564009e+00 1.95862191e+00 1.95162875e+00 1.94466051e+00 + 1.93771713e+00 1.93079849e+00 1.92390453e+00 1.91703514e+00 1.91019025e+00 + 1.90336976e+00 1.89657359e+00 1.88980166e+00 1.88305387e+00 1.87633015e+00 + 1.86963040e+00 1.86295454e+00 1.85630249e+00 1.84967417e+00 1.84306948e+00 + 1.83648835e+00 1.82993069e+00 1.82339642e+00 1.81688545e+00 1.81039771e+00 + 1.80393311e+00 1.79749156e+00 1.79107300e+00 1.78467732e+00 1.77830446e+00 + 1.77195434e+00 1.76562686e+00 1.75932196e+00 1.75303955e+00 1.74677955e+00 + 1.74054188e+00 1.73432647e+00 1.72813323e+00 1.72196208e+00 1.71581295e+00 + 1.70968576e+00 1.70358043e+00 1.69749689e+00 1.69143505e+00 1.68539483e+00 + 1.67937617e+00 1.67337899e+00 1.66740320e+00 1.66144874e+00 1.65551552e+00 + 1.64960347e+00 1.64371252e+00 1.63784260e+00 1.63199361e+00 1.62616550e+00 + 1.62035819e+00 1.61457160e+00 1.60880567e+00 1.60306030e+00 1.59733545e+00 + 1.59163102e+00 1.58594695e+00 1.58028317e+00 1.57463960e+00 1.56901617e+00 + 1.56341281e+00 1.55782945e+00 1.55226601e+00 1.54672244e+00 1.54119865e+00 + 1.53569457e+00 1.53021014e+00 1.52474528e+00 1.51929993e+00 1.51387402e+00 + 1.50846747e+00 1.50308023e+00 1.49771221e+00 1.49236335e+00 1.48703358e+00 + 1.48172284e+00 1.47643106e+00 1.47115816e+00 1.46590409e+00 1.46066878e+00 + 1.45545215e+00 1.45025414e+00 1.44507469e+00 1.43991373e+00 1.43477119e+00 + 1.42964701e+00 1.42454112e+00 1.41945346e+00 1.41438397e+00 1.40933257e+00 + 1.40429920e+00 1.39928380e+00 1.39428631e+00 1.38930666e+00 1.38434479e+00 + 1.37940063e+00 1.37447412e+00 1.36956521e+00 1.36467381e+00 1.35979988e+00 + 1.35494335e+00 1.35010416e+00 1.34528225e+00 1.34047755e+00 1.33569001e+00 + 1.33091956e+00 1.32616615e+00 1.32142970e+00 1.31671017e+00 1.31200748e+00 + 1.30732159e+00 1.30265243e+00 1.29799993e+00 1.29336405e+00 1.28874473e+00 + 1.28414189e+00 1.27955549e+00 1.27498547e+00 1.27043177e+00 1.26589432e+00 + 1.26137308e+00 1.25686798e+00 1.25237896e+00 1.24790598e+00 1.24344896e+00 + 1.23900786e+00 1.23458262e+00 1.23017318e+00 1.22577949e+00 1.22140148e+00 + 1.21703911e+00 1.21269231e+00 1.20836104e+00 1.20404523e+00 1.19974484e+00 + 1.19545980e+00 1.19119006e+00 1.18693557e+00 1.18269627e+00 1.17847210e+00 + 1.17426303e+00 1.17006898e+00 1.16588991e+00 1.16172576e+00 1.15757649e+00 + 1.15344203e+00 1.14932233e+00 1.14521735e+00 1.14112702e+00 1.13705130e+00 + 1.13299014e+00 1.12894348e+00 1.12491127e+00 1.12089346e+00 1.11689000e+00 + 1.11290083e+00 1.10892591e+00 1.10496519e+00 1.10101861e+00 1.09708612e+00 + 1.09316768e+00 1.08926323e+00 1.08537272e+00 1.08149611e+00 1.07763334e+00 + 1.07378437e+00 1.06994914e+00 1.06612761e+00 1.06231972e+00 1.05852544e+00 + 1.05474470e+00 1.05097747e+00 1.04722369e+00 1.04348332e+00 1.03975630e+00 + 1.03604260e+00 1.03234216e+00 1.02865493e+00 1.02498087e+00 1.02131993e+00 + 1.01767207e+00 1.01403724e+00 1.01041538e+00 1.00680646e+00 1.00321043e+00 + 9.99627246e-01 9.96056856e-01 9.92499216e-01 9.88954283e-01 9.85422010e-01 + 9.81902352e-01 9.78395264e-01 9.74900702e-01 9.71418620e-01 9.67948974e-01 + 9.64491719e-01 9.61046812e-01 9.57614208e-01 9.54193864e-01 9.50785735e-01 + 9.47389779e-01 9.44005950e-01 9.40634207e-01 9.37274506e-01 9.33926805e-01 + 9.30591059e-01 9.27267227e-01 9.23955266e-01 9.20655134e-01 9.17366788e-01 + 9.14090187e-01 9.10825288e-01 9.07572050e-01 9.04330430e-01 9.01100389e-01 + 8.97881883e-01 8.94674872e-01 8.91479316e-01 8.88295172e-01 8.85122401e-01 + 8.81960962e-01 8.78810814e-01 8.75671916e-01 8.72544230e-01 8.69427714e-01 + 8.66322329e-01 8.63228035e-01 8.60144793e-01 8.57072563e-01 8.54011306e-01 + 8.50960982e-01 8.47921552e-01 8.44892979e-01 8.41875222e-01 8.38868243e-01 + 8.35872004e-01 8.32886467e-01 8.29911592e-01 8.26947343e-01 8.23993681e-01 + 8.21050568e-01 8.18117967e-01 8.15195841e-01 8.12284151e-01 8.09382860e-01 + 8.06491932e-01 8.03611329e-01 8.00741015e-01 7.97880952e-01 7.95031104e-01 + 7.92191436e-01 7.89361909e-01 7.86542489e-01 7.83733138e-01 7.80932737e-01 + 7.78135481e-01 7.75340559e-01 7.72548015e-01 7.69757898e-01 7.66970253e-01 + 7.64185126e-01 7.61402562e-01 7.58622607e-01 7.55845306e-01 7.53070703e-01 + 7.50298843e-01 7.47529769e-01 7.44763525e-01 7.42000155e-01 7.39239702e-01 + 7.36482208e-01 7.33727716e-01 7.30976267e-01 7.28227905e-01 7.25482670e-01 + 7.22740604e-01 7.20001747e-01 7.17266140e-01 7.14533823e-01 7.11804837e-01 + 7.09079221e-01 7.06357014e-01 7.03638256e-01 7.00922986e-01 6.98211241e-01 + 6.95503060e-01 6.92798481e-01 6.90097542e-01 6.87400280e-01 6.84706731e-01 + 6.82016933e-01 6.79330922e-01 6.76648734e-01 6.73970405e-01 6.71295970e-01 + 6.68625464e-01 6.65958924e-01 6.63296382e-01 6.60637874e-01 6.57983434e-01 + 6.55333095e-01 6.52686890e-01 6.50044854e-01 6.47407019e-01 6.44773417e-01 + 6.42144081e-01 6.39519042e-01 6.36898334e-01 6.34281986e-01 6.31670031e-01 + 6.29062499e-01 6.26459420e-01 6.23860826e-01 6.21266746e-01 6.18677209e-01 + 6.16092246e-01 6.13511886e-01 6.10936157e-01 6.08365088e-01 6.05798708e-01 + 6.03237045e-01 6.00680126e-01 5.98127979e-01 5.95580631e-01 5.93038110e-01 + 5.90500441e-01 5.87967652e-01 5.85439769e-01 5.82916817e-01 5.80398823e-01 + 5.77885811e-01 5.75377807e-01 5.72874835e-01 5.70376921e-01 5.67884088e-01 + 5.65396360e-01 5.62913762e-01 5.60436316e-01 5.57964047e-01 5.55496977e-01 + 5.53035128e-01 5.50578524e-01 5.48127187e-01 5.45681138e-01 5.43240399e-01 + 5.40804991e-01 5.38374937e-01 5.35950256e-01 5.33530970e-01 5.31117099e-01 + 5.28708663e-01 5.26305682e-01 5.23908176e-01 5.21516164e-01 5.19129666e-01 + 5.16748699e-01 5.14373284e-01 5.12003438e-01 5.09639180e-01 5.07280528e-01 + 5.04927499e-01 5.02580111e-01 5.00238381e-01 4.97902326e-01 4.95571964e-01 + 4.93247309e-01 4.90928379e-01 4.88615190e-01 4.86307758e-01 4.84006098e-01 + 4.81710225e-01 4.79420155e-01 4.77135903e-01 4.74857483e-01 4.72584909e-01 + 4.70318196e-01 4.68057358e-01 4.65802409e-01 4.63553362e-01 4.61310230e-01 + 4.59073026e-01 4.56841764e-01 4.54616456e-01 4.52397114e-01 4.50183750e-01 + 4.47976377e-01 4.45775007e-01 4.43579650e-01 4.41390318e-01 4.39207022e-01 + 4.37029774e-01 4.34858583e-01 4.32693460e-01 4.30534416e-01 4.28381460e-01 + 4.26234603e-01 4.24093854e-01 4.21959222e-01 4.19830716e-01 4.17708346e-01 + 4.15592121e-01 4.13482048e-01 4.11378137e-01 4.09280395e-01 4.07188831e-01 + 4.05103452e-01 4.03024267e-01 4.00951281e-01 3.98884503e-01 3.96823939e-01 + 3.94769597e-01 3.92721483e-01 3.90679603e-01 3.88643963e-01 3.86614570e-01 + 3.84591429e-01 3.82574547e-01 3.80563928e-01 3.78559578e-01 3.76561502e-01 + 3.74569704e-01 3.72584190e-01 3.70604965e-01 3.68632031e-01 3.66665395e-01 + 3.64705058e-01 3.62751027e-01 3.60803303e-01 3.58861891e-01 3.56926793e-01 + 3.54998014e-01 3.53075555e-01 3.51159420e-01 3.49249611e-01 3.47346130e-01 + 3.45448981e-01 3.43558164e-01 3.41673682e-01 3.39795537e-01 3.37923729e-01 + 3.36058261e-01 3.34199134e-01 3.32346349e-01 3.30499906e-01 3.28659807e-01 + 3.26826052e-01 3.24998641e-01 3.23177575e-01 3.21362854e-01 3.19554477e-01 + 3.17752446e-01 3.15956758e-01 3.14167414e-01 3.12384413e-01 3.10607754e-01 + 3.08837437e-01 3.07073459e-01 3.05315821e-01 3.03564519e-01 3.01819554e-01 + 3.00080922e-01 2.98348623e-01 2.96622654e-01 2.94903013e-01 2.93189698e-01 + 2.91482706e-01 2.89782035e-01 2.88087682e-01 2.86399644e-01 2.84717918e-01 + 2.83042501e-01 2.81373389e-01 2.79710580e-01 2.78054070e-01 2.76403855e-01 + 2.74759931e-01 2.73122294e-01 2.71490940e-01 2.69865865e-01 2.68247065e-01 + 2.66634536e-01 2.65028271e-01 2.63428268e-01 2.61834520e-01 2.60247024e-01 + 2.58665773e-01 2.57090764e-01 2.55521989e-01 2.53959444e-01 2.52403124e-01 + 2.50853022e-01 2.49309133e-01 2.47771451e-01 2.46239969e-01 2.44714682e-01 + 2.43195584e-01 2.41682667e-01 2.40175925e-01 2.38675352e-01 2.37180941e-01 + 2.35692686e-01 2.34210578e-01 2.32734611e-01 2.31264778e-01 2.29801072e-01 + 2.28343485e-01 2.26892010e-01 2.25446638e-01 2.24007363e-01 2.22574177e-01 + 2.21147071e-01 2.19726037e-01 2.18311068e-01 2.16902156e-01 2.15499291e-01 + 2.14102466e-01 2.12711671e-01 2.11326899e-01 2.09948141e-01 2.08575387e-01 + 2.07208630e-01 2.05847859e-01 2.04493066e-01 2.03144242e-01 2.01801377e-01 + 2.00464463e-01 1.99133489e-01 1.97808446e-01 1.96489324e-01 1.95176114e-01 + 1.93868806e-01 1.92567391e-01 1.91271857e-01 1.89982196e-01 1.88698396e-01 + 1.87420448e-01 1.86148342e-01 1.84882066e-01 1.83621611e-01 1.82366967e-01 + 1.81118121e-01 1.79875065e-01 1.78637786e-01 1.77406275e-01 1.76180520e-01 + 1.74960510e-01 1.73746235e-01 1.72537682e-01 1.71334841e-01 1.70137701e-01 + 1.68946250e-01 1.67760477e-01 1.66580371e-01 1.65405919e-01 1.64237110e-01 + 1.63073933e-01 1.61916375e-01 1.60764425e-01 1.59618071e-01 1.58477302e-01 + 1.57342104e-01 1.56212466e-01 1.55088376e-01 1.53969822e-01 1.52856791e-01 + 1.51749271e-01 1.50647250e-01 1.49550715e-01 1.48459654e-01 1.47374054e-01 + 1.46293903e-01 1.45219188e-01 1.44149895e-01 1.43086014e-01 1.42027530e-01 + 1.40974430e-01 1.39926703e-01 1.38884334e-01 1.37847312e-01 1.36815622e-01 + 1.35789251e-01 1.34768187e-01 1.33752417e-01 1.32741926e-01 1.31736702e-01 + 1.30736731e-01 1.29742001e-01 1.28752496e-01 1.27768205e-01 1.26789113e-01 + 1.25815206e-01 1.24846472e-01 1.23882897e-01 1.22924466e-01 1.21971167e-01 + 1.21022984e-01 1.20079906e-01 1.19141916e-01 1.18209003e-01 1.17281151e-01 + 1.16358347e-01 1.15440577e-01 1.14527827e-01 1.13620082e-01 1.12717329e-01 + 1.11819553e-01 1.10926741e-01 1.10038877e-01 1.09155949e-01 1.08277940e-01 + 1.07404838e-01 1.06536628e-01 1.05673296e-01 1.04814826e-01 1.03961206e-01 + 1.03112419e-01 1.02268453e-01 1.01429291e-01 1.00594921e-01 9.97653261e-02 + 9.89404933e-02 9.81204076e-02 9.73050542e-02 9.64944186e-02 9.56884861e-02 + 9.48872421e-02 9.40906717e-02 9.32987602e-02 9.25114930e-02 9.17288552e-02 + 9.09508321e-02 9.01774088e-02 8.94085704e-02 8.86443023e-02 8.78845894e-02 + 8.71294169e-02 8.63787700e-02 8.56326336e-02 8.48909929e-02 8.41538330e-02 + 8.34211388e-02 8.26928954e-02 8.19690879e-02 8.12497011e-02 8.05347202e-02 + 7.98241301e-02 7.91179157e-02 7.84160621e-02 7.77185541e-02 7.70253768e-02 + 7.63365150e-02 7.56519536e-02 7.49716776e-02 7.42956719e-02 7.36239214e-02 + 7.29564109e-02 7.22931253e-02 7.16340496e-02 7.09791686e-02 7.03284671e-02 + 6.96819300e-02 6.90395422e-02 6.84012886e-02 6.77671539e-02 6.71371231e-02 + 6.65111809e-02 6.58893122e-02 6.52715019e-02 6.46577348e-02 6.40479958e-02 + 6.34422696e-02 6.28405411e-02 6.22427951e-02 6.16490165e-02 6.10591902e-02 + 6.04733010e-02 5.98913336e-02 5.93132730e-02 5.87391041e-02 5.81688116e-02 + 5.76023804e-02 5.70397954e-02 5.64810414e-02 5.59261034e-02 5.53749662e-02 + 5.48276146e-02 5.42840336e-02 5.37442081e-02 5.32081229e-02 5.26757629e-02 + 5.21471132e-02 5.16221585e-02 5.11008839e-02 5.05832742e-02 5.00693144e-02 + 4.95589895e-02 4.90522845e-02 4.85491842e-02 4.80496738e-02 4.75537381e-02 + 4.70613623e-02 4.65725312e-02 4.60872300e-02 4.56054437e-02 4.51271574e-02 + 4.46523560e-02 4.41810248e-02 4.37131487e-02 4.32487129e-02 4.27877026e-02 + 4.23301028e-02 4.18758987e-02 4.14250754e-02 4.09776182e-02 4.05335123e-02 + 4.00927428e-02 3.96552949e-02 3.92211540e-02 3.87903053e-02 3.83627340e-02 + 3.79384255e-02 3.75173650e-02 3.70995379e-02 3.66849296e-02 3.62735253e-02 + 3.58653105e-02 3.54602706e-02 3.50583911e-02 3.46596572e-02 3.42640546e-02 + 3.38715687e-02 3.34821850e-02 3.30958890e-02 3.27126662e-02 3.23325023e-02 + 3.19553828e-02 3.15812932e-02 3.12102194e-02 3.08421468e-02 3.04770612e-02 + 3.01149482e-02 2.97557936e-02 2.93995832e-02 2.90463026e-02 2.86959377e-02 + 2.83484743e-02 2.80038982e-02 2.76621952e-02 2.73233514e-02 2.69873525e-02 + 2.66541845e-02 2.63238333e-02 2.59962850e-02 2.56715256e-02 2.53495410e-02 + 2.50303174e-02 2.47138408e-02 2.44000974e-02 2.40890733e-02 2.37807546e-02 + 2.34751275e-02 2.31721784e-02 2.28718933e-02 2.25742587e-02 2.22792607e-02 + 2.19868858e-02 2.16971202e-02 2.14099505e-02 2.11253629e-02 2.08433439e-02 + 2.05638801e-02 2.02869579e-02 2.00125638e-02 1.97406844e-02 1.94713063e-02 + 1.92044162e-02 1.89400006e-02 1.86780462e-02 1.84185398e-02 1.81614681e-02 + 1.79068179e-02 1.76545759e-02 1.74047290e-02 1.71572641e-02 1.69121681e-02 + 1.66694279e-02 1.64290304e-02 1.61909626e-02 1.59552116e-02 1.57217644e-02 + 1.54906081e-02 1.52617298e-02 1.50351167e-02 1.48107559e-02 1.45886347e-02 + 1.43687403e-02 1.41510600e-02 1.39355811e-02 1.37222909e-02 1.35111769e-02 + 1.33022264e-02 1.30954269e-02 1.28907658e-02 1.26882308e-02 1.24878092e-02 + 1.22894888e-02 1.20932571e-02 1.18991017e-02 1.17070104e-02 1.15169709e-02 + 1.13289709e-02 1.11429983e-02 1.09590407e-02 1.07770862e-02 1.05971226e-02 + 1.04191377e-02 1.02431196e-02 1.00690563e-02 9.89693584e-03 9.72674620e-03 + 9.55847554e-03 9.39211199e-03 9.22764373e-03 9.06505895e-03 8.90434592e-03 + 8.74549290e-03 8.58848822e-03 8.43332023e-03 8.27997732e-03 8.12844792e-03 + 7.97872048e-03 7.83078350e-03 7.68462553e-03 7.54023512e-03 7.39760089e-03 + 7.25671149e-03 7.11755558e-03 6.98012189e-03 6.84439918e-03 6.71037622e-03 + 6.57804186e-03 6.44738496e-03 6.31839441e-03 6.19105916e-03 6.06536818e-03 + 5.94131048e-03 5.81887512e-03 5.69805119e-03 5.57882780e-03 5.46119412e-03 + 5.34513934e-03 5.23065272e-03 5.11772351e-03 5.00634104e-03 4.89649464e-03 + 4.78817372e-03 4.68136769e-03 4.57606601e-03 4.47225819e-03 4.36993376e-03 + 4.26908230e-03 4.16969342e-03 4.07175677e-03 3.97526205e-03 3.88019897e-03 + 3.78655730e-03 3.69432685e-03 3.60349746e-03 3.51405899e-03 3.42600138e-03 + 3.33931457e-03 3.25398856e-03 3.17001338e-03 3.08737909e-03 3.00607580e-03 + 2.92609366e-03 2.84742285e-03 2.77005359e-03 2.69397614e-03 2.61918079e-03 + 2.54565788e-03 2.47339778e-03 2.40239090e-03 2.33262770e-03 2.26409866e-03 + 2.19679431e-03 2.13070520e-03 2.06582195e-03 2.00213518e-03 1.93963558e-03 + 1.87831387e-03 1.81816080e-03 1.75916715e-03 1.70132377e-03 1.64462151e-03 + 1.58905129e-03 1.53460405e-03 1.48127077e-03 1.42904247e-03 1.37791021e-03 + 1.32786509e-03 1.27889824e-03 1.23100083e-03 1.18416408e-03 1.13837922e-03 + 1.09363756e-03 1.04993040e-03 1.00724912e-03 9.65585108e-04 9.24929807e-04 + 8.85274690e-04 8.46611271e-04 8.08931100e-04 7.72225766e-04 7.36486893e-04 + 7.01706146e-04 6.67875227e-04 6.34985873e-04 6.03029860e-04 5.71999004e-04 + 5.41885154e-04 5.12680200e-04 4.84376068e-04 4.56964721e-04 4.30438160e-04 + 4.04788423e-04 3.80007585e-04 3.56087759e-04 3.33021095e-04 3.10799778e-04 + 2.89416035e-04 2.68862124e-04 2.49130345e-04 2.30213031e-04 2.12102556e-04 + 1.94791327e-04 1.78271789e-04 1.62536427e-04 1.47577757e-04 1.33388336e-04 + 1.19960756e-04 1.07287646e-04 9.53616714e-05 8.41755336e-05 7.37219709e-05 + 6.39937580e-05 5.49837057e-05 4.66846611e-05 3.90895074e-05 3.21911642e-05 + 2.59825869e-05 2.04567671e-05 1.56067322e-05 1.14255457e-05 7.90630673e-06 + 5.04215042e-06 2.82624746e-06 1.25180428e-06 3.12062870e-07 0.00000000e+00 + 2.22608223e+06 1.64289070e+06 8.11494877e+05 5.34498159e+05 3.96098406e+05 + 3.13135260e+05 2.57888659e+05 2.18478622e+05 1.88965201e+05 1.66048456e+05 + 1.47748454e+05 1.32805265e+05 1.20378956e+05 1.09888059e+05 1.00917256e+05 + 9.31619976e+04 8.63938880e+04 8.04382849e+04 7.51593680e+04 7.04499226e+04 + 6.62241876e+04 6.24127473e+04 5.89588161e+04 5.58154926e+04 5.29437001e+04 + 5.03106215e+04 4.78884953e+04 4.56536791e+04 4.35859138e+04 4.16677404e+04 + 3.98840326e+04 3.82216210e+04 3.66689867e+04 3.52160114e+04 3.38537712e+04 + 3.25743658e+04 3.13707761e+04 3.02367454e+04 2.91666785e+04 2.81555574e+04 + 2.71988682e+04 2.62925404e+04 2.54328935e+04 2.46165919e+04 2.38406052e+04 + 2.31021746e+04 2.23987834e+04 2.17281308e+04 2.10881094e+04 2.04767859e+04 + 1.98923829e+04 1.93332643e+04 1.87979211e+04 1.82849596e+04 1.77930907e+04 + 1.73211202e+04 1.68679407e+04 1.64325234e+04 1.60139115e+04 1.56112142e+04 + 1.52236011e+04 1.48502971e+04 1.44905781e+04 1.41437667e+04 1.38092289e+04 + 1.34863701e+04 1.31746328e+04 1.28734934e+04 1.25824598e+04 1.23010689e+04 + 1.20288850e+04 1.17654971e+04 1.15105181e+04 1.12635822e+04 1.10243442e+04 + 1.07924777e+04 1.05676738e+04 1.03496404e+04 1.01381006e+04 9.93279185e+03 + 9.73346539e+03 9.53988496e+03 9.35182621e+03 9.16907594e+03 8.99143148e+03 + 8.81869996e+03 8.65069784e+03 8.48725028e+03 8.32819068e+03 8.17336021e+03 + 8.02260733e+03 7.87578745e+03 7.73276246e+03 7.59340047e+03 7.45757538e+03 + 7.32516664e+03 7.19605891e+03 7.07014181e+03 6.94730967e+03 6.82746123e+03 + 6.71049949e+03 6.59633145e+03 6.48486791e+03 6.37602330e+03 6.26971548e+03 + 6.16586559e+03 6.06439787e+03 5.96523956e+03 5.86832068e+03 5.77357397e+03 + 5.68093472e+03 5.59034067e+03 5.50173190e+03 5.41505072e+03 5.33024154e+03 + 5.24725084e+03 5.16602702e+03 5.08652033e+03 5.00868281e+03 4.93246818e+03 + 4.85783182e+03 4.78473061e+03 4.71312298e+03 4.64296874e+03 4.57422909e+03 + 4.50686653e+03 4.44084484e+03 4.37612898e+03 4.31268507e+03 4.25048036e+03 + 4.18948314e+03 4.12966275e+03 4.07098949e+03 4.01343463e+03 3.95697033e+03 + 3.90156963e+03 3.84720641e+03 3.79385536e+03 3.74149196e+03 3.69009241e+03 + 3.63963365e+03 3.59009333e+03 3.54144974e+03 3.49368184e+03 3.44676919e+03 + 3.40069196e+03 3.35543090e+03 3.31096732e+03 3.26728306e+03 3.22436048e+03 + 3.18218244e+03 3.14073230e+03 3.09999386e+03 3.05995140e+03 3.02058961e+03 + 2.98189362e+03 2.94384896e+03 2.90644155e+03 2.86965769e+03 2.83348407e+03 + 2.79790771e+03 2.76291598e+03 2.72849659e+03 2.69463757e+03 2.66132727e+03 + 2.62855432e+03 2.59630767e+03 2.56457654e+03 2.53335042e+03 2.50261908e+03 + 2.47237254e+03 2.44260108e+03 2.41329520e+03 2.38444567e+03 2.35604345e+03 + 2.32807975e+03 2.30054598e+03 2.27343378e+03 2.24673495e+03 2.22044154e+03 + 2.19454575e+03 2.16903998e+03 2.14391680e+03 2.11916899e+03 2.09478944e+03 + 2.07077127e+03 2.04710771e+03 2.02379217e+03 2.00081820e+03 1.97817951e+03 + 1.95586995e+03 1.93388350e+03 1.91221428e+03 1.89085655e+03 1.86980469e+03 + 1.84905320e+03 1.82859671e+03 1.80842996e+03 1.78854783e+03 1.76894527e+03 + 1.74961738e+03 1.73055933e+03 1.71176643e+03 1.69323406e+03 1.67495772e+03 + 1.65693298e+03 1.63915554e+03 1.62162115e+03 1.60432568e+03 1.58726507e+03 + 1.57043536e+03 1.55383265e+03 1.53745313e+03 1.52129308e+03 1.50534883e+03 + 1.48961681e+03 1.47409351e+03 1.45877550e+03 1.44365939e+03 1.42874190e+03 + 1.41401979e+03 1.39948989e+03 1.38514908e+03 1.37099432e+03 1.35702262e+03 + 1.34323106e+03 1.32961675e+03 1.31617689e+03 1.30290871e+03 1.28980950e+03 + 1.27687660e+03 1.26410741e+03 1.25149936e+03 1.23904996e+03 1.22675672e+03 + 1.21461725e+03 1.20262917e+03 1.19079016e+03 1.17909792e+03 1.16755022e+03 + 1.15614487e+03 1.14487969e+03 1.13375258e+03 1.12276144e+03 1.11190424e+03 + 1.10117898e+03 1.09058367e+03 1.08011639e+03 1.06977524e+03 1.05955834e+03 + 1.04946387e+03 1.03949003e+03 1.02963505e+03 1.01989720e+03 1.01027475e+03 + 1.00076605e+03 9.91369431e+02 9.82083287e+02 9.72906024e+02 9.63836078e+02 + 9.54871914e+02 9.46012020e+02 9.37254912e+02 9.28599132e+02 9.20043246e+02 + 9.11585843e+02 9.03225538e+02 8.94960967e+02 8.86790792e+02 8.78713694e+02 + 8.70728379e+02 8.62833573e+02 8.55028022e+02 8.47310495e+02 8.39679780e+02 + 8.32134686e+02 8.24674039e+02 8.17296688e+02 8.10001498e+02 8.02787353e+02 + 7.95653155e+02 7.88597823e+02 7.81620297e+02 7.74719529e+02 7.67894491e+02 + 7.61144170e+02 7.54467571e+02 7.47863712e+02 7.41331629e+02 7.34870371e+02 + 7.28479005e+02 7.22156610e+02 7.15902279e+02 7.09715123e+02 7.03594262e+02 + 6.97538833e+02 6.91547986e+02 6.85620882e+02 6.79756696e+02 6.73954618e+02 + 6.68213847e+02 6.62533596e+02 6.56913090e+02 6.51351565e+02 6.45848269e+02 + 6.40402462e+02 6.35013413e+02 6.29680406e+02 6.24402731e+02 6.19179693e+02 + 6.14010603e+02 6.08894787e+02 6.03831577e+02 5.98820316e+02 5.93860359e+02 + 5.88951067e+02 5.84091813e+02 5.79281978e+02 5.74520952e+02 5.69808135e+02 + 5.65142935e+02 5.60524768e+02 5.55953059e+02 5.51427242e+02 5.46946757e+02 + 5.42511056e+02 5.38119594e+02 5.33771838e+02 5.29467260e+02 5.25205341e+02 + 5.20985568e+02 5.16807437e+02 5.12670449e+02 5.08574114e+02 5.04517948e+02 + 5.00501473e+02 4.96524221e+02 4.92585726e+02 4.88685531e+02 4.84823185e+02 + 4.80998245e+02 4.77210270e+02 4.73458829e+02 4.69743496e+02 4.66063849e+02 + 4.62419474e+02 4.58809961e+02 4.55234907e+02 4.51693915e+02 4.48186591e+02 + 4.44712548e+02 4.41271404e+02 4.37862782e+02 4.34486311e+02 4.31141623e+02 + 4.27828357e+02 4.24546157e+02 4.21294668e+02 4.18073546e+02 4.14882445e+02 + 4.11721028e+02 4.08588962e+02 4.05485917e+02 4.02411567e+02 3.99365593e+02 + 3.96347677e+02 3.93357508e+02 3.90394776e+02 3.87459179e+02 3.84550414e+02 + 3.81668187e+02 3.78812205e+02 3.75982179e+02 3.73177824e+02 3.70398858e+02 + 3.67645005e+02 3.64915990e+02 3.62211543e+02 3.59531396e+02 3.56875286e+02 + 3.54242953e+02 3.51634140e+02 3.49048592e+02 3.46486060e+02 3.43946296e+02 + 3.41429057e+02 3.38934100e+02 3.36461189e+02 3.34010087e+02 3.31580563e+02 + 3.29172388e+02 3.26785335e+02 3.24419181e+02 3.22073706e+02 3.19748690e+02 + 3.17443919e+02 3.15159181e+02 3.12894265e+02 3.10648965e+02 3.08423074e+02 + 3.06216392e+02 3.04028718e+02 3.01859854e+02 2.99709606e+02 2.97577782e+02 + 2.95464191e+02 2.93368645e+02 2.91290959e+02 2.89230948e+02 2.87188433e+02 + 2.85163234e+02 2.83155175e+02 2.81164080e+02 2.79189777e+02 2.77232096e+02 + 2.75290867e+02 2.73365926e+02 2.71457107e+02 2.69564247e+02 2.67687187e+02 + 2.65825767e+02 2.63979831e+02 2.62149223e+02 2.60333792e+02 2.58533385e+02 + 2.56747852e+02 2.54977047e+02 2.53220823e+02 2.51479036e+02 2.49751543e+02 + 2.48038204e+02 2.46338878e+02 2.44653429e+02 2.42981719e+02 2.41323616e+02 + 2.39678985e+02 2.38047696e+02 2.36429618e+02 2.34824622e+02 2.33232583e+02 + 2.31653375e+02 2.30086873e+02 2.28532956e+02 2.26991501e+02 2.25462388e+02 + 2.23945501e+02 2.22440721e+02 2.20947932e+02 2.19467021e+02 2.17997874e+02 + 2.16540378e+02 2.15094425e+02 2.13659903e+02 2.12236705e+02 2.10824725e+02 + 2.09423855e+02 2.08033993e+02 2.06655034e+02 2.05286876e+02 2.03929418e+02 + 2.02582561e+02 2.01246205e+02 1.99920252e+02 1.98604607e+02 1.97299172e+02 + 1.96003855e+02 1.94718561e+02 1.93443198e+02 1.92177675e+02 1.90921901e+02 + 1.89675786e+02 1.88439243e+02 1.87212183e+02 1.85994521e+02 1.84786170e+02 + 1.83587047e+02 1.82397066e+02 1.81216147e+02 1.80044206e+02 1.78881162e+02 + 1.77726936e+02 1.76581449e+02 1.75444621e+02 1.74316376e+02 1.73196636e+02 + 1.72085325e+02 1.70982370e+02 1.69887694e+02 1.68801226e+02 1.67722892e+02 + 1.66652620e+02 1.65590339e+02 1.64535979e+02 1.63489470e+02 1.62450743e+02 + 1.61419731e+02 1.60396365e+02 1.59380580e+02 1.58372308e+02 1.57371485e+02 + 1.56378046e+02 1.55391928e+02 1.54413066e+02 1.53441399e+02 1.52476865e+02 + 1.51519401e+02 1.50568949e+02 1.49625447e+02 1.48688836e+02 1.47759058e+02 + 1.46836054e+02 1.45919768e+02 1.45010141e+02 1.44107118e+02 1.43210644e+02 + 1.42320662e+02 1.41437119e+02 1.40559960e+02 1.39689133e+02 1.38824583e+02 + 1.37966259e+02 1.37114109e+02 1.36268082e+02 1.35428128e+02 1.34594195e+02 + 1.33766234e+02 1.32944196e+02 1.32128033e+02 1.31317696e+02 1.30513138e+02 + 1.29714311e+02 1.28921170e+02 1.28133666e+02 1.27351756e+02 1.26575394e+02 + 1.25804534e+02 1.25039133e+02 1.24279147e+02 1.23524532e+02 1.22775245e+02 + 1.22031244e+02 1.21292487e+02 1.20558932e+02 1.19830538e+02 1.19107263e+02 + 1.18389069e+02 1.17675913e+02 1.16967758e+02 1.16264563e+02 1.15566291e+02 + 1.14872901e+02 1.14184358e+02 1.13500622e+02 1.12821657e+02 1.12147426e+02 + 1.11477892e+02 1.10813019e+02 1.10152771e+02 1.09497114e+02 1.08846011e+02 + 1.08199428e+02 1.07557332e+02 1.06919687e+02 1.06286460e+02 1.05657618e+02 + 1.05033128e+02 1.04412957e+02 1.03797073e+02 1.03185444e+02 1.02578037e+02 + 1.01974823e+02 1.01375769e+02 1.00780844e+02 1.00190020e+02 9.96032638e+01 + 9.90205474e+01 9.84418407e+01 9.78671145e+01 9.72963397e+01 9.67294876e+01 + 9.61665298e+01 9.56074381e+01 9.50521847e+01 9.45007420e+01 9.39530826e+01 + 9.34091794e+01 9.28690056e+01 9.23325346e+01 9.17997403e+01 9.12705964e+01 + 9.07450773e+01 9.02231574e+01 8.97048113e+01 8.91900140e+01 8.86787407e+01 + 8.81709668e+01 8.76666679e+01 8.71658199e+01 8.66683989e+01 8.61743813e+01 + 8.56837435e+01 8.51964623e+01 8.47125147e+01 8.42318780e+01 8.37545294e+01 + 8.32804467e+01 8.28096075e+01 8.23419900e+01 8.18775724e+01 8.14163330e+01 + 8.09582505e+01 8.05033036e+01 8.00514714e+01 7.96027330e+01 7.91570678e+01 + 7.87144554e+01 7.82748753e+01 7.78383076e+01 7.74047323e+01 7.69741296e+01 + 7.65464800e+01 7.61217640e+01 7.56999623e+01 7.52810559e+01 7.48650257e+01 + 7.44518531e+01 7.40415194e+01 7.36340061e+01 7.32292949e+01 7.28273676e+01 + 7.24282061e+01 7.20317926e+01 7.16381093e+01 7.12471386e+01 7.08588630e+01 + 7.04732652e+01 7.00903279e+01 6.97100340e+01 6.93323666e+01 6.89573089e+01 + 6.85848441e+01 6.82149556e+01 6.78476270e+01 6.74828419e+01 6.71205840e+01 + 6.67608372e+01 6.64035855e+01 6.60488130e+01 6.56965038e+01 6.53466422e+01 + 6.49992126e+01 6.46541996e+01 6.43115876e+01 6.39713614e+01 6.36335058e+01 + 6.32980055e+01 6.29648457e+01 6.26340112e+01 6.23054873e+01 6.19792591e+01 + 6.16553119e+01 6.13336312e+01 6.10142023e+01 6.06970108e+01 6.03820424e+01 + 6.00692826e+01 5.97587172e+01 5.94503321e+01 5.91441132e+01 5.88400463e+01 + 5.85381176e+01 5.82383130e+01 5.79406188e+01 5.76450212e+01 5.73515064e+01 + 5.70600608e+01 5.67706707e+01 5.64833226e+01 5.61980030e+01 5.59146984e+01 + 5.56333954e+01 5.53540807e+01 5.50767409e+01 5.48013629e+01 5.45279333e+01 + 5.42564391e+01 5.39868671e+01 5.37192042e+01 5.34534375e+01 5.31895539e+01 + 5.29275404e+01 5.26673842e+01 5.24090725e+01 5.21525923e+01 5.18979308e+01 + 5.16450754e+01 5.13940133e+01 5.11447318e+01 5.08972183e+01 5.06514602e+01 + 5.04074448e+01 5.01651597e+01 4.99245922e+01 4.96857301e+01 4.94485607e+01 + 4.92130716e+01 4.89792506e+01 4.87470852e+01 4.85165632e+01 4.82876721e+01 + 4.80603998e+01 4.78347341e+01 4.76106627e+01 4.73881735e+01 4.71672543e+01 + 4.69478930e+01 4.67300776e+01 4.65137959e+01 4.62990361e+01 4.60857861e+01 + 4.58740340e+01 4.56637677e+01 4.54549756e+01 4.52476456e+01 4.50417660e+01 + 4.48373250e+01 4.46343108e+01 4.44327117e+01 4.42325160e+01 4.40337120e+01 + 4.38362882e+01 4.36402330e+01 4.34455347e+01 4.32521820e+01 4.30601632e+01 + 4.28694671e+01 4.26800821e+01 4.24919969e+01 4.23052003e+01 4.21196809e+01 + 4.19354275e+01 4.17524288e+01 4.15706739e+01 4.13901514e+01 4.12108505e+01 + 4.10327600e+01 4.08558689e+01 4.06801665e+01 4.05056417e+01 4.03322838e+01 + 4.01600819e+01 3.99890254e+01 3.98191035e+01 3.96503057e+01 3.94826213e+01 + 3.93160399e+01 3.91505509e+01 3.89861440e+01 3.88228087e+01 3.86605349e+01 + 3.84993122e+01 3.83391305e+01 3.81799796e+01 3.80218496e+01 3.78647303e+01 + 3.77086118e+01 3.75534843e+01 3.73993379e+01 3.72461629e+01 3.70939496e+01 + 3.69426884e+01 3.67923697e+01 3.66429841e+01 3.64945220e+01 3.63469743e+01 + 3.62003315e+01 3.60545845e+01 3.59097241e+01 3.57657412e+01 3.56226269e+01 + 3.54803723e+01 3.53389684e+01 3.51984065e+01 3.50586779e+01 3.49197739e+01 + 3.47816860e+01 3.46444058e+01 3.45079247e+01 3.43722345e+01 3.42373269e+01 + 3.41031937e+01 3.39698269e+01 3.38372184e+01 3.37053603e+01 3.35742446e+01 + 3.34438637e+01 3.33142098e+01 3.31852752e+01 3.30570525e+01 3.29295341e+01 + 3.28027126e+01 3.26765808e+01 3.25511314e+01 3.24263572e+01 3.23022512e+01 + 3.21788064e+01 3.20560158e+01 3.19338726e+01 3.18123700e+01 3.16915015e+01 + 3.15712603e+01 3.14516399e+01 3.13326340e+01 3.12142360e+01 3.10964399e+01 + 3.09792392e+01 3.08626280e+01 3.07466002e+01 3.06311497e+01 3.05162707e+01 + 3.04019574e+01 3.02882039e+01 3.01750048e+01 3.00623542e+01 2.99502468e+01 + 2.98386771e+01 2.97276397e+01 2.96171293e+01 2.95071407e+01 2.93976688e+01 + 2.92887084e+01 2.91802546e+01 2.90723024e+01 2.89648469e+01 2.88578835e+01 + 2.87514072e+01 2.86454136e+01 2.85398980e+01 2.84348558e+01 2.83302827e+01 + 2.82261742e+01 2.81225260e+01 2.80193340e+01 2.79165938e+01 2.78143013e+01 + 2.77124526e+01 2.76110435e+01 2.75100702e+01 2.74095288e+01 2.73094155e+01 + 2.72097265e+01 2.71104581e+01 2.70116067e+01 2.69131687e+01 2.68151406e+01 + 2.67175188e+01 2.66203001e+01 2.65234811e+01 2.64270584e+01 2.63310288e+01 + 2.62353891e+01 2.61401362e+01 2.60452669e+01 2.59507783e+01 2.58566673e+01 + 2.57629310e+01 2.56695666e+01 2.55765711e+01 2.54839417e+01 2.53916758e+01 + 2.52997706e+01 2.52082234e+01 2.51170317e+01 2.50261928e+01 2.49357043e+01 + 2.48455636e+01 2.47557682e+01 2.46663159e+01 2.45772042e+01 2.44884307e+01 + 2.43999933e+01 2.43118896e+01 2.42241175e+01 2.41366747e+01 2.40495592e+01 + 2.39627688e+01 2.38763014e+01 2.37901550e+01 2.37043277e+01 2.36188173e+01 + 2.35336221e+01 2.34487401e+01 2.33641694e+01 2.32799082e+01 2.31959547e+01 + 2.31123071e+01 2.30289635e+01 2.29459224e+01 2.28631820e+01 2.27807406e+01 + 2.26985966e+01 2.26167483e+01 2.25351942e+01 2.24539327e+01 2.23729623e+01 + 2.22922814e+01 2.22118885e+01 2.21317821e+01 2.20519609e+01 2.19724233e+01 + 2.18931680e+01 2.18141936e+01 2.17354987e+01 2.16570819e+01 2.15789419e+01 + 2.15010775e+01 2.14234873e+01 2.13461701e+01 2.12691245e+01 2.11923495e+01 + 2.11158437e+01 2.10396059e+01 2.09636350e+01 2.08879297e+01 2.08124891e+01 + 2.07373118e+01 2.06623968e+01 2.05877429e+01 2.05133491e+01 2.04392143e+01 + 2.03653374e+01 2.02917174e+01 2.02183532e+01 2.01452439e+01 2.00723882e+01 + 1.99997854e+01 1.99274343e+01 1.98553341e+01 1.97834837e+01 1.97118821e+01 + 1.96405285e+01 1.95694218e+01 1.94985612e+01 1.94279457e+01 1.93575745e+01 + 1.92874466e+01 1.92175611e+01 1.91479172e+01 1.90785139e+01 1.90093505e+01 + 1.89404260e+01 1.88717397e+01 1.88032906e+01 1.87350779e+01 1.86671009e+01 + 1.85993587e+01 1.85318504e+01 1.84645753e+01 1.83975326e+01 1.83307215e+01 + 1.82641413e+01 1.81977910e+01 1.81316700e+01 1.80657774e+01 1.80001126e+01 + 1.79346748e+01 1.78694632e+01 1.78044771e+01 1.77397157e+01 1.76751783e+01 + 1.76108641e+01 1.75467726e+01 1.74829028e+01 1.74192542e+01 1.73558259e+01 + 1.72926173e+01 1.72296278e+01 1.71668565e+01 1.71043028e+01 1.70419660e+01 + 1.69798455e+01 1.69179404e+01 1.68562502e+01 1.67947742e+01 1.67335117e+01 + 1.66724620e+01 1.66116245e+01 1.65509984e+01 1.64905832e+01 1.64303782e+01 + 1.63703827e+01 1.63105961e+01 1.62510177e+01 1.61916469e+01 1.61324830e+01 + 1.60735255e+01 1.60147735e+01 1.59562266e+01 1.58978841e+01 1.58397453e+01 + 1.57818096e+01 1.57240765e+01 1.56665452e+01 1.56092151e+01 1.55520857e+01 + 1.54951563e+01 1.54384263e+01 1.53818950e+01 1.53255619e+01 1.52694264e+01 + 1.52134878e+01 1.51577456e+01 1.51021991e+01 1.50468477e+01 1.49916909e+01 + 1.49367279e+01 1.48819583e+01 1.48273815e+01 1.47729968e+01 1.47188036e+01 + 1.46648014e+01 1.46109895e+01 1.45573674e+01 1.45039345e+01 1.44506902e+01 + 1.43976339e+01 1.43447651e+01 1.42920830e+01 1.42395873e+01 1.41872773e+01 + 1.41351523e+01 1.40832119e+01 1.40314555e+01 1.39798825e+01 1.39284922e+01 + 1.38772842e+01 1.38262579e+01 1.37754127e+01 1.37247481e+01 1.36742634e+01 + 1.36239581e+01 1.35738317e+01 1.35238836e+01 1.34741131e+01 1.34245199e+01 + 1.33751032e+01 1.33258626e+01 1.32767975e+01 1.32279073e+01 1.31791915e+01 + 1.31306495e+01 1.30822808e+01 1.30340848e+01 1.29860610e+01 1.29382089e+01 + 1.28905278e+01 1.28430172e+01 1.27956766e+01 1.27485055e+01 1.27015033e+01 + 1.26546695e+01 1.26080034e+01 1.25615047e+01 1.25151727e+01 1.24690068e+01 + 1.24230067e+01 1.23771717e+01 1.23315013e+01 1.22859950e+01 1.22406522e+01 + 1.21954724e+01 1.21504551e+01 1.21055998e+01 1.20609059e+01 1.20163728e+01 + 1.19720002e+01 1.19277874e+01 1.18837339e+01 1.18398392e+01 1.17961028e+01 + 1.17525242e+01 1.17091028e+01 1.16658381e+01 1.16227297e+01 1.15797770e+01 + 1.15369794e+01 1.14943365e+01 1.14518478e+01 1.14095128e+01 1.13673308e+01 + 1.13253015e+01 1.12834244e+01 1.12416989e+01 1.12001244e+01 1.11587006e+01 + 1.11174269e+01 1.10763029e+01 1.10353279e+01 1.09945015e+01 1.09538233e+01 + 1.09132927e+01 1.08729092e+01 1.08326723e+01 1.07925816e+01 1.07526365e+01 + 1.07128365e+01 1.06731813e+01 1.06336702e+01 1.05943028e+01 1.05550786e+01 + 1.05159971e+01 1.04770578e+01 1.04382603e+01 1.03996041e+01 1.03610886e+01 + 1.03227135e+01 1.02844782e+01 1.02463823e+01 1.02084252e+01 1.01706066e+01 + 1.01329259e+01 1.00953826e+01 1.00579763e+01 1.00207066e+01 9.98357293e+00 + 9.94657483e+00 9.90971186e+00 9.87298355e+00 9.83638943e+00 9.79992905e+00 + 9.76360194e+00 9.72740763e+00 9.69134569e+00 9.65541563e+00 9.61961702e+00 + 9.58394940e+00 9.54841230e+00 9.51300529e+00 9.47772790e+00 9.44257969e+00 + 9.40756021e+00 9.37266901e+00 9.33790565e+00 9.30326968e+00 9.26876066e+00 + 9.23437814e+00 9.20012168e+00 9.16599085e+00 9.13198520e+00 9.09810430e+00 + 9.06434770e+00 9.03071498e+00 8.99720571e+00 8.96381944e+00 8.93055574e+00 + 8.89741419e+00 8.86439436e+00 8.83149582e+00 8.79871814e+00 8.76606089e+00 + 8.73352366e+00 8.70110602e+00 8.66880755e+00 8.63662783e+00 8.60456643e+00 + 8.57262294e+00 8.54079695e+00 8.50908804e+00 8.47749579e+00 8.44601979e+00 + 8.41465963e+00 8.38341490e+00 8.35228519e+00 8.32127008e+00 8.29036919e+00 + 8.25958209e+00 8.22890838e+00 8.19834766e+00 8.16789954e+00 8.13756360e+00 + 8.10733945e+00 8.07722668e+00 8.04722491e+00 8.01733374e+00 7.98755277e+00 + 7.95788160e+00 7.92831986e+00 7.89886713e+00 7.86952305e+00 7.84028721e+00 + 7.81115922e+00 7.78213871e+00 7.75322529e+00 7.72441857e+00 7.69571818e+00 + 7.66712372e+00 7.63863482e+00 7.61025111e+00 7.58197219e+00 7.55379770e+00 + 7.52572727e+00 7.49776051e+00 7.46989705e+00 7.44213653e+00 7.41447857e+00 + 7.38692280e+00 7.35946885e+00 7.33211636e+00 7.30486496e+00 7.27771429e+00 + 7.25066397e+00 7.22371366e+00 7.19686299e+00 7.17011160e+00 7.14345913e+00 + 7.11690522e+00 7.09044951e+00 7.06409166e+00 7.03783130e+00 7.01166809e+00 + 6.98560167e+00 6.95963169e+00 6.93375780e+00 6.90797966e+00 6.88229691e+00 + 6.85670921e+00 6.83121622e+00 6.80581759e+00 6.78051298e+00 6.75530204e+00 + 6.73018445e+00 6.70515985e+00 6.68022791e+00 6.65538829e+00 6.63064066e+00 + 6.60598469e+00 6.58142003e+00 6.55694636e+00 6.53256335e+00 6.50827066e+00 + 6.48406796e+00 6.45995494e+00 6.43593125e+00 6.41199658e+00 6.38815061e+00 + 6.36439300e+00 6.34072343e+00 6.31714159e+00 6.29364715e+00 6.27023980e+00 + 6.24691921e+00 6.22368507e+00 6.20053707e+00 6.17747488e+00 6.15449820e+00 + 6.13160671e+00 6.10880010e+00 6.08607807e+00 6.06344029e+00 6.04088646e+00 + 6.01841629e+00 5.99602945e+00 5.97372564e+00 5.95150456e+00 5.92936591e+00 + 5.90730939e+00 5.88533469e+00 5.86344151e+00 5.84162956e+00 5.81989853e+00 + 5.79824813e+00 5.77667807e+00 5.75518805e+00 5.73377778e+00 5.71244695e+00 + 5.69119529e+00 5.67002250e+00 5.64892830e+00 5.62791238e+00 5.60697447e+00 + 5.58611428e+00 5.56533152e+00 5.54462591e+00 5.52399717e+00 5.50344500e+00 + 5.48296914e+00 5.46256930e+00 5.44224520e+00 5.42199656e+00 5.40182311e+00 + 5.38172456e+00 5.36170064e+00 5.34175109e+00 5.32187561e+00 5.30207395e+00 + 5.28234582e+00 5.26269097e+00 5.24310911e+00 5.22359998e+00 5.20416331e+00 + 5.18479884e+00 5.16550630e+00 5.14628542e+00 5.12713593e+00 5.10805759e+00 + 5.08905011e+00 5.07011325e+00 5.05124675e+00 5.03245033e+00 5.01372375e+00 + 4.99506674e+00 4.97647905e+00 4.95796043e+00 4.93951062e+00 4.92112936e+00 + 4.90281640e+00 4.88457149e+00 4.86639438e+00 4.84828482e+00 4.83024256e+00 + 4.81226735e+00 4.79435893e+00 4.77651708e+00 4.75874153e+00 4.74103205e+00 + 4.72338839e+00 4.70581031e+00 4.68829756e+00 4.67084991e+00 4.65346711e+00 + 4.63614892e+00 4.61889511e+00 4.60170543e+00 4.58457965e+00 4.56751754e+00 + 4.55051885e+00 4.53358335e+00 4.51671082e+00 4.49990101e+00 4.48315369e+00 + 4.46646864e+00 4.44984562e+00 4.43328440e+00 4.41678476e+00 4.40034646e+00 + 4.38396928e+00 4.36765299e+00 4.35139738e+00 4.33520220e+00 4.31906725e+00 + 4.30299229e+00 4.28697710e+00 4.27102147e+00 4.25512517e+00 4.23928798e+00 + 4.22350969e+00 4.20779007e+00 4.19212891e+00 4.17652599e+00 4.16098109e+00 + 4.14549401e+00 4.13006452e+00 4.11469242e+00 4.09937748e+00 4.08411951e+00 + 4.06891828e+00 4.05377359e+00 4.03868523e+00 4.02365298e+00 4.00867665e+00 + 3.99375601e+00 3.97889088e+00 3.96408104e+00 3.94932628e+00 3.93462641e+00 + 3.91998121e+00 3.90539049e+00 3.89085404e+00 3.87637166e+00 3.86194316e+00 + 3.84756833e+00 3.83324697e+00 3.81897888e+00 3.80476387e+00 3.79060175e+00 + 3.77649230e+00 3.76243534e+00 3.74843068e+00 3.73447812e+00 3.72057746e+00 + 3.70672851e+00 3.69293109e+00 3.67918500e+00 3.66549005e+00 3.65184604e+00 + 3.63825280e+00 3.62471013e+00 3.61121785e+00 3.59777576e+00 3.58438369e+00 + 3.57104144e+00 3.55774883e+00 3.54450568e+00 3.53131180e+00 3.51816701e+00 + 3.50507113e+00 3.49202398e+00 3.47902537e+00 3.46607512e+00 3.45317306e+00 + 3.44031901e+00 3.42751278e+00 3.41475421e+00 3.40204310e+00 3.38937930e+00 + 3.37676262e+00 3.36419288e+00 3.35166992e+00 3.33919355e+00 3.32676361e+00 + 3.31437992e+00 3.30204231e+00 3.28975062e+00 3.27750466e+00 3.26530427e+00 + 3.25314928e+00 3.24103952e+00 3.22897483e+00 3.21695503e+00 3.20497996e+00 + 3.19304945e+00 3.18116334e+00 3.16932147e+00 3.15752366e+00 3.14576975e+00 + 3.13405959e+00 3.12239300e+00 3.11076983e+00 3.09918992e+00 3.08765310e+00 + 3.07615921e+00 3.06470810e+00 3.05329960e+00 3.04193357e+00 3.03060983e+00 + 3.01932823e+00 3.00808862e+00 2.99689084e+00 2.98573473e+00 2.97462014e+00 + 2.96354691e+00 2.95251490e+00 2.94152395e+00 2.93057389e+00 2.91966460e+00 + 2.90879590e+00 2.89796766e+00 2.88717971e+00 2.87643191e+00 2.86572412e+00 + 2.85505618e+00 2.84442794e+00 2.83383926e+00 2.82328999e+00 2.81277998e+00 + 2.80230909e+00 2.79187717e+00 2.78148407e+00 2.77112966e+00 2.76081379e+00 + 2.75053631e+00 2.74029708e+00 2.73009597e+00 2.71993282e+00 2.70980750e+00 + 2.69971986e+00 2.68966978e+00 2.67965709e+00 2.66968168e+00 2.65974339e+00 + 2.64984210e+00 2.63997766e+00 2.63014993e+00 2.62035879e+00 2.61060408e+00 + 2.60088569e+00 2.59120347e+00 2.58155729e+00 2.57194701e+00 2.56237250e+00 + 2.55283363e+00 2.54333026e+00 2.53386227e+00 2.52442952e+00 2.51503188e+00 + 2.50566922e+00 2.49634141e+00 2.48704832e+00 2.47778982e+00 2.46856578e+00 + 2.45937608e+00 2.45022058e+00 2.44109916e+00 2.43201169e+00 2.42295805e+00 + 2.41393811e+00 2.40495175e+00 2.39599883e+00 2.38707924e+00 2.37819285e+00 + 2.36933954e+00 2.36051919e+00 2.35173166e+00 2.34297685e+00 2.33425462e+00 + 2.32556487e+00 2.31690745e+00 2.30828227e+00 2.29968919e+00 2.29112809e+00 + 2.28259887e+00 2.27410139e+00 2.26563554e+00 2.25720121e+00 2.24879827e+00 + 2.24042661e+00 2.23208612e+00 2.22377667e+00 2.21549815e+00 2.20725045e+00 + 2.19903345e+00 2.19084704e+00 2.18269110e+00 2.17456552e+00 2.16647019e+00 + 2.15840499e+00 2.15036982e+00 2.14236455e+00 2.13438909e+00 2.12644331e+00 + 2.11852711e+00 2.11064038e+00 2.10278301e+00 2.09495489e+00 2.08715590e+00 + 2.07938595e+00 2.07164492e+00 2.06393271e+00 2.05624921e+00 2.04859431e+00 + 2.04096790e+00 2.03336989e+00 2.02580015e+00 2.01825860e+00 2.01074512e+00 + 2.00325961e+00 1.99580197e+00 1.98837208e+00 1.98096986e+00 1.97359518e+00 + 1.96624797e+00 1.95892810e+00 1.95163548e+00 1.94437001e+00 1.93713158e+00 + 1.92992010e+00 1.92273547e+00 1.91557758e+00 1.90844634e+00 1.90134164e+00 + 1.89426339e+00 1.88721149e+00 1.88018585e+00 1.87318635e+00 1.86621291e+00 + 1.85926544e+00 1.85234382e+00 1.84544797e+00 1.83857779e+00 1.83173319e+00 + 1.82491407e+00 1.81812033e+00 1.81135188e+00 1.80460863e+00 1.79789048e+00 + 1.79119734e+00 1.78452912e+00 1.77788572e+00 1.77126705e+00 1.76467302e+00 + 1.75810353e+00 1.75155851e+00 1.74503784e+00 1.73854146e+00 1.73206925e+00 + 1.72562114e+00 1.71919704e+00 1.71279684e+00 1.70642048e+00 1.70006785e+00 + 1.69373887e+00 1.68743345e+00 1.68115150e+00 1.67489294e+00 1.66865768e+00 + 1.66244563e+00 1.65625671e+00 1.65009082e+00 1.64394789e+00 1.63782783e+00 + 1.63173055e+00 1.62565596e+00 1.61960400e+00 1.61357456e+00 1.60756756e+00 + 1.60158293e+00 1.59562058e+00 1.58968043e+00 1.58376238e+00 1.57786637e+00 + 1.57199231e+00 1.56614012e+00 1.56030971e+00 1.55450100e+00 1.54871392e+00 + 1.54294839e+00 1.53720432e+00 1.53148163e+00 1.52578024e+00 1.52010008e+00 + 1.51444107e+00 1.50880312e+00 1.50318616e+00 1.49759011e+00 1.49201489e+00 + 1.48646043e+00 1.48092665e+00 1.47541347e+00 1.46992081e+00 1.46444860e+00 + 1.45899676e+00 1.45356521e+00 1.44815389e+00 1.44276271e+00 1.43739160e+00 + 1.43204049e+00 1.42670929e+00 1.42139795e+00 1.41610638e+00 1.41083450e+00 + 1.40558225e+00 1.40034956e+00 1.39513634e+00 1.38994253e+00 1.38476806e+00 + 1.37961285e+00 1.37447683e+00 1.36935993e+00 1.36426208e+00 1.35918321e+00 + 1.35412325e+00 1.34908212e+00 1.34405976e+00 1.33905610e+00 1.33407106e+00 + 1.32910459e+00 1.32415660e+00 1.31922703e+00 1.31431581e+00 1.30942288e+00 + 1.30454816e+00 1.29969159e+00 1.29485310e+00 1.29003262e+00 1.28523009e+00 + 1.28044543e+00 1.27567859e+00 1.27092949e+00 1.26619808e+00 1.26148427e+00 + 1.25678802e+00 1.25210925e+00 1.24744790e+00 1.24280390e+00 1.23817718e+00 + 1.23356770e+00 1.22897537e+00 1.22440014e+00 1.21984194e+00 1.21530071e+00 + 1.21077639e+00 1.20626891e+00 1.20177820e+00 1.19730422e+00 1.19284690e+00 + 1.18840616e+00 1.18398196e+00 1.17957423e+00 1.17518291e+00 1.17080793e+00 + 1.16644925e+00 1.16210679e+00 1.15778049e+00 1.15346959e+00 1.14913354e+00 + 1.14474938e+00 1.14031777e+00 1.13583938e+00 1.13131490e+00 1.12674498e+00 + 1.12213033e+00 1.11747160e+00 1.11276948e+00 1.10802466e+00 1.10323781e+00 + 1.09840961e+00 1.09354076e+00 1.08863193e+00 1.08368382e+00 1.07869711e+00 + 1.07367249e+00 1.06861064e+00 1.06351225e+00 1.05837802e+00 1.05320863e+00 + 1.04800477e+00 1.04276713e+00 1.03749640e+00 1.03219327e+00 1.02685842e+00 + 1.02149255e+00 1.01609634e+00 1.01067048e+00 1.00521566e+00 9.99732561e-01 + 9.94221873e-01 9.88684280e-01 9.83120465e-01 9.77531112e-01 9.71916902e-01 + 9.66278515e-01 9.60616632e-01 9.54931930e-01 9.49225086e-01 9.43496777e-01 + 9.37747674e-01 9.31978451e-01 9.26189778e-01 9.20382324e-01 9.14556755e-01 + 9.08713737e-01 9.02853933e-01 8.96978003e-01 8.91086606e-01 8.85180399e-01 + 8.79260037e-01 8.73326170e-01 8.67379449e-01 8.61420522e-01 8.55450031e-01 + 8.49468620e-01 8.43476928e-01 8.37475591e-01 8.31465244e-01 8.25446516e-01 + 8.19420036e-01 8.13386430e-01 8.07346319e-01 8.01300321e-01 7.95249054e-01 + 7.89193129e-01 7.83133156e-01 7.77069741e-01 7.71003485e-01 7.64934990e-01 + 7.58864849e-01 7.52793656e-01 7.46721999e-01 7.40650464e-01 7.34579630e-01 + 7.28510076e-01 7.22442376e-01 7.16377099e-01 7.10314812e-01 7.04256077e-01 + 6.98201452e-01 6.92151492e-01 6.86106746e-01 6.80067760e-01 6.74035077e-01 + 6.68009235e-01 6.61990766e-01 6.55980201e-01 6.49978064e-01 6.43984876e-01 + 6.38001154e-01 6.32027409e-01 6.26064149e-01 6.20111878e-01 6.14171093e-01 + 6.08242290e-01 6.02325957e-01 5.96422579e-01 5.90532637e-01 5.84656607e-01 + 5.78794960e-01 5.72948161e-01 5.67116674e-01 5.61300953e-01 5.55501453e-01 + 5.49718619e-01 5.43952895e-01 5.38204718e-01 5.32474521e-01 5.26762732e-01 + 5.21069774e-01 5.15396065e-01 5.09742018e-01 5.04108042e-01 4.98494539e-01 + 4.92901908e-01 4.87330542e-01 4.81780829e-01 4.76253153e-01 4.70747891e-01 + 4.65265417e-01 4.59806099e-01 4.54370299e-01 4.48958375e-01 4.43570681e-01 + 4.38207564e-01 4.32869366e-01 4.27556424e-01 4.22269072e-01 4.17007635e-01 + 4.11772436e-01 4.06563793e-01 4.01382015e-01 3.96227411e-01 3.91100281e-01 + 3.86000921e-01 3.80929624e-01 3.75886673e-01 3.70872351e-01 3.65886933e-01 + 3.60930689e-01 3.56003885e-01 3.51106780e-01 3.46239629e-01 3.41402684e-01 + 3.36596187e-01 3.31820379e-01 3.27075494e-01 3.22361761e-01 3.17679405e-01 + 3.13028645e-01 3.08409694e-01 3.03822762e-01 2.99268052e-01 2.94745764e-01 + 2.90256091e-01 2.85799221e-01 2.81375338e-01 2.76984621e-01 2.72627243e-01 + 2.68303374e-01 2.64013176e-01 2.59756808e-01 2.55534425e-01 2.51346174e-01 + 2.47192200e-01 2.43072641e-01 2.38987632e-01 2.34937302e-01 2.30921775e-01 + 2.26941171e-01 2.22995604e-01 2.19085184e-01 2.15210017e-01 2.11370202e-01 + 2.07565837e-01 2.03797010e-01 2.00063809e-01 1.96366316e-01 1.92704606e-01 + 1.89078754e-01 1.85488825e-01 1.81934884e-01 1.78416989e-01 1.74935194e-01 + 1.71489549e-01 1.68080098e-01 1.64706883e-01 1.61369940e-01 1.58069300e-01 + 1.54804992e-01 1.51577037e-01 1.48385456e-01 1.45230262e-01 1.42111467e-01 + 1.39029075e-01 1.35983089e-01 1.32973506e-01 1.30000321e-01 1.27063522e-01 + 1.24163095e-01 1.21299021e-01 1.18471278e-01 1.15679839e-01 1.12924673e-01 + 1.10205745e-01 1.07523018e-01 1.04876449e-01 1.02265992e-01 9.96915962e-02 + 9.71532089e-02 9.46507723e-02 9.21842253e-02 8.97535033e-02 8.73585377e-02 + 8.49992567e-02 8.26755846e-02 8.03874424e-02 7.81347475e-02 7.59174139e-02 + 7.37353522e-02 7.15884695e-02 6.94766698e-02 6.73998535e-02 6.53579178e-02 + 6.33507567e-02 6.13782611e-02 5.94403186e-02 5.75368137e-02 5.56676277e-02 + 5.38326390e-02 5.20317229e-02 5.02647517e-02 4.85315948e-02 4.68321187e-02 + 4.51661870e-02 4.35336603e-02 4.19343967e-02 4.03682513e-02 3.88350765e-02 + 3.73347222e-02 3.58670354e-02 3.44318607e-02 3.30290400e-02 3.16584126e-02 + 3.03198154e-02 2.90130829e-02 2.77380470e-02 2.64945373e-02 2.52823812e-02 + 2.41014035e-02 2.29514269e-02 2.18322718e-02 2.07437565e-02 1.96856971e-02 + 1.86579075e-02 1.76601995e-02 1.66923831e-02 1.57542659e-02 1.48456539e-02 + 1.39663510e-02 1.31161591e-02 1.22948785e-02 1.15023074e-02 1.07382425e-02 + 1.00024785e-02 9.29480855e-03 8.61502407e-03 7.96291488e-03 7.33826918e-03 + 6.74087363e-03 6.17051335e-03 5.62697200e-03 5.11003178e-03 4.61947348e-03 + 4.15507654e-03 3.71661904e-03 3.30387776e-03 2.91662825e-03 2.55464479e-03 + 2.21770052e-03 1.90556738e-03 1.61801622e-03 1.35481681e-03 1.11573786e-03 + 9.00547090e-04 7.09011235e-04 5.40896093e-04 3.95966561e-04 2.73986669e-04 + 1.74719613e-04 9.79277918e-05 4.33728431e-05 1.08156751e-05 1.65021653e-08 + 3.71505131e+05 2.74649258e+05 1.35893225e+05 8.96579686e+04 6.65526070e+04 + 5.26989696e+04 4.34710050e+04 3.68861241e+04 3.19530360e+04 2.81210268e+04 + 2.50596707e+04 2.25586996e+04 2.04779367e+04 1.87203386e+04 1.72165903e+04 + 1.59158625e+04 1.47800346e+04 1.37799571e+04 1.28929591e+04 1.21011439e+04 + 1.13901951e+04 1.07485244e+04 1.01666510e+04 9.63674408e+03 9.15227864e+03 + 8.70777443e+03 8.29859499e+03 7.92079138e+03 7.57097941e+03 7.24624224e+03 + 6.94405245e+03 6.66220928e+03 6.39878750e+03 6.15209569e+03 5.92064187e+03 + 5.70310492e+03 5.49831093e+03 5.30521323e+03 5.12287567e+03 4.95045842e+03 + 4.78720594e+03 4.63243671e+03 4.48553435e+03 4.34594011e+03 4.21314626e+03 + 4.08669044e+03 3.96615071e+03 3.85114128e+03 3.74130867e+03 3.63632847e+03 + 3.53590240e+03 3.43975576e+03 3.34763513e+03 3.25930639e+03 3.17455290e+03 + 3.09317393e+03 3.01498322e+03 2.93980772e+03 2.86748644e+03 2.79786941e+03 + 2.73081680e+03 2.66619804e+03 2.60389110e+03 2.54378179e+03 2.48576316e+03 + 2.42973494e+03 2.37560302e+03 2.32327899e+03 2.27267973e+03 2.22372701e+03 + 2.17634716e+03 2.13047071e+03 2.08603215e+03 2.04296960e+03 2.00122459e+03 + 1.96074185e+03 1.92146906e+03 1.88335668e+03 1.84635776e+03 1.81042780e+03 + 1.77552455e+03 1.74160791e+03 1.70863977e+03 1.67658393e+03 1.64540592e+03 + 1.61507295e+03 1.58555380e+03 1.55681872e+03 1.52883936e+03 1.50158865e+03 + 1.47504079e+03 1.44917112e+03 1.42395612e+03 1.39937327e+03 1.37540106e+03 + 1.35201892e+03 1.32920716e+03 1.30694691e+03 1.28522013e+03 1.26400950e+03 + 1.24329844e+03 1.22307103e+03 1.20331203e+03 1.18400677e+03 1.16514119e+03 + 1.14670178e+03 1.12867557e+03 1.11105008e+03 1.09381330e+03 1.07695372e+03 + 1.06046021e+03 1.04432210e+03 1.02852909e+03 1.01307129e+03 9.97939129e+02 + 9.83123423e+02 9.68615298e+02 9.54406200e+02 9.40487878e+02 9.26852371e+02 + 9.13491996e+02 9.00399335e+02 8.87567225e+02 8.74988744e+02 8.62657207e+02 + 8.50566152e+02 8.38709332e+02 8.27080706e+02 8.15674431e+02 8.04484854e+02 + 7.93506505e+02 7.82734090e+02 7.72162481e+02 7.61786715e+02 7.51601983e+02 + 7.41603627e+02 7.31787132e+02 7.22148123e+02 7.12682357e+02 7.03385720e+02 + 6.94254225e+02 6.85283999e+02 6.76471287e+02 6.67812446e+02 6.59303936e+02 + 6.50942324e+02 6.42724275e+02 6.34646548e+02 6.26705997e+02 6.18899565e+02 + 6.11224280e+02 6.03677253e+02 5.96255678e+02 5.88956824e+02 5.81778037e+02 + 5.74716734e+02 5.67770403e+02 5.60936600e+02 5.54212947e+02 5.47597127e+02 + 5.41086888e+02 5.34680034e+02 5.28374430e+02 5.22167994e+02 5.16058699e+02 + 5.10044569e+02 5.04123681e+02 4.98294159e+02 4.92554175e+02 4.86901947e+02 + 4.81335739e+02 4.75853855e+02 4.70454645e+02 4.65136496e+02 4.59897836e+02 + 4.54737133e+02 4.49652890e+02 4.44643646e+02 4.39707976e+02 4.34844488e+02 + 4.30051824e+02 4.25328659e+02 4.20673696e+02 4.16085670e+02 4.11563347e+02 + 4.07105518e+02 4.02711005e+02 3.98378656e+02 3.94107344e+02 3.89895969e+02 + 3.85743454e+02 3.81648749e+02 3.77610825e+02 3.73628677e+02 3.69701321e+02 + 3.65827796e+02 3.62007162e+02 3.58238498e+02 3.54520905e+02 3.50853501e+02 + 3.47235425e+02 3.43665834e+02 3.40143902e+02 3.36668821e+02 3.33239801e+02 + 3.29856066e+02 3.26516860e+02 3.23221438e+02 3.19969076e+02 3.16759059e+02 + 3.13590692e+02 3.10463290e+02 3.07376184e+02 3.04328720e+02 3.01320253e+02 + 2.98350154e+02 2.95417807e+02 2.92522606e+02 2.89663958e+02 2.86841283e+02 + 2.84054011e+02 2.81301582e+02 2.78583450e+02 2.75899078e+02 2.73247937e+02 + 2.70629513e+02 2.68043298e+02 2.65488794e+02 2.62965516e+02 2.60472984e+02 + 2.58010728e+02 2.55578289e+02 2.53175214e+02 2.50801060e+02 2.48455392e+02 + 2.46137782e+02 2.43847811e+02 2.41585068e+02 2.39349147e+02 2.37139654e+02 + 2.34956196e+02 2.32798393e+02 2.30665869e+02 2.28558254e+02 2.26475186e+02 + 2.24416310e+02 2.22381275e+02 2.20369739e+02 2.18381363e+02 2.16415817e+02 + 2.14472775e+02 2.12551916e+02 2.10652927e+02 2.08775497e+02 2.06919325e+02 + 2.05084110e+02 2.03269560e+02 2.01475387e+02 1.99701306e+02 1.97947040e+02 + 1.96212314e+02 1.94496858e+02 1.92800409e+02 1.91122705e+02 1.89463490e+02 + 1.87822514e+02 1.86199527e+02 1.84594287e+02 1.83006553e+02 1.81436090e+02 + 1.79882667e+02 1.78346055e+02 1.76826030e+02 1.75322370e+02 1.73834860e+02 + 1.72363285e+02 1.70907435e+02 1.69467104e+02 1.68042086e+02 1.66632183e+02 + 1.65237197e+02 1.63856933e+02 1.62491201e+02 1.61139813e+02 1.59802583e+02 + 1.58479330e+02 1.57169873e+02 1.55874037e+02 1.54591647e+02 1.53322532e+02 + 1.52066524e+02 1.50823456e+02 1.49593165e+02 1.48375490e+02 1.47170273e+02 + 1.45977356e+02 1.44796588e+02 1.43627815e+02 1.42470889e+02 1.41325662e+02 + 1.40191991e+02 1.39069732e+02 1.37958744e+02 1.36858890e+02 1.35770033e+02 + 1.34692038e+02 1.33624774e+02 1.32568109e+02 1.31521915e+02 1.30486065e+02 + 1.29460434e+02 1.28444900e+02 1.27439341e+02 1.26443637e+02 1.25457671e+02 + 1.24481326e+02 1.23514488e+02 1.22557044e+02 1.21608883e+02 1.20669895e+02 + 1.19739973e+02 1.18819008e+02 1.17906897e+02 1.17003536e+02 1.16108822e+02 + 1.15222655e+02 1.14344935e+02 1.13475565e+02 1.12614448e+02 1.11761488e+02 + 1.10916591e+02 1.10079666e+02 1.09250620e+02 1.08429363e+02 1.07615807e+02 + 1.06809864e+02 1.06011446e+02 1.05220470e+02 1.04436850e+02 1.03660504e+02 + 1.02891350e+02 1.02129306e+02 1.01374294e+02 1.00626234e+02 9.98850490e+01 + 9.91506621e+01 9.84229978e+01 9.77019815e+01 9.69875397e+01 9.62795998e+01 + 9.55780899e+01 9.48829395e+01 9.41940788e+01 9.35114387e+01 9.28349515e+01 + 9.21645498e+01 9.15001676e+01 9.08417394e+01 9.01892007e+01 8.95424878e+01 + 8.89015379e+01 8.82662888e+01 8.76366793e+01 8.70126489e+01 8.63941379e+01 + 8.57810873e+01 8.51734390e+01 8.45711354e+01 8.39741198e+01 8.33823362e+01 + 8.27957293e+01 8.22142444e+01 8.16378276e+01 8.10664257e+01 8.04999861e+01 + 7.99384568e+01 7.93817865e+01 7.88299247e+01 7.82828212e+01 7.77404266e+01 + 7.72026922e+01 7.66695698e+01 7.61410118e+01 7.56169711e+01 7.50974014e+01 + 7.45822568e+01 7.40714918e+01 7.35650619e+01 7.30629228e+01 7.25650308e+01 + 7.20713427e+01 7.15818160e+01 7.10964085e+01 7.06150787e+01 7.01377854e+01 + 6.96644881e+01 6.91951466e+01 6.87297212e+01 6.82681729e+01 6.78104629e+01 + 6.73565530e+01 6.69064053e+01 6.64599827e+01 6.60172481e+01 6.55781651e+01 + 6.51426977e+01 6.47108103e+01 6.42824677e+01 6.38576352e+01 6.34362783e+01 + 6.30183631e+01 6.26038561e+01 6.21927241e+01 6.17849342e+01 6.13804542e+01 + 6.09792519e+01 6.05812957e+01 6.01865543e+01 5.97949967e+01 5.94065925e+01 + 5.90213113e+01 5.86391234e+01 5.82599991e+01 5.78839092e+01 5.75108250e+01 + 5.71407179e+01 5.67735596e+01 5.64093223e+01 5.60479784e+01 5.56895007e+01 + 5.53338621e+01 5.49810362e+01 5.46309964e+01 5.42837169e+01 5.39391717e+01 + 5.35973355e+01 5.32581831e+01 5.29216896e+01 5.25878303e+01 5.22565810e+01 + 5.19279175e+01 5.16018161e+01 5.12782532e+01 5.09572056e+01 5.06386501e+01 + 5.03225641e+01 5.00089251e+01 4.96977108e+01 4.93888991e+01 4.90824683e+01 + 4.87783969e+01 4.84766635e+01 4.81772471e+01 4.78801269e+01 4.75852822e+01 + 4.72926927e+01 4.70023383e+01 4.67141989e+01 4.64282548e+01 4.61444866e+01 + 4.58628749e+01 4.55834007e+01 4.53060451e+01 4.50307894e+01 4.47576150e+01 + 4.44865039e+01 4.42174378e+01 4.39503989e+01 4.36853695e+01 4.34223320e+01 + 4.31612692e+01 4.29021640e+01 4.26449994e+01 4.23897586e+01 4.21364250e+01 + 4.18849823e+01 4.16354141e+01 4.13877045e+01 4.11418375e+01 4.08977974e+01 + 4.06555686e+01 4.04151358e+01 4.01764837e+01 3.99395973e+01 3.97044616e+01 + 3.94710618e+01 3.92393834e+01 3.90094120e+01 3.87811332e+01 3.85545328e+01 + 3.83295969e+01 3.81063117e+01 3.78846634e+01 3.76646384e+01 3.74462233e+01 + 3.72294049e+01 3.70141699e+01 3.68005054e+01 3.65883986e+01 3.63778365e+01 + 3.61688067e+01 3.59612967e+01 3.57552940e+01 3.55507865e+01 3.53477621e+01 + 3.51462088e+01 3.49461146e+01 3.47474680e+01 3.45502573e+01 3.43544709e+01 + 3.41600975e+01 3.39671259e+01 3.37755448e+01 3.35853433e+01 3.33965104e+01 + 3.32090353e+01 3.30229073e+01 3.28381158e+01 3.26546502e+01 3.24725003e+01 + 3.22916557e+01 3.21121062e+01 3.19338418e+01 3.17568524e+01 3.15811282e+01 + 3.14066595e+01 3.12334364e+01 3.10614495e+01 3.08906892e+01 3.07211461e+01 + 3.05528109e+01 3.03856744e+01 3.02197274e+01 3.00549609e+01 2.98913659e+01 + 2.97289337e+01 2.95676552e+01 2.94075220e+01 2.92485253e+01 2.90906567e+01 + 2.89339075e+01 2.87782696e+01 2.86237345e+01 2.84702941e+01 2.83179402e+01 + 2.81666647e+01 2.80164597e+01 2.78673172e+01 2.77192294e+01 2.75721884e+01 + 2.74261867e+01 2.72812164e+01 2.71372702e+01 2.69943404e+01 2.68524196e+01 + 2.67115005e+01 2.65715758e+01 2.64326381e+01 2.62946804e+01 2.61576954e+01 + 2.60216762e+01 2.58866157e+01 2.57525070e+01 2.56193432e+01 2.54871175e+01 + 2.53558231e+01 2.52254532e+01 2.50960012e+01 2.49674605e+01 2.48398246e+01 + 2.47130868e+01 2.45872407e+01 2.44622800e+01 2.43381982e+01 2.42149890e+01 + 2.40926461e+01 2.39711634e+01 2.38505345e+01 2.37307534e+01 2.36118139e+01 + 2.34937099e+01 2.33764355e+01 2.32599847e+01 2.31443514e+01 2.30295297e+01 + 2.29155138e+01 2.28022979e+01 2.26898760e+01 2.25782423e+01 2.24673913e+01 + 2.23573170e+01 2.22480138e+01 2.21394760e+01 2.20316979e+01 2.19246741e+01 + 2.18183987e+01 2.17128663e+01 2.16080713e+01 2.15040081e+01 2.14006713e+01 + 2.12980553e+01 2.11961547e+01 2.10949639e+01 2.09944776e+01 2.08946903e+01 + 2.07955965e+01 2.06971909e+01 2.05994680e+01 2.05024225e+01 2.04060489e+01 + 2.03103419e+01 2.02152961e+01 2.01209062e+01 2.00271667e+01 1.99340723e+01 + 1.98416176e+01 1.97497974e+01 1.96586061e+01 1.95680384e+01 1.94780891e+01 + 1.93887526e+01 1.93000236e+01 1.92118968e+01 1.91243667e+01 1.90374279e+01 + 1.89510751e+01 1.88653027e+01 1.87801054e+01 1.86954777e+01 1.86114142e+01 + 1.85279093e+01 1.84449576e+01 1.83625536e+01 1.82806917e+01 1.81993664e+01 + 1.81185722e+01 1.80383034e+01 1.79585544e+01 1.78793197e+01 1.78005935e+01 + 1.77223703e+01 1.76446442e+01 1.75674096e+01 1.74906608e+01 1.74143919e+01 + 1.73385972e+01 1.72632708e+01 1.71884069e+01 1.71139997e+01 1.70400432e+01 + 1.69665314e+01 1.68934585e+01 1.68208185e+01 1.67486053e+01 1.66768129e+01 + 1.66054352e+01 1.65344662e+01 1.64638996e+01 1.63937295e+01 1.63239495e+01 + 1.62545536e+01 1.61855354e+01 1.61168888e+01 1.60486074e+01 1.59806849e+01 + 1.59131152e+01 1.58458917e+01 1.57790082e+01 1.57124583e+01 1.56462356e+01 + 1.55803337e+01 1.55147462e+01 1.54494667e+01 1.53844886e+01 1.53198057e+01 + 1.52554114e+01 1.51912992e+01 1.51274628e+01 1.50638956e+01 1.50005912e+01 + 1.49375432e+01 1.48747451e+01 1.48121904e+01 1.47498729e+01 1.46877860e+01 + 1.46259234e+01 1.45642788e+01 1.45028458e+01 1.44416180e+01 1.43805894e+01 + 1.43197535e+01 1.42591043e+01 1.41986356e+01 1.41383412e+01 1.40782152e+01 + 1.40182515e+01 1.39584442e+01 1.38987874e+01 1.38392754e+01 1.37799023e+01 + 1.37206626e+01 1.36615506e+01 1.36025608e+01 1.35436879e+01 1.34849265e+01 + 1.34262714e+01 1.33677175e+01 1.33092596e+01 1.32508930e+01 1.31926128e+01 + 1.31344143e+01 1.30762930e+01 1.30182443e+01 1.29602640e+01 1.29023479e+01 + 1.28444919e+01 1.27866920e+01 1.27289446e+01 1.26712459e+01 1.26135925e+01 + 1.25559810e+01 1.24984082e+01 1.24408710e+01 1.23833667e+01 1.23258924e+01 + 1.22684456e+01 1.22110239e+01 1.21536251e+01 1.20962470e+01 1.20388879e+01 + 1.19815458e+01 1.19242194e+01 1.18669071e+01 1.18096078e+01 1.17523204e+01 + 1.16950440e+01 1.16377779e+01 1.15805216e+01 1.15232746e+01 1.14660369e+01 + 1.14088083e+01 1.13515889e+01 1.12943791e+01 1.12371794e+01 1.11799903e+01 + 1.11228126e+01 1.10656472e+01 1.10084953e+01 1.09513580e+01 1.08942368e+01 + 1.08371332e+01 1.07800489e+01 1.07229856e+01 1.06659454e+01 1.06089302e+01 + 1.05519423e+01 1.04949840e+01 1.04380578e+01 1.03811662e+01 1.03243118e+01 + 1.02674975e+01 1.02107262e+01 1.01540007e+01 1.00973241e+01 1.00406996e+01 + 9.98413044e+00 9.92761985e+00 9.87117124e+00 9.81478802e+00 9.75847371e+00 + 9.70223184e+00 9.64606603e+00 9.58997992e+00 9.53397719e+00 9.47806158e+00 + 9.42223684e+00 9.36650675e+00 9.31087511e+00 9.25534574e+00 9.19992248e+00 + 9.14460916e+00 9.08940962e+00 9.03432771e+00 8.97936725e+00 8.92453207e+00 + 8.86982599e+00 8.81525279e+00 8.76081624e+00 8.70652009e+00 8.65236805e+00 + 8.59836381e+00 8.54451101e+00 8.49081326e+00 8.43727413e+00 8.38389714e+00 + 8.33068575e+00 8.27764339e+00 8.22477343e+00 8.17207918e+00 8.11956390e+00 + 8.06723078e+00 8.01508296e+00 7.96312350e+00 7.91135542e+00 7.85978164e+00 + 7.80840505e+00 7.75722843e+00 7.70625452e+00 7.65548598e+00 7.60492538e+00 + 7.55457525e+00 7.50443802e+00 7.45451604e+00 7.40481162e+00 7.35532695e+00 + 7.30606417e+00 7.25702534e+00 7.20821245e+00 7.15962739e+00 7.11127200e+00 + 7.06314804e+00 7.01525718e+00 6.96760102e+00 6.92018109e+00 6.87299885e+00 + 6.82605568e+00 6.77935288e+00 6.73289168e+00 6.68667325e+00 6.64069867e+00 + 6.59496898e+00 6.54948512e+00 6.50424797e+00 6.45925834e+00 6.41451700e+00 + 6.37002461e+00 6.32578181e+00 6.28178913e+00 6.23804709e+00 6.19455611e+00 + 6.15131656e+00 6.10832876e+00 6.06559296e+00 6.02310937e+00 5.98087813e+00 + 5.93889933e+00 5.89717300e+00 5.85569914e+00 5.81447769e+00 5.77350853e+00 + 5.73279150e+00 5.69232639e+00 5.65211296e+00 5.61215092e+00 5.57243991e+00 + 5.53297956e+00 5.49376946e+00 5.45480915e+00 5.41609812e+00 5.37763584e+00 + 5.33942175e+00 5.30145525e+00 5.26373568e+00 5.22626240e+00 5.18903469e+00 + 5.15205182e+00 5.11531304e+00 5.07881756e+00 5.04256457e+00 5.00655322e+00 + 4.97078266e+00 4.93525199e+00 4.89996030e+00 4.86490667e+00 4.83009013e+00 + 4.79550971e+00 4.76116442e+00 4.72705324e+00 4.69317516e+00 4.65952911e+00 + 4.62611405e+00 4.59292889e+00 4.55997254e+00 4.52724390e+00 4.49474186e+00 + 4.46246527e+00 4.43041301e+00 4.39858391e+00 4.36697683e+00 4.33559058e+00 + 4.30442399e+00 4.27347587e+00 4.24274502e+00 4.21223025e+00 4.18193034e+00 + 4.15184408e+00 4.12197025e+00 4.09230762e+00 4.06285497e+00 4.03361105e+00 + 4.00457465e+00 3.97574451e+00 3.94711939e+00 3.91869805e+00 3.89047924e+00 + 3.86246171e+00 3.83464422e+00 3.80702552e+00 3.77960436e+00 3.75237948e+00 + 3.72534965e+00 3.69851361e+00 3.67187011e+00 3.64541790e+00 3.61915576e+00 + 3.59308242e+00 3.56719665e+00 3.54149722e+00 3.51598288e+00 3.49065241e+00 + 3.46550458e+00 3.44053815e+00 3.41575191e+00 3.39114464e+00 3.36671512e+00 + 3.34246213e+00 3.31838448e+00 3.29448096e+00 3.27075038e+00 3.24719152e+00 + 3.22380322e+00 3.20058428e+00 3.17753353e+00 3.15464979e+00 3.13193188e+00 + 3.10937866e+00 3.08698896e+00 3.06476163e+00 3.04269551e+00 3.02078948e+00 + 2.99904239e+00 2.97745312e+00 2.95602054e+00 2.93474353e+00 2.91362099e+00 + 2.89265181e+00 2.87183488e+00 2.85116912e+00 2.83065343e+00 2.81028675e+00 + 2.79006799e+00 2.76999609e+00 2.75006998e+00 2.73028861e+00 2.71065093e+00 + 2.69115591e+00 2.67180250e+00 2.65258967e+00 2.63351641e+00 2.61458169e+00 + 2.59578452e+00 2.57712388e+00 2.55859877e+00 2.54020822e+00 2.52195123e+00 + 2.50382683e+00 2.48583406e+00 2.46797193e+00 2.45023951e+00 2.43263583e+00 + 2.41515996e+00 2.39781095e+00 2.38058788e+00 2.36348981e+00 2.34651584e+00 + 2.32966505e+00 2.31293654e+00 2.29632940e+00 2.27984274e+00 2.26347568e+00 + 2.24722733e+00 2.23109683e+00 2.21508330e+00 2.19918589e+00 2.18340374e+00 + 2.16773599e+00 2.15218181e+00 2.13674036e+00 2.12141081e+00 2.10619234e+00 + 2.09108412e+00 2.07608534e+00 2.06119520e+00 2.04641290e+00 2.03173764e+00 + 2.01716864e+00 2.00270510e+00 1.98834625e+00 1.97409133e+00 1.95993956e+00 + 1.94589018e+00 1.93194245e+00 1.91809560e+00 1.90434891e+00 1.89070162e+00 + 1.87715301e+00 1.86370236e+00 1.85034893e+00 1.83709202e+00 1.82393091e+00 + 1.81086490e+00 1.79789329e+00 1.78501538e+00 1.77223049e+00 1.75953793e+00 + 1.74693701e+00 1.73442708e+00 1.72200745e+00 1.70967747e+00 1.69743647e+00 + 1.68528380e+00 1.67321882e+00 1.66124088e+00 1.64934933e+00 1.63754355e+00 + 1.62582290e+00 1.61418677e+00 1.60263452e+00 1.59116555e+00 1.57977925e+00 + 1.56847500e+00 1.55725221e+00 1.54611027e+00 1.53504861e+00 1.52406662e+00 + 1.51316373e+00 1.50233935e+00 1.49159292e+00 1.48092386e+00 1.47033160e+00 + 1.45981558e+00 1.44937525e+00 1.43901005e+00 1.42871943e+00 1.41850285e+00 + 1.40835976e+00 1.39828964e+00 1.38829194e+00 1.37836613e+00 1.36851170e+00 + 1.35872813e+00 1.34901488e+00 1.33937146e+00 1.32979735e+00 1.32029205e+00 + 1.31085505e+00 1.30148586e+00 1.29218399e+00 1.28294893e+00 1.27378022e+00 + 1.26467735e+00 1.25563986e+00 1.24666727e+00 1.23775911e+00 1.22891490e+00 + 1.22013419e+00 1.21141650e+00 1.20276139e+00 1.19416839e+00 1.18563706e+00 + 1.17716695e+00 1.16875761e+00 1.16040861e+00 1.15211950e+00 1.14388985e+00 + 1.13571922e+00 1.12760720e+00 1.11955335e+00 1.11155725e+00 1.10361848e+00 + 1.09573664e+00 1.08791130e+00 1.08014205e+00 1.07242850e+00 1.06477023e+00 + 1.05716685e+00 1.04961796e+00 1.04212316e+00 1.03468206e+00 1.02729427e+00 + 1.01995942e+00 1.01267711e+00 1.00544696e+00 9.98268607e-01 9.91141664e-01 + 9.84065763e-01 9.77040534e-01 9.70065612e-01 9.63140634e-01 9.56265238e-01 + 9.49439067e-01 9.42661765e-01 9.35932979e-01 9.29252359e-01 9.22619557e-01 + 9.16034229e-01 9.09496031e-01 9.03004625e-01 8.96559671e-01 8.90160836e-01 + 8.83807786e-01 8.77500192e-01 8.71237727e-01 8.65020063e-01 8.58846880e-01 + 8.52717856e-01 8.46632673e-01 8.40591016e-01 8.34592571e-01 8.28637027e-01 + 8.22724074e-01 8.16853407e-01 8.11024721e-01 8.05237713e-01 7.99492085e-01 + 7.93787537e-01 7.88123775e-01 7.82500506e-01 7.76917437e-01 7.71374280e-01 + 7.65870748e-01 7.60406556e-01 7.54981421e-01 7.49595063e-01 7.44247202e-01 + 7.38937563e-01 7.33665869e-01 7.28431850e-01 7.23235234e-01 7.18075752e-01 + 7.12953138e-01 7.07867127e-01 7.02817456e-01 6.97803864e-01 6.92826092e-01 + 6.87883884e-01 6.82976983e-01 6.78105137e-01 6.73268093e-01 6.68465603e-01 + 6.63697417e-01 6.58963291e-01 6.54262979e-01 6.49596240e-01 6.44962832e-01 + 6.40362516e-01 6.35795055e-01 6.31260213e-01 6.26757758e-01 6.22287455e-01 + 6.17849075e-01 6.13442390e-01 6.09067171e-01 6.04723193e-01 6.00410233e-01 + 5.96128068e-01 5.91876478e-01 5.87655243e-01 5.83464146e-01 5.79302972e-01 + 5.75171505e-01 5.71069533e-01 5.66996845e-01 5.62953230e-01 5.58938482e-01 + 5.54952393e-01 5.50994758e-01 5.47065373e-01 5.43164035e-01 5.39290546e-01 + 5.35444703e-01 5.31626311e-01 5.27835173e-01 5.24071092e-01 5.20333877e-01 + 5.16623334e-01 5.12939273e-01 5.09281504e-01 5.05649839e-01 5.02044091e-01 + 4.98464075e-01 4.94909607e-01 4.91380505e-01 4.87876585e-01 4.84397670e-01 + 4.80943579e-01 4.77514135e-01 4.74109162e-01 4.70728485e-01 4.67371930e-01 + 4.64039325e-01 4.60730498e-01 4.57445280e-01 4.54183502e-01 4.50944995e-01 + 4.47729594e-01 4.44537134e-01 4.41367451e-01 4.38220381e-01 4.35095763e-01 + 4.31993437e-01 4.28913243e-01 4.25855024e-01 4.22818621e-01 4.19803880e-01 + 4.16810646e-01 4.13838764e-01 4.10888082e-01 4.07958449e-01 4.05049714e-01 + 4.02161729e-01 3.99294344e-01 3.96447413e-01 3.93620789e-01 3.90814328e-01 + 3.88027885e-01 3.85261318e-01 3.82514484e-01 3.79787243e-01 3.77079454e-01 + 3.74390979e-01 3.71721680e-01 3.69071419e-01 3.66440061e-01 3.63827471e-01 + 3.61233515e-01 3.58658059e-01 3.56100972e-01 3.53562123e-01 3.51041381e-01 + 3.48538617e-01 3.46053702e-01 3.43586510e-01 3.41136913e-01 3.38704786e-01 + 3.36290004e-01 3.33892444e-01 3.31511982e-01 3.29148497e-01 3.26801867e-01 + 3.24471972e-01 3.22158693e-01 3.19861910e-01 3.17581506e-01 3.15317365e-01 + 3.13069370e-01 3.10837405e-01 3.08621358e-01 3.06421113e-01 3.04236558e-01 + 3.02067581e-01 2.99914071e-01 2.97775918e-01 2.95653012e-01 2.93545243e-01 + 2.91452505e-01 2.89374690e-01 2.87311691e-01 2.85263403e-01 2.83229721e-01 + 2.81210540e-01 2.79205757e-01 2.77215269e-01 2.75238974e-01 2.73276772e-01 + 2.71328561e-01 2.69394241e-01 2.67473714e-01 2.65566881e-01 2.63673644e-01 + 2.61793907e-01 2.59927573e-01 2.58074546e-01 2.56234732e-01 2.54408036e-01 + 2.52594364e-01 2.50793624e-01 2.49005724e-01 2.47230572e-01 2.45468077e-01 + 2.43718148e-01 2.41980696e-01 2.40255632e-01 2.38542868e-01 2.36842316e-01 + 2.35153889e-01 2.33477499e-01 2.31813063e-01 2.30160493e-01 2.28519706e-01 + 2.26890618e-01 2.25273144e-01 2.23667203e-01 2.22072711e-01 2.20489588e-01 + 2.18917752e-01 2.17357123e-01 2.15807620e-01 2.14269165e-01 2.12741679e-01 + 2.11225083e-01 2.09719299e-01 2.08224251e-01 2.06739862e-01 2.05266056e-01 + 2.03802758e-01 2.02349892e-01 2.00907384e-01 1.99475161e-01 1.98053148e-01 + 1.96641274e-01 1.95239466e-01 1.93847651e-01 1.92465759e-01 1.91093720e-01 + 1.89731462e-01 1.88378916e-01 1.87036013e-01 1.85702683e-01 1.84378860e-01 + 1.83064474e-01 1.81759459e-01 1.80463748e-01 1.79177274e-01 1.77899972e-01 + 1.76631776e-01 1.75372621e-01 1.74122443e-01 1.72881178e-01 1.71648762e-01 + 1.70425132e-01 1.69210225e-01 1.68003980e-01 1.66806334e-01 1.65617226e-01 + 1.64436595e-01 1.63264382e-01 1.62100525e-01 1.60944965e-01 1.59797644e-01 + 1.58658502e-01 1.57527480e-01 1.56404522e-01 1.55289570e-01 1.54182566e-01 + 1.53083453e-01 1.51992177e-01 1.50908680e-01 1.49832907e-01 1.48764803e-01 + 1.47704314e-01 1.46651386e-01 1.45605963e-01 1.44567993e-01 1.43537423e-01 + 1.42514199e-01 1.41498271e-01 1.40489584e-01 1.39488089e-01 1.38493732e-01 + 1.37506465e-01 1.36526236e-01 1.35552995e-01 1.34586691e-01 1.33627277e-01 + 1.32674702e-01 1.31728917e-01 1.30789875e-01 1.29857528e-01 1.28931827e-01 + 1.28012725e-01 1.27100175e-01 1.26194131e-01 1.25294545e-01 1.24401373e-01 + 1.23514568e-01 1.22634084e-01 1.21759878e-01 1.20891903e-01 1.20030116e-01 + 1.19174473e-01 1.18324929e-01 1.17481442e-01 1.16643967e-01 1.15812463e-01 + 1.14986886e-01 1.14167195e-01 1.13353347e-01 1.12545300e-01 1.11743014e-01 + 1.10946447e-01 1.10155559e-01 1.09370309e-01 1.08590657e-01 1.07816562e-01 + 1.07047986e-01 1.06284889e-01 1.05527232e-01 1.04774975e-01 1.04028082e-01 + 1.03286513e-01 1.02550230e-01 1.01819196e-01 1.01093373e-01 1.00372724e-01 + 9.96572130e-02 9.89468023e-02 9.82414559e-02 9.75411377e-02 9.68458118e-02 + 9.61554427e-02 9.54699950e-02 9.47894335e-02 9.41137236e-02 9.34428306e-02 + 9.27767201e-02 9.21153581e-02 9.14587107e-02 9.08067443e-02 9.01594255e-02 + 8.95167213e-02 8.88785986e-02 8.82450249e-02 8.76159677e-02 8.69913948e-02 + 8.63712742e-02 8.57555743e-02 8.51442634e-02 8.45373104e-02 8.39346840e-02 + 8.33363536e-02 8.27422884e-02 8.21524581e-02 8.15668325e-02 8.09853815e-02 + 8.04080755e-02 7.98348848e-02 7.92657803e-02 7.87007326e-02 7.81397129e-02 + 7.75826925e-02 7.70296429e-02 7.64805357e-02 7.59353429e-02 7.53940365e-02 + 7.48565889e-02 7.43229725e-02 7.37931601e-02 7.32671244e-02 7.27448387e-02 + 7.22262761e-02 7.17114101e-02 7.12002144e-02 7.06926628e-02 7.01887293e-02 + 6.96883881e-02 6.91916136e-02 6.86983804e-02 6.82086633e-02 6.77224371e-02 + 6.72396770e-02 6.67603584e-02 6.62844565e-02 6.58119472e-02 6.53428062e-02 + 6.48770095e-02 6.44145332e-02 6.39553537e-02 6.34994475e-02 6.30467913e-02 + 6.25973618e-02 6.21511361e-02 6.17080914e-02 6.12682049e-02 6.08314542e-02 + 6.03978168e-02 5.99672707e-02 5.95397938e-02 5.91153641e-02 5.86939600e-02 + 5.82755599e-02 5.78601423e-02 5.74476861e-02 5.70381701e-02 5.66315734e-02 + 5.62278751e-02 5.58270545e-02 5.54290913e-02 5.50339649e-02 5.46416552e-02 + 5.42521421e-02 5.38654056e-02 5.34814260e-02 5.31001837e-02 5.27216590e-02 + 5.23458326e-02 5.19726854e-02 5.16021981e-02 5.12343518e-02 5.08691278e-02 + 5.05065072e-02 5.01464716e-02 4.97890026e-02 4.94340817e-02 4.90816910e-02 + 4.87318122e-02 4.83844276e-02 4.80395193e-02 4.76970697e-02 4.73570612e-02 + 4.70194765e-02 4.66842983e-02 4.63515094e-02 4.60210928e-02 4.56930316e-02 + 4.53673090e-02 4.50439082e-02 4.47228129e-02 4.44040065e-02 4.40874727e-02 + 4.37731953e-02 4.34611583e-02 4.31513456e-02 4.28437414e-02 4.25383300e-02 + 4.22350957e-02 4.19340230e-02 4.16350965e-02 4.13383009e-02 4.10436211e-02 + 4.07510418e-02 4.04605482e-02 4.01721254e-02 3.98857586e-02 3.96014332e-02 + 3.93191346e-02 3.90388484e-02 3.87605602e-02 3.84842558e-02 3.82099210e-02 + 3.79375418e-02 3.76671043e-02 3.73985946e-02 3.71319989e-02 3.68673037e-02 + 3.66044954e-02 3.63435605e-02 3.60844856e-02 3.58272576e-02 3.55718633e-02 + 3.53182895e-02 3.50665233e-02 3.48165518e-02 3.45683623e-02 3.43219420e-02 + 3.40772783e-02 3.38343586e-02 3.35931707e-02 3.33537020e-02 3.31159404e-02 + 3.28798737e-02 3.26454897e-02 3.24127766e-02 3.21817224e-02 3.19523153e-02 + 3.17245434e-02 3.14983953e-02 3.12738592e-02 3.10509238e-02 3.08295775e-02 + 3.06098091e-02 3.03916074e-02 3.01749610e-02 2.99598591e-02 2.97462905e-02 + 2.95342443e-02 2.93237097e-02 2.91146759e-02 2.89071322e-02 2.87010679e-02 + 2.84964726e-02 2.82933358e-02 2.80916470e-02 2.78913959e-02 2.76925724e-02 + 2.74951661e-02 2.72991671e-02 2.71045652e-02 2.69113506e-02 2.67195132e-02 + 2.65290434e-02 2.63399314e-02 2.61521674e-02 2.59657420e-02 2.57806454e-02 + 2.55968683e-02 2.54144013e-02 2.52332350e-02 2.50533601e-02 2.48747675e-02 + 2.46974479e-02 2.45213924e-02 2.43465919e-02 2.41730374e-02 2.40007202e-02 + 2.38296313e-02 2.36597620e-02 2.34911036e-02 2.33236475e-02 2.31573851e-02 + 2.29923079e-02 2.28284075e-02 2.26656754e-02 2.25041034e-02 2.23436831e-02 + 2.21844064e-02 2.20262651e-02 2.18692510e-02 2.17133563e-02 2.15585729e-02 + 2.14048928e-02 2.12523082e-02 2.11008114e-02 2.09503945e-02 2.08010498e-02 + 2.06527697e-02 2.05055467e-02 2.03593731e-02 2.02142415e-02 2.00701445e-02 + 1.99270747e-02 1.97850247e-02 1.96439874e-02 1.95039554e-02 1.93649217e-02 + 1.92268790e-02 1.90898204e-02 1.89537388e-02 1.88186273e-02 1.86844789e-02 + 1.85512868e-02 1.84190442e-02 1.82877442e-02 1.81573802e-02 1.80279455e-02 + 1.78994335e-02 1.77718376e-02 1.76451512e-02 1.75193680e-02 1.73944813e-02 + 1.72704850e-02 1.71473725e-02 1.70251376e-02 1.69037741e-02 1.67832757e-02 + 1.66636363e-02 1.65448498e-02 1.64269100e-02 1.63098110e-02 1.61935467e-02 + 1.60781111e-02 1.59634985e-02 1.58497029e-02 1.57367184e-02 1.56245394e-02 + 1.55131600e-02 1.54025746e-02 1.52927776e-02 1.51837632e-02 1.50755259e-02 + 1.49680602e-02 1.48613605e-02 1.47554215e-02 1.46502376e-02 1.45458035e-02 + 1.44421139e-02 1.43391635e-02 1.42369469e-02 1.41354590e-02 1.40346945e-02 + 1.39346484e-02 1.38353154e-02 1.37366905e-02 1.36387686e-02 1.35415448e-02 + 1.34450141e-02 1.33491714e-02 1.32540120e-02 1.31595309e-02 1.30657234e-02 + 1.29725845e-02 1.28801096e-02 1.27882939e-02 1.26971327e-02 1.26063151e-02 + 1.25154436e-02 1.24245269e-02 1.23335755e-02 1.22425997e-02 1.21516097e-02 + 1.20606156e-02 1.19696276e-02 1.18786553e-02 1.17877088e-02 1.16967975e-02 + 1.16059312e-02 1.15151193e-02 1.14243711e-02 1.13336959e-02 1.12431028e-02 + 1.11526008e-02 1.10621990e-02 1.09719059e-02 1.08817305e-02 1.07916812e-02 + 1.07017665e-02 1.06119947e-02 1.05223742e-02 1.04329131e-02 1.03436193e-02 + 1.02545008e-02 1.01655655e-02 1.00768209e-02 9.98827475e-03 9.89993445e-03 + 9.81180737e-03 9.72390078e-03 9.63622180e-03 9.54877749e-03 9.46157475e-03 + 9.37462041e-03 9.28792117e-03 9.20148363e-03 9.11531428e-03 9.02941949e-03 + 8.94380554e-03 8.85847859e-03 8.77344469e-03 8.68870981e-03 8.60427978e-03 + 8.52016033e-03 8.43635711e-03 8.35287563e-03 8.26972131e-03 8.18689948e-03 + 8.10441534e-03 8.02227400e-03 7.94048046e-03 7.85903964e-03 7.77795632e-03 + 7.69723520e-03 7.61688088e-03 7.53689786e-03 7.45729054e-03 7.37806320e-03 + 7.29922004e-03 7.22076516e-03 7.14270257e-03 7.06503616e-03 6.98776974e-03 + 6.91090701e-03 6.83445160e-03 6.75840702e-03 6.68277668e-03 6.60756394e-03 + 6.53277201e-03 6.45840404e-03 6.38446310e-03 6.31095212e-03 6.23787400e-03 + 6.16523150e-03 6.09302732e-03 6.02126407e-03 5.94994425e-03 5.87907029e-03 + 5.80864453e-03 5.73866924e-03 5.66914657e-03 5.60007862e-03 5.53146739e-03 + 5.46331479e-03 5.39562266e-03 5.32839276e-03 5.26162676e-03 5.19532625e-03 + 5.12949276e-03 5.06412771e-03 4.99923247e-03 4.93480832e-03 4.87085646e-03 + 4.80737803e-03 4.74437407e-03 4.68184557e-03 4.61979344e-03 4.55821851e-03 + 4.49712154e-03 4.43650324e-03 4.37636421e-03 4.31670502e-03 4.25752614e-03 + 4.19882800e-03 4.14061094e-03 4.08287524e-03 4.02562113e-03 3.96884876e-03 + 3.91255821e-03 3.85674951e-03 3.80142263e-03 3.74657745e-03 3.69221384e-03 + 3.63833156e-03 3.58493033e-03 3.53200982e-03 3.47956964e-03 3.42760932e-03 + 3.37612837e-03 3.32512621e-03 3.27460223e-03 3.22455576e-03 3.17498607e-03 + 3.12589238e-03 3.07727386e-03 3.02912963e-03 2.98145877e-03 2.93426028e-03 + 2.88753314e-03 2.84127627e-03 2.79548856e-03 2.75016882e-03 2.70531585e-03 + 2.66092838e-03 2.61700511e-03 2.57354469e-03 2.53054574e-03 2.48800680e-03 + 2.44592643e-03 2.40430309e-03 2.36313524e-03 2.32242128e-03 2.28215958e-03 + 2.24234848e-03 2.20298627e-03 2.16407120e-03 2.12560150e-03 2.08757536e-03 + 2.04999094e-03 2.01284635e-03 1.97613968e-03 1.93986899e-03 1.90403230e-03 + 1.86862762e-03 1.83365289e-03 1.79910607e-03 1.76498506e-03 1.73128773e-03 + 1.69801194e-03 1.66515551e-03 1.63271624e-03 1.60069191e-03 1.56908027e-03 + 1.53787904e-03 1.50708593e-03 1.47669860e-03 1.44671473e-03 1.41713194e-03 + 1.38794786e-03 1.35916007e-03 1.33076615e-03 1.30276366e-03 1.27515013e-03 + 1.24792309e-03 1.22108002e-03 1.19461843e-03 1.16853578e-03 1.14282952e-03 + 1.11749709e-03 1.09253592e-03 1.06794342e-03 1.04371697e-03 1.01985397e-03 + 9.96351789e-04 9.73207785e-04 9.50419307e-04 9.27983692e-04 9.05898268e-04 + 8.84160354e-04 8.62767259e-04 8.41716282e-04 8.21004715e-04 8.00629843e-04 + 7.80588942e-04 7.60879284e-04 7.41498133e-04 7.22442746e-04 7.03710377e-04 + 6.85298275e-04 6.67203682e-04 6.49423839e-04 6.31955983e-04 6.14797347e-04 + 5.97945161e-04 5.81396654e-04 5.65149053e-04 5.49199583e-04 5.33545470e-04 + 5.18183936e-04 5.03112205e-04 4.88327503e-04 4.73827052e-04 4.59608080e-04 + 4.45667814e-04 4.32003482e-04 4.18612315e-04 4.05491548e-04 3.92638416e-04 + 3.80050161e-04 3.67724024e-04 3.55657254e-04 3.43847102e-04 3.32290824e-04 + 3.20985682e-04 3.09928942e-04 2.99117876e-04 2.88549763e-04 2.78221885e-04 + 2.68131534e-04 2.58276007e-04 2.48652609e-04 2.39258651e-04 2.30091454e-04 + 2.21148345e-04 2.12426659e-04 2.03923742e-04 1.95636945e-04 1.87563631e-04 + 1.79701172e-04 1.72046947e-04 1.64598349e-04 1.57352776e-04 1.50307641e-04 + 1.43460364e-04 1.36808378e-04 1.30349125e-04 1.24080059e-04 1.17998647e-04 + 1.12102364e-04 1.06388699e-04 1.00855154e-04 9.54992401e-05 9.03184837e-05 + 8.53104220e-05 8.04726054e-05 7.58025972e-05 7.12979737e-05 6.69563244e-05 + 6.27752523e-05 5.87523737e-05 5.48853189e-05 5.11717319e-05 4.76092706e-05 + 4.41956073e-05 4.09284284e-05 3.78054347e-05 3.48243416e-05 3.19828792e-05 + 2.92787923e-05 2.67098408e-05 2.42737994e-05 2.19684581e-05 1.97916221e-05 + 1.77411120e-05 1.58147637e-05 1.40104289e-05 1.23259747e-05 1.07592841e-05 + 9.30825580e-06 7.97080453e-06 6.74486090e-06 5.62837161e-06 4.61929948e-06 + 3.71562352e-06 2.91533901e-06 2.21645756e-06 1.61700713e-06 1.11503215e-06 + 7.08593517e-07 3.95768671e-07 1.74651632e-07 4.33530448e-08 0.00000000e+00 + 8.54089214e+04 8.54089214e+04 4.71851341e+04 3.12780768e+04 2.33258140e+04 + 1.85554559e+04 1.53760394e+04 1.31057232e+04 1.14035870e+04 1.00802305e+04 + 9.02201376e+03 8.15662046e+03 7.43583982e+03 6.82629521e+03 6.30414625e+03 + 5.85191002e+03 5.45647442e+03 5.10781256e+03 4.79812582e+03 4.52125743e+03 + 4.27228201e+03 4.04721238e+03 3.84278633e+03 3.65630905e+03 3.48553486e+03 + 3.32857745e+03 3.18384071e+03 3.04996505e+03 2.92578509e+03 2.81029625e+03 + 2.70262791e+03 2.60202179e+03 2.50781443e+03 2.41942281e+03 2.33633252e+03 + 2.25808794e+03 2.18428413e+03 2.11455989e+03 2.04859210e+03 1.98609078e+03 + 1.92679496e+03 1.87046914e+03 1.81690028e+03 1.76589516e+03 1.71727813e+03 + 1.67088917e+03 1.62658219e+03 1.58422355e+03 1.54369075e+03 1.50487129e+03 + 1.46766169e+03 1.43196661e+03 1.39769802e+03 1.36477457e+03 1.33312095e+03 + 1.30266729e+03 1.27334878e+03 1.24510512e+03 1.21788020e+03 1.19162171e+03 + 1.16628084e+03 1.14181198e+03 1.11817248e+03 1.09532240e+03 1.07322430e+03 + 1.05184306e+03 1.03114567e+03 1.01110113e+03 9.91680241e+02 9.72855519e+02 + 9.54601047e+02 9.36892379e+02 9.19706428e+02 9.03021378e+02 8.86816598e+02 + 8.71072562e+02 8.55770773e+02 8.40893704e+02 8.26424727e+02 8.12348062e+02 + 7.98648722e+02 7.85312464e+02 7.72325742e+02 7.59675669e+02 7.47349973e+02 + 7.35336964e+02 7.23625501e+02 7.12204954e+02 7.01065184e+02 6.90196508e+02 + 6.79589678e+02 6.69235854e+02 6.59126586e+02 6.49253787e+02 6.39609720e+02 + 6.30186973e+02 6.20978448e+02 6.11977343e+02 6.03177134e+02 5.94571564e+02 + 5.86154629e+02 5.77920564e+02 5.69863834e+02 5.61979120e+02 5.54261311e+02 + 5.46705492e+02 5.39306934e+02 5.32061090e+02 5.24963582e+02 5.18010194e+02 + 5.11196866e+02 5.04519685e+02 4.97974882e+02 4.91558820e+02 4.85267995e+02 + 4.79099023e+02 4.73048641e+02 4.67113699e+02 4.61291153e+02 4.55578065e+02 + 4.49971597e+02 4.44469004e+02 4.39067634e+02 4.33764924e+02 4.28558392e+02 + 4.23445639e+02 4.18424343e+02 4.13492256e+02 4.08647203e+02 4.03887075e+02 + 3.99209833e+02 3.94613497e+02 3.90096152e+02 3.85655939e+02 3.81291059e+02 + 3.76999763e+02 3.72780358e+02 3.68631201e+02 3.64550696e+02 3.60537296e+02 + 3.56589497e+02 3.52705842e+02 3.48884912e+02 3.45125332e+02 3.41425764e+02 + 3.37784909e+02 3.34201504e+02 3.30674322e+02 3.27202169e+02 3.23783884e+02 + 3.20418339e+02 3.17104435e+02 3.13841105e+02 3.10627308e+02 3.07462032e+02 + 3.04344294e+02 3.01273133e+02 2.98247616e+02 2.95266833e+02 2.92329900e+02 + 2.89435952e+02 2.86584149e+02 2.83773672e+02 2.81003722e+02 2.78273520e+02 + 2.75582308e+02 2.72929346e+02 2.70313911e+02 2.67735301e+02 2.65192828e+02 + 2.62685823e+02 2.60213632e+02 2.57775617e+02 2.55371156e+02 2.52999641e+02 + 2.50660479e+02 2.48353090e+02 2.46076909e+02 2.43831384e+02 2.41615975e+02 + 2.39430155e+02 2.37273410e+02 2.35145235e+02 2.33045140e+02 2.30972644e+02 + 2.28927278e+02 2.26908581e+02 2.24916107e+02 2.22949415e+02 2.21008077e+02 + 2.19091672e+02 2.17199792e+02 2.15332033e+02 2.13488004e+02 2.11667319e+02 + 2.09869604e+02 2.08094489e+02 2.06341616e+02 2.04610631e+02 2.02901189e+02 + 2.01212953e+02 1.99545592e+02 1.97898782e+02 1.96272206e+02 1.94665554e+02 + 1.93078520e+02 1.91510808e+02 1.89962126e+02 1.88432186e+02 1.86920710e+02 + 1.85427423e+02 1.83952055e+02 1.82494343e+02 1.81054029e+02 1.79630858e+02 + 1.78224583e+02 1.76834961e+02 1.75461751e+02 1.74104720e+02 1.72763638e+02 + 1.71438281e+02 1.70128427e+02 1.68833859e+02 1.67554365e+02 1.66289736e+02 + 1.65039768e+02 1.63804259e+02 1.62583012e+02 1.61375835e+02 1.60182536e+02 + 1.59002930e+02 1.57836834e+02 1.56684068e+02 1.55544455e+02 1.54417822e+02 + 1.53304000e+02 1.52202820e+02 1.51114119e+02 1.50037736e+02 1.48973511e+02 + 1.47921291e+02 1.46880920e+02 1.45852251e+02 1.44835133e+02 1.43829423e+02 + 1.42834978e+02 1.41851657e+02 1.40879323e+02 1.39917840e+02 1.38967075e+02 + 1.38026896e+02 1.37097174e+02 1.36177784e+02 1.35268599e+02 1.34369498e+02 + 1.33480360e+02 1.32601065e+02 1.31731497e+02 1.30871541e+02 1.30021083e+02 + 1.29180012e+02 1.28348219e+02 1.27525595e+02 1.26712033e+02 1.25907430e+02 + 1.25111682e+02 1.24324686e+02 1.23546344e+02 1.22776556e+02 1.22015225e+02 + 1.21262256e+02 1.20517553e+02 1.19781025e+02 1.19052579e+02 1.18332124e+02 + 1.17619573e+02 1.16914836e+02 1.16217827e+02 1.15528460e+02 1.14846652e+02 + 1.14172318e+02 1.13505378e+02 1.12845749e+02 1.12193352e+02 1.11548107e+02 + 1.10909938e+02 1.10278766e+02 1.09654517e+02 1.09037114e+02 1.08426484e+02 + 1.07822554e+02 1.07225250e+02 1.06634503e+02 1.06050240e+02 1.05472393e+02 + 1.04900892e+02 1.04335670e+02 1.03776657e+02 1.03223789e+02 1.02676999e+02 + 1.02136221e+02 1.01601391e+02 1.01072445e+02 1.00549321e+02 1.00031955e+02 + 9.95202850e+01 9.90142506e+01 9.85137906e+01 9.80188451e+01 9.75293545e+01 + 9.70452599e+01 9.65665028e+01 9.60930254e+01 9.56247704e+01 9.51616810e+01 + 9.47037009e+01 9.42507742e+01 9.38028458e+01 9.33598606e+01 9.29217644e+01 + 9.24885033e+01 9.20600236e+01 9.16362725e+01 9.12171972e+01 9.08027455e+01 + 9.03928657e+01 8.99875063e+01 8.95866163e+01 8.91901451e+01 8.87980424e+01 + 8.84102583e+01 8.80267434e+01 8.76474484e+01 8.72723244e+01 8.69013231e+01 + 8.65343963e+01 8.61714961e+01 8.58125750e+01 8.54575859e+01 8.51064819e+01 + 8.47592164e+01 8.44157432e+01 8.40760164e+01 8.37399902e+01 8.34076193e+01 + 8.30788587e+01 8.27536636e+01 8.24319894e+01 8.21137919e+01 8.17990272e+01 + 8.14876516e+01 8.11796217e+01 8.08748944e+01 8.05734267e+01 8.02751761e+01 + 7.99801003e+01 7.96881571e+01 7.93993048e+01 7.91135019e+01 7.88307069e+01 + 7.85508789e+01 7.82739771e+01 7.79999609e+01 7.77287902e+01 7.74604249e+01 + 7.71948253e+01 7.69319518e+01 7.66717652e+01 7.64142266e+01 7.61592973e+01 + 7.59069387e+01 7.56571128e+01 7.54097815e+01 7.51649071e+01 7.49224524e+01 + 7.46823800e+01 7.44446532e+01 7.42092353e+01 7.39760900e+01 7.37451811e+01 + 7.35164730e+01 7.32899300e+01 7.30655169e+01 7.28431986e+01 7.26229406e+01 + 7.24047084e+01 7.21884677e+01 7.19741848e+01 7.17618261e+01 7.15513583e+01 + 7.13427483e+01 7.11359635e+01 7.09309715e+01 7.07277401e+01 7.05262375e+01 + 7.03264321e+01 7.01282928e+01 6.99317885e+01 6.97368888e+01 6.95435632e+01 + 6.93517818e+01 6.91615148e+01 6.89727329e+01 6.87854070e+01 6.85995083e+01 + 6.84150084e+01 6.82318792e+01 6.80500928e+01 6.78696219e+01 6.76904391e+01 + 6.75125177e+01 6.73358312e+01 6.71603534e+01 6.69860584e+01 6.68129207e+01 + 6.66409151e+01 6.64700167e+01 6.63002010e+01 6.61314439e+01 6.59637213e+01 + 6.57970099e+01 6.56312863e+01 6.54665278e+01 6.53027117e+01 6.51398160e+01 + 6.49778186e+01 6.48166982e+01 6.46564335e+01 6.44970036e+01 6.43383881e+01 + 6.41805668e+01 6.40235197e+01 6.38672274e+01 6.37116708e+01 6.35568308e+01 + 6.34026891e+01 6.32492275e+01 6.30964280e+01 6.29442732e+01 6.27927459e+01 + 6.26418291e+01 6.24915063e+01 6.23417613e+01 6.21925783e+01 6.20439415e+01 + 6.18958357e+01 6.17482461e+01 6.16011579e+01 6.14545569e+01 6.13084290e+01 + 6.11627605e+01 6.10175380e+01 6.08727484e+01 6.07283791e+01 6.05844173e+01 + 6.04408511e+01 6.02976684e+01 6.01548577e+01 6.00124076e+01 5.98703072e+01 + 5.97285456e+01 5.95871125e+01 5.94459976e+01 5.93051910e+01 5.91646830e+01 + 5.90244644e+01 5.88845260e+01 5.87448589e+01 5.86054545e+01 5.84663047e+01 + 5.83274012e+01 5.81887362e+01 5.80503022e+01 5.79120918e+01 5.77740979e+01 + 5.76363137e+01 5.74987325e+01 5.73613480e+01 5.72241539e+01 5.70871444e+01 + 5.69503136e+01 5.68136560e+01 5.66771664e+01 5.65408396e+01 5.64046708e+01 + 5.62686552e+01 5.61327884e+01 5.59970660e+01 5.58614839e+01 5.57260382e+01 + 5.55907252e+01 5.54555412e+01 5.53204830e+01 5.51855472e+01 5.50507308e+01 + 5.49160309e+01 5.47814449e+01 5.46469700e+01 5.45126041e+01 5.43783446e+01 + 5.42441897e+01 5.41101372e+01 5.39761853e+01 5.38423325e+01 5.37085770e+01 + 5.35749175e+01 5.34413527e+01 5.33078815e+01 5.31745027e+01 5.30412154e+01 + 5.29080189e+01 5.27749124e+01 5.26418952e+01 5.25089671e+01 5.23761274e+01 + 5.22433760e+01 5.21107127e+01 5.19781374e+01 5.18456500e+01 5.17132507e+01 + 5.15809395e+01 5.14487169e+01 5.13165831e+01 5.11845384e+01 5.10525835e+01 + 5.09207189e+01 5.07889451e+01 5.06572630e+01 5.05256731e+01 5.03941765e+01 + 5.02627739e+01 5.01314663e+01 5.00002547e+01 4.98691402e+01 4.97381238e+01 + 4.96072067e+01 4.94763901e+01 4.93456753e+01 4.92150635e+01 4.90845560e+01 + 4.89541543e+01 4.88238597e+01 4.86936737e+01 4.85635977e+01 4.84336333e+01 + 4.83037819e+01 4.81740452e+01 4.80444247e+01 4.79149220e+01 4.77855388e+01 + 4.76562768e+01 4.75271375e+01 4.73981228e+01 4.72692343e+01 4.71404737e+01 + 4.70118428e+01 4.68833434e+01 4.67549771e+01 4.66267459e+01 4.64986515e+01 + 4.63706956e+01 4.62428801e+01 4.61152068e+01 4.59876775e+01 4.58602941e+01 + 4.57330582e+01 4.56059719e+01 4.54790368e+01 4.53522548e+01 4.52256277e+01 + 4.50991574e+01 4.49728457e+01 4.48466943e+01 4.47207051e+01 4.45948799e+01 + 4.44692205e+01 4.43437286e+01 4.42184061e+01 4.40932546e+01 4.39682761e+01 + 4.38434722e+01 4.37188447e+01 4.35943953e+01 4.34701257e+01 4.33460377e+01 + 4.32221329e+01 4.30984131e+01 4.29748798e+01 4.28515348e+01 4.27283798e+01 + 4.26054162e+01 4.24826459e+01 4.23600702e+01 4.22376909e+01 4.21155096e+01 + 4.19935276e+01 4.18717467e+01 4.17501683e+01 4.16287939e+01 4.15076250e+01 + 4.13866631e+01 4.12659096e+01 4.11453659e+01 4.10250336e+01 4.09049138e+01 + 4.07850081e+01 4.06653178e+01 4.05458443e+01 4.04265888e+01 4.03075526e+01 + 4.01887371e+01 4.00701435e+01 3.99517730e+01 3.98336269e+01 3.97157064e+01 + 3.95980126e+01 3.94805467e+01 3.93633099e+01 3.92463033e+01 3.91295280e+01 + 3.90129851e+01 3.88966757e+01 3.87806007e+01 3.86647613e+01 3.85491584e+01 + 3.84337931e+01 3.83186662e+01 3.82037788e+01 3.80891318e+01 3.79747260e+01 + 3.78605625e+01 3.77466420e+01 3.76329654e+01 3.75195335e+01 3.74063472e+01 + 3.72934073e+01 3.71807145e+01 3.70682695e+01 3.69560733e+01 3.68441263e+01 + 3.67324294e+01 3.66209833e+01 3.65097885e+01 3.63988459e+01 3.62881559e+01 + 3.61777192e+01 3.60675364e+01 3.59576080e+01 3.58479347e+01 3.57385170e+01 + 3.56293554e+01 3.55204504e+01 3.54118025e+01 3.53034122e+01 3.51952799e+01 + 3.50874060e+01 3.49797911e+01 3.48724355e+01 3.47653396e+01 3.46585038e+01 + 3.45519285e+01 3.44456139e+01 3.43395604e+01 3.42337684e+01 3.41282382e+01 + 3.40229699e+01 3.39179640e+01 3.38132206e+01 3.37087400e+01 3.36045224e+01 + 3.35005681e+01 3.33968772e+01 3.32934500e+01 3.31902865e+01 3.30873870e+01 + 3.29847516e+01 3.28823804e+01 3.27802736e+01 3.26784313e+01 3.25768535e+01 + 3.24755403e+01 3.23744918e+01 3.22737081e+01 3.21731893e+01 3.20729352e+01 + 3.19729460e+01 3.18732217e+01 3.17737623e+01 3.16745677e+01 3.15756379e+01 + 3.14769730e+01 3.13785728e+01 3.12804372e+01 3.11825664e+01 3.10849600e+01 + 3.09876181e+01 3.08905406e+01 3.07937274e+01 3.06971783e+01 3.06008932e+01 + 3.05048719e+01 3.04091144e+01 3.03136205e+01 3.02183900e+01 3.01234227e+01 + 3.00287185e+01 2.99342772e+01 2.98400985e+01 2.97461823e+01 2.96525283e+01 + 2.95591363e+01 2.94660061e+01 2.93731375e+01 2.92805302e+01 2.91881839e+01 + 2.90960984e+01 2.90042734e+01 2.89127086e+01 2.88214038e+01 2.87303587e+01 + 2.86395729e+01 2.85490462e+01 2.84587782e+01 2.83687687e+01 2.82790172e+01 + 2.81895236e+01 2.81002873e+01 2.80113082e+01 2.79225858e+01 2.78341198e+01 + 2.77459099e+01 2.76579556e+01 2.75702566e+01 2.74828125e+01 2.73956229e+01 + 2.73086875e+01 2.72220059e+01 2.71355776e+01 2.70494022e+01 2.69634795e+01 + 2.68778088e+01 2.67923899e+01 2.67072223e+01 2.66223055e+01 2.65376392e+01 + 2.64532230e+01 2.63690562e+01 2.62851387e+01 2.62014698e+01 2.61180491e+01 + 2.60348762e+01 2.59519507e+01 2.58692720e+01 2.57868397e+01 2.57046534e+01 + 2.56227125e+01 2.55410166e+01 2.54595652e+01 2.53783578e+01 2.52973940e+01 + 2.52166733e+01 2.51361951e+01 2.50559589e+01 2.49759644e+01 2.48962109e+01 + 2.48166980e+01 2.47374252e+01 2.46583919e+01 2.45795977e+01 2.45010421e+01 + 2.44227245e+01 2.43446444e+01 2.42668013e+01 2.41891946e+01 2.41118240e+01 + 2.40346888e+01 2.39577884e+01 2.38811225e+01 2.38046904e+01 2.37284917e+01 + 2.36525257e+01 2.35767919e+01 2.35012899e+01 2.34260191e+01 2.33509789e+01 + 2.32761688e+01 2.32015882e+01 2.31272367e+01 2.30531136e+01 2.29792185e+01 + 2.29055507e+01 2.28321097e+01 2.27588950e+01 2.26859061e+01 2.26131423e+01 + 2.25406031e+01 2.24682880e+01 2.23961964e+01 2.23243277e+01 2.22526815e+01 + 2.21812571e+01 2.21100539e+01 2.20390715e+01 2.19683093e+01 2.18977666e+01 + 2.18274430e+01 2.17573379e+01 2.16874508e+01 2.16177809e+01 2.15483279e+01 + 2.14790911e+01 2.14100700e+01 2.13412640e+01 2.12726726e+01 2.12042951e+01 + 2.11361311e+01 2.10681799e+01 2.10004410e+01 2.09329138e+01 2.08655978e+01 + 2.07984924e+01 2.07315971e+01 2.06649112e+01 2.05984342e+01 2.05321655e+01 + 2.04661046e+01 2.04002510e+01 2.03346039e+01 2.02691630e+01 2.02039276e+01 + 2.01388971e+01 2.00740711e+01 2.00094488e+01 1.99450298e+01 1.98808136e+01 + 1.98167994e+01 1.97529869e+01 1.96893754e+01 1.96259643e+01 1.95627531e+01 + 1.94997413e+01 1.94369282e+01 1.93743134e+01 1.93118962e+01 1.92496761e+01 + 1.91876525e+01 1.91258250e+01 1.90641928e+01 1.90027555e+01 1.89415126e+01 + 1.88804634e+01 1.88196074e+01 1.87589440e+01 1.86984728e+01 1.86381931e+01 + 1.85781044e+01 1.85182061e+01 1.84584977e+01 1.83989787e+01 1.83396484e+01 + 1.82805064e+01 1.82215521e+01 1.81627849e+01 1.81042044e+01 1.80458099e+01 + 1.79876009e+01 1.79295769e+01 1.78717373e+01 1.78140817e+01 1.77566093e+01 + 1.76993198e+01 1.76422125e+01 1.75852870e+01 1.75285426e+01 1.74719789e+01 + 1.74155954e+01 1.73593914e+01 1.73033665e+01 1.72475200e+01 1.71918516e+01 + 1.71363607e+01 1.70810466e+01 1.70259090e+01 1.69709472e+01 1.69161608e+01 + 1.68615492e+01 1.68071119e+01 1.67528484e+01 1.66987581e+01 1.66448405e+01 + 1.65910952e+01 1.65375215e+01 1.64841190e+01 1.64308872e+01 1.63778255e+01 + 1.63249334e+01 1.62722105e+01 1.62196561e+01 1.61672698e+01 1.61150511e+01 + 1.60629994e+01 1.60111143e+01 1.59593953e+01 1.59078418e+01 1.58564533e+01 + 1.58052293e+01 1.57541694e+01 1.57032730e+01 1.56525397e+01 1.56019688e+01 + 1.55515600e+01 1.55013128e+01 1.54512266e+01 1.54013009e+01 1.53515352e+01 + 1.53019291e+01 1.52524821e+01 1.52031937e+01 1.51540633e+01 1.51050906e+01 + 1.50562750e+01 1.50076159e+01 1.49591131e+01 1.49107659e+01 1.48625738e+01 + 1.48145365e+01 1.47666534e+01 1.47189241e+01 1.46713480e+01 1.46239246e+01 + 1.45766536e+01 1.45295345e+01 1.44825667e+01 1.44357498e+01 1.43890834e+01 + 1.43425669e+01 1.42961999e+01 1.42499819e+01 1.42039125e+01 1.41579912e+01 + 1.41122175e+01 1.40665910e+01 1.40211112e+01 1.39757777e+01 1.39305900e+01 + 1.38855476e+01 1.38406501e+01 1.37958971e+01 1.37512880e+01 1.37068225e+01 + 1.36625000e+01 1.36183202e+01 1.35742825e+01 1.35303866e+01 1.34866320e+01 + 1.34430183e+01 1.33995449e+01 1.33562115e+01 1.33130177e+01 1.32699629e+01 + 1.32270467e+01 1.31842688e+01 1.31416287e+01 1.30991259e+01 1.30567600e+01 + 1.30145306e+01 1.29724372e+01 1.29304794e+01 1.28886568e+01 1.28469690e+01 + 1.28054156e+01 1.27639960e+01 1.27227099e+01 1.26815569e+01 1.26405365e+01 + 1.25996484e+01 1.25588920e+01 1.25182671e+01 1.24777731e+01 1.24374097e+01 + 1.23971764e+01 1.23570729e+01 1.23170986e+01 1.22772533e+01 1.22375365e+01 + 1.21979477e+01 1.21584867e+01 1.21191529e+01 1.20799461e+01 1.20408656e+01 + 1.20019113e+01 1.19630826e+01 1.19243792e+01 1.18858007e+01 1.18473466e+01 + 1.18090166e+01 1.17708103e+01 1.17327273e+01 1.16947672e+01 1.16569296e+01 + 1.16192141e+01 1.15816204e+01 1.15441480e+01 1.15067965e+01 1.14695656e+01 + 1.14324549e+01 1.13954640e+01 1.13585925e+01 1.13218400e+01 1.12852062e+01 + 1.12486906e+01 1.12122930e+01 1.11760129e+01 1.11398499e+01 1.11038037e+01 + 1.10678739e+01 1.10320602e+01 1.09963621e+01 1.09607793e+01 1.09253114e+01 + 1.08899580e+01 1.08547189e+01 1.08195935e+01 1.07845816e+01 1.07496829e+01 + 1.07148968e+01 1.06802231e+01 1.06456614e+01 1.06112114e+01 1.05768727e+01 + 1.05426449e+01 1.05085277e+01 1.04745207e+01 1.04406236e+01 1.04068360e+01 + 1.03731576e+01 1.03395880e+01 1.03061269e+01 1.02727739e+01 1.02395287e+01 + 1.02063909e+01 1.01733603e+01 1.01404363e+01 1.01076188e+01 1.00749073e+01 + 1.00423016e+01 1.00098012e+01 9.97740586e+00 9.94511523e+00 9.91292898e+00 + 9.88084676e+00 9.84886825e+00 9.81699310e+00 9.78522099e+00 9.75355158e+00 + 9.72198455e+00 9.69051957e+00 9.65915630e+00 9.62789442e+00 9.59673361e+00 + 9.56567354e+00 9.53471389e+00 9.50385433e+00 9.47309455e+00 9.44243421e+00 + 9.41187301e+00 9.38141062e+00 9.35104672e+00 9.32078101e+00 9.29061315e+00 + 9.26054285e+00 9.23056977e+00 9.20069362e+00 9.17091408e+00 9.14123084e+00 + 9.11164358e+00 9.08215200e+00 9.05275580e+00 9.02345465e+00 8.99424827e+00 + 8.96513634e+00 8.93611856e+00 8.90719462e+00 8.87836423e+00 8.84962708e+00 + 8.82098287e+00 8.79243131e+00 8.76397209e+00 8.73560491e+00 8.70732949e+00 + 8.67914552e+00 8.65105271e+00 8.62305076e+00 8.59513939e+00 8.56731831e+00 + 8.53958721e+00 8.51194581e+00 8.48439382e+00 8.45693096e+00 8.42955693e+00 + 8.40227145e+00 8.37507424e+00 8.34796500e+00 8.32094347e+00 8.29400934e+00 + 8.26716234e+00 8.24040220e+00 8.21372862e+00 8.18714134e+00 8.16064006e+00 + 8.13422453e+00 8.10789445e+00 8.08164955e+00 8.05548956e+00 8.02941421e+00 + 8.00342321e+00 7.97751631e+00 7.95169322e+00 7.92595368e+00 7.90029741e+00 + 7.87472416e+00 7.84923364e+00 7.82382560e+00 7.79849977e+00 7.77325588e+00 + 7.74809366e+00 7.72301286e+00 7.69801321e+00 7.67309445e+00 7.64825632e+00 + 7.62349856e+00 7.59882090e+00 7.57422310e+00 7.54970489e+00 7.52526601e+00 + 7.50090621e+00 7.47662523e+00 7.45242282e+00 7.42829873e+00 7.40425270e+00 + 7.38028448e+00 7.35639382e+00 7.33258046e+00 7.30884417e+00 7.28518468e+00 + 7.26160176e+00 7.23809515e+00 7.21466461e+00 7.19130989e+00 7.16803075e+00 + 7.14482694e+00 7.12169822e+00 7.09864435e+00 7.07566508e+00 7.05276018e+00 + 7.02992940e+00 7.00717250e+00 6.98448925e+00 6.96187941e+00 6.93934274e+00 + 6.91687900e+00 6.89448796e+00 6.87216939e+00 6.84992304e+00 6.82774869e+00 + 6.80564610e+00 6.78361505e+00 6.76165529e+00 6.73976661e+00 6.71794876e+00 + 6.69620152e+00 6.67452467e+00 6.65291797e+00 6.63138120e+00 6.60991414e+00 + 6.58851655e+00 6.56718821e+00 6.54592890e+00 6.52473840e+00 6.50361648e+00 + 6.48256292e+00 6.46157750e+00 6.44066000e+00 6.41981020e+00 6.39902789e+00 + 6.37831283e+00 6.35766483e+00 6.33708365e+00 6.31656908e+00 6.29612092e+00 + 6.27573893e+00 6.25542292e+00 6.23517266e+00 6.21498794e+00 6.19486855e+00 + 6.17481429e+00 6.15482493e+00 6.13490027e+00 6.11504011e+00 6.09524422e+00 + 6.07551241e+00 6.05584446e+00 6.03624018e+00 6.01669935e+00 5.99722177e+00 + 5.97780723e+00 5.95845553e+00 5.93916647e+00 5.91993984e+00 5.90077545e+00 + 5.88167309e+00 5.86263256e+00 5.84365365e+00 5.82473619e+00 5.80587995e+00 + 5.78708475e+00 5.76835038e+00 5.74967666e+00 5.73106338e+00 5.71251035e+00 + 5.69401737e+00 5.67558425e+00 5.65721080e+00 5.63889682e+00 5.62064212e+00 + 5.60244651e+00 5.58430980e+00 5.56623179e+00 5.54821231e+00 5.53025115e+00 + 5.51234812e+00 5.49450305e+00 5.47671575e+00 5.45898602e+00 5.44131368e+00 + 5.42369855e+00 5.40614043e+00 5.38863915e+00 5.37119452e+00 5.35380636e+00 + 5.33647449e+00 5.31919872e+00 5.30197887e+00 5.28481476e+00 5.26770621e+00 + 5.25065305e+00 5.23365508e+00 5.21671214e+00 5.19982404e+00 5.18299061e+00 + 5.16621167e+00 5.14948704e+00 5.13281656e+00 5.11620003e+00 5.09963730e+00 + 5.08312818e+00 5.06667250e+00 5.05027009e+00 5.03392077e+00 5.01762438e+00 + 5.00138074e+00 4.98518969e+00 4.96905104e+00 4.95296464e+00 4.93693031e+00 + 4.92094789e+00 4.90501720e+00 4.88913808e+00 4.87331037e+00 4.85753389e+00 + 4.84180848e+00 4.82613398e+00 4.81051021e+00 4.79493703e+00 4.77941425e+00 + 4.76394173e+00 4.74851929e+00 4.73314678e+00 4.71782403e+00 4.70255088e+00 + 4.68732717e+00 4.67215275e+00 4.65702744e+00 4.64195110e+00 4.62692357e+00 + 4.61194468e+00 4.59701428e+00 4.58213221e+00 4.56729832e+00 4.55251245e+00 + 4.53777444e+00 4.52308415e+00 4.50844141e+00 4.49384606e+00 4.47929797e+00 + 4.46479697e+00 4.45034292e+00 4.43593566e+00 4.42157503e+00 4.40726089e+00 + 4.39299310e+00 4.37877148e+00 4.36459591e+00 4.35046623e+00 4.33638229e+00 + 4.32234394e+00 4.30835103e+00 4.29440343e+00 4.28050097e+00 4.26664352e+00 + 4.25283093e+00 4.23906306e+00 4.22533975e+00 4.21166087e+00 4.19802627e+00 + 4.18443581e+00 4.17088935e+00 4.15738674e+00 4.14392784e+00 4.13051251e+00 + 4.11714061e+00 4.10381200e+00 4.09052653e+00 4.07728407e+00 4.06408449e+00 + 4.05092763e+00 4.03781337e+00 4.02474156e+00 4.01171206e+00 3.99872475e+00 + 3.98577948e+00 3.97287611e+00 3.96001452e+00 3.94719457e+00 3.93441611e+00 + 3.92167903e+00 3.90898318e+00 3.89632842e+00 3.88371464e+00 3.87114168e+00 + 3.85860944e+00 3.84611776e+00 3.83366652e+00 3.82125558e+00 3.80888483e+00 + 3.79655412e+00 3.78426333e+00 3.77201234e+00 3.75980100e+00 3.74762919e+00 + 3.73549678e+00 3.72340365e+00 3.71134967e+00 3.69933472e+00 3.68735866e+00 + 3.67542137e+00 3.66352272e+00 3.65166259e+00 3.63984086e+00 3.62805740e+00 + 3.61631208e+00 3.60460479e+00 3.59293540e+00 3.58130378e+00 3.56970982e+00 + 3.55815340e+00 3.54663438e+00 3.53515266e+00 3.52370810e+00 3.51230060e+00 + 3.50093002e+00 3.48959626e+00 3.47829918e+00 3.46703868e+00 3.45581463e+00 + 3.44462692e+00 3.43347542e+00 3.42236003e+00 3.41128062e+00 3.40023708e+00 + 3.38922929e+00 3.37825713e+00 3.36732050e+00 3.35641927e+00 3.34555333e+00 + 3.33472257e+00 3.32392687e+00 3.31316612e+00 3.30244021e+00 3.29174901e+00 + 3.28109243e+00 3.27047035e+00 3.25988266e+00 3.24932924e+00 3.23880999e+00 + 3.22832479e+00 3.21787353e+00 3.20745611e+00 3.19707242e+00 3.18672234e+00 + 3.17640576e+00 3.16612258e+00 3.15587270e+00 3.14565599e+00 3.13547237e+00 + 3.12532170e+00 3.11520390e+00 3.10511886e+00 3.09506646e+00 3.08504661e+00 + 3.07505919e+00 3.06510411e+00 3.05518125e+00 3.04529052e+00 3.03543181e+00 + 3.02560501e+00 3.01581003e+00 3.00604676e+00 2.99631509e+00 2.98661493e+00 + 2.97694617e+00 2.96730871e+00 2.95770245e+00 2.94812729e+00 2.93858313e+00 + 2.92906986e+00 2.91958740e+00 2.91013563e+00 2.90071446e+00 2.89132379e+00 + 2.88196352e+00 2.87263355e+00 2.86333379e+00 2.85406413e+00 2.84482448e+00 + 2.83561475e+00 2.82643483e+00 2.81728463e+00 2.80816405e+00 2.79907299e+00 + 2.79001137e+00 2.78097909e+00 2.77197604e+00 2.76300214e+00 2.75405559e+00 + 2.74510554e+00 2.73614077e+00 2.72716164e+00 2.71816846e+00 2.70916157e+00 + 2.70014130e+00 2.69110798e+00 2.68206194e+00 2.67300350e+00 2.66393299e+00 + 2.65485073e+00 2.64575705e+00 2.63665226e+00 2.62753670e+00 2.61841067e+00 + 2.60927450e+00 2.60012851e+00 2.59097300e+00 2.58180831e+00 2.57263473e+00 + 2.56345258e+00 2.55426218e+00 2.54506383e+00 2.53585784e+00 2.52664452e+00 + 2.51742418e+00 2.50819712e+00 2.49896364e+00 2.48972406e+00 2.48047866e+00 + 2.47122774e+00 2.46197162e+00 2.45271058e+00 2.44344492e+00 2.43417494e+00 + 2.42490093e+00 2.41562317e+00 2.40634197e+00 2.39705762e+00 2.38777039e+00 + 2.37848057e+00 2.36918847e+00 2.35989434e+00 2.35059849e+00 2.34130118e+00 + 2.33200271e+00 2.32270335e+00 2.31340337e+00 2.30410306e+00 2.29480269e+00 + 2.28550252e+00 2.27620284e+00 2.26690392e+00 2.25760601e+00 2.24830940e+00 + 2.23901434e+00 2.22972110e+00 2.22042995e+00 2.21114115e+00 2.20185495e+00 + 2.19257162e+00 2.18329142e+00 2.17401459e+00 2.16474141e+00 2.15547211e+00 + 2.14620696e+00 2.13694620e+00 2.12769008e+00 2.11843885e+00 2.10919276e+00 + 2.09995205e+00 2.09071696e+00 2.08148774e+00 2.07226463e+00 2.06304787e+00 + 2.05383769e+00 2.04463433e+00 2.03543803e+00 2.02624901e+00 2.01706752e+00 + 2.00789378e+00 1.99872802e+00 1.98957047e+00 1.98042135e+00 1.97128090e+00 + 1.96214932e+00 1.95302685e+00 1.94391370e+00 1.93481009e+00 1.92571625e+00 + 1.91663238e+00 1.90755870e+00 1.89849542e+00 1.88944276e+00 1.88040092e+00 + 1.87137011e+00 1.86235054e+00 1.85334242e+00 1.84434594e+00 1.83536132e+00 + 1.82638875e+00 1.81742843e+00 1.80848057e+00 1.79954534e+00 1.79062296e+00 + 1.78171362e+00 1.77281750e+00 1.76393481e+00 1.75506572e+00 1.74621042e+00 + 1.73736911e+00 1.72854196e+00 1.71972916e+00 1.71093090e+00 1.70214734e+00 + 1.69337868e+00 1.68462508e+00 1.67588673e+00 1.66716380e+00 1.65845646e+00 + 1.64976489e+00 1.64108925e+00 1.63242971e+00 1.62378644e+00 1.61515960e+00 + 1.60654936e+00 1.59795589e+00 1.58937934e+00 1.58081988e+00 1.57227765e+00 + 1.56375283e+00 1.55524556e+00 1.54675599e+00 1.53828429e+00 1.52983061e+00 + 1.52139508e+00 1.51297787e+00 1.50457911e+00 1.49619895e+00 1.48783755e+00 + 1.47949503e+00 1.47117154e+00 1.46286723e+00 1.45458222e+00 1.44631666e+00 + 1.43807068e+00 1.42984441e+00 1.42163800e+00 1.41345156e+00 1.40528523e+00 + 1.39713914e+00 1.38901341e+00 1.38090818e+00 1.37282356e+00 1.36475967e+00 + 1.35671664e+00 1.34869460e+00 1.34069364e+00 1.33271391e+00 1.32475550e+00 + 1.31681854e+00 1.30890314e+00 1.30100940e+00 1.29313745e+00 1.28528739e+00 + 1.27745932e+00 1.26965336e+00 1.26186960e+00 1.25410815e+00 1.24636912e+00 + 1.23865261e+00 1.23095871e+00 1.22328752e+00 1.21563914e+00 1.20801367e+00 + 1.20041119e+00 1.19283181e+00 1.18527561e+00 1.17774269e+00 1.17023313e+00 + 1.16274702e+00 1.15528445e+00 1.14784550e+00 1.14043025e+00 1.13303880e+00 + 1.12567121e+00 1.11832758e+00 1.11100797e+00 1.10371247e+00 1.09644115e+00 + 1.08919409e+00 1.08197135e+00 1.07477302e+00 1.06759917e+00 1.06044985e+00 + 1.05332515e+00 1.04622513e+00 1.03914985e+00 1.03209938e+00 1.02507379e+00 + 1.01807313e+00 1.01109747e+00 1.00414687e+00 9.97221386e-01 9.90321073e-01 + 9.83445990e-01 9.76596193e-01 9.69771734e-01 9.62972667e-01 9.56199044e-01 + 9.49450914e-01 9.42728328e-01 9.36031332e-01 9.29359975e-01 9.22714301e-01 + 9.16094356e-01 9.09500183e-01 9.02931824e-01 8.96389320e-01 8.89872712e-01 + 8.83382038e-01 8.76917335e-01 8.70478642e-01 8.64065993e-01 8.57679422e-01 + 8.51318963e-01 8.44984649e-01 8.38676510e-01 8.32394576e-01 8.26138877e-01 + 8.19909440e-01 8.13706292e-01 8.07529459e-01 8.01378965e-01 7.95254834e-01 + 7.89157089e-01 7.83085752e-01 7.77040841e-01 7.71022378e-01 7.65030381e-01 + 7.59064866e-01 7.53125850e-01 7.47213349e-01 7.41327376e-01 7.35467946e-01 + 7.29635070e-01 7.23828760e-01 7.18049026e-01 7.12295878e-01 7.06569323e-01 + 7.00869370e-01 6.95196024e-01 6.89549291e-01 6.83929175e-01 6.78335681e-01 + 6.72768810e-01 6.67228564e-01 6.61714945e-01 6.56227951e-01 6.50767581e-01 + 6.45333835e-01 6.39926707e-01 6.34546195e-01 6.29192295e-01 6.23864999e-01 + 6.18564301e-01 6.13290195e-01 6.08042671e-01 6.02821721e-01 5.97627334e-01 + 5.92459499e-01 5.87318204e-01 5.82203438e-01 5.77115185e-01 5.72053432e-01 + 5.67018163e-01 5.62009363e-01 5.57027014e-01 5.52071099e-01 5.47141599e-01 + 5.42238495e-01 5.37361766e-01 5.32511392e-01 5.27687351e-01 5.22889620e-01 + 5.18118177e-01 5.13372996e-01 5.08654052e-01 5.03961322e-01 4.99294776e-01 + 4.94654390e-01 4.90040134e-01 4.85451980e-01 4.80889899e-01 4.76353860e-01 + 4.71843832e-01 4.67359785e-01 4.62901684e-01 4.58469498e-01 4.54063193e-01 + 4.49682734e-01 4.45328086e-01 4.40999213e-01 4.36696079e-01 4.32418646e-01 + 4.28166876e-01 4.23940731e-01 4.19740172e-01 4.15565159e-01 4.11415650e-01 + 4.07291606e-01 4.03192983e-01 3.99119741e-01 3.95071834e-01 3.91049220e-01 + 3.87051855e-01 3.83079693e-01 3.79132688e-01 3.75210796e-01 3.71313967e-01 + 3.67442156e-01 3.63595315e-01 3.59773394e-01 3.55976344e-01 3.52204117e-01 + 3.48456661e-01 3.44733925e-01 3.41035859e-01 3.37362410e-01 3.33713525e-01 + 3.30089152e-01 3.26489237e-01 3.22913726e-01 3.19362564e-01 3.15835697e-01 + 3.12333067e-01 3.08854620e-01 3.05400297e-01 3.01970043e-01 2.98563800e-01 + 2.95181508e-01 2.91823110e-01 2.88488547e-01 2.85177758e-01 2.81890683e-01 + 2.78627263e-01 2.75387435e-01 2.72171139e-01 2.68978312e-01 2.65808892e-01 + 2.62662816e-01 2.59540022e-01 2.56440444e-01 2.53364020e-01 2.50310684e-01 + 2.47280372e-01 2.44273018e-01 2.41288556e-01 2.38326921e-01 2.35388045e-01 + 2.32471862e-01 2.29578304e-01 2.26707304e-01 2.23858794e-01 2.21032705e-01 + 2.18228967e-01 2.15447513e-01 2.12688273e-01 2.09951176e-01 2.07236152e-01 + 2.04543131e-01 2.01872042e-01 1.99222813e-01 1.96595373e-01 1.93989650e-01 + 1.91405572e-01 1.88843066e-01 1.86302060e-01 1.83782479e-01 1.81284252e-01 + 1.78807303e-01 1.76351559e-01 1.73916946e-01 1.71503389e-01 1.69110813e-01 + 1.66739143e-01 1.64388303e-01 1.62058219e-01 1.59748813e-01 1.57460009e-01 + 1.55191732e-01 1.52943905e-01 1.50716450e-01 1.48509290e-01 1.46322348e-01 + 1.44155547e-01 1.42008808e-01 1.39882053e-01 1.37775205e-01 1.35688184e-01 + 1.33620912e-01 1.31573309e-01 1.29545298e-01 1.27536798e-01 1.25547730e-01 + 1.23578015e-01 1.21627572e-01 1.19696321e-01 1.17784183e-01 1.15891077e-01 + 1.14016921e-01 1.12161637e-01 1.10325142e-01 1.08507356e-01 1.06708197e-01 + 1.04927585e-01 1.03165437e-01 1.01421673e-01 9.96962103e-02 9.79889672e-02 + 9.62998618e-02 9.46288120e-02 9.29757356e-02 9.13405503e-02 8.97231736e-02 + 8.81235231e-02 8.65415161e-02 8.49770698e-02 8.34301014e-02 8.19005281e-02 + 8.03882668e-02 7.88932345e-02 7.74153479e-02 7.59545239e-02 7.45106790e-02 + 7.30837300e-02 7.16735935e-02 7.02801858e-02 6.89034235e-02 6.75432228e-02 + 6.61995003e-02 6.48721721e-02 6.35611545e-02 6.22663637e-02 6.09877158e-02 + 5.97251271e-02 5.84785135e-02 5.72477913e-02 5.60328764e-02 5.48336849e-02 + 5.36501328e-02 5.24821361e-02 5.13296109e-02 5.01924730e-02 4.90706386e-02 + 4.79640236e-02 4.68725440e-02 4.57961157e-02 4.47346549e-02 4.36880775e-02 + 4.26562996e-02 4.16392373e-02 4.06368065e-02 3.96489235e-02 3.86755044e-02 + 3.77164653e-02 3.67717225e-02 3.58411921e-02 3.49247905e-02 3.40224340e-02 + 3.31340390e-02 3.22595219e-02 3.13987991e-02 3.05517872e-02 2.97184028e-02 + 2.88985626e-02 2.80921832e-02 2.72991814e-02 2.65194740e-02 2.57529781e-02 + 2.49996105e-02 2.42592885e-02 2.35319290e-02 2.28174494e-02 2.21157669e-02 + 2.14267990e-02 2.07504632e-02 2.00866771e-02 1.94353583e-02 1.87964247e-02 + 1.81697941e-02 1.75553845e-02 1.69531141e-02 1.63629010e-02 1.57846636e-02 + 1.52183202e-02 1.46637895e-02 1.41209901e-02 1.35898408e-02 1.30702605e-02 + 1.25621682e-02 1.20654832e-02 1.15801246e-02 1.11060119e-02 1.06430648e-02 + 1.01912028e-02 9.75034577e-03 9.32041377e-03 8.90132688e-03 8.49300538e-03 + 8.09536966e-03 7.70834030e-03 7.33183802e-03 6.96578368e-03 6.61009831e-03 + 6.26470310e-03 5.92951939e-03 5.60446868e-03 5.28947266e-03 4.98445316e-03 + 4.68933218e-03 4.40403190e-03 4.12847467e-03 3.86258301e-03 3.60627963e-03 + 3.35948739e-03 3.12212936e-03 2.89412876e-03 2.67540903e-03 2.46589377e-03 + 2.26550676e-03 2.07417199e-03 1.89181364e-03 1.71835606e-03 1.55372381e-03 + 1.39784164e-03 1.25063451e-03 1.11202756e-03 9.81946133e-04 8.60315789e-04 + 7.47062278e-04 6.42111559e-04 5.45389798e-04 4.56823367e-04 3.76338850e-04 + 3.03863043e-04 2.39322951e-04 1.82645796e-04 1.33759016e-04 9.25902631e-05 + 5.90674105e-05 3.31185502e-05 1.46719954e-05 3.65628182e-06 0.00000000e+00 + 4.06412796e+00 4.06783653e+00 4.07704324e+00 4.08626532e+00 4.09550275e+00 + 4.10475551e+00 4.11402360e+00 4.12330700e+00 4.13260568e+00 4.14191965e+00 + 4.15124888e+00 4.16059336e+00 4.16995307e+00 4.17932799e+00 4.18871811e+00 + 4.19812340e+00 4.20754387e+00 4.21697947e+00 4.22643020e+00 4.23589604e+00 + 4.24537696e+00 4.25487296e+00 4.26438400e+00 4.27391007e+00 4.28345115e+00 + 4.29300721e+00 4.30257824e+00 4.31216421e+00 4.32176511e+00 4.33138090e+00 + 4.34101157e+00 4.35065709e+00 4.36031744e+00 4.36999260e+00 4.37968253e+00 + 4.38938722e+00 4.39910664e+00 4.40884076e+00 4.41858956e+00 4.42835301e+00 + 4.43813109e+00 4.44792376e+00 4.45773100e+00 4.46755278e+00 4.47738908e+00 + 4.48723985e+00 4.49710508e+00 4.50698473e+00 4.51687878e+00 4.52678718e+00 + 4.53670992e+00 4.54664696e+00 4.55659826e+00 4.56656380e+00 4.57654353e+00 + 4.58653744e+00 4.59654548e+00 4.60656761e+00 4.61660382e+00 4.62665405e+00 + 4.63671827e+00 4.64679645e+00 4.65688855e+00 4.66699453e+00 4.67711435e+00 + 4.68724799e+00 4.69739539e+00 4.70755652e+00 4.71773133e+00 4.72791980e+00 + 4.73812188e+00 4.74833752e+00 4.75856669e+00 4.76880934e+00 4.77906544e+00 + 4.78933493e+00 4.79961778e+00 4.80991393e+00 4.82022336e+00 4.83054600e+00 + 4.84088182e+00 4.85123077e+00 4.86159280e+00 4.87196787e+00 4.88235592e+00 + 4.89275691e+00 4.90317080e+00 4.91359752e+00 4.92403704e+00 4.93448930e+00 + 4.94495425e+00 4.95543184e+00 4.96592201e+00 4.97642472e+00 4.98693991e+00 + 4.99746754e+00 5.00800753e+00 5.01855985e+00 5.02912442e+00 5.03970121e+00 + 5.05029015e+00 5.06089119e+00 5.07150426e+00 5.08212932e+00 5.09276629e+00 + 5.10341513e+00 5.11407577e+00 5.12474815e+00 5.13543222e+00 5.14612790e+00 + 5.15683515e+00 5.16755389e+00 5.17828406e+00 5.18902560e+00 5.19977844e+00 + 5.21054252e+00 5.22131778e+00 5.23210415e+00 5.24290155e+00 5.25370993e+00 + 5.26452922e+00 5.27535934e+00 5.28620023e+00 5.29705182e+00 5.30791404e+00 + 5.31878681e+00 5.32967007e+00 5.34056375e+00 5.35146776e+00 5.36238204e+00 + 5.37330652e+00 5.38424111e+00 5.39518574e+00 5.40614035e+00 5.41710484e+00 + 5.42807915e+00 5.43906319e+00 5.45005689e+00 5.46106017e+00 5.47207294e+00 + 5.48309514e+00 5.49412667e+00 5.50516746e+00 5.51621742e+00 5.52727647e+00 + 5.53834452e+00 5.54942150e+00 5.56050732e+00 5.57160189e+00 5.58270512e+00 + 5.59381693e+00 5.60493724e+00 5.61606594e+00 5.62720297e+00 5.63834821e+00 + 5.64950159e+00 5.66066301e+00 5.67183239e+00 5.68300962e+00 5.69419463e+00 + 5.70538730e+00 5.71658756e+00 5.72779530e+00 5.73901042e+00 5.75023284e+00 + 5.76146246e+00 5.77269917e+00 5.78394289e+00 5.79519350e+00 5.80645092e+00 + 5.81771503e+00 5.82898575e+00 5.84026296e+00 5.85154657e+00 5.86283647e+00 + 5.87413256e+00 5.88543473e+00 5.89674289e+00 5.90805691e+00 5.91937670e+00 + 5.93070215e+00 5.94203316e+00 5.95336960e+00 5.96471138e+00 5.97605838e+00 + 5.98741049e+00 5.99876760e+00 6.01012960e+00 6.02149638e+00 6.03286782e+00 + 6.04424380e+00 6.05562422e+00 6.06700896e+00 6.07839789e+00 6.08979091e+00 + 6.10118790e+00 6.11258873e+00 6.12399329e+00 6.13540145e+00 6.14681311e+00 + 6.15822813e+00 6.16964639e+00 6.18106777e+00 6.19249215e+00 6.20391941e+00 + 6.21534941e+00 6.22678203e+00 6.23821715e+00 6.24965464e+00 6.26109436e+00 + 6.27253621e+00 6.28398003e+00 6.29542571e+00 6.30687311e+00 6.31832210e+00 + 6.32977255e+00 6.34122433e+00 6.35267730e+00 6.36413133e+00 6.37558628e+00 + 6.38704202e+00 6.39849842e+00 6.40995532e+00 6.42141261e+00 6.43287013e+00 + 6.44432776e+00 6.45578534e+00 6.46724275e+00 6.47869983e+00 6.49015644e+00 + 6.50161246e+00 6.51306772e+00 6.52452208e+00 6.53597541e+00 6.54742756e+00 + 6.55887837e+00 6.57032771e+00 6.58177542e+00 6.59322136e+00 6.60466538e+00 + 6.61610733e+00 6.62754705e+00 6.63898441e+00 6.65041923e+00 6.66185139e+00 + 6.67328071e+00 6.68470705e+00 6.69613025e+00 6.70755016e+00 6.71896662e+00 + 6.73037948e+00 6.74178857e+00 6.75319375e+00 6.76459484e+00 6.77599170e+00 + 6.78738417e+00 6.79877207e+00 6.81015526e+00 6.82153357e+00 6.83290684e+00 + 6.84427490e+00 6.85563759e+00 6.86699475e+00 6.87834621e+00 6.88969181e+00 + 6.90103138e+00 6.91236475e+00 6.92369176e+00 6.93501224e+00 6.94632601e+00 + 6.95763292e+00 6.96893279e+00 6.98022544e+00 6.99151072e+00 7.00278844e+00 + 7.01405843e+00 7.02532053e+00 7.03657455e+00 7.04782033e+00 7.05905769e+00 + 7.07028644e+00 7.08150643e+00 7.09271747e+00 7.10391938e+00 7.11511199e+00 + 7.12629511e+00 7.13746858e+00 7.14863220e+00 7.15978581e+00 7.17092921e+00 + 7.18206223e+00 7.19318469e+00 7.20429640e+00 7.21539719e+00 7.22648686e+00 + 7.23756524e+00 7.24863215e+00 7.25968738e+00 7.27073077e+00 7.28176213e+00 + 7.29278126e+00 7.30378798e+00 7.31478212e+00 7.32576346e+00 7.33673184e+00 + 7.34768706e+00 7.35862893e+00 7.36955726e+00 7.38047187e+00 7.39137255e+00 + 7.40225913e+00 7.41313140e+00 7.42398918e+00 7.43483228e+00 7.44566050e+00 + 7.45647365e+00 7.46727153e+00 7.47805396e+00 7.48882073e+00 7.49957166e+00 + 7.51030654e+00 7.52102519e+00 7.53172740e+00 7.54241298e+00 7.55308173e+00 + 7.56373346e+00 7.57436797e+00 7.58498506e+00 7.59558453e+00 7.60616619e+00 + 7.61672984e+00 7.62727527e+00 7.63780229e+00 7.64831069e+00 7.65880029e+00 + 7.66927087e+00 7.67972224e+00 7.69015420e+00 7.70056655e+00 7.71095908e+00 + 7.72133159e+00 7.73168388e+00 7.74201575e+00 7.75232700e+00 7.76261742e+00 + 7.77288682e+00 7.78313498e+00 7.79336172e+00 7.80356681e+00 7.81375006e+00 + 7.82391127e+00 7.83405023e+00 7.84416673e+00 7.85426058e+00 7.86433157e+00 + 7.87437949e+00 7.88440415e+00 7.89440533e+00 7.90438283e+00 7.91433644e+00 + 7.92426597e+00 7.93417120e+00 7.94405193e+00 7.95390796e+00 7.96373908e+00 + 7.97354509e+00 7.98332577e+00 7.99308093e+00 8.00281035e+00 8.01251384e+00 + 8.02219119e+00 8.03184219e+00 8.04146664e+00 8.05106433e+00 8.06063505e+00 + 8.07017861e+00 8.07969479e+00 8.08918339e+00 8.09864421e+00 8.10807704e+00 + 8.11748167e+00 8.12685791e+00 8.13620553e+00 8.14552435e+00 8.15481416e+00 + 8.16407475e+00 8.17330592e+00 8.18250746e+00 8.19167916e+00 8.20082084e+00 + 8.20993228e+00 8.21901327e+00 8.22806362e+00 8.23708313e+00 8.24607158e+00 + 8.25502879e+00 8.26395453e+00 8.27284862e+00 8.28171085e+00 8.29054102e+00 + 8.29933893e+00 8.30810438e+00 8.31683717e+00 8.32553709e+00 8.33420394e+00 + 8.34283754e+00 8.35143767e+00 8.36000414e+00 8.36853676e+00 8.37703531e+00 + 8.38549961e+00 8.39392946e+00 8.40232465e+00 8.41068500e+00 8.41901031e+00 + 8.42730037e+00 8.43555501e+00 8.44377401e+00 8.45195719e+00 8.46010436e+00 + 8.46821531e+00 8.47628987e+00 8.48432782e+00 8.49232899e+00 8.50029318e+00 + 8.50822020e+00 8.51610986e+00 8.52396198e+00 8.53177635e+00 8.53955280e+00 + 8.54729113e+00 8.55499116e+00 8.56265270e+00 8.57027557e+00 8.57785958e+00 + 8.58540454e+00 8.59291028e+00 8.60037660e+00 8.60780333e+00 8.61519028e+00 + 8.62253727e+00 8.62984412e+00 8.63711066e+00 8.64433670e+00 8.65152206e+00 + 8.65866656e+00 8.66577004e+00 8.67283231e+00 8.67985319e+00 8.68683252e+00 + 8.69377012e+00 8.70066582e+00 8.70751944e+00 8.71433081e+00 8.72109977e+00 + 8.72782614e+00 8.73450975e+00 8.74115044e+00 8.74774804e+00 8.75430239e+00 + 8.76081331e+00 8.76728065e+00 8.77370424e+00 8.78008391e+00 8.78641952e+00 + 8.79271089e+00 8.79895787e+00 8.80516030e+00 8.81131803e+00 8.81743088e+00 + 8.82349872e+00 8.82952138e+00 8.83549872e+00 8.84143057e+00 8.84731680e+00 + 8.85315724e+00 8.85895175e+00 8.86470018e+00 8.87040239e+00 8.87605822e+00 + 8.88166754e+00 8.88723019e+00 8.89274604e+00 8.89821495e+00 8.90363677e+00 + 8.90901137e+00 8.91433860e+00 8.91961834e+00 8.92485044e+00 8.93003477e+00 + 8.93517119e+00 8.94025959e+00 8.94529981e+00 8.95029174e+00 8.95523525e+00 + 8.96013020e+00 8.96497648e+00 8.96977395e+00 8.97452250e+00 8.97922200e+00 + 8.98387233e+00 8.98847338e+00 8.99302501e+00 8.99752712e+00 9.00197960e+00 + 9.00638231e+00 9.01073516e+00 9.01503803e+00 9.01929081e+00 9.02349339e+00 + 9.02764567e+00 9.03174753e+00 9.03579887e+00 9.03979959e+00 9.04374958e+00 + 9.04764875e+00 9.05149699e+00 9.05529422e+00 9.05904032e+00 9.06273520e+00 + 9.06637878e+00 9.06997095e+00 9.07351163e+00 9.07700073e+00 9.08043816e+00 + 9.08382383e+00 9.08715765e+00 9.09043955e+00 9.09366944e+00 9.09684724e+00 + 9.09997287e+00 9.10304626e+00 9.10606732e+00 9.10903597e+00 9.11195216e+00 + 9.11481580e+00 9.11762683e+00 9.12038517e+00 9.12309076e+00 9.12574353e+00 + 9.12834342e+00 9.13089036e+00 9.13338430e+00 9.13582517e+00 9.13821291e+00 + 9.14054747e+00 9.14282880e+00 9.14505683e+00 9.14723152e+00 9.14935282e+00 + 9.15142067e+00 9.15343503e+00 9.15539586e+00 9.15730311e+00 9.15915673e+00 + 9.16095669e+00 9.16270294e+00 9.16439545e+00 9.16603418e+00 9.16761910e+00 + 9.16915017e+00 9.17062736e+00 9.17205064e+00 9.17341998e+00 9.17473536e+00 + 9.17599674e+00 9.17720412e+00 9.17835745e+00 9.17945673e+00 9.18050193e+00 + 9.18149304e+00 9.18243003e+00 9.18331291e+00 9.18414165e+00 9.18491623e+00 + 9.18563667e+00 9.18630293e+00 9.18691503e+00 9.18747295e+00 9.18797669e+00 + 9.18842625e+00 9.18882163e+00 9.18916283e+00 9.18944985e+00 9.18968271e+00 + 9.18986140e+00 9.18998593e+00 9.19005632e+00 9.19007257e+00 9.19003470e+00 + 9.18994273e+00 9.18979666e+00 9.18959652e+00 9.18934232e+00 9.18903409e+00 + 9.18867185e+00 9.18825562e+00 9.18778542e+00 9.18726130e+00 9.18668327e+00 + 9.18605136e+00 9.18536561e+00 9.18462604e+00 9.18383270e+00 9.18298563e+00 + 9.18208485e+00 9.18113041e+00 9.18012235e+00 9.17906071e+00 9.17794554e+00 + 9.17677688e+00 9.17555479e+00 9.17427930e+00 9.17295047e+00 9.17156835e+00 + 9.17013299e+00 9.16864446e+00 9.16710280e+00 9.16550808e+00 9.16386035e+00 + 9.16215967e+00 9.16040612e+00 9.15859974e+00 9.15674061e+00 9.15482879e+00 + 9.15286435e+00 9.15084737e+00 9.14877791e+00 9.14665604e+00 9.14448185e+00 + 9.14225540e+00 9.13997677e+00 9.13764605e+00 9.13526330e+00 9.13282862e+00 + 9.13034209e+00 9.12780378e+00 9.12521379e+00 9.12257220e+00 9.11987911e+00 + 9.11713459e+00 9.11433875e+00 9.11149167e+00 9.10859345e+00 9.10564418e+00 + 9.10264397e+00 9.09959290e+00 9.09649108e+00 9.09333860e+00 9.09013558e+00 + 9.08688211e+00 9.08357830e+00 9.08022426e+00 9.07682008e+00 9.07336589e+00 + 9.06986178e+00 9.06630788e+00 9.06270429e+00 9.05905112e+00 9.05534850e+00 + 9.05159653e+00 9.04779534e+00 9.04394504e+00 9.04004575e+00 9.03609759e+00 + 9.03210069e+00 9.02805517e+00 9.02396116e+00 9.01981877e+00 9.01562814e+00 + 9.01138939e+00 9.00710265e+00 9.00276806e+00 8.99838574e+00 8.99395583e+00 + 8.98947846e+00 8.98495376e+00 8.98038187e+00 8.97576293e+00 8.97109708e+00 + 8.96638445e+00 8.96162519e+00 8.95681943e+00 8.95196732e+00 8.94706900e+00 + 8.94212462e+00 8.93713431e+00 8.93209824e+00 8.92701653e+00 8.92188935e+00 + 8.91671684e+00 8.91149915e+00 8.90623643e+00 8.90092884e+00 8.89557652e+00 + 8.89017964e+00 8.88473834e+00 8.87925278e+00 8.87372312e+00 8.86814952e+00 + 8.86253212e+00 8.85687110e+00 8.85116662e+00 8.84541882e+00 8.83962789e+00 + 8.83379397e+00 8.82791723e+00 8.82199783e+00 8.81603595e+00 8.81003174e+00 + 8.80398538e+00 8.79789702e+00 8.79176684e+00 8.78559501e+00 8.77938169e+00 + 8.77312706e+00 8.76683129e+00 8.76049454e+00 8.75411700e+00 8.74769883e+00 + 8.74124020e+00 8.73474130e+00 8.72820229e+00 8.72162336e+00 8.71500467e+00 + 8.70834641e+00 8.70164876e+00 8.69491188e+00 8.68813596e+00 8.68132118e+00 + 8.67446772e+00 8.66757576e+00 8.66064548e+00 8.65367706e+00 8.64667068e+00 + 8.63962653e+00 8.63254478e+00 8.62542563e+00 8.61826925e+00 8.61107584e+00 + 8.60384557e+00 8.59657863e+00 8.58927521e+00 8.58193549e+00 8.57455966e+00 + 8.56714790e+00 8.55970041e+00 8.55221737e+00 8.54469898e+00 8.53714541e+00 + 8.52955686e+00 8.52193351e+00 8.51427557e+00 8.50658321e+00 8.49885663e+00 + 8.49109602e+00 8.48330156e+00 8.47547346e+00 8.46761190e+00 8.45971708e+00 + 8.45178918e+00 8.44382840e+00 8.43583493e+00 8.42780897e+00 8.41975070e+00 + 8.41166033e+00 8.40353804e+00 8.39538403e+00 8.38719849e+00 8.37898162e+00 + 8.37073361e+00 8.36245465e+00 8.35414495e+00 8.34580469e+00 8.33743407e+00 + 8.32903329e+00 8.32060254e+00 8.31214201e+00 8.30365190e+00 8.29513241e+00 + 8.28658374e+00 8.27800607e+00 8.26939960e+00 8.26076454e+00 8.25210107e+00 + 8.24340939e+00 8.23468970e+00 8.22594219e+00 8.21716706e+00 8.20836451e+00 + 8.19953473e+00 8.19067791e+00 8.18179426e+00 8.17288396e+00 8.16394722e+00 + 8.15498424e+00 8.14599519e+00 8.13698029e+00 8.12793973e+00 8.11887370e+00 + 8.10978240e+00 8.10066603e+00 8.09152477e+00 8.08235883e+00 8.07316840e+00 + 8.06395367e+00 8.05471485e+00 8.04545211e+00 8.03616567e+00 8.02685571e+00 + 8.01752243e+00 8.00816601e+00 7.99878667e+00 7.98938458e+00 7.97995994e+00 + 7.97051296e+00 7.96104381e+00 7.95155269e+00 7.94203979e+00 7.93250532e+00 + 7.92294945e+00 7.91337238e+00 7.90377431e+00 7.89415542e+00 7.88451590e+00 + 7.87485596e+00 7.86517577e+00 7.85547552e+00 7.84575542e+00 7.83601564e+00 + 7.82625638e+00 7.81647783e+00 7.80668017e+00 7.79686359e+00 7.78702829e+00 + 7.77717445e+00 7.76730225e+00 7.75741189e+00 7.74750355e+00 7.73757742e+00 + 7.72763369e+00 7.71767253e+00 7.70769414e+00 7.69769870e+00 7.68768640e+00 + 7.67765742e+00 7.66761194e+00 7.65755015e+00 7.64747223e+00 7.63737837e+00 + 7.62726874e+00 7.61714352e+00 7.60700291e+00 7.59684708e+00 7.58667621e+00 + 7.57649048e+00 7.56629007e+00 7.55607516e+00 7.54584593e+00 7.53560256e+00 + 7.52534522e+00 7.51507410e+00 7.50478936e+00 7.49449120e+00 7.48417977e+00 + 7.47385527e+00 7.46351786e+00 7.45316771e+00 7.44280501e+00 7.43242993e+00 + 7.42204263e+00 7.41164329e+00 7.40123209e+00 7.39080920e+00 7.38037478e+00 + 7.36992901e+00 7.35947205e+00 7.34900408e+00 7.33852527e+00 7.32803578e+00 + 7.31753578e+00 7.30702545e+00 7.29650493e+00 7.28597442e+00 7.27543405e+00 + 7.26488402e+00 7.25432447e+00 7.24375557e+00 7.23317749e+00 7.22259039e+00 + 7.21199442e+00 7.20138976e+00 7.19077657e+00 7.18015500e+00 7.16952521e+00 + 7.15888737e+00 7.14824163e+00 7.13758815e+00 7.12692709e+00 7.11625861e+00 + 7.10558286e+00 7.09490000e+00 7.08421018e+00 7.07351356e+00 7.06281029e+00 + 7.05210053e+00 7.04138443e+00 7.03066215e+00 7.01993382e+00 7.00919961e+00 + 6.99845967e+00 6.98771414e+00 6.97696317e+00 6.96620692e+00 6.95544553e+00 + 6.94467914e+00 6.93390791e+00 6.92313198e+00 6.91235150e+00 6.90156661e+00 + 6.89077746e+00 6.87998418e+00 6.86918693e+00 6.85838585e+00 6.84758107e+00 + 6.83677273e+00 6.82596099e+00 6.81514597e+00 6.80432782e+00 6.79350668e+00 + 6.78268268e+00 6.77185596e+00 6.76102665e+00 6.75019490e+00 6.73936084e+00 + 6.72852461e+00 6.71768633e+00 6.70684614e+00 6.69600417e+00 6.68516056e+00 + 6.67431544e+00 6.66346894e+00 6.65262118e+00 6.64177230e+00 6.63092243e+00 + 6.62007169e+00 6.60922022e+00 6.59836813e+00 6.58751556e+00 6.57666263e+00 + 6.56580946e+00 6.55495619e+00 6.54410293e+00 6.53324981e+00 6.52239695e+00 + 6.51154446e+00 6.50069248e+00 6.48984112e+00 6.47899051e+00 6.46814075e+00 + 6.45729198e+00 6.44644430e+00 6.43559784e+00 6.42475271e+00 6.41390903e+00 + 6.40306690e+00 6.39222646e+00 6.38138781e+00 6.37055106e+00 6.35971632e+00 + 6.34888372e+00 6.33805335e+00 6.32722534e+00 6.31639979e+00 6.30557680e+00 + 6.29475650e+00 6.28393898e+00 6.27312436e+00 6.26231274e+00 6.25150422e+00 + 6.24069892e+00 6.22989694e+00 6.21909838e+00 6.20830334e+00 6.19751193e+00 + 6.18672426e+00 6.17594041e+00 6.16516051e+00 6.15438463e+00 6.14361289e+00 + 6.13284538e+00 6.12208221e+00 6.11132347e+00 6.10056925e+00 6.08981965e+00 + 6.07907478e+00 6.06833472e+00 6.05759958e+00 6.04686943e+00 6.03614439e+00 + 6.02542453e+00 6.01470996e+00 6.00400077e+00 5.99329704e+00 5.98259887e+00 + 5.97190634e+00 5.96121955e+00 5.95053859e+00 5.93986353e+00 5.92919448e+00 + 5.91853152e+00 5.90787472e+00 5.89722419e+00 5.88658000e+00 5.87594224e+00 + 5.86531099e+00 5.85468634e+00 5.84406836e+00 5.83345715e+00 5.82285277e+00 + 5.81225532e+00 5.80166487e+00 5.79108151e+00 5.78050530e+00 5.76993634e+00 + 5.75937469e+00 5.74882044e+00 5.73827366e+00 5.72773443e+00 5.71720283e+00 + 5.70667892e+00 5.69616279e+00 5.68565450e+00 5.67515414e+00 5.66466177e+00 + 5.65417746e+00 5.64370130e+00 5.63323334e+00 5.62277366e+00 5.61232233e+00 + 5.60187942e+00 5.59144500e+00 5.58101913e+00 5.57060189e+00 5.56019334e+00 + 5.54979355e+00 5.53940258e+00 5.52902050e+00 5.51864737e+00 5.50828327e+00 + 5.49792824e+00 5.48758237e+00 5.47724570e+00 5.46691830e+00 5.45660024e+00 + 5.44629158e+00 5.43599237e+00 5.42570267e+00 5.41542255e+00 5.40515207e+00 + 5.39489128e+00 5.38464024e+00 5.37439902e+00 5.36416766e+00 5.35394622e+00 + 5.34373477e+00 5.33353335e+00 5.32334202e+00 5.31316083e+00 5.30298985e+00 + 5.29282912e+00 5.28267869e+00 5.27253863e+00 5.26240898e+00 5.25228979e+00 + 5.24218111e+00 5.23208300e+00 5.22199550e+00 5.21191867e+00 5.20185256e+00 + 5.19179721e+00 5.18175267e+00 5.17171899e+00 5.16169621e+00 5.15168439e+00 + 5.14168357e+00 5.13169380e+00 5.12171512e+00 5.11174758e+00 5.10179121e+00 + 5.09184608e+00 5.08191221e+00 5.07198966e+00 5.06207846e+00 5.05217866e+00 + 5.04229030e+00 5.03241343e+00 5.02254807e+00 5.01269428e+00 5.00285209e+00 + 4.99302155e+00 4.98320269e+00 4.97339555e+00 4.96360017e+00 4.95381659e+00 + 4.94404484e+00 4.93428497e+00 4.92453700e+00 4.91480098e+00 4.90507695e+00 + 4.89536493e+00 4.88566496e+00 4.87597708e+00 4.86630132e+00 4.85663772e+00 + 4.84698631e+00 4.83734712e+00 4.82772018e+00 4.81810553e+00 4.80850320e+00 + 4.79891322e+00 4.78933562e+00 4.77977044e+00 4.77021769e+00 4.76067742e+00 + 4.75114965e+00 4.74163441e+00 4.73213174e+00 4.72264165e+00 4.71316418e+00 + 4.70369935e+00 4.69424719e+00 4.68480774e+00 4.67538100e+00 4.66596702e+00 + 4.65656582e+00 4.64717742e+00 4.63780185e+00 4.62843913e+00 4.61908929e+00 + 4.60975235e+00 4.60042833e+00 4.59111726e+00 4.58181917e+00 4.57253407e+00 + 4.56326198e+00 4.55400294e+00 4.54475695e+00 4.53552405e+00 4.52630425e+00 + 4.51709757e+00 4.50790404e+00 4.49872367e+00 4.48955648e+00 4.48040250e+00 + 4.47126174e+00 4.46213422e+00 4.45301995e+00 4.44391897e+00 4.43483128e+00 + 4.42575690e+00 4.41669585e+00 4.40764815e+00 4.39861381e+00 4.38959285e+00 + 4.38058529e+00 4.37159113e+00 4.36261041e+00 4.35364312e+00 4.34468929e+00 + 4.33574893e+00 4.32682205e+00 4.31790867e+00 4.30900881e+00 4.30012247e+00 + 4.29124966e+00 4.28239041e+00 4.27354472e+00 4.26471261e+00 4.25589408e+00 + 4.24708916e+00 4.23829784e+00 4.22952014e+00 4.22075608e+00 4.21200566e+00 + 4.20326889e+00 4.19454579e+00 4.18583635e+00 4.17714060e+00 4.16845854e+00 + 4.15979019e+00 4.15113553e+00 4.14249460e+00 4.13386739e+00 4.12525392e+00 + 4.11665419e+00 4.10806820e+00 4.09949597e+00 4.09093751e+00 4.08239281e+00 + 4.07386189e+00 4.06534475e+00 4.05684139e+00 4.04835184e+00 4.03987608e+00 + 4.03141412e+00 4.02296598e+00 4.01453165e+00 4.00611113e+00 3.99770444e+00 + 3.98931158e+00 3.98093255e+00 3.97256735e+00 3.96421600e+00 3.95587848e+00 + 3.94755481e+00 3.93924499e+00 3.93094901e+00 3.92266689e+00 3.91439862e+00 + 3.90614421e+00 3.89790366e+00 3.88967697e+00 3.88146413e+00 3.87326516e+00 + 3.86508006e+00 3.85690881e+00 3.84875144e+00 3.84060792e+00 3.83247827e+00 + 3.82436249e+00 3.81626057e+00 3.80817252e+00 3.80009833e+00 3.79203800e+00 + 3.78399153e+00 3.77595892e+00 3.76794018e+00 3.75993529e+00 3.75194425e+00 + 3.74396707e+00 3.73600375e+00 3.72805427e+00 3.72011864e+00 3.71219685e+00 + 3.70428890e+00 3.69639480e+00 3.68851453e+00 3.68064809e+00 3.67279548e+00 + 3.66495669e+00 3.65713173e+00 3.64932058e+00 3.64152325e+00 3.63373972e+00 + 3.62597000e+00 3.61821408e+00 3.61047196e+00 3.60274362e+00 3.59502907e+00 + 3.58732830e+00 3.57964131e+00 3.57196808e+00 3.56430861e+00 3.55666291e+00 + 3.54903095e+00 3.54141274e+00 3.53380827e+00 3.52621753e+00 3.51864051e+00 + 3.51107722e+00 3.50352763e+00 3.49599176e+00 3.48846958e+00 3.48096109e+00 + 3.47346628e+00 3.46598515e+00 3.45851769e+00 3.45106389e+00 3.44362374e+00 + 3.43619724e+00 3.42878437e+00 3.42138513e+00 3.41399951e+00 3.40662750e+00 + 3.39926909e+00 3.39192428e+00 3.38459305e+00 3.37727539e+00 3.36997131e+00 + 3.36268077e+00 3.35540379e+00 3.34814034e+00 3.34089043e+00 3.33365403e+00 + 3.32643114e+00 3.31922175e+00 3.31202584e+00 3.30484342e+00 3.29767446e+00 + 3.29051896e+00 3.28337691e+00 3.27624829e+00 3.26913310e+00 3.26203132e+00 + 3.25494295e+00 3.24786797e+00 3.24080638e+00 3.23375815e+00 3.22672328e+00 + 3.21970176e+00 3.21269357e+00 3.20569871e+00 3.19871717e+00 3.19174892e+00 + 3.18479396e+00 3.17785228e+00 3.17092386e+00 3.16400870e+00 3.15710677e+00 + 3.15021808e+00 3.14334260e+00 3.13648032e+00 3.12963123e+00 3.12279532e+00 + 3.11597257e+00 3.10916298e+00 3.10236652e+00 3.09558319e+00 3.08881297e+00 + 3.08205585e+00 3.07531182e+00 3.06858086e+00 3.06186296e+00 3.05515810e+00 + 3.04846628e+00 3.04178747e+00 3.03512167e+00 3.02846886e+00 3.02182902e+00 + 3.01520215e+00 3.00858823e+00 3.00198724e+00 2.99539917e+00 2.98882400e+00 + 2.98226173e+00 2.97571234e+00 2.96917581e+00 2.96265212e+00 2.95614127e+00 + 2.94964324e+00 2.94315802e+00 2.93668558e+00 2.93022592e+00 2.92377902e+00 + 2.91734486e+00 2.91092343e+00 2.90451471e+00 2.89811870e+00 2.89173537e+00 + 2.88536471e+00 2.87900670e+00 2.87266133e+00 2.86632858e+00 2.86000844e+00 + 2.85370090e+00 2.84740593e+00 2.84112351e+00 2.83485365e+00 2.82859631e+00 + 2.82235149e+00 2.81611916e+00 2.80989931e+00 2.80369193e+00 2.79749700e+00 + 2.79131451e+00 2.78514443e+00 2.77898675e+00 2.77284146e+00 2.76670853e+00 + 2.76058796e+00 2.75447972e+00 2.74838381e+00 2.74230020e+00 2.73622887e+00 + 2.73016982e+00 2.72412302e+00 2.71808845e+00 2.71206611e+00 2.70605597e+00 + 2.70005802e+00 2.69407224e+00 2.68809862e+00 2.68213713e+00 2.67618776e+00 + 2.67025050e+00 2.66432532e+00 2.65841221e+00 2.65251116e+00 2.64662214e+00 + 2.64074514e+00 2.63488014e+00 2.62902713e+00 2.62318608e+00 2.61735698e+00 + 2.61153982e+00 2.60573457e+00 2.59994122e+00 2.59415976e+00 2.58839016e+00 + 2.58263240e+00 2.57688647e+00 2.57115236e+00 2.56543004e+00 2.55971950e+00 + 2.55402071e+00 2.54833367e+00 2.54265836e+00 2.53699475e+00 2.53134283e+00 + 2.52570258e+00 2.52007399e+00 2.51445704e+00 2.50885170e+00 2.50325797e+00 + 2.49767582e+00 2.49210523e+00 2.48654620e+00 2.48099869e+00 2.47546270e+00 + 2.46993821e+00 2.46442519e+00 2.45892363e+00 2.45343351e+00 2.44795481e+00 + 2.44248753e+00 2.43703163e+00 2.43158710e+00 2.42615392e+00 2.42073208e+00 + 2.41532155e+00 2.40992232e+00 2.40453438e+00 2.39915769e+00 2.39379225e+00 + 2.38843804e+00 2.38309504e+00 2.37776322e+00 2.37244258e+00 2.36713309e+00 + 2.36183474e+00 2.35654751e+00 2.35127138e+00 2.34600633e+00 2.34075234e+00 + 2.33550940e+00 2.33027749e+00 2.32505659e+00 2.31984668e+00 2.31464774e+00 + 2.30945976e+00 2.30428272e+00 2.29911659e+00 2.29396137e+00 2.28881702e+00 + 2.28368355e+00 2.27856091e+00 2.27344911e+00 2.26834812e+00 2.26325792e+00 + 2.25817849e+00 2.25310982e+00 2.24805188e+00 2.24300466e+00 2.23796815e+00 + 2.23294231e+00 2.22792715e+00 2.22292262e+00 2.21792873e+00 2.21294544e+00 + 2.20797275e+00 2.20301063e+00 2.19805906e+00 2.19311803e+00 2.18818752e+00 + 2.18326751e+00 2.17835798e+00 2.17345892e+00 2.16857030e+00 2.16369211e+00 + 2.15882433e+00 2.15396694e+00 2.14911992e+00 2.14428325e+00 2.13945693e+00 + 2.13464092e+00 2.12983521e+00 2.12503978e+00 2.12025462e+00 2.11547970e+00 + 2.11071501e+00 2.10596053e+00 2.10121624e+00 2.09648213e+00 2.09175816e+00 + 2.08704434e+00 2.08234063e+00 2.07764702e+00 2.07296350e+00 2.06829004e+00 + 2.06362662e+00 2.05897323e+00 2.05432985e+00 2.04969647e+00 2.04507305e+00 + 2.04045960e+00 2.03585608e+00 2.03126247e+00 2.02667877e+00 2.02210496e+00 + 2.01754101e+00 2.01298690e+00 2.00844262e+00 2.00390816e+00 1.99938349e+00 + 1.99486859e+00 1.99036345e+00 1.98586805e+00 1.98138237e+00 1.97690639e+00 + 1.97244010e+00 1.96798348e+00 1.96353650e+00 1.95909916e+00 1.95467143e+00 + 1.95025330e+00 1.94584474e+00 1.94144574e+00 1.93705629e+00 1.93267636e+00 + 1.92830594e+00 1.92394500e+00 1.91959354e+00 1.91525153e+00 1.91091895e+00 + 1.90659579e+00 1.90228203e+00 1.89797766e+00 1.89368264e+00 1.88939698e+00 + 1.88512064e+00 1.88085361e+00 1.87659588e+00 1.87234743e+00 1.86810823e+00 + 1.86387827e+00 1.85965754e+00 1.85544601e+00 1.85124367e+00 1.84705050e+00 + 1.84286648e+00 1.83869160e+00 1.83452583e+00 1.83036917e+00 1.82622159e+00 + 1.82208307e+00 1.81795360e+00 1.81383316e+00 1.80972174e+00 1.80561931e+00 + 1.80152586e+00 1.79744137e+00 1.79336582e+00 1.78929920e+00 1.78524149e+00 + 1.78119267e+00 1.77715272e+00 1.77312163e+00 1.76909939e+00 1.76508596e+00 + 1.76108134e+00 1.75708551e+00 1.75309844e+00 1.74912014e+00 1.74515057e+00 + 1.74118972e+00 1.73723757e+00 1.73329410e+00 1.72935931e+00 1.72543317e+00 + 1.72151566e+00 1.71760676e+00 1.71370647e+00 1.70981477e+00 1.70593162e+00 + 1.70205703e+00 1.69819097e+00 1.69433343e+00 1.69048438e+00 1.68664382e+00 + 1.68281172e+00 1.67898807e+00 1.67517286e+00 1.67136605e+00 1.66756765e+00 + 1.66377762e+00 1.65999597e+00 1.65622265e+00 1.65245767e+00 1.64870101e+00 + 1.64495264e+00 1.64121256e+00 1.63748074e+00 1.63375716e+00 1.63004182e+00 + 1.62633470e+00 1.62263577e+00 1.61894502e+00 1.61526245e+00 1.61158802e+00 + 1.60792172e+00 1.60426354e+00 1.60061346e+00 1.59697146e+00 1.59333753e+00 + 1.58971165e+00 1.58609381e+00 1.58248399e+00 1.57888216e+00 1.57528833e+00 + 1.57170246e+00 1.56812455e+00 1.56455458e+00 1.56099252e+00 1.55743837e+00 + 1.55389211e+00 1.55035373e+00 1.54682320e+00 1.54330051e+00 1.53978565e+00 + 1.53627860e+00 1.53277934e+00 1.52928786e+00 1.52580413e+00 1.52232816e+00 + 1.51885991e+00 1.51539938e+00 1.51194655e+00 1.50850139e+00 1.50506391e+00 + 1.50163407e+00 1.49821187e+00 1.49479729e+00 1.49139031e+00 1.48799092e+00 + 1.48459910e+00 1.48121484e+00 1.47783812e+00 1.47446893e+00 1.47110724e+00 + 1.46775305e+00 1.46440634e+00 1.46106709e+00 1.45773529e+00 1.45441092e+00 + 1.45109397e+00 1.44778442e+00 1.44448226e+00 1.44118747e+00 1.43790003e+00 + 1.43461994e+00 1.43134717e+00 1.42808171e+00 1.42482354e+00 1.42157265e+00 + 1.41832903e+00 1.41509266e+00 1.41186352e+00 1.40864160e+00 1.40542689e+00 + 1.40221936e+00 1.39901901e+00 1.39582581e+00 1.39263976e+00 1.38946084e+00 + 1.38628904e+00 1.38312433e+00 1.37996670e+00 1.37681615e+00 1.37367265e+00 + 1.37053619e+00 1.36740676e+00 1.36428433e+00 1.36116890e+00 1.35806045e+00 + 1.35495897e+00 1.35186444e+00 1.34877684e+00 1.34569617e+00 1.34262240e+00 + 1.33955553e+00 1.33649554e+00 1.33344241e+00 1.33039613e+00 1.32735668e+00 + 1.32432406e+00 1.32129824e+00 1.31827921e+00 1.31526696e+00 1.31226147e+00 + 1.30926273e+00 1.30627073e+00 1.30328544e+00 1.30030687e+00 1.29733498e+00 + 1.29436977e+00 1.29141122e+00 1.28845932e+00 1.28551406e+00 1.28257542e+00 + 1.27964338e+00 1.27671794e+00 1.27379907e+00 1.27088677e+00 1.26798102e+00 + 1.26508181e+00 1.26218912e+00 1.25930293e+00 1.25642325e+00 1.25355004e+00 + 1.25068330e+00 1.24782302e+00 1.24496917e+00 1.24212175e+00 1.23928074e+00 + 1.23644613e+00 1.23361790e+00 1.23079605e+00 1.22798055e+00 1.22517139e+00 + 1.22236857e+00 1.21957206e+00 1.21678186e+00 1.21399794e+00 1.21122030e+00 + 1.20844892e+00 1.20568379e+00 1.20292490e+00 1.20017223e+00 1.19742577e+00 + 1.19468550e+00 1.19195141e+00 1.18922350e+00 1.18650174e+00 1.18378612e+00 + 1.18107663e+00 1.17837325e+00 1.17567598e+00 1.17298479e+00 1.17029969e+00 + 1.16762064e+00 1.16492387e+00 1.16213751e+00 1.15925731e+00 1.15628397e+00 + 1.15321822e+00 1.15006080e+00 1.14681247e+00 1.14347399e+00 1.14004614e+00 + 1.13652972e+00 1.13292553e+00 1.12923439e+00 1.12545713e+00 1.12159460e+00 + 1.11764764e+00 1.11361712e+00 1.10950393e+00 1.10530894e+00 1.10103307e+00 + 1.09667722e+00 1.09224230e+00 1.08772926e+00 1.08313904e+00 1.07847259e+00 + 1.07373086e+00 1.06891483e+00 1.06402548e+00 1.05906380e+00 1.05403079e+00 + 1.04892746e+00 1.04375481e+00 1.03851388e+00 1.03320569e+00 1.02783129e+00 + 1.02239172e+00 1.01688803e+00 1.01132129e+00 1.00569257e+00 1.00000294e+00 + 9.94253473e-01 9.88445268e-01 9.82579415e-01 9.76657013e-01 9.70679167e-01 + 9.64646985e-01 9.58561585e-01 9.52424084e-01 9.46235609e-01 9.39997288e-01 + 9.33710253e-01 9.27375643e-01 9.20994598e-01 9.14568262e-01 9.08097783e-01 + 9.01584312e-01 8.95029002e-01 8.88433010e-01 8.81797494e-01 8.75123616e-01 + 8.68412537e-01 8.61665423e-01 8.54883440e-01 8.48067755e-01 8.41219538e-01 + 8.34339956e-01 8.27430181e-01 8.20491384e-01 8.13524734e-01 8.06531404e-01 + 7.99512564e-01 7.92469384e-01 7.85403035e-01 7.78314685e-01 7.71205503e-01 + 7.64076656e-01 7.56929308e-01 7.49764624e-01 7.42583767e-01 7.35387895e-01 + 7.28178168e-01 7.20955740e-01 7.13721765e-01 7.06477392e-01 6.99223769e-01 + 6.91962040e-01 6.84693345e-01 6.77418822e-01 6.70139603e-01 6.62856818e-01 + 6.55571593e-01 6.48285047e-01 6.40998299e-01 6.33712459e-01 6.26428635e-01 + 6.19147929e-01 6.11871437e-01 6.04600250e-01 5.97335456e-01 5.90078134e-01 + 5.82829357e-01 5.75590196e-01 5.68361711e-01 5.61144959e-01 5.53940989e-01 + 5.46750843e-01 5.39575557e-01 5.32416160e-01 5.25273674e-01 5.18149112e-01 + 5.11043482e-01 5.03957784e-01 4.96893007e-01 4.89850137e-01 4.82830149e-01 + 4.75834011e-01 4.68862681e-01 4.61917111e-01 4.54998243e-01 4.48107011e-01 + 4.41244339e-01 4.34411143e-01 4.27608330e-01 4.20836798e-01 4.14097435e-01 + 4.07391119e-01 4.00718721e-01 3.94081100e-01 3.87479106e-01 3.80913579e-01 + 3.74385350e-01 3.67895238e-01 3.61444053e-01 3.55032596e-01 3.48661655e-01 + 3.42332009e-01 3.36044427e-01 3.29799666e-01 3.23598473e-01 3.17441585e-01 + 3.11329726e-01 3.05263611e-01 2.99243943e-01 2.93271414e-01 2.87346706e-01 + 2.81470487e-01 2.75643416e-01 2.69866139e-01 2.64139293e-01 2.58463501e-01 + 2.52839376e-01 2.47267517e-01 2.41748515e-01 2.36282946e-01 2.30871375e-01 + 2.25514356e-01 2.20212432e-01 2.14966130e-01 2.09775970e-01 2.04642457e-01 + 1.99566084e-01 1.94547333e-01 1.89586674e-01 1.84684564e-01 1.79841448e-01 + 1.75057759e-01 1.70333918e-01 1.65670332e-01 1.61067399e-01 1.56525503e-01 + 1.52045014e-01 1.47626293e-01 1.43269686e-01 1.38975529e-01 1.34744143e-01 + 1.30575839e-01 1.26470915e-01 1.22429656e-01 1.18452335e-01 1.14539213e-01 + 1.10690539e-01 1.06906550e-01 1.03187468e-01 9.95335069e-02 9.59448653e-02 + 9.24217306e-02 8.89642782e-02 8.55726710e-02 8.22470599e-02 7.89875836e-02 + 7.57943689e-02 7.26675303e-02 6.96071705e-02 6.66133801e-02 6.36862378e-02 + 6.08258104e-02 5.80321528e-02 5.53053081e-02 5.26453077e-02 5.00521712e-02 + 4.75259065e-02 4.50665099e-02 4.26739664e-02 4.03482489e-02 3.80893195e-02 + 3.58971284e-02 3.37716148e-02 3.17127063e-02 2.97203197e-02 2.77943602e-02 + 2.59347223e-02 2.41412894e-02 2.24139337e-02 2.07525169e-02 1.91568897e-02 + 1.76268922e-02 1.61623537e-02 1.47630931e-02 1.34289187e-02 1.21596286e-02 + 1.09550102e-02 9.81484109e-03 8.73888848e-03 7.72690959e-03 6.77865166e-03 + 5.89385204e-03 5.07223831e-03 4.31352836e-03 3.61743045e-03 2.98364337e-03 + 2.41185648e-03 1.90174984e-03 1.45299430e-03 1.06525159e-03 7.38174448e-04 + 4.71406686e-04 2.64583325e-04 1.17330685e-04 2.92664954e-05 0.00000000e+00 + 1.14636847e+01 1.14637147e+01 1.15240318e+01 1.15846601e+01 1.16456011e+01 + 1.17068565e+01 1.17684277e+01 1.18303164e+01 1.18925239e+01 1.19550520e+01 + 1.20179021e+01 1.20810759e+01 1.21445749e+01 1.22084007e+01 1.22725549e+01 + 1.23370391e+01 1.24018548e+01 1.24670037e+01 1.25324875e+01 1.25983076e+01 + 1.26644659e+01 1.27309638e+01 1.27978031e+01 1.28649853e+01 1.29325122e+01 + 1.30003854e+01 1.30686065e+01 1.31371773e+01 1.32060994e+01 1.32753745e+01 + 1.33450043e+01 1.34149905e+01 1.34853349e+01 1.35560390e+01 1.36271047e+01 + 1.36985337e+01 1.37703277e+01 1.38424884e+01 1.39150176e+01 1.39879171e+01 + 1.40611886e+01 1.41348338e+01 1.42088546e+01 1.42832528e+01 1.43580300e+01 + 1.44331882e+01 1.45087290e+01 1.45846544e+01 1.46609661e+01 1.47376660e+01 + 1.48147558e+01 1.48922374e+01 1.49701127e+01 1.50483835e+01 1.51270516e+01 + 1.52061190e+01 1.52855874e+01 1.53654587e+01 1.54457349e+01 1.55264178e+01 + 1.56075093e+01 1.56890113e+01 1.57709257e+01 1.58532545e+01 1.59359994e+01 + 1.60191626e+01 1.61027458e+01 1.61867511e+01 1.62711803e+01 1.63560355e+01 + 1.64413185e+01 1.65270315e+01 1.66131762e+01 1.66997547e+01 1.67867690e+01 + 1.68742211e+01 1.69621130e+01 1.70504466e+01 1.71392240e+01 1.72284472e+01 + 1.73181182e+01 1.74082391e+01 1.74988118e+01 1.75898384e+01 1.76813210e+01 + 1.77732616e+01 1.78656623e+01 1.79585251e+01 1.80518522e+01 1.81456455e+01 + 1.82399071e+01 1.83346392e+01 1.84298439e+01 1.85255232e+01 1.86216793e+01 + 1.87183142e+01 1.88154301e+01 1.89130291e+01 1.90111134e+01 1.91096850e+01 + 1.92087462e+01 1.93082990e+01 1.94083456e+01 1.95088881e+01 1.96099288e+01 + 1.97114699e+01 1.98135133e+01 1.99160615e+01 2.00191164e+01 2.01226804e+01 + 2.02267556e+01 2.03313443e+01 2.04364485e+01 2.05420707e+01 2.06482128e+01 + 2.07548773e+01 2.08620662e+01 2.09697819e+01 2.10780265e+01 2.11868023e+01 + 2.12961116e+01 2.14059566e+01 2.15163395e+01 2.16272627e+01 2.17387283e+01 + 2.18507387e+01 2.19632961e+01 2.20764027e+01 2.21900610e+01 2.23042731e+01 + 2.24190413e+01 2.25343679e+01 2.26502553e+01 2.27667057e+01 2.28837215e+01 + 2.30013049e+01 2.31194582e+01 2.32381838e+01 2.33574839e+01 2.34773610e+01 + 2.35978172e+01 2.37188550e+01 2.38404767e+01 2.39626846e+01 2.40854811e+01 + 2.42088684e+01 2.43328489e+01 2.44574250e+01 2.45825991e+01 2.47083733e+01 + 2.48347502e+01 2.49617321e+01 2.50893212e+01 2.52175201e+01 2.53463309e+01 + 2.54757562e+01 2.56057981e+01 2.57364592e+01 2.58677418e+01 2.59996482e+01 + 2.61321808e+01 2.62653420e+01 2.63991341e+01 2.65335596e+01 2.66686207e+01 + 2.68043198e+01 2.69406594e+01 2.70776417e+01 2.72152692e+01 2.73535442e+01 + 2.74924691e+01 2.76320462e+01 2.77722780e+01 2.79131668e+01 2.80547149e+01 + 2.81969248e+01 2.83397987e+01 2.84833391e+01 2.86275483e+01 2.87724286e+01 + 2.89179825e+01 2.90642123e+01 2.92111203e+01 2.93587088e+01 2.95069803e+01 + 2.96559371e+01 2.98055815e+01 2.99559159e+01 3.01069425e+01 3.02586638e+01 + 3.04110820e+01 3.05641996e+01 3.07180187e+01 3.08725417e+01 3.10277709e+01 + 3.11837087e+01 3.13403573e+01 3.14977190e+01 3.16557962e+01 3.18145911e+01 + 3.19741059e+01 3.21343430e+01 3.22953047e+01 3.24569931e+01 3.26194106e+01 + 3.27825594e+01 3.29464417e+01 3.31110597e+01 3.32764158e+01 3.34425121e+01 + 3.36093508e+01 3.37769341e+01 3.39452642e+01 3.41143433e+01 3.42841736e+01 + 3.44547572e+01 3.46260964e+01 3.47981931e+01 3.49710496e+01 3.51446681e+01 + 3.53190505e+01 3.54941990e+01 3.56701158e+01 3.58468028e+01 3.60242622e+01 + 3.62024960e+01 3.63815062e+01 3.65612949e+01 3.67418641e+01 3.69232158e+01 + 3.71053520e+01 3.72882746e+01 3.74719857e+01 3.76564872e+01 3.78417809e+01 + 3.80278689e+01 3.82147530e+01 3.84024351e+01 3.85909171e+01 3.87802007e+01 + 3.89702880e+01 3.91611806e+01 3.93528804e+01 3.95453892e+01 3.97387086e+01 + 3.99328406e+01 4.01277867e+01 4.03235487e+01 4.05201283e+01 4.07175271e+01 + 4.09157468e+01 4.11147890e+01 4.13146553e+01 4.15153472e+01 4.17168665e+01 + 4.19192145e+01 4.21223928e+01 4.23264028e+01 4.25312461e+01 4.27369241e+01 + 4.29434382e+01 4.31507898e+01 4.33589802e+01 4.35680108e+01 4.37778828e+01 + 4.39885977e+01 4.42001566e+01 4.44125608e+01 4.46258114e+01 4.48399097e+01 + 4.50548568e+01 4.52706538e+01 4.54873017e+01 4.57048017e+01 4.59231548e+01 + 4.61423619e+01 4.63624241e+01 4.65833421e+01 4.68051170e+01 4.70277497e+01 + 4.72512408e+01 4.74755912e+01 4.77008018e+01 4.79268731e+01 4.81538059e+01 + 4.83816009e+01 4.86102586e+01 4.88397796e+01 4.90701646e+01 4.93014139e+01 + 4.95335280e+01 4.97665074e+01 5.00003524e+01 5.02350634e+01 5.04706407e+01 + 5.07070845e+01 5.09443951e+01 5.11825727e+01 5.14216173e+01 5.16615291e+01 + 5.19023081e+01 5.21439543e+01 5.23864676e+01 5.26298480e+01 5.28740954e+01 + 5.31192095e+01 5.33651902e+01 5.36120371e+01 5.38597499e+01 5.41083282e+01 + 5.43577717e+01 5.46080798e+01 5.48592520e+01 5.51112877e+01 5.53641863e+01 + 5.56179471e+01 5.58725694e+01 5.61280524e+01 5.63843952e+01 5.66415969e+01 + 5.68996567e+01 5.71585734e+01 5.74183459e+01 5.76789733e+01 5.79404543e+01 + 5.82027876e+01 5.84659719e+01 5.87300059e+01 5.89948882e+01 5.92606173e+01 + 5.95271916e+01 5.97946095e+01 6.00628694e+01 6.03319696e+01 6.06019081e+01 + 6.08726832e+01 6.11442930e+01 6.14167355e+01 6.16900085e+01 6.19641100e+01 + 6.22390378e+01 6.25147896e+01 6.27913631e+01 6.30687559e+01 6.33469656e+01 + 6.36259895e+01 6.39058251e+01 6.41864697e+01 6.44679206e+01 6.47501749e+01 + 6.50332297e+01 6.53170821e+01 6.56017290e+01 6.58871673e+01 6.61733938e+01 + 6.64604052e+01 6.67481982e+01 6.70367693e+01 6.73261150e+01 6.76162318e+01 + 6.79071160e+01 6.81987638e+01 6.84911715e+01 6.87843350e+01 6.90782505e+01 + 6.93729139e+01 6.96683210e+01 6.99644676e+01 7.02613493e+01 7.05589619e+01 + 7.08573007e+01 7.11563612e+01 7.14561389e+01 7.17566288e+01 7.20578263e+01 + 7.23597263e+01 7.26623240e+01 7.29656142e+01 7.32695917e+01 7.35742513e+01 + 7.38795876e+01 7.41855952e+01 7.44922686e+01 7.47996021e+01 7.51075900e+01 + 7.54162265e+01 7.57255057e+01 7.60354217e+01 7.63459683e+01 7.66571394e+01 + 7.69689287e+01 7.72813299e+01 7.75943364e+01 7.79079418e+01 7.82221395e+01 + 7.85369226e+01 7.88522843e+01 7.91682178e+01 7.94847160e+01 7.98017717e+01 + 8.01193779e+01 8.04375271e+01 8.07562119e+01 8.10754249e+01 8.13951584e+01 + 8.17154048e+01 8.20361563e+01 8.23574049e+01 8.26791427e+01 8.30013615e+01 + 8.33240533e+01 8.36472097e+01 8.39708223e+01 8.42948827e+01 8.46193822e+01 + 8.49443123e+01 8.52696640e+01 8.55954286e+01 8.59215971e+01 8.62481604e+01 + 8.65751093e+01 8.69024346e+01 8.72301269e+01 8.75581767e+01 8.78865745e+01 + 8.82153106e+01 8.85443752e+01 8.88737586e+01 8.92034507e+01 8.95334414e+01 + 8.98637208e+01 9.01942784e+01 9.05251039e+01 9.08561870e+01 9.11875170e+01 + 9.15190834e+01 9.18508754e+01 9.21828822e+01 9.25150929e+01 9.28474964e+01 + 9.31800817e+01 9.35128376e+01 9.38457526e+01 9.41788156e+01 9.45120150e+01 + 9.48453391e+01 9.51787764e+01 9.55123152e+01 9.58459434e+01 9.61796493e+01 + 9.65134208e+01 9.68472458e+01 9.71811120e+01 9.75150072e+01 9.78489190e+01 + 9.81828350e+01 9.85167426e+01 9.88506292e+01 9.91844820e+01 9.95182882e+01 + 9.98520351e+01 1.00185710e+02 1.00519299e+02 1.00852789e+02 1.01186168e+02 + 1.01519421e+02 1.01852537e+02 1.02185500e+02 1.02518298e+02 1.02850918e+02 + 1.03183344e+02 1.03515565e+02 1.03847565e+02 1.04179331e+02 1.04510850e+02 + 1.04842106e+02 1.05173087e+02 1.05503777e+02 1.05834164e+02 1.06164231e+02 + 1.06493966e+02 1.06823354e+02 1.07152380e+02 1.07481029e+02 1.07809288e+02 + 1.08137142e+02 1.08464575e+02 1.08791574e+02 1.09118124e+02 1.09444209e+02 + 1.09769815e+02 1.10094926e+02 1.10419529e+02 1.10743608e+02 1.11067148e+02 + 1.11390133e+02 1.11712550e+02 1.12034382e+02 1.12355614e+02 1.12676232e+02 + 1.12996219e+02 1.13315562e+02 1.13634243e+02 1.13952249e+02 1.14269563e+02 + 1.14586171e+02 1.14902056e+02 1.15217204e+02 1.15531599e+02 1.15845226e+02 + 1.16158068e+02 1.16470111e+02 1.16781340e+02 1.17091737e+02 1.17401289e+02 + 1.17709980e+02 1.18017793e+02 1.18324714e+02 1.18630727e+02 1.18935817e+02 + 1.19239967e+02 1.19543163e+02 1.19845389e+02 1.20146630e+02 1.20446869e+02 + 1.20746092e+02 1.21044283e+02 1.21341427e+02 1.21637508e+02 1.21932512e+02 + 1.22226421e+02 1.22519222e+02 1.22810899e+02 1.23101437e+02 1.23390820e+02 + 1.23679033e+02 1.23966062e+02 1.24251891e+02 1.24536504e+02 1.24819888e+02 + 1.25102026e+02 1.25382904e+02 1.25662508e+02 1.25940822e+02 1.26217831e+02 + 1.26493521e+02 1.26767877e+02 1.27040885e+02 1.27312529e+02 1.27582796e+02 + 1.27851672e+02 1.28119141e+02 1.28385189e+02 1.28649803e+02 1.28912968e+02 + 1.29174670e+02 1.29434895e+02 1.29693630e+02 1.29950860e+02 1.30206572e+02 + 1.30460752e+02 1.30713387e+02 1.30964463e+02 1.31213966e+02 1.31461885e+02 + 1.31708205e+02 1.31952913e+02 1.32195997e+02 1.32437443e+02 1.32677239e+02 + 1.32915372e+02 1.33151830e+02 1.33386601e+02 1.33619671e+02 1.33851029e+02 + 1.34080662e+02 1.34308560e+02 1.34534709e+02 1.34759099e+02 1.34981717e+02 + 1.35202552e+02 1.35421593e+02 1.35638829e+02 1.35854248e+02 1.36067840e+02 + 1.36279593e+02 1.36489498e+02 1.36697543e+02 1.36903718e+02 1.37108013e+02 + 1.37310417e+02 1.37510922e+02 1.37709516e+02 1.37906191e+02 1.38100936e+02 + 1.38293742e+02 1.38484600e+02 1.38673502e+02 1.38860437e+02 1.39045397e+02 + 1.39228374e+02 1.39409359e+02 1.39588343e+02 1.39765319e+02 1.39940278e+02 + 1.40113213e+02 1.40284116e+02 1.40452979e+02 1.40619796e+02 1.40784558e+02 + 1.40947259e+02 1.41107891e+02 1.41266449e+02 1.41422926e+02 1.41577314e+02 + 1.41729609e+02 1.41879804e+02 1.42027892e+02 1.42173869e+02 1.42317729e+02 + 1.42459467e+02 1.42599077e+02 1.42736554e+02 1.42871893e+02 1.43005090e+02 + 1.43136140e+02 1.43265040e+02 1.43391784e+02 1.43516369e+02 1.43638790e+02 + 1.43759046e+02 1.43877131e+02 1.43993042e+02 1.44106777e+02 1.44218333e+02 + 1.44327706e+02 1.44434895e+02 1.44539897e+02 1.44642709e+02 1.44743329e+02 + 1.44841757e+02 1.44937989e+02 1.45032025e+02 1.45123862e+02 1.45213501e+02 + 1.45300939e+02 1.45386177e+02 1.45469212e+02 1.45550046e+02 1.45628677e+02 + 1.45705106e+02 1.45779332e+02 1.45851355e+02 1.45921177e+02 1.45988797e+02 + 1.46054216e+02 1.46117435e+02 1.46178455e+02 1.46237278e+02 1.46293904e+02 + 1.46348336e+02 1.46400574e+02 1.46450622e+02 1.46498480e+02 1.46544151e+02 + 1.46587637e+02 1.46628941e+02 1.46668066e+02 1.46705014e+02 1.46739788e+02 + 1.46772392e+02 1.46802828e+02 1.46831101e+02 1.46857213e+02 1.46881169e+02 + 1.46902973e+02 1.46922628e+02 1.46940138e+02 1.46955509e+02 1.46968744e+02 + 1.46979849e+02 1.46988827e+02 1.46995684e+02 1.47000426e+02 1.47003056e+02 + 1.47003581e+02 1.47002006e+02 1.46998336e+02 1.46992578e+02 1.46984737e+02 + 1.46974819e+02 1.46962831e+02 1.46948778e+02 1.46932668e+02 1.46914506e+02 + 1.46894299e+02 1.46872054e+02 1.46847778e+02 1.46821478e+02 1.46793161e+02 + 1.46762834e+02 1.46730505e+02 1.46696181e+02 1.46659869e+02 1.46621578e+02 + 1.46581315e+02 1.46539088e+02 1.46494906e+02 1.46448775e+02 1.46400705e+02 + 1.46350703e+02 1.46298779e+02 1.46244940e+02 1.46189196e+02 1.46131554e+02 + 1.46072025e+02 1.46010616e+02 1.45947336e+02 1.45882196e+02 1.45815203e+02 + 1.45746367e+02 1.45675697e+02 1.45603203e+02 1.45528895e+02 1.45452781e+02 + 1.45374871e+02 1.45295176e+02 1.45213704e+02 1.45130467e+02 1.45045472e+02 + 1.44958732e+02 1.44870254e+02 1.44780051e+02 1.44688131e+02 1.44594506e+02 + 1.44499185e+02 1.44402178e+02 1.44303497e+02 1.44203151e+02 1.44101151e+02 + 1.43997508e+02 1.43892232e+02 1.43785334e+02 1.43676825e+02 1.43566715e+02 + 1.43455014e+02 1.43341735e+02 1.43226888e+02 1.43110483e+02 1.42992531e+02 + 1.42873045e+02 1.42752034e+02 1.42629509e+02 1.42505482e+02 1.42379964e+02 + 1.42252966e+02 1.42124499e+02 1.41994574e+02 1.41863202e+02 1.41730395e+02 + 1.41596164e+02 1.41460520e+02 1.41323475e+02 1.41185039e+02 1.41045224e+02 + 1.40904041e+02 1.40761503e+02 1.40617619e+02 1.40472401e+02 1.40325861e+02 + 1.40178011e+02 1.40028860e+02 1.39878422e+02 1.39726706e+02 1.39573726e+02 + 1.39419491e+02 1.39264013e+02 1.39107304e+02 1.38949376e+02 1.38790238e+02 + 1.38629904e+02 1.38468384e+02 1.38305689e+02 1.38141831e+02 1.37976821e+02 + 1.37810671e+02 1.37643391e+02 1.37474994e+02 1.37305490e+02 1.37134890e+02 + 1.36963207e+02 1.36790450e+02 1.36616632e+02 1.36441764e+02 1.36265856e+02 + 1.36088919e+02 1.35910966e+02 1.35732007e+02 1.35552053e+02 1.35371115e+02 + 1.35189204e+02 1.35006331e+02 1.34822508e+02 1.34637745e+02 1.34452052e+02 + 1.34265442e+02 1.34077924e+02 1.33889510e+02 1.33700211e+02 1.33510036e+02 + 1.33318997e+02 1.33127105e+02 1.32934370e+02 1.32740803e+02 1.32546414e+02 + 1.32351214e+02 1.32155213e+02 1.31958423e+02 1.31760852e+02 1.31562512e+02 + 1.31363414e+02 1.31163566e+02 1.30962981e+02 1.30761667e+02 1.30559635e+02 + 1.30356895e+02 1.30153458e+02 1.29949332e+02 1.29744529e+02 1.29539058e+02 + 1.29332930e+02 1.29126153e+02 1.28918738e+02 1.28710695e+02 1.28502033e+02 + 1.28292762e+02 1.28082892e+02 1.27872431e+02 1.27661391e+02 1.27449780e+02 + 1.27237607e+02 1.27024882e+02 1.26811615e+02 1.26597815e+02 1.26383490e+02 + 1.26168650e+02 1.25953305e+02 1.25737462e+02 1.25521132e+02 1.25304323e+02 + 1.25087045e+02 1.24869305e+02 1.24651113e+02 1.24432478e+02 1.24213408e+02 + 1.23993912e+02 1.23773999e+02 1.23553677e+02 1.23332954e+02 1.23111839e+02 + 1.22890341e+02 1.22668468e+02 1.22446227e+02 1.22223628e+02 1.22000678e+02 + 1.21777386e+02 1.21553760e+02 1.21329807e+02 1.21105535e+02 1.20880953e+02 + 1.20656068e+02 1.20430889e+02 1.20205422e+02 1.19979676e+02 1.19753657e+02 + 1.19527375e+02 1.19300835e+02 1.19074046e+02 1.18847015e+02 1.18619750e+02 + 1.18392257e+02 1.18164544e+02 1.17936618e+02 1.17708486e+02 1.17480156e+02 + 1.17251634e+02 1.17022927e+02 1.16794042e+02 1.16564986e+02 1.16335766e+02 + 1.16106388e+02 1.15876860e+02 1.15647187e+02 1.15417377e+02 1.15187436e+02 + 1.14957370e+02 1.14727186e+02 1.14496890e+02 1.14266489e+02 1.14035988e+02 + 1.13805395e+02 1.13574714e+02 1.13343953e+02 1.13113117e+02 1.12882212e+02 + 1.12651245e+02 1.12420220e+02 1.12189145e+02 1.11958024e+02 1.11726863e+02 + 1.11495669e+02 1.11264446e+02 1.11033201e+02 1.10801938e+02 1.10570664e+02 + 1.10339384e+02 1.10108102e+02 1.09876825e+02 1.09645558e+02 1.09414306e+02 + 1.09183074e+02 1.08951867e+02 1.08720690e+02 1.08489549e+02 1.08258447e+02 + 1.08027392e+02 1.07796386e+02 1.07565435e+02 1.07334544e+02 1.07103717e+02 + 1.06872960e+02 1.06642276e+02 1.06411671e+02 1.06181148e+02 1.05950713e+02 + 1.05720370e+02 1.05490123e+02 1.05259977e+02 1.05029936e+02 1.04800004e+02 + 1.04570186e+02 1.04340485e+02 1.04110906e+02 1.03881453e+02 1.03652130e+02 + 1.03422940e+02 1.03193889e+02 1.02964980e+02 1.02736216e+02 1.02507602e+02 + 1.02279141e+02 1.02050837e+02 1.01822694e+02 1.01594715e+02 1.01366905e+02 + 1.01139266e+02 1.00911802e+02 1.00684517e+02 1.00457414e+02 1.00230497e+02 + 1.00003768e+02 9.97772321e+01 9.95508915e+01 9.93247499e+01 9.90988103e+01 + 9.88730759e+01 9.86475500e+01 9.84222355e+01 9.81971356e+01 9.79722534e+01 + 9.77475917e+01 9.75231536e+01 9.72989420e+01 9.70749597e+01 9.68512097e+01 + 9.66276947e+01 9.64044174e+01 9.61813808e+01 9.59585873e+01 9.57360398e+01 + 9.55137409e+01 9.52916930e+01 9.50698990e+01 9.48483611e+01 9.46270821e+01 + 9.44060642e+01 9.41853100e+01 9.39648219e+01 9.37446022e+01 9.35246532e+01 + 9.33049773e+01 9.30855768e+01 9.28664538e+01 9.26476106e+01 9.24290493e+01 + 9.22107722e+01 9.19927813e+01 9.17750786e+01 9.15576664e+01 9.13405465e+01 + 9.11237210e+01 9.09071919e+01 9.06909610e+01 9.04750303e+01 9.02594017e+01 + 9.00440770e+01 8.98290581e+01 8.96143467e+01 8.93999446e+01 8.91858535e+01 + 8.89720752e+01 8.87586114e+01 8.85454636e+01 8.83326336e+01 8.81201229e+01 + 8.79079332e+01 8.76960659e+01 8.74845226e+01 8.72733048e+01 8.70624140e+01 + 8.68518516e+01 8.66416191e+01 8.64317178e+01 8.62221492e+01 8.60129146e+01 + 8.58040153e+01 8.55954526e+01 8.53872279e+01 8.51793423e+01 8.49717971e+01 + 8.47645936e+01 8.45577329e+01 8.43512162e+01 8.41450446e+01 8.39392193e+01 + 8.37337413e+01 8.35286118e+01 8.33238319e+01 8.31194024e+01 8.29153246e+01 + 8.27115993e+01 8.25082275e+01 8.23052103e+01 8.21025484e+01 8.19002430e+01 + 8.16982948e+01 8.14967047e+01 8.12954737e+01 8.10946024e+01 8.08940918e+01 + 8.06939427e+01 8.04941558e+01 8.02947318e+01 8.00956717e+01 7.98969760e+01 + 7.96986455e+01 7.95006808e+01 7.93030827e+01 7.91058518e+01 7.89089888e+01 + 7.87124942e+01 7.85163688e+01 7.83206129e+01 7.81252274e+01 7.79302126e+01 + 7.77355691e+01 7.75412975e+01 7.73473983e+01 7.71538720e+01 7.69607190e+01 + 7.67679398e+01 7.65755348e+01 7.63835046e+01 7.61918494e+01 7.60005698e+01 + 7.58096660e+01 7.56191385e+01 7.54289877e+01 7.52392138e+01 7.50498172e+01 + 7.48607982e+01 7.46721572e+01 7.44838943e+01 7.42960100e+01 7.41085045e+01 + 7.39213779e+01 7.37346306e+01 7.35482627e+01 7.33622746e+01 7.31766663e+01 + 7.29914382e+01 7.28065902e+01 7.26221227e+01 7.24380357e+01 7.22543295e+01 + 7.20710041e+01 7.18880596e+01 7.17054962e+01 7.15233140e+01 7.13415130e+01 + 7.11600933e+01 7.09790550e+01 7.07983980e+01 7.06181226e+01 7.04382286e+01 + 7.02587162e+01 7.00795852e+01 6.99008358e+01 6.97224679e+01 6.95444815e+01 + 6.93668765e+01 6.91896529e+01 6.90128107e+01 6.88363498e+01 6.86602702e+01 + 6.84845716e+01 6.83092542e+01 6.81343177e+01 6.79597621e+01 6.77855872e+01 + 6.76117930e+01 6.74383792e+01 6.72653459e+01 6.70926927e+01 6.69204196e+01 + 6.67485263e+01 6.65770128e+01 6.64058788e+01 6.62351242e+01 6.60647487e+01 + 6.58947522e+01 6.57251344e+01 6.55558951e+01 6.53870341e+01 6.52185512e+01 + 6.50504461e+01 6.48827185e+01 6.47153683e+01 6.45483951e+01 6.43817987e+01 + 6.42155788e+01 6.40497352e+01 6.38842675e+01 6.37191754e+01 6.35544587e+01 + 6.33901170e+01 6.32261501e+01 6.30625575e+01 6.28993390e+01 6.27364943e+01 + 6.25740230e+01 6.24119248e+01 6.22501992e+01 6.20888461e+01 6.19278649e+01 + 6.17672554e+01 6.16070172e+01 6.14471498e+01 6.12876529e+01 6.11285262e+01 + 6.09697692e+01 6.08113816e+01 6.06533628e+01 6.04957126e+01 6.03384305e+01 + 6.01815161e+01 6.00249690e+01 5.98687888e+01 5.97129749e+01 5.95575271e+01 + 5.94024448e+01 5.92477276e+01 5.90933750e+01 5.89393867e+01 5.87857621e+01 + 5.86325008e+01 5.84796024e+01 5.83270662e+01 5.81748920e+01 5.80230792e+01 + 5.78716273e+01 5.77205359e+01 5.75698044e+01 5.74194325e+01 5.72694194e+01 + 5.71197649e+01 5.69704684e+01 5.68215293e+01 5.66729472e+01 5.65247215e+01 + 5.63768518e+01 5.62293375e+01 5.60821782e+01 5.59353732e+01 5.57889220e+01 + 5.56428242e+01 5.54970792e+01 5.53516865e+01 5.52066455e+01 5.50619556e+01 + 5.49176164e+01 5.47736273e+01 5.46299878e+01 5.44866972e+01 5.43437551e+01 + 5.42011609e+01 5.40589140e+01 5.39170138e+01 5.37754599e+01 5.36342516e+01 + 5.34933884e+01 5.33528697e+01 5.32126949e+01 5.30728635e+01 5.29333749e+01 + 5.27942284e+01 5.26554236e+01 5.25169599e+01 5.23788366e+01 5.22410531e+01 + 5.21036090e+01 5.19665035e+01 5.18297362e+01 5.16933064e+01 5.15572135e+01 + 5.14214569e+01 5.12860360e+01 5.11509503e+01 5.10161991e+01 5.08817818e+01 + 5.07476979e+01 5.06139466e+01 5.04805275e+01 5.03474399e+01 5.02146831e+01 + 5.00822567e+01 4.99501599e+01 4.98183922e+01 4.96869529e+01 4.95558415e+01 + 4.94250573e+01 4.92945997e+01 4.91644680e+01 4.90346617e+01 4.89051802e+01 + 4.87760228e+01 4.86471889e+01 4.85186778e+01 4.83904890e+01 4.82626219e+01 + 4.81350757e+01 4.80078499e+01 4.78809439e+01 4.77543570e+01 4.76280885e+01 + 4.75021379e+01 4.73765046e+01 4.72511879e+01 4.71261871e+01 4.70015017e+01 + 4.68771310e+01 4.67530743e+01 4.66293311e+01 4.65059007e+01 4.63827825e+01 + 4.62599758e+01 4.61374800e+01 4.60152945e+01 4.58934186e+01 4.57718517e+01 + 4.56505932e+01 4.55296424e+01 4.54089987e+01 4.52886614e+01 4.51686299e+01 + 4.50489036e+01 4.49294819e+01 4.48103640e+01 4.46915494e+01 4.45730374e+01 + 4.44548274e+01 4.43369187e+01 4.42193108e+01 4.41020029e+01 4.39849944e+01 + 4.38682847e+01 4.37518731e+01 4.36357591e+01 4.35199419e+01 4.34044210e+01 + 4.32891956e+01 4.31742652e+01 4.30596292e+01 4.29452868e+01 4.28312374e+01 + 4.27174804e+01 4.26040152e+01 4.24908411e+01 4.23779575e+01 4.22653637e+01 + 4.21530592e+01 4.20410432e+01 4.19293152e+01 4.18178744e+01 4.17067204e+01 + 4.15958523e+01 4.14852696e+01 4.13749717e+01 4.12649579e+01 4.11552276e+01 + 4.10457802e+01 4.09366150e+01 4.08277313e+01 4.07191286e+01 4.06108062e+01 + 4.05027635e+01 4.03949999e+01 4.02875147e+01 4.01803072e+01 4.00733770e+01 + 3.99667232e+01 3.98603454e+01 3.97542428e+01 3.96484149e+01 3.95428610e+01 + 3.94375804e+01 3.93325727e+01 3.92278370e+01 3.91233729e+01 3.90191797e+01 + 3.89152567e+01 3.88116033e+01 3.87082190e+01 3.86051031e+01 3.85022549e+01 + 3.83996738e+01 3.82973593e+01 3.81953107e+01 3.80935274e+01 3.79920087e+01 + 3.78907541e+01 3.77897629e+01 3.76890345e+01 3.75885683e+01 3.74883637e+01 + 3.73884200e+01 3.72887367e+01 3.71893131e+01 3.70901487e+01 3.69912428e+01 + 3.68925948e+01 3.67942040e+01 3.66960700e+01 3.65981920e+01 3.65005695e+01 + 3.64032018e+01 3.63060884e+01 3.62092287e+01 3.61126219e+01 3.60162677e+01 + 3.59201652e+01 3.58243140e+01 3.57287134e+01 3.56333628e+01 3.55382617e+01 + 3.54434094e+01 3.53488054e+01 3.52544489e+01 3.51603395e+01 3.50664766e+01 + 3.49728595e+01 3.48794877e+01 3.47863605e+01 3.46934774e+01 3.46008377e+01 + 3.45084410e+01 3.44162866e+01 3.43243738e+01 3.42327022e+01 3.41412712e+01 + 3.40500801e+01 3.39591283e+01 3.38684154e+01 3.37779406e+01 3.36877035e+01 + 3.35977034e+01 3.35079398e+01 3.34184120e+01 3.33291196e+01 3.32400618e+01 + 3.31512383e+01 3.30626483e+01 3.29742913e+01 3.28861667e+01 3.27982740e+01 + 3.27106125e+01 3.26231818e+01 3.25359813e+01 3.24490103e+01 3.23622683e+01 + 3.22757548e+01 3.21894691e+01 3.21034108e+01 3.20175792e+01 3.19319738e+01 + 3.18465940e+01 3.17614393e+01 3.16765091e+01 3.15918029e+01 3.15073200e+01 + 3.14230600e+01 3.13390223e+01 3.12552063e+01 3.11716115e+01 3.10882373e+01 + 3.10050832e+01 3.09221486e+01 3.08394330e+01 3.07569358e+01 3.06746565e+01 + 3.05925945e+01 3.05107493e+01 3.04291204e+01 3.03477071e+01 3.02665091e+01 + 3.01855256e+01 3.01047563e+01 3.00242005e+01 2.99438576e+01 2.98637273e+01 + 2.97838089e+01 2.97041019e+01 2.96246058e+01 2.95453200e+01 2.94662440e+01 + 2.93873773e+01 2.93087194e+01 2.92302697e+01 2.91520276e+01 2.90739928e+01 + 2.89961646e+01 2.89185425e+01 2.88411260e+01 2.87639145e+01 2.86869077e+01 + 2.86101048e+01 2.85335055e+01 2.84571092e+01 2.83809154e+01 2.83049236e+01 + 2.82291332e+01 2.81535438e+01 2.80781548e+01 2.80029657e+01 2.79279760e+01 + 2.78531853e+01 2.77785929e+01 2.77041985e+01 2.76300014e+01 2.75560012e+01 + 2.74821974e+01 2.74085895e+01 2.73351769e+01 2.72619592e+01 2.71889360e+01 + 2.71161065e+01 2.70434705e+01 2.69710274e+01 2.68987766e+01 2.68267178e+01 + 2.67548504e+01 2.66831739e+01 2.66116878e+01 2.65403917e+01 2.64692850e+01 + 2.63983673e+01 2.63276380e+01 2.62570968e+01 2.61867431e+01 2.61165764e+01 + 2.60465962e+01 2.59768021e+01 2.59071936e+01 2.58377702e+01 2.57685315e+01 + 2.56994769e+01 2.56306059e+01 2.55619182e+01 2.54934132e+01 2.54250905e+01 + 2.53569496e+01 2.52889900e+01 2.52212112e+01 2.51536129e+01 2.50861944e+01 + 2.50189554e+01 2.49518954e+01 2.48850139e+01 2.48183105e+01 2.47517847e+01 + 2.46854360e+01 2.46192641e+01 2.45532683e+01 2.44874483e+01 2.44218036e+01 + 2.43563338e+01 2.42910384e+01 2.42259169e+01 2.41609689e+01 2.40961940e+01 + 2.40315917e+01 2.39671615e+01 2.39029030e+01 2.38388158e+01 2.37748994e+01 + 2.37111533e+01 2.36475772e+01 2.35841706e+01 2.35209330e+01 2.34578640e+01 + 2.33949631e+01 2.33322300e+01 2.32696641e+01 2.32072651e+01 2.31450326e+01 + 2.30829659e+01 2.30210649e+01 2.29593289e+01 2.28977577e+01 2.28363507e+01 + 2.27751075e+01 2.27140277e+01 2.26531109e+01 2.25923566e+01 2.25317644e+01 + 2.24713339e+01 2.24110647e+01 2.23509564e+01 2.22910085e+01 2.22312206e+01 + 2.21715922e+01 2.21121231e+01 2.20528127e+01 2.19936606e+01 2.19346665e+01 + 2.18758299e+01 2.18171503e+01 2.17586275e+01 2.17002609e+01 2.16420503e+01 + 2.15839950e+01 2.15260948e+01 2.14683493e+01 2.14107580e+01 2.13533205e+01 + 2.12960364e+01 2.12389054e+01 2.11819270e+01 2.11251008e+01 2.10684265e+01 + 2.10119035e+01 2.09555316e+01 2.08993103e+01 2.08432393e+01 2.07873181e+01 + 2.07315463e+01 2.06759236e+01 2.06204495e+01 2.05651237e+01 2.05099458e+01 + 2.04549154e+01 2.04000321e+01 2.03452954e+01 2.02907052e+01 2.02362608e+01 + 2.01819620e+01 2.01278084e+01 2.00737995e+01 2.00199351e+01 1.99662147e+01 + 1.99126380e+01 1.98592045e+01 1.98059139e+01 1.97527658e+01 1.96997599e+01 + 1.96468957e+01 1.95941729e+01 1.95415912e+01 1.94891500e+01 1.94368492e+01 + 1.93846882e+01 1.93326668e+01 1.92807846e+01 1.92290411e+01 1.91774361e+01 + 1.91259691e+01 1.90746398e+01 1.90234479e+01 1.89723930e+01 1.89214746e+01 + 1.88706925e+01 1.88200463e+01 1.87695356e+01 1.87191601e+01 1.86689194e+01 + 1.86188132e+01 1.85688411e+01 1.85190027e+01 1.84692977e+01 1.84197257e+01 + 1.83702865e+01 1.83209796e+01 1.82718046e+01 1.82227613e+01 1.81738493e+01 + 1.81250682e+01 1.80764177e+01 1.80278975e+01 1.79795071e+01 1.79312463e+01 + 1.78831148e+01 1.78351121e+01 1.77872379e+01 1.77394919e+01 1.76918738e+01 + 1.76443832e+01 1.75970197e+01 1.75497831e+01 1.75026730e+01 1.74556891e+01 + 1.74088310e+01 1.73620983e+01 1.73154909e+01 1.72690082e+01 1.72226501e+01 + 1.71764161e+01 1.71303060e+01 1.70843194e+01 1.70384560e+01 1.69927154e+01 + 1.69470973e+01 1.69016015e+01 1.68562275e+01 1.68109751e+01 1.67658439e+01 + 1.67208336e+01 1.66759439e+01 1.66311745e+01 1.65865250e+01 1.65419952e+01 + 1.64975846e+01 1.64532931e+01 1.64091202e+01 1.63650657e+01 1.63211293e+01 + 1.62773106e+01 1.62336093e+01 1.61900251e+01 1.61465577e+01 1.61032068e+01 + 1.60599721e+01 1.60168532e+01 1.59738499e+01 1.59309619e+01 1.58881887e+01 + 1.58455303e+01 1.58029861e+01 1.57605560e+01 1.57182397e+01 1.56760367e+01 + 1.56339469e+01 1.55919699e+01 1.55501054e+01 1.55083531e+01 1.54667128e+01 + 1.54251840e+01 1.53837666e+01 1.53424603e+01 1.53012646e+01 1.52601794e+01 + 1.52192044e+01 1.51783392e+01 1.51375835e+01 1.50969371e+01 1.50563997e+01 + 1.50159710e+01 1.49756507e+01 1.49354385e+01 1.48953341e+01 1.48553372e+01 + 1.48154476e+01 1.47756649e+01 1.47359889e+01 1.46964193e+01 1.46569558e+01 + 1.46175982e+01 1.45783460e+01 1.45391992e+01 1.45001573e+01 1.44612201e+01 + 1.44221013e+01 1.43823077e+01 1.43418365e+01 1.43006939e+01 1.42588863e+01 + 1.42164199e+01 1.41733013e+01 1.41295367e+01 1.40851327e+01 1.40400959e+01 + 1.39944327e+01 1.39481499e+01 1.39012541e+01 1.38537520e+01 1.38056503e+01 + 1.37569558e+01 1.37076754e+01 1.36578159e+01 1.36073842e+01 1.35563871e+01 + 1.35048318e+01 1.34527252e+01 1.34000743e+01 1.33468861e+01 1.32931679e+01 + 1.32389266e+01 1.31841694e+01 1.31289036e+01 1.30731363e+01 1.30168747e+01 + 1.29601261e+01 1.29028978e+01 1.28451971e+01 1.27870312e+01 1.27284076e+01 + 1.26693335e+01 1.26098164e+01 1.25498637e+01 1.24894827e+01 1.24286808e+01 + 1.23674656e+01 1.23058445e+01 1.22438250e+01 1.21814144e+01 1.21186203e+01 + 1.20554503e+01 1.19919118e+01 1.19280122e+01 1.18637593e+01 1.17991604e+01 + 1.17342231e+01 1.16689549e+01 1.16033634e+01 1.15374562e+01 1.14712406e+01 + 1.14047244e+01 1.13379151e+01 1.12708201e+01 1.12034471e+01 1.11358035e+01 + 1.10678969e+01 1.09997348e+01 1.09313248e+01 1.08626743e+01 1.07937909e+01 + 1.07246820e+01 1.06553552e+01 1.05858180e+01 1.05160777e+01 1.04461419e+01 + 1.03760180e+01 1.03057134e+01 1.02352356e+01 1.01645919e+01 1.00937898e+01 + 1.00228366e+01 9.95173971e+00 9.88050638e+00 9.80914398e+00 9.73765979e+00 + 9.66606109e+00 9.59435515e+00 9.52254919e+00 9.45065043e+00 9.37866605e+00 + 9.30660322e+00 9.23446907e+00 9.16227073e+00 9.09001528e+00 9.01770977e+00 + 8.94536125e+00 8.87297672e+00 8.80056316e+00 8.72812750e+00 8.65567668e+00 + 8.58321756e+00 8.51075702e+00 8.43830186e+00 8.36585889e+00 8.29343485e+00 + 8.22103646e+00 8.14867042e+00 8.07634337e+00 8.00406193e+00 7.93183268e+00 + 7.85966216e+00 7.78755688e+00 7.71552329e+00 7.64356784e+00 7.57169690e+00 + 7.49991683e+00 7.42823393e+00 7.35665448e+00 7.28518468e+00 7.21383074e+00 + 7.14259879e+00 7.07149492e+00 7.00052520e+00 6.92969562e+00 6.85901217e+00 + 6.78848076e+00 6.71810726e+00 6.64789751e+00 6.57785729e+00 6.50799234e+00 + 6.43830834e+00 6.36881094e+00 6.29950573e+00 6.23039827e+00 6.16149404e+00 + 6.09279849e+00 6.02431702e+00 5.95605499e+00 5.88801768e+00 5.82021035e+00 + 5.75263820e+00 5.68530636e+00 5.61821994e+00 5.55138397e+00 5.48480344e+00 + 5.41848329e+00 5.35242840e+00 5.28664361e+00 5.22113368e+00 5.15590335e+00 + 5.09095728e+00 5.02630009e+00 4.96193633e+00 4.89787051e+00 4.83410709e+00 + 4.77065045e+00 4.70750493e+00 4.64467483e+00 4.58216436e+00 4.51997769e+00 + 4.45811895e+00 4.39659218e+00 4.33540140e+00 4.27455054e+00 4.21404350e+00 + 4.15388409e+00 4.09407611e+00 4.03462325e+00 3.97552918e+00 3.91679750e+00 + 3.85843175e+00 3.80043541e+00 3.74281191e+00 3.68556461e+00 3.62869683e+00 + 3.57221182e+00 3.51611277e+00 3.46040280e+00 3.40508500e+00 3.35016239e+00 + 3.29563791e+00 3.24151448e+00 3.18779492e+00 3.13448202e+00 3.08157850e+00 + 3.02908703e+00 2.97701021e+00 2.92535059e+00 2.87411065e+00 2.82329282e+00 + 2.77289947e+00 2.72293291e+00 2.67339540e+00 2.62428912e+00 2.57561621e+00 + 2.52737875e+00 2.47957875e+00 2.43221817e+00 2.38529892e+00 2.33882283e+00 + 2.29279169e+00 2.24720723e+00 2.20207111e+00 2.15738494e+00 2.11315028e+00 + 2.06936862e+00 2.02604139e+00 1.98316998e+00 1.94075571e+00 1.89879985e+00 + 1.85730359e+00 1.81626811e+00 1.77569447e+00 1.73558374e+00 1.69593688e+00 + 1.65675483e+00 1.61803846e+00 1.57978857e+00 1.54200593e+00 1.50469123e+00 + 1.46784514e+00 1.43146824e+00 1.39556106e+00 1.36012410e+00 1.32515778e+00 + 1.29066248e+00 1.25663851e+00 1.22308616e+00 1.19000563e+00 1.15739708e+00 + 1.12526062e+00 1.09359631e+00 1.06240415e+00 1.03168410e+00 1.00143606e+00 + 9.71659862e-01 9.42355321e-01 9.13522177e-01 8.85160127e-01 8.57268818e-01 + 8.29847844e-01 8.02896752e-01 7.76415039e-01 7.50402153e-01 7.24857492e-01 + 6.99780408e-01 6.75170202e-01 6.51026130e-01 6.27347399e-01 6.04133170e-01 + 5.81382555e-01 5.59094623e-01 5.37268394e-01 5.15902844e-01 4.94996902e-01 + 4.74549455e-01 4.54559343e-01 4.35025362e-01 4.15946264e-01 3.97320759e-01 + 3.79147513e-01 3.61425148e-01 3.44152245e-01 3.27327344e-01 3.10948942e-01 + 2.95015494e-01 2.79525416e-01 2.64477082e-01 2.49868829e-01 2.35698950e-01 + 2.21965702e-01 2.08667302e-01 1.95801929e-01 1.83367724e-01 1.71362791e-01 + 1.59785195e-01 1.48632967e-01 1.37904098e-01 1.27596548e-01 1.17708236e-01 + 1.08237051e-01 9.91808451e-02 9.05374353e-02 8.23046065e-02 7.44801094e-02 + 6.70616623e-02 6.00469508e-02 5.34336286e-02 4.72193177e-02 4.14016091e-02 + 3.59780630e-02 3.09462095e-02 2.63035487e-02 2.20475516e-02 1.81756600e-02 + 1.46852874e-02 1.15738194e-02 8.83861364e-03 6.47700104e-03 4.48628566e-03 + 2.86374536e-03 1.60663225e-03 7.12173109e-04 1.77569856e-04 0.00000000e+00 + 1.65968286e-01 1.65968286e-01 1.67501954e-01 1.69381845e-01 1.71282685e-01 + 1.73204702e-01 1.75148130e-01 1.77113201e-01 1.79100155e-01 1.81109230e-01 + 1.83140669e-01 1.85194716e-01 1.87271619e-01 1.89371627e-01 1.91494994e-01 + 1.93641974e-01 1.95812825e-01 1.98007809e-01 2.00227187e-01 2.02471227e-01 + 2.04740197e-01 2.07034369e-01 2.09354018e-01 2.11699420e-01 2.14070856e-01 + 2.16468609e-01 2.18892965e-01 2.21344213e-01 2.23822646e-01 2.26328558e-01 + 2.28862247e-01 2.31424015e-01 2.34014167e-01 2.36633008e-01 2.39280850e-01 + 2.41958008e-01 2.44664796e-01 2.47401537e-01 2.50168554e-01 2.52966173e-01 + 2.55794724e-01 2.58654541e-01 2.61545961e-01 2.64469325e-01 2.67424975e-01 + 2.70413260e-01 2.73434529e-01 2.76489138e-01 2.79577445e-01 2.82699810e-01 + 2.85856598e-01 2.89048180e-01 2.92274926e-01 2.95537214e-01 2.98835423e-01 + 3.02169937e-01 3.05541143e-01 3.08949433e-01 3.12395202e-01 3.15878849e-01 + 3.19400778e-01 3.22961395e-01 3.26561111e-01 3.30200343e-01 3.33879508e-01 + 3.37599030e-01 3.41359337e-01 3.45160859e-01 3.49004034e-01 3.52889300e-01 + 3.56817102e-01 3.60787889e-01 3.64802114e-01 3.68860232e-01 3.72962707e-01 + 3.77110004e-01 3.81302594e-01 3.85540951e-01 3.89825554e-01 3.94156889e-01 + 3.98535442e-01 4.02961708e-01 4.07436184e-01 4.11959373e-01 4.16531781e-01 + 4.21153920e-01 4.25826307e-01 4.30549463e-01 4.35323915e-01 4.40150193e-01 + 4.45028834e-01 4.49960377e-01 4.54945369e-01 4.59984360e-01 4.65077907e-01 + 4.70226569e-01 4.75430912e-01 4.80691507e-01 4.86008931e-01 4.91383763e-01 + 4.96816591e-01 5.02308005e-01 5.07858602e-01 5.13468983e-01 5.19139757e-01 + 5.24871535e-01 5.30664934e-01 5.36520578e-01 5.42439096e-01 5.48421119e-01 + 5.54467289e-01 5.60578249e-01 5.66754649e-01 5.72997145e-01 5.79306397e-01 + 5.85683073e-01 5.92127843e-01 5.98641385e-01 6.05224382e-01 6.11877524e-01 + 6.18601503e-01 6.25397020e-01 6.32264781e-01 6.39205495e-01 6.46219881e-01 + 6.53308659e-01 6.60472559e-01 6.67712313e-01 6.75028662e-01 6.82422349e-01 + 6.89894127e-01 6.97444750e-01 7.05074982e-01 7.12785590e-01 7.20577348e-01 + 7.28451035e-01 7.36407436e-01 7.44447341e-01 7.52571547e-01 7.60780856e-01 + 7.69076076e-01 7.77458020e-01 7.85927507e-01 7.94485362e-01 8.03132416e-01 + 8.11869504e-01 8.20697469e-01 8.29617157e-01 8.38629421e-01 8.47735121e-01 + 8.56935119e-01 8.66230285e-01 8.75621495e-01 8.85109628e-01 8.94695572e-01 + 9.04380216e-01 9.14164458e-01 9.24049199e-01 9.34035347e-01 9.44123815e-01 + 9.54315519e-01 9.64611384e-01 9.75012336e-01 9.85519310e-01 9.96133242e-01 + 1.00685508e+00 1.01768576e+00 1.02862625e+00 1.03967749e+00 1.05084046e+00 + 1.06211612e+00 1.07350544e+00 1.08500939e+00 1.09662896e+00 1.10836513e+00 + 1.12021890e+00 1.13219124e+00 1.14428316e+00 1.15649566e+00 1.16882975e+00 + 1.18128643e+00 1.19386672e+00 1.20657163e+00 1.21940218e+00 1.23235939e+00 + 1.24544429e+00 1.25865790e+00 1.27200127e+00 1.28547542e+00 1.29908139e+00 + 1.31282021e+00 1.32669294e+00 1.34070062e+00 1.35484429e+00 1.36912500e+00 + 1.38354380e+00 1.39810174e+00 1.41279987e+00 1.42763926e+00 1.44262095e+00 + 1.45774600e+00 1.47301546e+00 1.48843041e+00 1.50399188e+00 1.51970095e+00 + 1.53555866e+00 1.55156608e+00 1.56772426e+00 1.58403426e+00 1.60049713e+00 + 1.61711393e+00 1.63388570e+00 1.65081351e+00 1.66789840e+00 1.68514141e+00 + 1.70254358e+00 1.72010597e+00 1.73782961e+00 1.75571552e+00 1.77376475e+00 + 1.79197832e+00 1.81035726e+00 1.82890257e+00 1.84761528e+00 1.86649640e+00 + 1.88554692e+00 1.90476784e+00 1.92416016e+00 1.94372486e+00 1.96346292e+00 + 1.98337531e+00 2.00346299e+00 2.02372692e+00 2.04416804e+00 2.06478730e+00 + 2.08558562e+00 2.10656392e+00 2.12772312e+00 2.14906411e+00 2.17058779e+00 + 2.19229503e+00 2.21418670e+00 2.23626366e+00 2.25852674e+00 2.28097679e+00 + 2.30361461e+00 2.32644102e+00 2.34945680e+00 2.37266272e+00 2.39605955e+00 + 2.41964804e+00 2.44342891e+00 2.46740287e+00 2.49157062e+00 2.51593285e+00 + 2.54049020e+00 2.56524333e+00 2.59019286e+00 2.61533938e+00 2.64068350e+00 + 2.66622577e+00 2.69196673e+00 2.71790690e+00 2.74404680e+00 2.77038689e+00 + 2.79692763e+00 2.82366945e+00 2.85061275e+00 2.87775793e+00 2.90510534e+00 + 2.93265530e+00 2.96040813e+00 2.98836411e+00 3.01652347e+00 3.04488646e+00 + 3.07345326e+00 3.10222404e+00 3.13119894e+00 3.16037805e+00 3.18976147e+00 + 3.21934922e+00 3.24914133e+00 3.27913778e+00 3.30933850e+00 3.33974343e+00 + 3.37035242e+00 3.40116534e+00 3.43218198e+00 3.46340213e+00 3.49482552e+00 + 3.52645185e+00 3.55828079e+00 3.59031197e+00 3.62254496e+00 3.65497933e+00 + 3.68761457e+00 3.72045016e+00 3.75348554e+00 3.78672008e+00 3.82015313e+00 + 3.85378401e+00 3.88761196e+00 3.92163622e+00 3.95585596e+00 3.99027032e+00 + 4.02487837e+00 4.05967918e+00 4.09467173e+00 4.12985498e+00 4.16522784e+00 + 4.20078917e+00 4.23653779e+00 4.27247247e+00 4.30859194e+00 4.34489485e+00 + 4.38137985e+00 4.41804551e+00 4.45489037e+00 4.49191289e+00 4.52911153e+00 + 4.56648465e+00 4.60403061e+00 4.64174767e+00 4.67963408e+00 4.71768803e+00 + 4.75590765e+00 4.79429103e+00 4.83283620e+00 4.87154114e+00 4.91040381e+00 + 4.94942207e+00 4.98859378e+00 5.02791670e+00 5.06738858e+00 5.10700710e+00 + 5.14676990e+00 5.18667457e+00 5.22671863e+00 5.26689957e+00 5.30721483e+00 + 5.34766180e+00 5.38823781e+00 5.42894016e+00 5.46976609e+00 5.51071278e+00 + 5.55177738e+00 5.59295700e+00 5.63424868e+00 5.67564943e+00 5.71715620e+00 + 5.75876591e+00 5.80047542e+00 5.84228156e+00 5.88418111e+00 5.92617080e+00 + 5.96824732e+00 6.01040733e+00 6.05264743e+00 6.09496419e+00 6.13735413e+00 + 6.17981376e+00 6.22233950e+00 6.26492779e+00 6.30757498e+00 6.35027743e+00 + 6.39303142e+00 6.43583324e+00 6.47867912e+00 6.52156525e+00 6.56448781e+00 + 6.60744295e+00 6.65042676e+00 6.69343534e+00 6.73646474e+00 6.77951098e+00 + 6.82257007e+00 6.86563800e+00 6.90871071e+00 6.95178414e+00 6.99485420e+00 + 7.03791679e+00 7.08096779e+00 7.12400304e+00 7.16701841e+00 7.21000970e+00 + 7.25297275e+00 7.29590336e+00 7.33879731e+00 7.38165039e+00 7.42445838e+00 + 7.46721705e+00 7.50992216e+00 7.55256947e+00 7.59515474e+00 7.63767373e+00 + 7.68012218e+00 7.72249588e+00 7.76479056e+00 7.80700201e+00 7.84912598e+00 + 7.89115827e+00 7.93309466e+00 7.97493094e+00 8.01666293e+00 8.05828645e+00 + 8.09979734e+00 8.14119143e+00 8.18246462e+00 8.22361278e+00 8.26463181e+00 + 8.30551766e+00 8.34626626e+00 8.38687359e+00 8.42733566e+00 8.46764848e+00 + 8.50780811e+00 8.54781063e+00 8.58765216e+00 8.62732884e+00 8.66683685e+00 + 8.70617239e+00 8.74533171e+00 8.78431109e+00 8.82310687e+00 8.86171538e+00 + 8.90013304e+00 8.93835627e+00 8.97638157e+00 9.01420545e+00 9.05182449e+00 + 9.08923530e+00 9.12643453e+00 9.16341889e+00 9.20018514e+00 9.23673009e+00 + 9.27305057e+00 9.30914350e+00 9.34500584e+00 9.38063458e+00 9.41602679e+00 + 9.45117958e+00 9.48609012e+00 9.52075564e+00 9.55517340e+00 9.58934075e+00 + 9.62325508e+00 9.65691384e+00 9.69031453e+00 9.72345472e+00 9.75633204e+00 + 9.78894416e+00 9.82128884e+00 9.85336387e+00 9.88516712e+00 9.91669651e+00 + 9.94795003e+00 9.97892573e+00 1.00096217e+01 1.00400361e+01 1.00701673e+01 + 1.01000134e+01 1.01295728e+01 1.01588440e+01 1.01878254e+01 1.02165155e+01 + 1.02449131e+01 1.02730167e+01 1.03008250e+01 1.03283369e+01 1.03555512e+01 + 1.03824668e+01 1.04090827e+01 1.04353979e+01 1.04614115e+01 1.04871227e+01 + 1.05125307e+01 1.05376347e+01 1.05624341e+01 1.05869282e+01 1.06111166e+01 + 1.06349988e+01 1.06585742e+01 1.06818426e+01 1.07048035e+01 1.07274568e+01 + 1.07498023e+01 1.07718397e+01 1.07935690e+01 1.08149902e+01 1.08361032e+01 + 1.08569082e+01 1.08774051e+01 1.08975943e+01 1.09174759e+01 1.09370501e+01 + 1.09563174e+01 1.09752780e+01 1.09939325e+01 1.10122811e+01 1.10303246e+01 + 1.10480633e+01 1.10654980e+01 1.10826292e+01 1.10994577e+01 1.11159841e+01 + 1.11322093e+01 1.11481341e+01 1.11637593e+01 1.11790858e+01 1.11941146e+01 + 1.12088466e+01 1.12232829e+01 1.12374245e+01 1.12512725e+01 1.12648279e+01 + 1.12780921e+01 1.12910660e+01 1.13037511e+01 1.13161484e+01 1.13282594e+01 + 1.13400853e+01 1.13516274e+01 1.13628872e+01 1.13738660e+01 1.13845653e+01 + 1.13949865e+01 1.14051310e+01 1.14150005e+01 1.14245965e+01 1.14339203e+01 + 1.14429738e+01 1.14517584e+01 1.14602758e+01 1.14685276e+01 1.14765154e+01 + 1.14842410e+01 1.14917060e+01 1.14989121e+01 1.15058611e+01 1.15125547e+01 + 1.15189947e+01 1.15251829e+01 1.15311209e+01 1.15368107e+01 1.15422540e+01 + 1.15474527e+01 1.15524086e+01 1.15571235e+01 1.15615993e+01 1.15658378e+01 + 1.15698410e+01 1.15736107e+01 1.15771488e+01 1.15804572e+01 1.15835378e+01 + 1.15863925e+01 1.15890232e+01 1.15914318e+01 1.15936202e+01 1.15955905e+01 + 1.15973444e+01 1.15988840e+01 1.16002111e+01 1.16013277e+01 1.16022357e+01 + 1.16029371e+01 1.16034338e+01 1.16037276e+01 1.16038207e+01 1.16037148e+01 + 1.16034120e+01 1.16029141e+01 1.16022230e+01 1.16013408e+01 1.16002692e+01 + 1.15990103e+01 1.15975659e+01 1.15959380e+01 1.15941284e+01 1.15921390e+01 + 1.15899718e+01 1.15876286e+01 1.15851113e+01 1.15824217e+01 1.15795618e+01 + 1.15765334e+01 1.15733384e+01 1.15699786e+01 1.15664558e+01 1.15627718e+01 + 1.15589286e+01 1.15549279e+01 1.15507715e+01 1.15464612e+01 1.15419987e+01 + 1.15373860e+01 1.15326247e+01 1.15277166e+01 1.15226635e+01 1.15174671e+01 + 1.15121291e+01 1.15066512e+01 1.15010352e+01 1.14952827e+01 1.14893955e+01 + 1.14833752e+01 1.14772235e+01 1.14709421e+01 1.14645325e+01 1.14579965e+01 + 1.14513356e+01 1.14445514e+01 1.14376456e+01 1.14306198e+01 1.14234754e+01 + 1.14162142e+01 1.14088375e+01 1.14013471e+01 1.13937443e+01 1.13860308e+01 + 1.13782080e+01 1.13702775e+01 1.13622406e+01 1.13540989e+01 1.13458538e+01 + 1.13375068e+01 1.13290592e+01 1.13205127e+01 1.13118684e+01 1.13031278e+01 + 1.12942924e+01 1.12853635e+01 1.12763423e+01 1.12672304e+01 1.12580290e+01 + 1.12487394e+01 1.12393630e+01 1.12299010e+01 1.12203547e+01 1.12107255e+01 + 1.12010145e+01 1.11912231e+01 1.11813524e+01 1.11714036e+01 1.11613781e+01 + 1.11512770e+01 1.11411014e+01 1.11308526e+01 1.11205317e+01 1.11101399e+01 + 1.10996784e+01 1.10891481e+01 1.10785504e+01 1.10678862e+01 1.10571567e+01 + 1.10463630e+01 1.10355060e+01 1.10245870e+01 1.10136069e+01 1.10025668e+01 + 1.09914677e+01 1.09803106e+01 1.09690966e+01 1.09578266e+01 1.09465015e+01 + 1.09351225e+01 1.09236904e+01 1.09122062e+01 1.09006708e+01 1.08890852e+01 + 1.08774503e+01 1.08657669e+01 1.08540361e+01 1.08422586e+01 1.08304354e+01 + 1.08185673e+01 1.08066552e+01 1.07947000e+01 1.07827024e+01 1.07706633e+01 + 1.07585835e+01 1.07464638e+01 1.07343051e+01 1.07221081e+01 1.07098735e+01 + 1.06976023e+01 1.06852951e+01 1.06729526e+01 1.06605757e+01 1.06481651e+01 + 1.06357214e+01 1.06232455e+01 1.06107379e+01 1.05981995e+01 1.05856309e+01 + 1.05730327e+01 1.05604057e+01 1.05477506e+01 1.05350679e+01 1.05223583e+01 + 1.05096226e+01 1.04968612e+01 1.04840748e+01 1.04712641e+01 1.04584297e+01 + 1.04455721e+01 1.04326919e+01 1.04197898e+01 1.04068663e+01 1.03939220e+01 + 1.03809575e+01 1.03679732e+01 1.03549698e+01 1.03419478e+01 1.03289077e+01 + 1.03158501e+01 1.03027754e+01 1.02896843e+01 1.02765771e+01 1.02634544e+01 + 1.02503168e+01 1.02371646e+01 1.02239984e+01 1.02108186e+01 1.01976257e+01 + 1.01844202e+01 1.01712025e+01 1.01579730e+01 1.01447323e+01 1.01314808e+01 + 1.01182188e+01 1.01049468e+01 1.00916652e+01 1.00783745e+01 1.00650751e+01 + 1.00517673e+01 1.00384515e+01 1.00251282e+01 1.00117977e+01 9.99846039e+00 + 9.98511668e+00 9.97176692e+00 9.95841148e+00 9.94505072e+00 9.93168499e+00 + 9.91831464e+00 9.90494002e+00 9.89156146e+00 9.87817931e+00 9.86479389e+00 + 9.85140552e+00 9.83801454e+00 9.82462125e+00 9.81122596e+00 9.79782899e+00 + 9.78443064e+00 9.77103121e+00 9.75763099e+00 9.74423026e+00 9.73082933e+00 + 9.71742846e+00 9.70402794e+00 9.69062803e+00 9.67722902e+00 9.66383116e+00 + 9.65043471e+00 9.63703994e+00 9.62364710e+00 9.61025643e+00 9.59686819e+00 + 9.58348261e+00 9.57009994e+00 9.55672041e+00 9.54334426e+00 9.52997170e+00 + 9.51660298e+00 9.50323830e+00 9.48987788e+00 9.47652195e+00 9.46317071e+00 + 9.44982438e+00 9.43648315e+00 9.42314723e+00 9.40981681e+00 9.39649211e+00 + 9.38317329e+00 9.36986057e+00 9.35655411e+00 9.34325412e+00 9.32996076e+00 + 9.31667422e+00 9.30339467e+00 9.29012228e+00 9.27685723e+00 9.26359969e+00 + 9.25034980e+00 9.23710775e+00 9.22387369e+00 9.21064777e+00 9.19743015e+00 + 9.18422098e+00 9.17102040e+00 9.15782858e+00 9.14464565e+00 9.13147175e+00 + 9.11830703e+00 9.10515161e+00 9.09200565e+00 9.07886926e+00 9.06574258e+00 + 9.05262574e+00 9.03951887e+00 9.02642209e+00 9.01333552e+00 9.00025928e+00 + 8.98719349e+00 8.97413827e+00 8.96109373e+00 8.94805998e+00 8.93503713e+00 + 8.92202530e+00 8.90902459e+00 8.89603510e+00 8.88305693e+00 8.87009019e+00 + 8.85713498e+00 8.84419139e+00 8.83125952e+00 8.81833946e+00 8.80543131e+00 + 8.79253516e+00 8.77965109e+00 8.76677920e+00 8.75391957e+00 8.74107228e+00 + 8.72823741e+00 8.71541505e+00 8.70260529e+00 8.68980818e+00 8.67702382e+00 + 8.66425228e+00 8.65149363e+00 8.63874794e+00 8.62601529e+00 8.61329575e+00 + 8.60058938e+00 8.58789625e+00 8.57521642e+00 8.56254997e+00 8.54989695e+00 + 8.53725743e+00 8.52463147e+00 8.51201913e+00 8.49942046e+00 8.48683552e+00 + 8.47426437e+00 8.46170706e+00 8.44916365e+00 8.43663420e+00 8.42411874e+00 + 8.41161733e+00 8.39913003e+00 8.38665687e+00 8.37419791e+00 8.36175319e+00 + 8.34932276e+00 8.33690667e+00 8.32450494e+00 8.31211764e+00 8.29974479e+00 + 8.28738645e+00 8.27504264e+00 8.26271341e+00 8.25039879e+00 8.23809882e+00 + 8.22581354e+00 8.21354298e+00 8.20128718e+00 8.18904617e+00 8.17681998e+00 + 8.16460864e+00 8.15241219e+00 8.14023065e+00 8.12806405e+00 8.11591243e+00 + 8.10377580e+00 8.09165420e+00 8.07954766e+00 8.06745619e+00 8.05537982e+00 + 8.04331859e+00 8.03127250e+00 8.01924158e+00 8.00722586e+00 7.99522536e+00 + 7.98324009e+00 7.97127008e+00 7.95931535e+00 7.94737591e+00 7.93545178e+00 + 7.92354299e+00 7.91164954e+00 7.89977146e+00 7.88790876e+00 7.87606145e+00 + 7.86422956e+00 7.85241308e+00 7.84061205e+00 7.82882646e+00 7.81705634e+00 + 7.80530170e+00 7.79356254e+00 7.78183887e+00 7.77013072e+00 7.75843808e+00 + 7.74676097e+00 7.73509939e+00 7.72345336e+00 7.71182288e+00 7.70020796e+00 + 7.68860861e+00 7.67702484e+00 7.66545664e+00 7.65390403e+00 7.64236701e+00 + 7.63084558e+00 7.61933976e+00 7.60784954e+00 7.59637493e+00 7.58491593e+00 + 7.57347255e+00 7.56204478e+00 7.55063263e+00 7.53923611e+00 7.52785521e+00 + 7.51648993e+00 7.50514027e+00 7.49380625e+00 7.48248784e+00 7.47118506e+00 + 7.45989791e+00 7.44862638e+00 7.43737047e+00 7.42613019e+00 7.41490552e+00 + 7.40369647e+00 7.39250303e+00 7.38132520e+00 7.37016298e+00 7.35901637e+00 + 7.34788536e+00 7.33676995e+00 7.32567012e+00 7.31458589e+00 7.30351724e+00 + 7.29246417e+00 7.28142668e+00 7.27040475e+00 7.25939839e+00 7.24840758e+00 + 7.23743232e+00 7.22647260e+00 7.21552843e+00 7.20459978e+00 7.19368666e+00 + 7.18278905e+00 7.17190695e+00 7.16104035e+00 7.15018924e+00 7.13935361e+00 + 7.12853346e+00 7.11772878e+00 7.10693956e+00 7.09616578e+00 7.08540745e+00 + 7.07466454e+00 7.06393706e+00 7.05322498e+00 7.04252831e+00 7.03184703e+00 + 7.02118113e+00 7.01053060e+00 6.99989543e+00 6.98927560e+00 6.97867112e+00 + 6.96808196e+00 6.95750811e+00 6.94694957e+00 6.93640632e+00 6.92587836e+00 + 6.91536566e+00 6.90486821e+00 6.89438602e+00 6.88391905e+00 6.87346730e+00 + 6.86303076e+00 6.85260942e+00 6.84220325e+00 6.83181225e+00 6.82143641e+00 + 6.81107571e+00 6.80073014e+00 6.79039969e+00 6.78008434e+00 6.76978407e+00 + 6.75949888e+00 6.74922875e+00 6.73897367e+00 6.72873362e+00 6.71850858e+00 + 6.70829855e+00 6.69810351e+00 6.68792344e+00 6.67775834e+00 6.66760818e+00 + 6.65747295e+00 6.64735264e+00 6.63724722e+00 6.62715669e+00 6.61708104e+00 + 6.60702024e+00 6.59697427e+00 6.58694314e+00 6.57692681e+00 6.56692528e+00 + 6.55693852e+00 6.54696653e+00 6.53700928e+00 6.52706676e+00 6.51713896e+00 + 6.50722585e+00 6.49732743e+00 6.48744368e+00 6.47757458e+00 6.46772011e+00 + 6.45788025e+00 6.44805500e+00 6.43824434e+00 6.42844824e+00 6.41866669e+00 + 6.40889968e+00 6.39914719e+00 6.38940920e+00 6.37968570e+00 6.36997666e+00 + 6.36028208e+00 6.35060193e+00 6.34093620e+00 6.33128487e+00 6.32164792e+00 + 6.31202534e+00 6.30241711e+00 6.29282321e+00 6.28324363e+00 6.27367834e+00 + 6.26412734e+00 6.25459059e+00 6.24506810e+00 6.23555983e+00 6.22606577e+00 + 6.21658591e+00 6.20712022e+00 6.19766869e+00 6.18823131e+00 6.17880804e+00 + 6.16939888e+00 6.16000381e+00 6.15062281e+00 6.14125587e+00 6.13190295e+00 + 6.12256406e+00 6.11323916e+00 6.10392825e+00 6.09463130e+00 6.08534829e+00 + 6.07607921e+00 6.06682405e+00 6.05758277e+00 6.04835537e+00 6.03914183e+00 + 6.02994212e+00 6.02075624e+00 6.01158416e+00 6.00242586e+00 5.99328133e+00 + 5.98415054e+00 5.97503349e+00 5.96593015e+00 5.95684050e+00 5.94776453e+00 + 5.93870221e+00 5.92965354e+00 5.92061849e+00 5.91159704e+00 5.90258917e+00 + 5.89359488e+00 5.88461413e+00 5.87564691e+00 5.86669320e+00 5.85775299e+00 + 5.84882626e+00 5.83991298e+00 5.83101314e+00 5.82212673e+00 5.81325371e+00 + 5.80439408e+00 5.79554782e+00 5.78671491e+00 5.77789533e+00 5.76908906e+00 + 5.76029608e+00 5.75151638e+00 5.74274993e+00 5.73399672e+00 5.72525674e+00 + 5.71652996e+00 5.70781636e+00 5.69911593e+00 5.69042864e+00 5.68175449e+00 + 5.67309344e+00 5.66444549e+00 5.65581061e+00 5.64718879e+00 5.63858001e+00 + 5.62998425e+00 5.62140149e+00 5.61283171e+00 5.60427490e+00 5.59573104e+00 + 5.58720011e+00 5.57868208e+00 5.57017695e+00 5.56168469e+00 5.55320529e+00 + 5.54473873e+00 5.53628499e+00 5.52784405e+00 5.51941589e+00 5.51100050e+00 + 5.50259785e+00 5.49420794e+00 5.48583073e+00 5.47746622e+00 5.46911438e+00 + 5.46077521e+00 5.45244866e+00 5.44413474e+00 5.43583343e+00 5.42754469e+00 + 5.41926853e+00 5.41100491e+00 5.40275382e+00 5.39451524e+00 5.38628916e+00 + 5.37807556e+00 5.36987441e+00 5.36168571e+00 5.35350943e+00 5.34534555e+00 + 5.33719406e+00 5.32905493e+00 5.32092816e+00 5.31281372e+00 5.30471160e+00 + 5.29662178e+00 5.28854423e+00 5.28047895e+00 5.27242591e+00 5.26438509e+00 + 5.25635649e+00 5.24834007e+00 5.24033583e+00 5.23234374e+00 5.22436379e+00 + 5.21639596e+00 5.20844023e+00 5.20049659e+00 5.19256501e+00 5.18464548e+00 + 5.17673799e+00 5.16884250e+00 5.16095902e+00 5.15308751e+00 5.14522796e+00 + 5.13738036e+00 5.12954468e+00 5.12172091e+00 5.11390904e+00 5.10610903e+00 + 5.09832088e+00 5.09054457e+00 5.08278008e+00 5.07502740e+00 5.06728650e+00 + 5.05955737e+00 5.05184000e+00 5.04413435e+00 5.03644043e+00 5.02875820e+00 + 5.02108766e+00 5.01342878e+00 5.00578155e+00 4.99814595e+00 4.99052196e+00 + 4.98290957e+00 4.97530876e+00 4.96771951e+00 4.96014181e+00 4.95257563e+00 + 4.94502096e+00 4.93747779e+00 4.92994610e+00 4.92242586e+00 4.91491707e+00 + 4.90741970e+00 4.89993374e+00 4.89245917e+00 4.88499598e+00 4.87754414e+00 + 4.87010365e+00 4.86267447e+00 4.85525661e+00 4.84785004e+00 4.84045474e+00 + 4.83307069e+00 4.82569789e+00 4.81833631e+00 4.81098593e+00 4.80364675e+00 + 4.79631873e+00 4.78900188e+00 4.78169616e+00 4.77440157e+00 4.76711808e+00 + 4.75984568e+00 4.75258436e+00 4.74533409e+00 4.73809486e+00 4.73086666e+00 + 4.72364946e+00 4.71644325e+00 4.70924802e+00 4.70206374e+00 4.69489041e+00 + 4.68772800e+00 4.68057649e+00 4.67343589e+00 4.66630615e+00 4.65918728e+00 + 4.65207925e+00 4.64498204e+00 4.63789565e+00 4.63082005e+00 4.62375523e+00 + 4.61670117e+00 4.60965786e+00 4.60262527e+00 4.59560340e+00 4.58859223e+00 + 4.58159174e+00 4.57460191e+00 4.56762274e+00 4.56065419e+00 4.55369627e+00 + 4.54674894e+00 4.53981220e+00 4.53288603e+00 4.52597042e+00 4.51906534e+00 + 4.51217078e+00 4.50528673e+00 4.49841317e+00 4.49155008e+00 4.48469745e+00 + 4.47785527e+00 4.47102351e+00 4.46420216e+00 4.45739121e+00 4.45059063e+00 + 4.44380043e+00 4.43702057e+00 4.43025104e+00 4.42349183e+00 4.41674292e+00 + 4.41000430e+00 4.40327595e+00 4.39655786e+00 4.38985000e+00 4.38315237e+00 + 4.37646495e+00 4.36978772e+00 4.36312067e+00 4.35646378e+00 4.34981100e+00 + 4.34313007e+00 4.33641641e+00 4.32967019e+00 4.32289160e+00 4.31608082e+00 + 4.30923804e+00 4.30236343e+00 4.29545719e+00 4.28851949e+00 4.28155052e+00 + 4.27455047e+00 4.26751952e+00 4.26045786e+00 4.25336567e+00 4.24624314e+00 + 4.23909045e+00 4.23190779e+00 4.22469535e+00 4.21745331e+00 4.21018186e+00 + 4.20288119e+00 4.19555148e+00 4.18819292e+00 4.18080570e+00 4.17339000e+00 + 4.16594602e+00 4.15847393e+00 4.15097394e+00 4.14344622e+00 4.13589097e+00 + 4.12830837e+00 4.12069861e+00 4.11306189e+00 4.10539838e+00 4.09770828e+00 + 4.08999178e+00 4.08224906e+00 4.07448032e+00 4.06668575e+00 4.05886552e+00 + 4.05101984e+00 4.04314890e+00 4.03525287e+00 4.02733196e+00 4.01938635e+00 + 4.01141623e+00 4.00342179e+00 3.99540322e+00 3.98736072e+00 3.97929446e+00 + 3.97120464e+00 3.96309146e+00 3.95495510e+00 3.94679575e+00 3.93861359e+00 + 3.93040883e+00 3.92218166e+00 3.91393225e+00 3.90566080e+00 3.89736751e+00 + 3.88905256e+00 3.88071614e+00 3.87235844e+00 3.86397966e+00 3.85557998e+00 + 3.84715959e+00 3.83871868e+00 3.83025744e+00 3.82177607e+00 3.81327475e+00 + 3.80475367e+00 3.79621303e+00 3.78765300e+00 3.77907379e+00 3.77047558e+00 + 3.76185855e+00 3.75322291e+00 3.74456884e+00 3.73589653e+00 3.72720616e+00 + 3.71849793e+00 3.70977203e+00 3.70102864e+00 3.69226796e+00 3.68349016e+00 + 3.67469545e+00 3.66588401e+00 3.65705603e+00 3.64821169e+00 3.63935119e+00 + 3.63047471e+00 3.62158245e+00 3.61267458e+00 3.60375129e+00 3.59481278e+00 + 3.58585923e+00 3.57689083e+00 3.56790776e+00 3.55891022e+00 3.54989838e+00 + 3.54087244e+00 3.53183258e+00 3.52277899e+00 3.51371185e+00 3.50463135e+00 + 3.49553767e+00 3.48643101e+00 3.47731154e+00 3.46817945e+00 3.45903493e+00 + 3.44987815e+00 3.44070932e+00 3.43152860e+00 3.42233618e+00 3.41313225e+00 + 3.40391699e+00 3.39469059e+00 3.38545322e+00 3.37620507e+00 3.36694632e+00 + 3.35767716e+00 3.34839776e+00 3.33910832e+00 3.32980900e+00 3.32050000e+00 + 3.31118149e+00 3.30185365e+00 3.29251667e+00 3.28317072e+00 3.27381599e+00 + 3.26445265e+00 3.25508089e+00 3.24570088e+00 3.23631281e+00 3.22691684e+00 + 3.21751317e+00 3.20810196e+00 3.19868340e+00 3.18925766e+00 3.17982493e+00 + 3.17038537e+00 3.16093916e+00 3.15148649e+00 3.14202752e+00 3.13256244e+00 + 3.12309141e+00 3.11361462e+00 3.10413223e+00 3.09464443e+00 3.08515138e+00 + 3.07565326e+00 3.06615024e+00 3.05664250e+00 3.04713021e+00 3.03761354e+00 + 3.02809266e+00 3.01856774e+00 3.00903897e+00 2.99950650e+00 2.98997050e+00 + 2.98043116e+00 2.97088863e+00 2.96134309e+00 2.95179470e+00 2.94224364e+00 + 2.93269008e+00 2.92313417e+00 2.91357609e+00 2.90401601e+00 2.89445409e+00 + 2.88489050e+00 2.87532541e+00 2.86575898e+00 2.85619137e+00 2.84662275e+00 + 2.83705329e+00 2.82748315e+00 2.81791249e+00 2.80834148e+00 2.79877027e+00 + 2.78919904e+00 2.77962794e+00 2.77005714e+00 2.76048679e+00 2.75091706e+00 + 2.74134810e+00 2.73178009e+00 2.72221316e+00 2.71264750e+00 2.70308325e+00 + 2.69352056e+00 2.68395961e+00 2.67440055e+00 2.66484352e+00 2.65528870e+00 + 2.64573623e+00 2.63618628e+00 2.62663899e+00 2.61709452e+00 2.60755302e+00 + 2.59801465e+00 2.58847956e+00 2.57894791e+00 2.56941984e+00 2.55989551e+00 + 2.55037507e+00 2.54085867e+00 2.53134646e+00 2.52183858e+00 2.51233520e+00 + 2.50283645e+00 2.49334249e+00 2.48385347e+00 2.47436952e+00 2.46489080e+00 + 2.45541746e+00 2.44594964e+00 2.43648748e+00 2.42703114e+00 2.41758075e+00 + 2.40813646e+00 2.39869841e+00 2.38926675e+00 2.37984161e+00 2.37042314e+00 + 2.36101149e+00 2.35160679e+00 2.34220918e+00 2.33281880e+00 2.32343580e+00 + 2.31406030e+00 2.30469245e+00 2.29533239e+00 2.28598026e+00 2.27663618e+00 + 2.26730030e+00 2.25797276e+00 2.24865368e+00 2.23934320e+00 2.23004146e+00 + 2.22074859e+00 2.21146472e+00 2.20218999e+00 2.19292452e+00 2.18366846e+00 + 2.17442192e+00 2.16518504e+00 2.15595795e+00 2.14674078e+00 2.13753366e+00 + 2.12833672e+00 2.11915008e+00 2.10997386e+00 2.10080821e+00 2.09165324e+00 + 2.08250907e+00 2.07337585e+00 2.06425367e+00 2.05514268e+00 2.04604299e+00 + 2.03695473e+00 2.02787802e+00 2.01881298e+00 2.00975974e+00 2.00071840e+00 + 1.99168910e+00 1.98267194e+00 1.97366706e+00 1.96467456e+00 1.95569457e+00 + 1.94672720e+00 1.93777257e+00 1.92883080e+00 1.91990200e+00 1.91098628e+00 + 1.90208375e+00 1.89319455e+00 1.88431876e+00 1.87545652e+00 1.86660792e+00 + 1.85777308e+00 1.84895212e+00 1.84014514e+00 1.83135225e+00 1.82257356e+00 + 1.81380917e+00 1.80505921e+00 1.79632376e+00 1.78760295e+00 1.77889687e+00 + 1.77020564e+00 1.76152935e+00 1.75286811e+00 1.74422202e+00 1.73559119e+00 + 1.72697573e+00 1.71837572e+00 1.70979128e+00 1.70122250e+00 1.69266948e+00 + 1.68413233e+00 1.67561114e+00 1.66710601e+00 1.65861704e+00 1.65014433e+00 + 1.64168796e+00 1.63324805e+00 1.62482468e+00 1.61641795e+00 1.60802795e+00 + 1.59965478e+00 1.59129852e+00 1.58295928e+00 1.57463714e+00 1.56633220e+00 + 1.55804454e+00 1.54977426e+00 1.54152144e+00 1.53328618e+00 1.52506856e+00 + 1.51686867e+00 1.50868660e+00 1.50052243e+00 1.49237625e+00 1.48424814e+00 + 1.47613819e+00 1.46804649e+00 1.45997311e+00 1.45191814e+00 1.44388167e+00 + 1.43586376e+00 1.42786452e+00 1.41988400e+00 1.41192230e+00 1.40397950e+00 + 1.39605567e+00 1.38815089e+00 1.38026524e+00 1.37239879e+00 1.36455162e+00 + 1.35672382e+00 1.34891544e+00 1.34112657e+00 1.33335728e+00 1.32560765e+00 + 1.31787774e+00 1.31016763e+00 1.30247739e+00 1.29480709e+00 1.28715681e+00 + 1.27952660e+00 1.27191655e+00 1.26432671e+00 1.25675716e+00 1.24920796e+00 + 1.24167918e+00 1.23417089e+00 1.22668316e+00 1.21921604e+00 1.21176960e+00 + 1.20434390e+00 1.19693902e+00 1.18955500e+00 1.18219192e+00 1.17484983e+00 + 1.16752879e+00 1.16022887e+00 1.15295013e+00 1.14569262e+00 1.13845640e+00 + 1.13124153e+00 1.12404806e+00 1.11687606e+00 1.10972558e+00 1.10259667e+00 + 1.09548940e+00 1.08840380e+00 1.08133995e+00 1.07429788e+00 1.06727766e+00 + 1.06027933e+00 1.05330295e+00 1.04634857e+00 1.03941623e+00 1.03250599e+00 + 1.02561789e+00 1.01875199e+00 1.01190833e+00 1.00508696e+00 9.98287921e-01 + 9.91511267e-01 9.84757040e-01 9.78025284e-01 9.71316045e-01 9.64629366e-01 + 9.57965290e-01 9.51323860e-01 9.44705117e-01 9.38109103e-01 9.31535860e-01 + 9.24985426e-01 9.18457843e-01 9.11953148e-01 9.05471382e-01 8.99012580e-01 + 8.92576782e-01 8.86164024e-01 8.79774342e-01 8.73407772e-01 8.67064349e-01 + 8.60744107e-01 8.54447081e-01 8.48173305e-01 8.41922810e-01 8.35695630e-01 + 8.29491795e-01 8.23311338e-01 8.17154289e-01 8.11020678e-01 8.04910535e-01 + 7.98823888e-01 7.92760766e-01 7.86721197e-01 7.80705208e-01 7.74712826e-01 + 7.68744078e-01 7.62798988e-01 7.56877582e-01 7.50979884e-01 7.45105919e-01 + 7.39255710e-01 7.33429280e-01 7.27626651e-01 7.21847845e-01 7.16092884e-01 + 7.10361787e-01 7.04654576e-01 6.98971271e-01 6.93311889e-01 6.87676450e-01 + 6.82064972e-01 6.76477473e-01 6.70913968e-01 6.65374476e-01 6.59859012e-01 + 6.54367590e-01 6.48900227e-01 6.43456936e-01 6.38037732e-01 6.32642627e-01 + 6.27271635e-01 6.21924767e-01 6.16602035e-01 6.11303451e-01 6.06029026e-01 + 6.00778769e-01 5.95552690e-01 5.90350798e-01 5.85173102e-01 5.80019611e-01 + 5.74890331e-01 5.69785270e-01 5.64704434e-01 5.59647830e-01 5.54615462e-01 + 5.49607337e-01 5.44623459e-01 5.39663832e-01 5.34728459e-01 5.29817343e-01 + 5.24930488e-01 5.20067895e-01 5.15229565e-01 5.10415501e-01 5.05625702e-01 + 5.00860168e-01 4.96118900e-01 4.91401897e-01 4.86709156e-01 4.82040676e-01 + 4.77396456e-01 4.72776492e-01 4.68180780e-01 4.63609318e-01 4.59062100e-01 + 4.54539123e-01 4.50040381e-01 4.45565868e-01 4.41115579e-01 4.36689506e-01 + 4.32287643e-01 4.27909982e-01 4.23556515e-01 4.19227234e-01 4.14922129e-01 + 4.10641192e-01 4.06384413e-01 4.02151780e-01 3.97943285e-01 3.93758914e-01 + 3.89598658e-01 3.85462502e-01 3.81350436e-01 3.77262446e-01 3.73198519e-01 + 3.69158640e-01 3.65142795e-01 3.61150970e-01 3.57183150e-01 3.53239318e-01 + 3.49319459e-01 3.45423556e-01 3.41551592e-01 3.37703549e-01 3.33879411e-01 + 3.30079158e-01 3.26302772e-01 3.22550234e-01 3.18821524e-01 3.15116623e-01 + 3.11435510e-01 3.07778164e-01 3.04144564e-01 3.00534688e-01 2.96948515e-01 + 2.93386021e-01 2.89847185e-01 2.86331983e-01 2.82840390e-01 2.79372384e-01 + 2.75927939e-01 2.72507030e-01 2.69109633e-01 2.65735722e-01 2.62385270e-01 + 2.59058252e-01 2.55754640e-01 2.52474406e-01 2.49217524e-01 2.45983966e-01 + 2.42773702e-01 2.39586704e-01 2.36422943e-01 2.33282390e-01 2.30165013e-01 + 2.27070784e-01 2.23999671e-01 2.20951643e-01 2.17926669e-01 2.14924717e-01 + 2.11945755e-01 2.08989749e-01 2.06056668e-01 2.03146478e-01 2.00259146e-01 + 1.97394636e-01 1.94552916e-01 1.91733949e-01 1.88937702e-01 1.86164139e-01 + 1.83413223e-01 1.80684919e-01 1.77979190e-01 1.75296000e-01 1.72635311e-01 + 1.69997086e-01 1.67381287e-01 1.64787875e-01 1.62216813e-01 1.59668060e-01 + 1.57141579e-01 1.54637330e-01 1.52155272e-01 1.49695366e-01 1.47257571e-01 + 1.44841846e-01 1.42448150e-01 1.40076442e-01 1.37726679e-01 1.35398821e-01 + 1.33092823e-01 1.30808644e-01 1.28546240e-01 1.26305568e-01 1.24086585e-01 + 1.21889246e-01 1.19713507e-01 1.17559324e-01 1.15426652e-01 1.13315445e-01 + 1.11225658e-01 1.09157245e-01 1.07110161e-01 1.05084359e-01 1.03079791e-01 + 1.01096412e-01 9.91341744e-02 9.71930301e-02 9.52729316e-02 9.33738308e-02 + 9.14956795e-02 8.96384290e-02 8.78020304e-02 8.59864346e-02 8.41915922e-02 + 8.24174533e-02 8.06639682e-02 7.89310865e-02 7.72187578e-02 7.55269312e-02 + 7.38555559e-02 7.22045805e-02 7.05739536e-02 6.89636232e-02 6.73735375e-02 + 6.58036440e-02 6.42538904e-02 6.27242238e-02 6.12145912e-02 5.97249393e-02 + 5.82552147e-02 5.68053636e-02 5.53753320e-02 5.39650657e-02 5.25745103e-02 + 5.12036111e-02 4.98523131e-02 4.85205613e-02 4.72083003e-02 4.59154745e-02 + 4.46420281e-02 4.33879051e-02 4.21530492e-02 4.09374040e-02 3.97409128e-02 + 3.85635187e-02 3.74051646e-02 3.62657932e-02 3.51453469e-02 3.40437682e-02 + 3.29609990e-02 3.18969812e-02 3.08516564e-02 2.98249663e-02 2.88168520e-02 + 2.78272546e-02 2.68561150e-02 2.59033739e-02 2.49689719e-02 2.40528492e-02 + 2.31549461e-02 2.22752024e-02 2.14135579e-02 2.05699522e-02 1.97443248e-02 + 1.89366149e-02 1.81467615e-02 1.73747036e-02 1.66203799e-02 1.58837289e-02 + 1.51646890e-02 1.44631985e-02 1.37791954e-02 1.31126175e-02 1.24634028e-02 + 1.18314886e-02 1.12168125e-02 1.06193117e-02 1.00389234e-02 9.47558447e-03 + 8.92923178e-03 8.39980199e-03 7.88723163e-03 7.39145708e-03 6.91241458e-03 + 6.45004024e-03 6.00427002e-03 5.57503974e-03 5.16228511e-03 4.76594168e-03 + 4.38594487e-03 4.02222999e-03 3.67473222e-03 3.34338659e-03 3.02812803e-03 + 2.72889134e-03 2.44561121e-03 2.17822219e-03 1.92665872e-03 1.69085514e-03 + 1.47074567e-03 1.26626440e-03 1.07734534e-03 9.03922361e-04 7.45929254e-04 + 6.03299692e-04 4.75967247e-04 3.63865391e-04 2.66927494e-04 1.85086832e-04 + 1.18276582e-04 6.64298274e-05 2.94795605e-05 7.35868100e-06 0.00000000e+00 + 1.26736931e-02 1.27096112e-02 1.28489084e-02 1.29897322e-02 1.31320992e-02 + 1.32760265e-02 1.34215312e-02 1.35686304e-02 1.37173417e-02 1.38676827e-02 + 1.40196713e-02 1.41733256e-02 1.43286638e-02 1.44857043e-02 1.46444659e-02 + 1.48049672e-02 1.49672275e-02 1.51312660e-02 1.52971022e-02 1.54647558e-02 + 1.56342466e-02 1.58055949e-02 1.59788209e-02 1.61539453e-02 1.63309888e-02 + 1.65099724e-02 1.66909175e-02 1.68738455e-02 1.70587782e-02 1.72457374e-02 + 1.74347455e-02 1.76258248e-02 1.78189981e-02 1.80142882e-02 1.82117184e-02 + 1.84113122e-02 1.86130931e-02 1.88170853e-02 1.90233128e-02 1.92318003e-02 + 1.94425724e-02 1.96556543e-02 1.98710711e-02 2.00888485e-02 2.03090123e-02 + 2.05315887e-02 2.07566041e-02 2.09840853e-02 2.12140592e-02 2.14465531e-02 + 2.16815947e-02 2.19192118e-02 2.21594327e-02 2.24022859e-02 2.26478003e-02 + 2.28960049e-02 2.31469293e-02 2.34006032e-02 2.36570568e-02 2.39163205e-02 + 2.41784251e-02 2.44434017e-02 2.47112818e-02 2.49820971e-02 2.52558799e-02 + 2.55326626e-02 2.58124781e-02 2.60953596e-02 2.63813406e-02 2.66704552e-02 + 2.69627377e-02 2.72582227e-02 2.75569454e-02 2.78589411e-02 2.81642458e-02 + 2.84728956e-02 2.87849273e-02 2.91003778e-02 2.94192846e-02 2.97416856e-02 + 3.00676189e-02 3.03971234e-02 3.07302381e-02 3.10670025e-02 3.14074566e-02 + 3.17516409e-02 3.20995961e-02 3.24513636e-02 3.28069851e-02 3.31665028e-02 + 3.35299594e-02 3.38973980e-02 3.42688622e-02 3.46443961e-02 3.50240442e-02 + 3.54078516e-02 3.57958639e-02 3.61881271e-02 3.65846877e-02 3.69855928e-02 + 3.73908900e-02 3.78006273e-02 3.82148533e-02 3.86336172e-02 3.90569687e-02 + 3.94849580e-02 3.99176359e-02 4.03550537e-02 4.07972632e-02 4.12443171e-02 + 4.16962682e-02 4.21531702e-02 4.26150773e-02 4.30820442e-02 4.35541265e-02 + 4.40313800e-02 4.45138613e-02 4.50016278e-02 4.54947372e-02 4.59932480e-02 + 4.64972193e-02 4.70067109e-02 4.75217833e-02 4.80424974e-02 4.85689151e-02 + 4.91010988e-02 4.96391115e-02 5.01830171e-02 5.07328801e-02 5.12887655e-02 + 5.18507395e-02 5.24188684e-02 5.29932198e-02 5.35738618e-02 5.41608630e-02 + 5.47542932e-02 5.53542226e-02 5.59607224e-02 5.65738645e-02 5.71937215e-02 + 5.78203669e-02 5.84538749e-02 5.90943207e-02 5.97417802e-02 6.03963299e-02 + 6.10580476e-02 6.17270117e-02 6.24033013e-02 6.30869966e-02 6.37781787e-02 + 6.44769294e-02 6.51833314e-02 6.58974685e-02 6.66194253e-02 6.73492873e-02 + 6.80871409e-02 6.88330735e-02 6.95871735e-02 7.03495302e-02 7.11202339e-02 + 7.18993757e-02 7.26870481e-02 7.34833442e-02 7.42883584e-02 7.51021860e-02 + 7.59249232e-02 7.67566676e-02 7.75975175e-02 7.84475725e-02 7.93069333e-02 + 8.01757015e-02 8.10539799e-02 8.19418726e-02 8.28394845e-02 8.37469219e-02 + 8.46642922e-02 8.55917039e-02 8.65292668e-02 8.74770917e-02 8.84352909e-02 + 8.94039775e-02 9.03832663e-02 9.13732730e-02 9.23741148e-02 9.33859100e-02 + 9.44087782e-02 9.54428404e-02 9.64882189e-02 9.75450373e-02 9.86134204e-02 + 9.96934947e-02 1.00785388e-01 1.01889229e-01 1.03005148e-01 1.04133277e-01 + 1.05273750e-01 1.06426701e-01 1.07592267e-01 1.08770585e-01 1.09961794e-01 + 1.11166035e-01 1.12383451e-01 1.13614184e-01 1.14858382e-01 1.16116189e-01 + 1.17387756e-01 1.18673231e-01 1.19972768e-01 1.21286518e-01 1.22614638e-01 + 1.23957284e-01 1.25314614e-01 1.26686789e-01 1.28073971e-01 1.29476322e-01 + 1.30894010e-01 1.32327200e-01 1.33776062e-01 1.35240767e-01 1.36721487e-01 + 1.38218397e-01 1.39731674e-01 1.41261496e-01 1.42808043e-01 1.44371497e-01 + 1.45952044e-01 1.47549868e-01 1.49165159e-01 1.50798106e-01 1.52448902e-01 + 1.54117741e-01 1.55804820e-01 1.57510337e-01 1.59234494e-01 1.60977493e-01 + 1.62739539e-01 1.64520840e-01 1.66321605e-01 1.68142046e-01 1.69982378e-01 + 1.71842816e-01 1.73723581e-01 1.75624891e-01 1.77546972e-01 1.79490050e-01 + 1.81454352e-01 1.83440109e-01 1.85447555e-01 1.87476926e-01 1.89528460e-01 + 1.91602397e-01 1.93698982e-01 1.95818461e-01 1.97961082e-01 2.00127097e-01 + 2.02316760e-01 2.04530329e-01 2.06768061e-01 2.09030221e-01 2.11317074e-01 + 2.13628887e-01 2.15965931e-01 2.18328481e-01 2.20716813e-01 2.23131207e-01 + 2.25571946e-01 2.28039316e-01 2.30533605e-01 2.33055107e-01 2.35604114e-01 + 2.38180927e-01 2.40785847e-01 2.43419177e-01 2.46081227e-01 2.48772307e-01 + 2.51492732e-01 2.54242820e-01 2.57022892e-01 2.59833273e-01 2.62674291e-01 + 2.65546278e-01 2.68449569e-01 2.71384502e-01 2.74351421e-01 2.77350672e-01 + 2.80382603e-01 2.83447570e-01 2.86545927e-01 2.89678038e-01 2.92844266e-01 + 2.96044981e-01 2.99280555e-01 3.02551364e-01 3.05857790e-01 3.09200216e-01 + 3.12579032e-01 3.15994631e-01 3.19447408e-01 3.22937766e-01 3.26466110e-01 + 3.30032849e-01 3.33638399e-01 3.37283176e-01 3.40967603e-01 3.44692109e-01 + 3.48457125e-01 3.52263087e-01 3.56110435e-01 3.59999617e-01 3.63931081e-01 + 3.67905283e-01 3.71922683e-01 3.75983744e-01 3.80088937e-01 3.84238736e-01 + 3.88433620e-01 3.92674074e-01 3.96960587e-01 4.01293653e-01 4.05673773e-01 + 4.10101451e-01 4.14577197e-01 4.19101527e-01 4.23674962e-01 4.28298028e-01 + 4.32971257e-01 4.37695186e-01 4.42470358e-01 4.47297322e-01 4.52176632e-01 + 4.57108848e-01 4.62094535e-01 4.67134266e-01 4.72228618e-01 4.77378174e-01 + 4.82583524e-01 4.87845264e-01 4.93163995e-01 4.98540325e-01 5.03974869e-01 + 5.09468247e-01 5.15021086e-01 5.20634020e-01 5.26307687e-01 5.32042736e-01 + 5.37839818e-01 5.43699593e-01 5.49622728e-01 5.55609896e-01 5.61661777e-01 + 5.67779058e-01 5.73962433e-01 5.80212603e-01 5.86530276e-01 5.92916168e-01 + 5.99371001e-01 6.05895505e-01 6.12490417e-01 6.19156483e-01 6.25894453e-01 + 6.32705088e-01 6.39589156e-01 6.46547431e-01 6.53580697e-01 6.60689744e-01 + 6.67875370e-01 6.75138383e-01 6.82479597e-01 6.89899834e-01 6.97399927e-01 + 7.04980713e-01 7.12643041e-01 7.20387766e-01 7.28215753e-01 7.36127875e-01 + 7.44125013e-01 7.52208057e-01 7.60377907e-01 7.68635471e-01 7.76981664e-01 + 7.85417412e-01 7.93943651e-01 8.02561324e-01 8.11271384e-01 8.20074793e-01 + 8.28972523e-01 8.37965554e-01 8.47054878e-01 8.56241493e-01 8.65526411e-01 + 8.74910649e-01 8.84395238e-01 8.93981215e-01 9.03669630e-01 9.13461542e-01 + 9.23358019e-01 9.33360141e-01 9.43468996e-01 9.53685684e-01 9.64011316e-01 + 9.74447011e-01 9.84993900e-01 9.95653124e-01 1.00642584e+00 1.01731320e+00 + 1.02831638e+00 1.03943658e+00 1.05067498e+00 1.06203279e+00 1.07351122e+00 + 1.08511151e+00 1.09683490e+00 1.10868263e+00 1.12065598e+00 1.13275620e+00 + 1.14498460e+00 1.15734246e+00 1.16983110e+00 1.18245183e+00 1.19520599e+00 + 1.20809492e+00 1.22111997e+00 1.23428252e+00 1.24758395e+00 1.26102564e+00 + 1.27460900e+00 1.28833545e+00 1.30220641e+00 1.31622334e+00 1.33038767e+00 + 1.34470087e+00 1.35916443e+00 1.37377984e+00 1.38854860e+00 1.40347221e+00 + 1.41855223e+00 1.43379018e+00 1.44918761e+00 1.46474611e+00 1.48046724e+00 + 1.49635260e+00 1.51240380e+00 1.52862246e+00 1.54501021e+00 1.56156868e+00 + 1.57829956e+00 1.59520449e+00 1.61228518e+00 1.62954331e+00 1.64698060e+00 + 1.66459878e+00 1.68239958e+00 1.70038475e+00 1.71855606e+00 1.73691529e+00 + 1.75546422e+00 1.77420467e+00 1.79313845e+00 1.81226739e+00 1.83159334e+00 + 1.85111815e+00 1.87084370e+00 1.89077188e+00 1.91090458e+00 1.93124371e+00 + 1.95179120e+00 1.97254898e+00 1.99351902e+00 2.01470327e+00 2.03610371e+00 + 2.05772233e+00 2.07956114e+00 2.10162216e+00 2.12390741e+00 2.14641894e+00 + 2.16915881e+00 2.19212908e+00 2.21533184e+00 2.23876918e+00 2.26244321e+00 + 2.28635605e+00 2.31050983e+00 2.33490669e+00 2.35954879e+00 2.38443831e+00 + 2.40957741e+00 2.43496830e+00 2.46061318e+00 2.48651426e+00 2.51267378e+00 + 2.53909396e+00 2.56577707e+00 2.59272536e+00 2.61994110e+00 2.64742658e+00 + 2.67518408e+00 2.70321592e+00 2.73152441e+00 2.76011186e+00 2.78898061e+00 + 2.81813301e+00 2.84757141e+00 2.87729816e+00 2.90731563e+00 2.93762621e+00 + 2.96823228e+00 2.99913624e+00 3.03034047e+00 3.06184740e+00 3.09365944e+00 + 3.12577901e+00 3.15820855e+00 3.19095048e+00 3.22400724e+00 3.25738129e+00 + 3.29107508e+00 3.32509106e+00 3.35943168e+00 3.39409942e+00 3.42909675e+00 + 3.46442612e+00 3.50009002e+00 3.53609093e+00 3.57243131e+00 3.60911364e+00 + 3.64614041e+00 3.68351409e+00 3.72123716e+00 3.75931210e+00 3.79774139e+00 + 3.83652749e+00 3.87567289e+00 3.91518005e+00 3.95505143e+00 3.99528949e+00 + 4.03589670e+00 4.07687550e+00 4.11822834e+00 4.15995765e+00 4.20206587e+00 + 4.24455541e+00 4.28742868e+00 4.33068810e+00 4.37433605e+00 4.41837492e+00 + 4.46280707e+00 4.50763486e+00 4.55286063e+00 4.59848672e+00 4.64451543e+00 + 4.69094906e+00 4.73778990e+00 4.78504020e+00 4.83270221e+00 4.88077816e+00 + 4.92927024e+00 4.97818064e+00 5.02751152e+00 5.07726502e+00 5.12744323e+00 + 5.17804826e+00 5.22908216e+00 5.28054696e+00 5.33244466e+00 5.38477724e+00 + 5.43754663e+00 5.49075475e+00 5.54440348e+00 5.59849464e+00 5.65303006e+00 + 5.70801150e+00 5.76344069e+00 5.81931932e+00 5.87564905e+00 5.93243148e+00 + 5.98966818e+00 6.04736067e+00 6.10551044e+00 6.16411890e+00 6.22318745e+00 + 6.28271741e+00 6.34271006e+00 6.40316664e+00 6.46408831e+00 6.52547620e+00 + 6.58733136e+00 6.64965481e+00 6.71244749e+00 6.77571028e+00 6.83944401e+00 + 6.90364942e+00 6.96832722e+00 7.03347803e+00 7.09910240e+00 7.16520083e+00 + 7.23177372e+00 7.29882142e+00 7.36634421e+00 7.43434226e+00 7.50281569e+00 + 7.57176455e+00 7.64118877e+00 7.71108824e+00 7.78146274e+00 7.85231198e+00 + 7.92363556e+00 7.99543302e+00 8.06770379e+00 8.14044722e+00 8.21366256e+00 + 8.28734896e+00 8.36150548e+00 8.43613109e+00 8.51122466e+00 8.58678493e+00 + 8.66281057e+00 8.73930014e+00 8.81625208e+00 8.89366474e+00 8.97153635e+00 + 9.04986503e+00 9.12864881e+00 9.20788557e+00 9.28757310e+00 9.36770908e+00 + 9.44829106e+00 9.52931647e+00 9.61078263e+00 9.69268674e+00 9.77502586e+00 + 9.85779695e+00 9.94099683e+00 1.00246222e+01 1.01086696e+01 1.01931356e+01 + 1.02780164e+01 1.03633081e+01 1.04490070e+01 1.05351088e+01 1.06216095e+01 + 1.07085045e+01 1.07957896e+01 1.08834600e+01 1.09715110e+01 1.10599377e+01 + 1.11487352e+01 1.12378982e+01 1.13274214e+01 1.14172995e+01 1.15075268e+01 + 1.15980977e+01 1.16890062e+01 1.17802465e+01 1.18718123e+01 1.19636975e+01 + 1.20558955e+01 1.21483999e+01 1.22412040e+01 1.23343009e+01 1.24276837e+01 + 1.25213452e+01 1.26152784e+01 1.27094756e+01 1.28039296e+01 1.28986325e+01 + 1.29935767e+01 1.30887541e+01 1.31841569e+01 1.32797766e+01 1.33756052e+01 + 1.34716341e+01 1.35678547e+01 1.36642583e+01 1.37608362e+01 1.38575793e+01 + 1.39544786e+01 1.40515249e+01 1.41487089e+01 1.42460212e+01 1.43434522e+01 + 1.44409922e+01 1.45386315e+01 1.46363602e+01 1.47341683e+01 1.48320457e+01 + 1.49299822e+01 1.50279676e+01 1.51259915e+01 1.52240433e+01 1.53221125e+01 + 1.54201884e+01 1.55182603e+01 1.56163173e+01 1.57143486e+01 1.58123432e+01 + 1.59102900e+01 1.60081778e+01 1.61059955e+01 1.62037318e+01 1.63013755e+01 + 1.63989150e+01 1.64963391e+01 1.65936363e+01 1.66907950e+01 1.67878036e+01 + 1.68846507e+01 1.69813245e+01 1.70778134e+01 1.71741058e+01 1.72701899e+01 + 1.73660541e+01 1.74616865e+01 1.75570755e+01 1.76522094e+01 1.77470763e+01 + 1.78416647e+01 1.79359627e+01 1.80299586e+01 1.81236408e+01 1.82169975e+01 + 1.83100173e+01 1.84026883e+01 1.84949991e+01 1.85869382e+01 1.86784940e+01 + 1.87696551e+01 1.88604101e+01 1.89507477e+01 1.90406567e+01 1.91301257e+01 + 1.92191438e+01 1.93076997e+01 1.93957826e+01 1.94833816e+01 1.95704859e+01 + 1.96570846e+01 1.97431673e+01 1.98287234e+01 1.99137425e+01 1.99982142e+01 + 2.00821284e+01 2.01654751e+01 2.02482441e+01 2.03304257e+01 2.04120102e+01 + 2.04929881e+01 2.05733497e+01 2.06530859e+01 2.07321874e+01 2.08106453e+01 + 2.08884506e+01 2.09655946e+01 2.10420688e+01 2.11178646e+01 2.11929739e+01 + 2.12673885e+01 2.13411005e+01 2.14141021e+01 2.14863858e+01 2.15579440e+01 + 2.16287695e+01 2.16988552e+01 2.17681942e+01 2.18367798e+01 2.19046054e+01 + 2.19716647e+01 2.20379515e+01 2.21034598e+01 2.21681837e+01 2.22321176e+01 + 2.22952562e+01 2.23575942e+01 2.24191264e+01 2.24798482e+01 2.25397547e+01 + 2.25988416e+01 2.26571045e+01 2.27145393e+01 2.27711423e+01 2.28269096e+01 + 2.28818379e+01 2.29359237e+01 2.29891640e+01 2.30415558e+01 2.30930965e+01 + 2.31437835e+01 2.31936145e+01 2.32425873e+01 2.32907001e+01 2.33379509e+01 + 2.33843384e+01 2.34298610e+01 2.34745176e+01 2.35183072e+01 2.35612290e+01 + 2.36032823e+01 2.36444667e+01 2.36847819e+01 2.37242279e+01 2.37628046e+01 + 2.38005124e+01 2.38373518e+01 2.38733232e+01 2.39084275e+01 2.39426657e+01 + 2.39760388e+01 2.40085482e+01 2.40401952e+01 2.40709815e+01 2.41009088e+01 + 2.41299790e+01 2.41581942e+01 2.41855567e+01 2.42120687e+01 2.42377327e+01 + 2.42625515e+01 2.42865278e+01 2.43096645e+01 2.43319648e+01 2.43534317e+01 + 2.43740686e+01 2.43938790e+01 2.44128664e+01 2.44310345e+01 2.44483872e+01 + 2.44649283e+01 2.44806620e+01 2.44955922e+01 2.45097234e+01 2.45230599e+01 + 2.45356061e+01 2.45473666e+01 2.45583460e+01 2.45685492e+01 2.45779809e+01 + 2.45866460e+01 2.45945496e+01 2.46016969e+01 2.46080928e+01 2.46137428e+01 + 2.46186520e+01 2.46228260e+01 2.46262702e+01 2.46289900e+01 2.46309912e+01 + 2.46322792e+01 2.46328599e+01 2.46327391e+01 2.46319224e+01 2.46304158e+01 + 2.46282252e+01 2.46253566e+01 2.46218158e+01 2.46176091e+01 2.46127424e+01 + 2.46072218e+01 2.46010535e+01 2.45942437e+01 2.45867986e+01 2.45787243e+01 + 2.45700272e+01 2.45607134e+01 2.45507894e+01 2.45402613e+01 2.45291355e+01 + 2.45174183e+01 2.45051162e+01 2.44922353e+01 2.44787821e+01 2.44647630e+01 + 2.44501842e+01 2.44350523e+01 2.44193735e+01 2.44031542e+01 2.43864007e+01 + 2.43691195e+01 2.43513168e+01 2.43329990e+01 2.43141725e+01 2.42948435e+01 + 2.42750184e+01 2.42547034e+01 2.42339048e+01 2.42126289e+01 2.41908819e+01 + 2.41686701e+01 2.41459995e+01 2.41228764e+01 2.40993070e+01 2.40752974e+01 + 2.40508536e+01 2.40259817e+01 2.40006879e+01 2.39749780e+01 2.39488581e+01 + 2.39223341e+01 2.38954121e+01 2.38680977e+01 2.38403970e+01 2.38123157e+01 + 2.37838597e+01 2.37550346e+01 2.37258462e+01 2.36963002e+01 2.36664022e+01 + 2.36361578e+01 2.36055726e+01 2.35746521e+01 2.35434018e+01 2.35118272e+01 + 2.34799336e+01 2.34477264e+01 2.34152110e+01 2.33823926e+01 2.33492764e+01 + 2.33158677e+01 2.32821716e+01 2.32481932e+01 2.32139376e+01 2.31794098e+01 + 2.31446147e+01 2.31095574e+01 2.30742426e+01 2.30386753e+01 2.30028602e+01 + 2.29668022e+01 2.29305058e+01 2.28939757e+01 2.28572167e+01 2.28202332e+01 + 2.27830298e+01 2.27456109e+01 2.27079810e+01 2.26701445e+01 2.26321057e+01 + 2.25938690e+01 2.25554385e+01 2.25168186e+01 2.24780132e+01 2.24390267e+01 + 2.23998630e+01 2.23605262e+01 2.23210202e+01 2.22813490e+01 2.22415165e+01 + 2.22015265e+01 2.21613829e+01 2.21210894e+01 2.20806497e+01 2.20400675e+01 + 2.19993464e+01 2.19584900e+01 2.19175019e+01 2.18763855e+01 2.18351444e+01 + 2.17937818e+01 2.17523013e+01 2.17107061e+01 2.16689995e+01 2.16271848e+01 + 2.15852651e+01 2.15432437e+01 2.15011236e+01 2.14589080e+01 2.14165999e+01 + 2.13742023e+01 2.13317181e+01 2.12891503e+01 2.12465018e+01 2.12037754e+01 + 2.11609740e+01 2.11181002e+01 2.10751569e+01 2.10321468e+01 2.09890724e+01 + 2.09459364e+01 2.09027415e+01 2.08594901e+01 2.08161847e+01 2.07728279e+01 + 2.07294221e+01 2.06859697e+01 2.06424731e+01 2.05989346e+01 2.05553566e+01 + 2.05117412e+01 2.04680907e+01 2.04244074e+01 2.03806935e+01 2.03369509e+01 + 2.02931820e+01 2.02493887e+01 2.02055731e+01 2.01617372e+01 2.01178830e+01 + 2.00740125e+01 2.00301276e+01 1.99862301e+01 1.99423220e+01 1.98984051e+01 + 1.98544812e+01 1.98105520e+01 1.97666194e+01 1.97226850e+01 1.96787506e+01 + 1.96348178e+01 1.95908883e+01 1.95469637e+01 1.95030455e+01 1.94591354e+01 + 1.94152349e+01 1.93713455e+01 1.93274686e+01 1.92836059e+01 1.92397586e+01 + 1.91959283e+01 1.91521163e+01 1.91083239e+01 1.90645526e+01 1.90208037e+01 + 1.89770784e+01 1.89333780e+01 1.88897038e+01 1.88460571e+01 1.88024390e+01 + 1.87588508e+01 1.87152936e+01 1.86717685e+01 1.86282768e+01 1.85848194e+01 + 1.85413976e+01 1.84980123e+01 1.84546646e+01 1.84113557e+01 1.83680863e+01 + 1.83248577e+01 1.82816707e+01 1.82385264e+01 1.81954256e+01 1.81523692e+01 + 1.81093583e+01 1.80663936e+01 1.80234761e+01 1.79806066e+01 1.79377859e+01 + 1.78950150e+01 1.78522945e+01 1.78096252e+01 1.77670081e+01 1.77244437e+01 + 1.76819330e+01 1.76394765e+01 1.75970750e+01 1.75547293e+01 1.75124399e+01 + 1.74702076e+01 1.74280331e+01 1.73859170e+01 1.73438599e+01 1.73018624e+01 + 1.72599252e+01 1.72180489e+01 1.71762340e+01 1.71344810e+01 1.70927907e+01 + 1.70511634e+01 1.70095998e+01 1.69681003e+01 1.69266656e+01 1.68852959e+01 + 1.68439920e+01 1.68027542e+01 1.67615829e+01 1.67204788e+01 1.66794421e+01 + 1.66384733e+01 1.65975730e+01 1.65567413e+01 1.65159789e+01 1.64752860e+01 + 1.64346631e+01 1.63941105e+01 1.63536286e+01 1.63132177e+01 1.62728783e+01 + 1.62326105e+01 1.61924149e+01 1.61522916e+01 1.61122410e+01 1.60722634e+01 + 1.60323591e+01 1.59925284e+01 1.59527715e+01 1.59130888e+01 1.58734804e+01 + 1.58339467e+01 1.57944880e+01 1.57551043e+01 1.57157960e+01 1.56765634e+01 + 1.56374065e+01 1.55983257e+01 1.55593211e+01 1.55203930e+01 1.54815415e+01 + 1.54427668e+01 1.54040691e+01 1.53654486e+01 1.53269054e+01 1.52884397e+01 + 1.52500516e+01 1.52117414e+01 1.51735091e+01 1.51353549e+01 1.50972789e+01 + 1.50592813e+01 1.50213621e+01 1.49835215e+01 1.49457596e+01 1.49080765e+01 + 1.48704723e+01 1.48329471e+01 1.47955009e+01 1.47581339e+01 1.47208462e+01 + 1.46836378e+01 1.46465088e+01 1.46094593e+01 1.45724893e+01 1.45355989e+01 + 1.44987881e+01 1.44620570e+01 1.44254057e+01 1.43888341e+01 1.43523423e+01 + 1.43159304e+01 1.42795984e+01 1.42433463e+01 1.42071741e+01 1.41710819e+01 + 1.41350696e+01 1.40991373e+01 1.40632850e+01 1.40275127e+01 1.39918204e+01 + 1.39562080e+01 1.39206757e+01 1.38852233e+01 1.38498509e+01 1.38145584e+01 + 1.37793459e+01 1.37442133e+01 1.37091606e+01 1.36741878e+01 1.36392948e+01 + 1.36044816e+01 1.35697482e+01 1.35350945e+01 1.35005205e+01 1.34660262e+01 + 1.34316114e+01 1.33972763e+01 1.33630207e+01 1.33288445e+01 1.32947477e+01 + 1.32607303e+01 1.32267922e+01 1.31929333e+01 1.31591536e+01 1.31254531e+01 + 1.30918315e+01 1.30582890e+01 1.30248253e+01 1.29914405e+01 1.29581344e+01 + 1.29249070e+01 1.28917582e+01 1.28586879e+01 1.28256961e+01 1.27927827e+01 + 1.27599475e+01 1.27271905e+01 1.26945115e+01 1.26619106e+01 1.26293877e+01 + 1.25969425e+01 1.25645751e+01 1.25322853e+01 1.25000730e+01 1.24679382e+01 + 1.24358807e+01 1.24039005e+01 1.23719973e+01 1.23401713e+01 1.23084221e+01 + 1.22767497e+01 1.22451541e+01 1.22136351e+01 1.21821925e+01 1.21508264e+01 + 1.21195365e+01 1.20883227e+01 1.20571850e+01 1.20261232e+01 1.19951373e+01 + 1.19642270e+01 1.19333923e+01 1.19026330e+01 1.18719491e+01 1.18413404e+01 + 1.18108067e+01 1.17803481e+01 1.17499642e+01 1.17196551e+01 1.16894206e+01 + 1.16592606e+01 1.16291749e+01 1.15991634e+01 1.15692260e+01 1.15393626e+01 + 1.15095729e+01 1.14798570e+01 1.14502147e+01 1.14206457e+01 1.13911501e+01 + 1.13617276e+01 1.13323782e+01 1.13031017e+01 1.12738979e+01 1.12447668e+01 + 1.12157082e+01 1.11867219e+01 1.11578079e+01 1.11289659e+01 1.11001959e+01 + 1.10714977e+01 1.10428712e+01 1.10143163e+01 1.09858327e+01 1.09574203e+01 + 1.09290791e+01 1.09008089e+01 1.08726095e+01 1.08444808e+01 1.08164227e+01 + 1.07884349e+01 1.07605175e+01 1.07326701e+01 1.07048928e+01 1.06771853e+01 + 1.06495475e+01 1.06219793e+01 1.05944805e+01 1.05670509e+01 1.05396905e+01 + 1.05123990e+01 1.04851764e+01 1.04580225e+01 1.04309372e+01 1.04039202e+01 + 1.03769716e+01 1.03500910e+01 1.03232784e+01 1.02965336e+01 1.02698565e+01 + 1.02432470e+01 1.02167048e+01 1.01902299e+01 1.01638221e+01 1.01374812e+01 + 1.01112071e+01 1.00849997e+01 1.00588588e+01 1.00327843e+01 1.00067760e+01 + 9.98083379e+00 9.95495749e+00 9.92914697e+00 9.90340209e+00 9.87772270e+00 + 9.85210865e+00 9.82655980e+00 9.80107600e+00 9.77565710e+00 9.75030296e+00 + 9.72501344e+00 9.69978837e+00 9.67462763e+00 9.64953106e+00 9.62449852e+00 + 9.59952985e+00 9.57462492e+00 9.54978358e+00 9.52500568e+00 9.50029108e+00 + 9.47563963e+00 9.45105118e+00 9.42652560e+00 9.40206272e+00 9.37766242e+00 + 9.35332454e+00 9.32904893e+00 9.30483546e+00 9.28068397e+00 9.25659433e+00 + 9.23256638e+00 9.20859999e+00 9.18469501e+00 9.16085128e+00 9.13706868e+00 + 9.11334706e+00 9.08968626e+00 9.06608615e+00 9.04254659e+00 9.01906742e+00 + 8.99564852e+00 8.97228972e+00 8.94899090e+00 8.92575190e+00 8.90257258e+00 + 8.87945281e+00 8.85639244e+00 8.83339132e+00 8.81044932e+00 8.78756628e+00 + 8.76474208e+00 8.74197657e+00 8.71926961e+00 8.69662105e+00 8.67403076e+00 + 8.65149859e+00 8.62902441e+00 8.60660807e+00 8.58424943e+00 8.56194836e+00 + 8.53970471e+00 8.51751834e+00 8.49538911e+00 8.47331690e+00 8.45130154e+00 + 8.42934292e+00 8.40744088e+00 8.38559529e+00 8.36380601e+00 8.34207291e+00 + 8.32039585e+00 8.29877468e+00 8.27720927e+00 8.25569949e+00 8.23424520e+00 + 8.21284625e+00 8.19150252e+00 8.17021387e+00 8.14898017e+00 8.12780127e+00 + 8.10667704e+00 8.08560734e+00 8.06459205e+00 8.04363103e+00 8.02272413e+00 + 8.00187124e+00 7.98107221e+00 7.96032690e+00 7.93963520e+00 7.91899696e+00 + 7.89841205e+00 7.87788034e+00 7.85740169e+00 7.83697597e+00 7.81660306e+00 + 7.79628282e+00 7.77601511e+00 7.75579981e+00 7.73563679e+00 7.71552591e+00 + 7.69546704e+00 7.67546006e+00 7.65550483e+00 7.63560123e+00 7.61574912e+00 + 7.59594838e+00 7.57619887e+00 7.55650048e+00 7.53685306e+00 7.51725649e+00 + 7.49771065e+00 7.47821540e+00 7.45877063e+00 7.43937619e+00 7.42003197e+00 + 7.40073784e+00 7.38149367e+00 7.36229933e+00 7.34315471e+00 7.32405967e+00 + 7.30501408e+00 7.28601784e+00 7.26707080e+00 7.24817285e+00 7.22932386e+00 + 7.21052370e+00 7.19177226e+00 7.17306941e+00 7.15441503e+00 7.13580899e+00 + 7.11725117e+00 7.09874145e+00 7.08027971e+00 7.06186582e+00 7.04349966e+00 + 7.02518112e+00 7.00691007e+00 6.98868640e+00 6.97050997e+00 6.95238067e+00 + 6.93429838e+00 6.91626298e+00 6.89827436e+00 6.88033238e+00 6.86243694e+00 + 6.84458792e+00 6.82678519e+00 6.80902864e+00 6.79131815e+00 6.77365360e+00 + 6.75603488e+00 6.73846187e+00 6.72093445e+00 6.70345250e+00 6.68601592e+00 + 6.66862458e+00 6.65127837e+00 6.63397717e+00 6.61672087e+00 6.59950935e+00 + 6.58234250e+00 6.56522020e+00 6.54814234e+00 6.53110881e+00 6.51411950e+00 + 6.49717428e+00 6.48027305e+00 6.46341569e+00 6.44660210e+00 6.42983215e+00 + 6.41310574e+00 6.39642276e+00 6.37978309e+00 6.36318663e+00 6.34663326e+00 + 6.33012287e+00 6.31365535e+00 6.29723059e+00 6.28084849e+00 6.26450892e+00 + 6.24821179e+00 6.23195699e+00 6.21574440e+00 6.19957391e+00 6.18344542e+00 + 6.16735883e+00 6.15131402e+00 6.13531088e+00 6.11934931e+00 6.10342920e+00 + 6.08755045e+00 6.07171295e+00 6.05591658e+00 6.04016126e+00 6.02444686e+00 + 6.00877329e+00 5.99314044e+00 5.97754820e+00 5.96199647e+00 5.94648515e+00 + 5.93101414e+00 5.91558332e+00 5.90019259e+00 5.88484186e+00 5.86953101e+00 + 5.85425995e+00 5.83902857e+00 5.82383678e+00 5.80868446e+00 5.79357151e+00 + 5.77849784e+00 5.76346335e+00 5.74846793e+00 5.73351148e+00 5.71859390e+00 + 5.70371509e+00 5.68887495e+00 5.67407338e+00 5.65931028e+00 5.64458556e+00 + 5.62989911e+00 5.61525083e+00 5.60064063e+00 5.58606840e+00 5.57153405e+00 + 5.55703748e+00 5.54257860e+00 5.52815730e+00 5.51377349e+00 5.49942708e+00 + 5.48511795e+00 5.47084603e+00 5.45661121e+00 5.44241339e+00 5.42825249e+00 + 5.41412840e+00 5.40004103e+00 5.38599029e+00 5.37197608e+00 5.35799830e+00 + 5.34405687e+00 5.33015168e+00 5.31628265e+00 5.30244967e+00 5.28865267e+00 + 5.27489153e+00 5.26116618e+00 5.24747652e+00 5.23382245e+00 5.22020389e+00 + 5.20662074e+00 5.19307291e+00 5.17956030e+00 5.16608284e+00 5.15264042e+00 + 5.13923296e+00 5.12586036e+00 5.11252254e+00 5.09921940e+00 5.08595085e+00 + 5.07271682e+00 5.05951719e+00 5.04635190e+00 5.03322084e+00 5.02012393e+00 + 5.00706108e+00 4.99403221e+00 4.98103722e+00 4.96807602e+00 4.95514853e+00 + 4.94225467e+00 4.92939434e+00 4.91656745e+00 4.90377393e+00 4.89101368e+00 + 4.87828662e+00 4.86559266e+00 4.85293171e+00 4.84030370e+00 4.82770853e+00 + 4.81514612e+00 4.80261638e+00 4.79011924e+00 4.77765460e+00 4.76522238e+00 + 4.75282250e+00 4.74045487e+00 4.72811941e+00 4.71581604e+00 4.70354467e+00 + 4.69130522e+00 4.67909760e+00 4.66692174e+00 4.65477755e+00 4.64266495e+00 + 4.63058386e+00 4.61853420e+00 4.60651588e+00 4.59452882e+00 4.58257294e+00 + 4.57064817e+00 4.55875441e+00 4.54689159e+00 4.53505964e+00 4.52325846e+00 + 4.51148798e+00 4.49974812e+00 4.48803880e+00 4.47635994e+00 4.46471147e+00 + 4.45309329e+00 4.44150534e+00 4.42994754e+00 4.41841980e+00 4.40692206e+00 + 4.39545422e+00 4.38401622e+00 4.37260797e+00 4.36122940e+00 4.34988044e+00 + 4.33856100e+00 4.32727101e+00 4.31601039e+00 4.30477906e+00 4.29357695e+00 + 4.28240399e+00 4.27126010e+00 4.26014520e+00 4.24905921e+00 4.23800207e+00 + 4.22697369e+00 4.21597401e+00 4.20500294e+00 4.19406042e+00 4.18314636e+00 + 4.17226070e+00 4.16140337e+00 4.15057428e+00 4.13977336e+00 4.12900055e+00 + 4.11825576e+00 4.10753893e+00 4.09684998e+00 4.08618884e+00 4.07555544e+00 + 4.06494971e+00 4.05437157e+00 4.04382095e+00 4.03329778e+00 4.02280199e+00 + 4.01233351e+00 4.00189227e+00 3.99147820e+00 3.98109122e+00 3.97073126e+00 + 3.96039826e+00 3.95009215e+00 3.93981285e+00 3.92956029e+00 3.91933442e+00 + 3.90913515e+00 3.89896241e+00 3.88881615e+00 3.87869628e+00 3.86860275e+00 + 3.85853548e+00 3.84849440e+00 3.83847945e+00 3.82849056e+00 3.81852765e+00 + 3.80859068e+00 3.79867955e+00 3.78879422e+00 3.77893460e+00 3.76910064e+00 + 3.75929227e+00 3.74950942e+00 3.73975203e+00 3.73002002e+00 3.72031334e+00 + 3.71063191e+00 3.70097568e+00 3.69134457e+00 3.68173852e+00 3.67215746e+00 + 3.66260134e+00 3.65307008e+00 3.64356362e+00 3.63408190e+00 3.62462485e+00 + 3.61519241e+00 3.60578451e+00 3.59640109e+00 3.58704209e+00 3.57770744e+00 + 3.56839708e+00 3.55911095e+00 3.54984898e+00 3.54061111e+00 3.53139728e+00 + 3.52220742e+00 3.51304148e+00 3.50389939e+00 3.49478108e+00 3.48568651e+00 + 3.47661559e+00 3.46756829e+00 3.45854452e+00 3.44954423e+00 3.44056737e+00 + 3.43161386e+00 3.42268365e+00 3.41377668e+00 3.40489289e+00 3.39603221e+00 + 3.38719459e+00 3.37837997e+00 3.36958828e+00 3.36081947e+00 3.35207348e+00 + 3.34335025e+00 3.33464972e+00 3.32597183e+00 3.31731651e+00 3.30868372e+00 + 3.30007340e+00 3.29148548e+00 3.28291991e+00 3.27437460e+00 3.26573446e+00 + 3.25693384e+00 3.24797415e+00 3.23885681e+00 3.22958325e+00 3.22015492e+00 + 3.21057326e+00 3.20083974e+00 3.19095585e+00 3.18092306e+00 3.17074289e+00 + 3.16041685e+00 3.14994645e+00 3.13933322e+00 3.12857873e+00 3.11768450e+00 + 3.10665212e+00 3.09548315e+00 3.08417917e+00 3.07274177e+00 3.06117256e+00 + 3.04947314e+00 3.03764512e+00 3.02569014e+00 3.01360983e+00 3.00140582e+00 + 2.98907976e+00 2.97663331e+00 2.96406812e+00 2.95138588e+00 2.93858824e+00 + 2.92567690e+00 2.91265353e+00 2.89951983e+00 2.88627750e+00 2.87292824e+00 + 2.85947376e+00 2.84591578e+00 2.83225600e+00 2.81849615e+00 2.80463796e+00 + 2.79068315e+00 2.77663346e+00 2.76249063e+00 2.74825640e+00 2.73393251e+00 + 2.71952069e+00 2.70502271e+00 2.69044032e+00 2.67577526e+00 2.66102928e+00 + 2.64620415e+00 2.63130163e+00 2.61632346e+00 2.60127141e+00 2.58614724e+00 + 2.57095271e+00 2.55568958e+00 2.54035962e+00 2.52496457e+00 2.50950621e+00 + 2.49398629e+00 2.47840657e+00 2.46276881e+00 2.44707477e+00 2.43132620e+00 + 2.41552486e+00 2.39967249e+00 2.38377086e+00 2.36782170e+00 2.35182676e+00 + 2.33578779e+00 2.31970652e+00 2.30358470e+00 2.28742405e+00 2.27122632e+00 + 2.25499322e+00 2.23872647e+00 2.22242781e+00 2.20609894e+00 2.18974157e+00 + 2.17335742e+00 2.15694817e+00 2.14051554e+00 2.12406122e+00 2.10758688e+00 + 2.09109421e+00 2.07458489e+00 2.05806058e+00 2.04152296e+00 2.02497368e+00 + 2.00841439e+00 1.99184673e+00 1.97527235e+00 1.95869288e+00 1.94210994e+00 + 1.92552516e+00 1.90894014e+00 1.89235648e+00 1.87577578e+00 1.85919964e+00 + 1.84262963e+00 1.82606732e+00 1.80951428e+00 1.79297207e+00 1.77644223e+00 + 1.75992630e+00 1.74342581e+00 1.72694228e+00 1.71047724e+00 1.69403217e+00 + 1.67760858e+00 1.66120794e+00 1.64483175e+00 1.62848145e+00 1.61215850e+00 + 1.59586437e+00 1.57960046e+00 1.56336823e+00 1.54716907e+00 1.53100440e+00 + 1.51487561e+00 1.49878408e+00 1.48273119e+00 1.46671830e+00 1.45074676e+00 + 1.43481791e+00 1.41893309e+00 1.40309360e+00 1.38730076e+00 1.37155587e+00 + 1.35586020e+00 1.34021503e+00 1.32462161e+00 1.30908121e+00 1.29359504e+00 + 1.27816435e+00 1.26279034e+00 1.24747421e+00 1.23221715e+00 1.21702033e+00 + 1.20188492e+00 1.18681208e+00 1.17180293e+00 1.15685861e+00 1.14198022e+00 + 1.12716887e+00 1.11242565e+00 1.09775162e+00 1.08314786e+00 1.06861540e+00 + 1.05415529e+00 1.03976855e+00 1.02545618e+00 1.01121918e+00 9.97058538e-01 + 9.82975218e-01 9.68970178e-01 9.55044358e-01 9.41198688e-01 9.27434083e-01 + 9.13751445e-01 9.00151662e-01 8.86635607e-01 8.73204142e-01 8.59858113e-01 + 8.46598354e-01 8.33425684e-01 8.20340909e-01 8.07344819e-01 7.94438194e-01 + 7.81621797e-01 7.68896378e-01 7.56262673e-01 7.43721404e-01 7.31273280e-01 + 7.18918994e-01 7.06659228e-01 6.94494646e-01 6.82425902e-01 6.70453634e-01 + 6.58578466e-01 6.46801008e-01 6.35121856e-01 6.23541592e-01 6.12060784e-01 + 6.00679988e-01 5.89399741e-01 5.78220572e-01 5.67142991e-01 5.56167497e-01 + 5.45294574e-01 5.34524691e-01 5.23858307e-01 5.13295861e-01 5.02837783e-01 + 4.92484488e-01 4.82236375e-01 4.72093832e-01 4.62057231e-01 4.52126932e-01 + 4.42303279e-01 4.32586605e-01 4.22977227e-01 4.13475449e-01 4.04081562e-01 + 3.94795843e-01 3.85618554e-01 3.76549946e-01 3.67590255e-01 3.58739704e-01 + 3.49998502e-01 3.41366844e-01 3.32844915e-01 3.24432882e-01 3.16130902e-01 + 3.07939119e-01 2.99857661e-01 2.91886645e-01 2.84026175e-01 2.76276342e-01 + 2.68637223e-01 2.61108883e-01 2.53691374e-01 2.46384735e-01 2.39188993e-01 + 2.32104162e-01 2.25130242e-01 2.18267224e-01 2.11515082e-01 2.04873781e-01 + 1.98343273e-01 1.91923497e-01 1.85614380e-01 1.79415837e-01 1.73327772e-01 + 1.67350075e-01 1.61482625e-01 1.55725291e-01 1.50077926e-01 1.44540377e-01 + 1.39112474e-01 1.33794039e-01 1.28584880e-01 1.23484797e-01 1.18493576e-01 + 1.13610993e-01 1.08836811e-01 1.04170785e-01 9.96126567e-02 9.51621582e-02 + 9.08190104e-02 8.65829234e-02 8.24535969e-02 7.84307201e-02 7.45139717e-02 + 7.07030202e-02 6.69975236e-02 6.33971302e-02 5.99014780e-02 5.65101949e-02 + 5.32228993e-02 5.00391995e-02 4.69586945e-02 4.39809734e-02 4.11056159e-02 + 3.83321926e-02 3.56602644e-02 3.30893833e-02 3.06190922e-02 2.82489250e-02 + 2.59784067e-02 2.38070535e-02 2.17343729e-02 1.97598640e-02 1.78830174e-02 + 1.61033150e-02 1.44202309e-02 1.28332308e-02 1.13417724e-02 9.94530538e-03 + 8.64327165e-03 7.43510538e-03 6.32023307e-03 5.29807375e-03 4.36803897e-03 + 3.52953302e-03 2.78195295e-03 2.12468873e-03 1.55712334e-03 1.07863288e-03 + 6.88586680e-04 3.86347392e-04 1.71271129e-04 4.27075560e-05 0.00000000e+00 + 2.04047571e-06 2.05095161e-06 2.09195486e-06 2.13377786e-06 2.17643701e-06 + 2.21994900e-06 2.26433090e-06 2.30960010e-06 2.35577433e-06 2.40287169e-06 + 2.45091064e-06 2.49991000e-06 2.54988896e-06 2.60086712e-06 2.65286446e-06 + 2.70590133e-06 2.75999854e-06 2.81517728e-06 2.87145916e-06 2.92886625e-06 + 2.98742104e-06 3.04714647e-06 3.10806596e-06 3.17020336e-06 3.23358303e-06 + 3.29822981e-06 3.36416903e-06 3.43142652e-06 3.50002865e-06 3.57000228e-06 + 3.64137486e-06 3.71417433e-06 3.78842924e-06 3.86416867e-06 3.94142230e-06 + 4.02022042e-06 4.10059389e-06 4.18257420e-06 4.26619350e-06 4.35148453e-06 + 4.43848073e-06 4.52721619e-06 4.61772567e-06 4.71004464e-06 4.80420928e-06 + 4.90025648e-06 4.99822390e-06 5.09814990e-06 5.20007365e-06 5.30403510e-06 + 5.41007497e-06 5.51823482e-06 5.62855704e-06 5.74108485e-06 5.85586235e-06 + 5.97293451e-06 6.09234722e-06 6.21414726e-06 6.33838236e-06 6.46510120e-06 + 6.59435345e-06 6.72618974e-06 6.86066175e-06 6.99782215e-06 7.13772471e-06 + 7.28042424e-06 7.42597666e-06 7.57443900e-06 7.72586945e-06 7.88032734e-06 + 8.03787319e-06 8.19856875e-06 8.36247698e-06 8.52966210e-06 8.70018965e-06 + 8.87412642e-06 9.05154059e-06 9.23250167e-06 9.41708058e-06 9.60534964e-06 + 9.79738263e-06 9.99325479e-06 1.01930429e-05 1.03968252e-05 1.06046816e-05 + 1.08166935e-05 1.10329440e-05 1.12535179e-05 1.14785015e-05 1.17079831e-05 + 1.19420525e-05 1.21808015e-05 1.24243236e-05 1.26727143e-05 1.29260709e-05 + 1.31844927e-05 1.34480809e-05 1.37169388e-05 1.39911718e-05 1.42708873e-05 + 1.45561950e-05 1.48472067e-05 1.51440363e-05 1.54468002e-05 1.57556170e-05 + 1.60706078e-05 1.63918960e-05 1.67196075e-05 1.70538706e-05 1.73948164e-05 + 1.77425785e-05 1.80972932e-05 1.84590994e-05 1.88281389e-05 1.92045563e-05 + 1.95884992e-05 1.99801179e-05 2.03795660e-05 2.07869999e-05 2.12025794e-05 + 2.16264672e-05 2.20588295e-05 2.24998357e-05 2.29496586e-05 2.34084745e-05 + 2.38764631e-05 2.43538078e-05 2.48406958e-05 2.53373177e-05 2.58438682e-05 + 2.63605457e-05 2.68875528e-05 2.74250960e-05 2.79733858e-05 2.85326371e-05 + 2.91030692e-05 2.96849054e-05 3.02783738e-05 3.08837069e-05 3.15011420e-05 + 3.21309210e-05 3.27732907e-05 3.34285027e-05 3.40968139e-05 3.47784861e-05 + 3.54737864e-05 3.61829873e-05 3.69063666e-05 3.76442079e-05 3.83968003e-05 + 3.91644386e-05 3.99474237e-05 4.07460623e-05 4.15606675e-05 4.23915584e-05 + 4.32390606e-05 4.41035062e-05 4.49852339e-05 4.58845893e-05 4.68019247e-05 + 4.77375996e-05 4.86919807e-05 4.96654419e-05 5.06583647e-05 5.16711381e-05 + 5.27041590e-05 5.37578322e-05 5.48325706e-05 5.59287953e-05 5.70469358e-05 + 5.81874303e-05 5.93507257e-05 6.05372778e-05 6.17475516e-05 6.29820212e-05 + 6.42411705e-05 6.55254929e-05 6.68354915e-05 6.81716797e-05 6.95345810e-05 + 7.09247296e-05 7.23426700e-05 7.37889581e-05 7.52641604e-05 7.67688550e-05 + 7.83036314e-05 7.98690912e-05 8.14658477e-05 8.30945266e-05 8.47557661e-05 + 8.64502170e-05 8.81785434e-05 8.99414225e-05 9.17395450e-05 9.35736156e-05 + 9.54443528e-05 9.73524898e-05 9.92987741e-05 1.01283968e-04 1.03308851e-04 + 1.05374214e-04 1.07480868e-04 1.09629638e-04 1.11821367e-04 1.14056912e-04 + 1.16337149e-04 1.18662973e-04 1.21035295e-04 1.23455043e-04 1.25923167e-04 + 1.28440634e-04 1.31008428e-04 1.33627558e-04 1.36299049e-04 1.39023948e-04 + 1.41803323e-04 1.44638262e-04 1.47529876e-04 1.50479299e-04 1.53487686e-04 + 1.56556216e-04 1.59686091e-04 1.62878538e-04 1.66134807e-04 1.69456174e-04 + 1.72843941e-04 1.76299435e-04 1.79824010e-04 1.83419046e-04 1.87085954e-04 + 1.90826168e-04 1.94641156e-04 1.98532411e-04 2.02501458e-04 2.06549852e-04 + 2.10679180e-04 2.14891059e-04 2.19187140e-04 2.23569105e-04 2.28038673e-04 + 2.32597593e-04 2.37247653e-04 2.41990673e-04 2.46828513e-04 2.51763068e-04 + 2.56796271e-04 2.61930094e-04 2.67166549e-04 2.72507687e-04 2.77955601e-04 + 2.83512425e-04 2.89180337e-04 2.94961556e-04 3.00858349e-04 3.06873025e-04 + 3.13007940e-04 3.19265499e-04 3.25648153e-04 3.32158403e-04 3.38798798e-04 + 3.45571942e-04 3.52480486e-04 3.59527138e-04 3.66714659e-04 3.74045863e-04 + 3.81523625e-04 3.89150872e-04 3.96930593e-04 4.04865836e-04 4.12959709e-04 + 4.21215383e-04 4.29636094e-04 4.38225138e-04 4.46985881e-04 4.55921756e-04 + 4.65036262e-04 4.74332970e-04 4.83815523e-04 4.93487634e-04 5.03353093e-04 + 5.13415764e-04 5.23679589e-04 5.34148588e-04 5.44826864e-04 5.55718598e-04 + 5.66828057e-04 5.78159592e-04 5.89717643e-04 6.01506737e-04 6.13531492e-04 + 6.25796617e-04 6.38306917e-04 6.51067293e-04 6.64082741e-04 6.77358361e-04 + 6.90899352e-04 7.04711018e-04 7.18798769e-04 7.33168121e-04 7.47824704e-04 + 7.62774258e-04 7.78022638e-04 7.93575816e-04 8.09439883e-04 8.25621052e-04 + 8.42125661e-04 8.58960174e-04 8.76131183e-04 8.93645413e-04 9.11509723e-04 + 9.29731109e-04 9.48316707e-04 9.67273794e-04 9.86609795e-04 1.00633228e-03 + 1.02644898e-03 1.04696776e-03 1.06789666e-03 1.08924387e-03 1.11101776e-03 + 1.13322685e-03 1.15587984e-03 1.17898559e-03 1.20255316e-03 1.22659177e-03 + 1.25111082e-03 1.27611993e-03 1.30162888e-03 1.32764766e-03 1.35418646e-03 + 1.38125566e-03 1.40886586e-03 1.43702787e-03 1.46575272e-03 1.49505165e-03 + 1.52493613e-03 1.55541785e-03 1.58650875e-03 1.61822099e-03 1.65056700e-03 + 1.68355942e-03 1.71721118e-03 1.75153544e-03 1.78654563e-03 1.82225546e-03 + 1.85867890e-03 1.89583021e-03 1.93372392e-03 1.97237487e-03 2.01179817e-03 + 2.05200925e-03 2.09302385e-03 2.13485800e-03 2.17752809e-03 2.22105080e-03 + 2.26544317e-03 2.31072255e-03 2.35690665e-03 2.40401356e-03 2.45206169e-03 + 2.50106983e-03 2.55105716e-03 2.60204323e-03 2.65404797e-03 2.70709172e-03 + 2.76119524e-03 2.81637966e-03 2.87266659e-03 2.93007801e-03 2.98863639e-03 + 3.04836461e-03 3.10928602e-03 3.17142445e-03 3.23480418e-03 3.29944999e-03 + 3.36538715e-03 3.43264142e-03 3.50123910e-03 3.57120699e-03 3.64257244e-03 + 3.71536332e-03 3.78960809e-03 3.86533575e-03 3.94257589e-03 4.02135868e-03 + 4.10171490e-03 4.18367594e-03 4.26727380e-03 4.35254115e-03 4.43951127e-03 + 4.52821813e-03 4.61869637e-03 4.71098131e-03 4.80510898e-03 4.90111612e-03 + 4.99904022e-03 5.09891950e-03 5.20079293e-03 5.30470026e-03 5.41068205e-03 + 5.51877965e-03 5.62903523e-03 5.74149179e-03 5.85619321e-03 5.97318421e-03 + 6.09251043e-03 6.21421839e-03 6.33835555e-03 6.46497030e-03 6.59411200e-03 + 6.72583098e-03 6.86017857e-03 6.99720713e-03 7.13697005e-03 7.27952178e-03 + 7.42491784e-03 7.57321486e-03 7.72447059e-03 7.87874393e-03 8.03609494e-03 + 8.19658487e-03 8.36027618e-03 8.52723257e-03 8.69751901e-03 8.87120173e-03 + 9.04834830e-03 9.22902762e-03 9.41330992e-03 9.60126687e-03 9.79297152e-03 + 9.98849837e-03 1.01879234e-02 1.03913241e-02 1.05987794e-02 1.08103700e-02 + 1.10261779e-02 1.12462870e-02 1.14707827e-02 1.16997521e-02 1.19332840e-02 + 1.21714690e-02 1.24143995e-02 1.26621696e-02 1.29148754e-02 1.31726148e-02 + 1.34354876e-02 1.37035958e-02 1.39770430e-02 1.42559352e-02 1.45403802e-02 + 1.48304882e-02 1.51263713e-02 1.54281440e-02 1.57359229e-02 1.60498269e-02 + 1.63699774e-02 1.66964980e-02 1.70295147e-02 1.73691561e-02 1.77155533e-02 + 1.80688398e-02 1.84291520e-02 1.87966285e-02 1.91714111e-02 1.95536442e-02 + 1.99434748e-02 2.03410530e-02 2.07465318e-02 2.11600670e-02 2.15818178e-02 + 2.20119461e-02 2.24506171e-02 2.28979992e-02 2.33542642e-02 2.38195870e-02 + 2.42941460e-02 2.47781231e-02 2.52717037e-02 2.57750767e-02 2.62884346e-02 + 2.68119739e-02 2.73458947e-02 2.78904008e-02 2.84457003e-02 2.90120049e-02 + 2.95895307e-02 3.01784978e-02 3.07791305e-02 3.13916574e-02 3.20163116e-02 + 3.26533305e-02 3.33029562e-02 3.39654353e-02 3.46410192e-02 3.53299639e-02 + 3.60325306e-02 3.67489851e-02 3.74795985e-02 3.82246470e-02 3.89844119e-02 + 3.97591800e-02 4.05492435e-02 4.13549000e-02 4.21764528e-02 4.30142108e-02 + 4.38684889e-02 4.47396078e-02 4.56278942e-02 4.65336809e-02 4.74573070e-02 + 4.83991179e-02 4.93594654e-02 5.03387080e-02 5.13372105e-02 5.23553449e-02 + 5.33934898e-02 5.44520309e-02 5.55313610e-02 5.66318801e-02 5.77539956e-02 + 5.88981224e-02 6.00646830e-02 6.12541074e-02 6.24668337e-02 6.37033078e-02 + 6.49639840e-02 6.62493243e-02 6.75597995e-02 6.88958888e-02 7.02580798e-02 + 7.16468690e-02 7.30627619e-02 7.45062728e-02 7.59779252e-02 7.74782520e-02 + 7.90077955e-02 8.05671075e-02 8.21567496e-02 8.37772930e-02 8.54293193e-02 + 8.71134198e-02 8.88301965e-02 9.05802615e-02 9.23642375e-02 9.41827581e-02 + 9.60364675e-02 9.79260210e-02 9.98520852e-02 1.01815338e-01 1.03816468e-01 + 1.05856176e-01 1.07935174e-01 1.10054188e-01 1.12213953e-01 1.14415217e-01 + 1.16658742e-01 1.18945300e-01 1.21275677e-01 1.23650671e-01 1.26071094e-01 + 1.28537770e-01 1.31051536e-01 1.33613243e-01 1.36223754e-01 1.38883946e-01 + 1.41594711e-01 1.44356954e-01 1.47171591e-01 1.50039557e-01 1.52961797e-01 + 1.55939273e-01 1.58972958e-01 1.62063842e-01 1.65212929e-01 1.68421236e-01 + 1.71689797e-01 1.75019659e-01 1.78411885e-01 1.81867550e-01 1.85387748e-01 + 1.88973584e-01 1.92626180e-01 1.96346674e-01 2.00136216e-01 2.03995974e-01 + 2.07927128e-01 2.11930876e-01 2.16008430e-01 2.20161015e-01 2.24389873e-01 + 2.28696261e-01 2.33081449e-01 2.37546724e-01 2.42093385e-01 2.46722749e-01 + 2.51436143e-01 2.56234912e-01 2.61120413e-01 2.66094017e-01 2.71157111e-01 + 2.76311093e-01 2.81557374e-01 2.86897380e-01 2.92332550e-01 2.97864332e-01 + 3.03494190e-01 3.09223599e-01 3.15054044e-01 3.20987022e-01 3.27024041e-01 + 3.33166619e-01 3.39416285e-01 3.45774574e-01 3.52243033e-01 3.58823217e-01 + 3.65516687e-01 3.72325013e-01 3.79249770e-01 3.86292540e-01 3.93454910e-01 + 4.00738470e-01 4.08144814e-01 4.15675541e-01 4.23332251e-01 4.31116542e-01 + 4.39030017e-01 4.47074276e-01 4.55250916e-01 4.63561533e-01 4.72007720e-01 + 4.80591063e-01 4.89313143e-01 4.98175533e-01 5.07179799e-01 5.16327497e-01 + 5.25620170e-01 5.35059350e-01 5.44646556e-01 5.54383291e-01 5.64271040e-01 + 5.74311272e-01 5.84505434e-01 5.94854953e-01 6.05361233e-01 6.16025651e-01 + 6.26849561e-01 6.37834285e-01 6.48981116e-01 6.60291318e-01 6.71766115e-01 + 6.83406701e-01 6.95214229e-01 7.07189811e-01 7.19334521e-01 7.31649384e-01 + 7.44135384e-01 7.56793451e-01 7.69624469e-01 7.82629267e-01 7.95808620e-01 + 8.09163245e-01 8.22693799e-01 8.36400879e-01 8.50285015e-01 8.64346674e-01 + 8.78586252e-01 8.93004073e-01 9.07600389e-01 9.22375377e-01 9.37329134e-01 + 9.52461677e-01 9.67772941e-01 9.83262776e-01 9.98930942e-01 1.01477711e+00 + 1.03080087e+00 1.04700170e+00 1.06337899e+00 1.07993204e+00 1.09666004e+00 + 1.11356207e+00 1.13063713e+00 1.14788410e+00 1.16530174e+00 1.18288873e+00 + 1.20064361e+00 1.21856482e+00 1.23665070e+00 1.25489945e+00 1.27330916e+00 + 1.29187782e+00 1.31060328e+00 1.32948329e+00 1.34851546e+00 1.36769729e+00 + 1.38702617e+00 1.40649935e+00 1.42611396e+00 1.44586702e+00 1.46575542e+00 + 1.48577594e+00 1.50592523e+00 1.52619982e+00 1.54659613e+00 1.56711045e+00 + 1.58773895e+00 1.60847772e+00 1.62932269e+00 1.65026971e+00 1.67131450e+00 + 1.69245268e+00 1.71367978e+00 1.73499120e+00 1.75638226e+00 1.77784817e+00 + 1.79938405e+00 1.82098493e+00 1.84264575e+00 1.86436137e+00 1.88612657e+00 + 1.90793604e+00 1.92978441e+00 1.95166624e+00 1.97357603e+00 1.99550821e+00 + 2.01745715e+00 2.03941720e+00 2.06138263e+00 2.08334768e+00 2.10530657e+00 + 2.12725347e+00 2.14918254e+00 2.17108791e+00 2.19296369e+00 2.21480400e+00 + 2.23660295e+00 2.25835463e+00 2.28005318e+00 2.30169271e+00 2.32326738e+00 + 2.34477136e+00 2.36619884e+00 2.38754407e+00 2.40880133e+00 2.42996492e+00 + 2.45102924e+00 2.47198870e+00 2.49283781e+00 2.51357111e+00 2.53418325e+00 + 2.55466891e+00 2.57502290e+00 2.59524008e+00 2.61531541e+00 2.63524395e+00 + 2.65502086e+00 2.67464139e+00 2.69410090e+00 2.71339486e+00 2.73251886e+00 + 2.75146860e+00 2.77023990e+00 2.78882870e+00 2.80723106e+00 2.82544319e+00 + 2.84346139e+00 2.86128213e+00 2.87890199e+00 2.89631769e+00 2.91352609e+00 + 2.93052419e+00 2.94730912e+00 2.96387815e+00 2.98022870e+00 2.99635831e+00 + 3.01226468e+00 3.02794565e+00 3.04339918e+00 3.05862340e+00 3.07361655e+00 + 3.08837703e+00 3.10290336e+00 3.11719422e+00 3.13124840e+00 3.14506485e+00 + 3.15864262e+00 3.17198093e+00 3.18507910e+00 3.19793658e+00 3.21055297e+00 + 3.22292797e+00 3.23506140e+00 3.24695322e+00 3.25860348e+00 3.27001236e+00 + 3.28118016e+00 3.29210726e+00 3.30279418e+00 3.31324151e+00 3.32344997e+00 + 3.33342036e+00 3.34315358e+00 3.35265062e+00 3.36191256e+00 3.37094056e+00 + 3.37973589e+00 3.38829985e+00 3.39663387e+00 3.40473941e+00 3.41261803e+00 + 3.42027135e+00 3.42770104e+00 3.43490886e+00 3.44189660e+00 3.44866613e+00 + 3.45521936e+00 3.46155824e+00 3.46768480e+00 3.47360108e+00 3.47930919e+00 + 3.48481125e+00 3.49010944e+00 3.49520597e+00 3.50010308e+00 3.50480303e+00 + 3.50930811e+00 3.51362065e+00 3.51774299e+00 3.52167748e+00 3.52542650e+00 + 3.52899245e+00 3.53237772e+00 3.53558474e+00 3.53861594e+00 3.54147374e+00 + 3.54416059e+00 3.54667892e+00 3.54903119e+00 3.55121984e+00 3.55324732e+00 + 3.55511606e+00 3.55682850e+00 3.55838708e+00 3.55979422e+00 3.56105233e+00 + 3.56216384e+00 3.56313112e+00 3.56395658e+00 3.56464257e+00 3.56519147e+00 + 3.56560561e+00 3.56588732e+00 3.56603892e+00 3.56606270e+00 3.56596093e+00 + 3.56573588e+00 3.56538979e+00 3.56492486e+00 3.56434331e+00 3.56364730e+00 + 3.56283899e+00 3.56192051e+00 3.56089397e+00 3.55976147e+00 3.55852505e+00 + 3.55718677e+00 3.55574864e+00 3.55421264e+00 3.55258076e+00 3.55085491e+00 + 3.54903704e+00 3.54712902e+00 3.54513272e+00 3.54304999e+00 3.54088264e+00 + 3.53863246e+00 3.53630122e+00 3.53389065e+00 3.53140248e+00 3.52883839e+00 + 3.52620004e+00 3.52348907e+00 3.52070710e+00 3.51785572e+00 3.51493648e+00 + 3.51195092e+00 3.50890056e+00 3.50578689e+00 3.50261136e+00 3.49937543e+00 + 3.49608051e+00 3.49272798e+00 3.48931922e+00 3.48585557e+00 3.48233835e+00 + 3.47876886e+00 3.47514837e+00 3.47147815e+00 3.46775941e+00 3.46399337e+00 + 3.46018121e+00 3.45632410e+00 3.45242318e+00 3.44847957e+00 3.44449438e+00 + 3.44046868e+00 3.43640354e+00 3.43229999e+00 3.42815906e+00 3.42398175e+00 + 3.41976903e+00 3.41552187e+00 3.41124122e+00 3.40692800e+00 3.40258311e+00 + 3.39820746e+00 3.39380190e+00 3.38936729e+00 3.38490448e+00 3.38041427e+00 + 3.37589748e+00 3.37135489e+00 3.36678728e+00 3.36219540e+00 3.35757999e+00 + 3.35294177e+00 3.34828146e+00 3.34359975e+00 3.33889733e+00 3.33417485e+00 + 3.32943298e+00 3.32467235e+00 3.31989358e+00 3.31509730e+00 3.31028410e+00 + 3.30545456e+00 3.30060926e+00 3.29574877e+00 3.29087362e+00 3.28598437e+00 + 3.28108153e+00 3.27616563e+00 3.27123716e+00 3.26629662e+00 3.26134448e+00 + 3.25638123e+00 3.25140733e+00 3.24642321e+00 3.24142933e+00 3.23642612e+00 + 3.23141399e+00 3.22639337e+00 3.22136464e+00 3.21632821e+00 3.21128447e+00 + 3.20623378e+00 3.20117652e+00 3.19611304e+00 3.19104371e+00 3.18596885e+00 + 3.18088881e+00 3.17580392e+00 3.17071449e+00 3.16562085e+00 3.16052328e+00 + 3.15542211e+00 3.15031760e+00 3.14521006e+00 3.14009976e+00 3.13498697e+00 + 3.12987197e+00 3.12475499e+00 3.11963632e+00 3.11451618e+00 3.10939482e+00 + 3.10427248e+00 3.09914938e+00 3.09402576e+00 3.08890183e+00 3.08377781e+00 + 3.07865391e+00 3.07353033e+00 3.06840726e+00 3.06328491e+00 3.05816347e+00 + 3.05304312e+00 3.04792404e+00 3.04280640e+00 3.03769039e+00 3.03257616e+00 + 3.02746388e+00 3.02235372e+00 3.01724582e+00 3.01214034e+00 3.00703743e+00 + 3.00193723e+00 2.99683988e+00 2.99174552e+00 2.98665429e+00 2.98156632e+00 + 2.97648172e+00 2.97140063e+00 2.96632317e+00 2.96124945e+00 2.95617960e+00 + 2.95111371e+00 2.94605191e+00 2.94099429e+00 2.93594097e+00 2.93089203e+00 + 2.92584759e+00 2.92080773e+00 2.91577254e+00 2.91074213e+00 2.90571657e+00 + 2.90069596e+00 2.89568037e+00 2.89066989e+00 2.88566460e+00 2.88066457e+00 + 2.87566987e+00 2.87068059e+00 2.86569679e+00 2.86071855e+00 2.85574592e+00 + 2.85077897e+00 2.84581777e+00 2.84086238e+00 2.83591285e+00 2.83096925e+00 + 2.82603163e+00 2.82110005e+00 2.81617456e+00 2.81125521e+00 2.80634205e+00 + 2.80143513e+00 2.79653450e+00 2.79164020e+00 2.78675227e+00 2.78187077e+00 + 2.77699573e+00 2.77212719e+00 2.76726520e+00 2.76240978e+00 2.75756098e+00 + 2.75271883e+00 2.74788336e+00 2.74305462e+00 2.73823262e+00 2.73341741e+00 + 2.72860901e+00 2.72380745e+00 2.71901276e+00 2.71422497e+00 2.70944410e+00 + 2.70467018e+00 2.69990323e+00 2.69514328e+00 2.69039035e+00 2.68564445e+00 + 2.68090562e+00 2.67617386e+00 2.67144921e+00 2.66673167e+00 2.66202127e+00 + 2.65731803e+00 2.65262195e+00 2.64793306e+00 2.64325137e+00 2.63857689e+00 + 2.63390964e+00 2.62924963e+00 2.62459688e+00 2.61995139e+00 2.61531318e+00 + 2.61068225e+00 2.60605863e+00 2.60144230e+00 2.59683330e+00 2.59223161e+00 + 2.58763726e+00 2.58305025e+00 2.57847059e+00 2.57389828e+00 2.56933332e+00 + 2.56477573e+00 2.56022551e+00 2.55568267e+00 2.55114720e+00 2.54661911e+00 + 2.54209841e+00 2.53758510e+00 2.53307918e+00 2.52858066e+00 2.52408953e+00 + 2.51960579e+00 2.51512946e+00 2.51066052e+00 2.50619899e+00 2.50174486e+00 + 2.49729812e+00 2.49285879e+00 2.48842685e+00 2.48400232e+00 2.47958518e+00 + 2.47517543e+00 2.47077309e+00 2.46637813e+00 2.46199056e+00 2.45761038e+00 + 2.45323759e+00 2.44887217e+00 2.44451414e+00 2.44016348e+00 2.43582019e+00 + 2.43148426e+00 2.42715571e+00 2.42283451e+00 2.41852066e+00 2.41421416e+00 + 2.40991501e+00 2.40562320e+00 2.40133873e+00 2.39706158e+00 2.39279176e+00 + 2.38852925e+00 2.38427406e+00 2.38002617e+00 2.37578559e+00 2.37155229e+00 + 2.36732629e+00 2.36310756e+00 2.35889611e+00 2.35469192e+00 2.35049500e+00 + 2.34630533e+00 2.34212290e+00 2.33794771e+00 2.33377975e+00 2.32961902e+00 + 2.32546550e+00 2.32131918e+00 2.31718007e+00 2.31304815e+00 2.30892341e+00 + 2.30480585e+00 2.30069545e+00 2.29659221e+00 2.29249613e+00 2.28840718e+00 + 2.28432536e+00 2.28025067e+00 2.27618310e+00 2.27212263e+00 2.26806926e+00 + 2.26402298e+00 2.25998377e+00 2.25595164e+00 2.25192657e+00 2.24790854e+00 + 2.24389756e+00 2.23989362e+00 2.23589669e+00 2.23190679e+00 2.22792388e+00 + 2.22394797e+00 2.21997904e+00 2.21601709e+00 2.21206211e+00 2.20811408e+00 + 2.20417300e+00 2.20023885e+00 2.19631163e+00 2.19239132e+00 2.18847792e+00 + 2.18457142e+00 2.18067180e+00 2.17677906e+00 2.17289318e+00 2.16901416e+00 + 2.16514198e+00 2.16127664e+00 2.15741813e+00 2.15356642e+00 2.14972153e+00 + 2.14588342e+00 2.14205210e+00 2.13822755e+00 2.13440977e+00 2.13059873e+00 + 2.12679444e+00 2.12299688e+00 2.11920604e+00 2.11542191e+00 2.11164448e+00 + 2.10787374e+00 2.10410968e+00 2.10035229e+00 2.09660155e+00 2.09285746e+00 + 2.08912001e+00 2.08538918e+00 2.08166497e+00 2.07794736e+00 2.07423635e+00 + 2.07053191e+00 2.06683406e+00 2.06314276e+00 2.05945801e+00 2.05577981e+00 + 2.05210813e+00 2.04844298e+00 2.04478433e+00 2.04113218e+00 2.03748651e+00 + 2.03384733e+00 2.03021461e+00 2.02658834e+00 2.02296852e+00 2.01935513e+00 + 2.01574817e+00 2.01214761e+00 2.00855346e+00 2.00496570e+00 2.00138432e+00 + 1.99780931e+00 1.99424066e+00 1.99067835e+00 1.98712239e+00 1.98357275e+00 + 1.98002942e+00 1.97649240e+00 1.97296168e+00 1.96943724e+00 1.96591907e+00 + 1.96240717e+00 1.95890152e+00 1.95540211e+00 1.95190893e+00 1.94842197e+00 + 1.94494122e+00 1.94146667e+00 1.93799831e+00 1.93453613e+00 1.93108011e+00 + 1.92763025e+00 1.92418654e+00 1.92074896e+00 1.91731750e+00 1.91389217e+00 + 1.91047293e+00 1.90705979e+00 1.90365273e+00 1.90025175e+00 1.89685682e+00 + 1.89346795e+00 1.89008512e+00 1.88670832e+00 1.88333754e+00 1.87997276e+00 + 1.87661399e+00 1.87326121e+00 1.86991440e+00 1.86657357e+00 1.86323869e+00 + 1.85990976e+00 1.85658676e+00 1.85326969e+00 1.84995854e+00 1.84665329e+00 + 1.84335394e+00 1.84006048e+00 1.83677289e+00 1.83349116e+00 1.83021529e+00 + 1.82694527e+00 1.82368107e+00 1.82042271e+00 1.81717015e+00 1.81392340e+00 + 1.81068244e+00 1.80744727e+00 1.80421786e+00 1.80099422e+00 1.79777634e+00 + 1.79456419e+00 1.79135778e+00 1.78815710e+00 1.78496212e+00 1.78177285e+00 + 1.77858926e+00 1.77541136e+00 1.77223914e+00 1.76907257e+00 1.76591166e+00 + 1.76275639e+00 1.75960675e+00 1.75646274e+00 1.75332434e+00 1.75019154e+00 + 1.74706433e+00 1.74394271e+00 1.74082665e+00 1.73771617e+00 1.73461123e+00 + 1.73151184e+00 1.72841799e+00 1.72532965e+00 1.72224683e+00 1.71916952e+00 + 1.71609770e+00 1.71303137e+00 1.70997051e+00 1.70691511e+00 1.70386518e+00 + 1.70082068e+00 1.69778163e+00 1.69474800e+00 1.69171979e+00 1.68869699e+00 + 1.68567958e+00 1.68266757e+00 1.67966093e+00 1.67665967e+00 1.67366376e+00 + 1.67067320e+00 1.66768799e+00 1.66470810e+00 1.66173354e+00 1.65876429e+00 + 1.65580034e+00 1.65284169e+00 1.64988832e+00 1.64694023e+00 1.64399740e+00 + 1.64105983e+00 1.63812751e+00 1.63520042e+00 1.63227856e+00 1.62936192e+00 + 1.62645049e+00 1.62354426e+00 1.62064322e+00 1.61774737e+00 1.61485669e+00 + 1.61197117e+00 1.60909080e+00 1.60621558e+00 1.60334550e+00 1.60048054e+00 + 1.59762070e+00 1.59476597e+00 1.59191634e+00 1.58907180e+00 1.58623234e+00 + 1.58339795e+00 1.58056863e+00 1.57774436e+00 1.57492513e+00 1.57211094e+00 + 1.56930178e+00 1.56649764e+00 1.56369851e+00 1.56090438e+00 1.55811524e+00 + 1.55533108e+00 1.55255190e+00 1.54977768e+00 1.54700842e+00 1.54424410e+00 + 1.54148473e+00 1.53873028e+00 1.53598076e+00 1.53323614e+00 1.53049643e+00 + 1.52776162e+00 1.52503169e+00 1.52230664e+00 1.51958646e+00 1.51687113e+00 + 1.51416066e+00 1.51145503e+00 1.50875424e+00 1.50605826e+00 1.50336711e+00 + 1.50068077e+00 1.49799922e+00 1.49532247e+00 1.49265049e+00 1.48998329e+00 + 1.48732086e+00 1.48466319e+00 1.48201026e+00 1.47936207e+00 1.47671861e+00 + 1.47407988e+00 1.47144586e+00 1.46881655e+00 1.46619193e+00 1.46357201e+00 + 1.46095676e+00 1.45834619e+00 1.45574029e+00 1.45313903e+00 1.45054243e+00 + 1.44795047e+00 1.44536313e+00 1.44278042e+00 1.44020233e+00 1.43762884e+00 + 1.43505995e+00 1.43249565e+00 1.42993593e+00 1.42738079e+00 1.42483021e+00 + 1.42228418e+00 1.41974271e+00 1.41720578e+00 1.41467338e+00 1.41214550e+00 + 1.40962214e+00 1.40710330e+00 1.40458895e+00 1.40207909e+00 1.39957372e+00 + 1.39707283e+00 1.39457640e+00 1.39208443e+00 1.38959692e+00 1.38711385e+00 + 1.38463522e+00 1.38216102e+00 1.37969124e+00 1.37722587e+00 1.37476490e+00 + 1.37230834e+00 1.36985616e+00 1.36740837e+00 1.36496495e+00 1.36252589e+00 + 1.36009119e+00 1.35766085e+00 1.35523484e+00 1.35281317e+00 1.35039583e+00 + 1.34798281e+00 1.34557410e+00 1.34316969e+00 1.34076958e+00 1.33837375e+00 + 1.33598221e+00 1.33359495e+00 1.33121194e+00 1.32883320e+00 1.32645870e+00 + 1.32408845e+00 1.32172244e+00 1.31936065e+00 1.31700308e+00 1.31464973e+00 + 1.31230058e+00 1.30995562e+00 1.30761486e+00 1.30527828e+00 1.30294588e+00 + 1.30061764e+00 1.29829356e+00 1.29597364e+00 1.29365786e+00 1.29134622e+00 + 1.28903871e+00 1.28673532e+00 1.28443605e+00 1.28214089e+00 1.27984983e+00 + 1.27756286e+00 1.27527998e+00 1.27300118e+00 1.27072645e+00 1.26845578e+00 + 1.26618917e+00 1.26392662e+00 1.26166810e+00 1.25941362e+00 1.25716317e+00 + 1.25491674e+00 1.25267433e+00 1.25043592e+00 1.24820151e+00 1.24597109e+00 + 1.24374466e+00 1.24152221e+00 1.23930373e+00 1.23708921e+00 1.23487865e+00 + 1.23267204e+00 1.23046938e+00 1.22827064e+00 1.22607584e+00 1.22388496e+00 + 1.22169800e+00 1.21951494e+00 1.21733578e+00 1.21516052e+00 1.21298915e+00 + 1.21082165e+00 1.20865803e+00 1.20649827e+00 1.20434237e+00 1.20219033e+00 + 1.20004213e+00 1.19789777e+00 1.19575724e+00 1.19362053e+00 1.19148765e+00 + 1.18935857e+00 1.18723330e+00 1.18511183e+00 1.18299415e+00 1.18088025e+00 + 1.17877013e+00 1.17666378e+00 1.17456119e+00 1.17246236e+00 1.17036728e+00 + 1.16827595e+00 1.16618835e+00 1.16410448e+00 1.16202434e+00 1.15994791e+00 + 1.15787520e+00 1.15580618e+00 1.15374087e+00 1.15167924e+00 1.14962130e+00 + 1.14756704e+00 1.14551644e+00 1.14346951e+00 1.14142624e+00 1.13938662e+00 + 1.13735064e+00 1.13531831e+00 1.13328960e+00 1.13126452e+00 1.12924306e+00 + 1.12722521e+00 1.12521096e+00 1.12320032e+00 1.12119326e+00 1.11918980e+00 + 1.11718991e+00 1.11519360e+00 1.11320085e+00 1.11121167e+00 1.10922604e+00 + 1.10724396e+00 1.10526542e+00 1.10329041e+00 1.10131893e+00 1.09935098e+00 + 1.09738655e+00 1.09542562e+00 1.09346820e+00 1.09151427e+00 1.08956384e+00 + 1.08761689e+00 1.08567342e+00 1.08373343e+00 1.08179690e+00 1.07986383e+00 + 1.07793421e+00 1.07600805e+00 1.07408532e+00 1.07216603e+00 1.07025017e+00 + 1.06833774e+00 1.06642872e+00 1.06452311e+00 1.06262091e+00 1.06072211e+00 + 1.05882670e+00 1.05693467e+00 1.05504603e+00 1.05316076e+00 1.05127886e+00 + 1.04940033e+00 1.04752515e+00 1.04565332e+00 1.04378484e+00 1.04191969e+00 + 1.04005788e+00 1.03819939e+00 1.03634423e+00 1.03449238e+00 1.03264384e+00 + 1.03079860e+00 1.02895666e+00 1.02711801e+00 1.02528265e+00 1.02345057e+00 + 1.02162176e+00 1.01979621e+00 1.01797393e+00 1.01615491e+00 1.01433914e+00 + 1.01252661e+00 1.01071732e+00 1.00891126e+00 1.00710843e+00 1.00530883e+00 + 1.00351243e+00 1.00171925e+00 9.99929274e-01 9.98142494e-01 9.96358908e-01 + 9.94578508e-01 9.92801290e-01 9.91027248e-01 9.89256375e-01 9.87488667e-01 + 9.85724118e-01 9.83962722e-01 9.82204473e-01 9.80449366e-01 9.78697395e-01 + 9.76948555e-01 9.75202840e-01 9.73460244e-01 9.71720763e-01 9.69984389e-01 + 9.68251118e-01 9.66520945e-01 9.64793863e-01 9.63069867e-01 9.61348952e-01 + 9.59631112e-01 9.57916341e-01 9.56204635e-01 9.54495987e-01 9.52790393e-01 + 9.51087846e-01 9.49388341e-01 9.47691874e-01 9.45998438e-01 9.44308027e-01 + 9.42620638e-01 9.40936263e-01 9.39254899e-01 9.37576539e-01 9.35901178e-01 + 9.34228810e-01 9.32559431e-01 9.30893035e-01 9.29229617e-01 9.27569171e-01 + 9.25911692e-01 9.24257175e-01 9.22605615e-01 9.20957005e-01 9.19311342e-01 + 9.17668619e-01 9.16028831e-01 9.14391974e-01 9.12758042e-01 9.11127029e-01 + 9.09498931e-01 9.07873742e-01 9.06251457e-01 9.04632071e-01 9.03015578e-01 + 9.01401974e-01 8.99791254e-01 8.98183411e-01 8.96578442e-01 8.94976341e-01 + 8.93377102e-01 8.91780721e-01 8.90187193e-01 8.88596512e-01 8.87008674e-01 + 8.85423673e-01 8.83841504e-01 8.82262163e-01 8.80685643e-01 8.79111941e-01 + 8.77541050e-01 8.75972967e-01 8.74407686e-01 8.72845201e-01 8.71285509e-01 + 8.69728604e-01 8.68174481e-01 8.66623135e-01 8.65074560e-01 8.63528754e-01 + 8.61985709e-01 8.60445422e-01 8.58907887e-01 8.57373099e-01 8.55841054e-01 + 8.54311746e-01 8.52785172e-01 8.51261325e-01 8.49740201e-01 8.48201192e-01 + 8.46617382e-01 8.44988908e-01 8.43316032e-01 8.41599021e-01 8.39838147e-01 + 8.38033686e-01 8.36185917e-01 8.34295124e-01 8.32361596e-01 8.30385625e-01 + 8.28367507e-01 8.26307542e-01 8.24206035e-01 8.22063293e-01 8.19879628e-01 + 8.17655357e-01 8.15390797e-01 8.13086273e-01 8.10742111e-01 8.08358641e-01 + 8.05936196e-01 8.03475115e-01 8.00975736e-01 7.98438405e-01 7.95863469e-01 + 7.93251278e-01 7.90602186e-01 7.87916549e-01 7.85194728e-01 7.82437085e-01 + 7.79643987e-01 7.76815803e-01 7.73952904e-01 7.71055665e-01 7.68124463e-01 + 7.65159679e-01 7.62161696e-01 7.59130898e-01 7.56067674e-01 7.52972415e-01 + 7.49845513e-01 7.46687363e-01 7.43498364e-01 7.40278916e-01 7.37029420e-01 + 7.33750281e-01 7.30441906e-01 7.27104703e-01 7.23739083e-01 7.20345459e-01 + 7.16924244e-01 7.13475856e-01 7.10000712e-01 7.06499233e-01 7.02971840e-01 + 6.99418956e-01 6.95841006e-01 6.92238416e-01 6.88611614e-01 6.84961030e-01 + 6.81287093e-01 6.77590236e-01 6.73870892e-01 6.70129494e-01 6.66366479e-01 + 6.62582283e-01 6.58777343e-01 6.54952099e-01 6.51106988e-01 6.47242453e-01 + 6.43358933e-01 6.39456870e-01 6.35536708e-01 6.31598889e-01 6.27643857e-01 + 6.23672057e-01 6.19683933e-01 6.15679931e-01 6.11660495e-01 6.07626073e-01 + 6.03577111e-01 5.99514054e-01 5.95437349e-01 5.91347444e-01 5.87244785e-01 + 5.83129819e-01 5.79002992e-01 5.74864752e-01 5.70715544e-01 5.66555816e-01 + 5.62386013e-01 5.58206581e-01 5.54017965e-01 5.49820611e-01 5.45614964e-01 + 5.41401466e-01 5.37180563e-01 5.32952696e-01 5.28718309e-01 5.24477842e-01 + 5.20231737e-01 5.15980433e-01 5.11724371e-01 5.07463987e-01 5.03199721e-01 + 4.98932007e-01 4.94661282e-01 4.90387980e-01 4.86112534e-01 4.81835376e-01 + 4.77556936e-01 4.73277645e-01 4.68997930e-01 4.64718219e-01 4.60438936e-01 + 4.56160507e-01 4.51883352e-01 4.47607894e-01 4.43334552e-01 4.39063743e-01 + 4.34795884e-01 4.30531389e-01 4.26270671e-01 4.22014140e-01 4.17762207e-01 + 4.13515277e-01 4.09273757e-01 4.05038049e-01 4.00808555e-01 3.96585674e-01 + 3.92369804e-01 3.88161340e-01 3.83960674e-01 3.79768198e-01 3.75584299e-01 + 3.71409365e-01 3.67243780e-01 3.63087924e-01 3.58942178e-01 3.54806918e-01 + 3.50682519e-01 3.46569353e-01 3.42467789e-01 3.38378195e-01 3.34300933e-01 + 3.30236368e-01 3.26184857e-01 3.22146757e-01 3.18122421e-01 3.14112201e-01 + 3.10116445e-01 3.06135499e-01 3.02169705e-01 2.98219402e-01 2.94284928e-01 + 2.90366616e-01 2.86464798e-01 2.82579801e-01 2.78711951e-01 2.74861569e-01 + 2.71028975e-01 2.67214484e-01 2.63418409e-01 2.59641060e-01 2.55882743e-01 + 2.52143761e-01 2.48424414e-01 2.44725000e-01 2.41045812e-01 2.37387139e-01 + 2.33749270e-01 2.30132488e-01 2.26537072e-01 2.22963301e-01 2.19411448e-01 + 2.15881782e-01 2.12374571e-01 2.08890078e-01 2.05428563e-01 2.01990283e-01 + 1.98575490e-01 1.95184433e-01 1.91817359e-01 1.88474510e-01 1.85156124e-01 + 1.81862438e-01 1.78593682e-01 1.75350084e-01 1.72131869e-01 1.68939258e-01 + 1.65772468e-01 1.62631713e-01 1.59517201e-01 1.56429140e-01 1.53367731e-01 + 1.50333174e-01 1.47325663e-01 1.44345390e-01 1.41392542e-01 1.38467304e-01 + 1.35569855e-01 1.32700372e-01 1.29859028e-01 1.27045990e-01 1.24261425e-01 + 1.21505494e-01 1.18778353e-01 1.16080157e-01 1.13411056e-01 1.10771196e-01 + 1.08160719e-01 1.05579764e-01 1.03028466e-01 1.00506954e-01 9.80153575e-02 + 9.55537985e-02 9.31223968e-02 9.07212680e-02 8.83505241e-02 8.60102730e-02 + 8.37006190e-02 8.14216626e-02 7.91735004e-02 7.69562251e-02 7.47699258e-02 + 7.26146878e-02 7.04905924e-02 6.83977173e-02 6.63361363e-02 6.43059195e-02 + 6.23071332e-02 6.03398398e-02 5.84040982e-02 5.64999633e-02 5.46274863e-02 + 5.27867148e-02 5.09776925e-02 4.92004594e-02 4.74550517e-02 4.57415023e-02 + 4.40598398e-02 4.24100894e-02 4.07922728e-02 3.92064078e-02 3.76525084e-02 + 3.61305853e-02 3.46406454e-02 3.31826918e-02 3.17567243e-02 3.03627389e-02 + 2.90007281e-02 2.76706807e-02 2.63725820e-02 2.51064140e-02 2.38721547e-02 + 2.26697789e-02 2.14992579e-02 2.03605594e-02 1.92536477e-02 1.81784835e-02 + 1.71350243e-02 1.61232240e-02 1.51430332e-02 1.41943991e-02 1.32772654e-02 + 1.23915726e-02 1.15372579e-02 1.07142551e-02 9.92249463e-03 9.16190382e-03 + 8.43240666e-03 7.73392391e-03 7.06637314e-03 6.42966871e-03 5.82372182e-03 + 5.24844054e-03 4.70372977e-03 4.18949135e-03 3.70562400e-03 3.25202343e-03 + 2.82858225e-03 2.43519012e-03 2.07173366e-03 1.73809655e-03 1.43415952e-03 + 1.15980039e-03 9.14894082e-04 6.99312635e-04 5.12925259e-04 3.55598341e-04 + 2.27195472e-04 1.27577478e-04 5.66024399e-05 1.41257221e-05 0.00000000e+00 + 5.11971098e-01 5.11971098e-01 5.17242510e-01 5.23233505e-01 5.29293369e-01 + 5.35422881e-01 5.41622827e-01 5.47894004e-01 5.54237214e-01 5.60653272e-01 + 5.67142999e-01 5.73707225e-01 5.80346789e-01 5.87062542e-01 5.93855339e-01 + 6.00726049e-01 6.07675547e-01 6.14704719e-01 6.21814461e-01 6.29005677e-01 + 6.36279282e-01 6.43636201e-01 6.51077366e-01 6.58603723e-01 6.66216226e-01 + 6.73915839e-01 6.81703537e-01 6.89580304e-01 6.97547137e-01 7.05605040e-01 + 7.13755031e-01 7.21998138e-01 7.30335397e-01 7.38767858e-01 7.47296582e-01 + 7.55922638e-01 7.64647111e-01 7.73471093e-01 7.82395690e-01 7.91422019e-01 + 8.00551207e-01 8.09784394e-01 8.19122734e-01 8.28567388e-01 8.38119534e-01 + 8.47780359e-01 8.57551064e-01 8.67432860e-01 8.77426973e-01 8.87534640e-01 + 8.97757111e-01 9.08095650e-01 9.18551533e-01 9.29126046e-01 9.39820494e-01 + 9.50636190e-01 9.61574463e-01 9.72636655e-01 9.83824120e-01 9.95138227e-01 + 1.00658036e+00 1.01815191e+00 1.02985430e+00 1.04168894e+00 1.05365727e+00 + 1.06576075e+00 1.07800084e+00 1.09037902e+00 1.10289680e+00 1.11555567e+00 + 1.12835717e+00 1.14130283e+00 1.15439422e+00 1.16763289e+00 1.18102044e+00 + 1.19455846e+00 1.20824858e+00 1.22209242e+00 1.23609162e+00 1.25024786e+00 + 1.26456280e+00 1.27903815e+00 1.29367562e+00 1.30847692e+00 1.32344380e+00 + 1.33857802e+00 1.35388135e+00 1.36935559e+00 1.38500254e+00 1.40082403e+00 + 1.41682189e+00 1.43299799e+00 1.44935419e+00 1.46589240e+00 1.48261451e+00 + 1.49952245e+00 1.51661817e+00 1.53390362e+00 1.55138079e+00 1.56905166e+00 + 1.58691825e+00 1.60498258e+00 1.62324671e+00 1.64171270e+00 1.66038262e+00 + 1.67925859e+00 1.69834272e+00 1.71763713e+00 1.73714400e+00 1.75686548e+00 + 1.77680377e+00 1.79696108e+00 1.81733963e+00 1.83794166e+00 1.85876944e+00 + 1.87982524e+00 1.90111137e+00 1.92263014e+00 1.94438389e+00 1.96637497e+00 + 1.98860574e+00 2.01107861e+00 2.03379597e+00 2.05676026e+00 2.07997391e+00 + 2.10343939e+00 2.12715919e+00 2.15113579e+00 2.17537172e+00 2.19986952e+00 + 2.22463173e+00 2.24966092e+00 2.27495969e+00 2.30053064e+00 2.32637640e+00 + 2.35249962e+00 2.37890294e+00 2.40558905e+00 2.43256065e+00 2.45982045e+00 + 2.48737117e+00 2.51521557e+00 2.54335641e+00 2.57179648e+00 2.60053857e+00 + 2.62958549e+00 2.65894009e+00 2.68860520e+00 2.71858370e+00 2.74887845e+00 + 2.77949237e+00 2.81042835e+00 2.84168934e+00 2.87327827e+00 2.90519809e+00 + 2.93745179e+00 2.97004235e+00 3.00297276e+00 3.03624605e+00 3.06986525e+00 + 3.10383339e+00 3.13815354e+00 3.17282876e+00 3.20786213e+00 3.24325674e+00 + 3.27901571e+00 3.31514214e+00 3.35163917e+00 3.38850993e+00 3.42575757e+00 + 3.46338525e+00 3.50139614e+00 3.53979341e+00 3.57858025e+00 3.61775985e+00 + 3.65733542e+00 3.69731016e+00 3.73768729e+00 3.77847002e+00 3.81966159e+00 + 3.86126523e+00 3.90328416e+00 3.94572164e+00 3.98858089e+00 4.03186518e+00 + 4.07557773e+00 4.11972181e+00 4.16430066e+00 4.20931753e+00 4.25477566e+00 + 4.30067831e+00 4.34702870e+00 4.39383010e+00 4.44108572e+00 4.48879881e+00 + 4.53697258e+00 4.58561026e+00 4.63471506e+00 4.68429018e+00 4.73433881e+00 + 4.78486415e+00 4.83586936e+00 4.88735761e+00 4.93933204e+00 4.99179578e+00 + 5.04475196e+00 5.09820369e+00 5.15215403e+00 5.20660607e+00 5.26156285e+00 + 5.31702739e+00 5.37300271e+00 5.42949179e+00 5.48649757e+00 5.54402301e+00 + 5.60207099e+00 5.66064441e+00 5.71974611e+00 5.77937891e+00 5.83954559e+00 + 5.90024891e+00 5.96149159e+00 6.02327631e+00 6.08560572e+00 6.14848241e+00 + 6.21190897e+00 6.27588790e+00 6.34042169e+00 6.40551278e+00 6.47116356e+00 + 6.53737636e+00 6.60415348e+00 6.67149715e+00 6.73940957e+00 6.80789285e+00 + 6.87694909e+00 6.94658030e+00 7.01678842e+00 7.08757537e+00 7.15894297e+00 + 7.23089300e+00 7.30342714e+00 7.37654704e+00 7.45025425e+00 7.52455027e+00 + 7.59943651e+00 7.67491431e+00 7.75098493e+00 7.82764955e+00 7.90490929e+00 + 7.98276514e+00 8.06121804e+00 8.14026884e+00 8.21991829e+00 8.30016706e+00 + 8.38101571e+00 8.46246472e+00 8.54451447e+00 8.62716524e+00 8.71041720e+00 + 8.79427042e+00 8.87872489e+00 8.96378046e+00 9.04943689e+00 9.13569381e+00 + 9.22255077e+00 9.31000717e+00 9.39806232e+00 9.48671539e+00 9.57596544e+00 + 9.66581142e+00 9.75625214e+00 9.84728628e+00 9.93891240e+00 1.00311289e+01 + 1.01239342e+01 1.02173263e+01 1.03113033e+01 1.04058631e+01 1.05010035e+01 + 1.05967220e+01 1.06930162e+01 1.07898833e+01 1.08873205e+01 1.09853250e+01 + 1.10838934e+01 1.11830227e+01 1.12827094e+01 1.13829499e+01 1.14837404e+01 + 1.15850772e+01 1.16869562e+01 1.17893732e+01 1.18923238e+01 1.19958035e+01 + 1.20998077e+01 1.22043314e+01 1.23093699e+01 1.24149177e+01 1.25209698e+01 + 1.26275204e+01 1.27345640e+01 1.28420948e+01 1.29501068e+01 1.30585938e+01 + 1.31675494e+01 1.32769672e+01 1.33868405e+01 1.34971625e+01 1.36079262e+01 + 1.37191244e+01 1.38307497e+01 1.39427946e+01 1.40552516e+01 1.41681126e+01 + 1.42813698e+01 1.43950148e+01 1.45090394e+01 1.46234351e+01 1.47381932e+01 + 1.48533048e+01 1.49687609e+01 1.50845524e+01 1.52006699e+01 1.53171040e+01 + 1.54338449e+01 1.55508829e+01 1.56682081e+01 1.57858103e+01 1.59036792e+01 + 1.60218045e+01 1.61401756e+01 1.62587818e+01 1.63776122e+01 1.64966559e+01 + 1.66159016e+01 1.67353383e+01 1.68549545e+01 1.69747385e+01 1.70946789e+01 + 1.72147639e+01 1.73349814e+01 1.74553195e+01 1.75757662e+01 1.76963091e+01 + 1.78169358e+01 1.79376340e+01 1.80583911e+01 1.81791944e+01 1.83000312e+01 + 1.84208886e+01 1.85417538e+01 1.86626136e+01 1.87834551e+01 1.89042651e+01 + 1.90250303e+01 1.91457375e+01 1.92663733e+01 1.93869243e+01 1.95073771e+01 + 1.96277181e+01 1.97479338e+01 1.98680106e+01 1.99879349e+01 2.01076930e+01 + 2.02272714e+01 2.03466562e+01 2.04658338e+01 2.05847906e+01 2.07035127e+01 + 2.08219864e+01 2.09401981e+01 2.10581341e+01 2.11757807e+01 2.12931242e+01 + 2.14101510e+01 2.15268475e+01 2.16432002e+01 2.17591956e+01 2.18748201e+01 + 2.19900603e+01 2.21049030e+01 2.22193347e+01 2.23333424e+01 2.24469127e+01 + 2.25600327e+01 2.26726893e+01 2.27848696e+01 2.28965608e+01 2.30077502e+01 + 2.31184251e+01 2.32285731e+01 2.33381817e+01 2.34472387e+01 2.35557318e+01 + 2.36636490e+01 2.37709785e+01 2.38777084e+01 2.39838270e+01 2.40893229e+01 + 2.41941847e+01 2.42984012e+01 2.44019613e+01 2.45048542e+01 2.46070690e+01 + 2.47085951e+01 2.48094223e+01 2.49095401e+01 2.50089387e+01 2.51076079e+01 + 2.52055383e+01 2.53027201e+01 2.53991441e+01 2.54948011e+01 2.55896821e+01 + 2.56837784e+01 2.57770813e+01 2.58695826e+01 2.59612740e+01 2.60521475e+01 + 2.61421953e+01 2.62314100e+01 2.63197840e+01 2.64073104e+01 2.64939820e+01 + 2.65797922e+01 2.66647345e+01 2.67488026e+01 2.68319902e+01 2.69142917e+01 + 2.69957012e+01 2.70762134e+01 2.71558231e+01 2.72345251e+01 2.73123147e+01 + 2.73891873e+01 2.74651386e+01 2.75401644e+01 2.76142607e+01 2.76874239e+01 + 2.77596504e+01 2.78309370e+01 2.79012805e+01 2.79706782e+01 2.80391273e+01 + 2.81066254e+01 2.81731704e+01 2.82387601e+01 2.83033927e+01 2.83670667e+01 + 2.84297807e+01 2.84915333e+01 2.85523238e+01 2.86121511e+01 2.86710148e+01 + 2.87289145e+01 2.87858498e+01 2.88418209e+01 2.88968278e+01 2.89508709e+01 + 2.90039508e+01 2.90560681e+01 2.91072238e+01 2.91574190e+01 2.92066549e+01 + 2.92549329e+01 2.93022546e+01 2.93486219e+01 2.93940365e+01 2.94385007e+01 + 2.94820167e+01 2.95245868e+01 2.95662136e+01 2.96068999e+01 2.96466484e+01 + 2.96854623e+01 2.97233446e+01 2.97602986e+01 2.97963278e+01 2.98314357e+01 + 2.98656260e+01 2.98989025e+01 2.99312691e+01 2.99627299e+01 2.99932890e+01 + 3.00229508e+01 3.00517197e+01 3.00796001e+01 3.01065967e+01 3.01327141e+01 + 3.01579573e+01 3.01823311e+01 3.02058406e+01 3.02284907e+01 3.02502868e+01 + 3.02712341e+01 3.02913379e+01 3.03106037e+01 3.03290370e+01 3.03466434e+01 + 3.03634285e+01 3.03793980e+01 3.03945578e+01 3.04089136e+01 3.04224715e+01 + 3.04352373e+01 3.04472170e+01 3.04584168e+01 3.04688428e+01 3.04785011e+01 + 3.04873979e+01 3.04955395e+01 3.05029321e+01 3.05095822e+01 3.05154960e+01 + 3.05206800e+01 3.05251405e+01 3.05288840e+01 3.05319170e+01 3.05342459e+01 + 3.05358773e+01 3.05368177e+01 3.05370737e+01 3.05366518e+01 3.05355586e+01 + 3.05338006e+01 3.05313844e+01 3.05283167e+01 3.05246041e+01 3.05202531e+01 + 3.05152703e+01 3.05096624e+01 3.05034359e+01 3.04965974e+01 3.04891535e+01 + 3.04811109e+01 3.04724759e+01 3.04632553e+01 3.04534556e+01 3.04430832e+01 + 3.04321448e+01 3.04206467e+01 3.04085955e+01 3.03959977e+01 3.03828596e+01 + 3.03691878e+01 3.03549885e+01 3.03402682e+01 3.03250332e+01 3.03092899e+01 + 3.02930445e+01 3.02763032e+01 3.02590725e+01 3.02413583e+01 3.02231670e+01 + 3.02045046e+01 3.01853773e+01 3.01657911e+01 3.01457522e+01 3.01252664e+01 + 3.01043398e+01 3.00829783e+01 3.00611878e+01 3.00389742e+01 3.00163433e+01 + 2.99933008e+01 2.99698526e+01 2.99460043e+01 2.99217616e+01 2.98971302e+01 + 2.98721155e+01 2.98467232e+01 2.98209588e+01 2.97948277e+01 2.97683353e+01 + 2.97414870e+01 2.97142882e+01 2.96867441e+01 2.96588599e+01 2.96306410e+01 + 2.96020923e+01 2.95732191e+01 2.95440265e+01 2.95145193e+01 2.94847027e+01 + 2.94545815e+01 2.94241606e+01 2.93934449e+01 2.93624392e+01 2.93311482e+01 + 2.92995767e+01 2.92677292e+01 2.92356105e+01 2.92032251e+01 2.91705775e+01 + 2.91376723e+01 2.91045137e+01 2.90711064e+01 2.90374545e+01 2.90035624e+01 + 2.89694344e+01 2.89350746e+01 2.89004873e+01 2.88656766e+01 2.88306465e+01 + 2.87954011e+01 2.87599444e+01 2.87242804e+01 2.86884129e+01 2.86523458e+01 + 2.86160830e+01 2.85796281e+01 2.85429851e+01 2.85061574e+01 2.84691489e+01 + 2.84319631e+01 2.83946035e+01 2.83570738e+01 2.83193774e+01 2.82815177e+01 + 2.82434981e+01 2.82053220e+01 2.81669928e+01 2.81285137e+01 2.80898879e+01 + 2.80511187e+01 2.80122092e+01 2.79731625e+01 2.79339818e+01 2.78946701e+01 + 2.78552303e+01 2.78156656e+01 2.77759787e+01 2.77361727e+01 2.76962503e+01 + 2.76562144e+01 2.76160678e+01 2.75758133e+01 2.75354535e+01 2.74949912e+01 + 2.74544289e+01 2.74137694e+01 2.73730151e+01 2.73321687e+01 2.72912326e+01 + 2.72502094e+01 2.72091014e+01 2.71679111e+01 2.71266408e+01 2.70852930e+01 + 2.70438699e+01 2.70023738e+01 2.69608070e+01 2.69191717e+01 2.68774700e+01 + 2.68357042e+01 2.67938764e+01 2.67519887e+01 2.67100431e+01 2.66680417e+01 + 2.66259866e+01 2.65838796e+01 2.65417228e+01 2.64995182e+01 2.64572675e+01 + 2.64149727e+01 2.63726356e+01 2.63302581e+01 2.62878419e+01 2.62453889e+01 + 2.62029007e+01 2.61603792e+01 2.61178259e+01 2.60752425e+01 2.60326308e+01 + 2.59899923e+01 2.59473287e+01 2.59046414e+01 2.58619321e+01 2.58192022e+01 + 2.57764534e+01 2.57336870e+01 2.56909045e+01 2.56481074e+01 2.56052971e+01 + 2.55624750e+01 2.55196424e+01 2.54768007e+01 2.54339513e+01 2.53910954e+01 + 2.53482344e+01 2.53053694e+01 2.52625019e+01 2.52196329e+01 2.51767637e+01 + 2.51338956e+01 2.50910296e+01 2.50481669e+01 2.50053088e+01 2.49624562e+01 + 2.49196103e+01 2.48767722e+01 2.48339430e+01 2.47911236e+01 2.47483152e+01 + 2.47055188e+01 2.46627353e+01 2.46199657e+01 2.45772111e+01 2.45344723e+01 + 2.44917503e+01 2.44490460e+01 2.44063604e+01 2.43636943e+01 2.43210485e+01 + 2.42784241e+01 2.42358217e+01 2.41932423e+01 2.41506866e+01 2.41081555e+01 + 2.40656497e+01 2.40231701e+01 2.39807174e+01 2.39382923e+01 2.38958957e+01 + 2.38535281e+01 2.38111904e+01 2.37688832e+01 2.37266073e+01 2.36843632e+01 + 2.36421517e+01 2.35999735e+01 2.35578291e+01 2.35157192e+01 2.34736444e+01 + 2.34316053e+01 2.33896025e+01 2.33476367e+01 2.33057084e+01 2.32638180e+01 + 2.32219664e+01 2.31801538e+01 2.31383810e+01 2.30966483e+01 2.30549564e+01 + 2.30133057e+01 2.29716968e+01 2.29301300e+01 2.28886060e+01 2.28471252e+01 + 2.28056879e+01 2.27642948e+01 2.27229461e+01 2.26816425e+01 2.26403842e+01 + 2.25991717e+01 2.25580054e+01 2.25168857e+01 2.24758130e+01 2.24347878e+01 + 2.23938102e+01 2.23528809e+01 2.23120000e+01 2.22711680e+01 2.22303851e+01 + 2.21896519e+01 2.21489685e+01 2.21083353e+01 2.20677526e+01 2.20272208e+01 + 2.19867401e+01 2.19463109e+01 2.19059334e+01 2.18656079e+01 2.18253348e+01 + 2.17851142e+01 2.17449465e+01 2.17048318e+01 2.16647706e+01 2.16247630e+01 + 2.15848092e+01 2.15449096e+01 2.15050643e+01 2.14652736e+01 2.14255376e+01 + 2.13858567e+01 2.13462310e+01 2.13066607e+01 2.12671461e+01 2.12276873e+01 + 2.11882845e+01 2.11489380e+01 2.11096478e+01 2.10704142e+01 2.10312374e+01 + 2.09921175e+01 2.09530546e+01 2.09140491e+01 2.08751009e+01 2.08362102e+01 + 2.07973773e+01 2.07586022e+01 2.07198851e+01 2.06812261e+01 2.06426254e+01 + 2.06040830e+01 2.05655991e+01 2.05271739e+01 2.04888074e+01 2.04504997e+01 + 2.04122511e+01 2.03740614e+01 2.03359310e+01 2.02978598e+01 2.02598479e+01 + 2.02218956e+01 2.01840027e+01 2.01461695e+01 2.01083960e+01 2.00706823e+01 + 2.00330285e+01 1.99954346e+01 1.99579007e+01 1.99204268e+01 1.98830132e+01 + 1.98456597e+01 1.98083665e+01 1.97711336e+01 1.97339610e+01 1.96968489e+01 + 1.96597973e+01 1.96228062e+01 1.95858756e+01 1.95490056e+01 1.95121963e+01 + 1.94754476e+01 1.94387597e+01 1.94021325e+01 1.93655660e+01 1.93290604e+01 + 1.92926155e+01 1.92562315e+01 1.92199084e+01 1.91836461e+01 1.91474447e+01 + 1.91113042e+01 1.90752247e+01 1.90392061e+01 1.90032484e+01 1.89673516e+01 + 1.89315158e+01 1.88957410e+01 1.88600271e+01 1.88243741e+01 1.87887821e+01 + 1.87532511e+01 1.87177809e+01 1.86823717e+01 1.86470234e+01 1.86117360e+01 + 1.85765095e+01 1.85413439e+01 1.85062392e+01 1.84711952e+01 1.84362122e+01 + 1.84012899e+01 1.83664284e+01 1.83316276e+01 1.82968876e+01 1.82622083e+01 + 1.82275897e+01 1.81930318e+01 1.81585344e+01 1.81240977e+01 1.80897215e+01 + 1.80554058e+01 1.80211507e+01 1.79869560e+01 1.79528217e+01 1.79187478e+01 + 1.78847342e+01 1.78507810e+01 1.78168880e+01 1.77830552e+01 1.77492826e+01 + 1.77155701e+01 1.76819177e+01 1.76483254e+01 1.76147930e+01 1.75813206e+01 + 1.75479081e+01 1.75145554e+01 1.74812625e+01 1.74480294e+01 1.74148559e+01 + 1.73817421e+01 1.73486879e+01 1.73156931e+01 1.72827579e+01 1.72498821e+01 + 1.72170656e+01 1.71843084e+01 1.71516105e+01 1.71189717e+01 1.70863920e+01 + 1.70538715e+01 1.70214099e+01 1.69890072e+01 1.69566634e+01 1.69243784e+01 + 1.68921522e+01 1.68599846e+01 1.68278756e+01 1.67958252e+01 1.67638333e+01 + 1.67318997e+01 1.67000245e+01 1.66682076e+01 1.66364489e+01 1.66047483e+01 + 1.65731058e+01 1.65415213e+01 1.65099947e+01 1.64785260e+01 1.64471150e+01 + 1.64157618e+01 1.63844662e+01 1.63532281e+01 1.63220476e+01 1.62909244e+01 + 1.62598586e+01 1.62288501e+01 1.61978987e+01 1.61670045e+01 1.61361673e+01 + 1.61053871e+01 1.60746637e+01 1.60439972e+01 1.60133874e+01 1.59828342e+01 + 1.59523377e+01 1.59218976e+01 1.58915139e+01 1.58611866e+01 1.58309155e+01 + 1.58007007e+01 1.57705419e+01 1.57404391e+01 1.57103923e+01 1.56804013e+01 + 1.56504661e+01 1.56205866e+01 1.55907628e+01 1.55609944e+01 1.55312816e+01 + 1.55016240e+01 1.54720218e+01 1.54424748e+01 1.54129829e+01 1.53835460e+01 + 1.53541641e+01 1.53248371e+01 1.52955649e+01 1.52663473e+01 1.52371844e+01 + 1.52080761e+01 1.51790222e+01 1.51500226e+01 1.51210774e+01 1.50921863e+01 + 1.50633494e+01 1.50345665e+01 1.50058375e+01 1.49771624e+01 1.49485411e+01 + 1.49199735e+01 1.48914595e+01 1.48629990e+01 1.48345920e+01 1.48062382e+01 + 1.47779378e+01 1.47496905e+01 1.47214964e+01 1.46933552e+01 1.46652670e+01 + 1.46372316e+01 1.46092489e+01 1.45813189e+01 1.45534415e+01 1.45256166e+01 + 1.44978440e+01 1.44701238e+01 1.44424559e+01 1.44148400e+01 1.43872762e+01 + 1.43597644e+01 1.43323045e+01 1.43048964e+01 1.42775400e+01 1.42502352e+01 + 1.42229819e+01 1.41957801e+01 1.41686296e+01 1.41415305e+01 1.41144825e+01 + 1.40874856e+01 1.40605397e+01 1.40336448e+01 1.40068007e+01 1.39800074e+01 + 1.39532647e+01 1.39265726e+01 1.38999310e+01 1.38733398e+01 1.38467989e+01 + 1.38203083e+01 1.37938678e+01 1.37674774e+01 1.37411369e+01 1.37148464e+01 + 1.36886056e+01 1.36624145e+01 1.36362731e+01 1.36101812e+01 1.35841388e+01 + 1.35581457e+01 1.35322019e+01 1.35063073e+01 1.34804618e+01 1.34546654e+01 + 1.34289178e+01 1.34032192e+01 1.33775692e+01 1.33519680e+01 1.33264153e+01 + 1.33009112e+01 1.32754555e+01 1.32500481e+01 1.32246889e+01 1.31993779e+01 + 1.31741150e+01 1.31489001e+01 1.31237331e+01 1.30986139e+01 1.30735424e+01 + 1.30485186e+01 1.30235423e+01 1.29986135e+01 1.29737321e+01 1.29488980e+01 + 1.29241112e+01 1.28993714e+01 1.28746788e+01 1.28500330e+01 1.28254342e+01 + 1.28008822e+01 1.27763769e+01 1.27519182e+01 1.27275060e+01 1.27031403e+01 + 1.26788210e+01 1.26545480e+01 1.26303212e+01 1.26061405e+01 1.25820059e+01 + 1.25579172e+01 1.25338743e+01 1.25098773e+01 1.24859260e+01 1.24620203e+01 + 1.24381601e+01 1.24143454e+01 1.23905761e+01 1.23668520e+01 1.23431732e+01 + 1.23195394e+01 1.22959508e+01 1.22724070e+01 1.22489082e+01 1.22254541e+01 + 1.22020448e+01 1.21786801e+01 1.21553599e+01 1.21320842e+01 1.21088529e+01 + 1.20856658e+01 1.20625230e+01 1.20394244e+01 1.20163698e+01 1.19933591e+01 + 1.19703924e+01 1.19474695e+01 1.19245903e+01 1.19017547e+01 1.18789628e+01 + 1.18562143e+01 1.18335092e+01 1.18108474e+01 1.17882289e+01 1.17656536e+01 + 1.17431214e+01 1.17206321e+01 1.16981858e+01 1.16757823e+01 1.16534217e+01 + 1.16311036e+01 1.16088283e+01 1.15865954e+01 1.15644050e+01 1.15422569e+01 + 1.15201512e+01 1.14980876e+01 1.14760662e+01 1.14540869e+01 1.14321495e+01 + 1.14102540e+01 1.13884004e+01 1.13665885e+01 1.13448182e+01 1.13230896e+01 + 1.13014025e+01 1.12797567e+01 1.12581524e+01 1.12365893e+01 1.12150674e+01 + 1.11935867e+01 1.11721470e+01 1.11507482e+01 1.11293904e+01 1.11080733e+01 + 1.10867970e+01 1.10655614e+01 1.10443663e+01 1.10232118e+01 1.10020977e+01 + 1.09810239e+01 1.09599905e+01 1.09389972e+01 1.09180441e+01 1.08971310e+01 + 1.08762579e+01 1.08554247e+01 1.08346313e+01 1.08138777e+01 1.07931638e+01 + 1.07724894e+01 1.07518546e+01 1.07312593e+01 1.07107033e+01 1.06901867e+01 + 1.06697093e+01 1.06492710e+01 1.06288718e+01 1.06085117e+01 1.05881904e+01 + 1.05679081e+01 1.05476645e+01 1.05274596e+01 1.05072934e+01 1.04871658e+01 + 1.04670766e+01 1.04470259e+01 1.04270135e+01 1.04070395e+01 1.03871036e+01 + 1.03672058e+01 1.03473462e+01 1.03275245e+01 1.03077407e+01 1.02879948e+01 + 1.02682866e+01 1.02486162e+01 1.02289834e+01 1.02093882e+01 1.01898304e+01 + 1.01703101e+01 1.01508271e+01 1.01313814e+01 1.01119729e+01 1.00926016e+01 + 1.00732673e+01 1.00539700e+01 1.00347096e+01 1.00154861e+01 9.99629938e+00 + 9.97714938e+00 9.95803602e+00 9.93895924e+00 9.91991896e+00 9.90091513e+00 + 9.88194766e+00 9.86301650e+00 9.84412157e+00 9.82526280e+00 9.80644012e+00 + 9.78765347e+00 9.76890278e+00 9.75018798e+00 9.73150899e+00 9.71286576e+00 + 9.69425822e+00 9.67568629e+00 9.65714991e+00 9.63864901e+00 9.62018353e+00 + 9.60175339e+00 9.58335854e+00 9.56499889e+00 9.54667439e+00 9.52838497e+00 + 9.51013056e+00 9.49191110e+00 9.47372652e+00 9.45557675e+00 9.43746172e+00 + 9.41938137e+00 9.40133564e+00 9.38332446e+00 9.36534776e+00 9.34740547e+00 + 9.32949754e+00 9.31162389e+00 9.29378447e+00 9.27597920e+00 9.25820801e+00 + 9.24047086e+00 9.22276766e+00 9.20509836e+00 9.18746289e+00 9.16986119e+00 + 9.15229319e+00 9.13475883e+00 9.11725804e+00 9.09979077e+00 9.08235693e+00 + 9.06495649e+00 9.04758936e+00 9.03025548e+00 9.01295480e+00 8.99568724e+00 + 8.97845276e+00 8.96125127e+00 8.94408272e+00 8.92694705e+00 8.90984419e+00 + 8.89277409e+00 8.87573667e+00 8.85873188e+00 8.84175965e+00 8.82481993e+00 + 8.80791264e+00 8.79103774e+00 8.77419515e+00 8.75738481e+00 8.74060667e+00 + 8.72386066e+00 8.70714672e+00 8.69046479e+00 8.67381480e+00 8.65719671e+00 + 8.64061044e+00 8.62405593e+00 8.60753313e+00 8.59104198e+00 8.57458240e+00 + 8.55815435e+00 8.54175777e+00 8.52539259e+00 8.50905875e+00 8.49275619e+00 + 8.47648486e+00 8.46024469e+00 8.44403563e+00 8.42785761e+00 8.41171057e+00 + 8.39559447e+00 8.37950923e+00 8.36345479e+00 8.34743111e+00 8.33143812e+00 + 8.31547576e+00 8.29954398e+00 8.28364271e+00 8.26777190e+00 8.25193148e+00 + 8.23612141e+00 8.22034162e+00 8.20459205e+00 8.18887265e+00 8.17318336e+00 + 8.15752412e+00 8.14189488e+00 8.12629557e+00 8.11072614e+00 8.09518654e+00 + 8.07967670e+00 8.06419657e+00 8.04874609e+00 8.03332521e+00 8.01793386e+00 + 8.00257200e+00 7.98723957e+00 7.97193650e+00 7.95666274e+00 7.94141825e+00 + 7.92620295e+00 7.91101680e+00 7.89585974e+00 7.88073172e+00 7.86563267e+00 + 7.85056255e+00 7.83552129e+00 7.82050885e+00 7.80552516e+00 7.79057018e+00 + 7.77564385e+00 7.76074610e+00 7.74587690e+00 7.73103618e+00 7.71622389e+00 + 7.70143997e+00 7.68668438e+00 7.67195705e+00 7.65725793e+00 7.64258697e+00 + 7.62794411e+00 7.61332931e+00 7.59874250e+00 7.58418364e+00 7.56965266e+00 + 7.55514952e+00 7.54067417e+00 7.52622655e+00 7.51180660e+00 7.49741427e+00 + 7.48304952e+00 7.46871229e+00 7.45440252e+00 7.44012017e+00 7.42586517e+00 + 7.41163749e+00 7.39743706e+00 7.38326383e+00 7.36911776e+00 7.35499879e+00 + 7.34090686e+00 7.32684193e+00 7.31280395e+00 7.29879286e+00 7.28480861e+00 + 7.27085115e+00 7.25692043e+00 7.24301640e+00 7.22913900e+00 7.21528819e+00 + 7.20146392e+00 7.18766613e+00 7.17389477e+00 7.16014979e+00 7.14643115e+00 + 7.13273879e+00 7.11907266e+00 7.10543272e+00 7.09181890e+00 7.07823116e+00 + 7.06466946e+00 7.05113374e+00 7.03762395e+00 7.02414004e+00 7.01068196e+00 + 6.99724967e+00 6.98384311e+00 6.97046224e+00 6.95710700e+00 6.94377734e+00 + 6.93047323e+00 6.91719460e+00 6.90394141e+00 6.89071361e+00 6.87751116e+00 + 6.86433400e+00 6.85118208e+00 6.83805536e+00 6.82495379e+00 6.81187732e+00 + 6.79882590e+00 6.78579949e+00 6.77279803e+00 6.75982148e+00 6.74686980e+00 + 6.73394292e+00 6.72104082e+00 6.70816343e+00 6.69531071e+00 6.68248262e+00 + 6.66967910e+00 6.65690011e+00 6.64414561e+00 6.63141554e+00 6.61870986e+00 + 6.60602853e+00 6.59337149e+00 6.58073869e+00 6.56813011e+00 6.55554567e+00 + 6.54298535e+00 6.53044909e+00 6.51793685e+00 6.50544859e+00 6.49298424e+00 + 6.48054378e+00 6.46812716e+00 6.45573432e+00 6.44336522e+00 6.43101983e+00 + 6.41869808e+00 6.40639995e+00 6.39412537e+00 6.38187431e+00 6.36964673e+00 + 6.35744257e+00 6.34526179e+00 6.33310435e+00 6.32097020e+00 6.30885930e+00 + 6.29677160e+00 6.28470707e+00 6.27266564e+00 6.26064729e+00 6.24865196e+00 + 6.23667962e+00 6.22473021e+00 6.21280370e+00 6.20090004e+00 6.18901918e+00 + 6.17716109e+00 6.16532571e+00 6.15351301e+00 6.14172295e+00 6.12995547e+00 + 6.11821054e+00 6.10648811e+00 6.09478814e+00 6.08311058e+00 6.07145165e+00 + 6.05974338e+00 6.04796088e+00 6.03610468e+00 6.02417530e+00 6.01217326e+00 + 6.00009907e+00 5.98795327e+00 5.97573636e+00 5.96344889e+00 5.95109137e+00 + 5.93866433e+00 5.92616829e+00 5.91360379e+00 5.90097135e+00 5.88827149e+00 + 5.87550476e+00 5.86267167e+00 5.84977277e+00 5.83680857e+00 5.82377962e+00 + 5.81068645e+00 5.79752958e+00 5.78430956e+00 5.77102692e+00 5.75768219e+00 + 5.74427591e+00 5.73080862e+00 5.71728085e+00 5.70369313e+00 5.69004601e+00 + 5.67634003e+00 5.66257572e+00 5.64875361e+00 5.63487426e+00 5.62093820e+00 + 5.60694596e+00 5.59289809e+00 5.57879513e+00 5.56463761e+00 5.55042608e+00 + 5.53616108e+00 5.52184315e+00 5.50747283e+00 5.49305067e+00 5.47857719e+00 + 5.46405294e+00 5.44947847e+00 5.43485432e+00 5.42018102e+00 5.40545912e+00 + 5.39068917e+00 5.37587169e+00 5.36100723e+00 5.34609634e+00 5.33113955e+00 + 5.31613741e+00 5.30109045e+00 5.28599922e+00 5.27086425e+00 5.25568610e+00 + 5.24046529e+00 5.22520236e+00 5.20989787e+00 5.19455234e+00 5.17916631e+00 + 5.16374033e+00 5.14827493e+00 5.13277065e+00 5.11722803e+00 5.10164761e+00 + 5.08602991e+00 5.07037549e+00 5.05468487e+00 5.03895859e+00 5.02319718e+00 + 5.00740119e+00 4.99157113e+00 4.97570756e+00 4.95981100e+00 4.94388198e+00 + 4.92792103e+00 4.91192870e+00 4.89590550e+00 4.87985196e+00 4.86376863e+00 + 4.84765602e+00 4.83151466e+00 4.81534508e+00 4.79914782e+00 4.78292338e+00 + 4.76667231e+00 4.75039512e+00 4.73409233e+00 4.71776448e+00 4.70141208e+00 + 4.68503565e+00 4.66863572e+00 4.65221280e+00 4.63576741e+00 4.61930007e+00 + 4.60281130e+00 4.58630161e+00 4.56977152e+00 4.55322154e+00 4.53665219e+00 + 4.52006398e+00 4.50345741e+00 4.48683300e+00 4.47019126e+00 4.45353270e+00 + 4.43685781e+00 4.42016712e+00 4.40346112e+00 4.38674032e+00 4.37000522e+00 + 4.35325631e+00 4.33649412e+00 4.31971912e+00 4.30293182e+00 4.28613271e+00 + 4.26932230e+00 4.25250108e+00 4.23566953e+00 4.21882815e+00 4.20197744e+00 + 4.18511788e+00 4.16824996e+00 4.15137416e+00 4.13449098e+00 4.11760089e+00 + 4.10070438e+00 4.08380193e+00 4.06689403e+00 4.04998114e+00 4.03306375e+00 + 4.01614234e+00 3.99921737e+00 3.98228932e+00 3.96535867e+00 3.94842588e+00 + 3.93149143e+00 3.91455578e+00 3.89761939e+00 3.88068273e+00 3.86374627e+00 + 3.84681046e+00 3.82987577e+00 3.81294265e+00 3.79601156e+00 3.77908296e+00 + 3.76215730e+00 3.74523503e+00 3.72831661e+00 3.71140247e+00 3.69449308e+00 + 3.67758887e+00 3.66069030e+00 3.64379779e+00 3.62691180e+00 3.61003276e+00 + 3.59316111e+00 3.57629729e+00 3.55944172e+00 3.54259485e+00 3.52575711e+00 + 3.50892892e+00 3.49211070e+00 3.47530290e+00 3.45850592e+00 3.44172019e+00 + 3.42494614e+00 3.40818418e+00 3.39143473e+00 3.37469820e+00 3.35797501e+00 + 3.34126556e+00 3.32457027e+00 3.30788955e+00 3.29122380e+00 3.27457343e+00 + 3.25793884e+00 3.24132042e+00 3.22471858e+00 3.20813372e+00 3.19156622e+00 + 3.17501649e+00 3.15848491e+00 3.14197187e+00 3.12547777e+00 3.10900298e+00 + 3.09254788e+00 3.07611287e+00 3.05969832e+00 3.04330461e+00 3.02693211e+00 + 3.01058120e+00 2.99425225e+00 2.97794563e+00 2.96166171e+00 2.94540085e+00 + 2.92916342e+00 2.91294978e+00 2.89676028e+00 2.88059530e+00 2.86445518e+00 + 2.84834028e+00 2.83225095e+00 2.81618754e+00 2.80015040e+00 2.78413987e+00 + 2.76815630e+00 2.75220003e+00 2.73627139e+00 2.72037074e+00 2.70449840e+00 + 2.68865471e+00 2.67283999e+00 2.65705459e+00 2.64129882e+00 2.62557301e+00 + 2.60987749e+00 2.59421257e+00 2.57857857e+00 2.56297582e+00 2.54740463e+00 + 2.53186530e+00 2.51635816e+00 2.50088350e+00 2.48544165e+00 2.47003289e+00 + 2.45465753e+00 2.43931588e+00 2.42400823e+00 2.40873488e+00 2.39349611e+00 + 2.37829223e+00 2.36312353e+00 2.34799028e+00 2.33289278e+00 2.31783130e+00 + 2.30280614e+00 2.28781756e+00 2.27286585e+00 2.25795128e+00 2.24307412e+00 + 2.22823464e+00 2.21343311e+00 2.19866980e+00 2.18394497e+00 2.16925889e+00 + 2.15461180e+00 2.14000397e+00 2.12543566e+00 2.11090712e+00 2.09641859e+00 + 2.08197033e+00 2.06756258e+00 2.05319559e+00 2.03886960e+00 2.02458485e+00 + 2.01034158e+00 1.99614002e+00 1.98198041e+00 1.96786297e+00 1.95378795e+00 + 1.93975556e+00 1.92576602e+00 1.91181957e+00 1.89791642e+00 1.88405680e+00 + 1.87024091e+00 1.85646897e+00 1.84274119e+00 1.82905778e+00 1.81541896e+00 + 1.80182492e+00 1.78827586e+00 1.77477200e+00 1.76131352e+00 1.74790063e+00 + 1.73453352e+00 1.72121237e+00 1.70793739e+00 1.69470876e+00 1.68152666e+00 + 1.66839128e+00 1.65530280e+00 1.64226140e+00 1.62926725e+00 1.61632054e+00 + 1.60342143e+00 1.59057009e+00 1.57776670e+00 1.56501142e+00 1.55230441e+00 + 1.53964583e+00 1.52703585e+00 1.51447463e+00 1.50196231e+00 1.48949906e+00 + 1.47708502e+00 1.46472034e+00 1.45240518e+00 1.44013967e+00 1.42792395e+00 + 1.41575818e+00 1.40364248e+00 1.39157700e+00 1.37956187e+00 1.36759721e+00 + 1.35568317e+00 1.34381987e+00 1.33200743e+00 1.32024598e+00 1.30853564e+00 + 1.29687653e+00 1.28526877e+00 1.27371247e+00 1.26220775e+00 1.25075472e+00 + 1.23935348e+00 1.22800415e+00 1.21670683e+00 1.20546162e+00 1.19426863e+00 + 1.18312795e+00 1.17203968e+00 1.16100391e+00 1.15002074e+00 1.13909026e+00 + 1.12821255e+00 1.11738771e+00 1.10661582e+00 1.09589696e+00 1.08523121e+00 + 1.07461865e+00 1.06405936e+00 1.05355341e+00 1.04310087e+00 1.03270182e+00 + 1.02235632e+00 1.01206445e+00 1.00182626e+00 9.91641811e-01 9.81511175e-01 + 9.71434406e-01 9.61411561e-01 9.51442695e-01 9.41527861e-01 9.31667110e-01 + 9.21860490e-01 9.12108049e-01 9.02409833e-01 8.92765883e-01 8.83176243e-01 + 8.73640950e-01 8.64160043e-01 8.54733558e-01 8.45361527e-01 8.36043983e-01 + 8.26780955e-01 8.17572473e-01 8.08418561e-01 7.99319245e-01 7.90274546e-01 + 7.81284486e-01 7.72349083e-01 7.63468354e-01 7.54642314e-01 7.45870976e-01 + 7.37154353e-01 7.28492452e-01 7.19885284e-01 7.11332852e-01 7.02835162e-01 + 6.94392216e-01 6.86004014e-01 6.77670556e-01 6.69391838e-01 6.61167856e-01 + 6.52998603e-01 6.44884072e-01 6.36824251e-01 6.28819131e-01 6.20868696e-01 + 6.12972932e-01 6.05131822e-01 5.97345348e-01 5.89613489e-01 5.81936223e-01 + 5.74313527e-01 5.66745375e-01 5.59231740e-01 5.51772594e-01 5.44367906e-01 + 5.37017644e-01 5.29721774e-01 5.22480262e-01 5.15293069e-01 5.08160159e-01 + 5.01081489e-01 4.94057020e-01 4.87086706e-01 4.80170504e-01 4.73308366e-01 + 4.66500245e-01 4.59746091e-01 4.53045851e-01 4.46399475e-01 4.39806906e-01 + 4.33268089e-01 4.26782967e-01 4.20351481e-01 4.13973569e-01 4.07649170e-01 + 4.01378220e-01 3.95160655e-01 3.88996407e-01 3.82885408e-01 3.76827589e-01 + 3.70822880e-01 3.64871206e-01 3.58972495e-01 3.53126672e-01 3.47333658e-01 + 3.41593377e-01 3.35905748e-01 3.30270691e-01 3.24688122e-01 3.19157958e-01 + 3.13680115e-01 3.08254504e-01 3.02881038e-01 2.97559628e-01 2.92290183e-01 + 2.87072611e-01 2.81906818e-01 2.76792711e-01 2.71730191e-01 2.66719163e-01 + 2.61759528e-01 2.56851184e-01 2.51994033e-01 2.47187969e-01 2.42432891e-01 + 2.37728692e-01 2.33075267e-01 2.28472507e-01 2.23920304e-01 2.19418548e-01 + 2.14967127e-01 2.10565929e-01 2.06214840e-01 2.01913745e-01 1.97662529e-01 + 1.93461073e-01 1.89309259e-01 1.85206967e-01 1.81154078e-01 1.77150468e-01 + 1.73196014e-01 1.69290593e-01 1.65434080e-01 1.61626346e-01 1.57867266e-01 + 1.54156710e-01 1.50494548e-01 1.46880650e-01 1.43314884e-01 1.39797116e-01 + 1.36327214e-01 1.32905040e-01 1.29530461e-01 1.26203337e-01 1.22923532e-01 + 1.19690905e-01 1.16505318e-01 1.13366628e-01 1.10274693e-01 1.07229370e-01 + 1.04230516e-01 1.01277984e-01 9.83716292e-02 9.55113045e-02 9.26968618e-02 + 8.99281522e-02 8.72050260e-02 8.45273325e-02 8.18949202e-02 7.93076365e-02 + 7.67653281e-02 7.42678408e-02 7.18150195e-02 6.94067082e-02 6.70427500e-02 + 6.47229875e-02 6.24472620e-02 6.02154142e-02 5.80272842e-02 5.58827108e-02 + 5.37815325e-02 5.17235866e-02 4.97087099e-02 4.77367383e-02 4.58075070e-02 + 4.39208503e-02 4.20766021e-02 4.02745951e-02 3.85146615e-02 3.67966330e-02 + 3.51203401e-02 3.34856129e-02 3.18922809e-02 3.03401727e-02 2.88291163e-02 + 2.73589389e-02 2.59294673e-02 2.45405275e-02 2.31919449e-02 2.18835440e-02 + 2.06151492e-02 1.93865837e-02 1.81976705e-02 1.70482319e-02 1.59380895e-02 + 1.48670644e-02 1.38349771e-02 1.28416476e-02 1.18868951e-02 1.09705385e-02 + 1.00923962e-02 9.25228574e-03 8.45002444e-03 7.68542897e-03 6.95831551e-03 + 6.26849972e-03 5.61579679e-03 5.00002140e-03 4.42098778e-03 3.87850967e-03 + 3.37240035e-03 2.90247264e-03 2.46853892e-03 2.07041115e-03 1.70790084e-03 + 1.38081907e-03 1.08897653e-03 8.32183493e-04 6.10249837e-04 4.22985050e-04 + 2.70198238e-04 1.51698135e-04 6.72931116e-05 1.67911789e-05 0.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 9.99979585e-01 9.99876811e-01 9.99687440e-01 9.99411505e-01 + 9.99049054e-01 9.98600150e-01 9.98064871e-01 9.97443309e-01 9.96735573e-01 + 9.95941783e-01 9.95062079e-01 9.94096613e-01 9.93045551e-01 9.91909077e-01 + 9.90687386e-01 9.89380690e-01 9.87989216e-01 9.86513205e-01 9.84952913e-01 + 9.83308609e-01 9.81580579e-01 9.79769122e-01 9.77874552e-01 9.75897197e-01 + 9.73837399e-01 9.71695516e-01 9.69471919e-01 9.67166992e-01 9.64781135e-01 + 9.62314761e-01 9.59768298e-01 9.57142187e-01 9.54436882e-01 9.51652852e-01 + 9.48790581e-01 9.45850562e-01 9.42833306e-01 9.39739336e-01 9.36569187e-01 + 9.33323409e-01 9.30002564e-01 9.26607226e-01 9.23137986e-01 9.19595442e-01 + 9.15980210e-01 9.12292915e-01 9.08534196e-01 9.04704704e-01 9.00805103e-01 + 8.96836069e-01 8.92798288e-01 8.88692460e-01 8.84519297e-01 8.80279522e-01 + 8.75973868e-01 8.71603083e-01 8.67167922e-01 8.62669155e-01 8.58107560e-01 + 8.53483929e-01 8.48799061e-01 8.44053769e-01 8.39248875e-01 8.34385211e-01 + 8.29463619e-01 8.24484952e-01 8.19450073e-01 8.14359853e-01 8.09215176e-01 + 8.04016931e-01 7.98766019e-01 7.93463351e-01 7.88109844e-01 7.82706427e-01 + 7.77254034e-01 7.71753611e-01 7.66206111e-01 7.60612494e-01 7.54973730e-01 + 7.49290796e-01 7.43564675e-01 7.37796360e-01 7.31986850e-01 7.26137152e-01 + 7.20248279e-01 7.14321251e-01 7.08357095e-01 7.02356844e-01 6.96321537e-01 + 6.90252221e-01 6.84149946e-01 6.78015770e-01 6.71850755e-01 6.65655970e-01 + 6.59432486e-01 6.53181384e-01 6.46903745e-01 6.40600657e-01 6.34273212e-01 + 6.27922506e-01 6.21549639e-01 6.15155716e-01 6.08741843e-01 6.02309133e-01 + 5.95858698e-01 5.89391658e-01 5.82909132e-01 5.76412243e-01 5.69902117e-01 + 5.63379881e-01 5.56846666e-01 5.50303602e-01 5.43751824e-01 5.37192467e-01 + 5.30626667e-01 5.24055561e-01 5.17480288e-01 5.10901987e-01 5.04321797e-01 + 4.97740858e-01 4.91160311e-01 4.84581295e-01 4.78004950e-01 4.71432416e-01 + 4.64864830e-01 4.58303331e-01 4.51749056e-01 4.45203139e-01 4.38666715e-01 + 4.32140916e-01 4.25626873e-01 4.19125714e-01 4.12638565e-01 4.06166550e-01 + 3.99710791e-01 3.93272405e-01 3.86852508e-01 3.80452213e-01 3.74072627e-01 + 3.67714857e-01 3.61380003e-01 3.55069163e-01 3.48783430e-01 3.42523893e-01 + 3.36291637e-01 3.30087741e-01 3.23913280e-01 3.17769323e-01 3.11656936e-01 + 3.05577176e-01 2.99531097e-01 2.93519746e-01 2.87544165e-01 2.81605389e-01 + 2.75704447e-01 2.69842361e-01 2.64020146e-01 2.58238812e-01 2.52499359e-01 + 2.46802782e-01 2.41150068e-01 2.35542196e-01 2.29980137e-01 2.24464856e-01 + 2.18997307e-01 2.13578438e-01 2.08209187e-01 2.02890485e-01 1.97623253e-01 + 1.92408404e-01 1.87246840e-01 1.82139456e-01 1.77087137e-01 1.72090758e-01 + 1.67151185e-01 1.62269273e-01 1.57445868e-01 1.52681806e-01 1.47977912e-01 + 1.43335000e-01 1.38753876e-01 1.34235332e-01 1.29780152e-01 1.25389107e-01 + 1.21062958e-01 1.16802455e-01 1.12608335e-01 1.08481325e-01 1.04422140e-01 + 1.00431484e-01 9.65100466e-02 9.26585085e-02 8.88775365e-02 8.51677856e-02 + 8.15298985e-02 7.79645054e-02 7.44722238e-02 7.10536590e-02 6.77094029e-02 + 6.44400350e-02 6.12461217e-02 5.81282163e-02 5.50868588e-02 5.21225762e-02 + 4.92358820e-02 4.64272763e-02 4.36972455e-02 4.10462627e-02 3.84747871e-02 + 3.59832642e-02 3.35721256e-02 3.12417889e-02 2.89926579e-02 2.68251222e-02 + 2.47395574e-02 2.27363246e-02 2.08157709e-02 1.89782291e-02 1.72240175e-02 + 1.55534399e-02 1.39667858e-02 1.24643300e-02 1.10463329e-02 9.71303993e-03 + 8.46468223e-03 7.30147603e-03 6.22362282e-03 5.23130933e-03 4.32470747e-03 + 3.50397429e-03 2.76925197e-03 2.12066779e-03 1.55833411e-03 1.08234835e-03 + 6.92792954e-04 3.89735421e-04 1.73228247e-04 4.33089373e-05 0.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 9.99980173e-01 9.99906079e-01 9.99777111e-01 9.99593281e-01 9.99354611e-01 + 9.99061126e-01 9.98712858e-01 9.98309847e-01 9.97852135e-01 9.97339773e-01 + 9.96772819e-01 9.96151332e-01 9.95475383e-01 9.94745045e-01 9.93960398e-01 + 9.93121529e-01 9.92228529e-01 9.91281497e-01 9.90280537e-01 9.89225758e-01 + 9.88117276e-01 9.86955213e-01 9.85739696e-01 9.84470859e-01 9.83148841e-01 + 9.81773788e-01 9.80345850e-01 9.78865184e-01 9.77331952e-01 9.75746323e-01 + 9.74108471e-01 9.72418575e-01 9.70676822e-01 9.68883402e-01 9.67038512e-01 + 9.65142355e-01 9.63195139e-01 9.61197077e-01 9.59148389e-01 9.57049300e-01 + 9.54900041e-01 9.52700846e-01 9.50451958e-01 9.48153624e-01 9.45806095e-01 + 9.43409630e-01 9.40964491e-01 9.38470947e-01 9.35929271e-01 9.33339743e-01 + 9.30702647e-01 9.28018273e-01 9.25286914e-01 9.22508871e-01 9.19684449e-01 + 9.16813958e-01 9.13897713e-01 9.10936034e-01 9.07929245e-01 9.04877679e-01 + 9.01781668e-01 8.98641553e-01 8.95457679e-01 8.92230395e-01 8.88960056e-01 + 8.85647020e-01 8.82291651e-01 8.78894318e-01 8.75455393e-01 8.71975254e-01 + 8.68454283e-01 8.64892866e-01 8.61291395e-01 8.57650264e-01 8.53969874e-01 + 8.50250628e-01 8.46492934e-01 8.42697206e-01 8.38863860e-01 8.34993316e-01 + 8.31085999e-01 8.27142339e-01 8.23162768e-01 8.19147724e-01 8.15097646e-01 + 8.11012979e-01 8.06894173e-01 8.02741678e-01 7.98555951e-01 7.94337451e-01 + 7.90086642e-01 7.85803989e-01 7.81489963e-01 7.77145038e-01 7.72769691e-01 + 7.68364401e-01 7.63929652e-01 7.59465932e-01 7.54973730e-01 7.50453539e-01 + 7.45905856e-01 7.41331179e-01 7.36730012e-01 7.32102858e-01 7.27450226e-01 + 7.22772626e-01 7.18070573e-01 7.13344581e-01 7.08595171e-01 7.03822863e-01 + 6.99028181e-01 6.94211651e-01 6.89373803e-01 6.84515167e-01 6.79636277e-01 + 6.74737667e-01 6.69819877e-01 6.64883445e-01 6.59928914e-01 6.54956827e-01 + 6.49967731e-01 6.44962172e-01 6.39940701e-01 6.34903869e-01 6.29852227e-01 + 6.24786332e-01 6.19706739e-01 6.14614006e-01 6.09508691e-01 6.04391355e-01 + 5.99262560e-01 5.94122870e-01 5.88972847e-01 5.83813057e-01 5.78644067e-01 + 5.73466445e-01 5.68280758e-01 5.63087575e-01 5.57887468e-01 5.52681006e-01 + 5.47468761e-01 5.42251306e-01 5.37029212e-01 5.31803054e-01 5.26573405e-01 + 5.21340839e-01 5.16105930e-01 5.10869253e-01 5.05631384e-01 5.00392895e-01 + 4.95154364e-01 4.89916365e-01 4.84679473e-01 4.79444262e-01 4.74211308e-01 + 4.68981185e-01 4.63754466e-01 4.58531727e-01 4.53313539e-01 4.48100476e-01 + 4.42893110e-01 4.37692013e-01 4.32497756e-01 4.27310908e-01 4.22132040e-01 + 4.16961719e-01 4.11800513e-01 4.06648989e-01 4.01507712e-01 3.96377247e-01 + 3.91258157e-01 3.86151003e-01 3.81056347e-01 3.75974747e-01 3.70906762e-01 + 3.65852947e-01 3.60813858e-01 3.55790047e-01 3.50782067e-01 3.45790466e-01 + 3.40815793e-01 3.35858594e-01 3.30919413e-01 3.25998792e-01 3.21097271e-01 + 3.16215388e-01 3.11353680e-01 3.06512680e-01 3.01692919e-01 2.96894926e-01 + 2.92119228e-01 2.87366350e-01 2.82636813e-01 2.77931136e-01 2.73249835e-01 + 2.68593425e-01 2.63962417e-01 2.59357319e-01 2.54778637e-01 2.50226873e-01 + 2.45702526e-01 2.41206094e-01 2.36738071e-01 2.32298945e-01 2.27889206e-01 + 2.23509336e-01 2.19159817e-01 2.14841126e-01 2.10553738e-01 2.06298122e-01 + 2.02074746e-01 1.97884074e-01 1.93726565e-01 1.89602676e-01 1.85512860e-01 + 1.81457565e-01 1.77437238e-01 1.73452318e-01 1.69503243e-01 1.65590448e-01 + 1.61714361e-01 1.57875408e-01 1.54074010e-01 1.50310585e-01 1.46585546e-01 + 1.42899302e-01 1.39252256e-01 1.35644811e-01 1.32077361e-01 1.28550298e-01 + 1.25064010e-01 1.21618879e-01 1.18215283e-01 1.14853596e-01 1.11534187e-01 + 1.08257420e-01 1.05023655e-01 1.01833247e-01 9.86865462e-02 9.55838981e-02 + 9.25256431e-02 8.95121170e-02 8.65436505e-02 8.36205696e-02 8.07431951e-02 + 7.79118428e-02 7.51268235e-02 7.23884430e-02 6.96970019e-02 6.70527955e-02 + 6.44561143e-02 6.19072431e-02 5.94064618e-02 5.69540448e-02 5.45502615e-02 + 5.21953757e-02 4.98896458e-02 4.76333250e-02 4.54266610e-02 4.32698959e-02 + 4.11632665e-02 3.91070041e-02 3.71013344e-02 3.51464776e-02 3.32426482e-02 + 3.13900552e-02 2.95889020e-02 2.78393864e-02 2.61417002e-02 2.44960300e-02 + 2.29025563e-02 2.13614541e-02 1.98728925e-02 1.84370350e-02 1.70540391e-02 + 1.57240567e-02 1.44472338e-02 1.32237104e-02 1.20536210e-02 1.09370940e-02 + 9.87425188e-03 8.86521137e-03 7.91008322e-03 7.00897228e-03 6.16197747e-03 + 5.36919175e-03 4.63070216e-03 3.94658975e-03 3.31692963e-03 2.74179092e-03 + 2.22123674e-03 1.75532423e-03 1.34410455e-03 9.87622837e-04 6.85918213e-04 + 4.39023800e-04 2.46966702e-04 1.09767999e-04 2.74427529e-05 0.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 9.99998611e-01 + 9.99988405e-01 9.99968287e-01 9.99938255e-01 9.99898310e-01 9.99848454e-01 + 9.99788687e-01 9.99719010e-01 9.99639425e-01 9.99549934e-01 9.99450537e-01 + 9.99341238e-01 9.99222038e-01 9.99092940e-01 9.98953946e-01 9.98805059e-01 + 9.98646282e-01 9.98477618e-01 9.98299070e-01 9.98110643e-01 9.97912339e-01 + 9.97704162e-01 9.97486118e-01 9.97258209e-01 9.97020441e-01 9.96772819e-01 + 9.96515346e-01 9.96248029e-01 9.95970873e-01 9.95683882e-01 9.95387064e-01 + 9.95080423e-01 9.94763966e-01 9.94437699e-01 9.94101628e-01 9.93755761e-01 + 9.93400104e-01 9.93034664e-01 9.92659448e-01 9.92274464e-01 9.91879719e-01 + 9.91475222e-01 9.91060979e-01 9.90637001e-01 9.90203294e-01 9.89759867e-01 + 9.89306730e-01 9.88843892e-01 9.88371360e-01 9.87889146e-01 9.87397257e-01 + 9.86895705e-01 9.86384499e-01 9.85863649e-01 9.85333166e-01 9.84793060e-01 + 9.84243341e-01 9.83684021e-01 9.83115111e-01 9.82536622e-01 9.81948565e-01 + 9.81350952e-01 9.80743796e-01 9.80127107e-01 9.79500899e-01 9.78865184e-01 + 9.78219973e-01 9.77565281e-01 9.76901120e-01 9.76227503e-01 9.75544444e-01 + 9.74851956e-01 9.74150052e-01 9.73438748e-01 9.72718056e-01 9.71987991e-01 + 9.71248568e-01 9.70499802e-01 9.69741706e-01 9.68974297e-01 9.68197589e-01 + 9.67411598e-01 9.66616339e-01 9.65811829e-01 9.64998082e-01 9.64175116e-01 + 9.63342946e-01 9.62501590e-01 9.61651063e-01 9.60791382e-01 9.59922566e-01 + 9.59044630e-01 9.58157592e-01 9.57261471e-01 9.56356283e-01 9.55442046e-01 + 9.54518780e-01 9.53586501e-01 9.52645229e-01 9.51694982e-01 9.50735778e-01 + 9.49767638e-01 9.48790581e-01 9.47804624e-01 9.46809789e-01 9.45806095e-01 + 9.44793561e-01 9.43772209e-01 9.42742057e-01 9.41703127e-01 9.40655439e-01 + 9.39599014e-01 9.38533873e-01 9.37460037e-01 9.36377527e-01 9.35286364e-01 + 9.34186571e-01 9.33078170e-01 9.31961181e-01 9.30835628e-01 9.29701532e-01 + 9.28558916e-01 9.27407803e-01 9.26248215e-01 9.25080177e-01 9.23903709e-01 + 9.22718837e-01 9.21525584e-01 9.20323972e-01 9.19114027e-01 9.17895771e-01 + 9.16669230e-01 9.15434427e-01 9.14191387e-01 9.12940135e-01 9.11680695e-01 + 9.10413093e-01 9.09137353e-01 9.07853501e-01 9.06561562e-01 9.05261562e-01 + 9.03953527e-01 9.02637482e-01 9.01313454e-01 8.99981469e-01 8.98641553e-01 + 8.97293733e-01 8.95938036e-01 8.94574488e-01 8.93203117e-01 8.91823950e-01 + 8.90437014e-01 8.89042336e-01 8.87639945e-01 8.86229867e-01 8.84812132e-01 + 8.83386767e-01 8.81953800e-01 8.80513260e-01 8.79065175e-01 8.77609575e-01 + 8.76146487e-01 8.74675941e-01 8.73197967e-01 8.71712593e-01 8.70219848e-01 + 8.68719763e-01 8.67212368e-01 8.65697691e-01 8.64175763e-01 8.62646615e-01 + 8.61110277e-01 8.59566778e-01 8.58016150e-01 8.56458424e-01 8.54893630e-01 + 8.53321799e-01 8.51742963e-01 8.50157152e-01 8.48564399e-01 8.46964734e-01 + 8.45358191e-01 8.43744799e-01 8.42124592e-01 8.40497601e-01 8.38863860e-01 + 8.37223399e-01 8.35576252e-01 8.33922451e-01 8.32262030e-01 8.30595020e-01 + 8.28921456e-01 8.27241370e-01 8.25554796e-01 8.23861766e-01 8.22162316e-01 + 8.20456477e-01 8.18744285e-01 8.17025773e-01 8.15300975e-01 8.13569925e-01 + 8.11832658e-01 8.10089208e-01 8.08339610e-01 8.06583898e-01 8.04822108e-01 + 8.03054273e-01 8.01280430e-01 7.99500613e-01 7.97714858e-01 7.95923200e-01 + 7.94125674e-01 7.92322317e-01 7.90513163e-01 7.88698249e-01 7.86877612e-01 + 7.85051286e-01 7.83219308e-01 7.81381715e-01 7.79538542e-01 7.77689827e-01 + 7.75835606e-01 7.73975916e-01 7.72110794e-01 7.70240277e-01 7.68364401e-01 + 7.66483204e-01 7.64596724e-01 7.62704997e-01 7.60808061e-01 7.58905954e-01 + 7.56998714e-01 7.55086378e-01 7.53168985e-01 7.51246571e-01 7.49319177e-01 + 7.47386838e-01 7.45449595e-01 7.43507485e-01 7.41560547e-01 7.39608819e-01 + 7.37652340e-01 7.35691150e-01 7.33725286e-01 7.31754788e-01 7.29779695e-01 + 7.27800045e-01 7.25815880e-01 7.23827236e-01 7.21834155e-01 7.19836676e-01 + 7.17834837e-01 7.15828680e-01 7.13818243e-01 7.11803566e-01 7.09784691e-01 + 7.07761655e-01 7.05734500e-01 7.03703266e-01 7.01667993e-01 6.99628722e-01 + 6.97585492e-01 6.95538345e-01 6.93487320e-01 6.91432460e-01 6.89373803e-01 + 6.87311392e-01 6.85245267e-01 6.83175469e-01 6.81102039e-01 6.79025018e-01 + 6.76944447e-01 6.74860369e-01 6.72772823e-01 6.70681851e-01 6.68587496e-01 + 6.66489797e-01 6.64388798e-01 6.62284539e-01 6.60177062e-01 6.58066410e-01 + 6.55952623e-01 6.53835744e-01 6.51715815e-01 6.49592878e-01 6.47466975e-01 + 6.45338148e-01 6.43206439e-01 6.41071891e-01 6.38934546e-01 6.36794446e-01 + 6.34651634e-01 6.32506151e-01 6.30358042e-01 6.28207348e-01 6.26054112e-01 + 6.23898376e-01 6.21740184e-01 6.19579579e-01 6.17416602e-01 6.15251297e-01 + 6.13083707e-01 6.10913875e-01 6.08741843e-01 6.06567656e-01 6.04391355e-01 + 6.02212985e-01 6.00032588e-01 5.97850208e-01 5.95665887e-01 5.93479670e-01 + 5.91291599e-01 5.89101719e-01 5.86910071e-01 5.84716701e-01 5.82521650e-01 + 5.80324964e-01 5.78126684e-01 5.75926856e-01 5.73725522e-01 5.71522727e-01 + 5.69318513e-01 5.67112925e-01 5.64906006e-01 5.62697800e-01 5.60488352e-01 + 5.58277703e-01 5.56065900e-01 5.53852984e-01 5.51639001e-01 5.49423994e-01 + 5.47208007e-01 5.44991085e-01 5.42773270e-01 5.40554606e-01 5.38335139e-01 + 5.36114912e-01 5.33893969e-01 5.31672353e-01 5.29450110e-01 5.27227283e-01 + 5.25003915e-01 5.22780052e-01 5.20555738e-01 5.18331016e-01 5.16105930e-01 + 5.13880525e-01 5.11654845e-01 5.09428934e-01 5.07202836e-01 5.04976595e-01 + 5.02750255e-01 5.00523861e-01 4.98297456e-01 4.96071085e-01 4.93844792e-01 + 4.91618621e-01 4.89392617e-01 4.87166822e-01 4.84941282e-01 4.82716041e-01 + 4.80491142e-01 4.78266630e-01 4.76042549e-01 4.73818943e-01 4.71595856e-01 + 4.69373333e-01 4.67151416e-01 4.64930151e-01 4.62709582e-01 4.60489751e-01 + 4.58270704e-01 4.56052485e-01 4.53835136e-01 4.51618704e-01 4.49403230e-01 + 4.47188760e-01 4.44975336e-01 4.42763004e-01 4.40551807e-01 4.38341788e-01 + 4.36132992e-01 4.33925462e-01 4.31719242e-01 4.29514376e-01 4.27310908e-01 + 4.25108881e-01 4.22908339e-01 4.20709325e-01 4.18511884e-01 4.16316058e-01 + 4.14121891e-01 4.11929427e-01 4.09738710e-01 4.07549782e-01 4.05362687e-01 + 4.03177469e-01 4.00994170e-01 3.98812834e-01 3.96633505e-01 3.94456225e-01 + 3.92281038e-01 3.90107987e-01 3.87937114e-01 3.85768464e-01 3.83602078e-01 + 3.81438000e-01 3.79276273e-01 3.77116940e-01 3.74960043e-01 3.72805626e-01 + 3.70653730e-01 3.68504399e-01 3.66357675e-01 3.64213601e-01 3.62072219e-01 + 3.59933573e-01 3.57797703e-01 3.55664653e-01 3.53534464e-01 3.51407180e-01 + 3.49282842e-01 3.47161492e-01 3.45043173e-01 3.42927926e-01 3.40815793e-01 + 3.38706817e-01 3.36601038e-01 3.34498500e-01 3.32399243e-01 3.30303309e-01 + 3.28210740e-01 3.26121577e-01 3.24035861e-01 3.21953634e-01 3.19874938e-01 + 3.17799813e-01 3.15728301e-01 3.13660442e-01 3.11596278e-01 3.09535850e-01 + 3.07479198e-01 3.05426363e-01 3.03377386e-01 3.01332308e-01 2.99291168e-01 + 2.97254009e-01 2.95220869e-01 2.93191789e-01 2.91166810e-01 2.89145972e-01 + 2.87129315e-01 2.85116878e-01 2.83108701e-01 2.81104825e-01 2.79105290e-01 + 2.77110134e-01 2.75119397e-01 2.73133119e-01 2.71151340e-01 2.69174098e-01 + 2.67201433e-01 2.65233383e-01 2.63269988e-01 2.61311288e-01 2.59357319e-01 + 2.57408122e-01 2.55463735e-01 2.53524197e-01 2.51589546e-01 2.49659820e-01 + 2.47735057e-01 2.45815297e-01 2.43900576e-01 2.41990933e-01 2.40086406e-01 + 2.38187032e-01 2.36292850e-01 2.34403896e-01 2.32520208e-01 2.30641823e-01 + 2.28768780e-01 2.26901114e-01 2.25038863e-01 2.23182064e-01 2.21330753e-01 + 2.19484968e-01 2.17644744e-01 2.15810120e-01 2.13981129e-01 2.12157810e-01 + 2.10340199e-01 2.08528330e-01 2.06722240e-01 2.04921966e-01 2.03127542e-01 + 2.01339005e-01 1.99556389e-01 1.97779730e-01 1.96009063e-01 1.94244424e-01 + 1.92485848e-01 1.90733368e-01 1.88987021e-01 1.87246840e-01 1.85512860e-01 + 1.83785116e-01 1.82063641e-01 1.80348471e-01 1.78639638e-01 1.76937177e-01 + 1.75241122e-01 1.73551506e-01 1.71868362e-01 1.70191725e-01 1.68521627e-01 + 1.66858101e-01 1.65201180e-01 1.63550898e-01 1.61907287e-01 1.60270379e-01 + 1.58640208e-01 1.57016804e-01 1.55400201e-01 1.53790431e-01 1.52187525e-01 + 1.50591516e-01 1.49002434e-01 1.47420312e-01 1.45845181e-01 1.44277071e-01 + 1.42716015e-01 1.41162043e-01 1.39615186e-01 1.38075474e-01 1.36542938e-01 + 1.35017609e-01 1.33499516e-01 1.31988690e-01 1.30485161e-01 1.28988959e-01 + 1.27500113e-01 1.26018652e-01 1.24544607e-01 1.23078006e-01 1.21618879e-01 + 1.20167254e-01 1.18723160e-01 1.17286625e-01 1.15857679e-01 1.14436350e-01 + 1.13022665e-01 1.11616654e-01 1.10218343e-01 1.08827760e-01 1.07444933e-01 + 1.06069890e-01 1.04702657e-01 1.03343262e-01 1.01991732e-01 1.00648094e-01 + 9.93123732e-02 9.79845974e-02 9.66647925e-02 9.53529849e-02 9.40492003e-02 + 9.27534648e-02 9.14658040e-02 9.01862434e-02 8.89148084e-02 8.76515242e-02 + 8.63964159e-02 8.51495083e-02 8.39108261e-02 8.26803940e-02 8.14582364e-02 + 8.02443773e-02 7.90388410e-02 7.78416513e-02 7.66528320e-02 7.54724066e-02 + 7.43003985e-02 7.31368310e-02 7.19817272e-02 7.08351099e-02 6.96970019e-02 + 6.85674257e-02 6.74464038e-02 6.63339584e-02 6.52301115e-02 6.41348850e-02 + 6.30483006e-02 6.19703799e-02 6.09011443e-02 5.98406149e-02 5.87888128e-02 + 5.77457588e-02 5.67114736e-02 5.56859778e-02 5.46692916e-02 5.36614352e-02 + 5.26624286e-02 5.16722916e-02 5.06910438e-02 4.97187048e-02 4.87552937e-02 + 4.78008297e-02 4.68553316e-02 4.59188183e-02 4.49913084e-02 4.40728201e-02 + 4.31633717e-02 4.22629813e-02 4.13716667e-02 4.04894456e-02 3.96163354e-02 + 3.87523535e-02 3.78975170e-02 3.70518428e-02 3.62153478e-02 3.53880485e-02 + 3.45699613e-02 3.37611024e-02 3.29614879e-02 3.21711336e-02 3.13900552e-02 + 3.06182682e-02 2.98557879e-02 2.91026294e-02 2.83588076e-02 2.76243373e-02 + 2.68992330e-02 2.61835092e-02 2.54771800e-02 2.47802594e-02 2.40927612e-02 + 2.34146991e-02 2.27460866e-02 2.20869367e-02 2.14372628e-02 2.07970775e-02 + 2.01663937e-02 1.95452238e-02 1.89335801e-02 1.83314748e-02 1.77389197e-02 + 1.71559268e-02 1.65825074e-02 1.60186730e-02 1.54644348e-02 1.49198037e-02 + 1.43847906e-02 1.38594060e-02 1.33436604e-02 1.28375640e-02 1.23411268e-02 + 1.18543587e-02 1.13772693e-02 1.09098682e-02 1.04521644e-02 1.00041672e-02 + 9.56588541e-03 9.13732771e-03 8.71850261e-03 8.30941841e-03 7.91008322e-03 + 7.52050497e-03 7.14069137e-03 6.77064996e-03 6.41038807e-03 6.05991285e-03 + 5.71923124e-03 5.38835001e-03 5.06727570e-03 4.75601470e-03 4.45457316e-03 + 4.16295707e-03 3.88117220e-03 3.60922415e-03 3.34711831e-03 3.09485987e-03 + 2.85245383e-03 2.61990501e-03 2.39721801e-03 2.18439724e-03 1.98144694e-03 + 1.78837111e-03 1.60517360e-03 1.43185803e-03 1.26842784e-03 1.11488626e-03 + 9.71236350e-04 8.37480951e-04 7.13622715e-04 5.99664099e-04 4.95607361e-04 + 4.01454566e-04 3.17207579e-04 2.42868072e-04 1.78437519e-04 1.23917196e-04 + 7.93081847e-05 4.46113698e-05 1.98274393e-05 4.95688439e-06 0.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 9.99999383e-01 9.99962914e-01 + 9.99870183e-01 9.99721201e-01 9.99515984e-01 9.99254555e-01 9.98936943e-01 + 9.98563186e-01 9.98133323e-01 9.97647405e-01 9.97105485e-01 9.96507624e-01 + 9.95853891e-01 9.95144357e-01 9.94379104e-01 9.93558218e-01 9.92681790e-01 + 9.91749919e-01 9.90762710e-01 9.89720275e-01 9.88622731e-01 9.87470200e-01 + 9.86262813e-01 9.85000706e-01 9.83684021e-01 9.82312906e-01 9.80887514e-01 + 9.79408008e-01 9.77874552e-01 9.76287320e-01 9.74646490e-01 9.72952247e-01 + 9.71204782e-01 9.69404291e-01 9.67550976e-01 9.65645047e-01 9.63686718e-01 + 9.61676209e-01 9.59613746e-01 9.57499563e-01 9.55333895e-01 9.53116988e-01 + 9.50849090e-01 9.48530457e-01 9.46161350e-01 9.43742036e-01 9.41272786e-01 + 9.38753878e-01 9.36185597e-01 9.33568230e-01 9.30902073e-01 9.28187426e-01 + 9.25424593e-01 9.22613887e-01 9.19755623e-01 9.16850122e-01 9.13897713e-01 + 9.10898726e-01 9.07853501e-01 9.04762378e-01 9.01625707e-01 8.98443839e-01 + 8.95217134e-01 8.91945954e-01 8.88630668e-01 8.85271647e-01 8.81869272e-01 + 8.78423923e-01 8.74935990e-01 8.71405864e-01 8.67833943e-01 8.64220629e-01 + 8.60566328e-01 8.56871452e-01 8.53136416e-01 8.49361641e-01 8.45547552e-01 + 8.41694577e-01 8.37803150e-01 8.33873710e-01 8.29906698e-01 8.25902560e-01 + 8.21861749e-01 8.17784717e-01 8.13671924e-01 8.09523833e-01 8.05340911e-01 + 8.01123627e-01 7.96872458e-01 7.92587881e-01 7.88270378e-01 7.83920435e-01 + 7.79538542e-01 7.75125192e-01 7.70680882e-01 7.66206111e-01 7.61701383e-01 + 7.57167206e-01 7.52604088e-01 7.48012545e-01 7.43393092e-01 7.38746250e-01 + 7.34072541e-01 7.29372491e-01 7.24646629e-01 7.19895487e-01 7.15119600e-01 + 7.10319505e-01 7.05495742e-01 7.00648855e-01 6.95779388e-01 6.90887889e-01 + 6.85974909e-01 6.81041001e-01 6.76086720e-01 6.71112623e-01 6.66119271e-01 + 6.61107225e-01 6.56077049e-01 6.51029310e-01 6.45964575e-01 6.40883414e-01 + 6.35786399e-01 6.30674104e-01 6.25547103e-01 6.20405975e-01 6.15251297e-01 + 6.10083649e-01 6.04903614e-01 5.99711773e-01 5.94508712e-01 5.89295015e-01 + 5.84071270e-01 5.78838064e-01 5.73595986e-01 5.68345626e-01 5.63087575e-01 + 5.57822425e-01 5.52550768e-01 5.47273197e-01 5.41990307e-01 5.36702691e-01 + 5.31410945e-01 5.26115664e-01 5.20817444e-01 5.15516882e-01 5.10214573e-01 + 5.04911115e-01 4.99607105e-01 4.94303138e-01 4.88999813e-01 4.83697725e-01 + 4.78397472e-01 4.73099650e-01 4.67804856e-01 4.62513684e-01 4.57226730e-01 + 4.51944590e-01 4.46667858e-01 4.41397128e-01 4.36132992e-01 4.30876043e-01 + 4.25626873e-01 4.20386072e-01 4.15154231e-01 4.09931937e-01 4.04719779e-01 + 3.99518343e-01 3.94328215e-01 3.89149978e-01 3.83984215e-01 3.78831508e-01 + 3.73692436e-01 3.68567577e-01 3.63457510e-01 3.58362807e-01 3.53284044e-01 + 3.48221791e-01 3.43176617e-01 3.38149092e-01 3.33139780e-01 3.28149245e-01 + 3.23178049e-01 3.18226751e-01 3.13295908e-01 3.08386076e-01 3.03497806e-01 + 2.98631650e-01 2.93788154e-01 2.88967863e-01 2.84171320e-01 2.79399065e-01 + 2.74651635e-01 2.69929564e-01 2.65233383e-01 2.60563621e-01 2.55920803e-01 + 2.51305453e-01 2.46718088e-01 2.42159226e-01 2.37629379e-01 2.33129058e-01 + 2.28658768e-01 2.24219012e-01 2.19810291e-01 2.15433101e-01 2.11087933e-01 + 2.06775278e-01 2.02495620e-01 1.98249440e-01 1.94037218e-01 1.89859426e-01 + 1.85716535e-01 1.81609011e-01 1.77537316e-01 1.73501909e-01 1.69503243e-01 + 1.65541769e-01 1.61617933e-01 1.57732175e-01 1.53884934e-01 1.50076642e-01 + 1.46307727e-01 1.42578614e-01 1.38889723e-01 1.35241469e-01 1.31634261e-01 + 1.28068507e-01 1.24544607e-01 1.21062958e-01 1.17623952e-01 1.14227975e-01 + 1.10875410e-01 1.07566635e-01 1.04302020e-01 1.01081935e-01 9.79067409e-02 + 9.47767953e-02 9.16924504e-02 8.86540533e-02 8.56619461e-02 8.27164652e-02 + 7.98179423e-02 7.69667035e-02 7.41630697e-02 7.14073563e-02 6.86998735e-02 + 6.60409259e-02 6.34308128e-02 6.08698279e-02 5.83582593e-02 5.58963898e-02 + 5.34844963e-02 5.11228502e-02 4.88117174e-02 4.65513579e-02 4.43420261e-02 + 4.21839706e-02 4.00774342e-02 3.80226540e-02 3.60198612e-02 3.40692813e-02 + 3.21711336e-02 3.03256319e-02 2.85329837e-02 2.67933909e-02 2.51070491e-02 + 2.34741482e-02 2.18948719e-02 2.03693980e-02 1.88978980e-02 1.74805376e-02 + 1.61174762e-02 1.48088674e-02 1.35548582e-02 1.23555900e-02 1.12111975e-02 + 1.01218096e-02 9.08754885e-03 8.10853169e-03 7.18486826e-03 6.31666251e-03 + 5.50401213e-03 4.74700858e-03 4.04573705e-03 3.40027644e-03 2.81069940e-03 + 2.27707227e-03 1.79945510e-03 1.37790165e-03 1.01245934e-03 7.03169297e-04 + 4.50066336e-04 2.53178934e-04 1.12529247e-04 2.81331032e-05 0.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 9.99975710e-01 + 9.99895217e-01 9.99758386e-01 9.99565232e-01 9.99315778e-01 9.99010051e-01 + 9.98648086e-01 9.98229923e-01 9.97755610e-01 9.97225201e-01 9.96638754e-01 + 9.95996336e-01 9.95298020e-01 9.94543884e-01 9.93734013e-01 9.92868499e-01 + 9.91947438e-01 9.90970935e-01 9.89939101e-01 9.88852050e-01 9.87709905e-01 + 9.86512796e-01 9.85260858e-01 9.83954230e-01 9.82593062e-01 9.81177505e-01 + 9.79707720e-01 9.78183872e-01 9.76606132e-01 9.74974680e-01 9.73289698e-01 + 9.71551377e-01 9.69759912e-01 9.67915505e-01 9.66018364e-01 9.64068704e-01 + 9.62066743e-01 9.60012707e-01 9.57906828e-01 9.55749343e-01 9.53540496e-01 + 9.51280535e-01 9.48969714e-01 9.46608295e-01 9.44196544e-01 9.41734731e-01 + 9.39223136e-01 9.36662040e-01 9.34051732e-01 9.31392507e-01 9.28684665e-01 + 9.25928510e-01 9.23124352e-01 9.20272509e-01 9.17373302e-01 9.14427057e-01 + 9.11434106e-01 9.08394786e-01 9.05309441e-01 9.02178417e-01 8.99002068e-01 + 8.95780752e-01 8.92514832e-01 8.89204675e-01 8.85850655e-01 8.82453150e-01 + 8.79012542e-01 8.75529221e-01 8.72003577e-01 8.68436008e-01 8.64826917e-01 + 8.61176710e-01 8.57485799e-01 8.53754599e-01 8.49983531e-01 8.46173020e-01 + 8.42323496e-01 8.38435392e-01 8.34509147e-01 8.30545202e-01 8.26544005e-01 + 8.22506007e-01 8.18431663e-01 8.14321431e-01 8.10175776e-01 8.05995164e-01 + 8.01780066e-01 7.97530958e-01 7.93248319e-01 7.88932630e-01 7.84584379e-01 + 7.80204055e-01 7.75792153e-01 7.71349168e-01 7.66875603e-01 7.62371961e-01 + 7.57838750e-01 7.53276481e-01 7.48685668e-01 7.44066827e-01 7.39420481e-01 + 7.34747152e-01 7.30047367e-01 7.25321656e-01 7.20570551e-01 7.15794588e-01 + 7.10994305e-01 7.06170243e-01 7.01322946e-01 6.96452960e-01 6.91560833e-01 + 6.86647118e-01 6.81712368e-01 6.76757139e-01 6.71781989e-01 6.66787480e-01 + 6.61774174e-01 6.56742636e-01 6.51693433e-01 6.46627134e-01 6.41544311e-01 + 6.36445535e-01 6.31331383e-01 6.26202429e-01 6.21059252e-01 6.15902432e-01 + 6.10732550e-01 6.05550188e-01 6.00355931e-01 5.95150364e-01 5.89934073e-01 + 5.84707647e-01 5.79471675e-01 5.74226746e-01 5.68973451e-01 5.63712384e-01 + 5.58444136e-01 5.53169301e-01 5.47888474e-01 5.42602250e-01 5.37311225e-01 + 5.32015995e-01 5.26717157e-01 5.21415308e-01 5.16111045e-01 5.10804967e-01 + 5.05497671e-01 5.00189755e-01 4.94881818e-01 4.89574458e-01 4.84268272e-01 + 4.78963860e-01 4.73661819e-01 4.68362745e-01 4.63067237e-01 4.57775892e-01 + 4.52489305e-01 4.47208073e-01 4.41932790e-01 4.36664051e-01 4.31402451e-01 + 4.26148581e-01 4.20903034e-01 4.15666401e-01 4.10439273e-01 4.05222238e-01 + 4.00015885e-01 3.94820800e-01 3.89637568e-01 3.84466774e-01 3.79309001e-01 + 3.74164830e-01 3.69034840e-01 3.63919610e-01 3.58819716e-01 3.53735733e-01 + 3.48668234e-01 3.43617790e-01 3.38584970e-01 3.33570341e-01 3.28574469e-01 + 3.23597917e-01 3.18641245e-01 3.13705012e-01 3.08789775e-01 3.03896087e-01 + 2.99024499e-01 2.94175562e-01 2.89349820e-01 2.84547819e-01 2.79770100e-01 + 2.75017200e-01 2.70289655e-01 2.65587999e-01 2.60912761e-01 2.56264468e-01 + 2.51643644e-01 2.47050809e-01 2.42486482e-01 2.37951176e-01 2.33445403e-01 + 2.28969671e-01 2.24524484e-01 2.20110342e-01 2.15727744e-01 2.11377184e-01 + 2.07059151e-01 2.02774132e-01 1.98522611e-01 1.94305066e-01 1.90121972e-01 + 1.85973802e-01 1.81861023e-01 1.77784097e-01 1.73743485e-01 1.69739642e-01 + 1.65773019e-01 1.61844064e-01 1.57953218e-01 1.54100921e-01 1.50287606e-01 + 1.46513704e-01 1.42779640e-01 1.39085834e-01 1.35432703e-01 1.31820659e-01 + 1.28250109e-01 1.24721454e-01 1.21235093e-01 1.17791419e-01 1.14390819e-01 + 1.11033677e-01 1.07720372e-01 1.04451277e-01 1.01226759e-01 9.80471834e-02 + 9.49129074e-02 9.18242846e-02 8.87816629e-02 8.57853854e-02 8.28357897e-02 + 7.99332082e-02 7.70779680e-02 7.42703909e-02 7.15107933e-02 6.87994863e-02 + 6.61367753e-02 6.35229606e-02 6.09583365e-02 5.84431923e-02 5.59778113e-02 + 5.35624714e-02 5.11974448e-02 4.88829981e-02 4.66193920e-02 4.44068816e-02 + 4.22457164e-02 4.01361399e-02 3.80783899e-02 3.60726981e-02 3.41192908e-02 + 3.22183880e-02 3.03702040e-02 2.85749470e-02 2.68328194e-02 2.51440175e-02 + 2.35087316e-02 2.19271461e-02 2.03994392e-02 1.89257830e-02 1.75063436e-02 + 1.61412811e-02 1.48307492e-02 1.35748956e-02 1.23738620e-02 1.12277835e-02 + 1.01367895e-02 9.10100279e-03 8.12054017e-03 7.19551214e-03 6.32602293e-03 + 5.51217055e-03 4.75404670e-03 4.05173684e-03 3.40532012e-03 2.81486937e-03 + 2.28045115e-03 1.80212569e-03 1.37994689e-03 1.01396233e-03 7.04213259e-04 + 4.50734584e-04 2.53554873e-04 1.12696347e-04 2.81748805e-05 0.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 9.99999383e-01 + 9.99986934e-01 9.99958482e-01 9.99914026e-01 9.99853569e-01 9.99777111e-01 + 9.99684655e-01 9.99576205e-01 9.99451764e-01 9.99311336e-01 9.99154925e-01 + 9.98982536e-01 9.98794176e-01 9.98589849e-01 9.98369562e-01 9.98133323e-01 + 9.97881139e-01 9.97613018e-01 9.97328969e-01 9.97029001e-01 9.96713123e-01 + 9.96381345e-01 9.96033679e-01 9.95670135e-01 9.95290724e-01 9.94895460e-01 + 9.94484354e-01 9.94057421e-01 9.93614672e-01 9.93156124e-01 9.92681790e-01 + 9.92191685e-01 9.91685825e-01 9.91164227e-01 9.90626907e-01 9.90073883e-01 + 9.89505171e-01 9.88920791e-01 9.88320760e-01 9.87705099e-01 9.87073826e-01 + 9.86426963e-01 9.85764529e-01 9.85086546e-01 9.84393036e-01 9.83684021e-01 + 9.82959523e-01 9.82219566e-01 9.81464174e-01 9.80693370e-01 9.79907179e-01 + 9.79105627e-01 9.78288739e-01 9.77456541e-01 9.76609060e-01 9.75746323e-01 + 9.74868358e-01 9.73975192e-01 9.73066855e-01 9.72143375e-01 9.71204782e-01 + 9.70251106e-01 9.69282377e-01 9.68298628e-01 9.67299888e-01 9.66286190e-01 + 9.65257566e-01 9.64214050e-01 9.63155675e-01 9.62082474e-01 9.60994483e-01 + 9.59891735e-01 9.58774266e-01 9.57642113e-01 9.56495310e-01 9.55333895e-01 + 9.54157905e-01 9.52967378e-01 9.51762352e-01 9.50542865e-01 9.49308956e-01 + 9.48060665e-01 9.46798032e-01 9.45521098e-01 9.44229902e-01 9.42924487e-01 + 9.41604894e-01 9.40271166e-01 9.38923345e-01 9.37561474e-01 9.36185597e-01 + 9.34795758e-01 9.33392001e-01 9.31974372e-01 9.30542915e-01 9.29097677e-01 + 9.27638704e-01 9.26166043e-01 9.24679740e-01 9.23179843e-01 9.21666401e-01 + 9.20139461e-01 9.18599073e-01 9.17045285e-01 9.15478149e-01 9.13897713e-01 + 9.12304028e-01 9.10697146e-01 9.09077118e-01 9.07443995e-01 9.05797831e-01 + 9.04138676e-01 9.02466586e-01 9.00781613e-01 8.99083811e-01 8.97373235e-01 + 8.95649939e-01 8.93913979e-01 8.92165409e-01 8.90404287e-01 8.88630668e-01 + 8.86844609e-01 8.85046167e-01 8.83235400e-01 8.81412366e-01 8.79577124e-01 + 8.77729731e-01 8.75870247e-01 8.73998732e-01 8.72115246e-01 8.70219848e-01 + 8.68312600e-01 8.66393562e-01 8.64462797e-01 8.62520365e-01 8.60566328e-01 + 8.58600751e-01 8.56623695e-01 8.54635223e-01 8.52635400e-01 8.50624289e-01 + 8.48601955e-01 8.46568462e-01 8.44523876e-01 8.42468262e-01 8.40401685e-01 + 8.38324213e-01 8.36235911e-01 8.34136846e-01 8.32027086e-01 8.29906698e-01 + 8.27775749e-01 8.25634309e-01 8.23482445e-01 8.21320227e-01 8.19147724e-01 + 8.16965004e-01 8.14772139e-01 8.12569199e-01 8.10356253e-01 8.08133373e-01 + 8.05900629e-01 8.03658094e-01 8.01405839e-01 7.99143936e-01 7.96872458e-01 + 7.94591477e-01 7.92301066e-01 7.90001299e-01 7.87692249e-01 7.85373990e-01 + 7.83046597e-01 7.80710143e-01 7.78364704e-01 7.76010355e-01 7.73647171e-01 + 7.71275227e-01 7.68894601e-01 7.66505367e-01 7.64107602e-01 7.61701383e-01 + 7.59286788e-01 7.56863893e-01 7.54432775e-01 7.51993514e-01 7.49546186e-01 + 7.47090871e-01 7.44627646e-01 7.42156591e-01 7.39677784e-01 7.37191306e-01 + 7.34697235e-01 7.32195652e-01 7.29686636e-01 7.27170269e-01 7.24646629e-01 + 7.22115799e-01 7.19577859e-01 7.17032890e-01 7.14480975e-01 7.11922193e-01 + 7.09356629e-01 7.06784363e-01 7.04205478e-01 7.01620056e-01 6.99028181e-01 + 6.96429935e-01 6.93825401e-01 6.91214663e-01 6.88597804e-01 6.85974909e-01 + 6.83346060e-01 6.80711343e-01 6.78070841e-01 6.75424640e-01 6.72772823e-01 + 6.70115475e-01 6.67452683e-01 6.64784530e-01 6.62111103e-01 6.59432486e-01 + 6.56748767e-01 6.54060030e-01 6.51366361e-01 6.48667847e-01 6.45964575e-01 + 6.43256630e-01 6.40544100e-01 6.37827071e-01 6.35105630e-01 6.32379864e-01 + 6.29649862e-01 6.26915709e-01 6.24177493e-01 6.21435303e-01 6.18689226e-01 + 6.15939349e-01 6.13185762e-01 6.10428551e-01 6.07667806e-01 6.04903614e-01 + 6.02136064e-01 5.99365245e-01 5.96591245e-01 5.93814154e-01 5.91034060e-01 + 5.88251051e-01 5.85465218e-01 5.82676649e-01 5.79885434e-01 5.77091661e-01 + 5.74295421e-01 5.71496803e-01 5.68695896e-01 5.65892790e-01 5.63087575e-01 + 5.60280341e-01 5.57471177e-01 5.54660174e-01 5.51847421e-01 5.49033008e-01 + 5.46217026e-01 5.43399564e-01 5.40580713e-01 5.37760563e-01 5.34939205e-01 + 5.32116728e-01 5.29293223e-01 5.26468780e-01 5.23643491e-01 5.20817444e-01 + 5.17990731e-01 5.15163442e-01 5.12335668e-01 5.09507499e-01 5.06679025e-01 + 5.03850338e-01 5.01021528e-01 4.98192685e-01 4.95363899e-01 4.92535262e-01 + 4.89706864e-01 4.86878796e-01 4.84051147e-01 4.81224009e-01 4.78397472e-01 + 4.75571627e-01 4.72746563e-01 4.69922372e-01 4.67099144e-01 4.64276968e-01 + 4.61455937e-01 4.58636139e-01 4.55817665e-01 4.53000605e-01 4.50185050e-01 + 4.47371089e-01 4.44558813e-01 4.41748311e-01 4.38939674e-01 4.36132992e-01 + 4.33328354e-01 4.30525850e-01 4.27725570e-01 4.24927603e-01 4.22132040e-01 + 4.19338968e-01 4.16548479e-01 4.13760661e-01 4.10975604e-01 4.08193396e-01 + 4.05414127e-01 4.02637885e-01 3.99864760e-01 3.97094840e-01 3.94328215e-01 + 3.91564971e-01 3.88805199e-01 3.86048986e-01 3.83296420e-01 3.80547590e-01 + 3.77802584e-01 3.75061489e-01 3.72324393e-01 3.69591384e-01 3.66862550e-01 + 3.64137977e-01 3.61417753e-01 3.58701965e-01 3.55990699e-01 3.53284044e-01 + 3.50582085e-01 3.47884908e-01 3.45192601e-01 3.42505249e-01 3.39822938e-01 + 3.37145754e-01 3.34473784e-01 3.31807111e-01 3.29145823e-01 3.26490003e-01 + 3.23839737e-01 3.21195110e-01 3.18556207e-01 3.15923112e-01 3.13295908e-01 + 3.10674681e-01 3.08059514e-01 3.05450491e-01 3.02847696e-01 3.00251211e-01 + 2.97661120e-01 2.95077506e-01 2.92500451e-01 2.89930039e-01 2.87366350e-01 + 2.84809468e-01 2.82259474e-01 2.79716449e-01 2.77180476e-01 2.74651635e-01 + 2.72130007e-01 2.69615674e-01 2.67108715e-01 2.64609210e-01 2.62117240e-01 + 2.59632885e-01 2.57156224e-01 2.54687336e-01 2.52226300e-01 2.49773196e-01 + 2.47328101e-01 2.44891094e-01 2.42462253e-01 2.40041655e-01 2.37629379e-01 + 2.35225501e-01 2.32830098e-01 2.30443248e-01 2.28065025e-01 2.25695507e-01 + 2.23334770e-01 2.20982888e-01 2.18639937e-01 2.16305993e-01 2.13981129e-01 + 2.11665421e-01 2.09358943e-01 2.07061767e-01 2.04773968e-01 2.02495620e-01 + 2.00226794e-01 1.97967564e-01 1.95718001e-01 1.93478179e-01 1.91248168e-01 + 1.89028040e-01 1.86817867e-01 1.84617718e-01 1.82427664e-01 1.80247775e-01 + 1.78078122e-01 1.75918773e-01 1.73769798e-01 1.71631265e-01 1.69503243e-01 + 1.67385801e-01 1.65279004e-01 1.63182923e-01 1.61097622e-01 1.59023170e-01 + 1.56959632e-01 1.54907074e-01 1.52865563e-01 1.50835164e-01 1.48815940e-01 + 1.46807959e-01 1.44811282e-01 1.42825975e-01 1.40852101e-01 1.38889723e-01 + 1.36938904e-01 1.34999707e-01 1.33072193e-01 1.31156424e-01 1.29252461e-01 + 1.27360366e-01 1.25480199e-01 1.23612020e-01 1.21755889e-01 1.19911865e-01 + 1.18080008e-01 1.16260376e-01 1.14453027e-01 1.12658019e-01 1.10875410e-01 + 1.09105257e-01 1.07347616e-01 1.05602543e-01 1.03870095e-01 1.02150327e-01 + 1.00443293e-01 9.87490497e-02 9.70676498e-02 9.53991475e-02 9.37435963e-02 + 9.21010491e-02 9.04715586e-02 8.88551768e-02 8.72519555e-02 8.56619461e-02 + 8.40851993e-02 8.25217658e-02 8.09716956e-02 7.94350381e-02 7.79118428e-02 + 7.64021582e-02 7.49060328e-02 7.34235143e-02 7.19546504e-02 7.04994879e-02 + 6.90580735e-02 6.76304533e-02 6.62166731e-02 6.48167779e-02 6.34308128e-02 + 6.20588220e-02 6.07008494e-02 5.93569385e-02 5.80271324e-02 5.67114736e-02 + 5.54100042e-02 5.41227659e-02 5.28497998e-02 5.15911468e-02 5.03468471e-02 + 4.91169405e-02 4.79014665e-02 4.67004638e-02 4.55139711e-02 4.43420261e-02 + 4.31846665e-02 4.20419294e-02 4.09138512e-02 3.98004680e-02 3.87018157e-02 + 3.76179292e-02 3.65488433e-02 3.54945922e-02 3.44552096e-02 3.34307289e-02 + 3.24211828e-02 3.14266036e-02 3.04470233e-02 2.94824730e-02 2.85329837e-02 + 2.75985858e-02 2.66793093e-02 2.57751834e-02 2.48862372e-02 2.40124992e-02 + 2.31539972e-02 2.23107588e-02 2.14828110e-02 2.06701802e-02 1.98728925e-02 + 1.90909735e-02 1.83244480e-02 1.75733407e-02 1.68376756e-02 1.61174762e-02 + 1.54127657e-02 1.47235665e-02 1.40499008e-02 1.33917900e-02 1.27492553e-02 + 1.21223172e-02 1.15109958e-02 1.09153106e-02 1.03352808e-02 9.77092489e-03 + 9.22226091e-03 8.68930645e-03 8.17207857e-03 7.67059382e-03 7.18486826e-03 + 6.71491743e-03 6.26075638e-03 5.82239964e-03 5.39986125e-03 4.99315473e-03 + 4.60229310e-03 4.22728887e-03 3.86815404e-03 3.52490011e-03 3.19753807e-03 + 2.88607840e-03 2.59053106e-03 2.31090551e-03 2.04721071e-03 1.79945510e-03 + 1.56764661e-03 1.35179266e-03 1.15190015e-03 9.67975486e-04 8.00024557e-04 + 6.48052736e-04 5.12064889e-04 3.92065368e-04 2.88058015e-04 2.00046158e-04 + 1.28032615e-04 7.20196905e-05 3.20091782e-05 8.00235860e-06 0.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 5.14330820e-07 5.21272731e-07 5.28308337e-07 5.35438902e-07 5.42665708e-07 + 5.49990054e-07 5.57413257e-07 5.64936650e-07 5.72561587e-07 5.80289437e-07 + 5.88121589e-07 5.96059452e-07 6.04104453e-07 6.12258036e-07 6.20521668e-07 + 6.28896834e-07 6.37385040e-07 6.45987811e-07 6.54706693e-07 6.63543253e-07 + 6.72499081e-07 6.81575785e-07 6.90774997e-07 7.00098371e-07 7.09547582e-07 + 7.19124329e-07 7.28830332e-07 7.38667338e-07 7.48637114e-07 7.58741451e-07 + 7.68982166e-07 7.79361100e-07 7.89880118e-07 8.00541111e-07 8.11345996e-07 + 8.22296713e-07 8.33395232e-07 8.44643548e-07 8.56043682e-07 8.67597683e-07 + 8.79307628e-07 8.91175622e-07 9.03203799e-07 9.15394319e-07 9.27749374e-07 + 9.40271185e-07 9.52962003e-07 9.65824108e-07 9.78859813e-07 9.92071461e-07 + 1.00546143e-06 1.01903211e-06 1.03278597e-06 1.04672545e-06 1.06085308e-06 + 1.07517139e-06 1.08968295e-06 1.10439038e-06 1.11929631e-06 1.13440343e-06 + 1.14971444e-06 1.16523211e-06 1.18095922e-06 1.19689860e-06 1.21305311e-06 + 1.22942566e-06 1.24601919e-06 1.26283668e-06 1.27988116e-06 1.29715568e-06 + 1.31466336e-06 1.33240734e-06 1.35039081e-06 1.36861700e-06 1.38708919e-06 + 1.40581070e-06 1.42478490e-06 1.44401519e-06 1.46350502e-06 1.48325792e-06 + 1.50327741e-06 1.52356711e-06 1.54413066e-06 1.56497176e-06 1.58609414e-06 + 1.60750162e-06 1.62919803e-06 1.65118728e-06 1.67347331e-06 1.69606014e-06 + 1.71895182e-06 1.74215248e-06 1.76566627e-06 1.78949742e-06 1.81365023e-06 + 1.83812902e-06 1.86293820e-06 1.88808224e-06 1.91356564e-06 1.93939299e-06 + 1.96556893e-06 1.99209816e-06 2.01898547e-06 2.04623566e-06 2.07385366e-06 + 2.10184441e-06 2.13021296e-06 2.15896439e-06 2.18810388e-06 2.21763667e-06 + 2.24756806e-06 2.27790343e-06 2.30864824e-06 2.33980801e-06 2.37138834e-06 + 2.40339491e-06 2.43583348e-06 2.46870986e-06 2.50202998e-06 2.53579982e-06 + 2.57002545e-06 2.60471302e-06 2.63986877e-06 2.67549902e-06 2.71161016e-06 + 2.74820870e-06 2.78530121e-06 2.82289435e-06 2.86099489e-06 2.89960967e-06 + 2.93874563e-06 2.97840981e-06 3.01860934e-06 3.05935144e-06 3.10064343e-06 + 3.14249274e-06 3.18490689e-06 3.22789350e-06 3.27146030e-06 3.31561513e-06 + 3.36036590e-06 3.40572068e-06 3.45168761e-06 3.49827496e-06 3.54549109e-06 + 3.59334450e-06 3.64184379e-06 3.69099766e-06 3.74081497e-06 3.79130466e-06 + 3.84247581e-06 3.89433762e-06 3.94689940e-06 4.00017061e-06 4.05416081e-06 + 4.10887972e-06 4.16433718e-06 4.22054314e-06 4.27750771e-06 4.33524113e-06 + 4.39375377e-06 4.45305616e-06 4.51315895e-06 4.57407295e-06 4.63580911e-06 + 4.69837851e-06 4.76179241e-06 4.82606221e-06 4.89119946e-06 4.95721586e-06 + 5.02412329e-06 5.09193376e-06 5.16065947e-06 5.23031277e-06 5.30090617e-06 + 5.37245238e-06 5.44496424e-06 5.51845479e-06 5.59293724e-06 5.66842498e-06 + 5.74493158e-06 5.82247079e-06 5.90105654e-06 5.98070296e-06 6.06142436e-06 + 6.14323526e-06 6.22615036e-06 6.31018456e-06 6.39535297e-06 6.48167090e-06 + 6.56915386e-06 6.65781757e-06 6.74767798e-06 6.83875123e-06 6.93105369e-06 + 7.02460195e-06 7.11941284e-06 7.21550338e-06 7.31289086e-06 7.41159278e-06 + 7.51162687e-06 7.61301112e-06 7.71576375e-06 7.81990322e-06 7.92544827e-06 + 8.03241786e-06 8.14083121e-06 8.25070782e-06 8.36206742e-06 8.47493005e-06 + 8.58931598e-06 8.70524577e-06 8.82274026e-06 8.94182058e-06 9.06250812e-06 + 9.18482457e-06 9.30879193e-06 9.43443248e-06 9.56176879e-06 9.69082375e-06 + 9.82162057e-06 9.95418275e-06 1.00885341e-05 1.02246988e-05 1.03627013e-05 + 1.05025665e-05 1.06443194e-05 1.07879855e-05 1.09335907e-05 1.10811611e-05 + 1.12307232e-05 1.13823040e-05 1.15359307e-05 1.16916309e-05 1.18494326e-05 + 1.20093641e-05 1.21714542e-05 1.23357320e-05 1.25022271e-05 1.26709694e-05 + 1.28419891e-05 1.30153172e-05 1.31909846e-05 1.33690230e-05 1.35494644e-05 + 1.37323412e-05 1.39176862e-05 1.41055329e-05 1.42959150e-05 1.44888666e-05 + 1.46844225e-05 1.48826178e-05 1.50834881e-05 1.52870696e-05 1.54933988e-05 + 1.57025128e-05 1.59144493e-05 1.61292462e-05 1.63469423e-05 1.65675766e-05 + 1.67911888e-05 1.70178190e-05 1.72475081e-05 1.74802973e-05 1.77162285e-05 + 1.79553440e-05 1.81976869e-05 1.84433006e-05 1.86922294e-05 1.89445180e-05 + 1.92002117e-05 1.94593565e-05 1.97219989e-05 1.99881863e-05 2.02579664e-05 + 2.05313877e-05 2.08084993e-05 2.10893511e-05 2.13739936e-05 2.16624779e-05 + 2.19548558e-05 2.22511800e-05 2.25515036e-05 2.28558807e-05 2.31643660e-05 + 2.34770149e-05 2.37938836e-05 2.41150291e-05 2.44405091e-05 2.47703821e-05 + 2.51047073e-05 2.54435449e-05 2.57869559e-05 2.61350018e-05 2.64877453e-05 + 2.68452498e-05 2.72075795e-05 2.75747995e-05 2.79469759e-05 2.83241756e-05 + 2.87064663e-05 2.90939168e-05 2.94865967e-05 2.98845766e-05 3.02879280e-05 + 3.06967235e-05 3.11110364e-05 3.15309413e-05 3.19565137e-05 3.23878300e-05 + 3.28249678e-05 3.32680056e-05 3.37170230e-05 3.41721009e-05 3.46333209e-05 + 3.51007660e-05 3.55745202e-05 3.60546687e-05 3.65412977e-05 3.70344947e-05 + 3.75343484e-05 3.80409486e-05 3.85543864e-05 3.90747540e-05 3.96021450e-05 + 4.01366543e-05 4.06783777e-05 4.12274128e-05 4.17838582e-05 4.23478140e-05 + 4.29193814e-05 4.34986633e-05 4.40857637e-05 4.46807882e-05 4.52838437e-05 + 4.58950387e-05 4.65144829e-05 4.71422878e-05 4.77785661e-05 4.84234323e-05 + 4.90770022e-05 4.97393933e-05 5.04107247e-05 5.10911171e-05 5.17806927e-05 + 5.24795755e-05 5.31878910e-05 5.39057667e-05 5.46333316e-05 5.53707164e-05 + 5.61180536e-05 5.68754776e-05 5.76431246e-05 5.84211325e-05 5.92096411e-05 + 6.00087922e-05 6.08187295e-05 6.16395984e-05 6.24715466e-05 6.33147236e-05 + 6.41692809e-05 6.50353721e-05 6.59131530e-05 6.68027813e-05 6.77044168e-05 + 6.86182217e-05 6.95443602e-05 7.04829988e-05 7.14343061e-05 7.23984533e-05 + 7.33756135e-05 7.43659624e-05 7.53696780e-05 7.63869407e-05 7.74179335e-05 + 7.84628415e-05 7.95218526e-05 8.05951571e-05 8.16829480e-05 8.27854208e-05 + 8.39027737e-05 8.50352074e-05 8.61829256e-05 8.73461345e-05 8.85250432e-05 + 8.97198636e-05 9.09308104e-05 9.21581014e-05 9.34019571e-05 9.46626011e-05 + 9.59402600e-05 9.72351634e-05 9.85475441e-05 9.98776379e-05 1.01225684e-04 + 1.02591925e-04 1.03976605e-04 1.05379975e-04 1.06802286e-04 1.08243794e-04 + 1.09704758e-04 1.11185441e-04 1.12686108e-04 1.14207029e-04 1.15748479e-04 + 1.17310733e-04 1.18894074e-04 1.20498784e-04 1.22125153e-04 1.23773474e-04 + 1.25444041e-04 1.27137157e-04 1.28853124e-04 1.30592251e-04 1.32354852e-04 + 1.34141242e-04 1.35951743e-04 1.37786681e-04 1.39646384e-04 1.41531188e-04 + 1.43441431e-04 1.45377457e-04 1.47339613e-04 1.49328252e-04 1.51343732e-04 + 1.53386415e-04 1.55456667e-04 1.57554862e-04 1.59681377e-04 1.61836592e-04 + 1.64020897e-04 1.66234683e-04 1.68478349e-04 1.70752297e-04 1.73056937e-04 + 1.75392682e-04 1.77759953e-04 1.80159175e-04 1.82590779e-04 1.85055202e-04 + 1.87552888e-04 1.90084285e-04 1.92649848e-04 1.95250038e-04 1.97885323e-04 + 2.00556177e-04 2.03263079e-04 2.06006515e-04 2.08786981e-04 2.11604973e-04 + 2.14461001e-04 2.17355576e-04 2.20289219e-04 2.23262457e-04 2.26275825e-04 + 2.29329865e-04 2.32425124e-04 2.35562161e-04 2.38741538e-04 2.41963826e-04 + 2.45229606e-04 2.48539465e-04 2.51893996e-04 2.55293803e-04 2.58739497e-04 + 2.62231698e-04 2.65771033e-04 2.69358138e-04 2.72993659e-04 2.76678248e-04 + 2.80412567e-04 2.84197289e-04 2.88033093e-04 2.91920669e-04 2.95860715e-04 + 2.99853940e-04 3.03901062e-04 3.08002807e-04 3.12159914e-04 3.16373129e-04 + 3.20643209e-04 3.24970923e-04 3.29357048e-04 3.33802372e-04 3.38307695e-04 + 3.42873826e-04 3.47501586e-04 3.52191806e-04 3.56945331e-04 3.61763013e-04 + 3.66645720e-04 3.71594328e-04 3.76609728e-04 3.81692821e-04 3.86844520e-04 + 3.92065751e-04 3.97357453e-04 4.02720577e-04 4.08156087e-04 4.13664960e-04 + 4.19248186e-04 4.24906769e-04 4.30641726e-04 4.36454087e-04 4.42344897e-04 + 4.48315216e-04 4.54366115e-04 4.60498684e-04 4.66714024e-04 4.73013252e-04 + 4.79397500e-04 4.85867917e-04 4.92425665e-04 4.99071922e-04 5.05807884e-04 + 5.12634761e-04 5.19553780e-04 5.26566185e-04 5.33673236e-04 5.40876211e-04 + 5.48176405e-04 5.55575129e-04 5.63073713e-04 5.70673505e-04 5.78375872e-04 + 5.86182197e-04 5.94093885e-04 6.02112356e-04 6.10239052e-04 6.18475434e-04 + 6.26822982e-04 6.35283197e-04 6.43857599e-04 6.52547729e-04 6.61355151e-04 + 6.70281445e-04 6.79328218e-04 6.88497095e-04 6.97789724e-04 7.07207775e-04 + 7.16752941e-04 7.26426939e-04 7.36231506e-04 7.46168405e-04 7.56239422e-04 + 7.66446368e-04 7.76791076e-04 7.87275407e-04 7.97901244e-04 8.08670498e-04 + 8.19585105e-04 8.30647025e-04 8.41858248e-04 8.53220789e-04 8.64736690e-04 + 8.76408020e-04 8.88236878e-04 9.00225390e-04 9.12375711e-04 9.24690024e-04 + 9.37170543e-04 9.49819512e-04 9.62639203e-04 9.75631922e-04 9.88800002e-04 + 1.00214581e-03 1.01567175e-03 1.02938025e-03 1.04327377e-03 1.05735481e-03 + 1.07162590e-03 1.08608961e-03 1.10074854e-03 1.11560531e-03 1.13066261e-03 + 1.14592314e-03 1.16138964e-03 1.17706488e-03 1.19295170e-03 1.20905294e-03 + 1.22537150e-03 1.24191031e-03 1.25867234e-03 1.27566061e-03 1.29287818e-03 + 1.31032812e-03 1.32801359e-03 1.34593776e-03 1.36410385e-03 1.38251512e-03 + 1.40117490e-03 1.42008652e-03 1.43925340e-03 1.45867896e-03 1.47836672e-03 + 1.49832020e-03 1.51854299e-03 1.53903873e-03 1.55981110e-03 1.58086383e-03 + 1.60220071e-03 1.62382558e-03 1.64574231e-03 1.66795486e-03 1.69046721e-03 + 1.71328340e-03 1.73640755e-03 1.75984380e-03 1.78359637e-03 1.80766953e-03 + 1.83206760e-03 1.85679497e-03 1.88185609e-03 1.90725546e-03 1.93299764e-03 + 1.95908726e-03 1.98552901e-03 2.01232765e-03 2.03948799e-03 2.06701491e-03 + 2.09491336e-03 2.12318836e-03 2.15184498e-03 2.18088838e-03 2.21032378e-03 + 2.24015647e-03 2.27039180e-03 2.30103523e-03 2.33209225e-03 2.36356844e-03 + 2.39546947e-03 2.42780106e-03 2.46056903e-03 2.49377928e-03 2.52743776e-03 + 2.56155052e-03 2.59612371e-03 2.63116353e-03 2.66667628e-03 2.70266835e-03 + 2.73914620e-03 2.77611639e-03 2.81358556e-03 2.85156046e-03 2.89004791e-03 + 2.92905481e-03 2.96858820e-03 3.00865516e-03 3.04926291e-03 3.09041874e-03 + 3.13213004e-03 3.17440433e-03 3.21724919e-03 3.26067232e-03 3.30468154e-03 + 3.34928475e-03 3.39448996e-03 3.44030531e-03 3.48673903e-03 3.53379947e-03 + 3.58149507e-03 3.62983443e-03 3.67882622e-03 3.72847925e-03 3.77880244e-03 + 3.82980485e-03 3.88149563e-03 3.93388409e-03 3.98697963e-03 4.04079180e-03 + 4.09533027e-03 4.15060484e-03 4.20662546e-03 4.26340218e-03 4.32094522e-03 + 4.37926491e-03 4.43837175e-03 4.49827634e-03 4.55898947e-03 4.62052205e-03 + 4.68288512e-03 4.74608991e-03 4.81014777e-03 4.87507022e-03 4.94086893e-03 + 5.00755572e-03 5.07514258e-03 5.14364166e-03 5.21306527e-03 5.28342588e-03 + 5.35473616e-03 5.42700890e-03 5.50025711e-03 5.57449395e-03 5.64973276e-03 + 5.72598707e-03 5.80327058e-03 5.88159719e-03 5.96098097e-03 6.04143618e-03 + 6.12297730e-03 6.20561898e-03 6.28937607e-03 6.37426363e-03 6.46029692e-03 + 6.54749139e-03 6.63586273e-03 6.72542681e-03 6.81619973e-03 6.90819782e-03 + 7.00143760e-03 7.09593584e-03 7.19170951e-03 7.28877585e-03 7.38715228e-03 + 7.48685650e-03 7.58790642e-03 7.69032021e-03 7.79411628e-03 7.89931328e-03 + 8.00593013e-03 8.11398598e-03 8.22350025e-03 8.33449264e-03 8.44698309e-03 + 8.56099182e-03 8.67653932e-03 8.79364636e-03 8.91233400e-03 9.03262356e-03 + 9.15453666e-03 9.27809523e-03 9.40332146e-03 9.53023786e-03 9.65886725e-03 + 9.78923276e-03 9.92135780e-03 1.00552661e-02 1.01909818e-02 1.03285293e-02 + 1.04679332e-02 1.06092186e-02 1.07524110e-02 1.08975360e-02 1.10446198e-02 + 1.11936888e-02 1.13447697e-02 1.14978898e-02 1.16530766e-02 1.18103578e-02 + 1.19697620e-02 1.21313176e-02 1.22950537e-02 1.24609997e-02 1.26291855e-02 + 1.27996413e-02 1.29723978e-02 1.31474859e-02 1.33249372e-02 1.35047836e-02 + 1.36870573e-02 1.38717912e-02 1.40590185e-02 1.42487727e-02 1.44410881e-02 + 1.46359991e-02 1.48335408e-02 1.50337487e-02 1.52366589e-02 1.54423077e-02 + 1.56507322e-02 1.58619697e-02 1.60760584e-02 1.62930365e-02 1.65129433e-02 + 1.67358181e-02 1.69617010e-02 1.71906327e-02 1.74226542e-02 1.76578074e-02 + 1.78961344e-02 1.81376781e-02 1.83824819e-02 1.86305898e-02 1.88820465e-02 + 1.91368970e-02 1.93951872e-02 1.96569636e-02 1.99222732e-02 2.01911636e-02 + 2.04636833e-02 2.07398811e-02 2.10198068e-02 2.13035106e-02 2.15910436e-02 + 2.18824574e-02 2.21778044e-02 2.24771377e-02 2.27805111e-02 2.30879791e-02 + 2.33995970e-02 2.37154208e-02 2.40355073e-02 2.43599140e-02 2.46886991e-02 + 2.50219219e-02 2.53596422e-02 2.57019207e-02 2.60488189e-02 2.64003992e-02 + 2.67567248e-02 2.71178596e-02 2.74838687e-02 2.78548179e-02 2.82307737e-02 + 2.86118038e-02 2.89979766e-02 2.93893616e-02 2.97860291e-02 3.01880504e-02 + 3.05954978e-02 3.10084445e-02 3.14269648e-02 3.18511338e-02 3.22810278e-02 + 3.27167240e-02 3.31583009e-02 3.36058377e-02 3.40594148e-02 3.45191140e-02 + 3.49850176e-02 3.54572096e-02 3.59357747e-02 3.64207990e-02 3.69123696e-02 + 3.74105750e-02 3.79155046e-02 3.84272493e-02 3.89459010e-02 3.94715529e-02 + 4.00042995e-02 4.05442365e-02 4.10914611e-02 4.16460716e-02 4.22081677e-02 + 4.27778503e-02 4.33552219e-02 4.39403863e-02 4.45334487e-02 4.51345155e-02 + 4.57436950e-02 4.63610966e-02 4.69868312e-02 4.76210113e-02 4.82637510e-02 + 4.89151657e-02 4.95753725e-02 5.02444901e-02 5.09226388e-02 5.16099405e-02 + 5.23065186e-02 5.30124984e-02 5.37280069e-02 5.44531725e-02 5.51881257e-02 + 5.59329985e-02 5.66879248e-02 5.74530404e-02 5.82284827e-02 5.90143912e-02 + 5.98109070e-02 6.06181734e-02 6.14363354e-02 6.22655402e-02 6.31059367e-02 + 6.39576760e-02 6.48209113e-02 6.56957975e-02 6.65824922e-02 6.74811545e-02 + 6.83919460e-02 6.93150305e-02 7.02505738e-02 7.11987441e-02 7.21597119e-02 + 7.31336498e-02 7.41207329e-02 7.51211387e-02 7.61350469e-02 7.71626398e-02 + 7.82041021e-02 7.92596210e-02 8.03293862e-02 8.14135900e-02 8.25124273e-02 + 8.36260956e-02 8.47547950e-02 8.58987284e-02 8.70581015e-02 8.82331227e-02 + 8.94240030e-02 9.06309567e-02 9.18542005e-02 9.30939545e-02 9.43504414e-02 + 9.56238870e-02 9.69145203e-02 9.82225733e-02 9.95482810e-02 1.00891882e-01 + 1.02253617e-01 1.03633732e-01 1.05032474e-01 1.06450095e-01 1.07886849e-01 + 1.09342995e-01 1.10818795e-01 1.12314514e-01 1.13830420e-01 1.15366786e-01 + 1.16923889e-01 1.18502008e-01 1.20101427e-01 1.21722433e-01 1.23365318e-01 + 1.25030377e-01 1.26717909e-01 1.28428217e-01 1.30161610e-01 1.31918398e-01 + 1.33698897e-01 1.35503428e-01 1.37332315e-01 1.39185886e-01 1.41064474e-01 + 1.42968418e-01 1.44898059e-01 1.46853745e-01 1.48835827e-01 1.50844660e-01 + 1.52880607e-01 1.54944033e-01 1.57035309e-01 1.59154811e-01 1.61302919e-01 + 1.63480021e-01 1.65686507e-01 1.67922774e-01 1.70189223e-01 1.72486263e-01 + 1.74814306e-01 1.77173771e-01 1.79565081e-01 1.81988667e-01 1.84444963e-01 + 1.86934413e-01 1.89457462e-01 1.92014565e-01 1.94606181e-01 1.97232776e-01 + 1.99894822e-01 2.02592797e-01 2.05327188e-01 2.08098484e-01 2.10907184e-01 + 2.13753793e-01 2.16638823e-01 2.19562792e-01 2.22526226e-01 2.25529657e-01 + 2.28573626e-01 2.31658678e-01 2.34785370e-01 2.37954263e-01 2.41165926e-01 + 2.44420936e-01 2.47719880e-01 2.51063349e-01 2.54451945e-01 2.57886277e-01 + 2.61366962e-01 2.64894626e-01 2.68469902e-01 2.72093434e-01 2.75765873e-01 + 2.79487878e-01 2.83260119e-01 2.87083274e-01 2.90958030e-01 2.94885084e-01 + 2.98865141e-01 3.02898917e-01 3.06987136e-01 3.11130534e-01 3.15329856e-01 + 3.19585855e-01 3.23899298e-01 3.28270959e-01 3.32701624e-01 3.37192090e-01 + 3.41743164e-01 3.46355663e-01 3.51030417e-01 3.55768266e-01 3.60570062e-01 + 3.65436668e-01 3.70368958e-01 3.75367819e-01 3.80434149e-01 3.85568860e-01 + 3.90772873e-01 3.96047126e-01 4.01392564e-01 4.06810150e-01 4.12300857e-01 + 4.17865672e-01 4.23505595e-01 4.29221640e-01 4.35014834e-01 4.40886219e-01 + 4.46836850e-01 4.52867796e-01 4.58980142e-01 4.65174986e-01 4.71453442e-01 + 4.77816637e-01 4.84265717e-01 4.90801840e-01 4.97426181e-01 5.04139930e-01 + 5.10944295e-01 5.17840498e-01 5.24829779e-01 5.31913394e-01 5.39092616e-01 + 5.46368736e-01 5.53743062e-01 5.61216919e-01 5.68791650e-01 5.76468618e-01 + 5.84249201e-01 5.92134798e-01 6.00126828e-01 6.08226725e-01 6.16435947e-01 + 6.24755968e-01 6.33188284e-01 6.41734412e-01 6.50395886e-01 6.59174263e-01 + 6.68071123e-01 6.77088063e-01 6.86226704e-01 6.95488690e-01 7.04875684e-01 + 7.14389374e-01 7.24031471e-01 7.33803706e-01 7.43707837e-01 7.53745644e-01 + 7.63918931e-01 7.74229527e-01 7.84679284e-01 7.95270082e-01 8.06003823e-01 + 8.16882438e-01 8.27907880e-01 8.39082133e-01 8.50407205e-01 8.61885131e-01 + 8.73517974e-01 8.85307825e-01 8.97256804e-01 9.09367057e-01 9.21640763e-01 + 9.34080126e-01 9.46687383e-01 9.59464800e-01 9.72414674e-01 9.85539332e-01 + 9.98841133e-01 1.01232247e+00 1.02598576e+00 1.03983347e+00 1.05386807e+00 + 1.06809210e+00 1.08250812e+00 1.09711870e+00 1.11192649e+00 1.12693414e+00 + 1.14214434e+00 1.15755983e+00 1.17318339e+00 1.18901782e+00 1.20506596e+00 + 1.22133071e+00 1.23781498e+00 1.25452174e+00 1.27145399e+00 1.28861478e+00 + 1.30600718e+00 1.32363433e+00 1.34149939e+00 1.35960557e+00 1.37795614e+00 + 1.39655438e+00 1.41540364e+00 1.43450731e+00 1.45386882e+00 1.47349165e+00 + 1.49337933e+00 1.51353544e+00 1.53396359e+00 1.55466746e+00 1.57565077e+00 + 1.59691729e+00 1.61847085e+00 1.64031531e+00 1.66245461e+00 1.68489272e+00 + 1.70763367e+00 1.73068156e+00 1.75404053e+00 1.77771477e+00 1.80170855e+00 + 1.82602617e+00 1.85067200e+00 1.87565047e+00 1.90096608e+00 1.92662338e+00 + 1.95262697e+00 1.97898153e+00 2.00569179e+00 2.03276257e+00 2.06019871e+00 + 2.08800517e+00 2.11618692e+00 2.14474905e+00 2.17369667e+00 2.20303501e+00 + 2.23276932e+00 2.26290495e+00 2.29344733e+00 2.32440193e+00 2.35577433e+00 + 2.38757016e+00 2.41979514e+00 2.45245505e+00 2.48555578e+00 2.51910327e+00 + 2.55310354e+00 2.58756272e+00 2.62248699e+00 2.65788264e+00 2.69375602e+00 + 2.73011358e+00 2.76696186e+00 2.80430747e+00 2.84215715e+00 2.88051767e+00 + 2.91939595e+00 2.95879897e+00 2.99873381e+00 3.03920765e+00 3.08022776e+00 + 3.12180152e+00 3.16393640e+00 3.20663997e+00 3.24991992e+00 3.29378401e+00 + 3.33824013e+00 3.38329628e+00 3.42896055e+00 3.47524115e+00 3.52214640e+00 + 3.56968472e+00 3.61786467e+00 3.66669491e+00 3.71618420e+00 3.76634145e+00 + 3.81717567e+00 3.86869600e+00 3.92091170e+00 3.97383215e+00 4.02746687e+00 + 4.08182549e+00 4.13691779e+00 4.19275367e+00 4.24934317e+00 4.30669645e+00 + 4.36482383e+00 4.42373576e+00 4.48344281e+00 4.54395573e+00 4.60528539e+00 + 4.66744282e+00 4.73043919e+00 4.79428581e+00 4.85899417e+00 4.92457590e+00 + 4.99104278e+00 5.05840677e+00 5.12667997e+00 5.19587464e+00 5.26600324e+00 + 5.33707836e+00 5.40911278e+00 5.48211944e+00 5.55611148e+00 5.63110218e+00 + 5.70710504e+00 5.78413370e+00 5.86220201e+00 5.94132401e+00 6.02151392e+00 + 6.10278615e+00 6.18515531e+00 6.26863620e+00 6.35324384e+00 6.43899342e+00 + 6.52590036e+00 6.61398028e+00 6.70324902e+00 6.79372261e+00 6.88541732e+00 + 6.97834963e+00 7.07253625e+00 7.16799410e+00 7.26474035e+00 7.36279238e+00 + 7.46216781e+00 7.56288451e+00 7.66496058e+00 7.76841437e+00 7.87326448e+00 + 7.97952974e+00 8.08722926e+00 8.19638240e+00 8.30700878e+00 8.41912828e+00 + 8.53276106e+00 8.64792753e+00 8.76464840e+00 8.88294465e+00 9.00283754e+00 + 9.12434863e+00 9.24749974e+00 9.37231303e+00 9.49881091e+00 9.62701614e+00 + 9.75695174e+00 9.88864109e+00 1.00221078e+01 1.01573760e+01 1.02944699e+01 + 1.04334141e+01 1.05742336e+01 1.07169538e+01 1.08616003e+01 1.10081990e+01 + 1.11567764e+01 1.13073592e+01 1.14599743e+01 1.16146493e+01 1.17714120e+01 + 1.19302904e+01 1.20913133e+01 1.22545094e+01 1.24199083e+01 1.25875395e+01 + 1.27574332e+01 1.29296200e+01 1.31041307e+01 1.32809969e+01 1.34602502e+01 + 1.36419229e+01 1.38260476e+01 1.40126574e+01 1.42017859e+01 1.43934671e+01 + 1.45877353e+01 1.47846257e+01 1.49841734e+01 1.51864144e+01 1.53913851e+01 + 1.55991223e+01 1.58096632e+01 1.60230459e+01 1.62393086e+01 1.64584901e+01 + 1.66806300e+01 1.69057680e+01 1.71339448e+01 1.73652012e+01 1.75995789e+01 + 1.78371200e+01 1.80778672e+01 1.83218638e+01 1.85691535e+01 1.88197809e+01 + 1.90737911e+01 1.93312296e+01 1.95921427e+01 1.98565774e+01 2.01245812e+01 + 2.03962022e+01 2.06714892e+01 2.09504918e+01 2.12332601e+01 2.15198449e+01 + 2.18102977e+01 2.21046708e+01 2.24030170e+01 2.27053900e+01 2.30118441e+01 + 2.33224344e+01 2.36372168e+01 2.39562477e+01 2.42795846e+01 2.46072856e+01 + 2.49394095e+01 2.52760162e+01 2.56171659e+01 2.59629202e+01 2.63133411e+01 + 2.66684917e+01 2.70284357e+01 2.73932378e+01 2.77629637e+01 2.81376798e+01 + 2.85174534e+01 2.89023527e+01 2.92924471e+01 2.96878066e+01 3.00885022e+01 + 3.04946060e+01 3.09061910e+01 3.13233311e+01 3.17461013e+01 3.21745777e+01 + 3.26088372e+01 3.30489579e+01 3.34950189e+01 3.39471004e+01 3.44052836e+01 + 3.48696509e+01 3.53402857e+01 3.58172727e+01 3.63006976e+01 3.67906473e+01 + 3.72872097e+01 3.77904743e+01 3.83005315e+01 3.88174728e+01 3.93413913e+01 + 3.98723811e+01 4.04105377e+01 4.09559578e+01 4.15087394e+01 4.20689818e+01 + 4.26367859e+01 4.32122536e+01 4.37954883e+01 4.43865950e+01 4.49856798e+01 + 4.55928504e+01 4.62082161e+01 4.68318873e+01 4.74639761e+01 4.81045963e+01 + 4.87538629e+01 4.94118926e+01 5.00788037e+01 5.07547161e+01 5.14397513e+01 + 5.21340324e+01 5.28376842e+01 5.35508332e+01 5.42736075e+01 5.50061371e+01 + 5.57485536e+01 5.65009905e+01 5.72635830e+01 5.80364683e+01 5.88197851e+01 + 5.96136743e+01 6.04182787e+01 6.12337427e+01 6.20602131e+01 6.28978383e+01 + 6.37467689e+01 6.46071576e+01 6.54791588e+01 6.63629295e+01 6.72586284e+01 + 6.81664165e+01 6.90864570e+01 7.00189152e+01 7.09639589e+01 7.19217577e+01 + 7.28924840e+01 7.38763121e+01 7.48734189e+01 7.58839837e+01 7.69081880e+01 + 7.79462160e+01 7.89982542e+01 8.00644917e+01 8.11451203e+01 8.22403340e+01 + 8.33503299e+01 8.44753073e+01 8.56154685e+01 8.67710184e+01 8.79421648e+01 + 8.91291181e+01 9.03320917e+01 9.15513018e+01 9.27869675e+01 9.40393110e+01 + 9.53085573e+01 9.65949346e+01 9.78986742e+01 9.92200103e+01 1.00559180e+02 + 1.01916425e+02 1.03291989e+02 1.04686118e+02 1.06099064e+02 1.07531081e+02 + 1.08982425e+02 1.10453359e+02 1.11944145e+02 1.13455052e+02 1.14986352e+02 + 1.16538321e+02 1.18111235e+02 1.19705380e+02 1.21321041e+02 1.22958508e+02 + 1.24618076e+02 1.26300043e+02 1.28004712e+02 1.29732388e+02 1.31483383e+02 + 1.33258011e+02 1.35056592e+02 1.36879447e+02 1.38726906e+02 1.40599300e+02 + 1.42496965e+02 1.44420243e+02 1.46369480e+02 1.48345025e+02 1.50347234e+02 + 1.52376467e+02 1.54433089e+02 1.56517469e+02 1.58629981e+02 1.60771006e+02 + 1.62940929e+02 1.65140138e+02 1.67369031e+02 1.69628007e+02 1.71917472e+02 + 1.74237838e+02 1.76589522e+02 1.78972947e+02 1.81388540e+02 1.83836737e+02 + 1.86317977e+02 1.88832706e+02 1.91381377e+02 1.93964447e+02 1.96582380e+02 + 1.99235648e+02 2.01924727e+02 2.04650100e+02 2.07412257e+02 2.10211696e+02 + 2.13048918e+02 2.15924434e+02 2.18838761e+02 2.21792423e+02 2.24785950e+02 + 2.27819880e+02 2.30894760e+02 2.34011141e+02 2.37169584e+02 2.40370656e+02 + 2.43614933e+02 2.46902998e+02 2.50235442e+02 2.53612863e+02 2.57035870e+02 + 2.60505077e+02 2.64021108e+02 2.67584595e+02 2.71196178e+02 2.74856506e+02 + 2.78566238e+02 2.82326040e+02 2.86136587e+02 2.89998566e+02 2.93912670e+02 + 2.97879602e+02 3.01900076e+02 3.05974814e+02 3.10104549e+02 3.14290023e+02 + 3.18531988e+02 3.22831206e+02 3.27188451e+02 3.31604506e+02 3.36080164e+02 + 3.40616230e+02 3.45213519e+02 3.49872858e+02 3.54595083e+02 3.59381045e+02 + 3.64231602e+02 3.69147628e+02 3.74130004e+02 3.79179628e+02 3.84297406e+02 + 3.89484259e+02 3.94741119e+02 4.00068931e+02 4.05468651e+02 4.10941252e+02 + 4.16487716e+02 4.22109041e+02 4.27806237e+02 4.33580327e+02 4.39432351e+02 + 4.45363359e+02 4.51374417e+02 4.57466607e+02 4.63641023e+02 4.69898775e+02 + 4.76240987e+02 4.82668801e+02 4.89183370e+02 4.95785866e+02 5.02477476e+02 + 5.09259403e+02 5.16132865e+02 5.23099098e+02 5.30159354e+02 5.37314902e+02 + 5.44567029e+02 5.51917037e+02 5.59366248e+02 5.66916001e+02 5.74567652e+02 + 5.82322578e+02 5.90182172e+02 5.98147847e+02 6.06221034e+02 6.14403185e+02 + 6.22695770e+02 6.31100280e+02 6.39618226e+02 6.48251138e+02 6.57000568e+02 + 6.65868089e+02 6.74855295e+02 6.83963800e+02 6.93195244e+02 7.02551283e+02 + 7.12033601e+02 7.21643902e+02 7.31383912e+02 7.41255383e+02 7.51260090e+02 + 7.61399829e+02 7.71676425e+02 7.82091723e+02 7.92647596e+02 8.03345942e+02 + 8.14188683e+02 8.25177768e+02 8.36315173e+02 8.47602899e+02 8.59042975e+02 + 8.70637458e+02 8.82388431e+02 8.94298006e+02 9.06368325e+02 9.18601557e+02 + 9.30999900e+02 9.43565584e+02 9.56300866e+02 9.69208036e+02 9.82289413e+02 + 9.95547350e+02 1.00898423e+03 1.02260247e+03 1.03640451e+03 1.05039283e+03 + 1.06456996e+03 1.07893844e+03 1.09350084e+03 1.10825980e+03 1.12321795e+03 + 1.13837800e+03 1.15374266e+03 1.16931470e+03 1.18509691e+03 1.20109213e+03 + 1.21730325e+03 1.23373316e+03 1.25038483e+03 1.26726124e+03 1.28436543e+03 + 1.30170048e+03 1.31926950e+03 1.33707565e+03 1.35512213e+03 1.37341218e+03 + 1.39194909e+03 1.41073620e+03 1.42977687e+03 1.44907454e+03 1.46863266e+03 + 1.48845476e+03 1.50854440e+03 1.52890519e+03 1.54954078e+03 1.57045490e+03 + 1.59165129e+03 1.61313377e+03 1.63490620e+03 1.65697249e+03 1.67933661e+03 + 1.70200257e+03 1.72497446e+03 1.74825640e+03 1.77185258e+03 1.79576723e+03 + 1.82000465e+03 1.84456921e+03 1.86946532e+03 1.89469745e+03 1.92027014e+03 + 1.94618798e+03 1.97245563e+03 1.99907782e+03 2.02605932e+03 2.05340500e+03 + 2.08111975e+03 2.10920858e+03 2.13767652e+03 2.16652868e+03 2.19577027e+03 + 2.22540653e+03 2.25544279e+03 2.28588445e+03 2.31673697e+03 2.34800592e+03 + 2.37969690e+03 2.41181561e+03 2.44436783e+03 2.47735940e+03 2.51079626e+03 + 2.54468442e+03 2.57902996e+03 2.61383907e+03 2.64911799e+03 2.68487308e+03 + 2.72111074e+03 2.75783751e+03 2.79505998e+03 2.83278484e+03 2.87101887e+03 + 2.90976894e+03 2.94904202e+03 2.98884517e+03 3.02918554e+03 3.07007039e+03 + 3.11150706e+03 3.15350299e+03 3.19606575e+03 3.23920297e+03 3.28292242e+03 + 3.32723194e+03 3.37213951e+03 3.41765320e+03 3.46378118e+03 3.51053175e+03 + 3.55791332e+03 3.60593439e+03 3.65460360e+03 3.70392970e+03 3.75392155e+03 + 3.80458814e+03 3.85593857e+03 3.90798208e+03 3.96072802e+03 4.01418588e+03 + 4.06836525e+03 4.12327588e+03 4.17892763e+03 4.23533052e+03 4.29249467e+03 + 4.35043037e+03 4.40914803e+03 4.46865819e+03 4.52897157e+03 4.59009899e+03 + 4.65205144e+03 4.71484007e+03 4.77847616e+03 4.84297113e+03 4.90833660e+03 + 4.97458430e+03 5.04172615e+03 5.10977421e+03 5.17874071e+03 5.24863805e+03 + 5.31947879e+03 5.39127567e+03 5.46404159e+03 5.53778963e+03 5.61253304e+03 + 5.68828527e+03 5.76505992e+03 5.84287079e+03 5.92173188e+03 6.00165735e+03 + 6.08266158e+03 6.16475912e+03 6.24796473e+03 6.33229336e+03 6.41776017e+03 + 6.50438053e+03 6.59216999e+03 6.68114436e+03 6.77131960e+03 6.86271194e+03 + 6.95533780e+03 7.04921383e+03 7.14435690e+03 7.24078412e+03 7.33851281e+03 + 7.43756054e+03 7.53794512e+03 7.63968458e+03 7.74279722e+03 7.84730157e+03 + 7.95321641e+03 8.06056079e+03 8.16935398e+03 8.27961556e+03 8.39136533e+03 + 8.50462339e+03 8.61941009e+03 8.73574606e+03 8.85365222e+03 8.97314975e+03 + 9.09426014e+03 9.21700515e+03 9.34140685e+03 9.46748760e+03 9.59527005e+03 + 9.72477718e+03 9.85603227e+03 9.98905890e+03 1.01238810e+04 1.02605228e+04 + 1.03990088e+04 1.05393640e+04 1.06816135e+04 1.08257830e+04 1.09718983e+04 + 1.11199858e+04 1.12700720e+04 1.14221839e+04 1.15763488e+04 1.17325945e+04 + 1.18909491e+04 1.20514409e+04 1.22140989e+04 1.23789523e+04 1.25460308e+04 + 1.27153642e+04 1.28869832e+04 1.30609185e+04 1.32372014e+04 1.34158636e+04 + 1.35969372e+04 1.37804547e+04 1.39664492e+04 1.41549540e+04 1.43460031e+04 + 1.45396308e+04 1.47358718e+04 1.49347615e+04 1.51363357e+04 1.53406304e+04 + 1.55476825e+04 1.57575292e+04 1.59702082e+04 1.61857578e+04 1.64042165e+04 + 1.66256239e+04 1.68500195e+04 1.70774438e+04 1.73079377e+04 1.75415425e+04 + 1.77783003e+04 1.80182536e+04 1.82614455e+04 1.85079198e+04 1.87577208e+04 + 1.90108933e+04 1.92674828e+04 1.95275356e+04 1.97910983e+04 2.00582183e+04 + 2.03289436e+04 2.06033228e+04 2.08814054e+04 2.11632412e+04 2.14488810e+04 + 2.17383760e+04 2.20317784e+04 2.23291407e+04 2.26305166e+04 2.29359602e+04 + 2.32455263e+04 2.35592706e+04 2.38772495e+04 2.41995202e+04 2.45261405e+04 + 2.48571693e+04 2.51926659e+04 2.55326907e+04 2.58773048e+04 2.62265702e+04 + 2.65805496e+04 2.69393066e+04 2.73029058e+04 2.76714125e+04 2.80448928e+04 + 2.84234141e+04 2.88070442e+04 2.91958522e+04 2.95899080e+04 2.99892822e+04 + 3.03940469e+04 3.08042746e+04 3.12200391e+04 3.16414153e+04 3.20684787e+04 + 3.25013062e+04 3.29399755e+04 3.33845656e+04 3.38351563e+04 3.42918286e+04 + 3.47546646e+04 3.52237475e+04 3.56991616e+04 3.61809923e+04 3.66693263e+04 + 3.71642513e+04 3.76658563e+04 3.81742315e+04 3.86894682e+04 3.92116590e+04 + 3.97408978e+04 4.02772798e+04 4.08209013e+04 4.13718600e+04 4.19302550e+04 + 4.24961867e+04 4.30697567e+04 4.36510682e+04 4.42402256e+04 4.48373349e+04 + 4.54425033e+04 4.60558397e+04 4.66774542e+04 4.73074587e+04 4.79459664e+04 + 4.85930919e+04 4.92489517e+04 4.99136637e+04 5.05873472e+04 5.12701234e+04 + 5.19621151e+04 5.26634465e+04 5.33742438e+04 5.40946347e+04 5.48247487e+04 + 5.55647170e+04 5.63146726e+04 5.70747504e+04 5.78450870e+04 5.86258207e+04 + 5.94170921e+04 6.02190431e+04 6.10318181e+04 6.18555631e+04 6.26904262e+04 + 6.35365574e+04 6.43941088e+04 6.52632345e+04 6.61440908e+04 6.70368361e+04 + 6.79416306e+04 6.88586372e+04 6.97880206e+04 7.07299478e+04 7.16845883e+04 + 7.26521134e+04 7.36326973e+04 7.46265160e+04 7.56337483e+04 7.66545752e+04 + 7.76891802e+04 7.87377492e+04 7.98004708e+04 8.08775358e+04 8.19691380e+04 + 8.30754735e+04 8.41967412e+04 8.53331426e+04 8.64848820e+04 8.76521664e+04 + 8.88352056e+04 9.00342122e+04 9.12494018e+04 9.24809928e+04 9.37292066e+04 + 9.49942675e+04 9.62764028e+04 9.75758431e+04 9.88928220e+04 1.00227576e+05 + 1.01580345e+05 1.02951373e+05 1.04340905e+05 1.05749192e+05 1.07176486e+05 + 1.08623044e+05 1.10089127e+05 1.11574997e+05 1.13080923e+05 1.14607173e+05 + 1.16154023e+05 1.17721751e+05 1.19310639e+05 1.20920972e+05 1.22553039e+05 + 1.24207135e+05 1.25883556e+05 1.27582603e+05 1.29304582e+05 1.31049803e+05 + 1.32818579e+05 1.34611228e+05 1.36428073e+05 1.38269439e+05 1.40135659e+05 + 1.42027066e+05 1.43944002e+05 1.45886811e+05 1.47855842e+05 1.49851449e+05 + 1.51873990e+05 1.53923830e+05 1.56001336e+05 1.58106882e+05 1.60240847e+05 + 1.62403614e+05 1.64595572e+05 1.66817114e+05 1.69068641e+05 1.71350556e+05 + 1.73663271e+05 1.76007200e+05 1.78382765e+05 1.80790393e+05 1.83230516e+05 + 1.85703574e+05 1.88210011e+05 1.90750277e+05 1.93324829e+05 1.95934129e+05 + 1.98578648e+05 2.01258859e+05 2.03975245e+05 2.06728294e+05 2.09518501e+05 + 2.12346367e+05 2.15212401e+05 2.18117118e+05 2.21061039e+05 2.24044695e+05 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.51514411e-06 1.53559398e-06 1.55631985e-06 1.57732546e-06 1.59861459e-06 + 1.62019105e-06 1.64205873e-06 1.66422156e-06 1.68668352e-06 1.70944864e-06 + 1.73252103e-06 1.75590483e-06 1.77960423e-06 1.80362351e-06 1.82796697e-06 + 1.85263900e-06 1.87764402e-06 1.90298654e-06 1.92867110e-06 1.95470233e-06 + 1.98108490e-06 2.00782356e-06 2.03492310e-06 2.06238841e-06 2.09022442e-06 + 2.11843613e-06 2.14702861e-06 2.17600701e-06 2.20537652e-06 2.23514243e-06 + 2.26531010e-06 2.29588494e-06 2.32687244e-06 2.35827818e-06 2.39010781e-06 + 2.42236703e-06 2.45506166e-06 2.48819757e-06 2.52178072e-06 2.55581713e-06 + 2.59031293e-06 2.62527433e-06 2.66070759e-06 2.69661910e-06 2.73301530e-06 + 2.76990274e-06 2.80728805e-06 2.84517795e-06 2.88357925e-06 2.92249885e-06 + 2.96194375e-06 3.00192104e-06 3.04243789e-06 3.08350160e-06 3.12511955e-06 + 3.16729922e-06 3.21004818e-06 3.25337412e-06 3.29728483e-06 3.34178821e-06 + 3.38689225e-06 3.43260505e-06 3.47893484e-06 3.52588994e-06 3.57347879e-06 + 3.62170995e-06 3.67059208e-06 3.72013398e-06 3.77034453e-06 3.82123279e-06 + 3.87280787e-06 3.92507907e-06 3.97805577e-06 4.03174749e-06 4.08616389e-06 + 4.14131475e-06 4.19720997e-06 4.25385962e-06 4.31127386e-06 4.36946302e-06 + 4.42843756e-06 4.48820807e-06 4.54878531e-06 4.61018016e-06 4.67240365e-06 + 4.73546697e-06 4.79938146e-06 4.86415859e-06 4.92981003e-06 4.99634755e-06 + 5.06378314e-06 5.13212890e-06 5.20139712e-06 5.27160025e-06 5.34275092e-06 + 5.41486190e-06 5.48794616e-06 5.56201684e-06 5.63708725e-06 5.71317088e-06 + 5.79028141e-06 5.86843270e-06 5.94763880e-06 6.02791394e-06 6.10927255e-06 + 6.19172925e-06 6.27529887e-06 6.35999643e-06 6.44583715e-06 6.53283646e-06 + 6.62101000e-06 6.71037362e-06 6.80094337e-06 6.89273554e-06 6.98576663e-06 + 7.08005335e-06 7.17561266e-06 7.27246174e-06 7.37061798e-06 7.47009904e-06 + 7.57092278e-06 7.67310735e-06 7.77667110e-06 7.88163264e-06 7.98801085e-06 + 8.09582484e-06 8.20509399e-06 8.31583795e-06 8.42807662e-06 8.54183017e-06 + 8.65711905e-06 8.77396398e-06 8.89238596e-06 9.01240628e-06 9.13404651e-06 + 9.25732852e-06 9.38227446e-06 9.50890680e-06 9.63724829e-06 9.76732200e-06 + 9.89915131e-06 1.00327599e-05 1.01681718e-05 1.03054114e-05 1.04445033e-05 + 1.05854725e-05 1.07283444e-05 1.08731446e-05 1.10198992e-05 1.11686345e-05 + 1.13193773e-05 1.14721546e-05 1.16269940e-05 1.17839233e-05 1.19429706e-05 + 1.21041646e-05 1.22675342e-05 1.24331089e-05 1.26009182e-05 1.27709925e-05 + 1.29433623e-05 1.31180586e-05 1.32951127e-05 1.34745565e-05 1.36564223e-05 + 1.38407427e-05 1.40275509e-05 1.42168804e-05 1.44087653e-05 1.46032400e-05 + 1.48003396e-05 1.50000995e-05 1.52025554e-05 1.54077440e-05 1.56157019e-05 + 1.58264667e-05 1.60400761e-05 1.62565686e-05 1.64759832e-05 1.66983591e-05 + 1.69237365e-05 1.71521557e-05 1.73836580e-05 1.76182848e-05 1.78560784e-05 + 1.80970814e-05 1.83413373e-05 1.85888899e-05 1.88397837e-05 1.90940638e-05 + 1.93517759e-05 1.96129664e-05 1.98776821e-05 2.01459707e-05 2.04178804e-05 + 2.06934601e-05 2.09727592e-05 2.12558280e-05 2.15427174e-05 2.18334790e-05 + 2.21281649e-05 2.24268282e-05 2.27295226e-05 2.30363024e-05 2.33472229e-05 + 2.36623398e-05 2.39817098e-05 2.43053904e-05 2.46334396e-05 2.49659166e-05 + 2.53028810e-05 2.56443934e-05 2.59905151e-05 2.63413085e-05 2.66968365e-05 + 2.70571631e-05 2.74223530e-05 2.77924718e-05 2.81675861e-05 2.85477634e-05 + 2.89330718e-05 2.93235808e-05 2.97193605e-05 3.01204820e-05 3.05270174e-05 + 3.09390399e-05 3.13566233e-05 3.17798429e-05 3.22087747e-05 3.26434958e-05 + 3.30840843e-05 3.35306194e-05 3.39831813e-05 3.44418515e-05 3.49067124e-05 + 3.53778474e-05 3.58553414e-05 3.63392801e-05 3.68297505e-05 3.73268407e-05 + 3.78306402e-05 3.83412395e-05 3.88587303e-05 3.93832056e-05 3.99147598e-05 + 4.04534884e-05 4.09994881e-05 4.15528573e-05 4.21136952e-05 4.26821027e-05 + 4.32581821e-05 4.38420367e-05 4.44337716e-05 4.50334932e-05 4.56413092e-05 + 4.62573288e-05 4.68816629e-05 4.75144236e-05 4.81557246e-05 4.88056813e-05 + 4.94644104e-05 5.01320304e-05 5.08086612e-05 5.14944245e-05 5.21894435e-05 + 5.28938432e-05 5.36077501e-05 5.43312927e-05 5.50646008e-05 5.58078064e-05 + 5.65610431e-05 5.73244461e-05 5.80981528e-05 5.88823022e-05 5.96770352e-05 + 6.04824947e-05 6.12988255e-05 6.21261743e-05 6.29646898e-05 6.38145227e-05 + 6.46758258e-05 6.55487539e-05 6.64334638e-05 6.73301147e-05 6.82388677e-05 + 6.91598861e-05 7.00933354e-05 7.10393835e-05 7.19982003e-05 7.29699583e-05 + 7.39548321e-05 7.49529987e-05 7.59646376e-05 7.69899305e-05 7.80290617e-05 + 7.90822181e-05 8.01495889e-05 8.12313660e-05 8.23277438e-05 8.34389194e-05 + 8.45650925e-05 8.57064656e-05 8.68632437e-05 8.80356348e-05 8.92238497e-05 + 9.04281018e-05 9.16486078e-05 9.28855869e-05 9.41392614e-05 9.54098568e-05 + 9.66976013e-05 9.80027266e-05 9.93254670e-05 1.00666060e-04 1.02024748e-04 + 1.03401773e-04 1.04797385e-04 1.06211833e-04 1.07645371e-04 1.09098258e-04 + 1.10570755e-04 1.12063126e-04 1.13575639e-04 1.15108567e-04 1.16662184e-04 + 1.18236771e-04 1.19832610e-04 1.21449988e-04 1.23089195e-04 1.24750527e-04 + 1.26434282e-04 1.28140763e-04 1.29870275e-04 1.31623131e-04 1.33399646e-04 + 1.35200138e-04 1.37024931e-04 1.38874353e-04 1.40748737e-04 1.42648419e-04 + 1.44573741e-04 1.46525050e-04 1.48502695e-04 1.50507032e-04 1.52538422e-04 + 1.54597229e-04 1.56683824e-04 1.58798582e-04 1.60941883e-04 1.63114112e-04 + 1.65315659e-04 1.67546920e-04 1.69808297e-04 1.72100196e-04 1.74423028e-04 + 1.76777212e-04 1.79163169e-04 1.81581330e-04 1.84032129e-04 1.86516007e-04 + 1.89033409e-04 1.91584788e-04 1.94170603e-04 1.96791319e-04 1.99447407e-04 + 2.02139344e-04 2.04867614e-04 2.07632707e-04 2.10435121e-04 2.13275359e-04 + 2.16153931e-04 2.19071356e-04 2.22028156e-04 2.25024865e-04 2.28062020e-04 + 2.31140168e-04 2.34259861e-04 2.37421661e-04 2.40626136e-04 2.43873861e-04 + 2.47165421e-04 2.50501406e-04 2.53882418e-04 2.57309063e-04 2.60781957e-04 + 2.64301725e-04 2.67868999e-04 2.71484421e-04 2.75148639e-04 2.78862314e-04 + 2.82626112e-04 2.86440710e-04 2.90306793e-04 2.94225057e-04 2.98196206e-04 + 3.02220953e-04 3.06300022e-04 3.10434146e-04 3.14624068e-04 3.18870542e-04 + 3.23174330e-04 3.27536206e-04 3.31956954e-04 3.36437370e-04 3.40978257e-04 + 3.45580432e-04 3.50244723e-04 3.54971968e-04 3.59763016e-04 3.64618729e-04 + 3.69539979e-04 3.74527651e-04 3.79582642e-04 3.84705860e-04 3.89898226e-04 + 3.95160673e-04 4.00494147e-04 4.05899607e-04 4.11378024e-04 4.16930384e-04 + 4.22557683e-04 4.28260934e-04 4.34041162e-04 4.39899405e-04 4.45836717e-04 + 4.51854164e-04 4.57952829e-04 4.64133808e-04 4.70398211e-04 4.76747164e-04 + 4.83181809e-04 4.89703302e-04 4.96312816e-04 5.03011539e-04 5.09800673e-04 + 5.16681441e-04 5.23655078e-04 5.30722838e-04 5.37885992e-04 5.45145826e-04 + 5.52503646e-04 5.59960775e-04 5.67518552e-04 5.75178336e-04 5.82941505e-04 + 5.90809452e-04 5.98783593e-04 6.06865361e-04 6.15056208e-04 6.23357607e-04 + 6.31771050e-04 6.40298049e-04 6.48940137e-04 6.57698866e-04 6.66575812e-04 + 6.75572570e-04 6.84690757e-04 6.93932012e-04 7.03297995e-04 7.12790392e-04 + 7.22410907e-04 7.32161269e-04 7.42043233e-04 7.52058572e-04 7.62209089e-04 + 7.72496607e-04 7.82922975e-04 7.93490068e-04 8.04199785e-04 8.15054050e-04 + 8.26054815e-04 8.37204057e-04 8.48503780e-04 8.59956016e-04 8.71562821e-04 + 8.83326284e-04 8.95248518e-04 9.07331666e-04 9.19577900e-04 9.31989421e-04 + 9.44568460e-04 9.57317278e-04 9.70238166e-04 9.83333448e-04 9.96605476e-04 + 1.01005664e-03 1.02368935e-03 1.03750606e-03 1.05150925e-03 1.06570145e-03 + 1.08008519e-03 1.09466308e-03 1.10943772e-03 1.12441177e-03 1.13958793e-03 + 1.15496892e-03 1.17055751e-03 1.18635650e-03 1.20236872e-03 1.21859707e-03 + 1.23504444e-03 1.25171381e-03 1.26860816e-03 1.28573053e-03 1.30308401e-03 + 1.32067170e-03 1.33849678e-03 1.35656243e-03 1.37487193e-03 1.39342854e-03 + 1.41223561e-03 1.43129652e-03 1.45061470e-03 1.47019361e-03 1.49003678e-03 + 1.51014777e-03 1.53053020e-03 1.55118773e-03 1.57212407e-03 1.59334299e-03 + 1.61484830e-03 1.63664387e-03 1.65873361e-03 1.68112150e-03 1.70381156e-03 + 1.72680786e-03 1.75011455e-03 1.77373580e-03 1.79767587e-03 1.82193906e-03 + 1.84652973e-03 1.87145230e-03 1.89671124e-03 1.92231111e-03 1.94825650e-03 + 1.97455207e-03 2.00120255e-03 2.02821273e-03 2.05558747e-03 2.08333169e-03 + 2.11145037e-03 2.13994856e-03 2.16883140e-03 2.19810406e-03 2.22777182e-03 + 2.25784000e-03 2.28831402e-03 2.31919934e-03 2.35050151e-03 2.38222618e-03 + 2.41437903e-03 2.44696584e-03 2.47999248e-03 2.51346488e-03 2.54738906e-03 + 2.58177111e-03 2.61661721e-03 2.65193363e-03 2.68772672e-03 2.72400290e-03 + 2.76076870e-03 2.79803073e-03 2.83579568e-03 2.87407035e-03 2.91286161e-03 + 2.95217643e-03 2.99202189e-03 3.03240514e-03 3.07333344e-03 3.11481415e-03 + 3.15685472e-03 3.19946271e-03 3.24264578e-03 3.28641170e-03 3.33076832e-03 + 3.37572362e-03 3.42128568e-03 3.46746269e-03 3.51426295e-03 3.56169487e-03 + 3.60976698e-03 3.65848792e-03 3.70786645e-03 3.75791143e-03 3.80863187e-03 + 3.86003689e-03 3.91213571e-03 3.96493772e-03 4.01845239e-03 4.07268934e-03 + 4.12765833e-03 4.18336924e-03 4.23983207e-03 4.29705699e-03 4.35505426e-03 + 4.41383433e-03 4.47340774e-03 4.53378522e-03 4.59497761e-03 4.65699591e-03 + 4.71985128e-03 4.78355500e-03 4.84811852e-03 4.91355347e-03 4.97987158e-03 + 5.04708479e-03 5.11520517e-03 5.18424497e-03 5.25421660e-03 5.32513264e-03 + 5.39700583e-03 5.46984909e-03 5.54367551e-03 5.61849837e-03 5.69433110e-03 + 5.77118736e-03 5.84908093e-03 5.92802584e-03 6.00803626e-03 6.08912659e-03 + 6.17131138e-03 6.25460542e-03 6.33902369e-03 6.42458134e-03 6.51129376e-03 + 6.59917653e-03 6.68824546e-03 6.77851655e-03 6.87000603e-03 6.96273034e-03 + 7.05670614e-03 7.15195034e-03 7.24848004e-03 7.34631260e-03 7.44546561e-03 + 7.54595688e-03 7.64780448e-03 7.75102672e-03 7.85564214e-03 7.96166955e-03 + 8.06912802e-03 8.17803685e-03 8.28841561e-03 8.40028416e-03 8.51366260e-03 + 8.62857130e-03 8.74503092e-03 8.86306239e-03 8.98268694e-03 9.10392605e-03 + 9.22680152e-03 9.35133544e-03 9.47755019e-03 9.60546846e-03 9.73511324e-03 + 9.86650783e-03 9.99967585e-03 1.01346412e-02 1.02714283e-02 1.04100615e-02 + 1.05505658e-02 1.06929666e-02 1.08372893e-02 1.09835599e-02 1.11318048e-02 + 1.12820505e-02 1.14343240e-02 1.15886528e-02 1.17450646e-02 1.19035875e-02 + 1.20642499e-02 1.22270808e-02 1.23921094e-02 1.25593654e-02 1.27288789e-02 + 1.29006802e-02 1.30748004e-02 1.32512707e-02 1.34301228e-02 1.36113888e-02 + 1.37951014e-02 1.39812936e-02 1.41699987e-02 1.43612509e-02 1.45550843e-02 + 1.47515340e-02 1.49506351e-02 1.51524234e-02 1.53569353e-02 1.55642075e-02 + 1.57742773e-02 1.59871823e-02 1.62029609e-02 1.64216519e-02 1.66432945e-02 + 1.68679287e-02 1.70955947e-02 1.73263336e-02 1.75601867e-02 1.77971961e-02 + 1.80374044e-02 1.82808548e-02 1.85275911e-02 1.87776576e-02 1.90310992e-02 + 1.92879614e-02 1.95482906e-02 1.98121334e-02 2.00795373e-02 2.03505503e-02 + 2.06252212e-02 2.09035994e-02 2.11857347e-02 2.14716781e-02 2.17614808e-02 + 2.20551950e-02 2.23528734e-02 2.26545697e-02 2.29603378e-02 2.32702330e-02 + 2.35843107e-02 2.39026276e-02 2.42252408e-02 2.45522083e-02 2.48835889e-02 + 2.52194421e-02 2.55598283e-02 2.59048087e-02 2.62544453e-02 2.66088009e-02 + 2.69679393e-02 2.73319249e-02 2.77008232e-02 2.80747006e-02 2.84536242e-02 + 2.88376620e-02 2.92268833e-02 2.96213578e-02 3.00211566e-02 3.04263514e-02 + 3.08370152e-02 3.12532216e-02 3.16750456e-02 3.21025629e-02 3.25358505e-02 + 3.29749861e-02 3.34200487e-02 3.38711183e-02 3.43282759e-02 3.47916039e-02 + 3.52611853e-02 3.57371047e-02 3.62194475e-02 3.67083006e-02 3.72037516e-02 + 3.77058898e-02 3.82148053e-02 3.87305896e-02 3.92533354e-02 3.97831368e-02 + 4.03200888e-02 4.08642881e-02 4.14158324e-02 4.19748209e-02 4.25413541e-02 + 4.31155337e-02 4.36974630e-02 4.42872467e-02 4.48849906e-02 4.54908022e-02 + 4.61047905e-02 4.67270657e-02 4.73577398e-02 4.79969261e-02 4.86447395e-02 + 4.93012964e-02 4.99667148e-02 5.06411144e-02 5.13246163e-02 5.20173434e-02 + 5.27194202e-02 5.34309730e-02 5.41521296e-02 5.48830196e-02 5.56237744e-02 + 5.63745271e-02 5.71354128e-02 5.79065681e-02 5.86881317e-02 5.94802440e-02 + 6.02830474e-02 6.10966863e-02 6.19213068e-02 6.27570572e-02 6.36040877e-02 + 6.44625506e-02 6.53326001e-02 6.62143926e-02 6.71080867e-02 6.80138429e-02 + 6.89318241e-02 6.98621953e-02 7.08051237e-02 7.17607788e-02 7.27293323e-02 + 7.37109584e-02 7.47058334e-02 7.57141363e-02 7.67360482e-02 7.77717528e-02 + 7.88214363e-02 7.98852873e-02 8.09634971e-02 8.20562595e-02 8.31637709e-02 + 8.42862303e-02 8.54238396e-02 8.65768031e-02 8.77453282e-02 8.89296248e-02 + 9.01299058e-02 9.13463870e-02 9.25792870e-02 9.38288274e-02 9.50952329e-02 + 9.63787310e-02 9.76795524e-02 9.89979310e-02 1.00334104e-01 1.01688311e-01 + 1.03060795e-01 1.04451805e-01 1.05861588e-01 1.07290399e-01 1.08738495e-01 + 1.10206136e-01 1.11693586e-01 1.13201111e-01 1.14728984e-01 1.16277479e-01 + 1.17846873e-01 1.19437449e-01 1.21049494e-01 1.22683296e-01 1.24339149e-01 + 1.26017352e-01 1.27718205e-01 1.29442015e-01 1.31189090e-01 1.32959747e-01 + 1.34754301e-01 1.36573077e-01 1.38416400e-01 1.40284603e-01 1.42178021e-01 + 1.44096994e-01 1.46041868e-01 1.48012992e-01 1.50010719e-01 1.52035411e-01 + 1.54087429e-01 1.56167143e-01 1.58274927e-01 1.60411160e-01 1.62576226e-01 + 1.64770513e-01 1.66994417e-01 1.69248337e-01 1.71532678e-01 1.73847850e-01 + 1.76194270e-01 1.78572360e-01 1.80982547e-01 1.83425264e-01 1.85900951e-01 + 1.88410051e-01 1.90953017e-01 1.93530306e-01 1.96142380e-01 1.98789709e-01 + 2.01472769e-01 2.04192042e-01 2.06948017e-01 2.09741189e-01 2.12572061e-01 + 2.15441141e-01 2.18348945e-01 2.21295996e-01 2.24282822e-01 2.27309962e-01 + 2.30377959e-01 2.33487365e-01 2.36638739e-01 2.39832646e-01 2.43069662e-01 + 2.46350367e-01 2.49675352e-01 2.53045214e-01 2.56460560e-01 2.59922002e-01 + 2.63430163e-01 2.66985673e-01 2.70589173e-01 2.74241308e-01 2.77942737e-01 + 2.81694123e-01 2.85496142e-01 2.89349477e-01 2.93254820e-01 2.97212873e-01 + 3.01224348e-01 3.05289966e-01 3.09410457e-01 3.13586563e-01 3.17819033e-01 + 3.22108629e-01 3.26456121e-01 3.30862292e-01 3.35327932e-01 3.39853846e-01 + 3.44440845e-01 3.49089755e-01 3.53801411e-01 3.58576660e-01 3.63416361e-01 + 3.68321383e-01 3.73292608e-01 3.78330929e-01 3.83437252e-01 3.88612496e-01 + 3.93857590e-01 3.99173476e-01 4.04561111e-01 4.10021463e-01 4.15555512e-01 + 4.21164255e-01 4.26848699e-01 4.32609866e-01 4.38448791e-01 4.44366524e-01 + 4.50364128e-01 4.56442682e-01 4.62603278e-01 4.68847024e-01 4.75175041e-01 + 4.81588467e-01 4.88088455e-01 4.94676173e-01 5.01352806e-01 5.08119553e-01 + 5.14977630e-01 5.21928271e-01 5.28972724e-01 5.36112257e-01 5.43348151e-01 + 5.50681708e-01 5.58114246e-01 5.65647101e-01 5.73281626e-01 5.81019194e-01 + 5.88861197e-01 5.96809042e-01 6.04864160e-01 6.13027997e-01 6.21302021e-01 + 6.29687720e-01 6.38186600e-01 6.46800189e-01 6.55530036e-01 6.64377709e-01 + 6.73344799e-01 6.82432918e-01 6.91643699e-01 7.00978797e-01 7.10439891e-01 + 7.20028682e-01 7.29746892e-01 7.39596268e-01 7.49578581e-01 7.59695625e-01 + 7.69949219e-01 7.80341205e-01 7.90873452e-01 8.01547852e-01 8.12366325e-01 + 8.23330813e-01 8.34443290e-01 8.45705751e-01 8.57120221e-01 8.68688753e-01 + 8.80413424e-01 8.92296343e-01 9.04339645e-01 9.16545496e-01 9.28916089e-01 + 9.41453647e-01 9.54160425e-01 9.67038705e-01 9.80090803e-01 9.93319066e-01 + 1.00672587e+00 1.02031362e+00 1.03408477e+00 1.04804179e+00 1.06218719e+00 + 1.07652350e+00 1.09105331e+00 1.10577923e+00 1.12070391e+00 1.13583002e+00 + 1.15116029e+00 1.16669748e+00 1.18244437e+00 1.19840379e+00 1.21457862e+00 + 1.23097175e+00 1.24758615e+00 1.26442479e+00 1.28149070e+00 1.29878695e+00 + 1.31631665e+00 1.33408294e+00 1.35208903e+00 1.37033814e+00 1.38883356e+00 + 1.40757862e+00 1.42657667e+00 1.44583114e+00 1.46534549e+00 1.48512323e+00 + 1.50516790e+00 1.52548311e+00 1.54607252e+00 1.56693983e+00 1.58808878e+00 + 1.60952317e+00 1.63124687e+00 1.65326377e+00 1.67557783e+00 1.69819306e+00 + 1.72111354e+00 1.74434336e+00 1.76788672e+00 1.79174785e+00 1.81593103e+00 + 1.84044061e+00 1.86528099e+00 1.89045664e+00 1.91597209e+00 1.94183192e+00 + 1.96804078e+00 1.99460338e+00 2.02152449e+00 2.04880896e+00 2.07646169e+00 + 2.10448764e+00 2.13289186e+00 2.16167945e+00 2.19085559e+00 2.22042551e+00 + 2.25039454e+00 2.28076806e+00 2.31155154e+00 2.34275049e+00 2.37437054e+00 + 2.40641736e+00 2.43889672e+00 2.47181445e+00 2.50517647e+00 2.53898878e+00 + 2.57325745e+00 2.60798864e+00 2.64318860e+00 2.67886366e+00 2.71502022e+00 + 2.75166478e+00 2.78880393e+00 2.82644435e+00 2.86459281e+00 2.90325615e+00 + 2.94244133e+00 2.98215539e+00 3.02240547e+00 3.06319880e+00 3.10454272e+00 + 3.14644466e+00 3.18891215e+00 3.23195282e+00 3.27557441e+00 3.31978476e+00 + 3.36459182e+00 3.41000363e+00 3.45602837e+00 3.50267430e+00 3.54994981e+00 + 3.59786340e+00 3.64642368e+00 3.69563937e+00 3.74551933e+00 3.79607251e+00 + 3.84730801e+00 3.89923504e+00 3.95186292e+00 4.00520112e+00 4.05925923e+00 + 4.11404695e+00 4.16957414e+00 4.22585079e+00 4.28288699e+00 4.34069302e+00 + 4.39927925e+00 4.45865622e+00 4.51883459e+00 4.57982520e+00 4.64163899e+00 + 4.70428708e+00 4.76778073e+00 4.83213135e+00 4.89735051e+00 4.96344994e+00 + 5.03044150e+00 5.09833725e+00 5.16714939e+00 5.23689028e+00 5.30757246e+00 + 5.37920864e+00 5.45181169e+00 5.52539466e+00 5.59997078e+00 5.67555346e+00 + 5.75215627e+00 5.82979298e+00 5.90847756e+00 5.98822414e+00 6.06904706e+00 + 6.15096084e+00 6.23398021e+00 6.31812010e+00 6.40339561e+00 6.48982209e+00 + 6.57741507e+00 6.66619028e+00 6.75616369e+00 6.84735147e+00 6.93977001e+00 + 7.03343592e+00 7.12836604e+00 7.22457742e+00 7.32208737e+00 7.42091341e+00 + 7.52107330e+00 7.62258505e+00 7.72546690e+00 7.82973734e+00 7.93541512e+00 + 8.04251923e+00 8.15106892e+00 8.26108370e+00 8.37258335e+00 8.48558791e+00 + 8.60011769e+00 8.71619327e+00 8.83383553e+00 8.95306559e+00 9.07390491e+00 + 9.19637518e+00 9.32049844e+00 9.44629699e+00 9.57379343e+00 9.70301069e+00 + 9.83397200e+00 9.96670088e+00 1.01012212e+01 1.02375571e+01 1.03757332e+01 + 1.05157742e+01 1.06577054e+01 1.08015522e+01 1.09473405e+01 1.10950965e+01 + 1.12448467e+01 1.13966182e+01 1.15504380e+01 1.17063340e+01 1.18643341e+01 + 1.20244668e+01 1.21867607e+01 1.23512451e+01 1.25179496e+01 1.26869041e+01 + 1.28581389e+01 1.30316849e+01 1.32075732e+01 1.33858355e+01 1.35665038e+01 + 1.37496106e+01 1.39351888e+01 1.41232717e+01 1.43138932e+01 1.45070874e+01 + 1.47028892e+01 1.49013338e+01 1.51024567e+01 1.53062942e+01 1.55128829e+01 + 1.57222599e+01 1.59344629e+01 1.61495300e+01 1.63674998e+01 1.65884115e+01 + 1.68123049e+01 1.70392202e+01 1.72691982e+01 1.75022801e+01 1.77385080e+01 + 1.79779242e+01 1.82205718e+01 1.84664944e+01 1.87157363e+01 1.89683421e+01 + 1.92243574e+01 1.94838281e+01 1.97468008e+01 2.00133229e+01 2.02834423e+01 + 2.05572074e+01 2.08346676e+01 2.11158726e+01 2.14008730e+01 2.16897201e+01 + 2.19824657e+01 2.22791625e+01 2.25798639e+01 2.28846237e+01 2.31934970e+01 + 2.35065390e+01 2.38238062e+01 2.41453556e+01 2.44712449e+01 2.48015327e+01 + 2.51362784e+01 2.54755421e+01 2.58193849e+01 2.61678685e+01 2.65210556e+01 + 2.68790097e+01 2.72417950e+01 2.76094769e+01 2.79821213e+01 2.83597954e+01 + 2.87425669e+01 2.91305046e+01 2.95236783e+01 2.99221587e+01 3.03260174e+01 + 3.07353269e+01 3.11501609e+01 3.15705939e+01 3.19967014e+01 3.24285601e+01 + 3.28662476e+01 3.33098426e+01 3.37594247e+01 3.42150749e+01 3.46768749e+01 + 3.51449079e+01 3.56192579e+01 3.61000102e+01 3.65872511e+01 3.70810684e+01 + 3.75815507e+01 3.80887880e+01 3.86028714e+01 3.91238935e+01 3.96519477e+01 + 4.01871291e+01 4.07295339e+01 4.12792594e+01 4.18364046e+01 4.24010695e+01 + 4.29733558e+01 4.35533661e+01 4.41412049e+01 4.47369777e+01 4.53407916e+01 + 4.59527552e+01 4.65729784e+01 4.72015728e+01 4.78386513e+01 4.84843284e+01 + 4.91387202e+01 4.98019444e+01 5.04741200e+01 5.11553680e+01 5.18458108e+01 + 5.25455725e+01 5.32547788e+01 5.39735573e+01 5.47020371e+01 5.54403492e+01 + 5.61886263e+01 5.69470028e+01 5.77156152e+01 5.84946015e+01 5.92841017e+01 + 6.00842578e+01 6.08952136e+01 6.17171149e+01 6.25501093e+01 6.33943466e+01 + 6.42499786e+01 6.51171590e+01 6.59960438e+01 6.68867908e+01 6.77895602e+01 + 6.87045143e+01 6.96318175e+01 7.05716365e+01 7.15241402e+01 7.24894998e+01 + 7.34678888e+01 7.44594832e+01 7.54644611e+01 7.64830031e+01 7.75152924e+01 + 7.85615144e+01 7.96218573e+01 8.06965116e+01 8.17856705e+01 8.28895297e+01 + 8.40082878e+01 8.51421456e+01 8.62913071e+01 8.74559788e+01 8.86363701e+01 + 8.98326931e+01 9.10451628e+01 9.22739972e+01 9.35194171e+01 9.47816465e+01 + 9.60609121e+01 9.73574439e+01 9.86714750e+01 1.00003242e+02 1.01352983e+02 + 1.02720942e+02 1.04107364e+02 1.05512498e+02 1.06936598e+02 1.08379919e+02 + 1.09842720e+02 1.11325265e+02 1.12827819e+02 1.14350653e+02 1.15894041e+02 + 1.17458261e+02 1.19043592e+02 1.20650320e+02 1.22278735e+02 1.23929128e+02 + 1.25601797e+02 1.27297041e+02 1.29015166e+02 1.30756481e+02 1.32521298e+02 + 1.34309935e+02 1.36122713e+02 1.37959958e+02 1.39822000e+02 1.41709174e+02 + 1.43621820e+02 1.45560280e+02 1.47524903e+02 1.49516044e+02 1.51534058e+02 + 1.53579310e+02 1.55652166e+02 1.57752999e+02 1.59882188e+02 1.62040114e+02 + 1.64227166e+02 1.66443736e+02 1.68690223e+02 1.70967031e+02 1.73274569e+02 + 1.75613251e+02 1.77983499e+02 1.80385738e+02 1.82820400e+02 1.85287923e+02 + 1.87788750e+02 1.90323330e+02 1.92892119e+02 1.95495580e+02 1.98134179e+02 + 2.00808391e+02 2.03518697e+02 2.06265584e+02 2.09049546e+02 2.11871083e+02 + 2.14730702e+02 2.17628917e+02 2.20566249e+02 2.23543226e+02 2.26560384e+02 + 2.29618264e+02 2.32717416e+02 2.35858398e+02 2.39041773e+02 2.42268114e+02 + 2.45538001e+02 2.48852022e+02 2.52210771e+02 2.55614854e+02 2.59064882e+02 + 2.62561474e+02 2.66105260e+02 2.69696877e+02 2.73336969e+02 2.77026192e+02 + 2.80765207e+02 2.84554689e+02 2.88395317e+02 2.92287781e+02 2.96232783e+02 + 3.00231029e+02 3.04283240e+02 3.08390144e+02 3.12552478e+02 3.16770992e+02 + 3.21046442e+02 3.25379599e+02 3.29771239e+02 3.34222154e+02 3.38733142e+02 + 3.43305015e+02 3.47938595e+02 3.52634714e+02 3.57394216e+02 3.62217957e+02 + 3.67106805e+02 3.72061636e+02 3.77083343e+02 3.82172828e+02 3.87331006e+02 + 3.92558803e+02 3.97857160e+02 4.03227029e+02 4.08669374e+02 4.14185175e+02 + 4.19775422e+02 4.25441121e+02 4.31183290e+02 4.37002961e+02 4.42901179e+02 + 4.48879006e+02 4.54937515e+02 4.61077796e+02 4.67300952e+02 4.73608102e+02 + 4.80000379e+02 4.86478933e+02 4.93044927e+02 4.99699543e+02 5.06443976e+02 + 5.13279438e+02 5.20207158e+02 5.27228382e+02 5.34344371e+02 5.41556404e+02 + 5.48865778e+02 5.56273806e+02 5.63781821e+02 5.71391170e+02 5.79103223e+02 + 5.86919366e+02 5.94841002e+02 6.02869557e+02 6.11006473e+02 6.19253213e+02 + 6.27611259e+02 6.36082113e+02 6.44667298e+02 6.53368357e+02 6.62186855e+02 + 6.71124375e+02 6.80182525e+02 6.89362932e+02 6.98667247e+02 7.08097142e+02 + 7.17654312e+02 7.27340476e+02 7.37157373e+02 7.47106768e+02 7.57190450e+02 + 7.67410232e+02 7.77767949e+02 7.88265465e+02 7.98904665e+02 8.09687462e+02 + 8.20615795e+02 8.31691626e+02 8.42916949e+02 8.54293779e+02 8.65824161e+02 + 8.77510169e+02 8.89353903e+02 9.01357492e+02 9.13523092e+02 9.25852892e+02 + 9.38349106e+02 9.51013982e+02 9.63849795e+02 9.76858852e+02 9.90043493e+02 + 1.00340609e+03 1.01694903e+03 1.03067477e+03 1.04458576e+03 1.05868451e+03 + 1.07297355e+03 1.08745545e+03 1.10213281e+03 1.11700827e+03 1.13208451e+03 + 1.14736422e+03 1.16285017e+03 1.17854513e+03 1.19445193e+03 1.21057342e+03 + 1.22691250e+03 1.24347211e+03 1.26025522e+03 1.27726485e+03 1.29450407e+03 + 1.31197596e+03 1.32968367e+03 1.34763038e+03 1.36581931e+03 1.38425374e+03 + 1.40293698e+03 1.42187239e+03 1.44106337e+03 1.46051336e+03 1.48022588e+03 + 1.50020445e+03 1.52045267e+03 1.54097419e+03 1.56177268e+03 1.58285189e+03 + 1.60421560e+03 1.62586766e+03 1.64781196e+03 1.67005244e+03 1.69259310e+03 + 1.71543799e+03 1.73859121e+03 1.76205693e+03 1.78583938e+03 1.80994281e+03 + 1.83437156e+03 1.85913003e+03 1.88422266e+03 1.90965397e+03 1.93542853e+03 + 1.96155096e+03 1.98802597e+03 2.01485831e+03 2.04205280e+03 2.06961434e+03 + 2.09754787e+03 2.12585843e+03 2.15455109e+03 2.18363101e+03 2.21310343e+03 + 2.24297363e+03 2.27324699e+03 2.30392895e+03 2.33502503e+03 2.36654081e+03 + 2.39848195e+03 2.43085420e+03 2.46366339e+03 2.49691539e+03 2.53061620e+03 + 2.56477187e+03 2.59938853e+03 2.63447242e+03 2.67002983e+03 2.70606716e+03 + 2.74259088e+03 2.77960756e+03 2.81712386e+03 2.85514651e+03 2.89368236e+03 + 2.93273832e+03 2.97232142e+03 3.01243877e+03 3.05309759e+03 3.09430517e+03 + 3.13606893e+03 3.17839638e+03 3.22129512e+03 3.26477287e+03 3.30883743e+03 + 3.35349673e+03 3.39875879e+03 3.44463176e+03 3.49112387e+03 3.53824349e+03 + 3.58599907e+03 3.63439922e+03 3.68345262e+03 3.73316809e+03 3.78355457e+03 + 3.83462112e+03 3.88637691e+03 3.93883124e+03 3.99199356e+03 4.04587340e+03 + 4.10048045e+03 4.15582454e+03 4.21191561e+03 4.26876373e+03 4.32637913e+03 + 4.38477217e+03 4.44395333e+03 4.50393327e+03 4.56472275e+03 4.62633270e+03 + 4.68877420e+03 4.75205848e+03 4.81619690e+03 4.88120099e+03 4.94708244e+03 + 5.01385310e+03 5.08152495e+03 5.15011018e+03 5.21962109e+03 5.29007019e+03 + 5.36147014e+03 5.43383378e+03 5.50717410e+03 5.58150430e+03 5.65683773e+03 + 5.73318793e+03 5.81056864e+03 5.88899374e+03 5.96847735e+03 6.04903375e+03 + 6.13067741e+03 6.21342302e+03 6.29728544e+03 6.38227975e+03 6.46842123e+03 + 6.55572536e+03 6.64420783e+03 6.73388454e+03 6.82477162e+03 6.91688540e+03 + 7.01024244e+03 7.10485951e+03 7.20075363e+03 7.29794203e+03 7.39644218e+03 + 7.49627178e+03 7.59744879e+03 7.69999137e+03 7.80391797e+03 7.90924727e+03 + 8.01599819e+03 8.12418992e+03 8.23384192e+03 8.34497389e+03 8.45760580e+03 + 8.57175791e+03 8.68745072e+03 8.80470504e+03 8.92354193e+03 9.04398276e+03 + 9.16604918e+03 9.28976313e+03 9.41514684e+03 9.54222285e+03 9.67101401e+03 + 9.80154345e+03 9.93383465e+03 1.00679114e+04 1.02037977e+04 1.03415182e+04 + 1.04810974e+04 1.06225605e+04 1.07659329e+04 1.09112405e+04 1.10585092e+04 + 1.12077657e+04 1.13590366e+04 1.15123493e+04 1.16677312e+04 1.18252103e+04 + 1.19848148e+04 1.21465736e+04 1.23105156e+04 1.24766704e+04 1.26450677e+04 + 1.28157379e+04 1.29887116e+04 1.31640199e+04 1.33416944e+04 1.35217669e+04 + 1.37042699e+04 1.38892361e+04 1.40766987e+04 1.42666916e+04 1.44592488e+04 + 1.46544049e+04 1.48521951e+04 1.50526548e+04 1.52558201e+04 1.54617276e+04 + 1.56704142e+04 1.58819174e+04 1.60962752e+04 1.63135263e+04 1.65337095e+04 + 1.67568646e+04 1.69830316e+04 1.72122512e+04 1.74445645e+04 1.76800134e+04 + 1.79186401e+04 1.81604876e+04 1.84055993e+04 1.86540192e+04 1.89057921e+04 + 1.91609631e+04 1.94195781e+04 1.96816837e+04 1.99473269e+04 2.02165555e+04 + 2.04894179e+04 2.07659631e+04 2.10462408e+04 2.13303014e+04 2.16181960e+04 + 2.19099763e+04 2.22056947e+04 2.25054044e+04 2.28091593e+04 2.31170140e+04 + 2.34290238e+04 2.37452448e+04 2.40657338e+04 2.43905484e+04 2.47197470e+04 + 2.50533889e+04 2.53915339e+04 2.57342428e+04 2.60815773e+04 2.64335997e+04 + 2.67903734e+04 2.71519624e+04 2.75184318e+04 2.78898474e+04 2.82662760e+04 + 2.86477853e+04 2.90344437e+04 2.94263209e+04 2.98234873e+04 3.02260142e+04 + 3.06339740e+04 3.10474400e+04 3.14664865e+04 3.18911890e+04 3.23216236e+04 + 3.27578678e+04 3.31999999e+04 3.36480995e+04 3.41022471e+04 3.45625243e+04 + 3.50290139e+04 3.55017997e+04 3.59809666e+04 3.64666009e+04 3.69587897e+04 + 3.74576216e+04 3.79631862e+04 3.84755745e+04 3.89948784e+04 3.95211913e+04 + 4.00546079e+04 4.05952240e+04 4.11431368e+04 4.16984447e+04 4.22612476e+04 + 4.28316467e+04 4.34097444e+04 4.39956447e+04 4.45894528e+04 4.51912756e+04 + 4.58012212e+04 4.64193992e+04 4.70459207e+04 4.76808984e+04 4.83244463e+04 + 4.89766802e+04 4.96377173e+04 5.03076764e+04 5.09866779e+04 5.16748439e+04 + 5.23722980e+04 5.30791657e+04 5.37955739e+04 5.45216515e+04 5.52575289e+04 + 5.60033385e+04 5.67592142e+04 5.75252919e+04 5.83017094e+04 5.90886062e+04 + 5.98861237e+04 6.06944053e+04 6.15135963e+04 6.23438438e+04 6.31852972e+04 + 6.40381076e+04 6.49024284e+04 6.57784150e+04 6.66662247e+04 6.75660171e+04 + 6.84779540e+04 6.94021994e+04 7.03389192e+04 7.12882819e+04 7.22504581e+04 + 7.32256209e+04 7.42139453e+04 7.52156092e+04 7.62307924e+04 7.72596776e+04 + 7.83024497e+04 7.93592960e+04 8.04304065e+04 8.15159738e+04 8.26161929e+04 + 8.37312617e+04 8.48613806e+04 8.60067526e+04 8.71675837e+04 8.83440825e+04 + 8.95364604e+04 9.07449319e+04 9.19697141e+04 9.32110271e+04 9.44690942e+04 + 9.57441413e+04 9.70363977e+04 9.83460956e+04 9.96734705e+04 1.01018761e+05 + 1.02382209e+05 1.03764059e+05 1.05164560e+05 1.06583964e+05 1.08022525e+05 + 1.09480502e+05 1.10958158e+05 1.12455758e+05 1.13973570e+05 1.15511869e+05 + 1.17070930e+05 1.18651033e+05 1.20252464e+05 1.21875508e+05 1.23520459e+05 + 1.25187612e+05 1.26877266e+05 1.28589725e+05 1.30325298e+05 1.32084295e+05 + 1.33867034e+05 1.35673834e+05 1.37505020e+05 1.39360922e+05 1.41241873e+05 + 1.43148212e+05 1.45080280e+05 1.47038425e+05 1.49022999e+05 1.51034359e+05 + 1.53072866e+05 1.55138887e+05 1.57232793e+05 1.59354960e+05 1.61505770e+05 + 1.63685609e+05 1.65894870e+05 1.68133949e+05 1.70403249e+05 1.72703178e+05 + 1.75034149e+05 1.77396580e+05 1.79790898e+05 1.82217531e+05 1.84676917e+05 + 1.87169497e+05 1.89695719e+05 1.92256038e+05 1.94850913e+05 1.97480811e+05 + 2.00146205e+05 2.02847573e+05 2.05585402e+05 2.08360183e+05 2.11172416e+05 + 2.14022605e+05 2.16911263e+05 2.19838909e+05 2.22806069e+05 2.25813278e+05 + 2.28861074e+05 2.31950007e+05 2.35080630e+05 2.38253508e+05 2.41469210e+05 + 2.44728314e+05 2.48031406e+05 2.51379080e+05 2.54771938e+05 2.58210588e+05 + 2.61695651e+05 2.65227751e+05 2.68807523e+05 2.72435612e+05 2.76112669e+05 + 2.79839355e+05 2.83616340e+05 2.87444303e+05 2.91323932e+05 2.95255924e+05 + 2.99240986e+05 3.03279835e+05 3.07373196e+05 3.11521804e+05 3.15726407e+05 + 3.19987758e+05 3.24306626e+05 3.28683784e+05 3.33120022e+05 3.37616135e+05 + 3.42172931e+05 3.46791231e+05 3.51471864e+05 3.56215672e+05 3.61023506e+05 + 3.65896232e+05 3.70834725e+05 3.75839872e+05 3.80912574e+05 3.86053742e+05 + 3.91264300e+05 3.96545185e+05 4.01897346e+05 4.07321745e+05 4.12819356e+05 + 4.18391169e+05 4.24038185e+05 4.29761418e+05 4.35561898e+05 4.41440667e+05 + 4.47398781e+05 4.53437311e+05 4.59557344e+05 4.65759979e+05 4.72046330e+05 + 4.78417528e+05 4.84874718e+05 4.91419060e+05 4.98051732e+05 5.04773924e+05 + 5.11586846e+05 5.18491721e+05 5.25489792e+05 5.32582315e+05 5.39770566e+05 + 5.47055836e+05 5.54439436e+05 5.61922691e+05 5.69506949e+05 5.77193570e+05 + 5.84983938e+05 5.92879453e+05 6.00881532e+05 6.08991616e+05 6.17211161e+05 + 6.25541646e+05 6.33984566e+05 6.42541441e+05 6.51213808e+05 6.60003225e+05 + 3.33422613e-07 3.37922810e-07 3.42483747e-07 3.47106241e-07 3.51791126e-07 + 3.56539243e-07 3.61351444e-07 3.66228596e-07 3.71171575e-07 3.76181269e-07 + 3.81258578e-07 3.86404416e-07 3.91619707e-07 3.96905389e-07 4.02262412e-07 + 4.07691738e-07 4.13194344e-07 4.18771218e-07 4.24423363e-07 4.30151795e-07 + 4.35957544e-07 4.41841652e-07 4.47805178e-07 4.53849194e-07 4.59974786e-07 + 4.66183055e-07 4.72475116e-07 4.78852102e-07 4.85315157e-07 4.91865444e-07 + 4.98504140e-07 5.05232439e-07 5.12051549e-07 5.18962697e-07 5.25967124e-07 + 5.33066089e-07 5.40260870e-07 5.47552758e-07 5.54943064e-07 5.62433118e-07 + 5.70024264e-07 5.77717868e-07 5.85515312e-07 5.93417998e-07 6.01427347e-07 + 6.09544798e-07 6.17771809e-07 6.26109861e-07 6.34560451e-07 6.43125098e-07 + 6.51805342e-07 6.60602743e-07 6.69518883e-07 6.78555363e-07 6.87713809e-07 + 6.96995865e-07 7.06403202e-07 7.15937509e-07 7.25600501e-07 7.35393913e-07 + 7.45319507e-07 7.55379067e-07 7.65574400e-07 7.75907340e-07 7.86379743e-07 + 7.96993491e-07 8.07750493e-07 8.18652683e-07 8.29702018e-07 8.40900487e-07 + 8.52250101e-07 8.63752900e-07 8.75410952e-07 8.87226353e-07 8.99201226e-07 + 9.11337723e-07 9.23638027e-07 9.36104347e-07 9.48738925e-07 9.61544032e-07 + 9.74521969e-07 9.87675069e-07 1.00100570e-06 1.01451625e-06 1.02820915e-06 + 1.04208686e-06 1.05615188e-06 1.07040674e-06 1.08485399e-06 1.09949624e-06 + 1.11433612e-06 1.12937629e-06 1.14461945e-06 1.16006835e-06 1.17572577e-06 + 1.19159451e-06 1.20767743e-06 1.22397743e-06 1.24049742e-06 1.25724038e-06 + 1.27420933e-06 1.29140730e-06 1.30883739e-06 1.32650274e-06 1.34440652e-06 + 1.36255194e-06 1.38094227e-06 1.39958082e-06 1.41847092e-06 1.43761599e-06 + 1.45701946e-06 1.47668482e-06 1.49661560e-06 1.51681538e-06 1.53728780e-06 + 1.55803654e-06 1.57906532e-06 1.60037793e-06 1.62197819e-06 1.64386999e-06 + 1.66605727e-06 1.68854400e-06 1.71133424e-06 1.73443208e-06 1.75784167e-06 + 1.78156721e-06 1.80561298e-06 1.82998330e-06 1.85468254e-06 1.87971515e-06 + 1.90508562e-06 1.93079851e-06 1.95685845e-06 1.98327013e-06 2.01003828e-06 + 2.03716771e-06 2.06466332e-06 2.09253003e-06 2.12077286e-06 2.14939688e-06 + 2.17840724e-06 2.20780915e-06 2.23760790e-06 2.26780884e-06 2.29841740e-06 + 2.32943908e-06 2.36087947e-06 2.39274420e-06 2.42503901e-06 2.45776971e-06 + 2.49094216e-06 2.52456235e-06 2.55863631e-06 2.59317016e-06 2.62817012e-06 + 2.66364247e-06 2.69959359e-06 2.73602994e-06 2.77295807e-06 2.81038462e-06 + 2.84831631e-06 2.88675997e-06 2.92572250e-06 2.96521091e-06 3.00523229e-06 + 3.04579384e-06 3.08690284e-06 3.12856670e-06 3.17079289e-06 3.21358900e-06 + 3.25696274e-06 3.30092189e-06 3.34547435e-06 3.39062814e-06 3.43639136e-06 + 3.48277226e-06 3.52977915e-06 3.57742050e-06 3.62570485e-06 3.67464091e-06 + 3.72423745e-06 3.77450339e-06 3.82544777e-06 3.87707975e-06 3.92940860e-06 + 3.98244374e-06 4.03619469e-06 4.09067111e-06 4.14588280e-06 4.20183968e-06 + 4.25855181e-06 4.31602938e-06 4.37428273e-06 4.43332232e-06 4.49315877e-06 + 4.55380282e-06 4.61526539e-06 4.67755752e-06 4.74069040e-06 4.80467539e-06 + 4.86952397e-06 4.93524782e-06 5.00185875e-06 5.06936871e-06 5.13778986e-06 + 5.20713449e-06 5.27741506e-06 5.34864421e-06 5.42083473e-06 5.49399961e-06 + 5.56815199e-06 5.64330520e-06 5.71947276e-06 5.79666835e-06 5.87490584e-06 + 5.95419930e-06 6.03456299e-06 6.11601134e-06 6.19855900e-06 6.28222081e-06 + 6.36701179e-06 6.45294720e-06 6.54004247e-06 6.62831327e-06 6.71777545e-06 + 6.80844511e-06 6.90033853e-06 6.99347224e-06 7.08786296e-06 7.18352768e-06 + 7.28048358e-06 7.37874810e-06 7.47833888e-06 7.57927385e-06 7.68157112e-06 + 7.78524911e-06 7.89032643e-06 7.99682198e-06 8.10475489e-06 8.21414458e-06 + 8.32501069e-06 8.43737316e-06 8.55125218e-06 8.66666823e-06 8.78364205e-06 + 8.90219465e-06 9.02234736e-06 9.14412177e-06 9.26753976e-06 9.39262353e-06 + 9.51939554e-06 9.64787860e-06 9.77809578e-06 9.91007051e-06 1.00438265e-05 + 1.01793878e-05 1.03167787e-05 1.04560241e-05 1.05971488e-05 1.07401782e-05 + 1.08851382e-05 1.10320546e-05 1.11809540e-05 1.13318631e-05 1.14848089e-05 + 1.16398191e-05 1.17969215e-05 1.19561443e-05 1.21175161e-05 1.22810659e-05 + 1.24468231e-05 1.26148176e-05 1.27850795e-05 1.29576394e-05 1.31325284e-05 + 1.33097778e-05 1.34894195e-05 1.36714859e-05 1.38560096e-05 1.40430239e-05 + 1.42325622e-05 1.44246588e-05 1.46193481e-05 1.48166650e-05 1.50166452e-05 + 1.52193245e-05 1.54247394e-05 1.56329267e-05 1.58439240e-05 1.60577690e-05 + 1.62745004e-05 1.64941569e-05 1.67167781e-05 1.69424041e-05 1.71710753e-05 + 1.74028329e-05 1.76377185e-05 1.78757744e-05 1.81170433e-05 1.83615686e-05 + 1.86093943e-05 1.88605648e-05 1.91151254e-05 1.93731218e-05 1.96346004e-05 + 1.98996081e-05 2.01681926e-05 2.04404022e-05 2.07162859e-05 2.09958931e-05 + 2.12792742e-05 2.15664800e-05 2.18575623e-05 2.21525733e-05 2.24515660e-05 + 2.27545943e-05 2.30617125e-05 2.33729759e-05 2.36884404e-05 2.40081627e-05 + 2.43322003e-05 2.46606114e-05 2.49934551e-05 2.53307912e-05 2.56726803e-05 + 2.60191838e-05 2.63703641e-05 2.67262843e-05 2.70870083e-05 2.74526010e-05 + 2.78231281e-05 2.81986562e-05 2.85792528e-05 2.89649863e-05 2.93559260e-05 + 2.97521423e-05 3.01537062e-05 3.05606901e-05 3.09731670e-05 3.13912111e-05 + 3.18148975e-05 3.22443024e-05 3.26795030e-05 3.31205775e-05 3.35676051e-05 + 3.40206663e-05 3.44798424e-05 3.49452160e-05 3.54168708e-05 3.58948914e-05 + 3.63793639e-05 3.68703753e-05 3.73680139e-05 3.78723691e-05 3.83835316e-05 + 3.89015932e-05 3.94266470e-05 3.99587876e-05 4.04981104e-05 4.10447124e-05 + 4.15986919e-05 4.21601485e-05 4.27291830e-05 4.33058977e-05 4.38903964e-05 + 4.44827840e-05 4.50831671e-05 4.56916535e-05 4.63083527e-05 4.69333754e-05 + 4.75668341e-05 4.82088425e-05 4.88595161e-05 4.95189718e-05 5.01873282e-05 + 5.08647054e-05 5.15512251e-05 5.22470108e-05 5.29521874e-05 5.36668818e-05 + 5.43912225e-05 5.51253395e-05 5.58693649e-05 5.66234324e-05 5.73876775e-05 + 5.81622376e-05 5.89472519e-05 5.97428616e-05 6.05492096e-05 6.13664408e-05 + 6.21947022e-05 6.30341426e-05 6.38849129e-05 6.47471661e-05 6.56210570e-05 + 6.65067429e-05 6.74043828e-05 6.83141382e-05 6.92361725e-05 7.01706514e-05 + 7.11177430e-05 7.20776175e-05 7.30504474e-05 7.40364076e-05 7.50356752e-05 + 7.60484299e-05 7.70748537e-05 7.81151312e-05 7.91694493e-05 8.02379974e-05 + 8.13209678e-05 8.24185549e-05 8.35309562e-05 8.46583715e-05 8.58010036e-05 + 8.69590577e-05 8.81327420e-05 8.93222675e-05 9.05278480e-05 9.17497002e-05 + 9.29880438e-05 9.42431012e-05 9.55150981e-05 9.68042631e-05 9.81108279e-05 + 9.94350274e-05 1.00777100e-04 1.02137286e-04 1.03515830e-04 1.04912981e-04 + 1.06328989e-04 1.07764109e-04 1.09218598e-04 1.10692719e-04 1.12186736e-04 + 1.13700918e-04 1.15235536e-04 1.16790868e-04 1.18367191e-04 1.19964790e-04 + 1.21583952e-04 1.23224968e-04 1.24888133e-04 1.26573745e-04 1.28282107e-04 + 1.30013528e-04 1.31768318e-04 1.33546791e-04 1.35349269e-04 1.37176075e-04 + 1.39027537e-04 1.40903989e-04 1.42805766e-04 1.44733212e-04 1.46686673e-04 + 1.48666500e-04 1.50673048e-04 1.52706678e-04 1.54767757e-04 1.56856654e-04 + 1.58973744e-04 1.61119409e-04 1.63294034e-04 1.65498009e-04 1.67731732e-04 + 1.69995603e-04 1.72290030e-04 1.74615424e-04 1.76972205e-04 1.79360794e-04 + 1.81781623e-04 1.84235125e-04 1.86721742e-04 1.89241921e-04 1.91796114e-04 + 1.94384782e-04 1.97008389e-04 1.99667406e-04 2.02362313e-04 2.05093592e-04 + 2.07861735e-04 2.10667240e-04 2.13510611e-04 2.16392358e-04 2.19313001e-04 + 2.22273063e-04 2.25273078e-04 2.28313583e-04 2.31395126e-04 2.34518260e-04 + 2.37683548e-04 2.40891557e-04 2.44142865e-04 2.47438055e-04 2.50777721e-04 + 2.54162461e-04 2.57592886e-04 2.61069611e-04 2.64593261e-04 2.68164470e-04 + 2.71783880e-04 2.75452140e-04 2.79169911e-04 2.82937861e-04 2.86756667e-04 + 2.90627015e-04 2.94549600e-04 2.98525129e-04 3.02554316e-04 3.06637884e-04 + 3.10776569e-04 3.14971112e-04 3.19222270e-04 3.23530805e-04 3.27897493e-04 + 3.32323118e-04 3.36808475e-04 3.41354371e-04 3.45961623e-04 3.50631058e-04 + 3.55363517e-04 3.60159850e-04 3.65020919e-04 3.69947598e-04 3.74940772e-04 + 3.80001338e-04 3.85130207e-04 3.90328301e-04 3.95596553e-04 4.00935910e-04 + 4.06347332e-04 4.11831792e-04 4.17390276e-04 4.23023783e-04 4.28733325e-04 + 4.34519928e-04 4.40384633e-04 4.46328494e-04 4.52352579e-04 4.58457971e-04 + 4.64645768e-04 4.70917081e-04 4.77273037e-04 4.83714780e-04 4.90243467e-04 + 4.96860271e-04 5.03566382e-04 5.10363006e-04 5.17251363e-04 5.24232693e-04 + 5.31308249e-04 5.38479303e-04 5.45747146e-04 5.53113082e-04 5.60578436e-04 + 5.68144550e-04 5.75812783e-04 5.83584515e-04 5.91461141e-04 5.99444078e-04 + 6.07534760e-04 6.15734643e-04 6.24045198e-04 6.32467922e-04 6.41004326e-04 + 6.49655946e-04 6.58424337e-04 6.67311075e-04 6.76317756e-04 6.85446001e-04 + 6.94697449e-04 7.04073764e-04 7.13576631e-04 7.23207758e-04 7.32968876e-04 + 7.42861739e-04 7.52888126e-04 7.63049839e-04 7.73348705e-04 7.83786574e-04 + 7.94365323e-04 8.05086852e-04 8.15953090e-04 8.26965990e-04 8.38127530e-04 + 8.49439717e-04 8.60904585e-04 8.72524194e-04 8.84300632e-04 8.96236017e-04 + 9.08332493e-04 9.20592235e-04 9.33017446e-04 9.45610360e-04 9.58373241e-04 + 9.71308382e-04 9.84418108e-04 9.97704775e-04 1.01117077e-03 1.02481852e-03 + 1.03865047e-03 1.05266911e-03 1.06687696e-03 1.08127658e-03 1.09587054e-03 + 1.11066148e-03 1.12565205e-03 1.14084495e-03 1.15624291e-03 1.17184869e-03 + 1.18766510e-03 1.20369499e-03 1.21994123e-03 1.23640675e-03 1.25309450e-03 + 1.27000749e-03 1.28714875e-03 1.30452137e-03 1.32212846e-03 1.33997320e-03 + 1.35805878e-03 1.37638847e-03 1.39496555e-03 1.41379337e-03 1.43287530e-03 + 1.45221479e-03 1.47181530e-03 1.49168035e-03 1.51181353e-03 1.53221844e-03 + 1.55289875e-03 1.57385819e-03 1.59510052e-03 1.61662955e-03 1.63844916e-03 + 1.66056327e-03 1.68297585e-03 1.70569094e-03 1.72871261e-03 1.75204500e-03 + 1.77569231e-03 1.79965879e-03 1.82394874e-03 1.84856653e-03 1.87351659e-03 + 1.89880340e-03 1.92443150e-03 1.95040551e-03 1.97673009e-03 2.00340997e-03 + 2.03044994e-03 2.05785488e-03 2.08562970e-03 2.11377939e-03 2.14230902e-03 + 2.17122371e-03 2.20052867e-03 2.23022915e-03 2.26033050e-03 2.29083813e-03 + 2.32175752e-03 2.35309422e-03 2.38485388e-03 2.41704219e-03 2.44966495e-03 + 2.48272802e-03 2.51623735e-03 2.55019894e-03 2.58461891e-03 2.61950345e-03 + 2.65485883e-03 2.69069140e-03 2.72700759e-03 2.76381395e-03 2.80111708e-03 + 2.83892369e-03 2.87724058e-03 2.91607463e-03 2.95543282e-03 2.99532222e-03 + 3.03575001e-03 3.07672346e-03 3.11824992e-03 3.16033687e-03 3.20299186e-03 + 3.24622256e-03 3.29003675e-03 3.33444230e-03 3.37944719e-03 3.42505951e-03 + 3.47128745e-03 3.51813934e-03 3.56562358e-03 3.61374872e-03 3.66252340e-03 + 3.71195639e-03 3.76205657e-03 3.81283296e-03 3.86429468e-03 3.91645097e-03 + 3.96931122e-03 4.02288492e-03 4.07718170e-03 4.13221132e-03 4.18798368e-03 + 4.24450880e-03 4.30179683e-03 4.35985808e-03 4.41870298e-03 4.47834211e-03 + 4.53878618e-03 4.60004607e-03 4.66213279e-03 4.72505748e-03 4.78883147e-03 + 4.85346621e-03 4.91897333e-03 4.98536460e-03 5.05265194e-03 5.12084747e-03 + 5.18996342e-03 5.26001224e-03 5.33100650e-03 5.40295896e-03 5.47588257e-03 + 5.54979043e-03 5.62469582e-03 5.70061220e-03 5.77755323e-03 5.85553273e-03 + 5.93456471e-03 6.01466339e-03 6.09584316e-03 6.17811861e-03 6.26150453e-03 + 6.34601591e-03 6.43166793e-03 6.51847600e-03 6.60645572e-03 6.69562289e-03 + 6.78599356e-03 6.87758395e-03 6.97041054e-03 7.06449000e-03 7.15983925e-03 + 7.25647543e-03 7.35441591e-03 7.45367829e-03 7.55428040e-03 7.65624035e-03 + 7.75957644e-03 7.86430726e-03 7.97045163e-03 8.07802862e-03 8.18705758e-03 + 8.29755810e-03 8.40955005e-03 8.52305354e-03 8.63808899e-03 8.75467707e-03 + 8.87283874e-03 8.99259524e-03 9.11396808e-03 9.23697909e-03 9.36165038e-03 + 9.48800435e-03 9.61606372e-03 9.74585150e-03 9.87739102e-03 1.00107059e-02 + 1.01458202e-02 1.02827581e-02 1.04215442e-02 1.05622036e-02 1.07047614e-02 + 1.08492433e-02 1.09956753e-02 1.11440836e-02 1.12944951e-02 1.14469366e-02 + 1.16014356e-02 1.17580199e-02 1.19167176e-02 1.20775573e-02 1.22405678e-02 + 1.24057784e-02 1.25732189e-02 1.27429194e-02 1.29149103e-02 1.30892225e-02 + 1.32658874e-02 1.34449368e-02 1.36264028e-02 1.38103180e-02 1.39967155e-02 + 1.41856289e-02 1.43770920e-02 1.45711392e-02 1.47678056e-02 1.49671263e-02 + 1.51691372e-02 1.53738747e-02 1.55813755e-02 1.57916770e-02 1.60048169e-02 + 1.62208335e-02 1.64397657e-02 1.66616528e-02 1.68865348e-02 1.71144519e-02 + 1.73454453e-02 1.75795563e-02 1.78168272e-02 1.80573005e-02 1.83010194e-02 + 1.85480279e-02 1.87983701e-02 1.90520913e-02 1.93092369e-02 1.95698532e-02 + 1.98339871e-02 2.01016859e-02 2.03729979e-02 2.06479718e-02 2.09266569e-02 + 2.12091035e-02 2.14953623e-02 2.17854847e-02 2.20795229e-02 2.23775297e-02 + 2.26795586e-02 2.29856641e-02 2.32959011e-02 2.36103253e-02 2.39289933e-02 + 2.42519623e-02 2.45792905e-02 2.49110366e-02 2.52472603e-02 2.55880219e-02 + 2.59333828e-02 2.62834051e-02 2.66381516e-02 2.69976861e-02 2.73620732e-02 + 2.77313785e-02 2.81056682e-02 2.84850098e-02 2.88694713e-02 2.92591218e-02 + 2.96540315e-02 3.00542712e-02 3.04599130e-02 3.08710297e-02 3.12876953e-02 + 3.17099846e-02 3.21379735e-02 3.25717389e-02 3.30113589e-02 3.34569125e-02 + 3.39084796e-02 3.43661415e-02 3.48299805e-02 3.53000800e-02 3.57765243e-02 + 3.62593992e-02 3.67487914e-02 3.72447890e-02 3.77474810e-02 3.82569579e-02 + 3.87733111e-02 3.92966336e-02 3.98270193e-02 4.03645636e-02 4.09093632e-02 + 4.14615159e-02 4.20211210e-02 4.25882791e-02 4.31630920e-02 4.37456633e-02 + 4.43360974e-02 4.49345007e-02 4.55409806e-02 4.61556461e-02 4.67786078e-02 + 4.74099775e-02 4.80498689e-02 4.86983968e-02 4.93556779e-02 5.00218303e-02 + 5.06969737e-02 5.13812296e-02 5.20747208e-02 5.27775721e-02 5.34899097e-02 + 5.42118618e-02 5.49435580e-02 5.56851299e-02 5.64367107e-02 5.71984357e-02 + 5.79704416e-02 5.87528673e-02 5.95458533e-02 6.03495423e-02 6.11640786e-02 + 6.19896087e-02 6.28262810e-02 6.36742458e-02 6.45336556e-02 6.54046648e-02 + 6.62874300e-02 6.71821099e-02 6.80888652e-02 6.90078590e-02 6.99392564e-02 + 7.08832249e-02 7.18399341e-02 7.28095560e-02 7.37922648e-02 7.47882373e-02 + 7.57976523e-02 7.68206914e-02 7.78575385e-02 7.89083798e-02 7.99734043e-02 + 8.10528035e-02 8.21467712e-02 8.32555042e-02 8.43792018e-02 8.55180659e-02 + 8.66723011e-02 8.78421151e-02 8.90277181e-02 9.02293231e-02 9.14471461e-02 + 9.26814060e-02 9.39323248e-02 9.52001271e-02 9.64850410e-02 9.77872973e-02 + 9.91071301e-02 1.00444777e-01 1.01800477e-01 1.03174476e-01 1.04567019e-01 + 1.05978358e-01 1.07408745e-01 1.08858439e-01 1.10327698e-01 1.11816789e-01 + 1.13325977e-01 1.14855535e-01 1.16405738e-01 1.17976863e-01 1.19569194e-01 + 1.21183017e-01 1.22818621e-01 1.24476301e-01 1.26156355e-01 1.27859084e-01 + 1.29584795e-01 1.31333798e-01 1.33106407e-01 1.34902941e-01 1.36723723e-01 + 1.38569080e-01 1.40439343e-01 1.42334850e-01 1.44255940e-01 1.46202959e-01 + 1.48176257e-01 1.50176188e-01 1.52203112e-01 1.54257394e-01 1.56339402e-01 + 1.58449512e-01 1.60588101e-01 1.62755555e-01 1.64952263e-01 1.67178619e-01 + 1.69435025e-01 1.71721886e-01 1.74039612e-01 1.76388620e-01 1.78769333e-01 + 1.81182179e-01 1.83627590e-01 1.86106008e-01 1.88617876e-01 1.91163647e-01 + 1.93743778e-01 1.96358733e-01 1.99008982e-01 2.01695002e-01 2.04417275e-01 + 2.07176290e-01 2.09972543e-01 2.12806537e-01 2.15678782e-01 2.18589794e-01 + 2.21540095e-01 2.24530216e-01 2.27560695e-01 2.30632076e-01 2.33744912e-01 + 2.36899762e-01 2.40097192e-01 2.43337778e-01 2.46622102e-01 2.49950755e-01 + 2.53324334e-01 2.56743447e-01 2.60208707e-01 2.63720738e-01 2.67280170e-01 + 2.70887644e-01 2.74543808e-01 2.78249320e-01 2.82004844e-01 2.85811057e-01 + 2.89668642e-01 2.93578293e-01 2.97540712e-01 3.01556612e-01 3.05626714e-01 + 3.09751751e-01 3.13932463e-01 3.18169601e-01 3.22463929e-01 3.26816217e-01 + 3.31227248e-01 3.35697814e-01 3.40228719e-01 3.44820778e-01 3.49474816e-01 + 3.54191669e-01 3.58972186e-01 3.63817225e-01 3.68727657e-01 3.73704366e-01 + 3.78748245e-01 3.83860201e-01 3.89041153e-01 3.94292032e-01 3.99613782e-01 + 4.05007360e-01 4.10473734e-01 4.16013889e-01 4.21628818e-01 4.27319532e-01 + 4.33087054e-01 4.38932419e-01 4.44856680e-01 4.50860900e-01 4.56946159e-01 + 4.63113550e-01 4.69364183e-01 4.75699180e-01 4.82119680e-01 4.88626838e-01 + 4.95221823e-01 5.01905820e-01 5.08680031e-01 5.15545673e-01 5.22503981e-01 + 5.29556205e-01 5.36703612e-01 5.43947488e-01 5.51289134e-01 5.58729871e-01 + 5.66271034e-01 5.73913981e-01 5.81660084e-01 5.89510737e-01 5.97467349e-01 + 6.05531351e-01 6.13704194e-01 6.21987345e-01 6.30382293e-01 6.38890548e-01 + 6.47513638e-01 6.56253114e-01 6.65110547e-01 6.74087528e-01 6.83185672e-01 + 6.92406612e-01 7.01752008e-01 7.11223538e-01 7.20822905e-01 7.30551835e-01 + 7.40412075e-01 7.50405399e-01 7.60533603e-01 7.70798507e-01 7.81201956e-01 + 7.91745820e-01 8.02431995e-01 8.13262400e-01 8.24238984e-01 8.35363718e-01 + 8.46638602e-01 8.58065663e-01 8.69646955e-01 8.81384559e-01 8.93280585e-01 + 9.05337172e-01 9.17556486e-01 9.29940724e-01 9.42492112e-01 9.55212906e-01 + 9.68105391e-01 9.81171887e-01 9.94414740e-01 1.00783633e+00 1.02143908e+00 + 1.03522541e+00 1.04919783e+00 1.06335883e+00 1.07771095e+00 1.09225679e+00 + 1.10699896e+00 1.12194010e+00 1.13708289e+00 1.15243007e+00 1.16798440e+00 + 1.18374865e+00 1.19972568e+00 1.21591835e+00 1.23232957e+00 1.24896229e+00 + 1.26581951e+00 1.28290424e+00 1.30021957e+00 1.31776860e+00 1.33555450e+00 + 1.35358044e+00 1.37184969e+00 1.39036551e+00 1.40913124e+00 1.42815025e+00 + 1.44742596e+00 1.46696183e+00 1.48676138e+00 1.50682816e+00 1.52716579e+00 + 1.54777791e+00 1.56866823e+00 1.58984051e+00 1.61129855e+00 1.63304621e+00 + 1.65508739e+00 1.67742607e+00 1.70006625e+00 1.72301200e+00 1.74626745e+00 + 1.76983678e+00 1.79372423e+00 1.81793408e+00 1.84247069e+00 1.86733848e+00 + 1.89254190e+00 1.91808549e+00 1.94397385e+00 1.97021161e+00 1.99680351e+00 + 2.02375432e+00 2.05106889e+00 2.07875211e+00 2.10680898e+00 2.13524453e+00 + 2.16406388e+00 2.19327220e+00 2.22287474e+00 2.25287683e+00 2.28328385e+00 + 2.31410128e+00 2.34533465e+00 2.37698957e+00 2.40907175e+00 2.44158693e+00 + 2.47454097e+00 2.50793979e+00 2.54178939e+00 2.57609587e+00 2.61086537e+00 + 2.64610416e+00 2.68181856e+00 2.71801500e+00 2.75469999e+00 2.79188011e+00 + 2.82956205e+00 2.86775258e+00 2.90645857e+00 2.94568697e+00 2.98544484e+00 + 3.02573931e+00 3.06657764e+00 3.10796717e+00 3.14991533e+00 3.19242966e+00 + 3.23551781e+00 3.27918751e+00 3.32344663e+00 3.36830311e+00 3.41376502e+00 + 3.45984052e+00 3.50653791e+00 3.55386557e+00 3.60183200e+00 3.65044585e+00 + 3.69971583e+00 3.74965080e+00 3.80025975e+00 3.85155177e+00 3.90353607e+00 + 3.95622200e+00 4.00961904e+00 4.06373677e+00 4.11858493e+00 4.17417337e+00 + 4.23051209e+00 4.28761121e+00 4.34548099e+00 4.40413185e+00 4.46357431e+00 + 4.52381907e+00 4.58487694e+00 4.64675892e+00 4.70947611e+00 4.77303980e+00 + 4.83746140e+00 4.90275251e+00 4.96892484e+00 5.03599030e+00 5.10396094e+00 + 5.17284898e+00 5.24266680e+00 5.31342695e+00 5.38514215e+00 5.45782528e+00 + 5.53148942e+00 5.60614780e+00 5.68181384e+00 5.75850115e+00 5.83622350e+00 + 5.91499487e+00 5.99482942e+00 6.07574149e+00 6.15774562e+00 6.24085657e+00 + 6.32508926e+00 6.41045884e+00 6.49698065e+00 6.58467024e+00 6.67354338e+00 + 6.76361604e+00 6.85490440e+00 6.94742488e+00 7.04119411e+00 7.13622894e+00 + 7.23254645e+00 7.33016396e+00 7.42909901e+00 7.52936938e+00 7.63099310e+00 + 7.73398843e+00 7.83837389e+00 7.94416823e+00 8.05139048e+00 8.16005991e+00 + 8.27019604e+00 8.38181868e+00 8.49494789e+00 8.60960400e+00 8.72580762e+00 + 8.84357964e+00 8.96294122e+00 9.08391382e+00 9.20651919e+00 9.33077936e+00 + 9.45671667e+00 9.58435375e+00 9.71371354e+00 9.84481930e+00 9.97769459e+00 + 1.01123633e+01 1.02488496e+01 1.03871781e+01 1.05273736e+01 1.06694613e+01 + 1.08134668e+01 1.09594159e+01 1.11073349e+01 1.12572503e+01 1.14091891e+01 + 1.15631787e+01 1.17192466e+01 1.18774210e+01 1.20377303e+01 1.22002032e+01 + 1.23648691e+01 1.25317574e+01 1.27008983e+01 1.28723220e+01 1.30460594e+01 + 1.32221418e+01 1.34006007e+01 1.35814683e+01 1.37647770e+01 1.39505599e+01 + 1.41388503e+01 1.43296820e+01 1.45230894e+01 1.47191072e+01 1.49177706e+01 + 1.51191154e+01 1.53231778e+01 1.55299943e+01 1.57396023e+01 1.59520393e+01 + 1.61673436e+01 1.63855539e+01 1.66067093e+01 1.68308497e+01 1.70580152e+01 + 1.72882469e+01 1.75215859e+01 1.77580743e+01 1.79977547e+01 1.82406699e+01 + 1.84868638e+01 1.87363806e+01 1.89892650e+01 1.92455627e+01 1.95053196e+01 + 1.97685824e+01 2.00353985e+01 2.03058158e+01 2.05798829e+01 2.08576491e+01 + 2.11391643e+01 2.14244791e+01 2.17136448e+01 2.20067133e+01 2.23037374e+01 + 2.26047704e+01 2.29098665e+01 2.32190804e+01 2.35324678e+01 2.38500849e+01 + 2.41719890e+01 2.44982377e+01 2.48288899e+01 2.51640048e+01 2.55036428e+01 + 2.58478648e+01 2.61967328e+01 2.65503095e+01 2.69086584e+01 2.72718439e+01 + 2.76399314e+01 2.80129869e+01 2.83910775e+01 2.87742712e+01 2.91626368e+01 + 2.95562442e+01 2.99551642e+01 3.03594683e+01 3.07692293e+01 3.11845209e+01 + 3.16054176e+01 3.20319952e+01 3.24643303e+01 3.29025005e+01 3.33465848e+01 + 3.37966629e+01 3.42528156e+01 3.47151251e+01 3.51836743e+01 3.56585475e+01 + 3.61398301e+01 3.66276085e+01 3.71219704e+01 3.76230048e+01 3.81308016e+01 + 3.86454521e+01 3.91670489e+01 3.96956856e+01 4.02314573e+01 4.07744603e+01 + 4.13247922e+01 4.18825520e+01 4.24478398e+01 4.30207573e+01 4.36014074e+01 + 4.41898946e+01 4.47863245e+01 4.53908045e+01 4.60034431e+01 4.66243504e+01 + 4.72536382e+01 4.78914194e+01 4.85378088e+01 4.91929224e+01 4.98568781e+01 + 5.05297952e+01 5.12117947e+01 5.19029990e+01 5.26035326e+01 5.33135212e+01 + 5.40330925e+01 5.47623759e+01 5.55015024e+01 5.62506048e+01 5.70098179e+01 + 5.77792780e+01 5.85591236e+01 5.93494947e+01 6.01505334e+01 6.09623837e+01 + 6.17851916e+01 6.26191048e+01 6.34642734e+01 6.43208492e+01 6.51889861e+01 + 6.60688403e+01 6.69605699e+01 6.78643351e+01 6.87802984e+01 6.97086245e+01 + 7.06494801e+01 7.16030345e+01 7.25694589e+01 7.35489272e+01 7.45416153e+01 + 7.55477017e+01 7.65673672e+01 7.76007951e+01 7.86481712e+01 7.97096837e+01 + 8.07855234e+01 8.18758837e+01 8.29809606e+01 8.41009526e+01 8.52360612e+01 + 8.63864902e+01 8.75524466e+01 8.87341399e+01 8.99317825e+01 9.11455896e+01 + 9.23757795e+01 9.36225732e+01 9.48861948e+01 9.61668715e+01 9.74648335e+01 + 9.87803140e+01 1.00113550e+02 1.01464780e+02 1.02834247e+02 1.04222199e+02 + 1.05628883e+02 1.07054554e+02 1.08499467e+02 1.09963881e+02 1.11448061e+02 + 1.12952273e+02 1.14476787e+02 1.16021878e+02 1.17587822e+02 1.19174902e+02 + 1.20783403e+02 1.22413614e+02 1.24065827e+02 1.25740341e+02 1.27437455e+02 + 1.29157476e+02 1.30900711e+02 1.32667475e+02 1.34458085e+02 1.36272862e+02 + 1.38112134e+02 1.39976230e+02 1.41865486e+02 1.43780241e+02 1.45720839e+02 + 1.47687630e+02 1.49680966e+02 1.51701207e+02 1.53748714e+02 1.55823857e+02 + 1.57927008e+02 1.60058545e+02 1.62218851e+02 1.64408315e+02 1.66627330e+02 + 1.68876296e+02 1.71155615e+02 1.73465698e+02 1.75806961e+02 1.78179823e+02 + 1.80584712e+02 1.83022059e+02 1.85492304e+02 1.87995889e+02 1.90533265e+02 + 1.93104888e+02 1.95711220e+02 1.98352730e+02 2.01029892e+02 2.03743187e+02 + 2.06493104e+02 2.09280137e+02 2.12104786e+02 2.14967559e+02 2.17868971e+02 + 2.20809543e+02 2.23789805e+02 2.26810290e+02 2.29871543e+02 2.32974114e+02 + 2.36118560e+02 2.39305447e+02 2.42535347e+02 2.45808840e+02 2.49126516e+02 + 2.52488971e+02 2.55896809e+02 2.59350642e+02 2.62851091e+02 2.66398786e+02 + 2.69994364e+02 2.73638472e+02 2.77331764e+02 2.81074904e+02 2.84868565e+02 + 2.88713429e+02 2.92610188e+02 2.96559540e+02 3.00562197e+02 3.04618878e+02 + 3.08730312e+02 3.12897238e+02 3.17120404e+02 3.21400571e+02 3.25738507e+02 + 3.30134991e+02 3.34590816e+02 3.39106780e+02 3.43683696e+02 3.48322387e+02 + 3.53023686e+02 3.57788438e+02 3.62617500e+02 3.67511740e+02 3.72472037e+02 + 3.77499283e+02 3.82594382e+02 3.87758249e+02 3.92991813e+02 3.98296014e+02 + 4.03671806e+02 4.09120155e+02 4.14642040e+02 4.20238453e+02 4.25910402e+02 + 4.31658904e+02 4.37484994e+02 4.43389719e+02 4.49374139e+02 4.55439331e+02 + 4.61586385e+02 4.67816405e+02 4.74130512e+02 4.80529841e+02 4.87015540e+02 + 4.93588778e+02 5.00250733e+02 5.07002606e+02 5.13845608e+02 5.20780970e+02 + 5.27809938e+02 5.34933776e+02 5.42153765e+02 5.49471201e+02 5.56887401e+02 + 5.64403697e+02 5.72021440e+02 5.79742000e+02 5.87566764e+02 5.95497138e+02 + 6.03534549e+02 6.11680440e+02 6.19936277e+02 6.28303542e+02 6.36783740e+02 + 6.45378395e+02 6.54089052e+02 6.62917276e+02 6.71864655e+02 6.80932796e+02 + 6.90123330e+02 6.99437908e+02 7.08878204e+02 7.18445917e+02 7.28142764e+02 + 7.37970490e+02 7.47930860e+02 7.58025665e+02 7.68256719e+02 7.78625862e+02 + 7.89134956e+02 7.99785892e+02 8.10580583e+02 8.21520970e+02 8.32609019e+02 + 8.43846723e+02 8.55236102e+02 8.66779204e+02 8.78478102e+02 8.90334900e+02 + 9.02351729e+02 9.14530748e+02 9.26874148e+02 9.39384146e+02 9.52062992e+02 + 9.64912963e+02 9.77936371e+02 9.91135555e+02 1.00451289e+03 1.01807077e+03 + 1.03181165e+03 1.04573799e+03 1.05985229e+03 1.07415709e+03 1.08865496e+03 + 1.10334851e+03 1.11824038e+03 1.13333325e+03 1.14862982e+03 1.16413285e+03 + 1.17984512e+03 1.19576946e+03 1.21190873e+03 1.22826584e+03 1.24484371e+03 + 1.26164534e+03 1.27867373e+03 1.29593196e+03 1.31342313e+03 1.33115037e+03 + 1.34911687e+03 1.36732587e+03 1.38578063e+03 1.40448448e+03 1.42344078e+03 + 1.44265292e+03 1.46212437e+03 1.48185863e+03 1.50185924e+03 1.52212980e+03 + 1.54267395e+03 1.56349538e+03 1.58459784e+03 1.60598512e+03 1.62766107e+03 + 1.64962957e+03 1.67189458e+03 1.69446010e+03 1.71733019e+03 1.74050895e+03 + 1.76400056e+03 1.78780923e+03 1.81193925e+03 1.83639495e+03 1.86118073e+03 + 1.88630105e+03 1.91176041e+03 1.93756339e+03 1.96371464e+03 1.99021885e+03 + 2.01708078e+03 2.04430527e+03 2.07189721e+03 2.09986156e+03 2.12820334e+03 + 2.15692765e+03 2.18603965e+03 2.21554458e+03 2.24544773e+03 2.27575449e+03 + 2.30647029e+03 2.33760066e+03 2.36915120e+03 2.40112758e+03 2.43353554e+03 + 2.46638092e+03 2.49966960e+03 2.53340758e+03 2.56760092e+03 2.60225577e+03 + 2.63737835e+03 2.67297499e+03 2.70905207e+03 2.74561608e+03 2.78267359e+03 + 2.82023127e+03 2.85829587e+03 2.89687422e+03 2.93597326e+03 2.97560002e+03 + 3.01576162e+03 3.05646529e+03 3.09771833e+03 3.13952816e+03 3.18190229e+03 + 3.22484835e+03 3.26837405e+03 3.31248722e+03 3.35719578e+03 3.40250777e+03 + 3.44843134e+03 3.49497473e+03 3.54214633e+03 3.58995459e+03 3.63840812e+03 + 3.68751563e+03 3.73728594e+03 3.78772800e+03 3.83885087e+03 3.89066375e+03 + 3.94317595e+03 3.99639690e+03 4.05033617e+03 4.10500346e+03 4.16040860e+03 + 4.21656153e+03 4.27347236e+03 4.33115132e+03 4.38960877e+03 4.44885521e+03 + 4.50890130e+03 4.56975784e+03 4.63143575e+03 4.69394613e+03 4.75730021e+03 + 4.82150937e+03 4.88658517e+03 4.95253929e+03 5.01938360e+03 5.08713010e+03 + 5.15579097e+03 5.22537856e+03 5.29590537e+03 5.36738408e+03 5.43982754e+03 + 5.51324876e+03 5.58766095e+03 5.66307747e+03 5.73951189e+03 5.81697795e+03 + 5.89548956e+03 5.97506084e+03 6.05570610e+03 6.13743982e+03 6.22027670e+03 + 6.30423162e+03 6.38931969e+03 6.47555618e+03 6.56295661e+03 6.65153668e+03 + 6.74131231e+03 6.83229964e+03 6.92451503e+03 7.01797504e+03 7.11269648e+03 + 7.20869638e+03 7.30599198e+03 7.40460078e+03 7.50454050e+03 7.60582911e+03 + 7.70848480e+03 7.81252604e+03 7.91797151e+03 8.02484019e+03 8.13315126e+03 + 8.24292421e+03 8.35417876e+03 8.46693492e+03 8.58121294e+03 8.69703336e+03 + 8.81441701e+03 8.93338499e+03 9.05395867e+03 9.17615974e+03 9.30001015e+03 + 9.42553216e+03 9.55274835e+03 9.68168156e+03 9.81235499e+03 9.94479211e+03 + 1.00790167e+04 1.02150530e+04 1.03529253e+04 1.04926585e+04 1.06342777e+04 + 1.07778082e+04 1.09232761e+04 1.10707073e+04 1.12201283e+04 1.13715661e+04 + 1.15250479e+04 1.16806012e+04 1.18382540e+04 1.19980346e+04 1.21599718e+04 + 1.23240947e+04 1.24904327e+04 1.26590157e+04 1.28298742e+04 1.30030387e+04 + 1.31785404e+04 1.33564108e+04 1.35366820e+04 1.37193863e+04 1.39045565e+04 + 1.40922260e+04 1.42824284e+04 1.44751980e+04 1.46705694e+04 1.48685777e+04 + 1.50692586e+04 1.52726480e+04 1.54787826e+04 1.56876993e+04 1.58994358e+04 + 1.61140301e+04 1.63315208e+04 1.65519470e+04 1.67753482e+04 1.70017647e+04 + 1.72312371e+04 1.74638067e+04 1.76995153e+04 1.79384052e+04 1.81805194e+04 + 1.84259015e+04 1.86745954e+04 1.89266460e+04 1.91820985e+04 1.94409988e+04 + 1.97033935e+04 1.99693297e+04 2.02388553e+04 2.05120186e+04 2.07888689e+04 + 2.10694557e+04 2.13538297e+04 2.16420418e+04 2.19341439e+04 2.22301885e+04 + 2.25302289e+04 2.28343188e+04 2.31425131e+04 2.34548670e+04 2.37714368e+04 + 2.40922793e+04 2.44174522e+04 2.47470140e+04 2.50810239e+04 2.54195419e+04 + 2.57626288e+04 2.61103464e+04 2.64627571e+04 2.68199243e+04 2.71819122e+04 + 2.75487858e+04 2.79206111e+04 2.82974550e+04 2.86793850e+04 2.90664700e+04 + 2.94587795e+04 2.98563839e+04 3.02593548e+04 3.06677646e+04 3.10816867e+04 + 3.15011955e+04 3.19263663e+04 3.23572758e+04 3.27940011e+04 3.32366210e+04 + 3.36852149e+04 3.41398634e+04 3.46006483e+04 3.50676525e+04 3.55409597e+04 + 3.60206552e+04 3.65068251e+04 3.69995569e+04 3.74989390e+04 3.80050613e+04 + 3.85180147e+04 3.90378914e+04 3.95647849e+04 4.00987899e+04 4.06400023e+04 + 4.11885195e+04 4.17444399e+04 4.23078636e+04 4.28788919e+04 4.34576272e+04 + 4.40441738e+04 4.46386370e+04 4.52411236e+04 4.58517419e+04 4.64706018e+04 + 4.70978144e+04 4.77334925e+04 4.83777503e+04 4.90307037e+04 4.96924699e+04 + 5.03631680e+04 5.10429184e+04 5.17318435e+04 5.24300670e+04 5.31377143e+04 + 5.38549128e+04 5.45817913e+04 5.53184804e+04 5.60651126e+04 5.68218221e+04 + 5.75887449e+04 5.83660188e+04 5.91537836e+04 5.99521808e+04 6.07613539e+04 + 6.15814485e+04 6.24126118e+04 6.32549933e+04 6.41087445e+04 6.49740187e+04 + 6.58509715e+04 6.67397605e+04 6.76405454e+04 6.85534882e+04 6.94787530e+04 + 7.04165061e+04 7.13669160e+04 7.23301536e+04 7.33063919e+04 7.42958066e+04 + 7.52985753e+04 7.63148784e+04 7.73448985e+04 7.83888207e+04 7.94468328e+04 + 8.05191248e+04 8.16058895e+04 8.27073222e+04 8.38236210e+04 8.49549864e+04 + 8.61016218e+04 8.72637334e+04 8.84415299e+04 8.96352231e+04 9.08450276e+04 + 9.20711608e+04 9.33138430e+04 9.45732977e+04 9.58497513e+04 9.71434331e+04 + 9.84545757e+04 9.97834147e+04 1.01130189e+05 1.02495141e+05 1.03878515e+05 + 1.05280561e+05 1.06701530e+05 1.08141678e+05 1.09601264e+05 1.11080550e+05 + 1.12579801e+05 1.14099288e+05 1.15639284e+05 1.17200064e+05 1.18781911e+05 + 1.20385107e+05 1.22009942e+05 1.23656707e+05 1.25325699e+05 1.27017217e+05 + 1.28731565e+05 1.30469052e+05 1.32229990e+05 1.34014695e+05 1.35823488e+05 + 1.37656695e+05 1.39514644e+05 1.41397670e+05 1.43306110e+05 1.45240310e+05 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 4.46340243e-06 4.52364487e-06 4.58470040e-06 4.64657999e-06 4.70929477e-06 + 4.77285601e-06 4.83727513e-06 4.90256372e-06 4.96873350e-06 5.03579638e-06 + 5.10376441e-06 5.17264979e-06 5.24246492e-06 5.31322235e-06 5.38493478e-06 + 5.45761512e-06 5.53127642e-06 5.60593193e-06 5.68159506e-06 5.75827941e-06 + 5.83599877e-06 5.91476711e-06 5.99459858e-06 6.07550753e-06 6.15750851e-06 + 6.24061626e-06 6.32484571e-06 6.41021200e-06 6.49673048e-06 6.58441669e-06 + 6.67328641e-06 6.76335560e-06 6.85464044e-06 6.94715736e-06 7.04092298e-06 + 7.13595415e-06 7.23226795e-06 7.32988170e-06 7.42881294e-06 7.52907945e-06 + 7.63069926e-06 7.73369062e-06 7.83807206e-06 7.94386233e-06 8.05108045e-06 + 8.15974569e-06 8.26987759e-06 8.38149593e-06 8.49462078e-06 8.60927247e-06 + 8.72547162e-06 8.84323910e-06 8.96259609e-06 9.08356403e-06 9.20616468e-06 + 9.33042007e-06 9.45635252e-06 9.58398469e-06 9.71333950e-06 9.84444021e-06 + 9.97731039e-06 1.01119739e-05 1.02484550e-05 1.03867781e-05 1.05269682e-05 + 1.06690505e-05 1.08130504e-05 1.09589939e-05 1.11069072e-05 1.12568168e-05 + 1.14087498e-05 1.15627334e-05 1.17187954e-05 1.18769637e-05 1.20372668e-05 + 1.21997335e-05 1.23643930e-05 1.25312749e-05 1.27004092e-05 1.28718263e-05 + 1.30455571e-05 1.32216326e-05 1.34000847e-05 1.35809453e-05 1.37642470e-05 + 1.39500227e-05 1.41383059e-05 1.43291302e-05 1.45225302e-05 1.47185404e-05 + 1.49171962e-05 1.51185332e-05 1.53225877e-05 1.55293963e-05 1.57389962e-05 + 1.59514251e-05 1.61667211e-05 1.63849229e-05 1.66060698e-05 1.68302016e-05 + 1.70573584e-05 1.72875812e-05 1.75209112e-05 1.77573905e-05 1.79970616e-05 + 1.82399675e-05 1.84861519e-05 1.87356591e-05 1.89885338e-05 1.92448216e-05 + 1.95045685e-05 1.97678212e-05 2.00346270e-05 2.03050339e-05 2.05790905e-05 + 2.08568460e-05 2.11383503e-05 2.14236541e-05 2.17128087e-05 2.20058659e-05 + 2.23028786e-05 2.26039000e-05 2.29089843e-05 2.32181863e-05 2.35315616e-05 + 2.38491666e-05 2.41710582e-05 2.44972944e-05 2.48279338e-05 2.51630358e-05 + 2.55026607e-05 2.58468695e-05 2.61957241e-05 2.65492872e-05 2.69076223e-05 + 2.72707938e-05 2.76388671e-05 2.80119082e-05 2.83899842e-05 2.87731632e-05 + 2.91615139e-05 2.95551061e-05 2.99540107e-05 3.03582993e-05 3.07680445e-05 + 3.11833201e-05 3.16042006e-05 3.20307617e-05 3.24630802e-05 3.29012336e-05 + 3.33453008e-05 3.37953615e-05 3.42514967e-05 3.47137883e-05 3.51823195e-05 + 3.56571744e-05 3.61384384e-05 3.66261981e-05 3.71205410e-05 3.76215561e-05 + 3.81293333e-05 3.86439640e-05 3.91655407e-05 3.96941570e-05 4.02299081e-05 + 4.07728902e-05 4.13232010e-05 4.18809392e-05 4.24462053e-05 4.30191007e-05 + 4.35997285e-05 4.41881930e-05 4.47846000e-05 4.53890566e-05 4.60016716e-05 + 4.66225551e-05 4.72518186e-05 4.78895753e-05 4.85359398e-05 4.91910282e-05 + 4.98549583e-05 5.05278495e-05 5.12098227e-05 5.19010004e-05 5.26015070e-05 + 5.33114683e-05 5.40310119e-05 5.47602672e-05 5.54993652e-05 5.62484388e-05 + 5.70076227e-05 5.77770532e-05 5.85568687e-05 5.93472093e-05 6.01482172e-05 + 6.09600363e-05 6.17828124e-05 6.26166936e-05 6.34618296e-05 6.43183724e-05 + 6.51864759e-05 6.60662962e-05 6.69579915e-05 6.78617219e-05 6.87776499e-05 + 6.97059402e-05 7.06467597e-05 7.16002773e-05 7.25666645e-05 7.35460951e-05 + 7.45387450e-05 7.55447926e-05 7.65644189e-05 7.75978070e-05 7.86451428e-05 + 7.97066144e-05 8.07824127e-05 8.18727310e-05 8.29777653e-05 8.40977142e-05 + 8.52327790e-05 8.63831638e-05 8.75490753e-05 8.87307231e-05 8.99283196e-05 + 9.11420799e-05 9.23722224e-05 9.36189681e-05 9.48825411e-05 9.61631685e-05 + 9.74610805e-05 9.87765104e-05 1.00109695e-04 1.01460873e-04 1.02830288e-04 + 1.04218186e-04 1.05624816e-04 1.07050432e-04 1.08495289e-04 1.09959647e-04 + 1.11443770e-04 1.12947924e-04 1.14472379e-04 1.16017410e-04 1.17583294e-04 + 1.19170313e-04 1.20778752e-04 1.22408900e-04 1.24061050e-04 1.25735499e-04 + 1.27432548e-04 1.29152502e-04 1.30895670e-04 1.32662366e-04 1.34452907e-04 + 1.36267615e-04 1.38106815e-04 1.39970840e-04 1.41860023e-04 1.43774704e-04 + 1.45715228e-04 1.47681943e-04 1.49675203e-04 1.51695365e-04 1.53742794e-04 + 1.55817857e-04 1.57920927e-04 1.60052382e-04 1.62212605e-04 1.64401985e-04 + 1.66620914e-04 1.68869793e-04 1.71149024e-04 1.73459019e-04 1.75800191e-04 + 1.78172962e-04 1.80577758e-04 1.83015012e-04 1.85485161e-04 1.87988650e-04 + 1.90525928e-04 1.93097452e-04 1.95703684e-04 1.98345092e-04 2.01022151e-04 + 2.03735342e-04 2.06485153e-04 2.09272078e-04 2.12096618e-04 2.14959281e-04 + 2.17860582e-04 2.20801041e-04 2.23781187e-04 2.26801557e-04 2.29862692e-04 + 2.32965143e-04 2.36109468e-04 2.39296232e-04 2.42526007e-04 2.45799375e-04 + 2.49116923e-04 2.52479249e-04 2.55886955e-04 2.59340655e-04 2.62840970e-04 + 2.66388528e-04 2.69983968e-04 2.73627935e-04 2.77321085e-04 2.81064081e-04 + 2.84857596e-04 2.88702312e-04 2.92598920e-04 2.96548121e-04 3.00550624e-04 + 3.04607148e-04 3.08718424e-04 3.12885189e-04 3.17108193e-04 3.21388195e-04 + 3.25725964e-04 3.30122279e-04 3.34577932e-04 3.39093722e-04 3.43670462e-04 + 3.48308974e-04 3.53010092e-04 3.57774661e-04 3.62603537e-04 3.67497588e-04 + 3.72457694e-04 3.77484747e-04 3.82579649e-04 3.87743318e-04 3.92976680e-04 + 3.98280677e-04 4.03656262e-04 4.09104401e-04 4.14626073e-04 4.20222271e-04 + 4.25894001e-04 4.31642283e-04 4.37468148e-04 4.43372645e-04 4.49356835e-04 + 4.55421794e-04 4.61568611e-04 4.67798392e-04 4.74112255e-04 4.80511337e-04 + 4.86996787e-04 4.93569771e-04 5.00231471e-04 5.06983083e-04 5.13825821e-04 + 5.20760916e-04 5.27789614e-04 5.34913178e-04 5.42132888e-04 5.49450043e-04 + 5.56865957e-04 5.64381964e-04 5.71999414e-04 5.79719676e-04 5.87544139e-04 + 5.95474208e-04 6.03511309e-04 6.11656887e-04 6.19912405e-04 6.28279348e-04 + 6.36759220e-04 6.45353544e-04 6.54063865e-04 6.62891749e-04 6.71838784e-04 + 6.80906576e-04 6.90096755e-04 6.99410975e-04 7.08850908e-04 7.18418252e-04 + 7.28114726e-04 7.37942073e-04 7.47902060e-04 7.57996476e-04 7.68227136e-04 + 7.78595880e-04 7.89104570e-04 7.99755095e-04 8.10549371e-04 8.21489336e-04 + 8.32576958e-04 8.43814230e-04 8.55203170e-04 8.66745827e-04 8.78444275e-04 + 8.90300616e-04 9.02316982e-04 9.14495533e-04 9.26838458e-04 9.39347974e-04 + 9.52026331e-04 9.64875808e-04 9.77898714e-04 9.91097390e-04 1.00447421e-03 + 1.01803157e-03 1.03177192e-03 1.04569772e-03 1.05981148e-03 1.07411573e-03 + 1.08861304e-03 1.10330603e-03 1.11819732e-03 1.13328960e-03 1.14858559e-03 + 1.16408802e-03 1.17979969e-03 1.19572342e-03 1.21186207e-03 1.22821854e-03 + 1.24479578e-03 1.26159676e-03 1.27862450e-03 1.29588206e-03 1.31337255e-03 + 1.33109911e-03 1.34906492e-03 1.36727322e-03 1.38572727e-03 1.40443040e-03 + 1.42338596e-03 1.44259737e-03 1.46206807e-03 1.48180157e-03 1.50180141e-03 + 1.52207119e-03 1.54261455e-03 1.56343518e-03 1.58453683e-03 1.60592328e-03 + 1.62759839e-03 1.64956605e-03 1.67183020e-03 1.69439485e-03 1.71726406e-03 + 1.74044193e-03 1.76393264e-03 1.78774039e-03 1.81186948e-03 1.83632424e-03 + 1.86110907e-03 1.88622841e-03 1.91168679e-03 1.93748878e-03 1.96363902e-03 + 1.99014221e-03 2.01700311e-03 2.04422656e-03 2.07181743e-03 2.09978070e-03 + 2.12812139e-03 2.15684460e-03 2.18595548e-03 2.21545927e-03 2.24536127e-03 + 2.27566685e-03 2.30638148e-03 2.33751065e-03 2.36905998e-03 2.40103512e-03 + 2.43344184e-03 2.46628594e-03 2.49957335e-03 2.53331003e-03 2.56750205e-03 + 2.60215557e-03 2.63727680e-03 2.67287206e-03 2.70894775e-03 2.74551035e-03 + 2.78256644e-03 2.82012268e-03 2.85818580e-03 2.89676267e-03 2.93586021e-03 + 2.97548544e-03 3.01564550e-03 3.05634759e-03 3.09759904e-03 3.13940726e-03 + 3.18177977e-03 3.22472418e-03 3.26824820e-03 3.31235967e-03 3.35706651e-03 + 3.40237675e-03 3.44829855e-03 3.49484016e-03 3.54200993e-03 3.58981635e-03 + 3.63826802e-03 3.68737364e-03 3.73714203e-03 3.78758215e-03 3.83870305e-03 + 3.89051394e-03 3.94302411e-03 3.99624301e-03 4.05018021e-03 4.10484540e-03 + 4.16024840e-03 4.21639917e-03 4.27330781e-03 4.33098454e-03 4.38943974e-03 + 4.44868390e-03 4.50872768e-03 4.56958187e-03 4.63125741e-03 4.69376538e-03 + 4.75711702e-03 4.82132372e-03 4.88639701e-03 4.95234859e-03 5.01919032e-03 + 5.08693421e-03 5.15559244e-03 5.22517735e-03 5.29570145e-03 5.36717740e-03 + 5.43961807e-03 5.51303646e-03 5.58744578e-03 5.66285941e-03 5.73929089e-03 + 5.81675396e-03 5.89526255e-03 5.97483077e-03 6.05547291e-03 6.13720349e-03 + 6.22003718e-03 6.30398887e-03 6.38907366e-03 6.47530683e-03 6.56270389e-03 + 6.65128055e-03 6.74105273e-03 6.83203656e-03 6.92424839e-03 7.01770481e-03 + 7.11242260e-03 7.20841880e-03 7.30571066e-03 7.40431566e-03 7.50425153e-03 + 7.60553623e-03 7.70818798e-03 7.81222521e-03 7.91766662e-03 8.02453118e-03 + 8.13283809e-03 8.24260681e-03 8.35385708e-03 8.46660889e-03 8.58088250e-03 + 8.69669847e-03 8.81407760e-03 8.93304100e-03 9.05361004e-03 9.17580640e-03 + 9.29965204e-03 9.42516922e-03 9.55238051e-03 9.68130876e-03 9.81197715e-03 + 9.94440917e-03 1.00786286e-02 1.02146596e-02 1.03525267e-02 1.04922545e-02 + 1.06338682e-02 1.07773932e-02 1.09228555e-02 1.10702810e-02 1.12196963e-02 + 1.13711283e-02 1.15246041e-02 1.16801514e-02 1.18377981e-02 1.19975726e-02 + 1.21595036e-02 1.23236201e-02 1.24899517e-02 1.26585283e-02 1.28293801e-02 + 1.30025380e-02 1.31780329e-02 1.33558965e-02 1.35361607e-02 1.37188580e-02 + 1.39040211e-02 1.40916833e-02 1.42818784e-02 1.44746406e-02 1.46700045e-02 + 1.48680052e-02 1.50686783e-02 1.52720599e-02 1.54781865e-02 1.56870952e-02 + 1.58988236e-02 1.61134096e-02 1.63308919e-02 1.65513096e-02 1.67747022e-02 + 1.70011100e-02 1.72305736e-02 1.74631342e-02 1.76988337e-02 1.79377144e-02 + 1.81798193e-02 1.84251919e-02 1.86738763e-02 1.89259172e-02 1.91813598e-02 + 1.94402502e-02 1.97026348e-02 1.99685608e-02 2.02380760e-02 2.05112288e-02 + 2.07880684e-02 2.10686444e-02 2.13530074e-02 2.16412084e-02 2.19332993e-02 + 2.22293325e-02 2.25293613e-02 2.28334396e-02 2.31416219e-02 2.34539639e-02 + 2.37705215e-02 2.40913516e-02 2.44165120e-02 2.47460611e-02 2.50800581e-02 + 2.54185630e-02 2.57616368e-02 2.61093410e-02 2.64617381e-02 2.68188916e-02 + 2.71808655e-02 2.75477250e-02 2.79195360e-02 2.82963653e-02 2.86782807e-02 + 2.90653508e-02 2.94576451e-02 2.98552342e-02 3.02581896e-02 3.06665837e-02 + 3.10804898e-02 3.14999825e-02 3.19251370e-02 3.23560298e-02 3.27927384e-02 + 3.32353412e-02 3.36839178e-02 3.41385488e-02 3.45993160e-02 3.50663021e-02 + 3.55395912e-02 3.60192682e-02 3.65054194e-02 3.69981322e-02 3.74974951e-02 + 3.80035979e-02 3.85165315e-02 3.90363882e-02 3.95632614e-02 4.00972458e-02 + 4.06384374e-02 4.11869334e-02 4.17428325e-02 4.23062345e-02 4.28772407e-02 + 4.34559538e-02 4.40424778e-02 4.46369181e-02 4.52393815e-02 4.58499764e-02 + 4.64688124e-02 4.70960009e-02 4.77316545e-02 4.83758875e-02 4.90288157e-02 + 4.96905564e-02 5.03612287e-02 5.10409530e-02 5.17298515e-02 5.24280481e-02 + 5.31356682e-02 5.38528390e-02 5.45796895e-02 5.53163503e-02 5.60629537e-02 + 5.68196341e-02 5.75865273e-02 5.83637713e-02 5.91515058e-02 5.99498722e-02 + 6.07590142e-02 6.15790772e-02 6.24102085e-02 6.32525576e-02 6.41062759e-02 + 6.49715168e-02 6.58484358e-02 6.67371905e-02 6.76379408e-02 6.85508485e-02 + 6.94760777e-02 7.04137946e-02 7.13641679e-02 7.23273684e-02 7.33035692e-02 + 7.42929457e-02 7.52956758e-02 7.63119398e-02 7.73419202e-02 7.83858022e-02 + 7.94437736e-02 8.05160243e-02 8.16027471e-02 8.27041375e-02 8.38203932e-02 + 8.49517151e-02 8.60983064e-02 8.72603732e-02 8.84381243e-02 8.96317716e-02 + 9.08415295e-02 9.20676154e-02 9.33102498e-02 9.45696561e-02 9.58460605e-02 + 9.71396924e-02 9.84507846e-02 9.97795725e-02 1.01126295e-01 1.02491194e-01 + 1.03874515e-01 1.05276507e-01 1.06697422e-01 1.08137514e-01 1.09597044e-01 + 1.11076272e-01 1.12575466e-01 1.14094895e-01 1.15634831e-01 1.17195551e-01 + 1.18777337e-01 1.20380472e-01 1.22005244e-01 1.23651946e-01 1.25320873e-01 + 1.27012326e-01 1.28726608e-01 1.30464028e-01 1.32224898e-01 1.34009535e-01 + 1.35818258e-01 1.37651394e-01 1.39509271e-01 1.41392225e-01 1.43300592e-01 + 1.45234717e-01 1.47194946e-01 1.49181633e-01 1.51195134e-01 1.53235811e-01 + 1.55304031e-01 1.57400166e-01 1.59524592e-01 1.61677692e-01 1.63859852e-01 + 1.66071465e-01 1.68312927e-01 1.70584643e-01 1.72887020e-01 1.75220472e-01 + 1.77585418e-01 1.79982284e-01 1.82411501e-01 1.84873504e-01 1.87368738e-01 + 1.89897649e-01 1.92460693e-01 1.95058331e-01 1.97691028e-01 2.00359259e-01 + 2.03063503e-01 2.05804247e-01 2.08581982e-01 2.11397208e-01 2.14250431e-01 + 2.17142164e-01 2.20072926e-01 2.23043245e-01 2.26053655e-01 2.29104696e-01 + 2.32196916e-01 2.35330873e-01 2.38507128e-01 2.41726253e-01 2.44988826e-01 + 2.48295435e-01 2.51646672e-01 2.55043141e-01 2.58485452e-01 2.61974224e-01 + 2.65510084e-01 2.69093668e-01 2.72725618e-01 2.76406590e-01 2.80137243e-01 + 2.83918248e-01 2.87750286e-01 2.91634045e-01 2.95570223e-01 2.99559527e-01 + 3.03602675e-01 3.07700393e-01 3.11853418e-01 3.16062496e-01 3.20328384e-01 + 3.24651848e-01 3.29033667e-01 3.33474626e-01 3.37975525e-01 3.42537173e-01 + 3.47160389e-01 3.51846004e-01 3.56594862e-01 3.61407814e-01 3.66285727e-01 + 3.71229476e-01 3.76239952e-01 3.81318053e-01 3.86464694e-01 3.91680799e-01 + 3.96967305e-01 4.02325164e-01 4.07755337e-01 4.13258801e-01 4.18836545e-01 + 4.24489572e-01 4.30218897e-01 4.36025552e-01 4.41910578e-01 4.47875035e-01 + 4.53919993e-01 4.60046541e-01 4.66255778e-01 4.72548821e-01 4.78926801e-01 + 4.85390865e-01 4.91942174e-01 4.98581905e-01 5.05311254e-01 5.12131428e-01 + 5.19043653e-01 5.26049173e-01 5.33149246e-01 5.40345149e-01 5.47638174e-01 + 5.55029634e-01 5.62520856e-01 5.70113186e-01 5.77807990e-01 5.85606651e-01 + 5.93510570e-01 6.01521168e-01 6.09639885e-01 6.17868180e-01 6.26207532e-01 + 6.34659440e-01 6.43225423e-01 6.51907022e-01 6.60705795e-01 6.69623325e-01 + 6.78661216e-01 6.87821090e-01 6.97104595e-01 7.06513399e-01 7.16049193e-01 + 7.25713692e-01 7.35508633e-01 7.45435775e-01 7.55496904e-01 7.65693828e-01 + 7.76028379e-01 7.86502415e-01 7.97117820e-01 8.07876500e-01 8.18780390e-01 + 8.29831449e-01 8.41031665e-01 8.52383049e-01 8.63887643e-01 8.75547514e-01 + 8.87364758e-01 8.99341499e-01 9.11479889e-01 9.23782112e-01 9.36250377e-01 + 9.48886926e-01 9.61694030e-01 9.74673991e-01 9.87829143e-01 1.00116185e+00 + 1.01467451e+00 1.02836954e+00 1.04224942e+00 1.05631664e+00 1.07057372e+00 + 1.08502323e+00 1.09966776e+00 1.11450995e+00 1.12955246e+00 1.14479801e+00 + 1.16024932e+00 1.17590918e+00 1.19178039e+00 1.20786583e+00 1.22416836e+00 + 1.24069093e+00 1.25743651e+00 1.27440810e+00 1.29160876e+00 1.30904157e+00 + 1.32670967e+00 1.34461624e+00 1.36276449e+00 1.38115769e+00 1.39979915e+00 + 1.41869220e+00 1.43784026e+00 1.45724675e+00 1.47691518e+00 1.49684907e+00 + 1.51705200e+00 1.53752762e+00 1.55827959e+00 1.57931165e+00 1.60062758e+00 + 1.62223122e+00 1.64412643e+00 1.66631717e+00 1.68880741e+00 1.71160120e+00 + 1.73470264e+00 1.75811589e+00 1.78184513e+00 1.80589465e+00 1.83026877e+00 + 1.85497187e+00 1.88000838e+00 1.90538281e+00 1.93109971e+00 1.95716372e+00 + 1.98357951e+00 2.01035184e+00 2.03748551e+00 2.06498540e+00 2.09285646e+00 + 2.12110369e+00 2.14973218e+00 2.17874706e+00 2.20815356e+00 2.23795696e+00 + 2.26816261e+00 2.29877594e+00 2.32980247e+00 2.36124776e+00 2.39311746e+00 + 2.42541731e+00 2.45815311e+00 2.49133074e+00 2.52495618e+00 2.55903545e+00 + 2.59357469e+00 2.62858010e+00 2.66405799e+00 2.70001472e+00 2.73645675e+00 + 2.77339064e+00 2.81082303e+00 2.84876064e+00 2.88721029e+00 2.92617890e+00 + 2.96567347e+00 3.00570109e+00 3.04626897e+00 3.08738439e+00 3.12905474e+00 + 3.17128752e+00 3.21409031e+00 3.25747081e+00 3.30143682e+00 3.34599623e+00 + 3.39115706e+00 3.43692743e+00 3.48331556e+00 3.53032979e+00 3.57797856e+00 + 3.62627045e+00 3.67521414e+00 3.72481842e+00 3.77509220e+00 3.82604453e+00 + 3.87768456e+00 3.93002158e+00 3.98306499e+00 4.03682432e+00 4.09130924e+00 + 4.14652955e+00 4.20249516e+00 4.25921613e+00 4.31670267e+00 4.37496510e+00 + 4.43401390e+00 4.49385968e+00 4.55451320e+00 4.61598536e+00 4.67828720e+00 + 4.74142993e+00 4.80542490e+00 4.87028361e+00 4.93601771e+00 5.00263902e+00 + 5.07015952e+00 5.13859134e+00 5.20794679e+00 5.27823832e+00 5.34947858e+00 + 5.42168036e+00 5.49485665e+00 5.56902060e+00 5.64418554e+00 5.72036498e+00 + 5.79757261e+00 5.87582231e+00 5.95512814e+00 6.03550436e+00 6.11696542e+00 + 6.19952596e+00 6.28320081e+00 6.36800502e+00 6.45395384e+00 6.54106270e+00 + 6.62934727e+00 6.71882341e+00 6.80950721e+00 6.90141496e+00 6.99456320e+00 + 7.08896865e+00 7.18464829e+00 7.28161932e+00 7.37989916e+00 7.47950548e+00 + 7.58045619e+00 7.68276943e+00 7.78646358e+00 7.89155730e+00 7.99806946e+00 + 8.10601921e+00 8.21542596e+00 8.32630937e+00 8.43868936e+00 8.55258615e+00 + 8.66802020e+00 8.78501227e+00 8.90358337e+00 9.02375482e+00 9.14554822e+00 + 9.26898547e+00 9.39408875e+00 9.52088054e+00 9.64938364e+00 9.77962114e+00 + 9.91161645e+00 1.00453933e+01 1.01809757e+01 1.03183881e+01 1.04576552e+01 + 1.05988019e+01 1.07418537e+01 1.08868362e+01 1.10337756e+01 1.11826982e+01 + 1.13336308e+01 1.14866005e+01 1.16416349e+01 1.17987618e+01 1.19580094e+01 + 1.21194064e+01 1.22829817e+01 1.24487648e+01 1.26167855e+01 1.27870739e+01 + 1.29596608e+01 1.31345770e+01 1.33118541e+01 1.34915238e+01 1.36736186e+01 + 1.38581711e+01 1.40452145e+01 1.42347825e+01 1.44269090e+01 1.46216286e+01 + 1.48189764e+01 1.50189878e+01 1.52216987e+01 1.54271456e+01 1.56353654e+01 + 1.58463956e+01 1.60602740e+01 1.62770391e+01 1.64967299e+01 1.67193859e+01 + 1.69450471e+01 1.71737540e+01 1.74055477e+01 1.76404700e+01 1.78785630e+01 + 1.81198695e+01 1.83644330e+01 1.86122973e+01 1.88635070e+01 1.91181073e+01 + 1.93761439e+01 1.96376633e+01 1.99027124e+01 2.01713388e+01 2.04435909e+01 + 2.07195175e+01 2.09991684e+01 2.12825937e+01 2.15698443e+01 2.18609720e+01 + 2.21560290e+01 2.24550684e+01 2.27581439e+01 2.30653100e+01 2.33766220e+01 + 2.36921357e+01 2.40119079e+01 2.43359960e+01 2.46644584e+01 2.49973540e+01 + 2.53347427e+01 2.56766851e+01 2.60232427e+01 2.63744778e+01 2.67304535e+01 + 2.70912338e+01 2.74568835e+01 2.78274684e+01 2.82030551e+01 2.85837111e+01 + 2.89695047e+01 2.93605055e+01 2.97567835e+01 3.01584101e+01 3.05654574e+01 + 3.09779987e+01 3.13961080e+01 3.18198605e+01 3.22493324e+01 3.26846009e+01 + 3.31257442e+01 3.35728416e+01 3.40259734e+01 3.44852212e+01 3.49506674e+01 + 3.54223957e+01 3.59004909e+01 3.63850390e+01 3.68761270e+01 3.73738432e+01 + 3.78782771e+01 3.83895193e+01 3.89076617e+01 3.94327975e+01 3.99650210e+01 + 4.05044279e+01 4.10511152e+01 4.16051812e+01 4.21667253e+01 4.27358486e+01 + 4.33126533e+01 4.38972432e+01 4.44897232e+01 4.50902000e+01 4.56987813e+01 + 4.63155767e+01 4.69406969e+01 4.75742544e+01 4.82163629e+01 4.88671380e+01 + 4.95266966e+01 5.01951573e+01 5.08726401e+01 5.15592669e+01 5.22551611e+01 + 5.29604478e+01 5.36752537e+01 5.43997073e+01 5.51339389e+01 5.58780803e+01 + 5.66322655e+01 5.73966298e+01 5.81713107e+01 5.89564475e+01 5.97521813e+01 + 6.05586551e+01 6.13760138e+01 6.22044044e+01 6.30439758e+01 6.38948788e+01 + 6.47572664e+01 6.56312937e+01 6.65171177e+01 6.74148977e+01 6.83247950e+01 + 6.92469731e+01 7.01815978e+01 7.11288372e+01 7.20888614e+01 7.30618430e+01 + 7.40479570e+01 7.50473805e+01 7.60602932e+01 7.70868772e+01 7.81273169e+01 + 7.91817995e+01 8.02505143e+01 8.13336536e+01 8.24314120e+01 8.35439868e+01 + 8.46715780e+01 8.58143883e+01 8.69726230e+01 8.81464904e+01 8.93362015e+01 + 9.05419701e+01 9.17640129e+01 9.30025496e+01 9.42578028e+01 9.55299981e+01 + 9.68193642e+01 9.81261329e+01 9.94505390e+01 1.00792821e+02 1.02153219e+02 + 1.03531978e+02 1.04929347e+02 1.06345576e+02 1.07780920e+02 1.09235636e+02 + 1.10709987e+02 1.12204237e+02 1.13718655e+02 1.15253513e+02 1.16809087e+02 + 1.18385656e+02 1.19983505e+02 1.21602919e+02 1.23244191e+02 1.24907615e+02 + 1.26593490e+02 1.28302119e+02 1.30033810e+02 1.31788873e+02 1.33567624e+02 + 1.35370383e+02 1.37197474e+02 1.39049225e+02 1.40925969e+02 1.42828044e+02 + 1.44755790e+02 1.46709556e+02 1.48689691e+02 1.50696552e+02 1.52730500e+02 + 1.54791900e+02 1.56881123e+02 1.58998544e+02 1.61144543e+02 1.63319507e+02 + 1.65523827e+02 1.67757898e+02 1.70022122e+02 1.72316907e+02 1.74642664e+02 + 1.76999812e+02 1.79388774e+02 1.81809980e+02 1.84263865e+02 1.86750870e+02 + 1.89271442e+02 1.91826034e+02 1.94415106e+02 1.97039122e+02 1.99698554e+02 + 2.02393881e+02 2.05125586e+02 2.07894161e+02 2.10700104e+02 2.13543918e+02 + 2.16426115e+02 2.19347213e+02 2.22307737e+02 2.25308219e+02 2.28349199e+02 + 2.31431223e+02 2.34554845e+02 2.37720626e+02 2.40929135e+02 2.44180950e+02 + 2.47476655e+02 2.50816841e+02 2.54202110e+02 2.57633070e+02 2.61110337e+02 + 2.64634537e+02 2.68206303e+02 2.71826277e+02 2.75495110e+02 2.79213461e+02 + 2.82981999e+02 2.86801400e+02 2.90672351e+02 2.94595549e+02 2.98571698e+02 + 3.02601513e+02 3.06685719e+02 3.10825049e+02 3.15020247e+02 3.19272068e+02 + 3.23581275e+02 3.27948644e+02 3.32374959e+02 3.36861016e+02 3.41407621e+02 + 3.46015592e+02 3.50685756e+02 3.55418953e+02 3.60216034e+02 3.65077861e+02 + 3.70005309e+02 3.74999261e+02 3.80060618e+02 3.85190287e+02 3.90389191e+02 + 3.95658264e+02 4.00998455e+02 4.06410721e+02 4.11896037e+02 4.17455388e+02 + 4.23089773e+02 4.28800206e+02 4.34587712e+02 4.40453332e+02 4.46398120e+02 + 4.52423145e+02 4.58529489e+02 4.64718251e+02 4.70990542e+02 4.77347490e+02 + 4.83790238e+02 4.90319943e+02 4.96937780e+02 5.03644937e+02 5.10442621e+02 + 5.17332053e+02 5.24314471e+02 5.31391131e+02 5.38563305e+02 5.45832281e+02 + 5.53199366e+02 5.60665885e+02 5.68233179e+02 5.75902608e+02 5.83675552e+02 + 5.91553407e+02 5.99537589e+02 6.07629534e+02 6.15830695e+02 6.24142548e+02 + 6.32566585e+02 6.41104321e+02 6.49757290e+02 6.58527049e+02 6.67415173e+02 + 6.76423260e+02 6.85552928e+02 6.94805820e+02 7.04183597e+02 7.13687947e+02 + 7.23320576e+02 7.33083216e+02 7.42977623e+02 7.53005574e+02 7.63168873e+02 + 7.73469345e+02 7.83908842e+02 7.94489241e+02 8.05212443e+02 8.16080377e+02 + 8.27094994e+02 8.38258275e+02 8.49572227e+02 8.61038884e+02 8.72660305e+02 + 8.84438580e+02 8.96375827e+02 9.08474190e+02 9.20735844e+02 9.33162994e+02 + 9.45757873e+02 9.58522744e+02 9.71459903e+02 9.84571674e+02 9.97860414e+02 + 1.01132851e+03 1.02497839e+03 1.03881250e+03 1.05283333e+03 1.06704339e+03 + 1.08144525e+03 1.09604149e+03 1.11083474e+03 1.12582765e+03 1.14102292e+03 + 1.15642328e+03 1.17203149e+03 1.18785037e+03 1.20388276e+03 1.22013154e+03 + 1.23659963e+03 1.25328998e+03 1.27020561e+03 1.28734954e+03 1.30472487e+03 + 1.32233471e+03 1.34018223e+03 1.35827064e+03 1.37660318e+03 1.39518316e+03 + 1.41401392e+03 1.43309883e+03 1.45244133e+03 1.47204490e+03 1.49191305e+03 + 1.51204937e+03 1.53245746e+03 1.55314100e+03 1.57410371e+03 1.59534935e+03 + 1.61688174e+03 1.63870475e+03 1.66082231e+03 1.68323839e+03 1.70595702e+03 + 1.72898228e+03 1.75231832e+03 1.77596931e+03 1.79993953e+03 1.82423327e+03 + 1.84885490e+03 1.87380885e+03 1.89909961e+03 1.92473171e+03 1.95070977e+03 + 1.97703845e+03 2.00372249e+03 2.03076669e+03 2.05817590e+03 2.08595505e+03 + 2.11410913e+03 2.14264321e+03 2.17156242e+03 2.20087194e+03 2.23057706e+03 + 2.26068311e+03 2.29119549e+03 2.32211970e+03 2.35346130e+03 2.38522591e+03 + 2.41741924e+03 2.45004709e+03 2.48311532e+03 2.51662987e+03 2.55059676e+03 + 2.58502211e+03 2.61991209e+03 2.65527298e+03 2.69111114e+03 2.72743300e+03 + 2.76424510e+03 2.80155405e+03 2.83936656e+03 2.87768942e+03 2.91652952e+03 + 2.95589385e+03 2.99578948e+03 3.03622358e+03 3.07720342e+03 3.11873636e+03 + 3.16082987e+03 3.20349152e+03 3.24672896e+03 3.29054999e+03 3.33496246e+03 + 3.37997437e+03 3.42559381e+03 3.47182896e+03 3.51868816e+03 3.56617981e+03 + 3.61431245e+03 3.66309474e+03 3.71253544e+03 3.76264344e+03 3.81342775e+03 + 3.86489750e+03 3.91706193e+03 3.96993042e+03 4.02351247e+03 4.07781773e+03 + 4.13285593e+03 4.18863699e+03 4.24517093e+03 4.30246790e+03 4.36053820e+03 + 4.41939228e+03 4.47904072e+03 4.53949422e+03 4.60076367e+03 4.66286006e+03 + 4.72579458e+03 4.78957851e+03 4.85422334e+03 4.91974068e+03 4.98614230e+03 + 5.05344014e+03 5.12164630e+03 5.19077304e+03 5.26083278e+03 5.33183812e+03 + 5.40380181e+03 5.47673679e+03 5.55065618e+03 5.62557325e+03 5.70150148e+03 + 5.77845451e+03 5.85644617e+03 5.93549049e+03 6.01560166e+03 6.09679409e+03 + 6.17908238e+03 6.26248131e+03 6.34700587e+03 6.43267125e+03 6.51949286e+03 + 6.60748630e+03 6.69666739e+03 6.78705215e+03 6.87865683e+03 6.97149790e+03 + 7.06559204e+03 7.16095617e+03 7.25760742e+03 7.35556318e+03 7.45484104e+03 + 7.55545885e+03 7.65743470e+03 7.76078691e+03 7.86553407e+03 7.97169499e+03 + 8.07928877e+03 8.18833474e+03 8.29885250e+03 8.41086191e+03 8.52438311e+03 + 8.63943651e+03 8.75604278e+03 8.87422288e+03 8.99399805e+03 9.11538983e+03 + 9.23842003e+03 9.36311076e+03 9.48948445e+03 9.61756379e+03 9.74737182e+03 + 9.87893187e+03 1.00122676e+04 1.01474029e+04 1.02843622e+04 1.04231700e+04 + 1.05638512e+04 1.07064313e+04 1.08509357e+04 1.09973906e+04 1.11458221e+04 + 1.12962570e+04 1.14487223e+04 1.16032454e+04 1.17598541e+04 1.19185766e+04 + 1.20794414e+04 1.22424773e+04 1.24077137e+04 1.25751803e+04 1.27449072e+04 + 1.29169249e+04 1.30912644e+04 1.32679569e+04 1.34470341e+04 1.36285284e+04 + 1.38124724e+04 1.39988990e+04 1.41878418e+04 1.43793348e+04 1.45734123e+04 + 1.47701093e+04 1.49694611e+04 1.51715036e+04 1.53762730e+04 1.55838062e+04 + 1.57941404e+04 1.60073136e+04 1.62233639e+04 1.64423303e+04 1.66642520e+04 + 1.68891690e+04 1.71171217e+04 1.73481511e+04 1.75822987e+04 1.78196066e+04 + 1.80601174e+04 1.83038743e+04 1.85509213e+04 1.88013026e+04 1.90550634e+04 + 1.93122491e+04 1.95729061e+04 1.98370811e+04 2.01048217e+04 2.03761760e+04 + 2.06511928e+04 2.09299214e+04 2.12124121e+04 2.14987155e+04 2.17888832e+04 + 2.20829672e+04 2.23810205e+04 2.26830966e+04 2.29892498e+04 2.32995352e+04 + 2.36140084e+04 2.39327261e+04 2.42557456e+04 2.45831248e+04 2.49149226e+04 + 2.52511988e+04 2.55920136e+04 2.59374284e+04 2.62875052e+04 2.66423071e+04 + 2.70018976e+04 2.73663416e+04 2.77357045e+04 2.81100526e+04 2.84894533e+04 + 2.88739748e+04 2.92636861e+04 2.96586574e+04 3.00589596e+04 3.04646647e+04 + 3.08758455e+04 3.12925761e+04 3.17149312e+04 3.21429869e+04 3.25768200e+04 + 3.30165086e+04 3.34621316e+04 3.39137692e+04 3.43715026e+04 3.48354139e+04 + 3.53055867e+04 3.57821053e+04 3.62650555e+04 3.67545241e+04 3.72505991e+04 + 3.77533695e+04 3.82629258e+04 3.87793596e+04 3.93027637e+04 3.98332322e+04 + 4.03708604e+04 4.09157449e+04 4.14679838e+04 4.20276762e+04 4.25949227e+04 + 4.31698254e+04 4.37524875e+04 4.43430137e+04 4.49415103e+04 4.55480848e+04 + 4.61628462e+04 4.67859051e+04 4.74173733e+04 4.80573645e+04 4.87059936e+04 + 4.93633772e+04 5.00296335e+04 5.07048823e+04 5.13892449e+04 5.20828443e+04 + 5.27858052e+04 5.34982540e+04 5.42203186e+04 5.49521290e+04 5.56938166e+04 + 5.64455147e+04 5.72073585e+04 5.79794848e+04 5.87620325e+04 5.95551423e+04 + 6.03589566e+04 6.11736200e+04 6.19992789e+04 6.28360817e+04 6.36841788e+04 + 6.45437226e+04 6.54148677e+04 6.62977706e+04 6.71925901e+04 6.80994869e+04 + 6.90186240e+04 6.99501667e+04 7.08942825e+04 7.18511409e+04 7.28209140e+04 + 7.38037762e+04 7.47999040e+04 7.58094765e+04 7.68326752e+04 7.78696840e+04 + 7.89206893e+04 7.99858799e+04 8.10654474e+04 8.21595859e+04 8.32684918e+04 + 8.43923647e+04 8.55314064e+04 8.66858218e+04 8.78558182e+04 8.90416061e+04 + 9.02433986e+04 9.14614116e+04 9.26958640e+04 9.39469779e+04 9.52149780e+04 + 9.65000923e+04 9.78025518e+04 9.91225905e+04 1.00460446e+05 1.01816358e+05 + 1.03190571e+05 1.04583332e+05 1.05994890e+05 1.07425501e+05 1.08875420e+05 + 1.10344909e+05 1.11834232e+05 1.13343656e+05 1.14873452e+05 1.16423897e+05 + 1.17995267e+05 1.19587847e+05 1.21201921e+05 1.22837780e+05 1.24495719e+05 + 1.26176035e+05 1.27879030e+05 1.29605010e+05 1.31354286e+05 1.33127171e+05 + 1.34923985e+05 1.36745051e+05 1.38590696e+05 1.40461251e+05 1.42357053e+05 + 1.44278443e+05 1.46225766e+05 1.48199372e+05 1.50199615e+05 1.52226856e+05 + 1.54281458e+05 1.56363791e+05 1.58474229e+05 1.60613152e+05 1.62780944e+05 + 1.64977995e+05 1.67204699e+05 1.69461457e+05 1.71748674e+05 1.74066762e+05 + 1.76416136e+05 1.78797221e+05 1.81210443e+05 1.83656236e+05 1.86135040e+05 + 1.88647300e+05 1.91193468e+05 1.93774002e+05 1.96389365e+05 1.99040027e+05 + 2.01726466e+05 2.04449163e+05 2.07208608e+05 2.10005298e+05 2.12839735e+05 + 2.15712427e+05 2.18623893e+05 2.21574654e+05 2.24565242e+05 2.27596194e+05 + 2.30668054e+05 2.33781376e+05 2.36936717e+05 2.40134646e+05 2.43375738e+05 + 2.46660575e+05 2.49989747e+05 2.53363852e+05 2.56783498e+05 2.60249299e+05 + 2.63761877e+05 2.67321865e+05 2.70929902e+05 2.74586636e+05 2.78292726e+05 + 2.82048836e+05 2.85855642e+05 2.89713829e+05 2.93624090e+05 2.97587127e+05 + 3.01603654e+05 3.05674391e+05 3.09800071e+05 3.13981435e+05 3.18219235e+05 + 3.22514232e+05 3.26867199e+05 3.31278918e+05 3.35750182e+05 3.40281794e+05 + 3.44874569e+05 3.49529333e+05 3.54246922e+05 3.59028184e+05 3.63873979e+05 + 3.68785178e+05 3.73762662e+05 3.78807328e+05 3.83920082e+05 3.89101842e+05 + 3.94353540e+05 3.99676120e+05 4.05070540e+05 4.10537767e+05 4.16078785e+05 + 4.21694591e+05 4.27386193e+05 4.33154614e+05 4.39000892e+05 4.44926076e+05 + 4.50931233e+05 4.57017441e+05 4.63185794e+05 4.69437402e+05 4.75773387e+05 + 4.82194889e+05 4.88703062e+05 4.95299076e+05 5.01984116e+05 5.08759383e+05 + 5.15626097e+05 5.22585490e+05 5.29638814e+05 5.36787336e+05 5.44032342e+05 + 5.51375134e+05 5.58817031e+05 5.66359371e+05 5.74003510e+05 5.81750821e+05 + 5.89602698e+05 5.97560552e+05 6.05625813e+05 6.13799930e+05 6.22084373e+05 + 6.30480631e+05 6.38990213e+05 6.47614648e+05 6.56355488e+05 6.65214302e+05 + 6.74192684e+05 6.83292246e+05 6.92514626e+05 7.01861479e+05 7.11334487e+05 + 7.20935351e+05 7.30665798e+05 7.40527577e+05 7.50522460e+05 7.60652244e+05 + 7.70918749e+05 7.81323821e+05 7.91869330e+05 8.02557172e+05 8.13389267e+05 + 8.24367562e+05 8.35494032e+05 8.46770675e+05 8.58199518e+05 8.69782617e+05 + 8.81522052e+05 8.93419934e+05 9.05478402e+05 9.17699622e+05 9.30085792e+05 + 9.42639138e+05 9.55361916e+05 9.68256413e+05 9.81324947e+05 9.94569866e+05 + 1.00799355e+06 1.02159842e+06 1.03538691e+06 1.04936150e+06 1.06352471e+06 + 1.07787907e+06 1.09242718e+06 1.10717165e+06 1.12211511e+06 1.13726028e+06 + 1.15260985e+06 1.16816660e+06 1.18393331e+06 1.19991283e+06 1.21610803e+06 + 1.23252181e+06 1.24915713e+06 1.26601697e+06 1.28310437e+06 1.30042240e+06 + 1.31797417e+06 1.33576284e+06 1.35379160e+06 1.37206369e+06 1.39058240e+06 + 1.40935106e+06 1.42837304e+06 1.44765175e+06 1.46719067e+06 1.48699331e+06 + 1.50706323e+06 1.52740402e+06 1.54801936e+06 1.56891294e+06 1.59008852e+06 + 1.61154991e+06 1.63330096e+06 1.65534558e+06 1.67768774e+06 1.70033145e+06 + 1.72328078e+06 1.74653986e+06 1.77011287e+06 1.79400404e+06 1.81821767e+06 + 1.84275811e+06 1.86762977e+06 1.89283713e+06 1.91838471e+06 1.94427710e+06 + 1.51514411e-06 1.53559398e-06 1.55631985e-06 1.57732546e-06 1.59861459e-06 + 1.62019105e-06 1.64205873e-06 1.66422156e-06 1.68668352e-06 1.70944864e-06 + 1.73252103e-06 1.75590483e-06 1.77960423e-06 1.80362351e-06 1.82796697e-06 + 1.85263900e-06 1.87764402e-06 1.90298654e-06 1.92867110e-06 1.95470233e-06 + 1.98108490e-06 2.00782356e-06 2.03492310e-06 2.06238841e-06 2.09022442e-06 + 2.11843613e-06 2.14702861e-06 2.17600701e-06 2.20537652e-06 2.23514243e-06 + 2.26531010e-06 2.29588494e-06 2.32687244e-06 2.35827818e-06 2.39010781e-06 + 2.42236703e-06 2.45506166e-06 2.48819757e-06 2.52178072e-06 2.55581713e-06 + 2.59031293e-06 2.62527433e-06 2.66070759e-06 2.69661910e-06 2.73301530e-06 + 2.76990274e-06 2.80728805e-06 2.84517795e-06 2.88357925e-06 2.92249885e-06 + 2.96194375e-06 3.00192104e-06 3.04243789e-06 3.08350160e-06 3.12511955e-06 + 3.16729922e-06 3.21004818e-06 3.25337412e-06 3.29728483e-06 3.34178821e-06 + 3.38689225e-06 3.43260505e-06 3.47893484e-06 3.52588994e-06 3.57347879e-06 + 3.62170995e-06 3.67059208e-06 3.72013398e-06 3.77034453e-06 3.82123279e-06 + 3.87280787e-06 3.92507907e-06 3.97805577e-06 4.03174749e-06 4.08616389e-06 + 4.14131475e-06 4.19720997e-06 4.25385962e-06 4.31127386e-06 4.36946302e-06 + 4.42843756e-06 4.48820807e-06 4.54878531e-06 4.61018016e-06 4.67240365e-06 + 4.73546697e-06 4.79938146e-06 4.86415859e-06 4.92981003e-06 4.99634755e-06 + 5.06378314e-06 5.13212890e-06 5.20139712e-06 5.27160025e-06 5.34275092e-06 + 5.41486190e-06 5.48794616e-06 5.56201684e-06 5.63708725e-06 5.71317088e-06 + 5.79028141e-06 5.86843270e-06 5.94763880e-06 6.02791394e-06 6.10927255e-06 + 6.19172925e-06 6.27529887e-06 6.35999643e-06 6.44583715e-06 6.53283646e-06 + 6.62101000e-06 6.71037362e-06 6.80094337e-06 6.89273554e-06 6.98576663e-06 + 7.08005335e-06 7.17561266e-06 7.27246174e-06 7.37061798e-06 7.47009904e-06 + 7.57092278e-06 7.67310735e-06 7.77667110e-06 7.88163264e-06 7.98801085e-06 + 8.09582484e-06 8.20509399e-06 8.31583795e-06 8.42807662e-06 8.54183017e-06 + 8.65711905e-06 8.77396398e-06 8.89238596e-06 9.01240628e-06 9.13404651e-06 + 9.25732852e-06 9.38227446e-06 9.50890680e-06 9.63724829e-06 9.76732200e-06 + 9.89915131e-06 1.00327599e-05 1.01681718e-05 1.03054114e-05 1.04445033e-05 + 1.05854725e-05 1.07283444e-05 1.08731446e-05 1.10198992e-05 1.11686345e-05 + 1.13193773e-05 1.14721546e-05 1.16269940e-05 1.17839233e-05 1.19429706e-05 + 1.21041646e-05 1.22675342e-05 1.24331089e-05 1.26009182e-05 1.27709925e-05 + 1.29433623e-05 1.31180586e-05 1.32951127e-05 1.34745565e-05 1.36564223e-05 + 1.38407427e-05 1.40275509e-05 1.42168804e-05 1.44087653e-05 1.46032400e-05 + 1.48003396e-05 1.50000995e-05 1.52025554e-05 1.54077440e-05 1.56157019e-05 + 1.58264667e-05 1.60400761e-05 1.62565686e-05 1.64759832e-05 1.66983591e-05 + 1.69237365e-05 1.71521557e-05 1.73836580e-05 1.76182848e-05 1.78560784e-05 + 1.80970814e-05 1.83413373e-05 1.85888899e-05 1.88397837e-05 1.90940638e-05 + 1.93517759e-05 1.96129664e-05 1.98776821e-05 2.01459707e-05 2.04178804e-05 + 2.06934601e-05 2.09727592e-05 2.12558280e-05 2.15427174e-05 2.18334790e-05 + 2.21281649e-05 2.24268282e-05 2.27295226e-05 2.30363024e-05 2.33472229e-05 + 2.36623398e-05 2.39817098e-05 2.43053904e-05 2.46334396e-05 2.49659166e-05 + 2.53028810e-05 2.56443934e-05 2.59905151e-05 2.63413085e-05 2.66968365e-05 + 2.70571631e-05 2.74223530e-05 2.77924718e-05 2.81675861e-05 2.85477634e-05 + 2.89330718e-05 2.93235808e-05 2.97193605e-05 3.01204820e-05 3.05270174e-05 + 3.09390399e-05 3.13566233e-05 3.17798429e-05 3.22087747e-05 3.26434958e-05 + 3.30840843e-05 3.35306194e-05 3.39831813e-05 3.44418515e-05 3.49067124e-05 + 3.53778474e-05 3.58553414e-05 3.63392801e-05 3.68297505e-05 3.73268407e-05 + 3.78306402e-05 3.83412395e-05 3.88587303e-05 3.93832056e-05 3.99147598e-05 + 4.04534884e-05 4.09994881e-05 4.15528573e-05 4.21136952e-05 4.26821027e-05 + 4.32581821e-05 4.38420367e-05 4.44337716e-05 4.50334932e-05 4.56413092e-05 + 4.62573288e-05 4.68816629e-05 4.75144236e-05 4.81557246e-05 4.88056813e-05 + 4.94644104e-05 5.01320304e-05 5.08086612e-05 5.14944245e-05 5.21894435e-05 + 5.28938432e-05 5.36077501e-05 5.43312927e-05 5.50646008e-05 5.58078064e-05 + 5.65610431e-05 5.73244461e-05 5.80981528e-05 5.88823022e-05 5.96770352e-05 + 6.04824947e-05 6.12988255e-05 6.21261743e-05 6.29646898e-05 6.38145227e-05 + 6.46758258e-05 6.55487539e-05 6.64334638e-05 6.73301147e-05 6.82388677e-05 + 6.91598861e-05 7.00933354e-05 7.10393835e-05 7.19982003e-05 7.29699583e-05 + 7.39548321e-05 7.49529987e-05 7.59646376e-05 7.69899305e-05 7.80290617e-05 + 7.90822181e-05 8.01495889e-05 8.12313660e-05 8.23277438e-05 8.34389194e-05 + 8.45650925e-05 8.57064656e-05 8.68632437e-05 8.80356348e-05 8.92238497e-05 + 9.04281018e-05 9.16486078e-05 9.28855869e-05 9.41392614e-05 9.54098568e-05 + 9.66976013e-05 9.80027266e-05 9.93254670e-05 1.00666060e-04 1.02024748e-04 + 1.03401773e-04 1.04797385e-04 1.06211833e-04 1.07645371e-04 1.09098258e-04 + 1.10570755e-04 1.12063126e-04 1.13575639e-04 1.15108567e-04 1.16662184e-04 + 1.18236771e-04 1.19832610e-04 1.21449988e-04 1.23089195e-04 1.24750527e-04 + 1.26434282e-04 1.28140763e-04 1.29870275e-04 1.31623131e-04 1.33399646e-04 + 1.35200138e-04 1.37024931e-04 1.38874353e-04 1.40748737e-04 1.42648419e-04 + 1.44573741e-04 1.46525050e-04 1.48502695e-04 1.50507032e-04 1.52538422e-04 + 1.54597229e-04 1.56683824e-04 1.58798582e-04 1.60941883e-04 1.63114112e-04 + 1.65315659e-04 1.67546920e-04 1.69808297e-04 1.72100196e-04 1.74423028e-04 + 1.76777212e-04 1.79163169e-04 1.81581330e-04 1.84032129e-04 1.86516007e-04 + 1.89033409e-04 1.91584788e-04 1.94170603e-04 1.96791319e-04 1.99447407e-04 + 2.02139344e-04 2.04867614e-04 2.07632707e-04 2.10435121e-04 2.13275359e-04 + 2.16153931e-04 2.19071356e-04 2.22028156e-04 2.25024865e-04 2.28062020e-04 + 2.31140168e-04 2.34259861e-04 2.37421661e-04 2.40626136e-04 2.43873861e-04 + 2.47165421e-04 2.50501406e-04 2.53882418e-04 2.57309063e-04 2.60781957e-04 + 2.64301725e-04 2.67868999e-04 2.71484421e-04 2.75148639e-04 2.78862314e-04 + 2.82626112e-04 2.86440710e-04 2.90306793e-04 2.94225057e-04 2.98196206e-04 + 3.02220953e-04 3.06300022e-04 3.10434146e-04 3.14624068e-04 3.18870542e-04 + 3.23174330e-04 3.27536206e-04 3.31956954e-04 3.36437370e-04 3.40978257e-04 + 3.45580432e-04 3.50244723e-04 3.54971968e-04 3.59763016e-04 3.64618729e-04 + 3.69539979e-04 3.74527651e-04 3.79582642e-04 3.84705860e-04 3.89898226e-04 + 3.95160673e-04 4.00494147e-04 4.05899607e-04 4.11378024e-04 4.16930384e-04 + 4.22557683e-04 4.28260934e-04 4.34041162e-04 4.39899405e-04 4.45836717e-04 + 4.51854164e-04 4.57952829e-04 4.64133808e-04 4.70398211e-04 4.76747164e-04 + 4.83181809e-04 4.89703302e-04 4.96312816e-04 5.03011539e-04 5.09800673e-04 + 5.16681441e-04 5.23655078e-04 5.30722838e-04 5.37885992e-04 5.45145826e-04 + 5.52503646e-04 5.59960775e-04 5.67518552e-04 5.75178336e-04 5.82941505e-04 + 5.90809452e-04 5.98783593e-04 6.06865361e-04 6.15056208e-04 6.23357607e-04 + 6.31771050e-04 6.40298049e-04 6.48940137e-04 6.57698866e-04 6.66575812e-04 + 6.75572570e-04 6.84690757e-04 6.93932012e-04 7.03297995e-04 7.12790392e-04 + 7.22410907e-04 7.32161269e-04 7.42043233e-04 7.52058572e-04 7.62209089e-04 + 7.72496607e-04 7.82922975e-04 7.93490068e-04 8.04199785e-04 8.15054050e-04 + 8.26054815e-04 8.37204057e-04 8.48503780e-04 8.59956016e-04 8.71562821e-04 + 8.83326284e-04 8.95248518e-04 9.07331666e-04 9.19577900e-04 9.31989421e-04 + 9.44568460e-04 9.57317278e-04 9.70238166e-04 9.83333448e-04 9.96605476e-04 + 1.01005664e-03 1.02368935e-03 1.03750606e-03 1.05150925e-03 1.06570145e-03 + 1.08008519e-03 1.09466308e-03 1.10943772e-03 1.12441177e-03 1.13958793e-03 + 1.15496892e-03 1.17055751e-03 1.18635650e-03 1.20236872e-03 1.21859707e-03 + 1.23504444e-03 1.25171381e-03 1.26860816e-03 1.28573053e-03 1.30308401e-03 + 1.32067170e-03 1.33849678e-03 1.35656243e-03 1.37487193e-03 1.39342854e-03 + 1.41223561e-03 1.43129652e-03 1.45061470e-03 1.47019361e-03 1.49003678e-03 + 1.51014777e-03 1.53053020e-03 1.55118773e-03 1.57212407e-03 1.59334299e-03 + 1.61484830e-03 1.63664387e-03 1.65873361e-03 1.68112150e-03 1.70381156e-03 + 1.72680786e-03 1.75011455e-03 1.77373580e-03 1.79767587e-03 1.82193906e-03 + 1.84652973e-03 1.87145230e-03 1.89671124e-03 1.92231111e-03 1.94825650e-03 + 1.97455207e-03 2.00120255e-03 2.02821273e-03 2.05558747e-03 2.08333169e-03 + 2.11145037e-03 2.13994856e-03 2.16883140e-03 2.19810406e-03 2.22777182e-03 + 2.25784000e-03 2.28831402e-03 2.31919934e-03 2.35050151e-03 2.38222618e-03 + 2.41437903e-03 2.44696584e-03 2.47999248e-03 2.51346488e-03 2.54738906e-03 + 2.58177111e-03 2.61661721e-03 2.65193363e-03 2.68772672e-03 2.72400290e-03 + 2.76076870e-03 2.79803073e-03 2.83579568e-03 2.87407035e-03 2.91286161e-03 + 2.95217643e-03 2.99202189e-03 3.03240514e-03 3.07333344e-03 3.11481415e-03 + 3.15685472e-03 3.19946271e-03 3.24264578e-03 3.28641170e-03 3.33076832e-03 + 3.37572362e-03 3.42128568e-03 3.46746269e-03 3.51426295e-03 3.56169487e-03 + 3.60976698e-03 3.65848792e-03 3.70786645e-03 3.75791143e-03 3.80863187e-03 + 3.86003689e-03 3.91213571e-03 3.96493772e-03 4.01845239e-03 4.07268934e-03 + 4.12765833e-03 4.18336924e-03 4.23983207e-03 4.29705699e-03 4.35505426e-03 + 4.41383433e-03 4.47340774e-03 4.53378522e-03 4.59497761e-03 4.65699591e-03 + 4.71985128e-03 4.78355500e-03 4.84811852e-03 4.91355347e-03 4.97987158e-03 + 5.04708479e-03 5.11520517e-03 5.18424497e-03 5.25421660e-03 5.32513264e-03 + 5.39700583e-03 5.46984909e-03 5.54367551e-03 5.61849837e-03 5.69433110e-03 + 5.77118736e-03 5.84908093e-03 5.92802584e-03 6.00803626e-03 6.08912659e-03 + 6.17131138e-03 6.25460542e-03 6.33902369e-03 6.42458134e-03 6.51129376e-03 + 6.59917653e-03 6.68824546e-03 6.77851655e-03 6.87000603e-03 6.96273034e-03 + 7.05670614e-03 7.15195034e-03 7.24848004e-03 7.34631260e-03 7.44546561e-03 + 7.54595688e-03 7.64780448e-03 7.75102672e-03 7.85564214e-03 7.96166955e-03 + 8.06912802e-03 8.17803685e-03 8.28841561e-03 8.40028416e-03 8.51366260e-03 + 8.62857130e-03 8.74503092e-03 8.86306239e-03 8.98268694e-03 9.10392605e-03 + 9.22680152e-03 9.35133544e-03 9.47755019e-03 9.60546846e-03 9.73511324e-03 + 9.86650783e-03 9.99967585e-03 1.01346412e-02 1.02714283e-02 1.04100615e-02 + 1.05505658e-02 1.06929666e-02 1.08372893e-02 1.09835599e-02 1.11318048e-02 + 1.12820505e-02 1.14343240e-02 1.15886528e-02 1.17450646e-02 1.19035875e-02 + 1.20642499e-02 1.22270808e-02 1.23921094e-02 1.25593654e-02 1.27288789e-02 + 1.29006802e-02 1.30748004e-02 1.32512707e-02 1.34301228e-02 1.36113888e-02 + 1.37951014e-02 1.39812936e-02 1.41699987e-02 1.43612509e-02 1.45550843e-02 + 1.47515340e-02 1.49506351e-02 1.51524234e-02 1.53569353e-02 1.55642075e-02 + 1.57742773e-02 1.59871823e-02 1.62029609e-02 1.64216519e-02 1.66432945e-02 + 1.68679287e-02 1.70955947e-02 1.73263336e-02 1.75601867e-02 1.77971961e-02 + 1.80374044e-02 1.82808548e-02 1.85275911e-02 1.87776576e-02 1.90310992e-02 + 1.92879614e-02 1.95482906e-02 1.98121334e-02 2.00795373e-02 2.03505503e-02 + 2.06252212e-02 2.09035994e-02 2.11857347e-02 2.14716781e-02 2.17614808e-02 + 2.20551950e-02 2.23528734e-02 2.26545697e-02 2.29603378e-02 2.32702330e-02 + 2.35843107e-02 2.39026276e-02 2.42252408e-02 2.45522083e-02 2.48835889e-02 + 2.52194421e-02 2.55598283e-02 2.59048087e-02 2.62544453e-02 2.66088009e-02 + 2.69679393e-02 2.73319249e-02 2.77008232e-02 2.80747006e-02 2.84536242e-02 + 2.88376620e-02 2.92268833e-02 2.96213578e-02 3.00211566e-02 3.04263514e-02 + 3.08370152e-02 3.12532216e-02 3.16750456e-02 3.21025629e-02 3.25358505e-02 + 3.29749861e-02 3.34200487e-02 3.38711183e-02 3.43282759e-02 3.47916039e-02 + 3.52611853e-02 3.57371047e-02 3.62194475e-02 3.67083006e-02 3.72037516e-02 + 3.77058898e-02 3.82148053e-02 3.87305896e-02 3.92533354e-02 3.97831368e-02 + 4.03200888e-02 4.08642881e-02 4.14158324e-02 4.19748209e-02 4.25413541e-02 + 4.31155337e-02 4.36974630e-02 4.42872467e-02 4.48849906e-02 4.54908022e-02 + 4.61047905e-02 4.67270657e-02 4.73577398e-02 4.79969261e-02 4.86447395e-02 + 4.93012964e-02 4.99667148e-02 5.06411144e-02 5.13246163e-02 5.20173434e-02 + 5.27194202e-02 5.34309730e-02 5.41521296e-02 5.48830196e-02 5.56237744e-02 + 5.63745271e-02 5.71354128e-02 5.79065681e-02 5.86881317e-02 5.94802440e-02 + 6.02830474e-02 6.10966863e-02 6.19213068e-02 6.27570572e-02 6.36040877e-02 + 6.44625506e-02 6.53326001e-02 6.62143926e-02 6.71080867e-02 6.80138429e-02 + 6.89318241e-02 6.98621953e-02 7.08051237e-02 7.17607788e-02 7.27293323e-02 + 7.37109584e-02 7.47058334e-02 7.57141363e-02 7.67360482e-02 7.77717528e-02 + 7.88214363e-02 7.98852873e-02 8.09634971e-02 8.20562595e-02 8.31637709e-02 + 8.42862303e-02 8.54238396e-02 8.65768031e-02 8.77453282e-02 8.89296248e-02 + 9.01299058e-02 9.13463870e-02 9.25792870e-02 9.38288274e-02 9.50952329e-02 + 9.63787310e-02 9.76795524e-02 9.89979310e-02 1.00334104e-01 1.01688311e-01 + 1.03060795e-01 1.04451805e-01 1.05861588e-01 1.07290399e-01 1.08738495e-01 + 1.10206136e-01 1.11693586e-01 1.13201111e-01 1.14728984e-01 1.16277479e-01 + 1.17846873e-01 1.19437449e-01 1.21049494e-01 1.22683296e-01 1.24339149e-01 + 1.26017352e-01 1.27718205e-01 1.29442015e-01 1.31189090e-01 1.32959747e-01 + 1.34754301e-01 1.36573077e-01 1.38416400e-01 1.40284603e-01 1.42178021e-01 + 1.44096994e-01 1.46041868e-01 1.48012992e-01 1.50010719e-01 1.52035411e-01 + 1.54087429e-01 1.56167143e-01 1.58274927e-01 1.60411160e-01 1.62576226e-01 + 1.64770513e-01 1.66994417e-01 1.69248337e-01 1.71532678e-01 1.73847850e-01 + 1.76194270e-01 1.78572360e-01 1.80982547e-01 1.83425264e-01 1.85900951e-01 + 1.88410051e-01 1.90953017e-01 1.93530306e-01 1.96142380e-01 1.98789709e-01 + 2.01472769e-01 2.04192042e-01 2.06948017e-01 2.09741189e-01 2.12572061e-01 + 2.15441141e-01 2.18348945e-01 2.21295996e-01 2.24282822e-01 2.27309962e-01 + 2.30377959e-01 2.33487365e-01 2.36638739e-01 2.39832646e-01 2.43069662e-01 + 2.46350367e-01 2.49675352e-01 2.53045214e-01 2.56460560e-01 2.59922002e-01 + 2.63430163e-01 2.66985673e-01 2.70589173e-01 2.74241308e-01 2.77942737e-01 + 2.81694123e-01 2.85496142e-01 2.89349477e-01 2.93254820e-01 2.97212873e-01 + 3.01224348e-01 3.05289966e-01 3.09410457e-01 3.13586563e-01 3.17819033e-01 + 3.22108629e-01 3.26456121e-01 3.30862292e-01 3.35327932e-01 3.39853846e-01 + 3.44440845e-01 3.49089755e-01 3.53801411e-01 3.58576660e-01 3.63416361e-01 + 3.68321383e-01 3.73292608e-01 3.78330929e-01 3.83437252e-01 3.88612496e-01 + 3.93857590e-01 3.99173476e-01 4.04561111e-01 4.10021463e-01 4.15555512e-01 + 4.21164255e-01 4.26848699e-01 4.32609866e-01 4.38448791e-01 4.44366524e-01 + 4.50364128e-01 4.56442682e-01 4.62603278e-01 4.68847024e-01 4.75175041e-01 + 4.81588467e-01 4.88088455e-01 4.94676173e-01 5.01352806e-01 5.08119553e-01 + 5.14977630e-01 5.21928271e-01 5.28972724e-01 5.36112257e-01 5.43348151e-01 + 5.50681708e-01 5.58114246e-01 5.65647101e-01 5.73281626e-01 5.81019194e-01 + 5.88861197e-01 5.96809042e-01 6.04864160e-01 6.13027997e-01 6.21302021e-01 + 6.29687720e-01 6.38186600e-01 6.46800189e-01 6.55530036e-01 6.64377709e-01 + 6.73344799e-01 6.82432918e-01 6.91643699e-01 7.00978797e-01 7.10439891e-01 + 7.20028682e-01 7.29746892e-01 7.39596268e-01 7.49578581e-01 7.59695625e-01 + 7.69949219e-01 7.80341205e-01 7.90873452e-01 8.01547852e-01 8.12366325e-01 + 8.23330813e-01 8.34443290e-01 8.45705751e-01 8.57120221e-01 8.68688753e-01 + 8.80413424e-01 8.92296343e-01 9.04339645e-01 9.16545496e-01 9.28916089e-01 + 9.41453647e-01 9.54160425e-01 9.67038705e-01 9.80090803e-01 9.93319066e-01 + 1.00672587e+00 1.02031362e+00 1.03408477e+00 1.04804179e+00 1.06218719e+00 + 1.07652350e+00 1.09105331e+00 1.10577923e+00 1.12070391e+00 1.13583002e+00 + 1.15116029e+00 1.16669748e+00 1.18244437e+00 1.19840379e+00 1.21457862e+00 + 1.23097175e+00 1.24758615e+00 1.26442479e+00 1.28149070e+00 1.29878695e+00 + 1.31631665e+00 1.33408294e+00 1.35208903e+00 1.37033814e+00 1.38883356e+00 + 1.40757862e+00 1.42657667e+00 1.44583114e+00 1.46534549e+00 1.48512323e+00 + 1.50516790e+00 1.52548311e+00 1.54607252e+00 1.56693983e+00 1.58808878e+00 + 1.60952317e+00 1.63124687e+00 1.65326377e+00 1.67557783e+00 1.69819306e+00 + 1.72111354e+00 1.74434336e+00 1.76788672e+00 1.79174785e+00 1.81593103e+00 + 1.84044061e+00 1.86528099e+00 1.89045664e+00 1.91597209e+00 1.94183192e+00 + 1.96804078e+00 1.99460338e+00 2.02152449e+00 2.04880896e+00 2.07646169e+00 + 2.10448764e+00 2.13289186e+00 2.16167945e+00 2.19085559e+00 2.22042551e+00 + 2.25039454e+00 2.28076806e+00 2.31155154e+00 2.34275049e+00 2.37437054e+00 + 2.40641736e+00 2.43889672e+00 2.47181445e+00 2.50517647e+00 2.53898878e+00 + 2.57325745e+00 2.60798864e+00 2.64318860e+00 2.67886366e+00 2.71502022e+00 + 2.75166478e+00 2.78880393e+00 2.82644435e+00 2.86459281e+00 2.90325615e+00 + 2.94244133e+00 2.98215539e+00 3.02240547e+00 3.06319880e+00 3.10454272e+00 + 3.14644466e+00 3.18891215e+00 3.23195282e+00 3.27557441e+00 3.31978476e+00 + 3.36459182e+00 3.41000363e+00 3.45602837e+00 3.50267430e+00 3.54994981e+00 + 3.59786340e+00 3.64642368e+00 3.69563937e+00 3.74551933e+00 3.79607251e+00 + 3.84730801e+00 3.89923504e+00 3.95186292e+00 4.00520112e+00 4.05925923e+00 + 4.11404695e+00 4.16957414e+00 4.22585079e+00 4.28288699e+00 4.34069302e+00 + 4.39927925e+00 4.45865622e+00 4.51883459e+00 4.57982520e+00 4.64163899e+00 + 4.70428708e+00 4.76778073e+00 4.83213135e+00 4.89735051e+00 4.96344994e+00 + 5.03044150e+00 5.09833725e+00 5.16714939e+00 5.23689028e+00 5.30757246e+00 + 5.37920864e+00 5.45181169e+00 5.52539466e+00 5.59997078e+00 5.67555346e+00 + 5.75215627e+00 5.82979298e+00 5.90847756e+00 5.98822414e+00 6.06904706e+00 + 6.15096084e+00 6.23398021e+00 6.31812010e+00 6.40339561e+00 6.48982209e+00 + 6.57741507e+00 6.66619028e+00 6.75616369e+00 6.84735147e+00 6.93977001e+00 + 7.03343592e+00 7.12836604e+00 7.22457742e+00 7.32208737e+00 7.42091341e+00 + 7.52107330e+00 7.62258505e+00 7.72546690e+00 7.82973734e+00 7.93541512e+00 + 8.04251923e+00 8.15106892e+00 8.26108370e+00 8.37258335e+00 8.48558791e+00 + 8.60011769e+00 8.71619327e+00 8.83383553e+00 8.95306559e+00 9.07390491e+00 + 9.19637518e+00 9.32049844e+00 9.44629699e+00 9.57379343e+00 9.70301069e+00 + 9.83397200e+00 9.96670088e+00 1.01012212e+01 1.02375571e+01 1.03757332e+01 + 1.05157742e+01 1.06577054e+01 1.08015522e+01 1.09473405e+01 1.10950965e+01 + 1.12448467e+01 1.13966182e+01 1.15504380e+01 1.17063340e+01 1.18643341e+01 + 1.20244668e+01 1.21867607e+01 1.23512451e+01 1.25179496e+01 1.26869041e+01 + 1.28581389e+01 1.30316849e+01 1.32075732e+01 1.33858355e+01 1.35665038e+01 + 1.37496106e+01 1.39351888e+01 1.41232717e+01 1.43138932e+01 1.45070874e+01 + 1.47028892e+01 1.49013338e+01 1.51024567e+01 1.53062942e+01 1.55128829e+01 + 1.57222599e+01 1.59344629e+01 1.61495300e+01 1.63674998e+01 1.65884115e+01 + 1.68123049e+01 1.70392202e+01 1.72691982e+01 1.75022801e+01 1.77385080e+01 + 1.79779242e+01 1.82205718e+01 1.84664944e+01 1.87157363e+01 1.89683421e+01 + 1.92243574e+01 1.94838281e+01 1.97468008e+01 2.00133229e+01 2.02834423e+01 + 2.05572074e+01 2.08346676e+01 2.11158726e+01 2.14008730e+01 2.16897201e+01 + 2.19824657e+01 2.22791625e+01 2.25798639e+01 2.28846237e+01 2.31934970e+01 + 2.35065390e+01 2.38238062e+01 2.41453556e+01 2.44712449e+01 2.48015327e+01 + 2.51362784e+01 2.54755421e+01 2.58193849e+01 2.61678685e+01 2.65210556e+01 + 2.68790097e+01 2.72417950e+01 2.76094769e+01 2.79821213e+01 2.83597954e+01 + 2.87425669e+01 2.91305046e+01 2.95236783e+01 2.99221587e+01 3.03260174e+01 + 3.07353269e+01 3.11501609e+01 3.15705939e+01 3.19967014e+01 3.24285601e+01 + 3.28662476e+01 3.33098426e+01 3.37594247e+01 3.42150749e+01 3.46768749e+01 + 3.51449079e+01 3.56192579e+01 3.61000102e+01 3.65872511e+01 3.70810684e+01 + 3.75815507e+01 3.80887880e+01 3.86028714e+01 3.91238935e+01 3.96519477e+01 + 4.01871291e+01 4.07295339e+01 4.12792594e+01 4.18364046e+01 4.24010695e+01 + 4.29733558e+01 4.35533661e+01 4.41412049e+01 4.47369777e+01 4.53407916e+01 + 4.59527552e+01 4.65729784e+01 4.72015728e+01 4.78386513e+01 4.84843284e+01 + 4.91387202e+01 4.98019444e+01 5.04741200e+01 5.11553680e+01 5.18458108e+01 + 5.25455725e+01 5.32547788e+01 5.39735573e+01 5.47020371e+01 5.54403492e+01 + 5.61886263e+01 5.69470028e+01 5.77156152e+01 5.84946015e+01 5.92841017e+01 + 6.00842578e+01 6.08952136e+01 6.17171149e+01 6.25501093e+01 6.33943466e+01 + 6.42499786e+01 6.51171590e+01 6.59960438e+01 6.68867908e+01 6.77895602e+01 + 6.87045143e+01 6.96318175e+01 7.05716365e+01 7.15241402e+01 7.24894998e+01 + 7.34678888e+01 7.44594832e+01 7.54644611e+01 7.64830031e+01 7.75152924e+01 + 7.85615144e+01 7.96218573e+01 8.06965116e+01 8.17856705e+01 8.28895297e+01 + 8.40082878e+01 8.51421456e+01 8.62913071e+01 8.74559788e+01 8.86363701e+01 + 8.98326931e+01 9.10451628e+01 9.22739972e+01 9.35194171e+01 9.47816465e+01 + 9.60609121e+01 9.73574439e+01 9.86714750e+01 1.00003242e+02 1.01352983e+02 + 1.02720942e+02 1.04107364e+02 1.05512498e+02 1.06936598e+02 1.08379919e+02 + 1.09842720e+02 1.11325265e+02 1.12827819e+02 1.14350653e+02 1.15894041e+02 + 1.17458261e+02 1.19043592e+02 1.20650320e+02 1.22278735e+02 1.23929128e+02 + 1.25601797e+02 1.27297041e+02 1.29015166e+02 1.30756481e+02 1.32521298e+02 + 1.34309935e+02 1.36122713e+02 1.37959958e+02 1.39822000e+02 1.41709174e+02 + 1.43621820e+02 1.45560280e+02 1.47524903e+02 1.49516044e+02 1.51534058e+02 + 1.53579310e+02 1.55652166e+02 1.57752999e+02 1.59882188e+02 1.62040114e+02 + 1.64227166e+02 1.66443736e+02 1.68690223e+02 1.70967031e+02 1.73274569e+02 + 1.75613251e+02 1.77983499e+02 1.80385738e+02 1.82820400e+02 1.85287923e+02 + 1.87788750e+02 1.90323330e+02 1.92892119e+02 1.95495580e+02 1.98134179e+02 + 2.00808391e+02 2.03518697e+02 2.06265584e+02 2.09049546e+02 2.11871083e+02 + 2.14730702e+02 2.17628917e+02 2.20566249e+02 2.23543226e+02 2.26560384e+02 + 2.29618264e+02 2.32717416e+02 2.35858398e+02 2.39041773e+02 2.42268114e+02 + 2.45538001e+02 2.48852022e+02 2.52210771e+02 2.55614854e+02 2.59064882e+02 + 2.62561474e+02 2.66105260e+02 2.69696877e+02 2.73336969e+02 2.77026192e+02 + 2.80765207e+02 2.84554689e+02 2.88395317e+02 2.92287781e+02 2.96232783e+02 + 3.00231029e+02 3.04283240e+02 3.08390144e+02 3.12552478e+02 3.16770992e+02 + 3.21046442e+02 3.25379599e+02 3.29771239e+02 3.34222154e+02 3.38733142e+02 + 3.43305015e+02 3.47938595e+02 3.52634714e+02 3.57394216e+02 3.62217957e+02 + 3.67106805e+02 3.72061636e+02 3.77083343e+02 3.82172828e+02 3.87331006e+02 + 3.92558803e+02 3.97857160e+02 4.03227029e+02 4.08669374e+02 4.14185175e+02 + 4.19775422e+02 4.25441121e+02 4.31183290e+02 4.37002961e+02 4.42901179e+02 + 4.48879006e+02 4.54937515e+02 4.61077796e+02 4.67300952e+02 4.73608102e+02 + 4.80000379e+02 4.86478933e+02 4.93044927e+02 4.99699543e+02 5.06443976e+02 + 5.13279438e+02 5.20207158e+02 5.27228382e+02 5.34344371e+02 5.41556404e+02 + 5.48865778e+02 5.56273806e+02 5.63781821e+02 5.71391170e+02 5.79103223e+02 + 5.86919366e+02 5.94841002e+02 6.02869557e+02 6.11006473e+02 6.19253213e+02 + 6.27611259e+02 6.36082113e+02 6.44667298e+02 6.53368357e+02 6.62186855e+02 + 6.71124375e+02 6.80182525e+02 6.89362932e+02 6.98667247e+02 7.08097142e+02 + 7.17654312e+02 7.27340476e+02 7.37157373e+02 7.47106768e+02 7.57190450e+02 + 7.67410232e+02 7.77767949e+02 7.88265465e+02 7.98904665e+02 8.09687462e+02 + 8.20615795e+02 8.31691626e+02 8.42916949e+02 8.54293779e+02 8.65824161e+02 + 8.77510169e+02 8.89353903e+02 9.01357492e+02 9.13523092e+02 9.25852892e+02 + 9.38349106e+02 9.51013982e+02 9.63849795e+02 9.76858852e+02 9.90043493e+02 + 1.00340609e+03 1.01694903e+03 1.03067477e+03 1.04458576e+03 1.05868451e+03 + 1.07297355e+03 1.08745545e+03 1.10213281e+03 1.11700827e+03 1.13208451e+03 + 1.14736422e+03 1.16285017e+03 1.17854513e+03 1.19445193e+03 1.21057342e+03 + 1.22691250e+03 1.24347211e+03 1.26025522e+03 1.27726485e+03 1.29450407e+03 + 1.31197596e+03 1.32968367e+03 1.34763038e+03 1.36581931e+03 1.38425374e+03 + 1.40293698e+03 1.42187239e+03 1.44106337e+03 1.46051336e+03 1.48022588e+03 + 1.50020445e+03 1.52045267e+03 1.54097419e+03 1.56177268e+03 1.58285189e+03 + 1.60421560e+03 1.62586766e+03 1.64781196e+03 1.67005244e+03 1.69259310e+03 + 1.71543799e+03 1.73859121e+03 1.76205693e+03 1.78583938e+03 1.80994281e+03 + 1.83437156e+03 1.85913003e+03 1.88422266e+03 1.90965397e+03 1.93542853e+03 + 1.96155096e+03 1.98802597e+03 2.01485831e+03 2.04205280e+03 2.06961434e+03 + 2.09754787e+03 2.12585843e+03 2.15455109e+03 2.18363101e+03 2.21310343e+03 + 2.24297363e+03 2.27324699e+03 2.30392895e+03 2.33502503e+03 2.36654081e+03 + 2.39848195e+03 2.43085420e+03 2.46366339e+03 2.49691539e+03 2.53061620e+03 + 2.56477187e+03 2.59938853e+03 2.63447242e+03 2.67002983e+03 2.70606716e+03 + 2.74259088e+03 2.77960756e+03 2.81712386e+03 2.85514651e+03 2.89368236e+03 + 2.93273832e+03 2.97232142e+03 3.01243877e+03 3.05309759e+03 3.09430517e+03 + 3.13606893e+03 3.17839638e+03 3.22129512e+03 3.26477287e+03 3.30883743e+03 + 3.35349673e+03 3.39875879e+03 3.44463176e+03 3.49112387e+03 3.53824349e+03 + 3.58599907e+03 3.63439922e+03 3.68345262e+03 3.73316809e+03 3.78355457e+03 + 3.83462112e+03 3.88637691e+03 3.93883124e+03 3.99199356e+03 4.04587340e+03 + 4.10048045e+03 4.15582454e+03 4.21191561e+03 4.26876373e+03 4.32637913e+03 + 4.38477217e+03 4.44395333e+03 4.50393327e+03 4.56472275e+03 4.62633270e+03 + 4.68877420e+03 4.75205848e+03 4.81619690e+03 4.88120099e+03 4.94708244e+03 + 5.01385310e+03 5.08152495e+03 5.15011018e+03 5.21962109e+03 5.29007019e+03 + 5.36147014e+03 5.43383378e+03 5.50717410e+03 5.58150430e+03 5.65683773e+03 + 5.73318793e+03 5.81056864e+03 5.88899374e+03 5.96847735e+03 6.04903375e+03 + 6.13067741e+03 6.21342302e+03 6.29728544e+03 6.38227975e+03 6.46842123e+03 + 6.55572536e+03 6.64420783e+03 6.73388454e+03 6.82477162e+03 6.91688540e+03 + 7.01024244e+03 7.10485951e+03 7.20075363e+03 7.29794203e+03 7.39644218e+03 + 7.49627178e+03 7.59744879e+03 7.69999137e+03 7.80391797e+03 7.90924727e+03 + 8.01599819e+03 8.12418992e+03 8.23384192e+03 8.34497389e+03 8.45760580e+03 + 8.57175791e+03 8.68745072e+03 8.80470504e+03 8.92354193e+03 9.04398276e+03 + 9.16604918e+03 9.28976313e+03 9.41514684e+03 9.54222285e+03 9.67101401e+03 + 9.80154345e+03 9.93383465e+03 1.00679114e+04 1.02037977e+04 1.03415182e+04 + 1.04810974e+04 1.06225605e+04 1.07659329e+04 1.09112405e+04 1.10585092e+04 + 1.12077657e+04 1.13590366e+04 1.15123493e+04 1.16677312e+04 1.18252103e+04 + 1.19848148e+04 1.21465736e+04 1.23105156e+04 1.24766704e+04 1.26450677e+04 + 1.28157379e+04 1.29887116e+04 1.31640199e+04 1.33416944e+04 1.35217669e+04 + 1.37042699e+04 1.38892361e+04 1.40766987e+04 1.42666916e+04 1.44592488e+04 + 1.46544049e+04 1.48521951e+04 1.50526548e+04 1.52558201e+04 1.54617276e+04 + 1.56704142e+04 1.58819174e+04 1.60962752e+04 1.63135263e+04 1.65337095e+04 + 1.67568646e+04 1.69830316e+04 1.72122512e+04 1.74445645e+04 1.76800134e+04 + 1.79186401e+04 1.81604876e+04 1.84055993e+04 1.86540192e+04 1.89057921e+04 + 1.91609631e+04 1.94195781e+04 1.96816837e+04 1.99473269e+04 2.02165555e+04 + 2.04894179e+04 2.07659631e+04 2.10462408e+04 2.13303014e+04 2.16181960e+04 + 2.19099763e+04 2.22056947e+04 2.25054044e+04 2.28091593e+04 2.31170140e+04 + 2.34290238e+04 2.37452448e+04 2.40657338e+04 2.43905484e+04 2.47197470e+04 + 2.50533889e+04 2.53915339e+04 2.57342428e+04 2.60815773e+04 2.64335997e+04 + 2.67903734e+04 2.71519624e+04 2.75184318e+04 2.78898474e+04 2.82662760e+04 + 2.86477853e+04 2.90344437e+04 2.94263209e+04 2.98234873e+04 3.02260142e+04 + 3.06339740e+04 3.10474400e+04 3.14664865e+04 3.18911890e+04 3.23216236e+04 + 3.27578678e+04 3.31999999e+04 3.36480995e+04 3.41022471e+04 3.45625243e+04 + 3.50290139e+04 3.55017997e+04 3.59809666e+04 3.64666009e+04 3.69587897e+04 + 3.74576216e+04 3.79631862e+04 3.84755745e+04 3.89948784e+04 3.95211913e+04 + 4.00546079e+04 4.05952240e+04 4.11431368e+04 4.16984447e+04 4.22612476e+04 + 4.28316467e+04 4.34097444e+04 4.39956447e+04 4.45894528e+04 4.51912756e+04 + 4.58012212e+04 4.64193992e+04 4.70459207e+04 4.76808984e+04 4.83244463e+04 + 4.89766802e+04 4.96377173e+04 5.03076764e+04 5.09866779e+04 5.16748439e+04 + 5.23722980e+04 5.30791657e+04 5.37955739e+04 5.45216515e+04 5.52575289e+04 + 5.60033385e+04 5.67592142e+04 5.75252919e+04 5.83017094e+04 5.90886062e+04 + 5.98861237e+04 6.06944053e+04 6.15135963e+04 6.23438438e+04 6.31852972e+04 + 6.40381076e+04 6.49024284e+04 6.57784150e+04 6.66662247e+04 6.75660171e+04 + 6.84779540e+04 6.94021994e+04 7.03389192e+04 7.12882819e+04 7.22504581e+04 + 7.32256209e+04 7.42139453e+04 7.52156092e+04 7.62307924e+04 7.72596776e+04 + 7.83024497e+04 7.93592960e+04 8.04304065e+04 8.15159738e+04 8.26161929e+04 + 8.37312617e+04 8.48613806e+04 8.60067526e+04 8.71675837e+04 8.83440825e+04 + 8.95364604e+04 9.07449319e+04 9.19697141e+04 9.32110271e+04 9.44690942e+04 + 9.57441413e+04 9.70363977e+04 9.83460956e+04 9.96734705e+04 1.01018761e+05 + 1.02382209e+05 1.03764059e+05 1.05164560e+05 1.06583964e+05 1.08022525e+05 + 1.09480502e+05 1.10958158e+05 1.12455758e+05 1.13973570e+05 1.15511869e+05 + 1.17070930e+05 1.18651033e+05 1.20252464e+05 1.21875508e+05 1.23520459e+05 + 1.25187612e+05 1.26877266e+05 1.28589725e+05 1.30325298e+05 1.32084295e+05 + 1.33867034e+05 1.35673834e+05 1.37505020e+05 1.39360922e+05 1.41241873e+05 + 1.43148212e+05 1.45080280e+05 1.47038425e+05 1.49022999e+05 1.51034359e+05 + 1.53072866e+05 1.55138887e+05 1.57232793e+05 1.59354960e+05 1.61505770e+05 + 1.63685609e+05 1.65894870e+05 1.68133949e+05 1.70403249e+05 1.72703178e+05 + 1.75034149e+05 1.77396580e+05 1.79790898e+05 1.82217531e+05 1.84676917e+05 + 1.87169497e+05 1.89695719e+05 1.92256038e+05 1.94850913e+05 1.97480811e+05 + 2.00146205e+05 2.02847573e+05 2.05585402e+05 2.08360183e+05 2.11172416e+05 + 2.14022605e+05 2.16911263e+05 2.19838909e+05 2.22806069e+05 2.25813278e+05 + 2.28861074e+05 2.31950007e+05 2.35080630e+05 2.38253508e+05 2.41469210e+05 + 2.44728314e+05 2.48031406e+05 2.51379080e+05 2.54771938e+05 2.58210588e+05 + 2.61695651e+05 2.65227751e+05 2.68807523e+05 2.72435612e+05 2.76112669e+05 + 2.79839355e+05 2.83616340e+05 2.87444303e+05 2.91323932e+05 2.95255924e+05 + 2.99240986e+05 3.03279835e+05 3.07373196e+05 3.11521804e+05 3.15726407e+05 + 3.19987758e+05 3.24306626e+05 3.28683784e+05 3.33120022e+05 3.37616135e+05 + 3.42172931e+05 3.46791231e+05 3.51471864e+05 3.56215672e+05 3.61023506e+05 + 3.65896232e+05 3.70834725e+05 3.75839872e+05 3.80912574e+05 3.86053742e+05 + 3.91264300e+05 3.96545185e+05 4.01897346e+05 4.07321745e+05 4.12819356e+05 + 4.18391169e+05 4.24038185e+05 4.29761418e+05 4.35561898e+05 4.41440667e+05 + 4.47398781e+05 4.53437311e+05 4.59557344e+05 4.65759979e+05 4.72046330e+05 + 4.78417528e+05 4.84874718e+05 4.91419060e+05 4.98051732e+05 5.04773924e+05 + 5.11586846e+05 5.18491721e+05 5.25489792e+05 5.32582315e+05 5.39770566e+05 + 5.47055836e+05 5.54439436e+05 5.61922691e+05 5.69506949e+05 5.77193570e+05 + 5.84983938e+05 5.92879453e+05 6.00881532e+05 6.08991616e+05 6.17211161e+05 + 6.25541646e+05 6.33984566e+05 6.42541441e+05 6.51213808e+05 6.60003225e+05 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 6.88504212e-06 6.97796937e-06 7.07215085e-06 7.16760350e-06 7.26434448e-06 + 7.36239116e-06 7.46176118e-06 7.56247239e-06 7.66454290e-06 7.76799106e-06 + 7.87283545e-06 7.97909492e-06 8.08678857e-06 8.19593576e-06 8.30655611e-06 + 8.41866950e-06 8.53229609e-06 8.64745628e-06 8.76417079e-06 8.88246060e-06 + 9.00234696e-06 9.12385142e-06 9.24699583e-06 9.37180231e-06 9.49829330e-06 + 9.62649154e-06 9.75642007e-06 9.88810223e-06 1.00215617e-05 1.01568225e-05 + 1.02939089e-05 1.04328455e-05 1.05736574e-05 1.07163698e-05 1.08610084e-05 + 1.10075992e-05 1.11561685e-05 1.13067430e-05 1.14593498e-05 1.16140164e-05 + 1.17707705e-05 1.19296403e-05 1.20906544e-05 1.22538417e-05 1.24192315e-05 + 1.25868536e-05 1.27567380e-05 1.29289154e-05 1.31034167e-05 1.32802732e-05 + 1.34595167e-05 1.36411795e-05 1.38252941e-05 1.40118938e-05 1.42010120e-05 + 1.43926827e-05 1.45869404e-05 1.47838200e-05 1.49833569e-05 1.51855869e-05 + 1.53905464e-05 1.55982722e-05 1.58088017e-05 1.60221728e-05 1.62384236e-05 + 1.64575933e-05 1.66797210e-05 1.69048468e-05 1.71330111e-05 1.73642550e-05 + 1.75986199e-05 1.78361481e-05 1.80768821e-05 1.83208654e-05 1.85681416e-05 + 1.88187554e-05 1.90727517e-05 1.93301762e-05 1.95910751e-05 1.98554954e-05 + 2.01234845e-05 2.03950907e-05 2.06703628e-05 2.09493502e-05 2.12321030e-05 + 2.15186722e-05 2.18091092e-05 2.21034663e-05 2.24017962e-05 2.27041527e-05 + 2.30105901e-05 2.33211635e-05 2.36359287e-05 2.39549423e-05 2.42782616e-05 + 2.46059447e-05 2.49380505e-05 2.52746388e-05 2.56157700e-05 2.59615054e-05 + 2.63119073e-05 2.66670385e-05 2.70269628e-05 2.73917451e-05 2.77614508e-05 + 2.81361465e-05 2.85158994e-05 2.89007778e-05 2.92908509e-05 2.96861888e-05 + 3.00868626e-05 3.04929443e-05 3.09045068e-05 3.13216242e-05 3.17443714e-05 + 3.21728244e-05 3.26070603e-05 3.30471570e-05 3.34931937e-05 3.39452505e-05 + 3.44034088e-05 3.48677508e-05 3.53383600e-05 3.58153210e-05 3.62987195e-05 + 3.67886424e-05 3.72851779e-05 3.77884150e-05 3.82984444e-05 3.88153576e-05 + 3.93392475e-05 3.98702084e-05 4.04083357e-05 4.09537260e-05 4.15064775e-05 + 4.20666894e-05 4.26344625e-05 4.32098988e-05 4.37931018e-05 4.43841763e-05 + 4.49832284e-05 4.55903660e-05 4.62056981e-05 4.68293353e-05 4.74613897e-05 + 4.81019749e-05 4.87512062e-05 4.94092000e-05 5.00760748e-05 5.07519504e-05 + 5.14369483e-05 5.21311915e-05 5.28348050e-05 5.35479151e-05 5.42706500e-05 + 5.50031397e-05 5.57455158e-05 5.64979117e-05 5.72604626e-05 5.80333057e-05 + 5.88165799e-05 5.96104258e-05 6.04149863e-05 6.12304060e-05 6.20568313e-05 + 6.28944109e-05 6.37432952e-05 6.46036370e-05 6.54755907e-05 6.63593132e-05 + 6.72549633e-05 6.81627019e-05 6.90826923e-05 7.00150997e-05 7.09600919e-05 + 7.19178385e-05 7.28885119e-05 7.38722864e-05 7.48693389e-05 7.58798486e-05 + 7.69039971e-05 7.79419685e-05 7.89939494e-05 8.00601288e-05 8.11406985e-05 + 8.22358526e-05 8.33457879e-05 8.44707040e-05 8.56108031e-05 8.67662901e-05 + 8.79373726e-05 8.91242612e-05 9.03271693e-05 9.15463129e-05 9.27819113e-05 + 9.40341866e-05 9.53033637e-05 9.65896710e-05 9.78933395e-05 9.92146035e-05 + 1.00553701e-04 1.01910872e-04 1.03286360e-04 1.04680414e-04 1.06093283e-04 + 1.07525221e-04 1.08976487e-04 1.10447340e-04 1.11938045e-04 1.13448870e-04 + 1.14980087e-04 1.16531970e-04 1.18104799e-04 1.19698857e-04 1.21314430e-04 + 1.22951808e-04 1.24611285e-04 1.26293161e-04 1.27997736e-04 1.29725319e-04 + 1.31476218e-04 1.33250750e-04 1.35049232e-04 1.36871988e-04 1.38719346e-04 + 1.40591638e-04 1.42489200e-04 1.44412373e-04 1.46361504e-04 1.48336941e-04 + 1.50339042e-04 1.52368164e-04 1.54424673e-04 1.56508940e-04 1.58621337e-04 + 1.60762245e-04 1.62932050e-04 1.65131140e-04 1.67359911e-04 1.69618763e-04 + 1.71908104e-04 1.74228343e-04 1.76579899e-04 1.78963194e-04 1.81378656e-04 + 1.83826719e-04 1.86307824e-04 1.88822416e-04 1.91370948e-04 1.93953877e-04 + 1.96571668e-04 1.99224791e-04 2.01913723e-04 2.04638948e-04 2.07400955e-04 + 2.10200241e-04 2.13037308e-04 2.15912668e-04 2.18826836e-04 2.21780337e-04 + 2.24773701e-04 2.27807466e-04 2.30882178e-04 2.33998389e-04 2.37156660e-04 + 2.40357558e-04 2.43601658e-04 2.46889543e-04 2.50221806e-04 2.53599044e-04 + 2.57021864e-04 2.60490882e-04 2.64006721e-04 2.67570013e-04 2.71181399e-04 + 2.74841528e-04 2.78551058e-04 2.82310655e-04 2.86120995e-04 2.89982763e-04 + 2.93896654e-04 2.97863370e-04 3.01883625e-04 3.05958141e-04 3.10087651e-04 + 3.14272896e-04 3.18514630e-04 3.22813614e-04 3.27170622e-04 3.31586436e-04 + 3.36061850e-04 3.40597669e-04 3.45194708e-04 3.49853792e-04 3.54575761e-04 + 3.59361461e-04 3.64211754e-04 3.69127512e-04 3.74109617e-04 3.79158966e-04 + 3.84276465e-04 3.89463035e-04 3.94719609e-04 4.00047130e-04 4.05446556e-04 + 4.10918859e-04 4.16465021e-04 4.22086040e-04 4.27782925e-04 4.33556701e-04 + 4.39408405e-04 4.45339090e-04 4.51349821e-04 4.57441679e-04 4.63615758e-04 + 4.69873169e-04 4.76215036e-04 4.82642499e-04 4.89156713e-04 4.95758850e-04 + 5.02450095e-04 5.09231652e-04 5.16104740e-04 5.23070593e-04 5.30130464e-04 + 5.37285623e-04 5.44537354e-04 5.51886961e-04 5.59335767e-04 5.66885108e-04 + 5.74536343e-04 5.82290846e-04 5.90150012e-04 5.98115253e-04 6.06188000e-04 + 6.14369705e-04 6.22661838e-04 6.31065890e-04 6.39583371e-04 6.48215813e-04 + 6.56964766e-04 6.65831804e-04 6.74818520e-04 6.83926530e-04 6.93157470e-04 + 7.02513000e-04 7.11994801e-04 7.21604578e-04 7.31344057e-04 7.41214991e-04 + 7.51219152e-04 7.61358339e-04 7.71634374e-04 7.82049105e-04 7.92604403e-04 + 8.03302166e-04 8.14144316e-04 8.25132802e-04 8.36269600e-04 8.47556711e-04 + 8.58996164e-04 8.70590014e-04 8.82340347e-04 8.94249274e-04 9.06318935e-04 + 9.18551500e-04 9.30949168e-04 9.43514166e-04 9.56248755e-04 9.69155221e-04 + 9.82235886e-04 9.95493101e-04 1.00892925e-03 1.02254674e-03 1.03634803e-03 + 1.05033559e-03 1.06451195e-03 1.07887964e-03 1.09344125e-03 1.10819941e-03 + 1.12315675e-03 1.13831597e-03 1.15367979e-03 1.16925098e-03 1.18503233e-03 + 1.20102668e-03 1.21723691e-03 1.23366593e-03 1.25031669e-03 1.26719218e-03 + 1.28429545e-03 1.30162955e-03 1.31919761e-03 1.33700279e-03 1.35504829e-03 + 1.37333734e-03 1.39187324e-03 1.41065932e-03 1.42969896e-03 1.44899557e-03 + 1.46855263e-03 1.48837365e-03 1.50846219e-03 1.52882187e-03 1.54945635e-03 + 1.57036932e-03 1.59156456e-03 1.61304587e-03 1.63481711e-03 1.65688220e-03 + 1.67924510e-03 1.70190983e-03 1.72488046e-03 1.74816113e-03 1.77175602e-03 + 1.79566937e-03 1.81990548e-03 1.84446870e-03 1.86936345e-03 1.89459420e-03 + 1.92016550e-03 1.94608192e-03 1.97234815e-03 1.99896888e-03 2.02594892e-03 + 2.05329310e-03 2.08100635e-03 2.10909364e-03 2.13756003e-03 2.16641063e-03 + 2.19565062e-03 2.22528526e-03 2.25531988e-03 2.28575988e-03 2.31661073e-03 + 2.34787797e-03 2.37956722e-03 2.41168418e-03 2.44423463e-03 2.47722440e-03 + 2.51065944e-03 2.54454575e-03 2.57888943e-03 2.61369664e-03 2.64897364e-03 + 2.68472677e-03 2.72096247e-03 2.75768723e-03 2.79490767e-03 2.83263047e-03 + 2.87086242e-03 2.90961038e-03 2.94888132e-03 2.98868230e-03 3.02902048e-03 + 3.06990309e-03 3.11133750e-03 3.15333115e-03 3.19589159e-03 3.23902646e-03 + 3.28274352e-03 3.32705063e-03 3.37195576e-03 3.41746696e-03 3.46359243e-03 + 3.51034046e-03 3.55771944e-03 3.60573789e-03 3.65440445e-03 3.70372786e-03 + 3.75371699e-03 3.80438082e-03 3.85572845e-03 3.90776913e-03 3.96051220e-03 + 4.01396713e-03 4.06814355e-03 4.12305119e-03 4.17869991e-03 4.23509973e-03 + 4.29226077e-03 4.35019331e-03 4.40890776e-03 4.46841469e-03 4.52872477e-03 + 4.58984886e-03 4.65179794e-03 4.71458315e-03 4.77821577e-03 4.84270723e-03 + 4.90806913e-03 4.97431323e-03 5.04145141e-03 5.10949576e-03 5.17845851e-03 + 5.24835204e-03 5.31918892e-03 5.39098188e-03 5.46374384e-03 5.53748786e-03 + 5.61222720e-03 5.68797530e-03 5.76474576e-03 5.84255240e-03 5.92140919e-03 + 6.00133031e-03 6.08233012e-03 6.16442319e-03 6.24762426e-03 6.33194830e-03 + 6.41741045e-03 6.50402609e-03 6.59181077e-03 6.68078028e-03 6.77095062e-03 + 6.86233798e-03 6.95495879e-03 7.04882970e-03 7.14396759e-03 7.24038955e-03 + 7.33811291e-03 7.43715525e-03 7.53753436e-03 7.63926828e-03 7.74237530e-03 + 7.84687395e-03 7.95278302e-03 8.06012155e-03 8.16890882e-03 8.27916438e-03 + 8.39090807e-03 8.50415995e-03 8.61894040e-03 8.73527003e-03 8.85316976e-03 + 8.97266078e-03 9.09376457e-03 9.21650290e-03 9.34089782e-03 9.46697169e-03 + 9.59474718e-03 9.72424726e-03 9.85549519e-03 9.98851457e-03 1.01233293e-02 + 1.02599637e-02 1.03984421e-02 1.05387897e-02 1.06810315e-02 1.08251931e-02 + 1.09713005e-02 1.11193798e-02 1.12694578e-02 1.14215614e-02 1.15757180e-02 + 1.17319552e-02 1.18903011e-02 1.20507842e-02 1.22134334e-02 1.23782778e-02 + 1.25453471e-02 1.27146713e-02 1.28862810e-02 1.30602068e-02 1.32364801e-02 + 1.34151325e-02 1.35961963e-02 1.37797038e-02 1.39656881e-02 1.41541827e-02 + 1.43452214e-02 1.45388385e-02 1.47350688e-02 1.49339477e-02 1.51355108e-02 + 1.53397945e-02 1.55468353e-02 1.57566706e-02 1.59693380e-02 1.61848758e-02 + 1.64033226e-02 1.66247179e-02 1.68491013e-02 1.70765132e-02 1.73069945e-02 + 1.75405866e-02 1.77773315e-02 1.80172717e-02 1.82604504e-02 1.85069113e-02 + 1.87566986e-02 1.90098573e-02 1.92664329e-02 1.95264715e-02 1.97900198e-02 + 2.00571252e-02 2.03278358e-02 2.06022001e-02 2.08802675e-02 2.11620880e-02 + 2.14477122e-02 2.17371914e-02 2.20305778e-02 2.23279240e-02 2.26292834e-02 + 2.29347103e-02 2.32442596e-02 2.35579868e-02 2.38759484e-02 2.41982015e-02 + 2.45248040e-02 2.48558147e-02 2.51912931e-02 2.55312994e-02 2.58758947e-02 + 2.62251410e-02 2.65791011e-02 2.69378386e-02 2.73014180e-02 2.76699046e-02 + 2.80433646e-02 2.84218652e-02 2.88054745e-02 2.91942613e-02 2.95882955e-02 + 2.99876481e-02 3.03923906e-02 3.08025960e-02 3.12183379e-02 3.16396911e-02 + 3.20667312e-02 3.24995351e-02 3.29381806e-02 3.33827464e-02 3.38333125e-02 + 3.42899600e-02 3.47527707e-02 3.52218280e-02 3.56972162e-02 3.61790207e-02 + 3.66673281e-02 3.71622261e-02 3.76638038e-02 3.81721513e-02 3.86873599e-02 + 3.92095223e-02 3.97387323e-02 4.02750850e-02 4.08186768e-02 4.13696055e-02 + 4.19279701e-02 4.24938709e-02 4.30674097e-02 4.36486895e-02 4.42378148e-02 + 4.48348916e-02 4.54400270e-02 4.60533300e-02 4.66749107e-02 4.73048808e-02 + 4.79433537e-02 4.85904440e-02 4.92462681e-02 4.99109438e-02 5.05845906e-02 + 5.12673296e-02 5.19592835e-02 5.26605767e-02 5.33713353e-02 5.40916869e-02 + 5.48217611e-02 5.55616891e-02 5.63116039e-02 5.70716403e-02 5.78419349e-02 + 5.86226261e-02 5.94138543e-02 6.02157617e-02 6.10284924e-02 6.18521925e-02 + 6.26870100e-02 6.35330951e-02 6.43905998e-02 6.52596782e-02 6.61404865e-02 + 6.70331831e-02 6.79379283e-02 6.88548849e-02 6.97842177e-02 7.07260936e-02 + 7.16806820e-02 7.26481545e-02 7.36286849e-02 7.46224495e-02 7.56296269e-02 + 7.66503982e-02 7.76849468e-02 7.87334586e-02 7.97961222e-02 8.08731286e-02 + 8.19646713e-02 8.30709465e-02 8.41921531e-02 8.53284926e-02 8.64801692e-02 + 8.76473900e-02 8.88303647e-02 9.00293060e-02 9.12444294e-02 9.24759533e-02 + 9.37240991e-02 9.49890910e-02 9.62711565e-02 9.75705260e-02 9.88874331e-02 + 1.00222114e-01 1.01574810e-01 1.02945763e-01 1.04335219e-01 1.05743429e-01 + 1.07170646e-01 1.08617125e-01 1.10083128e-01 1.11568917e-01 1.13074760e-01 + 1.14600928e-01 1.16147694e-01 1.17715336e-01 1.19304138e-01 1.20914383e-01 + 1.22546361e-01 1.24200367e-01 1.25876696e-01 1.27575651e-01 1.29297536e-01 + 1.31042662e-01 1.32811342e-01 1.34603893e-01 1.36420639e-01 1.38261905e-01 + 1.40128022e-01 1.42019327e-01 1.43936158e-01 1.45878861e-01 1.47847785e-01 + 1.49843283e-01 1.51865714e-01 1.53915442e-01 1.55992835e-01 1.58098267e-01 + 1.60232115e-01 1.62394764e-01 1.64586603e-01 1.66808024e-01 1.69059428e-01 + 1.71341219e-01 1.73653807e-01 1.75997609e-01 1.78373044e-01 1.80780541e-01 + 1.83220532e-01 1.85693455e-01 1.88199755e-01 1.90739882e-01 1.93314294e-01 + 1.95923452e-01 1.98567827e-01 2.01247892e-01 2.03964130e-01 2.06717029e-01 + 2.09507084e-01 2.12334796e-01 2.15200673e-01 2.18105232e-01 2.21048993e-01 + 2.24032486e-01 2.27056247e-01 2.30120820e-01 2.33226755e-01 2.36374611e-01 + 2.39564954e-01 2.42798356e-01 2.46075400e-01 2.49396673e-01 2.52762774e-01 + 2.56174308e-01 2.59631886e-01 2.63136131e-01 2.66687674e-01 2.70287151e-01 + 2.73935210e-01 2.77632507e-01 2.81379706e-01 2.85177481e-01 2.89026515e-01 + 2.92927499e-01 2.96881135e-01 3.00888132e-01 3.04949212e-01 3.09065104e-01 + 3.13236549e-01 3.17464295e-01 3.21749103e-01 3.26091743e-01 3.30492995e-01 + 3.34953651e-01 3.39474513e-01 3.44056392e-01 3.48700113e-01 3.53406510e-01 + 3.58176430e-01 3.63010728e-01 3.67910276e-01 3.72875952e-01 3.77908650e-01 + 3.83009274e-01 3.88178741e-01 3.93417980e-01 3.98727933e-01 4.04109554e-01 + 4.09563811e-01 4.15091684e-01 4.20694167e-01 4.26372266e-01 4.32127002e-01 + 4.37959410e-01 4.43870538e-01 4.49861448e-01 4.55933217e-01 4.62086937e-01 + 4.68323713e-01 4.74644667e-01 4.81050935e-01 4.87543668e-01 4.94124034e-01 + 5.00793214e-01 5.07552408e-01 5.14402831e-01 5.21345713e-01 5.28382304e-01 + 5.35513867e-01 5.42741685e-01 5.50067057e-01 5.57491299e-01 5.65015746e-01 + 5.72641750e-01 5.80370682e-01 5.88203931e-01 5.96142905e-01 6.04189032e-01 + 6.12343757e-01 6.20608546e-01 6.28984885e-01 6.37474279e-01 6.46078254e-01 + 6.54798357e-01 6.63636155e-01 6.72593236e-01 6.81671211e-01 6.90871711e-01 + 7.00196390e-01 7.09646924e-01 7.19225012e-01 7.28932374e-01 7.38770757e-01 + 7.48741929e-01 7.58847681e-01 7.69089830e-01 7.79470217e-01 7.89990708e-01 + 8.00653193e-01 8.11459591e-01 8.22411841e-01 8.33511914e-01 8.44761805e-01 + 8.56163535e-01 8.67719154e-01 8.79430738e-01 8.91300394e-01 9.03330254e-01 + 9.15522481e-01 9.27879266e-01 9.40402831e-01 9.53095425e-01 9.65959331e-01 + 9.78996861e-01 9.92210359e-01 1.00560220e+00 1.01917479e+00 1.03293057e+00 + 1.04687200e+00 1.06100161e+00 1.07532192e+00 1.08983552e+00 1.10454500e+00 + 1.11945302e+00 1.13456225e+00 1.14987541e+00 1.16539525e+00 1.18112456e+00 + 1.19706617e+00 1.21322295e+00 1.22959779e+00 1.24619364e+00 1.26301349e+00 + 1.28006035e+00 1.29733729e+00 1.31484742e+00 1.33259389e+00 1.35057988e+00 + 1.36880862e+00 1.38728340e+00 1.40600753e+00 1.42498438e+00 1.44421736e+00 + 1.46370993e+00 1.48346558e+00 1.50348788e+00 1.52378042e+00 1.54434685e+00 + 1.56519086e+00 1.58631621e+00 1.60772668e+00 1.62942613e+00 1.65141846e+00 + 1.67370761e+00 1.69629760e+00 1.71919249e+00 1.74239639e+00 1.76591347e+00 + 1.78974797e+00 1.81390415e+00 1.83838637e+00 1.86319903e+00 1.88834658e+00 + 1.91383355e+00 1.93966452e+00 1.96584412e+00 1.99237707e+00 2.01926814e+00 + 2.04652215e+00 2.07414401e+00 2.10213869e+00 2.13051120e+00 2.15926666e+00 + 2.18841023e+00 2.21794715e+00 2.24788273e+00 2.27822235e+00 2.30897147e+00 + 2.34013560e+00 2.37172035e+00 2.40373141e+00 2.43617451e+00 2.46905550e+00 + 2.50238028e+00 2.53615485e+00 2.57038527e+00 2.60507770e+00 2.64023837e+00 + 2.67587361e+00 2.71198981e+00 2.74859347e+00 2.78569117e+00 2.82328958e+00 + 2.86139545e+00 2.90001564e+00 2.93915708e+00 2.97882681e+00 3.01903197e+00 + 3.05977977e+00 3.10107754e+00 3.14293271e+00 3.18535280e+00 3.22834543e+00 + 3.27191833e+00 3.31607934e+00 3.36083638e+00 3.40619751e+00 3.45217088e+00 + 3.49876474e+00 3.54598749e+00 3.59384760e+00 3.64235367e+00 3.69151443e+00 + 3.74133872e+00 3.79183548e+00 3.84301379e+00 3.89488285e+00 3.94745200e+00 + 4.00073066e+00 4.05472843e+00 4.10945500e+00 4.16492022e+00 4.22113405e+00 + 4.27810659e+00 4.33584809e+00 4.39436893e+00 4.45367962e+00 4.51379083e+00 + 4.57471336e+00 4.63645816e+00 4.69903632e+00 4.76245910e+00 4.82673790e+00 + 4.89188427e+00 4.95790991e+00 5.02482670e+00 5.09264667e+00 5.16138200e+00 + 5.23104505e+00 5.30164834e+00 5.37320456e+00 5.44572658e+00 5.51922742e+00 + 5.59372030e+00 5.66921861e+00 5.74573592e+00 5.82328598e+00 5.90188273e+00 + 5.98154030e+00 6.06227301e+00 6.14409536e+00 6.22702207e+00 6.31106804e+00 + 6.39624837e+00 6.48257839e+00 6.57007359e+00 6.65874972e+00 6.74862270e+00 + 6.83970870e+00 6.93202409e+00 7.02558545e+00 7.12040961e+00 7.21651361e+00 + 7.31391472e+00 7.41263046e+00 7.51267855e+00 7.61407700e+00 7.71684401e+00 + 7.82099807e+00 7.92655790e+00 8.03354246e+00 8.14197099e+00 8.25186298e+00 + 8.36323818e+00 8.47611660e+00 8.59051855e+00 8.70646457e+00 8.82397552e+00 + 8.94307250e+00 9.06377694e+00 9.18611052e+00 9.31009524e+00 9.43575337e+00 + 9.56310751e+00 9.69218054e+00 9.82299567e+00 9.95557641e+00 1.00899466e+01 + 1.02261304e+01 1.03641522e+01 1.05040369e+01 1.06458096e+01 1.07894959e+01 + 1.09351215e+01 1.10827125e+01 1.12322956e+01 1.13838977e+01 1.15375459e+01 + 1.16932678e+01 1.18510916e+01 1.20110455e+01 1.21731583e+01 1.23374591e+01 + 1.25039775e+01 1.26727434e+01 1.28437871e+01 1.30171394e+01 1.31928314e+01 + 1.33708948e+01 1.35513614e+01 1.37342638e+01 1.39196348e+01 1.41075078e+01 + 1.42979165e+01 1.44908951e+01 1.46864784e+01 1.48847015e+01 1.50855999e+01 + 1.52892099e+01 1.54955680e+01 1.57047113e+01 1.59166774e+01 1.61315045e+01 + 1.63492310e+01 1.65698962e+01 1.67935397e+01 1.70202017e+01 1.72499229e+01 + 1.74827447e+01 1.77187089e+01 1.79578579e+01 1.82002347e+01 1.84458828e+01 + 1.86948465e+01 1.89471703e+01 1.92028999e+01 1.94620809e+01 1.97247602e+01 + 1.99909848e+01 2.02608026e+01 2.05342622e+01 2.08114127e+01 2.10923038e+01 + 2.13769861e+01 2.16655108e+01 2.19579297e+01 2.22542953e+01 2.25546610e+01 + 2.28590807e+01 2.31676092e+01 2.34803019e+01 2.37972150e+01 2.41184054e+01 + 2.44439309e+01 2.47738501e+01 2.51082222e+01 2.54471072e+01 2.57905662e+01 + 2.61386609e+01 2.64914538e+01 2.68490083e+01 2.72113887e+01 2.75786602e+01 + 2.79508887e+01 2.83281412e+01 2.87104854e+01 2.90979902e+01 2.94907251e+01 + 2.98887607e+01 3.02921686e+01 3.07010212e+01 3.11153922e+01 3.15353559e+01 + 3.19609878e+01 3.23923645e+01 3.28295635e+01 3.32726633e+01 3.37217437e+01 + 3.41768853e+01 3.46381699e+01 3.51056804e+01 3.55795009e+01 3.60597166e+01 + 3.65464138e+01 3.70396798e+01 3.75396035e+01 3.80462746e+01 3.85597843e+01 + 3.90802248e+01 3.96076897e+01 4.01422737e+01 4.06840730e+01 4.12331850e+01 + 4.17897083e+01 4.23537430e+01 4.29253905e+01 4.35047534e+01 4.40919360e+01 + 4.46870439e+01 4.52901838e+01 4.59014643e+01 4.65209953e+01 4.71488881e+01 + 4.77852555e+01 4.84302120e+01 4.90838734e+01 4.97463572e+01 5.04177826e+01 + 5.10982703e+01 5.17879424e+01 5.24869230e+01 5.31953378e+01 5.39133140e+01 + 5.46409807e+01 5.53784687e+01 5.61259106e+01 5.68834406e+01 5.76511951e+01 + 5.84293119e+01 5.92179309e+01 6.00171939e+01 6.08272446e+01 6.16482284e+01 + 6.24802931e+01 6.33235881e+01 6.41782651e+01 6.50444776e+01 6.59223814e+01 + 6.68121342e+01 6.77138960e+01 6.86278288e+01 6.95540970e+01 7.04928670e+01 + 7.14443075e+01 7.24085896e+01 7.33858866e+01 7.43763742e+01 7.53802303e+01 + 7.63976355e+01 7.74287726e+01 7.84738269e+01 7.95329863e+01 8.06064411e+01 + 8.16943843e+01 8.27970114e+01 8.39145207e+01 8.50471130e+01 8.61949919e+01 + 8.73583636e+01 8.85374374e+01 8.97324251e+01 9.09435415e+01 9.21710043e+01 + 9.34150341e+01 9.46758546e+01 9.59536924e+01 9.72487771e+01 9.85613415e+01 + 9.98916216e+01 1.01239856e+02 1.02606288e+02 1.03991163e+02 1.05394729e+02 + 1.06817239e+02 1.08258949e+02 1.09720118e+02 1.11201007e+02 1.12701885e+02 + 1.14223019e+02 1.15764685e+02 1.17327158e+02 1.18910720e+02 1.20515655e+02 + 1.22142252e+02 1.23790803e+02 1.25461604e+02 1.27154957e+02 1.28871164e+02 + 1.30610535e+02 1.32373382e+02 1.34160023e+02 1.35970777e+02 1.37805972e+02 + 1.39665936e+02 1.41551004e+02 1.43461514e+02 1.45397811e+02 1.47360241e+02 + 1.49349159e+02 1.51364921e+02 1.53407890e+02 1.55478433e+02 1.57576921e+02 + 1.59703733e+02 1.61859251e+02 1.64043861e+02 1.66257957e+02 1.68501937e+02 + 1.70776204e+02 1.73081166e+02 1.75417238e+02 1.77784841e+02 1.80184398e+02 + 1.82616343e+02 1.85081111e+02 1.87579147e+02 1.90110898e+02 1.92676820e+02 + 1.95277375e+02 1.97913029e+02 2.00584256e+02 2.03291537e+02 2.06035358e+02 + 2.08816212e+02 2.11634600e+02 2.14491027e+02 2.17386007e+02 2.20320061e+02 + 2.23293716e+02 2.26307506e+02 2.29361973e+02 2.32457666e+02 2.35595141e+02 + 2.38774963e+02 2.41997703e+02 2.45263940e+02 2.48574262e+02 2.51929263e+02 + 2.55329546e+02 2.58775723e+02 2.62268413e+02 2.65808243e+02 2.69395851e+02 + 2.73031880e+02 2.76716985e+02 2.80451827e+02 2.84237079e+02 2.88073420e+02 + 2.91961540e+02 2.95902138e+02 2.99895922e+02 3.03943610e+02 3.08045930e+02 + 3.12203619e+02 3.16417423e+02 3.20688102e+02 3.25016422e+02 3.29403160e+02 + 3.33849107e+02 3.38355061e+02 3.42921831e+02 3.47550238e+02 3.52241116e+02 + 3.56995306e+02 3.61813663e+02 3.66697053e+02 3.71646355e+02 3.76662457e+02 + 3.81746261e+02 3.86898681e+02 3.92120643e+02 3.97413086e+02 4.02776961e+02 + 4.08213232e+02 4.13722877e+02 4.19306884e+02 4.24966259e+02 4.30702019e+02 + 4.36515194e+02 4.42406829e+02 4.48377983e+02 4.54429730e+02 4.60563157e+02 + 4.66779367e+02 4.73079477e+02 4.79464620e+02 4.85935942e+02 4.92494608e+02 + 4.99141796e+02 5.05878701e+02 5.12706534e+02 5.19626522e+02 5.26639909e+02 + 5.33747955e+02 5.40951938e+02 5.48253154e+02 5.55652913e+02 5.63152548e+02 + 5.70753404e+02 5.78456849e+02 5.86264268e+02 5.94177062e+02 6.02196656e+02 + 6.10324490e+02 6.18562025e+02 6.26910742e+02 6.35372141e+02 6.43947744e+02 + 6.52639091e+02 6.61447746e+02 6.70375290e+02 6.79423329e+02 6.88593490e+02 + 6.97887420e+02 7.07306790e+02 7.16853293e+02 7.26528644e+02 7.36334584e+02 + 7.46272874e+02 7.56345302e+02 7.66553676e+02 7.76899833e+02 7.87385631e+02 + 7.98012956e+02 8.08783718e+02 8.19699853e+02 8.30763322e+02 8.41976115e+02 + 8.53340247e+02 8.64857760e+02 8.76530724e+02 8.88361238e+02 9.00351429e+02 + 9.12503451e+02 9.24819488e+02 9.37301755e+02 9.49952494e+02 9.62773980e+02 + 9.75768518e+02 9.88938442e+02 1.00228612e+03 1.01581395e+03 1.02952437e+03 + 1.04341984e+03 1.05750285e+03 1.07177594e+03 1.08624167e+03 1.10090265e+03 + 1.11576151e+03 1.13082091e+03 1.14608358e+03 1.16155224e+03 1.17722968e+03 + 1.19311872e+03 1.20922222e+03 1.22554306e+03 1.24208419e+03 1.25884857e+03 + 1.27583922e+03 1.29305919e+03 1.31051158e+03 1.32819952e+03 1.34612620e+03 + 1.36429483e+03 1.38270869e+03 1.40137107e+03 1.42028535e+03 1.43945490e+03 + 1.45888319e+03 1.47857370e+03 1.49852998e+03 1.51875560e+03 1.53925421e+03 + 1.56002949e+03 1.58108517e+03 1.60242504e+03 1.62405293e+03 1.64597273e+03 + 1.66818839e+03 1.69070388e+03 1.71352328e+03 1.73665066e+03 1.76009019e+03 + 1.78384609e+03 1.80792261e+03 1.83232410e+03 1.85705494e+03 1.88211956e+03 + 1.90752249e+03 1.93326827e+03 1.95936155e+03 1.98580700e+03 2.01260939e+03 + 2.03977353e+03 2.06730431e+03 2.09520667e+03 2.12348562e+03 2.15214626e+03 + 2.18119372e+03 2.21063324e+03 2.24047011e+03 2.27070968e+03 2.30135739e+03 + 2.33241876e+03 2.36389936e+03 2.39580485e+03 2.42814097e+03 2.46091353e+03 + 2.49412842e+03 2.52779162e+03 2.56190916e+03 2.59648719e+03 2.63153191e+03 + 2.66704964e+03 2.70304674e+03 2.73952970e+03 2.77650507e+03 2.81397949e+03 + 2.85195970e+03 2.89045253e+03 2.92946490e+03 2.96900382e+03 3.00907640e+03 + 3.04968983e+03 3.09085142e+03 3.13256857e+03 3.17484877e+03 3.21769963e+03 + 3.26112884e+03 3.30514422e+03 3.34975367e+03 3.39496522e+03 3.44078698e+03 + 3.48722720e+03 3.53429423e+03 3.58199651e+03 3.63034263e+03 3.67934128e+03 + 3.72900126e+03 3.77933150e+03 3.83034105e+03 3.88203907e+03 3.93443486e+03 + 3.98753784e+03 4.04135754e+03 4.09590365e+03 4.15118596e+03 4.20721442e+03 + 4.26399909e+03 4.32155018e+03 4.37987804e+03 4.43899315e+03 4.49890614e+03 + 4.55962777e+03 4.62116895e+03 4.68354076e+03 4.74675440e+03 4.81082123e+03 + 4.87575277e+03 4.94156069e+03 5.00825682e+03 5.07585314e+03 5.14436181e+03 + 5.21379514e+03 5.28416561e+03 5.35548586e+03 5.42776873e+03 5.50102719e+03 + 5.57527443e+03 5.65052377e+03 5.72678876e+03 5.80408309e+03 5.88242066e+03 + 5.96181555e+03 6.04228203e+03 6.12383457e+03 6.20648782e+03 6.29025664e+03 + 6.37515608e+03 6.46120141e+03 6.54840809e+03 6.63679180e+03 6.72636842e+03 + 6.81715406e+03 6.90916502e+03 7.00241786e+03 7.09692932e+03 7.19271641e+03 + 7.28979633e+03 7.38818654e+03 7.48790472e+03 7.58896879e+03 7.69139692e+03 + 7.79520752e+03 7.90041925e+03 8.00705102e+03 8.11512200e+03 8.22465161e+03 + 8.33565953e+03 8.44816573e+03 8.56219042e+03 8.67775410e+03 8.79487754e+03 + 8.91358179e+03 9.03388820e+03 9.15581837e+03 9.27939423e+03 9.40463799e+03 + 9.53157217e+03 9.66021957e+03 9.79060332e+03 9.92274686e+03 1.00566739e+04 + 1.01924086e+04 1.03299753e+04 1.04693988e+04 1.06107040e+04 1.07539164e+04 + 1.08990618e+04 1.10461661e+04 1.11952560e+04 1.13463581e+04 1.14994996e+04 + 1.16547081e+04 1.18120114e+04 1.19714378e+04 1.21330160e+04 1.22967751e+04 + 1.24627443e+04 1.26309537e+04 1.28014334e+04 1.29742140e+04 1.31493267e+04 + 1.33268028e+04 1.35066744e+04 1.36889736e+04 1.38737334e+04 1.40609868e+04 + 1.42507676e+04 1.44431099e+04 1.46380482e+04 1.48356176e+04 1.50358536e+04 + 1.52387922e+04 1.54444698e+04 1.56529234e+04 1.58641905e+04 1.60783091e+04 + 1.62953177e+04 1.65152552e+04 1.67381612e+04 1.69640758e+04 1.71930395e+04 + 1.74250936e+04 1.76602796e+04 1.78986400e+04 1.81402175e+04 1.83850556e+04 + 1.86331983e+04 1.88846901e+04 1.91395763e+04 1.93979027e+04 1.96597157e+04 + 1.99250625e+04 2.01939905e+04 2.04665484e+04 2.07427849e+04 2.10227497e+04 + 2.13064933e+04 2.15940665e+04 2.18855211e+04 2.21809095e+04 2.24802847e+04 + 2.27837006e+04 2.30912116e+04 2.34028732e+04 2.37187412e+04 2.40388725e+04 + 2.43633245e+04 2.46921558e+04 2.50254252e+04 2.53631928e+04 2.57055192e+04 + 2.60524660e+04 2.64040955e+04 2.67604709e+04 2.71216563e+04 2.74877167e+04 + 2.78587178e+04 2.82347262e+04 2.86158096e+04 2.90020365e+04 2.93934763e+04 + 2.97901994e+04 3.01922770e+04 3.05997814e+04 3.10127860e+04 3.14313648e+04 + 3.18555932e+04 3.22855473e+04 3.27213046e+04 3.31629433e+04 3.36105427e+04 + 3.40641834e+04 3.45239469e+04 3.49899158e+04 3.54621738e+04 3.59408060e+04 + 3.64258982e+04 3.69175376e+04 3.74158128e+04 3.79208131e+04 3.84326294e+04 + 3.89513537e+04 3.94770792e+04 4.00099004e+04 4.05499131e+04 4.10972143e+04 + 4.16519024e+04 4.22140771e+04 4.27838395e+04 4.33612920e+04 4.39465383e+04 + 4.45396837e+04 4.51408347e+04 4.57500995e+04 4.63675875e+04 4.69934097e+04 + 4.76276787e+04 4.82705083e+04 4.89220142e+04 4.95823135e+04 5.02515248e+04 + 5.09297684e+04 5.16171663e+04 5.23138419e+04 5.30199206e+04 5.37355292e+04 + 5.44607964e+04 5.51958524e+04 5.59408296e+04 5.66958616e+04 5.74610843e+04 + 5.82366352e+04 5.90226537e+04 5.98192810e+04 6.06266604e+04 6.14449370e+04 + 6.22742579e+04 6.31147720e+04 6.39666306e+04 6.48299867e+04 6.57049955e+04 + 6.65918142e+04 6.74906024e+04 6.84015214e+04 6.93247351e+04 7.02604094e+04 + 7.12087125e+04 7.21698148e+04 7.31438891e+04 7.41311104e+04 7.51316562e+04 + 7.61457064e+04 7.71734432e+04 7.82150513e+04 7.92707180e+04 8.03406330e+04 + 8.14249886e+04 8.25239797e+04 8.36378039e+04 8.47666613e+04 8.59107549e+04 + 8.70702904e+04 8.82454760e+04 8.94365231e+04 9.06436457e+04 9.18670608e+04 + 9.31069884e+04 9.43636512e+04 9.56372751e+04 9.69280891e+04 9.82363252e+04 + 9.95622186e+04 1.00906007e+05 1.02267933e+05 1.03648241e+05 1.05047179e+05 + 1.06464998e+05 1.07901954e+05 1.09358304e+05 1.10834311e+05 1.12330239e+05 + 1.13846357e+05 1.15382939e+05 1.16940259e+05 1.18518599e+05 1.20118242e+05 + 1.21739475e+05 1.23382590e+05 1.25047882e+05 1.26735650e+05 1.28446198e+05 + 1.30179833e+05 1.31936867e+05 1.33717616e+05 1.35522400e+05 1.37351542e+05 + 1.39205373e+05 1.41084224e+05 1.42988435e+05 1.44918346e+05 1.46874306e+05 + 1.48856665e+05 1.50865780e+05 1.52902011e+05 1.54965726e+05 1.57057295e+05 + 1.59177094e+05 1.61325503e+05 1.63502909e+05 1.65709704e+05 1.67946284e+05 + 1.70213051e+05 1.72510413e+05 1.74838782e+05 1.77198577e+05 1.79590222e+05 + 1.82014146e+05 1.84470787e+05 1.86960585e+05 1.89483987e+05 1.92041448e+05 + 1.94633427e+05 1.97260390e+05 1.99922809e+05 2.02621162e+05 2.05355935e+05 + 2.08127619e+05 2.10936713e+05 2.13783721e+05 2.16669154e+05 2.19593533e+05 + 2.22557381e+05 2.25561233e+05 2.28605628e+05 2.31691112e+05 2.34818242e+05 + 2.37987578e+05 2.41199691e+05 2.44455157e+05 2.47754563e+05 2.51098500e+05 + 2.54487570e+05 2.57922383e+05 2.61403555e+05 2.64931713e+05 2.68507490e+05 + 2.72131529e+05 2.75804482e+05 2.79527008e+05 2.83299778e+05 2.87123468e+05 + 2.90998767e+05 2.94926370e+05 2.98906984e+05 3.02941325e+05 3.07030117e+05 + 3.11174095e+05 3.15374004e+05 3.19630600e+05 3.23944646e+05 3.28316919e+05 + 3.32748205e+05 3.37239300e+05 3.41791010e+05 3.46404155e+05 3.51079564e+05 + 3.55818077e+05 3.60620545e+05 3.65487832e+05 3.70420812e+05 3.75420373e+05 + 3.80487413e+05 3.85622842e+05 3.90827585e+05 3.96102575e+05 4.01448762e+05 + 4.06867107e+05 4.12358582e+05 4.17924176e+05 4.23564889e+05 4.29281734e+05 + 4.35075740e+05 4.40947946e+05 4.46899410e+05 4.52931201e+05 4.59044403e+05 + 4.65240114e+05 4.71519449e+05 4.77883536e+05 4.84333518e+05 4.90870556e+05 + 4.97495824e+05 5.04210514e+05 5.11015831e+05 5.17912999e+05 5.24903259e+05 + 5.31987866e+05 5.39168093e+05 5.46445232e+05 5.53820590e+05 5.61295494e+05 + 5.68871286e+05 5.76549328e+05 5.84331000e+05 5.92217702e+05 6.00210850e+05 + 6.08311882e+05 6.16522253e+05 6.24843439e+05 6.33276936e+05 6.41824259e+05 + 6.50486946e+05 6.59266553e+05 6.68164658e+05 6.77182860e+05 6.86322781e+05 + 6.95586064e+05 7.04974372e+05 7.14489394e+05 7.24132841e+05 7.33906444e+05 + 7.43811962e+05 7.53851175e+05 7.64025886e+05 7.74337925e+05 7.84789146e+05 + 7.95381426e+05 8.06116670e+05 8.16996808e+05 8.28023794e+05 8.39199611e+05 + 8.50526269e+05 8.62005801e+05 8.73640273e+05 8.85431775e+05 8.97382427e+05 + 9.09494376e+05 9.21769800e+05 9.34210905e+05 9.46819927e+05 9.59599133e+05 + 9.72550820e+05 9.85677315e+05 9.98980978e+05 1.01246420e+06 1.02612941e+06 + 1.03997905e+06 1.05401562e+06 1.06824165e+06 1.08265968e+06 1.09727231e+06 + 1.11208217e+06 1.12709191e+06 1.14230425e+06 1.15772190e+06 1.17334765e+06 + 1.18918429e+06 1.20523468e+06 1.22150171e+06 1.23798829e+06 1.25469738e+06 + 1.27163201e+06 1.28879519e+06 1.30619003e+06 1.32381965e+06 1.34168721e+06 + 1.35979593e+06 1.37814906e+06 1.39674991e+06 1.41560181e+06 1.43470815e+06 + 1.45407237e+06 1.47369795e+06 1.49358842e+06 1.51374735e+06 1.53417836e+06 + 1.55488513e+06 1.57587137e+06 1.59714087e+06 1.61869744e+06 1.64054497e+06 + 1.66268736e+06 1.68512861e+06 1.70787275e+06 1.73092387e+06 1.75428611e+06 + 1.77796367e+06 1.80196080e+06 1.82628182e+06 1.85093111e+06 1.87591308e+06 + 1.90123223e+06 1.92689312e+06 1.95290035e+06 1.97925860e+06 2.00597261e+06 + 2.03304717e+06 2.06048716e+06 2.08829750e+06 2.11648321e+06 2.14504933e+06 + 2.17400101e+06 2.20334345e+06 2.23308192e+06 2.26322178e+06 2.29376843e+06 + 2.32472736e+06 2.35610415e+06 2.38790444e+06 2.42013393e+06 2.45279842e+06 + 2.48590378e+06 2.51945596e+06 2.55346100e+06 2.58792500e+06 2.62285416e+06 + 2.65825476e+06 2.69413316e+06 2.73049582e+06 2.76734925e+06 2.80470010e+06 + 2.84255507e+06 2.88092097e+06 2.91980469e+06 2.95921322e+06 2.99915365e+06 + 1.51514411e-06 1.53559398e-06 1.55631985e-06 1.57732546e-06 1.59861459e-06 + 1.62019105e-06 1.64205873e-06 1.66422156e-06 1.68668352e-06 1.70944864e-06 + 1.73252103e-06 1.75590483e-06 1.77960423e-06 1.80362351e-06 1.82796697e-06 + 1.85263900e-06 1.87764402e-06 1.90298654e-06 1.92867110e-06 1.95470233e-06 + 1.98108490e-06 2.00782356e-06 2.03492310e-06 2.06238841e-06 2.09022442e-06 + 2.11843613e-06 2.14702861e-06 2.17600701e-06 2.20537652e-06 2.23514243e-06 + 2.26531010e-06 2.29588494e-06 2.32687244e-06 2.35827818e-06 2.39010781e-06 + 2.42236703e-06 2.45506166e-06 2.48819757e-06 2.52178072e-06 2.55581713e-06 + 2.59031293e-06 2.62527433e-06 2.66070759e-06 2.69661910e-06 2.73301530e-06 + 2.76990274e-06 2.80728805e-06 2.84517795e-06 2.88357925e-06 2.92249885e-06 + 2.96194375e-06 3.00192104e-06 3.04243789e-06 3.08350160e-06 3.12511955e-06 + 3.16729922e-06 3.21004818e-06 3.25337412e-06 3.29728483e-06 3.34178821e-06 + 3.38689225e-06 3.43260505e-06 3.47893484e-06 3.52588994e-06 3.57347879e-06 + 3.62170995e-06 3.67059208e-06 3.72013398e-06 3.77034453e-06 3.82123279e-06 + 3.87280787e-06 3.92507907e-06 3.97805577e-06 4.03174749e-06 4.08616389e-06 + 4.14131475e-06 4.19720997e-06 4.25385962e-06 4.31127386e-06 4.36946302e-06 + 4.42843756e-06 4.48820807e-06 4.54878531e-06 4.61018016e-06 4.67240365e-06 + 4.73546697e-06 4.79938146e-06 4.86415859e-06 4.92981003e-06 4.99634755e-06 + 5.06378314e-06 5.13212890e-06 5.20139712e-06 5.27160025e-06 5.34275092e-06 + 5.41486190e-06 5.48794616e-06 5.56201684e-06 5.63708725e-06 5.71317088e-06 + 5.79028141e-06 5.86843270e-06 5.94763880e-06 6.02791394e-06 6.10927255e-06 + 6.19172925e-06 6.27529887e-06 6.35999643e-06 6.44583715e-06 6.53283646e-06 + 6.62101000e-06 6.71037362e-06 6.80094337e-06 6.89273554e-06 6.98576663e-06 + 7.08005335e-06 7.17561266e-06 7.27246174e-06 7.37061798e-06 7.47009904e-06 + 7.57092278e-06 7.67310735e-06 7.77667110e-06 7.88163264e-06 7.98801085e-06 + 8.09582484e-06 8.20509399e-06 8.31583795e-06 8.42807662e-06 8.54183017e-06 + 8.65711905e-06 8.77396398e-06 8.89238596e-06 9.01240628e-06 9.13404651e-06 + 9.25732852e-06 9.38227446e-06 9.50890680e-06 9.63724829e-06 9.76732200e-06 + 9.89915131e-06 1.00327599e-05 1.01681718e-05 1.03054114e-05 1.04445033e-05 + 1.05854725e-05 1.07283444e-05 1.08731446e-05 1.10198992e-05 1.11686345e-05 + 1.13193773e-05 1.14721546e-05 1.16269940e-05 1.17839233e-05 1.19429706e-05 + 1.21041646e-05 1.22675342e-05 1.24331089e-05 1.26009182e-05 1.27709925e-05 + 1.29433623e-05 1.31180586e-05 1.32951127e-05 1.34745565e-05 1.36564223e-05 + 1.38407427e-05 1.40275509e-05 1.42168804e-05 1.44087653e-05 1.46032400e-05 + 1.48003396e-05 1.50000995e-05 1.52025554e-05 1.54077440e-05 1.56157019e-05 + 1.58264667e-05 1.60400761e-05 1.62565686e-05 1.64759832e-05 1.66983591e-05 + 1.69237365e-05 1.71521557e-05 1.73836580e-05 1.76182848e-05 1.78560784e-05 + 1.80970814e-05 1.83413373e-05 1.85888899e-05 1.88397837e-05 1.90940638e-05 + 1.93517759e-05 1.96129664e-05 1.98776821e-05 2.01459707e-05 2.04178804e-05 + 2.06934601e-05 2.09727592e-05 2.12558280e-05 2.15427174e-05 2.18334790e-05 + 2.21281649e-05 2.24268282e-05 2.27295226e-05 2.30363024e-05 2.33472229e-05 + 2.36623398e-05 2.39817098e-05 2.43053904e-05 2.46334396e-05 2.49659166e-05 + 2.53028810e-05 2.56443934e-05 2.59905151e-05 2.63413085e-05 2.66968365e-05 + 2.70571631e-05 2.74223530e-05 2.77924718e-05 2.81675861e-05 2.85477634e-05 + 2.89330718e-05 2.93235808e-05 2.97193605e-05 3.01204820e-05 3.05270174e-05 + 3.09390399e-05 3.13566233e-05 3.17798429e-05 3.22087747e-05 3.26434958e-05 + 3.30840843e-05 3.35306194e-05 3.39831813e-05 3.44418515e-05 3.49067124e-05 + 3.53778474e-05 3.58553414e-05 3.63392801e-05 3.68297505e-05 3.73268407e-05 + 3.78306402e-05 3.83412395e-05 3.88587303e-05 3.93832056e-05 3.99147598e-05 + 4.04534884e-05 4.09994881e-05 4.15528573e-05 4.21136952e-05 4.26821027e-05 + 4.32581821e-05 4.38420367e-05 4.44337716e-05 4.50334932e-05 4.56413092e-05 + 4.62573288e-05 4.68816629e-05 4.75144236e-05 4.81557246e-05 4.88056813e-05 + 4.94644104e-05 5.01320304e-05 5.08086612e-05 5.14944245e-05 5.21894435e-05 + 5.28938432e-05 5.36077501e-05 5.43312927e-05 5.50646008e-05 5.58078064e-05 + 5.65610431e-05 5.73244461e-05 5.80981528e-05 5.88823022e-05 5.96770352e-05 + 6.04824947e-05 6.12988255e-05 6.21261743e-05 6.29646898e-05 6.38145227e-05 + 6.46758258e-05 6.55487539e-05 6.64334638e-05 6.73301147e-05 6.82388677e-05 + 6.91598861e-05 7.00933354e-05 7.10393835e-05 7.19982003e-05 7.29699583e-05 + 7.39548321e-05 7.49529987e-05 7.59646376e-05 7.69899305e-05 7.80290617e-05 + 7.90822181e-05 8.01495889e-05 8.12313660e-05 8.23277438e-05 8.34389194e-05 + 8.45650925e-05 8.57064656e-05 8.68632437e-05 8.80356348e-05 8.92238497e-05 + 9.04281018e-05 9.16486078e-05 9.28855869e-05 9.41392614e-05 9.54098568e-05 + 9.66976013e-05 9.80027266e-05 9.93254670e-05 1.00666060e-04 1.02024748e-04 + 1.03401773e-04 1.04797385e-04 1.06211833e-04 1.07645371e-04 1.09098258e-04 + 1.10570755e-04 1.12063126e-04 1.13575639e-04 1.15108567e-04 1.16662184e-04 + 1.18236771e-04 1.19832610e-04 1.21449988e-04 1.23089195e-04 1.24750527e-04 + 1.26434282e-04 1.28140763e-04 1.29870275e-04 1.31623131e-04 1.33399646e-04 + 1.35200138e-04 1.37024931e-04 1.38874353e-04 1.40748737e-04 1.42648419e-04 + 1.44573741e-04 1.46525050e-04 1.48502695e-04 1.50507032e-04 1.52538422e-04 + 1.54597229e-04 1.56683824e-04 1.58798582e-04 1.60941883e-04 1.63114112e-04 + 1.65315659e-04 1.67546920e-04 1.69808297e-04 1.72100196e-04 1.74423028e-04 + 1.76777212e-04 1.79163169e-04 1.81581330e-04 1.84032129e-04 1.86516007e-04 + 1.89033409e-04 1.91584788e-04 1.94170603e-04 1.96791319e-04 1.99447407e-04 + 2.02139344e-04 2.04867614e-04 2.07632707e-04 2.10435121e-04 2.13275359e-04 + 2.16153931e-04 2.19071356e-04 2.22028156e-04 2.25024865e-04 2.28062020e-04 + 2.31140168e-04 2.34259861e-04 2.37421661e-04 2.40626136e-04 2.43873861e-04 + 2.47165421e-04 2.50501406e-04 2.53882418e-04 2.57309063e-04 2.60781957e-04 + 2.64301725e-04 2.67868999e-04 2.71484421e-04 2.75148639e-04 2.78862314e-04 + 2.82626112e-04 2.86440710e-04 2.90306793e-04 2.94225057e-04 2.98196206e-04 + 3.02220953e-04 3.06300022e-04 3.10434146e-04 3.14624068e-04 3.18870542e-04 + 3.23174330e-04 3.27536206e-04 3.31956954e-04 3.36437370e-04 3.40978257e-04 + 3.45580432e-04 3.50244723e-04 3.54971968e-04 3.59763016e-04 3.64618729e-04 + 3.69539979e-04 3.74527651e-04 3.79582642e-04 3.84705860e-04 3.89898226e-04 + 3.95160673e-04 4.00494147e-04 4.05899607e-04 4.11378024e-04 4.16930384e-04 + 4.22557683e-04 4.28260934e-04 4.34041162e-04 4.39899405e-04 4.45836717e-04 + 4.51854164e-04 4.57952829e-04 4.64133808e-04 4.70398211e-04 4.76747164e-04 + 4.83181809e-04 4.89703302e-04 4.96312816e-04 5.03011539e-04 5.09800673e-04 + 5.16681441e-04 5.23655078e-04 5.30722838e-04 5.37885992e-04 5.45145826e-04 + 5.52503646e-04 5.59960775e-04 5.67518552e-04 5.75178336e-04 5.82941505e-04 + 5.90809452e-04 5.98783593e-04 6.06865361e-04 6.15056208e-04 6.23357607e-04 + 6.31771050e-04 6.40298049e-04 6.48940137e-04 6.57698866e-04 6.66575812e-04 + 6.75572570e-04 6.84690757e-04 6.93932012e-04 7.03297995e-04 7.12790392e-04 + 7.22410907e-04 7.32161269e-04 7.42043233e-04 7.52058572e-04 7.62209089e-04 + 7.72496607e-04 7.82922975e-04 7.93490068e-04 8.04199785e-04 8.15054050e-04 + 8.26054815e-04 8.37204057e-04 8.48503780e-04 8.59956016e-04 8.71562821e-04 + 8.83326284e-04 8.95248518e-04 9.07331666e-04 9.19577900e-04 9.31989421e-04 + 9.44568460e-04 9.57317278e-04 9.70238166e-04 9.83333448e-04 9.96605476e-04 + 1.01005664e-03 1.02368935e-03 1.03750606e-03 1.05150925e-03 1.06570145e-03 + 1.08008519e-03 1.09466308e-03 1.10943772e-03 1.12441177e-03 1.13958793e-03 + 1.15496892e-03 1.17055751e-03 1.18635650e-03 1.20236872e-03 1.21859707e-03 + 1.23504444e-03 1.25171381e-03 1.26860816e-03 1.28573053e-03 1.30308401e-03 + 1.32067170e-03 1.33849678e-03 1.35656243e-03 1.37487193e-03 1.39342854e-03 + 1.41223561e-03 1.43129652e-03 1.45061470e-03 1.47019361e-03 1.49003678e-03 + 1.51014777e-03 1.53053020e-03 1.55118773e-03 1.57212407e-03 1.59334299e-03 + 1.61484830e-03 1.63664387e-03 1.65873361e-03 1.68112150e-03 1.70381156e-03 + 1.72680786e-03 1.75011455e-03 1.77373580e-03 1.79767587e-03 1.82193906e-03 + 1.84652973e-03 1.87145230e-03 1.89671124e-03 1.92231111e-03 1.94825650e-03 + 1.97455207e-03 2.00120255e-03 2.02821273e-03 2.05558747e-03 2.08333169e-03 + 2.11145037e-03 2.13994856e-03 2.16883140e-03 2.19810406e-03 2.22777182e-03 + 2.25784000e-03 2.28831402e-03 2.31919934e-03 2.35050151e-03 2.38222618e-03 + 2.41437903e-03 2.44696584e-03 2.47999248e-03 2.51346488e-03 2.54738906e-03 + 2.58177111e-03 2.61661721e-03 2.65193363e-03 2.68772672e-03 2.72400290e-03 + 2.76076870e-03 2.79803073e-03 2.83579568e-03 2.87407035e-03 2.91286161e-03 + 2.95217643e-03 2.99202189e-03 3.03240514e-03 3.07333344e-03 3.11481415e-03 + 3.15685472e-03 3.19946271e-03 3.24264578e-03 3.28641170e-03 3.33076832e-03 + 3.37572362e-03 3.42128568e-03 3.46746269e-03 3.51426295e-03 3.56169487e-03 + 3.60976698e-03 3.65848792e-03 3.70786645e-03 3.75791143e-03 3.80863187e-03 + 3.86003689e-03 3.91213571e-03 3.96493772e-03 4.01845239e-03 4.07268934e-03 + 4.12765833e-03 4.18336924e-03 4.23983207e-03 4.29705699e-03 4.35505426e-03 + 4.41383433e-03 4.47340774e-03 4.53378522e-03 4.59497761e-03 4.65699591e-03 + 4.71985128e-03 4.78355500e-03 4.84811852e-03 4.91355347e-03 4.97987158e-03 + 5.04708479e-03 5.11520517e-03 5.18424497e-03 5.25421660e-03 5.32513264e-03 + 5.39700583e-03 5.46984909e-03 5.54367551e-03 5.61849837e-03 5.69433110e-03 + 5.77118736e-03 5.84908093e-03 5.92802584e-03 6.00803626e-03 6.08912659e-03 + 6.17131138e-03 6.25460542e-03 6.33902369e-03 6.42458134e-03 6.51129376e-03 + 6.59917653e-03 6.68824546e-03 6.77851655e-03 6.87000603e-03 6.96273034e-03 + 7.05670614e-03 7.15195034e-03 7.24848004e-03 7.34631260e-03 7.44546561e-03 + 7.54595688e-03 7.64780448e-03 7.75102672e-03 7.85564214e-03 7.96166955e-03 + 8.06912802e-03 8.17803685e-03 8.28841561e-03 8.40028416e-03 8.51366260e-03 + 8.62857130e-03 8.74503092e-03 8.86306239e-03 8.98268694e-03 9.10392605e-03 + 9.22680152e-03 9.35133544e-03 9.47755019e-03 9.60546846e-03 9.73511324e-03 + 9.86650783e-03 9.99967585e-03 1.01346412e-02 1.02714283e-02 1.04100615e-02 + 1.05505658e-02 1.06929666e-02 1.08372893e-02 1.09835599e-02 1.11318048e-02 + 1.12820505e-02 1.14343240e-02 1.15886528e-02 1.17450646e-02 1.19035875e-02 + 1.20642499e-02 1.22270808e-02 1.23921094e-02 1.25593654e-02 1.27288789e-02 + 1.29006802e-02 1.30748004e-02 1.32512707e-02 1.34301228e-02 1.36113888e-02 + 1.37951014e-02 1.39812936e-02 1.41699987e-02 1.43612509e-02 1.45550843e-02 + 1.47515340e-02 1.49506351e-02 1.51524234e-02 1.53569353e-02 1.55642075e-02 + 1.57742773e-02 1.59871823e-02 1.62029609e-02 1.64216519e-02 1.66432945e-02 + 1.68679287e-02 1.70955947e-02 1.73263336e-02 1.75601867e-02 1.77971961e-02 + 1.80374044e-02 1.82808548e-02 1.85275911e-02 1.87776576e-02 1.90310992e-02 + 1.92879614e-02 1.95482906e-02 1.98121334e-02 2.00795373e-02 2.03505503e-02 + 2.06252212e-02 2.09035994e-02 2.11857347e-02 2.14716781e-02 2.17614808e-02 + 2.20551950e-02 2.23528734e-02 2.26545697e-02 2.29603378e-02 2.32702330e-02 + 2.35843107e-02 2.39026276e-02 2.42252408e-02 2.45522083e-02 2.48835889e-02 + 2.52194421e-02 2.55598283e-02 2.59048087e-02 2.62544453e-02 2.66088009e-02 + 2.69679393e-02 2.73319249e-02 2.77008232e-02 2.80747006e-02 2.84536242e-02 + 2.88376620e-02 2.92268833e-02 2.96213578e-02 3.00211566e-02 3.04263514e-02 + 3.08370152e-02 3.12532216e-02 3.16750456e-02 3.21025629e-02 3.25358505e-02 + 3.29749861e-02 3.34200487e-02 3.38711183e-02 3.43282759e-02 3.47916039e-02 + 3.52611853e-02 3.57371047e-02 3.62194475e-02 3.67083006e-02 3.72037516e-02 + 3.77058898e-02 3.82148053e-02 3.87305896e-02 3.92533354e-02 3.97831368e-02 + 4.03200888e-02 4.08642881e-02 4.14158324e-02 4.19748209e-02 4.25413541e-02 + 4.31155337e-02 4.36974630e-02 4.42872467e-02 4.48849906e-02 4.54908022e-02 + 4.61047905e-02 4.67270657e-02 4.73577398e-02 4.79969261e-02 4.86447395e-02 + 4.93012964e-02 4.99667148e-02 5.06411144e-02 5.13246163e-02 5.20173434e-02 + 5.27194202e-02 5.34309730e-02 5.41521296e-02 5.48830196e-02 5.56237744e-02 + 5.63745271e-02 5.71354128e-02 5.79065681e-02 5.86881317e-02 5.94802440e-02 + 6.02830474e-02 6.10966863e-02 6.19213068e-02 6.27570572e-02 6.36040877e-02 + 6.44625506e-02 6.53326001e-02 6.62143926e-02 6.71080867e-02 6.80138429e-02 + 6.89318241e-02 6.98621953e-02 7.08051237e-02 7.17607788e-02 7.27293323e-02 + 7.37109584e-02 7.47058334e-02 7.57141363e-02 7.67360482e-02 7.77717528e-02 + 7.88214363e-02 7.98852873e-02 8.09634971e-02 8.20562595e-02 8.31637709e-02 + 8.42862303e-02 8.54238396e-02 8.65768031e-02 8.77453282e-02 8.89296248e-02 + 9.01299058e-02 9.13463870e-02 9.25792870e-02 9.38288274e-02 9.50952329e-02 + 9.63787310e-02 9.76795524e-02 9.89979310e-02 1.00334104e-01 1.01688311e-01 + 1.03060795e-01 1.04451805e-01 1.05861588e-01 1.07290399e-01 1.08738495e-01 + 1.10206136e-01 1.11693586e-01 1.13201111e-01 1.14728984e-01 1.16277479e-01 + 1.17846873e-01 1.19437449e-01 1.21049494e-01 1.22683296e-01 1.24339149e-01 + 1.26017352e-01 1.27718205e-01 1.29442015e-01 1.31189090e-01 1.32959747e-01 + 1.34754301e-01 1.36573077e-01 1.38416400e-01 1.40284603e-01 1.42178021e-01 + 1.44096994e-01 1.46041868e-01 1.48012992e-01 1.50010719e-01 1.52035411e-01 + 1.54087429e-01 1.56167143e-01 1.58274927e-01 1.60411160e-01 1.62576226e-01 + 1.64770513e-01 1.66994417e-01 1.69248337e-01 1.71532678e-01 1.73847850e-01 + 1.76194270e-01 1.78572360e-01 1.80982547e-01 1.83425264e-01 1.85900951e-01 + 1.88410051e-01 1.90953017e-01 1.93530306e-01 1.96142380e-01 1.98789709e-01 + 2.01472769e-01 2.04192042e-01 2.06948017e-01 2.09741189e-01 2.12572061e-01 + 2.15441141e-01 2.18348945e-01 2.21295996e-01 2.24282822e-01 2.27309962e-01 + 2.30377959e-01 2.33487365e-01 2.36638739e-01 2.39832646e-01 2.43069662e-01 + 2.46350367e-01 2.49675352e-01 2.53045214e-01 2.56460560e-01 2.59922002e-01 + 2.63430163e-01 2.66985673e-01 2.70589173e-01 2.74241308e-01 2.77942737e-01 + 2.81694123e-01 2.85496142e-01 2.89349477e-01 2.93254820e-01 2.97212873e-01 + 3.01224348e-01 3.05289966e-01 3.09410457e-01 3.13586563e-01 3.17819033e-01 + 3.22108629e-01 3.26456121e-01 3.30862292e-01 3.35327932e-01 3.39853846e-01 + 3.44440845e-01 3.49089755e-01 3.53801411e-01 3.58576660e-01 3.63416361e-01 + 3.68321383e-01 3.73292608e-01 3.78330929e-01 3.83437252e-01 3.88612496e-01 + 3.93857590e-01 3.99173476e-01 4.04561111e-01 4.10021463e-01 4.15555512e-01 + 4.21164255e-01 4.26848699e-01 4.32609866e-01 4.38448791e-01 4.44366524e-01 + 4.50364128e-01 4.56442682e-01 4.62603278e-01 4.68847024e-01 4.75175041e-01 + 4.81588467e-01 4.88088455e-01 4.94676173e-01 5.01352806e-01 5.08119553e-01 + 5.14977630e-01 5.21928271e-01 5.28972724e-01 5.36112257e-01 5.43348151e-01 + 5.50681708e-01 5.58114246e-01 5.65647101e-01 5.73281626e-01 5.81019194e-01 + 5.88861197e-01 5.96809042e-01 6.04864160e-01 6.13027997e-01 6.21302021e-01 + 6.29687720e-01 6.38186600e-01 6.46800189e-01 6.55530036e-01 6.64377709e-01 + 6.73344799e-01 6.82432918e-01 6.91643699e-01 7.00978797e-01 7.10439891e-01 + 7.20028682e-01 7.29746892e-01 7.39596268e-01 7.49578581e-01 7.59695625e-01 + 7.69949219e-01 7.80341205e-01 7.90873452e-01 8.01547852e-01 8.12366325e-01 + 8.23330813e-01 8.34443290e-01 8.45705751e-01 8.57120221e-01 8.68688753e-01 + 8.80413424e-01 8.92296343e-01 9.04339645e-01 9.16545496e-01 9.28916089e-01 + 9.41453647e-01 9.54160425e-01 9.67038705e-01 9.80090803e-01 9.93319066e-01 + 1.00672587e+00 1.02031362e+00 1.03408477e+00 1.04804179e+00 1.06218719e+00 + 1.07652350e+00 1.09105331e+00 1.10577923e+00 1.12070391e+00 1.13583002e+00 + 1.15116029e+00 1.16669748e+00 1.18244437e+00 1.19840379e+00 1.21457862e+00 + 1.23097175e+00 1.24758615e+00 1.26442479e+00 1.28149070e+00 1.29878695e+00 + 1.31631665e+00 1.33408294e+00 1.35208903e+00 1.37033814e+00 1.38883356e+00 + 1.40757862e+00 1.42657667e+00 1.44583114e+00 1.46534549e+00 1.48512323e+00 + 1.50516790e+00 1.52548311e+00 1.54607252e+00 1.56693983e+00 1.58808878e+00 + 1.60952317e+00 1.63124687e+00 1.65326377e+00 1.67557783e+00 1.69819306e+00 + 1.72111354e+00 1.74434336e+00 1.76788672e+00 1.79174785e+00 1.81593103e+00 + 1.84044061e+00 1.86528099e+00 1.89045664e+00 1.91597209e+00 1.94183192e+00 + 1.96804078e+00 1.99460338e+00 2.02152449e+00 2.04880896e+00 2.07646169e+00 + 2.10448764e+00 2.13289186e+00 2.16167945e+00 2.19085559e+00 2.22042551e+00 + 2.25039454e+00 2.28076806e+00 2.31155154e+00 2.34275049e+00 2.37437054e+00 + 2.40641736e+00 2.43889672e+00 2.47181445e+00 2.50517647e+00 2.53898878e+00 + 2.57325745e+00 2.60798864e+00 2.64318860e+00 2.67886366e+00 2.71502022e+00 + 2.75166478e+00 2.78880393e+00 2.82644435e+00 2.86459281e+00 2.90325615e+00 + 2.94244133e+00 2.98215539e+00 3.02240547e+00 3.06319880e+00 3.10454272e+00 + 3.14644466e+00 3.18891215e+00 3.23195282e+00 3.27557441e+00 3.31978476e+00 + 3.36459182e+00 3.41000363e+00 3.45602837e+00 3.50267430e+00 3.54994981e+00 + 3.59786340e+00 3.64642368e+00 3.69563937e+00 3.74551933e+00 3.79607251e+00 + 3.84730801e+00 3.89923504e+00 3.95186292e+00 4.00520112e+00 4.05925923e+00 + 4.11404695e+00 4.16957414e+00 4.22585079e+00 4.28288699e+00 4.34069302e+00 + 4.39927925e+00 4.45865622e+00 4.51883459e+00 4.57982520e+00 4.64163899e+00 + 4.70428708e+00 4.76778073e+00 4.83213135e+00 4.89735051e+00 4.96344994e+00 + 5.03044150e+00 5.09833725e+00 5.16714939e+00 5.23689028e+00 5.30757246e+00 + 5.37920864e+00 5.45181169e+00 5.52539466e+00 5.59997078e+00 5.67555346e+00 + 5.75215627e+00 5.82979298e+00 5.90847756e+00 5.98822414e+00 6.06904706e+00 + 6.15096084e+00 6.23398021e+00 6.31812010e+00 6.40339561e+00 6.48982209e+00 + 6.57741507e+00 6.66619028e+00 6.75616369e+00 6.84735147e+00 6.93977001e+00 + 7.03343592e+00 7.12836604e+00 7.22457742e+00 7.32208737e+00 7.42091341e+00 + 7.52107330e+00 7.62258505e+00 7.72546690e+00 7.82973734e+00 7.93541512e+00 + 8.04251923e+00 8.15106892e+00 8.26108370e+00 8.37258335e+00 8.48558791e+00 + 8.60011769e+00 8.71619327e+00 8.83383553e+00 8.95306559e+00 9.07390491e+00 + 9.19637518e+00 9.32049844e+00 9.44629699e+00 9.57379343e+00 9.70301069e+00 + 9.83397200e+00 9.96670088e+00 1.01012212e+01 1.02375571e+01 1.03757332e+01 + 1.05157742e+01 1.06577054e+01 1.08015522e+01 1.09473405e+01 1.10950965e+01 + 1.12448467e+01 1.13966182e+01 1.15504380e+01 1.17063340e+01 1.18643341e+01 + 1.20244668e+01 1.21867607e+01 1.23512451e+01 1.25179496e+01 1.26869041e+01 + 1.28581389e+01 1.30316849e+01 1.32075732e+01 1.33858355e+01 1.35665038e+01 + 1.37496106e+01 1.39351888e+01 1.41232717e+01 1.43138932e+01 1.45070874e+01 + 1.47028892e+01 1.49013338e+01 1.51024567e+01 1.53062942e+01 1.55128829e+01 + 1.57222599e+01 1.59344629e+01 1.61495300e+01 1.63674998e+01 1.65884115e+01 + 1.68123049e+01 1.70392202e+01 1.72691982e+01 1.75022801e+01 1.77385080e+01 + 1.79779242e+01 1.82205718e+01 1.84664944e+01 1.87157363e+01 1.89683421e+01 + 1.92243574e+01 1.94838281e+01 1.97468008e+01 2.00133229e+01 2.02834423e+01 + 2.05572074e+01 2.08346676e+01 2.11158726e+01 2.14008730e+01 2.16897201e+01 + 2.19824657e+01 2.22791625e+01 2.25798639e+01 2.28846237e+01 2.31934970e+01 + 2.35065390e+01 2.38238062e+01 2.41453556e+01 2.44712449e+01 2.48015327e+01 + 2.51362784e+01 2.54755421e+01 2.58193849e+01 2.61678685e+01 2.65210556e+01 + 2.68790097e+01 2.72417950e+01 2.76094769e+01 2.79821213e+01 2.83597954e+01 + 2.87425669e+01 2.91305046e+01 2.95236783e+01 2.99221587e+01 3.03260174e+01 + 3.07353269e+01 3.11501609e+01 3.15705939e+01 3.19967014e+01 3.24285601e+01 + 3.28662476e+01 3.33098426e+01 3.37594247e+01 3.42150749e+01 3.46768749e+01 + 3.51449079e+01 3.56192579e+01 3.61000102e+01 3.65872511e+01 3.70810684e+01 + 3.75815507e+01 3.80887880e+01 3.86028714e+01 3.91238935e+01 3.96519477e+01 + 4.01871291e+01 4.07295339e+01 4.12792594e+01 4.18364046e+01 4.24010695e+01 + 4.29733558e+01 4.35533661e+01 4.41412049e+01 4.47369777e+01 4.53407916e+01 + 4.59527552e+01 4.65729784e+01 4.72015728e+01 4.78386513e+01 4.84843284e+01 + 4.91387202e+01 4.98019444e+01 5.04741200e+01 5.11553680e+01 5.18458108e+01 + 5.25455725e+01 5.32547788e+01 5.39735573e+01 5.47020371e+01 5.54403492e+01 + 5.61886263e+01 5.69470028e+01 5.77156152e+01 5.84946015e+01 5.92841017e+01 + 6.00842578e+01 6.08952136e+01 6.17171149e+01 6.25501093e+01 6.33943466e+01 + 6.42499786e+01 6.51171590e+01 6.59960438e+01 6.68867908e+01 6.77895602e+01 + 6.87045143e+01 6.96318175e+01 7.05716365e+01 7.15241402e+01 7.24894998e+01 + 7.34678888e+01 7.44594832e+01 7.54644611e+01 7.64830031e+01 7.75152924e+01 + 7.85615144e+01 7.96218573e+01 8.06965116e+01 8.17856705e+01 8.28895297e+01 + 8.40082878e+01 8.51421456e+01 8.62913071e+01 8.74559788e+01 8.86363701e+01 + 8.98326931e+01 9.10451628e+01 9.22739972e+01 9.35194171e+01 9.47816465e+01 + 9.60609121e+01 9.73574439e+01 9.86714750e+01 1.00003242e+02 1.01352983e+02 + 1.02720942e+02 1.04107364e+02 1.05512498e+02 1.06936598e+02 1.08379919e+02 + 1.09842720e+02 1.11325265e+02 1.12827819e+02 1.14350653e+02 1.15894041e+02 + 1.17458261e+02 1.19043592e+02 1.20650320e+02 1.22278735e+02 1.23929128e+02 + 1.25601797e+02 1.27297041e+02 1.29015166e+02 1.30756481e+02 1.32521298e+02 + 1.34309935e+02 1.36122713e+02 1.37959958e+02 1.39822000e+02 1.41709174e+02 + 1.43621820e+02 1.45560280e+02 1.47524903e+02 1.49516044e+02 1.51534058e+02 + 1.53579310e+02 1.55652166e+02 1.57752999e+02 1.59882188e+02 1.62040114e+02 + 1.64227166e+02 1.66443736e+02 1.68690223e+02 1.70967031e+02 1.73274569e+02 + 1.75613251e+02 1.77983499e+02 1.80385738e+02 1.82820400e+02 1.85287923e+02 + 1.87788750e+02 1.90323330e+02 1.92892119e+02 1.95495580e+02 1.98134179e+02 + 2.00808391e+02 2.03518697e+02 2.06265584e+02 2.09049546e+02 2.11871083e+02 + 2.14730702e+02 2.17628917e+02 2.20566249e+02 2.23543226e+02 2.26560384e+02 + 2.29618264e+02 2.32717416e+02 2.35858398e+02 2.39041773e+02 2.42268114e+02 + 2.45538001e+02 2.48852022e+02 2.52210771e+02 2.55614854e+02 2.59064882e+02 + 2.62561474e+02 2.66105260e+02 2.69696877e+02 2.73336969e+02 2.77026192e+02 + 2.80765207e+02 2.84554689e+02 2.88395317e+02 2.92287781e+02 2.96232783e+02 + 3.00231029e+02 3.04283240e+02 3.08390144e+02 3.12552478e+02 3.16770992e+02 + 3.21046442e+02 3.25379599e+02 3.29771239e+02 3.34222154e+02 3.38733142e+02 + 3.43305015e+02 3.47938595e+02 3.52634714e+02 3.57394216e+02 3.62217957e+02 + 3.67106805e+02 3.72061636e+02 3.77083343e+02 3.82172828e+02 3.87331006e+02 + 3.92558803e+02 3.97857160e+02 4.03227029e+02 4.08669374e+02 4.14185175e+02 + 4.19775422e+02 4.25441121e+02 4.31183290e+02 4.37002961e+02 4.42901179e+02 + 4.48879006e+02 4.54937515e+02 4.61077796e+02 4.67300952e+02 4.73608102e+02 + 4.80000379e+02 4.86478933e+02 4.93044927e+02 4.99699543e+02 5.06443976e+02 + 5.13279438e+02 5.20207158e+02 5.27228382e+02 5.34344371e+02 5.41556404e+02 + 5.48865778e+02 5.56273806e+02 5.63781821e+02 5.71391170e+02 5.79103223e+02 + 5.86919366e+02 5.94841002e+02 6.02869557e+02 6.11006473e+02 6.19253213e+02 + 6.27611259e+02 6.36082113e+02 6.44667298e+02 6.53368357e+02 6.62186855e+02 + 6.71124375e+02 6.80182525e+02 6.89362932e+02 6.98667247e+02 7.08097142e+02 + 7.17654312e+02 7.27340476e+02 7.37157373e+02 7.47106768e+02 7.57190450e+02 + 7.67410232e+02 7.77767949e+02 7.88265465e+02 7.98904665e+02 8.09687462e+02 + 8.20615795e+02 8.31691626e+02 8.42916949e+02 8.54293779e+02 8.65824161e+02 + 8.77510169e+02 8.89353903e+02 9.01357492e+02 9.13523092e+02 9.25852892e+02 + 9.38349106e+02 9.51013982e+02 9.63849795e+02 9.76858852e+02 9.90043493e+02 + 1.00340609e+03 1.01694903e+03 1.03067477e+03 1.04458576e+03 1.05868451e+03 + 1.07297355e+03 1.08745545e+03 1.10213281e+03 1.11700827e+03 1.13208451e+03 + 1.14736422e+03 1.16285017e+03 1.17854513e+03 1.19445193e+03 1.21057342e+03 + 1.22691250e+03 1.24347211e+03 1.26025522e+03 1.27726485e+03 1.29450407e+03 + 1.31197596e+03 1.32968367e+03 1.34763038e+03 1.36581931e+03 1.38425374e+03 + 1.40293698e+03 1.42187239e+03 1.44106337e+03 1.46051336e+03 1.48022588e+03 + 1.50020445e+03 1.52045267e+03 1.54097419e+03 1.56177268e+03 1.58285189e+03 + 1.60421560e+03 1.62586766e+03 1.64781196e+03 1.67005244e+03 1.69259310e+03 + 1.71543799e+03 1.73859121e+03 1.76205693e+03 1.78583938e+03 1.80994281e+03 + 1.83437156e+03 1.85913003e+03 1.88422266e+03 1.90965397e+03 1.93542853e+03 + 1.96155096e+03 1.98802597e+03 2.01485831e+03 2.04205280e+03 2.06961434e+03 + 2.09754787e+03 2.12585843e+03 2.15455109e+03 2.18363101e+03 2.21310343e+03 + 2.24297363e+03 2.27324699e+03 2.30392895e+03 2.33502503e+03 2.36654081e+03 + 2.39848195e+03 2.43085420e+03 2.46366339e+03 2.49691539e+03 2.53061620e+03 + 2.56477187e+03 2.59938853e+03 2.63447242e+03 2.67002983e+03 2.70606716e+03 + 2.74259088e+03 2.77960756e+03 2.81712386e+03 2.85514651e+03 2.89368236e+03 + 2.93273832e+03 2.97232142e+03 3.01243877e+03 3.05309759e+03 3.09430517e+03 + 3.13606893e+03 3.17839638e+03 3.22129512e+03 3.26477287e+03 3.30883743e+03 + 3.35349673e+03 3.39875879e+03 3.44463176e+03 3.49112387e+03 3.53824349e+03 + 3.58599907e+03 3.63439922e+03 3.68345262e+03 3.73316809e+03 3.78355457e+03 + 3.83462112e+03 3.88637691e+03 3.93883124e+03 3.99199356e+03 4.04587340e+03 + 4.10048045e+03 4.15582454e+03 4.21191561e+03 4.26876373e+03 4.32637913e+03 + 4.38477217e+03 4.44395333e+03 4.50393327e+03 4.56472275e+03 4.62633270e+03 + 4.68877420e+03 4.75205848e+03 4.81619690e+03 4.88120099e+03 4.94708244e+03 + 5.01385310e+03 5.08152495e+03 5.15011018e+03 5.21962109e+03 5.29007019e+03 + 5.36147014e+03 5.43383378e+03 5.50717410e+03 5.58150430e+03 5.65683773e+03 + 5.73318793e+03 5.81056864e+03 5.88899374e+03 5.96847735e+03 6.04903375e+03 + 6.13067741e+03 6.21342302e+03 6.29728544e+03 6.38227975e+03 6.46842123e+03 + 6.55572536e+03 6.64420783e+03 6.73388454e+03 6.82477162e+03 6.91688540e+03 + 7.01024244e+03 7.10485951e+03 7.20075363e+03 7.29794203e+03 7.39644218e+03 + 7.49627178e+03 7.59744879e+03 7.69999137e+03 7.80391797e+03 7.90924727e+03 + 8.01599819e+03 8.12418992e+03 8.23384192e+03 8.34497389e+03 8.45760580e+03 + 8.57175791e+03 8.68745072e+03 8.80470504e+03 8.92354193e+03 9.04398276e+03 + 9.16604918e+03 9.28976313e+03 9.41514684e+03 9.54222285e+03 9.67101401e+03 + 9.80154345e+03 9.93383465e+03 1.00679114e+04 1.02037977e+04 1.03415182e+04 + 1.04810974e+04 1.06225605e+04 1.07659329e+04 1.09112405e+04 1.10585092e+04 + 1.12077657e+04 1.13590366e+04 1.15123493e+04 1.16677312e+04 1.18252103e+04 + 1.19848148e+04 1.21465736e+04 1.23105156e+04 1.24766704e+04 1.26450677e+04 + 1.28157379e+04 1.29887116e+04 1.31640199e+04 1.33416944e+04 1.35217669e+04 + 1.37042699e+04 1.38892361e+04 1.40766987e+04 1.42666916e+04 1.44592488e+04 + 1.46544049e+04 1.48521951e+04 1.50526548e+04 1.52558201e+04 1.54617276e+04 + 1.56704142e+04 1.58819174e+04 1.60962752e+04 1.63135263e+04 1.65337095e+04 + 1.67568646e+04 1.69830316e+04 1.72122512e+04 1.74445645e+04 1.76800134e+04 + 1.79186401e+04 1.81604876e+04 1.84055993e+04 1.86540192e+04 1.89057921e+04 + 1.91609631e+04 1.94195781e+04 1.96816837e+04 1.99473269e+04 2.02165555e+04 + 2.04894179e+04 2.07659631e+04 2.10462408e+04 2.13303014e+04 2.16181960e+04 + 2.19099763e+04 2.22056947e+04 2.25054044e+04 2.28091593e+04 2.31170140e+04 + 2.34290238e+04 2.37452448e+04 2.40657338e+04 2.43905484e+04 2.47197470e+04 + 2.50533889e+04 2.53915339e+04 2.57342428e+04 2.60815773e+04 2.64335997e+04 + 2.67903734e+04 2.71519624e+04 2.75184318e+04 2.78898474e+04 2.82662760e+04 + 2.86477853e+04 2.90344437e+04 2.94263209e+04 2.98234873e+04 3.02260142e+04 + 3.06339740e+04 3.10474400e+04 3.14664865e+04 3.18911890e+04 3.23216236e+04 + 3.27578678e+04 3.31999999e+04 3.36480995e+04 3.41022471e+04 3.45625243e+04 + 3.50290139e+04 3.55017997e+04 3.59809666e+04 3.64666009e+04 3.69587897e+04 + 3.74576216e+04 3.79631862e+04 3.84755745e+04 3.89948784e+04 3.95211913e+04 + 4.00546079e+04 4.05952240e+04 4.11431368e+04 4.16984447e+04 4.22612476e+04 + 4.28316467e+04 4.34097444e+04 4.39956447e+04 4.45894528e+04 4.51912756e+04 + 4.58012212e+04 4.64193992e+04 4.70459207e+04 4.76808984e+04 4.83244463e+04 + 4.89766802e+04 4.96377173e+04 5.03076764e+04 5.09866779e+04 5.16748439e+04 + 5.23722980e+04 5.30791657e+04 5.37955739e+04 5.45216515e+04 5.52575289e+04 + 5.60033385e+04 5.67592142e+04 5.75252919e+04 5.83017094e+04 5.90886062e+04 + 5.98861237e+04 6.06944053e+04 6.15135963e+04 6.23438438e+04 6.31852972e+04 + 6.40381076e+04 6.49024284e+04 6.57784150e+04 6.66662247e+04 6.75660171e+04 + 6.84779540e+04 6.94021994e+04 7.03389192e+04 7.12882819e+04 7.22504581e+04 + 7.32256209e+04 7.42139453e+04 7.52156092e+04 7.62307924e+04 7.72596776e+04 + 7.83024497e+04 7.93592960e+04 8.04304065e+04 8.15159738e+04 8.26161929e+04 + 8.37312617e+04 8.48613806e+04 8.60067526e+04 8.71675837e+04 8.83440825e+04 + 8.95364604e+04 9.07449319e+04 9.19697141e+04 9.32110271e+04 9.44690942e+04 + 9.57441413e+04 9.70363977e+04 9.83460956e+04 9.96734705e+04 1.01018761e+05 + 1.02382209e+05 1.03764059e+05 1.05164560e+05 1.06583964e+05 1.08022525e+05 + 1.09480502e+05 1.10958158e+05 1.12455758e+05 1.13973570e+05 1.15511869e+05 + 1.17070930e+05 1.18651033e+05 1.20252464e+05 1.21875508e+05 1.23520459e+05 + 1.25187612e+05 1.26877266e+05 1.28589725e+05 1.30325298e+05 1.32084295e+05 + 1.33867034e+05 1.35673834e+05 1.37505020e+05 1.39360922e+05 1.41241873e+05 + 1.43148212e+05 1.45080280e+05 1.47038425e+05 1.49022999e+05 1.51034359e+05 + 1.53072866e+05 1.55138887e+05 1.57232793e+05 1.59354960e+05 1.61505770e+05 + 1.63685609e+05 1.65894870e+05 1.68133949e+05 1.70403249e+05 1.72703178e+05 + 1.75034149e+05 1.77396580e+05 1.79790898e+05 1.82217531e+05 1.84676917e+05 + 1.87169497e+05 1.89695719e+05 1.92256038e+05 1.94850913e+05 1.97480811e+05 + 2.00146205e+05 2.02847573e+05 2.05585402e+05 2.08360183e+05 2.11172416e+05 + 2.14022605e+05 2.16911263e+05 2.19838909e+05 2.22806069e+05 2.25813278e+05 + 2.28861074e+05 2.31950007e+05 2.35080630e+05 2.38253508e+05 2.41469210e+05 + 2.44728314e+05 2.48031406e+05 2.51379080e+05 2.54771938e+05 2.58210588e+05 + 2.61695651e+05 2.65227751e+05 2.68807523e+05 2.72435612e+05 2.76112669e+05 + 2.79839355e+05 2.83616340e+05 2.87444303e+05 2.91323932e+05 2.95255924e+05 + 2.99240986e+05 3.03279835e+05 3.07373196e+05 3.11521804e+05 3.15726407e+05 + 3.19987758e+05 3.24306626e+05 3.28683784e+05 3.33120022e+05 3.37616135e+05 + 3.42172931e+05 3.46791231e+05 3.51471864e+05 3.56215672e+05 3.61023506e+05 + 3.65896232e+05 3.70834725e+05 3.75839872e+05 3.80912574e+05 3.86053742e+05 + 3.91264300e+05 3.96545185e+05 4.01897346e+05 4.07321745e+05 4.12819356e+05 + 4.18391169e+05 4.24038185e+05 4.29761418e+05 4.35561898e+05 4.41440667e+05 + 4.47398781e+05 4.53437311e+05 4.59557344e+05 4.65759979e+05 4.72046330e+05 + 4.78417528e+05 4.84874718e+05 4.91419060e+05 4.98051732e+05 5.04773924e+05 + 5.11586846e+05 5.18491721e+05 5.25489792e+05 5.32582315e+05 5.39770566e+05 + 5.47055836e+05 5.54439436e+05 5.61922691e+05 5.69506949e+05 5.77193570e+05 + 5.84983938e+05 5.92879453e+05 6.00881532e+05 6.08991616e+05 6.17211161e+05 + 6.25541646e+05 6.33984566e+05 6.42541441e+05 6.51213808e+05 6.60003225e+05 + 1.65580254e-01 1.65563515e-01 1.65546741e-01 1.65529929e-01 1.65513082e-01 + 1.65496198e-01 1.65479277e-01 1.65462319e-01 1.65445324e-01 1.65428292e-01 + 1.65411223e-01 1.65394117e-01 1.65376974e-01 1.65359793e-01 1.65342574e-01 + 1.65325318e-01 1.65308025e-01 1.65290693e-01 1.65273323e-01 1.65255915e-01 + 1.65238469e-01 1.65220985e-01 1.65203462e-01 1.65185901e-01 1.65168301e-01 + 1.65150662e-01 1.65132985e-01 1.65115268e-01 1.65097513e-01 1.65079718e-01 + 1.65061884e-01 1.65044011e-01 1.65026098e-01 1.65008145e-01 1.64990153e-01 + 1.64972120e-01 1.64954048e-01 1.64935936e-01 1.64917783e-01 1.64899591e-01 + 1.64881357e-01 1.64863083e-01 1.64844769e-01 1.64826414e-01 1.64808017e-01 + 1.64789580e-01 1.64771102e-01 1.64752582e-01 1.64734021e-01 1.64715418e-01 + 1.64696774e-01 1.64678088e-01 1.64659360e-01 1.64640590e-01 1.64621778e-01 + 1.64602924e-01 1.64584027e-01 1.64565088e-01 1.64546107e-01 1.64527082e-01 + 1.64508015e-01 1.64488905e-01 1.64469751e-01 1.64450555e-01 1.64431315e-01 + 1.64412031e-01 1.64392704e-01 1.64373334e-01 1.64353919e-01 1.64334460e-01 + 1.64314958e-01 1.64295411e-01 1.64275819e-01 1.64256183e-01 1.64236503e-01 + 1.64216777e-01 1.64197007e-01 1.64177192e-01 1.64157331e-01 1.64137425e-01 + 1.64117474e-01 1.64097477e-01 1.64077435e-01 1.64057346e-01 1.64037212e-01 + 1.64017032e-01 1.63996805e-01 1.63976532e-01 1.63956212e-01 1.63935846e-01 + 1.63915433e-01 1.63894973e-01 1.63874465e-01 1.63853911e-01 1.63833309e-01 + 1.63812660e-01 1.63791963e-01 1.63771218e-01 1.63750426e-01 1.63729585e-01 + 1.63708696e-01 1.63687759e-01 1.63666773e-01 1.63645738e-01 1.63624655e-01 + 1.63603523e-01 1.63582341e-01 1.63561111e-01 1.63539831e-01 1.63518501e-01 + 1.63497122e-01 1.63475693e-01 1.63454214e-01 1.63432685e-01 1.63411106e-01 + 1.63389476e-01 1.63367795e-01 1.63346064e-01 1.63324282e-01 1.63302449e-01 + 1.63280565e-01 1.63258629e-01 1.63236642e-01 1.63214603e-01 1.63192512e-01 + 1.63170369e-01 1.63148174e-01 1.63125927e-01 1.63103628e-01 1.63081275e-01 + 1.63058870e-01 1.63036412e-01 1.63013901e-01 1.62991337e-01 1.62968719e-01 + 1.62946048e-01 1.62923323e-01 1.62900544e-01 1.62877710e-01 1.62854823e-01 + 1.62831881e-01 1.62808885e-01 1.62785834e-01 1.62762728e-01 1.62739567e-01 + 1.62716350e-01 1.62693078e-01 1.62669751e-01 1.62646368e-01 1.62622929e-01 + 1.62599433e-01 1.62575882e-01 1.62552274e-01 1.62528609e-01 1.62504888e-01 + 1.62481109e-01 1.62457274e-01 1.62433381e-01 1.62409431e-01 1.62385423e-01 + 1.62361357e-01 1.62337233e-01 1.62313050e-01 1.62288810e-01 1.62264510e-01 + 1.62240152e-01 1.62215735e-01 1.62191259e-01 1.62166724e-01 1.62142129e-01 + 1.62117474e-01 1.62092759e-01 1.62067985e-01 1.62043150e-01 1.62018255e-01 + 1.61993299e-01 1.61968282e-01 1.61943204e-01 1.61918065e-01 1.61892865e-01 + 1.61867603e-01 1.61842279e-01 1.61816893e-01 1.61791445e-01 1.61765935e-01 + 1.61740362e-01 1.61714726e-01 1.61689028e-01 1.61663266e-01 1.61637441e-01 + 1.61611552e-01 1.61585600e-01 1.61559583e-01 1.61533503e-01 1.61507358e-01 + 1.61481148e-01 1.61454874e-01 1.61428535e-01 1.61402130e-01 1.61375660e-01 + 1.61349125e-01 1.61322523e-01 1.61295856e-01 1.61269123e-01 1.61242323e-01 + 1.61215456e-01 1.61188522e-01 1.61161522e-01 1.61134454e-01 1.61107319e-01 + 1.61080115e-01 1.61052844e-01 1.61025505e-01 1.60998098e-01 1.60970621e-01 + 1.60943076e-01 1.60915462e-01 1.60887779e-01 1.60860026e-01 1.60832204e-01 + 1.60804311e-01 1.60776349e-01 1.60748316e-01 1.60720212e-01 1.60692038e-01 + 1.60663792e-01 1.60635475e-01 1.60607087e-01 1.60578627e-01 1.60550095e-01 + 1.60521491e-01 1.60492814e-01 1.60464065e-01 1.60435242e-01 1.60406347e-01 + 1.60377378e-01 1.60348335e-01 1.60319219e-01 1.60290028e-01 1.60260764e-01 + 1.60231424e-01 1.60202010e-01 1.60172520e-01 1.60142955e-01 1.60113315e-01 + 1.60083599e-01 1.60053807e-01 1.60023938e-01 1.59993993e-01 1.59963971e-01 + 1.59933872e-01 1.59903696e-01 1.59873442e-01 1.59843110e-01 1.59812700e-01 + 1.59782212e-01 1.59751645e-01 1.59720999e-01 1.59690274e-01 1.59659470e-01 + 1.59628586e-01 1.59597622e-01 1.59566578e-01 1.59535454e-01 1.59504249e-01 + 1.59472963e-01 1.59441595e-01 1.59410146e-01 1.59378616e-01 1.59347003e-01 + 1.59315308e-01 1.59283531e-01 1.59251670e-01 1.59219726e-01 1.59187699e-01 + 1.59155589e-01 1.59123394e-01 1.59091115e-01 1.59058751e-01 1.59026303e-01 + 1.58993770e-01 1.58961151e-01 1.58928446e-01 1.58895656e-01 1.58862779e-01 + 1.58829816e-01 1.58796766e-01 1.58763628e-01 1.58730404e-01 1.58697092e-01 + 1.58663691e-01 1.58630203e-01 1.58596625e-01 1.58562959e-01 1.58529204e-01 + 1.58495359e-01 1.58461425e-01 1.58427400e-01 1.58393285e-01 1.58359079e-01 + 1.58324782e-01 1.58290394e-01 1.58255915e-01 1.58221343e-01 1.58186679e-01 + 1.58151923e-01 1.58117073e-01 1.58082131e-01 1.58047095e-01 1.58011965e-01 + 1.57976741e-01 1.57941422e-01 1.57906009e-01 1.57870501e-01 1.57834897e-01 + 1.57799197e-01 1.57763402e-01 1.57727510e-01 1.57691521e-01 1.57655435e-01 + 1.57619252e-01 1.57582971e-01 1.57546592e-01 1.57510115e-01 1.57473538e-01 + 1.57436863e-01 1.57400088e-01 1.57363214e-01 1.57326239e-01 1.57289164e-01 + 1.57251989e-01 1.57214712e-01 1.57177333e-01 1.57139853e-01 1.57102271e-01 + 1.57064586e-01 1.57026798e-01 1.56988907e-01 1.56950912e-01 1.56912813e-01 + 1.56874610e-01 1.56836302e-01 1.56797890e-01 1.56759371e-01 1.56720748e-01 + 1.56682017e-01 1.56643181e-01 1.56604237e-01 1.56565187e-01 1.56526028e-01 + 1.56486762e-01 1.56447387e-01 1.56407903e-01 1.56368311e-01 1.56328609e-01 + 1.56288796e-01 1.56248874e-01 1.56208841e-01 1.56168697e-01 1.56128441e-01 + 1.56088074e-01 1.56047594e-01 1.56007002e-01 1.55966297e-01 1.55925478e-01 + 1.55884546e-01 1.55843499e-01 1.55802338e-01 1.55761062e-01 1.55719670e-01 + 1.55678163e-01 1.55636539e-01 1.55594799e-01 1.55552941e-01 1.55510966e-01 + 1.55468873e-01 1.55426662e-01 1.55384333e-01 1.55341884e-01 1.55299315e-01 + 1.55256627e-01 1.55213818e-01 1.55170888e-01 1.55127838e-01 1.55084665e-01 + 1.55041370e-01 1.54997953e-01 1.54954413e-01 1.54910749e-01 1.54866961e-01 + 1.54823050e-01 1.54779013e-01 1.54734851e-01 1.54690564e-01 1.54646150e-01 + 1.54601610e-01 1.54556943e-01 1.54512149e-01 1.54467226e-01 1.54422176e-01 + 1.54376996e-01 1.54331687e-01 1.54286249e-01 1.54240680e-01 1.54194981e-01 + 1.54149150e-01 1.54103188e-01 1.54057094e-01 1.54010867e-01 1.53964507e-01 + 1.53918014e-01 1.53871386e-01 1.53824625e-01 1.53777728e-01 1.53730696e-01 + 1.53683527e-01 1.53636223e-01 1.53588781e-01 1.53541202e-01 1.53493486e-01 + 1.53445630e-01 1.53397636e-01 1.53349503e-01 1.53301229e-01 1.53252815e-01 + 1.53204260e-01 1.53155564e-01 1.53106726e-01 1.53057745e-01 1.53008621e-01 + 1.52959354e-01 1.52909943e-01 1.52860387e-01 1.52810686e-01 1.52760840e-01 + 1.52710847e-01 1.52660708e-01 1.52610421e-01 1.52559987e-01 1.52509404e-01 + 1.52458673e-01 1.52407792e-01 1.52356762e-01 1.52305580e-01 1.52254248e-01 + 1.52202764e-01 1.52151129e-01 1.52099340e-01 1.52047398e-01 1.51995302e-01 + 1.51943052e-01 1.51890647e-01 1.51838087e-01 1.51785370e-01 1.51732497e-01 + 1.51679467e-01 1.51626279e-01 1.51572932e-01 1.51519426e-01 1.51465761e-01 + 1.51411936e-01 1.51357950e-01 1.51303802e-01 1.51249493e-01 1.51195021e-01 + 1.51140386e-01 1.51085587e-01 1.51030624e-01 1.50975496e-01 1.50920202e-01 + 1.50864742e-01 1.50809116e-01 1.50753322e-01 1.50697360e-01 1.50641229e-01 + 1.50584929e-01 1.50528459e-01 1.50471818e-01 1.50415007e-01 1.50358023e-01 + 1.50300867e-01 1.50243538e-01 1.50186035e-01 1.50128358e-01 1.50070506e-01 + 1.50012478e-01 1.49954274e-01 1.49895893e-01 1.49837334e-01 1.49778596e-01 + 1.49719680e-01 1.49660584e-01 1.49601308e-01 1.49541850e-01 1.49482211e-01 + 1.49422390e-01 1.49362385e-01 1.49302197e-01 1.49241824e-01 1.49181266e-01 + 1.49120523e-01 1.49059593e-01 1.48998475e-01 1.48937170e-01 1.48875676e-01 + 1.48813992e-01 1.48752119e-01 1.48690055e-01 1.48627799e-01 1.48565351e-01 + 1.48502710e-01 1.48439876e-01 1.48376847e-01 1.48313623e-01 1.48250203e-01 + 1.48186586e-01 1.48122773e-01 1.48058761e-01 1.47994550e-01 1.47930139e-01 + 1.47865528e-01 1.47800717e-01 1.47735703e-01 1.47670486e-01 1.47605066e-01 + 1.47539442e-01 1.47473613e-01 1.47407579e-01 1.47341337e-01 1.47274889e-01 + 1.47208232e-01 1.47141367e-01 1.47074292e-01 1.47007006e-01 1.46939509e-01 + 1.46871800e-01 1.46803878e-01 1.46735743e-01 1.46667393e-01 1.46598827e-01 + 1.46530046e-01 1.46461047e-01 1.46391831e-01 1.46322396e-01 1.46252742e-01 + 1.46182867e-01 1.46112772e-01 1.46042454e-01 1.45971913e-01 1.45901149e-01 + 1.45830160e-01 1.45758946e-01 1.45687506e-01 1.45615839e-01 1.45543943e-01 + 1.45471819e-01 1.45399465e-01 1.45326880e-01 1.45254064e-01 1.45181016e-01 + 1.45107734e-01 1.45034218e-01 1.44960467e-01 1.44886480e-01 1.44812256e-01 + 1.44737795e-01 1.44663094e-01 1.44588154e-01 1.44512974e-01 1.44437552e-01 + 1.44361888e-01 1.44285981e-01 1.44209829e-01 1.44133432e-01 1.44056789e-01 + 1.43979899e-01 1.43902761e-01 1.43825374e-01 1.43747737e-01 1.43669849e-01 + 1.43591710e-01 1.43513317e-01 1.43434671e-01 1.43355770e-01 1.43276613e-01 + 1.43197200e-01 1.43117528e-01 1.43037599e-01 1.42957409e-01 1.42876959e-01 + 1.42796247e-01 1.42715272e-01 1.42634034e-01 1.42552530e-01 1.42470761e-01 + 1.42388726e-01 1.42306422e-01 1.42223850e-01 1.42141007e-01 1.42057894e-01 + 1.41974509e-01 1.41890851e-01 1.41806919e-01 1.41722711e-01 1.41638228e-01 + 1.41553467e-01 1.41468428e-01 1.41383109e-01 1.41297511e-01 1.41211630e-01 + 1.41125467e-01 1.41039020e-01 1.40952288e-01 1.40865271e-01 1.40777966e-01 + 1.40690373e-01 1.40602491e-01 1.40514319e-01 1.40425855e-01 1.40337099e-01 + 1.40248048e-01 1.40158703e-01 1.40069062e-01 1.39979124e-01 1.39888888e-01 + 1.39798352e-01 1.39707515e-01 1.39616377e-01 1.39524936e-01 1.39433191e-01 + 1.39341140e-01 1.39248784e-01 1.39156119e-01 1.39063146e-01 1.38969862e-01 + 1.38876268e-01 1.38782361e-01 1.38688141e-01 1.38593606e-01 1.38498755e-01 + 1.38403586e-01 1.38308099e-01 1.38212293e-01 1.38116166e-01 1.38019716e-01 + 1.37922943e-01 1.37825846e-01 1.37728423e-01 1.37630672e-01 1.37532594e-01 + 1.37434185e-01 1.37335446e-01 1.37236375e-01 1.37136970e-01 1.37037230e-01 + 1.36937155e-01 1.36836742e-01 1.36735991e-01 1.36634900e-01 1.36533467e-01 + 1.36431692e-01 1.36329574e-01 1.36227110e-01 1.36124300e-01 1.36021142e-01 + 1.35917635e-01 1.35813778e-01 1.35709568e-01 1.35605006e-01 1.35500089e-01 + 1.35394817e-01 1.35289187e-01 1.35183199e-01 1.35076851e-01 1.34970142e-01 + 1.34863070e-01 1.34755634e-01 1.34647833e-01 1.34539665e-01 1.34431128e-01 + 1.34322223e-01 1.34212946e-01 1.34103297e-01 1.33993274e-01 1.33882876e-01 + 1.33772101e-01 1.33660948e-01 1.33549416e-01 1.33437503e-01 1.33325207e-01 + 1.33212528e-01 1.33099463e-01 1.32986012e-01 1.32872172e-01 1.32757943e-01 + 1.32643323e-01 1.32528310e-01 1.32412904e-01 1.32297101e-01 1.32180902e-01 + 1.32064305e-01 1.31947307e-01 1.31829908e-01 1.31712106e-01 1.31593899e-01 + 1.31475287e-01 1.31356267e-01 1.31236838e-01 1.31116998e-01 1.30996746e-01 + 1.30876081e-01 1.30755001e-01 1.30633504e-01 1.30511588e-01 1.30389253e-01 + 1.30266497e-01 1.30143318e-01 1.30019714e-01 1.29895684e-01 1.29771227e-01 + 1.29646341e-01 1.29521024e-01 1.29395274e-01 1.29269091e-01 1.29142472e-01 + 1.29015417e-01 1.28887922e-01 1.28759987e-01 1.28631611e-01 1.28502791e-01 + 1.28373525e-01 1.28243813e-01 1.28113653e-01 1.27983043e-01 1.27851981e-01 + 1.27720466e-01 1.27588496e-01 1.27456070e-01 1.27323186e-01 1.27189841e-01 + 1.27056036e-01 1.26921767e-01 1.26787033e-01 1.26651833e-01 1.26516166e-01 + 1.26380028e-01 1.26243419e-01 1.26106337e-01 1.25968780e-01 1.25830747e-01 + 1.25692235e-01 1.25553244e-01 1.25413771e-01 1.25273815e-01 1.25133375e-01 + 1.24992448e-01 1.24851032e-01 1.24709127e-01 1.24566730e-01 1.24423839e-01 + 1.24280454e-01 1.24136571e-01 1.23992190e-01 1.23847309e-01 1.23701926e-01 + 1.23556040e-01 1.23409647e-01 1.23262748e-01 1.23115340e-01 1.22967422e-01 + 1.22818991e-01 1.22670046e-01 1.22520585e-01 1.22370607e-01 1.22220110e-01 + 1.22069091e-01 1.21917550e-01 1.21765484e-01 1.21612892e-01 1.21459773e-01 + 1.21306123e-01 1.21151942e-01 1.20997228e-01 1.20841979e-01 1.20686193e-01 + 1.20529869e-01 1.20373004e-01 1.20215598e-01 1.20057648e-01 1.19899152e-01 + 1.19740109e-01 1.19580518e-01 1.19420375e-01 1.19259680e-01 1.19098431e-01 + 1.18936626e-01 1.18774263e-01 1.18611341e-01 1.18447857e-01 1.18283810e-01 + 1.18119199e-01 1.17954021e-01 1.17788276e-01 1.17621960e-01 1.17455072e-01 + 1.17287611e-01 1.17119575e-01 1.16950961e-01 1.16781770e-01 1.16611997e-01 + 1.16441643e-01 1.16270705e-01 1.16099181e-01 1.15927070e-01 1.15754370e-01 + 1.15581079e-01 1.15407195e-01 1.15232718e-01 1.15057644e-01 1.14881973e-01 + 1.14705703e-01 1.14528831e-01 1.14351357e-01 1.14173279e-01 1.13994594e-01 + 1.13815302e-01 1.13635400e-01 1.13454887e-01 1.13273762e-01 1.13092022e-01 + 1.12909666e-01 1.12726692e-01 1.12543099e-01 1.12358884e-01 1.12174047e-01 + 1.11988586e-01 1.11802499e-01 1.11615785e-01 1.11428441e-01 1.11240467e-01 + 1.11051860e-01 1.10862619e-01 1.10672743e-01 1.10482230e-01 1.10291079e-01 + 1.10099287e-01 1.09906853e-01 1.09713777e-01 1.09520055e-01 1.09325688e-01 + 1.09130672e-01 1.08935008e-01 1.08738692e-01 1.08541725e-01 1.08344104e-01 + 1.08145827e-01 1.07946894e-01 1.07747304e-01 1.07547053e-01 1.07346142e-01 + 1.07144569e-01 1.06942333e-01 1.06739431e-01 1.06535863e-01 1.06331627e-01 + 1.06126723e-01 1.05921148e-01 1.05714902e-01 1.05507982e-01 1.05300389e-01 + 1.05092120e-01 1.04883175e-01 1.04673552e-01 1.04463250e-01 1.04252268e-01 + 1.04040604e-01 1.03828258e-01 1.03615228e-01 1.03401513e-01 1.03187113e-01 + 1.02972026e-01 1.02756250e-01 1.02539786e-01 1.02322631e-01 1.02104785e-01 + 1.01886248e-01 1.01667017e-01 1.01447092e-01 1.01226473e-01 1.01005158e-01 + 1.00783146e-01 1.00560436e-01 1.00337028e-01 1.00112922e-01 9.98881150e-02 + 9.96626076e-02 9.94363989e-02 9.92094881e-02 9.89818746e-02 9.87535577e-02 + 9.85245367e-02 9.82948112e-02 9.80643804e-02 9.78332440e-02 9.76014013e-02 + 9.73688518e-02 9.71355952e-02 9.69016310e-02 9.66669588e-02 9.64315783e-02 + 9.61954891e-02 9.59586908e-02 9.57211834e-02 9.54829664e-02 9.52440398e-02 + 9.50044033e-02 9.47640568e-02 9.45230003e-02 9.42812335e-02 9.40387567e-02 + 9.37955696e-02 9.35516725e-02 9.33070653e-02 9.30617482e-02 9.28157214e-02 + 9.25689850e-02 9.23215393e-02 9.20733846e-02 9.18245212e-02 9.15749495e-02 + 9.13246699e-02 9.10736827e-02 9.08219886e-02 9.05695880e-02 9.03164816e-02 + 9.00626699e-02 8.98081536e-02 8.95529334e-02 8.92970102e-02 8.90403847e-02 + 8.87830577e-02 8.85250303e-02 8.82663032e-02 8.80068776e-02 8.77467546e-02 + 8.74859351e-02 8.72244204e-02 8.69622117e-02 8.66993103e-02 8.64357174e-02 + 8.61714345e-02 8.59064630e-02 8.56408044e-02 8.53744602e-02 8.51074320e-02 + 8.48397215e-02 8.45713304e-02 8.43022605e-02 8.40325136e-02 8.37620916e-02 + 8.34909965e-02 8.32192302e-02 8.29467950e-02 8.26736929e-02 8.23999262e-02 + 8.21254970e-02 8.18504079e-02 8.15746611e-02 8.12982592e-02 8.10212047e-02 + 8.07435002e-02 8.04651484e-02 8.01861521e-02 7.99065141e-02 7.96262372e-02 + 7.93453246e-02 7.90637791e-02 7.87816039e-02 7.84988023e-02 7.82153774e-02 + 7.79313327e-02 7.76466715e-02 7.73613974e-02 7.70755139e-02 7.67890246e-02 + 7.65019334e-02 7.62142440e-02 7.59259604e-02 7.56370865e-02 7.53476263e-02 + 7.50575841e-02 7.47669641e-02 7.44757706e-02 7.41840079e-02 7.38916807e-02 + 7.35987934e-02 7.33053507e-02 7.30113575e-02 7.27168185e-02 7.24217387e-02 + 7.21261231e-02 7.18299768e-02 7.15333051e-02 7.12361133e-02 7.09384067e-02 + 7.06401909e-02 7.03414715e-02 7.00422541e-02 6.97425446e-02 6.94423488e-02 + 6.91416728e-02 6.88405225e-02 6.85389043e-02 6.82368244e-02 6.79342891e-02 + 6.76313050e-02 6.73278787e-02 6.70240169e-02 6.67197264e-02 6.64150140e-02 + 6.61098869e-02 6.58043520e-02 6.54984168e-02 6.51920884e-02 6.48853744e-02 + 6.45782823e-02 6.42708198e-02 6.39629946e-02 6.36548146e-02 6.33462879e-02 + 6.30374225e-02 6.27282267e-02 6.24187088e-02 6.21088773e-02 6.17987406e-02 + 6.14883076e-02 6.11775870e-02 6.08665877e-02 6.05553188e-02 6.02437893e-02 + 5.99320086e-02 5.96199860e-02 5.93077311e-02 5.89952534e-02 5.86825627e-02 + 5.83696689e-02 5.80565818e-02 5.77433118e-02 5.74298688e-02 5.71162634e-02 + 5.68025058e-02 5.64886069e-02 5.61745771e-02 5.58604274e-02 5.55461687e-02 + 5.52318121e-02 5.49173687e-02 5.46028499e-02 5.42882672e-02 5.39736321e-02 + 5.36589562e-02 5.33442514e-02 5.30295296e-02 5.27148029e-02 5.24000835e-02 + 5.20853836e-02 5.17707158e-02 5.14560924e-02 5.11415263e-02 5.08270302e-02 + 5.05126170e-02 5.01982998e-02 4.98840918e-02 4.95700061e-02 4.92560564e-02 + 4.89422560e-02 4.86286186e-02 4.83151580e-02 4.80018882e-02 4.76888231e-02 + 4.73759769e-02 4.70633638e-02 4.67509982e-02 4.64388946e-02 4.61270676e-02 + 4.58155320e-02 4.55043026e-02 4.51933944e-02 4.48828225e-02 4.45726020e-02 + 4.42627483e-02 4.39532767e-02 4.36442030e-02 4.33355426e-02 4.30273114e-02 + 4.27195253e-02 4.24122002e-02 4.21053521e-02 4.17989974e-02 4.14931524e-02 + 4.11878333e-02 4.08830568e-02 4.05788395e-02 4.02751981e-02 3.99721494e-02 + 3.96697104e-02 3.93678979e-02 3.90667293e-02 3.87662217e-02 3.84663923e-02 + 3.81672586e-02 3.78688381e-02 3.75711484e-02 3.72742070e-02 3.69780319e-02 + 3.66826407e-02 3.63880515e-02 3.60942822e-02 3.58013509e-02 3.55092758e-02 + 3.52180750e-02 3.49277670e-02 3.46383700e-02 3.43499026e-02 3.40623832e-02 + 3.37758304e-02 3.34902629e-02 3.32056994e-02 3.29221586e-02 3.26396593e-02 + 3.23582205e-02 3.20778611e-02 3.17986000e-02 3.15204562e-02 3.12434489e-02 + 3.09675972e-02 3.06929202e-02 3.04194370e-02 3.01471670e-02 2.98761294e-02 + 2.96063435e-02 2.93378286e-02 2.90706040e-02 2.88046891e-02 2.85401033e-02 + 2.82768660e-02 2.80149966e-02 2.77545145e-02 2.74954392e-02 2.72377901e-02 + 2.69815866e-02 2.67268481e-02 2.64735941e-02 2.62218441e-02 2.59716174e-02 + 2.57229334e-02 2.54758115e-02 2.52302711e-02 2.49863315e-02 2.47440120e-02 + 2.45033320e-02 2.42643105e-02 2.40269669e-02 2.37913204e-02 2.35573900e-02 + 2.33251949e-02 2.30947540e-02 2.28660864e-02 2.26392110e-02 2.24141466e-02 + 2.21909120e-02 2.19695260e-02 2.17500072e-02 2.15323742e-02 2.13166455e-02 + 2.11028396e-02 2.08909747e-02 2.06810691e-02 2.04731411e-02 2.02672086e-02 + 2.00632896e-02 1.98614019e-02 1.96615634e-02 1.94637917e-02 1.92681043e-02 + 1.90745186e-02 1.88830519e-02 1.86937213e-02 1.85065440e-02 1.83215368e-02 + 1.81387165e-02 1.79580998e-02 1.77797030e-02 1.76035426e-02 1.74296348e-02 + 1.72579956e-02 1.70886409e-02 1.69215864e-02 1.67568478e-02 1.65944402e-02 + 1.64343791e-02 1.62766795e-02 1.61213562e-02 1.59684240e-02 1.58178973e-02 + 1.56697904e-02 1.55241176e-02 1.53808927e-02 1.52401295e-02 1.51018416e-02 + 1.49660422e-02 1.48327446e-02 1.47019616e-02 1.45737059e-02 1.44479901e-02 + 1.43248264e-02 1.42042269e-02 1.40862035e-02 1.39707676e-02 1.38579308e-02 + 1.37477041e-02 1.36400985e-02 1.35351246e-02 1.34327929e-02 1.33331135e-02 + 1.32360964e-02 1.31417514e-02 1.30500877e-02 1.29611147e-02 1.28748412e-02 + 1.27912760e-02 1.27104274e-02 1.26323037e-02 1.25569127e-02 1.24842620e-02 + 1.24143590e-02 1.23472109e-02 1.22828243e-02 1.22212060e-02 1.21623621e-02 + 1.21062986e-02 1.20530213e-02 1.20025356e-02 1.19548467e-02 1.19099595e-02 + 1.18678785e-02 1.18286081e-02 1.17921522e-02 1.17585148e-02 1.17276991e-02 + 1.16997084e-02 1.16745455e-02 1.16522130e-02 1.16327133e-02 1.16160484e-02 + 1.16022198e-02 1.15912292e-02 1.15830776e-02 1.15777658e-02 1.15752944e-02 + 1.15756637e-02 1.15788736e-02 1.15849238e-02 1.15938137e-02 1.16055423e-02 + 1.16201084e-02 1.16375106e-02 1.16577471e-02 1.16808156e-02 1.17067140e-02 + 1.17354395e-02 1.17669892e-02 1.18013598e-02 1.18385478e-02 1.18785493e-02 + 1.19213604e-02 1.19669765e-02 1.20153931e-02 1.20666051e-02 1.21206073e-02 + 1.21773942e-02 1.22369601e-02 1.22992988e-02 1.23644040e-02 1.24322691e-02 + 1.25028871e-02 1.25762510e-02 1.26523533e-02 1.27311863e-02 1.28127420e-02 + 1.28970121e-02 1.29839883e-02 1.30736618e-02 1.31660235e-02 1.32610642e-02 + 1.33587744e-02 1.34591444e-02 1.35621641e-02 1.36678232e-02 1.37761113e-02 + 1.38870177e-02 1.40005314e-02 1.41166411e-02 1.42353355e-02 1.43566028e-02 + 1.44804312e-02 1.46068085e-02 1.47357225e-02 1.48671606e-02 1.50011099e-02 + 1.51375576e-02 1.52764904e-02 1.54178949e-02 1.55617576e-02 1.57080646e-02 + 1.58568020e-02 1.60079555e-02 1.61615108e-02 1.63174534e-02 1.64757685e-02 + 1.66364411e-02 1.67994562e-02 1.69647985e-02 1.71324525e-02 1.73024027e-02 + 1.74746333e-02 1.76491283e-02 1.78258717e-02 1.80048472e-02 1.81860385e-02 + 1.83694290e-02 1.85550020e-02 1.87427408e-02 1.89326284e-02 1.91246477e-02 + 1.93187815e-02 1.95150125e-02 1.97133233e-02 1.99136963e-02 2.01161138e-02 + 2.03205580e-02 2.05270111e-02 2.07354551e-02 2.09458718e-02 2.11582431e-02 + 2.13725507e-02 2.15887763e-02 2.18069014e-02 2.20269075e-02 2.22487759e-02 + 2.24724880e-02 2.26980251e-02 2.29253683e-02 2.31544988e-02 2.33853976e-02 + 2.36180458e-02 2.38524242e-02 2.40885138e-02 2.43262955e-02 2.45657500e-02 + 2.48068582e-02 2.50496007e-02 2.52939584e-02 2.55399119e-02 2.57874418e-02 + 2.60365287e-02 2.62871534e-02 2.65392963e-02 2.67929381e-02 2.70480593e-02 + 2.73046406e-02 2.75626624e-02 2.78221053e-02 2.80829500e-02 2.83451769e-02 + 2.86087667e-02 2.88736999e-02 2.91399572e-02 2.94075191e-02 2.96763664e-02 + 2.99464796e-02 3.02178395e-02 3.04904267e-02 3.07642221e-02 3.10392064e-02 + 3.13153605e-02 3.15926651e-02 3.18711011e-02 3.21506496e-02 3.24312916e-02 + 3.27130079e-02 3.29957798e-02 3.32795883e-02 3.35644146e-02 3.38502401e-02 + 3.41370460e-02 3.44248137e-02 3.47135246e-02 3.50031602e-02 3.52937021e-02 + 3.55851319e-02 3.58774314e-02 3.61705823e-02 3.64645665e-02 3.67593660e-02 + 3.70549627e-02 3.73513388e-02 3.76484764e-02 3.79463579e-02 3.82449655e-02 + 3.85442817e-02 3.88442891e-02 3.91449703e-02 3.94463079e-02 3.97482849e-02 + 4.00508841e-02 4.03540886e-02 4.06578813e-02 4.09622456e-02 4.12671648e-02 + 4.15726221e-02 4.18786013e-02 4.21850858e-02 4.24920594e-02 4.27995060e-02 + 4.31074094e-02 4.34157537e-02 4.37245230e-02 4.40337017e-02 4.43432741e-02 + 4.46532246e-02 4.49635380e-02 4.52741988e-02 4.55851920e-02 4.58965024e-02 + 4.62081152e-02 4.65200155e-02 4.68321886e-02 4.71446199e-02 4.74572950e-02 + 4.77701996e-02 4.80833192e-02 4.83966400e-02 4.87101479e-02 4.90238289e-02 + 4.93376695e-02 4.96516559e-02 4.99657746e-02 5.02800123e-02 5.05943557e-02 + 5.09087917e-02 5.12233073e-02 5.15378895e-02 5.18525256e-02 5.21672030e-02 + 5.24819092e-02 5.27966317e-02 5.31113583e-02 5.34260768e-02 5.37407752e-02 + 5.40554416e-02 5.43700642e-02 5.46846314e-02 5.49991317e-02 5.53135536e-02 + 5.56278858e-02 5.59421172e-02 5.62562368e-02 5.65702336e-02 5.68840968e-02 + 5.71978158e-02 5.75113800e-02 5.78247790e-02 5.81380025e-02 5.84510402e-02 + 5.87638822e-02 5.90765185e-02 5.93889392e-02 5.97011346e-02 6.00130952e-02 + 6.03248115e-02 6.06362741e-02 6.09474738e-02 6.12584015e-02 6.15690482e-02 + 6.18794050e-02 6.21894631e-02 6.24992140e-02 6.28086489e-02 6.31177596e-02 + 6.34265377e-02 6.37349751e-02 6.40430636e-02 6.43507952e-02 6.46581622e-02 + 6.49651567e-02 6.52717712e-02 6.55779981e-02 6.58838299e-02 6.61892594e-02 + 6.64942794e-02 6.67988828e-02 6.71030625e-02 6.74068117e-02 6.77101237e-02 + 6.80129917e-02 6.83154092e-02 6.86173697e-02 6.89188669e-02 6.92198944e-02 + 6.95204462e-02 6.98205161e-02 7.01200982e-02 7.04191867e-02 7.07177757e-02 + 7.10158596e-02 7.13134329e-02 7.16104900e-02 7.19070256e-02 7.22030344e-02 + 7.24985112e-02 7.27934509e-02 7.30878484e-02 7.33816990e-02 7.36749977e-02 + 7.39677398e-02 7.42599207e-02 7.45515358e-02 7.48425807e-02 7.51330509e-02 + 7.54229421e-02 7.57122502e-02 7.60009711e-02 7.62891006e-02 7.65766348e-02 + 7.68635699e-02 7.71499020e-02 7.74356274e-02 7.77207425e-02 7.80052438e-02 + 7.82891277e-02 7.85723908e-02 7.88550299e-02 7.91370416e-02 7.94184229e-02 + 7.96991705e-02 7.99792815e-02 8.02587530e-02 8.05375820e-02 8.08157657e-02 + 8.10933015e-02 8.13701866e-02 8.16464184e-02 8.19219944e-02 8.21969122e-02 + 8.24711693e-02 8.27447635e-02 8.30176924e-02 8.32899539e-02 8.35615458e-02 + 8.38324661e-02 8.41027128e-02 8.43722839e-02 8.46411775e-02 8.49093918e-02 + 8.51769250e-02 8.54437756e-02 8.57099417e-02 8.59754218e-02 8.62402144e-02 + 8.65043180e-02 8.67677312e-02 8.70304527e-02 8.72924810e-02 8.75538151e-02 + 8.78144536e-02 8.80743954e-02 8.83336395e-02 8.85921847e-02 8.88500302e-02 + 8.91071748e-02 8.93636178e-02 8.96193583e-02 8.98743956e-02 9.01287287e-02 + 9.03823571e-02 9.06352801e-02 9.08874971e-02 9.11390074e-02 9.13898107e-02 + 9.16399063e-02 9.18892939e-02 9.21379731e-02 9.23859434e-02 9.26332047e-02 + 9.28797566e-02 9.31255989e-02 9.33707315e-02 9.36151540e-02 9.38588666e-02 + 9.41018690e-02 9.43441612e-02 9.45857433e-02 9.48266152e-02 9.50667771e-02 + 9.53062290e-02 9.55449711e-02 9.57830036e-02 9.60203266e-02 9.62569405e-02 + 9.64928454e-02 9.67280417e-02 9.69625298e-02 9.71963100e-02 9.74293827e-02 + 9.76617483e-02 9.78934074e-02 9.81243603e-02 9.83546076e-02 9.85841499e-02 + 9.88129878e-02 9.90411218e-02 9.92685525e-02 9.94952807e-02 9.97213070e-02 + 9.99466321e-02 1.00171257e-01 1.00395182e-01 1.00618408e-01 1.00840936e-01 + 1.01062766e-01 1.01283901e-01 1.01504340e-01 1.01724084e-01 1.01943134e-01 + 1.02161492e-01 1.02379158e-01 1.02596133e-01 1.02812418e-01 1.03028014e-01 + 1.03242923e-01 1.03457145e-01 1.03670682e-01 1.03883534e-01 1.04095702e-01 + 1.04307189e-01 1.04517994e-01 1.04728119e-01 1.04937566e-01 1.05146335e-01 + 1.05354428e-01 1.05561846e-01 1.05768590e-01 1.05974662e-01 1.06180062e-01 + 1.06384793e-01 1.06588855e-01 1.06792249e-01 1.06994978e-01 1.07197042e-01 + 1.07398443e-01 1.07599182e-01 1.07799261e-01 1.07998680e-01 1.08197442e-01 + 1.08395548e-01 1.08592999e-01 1.08789797e-01 1.08985943e-01 1.09181439e-01 + 1.09376286e-01 1.09570485e-01 1.09764039e-01 1.09956948e-01 1.10149214e-01 + 1.10340840e-01 1.10531825e-01 1.10722172e-01 1.10911883e-01 1.11100959e-01 + 1.11289401e-01 1.11477211e-01 1.11664391e-01 1.11850942e-01 1.12036866e-01 + 1.12222165e-01 1.12406840e-01 1.12590892e-01 1.12774325e-01 1.12957138e-01 + 1.13139333e-01 1.13320913e-01 1.13501880e-01 1.13682233e-01 1.13861976e-01 + 1.14041111e-01 1.14219637e-01 1.14397559e-01 1.14574876e-01 1.14751591e-01 + 1.14927705e-01 1.15103221e-01 1.15278139e-01 1.15452462e-01 1.15626191e-01 + 1.15799328e-01 1.15971875e-01 1.16143834e-01 1.16315205e-01 1.16485991e-01 + 1.16656194e-01 1.16825815e-01 1.16994856e-01 1.17163320e-01 1.17331206e-01 + 1.17498518e-01 1.17665257e-01 1.17831424e-01 1.17997022e-01 1.18162053e-01 + 1.18326517e-01 1.18490417e-01 1.18653754e-01 1.18816531e-01 1.18978749e-01 + 1.19140409e-01 1.19301514e-01 1.19462065e-01 1.19622064e-01 1.19781513e-01 + 1.19940414e-01 1.20098767e-01 1.20256576e-01 1.20413841e-01 1.20570565e-01 + 1.20726749e-01 1.20882395e-01 1.21037505e-01 1.21192080e-01 1.21346123e-01 + 1.21499635e-01 1.21652617e-01 1.21805072e-01 1.21957001e-01 1.22108406e-01 + 1.22259289e-01 1.22409651e-01 1.22559495e-01 1.22708821e-01 1.22857632e-01 + 1.23005930e-01 1.23153715e-01 1.23300991e-01 1.23447758e-01 1.23594019e-01 + 1.23739774e-01 1.23885027e-01 1.24029777e-01 1.24174028e-01 1.24317781e-01 + 1.24461038e-01 1.24603800e-01 1.24746069e-01 1.24887847e-01 1.25029136e-01 + 1.25169936e-01 1.25310251e-01 1.25450081e-01 1.25589428e-01 1.25728294e-01 + 1.25866681e-01 1.26004590e-01 1.26142024e-01 1.26278983e-01 1.26415469e-01 + 1.26551484e-01 1.26687030e-01 1.26822109e-01 1.26956721e-01 1.27090870e-01 + 1.27224555e-01 1.27357780e-01 1.27490545e-01 1.27622852e-01 1.27754704e-01 + 1.27886101e-01 1.28017045e-01 1.28147538e-01 1.28277582e-01 1.28407177e-01 + 1.28536327e-01 1.28665031e-01 1.28793293e-01 1.28921113e-01 1.29048493e-01 + 1.29175435e-01 1.29301941e-01 1.29428011e-01 1.29553648e-01 1.29678853e-01 + 1.29803627e-01 1.29927973e-01 1.30051892e-01 1.30175385e-01 1.30298454e-01 + 1.30421101e-01 1.30543327e-01 1.30665133e-01 1.30786522e-01 1.30907494e-01 + 1.31028051e-01 1.31148196e-01 1.31267929e-01 1.31387251e-01 1.31506165e-01 + 1.31624672e-01 1.31742773e-01 1.31860470e-01 1.31977765e-01 1.32094658e-01 + 1.32211152e-01 1.32327248e-01 1.32442947e-01 1.32558252e-01 1.32673162e-01 + 1.32787680e-01 1.32901808e-01 1.33015546e-01 1.33128897e-01 1.33241861e-01 + 1.33354441e-01 1.33466637e-01 1.33578451e-01 1.33689884e-01 1.33800939e-01 + 1.33911615e-01 1.34021916e-01 1.34131841e-01 1.34241394e-01 1.34350574e-01 + 1.34459383e-01 1.34567824e-01 1.34675896e-01 1.34783602e-01 1.34890944e-01 + 1.34997921e-01 1.35104536e-01 1.35210791e-01 1.35316685e-01 1.35422222e-01 + 1.35527402e-01 1.35632226e-01 1.35736697e-01 1.35840814e-01 1.35944580e-01 + 1.36047997e-01 1.36151064e-01 1.36253784e-01 1.36356158e-01 1.36458187e-01 + 1.36559873e-01 1.36661216e-01 1.36762219e-01 1.36862882e-01 1.36963207e-01 + 1.37063195e-01 1.37162847e-01 1.37262165e-01 1.37361150e-01 1.37459803e-01 + 1.37558126e-01 1.37656119e-01 1.37753784e-01 1.37851123e-01 1.37948136e-01 + 1.38044824e-01 1.38141190e-01 1.38237233e-01 1.38332957e-01 1.38428361e-01 + 1.38523446e-01 1.38618215e-01 1.38712668e-01 1.38806807e-01 1.38900633e-01 + 1.38994146e-01 1.39087349e-01 1.39180241e-01 1.39272826e-01 1.39365103e-01 + 1.39457074e-01 1.39548740e-01 1.39640102e-01 1.39731162e-01 1.39821920e-01 + 1.39912378e-01 1.40002537e-01 1.40092398e-01 1.40181961e-01 1.40271230e-01 + 1.40360203e-01 1.40448884e-01 1.40537272e-01 1.40625368e-01 1.40713175e-01 + 1.40800693e-01 1.40887923e-01 1.40974866e-01 1.41061523e-01 1.41147896e-01 + 1.41233986e-01 1.41319793e-01 1.41405319e-01 1.41490565e-01 1.41575532e-01 + 1.41660220e-01 1.41744632e-01 1.41828768e-01 1.41912628e-01 1.41996216e-01 + 1.42079530e-01 1.42162572e-01 1.42245344e-01 1.42327847e-01 1.42410081e-01 + 1.42492047e-01 1.42573747e-01 1.42655181e-01 1.42736351e-01 1.42817257e-01 + 1.42897901e-01 1.42978283e-01 1.43058405e-01 1.43138268e-01 1.43217872e-01 + 1.43297218e-01 1.43376309e-01 1.43455143e-01 1.43533723e-01 1.43612050e-01 + 1.43690124e-01 1.43767947e-01 1.43845519e-01 1.43922841e-01 1.43999914e-01 + 1.44076740e-01 1.44153319e-01 1.44229652e-01 1.44305740e-01 1.44381584e-01 + 1.44457185e-01 1.44532544e-01 1.44607662e-01 1.44682539e-01 1.44757177e-01 + 1.44831577e-01 1.44905739e-01 1.44979665e-01 1.45053355e-01 1.45126809e-01 + 1.45200031e-01 1.45273019e-01 1.45345774e-01 1.45418299e-01 1.45490593e-01 + 1.45562658e-01 1.45634494e-01 1.45706102e-01 1.45777484e-01 1.45848639e-01 + 1.45919569e-01 1.45990275e-01 1.46060758e-01 1.46131018e-01 1.46201056e-01 + 1.46270873e-01 1.46340470e-01 1.46409848e-01 1.46479008e-01 1.46547950e-01 + 1.46616675e-01 1.46685184e-01 1.46753479e-01 1.46821558e-01 1.46889425e-01 + 1.46957079e-01 1.47024520e-01 1.47091751e-01 1.47158772e-01 1.47225583e-01 + 1.47292185e-01 1.47358580e-01 1.47424768e-01 1.47490749e-01 1.47556524e-01 + 1.47622095e-01 1.47687462e-01 1.47752626e-01 1.47817587e-01 1.47882347e-01 + 1.19316516e-02 1.17837661e-02 1.16368916e-02 1.14910312e-02 1.13461881e-02 + 1.12023652e-02 1.10595657e-02 1.09177924e-02 1.07770486e-02 1.06373371e-02 + 1.04986608e-02 1.03610229e-02 1.02244262e-02 1.00888736e-02 9.95436796e-03 + 9.82091227e-03 9.68850936e-03 9.55716205e-03 9.42687318e-03 9.29764555e-03 + 9.16948195e-03 9.04238514e-03 8.91635788e-03 8.79140288e-03 8.66752287e-03 + 8.54472052e-03 8.42299850e-03 8.30235947e-03 8.18280604e-03 8.06434082e-03 + 7.94696640e-03 7.83068535e-03 7.71550020e-03 7.60141348e-03 7.48842769e-03 + 7.37654531e-03 7.26576880e-03 7.15610060e-03 7.04754311e-03 6.94009874e-03 + 6.83376985e-03 6.72855879e-03 6.62446789e-03 6.52149946e-03 6.41965576e-03 + 6.31893907e-03 6.21935162e-03 6.12089562e-03 6.02357326e-03 5.92738670e-03 + 5.83233810e-03 5.73842957e-03 5.64566320e-03 5.55404108e-03 5.46356524e-03 + 5.37423772e-03 5.28606051e-03 5.19903560e-03 5.11316493e-03 5.02845043e-03 + 4.94489402e-03 4.86249756e-03 4.78126291e-03 4.70119191e-03 4.62228636e-03 + 4.54454803e-03 4.46797870e-03 4.39258007e-03 4.31835387e-03 4.24530177e-03 + 4.17342543e-03 4.10272646e-03 4.03320649e-03 3.96486708e-03 3.89770979e-03 + 3.83173614e-03 3.76694764e-03 3.70334576e-03 3.64093194e-03 3.57970760e-03 + 3.51967415e-03 3.46083296e-03 3.40318535e-03 3.34673266e-03 3.29147617e-03 + 3.23741715e-03 3.18455682e-03 3.13289641e-03 3.08243708e-03 3.03318001e-03 + 2.98512631e-03 2.93827709e-03 2.89263342e-03 2.84819635e-03 2.80496690e-03 + 2.76294607e-03 2.72213481e-03 2.68253407e-03 2.64414475e-03 2.60696775e-03 + 2.57100391e-03 2.53625406e-03 2.50271900e-03 2.47039951e-03 2.43929633e-03 + 2.40941017e-03 2.38074173e-03 2.35329167e-03 2.32706061e-03 2.30204917e-03 + 2.27825792e-03 2.25568742e-03 2.23433817e-03 2.21421068e-03 2.19530540e-03 + 2.17762279e-03 2.16116324e-03 2.14592713e-03 2.13191482e-03 2.11912664e-03 + 2.10756286e-03 2.09722378e-03 2.08810961e-03 2.08022058e-03 2.07355687e-03 + 2.06811863e-03 2.06390598e-03 2.06091903e-03 2.05915784e-03 2.05862245e-03 + 2.05931288e-03 2.06122911e-03 2.06437109e-03 2.06873876e-03 2.07433201e-03 + 2.08115071e-03 2.08919471e-03 2.09846382e-03 2.10895782e-03 2.12067647e-03 + 2.13361950e-03 2.14778662e-03 2.16317748e-03 2.17979175e-03 2.19762903e-03 + 2.21668892e-03 2.23697097e-03 2.25847471e-03 2.28119965e-03 2.30514526e-03 + 2.33031099e-03 2.35669626e-03 2.38430046e-03 2.41312296e-03 2.44316308e-03 + 2.47442014e-03 2.50689342e-03 2.54058217e-03 2.57548561e-03 2.61160294e-03 + 2.64893333e-03 2.68747592e-03 2.72722982e-03 2.76819412e-03 2.81036787e-03 + 2.85375012e-03 2.89833986e-03 2.94413606e-03 2.99113769e-03 3.03934365e-03 + 3.08875285e-03 3.13936416e-03 3.19117640e-03 3.24418841e-03 3.29839896e-03 + 3.35380682e-03 3.41041071e-03 3.46820936e-03 3.52720143e-03 3.58738558e-03 + 3.64876043e-03 3.71132460e-03 3.77507665e-03 3.84001514e-03 3.90613858e-03 + 3.97344547e-03 4.04193428e-03 4.11160346e-03 4.18245143e-03 4.25447658e-03 + 4.32767727e-03 4.40205185e-03 4.47759865e-03 4.55431593e-03 4.63220199e-03 + 4.71125505e-03 4.79147333e-03 4.87285502e-03 4.95539830e-03 5.03910129e-03 + 5.12396213e-03 5.20997890e-03 5.29714966e-03 5.38547247e-03 5.47494535e-03 + 5.56556628e-03 5.65733324e-03 5.75024419e-03 5.84429703e-03 5.93948968e-03 + 6.03582001e-03 6.13328588e-03 6.23188511e-03 6.33161551e-03 6.43247487e-03 + 6.53446095e-03 6.63757148e-03 6.74180419e-03 6.84715676e-03 6.95362687e-03 + 7.06121216e-03 7.16991026e-03 7.27971878e-03 7.39063530e-03 7.50265737e-03 + 7.61578255e-03 7.73000833e-03 7.84533223e-03 7.96175172e-03 8.07926424e-03 + 8.19786724e-03 8.31755813e-03 8.43833428e-03 8.56019309e-03 8.68313189e-03 + 8.80714802e-03 8.93223879e-03 9.05840148e-03 9.18563337e-03 9.31393170e-03 + 9.44329371e-03 9.57371661e-03 9.70519759e-03 9.83773382e-03 9.97132246e-03 + 1.01059606e-02 1.02416455e-02 1.03783741e-02 1.05161435e-02 1.06549508e-02 + 1.07947931e-02 1.09356673e-02 1.10775705e-02 1.12204997e-02 1.13644517e-02 + 1.15094237e-02 1.16554125e-02 1.18024151e-02 1.19504282e-02 1.20994490e-02 + 1.22494741e-02 1.24005005e-02 1.25525250e-02 1.27055444e-02 1.28595555e-02 + 1.30145552e-02 1.31705401e-02 1.33275071e-02 1.34854528e-02 1.36443741e-02 + 1.38042677e-02 1.39651301e-02 1.41269582e-02 1.42897485e-02 1.44534978e-02 + 1.46182027e-02 1.47838598e-02 1.49504657e-02 1.51180170e-02 1.52865103e-02 + 1.54559422e-02 1.56263093e-02 1.57976080e-02 1.59698349e-02 1.61429866e-02 + 1.63170596e-02 1.64920502e-02 1.66679551e-02 1.68447707e-02 1.70224935e-02 + 1.72011198e-02 1.73806462e-02 1.75610691e-02 1.77423848e-02 1.79245899e-02 + 1.81076806e-02 1.82916533e-02 1.84765045e-02 1.86622305e-02 1.88488276e-02 + 1.90362922e-02 1.92246206e-02 1.94138091e-02 1.96038541e-02 1.97947518e-02 + 1.99864985e-02 2.01790905e-02 2.03725242e-02 2.05667957e-02 2.07619013e-02 + 2.09578372e-02 2.11545998e-02 2.13521852e-02 2.15505896e-02 2.17498093e-02 + 2.19498405e-02 2.21506794e-02 2.23523222e-02 2.25547650e-02 2.27580040e-02 + 2.29620355e-02 2.31668555e-02 2.33724603e-02 2.35788460e-02 2.37860087e-02 + 2.39939446e-02 2.42026499e-02 2.44121205e-02 2.46223528e-02 2.48333427e-02 + 2.50450864e-02 2.52575801e-02 2.54708198e-02 2.56848016e-02 2.58995216e-02 + 2.61149759e-02 2.63311606e-02 2.65480717e-02 2.67657054e-02 2.69840578e-02 + 2.72031248e-02 2.74229026e-02 2.76433871e-02 2.78645746e-02 2.80864610e-02 + 2.83090425e-02 2.85323149e-02 2.87562745e-02 2.89809172e-02 2.92062390e-02 + 2.94322361e-02 2.96589045e-02 2.98862402e-02 3.01142392e-02 3.03428976e-02 + 3.05722114e-02 3.08021766e-02 3.10327893e-02 3.12640455e-02 3.14959413e-02 + 3.17284726e-02 3.19616355e-02 3.21954260e-02 3.24298402e-02 3.26648740e-02 + 3.29005236e-02 3.31367848e-02 3.33736539e-02 3.36111267e-02 3.38491993e-02 + 3.40878677e-02 3.43271281e-02 3.45669763e-02 3.48074084e-02 3.50484206e-02 + 3.52900087e-02 3.55321689e-02 3.57748971e-02 3.60181895e-02 3.62620420e-02 + 3.65064508e-02 3.67514117e-02 3.69969210e-02 3.72429746e-02 3.74895686e-02 + 3.77366991e-02 3.79843621e-02 3.82325537e-02 3.84812698e-02 3.87305067e-02 + 3.89802604e-02 3.92305269e-02 3.94813024e-02 3.97325829e-02 3.99843644e-02 + 4.02366431e-02 4.04894151e-02 4.07426765e-02 4.09964234e-02 4.12506518e-02 + 4.15053579e-02 4.17605378e-02 4.20161876e-02 4.22723034e-02 4.25288815e-02 + 4.27859178e-02 4.30434086e-02 4.33013499e-02 4.35597380e-02 4.38185689e-02 + 4.40778389e-02 4.43375441e-02 4.45976807e-02 4.48582449e-02 4.51192328e-02 + 4.53806406e-02 4.56424645e-02 4.59047007e-02 4.61673455e-02 4.64303950e-02 + 4.66938455e-02 4.69576932e-02 4.72219342e-02 4.74865650e-02 4.77515816e-02 + 4.80169804e-02 4.82827576e-02 4.85489095e-02 4.88154324e-02 4.90823225e-02 + 4.93495761e-02 4.96171896e-02 4.98851592e-02 5.01534812e-02 5.04221520e-02 + 5.06911679e-02 5.09605252e-02 5.12302202e-02 5.15002494e-02 5.17706091e-02 + 5.20412956e-02 5.23123054e-02 5.25836347e-02 5.28552801e-02 5.31272378e-02 + 5.33995044e-02 5.36720762e-02 5.39449496e-02 5.42181211e-02 5.44915872e-02 + 5.47653442e-02 5.50393887e-02 5.53137171e-02 5.55883259e-02 5.58632116e-02 + 5.61383707e-02 5.64137997e-02 5.66894951e-02 5.69654535e-02 5.72416713e-02 + 5.75181451e-02 5.77948716e-02 5.80718471e-02 5.83490684e-02 5.86265320e-02 + 5.89042345e-02 5.91821725e-02 5.94603427e-02 5.97387415e-02 6.00173658e-02 + 6.02962120e-02 6.05752770e-02 6.08545573e-02 6.11340496e-02 6.14137506e-02 + 6.16936570e-02 6.19737655e-02 6.22540729e-02 6.25345758e-02 6.28152709e-02 + 6.30961552e-02 6.33772252e-02 6.36584778e-02 6.39399097e-02 6.42215178e-02 + 6.45032988e-02 6.47852496e-02 6.50673669e-02 6.53496477e-02 6.56320887e-02 + 6.59146868e-02 6.61974389e-02 6.64803419e-02 6.67633926e-02 6.70465880e-02 + 6.73299249e-02 6.76134004e-02 6.78970112e-02 6.81807545e-02 6.84646270e-02 + 6.87486259e-02 6.90327480e-02 6.93169904e-02 6.96013501e-02 6.98858240e-02 + 7.01704093e-02 7.04551029e-02 7.07399019e-02 7.10248033e-02 7.13098043e-02 + 7.15949019e-02 7.18800932e-02 7.21653753e-02 7.24507453e-02 7.27362004e-02 + 7.30217377e-02 7.33073544e-02 7.35930475e-02 7.38788144e-02 7.41646521e-02 + 7.44505580e-02 7.47365291e-02 7.50225627e-02 7.53086561e-02 7.55948066e-02 + 7.58810112e-02 7.61672674e-02 7.64535724e-02 7.67399235e-02 7.70263181e-02 + 7.73127534e-02 7.75992267e-02 7.78857354e-02 7.81722770e-02 7.84588486e-02 + 7.87454477e-02 7.90320718e-02 7.93187181e-02 7.96053841e-02 7.98920673e-02 + 8.01787651e-02 8.04654749e-02 8.07521941e-02 8.10389204e-02 8.13256510e-02 + 8.16123836e-02 8.18991157e-02 8.21858447e-02 8.24725683e-02 8.27592839e-02 + 8.30459891e-02 8.33326815e-02 8.36193586e-02 8.39060181e-02 8.41926576e-02 + 8.44792746e-02 8.47658669e-02 8.50524319e-02 8.53389675e-02 8.56254713e-02 + 8.59119408e-02 8.61983740e-02 8.64847683e-02 8.67711216e-02 8.70574315e-02 + 8.73436959e-02 8.76299124e-02 8.79160788e-02 8.82021929e-02 8.84882524e-02 + 8.87742552e-02 8.90601991e-02 8.93460819e-02 8.96319014e-02 8.99176554e-02 + 9.02033419e-02 9.04889586e-02 9.07745035e-02 9.10599745e-02 9.13453694e-02 + 9.16306861e-02 9.19159227e-02 9.22010770e-02 9.24861469e-02 9.27711305e-02 + 9.30560257e-02 9.33408305e-02 9.36255428e-02 9.39101607e-02 9.41946823e-02 + 9.44791055e-02 9.47634283e-02 9.50476489e-02 9.53317653e-02 9.56157755e-02 + 9.58996777e-02 9.61834699e-02 9.64671503e-02 9.67507170e-02 9.70341681e-02 + 9.73175018e-02 9.76007161e-02 9.78838094e-02 9.81667797e-02 9.84496252e-02 + 9.87323442e-02 9.90149348e-02 9.92973954e-02 9.95797240e-02 9.98619190e-02 + 1.00143979e-01 1.00425901e-01 1.00707685e-01 1.00989328e-01 1.01270829e-01 + 1.01552185e-01 1.01833397e-01 1.02114461e-01 1.02395376e-01 1.02676140e-01 + 1.02956752e-01 1.03237211e-01 1.03517513e-01 1.03797659e-01 1.04077646e-01 + 1.04357473e-01 1.04637138e-01 1.04916640e-01 1.05195977e-01 1.05475147e-01 + 1.05754150e-01 1.06032982e-01 1.06311644e-01 1.06590134e-01 1.06868449e-01 + 1.07146589e-01 1.07424552e-01 1.07702336e-01 1.07979941e-01 1.08257365e-01 + 1.08534605e-01 1.08811662e-01 1.09088533e-01 1.09365218e-01 1.09641714e-01 + 1.09918020e-01 1.10194135e-01 1.10470058e-01 1.10745788e-01 1.11021322e-01 + 1.11296660e-01 1.11571800e-01 1.11846741e-01 1.12121482e-01 1.12396021e-01 + 1.12670358e-01 1.12944490e-01 1.13218418e-01 1.13492138e-01 1.13765651e-01 + 1.14038955e-01 1.14312048e-01 1.14584930e-01 1.14857599e-01 1.15130055e-01 + 1.15402295e-01 1.15674319e-01 1.15946126e-01 1.16217714e-01 1.16489083e-01 + 1.16760231e-01 1.17031157e-01 1.17301860e-01 1.17572339e-01 1.17842593e-01 + 1.18112620e-01 1.18382420e-01 1.18651992e-01 1.18921334e-01 1.19190445e-01 + 1.19459326e-01 1.19727973e-01 1.19996387e-01 1.20264566e-01 1.20532510e-01 + 1.20800216e-01 1.21067686e-01 1.21334917e-01 1.21601908e-01 1.21868658e-01 + 1.22135167e-01 1.22401434e-01 1.22667458e-01 1.22933237e-01 1.23198771e-01 + 1.23464058e-01 1.23729099e-01 1.23993892e-01 1.24258436e-01 1.24522731e-01 + 1.24786775e-01 1.25050567e-01 1.25314108e-01 1.25577395e-01 1.25840428e-01 + 1.26103207e-01 1.26365730e-01 1.26627997e-01 1.26890006e-01 1.27151758e-01 + 1.27413251e-01 1.27674484e-01 1.27935457e-01 1.28196169e-01 1.28456619e-01 + 1.28716807e-01 1.28976731e-01 1.29236391e-01 1.29495787e-01 1.29754917e-01 + 1.30013780e-01 1.30272377e-01 1.30530707e-01 1.30788768e-01 1.31046560e-01 + 1.31304083e-01 1.31561335e-01 1.31818316e-01 1.32075026e-01 1.32331463e-01 + 1.32587628e-01 1.32843519e-01 1.33099136e-01 1.33354479e-01 1.33609546e-01 + 1.33864337e-01 1.34118851e-01 1.34373088e-01 1.34627048e-01 1.34880730e-01 + 1.35134132e-01 1.35387255e-01 1.35640099e-01 1.35892661e-01 1.36144943e-01 + 1.36396943e-01 1.36648661e-01 1.36900097e-01 1.37151249e-01 1.37402118e-01 + 1.37652702e-01 1.37903003e-01 1.38153017e-01 1.38402747e-01 1.38652190e-01 + 1.38901347e-01 1.39150217e-01 1.39398799e-01 1.39647094e-01 1.39895100e-01 + 1.40142817e-01 1.40390246e-01 1.40637384e-01 1.40884233e-01 1.41130791e-01 + 1.41377059e-01 1.41623035e-01 1.41868719e-01 1.42114112e-01 1.42359212e-01 + 1.42604020e-01 1.42848534e-01 1.43092755e-01 1.43336681e-01 1.43580314e-01 + 1.43823652e-01 1.44066695e-01 1.44309444e-01 1.44551896e-01 1.44794053e-01 + 1.45035913e-01 1.45277477e-01 1.45518744e-01 1.45759714e-01 1.46000386e-01 + 1.46240761e-01 1.46480838e-01 1.46720616e-01 1.46960096e-01 1.47199277e-01 + 1.47438159e-01 1.47676742e-01 1.47915025e-01 1.48153009e-01 1.48390692e-01 + 1.48628075e-01 1.48865157e-01 1.49101939e-01 1.49338419e-01 1.49574598e-01 + 1.49810476e-01 1.50046052e-01 1.50281327e-01 1.50516299e-01 1.50750969e-01 + 1.50985337e-01 1.51219402e-01 1.51453164e-01 1.51686623e-01 1.51919779e-01 + 1.52152632e-01 1.52385181e-01 1.52617427e-01 1.52849368e-01 1.53081006e-01 + 1.53312340e-01 1.53543370e-01 1.53774095e-01 1.54004516e-01 1.54234632e-01 + 1.54464444e-01 1.54693950e-01 1.54923152e-01 1.55152049e-01 1.55380640e-01 + 1.55608926e-01 1.55836907e-01 1.56064583e-01 1.56291953e-01 1.56519017e-01 + 1.56745775e-01 1.56972228e-01 1.57198375e-01 1.57424216e-01 1.57649751e-01 + 1.57874980e-01 1.58099903e-01 1.58324520e-01 1.58548831e-01 1.58772835e-01 + 1.58996533e-01 1.59219925e-01 1.59443010e-01 1.59665790e-01 1.59888262e-01 + 1.60110429e-01 1.60332289e-01 1.60553842e-01 1.60775089e-01 1.60996030e-01 + 1.61216664e-01 1.61436992e-01 1.61657013e-01 1.61876728e-01 1.62096136e-01 + 1.62315238e-01 1.62534034e-01 1.62752523e-01 1.62970706e-01 1.63188582e-01 + 1.63406152e-01 1.63623416e-01 1.63840374e-01 1.64057026e-01 1.64273371e-01 + 1.64489411e-01 1.64705144e-01 1.64920571e-01 1.65135693e-01 1.65350508e-01 + 1.65565018e-01 1.65779222e-01 1.65993121e-01 1.66206714e-01 1.66420001e-01 + 1.66632983e-01 1.66845660e-01 1.67058031e-01 1.67270097e-01 1.67481858e-01 + 1.67693314e-01 1.67904465e-01 1.68115312e-01 1.68325854e-01 1.68536091e-01 + 1.68746023e-01 1.68955652e-01 1.69164976e-01 1.69373996e-01 1.69582712e-01 + 1.69791124e-01 1.69999232e-01 1.70207037e-01 1.70414538e-01 1.70621735e-01 + 1.70828630e-01 1.71035221e-01 1.71241510e-01 1.71447495e-01 1.71653178e-01 + 1.71858558e-01 1.72063636e-01 1.72268412e-01 1.72472886e-01 1.72677057e-01 + 1.72880927e-01 1.73084495e-01 1.73287762e-01 1.73490728e-01 1.73693392e-01 + 1.73895756e-01 1.74097819e-01 1.74299581e-01 1.74501043e-01 1.74702204e-01 + 1.74903066e-01 1.75103627e-01 1.75303889e-01 1.75503852e-01 1.75703515e-01 + 1.75902879e-01 1.76101944e-01 1.76300710e-01 1.76499178e-01 1.76697348e-01 + 1.76895219e-01 1.77092792e-01 1.77290068e-01 1.77487046e-01 1.77683727e-01 + 1.77880111e-01 1.78076198e-01 1.78271989e-01 1.78467483e-01 1.78662680e-01 + 1.78857582e-01 1.79052188e-01 1.79246498e-01 1.79440514e-01 1.79634234e-01 + 1.79827659e-01 1.80020789e-01 1.80213625e-01 1.80406167e-01 1.80598415e-01 + 1.80790370e-01 1.80982031e-01 1.81173398e-01 1.81364473e-01 1.81555255e-01 + 1.81745745e-01 1.81935942e-01 1.82125848e-01 1.82315462e-01 1.82504784e-01 + 1.82693815e-01 1.82882555e-01 1.83071004e-01 1.83259163e-01 1.83447032e-01 + 1.83634611e-01 1.83821900e-01 1.84008900e-01 1.84195611e-01 1.84382033e-01 + 1.84568166e-01 1.84754012e-01 1.84939569e-01 1.85124838e-01 1.85309820e-01 + 1.85494514e-01 1.85678922e-01 1.85863043e-01 1.86046878e-01 1.86230426e-01 + 1.86413689e-01 1.86596666e-01 1.86779358e-01 1.86961765e-01 1.87143887e-01 + 1.87325725e-01 1.87507279e-01 1.87688549e-01 1.87869536e-01 1.88050239e-01 + 1.88230659e-01 1.88410797e-01 1.88590653e-01 1.88770226e-01 1.88949518e-01 + 1.89128528e-01 1.89307257e-01 1.89485705e-01 1.89663873e-01 1.89841761e-01 + 1.90019368e-01 1.90196696e-01 1.90373745e-01 1.90550515e-01 1.90727005e-01 + 1.90903218e-01 1.91079153e-01 1.91254809e-01 1.91430189e-01 1.91605291e-01 + 1.91780116e-01 1.91954665e-01 1.92128937e-01 1.92302934e-01 1.92476655e-01 + 1.92650101e-01 1.92823272e-01 1.92996169e-01 1.93168791e-01 1.93341139e-01 + 1.93513213e-01 1.93685014e-01 1.93856543e-01 1.94027798e-01 1.94198781e-01 + 1.94369492e-01 1.94539932e-01 1.94710100e-01 1.94879997e-01 1.95049623e-01 + 1.95218979e-01 1.95388065e-01 1.95556881e-01 1.95725428e-01 1.95893706e-01 + 1.96061715e-01 1.96229455e-01 1.96396928e-01 1.96564133e-01 1.96731070e-01 + 1.96897741e-01 1.97064144e-01 1.97230282e-01 1.97396153e-01 1.97561758e-01 + 1.97727099e-01 1.97892174e-01 1.98056984e-01 1.98221530e-01 1.98385813e-01 + 1.98549831e-01 1.98713586e-01 1.98877078e-01 1.99040308e-01 1.99203275e-01 + 1.99365980e-01 1.99528424e-01 1.99690606e-01 1.99852528e-01 2.00014188e-01 + 2.00175589e-01 2.00336730e-01 2.00497611e-01 2.00658233e-01 2.00818596e-01 + 2.00978701e-01 2.01138547e-01 2.01298136e-01 2.01457467e-01 2.01616542e-01 + 2.01775359e-01 2.01933920e-01 2.02092225e-01 2.02250274e-01 2.02408068e-01 + 2.02565607e-01 2.02722891e-01 2.02879921e-01 2.03036697e-01 2.03193220e-01 + 2.03349489e-01 2.03505505e-01 2.03661269e-01 2.03816780e-01 2.03972040e-01 + 2.04127048e-01 2.04281805e-01 2.04436312e-01 2.04590568e-01 2.04744573e-01 + 2.04898329e-01 2.05051836e-01 2.05205094e-01 2.05358103e-01 2.05510864e-01 + 2.05663377e-01 2.05815642e-01 2.05967660e-01 2.06119432e-01 2.06270956e-01 + 2.06422235e-01 2.06573268e-01 2.06724055e-01 2.06874598e-01 2.07024895e-01 + 2.07174948e-01 2.07324757e-01 2.07474323e-01 2.07623645e-01 2.07772725e-01 + 2.07921561e-01 2.08070156e-01 2.08218508e-01 2.08366619e-01 2.08514489e-01 + 2.08662119e-01 2.08809507e-01 2.08956656e-01 2.09103565e-01 2.09250235e-01 + 2.09396665e-01 2.09542857e-01 2.09688811e-01 2.09834526e-01 2.09980005e-01 + 2.10125246e-01 2.10270250e-01 2.10415017e-01 2.10559549e-01 2.10703844e-01 + 2.10847905e-01 2.10991730e-01 2.11135320e-01 2.11278676e-01 2.11421799e-01 + 2.11564687e-01 2.11707342e-01 2.11849765e-01 2.11991955e-01 2.12133912e-01 + 2.12275638e-01 2.12417132e-01 2.12558395e-01 2.12699428e-01 2.12840230e-01 + 2.12980802e-01 2.13121144e-01 2.13261257e-01 2.13401141e-01 2.13540796e-01 + 2.13680223e-01 2.13819422e-01 2.13958394e-01 2.14097138e-01 2.14235656e-01 + 2.14373947e-01 2.14512011e-01 2.14649851e-01 2.14787464e-01 2.14924853e-01 + 2.15062017e-01 2.15198957e-01 2.15335672e-01 2.15472164e-01 2.15608433e-01 + 2.15744479e-01 2.15880302e-01 2.16015903e-01 2.16151282e-01 2.16286440e-01 + 2.16421376e-01 2.16556092e-01 2.16690587e-01 2.16824862e-01 2.16958918e-01 + 2.17092754e-01 2.17226371e-01 2.17359769e-01 2.17492949e-01 2.17625911e-01 + 2.17758656e-01 2.17891183e-01 2.18023493e-01 2.18155587e-01 2.18287464e-01 + 2.18419126e-01 2.18550572e-01 2.18681803e-01 2.18812819e-01 2.18943621e-01 + 2.19074208e-01 2.19204582e-01 2.19334742e-01 2.19464690e-01 2.19594424e-01 + 2.19723946e-01 2.19853257e-01 2.19982355e-01 2.20111242e-01 2.20239919e-01 + 2.20368384e-01 2.20496640e-01 2.20624685e-01 2.20752521e-01 2.20880148e-01 + 2.21007566e-01 2.21134775e-01 2.21261776e-01 2.21388569e-01 2.21515155e-01 + 2.21641533e-01 2.21767705e-01 2.21893670e-01 2.22019429e-01 2.22144983e-01 + 2.22270331e-01 2.22395473e-01 2.22520411e-01 2.22645145e-01 2.22769675e-01 + 2.22894000e-01 2.23018123e-01 2.23142042e-01 2.23265759e-01 2.23389273e-01 + 2.23512586e-01 2.23635696e-01 2.23758606e-01 2.23881314e-01 2.24003822e-01 + 2.24126129e-01 2.24248236e-01 2.24370144e-01 2.24491852e-01 2.24613362e-01 + 2.24734673e-01 2.24855785e-01 2.24976700e-01 2.25097417e-01 2.25217936e-01 + 2.25338259e-01 2.25458385e-01 2.25578315e-01 2.25698048e-01 2.25817587e-01 + 2.25936930e-01 2.26056078e-01 2.26175031e-01 2.26293790e-01 2.26412355e-01 + 2.26530727e-01 2.26648905e-01 2.26766890e-01 2.26884683e-01 2.27002283e-01 + 2.27119691e-01 2.27236908e-01 2.27353934e-01 2.27470768e-01 2.27587412e-01 + 2.27703865e-01 2.27820129e-01 2.27936203e-01 2.28052087e-01 2.28167783e-01 + 2.28283290e-01 2.28398608e-01 2.28513738e-01 2.28628681e-01 2.28743437e-01 + 2.28858005e-01 2.28972386e-01 2.29086581e-01 2.29200591e-01 2.29314414e-01 + 2.29428052e-01 2.29541504e-01 2.29654772e-01 2.29767856e-01 2.29880755e-01 + 2.29993470e-01 2.30106002e-01 2.30218351e-01 2.30330517e-01 2.30442500e-01 + 2.30554301e-01 2.30665921e-01 2.30777358e-01 2.30888614e-01 2.30999690e-01 + 2.31110584e-01 2.31221299e-01 2.31331833e-01 2.31442188e-01 2.31552363e-01 + 2.31662359e-01 2.31772176e-01 2.31881815e-01 2.31991276e-01 2.32100559e-01 + 2.32209665e-01 2.32318593e-01 2.32427344e-01 2.32535919e-01 2.32644318e-01 + 2.32752540e-01 2.32860587e-01 2.32968459e-01 2.33076155e-01 2.33183677e-01 + 2.33291025e-01 2.33398198e-01 2.33505198e-01 2.33612024e-01 2.33718676e-01 + 2.33825157e-01 2.33931464e-01 2.34037599e-01 2.34143562e-01 2.34249354e-01 + 2.34354974e-01 2.34460423e-01 2.34565702e-01 2.34670810e-01 2.34775748e-01 + 2.34880516e-01 2.34985114e-01 2.35089544e-01 2.35193804e-01 2.35297896e-01 + 2.35401819e-01 2.35505574e-01 2.35609162e-01 2.35712582e-01 2.35815835e-01 + 2.35918921e-01 2.36021841e-01 2.36124594e-01 2.36227182e-01 2.36329603e-01 + 2.36431860e-01 2.36533951e-01 2.36635878e-01 2.36737640e-01 2.36839238e-01 + 2.36940672e-01 2.37041942e-01 2.37143049e-01 2.37243994e-01 2.37344775e-01 + 2.37445394e-01 2.37545851e-01 2.37646146e-01 2.37746279e-01 2.37846251e-01 + 2.37946062e-01 2.38045713e-01 2.38145203e-01 2.38244533e-01 2.38343703e-01 + 2.38442713e-01 2.38541565e-01 2.38640257e-01 2.38738790e-01 2.38837166e-01 + 2.38935383e-01 2.39033442e-01 2.39131344e-01 2.39229088e-01 2.39326676e-01 + 2.39424106e-01 2.39521381e-01 2.39618499e-01 2.39715461e-01 2.39812268e-01 + 2.39908919e-01 2.40005416e-01 2.40101757e-01 2.40197944e-01 2.40293977e-01 + 2.40389856e-01 2.40485582e-01 2.40581154e-01 2.40676573e-01 2.40771839e-01 + 2.40866953e-01 2.40961914e-01 2.41056724e-01 2.41151382e-01 2.41245888e-01 + 2.41340243e-01 2.41434447e-01 2.41528501e-01 2.41622404e-01 2.41716158e-01 + 2.41809761e-01 2.41903215e-01 2.41996520e-01 2.42089675e-01 2.42182682e-01 + 2.42275541e-01 2.42368251e-01 2.42460813e-01 2.42553228e-01 2.42645496e-01 + 2.42737616e-01 2.42829589e-01 2.42921416e-01 2.43013097e-01 2.43104631e-01 + 2.43196020e-01 2.43287263e-01 2.43378361e-01 2.43469314e-01 2.43560122e-01 + 2.43650786e-01 2.43741306e-01 2.43831681e-01 2.43921913e-01 2.44012001e-01 + 2.44101947e-01 2.44191749e-01 2.44281409e-01 2.44370926e-01 2.44460302e-01 + 2.44549535e-01 2.44638627e-01 2.44727577e-01 2.44816386e-01 2.44905055e-01 + 2.44993583e-01 2.45081970e-01 2.45170218e-01 2.45258325e-01 2.45346293e-01 + 2.45434122e-01 2.45521812e-01 2.45609362e-01 2.45696775e-01 2.45784049e-01 + 2.45871185e-01 2.45958183e-01 2.46045043e-01 2.46131766e-01 2.46218353e-01 + 2.46304802e-01 2.46391115e-01 2.46477291e-01 2.46563332e-01 2.46649236e-01 + 2.46735006e-01 2.46820639e-01 2.46906138e-01 2.46991502e-01 2.47076731e-01 + 2.47161826e-01 2.47246787e-01 2.47331614e-01 2.47416307e-01 2.47500867e-01 + 2.47585294e-01 2.47669588e-01 2.47753749e-01 2.47837778e-01 2.47921675e-01 + 2.48005440e-01 2.48089073e-01 2.48172575e-01 2.48255945e-01 2.48339185e-01 + 2.48422294e-01 2.48505272e-01 2.48588120e-01 2.48670839e-01 2.48753427e-01 + 2.48835886e-01 2.48918215e-01 2.49000416e-01 2.49082487e-01 2.49164431e-01 + 2.49246245e-01 2.49327932e-01 2.49409490e-01 2.49490922e-01 2.49572225e-01 + 2.49653402e-01 2.49734451e-01 2.49815374e-01 2.49896170e-01 2.49976840e-01 + 2.50057384e-01 2.50137802e-01 2.50218094e-01 2.50298261e-01 2.50378303e-01 + 2.50458221e-01 2.50538013e-01 2.50617681e-01 2.50697225e-01 2.50776645e-01 + 2.50855941e-01 2.50935113e-01 2.51014162e-01 2.51093088e-01 2.51171892e-01 + 2.51250572e-01 2.51329130e-01 2.51407566e-01 2.51485880e-01 2.51564073e-01 + 2.51642143e-01 2.51720093e-01 2.51797921e-01 2.51875629e-01 2.51953216e-01 + 2.52030682e-01 2.52108028e-01 2.52185254e-01 2.52262361e-01 2.52339348e-01 + 2.52416215e-01 2.52492964e-01 2.52569593e-01 2.52646104e-01 2.52722497e-01 + 2.52798771e-01 2.52874927e-01 2.52950965e-01 2.53026886e-01 2.53102689e-01 + 2.53178375e-01 2.53253944e-01 2.53329397e-01 2.53404733e-01 2.53479952e-01 + 2.53555056e-01 2.53630043e-01 2.53704915e-01 2.53779671e-01 2.53854312e-01 + 2.53928839e-01 2.54003250e-01 2.54077546e-01 2.54151728e-01 2.54225796e-01 + 2.54299750e-01 2.54373590e-01 2.54447316e-01 2.54520930e-01 2.54594429e-01 + 2.54667816e-01 2.54741090e-01 2.54814252e-01 2.54887301e-01 2.54960238e-01 + 2.55033063e-01 2.55105776e-01 2.55178378e-01 2.55250868e-01 2.55323247e-01 + 2.55395516e-01 2.55467673e-01 2.55539720e-01 2.55611657e-01 2.55683483e-01 + 2.55755200e-01 2.55826806e-01 2.55898304e-01 2.55969692e-01 2.56040970e-01 + 2.56112140e-01 2.56183201e-01 2.56254154e-01 2.56324998e-01 2.56395734e-01 + 2.56466362e-01 2.56536882e-01 2.56607295e-01 2.56677600e-01 2.56747798e-01 + 2.56817889e-01 2.56887874e-01 2.56957752e-01 2.57027523e-01 2.57097188e-01 + 2.57166747e-01 2.57236200e-01 2.57305548e-01 2.57374790e-01 2.57443927e-01 + 2.57512959e-01 2.57581886e-01 2.57650709e-01 2.57719427e-01 2.57788040e-01 + 2.57856550e-01 2.57924955e-01 2.57993257e-01 2.58061455e-01 2.58129550e-01 + 2.58197542e-01 2.58265431e-01 2.58333217e-01 2.58400900e-01 2.58468481e-01 + 2.58535960e-01 2.58603336e-01 2.58670611e-01 2.58737784e-01 2.58804856e-01 + 2.58871826e-01 2.58938695e-01 2.59005463e-01 2.59072131e-01 2.59138697e-01 + 2.59205164e-01 2.59271530e-01 2.59337796e-01 2.59403962e-01 2.59470029e-01 + 2.59535996e-01 2.59601864e-01 2.59667633e-01 2.59733302e-01 2.59798873e-01 + 2.59864345e-01 2.59929719e-01 2.59994995e-01 2.60060172e-01 2.60125252e-01 + 2.60190234e-01 2.60255118e-01 2.60319905e-01 2.60384595e-01 2.60449188e-01 + 2.60513684e-01 2.60578083e-01 2.60642386e-01 2.60706593e-01 2.60770703e-01 + 2.60834718e-01 2.60898636e-01 2.60962459e-01 2.61026187e-01 2.61089819e-01 + 2.61153356e-01 2.61216799e-01 2.61280146e-01 2.61343399e-01 2.61406557e-01 + 2.61469622e-01 2.61532592e-01 2.61595468e-01 2.61658250e-01 2.61720939e-01 + 2.61783535e-01 2.61846037e-01 2.61908446e-01 2.61970763e-01 2.62032986e-01 + 2.62095117e-01 2.62157156e-01 2.62219102e-01 2.62280956e-01 2.62342719e-01 + 2.62404389e-01 2.62465968e-01 2.62527456e-01 2.62588852e-01 2.62650158e-01 + 2.62711372e-01 2.62772496e-01 2.62833529e-01 2.62894471e-01 2.62955324e-01 + 2.63016086e-01 2.63076758e-01 2.63137341e-01 2.63197833e-01 2.63258237e-01 + 2.63318551e-01 2.63378776e-01 2.63438912e-01 2.63498959e-01 2.63558918e-01 + 2.63618788e-01 2.63678569e-01 2.63738263e-01 2.63797868e-01 2.63857386e-01 + 2.63916816e-01 2.63976158e-01 2.64035413e-01 2.64094581e-01 2.64153661e-01 + 2.64212655e-01 2.64271562e-01 2.64330382e-01 2.64389116e-01 2.64447763e-01 + 2.64506324e-01 2.64564800e-01 2.64623189e-01 2.64681493e-01 2.64739711e-01 + 2.64797844e-01 2.64855892e-01 2.64913854e-01 2.64971732e-01 2.65029524e-01 + 2.65087233e-01 2.65144856e-01 2.65202396e-01 2.65259851e-01 2.65317222e-01 + 2.65374509e-01 2.65431713e-01 2.65488833e-01 2.65545869e-01 2.65602822e-01 + 2.65659692e-01 2.65716480e-01 2.65773184e-01 2.65829805e-01 2.65886344e-01 + 2.65942801e-01 2.65999175e-01 2.66055468e-01 2.66111678e-01 2.66167806e-01 + 2.66223853e-01 2.66279819e-01 2.66335703e-01 2.66391505e-01 2.66447227e-01 + 2.66502868e-01 2.66558427e-01 2.66613907e-01 2.66669305e-01 2.66724624e-01 + 2.66779862e-01 2.66835020e-01 2.66890098e-01 2.66945096e-01 2.67000015e-01 + 2.67054854e-01 2.67109613e-01 2.67164294e-01 2.67218895e-01 2.67273418e-01 + 2.67327861e-01 2.67382226e-01 2.67436512e-01 2.67490720e-01 2.67544850e-01 + 2.67598902e-01 2.67652875e-01 2.67706771e-01 2.67760589e-01 2.67814330e-01 + 2.67867993e-01 2.67921578e-01 2.67975087e-01 2.68028519e-01 2.68081873e-01 + 2.68135151e-01 2.68188352e-01 2.68241477e-01 2.68294526e-01 2.68347498e-01 + 2.68400394e-01 2.68453214e-01 2.68505959e-01 2.68558628e-01 2.68611221e-01 + 2.68663738e-01 2.68716181e-01 2.68768548e-01 2.68820841e-01 2.68873058e-01 + 2.68925201e-01 2.68977269e-01 2.69029263e-01 2.69081182e-01 2.69133027e-01 + 2.69184798e-01 2.69236495e-01 2.69288118e-01 2.69339668e-01 2.69391143e-01 + 2.69442546e-01 2.69493875e-01 2.69545131e-01 2.69596314e-01 2.69647424e-01 + 2.69698461e-01 2.69749425e-01 2.69800317e-01 2.69851137e-01 2.69901884e-01 + 2.69952559e-01 2.70003162e-01 2.70053693e-01 2.70104153e-01 2.70154540e-01 + 2.70204856e-01 2.70255101e-01 2.70305274e-01 2.70355377e-01 2.70405408e-01 + 2.70455368e-01 2.70505258e-01 2.70555077e-01 2.70604825e-01 2.70654503e-01 + 2.70704110e-01 2.70753648e-01 2.70803115e-01 2.70852513e-01 2.70901840e-01 + 2.70951098e-01 2.71000287e-01 2.71049406e-01 2.71098455e-01 2.71147436e-01 + 2.71196347e-01 2.71245190e-01 2.71293963e-01 2.71342668e-01 2.71391304e-01 + 2.71439872e-01 2.71488372e-01 2.71536803e-01 2.71585166e-01 2.71633461e-01 + 2.71681688e-01 2.71729848e-01 2.71777939e-01 2.71825964e-01 2.71873921e-01 + 2.71921810e-01 2.71969632e-01 2.72017388e-01 2.72065076e-01 2.72112698e-01 + 2.72160252e-01 2.72207741e-01 2.72255162e-01 2.72302518e-01 2.72349807e-01 + 2.72397030e-01 2.72444187e-01 2.72491278e-01 2.72538303e-01 2.72585263e-01 + 2.72632157e-01 2.72678985e-01 2.72725748e-01 2.72772446e-01 2.72819079e-01 + 2.72865647e-01 2.72912150e-01 2.72958588e-01 2.73004962e-01 2.73051271e-01 + 2.73097516e-01 2.73143696e-01 2.73189812e-01 2.73235864e-01 2.73281852e-01 + 2.73327776e-01 2.73373636e-01 2.73419432e-01 2.73465166e-01 2.73510835e-01 + 2.73556441e-01 2.73601984e-01 2.73647464e-01 2.73692881e-01 2.73738235e-01 + 2.73783526e-01 2.73828755e-01 2.73873921e-01 2.73919024e-01 2.73964065e-01 + 2.74009044e-01 2.74053961e-01 2.74098815e-01 2.74143608e-01 2.74188339e-01 + 2.74233008e-01 2.74277616e-01 2.74322162e-01 2.74366646e-01 2.74411070e-01 + 2.74455432e-01 2.74499733e-01 2.74543973e-01 2.74588152e-01 2.74632270e-01 + 2.74676328e-01 2.74720325e-01 2.74764262e-01 2.74808138e-01 2.74851954e-01 + 2.74895710e-01 2.74939406e-01 2.74983042e-01 2.75026618e-01 2.75070135e-01 + 2.75113591e-01 2.75156988e-01 2.75200326e-01 2.75243604e-01 2.75286824e-01 + 2.75329984e-01 2.75373085e-01 2.75416127e-01 2.75459110e-01 2.75502034e-01 + 2.75544900e-01 2.75587707e-01 2.75630456e-01 2.75673147e-01 2.75715779e-01 + 2.75758353e-01 2.75800869e-01 2.75843328e-01 2.75885728e-01 2.75928070e-01 + 2.75970355e-01 2.76012583e-01 2.76054753e-01 2.76096866e-01 2.76138921e-01 + 2.76180919e-01 2.76222860e-01 2.76264745e-01 2.76306572e-01 2.76348342e-01 + 2.76390056e-01 2.76431714e-01 2.76473315e-01 2.76514859e-01 2.76556347e-01 + 2.76597779e-01 2.76639155e-01 2.76680475e-01 2.76721739e-01 2.76762947e-01 + 2.76804100e-01 2.76845197e-01 2.76886238e-01 2.76927224e-01 2.76968154e-01 + 2.77009030e-01 2.77049850e-01 2.77090615e-01 2.77131325e-01 2.77171980e-01 + 2.77212581e-01 2.77253126e-01 2.77293617e-01 2.77334054e-01 2.77374436e-01 + 2.77414764e-01 2.77455038e-01 2.77495257e-01 2.77535423e-01 2.77575534e-01 + 2.77615592e-01 2.77655596e-01 2.77695546e-01 2.77735443e-01 2.77775286e-01 + 2.77815076e-01 2.77854812e-01 2.77894495e-01 2.77934125e-01 2.77973702e-01 + 2.78013226e-01 2.78052697e-01 2.78092115e-01 2.78131481e-01 2.78170794e-01 + 2.78210054e-01 2.78249262e-01 2.78288418e-01 2.78327521e-01 2.78366572e-01 + 2.78405571e-01 2.78444519e-01 2.78483414e-01 2.78522257e-01 2.78561049e-01 + 2.78599789e-01 2.78638477e-01 2.78677114e-01 2.78715700e-01 2.78754234e-01 + 2.78792717e-01 2.78831149e-01 2.78869530e-01 2.78907859e-01 2.78946138e-01 + 1.03953624e+00 1.03772749e+00 1.03592023e+00 1.03411445e+00 1.03231016e+00 + 1.03050735e+00 1.02870603e+00 1.02690620e+00 1.02510785e+00 1.02331100e+00 + 1.02151562e+00 1.01972174e+00 1.01792935e+00 1.01613844e+00 1.01434902e+00 + 1.01256110e+00 1.01077466e+00 1.00898971e+00 1.00720626e+00 1.00542429e+00 + 1.00364382e+00 1.00186484e+00 1.00008735e+00 9.98311355e-01 9.96536852e-01 + 9.94763842e-01 9.92992326e-01 9.91222304e-01 9.89453777e-01 9.87686744e-01 + 9.85921207e-01 9.84157165e-01 9.82394619e-01 9.80633570e-01 9.78874017e-01 + 9.77115962e-01 9.75359404e-01 9.73604344e-01 9.71850782e-01 9.70098719e-01 + 9.68348155e-01 9.66599090e-01 9.64851525e-01 9.63105460e-01 9.61360895e-01 + 9.59617832e-01 9.57876269e-01 9.56136208e-01 9.54397649e-01 9.52660593e-01 + 9.50925039e-01 9.49190988e-01 9.47458441e-01 9.45727397e-01 9.43997858e-01 + 9.42269823e-01 9.40543293e-01 9.38818268e-01 9.37094749e-01 9.35372736e-01 + 9.33652230e-01 9.31933230e-01 9.30215737e-01 9.28499752e-01 9.26785274e-01 + 9.25072305e-01 9.23360844e-01 9.21650893e-01 9.19942450e-01 9.18235517e-01 + 9.16530094e-01 9.14826182e-01 9.13123780e-01 9.11422890e-01 9.09723511e-01 + 9.08025644e-01 9.06329289e-01 9.04634446e-01 9.02941117e-01 9.01249300e-01 + 8.99558998e-01 8.97870209e-01 8.96182935e-01 8.94497176e-01 8.92812931e-01 + 8.91130202e-01 8.89448989e-01 8.87769292e-01 8.86091112e-01 8.84414448e-01 + 8.82739302e-01 8.81065673e-01 8.79393562e-01 8.77722970e-01 8.76053896e-01 + 8.74386341e-01 8.72720306e-01 8.71055790e-01 8.69392795e-01 8.67731320e-01 + 8.66071366e-01 8.64412932e-01 8.62756021e-01 8.61100631e-01 8.59446764e-01 + 8.57794419e-01 8.56143597e-01 8.54494298e-01 8.52846523e-01 8.51200272e-01 + 8.49555545e-01 8.47912343e-01 8.46270666e-01 8.44630515e-01 8.42991889e-01 + 8.41354789e-01 8.39719216e-01 8.38085170e-01 8.36452650e-01 8.34821658e-01 + 8.33192195e-01 8.31564259e-01 8.29937852e-01 8.28312973e-01 8.26689624e-01 + 8.25067805e-01 8.23447515e-01 8.21828756e-01 8.20211528e-01 8.18595830e-01 + 8.16981664e-01 8.15369029e-01 8.13757927e-01 8.12148357e-01 8.10540319e-01 + 8.08933815e-01 8.07328844e-01 8.05725406e-01 8.04123503e-01 8.02523135e-01 + 8.00924301e-01 7.99327002e-01 7.97731239e-01 7.96137011e-01 7.94544320e-01 + 7.92953165e-01 7.91363547e-01 7.89775466e-01 7.88188923e-01 7.86603918e-01 + 7.85020450e-01 7.83438522e-01 7.81858132e-01 7.80279281e-01 7.78701970e-01 + 7.77126199e-01 7.75551968e-01 7.73979278e-01 7.72408129e-01 7.70838521e-01 + 7.69270454e-01 7.67703930e-01 7.66138947e-01 7.64575508e-01 7.63013611e-01 + 7.61453258e-01 7.59894448e-01 7.58337182e-01 7.56781460e-01 7.55227283e-01 + 7.53674651e-01 7.52123565e-01 7.50574024e-01 7.49026029e-01 7.47479580e-01 + 7.45934678e-01 7.44391322e-01 7.42849514e-01 7.41309254e-01 7.39770542e-01 + 7.38233378e-01 7.36697762e-01 7.35163696e-01 7.33631179e-01 7.32100211e-01 + 7.30570794e-01 7.29042926e-01 7.27516610e-01 7.25991844e-01 7.24468629e-01 + 7.22946966e-01 7.21426855e-01 7.19908297e-01 7.18391291e-01 7.16875837e-01 + 7.15361937e-01 7.13849591e-01 7.12338798e-01 7.10829560e-01 7.09321876e-01 + 7.07815747e-01 7.06311174e-01 7.04808155e-01 7.03306693e-01 7.01806787e-01 + 7.00308437e-01 6.98811644e-01 6.97316408e-01 6.95822730e-01 6.94330610e-01 + 6.92840047e-01 6.91351043e-01 6.89863598e-01 6.88377712e-01 6.86893385e-01 + 6.85410618e-01 6.83929411e-01 6.82449765e-01 6.80971679e-01 6.79495154e-01 + 6.78020190e-01 6.76546789e-01 6.75074949e-01 6.73604671e-01 6.72135956e-01 + 6.70668804e-01 6.69203215e-01 6.67739189e-01 6.66276728e-01 6.64815830e-01 + 6.63356498e-01 6.61898730e-01 6.60442527e-01 6.58987889e-01 6.57534818e-01 + 6.56083312e-01 6.54633373e-01 6.53185001e-01 6.51738195e-01 6.50292957e-01 + 6.48849287e-01 6.47407184e-01 6.45966650e-01 6.44527685e-01 6.43090288e-01 + 6.41654460e-01 6.40220202e-01 6.38787514e-01 6.37356396e-01 6.35926849e-01 + 6.34498872e-01 6.33072467e-01 6.31647633e-01 6.30224370e-01 6.28802680e-01 + 6.27382561e-01 6.25964016e-01 6.24547043e-01 6.23131644e-01 6.21717818e-01 + 6.20305566e-01 6.18894889e-01 6.17485785e-01 6.16078257e-01 6.14672303e-01 + 6.13267925e-01 6.11865123e-01 6.10463897e-01 6.09064247e-01 6.07666173e-01 + 6.06269677e-01 6.04874758e-01 6.03481416e-01 6.02089652e-01 6.00699467e-01 + 5.99310859e-01 5.97923831e-01 5.96538381e-01 5.95154511e-01 5.93772221e-01 + 5.92391510e-01 5.91012380e-01 5.89634830e-01 5.88258861e-01 5.86884473e-01 + 5.85511667e-01 5.84140442e-01 5.82770800e-01 5.81402740e-01 5.80036262e-01 + 5.78671367e-01 5.77308056e-01 5.75946328e-01 5.74586184e-01 5.73227624e-01 + 5.71870649e-01 5.70515258e-01 5.69161453e-01 5.67809232e-01 5.66458597e-01 + 5.65109548e-01 5.63762086e-01 5.62416210e-01 5.61071920e-01 5.59729218e-01 + 5.58388103e-01 5.57048576e-01 5.55710636e-01 5.54374285e-01 5.53039523e-01 + 5.51706349e-01 5.50374764e-01 5.49044769e-01 5.47716364e-01 5.46389548e-01 + 5.45064323e-01 5.43740689e-01 5.42418645e-01 5.41098192e-01 5.39779331e-01 + 5.38462062e-01 5.37146385e-01 5.35832299e-01 5.34519807e-01 5.33208907e-01 + 5.31899601e-01 5.30591888e-01 5.29285769e-01 5.27981244e-01 5.26678313e-01 + 5.25376977e-01 5.24077235e-01 5.22779089e-01 5.21482538e-01 5.20187583e-01 + 5.18894224e-01 5.17602461e-01 5.16312295e-01 5.15023726e-01 5.13736754e-01 + 5.12451379e-01 5.11167602e-01 5.09885423e-01 5.08604843e-01 5.07325861e-01 + 5.06048477e-01 5.04772693e-01 5.03498508e-01 5.02225923e-01 5.00954938e-01 + 4.99685553e-01 4.98417769e-01 4.97151585e-01 4.95887003e-01 4.94624021e-01 + 4.93362642e-01 4.92102864e-01 4.90844689e-01 4.89588116e-01 4.88333145e-01 + 4.87079778e-01 4.85828014e-01 4.84577853e-01 4.83329297e-01 4.82082344e-01 + 4.80836996e-01 4.79593252e-01 4.78351114e-01 4.77110580e-01 4.75871652e-01 + 4.74634330e-01 4.73398614e-01 4.72164504e-01 4.70932001e-01 4.69701104e-01 + 4.68471815e-01 4.67244132e-01 4.66018058e-01 4.64793591e-01 4.63570733e-01 + 4.62349483e-01 4.61129842e-01 4.59911810e-01 4.58695387e-01 4.57480573e-01 + 4.56267369e-01 4.55055776e-01 4.53845792e-01 4.52637419e-01 4.51430658e-01 + 4.50225507e-01 4.49021967e-01 4.47820039e-01 4.46619724e-01 4.45421020e-01 + 4.44223928e-01 4.43028450e-01 4.41834584e-01 4.40642332e-01 4.39451693e-01 + 4.38262668e-01 4.37075256e-01 4.35889459e-01 4.34705277e-01 4.33522709e-01 + 4.32341757e-01 4.31162420e-01 4.29984698e-01 4.28808592e-01 4.27634102e-01 + 4.26461229e-01 4.25289972e-01 4.24120332e-01 4.22952310e-01 4.21785904e-01 + 4.20621116e-01 4.19457946e-01 4.18296395e-01 4.17136461e-01 4.15978147e-01 + 4.14821451e-01 4.13666374e-01 4.12512917e-01 4.11361080e-01 4.10210862e-01 + 4.09062265e-01 4.07915288e-01 4.06769932e-01 4.05626197e-01 4.04484083e-01 + 4.03343590e-01 4.02204719e-01 4.01067470e-01 3.99931844e-01 3.98797839e-01 + 3.97665458e-01 3.96534699e-01 3.95405564e-01 3.94278052e-01 3.93152164e-01 + 3.92027900e-01 3.90905259e-01 3.89784244e-01 3.88664853e-01 3.87547087e-01 + 3.86430946e-01 3.85316431e-01 3.84203541e-01 3.83092278e-01 3.81982640e-01 + 3.80874629e-01 3.79768245e-01 3.78663487e-01 3.77560357e-01 3.76458854e-01 + 3.75358979e-01 3.74260731e-01 3.73164112e-01 3.72069121e-01 3.70975759e-01 + 3.69884025e-01 3.68793921e-01 3.67705446e-01 3.66618601e-01 3.65533385e-01 + 3.64449799e-01 3.63367844e-01 3.62287520e-01 3.61208826e-01 3.60131763e-01 + 3.59056331e-01 3.57982531e-01 3.56910363e-01 3.55839826e-01 3.54770922e-01 + 3.53703650e-01 3.52638011e-01 3.51574005e-01 3.50511632e-01 3.49450892e-01 + 3.48391786e-01 3.47334314e-01 3.46278476e-01 3.45224272e-01 3.44171703e-01 + 3.43120769e-01 3.42071469e-01 3.41023805e-01 3.39977776e-01 3.38933384e-01 + 3.37890627e-01 3.36849506e-01 3.35810021e-01 3.34772174e-01 3.33735963e-01 + 3.32701389e-01 3.31668453e-01 3.30637154e-01 3.29607493e-01 3.28579470e-01 + 3.27553085e-01 3.26528339e-01 3.25505231e-01 3.24483762e-01 3.23463933e-01 + 3.22445743e-01 3.21429192e-01 3.20414282e-01 3.19401011e-01 3.18389381e-01 + 3.17379391e-01 3.16371042e-01 3.15364334e-01 3.14359267e-01 3.13355841e-01 + 3.12354057e-01 3.11353915e-01 3.10355415e-01 3.09358557e-01 3.08363342e-01 + 3.07369770e-01 3.06377840e-01 3.05387554e-01 3.04398911e-01 3.03411912e-01 + 3.02426556e-01 3.01442845e-01 3.00460777e-01 2.99480355e-01 2.98501577e-01 + 2.97524444e-01 2.96548956e-01 2.95575113e-01 2.94602916e-01 2.93632365e-01 + 2.92663460e-01 2.91696201e-01 2.90730589e-01 2.89766623e-01 2.88804304e-01 + 2.87843632e-01 2.86884607e-01 2.85927230e-01 2.84971501e-01 2.84017420e-01 + 2.83064986e-01 2.82114201e-01 2.81165065e-01 2.80217578e-01 2.79271739e-01 + 2.78327550e-01 2.77385010e-01 2.76444119e-01 2.75504879e-01 2.74567288e-01 + 2.73631348e-01 2.72697059e-01 2.71764419e-01 2.70833431e-01 2.69904094e-01 + 2.68976408e-01 2.68050374e-01 2.67125991e-01 2.66203261e-01 2.65282182e-01 + 2.64362756e-01 2.63444982e-01 2.62528861e-01 2.61614393e-01 2.60701578e-01 + 2.59790416e-01 2.58880908e-01 2.57973054e-01 2.57066853e-01 2.56162307e-01 + 2.55259415e-01 2.54358178e-01 2.53458595e-01 2.52560668e-01 2.51664395e-01 + 2.50769778e-01 2.49876816e-01 2.48985511e-01 2.48095861e-01 2.47207867e-01 + 2.46321530e-01 2.45436849e-01 2.44553825e-01 2.43672457e-01 2.42792747e-01 + 2.41914695e-01 2.41038300e-01 2.40163562e-01 2.39290483e-01 2.38419061e-01 + 2.37549298e-01 2.36681193e-01 2.35814748e-01 2.34949961e-01 2.34086833e-01 + 2.33225364e-01 2.32365555e-01 2.31507405e-01 2.30650916e-01 2.29796086e-01 + 2.28942916e-01 2.28091407e-01 2.27241559e-01 2.26393372e-01 2.25546845e-01 + 2.24701980e-01 2.23858776e-01 2.23017233e-01 2.22177352e-01 2.21339134e-01 + 2.20502577e-01 2.19667682e-01 2.18834451e-01 2.18002881e-01 2.17172975e-01 + 2.16344732e-01 2.15518152e-01 2.14693235e-01 2.13869982e-01 2.13048393e-01 + 2.12228468e-01 2.11410207e-01 2.10593610e-01 2.09778678e-01 2.08965410e-01 + 2.08153807e-01 2.07343870e-01 2.06535598e-01 2.05728991e-01 2.04924049e-01 + 2.04120774e-01 2.03319164e-01 2.02519221e-01 2.01720944e-01 2.00924334e-01 + 2.00129390e-01 1.99336113e-01 1.98544503e-01 1.97754560e-01 1.96966285e-01 + 1.96179677e-01 1.95394737e-01 1.94611465e-01 1.93829861e-01 1.93049925e-01 + 1.92271658e-01 1.91495059e-01 1.90720129e-01 1.89946869e-01 1.89175277e-01 + 1.88405354e-01 1.87637101e-01 1.86870518e-01 1.86105605e-01 1.85342361e-01 + 1.84580788e-01 1.83820885e-01 1.83062653e-01 1.82306091e-01 1.81551200e-01 + 1.80797980e-01 1.80046431e-01 1.79296554e-01 1.78548348e-01 1.77801814e-01 + 1.77056952e-01 1.76313762e-01 1.75572244e-01 1.74832398e-01 1.74094225e-01 + 1.73357725e-01 1.72622897e-01 1.71889743e-01 1.71158261e-01 1.70428453e-01 + 1.69700319e-01 1.68973858e-01 1.68249071e-01 1.67525958e-01 1.66804519e-01 + 1.66084755e-01 1.65366665e-01 1.64650249e-01 1.63935509e-01 1.63222443e-01 + 1.62511053e-01 1.61801338e-01 1.61093298e-01 1.60386934e-01 1.59682246e-01 + 1.58979233e-01 1.58277897e-01 1.57578237e-01 1.56880253e-01 1.56183946e-01 + 1.55489316e-01 1.54796362e-01 1.54105086e-01 1.53415486e-01 1.52727564e-01 + 1.52041320e-01 1.51356753e-01 1.50673864e-01 1.49992653e-01 1.49313120e-01 + 1.48635265e-01 1.47959088e-01 1.47284591e-01 1.46611771e-01 1.45940631e-01 + 1.45271170e-01 1.44603388e-01 1.43937285e-01 1.43272862e-01 1.42610118e-01 + 1.41949054e-01 1.41289670e-01 1.40631966e-01 1.39975942e-01 1.39321598e-01 + 1.38668935e-01 1.38017953e-01 1.37368652e-01 1.36721031e-01 1.36075091e-01 + 1.35430833e-01 1.34788256e-01 1.34147361e-01 1.33508147e-01 1.32870615e-01 + 1.32234765e-01 1.31600597e-01 1.30968111e-01 1.30337308e-01 1.29708187e-01 + 1.29080749e-01 1.28454994e-01 1.27830921e-01 1.27208532e-01 1.26587826e-01 + 1.25968803e-01 1.25351464e-01 1.24735808e-01 1.24121836e-01 1.23509548e-01 + 1.22898944e-01 1.22290024e-01 1.21682789e-01 1.21077238e-01 1.20473372e-01 + 1.19871190e-01 1.19270693e-01 1.18671881e-01 1.18074755e-01 1.17479313e-01 + 1.16885558e-01 1.16293487e-01 1.15703102e-01 1.15114403e-01 1.14527390e-01 + 1.13942064e-01 1.13358423e-01 1.12776468e-01 1.12196200e-01 1.11617619e-01 + 1.11040725e-01 1.10465517e-01 1.09891996e-01 1.09320162e-01 1.08750016e-01 + 1.08181557e-01 1.07614785e-01 1.07049701e-01 1.06486305e-01 1.05924597e-01 + 1.05364577e-01 1.04806244e-01 1.04249601e-01 1.03694645e-01 1.03141378e-01 + 1.02589800e-01 1.02039910e-01 1.01491709e-01 1.00945198e-01 1.00400375e-01 + 9.98572416e-02 9.93157976e-02 9.87760431e-02 9.82379782e-02 9.77016030e-02 + 9.71669178e-02 9.66339224e-02 9.61026172e-02 9.55730022e-02 9.50450776e-02 + 9.45188434e-02 9.39942997e-02 9.34714468e-02 9.29502847e-02 9.24308135e-02 + 9.19130333e-02 9.13969443e-02 9.08825466e-02 9.03698403e-02 8.98588255e-02 + 8.93495023e-02 8.88418708e-02 8.83359312e-02 8.78316836e-02 8.73291281e-02 + 8.68282647e-02 8.63290937e-02 8.58316150e-02 8.53358290e-02 8.48417355e-02 + 8.43493348e-02 8.38586270e-02 8.33696121e-02 8.28822904e-02 8.23966618e-02 + 8.19127265e-02 8.14304847e-02 8.09499364e-02 8.04710817e-02 7.99939207e-02 + 7.95184537e-02 7.90446805e-02 7.85726014e-02 7.81022165e-02 7.76335259e-02 + 7.71665296e-02 7.67012279e-02 7.62376207e-02 7.57757082e-02 7.53154905e-02 + 7.48569677e-02 7.44001400e-02 7.39450073e-02 7.34915699e-02 7.30398277e-02 + 7.25897810e-02 7.21414298e-02 7.16947743e-02 7.12498144e-02 7.08065504e-02 + 7.03649822e-02 6.99251102e-02 6.94869342e-02 6.90504544e-02 6.86156710e-02 + 6.81825840e-02 6.77511935e-02 6.73214996e-02 6.68935024e-02 6.64672020e-02 + 6.60425985e-02 6.56196920e-02 6.51984826e-02 6.47789704e-02 6.43611555e-02 + 6.39450379e-02 6.35306178e-02 6.31178953e-02 6.27068704e-02 6.22975433e-02 + 6.18899141e-02 6.14839827e-02 6.10797494e-02 6.06772142e-02 6.02763772e-02 + 5.98772385e-02 5.94797982e-02 5.90840564e-02 5.86900131e-02 5.82976685e-02 + 5.79070227e-02 5.75180757e-02 5.71308276e-02 5.67452785e-02 5.63614285e-02 + 5.59792777e-02 5.55988261e-02 5.52200739e-02 5.48430212e-02 5.44676679e-02 + 5.40940143e-02 5.37220604e-02 5.33518062e-02 5.29832520e-02 5.26163976e-02 + 5.22512433e-02 5.18877891e-02 5.15260351e-02 5.11659814e-02 5.08076280e-02 + 5.04509751e-02 5.00960227e-02 4.97427708e-02 4.93912197e-02 4.90413693e-02 + 4.86932198e-02 4.83467711e-02 4.80020235e-02 4.76589769e-02 4.73176315e-02 + 4.69779873e-02 4.66400444e-02 4.63038029e-02 4.59692628e-02 4.56364243e-02 + 4.53052874e-02 4.49758521e-02 4.46481186e-02 4.43220870e-02 4.39977572e-02 + 4.36751294e-02 4.33542037e-02 4.30349801e-02 4.27174587e-02 4.24016395e-02 + 4.20875227e-02 4.17751083e-02 4.14643964e-02 4.11553870e-02 4.08480802e-02 + 4.05424762e-02 4.02385749e-02 3.99363764e-02 3.96358808e-02 3.93370881e-02 + 3.90399985e-02 3.87446120e-02 3.84509287e-02 3.81589486e-02 3.78686718e-02 + 3.75800983e-02 3.72932283e-02 3.70080618e-02 3.67245988e-02 3.64428394e-02 + 3.61627838e-02 3.58844318e-02 3.56077837e-02 3.53328395e-02 3.50595992e-02 + 3.47880629e-02 3.45182306e-02 3.42501025e-02 3.39836786e-02 3.37189589e-02 + 3.34559435e-02 3.31946324e-02 3.29350258e-02 3.26771236e-02 3.24209260e-02 + 3.21664330e-02 3.19136446e-02 3.16625610e-02 3.14131821e-02 3.11655080e-02 + 3.09195388e-02 3.06752746e-02 3.04327153e-02 3.01918611e-02 2.99527120e-02 + 2.97152680e-02 2.94795292e-02 2.92454957e-02 2.90131675e-02 2.87825447e-02 + 2.85536273e-02 2.83264153e-02 2.81009089e-02 2.78771081e-02 2.76550128e-02 + 2.74346233e-02 2.72159395e-02 2.69989614e-02 2.67836892e-02 2.65701228e-02 + 2.63582623e-02 2.61481079e-02 2.59396594e-02 2.57329170e-02 2.55278807e-02 + 2.53245505e-02 2.51229266e-02 2.49230089e-02 2.47247975e-02 2.45282924e-02 + 2.43334937e-02 2.41404014e-02 2.39490156e-02 2.37593363e-02 2.35713636e-02 + 2.33850975e-02 2.32005380e-02 2.30176851e-02 2.28365390e-02 2.26570997e-02 + 2.24793672e-02 2.23033415e-02 2.21290227e-02 2.19564108e-02 2.17855059e-02 + 2.16163080e-02 2.14488171e-02 2.12830333e-02 2.11189566e-02 2.09565871e-02 + 2.07959248e-02 2.06369696e-02 2.04797218e-02 2.03241812e-02 2.01703480e-02 + 2.00182221e-02 1.98678037e-02 1.97190927e-02 1.95720891e-02 1.94267931e-02 + 1.92832045e-02 1.91413236e-02 1.90011502e-02 1.88626845e-02 1.87259265e-02 + 1.85908761e-02 1.84575335e-02 1.83258986e-02 1.81959715e-02 1.80677522e-02 + 1.79412408e-02 1.78164372e-02 1.76933415e-02 1.75719538e-02 1.74522740e-02 + 1.73343022e-02 1.72180384e-02 1.71034827e-02 1.69906350e-02 1.68794954e-02 + 1.67700639e-02 1.66623405e-02 1.65563253e-02 1.64520183e-02 1.63494195e-02 + 1.62485289e-02 1.61493466e-02 1.60518726e-02 1.59561068e-02 1.58620494e-02 + 1.57697003e-02 1.56790596e-02 1.55901273e-02 1.55029034e-02 1.54173879e-02 + 1.53335808e-02 1.52514822e-02 1.51710921e-02 1.50924105e-02 1.50154374e-02 + 1.49401728e-02 1.48666168e-02 1.47947694e-02 1.47246305e-02 1.46562002e-02 + 1.45894786e-02 1.45244656e-02 1.44611612e-02 1.43995655e-02 1.43396785e-02 + 1.42815001e-02 1.42250305e-02 1.41702695e-02 1.41172173e-02 1.40658738e-02 + 1.40162391e-02 1.39683132e-02 1.39220960e-02 1.38775876e-02 1.38347880e-02 + 1.37936971e-02 1.37543151e-02 1.37166420e-02 1.36806776e-02 1.36464221e-02 + 1.36138754e-02 1.35830376e-02 1.35539086e-02 1.35264885e-02 1.35007773e-02 + 1.34767750e-02 1.34544815e-02 1.34338969e-02 1.34150212e-02 1.33978544e-02 + 1.33823966e-02 1.33686476e-02 1.33566075e-02 1.33462763e-02 1.33376541e-02 + 1.33307407e-02 1.33255363e-02 1.33220408e-02 1.33202542e-02 1.33201765e-02 + 1.33218078e-02 1.33251480e-02 1.33301970e-02 1.33369550e-02 1.33454220e-02 + 1.33555978e-02 1.33674825e-02 1.33810762e-02 1.33963787e-02 1.34133902e-02 + 1.34321105e-02 1.34525397e-02 1.34746779e-02 1.34985249e-02 1.35240808e-02 + 1.35513455e-02 1.35803192e-02 1.36110016e-02 1.36433930e-02 1.36774932e-02 + 1.37133022e-02 1.37508200e-02 1.37900467e-02 1.38309822e-02 1.38736265e-02 + 1.39179796e-02 1.39640414e-02 1.40118121e-02 1.40612914e-02 1.41124796e-02 + 1.41653765e-02 1.42199821e-02 1.42762964e-02 1.43343194e-02 1.43940512e-02 + 1.44554916e-02 1.45186406e-02 1.45834983e-02 1.46500646e-02 1.47183396e-02 + 1.47883231e-02 1.48600153e-02 1.49334160e-02 1.50085252e-02 1.50853430e-02 + 1.51638693e-02 1.52441041e-02 1.53260474e-02 1.54096992e-02 1.54950594e-02 + 1.55821280e-02 1.56709051e-02 1.57613905e-02 1.58535843e-02 1.59474864e-02 + 1.60430969e-02 1.61404156e-02 1.62394427e-02 1.63401780e-02 1.64426215e-02 + 1.65467732e-02 1.66526331e-02 1.67602012e-02 1.68694775e-02 1.69804618e-02 + 1.70931542e-02 1.72075547e-02 1.73236633e-02 1.74414798e-02 1.75610043e-02 + 1.76822368e-02 1.78051772e-02 1.79298256e-02 1.80561818e-02 1.81842458e-02 + 1.83140177e-02 1.84454973e-02 1.85786847e-02 1.87135798e-02 1.88501827e-02 + 1.89884931e-02 1.91285113e-02 1.92702370e-02 1.94136703e-02 1.95588111e-02 + 1.97056595e-02 1.98542153e-02 2.00044786e-02 2.01564492e-02 2.03101272e-02 + 2.04655126e-02 2.06226053e-02 2.07814052e-02 2.09419123e-02 2.11041267e-02 + 2.12680482e-02 2.14336768e-02 2.16010125e-02 2.17700553e-02 2.19408050e-02 + 2.21132617e-02 2.22874254e-02 2.24632959e-02 2.26408733e-02 2.28201575e-02 + 2.30011484e-02 2.31838461e-02 2.33682505e-02 2.35543615e-02 2.37421791e-02 + 2.39317033e-02 2.41229339e-02 2.43158711e-02 2.45105147e-02 2.47068647e-02 + 2.49049210e-02 2.51046836e-02 2.53061524e-02 2.55093275e-02 2.57142087e-02 + 2.59207960e-02 2.61290894e-02 2.63390888e-02 2.65507942e-02 2.67642055e-02 + 2.69793227e-02 2.71961457e-02 2.74146744e-02 2.76349090e-02 2.78568491e-02 + 2.80804949e-02 2.83058463e-02 2.85329032e-02 2.87616656e-02 2.89921334e-02 + 2.92243066e-02 2.94581851e-02 2.96937689e-02 2.99310578e-02 3.01700520e-02 + 3.04107512e-02 3.06531555e-02 3.08972648e-02 3.11430790e-02 3.13905981e-02 + 3.16398220e-02 3.18907507e-02 3.21433841e-02 3.23977222e-02 3.26537648e-02 + 3.29115120e-02 3.31709637e-02 3.34321199e-02 3.36949803e-02 3.39595451e-02 + 3.42258142e-02 3.44937874e-02 3.47634647e-02 3.50348461e-02 3.53079315e-02 + 3.55827209e-02 3.58592141e-02 3.61374112e-02 3.64173120e-02 3.66989165e-02 + 3.69822246e-02 3.72672363e-02 3.75539515e-02 3.78423701e-02 3.81324920e-02 + 3.84243173e-02 3.87178458e-02 3.90130775e-02 3.93100123e-02 3.96086502e-02 + 3.99089910e-02 4.02110347e-02 4.05147812e-02 4.08202305e-02 4.11273825e-02 + 4.14362371e-02 4.17467942e-02 4.20590539e-02 4.23730160e-02 4.26886804e-02 + 4.30060471e-02 4.33251159e-02 4.36458870e-02 4.39683600e-02 4.42925351e-02 + 4.46184120e-02 4.49459908e-02 4.52752714e-02 4.56062536e-02 4.59389375e-02 + 4.62733229e-02 4.66094097e-02 4.69471980e-02 4.72866875e-02 4.76278783e-02 + 4.79707703e-02 4.83153633e-02 4.86616573e-02 4.90096522e-02 4.93593480e-02 + 4.97107446e-02 5.00638418e-02 5.04186396e-02 5.07751380e-02 5.11333368e-02 + 5.14932360e-02 5.18548354e-02 5.22181351e-02 5.25831349e-02 5.29498347e-02 + 5.33182344e-02 5.36883341e-02 5.40601335e-02 5.44336326e-02 5.48088313e-02 + 5.51857296e-02 5.55643273e-02 5.59446244e-02 5.63266207e-02 5.67103163e-02 + 5.70957109e-02 5.74828046e-02 5.78715972e-02 5.82620886e-02 5.86542788e-02 + 5.90481677e-02 5.94437551e-02 5.98410410e-02 6.02400253e-02 6.06407080e-02 + 6.10430888e-02 6.14471678e-02 6.18529447e-02 6.22604197e-02 6.26695925e-02 + 6.30804630e-02 6.34930312e-02 6.39072970e-02 6.43232602e-02 6.47409209e-02 + 6.51602788e-02 6.55813340e-02 6.60040862e-02 6.64285354e-02 6.68546816e-02 + 6.72825245e-02 6.77120642e-02 6.81433005e-02 6.85762333e-02 6.90108625e-02 + 6.94471881e-02 6.98852099e-02 7.03249278e-02 7.07663417e-02 7.12094516e-02 + 7.16542573e-02 7.21007588e-02 7.25489558e-02 7.29988484e-02 7.34504365e-02 + 7.39037198e-02 7.43586984e-02 7.48153721e-02 7.52737408e-02 7.57338044e-02 + 7.61955628e-02 7.66590160e-02 7.71241637e-02 7.75910059e-02 7.80595425e-02 + 7.85297734e-02 7.90016985e-02 7.94753177e-02 7.99506308e-02 8.04276378e-02 + 8.09063385e-02 8.13867329e-02 8.18688208e-02 8.23526021e-02 8.28380768e-02 + 8.33252446e-02 8.38141056e-02 8.43046595e-02 8.47969063e-02 8.52908459e-02 + 8.57864782e-02 8.62838029e-02 8.67828201e-02 8.72835297e-02 8.77859314e-02 + 8.82900252e-02 8.87958110e-02 8.93032887e-02 8.98124581e-02 9.03233191e-02 + 9.08358717e-02 9.13501157e-02 9.18660509e-02 9.23836774e-02 9.29029949e-02 + 9.34240033e-02 9.39467025e-02 9.44710925e-02 9.49971730e-02 9.55249440e-02 + 9.60544054e-02 9.65855570e-02 9.71183987e-02 9.76529303e-02 9.81891519e-02 + 9.87270632e-02 9.92666641e-02 9.98079545e-02 1.00350934e-01 1.00895603e-01 + 1.01441962e-01 1.01990009e-01 1.02539745e-01 1.03091170e-01 1.03644283e-01 + 1.04199085e-01 1.04755576e-01 1.05313754e-01 1.05873621e-01 1.06435176e-01 + 1.06998419e-01 1.07563349e-01 1.08129968e-01 1.08698273e-01 1.09268266e-01 + 1.09839947e-01 1.10413314e-01 1.10988368e-01 1.11565110e-01 1.12143538e-01 + 1.12723652e-01 1.13305453e-01 1.13888941e-01 1.14474115e-01 1.15060974e-01 + 1.15649520e-01 1.16239751e-01 1.16831669e-01 1.17425271e-01 1.18020560e-01 + 1.18617533e-01 1.19216192e-01 1.19816535e-01 1.20418564e-01 1.21022277e-01 + 1.21627675e-01 1.22234757e-01 1.22843524e-01 1.23453975e-01 1.24066109e-01 + 1.24679928e-01 1.25295431e-01 1.25912617e-01 1.26531487e-01 1.27152040e-01 + 1.27774276e-01 1.28398196e-01 1.29023798e-01 1.29651083e-01 1.30280051e-01 + 1.30910702e-01 1.31543034e-01 1.32177050e-01 1.32812747e-01 1.33450126e-01 + 1.34089187e-01 1.34729929e-01 1.35372353e-01 1.36016459e-01 1.36662246e-01 + 1.37309713e-01 1.37958862e-01 1.38609692e-01 1.39262202e-01 1.39916393e-01 + 1.40572264e-01 1.41229815e-01 1.41889046e-01 1.42549958e-01 1.43212549e-01 + 1.43876819e-01 1.44542770e-01 1.45210399e-01 1.45879708e-01 1.46550695e-01 + 1.47223362e-01 1.47897707e-01 1.48573731e-01 1.49251433e-01 1.49930814e-01 + 1.50611872e-01 1.51294609e-01 1.51979023e-01 1.52665115e-01 1.53352885e-01 + 1.54042332e-01 1.54733456e-01 1.55426257e-01 1.56120735e-01 1.56816890e-01 + 1.57514721e-01 1.58214229e-01 1.58915413e-01 1.59618273e-01 1.60322809e-01 + 1.61029020e-01 1.61736908e-01 1.62446471e-01 1.63157709e-01 1.63870622e-01 + 1.64585210e-01 1.65301473e-01 1.66019411e-01 1.66739023e-01 1.67460310e-01 + 1.68183271e-01 1.68907906e-01 1.69634214e-01 1.70362197e-01 1.71091853e-01 + 1.71823182e-01 1.72556184e-01 1.73290860e-01 1.74027208e-01 1.74765229e-01 + 1.75504923e-01 1.76246289e-01 1.76989327e-01 1.77734037e-01 1.78480419e-01 + 1.79228473e-01 1.79978199e-01 1.80729595e-01 1.81482663e-01 1.82237402e-01 + 1.82993812e-01 1.83751893e-01 1.84511644e-01 1.85273065e-01 1.86036157e-01 + 1.86800919e-01 1.87567350e-01 1.88335451e-01 1.89105222e-01 1.89876662e-01 + 1.90649771e-01 1.91424549e-01 1.92200996e-01 1.92979112e-01 1.93758896e-01 + 1.94540348e-01 1.95323469e-01 1.96108257e-01 1.96894713e-01 1.97682837e-01 + 1.98472628e-01 1.99264087e-01 2.00057212e-01 2.00852004e-01 2.01648463e-01 + 2.02446589e-01 2.03246381e-01 2.04047839e-01 2.04850963e-01 2.05655753e-01 + 2.06462208e-01 2.07270329e-01 2.08080115e-01 2.08891567e-01 2.09704683e-01 + 2.10519464e-01 2.11335909e-01 2.12154019e-01 2.12973793e-01 2.13795231e-01 + 2.14618333e-01 2.15443098e-01 2.16269527e-01 2.17097619e-01 2.17927374e-01 + 2.18758792e-01 2.19591873e-01 2.20426616e-01 2.21263022e-01 2.22101090e-01 + 2.22940819e-01 2.23782211e-01 2.24625264e-01 2.25469978e-01 2.26316354e-01 + 2.27164390e-01 2.28014088e-01 2.28865446e-01 2.29718464e-01 2.30573143e-01 + 2.31429482e-01 2.32287480e-01 2.33147139e-01 2.34008457e-01 2.34871434e-01 + 2.35736070e-01 2.36602365e-01 2.37470319e-01 2.38339931e-01 2.39211202e-01 + 2.40084131e-01 2.40958717e-01 2.41834962e-01 2.42712864e-01 2.43592423e-01 + 2.44473640e-01 2.45356513e-01 2.46241044e-01 2.47127230e-01 2.48015074e-01 + 2.48904573e-01 2.49795728e-01 2.50688539e-01 2.51583006e-01 2.52479128e-01 + 2.53376905e-01 2.54276337e-01 2.55177424e-01 2.56080166e-01 2.56984562e-01 + 2.57890612e-01 2.58798316e-01 2.59707674e-01 2.60618685e-01 2.61531350e-01 + 2.62445667e-01 2.63361638e-01 2.64279262e-01 2.65198538e-01 2.66119466e-01 + 2.67042047e-01 2.67966279e-01 2.68892164e-01 2.69819699e-01 2.70748886e-01 + 2.71679724e-01 2.72612213e-01 2.73546353e-01 2.74482143e-01 2.75419584e-01 + 2.76358674e-01 2.77299415e-01 2.78241805e-01 2.79185844e-01 2.80131533e-01 + 2.81078870e-01 2.82027857e-01 2.82978492e-01 2.83930775e-01 2.84884707e-01 + 2.85840287e-01 2.86797514e-01 2.87756389e-01 2.88716911e-01 2.89679080e-01 + 2.90642896e-01 2.91608359e-01 2.92575468e-01 2.93544224e-01 2.94514625e-01 + 2.95486673e-01 2.96460366e-01 2.97435704e-01 2.98412687e-01 2.99391316e-01 + 3.00371589e-01 3.01353507e-01 3.02337069e-01 3.03322275e-01 3.04309125e-01 + 3.05297618e-01 3.06287755e-01 3.07279535e-01 3.08272958e-01 3.09268024e-01 + 3.10264733e-01 3.11263084e-01 3.12263076e-01 3.13264711e-01 3.14267987e-01 + 3.15272905e-01 3.16279464e-01 3.17287664e-01 3.18297505e-01 3.19308986e-01 + 3.20322108e-01 3.21336869e-01 3.22353271e-01 3.23371312e-01 3.24390992e-01 + 3.25412312e-01 3.26435271e-01 3.27459868e-01 3.28486104e-01 3.29513978e-01 + 3.30543490e-01 3.31574640e-01 3.32607428e-01 3.33641852e-01 3.34677914e-01 + 3.35715613e-01 3.36754949e-01 3.37795921e-01 3.38838529e-01 3.39882774e-01 + 3.40928653e-01 3.41976169e-01 3.43025320e-01 3.44076105e-01 3.45128526e-01 + 3.46182581e-01 3.47238271e-01 3.48295594e-01 3.49354552e-01 3.50415143e-01 + 3.51477368e-01 3.52541225e-01 3.53606716e-01 3.54673839e-01 3.55742595e-01 + 3.56812983e-01 3.57885003e-01 3.58958655e-01 3.60033939e-01 3.61110853e-01 + 3.62189399e-01 3.63269575e-01 3.64351382e-01 3.65434820e-01 3.66519887e-01 + 3.67606584e-01 3.68694911e-01 3.69784868e-01 3.70876453e-01 3.71969667e-01 + 3.73064510e-01 3.74160981e-01 3.75259081e-01 3.76358808e-01 3.77460163e-01 + 3.78563145e-01 3.79667755e-01 3.80773992e-01 3.81881855e-01 3.82991344e-01 + 3.84102460e-01 3.85215202e-01 3.86329570e-01 3.87445563e-01 3.88563181e-01 + 3.89682424e-01 3.90803292e-01 3.91925784e-01 3.93049901e-01 3.94175642e-01 + 3.95303006e-01 3.96431994e-01 3.97562605e-01 3.98694839e-01 3.99828696e-01 + 4.00964175e-01 4.02101276e-01 4.03240000e-01 4.04380345e-01 4.05522312e-01 + 4.06665899e-01 4.07811108e-01 4.08957938e-01 4.10106388e-01 4.11256458e-01 + 4.12408148e-01 4.13561458e-01 4.14716388e-01 4.15872936e-01 4.17031104e-01 + 4.18190890e-01 4.19352295e-01 4.20515317e-01 4.21679958e-01 4.22846216e-01 + 4.24014092e-01 4.25183585e-01 4.26354695e-01 4.27527421e-01 4.28701764e-01 + 4.29877723e-01 4.31055298e-01 4.32234488e-01 4.33415294e-01 4.34597715e-01 + 4.35781751e-01 4.36967401e-01 4.38154665e-01 4.39343544e-01 4.40534036e-01 + 4.41726142e-01 4.42919861e-01 4.44115193e-01 4.45312138e-01 4.46510695e-01 + 4.47710864e-01 4.48912645e-01 4.50116038e-01 4.51321043e-01 4.52527658e-01 + 4.53735885e-01 4.54945722e-01 4.56157169e-01 4.57370226e-01 4.58584894e-01 + 4.59801170e-01 4.61019056e-01 4.62238551e-01 4.63459655e-01 4.64682367e-01 + 4.65906688e-01 4.67132616e-01 4.68360152e-01 4.69589295e-01 4.70820046e-01 + 4.72052403e-01 4.73286367e-01 4.74521937e-01 4.75759113e-01 4.76997895e-01 + 4.78238283e-01 4.79480276e-01 4.80723873e-01 4.81969076e-01 4.83215882e-01 + 4.84464293e-01 4.85714308e-01 4.86965926e-01 4.88219148e-01 4.89473972e-01 + 4.90730400e-01 4.91988430e-01 4.93248062e-01 4.94509296e-01 4.95772131e-01 + 4.97036568e-01 4.98302606e-01 4.99570245e-01 5.00839485e-01 5.02110324e-01 + 5.03382764e-01 5.04656804e-01 5.05932442e-01 5.07209680e-01 5.08488517e-01 + 5.09768953e-01 5.11050986e-01 5.12334618e-01 5.13619847e-01 5.14906674e-01 + 5.16195098e-01 5.17485119e-01 5.18776737e-01 5.20069951e-01 5.21364761e-01 + 5.22661167e-01 5.23959168e-01 5.25258764e-01 5.26559955e-01 5.27862741e-01 + 5.29167122e-01 5.30473096e-01 5.31780664e-01 5.33089826e-01 5.34400580e-01 + 5.35712928e-01 5.37026868e-01 5.38342401e-01 5.39659526e-01 5.40978242e-01 + 5.42298550e-01 5.43620449e-01 5.44943939e-01 5.46269020e-01 5.47595691e-01 + 5.48923952e-01 5.50253802e-01 5.51585242e-01 5.52918272e-01 5.54252890e-01 + 5.55589096e-01 5.56926891e-01 5.58266274e-01 5.59607245e-01 5.60949803e-01 + 5.62293948e-01 5.63639680e-01 5.64986999e-01 5.66335903e-01 5.67686394e-01 + 5.69038470e-01 5.70392132e-01 5.71747378e-01 5.73104210e-01 5.74462626e-01 + 5.75822626e-01 5.77184210e-01 5.78547377e-01 5.79912128e-01 5.81278461e-01 + 5.82646378e-01 5.84015876e-01 5.85386957e-01 5.86759620e-01 5.88133864e-01 + 5.89509689e-01 5.90887095e-01 5.92266082e-01 5.93646649e-01 5.95028796e-01 + 5.96412522e-01 5.97797828e-01 5.99184713e-01 6.00573177e-01 6.01963219e-01 + 6.03354840e-01 6.04748038e-01 6.06142814e-01 6.07539167e-01 6.08937097e-01 + 6.10336603e-01 6.11737686e-01 6.13140346e-01 6.14544580e-01 6.15950391e-01 + 6.17357776e-01 6.18766736e-01 6.20177271e-01 6.21589379e-01 6.23003062e-01 + 6.24418319e-01 6.25835148e-01 6.27253551e-01 6.28673526e-01 6.30095073e-01 + 6.31518193e-01 6.32942884e-01 6.34369147e-01 6.35796981e-01 6.37226386e-01 + 6.38657361e-01 6.40089906e-01 6.41524022e-01 6.42959706e-01 6.44396960e-01 + 6.45835783e-01 6.47276175e-01 6.48718135e-01 6.50161663e-01 6.51606758e-01 + 6.53053421e-01 6.54501651e-01 6.55951448e-01 6.57402811e-01 6.58855740e-01 + 6.60310236e-01 6.61766296e-01 6.63223922e-01 6.64683112e-01 6.66143868e-01 + 6.67606187e-01 6.69070070e-01 6.70535517e-01 6.72002527e-01 6.73471100e-01 + 6.74941236e-01 6.76412934e-01 6.77886194e-01 6.79361015e-01 6.80837398e-01 + 1.19316516e-02 1.17837661e-02 1.16368916e-02 1.14910312e-02 1.13461881e-02 + 1.12023652e-02 1.10595657e-02 1.09177924e-02 1.07770486e-02 1.06373371e-02 + 1.04986608e-02 1.03610229e-02 1.02244262e-02 1.00888736e-02 9.95436796e-03 + 9.82091227e-03 9.68850936e-03 9.55716205e-03 9.42687318e-03 9.29764555e-03 + 9.16948195e-03 9.04238514e-03 8.91635788e-03 8.79140288e-03 8.66752287e-03 + 8.54472052e-03 8.42299850e-03 8.30235947e-03 8.18280604e-03 8.06434082e-03 + 7.94696640e-03 7.83068535e-03 7.71550020e-03 7.60141348e-03 7.48842769e-03 + 7.37654531e-03 7.26576880e-03 7.15610060e-03 7.04754311e-03 6.94009874e-03 + 6.83376985e-03 6.72855879e-03 6.62446789e-03 6.52149946e-03 6.41965576e-03 + 6.31893907e-03 6.21935162e-03 6.12089562e-03 6.02357326e-03 5.92738670e-03 + 5.83233810e-03 5.73842957e-03 5.64566320e-03 5.55404108e-03 5.46356524e-03 + 5.37423772e-03 5.28606051e-03 5.19903560e-03 5.11316493e-03 5.02845043e-03 + 4.94489402e-03 4.86249756e-03 4.78126291e-03 4.70119191e-03 4.62228636e-03 + 4.54454803e-03 4.46797870e-03 4.39258007e-03 4.31835387e-03 4.24530177e-03 + 4.17342543e-03 4.10272646e-03 4.03320649e-03 3.96486708e-03 3.89770979e-03 + 3.83173614e-03 3.76694764e-03 3.70334576e-03 3.64093194e-03 3.57970760e-03 + 3.51967415e-03 3.46083296e-03 3.40318535e-03 3.34673266e-03 3.29147617e-03 + 3.23741715e-03 3.18455682e-03 3.13289641e-03 3.08243708e-03 3.03318001e-03 + 2.98512631e-03 2.93827709e-03 2.89263342e-03 2.84819635e-03 2.80496690e-03 + 2.76294607e-03 2.72213481e-03 2.68253407e-03 2.64414475e-03 2.60696775e-03 + 2.57100391e-03 2.53625406e-03 2.50271900e-03 2.47039951e-03 2.43929633e-03 + 2.40941017e-03 2.38074173e-03 2.35329167e-03 2.32706061e-03 2.30204917e-03 + 2.27825792e-03 2.25568742e-03 2.23433817e-03 2.21421068e-03 2.19530540e-03 + 2.17762279e-03 2.16116324e-03 2.14592713e-03 2.13191482e-03 2.11912664e-03 + 2.10756286e-03 2.09722378e-03 2.08810961e-03 2.08022058e-03 2.07355687e-03 + 2.06811863e-03 2.06390598e-03 2.06091903e-03 2.05915784e-03 2.05862245e-03 + 2.05931288e-03 2.06122911e-03 2.06437109e-03 2.06873876e-03 2.07433201e-03 + 2.08115071e-03 2.08919471e-03 2.09846382e-03 2.10895782e-03 2.12067647e-03 + 2.13361950e-03 2.14778662e-03 2.16317748e-03 2.17979175e-03 2.19762903e-03 + 2.21668892e-03 2.23697097e-03 2.25847471e-03 2.28119965e-03 2.30514526e-03 + 2.33031099e-03 2.35669626e-03 2.38430046e-03 2.41312296e-03 2.44316308e-03 + 2.47442014e-03 2.50689342e-03 2.54058217e-03 2.57548561e-03 2.61160294e-03 + 2.64893333e-03 2.68747592e-03 2.72722982e-03 2.76819412e-03 2.81036787e-03 + 2.85375012e-03 2.89833986e-03 2.94413606e-03 2.99113769e-03 3.03934365e-03 + 3.08875285e-03 3.13936416e-03 3.19117640e-03 3.24418841e-03 3.29839896e-03 + 3.35380682e-03 3.41041071e-03 3.46820936e-03 3.52720143e-03 3.58738558e-03 + 3.64876043e-03 3.71132460e-03 3.77507665e-03 3.84001514e-03 3.90613858e-03 + 3.97344547e-03 4.04193428e-03 4.11160346e-03 4.18245143e-03 4.25447658e-03 + 4.32767727e-03 4.40205185e-03 4.47759865e-03 4.55431593e-03 4.63220199e-03 + 4.71125505e-03 4.79147333e-03 4.87285502e-03 4.95539830e-03 5.03910129e-03 + 5.12396213e-03 5.20997890e-03 5.29714966e-03 5.38547247e-03 5.47494535e-03 + 5.56556628e-03 5.65733324e-03 5.75024419e-03 5.84429703e-03 5.93948968e-03 + 6.03582001e-03 6.13328588e-03 6.23188511e-03 6.33161551e-03 6.43247487e-03 + 6.53446095e-03 6.63757148e-03 6.74180419e-03 6.84715676e-03 6.95362687e-03 + 7.06121216e-03 7.16991026e-03 7.27971878e-03 7.39063530e-03 7.50265737e-03 + 7.61578255e-03 7.73000833e-03 7.84533223e-03 7.96175172e-03 8.07926424e-03 + 8.19786724e-03 8.31755813e-03 8.43833428e-03 8.56019309e-03 8.68313189e-03 + 8.80714802e-03 8.93223879e-03 9.05840148e-03 9.18563337e-03 9.31393170e-03 + 9.44329371e-03 9.57371661e-03 9.70519759e-03 9.83773382e-03 9.97132246e-03 + 1.01059606e-02 1.02416455e-02 1.03783741e-02 1.05161435e-02 1.06549508e-02 + 1.07947931e-02 1.09356673e-02 1.10775705e-02 1.12204997e-02 1.13644517e-02 + 1.15094237e-02 1.16554125e-02 1.18024151e-02 1.19504282e-02 1.20994490e-02 + 1.22494741e-02 1.24005005e-02 1.25525250e-02 1.27055444e-02 1.28595555e-02 + 1.30145552e-02 1.31705401e-02 1.33275071e-02 1.34854528e-02 1.36443741e-02 + 1.38042677e-02 1.39651301e-02 1.41269582e-02 1.42897485e-02 1.44534978e-02 + 1.46182027e-02 1.47838598e-02 1.49504657e-02 1.51180170e-02 1.52865103e-02 + 1.54559422e-02 1.56263093e-02 1.57976080e-02 1.59698349e-02 1.61429866e-02 + 1.63170596e-02 1.64920502e-02 1.66679551e-02 1.68447707e-02 1.70224935e-02 + 1.72011198e-02 1.73806462e-02 1.75610691e-02 1.77423848e-02 1.79245899e-02 + 1.81076806e-02 1.82916533e-02 1.84765045e-02 1.86622305e-02 1.88488276e-02 + 1.90362922e-02 1.92246206e-02 1.94138091e-02 1.96038541e-02 1.97947518e-02 + 1.99864985e-02 2.01790905e-02 2.03725242e-02 2.05667957e-02 2.07619013e-02 + 2.09578372e-02 2.11545998e-02 2.13521852e-02 2.15505896e-02 2.17498093e-02 + 2.19498405e-02 2.21506794e-02 2.23523222e-02 2.25547650e-02 2.27580040e-02 + 2.29620355e-02 2.31668555e-02 2.33724603e-02 2.35788460e-02 2.37860087e-02 + 2.39939446e-02 2.42026499e-02 2.44121205e-02 2.46223528e-02 2.48333427e-02 + 2.50450864e-02 2.52575801e-02 2.54708198e-02 2.56848016e-02 2.58995216e-02 + 2.61149759e-02 2.63311606e-02 2.65480717e-02 2.67657054e-02 2.69840578e-02 + 2.72031248e-02 2.74229026e-02 2.76433871e-02 2.78645746e-02 2.80864610e-02 + 2.83090425e-02 2.85323149e-02 2.87562745e-02 2.89809172e-02 2.92062390e-02 + 2.94322361e-02 2.96589045e-02 2.98862402e-02 3.01142392e-02 3.03428976e-02 + 3.05722114e-02 3.08021766e-02 3.10327893e-02 3.12640455e-02 3.14959413e-02 + 3.17284726e-02 3.19616355e-02 3.21954260e-02 3.24298402e-02 3.26648740e-02 + 3.29005236e-02 3.31367848e-02 3.33736539e-02 3.36111267e-02 3.38491993e-02 + 3.40878677e-02 3.43271281e-02 3.45669763e-02 3.48074084e-02 3.50484206e-02 + 3.52900087e-02 3.55321689e-02 3.57748971e-02 3.60181895e-02 3.62620420e-02 + 3.65064508e-02 3.67514117e-02 3.69969210e-02 3.72429746e-02 3.74895686e-02 + 3.77366991e-02 3.79843621e-02 3.82325537e-02 3.84812698e-02 3.87305067e-02 + 3.89802604e-02 3.92305269e-02 3.94813024e-02 3.97325829e-02 3.99843644e-02 + 4.02366431e-02 4.04894151e-02 4.07426765e-02 4.09964234e-02 4.12506518e-02 + 4.15053579e-02 4.17605378e-02 4.20161876e-02 4.22723034e-02 4.25288815e-02 + 4.27859178e-02 4.30434086e-02 4.33013499e-02 4.35597380e-02 4.38185689e-02 + 4.40778389e-02 4.43375441e-02 4.45976807e-02 4.48582449e-02 4.51192328e-02 + 4.53806406e-02 4.56424645e-02 4.59047007e-02 4.61673455e-02 4.64303950e-02 + 4.66938455e-02 4.69576932e-02 4.72219342e-02 4.74865650e-02 4.77515816e-02 + 4.80169804e-02 4.82827576e-02 4.85489095e-02 4.88154324e-02 4.90823225e-02 + 4.93495761e-02 4.96171896e-02 4.98851592e-02 5.01534812e-02 5.04221520e-02 + 5.06911679e-02 5.09605252e-02 5.12302202e-02 5.15002494e-02 5.17706091e-02 + 5.20412956e-02 5.23123054e-02 5.25836347e-02 5.28552801e-02 5.31272378e-02 + 5.33995044e-02 5.36720762e-02 5.39449496e-02 5.42181211e-02 5.44915872e-02 + 5.47653442e-02 5.50393887e-02 5.53137171e-02 5.55883259e-02 5.58632116e-02 + 5.61383707e-02 5.64137997e-02 5.66894951e-02 5.69654535e-02 5.72416713e-02 + 5.75181451e-02 5.77948716e-02 5.80718471e-02 5.83490684e-02 5.86265320e-02 + 5.89042345e-02 5.91821725e-02 5.94603427e-02 5.97387415e-02 6.00173658e-02 + 6.02962120e-02 6.05752770e-02 6.08545573e-02 6.11340496e-02 6.14137506e-02 + 6.16936570e-02 6.19737655e-02 6.22540729e-02 6.25345758e-02 6.28152709e-02 + 6.30961552e-02 6.33772252e-02 6.36584778e-02 6.39399097e-02 6.42215178e-02 + 6.45032988e-02 6.47852496e-02 6.50673669e-02 6.53496477e-02 6.56320887e-02 + 6.59146868e-02 6.61974389e-02 6.64803419e-02 6.67633926e-02 6.70465880e-02 + 6.73299249e-02 6.76134004e-02 6.78970112e-02 6.81807545e-02 6.84646270e-02 + 6.87486259e-02 6.90327480e-02 6.93169904e-02 6.96013501e-02 6.98858240e-02 + 7.01704093e-02 7.04551029e-02 7.07399019e-02 7.10248033e-02 7.13098043e-02 + 7.15949019e-02 7.18800932e-02 7.21653753e-02 7.24507453e-02 7.27362004e-02 + 7.30217377e-02 7.33073544e-02 7.35930475e-02 7.38788144e-02 7.41646521e-02 + 7.44505580e-02 7.47365291e-02 7.50225627e-02 7.53086561e-02 7.55948066e-02 + 7.58810112e-02 7.61672674e-02 7.64535724e-02 7.67399235e-02 7.70263181e-02 + 7.73127534e-02 7.75992267e-02 7.78857354e-02 7.81722770e-02 7.84588486e-02 + 7.87454477e-02 7.90320718e-02 7.93187181e-02 7.96053841e-02 7.98920673e-02 + 8.01787651e-02 8.04654749e-02 8.07521941e-02 8.10389204e-02 8.13256510e-02 + 8.16123836e-02 8.18991157e-02 8.21858447e-02 8.24725683e-02 8.27592839e-02 + 8.30459891e-02 8.33326815e-02 8.36193586e-02 8.39060181e-02 8.41926576e-02 + 8.44792746e-02 8.47658669e-02 8.50524319e-02 8.53389675e-02 8.56254713e-02 + 8.59119408e-02 8.61983740e-02 8.64847683e-02 8.67711216e-02 8.70574315e-02 + 8.73436959e-02 8.76299124e-02 8.79160788e-02 8.82021929e-02 8.84882524e-02 + 8.87742552e-02 8.90601991e-02 8.93460819e-02 8.96319014e-02 8.99176554e-02 + 9.02033419e-02 9.04889586e-02 9.07745035e-02 9.10599745e-02 9.13453694e-02 + 9.16306861e-02 9.19159227e-02 9.22010770e-02 9.24861469e-02 9.27711305e-02 + 9.30560257e-02 9.33408305e-02 9.36255428e-02 9.39101607e-02 9.41946823e-02 + 9.44791055e-02 9.47634283e-02 9.50476489e-02 9.53317653e-02 9.56157755e-02 + 9.58996777e-02 9.61834699e-02 9.64671503e-02 9.67507170e-02 9.70341681e-02 + 9.73175018e-02 9.76007161e-02 9.78838094e-02 9.81667797e-02 9.84496252e-02 + 9.87323442e-02 9.90149348e-02 9.92973954e-02 9.95797240e-02 9.98619190e-02 + 1.00143979e-01 1.00425901e-01 1.00707685e-01 1.00989328e-01 1.01270829e-01 + 1.01552185e-01 1.01833397e-01 1.02114461e-01 1.02395376e-01 1.02676140e-01 + 1.02956752e-01 1.03237211e-01 1.03517513e-01 1.03797659e-01 1.04077646e-01 + 1.04357473e-01 1.04637138e-01 1.04916640e-01 1.05195977e-01 1.05475147e-01 + 1.05754150e-01 1.06032982e-01 1.06311644e-01 1.06590134e-01 1.06868449e-01 + 1.07146589e-01 1.07424552e-01 1.07702336e-01 1.07979941e-01 1.08257365e-01 + 1.08534605e-01 1.08811662e-01 1.09088533e-01 1.09365218e-01 1.09641714e-01 + 1.09918020e-01 1.10194135e-01 1.10470058e-01 1.10745788e-01 1.11021322e-01 + 1.11296660e-01 1.11571800e-01 1.11846741e-01 1.12121482e-01 1.12396021e-01 + 1.12670358e-01 1.12944490e-01 1.13218418e-01 1.13492138e-01 1.13765651e-01 + 1.14038955e-01 1.14312048e-01 1.14584930e-01 1.14857599e-01 1.15130055e-01 + 1.15402295e-01 1.15674319e-01 1.15946126e-01 1.16217714e-01 1.16489083e-01 + 1.16760231e-01 1.17031157e-01 1.17301860e-01 1.17572339e-01 1.17842593e-01 + 1.18112620e-01 1.18382420e-01 1.18651992e-01 1.18921334e-01 1.19190445e-01 + 1.19459326e-01 1.19727973e-01 1.19996387e-01 1.20264566e-01 1.20532510e-01 + 1.20800216e-01 1.21067686e-01 1.21334917e-01 1.21601908e-01 1.21868658e-01 + 1.22135167e-01 1.22401434e-01 1.22667458e-01 1.22933237e-01 1.23198771e-01 + 1.23464058e-01 1.23729099e-01 1.23993892e-01 1.24258436e-01 1.24522731e-01 + 1.24786775e-01 1.25050567e-01 1.25314108e-01 1.25577395e-01 1.25840428e-01 + 1.26103207e-01 1.26365730e-01 1.26627997e-01 1.26890006e-01 1.27151758e-01 + 1.27413251e-01 1.27674484e-01 1.27935457e-01 1.28196169e-01 1.28456619e-01 + 1.28716807e-01 1.28976731e-01 1.29236391e-01 1.29495787e-01 1.29754917e-01 + 1.30013780e-01 1.30272377e-01 1.30530707e-01 1.30788768e-01 1.31046560e-01 + 1.31304083e-01 1.31561335e-01 1.31818316e-01 1.32075026e-01 1.32331463e-01 + 1.32587628e-01 1.32843519e-01 1.33099136e-01 1.33354479e-01 1.33609546e-01 + 1.33864337e-01 1.34118851e-01 1.34373088e-01 1.34627048e-01 1.34880730e-01 + 1.35134132e-01 1.35387255e-01 1.35640099e-01 1.35892661e-01 1.36144943e-01 + 1.36396943e-01 1.36648661e-01 1.36900097e-01 1.37151249e-01 1.37402118e-01 + 1.37652702e-01 1.37903003e-01 1.38153017e-01 1.38402747e-01 1.38652190e-01 + 1.38901347e-01 1.39150217e-01 1.39398799e-01 1.39647094e-01 1.39895100e-01 + 1.40142817e-01 1.40390246e-01 1.40637384e-01 1.40884233e-01 1.41130791e-01 + 1.41377059e-01 1.41623035e-01 1.41868719e-01 1.42114112e-01 1.42359212e-01 + 1.42604020e-01 1.42848534e-01 1.43092755e-01 1.43336681e-01 1.43580314e-01 + 1.43823652e-01 1.44066695e-01 1.44309444e-01 1.44551896e-01 1.44794053e-01 + 1.45035913e-01 1.45277477e-01 1.45518744e-01 1.45759714e-01 1.46000386e-01 + 1.46240761e-01 1.46480838e-01 1.46720616e-01 1.46960096e-01 1.47199277e-01 + 1.47438159e-01 1.47676742e-01 1.47915025e-01 1.48153009e-01 1.48390692e-01 + 1.48628075e-01 1.48865157e-01 1.49101939e-01 1.49338419e-01 1.49574598e-01 + 1.49810476e-01 1.50046052e-01 1.50281327e-01 1.50516299e-01 1.50750969e-01 + 1.50985337e-01 1.51219402e-01 1.51453164e-01 1.51686623e-01 1.51919779e-01 + 1.52152632e-01 1.52385181e-01 1.52617427e-01 1.52849368e-01 1.53081006e-01 + 1.53312340e-01 1.53543370e-01 1.53774095e-01 1.54004516e-01 1.54234632e-01 + 1.54464444e-01 1.54693950e-01 1.54923152e-01 1.55152049e-01 1.55380640e-01 + 1.55608926e-01 1.55836907e-01 1.56064583e-01 1.56291953e-01 1.56519017e-01 + 1.56745775e-01 1.56972228e-01 1.57198375e-01 1.57424216e-01 1.57649751e-01 + 1.57874980e-01 1.58099903e-01 1.58324520e-01 1.58548831e-01 1.58772835e-01 + 1.58996533e-01 1.59219925e-01 1.59443010e-01 1.59665790e-01 1.59888262e-01 + 1.60110429e-01 1.60332289e-01 1.60553842e-01 1.60775089e-01 1.60996030e-01 + 1.61216664e-01 1.61436992e-01 1.61657013e-01 1.61876728e-01 1.62096136e-01 + 1.62315238e-01 1.62534034e-01 1.62752523e-01 1.62970706e-01 1.63188582e-01 + 1.63406152e-01 1.63623416e-01 1.63840374e-01 1.64057026e-01 1.64273371e-01 + 1.64489411e-01 1.64705144e-01 1.64920571e-01 1.65135693e-01 1.65350508e-01 + 1.65565018e-01 1.65779222e-01 1.65993121e-01 1.66206714e-01 1.66420001e-01 + 1.66632983e-01 1.66845660e-01 1.67058031e-01 1.67270097e-01 1.67481858e-01 + 1.67693314e-01 1.67904465e-01 1.68115312e-01 1.68325854e-01 1.68536091e-01 + 1.68746023e-01 1.68955652e-01 1.69164976e-01 1.69373996e-01 1.69582712e-01 + 1.69791124e-01 1.69999232e-01 1.70207037e-01 1.70414538e-01 1.70621735e-01 + 1.70828630e-01 1.71035221e-01 1.71241510e-01 1.71447495e-01 1.71653178e-01 + 1.71858558e-01 1.72063636e-01 1.72268412e-01 1.72472886e-01 1.72677057e-01 + 1.72880927e-01 1.73084495e-01 1.73287762e-01 1.73490728e-01 1.73693392e-01 + 1.73895756e-01 1.74097819e-01 1.74299581e-01 1.74501043e-01 1.74702204e-01 + 1.74903066e-01 1.75103627e-01 1.75303889e-01 1.75503852e-01 1.75703515e-01 + 1.75902879e-01 1.76101944e-01 1.76300710e-01 1.76499178e-01 1.76697348e-01 + 1.76895219e-01 1.77092792e-01 1.77290068e-01 1.77487046e-01 1.77683727e-01 + 1.77880111e-01 1.78076198e-01 1.78271989e-01 1.78467483e-01 1.78662680e-01 + 1.78857582e-01 1.79052188e-01 1.79246498e-01 1.79440514e-01 1.79634234e-01 + 1.79827659e-01 1.80020789e-01 1.80213625e-01 1.80406167e-01 1.80598415e-01 + 1.80790370e-01 1.80982031e-01 1.81173398e-01 1.81364473e-01 1.81555255e-01 + 1.81745745e-01 1.81935942e-01 1.82125848e-01 1.82315462e-01 1.82504784e-01 + 1.82693815e-01 1.82882555e-01 1.83071004e-01 1.83259163e-01 1.83447032e-01 + 1.83634611e-01 1.83821900e-01 1.84008900e-01 1.84195611e-01 1.84382033e-01 + 1.84568166e-01 1.84754012e-01 1.84939569e-01 1.85124838e-01 1.85309820e-01 + 1.85494514e-01 1.85678922e-01 1.85863043e-01 1.86046878e-01 1.86230426e-01 + 1.86413689e-01 1.86596666e-01 1.86779358e-01 1.86961765e-01 1.87143887e-01 + 1.87325725e-01 1.87507279e-01 1.87688549e-01 1.87869536e-01 1.88050239e-01 + 1.88230659e-01 1.88410797e-01 1.88590653e-01 1.88770226e-01 1.88949518e-01 + 1.89128528e-01 1.89307257e-01 1.89485705e-01 1.89663873e-01 1.89841761e-01 + 1.90019368e-01 1.90196696e-01 1.90373745e-01 1.90550515e-01 1.90727005e-01 + 1.90903218e-01 1.91079153e-01 1.91254809e-01 1.91430189e-01 1.91605291e-01 + 1.91780116e-01 1.91954665e-01 1.92128937e-01 1.92302934e-01 1.92476655e-01 + 1.92650101e-01 1.92823272e-01 1.92996169e-01 1.93168791e-01 1.93341139e-01 + 1.93513213e-01 1.93685014e-01 1.93856543e-01 1.94027798e-01 1.94198781e-01 + 1.94369492e-01 1.94539932e-01 1.94710100e-01 1.94879997e-01 1.95049623e-01 + 1.95218979e-01 1.95388065e-01 1.95556881e-01 1.95725428e-01 1.95893706e-01 + 1.96061715e-01 1.96229455e-01 1.96396928e-01 1.96564133e-01 1.96731070e-01 + 1.96897741e-01 1.97064144e-01 1.97230282e-01 1.97396153e-01 1.97561758e-01 + 1.97727099e-01 1.97892174e-01 1.98056984e-01 1.98221530e-01 1.98385813e-01 + 1.98549831e-01 1.98713586e-01 1.98877078e-01 1.99040308e-01 1.99203275e-01 + 1.99365980e-01 1.99528424e-01 1.99690606e-01 1.99852528e-01 2.00014188e-01 + 2.00175589e-01 2.00336730e-01 2.00497611e-01 2.00658233e-01 2.00818596e-01 + 2.00978701e-01 2.01138547e-01 2.01298136e-01 2.01457467e-01 2.01616542e-01 + 2.01775359e-01 2.01933920e-01 2.02092225e-01 2.02250274e-01 2.02408068e-01 + 2.02565607e-01 2.02722891e-01 2.02879921e-01 2.03036697e-01 2.03193220e-01 + 2.03349489e-01 2.03505505e-01 2.03661269e-01 2.03816780e-01 2.03972040e-01 + 2.04127048e-01 2.04281805e-01 2.04436312e-01 2.04590568e-01 2.04744573e-01 + 2.04898329e-01 2.05051836e-01 2.05205094e-01 2.05358103e-01 2.05510864e-01 + 2.05663377e-01 2.05815642e-01 2.05967660e-01 2.06119432e-01 2.06270956e-01 + 2.06422235e-01 2.06573268e-01 2.06724055e-01 2.06874598e-01 2.07024895e-01 + 2.07174948e-01 2.07324757e-01 2.07474323e-01 2.07623645e-01 2.07772725e-01 + 2.07921561e-01 2.08070156e-01 2.08218508e-01 2.08366619e-01 2.08514489e-01 + 2.08662119e-01 2.08809507e-01 2.08956656e-01 2.09103565e-01 2.09250235e-01 + 2.09396665e-01 2.09542857e-01 2.09688811e-01 2.09834526e-01 2.09980005e-01 + 2.10125246e-01 2.10270250e-01 2.10415017e-01 2.10559549e-01 2.10703844e-01 + 2.10847905e-01 2.10991730e-01 2.11135320e-01 2.11278676e-01 2.11421799e-01 + 2.11564687e-01 2.11707342e-01 2.11849765e-01 2.11991955e-01 2.12133912e-01 + 2.12275638e-01 2.12417132e-01 2.12558395e-01 2.12699428e-01 2.12840230e-01 + 2.12980802e-01 2.13121144e-01 2.13261257e-01 2.13401141e-01 2.13540796e-01 + 2.13680223e-01 2.13819422e-01 2.13958394e-01 2.14097138e-01 2.14235656e-01 + 2.14373947e-01 2.14512011e-01 2.14649851e-01 2.14787464e-01 2.14924853e-01 + 2.15062017e-01 2.15198957e-01 2.15335672e-01 2.15472164e-01 2.15608433e-01 + 2.15744479e-01 2.15880302e-01 2.16015903e-01 2.16151282e-01 2.16286440e-01 + 2.16421376e-01 2.16556092e-01 2.16690587e-01 2.16824862e-01 2.16958918e-01 + 2.17092754e-01 2.17226371e-01 2.17359769e-01 2.17492949e-01 2.17625911e-01 + 2.17758656e-01 2.17891183e-01 2.18023493e-01 2.18155587e-01 2.18287464e-01 + 2.18419126e-01 2.18550572e-01 2.18681803e-01 2.18812819e-01 2.18943621e-01 + 2.19074208e-01 2.19204582e-01 2.19334742e-01 2.19464690e-01 2.19594424e-01 + 2.19723946e-01 2.19853257e-01 2.19982355e-01 2.20111242e-01 2.20239919e-01 + 2.20368384e-01 2.20496640e-01 2.20624685e-01 2.20752521e-01 2.20880148e-01 + 2.21007566e-01 2.21134775e-01 2.21261776e-01 2.21388569e-01 2.21515155e-01 + 2.21641533e-01 2.21767705e-01 2.21893670e-01 2.22019429e-01 2.22144983e-01 + 2.22270331e-01 2.22395473e-01 2.22520411e-01 2.22645145e-01 2.22769675e-01 + 2.22894000e-01 2.23018123e-01 2.23142042e-01 2.23265759e-01 2.23389273e-01 + 2.23512586e-01 2.23635696e-01 2.23758606e-01 2.23881314e-01 2.24003822e-01 + 2.24126129e-01 2.24248236e-01 2.24370144e-01 2.24491852e-01 2.24613362e-01 + 2.24734673e-01 2.24855785e-01 2.24976700e-01 2.25097417e-01 2.25217936e-01 + 2.25338259e-01 2.25458385e-01 2.25578315e-01 2.25698048e-01 2.25817587e-01 + 2.25936930e-01 2.26056078e-01 2.26175031e-01 2.26293790e-01 2.26412355e-01 + 2.26530727e-01 2.26648905e-01 2.26766890e-01 2.26884683e-01 2.27002283e-01 + 2.27119691e-01 2.27236908e-01 2.27353934e-01 2.27470768e-01 2.27587412e-01 + 2.27703865e-01 2.27820129e-01 2.27936203e-01 2.28052087e-01 2.28167783e-01 + 2.28283290e-01 2.28398608e-01 2.28513738e-01 2.28628681e-01 2.28743437e-01 + 2.28858005e-01 2.28972386e-01 2.29086581e-01 2.29200591e-01 2.29314414e-01 + 2.29428052e-01 2.29541504e-01 2.29654772e-01 2.29767856e-01 2.29880755e-01 + 2.29993470e-01 2.30106002e-01 2.30218351e-01 2.30330517e-01 2.30442500e-01 + 2.30554301e-01 2.30665921e-01 2.30777358e-01 2.30888614e-01 2.30999690e-01 + 2.31110584e-01 2.31221299e-01 2.31331833e-01 2.31442188e-01 2.31552363e-01 + 2.31662359e-01 2.31772176e-01 2.31881815e-01 2.31991276e-01 2.32100559e-01 + 2.32209665e-01 2.32318593e-01 2.32427344e-01 2.32535919e-01 2.32644318e-01 + 2.32752540e-01 2.32860587e-01 2.32968459e-01 2.33076155e-01 2.33183677e-01 + 2.33291025e-01 2.33398198e-01 2.33505198e-01 2.33612024e-01 2.33718676e-01 + 2.33825157e-01 2.33931464e-01 2.34037599e-01 2.34143562e-01 2.34249354e-01 + 2.34354974e-01 2.34460423e-01 2.34565702e-01 2.34670810e-01 2.34775748e-01 + 2.34880516e-01 2.34985114e-01 2.35089544e-01 2.35193804e-01 2.35297896e-01 + 2.35401819e-01 2.35505574e-01 2.35609162e-01 2.35712582e-01 2.35815835e-01 + 2.35918921e-01 2.36021841e-01 2.36124594e-01 2.36227182e-01 2.36329603e-01 + 2.36431860e-01 2.36533951e-01 2.36635878e-01 2.36737640e-01 2.36839238e-01 + 2.36940672e-01 2.37041942e-01 2.37143049e-01 2.37243994e-01 2.37344775e-01 + 2.37445394e-01 2.37545851e-01 2.37646146e-01 2.37746279e-01 2.37846251e-01 + 2.37946062e-01 2.38045713e-01 2.38145203e-01 2.38244533e-01 2.38343703e-01 + 2.38442713e-01 2.38541565e-01 2.38640257e-01 2.38738790e-01 2.38837166e-01 + 2.38935383e-01 2.39033442e-01 2.39131344e-01 2.39229088e-01 2.39326676e-01 + 2.39424106e-01 2.39521381e-01 2.39618499e-01 2.39715461e-01 2.39812268e-01 + 2.39908919e-01 2.40005416e-01 2.40101757e-01 2.40197944e-01 2.40293977e-01 + 2.40389856e-01 2.40485582e-01 2.40581154e-01 2.40676573e-01 2.40771839e-01 + 2.40866953e-01 2.40961914e-01 2.41056724e-01 2.41151382e-01 2.41245888e-01 + 2.41340243e-01 2.41434447e-01 2.41528501e-01 2.41622404e-01 2.41716158e-01 + 2.41809761e-01 2.41903215e-01 2.41996520e-01 2.42089675e-01 2.42182682e-01 + 2.42275541e-01 2.42368251e-01 2.42460813e-01 2.42553228e-01 2.42645496e-01 + 2.42737616e-01 2.42829589e-01 2.42921416e-01 2.43013097e-01 2.43104631e-01 + 2.43196020e-01 2.43287263e-01 2.43378361e-01 2.43469314e-01 2.43560122e-01 + 2.43650786e-01 2.43741306e-01 2.43831681e-01 2.43921913e-01 2.44012001e-01 + 2.44101947e-01 2.44191749e-01 2.44281409e-01 2.44370926e-01 2.44460302e-01 + 2.44549535e-01 2.44638627e-01 2.44727577e-01 2.44816386e-01 2.44905055e-01 + 2.44993583e-01 2.45081970e-01 2.45170218e-01 2.45258325e-01 2.45346293e-01 + 2.45434122e-01 2.45521812e-01 2.45609362e-01 2.45696775e-01 2.45784049e-01 + 2.45871185e-01 2.45958183e-01 2.46045043e-01 2.46131766e-01 2.46218353e-01 + 2.46304802e-01 2.46391115e-01 2.46477291e-01 2.46563332e-01 2.46649236e-01 + 2.46735006e-01 2.46820639e-01 2.46906138e-01 2.46991502e-01 2.47076731e-01 + 2.47161826e-01 2.47246787e-01 2.47331614e-01 2.47416307e-01 2.47500867e-01 + 2.47585294e-01 2.47669588e-01 2.47753749e-01 2.47837778e-01 2.47921675e-01 + 2.48005440e-01 2.48089073e-01 2.48172575e-01 2.48255945e-01 2.48339185e-01 + 2.48422294e-01 2.48505272e-01 2.48588120e-01 2.48670839e-01 2.48753427e-01 + 2.48835886e-01 2.48918215e-01 2.49000416e-01 2.49082487e-01 2.49164431e-01 + 2.49246245e-01 2.49327932e-01 2.49409490e-01 2.49490922e-01 2.49572225e-01 + 2.49653402e-01 2.49734451e-01 2.49815374e-01 2.49896170e-01 2.49976840e-01 + 2.50057384e-01 2.50137802e-01 2.50218094e-01 2.50298261e-01 2.50378303e-01 + 2.50458221e-01 2.50538013e-01 2.50617681e-01 2.50697225e-01 2.50776645e-01 + 2.50855941e-01 2.50935113e-01 2.51014162e-01 2.51093088e-01 2.51171892e-01 + 2.51250572e-01 2.51329130e-01 2.51407566e-01 2.51485880e-01 2.51564073e-01 + 2.51642143e-01 2.51720093e-01 2.51797921e-01 2.51875629e-01 2.51953216e-01 + 2.52030682e-01 2.52108028e-01 2.52185254e-01 2.52262361e-01 2.52339348e-01 + 2.52416215e-01 2.52492964e-01 2.52569593e-01 2.52646104e-01 2.52722497e-01 + 2.52798771e-01 2.52874927e-01 2.52950965e-01 2.53026886e-01 2.53102689e-01 + 2.53178375e-01 2.53253944e-01 2.53329397e-01 2.53404733e-01 2.53479952e-01 + 2.53555056e-01 2.53630043e-01 2.53704915e-01 2.53779671e-01 2.53854312e-01 + 2.53928839e-01 2.54003250e-01 2.54077546e-01 2.54151728e-01 2.54225796e-01 + 2.54299750e-01 2.54373590e-01 2.54447316e-01 2.54520930e-01 2.54594429e-01 + 2.54667816e-01 2.54741090e-01 2.54814252e-01 2.54887301e-01 2.54960238e-01 + 2.55033063e-01 2.55105776e-01 2.55178378e-01 2.55250868e-01 2.55323247e-01 + 2.55395516e-01 2.55467673e-01 2.55539720e-01 2.55611657e-01 2.55683483e-01 + 2.55755200e-01 2.55826806e-01 2.55898304e-01 2.55969692e-01 2.56040970e-01 + 2.56112140e-01 2.56183201e-01 2.56254154e-01 2.56324998e-01 2.56395734e-01 + 2.56466362e-01 2.56536882e-01 2.56607295e-01 2.56677600e-01 2.56747798e-01 + 2.56817889e-01 2.56887874e-01 2.56957752e-01 2.57027523e-01 2.57097188e-01 + 2.57166747e-01 2.57236200e-01 2.57305548e-01 2.57374790e-01 2.57443927e-01 + 2.57512959e-01 2.57581886e-01 2.57650709e-01 2.57719427e-01 2.57788040e-01 + 2.57856550e-01 2.57924955e-01 2.57993257e-01 2.58061455e-01 2.58129550e-01 + 2.58197542e-01 2.58265431e-01 2.58333217e-01 2.58400900e-01 2.58468481e-01 + 2.58535960e-01 2.58603336e-01 2.58670611e-01 2.58737784e-01 2.58804856e-01 + 2.58871826e-01 2.58938695e-01 2.59005463e-01 2.59072131e-01 2.59138697e-01 + 2.59205164e-01 2.59271530e-01 2.59337796e-01 2.59403962e-01 2.59470029e-01 + 2.59535996e-01 2.59601864e-01 2.59667633e-01 2.59733302e-01 2.59798873e-01 + 2.59864345e-01 2.59929719e-01 2.59994995e-01 2.60060172e-01 2.60125252e-01 + 2.60190234e-01 2.60255118e-01 2.60319905e-01 2.60384595e-01 2.60449188e-01 + 2.60513684e-01 2.60578083e-01 2.60642386e-01 2.60706593e-01 2.60770703e-01 + 2.60834718e-01 2.60898636e-01 2.60962459e-01 2.61026187e-01 2.61089819e-01 + 2.61153356e-01 2.61216799e-01 2.61280146e-01 2.61343399e-01 2.61406557e-01 + 2.61469622e-01 2.61532592e-01 2.61595468e-01 2.61658250e-01 2.61720939e-01 + 2.61783535e-01 2.61846037e-01 2.61908446e-01 2.61970763e-01 2.62032986e-01 + 2.62095117e-01 2.62157156e-01 2.62219102e-01 2.62280956e-01 2.62342719e-01 + 2.62404389e-01 2.62465968e-01 2.62527456e-01 2.62588852e-01 2.62650158e-01 + 2.62711372e-01 2.62772496e-01 2.62833529e-01 2.62894471e-01 2.62955324e-01 + 2.63016086e-01 2.63076758e-01 2.63137341e-01 2.63197833e-01 2.63258237e-01 + 2.63318551e-01 2.63378776e-01 2.63438912e-01 2.63498959e-01 2.63558918e-01 + 2.63618788e-01 2.63678569e-01 2.63738263e-01 2.63797868e-01 2.63857386e-01 + 2.63916816e-01 2.63976158e-01 2.64035413e-01 2.64094581e-01 2.64153661e-01 + 2.64212655e-01 2.64271562e-01 2.64330382e-01 2.64389116e-01 2.64447763e-01 + 2.64506324e-01 2.64564800e-01 2.64623189e-01 2.64681493e-01 2.64739711e-01 + 2.64797844e-01 2.64855892e-01 2.64913854e-01 2.64971732e-01 2.65029524e-01 + 2.65087233e-01 2.65144856e-01 2.65202396e-01 2.65259851e-01 2.65317222e-01 + 2.65374509e-01 2.65431713e-01 2.65488833e-01 2.65545869e-01 2.65602822e-01 + 2.65659692e-01 2.65716480e-01 2.65773184e-01 2.65829805e-01 2.65886344e-01 + 2.65942801e-01 2.65999175e-01 2.66055468e-01 2.66111678e-01 2.66167806e-01 + 2.66223853e-01 2.66279819e-01 2.66335703e-01 2.66391505e-01 2.66447227e-01 + 2.66502868e-01 2.66558427e-01 2.66613907e-01 2.66669305e-01 2.66724624e-01 + 2.66779862e-01 2.66835020e-01 2.66890098e-01 2.66945096e-01 2.67000015e-01 + 2.67054854e-01 2.67109613e-01 2.67164294e-01 2.67218895e-01 2.67273418e-01 + 2.67327861e-01 2.67382226e-01 2.67436512e-01 2.67490720e-01 2.67544850e-01 + 2.67598902e-01 2.67652875e-01 2.67706771e-01 2.67760589e-01 2.67814330e-01 + 2.67867993e-01 2.67921578e-01 2.67975087e-01 2.68028519e-01 2.68081873e-01 + 2.68135151e-01 2.68188352e-01 2.68241477e-01 2.68294526e-01 2.68347498e-01 + 2.68400394e-01 2.68453214e-01 2.68505959e-01 2.68558628e-01 2.68611221e-01 + 2.68663738e-01 2.68716181e-01 2.68768548e-01 2.68820841e-01 2.68873058e-01 + 2.68925201e-01 2.68977269e-01 2.69029263e-01 2.69081182e-01 2.69133027e-01 + 2.69184798e-01 2.69236495e-01 2.69288118e-01 2.69339668e-01 2.69391143e-01 + 2.69442546e-01 2.69493875e-01 2.69545131e-01 2.69596314e-01 2.69647424e-01 + 2.69698461e-01 2.69749425e-01 2.69800317e-01 2.69851137e-01 2.69901884e-01 + 2.69952559e-01 2.70003162e-01 2.70053693e-01 2.70104153e-01 2.70154540e-01 + 2.70204856e-01 2.70255101e-01 2.70305274e-01 2.70355377e-01 2.70405408e-01 + 2.70455368e-01 2.70505258e-01 2.70555077e-01 2.70604825e-01 2.70654503e-01 + 2.70704110e-01 2.70753648e-01 2.70803115e-01 2.70852513e-01 2.70901840e-01 + 2.70951098e-01 2.71000287e-01 2.71049406e-01 2.71098455e-01 2.71147436e-01 + 2.71196347e-01 2.71245190e-01 2.71293963e-01 2.71342668e-01 2.71391304e-01 + 2.71439872e-01 2.71488372e-01 2.71536803e-01 2.71585166e-01 2.71633461e-01 + 2.71681688e-01 2.71729848e-01 2.71777939e-01 2.71825964e-01 2.71873921e-01 + 2.71921810e-01 2.71969632e-01 2.72017388e-01 2.72065076e-01 2.72112698e-01 + 2.72160252e-01 2.72207741e-01 2.72255162e-01 2.72302518e-01 2.72349807e-01 + 2.72397030e-01 2.72444187e-01 2.72491278e-01 2.72538303e-01 2.72585263e-01 + 2.72632157e-01 2.72678985e-01 2.72725748e-01 2.72772446e-01 2.72819079e-01 + 2.72865647e-01 2.72912150e-01 2.72958588e-01 2.73004962e-01 2.73051271e-01 + 2.73097516e-01 2.73143696e-01 2.73189812e-01 2.73235864e-01 2.73281852e-01 + 2.73327776e-01 2.73373636e-01 2.73419432e-01 2.73465166e-01 2.73510835e-01 + 2.73556441e-01 2.73601984e-01 2.73647464e-01 2.73692881e-01 2.73738235e-01 + 2.73783526e-01 2.73828755e-01 2.73873921e-01 2.73919024e-01 2.73964065e-01 + 2.74009044e-01 2.74053961e-01 2.74098815e-01 2.74143608e-01 2.74188339e-01 + 2.74233008e-01 2.74277616e-01 2.74322162e-01 2.74366646e-01 2.74411070e-01 + 2.74455432e-01 2.74499733e-01 2.74543973e-01 2.74588152e-01 2.74632270e-01 + 2.74676328e-01 2.74720325e-01 2.74764262e-01 2.74808138e-01 2.74851954e-01 + 2.74895710e-01 2.74939406e-01 2.74983042e-01 2.75026618e-01 2.75070135e-01 + 2.75113591e-01 2.75156988e-01 2.75200326e-01 2.75243604e-01 2.75286824e-01 + 2.75329984e-01 2.75373085e-01 2.75416127e-01 2.75459110e-01 2.75502034e-01 + 2.75544900e-01 2.75587707e-01 2.75630456e-01 2.75673147e-01 2.75715779e-01 + 2.75758353e-01 2.75800869e-01 2.75843328e-01 2.75885728e-01 2.75928070e-01 + 2.75970355e-01 2.76012583e-01 2.76054753e-01 2.76096866e-01 2.76138921e-01 + 2.76180919e-01 2.76222860e-01 2.76264745e-01 2.76306572e-01 2.76348342e-01 + 2.76390056e-01 2.76431714e-01 2.76473315e-01 2.76514859e-01 2.76556347e-01 + 2.76597779e-01 2.76639155e-01 2.76680475e-01 2.76721739e-01 2.76762947e-01 + 2.76804100e-01 2.76845197e-01 2.76886238e-01 2.76927224e-01 2.76968154e-01 + 2.77009030e-01 2.77049850e-01 2.77090615e-01 2.77131325e-01 2.77171980e-01 + 2.77212581e-01 2.77253126e-01 2.77293617e-01 2.77334054e-01 2.77374436e-01 + 2.77414764e-01 2.77455038e-01 2.77495257e-01 2.77535423e-01 2.77575534e-01 + 2.77615592e-01 2.77655596e-01 2.77695546e-01 2.77735443e-01 2.77775286e-01 + 2.77815076e-01 2.77854812e-01 2.77894495e-01 2.77934125e-01 2.77973702e-01 + 2.78013226e-01 2.78052697e-01 2.78092115e-01 2.78131481e-01 2.78170794e-01 + 2.78210054e-01 2.78249262e-01 2.78288418e-01 2.78327521e-01 2.78366572e-01 + 2.78405571e-01 2.78444519e-01 2.78483414e-01 2.78522257e-01 2.78561049e-01 + 2.78599789e-01 2.78638477e-01 2.78677114e-01 2.78715700e-01 2.78754234e-01 + 2.78792717e-01 2.78831149e-01 2.78869530e-01 2.78907859e-01 2.78946138e-01 + 2.08130000e-04 2.08281191e-04 2.08734762e-04 2.09490714e-04 2.10549046e-04 + 2.11909757e-04 2.13572846e-04 2.15538310e-04 2.17806148e-04 2.20376358e-04 + 2.23248936e-04 2.26423882e-04 2.29901190e-04 2.33680858e-04 2.37762883e-04 + 2.42147260e-04 2.46833984e-04 2.51823051e-04 2.57114457e-04 2.62708196e-04 + 2.68604263e-04 2.74802652e-04 2.81303356e-04 2.88106370e-04 2.95211687e-04 + 3.02619299e-04 3.10329200e-04 3.18341382e-04 3.26655837e-04 3.35272557e-04 + 3.44191533e-04 3.53412758e-04 3.62936221e-04 3.72761913e-04 3.82889825e-04 + 3.93319947e-04 4.04052269e-04 4.15086779e-04 4.26423468e-04 4.38062324e-04 + 4.50003336e-04 4.62246492e-04 4.74791780e-04 4.87639188e-04 5.00788703e-04 + 5.14240312e-04 5.27994002e-04 5.42049760e-04 5.56407572e-04 5.71067423e-04 + 5.86029300e-04 6.01293187e-04 6.16859071e-04 6.32726934e-04 6.48896763e-04 + 6.65368541e-04 6.82142252e-04 6.99217880e-04 7.16595407e-04 7.34274817e-04 + 7.52256092e-04 7.70539216e-04 7.89124169e-04 8.08010934e-04 8.27199493e-04 + 8.46689825e-04 8.66481913e-04 8.86575737e-04 9.06971278e-04 9.27668514e-04 + 9.48667427e-04 9.69967995e-04 9.91570198e-04 1.01347401e-03 1.03567942e-03 + 1.05818640e-03 1.08099493e-03 1.10410498e-03 1.12751654e-03 1.15122957e-03 + 1.17524406e-03 1.19955999e-03 1.22417733e-03 1.24909605e-03 1.27431613e-03 + 1.29983755e-03 1.32566029e-03 1.35178430e-03 1.37820958e-03 1.40493610e-03 + 1.43196382e-03 1.45929272e-03 1.48692278e-03 1.51485397e-03 1.54308626e-03 + 1.57161963e-03 1.60045404e-03 1.62958946e-03 1.65902588e-03 1.68876325e-03 + 1.71880156e-03 1.74914077e-03 1.77978085e-03 1.81072177e-03 1.84196351e-03 + 1.87350602e-03 1.90534929e-03 1.93749327e-03 1.96993795e-03 2.00268328e-03 + 2.03572923e-03 2.06907577e-03 2.10272288e-03 2.13667051e-03 2.17091863e-03 + 2.20546721e-03 2.24031622e-03 2.27546562e-03 2.31091538e-03 2.34666546e-03 + 2.38271583e-03 2.41906645e-03 2.45571729e-03 2.49266831e-03 2.52991947e-03 + 2.56747075e-03 2.60532209e-03 2.64347347e-03 2.68192485e-03 2.72067619e-03 + 2.75972745e-03 2.79907859e-03 2.83872959e-03 2.87868038e-03 2.91893095e-03 + 2.95948125e-03 3.00033123e-03 3.04148087e-03 3.08293011e-03 3.12467892e-03 + 3.16672726e-03 3.20907509e-03 3.25172236e-03 3.29466904e-03 3.33791508e-03 + 3.38146044e-03 3.42530507e-03 3.46944894e-03 3.51389201e-03 3.55863422e-03 + 3.60367554e-03 3.64901591e-03 3.69465531e-03 3.74059367e-03 3.78683096e-03 + 3.83336714e-03 3.88020215e-03 3.92733595e-03 3.97476850e-03 4.02249975e-03 + 4.07052965e-03 4.11885815e-03 4.16748522e-03 4.21641079e-03 4.26563483e-03 + 4.31515728e-03 4.36497811e-03 4.41509725e-03 4.46551466e-03 4.51623029e-03 + 4.56724409e-03 4.61855601e-03 4.67016601e-03 4.72207403e-03 4.77428002e-03 + 4.82678393e-03 4.87958570e-03 4.93268530e-03 4.98608266e-03 5.03977774e-03 + 5.09377048e-03 5.14806083e-03 5.20264873e-03 5.25753414e-03 5.31271700e-03 + 5.36819725e-03 5.42397485e-03 5.48004973e-03 5.53642185e-03 5.59309115e-03 + 5.65005757e-03 5.70732106e-03 5.76488157e-03 5.82273903e-03 5.88089339e-03 + 5.93934459e-03 5.99809258e-03 6.05713731e-03 6.11647870e-03 6.17611671e-03 + 6.23605128e-03 6.29628235e-03 6.35680986e-03 6.41763375e-03 6.47875396e-03 + 6.54017044e-03 6.60188312e-03 6.66389194e-03 6.72619685e-03 6.78879778e-03 + 6.85169468e-03 6.91488748e-03 6.97837611e-03 7.04216053e-03 7.10624066e-03 + 7.17061645e-03 7.23528783e-03 7.30025474e-03 7.36551712e-03 7.43107490e-03 + 7.49692802e-03 7.56307641e-03 7.62952002e-03 7.69625878e-03 7.76329262e-03 + 7.83062147e-03 7.89824528e-03 7.96616398e-03 8.03437750e-03 8.10288577e-03 + 8.17168874e-03 8.24078632e-03 8.31017847e-03 8.37986510e-03 8.44984615e-03 + 8.52012155e-03 8.59069124e-03 8.66155515e-03 8.73271321e-03 8.80416535e-03 + 8.87591149e-03 8.94795158e-03 9.02028554e-03 9.09291331e-03 9.16583480e-03 + 9.23904995e-03 9.31255870e-03 9.38636096e-03 9.46045668e-03 9.53484577e-03 + 9.60952816e-03 9.68450379e-03 9.75977258e-03 9.83533445e-03 9.91118934e-03 + 9.98733717e-03 1.00637779e-02 1.01405114e-02 1.02175376e-02 1.02948564e-02 + 1.03724679e-02 1.04503718e-02 1.05285681e-02 1.06070568e-02 1.06858378e-02 + 1.07649109e-02 1.08442762e-02 1.09239335e-02 1.10038828e-02 1.10841240e-02 + 1.11646570e-02 1.12454817e-02 1.13265980e-02 1.14080060e-02 1.14897054e-02 + 1.15716963e-02 1.16539785e-02 1.17365519e-02 1.18194166e-02 1.19025723e-02 + 1.19860191e-02 1.20697568e-02 1.21537854e-02 1.22381047e-02 1.23227148e-02 + 1.24076155e-02 1.24928067e-02 1.25782883e-02 1.26640604e-02 1.27501227e-02 + 1.28364752e-02 1.29231179e-02 1.30100506e-02 1.30972732e-02 1.31847858e-02 + 1.32725881e-02 1.33606801e-02 1.34490618e-02 1.35377329e-02 1.36266936e-02 + 1.37159436e-02 1.38054829e-02 1.38953113e-02 1.39854289e-02 1.40758355e-02 + 1.41665311e-02 1.42575155e-02 1.43487886e-02 1.44403504e-02 1.45322008e-02 + 1.46243398e-02 1.47167671e-02 1.48094827e-02 1.49024866e-02 1.49957786e-02 + 1.50893587e-02 1.51832267e-02 1.52773826e-02 1.53718263e-02 1.54665577e-02 + 1.55615767e-02 1.56568832e-02 1.57524771e-02 1.58483584e-02 1.59445269e-02 + 1.60409825e-02 1.61377252e-02 1.62347549e-02 1.63320714e-02 1.64296747e-02 + 1.65275647e-02 1.66257413e-02 1.67242043e-02 1.68229538e-02 1.69219896e-02 + 1.70213116e-02 1.71209197e-02 1.72208138e-02 1.73209939e-02 1.74214598e-02 + 1.75222114e-02 1.76232487e-02 1.77245715e-02 1.78261798e-02 1.79280734e-02 + 1.80302523e-02 1.81327163e-02 1.82354654e-02 1.83384994e-02 1.84418184e-02 + 1.85454220e-02 1.86493104e-02 1.87534833e-02 1.88579407e-02 1.89626824e-02 + 1.90677084e-02 1.91730186e-02 1.92786129e-02 1.93844911e-02 1.94906532e-02 + 1.95970991e-02 1.97038286e-02 1.98108417e-02 1.99181382e-02 2.00257182e-02 + 2.01335813e-02 2.02417277e-02 2.03501571e-02 2.04588694e-02 2.05678646e-02 + 2.06771425e-02 2.07867031e-02 2.08965462e-02 2.10066717e-02 2.11170796e-02 + 2.12277697e-02 2.13387419e-02 2.14499962e-02 2.15615323e-02 2.16733503e-02 + 2.17854499e-02 2.18978311e-02 2.20104938e-02 2.21234379e-02 2.22366633e-02 + 2.23501698e-02 2.24639574e-02 2.25780260e-02 2.26923753e-02 2.28070055e-02 + 2.29219162e-02 2.30371074e-02 2.31525791e-02 2.32683311e-02 2.33843632e-02 + 2.35006755e-02 2.36172677e-02 2.37341397e-02 2.38512915e-02 2.39687230e-02 + 2.40864339e-02 2.42044243e-02 2.43226940e-02 2.44412429e-02 2.45600709e-02 + 2.46791779e-02 2.47985637e-02 2.49182282e-02 2.50381714e-02 2.51583931e-02 + 2.52788932e-02 2.53996717e-02 2.55207283e-02 2.56420629e-02 2.57636755e-02 + 2.58855660e-02 2.60077341e-02 2.61301799e-02 2.62529032e-02 2.63759039e-02 + 2.64991818e-02 2.66227368e-02 2.67465689e-02 2.68706779e-02 2.69950637e-02 + 2.71197262e-02 2.72446653e-02 2.73698808e-02 2.74953726e-02 2.76211406e-02 + 2.77471848e-02 2.78735049e-02 2.80001009e-02 2.81269726e-02 2.82541199e-02 + 2.83815427e-02 2.85092409e-02 2.86372144e-02 2.87654630e-02 2.88939867e-02 + 2.90227852e-02 2.91518585e-02 2.92812065e-02 2.94108290e-02 2.95407260e-02 + 2.96708972e-02 2.98013426e-02 2.99320621e-02 3.00630555e-02 3.01943227e-02 + 3.03258636e-02 3.04576781e-02 3.05897660e-02 3.07221272e-02 3.08547616e-02 + 3.09876691e-02 3.11208496e-02 3.12543028e-02 3.13880288e-02 3.15220273e-02 + 3.16562983e-02 3.17908416e-02 3.19256571e-02 3.20607447e-02 3.21961042e-02 + 3.23317356e-02 3.24676386e-02 3.26038132e-02 3.27402593e-02 3.28769766e-02 + 3.30139652e-02 3.31512248e-02 3.32887554e-02 3.34265567e-02 3.35646288e-02 + 3.37029714e-02 3.38415844e-02 3.39804677e-02 3.41196212e-02 3.42590447e-02 + 3.43987381e-02 3.45387013e-02 3.46789341e-02 3.48194365e-02 3.49602082e-02 + 3.51012492e-02 3.52425593e-02 3.53841384e-02 3.55259864e-02 3.56681031e-02 + 3.58104884e-02 3.59531422e-02 3.60960643e-02 3.62392547e-02 3.63827131e-02 + 3.65264394e-02 3.66704335e-02 3.68146954e-02 3.69592247e-02 3.71040215e-02 + 3.72490856e-02 3.73944167e-02 3.75400149e-02 3.76858800e-02 3.78320118e-02 + 3.79784102e-02 3.81250751e-02 3.82720063e-02 3.84192037e-02 3.85666672e-02 + 3.87143966e-02 3.88623918e-02 3.90106526e-02 3.91591790e-02 3.93079707e-02 + 3.94570277e-02 3.96063498e-02 3.97559369e-02 3.99057888e-02 4.00559054e-02 + 4.02062865e-02 4.03569321e-02 4.05078419e-02 4.06590159e-02 4.08104539e-02 + 4.09621558e-02 4.11141214e-02 4.12663506e-02 4.14188432e-02 4.15715991e-02 + 4.17246182e-02 4.18779004e-02 4.20314454e-02 4.21852532e-02 4.23393235e-02 + 4.24936564e-02 4.26482515e-02 4.28031089e-02 4.29582283e-02 4.31136096e-02 + 4.32692526e-02 4.34251573e-02 4.35813234e-02 4.37377508e-02 4.38944395e-02 + 4.40513892e-02 4.42085998e-02 4.43660711e-02 4.45238031e-02 4.46817956e-02 + 4.48400483e-02 4.49985613e-02 4.51573343e-02 4.53163671e-02 4.54756598e-02 + 4.56352120e-02 4.57950237e-02 4.59550947e-02 4.61154249e-02 4.62760141e-02 + 4.64368622e-02 4.65979690e-02 4.67593344e-02 4.69209582e-02 4.70828403e-02 + 4.72449806e-02 4.74073789e-02 4.75700350e-02 4.77329488e-02 4.78961202e-02 + 4.80595489e-02 4.82232350e-02 4.83871781e-02 4.85513782e-02 4.87158351e-02 + 4.88805487e-02 4.90455188e-02 4.92107453e-02 4.93762280e-02 4.95419667e-02 + 4.97079614e-02 4.98742118e-02 5.00407179e-02 5.02074794e-02 5.03744963e-02 + 5.05417683e-02 5.07092953e-02 5.08770772e-02 5.10451138e-02 5.12134049e-02 + 5.13819505e-02 5.15507503e-02 5.17198043e-02 5.18891121e-02 5.20586738e-02 + 5.22284892e-02 5.23985580e-02 5.25688802e-02 5.27394555e-02 5.29102839e-02 + 5.30813652e-02 5.32526992e-02 5.34242858e-02 5.35961248e-02 5.37682161e-02 + 5.39405595e-02 5.41131548e-02 5.42860020e-02 5.44591008e-02 5.46324511e-02 + 5.48060527e-02 5.49799055e-02 5.51540094e-02 5.53283641e-02 5.55029695e-02 + 5.56778255e-02 5.58529319e-02 5.60282885e-02 5.62038952e-02 5.63797519e-02 + 5.65558583e-02 5.67322144e-02 5.69088199e-02 5.70856747e-02 5.72627786e-02 + 5.74401316e-02 5.76177334e-02 5.77955838e-02 5.79736828e-02 5.81520301e-02 + 5.83306256e-02 5.85094691e-02 5.86885605e-02 5.88678997e-02 5.90474864e-02 + 5.92273205e-02 5.94074018e-02 5.95877302e-02 5.97683055e-02 5.99491276e-02 + 6.01301963e-02 6.03115114e-02 6.04930728e-02 6.06748803e-02 6.08569338e-02 + 6.10392330e-02 6.12217779e-02 6.14045683e-02 6.15876039e-02 6.17708848e-02 + 6.19544105e-02 6.21381812e-02 6.23221964e-02 6.25064562e-02 6.26909603e-02 + 6.28757085e-02 6.30607008e-02 6.32459369e-02 6.34314167e-02 6.36171400e-02 + 6.38031067e-02 6.39893165e-02 6.41757694e-02 6.43624651e-02 6.45494036e-02 + 6.47365845e-02 6.49240078e-02 6.51116734e-02 6.52995809e-02 6.54877303e-02 + 6.56761215e-02 6.58647541e-02 6.60536282e-02 6.62427434e-02 6.64320997e-02 + 6.66216969e-02 6.68115348e-02 6.70016132e-02 6.71919320e-02 6.73824910e-02 + 6.75732900e-02 6.77643289e-02 6.79556075e-02 6.81471257e-02 6.83388832e-02 + 6.85308799e-02 6.87231157e-02 6.89155904e-02 6.91083037e-02 6.93012556e-02 + 6.94944458e-02 6.96878742e-02 6.98815407e-02 7.00754450e-02 7.02695870e-02 + 7.04639665e-02 7.06585833e-02 7.08534374e-02 7.10485284e-02 7.12438563e-02 + 7.14394208e-02 7.16352219e-02 7.18312593e-02 7.20275328e-02 7.22240423e-02 + 7.24207876e-02 7.26177686e-02 7.28149851e-02 7.30124368e-02 7.32101237e-02 + 7.34080456e-02 7.36062022e-02 7.38045935e-02 7.40032192e-02 7.42020791e-02 + 7.44011732e-02 7.46005012e-02 7.48000630e-02 7.49998583e-02 7.51998870e-02 + 7.54001490e-02 7.56006441e-02 7.58013720e-02 7.60023326e-02 7.62035258e-02 + 7.64049514e-02 7.66066092e-02 7.68084989e-02 7.70106206e-02 7.72129739e-02 + 7.74155587e-02 7.76183748e-02 7.78214221e-02 7.80247003e-02 7.82282094e-02 + 7.84319490e-02 7.86359192e-02 7.88401196e-02 7.90445501e-02 7.92492105e-02 + 7.94541007e-02 7.96592204e-02 7.98645695e-02 8.00701479e-02 8.02759553e-02 + 8.04819916e-02 8.06882565e-02 8.08947500e-02 8.11014718e-02 8.13084218e-02 + 8.15155998e-02 8.17230055e-02 8.19306389e-02 8.21384998e-02 8.23465879e-02 + 8.25549031e-02 8.27634452e-02 8.29722141e-02 8.31812095e-02 8.33904313e-02 + 8.35998794e-02 8.38095534e-02 8.40194533e-02 8.42295789e-02 8.44399299e-02 + 8.46505063e-02 8.48613078e-02 8.50723343e-02 8.52835855e-02 8.54950613e-02 + 8.57067616e-02 8.59186860e-02 8.61308346e-02 8.63432070e-02 8.65558031e-02 + 8.67686227e-02 8.69816656e-02 8.71949318e-02 8.74084208e-02 8.76221327e-02 + 8.78360672e-02 8.80502241e-02 8.82646033e-02 8.84792045e-02 8.86940276e-02 + 8.89090725e-02 8.91243388e-02 8.93398265e-02 8.95555354e-02 8.97714652e-02 + 8.99876159e-02 9.02039871e-02 9.04205788e-02 9.06373908e-02 9.08544228e-02 + 9.10716747e-02 9.12891463e-02 9.15068374e-02 9.17247478e-02 9.19428774e-02 + 9.21612260e-02 9.23797934e-02 9.25985793e-02 9.28175837e-02 9.30368064e-02 + 9.32562470e-02 9.34759056e-02 9.36957818e-02 9.39158756e-02 9.41361866e-02 + 9.43567148e-02 9.45774599e-02 9.47984219e-02 9.50196003e-02 9.52409952e-02 + 9.54626063e-02 9.56844334e-02 9.59064764e-02 9.61287350e-02 9.63512090e-02 + 9.65738984e-02 9.67968029e-02 9.70199222e-02 9.72432563e-02 9.74668050e-02 + 9.76905680e-02 9.79145452e-02 9.81387363e-02 9.83631413e-02 9.85877598e-02 + 9.88125918e-02 9.90376370e-02 9.92628953e-02 9.94883665e-02 9.97140503e-02 + 9.99399466e-02 1.00166055e-01 1.00392376e-01 1.00618909e-01 1.00845653e-01 + 1.01072609e-01 1.01299776e-01 1.01527155e-01 1.01754744e-01 1.01982545e-01 + 1.02210556e-01 1.02438777e-01 1.02667209e-01 1.02895850e-01 1.03124702e-01 + 1.03353763e-01 1.03583034e-01 1.03812514e-01 1.04042203e-01 1.04272101e-01 + 1.04502207e-01 1.04732523e-01 1.04963046e-01 1.05193778e-01 1.05424718e-01 + 1.05655865e-01 1.05887221e-01 1.06118783e-01 1.06350553e-01 1.06582530e-01 + 1.06814713e-01 1.07047104e-01 1.07279701e-01 1.07512504e-01 1.07745513e-01 + 1.07978728e-01 1.08212148e-01 1.08445775e-01 1.08679606e-01 1.08913643e-01 + 1.09147884e-01 1.09382331e-01 1.09616982e-01 1.09851837e-01 1.10086896e-01 + 1.10322160e-01 1.10557627e-01 1.10793298e-01 1.11029172e-01 1.11265249e-01 + 1.11501530e-01 1.11738013e-01 1.11974699e-01 1.12211587e-01 1.12448678e-01 + 1.12685971e-01 1.12923465e-01 1.13161162e-01 1.13399059e-01 1.13637158e-01 + 1.13875458e-01 1.14113960e-01 1.14352661e-01 1.14591564e-01 1.14830666e-01 + 1.15069969e-01 1.15309472e-01 1.15549174e-01 1.15789076e-01 1.16029178e-01 + 1.16269478e-01 1.16509978e-01 1.16750676e-01 1.16991573e-01 1.17232669e-01 + 1.17473962e-01 1.17715454e-01 1.17957143e-01 1.18199030e-01 1.18441115e-01 + 1.18683397e-01 1.18925875e-01 1.19168551e-01 1.19411423e-01 1.19654492e-01 + 1.19897757e-01 1.20141218e-01 1.20384875e-01 1.20628728e-01 1.20872776e-01 + 1.21117020e-01 1.21361458e-01 1.21606092e-01 1.21850920e-01 1.22095943e-01 + 1.22341160e-01 1.22586571e-01 1.22832176e-01 1.23077975e-01 1.23323967e-01 + 1.23570153e-01 1.23816532e-01 1.24063104e-01 1.24309869e-01 1.24556826e-01 + 1.24803975e-01 1.25051317e-01 1.25298851e-01 1.25546576e-01 1.25794494e-01 + 1.26042602e-01 1.26290902e-01 1.26539393e-01 1.26788074e-01 1.27036946e-01 + 1.27286009e-01 1.27535261e-01 1.27784704e-01 1.28034337e-01 1.28284159e-01 + 1.28534171e-01 1.28784372e-01 1.29034762e-01 1.29285340e-01 1.29536108e-01 + 1.29787064e-01 1.30038208e-01 1.30289540e-01 1.30541060e-01 1.30792768e-01 + 1.31044663e-01 1.31296746e-01 1.31549015e-01 1.31801471e-01 1.32054115e-01 + 1.32306944e-01 1.32559960e-01 1.32813162e-01 1.33066550e-01 1.33320123e-01 + 1.33573882e-01 1.33827826e-01 1.34081956e-01 1.34336270e-01 1.34590769e-01 + 1.34845452e-01 1.35100320e-01 1.35355372e-01 1.35610608e-01 1.35866027e-01 + 1.36121630e-01 1.36377417e-01 1.36633386e-01 1.36889538e-01 1.37145873e-01 + 1.37402391e-01 1.37659091e-01 1.37915973e-01 1.38173037e-01 1.38430283e-01 + 1.38687710e-01 1.38945318e-01 1.39203108e-01 1.39461079e-01 1.39719230e-01 + 1.39977562e-01 1.40236074e-01 1.40494766e-01 1.40753639e-01 1.41012691e-01 + 1.41271922e-01 1.41531333e-01 1.41790923e-01 1.42050692e-01 1.42310640e-01 + 1.42570766e-01 1.42831071e-01 1.43091554e-01 1.43352214e-01 1.43613053e-01 + 1.43874069e-01 1.44135262e-01 1.44396633e-01 1.44658180e-01 1.44919904e-01 + 1.45181805e-01 1.45443882e-01 1.45706135e-01 1.45968565e-01 1.46231170e-01 + 1.46493950e-01 1.46756906e-01 1.47020037e-01 1.47283343e-01 1.47546824e-01 + 1.47810479e-01 1.48074308e-01 1.48338312e-01 1.48602490e-01 1.48866841e-01 + 1.49131366e-01 1.49396065e-01 1.49660936e-01 1.49925981e-01 1.50191198e-01 + 1.50456588e-01 1.50722150e-01 1.50987884e-01 1.51253790e-01 1.51519868e-01 + 1.51786118e-01 1.52052539e-01 1.52319131e-01 1.52585894e-01 1.52852827e-01 + 1.53119932e-01 1.53387206e-01 1.53654651e-01 1.53922266e-01 1.54190050e-01 + 1.54458004e-01 1.54726127e-01 1.54994420e-01 1.55262881e-01 1.55531511e-01 + 1.55800310e-01 1.56069277e-01 1.56338412e-01 1.56607715e-01 1.56877186e-01 + 1.57146824e-01 1.57416630e-01 1.57686603e-01 1.57956743e-01 1.58227049e-01 + 1.58497522e-01 1.58768161e-01 1.59038967e-01 1.59309938e-01 1.59581075e-01 + 1.59852378e-01 1.60123846e-01 1.60395479e-01 1.60667277e-01 1.60939240e-01 + 1.61211367e-01 1.61483659e-01 1.61756114e-01 1.62028734e-01 1.62301517e-01 + 1.62574464e-01 1.62847574e-01 1.63120847e-01 1.63394283e-01 1.63667882e-01 + 1.63941644e-01 1.64215567e-01 1.64489653e-01 1.64763901e-01 1.65038310e-01 + 1.65312881e-01 1.65587613e-01 1.65862506e-01 1.66137560e-01 1.66412775e-01 + 1.66688150e-01 1.66963686e-01 1.67239381e-01 1.67515237e-01 1.67791252e-01 + 1.68067427e-01 1.68343761e-01 1.68620254e-01 1.68896906e-01 1.69173717e-01 + 1.69450686e-01 1.69727813e-01 1.70005098e-01 1.70282542e-01 1.70560143e-01 + 1.70837901e-01 1.71115817e-01 1.71393889e-01 1.71672119e-01 1.71950505e-01 + 1.72229048e-01 1.72507747e-01 1.72786602e-01 1.73065613e-01 1.73344779e-01 + 1.73624101e-01 1.73903579e-01 1.74183211e-01 1.74462998e-01 1.74742940e-01 + 1.75023036e-01 1.75303286e-01 1.75583691e-01 1.75864249e-01 1.76144961e-01 + 1.76425826e-01 1.76706845e-01 1.76988017e-01 1.77269341e-01 1.77550818e-01 + 1.77832448e-01 1.78114229e-01 1.78396163e-01 1.78678248e-01 1.78960486e-01 + 1.79242874e-01 1.79525414e-01 1.79808105e-01 1.80090946e-01 1.80373938e-01 + 1.80657081e-01 1.80940374e-01 1.81223816e-01 1.81507409e-01 1.81791151e-01 + 1.82075043e-01 1.82359084e-01 1.82643273e-01 1.82927612e-01 1.83212099e-01 + 1.83496734e-01 1.83781518e-01 1.84066450e-01 1.84351529e-01 1.84636756e-01 + 1.84922131e-01 1.85207652e-01 1.85493321e-01 1.85779136e-01 1.86065098e-01 + 1.86351206e-01 1.86637461e-01 1.86923861e-01 1.87210407e-01 1.87497099e-01 + 1.87783936e-01 1.88070919e-01 1.88358046e-01 1.88645318e-01 1.88932734e-01 + 1.89220295e-01 1.89508000e-01 1.89795849e-01 1.90083842e-01 1.90371978e-01 + 1.90660258e-01 1.90948681e-01 1.91237246e-01 1.91525955e-01 1.91814806e-01 + 1.92103799e-01 1.92392935e-01 1.92682212e-01 1.92971631e-01 1.93261192e-01 + 1.93550894e-01 1.93840737e-01 1.94130721e-01 1.94420846e-01 1.94711111e-01 + 1.95001517e-01 1.95292063e-01 1.95582748e-01 1.95873574e-01 1.96164539e-01 + 1.96455643e-01 1.96746886e-01 1.97038269e-01 1.97329790e-01 1.97621449e-01 + 1.97913247e-01 1.98205183e-01 1.98497257e-01 1.98789469e-01 1.99081818e-01 + 1.99374304e-01 1.99666928e-01 1.99959688e-01 2.00252585e-01 2.00545619e-01 + 2.00838789e-01 2.01132095e-01 2.01425537e-01 2.01719114e-01 2.02012828e-01 + 2.02306676e-01 2.02600660e-01 2.02894778e-01 2.03189031e-01 2.03483419e-01 + 2.03777941e-01 2.04072597e-01 2.04367387e-01 2.04662311e-01 2.04957368e-01 + 2.05252558e-01 2.05547882e-01 2.05843338e-01 2.06138928e-01 2.06434649e-01 + 2.06730503e-01 2.07026489e-01 2.07322607e-01 2.07618857e-01 2.07915238e-01 + 2.08211750e-01 2.08508394e-01 2.08805168e-01 2.09102073e-01 2.09399109e-01 + 2.09696275e-01 2.09993571e-01 2.10290997e-01 2.10588552e-01 2.10886237e-01 + 2.11184052e-01 2.11481995e-01 2.11780068e-01 2.12078269e-01 2.12376598e-01 + 2.12675056e-01 2.12973642e-01 2.13272356e-01 2.13571197e-01 2.13870166e-01 + 2.14169263e-01 2.14468486e-01 2.14767837e-01 2.15067314e-01 2.15366917e-01 + 2.15666647e-01 2.15966503e-01 2.16266485e-01 2.16566592e-01 2.16866825e-01 + 2.17167184e-01 2.17467667e-01 2.17768276e-01 2.18069009e-01 2.18369866e-01 + 2.18670848e-01 2.18971954e-01 2.19273184e-01 2.19574538e-01 2.19876015e-01 + 2.20177615e-01 2.20479339e-01 2.20781185e-01 2.21083155e-01 2.21385246e-01 + 2.21687460e-01 2.21989797e-01 2.22292255e-01 2.22594835e-01 2.22897536e-01 + 2.23200359e-01 2.23503303e-01 2.23806367e-01 2.24109553e-01 2.24412859e-01 + 2.24716285e-01 2.25019832e-01 2.25323498e-01 2.25627285e-01 2.25931191e-01 + 2.26235216e-01 2.26539360e-01 2.26843623e-01 2.27148005e-01 2.27452506e-01 + 2.27757125e-01 2.28061862e-01 2.28366717e-01 2.28671690e-01 2.28976780e-01 + 2.29281988e-01 2.29587313e-01 2.29892755e-01 2.30198313e-01 2.30503989e-01 + 2.30809780e-01 2.31115688e-01 2.31421712e-01 2.31727852e-01 2.32034107e-01 + 2.32340478e-01 2.32646964e-01 2.32953565e-01 2.33260280e-01 2.33567111e-01 + 2.33874055e-01 2.34181114e-01 2.34488287e-01 2.34795574e-01 2.35102975e-01 + 2.35410489e-01 2.35718116e-01 2.36025856e-01 2.36333709e-01 2.36641675e-01 + 2.36949753e-01 2.37257943e-01 2.37566246e-01 2.37874660e-01 2.38183186e-01 + 2.38491824e-01 2.38800572e-01 2.39109432e-01 2.39418403e-01 2.39727484e-01 + 2.40036676e-01 2.40345978e-01 2.40655391e-01 2.40964913e-01 2.41274545e-01 + 2.41584286e-01 2.41894137e-01 2.42204097e-01 2.42514166e-01 2.42824344e-01 + 2.43134630e-01 2.43445024e-01 2.43755527e-01 2.44066138e-01 2.44376856e-01 + 2.44687682e-01 2.44998615e-01 2.45309656e-01 2.45620803e-01 2.45932058e-01 + 2.46243419e-01 2.46554886e-01 2.46866459e-01 2.47178139e-01 2.47489924e-01 + 2.47801815e-01 2.48113812e-01 2.48425913e-01 2.48738120e-01 2.49050431e-01 + 2.49362848e-01 2.49675368e-01 2.49987993e-01 2.50300722e-01 2.50613555e-01 + 2.50926492e-01 2.51239532e-01 2.51552675e-01 2.51865922e-01 2.52179271e-01 + 2.52492723e-01 2.52806278e-01 2.53119935e-01 2.53433694e-01 2.53747555e-01 + 2.54061518e-01 2.54375582e-01 2.54689748e-01 2.55004015e-01 2.55318383e-01 + 2.55632851e-01 2.55947421e-01 2.56262090e-01 2.56576860e-01 2.56891730e-01 + 2.57206700e-01 2.57521770e-01 2.57836938e-01 2.58152207e-01 2.58467574e-01 + 2.58783040e-01 2.59098605e-01 2.59414268e-01 2.59730029e-01 2.60045889e-01 + 2.60361847e-01 2.60677902e-01 2.60994055e-01 2.61310305e-01 2.61626652e-01 + 2.61943096e-01 2.62259637e-01 2.62576275e-01 2.62893009e-01 2.63209839e-01 + 2.63526765e-01 2.63843787e-01 2.64160905e-01 2.64478118e-01 2.64795426e-01 + 2.65112830e-01 2.65430328e-01 2.65747921e-01 2.66065608e-01 2.66383390e-01 + 2.66701265e-01 2.67019235e-01 2.67337298e-01 2.67655455e-01 2.67973706e-01 + 2.68292049e-01 2.68610485e-01 2.68929014e-01 2.69247636e-01 2.69566350e-01 + 2.69885156e-01 2.70204055e-01 2.70523045e-01 2.70842127e-01 2.71161300e-01 + 2.71480564e-01 2.71799920e-01 2.72119366e-01 2.72438903e-01 2.72758531e-01 + 2.73078249e-01 2.73398057e-01 2.73717955e-01 2.74037942e-01 2.74358019e-01 + 2.74678186e-01 2.74998442e-01 2.75318787e-01 2.75639220e-01 2.75959743e-01 + 2.76280353e-01 2.76601052e-01 2.76921839e-01 2.77242714e-01 2.77563676e-01 + 2.77884726e-01 2.78205864e-01 2.78527088e-01 2.78848399e-01 2.79169798e-01 + 2.79491282e-01 2.79812853e-01 2.80134510e-01 2.80456254e-01 2.80778083e-01 + 2.81099997e-01 2.81421997e-01 2.81744083e-01 2.82066253e-01 2.82388508e-01 + 2.82710848e-01 2.83033273e-01 2.83355782e-01 2.83678374e-01 2.84001051e-01 + 2.84323812e-01 2.84646656e-01 2.84969584e-01 2.85292594e-01 2.85615688e-01 + 2.85938865e-01 2.86262124e-01 2.86585466e-01 2.86908890e-01 2.87232396e-01 + 2.87555984e-01 2.87879654e-01 2.88203405e-01 2.88527238e-01 2.88851152e-01 + 2.89175147e-01 2.89499222e-01 2.89823378e-01 2.90147615e-01 2.90471932e-01 + 2.90796329e-01 2.91120806e-01 2.91445362e-01 2.91769999e-01 2.92094714e-01 + 2.92419508e-01 2.92744382e-01 2.93069334e-01 2.93394365e-01 2.93719474e-01 + 2.94044662e-01 2.94369927e-01 2.94695271e-01 2.95020692e-01 2.95346191e-01 + 2.95671767e-01 2.95997420e-01 2.96323150e-01 2.96648956e-01 2.96974840e-01 + 2.97300799e-01 2.97626835e-01 2.97952947e-01 2.98279135e-01 2.98605399e-01 + 2.98931738e-01 2.99258152e-01 2.99584642e-01 2.99911206e-01 3.00237845e-01 + 3.00564559e-01 3.00891347e-01 3.01218209e-01 3.01545146e-01 3.01872156e-01 + 3.02199240e-01 3.02526398e-01 3.02853628e-01 3.03180932e-01 3.03508309e-01 + 3.03835759e-01 3.04163281e-01 3.04490876e-01 3.04818543e-01 3.05146281e-01 + 3.05474092e-01 3.05801975e-01 3.06129929e-01 3.06457954e-01 3.06786051e-01 + 3.07114218e-01 3.07442456e-01 3.07770765e-01 3.08099145e-01 3.08427594e-01 + 3.08756114e-01 3.09084703e-01 3.09413363e-01 3.09742091e-01 3.10070890e-01 + 3.10399757e-01 3.10728693e-01 3.11057699e-01 3.11386772e-01 3.11715915e-01 + 3.12045125e-01 3.12374404e-01 3.12703751e-01 3.13033165e-01 3.13362647e-01 + 3.13692197e-01 3.14021813e-01 3.14351497e-01 3.14681248e-01 3.15011065e-01 + 3.15340949e-01 3.15670899e-01 3.16000915e-01 3.16330997e-01 3.16661145e-01 + 3.16991359e-01 3.17321638e-01 3.17651983e-01 3.17982392e-01 3.18312867e-01 + 3.18643406e-01 3.18974010e-01 3.19304678e-01 3.19635411e-01 3.19966207e-01 + 3.20297067e-01 3.20627992e-01 3.20958979e-01 3.21290030e-01 3.21621144e-01 + 3.21952321e-01 3.22283561e-01 3.22614864e-01 3.22946229e-01 3.23277656e-01 + 3.23609146e-01 3.23940697e-01 3.24272310e-01 3.24603985e-01 3.24935721e-01 + 3.25267519e-01 3.25599377e-01 3.25931297e-01 3.26263277e-01 3.26595317e-01 + 3.26927419e-01 3.27259580e-01 3.27591801e-01 3.27924082e-01 3.28256423e-01 + 3.28588824e-01 3.28921283e-01 3.29253802e-01 3.29586380e-01 3.29919017e-01 + 3.30251712e-01 3.30584466e-01 3.30917278e-01 3.31250149e-01 3.31583077e-01 + 3.31916063e-01 3.32249107e-01 3.32582208e-01 3.32915366e-01 3.33248582e-01 + 3.33581854e-01 3.33915183e-01 3.34248569e-01 3.34582011e-01 3.34915510e-01 + 3.35249064e-01 3.35582675e-01 3.35916341e-01 3.36250062e-01 3.36583839e-01 + 3.36917672e-01 3.37251559e-01 3.37585501e-01 3.37919498e-01 3.38253550e-01 + 3.38587656e-01 3.38921816e-01 3.39256030e-01 3.39590298e-01 3.39924620e-01 + 3.40258995e-01 3.40593423e-01 3.40927905e-01 3.41262440e-01 3.41597027e-01 + 3.41931667e-01 3.42266360e-01 3.42601105e-01 3.42935903e-01 3.43270752e-01 + 3.43605653e-01 3.43940606e-01 3.44275610e-01 3.44610666e-01 3.44945772e-01 + 3.45280930e-01 3.45616139e-01 3.45951398e-01 3.46286708e-01 3.46622068e-01 + 3.46957478e-01 3.47292938e-01 3.47628448e-01 3.47964008e-01 3.48299617e-01 + 3.48635275e-01 3.48970983e-01 3.49306740e-01 3.49642545e-01 3.49978399e-01 + 3.50314302e-01 3.50650253e-01 3.50986252e-01 3.51322299e-01 3.51658394e-01 + 3.51994536e-01 3.52330726e-01 3.52666964e-01 3.53003248e-01 3.53339580e-01 + 3.53675958e-01 3.54012383e-01 3.54348855e-01 3.54685373e-01 3.55021937e-01 + 3.55358547e-01 3.55695203e-01 3.56031904e-01 3.56368651e-01 3.56705444e-01 + 3.57042281e-01 3.57379164e-01 3.57716092e-01 3.58053064e-01 3.58390081e-01 + 3.58727142e-01 3.59064247e-01 3.59401397e-01 3.59738590e-01 3.60075827e-01 + 3.60413107e-01 3.60750431e-01 3.61087799e-01 3.61425209e-01 3.61762662e-01 + 3.62100158e-01 3.62437696e-01 3.62775277e-01 3.63112900e-01 3.63450566e-01 + 3.63788273e-01 3.64126022e-01 3.64463812e-01 3.64801645e-01 3.65139518e-01 + 3.65477432e-01 3.65815388e-01 3.66153384e-01 3.66491421e-01 3.66829498e-01 + 3.67167616e-01 3.67505774e-01 3.67843971e-01 3.68182209e-01 3.68520487e-01 + 3.68858803e-01 3.69197160e-01 3.69535555e-01 3.69873990e-01 3.70212463e-01 + 3.70550975e-01 3.70889526e-01 3.71228115e-01 3.71566742e-01 3.71905408e-01 + 3.72244111e-01 3.72582852e-01 3.72921631e-01 3.73260447e-01 3.73599300e-01 + 3.73938191e-01 3.74277119e-01 3.74616083e-01 3.74955084e-01 3.75294122e-01 + 3.75633196e-01 3.75972306e-01 3.76311452e-01 3.76650634e-01 3.76989852e-01 + 3.77329105e-01 3.77668394e-01 3.78007718e-01 3.78347077e-01 3.78686471e-01 + 3.79025899e-01 3.79365363e-01 3.79704861e-01 3.80044393e-01 3.80383959e-01 + 3.80723559e-01 3.81063194e-01 3.81402861e-01 3.81742563e-01 3.82082298e-01 + 3.82422065e-01 3.82761866e-01 3.83101700e-01 3.83441567e-01 3.83781466e-01 + 3.84121398e-01 3.84461362e-01 3.84801358e-01 3.85141386e-01 3.85481446e-01 + 3.85821538e-01 3.86161661e-01 3.86501816e-01 3.86842001e-01 3.87182218e-01 + 3.87522466e-01 3.87862744e-01 3.88203053e-01 3.88543393e-01 3.88883763e-01 + 3.89224162e-01 3.89564592e-01 3.89905052e-01 3.90245541e-01 3.90586060e-01 + 3.90926609e-01 3.91267186e-01 3.91607793e-01 3.91948428e-01 3.92289093e-01 + 3.92629785e-01 3.92970507e-01 3.93311256e-01 3.93652034e-01 3.93992840e-01 + 3.94333674e-01 3.94674535e-01 3.95015424e-01 3.95356341e-01 3.95697284e-01 + 3.96038255e-01 3.96379253e-01 3.96720277e-01 3.97061328e-01 3.97402406e-01 + 3.97743510e-01 3.98084640e-01 3.98425796e-01 3.98766978e-01 3.99108186e-01 + 3.99449420e-01 3.99790679e-01 4.00131963e-01 4.00473272e-01 4.00814607e-01 + 4.01155966e-01 4.01497350e-01 4.01838759e-01 4.02180192e-01 4.02521649e-01 + 4.02863130e-01 4.03204636e-01 4.03546165e-01 4.03887718e-01 4.04229294e-01 + 4.04570894e-01 4.04912517e-01 4.05254163e-01 4.05595832e-01 4.05937524e-01 + 4.06279238e-01 4.06620975e-01 4.06962734e-01 4.07304516e-01 4.07646319e-01 + 4.07988145e-01 4.08329992e-01 4.08671861e-01 4.09013751e-01 4.09355663e-01 + 4.09697596e-01 4.10039549e-01 4.10381524e-01 4.10723520e-01 4.11065536e-01 + 4.11407572e-01 4.11749629e-01 4.12091706e-01 4.12433803e-01 4.12775920e-01 + 4.13118057e-01 4.13460213e-01 4.13802389e-01 4.14144583e-01 4.14486798e-01 + 4.14829031e-01 4.15171283e-01 4.15513553e-01 4.15855843e-01 4.16198150e-01 + 4.16540476e-01 4.16882821e-01 4.17225183e-01 4.17567563e-01 4.17909961e-01 + 4.18252376e-01 4.18594809e-01 4.18937259e-01 4.19279726e-01 4.19622210e-01 + 4.19964711e-01 4.20307229e-01 4.20649763e-01 4.20992314e-01 4.21334881e-01 + 4.21677465e-01 4.22020064e-01 4.22362679e-01 4.22705310e-01 4.23047957e-01 + 4.23390619e-01 4.23733296e-01 4.24075988e-01 4.24418696e-01 4.24761418e-01 + 4.25104155e-01 4.25446907e-01 4.25789673e-01 4.26132454e-01 4.26475249e-01 + 4.26818057e-01 4.27160880e-01 4.27503717e-01 4.27846567e-01 4.28189430e-01 + 4.28532307e-01 4.28875197e-01 4.29218101e-01 4.29561017e-01 4.29903946e-01 + 4.30246888e-01 4.30589842e-01 4.30932808e-01 4.31275787e-01 4.31618778e-01 + 4.31961781e-01 4.32304796e-01 4.32647822e-01 4.32990860e-01 4.33333909e-01 + 4.33676970e-01 4.34020042e-01 4.34363125e-01 4.34706219e-01 4.35049323e-01 + 4.35392438e-01 4.35735564e-01 4.36078700e-01 4.36421846e-01 4.36765002e-01 + 4.37108168e-01 4.37451344e-01 4.37794529e-01 4.38137724e-01 4.38480929e-01 + 4.38824142e-01 4.39167365e-01 4.39510597e-01 4.39853837e-01 4.40197087e-01 + 4.40540345e-01 4.40883611e-01 4.41226885e-01 4.41570168e-01 4.41913459e-01 + 4.42256758e-01 4.42600064e-01 4.42943378e-01 4.43286700e-01 4.43630029e-01 + 4.43973365e-01 4.44316708e-01 4.44660058e-01 4.45003416e-01 4.45346779e-01 + 4.45690150e-01 4.46033526e-01 4.46376910e-01 4.46720299e-01 4.47063694e-01 + 4.47407095e-01 4.47750502e-01 4.48093915e-01 4.48437333e-01 4.48780757e-01 + 4.49124185e-01 4.49467619e-01 4.49811058e-01 4.50154502e-01 4.50497950e-01 + 4.50841403e-01 4.51184861e-01 4.51528322e-01 4.51871788e-01 4.52215259e-01 + 4.52558733e-01 4.52902210e-01 4.53245692e-01 4.53589177e-01 4.53932665e-01 + 4.54276157e-01 4.54619652e-01 4.54963150e-01 4.55306651e-01 4.55650154e-01 + 2.08130000e-04 2.08281191e-04 2.08734762e-04 2.09490714e-04 2.10549046e-04 + 2.11909757e-04 2.13572846e-04 2.15538310e-04 2.17806148e-04 2.20376358e-04 + 2.23248936e-04 2.26423882e-04 2.29901190e-04 2.33680858e-04 2.37762883e-04 + 2.42147260e-04 2.46833984e-04 2.51823051e-04 2.57114457e-04 2.62708196e-04 + 2.68604263e-04 2.74802652e-04 2.81303356e-04 2.88106370e-04 2.95211687e-04 + 3.02619299e-04 3.10329200e-04 3.18341382e-04 3.26655837e-04 3.35272557e-04 + 3.44191533e-04 3.53412758e-04 3.62936221e-04 3.72761913e-04 3.82889825e-04 + 3.93319947e-04 4.04052269e-04 4.15086779e-04 4.26423468e-04 4.38062324e-04 + 4.50003336e-04 4.62246492e-04 4.74791780e-04 4.87639188e-04 5.00788703e-04 + 5.14240312e-04 5.27994002e-04 5.42049760e-04 5.56407572e-04 5.71067423e-04 + 5.86029300e-04 6.01293187e-04 6.16859071e-04 6.32726934e-04 6.48896763e-04 + 6.65368541e-04 6.82142252e-04 6.99217880e-04 7.16595407e-04 7.34274817e-04 + 7.52256092e-04 7.70539216e-04 7.89124169e-04 8.08010934e-04 8.27199493e-04 + 8.46689825e-04 8.66481913e-04 8.86575737e-04 9.06971278e-04 9.27668514e-04 + 9.48667427e-04 9.69967995e-04 9.91570198e-04 1.01347401e-03 1.03567942e-03 + 1.05818640e-03 1.08099493e-03 1.10410498e-03 1.12751654e-03 1.15122957e-03 + 1.17524406e-03 1.19955999e-03 1.22417733e-03 1.24909605e-03 1.27431613e-03 + 1.29983755e-03 1.32566029e-03 1.35178430e-03 1.37820958e-03 1.40493610e-03 + 1.43196382e-03 1.45929272e-03 1.48692278e-03 1.51485397e-03 1.54308626e-03 + 1.57161963e-03 1.60045404e-03 1.62958946e-03 1.65902588e-03 1.68876325e-03 + 1.71880156e-03 1.74914077e-03 1.77978085e-03 1.81072177e-03 1.84196351e-03 + 1.87350602e-03 1.90534929e-03 1.93749327e-03 1.96993795e-03 2.00268328e-03 + 2.03572923e-03 2.06907577e-03 2.10272288e-03 2.13667051e-03 2.17091863e-03 + 2.20546721e-03 2.24031622e-03 2.27546562e-03 2.31091538e-03 2.34666546e-03 + 2.38271583e-03 2.41906645e-03 2.45571729e-03 2.49266831e-03 2.52991947e-03 + 2.56747075e-03 2.60532209e-03 2.64347347e-03 2.68192485e-03 2.72067619e-03 + 2.75972745e-03 2.79907859e-03 2.83872959e-03 2.87868038e-03 2.91893095e-03 + 2.95948125e-03 3.00033123e-03 3.04148087e-03 3.08293011e-03 3.12467892e-03 + 3.16672726e-03 3.20907509e-03 3.25172236e-03 3.29466904e-03 3.33791508e-03 + 3.38146044e-03 3.42530507e-03 3.46944894e-03 3.51389201e-03 3.55863422e-03 + 3.60367554e-03 3.64901591e-03 3.69465531e-03 3.74059367e-03 3.78683096e-03 + 3.83336714e-03 3.88020215e-03 3.92733595e-03 3.97476850e-03 4.02249975e-03 + 4.07052965e-03 4.11885815e-03 4.16748522e-03 4.21641079e-03 4.26563483e-03 + 4.31515728e-03 4.36497811e-03 4.41509725e-03 4.46551466e-03 4.51623029e-03 + 4.56724409e-03 4.61855601e-03 4.67016601e-03 4.72207403e-03 4.77428002e-03 + 4.82678393e-03 4.87958570e-03 4.93268530e-03 4.98608266e-03 5.03977774e-03 + 5.09377048e-03 5.14806083e-03 5.20264873e-03 5.25753414e-03 5.31271700e-03 + 5.36819725e-03 5.42397485e-03 5.48004973e-03 5.53642185e-03 5.59309115e-03 + 5.65005757e-03 5.70732106e-03 5.76488157e-03 5.82273903e-03 5.88089339e-03 + 5.93934459e-03 5.99809258e-03 6.05713731e-03 6.11647870e-03 6.17611671e-03 + 6.23605128e-03 6.29628235e-03 6.35680986e-03 6.41763375e-03 6.47875396e-03 + 6.54017044e-03 6.60188312e-03 6.66389194e-03 6.72619685e-03 6.78879778e-03 + 6.85169468e-03 6.91488748e-03 6.97837611e-03 7.04216053e-03 7.10624066e-03 + 7.17061645e-03 7.23528783e-03 7.30025474e-03 7.36551712e-03 7.43107490e-03 + 7.49692802e-03 7.56307641e-03 7.62952002e-03 7.69625878e-03 7.76329262e-03 + 7.83062147e-03 7.89824528e-03 7.96616398e-03 8.03437750e-03 8.10288577e-03 + 8.17168874e-03 8.24078632e-03 8.31017847e-03 8.37986510e-03 8.44984615e-03 + 8.52012155e-03 8.59069124e-03 8.66155515e-03 8.73271321e-03 8.80416535e-03 + 8.87591149e-03 8.94795158e-03 9.02028554e-03 9.09291331e-03 9.16583480e-03 + 9.23904995e-03 9.31255870e-03 9.38636096e-03 9.46045668e-03 9.53484577e-03 + 9.60952816e-03 9.68450379e-03 9.75977258e-03 9.83533445e-03 9.91118934e-03 + 9.98733717e-03 1.00637779e-02 1.01405114e-02 1.02175376e-02 1.02948564e-02 + 1.03724679e-02 1.04503718e-02 1.05285681e-02 1.06070568e-02 1.06858378e-02 + 1.07649109e-02 1.08442762e-02 1.09239335e-02 1.10038828e-02 1.10841240e-02 + 1.11646570e-02 1.12454817e-02 1.13265980e-02 1.14080060e-02 1.14897054e-02 + 1.15716963e-02 1.16539785e-02 1.17365519e-02 1.18194166e-02 1.19025723e-02 + 1.19860191e-02 1.20697568e-02 1.21537854e-02 1.22381047e-02 1.23227148e-02 + 1.24076155e-02 1.24928067e-02 1.25782883e-02 1.26640604e-02 1.27501227e-02 + 1.28364752e-02 1.29231179e-02 1.30100506e-02 1.30972732e-02 1.31847858e-02 + 1.32725881e-02 1.33606801e-02 1.34490618e-02 1.35377329e-02 1.36266936e-02 + 1.37159436e-02 1.38054829e-02 1.38953113e-02 1.39854289e-02 1.40758355e-02 + 1.41665311e-02 1.42575155e-02 1.43487886e-02 1.44403504e-02 1.45322008e-02 + 1.46243398e-02 1.47167671e-02 1.48094827e-02 1.49024866e-02 1.49957786e-02 + 1.50893587e-02 1.51832267e-02 1.52773826e-02 1.53718263e-02 1.54665577e-02 + 1.55615767e-02 1.56568832e-02 1.57524771e-02 1.58483584e-02 1.59445269e-02 + 1.60409825e-02 1.61377252e-02 1.62347549e-02 1.63320714e-02 1.64296747e-02 + 1.65275647e-02 1.66257413e-02 1.67242043e-02 1.68229538e-02 1.69219896e-02 + 1.70213116e-02 1.71209197e-02 1.72208138e-02 1.73209939e-02 1.74214598e-02 + 1.75222114e-02 1.76232487e-02 1.77245715e-02 1.78261798e-02 1.79280734e-02 + 1.80302523e-02 1.81327163e-02 1.82354654e-02 1.83384994e-02 1.84418184e-02 + 1.85454220e-02 1.86493104e-02 1.87534833e-02 1.88579407e-02 1.89626824e-02 + 1.90677084e-02 1.91730186e-02 1.92786129e-02 1.93844911e-02 1.94906532e-02 + 1.95970991e-02 1.97038286e-02 1.98108417e-02 1.99181382e-02 2.00257182e-02 + 2.01335813e-02 2.02417277e-02 2.03501571e-02 2.04588694e-02 2.05678646e-02 + 2.06771425e-02 2.07867031e-02 2.08965462e-02 2.10066717e-02 2.11170796e-02 + 2.12277697e-02 2.13387419e-02 2.14499962e-02 2.15615323e-02 2.16733503e-02 + 2.17854499e-02 2.18978311e-02 2.20104938e-02 2.21234379e-02 2.22366633e-02 + 2.23501698e-02 2.24639574e-02 2.25780260e-02 2.26923753e-02 2.28070055e-02 + 2.29219162e-02 2.30371074e-02 2.31525791e-02 2.32683311e-02 2.33843632e-02 + 2.35006755e-02 2.36172677e-02 2.37341397e-02 2.38512915e-02 2.39687230e-02 + 2.40864339e-02 2.42044243e-02 2.43226940e-02 2.44412429e-02 2.45600709e-02 + 2.46791779e-02 2.47985637e-02 2.49182282e-02 2.50381714e-02 2.51583931e-02 + 2.52788932e-02 2.53996717e-02 2.55207283e-02 2.56420629e-02 2.57636755e-02 + 2.58855660e-02 2.60077341e-02 2.61301799e-02 2.62529032e-02 2.63759039e-02 + 2.64991818e-02 2.66227368e-02 2.67465689e-02 2.68706779e-02 2.69950637e-02 + 2.71197262e-02 2.72446653e-02 2.73698808e-02 2.74953726e-02 2.76211406e-02 + 2.77471848e-02 2.78735049e-02 2.80001009e-02 2.81269726e-02 2.82541199e-02 + 2.83815427e-02 2.85092409e-02 2.86372144e-02 2.87654630e-02 2.88939867e-02 + 2.90227852e-02 2.91518585e-02 2.92812065e-02 2.94108290e-02 2.95407260e-02 + 2.96708972e-02 2.98013426e-02 2.99320621e-02 3.00630555e-02 3.01943227e-02 + 3.03258636e-02 3.04576781e-02 3.05897660e-02 3.07221272e-02 3.08547616e-02 + 3.09876691e-02 3.11208496e-02 3.12543028e-02 3.13880288e-02 3.15220273e-02 + 3.16562983e-02 3.17908416e-02 3.19256571e-02 3.20607447e-02 3.21961042e-02 + 3.23317356e-02 3.24676386e-02 3.26038132e-02 3.27402593e-02 3.28769766e-02 + 3.30139652e-02 3.31512248e-02 3.32887554e-02 3.34265567e-02 3.35646288e-02 + 3.37029714e-02 3.38415844e-02 3.39804677e-02 3.41196212e-02 3.42590447e-02 + 3.43987381e-02 3.45387013e-02 3.46789341e-02 3.48194365e-02 3.49602082e-02 + 3.51012492e-02 3.52425593e-02 3.53841384e-02 3.55259864e-02 3.56681031e-02 + 3.58104884e-02 3.59531422e-02 3.60960643e-02 3.62392547e-02 3.63827131e-02 + 3.65264394e-02 3.66704335e-02 3.68146954e-02 3.69592247e-02 3.71040215e-02 + 3.72490856e-02 3.73944167e-02 3.75400149e-02 3.76858800e-02 3.78320118e-02 + 3.79784102e-02 3.81250751e-02 3.82720063e-02 3.84192037e-02 3.85666672e-02 + 3.87143966e-02 3.88623918e-02 3.90106526e-02 3.91591790e-02 3.93079707e-02 + 3.94570277e-02 3.96063498e-02 3.97559369e-02 3.99057888e-02 4.00559054e-02 + 4.02062865e-02 4.03569321e-02 4.05078419e-02 4.06590159e-02 4.08104539e-02 + 4.09621558e-02 4.11141214e-02 4.12663506e-02 4.14188432e-02 4.15715991e-02 + 4.17246182e-02 4.18779004e-02 4.20314454e-02 4.21852532e-02 4.23393235e-02 + 4.24936564e-02 4.26482515e-02 4.28031089e-02 4.29582283e-02 4.31136096e-02 + 4.32692526e-02 4.34251573e-02 4.35813234e-02 4.37377508e-02 4.38944395e-02 + 4.40513892e-02 4.42085998e-02 4.43660711e-02 4.45238031e-02 4.46817956e-02 + 4.48400483e-02 4.49985613e-02 4.51573343e-02 4.53163671e-02 4.54756598e-02 + 4.56352120e-02 4.57950237e-02 4.59550947e-02 4.61154249e-02 4.62760141e-02 + 4.64368622e-02 4.65979690e-02 4.67593344e-02 4.69209582e-02 4.70828403e-02 + 4.72449806e-02 4.74073789e-02 4.75700350e-02 4.77329488e-02 4.78961202e-02 + 4.80595489e-02 4.82232350e-02 4.83871781e-02 4.85513782e-02 4.87158351e-02 + 4.88805487e-02 4.90455188e-02 4.92107453e-02 4.93762280e-02 4.95419667e-02 + 4.97079614e-02 4.98742118e-02 5.00407179e-02 5.02074794e-02 5.03744963e-02 + 5.05417683e-02 5.07092953e-02 5.08770772e-02 5.10451138e-02 5.12134049e-02 + 5.13819505e-02 5.15507503e-02 5.17198043e-02 5.18891121e-02 5.20586738e-02 + 5.22284892e-02 5.23985580e-02 5.25688802e-02 5.27394555e-02 5.29102839e-02 + 5.30813652e-02 5.32526992e-02 5.34242858e-02 5.35961248e-02 5.37682161e-02 + 5.39405595e-02 5.41131548e-02 5.42860020e-02 5.44591008e-02 5.46324511e-02 + 5.48060527e-02 5.49799055e-02 5.51540094e-02 5.53283641e-02 5.55029695e-02 + 5.56778255e-02 5.58529319e-02 5.60282885e-02 5.62038952e-02 5.63797519e-02 + 5.65558583e-02 5.67322144e-02 5.69088199e-02 5.70856747e-02 5.72627786e-02 + 5.74401316e-02 5.76177334e-02 5.77955838e-02 5.79736828e-02 5.81520301e-02 + 5.83306256e-02 5.85094691e-02 5.86885605e-02 5.88678997e-02 5.90474864e-02 + 5.92273205e-02 5.94074018e-02 5.95877302e-02 5.97683055e-02 5.99491276e-02 + 6.01301963e-02 6.03115114e-02 6.04930728e-02 6.06748803e-02 6.08569338e-02 + 6.10392330e-02 6.12217779e-02 6.14045683e-02 6.15876039e-02 6.17708848e-02 + 6.19544105e-02 6.21381812e-02 6.23221964e-02 6.25064562e-02 6.26909603e-02 + 6.28757085e-02 6.30607008e-02 6.32459369e-02 6.34314167e-02 6.36171400e-02 + 6.38031067e-02 6.39893165e-02 6.41757694e-02 6.43624651e-02 6.45494036e-02 + 6.47365845e-02 6.49240078e-02 6.51116734e-02 6.52995809e-02 6.54877303e-02 + 6.56761215e-02 6.58647541e-02 6.60536282e-02 6.62427434e-02 6.64320997e-02 + 6.66216969e-02 6.68115348e-02 6.70016132e-02 6.71919320e-02 6.73824910e-02 + 6.75732900e-02 6.77643289e-02 6.79556075e-02 6.81471257e-02 6.83388832e-02 + 6.85308799e-02 6.87231157e-02 6.89155904e-02 6.91083037e-02 6.93012556e-02 + 6.94944458e-02 6.96878742e-02 6.98815407e-02 7.00754450e-02 7.02695870e-02 + 7.04639665e-02 7.06585833e-02 7.08534374e-02 7.10485284e-02 7.12438563e-02 + 7.14394208e-02 7.16352219e-02 7.18312593e-02 7.20275328e-02 7.22240423e-02 + 7.24207876e-02 7.26177686e-02 7.28149851e-02 7.30124368e-02 7.32101237e-02 + 7.34080456e-02 7.36062022e-02 7.38045935e-02 7.40032192e-02 7.42020791e-02 + 7.44011732e-02 7.46005012e-02 7.48000630e-02 7.49998583e-02 7.51998870e-02 + 7.54001490e-02 7.56006441e-02 7.58013720e-02 7.60023326e-02 7.62035258e-02 + 7.64049514e-02 7.66066092e-02 7.68084989e-02 7.70106206e-02 7.72129739e-02 + 7.74155587e-02 7.76183748e-02 7.78214221e-02 7.80247003e-02 7.82282094e-02 + 7.84319490e-02 7.86359192e-02 7.88401196e-02 7.90445501e-02 7.92492105e-02 + 7.94541007e-02 7.96592204e-02 7.98645695e-02 8.00701479e-02 8.02759553e-02 + 8.04819916e-02 8.06882565e-02 8.08947500e-02 8.11014718e-02 8.13084218e-02 + 8.15155998e-02 8.17230055e-02 8.19306389e-02 8.21384998e-02 8.23465879e-02 + 8.25549031e-02 8.27634452e-02 8.29722141e-02 8.31812095e-02 8.33904313e-02 + 8.35998794e-02 8.38095534e-02 8.40194533e-02 8.42295789e-02 8.44399299e-02 + 8.46505063e-02 8.48613078e-02 8.50723343e-02 8.52835855e-02 8.54950613e-02 + 8.57067616e-02 8.59186860e-02 8.61308346e-02 8.63432070e-02 8.65558031e-02 + 8.67686227e-02 8.69816656e-02 8.71949318e-02 8.74084208e-02 8.76221327e-02 + 8.78360672e-02 8.80502241e-02 8.82646033e-02 8.84792045e-02 8.86940276e-02 + 8.89090725e-02 8.91243388e-02 8.93398265e-02 8.95555354e-02 8.97714652e-02 + 8.99876159e-02 9.02039871e-02 9.04205788e-02 9.06373908e-02 9.08544228e-02 + 9.10716747e-02 9.12891463e-02 9.15068374e-02 9.17247478e-02 9.19428774e-02 + 9.21612260e-02 9.23797934e-02 9.25985793e-02 9.28175837e-02 9.30368064e-02 + 9.32562470e-02 9.34759056e-02 9.36957818e-02 9.39158756e-02 9.41361866e-02 + 9.43567148e-02 9.45774599e-02 9.47984219e-02 9.50196003e-02 9.52409952e-02 + 9.54626063e-02 9.56844334e-02 9.59064764e-02 9.61287350e-02 9.63512090e-02 + 9.65738984e-02 9.67968029e-02 9.70199222e-02 9.72432563e-02 9.74668050e-02 + 9.76905680e-02 9.79145452e-02 9.81387363e-02 9.83631413e-02 9.85877598e-02 + 9.88125918e-02 9.90376370e-02 9.92628953e-02 9.94883665e-02 9.97140503e-02 + 9.99399466e-02 1.00166055e-01 1.00392376e-01 1.00618909e-01 1.00845653e-01 + 1.01072609e-01 1.01299776e-01 1.01527155e-01 1.01754744e-01 1.01982545e-01 + 1.02210556e-01 1.02438777e-01 1.02667209e-01 1.02895850e-01 1.03124702e-01 + 1.03353763e-01 1.03583034e-01 1.03812514e-01 1.04042203e-01 1.04272101e-01 + 1.04502207e-01 1.04732523e-01 1.04963046e-01 1.05193778e-01 1.05424718e-01 + 1.05655865e-01 1.05887221e-01 1.06118783e-01 1.06350553e-01 1.06582530e-01 + 1.06814713e-01 1.07047104e-01 1.07279701e-01 1.07512504e-01 1.07745513e-01 + 1.07978728e-01 1.08212148e-01 1.08445775e-01 1.08679606e-01 1.08913643e-01 + 1.09147884e-01 1.09382331e-01 1.09616982e-01 1.09851837e-01 1.10086896e-01 + 1.10322160e-01 1.10557627e-01 1.10793298e-01 1.11029172e-01 1.11265249e-01 + 1.11501530e-01 1.11738013e-01 1.11974699e-01 1.12211587e-01 1.12448678e-01 + 1.12685971e-01 1.12923465e-01 1.13161162e-01 1.13399059e-01 1.13637158e-01 + 1.13875458e-01 1.14113960e-01 1.14352661e-01 1.14591564e-01 1.14830666e-01 + 1.15069969e-01 1.15309472e-01 1.15549174e-01 1.15789076e-01 1.16029178e-01 + 1.16269478e-01 1.16509978e-01 1.16750676e-01 1.16991573e-01 1.17232669e-01 + 1.17473962e-01 1.17715454e-01 1.17957143e-01 1.18199030e-01 1.18441115e-01 + 1.18683397e-01 1.18925875e-01 1.19168551e-01 1.19411423e-01 1.19654492e-01 + 1.19897757e-01 1.20141218e-01 1.20384875e-01 1.20628728e-01 1.20872776e-01 + 1.21117020e-01 1.21361458e-01 1.21606092e-01 1.21850920e-01 1.22095943e-01 + 1.22341160e-01 1.22586571e-01 1.22832176e-01 1.23077975e-01 1.23323967e-01 + 1.23570153e-01 1.23816532e-01 1.24063104e-01 1.24309869e-01 1.24556826e-01 + 1.24803975e-01 1.25051317e-01 1.25298851e-01 1.25546576e-01 1.25794494e-01 + 1.26042602e-01 1.26290902e-01 1.26539393e-01 1.26788074e-01 1.27036946e-01 + 1.27286009e-01 1.27535261e-01 1.27784704e-01 1.28034337e-01 1.28284159e-01 + 1.28534171e-01 1.28784372e-01 1.29034762e-01 1.29285340e-01 1.29536108e-01 + 1.29787064e-01 1.30038208e-01 1.30289540e-01 1.30541060e-01 1.30792768e-01 + 1.31044663e-01 1.31296746e-01 1.31549015e-01 1.31801471e-01 1.32054115e-01 + 1.32306944e-01 1.32559960e-01 1.32813162e-01 1.33066550e-01 1.33320123e-01 + 1.33573882e-01 1.33827826e-01 1.34081956e-01 1.34336270e-01 1.34590769e-01 + 1.34845452e-01 1.35100320e-01 1.35355372e-01 1.35610608e-01 1.35866027e-01 + 1.36121630e-01 1.36377417e-01 1.36633386e-01 1.36889538e-01 1.37145873e-01 + 1.37402391e-01 1.37659091e-01 1.37915973e-01 1.38173037e-01 1.38430283e-01 + 1.38687710e-01 1.38945318e-01 1.39203108e-01 1.39461079e-01 1.39719230e-01 + 1.39977562e-01 1.40236074e-01 1.40494766e-01 1.40753639e-01 1.41012691e-01 + 1.41271922e-01 1.41531333e-01 1.41790923e-01 1.42050692e-01 1.42310640e-01 + 1.42570766e-01 1.42831071e-01 1.43091554e-01 1.43352214e-01 1.43613053e-01 + 1.43874069e-01 1.44135262e-01 1.44396633e-01 1.44658180e-01 1.44919904e-01 + 1.45181805e-01 1.45443882e-01 1.45706135e-01 1.45968565e-01 1.46231170e-01 + 1.46493950e-01 1.46756906e-01 1.47020037e-01 1.47283343e-01 1.47546824e-01 + 1.47810479e-01 1.48074308e-01 1.48338312e-01 1.48602490e-01 1.48866841e-01 + 1.49131366e-01 1.49396065e-01 1.49660936e-01 1.49925981e-01 1.50191198e-01 + 1.50456588e-01 1.50722150e-01 1.50987884e-01 1.51253790e-01 1.51519868e-01 + 1.51786118e-01 1.52052539e-01 1.52319131e-01 1.52585894e-01 1.52852827e-01 + 1.53119932e-01 1.53387206e-01 1.53654651e-01 1.53922266e-01 1.54190050e-01 + 1.54458004e-01 1.54726127e-01 1.54994420e-01 1.55262881e-01 1.55531511e-01 + 1.55800310e-01 1.56069277e-01 1.56338412e-01 1.56607715e-01 1.56877186e-01 + 1.57146824e-01 1.57416630e-01 1.57686603e-01 1.57956743e-01 1.58227049e-01 + 1.58497522e-01 1.58768161e-01 1.59038967e-01 1.59309938e-01 1.59581075e-01 + 1.59852378e-01 1.60123846e-01 1.60395479e-01 1.60667277e-01 1.60939240e-01 + 1.61211367e-01 1.61483659e-01 1.61756114e-01 1.62028734e-01 1.62301517e-01 + 1.62574464e-01 1.62847574e-01 1.63120847e-01 1.63394283e-01 1.63667882e-01 + 1.63941644e-01 1.64215567e-01 1.64489653e-01 1.64763901e-01 1.65038310e-01 + 1.65312881e-01 1.65587613e-01 1.65862506e-01 1.66137560e-01 1.66412775e-01 + 1.66688150e-01 1.66963686e-01 1.67239381e-01 1.67515237e-01 1.67791252e-01 + 1.68067427e-01 1.68343761e-01 1.68620254e-01 1.68896906e-01 1.69173717e-01 + 1.69450686e-01 1.69727813e-01 1.70005098e-01 1.70282542e-01 1.70560143e-01 + 1.70837901e-01 1.71115817e-01 1.71393889e-01 1.71672119e-01 1.71950505e-01 + 1.72229048e-01 1.72507747e-01 1.72786602e-01 1.73065613e-01 1.73344779e-01 + 1.73624101e-01 1.73903579e-01 1.74183211e-01 1.74462998e-01 1.74742940e-01 + 1.75023036e-01 1.75303286e-01 1.75583691e-01 1.75864249e-01 1.76144961e-01 + 1.76425826e-01 1.76706845e-01 1.76988017e-01 1.77269341e-01 1.77550818e-01 + 1.77832448e-01 1.78114229e-01 1.78396163e-01 1.78678248e-01 1.78960486e-01 + 1.79242874e-01 1.79525414e-01 1.79808105e-01 1.80090946e-01 1.80373938e-01 + 1.80657081e-01 1.80940374e-01 1.81223816e-01 1.81507409e-01 1.81791151e-01 + 1.82075043e-01 1.82359084e-01 1.82643273e-01 1.82927612e-01 1.83212099e-01 + 1.83496734e-01 1.83781518e-01 1.84066450e-01 1.84351529e-01 1.84636756e-01 + 1.84922131e-01 1.85207652e-01 1.85493321e-01 1.85779136e-01 1.86065098e-01 + 1.86351206e-01 1.86637461e-01 1.86923861e-01 1.87210407e-01 1.87497099e-01 + 1.87783936e-01 1.88070919e-01 1.88358046e-01 1.88645318e-01 1.88932734e-01 + 1.89220295e-01 1.89508000e-01 1.89795849e-01 1.90083842e-01 1.90371978e-01 + 1.90660258e-01 1.90948681e-01 1.91237246e-01 1.91525955e-01 1.91814806e-01 + 1.92103799e-01 1.92392935e-01 1.92682212e-01 1.92971631e-01 1.93261192e-01 + 1.93550894e-01 1.93840737e-01 1.94130721e-01 1.94420846e-01 1.94711111e-01 + 1.95001517e-01 1.95292063e-01 1.95582748e-01 1.95873574e-01 1.96164539e-01 + 1.96455643e-01 1.96746886e-01 1.97038269e-01 1.97329790e-01 1.97621449e-01 + 1.97913247e-01 1.98205183e-01 1.98497257e-01 1.98789469e-01 1.99081818e-01 + 1.99374304e-01 1.99666928e-01 1.99959688e-01 2.00252585e-01 2.00545619e-01 + 2.00838789e-01 2.01132095e-01 2.01425537e-01 2.01719114e-01 2.02012828e-01 + 2.02306676e-01 2.02600660e-01 2.02894778e-01 2.03189031e-01 2.03483419e-01 + 2.03777941e-01 2.04072597e-01 2.04367387e-01 2.04662311e-01 2.04957368e-01 + 2.05252558e-01 2.05547882e-01 2.05843338e-01 2.06138928e-01 2.06434649e-01 + 2.06730503e-01 2.07026489e-01 2.07322607e-01 2.07618857e-01 2.07915238e-01 + 2.08211750e-01 2.08508394e-01 2.08805168e-01 2.09102073e-01 2.09399109e-01 + 2.09696275e-01 2.09993571e-01 2.10290997e-01 2.10588552e-01 2.10886237e-01 + 2.11184052e-01 2.11481995e-01 2.11780068e-01 2.12078269e-01 2.12376598e-01 + 2.12675056e-01 2.12973642e-01 2.13272356e-01 2.13571197e-01 2.13870166e-01 + 2.14169263e-01 2.14468486e-01 2.14767837e-01 2.15067314e-01 2.15366917e-01 + 2.15666647e-01 2.15966503e-01 2.16266485e-01 2.16566592e-01 2.16866825e-01 + 2.17167184e-01 2.17467667e-01 2.17768276e-01 2.18069009e-01 2.18369866e-01 + 2.18670848e-01 2.18971954e-01 2.19273184e-01 2.19574538e-01 2.19876015e-01 + 2.20177615e-01 2.20479339e-01 2.20781185e-01 2.21083155e-01 2.21385246e-01 + 2.21687460e-01 2.21989797e-01 2.22292255e-01 2.22594835e-01 2.22897536e-01 + 2.23200359e-01 2.23503303e-01 2.23806367e-01 2.24109553e-01 2.24412859e-01 + 2.24716285e-01 2.25019832e-01 2.25323498e-01 2.25627285e-01 2.25931191e-01 + 2.26235216e-01 2.26539360e-01 2.26843623e-01 2.27148005e-01 2.27452506e-01 + 2.27757125e-01 2.28061862e-01 2.28366717e-01 2.28671690e-01 2.28976780e-01 + 2.29281988e-01 2.29587313e-01 2.29892755e-01 2.30198313e-01 2.30503989e-01 + 2.30809780e-01 2.31115688e-01 2.31421712e-01 2.31727852e-01 2.32034107e-01 + 2.32340478e-01 2.32646964e-01 2.32953565e-01 2.33260280e-01 2.33567111e-01 + 2.33874055e-01 2.34181114e-01 2.34488287e-01 2.34795574e-01 2.35102975e-01 + 2.35410489e-01 2.35718116e-01 2.36025856e-01 2.36333709e-01 2.36641675e-01 + 2.36949753e-01 2.37257943e-01 2.37566246e-01 2.37874660e-01 2.38183186e-01 + 2.38491824e-01 2.38800572e-01 2.39109432e-01 2.39418403e-01 2.39727484e-01 + 2.40036676e-01 2.40345978e-01 2.40655391e-01 2.40964913e-01 2.41274545e-01 + 2.41584286e-01 2.41894137e-01 2.42204097e-01 2.42514166e-01 2.42824344e-01 + 2.43134630e-01 2.43445024e-01 2.43755527e-01 2.44066138e-01 2.44376856e-01 + 2.44687682e-01 2.44998615e-01 2.45309656e-01 2.45620803e-01 2.45932058e-01 + 2.46243419e-01 2.46554886e-01 2.46866459e-01 2.47178139e-01 2.47489924e-01 + 2.47801815e-01 2.48113812e-01 2.48425913e-01 2.48738120e-01 2.49050431e-01 + 2.49362848e-01 2.49675368e-01 2.49987993e-01 2.50300722e-01 2.50613555e-01 + 2.50926492e-01 2.51239532e-01 2.51552675e-01 2.51865922e-01 2.52179271e-01 + 2.52492723e-01 2.52806278e-01 2.53119935e-01 2.53433694e-01 2.53747555e-01 + 2.54061518e-01 2.54375582e-01 2.54689748e-01 2.55004015e-01 2.55318383e-01 + 2.55632851e-01 2.55947421e-01 2.56262090e-01 2.56576860e-01 2.56891730e-01 + 2.57206700e-01 2.57521770e-01 2.57836938e-01 2.58152207e-01 2.58467574e-01 + 2.58783040e-01 2.59098605e-01 2.59414268e-01 2.59730029e-01 2.60045889e-01 + 2.60361847e-01 2.60677902e-01 2.60994055e-01 2.61310305e-01 2.61626652e-01 + 2.61943096e-01 2.62259637e-01 2.62576275e-01 2.62893009e-01 2.63209839e-01 + 2.63526765e-01 2.63843787e-01 2.64160905e-01 2.64478118e-01 2.64795426e-01 + 2.65112830e-01 2.65430328e-01 2.65747921e-01 2.66065608e-01 2.66383390e-01 + 2.66701265e-01 2.67019235e-01 2.67337298e-01 2.67655455e-01 2.67973706e-01 + 2.68292049e-01 2.68610485e-01 2.68929014e-01 2.69247636e-01 2.69566350e-01 + 2.69885156e-01 2.70204055e-01 2.70523045e-01 2.70842127e-01 2.71161300e-01 + 2.71480564e-01 2.71799920e-01 2.72119366e-01 2.72438903e-01 2.72758531e-01 + 2.73078249e-01 2.73398057e-01 2.73717955e-01 2.74037942e-01 2.74358019e-01 + 2.74678186e-01 2.74998442e-01 2.75318787e-01 2.75639220e-01 2.75959743e-01 + 2.76280353e-01 2.76601052e-01 2.76921839e-01 2.77242714e-01 2.77563676e-01 + 2.77884726e-01 2.78205864e-01 2.78527088e-01 2.78848399e-01 2.79169798e-01 + 2.79491282e-01 2.79812853e-01 2.80134510e-01 2.80456254e-01 2.80778083e-01 + 2.81099997e-01 2.81421997e-01 2.81744083e-01 2.82066253e-01 2.82388508e-01 + 2.82710848e-01 2.83033273e-01 2.83355782e-01 2.83678374e-01 2.84001051e-01 + 2.84323812e-01 2.84646656e-01 2.84969584e-01 2.85292594e-01 2.85615688e-01 + 2.85938865e-01 2.86262124e-01 2.86585466e-01 2.86908890e-01 2.87232396e-01 + 2.87555984e-01 2.87879654e-01 2.88203405e-01 2.88527238e-01 2.88851152e-01 + 2.89175147e-01 2.89499222e-01 2.89823378e-01 2.90147615e-01 2.90471932e-01 + 2.90796329e-01 2.91120806e-01 2.91445362e-01 2.91769999e-01 2.92094714e-01 + 2.92419508e-01 2.92744382e-01 2.93069334e-01 2.93394365e-01 2.93719474e-01 + 2.94044662e-01 2.94369927e-01 2.94695271e-01 2.95020692e-01 2.95346191e-01 + 2.95671767e-01 2.95997420e-01 2.96323150e-01 2.96648956e-01 2.96974840e-01 + 2.97300799e-01 2.97626835e-01 2.97952947e-01 2.98279135e-01 2.98605399e-01 + 2.98931738e-01 2.99258152e-01 2.99584642e-01 2.99911206e-01 3.00237845e-01 + 3.00564559e-01 3.00891347e-01 3.01218209e-01 3.01545146e-01 3.01872156e-01 + 3.02199240e-01 3.02526398e-01 3.02853628e-01 3.03180932e-01 3.03508309e-01 + 3.03835759e-01 3.04163281e-01 3.04490876e-01 3.04818543e-01 3.05146281e-01 + 3.05474092e-01 3.05801975e-01 3.06129929e-01 3.06457954e-01 3.06786051e-01 + 3.07114218e-01 3.07442456e-01 3.07770765e-01 3.08099145e-01 3.08427594e-01 + 3.08756114e-01 3.09084703e-01 3.09413363e-01 3.09742091e-01 3.10070890e-01 + 3.10399757e-01 3.10728693e-01 3.11057699e-01 3.11386772e-01 3.11715915e-01 + 3.12045125e-01 3.12374404e-01 3.12703751e-01 3.13033165e-01 3.13362647e-01 + 3.13692197e-01 3.14021813e-01 3.14351497e-01 3.14681248e-01 3.15011065e-01 + 3.15340949e-01 3.15670899e-01 3.16000915e-01 3.16330997e-01 3.16661145e-01 + 3.16991359e-01 3.17321638e-01 3.17651983e-01 3.17982392e-01 3.18312867e-01 + 3.18643406e-01 3.18974010e-01 3.19304678e-01 3.19635411e-01 3.19966207e-01 + 3.20297067e-01 3.20627992e-01 3.20958979e-01 3.21290030e-01 3.21621144e-01 + 3.21952321e-01 3.22283561e-01 3.22614864e-01 3.22946229e-01 3.23277656e-01 + 3.23609146e-01 3.23940697e-01 3.24272310e-01 3.24603985e-01 3.24935721e-01 + 3.25267519e-01 3.25599377e-01 3.25931297e-01 3.26263277e-01 3.26595317e-01 + 3.26927419e-01 3.27259580e-01 3.27591801e-01 3.27924082e-01 3.28256423e-01 + 3.28588824e-01 3.28921283e-01 3.29253802e-01 3.29586380e-01 3.29919017e-01 + 3.30251712e-01 3.30584466e-01 3.30917278e-01 3.31250149e-01 3.31583077e-01 + 3.31916063e-01 3.32249107e-01 3.32582208e-01 3.32915366e-01 3.33248582e-01 + 3.33581854e-01 3.33915183e-01 3.34248569e-01 3.34582011e-01 3.34915510e-01 + 3.35249064e-01 3.35582675e-01 3.35916341e-01 3.36250062e-01 3.36583839e-01 + 3.36917672e-01 3.37251559e-01 3.37585501e-01 3.37919498e-01 3.38253550e-01 + 3.38587656e-01 3.38921816e-01 3.39256030e-01 3.39590298e-01 3.39924620e-01 + 3.40258995e-01 3.40593423e-01 3.40927905e-01 3.41262440e-01 3.41597027e-01 + 3.41931667e-01 3.42266360e-01 3.42601105e-01 3.42935903e-01 3.43270752e-01 + 3.43605653e-01 3.43940606e-01 3.44275610e-01 3.44610666e-01 3.44945772e-01 + 3.45280930e-01 3.45616139e-01 3.45951398e-01 3.46286708e-01 3.46622068e-01 + 3.46957478e-01 3.47292938e-01 3.47628448e-01 3.47964008e-01 3.48299617e-01 + 3.48635275e-01 3.48970983e-01 3.49306740e-01 3.49642545e-01 3.49978399e-01 + 3.50314302e-01 3.50650253e-01 3.50986252e-01 3.51322299e-01 3.51658394e-01 + 3.51994536e-01 3.52330726e-01 3.52666964e-01 3.53003248e-01 3.53339580e-01 + 3.53675958e-01 3.54012383e-01 3.54348855e-01 3.54685373e-01 3.55021937e-01 + 3.55358547e-01 3.55695203e-01 3.56031904e-01 3.56368651e-01 3.56705444e-01 + 3.57042281e-01 3.57379164e-01 3.57716092e-01 3.58053064e-01 3.58390081e-01 + 3.58727142e-01 3.59064247e-01 3.59401397e-01 3.59738590e-01 3.60075827e-01 + 3.60413107e-01 3.60750431e-01 3.61087799e-01 3.61425209e-01 3.61762662e-01 + 3.62100158e-01 3.62437696e-01 3.62775277e-01 3.63112900e-01 3.63450566e-01 + 3.63788273e-01 3.64126022e-01 3.64463812e-01 3.64801645e-01 3.65139518e-01 + 3.65477432e-01 3.65815388e-01 3.66153384e-01 3.66491421e-01 3.66829498e-01 + 3.67167616e-01 3.67505774e-01 3.67843971e-01 3.68182209e-01 3.68520487e-01 + 3.68858803e-01 3.69197160e-01 3.69535555e-01 3.69873990e-01 3.70212463e-01 + 3.70550975e-01 3.70889526e-01 3.71228115e-01 3.71566742e-01 3.71905408e-01 + 3.72244111e-01 3.72582852e-01 3.72921631e-01 3.73260447e-01 3.73599300e-01 + 3.73938191e-01 3.74277119e-01 3.74616083e-01 3.74955084e-01 3.75294122e-01 + 3.75633196e-01 3.75972306e-01 3.76311452e-01 3.76650634e-01 3.76989852e-01 + 3.77329105e-01 3.77668394e-01 3.78007718e-01 3.78347077e-01 3.78686471e-01 + 3.79025899e-01 3.79365363e-01 3.79704861e-01 3.80044393e-01 3.80383959e-01 + 3.80723559e-01 3.81063194e-01 3.81402861e-01 3.81742563e-01 3.82082298e-01 + 3.82422065e-01 3.82761866e-01 3.83101700e-01 3.83441567e-01 3.83781466e-01 + 3.84121398e-01 3.84461362e-01 3.84801358e-01 3.85141386e-01 3.85481446e-01 + 3.85821538e-01 3.86161661e-01 3.86501816e-01 3.86842001e-01 3.87182218e-01 + 3.87522466e-01 3.87862744e-01 3.88203053e-01 3.88543393e-01 3.88883763e-01 + 3.89224162e-01 3.89564592e-01 3.89905052e-01 3.90245541e-01 3.90586060e-01 + 3.90926609e-01 3.91267186e-01 3.91607793e-01 3.91948428e-01 3.92289093e-01 + 3.92629785e-01 3.92970507e-01 3.93311256e-01 3.93652034e-01 3.93992840e-01 + 3.94333674e-01 3.94674535e-01 3.95015424e-01 3.95356341e-01 3.95697284e-01 + 3.96038255e-01 3.96379253e-01 3.96720277e-01 3.97061328e-01 3.97402406e-01 + 3.97743510e-01 3.98084640e-01 3.98425796e-01 3.98766978e-01 3.99108186e-01 + 3.99449420e-01 3.99790679e-01 4.00131963e-01 4.00473272e-01 4.00814607e-01 + 4.01155966e-01 4.01497350e-01 4.01838759e-01 4.02180192e-01 4.02521649e-01 + 4.02863130e-01 4.03204636e-01 4.03546165e-01 4.03887718e-01 4.04229294e-01 + 4.04570894e-01 4.04912517e-01 4.05254163e-01 4.05595832e-01 4.05937524e-01 + 4.06279238e-01 4.06620975e-01 4.06962734e-01 4.07304516e-01 4.07646319e-01 + 4.07988145e-01 4.08329992e-01 4.08671861e-01 4.09013751e-01 4.09355663e-01 + 4.09697596e-01 4.10039549e-01 4.10381524e-01 4.10723520e-01 4.11065536e-01 + 4.11407572e-01 4.11749629e-01 4.12091706e-01 4.12433803e-01 4.12775920e-01 + 4.13118057e-01 4.13460213e-01 4.13802389e-01 4.14144583e-01 4.14486798e-01 + 4.14829031e-01 4.15171283e-01 4.15513553e-01 4.15855843e-01 4.16198150e-01 + 4.16540476e-01 4.16882821e-01 4.17225183e-01 4.17567563e-01 4.17909961e-01 + 4.18252376e-01 4.18594809e-01 4.18937259e-01 4.19279726e-01 4.19622210e-01 + 4.19964711e-01 4.20307229e-01 4.20649763e-01 4.20992314e-01 4.21334881e-01 + 4.21677465e-01 4.22020064e-01 4.22362679e-01 4.22705310e-01 4.23047957e-01 + 4.23390619e-01 4.23733296e-01 4.24075988e-01 4.24418696e-01 4.24761418e-01 + 4.25104155e-01 4.25446907e-01 4.25789673e-01 4.26132454e-01 4.26475249e-01 + 4.26818057e-01 4.27160880e-01 4.27503717e-01 4.27846567e-01 4.28189430e-01 + 4.28532307e-01 4.28875197e-01 4.29218101e-01 4.29561017e-01 4.29903946e-01 + 4.30246888e-01 4.30589842e-01 4.30932808e-01 4.31275787e-01 4.31618778e-01 + 4.31961781e-01 4.32304796e-01 4.32647822e-01 4.32990860e-01 4.33333909e-01 + 4.33676970e-01 4.34020042e-01 4.34363125e-01 4.34706219e-01 4.35049323e-01 + 4.35392438e-01 4.35735564e-01 4.36078700e-01 4.36421846e-01 4.36765002e-01 + 4.37108168e-01 4.37451344e-01 4.37794529e-01 4.38137724e-01 4.38480929e-01 + 4.38824142e-01 4.39167365e-01 4.39510597e-01 4.39853837e-01 4.40197087e-01 + 4.40540345e-01 4.40883611e-01 4.41226885e-01 4.41570168e-01 4.41913459e-01 + 4.42256758e-01 4.42600064e-01 4.42943378e-01 4.43286700e-01 4.43630029e-01 + 4.43973365e-01 4.44316708e-01 4.44660058e-01 4.45003416e-01 4.45346779e-01 + 4.45690150e-01 4.46033526e-01 4.46376910e-01 4.46720299e-01 4.47063694e-01 + 4.47407095e-01 4.47750502e-01 4.48093915e-01 4.48437333e-01 4.48780757e-01 + 4.49124185e-01 4.49467619e-01 4.49811058e-01 4.50154502e-01 4.50497950e-01 + 4.50841403e-01 4.51184861e-01 4.51528322e-01 4.51871788e-01 4.52215259e-01 + 4.52558733e-01 4.52902210e-01 4.53245692e-01 4.53589177e-01 4.53932665e-01 + 4.54276157e-01 4.54619652e-01 4.54963150e-01 4.55306651e-01 4.55650154e-01 + 1.03953624e+00 1.03772749e+00 1.03592023e+00 1.03411445e+00 1.03231016e+00 + 1.03050735e+00 1.02870603e+00 1.02690620e+00 1.02510785e+00 1.02331100e+00 + 1.02151562e+00 1.01972174e+00 1.01792935e+00 1.01613844e+00 1.01434902e+00 + 1.01256110e+00 1.01077466e+00 1.00898971e+00 1.00720626e+00 1.00542429e+00 + 1.00364382e+00 1.00186484e+00 1.00008735e+00 9.98311355e-01 9.96536852e-01 + 9.94763842e-01 9.92992326e-01 9.91222304e-01 9.89453777e-01 9.87686744e-01 + 9.85921207e-01 9.84157165e-01 9.82394619e-01 9.80633570e-01 9.78874017e-01 + 9.77115962e-01 9.75359404e-01 9.73604344e-01 9.71850782e-01 9.70098719e-01 + 9.68348155e-01 9.66599090e-01 9.64851525e-01 9.63105460e-01 9.61360895e-01 + 9.59617832e-01 9.57876269e-01 9.56136208e-01 9.54397649e-01 9.52660593e-01 + 9.50925039e-01 9.49190988e-01 9.47458441e-01 9.45727397e-01 9.43997858e-01 + 9.42269823e-01 9.40543293e-01 9.38818268e-01 9.37094749e-01 9.35372736e-01 + 9.33652230e-01 9.31933230e-01 9.30215737e-01 9.28499752e-01 9.26785274e-01 + 9.25072305e-01 9.23360844e-01 9.21650893e-01 9.19942450e-01 9.18235517e-01 + 9.16530094e-01 9.14826182e-01 9.13123780e-01 9.11422890e-01 9.09723511e-01 + 9.08025644e-01 9.06329289e-01 9.04634446e-01 9.02941117e-01 9.01249300e-01 + 8.99558998e-01 8.97870209e-01 8.96182935e-01 8.94497176e-01 8.92812931e-01 + 8.91130202e-01 8.89448989e-01 8.87769292e-01 8.86091112e-01 8.84414448e-01 + 8.82739302e-01 8.81065673e-01 8.79393562e-01 8.77722970e-01 8.76053896e-01 + 8.74386341e-01 8.72720306e-01 8.71055790e-01 8.69392795e-01 8.67731320e-01 + 8.66071366e-01 8.64412932e-01 8.62756021e-01 8.61100631e-01 8.59446764e-01 + 8.57794419e-01 8.56143597e-01 8.54494298e-01 8.52846523e-01 8.51200272e-01 + 8.49555545e-01 8.47912343e-01 8.46270666e-01 8.44630515e-01 8.42991889e-01 + 8.41354789e-01 8.39719216e-01 8.38085170e-01 8.36452650e-01 8.34821658e-01 + 8.33192195e-01 8.31564259e-01 8.29937852e-01 8.28312973e-01 8.26689624e-01 + 8.25067805e-01 8.23447515e-01 8.21828756e-01 8.20211528e-01 8.18595830e-01 + 8.16981664e-01 8.15369029e-01 8.13757927e-01 8.12148357e-01 8.10540319e-01 + 8.08933815e-01 8.07328844e-01 8.05725406e-01 8.04123503e-01 8.02523135e-01 + 8.00924301e-01 7.99327002e-01 7.97731239e-01 7.96137011e-01 7.94544320e-01 + 7.92953165e-01 7.91363547e-01 7.89775466e-01 7.88188923e-01 7.86603918e-01 + 7.85020450e-01 7.83438522e-01 7.81858132e-01 7.80279281e-01 7.78701970e-01 + 7.77126199e-01 7.75551968e-01 7.73979278e-01 7.72408129e-01 7.70838521e-01 + 7.69270454e-01 7.67703930e-01 7.66138947e-01 7.64575508e-01 7.63013611e-01 + 7.61453258e-01 7.59894448e-01 7.58337182e-01 7.56781460e-01 7.55227283e-01 + 7.53674651e-01 7.52123565e-01 7.50574024e-01 7.49026029e-01 7.47479580e-01 + 7.45934678e-01 7.44391322e-01 7.42849514e-01 7.41309254e-01 7.39770542e-01 + 7.38233378e-01 7.36697762e-01 7.35163696e-01 7.33631179e-01 7.32100211e-01 + 7.30570794e-01 7.29042926e-01 7.27516610e-01 7.25991844e-01 7.24468629e-01 + 7.22946966e-01 7.21426855e-01 7.19908297e-01 7.18391291e-01 7.16875837e-01 + 7.15361937e-01 7.13849591e-01 7.12338798e-01 7.10829560e-01 7.09321876e-01 + 7.07815747e-01 7.06311174e-01 7.04808155e-01 7.03306693e-01 7.01806787e-01 + 7.00308437e-01 6.98811644e-01 6.97316408e-01 6.95822730e-01 6.94330610e-01 + 6.92840047e-01 6.91351043e-01 6.89863598e-01 6.88377712e-01 6.86893385e-01 + 6.85410618e-01 6.83929411e-01 6.82449765e-01 6.80971679e-01 6.79495154e-01 + 6.78020190e-01 6.76546789e-01 6.75074949e-01 6.73604671e-01 6.72135956e-01 + 6.70668804e-01 6.69203215e-01 6.67739189e-01 6.66276728e-01 6.64815830e-01 + 6.63356498e-01 6.61898730e-01 6.60442527e-01 6.58987889e-01 6.57534818e-01 + 6.56083312e-01 6.54633373e-01 6.53185001e-01 6.51738195e-01 6.50292957e-01 + 6.48849287e-01 6.47407184e-01 6.45966650e-01 6.44527685e-01 6.43090288e-01 + 6.41654460e-01 6.40220202e-01 6.38787514e-01 6.37356396e-01 6.35926849e-01 + 6.34498872e-01 6.33072467e-01 6.31647633e-01 6.30224370e-01 6.28802680e-01 + 6.27382561e-01 6.25964016e-01 6.24547043e-01 6.23131644e-01 6.21717818e-01 + 6.20305566e-01 6.18894889e-01 6.17485785e-01 6.16078257e-01 6.14672303e-01 + 6.13267925e-01 6.11865123e-01 6.10463897e-01 6.09064247e-01 6.07666173e-01 + 6.06269677e-01 6.04874758e-01 6.03481416e-01 6.02089652e-01 6.00699467e-01 + 5.99310859e-01 5.97923831e-01 5.96538381e-01 5.95154511e-01 5.93772221e-01 + 5.92391510e-01 5.91012380e-01 5.89634830e-01 5.88258861e-01 5.86884473e-01 + 5.85511667e-01 5.84140442e-01 5.82770800e-01 5.81402740e-01 5.80036262e-01 + 5.78671367e-01 5.77308056e-01 5.75946328e-01 5.74586184e-01 5.73227624e-01 + 5.71870649e-01 5.70515258e-01 5.69161453e-01 5.67809232e-01 5.66458597e-01 + 5.65109548e-01 5.63762086e-01 5.62416210e-01 5.61071920e-01 5.59729218e-01 + 5.58388103e-01 5.57048576e-01 5.55710636e-01 5.54374285e-01 5.53039523e-01 + 5.51706349e-01 5.50374764e-01 5.49044769e-01 5.47716364e-01 5.46389548e-01 + 5.45064323e-01 5.43740689e-01 5.42418645e-01 5.41098192e-01 5.39779331e-01 + 5.38462062e-01 5.37146385e-01 5.35832299e-01 5.34519807e-01 5.33208907e-01 + 5.31899601e-01 5.30591888e-01 5.29285769e-01 5.27981244e-01 5.26678313e-01 + 5.25376977e-01 5.24077235e-01 5.22779089e-01 5.21482538e-01 5.20187583e-01 + 5.18894224e-01 5.17602461e-01 5.16312295e-01 5.15023726e-01 5.13736754e-01 + 5.12451379e-01 5.11167602e-01 5.09885423e-01 5.08604843e-01 5.07325861e-01 + 5.06048477e-01 5.04772693e-01 5.03498508e-01 5.02225923e-01 5.00954938e-01 + 4.99685553e-01 4.98417769e-01 4.97151585e-01 4.95887003e-01 4.94624021e-01 + 4.93362642e-01 4.92102864e-01 4.90844689e-01 4.89588116e-01 4.88333145e-01 + 4.87079778e-01 4.85828014e-01 4.84577853e-01 4.83329297e-01 4.82082344e-01 + 4.80836996e-01 4.79593252e-01 4.78351114e-01 4.77110580e-01 4.75871652e-01 + 4.74634330e-01 4.73398614e-01 4.72164504e-01 4.70932001e-01 4.69701104e-01 + 4.68471815e-01 4.67244132e-01 4.66018058e-01 4.64793591e-01 4.63570733e-01 + 4.62349483e-01 4.61129842e-01 4.59911810e-01 4.58695387e-01 4.57480573e-01 + 4.56267369e-01 4.55055776e-01 4.53845792e-01 4.52637419e-01 4.51430658e-01 + 4.50225507e-01 4.49021967e-01 4.47820039e-01 4.46619724e-01 4.45421020e-01 + 4.44223928e-01 4.43028450e-01 4.41834584e-01 4.40642332e-01 4.39451693e-01 + 4.38262668e-01 4.37075256e-01 4.35889459e-01 4.34705277e-01 4.33522709e-01 + 4.32341757e-01 4.31162420e-01 4.29984698e-01 4.28808592e-01 4.27634102e-01 + 4.26461229e-01 4.25289972e-01 4.24120332e-01 4.22952310e-01 4.21785904e-01 + 4.20621116e-01 4.19457946e-01 4.18296395e-01 4.17136461e-01 4.15978147e-01 + 4.14821451e-01 4.13666374e-01 4.12512917e-01 4.11361080e-01 4.10210862e-01 + 4.09062265e-01 4.07915288e-01 4.06769932e-01 4.05626197e-01 4.04484083e-01 + 4.03343590e-01 4.02204719e-01 4.01067470e-01 3.99931844e-01 3.98797839e-01 + 3.97665458e-01 3.96534699e-01 3.95405564e-01 3.94278052e-01 3.93152164e-01 + 3.92027900e-01 3.90905259e-01 3.89784244e-01 3.88664853e-01 3.87547087e-01 + 3.86430946e-01 3.85316431e-01 3.84203541e-01 3.83092278e-01 3.81982640e-01 + 3.80874629e-01 3.79768245e-01 3.78663487e-01 3.77560357e-01 3.76458854e-01 + 3.75358979e-01 3.74260731e-01 3.73164112e-01 3.72069121e-01 3.70975759e-01 + 3.69884025e-01 3.68793921e-01 3.67705446e-01 3.66618601e-01 3.65533385e-01 + 3.64449799e-01 3.63367844e-01 3.62287520e-01 3.61208826e-01 3.60131763e-01 + 3.59056331e-01 3.57982531e-01 3.56910363e-01 3.55839826e-01 3.54770922e-01 + 3.53703650e-01 3.52638011e-01 3.51574005e-01 3.50511632e-01 3.49450892e-01 + 3.48391786e-01 3.47334314e-01 3.46278476e-01 3.45224272e-01 3.44171703e-01 + 3.43120769e-01 3.42071469e-01 3.41023805e-01 3.39977776e-01 3.38933384e-01 + 3.37890627e-01 3.36849506e-01 3.35810021e-01 3.34772174e-01 3.33735963e-01 + 3.32701389e-01 3.31668453e-01 3.30637154e-01 3.29607493e-01 3.28579470e-01 + 3.27553085e-01 3.26528339e-01 3.25505231e-01 3.24483762e-01 3.23463933e-01 + 3.22445743e-01 3.21429192e-01 3.20414282e-01 3.19401011e-01 3.18389381e-01 + 3.17379391e-01 3.16371042e-01 3.15364334e-01 3.14359267e-01 3.13355841e-01 + 3.12354057e-01 3.11353915e-01 3.10355415e-01 3.09358557e-01 3.08363342e-01 + 3.07369770e-01 3.06377840e-01 3.05387554e-01 3.04398911e-01 3.03411912e-01 + 3.02426556e-01 3.01442845e-01 3.00460777e-01 2.99480355e-01 2.98501577e-01 + 2.97524444e-01 2.96548956e-01 2.95575113e-01 2.94602916e-01 2.93632365e-01 + 2.92663460e-01 2.91696201e-01 2.90730589e-01 2.89766623e-01 2.88804304e-01 + 2.87843632e-01 2.86884607e-01 2.85927230e-01 2.84971501e-01 2.84017420e-01 + 2.83064986e-01 2.82114201e-01 2.81165065e-01 2.80217578e-01 2.79271739e-01 + 2.78327550e-01 2.77385010e-01 2.76444119e-01 2.75504879e-01 2.74567288e-01 + 2.73631348e-01 2.72697059e-01 2.71764419e-01 2.70833431e-01 2.69904094e-01 + 2.68976408e-01 2.68050374e-01 2.67125991e-01 2.66203261e-01 2.65282182e-01 + 2.64362756e-01 2.63444982e-01 2.62528861e-01 2.61614393e-01 2.60701578e-01 + 2.59790416e-01 2.58880908e-01 2.57973054e-01 2.57066853e-01 2.56162307e-01 + 2.55259415e-01 2.54358178e-01 2.53458595e-01 2.52560668e-01 2.51664395e-01 + 2.50769778e-01 2.49876816e-01 2.48985511e-01 2.48095861e-01 2.47207867e-01 + 2.46321530e-01 2.45436849e-01 2.44553825e-01 2.43672457e-01 2.42792747e-01 + 2.41914695e-01 2.41038300e-01 2.40163562e-01 2.39290483e-01 2.38419061e-01 + 2.37549298e-01 2.36681193e-01 2.35814748e-01 2.34949961e-01 2.34086833e-01 + 2.33225364e-01 2.32365555e-01 2.31507405e-01 2.30650916e-01 2.29796086e-01 + 2.28942916e-01 2.28091407e-01 2.27241559e-01 2.26393372e-01 2.25546845e-01 + 2.24701980e-01 2.23858776e-01 2.23017233e-01 2.22177352e-01 2.21339134e-01 + 2.20502577e-01 2.19667682e-01 2.18834451e-01 2.18002881e-01 2.17172975e-01 + 2.16344732e-01 2.15518152e-01 2.14693235e-01 2.13869982e-01 2.13048393e-01 + 2.12228468e-01 2.11410207e-01 2.10593610e-01 2.09778678e-01 2.08965410e-01 + 2.08153807e-01 2.07343870e-01 2.06535598e-01 2.05728991e-01 2.04924049e-01 + 2.04120774e-01 2.03319164e-01 2.02519221e-01 2.01720944e-01 2.00924334e-01 + 2.00129390e-01 1.99336113e-01 1.98544503e-01 1.97754560e-01 1.96966285e-01 + 1.96179677e-01 1.95394737e-01 1.94611465e-01 1.93829861e-01 1.93049925e-01 + 1.92271658e-01 1.91495059e-01 1.90720129e-01 1.89946869e-01 1.89175277e-01 + 1.88405354e-01 1.87637101e-01 1.86870518e-01 1.86105605e-01 1.85342361e-01 + 1.84580788e-01 1.83820885e-01 1.83062653e-01 1.82306091e-01 1.81551200e-01 + 1.80797980e-01 1.80046431e-01 1.79296554e-01 1.78548348e-01 1.77801814e-01 + 1.77056952e-01 1.76313762e-01 1.75572244e-01 1.74832398e-01 1.74094225e-01 + 1.73357725e-01 1.72622897e-01 1.71889743e-01 1.71158261e-01 1.70428453e-01 + 1.69700319e-01 1.68973858e-01 1.68249071e-01 1.67525958e-01 1.66804519e-01 + 1.66084755e-01 1.65366665e-01 1.64650249e-01 1.63935509e-01 1.63222443e-01 + 1.62511053e-01 1.61801338e-01 1.61093298e-01 1.60386934e-01 1.59682246e-01 + 1.58979233e-01 1.58277897e-01 1.57578237e-01 1.56880253e-01 1.56183946e-01 + 1.55489316e-01 1.54796362e-01 1.54105086e-01 1.53415486e-01 1.52727564e-01 + 1.52041320e-01 1.51356753e-01 1.50673864e-01 1.49992653e-01 1.49313120e-01 + 1.48635265e-01 1.47959088e-01 1.47284591e-01 1.46611771e-01 1.45940631e-01 + 1.45271170e-01 1.44603388e-01 1.43937285e-01 1.43272862e-01 1.42610118e-01 + 1.41949054e-01 1.41289670e-01 1.40631966e-01 1.39975942e-01 1.39321598e-01 + 1.38668935e-01 1.38017953e-01 1.37368652e-01 1.36721031e-01 1.36075091e-01 + 1.35430833e-01 1.34788256e-01 1.34147361e-01 1.33508147e-01 1.32870615e-01 + 1.32234765e-01 1.31600597e-01 1.30968111e-01 1.30337308e-01 1.29708187e-01 + 1.29080749e-01 1.28454994e-01 1.27830921e-01 1.27208532e-01 1.26587826e-01 + 1.25968803e-01 1.25351464e-01 1.24735808e-01 1.24121836e-01 1.23509548e-01 + 1.22898944e-01 1.22290024e-01 1.21682789e-01 1.21077238e-01 1.20473372e-01 + 1.19871190e-01 1.19270693e-01 1.18671881e-01 1.18074755e-01 1.17479313e-01 + 1.16885558e-01 1.16293487e-01 1.15703102e-01 1.15114403e-01 1.14527390e-01 + 1.13942064e-01 1.13358423e-01 1.12776468e-01 1.12196200e-01 1.11617619e-01 + 1.11040725e-01 1.10465517e-01 1.09891996e-01 1.09320162e-01 1.08750016e-01 + 1.08181557e-01 1.07614785e-01 1.07049701e-01 1.06486305e-01 1.05924597e-01 + 1.05364577e-01 1.04806244e-01 1.04249601e-01 1.03694645e-01 1.03141378e-01 + 1.02589800e-01 1.02039910e-01 1.01491709e-01 1.00945198e-01 1.00400375e-01 + 9.98572416e-02 9.93157976e-02 9.87760431e-02 9.82379782e-02 9.77016030e-02 + 9.71669178e-02 9.66339224e-02 9.61026172e-02 9.55730022e-02 9.50450776e-02 + 9.45188434e-02 9.39942997e-02 9.34714468e-02 9.29502847e-02 9.24308135e-02 + 9.19130333e-02 9.13969443e-02 9.08825466e-02 9.03698403e-02 8.98588255e-02 + 8.93495023e-02 8.88418708e-02 8.83359312e-02 8.78316836e-02 8.73291281e-02 + 8.68282647e-02 8.63290937e-02 8.58316150e-02 8.53358290e-02 8.48417355e-02 + 8.43493348e-02 8.38586270e-02 8.33696121e-02 8.28822904e-02 8.23966618e-02 + 8.19127265e-02 8.14304847e-02 8.09499364e-02 8.04710817e-02 7.99939207e-02 + 7.95184537e-02 7.90446805e-02 7.85726014e-02 7.81022165e-02 7.76335259e-02 + 7.71665296e-02 7.67012279e-02 7.62376207e-02 7.57757082e-02 7.53154905e-02 + 7.48569677e-02 7.44001400e-02 7.39450073e-02 7.34915699e-02 7.30398277e-02 + 7.25897810e-02 7.21414298e-02 7.16947743e-02 7.12498144e-02 7.08065504e-02 + 7.03649822e-02 6.99251102e-02 6.94869342e-02 6.90504544e-02 6.86156710e-02 + 6.81825840e-02 6.77511935e-02 6.73214996e-02 6.68935024e-02 6.64672020e-02 + 6.60425985e-02 6.56196920e-02 6.51984826e-02 6.47789704e-02 6.43611555e-02 + 6.39450379e-02 6.35306178e-02 6.31178953e-02 6.27068704e-02 6.22975433e-02 + 6.18899141e-02 6.14839827e-02 6.10797494e-02 6.06772142e-02 6.02763772e-02 + 5.98772385e-02 5.94797982e-02 5.90840564e-02 5.86900131e-02 5.82976685e-02 + 5.79070227e-02 5.75180757e-02 5.71308276e-02 5.67452785e-02 5.63614285e-02 + 5.59792777e-02 5.55988261e-02 5.52200739e-02 5.48430212e-02 5.44676679e-02 + 5.40940143e-02 5.37220604e-02 5.33518062e-02 5.29832520e-02 5.26163976e-02 + 5.22512433e-02 5.18877891e-02 5.15260351e-02 5.11659814e-02 5.08076280e-02 + 5.04509751e-02 5.00960227e-02 4.97427708e-02 4.93912197e-02 4.90413693e-02 + 4.86932198e-02 4.83467711e-02 4.80020235e-02 4.76589769e-02 4.73176315e-02 + 4.69779873e-02 4.66400444e-02 4.63038029e-02 4.59692628e-02 4.56364243e-02 + 4.53052874e-02 4.49758521e-02 4.46481186e-02 4.43220870e-02 4.39977572e-02 + 4.36751294e-02 4.33542037e-02 4.30349801e-02 4.27174587e-02 4.24016395e-02 + 4.20875227e-02 4.17751083e-02 4.14643964e-02 4.11553870e-02 4.08480802e-02 + 4.05424762e-02 4.02385749e-02 3.99363764e-02 3.96358808e-02 3.93370881e-02 + 3.90399985e-02 3.87446120e-02 3.84509287e-02 3.81589486e-02 3.78686718e-02 + 3.75800983e-02 3.72932283e-02 3.70080618e-02 3.67245988e-02 3.64428394e-02 + 3.61627838e-02 3.58844318e-02 3.56077837e-02 3.53328395e-02 3.50595992e-02 + 3.47880629e-02 3.45182306e-02 3.42501025e-02 3.39836786e-02 3.37189589e-02 + 3.34559435e-02 3.31946324e-02 3.29350258e-02 3.26771236e-02 3.24209260e-02 + 3.21664330e-02 3.19136446e-02 3.16625610e-02 3.14131821e-02 3.11655080e-02 + 3.09195388e-02 3.06752746e-02 3.04327153e-02 3.01918611e-02 2.99527120e-02 + 2.97152680e-02 2.94795292e-02 2.92454957e-02 2.90131675e-02 2.87825447e-02 + 2.85536273e-02 2.83264153e-02 2.81009089e-02 2.78771081e-02 2.76550128e-02 + 2.74346233e-02 2.72159395e-02 2.69989614e-02 2.67836892e-02 2.65701228e-02 + 2.63582623e-02 2.61481079e-02 2.59396594e-02 2.57329170e-02 2.55278807e-02 + 2.53245505e-02 2.51229266e-02 2.49230089e-02 2.47247975e-02 2.45282924e-02 + 2.43334937e-02 2.41404014e-02 2.39490156e-02 2.37593363e-02 2.35713636e-02 + 2.33850975e-02 2.32005380e-02 2.30176851e-02 2.28365390e-02 2.26570997e-02 + 2.24793672e-02 2.23033415e-02 2.21290227e-02 2.19564108e-02 2.17855059e-02 + 2.16163080e-02 2.14488171e-02 2.12830333e-02 2.11189566e-02 2.09565871e-02 + 2.07959248e-02 2.06369696e-02 2.04797218e-02 2.03241812e-02 2.01703480e-02 + 2.00182221e-02 1.98678037e-02 1.97190927e-02 1.95720891e-02 1.94267931e-02 + 1.92832045e-02 1.91413236e-02 1.90011502e-02 1.88626845e-02 1.87259265e-02 + 1.85908761e-02 1.84575335e-02 1.83258986e-02 1.81959715e-02 1.80677522e-02 + 1.79412408e-02 1.78164372e-02 1.76933415e-02 1.75719538e-02 1.74522740e-02 + 1.73343022e-02 1.72180384e-02 1.71034827e-02 1.69906350e-02 1.68794954e-02 + 1.67700639e-02 1.66623405e-02 1.65563253e-02 1.64520183e-02 1.63494195e-02 + 1.62485289e-02 1.61493466e-02 1.60518726e-02 1.59561068e-02 1.58620494e-02 + 1.57697003e-02 1.56790596e-02 1.55901273e-02 1.55029034e-02 1.54173879e-02 + 1.53335808e-02 1.52514822e-02 1.51710921e-02 1.50924105e-02 1.50154374e-02 + 1.49401728e-02 1.48666168e-02 1.47947694e-02 1.47246305e-02 1.46562002e-02 + 1.45894786e-02 1.45244656e-02 1.44611612e-02 1.43995655e-02 1.43396785e-02 + 1.42815001e-02 1.42250305e-02 1.41702695e-02 1.41172173e-02 1.40658738e-02 + 1.40162391e-02 1.39683132e-02 1.39220960e-02 1.38775876e-02 1.38347880e-02 + 1.37936971e-02 1.37543151e-02 1.37166420e-02 1.36806776e-02 1.36464221e-02 + 1.36138754e-02 1.35830376e-02 1.35539086e-02 1.35264885e-02 1.35007773e-02 + 1.34767750e-02 1.34544815e-02 1.34338969e-02 1.34150212e-02 1.33978544e-02 + 1.33823966e-02 1.33686476e-02 1.33566075e-02 1.33462763e-02 1.33376541e-02 + 1.33307407e-02 1.33255363e-02 1.33220408e-02 1.33202542e-02 1.33201765e-02 + 1.33218078e-02 1.33251480e-02 1.33301970e-02 1.33369550e-02 1.33454220e-02 + 1.33555978e-02 1.33674825e-02 1.33810762e-02 1.33963787e-02 1.34133902e-02 + 1.34321105e-02 1.34525397e-02 1.34746779e-02 1.34985249e-02 1.35240808e-02 + 1.35513455e-02 1.35803192e-02 1.36110016e-02 1.36433930e-02 1.36774932e-02 + 1.37133022e-02 1.37508200e-02 1.37900467e-02 1.38309822e-02 1.38736265e-02 + 1.39179796e-02 1.39640414e-02 1.40118121e-02 1.40612914e-02 1.41124796e-02 + 1.41653765e-02 1.42199821e-02 1.42762964e-02 1.43343194e-02 1.43940512e-02 + 1.44554916e-02 1.45186406e-02 1.45834983e-02 1.46500646e-02 1.47183396e-02 + 1.47883231e-02 1.48600153e-02 1.49334160e-02 1.50085252e-02 1.50853430e-02 + 1.51638693e-02 1.52441041e-02 1.53260474e-02 1.54096992e-02 1.54950594e-02 + 1.55821280e-02 1.56709051e-02 1.57613905e-02 1.58535843e-02 1.59474864e-02 + 1.60430969e-02 1.61404156e-02 1.62394427e-02 1.63401780e-02 1.64426215e-02 + 1.65467732e-02 1.66526331e-02 1.67602012e-02 1.68694775e-02 1.69804618e-02 + 1.70931542e-02 1.72075547e-02 1.73236633e-02 1.74414798e-02 1.75610043e-02 + 1.76822368e-02 1.78051772e-02 1.79298256e-02 1.80561818e-02 1.81842458e-02 + 1.83140177e-02 1.84454973e-02 1.85786847e-02 1.87135798e-02 1.88501827e-02 + 1.89884931e-02 1.91285113e-02 1.92702370e-02 1.94136703e-02 1.95588111e-02 + 1.97056595e-02 1.98542153e-02 2.00044786e-02 2.01564492e-02 2.03101272e-02 + 2.04655126e-02 2.06226053e-02 2.07814052e-02 2.09419123e-02 2.11041267e-02 + 2.12680482e-02 2.14336768e-02 2.16010125e-02 2.17700553e-02 2.19408050e-02 + 2.21132617e-02 2.22874254e-02 2.24632959e-02 2.26408733e-02 2.28201575e-02 + 2.30011484e-02 2.31838461e-02 2.33682505e-02 2.35543615e-02 2.37421791e-02 + 2.39317033e-02 2.41229339e-02 2.43158711e-02 2.45105147e-02 2.47068647e-02 + 2.49049210e-02 2.51046836e-02 2.53061524e-02 2.55093275e-02 2.57142087e-02 + 2.59207960e-02 2.61290894e-02 2.63390888e-02 2.65507942e-02 2.67642055e-02 + 2.69793227e-02 2.71961457e-02 2.74146744e-02 2.76349090e-02 2.78568491e-02 + 2.80804949e-02 2.83058463e-02 2.85329032e-02 2.87616656e-02 2.89921334e-02 + 2.92243066e-02 2.94581851e-02 2.96937689e-02 2.99310578e-02 3.01700520e-02 + 3.04107512e-02 3.06531555e-02 3.08972648e-02 3.11430790e-02 3.13905981e-02 + 3.16398220e-02 3.18907507e-02 3.21433841e-02 3.23977222e-02 3.26537648e-02 + 3.29115120e-02 3.31709637e-02 3.34321199e-02 3.36949803e-02 3.39595451e-02 + 3.42258142e-02 3.44937874e-02 3.47634647e-02 3.50348461e-02 3.53079315e-02 + 3.55827209e-02 3.58592141e-02 3.61374112e-02 3.64173120e-02 3.66989165e-02 + 3.69822246e-02 3.72672363e-02 3.75539515e-02 3.78423701e-02 3.81324920e-02 + 3.84243173e-02 3.87178458e-02 3.90130775e-02 3.93100123e-02 3.96086502e-02 + 3.99089910e-02 4.02110347e-02 4.05147812e-02 4.08202305e-02 4.11273825e-02 + 4.14362371e-02 4.17467942e-02 4.20590539e-02 4.23730160e-02 4.26886804e-02 + 4.30060471e-02 4.33251159e-02 4.36458870e-02 4.39683600e-02 4.42925351e-02 + 4.46184120e-02 4.49459908e-02 4.52752714e-02 4.56062536e-02 4.59389375e-02 + 4.62733229e-02 4.66094097e-02 4.69471980e-02 4.72866875e-02 4.76278783e-02 + 4.79707703e-02 4.83153633e-02 4.86616573e-02 4.90096522e-02 4.93593480e-02 + 4.97107446e-02 5.00638418e-02 5.04186396e-02 5.07751380e-02 5.11333368e-02 + 5.14932360e-02 5.18548354e-02 5.22181351e-02 5.25831349e-02 5.29498347e-02 + 5.33182344e-02 5.36883341e-02 5.40601335e-02 5.44336326e-02 5.48088313e-02 + 5.51857296e-02 5.55643273e-02 5.59446244e-02 5.63266207e-02 5.67103163e-02 + 5.70957109e-02 5.74828046e-02 5.78715972e-02 5.82620886e-02 5.86542788e-02 + 5.90481677e-02 5.94437551e-02 5.98410410e-02 6.02400253e-02 6.06407080e-02 + 6.10430888e-02 6.14471678e-02 6.18529447e-02 6.22604197e-02 6.26695925e-02 + 6.30804630e-02 6.34930312e-02 6.39072970e-02 6.43232602e-02 6.47409209e-02 + 6.51602788e-02 6.55813340e-02 6.60040862e-02 6.64285354e-02 6.68546816e-02 + 6.72825245e-02 6.77120642e-02 6.81433005e-02 6.85762333e-02 6.90108625e-02 + 6.94471881e-02 6.98852099e-02 7.03249278e-02 7.07663417e-02 7.12094516e-02 + 7.16542573e-02 7.21007588e-02 7.25489558e-02 7.29988484e-02 7.34504365e-02 + 7.39037198e-02 7.43586984e-02 7.48153721e-02 7.52737408e-02 7.57338044e-02 + 7.61955628e-02 7.66590160e-02 7.71241637e-02 7.75910059e-02 7.80595425e-02 + 7.85297734e-02 7.90016985e-02 7.94753177e-02 7.99506308e-02 8.04276378e-02 + 8.09063385e-02 8.13867329e-02 8.18688208e-02 8.23526021e-02 8.28380768e-02 + 8.33252446e-02 8.38141056e-02 8.43046595e-02 8.47969063e-02 8.52908459e-02 + 8.57864782e-02 8.62838029e-02 8.67828201e-02 8.72835297e-02 8.77859314e-02 + 8.82900252e-02 8.87958110e-02 8.93032887e-02 8.98124581e-02 9.03233191e-02 + 9.08358717e-02 9.13501157e-02 9.18660509e-02 9.23836774e-02 9.29029949e-02 + 9.34240033e-02 9.39467025e-02 9.44710925e-02 9.49971730e-02 9.55249440e-02 + 9.60544054e-02 9.65855570e-02 9.71183987e-02 9.76529303e-02 9.81891519e-02 + 9.87270632e-02 9.92666641e-02 9.98079545e-02 1.00350934e-01 1.00895603e-01 + 1.01441962e-01 1.01990009e-01 1.02539745e-01 1.03091170e-01 1.03644283e-01 + 1.04199085e-01 1.04755576e-01 1.05313754e-01 1.05873621e-01 1.06435176e-01 + 1.06998419e-01 1.07563349e-01 1.08129968e-01 1.08698273e-01 1.09268266e-01 + 1.09839947e-01 1.10413314e-01 1.10988368e-01 1.11565110e-01 1.12143538e-01 + 1.12723652e-01 1.13305453e-01 1.13888941e-01 1.14474115e-01 1.15060974e-01 + 1.15649520e-01 1.16239751e-01 1.16831669e-01 1.17425271e-01 1.18020560e-01 + 1.18617533e-01 1.19216192e-01 1.19816535e-01 1.20418564e-01 1.21022277e-01 + 1.21627675e-01 1.22234757e-01 1.22843524e-01 1.23453975e-01 1.24066109e-01 + 1.24679928e-01 1.25295431e-01 1.25912617e-01 1.26531487e-01 1.27152040e-01 + 1.27774276e-01 1.28398196e-01 1.29023798e-01 1.29651083e-01 1.30280051e-01 + 1.30910702e-01 1.31543034e-01 1.32177050e-01 1.32812747e-01 1.33450126e-01 + 1.34089187e-01 1.34729929e-01 1.35372353e-01 1.36016459e-01 1.36662246e-01 + 1.37309713e-01 1.37958862e-01 1.38609692e-01 1.39262202e-01 1.39916393e-01 + 1.40572264e-01 1.41229815e-01 1.41889046e-01 1.42549958e-01 1.43212549e-01 + 1.43876819e-01 1.44542770e-01 1.45210399e-01 1.45879708e-01 1.46550695e-01 + 1.47223362e-01 1.47897707e-01 1.48573731e-01 1.49251433e-01 1.49930814e-01 + 1.50611872e-01 1.51294609e-01 1.51979023e-01 1.52665115e-01 1.53352885e-01 + 1.54042332e-01 1.54733456e-01 1.55426257e-01 1.56120735e-01 1.56816890e-01 + 1.57514721e-01 1.58214229e-01 1.58915413e-01 1.59618273e-01 1.60322809e-01 + 1.61029020e-01 1.61736908e-01 1.62446471e-01 1.63157709e-01 1.63870622e-01 + 1.64585210e-01 1.65301473e-01 1.66019411e-01 1.66739023e-01 1.67460310e-01 + 1.68183271e-01 1.68907906e-01 1.69634214e-01 1.70362197e-01 1.71091853e-01 + 1.71823182e-01 1.72556184e-01 1.73290860e-01 1.74027208e-01 1.74765229e-01 + 1.75504923e-01 1.76246289e-01 1.76989327e-01 1.77734037e-01 1.78480419e-01 + 1.79228473e-01 1.79978199e-01 1.80729595e-01 1.81482663e-01 1.82237402e-01 + 1.82993812e-01 1.83751893e-01 1.84511644e-01 1.85273065e-01 1.86036157e-01 + 1.86800919e-01 1.87567350e-01 1.88335451e-01 1.89105222e-01 1.89876662e-01 + 1.90649771e-01 1.91424549e-01 1.92200996e-01 1.92979112e-01 1.93758896e-01 + 1.94540348e-01 1.95323469e-01 1.96108257e-01 1.96894713e-01 1.97682837e-01 + 1.98472628e-01 1.99264087e-01 2.00057212e-01 2.00852004e-01 2.01648463e-01 + 2.02446589e-01 2.03246381e-01 2.04047839e-01 2.04850963e-01 2.05655753e-01 + 2.06462208e-01 2.07270329e-01 2.08080115e-01 2.08891567e-01 2.09704683e-01 + 2.10519464e-01 2.11335909e-01 2.12154019e-01 2.12973793e-01 2.13795231e-01 + 2.14618333e-01 2.15443098e-01 2.16269527e-01 2.17097619e-01 2.17927374e-01 + 2.18758792e-01 2.19591873e-01 2.20426616e-01 2.21263022e-01 2.22101090e-01 + 2.22940819e-01 2.23782211e-01 2.24625264e-01 2.25469978e-01 2.26316354e-01 + 2.27164390e-01 2.28014088e-01 2.28865446e-01 2.29718464e-01 2.30573143e-01 + 2.31429482e-01 2.32287480e-01 2.33147139e-01 2.34008457e-01 2.34871434e-01 + 2.35736070e-01 2.36602365e-01 2.37470319e-01 2.38339931e-01 2.39211202e-01 + 2.40084131e-01 2.40958717e-01 2.41834962e-01 2.42712864e-01 2.43592423e-01 + 2.44473640e-01 2.45356513e-01 2.46241044e-01 2.47127230e-01 2.48015074e-01 + 2.48904573e-01 2.49795728e-01 2.50688539e-01 2.51583006e-01 2.52479128e-01 + 2.53376905e-01 2.54276337e-01 2.55177424e-01 2.56080166e-01 2.56984562e-01 + 2.57890612e-01 2.58798316e-01 2.59707674e-01 2.60618685e-01 2.61531350e-01 + 2.62445667e-01 2.63361638e-01 2.64279262e-01 2.65198538e-01 2.66119466e-01 + 2.67042047e-01 2.67966279e-01 2.68892164e-01 2.69819699e-01 2.70748886e-01 + 2.71679724e-01 2.72612213e-01 2.73546353e-01 2.74482143e-01 2.75419584e-01 + 2.76358674e-01 2.77299415e-01 2.78241805e-01 2.79185844e-01 2.80131533e-01 + 2.81078870e-01 2.82027857e-01 2.82978492e-01 2.83930775e-01 2.84884707e-01 + 2.85840287e-01 2.86797514e-01 2.87756389e-01 2.88716911e-01 2.89679080e-01 + 2.90642896e-01 2.91608359e-01 2.92575468e-01 2.93544224e-01 2.94514625e-01 + 2.95486673e-01 2.96460366e-01 2.97435704e-01 2.98412687e-01 2.99391316e-01 + 3.00371589e-01 3.01353507e-01 3.02337069e-01 3.03322275e-01 3.04309125e-01 + 3.05297618e-01 3.06287755e-01 3.07279535e-01 3.08272958e-01 3.09268024e-01 + 3.10264733e-01 3.11263084e-01 3.12263076e-01 3.13264711e-01 3.14267987e-01 + 3.15272905e-01 3.16279464e-01 3.17287664e-01 3.18297505e-01 3.19308986e-01 + 3.20322108e-01 3.21336869e-01 3.22353271e-01 3.23371312e-01 3.24390992e-01 + 3.25412312e-01 3.26435271e-01 3.27459868e-01 3.28486104e-01 3.29513978e-01 + 3.30543490e-01 3.31574640e-01 3.32607428e-01 3.33641852e-01 3.34677914e-01 + 3.35715613e-01 3.36754949e-01 3.37795921e-01 3.38838529e-01 3.39882774e-01 + 3.40928653e-01 3.41976169e-01 3.43025320e-01 3.44076105e-01 3.45128526e-01 + 3.46182581e-01 3.47238271e-01 3.48295594e-01 3.49354552e-01 3.50415143e-01 + 3.51477368e-01 3.52541225e-01 3.53606716e-01 3.54673839e-01 3.55742595e-01 + 3.56812983e-01 3.57885003e-01 3.58958655e-01 3.60033939e-01 3.61110853e-01 + 3.62189399e-01 3.63269575e-01 3.64351382e-01 3.65434820e-01 3.66519887e-01 + 3.67606584e-01 3.68694911e-01 3.69784868e-01 3.70876453e-01 3.71969667e-01 + 3.73064510e-01 3.74160981e-01 3.75259081e-01 3.76358808e-01 3.77460163e-01 + 3.78563145e-01 3.79667755e-01 3.80773992e-01 3.81881855e-01 3.82991344e-01 + 3.84102460e-01 3.85215202e-01 3.86329570e-01 3.87445563e-01 3.88563181e-01 + 3.89682424e-01 3.90803292e-01 3.91925784e-01 3.93049901e-01 3.94175642e-01 + 3.95303006e-01 3.96431994e-01 3.97562605e-01 3.98694839e-01 3.99828696e-01 + 4.00964175e-01 4.02101276e-01 4.03240000e-01 4.04380345e-01 4.05522312e-01 + 4.06665899e-01 4.07811108e-01 4.08957938e-01 4.10106388e-01 4.11256458e-01 + 4.12408148e-01 4.13561458e-01 4.14716388e-01 4.15872936e-01 4.17031104e-01 + 4.18190890e-01 4.19352295e-01 4.20515317e-01 4.21679958e-01 4.22846216e-01 + 4.24014092e-01 4.25183585e-01 4.26354695e-01 4.27527421e-01 4.28701764e-01 + 4.29877723e-01 4.31055298e-01 4.32234488e-01 4.33415294e-01 4.34597715e-01 + 4.35781751e-01 4.36967401e-01 4.38154665e-01 4.39343544e-01 4.40534036e-01 + 4.41726142e-01 4.42919861e-01 4.44115193e-01 4.45312138e-01 4.46510695e-01 + 4.47710864e-01 4.48912645e-01 4.50116038e-01 4.51321043e-01 4.52527658e-01 + 4.53735885e-01 4.54945722e-01 4.56157169e-01 4.57370226e-01 4.58584894e-01 + 4.59801170e-01 4.61019056e-01 4.62238551e-01 4.63459655e-01 4.64682367e-01 + 4.65906688e-01 4.67132616e-01 4.68360152e-01 4.69589295e-01 4.70820046e-01 + 4.72052403e-01 4.73286367e-01 4.74521937e-01 4.75759113e-01 4.76997895e-01 + 4.78238283e-01 4.79480276e-01 4.80723873e-01 4.81969076e-01 4.83215882e-01 + 4.84464293e-01 4.85714308e-01 4.86965926e-01 4.88219148e-01 4.89473972e-01 + 4.90730400e-01 4.91988430e-01 4.93248062e-01 4.94509296e-01 4.95772131e-01 + 4.97036568e-01 4.98302606e-01 4.99570245e-01 5.00839485e-01 5.02110324e-01 + 5.03382764e-01 5.04656804e-01 5.05932442e-01 5.07209680e-01 5.08488517e-01 + 5.09768953e-01 5.11050986e-01 5.12334618e-01 5.13619847e-01 5.14906674e-01 + 5.16195098e-01 5.17485119e-01 5.18776737e-01 5.20069951e-01 5.21364761e-01 + 5.22661167e-01 5.23959168e-01 5.25258764e-01 5.26559955e-01 5.27862741e-01 + 5.29167122e-01 5.30473096e-01 5.31780664e-01 5.33089826e-01 5.34400580e-01 + 5.35712928e-01 5.37026868e-01 5.38342401e-01 5.39659526e-01 5.40978242e-01 + 5.42298550e-01 5.43620449e-01 5.44943939e-01 5.46269020e-01 5.47595691e-01 + 5.48923952e-01 5.50253802e-01 5.51585242e-01 5.52918272e-01 5.54252890e-01 + 5.55589096e-01 5.56926891e-01 5.58266274e-01 5.59607245e-01 5.60949803e-01 + 5.62293948e-01 5.63639680e-01 5.64986999e-01 5.66335903e-01 5.67686394e-01 + 5.69038470e-01 5.70392132e-01 5.71747378e-01 5.73104210e-01 5.74462626e-01 + 5.75822626e-01 5.77184210e-01 5.78547377e-01 5.79912128e-01 5.81278461e-01 + 5.82646378e-01 5.84015876e-01 5.85386957e-01 5.86759620e-01 5.88133864e-01 + 5.89509689e-01 5.90887095e-01 5.92266082e-01 5.93646649e-01 5.95028796e-01 + 5.96412522e-01 5.97797828e-01 5.99184713e-01 6.00573177e-01 6.01963219e-01 + 6.03354840e-01 6.04748038e-01 6.06142814e-01 6.07539167e-01 6.08937097e-01 + 6.10336603e-01 6.11737686e-01 6.13140346e-01 6.14544580e-01 6.15950391e-01 + 6.17357776e-01 6.18766736e-01 6.20177271e-01 6.21589379e-01 6.23003062e-01 + 6.24418319e-01 6.25835148e-01 6.27253551e-01 6.28673526e-01 6.30095073e-01 + 6.31518193e-01 6.32942884e-01 6.34369147e-01 6.35796981e-01 6.37226386e-01 + 6.38657361e-01 6.40089906e-01 6.41524022e-01 6.42959706e-01 6.44396960e-01 + 6.45835783e-01 6.47276175e-01 6.48718135e-01 6.50161663e-01 6.51606758e-01 + 6.53053421e-01 6.54501651e-01 6.55951448e-01 6.57402811e-01 6.58855740e-01 + 6.60310236e-01 6.61766296e-01 6.63223922e-01 6.64683112e-01 6.66143868e-01 + 6.67606187e-01 6.69070070e-01 6.70535517e-01 6.72002527e-01 6.73471100e-01 + 6.74941236e-01 6.76412934e-01 6.77886194e-01 6.79361015e-01 6.80837398e-01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.65580254e-01 1.65563515e-01 1.65546741e-01 1.65529929e-01 1.65513082e-01 + 1.65496198e-01 1.65479277e-01 1.65462319e-01 1.65445324e-01 1.65428292e-01 + 1.65411223e-01 1.65394117e-01 1.65376974e-01 1.65359793e-01 1.65342574e-01 + 1.65325318e-01 1.65308025e-01 1.65290693e-01 1.65273323e-01 1.65255915e-01 + 1.65238469e-01 1.65220985e-01 1.65203462e-01 1.65185901e-01 1.65168301e-01 + 1.65150662e-01 1.65132985e-01 1.65115268e-01 1.65097513e-01 1.65079718e-01 + 1.65061884e-01 1.65044011e-01 1.65026098e-01 1.65008145e-01 1.64990153e-01 + 1.64972120e-01 1.64954048e-01 1.64935936e-01 1.64917783e-01 1.64899591e-01 + 1.64881357e-01 1.64863083e-01 1.64844769e-01 1.64826414e-01 1.64808017e-01 + 1.64789580e-01 1.64771102e-01 1.64752582e-01 1.64734021e-01 1.64715418e-01 + 1.64696774e-01 1.64678088e-01 1.64659360e-01 1.64640590e-01 1.64621778e-01 + 1.64602924e-01 1.64584027e-01 1.64565088e-01 1.64546107e-01 1.64527082e-01 + 1.64508015e-01 1.64488905e-01 1.64469751e-01 1.64450555e-01 1.64431315e-01 + 1.64412031e-01 1.64392704e-01 1.64373334e-01 1.64353919e-01 1.64334460e-01 + 1.64314958e-01 1.64295411e-01 1.64275819e-01 1.64256183e-01 1.64236503e-01 + 1.64216777e-01 1.64197007e-01 1.64177192e-01 1.64157331e-01 1.64137425e-01 + 1.64117474e-01 1.64097477e-01 1.64077435e-01 1.64057346e-01 1.64037212e-01 + 1.64017032e-01 1.63996805e-01 1.63976532e-01 1.63956212e-01 1.63935846e-01 + 1.63915433e-01 1.63894973e-01 1.63874465e-01 1.63853911e-01 1.63833309e-01 + 1.63812660e-01 1.63791963e-01 1.63771218e-01 1.63750426e-01 1.63729585e-01 + 1.63708696e-01 1.63687759e-01 1.63666773e-01 1.63645738e-01 1.63624655e-01 + 1.63603523e-01 1.63582341e-01 1.63561111e-01 1.63539831e-01 1.63518501e-01 + 1.63497122e-01 1.63475693e-01 1.63454214e-01 1.63432685e-01 1.63411106e-01 + 1.63389476e-01 1.63367795e-01 1.63346064e-01 1.63324282e-01 1.63302449e-01 + 1.63280565e-01 1.63258629e-01 1.63236642e-01 1.63214603e-01 1.63192512e-01 + 1.63170369e-01 1.63148174e-01 1.63125927e-01 1.63103628e-01 1.63081275e-01 + 1.63058870e-01 1.63036412e-01 1.63013901e-01 1.62991337e-01 1.62968719e-01 + 1.62946048e-01 1.62923323e-01 1.62900544e-01 1.62877710e-01 1.62854823e-01 + 1.62831881e-01 1.62808885e-01 1.62785834e-01 1.62762728e-01 1.62739567e-01 + 1.62716350e-01 1.62693078e-01 1.62669751e-01 1.62646368e-01 1.62622929e-01 + 1.62599433e-01 1.62575882e-01 1.62552274e-01 1.62528609e-01 1.62504888e-01 + 1.62481109e-01 1.62457274e-01 1.62433381e-01 1.62409431e-01 1.62385423e-01 + 1.62361357e-01 1.62337233e-01 1.62313050e-01 1.62288810e-01 1.62264510e-01 + 1.62240152e-01 1.62215735e-01 1.62191259e-01 1.62166724e-01 1.62142129e-01 + 1.62117474e-01 1.62092759e-01 1.62067985e-01 1.62043150e-01 1.62018255e-01 + 1.61993299e-01 1.61968282e-01 1.61943204e-01 1.61918065e-01 1.61892865e-01 + 1.61867603e-01 1.61842279e-01 1.61816893e-01 1.61791445e-01 1.61765935e-01 + 1.61740362e-01 1.61714726e-01 1.61689028e-01 1.61663266e-01 1.61637441e-01 + 1.61611552e-01 1.61585600e-01 1.61559583e-01 1.61533503e-01 1.61507358e-01 + 1.61481148e-01 1.61454874e-01 1.61428535e-01 1.61402130e-01 1.61375660e-01 + 1.61349125e-01 1.61322523e-01 1.61295856e-01 1.61269123e-01 1.61242323e-01 + 1.61215456e-01 1.61188522e-01 1.61161522e-01 1.61134454e-01 1.61107319e-01 + 1.61080115e-01 1.61052844e-01 1.61025505e-01 1.60998098e-01 1.60970621e-01 + 1.60943076e-01 1.60915462e-01 1.60887779e-01 1.60860026e-01 1.60832204e-01 + 1.60804311e-01 1.60776349e-01 1.60748316e-01 1.60720212e-01 1.60692038e-01 + 1.60663792e-01 1.60635475e-01 1.60607087e-01 1.60578627e-01 1.60550095e-01 + 1.60521491e-01 1.60492814e-01 1.60464065e-01 1.60435242e-01 1.60406347e-01 + 1.60377378e-01 1.60348335e-01 1.60319219e-01 1.60290028e-01 1.60260764e-01 + 1.60231424e-01 1.60202010e-01 1.60172520e-01 1.60142955e-01 1.60113315e-01 + 1.60083599e-01 1.60053807e-01 1.60023938e-01 1.59993993e-01 1.59963971e-01 + 1.59933872e-01 1.59903696e-01 1.59873442e-01 1.59843110e-01 1.59812700e-01 + 1.59782212e-01 1.59751645e-01 1.59720999e-01 1.59690274e-01 1.59659470e-01 + 1.59628586e-01 1.59597622e-01 1.59566578e-01 1.59535454e-01 1.59504249e-01 + 1.59472963e-01 1.59441595e-01 1.59410146e-01 1.59378616e-01 1.59347003e-01 + 1.59315308e-01 1.59283531e-01 1.59251670e-01 1.59219726e-01 1.59187699e-01 + 1.59155589e-01 1.59123394e-01 1.59091115e-01 1.59058751e-01 1.59026303e-01 + 1.58993770e-01 1.58961151e-01 1.58928446e-01 1.58895656e-01 1.58862779e-01 + 1.58829816e-01 1.58796766e-01 1.58763628e-01 1.58730404e-01 1.58697092e-01 + 1.58663691e-01 1.58630203e-01 1.58596625e-01 1.58562959e-01 1.58529204e-01 + 1.58495359e-01 1.58461425e-01 1.58427400e-01 1.58393285e-01 1.58359079e-01 + 1.58324782e-01 1.58290394e-01 1.58255915e-01 1.58221343e-01 1.58186679e-01 + 1.58151923e-01 1.58117073e-01 1.58082131e-01 1.58047095e-01 1.58011965e-01 + 1.57976741e-01 1.57941422e-01 1.57906009e-01 1.57870501e-01 1.57834897e-01 + 1.57799197e-01 1.57763402e-01 1.57727510e-01 1.57691521e-01 1.57655435e-01 + 1.57619252e-01 1.57582971e-01 1.57546592e-01 1.57510115e-01 1.57473538e-01 + 1.57436863e-01 1.57400088e-01 1.57363214e-01 1.57326239e-01 1.57289164e-01 + 1.57251989e-01 1.57214712e-01 1.57177333e-01 1.57139853e-01 1.57102271e-01 + 1.57064586e-01 1.57026798e-01 1.56988907e-01 1.56950912e-01 1.56912813e-01 + 1.56874610e-01 1.56836302e-01 1.56797890e-01 1.56759371e-01 1.56720748e-01 + 1.56682017e-01 1.56643181e-01 1.56604237e-01 1.56565187e-01 1.56526028e-01 + 1.56486762e-01 1.56447387e-01 1.56407903e-01 1.56368311e-01 1.56328609e-01 + 1.56288796e-01 1.56248874e-01 1.56208841e-01 1.56168697e-01 1.56128441e-01 + 1.56088074e-01 1.56047594e-01 1.56007002e-01 1.55966297e-01 1.55925478e-01 + 1.55884546e-01 1.55843499e-01 1.55802338e-01 1.55761062e-01 1.55719670e-01 + 1.55678163e-01 1.55636539e-01 1.55594799e-01 1.55552941e-01 1.55510966e-01 + 1.55468873e-01 1.55426662e-01 1.55384333e-01 1.55341884e-01 1.55299315e-01 + 1.55256627e-01 1.55213818e-01 1.55170888e-01 1.55127838e-01 1.55084665e-01 + 1.55041370e-01 1.54997953e-01 1.54954413e-01 1.54910749e-01 1.54866961e-01 + 1.54823050e-01 1.54779013e-01 1.54734851e-01 1.54690564e-01 1.54646150e-01 + 1.54601610e-01 1.54556943e-01 1.54512149e-01 1.54467226e-01 1.54422176e-01 + 1.54376996e-01 1.54331687e-01 1.54286249e-01 1.54240680e-01 1.54194981e-01 + 1.54149150e-01 1.54103188e-01 1.54057094e-01 1.54010867e-01 1.53964507e-01 + 1.53918014e-01 1.53871386e-01 1.53824625e-01 1.53777728e-01 1.53730696e-01 + 1.53683527e-01 1.53636223e-01 1.53588781e-01 1.53541202e-01 1.53493486e-01 + 1.53445630e-01 1.53397636e-01 1.53349503e-01 1.53301229e-01 1.53252815e-01 + 1.53204260e-01 1.53155564e-01 1.53106726e-01 1.53057745e-01 1.53008621e-01 + 1.52959354e-01 1.52909943e-01 1.52860387e-01 1.52810686e-01 1.52760840e-01 + 1.52710847e-01 1.52660708e-01 1.52610421e-01 1.52559987e-01 1.52509404e-01 + 1.52458673e-01 1.52407792e-01 1.52356762e-01 1.52305580e-01 1.52254248e-01 + 1.52202764e-01 1.52151129e-01 1.52099340e-01 1.52047398e-01 1.51995302e-01 + 1.51943052e-01 1.51890647e-01 1.51838087e-01 1.51785370e-01 1.51732497e-01 + 1.51679467e-01 1.51626279e-01 1.51572932e-01 1.51519426e-01 1.51465761e-01 + 1.51411936e-01 1.51357950e-01 1.51303802e-01 1.51249493e-01 1.51195021e-01 + 1.51140386e-01 1.51085587e-01 1.51030624e-01 1.50975496e-01 1.50920202e-01 + 1.50864742e-01 1.50809116e-01 1.50753322e-01 1.50697360e-01 1.50641229e-01 + 1.50584929e-01 1.50528459e-01 1.50471818e-01 1.50415007e-01 1.50358023e-01 + 1.50300867e-01 1.50243538e-01 1.50186035e-01 1.50128358e-01 1.50070506e-01 + 1.50012478e-01 1.49954274e-01 1.49895893e-01 1.49837334e-01 1.49778596e-01 + 1.49719680e-01 1.49660584e-01 1.49601308e-01 1.49541850e-01 1.49482211e-01 + 1.49422390e-01 1.49362385e-01 1.49302197e-01 1.49241824e-01 1.49181266e-01 + 1.49120523e-01 1.49059593e-01 1.48998475e-01 1.48937170e-01 1.48875676e-01 + 1.48813992e-01 1.48752119e-01 1.48690055e-01 1.48627799e-01 1.48565351e-01 + 1.48502710e-01 1.48439876e-01 1.48376847e-01 1.48313623e-01 1.48250203e-01 + 1.48186586e-01 1.48122773e-01 1.48058761e-01 1.47994550e-01 1.47930139e-01 + 1.47865528e-01 1.47800717e-01 1.47735703e-01 1.47670486e-01 1.47605066e-01 + 1.47539442e-01 1.47473613e-01 1.47407579e-01 1.47341337e-01 1.47274889e-01 + 1.47208232e-01 1.47141367e-01 1.47074292e-01 1.47007006e-01 1.46939509e-01 + 1.46871800e-01 1.46803878e-01 1.46735743e-01 1.46667393e-01 1.46598827e-01 + 1.46530046e-01 1.46461047e-01 1.46391831e-01 1.46322396e-01 1.46252742e-01 + 1.46182867e-01 1.46112772e-01 1.46042454e-01 1.45971913e-01 1.45901149e-01 + 1.45830160e-01 1.45758946e-01 1.45687506e-01 1.45615839e-01 1.45543943e-01 + 1.45471819e-01 1.45399465e-01 1.45326880e-01 1.45254064e-01 1.45181016e-01 + 1.45107734e-01 1.45034218e-01 1.44960467e-01 1.44886480e-01 1.44812256e-01 + 1.44737795e-01 1.44663094e-01 1.44588154e-01 1.44512974e-01 1.44437552e-01 + 1.44361888e-01 1.44285981e-01 1.44209829e-01 1.44133432e-01 1.44056789e-01 + 1.43979899e-01 1.43902761e-01 1.43825374e-01 1.43747737e-01 1.43669849e-01 + 1.43591710e-01 1.43513317e-01 1.43434671e-01 1.43355770e-01 1.43276613e-01 + 1.43197200e-01 1.43117528e-01 1.43037599e-01 1.42957409e-01 1.42876959e-01 + 1.42796247e-01 1.42715272e-01 1.42634034e-01 1.42552530e-01 1.42470761e-01 + 1.42388726e-01 1.42306422e-01 1.42223850e-01 1.42141007e-01 1.42057894e-01 + 1.41974509e-01 1.41890851e-01 1.41806919e-01 1.41722711e-01 1.41638228e-01 + 1.41553467e-01 1.41468428e-01 1.41383109e-01 1.41297511e-01 1.41211630e-01 + 1.41125467e-01 1.41039020e-01 1.40952288e-01 1.40865271e-01 1.40777966e-01 + 1.40690373e-01 1.40602491e-01 1.40514319e-01 1.40425855e-01 1.40337099e-01 + 1.40248048e-01 1.40158703e-01 1.40069062e-01 1.39979124e-01 1.39888888e-01 + 1.39798352e-01 1.39707515e-01 1.39616377e-01 1.39524936e-01 1.39433191e-01 + 1.39341140e-01 1.39248784e-01 1.39156119e-01 1.39063146e-01 1.38969862e-01 + 1.38876268e-01 1.38782361e-01 1.38688141e-01 1.38593606e-01 1.38498755e-01 + 1.38403586e-01 1.38308099e-01 1.38212293e-01 1.38116166e-01 1.38019716e-01 + 1.37922943e-01 1.37825846e-01 1.37728423e-01 1.37630672e-01 1.37532594e-01 + 1.37434185e-01 1.37335446e-01 1.37236375e-01 1.37136970e-01 1.37037230e-01 + 1.36937155e-01 1.36836742e-01 1.36735991e-01 1.36634900e-01 1.36533467e-01 + 1.36431692e-01 1.36329574e-01 1.36227110e-01 1.36124300e-01 1.36021142e-01 + 1.35917635e-01 1.35813778e-01 1.35709568e-01 1.35605006e-01 1.35500089e-01 + 1.35394817e-01 1.35289187e-01 1.35183199e-01 1.35076851e-01 1.34970142e-01 + 1.34863070e-01 1.34755634e-01 1.34647833e-01 1.34539665e-01 1.34431128e-01 + 1.34322223e-01 1.34212946e-01 1.34103297e-01 1.33993274e-01 1.33882876e-01 + 1.33772101e-01 1.33660948e-01 1.33549416e-01 1.33437503e-01 1.33325207e-01 + 1.33212528e-01 1.33099463e-01 1.32986012e-01 1.32872172e-01 1.32757943e-01 + 1.32643323e-01 1.32528310e-01 1.32412904e-01 1.32297101e-01 1.32180902e-01 + 1.32064305e-01 1.31947307e-01 1.31829908e-01 1.31712106e-01 1.31593899e-01 + 1.31475287e-01 1.31356267e-01 1.31236838e-01 1.31116998e-01 1.30996746e-01 + 1.30876081e-01 1.30755001e-01 1.30633504e-01 1.30511588e-01 1.30389253e-01 + 1.30266497e-01 1.30143318e-01 1.30019714e-01 1.29895684e-01 1.29771227e-01 + 1.29646341e-01 1.29521024e-01 1.29395274e-01 1.29269091e-01 1.29142472e-01 + 1.29015417e-01 1.28887922e-01 1.28759987e-01 1.28631611e-01 1.28502791e-01 + 1.28373525e-01 1.28243813e-01 1.28113653e-01 1.27983043e-01 1.27851981e-01 + 1.27720466e-01 1.27588496e-01 1.27456070e-01 1.27323186e-01 1.27189841e-01 + 1.27056036e-01 1.26921767e-01 1.26787033e-01 1.26651833e-01 1.26516166e-01 + 1.26380028e-01 1.26243419e-01 1.26106337e-01 1.25968780e-01 1.25830747e-01 + 1.25692235e-01 1.25553244e-01 1.25413771e-01 1.25273815e-01 1.25133375e-01 + 1.24992448e-01 1.24851032e-01 1.24709127e-01 1.24566730e-01 1.24423839e-01 + 1.24280454e-01 1.24136571e-01 1.23992190e-01 1.23847309e-01 1.23701926e-01 + 1.23556040e-01 1.23409647e-01 1.23262748e-01 1.23115340e-01 1.22967422e-01 + 1.22818991e-01 1.22670046e-01 1.22520585e-01 1.22370607e-01 1.22220110e-01 + 1.22069091e-01 1.21917550e-01 1.21765484e-01 1.21612892e-01 1.21459773e-01 + 1.21306123e-01 1.21151942e-01 1.20997228e-01 1.20841979e-01 1.20686193e-01 + 1.20529869e-01 1.20373004e-01 1.20215598e-01 1.20057648e-01 1.19899152e-01 + 1.19740109e-01 1.19580518e-01 1.19420375e-01 1.19259680e-01 1.19098431e-01 + 1.18936626e-01 1.18774263e-01 1.18611341e-01 1.18447857e-01 1.18283810e-01 + 1.18119199e-01 1.17954021e-01 1.17788276e-01 1.17621960e-01 1.17455072e-01 + 1.17287611e-01 1.17119575e-01 1.16950961e-01 1.16781770e-01 1.16611997e-01 + 1.16441643e-01 1.16270705e-01 1.16099181e-01 1.15927070e-01 1.15754370e-01 + 1.15581079e-01 1.15407195e-01 1.15232718e-01 1.15057644e-01 1.14881973e-01 + 1.14705703e-01 1.14528831e-01 1.14351357e-01 1.14173279e-01 1.13994594e-01 + 1.13815302e-01 1.13635400e-01 1.13454887e-01 1.13273762e-01 1.13092022e-01 + 1.12909666e-01 1.12726692e-01 1.12543099e-01 1.12358884e-01 1.12174047e-01 + 1.11988586e-01 1.11802499e-01 1.11615785e-01 1.11428441e-01 1.11240467e-01 + 1.11051860e-01 1.10862619e-01 1.10672743e-01 1.10482230e-01 1.10291079e-01 + 1.10099287e-01 1.09906853e-01 1.09713777e-01 1.09520055e-01 1.09325688e-01 + 1.09130672e-01 1.08935008e-01 1.08738692e-01 1.08541725e-01 1.08344104e-01 + 1.08145827e-01 1.07946894e-01 1.07747304e-01 1.07547053e-01 1.07346142e-01 + 1.07144569e-01 1.06942333e-01 1.06739431e-01 1.06535863e-01 1.06331627e-01 + 1.06126723e-01 1.05921148e-01 1.05714902e-01 1.05507982e-01 1.05300389e-01 + 1.05092120e-01 1.04883175e-01 1.04673552e-01 1.04463250e-01 1.04252268e-01 + 1.04040604e-01 1.03828258e-01 1.03615228e-01 1.03401513e-01 1.03187113e-01 + 1.02972026e-01 1.02756250e-01 1.02539786e-01 1.02322631e-01 1.02104785e-01 + 1.01886248e-01 1.01667017e-01 1.01447092e-01 1.01226473e-01 1.01005158e-01 + 1.00783146e-01 1.00560436e-01 1.00337028e-01 1.00112922e-01 9.98881150e-02 + 9.96626076e-02 9.94363989e-02 9.92094881e-02 9.89818746e-02 9.87535577e-02 + 9.85245367e-02 9.82948112e-02 9.80643804e-02 9.78332440e-02 9.76014013e-02 + 9.73688518e-02 9.71355952e-02 9.69016310e-02 9.66669588e-02 9.64315783e-02 + 9.61954891e-02 9.59586908e-02 9.57211834e-02 9.54829664e-02 9.52440398e-02 + 9.50044033e-02 9.47640568e-02 9.45230003e-02 9.42812335e-02 9.40387567e-02 + 9.37955696e-02 9.35516725e-02 9.33070653e-02 9.30617482e-02 9.28157214e-02 + 9.25689850e-02 9.23215393e-02 9.20733846e-02 9.18245212e-02 9.15749495e-02 + 9.13246699e-02 9.10736827e-02 9.08219886e-02 9.05695880e-02 9.03164816e-02 + 9.00626699e-02 8.98081536e-02 8.95529334e-02 8.92970102e-02 8.90403847e-02 + 8.87830577e-02 8.85250303e-02 8.82663032e-02 8.80068776e-02 8.77467546e-02 + 8.74859351e-02 8.72244204e-02 8.69622117e-02 8.66993103e-02 8.64357174e-02 + 8.61714345e-02 8.59064630e-02 8.56408044e-02 8.53744602e-02 8.51074320e-02 + 8.48397215e-02 8.45713304e-02 8.43022605e-02 8.40325136e-02 8.37620916e-02 + 8.34909965e-02 8.32192302e-02 8.29467950e-02 8.26736929e-02 8.23999262e-02 + 8.21254970e-02 8.18504079e-02 8.15746611e-02 8.12982592e-02 8.10212047e-02 + 8.07435002e-02 8.04651484e-02 8.01861521e-02 7.99065141e-02 7.96262372e-02 + 7.93453246e-02 7.90637791e-02 7.87816039e-02 7.84988023e-02 7.82153774e-02 + 7.79313327e-02 7.76466715e-02 7.73613974e-02 7.70755139e-02 7.67890246e-02 + 7.65019334e-02 7.62142440e-02 7.59259604e-02 7.56370865e-02 7.53476263e-02 + 7.50575841e-02 7.47669641e-02 7.44757706e-02 7.41840079e-02 7.38916807e-02 + 7.35987934e-02 7.33053507e-02 7.30113575e-02 7.27168185e-02 7.24217387e-02 + 7.21261231e-02 7.18299768e-02 7.15333051e-02 7.12361133e-02 7.09384067e-02 + 7.06401909e-02 7.03414715e-02 7.00422541e-02 6.97425446e-02 6.94423488e-02 + 6.91416728e-02 6.88405225e-02 6.85389043e-02 6.82368244e-02 6.79342891e-02 + 6.76313050e-02 6.73278787e-02 6.70240169e-02 6.67197264e-02 6.64150140e-02 + 6.61098869e-02 6.58043520e-02 6.54984168e-02 6.51920884e-02 6.48853744e-02 + 6.45782823e-02 6.42708198e-02 6.39629946e-02 6.36548146e-02 6.33462879e-02 + 6.30374225e-02 6.27282267e-02 6.24187088e-02 6.21088773e-02 6.17987406e-02 + 6.14883076e-02 6.11775870e-02 6.08665877e-02 6.05553188e-02 6.02437893e-02 + 5.99320086e-02 5.96199860e-02 5.93077311e-02 5.89952534e-02 5.86825627e-02 + 5.83696689e-02 5.80565818e-02 5.77433118e-02 5.74298688e-02 5.71162634e-02 + 5.68025058e-02 5.64886069e-02 5.61745771e-02 5.58604274e-02 5.55461687e-02 + 5.52318121e-02 5.49173687e-02 5.46028499e-02 5.42882672e-02 5.39736321e-02 + 5.36589562e-02 5.33442514e-02 5.30295296e-02 5.27148029e-02 5.24000835e-02 + 5.20853836e-02 5.17707158e-02 5.14560924e-02 5.11415263e-02 5.08270302e-02 + 5.05126170e-02 5.01982998e-02 4.98840918e-02 4.95700061e-02 4.92560564e-02 + 4.89422560e-02 4.86286186e-02 4.83151580e-02 4.80018882e-02 4.76888231e-02 + 4.73759769e-02 4.70633638e-02 4.67509982e-02 4.64388946e-02 4.61270676e-02 + 4.58155320e-02 4.55043026e-02 4.51933944e-02 4.48828225e-02 4.45726020e-02 + 4.42627483e-02 4.39532767e-02 4.36442030e-02 4.33355426e-02 4.30273114e-02 + 4.27195253e-02 4.24122002e-02 4.21053521e-02 4.17989974e-02 4.14931524e-02 + 4.11878333e-02 4.08830568e-02 4.05788395e-02 4.02751981e-02 3.99721494e-02 + 3.96697104e-02 3.93678979e-02 3.90667293e-02 3.87662217e-02 3.84663923e-02 + 3.81672586e-02 3.78688381e-02 3.75711484e-02 3.72742070e-02 3.69780319e-02 + 3.66826407e-02 3.63880515e-02 3.60942822e-02 3.58013509e-02 3.55092758e-02 + 3.52180750e-02 3.49277670e-02 3.46383700e-02 3.43499026e-02 3.40623832e-02 + 3.37758304e-02 3.34902629e-02 3.32056994e-02 3.29221586e-02 3.26396593e-02 + 3.23582205e-02 3.20778611e-02 3.17986000e-02 3.15204562e-02 3.12434489e-02 + 3.09675972e-02 3.06929202e-02 3.04194370e-02 3.01471670e-02 2.98761294e-02 + 2.96063435e-02 2.93378286e-02 2.90706040e-02 2.88046891e-02 2.85401033e-02 + 2.82768660e-02 2.80149966e-02 2.77545145e-02 2.74954392e-02 2.72377901e-02 + 2.69815866e-02 2.67268481e-02 2.64735941e-02 2.62218441e-02 2.59716174e-02 + 2.57229334e-02 2.54758115e-02 2.52302711e-02 2.49863315e-02 2.47440120e-02 + 2.45033320e-02 2.42643105e-02 2.40269669e-02 2.37913204e-02 2.35573900e-02 + 2.33251949e-02 2.30947540e-02 2.28660864e-02 2.26392110e-02 2.24141466e-02 + 2.21909120e-02 2.19695260e-02 2.17500072e-02 2.15323742e-02 2.13166455e-02 + 2.11028396e-02 2.08909747e-02 2.06810691e-02 2.04731411e-02 2.02672086e-02 + 2.00632896e-02 1.98614019e-02 1.96615634e-02 1.94637917e-02 1.92681043e-02 + 1.90745186e-02 1.88830519e-02 1.86937213e-02 1.85065440e-02 1.83215368e-02 + 1.81387165e-02 1.79580998e-02 1.77797030e-02 1.76035426e-02 1.74296348e-02 + 1.72579956e-02 1.70886409e-02 1.69215864e-02 1.67568478e-02 1.65944402e-02 + 1.64343791e-02 1.62766795e-02 1.61213562e-02 1.59684240e-02 1.58178973e-02 + 1.56697904e-02 1.55241176e-02 1.53808927e-02 1.52401295e-02 1.51018416e-02 + 1.49660422e-02 1.48327446e-02 1.47019616e-02 1.45737059e-02 1.44479901e-02 + 1.43248264e-02 1.42042269e-02 1.40862035e-02 1.39707676e-02 1.38579308e-02 + 1.37477041e-02 1.36400985e-02 1.35351246e-02 1.34327929e-02 1.33331135e-02 + 1.32360964e-02 1.31417514e-02 1.30500877e-02 1.29611147e-02 1.28748412e-02 + 1.27912760e-02 1.27104274e-02 1.26323037e-02 1.25569127e-02 1.24842620e-02 + 1.24143590e-02 1.23472109e-02 1.22828243e-02 1.22212060e-02 1.21623621e-02 + 1.21062986e-02 1.20530213e-02 1.20025356e-02 1.19548467e-02 1.19099595e-02 + 1.18678785e-02 1.18286081e-02 1.17921522e-02 1.17585148e-02 1.17276991e-02 + 1.16997084e-02 1.16745455e-02 1.16522130e-02 1.16327133e-02 1.16160484e-02 + 1.16022198e-02 1.15912292e-02 1.15830776e-02 1.15777658e-02 1.15752944e-02 + 1.15756637e-02 1.15788736e-02 1.15849238e-02 1.15938137e-02 1.16055423e-02 + 1.16201084e-02 1.16375106e-02 1.16577471e-02 1.16808156e-02 1.17067140e-02 + 1.17354395e-02 1.17669892e-02 1.18013598e-02 1.18385478e-02 1.18785493e-02 + 1.19213604e-02 1.19669765e-02 1.20153931e-02 1.20666051e-02 1.21206073e-02 + 1.21773942e-02 1.22369601e-02 1.22992988e-02 1.23644040e-02 1.24322691e-02 + 1.25028871e-02 1.25762510e-02 1.26523533e-02 1.27311863e-02 1.28127420e-02 + 1.28970121e-02 1.29839883e-02 1.30736618e-02 1.31660235e-02 1.32610642e-02 + 1.33587744e-02 1.34591444e-02 1.35621641e-02 1.36678232e-02 1.37761113e-02 + 1.38870177e-02 1.40005314e-02 1.41166411e-02 1.42353355e-02 1.43566028e-02 + 1.44804312e-02 1.46068085e-02 1.47357225e-02 1.48671606e-02 1.50011099e-02 + 1.51375576e-02 1.52764904e-02 1.54178949e-02 1.55617576e-02 1.57080646e-02 + 1.58568020e-02 1.60079555e-02 1.61615108e-02 1.63174534e-02 1.64757685e-02 + 1.66364411e-02 1.67994562e-02 1.69647985e-02 1.71324525e-02 1.73024027e-02 + 1.74746333e-02 1.76491283e-02 1.78258717e-02 1.80048472e-02 1.81860385e-02 + 1.83694290e-02 1.85550020e-02 1.87427408e-02 1.89326284e-02 1.91246477e-02 + 1.93187815e-02 1.95150125e-02 1.97133233e-02 1.99136963e-02 2.01161138e-02 + 2.03205580e-02 2.05270111e-02 2.07354551e-02 2.09458718e-02 2.11582431e-02 + 2.13725507e-02 2.15887763e-02 2.18069014e-02 2.20269075e-02 2.22487759e-02 + 2.24724880e-02 2.26980251e-02 2.29253683e-02 2.31544988e-02 2.33853976e-02 + 2.36180458e-02 2.38524242e-02 2.40885138e-02 2.43262955e-02 2.45657500e-02 + 2.48068582e-02 2.50496007e-02 2.52939584e-02 2.55399119e-02 2.57874418e-02 + 2.60365287e-02 2.62871534e-02 2.65392963e-02 2.67929381e-02 2.70480593e-02 + 2.73046406e-02 2.75626624e-02 2.78221053e-02 2.80829500e-02 2.83451769e-02 + 2.86087667e-02 2.88736999e-02 2.91399572e-02 2.94075191e-02 2.96763664e-02 + 2.99464796e-02 3.02178395e-02 3.04904267e-02 3.07642221e-02 3.10392064e-02 + 3.13153605e-02 3.15926651e-02 3.18711011e-02 3.21506496e-02 3.24312916e-02 + 3.27130079e-02 3.29957798e-02 3.32795883e-02 3.35644146e-02 3.38502401e-02 + 3.41370460e-02 3.44248137e-02 3.47135246e-02 3.50031602e-02 3.52937021e-02 + 3.55851319e-02 3.58774314e-02 3.61705823e-02 3.64645665e-02 3.67593660e-02 + 3.70549627e-02 3.73513388e-02 3.76484764e-02 3.79463579e-02 3.82449655e-02 + 3.85442817e-02 3.88442891e-02 3.91449703e-02 3.94463079e-02 3.97482849e-02 + 4.00508841e-02 4.03540886e-02 4.06578813e-02 4.09622456e-02 4.12671648e-02 + 4.15726221e-02 4.18786013e-02 4.21850858e-02 4.24920594e-02 4.27995060e-02 + 4.31074094e-02 4.34157537e-02 4.37245230e-02 4.40337017e-02 4.43432741e-02 + 4.46532246e-02 4.49635380e-02 4.52741988e-02 4.55851920e-02 4.58965024e-02 + 4.62081152e-02 4.65200155e-02 4.68321886e-02 4.71446199e-02 4.74572950e-02 + 4.77701996e-02 4.80833192e-02 4.83966400e-02 4.87101479e-02 4.90238289e-02 + 4.93376695e-02 4.96516559e-02 4.99657746e-02 5.02800123e-02 5.05943557e-02 + 5.09087917e-02 5.12233073e-02 5.15378895e-02 5.18525256e-02 5.21672030e-02 + 5.24819092e-02 5.27966317e-02 5.31113583e-02 5.34260768e-02 5.37407752e-02 + 5.40554416e-02 5.43700642e-02 5.46846314e-02 5.49991317e-02 5.53135536e-02 + 5.56278858e-02 5.59421172e-02 5.62562368e-02 5.65702336e-02 5.68840968e-02 + 5.71978158e-02 5.75113800e-02 5.78247790e-02 5.81380025e-02 5.84510402e-02 + 5.87638822e-02 5.90765185e-02 5.93889392e-02 5.97011346e-02 6.00130952e-02 + 6.03248115e-02 6.06362741e-02 6.09474738e-02 6.12584015e-02 6.15690482e-02 + 6.18794050e-02 6.21894631e-02 6.24992140e-02 6.28086489e-02 6.31177596e-02 + 6.34265377e-02 6.37349751e-02 6.40430636e-02 6.43507952e-02 6.46581622e-02 + 6.49651567e-02 6.52717712e-02 6.55779981e-02 6.58838299e-02 6.61892594e-02 + 6.64942794e-02 6.67988828e-02 6.71030625e-02 6.74068117e-02 6.77101237e-02 + 6.80129917e-02 6.83154092e-02 6.86173697e-02 6.89188669e-02 6.92198944e-02 + 6.95204462e-02 6.98205161e-02 7.01200982e-02 7.04191867e-02 7.07177757e-02 + 7.10158596e-02 7.13134329e-02 7.16104900e-02 7.19070256e-02 7.22030344e-02 + 7.24985112e-02 7.27934509e-02 7.30878484e-02 7.33816990e-02 7.36749977e-02 + 7.39677398e-02 7.42599207e-02 7.45515358e-02 7.48425807e-02 7.51330509e-02 + 7.54229421e-02 7.57122502e-02 7.60009711e-02 7.62891006e-02 7.65766348e-02 + 7.68635699e-02 7.71499020e-02 7.74356274e-02 7.77207425e-02 7.80052438e-02 + 7.82891277e-02 7.85723908e-02 7.88550299e-02 7.91370416e-02 7.94184229e-02 + 7.96991705e-02 7.99792815e-02 8.02587530e-02 8.05375820e-02 8.08157657e-02 + 8.10933015e-02 8.13701866e-02 8.16464184e-02 8.19219944e-02 8.21969122e-02 + 8.24711693e-02 8.27447635e-02 8.30176924e-02 8.32899539e-02 8.35615458e-02 + 8.38324661e-02 8.41027128e-02 8.43722839e-02 8.46411775e-02 8.49093918e-02 + 8.51769250e-02 8.54437756e-02 8.57099417e-02 8.59754218e-02 8.62402144e-02 + 8.65043180e-02 8.67677312e-02 8.70304527e-02 8.72924810e-02 8.75538151e-02 + 8.78144536e-02 8.80743954e-02 8.83336395e-02 8.85921847e-02 8.88500302e-02 + 8.91071748e-02 8.93636178e-02 8.96193583e-02 8.98743956e-02 9.01287287e-02 + 9.03823571e-02 9.06352801e-02 9.08874971e-02 9.11390074e-02 9.13898107e-02 + 9.16399063e-02 9.18892939e-02 9.21379731e-02 9.23859434e-02 9.26332047e-02 + 9.28797566e-02 9.31255989e-02 9.33707315e-02 9.36151540e-02 9.38588666e-02 + 9.41018690e-02 9.43441612e-02 9.45857433e-02 9.48266152e-02 9.50667771e-02 + 9.53062290e-02 9.55449711e-02 9.57830036e-02 9.60203266e-02 9.62569405e-02 + 9.64928454e-02 9.67280417e-02 9.69625298e-02 9.71963100e-02 9.74293827e-02 + 9.76617483e-02 9.78934074e-02 9.81243603e-02 9.83546076e-02 9.85841499e-02 + 9.88129878e-02 9.90411218e-02 9.92685525e-02 9.94952807e-02 9.97213070e-02 + 9.99466321e-02 1.00171257e-01 1.00395182e-01 1.00618408e-01 1.00840936e-01 + 1.01062766e-01 1.01283901e-01 1.01504340e-01 1.01724084e-01 1.01943134e-01 + 1.02161492e-01 1.02379158e-01 1.02596133e-01 1.02812418e-01 1.03028014e-01 + 1.03242923e-01 1.03457145e-01 1.03670682e-01 1.03883534e-01 1.04095702e-01 + 1.04307189e-01 1.04517994e-01 1.04728119e-01 1.04937566e-01 1.05146335e-01 + 1.05354428e-01 1.05561846e-01 1.05768590e-01 1.05974662e-01 1.06180062e-01 + 1.06384793e-01 1.06588855e-01 1.06792249e-01 1.06994978e-01 1.07197042e-01 + 1.07398443e-01 1.07599182e-01 1.07799261e-01 1.07998680e-01 1.08197442e-01 + 1.08395548e-01 1.08592999e-01 1.08789797e-01 1.08985943e-01 1.09181439e-01 + 1.09376286e-01 1.09570485e-01 1.09764039e-01 1.09956948e-01 1.10149214e-01 + 1.10340840e-01 1.10531825e-01 1.10722172e-01 1.10911883e-01 1.11100959e-01 + 1.11289401e-01 1.11477211e-01 1.11664391e-01 1.11850942e-01 1.12036866e-01 + 1.12222165e-01 1.12406840e-01 1.12590892e-01 1.12774325e-01 1.12957138e-01 + 1.13139333e-01 1.13320913e-01 1.13501880e-01 1.13682233e-01 1.13861976e-01 + 1.14041111e-01 1.14219637e-01 1.14397559e-01 1.14574876e-01 1.14751591e-01 + 1.14927705e-01 1.15103221e-01 1.15278139e-01 1.15452462e-01 1.15626191e-01 + 1.15799328e-01 1.15971875e-01 1.16143834e-01 1.16315205e-01 1.16485991e-01 + 1.16656194e-01 1.16825815e-01 1.16994856e-01 1.17163320e-01 1.17331206e-01 + 1.17498518e-01 1.17665257e-01 1.17831424e-01 1.17997022e-01 1.18162053e-01 + 1.18326517e-01 1.18490417e-01 1.18653754e-01 1.18816531e-01 1.18978749e-01 + 1.19140409e-01 1.19301514e-01 1.19462065e-01 1.19622064e-01 1.19781513e-01 + 1.19940414e-01 1.20098767e-01 1.20256576e-01 1.20413841e-01 1.20570565e-01 + 1.20726749e-01 1.20882395e-01 1.21037505e-01 1.21192080e-01 1.21346123e-01 + 1.21499635e-01 1.21652617e-01 1.21805072e-01 1.21957001e-01 1.22108406e-01 + 1.22259289e-01 1.22409651e-01 1.22559495e-01 1.22708821e-01 1.22857632e-01 + 1.23005930e-01 1.23153715e-01 1.23300991e-01 1.23447758e-01 1.23594019e-01 + 1.23739774e-01 1.23885027e-01 1.24029777e-01 1.24174028e-01 1.24317781e-01 + 1.24461038e-01 1.24603800e-01 1.24746069e-01 1.24887847e-01 1.25029136e-01 + 1.25169936e-01 1.25310251e-01 1.25450081e-01 1.25589428e-01 1.25728294e-01 + 1.25866681e-01 1.26004590e-01 1.26142024e-01 1.26278983e-01 1.26415469e-01 + 1.26551484e-01 1.26687030e-01 1.26822109e-01 1.26956721e-01 1.27090870e-01 + 1.27224555e-01 1.27357780e-01 1.27490545e-01 1.27622852e-01 1.27754704e-01 + 1.27886101e-01 1.28017045e-01 1.28147538e-01 1.28277582e-01 1.28407177e-01 + 1.28536327e-01 1.28665031e-01 1.28793293e-01 1.28921113e-01 1.29048493e-01 + 1.29175435e-01 1.29301941e-01 1.29428011e-01 1.29553648e-01 1.29678853e-01 + 1.29803627e-01 1.29927973e-01 1.30051892e-01 1.30175385e-01 1.30298454e-01 + 1.30421101e-01 1.30543327e-01 1.30665133e-01 1.30786522e-01 1.30907494e-01 + 1.31028051e-01 1.31148196e-01 1.31267929e-01 1.31387251e-01 1.31506165e-01 + 1.31624672e-01 1.31742773e-01 1.31860470e-01 1.31977765e-01 1.32094658e-01 + 1.32211152e-01 1.32327248e-01 1.32442947e-01 1.32558252e-01 1.32673162e-01 + 1.32787680e-01 1.32901808e-01 1.33015546e-01 1.33128897e-01 1.33241861e-01 + 1.33354441e-01 1.33466637e-01 1.33578451e-01 1.33689884e-01 1.33800939e-01 + 1.33911615e-01 1.34021916e-01 1.34131841e-01 1.34241394e-01 1.34350574e-01 + 1.34459383e-01 1.34567824e-01 1.34675896e-01 1.34783602e-01 1.34890944e-01 + 1.34997921e-01 1.35104536e-01 1.35210791e-01 1.35316685e-01 1.35422222e-01 + 1.35527402e-01 1.35632226e-01 1.35736697e-01 1.35840814e-01 1.35944580e-01 + 1.36047997e-01 1.36151064e-01 1.36253784e-01 1.36356158e-01 1.36458187e-01 + 1.36559873e-01 1.36661216e-01 1.36762219e-01 1.36862882e-01 1.36963207e-01 + 1.37063195e-01 1.37162847e-01 1.37262165e-01 1.37361150e-01 1.37459803e-01 + 1.37558126e-01 1.37656119e-01 1.37753784e-01 1.37851123e-01 1.37948136e-01 + 1.38044824e-01 1.38141190e-01 1.38237233e-01 1.38332957e-01 1.38428361e-01 + 1.38523446e-01 1.38618215e-01 1.38712668e-01 1.38806807e-01 1.38900633e-01 + 1.38994146e-01 1.39087349e-01 1.39180241e-01 1.39272826e-01 1.39365103e-01 + 1.39457074e-01 1.39548740e-01 1.39640102e-01 1.39731162e-01 1.39821920e-01 + 1.39912378e-01 1.40002537e-01 1.40092398e-01 1.40181961e-01 1.40271230e-01 + 1.40360203e-01 1.40448884e-01 1.40537272e-01 1.40625368e-01 1.40713175e-01 + 1.40800693e-01 1.40887923e-01 1.40974866e-01 1.41061523e-01 1.41147896e-01 + 1.41233986e-01 1.41319793e-01 1.41405319e-01 1.41490565e-01 1.41575532e-01 + 1.41660220e-01 1.41744632e-01 1.41828768e-01 1.41912628e-01 1.41996216e-01 + 1.42079530e-01 1.42162572e-01 1.42245344e-01 1.42327847e-01 1.42410081e-01 + 1.42492047e-01 1.42573747e-01 1.42655181e-01 1.42736351e-01 1.42817257e-01 + 1.42897901e-01 1.42978283e-01 1.43058405e-01 1.43138268e-01 1.43217872e-01 + 1.43297218e-01 1.43376309e-01 1.43455143e-01 1.43533723e-01 1.43612050e-01 + 1.43690124e-01 1.43767947e-01 1.43845519e-01 1.43922841e-01 1.43999914e-01 + 1.44076740e-01 1.44153319e-01 1.44229652e-01 1.44305740e-01 1.44381584e-01 + 1.44457185e-01 1.44532544e-01 1.44607662e-01 1.44682539e-01 1.44757177e-01 + 1.44831577e-01 1.44905739e-01 1.44979665e-01 1.45053355e-01 1.45126809e-01 + 1.45200031e-01 1.45273019e-01 1.45345774e-01 1.45418299e-01 1.45490593e-01 + 1.45562658e-01 1.45634494e-01 1.45706102e-01 1.45777484e-01 1.45848639e-01 + 1.45919569e-01 1.45990275e-01 1.46060758e-01 1.46131018e-01 1.46201056e-01 + 1.46270873e-01 1.46340470e-01 1.46409848e-01 1.46479008e-01 1.46547950e-01 + 1.46616675e-01 1.46685184e-01 1.46753479e-01 1.46821558e-01 1.46889425e-01 + 1.46957079e-01 1.47024520e-01 1.47091751e-01 1.47158772e-01 1.47225583e-01 + 1.47292185e-01 1.47358580e-01 1.47424768e-01 1.47490749e-01 1.47556524e-01 + 1.47622095e-01 1.47687462e-01 1.47752626e-01 1.47817587e-01 1.47882347e-01 + 1.19316516e-02 1.17837661e-02 1.16368916e-02 1.14910312e-02 1.13461881e-02 + 1.12023652e-02 1.10595657e-02 1.09177924e-02 1.07770486e-02 1.06373371e-02 + 1.04986608e-02 1.03610229e-02 1.02244262e-02 1.00888736e-02 9.95436796e-03 + 9.82091227e-03 9.68850936e-03 9.55716205e-03 9.42687318e-03 9.29764555e-03 + 9.16948195e-03 9.04238514e-03 8.91635788e-03 8.79140288e-03 8.66752287e-03 + 8.54472052e-03 8.42299850e-03 8.30235947e-03 8.18280604e-03 8.06434082e-03 + 7.94696640e-03 7.83068535e-03 7.71550020e-03 7.60141348e-03 7.48842769e-03 + 7.37654531e-03 7.26576880e-03 7.15610060e-03 7.04754311e-03 6.94009874e-03 + 6.83376985e-03 6.72855879e-03 6.62446789e-03 6.52149946e-03 6.41965576e-03 + 6.31893907e-03 6.21935162e-03 6.12089562e-03 6.02357326e-03 5.92738670e-03 + 5.83233810e-03 5.73842957e-03 5.64566320e-03 5.55404108e-03 5.46356524e-03 + 5.37423772e-03 5.28606051e-03 5.19903560e-03 5.11316493e-03 5.02845043e-03 + 4.94489402e-03 4.86249756e-03 4.78126291e-03 4.70119191e-03 4.62228636e-03 + 4.54454803e-03 4.46797870e-03 4.39258007e-03 4.31835387e-03 4.24530177e-03 + 4.17342543e-03 4.10272646e-03 4.03320649e-03 3.96486708e-03 3.89770979e-03 + 3.83173614e-03 3.76694764e-03 3.70334576e-03 3.64093194e-03 3.57970760e-03 + 3.51967415e-03 3.46083296e-03 3.40318535e-03 3.34673266e-03 3.29147617e-03 + 3.23741715e-03 3.18455682e-03 3.13289641e-03 3.08243708e-03 3.03318001e-03 + 2.98512631e-03 2.93827709e-03 2.89263342e-03 2.84819635e-03 2.80496690e-03 + 2.76294607e-03 2.72213481e-03 2.68253407e-03 2.64414475e-03 2.60696775e-03 + 2.57100391e-03 2.53625406e-03 2.50271900e-03 2.47039951e-03 2.43929633e-03 + 2.40941017e-03 2.38074173e-03 2.35329167e-03 2.32706061e-03 2.30204917e-03 + 2.27825792e-03 2.25568742e-03 2.23433817e-03 2.21421068e-03 2.19530540e-03 + 2.17762279e-03 2.16116324e-03 2.14592713e-03 2.13191482e-03 2.11912664e-03 + 2.10756286e-03 2.09722378e-03 2.08810961e-03 2.08022058e-03 2.07355687e-03 + 2.06811863e-03 2.06390598e-03 2.06091903e-03 2.05915784e-03 2.05862245e-03 + 2.05931288e-03 2.06122911e-03 2.06437109e-03 2.06873876e-03 2.07433201e-03 + 2.08115071e-03 2.08919471e-03 2.09846382e-03 2.10895782e-03 2.12067647e-03 + 2.13361950e-03 2.14778662e-03 2.16317748e-03 2.17979175e-03 2.19762903e-03 + 2.21668892e-03 2.23697097e-03 2.25847471e-03 2.28119965e-03 2.30514526e-03 + 2.33031099e-03 2.35669626e-03 2.38430046e-03 2.41312296e-03 2.44316308e-03 + 2.47442014e-03 2.50689342e-03 2.54058217e-03 2.57548561e-03 2.61160294e-03 + 2.64893333e-03 2.68747592e-03 2.72722982e-03 2.76819412e-03 2.81036787e-03 + 2.85375012e-03 2.89833986e-03 2.94413606e-03 2.99113769e-03 3.03934365e-03 + 3.08875285e-03 3.13936416e-03 3.19117640e-03 3.24418841e-03 3.29839896e-03 + 3.35380682e-03 3.41041071e-03 3.46820936e-03 3.52720143e-03 3.58738558e-03 + 3.64876043e-03 3.71132460e-03 3.77507665e-03 3.84001514e-03 3.90613858e-03 + 3.97344547e-03 4.04193428e-03 4.11160346e-03 4.18245143e-03 4.25447658e-03 + 4.32767727e-03 4.40205185e-03 4.47759865e-03 4.55431593e-03 4.63220199e-03 + 4.71125505e-03 4.79147333e-03 4.87285502e-03 4.95539830e-03 5.03910129e-03 + 5.12396213e-03 5.20997890e-03 5.29714966e-03 5.38547247e-03 5.47494535e-03 + 5.56556628e-03 5.65733324e-03 5.75024419e-03 5.84429703e-03 5.93948968e-03 + 6.03582001e-03 6.13328588e-03 6.23188511e-03 6.33161551e-03 6.43247487e-03 + 6.53446095e-03 6.63757148e-03 6.74180419e-03 6.84715676e-03 6.95362687e-03 + 7.06121216e-03 7.16991026e-03 7.27971878e-03 7.39063530e-03 7.50265737e-03 + 7.61578255e-03 7.73000833e-03 7.84533223e-03 7.96175172e-03 8.07926424e-03 + 8.19786724e-03 8.31755813e-03 8.43833428e-03 8.56019309e-03 8.68313189e-03 + 8.80714802e-03 8.93223879e-03 9.05840148e-03 9.18563337e-03 9.31393170e-03 + 9.44329371e-03 9.57371661e-03 9.70519759e-03 9.83773382e-03 9.97132246e-03 + 1.01059606e-02 1.02416455e-02 1.03783741e-02 1.05161435e-02 1.06549508e-02 + 1.07947931e-02 1.09356673e-02 1.10775705e-02 1.12204997e-02 1.13644517e-02 + 1.15094237e-02 1.16554125e-02 1.18024151e-02 1.19504282e-02 1.20994490e-02 + 1.22494741e-02 1.24005005e-02 1.25525250e-02 1.27055444e-02 1.28595555e-02 + 1.30145552e-02 1.31705401e-02 1.33275071e-02 1.34854528e-02 1.36443741e-02 + 1.38042677e-02 1.39651301e-02 1.41269582e-02 1.42897485e-02 1.44534978e-02 + 1.46182027e-02 1.47838598e-02 1.49504657e-02 1.51180170e-02 1.52865103e-02 + 1.54559422e-02 1.56263093e-02 1.57976080e-02 1.59698349e-02 1.61429866e-02 + 1.63170596e-02 1.64920502e-02 1.66679551e-02 1.68447707e-02 1.70224935e-02 + 1.72011198e-02 1.73806462e-02 1.75610691e-02 1.77423848e-02 1.79245899e-02 + 1.81076806e-02 1.82916533e-02 1.84765045e-02 1.86622305e-02 1.88488276e-02 + 1.90362922e-02 1.92246206e-02 1.94138091e-02 1.96038541e-02 1.97947518e-02 + 1.99864985e-02 2.01790905e-02 2.03725242e-02 2.05667957e-02 2.07619013e-02 + 2.09578372e-02 2.11545998e-02 2.13521852e-02 2.15505896e-02 2.17498093e-02 + 2.19498405e-02 2.21506794e-02 2.23523222e-02 2.25547650e-02 2.27580040e-02 + 2.29620355e-02 2.31668555e-02 2.33724603e-02 2.35788460e-02 2.37860087e-02 + 2.39939446e-02 2.42026499e-02 2.44121205e-02 2.46223528e-02 2.48333427e-02 + 2.50450864e-02 2.52575801e-02 2.54708198e-02 2.56848016e-02 2.58995216e-02 + 2.61149759e-02 2.63311606e-02 2.65480717e-02 2.67657054e-02 2.69840578e-02 + 2.72031248e-02 2.74229026e-02 2.76433871e-02 2.78645746e-02 2.80864610e-02 + 2.83090425e-02 2.85323149e-02 2.87562745e-02 2.89809172e-02 2.92062390e-02 + 2.94322361e-02 2.96589045e-02 2.98862402e-02 3.01142392e-02 3.03428976e-02 + 3.05722114e-02 3.08021766e-02 3.10327893e-02 3.12640455e-02 3.14959413e-02 + 3.17284726e-02 3.19616355e-02 3.21954260e-02 3.24298402e-02 3.26648740e-02 + 3.29005236e-02 3.31367848e-02 3.33736539e-02 3.36111267e-02 3.38491993e-02 + 3.40878677e-02 3.43271281e-02 3.45669763e-02 3.48074084e-02 3.50484206e-02 + 3.52900087e-02 3.55321689e-02 3.57748971e-02 3.60181895e-02 3.62620420e-02 + 3.65064508e-02 3.67514117e-02 3.69969210e-02 3.72429746e-02 3.74895686e-02 + 3.77366991e-02 3.79843621e-02 3.82325537e-02 3.84812698e-02 3.87305067e-02 + 3.89802604e-02 3.92305269e-02 3.94813024e-02 3.97325829e-02 3.99843644e-02 + 4.02366431e-02 4.04894151e-02 4.07426765e-02 4.09964234e-02 4.12506518e-02 + 4.15053579e-02 4.17605378e-02 4.20161876e-02 4.22723034e-02 4.25288815e-02 + 4.27859178e-02 4.30434086e-02 4.33013499e-02 4.35597380e-02 4.38185689e-02 + 4.40778389e-02 4.43375441e-02 4.45976807e-02 4.48582449e-02 4.51192328e-02 + 4.53806406e-02 4.56424645e-02 4.59047007e-02 4.61673455e-02 4.64303950e-02 + 4.66938455e-02 4.69576932e-02 4.72219342e-02 4.74865650e-02 4.77515816e-02 + 4.80169804e-02 4.82827576e-02 4.85489095e-02 4.88154324e-02 4.90823225e-02 + 4.93495761e-02 4.96171896e-02 4.98851592e-02 5.01534812e-02 5.04221520e-02 + 5.06911679e-02 5.09605252e-02 5.12302202e-02 5.15002494e-02 5.17706091e-02 + 5.20412956e-02 5.23123054e-02 5.25836347e-02 5.28552801e-02 5.31272378e-02 + 5.33995044e-02 5.36720762e-02 5.39449496e-02 5.42181211e-02 5.44915872e-02 + 5.47653442e-02 5.50393887e-02 5.53137171e-02 5.55883259e-02 5.58632116e-02 + 5.61383707e-02 5.64137997e-02 5.66894951e-02 5.69654535e-02 5.72416713e-02 + 5.75181451e-02 5.77948716e-02 5.80718471e-02 5.83490684e-02 5.86265320e-02 + 5.89042345e-02 5.91821725e-02 5.94603427e-02 5.97387415e-02 6.00173658e-02 + 6.02962120e-02 6.05752770e-02 6.08545573e-02 6.11340496e-02 6.14137506e-02 + 6.16936570e-02 6.19737655e-02 6.22540729e-02 6.25345758e-02 6.28152709e-02 + 6.30961552e-02 6.33772252e-02 6.36584778e-02 6.39399097e-02 6.42215178e-02 + 6.45032988e-02 6.47852496e-02 6.50673669e-02 6.53496477e-02 6.56320887e-02 + 6.59146868e-02 6.61974389e-02 6.64803419e-02 6.67633926e-02 6.70465880e-02 + 6.73299249e-02 6.76134004e-02 6.78970112e-02 6.81807545e-02 6.84646270e-02 + 6.87486259e-02 6.90327480e-02 6.93169904e-02 6.96013501e-02 6.98858240e-02 + 7.01704093e-02 7.04551029e-02 7.07399019e-02 7.10248033e-02 7.13098043e-02 + 7.15949019e-02 7.18800932e-02 7.21653753e-02 7.24507453e-02 7.27362004e-02 + 7.30217377e-02 7.33073544e-02 7.35930475e-02 7.38788144e-02 7.41646521e-02 + 7.44505580e-02 7.47365291e-02 7.50225627e-02 7.53086561e-02 7.55948066e-02 + 7.58810112e-02 7.61672674e-02 7.64535724e-02 7.67399235e-02 7.70263181e-02 + 7.73127534e-02 7.75992267e-02 7.78857354e-02 7.81722770e-02 7.84588486e-02 + 7.87454477e-02 7.90320718e-02 7.93187181e-02 7.96053841e-02 7.98920673e-02 + 8.01787651e-02 8.04654749e-02 8.07521941e-02 8.10389204e-02 8.13256510e-02 + 8.16123836e-02 8.18991157e-02 8.21858447e-02 8.24725683e-02 8.27592839e-02 + 8.30459891e-02 8.33326815e-02 8.36193586e-02 8.39060181e-02 8.41926576e-02 + 8.44792746e-02 8.47658669e-02 8.50524319e-02 8.53389675e-02 8.56254713e-02 + 8.59119408e-02 8.61983740e-02 8.64847683e-02 8.67711216e-02 8.70574315e-02 + 8.73436959e-02 8.76299124e-02 8.79160788e-02 8.82021929e-02 8.84882524e-02 + 8.87742552e-02 8.90601991e-02 8.93460819e-02 8.96319014e-02 8.99176554e-02 + 9.02033419e-02 9.04889586e-02 9.07745035e-02 9.10599745e-02 9.13453694e-02 + 9.16306861e-02 9.19159227e-02 9.22010770e-02 9.24861469e-02 9.27711305e-02 + 9.30560257e-02 9.33408305e-02 9.36255428e-02 9.39101607e-02 9.41946823e-02 + 9.44791055e-02 9.47634283e-02 9.50476489e-02 9.53317653e-02 9.56157755e-02 + 9.58996777e-02 9.61834699e-02 9.64671503e-02 9.67507170e-02 9.70341681e-02 + 9.73175018e-02 9.76007161e-02 9.78838094e-02 9.81667797e-02 9.84496252e-02 + 9.87323442e-02 9.90149348e-02 9.92973954e-02 9.95797240e-02 9.98619190e-02 + 1.00143979e-01 1.00425901e-01 1.00707685e-01 1.00989328e-01 1.01270829e-01 + 1.01552185e-01 1.01833397e-01 1.02114461e-01 1.02395376e-01 1.02676140e-01 + 1.02956752e-01 1.03237211e-01 1.03517513e-01 1.03797659e-01 1.04077646e-01 + 1.04357473e-01 1.04637138e-01 1.04916640e-01 1.05195977e-01 1.05475147e-01 + 1.05754150e-01 1.06032982e-01 1.06311644e-01 1.06590134e-01 1.06868449e-01 + 1.07146589e-01 1.07424552e-01 1.07702336e-01 1.07979941e-01 1.08257365e-01 + 1.08534605e-01 1.08811662e-01 1.09088533e-01 1.09365218e-01 1.09641714e-01 + 1.09918020e-01 1.10194135e-01 1.10470058e-01 1.10745788e-01 1.11021322e-01 + 1.11296660e-01 1.11571800e-01 1.11846741e-01 1.12121482e-01 1.12396021e-01 + 1.12670358e-01 1.12944490e-01 1.13218418e-01 1.13492138e-01 1.13765651e-01 + 1.14038955e-01 1.14312048e-01 1.14584930e-01 1.14857599e-01 1.15130055e-01 + 1.15402295e-01 1.15674319e-01 1.15946126e-01 1.16217714e-01 1.16489083e-01 + 1.16760231e-01 1.17031157e-01 1.17301860e-01 1.17572339e-01 1.17842593e-01 + 1.18112620e-01 1.18382420e-01 1.18651992e-01 1.18921334e-01 1.19190445e-01 + 1.19459326e-01 1.19727973e-01 1.19996387e-01 1.20264566e-01 1.20532510e-01 + 1.20800216e-01 1.21067686e-01 1.21334917e-01 1.21601908e-01 1.21868658e-01 + 1.22135167e-01 1.22401434e-01 1.22667458e-01 1.22933237e-01 1.23198771e-01 + 1.23464058e-01 1.23729099e-01 1.23993892e-01 1.24258436e-01 1.24522731e-01 + 1.24786775e-01 1.25050567e-01 1.25314108e-01 1.25577395e-01 1.25840428e-01 + 1.26103207e-01 1.26365730e-01 1.26627997e-01 1.26890006e-01 1.27151758e-01 + 1.27413251e-01 1.27674484e-01 1.27935457e-01 1.28196169e-01 1.28456619e-01 + 1.28716807e-01 1.28976731e-01 1.29236391e-01 1.29495787e-01 1.29754917e-01 + 1.30013780e-01 1.30272377e-01 1.30530707e-01 1.30788768e-01 1.31046560e-01 + 1.31304083e-01 1.31561335e-01 1.31818316e-01 1.32075026e-01 1.32331463e-01 + 1.32587628e-01 1.32843519e-01 1.33099136e-01 1.33354479e-01 1.33609546e-01 + 1.33864337e-01 1.34118851e-01 1.34373088e-01 1.34627048e-01 1.34880730e-01 + 1.35134132e-01 1.35387255e-01 1.35640099e-01 1.35892661e-01 1.36144943e-01 + 1.36396943e-01 1.36648661e-01 1.36900097e-01 1.37151249e-01 1.37402118e-01 + 1.37652702e-01 1.37903003e-01 1.38153017e-01 1.38402747e-01 1.38652190e-01 + 1.38901347e-01 1.39150217e-01 1.39398799e-01 1.39647094e-01 1.39895100e-01 + 1.40142817e-01 1.40390246e-01 1.40637384e-01 1.40884233e-01 1.41130791e-01 + 1.41377059e-01 1.41623035e-01 1.41868719e-01 1.42114112e-01 1.42359212e-01 + 1.42604020e-01 1.42848534e-01 1.43092755e-01 1.43336681e-01 1.43580314e-01 + 1.43823652e-01 1.44066695e-01 1.44309444e-01 1.44551896e-01 1.44794053e-01 + 1.45035913e-01 1.45277477e-01 1.45518744e-01 1.45759714e-01 1.46000386e-01 + 1.46240761e-01 1.46480838e-01 1.46720616e-01 1.46960096e-01 1.47199277e-01 + 1.47438159e-01 1.47676742e-01 1.47915025e-01 1.48153009e-01 1.48390692e-01 + 1.48628075e-01 1.48865157e-01 1.49101939e-01 1.49338419e-01 1.49574598e-01 + 1.49810476e-01 1.50046052e-01 1.50281327e-01 1.50516299e-01 1.50750969e-01 + 1.50985337e-01 1.51219402e-01 1.51453164e-01 1.51686623e-01 1.51919779e-01 + 1.52152632e-01 1.52385181e-01 1.52617427e-01 1.52849368e-01 1.53081006e-01 + 1.53312340e-01 1.53543370e-01 1.53774095e-01 1.54004516e-01 1.54234632e-01 + 1.54464444e-01 1.54693950e-01 1.54923152e-01 1.55152049e-01 1.55380640e-01 + 1.55608926e-01 1.55836907e-01 1.56064583e-01 1.56291953e-01 1.56519017e-01 + 1.56745775e-01 1.56972228e-01 1.57198375e-01 1.57424216e-01 1.57649751e-01 + 1.57874980e-01 1.58099903e-01 1.58324520e-01 1.58548831e-01 1.58772835e-01 + 1.58996533e-01 1.59219925e-01 1.59443010e-01 1.59665790e-01 1.59888262e-01 + 1.60110429e-01 1.60332289e-01 1.60553842e-01 1.60775089e-01 1.60996030e-01 + 1.61216664e-01 1.61436992e-01 1.61657013e-01 1.61876728e-01 1.62096136e-01 + 1.62315238e-01 1.62534034e-01 1.62752523e-01 1.62970706e-01 1.63188582e-01 + 1.63406152e-01 1.63623416e-01 1.63840374e-01 1.64057026e-01 1.64273371e-01 + 1.64489411e-01 1.64705144e-01 1.64920571e-01 1.65135693e-01 1.65350508e-01 + 1.65565018e-01 1.65779222e-01 1.65993121e-01 1.66206714e-01 1.66420001e-01 + 1.66632983e-01 1.66845660e-01 1.67058031e-01 1.67270097e-01 1.67481858e-01 + 1.67693314e-01 1.67904465e-01 1.68115312e-01 1.68325854e-01 1.68536091e-01 + 1.68746023e-01 1.68955652e-01 1.69164976e-01 1.69373996e-01 1.69582712e-01 + 1.69791124e-01 1.69999232e-01 1.70207037e-01 1.70414538e-01 1.70621735e-01 + 1.70828630e-01 1.71035221e-01 1.71241510e-01 1.71447495e-01 1.71653178e-01 + 1.71858558e-01 1.72063636e-01 1.72268412e-01 1.72472886e-01 1.72677057e-01 + 1.72880927e-01 1.73084495e-01 1.73287762e-01 1.73490728e-01 1.73693392e-01 + 1.73895756e-01 1.74097819e-01 1.74299581e-01 1.74501043e-01 1.74702204e-01 + 1.74903066e-01 1.75103627e-01 1.75303889e-01 1.75503852e-01 1.75703515e-01 + 1.75902879e-01 1.76101944e-01 1.76300710e-01 1.76499178e-01 1.76697348e-01 + 1.76895219e-01 1.77092792e-01 1.77290068e-01 1.77487046e-01 1.77683727e-01 + 1.77880111e-01 1.78076198e-01 1.78271989e-01 1.78467483e-01 1.78662680e-01 + 1.78857582e-01 1.79052188e-01 1.79246498e-01 1.79440514e-01 1.79634234e-01 + 1.79827659e-01 1.80020789e-01 1.80213625e-01 1.80406167e-01 1.80598415e-01 + 1.80790370e-01 1.80982031e-01 1.81173398e-01 1.81364473e-01 1.81555255e-01 + 1.81745745e-01 1.81935942e-01 1.82125848e-01 1.82315462e-01 1.82504784e-01 + 1.82693815e-01 1.82882555e-01 1.83071004e-01 1.83259163e-01 1.83447032e-01 + 1.83634611e-01 1.83821900e-01 1.84008900e-01 1.84195611e-01 1.84382033e-01 + 1.84568166e-01 1.84754012e-01 1.84939569e-01 1.85124838e-01 1.85309820e-01 + 1.85494514e-01 1.85678922e-01 1.85863043e-01 1.86046878e-01 1.86230426e-01 + 1.86413689e-01 1.86596666e-01 1.86779358e-01 1.86961765e-01 1.87143887e-01 + 1.87325725e-01 1.87507279e-01 1.87688549e-01 1.87869536e-01 1.88050239e-01 + 1.88230659e-01 1.88410797e-01 1.88590653e-01 1.88770226e-01 1.88949518e-01 + 1.89128528e-01 1.89307257e-01 1.89485705e-01 1.89663873e-01 1.89841761e-01 + 1.90019368e-01 1.90196696e-01 1.90373745e-01 1.90550515e-01 1.90727005e-01 + 1.90903218e-01 1.91079153e-01 1.91254809e-01 1.91430189e-01 1.91605291e-01 + 1.91780116e-01 1.91954665e-01 1.92128937e-01 1.92302934e-01 1.92476655e-01 + 1.92650101e-01 1.92823272e-01 1.92996169e-01 1.93168791e-01 1.93341139e-01 + 1.93513213e-01 1.93685014e-01 1.93856543e-01 1.94027798e-01 1.94198781e-01 + 1.94369492e-01 1.94539932e-01 1.94710100e-01 1.94879997e-01 1.95049623e-01 + 1.95218979e-01 1.95388065e-01 1.95556881e-01 1.95725428e-01 1.95893706e-01 + 1.96061715e-01 1.96229455e-01 1.96396928e-01 1.96564133e-01 1.96731070e-01 + 1.96897741e-01 1.97064144e-01 1.97230282e-01 1.97396153e-01 1.97561758e-01 + 1.97727099e-01 1.97892174e-01 1.98056984e-01 1.98221530e-01 1.98385813e-01 + 1.98549831e-01 1.98713586e-01 1.98877078e-01 1.99040308e-01 1.99203275e-01 + 1.99365980e-01 1.99528424e-01 1.99690606e-01 1.99852528e-01 2.00014188e-01 + 2.00175589e-01 2.00336730e-01 2.00497611e-01 2.00658233e-01 2.00818596e-01 + 2.00978701e-01 2.01138547e-01 2.01298136e-01 2.01457467e-01 2.01616542e-01 + 2.01775359e-01 2.01933920e-01 2.02092225e-01 2.02250274e-01 2.02408068e-01 + 2.02565607e-01 2.02722891e-01 2.02879921e-01 2.03036697e-01 2.03193220e-01 + 2.03349489e-01 2.03505505e-01 2.03661269e-01 2.03816780e-01 2.03972040e-01 + 2.04127048e-01 2.04281805e-01 2.04436312e-01 2.04590568e-01 2.04744573e-01 + 2.04898329e-01 2.05051836e-01 2.05205094e-01 2.05358103e-01 2.05510864e-01 + 2.05663377e-01 2.05815642e-01 2.05967660e-01 2.06119432e-01 2.06270956e-01 + 2.06422235e-01 2.06573268e-01 2.06724055e-01 2.06874598e-01 2.07024895e-01 + 2.07174948e-01 2.07324757e-01 2.07474323e-01 2.07623645e-01 2.07772725e-01 + 2.07921561e-01 2.08070156e-01 2.08218508e-01 2.08366619e-01 2.08514489e-01 + 2.08662119e-01 2.08809507e-01 2.08956656e-01 2.09103565e-01 2.09250235e-01 + 2.09396665e-01 2.09542857e-01 2.09688811e-01 2.09834526e-01 2.09980005e-01 + 2.10125246e-01 2.10270250e-01 2.10415017e-01 2.10559549e-01 2.10703844e-01 + 2.10847905e-01 2.10991730e-01 2.11135320e-01 2.11278676e-01 2.11421799e-01 + 2.11564687e-01 2.11707342e-01 2.11849765e-01 2.11991955e-01 2.12133912e-01 + 2.12275638e-01 2.12417132e-01 2.12558395e-01 2.12699428e-01 2.12840230e-01 + 2.12980802e-01 2.13121144e-01 2.13261257e-01 2.13401141e-01 2.13540796e-01 + 2.13680223e-01 2.13819422e-01 2.13958394e-01 2.14097138e-01 2.14235656e-01 + 2.14373947e-01 2.14512011e-01 2.14649851e-01 2.14787464e-01 2.14924853e-01 + 2.15062017e-01 2.15198957e-01 2.15335672e-01 2.15472164e-01 2.15608433e-01 + 2.15744479e-01 2.15880302e-01 2.16015903e-01 2.16151282e-01 2.16286440e-01 + 2.16421376e-01 2.16556092e-01 2.16690587e-01 2.16824862e-01 2.16958918e-01 + 2.17092754e-01 2.17226371e-01 2.17359769e-01 2.17492949e-01 2.17625911e-01 + 2.17758656e-01 2.17891183e-01 2.18023493e-01 2.18155587e-01 2.18287464e-01 + 2.18419126e-01 2.18550572e-01 2.18681803e-01 2.18812819e-01 2.18943621e-01 + 2.19074208e-01 2.19204582e-01 2.19334742e-01 2.19464690e-01 2.19594424e-01 + 2.19723946e-01 2.19853257e-01 2.19982355e-01 2.20111242e-01 2.20239919e-01 + 2.20368384e-01 2.20496640e-01 2.20624685e-01 2.20752521e-01 2.20880148e-01 + 2.21007566e-01 2.21134775e-01 2.21261776e-01 2.21388569e-01 2.21515155e-01 + 2.21641533e-01 2.21767705e-01 2.21893670e-01 2.22019429e-01 2.22144983e-01 + 2.22270331e-01 2.22395473e-01 2.22520411e-01 2.22645145e-01 2.22769675e-01 + 2.22894000e-01 2.23018123e-01 2.23142042e-01 2.23265759e-01 2.23389273e-01 + 2.23512586e-01 2.23635696e-01 2.23758606e-01 2.23881314e-01 2.24003822e-01 + 2.24126129e-01 2.24248236e-01 2.24370144e-01 2.24491852e-01 2.24613362e-01 + 2.24734673e-01 2.24855785e-01 2.24976700e-01 2.25097417e-01 2.25217936e-01 + 2.25338259e-01 2.25458385e-01 2.25578315e-01 2.25698048e-01 2.25817587e-01 + 2.25936930e-01 2.26056078e-01 2.26175031e-01 2.26293790e-01 2.26412355e-01 + 2.26530727e-01 2.26648905e-01 2.26766890e-01 2.26884683e-01 2.27002283e-01 + 2.27119691e-01 2.27236908e-01 2.27353934e-01 2.27470768e-01 2.27587412e-01 + 2.27703865e-01 2.27820129e-01 2.27936203e-01 2.28052087e-01 2.28167783e-01 + 2.28283290e-01 2.28398608e-01 2.28513738e-01 2.28628681e-01 2.28743437e-01 + 2.28858005e-01 2.28972386e-01 2.29086581e-01 2.29200591e-01 2.29314414e-01 + 2.29428052e-01 2.29541504e-01 2.29654772e-01 2.29767856e-01 2.29880755e-01 + 2.29993470e-01 2.30106002e-01 2.30218351e-01 2.30330517e-01 2.30442500e-01 + 2.30554301e-01 2.30665921e-01 2.30777358e-01 2.30888614e-01 2.30999690e-01 + 2.31110584e-01 2.31221299e-01 2.31331833e-01 2.31442188e-01 2.31552363e-01 + 2.31662359e-01 2.31772176e-01 2.31881815e-01 2.31991276e-01 2.32100559e-01 + 2.32209665e-01 2.32318593e-01 2.32427344e-01 2.32535919e-01 2.32644318e-01 + 2.32752540e-01 2.32860587e-01 2.32968459e-01 2.33076155e-01 2.33183677e-01 + 2.33291025e-01 2.33398198e-01 2.33505198e-01 2.33612024e-01 2.33718676e-01 + 2.33825157e-01 2.33931464e-01 2.34037599e-01 2.34143562e-01 2.34249354e-01 + 2.34354974e-01 2.34460423e-01 2.34565702e-01 2.34670810e-01 2.34775748e-01 + 2.34880516e-01 2.34985114e-01 2.35089544e-01 2.35193804e-01 2.35297896e-01 + 2.35401819e-01 2.35505574e-01 2.35609162e-01 2.35712582e-01 2.35815835e-01 + 2.35918921e-01 2.36021841e-01 2.36124594e-01 2.36227182e-01 2.36329603e-01 + 2.36431860e-01 2.36533951e-01 2.36635878e-01 2.36737640e-01 2.36839238e-01 + 2.36940672e-01 2.37041942e-01 2.37143049e-01 2.37243994e-01 2.37344775e-01 + 2.37445394e-01 2.37545851e-01 2.37646146e-01 2.37746279e-01 2.37846251e-01 + 2.37946062e-01 2.38045713e-01 2.38145203e-01 2.38244533e-01 2.38343703e-01 + 2.38442713e-01 2.38541565e-01 2.38640257e-01 2.38738790e-01 2.38837166e-01 + 2.38935383e-01 2.39033442e-01 2.39131344e-01 2.39229088e-01 2.39326676e-01 + 2.39424106e-01 2.39521381e-01 2.39618499e-01 2.39715461e-01 2.39812268e-01 + 2.39908919e-01 2.40005416e-01 2.40101757e-01 2.40197944e-01 2.40293977e-01 + 2.40389856e-01 2.40485582e-01 2.40581154e-01 2.40676573e-01 2.40771839e-01 + 2.40866953e-01 2.40961914e-01 2.41056724e-01 2.41151382e-01 2.41245888e-01 + 2.41340243e-01 2.41434447e-01 2.41528501e-01 2.41622404e-01 2.41716158e-01 + 2.41809761e-01 2.41903215e-01 2.41996520e-01 2.42089675e-01 2.42182682e-01 + 2.42275541e-01 2.42368251e-01 2.42460813e-01 2.42553228e-01 2.42645496e-01 + 2.42737616e-01 2.42829589e-01 2.42921416e-01 2.43013097e-01 2.43104631e-01 + 2.43196020e-01 2.43287263e-01 2.43378361e-01 2.43469314e-01 2.43560122e-01 + 2.43650786e-01 2.43741306e-01 2.43831681e-01 2.43921913e-01 2.44012001e-01 + 2.44101947e-01 2.44191749e-01 2.44281409e-01 2.44370926e-01 2.44460302e-01 + 2.44549535e-01 2.44638627e-01 2.44727577e-01 2.44816386e-01 2.44905055e-01 + 2.44993583e-01 2.45081970e-01 2.45170218e-01 2.45258325e-01 2.45346293e-01 + 2.45434122e-01 2.45521812e-01 2.45609362e-01 2.45696775e-01 2.45784049e-01 + 2.45871185e-01 2.45958183e-01 2.46045043e-01 2.46131766e-01 2.46218353e-01 + 2.46304802e-01 2.46391115e-01 2.46477291e-01 2.46563332e-01 2.46649236e-01 + 2.46735006e-01 2.46820639e-01 2.46906138e-01 2.46991502e-01 2.47076731e-01 + 2.47161826e-01 2.47246787e-01 2.47331614e-01 2.47416307e-01 2.47500867e-01 + 2.47585294e-01 2.47669588e-01 2.47753749e-01 2.47837778e-01 2.47921675e-01 + 2.48005440e-01 2.48089073e-01 2.48172575e-01 2.48255945e-01 2.48339185e-01 + 2.48422294e-01 2.48505272e-01 2.48588120e-01 2.48670839e-01 2.48753427e-01 + 2.48835886e-01 2.48918215e-01 2.49000416e-01 2.49082487e-01 2.49164431e-01 + 2.49246245e-01 2.49327932e-01 2.49409490e-01 2.49490922e-01 2.49572225e-01 + 2.49653402e-01 2.49734451e-01 2.49815374e-01 2.49896170e-01 2.49976840e-01 + 2.50057384e-01 2.50137802e-01 2.50218094e-01 2.50298261e-01 2.50378303e-01 + 2.50458221e-01 2.50538013e-01 2.50617681e-01 2.50697225e-01 2.50776645e-01 + 2.50855941e-01 2.50935113e-01 2.51014162e-01 2.51093088e-01 2.51171892e-01 + 2.51250572e-01 2.51329130e-01 2.51407566e-01 2.51485880e-01 2.51564073e-01 + 2.51642143e-01 2.51720093e-01 2.51797921e-01 2.51875629e-01 2.51953216e-01 + 2.52030682e-01 2.52108028e-01 2.52185254e-01 2.52262361e-01 2.52339348e-01 + 2.52416215e-01 2.52492964e-01 2.52569593e-01 2.52646104e-01 2.52722497e-01 + 2.52798771e-01 2.52874927e-01 2.52950965e-01 2.53026886e-01 2.53102689e-01 + 2.53178375e-01 2.53253944e-01 2.53329397e-01 2.53404733e-01 2.53479952e-01 + 2.53555056e-01 2.53630043e-01 2.53704915e-01 2.53779671e-01 2.53854312e-01 + 2.53928839e-01 2.54003250e-01 2.54077546e-01 2.54151728e-01 2.54225796e-01 + 2.54299750e-01 2.54373590e-01 2.54447316e-01 2.54520930e-01 2.54594429e-01 + 2.54667816e-01 2.54741090e-01 2.54814252e-01 2.54887301e-01 2.54960238e-01 + 2.55033063e-01 2.55105776e-01 2.55178378e-01 2.55250868e-01 2.55323247e-01 + 2.55395516e-01 2.55467673e-01 2.55539720e-01 2.55611657e-01 2.55683483e-01 + 2.55755200e-01 2.55826806e-01 2.55898304e-01 2.55969692e-01 2.56040970e-01 + 2.56112140e-01 2.56183201e-01 2.56254154e-01 2.56324998e-01 2.56395734e-01 + 2.56466362e-01 2.56536882e-01 2.56607295e-01 2.56677600e-01 2.56747798e-01 + 2.56817889e-01 2.56887874e-01 2.56957752e-01 2.57027523e-01 2.57097188e-01 + 2.57166747e-01 2.57236200e-01 2.57305548e-01 2.57374790e-01 2.57443927e-01 + 2.57512959e-01 2.57581886e-01 2.57650709e-01 2.57719427e-01 2.57788040e-01 + 2.57856550e-01 2.57924955e-01 2.57993257e-01 2.58061455e-01 2.58129550e-01 + 2.58197542e-01 2.58265431e-01 2.58333217e-01 2.58400900e-01 2.58468481e-01 + 2.58535960e-01 2.58603336e-01 2.58670611e-01 2.58737784e-01 2.58804856e-01 + 2.58871826e-01 2.58938695e-01 2.59005463e-01 2.59072131e-01 2.59138697e-01 + 2.59205164e-01 2.59271530e-01 2.59337796e-01 2.59403962e-01 2.59470029e-01 + 2.59535996e-01 2.59601864e-01 2.59667633e-01 2.59733302e-01 2.59798873e-01 + 2.59864345e-01 2.59929719e-01 2.59994995e-01 2.60060172e-01 2.60125252e-01 + 2.60190234e-01 2.60255118e-01 2.60319905e-01 2.60384595e-01 2.60449188e-01 + 2.60513684e-01 2.60578083e-01 2.60642386e-01 2.60706593e-01 2.60770703e-01 + 2.60834718e-01 2.60898636e-01 2.60962459e-01 2.61026187e-01 2.61089819e-01 + 2.61153356e-01 2.61216799e-01 2.61280146e-01 2.61343399e-01 2.61406557e-01 + 2.61469622e-01 2.61532592e-01 2.61595468e-01 2.61658250e-01 2.61720939e-01 + 2.61783535e-01 2.61846037e-01 2.61908446e-01 2.61970763e-01 2.62032986e-01 + 2.62095117e-01 2.62157156e-01 2.62219102e-01 2.62280956e-01 2.62342719e-01 + 2.62404389e-01 2.62465968e-01 2.62527456e-01 2.62588852e-01 2.62650158e-01 + 2.62711372e-01 2.62772496e-01 2.62833529e-01 2.62894471e-01 2.62955324e-01 + 2.63016086e-01 2.63076758e-01 2.63137341e-01 2.63197833e-01 2.63258237e-01 + 2.63318551e-01 2.63378776e-01 2.63438912e-01 2.63498959e-01 2.63558918e-01 + 2.63618788e-01 2.63678569e-01 2.63738263e-01 2.63797868e-01 2.63857386e-01 + 2.63916816e-01 2.63976158e-01 2.64035413e-01 2.64094581e-01 2.64153661e-01 + 2.64212655e-01 2.64271562e-01 2.64330382e-01 2.64389116e-01 2.64447763e-01 + 2.64506324e-01 2.64564800e-01 2.64623189e-01 2.64681493e-01 2.64739711e-01 + 2.64797844e-01 2.64855892e-01 2.64913854e-01 2.64971732e-01 2.65029524e-01 + 2.65087233e-01 2.65144856e-01 2.65202396e-01 2.65259851e-01 2.65317222e-01 + 2.65374509e-01 2.65431713e-01 2.65488833e-01 2.65545869e-01 2.65602822e-01 + 2.65659692e-01 2.65716480e-01 2.65773184e-01 2.65829805e-01 2.65886344e-01 + 2.65942801e-01 2.65999175e-01 2.66055468e-01 2.66111678e-01 2.66167806e-01 + 2.66223853e-01 2.66279819e-01 2.66335703e-01 2.66391505e-01 2.66447227e-01 + 2.66502868e-01 2.66558427e-01 2.66613907e-01 2.66669305e-01 2.66724624e-01 + 2.66779862e-01 2.66835020e-01 2.66890098e-01 2.66945096e-01 2.67000015e-01 + 2.67054854e-01 2.67109613e-01 2.67164294e-01 2.67218895e-01 2.67273418e-01 + 2.67327861e-01 2.67382226e-01 2.67436512e-01 2.67490720e-01 2.67544850e-01 + 2.67598902e-01 2.67652875e-01 2.67706771e-01 2.67760589e-01 2.67814330e-01 + 2.67867993e-01 2.67921578e-01 2.67975087e-01 2.68028519e-01 2.68081873e-01 + 2.68135151e-01 2.68188352e-01 2.68241477e-01 2.68294526e-01 2.68347498e-01 + 2.68400394e-01 2.68453214e-01 2.68505959e-01 2.68558628e-01 2.68611221e-01 + 2.68663738e-01 2.68716181e-01 2.68768548e-01 2.68820841e-01 2.68873058e-01 + 2.68925201e-01 2.68977269e-01 2.69029263e-01 2.69081182e-01 2.69133027e-01 + 2.69184798e-01 2.69236495e-01 2.69288118e-01 2.69339668e-01 2.69391143e-01 + 2.69442546e-01 2.69493875e-01 2.69545131e-01 2.69596314e-01 2.69647424e-01 + 2.69698461e-01 2.69749425e-01 2.69800317e-01 2.69851137e-01 2.69901884e-01 + 2.69952559e-01 2.70003162e-01 2.70053693e-01 2.70104153e-01 2.70154540e-01 + 2.70204856e-01 2.70255101e-01 2.70305274e-01 2.70355377e-01 2.70405408e-01 + 2.70455368e-01 2.70505258e-01 2.70555077e-01 2.70604825e-01 2.70654503e-01 + 2.70704110e-01 2.70753648e-01 2.70803115e-01 2.70852513e-01 2.70901840e-01 + 2.70951098e-01 2.71000287e-01 2.71049406e-01 2.71098455e-01 2.71147436e-01 + 2.71196347e-01 2.71245190e-01 2.71293963e-01 2.71342668e-01 2.71391304e-01 + 2.71439872e-01 2.71488372e-01 2.71536803e-01 2.71585166e-01 2.71633461e-01 + 2.71681688e-01 2.71729848e-01 2.71777939e-01 2.71825964e-01 2.71873921e-01 + 2.71921810e-01 2.71969632e-01 2.72017388e-01 2.72065076e-01 2.72112698e-01 + 2.72160252e-01 2.72207741e-01 2.72255162e-01 2.72302518e-01 2.72349807e-01 + 2.72397030e-01 2.72444187e-01 2.72491278e-01 2.72538303e-01 2.72585263e-01 + 2.72632157e-01 2.72678985e-01 2.72725748e-01 2.72772446e-01 2.72819079e-01 + 2.72865647e-01 2.72912150e-01 2.72958588e-01 2.73004962e-01 2.73051271e-01 + 2.73097516e-01 2.73143696e-01 2.73189812e-01 2.73235864e-01 2.73281852e-01 + 2.73327776e-01 2.73373636e-01 2.73419432e-01 2.73465166e-01 2.73510835e-01 + 2.73556441e-01 2.73601984e-01 2.73647464e-01 2.73692881e-01 2.73738235e-01 + 2.73783526e-01 2.73828755e-01 2.73873921e-01 2.73919024e-01 2.73964065e-01 + 2.74009044e-01 2.74053961e-01 2.74098815e-01 2.74143608e-01 2.74188339e-01 + 2.74233008e-01 2.74277616e-01 2.74322162e-01 2.74366646e-01 2.74411070e-01 + 2.74455432e-01 2.74499733e-01 2.74543973e-01 2.74588152e-01 2.74632270e-01 + 2.74676328e-01 2.74720325e-01 2.74764262e-01 2.74808138e-01 2.74851954e-01 + 2.74895710e-01 2.74939406e-01 2.74983042e-01 2.75026618e-01 2.75070135e-01 + 2.75113591e-01 2.75156988e-01 2.75200326e-01 2.75243604e-01 2.75286824e-01 + 2.75329984e-01 2.75373085e-01 2.75416127e-01 2.75459110e-01 2.75502034e-01 + 2.75544900e-01 2.75587707e-01 2.75630456e-01 2.75673147e-01 2.75715779e-01 + 2.75758353e-01 2.75800869e-01 2.75843328e-01 2.75885728e-01 2.75928070e-01 + 2.75970355e-01 2.76012583e-01 2.76054753e-01 2.76096866e-01 2.76138921e-01 + 2.76180919e-01 2.76222860e-01 2.76264745e-01 2.76306572e-01 2.76348342e-01 + 2.76390056e-01 2.76431714e-01 2.76473315e-01 2.76514859e-01 2.76556347e-01 + 2.76597779e-01 2.76639155e-01 2.76680475e-01 2.76721739e-01 2.76762947e-01 + 2.76804100e-01 2.76845197e-01 2.76886238e-01 2.76927224e-01 2.76968154e-01 + 2.77009030e-01 2.77049850e-01 2.77090615e-01 2.77131325e-01 2.77171980e-01 + 2.77212581e-01 2.77253126e-01 2.77293617e-01 2.77334054e-01 2.77374436e-01 + 2.77414764e-01 2.77455038e-01 2.77495257e-01 2.77535423e-01 2.77575534e-01 + 2.77615592e-01 2.77655596e-01 2.77695546e-01 2.77735443e-01 2.77775286e-01 + 2.77815076e-01 2.77854812e-01 2.77894495e-01 2.77934125e-01 2.77973702e-01 + 2.78013226e-01 2.78052697e-01 2.78092115e-01 2.78131481e-01 2.78170794e-01 + 2.78210054e-01 2.78249262e-01 2.78288418e-01 2.78327521e-01 2.78366572e-01 + 2.78405571e-01 2.78444519e-01 2.78483414e-01 2.78522257e-01 2.78561049e-01 + 2.78599789e-01 2.78638477e-01 2.78677114e-01 2.78715700e-01 2.78754234e-01 + 2.78792717e-01 2.78831149e-01 2.78869530e-01 2.78907859e-01 2.78946138e-01 + 1.03953624e+00 1.03772749e+00 1.03592023e+00 1.03411445e+00 1.03231016e+00 + 1.03050735e+00 1.02870603e+00 1.02690620e+00 1.02510785e+00 1.02331100e+00 + 1.02151562e+00 1.01972174e+00 1.01792935e+00 1.01613844e+00 1.01434902e+00 + 1.01256110e+00 1.01077466e+00 1.00898971e+00 1.00720626e+00 1.00542429e+00 + 1.00364382e+00 1.00186484e+00 1.00008735e+00 9.98311355e-01 9.96536852e-01 + 9.94763842e-01 9.92992326e-01 9.91222304e-01 9.89453777e-01 9.87686744e-01 + 9.85921207e-01 9.84157165e-01 9.82394619e-01 9.80633570e-01 9.78874017e-01 + 9.77115962e-01 9.75359404e-01 9.73604344e-01 9.71850782e-01 9.70098719e-01 + 9.68348155e-01 9.66599090e-01 9.64851525e-01 9.63105460e-01 9.61360895e-01 + 9.59617832e-01 9.57876269e-01 9.56136208e-01 9.54397649e-01 9.52660593e-01 + 9.50925039e-01 9.49190988e-01 9.47458441e-01 9.45727397e-01 9.43997858e-01 + 9.42269823e-01 9.40543293e-01 9.38818268e-01 9.37094749e-01 9.35372736e-01 + 9.33652230e-01 9.31933230e-01 9.30215737e-01 9.28499752e-01 9.26785274e-01 + 9.25072305e-01 9.23360844e-01 9.21650893e-01 9.19942450e-01 9.18235517e-01 + 9.16530094e-01 9.14826182e-01 9.13123780e-01 9.11422890e-01 9.09723511e-01 + 9.08025644e-01 9.06329289e-01 9.04634446e-01 9.02941117e-01 9.01249300e-01 + 8.99558998e-01 8.97870209e-01 8.96182935e-01 8.94497176e-01 8.92812931e-01 + 8.91130202e-01 8.89448989e-01 8.87769292e-01 8.86091112e-01 8.84414448e-01 + 8.82739302e-01 8.81065673e-01 8.79393562e-01 8.77722970e-01 8.76053896e-01 + 8.74386341e-01 8.72720306e-01 8.71055790e-01 8.69392795e-01 8.67731320e-01 + 8.66071366e-01 8.64412932e-01 8.62756021e-01 8.61100631e-01 8.59446764e-01 + 8.57794419e-01 8.56143597e-01 8.54494298e-01 8.52846523e-01 8.51200272e-01 + 8.49555545e-01 8.47912343e-01 8.46270666e-01 8.44630515e-01 8.42991889e-01 + 8.41354789e-01 8.39719216e-01 8.38085170e-01 8.36452650e-01 8.34821658e-01 + 8.33192195e-01 8.31564259e-01 8.29937852e-01 8.28312973e-01 8.26689624e-01 + 8.25067805e-01 8.23447515e-01 8.21828756e-01 8.20211528e-01 8.18595830e-01 + 8.16981664e-01 8.15369029e-01 8.13757927e-01 8.12148357e-01 8.10540319e-01 + 8.08933815e-01 8.07328844e-01 8.05725406e-01 8.04123503e-01 8.02523135e-01 + 8.00924301e-01 7.99327002e-01 7.97731239e-01 7.96137011e-01 7.94544320e-01 + 7.92953165e-01 7.91363547e-01 7.89775466e-01 7.88188923e-01 7.86603918e-01 + 7.85020450e-01 7.83438522e-01 7.81858132e-01 7.80279281e-01 7.78701970e-01 + 7.77126199e-01 7.75551968e-01 7.73979278e-01 7.72408129e-01 7.70838521e-01 + 7.69270454e-01 7.67703930e-01 7.66138947e-01 7.64575508e-01 7.63013611e-01 + 7.61453258e-01 7.59894448e-01 7.58337182e-01 7.56781460e-01 7.55227283e-01 + 7.53674651e-01 7.52123565e-01 7.50574024e-01 7.49026029e-01 7.47479580e-01 + 7.45934678e-01 7.44391322e-01 7.42849514e-01 7.41309254e-01 7.39770542e-01 + 7.38233378e-01 7.36697762e-01 7.35163696e-01 7.33631179e-01 7.32100211e-01 + 7.30570794e-01 7.29042926e-01 7.27516610e-01 7.25991844e-01 7.24468629e-01 + 7.22946966e-01 7.21426855e-01 7.19908297e-01 7.18391291e-01 7.16875837e-01 + 7.15361937e-01 7.13849591e-01 7.12338798e-01 7.10829560e-01 7.09321876e-01 + 7.07815747e-01 7.06311174e-01 7.04808155e-01 7.03306693e-01 7.01806787e-01 + 7.00308437e-01 6.98811644e-01 6.97316408e-01 6.95822730e-01 6.94330610e-01 + 6.92840047e-01 6.91351043e-01 6.89863598e-01 6.88377712e-01 6.86893385e-01 + 6.85410618e-01 6.83929411e-01 6.82449765e-01 6.80971679e-01 6.79495154e-01 + 6.78020190e-01 6.76546789e-01 6.75074949e-01 6.73604671e-01 6.72135956e-01 + 6.70668804e-01 6.69203215e-01 6.67739189e-01 6.66276728e-01 6.64815830e-01 + 6.63356498e-01 6.61898730e-01 6.60442527e-01 6.58987889e-01 6.57534818e-01 + 6.56083312e-01 6.54633373e-01 6.53185001e-01 6.51738195e-01 6.50292957e-01 + 6.48849287e-01 6.47407184e-01 6.45966650e-01 6.44527685e-01 6.43090288e-01 + 6.41654460e-01 6.40220202e-01 6.38787514e-01 6.37356396e-01 6.35926849e-01 + 6.34498872e-01 6.33072467e-01 6.31647633e-01 6.30224370e-01 6.28802680e-01 + 6.27382561e-01 6.25964016e-01 6.24547043e-01 6.23131644e-01 6.21717818e-01 + 6.20305566e-01 6.18894889e-01 6.17485785e-01 6.16078257e-01 6.14672303e-01 + 6.13267925e-01 6.11865123e-01 6.10463897e-01 6.09064247e-01 6.07666173e-01 + 6.06269677e-01 6.04874758e-01 6.03481416e-01 6.02089652e-01 6.00699467e-01 + 5.99310859e-01 5.97923831e-01 5.96538381e-01 5.95154511e-01 5.93772221e-01 + 5.92391510e-01 5.91012380e-01 5.89634830e-01 5.88258861e-01 5.86884473e-01 + 5.85511667e-01 5.84140442e-01 5.82770800e-01 5.81402740e-01 5.80036262e-01 + 5.78671367e-01 5.77308056e-01 5.75946328e-01 5.74586184e-01 5.73227624e-01 + 5.71870649e-01 5.70515258e-01 5.69161453e-01 5.67809232e-01 5.66458597e-01 + 5.65109548e-01 5.63762086e-01 5.62416210e-01 5.61071920e-01 5.59729218e-01 + 5.58388103e-01 5.57048576e-01 5.55710636e-01 5.54374285e-01 5.53039523e-01 + 5.51706349e-01 5.50374764e-01 5.49044769e-01 5.47716364e-01 5.46389548e-01 + 5.45064323e-01 5.43740689e-01 5.42418645e-01 5.41098192e-01 5.39779331e-01 + 5.38462062e-01 5.37146385e-01 5.35832299e-01 5.34519807e-01 5.33208907e-01 + 5.31899601e-01 5.30591888e-01 5.29285769e-01 5.27981244e-01 5.26678313e-01 + 5.25376977e-01 5.24077235e-01 5.22779089e-01 5.21482538e-01 5.20187583e-01 + 5.18894224e-01 5.17602461e-01 5.16312295e-01 5.15023726e-01 5.13736754e-01 + 5.12451379e-01 5.11167602e-01 5.09885423e-01 5.08604843e-01 5.07325861e-01 + 5.06048477e-01 5.04772693e-01 5.03498508e-01 5.02225923e-01 5.00954938e-01 + 4.99685553e-01 4.98417769e-01 4.97151585e-01 4.95887003e-01 4.94624021e-01 + 4.93362642e-01 4.92102864e-01 4.90844689e-01 4.89588116e-01 4.88333145e-01 + 4.87079778e-01 4.85828014e-01 4.84577853e-01 4.83329297e-01 4.82082344e-01 + 4.80836996e-01 4.79593252e-01 4.78351114e-01 4.77110580e-01 4.75871652e-01 + 4.74634330e-01 4.73398614e-01 4.72164504e-01 4.70932001e-01 4.69701104e-01 + 4.68471815e-01 4.67244132e-01 4.66018058e-01 4.64793591e-01 4.63570733e-01 + 4.62349483e-01 4.61129842e-01 4.59911810e-01 4.58695387e-01 4.57480573e-01 + 4.56267369e-01 4.55055776e-01 4.53845792e-01 4.52637419e-01 4.51430658e-01 + 4.50225507e-01 4.49021967e-01 4.47820039e-01 4.46619724e-01 4.45421020e-01 + 4.44223928e-01 4.43028450e-01 4.41834584e-01 4.40642332e-01 4.39451693e-01 + 4.38262668e-01 4.37075256e-01 4.35889459e-01 4.34705277e-01 4.33522709e-01 + 4.32341757e-01 4.31162420e-01 4.29984698e-01 4.28808592e-01 4.27634102e-01 + 4.26461229e-01 4.25289972e-01 4.24120332e-01 4.22952310e-01 4.21785904e-01 + 4.20621116e-01 4.19457946e-01 4.18296395e-01 4.17136461e-01 4.15978147e-01 + 4.14821451e-01 4.13666374e-01 4.12512917e-01 4.11361080e-01 4.10210862e-01 + 4.09062265e-01 4.07915288e-01 4.06769932e-01 4.05626197e-01 4.04484083e-01 + 4.03343590e-01 4.02204719e-01 4.01067470e-01 3.99931844e-01 3.98797839e-01 + 3.97665458e-01 3.96534699e-01 3.95405564e-01 3.94278052e-01 3.93152164e-01 + 3.92027900e-01 3.90905259e-01 3.89784244e-01 3.88664853e-01 3.87547087e-01 + 3.86430946e-01 3.85316431e-01 3.84203541e-01 3.83092278e-01 3.81982640e-01 + 3.80874629e-01 3.79768245e-01 3.78663487e-01 3.77560357e-01 3.76458854e-01 + 3.75358979e-01 3.74260731e-01 3.73164112e-01 3.72069121e-01 3.70975759e-01 + 3.69884025e-01 3.68793921e-01 3.67705446e-01 3.66618601e-01 3.65533385e-01 + 3.64449799e-01 3.63367844e-01 3.62287520e-01 3.61208826e-01 3.60131763e-01 + 3.59056331e-01 3.57982531e-01 3.56910363e-01 3.55839826e-01 3.54770922e-01 + 3.53703650e-01 3.52638011e-01 3.51574005e-01 3.50511632e-01 3.49450892e-01 + 3.48391786e-01 3.47334314e-01 3.46278476e-01 3.45224272e-01 3.44171703e-01 + 3.43120769e-01 3.42071469e-01 3.41023805e-01 3.39977776e-01 3.38933384e-01 + 3.37890627e-01 3.36849506e-01 3.35810021e-01 3.34772174e-01 3.33735963e-01 + 3.32701389e-01 3.31668453e-01 3.30637154e-01 3.29607493e-01 3.28579470e-01 + 3.27553085e-01 3.26528339e-01 3.25505231e-01 3.24483762e-01 3.23463933e-01 + 3.22445743e-01 3.21429192e-01 3.20414282e-01 3.19401011e-01 3.18389381e-01 + 3.17379391e-01 3.16371042e-01 3.15364334e-01 3.14359267e-01 3.13355841e-01 + 3.12354057e-01 3.11353915e-01 3.10355415e-01 3.09358557e-01 3.08363342e-01 + 3.07369770e-01 3.06377840e-01 3.05387554e-01 3.04398911e-01 3.03411912e-01 + 3.02426556e-01 3.01442845e-01 3.00460777e-01 2.99480355e-01 2.98501577e-01 + 2.97524444e-01 2.96548956e-01 2.95575113e-01 2.94602916e-01 2.93632365e-01 + 2.92663460e-01 2.91696201e-01 2.90730589e-01 2.89766623e-01 2.88804304e-01 + 2.87843632e-01 2.86884607e-01 2.85927230e-01 2.84971501e-01 2.84017420e-01 + 2.83064986e-01 2.82114201e-01 2.81165065e-01 2.80217578e-01 2.79271739e-01 + 2.78327550e-01 2.77385010e-01 2.76444119e-01 2.75504879e-01 2.74567288e-01 + 2.73631348e-01 2.72697059e-01 2.71764419e-01 2.70833431e-01 2.69904094e-01 + 2.68976408e-01 2.68050374e-01 2.67125991e-01 2.66203261e-01 2.65282182e-01 + 2.64362756e-01 2.63444982e-01 2.62528861e-01 2.61614393e-01 2.60701578e-01 + 2.59790416e-01 2.58880908e-01 2.57973054e-01 2.57066853e-01 2.56162307e-01 + 2.55259415e-01 2.54358178e-01 2.53458595e-01 2.52560668e-01 2.51664395e-01 + 2.50769778e-01 2.49876816e-01 2.48985511e-01 2.48095861e-01 2.47207867e-01 + 2.46321530e-01 2.45436849e-01 2.44553825e-01 2.43672457e-01 2.42792747e-01 + 2.41914695e-01 2.41038300e-01 2.40163562e-01 2.39290483e-01 2.38419061e-01 + 2.37549298e-01 2.36681193e-01 2.35814748e-01 2.34949961e-01 2.34086833e-01 + 2.33225364e-01 2.32365555e-01 2.31507405e-01 2.30650916e-01 2.29796086e-01 + 2.28942916e-01 2.28091407e-01 2.27241559e-01 2.26393372e-01 2.25546845e-01 + 2.24701980e-01 2.23858776e-01 2.23017233e-01 2.22177352e-01 2.21339134e-01 + 2.20502577e-01 2.19667682e-01 2.18834451e-01 2.18002881e-01 2.17172975e-01 + 2.16344732e-01 2.15518152e-01 2.14693235e-01 2.13869982e-01 2.13048393e-01 + 2.12228468e-01 2.11410207e-01 2.10593610e-01 2.09778678e-01 2.08965410e-01 + 2.08153807e-01 2.07343870e-01 2.06535598e-01 2.05728991e-01 2.04924049e-01 + 2.04120774e-01 2.03319164e-01 2.02519221e-01 2.01720944e-01 2.00924334e-01 + 2.00129390e-01 1.99336113e-01 1.98544503e-01 1.97754560e-01 1.96966285e-01 + 1.96179677e-01 1.95394737e-01 1.94611465e-01 1.93829861e-01 1.93049925e-01 + 1.92271658e-01 1.91495059e-01 1.90720129e-01 1.89946869e-01 1.89175277e-01 + 1.88405354e-01 1.87637101e-01 1.86870518e-01 1.86105605e-01 1.85342361e-01 + 1.84580788e-01 1.83820885e-01 1.83062653e-01 1.82306091e-01 1.81551200e-01 + 1.80797980e-01 1.80046431e-01 1.79296554e-01 1.78548348e-01 1.77801814e-01 + 1.77056952e-01 1.76313762e-01 1.75572244e-01 1.74832398e-01 1.74094225e-01 + 1.73357725e-01 1.72622897e-01 1.71889743e-01 1.71158261e-01 1.70428453e-01 + 1.69700319e-01 1.68973858e-01 1.68249071e-01 1.67525958e-01 1.66804519e-01 + 1.66084755e-01 1.65366665e-01 1.64650249e-01 1.63935509e-01 1.63222443e-01 + 1.62511053e-01 1.61801338e-01 1.61093298e-01 1.60386934e-01 1.59682246e-01 + 1.58979233e-01 1.58277897e-01 1.57578237e-01 1.56880253e-01 1.56183946e-01 + 1.55489316e-01 1.54796362e-01 1.54105086e-01 1.53415486e-01 1.52727564e-01 + 1.52041320e-01 1.51356753e-01 1.50673864e-01 1.49992653e-01 1.49313120e-01 + 1.48635265e-01 1.47959088e-01 1.47284591e-01 1.46611771e-01 1.45940631e-01 + 1.45271170e-01 1.44603388e-01 1.43937285e-01 1.43272862e-01 1.42610118e-01 + 1.41949054e-01 1.41289670e-01 1.40631966e-01 1.39975942e-01 1.39321598e-01 + 1.38668935e-01 1.38017953e-01 1.37368652e-01 1.36721031e-01 1.36075091e-01 + 1.35430833e-01 1.34788256e-01 1.34147361e-01 1.33508147e-01 1.32870615e-01 + 1.32234765e-01 1.31600597e-01 1.30968111e-01 1.30337308e-01 1.29708187e-01 + 1.29080749e-01 1.28454994e-01 1.27830921e-01 1.27208532e-01 1.26587826e-01 + 1.25968803e-01 1.25351464e-01 1.24735808e-01 1.24121836e-01 1.23509548e-01 + 1.22898944e-01 1.22290024e-01 1.21682789e-01 1.21077238e-01 1.20473372e-01 + 1.19871190e-01 1.19270693e-01 1.18671881e-01 1.18074755e-01 1.17479313e-01 + 1.16885558e-01 1.16293487e-01 1.15703102e-01 1.15114403e-01 1.14527390e-01 + 1.13942064e-01 1.13358423e-01 1.12776468e-01 1.12196200e-01 1.11617619e-01 + 1.11040725e-01 1.10465517e-01 1.09891996e-01 1.09320162e-01 1.08750016e-01 + 1.08181557e-01 1.07614785e-01 1.07049701e-01 1.06486305e-01 1.05924597e-01 + 1.05364577e-01 1.04806244e-01 1.04249601e-01 1.03694645e-01 1.03141378e-01 + 1.02589800e-01 1.02039910e-01 1.01491709e-01 1.00945198e-01 1.00400375e-01 + 9.98572416e-02 9.93157976e-02 9.87760431e-02 9.82379782e-02 9.77016030e-02 + 9.71669178e-02 9.66339224e-02 9.61026172e-02 9.55730022e-02 9.50450776e-02 + 9.45188434e-02 9.39942997e-02 9.34714468e-02 9.29502847e-02 9.24308135e-02 + 9.19130333e-02 9.13969443e-02 9.08825466e-02 9.03698403e-02 8.98588255e-02 + 8.93495023e-02 8.88418708e-02 8.83359312e-02 8.78316836e-02 8.73291281e-02 + 8.68282647e-02 8.63290937e-02 8.58316150e-02 8.53358290e-02 8.48417355e-02 + 8.43493348e-02 8.38586270e-02 8.33696121e-02 8.28822904e-02 8.23966618e-02 + 8.19127265e-02 8.14304847e-02 8.09499364e-02 8.04710817e-02 7.99939207e-02 + 7.95184537e-02 7.90446805e-02 7.85726014e-02 7.81022165e-02 7.76335259e-02 + 7.71665296e-02 7.67012279e-02 7.62376207e-02 7.57757082e-02 7.53154905e-02 + 7.48569677e-02 7.44001400e-02 7.39450073e-02 7.34915699e-02 7.30398277e-02 + 7.25897810e-02 7.21414298e-02 7.16947743e-02 7.12498144e-02 7.08065504e-02 + 7.03649822e-02 6.99251102e-02 6.94869342e-02 6.90504544e-02 6.86156710e-02 + 6.81825840e-02 6.77511935e-02 6.73214996e-02 6.68935024e-02 6.64672020e-02 + 6.60425985e-02 6.56196920e-02 6.51984826e-02 6.47789704e-02 6.43611555e-02 + 6.39450379e-02 6.35306178e-02 6.31178953e-02 6.27068704e-02 6.22975433e-02 + 6.18899141e-02 6.14839827e-02 6.10797494e-02 6.06772142e-02 6.02763772e-02 + 5.98772385e-02 5.94797982e-02 5.90840564e-02 5.86900131e-02 5.82976685e-02 + 5.79070227e-02 5.75180757e-02 5.71308276e-02 5.67452785e-02 5.63614285e-02 + 5.59792777e-02 5.55988261e-02 5.52200739e-02 5.48430212e-02 5.44676679e-02 + 5.40940143e-02 5.37220604e-02 5.33518062e-02 5.29832520e-02 5.26163976e-02 + 5.22512433e-02 5.18877891e-02 5.15260351e-02 5.11659814e-02 5.08076280e-02 + 5.04509751e-02 5.00960227e-02 4.97427708e-02 4.93912197e-02 4.90413693e-02 + 4.86932198e-02 4.83467711e-02 4.80020235e-02 4.76589769e-02 4.73176315e-02 + 4.69779873e-02 4.66400444e-02 4.63038029e-02 4.59692628e-02 4.56364243e-02 + 4.53052874e-02 4.49758521e-02 4.46481186e-02 4.43220870e-02 4.39977572e-02 + 4.36751294e-02 4.33542037e-02 4.30349801e-02 4.27174587e-02 4.24016395e-02 + 4.20875227e-02 4.17751083e-02 4.14643964e-02 4.11553870e-02 4.08480802e-02 + 4.05424762e-02 4.02385749e-02 3.99363764e-02 3.96358808e-02 3.93370881e-02 + 3.90399985e-02 3.87446120e-02 3.84509287e-02 3.81589486e-02 3.78686718e-02 + 3.75800983e-02 3.72932283e-02 3.70080618e-02 3.67245988e-02 3.64428394e-02 + 3.61627838e-02 3.58844318e-02 3.56077837e-02 3.53328395e-02 3.50595992e-02 + 3.47880629e-02 3.45182306e-02 3.42501025e-02 3.39836786e-02 3.37189589e-02 + 3.34559435e-02 3.31946324e-02 3.29350258e-02 3.26771236e-02 3.24209260e-02 + 3.21664330e-02 3.19136446e-02 3.16625610e-02 3.14131821e-02 3.11655080e-02 + 3.09195388e-02 3.06752746e-02 3.04327153e-02 3.01918611e-02 2.99527120e-02 + 2.97152680e-02 2.94795292e-02 2.92454957e-02 2.90131675e-02 2.87825447e-02 + 2.85536273e-02 2.83264153e-02 2.81009089e-02 2.78771081e-02 2.76550128e-02 + 2.74346233e-02 2.72159395e-02 2.69989614e-02 2.67836892e-02 2.65701228e-02 + 2.63582623e-02 2.61481079e-02 2.59396594e-02 2.57329170e-02 2.55278807e-02 + 2.53245505e-02 2.51229266e-02 2.49230089e-02 2.47247975e-02 2.45282924e-02 + 2.43334937e-02 2.41404014e-02 2.39490156e-02 2.37593363e-02 2.35713636e-02 + 2.33850975e-02 2.32005380e-02 2.30176851e-02 2.28365390e-02 2.26570997e-02 + 2.24793672e-02 2.23033415e-02 2.21290227e-02 2.19564108e-02 2.17855059e-02 + 2.16163080e-02 2.14488171e-02 2.12830333e-02 2.11189566e-02 2.09565871e-02 + 2.07959248e-02 2.06369696e-02 2.04797218e-02 2.03241812e-02 2.01703480e-02 + 2.00182221e-02 1.98678037e-02 1.97190927e-02 1.95720891e-02 1.94267931e-02 + 1.92832045e-02 1.91413236e-02 1.90011502e-02 1.88626845e-02 1.87259265e-02 + 1.85908761e-02 1.84575335e-02 1.83258986e-02 1.81959715e-02 1.80677522e-02 + 1.79412408e-02 1.78164372e-02 1.76933415e-02 1.75719538e-02 1.74522740e-02 + 1.73343022e-02 1.72180384e-02 1.71034827e-02 1.69906350e-02 1.68794954e-02 + 1.67700639e-02 1.66623405e-02 1.65563253e-02 1.64520183e-02 1.63494195e-02 + 1.62485289e-02 1.61493466e-02 1.60518726e-02 1.59561068e-02 1.58620494e-02 + 1.57697003e-02 1.56790596e-02 1.55901273e-02 1.55029034e-02 1.54173879e-02 + 1.53335808e-02 1.52514822e-02 1.51710921e-02 1.50924105e-02 1.50154374e-02 + 1.49401728e-02 1.48666168e-02 1.47947694e-02 1.47246305e-02 1.46562002e-02 + 1.45894786e-02 1.45244656e-02 1.44611612e-02 1.43995655e-02 1.43396785e-02 + 1.42815001e-02 1.42250305e-02 1.41702695e-02 1.41172173e-02 1.40658738e-02 + 1.40162391e-02 1.39683132e-02 1.39220960e-02 1.38775876e-02 1.38347880e-02 + 1.37936971e-02 1.37543151e-02 1.37166420e-02 1.36806776e-02 1.36464221e-02 + 1.36138754e-02 1.35830376e-02 1.35539086e-02 1.35264885e-02 1.35007773e-02 + 1.34767750e-02 1.34544815e-02 1.34338969e-02 1.34150212e-02 1.33978544e-02 + 1.33823966e-02 1.33686476e-02 1.33566075e-02 1.33462763e-02 1.33376541e-02 + 1.33307407e-02 1.33255363e-02 1.33220408e-02 1.33202542e-02 1.33201765e-02 + 1.33218078e-02 1.33251480e-02 1.33301970e-02 1.33369550e-02 1.33454220e-02 + 1.33555978e-02 1.33674825e-02 1.33810762e-02 1.33963787e-02 1.34133902e-02 + 1.34321105e-02 1.34525397e-02 1.34746779e-02 1.34985249e-02 1.35240808e-02 + 1.35513455e-02 1.35803192e-02 1.36110016e-02 1.36433930e-02 1.36774932e-02 + 1.37133022e-02 1.37508200e-02 1.37900467e-02 1.38309822e-02 1.38736265e-02 + 1.39179796e-02 1.39640414e-02 1.40118121e-02 1.40612914e-02 1.41124796e-02 + 1.41653765e-02 1.42199821e-02 1.42762964e-02 1.43343194e-02 1.43940512e-02 + 1.44554916e-02 1.45186406e-02 1.45834983e-02 1.46500646e-02 1.47183396e-02 + 1.47883231e-02 1.48600153e-02 1.49334160e-02 1.50085252e-02 1.50853430e-02 + 1.51638693e-02 1.52441041e-02 1.53260474e-02 1.54096992e-02 1.54950594e-02 + 1.55821280e-02 1.56709051e-02 1.57613905e-02 1.58535843e-02 1.59474864e-02 + 1.60430969e-02 1.61404156e-02 1.62394427e-02 1.63401780e-02 1.64426215e-02 + 1.65467732e-02 1.66526331e-02 1.67602012e-02 1.68694775e-02 1.69804618e-02 + 1.70931542e-02 1.72075547e-02 1.73236633e-02 1.74414798e-02 1.75610043e-02 + 1.76822368e-02 1.78051772e-02 1.79298256e-02 1.80561818e-02 1.81842458e-02 + 1.83140177e-02 1.84454973e-02 1.85786847e-02 1.87135798e-02 1.88501827e-02 + 1.89884931e-02 1.91285113e-02 1.92702370e-02 1.94136703e-02 1.95588111e-02 + 1.97056595e-02 1.98542153e-02 2.00044786e-02 2.01564492e-02 2.03101272e-02 + 2.04655126e-02 2.06226053e-02 2.07814052e-02 2.09419123e-02 2.11041267e-02 + 2.12680482e-02 2.14336768e-02 2.16010125e-02 2.17700553e-02 2.19408050e-02 + 2.21132617e-02 2.22874254e-02 2.24632959e-02 2.26408733e-02 2.28201575e-02 + 2.30011484e-02 2.31838461e-02 2.33682505e-02 2.35543615e-02 2.37421791e-02 + 2.39317033e-02 2.41229339e-02 2.43158711e-02 2.45105147e-02 2.47068647e-02 + 2.49049210e-02 2.51046836e-02 2.53061524e-02 2.55093275e-02 2.57142087e-02 + 2.59207960e-02 2.61290894e-02 2.63390888e-02 2.65507942e-02 2.67642055e-02 + 2.69793227e-02 2.71961457e-02 2.74146744e-02 2.76349090e-02 2.78568491e-02 + 2.80804949e-02 2.83058463e-02 2.85329032e-02 2.87616656e-02 2.89921334e-02 + 2.92243066e-02 2.94581851e-02 2.96937689e-02 2.99310578e-02 3.01700520e-02 + 3.04107512e-02 3.06531555e-02 3.08972648e-02 3.11430790e-02 3.13905981e-02 + 3.16398220e-02 3.18907507e-02 3.21433841e-02 3.23977222e-02 3.26537648e-02 + 3.29115120e-02 3.31709637e-02 3.34321199e-02 3.36949803e-02 3.39595451e-02 + 3.42258142e-02 3.44937874e-02 3.47634647e-02 3.50348461e-02 3.53079315e-02 + 3.55827209e-02 3.58592141e-02 3.61374112e-02 3.64173120e-02 3.66989165e-02 + 3.69822246e-02 3.72672363e-02 3.75539515e-02 3.78423701e-02 3.81324920e-02 + 3.84243173e-02 3.87178458e-02 3.90130775e-02 3.93100123e-02 3.96086502e-02 + 3.99089910e-02 4.02110347e-02 4.05147812e-02 4.08202305e-02 4.11273825e-02 + 4.14362371e-02 4.17467942e-02 4.20590539e-02 4.23730160e-02 4.26886804e-02 + 4.30060471e-02 4.33251159e-02 4.36458870e-02 4.39683600e-02 4.42925351e-02 + 4.46184120e-02 4.49459908e-02 4.52752714e-02 4.56062536e-02 4.59389375e-02 + 4.62733229e-02 4.66094097e-02 4.69471980e-02 4.72866875e-02 4.76278783e-02 + 4.79707703e-02 4.83153633e-02 4.86616573e-02 4.90096522e-02 4.93593480e-02 + 4.97107446e-02 5.00638418e-02 5.04186396e-02 5.07751380e-02 5.11333368e-02 + 5.14932360e-02 5.18548354e-02 5.22181351e-02 5.25831349e-02 5.29498347e-02 + 5.33182344e-02 5.36883341e-02 5.40601335e-02 5.44336326e-02 5.48088313e-02 + 5.51857296e-02 5.55643273e-02 5.59446244e-02 5.63266207e-02 5.67103163e-02 + 5.70957109e-02 5.74828046e-02 5.78715972e-02 5.82620886e-02 5.86542788e-02 + 5.90481677e-02 5.94437551e-02 5.98410410e-02 6.02400253e-02 6.06407080e-02 + 6.10430888e-02 6.14471678e-02 6.18529447e-02 6.22604197e-02 6.26695925e-02 + 6.30804630e-02 6.34930312e-02 6.39072970e-02 6.43232602e-02 6.47409209e-02 + 6.51602788e-02 6.55813340e-02 6.60040862e-02 6.64285354e-02 6.68546816e-02 + 6.72825245e-02 6.77120642e-02 6.81433005e-02 6.85762333e-02 6.90108625e-02 + 6.94471881e-02 6.98852099e-02 7.03249278e-02 7.07663417e-02 7.12094516e-02 + 7.16542573e-02 7.21007588e-02 7.25489558e-02 7.29988484e-02 7.34504365e-02 + 7.39037198e-02 7.43586984e-02 7.48153721e-02 7.52737408e-02 7.57338044e-02 + 7.61955628e-02 7.66590160e-02 7.71241637e-02 7.75910059e-02 7.80595425e-02 + 7.85297734e-02 7.90016985e-02 7.94753177e-02 7.99506308e-02 8.04276378e-02 + 8.09063385e-02 8.13867329e-02 8.18688208e-02 8.23526021e-02 8.28380768e-02 + 8.33252446e-02 8.38141056e-02 8.43046595e-02 8.47969063e-02 8.52908459e-02 + 8.57864782e-02 8.62838029e-02 8.67828201e-02 8.72835297e-02 8.77859314e-02 + 8.82900252e-02 8.87958110e-02 8.93032887e-02 8.98124581e-02 9.03233191e-02 + 9.08358717e-02 9.13501157e-02 9.18660509e-02 9.23836774e-02 9.29029949e-02 + 9.34240033e-02 9.39467025e-02 9.44710925e-02 9.49971730e-02 9.55249440e-02 + 9.60544054e-02 9.65855570e-02 9.71183987e-02 9.76529303e-02 9.81891519e-02 + 9.87270632e-02 9.92666641e-02 9.98079545e-02 1.00350934e-01 1.00895603e-01 + 1.01441962e-01 1.01990009e-01 1.02539745e-01 1.03091170e-01 1.03644283e-01 + 1.04199085e-01 1.04755576e-01 1.05313754e-01 1.05873621e-01 1.06435176e-01 + 1.06998419e-01 1.07563349e-01 1.08129968e-01 1.08698273e-01 1.09268266e-01 + 1.09839947e-01 1.10413314e-01 1.10988368e-01 1.11565110e-01 1.12143538e-01 + 1.12723652e-01 1.13305453e-01 1.13888941e-01 1.14474115e-01 1.15060974e-01 + 1.15649520e-01 1.16239751e-01 1.16831669e-01 1.17425271e-01 1.18020560e-01 + 1.18617533e-01 1.19216192e-01 1.19816535e-01 1.20418564e-01 1.21022277e-01 + 1.21627675e-01 1.22234757e-01 1.22843524e-01 1.23453975e-01 1.24066109e-01 + 1.24679928e-01 1.25295431e-01 1.25912617e-01 1.26531487e-01 1.27152040e-01 + 1.27774276e-01 1.28398196e-01 1.29023798e-01 1.29651083e-01 1.30280051e-01 + 1.30910702e-01 1.31543034e-01 1.32177050e-01 1.32812747e-01 1.33450126e-01 + 1.34089187e-01 1.34729929e-01 1.35372353e-01 1.36016459e-01 1.36662246e-01 + 1.37309713e-01 1.37958862e-01 1.38609692e-01 1.39262202e-01 1.39916393e-01 + 1.40572264e-01 1.41229815e-01 1.41889046e-01 1.42549958e-01 1.43212549e-01 + 1.43876819e-01 1.44542770e-01 1.45210399e-01 1.45879708e-01 1.46550695e-01 + 1.47223362e-01 1.47897707e-01 1.48573731e-01 1.49251433e-01 1.49930814e-01 + 1.50611872e-01 1.51294609e-01 1.51979023e-01 1.52665115e-01 1.53352885e-01 + 1.54042332e-01 1.54733456e-01 1.55426257e-01 1.56120735e-01 1.56816890e-01 + 1.57514721e-01 1.58214229e-01 1.58915413e-01 1.59618273e-01 1.60322809e-01 + 1.61029020e-01 1.61736908e-01 1.62446471e-01 1.63157709e-01 1.63870622e-01 + 1.64585210e-01 1.65301473e-01 1.66019411e-01 1.66739023e-01 1.67460310e-01 + 1.68183271e-01 1.68907906e-01 1.69634214e-01 1.70362197e-01 1.71091853e-01 + 1.71823182e-01 1.72556184e-01 1.73290860e-01 1.74027208e-01 1.74765229e-01 + 1.75504923e-01 1.76246289e-01 1.76989327e-01 1.77734037e-01 1.78480419e-01 + 1.79228473e-01 1.79978199e-01 1.80729595e-01 1.81482663e-01 1.82237402e-01 + 1.82993812e-01 1.83751893e-01 1.84511644e-01 1.85273065e-01 1.86036157e-01 + 1.86800919e-01 1.87567350e-01 1.88335451e-01 1.89105222e-01 1.89876662e-01 + 1.90649771e-01 1.91424549e-01 1.92200996e-01 1.92979112e-01 1.93758896e-01 + 1.94540348e-01 1.95323469e-01 1.96108257e-01 1.96894713e-01 1.97682837e-01 + 1.98472628e-01 1.99264087e-01 2.00057212e-01 2.00852004e-01 2.01648463e-01 + 2.02446589e-01 2.03246381e-01 2.04047839e-01 2.04850963e-01 2.05655753e-01 + 2.06462208e-01 2.07270329e-01 2.08080115e-01 2.08891567e-01 2.09704683e-01 + 2.10519464e-01 2.11335909e-01 2.12154019e-01 2.12973793e-01 2.13795231e-01 + 2.14618333e-01 2.15443098e-01 2.16269527e-01 2.17097619e-01 2.17927374e-01 + 2.18758792e-01 2.19591873e-01 2.20426616e-01 2.21263022e-01 2.22101090e-01 + 2.22940819e-01 2.23782211e-01 2.24625264e-01 2.25469978e-01 2.26316354e-01 + 2.27164390e-01 2.28014088e-01 2.28865446e-01 2.29718464e-01 2.30573143e-01 + 2.31429482e-01 2.32287480e-01 2.33147139e-01 2.34008457e-01 2.34871434e-01 + 2.35736070e-01 2.36602365e-01 2.37470319e-01 2.38339931e-01 2.39211202e-01 + 2.40084131e-01 2.40958717e-01 2.41834962e-01 2.42712864e-01 2.43592423e-01 + 2.44473640e-01 2.45356513e-01 2.46241044e-01 2.47127230e-01 2.48015074e-01 + 2.48904573e-01 2.49795728e-01 2.50688539e-01 2.51583006e-01 2.52479128e-01 + 2.53376905e-01 2.54276337e-01 2.55177424e-01 2.56080166e-01 2.56984562e-01 + 2.57890612e-01 2.58798316e-01 2.59707674e-01 2.60618685e-01 2.61531350e-01 + 2.62445667e-01 2.63361638e-01 2.64279262e-01 2.65198538e-01 2.66119466e-01 + 2.67042047e-01 2.67966279e-01 2.68892164e-01 2.69819699e-01 2.70748886e-01 + 2.71679724e-01 2.72612213e-01 2.73546353e-01 2.74482143e-01 2.75419584e-01 + 2.76358674e-01 2.77299415e-01 2.78241805e-01 2.79185844e-01 2.80131533e-01 + 2.81078870e-01 2.82027857e-01 2.82978492e-01 2.83930775e-01 2.84884707e-01 + 2.85840287e-01 2.86797514e-01 2.87756389e-01 2.88716911e-01 2.89679080e-01 + 2.90642896e-01 2.91608359e-01 2.92575468e-01 2.93544224e-01 2.94514625e-01 + 2.95486673e-01 2.96460366e-01 2.97435704e-01 2.98412687e-01 2.99391316e-01 + 3.00371589e-01 3.01353507e-01 3.02337069e-01 3.03322275e-01 3.04309125e-01 + 3.05297618e-01 3.06287755e-01 3.07279535e-01 3.08272958e-01 3.09268024e-01 + 3.10264733e-01 3.11263084e-01 3.12263076e-01 3.13264711e-01 3.14267987e-01 + 3.15272905e-01 3.16279464e-01 3.17287664e-01 3.18297505e-01 3.19308986e-01 + 3.20322108e-01 3.21336869e-01 3.22353271e-01 3.23371312e-01 3.24390992e-01 + 3.25412312e-01 3.26435271e-01 3.27459868e-01 3.28486104e-01 3.29513978e-01 + 3.30543490e-01 3.31574640e-01 3.32607428e-01 3.33641852e-01 3.34677914e-01 + 3.35715613e-01 3.36754949e-01 3.37795921e-01 3.38838529e-01 3.39882774e-01 + 3.40928653e-01 3.41976169e-01 3.43025320e-01 3.44076105e-01 3.45128526e-01 + 3.46182581e-01 3.47238271e-01 3.48295594e-01 3.49354552e-01 3.50415143e-01 + 3.51477368e-01 3.52541225e-01 3.53606716e-01 3.54673839e-01 3.55742595e-01 + 3.56812983e-01 3.57885003e-01 3.58958655e-01 3.60033939e-01 3.61110853e-01 + 3.62189399e-01 3.63269575e-01 3.64351382e-01 3.65434820e-01 3.66519887e-01 + 3.67606584e-01 3.68694911e-01 3.69784868e-01 3.70876453e-01 3.71969667e-01 + 3.73064510e-01 3.74160981e-01 3.75259081e-01 3.76358808e-01 3.77460163e-01 + 3.78563145e-01 3.79667755e-01 3.80773992e-01 3.81881855e-01 3.82991344e-01 + 3.84102460e-01 3.85215202e-01 3.86329570e-01 3.87445563e-01 3.88563181e-01 + 3.89682424e-01 3.90803292e-01 3.91925784e-01 3.93049901e-01 3.94175642e-01 + 3.95303006e-01 3.96431994e-01 3.97562605e-01 3.98694839e-01 3.99828696e-01 + 4.00964175e-01 4.02101276e-01 4.03240000e-01 4.04380345e-01 4.05522312e-01 + 4.06665899e-01 4.07811108e-01 4.08957938e-01 4.10106388e-01 4.11256458e-01 + 4.12408148e-01 4.13561458e-01 4.14716388e-01 4.15872936e-01 4.17031104e-01 + 4.18190890e-01 4.19352295e-01 4.20515317e-01 4.21679958e-01 4.22846216e-01 + 4.24014092e-01 4.25183585e-01 4.26354695e-01 4.27527421e-01 4.28701764e-01 + 4.29877723e-01 4.31055298e-01 4.32234488e-01 4.33415294e-01 4.34597715e-01 + 4.35781751e-01 4.36967401e-01 4.38154665e-01 4.39343544e-01 4.40534036e-01 + 4.41726142e-01 4.42919861e-01 4.44115193e-01 4.45312138e-01 4.46510695e-01 + 4.47710864e-01 4.48912645e-01 4.50116038e-01 4.51321043e-01 4.52527658e-01 + 4.53735885e-01 4.54945722e-01 4.56157169e-01 4.57370226e-01 4.58584894e-01 + 4.59801170e-01 4.61019056e-01 4.62238551e-01 4.63459655e-01 4.64682367e-01 + 4.65906688e-01 4.67132616e-01 4.68360152e-01 4.69589295e-01 4.70820046e-01 + 4.72052403e-01 4.73286367e-01 4.74521937e-01 4.75759113e-01 4.76997895e-01 + 4.78238283e-01 4.79480276e-01 4.80723873e-01 4.81969076e-01 4.83215882e-01 + 4.84464293e-01 4.85714308e-01 4.86965926e-01 4.88219148e-01 4.89473972e-01 + 4.90730400e-01 4.91988430e-01 4.93248062e-01 4.94509296e-01 4.95772131e-01 + 4.97036568e-01 4.98302606e-01 4.99570245e-01 5.00839485e-01 5.02110324e-01 + 5.03382764e-01 5.04656804e-01 5.05932442e-01 5.07209680e-01 5.08488517e-01 + 5.09768953e-01 5.11050986e-01 5.12334618e-01 5.13619847e-01 5.14906674e-01 + 5.16195098e-01 5.17485119e-01 5.18776737e-01 5.20069951e-01 5.21364761e-01 + 5.22661167e-01 5.23959168e-01 5.25258764e-01 5.26559955e-01 5.27862741e-01 + 5.29167122e-01 5.30473096e-01 5.31780664e-01 5.33089826e-01 5.34400580e-01 + 5.35712928e-01 5.37026868e-01 5.38342401e-01 5.39659526e-01 5.40978242e-01 + 5.42298550e-01 5.43620449e-01 5.44943939e-01 5.46269020e-01 5.47595691e-01 + 5.48923952e-01 5.50253802e-01 5.51585242e-01 5.52918272e-01 5.54252890e-01 + 5.55589096e-01 5.56926891e-01 5.58266274e-01 5.59607245e-01 5.60949803e-01 + 5.62293948e-01 5.63639680e-01 5.64986999e-01 5.66335903e-01 5.67686394e-01 + 5.69038470e-01 5.70392132e-01 5.71747378e-01 5.73104210e-01 5.74462626e-01 + 5.75822626e-01 5.77184210e-01 5.78547377e-01 5.79912128e-01 5.81278461e-01 + 5.82646378e-01 5.84015876e-01 5.85386957e-01 5.86759620e-01 5.88133864e-01 + 5.89509689e-01 5.90887095e-01 5.92266082e-01 5.93646649e-01 5.95028796e-01 + 5.96412522e-01 5.97797828e-01 5.99184713e-01 6.00573177e-01 6.01963219e-01 + 6.03354840e-01 6.04748038e-01 6.06142814e-01 6.07539167e-01 6.08937097e-01 + 6.10336603e-01 6.11737686e-01 6.13140346e-01 6.14544580e-01 6.15950391e-01 + 6.17357776e-01 6.18766736e-01 6.20177271e-01 6.21589379e-01 6.23003062e-01 + 6.24418319e-01 6.25835148e-01 6.27253551e-01 6.28673526e-01 6.30095073e-01 + 6.31518193e-01 6.32942884e-01 6.34369147e-01 6.35796981e-01 6.37226386e-01 + 6.38657361e-01 6.40089906e-01 6.41524022e-01 6.42959706e-01 6.44396960e-01 + 6.45835783e-01 6.47276175e-01 6.48718135e-01 6.50161663e-01 6.51606758e-01 + 6.53053421e-01 6.54501651e-01 6.55951448e-01 6.57402811e-01 6.58855740e-01 + 6.60310236e-01 6.61766296e-01 6.63223922e-01 6.64683112e-01 6.66143868e-01 + 6.67606187e-01 6.69070070e-01 6.70535517e-01 6.72002527e-01 6.73471100e-01 + 6.74941236e-01 6.76412934e-01 6.77886194e-01 6.79361015e-01 6.80837398e-01 + 1.19316516e-02 1.17837661e-02 1.16368916e-02 1.14910312e-02 1.13461881e-02 + 1.12023652e-02 1.10595657e-02 1.09177924e-02 1.07770486e-02 1.06373371e-02 + 1.04986608e-02 1.03610229e-02 1.02244262e-02 1.00888736e-02 9.95436796e-03 + 9.82091227e-03 9.68850936e-03 9.55716205e-03 9.42687318e-03 9.29764555e-03 + 9.16948195e-03 9.04238514e-03 8.91635788e-03 8.79140288e-03 8.66752287e-03 + 8.54472052e-03 8.42299850e-03 8.30235947e-03 8.18280604e-03 8.06434082e-03 + 7.94696640e-03 7.83068535e-03 7.71550020e-03 7.60141348e-03 7.48842769e-03 + 7.37654531e-03 7.26576880e-03 7.15610060e-03 7.04754311e-03 6.94009874e-03 + 6.83376985e-03 6.72855879e-03 6.62446789e-03 6.52149946e-03 6.41965576e-03 + 6.31893907e-03 6.21935162e-03 6.12089562e-03 6.02357326e-03 5.92738670e-03 + 5.83233810e-03 5.73842957e-03 5.64566320e-03 5.55404108e-03 5.46356524e-03 + 5.37423772e-03 5.28606051e-03 5.19903560e-03 5.11316493e-03 5.02845043e-03 + 4.94489402e-03 4.86249756e-03 4.78126291e-03 4.70119191e-03 4.62228636e-03 + 4.54454803e-03 4.46797870e-03 4.39258007e-03 4.31835387e-03 4.24530177e-03 + 4.17342543e-03 4.10272646e-03 4.03320649e-03 3.96486708e-03 3.89770979e-03 + 3.83173614e-03 3.76694764e-03 3.70334576e-03 3.64093194e-03 3.57970760e-03 + 3.51967415e-03 3.46083296e-03 3.40318535e-03 3.34673266e-03 3.29147617e-03 + 3.23741715e-03 3.18455682e-03 3.13289641e-03 3.08243708e-03 3.03318001e-03 + 2.98512631e-03 2.93827709e-03 2.89263342e-03 2.84819635e-03 2.80496690e-03 + 2.76294607e-03 2.72213481e-03 2.68253407e-03 2.64414475e-03 2.60696775e-03 + 2.57100391e-03 2.53625406e-03 2.50271900e-03 2.47039951e-03 2.43929633e-03 + 2.40941017e-03 2.38074173e-03 2.35329167e-03 2.32706061e-03 2.30204917e-03 + 2.27825792e-03 2.25568742e-03 2.23433817e-03 2.21421068e-03 2.19530540e-03 + 2.17762279e-03 2.16116324e-03 2.14592713e-03 2.13191482e-03 2.11912664e-03 + 2.10756286e-03 2.09722378e-03 2.08810961e-03 2.08022058e-03 2.07355687e-03 + 2.06811863e-03 2.06390598e-03 2.06091903e-03 2.05915784e-03 2.05862245e-03 + 2.05931288e-03 2.06122911e-03 2.06437109e-03 2.06873876e-03 2.07433201e-03 + 2.08115071e-03 2.08919471e-03 2.09846382e-03 2.10895782e-03 2.12067647e-03 + 2.13361950e-03 2.14778662e-03 2.16317748e-03 2.17979175e-03 2.19762903e-03 + 2.21668892e-03 2.23697097e-03 2.25847471e-03 2.28119965e-03 2.30514526e-03 + 2.33031099e-03 2.35669626e-03 2.38430046e-03 2.41312296e-03 2.44316308e-03 + 2.47442014e-03 2.50689342e-03 2.54058217e-03 2.57548561e-03 2.61160294e-03 + 2.64893333e-03 2.68747592e-03 2.72722982e-03 2.76819412e-03 2.81036787e-03 + 2.85375012e-03 2.89833986e-03 2.94413606e-03 2.99113769e-03 3.03934365e-03 + 3.08875285e-03 3.13936416e-03 3.19117640e-03 3.24418841e-03 3.29839896e-03 + 3.35380682e-03 3.41041071e-03 3.46820936e-03 3.52720143e-03 3.58738558e-03 + 3.64876043e-03 3.71132460e-03 3.77507665e-03 3.84001514e-03 3.90613858e-03 + 3.97344547e-03 4.04193428e-03 4.11160346e-03 4.18245143e-03 4.25447658e-03 + 4.32767727e-03 4.40205185e-03 4.47759865e-03 4.55431593e-03 4.63220199e-03 + 4.71125505e-03 4.79147333e-03 4.87285502e-03 4.95539830e-03 5.03910129e-03 + 5.12396213e-03 5.20997890e-03 5.29714966e-03 5.38547247e-03 5.47494535e-03 + 5.56556628e-03 5.65733324e-03 5.75024419e-03 5.84429703e-03 5.93948968e-03 + 6.03582001e-03 6.13328588e-03 6.23188511e-03 6.33161551e-03 6.43247487e-03 + 6.53446095e-03 6.63757148e-03 6.74180419e-03 6.84715676e-03 6.95362687e-03 + 7.06121216e-03 7.16991026e-03 7.27971878e-03 7.39063530e-03 7.50265737e-03 + 7.61578255e-03 7.73000833e-03 7.84533223e-03 7.96175172e-03 8.07926424e-03 + 8.19786724e-03 8.31755813e-03 8.43833428e-03 8.56019309e-03 8.68313189e-03 + 8.80714802e-03 8.93223879e-03 9.05840148e-03 9.18563337e-03 9.31393170e-03 + 9.44329371e-03 9.57371661e-03 9.70519759e-03 9.83773382e-03 9.97132246e-03 + 1.01059606e-02 1.02416455e-02 1.03783741e-02 1.05161435e-02 1.06549508e-02 + 1.07947931e-02 1.09356673e-02 1.10775705e-02 1.12204997e-02 1.13644517e-02 + 1.15094237e-02 1.16554125e-02 1.18024151e-02 1.19504282e-02 1.20994490e-02 + 1.22494741e-02 1.24005005e-02 1.25525250e-02 1.27055444e-02 1.28595555e-02 + 1.30145552e-02 1.31705401e-02 1.33275071e-02 1.34854528e-02 1.36443741e-02 + 1.38042677e-02 1.39651301e-02 1.41269582e-02 1.42897485e-02 1.44534978e-02 + 1.46182027e-02 1.47838598e-02 1.49504657e-02 1.51180170e-02 1.52865103e-02 + 1.54559422e-02 1.56263093e-02 1.57976080e-02 1.59698349e-02 1.61429866e-02 + 1.63170596e-02 1.64920502e-02 1.66679551e-02 1.68447707e-02 1.70224935e-02 + 1.72011198e-02 1.73806462e-02 1.75610691e-02 1.77423848e-02 1.79245899e-02 + 1.81076806e-02 1.82916533e-02 1.84765045e-02 1.86622305e-02 1.88488276e-02 + 1.90362922e-02 1.92246206e-02 1.94138091e-02 1.96038541e-02 1.97947518e-02 + 1.99864985e-02 2.01790905e-02 2.03725242e-02 2.05667957e-02 2.07619013e-02 + 2.09578372e-02 2.11545998e-02 2.13521852e-02 2.15505896e-02 2.17498093e-02 + 2.19498405e-02 2.21506794e-02 2.23523222e-02 2.25547650e-02 2.27580040e-02 + 2.29620355e-02 2.31668555e-02 2.33724603e-02 2.35788460e-02 2.37860087e-02 + 2.39939446e-02 2.42026499e-02 2.44121205e-02 2.46223528e-02 2.48333427e-02 + 2.50450864e-02 2.52575801e-02 2.54708198e-02 2.56848016e-02 2.58995216e-02 + 2.61149759e-02 2.63311606e-02 2.65480717e-02 2.67657054e-02 2.69840578e-02 + 2.72031248e-02 2.74229026e-02 2.76433871e-02 2.78645746e-02 2.80864610e-02 + 2.83090425e-02 2.85323149e-02 2.87562745e-02 2.89809172e-02 2.92062390e-02 + 2.94322361e-02 2.96589045e-02 2.98862402e-02 3.01142392e-02 3.03428976e-02 + 3.05722114e-02 3.08021766e-02 3.10327893e-02 3.12640455e-02 3.14959413e-02 + 3.17284726e-02 3.19616355e-02 3.21954260e-02 3.24298402e-02 3.26648740e-02 + 3.29005236e-02 3.31367848e-02 3.33736539e-02 3.36111267e-02 3.38491993e-02 + 3.40878677e-02 3.43271281e-02 3.45669763e-02 3.48074084e-02 3.50484206e-02 + 3.52900087e-02 3.55321689e-02 3.57748971e-02 3.60181895e-02 3.62620420e-02 + 3.65064508e-02 3.67514117e-02 3.69969210e-02 3.72429746e-02 3.74895686e-02 + 3.77366991e-02 3.79843621e-02 3.82325537e-02 3.84812698e-02 3.87305067e-02 + 3.89802604e-02 3.92305269e-02 3.94813024e-02 3.97325829e-02 3.99843644e-02 + 4.02366431e-02 4.04894151e-02 4.07426765e-02 4.09964234e-02 4.12506518e-02 + 4.15053579e-02 4.17605378e-02 4.20161876e-02 4.22723034e-02 4.25288815e-02 + 4.27859178e-02 4.30434086e-02 4.33013499e-02 4.35597380e-02 4.38185689e-02 + 4.40778389e-02 4.43375441e-02 4.45976807e-02 4.48582449e-02 4.51192328e-02 + 4.53806406e-02 4.56424645e-02 4.59047007e-02 4.61673455e-02 4.64303950e-02 + 4.66938455e-02 4.69576932e-02 4.72219342e-02 4.74865650e-02 4.77515816e-02 + 4.80169804e-02 4.82827576e-02 4.85489095e-02 4.88154324e-02 4.90823225e-02 + 4.93495761e-02 4.96171896e-02 4.98851592e-02 5.01534812e-02 5.04221520e-02 + 5.06911679e-02 5.09605252e-02 5.12302202e-02 5.15002494e-02 5.17706091e-02 + 5.20412956e-02 5.23123054e-02 5.25836347e-02 5.28552801e-02 5.31272378e-02 + 5.33995044e-02 5.36720762e-02 5.39449496e-02 5.42181211e-02 5.44915872e-02 + 5.47653442e-02 5.50393887e-02 5.53137171e-02 5.55883259e-02 5.58632116e-02 + 5.61383707e-02 5.64137997e-02 5.66894951e-02 5.69654535e-02 5.72416713e-02 + 5.75181451e-02 5.77948716e-02 5.80718471e-02 5.83490684e-02 5.86265320e-02 + 5.89042345e-02 5.91821725e-02 5.94603427e-02 5.97387415e-02 6.00173658e-02 + 6.02962120e-02 6.05752770e-02 6.08545573e-02 6.11340496e-02 6.14137506e-02 + 6.16936570e-02 6.19737655e-02 6.22540729e-02 6.25345758e-02 6.28152709e-02 + 6.30961552e-02 6.33772252e-02 6.36584778e-02 6.39399097e-02 6.42215178e-02 + 6.45032988e-02 6.47852496e-02 6.50673669e-02 6.53496477e-02 6.56320887e-02 + 6.59146868e-02 6.61974389e-02 6.64803419e-02 6.67633926e-02 6.70465880e-02 + 6.73299249e-02 6.76134004e-02 6.78970112e-02 6.81807545e-02 6.84646270e-02 + 6.87486259e-02 6.90327480e-02 6.93169904e-02 6.96013501e-02 6.98858240e-02 + 7.01704093e-02 7.04551029e-02 7.07399019e-02 7.10248033e-02 7.13098043e-02 + 7.15949019e-02 7.18800932e-02 7.21653753e-02 7.24507453e-02 7.27362004e-02 + 7.30217377e-02 7.33073544e-02 7.35930475e-02 7.38788144e-02 7.41646521e-02 + 7.44505580e-02 7.47365291e-02 7.50225627e-02 7.53086561e-02 7.55948066e-02 + 7.58810112e-02 7.61672674e-02 7.64535724e-02 7.67399235e-02 7.70263181e-02 + 7.73127534e-02 7.75992267e-02 7.78857354e-02 7.81722770e-02 7.84588486e-02 + 7.87454477e-02 7.90320718e-02 7.93187181e-02 7.96053841e-02 7.98920673e-02 + 8.01787651e-02 8.04654749e-02 8.07521941e-02 8.10389204e-02 8.13256510e-02 + 8.16123836e-02 8.18991157e-02 8.21858447e-02 8.24725683e-02 8.27592839e-02 + 8.30459891e-02 8.33326815e-02 8.36193586e-02 8.39060181e-02 8.41926576e-02 + 8.44792746e-02 8.47658669e-02 8.50524319e-02 8.53389675e-02 8.56254713e-02 + 8.59119408e-02 8.61983740e-02 8.64847683e-02 8.67711216e-02 8.70574315e-02 + 8.73436959e-02 8.76299124e-02 8.79160788e-02 8.82021929e-02 8.84882524e-02 + 8.87742552e-02 8.90601991e-02 8.93460819e-02 8.96319014e-02 8.99176554e-02 + 9.02033419e-02 9.04889586e-02 9.07745035e-02 9.10599745e-02 9.13453694e-02 + 9.16306861e-02 9.19159227e-02 9.22010770e-02 9.24861469e-02 9.27711305e-02 + 9.30560257e-02 9.33408305e-02 9.36255428e-02 9.39101607e-02 9.41946823e-02 + 9.44791055e-02 9.47634283e-02 9.50476489e-02 9.53317653e-02 9.56157755e-02 + 9.58996777e-02 9.61834699e-02 9.64671503e-02 9.67507170e-02 9.70341681e-02 + 9.73175018e-02 9.76007161e-02 9.78838094e-02 9.81667797e-02 9.84496252e-02 + 9.87323442e-02 9.90149348e-02 9.92973954e-02 9.95797240e-02 9.98619190e-02 + 1.00143979e-01 1.00425901e-01 1.00707685e-01 1.00989328e-01 1.01270829e-01 + 1.01552185e-01 1.01833397e-01 1.02114461e-01 1.02395376e-01 1.02676140e-01 + 1.02956752e-01 1.03237211e-01 1.03517513e-01 1.03797659e-01 1.04077646e-01 + 1.04357473e-01 1.04637138e-01 1.04916640e-01 1.05195977e-01 1.05475147e-01 + 1.05754150e-01 1.06032982e-01 1.06311644e-01 1.06590134e-01 1.06868449e-01 + 1.07146589e-01 1.07424552e-01 1.07702336e-01 1.07979941e-01 1.08257365e-01 + 1.08534605e-01 1.08811662e-01 1.09088533e-01 1.09365218e-01 1.09641714e-01 + 1.09918020e-01 1.10194135e-01 1.10470058e-01 1.10745788e-01 1.11021322e-01 + 1.11296660e-01 1.11571800e-01 1.11846741e-01 1.12121482e-01 1.12396021e-01 + 1.12670358e-01 1.12944490e-01 1.13218418e-01 1.13492138e-01 1.13765651e-01 + 1.14038955e-01 1.14312048e-01 1.14584930e-01 1.14857599e-01 1.15130055e-01 + 1.15402295e-01 1.15674319e-01 1.15946126e-01 1.16217714e-01 1.16489083e-01 + 1.16760231e-01 1.17031157e-01 1.17301860e-01 1.17572339e-01 1.17842593e-01 + 1.18112620e-01 1.18382420e-01 1.18651992e-01 1.18921334e-01 1.19190445e-01 + 1.19459326e-01 1.19727973e-01 1.19996387e-01 1.20264566e-01 1.20532510e-01 + 1.20800216e-01 1.21067686e-01 1.21334917e-01 1.21601908e-01 1.21868658e-01 + 1.22135167e-01 1.22401434e-01 1.22667458e-01 1.22933237e-01 1.23198771e-01 + 1.23464058e-01 1.23729099e-01 1.23993892e-01 1.24258436e-01 1.24522731e-01 + 1.24786775e-01 1.25050567e-01 1.25314108e-01 1.25577395e-01 1.25840428e-01 + 1.26103207e-01 1.26365730e-01 1.26627997e-01 1.26890006e-01 1.27151758e-01 + 1.27413251e-01 1.27674484e-01 1.27935457e-01 1.28196169e-01 1.28456619e-01 + 1.28716807e-01 1.28976731e-01 1.29236391e-01 1.29495787e-01 1.29754917e-01 + 1.30013780e-01 1.30272377e-01 1.30530707e-01 1.30788768e-01 1.31046560e-01 + 1.31304083e-01 1.31561335e-01 1.31818316e-01 1.32075026e-01 1.32331463e-01 + 1.32587628e-01 1.32843519e-01 1.33099136e-01 1.33354479e-01 1.33609546e-01 + 1.33864337e-01 1.34118851e-01 1.34373088e-01 1.34627048e-01 1.34880730e-01 + 1.35134132e-01 1.35387255e-01 1.35640099e-01 1.35892661e-01 1.36144943e-01 + 1.36396943e-01 1.36648661e-01 1.36900097e-01 1.37151249e-01 1.37402118e-01 + 1.37652702e-01 1.37903003e-01 1.38153017e-01 1.38402747e-01 1.38652190e-01 + 1.38901347e-01 1.39150217e-01 1.39398799e-01 1.39647094e-01 1.39895100e-01 + 1.40142817e-01 1.40390246e-01 1.40637384e-01 1.40884233e-01 1.41130791e-01 + 1.41377059e-01 1.41623035e-01 1.41868719e-01 1.42114112e-01 1.42359212e-01 + 1.42604020e-01 1.42848534e-01 1.43092755e-01 1.43336681e-01 1.43580314e-01 + 1.43823652e-01 1.44066695e-01 1.44309444e-01 1.44551896e-01 1.44794053e-01 + 1.45035913e-01 1.45277477e-01 1.45518744e-01 1.45759714e-01 1.46000386e-01 + 1.46240761e-01 1.46480838e-01 1.46720616e-01 1.46960096e-01 1.47199277e-01 + 1.47438159e-01 1.47676742e-01 1.47915025e-01 1.48153009e-01 1.48390692e-01 + 1.48628075e-01 1.48865157e-01 1.49101939e-01 1.49338419e-01 1.49574598e-01 + 1.49810476e-01 1.50046052e-01 1.50281327e-01 1.50516299e-01 1.50750969e-01 + 1.50985337e-01 1.51219402e-01 1.51453164e-01 1.51686623e-01 1.51919779e-01 + 1.52152632e-01 1.52385181e-01 1.52617427e-01 1.52849368e-01 1.53081006e-01 + 1.53312340e-01 1.53543370e-01 1.53774095e-01 1.54004516e-01 1.54234632e-01 + 1.54464444e-01 1.54693950e-01 1.54923152e-01 1.55152049e-01 1.55380640e-01 + 1.55608926e-01 1.55836907e-01 1.56064583e-01 1.56291953e-01 1.56519017e-01 + 1.56745775e-01 1.56972228e-01 1.57198375e-01 1.57424216e-01 1.57649751e-01 + 1.57874980e-01 1.58099903e-01 1.58324520e-01 1.58548831e-01 1.58772835e-01 + 1.58996533e-01 1.59219925e-01 1.59443010e-01 1.59665790e-01 1.59888262e-01 + 1.60110429e-01 1.60332289e-01 1.60553842e-01 1.60775089e-01 1.60996030e-01 + 1.61216664e-01 1.61436992e-01 1.61657013e-01 1.61876728e-01 1.62096136e-01 + 1.62315238e-01 1.62534034e-01 1.62752523e-01 1.62970706e-01 1.63188582e-01 + 1.63406152e-01 1.63623416e-01 1.63840374e-01 1.64057026e-01 1.64273371e-01 + 1.64489411e-01 1.64705144e-01 1.64920571e-01 1.65135693e-01 1.65350508e-01 + 1.65565018e-01 1.65779222e-01 1.65993121e-01 1.66206714e-01 1.66420001e-01 + 1.66632983e-01 1.66845660e-01 1.67058031e-01 1.67270097e-01 1.67481858e-01 + 1.67693314e-01 1.67904465e-01 1.68115312e-01 1.68325854e-01 1.68536091e-01 + 1.68746023e-01 1.68955652e-01 1.69164976e-01 1.69373996e-01 1.69582712e-01 + 1.69791124e-01 1.69999232e-01 1.70207037e-01 1.70414538e-01 1.70621735e-01 + 1.70828630e-01 1.71035221e-01 1.71241510e-01 1.71447495e-01 1.71653178e-01 + 1.71858558e-01 1.72063636e-01 1.72268412e-01 1.72472886e-01 1.72677057e-01 + 1.72880927e-01 1.73084495e-01 1.73287762e-01 1.73490728e-01 1.73693392e-01 + 1.73895756e-01 1.74097819e-01 1.74299581e-01 1.74501043e-01 1.74702204e-01 + 1.74903066e-01 1.75103627e-01 1.75303889e-01 1.75503852e-01 1.75703515e-01 + 1.75902879e-01 1.76101944e-01 1.76300710e-01 1.76499178e-01 1.76697348e-01 + 1.76895219e-01 1.77092792e-01 1.77290068e-01 1.77487046e-01 1.77683727e-01 + 1.77880111e-01 1.78076198e-01 1.78271989e-01 1.78467483e-01 1.78662680e-01 + 1.78857582e-01 1.79052188e-01 1.79246498e-01 1.79440514e-01 1.79634234e-01 + 1.79827659e-01 1.80020789e-01 1.80213625e-01 1.80406167e-01 1.80598415e-01 + 1.80790370e-01 1.80982031e-01 1.81173398e-01 1.81364473e-01 1.81555255e-01 + 1.81745745e-01 1.81935942e-01 1.82125848e-01 1.82315462e-01 1.82504784e-01 + 1.82693815e-01 1.82882555e-01 1.83071004e-01 1.83259163e-01 1.83447032e-01 + 1.83634611e-01 1.83821900e-01 1.84008900e-01 1.84195611e-01 1.84382033e-01 + 1.84568166e-01 1.84754012e-01 1.84939569e-01 1.85124838e-01 1.85309820e-01 + 1.85494514e-01 1.85678922e-01 1.85863043e-01 1.86046878e-01 1.86230426e-01 + 1.86413689e-01 1.86596666e-01 1.86779358e-01 1.86961765e-01 1.87143887e-01 + 1.87325725e-01 1.87507279e-01 1.87688549e-01 1.87869536e-01 1.88050239e-01 + 1.88230659e-01 1.88410797e-01 1.88590653e-01 1.88770226e-01 1.88949518e-01 + 1.89128528e-01 1.89307257e-01 1.89485705e-01 1.89663873e-01 1.89841761e-01 + 1.90019368e-01 1.90196696e-01 1.90373745e-01 1.90550515e-01 1.90727005e-01 + 1.90903218e-01 1.91079153e-01 1.91254809e-01 1.91430189e-01 1.91605291e-01 + 1.91780116e-01 1.91954665e-01 1.92128937e-01 1.92302934e-01 1.92476655e-01 + 1.92650101e-01 1.92823272e-01 1.92996169e-01 1.93168791e-01 1.93341139e-01 + 1.93513213e-01 1.93685014e-01 1.93856543e-01 1.94027798e-01 1.94198781e-01 + 1.94369492e-01 1.94539932e-01 1.94710100e-01 1.94879997e-01 1.95049623e-01 + 1.95218979e-01 1.95388065e-01 1.95556881e-01 1.95725428e-01 1.95893706e-01 + 1.96061715e-01 1.96229455e-01 1.96396928e-01 1.96564133e-01 1.96731070e-01 + 1.96897741e-01 1.97064144e-01 1.97230282e-01 1.97396153e-01 1.97561758e-01 + 1.97727099e-01 1.97892174e-01 1.98056984e-01 1.98221530e-01 1.98385813e-01 + 1.98549831e-01 1.98713586e-01 1.98877078e-01 1.99040308e-01 1.99203275e-01 + 1.99365980e-01 1.99528424e-01 1.99690606e-01 1.99852528e-01 2.00014188e-01 + 2.00175589e-01 2.00336730e-01 2.00497611e-01 2.00658233e-01 2.00818596e-01 + 2.00978701e-01 2.01138547e-01 2.01298136e-01 2.01457467e-01 2.01616542e-01 + 2.01775359e-01 2.01933920e-01 2.02092225e-01 2.02250274e-01 2.02408068e-01 + 2.02565607e-01 2.02722891e-01 2.02879921e-01 2.03036697e-01 2.03193220e-01 + 2.03349489e-01 2.03505505e-01 2.03661269e-01 2.03816780e-01 2.03972040e-01 + 2.04127048e-01 2.04281805e-01 2.04436312e-01 2.04590568e-01 2.04744573e-01 + 2.04898329e-01 2.05051836e-01 2.05205094e-01 2.05358103e-01 2.05510864e-01 + 2.05663377e-01 2.05815642e-01 2.05967660e-01 2.06119432e-01 2.06270956e-01 + 2.06422235e-01 2.06573268e-01 2.06724055e-01 2.06874598e-01 2.07024895e-01 + 2.07174948e-01 2.07324757e-01 2.07474323e-01 2.07623645e-01 2.07772725e-01 + 2.07921561e-01 2.08070156e-01 2.08218508e-01 2.08366619e-01 2.08514489e-01 + 2.08662119e-01 2.08809507e-01 2.08956656e-01 2.09103565e-01 2.09250235e-01 + 2.09396665e-01 2.09542857e-01 2.09688811e-01 2.09834526e-01 2.09980005e-01 + 2.10125246e-01 2.10270250e-01 2.10415017e-01 2.10559549e-01 2.10703844e-01 + 2.10847905e-01 2.10991730e-01 2.11135320e-01 2.11278676e-01 2.11421799e-01 + 2.11564687e-01 2.11707342e-01 2.11849765e-01 2.11991955e-01 2.12133912e-01 + 2.12275638e-01 2.12417132e-01 2.12558395e-01 2.12699428e-01 2.12840230e-01 + 2.12980802e-01 2.13121144e-01 2.13261257e-01 2.13401141e-01 2.13540796e-01 + 2.13680223e-01 2.13819422e-01 2.13958394e-01 2.14097138e-01 2.14235656e-01 + 2.14373947e-01 2.14512011e-01 2.14649851e-01 2.14787464e-01 2.14924853e-01 + 2.15062017e-01 2.15198957e-01 2.15335672e-01 2.15472164e-01 2.15608433e-01 + 2.15744479e-01 2.15880302e-01 2.16015903e-01 2.16151282e-01 2.16286440e-01 + 2.16421376e-01 2.16556092e-01 2.16690587e-01 2.16824862e-01 2.16958918e-01 + 2.17092754e-01 2.17226371e-01 2.17359769e-01 2.17492949e-01 2.17625911e-01 + 2.17758656e-01 2.17891183e-01 2.18023493e-01 2.18155587e-01 2.18287464e-01 + 2.18419126e-01 2.18550572e-01 2.18681803e-01 2.18812819e-01 2.18943621e-01 + 2.19074208e-01 2.19204582e-01 2.19334742e-01 2.19464690e-01 2.19594424e-01 + 2.19723946e-01 2.19853257e-01 2.19982355e-01 2.20111242e-01 2.20239919e-01 + 2.20368384e-01 2.20496640e-01 2.20624685e-01 2.20752521e-01 2.20880148e-01 + 2.21007566e-01 2.21134775e-01 2.21261776e-01 2.21388569e-01 2.21515155e-01 + 2.21641533e-01 2.21767705e-01 2.21893670e-01 2.22019429e-01 2.22144983e-01 + 2.22270331e-01 2.22395473e-01 2.22520411e-01 2.22645145e-01 2.22769675e-01 + 2.22894000e-01 2.23018123e-01 2.23142042e-01 2.23265759e-01 2.23389273e-01 + 2.23512586e-01 2.23635696e-01 2.23758606e-01 2.23881314e-01 2.24003822e-01 + 2.24126129e-01 2.24248236e-01 2.24370144e-01 2.24491852e-01 2.24613362e-01 + 2.24734673e-01 2.24855785e-01 2.24976700e-01 2.25097417e-01 2.25217936e-01 + 2.25338259e-01 2.25458385e-01 2.25578315e-01 2.25698048e-01 2.25817587e-01 + 2.25936930e-01 2.26056078e-01 2.26175031e-01 2.26293790e-01 2.26412355e-01 + 2.26530727e-01 2.26648905e-01 2.26766890e-01 2.26884683e-01 2.27002283e-01 + 2.27119691e-01 2.27236908e-01 2.27353934e-01 2.27470768e-01 2.27587412e-01 + 2.27703865e-01 2.27820129e-01 2.27936203e-01 2.28052087e-01 2.28167783e-01 + 2.28283290e-01 2.28398608e-01 2.28513738e-01 2.28628681e-01 2.28743437e-01 + 2.28858005e-01 2.28972386e-01 2.29086581e-01 2.29200591e-01 2.29314414e-01 + 2.29428052e-01 2.29541504e-01 2.29654772e-01 2.29767856e-01 2.29880755e-01 + 2.29993470e-01 2.30106002e-01 2.30218351e-01 2.30330517e-01 2.30442500e-01 + 2.30554301e-01 2.30665921e-01 2.30777358e-01 2.30888614e-01 2.30999690e-01 + 2.31110584e-01 2.31221299e-01 2.31331833e-01 2.31442188e-01 2.31552363e-01 + 2.31662359e-01 2.31772176e-01 2.31881815e-01 2.31991276e-01 2.32100559e-01 + 2.32209665e-01 2.32318593e-01 2.32427344e-01 2.32535919e-01 2.32644318e-01 + 2.32752540e-01 2.32860587e-01 2.32968459e-01 2.33076155e-01 2.33183677e-01 + 2.33291025e-01 2.33398198e-01 2.33505198e-01 2.33612024e-01 2.33718676e-01 + 2.33825157e-01 2.33931464e-01 2.34037599e-01 2.34143562e-01 2.34249354e-01 + 2.34354974e-01 2.34460423e-01 2.34565702e-01 2.34670810e-01 2.34775748e-01 + 2.34880516e-01 2.34985114e-01 2.35089544e-01 2.35193804e-01 2.35297896e-01 + 2.35401819e-01 2.35505574e-01 2.35609162e-01 2.35712582e-01 2.35815835e-01 + 2.35918921e-01 2.36021841e-01 2.36124594e-01 2.36227182e-01 2.36329603e-01 + 2.36431860e-01 2.36533951e-01 2.36635878e-01 2.36737640e-01 2.36839238e-01 + 2.36940672e-01 2.37041942e-01 2.37143049e-01 2.37243994e-01 2.37344775e-01 + 2.37445394e-01 2.37545851e-01 2.37646146e-01 2.37746279e-01 2.37846251e-01 + 2.37946062e-01 2.38045713e-01 2.38145203e-01 2.38244533e-01 2.38343703e-01 + 2.38442713e-01 2.38541565e-01 2.38640257e-01 2.38738790e-01 2.38837166e-01 + 2.38935383e-01 2.39033442e-01 2.39131344e-01 2.39229088e-01 2.39326676e-01 + 2.39424106e-01 2.39521381e-01 2.39618499e-01 2.39715461e-01 2.39812268e-01 + 2.39908919e-01 2.40005416e-01 2.40101757e-01 2.40197944e-01 2.40293977e-01 + 2.40389856e-01 2.40485582e-01 2.40581154e-01 2.40676573e-01 2.40771839e-01 + 2.40866953e-01 2.40961914e-01 2.41056724e-01 2.41151382e-01 2.41245888e-01 + 2.41340243e-01 2.41434447e-01 2.41528501e-01 2.41622404e-01 2.41716158e-01 + 2.41809761e-01 2.41903215e-01 2.41996520e-01 2.42089675e-01 2.42182682e-01 + 2.42275541e-01 2.42368251e-01 2.42460813e-01 2.42553228e-01 2.42645496e-01 + 2.42737616e-01 2.42829589e-01 2.42921416e-01 2.43013097e-01 2.43104631e-01 + 2.43196020e-01 2.43287263e-01 2.43378361e-01 2.43469314e-01 2.43560122e-01 + 2.43650786e-01 2.43741306e-01 2.43831681e-01 2.43921913e-01 2.44012001e-01 + 2.44101947e-01 2.44191749e-01 2.44281409e-01 2.44370926e-01 2.44460302e-01 + 2.44549535e-01 2.44638627e-01 2.44727577e-01 2.44816386e-01 2.44905055e-01 + 2.44993583e-01 2.45081970e-01 2.45170218e-01 2.45258325e-01 2.45346293e-01 + 2.45434122e-01 2.45521812e-01 2.45609362e-01 2.45696775e-01 2.45784049e-01 + 2.45871185e-01 2.45958183e-01 2.46045043e-01 2.46131766e-01 2.46218353e-01 + 2.46304802e-01 2.46391115e-01 2.46477291e-01 2.46563332e-01 2.46649236e-01 + 2.46735006e-01 2.46820639e-01 2.46906138e-01 2.46991502e-01 2.47076731e-01 + 2.47161826e-01 2.47246787e-01 2.47331614e-01 2.47416307e-01 2.47500867e-01 + 2.47585294e-01 2.47669588e-01 2.47753749e-01 2.47837778e-01 2.47921675e-01 + 2.48005440e-01 2.48089073e-01 2.48172575e-01 2.48255945e-01 2.48339185e-01 + 2.48422294e-01 2.48505272e-01 2.48588120e-01 2.48670839e-01 2.48753427e-01 + 2.48835886e-01 2.48918215e-01 2.49000416e-01 2.49082487e-01 2.49164431e-01 + 2.49246245e-01 2.49327932e-01 2.49409490e-01 2.49490922e-01 2.49572225e-01 + 2.49653402e-01 2.49734451e-01 2.49815374e-01 2.49896170e-01 2.49976840e-01 + 2.50057384e-01 2.50137802e-01 2.50218094e-01 2.50298261e-01 2.50378303e-01 + 2.50458221e-01 2.50538013e-01 2.50617681e-01 2.50697225e-01 2.50776645e-01 + 2.50855941e-01 2.50935113e-01 2.51014162e-01 2.51093088e-01 2.51171892e-01 + 2.51250572e-01 2.51329130e-01 2.51407566e-01 2.51485880e-01 2.51564073e-01 + 2.51642143e-01 2.51720093e-01 2.51797921e-01 2.51875629e-01 2.51953216e-01 + 2.52030682e-01 2.52108028e-01 2.52185254e-01 2.52262361e-01 2.52339348e-01 + 2.52416215e-01 2.52492964e-01 2.52569593e-01 2.52646104e-01 2.52722497e-01 + 2.52798771e-01 2.52874927e-01 2.52950965e-01 2.53026886e-01 2.53102689e-01 + 2.53178375e-01 2.53253944e-01 2.53329397e-01 2.53404733e-01 2.53479952e-01 + 2.53555056e-01 2.53630043e-01 2.53704915e-01 2.53779671e-01 2.53854312e-01 + 2.53928839e-01 2.54003250e-01 2.54077546e-01 2.54151728e-01 2.54225796e-01 + 2.54299750e-01 2.54373590e-01 2.54447316e-01 2.54520930e-01 2.54594429e-01 + 2.54667816e-01 2.54741090e-01 2.54814252e-01 2.54887301e-01 2.54960238e-01 + 2.55033063e-01 2.55105776e-01 2.55178378e-01 2.55250868e-01 2.55323247e-01 + 2.55395516e-01 2.55467673e-01 2.55539720e-01 2.55611657e-01 2.55683483e-01 + 2.55755200e-01 2.55826806e-01 2.55898304e-01 2.55969692e-01 2.56040970e-01 + 2.56112140e-01 2.56183201e-01 2.56254154e-01 2.56324998e-01 2.56395734e-01 + 2.56466362e-01 2.56536882e-01 2.56607295e-01 2.56677600e-01 2.56747798e-01 + 2.56817889e-01 2.56887874e-01 2.56957752e-01 2.57027523e-01 2.57097188e-01 + 2.57166747e-01 2.57236200e-01 2.57305548e-01 2.57374790e-01 2.57443927e-01 + 2.57512959e-01 2.57581886e-01 2.57650709e-01 2.57719427e-01 2.57788040e-01 + 2.57856550e-01 2.57924955e-01 2.57993257e-01 2.58061455e-01 2.58129550e-01 + 2.58197542e-01 2.58265431e-01 2.58333217e-01 2.58400900e-01 2.58468481e-01 + 2.58535960e-01 2.58603336e-01 2.58670611e-01 2.58737784e-01 2.58804856e-01 + 2.58871826e-01 2.58938695e-01 2.59005463e-01 2.59072131e-01 2.59138697e-01 + 2.59205164e-01 2.59271530e-01 2.59337796e-01 2.59403962e-01 2.59470029e-01 + 2.59535996e-01 2.59601864e-01 2.59667633e-01 2.59733302e-01 2.59798873e-01 + 2.59864345e-01 2.59929719e-01 2.59994995e-01 2.60060172e-01 2.60125252e-01 + 2.60190234e-01 2.60255118e-01 2.60319905e-01 2.60384595e-01 2.60449188e-01 + 2.60513684e-01 2.60578083e-01 2.60642386e-01 2.60706593e-01 2.60770703e-01 + 2.60834718e-01 2.60898636e-01 2.60962459e-01 2.61026187e-01 2.61089819e-01 + 2.61153356e-01 2.61216799e-01 2.61280146e-01 2.61343399e-01 2.61406557e-01 + 2.61469622e-01 2.61532592e-01 2.61595468e-01 2.61658250e-01 2.61720939e-01 + 2.61783535e-01 2.61846037e-01 2.61908446e-01 2.61970763e-01 2.62032986e-01 + 2.62095117e-01 2.62157156e-01 2.62219102e-01 2.62280956e-01 2.62342719e-01 + 2.62404389e-01 2.62465968e-01 2.62527456e-01 2.62588852e-01 2.62650158e-01 + 2.62711372e-01 2.62772496e-01 2.62833529e-01 2.62894471e-01 2.62955324e-01 + 2.63016086e-01 2.63076758e-01 2.63137341e-01 2.63197833e-01 2.63258237e-01 + 2.63318551e-01 2.63378776e-01 2.63438912e-01 2.63498959e-01 2.63558918e-01 + 2.63618788e-01 2.63678569e-01 2.63738263e-01 2.63797868e-01 2.63857386e-01 + 2.63916816e-01 2.63976158e-01 2.64035413e-01 2.64094581e-01 2.64153661e-01 + 2.64212655e-01 2.64271562e-01 2.64330382e-01 2.64389116e-01 2.64447763e-01 + 2.64506324e-01 2.64564800e-01 2.64623189e-01 2.64681493e-01 2.64739711e-01 + 2.64797844e-01 2.64855892e-01 2.64913854e-01 2.64971732e-01 2.65029524e-01 + 2.65087233e-01 2.65144856e-01 2.65202396e-01 2.65259851e-01 2.65317222e-01 + 2.65374509e-01 2.65431713e-01 2.65488833e-01 2.65545869e-01 2.65602822e-01 + 2.65659692e-01 2.65716480e-01 2.65773184e-01 2.65829805e-01 2.65886344e-01 + 2.65942801e-01 2.65999175e-01 2.66055468e-01 2.66111678e-01 2.66167806e-01 + 2.66223853e-01 2.66279819e-01 2.66335703e-01 2.66391505e-01 2.66447227e-01 + 2.66502868e-01 2.66558427e-01 2.66613907e-01 2.66669305e-01 2.66724624e-01 + 2.66779862e-01 2.66835020e-01 2.66890098e-01 2.66945096e-01 2.67000015e-01 + 2.67054854e-01 2.67109613e-01 2.67164294e-01 2.67218895e-01 2.67273418e-01 + 2.67327861e-01 2.67382226e-01 2.67436512e-01 2.67490720e-01 2.67544850e-01 + 2.67598902e-01 2.67652875e-01 2.67706771e-01 2.67760589e-01 2.67814330e-01 + 2.67867993e-01 2.67921578e-01 2.67975087e-01 2.68028519e-01 2.68081873e-01 + 2.68135151e-01 2.68188352e-01 2.68241477e-01 2.68294526e-01 2.68347498e-01 + 2.68400394e-01 2.68453214e-01 2.68505959e-01 2.68558628e-01 2.68611221e-01 + 2.68663738e-01 2.68716181e-01 2.68768548e-01 2.68820841e-01 2.68873058e-01 + 2.68925201e-01 2.68977269e-01 2.69029263e-01 2.69081182e-01 2.69133027e-01 + 2.69184798e-01 2.69236495e-01 2.69288118e-01 2.69339668e-01 2.69391143e-01 + 2.69442546e-01 2.69493875e-01 2.69545131e-01 2.69596314e-01 2.69647424e-01 + 2.69698461e-01 2.69749425e-01 2.69800317e-01 2.69851137e-01 2.69901884e-01 + 2.69952559e-01 2.70003162e-01 2.70053693e-01 2.70104153e-01 2.70154540e-01 + 2.70204856e-01 2.70255101e-01 2.70305274e-01 2.70355377e-01 2.70405408e-01 + 2.70455368e-01 2.70505258e-01 2.70555077e-01 2.70604825e-01 2.70654503e-01 + 2.70704110e-01 2.70753648e-01 2.70803115e-01 2.70852513e-01 2.70901840e-01 + 2.70951098e-01 2.71000287e-01 2.71049406e-01 2.71098455e-01 2.71147436e-01 + 2.71196347e-01 2.71245190e-01 2.71293963e-01 2.71342668e-01 2.71391304e-01 + 2.71439872e-01 2.71488372e-01 2.71536803e-01 2.71585166e-01 2.71633461e-01 + 2.71681688e-01 2.71729848e-01 2.71777939e-01 2.71825964e-01 2.71873921e-01 + 2.71921810e-01 2.71969632e-01 2.72017388e-01 2.72065076e-01 2.72112698e-01 + 2.72160252e-01 2.72207741e-01 2.72255162e-01 2.72302518e-01 2.72349807e-01 + 2.72397030e-01 2.72444187e-01 2.72491278e-01 2.72538303e-01 2.72585263e-01 + 2.72632157e-01 2.72678985e-01 2.72725748e-01 2.72772446e-01 2.72819079e-01 + 2.72865647e-01 2.72912150e-01 2.72958588e-01 2.73004962e-01 2.73051271e-01 + 2.73097516e-01 2.73143696e-01 2.73189812e-01 2.73235864e-01 2.73281852e-01 + 2.73327776e-01 2.73373636e-01 2.73419432e-01 2.73465166e-01 2.73510835e-01 + 2.73556441e-01 2.73601984e-01 2.73647464e-01 2.73692881e-01 2.73738235e-01 + 2.73783526e-01 2.73828755e-01 2.73873921e-01 2.73919024e-01 2.73964065e-01 + 2.74009044e-01 2.74053961e-01 2.74098815e-01 2.74143608e-01 2.74188339e-01 + 2.74233008e-01 2.74277616e-01 2.74322162e-01 2.74366646e-01 2.74411070e-01 + 2.74455432e-01 2.74499733e-01 2.74543973e-01 2.74588152e-01 2.74632270e-01 + 2.74676328e-01 2.74720325e-01 2.74764262e-01 2.74808138e-01 2.74851954e-01 + 2.74895710e-01 2.74939406e-01 2.74983042e-01 2.75026618e-01 2.75070135e-01 + 2.75113591e-01 2.75156988e-01 2.75200326e-01 2.75243604e-01 2.75286824e-01 + 2.75329984e-01 2.75373085e-01 2.75416127e-01 2.75459110e-01 2.75502034e-01 + 2.75544900e-01 2.75587707e-01 2.75630456e-01 2.75673147e-01 2.75715779e-01 + 2.75758353e-01 2.75800869e-01 2.75843328e-01 2.75885728e-01 2.75928070e-01 + 2.75970355e-01 2.76012583e-01 2.76054753e-01 2.76096866e-01 2.76138921e-01 + 2.76180919e-01 2.76222860e-01 2.76264745e-01 2.76306572e-01 2.76348342e-01 + 2.76390056e-01 2.76431714e-01 2.76473315e-01 2.76514859e-01 2.76556347e-01 + 2.76597779e-01 2.76639155e-01 2.76680475e-01 2.76721739e-01 2.76762947e-01 + 2.76804100e-01 2.76845197e-01 2.76886238e-01 2.76927224e-01 2.76968154e-01 + 2.77009030e-01 2.77049850e-01 2.77090615e-01 2.77131325e-01 2.77171980e-01 + 2.77212581e-01 2.77253126e-01 2.77293617e-01 2.77334054e-01 2.77374436e-01 + 2.77414764e-01 2.77455038e-01 2.77495257e-01 2.77535423e-01 2.77575534e-01 + 2.77615592e-01 2.77655596e-01 2.77695546e-01 2.77735443e-01 2.77775286e-01 + 2.77815076e-01 2.77854812e-01 2.77894495e-01 2.77934125e-01 2.77973702e-01 + 2.78013226e-01 2.78052697e-01 2.78092115e-01 2.78131481e-01 2.78170794e-01 + 2.78210054e-01 2.78249262e-01 2.78288418e-01 2.78327521e-01 2.78366572e-01 + 2.78405571e-01 2.78444519e-01 2.78483414e-01 2.78522257e-01 2.78561049e-01 + 2.78599789e-01 2.78638477e-01 2.78677114e-01 2.78715700e-01 2.78754234e-01 + 2.78792717e-01 2.78831149e-01 2.78869530e-01 2.78907859e-01 2.78946138e-01 + 2.08130000e-04 2.08281191e-04 2.08734762e-04 2.09490714e-04 2.10549046e-04 + 2.11909757e-04 2.13572846e-04 2.15538310e-04 2.17806148e-04 2.20376358e-04 + 2.23248936e-04 2.26423882e-04 2.29901190e-04 2.33680858e-04 2.37762883e-04 + 2.42147260e-04 2.46833984e-04 2.51823051e-04 2.57114457e-04 2.62708196e-04 + 2.68604263e-04 2.74802652e-04 2.81303356e-04 2.88106370e-04 2.95211687e-04 + 3.02619299e-04 3.10329200e-04 3.18341382e-04 3.26655837e-04 3.35272557e-04 + 3.44191533e-04 3.53412758e-04 3.62936221e-04 3.72761913e-04 3.82889825e-04 + 3.93319947e-04 4.04052269e-04 4.15086779e-04 4.26423468e-04 4.38062324e-04 + 4.50003336e-04 4.62246492e-04 4.74791780e-04 4.87639188e-04 5.00788703e-04 + 5.14240312e-04 5.27994002e-04 5.42049760e-04 5.56407572e-04 5.71067423e-04 + 5.86029300e-04 6.01293187e-04 6.16859071e-04 6.32726934e-04 6.48896763e-04 + 6.65368541e-04 6.82142252e-04 6.99217880e-04 7.16595407e-04 7.34274817e-04 + 7.52256092e-04 7.70539216e-04 7.89124169e-04 8.08010934e-04 8.27199493e-04 + 8.46689825e-04 8.66481913e-04 8.86575737e-04 9.06971278e-04 9.27668514e-04 + 9.48667427e-04 9.69967995e-04 9.91570198e-04 1.01347401e-03 1.03567942e-03 + 1.05818640e-03 1.08099493e-03 1.10410498e-03 1.12751654e-03 1.15122957e-03 + 1.17524406e-03 1.19955999e-03 1.22417733e-03 1.24909605e-03 1.27431613e-03 + 1.29983755e-03 1.32566029e-03 1.35178430e-03 1.37820958e-03 1.40493610e-03 + 1.43196382e-03 1.45929272e-03 1.48692278e-03 1.51485397e-03 1.54308626e-03 + 1.57161963e-03 1.60045404e-03 1.62958946e-03 1.65902588e-03 1.68876325e-03 + 1.71880156e-03 1.74914077e-03 1.77978085e-03 1.81072177e-03 1.84196351e-03 + 1.87350602e-03 1.90534929e-03 1.93749327e-03 1.96993795e-03 2.00268328e-03 + 2.03572923e-03 2.06907577e-03 2.10272288e-03 2.13667051e-03 2.17091863e-03 + 2.20546721e-03 2.24031622e-03 2.27546562e-03 2.31091538e-03 2.34666546e-03 + 2.38271583e-03 2.41906645e-03 2.45571729e-03 2.49266831e-03 2.52991947e-03 + 2.56747075e-03 2.60532209e-03 2.64347347e-03 2.68192485e-03 2.72067619e-03 + 2.75972745e-03 2.79907859e-03 2.83872959e-03 2.87868038e-03 2.91893095e-03 + 2.95948125e-03 3.00033123e-03 3.04148087e-03 3.08293011e-03 3.12467892e-03 + 3.16672726e-03 3.20907509e-03 3.25172236e-03 3.29466904e-03 3.33791508e-03 + 3.38146044e-03 3.42530507e-03 3.46944894e-03 3.51389201e-03 3.55863422e-03 + 3.60367554e-03 3.64901591e-03 3.69465531e-03 3.74059367e-03 3.78683096e-03 + 3.83336714e-03 3.88020215e-03 3.92733595e-03 3.97476850e-03 4.02249975e-03 + 4.07052965e-03 4.11885815e-03 4.16748522e-03 4.21641079e-03 4.26563483e-03 + 4.31515728e-03 4.36497811e-03 4.41509725e-03 4.46551466e-03 4.51623029e-03 + 4.56724409e-03 4.61855601e-03 4.67016601e-03 4.72207403e-03 4.77428002e-03 + 4.82678393e-03 4.87958570e-03 4.93268530e-03 4.98608266e-03 5.03977774e-03 + 5.09377048e-03 5.14806083e-03 5.20264873e-03 5.25753414e-03 5.31271700e-03 + 5.36819725e-03 5.42397485e-03 5.48004973e-03 5.53642185e-03 5.59309115e-03 + 5.65005757e-03 5.70732106e-03 5.76488157e-03 5.82273903e-03 5.88089339e-03 + 5.93934459e-03 5.99809258e-03 6.05713731e-03 6.11647870e-03 6.17611671e-03 + 6.23605128e-03 6.29628235e-03 6.35680986e-03 6.41763375e-03 6.47875396e-03 + 6.54017044e-03 6.60188312e-03 6.66389194e-03 6.72619685e-03 6.78879778e-03 + 6.85169468e-03 6.91488748e-03 6.97837611e-03 7.04216053e-03 7.10624066e-03 + 7.17061645e-03 7.23528783e-03 7.30025474e-03 7.36551712e-03 7.43107490e-03 + 7.49692802e-03 7.56307641e-03 7.62952002e-03 7.69625878e-03 7.76329262e-03 + 7.83062147e-03 7.89824528e-03 7.96616398e-03 8.03437750e-03 8.10288577e-03 + 8.17168874e-03 8.24078632e-03 8.31017847e-03 8.37986510e-03 8.44984615e-03 + 8.52012155e-03 8.59069124e-03 8.66155515e-03 8.73271321e-03 8.80416535e-03 + 8.87591149e-03 8.94795158e-03 9.02028554e-03 9.09291331e-03 9.16583480e-03 + 9.23904995e-03 9.31255870e-03 9.38636096e-03 9.46045668e-03 9.53484577e-03 + 9.60952816e-03 9.68450379e-03 9.75977258e-03 9.83533445e-03 9.91118934e-03 + 9.98733717e-03 1.00637779e-02 1.01405114e-02 1.02175376e-02 1.02948564e-02 + 1.03724679e-02 1.04503718e-02 1.05285681e-02 1.06070568e-02 1.06858378e-02 + 1.07649109e-02 1.08442762e-02 1.09239335e-02 1.10038828e-02 1.10841240e-02 + 1.11646570e-02 1.12454817e-02 1.13265980e-02 1.14080060e-02 1.14897054e-02 + 1.15716963e-02 1.16539785e-02 1.17365519e-02 1.18194166e-02 1.19025723e-02 + 1.19860191e-02 1.20697568e-02 1.21537854e-02 1.22381047e-02 1.23227148e-02 + 1.24076155e-02 1.24928067e-02 1.25782883e-02 1.26640604e-02 1.27501227e-02 + 1.28364752e-02 1.29231179e-02 1.30100506e-02 1.30972732e-02 1.31847858e-02 + 1.32725881e-02 1.33606801e-02 1.34490618e-02 1.35377329e-02 1.36266936e-02 + 1.37159436e-02 1.38054829e-02 1.38953113e-02 1.39854289e-02 1.40758355e-02 + 1.41665311e-02 1.42575155e-02 1.43487886e-02 1.44403504e-02 1.45322008e-02 + 1.46243398e-02 1.47167671e-02 1.48094827e-02 1.49024866e-02 1.49957786e-02 + 1.50893587e-02 1.51832267e-02 1.52773826e-02 1.53718263e-02 1.54665577e-02 + 1.55615767e-02 1.56568832e-02 1.57524771e-02 1.58483584e-02 1.59445269e-02 + 1.60409825e-02 1.61377252e-02 1.62347549e-02 1.63320714e-02 1.64296747e-02 + 1.65275647e-02 1.66257413e-02 1.67242043e-02 1.68229538e-02 1.69219896e-02 + 1.70213116e-02 1.71209197e-02 1.72208138e-02 1.73209939e-02 1.74214598e-02 + 1.75222114e-02 1.76232487e-02 1.77245715e-02 1.78261798e-02 1.79280734e-02 + 1.80302523e-02 1.81327163e-02 1.82354654e-02 1.83384994e-02 1.84418184e-02 + 1.85454220e-02 1.86493104e-02 1.87534833e-02 1.88579407e-02 1.89626824e-02 + 1.90677084e-02 1.91730186e-02 1.92786129e-02 1.93844911e-02 1.94906532e-02 + 1.95970991e-02 1.97038286e-02 1.98108417e-02 1.99181382e-02 2.00257182e-02 + 2.01335813e-02 2.02417277e-02 2.03501571e-02 2.04588694e-02 2.05678646e-02 + 2.06771425e-02 2.07867031e-02 2.08965462e-02 2.10066717e-02 2.11170796e-02 + 2.12277697e-02 2.13387419e-02 2.14499962e-02 2.15615323e-02 2.16733503e-02 + 2.17854499e-02 2.18978311e-02 2.20104938e-02 2.21234379e-02 2.22366633e-02 + 2.23501698e-02 2.24639574e-02 2.25780260e-02 2.26923753e-02 2.28070055e-02 + 2.29219162e-02 2.30371074e-02 2.31525791e-02 2.32683311e-02 2.33843632e-02 + 2.35006755e-02 2.36172677e-02 2.37341397e-02 2.38512915e-02 2.39687230e-02 + 2.40864339e-02 2.42044243e-02 2.43226940e-02 2.44412429e-02 2.45600709e-02 + 2.46791779e-02 2.47985637e-02 2.49182282e-02 2.50381714e-02 2.51583931e-02 + 2.52788932e-02 2.53996717e-02 2.55207283e-02 2.56420629e-02 2.57636755e-02 + 2.58855660e-02 2.60077341e-02 2.61301799e-02 2.62529032e-02 2.63759039e-02 + 2.64991818e-02 2.66227368e-02 2.67465689e-02 2.68706779e-02 2.69950637e-02 + 2.71197262e-02 2.72446653e-02 2.73698808e-02 2.74953726e-02 2.76211406e-02 + 2.77471848e-02 2.78735049e-02 2.80001009e-02 2.81269726e-02 2.82541199e-02 + 2.83815427e-02 2.85092409e-02 2.86372144e-02 2.87654630e-02 2.88939867e-02 + 2.90227852e-02 2.91518585e-02 2.92812065e-02 2.94108290e-02 2.95407260e-02 + 2.96708972e-02 2.98013426e-02 2.99320621e-02 3.00630555e-02 3.01943227e-02 + 3.03258636e-02 3.04576781e-02 3.05897660e-02 3.07221272e-02 3.08547616e-02 + 3.09876691e-02 3.11208496e-02 3.12543028e-02 3.13880288e-02 3.15220273e-02 + 3.16562983e-02 3.17908416e-02 3.19256571e-02 3.20607447e-02 3.21961042e-02 + 3.23317356e-02 3.24676386e-02 3.26038132e-02 3.27402593e-02 3.28769766e-02 + 3.30139652e-02 3.31512248e-02 3.32887554e-02 3.34265567e-02 3.35646288e-02 + 3.37029714e-02 3.38415844e-02 3.39804677e-02 3.41196212e-02 3.42590447e-02 + 3.43987381e-02 3.45387013e-02 3.46789341e-02 3.48194365e-02 3.49602082e-02 + 3.51012492e-02 3.52425593e-02 3.53841384e-02 3.55259864e-02 3.56681031e-02 + 3.58104884e-02 3.59531422e-02 3.60960643e-02 3.62392547e-02 3.63827131e-02 + 3.65264394e-02 3.66704335e-02 3.68146954e-02 3.69592247e-02 3.71040215e-02 + 3.72490856e-02 3.73944167e-02 3.75400149e-02 3.76858800e-02 3.78320118e-02 + 3.79784102e-02 3.81250751e-02 3.82720063e-02 3.84192037e-02 3.85666672e-02 + 3.87143966e-02 3.88623918e-02 3.90106526e-02 3.91591790e-02 3.93079707e-02 + 3.94570277e-02 3.96063498e-02 3.97559369e-02 3.99057888e-02 4.00559054e-02 + 4.02062865e-02 4.03569321e-02 4.05078419e-02 4.06590159e-02 4.08104539e-02 + 4.09621558e-02 4.11141214e-02 4.12663506e-02 4.14188432e-02 4.15715991e-02 + 4.17246182e-02 4.18779004e-02 4.20314454e-02 4.21852532e-02 4.23393235e-02 + 4.24936564e-02 4.26482515e-02 4.28031089e-02 4.29582283e-02 4.31136096e-02 + 4.32692526e-02 4.34251573e-02 4.35813234e-02 4.37377508e-02 4.38944395e-02 + 4.40513892e-02 4.42085998e-02 4.43660711e-02 4.45238031e-02 4.46817956e-02 + 4.48400483e-02 4.49985613e-02 4.51573343e-02 4.53163671e-02 4.54756598e-02 + 4.56352120e-02 4.57950237e-02 4.59550947e-02 4.61154249e-02 4.62760141e-02 + 4.64368622e-02 4.65979690e-02 4.67593344e-02 4.69209582e-02 4.70828403e-02 + 4.72449806e-02 4.74073789e-02 4.75700350e-02 4.77329488e-02 4.78961202e-02 + 4.80595489e-02 4.82232350e-02 4.83871781e-02 4.85513782e-02 4.87158351e-02 + 4.88805487e-02 4.90455188e-02 4.92107453e-02 4.93762280e-02 4.95419667e-02 + 4.97079614e-02 4.98742118e-02 5.00407179e-02 5.02074794e-02 5.03744963e-02 + 5.05417683e-02 5.07092953e-02 5.08770772e-02 5.10451138e-02 5.12134049e-02 + 5.13819505e-02 5.15507503e-02 5.17198043e-02 5.18891121e-02 5.20586738e-02 + 5.22284892e-02 5.23985580e-02 5.25688802e-02 5.27394555e-02 5.29102839e-02 + 5.30813652e-02 5.32526992e-02 5.34242858e-02 5.35961248e-02 5.37682161e-02 + 5.39405595e-02 5.41131548e-02 5.42860020e-02 5.44591008e-02 5.46324511e-02 + 5.48060527e-02 5.49799055e-02 5.51540094e-02 5.53283641e-02 5.55029695e-02 + 5.56778255e-02 5.58529319e-02 5.60282885e-02 5.62038952e-02 5.63797519e-02 + 5.65558583e-02 5.67322144e-02 5.69088199e-02 5.70856747e-02 5.72627786e-02 + 5.74401316e-02 5.76177334e-02 5.77955838e-02 5.79736828e-02 5.81520301e-02 + 5.83306256e-02 5.85094691e-02 5.86885605e-02 5.88678997e-02 5.90474864e-02 + 5.92273205e-02 5.94074018e-02 5.95877302e-02 5.97683055e-02 5.99491276e-02 + 6.01301963e-02 6.03115114e-02 6.04930728e-02 6.06748803e-02 6.08569338e-02 + 6.10392330e-02 6.12217779e-02 6.14045683e-02 6.15876039e-02 6.17708848e-02 + 6.19544105e-02 6.21381812e-02 6.23221964e-02 6.25064562e-02 6.26909603e-02 + 6.28757085e-02 6.30607008e-02 6.32459369e-02 6.34314167e-02 6.36171400e-02 + 6.38031067e-02 6.39893165e-02 6.41757694e-02 6.43624651e-02 6.45494036e-02 + 6.47365845e-02 6.49240078e-02 6.51116734e-02 6.52995809e-02 6.54877303e-02 + 6.56761215e-02 6.58647541e-02 6.60536282e-02 6.62427434e-02 6.64320997e-02 + 6.66216969e-02 6.68115348e-02 6.70016132e-02 6.71919320e-02 6.73824910e-02 + 6.75732900e-02 6.77643289e-02 6.79556075e-02 6.81471257e-02 6.83388832e-02 + 6.85308799e-02 6.87231157e-02 6.89155904e-02 6.91083037e-02 6.93012556e-02 + 6.94944458e-02 6.96878742e-02 6.98815407e-02 7.00754450e-02 7.02695870e-02 + 7.04639665e-02 7.06585833e-02 7.08534374e-02 7.10485284e-02 7.12438563e-02 + 7.14394208e-02 7.16352219e-02 7.18312593e-02 7.20275328e-02 7.22240423e-02 + 7.24207876e-02 7.26177686e-02 7.28149851e-02 7.30124368e-02 7.32101237e-02 + 7.34080456e-02 7.36062022e-02 7.38045935e-02 7.40032192e-02 7.42020791e-02 + 7.44011732e-02 7.46005012e-02 7.48000630e-02 7.49998583e-02 7.51998870e-02 + 7.54001490e-02 7.56006441e-02 7.58013720e-02 7.60023326e-02 7.62035258e-02 + 7.64049514e-02 7.66066092e-02 7.68084989e-02 7.70106206e-02 7.72129739e-02 + 7.74155587e-02 7.76183748e-02 7.78214221e-02 7.80247003e-02 7.82282094e-02 + 7.84319490e-02 7.86359192e-02 7.88401196e-02 7.90445501e-02 7.92492105e-02 + 7.94541007e-02 7.96592204e-02 7.98645695e-02 8.00701479e-02 8.02759553e-02 + 8.04819916e-02 8.06882565e-02 8.08947500e-02 8.11014718e-02 8.13084218e-02 + 8.15155998e-02 8.17230055e-02 8.19306389e-02 8.21384998e-02 8.23465879e-02 + 8.25549031e-02 8.27634452e-02 8.29722141e-02 8.31812095e-02 8.33904313e-02 + 8.35998794e-02 8.38095534e-02 8.40194533e-02 8.42295789e-02 8.44399299e-02 + 8.46505063e-02 8.48613078e-02 8.50723343e-02 8.52835855e-02 8.54950613e-02 + 8.57067616e-02 8.59186860e-02 8.61308346e-02 8.63432070e-02 8.65558031e-02 + 8.67686227e-02 8.69816656e-02 8.71949318e-02 8.74084208e-02 8.76221327e-02 + 8.78360672e-02 8.80502241e-02 8.82646033e-02 8.84792045e-02 8.86940276e-02 + 8.89090725e-02 8.91243388e-02 8.93398265e-02 8.95555354e-02 8.97714652e-02 + 8.99876159e-02 9.02039871e-02 9.04205788e-02 9.06373908e-02 9.08544228e-02 + 9.10716747e-02 9.12891463e-02 9.15068374e-02 9.17247478e-02 9.19428774e-02 + 9.21612260e-02 9.23797934e-02 9.25985793e-02 9.28175837e-02 9.30368064e-02 + 9.32562470e-02 9.34759056e-02 9.36957818e-02 9.39158756e-02 9.41361866e-02 + 9.43567148e-02 9.45774599e-02 9.47984219e-02 9.50196003e-02 9.52409952e-02 + 9.54626063e-02 9.56844334e-02 9.59064764e-02 9.61287350e-02 9.63512090e-02 + 9.65738984e-02 9.67968029e-02 9.70199222e-02 9.72432563e-02 9.74668050e-02 + 9.76905680e-02 9.79145452e-02 9.81387363e-02 9.83631413e-02 9.85877598e-02 + 9.88125918e-02 9.90376370e-02 9.92628953e-02 9.94883665e-02 9.97140503e-02 + 9.99399466e-02 1.00166055e-01 1.00392376e-01 1.00618909e-01 1.00845653e-01 + 1.01072609e-01 1.01299776e-01 1.01527155e-01 1.01754744e-01 1.01982545e-01 + 1.02210556e-01 1.02438777e-01 1.02667209e-01 1.02895850e-01 1.03124702e-01 + 1.03353763e-01 1.03583034e-01 1.03812514e-01 1.04042203e-01 1.04272101e-01 + 1.04502207e-01 1.04732523e-01 1.04963046e-01 1.05193778e-01 1.05424718e-01 + 1.05655865e-01 1.05887221e-01 1.06118783e-01 1.06350553e-01 1.06582530e-01 + 1.06814713e-01 1.07047104e-01 1.07279701e-01 1.07512504e-01 1.07745513e-01 + 1.07978728e-01 1.08212148e-01 1.08445775e-01 1.08679606e-01 1.08913643e-01 + 1.09147884e-01 1.09382331e-01 1.09616982e-01 1.09851837e-01 1.10086896e-01 + 1.10322160e-01 1.10557627e-01 1.10793298e-01 1.11029172e-01 1.11265249e-01 + 1.11501530e-01 1.11738013e-01 1.11974699e-01 1.12211587e-01 1.12448678e-01 + 1.12685971e-01 1.12923465e-01 1.13161162e-01 1.13399059e-01 1.13637158e-01 + 1.13875458e-01 1.14113960e-01 1.14352661e-01 1.14591564e-01 1.14830666e-01 + 1.15069969e-01 1.15309472e-01 1.15549174e-01 1.15789076e-01 1.16029178e-01 + 1.16269478e-01 1.16509978e-01 1.16750676e-01 1.16991573e-01 1.17232669e-01 + 1.17473962e-01 1.17715454e-01 1.17957143e-01 1.18199030e-01 1.18441115e-01 + 1.18683397e-01 1.18925875e-01 1.19168551e-01 1.19411423e-01 1.19654492e-01 + 1.19897757e-01 1.20141218e-01 1.20384875e-01 1.20628728e-01 1.20872776e-01 + 1.21117020e-01 1.21361458e-01 1.21606092e-01 1.21850920e-01 1.22095943e-01 + 1.22341160e-01 1.22586571e-01 1.22832176e-01 1.23077975e-01 1.23323967e-01 + 1.23570153e-01 1.23816532e-01 1.24063104e-01 1.24309869e-01 1.24556826e-01 + 1.24803975e-01 1.25051317e-01 1.25298851e-01 1.25546576e-01 1.25794494e-01 + 1.26042602e-01 1.26290902e-01 1.26539393e-01 1.26788074e-01 1.27036946e-01 + 1.27286009e-01 1.27535261e-01 1.27784704e-01 1.28034337e-01 1.28284159e-01 + 1.28534171e-01 1.28784372e-01 1.29034762e-01 1.29285340e-01 1.29536108e-01 + 1.29787064e-01 1.30038208e-01 1.30289540e-01 1.30541060e-01 1.30792768e-01 + 1.31044663e-01 1.31296746e-01 1.31549015e-01 1.31801471e-01 1.32054115e-01 + 1.32306944e-01 1.32559960e-01 1.32813162e-01 1.33066550e-01 1.33320123e-01 + 1.33573882e-01 1.33827826e-01 1.34081956e-01 1.34336270e-01 1.34590769e-01 + 1.34845452e-01 1.35100320e-01 1.35355372e-01 1.35610608e-01 1.35866027e-01 + 1.36121630e-01 1.36377417e-01 1.36633386e-01 1.36889538e-01 1.37145873e-01 + 1.37402391e-01 1.37659091e-01 1.37915973e-01 1.38173037e-01 1.38430283e-01 + 1.38687710e-01 1.38945318e-01 1.39203108e-01 1.39461079e-01 1.39719230e-01 + 1.39977562e-01 1.40236074e-01 1.40494766e-01 1.40753639e-01 1.41012691e-01 + 1.41271922e-01 1.41531333e-01 1.41790923e-01 1.42050692e-01 1.42310640e-01 + 1.42570766e-01 1.42831071e-01 1.43091554e-01 1.43352214e-01 1.43613053e-01 + 1.43874069e-01 1.44135262e-01 1.44396633e-01 1.44658180e-01 1.44919904e-01 + 1.45181805e-01 1.45443882e-01 1.45706135e-01 1.45968565e-01 1.46231170e-01 + 1.46493950e-01 1.46756906e-01 1.47020037e-01 1.47283343e-01 1.47546824e-01 + 1.47810479e-01 1.48074308e-01 1.48338312e-01 1.48602490e-01 1.48866841e-01 + 1.49131366e-01 1.49396065e-01 1.49660936e-01 1.49925981e-01 1.50191198e-01 + 1.50456588e-01 1.50722150e-01 1.50987884e-01 1.51253790e-01 1.51519868e-01 + 1.51786118e-01 1.52052539e-01 1.52319131e-01 1.52585894e-01 1.52852827e-01 + 1.53119932e-01 1.53387206e-01 1.53654651e-01 1.53922266e-01 1.54190050e-01 + 1.54458004e-01 1.54726127e-01 1.54994420e-01 1.55262881e-01 1.55531511e-01 + 1.55800310e-01 1.56069277e-01 1.56338412e-01 1.56607715e-01 1.56877186e-01 + 1.57146824e-01 1.57416630e-01 1.57686603e-01 1.57956743e-01 1.58227049e-01 + 1.58497522e-01 1.58768161e-01 1.59038967e-01 1.59309938e-01 1.59581075e-01 + 1.59852378e-01 1.60123846e-01 1.60395479e-01 1.60667277e-01 1.60939240e-01 + 1.61211367e-01 1.61483659e-01 1.61756114e-01 1.62028734e-01 1.62301517e-01 + 1.62574464e-01 1.62847574e-01 1.63120847e-01 1.63394283e-01 1.63667882e-01 + 1.63941644e-01 1.64215567e-01 1.64489653e-01 1.64763901e-01 1.65038310e-01 + 1.65312881e-01 1.65587613e-01 1.65862506e-01 1.66137560e-01 1.66412775e-01 + 1.66688150e-01 1.66963686e-01 1.67239381e-01 1.67515237e-01 1.67791252e-01 + 1.68067427e-01 1.68343761e-01 1.68620254e-01 1.68896906e-01 1.69173717e-01 + 1.69450686e-01 1.69727813e-01 1.70005098e-01 1.70282542e-01 1.70560143e-01 + 1.70837901e-01 1.71115817e-01 1.71393889e-01 1.71672119e-01 1.71950505e-01 + 1.72229048e-01 1.72507747e-01 1.72786602e-01 1.73065613e-01 1.73344779e-01 + 1.73624101e-01 1.73903579e-01 1.74183211e-01 1.74462998e-01 1.74742940e-01 + 1.75023036e-01 1.75303286e-01 1.75583691e-01 1.75864249e-01 1.76144961e-01 + 1.76425826e-01 1.76706845e-01 1.76988017e-01 1.77269341e-01 1.77550818e-01 + 1.77832448e-01 1.78114229e-01 1.78396163e-01 1.78678248e-01 1.78960486e-01 + 1.79242874e-01 1.79525414e-01 1.79808105e-01 1.80090946e-01 1.80373938e-01 + 1.80657081e-01 1.80940374e-01 1.81223816e-01 1.81507409e-01 1.81791151e-01 + 1.82075043e-01 1.82359084e-01 1.82643273e-01 1.82927612e-01 1.83212099e-01 + 1.83496734e-01 1.83781518e-01 1.84066450e-01 1.84351529e-01 1.84636756e-01 + 1.84922131e-01 1.85207652e-01 1.85493321e-01 1.85779136e-01 1.86065098e-01 + 1.86351206e-01 1.86637461e-01 1.86923861e-01 1.87210407e-01 1.87497099e-01 + 1.87783936e-01 1.88070919e-01 1.88358046e-01 1.88645318e-01 1.88932734e-01 + 1.89220295e-01 1.89508000e-01 1.89795849e-01 1.90083842e-01 1.90371978e-01 + 1.90660258e-01 1.90948681e-01 1.91237246e-01 1.91525955e-01 1.91814806e-01 + 1.92103799e-01 1.92392935e-01 1.92682212e-01 1.92971631e-01 1.93261192e-01 + 1.93550894e-01 1.93840737e-01 1.94130721e-01 1.94420846e-01 1.94711111e-01 + 1.95001517e-01 1.95292063e-01 1.95582748e-01 1.95873574e-01 1.96164539e-01 + 1.96455643e-01 1.96746886e-01 1.97038269e-01 1.97329790e-01 1.97621449e-01 + 1.97913247e-01 1.98205183e-01 1.98497257e-01 1.98789469e-01 1.99081818e-01 + 1.99374304e-01 1.99666928e-01 1.99959688e-01 2.00252585e-01 2.00545619e-01 + 2.00838789e-01 2.01132095e-01 2.01425537e-01 2.01719114e-01 2.02012828e-01 + 2.02306676e-01 2.02600660e-01 2.02894778e-01 2.03189031e-01 2.03483419e-01 + 2.03777941e-01 2.04072597e-01 2.04367387e-01 2.04662311e-01 2.04957368e-01 + 2.05252558e-01 2.05547882e-01 2.05843338e-01 2.06138928e-01 2.06434649e-01 + 2.06730503e-01 2.07026489e-01 2.07322607e-01 2.07618857e-01 2.07915238e-01 + 2.08211750e-01 2.08508394e-01 2.08805168e-01 2.09102073e-01 2.09399109e-01 + 2.09696275e-01 2.09993571e-01 2.10290997e-01 2.10588552e-01 2.10886237e-01 + 2.11184052e-01 2.11481995e-01 2.11780068e-01 2.12078269e-01 2.12376598e-01 + 2.12675056e-01 2.12973642e-01 2.13272356e-01 2.13571197e-01 2.13870166e-01 + 2.14169263e-01 2.14468486e-01 2.14767837e-01 2.15067314e-01 2.15366917e-01 + 2.15666647e-01 2.15966503e-01 2.16266485e-01 2.16566592e-01 2.16866825e-01 + 2.17167184e-01 2.17467667e-01 2.17768276e-01 2.18069009e-01 2.18369866e-01 + 2.18670848e-01 2.18971954e-01 2.19273184e-01 2.19574538e-01 2.19876015e-01 + 2.20177615e-01 2.20479339e-01 2.20781185e-01 2.21083155e-01 2.21385246e-01 + 2.21687460e-01 2.21989797e-01 2.22292255e-01 2.22594835e-01 2.22897536e-01 + 2.23200359e-01 2.23503303e-01 2.23806367e-01 2.24109553e-01 2.24412859e-01 + 2.24716285e-01 2.25019832e-01 2.25323498e-01 2.25627285e-01 2.25931191e-01 + 2.26235216e-01 2.26539360e-01 2.26843623e-01 2.27148005e-01 2.27452506e-01 + 2.27757125e-01 2.28061862e-01 2.28366717e-01 2.28671690e-01 2.28976780e-01 + 2.29281988e-01 2.29587313e-01 2.29892755e-01 2.30198313e-01 2.30503989e-01 + 2.30809780e-01 2.31115688e-01 2.31421712e-01 2.31727852e-01 2.32034107e-01 + 2.32340478e-01 2.32646964e-01 2.32953565e-01 2.33260280e-01 2.33567111e-01 + 2.33874055e-01 2.34181114e-01 2.34488287e-01 2.34795574e-01 2.35102975e-01 + 2.35410489e-01 2.35718116e-01 2.36025856e-01 2.36333709e-01 2.36641675e-01 + 2.36949753e-01 2.37257943e-01 2.37566246e-01 2.37874660e-01 2.38183186e-01 + 2.38491824e-01 2.38800572e-01 2.39109432e-01 2.39418403e-01 2.39727484e-01 + 2.40036676e-01 2.40345978e-01 2.40655391e-01 2.40964913e-01 2.41274545e-01 + 2.41584286e-01 2.41894137e-01 2.42204097e-01 2.42514166e-01 2.42824344e-01 + 2.43134630e-01 2.43445024e-01 2.43755527e-01 2.44066138e-01 2.44376856e-01 + 2.44687682e-01 2.44998615e-01 2.45309656e-01 2.45620803e-01 2.45932058e-01 + 2.46243419e-01 2.46554886e-01 2.46866459e-01 2.47178139e-01 2.47489924e-01 + 2.47801815e-01 2.48113812e-01 2.48425913e-01 2.48738120e-01 2.49050431e-01 + 2.49362848e-01 2.49675368e-01 2.49987993e-01 2.50300722e-01 2.50613555e-01 + 2.50926492e-01 2.51239532e-01 2.51552675e-01 2.51865922e-01 2.52179271e-01 + 2.52492723e-01 2.52806278e-01 2.53119935e-01 2.53433694e-01 2.53747555e-01 + 2.54061518e-01 2.54375582e-01 2.54689748e-01 2.55004015e-01 2.55318383e-01 + 2.55632851e-01 2.55947421e-01 2.56262090e-01 2.56576860e-01 2.56891730e-01 + 2.57206700e-01 2.57521770e-01 2.57836938e-01 2.58152207e-01 2.58467574e-01 + 2.58783040e-01 2.59098605e-01 2.59414268e-01 2.59730029e-01 2.60045889e-01 + 2.60361847e-01 2.60677902e-01 2.60994055e-01 2.61310305e-01 2.61626652e-01 + 2.61943096e-01 2.62259637e-01 2.62576275e-01 2.62893009e-01 2.63209839e-01 + 2.63526765e-01 2.63843787e-01 2.64160905e-01 2.64478118e-01 2.64795426e-01 + 2.65112830e-01 2.65430328e-01 2.65747921e-01 2.66065608e-01 2.66383390e-01 + 2.66701265e-01 2.67019235e-01 2.67337298e-01 2.67655455e-01 2.67973706e-01 + 2.68292049e-01 2.68610485e-01 2.68929014e-01 2.69247636e-01 2.69566350e-01 + 2.69885156e-01 2.70204055e-01 2.70523045e-01 2.70842127e-01 2.71161300e-01 + 2.71480564e-01 2.71799920e-01 2.72119366e-01 2.72438903e-01 2.72758531e-01 + 2.73078249e-01 2.73398057e-01 2.73717955e-01 2.74037942e-01 2.74358019e-01 + 2.74678186e-01 2.74998442e-01 2.75318787e-01 2.75639220e-01 2.75959743e-01 + 2.76280353e-01 2.76601052e-01 2.76921839e-01 2.77242714e-01 2.77563676e-01 + 2.77884726e-01 2.78205864e-01 2.78527088e-01 2.78848399e-01 2.79169798e-01 + 2.79491282e-01 2.79812853e-01 2.80134510e-01 2.80456254e-01 2.80778083e-01 + 2.81099997e-01 2.81421997e-01 2.81744083e-01 2.82066253e-01 2.82388508e-01 + 2.82710848e-01 2.83033273e-01 2.83355782e-01 2.83678374e-01 2.84001051e-01 + 2.84323812e-01 2.84646656e-01 2.84969584e-01 2.85292594e-01 2.85615688e-01 + 2.85938865e-01 2.86262124e-01 2.86585466e-01 2.86908890e-01 2.87232396e-01 + 2.87555984e-01 2.87879654e-01 2.88203405e-01 2.88527238e-01 2.88851152e-01 + 2.89175147e-01 2.89499222e-01 2.89823378e-01 2.90147615e-01 2.90471932e-01 + 2.90796329e-01 2.91120806e-01 2.91445362e-01 2.91769999e-01 2.92094714e-01 + 2.92419508e-01 2.92744382e-01 2.93069334e-01 2.93394365e-01 2.93719474e-01 + 2.94044662e-01 2.94369927e-01 2.94695271e-01 2.95020692e-01 2.95346191e-01 + 2.95671767e-01 2.95997420e-01 2.96323150e-01 2.96648956e-01 2.96974840e-01 + 2.97300799e-01 2.97626835e-01 2.97952947e-01 2.98279135e-01 2.98605399e-01 + 2.98931738e-01 2.99258152e-01 2.99584642e-01 2.99911206e-01 3.00237845e-01 + 3.00564559e-01 3.00891347e-01 3.01218209e-01 3.01545146e-01 3.01872156e-01 + 3.02199240e-01 3.02526398e-01 3.02853628e-01 3.03180932e-01 3.03508309e-01 + 3.03835759e-01 3.04163281e-01 3.04490876e-01 3.04818543e-01 3.05146281e-01 + 3.05474092e-01 3.05801975e-01 3.06129929e-01 3.06457954e-01 3.06786051e-01 + 3.07114218e-01 3.07442456e-01 3.07770765e-01 3.08099145e-01 3.08427594e-01 + 3.08756114e-01 3.09084703e-01 3.09413363e-01 3.09742091e-01 3.10070890e-01 + 3.10399757e-01 3.10728693e-01 3.11057699e-01 3.11386772e-01 3.11715915e-01 + 3.12045125e-01 3.12374404e-01 3.12703751e-01 3.13033165e-01 3.13362647e-01 + 3.13692197e-01 3.14021813e-01 3.14351497e-01 3.14681248e-01 3.15011065e-01 + 3.15340949e-01 3.15670899e-01 3.16000915e-01 3.16330997e-01 3.16661145e-01 + 3.16991359e-01 3.17321638e-01 3.17651983e-01 3.17982392e-01 3.18312867e-01 + 3.18643406e-01 3.18974010e-01 3.19304678e-01 3.19635411e-01 3.19966207e-01 + 3.20297067e-01 3.20627992e-01 3.20958979e-01 3.21290030e-01 3.21621144e-01 + 3.21952321e-01 3.22283561e-01 3.22614864e-01 3.22946229e-01 3.23277656e-01 + 3.23609146e-01 3.23940697e-01 3.24272310e-01 3.24603985e-01 3.24935721e-01 + 3.25267519e-01 3.25599377e-01 3.25931297e-01 3.26263277e-01 3.26595317e-01 + 3.26927419e-01 3.27259580e-01 3.27591801e-01 3.27924082e-01 3.28256423e-01 + 3.28588824e-01 3.28921283e-01 3.29253802e-01 3.29586380e-01 3.29919017e-01 + 3.30251712e-01 3.30584466e-01 3.30917278e-01 3.31250149e-01 3.31583077e-01 + 3.31916063e-01 3.32249107e-01 3.32582208e-01 3.32915366e-01 3.33248582e-01 + 3.33581854e-01 3.33915183e-01 3.34248569e-01 3.34582011e-01 3.34915510e-01 + 3.35249064e-01 3.35582675e-01 3.35916341e-01 3.36250062e-01 3.36583839e-01 + 3.36917672e-01 3.37251559e-01 3.37585501e-01 3.37919498e-01 3.38253550e-01 + 3.38587656e-01 3.38921816e-01 3.39256030e-01 3.39590298e-01 3.39924620e-01 + 3.40258995e-01 3.40593423e-01 3.40927905e-01 3.41262440e-01 3.41597027e-01 + 3.41931667e-01 3.42266360e-01 3.42601105e-01 3.42935903e-01 3.43270752e-01 + 3.43605653e-01 3.43940606e-01 3.44275610e-01 3.44610666e-01 3.44945772e-01 + 3.45280930e-01 3.45616139e-01 3.45951398e-01 3.46286708e-01 3.46622068e-01 + 3.46957478e-01 3.47292938e-01 3.47628448e-01 3.47964008e-01 3.48299617e-01 + 3.48635275e-01 3.48970983e-01 3.49306740e-01 3.49642545e-01 3.49978399e-01 + 3.50314302e-01 3.50650253e-01 3.50986252e-01 3.51322299e-01 3.51658394e-01 + 3.51994536e-01 3.52330726e-01 3.52666964e-01 3.53003248e-01 3.53339580e-01 + 3.53675958e-01 3.54012383e-01 3.54348855e-01 3.54685373e-01 3.55021937e-01 + 3.55358547e-01 3.55695203e-01 3.56031904e-01 3.56368651e-01 3.56705444e-01 + 3.57042281e-01 3.57379164e-01 3.57716092e-01 3.58053064e-01 3.58390081e-01 + 3.58727142e-01 3.59064247e-01 3.59401397e-01 3.59738590e-01 3.60075827e-01 + 3.60413107e-01 3.60750431e-01 3.61087799e-01 3.61425209e-01 3.61762662e-01 + 3.62100158e-01 3.62437696e-01 3.62775277e-01 3.63112900e-01 3.63450566e-01 + 3.63788273e-01 3.64126022e-01 3.64463812e-01 3.64801645e-01 3.65139518e-01 + 3.65477432e-01 3.65815388e-01 3.66153384e-01 3.66491421e-01 3.66829498e-01 + 3.67167616e-01 3.67505774e-01 3.67843971e-01 3.68182209e-01 3.68520487e-01 + 3.68858803e-01 3.69197160e-01 3.69535555e-01 3.69873990e-01 3.70212463e-01 + 3.70550975e-01 3.70889526e-01 3.71228115e-01 3.71566742e-01 3.71905408e-01 + 3.72244111e-01 3.72582852e-01 3.72921631e-01 3.73260447e-01 3.73599300e-01 + 3.73938191e-01 3.74277119e-01 3.74616083e-01 3.74955084e-01 3.75294122e-01 + 3.75633196e-01 3.75972306e-01 3.76311452e-01 3.76650634e-01 3.76989852e-01 + 3.77329105e-01 3.77668394e-01 3.78007718e-01 3.78347077e-01 3.78686471e-01 + 3.79025899e-01 3.79365363e-01 3.79704861e-01 3.80044393e-01 3.80383959e-01 + 3.80723559e-01 3.81063194e-01 3.81402861e-01 3.81742563e-01 3.82082298e-01 + 3.82422065e-01 3.82761866e-01 3.83101700e-01 3.83441567e-01 3.83781466e-01 + 3.84121398e-01 3.84461362e-01 3.84801358e-01 3.85141386e-01 3.85481446e-01 + 3.85821538e-01 3.86161661e-01 3.86501816e-01 3.86842001e-01 3.87182218e-01 + 3.87522466e-01 3.87862744e-01 3.88203053e-01 3.88543393e-01 3.88883763e-01 + 3.89224162e-01 3.89564592e-01 3.89905052e-01 3.90245541e-01 3.90586060e-01 + 3.90926609e-01 3.91267186e-01 3.91607793e-01 3.91948428e-01 3.92289093e-01 + 3.92629785e-01 3.92970507e-01 3.93311256e-01 3.93652034e-01 3.93992840e-01 + 3.94333674e-01 3.94674535e-01 3.95015424e-01 3.95356341e-01 3.95697284e-01 + 3.96038255e-01 3.96379253e-01 3.96720277e-01 3.97061328e-01 3.97402406e-01 + 3.97743510e-01 3.98084640e-01 3.98425796e-01 3.98766978e-01 3.99108186e-01 + 3.99449420e-01 3.99790679e-01 4.00131963e-01 4.00473272e-01 4.00814607e-01 + 4.01155966e-01 4.01497350e-01 4.01838759e-01 4.02180192e-01 4.02521649e-01 + 4.02863130e-01 4.03204636e-01 4.03546165e-01 4.03887718e-01 4.04229294e-01 + 4.04570894e-01 4.04912517e-01 4.05254163e-01 4.05595832e-01 4.05937524e-01 + 4.06279238e-01 4.06620975e-01 4.06962734e-01 4.07304516e-01 4.07646319e-01 + 4.07988145e-01 4.08329992e-01 4.08671861e-01 4.09013751e-01 4.09355663e-01 + 4.09697596e-01 4.10039549e-01 4.10381524e-01 4.10723520e-01 4.11065536e-01 + 4.11407572e-01 4.11749629e-01 4.12091706e-01 4.12433803e-01 4.12775920e-01 + 4.13118057e-01 4.13460213e-01 4.13802389e-01 4.14144583e-01 4.14486798e-01 + 4.14829031e-01 4.15171283e-01 4.15513553e-01 4.15855843e-01 4.16198150e-01 + 4.16540476e-01 4.16882821e-01 4.17225183e-01 4.17567563e-01 4.17909961e-01 + 4.18252376e-01 4.18594809e-01 4.18937259e-01 4.19279726e-01 4.19622210e-01 + 4.19964711e-01 4.20307229e-01 4.20649763e-01 4.20992314e-01 4.21334881e-01 + 4.21677465e-01 4.22020064e-01 4.22362679e-01 4.22705310e-01 4.23047957e-01 + 4.23390619e-01 4.23733296e-01 4.24075988e-01 4.24418696e-01 4.24761418e-01 + 4.25104155e-01 4.25446907e-01 4.25789673e-01 4.26132454e-01 4.26475249e-01 + 4.26818057e-01 4.27160880e-01 4.27503717e-01 4.27846567e-01 4.28189430e-01 + 4.28532307e-01 4.28875197e-01 4.29218101e-01 4.29561017e-01 4.29903946e-01 + 4.30246888e-01 4.30589842e-01 4.30932808e-01 4.31275787e-01 4.31618778e-01 + 4.31961781e-01 4.32304796e-01 4.32647822e-01 4.32990860e-01 4.33333909e-01 + 4.33676970e-01 4.34020042e-01 4.34363125e-01 4.34706219e-01 4.35049323e-01 + 4.35392438e-01 4.35735564e-01 4.36078700e-01 4.36421846e-01 4.36765002e-01 + 4.37108168e-01 4.37451344e-01 4.37794529e-01 4.38137724e-01 4.38480929e-01 + 4.38824142e-01 4.39167365e-01 4.39510597e-01 4.39853837e-01 4.40197087e-01 + 4.40540345e-01 4.40883611e-01 4.41226885e-01 4.41570168e-01 4.41913459e-01 + 4.42256758e-01 4.42600064e-01 4.42943378e-01 4.43286700e-01 4.43630029e-01 + 4.43973365e-01 4.44316708e-01 4.44660058e-01 4.45003416e-01 4.45346779e-01 + 4.45690150e-01 4.46033526e-01 4.46376910e-01 4.46720299e-01 4.47063694e-01 + 4.47407095e-01 4.47750502e-01 4.48093915e-01 4.48437333e-01 4.48780757e-01 + 4.49124185e-01 4.49467619e-01 4.49811058e-01 4.50154502e-01 4.50497950e-01 + 4.50841403e-01 4.51184861e-01 4.51528322e-01 4.51871788e-01 4.52215259e-01 + 4.52558733e-01 4.52902210e-01 4.53245692e-01 4.53589177e-01 4.53932665e-01 + 4.54276157e-01 4.54619652e-01 4.54963150e-01 4.55306651e-01 4.55650154e-01 + 2.08130000e-04 2.08281191e-04 2.08734762e-04 2.09490714e-04 2.10549046e-04 + 2.11909757e-04 2.13572846e-04 2.15538310e-04 2.17806148e-04 2.20376358e-04 + 2.23248936e-04 2.26423882e-04 2.29901190e-04 2.33680858e-04 2.37762883e-04 + 2.42147260e-04 2.46833984e-04 2.51823051e-04 2.57114457e-04 2.62708196e-04 + 2.68604263e-04 2.74802652e-04 2.81303356e-04 2.88106370e-04 2.95211687e-04 + 3.02619299e-04 3.10329200e-04 3.18341382e-04 3.26655837e-04 3.35272557e-04 + 3.44191533e-04 3.53412758e-04 3.62936221e-04 3.72761913e-04 3.82889825e-04 + 3.93319947e-04 4.04052269e-04 4.15086779e-04 4.26423468e-04 4.38062324e-04 + 4.50003336e-04 4.62246492e-04 4.74791780e-04 4.87639188e-04 5.00788703e-04 + 5.14240312e-04 5.27994002e-04 5.42049760e-04 5.56407572e-04 5.71067423e-04 + 5.86029300e-04 6.01293187e-04 6.16859071e-04 6.32726934e-04 6.48896763e-04 + 6.65368541e-04 6.82142252e-04 6.99217880e-04 7.16595407e-04 7.34274817e-04 + 7.52256092e-04 7.70539216e-04 7.89124169e-04 8.08010934e-04 8.27199493e-04 + 8.46689825e-04 8.66481913e-04 8.86575737e-04 9.06971278e-04 9.27668514e-04 + 9.48667427e-04 9.69967995e-04 9.91570198e-04 1.01347401e-03 1.03567942e-03 + 1.05818640e-03 1.08099493e-03 1.10410498e-03 1.12751654e-03 1.15122957e-03 + 1.17524406e-03 1.19955999e-03 1.22417733e-03 1.24909605e-03 1.27431613e-03 + 1.29983755e-03 1.32566029e-03 1.35178430e-03 1.37820958e-03 1.40493610e-03 + 1.43196382e-03 1.45929272e-03 1.48692278e-03 1.51485397e-03 1.54308626e-03 + 1.57161963e-03 1.60045404e-03 1.62958946e-03 1.65902588e-03 1.68876325e-03 + 1.71880156e-03 1.74914077e-03 1.77978085e-03 1.81072177e-03 1.84196351e-03 + 1.87350602e-03 1.90534929e-03 1.93749327e-03 1.96993795e-03 2.00268328e-03 + 2.03572923e-03 2.06907577e-03 2.10272288e-03 2.13667051e-03 2.17091863e-03 + 2.20546721e-03 2.24031622e-03 2.27546562e-03 2.31091538e-03 2.34666546e-03 + 2.38271583e-03 2.41906645e-03 2.45571729e-03 2.49266831e-03 2.52991947e-03 + 2.56747075e-03 2.60532209e-03 2.64347347e-03 2.68192485e-03 2.72067619e-03 + 2.75972745e-03 2.79907859e-03 2.83872959e-03 2.87868038e-03 2.91893095e-03 + 2.95948125e-03 3.00033123e-03 3.04148087e-03 3.08293011e-03 3.12467892e-03 + 3.16672726e-03 3.20907509e-03 3.25172236e-03 3.29466904e-03 3.33791508e-03 + 3.38146044e-03 3.42530507e-03 3.46944894e-03 3.51389201e-03 3.55863422e-03 + 3.60367554e-03 3.64901591e-03 3.69465531e-03 3.74059367e-03 3.78683096e-03 + 3.83336714e-03 3.88020215e-03 3.92733595e-03 3.97476850e-03 4.02249975e-03 + 4.07052965e-03 4.11885815e-03 4.16748522e-03 4.21641079e-03 4.26563483e-03 + 4.31515728e-03 4.36497811e-03 4.41509725e-03 4.46551466e-03 4.51623029e-03 + 4.56724409e-03 4.61855601e-03 4.67016601e-03 4.72207403e-03 4.77428002e-03 + 4.82678393e-03 4.87958570e-03 4.93268530e-03 4.98608266e-03 5.03977774e-03 + 5.09377048e-03 5.14806083e-03 5.20264873e-03 5.25753414e-03 5.31271700e-03 + 5.36819725e-03 5.42397485e-03 5.48004973e-03 5.53642185e-03 5.59309115e-03 + 5.65005757e-03 5.70732106e-03 5.76488157e-03 5.82273903e-03 5.88089339e-03 + 5.93934459e-03 5.99809258e-03 6.05713731e-03 6.11647870e-03 6.17611671e-03 + 6.23605128e-03 6.29628235e-03 6.35680986e-03 6.41763375e-03 6.47875396e-03 + 6.54017044e-03 6.60188312e-03 6.66389194e-03 6.72619685e-03 6.78879778e-03 + 6.85169468e-03 6.91488748e-03 6.97837611e-03 7.04216053e-03 7.10624066e-03 + 7.17061645e-03 7.23528783e-03 7.30025474e-03 7.36551712e-03 7.43107490e-03 + 7.49692802e-03 7.56307641e-03 7.62952002e-03 7.69625878e-03 7.76329262e-03 + 7.83062147e-03 7.89824528e-03 7.96616398e-03 8.03437750e-03 8.10288577e-03 + 8.17168874e-03 8.24078632e-03 8.31017847e-03 8.37986510e-03 8.44984615e-03 + 8.52012155e-03 8.59069124e-03 8.66155515e-03 8.73271321e-03 8.80416535e-03 + 8.87591149e-03 8.94795158e-03 9.02028554e-03 9.09291331e-03 9.16583480e-03 + 9.23904995e-03 9.31255870e-03 9.38636096e-03 9.46045668e-03 9.53484577e-03 + 9.60952816e-03 9.68450379e-03 9.75977258e-03 9.83533445e-03 9.91118934e-03 + 9.98733717e-03 1.00637779e-02 1.01405114e-02 1.02175376e-02 1.02948564e-02 + 1.03724679e-02 1.04503718e-02 1.05285681e-02 1.06070568e-02 1.06858378e-02 + 1.07649109e-02 1.08442762e-02 1.09239335e-02 1.10038828e-02 1.10841240e-02 + 1.11646570e-02 1.12454817e-02 1.13265980e-02 1.14080060e-02 1.14897054e-02 + 1.15716963e-02 1.16539785e-02 1.17365519e-02 1.18194166e-02 1.19025723e-02 + 1.19860191e-02 1.20697568e-02 1.21537854e-02 1.22381047e-02 1.23227148e-02 + 1.24076155e-02 1.24928067e-02 1.25782883e-02 1.26640604e-02 1.27501227e-02 + 1.28364752e-02 1.29231179e-02 1.30100506e-02 1.30972732e-02 1.31847858e-02 + 1.32725881e-02 1.33606801e-02 1.34490618e-02 1.35377329e-02 1.36266936e-02 + 1.37159436e-02 1.38054829e-02 1.38953113e-02 1.39854289e-02 1.40758355e-02 + 1.41665311e-02 1.42575155e-02 1.43487886e-02 1.44403504e-02 1.45322008e-02 + 1.46243398e-02 1.47167671e-02 1.48094827e-02 1.49024866e-02 1.49957786e-02 + 1.50893587e-02 1.51832267e-02 1.52773826e-02 1.53718263e-02 1.54665577e-02 + 1.55615767e-02 1.56568832e-02 1.57524771e-02 1.58483584e-02 1.59445269e-02 + 1.60409825e-02 1.61377252e-02 1.62347549e-02 1.63320714e-02 1.64296747e-02 + 1.65275647e-02 1.66257413e-02 1.67242043e-02 1.68229538e-02 1.69219896e-02 + 1.70213116e-02 1.71209197e-02 1.72208138e-02 1.73209939e-02 1.74214598e-02 + 1.75222114e-02 1.76232487e-02 1.77245715e-02 1.78261798e-02 1.79280734e-02 + 1.80302523e-02 1.81327163e-02 1.82354654e-02 1.83384994e-02 1.84418184e-02 + 1.85454220e-02 1.86493104e-02 1.87534833e-02 1.88579407e-02 1.89626824e-02 + 1.90677084e-02 1.91730186e-02 1.92786129e-02 1.93844911e-02 1.94906532e-02 + 1.95970991e-02 1.97038286e-02 1.98108417e-02 1.99181382e-02 2.00257182e-02 + 2.01335813e-02 2.02417277e-02 2.03501571e-02 2.04588694e-02 2.05678646e-02 + 2.06771425e-02 2.07867031e-02 2.08965462e-02 2.10066717e-02 2.11170796e-02 + 2.12277697e-02 2.13387419e-02 2.14499962e-02 2.15615323e-02 2.16733503e-02 + 2.17854499e-02 2.18978311e-02 2.20104938e-02 2.21234379e-02 2.22366633e-02 + 2.23501698e-02 2.24639574e-02 2.25780260e-02 2.26923753e-02 2.28070055e-02 + 2.29219162e-02 2.30371074e-02 2.31525791e-02 2.32683311e-02 2.33843632e-02 + 2.35006755e-02 2.36172677e-02 2.37341397e-02 2.38512915e-02 2.39687230e-02 + 2.40864339e-02 2.42044243e-02 2.43226940e-02 2.44412429e-02 2.45600709e-02 + 2.46791779e-02 2.47985637e-02 2.49182282e-02 2.50381714e-02 2.51583931e-02 + 2.52788932e-02 2.53996717e-02 2.55207283e-02 2.56420629e-02 2.57636755e-02 + 2.58855660e-02 2.60077341e-02 2.61301799e-02 2.62529032e-02 2.63759039e-02 + 2.64991818e-02 2.66227368e-02 2.67465689e-02 2.68706779e-02 2.69950637e-02 + 2.71197262e-02 2.72446653e-02 2.73698808e-02 2.74953726e-02 2.76211406e-02 + 2.77471848e-02 2.78735049e-02 2.80001009e-02 2.81269726e-02 2.82541199e-02 + 2.83815427e-02 2.85092409e-02 2.86372144e-02 2.87654630e-02 2.88939867e-02 + 2.90227852e-02 2.91518585e-02 2.92812065e-02 2.94108290e-02 2.95407260e-02 + 2.96708972e-02 2.98013426e-02 2.99320621e-02 3.00630555e-02 3.01943227e-02 + 3.03258636e-02 3.04576781e-02 3.05897660e-02 3.07221272e-02 3.08547616e-02 + 3.09876691e-02 3.11208496e-02 3.12543028e-02 3.13880288e-02 3.15220273e-02 + 3.16562983e-02 3.17908416e-02 3.19256571e-02 3.20607447e-02 3.21961042e-02 + 3.23317356e-02 3.24676386e-02 3.26038132e-02 3.27402593e-02 3.28769766e-02 + 3.30139652e-02 3.31512248e-02 3.32887554e-02 3.34265567e-02 3.35646288e-02 + 3.37029714e-02 3.38415844e-02 3.39804677e-02 3.41196212e-02 3.42590447e-02 + 3.43987381e-02 3.45387013e-02 3.46789341e-02 3.48194365e-02 3.49602082e-02 + 3.51012492e-02 3.52425593e-02 3.53841384e-02 3.55259864e-02 3.56681031e-02 + 3.58104884e-02 3.59531422e-02 3.60960643e-02 3.62392547e-02 3.63827131e-02 + 3.65264394e-02 3.66704335e-02 3.68146954e-02 3.69592247e-02 3.71040215e-02 + 3.72490856e-02 3.73944167e-02 3.75400149e-02 3.76858800e-02 3.78320118e-02 + 3.79784102e-02 3.81250751e-02 3.82720063e-02 3.84192037e-02 3.85666672e-02 + 3.87143966e-02 3.88623918e-02 3.90106526e-02 3.91591790e-02 3.93079707e-02 + 3.94570277e-02 3.96063498e-02 3.97559369e-02 3.99057888e-02 4.00559054e-02 + 4.02062865e-02 4.03569321e-02 4.05078419e-02 4.06590159e-02 4.08104539e-02 + 4.09621558e-02 4.11141214e-02 4.12663506e-02 4.14188432e-02 4.15715991e-02 + 4.17246182e-02 4.18779004e-02 4.20314454e-02 4.21852532e-02 4.23393235e-02 + 4.24936564e-02 4.26482515e-02 4.28031089e-02 4.29582283e-02 4.31136096e-02 + 4.32692526e-02 4.34251573e-02 4.35813234e-02 4.37377508e-02 4.38944395e-02 + 4.40513892e-02 4.42085998e-02 4.43660711e-02 4.45238031e-02 4.46817956e-02 + 4.48400483e-02 4.49985613e-02 4.51573343e-02 4.53163671e-02 4.54756598e-02 + 4.56352120e-02 4.57950237e-02 4.59550947e-02 4.61154249e-02 4.62760141e-02 + 4.64368622e-02 4.65979690e-02 4.67593344e-02 4.69209582e-02 4.70828403e-02 + 4.72449806e-02 4.74073789e-02 4.75700350e-02 4.77329488e-02 4.78961202e-02 + 4.80595489e-02 4.82232350e-02 4.83871781e-02 4.85513782e-02 4.87158351e-02 + 4.88805487e-02 4.90455188e-02 4.92107453e-02 4.93762280e-02 4.95419667e-02 + 4.97079614e-02 4.98742118e-02 5.00407179e-02 5.02074794e-02 5.03744963e-02 + 5.05417683e-02 5.07092953e-02 5.08770772e-02 5.10451138e-02 5.12134049e-02 + 5.13819505e-02 5.15507503e-02 5.17198043e-02 5.18891121e-02 5.20586738e-02 + 5.22284892e-02 5.23985580e-02 5.25688802e-02 5.27394555e-02 5.29102839e-02 + 5.30813652e-02 5.32526992e-02 5.34242858e-02 5.35961248e-02 5.37682161e-02 + 5.39405595e-02 5.41131548e-02 5.42860020e-02 5.44591008e-02 5.46324511e-02 + 5.48060527e-02 5.49799055e-02 5.51540094e-02 5.53283641e-02 5.55029695e-02 + 5.56778255e-02 5.58529319e-02 5.60282885e-02 5.62038952e-02 5.63797519e-02 + 5.65558583e-02 5.67322144e-02 5.69088199e-02 5.70856747e-02 5.72627786e-02 + 5.74401316e-02 5.76177334e-02 5.77955838e-02 5.79736828e-02 5.81520301e-02 + 5.83306256e-02 5.85094691e-02 5.86885605e-02 5.88678997e-02 5.90474864e-02 + 5.92273205e-02 5.94074018e-02 5.95877302e-02 5.97683055e-02 5.99491276e-02 + 6.01301963e-02 6.03115114e-02 6.04930728e-02 6.06748803e-02 6.08569338e-02 + 6.10392330e-02 6.12217779e-02 6.14045683e-02 6.15876039e-02 6.17708848e-02 + 6.19544105e-02 6.21381812e-02 6.23221964e-02 6.25064562e-02 6.26909603e-02 + 6.28757085e-02 6.30607008e-02 6.32459369e-02 6.34314167e-02 6.36171400e-02 + 6.38031067e-02 6.39893165e-02 6.41757694e-02 6.43624651e-02 6.45494036e-02 + 6.47365845e-02 6.49240078e-02 6.51116734e-02 6.52995809e-02 6.54877303e-02 + 6.56761215e-02 6.58647541e-02 6.60536282e-02 6.62427434e-02 6.64320997e-02 + 6.66216969e-02 6.68115348e-02 6.70016132e-02 6.71919320e-02 6.73824910e-02 + 6.75732900e-02 6.77643289e-02 6.79556075e-02 6.81471257e-02 6.83388832e-02 + 6.85308799e-02 6.87231157e-02 6.89155904e-02 6.91083037e-02 6.93012556e-02 + 6.94944458e-02 6.96878742e-02 6.98815407e-02 7.00754450e-02 7.02695870e-02 + 7.04639665e-02 7.06585833e-02 7.08534374e-02 7.10485284e-02 7.12438563e-02 + 7.14394208e-02 7.16352219e-02 7.18312593e-02 7.20275328e-02 7.22240423e-02 + 7.24207876e-02 7.26177686e-02 7.28149851e-02 7.30124368e-02 7.32101237e-02 + 7.34080456e-02 7.36062022e-02 7.38045935e-02 7.40032192e-02 7.42020791e-02 + 7.44011732e-02 7.46005012e-02 7.48000630e-02 7.49998583e-02 7.51998870e-02 + 7.54001490e-02 7.56006441e-02 7.58013720e-02 7.60023326e-02 7.62035258e-02 + 7.64049514e-02 7.66066092e-02 7.68084989e-02 7.70106206e-02 7.72129739e-02 + 7.74155587e-02 7.76183748e-02 7.78214221e-02 7.80247003e-02 7.82282094e-02 + 7.84319490e-02 7.86359192e-02 7.88401196e-02 7.90445501e-02 7.92492105e-02 + 7.94541007e-02 7.96592204e-02 7.98645695e-02 8.00701479e-02 8.02759553e-02 + 8.04819916e-02 8.06882565e-02 8.08947500e-02 8.11014718e-02 8.13084218e-02 + 8.15155998e-02 8.17230055e-02 8.19306389e-02 8.21384998e-02 8.23465879e-02 + 8.25549031e-02 8.27634452e-02 8.29722141e-02 8.31812095e-02 8.33904313e-02 + 8.35998794e-02 8.38095534e-02 8.40194533e-02 8.42295789e-02 8.44399299e-02 + 8.46505063e-02 8.48613078e-02 8.50723343e-02 8.52835855e-02 8.54950613e-02 + 8.57067616e-02 8.59186860e-02 8.61308346e-02 8.63432070e-02 8.65558031e-02 + 8.67686227e-02 8.69816656e-02 8.71949318e-02 8.74084208e-02 8.76221327e-02 + 8.78360672e-02 8.80502241e-02 8.82646033e-02 8.84792045e-02 8.86940276e-02 + 8.89090725e-02 8.91243388e-02 8.93398265e-02 8.95555354e-02 8.97714652e-02 + 8.99876159e-02 9.02039871e-02 9.04205788e-02 9.06373908e-02 9.08544228e-02 + 9.10716747e-02 9.12891463e-02 9.15068374e-02 9.17247478e-02 9.19428774e-02 + 9.21612260e-02 9.23797934e-02 9.25985793e-02 9.28175837e-02 9.30368064e-02 + 9.32562470e-02 9.34759056e-02 9.36957818e-02 9.39158756e-02 9.41361866e-02 + 9.43567148e-02 9.45774599e-02 9.47984219e-02 9.50196003e-02 9.52409952e-02 + 9.54626063e-02 9.56844334e-02 9.59064764e-02 9.61287350e-02 9.63512090e-02 + 9.65738984e-02 9.67968029e-02 9.70199222e-02 9.72432563e-02 9.74668050e-02 + 9.76905680e-02 9.79145452e-02 9.81387363e-02 9.83631413e-02 9.85877598e-02 + 9.88125918e-02 9.90376370e-02 9.92628953e-02 9.94883665e-02 9.97140503e-02 + 9.99399466e-02 1.00166055e-01 1.00392376e-01 1.00618909e-01 1.00845653e-01 + 1.01072609e-01 1.01299776e-01 1.01527155e-01 1.01754744e-01 1.01982545e-01 + 1.02210556e-01 1.02438777e-01 1.02667209e-01 1.02895850e-01 1.03124702e-01 + 1.03353763e-01 1.03583034e-01 1.03812514e-01 1.04042203e-01 1.04272101e-01 + 1.04502207e-01 1.04732523e-01 1.04963046e-01 1.05193778e-01 1.05424718e-01 + 1.05655865e-01 1.05887221e-01 1.06118783e-01 1.06350553e-01 1.06582530e-01 + 1.06814713e-01 1.07047104e-01 1.07279701e-01 1.07512504e-01 1.07745513e-01 + 1.07978728e-01 1.08212148e-01 1.08445775e-01 1.08679606e-01 1.08913643e-01 + 1.09147884e-01 1.09382331e-01 1.09616982e-01 1.09851837e-01 1.10086896e-01 + 1.10322160e-01 1.10557627e-01 1.10793298e-01 1.11029172e-01 1.11265249e-01 + 1.11501530e-01 1.11738013e-01 1.11974699e-01 1.12211587e-01 1.12448678e-01 + 1.12685971e-01 1.12923465e-01 1.13161162e-01 1.13399059e-01 1.13637158e-01 + 1.13875458e-01 1.14113960e-01 1.14352661e-01 1.14591564e-01 1.14830666e-01 + 1.15069969e-01 1.15309472e-01 1.15549174e-01 1.15789076e-01 1.16029178e-01 + 1.16269478e-01 1.16509978e-01 1.16750676e-01 1.16991573e-01 1.17232669e-01 + 1.17473962e-01 1.17715454e-01 1.17957143e-01 1.18199030e-01 1.18441115e-01 + 1.18683397e-01 1.18925875e-01 1.19168551e-01 1.19411423e-01 1.19654492e-01 + 1.19897757e-01 1.20141218e-01 1.20384875e-01 1.20628728e-01 1.20872776e-01 + 1.21117020e-01 1.21361458e-01 1.21606092e-01 1.21850920e-01 1.22095943e-01 + 1.22341160e-01 1.22586571e-01 1.22832176e-01 1.23077975e-01 1.23323967e-01 + 1.23570153e-01 1.23816532e-01 1.24063104e-01 1.24309869e-01 1.24556826e-01 + 1.24803975e-01 1.25051317e-01 1.25298851e-01 1.25546576e-01 1.25794494e-01 + 1.26042602e-01 1.26290902e-01 1.26539393e-01 1.26788074e-01 1.27036946e-01 + 1.27286009e-01 1.27535261e-01 1.27784704e-01 1.28034337e-01 1.28284159e-01 + 1.28534171e-01 1.28784372e-01 1.29034762e-01 1.29285340e-01 1.29536108e-01 + 1.29787064e-01 1.30038208e-01 1.30289540e-01 1.30541060e-01 1.30792768e-01 + 1.31044663e-01 1.31296746e-01 1.31549015e-01 1.31801471e-01 1.32054115e-01 + 1.32306944e-01 1.32559960e-01 1.32813162e-01 1.33066550e-01 1.33320123e-01 + 1.33573882e-01 1.33827826e-01 1.34081956e-01 1.34336270e-01 1.34590769e-01 + 1.34845452e-01 1.35100320e-01 1.35355372e-01 1.35610608e-01 1.35866027e-01 + 1.36121630e-01 1.36377417e-01 1.36633386e-01 1.36889538e-01 1.37145873e-01 + 1.37402391e-01 1.37659091e-01 1.37915973e-01 1.38173037e-01 1.38430283e-01 + 1.38687710e-01 1.38945318e-01 1.39203108e-01 1.39461079e-01 1.39719230e-01 + 1.39977562e-01 1.40236074e-01 1.40494766e-01 1.40753639e-01 1.41012691e-01 + 1.41271922e-01 1.41531333e-01 1.41790923e-01 1.42050692e-01 1.42310640e-01 + 1.42570766e-01 1.42831071e-01 1.43091554e-01 1.43352214e-01 1.43613053e-01 + 1.43874069e-01 1.44135262e-01 1.44396633e-01 1.44658180e-01 1.44919904e-01 + 1.45181805e-01 1.45443882e-01 1.45706135e-01 1.45968565e-01 1.46231170e-01 + 1.46493950e-01 1.46756906e-01 1.47020037e-01 1.47283343e-01 1.47546824e-01 + 1.47810479e-01 1.48074308e-01 1.48338312e-01 1.48602490e-01 1.48866841e-01 + 1.49131366e-01 1.49396065e-01 1.49660936e-01 1.49925981e-01 1.50191198e-01 + 1.50456588e-01 1.50722150e-01 1.50987884e-01 1.51253790e-01 1.51519868e-01 + 1.51786118e-01 1.52052539e-01 1.52319131e-01 1.52585894e-01 1.52852827e-01 + 1.53119932e-01 1.53387206e-01 1.53654651e-01 1.53922266e-01 1.54190050e-01 + 1.54458004e-01 1.54726127e-01 1.54994420e-01 1.55262881e-01 1.55531511e-01 + 1.55800310e-01 1.56069277e-01 1.56338412e-01 1.56607715e-01 1.56877186e-01 + 1.57146824e-01 1.57416630e-01 1.57686603e-01 1.57956743e-01 1.58227049e-01 + 1.58497522e-01 1.58768161e-01 1.59038967e-01 1.59309938e-01 1.59581075e-01 + 1.59852378e-01 1.60123846e-01 1.60395479e-01 1.60667277e-01 1.60939240e-01 + 1.61211367e-01 1.61483659e-01 1.61756114e-01 1.62028734e-01 1.62301517e-01 + 1.62574464e-01 1.62847574e-01 1.63120847e-01 1.63394283e-01 1.63667882e-01 + 1.63941644e-01 1.64215567e-01 1.64489653e-01 1.64763901e-01 1.65038310e-01 + 1.65312881e-01 1.65587613e-01 1.65862506e-01 1.66137560e-01 1.66412775e-01 + 1.66688150e-01 1.66963686e-01 1.67239381e-01 1.67515237e-01 1.67791252e-01 + 1.68067427e-01 1.68343761e-01 1.68620254e-01 1.68896906e-01 1.69173717e-01 + 1.69450686e-01 1.69727813e-01 1.70005098e-01 1.70282542e-01 1.70560143e-01 + 1.70837901e-01 1.71115817e-01 1.71393889e-01 1.71672119e-01 1.71950505e-01 + 1.72229048e-01 1.72507747e-01 1.72786602e-01 1.73065613e-01 1.73344779e-01 + 1.73624101e-01 1.73903579e-01 1.74183211e-01 1.74462998e-01 1.74742940e-01 + 1.75023036e-01 1.75303286e-01 1.75583691e-01 1.75864249e-01 1.76144961e-01 + 1.76425826e-01 1.76706845e-01 1.76988017e-01 1.77269341e-01 1.77550818e-01 + 1.77832448e-01 1.78114229e-01 1.78396163e-01 1.78678248e-01 1.78960486e-01 + 1.79242874e-01 1.79525414e-01 1.79808105e-01 1.80090946e-01 1.80373938e-01 + 1.80657081e-01 1.80940374e-01 1.81223816e-01 1.81507409e-01 1.81791151e-01 + 1.82075043e-01 1.82359084e-01 1.82643273e-01 1.82927612e-01 1.83212099e-01 + 1.83496734e-01 1.83781518e-01 1.84066450e-01 1.84351529e-01 1.84636756e-01 + 1.84922131e-01 1.85207652e-01 1.85493321e-01 1.85779136e-01 1.86065098e-01 + 1.86351206e-01 1.86637461e-01 1.86923861e-01 1.87210407e-01 1.87497099e-01 + 1.87783936e-01 1.88070919e-01 1.88358046e-01 1.88645318e-01 1.88932734e-01 + 1.89220295e-01 1.89508000e-01 1.89795849e-01 1.90083842e-01 1.90371978e-01 + 1.90660258e-01 1.90948681e-01 1.91237246e-01 1.91525955e-01 1.91814806e-01 + 1.92103799e-01 1.92392935e-01 1.92682212e-01 1.92971631e-01 1.93261192e-01 + 1.93550894e-01 1.93840737e-01 1.94130721e-01 1.94420846e-01 1.94711111e-01 + 1.95001517e-01 1.95292063e-01 1.95582748e-01 1.95873574e-01 1.96164539e-01 + 1.96455643e-01 1.96746886e-01 1.97038269e-01 1.97329790e-01 1.97621449e-01 + 1.97913247e-01 1.98205183e-01 1.98497257e-01 1.98789469e-01 1.99081818e-01 + 1.99374304e-01 1.99666928e-01 1.99959688e-01 2.00252585e-01 2.00545619e-01 + 2.00838789e-01 2.01132095e-01 2.01425537e-01 2.01719114e-01 2.02012828e-01 + 2.02306676e-01 2.02600660e-01 2.02894778e-01 2.03189031e-01 2.03483419e-01 + 2.03777941e-01 2.04072597e-01 2.04367387e-01 2.04662311e-01 2.04957368e-01 + 2.05252558e-01 2.05547882e-01 2.05843338e-01 2.06138928e-01 2.06434649e-01 + 2.06730503e-01 2.07026489e-01 2.07322607e-01 2.07618857e-01 2.07915238e-01 + 2.08211750e-01 2.08508394e-01 2.08805168e-01 2.09102073e-01 2.09399109e-01 + 2.09696275e-01 2.09993571e-01 2.10290997e-01 2.10588552e-01 2.10886237e-01 + 2.11184052e-01 2.11481995e-01 2.11780068e-01 2.12078269e-01 2.12376598e-01 + 2.12675056e-01 2.12973642e-01 2.13272356e-01 2.13571197e-01 2.13870166e-01 + 2.14169263e-01 2.14468486e-01 2.14767837e-01 2.15067314e-01 2.15366917e-01 + 2.15666647e-01 2.15966503e-01 2.16266485e-01 2.16566592e-01 2.16866825e-01 + 2.17167184e-01 2.17467667e-01 2.17768276e-01 2.18069009e-01 2.18369866e-01 + 2.18670848e-01 2.18971954e-01 2.19273184e-01 2.19574538e-01 2.19876015e-01 + 2.20177615e-01 2.20479339e-01 2.20781185e-01 2.21083155e-01 2.21385246e-01 + 2.21687460e-01 2.21989797e-01 2.22292255e-01 2.22594835e-01 2.22897536e-01 + 2.23200359e-01 2.23503303e-01 2.23806367e-01 2.24109553e-01 2.24412859e-01 + 2.24716285e-01 2.25019832e-01 2.25323498e-01 2.25627285e-01 2.25931191e-01 + 2.26235216e-01 2.26539360e-01 2.26843623e-01 2.27148005e-01 2.27452506e-01 + 2.27757125e-01 2.28061862e-01 2.28366717e-01 2.28671690e-01 2.28976780e-01 + 2.29281988e-01 2.29587313e-01 2.29892755e-01 2.30198313e-01 2.30503989e-01 + 2.30809780e-01 2.31115688e-01 2.31421712e-01 2.31727852e-01 2.32034107e-01 + 2.32340478e-01 2.32646964e-01 2.32953565e-01 2.33260280e-01 2.33567111e-01 + 2.33874055e-01 2.34181114e-01 2.34488287e-01 2.34795574e-01 2.35102975e-01 + 2.35410489e-01 2.35718116e-01 2.36025856e-01 2.36333709e-01 2.36641675e-01 + 2.36949753e-01 2.37257943e-01 2.37566246e-01 2.37874660e-01 2.38183186e-01 + 2.38491824e-01 2.38800572e-01 2.39109432e-01 2.39418403e-01 2.39727484e-01 + 2.40036676e-01 2.40345978e-01 2.40655391e-01 2.40964913e-01 2.41274545e-01 + 2.41584286e-01 2.41894137e-01 2.42204097e-01 2.42514166e-01 2.42824344e-01 + 2.43134630e-01 2.43445024e-01 2.43755527e-01 2.44066138e-01 2.44376856e-01 + 2.44687682e-01 2.44998615e-01 2.45309656e-01 2.45620803e-01 2.45932058e-01 + 2.46243419e-01 2.46554886e-01 2.46866459e-01 2.47178139e-01 2.47489924e-01 + 2.47801815e-01 2.48113812e-01 2.48425913e-01 2.48738120e-01 2.49050431e-01 + 2.49362848e-01 2.49675368e-01 2.49987993e-01 2.50300722e-01 2.50613555e-01 + 2.50926492e-01 2.51239532e-01 2.51552675e-01 2.51865922e-01 2.52179271e-01 + 2.52492723e-01 2.52806278e-01 2.53119935e-01 2.53433694e-01 2.53747555e-01 + 2.54061518e-01 2.54375582e-01 2.54689748e-01 2.55004015e-01 2.55318383e-01 + 2.55632851e-01 2.55947421e-01 2.56262090e-01 2.56576860e-01 2.56891730e-01 + 2.57206700e-01 2.57521770e-01 2.57836938e-01 2.58152207e-01 2.58467574e-01 + 2.58783040e-01 2.59098605e-01 2.59414268e-01 2.59730029e-01 2.60045889e-01 + 2.60361847e-01 2.60677902e-01 2.60994055e-01 2.61310305e-01 2.61626652e-01 + 2.61943096e-01 2.62259637e-01 2.62576275e-01 2.62893009e-01 2.63209839e-01 + 2.63526765e-01 2.63843787e-01 2.64160905e-01 2.64478118e-01 2.64795426e-01 + 2.65112830e-01 2.65430328e-01 2.65747921e-01 2.66065608e-01 2.66383390e-01 + 2.66701265e-01 2.67019235e-01 2.67337298e-01 2.67655455e-01 2.67973706e-01 + 2.68292049e-01 2.68610485e-01 2.68929014e-01 2.69247636e-01 2.69566350e-01 + 2.69885156e-01 2.70204055e-01 2.70523045e-01 2.70842127e-01 2.71161300e-01 + 2.71480564e-01 2.71799920e-01 2.72119366e-01 2.72438903e-01 2.72758531e-01 + 2.73078249e-01 2.73398057e-01 2.73717955e-01 2.74037942e-01 2.74358019e-01 + 2.74678186e-01 2.74998442e-01 2.75318787e-01 2.75639220e-01 2.75959743e-01 + 2.76280353e-01 2.76601052e-01 2.76921839e-01 2.77242714e-01 2.77563676e-01 + 2.77884726e-01 2.78205864e-01 2.78527088e-01 2.78848399e-01 2.79169798e-01 + 2.79491282e-01 2.79812853e-01 2.80134510e-01 2.80456254e-01 2.80778083e-01 + 2.81099997e-01 2.81421997e-01 2.81744083e-01 2.82066253e-01 2.82388508e-01 + 2.82710848e-01 2.83033273e-01 2.83355782e-01 2.83678374e-01 2.84001051e-01 + 2.84323812e-01 2.84646656e-01 2.84969584e-01 2.85292594e-01 2.85615688e-01 + 2.85938865e-01 2.86262124e-01 2.86585466e-01 2.86908890e-01 2.87232396e-01 + 2.87555984e-01 2.87879654e-01 2.88203405e-01 2.88527238e-01 2.88851152e-01 + 2.89175147e-01 2.89499222e-01 2.89823378e-01 2.90147615e-01 2.90471932e-01 + 2.90796329e-01 2.91120806e-01 2.91445362e-01 2.91769999e-01 2.92094714e-01 + 2.92419508e-01 2.92744382e-01 2.93069334e-01 2.93394365e-01 2.93719474e-01 + 2.94044662e-01 2.94369927e-01 2.94695271e-01 2.95020692e-01 2.95346191e-01 + 2.95671767e-01 2.95997420e-01 2.96323150e-01 2.96648956e-01 2.96974840e-01 + 2.97300799e-01 2.97626835e-01 2.97952947e-01 2.98279135e-01 2.98605399e-01 + 2.98931738e-01 2.99258152e-01 2.99584642e-01 2.99911206e-01 3.00237845e-01 + 3.00564559e-01 3.00891347e-01 3.01218209e-01 3.01545146e-01 3.01872156e-01 + 3.02199240e-01 3.02526398e-01 3.02853628e-01 3.03180932e-01 3.03508309e-01 + 3.03835759e-01 3.04163281e-01 3.04490876e-01 3.04818543e-01 3.05146281e-01 + 3.05474092e-01 3.05801975e-01 3.06129929e-01 3.06457954e-01 3.06786051e-01 + 3.07114218e-01 3.07442456e-01 3.07770765e-01 3.08099145e-01 3.08427594e-01 + 3.08756114e-01 3.09084703e-01 3.09413363e-01 3.09742091e-01 3.10070890e-01 + 3.10399757e-01 3.10728693e-01 3.11057699e-01 3.11386772e-01 3.11715915e-01 + 3.12045125e-01 3.12374404e-01 3.12703751e-01 3.13033165e-01 3.13362647e-01 + 3.13692197e-01 3.14021813e-01 3.14351497e-01 3.14681248e-01 3.15011065e-01 + 3.15340949e-01 3.15670899e-01 3.16000915e-01 3.16330997e-01 3.16661145e-01 + 3.16991359e-01 3.17321638e-01 3.17651983e-01 3.17982392e-01 3.18312867e-01 + 3.18643406e-01 3.18974010e-01 3.19304678e-01 3.19635411e-01 3.19966207e-01 + 3.20297067e-01 3.20627992e-01 3.20958979e-01 3.21290030e-01 3.21621144e-01 + 3.21952321e-01 3.22283561e-01 3.22614864e-01 3.22946229e-01 3.23277656e-01 + 3.23609146e-01 3.23940697e-01 3.24272310e-01 3.24603985e-01 3.24935721e-01 + 3.25267519e-01 3.25599377e-01 3.25931297e-01 3.26263277e-01 3.26595317e-01 + 3.26927419e-01 3.27259580e-01 3.27591801e-01 3.27924082e-01 3.28256423e-01 + 3.28588824e-01 3.28921283e-01 3.29253802e-01 3.29586380e-01 3.29919017e-01 + 3.30251712e-01 3.30584466e-01 3.30917278e-01 3.31250149e-01 3.31583077e-01 + 3.31916063e-01 3.32249107e-01 3.32582208e-01 3.32915366e-01 3.33248582e-01 + 3.33581854e-01 3.33915183e-01 3.34248569e-01 3.34582011e-01 3.34915510e-01 + 3.35249064e-01 3.35582675e-01 3.35916341e-01 3.36250062e-01 3.36583839e-01 + 3.36917672e-01 3.37251559e-01 3.37585501e-01 3.37919498e-01 3.38253550e-01 + 3.38587656e-01 3.38921816e-01 3.39256030e-01 3.39590298e-01 3.39924620e-01 + 3.40258995e-01 3.40593423e-01 3.40927905e-01 3.41262440e-01 3.41597027e-01 + 3.41931667e-01 3.42266360e-01 3.42601105e-01 3.42935903e-01 3.43270752e-01 + 3.43605653e-01 3.43940606e-01 3.44275610e-01 3.44610666e-01 3.44945772e-01 + 3.45280930e-01 3.45616139e-01 3.45951398e-01 3.46286708e-01 3.46622068e-01 + 3.46957478e-01 3.47292938e-01 3.47628448e-01 3.47964008e-01 3.48299617e-01 + 3.48635275e-01 3.48970983e-01 3.49306740e-01 3.49642545e-01 3.49978399e-01 + 3.50314302e-01 3.50650253e-01 3.50986252e-01 3.51322299e-01 3.51658394e-01 + 3.51994536e-01 3.52330726e-01 3.52666964e-01 3.53003248e-01 3.53339580e-01 + 3.53675958e-01 3.54012383e-01 3.54348855e-01 3.54685373e-01 3.55021937e-01 + 3.55358547e-01 3.55695203e-01 3.56031904e-01 3.56368651e-01 3.56705444e-01 + 3.57042281e-01 3.57379164e-01 3.57716092e-01 3.58053064e-01 3.58390081e-01 + 3.58727142e-01 3.59064247e-01 3.59401397e-01 3.59738590e-01 3.60075827e-01 + 3.60413107e-01 3.60750431e-01 3.61087799e-01 3.61425209e-01 3.61762662e-01 + 3.62100158e-01 3.62437696e-01 3.62775277e-01 3.63112900e-01 3.63450566e-01 + 3.63788273e-01 3.64126022e-01 3.64463812e-01 3.64801645e-01 3.65139518e-01 + 3.65477432e-01 3.65815388e-01 3.66153384e-01 3.66491421e-01 3.66829498e-01 + 3.67167616e-01 3.67505774e-01 3.67843971e-01 3.68182209e-01 3.68520487e-01 + 3.68858803e-01 3.69197160e-01 3.69535555e-01 3.69873990e-01 3.70212463e-01 + 3.70550975e-01 3.70889526e-01 3.71228115e-01 3.71566742e-01 3.71905408e-01 + 3.72244111e-01 3.72582852e-01 3.72921631e-01 3.73260447e-01 3.73599300e-01 + 3.73938191e-01 3.74277119e-01 3.74616083e-01 3.74955084e-01 3.75294122e-01 + 3.75633196e-01 3.75972306e-01 3.76311452e-01 3.76650634e-01 3.76989852e-01 + 3.77329105e-01 3.77668394e-01 3.78007718e-01 3.78347077e-01 3.78686471e-01 + 3.79025899e-01 3.79365363e-01 3.79704861e-01 3.80044393e-01 3.80383959e-01 + 3.80723559e-01 3.81063194e-01 3.81402861e-01 3.81742563e-01 3.82082298e-01 + 3.82422065e-01 3.82761866e-01 3.83101700e-01 3.83441567e-01 3.83781466e-01 + 3.84121398e-01 3.84461362e-01 3.84801358e-01 3.85141386e-01 3.85481446e-01 + 3.85821538e-01 3.86161661e-01 3.86501816e-01 3.86842001e-01 3.87182218e-01 + 3.87522466e-01 3.87862744e-01 3.88203053e-01 3.88543393e-01 3.88883763e-01 + 3.89224162e-01 3.89564592e-01 3.89905052e-01 3.90245541e-01 3.90586060e-01 + 3.90926609e-01 3.91267186e-01 3.91607793e-01 3.91948428e-01 3.92289093e-01 + 3.92629785e-01 3.92970507e-01 3.93311256e-01 3.93652034e-01 3.93992840e-01 + 3.94333674e-01 3.94674535e-01 3.95015424e-01 3.95356341e-01 3.95697284e-01 + 3.96038255e-01 3.96379253e-01 3.96720277e-01 3.97061328e-01 3.97402406e-01 + 3.97743510e-01 3.98084640e-01 3.98425796e-01 3.98766978e-01 3.99108186e-01 + 3.99449420e-01 3.99790679e-01 4.00131963e-01 4.00473272e-01 4.00814607e-01 + 4.01155966e-01 4.01497350e-01 4.01838759e-01 4.02180192e-01 4.02521649e-01 + 4.02863130e-01 4.03204636e-01 4.03546165e-01 4.03887718e-01 4.04229294e-01 + 4.04570894e-01 4.04912517e-01 4.05254163e-01 4.05595832e-01 4.05937524e-01 + 4.06279238e-01 4.06620975e-01 4.06962734e-01 4.07304516e-01 4.07646319e-01 + 4.07988145e-01 4.08329992e-01 4.08671861e-01 4.09013751e-01 4.09355663e-01 + 4.09697596e-01 4.10039549e-01 4.10381524e-01 4.10723520e-01 4.11065536e-01 + 4.11407572e-01 4.11749629e-01 4.12091706e-01 4.12433803e-01 4.12775920e-01 + 4.13118057e-01 4.13460213e-01 4.13802389e-01 4.14144583e-01 4.14486798e-01 + 4.14829031e-01 4.15171283e-01 4.15513553e-01 4.15855843e-01 4.16198150e-01 + 4.16540476e-01 4.16882821e-01 4.17225183e-01 4.17567563e-01 4.17909961e-01 + 4.18252376e-01 4.18594809e-01 4.18937259e-01 4.19279726e-01 4.19622210e-01 + 4.19964711e-01 4.20307229e-01 4.20649763e-01 4.20992314e-01 4.21334881e-01 + 4.21677465e-01 4.22020064e-01 4.22362679e-01 4.22705310e-01 4.23047957e-01 + 4.23390619e-01 4.23733296e-01 4.24075988e-01 4.24418696e-01 4.24761418e-01 + 4.25104155e-01 4.25446907e-01 4.25789673e-01 4.26132454e-01 4.26475249e-01 + 4.26818057e-01 4.27160880e-01 4.27503717e-01 4.27846567e-01 4.28189430e-01 + 4.28532307e-01 4.28875197e-01 4.29218101e-01 4.29561017e-01 4.29903946e-01 + 4.30246888e-01 4.30589842e-01 4.30932808e-01 4.31275787e-01 4.31618778e-01 + 4.31961781e-01 4.32304796e-01 4.32647822e-01 4.32990860e-01 4.33333909e-01 + 4.33676970e-01 4.34020042e-01 4.34363125e-01 4.34706219e-01 4.35049323e-01 + 4.35392438e-01 4.35735564e-01 4.36078700e-01 4.36421846e-01 4.36765002e-01 + 4.37108168e-01 4.37451344e-01 4.37794529e-01 4.38137724e-01 4.38480929e-01 + 4.38824142e-01 4.39167365e-01 4.39510597e-01 4.39853837e-01 4.40197087e-01 + 4.40540345e-01 4.40883611e-01 4.41226885e-01 4.41570168e-01 4.41913459e-01 + 4.42256758e-01 4.42600064e-01 4.42943378e-01 4.43286700e-01 4.43630029e-01 + 4.43973365e-01 4.44316708e-01 4.44660058e-01 4.45003416e-01 4.45346779e-01 + 4.45690150e-01 4.46033526e-01 4.46376910e-01 4.46720299e-01 4.47063694e-01 + 4.47407095e-01 4.47750502e-01 4.48093915e-01 4.48437333e-01 4.48780757e-01 + 4.49124185e-01 4.49467619e-01 4.49811058e-01 4.50154502e-01 4.50497950e-01 + 4.50841403e-01 4.51184861e-01 4.51528322e-01 4.51871788e-01 4.52215259e-01 + 4.52558733e-01 4.52902210e-01 4.53245692e-01 4.53589177e-01 4.53932665e-01 + 4.54276157e-01 4.54619652e-01 4.54963150e-01 4.55306651e-01 4.55650154e-01 + 1.03953624e+00 1.03772749e+00 1.03592023e+00 1.03411445e+00 1.03231016e+00 + 1.03050735e+00 1.02870603e+00 1.02690620e+00 1.02510785e+00 1.02331100e+00 + 1.02151562e+00 1.01972174e+00 1.01792935e+00 1.01613844e+00 1.01434902e+00 + 1.01256110e+00 1.01077466e+00 1.00898971e+00 1.00720626e+00 1.00542429e+00 + 1.00364382e+00 1.00186484e+00 1.00008735e+00 9.98311355e-01 9.96536852e-01 + 9.94763842e-01 9.92992326e-01 9.91222304e-01 9.89453777e-01 9.87686744e-01 + 9.85921207e-01 9.84157165e-01 9.82394619e-01 9.80633570e-01 9.78874017e-01 + 9.77115962e-01 9.75359404e-01 9.73604344e-01 9.71850782e-01 9.70098719e-01 + 9.68348155e-01 9.66599090e-01 9.64851525e-01 9.63105460e-01 9.61360895e-01 + 9.59617832e-01 9.57876269e-01 9.56136208e-01 9.54397649e-01 9.52660593e-01 + 9.50925039e-01 9.49190988e-01 9.47458441e-01 9.45727397e-01 9.43997858e-01 + 9.42269823e-01 9.40543293e-01 9.38818268e-01 9.37094749e-01 9.35372736e-01 + 9.33652230e-01 9.31933230e-01 9.30215737e-01 9.28499752e-01 9.26785274e-01 + 9.25072305e-01 9.23360844e-01 9.21650893e-01 9.19942450e-01 9.18235517e-01 + 9.16530094e-01 9.14826182e-01 9.13123780e-01 9.11422890e-01 9.09723511e-01 + 9.08025644e-01 9.06329289e-01 9.04634446e-01 9.02941117e-01 9.01249300e-01 + 8.99558998e-01 8.97870209e-01 8.96182935e-01 8.94497176e-01 8.92812931e-01 + 8.91130202e-01 8.89448989e-01 8.87769292e-01 8.86091112e-01 8.84414448e-01 + 8.82739302e-01 8.81065673e-01 8.79393562e-01 8.77722970e-01 8.76053896e-01 + 8.74386341e-01 8.72720306e-01 8.71055790e-01 8.69392795e-01 8.67731320e-01 + 8.66071366e-01 8.64412932e-01 8.62756021e-01 8.61100631e-01 8.59446764e-01 + 8.57794419e-01 8.56143597e-01 8.54494298e-01 8.52846523e-01 8.51200272e-01 + 8.49555545e-01 8.47912343e-01 8.46270666e-01 8.44630515e-01 8.42991889e-01 + 8.41354789e-01 8.39719216e-01 8.38085170e-01 8.36452650e-01 8.34821658e-01 + 8.33192195e-01 8.31564259e-01 8.29937852e-01 8.28312973e-01 8.26689624e-01 + 8.25067805e-01 8.23447515e-01 8.21828756e-01 8.20211528e-01 8.18595830e-01 + 8.16981664e-01 8.15369029e-01 8.13757927e-01 8.12148357e-01 8.10540319e-01 + 8.08933815e-01 8.07328844e-01 8.05725406e-01 8.04123503e-01 8.02523135e-01 + 8.00924301e-01 7.99327002e-01 7.97731239e-01 7.96137011e-01 7.94544320e-01 + 7.92953165e-01 7.91363547e-01 7.89775466e-01 7.88188923e-01 7.86603918e-01 + 7.85020450e-01 7.83438522e-01 7.81858132e-01 7.80279281e-01 7.78701970e-01 + 7.77126199e-01 7.75551968e-01 7.73979278e-01 7.72408129e-01 7.70838521e-01 + 7.69270454e-01 7.67703930e-01 7.66138947e-01 7.64575508e-01 7.63013611e-01 + 7.61453258e-01 7.59894448e-01 7.58337182e-01 7.56781460e-01 7.55227283e-01 + 7.53674651e-01 7.52123565e-01 7.50574024e-01 7.49026029e-01 7.47479580e-01 + 7.45934678e-01 7.44391322e-01 7.42849514e-01 7.41309254e-01 7.39770542e-01 + 7.38233378e-01 7.36697762e-01 7.35163696e-01 7.33631179e-01 7.32100211e-01 + 7.30570794e-01 7.29042926e-01 7.27516610e-01 7.25991844e-01 7.24468629e-01 + 7.22946966e-01 7.21426855e-01 7.19908297e-01 7.18391291e-01 7.16875837e-01 + 7.15361937e-01 7.13849591e-01 7.12338798e-01 7.10829560e-01 7.09321876e-01 + 7.07815747e-01 7.06311174e-01 7.04808155e-01 7.03306693e-01 7.01806787e-01 + 7.00308437e-01 6.98811644e-01 6.97316408e-01 6.95822730e-01 6.94330610e-01 + 6.92840047e-01 6.91351043e-01 6.89863598e-01 6.88377712e-01 6.86893385e-01 + 6.85410618e-01 6.83929411e-01 6.82449765e-01 6.80971679e-01 6.79495154e-01 + 6.78020190e-01 6.76546789e-01 6.75074949e-01 6.73604671e-01 6.72135956e-01 + 6.70668804e-01 6.69203215e-01 6.67739189e-01 6.66276728e-01 6.64815830e-01 + 6.63356498e-01 6.61898730e-01 6.60442527e-01 6.58987889e-01 6.57534818e-01 + 6.56083312e-01 6.54633373e-01 6.53185001e-01 6.51738195e-01 6.50292957e-01 + 6.48849287e-01 6.47407184e-01 6.45966650e-01 6.44527685e-01 6.43090288e-01 + 6.41654460e-01 6.40220202e-01 6.38787514e-01 6.37356396e-01 6.35926849e-01 + 6.34498872e-01 6.33072467e-01 6.31647633e-01 6.30224370e-01 6.28802680e-01 + 6.27382561e-01 6.25964016e-01 6.24547043e-01 6.23131644e-01 6.21717818e-01 + 6.20305566e-01 6.18894889e-01 6.17485785e-01 6.16078257e-01 6.14672303e-01 + 6.13267925e-01 6.11865123e-01 6.10463897e-01 6.09064247e-01 6.07666173e-01 + 6.06269677e-01 6.04874758e-01 6.03481416e-01 6.02089652e-01 6.00699467e-01 + 5.99310859e-01 5.97923831e-01 5.96538381e-01 5.95154511e-01 5.93772221e-01 + 5.92391510e-01 5.91012380e-01 5.89634830e-01 5.88258861e-01 5.86884473e-01 + 5.85511667e-01 5.84140442e-01 5.82770800e-01 5.81402740e-01 5.80036262e-01 + 5.78671367e-01 5.77308056e-01 5.75946328e-01 5.74586184e-01 5.73227624e-01 + 5.71870649e-01 5.70515258e-01 5.69161453e-01 5.67809232e-01 5.66458597e-01 + 5.65109548e-01 5.63762086e-01 5.62416210e-01 5.61071920e-01 5.59729218e-01 + 5.58388103e-01 5.57048576e-01 5.55710636e-01 5.54374285e-01 5.53039523e-01 + 5.51706349e-01 5.50374764e-01 5.49044769e-01 5.47716364e-01 5.46389548e-01 + 5.45064323e-01 5.43740689e-01 5.42418645e-01 5.41098192e-01 5.39779331e-01 + 5.38462062e-01 5.37146385e-01 5.35832299e-01 5.34519807e-01 5.33208907e-01 + 5.31899601e-01 5.30591888e-01 5.29285769e-01 5.27981244e-01 5.26678313e-01 + 5.25376977e-01 5.24077235e-01 5.22779089e-01 5.21482538e-01 5.20187583e-01 + 5.18894224e-01 5.17602461e-01 5.16312295e-01 5.15023726e-01 5.13736754e-01 + 5.12451379e-01 5.11167602e-01 5.09885423e-01 5.08604843e-01 5.07325861e-01 + 5.06048477e-01 5.04772693e-01 5.03498508e-01 5.02225923e-01 5.00954938e-01 + 4.99685553e-01 4.98417769e-01 4.97151585e-01 4.95887003e-01 4.94624021e-01 + 4.93362642e-01 4.92102864e-01 4.90844689e-01 4.89588116e-01 4.88333145e-01 + 4.87079778e-01 4.85828014e-01 4.84577853e-01 4.83329297e-01 4.82082344e-01 + 4.80836996e-01 4.79593252e-01 4.78351114e-01 4.77110580e-01 4.75871652e-01 + 4.74634330e-01 4.73398614e-01 4.72164504e-01 4.70932001e-01 4.69701104e-01 + 4.68471815e-01 4.67244132e-01 4.66018058e-01 4.64793591e-01 4.63570733e-01 + 4.62349483e-01 4.61129842e-01 4.59911810e-01 4.58695387e-01 4.57480573e-01 + 4.56267369e-01 4.55055776e-01 4.53845792e-01 4.52637419e-01 4.51430658e-01 + 4.50225507e-01 4.49021967e-01 4.47820039e-01 4.46619724e-01 4.45421020e-01 + 4.44223928e-01 4.43028450e-01 4.41834584e-01 4.40642332e-01 4.39451693e-01 + 4.38262668e-01 4.37075256e-01 4.35889459e-01 4.34705277e-01 4.33522709e-01 + 4.32341757e-01 4.31162420e-01 4.29984698e-01 4.28808592e-01 4.27634102e-01 + 4.26461229e-01 4.25289972e-01 4.24120332e-01 4.22952310e-01 4.21785904e-01 + 4.20621116e-01 4.19457946e-01 4.18296395e-01 4.17136461e-01 4.15978147e-01 + 4.14821451e-01 4.13666374e-01 4.12512917e-01 4.11361080e-01 4.10210862e-01 + 4.09062265e-01 4.07915288e-01 4.06769932e-01 4.05626197e-01 4.04484083e-01 + 4.03343590e-01 4.02204719e-01 4.01067470e-01 3.99931844e-01 3.98797839e-01 + 3.97665458e-01 3.96534699e-01 3.95405564e-01 3.94278052e-01 3.93152164e-01 + 3.92027900e-01 3.90905259e-01 3.89784244e-01 3.88664853e-01 3.87547087e-01 + 3.86430946e-01 3.85316431e-01 3.84203541e-01 3.83092278e-01 3.81982640e-01 + 3.80874629e-01 3.79768245e-01 3.78663487e-01 3.77560357e-01 3.76458854e-01 + 3.75358979e-01 3.74260731e-01 3.73164112e-01 3.72069121e-01 3.70975759e-01 + 3.69884025e-01 3.68793921e-01 3.67705446e-01 3.66618601e-01 3.65533385e-01 + 3.64449799e-01 3.63367844e-01 3.62287520e-01 3.61208826e-01 3.60131763e-01 + 3.59056331e-01 3.57982531e-01 3.56910363e-01 3.55839826e-01 3.54770922e-01 + 3.53703650e-01 3.52638011e-01 3.51574005e-01 3.50511632e-01 3.49450892e-01 + 3.48391786e-01 3.47334314e-01 3.46278476e-01 3.45224272e-01 3.44171703e-01 + 3.43120769e-01 3.42071469e-01 3.41023805e-01 3.39977776e-01 3.38933384e-01 + 3.37890627e-01 3.36849506e-01 3.35810021e-01 3.34772174e-01 3.33735963e-01 + 3.32701389e-01 3.31668453e-01 3.30637154e-01 3.29607493e-01 3.28579470e-01 + 3.27553085e-01 3.26528339e-01 3.25505231e-01 3.24483762e-01 3.23463933e-01 + 3.22445743e-01 3.21429192e-01 3.20414282e-01 3.19401011e-01 3.18389381e-01 + 3.17379391e-01 3.16371042e-01 3.15364334e-01 3.14359267e-01 3.13355841e-01 + 3.12354057e-01 3.11353915e-01 3.10355415e-01 3.09358557e-01 3.08363342e-01 + 3.07369770e-01 3.06377840e-01 3.05387554e-01 3.04398911e-01 3.03411912e-01 + 3.02426556e-01 3.01442845e-01 3.00460777e-01 2.99480355e-01 2.98501577e-01 + 2.97524444e-01 2.96548956e-01 2.95575113e-01 2.94602916e-01 2.93632365e-01 + 2.92663460e-01 2.91696201e-01 2.90730589e-01 2.89766623e-01 2.88804304e-01 + 2.87843632e-01 2.86884607e-01 2.85927230e-01 2.84971501e-01 2.84017420e-01 + 2.83064986e-01 2.82114201e-01 2.81165065e-01 2.80217578e-01 2.79271739e-01 + 2.78327550e-01 2.77385010e-01 2.76444119e-01 2.75504879e-01 2.74567288e-01 + 2.73631348e-01 2.72697059e-01 2.71764419e-01 2.70833431e-01 2.69904094e-01 + 2.68976408e-01 2.68050374e-01 2.67125991e-01 2.66203261e-01 2.65282182e-01 + 2.64362756e-01 2.63444982e-01 2.62528861e-01 2.61614393e-01 2.60701578e-01 + 2.59790416e-01 2.58880908e-01 2.57973054e-01 2.57066853e-01 2.56162307e-01 + 2.55259415e-01 2.54358178e-01 2.53458595e-01 2.52560668e-01 2.51664395e-01 + 2.50769778e-01 2.49876816e-01 2.48985511e-01 2.48095861e-01 2.47207867e-01 + 2.46321530e-01 2.45436849e-01 2.44553825e-01 2.43672457e-01 2.42792747e-01 + 2.41914695e-01 2.41038300e-01 2.40163562e-01 2.39290483e-01 2.38419061e-01 + 2.37549298e-01 2.36681193e-01 2.35814748e-01 2.34949961e-01 2.34086833e-01 + 2.33225364e-01 2.32365555e-01 2.31507405e-01 2.30650916e-01 2.29796086e-01 + 2.28942916e-01 2.28091407e-01 2.27241559e-01 2.26393372e-01 2.25546845e-01 + 2.24701980e-01 2.23858776e-01 2.23017233e-01 2.22177352e-01 2.21339134e-01 + 2.20502577e-01 2.19667682e-01 2.18834451e-01 2.18002881e-01 2.17172975e-01 + 2.16344732e-01 2.15518152e-01 2.14693235e-01 2.13869982e-01 2.13048393e-01 + 2.12228468e-01 2.11410207e-01 2.10593610e-01 2.09778678e-01 2.08965410e-01 + 2.08153807e-01 2.07343870e-01 2.06535598e-01 2.05728991e-01 2.04924049e-01 + 2.04120774e-01 2.03319164e-01 2.02519221e-01 2.01720944e-01 2.00924334e-01 + 2.00129390e-01 1.99336113e-01 1.98544503e-01 1.97754560e-01 1.96966285e-01 + 1.96179677e-01 1.95394737e-01 1.94611465e-01 1.93829861e-01 1.93049925e-01 + 1.92271658e-01 1.91495059e-01 1.90720129e-01 1.89946869e-01 1.89175277e-01 + 1.88405354e-01 1.87637101e-01 1.86870518e-01 1.86105605e-01 1.85342361e-01 + 1.84580788e-01 1.83820885e-01 1.83062653e-01 1.82306091e-01 1.81551200e-01 + 1.80797980e-01 1.80046431e-01 1.79296554e-01 1.78548348e-01 1.77801814e-01 + 1.77056952e-01 1.76313762e-01 1.75572244e-01 1.74832398e-01 1.74094225e-01 + 1.73357725e-01 1.72622897e-01 1.71889743e-01 1.71158261e-01 1.70428453e-01 + 1.69700319e-01 1.68973858e-01 1.68249071e-01 1.67525958e-01 1.66804519e-01 + 1.66084755e-01 1.65366665e-01 1.64650249e-01 1.63935509e-01 1.63222443e-01 + 1.62511053e-01 1.61801338e-01 1.61093298e-01 1.60386934e-01 1.59682246e-01 + 1.58979233e-01 1.58277897e-01 1.57578237e-01 1.56880253e-01 1.56183946e-01 + 1.55489316e-01 1.54796362e-01 1.54105086e-01 1.53415486e-01 1.52727564e-01 + 1.52041320e-01 1.51356753e-01 1.50673864e-01 1.49992653e-01 1.49313120e-01 + 1.48635265e-01 1.47959088e-01 1.47284591e-01 1.46611771e-01 1.45940631e-01 + 1.45271170e-01 1.44603388e-01 1.43937285e-01 1.43272862e-01 1.42610118e-01 + 1.41949054e-01 1.41289670e-01 1.40631966e-01 1.39975942e-01 1.39321598e-01 + 1.38668935e-01 1.38017953e-01 1.37368652e-01 1.36721031e-01 1.36075091e-01 + 1.35430833e-01 1.34788256e-01 1.34147361e-01 1.33508147e-01 1.32870615e-01 + 1.32234765e-01 1.31600597e-01 1.30968111e-01 1.30337308e-01 1.29708187e-01 + 1.29080749e-01 1.28454994e-01 1.27830921e-01 1.27208532e-01 1.26587826e-01 + 1.25968803e-01 1.25351464e-01 1.24735808e-01 1.24121836e-01 1.23509548e-01 + 1.22898944e-01 1.22290024e-01 1.21682789e-01 1.21077238e-01 1.20473372e-01 + 1.19871190e-01 1.19270693e-01 1.18671881e-01 1.18074755e-01 1.17479313e-01 + 1.16885558e-01 1.16293487e-01 1.15703102e-01 1.15114403e-01 1.14527390e-01 + 1.13942064e-01 1.13358423e-01 1.12776468e-01 1.12196200e-01 1.11617619e-01 + 1.11040725e-01 1.10465517e-01 1.09891996e-01 1.09320162e-01 1.08750016e-01 + 1.08181557e-01 1.07614785e-01 1.07049701e-01 1.06486305e-01 1.05924597e-01 + 1.05364577e-01 1.04806244e-01 1.04249601e-01 1.03694645e-01 1.03141378e-01 + 1.02589800e-01 1.02039910e-01 1.01491709e-01 1.00945198e-01 1.00400375e-01 + 9.98572416e-02 9.93157976e-02 9.87760431e-02 9.82379782e-02 9.77016030e-02 + 9.71669178e-02 9.66339224e-02 9.61026172e-02 9.55730022e-02 9.50450776e-02 + 9.45188434e-02 9.39942997e-02 9.34714468e-02 9.29502847e-02 9.24308135e-02 + 9.19130333e-02 9.13969443e-02 9.08825466e-02 9.03698403e-02 8.98588255e-02 + 8.93495023e-02 8.88418708e-02 8.83359312e-02 8.78316836e-02 8.73291281e-02 + 8.68282647e-02 8.63290937e-02 8.58316150e-02 8.53358290e-02 8.48417355e-02 + 8.43493348e-02 8.38586270e-02 8.33696121e-02 8.28822904e-02 8.23966618e-02 + 8.19127265e-02 8.14304847e-02 8.09499364e-02 8.04710817e-02 7.99939207e-02 + 7.95184537e-02 7.90446805e-02 7.85726014e-02 7.81022165e-02 7.76335259e-02 + 7.71665296e-02 7.67012279e-02 7.62376207e-02 7.57757082e-02 7.53154905e-02 + 7.48569677e-02 7.44001400e-02 7.39450073e-02 7.34915699e-02 7.30398277e-02 + 7.25897810e-02 7.21414298e-02 7.16947743e-02 7.12498144e-02 7.08065504e-02 + 7.03649822e-02 6.99251102e-02 6.94869342e-02 6.90504544e-02 6.86156710e-02 + 6.81825840e-02 6.77511935e-02 6.73214996e-02 6.68935024e-02 6.64672020e-02 + 6.60425985e-02 6.56196920e-02 6.51984826e-02 6.47789704e-02 6.43611555e-02 + 6.39450379e-02 6.35306178e-02 6.31178953e-02 6.27068704e-02 6.22975433e-02 + 6.18899141e-02 6.14839827e-02 6.10797494e-02 6.06772142e-02 6.02763772e-02 + 5.98772385e-02 5.94797982e-02 5.90840564e-02 5.86900131e-02 5.82976685e-02 + 5.79070227e-02 5.75180757e-02 5.71308276e-02 5.67452785e-02 5.63614285e-02 + 5.59792777e-02 5.55988261e-02 5.52200739e-02 5.48430212e-02 5.44676679e-02 + 5.40940143e-02 5.37220604e-02 5.33518062e-02 5.29832520e-02 5.26163976e-02 + 5.22512433e-02 5.18877891e-02 5.15260351e-02 5.11659814e-02 5.08076280e-02 + 5.04509751e-02 5.00960227e-02 4.97427708e-02 4.93912197e-02 4.90413693e-02 + 4.86932198e-02 4.83467711e-02 4.80020235e-02 4.76589769e-02 4.73176315e-02 + 4.69779873e-02 4.66400444e-02 4.63038029e-02 4.59692628e-02 4.56364243e-02 + 4.53052874e-02 4.49758521e-02 4.46481186e-02 4.43220870e-02 4.39977572e-02 + 4.36751294e-02 4.33542037e-02 4.30349801e-02 4.27174587e-02 4.24016395e-02 + 4.20875227e-02 4.17751083e-02 4.14643964e-02 4.11553870e-02 4.08480802e-02 + 4.05424762e-02 4.02385749e-02 3.99363764e-02 3.96358808e-02 3.93370881e-02 + 3.90399985e-02 3.87446120e-02 3.84509287e-02 3.81589486e-02 3.78686718e-02 + 3.75800983e-02 3.72932283e-02 3.70080618e-02 3.67245988e-02 3.64428394e-02 + 3.61627838e-02 3.58844318e-02 3.56077837e-02 3.53328395e-02 3.50595992e-02 + 3.47880629e-02 3.45182306e-02 3.42501025e-02 3.39836786e-02 3.37189589e-02 + 3.34559435e-02 3.31946324e-02 3.29350258e-02 3.26771236e-02 3.24209260e-02 + 3.21664330e-02 3.19136446e-02 3.16625610e-02 3.14131821e-02 3.11655080e-02 + 3.09195388e-02 3.06752746e-02 3.04327153e-02 3.01918611e-02 2.99527120e-02 + 2.97152680e-02 2.94795292e-02 2.92454957e-02 2.90131675e-02 2.87825447e-02 + 2.85536273e-02 2.83264153e-02 2.81009089e-02 2.78771081e-02 2.76550128e-02 + 2.74346233e-02 2.72159395e-02 2.69989614e-02 2.67836892e-02 2.65701228e-02 + 2.63582623e-02 2.61481079e-02 2.59396594e-02 2.57329170e-02 2.55278807e-02 + 2.53245505e-02 2.51229266e-02 2.49230089e-02 2.47247975e-02 2.45282924e-02 + 2.43334937e-02 2.41404014e-02 2.39490156e-02 2.37593363e-02 2.35713636e-02 + 2.33850975e-02 2.32005380e-02 2.30176851e-02 2.28365390e-02 2.26570997e-02 + 2.24793672e-02 2.23033415e-02 2.21290227e-02 2.19564108e-02 2.17855059e-02 + 2.16163080e-02 2.14488171e-02 2.12830333e-02 2.11189566e-02 2.09565871e-02 + 2.07959248e-02 2.06369696e-02 2.04797218e-02 2.03241812e-02 2.01703480e-02 + 2.00182221e-02 1.98678037e-02 1.97190927e-02 1.95720891e-02 1.94267931e-02 + 1.92832045e-02 1.91413236e-02 1.90011502e-02 1.88626845e-02 1.87259265e-02 + 1.85908761e-02 1.84575335e-02 1.83258986e-02 1.81959715e-02 1.80677522e-02 + 1.79412408e-02 1.78164372e-02 1.76933415e-02 1.75719538e-02 1.74522740e-02 + 1.73343022e-02 1.72180384e-02 1.71034827e-02 1.69906350e-02 1.68794954e-02 + 1.67700639e-02 1.66623405e-02 1.65563253e-02 1.64520183e-02 1.63494195e-02 + 1.62485289e-02 1.61493466e-02 1.60518726e-02 1.59561068e-02 1.58620494e-02 + 1.57697003e-02 1.56790596e-02 1.55901273e-02 1.55029034e-02 1.54173879e-02 + 1.53335808e-02 1.52514822e-02 1.51710921e-02 1.50924105e-02 1.50154374e-02 + 1.49401728e-02 1.48666168e-02 1.47947694e-02 1.47246305e-02 1.46562002e-02 + 1.45894786e-02 1.45244656e-02 1.44611612e-02 1.43995655e-02 1.43396785e-02 + 1.42815001e-02 1.42250305e-02 1.41702695e-02 1.41172173e-02 1.40658738e-02 + 1.40162391e-02 1.39683132e-02 1.39220960e-02 1.38775876e-02 1.38347880e-02 + 1.37936971e-02 1.37543151e-02 1.37166420e-02 1.36806776e-02 1.36464221e-02 + 1.36138754e-02 1.35830376e-02 1.35539086e-02 1.35264885e-02 1.35007773e-02 + 1.34767750e-02 1.34544815e-02 1.34338969e-02 1.34150212e-02 1.33978544e-02 + 1.33823966e-02 1.33686476e-02 1.33566075e-02 1.33462763e-02 1.33376541e-02 + 1.33307407e-02 1.33255363e-02 1.33220408e-02 1.33202542e-02 1.33201765e-02 + 1.33218078e-02 1.33251480e-02 1.33301970e-02 1.33369550e-02 1.33454220e-02 + 1.33555978e-02 1.33674825e-02 1.33810762e-02 1.33963787e-02 1.34133902e-02 + 1.34321105e-02 1.34525397e-02 1.34746779e-02 1.34985249e-02 1.35240808e-02 + 1.35513455e-02 1.35803192e-02 1.36110016e-02 1.36433930e-02 1.36774932e-02 + 1.37133022e-02 1.37508200e-02 1.37900467e-02 1.38309822e-02 1.38736265e-02 + 1.39179796e-02 1.39640414e-02 1.40118121e-02 1.40612914e-02 1.41124796e-02 + 1.41653765e-02 1.42199821e-02 1.42762964e-02 1.43343194e-02 1.43940512e-02 + 1.44554916e-02 1.45186406e-02 1.45834983e-02 1.46500646e-02 1.47183396e-02 + 1.47883231e-02 1.48600153e-02 1.49334160e-02 1.50085252e-02 1.50853430e-02 + 1.51638693e-02 1.52441041e-02 1.53260474e-02 1.54096992e-02 1.54950594e-02 + 1.55821280e-02 1.56709051e-02 1.57613905e-02 1.58535843e-02 1.59474864e-02 + 1.60430969e-02 1.61404156e-02 1.62394427e-02 1.63401780e-02 1.64426215e-02 + 1.65467732e-02 1.66526331e-02 1.67602012e-02 1.68694775e-02 1.69804618e-02 + 1.70931542e-02 1.72075547e-02 1.73236633e-02 1.74414798e-02 1.75610043e-02 + 1.76822368e-02 1.78051772e-02 1.79298256e-02 1.80561818e-02 1.81842458e-02 + 1.83140177e-02 1.84454973e-02 1.85786847e-02 1.87135798e-02 1.88501827e-02 + 1.89884931e-02 1.91285113e-02 1.92702370e-02 1.94136703e-02 1.95588111e-02 + 1.97056595e-02 1.98542153e-02 2.00044786e-02 2.01564492e-02 2.03101272e-02 + 2.04655126e-02 2.06226053e-02 2.07814052e-02 2.09419123e-02 2.11041267e-02 + 2.12680482e-02 2.14336768e-02 2.16010125e-02 2.17700553e-02 2.19408050e-02 + 2.21132617e-02 2.22874254e-02 2.24632959e-02 2.26408733e-02 2.28201575e-02 + 2.30011484e-02 2.31838461e-02 2.33682505e-02 2.35543615e-02 2.37421791e-02 + 2.39317033e-02 2.41229339e-02 2.43158711e-02 2.45105147e-02 2.47068647e-02 + 2.49049210e-02 2.51046836e-02 2.53061524e-02 2.55093275e-02 2.57142087e-02 + 2.59207960e-02 2.61290894e-02 2.63390888e-02 2.65507942e-02 2.67642055e-02 + 2.69793227e-02 2.71961457e-02 2.74146744e-02 2.76349090e-02 2.78568491e-02 + 2.80804949e-02 2.83058463e-02 2.85329032e-02 2.87616656e-02 2.89921334e-02 + 2.92243066e-02 2.94581851e-02 2.96937689e-02 2.99310578e-02 3.01700520e-02 + 3.04107512e-02 3.06531555e-02 3.08972648e-02 3.11430790e-02 3.13905981e-02 + 3.16398220e-02 3.18907507e-02 3.21433841e-02 3.23977222e-02 3.26537648e-02 + 3.29115120e-02 3.31709637e-02 3.34321199e-02 3.36949803e-02 3.39595451e-02 + 3.42258142e-02 3.44937874e-02 3.47634647e-02 3.50348461e-02 3.53079315e-02 + 3.55827209e-02 3.58592141e-02 3.61374112e-02 3.64173120e-02 3.66989165e-02 + 3.69822246e-02 3.72672363e-02 3.75539515e-02 3.78423701e-02 3.81324920e-02 + 3.84243173e-02 3.87178458e-02 3.90130775e-02 3.93100123e-02 3.96086502e-02 + 3.99089910e-02 4.02110347e-02 4.05147812e-02 4.08202305e-02 4.11273825e-02 + 4.14362371e-02 4.17467942e-02 4.20590539e-02 4.23730160e-02 4.26886804e-02 + 4.30060471e-02 4.33251159e-02 4.36458870e-02 4.39683600e-02 4.42925351e-02 + 4.46184120e-02 4.49459908e-02 4.52752714e-02 4.56062536e-02 4.59389375e-02 + 4.62733229e-02 4.66094097e-02 4.69471980e-02 4.72866875e-02 4.76278783e-02 + 4.79707703e-02 4.83153633e-02 4.86616573e-02 4.90096522e-02 4.93593480e-02 + 4.97107446e-02 5.00638418e-02 5.04186396e-02 5.07751380e-02 5.11333368e-02 + 5.14932360e-02 5.18548354e-02 5.22181351e-02 5.25831349e-02 5.29498347e-02 + 5.33182344e-02 5.36883341e-02 5.40601335e-02 5.44336326e-02 5.48088313e-02 + 5.51857296e-02 5.55643273e-02 5.59446244e-02 5.63266207e-02 5.67103163e-02 + 5.70957109e-02 5.74828046e-02 5.78715972e-02 5.82620886e-02 5.86542788e-02 + 5.90481677e-02 5.94437551e-02 5.98410410e-02 6.02400253e-02 6.06407080e-02 + 6.10430888e-02 6.14471678e-02 6.18529447e-02 6.22604197e-02 6.26695925e-02 + 6.30804630e-02 6.34930312e-02 6.39072970e-02 6.43232602e-02 6.47409209e-02 + 6.51602788e-02 6.55813340e-02 6.60040862e-02 6.64285354e-02 6.68546816e-02 + 6.72825245e-02 6.77120642e-02 6.81433005e-02 6.85762333e-02 6.90108625e-02 + 6.94471881e-02 6.98852099e-02 7.03249278e-02 7.07663417e-02 7.12094516e-02 + 7.16542573e-02 7.21007588e-02 7.25489558e-02 7.29988484e-02 7.34504365e-02 + 7.39037198e-02 7.43586984e-02 7.48153721e-02 7.52737408e-02 7.57338044e-02 + 7.61955628e-02 7.66590160e-02 7.71241637e-02 7.75910059e-02 7.80595425e-02 + 7.85297734e-02 7.90016985e-02 7.94753177e-02 7.99506308e-02 8.04276378e-02 + 8.09063385e-02 8.13867329e-02 8.18688208e-02 8.23526021e-02 8.28380768e-02 + 8.33252446e-02 8.38141056e-02 8.43046595e-02 8.47969063e-02 8.52908459e-02 + 8.57864782e-02 8.62838029e-02 8.67828201e-02 8.72835297e-02 8.77859314e-02 + 8.82900252e-02 8.87958110e-02 8.93032887e-02 8.98124581e-02 9.03233191e-02 + 9.08358717e-02 9.13501157e-02 9.18660509e-02 9.23836774e-02 9.29029949e-02 + 9.34240033e-02 9.39467025e-02 9.44710925e-02 9.49971730e-02 9.55249440e-02 + 9.60544054e-02 9.65855570e-02 9.71183987e-02 9.76529303e-02 9.81891519e-02 + 9.87270632e-02 9.92666641e-02 9.98079545e-02 1.00350934e-01 1.00895603e-01 + 1.01441962e-01 1.01990009e-01 1.02539745e-01 1.03091170e-01 1.03644283e-01 + 1.04199085e-01 1.04755576e-01 1.05313754e-01 1.05873621e-01 1.06435176e-01 + 1.06998419e-01 1.07563349e-01 1.08129968e-01 1.08698273e-01 1.09268266e-01 + 1.09839947e-01 1.10413314e-01 1.10988368e-01 1.11565110e-01 1.12143538e-01 + 1.12723652e-01 1.13305453e-01 1.13888941e-01 1.14474115e-01 1.15060974e-01 + 1.15649520e-01 1.16239751e-01 1.16831669e-01 1.17425271e-01 1.18020560e-01 + 1.18617533e-01 1.19216192e-01 1.19816535e-01 1.20418564e-01 1.21022277e-01 + 1.21627675e-01 1.22234757e-01 1.22843524e-01 1.23453975e-01 1.24066109e-01 + 1.24679928e-01 1.25295431e-01 1.25912617e-01 1.26531487e-01 1.27152040e-01 + 1.27774276e-01 1.28398196e-01 1.29023798e-01 1.29651083e-01 1.30280051e-01 + 1.30910702e-01 1.31543034e-01 1.32177050e-01 1.32812747e-01 1.33450126e-01 + 1.34089187e-01 1.34729929e-01 1.35372353e-01 1.36016459e-01 1.36662246e-01 + 1.37309713e-01 1.37958862e-01 1.38609692e-01 1.39262202e-01 1.39916393e-01 + 1.40572264e-01 1.41229815e-01 1.41889046e-01 1.42549958e-01 1.43212549e-01 + 1.43876819e-01 1.44542770e-01 1.45210399e-01 1.45879708e-01 1.46550695e-01 + 1.47223362e-01 1.47897707e-01 1.48573731e-01 1.49251433e-01 1.49930814e-01 + 1.50611872e-01 1.51294609e-01 1.51979023e-01 1.52665115e-01 1.53352885e-01 + 1.54042332e-01 1.54733456e-01 1.55426257e-01 1.56120735e-01 1.56816890e-01 + 1.57514721e-01 1.58214229e-01 1.58915413e-01 1.59618273e-01 1.60322809e-01 + 1.61029020e-01 1.61736908e-01 1.62446471e-01 1.63157709e-01 1.63870622e-01 + 1.64585210e-01 1.65301473e-01 1.66019411e-01 1.66739023e-01 1.67460310e-01 + 1.68183271e-01 1.68907906e-01 1.69634214e-01 1.70362197e-01 1.71091853e-01 + 1.71823182e-01 1.72556184e-01 1.73290860e-01 1.74027208e-01 1.74765229e-01 + 1.75504923e-01 1.76246289e-01 1.76989327e-01 1.77734037e-01 1.78480419e-01 + 1.79228473e-01 1.79978199e-01 1.80729595e-01 1.81482663e-01 1.82237402e-01 + 1.82993812e-01 1.83751893e-01 1.84511644e-01 1.85273065e-01 1.86036157e-01 + 1.86800919e-01 1.87567350e-01 1.88335451e-01 1.89105222e-01 1.89876662e-01 + 1.90649771e-01 1.91424549e-01 1.92200996e-01 1.92979112e-01 1.93758896e-01 + 1.94540348e-01 1.95323469e-01 1.96108257e-01 1.96894713e-01 1.97682837e-01 + 1.98472628e-01 1.99264087e-01 2.00057212e-01 2.00852004e-01 2.01648463e-01 + 2.02446589e-01 2.03246381e-01 2.04047839e-01 2.04850963e-01 2.05655753e-01 + 2.06462208e-01 2.07270329e-01 2.08080115e-01 2.08891567e-01 2.09704683e-01 + 2.10519464e-01 2.11335909e-01 2.12154019e-01 2.12973793e-01 2.13795231e-01 + 2.14618333e-01 2.15443098e-01 2.16269527e-01 2.17097619e-01 2.17927374e-01 + 2.18758792e-01 2.19591873e-01 2.20426616e-01 2.21263022e-01 2.22101090e-01 + 2.22940819e-01 2.23782211e-01 2.24625264e-01 2.25469978e-01 2.26316354e-01 + 2.27164390e-01 2.28014088e-01 2.28865446e-01 2.29718464e-01 2.30573143e-01 + 2.31429482e-01 2.32287480e-01 2.33147139e-01 2.34008457e-01 2.34871434e-01 + 2.35736070e-01 2.36602365e-01 2.37470319e-01 2.38339931e-01 2.39211202e-01 + 2.40084131e-01 2.40958717e-01 2.41834962e-01 2.42712864e-01 2.43592423e-01 + 2.44473640e-01 2.45356513e-01 2.46241044e-01 2.47127230e-01 2.48015074e-01 + 2.48904573e-01 2.49795728e-01 2.50688539e-01 2.51583006e-01 2.52479128e-01 + 2.53376905e-01 2.54276337e-01 2.55177424e-01 2.56080166e-01 2.56984562e-01 + 2.57890612e-01 2.58798316e-01 2.59707674e-01 2.60618685e-01 2.61531350e-01 + 2.62445667e-01 2.63361638e-01 2.64279262e-01 2.65198538e-01 2.66119466e-01 + 2.67042047e-01 2.67966279e-01 2.68892164e-01 2.69819699e-01 2.70748886e-01 + 2.71679724e-01 2.72612213e-01 2.73546353e-01 2.74482143e-01 2.75419584e-01 + 2.76358674e-01 2.77299415e-01 2.78241805e-01 2.79185844e-01 2.80131533e-01 + 2.81078870e-01 2.82027857e-01 2.82978492e-01 2.83930775e-01 2.84884707e-01 + 2.85840287e-01 2.86797514e-01 2.87756389e-01 2.88716911e-01 2.89679080e-01 + 2.90642896e-01 2.91608359e-01 2.92575468e-01 2.93544224e-01 2.94514625e-01 + 2.95486673e-01 2.96460366e-01 2.97435704e-01 2.98412687e-01 2.99391316e-01 + 3.00371589e-01 3.01353507e-01 3.02337069e-01 3.03322275e-01 3.04309125e-01 + 3.05297618e-01 3.06287755e-01 3.07279535e-01 3.08272958e-01 3.09268024e-01 + 3.10264733e-01 3.11263084e-01 3.12263076e-01 3.13264711e-01 3.14267987e-01 + 3.15272905e-01 3.16279464e-01 3.17287664e-01 3.18297505e-01 3.19308986e-01 + 3.20322108e-01 3.21336869e-01 3.22353271e-01 3.23371312e-01 3.24390992e-01 + 3.25412312e-01 3.26435271e-01 3.27459868e-01 3.28486104e-01 3.29513978e-01 + 3.30543490e-01 3.31574640e-01 3.32607428e-01 3.33641852e-01 3.34677914e-01 + 3.35715613e-01 3.36754949e-01 3.37795921e-01 3.38838529e-01 3.39882774e-01 + 3.40928653e-01 3.41976169e-01 3.43025320e-01 3.44076105e-01 3.45128526e-01 + 3.46182581e-01 3.47238271e-01 3.48295594e-01 3.49354552e-01 3.50415143e-01 + 3.51477368e-01 3.52541225e-01 3.53606716e-01 3.54673839e-01 3.55742595e-01 + 3.56812983e-01 3.57885003e-01 3.58958655e-01 3.60033939e-01 3.61110853e-01 + 3.62189399e-01 3.63269575e-01 3.64351382e-01 3.65434820e-01 3.66519887e-01 + 3.67606584e-01 3.68694911e-01 3.69784868e-01 3.70876453e-01 3.71969667e-01 + 3.73064510e-01 3.74160981e-01 3.75259081e-01 3.76358808e-01 3.77460163e-01 + 3.78563145e-01 3.79667755e-01 3.80773992e-01 3.81881855e-01 3.82991344e-01 + 3.84102460e-01 3.85215202e-01 3.86329570e-01 3.87445563e-01 3.88563181e-01 + 3.89682424e-01 3.90803292e-01 3.91925784e-01 3.93049901e-01 3.94175642e-01 + 3.95303006e-01 3.96431994e-01 3.97562605e-01 3.98694839e-01 3.99828696e-01 + 4.00964175e-01 4.02101276e-01 4.03240000e-01 4.04380345e-01 4.05522312e-01 + 4.06665899e-01 4.07811108e-01 4.08957938e-01 4.10106388e-01 4.11256458e-01 + 4.12408148e-01 4.13561458e-01 4.14716388e-01 4.15872936e-01 4.17031104e-01 + 4.18190890e-01 4.19352295e-01 4.20515317e-01 4.21679958e-01 4.22846216e-01 + 4.24014092e-01 4.25183585e-01 4.26354695e-01 4.27527421e-01 4.28701764e-01 + 4.29877723e-01 4.31055298e-01 4.32234488e-01 4.33415294e-01 4.34597715e-01 + 4.35781751e-01 4.36967401e-01 4.38154665e-01 4.39343544e-01 4.40534036e-01 + 4.41726142e-01 4.42919861e-01 4.44115193e-01 4.45312138e-01 4.46510695e-01 + 4.47710864e-01 4.48912645e-01 4.50116038e-01 4.51321043e-01 4.52527658e-01 + 4.53735885e-01 4.54945722e-01 4.56157169e-01 4.57370226e-01 4.58584894e-01 + 4.59801170e-01 4.61019056e-01 4.62238551e-01 4.63459655e-01 4.64682367e-01 + 4.65906688e-01 4.67132616e-01 4.68360152e-01 4.69589295e-01 4.70820046e-01 + 4.72052403e-01 4.73286367e-01 4.74521937e-01 4.75759113e-01 4.76997895e-01 + 4.78238283e-01 4.79480276e-01 4.80723873e-01 4.81969076e-01 4.83215882e-01 + 4.84464293e-01 4.85714308e-01 4.86965926e-01 4.88219148e-01 4.89473972e-01 + 4.90730400e-01 4.91988430e-01 4.93248062e-01 4.94509296e-01 4.95772131e-01 + 4.97036568e-01 4.98302606e-01 4.99570245e-01 5.00839485e-01 5.02110324e-01 + 5.03382764e-01 5.04656804e-01 5.05932442e-01 5.07209680e-01 5.08488517e-01 + 5.09768953e-01 5.11050986e-01 5.12334618e-01 5.13619847e-01 5.14906674e-01 + 5.16195098e-01 5.17485119e-01 5.18776737e-01 5.20069951e-01 5.21364761e-01 + 5.22661167e-01 5.23959168e-01 5.25258764e-01 5.26559955e-01 5.27862741e-01 + 5.29167122e-01 5.30473096e-01 5.31780664e-01 5.33089826e-01 5.34400580e-01 + 5.35712928e-01 5.37026868e-01 5.38342401e-01 5.39659526e-01 5.40978242e-01 + 5.42298550e-01 5.43620449e-01 5.44943939e-01 5.46269020e-01 5.47595691e-01 + 5.48923952e-01 5.50253802e-01 5.51585242e-01 5.52918272e-01 5.54252890e-01 + 5.55589096e-01 5.56926891e-01 5.58266274e-01 5.59607245e-01 5.60949803e-01 + 5.62293948e-01 5.63639680e-01 5.64986999e-01 5.66335903e-01 5.67686394e-01 + 5.69038470e-01 5.70392132e-01 5.71747378e-01 5.73104210e-01 5.74462626e-01 + 5.75822626e-01 5.77184210e-01 5.78547377e-01 5.79912128e-01 5.81278461e-01 + 5.82646378e-01 5.84015876e-01 5.85386957e-01 5.86759620e-01 5.88133864e-01 + 5.89509689e-01 5.90887095e-01 5.92266082e-01 5.93646649e-01 5.95028796e-01 + 5.96412522e-01 5.97797828e-01 5.99184713e-01 6.00573177e-01 6.01963219e-01 + 6.03354840e-01 6.04748038e-01 6.06142814e-01 6.07539167e-01 6.08937097e-01 + 6.10336603e-01 6.11737686e-01 6.13140346e-01 6.14544580e-01 6.15950391e-01 + 6.17357776e-01 6.18766736e-01 6.20177271e-01 6.21589379e-01 6.23003062e-01 + 6.24418319e-01 6.25835148e-01 6.27253551e-01 6.28673526e-01 6.30095073e-01 + 6.31518193e-01 6.32942884e-01 6.34369147e-01 6.35796981e-01 6.37226386e-01 + 6.38657361e-01 6.40089906e-01 6.41524022e-01 6.42959706e-01 6.44396960e-01 + 6.45835783e-01 6.47276175e-01 6.48718135e-01 6.50161663e-01 6.51606758e-01 + 6.53053421e-01 6.54501651e-01 6.55951448e-01 6.57402811e-01 6.58855740e-01 + 6.60310236e-01 6.61766296e-01 6.63223922e-01 6.64683112e-01 6.66143868e-01 + 6.67606187e-01 6.69070070e-01 6.70535517e-01 6.72002527e-01 6.73471100e-01 + 6.74941236e-01 6.76412934e-01 6.77886194e-01 6.79361015e-01 6.80837398e-01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.65580254e-01 1.65563515e-01 1.65546741e-01 1.65529929e-01 1.65513082e-01 + 1.65496198e-01 1.65479277e-01 1.65462319e-01 1.65445324e-01 1.65428292e-01 + 1.65411223e-01 1.65394117e-01 1.65376974e-01 1.65359793e-01 1.65342574e-01 + 1.65325318e-01 1.65308025e-01 1.65290693e-01 1.65273323e-01 1.65255915e-01 + 1.65238469e-01 1.65220985e-01 1.65203462e-01 1.65185901e-01 1.65168301e-01 + 1.65150662e-01 1.65132985e-01 1.65115268e-01 1.65097513e-01 1.65079718e-01 + 1.65061884e-01 1.65044011e-01 1.65026098e-01 1.65008145e-01 1.64990153e-01 + 1.64972120e-01 1.64954048e-01 1.64935936e-01 1.64917783e-01 1.64899591e-01 + 1.64881357e-01 1.64863083e-01 1.64844769e-01 1.64826414e-01 1.64808017e-01 + 1.64789580e-01 1.64771102e-01 1.64752582e-01 1.64734021e-01 1.64715418e-01 + 1.64696774e-01 1.64678088e-01 1.64659360e-01 1.64640590e-01 1.64621778e-01 + 1.64602924e-01 1.64584027e-01 1.64565088e-01 1.64546107e-01 1.64527082e-01 + 1.64508015e-01 1.64488905e-01 1.64469751e-01 1.64450555e-01 1.64431315e-01 + 1.64412031e-01 1.64392704e-01 1.64373334e-01 1.64353919e-01 1.64334460e-01 + 1.64314958e-01 1.64295411e-01 1.64275819e-01 1.64256183e-01 1.64236503e-01 + 1.64216777e-01 1.64197007e-01 1.64177192e-01 1.64157331e-01 1.64137425e-01 + 1.64117474e-01 1.64097477e-01 1.64077435e-01 1.64057346e-01 1.64037212e-01 + 1.64017032e-01 1.63996805e-01 1.63976532e-01 1.63956212e-01 1.63935846e-01 + 1.63915433e-01 1.63894973e-01 1.63874465e-01 1.63853911e-01 1.63833309e-01 + 1.63812660e-01 1.63791963e-01 1.63771218e-01 1.63750426e-01 1.63729585e-01 + 1.63708696e-01 1.63687759e-01 1.63666773e-01 1.63645738e-01 1.63624655e-01 + 1.63603523e-01 1.63582341e-01 1.63561111e-01 1.63539831e-01 1.63518501e-01 + 1.63497122e-01 1.63475693e-01 1.63454214e-01 1.63432685e-01 1.63411106e-01 + 1.63389476e-01 1.63367795e-01 1.63346064e-01 1.63324282e-01 1.63302449e-01 + 1.63280565e-01 1.63258629e-01 1.63236642e-01 1.63214603e-01 1.63192512e-01 + 1.63170369e-01 1.63148174e-01 1.63125927e-01 1.63103628e-01 1.63081275e-01 + 1.63058870e-01 1.63036412e-01 1.63013901e-01 1.62991337e-01 1.62968719e-01 + 1.62946048e-01 1.62923323e-01 1.62900544e-01 1.62877710e-01 1.62854823e-01 + 1.62831881e-01 1.62808885e-01 1.62785834e-01 1.62762728e-01 1.62739567e-01 + 1.62716350e-01 1.62693078e-01 1.62669751e-01 1.62646368e-01 1.62622929e-01 + 1.62599433e-01 1.62575882e-01 1.62552274e-01 1.62528609e-01 1.62504888e-01 + 1.62481109e-01 1.62457274e-01 1.62433381e-01 1.62409431e-01 1.62385423e-01 + 1.62361357e-01 1.62337233e-01 1.62313050e-01 1.62288810e-01 1.62264510e-01 + 1.62240152e-01 1.62215735e-01 1.62191259e-01 1.62166724e-01 1.62142129e-01 + 1.62117474e-01 1.62092759e-01 1.62067985e-01 1.62043150e-01 1.62018255e-01 + 1.61993299e-01 1.61968282e-01 1.61943204e-01 1.61918065e-01 1.61892865e-01 + 1.61867603e-01 1.61842279e-01 1.61816893e-01 1.61791445e-01 1.61765935e-01 + 1.61740362e-01 1.61714726e-01 1.61689028e-01 1.61663266e-01 1.61637441e-01 + 1.61611552e-01 1.61585600e-01 1.61559583e-01 1.61533503e-01 1.61507358e-01 + 1.61481148e-01 1.61454874e-01 1.61428535e-01 1.61402130e-01 1.61375660e-01 + 1.61349125e-01 1.61322523e-01 1.61295856e-01 1.61269123e-01 1.61242323e-01 + 1.61215456e-01 1.61188522e-01 1.61161522e-01 1.61134454e-01 1.61107319e-01 + 1.61080115e-01 1.61052844e-01 1.61025505e-01 1.60998098e-01 1.60970621e-01 + 1.60943076e-01 1.60915462e-01 1.60887779e-01 1.60860026e-01 1.60832204e-01 + 1.60804311e-01 1.60776349e-01 1.60748316e-01 1.60720212e-01 1.60692038e-01 + 1.60663792e-01 1.60635475e-01 1.60607087e-01 1.60578627e-01 1.60550095e-01 + 1.60521491e-01 1.60492814e-01 1.60464065e-01 1.60435242e-01 1.60406347e-01 + 1.60377378e-01 1.60348335e-01 1.60319219e-01 1.60290028e-01 1.60260764e-01 + 1.60231424e-01 1.60202010e-01 1.60172520e-01 1.60142955e-01 1.60113315e-01 + 1.60083599e-01 1.60053807e-01 1.60023938e-01 1.59993993e-01 1.59963971e-01 + 1.59933872e-01 1.59903696e-01 1.59873442e-01 1.59843110e-01 1.59812700e-01 + 1.59782212e-01 1.59751645e-01 1.59720999e-01 1.59690274e-01 1.59659470e-01 + 1.59628586e-01 1.59597622e-01 1.59566578e-01 1.59535454e-01 1.59504249e-01 + 1.59472963e-01 1.59441595e-01 1.59410146e-01 1.59378616e-01 1.59347003e-01 + 1.59315308e-01 1.59283531e-01 1.59251670e-01 1.59219726e-01 1.59187699e-01 + 1.59155589e-01 1.59123394e-01 1.59091115e-01 1.59058751e-01 1.59026303e-01 + 1.58993770e-01 1.58961151e-01 1.58928446e-01 1.58895656e-01 1.58862779e-01 + 1.58829816e-01 1.58796766e-01 1.58763628e-01 1.58730404e-01 1.58697092e-01 + 1.58663691e-01 1.58630203e-01 1.58596625e-01 1.58562959e-01 1.58529204e-01 + 1.58495359e-01 1.58461425e-01 1.58427400e-01 1.58393285e-01 1.58359079e-01 + 1.58324782e-01 1.58290394e-01 1.58255915e-01 1.58221343e-01 1.58186679e-01 + 1.58151923e-01 1.58117073e-01 1.58082131e-01 1.58047095e-01 1.58011965e-01 + 1.57976741e-01 1.57941422e-01 1.57906009e-01 1.57870501e-01 1.57834897e-01 + 1.57799197e-01 1.57763402e-01 1.57727510e-01 1.57691521e-01 1.57655435e-01 + 1.57619252e-01 1.57582971e-01 1.57546592e-01 1.57510115e-01 1.57473538e-01 + 1.57436863e-01 1.57400088e-01 1.57363214e-01 1.57326239e-01 1.57289164e-01 + 1.57251989e-01 1.57214712e-01 1.57177333e-01 1.57139853e-01 1.57102271e-01 + 1.57064586e-01 1.57026798e-01 1.56988907e-01 1.56950912e-01 1.56912813e-01 + 1.56874610e-01 1.56836302e-01 1.56797890e-01 1.56759371e-01 1.56720748e-01 + 1.56682017e-01 1.56643181e-01 1.56604237e-01 1.56565187e-01 1.56526028e-01 + 1.56486762e-01 1.56447387e-01 1.56407903e-01 1.56368311e-01 1.56328609e-01 + 1.56288796e-01 1.56248874e-01 1.56208841e-01 1.56168697e-01 1.56128441e-01 + 1.56088074e-01 1.56047594e-01 1.56007002e-01 1.55966297e-01 1.55925478e-01 + 1.55884546e-01 1.55843499e-01 1.55802338e-01 1.55761062e-01 1.55719670e-01 + 1.55678163e-01 1.55636539e-01 1.55594799e-01 1.55552941e-01 1.55510966e-01 + 1.55468873e-01 1.55426662e-01 1.55384333e-01 1.55341884e-01 1.55299315e-01 + 1.55256627e-01 1.55213818e-01 1.55170888e-01 1.55127838e-01 1.55084665e-01 + 1.55041370e-01 1.54997953e-01 1.54954413e-01 1.54910749e-01 1.54866961e-01 + 1.54823050e-01 1.54779013e-01 1.54734851e-01 1.54690564e-01 1.54646150e-01 + 1.54601610e-01 1.54556943e-01 1.54512149e-01 1.54467226e-01 1.54422176e-01 + 1.54376996e-01 1.54331687e-01 1.54286249e-01 1.54240680e-01 1.54194981e-01 + 1.54149150e-01 1.54103188e-01 1.54057094e-01 1.54010867e-01 1.53964507e-01 + 1.53918014e-01 1.53871386e-01 1.53824625e-01 1.53777728e-01 1.53730696e-01 + 1.53683527e-01 1.53636223e-01 1.53588781e-01 1.53541202e-01 1.53493486e-01 + 1.53445630e-01 1.53397636e-01 1.53349503e-01 1.53301229e-01 1.53252815e-01 + 1.53204260e-01 1.53155564e-01 1.53106726e-01 1.53057745e-01 1.53008621e-01 + 1.52959354e-01 1.52909943e-01 1.52860387e-01 1.52810686e-01 1.52760840e-01 + 1.52710847e-01 1.52660708e-01 1.52610421e-01 1.52559987e-01 1.52509404e-01 + 1.52458673e-01 1.52407792e-01 1.52356762e-01 1.52305580e-01 1.52254248e-01 + 1.52202764e-01 1.52151129e-01 1.52099340e-01 1.52047398e-01 1.51995302e-01 + 1.51943052e-01 1.51890647e-01 1.51838087e-01 1.51785370e-01 1.51732497e-01 + 1.51679467e-01 1.51626279e-01 1.51572932e-01 1.51519426e-01 1.51465761e-01 + 1.51411936e-01 1.51357950e-01 1.51303802e-01 1.51249493e-01 1.51195021e-01 + 1.51140386e-01 1.51085587e-01 1.51030624e-01 1.50975496e-01 1.50920202e-01 + 1.50864742e-01 1.50809116e-01 1.50753322e-01 1.50697360e-01 1.50641229e-01 + 1.50584929e-01 1.50528459e-01 1.50471818e-01 1.50415007e-01 1.50358023e-01 + 1.50300867e-01 1.50243538e-01 1.50186035e-01 1.50128358e-01 1.50070506e-01 + 1.50012478e-01 1.49954274e-01 1.49895893e-01 1.49837334e-01 1.49778596e-01 + 1.49719680e-01 1.49660584e-01 1.49601308e-01 1.49541850e-01 1.49482211e-01 + 1.49422390e-01 1.49362385e-01 1.49302197e-01 1.49241824e-01 1.49181266e-01 + 1.49120523e-01 1.49059593e-01 1.48998475e-01 1.48937170e-01 1.48875676e-01 + 1.48813992e-01 1.48752119e-01 1.48690055e-01 1.48627799e-01 1.48565351e-01 + 1.48502710e-01 1.48439876e-01 1.48376847e-01 1.48313623e-01 1.48250203e-01 + 1.48186586e-01 1.48122773e-01 1.48058761e-01 1.47994550e-01 1.47930139e-01 + 1.47865528e-01 1.47800717e-01 1.47735703e-01 1.47670486e-01 1.47605066e-01 + 1.47539442e-01 1.47473613e-01 1.47407579e-01 1.47341337e-01 1.47274889e-01 + 1.47208232e-01 1.47141367e-01 1.47074292e-01 1.47007006e-01 1.46939509e-01 + 1.46871800e-01 1.46803878e-01 1.46735743e-01 1.46667393e-01 1.46598827e-01 + 1.46530046e-01 1.46461047e-01 1.46391831e-01 1.46322396e-01 1.46252742e-01 + 1.46182867e-01 1.46112772e-01 1.46042454e-01 1.45971913e-01 1.45901149e-01 + 1.45830160e-01 1.45758946e-01 1.45687506e-01 1.45615839e-01 1.45543943e-01 + 1.45471819e-01 1.45399465e-01 1.45326880e-01 1.45254064e-01 1.45181016e-01 + 1.45107734e-01 1.45034218e-01 1.44960467e-01 1.44886480e-01 1.44812256e-01 + 1.44737795e-01 1.44663094e-01 1.44588154e-01 1.44512974e-01 1.44437552e-01 + 1.44361888e-01 1.44285981e-01 1.44209829e-01 1.44133432e-01 1.44056789e-01 + 1.43979899e-01 1.43902761e-01 1.43825374e-01 1.43747737e-01 1.43669849e-01 + 1.43591710e-01 1.43513317e-01 1.43434671e-01 1.43355770e-01 1.43276613e-01 + 1.43197200e-01 1.43117528e-01 1.43037599e-01 1.42957409e-01 1.42876959e-01 + 1.42796247e-01 1.42715272e-01 1.42634034e-01 1.42552530e-01 1.42470761e-01 + 1.42388726e-01 1.42306422e-01 1.42223850e-01 1.42141007e-01 1.42057894e-01 + 1.41974509e-01 1.41890851e-01 1.41806919e-01 1.41722711e-01 1.41638228e-01 + 1.41553467e-01 1.41468428e-01 1.41383109e-01 1.41297511e-01 1.41211630e-01 + 1.41125467e-01 1.41039020e-01 1.40952288e-01 1.40865271e-01 1.40777966e-01 + 1.40690373e-01 1.40602491e-01 1.40514319e-01 1.40425855e-01 1.40337099e-01 + 1.40248048e-01 1.40158703e-01 1.40069062e-01 1.39979124e-01 1.39888888e-01 + 1.39798352e-01 1.39707515e-01 1.39616377e-01 1.39524936e-01 1.39433191e-01 + 1.39341140e-01 1.39248784e-01 1.39156119e-01 1.39063146e-01 1.38969862e-01 + 1.38876268e-01 1.38782361e-01 1.38688141e-01 1.38593606e-01 1.38498755e-01 + 1.38403586e-01 1.38308099e-01 1.38212293e-01 1.38116166e-01 1.38019716e-01 + 1.37922943e-01 1.37825846e-01 1.37728423e-01 1.37630672e-01 1.37532594e-01 + 1.37434185e-01 1.37335446e-01 1.37236375e-01 1.37136970e-01 1.37037230e-01 + 1.36937155e-01 1.36836742e-01 1.36735991e-01 1.36634900e-01 1.36533467e-01 + 1.36431692e-01 1.36329574e-01 1.36227110e-01 1.36124300e-01 1.36021142e-01 + 1.35917635e-01 1.35813778e-01 1.35709568e-01 1.35605006e-01 1.35500089e-01 + 1.35394817e-01 1.35289187e-01 1.35183199e-01 1.35076851e-01 1.34970142e-01 + 1.34863070e-01 1.34755634e-01 1.34647833e-01 1.34539665e-01 1.34431128e-01 + 1.34322223e-01 1.34212946e-01 1.34103297e-01 1.33993274e-01 1.33882876e-01 + 1.33772101e-01 1.33660948e-01 1.33549416e-01 1.33437503e-01 1.33325207e-01 + 1.33212528e-01 1.33099463e-01 1.32986012e-01 1.32872172e-01 1.32757943e-01 + 1.32643323e-01 1.32528310e-01 1.32412904e-01 1.32297101e-01 1.32180902e-01 + 1.32064305e-01 1.31947307e-01 1.31829908e-01 1.31712106e-01 1.31593899e-01 + 1.31475287e-01 1.31356267e-01 1.31236838e-01 1.31116998e-01 1.30996746e-01 + 1.30876081e-01 1.30755001e-01 1.30633504e-01 1.30511588e-01 1.30389253e-01 + 1.30266497e-01 1.30143318e-01 1.30019714e-01 1.29895684e-01 1.29771227e-01 + 1.29646341e-01 1.29521024e-01 1.29395274e-01 1.29269091e-01 1.29142472e-01 + 1.29015417e-01 1.28887922e-01 1.28759987e-01 1.28631611e-01 1.28502791e-01 + 1.28373525e-01 1.28243813e-01 1.28113653e-01 1.27983043e-01 1.27851981e-01 + 1.27720466e-01 1.27588496e-01 1.27456070e-01 1.27323186e-01 1.27189841e-01 + 1.27056036e-01 1.26921767e-01 1.26787033e-01 1.26651833e-01 1.26516166e-01 + 1.26380028e-01 1.26243419e-01 1.26106337e-01 1.25968780e-01 1.25830747e-01 + 1.25692235e-01 1.25553244e-01 1.25413771e-01 1.25273815e-01 1.25133375e-01 + 1.24992448e-01 1.24851032e-01 1.24709127e-01 1.24566730e-01 1.24423839e-01 + 1.24280454e-01 1.24136571e-01 1.23992190e-01 1.23847309e-01 1.23701926e-01 + 1.23556040e-01 1.23409647e-01 1.23262748e-01 1.23115340e-01 1.22967422e-01 + 1.22818991e-01 1.22670046e-01 1.22520585e-01 1.22370607e-01 1.22220110e-01 + 1.22069091e-01 1.21917550e-01 1.21765484e-01 1.21612892e-01 1.21459773e-01 + 1.21306123e-01 1.21151942e-01 1.20997228e-01 1.20841979e-01 1.20686193e-01 + 1.20529869e-01 1.20373004e-01 1.20215598e-01 1.20057648e-01 1.19899152e-01 + 1.19740109e-01 1.19580518e-01 1.19420375e-01 1.19259680e-01 1.19098431e-01 + 1.18936626e-01 1.18774263e-01 1.18611341e-01 1.18447857e-01 1.18283810e-01 + 1.18119199e-01 1.17954021e-01 1.17788276e-01 1.17621960e-01 1.17455072e-01 + 1.17287611e-01 1.17119575e-01 1.16950961e-01 1.16781770e-01 1.16611997e-01 + 1.16441643e-01 1.16270705e-01 1.16099181e-01 1.15927070e-01 1.15754370e-01 + 1.15581079e-01 1.15407195e-01 1.15232718e-01 1.15057644e-01 1.14881973e-01 + 1.14705703e-01 1.14528831e-01 1.14351357e-01 1.14173279e-01 1.13994594e-01 + 1.13815302e-01 1.13635400e-01 1.13454887e-01 1.13273762e-01 1.13092022e-01 + 1.12909666e-01 1.12726692e-01 1.12543099e-01 1.12358884e-01 1.12174047e-01 + 1.11988586e-01 1.11802499e-01 1.11615785e-01 1.11428441e-01 1.11240467e-01 + 1.11051860e-01 1.10862619e-01 1.10672743e-01 1.10482230e-01 1.10291079e-01 + 1.10099287e-01 1.09906853e-01 1.09713777e-01 1.09520055e-01 1.09325688e-01 + 1.09130672e-01 1.08935008e-01 1.08738692e-01 1.08541725e-01 1.08344104e-01 + 1.08145827e-01 1.07946894e-01 1.07747304e-01 1.07547053e-01 1.07346142e-01 + 1.07144569e-01 1.06942333e-01 1.06739431e-01 1.06535863e-01 1.06331627e-01 + 1.06126723e-01 1.05921148e-01 1.05714902e-01 1.05507982e-01 1.05300389e-01 + 1.05092120e-01 1.04883175e-01 1.04673552e-01 1.04463250e-01 1.04252268e-01 + 1.04040604e-01 1.03828258e-01 1.03615228e-01 1.03401513e-01 1.03187113e-01 + 1.02972026e-01 1.02756250e-01 1.02539786e-01 1.02322631e-01 1.02104785e-01 + 1.01886248e-01 1.01667017e-01 1.01447092e-01 1.01226473e-01 1.01005158e-01 + 1.00783146e-01 1.00560436e-01 1.00337028e-01 1.00112922e-01 9.98881150e-02 + 9.96626076e-02 9.94363989e-02 9.92094881e-02 9.89818746e-02 9.87535577e-02 + 9.85245367e-02 9.82948112e-02 9.80643804e-02 9.78332440e-02 9.76014013e-02 + 9.73688518e-02 9.71355952e-02 9.69016310e-02 9.66669588e-02 9.64315783e-02 + 9.61954891e-02 9.59586908e-02 9.57211834e-02 9.54829664e-02 9.52440398e-02 + 9.50044033e-02 9.47640568e-02 9.45230003e-02 9.42812335e-02 9.40387567e-02 + 9.37955696e-02 9.35516725e-02 9.33070653e-02 9.30617482e-02 9.28157214e-02 + 9.25689850e-02 9.23215393e-02 9.20733846e-02 9.18245212e-02 9.15749495e-02 + 9.13246699e-02 9.10736827e-02 9.08219886e-02 9.05695880e-02 9.03164816e-02 + 9.00626699e-02 8.98081536e-02 8.95529334e-02 8.92970102e-02 8.90403847e-02 + 8.87830577e-02 8.85250303e-02 8.82663032e-02 8.80068776e-02 8.77467546e-02 + 8.74859351e-02 8.72244204e-02 8.69622117e-02 8.66993103e-02 8.64357174e-02 + 8.61714345e-02 8.59064630e-02 8.56408044e-02 8.53744602e-02 8.51074320e-02 + 8.48397215e-02 8.45713304e-02 8.43022605e-02 8.40325136e-02 8.37620916e-02 + 8.34909965e-02 8.32192302e-02 8.29467950e-02 8.26736929e-02 8.23999262e-02 + 8.21254970e-02 8.18504079e-02 8.15746611e-02 8.12982592e-02 8.10212047e-02 + 8.07435002e-02 8.04651484e-02 8.01861521e-02 7.99065141e-02 7.96262372e-02 + 7.93453246e-02 7.90637791e-02 7.87816039e-02 7.84988023e-02 7.82153774e-02 + 7.79313327e-02 7.76466715e-02 7.73613974e-02 7.70755139e-02 7.67890246e-02 + 7.65019334e-02 7.62142440e-02 7.59259604e-02 7.56370865e-02 7.53476263e-02 + 7.50575841e-02 7.47669641e-02 7.44757706e-02 7.41840079e-02 7.38916807e-02 + 7.35987934e-02 7.33053507e-02 7.30113575e-02 7.27168185e-02 7.24217387e-02 + 7.21261231e-02 7.18299768e-02 7.15333051e-02 7.12361133e-02 7.09384067e-02 + 7.06401909e-02 7.03414715e-02 7.00422541e-02 6.97425446e-02 6.94423488e-02 + 6.91416728e-02 6.88405225e-02 6.85389043e-02 6.82368244e-02 6.79342891e-02 + 6.76313050e-02 6.73278787e-02 6.70240169e-02 6.67197264e-02 6.64150140e-02 + 6.61098869e-02 6.58043520e-02 6.54984168e-02 6.51920884e-02 6.48853744e-02 + 6.45782823e-02 6.42708198e-02 6.39629946e-02 6.36548146e-02 6.33462879e-02 + 6.30374225e-02 6.27282267e-02 6.24187088e-02 6.21088773e-02 6.17987406e-02 + 6.14883076e-02 6.11775870e-02 6.08665877e-02 6.05553188e-02 6.02437893e-02 + 5.99320086e-02 5.96199860e-02 5.93077311e-02 5.89952534e-02 5.86825627e-02 + 5.83696689e-02 5.80565818e-02 5.77433118e-02 5.74298688e-02 5.71162634e-02 + 5.68025058e-02 5.64886069e-02 5.61745771e-02 5.58604274e-02 5.55461687e-02 + 5.52318121e-02 5.49173687e-02 5.46028499e-02 5.42882672e-02 5.39736321e-02 + 5.36589562e-02 5.33442514e-02 5.30295296e-02 5.27148029e-02 5.24000835e-02 + 5.20853836e-02 5.17707158e-02 5.14560924e-02 5.11415263e-02 5.08270302e-02 + 5.05126170e-02 5.01982998e-02 4.98840918e-02 4.95700061e-02 4.92560564e-02 + 4.89422560e-02 4.86286186e-02 4.83151580e-02 4.80018882e-02 4.76888231e-02 + 4.73759769e-02 4.70633638e-02 4.67509982e-02 4.64388946e-02 4.61270676e-02 + 4.58155320e-02 4.55043026e-02 4.51933944e-02 4.48828225e-02 4.45726020e-02 + 4.42627483e-02 4.39532767e-02 4.36442030e-02 4.33355426e-02 4.30273114e-02 + 4.27195253e-02 4.24122002e-02 4.21053521e-02 4.17989974e-02 4.14931524e-02 + 4.11878333e-02 4.08830568e-02 4.05788395e-02 4.02751981e-02 3.99721494e-02 + 3.96697104e-02 3.93678979e-02 3.90667293e-02 3.87662217e-02 3.84663923e-02 + 3.81672586e-02 3.78688381e-02 3.75711484e-02 3.72742070e-02 3.69780319e-02 + 3.66826407e-02 3.63880515e-02 3.60942822e-02 3.58013509e-02 3.55092758e-02 + 3.52180750e-02 3.49277670e-02 3.46383700e-02 3.43499026e-02 3.40623832e-02 + 3.37758304e-02 3.34902629e-02 3.32056994e-02 3.29221586e-02 3.26396593e-02 + 3.23582205e-02 3.20778611e-02 3.17986000e-02 3.15204562e-02 3.12434489e-02 + 3.09675972e-02 3.06929202e-02 3.04194370e-02 3.01471670e-02 2.98761294e-02 + 2.96063435e-02 2.93378286e-02 2.90706040e-02 2.88046891e-02 2.85401033e-02 + 2.82768660e-02 2.80149966e-02 2.77545145e-02 2.74954392e-02 2.72377901e-02 + 2.69815866e-02 2.67268481e-02 2.64735941e-02 2.62218441e-02 2.59716174e-02 + 2.57229334e-02 2.54758115e-02 2.52302711e-02 2.49863315e-02 2.47440120e-02 + 2.45033320e-02 2.42643105e-02 2.40269669e-02 2.37913204e-02 2.35573900e-02 + 2.33251949e-02 2.30947540e-02 2.28660864e-02 2.26392110e-02 2.24141466e-02 + 2.21909120e-02 2.19695260e-02 2.17500072e-02 2.15323742e-02 2.13166455e-02 + 2.11028396e-02 2.08909747e-02 2.06810691e-02 2.04731411e-02 2.02672086e-02 + 2.00632896e-02 1.98614019e-02 1.96615634e-02 1.94637917e-02 1.92681043e-02 + 1.90745186e-02 1.88830519e-02 1.86937213e-02 1.85065440e-02 1.83215368e-02 + 1.81387165e-02 1.79580998e-02 1.77797030e-02 1.76035426e-02 1.74296348e-02 + 1.72579956e-02 1.70886409e-02 1.69215864e-02 1.67568478e-02 1.65944402e-02 + 1.64343791e-02 1.62766795e-02 1.61213562e-02 1.59684240e-02 1.58178973e-02 + 1.56697904e-02 1.55241176e-02 1.53808927e-02 1.52401295e-02 1.51018416e-02 + 1.49660422e-02 1.48327446e-02 1.47019616e-02 1.45737059e-02 1.44479901e-02 + 1.43248264e-02 1.42042269e-02 1.40862035e-02 1.39707676e-02 1.38579308e-02 + 1.37477041e-02 1.36400985e-02 1.35351246e-02 1.34327929e-02 1.33331135e-02 + 1.32360964e-02 1.31417514e-02 1.30500877e-02 1.29611147e-02 1.28748412e-02 + 1.27912760e-02 1.27104274e-02 1.26323037e-02 1.25569127e-02 1.24842620e-02 + 1.24143590e-02 1.23472109e-02 1.22828243e-02 1.22212060e-02 1.21623621e-02 + 1.21062986e-02 1.20530213e-02 1.20025356e-02 1.19548467e-02 1.19099595e-02 + 1.18678785e-02 1.18286081e-02 1.17921522e-02 1.17585148e-02 1.17276991e-02 + 1.16997084e-02 1.16745455e-02 1.16522130e-02 1.16327133e-02 1.16160484e-02 + 1.16022198e-02 1.15912292e-02 1.15830776e-02 1.15777658e-02 1.15752944e-02 + 1.15756637e-02 1.15788736e-02 1.15849238e-02 1.15938137e-02 1.16055423e-02 + 1.16201084e-02 1.16375106e-02 1.16577471e-02 1.16808156e-02 1.17067140e-02 + 1.17354395e-02 1.17669892e-02 1.18013598e-02 1.18385478e-02 1.18785493e-02 + 1.19213604e-02 1.19669765e-02 1.20153931e-02 1.20666051e-02 1.21206073e-02 + 1.21773942e-02 1.22369601e-02 1.22992988e-02 1.23644040e-02 1.24322691e-02 + 1.25028871e-02 1.25762510e-02 1.26523533e-02 1.27311863e-02 1.28127420e-02 + 1.28970121e-02 1.29839883e-02 1.30736618e-02 1.31660235e-02 1.32610642e-02 + 1.33587744e-02 1.34591444e-02 1.35621641e-02 1.36678232e-02 1.37761113e-02 + 1.38870177e-02 1.40005314e-02 1.41166411e-02 1.42353355e-02 1.43566028e-02 + 1.44804312e-02 1.46068085e-02 1.47357225e-02 1.48671606e-02 1.50011099e-02 + 1.51375576e-02 1.52764904e-02 1.54178949e-02 1.55617576e-02 1.57080646e-02 + 1.58568020e-02 1.60079555e-02 1.61615108e-02 1.63174534e-02 1.64757685e-02 + 1.66364411e-02 1.67994562e-02 1.69647985e-02 1.71324525e-02 1.73024027e-02 + 1.74746333e-02 1.76491283e-02 1.78258717e-02 1.80048472e-02 1.81860385e-02 + 1.83694290e-02 1.85550020e-02 1.87427408e-02 1.89326284e-02 1.91246477e-02 + 1.93187815e-02 1.95150125e-02 1.97133233e-02 1.99136963e-02 2.01161138e-02 + 2.03205580e-02 2.05270111e-02 2.07354551e-02 2.09458718e-02 2.11582431e-02 + 2.13725507e-02 2.15887763e-02 2.18069014e-02 2.20269075e-02 2.22487759e-02 + 2.24724880e-02 2.26980251e-02 2.29253683e-02 2.31544988e-02 2.33853976e-02 + 2.36180458e-02 2.38524242e-02 2.40885138e-02 2.43262955e-02 2.45657500e-02 + 2.48068582e-02 2.50496007e-02 2.52939584e-02 2.55399119e-02 2.57874418e-02 + 2.60365287e-02 2.62871534e-02 2.65392963e-02 2.67929381e-02 2.70480593e-02 + 2.73046406e-02 2.75626624e-02 2.78221053e-02 2.80829500e-02 2.83451769e-02 + 2.86087667e-02 2.88736999e-02 2.91399572e-02 2.94075191e-02 2.96763664e-02 + 2.99464796e-02 3.02178395e-02 3.04904267e-02 3.07642221e-02 3.10392064e-02 + 3.13153605e-02 3.15926651e-02 3.18711011e-02 3.21506496e-02 3.24312916e-02 + 3.27130079e-02 3.29957798e-02 3.32795883e-02 3.35644146e-02 3.38502401e-02 + 3.41370460e-02 3.44248137e-02 3.47135246e-02 3.50031602e-02 3.52937021e-02 + 3.55851319e-02 3.58774314e-02 3.61705823e-02 3.64645665e-02 3.67593660e-02 + 3.70549627e-02 3.73513388e-02 3.76484764e-02 3.79463579e-02 3.82449655e-02 + 3.85442817e-02 3.88442891e-02 3.91449703e-02 3.94463079e-02 3.97482849e-02 + 4.00508841e-02 4.03540886e-02 4.06578813e-02 4.09622456e-02 4.12671648e-02 + 4.15726221e-02 4.18786013e-02 4.21850858e-02 4.24920594e-02 4.27995060e-02 + 4.31074094e-02 4.34157537e-02 4.37245230e-02 4.40337017e-02 4.43432741e-02 + 4.46532246e-02 4.49635380e-02 4.52741988e-02 4.55851920e-02 4.58965024e-02 + 4.62081152e-02 4.65200155e-02 4.68321886e-02 4.71446199e-02 4.74572950e-02 + 4.77701996e-02 4.80833192e-02 4.83966400e-02 4.87101479e-02 4.90238289e-02 + 4.93376695e-02 4.96516559e-02 4.99657746e-02 5.02800123e-02 5.05943557e-02 + 5.09087917e-02 5.12233073e-02 5.15378895e-02 5.18525256e-02 5.21672030e-02 + 5.24819092e-02 5.27966317e-02 5.31113583e-02 5.34260768e-02 5.37407752e-02 + 5.40554416e-02 5.43700642e-02 5.46846314e-02 5.49991317e-02 5.53135536e-02 + 5.56278858e-02 5.59421172e-02 5.62562368e-02 5.65702336e-02 5.68840968e-02 + 5.71978158e-02 5.75113800e-02 5.78247790e-02 5.81380025e-02 5.84510402e-02 + 5.87638822e-02 5.90765185e-02 5.93889392e-02 5.97011346e-02 6.00130952e-02 + 6.03248115e-02 6.06362741e-02 6.09474738e-02 6.12584015e-02 6.15690482e-02 + 6.18794050e-02 6.21894631e-02 6.24992140e-02 6.28086489e-02 6.31177596e-02 + 6.34265377e-02 6.37349751e-02 6.40430636e-02 6.43507952e-02 6.46581622e-02 + 6.49651567e-02 6.52717712e-02 6.55779981e-02 6.58838299e-02 6.61892594e-02 + 6.64942794e-02 6.67988828e-02 6.71030625e-02 6.74068117e-02 6.77101237e-02 + 6.80129917e-02 6.83154092e-02 6.86173697e-02 6.89188669e-02 6.92198944e-02 + 6.95204462e-02 6.98205161e-02 7.01200982e-02 7.04191867e-02 7.07177757e-02 + 7.10158596e-02 7.13134329e-02 7.16104900e-02 7.19070256e-02 7.22030344e-02 + 7.24985112e-02 7.27934509e-02 7.30878484e-02 7.33816990e-02 7.36749977e-02 + 7.39677398e-02 7.42599207e-02 7.45515358e-02 7.48425807e-02 7.51330509e-02 + 7.54229421e-02 7.57122502e-02 7.60009711e-02 7.62891006e-02 7.65766348e-02 + 7.68635699e-02 7.71499020e-02 7.74356274e-02 7.77207425e-02 7.80052438e-02 + 7.82891277e-02 7.85723908e-02 7.88550299e-02 7.91370416e-02 7.94184229e-02 + 7.96991705e-02 7.99792815e-02 8.02587530e-02 8.05375820e-02 8.08157657e-02 + 8.10933015e-02 8.13701866e-02 8.16464184e-02 8.19219944e-02 8.21969122e-02 + 8.24711693e-02 8.27447635e-02 8.30176924e-02 8.32899539e-02 8.35615458e-02 + 8.38324661e-02 8.41027128e-02 8.43722839e-02 8.46411775e-02 8.49093918e-02 + 8.51769250e-02 8.54437756e-02 8.57099417e-02 8.59754218e-02 8.62402144e-02 + 8.65043180e-02 8.67677312e-02 8.70304527e-02 8.72924810e-02 8.75538151e-02 + 8.78144536e-02 8.80743954e-02 8.83336395e-02 8.85921847e-02 8.88500302e-02 + 8.91071748e-02 8.93636178e-02 8.96193583e-02 8.98743956e-02 9.01287287e-02 + 9.03823571e-02 9.06352801e-02 9.08874971e-02 9.11390074e-02 9.13898107e-02 + 9.16399063e-02 9.18892939e-02 9.21379731e-02 9.23859434e-02 9.26332047e-02 + 9.28797566e-02 9.31255989e-02 9.33707315e-02 9.36151540e-02 9.38588666e-02 + 9.41018690e-02 9.43441612e-02 9.45857433e-02 9.48266152e-02 9.50667771e-02 + 9.53062290e-02 9.55449711e-02 9.57830036e-02 9.60203266e-02 9.62569405e-02 + 9.64928454e-02 9.67280417e-02 9.69625298e-02 9.71963100e-02 9.74293827e-02 + 9.76617483e-02 9.78934074e-02 9.81243603e-02 9.83546076e-02 9.85841499e-02 + 9.88129878e-02 9.90411218e-02 9.92685525e-02 9.94952807e-02 9.97213070e-02 + 9.99466321e-02 1.00171257e-01 1.00395182e-01 1.00618408e-01 1.00840936e-01 + 1.01062766e-01 1.01283901e-01 1.01504340e-01 1.01724084e-01 1.01943134e-01 + 1.02161492e-01 1.02379158e-01 1.02596133e-01 1.02812418e-01 1.03028014e-01 + 1.03242923e-01 1.03457145e-01 1.03670682e-01 1.03883534e-01 1.04095702e-01 + 1.04307189e-01 1.04517994e-01 1.04728119e-01 1.04937566e-01 1.05146335e-01 + 1.05354428e-01 1.05561846e-01 1.05768590e-01 1.05974662e-01 1.06180062e-01 + 1.06384793e-01 1.06588855e-01 1.06792249e-01 1.06994978e-01 1.07197042e-01 + 1.07398443e-01 1.07599182e-01 1.07799261e-01 1.07998680e-01 1.08197442e-01 + 1.08395548e-01 1.08592999e-01 1.08789797e-01 1.08985943e-01 1.09181439e-01 + 1.09376286e-01 1.09570485e-01 1.09764039e-01 1.09956948e-01 1.10149214e-01 + 1.10340840e-01 1.10531825e-01 1.10722172e-01 1.10911883e-01 1.11100959e-01 + 1.11289401e-01 1.11477211e-01 1.11664391e-01 1.11850942e-01 1.12036866e-01 + 1.12222165e-01 1.12406840e-01 1.12590892e-01 1.12774325e-01 1.12957138e-01 + 1.13139333e-01 1.13320913e-01 1.13501880e-01 1.13682233e-01 1.13861976e-01 + 1.14041111e-01 1.14219637e-01 1.14397559e-01 1.14574876e-01 1.14751591e-01 + 1.14927705e-01 1.15103221e-01 1.15278139e-01 1.15452462e-01 1.15626191e-01 + 1.15799328e-01 1.15971875e-01 1.16143834e-01 1.16315205e-01 1.16485991e-01 + 1.16656194e-01 1.16825815e-01 1.16994856e-01 1.17163320e-01 1.17331206e-01 + 1.17498518e-01 1.17665257e-01 1.17831424e-01 1.17997022e-01 1.18162053e-01 + 1.18326517e-01 1.18490417e-01 1.18653754e-01 1.18816531e-01 1.18978749e-01 + 1.19140409e-01 1.19301514e-01 1.19462065e-01 1.19622064e-01 1.19781513e-01 + 1.19940414e-01 1.20098767e-01 1.20256576e-01 1.20413841e-01 1.20570565e-01 + 1.20726749e-01 1.20882395e-01 1.21037505e-01 1.21192080e-01 1.21346123e-01 + 1.21499635e-01 1.21652617e-01 1.21805072e-01 1.21957001e-01 1.22108406e-01 + 1.22259289e-01 1.22409651e-01 1.22559495e-01 1.22708821e-01 1.22857632e-01 + 1.23005930e-01 1.23153715e-01 1.23300991e-01 1.23447758e-01 1.23594019e-01 + 1.23739774e-01 1.23885027e-01 1.24029777e-01 1.24174028e-01 1.24317781e-01 + 1.24461038e-01 1.24603800e-01 1.24746069e-01 1.24887847e-01 1.25029136e-01 + 1.25169936e-01 1.25310251e-01 1.25450081e-01 1.25589428e-01 1.25728294e-01 + 1.25866681e-01 1.26004590e-01 1.26142024e-01 1.26278983e-01 1.26415469e-01 + 1.26551484e-01 1.26687030e-01 1.26822109e-01 1.26956721e-01 1.27090870e-01 + 1.27224555e-01 1.27357780e-01 1.27490545e-01 1.27622852e-01 1.27754704e-01 + 1.27886101e-01 1.28017045e-01 1.28147538e-01 1.28277582e-01 1.28407177e-01 + 1.28536327e-01 1.28665031e-01 1.28793293e-01 1.28921113e-01 1.29048493e-01 + 1.29175435e-01 1.29301941e-01 1.29428011e-01 1.29553648e-01 1.29678853e-01 + 1.29803627e-01 1.29927973e-01 1.30051892e-01 1.30175385e-01 1.30298454e-01 + 1.30421101e-01 1.30543327e-01 1.30665133e-01 1.30786522e-01 1.30907494e-01 + 1.31028051e-01 1.31148196e-01 1.31267929e-01 1.31387251e-01 1.31506165e-01 + 1.31624672e-01 1.31742773e-01 1.31860470e-01 1.31977765e-01 1.32094658e-01 + 1.32211152e-01 1.32327248e-01 1.32442947e-01 1.32558252e-01 1.32673162e-01 + 1.32787680e-01 1.32901808e-01 1.33015546e-01 1.33128897e-01 1.33241861e-01 + 1.33354441e-01 1.33466637e-01 1.33578451e-01 1.33689884e-01 1.33800939e-01 + 1.33911615e-01 1.34021916e-01 1.34131841e-01 1.34241394e-01 1.34350574e-01 + 1.34459383e-01 1.34567824e-01 1.34675896e-01 1.34783602e-01 1.34890944e-01 + 1.34997921e-01 1.35104536e-01 1.35210791e-01 1.35316685e-01 1.35422222e-01 + 1.35527402e-01 1.35632226e-01 1.35736697e-01 1.35840814e-01 1.35944580e-01 + 1.36047997e-01 1.36151064e-01 1.36253784e-01 1.36356158e-01 1.36458187e-01 + 1.36559873e-01 1.36661216e-01 1.36762219e-01 1.36862882e-01 1.36963207e-01 + 1.37063195e-01 1.37162847e-01 1.37262165e-01 1.37361150e-01 1.37459803e-01 + 1.37558126e-01 1.37656119e-01 1.37753784e-01 1.37851123e-01 1.37948136e-01 + 1.38044824e-01 1.38141190e-01 1.38237233e-01 1.38332957e-01 1.38428361e-01 + 1.38523446e-01 1.38618215e-01 1.38712668e-01 1.38806807e-01 1.38900633e-01 + 1.38994146e-01 1.39087349e-01 1.39180241e-01 1.39272826e-01 1.39365103e-01 + 1.39457074e-01 1.39548740e-01 1.39640102e-01 1.39731162e-01 1.39821920e-01 + 1.39912378e-01 1.40002537e-01 1.40092398e-01 1.40181961e-01 1.40271230e-01 + 1.40360203e-01 1.40448884e-01 1.40537272e-01 1.40625368e-01 1.40713175e-01 + 1.40800693e-01 1.40887923e-01 1.40974866e-01 1.41061523e-01 1.41147896e-01 + 1.41233986e-01 1.41319793e-01 1.41405319e-01 1.41490565e-01 1.41575532e-01 + 1.41660220e-01 1.41744632e-01 1.41828768e-01 1.41912628e-01 1.41996216e-01 + 1.42079530e-01 1.42162572e-01 1.42245344e-01 1.42327847e-01 1.42410081e-01 + 1.42492047e-01 1.42573747e-01 1.42655181e-01 1.42736351e-01 1.42817257e-01 + 1.42897901e-01 1.42978283e-01 1.43058405e-01 1.43138268e-01 1.43217872e-01 + 1.43297218e-01 1.43376309e-01 1.43455143e-01 1.43533723e-01 1.43612050e-01 + 1.43690124e-01 1.43767947e-01 1.43845519e-01 1.43922841e-01 1.43999914e-01 + 1.44076740e-01 1.44153319e-01 1.44229652e-01 1.44305740e-01 1.44381584e-01 + 1.44457185e-01 1.44532544e-01 1.44607662e-01 1.44682539e-01 1.44757177e-01 + 1.44831577e-01 1.44905739e-01 1.44979665e-01 1.45053355e-01 1.45126809e-01 + 1.45200031e-01 1.45273019e-01 1.45345774e-01 1.45418299e-01 1.45490593e-01 + 1.45562658e-01 1.45634494e-01 1.45706102e-01 1.45777484e-01 1.45848639e-01 + 1.45919569e-01 1.45990275e-01 1.46060758e-01 1.46131018e-01 1.46201056e-01 + 1.46270873e-01 1.46340470e-01 1.46409848e-01 1.46479008e-01 1.46547950e-01 + 1.46616675e-01 1.46685184e-01 1.46753479e-01 1.46821558e-01 1.46889425e-01 + 1.46957079e-01 1.47024520e-01 1.47091751e-01 1.47158772e-01 1.47225583e-01 + 1.47292185e-01 1.47358580e-01 1.47424768e-01 1.47490749e-01 1.47556524e-01 + 1.47622095e-01 1.47687462e-01 1.47752626e-01 1.47817587e-01 1.47882347e-01 + 1.19316516e-02 1.17837661e-02 1.16368916e-02 1.14910312e-02 1.13461881e-02 + 1.12023652e-02 1.10595657e-02 1.09177924e-02 1.07770486e-02 1.06373371e-02 + 1.04986608e-02 1.03610229e-02 1.02244262e-02 1.00888736e-02 9.95436796e-03 + 9.82091227e-03 9.68850936e-03 9.55716205e-03 9.42687318e-03 9.29764555e-03 + 9.16948195e-03 9.04238514e-03 8.91635788e-03 8.79140288e-03 8.66752287e-03 + 8.54472052e-03 8.42299850e-03 8.30235947e-03 8.18280604e-03 8.06434082e-03 + 7.94696640e-03 7.83068535e-03 7.71550020e-03 7.60141348e-03 7.48842769e-03 + 7.37654531e-03 7.26576880e-03 7.15610060e-03 7.04754311e-03 6.94009874e-03 + 6.83376985e-03 6.72855879e-03 6.62446789e-03 6.52149946e-03 6.41965576e-03 + 6.31893907e-03 6.21935162e-03 6.12089562e-03 6.02357326e-03 5.92738670e-03 + 5.83233810e-03 5.73842957e-03 5.64566320e-03 5.55404108e-03 5.46356524e-03 + 5.37423772e-03 5.28606051e-03 5.19903560e-03 5.11316493e-03 5.02845043e-03 + 4.94489402e-03 4.86249756e-03 4.78126291e-03 4.70119191e-03 4.62228636e-03 + 4.54454803e-03 4.46797870e-03 4.39258007e-03 4.31835387e-03 4.24530177e-03 + 4.17342543e-03 4.10272646e-03 4.03320649e-03 3.96486708e-03 3.89770979e-03 + 3.83173614e-03 3.76694764e-03 3.70334576e-03 3.64093194e-03 3.57970760e-03 + 3.51967415e-03 3.46083296e-03 3.40318535e-03 3.34673266e-03 3.29147617e-03 + 3.23741715e-03 3.18455682e-03 3.13289641e-03 3.08243708e-03 3.03318001e-03 + 2.98512631e-03 2.93827709e-03 2.89263342e-03 2.84819635e-03 2.80496690e-03 + 2.76294607e-03 2.72213481e-03 2.68253407e-03 2.64414475e-03 2.60696775e-03 + 2.57100391e-03 2.53625406e-03 2.50271900e-03 2.47039951e-03 2.43929633e-03 + 2.40941017e-03 2.38074173e-03 2.35329167e-03 2.32706061e-03 2.30204917e-03 + 2.27825792e-03 2.25568742e-03 2.23433817e-03 2.21421068e-03 2.19530540e-03 + 2.17762279e-03 2.16116324e-03 2.14592713e-03 2.13191482e-03 2.11912664e-03 + 2.10756286e-03 2.09722378e-03 2.08810961e-03 2.08022058e-03 2.07355687e-03 + 2.06811863e-03 2.06390598e-03 2.06091903e-03 2.05915784e-03 2.05862245e-03 + 2.05931288e-03 2.06122911e-03 2.06437109e-03 2.06873876e-03 2.07433201e-03 + 2.08115071e-03 2.08919471e-03 2.09846382e-03 2.10895782e-03 2.12067647e-03 + 2.13361950e-03 2.14778662e-03 2.16317748e-03 2.17979175e-03 2.19762903e-03 + 2.21668892e-03 2.23697097e-03 2.25847471e-03 2.28119965e-03 2.30514526e-03 + 2.33031099e-03 2.35669626e-03 2.38430046e-03 2.41312296e-03 2.44316308e-03 + 2.47442014e-03 2.50689342e-03 2.54058217e-03 2.57548561e-03 2.61160294e-03 + 2.64893333e-03 2.68747592e-03 2.72722982e-03 2.76819412e-03 2.81036787e-03 + 2.85375012e-03 2.89833986e-03 2.94413606e-03 2.99113769e-03 3.03934365e-03 + 3.08875285e-03 3.13936416e-03 3.19117640e-03 3.24418841e-03 3.29839896e-03 + 3.35380682e-03 3.41041071e-03 3.46820936e-03 3.52720143e-03 3.58738558e-03 + 3.64876043e-03 3.71132460e-03 3.77507665e-03 3.84001514e-03 3.90613858e-03 + 3.97344547e-03 4.04193428e-03 4.11160346e-03 4.18245143e-03 4.25447658e-03 + 4.32767727e-03 4.40205185e-03 4.47759865e-03 4.55431593e-03 4.63220199e-03 + 4.71125505e-03 4.79147333e-03 4.87285502e-03 4.95539830e-03 5.03910129e-03 + 5.12396213e-03 5.20997890e-03 5.29714966e-03 5.38547247e-03 5.47494535e-03 + 5.56556628e-03 5.65733324e-03 5.75024419e-03 5.84429703e-03 5.93948968e-03 + 6.03582001e-03 6.13328588e-03 6.23188511e-03 6.33161551e-03 6.43247487e-03 + 6.53446095e-03 6.63757148e-03 6.74180419e-03 6.84715676e-03 6.95362687e-03 + 7.06121216e-03 7.16991026e-03 7.27971878e-03 7.39063530e-03 7.50265737e-03 + 7.61578255e-03 7.73000833e-03 7.84533223e-03 7.96175172e-03 8.07926424e-03 + 8.19786724e-03 8.31755813e-03 8.43833428e-03 8.56019309e-03 8.68313189e-03 + 8.80714802e-03 8.93223879e-03 9.05840148e-03 9.18563337e-03 9.31393170e-03 + 9.44329371e-03 9.57371661e-03 9.70519759e-03 9.83773382e-03 9.97132246e-03 + 1.01059606e-02 1.02416455e-02 1.03783741e-02 1.05161435e-02 1.06549508e-02 + 1.07947931e-02 1.09356673e-02 1.10775705e-02 1.12204997e-02 1.13644517e-02 + 1.15094237e-02 1.16554125e-02 1.18024151e-02 1.19504282e-02 1.20994490e-02 + 1.22494741e-02 1.24005005e-02 1.25525250e-02 1.27055444e-02 1.28595555e-02 + 1.30145552e-02 1.31705401e-02 1.33275071e-02 1.34854528e-02 1.36443741e-02 + 1.38042677e-02 1.39651301e-02 1.41269582e-02 1.42897485e-02 1.44534978e-02 + 1.46182027e-02 1.47838598e-02 1.49504657e-02 1.51180170e-02 1.52865103e-02 + 1.54559422e-02 1.56263093e-02 1.57976080e-02 1.59698349e-02 1.61429866e-02 + 1.63170596e-02 1.64920502e-02 1.66679551e-02 1.68447707e-02 1.70224935e-02 + 1.72011198e-02 1.73806462e-02 1.75610691e-02 1.77423848e-02 1.79245899e-02 + 1.81076806e-02 1.82916533e-02 1.84765045e-02 1.86622305e-02 1.88488276e-02 + 1.90362922e-02 1.92246206e-02 1.94138091e-02 1.96038541e-02 1.97947518e-02 + 1.99864985e-02 2.01790905e-02 2.03725242e-02 2.05667957e-02 2.07619013e-02 + 2.09578372e-02 2.11545998e-02 2.13521852e-02 2.15505896e-02 2.17498093e-02 + 2.19498405e-02 2.21506794e-02 2.23523222e-02 2.25547650e-02 2.27580040e-02 + 2.29620355e-02 2.31668555e-02 2.33724603e-02 2.35788460e-02 2.37860087e-02 + 2.39939446e-02 2.42026499e-02 2.44121205e-02 2.46223528e-02 2.48333427e-02 + 2.50450864e-02 2.52575801e-02 2.54708198e-02 2.56848016e-02 2.58995216e-02 + 2.61149759e-02 2.63311606e-02 2.65480717e-02 2.67657054e-02 2.69840578e-02 + 2.72031248e-02 2.74229026e-02 2.76433871e-02 2.78645746e-02 2.80864610e-02 + 2.83090425e-02 2.85323149e-02 2.87562745e-02 2.89809172e-02 2.92062390e-02 + 2.94322361e-02 2.96589045e-02 2.98862402e-02 3.01142392e-02 3.03428976e-02 + 3.05722114e-02 3.08021766e-02 3.10327893e-02 3.12640455e-02 3.14959413e-02 + 3.17284726e-02 3.19616355e-02 3.21954260e-02 3.24298402e-02 3.26648740e-02 + 3.29005236e-02 3.31367848e-02 3.33736539e-02 3.36111267e-02 3.38491993e-02 + 3.40878677e-02 3.43271281e-02 3.45669763e-02 3.48074084e-02 3.50484206e-02 + 3.52900087e-02 3.55321689e-02 3.57748971e-02 3.60181895e-02 3.62620420e-02 + 3.65064508e-02 3.67514117e-02 3.69969210e-02 3.72429746e-02 3.74895686e-02 + 3.77366991e-02 3.79843621e-02 3.82325537e-02 3.84812698e-02 3.87305067e-02 + 3.89802604e-02 3.92305269e-02 3.94813024e-02 3.97325829e-02 3.99843644e-02 + 4.02366431e-02 4.04894151e-02 4.07426765e-02 4.09964234e-02 4.12506518e-02 + 4.15053579e-02 4.17605378e-02 4.20161876e-02 4.22723034e-02 4.25288815e-02 + 4.27859178e-02 4.30434086e-02 4.33013499e-02 4.35597380e-02 4.38185689e-02 + 4.40778389e-02 4.43375441e-02 4.45976807e-02 4.48582449e-02 4.51192328e-02 + 4.53806406e-02 4.56424645e-02 4.59047007e-02 4.61673455e-02 4.64303950e-02 + 4.66938455e-02 4.69576932e-02 4.72219342e-02 4.74865650e-02 4.77515816e-02 + 4.80169804e-02 4.82827576e-02 4.85489095e-02 4.88154324e-02 4.90823225e-02 + 4.93495761e-02 4.96171896e-02 4.98851592e-02 5.01534812e-02 5.04221520e-02 + 5.06911679e-02 5.09605252e-02 5.12302202e-02 5.15002494e-02 5.17706091e-02 + 5.20412956e-02 5.23123054e-02 5.25836347e-02 5.28552801e-02 5.31272378e-02 + 5.33995044e-02 5.36720762e-02 5.39449496e-02 5.42181211e-02 5.44915872e-02 + 5.47653442e-02 5.50393887e-02 5.53137171e-02 5.55883259e-02 5.58632116e-02 + 5.61383707e-02 5.64137997e-02 5.66894951e-02 5.69654535e-02 5.72416713e-02 + 5.75181451e-02 5.77948716e-02 5.80718471e-02 5.83490684e-02 5.86265320e-02 + 5.89042345e-02 5.91821725e-02 5.94603427e-02 5.97387415e-02 6.00173658e-02 + 6.02962120e-02 6.05752770e-02 6.08545573e-02 6.11340496e-02 6.14137506e-02 + 6.16936570e-02 6.19737655e-02 6.22540729e-02 6.25345758e-02 6.28152709e-02 + 6.30961552e-02 6.33772252e-02 6.36584778e-02 6.39399097e-02 6.42215178e-02 + 6.45032988e-02 6.47852496e-02 6.50673669e-02 6.53496477e-02 6.56320887e-02 + 6.59146868e-02 6.61974389e-02 6.64803419e-02 6.67633926e-02 6.70465880e-02 + 6.73299249e-02 6.76134004e-02 6.78970112e-02 6.81807545e-02 6.84646270e-02 + 6.87486259e-02 6.90327480e-02 6.93169904e-02 6.96013501e-02 6.98858240e-02 + 7.01704093e-02 7.04551029e-02 7.07399019e-02 7.10248033e-02 7.13098043e-02 + 7.15949019e-02 7.18800932e-02 7.21653753e-02 7.24507453e-02 7.27362004e-02 + 7.30217377e-02 7.33073544e-02 7.35930475e-02 7.38788144e-02 7.41646521e-02 + 7.44505580e-02 7.47365291e-02 7.50225627e-02 7.53086561e-02 7.55948066e-02 + 7.58810112e-02 7.61672674e-02 7.64535724e-02 7.67399235e-02 7.70263181e-02 + 7.73127534e-02 7.75992267e-02 7.78857354e-02 7.81722770e-02 7.84588486e-02 + 7.87454477e-02 7.90320718e-02 7.93187181e-02 7.96053841e-02 7.98920673e-02 + 8.01787651e-02 8.04654749e-02 8.07521941e-02 8.10389204e-02 8.13256510e-02 + 8.16123836e-02 8.18991157e-02 8.21858447e-02 8.24725683e-02 8.27592839e-02 + 8.30459891e-02 8.33326815e-02 8.36193586e-02 8.39060181e-02 8.41926576e-02 + 8.44792746e-02 8.47658669e-02 8.50524319e-02 8.53389675e-02 8.56254713e-02 + 8.59119408e-02 8.61983740e-02 8.64847683e-02 8.67711216e-02 8.70574315e-02 + 8.73436959e-02 8.76299124e-02 8.79160788e-02 8.82021929e-02 8.84882524e-02 + 8.87742552e-02 8.90601991e-02 8.93460819e-02 8.96319014e-02 8.99176554e-02 + 9.02033419e-02 9.04889586e-02 9.07745035e-02 9.10599745e-02 9.13453694e-02 + 9.16306861e-02 9.19159227e-02 9.22010770e-02 9.24861469e-02 9.27711305e-02 + 9.30560257e-02 9.33408305e-02 9.36255428e-02 9.39101607e-02 9.41946823e-02 + 9.44791055e-02 9.47634283e-02 9.50476489e-02 9.53317653e-02 9.56157755e-02 + 9.58996777e-02 9.61834699e-02 9.64671503e-02 9.67507170e-02 9.70341681e-02 + 9.73175018e-02 9.76007161e-02 9.78838094e-02 9.81667797e-02 9.84496252e-02 + 9.87323442e-02 9.90149348e-02 9.92973954e-02 9.95797240e-02 9.98619190e-02 + 1.00143979e-01 1.00425901e-01 1.00707685e-01 1.00989328e-01 1.01270829e-01 + 1.01552185e-01 1.01833397e-01 1.02114461e-01 1.02395376e-01 1.02676140e-01 + 1.02956752e-01 1.03237211e-01 1.03517513e-01 1.03797659e-01 1.04077646e-01 + 1.04357473e-01 1.04637138e-01 1.04916640e-01 1.05195977e-01 1.05475147e-01 + 1.05754150e-01 1.06032982e-01 1.06311644e-01 1.06590134e-01 1.06868449e-01 + 1.07146589e-01 1.07424552e-01 1.07702336e-01 1.07979941e-01 1.08257365e-01 + 1.08534605e-01 1.08811662e-01 1.09088533e-01 1.09365218e-01 1.09641714e-01 + 1.09918020e-01 1.10194135e-01 1.10470058e-01 1.10745788e-01 1.11021322e-01 + 1.11296660e-01 1.11571800e-01 1.11846741e-01 1.12121482e-01 1.12396021e-01 + 1.12670358e-01 1.12944490e-01 1.13218418e-01 1.13492138e-01 1.13765651e-01 + 1.14038955e-01 1.14312048e-01 1.14584930e-01 1.14857599e-01 1.15130055e-01 + 1.15402295e-01 1.15674319e-01 1.15946126e-01 1.16217714e-01 1.16489083e-01 + 1.16760231e-01 1.17031157e-01 1.17301860e-01 1.17572339e-01 1.17842593e-01 + 1.18112620e-01 1.18382420e-01 1.18651992e-01 1.18921334e-01 1.19190445e-01 + 1.19459326e-01 1.19727973e-01 1.19996387e-01 1.20264566e-01 1.20532510e-01 + 1.20800216e-01 1.21067686e-01 1.21334917e-01 1.21601908e-01 1.21868658e-01 + 1.22135167e-01 1.22401434e-01 1.22667458e-01 1.22933237e-01 1.23198771e-01 + 1.23464058e-01 1.23729099e-01 1.23993892e-01 1.24258436e-01 1.24522731e-01 + 1.24786775e-01 1.25050567e-01 1.25314108e-01 1.25577395e-01 1.25840428e-01 + 1.26103207e-01 1.26365730e-01 1.26627997e-01 1.26890006e-01 1.27151758e-01 + 1.27413251e-01 1.27674484e-01 1.27935457e-01 1.28196169e-01 1.28456619e-01 + 1.28716807e-01 1.28976731e-01 1.29236391e-01 1.29495787e-01 1.29754917e-01 + 1.30013780e-01 1.30272377e-01 1.30530707e-01 1.30788768e-01 1.31046560e-01 + 1.31304083e-01 1.31561335e-01 1.31818316e-01 1.32075026e-01 1.32331463e-01 + 1.32587628e-01 1.32843519e-01 1.33099136e-01 1.33354479e-01 1.33609546e-01 + 1.33864337e-01 1.34118851e-01 1.34373088e-01 1.34627048e-01 1.34880730e-01 + 1.35134132e-01 1.35387255e-01 1.35640099e-01 1.35892661e-01 1.36144943e-01 + 1.36396943e-01 1.36648661e-01 1.36900097e-01 1.37151249e-01 1.37402118e-01 + 1.37652702e-01 1.37903003e-01 1.38153017e-01 1.38402747e-01 1.38652190e-01 + 1.38901347e-01 1.39150217e-01 1.39398799e-01 1.39647094e-01 1.39895100e-01 + 1.40142817e-01 1.40390246e-01 1.40637384e-01 1.40884233e-01 1.41130791e-01 + 1.41377059e-01 1.41623035e-01 1.41868719e-01 1.42114112e-01 1.42359212e-01 + 1.42604020e-01 1.42848534e-01 1.43092755e-01 1.43336681e-01 1.43580314e-01 + 1.43823652e-01 1.44066695e-01 1.44309444e-01 1.44551896e-01 1.44794053e-01 + 1.45035913e-01 1.45277477e-01 1.45518744e-01 1.45759714e-01 1.46000386e-01 + 1.46240761e-01 1.46480838e-01 1.46720616e-01 1.46960096e-01 1.47199277e-01 + 1.47438159e-01 1.47676742e-01 1.47915025e-01 1.48153009e-01 1.48390692e-01 + 1.48628075e-01 1.48865157e-01 1.49101939e-01 1.49338419e-01 1.49574598e-01 + 1.49810476e-01 1.50046052e-01 1.50281327e-01 1.50516299e-01 1.50750969e-01 + 1.50985337e-01 1.51219402e-01 1.51453164e-01 1.51686623e-01 1.51919779e-01 + 1.52152632e-01 1.52385181e-01 1.52617427e-01 1.52849368e-01 1.53081006e-01 + 1.53312340e-01 1.53543370e-01 1.53774095e-01 1.54004516e-01 1.54234632e-01 + 1.54464444e-01 1.54693950e-01 1.54923152e-01 1.55152049e-01 1.55380640e-01 + 1.55608926e-01 1.55836907e-01 1.56064583e-01 1.56291953e-01 1.56519017e-01 + 1.56745775e-01 1.56972228e-01 1.57198375e-01 1.57424216e-01 1.57649751e-01 + 1.57874980e-01 1.58099903e-01 1.58324520e-01 1.58548831e-01 1.58772835e-01 + 1.58996533e-01 1.59219925e-01 1.59443010e-01 1.59665790e-01 1.59888262e-01 + 1.60110429e-01 1.60332289e-01 1.60553842e-01 1.60775089e-01 1.60996030e-01 + 1.61216664e-01 1.61436992e-01 1.61657013e-01 1.61876728e-01 1.62096136e-01 + 1.62315238e-01 1.62534034e-01 1.62752523e-01 1.62970706e-01 1.63188582e-01 + 1.63406152e-01 1.63623416e-01 1.63840374e-01 1.64057026e-01 1.64273371e-01 + 1.64489411e-01 1.64705144e-01 1.64920571e-01 1.65135693e-01 1.65350508e-01 + 1.65565018e-01 1.65779222e-01 1.65993121e-01 1.66206714e-01 1.66420001e-01 + 1.66632983e-01 1.66845660e-01 1.67058031e-01 1.67270097e-01 1.67481858e-01 + 1.67693314e-01 1.67904465e-01 1.68115312e-01 1.68325854e-01 1.68536091e-01 + 1.68746023e-01 1.68955652e-01 1.69164976e-01 1.69373996e-01 1.69582712e-01 + 1.69791124e-01 1.69999232e-01 1.70207037e-01 1.70414538e-01 1.70621735e-01 + 1.70828630e-01 1.71035221e-01 1.71241510e-01 1.71447495e-01 1.71653178e-01 + 1.71858558e-01 1.72063636e-01 1.72268412e-01 1.72472886e-01 1.72677057e-01 + 1.72880927e-01 1.73084495e-01 1.73287762e-01 1.73490728e-01 1.73693392e-01 + 1.73895756e-01 1.74097819e-01 1.74299581e-01 1.74501043e-01 1.74702204e-01 + 1.74903066e-01 1.75103627e-01 1.75303889e-01 1.75503852e-01 1.75703515e-01 + 1.75902879e-01 1.76101944e-01 1.76300710e-01 1.76499178e-01 1.76697348e-01 + 1.76895219e-01 1.77092792e-01 1.77290068e-01 1.77487046e-01 1.77683727e-01 + 1.77880111e-01 1.78076198e-01 1.78271989e-01 1.78467483e-01 1.78662680e-01 + 1.78857582e-01 1.79052188e-01 1.79246498e-01 1.79440514e-01 1.79634234e-01 + 1.79827659e-01 1.80020789e-01 1.80213625e-01 1.80406167e-01 1.80598415e-01 + 1.80790370e-01 1.80982031e-01 1.81173398e-01 1.81364473e-01 1.81555255e-01 + 1.81745745e-01 1.81935942e-01 1.82125848e-01 1.82315462e-01 1.82504784e-01 + 1.82693815e-01 1.82882555e-01 1.83071004e-01 1.83259163e-01 1.83447032e-01 + 1.83634611e-01 1.83821900e-01 1.84008900e-01 1.84195611e-01 1.84382033e-01 + 1.84568166e-01 1.84754012e-01 1.84939569e-01 1.85124838e-01 1.85309820e-01 + 1.85494514e-01 1.85678922e-01 1.85863043e-01 1.86046878e-01 1.86230426e-01 + 1.86413689e-01 1.86596666e-01 1.86779358e-01 1.86961765e-01 1.87143887e-01 + 1.87325725e-01 1.87507279e-01 1.87688549e-01 1.87869536e-01 1.88050239e-01 + 1.88230659e-01 1.88410797e-01 1.88590653e-01 1.88770226e-01 1.88949518e-01 + 1.89128528e-01 1.89307257e-01 1.89485705e-01 1.89663873e-01 1.89841761e-01 + 1.90019368e-01 1.90196696e-01 1.90373745e-01 1.90550515e-01 1.90727005e-01 + 1.90903218e-01 1.91079153e-01 1.91254809e-01 1.91430189e-01 1.91605291e-01 + 1.91780116e-01 1.91954665e-01 1.92128937e-01 1.92302934e-01 1.92476655e-01 + 1.92650101e-01 1.92823272e-01 1.92996169e-01 1.93168791e-01 1.93341139e-01 + 1.93513213e-01 1.93685014e-01 1.93856543e-01 1.94027798e-01 1.94198781e-01 + 1.94369492e-01 1.94539932e-01 1.94710100e-01 1.94879997e-01 1.95049623e-01 + 1.95218979e-01 1.95388065e-01 1.95556881e-01 1.95725428e-01 1.95893706e-01 + 1.96061715e-01 1.96229455e-01 1.96396928e-01 1.96564133e-01 1.96731070e-01 + 1.96897741e-01 1.97064144e-01 1.97230282e-01 1.97396153e-01 1.97561758e-01 + 1.97727099e-01 1.97892174e-01 1.98056984e-01 1.98221530e-01 1.98385813e-01 + 1.98549831e-01 1.98713586e-01 1.98877078e-01 1.99040308e-01 1.99203275e-01 + 1.99365980e-01 1.99528424e-01 1.99690606e-01 1.99852528e-01 2.00014188e-01 + 2.00175589e-01 2.00336730e-01 2.00497611e-01 2.00658233e-01 2.00818596e-01 + 2.00978701e-01 2.01138547e-01 2.01298136e-01 2.01457467e-01 2.01616542e-01 + 2.01775359e-01 2.01933920e-01 2.02092225e-01 2.02250274e-01 2.02408068e-01 + 2.02565607e-01 2.02722891e-01 2.02879921e-01 2.03036697e-01 2.03193220e-01 + 2.03349489e-01 2.03505505e-01 2.03661269e-01 2.03816780e-01 2.03972040e-01 + 2.04127048e-01 2.04281805e-01 2.04436312e-01 2.04590568e-01 2.04744573e-01 + 2.04898329e-01 2.05051836e-01 2.05205094e-01 2.05358103e-01 2.05510864e-01 + 2.05663377e-01 2.05815642e-01 2.05967660e-01 2.06119432e-01 2.06270956e-01 + 2.06422235e-01 2.06573268e-01 2.06724055e-01 2.06874598e-01 2.07024895e-01 + 2.07174948e-01 2.07324757e-01 2.07474323e-01 2.07623645e-01 2.07772725e-01 + 2.07921561e-01 2.08070156e-01 2.08218508e-01 2.08366619e-01 2.08514489e-01 + 2.08662119e-01 2.08809507e-01 2.08956656e-01 2.09103565e-01 2.09250235e-01 + 2.09396665e-01 2.09542857e-01 2.09688811e-01 2.09834526e-01 2.09980005e-01 + 2.10125246e-01 2.10270250e-01 2.10415017e-01 2.10559549e-01 2.10703844e-01 + 2.10847905e-01 2.10991730e-01 2.11135320e-01 2.11278676e-01 2.11421799e-01 + 2.11564687e-01 2.11707342e-01 2.11849765e-01 2.11991955e-01 2.12133912e-01 + 2.12275638e-01 2.12417132e-01 2.12558395e-01 2.12699428e-01 2.12840230e-01 + 2.12980802e-01 2.13121144e-01 2.13261257e-01 2.13401141e-01 2.13540796e-01 + 2.13680223e-01 2.13819422e-01 2.13958394e-01 2.14097138e-01 2.14235656e-01 + 2.14373947e-01 2.14512011e-01 2.14649851e-01 2.14787464e-01 2.14924853e-01 + 2.15062017e-01 2.15198957e-01 2.15335672e-01 2.15472164e-01 2.15608433e-01 + 2.15744479e-01 2.15880302e-01 2.16015903e-01 2.16151282e-01 2.16286440e-01 + 2.16421376e-01 2.16556092e-01 2.16690587e-01 2.16824862e-01 2.16958918e-01 + 2.17092754e-01 2.17226371e-01 2.17359769e-01 2.17492949e-01 2.17625911e-01 + 2.17758656e-01 2.17891183e-01 2.18023493e-01 2.18155587e-01 2.18287464e-01 + 2.18419126e-01 2.18550572e-01 2.18681803e-01 2.18812819e-01 2.18943621e-01 + 2.19074208e-01 2.19204582e-01 2.19334742e-01 2.19464690e-01 2.19594424e-01 + 2.19723946e-01 2.19853257e-01 2.19982355e-01 2.20111242e-01 2.20239919e-01 + 2.20368384e-01 2.20496640e-01 2.20624685e-01 2.20752521e-01 2.20880148e-01 + 2.21007566e-01 2.21134775e-01 2.21261776e-01 2.21388569e-01 2.21515155e-01 + 2.21641533e-01 2.21767705e-01 2.21893670e-01 2.22019429e-01 2.22144983e-01 + 2.22270331e-01 2.22395473e-01 2.22520411e-01 2.22645145e-01 2.22769675e-01 + 2.22894000e-01 2.23018123e-01 2.23142042e-01 2.23265759e-01 2.23389273e-01 + 2.23512586e-01 2.23635696e-01 2.23758606e-01 2.23881314e-01 2.24003822e-01 + 2.24126129e-01 2.24248236e-01 2.24370144e-01 2.24491852e-01 2.24613362e-01 + 2.24734673e-01 2.24855785e-01 2.24976700e-01 2.25097417e-01 2.25217936e-01 + 2.25338259e-01 2.25458385e-01 2.25578315e-01 2.25698048e-01 2.25817587e-01 + 2.25936930e-01 2.26056078e-01 2.26175031e-01 2.26293790e-01 2.26412355e-01 + 2.26530727e-01 2.26648905e-01 2.26766890e-01 2.26884683e-01 2.27002283e-01 + 2.27119691e-01 2.27236908e-01 2.27353934e-01 2.27470768e-01 2.27587412e-01 + 2.27703865e-01 2.27820129e-01 2.27936203e-01 2.28052087e-01 2.28167783e-01 + 2.28283290e-01 2.28398608e-01 2.28513738e-01 2.28628681e-01 2.28743437e-01 + 2.28858005e-01 2.28972386e-01 2.29086581e-01 2.29200591e-01 2.29314414e-01 + 2.29428052e-01 2.29541504e-01 2.29654772e-01 2.29767856e-01 2.29880755e-01 + 2.29993470e-01 2.30106002e-01 2.30218351e-01 2.30330517e-01 2.30442500e-01 + 2.30554301e-01 2.30665921e-01 2.30777358e-01 2.30888614e-01 2.30999690e-01 + 2.31110584e-01 2.31221299e-01 2.31331833e-01 2.31442188e-01 2.31552363e-01 + 2.31662359e-01 2.31772176e-01 2.31881815e-01 2.31991276e-01 2.32100559e-01 + 2.32209665e-01 2.32318593e-01 2.32427344e-01 2.32535919e-01 2.32644318e-01 + 2.32752540e-01 2.32860587e-01 2.32968459e-01 2.33076155e-01 2.33183677e-01 + 2.33291025e-01 2.33398198e-01 2.33505198e-01 2.33612024e-01 2.33718676e-01 + 2.33825157e-01 2.33931464e-01 2.34037599e-01 2.34143562e-01 2.34249354e-01 + 2.34354974e-01 2.34460423e-01 2.34565702e-01 2.34670810e-01 2.34775748e-01 + 2.34880516e-01 2.34985114e-01 2.35089544e-01 2.35193804e-01 2.35297896e-01 + 2.35401819e-01 2.35505574e-01 2.35609162e-01 2.35712582e-01 2.35815835e-01 + 2.35918921e-01 2.36021841e-01 2.36124594e-01 2.36227182e-01 2.36329603e-01 + 2.36431860e-01 2.36533951e-01 2.36635878e-01 2.36737640e-01 2.36839238e-01 + 2.36940672e-01 2.37041942e-01 2.37143049e-01 2.37243994e-01 2.37344775e-01 + 2.37445394e-01 2.37545851e-01 2.37646146e-01 2.37746279e-01 2.37846251e-01 + 2.37946062e-01 2.38045713e-01 2.38145203e-01 2.38244533e-01 2.38343703e-01 + 2.38442713e-01 2.38541565e-01 2.38640257e-01 2.38738790e-01 2.38837166e-01 + 2.38935383e-01 2.39033442e-01 2.39131344e-01 2.39229088e-01 2.39326676e-01 + 2.39424106e-01 2.39521381e-01 2.39618499e-01 2.39715461e-01 2.39812268e-01 + 2.39908919e-01 2.40005416e-01 2.40101757e-01 2.40197944e-01 2.40293977e-01 + 2.40389856e-01 2.40485582e-01 2.40581154e-01 2.40676573e-01 2.40771839e-01 + 2.40866953e-01 2.40961914e-01 2.41056724e-01 2.41151382e-01 2.41245888e-01 + 2.41340243e-01 2.41434447e-01 2.41528501e-01 2.41622404e-01 2.41716158e-01 + 2.41809761e-01 2.41903215e-01 2.41996520e-01 2.42089675e-01 2.42182682e-01 + 2.42275541e-01 2.42368251e-01 2.42460813e-01 2.42553228e-01 2.42645496e-01 + 2.42737616e-01 2.42829589e-01 2.42921416e-01 2.43013097e-01 2.43104631e-01 + 2.43196020e-01 2.43287263e-01 2.43378361e-01 2.43469314e-01 2.43560122e-01 + 2.43650786e-01 2.43741306e-01 2.43831681e-01 2.43921913e-01 2.44012001e-01 + 2.44101947e-01 2.44191749e-01 2.44281409e-01 2.44370926e-01 2.44460302e-01 + 2.44549535e-01 2.44638627e-01 2.44727577e-01 2.44816386e-01 2.44905055e-01 + 2.44993583e-01 2.45081970e-01 2.45170218e-01 2.45258325e-01 2.45346293e-01 + 2.45434122e-01 2.45521812e-01 2.45609362e-01 2.45696775e-01 2.45784049e-01 + 2.45871185e-01 2.45958183e-01 2.46045043e-01 2.46131766e-01 2.46218353e-01 + 2.46304802e-01 2.46391115e-01 2.46477291e-01 2.46563332e-01 2.46649236e-01 + 2.46735006e-01 2.46820639e-01 2.46906138e-01 2.46991502e-01 2.47076731e-01 + 2.47161826e-01 2.47246787e-01 2.47331614e-01 2.47416307e-01 2.47500867e-01 + 2.47585294e-01 2.47669588e-01 2.47753749e-01 2.47837778e-01 2.47921675e-01 + 2.48005440e-01 2.48089073e-01 2.48172575e-01 2.48255945e-01 2.48339185e-01 + 2.48422294e-01 2.48505272e-01 2.48588120e-01 2.48670839e-01 2.48753427e-01 + 2.48835886e-01 2.48918215e-01 2.49000416e-01 2.49082487e-01 2.49164431e-01 + 2.49246245e-01 2.49327932e-01 2.49409490e-01 2.49490922e-01 2.49572225e-01 + 2.49653402e-01 2.49734451e-01 2.49815374e-01 2.49896170e-01 2.49976840e-01 + 2.50057384e-01 2.50137802e-01 2.50218094e-01 2.50298261e-01 2.50378303e-01 + 2.50458221e-01 2.50538013e-01 2.50617681e-01 2.50697225e-01 2.50776645e-01 + 2.50855941e-01 2.50935113e-01 2.51014162e-01 2.51093088e-01 2.51171892e-01 + 2.51250572e-01 2.51329130e-01 2.51407566e-01 2.51485880e-01 2.51564073e-01 + 2.51642143e-01 2.51720093e-01 2.51797921e-01 2.51875629e-01 2.51953216e-01 + 2.52030682e-01 2.52108028e-01 2.52185254e-01 2.52262361e-01 2.52339348e-01 + 2.52416215e-01 2.52492964e-01 2.52569593e-01 2.52646104e-01 2.52722497e-01 + 2.52798771e-01 2.52874927e-01 2.52950965e-01 2.53026886e-01 2.53102689e-01 + 2.53178375e-01 2.53253944e-01 2.53329397e-01 2.53404733e-01 2.53479952e-01 + 2.53555056e-01 2.53630043e-01 2.53704915e-01 2.53779671e-01 2.53854312e-01 + 2.53928839e-01 2.54003250e-01 2.54077546e-01 2.54151728e-01 2.54225796e-01 + 2.54299750e-01 2.54373590e-01 2.54447316e-01 2.54520930e-01 2.54594429e-01 + 2.54667816e-01 2.54741090e-01 2.54814252e-01 2.54887301e-01 2.54960238e-01 + 2.55033063e-01 2.55105776e-01 2.55178378e-01 2.55250868e-01 2.55323247e-01 + 2.55395516e-01 2.55467673e-01 2.55539720e-01 2.55611657e-01 2.55683483e-01 + 2.55755200e-01 2.55826806e-01 2.55898304e-01 2.55969692e-01 2.56040970e-01 + 2.56112140e-01 2.56183201e-01 2.56254154e-01 2.56324998e-01 2.56395734e-01 + 2.56466362e-01 2.56536882e-01 2.56607295e-01 2.56677600e-01 2.56747798e-01 + 2.56817889e-01 2.56887874e-01 2.56957752e-01 2.57027523e-01 2.57097188e-01 + 2.57166747e-01 2.57236200e-01 2.57305548e-01 2.57374790e-01 2.57443927e-01 + 2.57512959e-01 2.57581886e-01 2.57650709e-01 2.57719427e-01 2.57788040e-01 + 2.57856550e-01 2.57924955e-01 2.57993257e-01 2.58061455e-01 2.58129550e-01 + 2.58197542e-01 2.58265431e-01 2.58333217e-01 2.58400900e-01 2.58468481e-01 + 2.58535960e-01 2.58603336e-01 2.58670611e-01 2.58737784e-01 2.58804856e-01 + 2.58871826e-01 2.58938695e-01 2.59005463e-01 2.59072131e-01 2.59138697e-01 + 2.59205164e-01 2.59271530e-01 2.59337796e-01 2.59403962e-01 2.59470029e-01 + 2.59535996e-01 2.59601864e-01 2.59667633e-01 2.59733302e-01 2.59798873e-01 + 2.59864345e-01 2.59929719e-01 2.59994995e-01 2.60060172e-01 2.60125252e-01 + 2.60190234e-01 2.60255118e-01 2.60319905e-01 2.60384595e-01 2.60449188e-01 + 2.60513684e-01 2.60578083e-01 2.60642386e-01 2.60706593e-01 2.60770703e-01 + 2.60834718e-01 2.60898636e-01 2.60962459e-01 2.61026187e-01 2.61089819e-01 + 2.61153356e-01 2.61216799e-01 2.61280146e-01 2.61343399e-01 2.61406557e-01 + 2.61469622e-01 2.61532592e-01 2.61595468e-01 2.61658250e-01 2.61720939e-01 + 2.61783535e-01 2.61846037e-01 2.61908446e-01 2.61970763e-01 2.62032986e-01 + 2.62095117e-01 2.62157156e-01 2.62219102e-01 2.62280956e-01 2.62342719e-01 + 2.62404389e-01 2.62465968e-01 2.62527456e-01 2.62588852e-01 2.62650158e-01 + 2.62711372e-01 2.62772496e-01 2.62833529e-01 2.62894471e-01 2.62955324e-01 + 2.63016086e-01 2.63076758e-01 2.63137341e-01 2.63197833e-01 2.63258237e-01 + 2.63318551e-01 2.63378776e-01 2.63438912e-01 2.63498959e-01 2.63558918e-01 + 2.63618788e-01 2.63678569e-01 2.63738263e-01 2.63797868e-01 2.63857386e-01 + 2.63916816e-01 2.63976158e-01 2.64035413e-01 2.64094581e-01 2.64153661e-01 + 2.64212655e-01 2.64271562e-01 2.64330382e-01 2.64389116e-01 2.64447763e-01 + 2.64506324e-01 2.64564800e-01 2.64623189e-01 2.64681493e-01 2.64739711e-01 + 2.64797844e-01 2.64855892e-01 2.64913854e-01 2.64971732e-01 2.65029524e-01 + 2.65087233e-01 2.65144856e-01 2.65202396e-01 2.65259851e-01 2.65317222e-01 + 2.65374509e-01 2.65431713e-01 2.65488833e-01 2.65545869e-01 2.65602822e-01 + 2.65659692e-01 2.65716480e-01 2.65773184e-01 2.65829805e-01 2.65886344e-01 + 2.65942801e-01 2.65999175e-01 2.66055468e-01 2.66111678e-01 2.66167806e-01 + 2.66223853e-01 2.66279819e-01 2.66335703e-01 2.66391505e-01 2.66447227e-01 + 2.66502868e-01 2.66558427e-01 2.66613907e-01 2.66669305e-01 2.66724624e-01 + 2.66779862e-01 2.66835020e-01 2.66890098e-01 2.66945096e-01 2.67000015e-01 + 2.67054854e-01 2.67109613e-01 2.67164294e-01 2.67218895e-01 2.67273418e-01 + 2.67327861e-01 2.67382226e-01 2.67436512e-01 2.67490720e-01 2.67544850e-01 + 2.67598902e-01 2.67652875e-01 2.67706771e-01 2.67760589e-01 2.67814330e-01 + 2.67867993e-01 2.67921578e-01 2.67975087e-01 2.68028519e-01 2.68081873e-01 + 2.68135151e-01 2.68188352e-01 2.68241477e-01 2.68294526e-01 2.68347498e-01 + 2.68400394e-01 2.68453214e-01 2.68505959e-01 2.68558628e-01 2.68611221e-01 + 2.68663738e-01 2.68716181e-01 2.68768548e-01 2.68820841e-01 2.68873058e-01 + 2.68925201e-01 2.68977269e-01 2.69029263e-01 2.69081182e-01 2.69133027e-01 + 2.69184798e-01 2.69236495e-01 2.69288118e-01 2.69339668e-01 2.69391143e-01 + 2.69442546e-01 2.69493875e-01 2.69545131e-01 2.69596314e-01 2.69647424e-01 + 2.69698461e-01 2.69749425e-01 2.69800317e-01 2.69851137e-01 2.69901884e-01 + 2.69952559e-01 2.70003162e-01 2.70053693e-01 2.70104153e-01 2.70154540e-01 + 2.70204856e-01 2.70255101e-01 2.70305274e-01 2.70355377e-01 2.70405408e-01 + 2.70455368e-01 2.70505258e-01 2.70555077e-01 2.70604825e-01 2.70654503e-01 + 2.70704110e-01 2.70753648e-01 2.70803115e-01 2.70852513e-01 2.70901840e-01 + 2.70951098e-01 2.71000287e-01 2.71049406e-01 2.71098455e-01 2.71147436e-01 + 2.71196347e-01 2.71245190e-01 2.71293963e-01 2.71342668e-01 2.71391304e-01 + 2.71439872e-01 2.71488372e-01 2.71536803e-01 2.71585166e-01 2.71633461e-01 + 2.71681688e-01 2.71729848e-01 2.71777939e-01 2.71825964e-01 2.71873921e-01 + 2.71921810e-01 2.71969632e-01 2.72017388e-01 2.72065076e-01 2.72112698e-01 + 2.72160252e-01 2.72207741e-01 2.72255162e-01 2.72302518e-01 2.72349807e-01 + 2.72397030e-01 2.72444187e-01 2.72491278e-01 2.72538303e-01 2.72585263e-01 + 2.72632157e-01 2.72678985e-01 2.72725748e-01 2.72772446e-01 2.72819079e-01 + 2.72865647e-01 2.72912150e-01 2.72958588e-01 2.73004962e-01 2.73051271e-01 + 2.73097516e-01 2.73143696e-01 2.73189812e-01 2.73235864e-01 2.73281852e-01 + 2.73327776e-01 2.73373636e-01 2.73419432e-01 2.73465166e-01 2.73510835e-01 + 2.73556441e-01 2.73601984e-01 2.73647464e-01 2.73692881e-01 2.73738235e-01 + 2.73783526e-01 2.73828755e-01 2.73873921e-01 2.73919024e-01 2.73964065e-01 + 2.74009044e-01 2.74053961e-01 2.74098815e-01 2.74143608e-01 2.74188339e-01 + 2.74233008e-01 2.74277616e-01 2.74322162e-01 2.74366646e-01 2.74411070e-01 + 2.74455432e-01 2.74499733e-01 2.74543973e-01 2.74588152e-01 2.74632270e-01 + 2.74676328e-01 2.74720325e-01 2.74764262e-01 2.74808138e-01 2.74851954e-01 + 2.74895710e-01 2.74939406e-01 2.74983042e-01 2.75026618e-01 2.75070135e-01 + 2.75113591e-01 2.75156988e-01 2.75200326e-01 2.75243604e-01 2.75286824e-01 + 2.75329984e-01 2.75373085e-01 2.75416127e-01 2.75459110e-01 2.75502034e-01 + 2.75544900e-01 2.75587707e-01 2.75630456e-01 2.75673147e-01 2.75715779e-01 + 2.75758353e-01 2.75800869e-01 2.75843328e-01 2.75885728e-01 2.75928070e-01 + 2.75970355e-01 2.76012583e-01 2.76054753e-01 2.76096866e-01 2.76138921e-01 + 2.76180919e-01 2.76222860e-01 2.76264745e-01 2.76306572e-01 2.76348342e-01 + 2.76390056e-01 2.76431714e-01 2.76473315e-01 2.76514859e-01 2.76556347e-01 + 2.76597779e-01 2.76639155e-01 2.76680475e-01 2.76721739e-01 2.76762947e-01 + 2.76804100e-01 2.76845197e-01 2.76886238e-01 2.76927224e-01 2.76968154e-01 + 2.77009030e-01 2.77049850e-01 2.77090615e-01 2.77131325e-01 2.77171980e-01 + 2.77212581e-01 2.77253126e-01 2.77293617e-01 2.77334054e-01 2.77374436e-01 + 2.77414764e-01 2.77455038e-01 2.77495257e-01 2.77535423e-01 2.77575534e-01 + 2.77615592e-01 2.77655596e-01 2.77695546e-01 2.77735443e-01 2.77775286e-01 + 2.77815076e-01 2.77854812e-01 2.77894495e-01 2.77934125e-01 2.77973702e-01 + 2.78013226e-01 2.78052697e-01 2.78092115e-01 2.78131481e-01 2.78170794e-01 + 2.78210054e-01 2.78249262e-01 2.78288418e-01 2.78327521e-01 2.78366572e-01 + 2.78405571e-01 2.78444519e-01 2.78483414e-01 2.78522257e-01 2.78561049e-01 + 2.78599789e-01 2.78638477e-01 2.78677114e-01 2.78715700e-01 2.78754234e-01 + 2.78792717e-01 2.78831149e-01 2.78869530e-01 2.78907859e-01 2.78946138e-01 + 1.03953624e+00 1.03772749e+00 1.03592023e+00 1.03411445e+00 1.03231016e+00 + 1.03050735e+00 1.02870603e+00 1.02690620e+00 1.02510785e+00 1.02331100e+00 + 1.02151562e+00 1.01972174e+00 1.01792935e+00 1.01613844e+00 1.01434902e+00 + 1.01256110e+00 1.01077466e+00 1.00898971e+00 1.00720626e+00 1.00542429e+00 + 1.00364382e+00 1.00186484e+00 1.00008735e+00 9.98311355e-01 9.96536852e-01 + 9.94763842e-01 9.92992326e-01 9.91222304e-01 9.89453777e-01 9.87686744e-01 + 9.85921207e-01 9.84157165e-01 9.82394619e-01 9.80633570e-01 9.78874017e-01 + 9.77115962e-01 9.75359404e-01 9.73604344e-01 9.71850782e-01 9.70098719e-01 + 9.68348155e-01 9.66599090e-01 9.64851525e-01 9.63105460e-01 9.61360895e-01 + 9.59617832e-01 9.57876269e-01 9.56136208e-01 9.54397649e-01 9.52660593e-01 + 9.50925039e-01 9.49190988e-01 9.47458441e-01 9.45727397e-01 9.43997858e-01 + 9.42269823e-01 9.40543293e-01 9.38818268e-01 9.37094749e-01 9.35372736e-01 + 9.33652230e-01 9.31933230e-01 9.30215737e-01 9.28499752e-01 9.26785274e-01 + 9.25072305e-01 9.23360844e-01 9.21650893e-01 9.19942450e-01 9.18235517e-01 + 9.16530094e-01 9.14826182e-01 9.13123780e-01 9.11422890e-01 9.09723511e-01 + 9.08025644e-01 9.06329289e-01 9.04634446e-01 9.02941117e-01 9.01249300e-01 + 8.99558998e-01 8.97870209e-01 8.96182935e-01 8.94497176e-01 8.92812931e-01 + 8.91130202e-01 8.89448989e-01 8.87769292e-01 8.86091112e-01 8.84414448e-01 + 8.82739302e-01 8.81065673e-01 8.79393562e-01 8.77722970e-01 8.76053896e-01 + 8.74386341e-01 8.72720306e-01 8.71055790e-01 8.69392795e-01 8.67731320e-01 + 8.66071366e-01 8.64412932e-01 8.62756021e-01 8.61100631e-01 8.59446764e-01 + 8.57794419e-01 8.56143597e-01 8.54494298e-01 8.52846523e-01 8.51200272e-01 + 8.49555545e-01 8.47912343e-01 8.46270666e-01 8.44630515e-01 8.42991889e-01 + 8.41354789e-01 8.39719216e-01 8.38085170e-01 8.36452650e-01 8.34821658e-01 + 8.33192195e-01 8.31564259e-01 8.29937852e-01 8.28312973e-01 8.26689624e-01 + 8.25067805e-01 8.23447515e-01 8.21828756e-01 8.20211528e-01 8.18595830e-01 + 8.16981664e-01 8.15369029e-01 8.13757927e-01 8.12148357e-01 8.10540319e-01 + 8.08933815e-01 8.07328844e-01 8.05725406e-01 8.04123503e-01 8.02523135e-01 + 8.00924301e-01 7.99327002e-01 7.97731239e-01 7.96137011e-01 7.94544320e-01 + 7.92953165e-01 7.91363547e-01 7.89775466e-01 7.88188923e-01 7.86603918e-01 + 7.85020450e-01 7.83438522e-01 7.81858132e-01 7.80279281e-01 7.78701970e-01 + 7.77126199e-01 7.75551968e-01 7.73979278e-01 7.72408129e-01 7.70838521e-01 + 7.69270454e-01 7.67703930e-01 7.66138947e-01 7.64575508e-01 7.63013611e-01 + 7.61453258e-01 7.59894448e-01 7.58337182e-01 7.56781460e-01 7.55227283e-01 + 7.53674651e-01 7.52123565e-01 7.50574024e-01 7.49026029e-01 7.47479580e-01 + 7.45934678e-01 7.44391322e-01 7.42849514e-01 7.41309254e-01 7.39770542e-01 + 7.38233378e-01 7.36697762e-01 7.35163696e-01 7.33631179e-01 7.32100211e-01 + 7.30570794e-01 7.29042926e-01 7.27516610e-01 7.25991844e-01 7.24468629e-01 + 7.22946966e-01 7.21426855e-01 7.19908297e-01 7.18391291e-01 7.16875837e-01 + 7.15361937e-01 7.13849591e-01 7.12338798e-01 7.10829560e-01 7.09321876e-01 + 7.07815747e-01 7.06311174e-01 7.04808155e-01 7.03306693e-01 7.01806787e-01 + 7.00308437e-01 6.98811644e-01 6.97316408e-01 6.95822730e-01 6.94330610e-01 + 6.92840047e-01 6.91351043e-01 6.89863598e-01 6.88377712e-01 6.86893385e-01 + 6.85410618e-01 6.83929411e-01 6.82449765e-01 6.80971679e-01 6.79495154e-01 + 6.78020190e-01 6.76546789e-01 6.75074949e-01 6.73604671e-01 6.72135956e-01 + 6.70668804e-01 6.69203215e-01 6.67739189e-01 6.66276728e-01 6.64815830e-01 + 6.63356498e-01 6.61898730e-01 6.60442527e-01 6.58987889e-01 6.57534818e-01 + 6.56083312e-01 6.54633373e-01 6.53185001e-01 6.51738195e-01 6.50292957e-01 + 6.48849287e-01 6.47407184e-01 6.45966650e-01 6.44527685e-01 6.43090288e-01 + 6.41654460e-01 6.40220202e-01 6.38787514e-01 6.37356396e-01 6.35926849e-01 + 6.34498872e-01 6.33072467e-01 6.31647633e-01 6.30224370e-01 6.28802680e-01 + 6.27382561e-01 6.25964016e-01 6.24547043e-01 6.23131644e-01 6.21717818e-01 + 6.20305566e-01 6.18894889e-01 6.17485785e-01 6.16078257e-01 6.14672303e-01 + 6.13267925e-01 6.11865123e-01 6.10463897e-01 6.09064247e-01 6.07666173e-01 + 6.06269677e-01 6.04874758e-01 6.03481416e-01 6.02089652e-01 6.00699467e-01 + 5.99310859e-01 5.97923831e-01 5.96538381e-01 5.95154511e-01 5.93772221e-01 + 5.92391510e-01 5.91012380e-01 5.89634830e-01 5.88258861e-01 5.86884473e-01 + 5.85511667e-01 5.84140442e-01 5.82770800e-01 5.81402740e-01 5.80036262e-01 + 5.78671367e-01 5.77308056e-01 5.75946328e-01 5.74586184e-01 5.73227624e-01 + 5.71870649e-01 5.70515258e-01 5.69161453e-01 5.67809232e-01 5.66458597e-01 + 5.65109548e-01 5.63762086e-01 5.62416210e-01 5.61071920e-01 5.59729218e-01 + 5.58388103e-01 5.57048576e-01 5.55710636e-01 5.54374285e-01 5.53039523e-01 + 5.51706349e-01 5.50374764e-01 5.49044769e-01 5.47716364e-01 5.46389548e-01 + 5.45064323e-01 5.43740689e-01 5.42418645e-01 5.41098192e-01 5.39779331e-01 + 5.38462062e-01 5.37146385e-01 5.35832299e-01 5.34519807e-01 5.33208907e-01 + 5.31899601e-01 5.30591888e-01 5.29285769e-01 5.27981244e-01 5.26678313e-01 + 5.25376977e-01 5.24077235e-01 5.22779089e-01 5.21482538e-01 5.20187583e-01 + 5.18894224e-01 5.17602461e-01 5.16312295e-01 5.15023726e-01 5.13736754e-01 + 5.12451379e-01 5.11167602e-01 5.09885423e-01 5.08604843e-01 5.07325861e-01 + 5.06048477e-01 5.04772693e-01 5.03498508e-01 5.02225923e-01 5.00954938e-01 + 4.99685553e-01 4.98417769e-01 4.97151585e-01 4.95887003e-01 4.94624021e-01 + 4.93362642e-01 4.92102864e-01 4.90844689e-01 4.89588116e-01 4.88333145e-01 + 4.87079778e-01 4.85828014e-01 4.84577853e-01 4.83329297e-01 4.82082344e-01 + 4.80836996e-01 4.79593252e-01 4.78351114e-01 4.77110580e-01 4.75871652e-01 + 4.74634330e-01 4.73398614e-01 4.72164504e-01 4.70932001e-01 4.69701104e-01 + 4.68471815e-01 4.67244132e-01 4.66018058e-01 4.64793591e-01 4.63570733e-01 + 4.62349483e-01 4.61129842e-01 4.59911810e-01 4.58695387e-01 4.57480573e-01 + 4.56267369e-01 4.55055776e-01 4.53845792e-01 4.52637419e-01 4.51430658e-01 + 4.50225507e-01 4.49021967e-01 4.47820039e-01 4.46619724e-01 4.45421020e-01 + 4.44223928e-01 4.43028450e-01 4.41834584e-01 4.40642332e-01 4.39451693e-01 + 4.38262668e-01 4.37075256e-01 4.35889459e-01 4.34705277e-01 4.33522709e-01 + 4.32341757e-01 4.31162420e-01 4.29984698e-01 4.28808592e-01 4.27634102e-01 + 4.26461229e-01 4.25289972e-01 4.24120332e-01 4.22952310e-01 4.21785904e-01 + 4.20621116e-01 4.19457946e-01 4.18296395e-01 4.17136461e-01 4.15978147e-01 + 4.14821451e-01 4.13666374e-01 4.12512917e-01 4.11361080e-01 4.10210862e-01 + 4.09062265e-01 4.07915288e-01 4.06769932e-01 4.05626197e-01 4.04484083e-01 + 4.03343590e-01 4.02204719e-01 4.01067470e-01 3.99931844e-01 3.98797839e-01 + 3.97665458e-01 3.96534699e-01 3.95405564e-01 3.94278052e-01 3.93152164e-01 + 3.92027900e-01 3.90905259e-01 3.89784244e-01 3.88664853e-01 3.87547087e-01 + 3.86430946e-01 3.85316431e-01 3.84203541e-01 3.83092278e-01 3.81982640e-01 + 3.80874629e-01 3.79768245e-01 3.78663487e-01 3.77560357e-01 3.76458854e-01 + 3.75358979e-01 3.74260731e-01 3.73164112e-01 3.72069121e-01 3.70975759e-01 + 3.69884025e-01 3.68793921e-01 3.67705446e-01 3.66618601e-01 3.65533385e-01 + 3.64449799e-01 3.63367844e-01 3.62287520e-01 3.61208826e-01 3.60131763e-01 + 3.59056331e-01 3.57982531e-01 3.56910363e-01 3.55839826e-01 3.54770922e-01 + 3.53703650e-01 3.52638011e-01 3.51574005e-01 3.50511632e-01 3.49450892e-01 + 3.48391786e-01 3.47334314e-01 3.46278476e-01 3.45224272e-01 3.44171703e-01 + 3.43120769e-01 3.42071469e-01 3.41023805e-01 3.39977776e-01 3.38933384e-01 + 3.37890627e-01 3.36849506e-01 3.35810021e-01 3.34772174e-01 3.33735963e-01 + 3.32701389e-01 3.31668453e-01 3.30637154e-01 3.29607493e-01 3.28579470e-01 + 3.27553085e-01 3.26528339e-01 3.25505231e-01 3.24483762e-01 3.23463933e-01 + 3.22445743e-01 3.21429192e-01 3.20414282e-01 3.19401011e-01 3.18389381e-01 + 3.17379391e-01 3.16371042e-01 3.15364334e-01 3.14359267e-01 3.13355841e-01 + 3.12354057e-01 3.11353915e-01 3.10355415e-01 3.09358557e-01 3.08363342e-01 + 3.07369770e-01 3.06377840e-01 3.05387554e-01 3.04398911e-01 3.03411912e-01 + 3.02426556e-01 3.01442845e-01 3.00460777e-01 2.99480355e-01 2.98501577e-01 + 2.97524444e-01 2.96548956e-01 2.95575113e-01 2.94602916e-01 2.93632365e-01 + 2.92663460e-01 2.91696201e-01 2.90730589e-01 2.89766623e-01 2.88804304e-01 + 2.87843632e-01 2.86884607e-01 2.85927230e-01 2.84971501e-01 2.84017420e-01 + 2.83064986e-01 2.82114201e-01 2.81165065e-01 2.80217578e-01 2.79271739e-01 + 2.78327550e-01 2.77385010e-01 2.76444119e-01 2.75504879e-01 2.74567288e-01 + 2.73631348e-01 2.72697059e-01 2.71764419e-01 2.70833431e-01 2.69904094e-01 + 2.68976408e-01 2.68050374e-01 2.67125991e-01 2.66203261e-01 2.65282182e-01 + 2.64362756e-01 2.63444982e-01 2.62528861e-01 2.61614393e-01 2.60701578e-01 + 2.59790416e-01 2.58880908e-01 2.57973054e-01 2.57066853e-01 2.56162307e-01 + 2.55259415e-01 2.54358178e-01 2.53458595e-01 2.52560668e-01 2.51664395e-01 + 2.50769778e-01 2.49876816e-01 2.48985511e-01 2.48095861e-01 2.47207867e-01 + 2.46321530e-01 2.45436849e-01 2.44553825e-01 2.43672457e-01 2.42792747e-01 + 2.41914695e-01 2.41038300e-01 2.40163562e-01 2.39290483e-01 2.38419061e-01 + 2.37549298e-01 2.36681193e-01 2.35814748e-01 2.34949961e-01 2.34086833e-01 + 2.33225364e-01 2.32365555e-01 2.31507405e-01 2.30650916e-01 2.29796086e-01 + 2.28942916e-01 2.28091407e-01 2.27241559e-01 2.26393372e-01 2.25546845e-01 + 2.24701980e-01 2.23858776e-01 2.23017233e-01 2.22177352e-01 2.21339134e-01 + 2.20502577e-01 2.19667682e-01 2.18834451e-01 2.18002881e-01 2.17172975e-01 + 2.16344732e-01 2.15518152e-01 2.14693235e-01 2.13869982e-01 2.13048393e-01 + 2.12228468e-01 2.11410207e-01 2.10593610e-01 2.09778678e-01 2.08965410e-01 + 2.08153807e-01 2.07343870e-01 2.06535598e-01 2.05728991e-01 2.04924049e-01 + 2.04120774e-01 2.03319164e-01 2.02519221e-01 2.01720944e-01 2.00924334e-01 + 2.00129390e-01 1.99336113e-01 1.98544503e-01 1.97754560e-01 1.96966285e-01 + 1.96179677e-01 1.95394737e-01 1.94611465e-01 1.93829861e-01 1.93049925e-01 + 1.92271658e-01 1.91495059e-01 1.90720129e-01 1.89946869e-01 1.89175277e-01 + 1.88405354e-01 1.87637101e-01 1.86870518e-01 1.86105605e-01 1.85342361e-01 + 1.84580788e-01 1.83820885e-01 1.83062653e-01 1.82306091e-01 1.81551200e-01 + 1.80797980e-01 1.80046431e-01 1.79296554e-01 1.78548348e-01 1.77801814e-01 + 1.77056952e-01 1.76313762e-01 1.75572244e-01 1.74832398e-01 1.74094225e-01 + 1.73357725e-01 1.72622897e-01 1.71889743e-01 1.71158261e-01 1.70428453e-01 + 1.69700319e-01 1.68973858e-01 1.68249071e-01 1.67525958e-01 1.66804519e-01 + 1.66084755e-01 1.65366665e-01 1.64650249e-01 1.63935509e-01 1.63222443e-01 + 1.62511053e-01 1.61801338e-01 1.61093298e-01 1.60386934e-01 1.59682246e-01 + 1.58979233e-01 1.58277897e-01 1.57578237e-01 1.56880253e-01 1.56183946e-01 + 1.55489316e-01 1.54796362e-01 1.54105086e-01 1.53415486e-01 1.52727564e-01 + 1.52041320e-01 1.51356753e-01 1.50673864e-01 1.49992653e-01 1.49313120e-01 + 1.48635265e-01 1.47959088e-01 1.47284591e-01 1.46611771e-01 1.45940631e-01 + 1.45271170e-01 1.44603388e-01 1.43937285e-01 1.43272862e-01 1.42610118e-01 + 1.41949054e-01 1.41289670e-01 1.40631966e-01 1.39975942e-01 1.39321598e-01 + 1.38668935e-01 1.38017953e-01 1.37368652e-01 1.36721031e-01 1.36075091e-01 + 1.35430833e-01 1.34788256e-01 1.34147361e-01 1.33508147e-01 1.32870615e-01 + 1.32234765e-01 1.31600597e-01 1.30968111e-01 1.30337308e-01 1.29708187e-01 + 1.29080749e-01 1.28454994e-01 1.27830921e-01 1.27208532e-01 1.26587826e-01 + 1.25968803e-01 1.25351464e-01 1.24735808e-01 1.24121836e-01 1.23509548e-01 + 1.22898944e-01 1.22290024e-01 1.21682789e-01 1.21077238e-01 1.20473372e-01 + 1.19871190e-01 1.19270693e-01 1.18671881e-01 1.18074755e-01 1.17479313e-01 + 1.16885558e-01 1.16293487e-01 1.15703102e-01 1.15114403e-01 1.14527390e-01 + 1.13942064e-01 1.13358423e-01 1.12776468e-01 1.12196200e-01 1.11617619e-01 + 1.11040725e-01 1.10465517e-01 1.09891996e-01 1.09320162e-01 1.08750016e-01 + 1.08181557e-01 1.07614785e-01 1.07049701e-01 1.06486305e-01 1.05924597e-01 + 1.05364577e-01 1.04806244e-01 1.04249601e-01 1.03694645e-01 1.03141378e-01 + 1.02589800e-01 1.02039910e-01 1.01491709e-01 1.00945198e-01 1.00400375e-01 + 9.98572416e-02 9.93157976e-02 9.87760431e-02 9.82379782e-02 9.77016030e-02 + 9.71669178e-02 9.66339224e-02 9.61026172e-02 9.55730022e-02 9.50450776e-02 + 9.45188434e-02 9.39942997e-02 9.34714468e-02 9.29502847e-02 9.24308135e-02 + 9.19130333e-02 9.13969443e-02 9.08825466e-02 9.03698403e-02 8.98588255e-02 + 8.93495023e-02 8.88418708e-02 8.83359312e-02 8.78316836e-02 8.73291281e-02 + 8.68282647e-02 8.63290937e-02 8.58316150e-02 8.53358290e-02 8.48417355e-02 + 8.43493348e-02 8.38586270e-02 8.33696121e-02 8.28822904e-02 8.23966618e-02 + 8.19127265e-02 8.14304847e-02 8.09499364e-02 8.04710817e-02 7.99939207e-02 + 7.95184537e-02 7.90446805e-02 7.85726014e-02 7.81022165e-02 7.76335259e-02 + 7.71665296e-02 7.67012279e-02 7.62376207e-02 7.57757082e-02 7.53154905e-02 + 7.48569677e-02 7.44001400e-02 7.39450073e-02 7.34915699e-02 7.30398277e-02 + 7.25897810e-02 7.21414298e-02 7.16947743e-02 7.12498144e-02 7.08065504e-02 + 7.03649822e-02 6.99251102e-02 6.94869342e-02 6.90504544e-02 6.86156710e-02 + 6.81825840e-02 6.77511935e-02 6.73214996e-02 6.68935024e-02 6.64672020e-02 + 6.60425985e-02 6.56196920e-02 6.51984826e-02 6.47789704e-02 6.43611555e-02 + 6.39450379e-02 6.35306178e-02 6.31178953e-02 6.27068704e-02 6.22975433e-02 + 6.18899141e-02 6.14839827e-02 6.10797494e-02 6.06772142e-02 6.02763772e-02 + 5.98772385e-02 5.94797982e-02 5.90840564e-02 5.86900131e-02 5.82976685e-02 + 5.79070227e-02 5.75180757e-02 5.71308276e-02 5.67452785e-02 5.63614285e-02 + 5.59792777e-02 5.55988261e-02 5.52200739e-02 5.48430212e-02 5.44676679e-02 + 5.40940143e-02 5.37220604e-02 5.33518062e-02 5.29832520e-02 5.26163976e-02 + 5.22512433e-02 5.18877891e-02 5.15260351e-02 5.11659814e-02 5.08076280e-02 + 5.04509751e-02 5.00960227e-02 4.97427708e-02 4.93912197e-02 4.90413693e-02 + 4.86932198e-02 4.83467711e-02 4.80020235e-02 4.76589769e-02 4.73176315e-02 + 4.69779873e-02 4.66400444e-02 4.63038029e-02 4.59692628e-02 4.56364243e-02 + 4.53052874e-02 4.49758521e-02 4.46481186e-02 4.43220870e-02 4.39977572e-02 + 4.36751294e-02 4.33542037e-02 4.30349801e-02 4.27174587e-02 4.24016395e-02 + 4.20875227e-02 4.17751083e-02 4.14643964e-02 4.11553870e-02 4.08480802e-02 + 4.05424762e-02 4.02385749e-02 3.99363764e-02 3.96358808e-02 3.93370881e-02 + 3.90399985e-02 3.87446120e-02 3.84509287e-02 3.81589486e-02 3.78686718e-02 + 3.75800983e-02 3.72932283e-02 3.70080618e-02 3.67245988e-02 3.64428394e-02 + 3.61627838e-02 3.58844318e-02 3.56077837e-02 3.53328395e-02 3.50595992e-02 + 3.47880629e-02 3.45182306e-02 3.42501025e-02 3.39836786e-02 3.37189589e-02 + 3.34559435e-02 3.31946324e-02 3.29350258e-02 3.26771236e-02 3.24209260e-02 + 3.21664330e-02 3.19136446e-02 3.16625610e-02 3.14131821e-02 3.11655080e-02 + 3.09195388e-02 3.06752746e-02 3.04327153e-02 3.01918611e-02 2.99527120e-02 + 2.97152680e-02 2.94795292e-02 2.92454957e-02 2.90131675e-02 2.87825447e-02 + 2.85536273e-02 2.83264153e-02 2.81009089e-02 2.78771081e-02 2.76550128e-02 + 2.74346233e-02 2.72159395e-02 2.69989614e-02 2.67836892e-02 2.65701228e-02 + 2.63582623e-02 2.61481079e-02 2.59396594e-02 2.57329170e-02 2.55278807e-02 + 2.53245505e-02 2.51229266e-02 2.49230089e-02 2.47247975e-02 2.45282924e-02 + 2.43334937e-02 2.41404014e-02 2.39490156e-02 2.37593363e-02 2.35713636e-02 + 2.33850975e-02 2.32005380e-02 2.30176851e-02 2.28365390e-02 2.26570997e-02 + 2.24793672e-02 2.23033415e-02 2.21290227e-02 2.19564108e-02 2.17855059e-02 + 2.16163080e-02 2.14488171e-02 2.12830333e-02 2.11189566e-02 2.09565871e-02 + 2.07959248e-02 2.06369696e-02 2.04797218e-02 2.03241812e-02 2.01703480e-02 + 2.00182221e-02 1.98678037e-02 1.97190927e-02 1.95720891e-02 1.94267931e-02 + 1.92832045e-02 1.91413236e-02 1.90011502e-02 1.88626845e-02 1.87259265e-02 + 1.85908761e-02 1.84575335e-02 1.83258986e-02 1.81959715e-02 1.80677522e-02 + 1.79412408e-02 1.78164372e-02 1.76933415e-02 1.75719538e-02 1.74522740e-02 + 1.73343022e-02 1.72180384e-02 1.71034827e-02 1.69906350e-02 1.68794954e-02 + 1.67700639e-02 1.66623405e-02 1.65563253e-02 1.64520183e-02 1.63494195e-02 + 1.62485289e-02 1.61493466e-02 1.60518726e-02 1.59561068e-02 1.58620494e-02 + 1.57697003e-02 1.56790596e-02 1.55901273e-02 1.55029034e-02 1.54173879e-02 + 1.53335808e-02 1.52514822e-02 1.51710921e-02 1.50924105e-02 1.50154374e-02 + 1.49401728e-02 1.48666168e-02 1.47947694e-02 1.47246305e-02 1.46562002e-02 + 1.45894786e-02 1.45244656e-02 1.44611612e-02 1.43995655e-02 1.43396785e-02 + 1.42815001e-02 1.42250305e-02 1.41702695e-02 1.41172173e-02 1.40658738e-02 + 1.40162391e-02 1.39683132e-02 1.39220960e-02 1.38775876e-02 1.38347880e-02 + 1.37936971e-02 1.37543151e-02 1.37166420e-02 1.36806776e-02 1.36464221e-02 + 1.36138754e-02 1.35830376e-02 1.35539086e-02 1.35264885e-02 1.35007773e-02 + 1.34767750e-02 1.34544815e-02 1.34338969e-02 1.34150212e-02 1.33978544e-02 + 1.33823966e-02 1.33686476e-02 1.33566075e-02 1.33462763e-02 1.33376541e-02 + 1.33307407e-02 1.33255363e-02 1.33220408e-02 1.33202542e-02 1.33201765e-02 + 1.33218078e-02 1.33251480e-02 1.33301970e-02 1.33369550e-02 1.33454220e-02 + 1.33555978e-02 1.33674825e-02 1.33810762e-02 1.33963787e-02 1.34133902e-02 + 1.34321105e-02 1.34525397e-02 1.34746779e-02 1.34985249e-02 1.35240808e-02 + 1.35513455e-02 1.35803192e-02 1.36110016e-02 1.36433930e-02 1.36774932e-02 + 1.37133022e-02 1.37508200e-02 1.37900467e-02 1.38309822e-02 1.38736265e-02 + 1.39179796e-02 1.39640414e-02 1.40118121e-02 1.40612914e-02 1.41124796e-02 + 1.41653765e-02 1.42199821e-02 1.42762964e-02 1.43343194e-02 1.43940512e-02 + 1.44554916e-02 1.45186406e-02 1.45834983e-02 1.46500646e-02 1.47183396e-02 + 1.47883231e-02 1.48600153e-02 1.49334160e-02 1.50085252e-02 1.50853430e-02 + 1.51638693e-02 1.52441041e-02 1.53260474e-02 1.54096992e-02 1.54950594e-02 + 1.55821280e-02 1.56709051e-02 1.57613905e-02 1.58535843e-02 1.59474864e-02 + 1.60430969e-02 1.61404156e-02 1.62394427e-02 1.63401780e-02 1.64426215e-02 + 1.65467732e-02 1.66526331e-02 1.67602012e-02 1.68694775e-02 1.69804618e-02 + 1.70931542e-02 1.72075547e-02 1.73236633e-02 1.74414798e-02 1.75610043e-02 + 1.76822368e-02 1.78051772e-02 1.79298256e-02 1.80561818e-02 1.81842458e-02 + 1.83140177e-02 1.84454973e-02 1.85786847e-02 1.87135798e-02 1.88501827e-02 + 1.89884931e-02 1.91285113e-02 1.92702370e-02 1.94136703e-02 1.95588111e-02 + 1.97056595e-02 1.98542153e-02 2.00044786e-02 2.01564492e-02 2.03101272e-02 + 2.04655126e-02 2.06226053e-02 2.07814052e-02 2.09419123e-02 2.11041267e-02 + 2.12680482e-02 2.14336768e-02 2.16010125e-02 2.17700553e-02 2.19408050e-02 + 2.21132617e-02 2.22874254e-02 2.24632959e-02 2.26408733e-02 2.28201575e-02 + 2.30011484e-02 2.31838461e-02 2.33682505e-02 2.35543615e-02 2.37421791e-02 + 2.39317033e-02 2.41229339e-02 2.43158711e-02 2.45105147e-02 2.47068647e-02 + 2.49049210e-02 2.51046836e-02 2.53061524e-02 2.55093275e-02 2.57142087e-02 + 2.59207960e-02 2.61290894e-02 2.63390888e-02 2.65507942e-02 2.67642055e-02 + 2.69793227e-02 2.71961457e-02 2.74146744e-02 2.76349090e-02 2.78568491e-02 + 2.80804949e-02 2.83058463e-02 2.85329032e-02 2.87616656e-02 2.89921334e-02 + 2.92243066e-02 2.94581851e-02 2.96937689e-02 2.99310578e-02 3.01700520e-02 + 3.04107512e-02 3.06531555e-02 3.08972648e-02 3.11430790e-02 3.13905981e-02 + 3.16398220e-02 3.18907507e-02 3.21433841e-02 3.23977222e-02 3.26537648e-02 + 3.29115120e-02 3.31709637e-02 3.34321199e-02 3.36949803e-02 3.39595451e-02 + 3.42258142e-02 3.44937874e-02 3.47634647e-02 3.50348461e-02 3.53079315e-02 + 3.55827209e-02 3.58592141e-02 3.61374112e-02 3.64173120e-02 3.66989165e-02 + 3.69822246e-02 3.72672363e-02 3.75539515e-02 3.78423701e-02 3.81324920e-02 + 3.84243173e-02 3.87178458e-02 3.90130775e-02 3.93100123e-02 3.96086502e-02 + 3.99089910e-02 4.02110347e-02 4.05147812e-02 4.08202305e-02 4.11273825e-02 + 4.14362371e-02 4.17467942e-02 4.20590539e-02 4.23730160e-02 4.26886804e-02 + 4.30060471e-02 4.33251159e-02 4.36458870e-02 4.39683600e-02 4.42925351e-02 + 4.46184120e-02 4.49459908e-02 4.52752714e-02 4.56062536e-02 4.59389375e-02 + 4.62733229e-02 4.66094097e-02 4.69471980e-02 4.72866875e-02 4.76278783e-02 + 4.79707703e-02 4.83153633e-02 4.86616573e-02 4.90096522e-02 4.93593480e-02 + 4.97107446e-02 5.00638418e-02 5.04186396e-02 5.07751380e-02 5.11333368e-02 + 5.14932360e-02 5.18548354e-02 5.22181351e-02 5.25831349e-02 5.29498347e-02 + 5.33182344e-02 5.36883341e-02 5.40601335e-02 5.44336326e-02 5.48088313e-02 + 5.51857296e-02 5.55643273e-02 5.59446244e-02 5.63266207e-02 5.67103163e-02 + 5.70957109e-02 5.74828046e-02 5.78715972e-02 5.82620886e-02 5.86542788e-02 + 5.90481677e-02 5.94437551e-02 5.98410410e-02 6.02400253e-02 6.06407080e-02 + 6.10430888e-02 6.14471678e-02 6.18529447e-02 6.22604197e-02 6.26695925e-02 + 6.30804630e-02 6.34930312e-02 6.39072970e-02 6.43232602e-02 6.47409209e-02 + 6.51602788e-02 6.55813340e-02 6.60040862e-02 6.64285354e-02 6.68546816e-02 + 6.72825245e-02 6.77120642e-02 6.81433005e-02 6.85762333e-02 6.90108625e-02 + 6.94471881e-02 6.98852099e-02 7.03249278e-02 7.07663417e-02 7.12094516e-02 + 7.16542573e-02 7.21007588e-02 7.25489558e-02 7.29988484e-02 7.34504365e-02 + 7.39037198e-02 7.43586984e-02 7.48153721e-02 7.52737408e-02 7.57338044e-02 + 7.61955628e-02 7.66590160e-02 7.71241637e-02 7.75910059e-02 7.80595425e-02 + 7.85297734e-02 7.90016985e-02 7.94753177e-02 7.99506308e-02 8.04276378e-02 + 8.09063385e-02 8.13867329e-02 8.18688208e-02 8.23526021e-02 8.28380768e-02 + 8.33252446e-02 8.38141056e-02 8.43046595e-02 8.47969063e-02 8.52908459e-02 + 8.57864782e-02 8.62838029e-02 8.67828201e-02 8.72835297e-02 8.77859314e-02 + 8.82900252e-02 8.87958110e-02 8.93032887e-02 8.98124581e-02 9.03233191e-02 + 9.08358717e-02 9.13501157e-02 9.18660509e-02 9.23836774e-02 9.29029949e-02 + 9.34240033e-02 9.39467025e-02 9.44710925e-02 9.49971730e-02 9.55249440e-02 + 9.60544054e-02 9.65855570e-02 9.71183987e-02 9.76529303e-02 9.81891519e-02 + 9.87270632e-02 9.92666641e-02 9.98079545e-02 1.00350934e-01 1.00895603e-01 + 1.01441962e-01 1.01990009e-01 1.02539745e-01 1.03091170e-01 1.03644283e-01 + 1.04199085e-01 1.04755576e-01 1.05313754e-01 1.05873621e-01 1.06435176e-01 + 1.06998419e-01 1.07563349e-01 1.08129968e-01 1.08698273e-01 1.09268266e-01 + 1.09839947e-01 1.10413314e-01 1.10988368e-01 1.11565110e-01 1.12143538e-01 + 1.12723652e-01 1.13305453e-01 1.13888941e-01 1.14474115e-01 1.15060974e-01 + 1.15649520e-01 1.16239751e-01 1.16831669e-01 1.17425271e-01 1.18020560e-01 + 1.18617533e-01 1.19216192e-01 1.19816535e-01 1.20418564e-01 1.21022277e-01 + 1.21627675e-01 1.22234757e-01 1.22843524e-01 1.23453975e-01 1.24066109e-01 + 1.24679928e-01 1.25295431e-01 1.25912617e-01 1.26531487e-01 1.27152040e-01 + 1.27774276e-01 1.28398196e-01 1.29023798e-01 1.29651083e-01 1.30280051e-01 + 1.30910702e-01 1.31543034e-01 1.32177050e-01 1.32812747e-01 1.33450126e-01 + 1.34089187e-01 1.34729929e-01 1.35372353e-01 1.36016459e-01 1.36662246e-01 + 1.37309713e-01 1.37958862e-01 1.38609692e-01 1.39262202e-01 1.39916393e-01 + 1.40572264e-01 1.41229815e-01 1.41889046e-01 1.42549958e-01 1.43212549e-01 + 1.43876819e-01 1.44542770e-01 1.45210399e-01 1.45879708e-01 1.46550695e-01 + 1.47223362e-01 1.47897707e-01 1.48573731e-01 1.49251433e-01 1.49930814e-01 + 1.50611872e-01 1.51294609e-01 1.51979023e-01 1.52665115e-01 1.53352885e-01 + 1.54042332e-01 1.54733456e-01 1.55426257e-01 1.56120735e-01 1.56816890e-01 + 1.57514721e-01 1.58214229e-01 1.58915413e-01 1.59618273e-01 1.60322809e-01 + 1.61029020e-01 1.61736908e-01 1.62446471e-01 1.63157709e-01 1.63870622e-01 + 1.64585210e-01 1.65301473e-01 1.66019411e-01 1.66739023e-01 1.67460310e-01 + 1.68183271e-01 1.68907906e-01 1.69634214e-01 1.70362197e-01 1.71091853e-01 + 1.71823182e-01 1.72556184e-01 1.73290860e-01 1.74027208e-01 1.74765229e-01 + 1.75504923e-01 1.76246289e-01 1.76989327e-01 1.77734037e-01 1.78480419e-01 + 1.79228473e-01 1.79978199e-01 1.80729595e-01 1.81482663e-01 1.82237402e-01 + 1.82993812e-01 1.83751893e-01 1.84511644e-01 1.85273065e-01 1.86036157e-01 + 1.86800919e-01 1.87567350e-01 1.88335451e-01 1.89105222e-01 1.89876662e-01 + 1.90649771e-01 1.91424549e-01 1.92200996e-01 1.92979112e-01 1.93758896e-01 + 1.94540348e-01 1.95323469e-01 1.96108257e-01 1.96894713e-01 1.97682837e-01 + 1.98472628e-01 1.99264087e-01 2.00057212e-01 2.00852004e-01 2.01648463e-01 + 2.02446589e-01 2.03246381e-01 2.04047839e-01 2.04850963e-01 2.05655753e-01 + 2.06462208e-01 2.07270329e-01 2.08080115e-01 2.08891567e-01 2.09704683e-01 + 2.10519464e-01 2.11335909e-01 2.12154019e-01 2.12973793e-01 2.13795231e-01 + 2.14618333e-01 2.15443098e-01 2.16269527e-01 2.17097619e-01 2.17927374e-01 + 2.18758792e-01 2.19591873e-01 2.20426616e-01 2.21263022e-01 2.22101090e-01 + 2.22940819e-01 2.23782211e-01 2.24625264e-01 2.25469978e-01 2.26316354e-01 + 2.27164390e-01 2.28014088e-01 2.28865446e-01 2.29718464e-01 2.30573143e-01 + 2.31429482e-01 2.32287480e-01 2.33147139e-01 2.34008457e-01 2.34871434e-01 + 2.35736070e-01 2.36602365e-01 2.37470319e-01 2.38339931e-01 2.39211202e-01 + 2.40084131e-01 2.40958717e-01 2.41834962e-01 2.42712864e-01 2.43592423e-01 + 2.44473640e-01 2.45356513e-01 2.46241044e-01 2.47127230e-01 2.48015074e-01 + 2.48904573e-01 2.49795728e-01 2.50688539e-01 2.51583006e-01 2.52479128e-01 + 2.53376905e-01 2.54276337e-01 2.55177424e-01 2.56080166e-01 2.56984562e-01 + 2.57890612e-01 2.58798316e-01 2.59707674e-01 2.60618685e-01 2.61531350e-01 + 2.62445667e-01 2.63361638e-01 2.64279262e-01 2.65198538e-01 2.66119466e-01 + 2.67042047e-01 2.67966279e-01 2.68892164e-01 2.69819699e-01 2.70748886e-01 + 2.71679724e-01 2.72612213e-01 2.73546353e-01 2.74482143e-01 2.75419584e-01 + 2.76358674e-01 2.77299415e-01 2.78241805e-01 2.79185844e-01 2.80131533e-01 + 2.81078870e-01 2.82027857e-01 2.82978492e-01 2.83930775e-01 2.84884707e-01 + 2.85840287e-01 2.86797514e-01 2.87756389e-01 2.88716911e-01 2.89679080e-01 + 2.90642896e-01 2.91608359e-01 2.92575468e-01 2.93544224e-01 2.94514625e-01 + 2.95486673e-01 2.96460366e-01 2.97435704e-01 2.98412687e-01 2.99391316e-01 + 3.00371589e-01 3.01353507e-01 3.02337069e-01 3.03322275e-01 3.04309125e-01 + 3.05297618e-01 3.06287755e-01 3.07279535e-01 3.08272958e-01 3.09268024e-01 + 3.10264733e-01 3.11263084e-01 3.12263076e-01 3.13264711e-01 3.14267987e-01 + 3.15272905e-01 3.16279464e-01 3.17287664e-01 3.18297505e-01 3.19308986e-01 + 3.20322108e-01 3.21336869e-01 3.22353271e-01 3.23371312e-01 3.24390992e-01 + 3.25412312e-01 3.26435271e-01 3.27459868e-01 3.28486104e-01 3.29513978e-01 + 3.30543490e-01 3.31574640e-01 3.32607428e-01 3.33641852e-01 3.34677914e-01 + 3.35715613e-01 3.36754949e-01 3.37795921e-01 3.38838529e-01 3.39882774e-01 + 3.40928653e-01 3.41976169e-01 3.43025320e-01 3.44076105e-01 3.45128526e-01 + 3.46182581e-01 3.47238271e-01 3.48295594e-01 3.49354552e-01 3.50415143e-01 + 3.51477368e-01 3.52541225e-01 3.53606716e-01 3.54673839e-01 3.55742595e-01 + 3.56812983e-01 3.57885003e-01 3.58958655e-01 3.60033939e-01 3.61110853e-01 + 3.62189399e-01 3.63269575e-01 3.64351382e-01 3.65434820e-01 3.66519887e-01 + 3.67606584e-01 3.68694911e-01 3.69784868e-01 3.70876453e-01 3.71969667e-01 + 3.73064510e-01 3.74160981e-01 3.75259081e-01 3.76358808e-01 3.77460163e-01 + 3.78563145e-01 3.79667755e-01 3.80773992e-01 3.81881855e-01 3.82991344e-01 + 3.84102460e-01 3.85215202e-01 3.86329570e-01 3.87445563e-01 3.88563181e-01 + 3.89682424e-01 3.90803292e-01 3.91925784e-01 3.93049901e-01 3.94175642e-01 + 3.95303006e-01 3.96431994e-01 3.97562605e-01 3.98694839e-01 3.99828696e-01 + 4.00964175e-01 4.02101276e-01 4.03240000e-01 4.04380345e-01 4.05522312e-01 + 4.06665899e-01 4.07811108e-01 4.08957938e-01 4.10106388e-01 4.11256458e-01 + 4.12408148e-01 4.13561458e-01 4.14716388e-01 4.15872936e-01 4.17031104e-01 + 4.18190890e-01 4.19352295e-01 4.20515317e-01 4.21679958e-01 4.22846216e-01 + 4.24014092e-01 4.25183585e-01 4.26354695e-01 4.27527421e-01 4.28701764e-01 + 4.29877723e-01 4.31055298e-01 4.32234488e-01 4.33415294e-01 4.34597715e-01 + 4.35781751e-01 4.36967401e-01 4.38154665e-01 4.39343544e-01 4.40534036e-01 + 4.41726142e-01 4.42919861e-01 4.44115193e-01 4.45312138e-01 4.46510695e-01 + 4.47710864e-01 4.48912645e-01 4.50116038e-01 4.51321043e-01 4.52527658e-01 + 4.53735885e-01 4.54945722e-01 4.56157169e-01 4.57370226e-01 4.58584894e-01 + 4.59801170e-01 4.61019056e-01 4.62238551e-01 4.63459655e-01 4.64682367e-01 + 4.65906688e-01 4.67132616e-01 4.68360152e-01 4.69589295e-01 4.70820046e-01 + 4.72052403e-01 4.73286367e-01 4.74521937e-01 4.75759113e-01 4.76997895e-01 + 4.78238283e-01 4.79480276e-01 4.80723873e-01 4.81969076e-01 4.83215882e-01 + 4.84464293e-01 4.85714308e-01 4.86965926e-01 4.88219148e-01 4.89473972e-01 + 4.90730400e-01 4.91988430e-01 4.93248062e-01 4.94509296e-01 4.95772131e-01 + 4.97036568e-01 4.98302606e-01 4.99570245e-01 5.00839485e-01 5.02110324e-01 + 5.03382764e-01 5.04656804e-01 5.05932442e-01 5.07209680e-01 5.08488517e-01 + 5.09768953e-01 5.11050986e-01 5.12334618e-01 5.13619847e-01 5.14906674e-01 + 5.16195098e-01 5.17485119e-01 5.18776737e-01 5.20069951e-01 5.21364761e-01 + 5.22661167e-01 5.23959168e-01 5.25258764e-01 5.26559955e-01 5.27862741e-01 + 5.29167122e-01 5.30473096e-01 5.31780664e-01 5.33089826e-01 5.34400580e-01 + 5.35712928e-01 5.37026868e-01 5.38342401e-01 5.39659526e-01 5.40978242e-01 + 5.42298550e-01 5.43620449e-01 5.44943939e-01 5.46269020e-01 5.47595691e-01 + 5.48923952e-01 5.50253802e-01 5.51585242e-01 5.52918272e-01 5.54252890e-01 + 5.55589096e-01 5.56926891e-01 5.58266274e-01 5.59607245e-01 5.60949803e-01 + 5.62293948e-01 5.63639680e-01 5.64986999e-01 5.66335903e-01 5.67686394e-01 + 5.69038470e-01 5.70392132e-01 5.71747378e-01 5.73104210e-01 5.74462626e-01 + 5.75822626e-01 5.77184210e-01 5.78547377e-01 5.79912128e-01 5.81278461e-01 + 5.82646378e-01 5.84015876e-01 5.85386957e-01 5.86759620e-01 5.88133864e-01 + 5.89509689e-01 5.90887095e-01 5.92266082e-01 5.93646649e-01 5.95028796e-01 + 5.96412522e-01 5.97797828e-01 5.99184713e-01 6.00573177e-01 6.01963219e-01 + 6.03354840e-01 6.04748038e-01 6.06142814e-01 6.07539167e-01 6.08937097e-01 + 6.10336603e-01 6.11737686e-01 6.13140346e-01 6.14544580e-01 6.15950391e-01 + 6.17357776e-01 6.18766736e-01 6.20177271e-01 6.21589379e-01 6.23003062e-01 + 6.24418319e-01 6.25835148e-01 6.27253551e-01 6.28673526e-01 6.30095073e-01 + 6.31518193e-01 6.32942884e-01 6.34369147e-01 6.35796981e-01 6.37226386e-01 + 6.38657361e-01 6.40089906e-01 6.41524022e-01 6.42959706e-01 6.44396960e-01 + 6.45835783e-01 6.47276175e-01 6.48718135e-01 6.50161663e-01 6.51606758e-01 + 6.53053421e-01 6.54501651e-01 6.55951448e-01 6.57402811e-01 6.58855740e-01 + 6.60310236e-01 6.61766296e-01 6.63223922e-01 6.64683112e-01 6.66143868e-01 + 6.67606187e-01 6.69070070e-01 6.70535517e-01 6.72002527e-01 6.73471100e-01 + 6.74941236e-01 6.76412934e-01 6.77886194e-01 6.79361015e-01 6.80837398e-01 + 1.19316516e-02 1.17837661e-02 1.16368916e-02 1.14910312e-02 1.13461881e-02 + 1.12023652e-02 1.10595657e-02 1.09177924e-02 1.07770486e-02 1.06373371e-02 + 1.04986608e-02 1.03610229e-02 1.02244262e-02 1.00888736e-02 9.95436796e-03 + 9.82091227e-03 9.68850936e-03 9.55716205e-03 9.42687318e-03 9.29764555e-03 + 9.16948195e-03 9.04238514e-03 8.91635788e-03 8.79140288e-03 8.66752287e-03 + 8.54472052e-03 8.42299850e-03 8.30235947e-03 8.18280604e-03 8.06434082e-03 + 7.94696640e-03 7.83068535e-03 7.71550020e-03 7.60141348e-03 7.48842769e-03 + 7.37654531e-03 7.26576880e-03 7.15610060e-03 7.04754311e-03 6.94009874e-03 + 6.83376985e-03 6.72855879e-03 6.62446789e-03 6.52149946e-03 6.41965576e-03 + 6.31893907e-03 6.21935162e-03 6.12089562e-03 6.02357326e-03 5.92738670e-03 + 5.83233810e-03 5.73842957e-03 5.64566320e-03 5.55404108e-03 5.46356524e-03 + 5.37423772e-03 5.28606051e-03 5.19903560e-03 5.11316493e-03 5.02845043e-03 + 4.94489402e-03 4.86249756e-03 4.78126291e-03 4.70119191e-03 4.62228636e-03 + 4.54454803e-03 4.46797870e-03 4.39258007e-03 4.31835387e-03 4.24530177e-03 + 4.17342543e-03 4.10272646e-03 4.03320649e-03 3.96486708e-03 3.89770979e-03 + 3.83173614e-03 3.76694764e-03 3.70334576e-03 3.64093194e-03 3.57970760e-03 + 3.51967415e-03 3.46083296e-03 3.40318535e-03 3.34673266e-03 3.29147617e-03 + 3.23741715e-03 3.18455682e-03 3.13289641e-03 3.08243708e-03 3.03318001e-03 + 2.98512631e-03 2.93827709e-03 2.89263342e-03 2.84819635e-03 2.80496690e-03 + 2.76294607e-03 2.72213481e-03 2.68253407e-03 2.64414475e-03 2.60696775e-03 + 2.57100391e-03 2.53625406e-03 2.50271900e-03 2.47039951e-03 2.43929633e-03 + 2.40941017e-03 2.38074173e-03 2.35329167e-03 2.32706061e-03 2.30204917e-03 + 2.27825792e-03 2.25568742e-03 2.23433817e-03 2.21421068e-03 2.19530540e-03 + 2.17762279e-03 2.16116324e-03 2.14592713e-03 2.13191482e-03 2.11912664e-03 + 2.10756286e-03 2.09722378e-03 2.08810961e-03 2.08022058e-03 2.07355687e-03 + 2.06811863e-03 2.06390598e-03 2.06091903e-03 2.05915784e-03 2.05862245e-03 + 2.05931288e-03 2.06122911e-03 2.06437109e-03 2.06873876e-03 2.07433201e-03 + 2.08115071e-03 2.08919471e-03 2.09846382e-03 2.10895782e-03 2.12067647e-03 + 2.13361950e-03 2.14778662e-03 2.16317748e-03 2.17979175e-03 2.19762903e-03 + 2.21668892e-03 2.23697097e-03 2.25847471e-03 2.28119965e-03 2.30514526e-03 + 2.33031099e-03 2.35669626e-03 2.38430046e-03 2.41312296e-03 2.44316308e-03 + 2.47442014e-03 2.50689342e-03 2.54058217e-03 2.57548561e-03 2.61160294e-03 + 2.64893333e-03 2.68747592e-03 2.72722982e-03 2.76819412e-03 2.81036787e-03 + 2.85375012e-03 2.89833986e-03 2.94413606e-03 2.99113769e-03 3.03934365e-03 + 3.08875285e-03 3.13936416e-03 3.19117640e-03 3.24418841e-03 3.29839896e-03 + 3.35380682e-03 3.41041071e-03 3.46820936e-03 3.52720143e-03 3.58738558e-03 + 3.64876043e-03 3.71132460e-03 3.77507665e-03 3.84001514e-03 3.90613858e-03 + 3.97344547e-03 4.04193428e-03 4.11160346e-03 4.18245143e-03 4.25447658e-03 + 4.32767727e-03 4.40205185e-03 4.47759865e-03 4.55431593e-03 4.63220199e-03 + 4.71125505e-03 4.79147333e-03 4.87285502e-03 4.95539830e-03 5.03910129e-03 + 5.12396213e-03 5.20997890e-03 5.29714966e-03 5.38547247e-03 5.47494535e-03 + 5.56556628e-03 5.65733324e-03 5.75024419e-03 5.84429703e-03 5.93948968e-03 + 6.03582001e-03 6.13328588e-03 6.23188511e-03 6.33161551e-03 6.43247487e-03 + 6.53446095e-03 6.63757148e-03 6.74180419e-03 6.84715676e-03 6.95362687e-03 + 7.06121216e-03 7.16991026e-03 7.27971878e-03 7.39063530e-03 7.50265737e-03 + 7.61578255e-03 7.73000833e-03 7.84533223e-03 7.96175172e-03 8.07926424e-03 + 8.19786724e-03 8.31755813e-03 8.43833428e-03 8.56019309e-03 8.68313189e-03 + 8.80714802e-03 8.93223879e-03 9.05840148e-03 9.18563337e-03 9.31393170e-03 + 9.44329371e-03 9.57371661e-03 9.70519759e-03 9.83773382e-03 9.97132246e-03 + 1.01059606e-02 1.02416455e-02 1.03783741e-02 1.05161435e-02 1.06549508e-02 + 1.07947931e-02 1.09356673e-02 1.10775705e-02 1.12204997e-02 1.13644517e-02 + 1.15094237e-02 1.16554125e-02 1.18024151e-02 1.19504282e-02 1.20994490e-02 + 1.22494741e-02 1.24005005e-02 1.25525250e-02 1.27055444e-02 1.28595555e-02 + 1.30145552e-02 1.31705401e-02 1.33275071e-02 1.34854528e-02 1.36443741e-02 + 1.38042677e-02 1.39651301e-02 1.41269582e-02 1.42897485e-02 1.44534978e-02 + 1.46182027e-02 1.47838598e-02 1.49504657e-02 1.51180170e-02 1.52865103e-02 + 1.54559422e-02 1.56263093e-02 1.57976080e-02 1.59698349e-02 1.61429866e-02 + 1.63170596e-02 1.64920502e-02 1.66679551e-02 1.68447707e-02 1.70224935e-02 + 1.72011198e-02 1.73806462e-02 1.75610691e-02 1.77423848e-02 1.79245899e-02 + 1.81076806e-02 1.82916533e-02 1.84765045e-02 1.86622305e-02 1.88488276e-02 + 1.90362922e-02 1.92246206e-02 1.94138091e-02 1.96038541e-02 1.97947518e-02 + 1.99864985e-02 2.01790905e-02 2.03725242e-02 2.05667957e-02 2.07619013e-02 + 2.09578372e-02 2.11545998e-02 2.13521852e-02 2.15505896e-02 2.17498093e-02 + 2.19498405e-02 2.21506794e-02 2.23523222e-02 2.25547650e-02 2.27580040e-02 + 2.29620355e-02 2.31668555e-02 2.33724603e-02 2.35788460e-02 2.37860087e-02 + 2.39939446e-02 2.42026499e-02 2.44121205e-02 2.46223528e-02 2.48333427e-02 + 2.50450864e-02 2.52575801e-02 2.54708198e-02 2.56848016e-02 2.58995216e-02 + 2.61149759e-02 2.63311606e-02 2.65480717e-02 2.67657054e-02 2.69840578e-02 + 2.72031248e-02 2.74229026e-02 2.76433871e-02 2.78645746e-02 2.80864610e-02 + 2.83090425e-02 2.85323149e-02 2.87562745e-02 2.89809172e-02 2.92062390e-02 + 2.94322361e-02 2.96589045e-02 2.98862402e-02 3.01142392e-02 3.03428976e-02 + 3.05722114e-02 3.08021766e-02 3.10327893e-02 3.12640455e-02 3.14959413e-02 + 3.17284726e-02 3.19616355e-02 3.21954260e-02 3.24298402e-02 3.26648740e-02 + 3.29005236e-02 3.31367848e-02 3.33736539e-02 3.36111267e-02 3.38491993e-02 + 3.40878677e-02 3.43271281e-02 3.45669763e-02 3.48074084e-02 3.50484206e-02 + 3.52900087e-02 3.55321689e-02 3.57748971e-02 3.60181895e-02 3.62620420e-02 + 3.65064508e-02 3.67514117e-02 3.69969210e-02 3.72429746e-02 3.74895686e-02 + 3.77366991e-02 3.79843621e-02 3.82325537e-02 3.84812698e-02 3.87305067e-02 + 3.89802604e-02 3.92305269e-02 3.94813024e-02 3.97325829e-02 3.99843644e-02 + 4.02366431e-02 4.04894151e-02 4.07426765e-02 4.09964234e-02 4.12506518e-02 + 4.15053579e-02 4.17605378e-02 4.20161876e-02 4.22723034e-02 4.25288815e-02 + 4.27859178e-02 4.30434086e-02 4.33013499e-02 4.35597380e-02 4.38185689e-02 + 4.40778389e-02 4.43375441e-02 4.45976807e-02 4.48582449e-02 4.51192328e-02 + 4.53806406e-02 4.56424645e-02 4.59047007e-02 4.61673455e-02 4.64303950e-02 + 4.66938455e-02 4.69576932e-02 4.72219342e-02 4.74865650e-02 4.77515816e-02 + 4.80169804e-02 4.82827576e-02 4.85489095e-02 4.88154324e-02 4.90823225e-02 + 4.93495761e-02 4.96171896e-02 4.98851592e-02 5.01534812e-02 5.04221520e-02 + 5.06911679e-02 5.09605252e-02 5.12302202e-02 5.15002494e-02 5.17706091e-02 + 5.20412956e-02 5.23123054e-02 5.25836347e-02 5.28552801e-02 5.31272378e-02 + 5.33995044e-02 5.36720762e-02 5.39449496e-02 5.42181211e-02 5.44915872e-02 + 5.47653442e-02 5.50393887e-02 5.53137171e-02 5.55883259e-02 5.58632116e-02 + 5.61383707e-02 5.64137997e-02 5.66894951e-02 5.69654535e-02 5.72416713e-02 + 5.75181451e-02 5.77948716e-02 5.80718471e-02 5.83490684e-02 5.86265320e-02 + 5.89042345e-02 5.91821725e-02 5.94603427e-02 5.97387415e-02 6.00173658e-02 + 6.02962120e-02 6.05752770e-02 6.08545573e-02 6.11340496e-02 6.14137506e-02 + 6.16936570e-02 6.19737655e-02 6.22540729e-02 6.25345758e-02 6.28152709e-02 + 6.30961552e-02 6.33772252e-02 6.36584778e-02 6.39399097e-02 6.42215178e-02 + 6.45032988e-02 6.47852496e-02 6.50673669e-02 6.53496477e-02 6.56320887e-02 + 6.59146868e-02 6.61974389e-02 6.64803419e-02 6.67633926e-02 6.70465880e-02 + 6.73299249e-02 6.76134004e-02 6.78970112e-02 6.81807545e-02 6.84646270e-02 + 6.87486259e-02 6.90327480e-02 6.93169904e-02 6.96013501e-02 6.98858240e-02 + 7.01704093e-02 7.04551029e-02 7.07399019e-02 7.10248033e-02 7.13098043e-02 + 7.15949019e-02 7.18800932e-02 7.21653753e-02 7.24507453e-02 7.27362004e-02 + 7.30217377e-02 7.33073544e-02 7.35930475e-02 7.38788144e-02 7.41646521e-02 + 7.44505580e-02 7.47365291e-02 7.50225627e-02 7.53086561e-02 7.55948066e-02 + 7.58810112e-02 7.61672674e-02 7.64535724e-02 7.67399235e-02 7.70263181e-02 + 7.73127534e-02 7.75992267e-02 7.78857354e-02 7.81722770e-02 7.84588486e-02 + 7.87454477e-02 7.90320718e-02 7.93187181e-02 7.96053841e-02 7.98920673e-02 + 8.01787651e-02 8.04654749e-02 8.07521941e-02 8.10389204e-02 8.13256510e-02 + 8.16123836e-02 8.18991157e-02 8.21858447e-02 8.24725683e-02 8.27592839e-02 + 8.30459891e-02 8.33326815e-02 8.36193586e-02 8.39060181e-02 8.41926576e-02 + 8.44792746e-02 8.47658669e-02 8.50524319e-02 8.53389675e-02 8.56254713e-02 + 8.59119408e-02 8.61983740e-02 8.64847683e-02 8.67711216e-02 8.70574315e-02 + 8.73436959e-02 8.76299124e-02 8.79160788e-02 8.82021929e-02 8.84882524e-02 + 8.87742552e-02 8.90601991e-02 8.93460819e-02 8.96319014e-02 8.99176554e-02 + 9.02033419e-02 9.04889586e-02 9.07745035e-02 9.10599745e-02 9.13453694e-02 + 9.16306861e-02 9.19159227e-02 9.22010770e-02 9.24861469e-02 9.27711305e-02 + 9.30560257e-02 9.33408305e-02 9.36255428e-02 9.39101607e-02 9.41946823e-02 + 9.44791055e-02 9.47634283e-02 9.50476489e-02 9.53317653e-02 9.56157755e-02 + 9.58996777e-02 9.61834699e-02 9.64671503e-02 9.67507170e-02 9.70341681e-02 + 9.73175018e-02 9.76007161e-02 9.78838094e-02 9.81667797e-02 9.84496252e-02 + 9.87323442e-02 9.90149348e-02 9.92973954e-02 9.95797240e-02 9.98619190e-02 + 1.00143979e-01 1.00425901e-01 1.00707685e-01 1.00989328e-01 1.01270829e-01 + 1.01552185e-01 1.01833397e-01 1.02114461e-01 1.02395376e-01 1.02676140e-01 + 1.02956752e-01 1.03237211e-01 1.03517513e-01 1.03797659e-01 1.04077646e-01 + 1.04357473e-01 1.04637138e-01 1.04916640e-01 1.05195977e-01 1.05475147e-01 + 1.05754150e-01 1.06032982e-01 1.06311644e-01 1.06590134e-01 1.06868449e-01 + 1.07146589e-01 1.07424552e-01 1.07702336e-01 1.07979941e-01 1.08257365e-01 + 1.08534605e-01 1.08811662e-01 1.09088533e-01 1.09365218e-01 1.09641714e-01 + 1.09918020e-01 1.10194135e-01 1.10470058e-01 1.10745788e-01 1.11021322e-01 + 1.11296660e-01 1.11571800e-01 1.11846741e-01 1.12121482e-01 1.12396021e-01 + 1.12670358e-01 1.12944490e-01 1.13218418e-01 1.13492138e-01 1.13765651e-01 + 1.14038955e-01 1.14312048e-01 1.14584930e-01 1.14857599e-01 1.15130055e-01 + 1.15402295e-01 1.15674319e-01 1.15946126e-01 1.16217714e-01 1.16489083e-01 + 1.16760231e-01 1.17031157e-01 1.17301860e-01 1.17572339e-01 1.17842593e-01 + 1.18112620e-01 1.18382420e-01 1.18651992e-01 1.18921334e-01 1.19190445e-01 + 1.19459326e-01 1.19727973e-01 1.19996387e-01 1.20264566e-01 1.20532510e-01 + 1.20800216e-01 1.21067686e-01 1.21334917e-01 1.21601908e-01 1.21868658e-01 + 1.22135167e-01 1.22401434e-01 1.22667458e-01 1.22933237e-01 1.23198771e-01 + 1.23464058e-01 1.23729099e-01 1.23993892e-01 1.24258436e-01 1.24522731e-01 + 1.24786775e-01 1.25050567e-01 1.25314108e-01 1.25577395e-01 1.25840428e-01 + 1.26103207e-01 1.26365730e-01 1.26627997e-01 1.26890006e-01 1.27151758e-01 + 1.27413251e-01 1.27674484e-01 1.27935457e-01 1.28196169e-01 1.28456619e-01 + 1.28716807e-01 1.28976731e-01 1.29236391e-01 1.29495787e-01 1.29754917e-01 + 1.30013780e-01 1.30272377e-01 1.30530707e-01 1.30788768e-01 1.31046560e-01 + 1.31304083e-01 1.31561335e-01 1.31818316e-01 1.32075026e-01 1.32331463e-01 + 1.32587628e-01 1.32843519e-01 1.33099136e-01 1.33354479e-01 1.33609546e-01 + 1.33864337e-01 1.34118851e-01 1.34373088e-01 1.34627048e-01 1.34880730e-01 + 1.35134132e-01 1.35387255e-01 1.35640099e-01 1.35892661e-01 1.36144943e-01 + 1.36396943e-01 1.36648661e-01 1.36900097e-01 1.37151249e-01 1.37402118e-01 + 1.37652702e-01 1.37903003e-01 1.38153017e-01 1.38402747e-01 1.38652190e-01 + 1.38901347e-01 1.39150217e-01 1.39398799e-01 1.39647094e-01 1.39895100e-01 + 1.40142817e-01 1.40390246e-01 1.40637384e-01 1.40884233e-01 1.41130791e-01 + 1.41377059e-01 1.41623035e-01 1.41868719e-01 1.42114112e-01 1.42359212e-01 + 1.42604020e-01 1.42848534e-01 1.43092755e-01 1.43336681e-01 1.43580314e-01 + 1.43823652e-01 1.44066695e-01 1.44309444e-01 1.44551896e-01 1.44794053e-01 + 1.45035913e-01 1.45277477e-01 1.45518744e-01 1.45759714e-01 1.46000386e-01 + 1.46240761e-01 1.46480838e-01 1.46720616e-01 1.46960096e-01 1.47199277e-01 + 1.47438159e-01 1.47676742e-01 1.47915025e-01 1.48153009e-01 1.48390692e-01 + 1.48628075e-01 1.48865157e-01 1.49101939e-01 1.49338419e-01 1.49574598e-01 + 1.49810476e-01 1.50046052e-01 1.50281327e-01 1.50516299e-01 1.50750969e-01 + 1.50985337e-01 1.51219402e-01 1.51453164e-01 1.51686623e-01 1.51919779e-01 + 1.52152632e-01 1.52385181e-01 1.52617427e-01 1.52849368e-01 1.53081006e-01 + 1.53312340e-01 1.53543370e-01 1.53774095e-01 1.54004516e-01 1.54234632e-01 + 1.54464444e-01 1.54693950e-01 1.54923152e-01 1.55152049e-01 1.55380640e-01 + 1.55608926e-01 1.55836907e-01 1.56064583e-01 1.56291953e-01 1.56519017e-01 + 1.56745775e-01 1.56972228e-01 1.57198375e-01 1.57424216e-01 1.57649751e-01 + 1.57874980e-01 1.58099903e-01 1.58324520e-01 1.58548831e-01 1.58772835e-01 + 1.58996533e-01 1.59219925e-01 1.59443010e-01 1.59665790e-01 1.59888262e-01 + 1.60110429e-01 1.60332289e-01 1.60553842e-01 1.60775089e-01 1.60996030e-01 + 1.61216664e-01 1.61436992e-01 1.61657013e-01 1.61876728e-01 1.62096136e-01 + 1.62315238e-01 1.62534034e-01 1.62752523e-01 1.62970706e-01 1.63188582e-01 + 1.63406152e-01 1.63623416e-01 1.63840374e-01 1.64057026e-01 1.64273371e-01 + 1.64489411e-01 1.64705144e-01 1.64920571e-01 1.65135693e-01 1.65350508e-01 + 1.65565018e-01 1.65779222e-01 1.65993121e-01 1.66206714e-01 1.66420001e-01 + 1.66632983e-01 1.66845660e-01 1.67058031e-01 1.67270097e-01 1.67481858e-01 + 1.67693314e-01 1.67904465e-01 1.68115312e-01 1.68325854e-01 1.68536091e-01 + 1.68746023e-01 1.68955652e-01 1.69164976e-01 1.69373996e-01 1.69582712e-01 + 1.69791124e-01 1.69999232e-01 1.70207037e-01 1.70414538e-01 1.70621735e-01 + 1.70828630e-01 1.71035221e-01 1.71241510e-01 1.71447495e-01 1.71653178e-01 + 1.71858558e-01 1.72063636e-01 1.72268412e-01 1.72472886e-01 1.72677057e-01 + 1.72880927e-01 1.73084495e-01 1.73287762e-01 1.73490728e-01 1.73693392e-01 + 1.73895756e-01 1.74097819e-01 1.74299581e-01 1.74501043e-01 1.74702204e-01 + 1.74903066e-01 1.75103627e-01 1.75303889e-01 1.75503852e-01 1.75703515e-01 + 1.75902879e-01 1.76101944e-01 1.76300710e-01 1.76499178e-01 1.76697348e-01 + 1.76895219e-01 1.77092792e-01 1.77290068e-01 1.77487046e-01 1.77683727e-01 + 1.77880111e-01 1.78076198e-01 1.78271989e-01 1.78467483e-01 1.78662680e-01 + 1.78857582e-01 1.79052188e-01 1.79246498e-01 1.79440514e-01 1.79634234e-01 + 1.79827659e-01 1.80020789e-01 1.80213625e-01 1.80406167e-01 1.80598415e-01 + 1.80790370e-01 1.80982031e-01 1.81173398e-01 1.81364473e-01 1.81555255e-01 + 1.81745745e-01 1.81935942e-01 1.82125848e-01 1.82315462e-01 1.82504784e-01 + 1.82693815e-01 1.82882555e-01 1.83071004e-01 1.83259163e-01 1.83447032e-01 + 1.83634611e-01 1.83821900e-01 1.84008900e-01 1.84195611e-01 1.84382033e-01 + 1.84568166e-01 1.84754012e-01 1.84939569e-01 1.85124838e-01 1.85309820e-01 + 1.85494514e-01 1.85678922e-01 1.85863043e-01 1.86046878e-01 1.86230426e-01 + 1.86413689e-01 1.86596666e-01 1.86779358e-01 1.86961765e-01 1.87143887e-01 + 1.87325725e-01 1.87507279e-01 1.87688549e-01 1.87869536e-01 1.88050239e-01 + 1.88230659e-01 1.88410797e-01 1.88590653e-01 1.88770226e-01 1.88949518e-01 + 1.89128528e-01 1.89307257e-01 1.89485705e-01 1.89663873e-01 1.89841761e-01 + 1.90019368e-01 1.90196696e-01 1.90373745e-01 1.90550515e-01 1.90727005e-01 + 1.90903218e-01 1.91079153e-01 1.91254809e-01 1.91430189e-01 1.91605291e-01 + 1.91780116e-01 1.91954665e-01 1.92128937e-01 1.92302934e-01 1.92476655e-01 + 1.92650101e-01 1.92823272e-01 1.92996169e-01 1.93168791e-01 1.93341139e-01 + 1.93513213e-01 1.93685014e-01 1.93856543e-01 1.94027798e-01 1.94198781e-01 + 1.94369492e-01 1.94539932e-01 1.94710100e-01 1.94879997e-01 1.95049623e-01 + 1.95218979e-01 1.95388065e-01 1.95556881e-01 1.95725428e-01 1.95893706e-01 + 1.96061715e-01 1.96229455e-01 1.96396928e-01 1.96564133e-01 1.96731070e-01 + 1.96897741e-01 1.97064144e-01 1.97230282e-01 1.97396153e-01 1.97561758e-01 + 1.97727099e-01 1.97892174e-01 1.98056984e-01 1.98221530e-01 1.98385813e-01 + 1.98549831e-01 1.98713586e-01 1.98877078e-01 1.99040308e-01 1.99203275e-01 + 1.99365980e-01 1.99528424e-01 1.99690606e-01 1.99852528e-01 2.00014188e-01 + 2.00175589e-01 2.00336730e-01 2.00497611e-01 2.00658233e-01 2.00818596e-01 + 2.00978701e-01 2.01138547e-01 2.01298136e-01 2.01457467e-01 2.01616542e-01 + 2.01775359e-01 2.01933920e-01 2.02092225e-01 2.02250274e-01 2.02408068e-01 + 2.02565607e-01 2.02722891e-01 2.02879921e-01 2.03036697e-01 2.03193220e-01 + 2.03349489e-01 2.03505505e-01 2.03661269e-01 2.03816780e-01 2.03972040e-01 + 2.04127048e-01 2.04281805e-01 2.04436312e-01 2.04590568e-01 2.04744573e-01 + 2.04898329e-01 2.05051836e-01 2.05205094e-01 2.05358103e-01 2.05510864e-01 + 2.05663377e-01 2.05815642e-01 2.05967660e-01 2.06119432e-01 2.06270956e-01 + 2.06422235e-01 2.06573268e-01 2.06724055e-01 2.06874598e-01 2.07024895e-01 + 2.07174948e-01 2.07324757e-01 2.07474323e-01 2.07623645e-01 2.07772725e-01 + 2.07921561e-01 2.08070156e-01 2.08218508e-01 2.08366619e-01 2.08514489e-01 + 2.08662119e-01 2.08809507e-01 2.08956656e-01 2.09103565e-01 2.09250235e-01 + 2.09396665e-01 2.09542857e-01 2.09688811e-01 2.09834526e-01 2.09980005e-01 + 2.10125246e-01 2.10270250e-01 2.10415017e-01 2.10559549e-01 2.10703844e-01 + 2.10847905e-01 2.10991730e-01 2.11135320e-01 2.11278676e-01 2.11421799e-01 + 2.11564687e-01 2.11707342e-01 2.11849765e-01 2.11991955e-01 2.12133912e-01 + 2.12275638e-01 2.12417132e-01 2.12558395e-01 2.12699428e-01 2.12840230e-01 + 2.12980802e-01 2.13121144e-01 2.13261257e-01 2.13401141e-01 2.13540796e-01 + 2.13680223e-01 2.13819422e-01 2.13958394e-01 2.14097138e-01 2.14235656e-01 + 2.14373947e-01 2.14512011e-01 2.14649851e-01 2.14787464e-01 2.14924853e-01 + 2.15062017e-01 2.15198957e-01 2.15335672e-01 2.15472164e-01 2.15608433e-01 + 2.15744479e-01 2.15880302e-01 2.16015903e-01 2.16151282e-01 2.16286440e-01 + 2.16421376e-01 2.16556092e-01 2.16690587e-01 2.16824862e-01 2.16958918e-01 + 2.17092754e-01 2.17226371e-01 2.17359769e-01 2.17492949e-01 2.17625911e-01 + 2.17758656e-01 2.17891183e-01 2.18023493e-01 2.18155587e-01 2.18287464e-01 + 2.18419126e-01 2.18550572e-01 2.18681803e-01 2.18812819e-01 2.18943621e-01 + 2.19074208e-01 2.19204582e-01 2.19334742e-01 2.19464690e-01 2.19594424e-01 + 2.19723946e-01 2.19853257e-01 2.19982355e-01 2.20111242e-01 2.20239919e-01 + 2.20368384e-01 2.20496640e-01 2.20624685e-01 2.20752521e-01 2.20880148e-01 + 2.21007566e-01 2.21134775e-01 2.21261776e-01 2.21388569e-01 2.21515155e-01 + 2.21641533e-01 2.21767705e-01 2.21893670e-01 2.22019429e-01 2.22144983e-01 + 2.22270331e-01 2.22395473e-01 2.22520411e-01 2.22645145e-01 2.22769675e-01 + 2.22894000e-01 2.23018123e-01 2.23142042e-01 2.23265759e-01 2.23389273e-01 + 2.23512586e-01 2.23635696e-01 2.23758606e-01 2.23881314e-01 2.24003822e-01 + 2.24126129e-01 2.24248236e-01 2.24370144e-01 2.24491852e-01 2.24613362e-01 + 2.24734673e-01 2.24855785e-01 2.24976700e-01 2.25097417e-01 2.25217936e-01 + 2.25338259e-01 2.25458385e-01 2.25578315e-01 2.25698048e-01 2.25817587e-01 + 2.25936930e-01 2.26056078e-01 2.26175031e-01 2.26293790e-01 2.26412355e-01 + 2.26530727e-01 2.26648905e-01 2.26766890e-01 2.26884683e-01 2.27002283e-01 + 2.27119691e-01 2.27236908e-01 2.27353934e-01 2.27470768e-01 2.27587412e-01 + 2.27703865e-01 2.27820129e-01 2.27936203e-01 2.28052087e-01 2.28167783e-01 + 2.28283290e-01 2.28398608e-01 2.28513738e-01 2.28628681e-01 2.28743437e-01 + 2.28858005e-01 2.28972386e-01 2.29086581e-01 2.29200591e-01 2.29314414e-01 + 2.29428052e-01 2.29541504e-01 2.29654772e-01 2.29767856e-01 2.29880755e-01 + 2.29993470e-01 2.30106002e-01 2.30218351e-01 2.30330517e-01 2.30442500e-01 + 2.30554301e-01 2.30665921e-01 2.30777358e-01 2.30888614e-01 2.30999690e-01 + 2.31110584e-01 2.31221299e-01 2.31331833e-01 2.31442188e-01 2.31552363e-01 + 2.31662359e-01 2.31772176e-01 2.31881815e-01 2.31991276e-01 2.32100559e-01 + 2.32209665e-01 2.32318593e-01 2.32427344e-01 2.32535919e-01 2.32644318e-01 + 2.32752540e-01 2.32860587e-01 2.32968459e-01 2.33076155e-01 2.33183677e-01 + 2.33291025e-01 2.33398198e-01 2.33505198e-01 2.33612024e-01 2.33718676e-01 + 2.33825157e-01 2.33931464e-01 2.34037599e-01 2.34143562e-01 2.34249354e-01 + 2.34354974e-01 2.34460423e-01 2.34565702e-01 2.34670810e-01 2.34775748e-01 + 2.34880516e-01 2.34985114e-01 2.35089544e-01 2.35193804e-01 2.35297896e-01 + 2.35401819e-01 2.35505574e-01 2.35609162e-01 2.35712582e-01 2.35815835e-01 + 2.35918921e-01 2.36021841e-01 2.36124594e-01 2.36227182e-01 2.36329603e-01 + 2.36431860e-01 2.36533951e-01 2.36635878e-01 2.36737640e-01 2.36839238e-01 + 2.36940672e-01 2.37041942e-01 2.37143049e-01 2.37243994e-01 2.37344775e-01 + 2.37445394e-01 2.37545851e-01 2.37646146e-01 2.37746279e-01 2.37846251e-01 + 2.37946062e-01 2.38045713e-01 2.38145203e-01 2.38244533e-01 2.38343703e-01 + 2.38442713e-01 2.38541565e-01 2.38640257e-01 2.38738790e-01 2.38837166e-01 + 2.38935383e-01 2.39033442e-01 2.39131344e-01 2.39229088e-01 2.39326676e-01 + 2.39424106e-01 2.39521381e-01 2.39618499e-01 2.39715461e-01 2.39812268e-01 + 2.39908919e-01 2.40005416e-01 2.40101757e-01 2.40197944e-01 2.40293977e-01 + 2.40389856e-01 2.40485582e-01 2.40581154e-01 2.40676573e-01 2.40771839e-01 + 2.40866953e-01 2.40961914e-01 2.41056724e-01 2.41151382e-01 2.41245888e-01 + 2.41340243e-01 2.41434447e-01 2.41528501e-01 2.41622404e-01 2.41716158e-01 + 2.41809761e-01 2.41903215e-01 2.41996520e-01 2.42089675e-01 2.42182682e-01 + 2.42275541e-01 2.42368251e-01 2.42460813e-01 2.42553228e-01 2.42645496e-01 + 2.42737616e-01 2.42829589e-01 2.42921416e-01 2.43013097e-01 2.43104631e-01 + 2.43196020e-01 2.43287263e-01 2.43378361e-01 2.43469314e-01 2.43560122e-01 + 2.43650786e-01 2.43741306e-01 2.43831681e-01 2.43921913e-01 2.44012001e-01 + 2.44101947e-01 2.44191749e-01 2.44281409e-01 2.44370926e-01 2.44460302e-01 + 2.44549535e-01 2.44638627e-01 2.44727577e-01 2.44816386e-01 2.44905055e-01 + 2.44993583e-01 2.45081970e-01 2.45170218e-01 2.45258325e-01 2.45346293e-01 + 2.45434122e-01 2.45521812e-01 2.45609362e-01 2.45696775e-01 2.45784049e-01 + 2.45871185e-01 2.45958183e-01 2.46045043e-01 2.46131766e-01 2.46218353e-01 + 2.46304802e-01 2.46391115e-01 2.46477291e-01 2.46563332e-01 2.46649236e-01 + 2.46735006e-01 2.46820639e-01 2.46906138e-01 2.46991502e-01 2.47076731e-01 + 2.47161826e-01 2.47246787e-01 2.47331614e-01 2.47416307e-01 2.47500867e-01 + 2.47585294e-01 2.47669588e-01 2.47753749e-01 2.47837778e-01 2.47921675e-01 + 2.48005440e-01 2.48089073e-01 2.48172575e-01 2.48255945e-01 2.48339185e-01 + 2.48422294e-01 2.48505272e-01 2.48588120e-01 2.48670839e-01 2.48753427e-01 + 2.48835886e-01 2.48918215e-01 2.49000416e-01 2.49082487e-01 2.49164431e-01 + 2.49246245e-01 2.49327932e-01 2.49409490e-01 2.49490922e-01 2.49572225e-01 + 2.49653402e-01 2.49734451e-01 2.49815374e-01 2.49896170e-01 2.49976840e-01 + 2.50057384e-01 2.50137802e-01 2.50218094e-01 2.50298261e-01 2.50378303e-01 + 2.50458221e-01 2.50538013e-01 2.50617681e-01 2.50697225e-01 2.50776645e-01 + 2.50855941e-01 2.50935113e-01 2.51014162e-01 2.51093088e-01 2.51171892e-01 + 2.51250572e-01 2.51329130e-01 2.51407566e-01 2.51485880e-01 2.51564073e-01 + 2.51642143e-01 2.51720093e-01 2.51797921e-01 2.51875629e-01 2.51953216e-01 + 2.52030682e-01 2.52108028e-01 2.52185254e-01 2.52262361e-01 2.52339348e-01 + 2.52416215e-01 2.52492964e-01 2.52569593e-01 2.52646104e-01 2.52722497e-01 + 2.52798771e-01 2.52874927e-01 2.52950965e-01 2.53026886e-01 2.53102689e-01 + 2.53178375e-01 2.53253944e-01 2.53329397e-01 2.53404733e-01 2.53479952e-01 + 2.53555056e-01 2.53630043e-01 2.53704915e-01 2.53779671e-01 2.53854312e-01 + 2.53928839e-01 2.54003250e-01 2.54077546e-01 2.54151728e-01 2.54225796e-01 + 2.54299750e-01 2.54373590e-01 2.54447316e-01 2.54520930e-01 2.54594429e-01 + 2.54667816e-01 2.54741090e-01 2.54814252e-01 2.54887301e-01 2.54960238e-01 + 2.55033063e-01 2.55105776e-01 2.55178378e-01 2.55250868e-01 2.55323247e-01 + 2.55395516e-01 2.55467673e-01 2.55539720e-01 2.55611657e-01 2.55683483e-01 + 2.55755200e-01 2.55826806e-01 2.55898304e-01 2.55969692e-01 2.56040970e-01 + 2.56112140e-01 2.56183201e-01 2.56254154e-01 2.56324998e-01 2.56395734e-01 + 2.56466362e-01 2.56536882e-01 2.56607295e-01 2.56677600e-01 2.56747798e-01 + 2.56817889e-01 2.56887874e-01 2.56957752e-01 2.57027523e-01 2.57097188e-01 + 2.57166747e-01 2.57236200e-01 2.57305548e-01 2.57374790e-01 2.57443927e-01 + 2.57512959e-01 2.57581886e-01 2.57650709e-01 2.57719427e-01 2.57788040e-01 + 2.57856550e-01 2.57924955e-01 2.57993257e-01 2.58061455e-01 2.58129550e-01 + 2.58197542e-01 2.58265431e-01 2.58333217e-01 2.58400900e-01 2.58468481e-01 + 2.58535960e-01 2.58603336e-01 2.58670611e-01 2.58737784e-01 2.58804856e-01 + 2.58871826e-01 2.58938695e-01 2.59005463e-01 2.59072131e-01 2.59138697e-01 + 2.59205164e-01 2.59271530e-01 2.59337796e-01 2.59403962e-01 2.59470029e-01 + 2.59535996e-01 2.59601864e-01 2.59667633e-01 2.59733302e-01 2.59798873e-01 + 2.59864345e-01 2.59929719e-01 2.59994995e-01 2.60060172e-01 2.60125252e-01 + 2.60190234e-01 2.60255118e-01 2.60319905e-01 2.60384595e-01 2.60449188e-01 + 2.60513684e-01 2.60578083e-01 2.60642386e-01 2.60706593e-01 2.60770703e-01 + 2.60834718e-01 2.60898636e-01 2.60962459e-01 2.61026187e-01 2.61089819e-01 + 2.61153356e-01 2.61216799e-01 2.61280146e-01 2.61343399e-01 2.61406557e-01 + 2.61469622e-01 2.61532592e-01 2.61595468e-01 2.61658250e-01 2.61720939e-01 + 2.61783535e-01 2.61846037e-01 2.61908446e-01 2.61970763e-01 2.62032986e-01 + 2.62095117e-01 2.62157156e-01 2.62219102e-01 2.62280956e-01 2.62342719e-01 + 2.62404389e-01 2.62465968e-01 2.62527456e-01 2.62588852e-01 2.62650158e-01 + 2.62711372e-01 2.62772496e-01 2.62833529e-01 2.62894471e-01 2.62955324e-01 + 2.63016086e-01 2.63076758e-01 2.63137341e-01 2.63197833e-01 2.63258237e-01 + 2.63318551e-01 2.63378776e-01 2.63438912e-01 2.63498959e-01 2.63558918e-01 + 2.63618788e-01 2.63678569e-01 2.63738263e-01 2.63797868e-01 2.63857386e-01 + 2.63916816e-01 2.63976158e-01 2.64035413e-01 2.64094581e-01 2.64153661e-01 + 2.64212655e-01 2.64271562e-01 2.64330382e-01 2.64389116e-01 2.64447763e-01 + 2.64506324e-01 2.64564800e-01 2.64623189e-01 2.64681493e-01 2.64739711e-01 + 2.64797844e-01 2.64855892e-01 2.64913854e-01 2.64971732e-01 2.65029524e-01 + 2.65087233e-01 2.65144856e-01 2.65202396e-01 2.65259851e-01 2.65317222e-01 + 2.65374509e-01 2.65431713e-01 2.65488833e-01 2.65545869e-01 2.65602822e-01 + 2.65659692e-01 2.65716480e-01 2.65773184e-01 2.65829805e-01 2.65886344e-01 + 2.65942801e-01 2.65999175e-01 2.66055468e-01 2.66111678e-01 2.66167806e-01 + 2.66223853e-01 2.66279819e-01 2.66335703e-01 2.66391505e-01 2.66447227e-01 + 2.66502868e-01 2.66558427e-01 2.66613907e-01 2.66669305e-01 2.66724624e-01 + 2.66779862e-01 2.66835020e-01 2.66890098e-01 2.66945096e-01 2.67000015e-01 + 2.67054854e-01 2.67109613e-01 2.67164294e-01 2.67218895e-01 2.67273418e-01 + 2.67327861e-01 2.67382226e-01 2.67436512e-01 2.67490720e-01 2.67544850e-01 + 2.67598902e-01 2.67652875e-01 2.67706771e-01 2.67760589e-01 2.67814330e-01 + 2.67867993e-01 2.67921578e-01 2.67975087e-01 2.68028519e-01 2.68081873e-01 + 2.68135151e-01 2.68188352e-01 2.68241477e-01 2.68294526e-01 2.68347498e-01 + 2.68400394e-01 2.68453214e-01 2.68505959e-01 2.68558628e-01 2.68611221e-01 + 2.68663738e-01 2.68716181e-01 2.68768548e-01 2.68820841e-01 2.68873058e-01 + 2.68925201e-01 2.68977269e-01 2.69029263e-01 2.69081182e-01 2.69133027e-01 + 2.69184798e-01 2.69236495e-01 2.69288118e-01 2.69339668e-01 2.69391143e-01 + 2.69442546e-01 2.69493875e-01 2.69545131e-01 2.69596314e-01 2.69647424e-01 + 2.69698461e-01 2.69749425e-01 2.69800317e-01 2.69851137e-01 2.69901884e-01 + 2.69952559e-01 2.70003162e-01 2.70053693e-01 2.70104153e-01 2.70154540e-01 + 2.70204856e-01 2.70255101e-01 2.70305274e-01 2.70355377e-01 2.70405408e-01 + 2.70455368e-01 2.70505258e-01 2.70555077e-01 2.70604825e-01 2.70654503e-01 + 2.70704110e-01 2.70753648e-01 2.70803115e-01 2.70852513e-01 2.70901840e-01 + 2.70951098e-01 2.71000287e-01 2.71049406e-01 2.71098455e-01 2.71147436e-01 + 2.71196347e-01 2.71245190e-01 2.71293963e-01 2.71342668e-01 2.71391304e-01 + 2.71439872e-01 2.71488372e-01 2.71536803e-01 2.71585166e-01 2.71633461e-01 + 2.71681688e-01 2.71729848e-01 2.71777939e-01 2.71825964e-01 2.71873921e-01 + 2.71921810e-01 2.71969632e-01 2.72017388e-01 2.72065076e-01 2.72112698e-01 + 2.72160252e-01 2.72207741e-01 2.72255162e-01 2.72302518e-01 2.72349807e-01 + 2.72397030e-01 2.72444187e-01 2.72491278e-01 2.72538303e-01 2.72585263e-01 + 2.72632157e-01 2.72678985e-01 2.72725748e-01 2.72772446e-01 2.72819079e-01 + 2.72865647e-01 2.72912150e-01 2.72958588e-01 2.73004962e-01 2.73051271e-01 + 2.73097516e-01 2.73143696e-01 2.73189812e-01 2.73235864e-01 2.73281852e-01 + 2.73327776e-01 2.73373636e-01 2.73419432e-01 2.73465166e-01 2.73510835e-01 + 2.73556441e-01 2.73601984e-01 2.73647464e-01 2.73692881e-01 2.73738235e-01 + 2.73783526e-01 2.73828755e-01 2.73873921e-01 2.73919024e-01 2.73964065e-01 + 2.74009044e-01 2.74053961e-01 2.74098815e-01 2.74143608e-01 2.74188339e-01 + 2.74233008e-01 2.74277616e-01 2.74322162e-01 2.74366646e-01 2.74411070e-01 + 2.74455432e-01 2.74499733e-01 2.74543973e-01 2.74588152e-01 2.74632270e-01 + 2.74676328e-01 2.74720325e-01 2.74764262e-01 2.74808138e-01 2.74851954e-01 + 2.74895710e-01 2.74939406e-01 2.74983042e-01 2.75026618e-01 2.75070135e-01 + 2.75113591e-01 2.75156988e-01 2.75200326e-01 2.75243604e-01 2.75286824e-01 + 2.75329984e-01 2.75373085e-01 2.75416127e-01 2.75459110e-01 2.75502034e-01 + 2.75544900e-01 2.75587707e-01 2.75630456e-01 2.75673147e-01 2.75715779e-01 + 2.75758353e-01 2.75800869e-01 2.75843328e-01 2.75885728e-01 2.75928070e-01 + 2.75970355e-01 2.76012583e-01 2.76054753e-01 2.76096866e-01 2.76138921e-01 + 2.76180919e-01 2.76222860e-01 2.76264745e-01 2.76306572e-01 2.76348342e-01 + 2.76390056e-01 2.76431714e-01 2.76473315e-01 2.76514859e-01 2.76556347e-01 + 2.76597779e-01 2.76639155e-01 2.76680475e-01 2.76721739e-01 2.76762947e-01 + 2.76804100e-01 2.76845197e-01 2.76886238e-01 2.76927224e-01 2.76968154e-01 + 2.77009030e-01 2.77049850e-01 2.77090615e-01 2.77131325e-01 2.77171980e-01 + 2.77212581e-01 2.77253126e-01 2.77293617e-01 2.77334054e-01 2.77374436e-01 + 2.77414764e-01 2.77455038e-01 2.77495257e-01 2.77535423e-01 2.77575534e-01 + 2.77615592e-01 2.77655596e-01 2.77695546e-01 2.77735443e-01 2.77775286e-01 + 2.77815076e-01 2.77854812e-01 2.77894495e-01 2.77934125e-01 2.77973702e-01 + 2.78013226e-01 2.78052697e-01 2.78092115e-01 2.78131481e-01 2.78170794e-01 + 2.78210054e-01 2.78249262e-01 2.78288418e-01 2.78327521e-01 2.78366572e-01 + 2.78405571e-01 2.78444519e-01 2.78483414e-01 2.78522257e-01 2.78561049e-01 + 2.78599789e-01 2.78638477e-01 2.78677114e-01 2.78715700e-01 2.78754234e-01 + 2.78792717e-01 2.78831149e-01 2.78869530e-01 2.78907859e-01 2.78946138e-01 + 2.08130000e-04 2.08281191e-04 2.08734762e-04 2.09490714e-04 2.10549046e-04 + 2.11909757e-04 2.13572846e-04 2.15538310e-04 2.17806148e-04 2.20376358e-04 + 2.23248936e-04 2.26423882e-04 2.29901190e-04 2.33680858e-04 2.37762883e-04 + 2.42147260e-04 2.46833984e-04 2.51823051e-04 2.57114457e-04 2.62708196e-04 + 2.68604263e-04 2.74802652e-04 2.81303356e-04 2.88106370e-04 2.95211687e-04 + 3.02619299e-04 3.10329200e-04 3.18341382e-04 3.26655837e-04 3.35272557e-04 + 3.44191533e-04 3.53412758e-04 3.62936221e-04 3.72761913e-04 3.82889825e-04 + 3.93319947e-04 4.04052269e-04 4.15086779e-04 4.26423468e-04 4.38062324e-04 + 4.50003336e-04 4.62246492e-04 4.74791780e-04 4.87639188e-04 5.00788703e-04 + 5.14240312e-04 5.27994002e-04 5.42049760e-04 5.56407572e-04 5.71067423e-04 + 5.86029300e-04 6.01293187e-04 6.16859071e-04 6.32726934e-04 6.48896763e-04 + 6.65368541e-04 6.82142252e-04 6.99217880e-04 7.16595407e-04 7.34274817e-04 + 7.52256092e-04 7.70539216e-04 7.89124169e-04 8.08010934e-04 8.27199493e-04 + 8.46689825e-04 8.66481913e-04 8.86575737e-04 9.06971278e-04 9.27668514e-04 + 9.48667427e-04 9.69967995e-04 9.91570198e-04 1.01347401e-03 1.03567942e-03 + 1.05818640e-03 1.08099493e-03 1.10410498e-03 1.12751654e-03 1.15122957e-03 + 1.17524406e-03 1.19955999e-03 1.22417733e-03 1.24909605e-03 1.27431613e-03 + 1.29983755e-03 1.32566029e-03 1.35178430e-03 1.37820958e-03 1.40493610e-03 + 1.43196382e-03 1.45929272e-03 1.48692278e-03 1.51485397e-03 1.54308626e-03 + 1.57161963e-03 1.60045404e-03 1.62958946e-03 1.65902588e-03 1.68876325e-03 + 1.71880156e-03 1.74914077e-03 1.77978085e-03 1.81072177e-03 1.84196351e-03 + 1.87350602e-03 1.90534929e-03 1.93749327e-03 1.96993795e-03 2.00268328e-03 + 2.03572923e-03 2.06907577e-03 2.10272288e-03 2.13667051e-03 2.17091863e-03 + 2.20546721e-03 2.24031622e-03 2.27546562e-03 2.31091538e-03 2.34666546e-03 + 2.38271583e-03 2.41906645e-03 2.45571729e-03 2.49266831e-03 2.52991947e-03 + 2.56747075e-03 2.60532209e-03 2.64347347e-03 2.68192485e-03 2.72067619e-03 + 2.75972745e-03 2.79907859e-03 2.83872959e-03 2.87868038e-03 2.91893095e-03 + 2.95948125e-03 3.00033123e-03 3.04148087e-03 3.08293011e-03 3.12467892e-03 + 3.16672726e-03 3.20907509e-03 3.25172236e-03 3.29466904e-03 3.33791508e-03 + 3.38146044e-03 3.42530507e-03 3.46944894e-03 3.51389201e-03 3.55863422e-03 + 3.60367554e-03 3.64901591e-03 3.69465531e-03 3.74059367e-03 3.78683096e-03 + 3.83336714e-03 3.88020215e-03 3.92733595e-03 3.97476850e-03 4.02249975e-03 + 4.07052965e-03 4.11885815e-03 4.16748522e-03 4.21641079e-03 4.26563483e-03 + 4.31515728e-03 4.36497811e-03 4.41509725e-03 4.46551466e-03 4.51623029e-03 + 4.56724409e-03 4.61855601e-03 4.67016601e-03 4.72207403e-03 4.77428002e-03 + 4.82678393e-03 4.87958570e-03 4.93268530e-03 4.98608266e-03 5.03977774e-03 + 5.09377048e-03 5.14806083e-03 5.20264873e-03 5.25753414e-03 5.31271700e-03 + 5.36819725e-03 5.42397485e-03 5.48004973e-03 5.53642185e-03 5.59309115e-03 + 5.65005757e-03 5.70732106e-03 5.76488157e-03 5.82273903e-03 5.88089339e-03 + 5.93934459e-03 5.99809258e-03 6.05713731e-03 6.11647870e-03 6.17611671e-03 + 6.23605128e-03 6.29628235e-03 6.35680986e-03 6.41763375e-03 6.47875396e-03 + 6.54017044e-03 6.60188312e-03 6.66389194e-03 6.72619685e-03 6.78879778e-03 + 6.85169468e-03 6.91488748e-03 6.97837611e-03 7.04216053e-03 7.10624066e-03 + 7.17061645e-03 7.23528783e-03 7.30025474e-03 7.36551712e-03 7.43107490e-03 + 7.49692802e-03 7.56307641e-03 7.62952002e-03 7.69625878e-03 7.76329262e-03 + 7.83062147e-03 7.89824528e-03 7.96616398e-03 8.03437750e-03 8.10288577e-03 + 8.17168874e-03 8.24078632e-03 8.31017847e-03 8.37986510e-03 8.44984615e-03 + 8.52012155e-03 8.59069124e-03 8.66155515e-03 8.73271321e-03 8.80416535e-03 + 8.87591149e-03 8.94795158e-03 9.02028554e-03 9.09291331e-03 9.16583480e-03 + 9.23904995e-03 9.31255870e-03 9.38636096e-03 9.46045668e-03 9.53484577e-03 + 9.60952816e-03 9.68450379e-03 9.75977258e-03 9.83533445e-03 9.91118934e-03 + 9.98733717e-03 1.00637779e-02 1.01405114e-02 1.02175376e-02 1.02948564e-02 + 1.03724679e-02 1.04503718e-02 1.05285681e-02 1.06070568e-02 1.06858378e-02 + 1.07649109e-02 1.08442762e-02 1.09239335e-02 1.10038828e-02 1.10841240e-02 + 1.11646570e-02 1.12454817e-02 1.13265980e-02 1.14080060e-02 1.14897054e-02 + 1.15716963e-02 1.16539785e-02 1.17365519e-02 1.18194166e-02 1.19025723e-02 + 1.19860191e-02 1.20697568e-02 1.21537854e-02 1.22381047e-02 1.23227148e-02 + 1.24076155e-02 1.24928067e-02 1.25782883e-02 1.26640604e-02 1.27501227e-02 + 1.28364752e-02 1.29231179e-02 1.30100506e-02 1.30972732e-02 1.31847858e-02 + 1.32725881e-02 1.33606801e-02 1.34490618e-02 1.35377329e-02 1.36266936e-02 + 1.37159436e-02 1.38054829e-02 1.38953113e-02 1.39854289e-02 1.40758355e-02 + 1.41665311e-02 1.42575155e-02 1.43487886e-02 1.44403504e-02 1.45322008e-02 + 1.46243398e-02 1.47167671e-02 1.48094827e-02 1.49024866e-02 1.49957786e-02 + 1.50893587e-02 1.51832267e-02 1.52773826e-02 1.53718263e-02 1.54665577e-02 + 1.55615767e-02 1.56568832e-02 1.57524771e-02 1.58483584e-02 1.59445269e-02 + 1.60409825e-02 1.61377252e-02 1.62347549e-02 1.63320714e-02 1.64296747e-02 + 1.65275647e-02 1.66257413e-02 1.67242043e-02 1.68229538e-02 1.69219896e-02 + 1.70213116e-02 1.71209197e-02 1.72208138e-02 1.73209939e-02 1.74214598e-02 + 1.75222114e-02 1.76232487e-02 1.77245715e-02 1.78261798e-02 1.79280734e-02 + 1.80302523e-02 1.81327163e-02 1.82354654e-02 1.83384994e-02 1.84418184e-02 + 1.85454220e-02 1.86493104e-02 1.87534833e-02 1.88579407e-02 1.89626824e-02 + 1.90677084e-02 1.91730186e-02 1.92786129e-02 1.93844911e-02 1.94906532e-02 + 1.95970991e-02 1.97038286e-02 1.98108417e-02 1.99181382e-02 2.00257182e-02 + 2.01335813e-02 2.02417277e-02 2.03501571e-02 2.04588694e-02 2.05678646e-02 + 2.06771425e-02 2.07867031e-02 2.08965462e-02 2.10066717e-02 2.11170796e-02 + 2.12277697e-02 2.13387419e-02 2.14499962e-02 2.15615323e-02 2.16733503e-02 + 2.17854499e-02 2.18978311e-02 2.20104938e-02 2.21234379e-02 2.22366633e-02 + 2.23501698e-02 2.24639574e-02 2.25780260e-02 2.26923753e-02 2.28070055e-02 + 2.29219162e-02 2.30371074e-02 2.31525791e-02 2.32683311e-02 2.33843632e-02 + 2.35006755e-02 2.36172677e-02 2.37341397e-02 2.38512915e-02 2.39687230e-02 + 2.40864339e-02 2.42044243e-02 2.43226940e-02 2.44412429e-02 2.45600709e-02 + 2.46791779e-02 2.47985637e-02 2.49182282e-02 2.50381714e-02 2.51583931e-02 + 2.52788932e-02 2.53996717e-02 2.55207283e-02 2.56420629e-02 2.57636755e-02 + 2.58855660e-02 2.60077341e-02 2.61301799e-02 2.62529032e-02 2.63759039e-02 + 2.64991818e-02 2.66227368e-02 2.67465689e-02 2.68706779e-02 2.69950637e-02 + 2.71197262e-02 2.72446653e-02 2.73698808e-02 2.74953726e-02 2.76211406e-02 + 2.77471848e-02 2.78735049e-02 2.80001009e-02 2.81269726e-02 2.82541199e-02 + 2.83815427e-02 2.85092409e-02 2.86372144e-02 2.87654630e-02 2.88939867e-02 + 2.90227852e-02 2.91518585e-02 2.92812065e-02 2.94108290e-02 2.95407260e-02 + 2.96708972e-02 2.98013426e-02 2.99320621e-02 3.00630555e-02 3.01943227e-02 + 3.03258636e-02 3.04576781e-02 3.05897660e-02 3.07221272e-02 3.08547616e-02 + 3.09876691e-02 3.11208496e-02 3.12543028e-02 3.13880288e-02 3.15220273e-02 + 3.16562983e-02 3.17908416e-02 3.19256571e-02 3.20607447e-02 3.21961042e-02 + 3.23317356e-02 3.24676386e-02 3.26038132e-02 3.27402593e-02 3.28769766e-02 + 3.30139652e-02 3.31512248e-02 3.32887554e-02 3.34265567e-02 3.35646288e-02 + 3.37029714e-02 3.38415844e-02 3.39804677e-02 3.41196212e-02 3.42590447e-02 + 3.43987381e-02 3.45387013e-02 3.46789341e-02 3.48194365e-02 3.49602082e-02 + 3.51012492e-02 3.52425593e-02 3.53841384e-02 3.55259864e-02 3.56681031e-02 + 3.58104884e-02 3.59531422e-02 3.60960643e-02 3.62392547e-02 3.63827131e-02 + 3.65264394e-02 3.66704335e-02 3.68146954e-02 3.69592247e-02 3.71040215e-02 + 3.72490856e-02 3.73944167e-02 3.75400149e-02 3.76858800e-02 3.78320118e-02 + 3.79784102e-02 3.81250751e-02 3.82720063e-02 3.84192037e-02 3.85666672e-02 + 3.87143966e-02 3.88623918e-02 3.90106526e-02 3.91591790e-02 3.93079707e-02 + 3.94570277e-02 3.96063498e-02 3.97559369e-02 3.99057888e-02 4.00559054e-02 + 4.02062865e-02 4.03569321e-02 4.05078419e-02 4.06590159e-02 4.08104539e-02 + 4.09621558e-02 4.11141214e-02 4.12663506e-02 4.14188432e-02 4.15715991e-02 + 4.17246182e-02 4.18779004e-02 4.20314454e-02 4.21852532e-02 4.23393235e-02 + 4.24936564e-02 4.26482515e-02 4.28031089e-02 4.29582283e-02 4.31136096e-02 + 4.32692526e-02 4.34251573e-02 4.35813234e-02 4.37377508e-02 4.38944395e-02 + 4.40513892e-02 4.42085998e-02 4.43660711e-02 4.45238031e-02 4.46817956e-02 + 4.48400483e-02 4.49985613e-02 4.51573343e-02 4.53163671e-02 4.54756598e-02 + 4.56352120e-02 4.57950237e-02 4.59550947e-02 4.61154249e-02 4.62760141e-02 + 4.64368622e-02 4.65979690e-02 4.67593344e-02 4.69209582e-02 4.70828403e-02 + 4.72449806e-02 4.74073789e-02 4.75700350e-02 4.77329488e-02 4.78961202e-02 + 4.80595489e-02 4.82232350e-02 4.83871781e-02 4.85513782e-02 4.87158351e-02 + 4.88805487e-02 4.90455188e-02 4.92107453e-02 4.93762280e-02 4.95419667e-02 + 4.97079614e-02 4.98742118e-02 5.00407179e-02 5.02074794e-02 5.03744963e-02 + 5.05417683e-02 5.07092953e-02 5.08770772e-02 5.10451138e-02 5.12134049e-02 + 5.13819505e-02 5.15507503e-02 5.17198043e-02 5.18891121e-02 5.20586738e-02 + 5.22284892e-02 5.23985580e-02 5.25688802e-02 5.27394555e-02 5.29102839e-02 + 5.30813652e-02 5.32526992e-02 5.34242858e-02 5.35961248e-02 5.37682161e-02 + 5.39405595e-02 5.41131548e-02 5.42860020e-02 5.44591008e-02 5.46324511e-02 + 5.48060527e-02 5.49799055e-02 5.51540094e-02 5.53283641e-02 5.55029695e-02 + 5.56778255e-02 5.58529319e-02 5.60282885e-02 5.62038952e-02 5.63797519e-02 + 5.65558583e-02 5.67322144e-02 5.69088199e-02 5.70856747e-02 5.72627786e-02 + 5.74401316e-02 5.76177334e-02 5.77955838e-02 5.79736828e-02 5.81520301e-02 + 5.83306256e-02 5.85094691e-02 5.86885605e-02 5.88678997e-02 5.90474864e-02 + 5.92273205e-02 5.94074018e-02 5.95877302e-02 5.97683055e-02 5.99491276e-02 + 6.01301963e-02 6.03115114e-02 6.04930728e-02 6.06748803e-02 6.08569338e-02 + 6.10392330e-02 6.12217779e-02 6.14045683e-02 6.15876039e-02 6.17708848e-02 + 6.19544105e-02 6.21381812e-02 6.23221964e-02 6.25064562e-02 6.26909603e-02 + 6.28757085e-02 6.30607008e-02 6.32459369e-02 6.34314167e-02 6.36171400e-02 + 6.38031067e-02 6.39893165e-02 6.41757694e-02 6.43624651e-02 6.45494036e-02 + 6.47365845e-02 6.49240078e-02 6.51116734e-02 6.52995809e-02 6.54877303e-02 + 6.56761215e-02 6.58647541e-02 6.60536282e-02 6.62427434e-02 6.64320997e-02 + 6.66216969e-02 6.68115348e-02 6.70016132e-02 6.71919320e-02 6.73824910e-02 + 6.75732900e-02 6.77643289e-02 6.79556075e-02 6.81471257e-02 6.83388832e-02 + 6.85308799e-02 6.87231157e-02 6.89155904e-02 6.91083037e-02 6.93012556e-02 + 6.94944458e-02 6.96878742e-02 6.98815407e-02 7.00754450e-02 7.02695870e-02 + 7.04639665e-02 7.06585833e-02 7.08534374e-02 7.10485284e-02 7.12438563e-02 + 7.14394208e-02 7.16352219e-02 7.18312593e-02 7.20275328e-02 7.22240423e-02 + 7.24207876e-02 7.26177686e-02 7.28149851e-02 7.30124368e-02 7.32101237e-02 + 7.34080456e-02 7.36062022e-02 7.38045935e-02 7.40032192e-02 7.42020791e-02 + 7.44011732e-02 7.46005012e-02 7.48000630e-02 7.49998583e-02 7.51998870e-02 + 7.54001490e-02 7.56006441e-02 7.58013720e-02 7.60023326e-02 7.62035258e-02 + 7.64049514e-02 7.66066092e-02 7.68084989e-02 7.70106206e-02 7.72129739e-02 + 7.74155587e-02 7.76183748e-02 7.78214221e-02 7.80247003e-02 7.82282094e-02 + 7.84319490e-02 7.86359192e-02 7.88401196e-02 7.90445501e-02 7.92492105e-02 + 7.94541007e-02 7.96592204e-02 7.98645695e-02 8.00701479e-02 8.02759553e-02 + 8.04819916e-02 8.06882565e-02 8.08947500e-02 8.11014718e-02 8.13084218e-02 + 8.15155998e-02 8.17230055e-02 8.19306389e-02 8.21384998e-02 8.23465879e-02 + 8.25549031e-02 8.27634452e-02 8.29722141e-02 8.31812095e-02 8.33904313e-02 + 8.35998794e-02 8.38095534e-02 8.40194533e-02 8.42295789e-02 8.44399299e-02 + 8.46505063e-02 8.48613078e-02 8.50723343e-02 8.52835855e-02 8.54950613e-02 + 8.57067616e-02 8.59186860e-02 8.61308346e-02 8.63432070e-02 8.65558031e-02 + 8.67686227e-02 8.69816656e-02 8.71949318e-02 8.74084208e-02 8.76221327e-02 + 8.78360672e-02 8.80502241e-02 8.82646033e-02 8.84792045e-02 8.86940276e-02 + 8.89090725e-02 8.91243388e-02 8.93398265e-02 8.95555354e-02 8.97714652e-02 + 8.99876159e-02 9.02039871e-02 9.04205788e-02 9.06373908e-02 9.08544228e-02 + 9.10716747e-02 9.12891463e-02 9.15068374e-02 9.17247478e-02 9.19428774e-02 + 9.21612260e-02 9.23797934e-02 9.25985793e-02 9.28175837e-02 9.30368064e-02 + 9.32562470e-02 9.34759056e-02 9.36957818e-02 9.39158756e-02 9.41361866e-02 + 9.43567148e-02 9.45774599e-02 9.47984219e-02 9.50196003e-02 9.52409952e-02 + 9.54626063e-02 9.56844334e-02 9.59064764e-02 9.61287350e-02 9.63512090e-02 + 9.65738984e-02 9.67968029e-02 9.70199222e-02 9.72432563e-02 9.74668050e-02 + 9.76905680e-02 9.79145452e-02 9.81387363e-02 9.83631413e-02 9.85877598e-02 + 9.88125918e-02 9.90376370e-02 9.92628953e-02 9.94883665e-02 9.97140503e-02 + 9.99399466e-02 1.00166055e-01 1.00392376e-01 1.00618909e-01 1.00845653e-01 + 1.01072609e-01 1.01299776e-01 1.01527155e-01 1.01754744e-01 1.01982545e-01 + 1.02210556e-01 1.02438777e-01 1.02667209e-01 1.02895850e-01 1.03124702e-01 + 1.03353763e-01 1.03583034e-01 1.03812514e-01 1.04042203e-01 1.04272101e-01 + 1.04502207e-01 1.04732523e-01 1.04963046e-01 1.05193778e-01 1.05424718e-01 + 1.05655865e-01 1.05887221e-01 1.06118783e-01 1.06350553e-01 1.06582530e-01 + 1.06814713e-01 1.07047104e-01 1.07279701e-01 1.07512504e-01 1.07745513e-01 + 1.07978728e-01 1.08212148e-01 1.08445775e-01 1.08679606e-01 1.08913643e-01 + 1.09147884e-01 1.09382331e-01 1.09616982e-01 1.09851837e-01 1.10086896e-01 + 1.10322160e-01 1.10557627e-01 1.10793298e-01 1.11029172e-01 1.11265249e-01 + 1.11501530e-01 1.11738013e-01 1.11974699e-01 1.12211587e-01 1.12448678e-01 + 1.12685971e-01 1.12923465e-01 1.13161162e-01 1.13399059e-01 1.13637158e-01 + 1.13875458e-01 1.14113960e-01 1.14352661e-01 1.14591564e-01 1.14830666e-01 + 1.15069969e-01 1.15309472e-01 1.15549174e-01 1.15789076e-01 1.16029178e-01 + 1.16269478e-01 1.16509978e-01 1.16750676e-01 1.16991573e-01 1.17232669e-01 + 1.17473962e-01 1.17715454e-01 1.17957143e-01 1.18199030e-01 1.18441115e-01 + 1.18683397e-01 1.18925875e-01 1.19168551e-01 1.19411423e-01 1.19654492e-01 + 1.19897757e-01 1.20141218e-01 1.20384875e-01 1.20628728e-01 1.20872776e-01 + 1.21117020e-01 1.21361458e-01 1.21606092e-01 1.21850920e-01 1.22095943e-01 + 1.22341160e-01 1.22586571e-01 1.22832176e-01 1.23077975e-01 1.23323967e-01 + 1.23570153e-01 1.23816532e-01 1.24063104e-01 1.24309869e-01 1.24556826e-01 + 1.24803975e-01 1.25051317e-01 1.25298851e-01 1.25546576e-01 1.25794494e-01 + 1.26042602e-01 1.26290902e-01 1.26539393e-01 1.26788074e-01 1.27036946e-01 + 1.27286009e-01 1.27535261e-01 1.27784704e-01 1.28034337e-01 1.28284159e-01 + 1.28534171e-01 1.28784372e-01 1.29034762e-01 1.29285340e-01 1.29536108e-01 + 1.29787064e-01 1.30038208e-01 1.30289540e-01 1.30541060e-01 1.30792768e-01 + 1.31044663e-01 1.31296746e-01 1.31549015e-01 1.31801471e-01 1.32054115e-01 + 1.32306944e-01 1.32559960e-01 1.32813162e-01 1.33066550e-01 1.33320123e-01 + 1.33573882e-01 1.33827826e-01 1.34081956e-01 1.34336270e-01 1.34590769e-01 + 1.34845452e-01 1.35100320e-01 1.35355372e-01 1.35610608e-01 1.35866027e-01 + 1.36121630e-01 1.36377417e-01 1.36633386e-01 1.36889538e-01 1.37145873e-01 + 1.37402391e-01 1.37659091e-01 1.37915973e-01 1.38173037e-01 1.38430283e-01 + 1.38687710e-01 1.38945318e-01 1.39203108e-01 1.39461079e-01 1.39719230e-01 + 1.39977562e-01 1.40236074e-01 1.40494766e-01 1.40753639e-01 1.41012691e-01 + 1.41271922e-01 1.41531333e-01 1.41790923e-01 1.42050692e-01 1.42310640e-01 + 1.42570766e-01 1.42831071e-01 1.43091554e-01 1.43352214e-01 1.43613053e-01 + 1.43874069e-01 1.44135262e-01 1.44396633e-01 1.44658180e-01 1.44919904e-01 + 1.45181805e-01 1.45443882e-01 1.45706135e-01 1.45968565e-01 1.46231170e-01 + 1.46493950e-01 1.46756906e-01 1.47020037e-01 1.47283343e-01 1.47546824e-01 + 1.47810479e-01 1.48074308e-01 1.48338312e-01 1.48602490e-01 1.48866841e-01 + 1.49131366e-01 1.49396065e-01 1.49660936e-01 1.49925981e-01 1.50191198e-01 + 1.50456588e-01 1.50722150e-01 1.50987884e-01 1.51253790e-01 1.51519868e-01 + 1.51786118e-01 1.52052539e-01 1.52319131e-01 1.52585894e-01 1.52852827e-01 + 1.53119932e-01 1.53387206e-01 1.53654651e-01 1.53922266e-01 1.54190050e-01 + 1.54458004e-01 1.54726127e-01 1.54994420e-01 1.55262881e-01 1.55531511e-01 + 1.55800310e-01 1.56069277e-01 1.56338412e-01 1.56607715e-01 1.56877186e-01 + 1.57146824e-01 1.57416630e-01 1.57686603e-01 1.57956743e-01 1.58227049e-01 + 1.58497522e-01 1.58768161e-01 1.59038967e-01 1.59309938e-01 1.59581075e-01 + 1.59852378e-01 1.60123846e-01 1.60395479e-01 1.60667277e-01 1.60939240e-01 + 1.61211367e-01 1.61483659e-01 1.61756114e-01 1.62028734e-01 1.62301517e-01 + 1.62574464e-01 1.62847574e-01 1.63120847e-01 1.63394283e-01 1.63667882e-01 + 1.63941644e-01 1.64215567e-01 1.64489653e-01 1.64763901e-01 1.65038310e-01 + 1.65312881e-01 1.65587613e-01 1.65862506e-01 1.66137560e-01 1.66412775e-01 + 1.66688150e-01 1.66963686e-01 1.67239381e-01 1.67515237e-01 1.67791252e-01 + 1.68067427e-01 1.68343761e-01 1.68620254e-01 1.68896906e-01 1.69173717e-01 + 1.69450686e-01 1.69727813e-01 1.70005098e-01 1.70282542e-01 1.70560143e-01 + 1.70837901e-01 1.71115817e-01 1.71393889e-01 1.71672119e-01 1.71950505e-01 + 1.72229048e-01 1.72507747e-01 1.72786602e-01 1.73065613e-01 1.73344779e-01 + 1.73624101e-01 1.73903579e-01 1.74183211e-01 1.74462998e-01 1.74742940e-01 + 1.75023036e-01 1.75303286e-01 1.75583691e-01 1.75864249e-01 1.76144961e-01 + 1.76425826e-01 1.76706845e-01 1.76988017e-01 1.77269341e-01 1.77550818e-01 + 1.77832448e-01 1.78114229e-01 1.78396163e-01 1.78678248e-01 1.78960486e-01 + 1.79242874e-01 1.79525414e-01 1.79808105e-01 1.80090946e-01 1.80373938e-01 + 1.80657081e-01 1.80940374e-01 1.81223816e-01 1.81507409e-01 1.81791151e-01 + 1.82075043e-01 1.82359084e-01 1.82643273e-01 1.82927612e-01 1.83212099e-01 + 1.83496734e-01 1.83781518e-01 1.84066450e-01 1.84351529e-01 1.84636756e-01 + 1.84922131e-01 1.85207652e-01 1.85493321e-01 1.85779136e-01 1.86065098e-01 + 1.86351206e-01 1.86637461e-01 1.86923861e-01 1.87210407e-01 1.87497099e-01 + 1.87783936e-01 1.88070919e-01 1.88358046e-01 1.88645318e-01 1.88932734e-01 + 1.89220295e-01 1.89508000e-01 1.89795849e-01 1.90083842e-01 1.90371978e-01 + 1.90660258e-01 1.90948681e-01 1.91237246e-01 1.91525955e-01 1.91814806e-01 + 1.92103799e-01 1.92392935e-01 1.92682212e-01 1.92971631e-01 1.93261192e-01 + 1.93550894e-01 1.93840737e-01 1.94130721e-01 1.94420846e-01 1.94711111e-01 + 1.95001517e-01 1.95292063e-01 1.95582748e-01 1.95873574e-01 1.96164539e-01 + 1.96455643e-01 1.96746886e-01 1.97038269e-01 1.97329790e-01 1.97621449e-01 + 1.97913247e-01 1.98205183e-01 1.98497257e-01 1.98789469e-01 1.99081818e-01 + 1.99374304e-01 1.99666928e-01 1.99959688e-01 2.00252585e-01 2.00545619e-01 + 2.00838789e-01 2.01132095e-01 2.01425537e-01 2.01719114e-01 2.02012828e-01 + 2.02306676e-01 2.02600660e-01 2.02894778e-01 2.03189031e-01 2.03483419e-01 + 2.03777941e-01 2.04072597e-01 2.04367387e-01 2.04662311e-01 2.04957368e-01 + 2.05252558e-01 2.05547882e-01 2.05843338e-01 2.06138928e-01 2.06434649e-01 + 2.06730503e-01 2.07026489e-01 2.07322607e-01 2.07618857e-01 2.07915238e-01 + 2.08211750e-01 2.08508394e-01 2.08805168e-01 2.09102073e-01 2.09399109e-01 + 2.09696275e-01 2.09993571e-01 2.10290997e-01 2.10588552e-01 2.10886237e-01 + 2.11184052e-01 2.11481995e-01 2.11780068e-01 2.12078269e-01 2.12376598e-01 + 2.12675056e-01 2.12973642e-01 2.13272356e-01 2.13571197e-01 2.13870166e-01 + 2.14169263e-01 2.14468486e-01 2.14767837e-01 2.15067314e-01 2.15366917e-01 + 2.15666647e-01 2.15966503e-01 2.16266485e-01 2.16566592e-01 2.16866825e-01 + 2.17167184e-01 2.17467667e-01 2.17768276e-01 2.18069009e-01 2.18369866e-01 + 2.18670848e-01 2.18971954e-01 2.19273184e-01 2.19574538e-01 2.19876015e-01 + 2.20177615e-01 2.20479339e-01 2.20781185e-01 2.21083155e-01 2.21385246e-01 + 2.21687460e-01 2.21989797e-01 2.22292255e-01 2.22594835e-01 2.22897536e-01 + 2.23200359e-01 2.23503303e-01 2.23806367e-01 2.24109553e-01 2.24412859e-01 + 2.24716285e-01 2.25019832e-01 2.25323498e-01 2.25627285e-01 2.25931191e-01 + 2.26235216e-01 2.26539360e-01 2.26843623e-01 2.27148005e-01 2.27452506e-01 + 2.27757125e-01 2.28061862e-01 2.28366717e-01 2.28671690e-01 2.28976780e-01 + 2.29281988e-01 2.29587313e-01 2.29892755e-01 2.30198313e-01 2.30503989e-01 + 2.30809780e-01 2.31115688e-01 2.31421712e-01 2.31727852e-01 2.32034107e-01 + 2.32340478e-01 2.32646964e-01 2.32953565e-01 2.33260280e-01 2.33567111e-01 + 2.33874055e-01 2.34181114e-01 2.34488287e-01 2.34795574e-01 2.35102975e-01 + 2.35410489e-01 2.35718116e-01 2.36025856e-01 2.36333709e-01 2.36641675e-01 + 2.36949753e-01 2.37257943e-01 2.37566246e-01 2.37874660e-01 2.38183186e-01 + 2.38491824e-01 2.38800572e-01 2.39109432e-01 2.39418403e-01 2.39727484e-01 + 2.40036676e-01 2.40345978e-01 2.40655391e-01 2.40964913e-01 2.41274545e-01 + 2.41584286e-01 2.41894137e-01 2.42204097e-01 2.42514166e-01 2.42824344e-01 + 2.43134630e-01 2.43445024e-01 2.43755527e-01 2.44066138e-01 2.44376856e-01 + 2.44687682e-01 2.44998615e-01 2.45309656e-01 2.45620803e-01 2.45932058e-01 + 2.46243419e-01 2.46554886e-01 2.46866459e-01 2.47178139e-01 2.47489924e-01 + 2.47801815e-01 2.48113812e-01 2.48425913e-01 2.48738120e-01 2.49050431e-01 + 2.49362848e-01 2.49675368e-01 2.49987993e-01 2.50300722e-01 2.50613555e-01 + 2.50926492e-01 2.51239532e-01 2.51552675e-01 2.51865922e-01 2.52179271e-01 + 2.52492723e-01 2.52806278e-01 2.53119935e-01 2.53433694e-01 2.53747555e-01 + 2.54061518e-01 2.54375582e-01 2.54689748e-01 2.55004015e-01 2.55318383e-01 + 2.55632851e-01 2.55947421e-01 2.56262090e-01 2.56576860e-01 2.56891730e-01 + 2.57206700e-01 2.57521770e-01 2.57836938e-01 2.58152207e-01 2.58467574e-01 + 2.58783040e-01 2.59098605e-01 2.59414268e-01 2.59730029e-01 2.60045889e-01 + 2.60361847e-01 2.60677902e-01 2.60994055e-01 2.61310305e-01 2.61626652e-01 + 2.61943096e-01 2.62259637e-01 2.62576275e-01 2.62893009e-01 2.63209839e-01 + 2.63526765e-01 2.63843787e-01 2.64160905e-01 2.64478118e-01 2.64795426e-01 + 2.65112830e-01 2.65430328e-01 2.65747921e-01 2.66065608e-01 2.66383390e-01 + 2.66701265e-01 2.67019235e-01 2.67337298e-01 2.67655455e-01 2.67973706e-01 + 2.68292049e-01 2.68610485e-01 2.68929014e-01 2.69247636e-01 2.69566350e-01 + 2.69885156e-01 2.70204055e-01 2.70523045e-01 2.70842127e-01 2.71161300e-01 + 2.71480564e-01 2.71799920e-01 2.72119366e-01 2.72438903e-01 2.72758531e-01 + 2.73078249e-01 2.73398057e-01 2.73717955e-01 2.74037942e-01 2.74358019e-01 + 2.74678186e-01 2.74998442e-01 2.75318787e-01 2.75639220e-01 2.75959743e-01 + 2.76280353e-01 2.76601052e-01 2.76921839e-01 2.77242714e-01 2.77563676e-01 + 2.77884726e-01 2.78205864e-01 2.78527088e-01 2.78848399e-01 2.79169798e-01 + 2.79491282e-01 2.79812853e-01 2.80134510e-01 2.80456254e-01 2.80778083e-01 + 2.81099997e-01 2.81421997e-01 2.81744083e-01 2.82066253e-01 2.82388508e-01 + 2.82710848e-01 2.83033273e-01 2.83355782e-01 2.83678374e-01 2.84001051e-01 + 2.84323812e-01 2.84646656e-01 2.84969584e-01 2.85292594e-01 2.85615688e-01 + 2.85938865e-01 2.86262124e-01 2.86585466e-01 2.86908890e-01 2.87232396e-01 + 2.87555984e-01 2.87879654e-01 2.88203405e-01 2.88527238e-01 2.88851152e-01 + 2.89175147e-01 2.89499222e-01 2.89823378e-01 2.90147615e-01 2.90471932e-01 + 2.90796329e-01 2.91120806e-01 2.91445362e-01 2.91769999e-01 2.92094714e-01 + 2.92419508e-01 2.92744382e-01 2.93069334e-01 2.93394365e-01 2.93719474e-01 + 2.94044662e-01 2.94369927e-01 2.94695271e-01 2.95020692e-01 2.95346191e-01 + 2.95671767e-01 2.95997420e-01 2.96323150e-01 2.96648956e-01 2.96974840e-01 + 2.97300799e-01 2.97626835e-01 2.97952947e-01 2.98279135e-01 2.98605399e-01 + 2.98931738e-01 2.99258152e-01 2.99584642e-01 2.99911206e-01 3.00237845e-01 + 3.00564559e-01 3.00891347e-01 3.01218209e-01 3.01545146e-01 3.01872156e-01 + 3.02199240e-01 3.02526398e-01 3.02853628e-01 3.03180932e-01 3.03508309e-01 + 3.03835759e-01 3.04163281e-01 3.04490876e-01 3.04818543e-01 3.05146281e-01 + 3.05474092e-01 3.05801975e-01 3.06129929e-01 3.06457954e-01 3.06786051e-01 + 3.07114218e-01 3.07442456e-01 3.07770765e-01 3.08099145e-01 3.08427594e-01 + 3.08756114e-01 3.09084703e-01 3.09413363e-01 3.09742091e-01 3.10070890e-01 + 3.10399757e-01 3.10728693e-01 3.11057699e-01 3.11386772e-01 3.11715915e-01 + 3.12045125e-01 3.12374404e-01 3.12703751e-01 3.13033165e-01 3.13362647e-01 + 3.13692197e-01 3.14021813e-01 3.14351497e-01 3.14681248e-01 3.15011065e-01 + 3.15340949e-01 3.15670899e-01 3.16000915e-01 3.16330997e-01 3.16661145e-01 + 3.16991359e-01 3.17321638e-01 3.17651983e-01 3.17982392e-01 3.18312867e-01 + 3.18643406e-01 3.18974010e-01 3.19304678e-01 3.19635411e-01 3.19966207e-01 + 3.20297067e-01 3.20627992e-01 3.20958979e-01 3.21290030e-01 3.21621144e-01 + 3.21952321e-01 3.22283561e-01 3.22614864e-01 3.22946229e-01 3.23277656e-01 + 3.23609146e-01 3.23940697e-01 3.24272310e-01 3.24603985e-01 3.24935721e-01 + 3.25267519e-01 3.25599377e-01 3.25931297e-01 3.26263277e-01 3.26595317e-01 + 3.26927419e-01 3.27259580e-01 3.27591801e-01 3.27924082e-01 3.28256423e-01 + 3.28588824e-01 3.28921283e-01 3.29253802e-01 3.29586380e-01 3.29919017e-01 + 3.30251712e-01 3.30584466e-01 3.30917278e-01 3.31250149e-01 3.31583077e-01 + 3.31916063e-01 3.32249107e-01 3.32582208e-01 3.32915366e-01 3.33248582e-01 + 3.33581854e-01 3.33915183e-01 3.34248569e-01 3.34582011e-01 3.34915510e-01 + 3.35249064e-01 3.35582675e-01 3.35916341e-01 3.36250062e-01 3.36583839e-01 + 3.36917672e-01 3.37251559e-01 3.37585501e-01 3.37919498e-01 3.38253550e-01 + 3.38587656e-01 3.38921816e-01 3.39256030e-01 3.39590298e-01 3.39924620e-01 + 3.40258995e-01 3.40593423e-01 3.40927905e-01 3.41262440e-01 3.41597027e-01 + 3.41931667e-01 3.42266360e-01 3.42601105e-01 3.42935903e-01 3.43270752e-01 + 3.43605653e-01 3.43940606e-01 3.44275610e-01 3.44610666e-01 3.44945772e-01 + 3.45280930e-01 3.45616139e-01 3.45951398e-01 3.46286708e-01 3.46622068e-01 + 3.46957478e-01 3.47292938e-01 3.47628448e-01 3.47964008e-01 3.48299617e-01 + 3.48635275e-01 3.48970983e-01 3.49306740e-01 3.49642545e-01 3.49978399e-01 + 3.50314302e-01 3.50650253e-01 3.50986252e-01 3.51322299e-01 3.51658394e-01 + 3.51994536e-01 3.52330726e-01 3.52666964e-01 3.53003248e-01 3.53339580e-01 + 3.53675958e-01 3.54012383e-01 3.54348855e-01 3.54685373e-01 3.55021937e-01 + 3.55358547e-01 3.55695203e-01 3.56031904e-01 3.56368651e-01 3.56705444e-01 + 3.57042281e-01 3.57379164e-01 3.57716092e-01 3.58053064e-01 3.58390081e-01 + 3.58727142e-01 3.59064247e-01 3.59401397e-01 3.59738590e-01 3.60075827e-01 + 3.60413107e-01 3.60750431e-01 3.61087799e-01 3.61425209e-01 3.61762662e-01 + 3.62100158e-01 3.62437696e-01 3.62775277e-01 3.63112900e-01 3.63450566e-01 + 3.63788273e-01 3.64126022e-01 3.64463812e-01 3.64801645e-01 3.65139518e-01 + 3.65477432e-01 3.65815388e-01 3.66153384e-01 3.66491421e-01 3.66829498e-01 + 3.67167616e-01 3.67505774e-01 3.67843971e-01 3.68182209e-01 3.68520487e-01 + 3.68858803e-01 3.69197160e-01 3.69535555e-01 3.69873990e-01 3.70212463e-01 + 3.70550975e-01 3.70889526e-01 3.71228115e-01 3.71566742e-01 3.71905408e-01 + 3.72244111e-01 3.72582852e-01 3.72921631e-01 3.73260447e-01 3.73599300e-01 + 3.73938191e-01 3.74277119e-01 3.74616083e-01 3.74955084e-01 3.75294122e-01 + 3.75633196e-01 3.75972306e-01 3.76311452e-01 3.76650634e-01 3.76989852e-01 + 3.77329105e-01 3.77668394e-01 3.78007718e-01 3.78347077e-01 3.78686471e-01 + 3.79025899e-01 3.79365363e-01 3.79704861e-01 3.80044393e-01 3.80383959e-01 + 3.80723559e-01 3.81063194e-01 3.81402861e-01 3.81742563e-01 3.82082298e-01 + 3.82422065e-01 3.82761866e-01 3.83101700e-01 3.83441567e-01 3.83781466e-01 + 3.84121398e-01 3.84461362e-01 3.84801358e-01 3.85141386e-01 3.85481446e-01 + 3.85821538e-01 3.86161661e-01 3.86501816e-01 3.86842001e-01 3.87182218e-01 + 3.87522466e-01 3.87862744e-01 3.88203053e-01 3.88543393e-01 3.88883763e-01 + 3.89224162e-01 3.89564592e-01 3.89905052e-01 3.90245541e-01 3.90586060e-01 + 3.90926609e-01 3.91267186e-01 3.91607793e-01 3.91948428e-01 3.92289093e-01 + 3.92629785e-01 3.92970507e-01 3.93311256e-01 3.93652034e-01 3.93992840e-01 + 3.94333674e-01 3.94674535e-01 3.95015424e-01 3.95356341e-01 3.95697284e-01 + 3.96038255e-01 3.96379253e-01 3.96720277e-01 3.97061328e-01 3.97402406e-01 + 3.97743510e-01 3.98084640e-01 3.98425796e-01 3.98766978e-01 3.99108186e-01 + 3.99449420e-01 3.99790679e-01 4.00131963e-01 4.00473272e-01 4.00814607e-01 + 4.01155966e-01 4.01497350e-01 4.01838759e-01 4.02180192e-01 4.02521649e-01 + 4.02863130e-01 4.03204636e-01 4.03546165e-01 4.03887718e-01 4.04229294e-01 + 4.04570894e-01 4.04912517e-01 4.05254163e-01 4.05595832e-01 4.05937524e-01 + 4.06279238e-01 4.06620975e-01 4.06962734e-01 4.07304516e-01 4.07646319e-01 + 4.07988145e-01 4.08329992e-01 4.08671861e-01 4.09013751e-01 4.09355663e-01 + 4.09697596e-01 4.10039549e-01 4.10381524e-01 4.10723520e-01 4.11065536e-01 + 4.11407572e-01 4.11749629e-01 4.12091706e-01 4.12433803e-01 4.12775920e-01 + 4.13118057e-01 4.13460213e-01 4.13802389e-01 4.14144583e-01 4.14486798e-01 + 4.14829031e-01 4.15171283e-01 4.15513553e-01 4.15855843e-01 4.16198150e-01 + 4.16540476e-01 4.16882821e-01 4.17225183e-01 4.17567563e-01 4.17909961e-01 + 4.18252376e-01 4.18594809e-01 4.18937259e-01 4.19279726e-01 4.19622210e-01 + 4.19964711e-01 4.20307229e-01 4.20649763e-01 4.20992314e-01 4.21334881e-01 + 4.21677465e-01 4.22020064e-01 4.22362679e-01 4.22705310e-01 4.23047957e-01 + 4.23390619e-01 4.23733296e-01 4.24075988e-01 4.24418696e-01 4.24761418e-01 + 4.25104155e-01 4.25446907e-01 4.25789673e-01 4.26132454e-01 4.26475249e-01 + 4.26818057e-01 4.27160880e-01 4.27503717e-01 4.27846567e-01 4.28189430e-01 + 4.28532307e-01 4.28875197e-01 4.29218101e-01 4.29561017e-01 4.29903946e-01 + 4.30246888e-01 4.30589842e-01 4.30932808e-01 4.31275787e-01 4.31618778e-01 + 4.31961781e-01 4.32304796e-01 4.32647822e-01 4.32990860e-01 4.33333909e-01 + 4.33676970e-01 4.34020042e-01 4.34363125e-01 4.34706219e-01 4.35049323e-01 + 4.35392438e-01 4.35735564e-01 4.36078700e-01 4.36421846e-01 4.36765002e-01 + 4.37108168e-01 4.37451344e-01 4.37794529e-01 4.38137724e-01 4.38480929e-01 + 4.38824142e-01 4.39167365e-01 4.39510597e-01 4.39853837e-01 4.40197087e-01 + 4.40540345e-01 4.40883611e-01 4.41226885e-01 4.41570168e-01 4.41913459e-01 + 4.42256758e-01 4.42600064e-01 4.42943378e-01 4.43286700e-01 4.43630029e-01 + 4.43973365e-01 4.44316708e-01 4.44660058e-01 4.45003416e-01 4.45346779e-01 + 4.45690150e-01 4.46033526e-01 4.46376910e-01 4.46720299e-01 4.47063694e-01 + 4.47407095e-01 4.47750502e-01 4.48093915e-01 4.48437333e-01 4.48780757e-01 + 4.49124185e-01 4.49467619e-01 4.49811058e-01 4.50154502e-01 4.50497950e-01 + 4.50841403e-01 4.51184861e-01 4.51528322e-01 4.51871788e-01 4.52215259e-01 + 4.52558733e-01 4.52902210e-01 4.53245692e-01 4.53589177e-01 4.53932665e-01 + 4.54276157e-01 4.54619652e-01 4.54963150e-01 4.55306651e-01 4.55650154e-01 + 2.08130000e-04 2.08281191e-04 2.08734762e-04 2.09490714e-04 2.10549046e-04 + 2.11909757e-04 2.13572846e-04 2.15538310e-04 2.17806148e-04 2.20376358e-04 + 2.23248936e-04 2.26423882e-04 2.29901190e-04 2.33680858e-04 2.37762883e-04 + 2.42147260e-04 2.46833984e-04 2.51823051e-04 2.57114457e-04 2.62708196e-04 + 2.68604263e-04 2.74802652e-04 2.81303356e-04 2.88106370e-04 2.95211687e-04 + 3.02619299e-04 3.10329200e-04 3.18341382e-04 3.26655837e-04 3.35272557e-04 + 3.44191533e-04 3.53412758e-04 3.62936221e-04 3.72761913e-04 3.82889825e-04 + 3.93319947e-04 4.04052269e-04 4.15086779e-04 4.26423468e-04 4.38062324e-04 + 4.50003336e-04 4.62246492e-04 4.74791780e-04 4.87639188e-04 5.00788703e-04 + 5.14240312e-04 5.27994002e-04 5.42049760e-04 5.56407572e-04 5.71067423e-04 + 5.86029300e-04 6.01293187e-04 6.16859071e-04 6.32726934e-04 6.48896763e-04 + 6.65368541e-04 6.82142252e-04 6.99217880e-04 7.16595407e-04 7.34274817e-04 + 7.52256092e-04 7.70539216e-04 7.89124169e-04 8.08010934e-04 8.27199493e-04 + 8.46689825e-04 8.66481913e-04 8.86575737e-04 9.06971278e-04 9.27668514e-04 + 9.48667427e-04 9.69967995e-04 9.91570198e-04 1.01347401e-03 1.03567942e-03 + 1.05818640e-03 1.08099493e-03 1.10410498e-03 1.12751654e-03 1.15122957e-03 + 1.17524406e-03 1.19955999e-03 1.22417733e-03 1.24909605e-03 1.27431613e-03 + 1.29983755e-03 1.32566029e-03 1.35178430e-03 1.37820958e-03 1.40493610e-03 + 1.43196382e-03 1.45929272e-03 1.48692278e-03 1.51485397e-03 1.54308626e-03 + 1.57161963e-03 1.60045404e-03 1.62958946e-03 1.65902588e-03 1.68876325e-03 + 1.71880156e-03 1.74914077e-03 1.77978085e-03 1.81072177e-03 1.84196351e-03 + 1.87350602e-03 1.90534929e-03 1.93749327e-03 1.96993795e-03 2.00268328e-03 + 2.03572923e-03 2.06907577e-03 2.10272288e-03 2.13667051e-03 2.17091863e-03 + 2.20546721e-03 2.24031622e-03 2.27546562e-03 2.31091538e-03 2.34666546e-03 + 2.38271583e-03 2.41906645e-03 2.45571729e-03 2.49266831e-03 2.52991947e-03 + 2.56747075e-03 2.60532209e-03 2.64347347e-03 2.68192485e-03 2.72067619e-03 + 2.75972745e-03 2.79907859e-03 2.83872959e-03 2.87868038e-03 2.91893095e-03 + 2.95948125e-03 3.00033123e-03 3.04148087e-03 3.08293011e-03 3.12467892e-03 + 3.16672726e-03 3.20907509e-03 3.25172236e-03 3.29466904e-03 3.33791508e-03 + 3.38146044e-03 3.42530507e-03 3.46944894e-03 3.51389201e-03 3.55863422e-03 + 3.60367554e-03 3.64901591e-03 3.69465531e-03 3.74059367e-03 3.78683096e-03 + 3.83336714e-03 3.88020215e-03 3.92733595e-03 3.97476850e-03 4.02249975e-03 + 4.07052965e-03 4.11885815e-03 4.16748522e-03 4.21641079e-03 4.26563483e-03 + 4.31515728e-03 4.36497811e-03 4.41509725e-03 4.46551466e-03 4.51623029e-03 + 4.56724409e-03 4.61855601e-03 4.67016601e-03 4.72207403e-03 4.77428002e-03 + 4.82678393e-03 4.87958570e-03 4.93268530e-03 4.98608266e-03 5.03977774e-03 + 5.09377048e-03 5.14806083e-03 5.20264873e-03 5.25753414e-03 5.31271700e-03 + 5.36819725e-03 5.42397485e-03 5.48004973e-03 5.53642185e-03 5.59309115e-03 + 5.65005757e-03 5.70732106e-03 5.76488157e-03 5.82273903e-03 5.88089339e-03 + 5.93934459e-03 5.99809258e-03 6.05713731e-03 6.11647870e-03 6.17611671e-03 + 6.23605128e-03 6.29628235e-03 6.35680986e-03 6.41763375e-03 6.47875396e-03 + 6.54017044e-03 6.60188312e-03 6.66389194e-03 6.72619685e-03 6.78879778e-03 + 6.85169468e-03 6.91488748e-03 6.97837611e-03 7.04216053e-03 7.10624066e-03 + 7.17061645e-03 7.23528783e-03 7.30025474e-03 7.36551712e-03 7.43107490e-03 + 7.49692802e-03 7.56307641e-03 7.62952002e-03 7.69625878e-03 7.76329262e-03 + 7.83062147e-03 7.89824528e-03 7.96616398e-03 8.03437750e-03 8.10288577e-03 + 8.17168874e-03 8.24078632e-03 8.31017847e-03 8.37986510e-03 8.44984615e-03 + 8.52012155e-03 8.59069124e-03 8.66155515e-03 8.73271321e-03 8.80416535e-03 + 8.87591149e-03 8.94795158e-03 9.02028554e-03 9.09291331e-03 9.16583480e-03 + 9.23904995e-03 9.31255870e-03 9.38636096e-03 9.46045668e-03 9.53484577e-03 + 9.60952816e-03 9.68450379e-03 9.75977258e-03 9.83533445e-03 9.91118934e-03 + 9.98733717e-03 1.00637779e-02 1.01405114e-02 1.02175376e-02 1.02948564e-02 + 1.03724679e-02 1.04503718e-02 1.05285681e-02 1.06070568e-02 1.06858378e-02 + 1.07649109e-02 1.08442762e-02 1.09239335e-02 1.10038828e-02 1.10841240e-02 + 1.11646570e-02 1.12454817e-02 1.13265980e-02 1.14080060e-02 1.14897054e-02 + 1.15716963e-02 1.16539785e-02 1.17365519e-02 1.18194166e-02 1.19025723e-02 + 1.19860191e-02 1.20697568e-02 1.21537854e-02 1.22381047e-02 1.23227148e-02 + 1.24076155e-02 1.24928067e-02 1.25782883e-02 1.26640604e-02 1.27501227e-02 + 1.28364752e-02 1.29231179e-02 1.30100506e-02 1.30972732e-02 1.31847858e-02 + 1.32725881e-02 1.33606801e-02 1.34490618e-02 1.35377329e-02 1.36266936e-02 + 1.37159436e-02 1.38054829e-02 1.38953113e-02 1.39854289e-02 1.40758355e-02 + 1.41665311e-02 1.42575155e-02 1.43487886e-02 1.44403504e-02 1.45322008e-02 + 1.46243398e-02 1.47167671e-02 1.48094827e-02 1.49024866e-02 1.49957786e-02 + 1.50893587e-02 1.51832267e-02 1.52773826e-02 1.53718263e-02 1.54665577e-02 + 1.55615767e-02 1.56568832e-02 1.57524771e-02 1.58483584e-02 1.59445269e-02 + 1.60409825e-02 1.61377252e-02 1.62347549e-02 1.63320714e-02 1.64296747e-02 + 1.65275647e-02 1.66257413e-02 1.67242043e-02 1.68229538e-02 1.69219896e-02 + 1.70213116e-02 1.71209197e-02 1.72208138e-02 1.73209939e-02 1.74214598e-02 + 1.75222114e-02 1.76232487e-02 1.77245715e-02 1.78261798e-02 1.79280734e-02 + 1.80302523e-02 1.81327163e-02 1.82354654e-02 1.83384994e-02 1.84418184e-02 + 1.85454220e-02 1.86493104e-02 1.87534833e-02 1.88579407e-02 1.89626824e-02 + 1.90677084e-02 1.91730186e-02 1.92786129e-02 1.93844911e-02 1.94906532e-02 + 1.95970991e-02 1.97038286e-02 1.98108417e-02 1.99181382e-02 2.00257182e-02 + 2.01335813e-02 2.02417277e-02 2.03501571e-02 2.04588694e-02 2.05678646e-02 + 2.06771425e-02 2.07867031e-02 2.08965462e-02 2.10066717e-02 2.11170796e-02 + 2.12277697e-02 2.13387419e-02 2.14499962e-02 2.15615323e-02 2.16733503e-02 + 2.17854499e-02 2.18978311e-02 2.20104938e-02 2.21234379e-02 2.22366633e-02 + 2.23501698e-02 2.24639574e-02 2.25780260e-02 2.26923753e-02 2.28070055e-02 + 2.29219162e-02 2.30371074e-02 2.31525791e-02 2.32683311e-02 2.33843632e-02 + 2.35006755e-02 2.36172677e-02 2.37341397e-02 2.38512915e-02 2.39687230e-02 + 2.40864339e-02 2.42044243e-02 2.43226940e-02 2.44412429e-02 2.45600709e-02 + 2.46791779e-02 2.47985637e-02 2.49182282e-02 2.50381714e-02 2.51583931e-02 + 2.52788932e-02 2.53996717e-02 2.55207283e-02 2.56420629e-02 2.57636755e-02 + 2.58855660e-02 2.60077341e-02 2.61301799e-02 2.62529032e-02 2.63759039e-02 + 2.64991818e-02 2.66227368e-02 2.67465689e-02 2.68706779e-02 2.69950637e-02 + 2.71197262e-02 2.72446653e-02 2.73698808e-02 2.74953726e-02 2.76211406e-02 + 2.77471848e-02 2.78735049e-02 2.80001009e-02 2.81269726e-02 2.82541199e-02 + 2.83815427e-02 2.85092409e-02 2.86372144e-02 2.87654630e-02 2.88939867e-02 + 2.90227852e-02 2.91518585e-02 2.92812065e-02 2.94108290e-02 2.95407260e-02 + 2.96708972e-02 2.98013426e-02 2.99320621e-02 3.00630555e-02 3.01943227e-02 + 3.03258636e-02 3.04576781e-02 3.05897660e-02 3.07221272e-02 3.08547616e-02 + 3.09876691e-02 3.11208496e-02 3.12543028e-02 3.13880288e-02 3.15220273e-02 + 3.16562983e-02 3.17908416e-02 3.19256571e-02 3.20607447e-02 3.21961042e-02 + 3.23317356e-02 3.24676386e-02 3.26038132e-02 3.27402593e-02 3.28769766e-02 + 3.30139652e-02 3.31512248e-02 3.32887554e-02 3.34265567e-02 3.35646288e-02 + 3.37029714e-02 3.38415844e-02 3.39804677e-02 3.41196212e-02 3.42590447e-02 + 3.43987381e-02 3.45387013e-02 3.46789341e-02 3.48194365e-02 3.49602082e-02 + 3.51012492e-02 3.52425593e-02 3.53841384e-02 3.55259864e-02 3.56681031e-02 + 3.58104884e-02 3.59531422e-02 3.60960643e-02 3.62392547e-02 3.63827131e-02 + 3.65264394e-02 3.66704335e-02 3.68146954e-02 3.69592247e-02 3.71040215e-02 + 3.72490856e-02 3.73944167e-02 3.75400149e-02 3.76858800e-02 3.78320118e-02 + 3.79784102e-02 3.81250751e-02 3.82720063e-02 3.84192037e-02 3.85666672e-02 + 3.87143966e-02 3.88623918e-02 3.90106526e-02 3.91591790e-02 3.93079707e-02 + 3.94570277e-02 3.96063498e-02 3.97559369e-02 3.99057888e-02 4.00559054e-02 + 4.02062865e-02 4.03569321e-02 4.05078419e-02 4.06590159e-02 4.08104539e-02 + 4.09621558e-02 4.11141214e-02 4.12663506e-02 4.14188432e-02 4.15715991e-02 + 4.17246182e-02 4.18779004e-02 4.20314454e-02 4.21852532e-02 4.23393235e-02 + 4.24936564e-02 4.26482515e-02 4.28031089e-02 4.29582283e-02 4.31136096e-02 + 4.32692526e-02 4.34251573e-02 4.35813234e-02 4.37377508e-02 4.38944395e-02 + 4.40513892e-02 4.42085998e-02 4.43660711e-02 4.45238031e-02 4.46817956e-02 + 4.48400483e-02 4.49985613e-02 4.51573343e-02 4.53163671e-02 4.54756598e-02 + 4.56352120e-02 4.57950237e-02 4.59550947e-02 4.61154249e-02 4.62760141e-02 + 4.64368622e-02 4.65979690e-02 4.67593344e-02 4.69209582e-02 4.70828403e-02 + 4.72449806e-02 4.74073789e-02 4.75700350e-02 4.77329488e-02 4.78961202e-02 + 4.80595489e-02 4.82232350e-02 4.83871781e-02 4.85513782e-02 4.87158351e-02 + 4.88805487e-02 4.90455188e-02 4.92107453e-02 4.93762280e-02 4.95419667e-02 + 4.97079614e-02 4.98742118e-02 5.00407179e-02 5.02074794e-02 5.03744963e-02 + 5.05417683e-02 5.07092953e-02 5.08770772e-02 5.10451138e-02 5.12134049e-02 + 5.13819505e-02 5.15507503e-02 5.17198043e-02 5.18891121e-02 5.20586738e-02 + 5.22284892e-02 5.23985580e-02 5.25688802e-02 5.27394555e-02 5.29102839e-02 + 5.30813652e-02 5.32526992e-02 5.34242858e-02 5.35961248e-02 5.37682161e-02 + 5.39405595e-02 5.41131548e-02 5.42860020e-02 5.44591008e-02 5.46324511e-02 + 5.48060527e-02 5.49799055e-02 5.51540094e-02 5.53283641e-02 5.55029695e-02 + 5.56778255e-02 5.58529319e-02 5.60282885e-02 5.62038952e-02 5.63797519e-02 + 5.65558583e-02 5.67322144e-02 5.69088199e-02 5.70856747e-02 5.72627786e-02 + 5.74401316e-02 5.76177334e-02 5.77955838e-02 5.79736828e-02 5.81520301e-02 + 5.83306256e-02 5.85094691e-02 5.86885605e-02 5.88678997e-02 5.90474864e-02 + 5.92273205e-02 5.94074018e-02 5.95877302e-02 5.97683055e-02 5.99491276e-02 + 6.01301963e-02 6.03115114e-02 6.04930728e-02 6.06748803e-02 6.08569338e-02 + 6.10392330e-02 6.12217779e-02 6.14045683e-02 6.15876039e-02 6.17708848e-02 + 6.19544105e-02 6.21381812e-02 6.23221964e-02 6.25064562e-02 6.26909603e-02 + 6.28757085e-02 6.30607008e-02 6.32459369e-02 6.34314167e-02 6.36171400e-02 + 6.38031067e-02 6.39893165e-02 6.41757694e-02 6.43624651e-02 6.45494036e-02 + 6.47365845e-02 6.49240078e-02 6.51116734e-02 6.52995809e-02 6.54877303e-02 + 6.56761215e-02 6.58647541e-02 6.60536282e-02 6.62427434e-02 6.64320997e-02 + 6.66216969e-02 6.68115348e-02 6.70016132e-02 6.71919320e-02 6.73824910e-02 + 6.75732900e-02 6.77643289e-02 6.79556075e-02 6.81471257e-02 6.83388832e-02 + 6.85308799e-02 6.87231157e-02 6.89155904e-02 6.91083037e-02 6.93012556e-02 + 6.94944458e-02 6.96878742e-02 6.98815407e-02 7.00754450e-02 7.02695870e-02 + 7.04639665e-02 7.06585833e-02 7.08534374e-02 7.10485284e-02 7.12438563e-02 + 7.14394208e-02 7.16352219e-02 7.18312593e-02 7.20275328e-02 7.22240423e-02 + 7.24207876e-02 7.26177686e-02 7.28149851e-02 7.30124368e-02 7.32101237e-02 + 7.34080456e-02 7.36062022e-02 7.38045935e-02 7.40032192e-02 7.42020791e-02 + 7.44011732e-02 7.46005012e-02 7.48000630e-02 7.49998583e-02 7.51998870e-02 + 7.54001490e-02 7.56006441e-02 7.58013720e-02 7.60023326e-02 7.62035258e-02 + 7.64049514e-02 7.66066092e-02 7.68084989e-02 7.70106206e-02 7.72129739e-02 + 7.74155587e-02 7.76183748e-02 7.78214221e-02 7.80247003e-02 7.82282094e-02 + 7.84319490e-02 7.86359192e-02 7.88401196e-02 7.90445501e-02 7.92492105e-02 + 7.94541007e-02 7.96592204e-02 7.98645695e-02 8.00701479e-02 8.02759553e-02 + 8.04819916e-02 8.06882565e-02 8.08947500e-02 8.11014718e-02 8.13084218e-02 + 8.15155998e-02 8.17230055e-02 8.19306389e-02 8.21384998e-02 8.23465879e-02 + 8.25549031e-02 8.27634452e-02 8.29722141e-02 8.31812095e-02 8.33904313e-02 + 8.35998794e-02 8.38095534e-02 8.40194533e-02 8.42295789e-02 8.44399299e-02 + 8.46505063e-02 8.48613078e-02 8.50723343e-02 8.52835855e-02 8.54950613e-02 + 8.57067616e-02 8.59186860e-02 8.61308346e-02 8.63432070e-02 8.65558031e-02 + 8.67686227e-02 8.69816656e-02 8.71949318e-02 8.74084208e-02 8.76221327e-02 + 8.78360672e-02 8.80502241e-02 8.82646033e-02 8.84792045e-02 8.86940276e-02 + 8.89090725e-02 8.91243388e-02 8.93398265e-02 8.95555354e-02 8.97714652e-02 + 8.99876159e-02 9.02039871e-02 9.04205788e-02 9.06373908e-02 9.08544228e-02 + 9.10716747e-02 9.12891463e-02 9.15068374e-02 9.17247478e-02 9.19428774e-02 + 9.21612260e-02 9.23797934e-02 9.25985793e-02 9.28175837e-02 9.30368064e-02 + 9.32562470e-02 9.34759056e-02 9.36957818e-02 9.39158756e-02 9.41361866e-02 + 9.43567148e-02 9.45774599e-02 9.47984219e-02 9.50196003e-02 9.52409952e-02 + 9.54626063e-02 9.56844334e-02 9.59064764e-02 9.61287350e-02 9.63512090e-02 + 9.65738984e-02 9.67968029e-02 9.70199222e-02 9.72432563e-02 9.74668050e-02 + 9.76905680e-02 9.79145452e-02 9.81387363e-02 9.83631413e-02 9.85877598e-02 + 9.88125918e-02 9.90376370e-02 9.92628953e-02 9.94883665e-02 9.97140503e-02 + 9.99399466e-02 1.00166055e-01 1.00392376e-01 1.00618909e-01 1.00845653e-01 + 1.01072609e-01 1.01299776e-01 1.01527155e-01 1.01754744e-01 1.01982545e-01 + 1.02210556e-01 1.02438777e-01 1.02667209e-01 1.02895850e-01 1.03124702e-01 + 1.03353763e-01 1.03583034e-01 1.03812514e-01 1.04042203e-01 1.04272101e-01 + 1.04502207e-01 1.04732523e-01 1.04963046e-01 1.05193778e-01 1.05424718e-01 + 1.05655865e-01 1.05887221e-01 1.06118783e-01 1.06350553e-01 1.06582530e-01 + 1.06814713e-01 1.07047104e-01 1.07279701e-01 1.07512504e-01 1.07745513e-01 + 1.07978728e-01 1.08212148e-01 1.08445775e-01 1.08679606e-01 1.08913643e-01 + 1.09147884e-01 1.09382331e-01 1.09616982e-01 1.09851837e-01 1.10086896e-01 + 1.10322160e-01 1.10557627e-01 1.10793298e-01 1.11029172e-01 1.11265249e-01 + 1.11501530e-01 1.11738013e-01 1.11974699e-01 1.12211587e-01 1.12448678e-01 + 1.12685971e-01 1.12923465e-01 1.13161162e-01 1.13399059e-01 1.13637158e-01 + 1.13875458e-01 1.14113960e-01 1.14352661e-01 1.14591564e-01 1.14830666e-01 + 1.15069969e-01 1.15309472e-01 1.15549174e-01 1.15789076e-01 1.16029178e-01 + 1.16269478e-01 1.16509978e-01 1.16750676e-01 1.16991573e-01 1.17232669e-01 + 1.17473962e-01 1.17715454e-01 1.17957143e-01 1.18199030e-01 1.18441115e-01 + 1.18683397e-01 1.18925875e-01 1.19168551e-01 1.19411423e-01 1.19654492e-01 + 1.19897757e-01 1.20141218e-01 1.20384875e-01 1.20628728e-01 1.20872776e-01 + 1.21117020e-01 1.21361458e-01 1.21606092e-01 1.21850920e-01 1.22095943e-01 + 1.22341160e-01 1.22586571e-01 1.22832176e-01 1.23077975e-01 1.23323967e-01 + 1.23570153e-01 1.23816532e-01 1.24063104e-01 1.24309869e-01 1.24556826e-01 + 1.24803975e-01 1.25051317e-01 1.25298851e-01 1.25546576e-01 1.25794494e-01 + 1.26042602e-01 1.26290902e-01 1.26539393e-01 1.26788074e-01 1.27036946e-01 + 1.27286009e-01 1.27535261e-01 1.27784704e-01 1.28034337e-01 1.28284159e-01 + 1.28534171e-01 1.28784372e-01 1.29034762e-01 1.29285340e-01 1.29536108e-01 + 1.29787064e-01 1.30038208e-01 1.30289540e-01 1.30541060e-01 1.30792768e-01 + 1.31044663e-01 1.31296746e-01 1.31549015e-01 1.31801471e-01 1.32054115e-01 + 1.32306944e-01 1.32559960e-01 1.32813162e-01 1.33066550e-01 1.33320123e-01 + 1.33573882e-01 1.33827826e-01 1.34081956e-01 1.34336270e-01 1.34590769e-01 + 1.34845452e-01 1.35100320e-01 1.35355372e-01 1.35610608e-01 1.35866027e-01 + 1.36121630e-01 1.36377417e-01 1.36633386e-01 1.36889538e-01 1.37145873e-01 + 1.37402391e-01 1.37659091e-01 1.37915973e-01 1.38173037e-01 1.38430283e-01 + 1.38687710e-01 1.38945318e-01 1.39203108e-01 1.39461079e-01 1.39719230e-01 + 1.39977562e-01 1.40236074e-01 1.40494766e-01 1.40753639e-01 1.41012691e-01 + 1.41271922e-01 1.41531333e-01 1.41790923e-01 1.42050692e-01 1.42310640e-01 + 1.42570766e-01 1.42831071e-01 1.43091554e-01 1.43352214e-01 1.43613053e-01 + 1.43874069e-01 1.44135262e-01 1.44396633e-01 1.44658180e-01 1.44919904e-01 + 1.45181805e-01 1.45443882e-01 1.45706135e-01 1.45968565e-01 1.46231170e-01 + 1.46493950e-01 1.46756906e-01 1.47020037e-01 1.47283343e-01 1.47546824e-01 + 1.47810479e-01 1.48074308e-01 1.48338312e-01 1.48602490e-01 1.48866841e-01 + 1.49131366e-01 1.49396065e-01 1.49660936e-01 1.49925981e-01 1.50191198e-01 + 1.50456588e-01 1.50722150e-01 1.50987884e-01 1.51253790e-01 1.51519868e-01 + 1.51786118e-01 1.52052539e-01 1.52319131e-01 1.52585894e-01 1.52852827e-01 + 1.53119932e-01 1.53387206e-01 1.53654651e-01 1.53922266e-01 1.54190050e-01 + 1.54458004e-01 1.54726127e-01 1.54994420e-01 1.55262881e-01 1.55531511e-01 + 1.55800310e-01 1.56069277e-01 1.56338412e-01 1.56607715e-01 1.56877186e-01 + 1.57146824e-01 1.57416630e-01 1.57686603e-01 1.57956743e-01 1.58227049e-01 + 1.58497522e-01 1.58768161e-01 1.59038967e-01 1.59309938e-01 1.59581075e-01 + 1.59852378e-01 1.60123846e-01 1.60395479e-01 1.60667277e-01 1.60939240e-01 + 1.61211367e-01 1.61483659e-01 1.61756114e-01 1.62028734e-01 1.62301517e-01 + 1.62574464e-01 1.62847574e-01 1.63120847e-01 1.63394283e-01 1.63667882e-01 + 1.63941644e-01 1.64215567e-01 1.64489653e-01 1.64763901e-01 1.65038310e-01 + 1.65312881e-01 1.65587613e-01 1.65862506e-01 1.66137560e-01 1.66412775e-01 + 1.66688150e-01 1.66963686e-01 1.67239381e-01 1.67515237e-01 1.67791252e-01 + 1.68067427e-01 1.68343761e-01 1.68620254e-01 1.68896906e-01 1.69173717e-01 + 1.69450686e-01 1.69727813e-01 1.70005098e-01 1.70282542e-01 1.70560143e-01 + 1.70837901e-01 1.71115817e-01 1.71393889e-01 1.71672119e-01 1.71950505e-01 + 1.72229048e-01 1.72507747e-01 1.72786602e-01 1.73065613e-01 1.73344779e-01 + 1.73624101e-01 1.73903579e-01 1.74183211e-01 1.74462998e-01 1.74742940e-01 + 1.75023036e-01 1.75303286e-01 1.75583691e-01 1.75864249e-01 1.76144961e-01 + 1.76425826e-01 1.76706845e-01 1.76988017e-01 1.77269341e-01 1.77550818e-01 + 1.77832448e-01 1.78114229e-01 1.78396163e-01 1.78678248e-01 1.78960486e-01 + 1.79242874e-01 1.79525414e-01 1.79808105e-01 1.80090946e-01 1.80373938e-01 + 1.80657081e-01 1.80940374e-01 1.81223816e-01 1.81507409e-01 1.81791151e-01 + 1.82075043e-01 1.82359084e-01 1.82643273e-01 1.82927612e-01 1.83212099e-01 + 1.83496734e-01 1.83781518e-01 1.84066450e-01 1.84351529e-01 1.84636756e-01 + 1.84922131e-01 1.85207652e-01 1.85493321e-01 1.85779136e-01 1.86065098e-01 + 1.86351206e-01 1.86637461e-01 1.86923861e-01 1.87210407e-01 1.87497099e-01 + 1.87783936e-01 1.88070919e-01 1.88358046e-01 1.88645318e-01 1.88932734e-01 + 1.89220295e-01 1.89508000e-01 1.89795849e-01 1.90083842e-01 1.90371978e-01 + 1.90660258e-01 1.90948681e-01 1.91237246e-01 1.91525955e-01 1.91814806e-01 + 1.92103799e-01 1.92392935e-01 1.92682212e-01 1.92971631e-01 1.93261192e-01 + 1.93550894e-01 1.93840737e-01 1.94130721e-01 1.94420846e-01 1.94711111e-01 + 1.95001517e-01 1.95292063e-01 1.95582748e-01 1.95873574e-01 1.96164539e-01 + 1.96455643e-01 1.96746886e-01 1.97038269e-01 1.97329790e-01 1.97621449e-01 + 1.97913247e-01 1.98205183e-01 1.98497257e-01 1.98789469e-01 1.99081818e-01 + 1.99374304e-01 1.99666928e-01 1.99959688e-01 2.00252585e-01 2.00545619e-01 + 2.00838789e-01 2.01132095e-01 2.01425537e-01 2.01719114e-01 2.02012828e-01 + 2.02306676e-01 2.02600660e-01 2.02894778e-01 2.03189031e-01 2.03483419e-01 + 2.03777941e-01 2.04072597e-01 2.04367387e-01 2.04662311e-01 2.04957368e-01 + 2.05252558e-01 2.05547882e-01 2.05843338e-01 2.06138928e-01 2.06434649e-01 + 2.06730503e-01 2.07026489e-01 2.07322607e-01 2.07618857e-01 2.07915238e-01 + 2.08211750e-01 2.08508394e-01 2.08805168e-01 2.09102073e-01 2.09399109e-01 + 2.09696275e-01 2.09993571e-01 2.10290997e-01 2.10588552e-01 2.10886237e-01 + 2.11184052e-01 2.11481995e-01 2.11780068e-01 2.12078269e-01 2.12376598e-01 + 2.12675056e-01 2.12973642e-01 2.13272356e-01 2.13571197e-01 2.13870166e-01 + 2.14169263e-01 2.14468486e-01 2.14767837e-01 2.15067314e-01 2.15366917e-01 + 2.15666647e-01 2.15966503e-01 2.16266485e-01 2.16566592e-01 2.16866825e-01 + 2.17167184e-01 2.17467667e-01 2.17768276e-01 2.18069009e-01 2.18369866e-01 + 2.18670848e-01 2.18971954e-01 2.19273184e-01 2.19574538e-01 2.19876015e-01 + 2.20177615e-01 2.20479339e-01 2.20781185e-01 2.21083155e-01 2.21385246e-01 + 2.21687460e-01 2.21989797e-01 2.22292255e-01 2.22594835e-01 2.22897536e-01 + 2.23200359e-01 2.23503303e-01 2.23806367e-01 2.24109553e-01 2.24412859e-01 + 2.24716285e-01 2.25019832e-01 2.25323498e-01 2.25627285e-01 2.25931191e-01 + 2.26235216e-01 2.26539360e-01 2.26843623e-01 2.27148005e-01 2.27452506e-01 + 2.27757125e-01 2.28061862e-01 2.28366717e-01 2.28671690e-01 2.28976780e-01 + 2.29281988e-01 2.29587313e-01 2.29892755e-01 2.30198313e-01 2.30503989e-01 + 2.30809780e-01 2.31115688e-01 2.31421712e-01 2.31727852e-01 2.32034107e-01 + 2.32340478e-01 2.32646964e-01 2.32953565e-01 2.33260280e-01 2.33567111e-01 + 2.33874055e-01 2.34181114e-01 2.34488287e-01 2.34795574e-01 2.35102975e-01 + 2.35410489e-01 2.35718116e-01 2.36025856e-01 2.36333709e-01 2.36641675e-01 + 2.36949753e-01 2.37257943e-01 2.37566246e-01 2.37874660e-01 2.38183186e-01 + 2.38491824e-01 2.38800572e-01 2.39109432e-01 2.39418403e-01 2.39727484e-01 + 2.40036676e-01 2.40345978e-01 2.40655391e-01 2.40964913e-01 2.41274545e-01 + 2.41584286e-01 2.41894137e-01 2.42204097e-01 2.42514166e-01 2.42824344e-01 + 2.43134630e-01 2.43445024e-01 2.43755527e-01 2.44066138e-01 2.44376856e-01 + 2.44687682e-01 2.44998615e-01 2.45309656e-01 2.45620803e-01 2.45932058e-01 + 2.46243419e-01 2.46554886e-01 2.46866459e-01 2.47178139e-01 2.47489924e-01 + 2.47801815e-01 2.48113812e-01 2.48425913e-01 2.48738120e-01 2.49050431e-01 + 2.49362848e-01 2.49675368e-01 2.49987993e-01 2.50300722e-01 2.50613555e-01 + 2.50926492e-01 2.51239532e-01 2.51552675e-01 2.51865922e-01 2.52179271e-01 + 2.52492723e-01 2.52806278e-01 2.53119935e-01 2.53433694e-01 2.53747555e-01 + 2.54061518e-01 2.54375582e-01 2.54689748e-01 2.55004015e-01 2.55318383e-01 + 2.55632851e-01 2.55947421e-01 2.56262090e-01 2.56576860e-01 2.56891730e-01 + 2.57206700e-01 2.57521770e-01 2.57836938e-01 2.58152207e-01 2.58467574e-01 + 2.58783040e-01 2.59098605e-01 2.59414268e-01 2.59730029e-01 2.60045889e-01 + 2.60361847e-01 2.60677902e-01 2.60994055e-01 2.61310305e-01 2.61626652e-01 + 2.61943096e-01 2.62259637e-01 2.62576275e-01 2.62893009e-01 2.63209839e-01 + 2.63526765e-01 2.63843787e-01 2.64160905e-01 2.64478118e-01 2.64795426e-01 + 2.65112830e-01 2.65430328e-01 2.65747921e-01 2.66065608e-01 2.66383390e-01 + 2.66701265e-01 2.67019235e-01 2.67337298e-01 2.67655455e-01 2.67973706e-01 + 2.68292049e-01 2.68610485e-01 2.68929014e-01 2.69247636e-01 2.69566350e-01 + 2.69885156e-01 2.70204055e-01 2.70523045e-01 2.70842127e-01 2.71161300e-01 + 2.71480564e-01 2.71799920e-01 2.72119366e-01 2.72438903e-01 2.72758531e-01 + 2.73078249e-01 2.73398057e-01 2.73717955e-01 2.74037942e-01 2.74358019e-01 + 2.74678186e-01 2.74998442e-01 2.75318787e-01 2.75639220e-01 2.75959743e-01 + 2.76280353e-01 2.76601052e-01 2.76921839e-01 2.77242714e-01 2.77563676e-01 + 2.77884726e-01 2.78205864e-01 2.78527088e-01 2.78848399e-01 2.79169798e-01 + 2.79491282e-01 2.79812853e-01 2.80134510e-01 2.80456254e-01 2.80778083e-01 + 2.81099997e-01 2.81421997e-01 2.81744083e-01 2.82066253e-01 2.82388508e-01 + 2.82710848e-01 2.83033273e-01 2.83355782e-01 2.83678374e-01 2.84001051e-01 + 2.84323812e-01 2.84646656e-01 2.84969584e-01 2.85292594e-01 2.85615688e-01 + 2.85938865e-01 2.86262124e-01 2.86585466e-01 2.86908890e-01 2.87232396e-01 + 2.87555984e-01 2.87879654e-01 2.88203405e-01 2.88527238e-01 2.88851152e-01 + 2.89175147e-01 2.89499222e-01 2.89823378e-01 2.90147615e-01 2.90471932e-01 + 2.90796329e-01 2.91120806e-01 2.91445362e-01 2.91769999e-01 2.92094714e-01 + 2.92419508e-01 2.92744382e-01 2.93069334e-01 2.93394365e-01 2.93719474e-01 + 2.94044662e-01 2.94369927e-01 2.94695271e-01 2.95020692e-01 2.95346191e-01 + 2.95671767e-01 2.95997420e-01 2.96323150e-01 2.96648956e-01 2.96974840e-01 + 2.97300799e-01 2.97626835e-01 2.97952947e-01 2.98279135e-01 2.98605399e-01 + 2.98931738e-01 2.99258152e-01 2.99584642e-01 2.99911206e-01 3.00237845e-01 + 3.00564559e-01 3.00891347e-01 3.01218209e-01 3.01545146e-01 3.01872156e-01 + 3.02199240e-01 3.02526398e-01 3.02853628e-01 3.03180932e-01 3.03508309e-01 + 3.03835759e-01 3.04163281e-01 3.04490876e-01 3.04818543e-01 3.05146281e-01 + 3.05474092e-01 3.05801975e-01 3.06129929e-01 3.06457954e-01 3.06786051e-01 + 3.07114218e-01 3.07442456e-01 3.07770765e-01 3.08099145e-01 3.08427594e-01 + 3.08756114e-01 3.09084703e-01 3.09413363e-01 3.09742091e-01 3.10070890e-01 + 3.10399757e-01 3.10728693e-01 3.11057699e-01 3.11386772e-01 3.11715915e-01 + 3.12045125e-01 3.12374404e-01 3.12703751e-01 3.13033165e-01 3.13362647e-01 + 3.13692197e-01 3.14021813e-01 3.14351497e-01 3.14681248e-01 3.15011065e-01 + 3.15340949e-01 3.15670899e-01 3.16000915e-01 3.16330997e-01 3.16661145e-01 + 3.16991359e-01 3.17321638e-01 3.17651983e-01 3.17982392e-01 3.18312867e-01 + 3.18643406e-01 3.18974010e-01 3.19304678e-01 3.19635411e-01 3.19966207e-01 + 3.20297067e-01 3.20627992e-01 3.20958979e-01 3.21290030e-01 3.21621144e-01 + 3.21952321e-01 3.22283561e-01 3.22614864e-01 3.22946229e-01 3.23277656e-01 + 3.23609146e-01 3.23940697e-01 3.24272310e-01 3.24603985e-01 3.24935721e-01 + 3.25267519e-01 3.25599377e-01 3.25931297e-01 3.26263277e-01 3.26595317e-01 + 3.26927419e-01 3.27259580e-01 3.27591801e-01 3.27924082e-01 3.28256423e-01 + 3.28588824e-01 3.28921283e-01 3.29253802e-01 3.29586380e-01 3.29919017e-01 + 3.30251712e-01 3.30584466e-01 3.30917278e-01 3.31250149e-01 3.31583077e-01 + 3.31916063e-01 3.32249107e-01 3.32582208e-01 3.32915366e-01 3.33248582e-01 + 3.33581854e-01 3.33915183e-01 3.34248569e-01 3.34582011e-01 3.34915510e-01 + 3.35249064e-01 3.35582675e-01 3.35916341e-01 3.36250062e-01 3.36583839e-01 + 3.36917672e-01 3.37251559e-01 3.37585501e-01 3.37919498e-01 3.38253550e-01 + 3.38587656e-01 3.38921816e-01 3.39256030e-01 3.39590298e-01 3.39924620e-01 + 3.40258995e-01 3.40593423e-01 3.40927905e-01 3.41262440e-01 3.41597027e-01 + 3.41931667e-01 3.42266360e-01 3.42601105e-01 3.42935903e-01 3.43270752e-01 + 3.43605653e-01 3.43940606e-01 3.44275610e-01 3.44610666e-01 3.44945772e-01 + 3.45280930e-01 3.45616139e-01 3.45951398e-01 3.46286708e-01 3.46622068e-01 + 3.46957478e-01 3.47292938e-01 3.47628448e-01 3.47964008e-01 3.48299617e-01 + 3.48635275e-01 3.48970983e-01 3.49306740e-01 3.49642545e-01 3.49978399e-01 + 3.50314302e-01 3.50650253e-01 3.50986252e-01 3.51322299e-01 3.51658394e-01 + 3.51994536e-01 3.52330726e-01 3.52666964e-01 3.53003248e-01 3.53339580e-01 + 3.53675958e-01 3.54012383e-01 3.54348855e-01 3.54685373e-01 3.55021937e-01 + 3.55358547e-01 3.55695203e-01 3.56031904e-01 3.56368651e-01 3.56705444e-01 + 3.57042281e-01 3.57379164e-01 3.57716092e-01 3.58053064e-01 3.58390081e-01 + 3.58727142e-01 3.59064247e-01 3.59401397e-01 3.59738590e-01 3.60075827e-01 + 3.60413107e-01 3.60750431e-01 3.61087799e-01 3.61425209e-01 3.61762662e-01 + 3.62100158e-01 3.62437696e-01 3.62775277e-01 3.63112900e-01 3.63450566e-01 + 3.63788273e-01 3.64126022e-01 3.64463812e-01 3.64801645e-01 3.65139518e-01 + 3.65477432e-01 3.65815388e-01 3.66153384e-01 3.66491421e-01 3.66829498e-01 + 3.67167616e-01 3.67505774e-01 3.67843971e-01 3.68182209e-01 3.68520487e-01 + 3.68858803e-01 3.69197160e-01 3.69535555e-01 3.69873990e-01 3.70212463e-01 + 3.70550975e-01 3.70889526e-01 3.71228115e-01 3.71566742e-01 3.71905408e-01 + 3.72244111e-01 3.72582852e-01 3.72921631e-01 3.73260447e-01 3.73599300e-01 + 3.73938191e-01 3.74277119e-01 3.74616083e-01 3.74955084e-01 3.75294122e-01 + 3.75633196e-01 3.75972306e-01 3.76311452e-01 3.76650634e-01 3.76989852e-01 + 3.77329105e-01 3.77668394e-01 3.78007718e-01 3.78347077e-01 3.78686471e-01 + 3.79025899e-01 3.79365363e-01 3.79704861e-01 3.80044393e-01 3.80383959e-01 + 3.80723559e-01 3.81063194e-01 3.81402861e-01 3.81742563e-01 3.82082298e-01 + 3.82422065e-01 3.82761866e-01 3.83101700e-01 3.83441567e-01 3.83781466e-01 + 3.84121398e-01 3.84461362e-01 3.84801358e-01 3.85141386e-01 3.85481446e-01 + 3.85821538e-01 3.86161661e-01 3.86501816e-01 3.86842001e-01 3.87182218e-01 + 3.87522466e-01 3.87862744e-01 3.88203053e-01 3.88543393e-01 3.88883763e-01 + 3.89224162e-01 3.89564592e-01 3.89905052e-01 3.90245541e-01 3.90586060e-01 + 3.90926609e-01 3.91267186e-01 3.91607793e-01 3.91948428e-01 3.92289093e-01 + 3.92629785e-01 3.92970507e-01 3.93311256e-01 3.93652034e-01 3.93992840e-01 + 3.94333674e-01 3.94674535e-01 3.95015424e-01 3.95356341e-01 3.95697284e-01 + 3.96038255e-01 3.96379253e-01 3.96720277e-01 3.97061328e-01 3.97402406e-01 + 3.97743510e-01 3.98084640e-01 3.98425796e-01 3.98766978e-01 3.99108186e-01 + 3.99449420e-01 3.99790679e-01 4.00131963e-01 4.00473272e-01 4.00814607e-01 + 4.01155966e-01 4.01497350e-01 4.01838759e-01 4.02180192e-01 4.02521649e-01 + 4.02863130e-01 4.03204636e-01 4.03546165e-01 4.03887718e-01 4.04229294e-01 + 4.04570894e-01 4.04912517e-01 4.05254163e-01 4.05595832e-01 4.05937524e-01 + 4.06279238e-01 4.06620975e-01 4.06962734e-01 4.07304516e-01 4.07646319e-01 + 4.07988145e-01 4.08329992e-01 4.08671861e-01 4.09013751e-01 4.09355663e-01 + 4.09697596e-01 4.10039549e-01 4.10381524e-01 4.10723520e-01 4.11065536e-01 + 4.11407572e-01 4.11749629e-01 4.12091706e-01 4.12433803e-01 4.12775920e-01 + 4.13118057e-01 4.13460213e-01 4.13802389e-01 4.14144583e-01 4.14486798e-01 + 4.14829031e-01 4.15171283e-01 4.15513553e-01 4.15855843e-01 4.16198150e-01 + 4.16540476e-01 4.16882821e-01 4.17225183e-01 4.17567563e-01 4.17909961e-01 + 4.18252376e-01 4.18594809e-01 4.18937259e-01 4.19279726e-01 4.19622210e-01 + 4.19964711e-01 4.20307229e-01 4.20649763e-01 4.20992314e-01 4.21334881e-01 + 4.21677465e-01 4.22020064e-01 4.22362679e-01 4.22705310e-01 4.23047957e-01 + 4.23390619e-01 4.23733296e-01 4.24075988e-01 4.24418696e-01 4.24761418e-01 + 4.25104155e-01 4.25446907e-01 4.25789673e-01 4.26132454e-01 4.26475249e-01 + 4.26818057e-01 4.27160880e-01 4.27503717e-01 4.27846567e-01 4.28189430e-01 + 4.28532307e-01 4.28875197e-01 4.29218101e-01 4.29561017e-01 4.29903946e-01 + 4.30246888e-01 4.30589842e-01 4.30932808e-01 4.31275787e-01 4.31618778e-01 + 4.31961781e-01 4.32304796e-01 4.32647822e-01 4.32990860e-01 4.33333909e-01 + 4.33676970e-01 4.34020042e-01 4.34363125e-01 4.34706219e-01 4.35049323e-01 + 4.35392438e-01 4.35735564e-01 4.36078700e-01 4.36421846e-01 4.36765002e-01 + 4.37108168e-01 4.37451344e-01 4.37794529e-01 4.38137724e-01 4.38480929e-01 + 4.38824142e-01 4.39167365e-01 4.39510597e-01 4.39853837e-01 4.40197087e-01 + 4.40540345e-01 4.40883611e-01 4.41226885e-01 4.41570168e-01 4.41913459e-01 + 4.42256758e-01 4.42600064e-01 4.42943378e-01 4.43286700e-01 4.43630029e-01 + 4.43973365e-01 4.44316708e-01 4.44660058e-01 4.45003416e-01 4.45346779e-01 + 4.45690150e-01 4.46033526e-01 4.46376910e-01 4.46720299e-01 4.47063694e-01 + 4.47407095e-01 4.47750502e-01 4.48093915e-01 4.48437333e-01 4.48780757e-01 + 4.49124185e-01 4.49467619e-01 4.49811058e-01 4.50154502e-01 4.50497950e-01 + 4.50841403e-01 4.51184861e-01 4.51528322e-01 4.51871788e-01 4.52215259e-01 + 4.52558733e-01 4.52902210e-01 4.53245692e-01 4.53589177e-01 4.53932665e-01 + 4.54276157e-01 4.54619652e-01 4.54963150e-01 4.55306651e-01 4.55650154e-01 + 1.03953624e+00 1.03772749e+00 1.03592023e+00 1.03411445e+00 1.03231016e+00 + 1.03050735e+00 1.02870603e+00 1.02690620e+00 1.02510785e+00 1.02331100e+00 + 1.02151562e+00 1.01972174e+00 1.01792935e+00 1.01613844e+00 1.01434902e+00 + 1.01256110e+00 1.01077466e+00 1.00898971e+00 1.00720626e+00 1.00542429e+00 + 1.00364382e+00 1.00186484e+00 1.00008735e+00 9.98311355e-01 9.96536852e-01 + 9.94763842e-01 9.92992326e-01 9.91222304e-01 9.89453777e-01 9.87686744e-01 + 9.85921207e-01 9.84157165e-01 9.82394619e-01 9.80633570e-01 9.78874017e-01 + 9.77115962e-01 9.75359404e-01 9.73604344e-01 9.71850782e-01 9.70098719e-01 + 9.68348155e-01 9.66599090e-01 9.64851525e-01 9.63105460e-01 9.61360895e-01 + 9.59617832e-01 9.57876269e-01 9.56136208e-01 9.54397649e-01 9.52660593e-01 + 9.50925039e-01 9.49190988e-01 9.47458441e-01 9.45727397e-01 9.43997858e-01 + 9.42269823e-01 9.40543293e-01 9.38818268e-01 9.37094749e-01 9.35372736e-01 + 9.33652230e-01 9.31933230e-01 9.30215737e-01 9.28499752e-01 9.26785274e-01 + 9.25072305e-01 9.23360844e-01 9.21650893e-01 9.19942450e-01 9.18235517e-01 + 9.16530094e-01 9.14826182e-01 9.13123780e-01 9.11422890e-01 9.09723511e-01 + 9.08025644e-01 9.06329289e-01 9.04634446e-01 9.02941117e-01 9.01249300e-01 + 8.99558998e-01 8.97870209e-01 8.96182935e-01 8.94497176e-01 8.92812931e-01 + 8.91130202e-01 8.89448989e-01 8.87769292e-01 8.86091112e-01 8.84414448e-01 + 8.82739302e-01 8.81065673e-01 8.79393562e-01 8.77722970e-01 8.76053896e-01 + 8.74386341e-01 8.72720306e-01 8.71055790e-01 8.69392795e-01 8.67731320e-01 + 8.66071366e-01 8.64412932e-01 8.62756021e-01 8.61100631e-01 8.59446764e-01 + 8.57794419e-01 8.56143597e-01 8.54494298e-01 8.52846523e-01 8.51200272e-01 + 8.49555545e-01 8.47912343e-01 8.46270666e-01 8.44630515e-01 8.42991889e-01 + 8.41354789e-01 8.39719216e-01 8.38085170e-01 8.36452650e-01 8.34821658e-01 + 8.33192195e-01 8.31564259e-01 8.29937852e-01 8.28312973e-01 8.26689624e-01 + 8.25067805e-01 8.23447515e-01 8.21828756e-01 8.20211528e-01 8.18595830e-01 + 8.16981664e-01 8.15369029e-01 8.13757927e-01 8.12148357e-01 8.10540319e-01 + 8.08933815e-01 8.07328844e-01 8.05725406e-01 8.04123503e-01 8.02523135e-01 + 8.00924301e-01 7.99327002e-01 7.97731239e-01 7.96137011e-01 7.94544320e-01 + 7.92953165e-01 7.91363547e-01 7.89775466e-01 7.88188923e-01 7.86603918e-01 + 7.85020450e-01 7.83438522e-01 7.81858132e-01 7.80279281e-01 7.78701970e-01 + 7.77126199e-01 7.75551968e-01 7.73979278e-01 7.72408129e-01 7.70838521e-01 + 7.69270454e-01 7.67703930e-01 7.66138947e-01 7.64575508e-01 7.63013611e-01 + 7.61453258e-01 7.59894448e-01 7.58337182e-01 7.56781460e-01 7.55227283e-01 + 7.53674651e-01 7.52123565e-01 7.50574024e-01 7.49026029e-01 7.47479580e-01 + 7.45934678e-01 7.44391322e-01 7.42849514e-01 7.41309254e-01 7.39770542e-01 + 7.38233378e-01 7.36697762e-01 7.35163696e-01 7.33631179e-01 7.32100211e-01 + 7.30570794e-01 7.29042926e-01 7.27516610e-01 7.25991844e-01 7.24468629e-01 + 7.22946966e-01 7.21426855e-01 7.19908297e-01 7.18391291e-01 7.16875837e-01 + 7.15361937e-01 7.13849591e-01 7.12338798e-01 7.10829560e-01 7.09321876e-01 + 7.07815747e-01 7.06311174e-01 7.04808155e-01 7.03306693e-01 7.01806787e-01 + 7.00308437e-01 6.98811644e-01 6.97316408e-01 6.95822730e-01 6.94330610e-01 + 6.92840047e-01 6.91351043e-01 6.89863598e-01 6.88377712e-01 6.86893385e-01 + 6.85410618e-01 6.83929411e-01 6.82449765e-01 6.80971679e-01 6.79495154e-01 + 6.78020190e-01 6.76546789e-01 6.75074949e-01 6.73604671e-01 6.72135956e-01 + 6.70668804e-01 6.69203215e-01 6.67739189e-01 6.66276728e-01 6.64815830e-01 + 6.63356498e-01 6.61898730e-01 6.60442527e-01 6.58987889e-01 6.57534818e-01 + 6.56083312e-01 6.54633373e-01 6.53185001e-01 6.51738195e-01 6.50292957e-01 + 6.48849287e-01 6.47407184e-01 6.45966650e-01 6.44527685e-01 6.43090288e-01 + 6.41654460e-01 6.40220202e-01 6.38787514e-01 6.37356396e-01 6.35926849e-01 + 6.34498872e-01 6.33072467e-01 6.31647633e-01 6.30224370e-01 6.28802680e-01 + 6.27382561e-01 6.25964016e-01 6.24547043e-01 6.23131644e-01 6.21717818e-01 + 6.20305566e-01 6.18894889e-01 6.17485785e-01 6.16078257e-01 6.14672303e-01 + 6.13267925e-01 6.11865123e-01 6.10463897e-01 6.09064247e-01 6.07666173e-01 + 6.06269677e-01 6.04874758e-01 6.03481416e-01 6.02089652e-01 6.00699467e-01 + 5.99310859e-01 5.97923831e-01 5.96538381e-01 5.95154511e-01 5.93772221e-01 + 5.92391510e-01 5.91012380e-01 5.89634830e-01 5.88258861e-01 5.86884473e-01 + 5.85511667e-01 5.84140442e-01 5.82770800e-01 5.81402740e-01 5.80036262e-01 + 5.78671367e-01 5.77308056e-01 5.75946328e-01 5.74586184e-01 5.73227624e-01 + 5.71870649e-01 5.70515258e-01 5.69161453e-01 5.67809232e-01 5.66458597e-01 + 5.65109548e-01 5.63762086e-01 5.62416210e-01 5.61071920e-01 5.59729218e-01 + 5.58388103e-01 5.57048576e-01 5.55710636e-01 5.54374285e-01 5.53039523e-01 + 5.51706349e-01 5.50374764e-01 5.49044769e-01 5.47716364e-01 5.46389548e-01 + 5.45064323e-01 5.43740689e-01 5.42418645e-01 5.41098192e-01 5.39779331e-01 + 5.38462062e-01 5.37146385e-01 5.35832299e-01 5.34519807e-01 5.33208907e-01 + 5.31899601e-01 5.30591888e-01 5.29285769e-01 5.27981244e-01 5.26678313e-01 + 5.25376977e-01 5.24077235e-01 5.22779089e-01 5.21482538e-01 5.20187583e-01 + 5.18894224e-01 5.17602461e-01 5.16312295e-01 5.15023726e-01 5.13736754e-01 + 5.12451379e-01 5.11167602e-01 5.09885423e-01 5.08604843e-01 5.07325861e-01 + 5.06048477e-01 5.04772693e-01 5.03498508e-01 5.02225923e-01 5.00954938e-01 + 4.99685553e-01 4.98417769e-01 4.97151585e-01 4.95887003e-01 4.94624021e-01 + 4.93362642e-01 4.92102864e-01 4.90844689e-01 4.89588116e-01 4.88333145e-01 + 4.87079778e-01 4.85828014e-01 4.84577853e-01 4.83329297e-01 4.82082344e-01 + 4.80836996e-01 4.79593252e-01 4.78351114e-01 4.77110580e-01 4.75871652e-01 + 4.74634330e-01 4.73398614e-01 4.72164504e-01 4.70932001e-01 4.69701104e-01 + 4.68471815e-01 4.67244132e-01 4.66018058e-01 4.64793591e-01 4.63570733e-01 + 4.62349483e-01 4.61129842e-01 4.59911810e-01 4.58695387e-01 4.57480573e-01 + 4.56267369e-01 4.55055776e-01 4.53845792e-01 4.52637419e-01 4.51430658e-01 + 4.50225507e-01 4.49021967e-01 4.47820039e-01 4.46619724e-01 4.45421020e-01 + 4.44223928e-01 4.43028450e-01 4.41834584e-01 4.40642332e-01 4.39451693e-01 + 4.38262668e-01 4.37075256e-01 4.35889459e-01 4.34705277e-01 4.33522709e-01 + 4.32341757e-01 4.31162420e-01 4.29984698e-01 4.28808592e-01 4.27634102e-01 + 4.26461229e-01 4.25289972e-01 4.24120332e-01 4.22952310e-01 4.21785904e-01 + 4.20621116e-01 4.19457946e-01 4.18296395e-01 4.17136461e-01 4.15978147e-01 + 4.14821451e-01 4.13666374e-01 4.12512917e-01 4.11361080e-01 4.10210862e-01 + 4.09062265e-01 4.07915288e-01 4.06769932e-01 4.05626197e-01 4.04484083e-01 + 4.03343590e-01 4.02204719e-01 4.01067470e-01 3.99931844e-01 3.98797839e-01 + 3.97665458e-01 3.96534699e-01 3.95405564e-01 3.94278052e-01 3.93152164e-01 + 3.92027900e-01 3.90905259e-01 3.89784244e-01 3.88664853e-01 3.87547087e-01 + 3.86430946e-01 3.85316431e-01 3.84203541e-01 3.83092278e-01 3.81982640e-01 + 3.80874629e-01 3.79768245e-01 3.78663487e-01 3.77560357e-01 3.76458854e-01 + 3.75358979e-01 3.74260731e-01 3.73164112e-01 3.72069121e-01 3.70975759e-01 + 3.69884025e-01 3.68793921e-01 3.67705446e-01 3.66618601e-01 3.65533385e-01 + 3.64449799e-01 3.63367844e-01 3.62287520e-01 3.61208826e-01 3.60131763e-01 + 3.59056331e-01 3.57982531e-01 3.56910363e-01 3.55839826e-01 3.54770922e-01 + 3.53703650e-01 3.52638011e-01 3.51574005e-01 3.50511632e-01 3.49450892e-01 + 3.48391786e-01 3.47334314e-01 3.46278476e-01 3.45224272e-01 3.44171703e-01 + 3.43120769e-01 3.42071469e-01 3.41023805e-01 3.39977776e-01 3.38933384e-01 + 3.37890627e-01 3.36849506e-01 3.35810021e-01 3.34772174e-01 3.33735963e-01 + 3.32701389e-01 3.31668453e-01 3.30637154e-01 3.29607493e-01 3.28579470e-01 + 3.27553085e-01 3.26528339e-01 3.25505231e-01 3.24483762e-01 3.23463933e-01 + 3.22445743e-01 3.21429192e-01 3.20414282e-01 3.19401011e-01 3.18389381e-01 + 3.17379391e-01 3.16371042e-01 3.15364334e-01 3.14359267e-01 3.13355841e-01 + 3.12354057e-01 3.11353915e-01 3.10355415e-01 3.09358557e-01 3.08363342e-01 + 3.07369770e-01 3.06377840e-01 3.05387554e-01 3.04398911e-01 3.03411912e-01 + 3.02426556e-01 3.01442845e-01 3.00460777e-01 2.99480355e-01 2.98501577e-01 + 2.97524444e-01 2.96548956e-01 2.95575113e-01 2.94602916e-01 2.93632365e-01 + 2.92663460e-01 2.91696201e-01 2.90730589e-01 2.89766623e-01 2.88804304e-01 + 2.87843632e-01 2.86884607e-01 2.85927230e-01 2.84971501e-01 2.84017420e-01 + 2.83064986e-01 2.82114201e-01 2.81165065e-01 2.80217578e-01 2.79271739e-01 + 2.78327550e-01 2.77385010e-01 2.76444119e-01 2.75504879e-01 2.74567288e-01 + 2.73631348e-01 2.72697059e-01 2.71764419e-01 2.70833431e-01 2.69904094e-01 + 2.68976408e-01 2.68050374e-01 2.67125991e-01 2.66203261e-01 2.65282182e-01 + 2.64362756e-01 2.63444982e-01 2.62528861e-01 2.61614393e-01 2.60701578e-01 + 2.59790416e-01 2.58880908e-01 2.57973054e-01 2.57066853e-01 2.56162307e-01 + 2.55259415e-01 2.54358178e-01 2.53458595e-01 2.52560668e-01 2.51664395e-01 + 2.50769778e-01 2.49876816e-01 2.48985511e-01 2.48095861e-01 2.47207867e-01 + 2.46321530e-01 2.45436849e-01 2.44553825e-01 2.43672457e-01 2.42792747e-01 + 2.41914695e-01 2.41038300e-01 2.40163562e-01 2.39290483e-01 2.38419061e-01 + 2.37549298e-01 2.36681193e-01 2.35814748e-01 2.34949961e-01 2.34086833e-01 + 2.33225364e-01 2.32365555e-01 2.31507405e-01 2.30650916e-01 2.29796086e-01 + 2.28942916e-01 2.28091407e-01 2.27241559e-01 2.26393372e-01 2.25546845e-01 + 2.24701980e-01 2.23858776e-01 2.23017233e-01 2.22177352e-01 2.21339134e-01 + 2.20502577e-01 2.19667682e-01 2.18834451e-01 2.18002881e-01 2.17172975e-01 + 2.16344732e-01 2.15518152e-01 2.14693235e-01 2.13869982e-01 2.13048393e-01 + 2.12228468e-01 2.11410207e-01 2.10593610e-01 2.09778678e-01 2.08965410e-01 + 2.08153807e-01 2.07343870e-01 2.06535598e-01 2.05728991e-01 2.04924049e-01 + 2.04120774e-01 2.03319164e-01 2.02519221e-01 2.01720944e-01 2.00924334e-01 + 2.00129390e-01 1.99336113e-01 1.98544503e-01 1.97754560e-01 1.96966285e-01 + 1.96179677e-01 1.95394737e-01 1.94611465e-01 1.93829861e-01 1.93049925e-01 + 1.92271658e-01 1.91495059e-01 1.90720129e-01 1.89946869e-01 1.89175277e-01 + 1.88405354e-01 1.87637101e-01 1.86870518e-01 1.86105605e-01 1.85342361e-01 + 1.84580788e-01 1.83820885e-01 1.83062653e-01 1.82306091e-01 1.81551200e-01 + 1.80797980e-01 1.80046431e-01 1.79296554e-01 1.78548348e-01 1.77801814e-01 + 1.77056952e-01 1.76313762e-01 1.75572244e-01 1.74832398e-01 1.74094225e-01 + 1.73357725e-01 1.72622897e-01 1.71889743e-01 1.71158261e-01 1.70428453e-01 + 1.69700319e-01 1.68973858e-01 1.68249071e-01 1.67525958e-01 1.66804519e-01 + 1.66084755e-01 1.65366665e-01 1.64650249e-01 1.63935509e-01 1.63222443e-01 + 1.62511053e-01 1.61801338e-01 1.61093298e-01 1.60386934e-01 1.59682246e-01 + 1.58979233e-01 1.58277897e-01 1.57578237e-01 1.56880253e-01 1.56183946e-01 + 1.55489316e-01 1.54796362e-01 1.54105086e-01 1.53415486e-01 1.52727564e-01 + 1.52041320e-01 1.51356753e-01 1.50673864e-01 1.49992653e-01 1.49313120e-01 + 1.48635265e-01 1.47959088e-01 1.47284591e-01 1.46611771e-01 1.45940631e-01 + 1.45271170e-01 1.44603388e-01 1.43937285e-01 1.43272862e-01 1.42610118e-01 + 1.41949054e-01 1.41289670e-01 1.40631966e-01 1.39975942e-01 1.39321598e-01 + 1.38668935e-01 1.38017953e-01 1.37368652e-01 1.36721031e-01 1.36075091e-01 + 1.35430833e-01 1.34788256e-01 1.34147361e-01 1.33508147e-01 1.32870615e-01 + 1.32234765e-01 1.31600597e-01 1.30968111e-01 1.30337308e-01 1.29708187e-01 + 1.29080749e-01 1.28454994e-01 1.27830921e-01 1.27208532e-01 1.26587826e-01 + 1.25968803e-01 1.25351464e-01 1.24735808e-01 1.24121836e-01 1.23509548e-01 + 1.22898944e-01 1.22290024e-01 1.21682789e-01 1.21077238e-01 1.20473372e-01 + 1.19871190e-01 1.19270693e-01 1.18671881e-01 1.18074755e-01 1.17479313e-01 + 1.16885558e-01 1.16293487e-01 1.15703102e-01 1.15114403e-01 1.14527390e-01 + 1.13942064e-01 1.13358423e-01 1.12776468e-01 1.12196200e-01 1.11617619e-01 + 1.11040725e-01 1.10465517e-01 1.09891996e-01 1.09320162e-01 1.08750016e-01 + 1.08181557e-01 1.07614785e-01 1.07049701e-01 1.06486305e-01 1.05924597e-01 + 1.05364577e-01 1.04806244e-01 1.04249601e-01 1.03694645e-01 1.03141378e-01 + 1.02589800e-01 1.02039910e-01 1.01491709e-01 1.00945198e-01 1.00400375e-01 + 9.98572416e-02 9.93157976e-02 9.87760431e-02 9.82379782e-02 9.77016030e-02 + 9.71669178e-02 9.66339224e-02 9.61026172e-02 9.55730022e-02 9.50450776e-02 + 9.45188434e-02 9.39942997e-02 9.34714468e-02 9.29502847e-02 9.24308135e-02 + 9.19130333e-02 9.13969443e-02 9.08825466e-02 9.03698403e-02 8.98588255e-02 + 8.93495023e-02 8.88418708e-02 8.83359312e-02 8.78316836e-02 8.73291281e-02 + 8.68282647e-02 8.63290937e-02 8.58316150e-02 8.53358290e-02 8.48417355e-02 + 8.43493348e-02 8.38586270e-02 8.33696121e-02 8.28822904e-02 8.23966618e-02 + 8.19127265e-02 8.14304847e-02 8.09499364e-02 8.04710817e-02 7.99939207e-02 + 7.95184537e-02 7.90446805e-02 7.85726014e-02 7.81022165e-02 7.76335259e-02 + 7.71665296e-02 7.67012279e-02 7.62376207e-02 7.57757082e-02 7.53154905e-02 + 7.48569677e-02 7.44001400e-02 7.39450073e-02 7.34915699e-02 7.30398277e-02 + 7.25897810e-02 7.21414298e-02 7.16947743e-02 7.12498144e-02 7.08065504e-02 + 7.03649822e-02 6.99251102e-02 6.94869342e-02 6.90504544e-02 6.86156710e-02 + 6.81825840e-02 6.77511935e-02 6.73214996e-02 6.68935024e-02 6.64672020e-02 + 6.60425985e-02 6.56196920e-02 6.51984826e-02 6.47789704e-02 6.43611555e-02 + 6.39450379e-02 6.35306178e-02 6.31178953e-02 6.27068704e-02 6.22975433e-02 + 6.18899141e-02 6.14839827e-02 6.10797494e-02 6.06772142e-02 6.02763772e-02 + 5.98772385e-02 5.94797982e-02 5.90840564e-02 5.86900131e-02 5.82976685e-02 + 5.79070227e-02 5.75180757e-02 5.71308276e-02 5.67452785e-02 5.63614285e-02 + 5.59792777e-02 5.55988261e-02 5.52200739e-02 5.48430212e-02 5.44676679e-02 + 5.40940143e-02 5.37220604e-02 5.33518062e-02 5.29832520e-02 5.26163976e-02 + 5.22512433e-02 5.18877891e-02 5.15260351e-02 5.11659814e-02 5.08076280e-02 + 5.04509751e-02 5.00960227e-02 4.97427708e-02 4.93912197e-02 4.90413693e-02 + 4.86932198e-02 4.83467711e-02 4.80020235e-02 4.76589769e-02 4.73176315e-02 + 4.69779873e-02 4.66400444e-02 4.63038029e-02 4.59692628e-02 4.56364243e-02 + 4.53052874e-02 4.49758521e-02 4.46481186e-02 4.43220870e-02 4.39977572e-02 + 4.36751294e-02 4.33542037e-02 4.30349801e-02 4.27174587e-02 4.24016395e-02 + 4.20875227e-02 4.17751083e-02 4.14643964e-02 4.11553870e-02 4.08480802e-02 + 4.05424762e-02 4.02385749e-02 3.99363764e-02 3.96358808e-02 3.93370881e-02 + 3.90399985e-02 3.87446120e-02 3.84509287e-02 3.81589486e-02 3.78686718e-02 + 3.75800983e-02 3.72932283e-02 3.70080618e-02 3.67245988e-02 3.64428394e-02 + 3.61627838e-02 3.58844318e-02 3.56077837e-02 3.53328395e-02 3.50595992e-02 + 3.47880629e-02 3.45182306e-02 3.42501025e-02 3.39836786e-02 3.37189589e-02 + 3.34559435e-02 3.31946324e-02 3.29350258e-02 3.26771236e-02 3.24209260e-02 + 3.21664330e-02 3.19136446e-02 3.16625610e-02 3.14131821e-02 3.11655080e-02 + 3.09195388e-02 3.06752746e-02 3.04327153e-02 3.01918611e-02 2.99527120e-02 + 2.97152680e-02 2.94795292e-02 2.92454957e-02 2.90131675e-02 2.87825447e-02 + 2.85536273e-02 2.83264153e-02 2.81009089e-02 2.78771081e-02 2.76550128e-02 + 2.74346233e-02 2.72159395e-02 2.69989614e-02 2.67836892e-02 2.65701228e-02 + 2.63582623e-02 2.61481079e-02 2.59396594e-02 2.57329170e-02 2.55278807e-02 + 2.53245505e-02 2.51229266e-02 2.49230089e-02 2.47247975e-02 2.45282924e-02 + 2.43334937e-02 2.41404014e-02 2.39490156e-02 2.37593363e-02 2.35713636e-02 + 2.33850975e-02 2.32005380e-02 2.30176851e-02 2.28365390e-02 2.26570997e-02 + 2.24793672e-02 2.23033415e-02 2.21290227e-02 2.19564108e-02 2.17855059e-02 + 2.16163080e-02 2.14488171e-02 2.12830333e-02 2.11189566e-02 2.09565871e-02 + 2.07959248e-02 2.06369696e-02 2.04797218e-02 2.03241812e-02 2.01703480e-02 + 2.00182221e-02 1.98678037e-02 1.97190927e-02 1.95720891e-02 1.94267931e-02 + 1.92832045e-02 1.91413236e-02 1.90011502e-02 1.88626845e-02 1.87259265e-02 + 1.85908761e-02 1.84575335e-02 1.83258986e-02 1.81959715e-02 1.80677522e-02 + 1.79412408e-02 1.78164372e-02 1.76933415e-02 1.75719538e-02 1.74522740e-02 + 1.73343022e-02 1.72180384e-02 1.71034827e-02 1.69906350e-02 1.68794954e-02 + 1.67700639e-02 1.66623405e-02 1.65563253e-02 1.64520183e-02 1.63494195e-02 + 1.62485289e-02 1.61493466e-02 1.60518726e-02 1.59561068e-02 1.58620494e-02 + 1.57697003e-02 1.56790596e-02 1.55901273e-02 1.55029034e-02 1.54173879e-02 + 1.53335808e-02 1.52514822e-02 1.51710921e-02 1.50924105e-02 1.50154374e-02 + 1.49401728e-02 1.48666168e-02 1.47947694e-02 1.47246305e-02 1.46562002e-02 + 1.45894786e-02 1.45244656e-02 1.44611612e-02 1.43995655e-02 1.43396785e-02 + 1.42815001e-02 1.42250305e-02 1.41702695e-02 1.41172173e-02 1.40658738e-02 + 1.40162391e-02 1.39683132e-02 1.39220960e-02 1.38775876e-02 1.38347880e-02 + 1.37936971e-02 1.37543151e-02 1.37166420e-02 1.36806776e-02 1.36464221e-02 + 1.36138754e-02 1.35830376e-02 1.35539086e-02 1.35264885e-02 1.35007773e-02 + 1.34767750e-02 1.34544815e-02 1.34338969e-02 1.34150212e-02 1.33978544e-02 + 1.33823966e-02 1.33686476e-02 1.33566075e-02 1.33462763e-02 1.33376541e-02 + 1.33307407e-02 1.33255363e-02 1.33220408e-02 1.33202542e-02 1.33201765e-02 + 1.33218078e-02 1.33251480e-02 1.33301970e-02 1.33369550e-02 1.33454220e-02 + 1.33555978e-02 1.33674825e-02 1.33810762e-02 1.33963787e-02 1.34133902e-02 + 1.34321105e-02 1.34525397e-02 1.34746779e-02 1.34985249e-02 1.35240808e-02 + 1.35513455e-02 1.35803192e-02 1.36110016e-02 1.36433930e-02 1.36774932e-02 + 1.37133022e-02 1.37508200e-02 1.37900467e-02 1.38309822e-02 1.38736265e-02 + 1.39179796e-02 1.39640414e-02 1.40118121e-02 1.40612914e-02 1.41124796e-02 + 1.41653765e-02 1.42199821e-02 1.42762964e-02 1.43343194e-02 1.43940512e-02 + 1.44554916e-02 1.45186406e-02 1.45834983e-02 1.46500646e-02 1.47183396e-02 + 1.47883231e-02 1.48600153e-02 1.49334160e-02 1.50085252e-02 1.50853430e-02 + 1.51638693e-02 1.52441041e-02 1.53260474e-02 1.54096992e-02 1.54950594e-02 + 1.55821280e-02 1.56709051e-02 1.57613905e-02 1.58535843e-02 1.59474864e-02 + 1.60430969e-02 1.61404156e-02 1.62394427e-02 1.63401780e-02 1.64426215e-02 + 1.65467732e-02 1.66526331e-02 1.67602012e-02 1.68694775e-02 1.69804618e-02 + 1.70931542e-02 1.72075547e-02 1.73236633e-02 1.74414798e-02 1.75610043e-02 + 1.76822368e-02 1.78051772e-02 1.79298256e-02 1.80561818e-02 1.81842458e-02 + 1.83140177e-02 1.84454973e-02 1.85786847e-02 1.87135798e-02 1.88501827e-02 + 1.89884931e-02 1.91285113e-02 1.92702370e-02 1.94136703e-02 1.95588111e-02 + 1.97056595e-02 1.98542153e-02 2.00044786e-02 2.01564492e-02 2.03101272e-02 + 2.04655126e-02 2.06226053e-02 2.07814052e-02 2.09419123e-02 2.11041267e-02 + 2.12680482e-02 2.14336768e-02 2.16010125e-02 2.17700553e-02 2.19408050e-02 + 2.21132617e-02 2.22874254e-02 2.24632959e-02 2.26408733e-02 2.28201575e-02 + 2.30011484e-02 2.31838461e-02 2.33682505e-02 2.35543615e-02 2.37421791e-02 + 2.39317033e-02 2.41229339e-02 2.43158711e-02 2.45105147e-02 2.47068647e-02 + 2.49049210e-02 2.51046836e-02 2.53061524e-02 2.55093275e-02 2.57142087e-02 + 2.59207960e-02 2.61290894e-02 2.63390888e-02 2.65507942e-02 2.67642055e-02 + 2.69793227e-02 2.71961457e-02 2.74146744e-02 2.76349090e-02 2.78568491e-02 + 2.80804949e-02 2.83058463e-02 2.85329032e-02 2.87616656e-02 2.89921334e-02 + 2.92243066e-02 2.94581851e-02 2.96937689e-02 2.99310578e-02 3.01700520e-02 + 3.04107512e-02 3.06531555e-02 3.08972648e-02 3.11430790e-02 3.13905981e-02 + 3.16398220e-02 3.18907507e-02 3.21433841e-02 3.23977222e-02 3.26537648e-02 + 3.29115120e-02 3.31709637e-02 3.34321199e-02 3.36949803e-02 3.39595451e-02 + 3.42258142e-02 3.44937874e-02 3.47634647e-02 3.50348461e-02 3.53079315e-02 + 3.55827209e-02 3.58592141e-02 3.61374112e-02 3.64173120e-02 3.66989165e-02 + 3.69822246e-02 3.72672363e-02 3.75539515e-02 3.78423701e-02 3.81324920e-02 + 3.84243173e-02 3.87178458e-02 3.90130775e-02 3.93100123e-02 3.96086502e-02 + 3.99089910e-02 4.02110347e-02 4.05147812e-02 4.08202305e-02 4.11273825e-02 + 4.14362371e-02 4.17467942e-02 4.20590539e-02 4.23730160e-02 4.26886804e-02 + 4.30060471e-02 4.33251159e-02 4.36458870e-02 4.39683600e-02 4.42925351e-02 + 4.46184120e-02 4.49459908e-02 4.52752714e-02 4.56062536e-02 4.59389375e-02 + 4.62733229e-02 4.66094097e-02 4.69471980e-02 4.72866875e-02 4.76278783e-02 + 4.79707703e-02 4.83153633e-02 4.86616573e-02 4.90096522e-02 4.93593480e-02 + 4.97107446e-02 5.00638418e-02 5.04186396e-02 5.07751380e-02 5.11333368e-02 + 5.14932360e-02 5.18548354e-02 5.22181351e-02 5.25831349e-02 5.29498347e-02 + 5.33182344e-02 5.36883341e-02 5.40601335e-02 5.44336326e-02 5.48088313e-02 + 5.51857296e-02 5.55643273e-02 5.59446244e-02 5.63266207e-02 5.67103163e-02 + 5.70957109e-02 5.74828046e-02 5.78715972e-02 5.82620886e-02 5.86542788e-02 + 5.90481677e-02 5.94437551e-02 5.98410410e-02 6.02400253e-02 6.06407080e-02 + 6.10430888e-02 6.14471678e-02 6.18529447e-02 6.22604197e-02 6.26695925e-02 + 6.30804630e-02 6.34930312e-02 6.39072970e-02 6.43232602e-02 6.47409209e-02 + 6.51602788e-02 6.55813340e-02 6.60040862e-02 6.64285354e-02 6.68546816e-02 + 6.72825245e-02 6.77120642e-02 6.81433005e-02 6.85762333e-02 6.90108625e-02 + 6.94471881e-02 6.98852099e-02 7.03249278e-02 7.07663417e-02 7.12094516e-02 + 7.16542573e-02 7.21007588e-02 7.25489558e-02 7.29988484e-02 7.34504365e-02 + 7.39037198e-02 7.43586984e-02 7.48153721e-02 7.52737408e-02 7.57338044e-02 + 7.61955628e-02 7.66590160e-02 7.71241637e-02 7.75910059e-02 7.80595425e-02 + 7.85297734e-02 7.90016985e-02 7.94753177e-02 7.99506308e-02 8.04276378e-02 + 8.09063385e-02 8.13867329e-02 8.18688208e-02 8.23526021e-02 8.28380768e-02 + 8.33252446e-02 8.38141056e-02 8.43046595e-02 8.47969063e-02 8.52908459e-02 + 8.57864782e-02 8.62838029e-02 8.67828201e-02 8.72835297e-02 8.77859314e-02 + 8.82900252e-02 8.87958110e-02 8.93032887e-02 8.98124581e-02 9.03233191e-02 + 9.08358717e-02 9.13501157e-02 9.18660509e-02 9.23836774e-02 9.29029949e-02 + 9.34240033e-02 9.39467025e-02 9.44710925e-02 9.49971730e-02 9.55249440e-02 + 9.60544054e-02 9.65855570e-02 9.71183987e-02 9.76529303e-02 9.81891519e-02 + 9.87270632e-02 9.92666641e-02 9.98079545e-02 1.00350934e-01 1.00895603e-01 + 1.01441962e-01 1.01990009e-01 1.02539745e-01 1.03091170e-01 1.03644283e-01 + 1.04199085e-01 1.04755576e-01 1.05313754e-01 1.05873621e-01 1.06435176e-01 + 1.06998419e-01 1.07563349e-01 1.08129968e-01 1.08698273e-01 1.09268266e-01 + 1.09839947e-01 1.10413314e-01 1.10988368e-01 1.11565110e-01 1.12143538e-01 + 1.12723652e-01 1.13305453e-01 1.13888941e-01 1.14474115e-01 1.15060974e-01 + 1.15649520e-01 1.16239751e-01 1.16831669e-01 1.17425271e-01 1.18020560e-01 + 1.18617533e-01 1.19216192e-01 1.19816535e-01 1.20418564e-01 1.21022277e-01 + 1.21627675e-01 1.22234757e-01 1.22843524e-01 1.23453975e-01 1.24066109e-01 + 1.24679928e-01 1.25295431e-01 1.25912617e-01 1.26531487e-01 1.27152040e-01 + 1.27774276e-01 1.28398196e-01 1.29023798e-01 1.29651083e-01 1.30280051e-01 + 1.30910702e-01 1.31543034e-01 1.32177050e-01 1.32812747e-01 1.33450126e-01 + 1.34089187e-01 1.34729929e-01 1.35372353e-01 1.36016459e-01 1.36662246e-01 + 1.37309713e-01 1.37958862e-01 1.38609692e-01 1.39262202e-01 1.39916393e-01 + 1.40572264e-01 1.41229815e-01 1.41889046e-01 1.42549958e-01 1.43212549e-01 + 1.43876819e-01 1.44542770e-01 1.45210399e-01 1.45879708e-01 1.46550695e-01 + 1.47223362e-01 1.47897707e-01 1.48573731e-01 1.49251433e-01 1.49930814e-01 + 1.50611872e-01 1.51294609e-01 1.51979023e-01 1.52665115e-01 1.53352885e-01 + 1.54042332e-01 1.54733456e-01 1.55426257e-01 1.56120735e-01 1.56816890e-01 + 1.57514721e-01 1.58214229e-01 1.58915413e-01 1.59618273e-01 1.60322809e-01 + 1.61029020e-01 1.61736908e-01 1.62446471e-01 1.63157709e-01 1.63870622e-01 + 1.64585210e-01 1.65301473e-01 1.66019411e-01 1.66739023e-01 1.67460310e-01 + 1.68183271e-01 1.68907906e-01 1.69634214e-01 1.70362197e-01 1.71091853e-01 + 1.71823182e-01 1.72556184e-01 1.73290860e-01 1.74027208e-01 1.74765229e-01 + 1.75504923e-01 1.76246289e-01 1.76989327e-01 1.77734037e-01 1.78480419e-01 + 1.79228473e-01 1.79978199e-01 1.80729595e-01 1.81482663e-01 1.82237402e-01 + 1.82993812e-01 1.83751893e-01 1.84511644e-01 1.85273065e-01 1.86036157e-01 + 1.86800919e-01 1.87567350e-01 1.88335451e-01 1.89105222e-01 1.89876662e-01 + 1.90649771e-01 1.91424549e-01 1.92200996e-01 1.92979112e-01 1.93758896e-01 + 1.94540348e-01 1.95323469e-01 1.96108257e-01 1.96894713e-01 1.97682837e-01 + 1.98472628e-01 1.99264087e-01 2.00057212e-01 2.00852004e-01 2.01648463e-01 + 2.02446589e-01 2.03246381e-01 2.04047839e-01 2.04850963e-01 2.05655753e-01 + 2.06462208e-01 2.07270329e-01 2.08080115e-01 2.08891567e-01 2.09704683e-01 + 2.10519464e-01 2.11335909e-01 2.12154019e-01 2.12973793e-01 2.13795231e-01 + 2.14618333e-01 2.15443098e-01 2.16269527e-01 2.17097619e-01 2.17927374e-01 + 2.18758792e-01 2.19591873e-01 2.20426616e-01 2.21263022e-01 2.22101090e-01 + 2.22940819e-01 2.23782211e-01 2.24625264e-01 2.25469978e-01 2.26316354e-01 + 2.27164390e-01 2.28014088e-01 2.28865446e-01 2.29718464e-01 2.30573143e-01 + 2.31429482e-01 2.32287480e-01 2.33147139e-01 2.34008457e-01 2.34871434e-01 + 2.35736070e-01 2.36602365e-01 2.37470319e-01 2.38339931e-01 2.39211202e-01 + 2.40084131e-01 2.40958717e-01 2.41834962e-01 2.42712864e-01 2.43592423e-01 + 2.44473640e-01 2.45356513e-01 2.46241044e-01 2.47127230e-01 2.48015074e-01 + 2.48904573e-01 2.49795728e-01 2.50688539e-01 2.51583006e-01 2.52479128e-01 + 2.53376905e-01 2.54276337e-01 2.55177424e-01 2.56080166e-01 2.56984562e-01 + 2.57890612e-01 2.58798316e-01 2.59707674e-01 2.60618685e-01 2.61531350e-01 + 2.62445667e-01 2.63361638e-01 2.64279262e-01 2.65198538e-01 2.66119466e-01 + 2.67042047e-01 2.67966279e-01 2.68892164e-01 2.69819699e-01 2.70748886e-01 + 2.71679724e-01 2.72612213e-01 2.73546353e-01 2.74482143e-01 2.75419584e-01 + 2.76358674e-01 2.77299415e-01 2.78241805e-01 2.79185844e-01 2.80131533e-01 + 2.81078870e-01 2.82027857e-01 2.82978492e-01 2.83930775e-01 2.84884707e-01 + 2.85840287e-01 2.86797514e-01 2.87756389e-01 2.88716911e-01 2.89679080e-01 + 2.90642896e-01 2.91608359e-01 2.92575468e-01 2.93544224e-01 2.94514625e-01 + 2.95486673e-01 2.96460366e-01 2.97435704e-01 2.98412687e-01 2.99391316e-01 + 3.00371589e-01 3.01353507e-01 3.02337069e-01 3.03322275e-01 3.04309125e-01 + 3.05297618e-01 3.06287755e-01 3.07279535e-01 3.08272958e-01 3.09268024e-01 + 3.10264733e-01 3.11263084e-01 3.12263076e-01 3.13264711e-01 3.14267987e-01 + 3.15272905e-01 3.16279464e-01 3.17287664e-01 3.18297505e-01 3.19308986e-01 + 3.20322108e-01 3.21336869e-01 3.22353271e-01 3.23371312e-01 3.24390992e-01 + 3.25412312e-01 3.26435271e-01 3.27459868e-01 3.28486104e-01 3.29513978e-01 + 3.30543490e-01 3.31574640e-01 3.32607428e-01 3.33641852e-01 3.34677914e-01 + 3.35715613e-01 3.36754949e-01 3.37795921e-01 3.38838529e-01 3.39882774e-01 + 3.40928653e-01 3.41976169e-01 3.43025320e-01 3.44076105e-01 3.45128526e-01 + 3.46182581e-01 3.47238271e-01 3.48295594e-01 3.49354552e-01 3.50415143e-01 + 3.51477368e-01 3.52541225e-01 3.53606716e-01 3.54673839e-01 3.55742595e-01 + 3.56812983e-01 3.57885003e-01 3.58958655e-01 3.60033939e-01 3.61110853e-01 + 3.62189399e-01 3.63269575e-01 3.64351382e-01 3.65434820e-01 3.66519887e-01 + 3.67606584e-01 3.68694911e-01 3.69784868e-01 3.70876453e-01 3.71969667e-01 + 3.73064510e-01 3.74160981e-01 3.75259081e-01 3.76358808e-01 3.77460163e-01 + 3.78563145e-01 3.79667755e-01 3.80773992e-01 3.81881855e-01 3.82991344e-01 + 3.84102460e-01 3.85215202e-01 3.86329570e-01 3.87445563e-01 3.88563181e-01 + 3.89682424e-01 3.90803292e-01 3.91925784e-01 3.93049901e-01 3.94175642e-01 + 3.95303006e-01 3.96431994e-01 3.97562605e-01 3.98694839e-01 3.99828696e-01 + 4.00964175e-01 4.02101276e-01 4.03240000e-01 4.04380345e-01 4.05522312e-01 + 4.06665899e-01 4.07811108e-01 4.08957938e-01 4.10106388e-01 4.11256458e-01 + 4.12408148e-01 4.13561458e-01 4.14716388e-01 4.15872936e-01 4.17031104e-01 + 4.18190890e-01 4.19352295e-01 4.20515317e-01 4.21679958e-01 4.22846216e-01 + 4.24014092e-01 4.25183585e-01 4.26354695e-01 4.27527421e-01 4.28701764e-01 + 4.29877723e-01 4.31055298e-01 4.32234488e-01 4.33415294e-01 4.34597715e-01 + 4.35781751e-01 4.36967401e-01 4.38154665e-01 4.39343544e-01 4.40534036e-01 + 4.41726142e-01 4.42919861e-01 4.44115193e-01 4.45312138e-01 4.46510695e-01 + 4.47710864e-01 4.48912645e-01 4.50116038e-01 4.51321043e-01 4.52527658e-01 + 4.53735885e-01 4.54945722e-01 4.56157169e-01 4.57370226e-01 4.58584894e-01 + 4.59801170e-01 4.61019056e-01 4.62238551e-01 4.63459655e-01 4.64682367e-01 + 4.65906688e-01 4.67132616e-01 4.68360152e-01 4.69589295e-01 4.70820046e-01 + 4.72052403e-01 4.73286367e-01 4.74521937e-01 4.75759113e-01 4.76997895e-01 + 4.78238283e-01 4.79480276e-01 4.80723873e-01 4.81969076e-01 4.83215882e-01 + 4.84464293e-01 4.85714308e-01 4.86965926e-01 4.88219148e-01 4.89473972e-01 + 4.90730400e-01 4.91988430e-01 4.93248062e-01 4.94509296e-01 4.95772131e-01 + 4.97036568e-01 4.98302606e-01 4.99570245e-01 5.00839485e-01 5.02110324e-01 + 5.03382764e-01 5.04656804e-01 5.05932442e-01 5.07209680e-01 5.08488517e-01 + 5.09768953e-01 5.11050986e-01 5.12334618e-01 5.13619847e-01 5.14906674e-01 + 5.16195098e-01 5.17485119e-01 5.18776737e-01 5.20069951e-01 5.21364761e-01 + 5.22661167e-01 5.23959168e-01 5.25258764e-01 5.26559955e-01 5.27862741e-01 + 5.29167122e-01 5.30473096e-01 5.31780664e-01 5.33089826e-01 5.34400580e-01 + 5.35712928e-01 5.37026868e-01 5.38342401e-01 5.39659526e-01 5.40978242e-01 + 5.42298550e-01 5.43620449e-01 5.44943939e-01 5.46269020e-01 5.47595691e-01 + 5.48923952e-01 5.50253802e-01 5.51585242e-01 5.52918272e-01 5.54252890e-01 + 5.55589096e-01 5.56926891e-01 5.58266274e-01 5.59607245e-01 5.60949803e-01 + 5.62293948e-01 5.63639680e-01 5.64986999e-01 5.66335903e-01 5.67686394e-01 + 5.69038470e-01 5.70392132e-01 5.71747378e-01 5.73104210e-01 5.74462626e-01 + 5.75822626e-01 5.77184210e-01 5.78547377e-01 5.79912128e-01 5.81278461e-01 + 5.82646378e-01 5.84015876e-01 5.85386957e-01 5.86759620e-01 5.88133864e-01 + 5.89509689e-01 5.90887095e-01 5.92266082e-01 5.93646649e-01 5.95028796e-01 + 5.96412522e-01 5.97797828e-01 5.99184713e-01 6.00573177e-01 6.01963219e-01 + 6.03354840e-01 6.04748038e-01 6.06142814e-01 6.07539167e-01 6.08937097e-01 + 6.10336603e-01 6.11737686e-01 6.13140346e-01 6.14544580e-01 6.15950391e-01 + 6.17357776e-01 6.18766736e-01 6.20177271e-01 6.21589379e-01 6.23003062e-01 + 6.24418319e-01 6.25835148e-01 6.27253551e-01 6.28673526e-01 6.30095073e-01 + 6.31518193e-01 6.32942884e-01 6.34369147e-01 6.35796981e-01 6.37226386e-01 + 6.38657361e-01 6.40089906e-01 6.41524022e-01 6.42959706e-01 6.44396960e-01 + 6.45835783e-01 6.47276175e-01 6.48718135e-01 6.50161663e-01 6.51606758e-01 + 6.53053421e-01 6.54501651e-01 6.55951448e-01 6.57402811e-01 6.58855740e-01 + 6.60310236e-01 6.61766296e-01 6.63223922e-01 6.64683112e-01 6.66143868e-01 + 6.67606187e-01 6.69070070e-01 6.70535517e-01 6.72002527e-01 6.73471100e-01 + 6.74941236e-01 6.76412934e-01 6.77886194e-01 6.79361015e-01 6.80837398e-01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.00000000e+00 9.75894263e-01 9.53451752e-01 9.32489601e-01 9.12851907e-01 + 8.94404826e-01 8.77032714e-01 8.60635068e-01 8.45124065e-01 8.30422576e-01 + 8.16462554e-01 8.03183696e-01 7.90532350e-01 7.78460602e-01 7.66925506e-01 + 7.55888443e-01 7.45314577e-01 7.35172390e-01 7.25433287e-01 7.16071258e-01 + 7.07062580e-01 6.98385572e-01 6.90020370e-01 6.81948734e-01 6.74153887e-01 + 6.66620364e-01 6.59333880e-01 6.52281224e-01 6.45450150e-01 6.38829295e-01 + 6.32408091e-01 6.26176704e-01 6.20125961e-01 6.14247300e-01 6.08532716e-01 + 6.02974715e-01 5.97566276e-01 5.92300808e-01 5.87172122e-01 5.82174396e-01 + 5.77302151e-01 5.72550221e-01 5.67913735e-01 5.63388093e-01 5.58968948e-01 + 5.54652188e-01 5.50433918e-01 5.46310451e-01 5.42278287e-01 5.38334105e-01 + 5.34474753e-01 5.30697232e-01 5.26998691e-01 5.23376415e-01 5.19827818e-01 + 5.16350438e-01 5.12941922e-01 5.09600027e-01 5.06322612e-01 5.03107629e-01 + 4.99953120e-01 4.96857213e-01 4.93818117e-01 4.90834114e-01 4.87903560e-01 + 4.85024878e-01 4.82196556e-01 4.79417141e-01 4.76685242e-01 4.73999519e-01 + 4.71358685e-01 4.68761505e-01 4.66206788e-01 4.63693390e-01 4.61220209e-01 + 4.58786184e-01 4.56390292e-01 4.54031548e-01 4.51709002e-01 4.49421737e-01 + 4.47168870e-01 4.44949545e-01 4.42762941e-01 4.40608259e-01 4.38484731e-01 + 4.36391613e-01 4.34328187e-01 4.32293756e-01 4.30287649e-01 4.28309213e-01 + 4.26357819e-01 4.24432857e-01 4.22533734e-01 4.20659877e-01 4.18810733e-01 + 4.16985761e-01 4.15184441e-01 4.13406264e-01 4.11650741e-01 4.09917394e-01 + 4.08205761e-01 4.06515390e-01 4.04845847e-01 4.03196706e-01 4.01567556e-01 + 3.99957996e-01 3.98367636e-01 3.96796098e-01 3.95243014e-01 3.93708024e-01 + 3.92190780e-01 3.90690944e-01 3.89208184e-01 3.87742180e-01 3.86292617e-01 + 3.84859191e-01 3.83441605e-01 3.82039569e-01 3.80652800e-01 3.79281024e-01 + 3.77923973e-01 3.76581385e-01 3.75253005e-01 3.73938583e-01 3.72637878e-01 + 3.71350652e-01 3.70076675e-01 3.68815719e-01 3.67567566e-01 3.66332000e-01 + 3.65108810e-01 3.63897792e-01 3.62698745e-01 3.61511473e-01 3.60335785e-01 + 3.59171493e-01 3.58018415e-01 3.56876371e-01 3.55745187e-01 3.54624691e-01 + 3.53514717e-01 3.52415101e-01 3.51325683e-01 3.50246306e-01 3.49176816e-01 + 3.48117064e-01 3.47066903e-01 3.46026189e-01 3.44994782e-01 3.43972542e-01 + 3.42959337e-01 3.41955032e-01 3.40959498e-01 3.39972609e-01 3.38994241e-01 + 3.38024270e-01 3.37062579e-01 3.36109049e-01 3.35163566e-01 3.34226018e-01 + 3.33296293e-01 3.32374284e-01 3.31459885e-01 3.30552992e-01 3.29653502e-01 + 3.28761315e-01 3.27876333e-01 3.26998460e-01 3.26127600e-01 3.25263662e-01 + 3.24406553e-01 3.23556184e-01 3.22712468e-01 3.21875318e-01 3.21044649e-01 + 3.20220378e-01 3.19402424e-01 3.18590706e-01 3.17785145e-01 3.16985665e-01 + 3.16192188e-01 3.15404639e-01 3.14622947e-01 3.13847038e-01 3.13076841e-01 + 3.12312287e-01 3.11553306e-01 3.10799833e-01 3.10051800e-01 3.09309142e-01 + 3.08571795e-01 3.07839697e-01 3.07112784e-01 3.06390997e-01 3.05674275e-01 + 3.04962560e-01 3.04255793e-01 3.03553917e-01 3.02856876e-01 3.02164615e-01 + 3.01477079e-01 3.00794216e-01 3.00115971e-01 2.99442294e-01 2.98773134e-01 + 2.98108439e-01 2.97448161e-01 2.96792252e-01 2.96140662e-01 2.95493345e-01 + 2.94850254e-01 2.94211344e-01 2.93576570e-01 2.92945886e-01 2.92319250e-01 + 2.91696618e-01 2.91077947e-01 2.90463197e-01 2.89852325e-01 2.89245291e-01 + 2.88642055e-01 2.88042577e-01 2.87446820e-01 2.86854743e-01 2.86266311e-01 + 2.85681484e-01 2.85100228e-01 2.84522505e-01 2.83948280e-01 2.83377517e-01 + 2.82810183e-01 2.82246243e-01 2.81685662e-01 2.81128409e-01 2.80574450e-01 + 2.80023753e-01 2.79476286e-01 2.78932017e-01 2.78390916e-01 2.77852951e-01 + 2.77318094e-01 2.76786313e-01 2.76257580e-01 2.75731865e-01 2.75209140e-01 + 2.74689377e-01 2.74172548e-01 2.73658625e-01 2.73147581e-01 2.72639389e-01 + 2.72134024e-01 2.71631458e-01 2.71131667e-01 2.70634624e-01 2.70140305e-01 + 2.69648684e-01 2.69159738e-01 2.68673442e-01 2.68189772e-01 2.67708706e-01 + 2.67230218e-01 2.66754287e-01 2.66280890e-01 2.65810005e-01 2.65341608e-01 + 2.64875680e-01 2.64412197e-01 2.63951138e-01 2.63492483e-01 2.63036211e-01 + 2.62582301e-01 2.62130732e-01 2.61681486e-01 2.61234541e-01 2.60789879e-01 + 2.60347479e-01 2.59907323e-01 2.59469393e-01 2.59033668e-01 2.58600131e-01 + 2.58168764e-01 2.57739549e-01 2.57312467e-01 2.56887501e-01 2.56464633e-01 + 2.56043847e-01 2.55625126e-01 2.55208452e-01 2.54793809e-01 2.54381180e-01 + 2.53970550e-01 2.53561902e-01 2.53155220e-01 2.52750489e-01 2.52347693e-01 + 2.51946816e-01 2.51547844e-01 2.51150761e-01 2.50755553e-01 2.50362204e-01 + 2.49970701e-01 2.49581029e-01 2.49193173e-01 2.48807120e-01 2.48422856e-01 + 2.48040367e-01 2.47659639e-01 2.47280658e-01 2.46903413e-01 2.46527888e-01 + 2.46154072e-01 2.45781951e-01 2.45411513e-01 2.45042745e-01 2.44675634e-01 + 2.44310168e-01 2.43946335e-01 2.43584122e-01 2.43223518e-01 2.42864511e-01 + 2.42507089e-01 2.42151241e-01 2.41796954e-01 2.41444218e-01 2.41093021e-01 + 2.40743352e-01 2.40395201e-01 2.40048555e-01 2.39703404e-01 2.39359739e-01 + 2.39017547e-01 2.38676818e-01 2.38337542e-01 2.37999710e-01 2.37663309e-01 + 2.37328332e-01 2.36994766e-01 2.36662603e-01 2.36331833e-01 2.36002446e-01 + 2.35674432e-01 2.35347783e-01 2.35022487e-01 2.34698537e-01 2.34375923e-01 + 2.34054635e-01 2.33734666e-01 2.33416004e-01 2.33098643e-01 2.32782573e-01 + 2.32467784e-01 2.32154270e-01 2.31842020e-01 2.31531028e-01 2.31221283e-01 + 2.30912778e-01 2.30605504e-01 2.30299454e-01 2.29994620e-01 2.29690992e-01 + 2.29388564e-01 2.29087328e-01 2.28787275e-01 2.28488398e-01 2.28190689e-01 + 2.27894141e-01 2.27598746e-01 2.27304497e-01 2.27011386e-01 2.26719406e-01 + 2.26428550e-01 2.26138810e-01 2.25850180e-01 2.25562652e-01 2.25276219e-01 + 2.24990875e-01 2.24706613e-01 2.24423425e-01 2.24141305e-01 2.23860246e-01 + 2.23580243e-01 2.23301287e-01 2.23023372e-01 2.22746493e-01 2.22470643e-01 + 2.22195814e-01 2.21922002e-01 2.21649200e-01 2.21377401e-01 2.21106599e-01 + 2.20836789e-01 2.20567964e-01 2.20300119e-01 2.20033247e-01 2.19767342e-01 + 2.19502400e-01 2.19238413e-01 2.18975376e-01 2.18713284e-01 2.18452130e-01 + 2.18191910e-01 2.17932618e-01 2.17674247e-01 2.17416794e-01 2.17160252e-01 + 2.16904616e-01 2.16649880e-01 2.16396040e-01 2.16143090e-01 2.15891025e-01 + 2.15639840e-01 2.15389530e-01 2.15140089e-01 2.14891513e-01 2.14643796e-01 + 2.14396935e-01 2.14150923e-01 2.13905756e-01 2.13661429e-01 2.13417937e-01 + 2.13175276e-01 2.12933441e-01 2.12692427e-01 2.12452229e-01 2.12212843e-01 + 2.11974265e-01 2.11736490e-01 2.11499513e-01 2.11263330e-01 2.11027936e-01 + 2.10793328e-01 2.10559500e-01 2.10326449e-01 2.10094169e-01 2.09862658e-01 + 2.09631910e-01 2.09401922e-01 2.09172689e-01 2.08944208e-01 2.08716473e-01 + 2.08489481e-01 2.08263229e-01 2.08037711e-01 2.07812924e-01 2.07588865e-01 + 2.07365528e-01 2.07142911e-01 2.06921010e-01 2.06699820e-01 2.06479337e-01 + 2.06259559e-01 2.06040481e-01 2.05822100e-01 2.05604412e-01 2.05387413e-01 + 2.05171099e-01 2.04955468e-01 2.04740515e-01 2.04526237e-01 2.04312630e-01 + 2.04099691e-01 2.03887417e-01 2.03675803e-01 2.03464847e-01 2.03254545e-01 + 2.03044894e-01 2.02835891e-01 2.02627531e-01 2.02419812e-01 2.02212731e-01 + 2.02006284e-01 2.01800468e-01 2.01595280e-01 2.01390716e-01 2.01186774e-01 + 2.00983451e-01 2.00780742e-01 2.00578646e-01 2.00377158e-01 2.00176277e-01 + 1.99975998e-01 1.99776320e-01 1.99577238e-01 1.99378751e-01 1.99180854e-01 + 1.98983546e-01 1.98786822e-01 1.98590681e-01 1.98395120e-01 1.98200135e-01 + 1.98005724e-01 1.97811884e-01 1.97618612e-01 1.97425905e-01 1.97233761e-01 + 1.97042177e-01 1.96851151e-01 1.96660678e-01 1.96470758e-01 1.96281387e-01 + 1.96092562e-01 1.95904281e-01 1.95716541e-01 1.95529341e-01 1.95342676e-01 + 1.95156545e-01 1.94970945e-01 1.94785873e-01 1.94601328e-01 1.94417306e-01 + 1.94233805e-01 1.94050823e-01 1.93868357e-01 1.93686404e-01 1.93504963e-01 + 1.93324031e-01 1.93143606e-01 1.92963685e-01 1.92784265e-01 1.92605345e-01 + 1.92426923e-01 1.92248995e-01 1.92071560e-01 1.91894616e-01 1.91718159e-01 + 1.91542189e-01 1.91366702e-01 1.91191696e-01 1.91017170e-01 1.90843121e-01 + 1.90669546e-01 1.90496445e-01 1.90323814e-01 1.90151652e-01 1.89979956e-01 + 1.89808724e-01 1.89637954e-01 1.89467644e-01 1.89297793e-01 1.89128397e-01 + 1.88959456e-01 1.88790966e-01 1.88622926e-01 1.88455335e-01 1.88288189e-01 + 1.88121487e-01 1.87955227e-01 1.87789407e-01 1.87624025e-01 1.87459079e-01 + 1.87294568e-01 1.87130489e-01 1.86966840e-01 1.86803620e-01 1.86640827e-01 + 1.86478458e-01 1.86316513e-01 1.86154989e-01 1.85993884e-01 1.85833197e-01 + 1.85672925e-01 1.85513068e-01 1.85353622e-01 1.85194587e-01 1.85035961e-01 + 1.84877742e-01 1.84719927e-01 1.84562517e-01 1.84405508e-01 1.84248899e-01 + 1.84092688e-01 1.83936874e-01 1.83781455e-01 1.83626429e-01 1.83471795e-01 + 1.83317551e-01 1.83163695e-01 1.83010226e-01 1.82857142e-01 1.82704442e-01 + 1.82552123e-01 1.82400185e-01 1.82248626e-01 1.82097444e-01 1.81946637e-01 + 1.81796204e-01 1.81646144e-01 1.81496455e-01 1.81347136e-01 1.81198184e-01 + 1.81049599e-01 1.80901378e-01 1.80753522e-01 1.80606027e-01 1.80458892e-01 + 1.80312117e-01 1.80165699e-01 1.80019637e-01 1.79873930e-01 1.79728576e-01 + 1.79583574e-01 1.79438922e-01 1.79294620e-01 1.79150665e-01 1.79007056e-01 + 1.78863792e-01 1.78720871e-01 1.78578292e-01 1.78436054e-01 1.78294156e-01 + 1.78152595e-01 1.78011371e-01 1.77870482e-01 1.77729928e-01 1.77589706e-01 + 1.77449815e-01 1.77310255e-01 1.77171023e-01 1.77032119e-01 1.76893540e-01 + 1.76755287e-01 1.76617358e-01 1.76479751e-01 1.76342465e-01 1.76205499e-01 + 1.76068851e-01 1.75932521e-01 1.75796507e-01 1.75660808e-01 1.75525423e-01 + 1.75390351e-01 1.75255589e-01 1.75121138e-01 1.74986996e-01 1.74853162e-01 + 1.74719634e-01 1.74586412e-01 1.74453494e-01 1.74320879e-01 1.74188566e-01 + 1.74056554e-01 1.73924842e-01 1.73793428e-01 1.73662312e-01 1.73531492e-01 + 1.73400967e-01 1.73270736e-01 1.73140798e-01 1.73011152e-01 1.72881797e-01 + 1.72752732e-01 1.72623955e-01 1.72495466e-01 1.72367263e-01 1.72239346e-01 + 1.72111713e-01 1.71984363e-01 1.71857296e-01 1.71730510e-01 1.71604004e-01 + 1.71477777e-01 1.71351828e-01 1.71226157e-01 1.71100761e-01 1.70975641e-01 + 1.70850795e-01 1.70726222e-01 1.70601921e-01 1.70477891e-01 1.70354131e-01 + 1.70230640e-01 1.70107418e-01 1.69984462e-01 1.69861773e-01 1.69739349e-01 + 1.69617190e-01 1.69495294e-01 1.69373660e-01 1.69252288e-01 1.69131176e-01 + 1.69010324e-01 1.68889731e-01 1.68769395e-01 1.68649317e-01 1.68529494e-01 + 1.68409926e-01 1.68290613e-01 1.68171552e-01 1.68052744e-01 1.67934188e-01 + 1.67815882e-01 1.67697825e-01 1.67580018e-01 1.67462458e-01 1.67345146e-01 + 1.67228079e-01 1.67111258e-01 1.66994682e-01 1.66878349e-01 1.66762259e-01 + 1.66646411e-01 1.66530804e-01 1.66415437e-01 1.66300309e-01 1.66185421e-01 + 1.66070770e-01 1.65956356e-01 1.65842178e-01 1.65728235e-01 1.65614527e-01 + 1.65501053e-01 1.65387812e-01 1.65274803e-01 1.65162025e-01 1.65049477e-01 + 1.64937160e-01 1.64825071e-01 1.64713211e-01 1.64601578e-01 1.64490172e-01 + 1.64378991e-01 1.64268036e-01 1.64157305e-01 1.64046798e-01 1.63936514e-01 + 1.63826452e-01 1.63716611e-01 1.63606991e-01 1.63497591e-01 1.63388409e-01 + 1.63279447e-01 1.63170702e-01 1.63062174e-01 1.62953862e-01 1.62845766e-01 + 1.62737885e-01 1.62630217e-01 1.62522764e-01 1.62415523e-01 1.62308493e-01 + 1.62201676e-01 1.62095069e-01 1.61988671e-01 1.61882483e-01 1.61776504e-01 + 1.61670732e-01 1.61565168e-01 1.61459810e-01 1.61354658e-01 1.61249711e-01 + 1.61144969e-01 1.61040431e-01 1.60936095e-01 1.60831963e-01 1.60728032e-01 + 1.60624302e-01 1.60520773e-01 1.60417444e-01 1.60314314e-01 1.60211383e-01 + 1.60108650e-01 1.60006114e-01 1.59903775e-01 1.59801632e-01 1.59699684e-01 + 1.59597932e-01 1.59496373e-01 1.59395009e-01 1.59293837e-01 1.59192858e-01 + 1.59092070e-01 1.58991474e-01 1.58891068e-01 1.58790852e-01 1.58690826e-01 + 1.58590988e-01 1.58491339e-01 1.58391877e-01 1.58292602e-01 1.58193514e-01 + 1.58094612e-01 1.57995894e-01 1.57897362e-01 1.57799013e-01 1.57700849e-01 + 1.57602867e-01 1.57505067e-01 1.57407450e-01 1.57310013e-01 1.57212758e-01 + 1.57115682e-01 1.57018786e-01 1.56922069e-01 1.56825531e-01 1.56729171e-01 + 1.56632988e-01 1.56536982e-01 1.56441152e-01 1.56345498e-01 1.56250019e-01 + 1.56154715e-01 1.56059585e-01 1.55964629e-01 1.55869846e-01 1.55775235e-01 + 1.55680797e-01 1.55586530e-01 1.55492434e-01 1.55398509e-01 1.55304754e-01 + 1.55211168e-01 1.55117751e-01 1.55024502e-01 1.54931422e-01 1.54838509e-01 + 1.54745763e-01 1.54653183e-01 1.54560770e-01 1.54468522e-01 1.54376439e-01 + 1.54284520e-01 1.54192765e-01 1.54101174e-01 1.54009746e-01 1.53918481e-01 + 1.53827377e-01 1.53736435e-01 1.53645654e-01 1.53555034e-01 1.53464574e-01 + 1.53374274e-01 1.53284132e-01 1.53194150e-01 1.53104326e-01 1.53014660e-01 + 1.52925151e-01 1.52835798e-01 1.52746603e-01 1.52657563e-01 1.52568679e-01 + 1.52479950e-01 1.52391376e-01 1.52302955e-01 1.52214689e-01 1.52126576e-01 + 1.52038615e-01 1.51950807e-01 1.51863151e-01 1.51775647e-01 1.51688293e-01 + 1.51601091e-01 1.51514038e-01 1.51427135e-01 1.51340382e-01 1.51253778e-01 + 1.51167322e-01 1.51081014e-01 1.50994854e-01 1.50908841e-01 1.50822975e-01 + 1.50737255e-01 1.50651681e-01 1.50566253e-01 1.50480970e-01 1.50395832e-01 + 1.50310838e-01 1.50225988e-01 1.50141281e-01 1.50056718e-01 1.49972298e-01 + 1.49888019e-01 1.49803883e-01 1.49719888e-01 1.49636035e-01 1.49552322e-01 + 1.49468749e-01 1.49385316e-01 1.49302023e-01 1.49218869e-01 1.49135854e-01 + 1.49052977e-01 1.48970239e-01 1.48887638e-01 1.48805174e-01 1.48722847e-01 + 1.48640656e-01 1.48558602e-01 1.48476683e-01 1.48394900e-01 1.48313252e-01 + 1.48231738e-01 1.48150359e-01 1.48069113e-01 1.47988001e-01 1.47907022e-01 + 1.47826176e-01 1.47745463e-01 1.47664881e-01 1.47584431e-01 1.47504113e-01 + 1.47423925e-01 1.47343868e-01 1.47263942e-01 1.47184145e-01 1.47104478e-01 + 1.47024940e-01 1.46945531e-01 1.46866251e-01 1.46787099e-01 1.46708074e-01 + 1.46629177e-01 1.46550407e-01 1.46471764e-01 1.46393248e-01 1.46314857e-01 + 1.46236593e-01 1.46158454e-01 1.46080440e-01 1.46002551e-01 1.45924786e-01 + 1.45847145e-01 1.45769628e-01 1.45692235e-01 1.45614965e-01 1.45537817e-01 + 1.45460792e-01 1.45383890e-01 1.45307109e-01 1.45230449e-01 1.45153911e-01 + 1.45077494e-01 1.45001197e-01 1.44925021e-01 1.44848964e-01 1.44773027e-01 + 1.44697209e-01 1.44621511e-01 1.44545931e-01 1.44470469e-01 1.44395126e-01 + 1.44319900e-01 1.44244791e-01 1.44169800e-01 1.44094926e-01 1.44020168e-01 + 1.43945527e-01 1.43871001e-01 1.43796591e-01 1.43722296e-01 1.43648117e-01 + 1.43574052e-01 1.43500101e-01 1.43426265e-01 1.43352542e-01 1.43278934e-01 + 1.43205438e-01 1.43132055e-01 1.43058785e-01 1.42985628e-01 1.42912583e-01 + 1.42839649e-01 1.42766827e-01 1.42694116e-01 1.42621516e-01 1.42549027e-01 + 1.42476649e-01 1.42404380e-01 1.42332222e-01 1.42260172e-01 1.42188233e-01 + 1.42116402e-01 1.42044680e-01 1.41973066e-01 1.41901561e-01 1.41830164e-01 + 1.41758874e-01 1.41687692e-01 1.41616617e-01 1.41545648e-01 1.41474786e-01 + 1.41404031e-01 1.41333382e-01 1.41262838e-01 1.41192400e-01 1.41122067e-01 + 1.41051839e-01 1.40981716e-01 1.40911698e-01 1.40841783e-01 1.40771973e-01 + 1.40702266e-01 1.40632663e-01 1.40563163e-01 1.40493766e-01 1.40424471e-01 + 1.40355279e-01 1.40286189e-01 1.40217202e-01 1.40148315e-01 1.40079531e-01 + 1.40010847e-01 1.39942264e-01 1.39873782e-01 1.39805401e-01 1.39737119e-01 + 1.39668938e-01 1.39600856e-01 1.39532874e-01 1.39464991e-01 1.39397207e-01 + 1.39329522e-01 1.39261935e-01 1.39194446e-01 1.39127056e-01 1.39059763e-01 + 1.38992568e-01 1.38925470e-01 1.38858469e-01 1.38791565e-01 1.38724758e-01 + 1.38658047e-01 1.38591432e-01 1.38524913e-01 1.38458490e-01 1.38392162e-01 + 1.38325930e-01 1.38259792e-01 1.38193750e-01 1.38127801e-01 1.38061947e-01 + 1.37996188e-01 1.37930522e-01 1.37864950e-01 1.37799471e-01 1.37734085e-01 + 1.37668793e-01 1.37603593e-01 1.37538485e-01 1.37473471e-01 1.37408548e-01 + 1.37343717e-01 1.37278977e-01 1.37214330e-01 1.37149773e-01 1.37085308e-01 + 1.37020933e-01 1.36956649e-01 1.36892455e-01 1.36828351e-01 1.36764338e-01 + 1.36700414e-01 1.36636580e-01 1.36572835e-01 1.36509179e-01 1.36445612e-01 + 1.36382134e-01 1.36318745e-01 1.36255443e-01 1.36192230e-01 1.36129105e-01 + 1.36066067e-01 1.36003117e-01 1.35940254e-01 1.35877478e-01 1.35814789e-01 + 1.35752187e-01 1.35689672e-01 1.35627242e-01 1.35564899e-01 1.35502641e-01 + 1.35440470e-01 1.35378384e-01 1.35316383e-01 1.35254467e-01 1.35192636e-01 + 1.35130890e-01 1.35069228e-01 1.35007651e-01 1.34946158e-01 1.34884748e-01 + 1.34823423e-01 1.34762181e-01 1.34701022e-01 1.34639947e-01 1.34578955e-01 + 1.34518045e-01 1.34457218e-01 1.34396474e-01 1.34335812e-01 1.34275232e-01 + 1.34214733e-01 1.34154317e-01 1.34093982e-01 1.34033728e-01 1.33973556e-01 + 1.33913464e-01 1.33853453e-01 1.33793523e-01 1.33733673e-01 1.33673904e-01 + 1.33614214e-01 1.33554605e-01 1.33495075e-01 1.33435625e-01 1.33376254e-01 + 1.33316962e-01 1.33257749e-01 1.33198615e-01 1.33139560e-01 1.33080583e-01 + 1.33021685e-01 1.32962864e-01 1.32904122e-01 1.32845457e-01 1.32786870e-01 + 1.32728361e-01 1.32669928e-01 1.32611573e-01 1.32553295e-01 1.32495093e-01 + 1.32436968e-01 1.32378920e-01 1.32320948e-01 1.32263052e-01 1.32205232e-01 + 1.32147487e-01 1.32089818e-01 1.32032225e-01 1.31974707e-01 1.31917264e-01 + 1.31859896e-01 1.31802603e-01 1.31745384e-01 1.31688240e-01 1.31631170e-01 + 1.31574174e-01 1.31517252e-01 1.31460404e-01 1.31403630e-01 1.31346929e-01 + 1.31290301e-01 1.31233747e-01 1.31177266e-01 1.31120857e-01 1.31064522e-01 + 1.31008258e-01 1.30952068e-01 1.30895949e-01 1.30839903e-01 1.30783928e-01 + 1.30728025e-01 1.30672194e-01 1.30616435e-01 1.30560746e-01 1.30505129e-01 + 1.30449583e-01 1.30394108e-01 1.30338703e-01 1.30283369e-01 1.30228105e-01 + 1.30172912e-01 1.30117789e-01 1.30062736e-01 1.30007752e-01 1.29952839e-01 + 1.29897994e-01 1.29843219e-01 1.29788514e-01 1.29733877e-01 1.29679310e-01 + 1.29624811e-01 1.29570381e-01 1.29516019e-01 1.29461726e-01 1.29407501e-01 + 1.29353344e-01 1.29299255e-01 1.29245234e-01 1.29191280e-01 1.29137394e-01 + 1.29083575e-01 1.29029824e-01 1.28976140e-01 1.28922522e-01 1.28868972e-01 + 1.28815488e-01 1.28762070e-01 1.28708719e-01 1.28655435e-01 1.28602216e-01 + 1.28549063e-01 1.28495977e-01 1.28442955e-01 1.28390000e-01 1.28337110e-01 + 1.28284285e-01 1.28231526e-01 1.28178831e-01 1.28126202e-01 1.28073637e-01 + 1.28021137e-01 1.27968701e-01 1.27916330e-01 1.27864023e-01 1.27811780e-01 + 1.27759601e-01 1.27707486e-01 1.27655434e-01 1.27603447e-01 1.27551522e-01 + 1.27499661e-01 1.27447864e-01 1.27396129e-01 1.27344457e-01 1.27292848e-01 + 1.27241302e-01 1.27189818e-01 1.27138397e-01 1.27087038e-01 1.27035742e-01 + 1.26984507e-01 1.26933334e-01 1.26882223e-01 1.26831174e-01 1.26780187e-01 + 1.26729260e-01 1.26678396e-01 1.26627592e-01 1.26576849e-01 1.26526168e-01 + 1.26475547e-01 1.26424987e-01 1.26374487e-01 1.26324048e-01 1.26273670e-01 + 1.26223351e-01 1.26173093e-01 1.26122894e-01 1.26072756e-01 1.26022677e-01 + 1.25972658e-01 1.25922698e-01 1.25872798e-01 1.25822957e-01 1.25773176e-01 + 1.25723453e-01 1.25673789e-01 1.25624184e-01 1.25574638e-01 1.25525150e-01 + 1.25475721e-01 1.25426350e-01 1.25377037e-01 1.25327782e-01 1.25278586e-01 + 1.25229447e-01 1.25180366e-01 1.25131343e-01 1.25082377e-01 1.25033469e-01 + 1.24984618e-01 1.24935824e-01 1.24887088e-01 1.24838408e-01 1.24789785e-01 + 1.24741219e-01 1.24692710e-01 1.24644257e-01 1.24595861e-01 1.24547521e-01 + 1.24499237e-01 1.24451010e-01 1.24402838e-01 1.24354722e-01 1.24306662e-01 + 1.24258658e-01 1.24210709e-01 1.24162816e-01 1.24114978e-01 1.24067195e-01 + 1.24019468e-01 1.23971795e-01 1.23924178e-01 1.23876615e-01 1.23829107e-01 + 1.23781654e-01 1.23734255e-01 1.23686910e-01 1.23639620e-01 1.23592384e-01 + 1.23545202e-01 1.23498075e-01 1.23451001e-01 1.23403980e-01 1.23357014e-01 + 1.23310101e-01 1.23263242e-01 1.23216436e-01 1.23169683e-01 1.23122983e-01 + 1.23076337e-01 1.23029743e-01 1.22983202e-01 1.22936715e-01 1.22890279e-01 + 1.22843897e-01 1.22797567e-01 1.22751289e-01 1.22705063e-01 1.22658890e-01 + 1.22612769e-01 1.22566700e-01 1.22520682e-01 1.22474717e-01 1.22428803e-01 + 1.22382941e-01 1.22337130e-01 1.22291371e-01 1.22245663e-01 1.22200006e-01 + 1.22154400e-01 1.22108845e-01 1.22063342e-01 1.22017889e-01 1.21972487e-01 + 1.21927135e-01 1.21881834e-01 1.21836584e-01 1.21791383e-01 1.21746234e-01 + 1.21701134e-01 1.21656084e-01 1.21611085e-01 1.21566135e-01 1.21521235e-01 + 1.21476385e-01 1.21431584e-01 1.21386833e-01 1.21342131e-01 1.21297479e-01 + 1.21252876e-01 1.21208322e-01 1.21163817e-01 1.21119362e-01 1.21074955e-01 + 1.21030597e-01 1.20986287e-01 1.20942026e-01 1.20897814e-01 1.20853651e-01 + 1.20809535e-01 1.20765468e-01 1.20721449e-01 1.20677478e-01 1.20633555e-01 + 1.20589681e-01 1.20545854e-01 1.20502074e-01 1.20458343e-01 1.20414659e-01 + 1.20371022e-01 1.20327433e-01 1.20283891e-01 1.20240396e-01 1.20196949e-01 + 1.20153549e-01 1.20110195e-01 1.20066889e-01 1.20023629e-01 1.19980416e-01 + 1.19937250e-01 1.19894130e-01 1.19851056e-01 1.19808030e-01 1.19765049e-01 + 1.19722115e-01 1.19679226e-01 1.19636384e-01 1.19593588e-01 1.19550838e-01 + 1.19508133e-01 1.19465474e-01 1.19422861e-01 1.19380294e-01 1.19337772e-01 + 1.19295295e-01 1.19252863e-01 1.19210477e-01 1.19168136e-01 1.19125841e-01 + 1.19083590e-01 1.19041384e-01 1.18999223e-01 1.18957106e-01 1.18915035e-01 + 1.18873008e-01 1.18831025e-01 1.18789087e-01 1.18747194e-01 1.18705344e-01 + 1.18663539e-01 1.18621778e-01 1.18580061e-01 1.18538388e-01 1.18496759e-01 + 1.18455174e-01 1.18413632e-01 1.18372134e-01 1.18330680e-01 1.18289269e-01 + 1.18247902e-01 1.18206578e-01 1.18165298e-01 1.18124060e-01 1.18082866e-01 + 1.18041715e-01 1.18000607e-01 1.17959541e-01 1.17918519e-01 1.17877539e-01 + 1.17836602e-01 1.17795708e-01 1.17754856e-01 1.17714047e-01 1.17673280e-01 + 1.17632556e-01 1.17591873e-01 1.17551233e-01 1.17510635e-01 1.17470079e-01 + 1.17429565e-01 1.17389093e-01 1.17348662e-01 1.17308274e-01 1.17267927e-01 + 1.17227622e-01 1.17187358e-01 1.17147135e-01 1.17106955e-01 1.17066815e-01 + 1.17026717e-01 1.16986659e-01 1.16946643e-01 1.16906668e-01 1.16866734e-01 + 1.16826841e-01 1.16786988e-01 1.16747177e-01 1.16707406e-01 1.16667676e-01 + 1.16627986e-01 1.16588337e-01 1.16548728e-01 1.16509159e-01 1.16469631e-01 + 1.16430143e-01 1.16390695e-01 1.16351287e-01 1.16311919e-01 1.16272591e-01 + 1.16233303e-01 1.16194055e-01 1.16154846e-01 1.16115678e-01 1.16076548e-01 + 1.16037459e-01 1.15998408e-01 1.15959397e-01 1.15920426e-01 1.15881494e-01 + 1.15842601e-01 1.15803747e-01 1.15764932e-01 1.15726156e-01 1.15687419e-01 + 1.15648721e-01 1.15610062e-01 1.15571441e-01 1.15532859e-01 1.15494316e-01 + 1.15455812e-01 1.15417345e-01 1.15378918e-01 1.15340528e-01 1.15302177e-01 + 1.15263864e-01 1.15225590e-01 1.15187353e-01 1.15149155e-01 1.15110994e-01 + 1.15072871e-01 1.15034786e-01 1.14996739e-01 1.14958730e-01 1.14920759e-01 + 1.14882824e-01 1.14844928e-01 1.14807069e-01 1.14769247e-01 1.14731463e-01 + 1.14693716e-01 1.14656006e-01 1.14618334e-01 1.14580699e-01 1.14543100e-01 + 1.14505539e-01 1.14468014e-01 1.14430527e-01 1.14393076e-01 1.14355662e-01 + 1.14318284e-01 1.14280944e-01 1.14243640e-01 1.14206372e-01 1.14169141e-01 + 1.14131946e-01 1.14094787e-01 1.14057665e-01 1.14020579e-01 1.13983529e-01 + 1.13946515e-01 1.13909538e-01 1.13872596e-01 1.13835690e-01 1.13798820e-01 + 1.13761986e-01 1.13725188e-01 1.13688425e-01 1.13651698e-01 1.13615006e-01 + 1.13578350e-01 1.13541730e-01 1.13505144e-01 1.13468595e-01 1.13432080e-01 + 1.13395601e-01 1.13359156e-01 1.13322747e-01 1.13286373e-01 1.13250035e-01 + 1.13213730e-01 1.13177461e-01 1.13141227e-01 1.13105028e-01 1.13068863e-01 + 1.13032733e-01 1.12996637e-01 1.12960576e-01 1.12924550e-01 1.12888558e-01 + 1.12852600e-01 1.12816677e-01 1.12780788e-01 1.12744933e-01 1.12709112e-01 + 1.12673326e-01 1.12637574e-01 1.12601855e-01 1.12566171e-01 1.12530520e-01 + 1.12494904e-01 1.12459321e-01 1.12423772e-01 1.12388256e-01 1.12352774e-01 + 1.12317326e-01 1.12281911e-01 1.12246530e-01 1.12211182e-01 1.12175868e-01 + 1.12140587e-01 1.12105339e-01 1.12070125e-01 1.12034943e-01 1.11999795e-01 + 1.11964679e-01 1.11929597e-01 1.11894548e-01 1.11859532e-01 1.11824548e-01 + 1.11789597e-01 1.11754679e-01 1.11719794e-01 1.11684941e-01 1.11650121e-01 + 1.11615334e-01 1.11580579e-01 1.11545856e-01 1.11511166e-01 1.11476508e-01 + 1.11441883e-01 1.11407289e-01 1.11372728e-01 1.11338199e-01 1.11303703e-01 + 1.11269238e-01 1.11234805e-01 1.11200404e-01 1.11166035e-01 1.11131698e-01 + 1.11097393e-01 1.11063119e-01 1.11028877e-01 1.10994667e-01 1.10960489e-01 + 1.10926342e-01 1.10892226e-01 1.10858142e-01 1.10824089e-01 1.10790068e-01 + 1.10756078e-01 1.10722119e-01 1.10688192e-01 1.10654295e-01 1.10620430e-01 + 1.10586596e-01 1.10552793e-01 1.10519021e-01 1.10485279e-01 1.10451569e-01 + 1.10417890e-01 1.10384241e-01 1.10350623e-01 1.10317036e-01 1.10283479e-01 + 1.10249953e-01 1.10216458e-01 1.10182993e-01 1.10149558e-01 1.10116154e-01 + 1.10082780e-01 1.10049437e-01 1.10016124e-01 1.09982841e-01 1.09949588e-01 + 1.09916366e-01 1.09883174e-01 1.09850011e-01 1.09816879e-01 1.09783776e-01 + 1.09750704e-01 1.09717661e-01 1.09684648e-01 1.09651665e-01 1.09618712e-01 + 1.09585789e-01 1.09552895e-01 1.09520030e-01 1.09487196e-01 1.09454390e-01 + 1.09421615e-01 1.09388868e-01 1.09356151e-01 1.09323464e-01 1.09290805e-01 + 1.09258176e-01 1.09225576e-01 1.09193006e-01 1.09160464e-01 1.09127951e-01 + 1.09095468e-01 1.09063013e-01 1.09030588e-01 1.08998191e-01 1.08965824e-01 + 1.08933485e-01 1.08901174e-01 1.08868893e-01 1.08836640e-01 1.08804416e-01 + 1.08772220e-01 1.08740054e-01 1.08707915e-01 1.08675805e-01 1.08643724e-01 + 1.08611671e-01 1.08579646e-01 1.08547649e-01 1.08515681e-01 1.08483741e-01 + 1.08451829e-01 1.08419946e-01 1.08388090e-01 1.08356263e-01 1.08324463e-01 + 1.08292692e-01 1.08260948e-01 1.08229233e-01 1.08197545e-01 1.08165885e-01 + 1.08134253e-01 1.08102648e-01 1.08071072e-01 1.08039523e-01 1.08008001e-01 + 1.07976507e-01 1.07945041e-01 1.07913602e-01 1.07882191e-01 1.07850807e-01 + 1.07819450e-01 1.07788121e-01 1.07756819e-01 1.07725544e-01 1.07694296e-01 + 1.07663076e-01 1.07631883e-01 1.07600717e-01 1.07569578e-01 1.07538466e-01 + 1.07507381e-01 1.07476322e-01 1.07445291e-01 1.07414287e-01 1.07383309e-01 + 1.07352359e-01 1.07321435e-01 1.07290537e-01 1.07259667e-01 1.07228823e-01 + 1.07198005e-01 1.07167214e-01 1.07136450e-01 1.07105712e-01 1.07075001e-01 + 1.07044316e-01 1.07013657e-01 1.06983025e-01 1.06952419e-01 1.06921839e-01 + 1.06891286e-01 1.06860758e-01 1.06830257e-01 1.06799782e-01 1.06769333e-01 + 1.06738910e-01 1.06708513e-01 1.06678142e-01 1.06647796e-01 1.06617477e-01 + 1.06587184e-01 1.06556916e-01 1.06526674e-01 1.06496458e-01 1.06466268e-01 + 1.06436103e-01 1.06405964e-01 1.06375850e-01 1.06345762e-01 1.06315700e-01 + 1.06285663e-01 1.06255651e-01 1.06225665e-01 1.06195704e-01 1.06165769e-01 + 1.06135859e-01 1.06105974e-01 1.06076114e-01 1.06046280e-01 1.06016470e-01 + 1.05986686e-01 1.05956927e-01 1.05927193e-01 1.05897484e-01 1.05867800e-01 + 1.05838141e-01 1.05808507e-01 1.05778897e-01 1.05749313e-01 1.05719753e-01 + 1.05690218e-01 1.05660708e-01 1.05631223e-01 1.05601762e-01 1.05572326e-01 + 1.05542914e-01 1.05513528e-01 1.05484165e-01 1.05454827e-01 1.05425514e-01 + 1.05396225e-01 1.05366960e-01 1.05337720e-01 1.05308504e-01 1.05279312e-01 + 1.05250145e-01 1.05221002e-01 1.05191883e-01 1.05162788e-01 1.05133717e-01 + 1.05104671e-01 1.05075648e-01 1.05046650e-01 1.05017675e-01 1.04988725e-01 + 1.04959798e-01 1.04930896e-01 1.04902017e-01 1.04873162e-01 1.04844331e-01 + 1.04815523e-01 1.04786740e-01 1.04757980e-01 1.04729243e-01 1.04700531e-01 + 1.04671841e-01 1.04643176e-01 1.04614534e-01 1.04585916e-01 1.04557321e-01 + 1.04528749e-01 1.04500201e-01 1.04471676e-01 1.04443175e-01 1.04414697e-01 + 1.04386242e-01 1.04357810e-01 1.04329402e-01 1.04301017e-01 1.04272655e-01 + 1.04244316e-01 1.04216000e-01 1.04187707e-01 1.04159437e-01 1.04131191e-01 + 1.04102967e-01 1.04074766e-01 1.04046588e-01 1.04018433e-01 1.03990301e-01 + 1.03962192e-01 1.03934105e-01 1.03906041e-01 1.03878000e-01 1.03849982e-01 + 1.03821986e-01 1.03794013e-01 1.03766062e-01 1.03738134e-01 1.03710229e-01 + 1.03682346e-01 1.03654486e-01 1.03626648e-01 1.03598832e-01 1.03571039e-01 + 1.03543268e-01 1.03515520e-01 1.03487793e-01 1.03460089e-01 1.03432408e-01 + 1.03404748e-01 1.03377111e-01 1.03349496e-01 1.03321903e-01 1.03294332e-01 + 1.03266783e-01 1.03239256e-01 1.03211751e-01 1.03184268e-01 1.03156807e-01 + 1.03129368e-01 1.03101951e-01 1.03074556e-01 1.03047182e-01 1.03019831e-01 + 1.02992501e-01 1.02965192e-01 1.02937906e-01 1.02910641e-01 1.02883398e-01 + 1.02856177e-01 1.02828977e-01 1.02801798e-01 1.02774642e-01 1.02747506e-01 + 1.02720392e-01 1.02693300e-01 1.02666229e-01 1.02639180e-01 1.02612151e-01 + 1.02585145e-01 1.02558159e-01 1.02531195e-01 1.02504252e-01 1.02477330e-01 + 1.02450430e-01 1.02423550e-01 1.02396692e-01 1.02369855e-01 1.02343039e-01 + 1.02316244e-01 1.02289470e-01 1.02262717e-01 1.02235985e-01 1.02209274e-01 + 1.02182584e-01 1.02155915e-01 1.02129267e-01 1.02102639e-01 1.02076033e-01 + 1.02049447e-01 1.02022882e-01 1.01996338e-01 1.01969814e-01 1.01943311e-01 + 1.01916829e-01 1.01890367e-01 1.01863926e-01 1.01837505e-01 1.01811106e-01 + 1.01784726e-01 1.01758367e-01 1.01732029e-01 1.01705711e-01 1.01679413e-01 + 1.01653136e-01 1.01626879e-01 1.01600643e-01 1.01574426e-01 1.01548230e-01 + 1.01522055e-01 1.01495899e-01 1.01469764e-01 1.01443649e-01 1.01417554e-01 + 1.01391479e-01 1.01365425e-01 1.01339390e-01 1.01313376e-01 1.01287381e-01 + 1.01261406e-01 1.01235452e-01 1.01209517e-01 1.01183603e-01 1.01157708e-01 + 1.01131833e-01 1.01105978e-01 1.01080143e-01 1.01054327e-01 1.01028532e-01 + 1.01002756e-01 1.00976999e-01 1.00951263e-01 1.00925546e-01 1.00899849e-01 + 1.00874171e-01 1.00848513e-01 1.00822875e-01 1.00797256e-01 1.00771656e-01 + 1.00746077e-01 1.00720516e-01 1.00694975e-01 1.00669454e-01 1.00643952e-01 + 1.00618469e-01 1.00593005e-01 1.00567561e-01 1.00542136e-01 1.00516731e-01 + 1.00491345e-01 1.00465978e-01 1.00440630e-01 1.00415301e-01 1.00389992e-01 + 1.00364701e-01 1.00339430e-01 1.00314178e-01 1.00288944e-01 1.00263730e-01 + 1.00238535e-01 1.00213359e-01 1.00188202e-01 1.00163064e-01 1.00137944e-01 + 1.00112844e-01 1.00087762e-01 1.00062700e-01 1.00037656e-01 1.00012631e-01 + 9.99876242e-02 9.99626366e-02 9.99376677e-02 9.99127176e-02 9.98877861e-02 + 9.98628732e-02 9.98379790e-02 9.98131034e-02 9.97882464e-02 9.97634079e-02 + 9.97385880e-02 9.97137866e-02 9.96890037e-02 9.96642393e-02 9.96394933e-02 + 9.96147657e-02 9.95900565e-02 9.95653657e-02 9.95406933e-02 9.95160392e-02 + 9.94914034e-02 9.94667859e-02 9.94421867e-02 9.94176057e-02 9.93930429e-02 + 9.93684983e-02 9.93439719e-02 9.93194636e-02 9.92949735e-02 9.92705015e-02 + 9.92460476e-02 9.92216117e-02 9.91971939e-02 9.91727940e-02 9.91484122e-02 + 9.91240484e-02 9.90997025e-02 9.90753745e-02 9.90510645e-02 9.90267723e-02 + 9.90024980e-02 9.89782415e-02 9.89540029e-02 9.89297821e-02 9.89055790e-02 + 9.88813937e-02 9.88572261e-02 9.88330763e-02 9.88089441e-02 9.87848296e-02 + 9.87607327e-02 9.87366535e-02 9.87125919e-02 9.86885478e-02 9.86645213e-02 + 9.86405124e-02 9.86165209e-02 9.85925470e-02 9.85685906e-02 9.85446516e-02 + 9.85207300e-02 9.84968258e-02 9.84729391e-02 9.84490697e-02 9.84252176e-02 + 9.84013829e-02 9.83775655e-02 9.83537654e-02 9.83299825e-02 9.83062169e-02 + 9.82824685e-02 9.82587374e-02 9.82350233e-02 9.82113265e-02 9.81876468e-02 + 9.81639842e-02 9.81403387e-02 9.81167103e-02 9.80930990e-02 9.80695047e-02 + 9.80459274e-02 9.80223671e-02 9.79988238e-02 9.79752974e-02 9.79517880e-02 + 9.79282955e-02 9.79048199e-02 9.78813611e-02 9.78579192e-02 9.78344942e-02 + 9.78110859e-02 9.77876945e-02 9.77643198e-02 9.77409619e-02 9.77176207e-02 + 9.76942963e-02 9.76709885e-02 9.76476974e-02 9.76244230e-02 9.76011651e-02 + 9.75779239e-02 9.75546993e-02 9.75314913e-02 9.75082999e-02 9.74851249e-02 + 9.74619665e-02 9.74388246e-02 9.74156991e-02 9.73925901e-02 9.73694976e-02 + 9.73464215e-02 9.73233617e-02 9.73003184e-02 9.72772914e-02 9.72542807e-02 + 9.72312864e-02 9.72083084e-02 9.71853467e-02 9.71624012e-02 9.71394719e-02 + 9.71165589e-02 9.70936621e-02 9.70707815e-02 9.70479171e-02 9.70250688e-02 + 9.70022366e-02 9.69794205e-02 9.69566206e-02 9.69338367e-02 9.69110688e-02 + 9.68883170e-02 9.68655813e-02 9.68428615e-02 9.68201577e-02 9.67974698e-02 + 9.67747979e-02 9.67521419e-02 9.67295019e-02 9.67068777e-02 9.66842693e-02 + 9.66616769e-02 9.66391002e-02 9.66165394e-02 9.65939943e-02 9.65714651e-02 + 9.65489516e-02 9.65264538e-02 9.65039718e-02 9.64815054e-02 9.64590547e-02 + 9.64366197e-02 9.64142004e-02 9.63917967e-02 9.63694086e-02 9.63470360e-02 + 9.63246791e-02 9.63023377e-02 9.62800118e-02 9.62577015e-02 9.62354067e-02 + 9.62131273e-02 9.61908635e-02 9.61686150e-02 9.61463820e-02 9.61241644e-02 + 9.61019623e-02 9.60797754e-02 9.60576040e-02 9.60354479e-02 9.60133071e-02 + 9.59911816e-02 9.59690714e-02 9.59469765e-02 9.59248968e-02 9.59028324e-02 + 9.58807832e-02 9.58587492e-02 9.58367303e-02 9.58147267e-02 9.57927382e-02 + 9.57707648e-02 9.57488065e-02 9.57268633e-02 9.57049352e-02 9.56830222e-02 + 9.56611242e-02 9.56392413e-02 9.56173733e-02 9.55955204e-02 9.55736824e-02 + 9.55518594e-02 9.55300513e-02 9.55082582e-02 9.54864799e-02 9.54647166e-02 + 9.54429681e-02 9.54212345e-02 9.53995157e-02 9.53778117e-02 9.53561226e-02 + 9.53344482e-02 9.53127886e-02 9.52911438e-02 9.52695137e-02 9.52478984e-02 + 9.52262977e-02 9.52047117e-02 9.51831404e-02 9.51615838e-02 9.51400418e-02 + 9.51185144e-02 9.50970016e-02 9.50755034e-02 9.50540198e-02 9.50325508e-02 + 9.50110963e-02 9.49896563e-02 9.49682308e-02 9.49468198e-02 9.49254233e-02 + 9.49040412e-02 9.48826736e-02 9.48613204e-02 9.48399817e-02 9.48186573e-02 + 9.47973473e-02 9.47760516e-02 9.47547703e-02 9.47335034e-02 9.47122507e-02 + 9.46910123e-02 9.46697883e-02 9.46485784e-02 9.46273829e-02 9.46062015e-02 + 9.45850344e-02 9.45638815e-02 9.45427428e-02 9.45216182e-02 9.45005078e-02 + 9.44794116e-02 9.44583294e-02 9.44372614e-02 9.44162074e-02 9.43951676e-02 + 9.43741418e-02 9.43531300e-02 9.43321323e-02 9.43111485e-02 9.42901788e-02 + 9.42692231e-02 9.42482813e-02 9.42273534e-02 9.42064395e-02 9.41855396e-02 + 9.41646535e-02 9.41437813e-02 9.41229230e-02 9.41020785e-02 9.40812479e-02 + 9.40604311e-02 9.40396282e-02 9.40188390e-02 9.39980636e-02 9.39773020e-02 + 9.39565541e-02 9.39358200e-02 9.39150995e-02 9.38943928e-02 9.38736998e-02 + 9.38530204e-02 9.38323548e-02 9.38117027e-02 9.37910643e-02 9.37704395e-02 + 9.37498283e-02 9.37292307e-02 9.37086466e-02 9.36880762e-02 9.36675192e-02 + 9.36469758e-02 9.36264459e-02 9.36059295e-02 9.35854265e-02 9.35649371e-02 + 9.35444611e-02 9.35239985e-02 9.35035493e-02 9.34831136e-02 9.34626912e-02 + 9.34422823e-02 9.34218866e-02 9.34015044e-02 9.33811355e-02 9.33607798e-02 + 9.33404375e-02 9.33201085e-02 9.32997928e-02 9.32794903e-02 9.32592011e-02 + 9.32389251e-02 9.32186624e-02 9.31984128e-02 9.31781764e-02 9.31579532e-02 + 9.31377432e-02 9.31175463e-02 9.30973626e-02 9.30771919e-02 9.30570344e-02 + 9.30368899e-02 9.30167586e-02 9.29966403e-02 9.29765350e-02 9.29564428e-02 + 9.29363636e-02 9.29162974e-02 9.28962442e-02 9.28762040e-02 9.28561768e-02 + 9.28361624e-02 9.28161611e-02 9.27961726e-02 9.27761971e-02 9.27562344e-02 + 9.27362847e-02 9.27163478e-02 9.26964237e-02 9.26765125e-02 9.26566141e-02 + 9.26367286e-02 9.26168558e-02 9.25969958e-02 9.25771486e-02 9.25573141e-02 + 9.25374924e-02 9.25176834e-02 9.24978871e-02 9.24781036e-02 9.24583327e-02 + 9.24385745e-02 9.24188289e-02 9.23990960e-02 9.23793758e-02 9.23596681e-02 + 9.23399731e-02 9.23202907e-02 9.23006208e-02 9.22809635e-02 9.22613188e-02 + 9.22416866e-02 9.22220669e-02 9.22024597e-02 9.21828651e-02 9.21632829e-02 + 9.21437132e-02 9.21241560e-02 9.21046112e-02 9.20850788e-02 9.20655589e-02 + 9.20460514e-02 9.20265563e-02 9.20070735e-02 9.19876031e-02 9.19681451e-02 + 9.19486994e-02 9.19292661e-02 9.19098451e-02 9.18904363e-02 9.18710399e-02 + 9.18516557e-02 9.18322838e-02 9.18129242e-02 9.17935768e-02 9.17742416e-02 + 9.17549186e-02 9.17356079e-02 9.17163093e-02 9.16970229e-02 9.16777486e-02 + 9.16584865e-02 9.16392366e-02 9.16199987e-02 9.16007730e-02 9.15815594e-02 + 9.15623578e-02 9.15431684e-02 9.15239910e-02 9.15048256e-02 9.14856723e-02 + 9.14665310e-02 9.14474017e-02 9.14282844e-02 9.14091791e-02 9.13900857e-02 + 9.13710043e-02 9.13519349e-02 9.13328774e-02 9.13138318e-02 9.12947982e-02 + 9.12757764e-02 9.12567665e-02 9.12377685e-02 9.12187823e-02 9.11998080e-02 + 9.11808456e-02 9.11618949e-02 9.11429561e-02 9.11240290e-02 9.11051138e-02 + 9.10862103e-02 9.10673186e-02 9.10484386e-02 9.10295704e-02 9.10107139e-02 + 9.09918691e-02 9.09730360e-02 9.09542146e-02 9.09354049e-02 9.09166069e-02 + 9.08978205e-02 9.08790457e-02 9.08602826e-02 9.08415311e-02 9.08227911e-02 + 9.08040628e-02 9.07853461e-02 9.07666409e-02 9.07479473e-02 9.07292652e-02 + 9.07105947e-02 9.06919357e-02 9.06732882e-02 9.06546522e-02 9.06360277e-02 + 9.06174146e-02 9.05988131e-02 9.05802229e-02 9.05616442e-02 9.05430770e-02 + 9.05245211e-02 9.05059767e-02 9.04874436e-02 9.04689219e-02 9.04504116e-02 + 9.04319127e-02 9.04134251e-02 9.03949488e-02 9.03764839e-02 9.03580303e-02 + 9.03395879e-02 9.03211569e-02 9.03027371e-02 9.02843286e-02 9.02659313e-02 + 9.02475453e-02 9.02291706e-02 9.02108070e-02 9.01924546e-02 9.01741135e-02 + 9.01557835e-02 9.01374647e-02 9.01191571e-02 9.01008606e-02 9.00825752e-02 + 9.00643010e-02 9.00460379e-02 9.00277859e-02 9.00095450e-02 8.99913152e-02 + 8.99730965e-02 8.99548888e-02 8.99366921e-02 8.99185065e-02 8.99003320e-02 + 8.98821684e-02 8.98640159e-02 8.98458743e-02 8.98277437e-02 8.98096241e-02 + 8.97915155e-02 8.97734178e-02 8.97553311e-02 8.97372552e-02 8.97191903e-02 + 8.97011363e-02 8.96830932e-02 8.96650610e-02 8.96470396e-02 8.96290291e-02 + 8.96110295e-02 8.95930407e-02 8.95750627e-02 8.95570956e-02 8.95391392e-02 + 8.95211937e-02 8.95032589e-02 8.94853349e-02 8.94674217e-02 8.94495192e-02 + 8.94316275e-02 8.94137465e-02 8.93958762e-02 8.93780167e-02 8.93601678e-02 + 8.93423296e-02 8.93245021e-02 8.93066853e-02 8.92888791e-02 8.92710836e-02 + 8.92532987e-02 8.92355244e-02 8.92177608e-02 8.92000077e-02 8.91822653e-02 + 8.91645334e-02 8.91468121e-02 8.91291014e-02 8.91114012e-02 8.90937115e-02 + 8.90760324e-02 8.90583638e-02 8.90407057e-02 8.90230582e-02 8.90054211e-02 + 8.89877945e-02 8.89701783e-02 8.89525726e-02 8.89349774e-02 8.89173926e-02 + 8.88998182e-02 8.88822542e-02 8.88647007e-02 8.88471575e-02 8.88296247e-02 + 8.88121023e-02 8.87945903e-02 8.87770886e-02 8.87595973e-02 8.87421163e-02 + 8.87246456e-02 8.87071853e-02 8.86897352e-02 8.86722954e-02 8.86548660e-02 + 8.86374468e-02 8.86200378e-02 8.86026391e-02 8.85852507e-02 8.85678725e-02 + 8.85505045e-02 8.85331467e-02 8.85157991e-02 8.84984618e-02 8.84811346e-02 + 8.84638176e-02 8.84465107e-02 8.84292140e-02 8.84119274e-02 8.83946510e-02 + 8.83773847e-02 8.83601285e-02 8.83428825e-02 8.83256465e-02 8.83084206e-02 + 8.82912047e-02 8.82739990e-02 8.82568033e-02 8.82396176e-02 8.82224420e-02 + 8.82052764e-02 8.81881208e-02 8.81709752e-02 8.81538396e-02 8.81367140e-02 + 8.81195984e-02 8.81024927e-02 8.80853970e-02 8.80683113e-02 8.80512355e-02 + 8.80341696e-02 8.80171137e-02 8.80000676e-02 8.79830314e-02 8.79660052e-02 + 8.79489888e-02 8.79319823e-02 8.79149857e-02 8.78979989e-02 8.78810219e-02 + 8.78640548e-02 8.78470975e-02 8.78301500e-02 8.78132123e-02 8.77962845e-02 + 8.77793664e-02 8.77624580e-02 8.77455595e-02 8.77286707e-02 8.77117916e-02 + 8.76949223e-02 8.76780628e-02 8.76612129e-02 8.76443728e-02 8.76275423e-02 + 8.76107216e-02 8.75939105e-02 8.75771091e-02 8.75603174e-02 8.75435353e-02 + 8.75267629e-02 8.75100001e-02 8.74932469e-02 8.74765033e-02 8.74597694e-02 + 8.74430451e-02 8.74263303e-02 8.74096251e-02 8.73929296e-02 8.73762435e-02 + 8.73595670e-02 8.73429001e-02 8.73262427e-02 8.73095948e-02 8.72929565e-02 + 8.72763276e-02 8.72597083e-02 8.72430984e-02 8.72264981e-02 8.72099072e-02 + 8.71933257e-02 8.71767537e-02 8.71601912e-02 8.71436381e-02 8.71270944e-02 + 8.71105602e-02 8.70940353e-02 8.70775199e-02 8.70610138e-02 8.70445172e-02 + 8.70280299e-02 8.70115519e-02 8.69950834e-02 8.69786241e-02 8.69621742e-02 + 8.69457337e-02 8.69293024e-02 8.69128805e-02 8.68964679e-02 8.68800646e-02 + 8.68636705e-02 8.68472857e-02 8.68309103e-02 8.68145440e-02 8.67981870e-02 + 8.67818393e-02 8.67655008e-02 8.67491715e-02 8.67328514e-02 8.67165406e-02 + 8.67002389e-02 8.66839464e-02 8.66676631e-02 8.66513890e-02 8.66351240e-02 + 8.66188682e-02 8.66026216e-02 8.65863841e-02 8.65701557e-02 8.65539364e-02 + 8.65377263e-02 8.65215252e-02 8.65053333e-02 8.64891504e-02 8.64729766e-02 + 8.64568119e-02 8.64406563e-02 8.64245097e-02 8.64083721e-02 8.63922436e-02 + 8.63761241e-02 8.63600136e-02 8.63439122e-02 8.63278197e-02 8.63117363e-02 + 8.62956618e-02 8.62795963e-02 8.62635398e-02 8.62474922e-02 8.62314536e-02 + 8.62154239e-02 8.61994032e-02 8.61833914e-02 8.61673885e-02 8.61513945e-02 + 8.61354094e-02 8.61194332e-02 8.61034659e-02 8.60875075e-02 8.60715580e-02 + 8.60556173e-02 8.60396855e-02 8.60237625e-02 8.60078483e-02 8.59919430e-02 + 8.59760465e-02 8.59601588e-02 8.59442800e-02 8.59284099e-02 8.59125486e-02 + 8.58966961e-02 8.58808523e-02 8.58650173e-02 8.58491911e-02 8.58333736e-02 + 8.58175649e-02 8.58017649e-02 8.57859736e-02 8.57701911e-02 8.57544172e-02 + 8.57386520e-02 8.57228956e-02 8.57071478e-02 8.56914087e-02 8.56756782e-02 + 8.56599565e-02 8.56442433e-02 8.56285389e-02 8.56128430e-02 8.55971558e-02 + 8.55814772e-02 8.55658072e-02 8.55501458e-02 8.55344930e-02 8.55188488e-02 + 8.55032132e-02 8.54875862e-02 8.54719677e-02 8.54563578e-02 8.54407564e-02 + 8.54251636e-02 8.54095793e-02 8.53940035e-02 8.53784363e-02 8.53628775e-02 + 8.53473273e-02 8.53317855e-02 8.53162523e-02 8.53007275e-02 8.52852112e-02 + 8.52697034e-02 8.52542040e-02 8.52387130e-02 8.52232305e-02 8.52077565e-02 + 8.51922909e-02 8.51768336e-02 8.51613848e-02 8.51459444e-02 8.51305124e-02 + 8.51150888e-02 8.50996736e-02 8.50842667e-02 8.50688682e-02 8.50534780e-02 + 8.50380963e-02 8.50227228e-02 8.50073577e-02 8.49920009e-02 8.49766524e-02 + 8.49613123e-02 8.49459804e-02 8.49306569e-02 8.49153416e-02 8.49000346e-02 + 8.48847359e-02 8.48694455e-02 8.48541633e-02 8.48388893e-02 8.48236237e-02 + 8.48083662e-02 8.47931170e-02 8.47778760e-02 8.47626432e-02 8.47474187e-02 + 8.47322023e-02 8.47169941e-02 8.47017941e-02 8.46866023e-02 8.46714187e-02 + 8.46562432e-02 8.46410759e-02 8.46259167e-02 8.46107657e-02 8.45956228e-02 + 8.45804880e-02 8.45653614e-02 8.45502428e-02 8.45351324e-02 8.45200301e-02 + 8.45049358e-02 8.44898497e-02 8.44747716e-02 8.44597016e-02 8.44446397e-02 + 8.44295858e-02 8.44145399e-02 8.43995021e-02 8.43844724e-02 8.43694506e-02 + 8.43544369e-02 8.43394312e-02 8.43244335e-02 8.43094438e-02 8.42944621e-02 + 8.42794883e-02 8.42645226e-02 8.42495648e-02 8.42346150e-02 8.42196731e-02 + 8.42047392e-02 8.41898132e-02 8.41748952e-02 8.41599851e-02 8.41450829e-02 + 8.41301886e-02 8.41153022e-02 8.41004238e-02 8.40855532e-02 8.40706905e-02 + 8.40558357e-02 8.40409887e-02 8.40261496e-02 8.40113184e-02 8.39964950e-02 + 8.39816795e-02 8.39668718e-02 8.39520719e-02 8.39372799e-02 8.39224957e-02 + 8.39077193e-02 8.38929507e-02 8.38781898e-02 8.38634368e-02 8.38486916e-02 + 8.38339541e-02 8.38192244e-02 8.38045025e-02 8.37897883e-02 8.37750818e-02 + 8.37603831e-02 8.37456922e-02 8.37310089e-02 8.37163334e-02 8.37016656e-02 + 8.36870055e-02 8.36723531e-02 8.36577084e-02 8.36430714e-02 8.36284421e-02 + 8.36138204e-02 8.35992064e-02 8.35846001e-02 8.35700014e-02 8.35554104e-02 + 8.35408270e-02 8.35262512e-02 8.35116831e-02 8.34971226e-02 8.34825697e-02 + 8.34680244e-02 8.34534867e-02 8.34389566e-02 8.34244341e-02 8.34099191e-02 + 8.33954118e-02 8.33809120e-02 8.33664197e-02 8.33519351e-02 8.33374579e-02 + 8.33229883e-02 8.33085263e-02 8.32940718e-02 8.32796248e-02 8.32651853e-02 + 8.32507533e-02 8.32363288e-02 8.32219118e-02 8.32075023e-02 8.31931003e-02 + 8.31787058e-02 8.31643187e-02 8.31499391e-02 8.31355669e-02 8.31212022e-02 + 8.31068450e-02 8.30924951e-02 8.30781528e-02 8.30638178e-02 8.30494902e-02 + 8.30351701e-02 8.30208574e-02 8.30065520e-02 8.29922541e-02 8.29779635e-02 + 8.29636804e-02 8.29494046e-02 8.29351361e-02 8.29208751e-02 8.29066213e-02 + 8.28923750e-02 8.28781359e-02 8.28639042e-02 8.28496799e-02 8.28354628e-02 + 8.28212531e-02 8.28070507e-02 8.27928556e-02 8.27786678e-02 8.27644872e-02 + 8.27503140e-02 8.27361480e-02 8.27219893e-02 8.27078379e-02 8.26936938e-02 + 8.26795569e-02 8.26654272e-02 8.26513048e-02 8.26371896e-02 8.26230816e-02 + 8.26089809e-02 8.25948874e-02 8.25808011e-02 8.25667220e-02 8.25526501e-02 + 8.25385854e-02 8.25245279e-02 8.25104775e-02 8.24964344e-02 8.24823984e-02 + 8.24683695e-02 8.24543479e-02 8.24403333e-02 8.24263259e-02 8.24123257e-02 + 8.23983326e-02 8.23843466e-02 8.23703677e-02 8.23563960e-02 8.23424313e-02 + 8.23284737e-02 8.23145233e-02 8.23005799e-02 8.22866436e-02 8.22727144e-02 + 8.22587923e-02 8.22448772e-02 8.22309692e-02 8.22170683e-02 8.22031744e-02 + 8.21892875e-02 8.21754077e-02 8.21615349e-02 8.21476691e-02 8.21338103e-02 + 8.21199586e-02 8.21061138e-02 8.20922761e-02 8.20784453e-02 8.20646216e-02 + 8.20508048e-02 8.20369950e-02 8.20231922e-02 8.20093963e-02 8.19956074e-02 + 8.19818254e-02 8.19680504e-02 8.19542823e-02 8.19405212e-02 8.19267670e-02 + 8.19130197e-02 8.18992794e-02 8.18855459e-02 8.18718194e-02 8.18580997e-02 + 8.18443870e-02 8.18306811e-02 8.18169822e-02 8.18032901e-02 8.17896048e-02 + 8.17759265e-02 8.17622550e-02 8.17485903e-02 8.17349326e-02 8.17212816e-02 + 8.17076375e-02 8.16940002e-02 8.16803697e-02 8.16667461e-02 8.16531293e-02 + 8.16395193e-02 8.16259161e-02 8.16123197e-02 8.15987300e-02 8.15851472e-02 + 8.15715712e-02 8.15580019e-02 8.15444394e-02 8.15308836e-02 8.15173346e-02 + 8.15037924e-02 8.14902569e-02 8.14767282e-02 8.14632062e-02 8.14496909e-02 + 8.14361823e-02 8.14226805e-02 8.14091854e-02 8.13956970e-02 8.13822153e-02 + 8.13687402e-02 8.13552719e-02 8.13418103e-02 8.13283553e-02 8.13149070e-02 + 8.13014654e-02 8.12880305e-02 8.12746022e-02 8.12611805e-02 8.12477656e-02 + 8.12343572e-02 8.12209555e-02 8.12075604e-02 8.11941719e-02 8.11807901e-02 + 8.11674149e-02 8.11540463e-02 8.11406843e-02 8.11273288e-02 8.11139800e-02 + 8.11006378e-02 8.10873021e-02 8.10739731e-02 8.10606506e-02 8.10473346e-02 + 8.10340252e-02 8.10207224e-02 8.10074261e-02 8.09941364e-02 8.09808532e-02 + 8.09675765e-02 8.09543064e-02 8.09410428e-02 8.09277857e-02 8.09145351e-02 + 8.09012911e-02 8.08880535e-02 8.08748224e-02 8.08615978e-02 8.08483797e-02 + 8.08351681e-02 8.08219630e-02 8.08087643e-02 8.07955721e-02 8.07823863e-02 + 8.07692070e-02 8.07560342e-02 8.07428678e-02 8.07297078e-02 8.07165542e-02 + 8.07034071e-02 8.06902664e-02 8.06771322e-02 8.06640043e-02 8.06508829e-02 + 8.06377678e-02 8.06246592e-02 8.06115569e-02 8.05984610e-02 8.05853715e-02 + 8.05722884e-02 8.05592116e-02 8.05461412e-02 8.05330772e-02 8.05200195e-02 + 8.05069682e-02 8.04939232e-02 8.04808846e-02 8.04678523e-02 8.04548263e-02 + 8.04418066e-02 8.04287933e-02 8.04157863e-02 8.04027856e-02 8.03897912e-02 + 8.03768031e-02 8.03638212e-02 8.03508457e-02 8.03378765e-02 8.03249135e-02 + 8.03119568e-02 8.02990064e-02 8.02860622e-02 8.02731243e-02 8.02601926e-02 + 8.02472672e-02 8.02343481e-02 8.02214351e-02 8.02085284e-02 8.01956280e-02 + 8.01827337e-02 8.01698457e-02 8.01569639e-02 8.01440883e-02 8.01312189e-02 + 8.01183557e-02 8.01054986e-02 8.00926478e-02 8.00798032e-02 8.00669647e-02 + 8.00541324e-02 8.00413063e-02 8.00284863e-02 8.00156725e-02 8.00028649e-02 + 7.99900634e-02 7.99772680e-02 7.99644788e-02 7.99516957e-02 7.99389187e-02 + 7.99261479e-02 7.99133832e-02 7.99006246e-02 7.98878721e-02 7.98751257e-02 + 7.98623854e-02 7.98496512e-02 7.98369231e-02 7.98242011e-02 7.98114851e-02 + 7.97987753e-02 7.97860715e-02 7.97733737e-02 7.97606821e-02 7.97479965e-02 + 7.97353169e-02 7.97226434e-02 7.97099759e-02 7.96973145e-02 7.96846590e-02 + 7.96720097e-02 7.96593663e-02 7.96467290e-02 7.96340976e-02 7.96214723e-02 + 7.96088530e-02 7.95962397e-02 7.95836323e-02 7.95710310e-02 7.95584356e-02 + 7.95458463e-02 7.95332629e-02 7.95206854e-02 7.95081140e-02 7.94955485e-02 + 7.94829889e-02 7.94704353e-02 7.94578877e-02 7.94453459e-02 7.94328102e-02 + 7.94202803e-02 7.94077564e-02 7.93952384e-02 7.93827263e-02 7.93702202e-02 + 7.93577199e-02 7.93452256e-02 7.93327371e-02 7.93202546e-02 7.93077779e-02 + 7.92953071e-02 7.92828423e-02 7.92703832e-02 7.92579301e-02 7.92454828e-02 + 7.92330414e-02 7.92206058e-02 7.92081761e-02 7.91957523e-02 7.91833343e-02 + 7.91709221e-02 7.91585157e-02 7.91461152e-02 7.91337206e-02 7.91213317e-02 + 7.91089486e-02 7.90965714e-02 7.90842000e-02 7.90718344e-02 7.90594746e-02 + 7.90471205e-02 7.90347723e-02 7.90224298e-02 7.90100932e-02 7.89977623e-02 + 7.89854371e-02 7.89731178e-02 7.89608042e-02 7.89484964e-02 7.89361943e-02 + 7.89238979e-02 7.89116073e-02 7.88993225e-02 7.88870434e-02 7.88747700e-02 + 7.88625023e-02 7.88502404e-02 7.88379842e-02 7.88257337e-02 7.88134889e-02 + 7.88012498e-02 7.87890164e-02 7.87767887e-02 7.87645667e-02 7.87523504e-02 + 7.87401398e-02 7.87279348e-02 7.87157355e-02 7.87035419e-02 7.86913540e-02 + 7.86791717e-02 7.86669951e-02 7.86548241e-02 7.86426588e-02 7.86304991e-02 + 7.86183450e-02 7.86061966e-02 7.85940538e-02 7.85819167e-02 7.85697851e-02 + 7.85576592e-02 7.85455389e-02 7.85334242e-02 7.85213151e-02 7.85092116e-02 + 7.84971137e-02 7.84850214e-02 7.84729347e-02 7.84608535e-02 7.84487780e-02 + 7.84367080e-02 7.84246436e-02 7.84125847e-02 7.84005314e-02 7.83884837e-02 + 7.83764415e-02 7.83644048e-02 7.83523737e-02 7.83403482e-02 7.83283282e-02 + 7.83163137e-02 7.83043047e-02 7.82923013e-02 7.82803034e-02 7.82683110e-02 + 7.82563241e-02 7.82443427e-02 7.82323668e-02 7.82203964e-02 7.82084315e-02 + 7.81964721e-02 7.81845182e-02 7.81725697e-02 7.81606268e-02 7.81486893e-02 + 7.81367572e-02 7.81248307e-02 7.81129096e-02 7.81009939e-02 7.80890837e-02 + 7.80771790e-02 7.80652797e-02 7.80533858e-02 7.80414974e-02 7.80296144e-02 + 7.80177368e-02 7.80058646e-02 7.79939979e-02 7.79821366e-02 7.79702807e-02 + 7.79584302e-02 7.79465851e-02 7.79347454e-02 7.79229111e-02 7.79110821e-02 + 7.78992586e-02 7.78874404e-02 7.78756277e-02 7.78638202e-02 7.78520182e-02 + 7.78402215e-02 7.78284302e-02 7.78166443e-02 7.78048637e-02 7.77930884e-02 + 7.77813185e-02 7.77695539e-02 7.77577947e-02 7.77460408e-02 7.77342922e-02 + 7.77225490e-02 7.77108111e-02 7.76990785e-02 7.76873512e-02 7.76756292e-02 + 7.76639125e-02 7.76522011e-02 7.76404950e-02 7.76287942e-02 7.76170987e-02 + 7.76054085e-02 7.75937236e-02 7.75820439e-02 7.75703695e-02 7.75587004e-02 + 7.75470365e-02 7.75353780e-02 7.75237246e-02 7.75120765e-02 7.75004337e-02 + 7.74887961e-02 7.74771637e-02 7.74655366e-02 7.74539147e-02 7.74422981e-02 + 7.74306867e-02 7.74190805e-02 7.74074795e-02 7.73958837e-02 7.73842931e-02 + 7.73727078e-02 7.73611276e-02 7.73495527e-02 7.73379829e-02 7.73264183e-02 + 7.73148589e-02 7.73033047e-02 7.72917557e-02 7.72802118e-02 7.72686732e-02 + 7.72571396e-02 7.72456113e-02 7.72340881e-02 7.72225701e-02 7.72110572e-02 + 7.71995494e-02 7.71880468e-02 7.71765494e-02 7.71650571e-02 7.71535699e-02 + 7.71420878e-02 7.71306109e-02 7.71191391e-02 7.71076724e-02 7.70962108e-02 + 7.70847543e-02 7.70733030e-02 7.70618567e-02 7.70504155e-02 7.70389795e-02 + 7.70275485e-02 7.70161226e-02 7.70047018e-02 7.69932860e-02 7.69818754e-02 + 7.69704698e-02 7.69590693e-02 7.69476738e-02 7.69362834e-02 7.69248981e-02 + 7.69135178e-02 7.69021426e-02 7.68907724e-02 7.68794073e-02 7.68680472e-02 + 7.68566921e-02 7.68453420e-02 7.68339970e-02 7.68226570e-02 7.68113221e-02 + 7.67999921e-02 7.67886672e-02 7.67773472e-02 7.67660323e-02 7.67547224e-02 + 7.67434174e-02 7.67321175e-02 7.67208226e-02 7.67095326e-02 7.66982476e-02 + 7.66869676e-02 7.66756926e-02 7.66644225e-02 7.66531574e-02 7.66418973e-02 + 7.66306422e-02 7.66193920e-02 7.66081467e-02 7.65969064e-02 7.65856711e-02 + 7.65744407e-02 7.65632152e-02 7.65519946e-02 7.65407790e-02 7.65295684e-02 + 7.65183626e-02 7.65071618e-02 7.64959659e-02 7.64847749e-02 7.64735888e-02 + 7.64624076e-02 7.64512313e-02 7.64400599e-02 7.64288935e-02 7.64177319e-02 + 7.64065752e-02 7.63954233e-02 7.63842764e-02 7.63731343e-02 7.63619972e-02 + 7.63508648e-02 7.63397374e-02 7.63286148e-02 7.63174971e-02 7.63063842e-02 + 7.62952762e-02 7.62841730e-02 7.62730747e-02 7.62619813e-02 7.62508926e-02 + 7.62398088e-02 7.62287298e-02 7.62176557e-02 7.62065864e-02 7.61955219e-02 + 7.61844622e-02 7.61734074e-02 7.61623573e-02 7.61513121e-02 7.61402716e-02 + 7.61292360e-02 7.61182052e-02 7.61071791e-02 7.60961579e-02 7.60851414e-02 + 7.60741297e-02 7.60631228e-02 7.60521207e-02 7.60411233e-02 7.60301307e-02 + 7.60191429e-02 7.60081598e-02 7.59971815e-02 7.59862080e-02 7.59752392e-02 + 7.59642751e-02 7.59533158e-02 7.59423613e-02 7.59314115e-02 7.59204664e-02 + 7.59095260e-02 7.58985904e-02 7.58876595e-02 7.58767333e-02 7.58658119e-02 + 7.58548951e-02 7.58439831e-02 7.58330758e-02 7.58221731e-02 7.58112752e-02 + 7.58003820e-02 7.57894935e-02 7.57786096e-02 7.57677305e-02 7.57568560e-02 + 7.57459862e-02 7.57351211e-02 7.57242607e-02 7.57134049e-02 7.57025538e-02 + 7.56917074e-02 7.56808656e-02 7.56700285e-02 7.56591961e-02 7.56483683e-02 + 7.56375451e-02 7.56267266e-02 7.56159127e-02 7.56051035e-02 7.55942989e-02 + 7.55834989e-02 7.55727035e-02 7.55619128e-02 7.55511267e-02 7.55403452e-02 + 7.55295684e-02 7.55187961e-02 7.55080285e-02 7.54972654e-02 7.54865070e-02 + 7.54757531e-02 7.54650039e-02 7.54542592e-02 7.54435192e-02 7.54327837e-02 + 7.54220528e-02 7.54113264e-02 7.54006047e-02 7.53898875e-02 7.53791749e-02 + 7.53684669e-02 7.53577634e-02 7.53470644e-02 7.53363701e-02 7.53256803e-02 + 7.53149950e-02 7.53043143e-02 7.52936381e-02 7.52829665e-02 7.52722994e-02 + 7.52616368e-02 7.52509787e-02 7.52403252e-02 7.52296762e-02 7.52190318e-02 + 7.52083918e-02 7.51977564e-02 7.51871255e-02 7.51764990e-02 7.51658771e-02 + 7.51552597e-02 7.51446468e-02 7.51340384e-02 7.51234344e-02 7.51128350e-02 + 7.51022400e-02 7.50916496e-02 7.50810636e-02 7.50704821e-02 7.50599050e-02 + 7.50493324e-02 7.50387643e-02 7.50282007e-02 7.50176415e-02 7.50070868e-02 + 7.49965365e-02 7.49859907e-02 7.49754493e-02 7.49649123e-02 7.49543799e-02 + 7.49438518e-02 7.49333282e-02 7.49228090e-02 7.49122942e-02 7.49017839e-02 + 7.48912780e-02 7.48807765e-02 7.48702794e-02 7.48597868e-02 7.48492985e-02 + 7.48388147e-02 7.48283352e-02 7.48178602e-02 7.48073895e-02 7.47969233e-02 + 7.47864614e-02 7.47760040e-02 7.47655509e-02 7.47551022e-02 7.47446579e-02 + 7.47342179e-02 7.47237824e-02 7.47133512e-02 7.47029243e-02 7.46925019e-02 + 7.46820838e-02 7.46716700e-02 7.46612606e-02 7.46508556e-02 7.46404549e-02 + 7.46300586e-02 7.46196666e-02 7.46092789e-02 7.45988956e-02 7.45885166e-02 + 7.45781419e-02 7.45677716e-02 7.45574056e-02 7.45470439e-02 7.45366865e-02 + 7.45263335e-02 7.45159847e-02 7.45056403e-02 7.44953002e-02 7.44849644e-02 + 7.44746329e-02 7.44643056e-02 7.44539827e-02 7.44436641e-02 7.44333497e-02 + 7.44230397e-02 7.44127339e-02 7.44024324e-02 7.43921352e-02 7.43818423e-02 + 7.43715536e-02 7.43612692e-02 7.43509890e-02 7.43407132e-02 7.43304416e-02 + 7.43201742e-02 7.43099111e-02 7.42996522e-02 7.42893976e-02 7.42791473e-02 + 7.42689011e-02 7.42586593e-02 7.42484216e-02 7.42381882e-02 7.42279590e-02 + 7.42177341e-02 7.42075133e-02 7.41972968e-02 7.41870845e-02 7.41768765e-02 + 7.41666726e-02 7.41564729e-02 7.41462775e-02 7.41360863e-02 7.41258992e-02 + 7.41157164e-02 7.41055377e-02 7.40953633e-02 7.40851930e-02 7.40750269e-02 + 7.40648650e-02 7.40547073e-02 7.40445538e-02 7.40344044e-02 7.40242592e-02 + 7.40141182e-02 7.40039814e-02 7.39938487e-02 7.39837202e-02 7.39735958e-02 + 7.39634756e-02 7.39533595e-02 7.39432476e-02 7.39331398e-02 7.39230362e-02 + 7.39129367e-02 7.39028414e-02 7.38927502e-02 7.38826631e-02 7.38725802e-02 + 7.38625014e-02 7.38524267e-02 7.38423561e-02 7.38322896e-02 7.38222273e-02 + 7.38121691e-02 7.38021150e-02 7.37920650e-02 7.37820191e-02 7.37719773e-02 + 7.37619396e-02 7.37519060e-02 7.37418765e-02 7.37318510e-02 7.37218297e-02 + 7.37118125e-02 7.37017993e-02 7.36917902e-02 7.36817852e-02 7.36717843e-02 + 7.36617874e-02 7.36517946e-02 7.36418059e-02 7.36318212e-02 7.36218406e-02 + 7.36118641e-02 7.36018916e-02 7.35919231e-02 7.35819587e-02 7.35719984e-02 + 7.35620421e-02 7.35520898e-02 7.35421416e-02 7.35321974e-02 7.35222572e-02 + 7.35123211e-02 7.35023890e-02 7.34924610e-02 7.34825369e-02 7.34726169e-02 + 7.34627009e-02 7.34527889e-02 7.34428809e-02 7.34329769e-02 7.34230769e-02 + 7.34131809e-02 7.34032890e-02 7.33934010e-02 7.33835170e-02 7.33736370e-02 + 7.33637610e-02 7.33538890e-02 7.33440210e-02 7.33341569e-02 7.33242969e-02 + 7.33144408e-02 7.33045886e-02 7.32947405e-02 7.32848963e-02 7.32750561e-02 + 7.32652199e-02 7.32553876e-02 7.32455592e-02 7.32357348e-02 7.32259144e-02 + 7.32160979e-02 7.32062854e-02 7.31964768e-02 7.31866722e-02 7.31768715e-02 + 7.31670747e-02 7.31572819e-02 7.31474930e-02 7.31377080e-02 7.31279269e-02 + 7.31181498e-02 7.31083766e-02 7.30986073e-02 7.30888419e-02 7.30790805e-02 + 7.30693229e-02 7.30595693e-02 7.30498195e-02 7.30400737e-02 7.30303318e-02 + 7.30205937e-02 7.30108596e-02 7.30011293e-02 7.29914030e-02 7.29816805e-02 + 7.29719619e-02 7.29622472e-02 7.29525364e-02 7.29428294e-02 7.29331263e-02 + 7.29234271e-02 7.29137318e-02 7.29040403e-02 7.28943527e-02 7.28846689e-02 + 7.28749890e-02 7.28653130e-02 7.28556408e-02 7.28459725e-02 7.28363080e-02 + 7.28266473e-02 7.28169905e-02 7.28073376e-02 7.27976885e-02 7.27880432e-02 + 7.27784017e-02 7.27687641e-02 7.27591303e-02 7.27495003e-02 7.27398742e-02 + 7.27302519e-02 7.27206334e-02 7.27110187e-02 7.27014078e-02 7.26918007e-02 + 7.26821975e-02 7.26725980e-02 7.26630023e-02 7.26534105e-02 7.26438224e-02 + 7.26342382e-02 7.26246577e-02 7.26150810e-02 7.26055081e-02 7.25959390e-02 + 7.25863737e-02 7.25768121e-02 7.25672544e-02 7.25577004e-02 7.25481502e-02 + 7.25386037e-02 7.25290610e-02 7.25195221e-02 7.25099870e-02 7.25004556e-02 + 7.24909279e-02 7.24814040e-02 7.24718839e-02 7.24623675e-02 7.24528549e-02 + 7.24433460e-02 7.24338409e-02 7.24243395e-02 7.24148418e-02 7.24053479e-02 + 7.23958577e-02 7.23863712e-02 7.23768885e-02 7.23674095e-02 7.23579342e-02 + 7.23484626e-02 7.23389948e-02 7.23295307e-02 7.23200702e-02 7.23106135e-02 + 7.23011605e-02 7.22917112e-02 7.22822656e-02 7.22728238e-02 7.22633856e-02 + 7.22539511e-02 7.22445203e-02 7.22350932e-02 7.22256698e-02 7.22162500e-02 + 7.22068340e-02 7.21974216e-02 7.21880130e-02 7.21786080e-02 7.21692066e-02 + 7.21598090e-02 7.21504150e-02 7.21410247e-02 7.21316380e-02 7.21222550e-02 + 7.21128757e-02 7.21035000e-02 7.20941280e-02 7.20847596e-02 7.20753949e-02 + 7.20660339e-02 7.20566765e-02 7.20473227e-02 7.20379726e-02 7.20286261e-02 + 7.20192832e-02 7.20099440e-02 7.20006084e-02 7.19912765e-02 7.19819481e-02 + 7.19726234e-02 7.19633024e-02 7.19539849e-02 7.19446711e-02 7.19353608e-02 + 7.19260542e-02 7.19167512e-02 7.19074518e-02 7.18981560e-02 7.18888639e-02 + 7.18795753e-02 7.18702903e-02 7.18610089e-02 7.18517311e-02 7.18424569e-02 + 7.18331863e-02 7.18239193e-02 7.18146559e-02 7.18053960e-02 7.17961398e-02 + 7.17868871e-02 7.17776380e-02 7.17683924e-02 7.17591505e-02 7.17499121e-02 + 7.17406772e-02 7.17314460e-02 7.17222183e-02 7.17129941e-02 7.17037735e-02 + 7.16945565e-02 7.16853430e-02 7.16761331e-02 7.16669267e-02 7.16577239e-02 + 7.16485246e-02 7.16393289e-02 7.16301367e-02 7.16209480e-02 7.16117629e-02 + 7.16025813e-02 7.15934032e-02 7.15842287e-02 7.15750577e-02 7.15658902e-02 + 7.15567262e-02 7.15475658e-02 7.15384089e-02 7.15292555e-02 7.15201056e-02 + 7.15109592e-02 7.15018163e-02 7.14926769e-02 7.14835410e-02 7.14744087e-02 + 7.14652798e-02 7.14561544e-02 7.14470325e-02 7.14379142e-02 7.14287993e-02 + 7.14196878e-02 7.14105799e-02 7.14014755e-02 7.13923745e-02 7.13832770e-02 + 7.13741830e-02 7.13650925e-02 7.13560055e-02 7.13469219e-02 7.13378418e-02 + 7.13287651e-02 7.13196919e-02 7.13106222e-02 7.13015559e-02 7.12924931e-02 + 7.12834338e-02 7.12743779e-02 7.12653254e-02 7.12562764e-02 7.12472309e-02 + 7.12381888e-02 7.12291501e-02 7.12201149e-02 7.12110831e-02 7.12020547e-02 + 7.11930298e-02 7.11840083e-02 7.11749902e-02 7.11659756e-02 7.11569644e-02 + 7.11479566e-02 7.11389522e-02 7.11299512e-02 7.11209537e-02 7.11119596e-02 + 7.11029689e-02 7.10939816e-02 7.10849977e-02 7.10760172e-02 7.10670401e-02 + 7.10580664e-02 7.10490961e-02 7.10401292e-02 7.10311657e-02 7.10222056e-02 + 7.10132489e-02 7.10042956e-02 7.09953456e-02 7.09863990e-02 7.09774559e-02 + 7.09685161e-02 7.09595796e-02 7.09506466e-02 7.09417169e-02 7.09327906e-02 + 7.09238677e-02 7.09149481e-02 7.09060319e-02 7.08971191e-02 7.08882096e-02 + 7.08793035e-02 7.08704007e-02 7.08615013e-02 7.08526052e-02 7.08437125e-02 + 7.08348231e-02 7.08259371e-02 7.08170544e-02 7.08081751e-02 7.07992991e-02 + 7.07904264e-02 7.07815571e-02 7.07726911e-02 7.07638285e-02 7.07549691e-02 + 7.07461131e-02 7.07372604e-02 7.07284111e-02 7.07195650e-02 7.07107223e-02 + 7.07018829e-02 7.06930468e-02 7.06842141e-02 7.06753846e-02 7.06665584e-02 + 7.06577356e-02 7.06489160e-02 7.06400998e-02 7.06312868e-02 7.06224772e-02 + 7.06136708e-02 7.06048678e-02 7.05960680e-02 7.05872715e-02 7.05784783e-02 + 7.05696884e-02 7.05609018e-02 7.05521184e-02 7.05433384e-02 7.05345616e-02 + 1.00000000e+00 9.75894263e-01 9.53451752e-01 9.32489601e-01 9.12851907e-01 + 8.94404826e-01 8.77032714e-01 8.60635068e-01 8.45124065e-01 8.30422576e-01 + 8.16462554e-01 8.03183696e-01 7.90532350e-01 7.78460602e-01 7.66925506e-01 + 7.55888443e-01 7.45314577e-01 7.35172390e-01 7.25433287e-01 7.16071258e-01 + 7.07062580e-01 6.98385572e-01 6.90020370e-01 6.81948734e-01 6.74153887e-01 + 6.66620364e-01 6.59333880e-01 6.52281224e-01 6.45450150e-01 6.38829295e-01 + 6.32408091e-01 6.26176704e-01 6.20125961e-01 6.14247300e-01 6.08532716e-01 + 6.02974715e-01 5.97566276e-01 5.92300808e-01 5.87172122e-01 5.82174396e-01 + 5.77302151e-01 5.72550221e-01 5.67913735e-01 5.63388093e-01 5.58968948e-01 + 5.54652188e-01 5.50433918e-01 5.46310451e-01 5.42278287e-01 5.38334105e-01 + 5.34474753e-01 5.30697232e-01 5.26998691e-01 5.23376415e-01 5.19827818e-01 + 5.16350438e-01 5.12941922e-01 5.09600027e-01 5.06322612e-01 5.03107629e-01 + 4.99953120e-01 4.96857213e-01 4.93818117e-01 4.90834114e-01 4.87903560e-01 + 4.85024878e-01 4.82196556e-01 4.79417141e-01 4.76685242e-01 4.73999519e-01 + 4.71358685e-01 4.68761505e-01 4.66206788e-01 4.63693390e-01 4.61220209e-01 + 4.58786184e-01 4.56390292e-01 4.54031548e-01 4.51709002e-01 4.49421737e-01 + 4.47168870e-01 4.44949545e-01 4.42762941e-01 4.40608259e-01 4.38484731e-01 + 4.36391613e-01 4.34328187e-01 4.32293756e-01 4.30287649e-01 4.28309213e-01 + 4.26357819e-01 4.24432857e-01 4.22533734e-01 4.20659877e-01 4.18810733e-01 + 4.16985761e-01 4.15184441e-01 4.13406264e-01 4.11650741e-01 4.09917394e-01 + 4.08205761e-01 4.06515390e-01 4.04845847e-01 4.03196706e-01 4.01567556e-01 + 3.99957996e-01 3.98367636e-01 3.96796098e-01 3.95243014e-01 3.93708024e-01 + 3.92190780e-01 3.90690944e-01 3.89208184e-01 3.87742180e-01 3.86292617e-01 + 3.84859191e-01 3.83441605e-01 3.82039569e-01 3.80652800e-01 3.79281024e-01 + 3.77923973e-01 3.76581385e-01 3.75253005e-01 3.73938583e-01 3.72637878e-01 + 3.71350652e-01 3.70076675e-01 3.68815719e-01 3.67567566e-01 3.66332000e-01 + 3.65108810e-01 3.63897792e-01 3.62698745e-01 3.61511473e-01 3.60335785e-01 + 3.59171493e-01 3.58018415e-01 3.56876371e-01 3.55745187e-01 3.54624691e-01 + 3.53514717e-01 3.52415101e-01 3.51325683e-01 3.50246306e-01 3.49176816e-01 + 3.48117064e-01 3.47066903e-01 3.46026189e-01 3.44994782e-01 3.43972542e-01 + 3.42959337e-01 3.41955032e-01 3.40959498e-01 3.39972609e-01 3.38994241e-01 + 3.38024270e-01 3.37062579e-01 3.36109049e-01 3.35163566e-01 3.34226018e-01 + 3.33296293e-01 3.32374284e-01 3.31459885e-01 3.30552992e-01 3.29653502e-01 + 3.28761315e-01 3.27876333e-01 3.26998460e-01 3.26127600e-01 3.25263662e-01 + 3.24406553e-01 3.23556184e-01 3.22712468e-01 3.21875318e-01 3.21044649e-01 + 3.20220378e-01 3.19402424e-01 3.18590706e-01 3.17785145e-01 3.16985665e-01 + 3.16192188e-01 3.15404639e-01 3.14622947e-01 3.13847038e-01 3.13076841e-01 + 3.12312287e-01 3.11553306e-01 3.10799833e-01 3.10051800e-01 3.09309142e-01 + 3.08571795e-01 3.07839697e-01 3.07112784e-01 3.06390997e-01 3.05674275e-01 + 3.04962560e-01 3.04255793e-01 3.03553917e-01 3.02856876e-01 3.02164615e-01 + 3.01477079e-01 3.00794216e-01 3.00115971e-01 2.99442294e-01 2.98773134e-01 + 2.98108439e-01 2.97448161e-01 2.96792252e-01 2.96140662e-01 2.95493345e-01 + 2.94850254e-01 2.94211344e-01 2.93576570e-01 2.92945886e-01 2.92319250e-01 + 2.91696618e-01 2.91077947e-01 2.90463197e-01 2.89852325e-01 2.89245291e-01 + 2.88642055e-01 2.88042577e-01 2.87446820e-01 2.86854743e-01 2.86266311e-01 + 2.85681484e-01 2.85100228e-01 2.84522505e-01 2.83948280e-01 2.83377517e-01 + 2.82810183e-01 2.82246243e-01 2.81685662e-01 2.81128409e-01 2.80574450e-01 + 2.80023753e-01 2.79476286e-01 2.78932017e-01 2.78390916e-01 2.77852951e-01 + 2.77318094e-01 2.76786313e-01 2.76257580e-01 2.75731865e-01 2.75209140e-01 + 2.74689377e-01 2.74172548e-01 2.73658625e-01 2.73147581e-01 2.72639389e-01 + 2.72134024e-01 2.71631458e-01 2.71131667e-01 2.70634624e-01 2.70140305e-01 + 2.69648684e-01 2.69159738e-01 2.68673442e-01 2.68189772e-01 2.67708706e-01 + 2.67230218e-01 2.66754287e-01 2.66280890e-01 2.65810005e-01 2.65341608e-01 + 2.64875680e-01 2.64412197e-01 2.63951138e-01 2.63492483e-01 2.63036211e-01 + 2.62582301e-01 2.62130732e-01 2.61681486e-01 2.61234541e-01 2.60789879e-01 + 2.60347479e-01 2.59907323e-01 2.59469393e-01 2.59033668e-01 2.58600131e-01 + 2.58168764e-01 2.57739549e-01 2.57312467e-01 2.56887501e-01 2.56464633e-01 + 2.56043847e-01 2.55625126e-01 2.55208452e-01 2.54793809e-01 2.54381180e-01 + 2.53970550e-01 2.53561902e-01 2.53155220e-01 2.52750489e-01 2.52347693e-01 + 2.51946816e-01 2.51547844e-01 2.51150761e-01 2.50755553e-01 2.50362204e-01 + 2.49970701e-01 2.49581029e-01 2.49193173e-01 2.48807120e-01 2.48422856e-01 + 2.48040367e-01 2.47659639e-01 2.47280658e-01 2.46903413e-01 2.46527888e-01 + 2.46154072e-01 2.45781951e-01 2.45411513e-01 2.45042745e-01 2.44675634e-01 + 2.44310168e-01 2.43946335e-01 2.43584122e-01 2.43223518e-01 2.42864511e-01 + 2.42507089e-01 2.42151241e-01 2.41796954e-01 2.41444218e-01 2.41093021e-01 + 2.40743352e-01 2.40395201e-01 2.40048555e-01 2.39703404e-01 2.39359739e-01 + 2.39017547e-01 2.38676818e-01 2.38337542e-01 2.37999710e-01 2.37663309e-01 + 2.37328332e-01 2.36994766e-01 2.36662603e-01 2.36331833e-01 2.36002446e-01 + 2.35674432e-01 2.35347783e-01 2.35022487e-01 2.34698537e-01 2.34375923e-01 + 2.34054635e-01 2.33734666e-01 2.33416004e-01 2.33098643e-01 2.32782573e-01 + 2.32467784e-01 2.32154270e-01 2.31842020e-01 2.31531028e-01 2.31221283e-01 + 2.30912778e-01 2.30605504e-01 2.30299454e-01 2.29994620e-01 2.29690992e-01 + 2.29388564e-01 2.29087328e-01 2.28787275e-01 2.28488398e-01 2.28190689e-01 + 2.27894141e-01 2.27598746e-01 2.27304497e-01 2.27011386e-01 2.26719406e-01 + 2.26428550e-01 2.26138810e-01 2.25850180e-01 2.25562652e-01 2.25276219e-01 + 2.24990875e-01 2.24706613e-01 2.24423425e-01 2.24141305e-01 2.23860246e-01 + 2.23580243e-01 2.23301287e-01 2.23023372e-01 2.22746493e-01 2.22470643e-01 + 2.22195814e-01 2.21922002e-01 2.21649200e-01 2.21377401e-01 2.21106599e-01 + 2.20836789e-01 2.20567964e-01 2.20300119e-01 2.20033247e-01 2.19767342e-01 + 2.19502400e-01 2.19238413e-01 2.18975376e-01 2.18713284e-01 2.18452130e-01 + 2.18191910e-01 2.17932618e-01 2.17674247e-01 2.17416794e-01 2.17160252e-01 + 2.16904616e-01 2.16649880e-01 2.16396040e-01 2.16143090e-01 2.15891025e-01 + 2.15639840e-01 2.15389530e-01 2.15140089e-01 2.14891513e-01 2.14643796e-01 + 2.14396935e-01 2.14150923e-01 2.13905756e-01 2.13661429e-01 2.13417937e-01 + 2.13175276e-01 2.12933441e-01 2.12692427e-01 2.12452229e-01 2.12212843e-01 + 2.11974265e-01 2.11736490e-01 2.11499513e-01 2.11263330e-01 2.11027936e-01 + 2.10793328e-01 2.10559500e-01 2.10326449e-01 2.10094169e-01 2.09862658e-01 + 2.09631910e-01 2.09401922e-01 2.09172689e-01 2.08944208e-01 2.08716473e-01 + 2.08489481e-01 2.08263229e-01 2.08037711e-01 2.07812924e-01 2.07588865e-01 + 2.07365528e-01 2.07142911e-01 2.06921010e-01 2.06699820e-01 2.06479337e-01 + 2.06259559e-01 2.06040481e-01 2.05822100e-01 2.05604412e-01 2.05387413e-01 + 2.05171099e-01 2.04955468e-01 2.04740515e-01 2.04526237e-01 2.04312630e-01 + 2.04099691e-01 2.03887417e-01 2.03675803e-01 2.03464847e-01 2.03254545e-01 + 2.03044894e-01 2.02835891e-01 2.02627531e-01 2.02419812e-01 2.02212731e-01 + 2.02006284e-01 2.01800468e-01 2.01595280e-01 2.01390716e-01 2.01186774e-01 + 2.00983451e-01 2.00780742e-01 2.00578646e-01 2.00377158e-01 2.00176277e-01 + 1.99975998e-01 1.99776320e-01 1.99577238e-01 1.99378751e-01 1.99180854e-01 + 1.98983546e-01 1.98786822e-01 1.98590681e-01 1.98395120e-01 1.98200135e-01 + 1.98005724e-01 1.97811884e-01 1.97618612e-01 1.97425905e-01 1.97233761e-01 + 1.97042177e-01 1.96851151e-01 1.96660678e-01 1.96470758e-01 1.96281387e-01 + 1.96092562e-01 1.95904281e-01 1.95716541e-01 1.95529341e-01 1.95342676e-01 + 1.95156545e-01 1.94970945e-01 1.94785873e-01 1.94601328e-01 1.94417306e-01 + 1.94233805e-01 1.94050823e-01 1.93868357e-01 1.93686404e-01 1.93504963e-01 + 1.93324031e-01 1.93143606e-01 1.92963685e-01 1.92784265e-01 1.92605345e-01 + 1.92426923e-01 1.92248995e-01 1.92071560e-01 1.91894616e-01 1.91718159e-01 + 1.91542189e-01 1.91366702e-01 1.91191696e-01 1.91017170e-01 1.90843121e-01 + 1.90669546e-01 1.90496445e-01 1.90323814e-01 1.90151652e-01 1.89979956e-01 + 1.89808724e-01 1.89637954e-01 1.89467644e-01 1.89297793e-01 1.89128397e-01 + 1.88959456e-01 1.88790966e-01 1.88622926e-01 1.88455335e-01 1.88288189e-01 + 1.88121487e-01 1.87955227e-01 1.87789407e-01 1.87624025e-01 1.87459079e-01 + 1.87294568e-01 1.87130489e-01 1.86966840e-01 1.86803620e-01 1.86640827e-01 + 1.86478458e-01 1.86316513e-01 1.86154989e-01 1.85993884e-01 1.85833197e-01 + 1.85672925e-01 1.85513068e-01 1.85353622e-01 1.85194587e-01 1.85035961e-01 + 1.84877742e-01 1.84719927e-01 1.84562517e-01 1.84405508e-01 1.84248899e-01 + 1.84092688e-01 1.83936874e-01 1.83781455e-01 1.83626429e-01 1.83471795e-01 + 1.83317551e-01 1.83163695e-01 1.83010226e-01 1.82857142e-01 1.82704442e-01 + 1.82552123e-01 1.82400185e-01 1.82248626e-01 1.82097444e-01 1.81946637e-01 + 1.81796204e-01 1.81646144e-01 1.81496455e-01 1.81347136e-01 1.81198184e-01 + 1.81049599e-01 1.80901378e-01 1.80753522e-01 1.80606027e-01 1.80458892e-01 + 1.80312117e-01 1.80165699e-01 1.80019637e-01 1.79873930e-01 1.79728576e-01 + 1.79583574e-01 1.79438922e-01 1.79294620e-01 1.79150665e-01 1.79007056e-01 + 1.78863792e-01 1.78720871e-01 1.78578292e-01 1.78436054e-01 1.78294156e-01 + 1.78152595e-01 1.78011371e-01 1.77870482e-01 1.77729928e-01 1.77589706e-01 + 1.77449815e-01 1.77310255e-01 1.77171023e-01 1.77032119e-01 1.76893540e-01 + 1.76755287e-01 1.76617358e-01 1.76479751e-01 1.76342465e-01 1.76205499e-01 + 1.76068851e-01 1.75932521e-01 1.75796507e-01 1.75660808e-01 1.75525423e-01 + 1.75390351e-01 1.75255589e-01 1.75121138e-01 1.74986996e-01 1.74853162e-01 + 1.74719634e-01 1.74586412e-01 1.74453494e-01 1.74320879e-01 1.74188566e-01 + 1.74056554e-01 1.73924842e-01 1.73793428e-01 1.73662312e-01 1.73531492e-01 + 1.73400967e-01 1.73270736e-01 1.73140798e-01 1.73011152e-01 1.72881797e-01 + 1.72752732e-01 1.72623955e-01 1.72495466e-01 1.72367263e-01 1.72239346e-01 + 1.72111713e-01 1.71984363e-01 1.71857296e-01 1.71730510e-01 1.71604004e-01 + 1.71477777e-01 1.71351828e-01 1.71226157e-01 1.71100761e-01 1.70975641e-01 + 1.70850795e-01 1.70726222e-01 1.70601921e-01 1.70477891e-01 1.70354131e-01 + 1.70230640e-01 1.70107418e-01 1.69984462e-01 1.69861773e-01 1.69739349e-01 + 1.69617190e-01 1.69495294e-01 1.69373660e-01 1.69252288e-01 1.69131176e-01 + 1.69010324e-01 1.68889731e-01 1.68769395e-01 1.68649317e-01 1.68529494e-01 + 1.68409926e-01 1.68290613e-01 1.68171552e-01 1.68052744e-01 1.67934188e-01 + 1.67815882e-01 1.67697825e-01 1.67580018e-01 1.67462458e-01 1.67345146e-01 + 1.67228079e-01 1.67111258e-01 1.66994682e-01 1.66878349e-01 1.66762259e-01 + 1.66646411e-01 1.66530804e-01 1.66415437e-01 1.66300309e-01 1.66185421e-01 + 1.66070770e-01 1.65956356e-01 1.65842178e-01 1.65728235e-01 1.65614527e-01 + 1.65501053e-01 1.65387812e-01 1.65274803e-01 1.65162025e-01 1.65049477e-01 + 1.64937160e-01 1.64825071e-01 1.64713211e-01 1.64601578e-01 1.64490172e-01 + 1.64378991e-01 1.64268036e-01 1.64157305e-01 1.64046798e-01 1.63936514e-01 + 1.63826452e-01 1.63716611e-01 1.63606991e-01 1.63497591e-01 1.63388409e-01 + 1.63279447e-01 1.63170702e-01 1.63062174e-01 1.62953862e-01 1.62845766e-01 + 1.62737885e-01 1.62630217e-01 1.62522764e-01 1.62415523e-01 1.62308493e-01 + 1.62201676e-01 1.62095069e-01 1.61988671e-01 1.61882483e-01 1.61776504e-01 + 1.61670732e-01 1.61565168e-01 1.61459810e-01 1.61354658e-01 1.61249711e-01 + 1.61144969e-01 1.61040431e-01 1.60936095e-01 1.60831963e-01 1.60728032e-01 + 1.60624302e-01 1.60520773e-01 1.60417444e-01 1.60314314e-01 1.60211383e-01 + 1.60108650e-01 1.60006114e-01 1.59903775e-01 1.59801632e-01 1.59699684e-01 + 1.59597932e-01 1.59496373e-01 1.59395009e-01 1.59293837e-01 1.59192858e-01 + 1.59092070e-01 1.58991474e-01 1.58891068e-01 1.58790852e-01 1.58690826e-01 + 1.58590988e-01 1.58491339e-01 1.58391877e-01 1.58292602e-01 1.58193514e-01 + 1.58094612e-01 1.57995894e-01 1.57897362e-01 1.57799013e-01 1.57700849e-01 + 1.57602867e-01 1.57505067e-01 1.57407450e-01 1.57310013e-01 1.57212758e-01 + 1.57115682e-01 1.57018786e-01 1.56922069e-01 1.56825531e-01 1.56729171e-01 + 1.56632988e-01 1.56536982e-01 1.56441152e-01 1.56345498e-01 1.56250019e-01 + 1.56154715e-01 1.56059585e-01 1.55964629e-01 1.55869846e-01 1.55775235e-01 + 1.55680797e-01 1.55586530e-01 1.55492434e-01 1.55398509e-01 1.55304754e-01 + 1.55211168e-01 1.55117751e-01 1.55024502e-01 1.54931422e-01 1.54838509e-01 + 1.54745763e-01 1.54653183e-01 1.54560770e-01 1.54468522e-01 1.54376439e-01 + 1.54284520e-01 1.54192765e-01 1.54101174e-01 1.54009746e-01 1.53918481e-01 + 1.53827377e-01 1.53736435e-01 1.53645654e-01 1.53555034e-01 1.53464574e-01 + 1.53374274e-01 1.53284132e-01 1.53194150e-01 1.53104326e-01 1.53014660e-01 + 1.52925151e-01 1.52835798e-01 1.52746603e-01 1.52657563e-01 1.52568679e-01 + 1.52479950e-01 1.52391376e-01 1.52302955e-01 1.52214689e-01 1.52126576e-01 + 1.52038615e-01 1.51950807e-01 1.51863151e-01 1.51775647e-01 1.51688293e-01 + 1.51601091e-01 1.51514038e-01 1.51427135e-01 1.51340382e-01 1.51253778e-01 + 1.51167322e-01 1.51081014e-01 1.50994854e-01 1.50908841e-01 1.50822975e-01 + 1.50737255e-01 1.50651681e-01 1.50566253e-01 1.50480970e-01 1.50395832e-01 + 1.50310838e-01 1.50225988e-01 1.50141281e-01 1.50056718e-01 1.49972298e-01 + 1.49888019e-01 1.49803883e-01 1.49719888e-01 1.49636035e-01 1.49552322e-01 + 1.49468749e-01 1.49385316e-01 1.49302023e-01 1.49218869e-01 1.49135854e-01 + 1.49052977e-01 1.48970239e-01 1.48887638e-01 1.48805174e-01 1.48722847e-01 + 1.48640656e-01 1.48558602e-01 1.48476683e-01 1.48394900e-01 1.48313252e-01 + 1.48231738e-01 1.48150359e-01 1.48069113e-01 1.47988001e-01 1.47907022e-01 + 1.47826176e-01 1.47745463e-01 1.47664881e-01 1.47584431e-01 1.47504113e-01 + 1.47423925e-01 1.47343868e-01 1.47263942e-01 1.47184145e-01 1.47104478e-01 + 1.47024940e-01 1.46945531e-01 1.46866251e-01 1.46787099e-01 1.46708074e-01 + 1.46629177e-01 1.46550407e-01 1.46471764e-01 1.46393248e-01 1.46314857e-01 + 1.46236593e-01 1.46158454e-01 1.46080440e-01 1.46002551e-01 1.45924786e-01 + 1.45847145e-01 1.45769628e-01 1.45692235e-01 1.45614965e-01 1.45537817e-01 + 1.45460792e-01 1.45383890e-01 1.45307109e-01 1.45230449e-01 1.45153911e-01 + 1.45077494e-01 1.45001197e-01 1.44925021e-01 1.44848964e-01 1.44773027e-01 + 1.44697209e-01 1.44621511e-01 1.44545931e-01 1.44470469e-01 1.44395126e-01 + 1.44319900e-01 1.44244791e-01 1.44169800e-01 1.44094926e-01 1.44020168e-01 + 1.43945527e-01 1.43871001e-01 1.43796591e-01 1.43722296e-01 1.43648117e-01 + 1.43574052e-01 1.43500101e-01 1.43426265e-01 1.43352542e-01 1.43278934e-01 + 1.43205438e-01 1.43132055e-01 1.43058785e-01 1.42985628e-01 1.42912583e-01 + 1.42839649e-01 1.42766827e-01 1.42694116e-01 1.42621516e-01 1.42549027e-01 + 1.42476649e-01 1.42404380e-01 1.42332222e-01 1.42260172e-01 1.42188233e-01 + 1.42116402e-01 1.42044680e-01 1.41973066e-01 1.41901561e-01 1.41830164e-01 + 1.41758874e-01 1.41687692e-01 1.41616617e-01 1.41545648e-01 1.41474786e-01 + 1.41404031e-01 1.41333382e-01 1.41262838e-01 1.41192400e-01 1.41122067e-01 + 1.41051839e-01 1.40981716e-01 1.40911698e-01 1.40841783e-01 1.40771973e-01 + 1.40702266e-01 1.40632663e-01 1.40563163e-01 1.40493766e-01 1.40424471e-01 + 1.40355279e-01 1.40286189e-01 1.40217202e-01 1.40148315e-01 1.40079531e-01 + 1.40010847e-01 1.39942264e-01 1.39873782e-01 1.39805401e-01 1.39737119e-01 + 1.39668938e-01 1.39600856e-01 1.39532874e-01 1.39464991e-01 1.39397207e-01 + 1.39329522e-01 1.39261935e-01 1.39194446e-01 1.39127056e-01 1.39059763e-01 + 1.38992568e-01 1.38925470e-01 1.38858469e-01 1.38791565e-01 1.38724758e-01 + 1.38658047e-01 1.38591432e-01 1.38524913e-01 1.38458490e-01 1.38392162e-01 + 1.38325930e-01 1.38259792e-01 1.38193750e-01 1.38127801e-01 1.38061947e-01 + 1.37996188e-01 1.37930522e-01 1.37864950e-01 1.37799471e-01 1.37734085e-01 + 1.37668793e-01 1.37603593e-01 1.37538485e-01 1.37473471e-01 1.37408548e-01 + 1.37343717e-01 1.37278977e-01 1.37214330e-01 1.37149773e-01 1.37085308e-01 + 1.37020933e-01 1.36956649e-01 1.36892455e-01 1.36828351e-01 1.36764338e-01 + 1.36700414e-01 1.36636580e-01 1.36572835e-01 1.36509179e-01 1.36445612e-01 + 1.36382134e-01 1.36318745e-01 1.36255443e-01 1.36192230e-01 1.36129105e-01 + 1.36066067e-01 1.36003117e-01 1.35940254e-01 1.35877478e-01 1.35814789e-01 + 1.35752187e-01 1.35689672e-01 1.35627242e-01 1.35564899e-01 1.35502641e-01 + 1.35440470e-01 1.35378384e-01 1.35316383e-01 1.35254467e-01 1.35192636e-01 + 1.35130890e-01 1.35069228e-01 1.35007651e-01 1.34946158e-01 1.34884748e-01 + 1.34823423e-01 1.34762181e-01 1.34701022e-01 1.34639947e-01 1.34578955e-01 + 1.34518045e-01 1.34457218e-01 1.34396474e-01 1.34335812e-01 1.34275232e-01 + 1.34214733e-01 1.34154317e-01 1.34093982e-01 1.34033728e-01 1.33973556e-01 + 1.33913464e-01 1.33853453e-01 1.33793523e-01 1.33733673e-01 1.33673904e-01 + 1.33614214e-01 1.33554605e-01 1.33495075e-01 1.33435625e-01 1.33376254e-01 + 1.33316962e-01 1.33257749e-01 1.33198615e-01 1.33139560e-01 1.33080583e-01 + 1.33021685e-01 1.32962864e-01 1.32904122e-01 1.32845457e-01 1.32786870e-01 + 1.32728361e-01 1.32669928e-01 1.32611573e-01 1.32553295e-01 1.32495093e-01 + 1.32436968e-01 1.32378920e-01 1.32320948e-01 1.32263052e-01 1.32205232e-01 + 1.32147487e-01 1.32089818e-01 1.32032225e-01 1.31974707e-01 1.31917264e-01 + 1.31859896e-01 1.31802603e-01 1.31745384e-01 1.31688240e-01 1.31631170e-01 + 1.31574174e-01 1.31517252e-01 1.31460404e-01 1.31403630e-01 1.31346929e-01 + 1.31290301e-01 1.31233747e-01 1.31177266e-01 1.31120857e-01 1.31064522e-01 + 1.31008258e-01 1.30952068e-01 1.30895949e-01 1.30839903e-01 1.30783928e-01 + 1.30728025e-01 1.30672194e-01 1.30616435e-01 1.30560746e-01 1.30505129e-01 + 1.30449583e-01 1.30394108e-01 1.30338703e-01 1.30283369e-01 1.30228105e-01 + 1.30172912e-01 1.30117789e-01 1.30062736e-01 1.30007752e-01 1.29952839e-01 + 1.29897994e-01 1.29843219e-01 1.29788514e-01 1.29733877e-01 1.29679310e-01 + 1.29624811e-01 1.29570381e-01 1.29516019e-01 1.29461726e-01 1.29407501e-01 + 1.29353344e-01 1.29299255e-01 1.29245234e-01 1.29191280e-01 1.29137394e-01 + 1.29083575e-01 1.29029824e-01 1.28976140e-01 1.28922522e-01 1.28868972e-01 + 1.28815488e-01 1.28762070e-01 1.28708719e-01 1.28655435e-01 1.28602216e-01 + 1.28549063e-01 1.28495977e-01 1.28442955e-01 1.28390000e-01 1.28337110e-01 + 1.28284285e-01 1.28231526e-01 1.28178831e-01 1.28126202e-01 1.28073637e-01 + 1.28021137e-01 1.27968701e-01 1.27916330e-01 1.27864023e-01 1.27811780e-01 + 1.27759601e-01 1.27707486e-01 1.27655434e-01 1.27603447e-01 1.27551522e-01 + 1.27499661e-01 1.27447864e-01 1.27396129e-01 1.27344457e-01 1.27292848e-01 + 1.27241302e-01 1.27189818e-01 1.27138397e-01 1.27087038e-01 1.27035742e-01 + 1.26984507e-01 1.26933334e-01 1.26882223e-01 1.26831174e-01 1.26780187e-01 + 1.26729260e-01 1.26678396e-01 1.26627592e-01 1.26576849e-01 1.26526168e-01 + 1.26475547e-01 1.26424987e-01 1.26374487e-01 1.26324048e-01 1.26273670e-01 + 1.26223351e-01 1.26173093e-01 1.26122894e-01 1.26072756e-01 1.26022677e-01 + 1.25972658e-01 1.25922698e-01 1.25872798e-01 1.25822957e-01 1.25773176e-01 + 1.25723453e-01 1.25673789e-01 1.25624184e-01 1.25574638e-01 1.25525150e-01 + 1.25475721e-01 1.25426350e-01 1.25377037e-01 1.25327782e-01 1.25278586e-01 + 1.25229447e-01 1.25180366e-01 1.25131343e-01 1.25082377e-01 1.25033469e-01 + 1.24984618e-01 1.24935824e-01 1.24887088e-01 1.24838408e-01 1.24789785e-01 + 1.24741219e-01 1.24692710e-01 1.24644257e-01 1.24595861e-01 1.24547521e-01 + 1.24499237e-01 1.24451010e-01 1.24402838e-01 1.24354722e-01 1.24306662e-01 + 1.24258658e-01 1.24210709e-01 1.24162816e-01 1.24114978e-01 1.24067195e-01 + 1.24019468e-01 1.23971795e-01 1.23924178e-01 1.23876615e-01 1.23829107e-01 + 1.23781654e-01 1.23734255e-01 1.23686910e-01 1.23639620e-01 1.23592384e-01 + 1.23545202e-01 1.23498075e-01 1.23451001e-01 1.23403980e-01 1.23357014e-01 + 1.23310101e-01 1.23263242e-01 1.23216436e-01 1.23169683e-01 1.23122983e-01 + 1.23076337e-01 1.23029743e-01 1.22983202e-01 1.22936715e-01 1.22890279e-01 + 1.22843897e-01 1.22797567e-01 1.22751289e-01 1.22705063e-01 1.22658890e-01 + 1.22612769e-01 1.22566700e-01 1.22520682e-01 1.22474717e-01 1.22428803e-01 + 1.22382941e-01 1.22337130e-01 1.22291371e-01 1.22245663e-01 1.22200006e-01 + 1.22154400e-01 1.22108845e-01 1.22063342e-01 1.22017889e-01 1.21972487e-01 + 1.21927135e-01 1.21881834e-01 1.21836584e-01 1.21791383e-01 1.21746234e-01 + 1.21701134e-01 1.21656084e-01 1.21611085e-01 1.21566135e-01 1.21521235e-01 + 1.21476385e-01 1.21431584e-01 1.21386833e-01 1.21342131e-01 1.21297479e-01 + 1.21252876e-01 1.21208322e-01 1.21163817e-01 1.21119362e-01 1.21074955e-01 + 1.21030597e-01 1.20986287e-01 1.20942026e-01 1.20897814e-01 1.20853651e-01 + 1.20809535e-01 1.20765468e-01 1.20721449e-01 1.20677478e-01 1.20633555e-01 + 1.20589681e-01 1.20545854e-01 1.20502074e-01 1.20458343e-01 1.20414659e-01 + 1.20371022e-01 1.20327433e-01 1.20283891e-01 1.20240396e-01 1.20196949e-01 + 1.20153549e-01 1.20110195e-01 1.20066889e-01 1.20023629e-01 1.19980416e-01 + 1.19937250e-01 1.19894130e-01 1.19851056e-01 1.19808030e-01 1.19765049e-01 + 1.19722115e-01 1.19679226e-01 1.19636384e-01 1.19593588e-01 1.19550838e-01 + 1.19508133e-01 1.19465474e-01 1.19422861e-01 1.19380294e-01 1.19337772e-01 + 1.19295295e-01 1.19252863e-01 1.19210477e-01 1.19168136e-01 1.19125841e-01 + 1.19083590e-01 1.19041384e-01 1.18999223e-01 1.18957106e-01 1.18915035e-01 + 1.18873008e-01 1.18831025e-01 1.18789087e-01 1.18747194e-01 1.18705344e-01 + 1.18663539e-01 1.18621778e-01 1.18580061e-01 1.18538388e-01 1.18496759e-01 + 1.18455174e-01 1.18413632e-01 1.18372134e-01 1.18330680e-01 1.18289269e-01 + 1.18247902e-01 1.18206578e-01 1.18165298e-01 1.18124060e-01 1.18082866e-01 + 1.18041715e-01 1.18000607e-01 1.17959541e-01 1.17918519e-01 1.17877539e-01 + 1.17836602e-01 1.17795708e-01 1.17754856e-01 1.17714047e-01 1.17673280e-01 + 1.17632556e-01 1.17591873e-01 1.17551233e-01 1.17510635e-01 1.17470079e-01 + 1.17429565e-01 1.17389093e-01 1.17348662e-01 1.17308274e-01 1.17267927e-01 + 1.17227622e-01 1.17187358e-01 1.17147135e-01 1.17106955e-01 1.17066815e-01 + 1.17026717e-01 1.16986659e-01 1.16946643e-01 1.16906668e-01 1.16866734e-01 + 1.16826841e-01 1.16786988e-01 1.16747177e-01 1.16707406e-01 1.16667676e-01 + 1.16627986e-01 1.16588337e-01 1.16548728e-01 1.16509159e-01 1.16469631e-01 + 1.16430143e-01 1.16390695e-01 1.16351287e-01 1.16311919e-01 1.16272591e-01 + 1.16233303e-01 1.16194055e-01 1.16154846e-01 1.16115678e-01 1.16076548e-01 + 1.16037459e-01 1.15998408e-01 1.15959397e-01 1.15920426e-01 1.15881494e-01 + 1.15842601e-01 1.15803747e-01 1.15764932e-01 1.15726156e-01 1.15687419e-01 + 1.15648721e-01 1.15610062e-01 1.15571441e-01 1.15532859e-01 1.15494316e-01 + 1.15455812e-01 1.15417345e-01 1.15378918e-01 1.15340528e-01 1.15302177e-01 + 1.15263864e-01 1.15225590e-01 1.15187353e-01 1.15149155e-01 1.15110994e-01 + 1.15072871e-01 1.15034786e-01 1.14996739e-01 1.14958730e-01 1.14920759e-01 + 1.14882824e-01 1.14844928e-01 1.14807069e-01 1.14769247e-01 1.14731463e-01 + 1.14693716e-01 1.14656006e-01 1.14618334e-01 1.14580699e-01 1.14543100e-01 + 1.14505539e-01 1.14468014e-01 1.14430527e-01 1.14393076e-01 1.14355662e-01 + 1.14318284e-01 1.14280944e-01 1.14243640e-01 1.14206372e-01 1.14169141e-01 + 1.14131946e-01 1.14094787e-01 1.14057665e-01 1.14020579e-01 1.13983529e-01 + 1.13946515e-01 1.13909538e-01 1.13872596e-01 1.13835690e-01 1.13798820e-01 + 1.13761986e-01 1.13725188e-01 1.13688425e-01 1.13651698e-01 1.13615006e-01 + 1.13578350e-01 1.13541730e-01 1.13505144e-01 1.13468595e-01 1.13432080e-01 + 1.13395601e-01 1.13359156e-01 1.13322747e-01 1.13286373e-01 1.13250035e-01 + 1.13213730e-01 1.13177461e-01 1.13141227e-01 1.13105028e-01 1.13068863e-01 + 1.13032733e-01 1.12996637e-01 1.12960576e-01 1.12924550e-01 1.12888558e-01 + 1.12852600e-01 1.12816677e-01 1.12780788e-01 1.12744933e-01 1.12709112e-01 + 1.12673326e-01 1.12637574e-01 1.12601855e-01 1.12566171e-01 1.12530520e-01 + 1.12494904e-01 1.12459321e-01 1.12423772e-01 1.12388256e-01 1.12352774e-01 + 1.12317326e-01 1.12281911e-01 1.12246530e-01 1.12211182e-01 1.12175868e-01 + 1.12140587e-01 1.12105339e-01 1.12070125e-01 1.12034943e-01 1.11999795e-01 + 1.11964679e-01 1.11929597e-01 1.11894548e-01 1.11859532e-01 1.11824548e-01 + 1.11789597e-01 1.11754679e-01 1.11719794e-01 1.11684941e-01 1.11650121e-01 + 1.11615334e-01 1.11580579e-01 1.11545856e-01 1.11511166e-01 1.11476508e-01 + 1.11441883e-01 1.11407289e-01 1.11372728e-01 1.11338199e-01 1.11303703e-01 + 1.11269238e-01 1.11234805e-01 1.11200404e-01 1.11166035e-01 1.11131698e-01 + 1.11097393e-01 1.11063119e-01 1.11028877e-01 1.10994667e-01 1.10960489e-01 + 1.10926342e-01 1.10892226e-01 1.10858142e-01 1.10824089e-01 1.10790068e-01 + 1.10756078e-01 1.10722119e-01 1.10688192e-01 1.10654295e-01 1.10620430e-01 + 1.10586596e-01 1.10552793e-01 1.10519021e-01 1.10485279e-01 1.10451569e-01 + 1.10417890e-01 1.10384241e-01 1.10350623e-01 1.10317036e-01 1.10283479e-01 + 1.10249953e-01 1.10216458e-01 1.10182993e-01 1.10149558e-01 1.10116154e-01 + 1.10082780e-01 1.10049437e-01 1.10016124e-01 1.09982841e-01 1.09949588e-01 + 1.09916366e-01 1.09883174e-01 1.09850011e-01 1.09816879e-01 1.09783776e-01 + 1.09750704e-01 1.09717661e-01 1.09684648e-01 1.09651665e-01 1.09618712e-01 + 1.09585789e-01 1.09552895e-01 1.09520030e-01 1.09487196e-01 1.09454390e-01 + 1.09421615e-01 1.09388868e-01 1.09356151e-01 1.09323464e-01 1.09290805e-01 + 1.09258176e-01 1.09225576e-01 1.09193006e-01 1.09160464e-01 1.09127951e-01 + 1.09095468e-01 1.09063013e-01 1.09030588e-01 1.08998191e-01 1.08965824e-01 + 1.08933485e-01 1.08901174e-01 1.08868893e-01 1.08836640e-01 1.08804416e-01 + 1.08772220e-01 1.08740054e-01 1.08707915e-01 1.08675805e-01 1.08643724e-01 + 1.08611671e-01 1.08579646e-01 1.08547649e-01 1.08515681e-01 1.08483741e-01 + 1.08451829e-01 1.08419946e-01 1.08388090e-01 1.08356263e-01 1.08324463e-01 + 1.08292692e-01 1.08260948e-01 1.08229233e-01 1.08197545e-01 1.08165885e-01 + 1.08134253e-01 1.08102648e-01 1.08071072e-01 1.08039523e-01 1.08008001e-01 + 1.07976507e-01 1.07945041e-01 1.07913602e-01 1.07882191e-01 1.07850807e-01 + 1.07819450e-01 1.07788121e-01 1.07756819e-01 1.07725544e-01 1.07694296e-01 + 1.07663076e-01 1.07631883e-01 1.07600717e-01 1.07569578e-01 1.07538466e-01 + 1.07507381e-01 1.07476322e-01 1.07445291e-01 1.07414287e-01 1.07383309e-01 + 1.07352359e-01 1.07321435e-01 1.07290537e-01 1.07259667e-01 1.07228823e-01 + 1.07198005e-01 1.07167214e-01 1.07136450e-01 1.07105712e-01 1.07075001e-01 + 1.07044316e-01 1.07013657e-01 1.06983025e-01 1.06952419e-01 1.06921839e-01 + 1.06891286e-01 1.06860758e-01 1.06830257e-01 1.06799782e-01 1.06769333e-01 + 1.06738910e-01 1.06708513e-01 1.06678142e-01 1.06647796e-01 1.06617477e-01 + 1.06587184e-01 1.06556916e-01 1.06526674e-01 1.06496458e-01 1.06466268e-01 + 1.06436103e-01 1.06405964e-01 1.06375850e-01 1.06345762e-01 1.06315700e-01 + 1.06285663e-01 1.06255651e-01 1.06225665e-01 1.06195704e-01 1.06165769e-01 + 1.06135859e-01 1.06105974e-01 1.06076114e-01 1.06046280e-01 1.06016470e-01 + 1.05986686e-01 1.05956927e-01 1.05927193e-01 1.05897484e-01 1.05867800e-01 + 1.05838141e-01 1.05808507e-01 1.05778897e-01 1.05749313e-01 1.05719753e-01 + 1.05690218e-01 1.05660708e-01 1.05631223e-01 1.05601762e-01 1.05572326e-01 + 1.05542914e-01 1.05513528e-01 1.05484165e-01 1.05454827e-01 1.05425514e-01 + 1.05396225e-01 1.05366960e-01 1.05337720e-01 1.05308504e-01 1.05279312e-01 + 1.05250145e-01 1.05221002e-01 1.05191883e-01 1.05162788e-01 1.05133717e-01 + 1.05104671e-01 1.05075648e-01 1.05046650e-01 1.05017675e-01 1.04988725e-01 + 1.04959798e-01 1.04930896e-01 1.04902017e-01 1.04873162e-01 1.04844331e-01 + 1.04815523e-01 1.04786740e-01 1.04757980e-01 1.04729243e-01 1.04700531e-01 + 1.04671841e-01 1.04643176e-01 1.04614534e-01 1.04585916e-01 1.04557321e-01 + 1.04528749e-01 1.04500201e-01 1.04471676e-01 1.04443175e-01 1.04414697e-01 + 1.04386242e-01 1.04357810e-01 1.04329402e-01 1.04301017e-01 1.04272655e-01 + 1.04244316e-01 1.04216000e-01 1.04187707e-01 1.04159437e-01 1.04131191e-01 + 1.04102967e-01 1.04074766e-01 1.04046588e-01 1.04018433e-01 1.03990301e-01 + 1.03962192e-01 1.03934105e-01 1.03906041e-01 1.03878000e-01 1.03849982e-01 + 1.03821986e-01 1.03794013e-01 1.03766062e-01 1.03738134e-01 1.03710229e-01 + 1.03682346e-01 1.03654486e-01 1.03626648e-01 1.03598832e-01 1.03571039e-01 + 1.03543268e-01 1.03515520e-01 1.03487793e-01 1.03460089e-01 1.03432408e-01 + 1.03404748e-01 1.03377111e-01 1.03349496e-01 1.03321903e-01 1.03294332e-01 + 1.03266783e-01 1.03239256e-01 1.03211751e-01 1.03184268e-01 1.03156807e-01 + 1.03129368e-01 1.03101951e-01 1.03074556e-01 1.03047182e-01 1.03019831e-01 + 1.02992501e-01 1.02965192e-01 1.02937906e-01 1.02910641e-01 1.02883398e-01 + 1.02856177e-01 1.02828977e-01 1.02801798e-01 1.02774642e-01 1.02747506e-01 + 1.02720392e-01 1.02693300e-01 1.02666229e-01 1.02639180e-01 1.02612151e-01 + 1.02585145e-01 1.02558159e-01 1.02531195e-01 1.02504252e-01 1.02477330e-01 + 1.02450430e-01 1.02423550e-01 1.02396692e-01 1.02369855e-01 1.02343039e-01 + 1.02316244e-01 1.02289470e-01 1.02262717e-01 1.02235985e-01 1.02209274e-01 + 1.02182584e-01 1.02155915e-01 1.02129267e-01 1.02102639e-01 1.02076033e-01 + 1.02049447e-01 1.02022882e-01 1.01996338e-01 1.01969814e-01 1.01943311e-01 + 1.01916829e-01 1.01890367e-01 1.01863926e-01 1.01837505e-01 1.01811106e-01 + 1.01784726e-01 1.01758367e-01 1.01732029e-01 1.01705711e-01 1.01679413e-01 + 1.01653136e-01 1.01626879e-01 1.01600643e-01 1.01574426e-01 1.01548230e-01 + 1.01522055e-01 1.01495899e-01 1.01469764e-01 1.01443649e-01 1.01417554e-01 + 1.01391479e-01 1.01365425e-01 1.01339390e-01 1.01313376e-01 1.01287381e-01 + 1.01261406e-01 1.01235452e-01 1.01209517e-01 1.01183603e-01 1.01157708e-01 + 1.01131833e-01 1.01105978e-01 1.01080143e-01 1.01054327e-01 1.01028532e-01 + 1.01002756e-01 1.00976999e-01 1.00951263e-01 1.00925546e-01 1.00899849e-01 + 1.00874171e-01 1.00848513e-01 1.00822875e-01 1.00797256e-01 1.00771656e-01 + 1.00746077e-01 1.00720516e-01 1.00694975e-01 1.00669454e-01 1.00643952e-01 + 1.00618469e-01 1.00593005e-01 1.00567561e-01 1.00542136e-01 1.00516731e-01 + 1.00491345e-01 1.00465978e-01 1.00440630e-01 1.00415301e-01 1.00389992e-01 + 1.00364701e-01 1.00339430e-01 1.00314178e-01 1.00288944e-01 1.00263730e-01 + 1.00238535e-01 1.00213359e-01 1.00188202e-01 1.00163064e-01 1.00137944e-01 + 1.00112844e-01 1.00087762e-01 1.00062700e-01 1.00037656e-01 1.00012631e-01 + 9.99876242e-02 9.99626366e-02 9.99376677e-02 9.99127176e-02 9.98877861e-02 + 9.98628732e-02 9.98379790e-02 9.98131034e-02 9.97882464e-02 9.97634079e-02 + 9.97385880e-02 9.97137866e-02 9.96890037e-02 9.96642393e-02 9.96394933e-02 + 9.96147657e-02 9.95900565e-02 9.95653657e-02 9.95406933e-02 9.95160392e-02 + 9.94914034e-02 9.94667859e-02 9.94421867e-02 9.94176057e-02 9.93930429e-02 + 9.93684983e-02 9.93439719e-02 9.93194636e-02 9.92949735e-02 9.92705015e-02 + 9.92460476e-02 9.92216117e-02 9.91971939e-02 9.91727940e-02 9.91484122e-02 + 9.91240484e-02 9.90997025e-02 9.90753745e-02 9.90510645e-02 9.90267723e-02 + 9.90024980e-02 9.89782415e-02 9.89540029e-02 9.89297821e-02 9.89055790e-02 + 9.88813937e-02 9.88572261e-02 9.88330763e-02 9.88089441e-02 9.87848296e-02 + 9.87607327e-02 9.87366535e-02 9.87125919e-02 9.86885478e-02 9.86645213e-02 + 9.86405124e-02 9.86165209e-02 9.85925470e-02 9.85685906e-02 9.85446516e-02 + 9.85207300e-02 9.84968258e-02 9.84729391e-02 9.84490697e-02 9.84252176e-02 + 9.84013829e-02 9.83775655e-02 9.83537654e-02 9.83299825e-02 9.83062169e-02 + 9.82824685e-02 9.82587374e-02 9.82350233e-02 9.82113265e-02 9.81876468e-02 + 9.81639842e-02 9.81403387e-02 9.81167103e-02 9.80930990e-02 9.80695047e-02 + 9.80459274e-02 9.80223671e-02 9.79988238e-02 9.79752974e-02 9.79517880e-02 + 9.79282955e-02 9.79048199e-02 9.78813611e-02 9.78579192e-02 9.78344942e-02 + 9.78110859e-02 9.77876945e-02 9.77643198e-02 9.77409619e-02 9.77176207e-02 + 9.76942963e-02 9.76709885e-02 9.76476974e-02 9.76244230e-02 9.76011651e-02 + 9.75779239e-02 9.75546993e-02 9.75314913e-02 9.75082999e-02 9.74851249e-02 + 9.74619665e-02 9.74388246e-02 9.74156991e-02 9.73925901e-02 9.73694976e-02 + 9.73464215e-02 9.73233617e-02 9.73003184e-02 9.72772914e-02 9.72542807e-02 + 9.72312864e-02 9.72083084e-02 9.71853467e-02 9.71624012e-02 9.71394719e-02 + 9.71165589e-02 9.70936621e-02 9.70707815e-02 9.70479171e-02 9.70250688e-02 + 9.70022366e-02 9.69794205e-02 9.69566206e-02 9.69338367e-02 9.69110688e-02 + 9.68883170e-02 9.68655813e-02 9.68428615e-02 9.68201577e-02 9.67974698e-02 + 9.67747979e-02 9.67521419e-02 9.67295019e-02 9.67068777e-02 9.66842693e-02 + 9.66616769e-02 9.66391002e-02 9.66165394e-02 9.65939943e-02 9.65714651e-02 + 9.65489516e-02 9.65264538e-02 9.65039718e-02 9.64815054e-02 9.64590547e-02 + 9.64366197e-02 9.64142004e-02 9.63917967e-02 9.63694086e-02 9.63470360e-02 + 9.63246791e-02 9.63023377e-02 9.62800118e-02 9.62577015e-02 9.62354067e-02 + 9.62131273e-02 9.61908635e-02 9.61686150e-02 9.61463820e-02 9.61241644e-02 + 9.61019623e-02 9.60797754e-02 9.60576040e-02 9.60354479e-02 9.60133071e-02 + 9.59911816e-02 9.59690714e-02 9.59469765e-02 9.59248968e-02 9.59028324e-02 + 9.58807832e-02 9.58587492e-02 9.58367303e-02 9.58147267e-02 9.57927382e-02 + 9.57707648e-02 9.57488065e-02 9.57268633e-02 9.57049352e-02 9.56830222e-02 + 9.56611242e-02 9.56392413e-02 9.56173733e-02 9.55955204e-02 9.55736824e-02 + 9.55518594e-02 9.55300513e-02 9.55082582e-02 9.54864799e-02 9.54647166e-02 + 9.54429681e-02 9.54212345e-02 9.53995157e-02 9.53778117e-02 9.53561226e-02 + 9.53344482e-02 9.53127886e-02 9.52911438e-02 9.52695137e-02 9.52478984e-02 + 9.52262977e-02 9.52047117e-02 9.51831404e-02 9.51615838e-02 9.51400418e-02 + 9.51185144e-02 9.50970016e-02 9.50755034e-02 9.50540198e-02 9.50325508e-02 + 9.50110963e-02 9.49896563e-02 9.49682308e-02 9.49468198e-02 9.49254233e-02 + 9.49040412e-02 9.48826736e-02 9.48613204e-02 9.48399817e-02 9.48186573e-02 + 9.47973473e-02 9.47760516e-02 9.47547703e-02 9.47335034e-02 9.47122507e-02 + 9.46910123e-02 9.46697883e-02 9.46485784e-02 9.46273829e-02 9.46062015e-02 + 9.45850344e-02 9.45638815e-02 9.45427428e-02 9.45216182e-02 9.45005078e-02 + 9.44794116e-02 9.44583294e-02 9.44372614e-02 9.44162074e-02 9.43951676e-02 + 9.43741418e-02 9.43531300e-02 9.43321323e-02 9.43111485e-02 9.42901788e-02 + 9.42692231e-02 9.42482813e-02 9.42273534e-02 9.42064395e-02 9.41855396e-02 + 9.41646535e-02 9.41437813e-02 9.41229230e-02 9.41020785e-02 9.40812479e-02 + 9.40604311e-02 9.40396282e-02 9.40188390e-02 9.39980636e-02 9.39773020e-02 + 9.39565541e-02 9.39358200e-02 9.39150995e-02 9.38943928e-02 9.38736998e-02 + 9.38530204e-02 9.38323548e-02 9.38117027e-02 9.37910643e-02 9.37704395e-02 + 9.37498283e-02 9.37292307e-02 9.37086466e-02 9.36880762e-02 9.36675192e-02 + 9.36469758e-02 9.36264459e-02 9.36059295e-02 9.35854265e-02 9.35649371e-02 + 9.35444611e-02 9.35239985e-02 9.35035493e-02 9.34831136e-02 9.34626912e-02 + 9.34422823e-02 9.34218866e-02 9.34015044e-02 9.33811355e-02 9.33607798e-02 + 9.33404375e-02 9.33201085e-02 9.32997928e-02 9.32794903e-02 9.32592011e-02 + 9.32389251e-02 9.32186624e-02 9.31984128e-02 9.31781764e-02 9.31579532e-02 + 9.31377432e-02 9.31175463e-02 9.30973626e-02 9.30771919e-02 9.30570344e-02 + 9.30368899e-02 9.30167586e-02 9.29966403e-02 9.29765350e-02 9.29564428e-02 + 9.29363636e-02 9.29162974e-02 9.28962442e-02 9.28762040e-02 9.28561768e-02 + 9.28361624e-02 9.28161611e-02 9.27961726e-02 9.27761971e-02 9.27562344e-02 + 9.27362847e-02 9.27163478e-02 9.26964237e-02 9.26765125e-02 9.26566141e-02 + 9.26367286e-02 9.26168558e-02 9.25969958e-02 9.25771486e-02 9.25573141e-02 + 9.25374924e-02 9.25176834e-02 9.24978871e-02 9.24781036e-02 9.24583327e-02 + 9.24385745e-02 9.24188289e-02 9.23990960e-02 9.23793758e-02 9.23596681e-02 + 9.23399731e-02 9.23202907e-02 9.23006208e-02 9.22809635e-02 9.22613188e-02 + 9.22416866e-02 9.22220669e-02 9.22024597e-02 9.21828651e-02 9.21632829e-02 + 9.21437132e-02 9.21241560e-02 9.21046112e-02 9.20850788e-02 9.20655589e-02 + 9.20460514e-02 9.20265563e-02 9.20070735e-02 9.19876031e-02 9.19681451e-02 + 9.19486994e-02 9.19292661e-02 9.19098451e-02 9.18904363e-02 9.18710399e-02 + 9.18516557e-02 9.18322838e-02 9.18129242e-02 9.17935768e-02 9.17742416e-02 + 9.17549186e-02 9.17356079e-02 9.17163093e-02 9.16970229e-02 9.16777486e-02 + 9.16584865e-02 9.16392366e-02 9.16199987e-02 9.16007730e-02 9.15815594e-02 + 9.15623578e-02 9.15431684e-02 9.15239910e-02 9.15048256e-02 9.14856723e-02 + 9.14665310e-02 9.14474017e-02 9.14282844e-02 9.14091791e-02 9.13900857e-02 + 9.13710043e-02 9.13519349e-02 9.13328774e-02 9.13138318e-02 9.12947982e-02 + 9.12757764e-02 9.12567665e-02 9.12377685e-02 9.12187823e-02 9.11998080e-02 + 9.11808456e-02 9.11618949e-02 9.11429561e-02 9.11240290e-02 9.11051138e-02 + 9.10862103e-02 9.10673186e-02 9.10484386e-02 9.10295704e-02 9.10107139e-02 + 9.09918691e-02 9.09730360e-02 9.09542146e-02 9.09354049e-02 9.09166069e-02 + 9.08978205e-02 9.08790457e-02 9.08602826e-02 9.08415311e-02 9.08227911e-02 + 9.08040628e-02 9.07853461e-02 9.07666409e-02 9.07479473e-02 9.07292652e-02 + 9.07105947e-02 9.06919357e-02 9.06732882e-02 9.06546522e-02 9.06360277e-02 + 9.06174146e-02 9.05988131e-02 9.05802229e-02 9.05616442e-02 9.05430770e-02 + 9.05245211e-02 9.05059767e-02 9.04874436e-02 9.04689219e-02 9.04504116e-02 + 9.04319127e-02 9.04134251e-02 9.03949488e-02 9.03764839e-02 9.03580303e-02 + 9.03395879e-02 9.03211569e-02 9.03027371e-02 9.02843286e-02 9.02659313e-02 + 9.02475453e-02 9.02291706e-02 9.02108070e-02 9.01924546e-02 9.01741135e-02 + 9.01557835e-02 9.01374647e-02 9.01191571e-02 9.01008606e-02 9.00825752e-02 + 9.00643010e-02 9.00460379e-02 9.00277859e-02 9.00095450e-02 8.99913152e-02 + 8.99730965e-02 8.99548888e-02 8.99366921e-02 8.99185065e-02 8.99003320e-02 + 8.98821684e-02 8.98640159e-02 8.98458743e-02 8.98277437e-02 8.98096241e-02 + 8.97915155e-02 8.97734178e-02 8.97553311e-02 8.97372552e-02 8.97191903e-02 + 8.97011363e-02 8.96830932e-02 8.96650610e-02 8.96470396e-02 8.96290291e-02 + 8.96110295e-02 8.95930407e-02 8.95750627e-02 8.95570956e-02 8.95391392e-02 + 8.95211937e-02 8.95032589e-02 8.94853349e-02 8.94674217e-02 8.94495192e-02 + 8.94316275e-02 8.94137465e-02 8.93958762e-02 8.93780167e-02 8.93601678e-02 + 8.93423296e-02 8.93245021e-02 8.93066853e-02 8.92888791e-02 8.92710836e-02 + 8.92532987e-02 8.92355244e-02 8.92177608e-02 8.92000077e-02 8.91822653e-02 + 8.91645334e-02 8.91468121e-02 8.91291014e-02 8.91114012e-02 8.90937115e-02 + 8.90760324e-02 8.90583638e-02 8.90407057e-02 8.90230582e-02 8.90054211e-02 + 8.89877945e-02 8.89701783e-02 8.89525726e-02 8.89349774e-02 8.89173926e-02 + 8.88998182e-02 8.88822542e-02 8.88647007e-02 8.88471575e-02 8.88296247e-02 + 8.88121023e-02 8.87945903e-02 8.87770886e-02 8.87595973e-02 8.87421163e-02 + 8.87246456e-02 8.87071853e-02 8.86897352e-02 8.86722954e-02 8.86548660e-02 + 8.86374468e-02 8.86200378e-02 8.86026391e-02 8.85852507e-02 8.85678725e-02 + 8.85505045e-02 8.85331467e-02 8.85157991e-02 8.84984618e-02 8.84811346e-02 + 8.84638176e-02 8.84465107e-02 8.84292140e-02 8.84119274e-02 8.83946510e-02 + 8.83773847e-02 8.83601285e-02 8.83428825e-02 8.83256465e-02 8.83084206e-02 + 8.82912047e-02 8.82739990e-02 8.82568033e-02 8.82396176e-02 8.82224420e-02 + 8.82052764e-02 8.81881208e-02 8.81709752e-02 8.81538396e-02 8.81367140e-02 + 8.81195984e-02 8.81024927e-02 8.80853970e-02 8.80683113e-02 8.80512355e-02 + 8.80341696e-02 8.80171137e-02 8.80000676e-02 8.79830314e-02 8.79660052e-02 + 8.79489888e-02 8.79319823e-02 8.79149857e-02 8.78979989e-02 8.78810219e-02 + 8.78640548e-02 8.78470975e-02 8.78301500e-02 8.78132123e-02 8.77962845e-02 + 8.77793664e-02 8.77624580e-02 8.77455595e-02 8.77286707e-02 8.77117916e-02 + 8.76949223e-02 8.76780628e-02 8.76612129e-02 8.76443728e-02 8.76275423e-02 + 8.76107216e-02 8.75939105e-02 8.75771091e-02 8.75603174e-02 8.75435353e-02 + 8.75267629e-02 8.75100001e-02 8.74932469e-02 8.74765033e-02 8.74597694e-02 + 8.74430451e-02 8.74263303e-02 8.74096251e-02 8.73929296e-02 8.73762435e-02 + 8.73595670e-02 8.73429001e-02 8.73262427e-02 8.73095948e-02 8.72929565e-02 + 8.72763276e-02 8.72597083e-02 8.72430984e-02 8.72264981e-02 8.72099072e-02 + 8.71933257e-02 8.71767537e-02 8.71601912e-02 8.71436381e-02 8.71270944e-02 + 8.71105602e-02 8.70940353e-02 8.70775199e-02 8.70610138e-02 8.70445172e-02 + 8.70280299e-02 8.70115519e-02 8.69950834e-02 8.69786241e-02 8.69621742e-02 + 8.69457337e-02 8.69293024e-02 8.69128805e-02 8.68964679e-02 8.68800646e-02 + 8.68636705e-02 8.68472857e-02 8.68309103e-02 8.68145440e-02 8.67981870e-02 + 8.67818393e-02 8.67655008e-02 8.67491715e-02 8.67328514e-02 8.67165406e-02 + 8.67002389e-02 8.66839464e-02 8.66676631e-02 8.66513890e-02 8.66351240e-02 + 8.66188682e-02 8.66026216e-02 8.65863841e-02 8.65701557e-02 8.65539364e-02 + 8.65377263e-02 8.65215252e-02 8.65053333e-02 8.64891504e-02 8.64729766e-02 + 8.64568119e-02 8.64406563e-02 8.64245097e-02 8.64083721e-02 8.63922436e-02 + 8.63761241e-02 8.63600136e-02 8.63439122e-02 8.63278197e-02 8.63117363e-02 + 8.62956618e-02 8.62795963e-02 8.62635398e-02 8.62474922e-02 8.62314536e-02 + 8.62154239e-02 8.61994032e-02 8.61833914e-02 8.61673885e-02 8.61513945e-02 + 8.61354094e-02 8.61194332e-02 8.61034659e-02 8.60875075e-02 8.60715580e-02 + 8.60556173e-02 8.60396855e-02 8.60237625e-02 8.60078483e-02 8.59919430e-02 + 8.59760465e-02 8.59601588e-02 8.59442800e-02 8.59284099e-02 8.59125486e-02 + 8.58966961e-02 8.58808523e-02 8.58650173e-02 8.58491911e-02 8.58333736e-02 + 8.58175649e-02 8.58017649e-02 8.57859736e-02 8.57701911e-02 8.57544172e-02 + 8.57386520e-02 8.57228956e-02 8.57071478e-02 8.56914087e-02 8.56756782e-02 + 8.56599565e-02 8.56442433e-02 8.56285389e-02 8.56128430e-02 8.55971558e-02 + 8.55814772e-02 8.55658072e-02 8.55501458e-02 8.55344930e-02 8.55188488e-02 + 8.55032132e-02 8.54875862e-02 8.54719677e-02 8.54563578e-02 8.54407564e-02 + 8.54251636e-02 8.54095793e-02 8.53940035e-02 8.53784363e-02 8.53628775e-02 + 8.53473273e-02 8.53317855e-02 8.53162523e-02 8.53007275e-02 8.52852112e-02 + 8.52697034e-02 8.52542040e-02 8.52387130e-02 8.52232305e-02 8.52077565e-02 + 8.51922909e-02 8.51768336e-02 8.51613848e-02 8.51459444e-02 8.51305124e-02 + 8.51150888e-02 8.50996736e-02 8.50842667e-02 8.50688682e-02 8.50534780e-02 + 8.50380963e-02 8.50227228e-02 8.50073577e-02 8.49920009e-02 8.49766524e-02 + 8.49613123e-02 8.49459804e-02 8.49306569e-02 8.49153416e-02 8.49000346e-02 + 8.48847359e-02 8.48694455e-02 8.48541633e-02 8.48388893e-02 8.48236237e-02 + 8.48083662e-02 8.47931170e-02 8.47778760e-02 8.47626432e-02 8.47474187e-02 + 8.47322023e-02 8.47169941e-02 8.47017941e-02 8.46866023e-02 8.46714187e-02 + 8.46562432e-02 8.46410759e-02 8.46259167e-02 8.46107657e-02 8.45956228e-02 + 8.45804880e-02 8.45653614e-02 8.45502428e-02 8.45351324e-02 8.45200301e-02 + 8.45049358e-02 8.44898497e-02 8.44747716e-02 8.44597016e-02 8.44446397e-02 + 8.44295858e-02 8.44145399e-02 8.43995021e-02 8.43844724e-02 8.43694506e-02 + 8.43544369e-02 8.43394312e-02 8.43244335e-02 8.43094438e-02 8.42944621e-02 + 8.42794883e-02 8.42645226e-02 8.42495648e-02 8.42346150e-02 8.42196731e-02 + 8.42047392e-02 8.41898132e-02 8.41748952e-02 8.41599851e-02 8.41450829e-02 + 8.41301886e-02 8.41153022e-02 8.41004238e-02 8.40855532e-02 8.40706905e-02 + 8.40558357e-02 8.40409887e-02 8.40261496e-02 8.40113184e-02 8.39964950e-02 + 8.39816795e-02 8.39668718e-02 8.39520719e-02 8.39372799e-02 8.39224957e-02 + 8.39077193e-02 8.38929507e-02 8.38781898e-02 8.38634368e-02 8.38486916e-02 + 8.38339541e-02 8.38192244e-02 8.38045025e-02 8.37897883e-02 8.37750818e-02 + 8.37603831e-02 8.37456922e-02 8.37310089e-02 8.37163334e-02 8.37016656e-02 + 8.36870055e-02 8.36723531e-02 8.36577084e-02 8.36430714e-02 8.36284421e-02 + 8.36138204e-02 8.35992064e-02 8.35846001e-02 8.35700014e-02 8.35554104e-02 + 8.35408270e-02 8.35262512e-02 8.35116831e-02 8.34971226e-02 8.34825697e-02 + 8.34680244e-02 8.34534867e-02 8.34389566e-02 8.34244341e-02 8.34099191e-02 + 8.33954118e-02 8.33809120e-02 8.33664197e-02 8.33519351e-02 8.33374579e-02 + 8.33229883e-02 8.33085263e-02 8.32940718e-02 8.32796248e-02 8.32651853e-02 + 8.32507533e-02 8.32363288e-02 8.32219118e-02 8.32075023e-02 8.31931003e-02 + 8.31787058e-02 8.31643187e-02 8.31499391e-02 8.31355669e-02 8.31212022e-02 + 8.31068450e-02 8.30924951e-02 8.30781528e-02 8.30638178e-02 8.30494902e-02 + 8.30351701e-02 8.30208574e-02 8.30065520e-02 8.29922541e-02 8.29779635e-02 + 8.29636804e-02 8.29494046e-02 8.29351361e-02 8.29208751e-02 8.29066213e-02 + 8.28923750e-02 8.28781359e-02 8.28639042e-02 8.28496799e-02 8.28354628e-02 + 8.28212531e-02 8.28070507e-02 8.27928556e-02 8.27786678e-02 8.27644872e-02 + 8.27503140e-02 8.27361480e-02 8.27219893e-02 8.27078379e-02 8.26936938e-02 + 8.26795569e-02 8.26654272e-02 8.26513048e-02 8.26371896e-02 8.26230816e-02 + 8.26089809e-02 8.25948874e-02 8.25808011e-02 8.25667220e-02 8.25526501e-02 + 8.25385854e-02 8.25245279e-02 8.25104775e-02 8.24964344e-02 8.24823984e-02 + 8.24683695e-02 8.24543479e-02 8.24403333e-02 8.24263259e-02 8.24123257e-02 + 8.23983326e-02 8.23843466e-02 8.23703677e-02 8.23563960e-02 8.23424313e-02 + 8.23284737e-02 8.23145233e-02 8.23005799e-02 8.22866436e-02 8.22727144e-02 + 8.22587923e-02 8.22448772e-02 8.22309692e-02 8.22170683e-02 8.22031744e-02 + 8.21892875e-02 8.21754077e-02 8.21615349e-02 8.21476691e-02 8.21338103e-02 + 8.21199586e-02 8.21061138e-02 8.20922761e-02 8.20784453e-02 8.20646216e-02 + 8.20508048e-02 8.20369950e-02 8.20231922e-02 8.20093963e-02 8.19956074e-02 + 8.19818254e-02 8.19680504e-02 8.19542823e-02 8.19405212e-02 8.19267670e-02 + 8.19130197e-02 8.18992794e-02 8.18855459e-02 8.18718194e-02 8.18580997e-02 + 8.18443870e-02 8.18306811e-02 8.18169822e-02 8.18032901e-02 8.17896048e-02 + 8.17759265e-02 8.17622550e-02 8.17485903e-02 8.17349326e-02 8.17212816e-02 + 8.17076375e-02 8.16940002e-02 8.16803697e-02 8.16667461e-02 8.16531293e-02 + 8.16395193e-02 8.16259161e-02 8.16123197e-02 8.15987300e-02 8.15851472e-02 + 8.15715712e-02 8.15580019e-02 8.15444394e-02 8.15308836e-02 8.15173346e-02 + 8.15037924e-02 8.14902569e-02 8.14767282e-02 8.14632062e-02 8.14496909e-02 + 8.14361823e-02 8.14226805e-02 8.14091854e-02 8.13956970e-02 8.13822153e-02 + 8.13687402e-02 8.13552719e-02 8.13418103e-02 8.13283553e-02 8.13149070e-02 + 8.13014654e-02 8.12880305e-02 8.12746022e-02 8.12611805e-02 8.12477656e-02 + 8.12343572e-02 8.12209555e-02 8.12075604e-02 8.11941719e-02 8.11807901e-02 + 8.11674149e-02 8.11540463e-02 8.11406843e-02 8.11273288e-02 8.11139800e-02 + 8.11006378e-02 8.10873021e-02 8.10739731e-02 8.10606506e-02 8.10473346e-02 + 8.10340252e-02 8.10207224e-02 8.10074261e-02 8.09941364e-02 8.09808532e-02 + 8.09675765e-02 8.09543064e-02 8.09410428e-02 8.09277857e-02 8.09145351e-02 + 8.09012911e-02 8.08880535e-02 8.08748224e-02 8.08615978e-02 8.08483797e-02 + 8.08351681e-02 8.08219630e-02 8.08087643e-02 8.07955721e-02 8.07823863e-02 + 8.07692070e-02 8.07560342e-02 8.07428678e-02 8.07297078e-02 8.07165542e-02 + 8.07034071e-02 8.06902664e-02 8.06771322e-02 8.06640043e-02 8.06508829e-02 + 8.06377678e-02 8.06246592e-02 8.06115569e-02 8.05984610e-02 8.05853715e-02 + 8.05722884e-02 8.05592116e-02 8.05461412e-02 8.05330772e-02 8.05200195e-02 + 8.05069682e-02 8.04939232e-02 8.04808846e-02 8.04678523e-02 8.04548263e-02 + 8.04418066e-02 8.04287933e-02 8.04157863e-02 8.04027856e-02 8.03897912e-02 + 8.03768031e-02 8.03638212e-02 8.03508457e-02 8.03378765e-02 8.03249135e-02 + 8.03119568e-02 8.02990064e-02 8.02860622e-02 8.02731243e-02 8.02601926e-02 + 8.02472672e-02 8.02343481e-02 8.02214351e-02 8.02085284e-02 8.01956280e-02 + 8.01827337e-02 8.01698457e-02 8.01569639e-02 8.01440883e-02 8.01312189e-02 + 8.01183557e-02 8.01054986e-02 8.00926478e-02 8.00798032e-02 8.00669647e-02 + 8.00541324e-02 8.00413063e-02 8.00284863e-02 8.00156725e-02 8.00028649e-02 + 7.99900634e-02 7.99772680e-02 7.99644788e-02 7.99516957e-02 7.99389187e-02 + 7.99261479e-02 7.99133832e-02 7.99006246e-02 7.98878721e-02 7.98751257e-02 + 7.98623854e-02 7.98496512e-02 7.98369231e-02 7.98242011e-02 7.98114851e-02 + 7.97987753e-02 7.97860715e-02 7.97733737e-02 7.97606821e-02 7.97479965e-02 + 7.97353169e-02 7.97226434e-02 7.97099759e-02 7.96973145e-02 7.96846590e-02 + 7.96720097e-02 7.96593663e-02 7.96467290e-02 7.96340976e-02 7.96214723e-02 + 7.96088530e-02 7.95962397e-02 7.95836323e-02 7.95710310e-02 7.95584356e-02 + 7.95458463e-02 7.95332629e-02 7.95206854e-02 7.95081140e-02 7.94955485e-02 + 7.94829889e-02 7.94704353e-02 7.94578877e-02 7.94453459e-02 7.94328102e-02 + 7.94202803e-02 7.94077564e-02 7.93952384e-02 7.93827263e-02 7.93702202e-02 + 7.93577199e-02 7.93452256e-02 7.93327371e-02 7.93202546e-02 7.93077779e-02 + 7.92953071e-02 7.92828423e-02 7.92703832e-02 7.92579301e-02 7.92454828e-02 + 7.92330414e-02 7.92206058e-02 7.92081761e-02 7.91957523e-02 7.91833343e-02 + 7.91709221e-02 7.91585157e-02 7.91461152e-02 7.91337206e-02 7.91213317e-02 + 7.91089486e-02 7.90965714e-02 7.90842000e-02 7.90718344e-02 7.90594746e-02 + 7.90471205e-02 7.90347723e-02 7.90224298e-02 7.90100932e-02 7.89977623e-02 + 7.89854371e-02 7.89731178e-02 7.89608042e-02 7.89484964e-02 7.89361943e-02 + 7.89238979e-02 7.89116073e-02 7.88993225e-02 7.88870434e-02 7.88747700e-02 + 7.88625023e-02 7.88502404e-02 7.88379842e-02 7.88257337e-02 7.88134889e-02 + 7.88012498e-02 7.87890164e-02 7.87767887e-02 7.87645667e-02 7.87523504e-02 + 7.87401398e-02 7.87279348e-02 7.87157355e-02 7.87035419e-02 7.86913540e-02 + 7.86791717e-02 7.86669951e-02 7.86548241e-02 7.86426588e-02 7.86304991e-02 + 7.86183450e-02 7.86061966e-02 7.85940538e-02 7.85819167e-02 7.85697851e-02 + 7.85576592e-02 7.85455389e-02 7.85334242e-02 7.85213151e-02 7.85092116e-02 + 7.84971137e-02 7.84850214e-02 7.84729347e-02 7.84608535e-02 7.84487780e-02 + 7.84367080e-02 7.84246436e-02 7.84125847e-02 7.84005314e-02 7.83884837e-02 + 7.83764415e-02 7.83644048e-02 7.83523737e-02 7.83403482e-02 7.83283282e-02 + 7.83163137e-02 7.83043047e-02 7.82923013e-02 7.82803034e-02 7.82683110e-02 + 7.82563241e-02 7.82443427e-02 7.82323668e-02 7.82203964e-02 7.82084315e-02 + 7.81964721e-02 7.81845182e-02 7.81725697e-02 7.81606268e-02 7.81486893e-02 + 7.81367572e-02 7.81248307e-02 7.81129096e-02 7.81009939e-02 7.80890837e-02 + 7.80771790e-02 7.80652797e-02 7.80533858e-02 7.80414974e-02 7.80296144e-02 + 7.80177368e-02 7.80058646e-02 7.79939979e-02 7.79821366e-02 7.79702807e-02 + 7.79584302e-02 7.79465851e-02 7.79347454e-02 7.79229111e-02 7.79110821e-02 + 7.78992586e-02 7.78874404e-02 7.78756277e-02 7.78638202e-02 7.78520182e-02 + 7.78402215e-02 7.78284302e-02 7.78166443e-02 7.78048637e-02 7.77930884e-02 + 7.77813185e-02 7.77695539e-02 7.77577947e-02 7.77460408e-02 7.77342922e-02 + 7.77225490e-02 7.77108111e-02 7.76990785e-02 7.76873512e-02 7.76756292e-02 + 7.76639125e-02 7.76522011e-02 7.76404950e-02 7.76287942e-02 7.76170987e-02 + 7.76054085e-02 7.75937236e-02 7.75820439e-02 7.75703695e-02 7.75587004e-02 + 7.75470365e-02 7.75353780e-02 7.75237246e-02 7.75120765e-02 7.75004337e-02 + 7.74887961e-02 7.74771637e-02 7.74655366e-02 7.74539147e-02 7.74422981e-02 + 7.74306867e-02 7.74190805e-02 7.74074795e-02 7.73958837e-02 7.73842931e-02 + 7.73727078e-02 7.73611276e-02 7.73495527e-02 7.73379829e-02 7.73264183e-02 + 7.73148589e-02 7.73033047e-02 7.72917557e-02 7.72802118e-02 7.72686732e-02 + 7.72571396e-02 7.72456113e-02 7.72340881e-02 7.72225701e-02 7.72110572e-02 + 7.71995494e-02 7.71880468e-02 7.71765494e-02 7.71650571e-02 7.71535699e-02 + 7.71420878e-02 7.71306109e-02 7.71191391e-02 7.71076724e-02 7.70962108e-02 + 7.70847543e-02 7.70733030e-02 7.70618567e-02 7.70504155e-02 7.70389795e-02 + 7.70275485e-02 7.70161226e-02 7.70047018e-02 7.69932860e-02 7.69818754e-02 + 7.69704698e-02 7.69590693e-02 7.69476738e-02 7.69362834e-02 7.69248981e-02 + 7.69135178e-02 7.69021426e-02 7.68907724e-02 7.68794073e-02 7.68680472e-02 + 7.68566921e-02 7.68453420e-02 7.68339970e-02 7.68226570e-02 7.68113221e-02 + 7.67999921e-02 7.67886672e-02 7.67773472e-02 7.67660323e-02 7.67547224e-02 + 7.67434174e-02 7.67321175e-02 7.67208226e-02 7.67095326e-02 7.66982476e-02 + 7.66869676e-02 7.66756926e-02 7.66644225e-02 7.66531574e-02 7.66418973e-02 + 7.66306422e-02 7.66193920e-02 7.66081467e-02 7.65969064e-02 7.65856711e-02 + 7.65744407e-02 7.65632152e-02 7.65519946e-02 7.65407790e-02 7.65295684e-02 + 7.65183626e-02 7.65071618e-02 7.64959659e-02 7.64847749e-02 7.64735888e-02 + 7.64624076e-02 7.64512313e-02 7.64400599e-02 7.64288935e-02 7.64177319e-02 + 7.64065752e-02 7.63954233e-02 7.63842764e-02 7.63731343e-02 7.63619972e-02 + 7.63508648e-02 7.63397374e-02 7.63286148e-02 7.63174971e-02 7.63063842e-02 + 7.62952762e-02 7.62841730e-02 7.62730747e-02 7.62619813e-02 7.62508926e-02 + 7.62398088e-02 7.62287298e-02 7.62176557e-02 7.62065864e-02 7.61955219e-02 + 7.61844622e-02 7.61734074e-02 7.61623573e-02 7.61513121e-02 7.61402716e-02 + 7.61292360e-02 7.61182052e-02 7.61071791e-02 7.60961579e-02 7.60851414e-02 + 7.60741297e-02 7.60631228e-02 7.60521207e-02 7.60411233e-02 7.60301307e-02 + 7.60191429e-02 7.60081598e-02 7.59971815e-02 7.59862080e-02 7.59752392e-02 + 7.59642751e-02 7.59533158e-02 7.59423613e-02 7.59314115e-02 7.59204664e-02 + 7.59095260e-02 7.58985904e-02 7.58876595e-02 7.58767333e-02 7.58658119e-02 + 7.58548951e-02 7.58439831e-02 7.58330758e-02 7.58221731e-02 7.58112752e-02 + 7.58003820e-02 7.57894935e-02 7.57786096e-02 7.57677305e-02 7.57568560e-02 + 7.57459862e-02 7.57351211e-02 7.57242607e-02 7.57134049e-02 7.57025538e-02 + 7.56917074e-02 7.56808656e-02 7.56700285e-02 7.56591961e-02 7.56483683e-02 + 7.56375451e-02 7.56267266e-02 7.56159127e-02 7.56051035e-02 7.55942989e-02 + 7.55834989e-02 7.55727035e-02 7.55619128e-02 7.55511267e-02 7.55403452e-02 + 7.55295684e-02 7.55187961e-02 7.55080285e-02 7.54972654e-02 7.54865070e-02 + 7.54757531e-02 7.54650039e-02 7.54542592e-02 7.54435192e-02 7.54327837e-02 + 7.54220528e-02 7.54113264e-02 7.54006047e-02 7.53898875e-02 7.53791749e-02 + 7.53684669e-02 7.53577634e-02 7.53470644e-02 7.53363701e-02 7.53256803e-02 + 7.53149950e-02 7.53043143e-02 7.52936381e-02 7.52829665e-02 7.52722994e-02 + 7.52616368e-02 7.52509787e-02 7.52403252e-02 7.52296762e-02 7.52190318e-02 + 7.52083918e-02 7.51977564e-02 7.51871255e-02 7.51764990e-02 7.51658771e-02 + 7.51552597e-02 7.51446468e-02 7.51340384e-02 7.51234344e-02 7.51128350e-02 + 7.51022400e-02 7.50916496e-02 7.50810636e-02 7.50704821e-02 7.50599050e-02 + 7.50493324e-02 7.50387643e-02 7.50282007e-02 7.50176415e-02 7.50070868e-02 + 7.49965365e-02 7.49859907e-02 7.49754493e-02 7.49649123e-02 7.49543799e-02 + 7.49438518e-02 7.49333282e-02 7.49228090e-02 7.49122942e-02 7.49017839e-02 + 7.48912780e-02 7.48807765e-02 7.48702794e-02 7.48597868e-02 7.48492985e-02 + 7.48388147e-02 7.48283352e-02 7.48178602e-02 7.48073895e-02 7.47969233e-02 + 7.47864614e-02 7.47760040e-02 7.47655509e-02 7.47551022e-02 7.47446579e-02 + 7.47342179e-02 7.47237824e-02 7.47133512e-02 7.47029243e-02 7.46925019e-02 + 7.46820838e-02 7.46716700e-02 7.46612606e-02 7.46508556e-02 7.46404549e-02 + 7.46300586e-02 7.46196666e-02 7.46092789e-02 7.45988956e-02 7.45885166e-02 + 7.45781419e-02 7.45677716e-02 7.45574056e-02 7.45470439e-02 7.45366865e-02 + 7.45263335e-02 7.45159847e-02 7.45056403e-02 7.44953002e-02 7.44849644e-02 + 7.44746329e-02 7.44643056e-02 7.44539827e-02 7.44436641e-02 7.44333497e-02 + 7.44230397e-02 7.44127339e-02 7.44024324e-02 7.43921352e-02 7.43818423e-02 + 7.43715536e-02 7.43612692e-02 7.43509890e-02 7.43407132e-02 7.43304416e-02 + 7.43201742e-02 7.43099111e-02 7.42996522e-02 7.42893976e-02 7.42791473e-02 + 7.42689011e-02 7.42586593e-02 7.42484216e-02 7.42381882e-02 7.42279590e-02 + 7.42177341e-02 7.42075133e-02 7.41972968e-02 7.41870845e-02 7.41768765e-02 + 7.41666726e-02 7.41564729e-02 7.41462775e-02 7.41360863e-02 7.41258992e-02 + 7.41157164e-02 7.41055377e-02 7.40953633e-02 7.40851930e-02 7.40750269e-02 + 7.40648650e-02 7.40547073e-02 7.40445538e-02 7.40344044e-02 7.40242592e-02 + 7.40141182e-02 7.40039814e-02 7.39938487e-02 7.39837202e-02 7.39735958e-02 + 7.39634756e-02 7.39533595e-02 7.39432476e-02 7.39331398e-02 7.39230362e-02 + 7.39129367e-02 7.39028414e-02 7.38927502e-02 7.38826631e-02 7.38725802e-02 + 7.38625014e-02 7.38524267e-02 7.38423561e-02 7.38322896e-02 7.38222273e-02 + 7.38121691e-02 7.38021150e-02 7.37920650e-02 7.37820191e-02 7.37719773e-02 + 7.37619396e-02 7.37519060e-02 7.37418765e-02 7.37318510e-02 7.37218297e-02 + 7.37118125e-02 7.37017993e-02 7.36917902e-02 7.36817852e-02 7.36717843e-02 + 7.36617874e-02 7.36517946e-02 7.36418059e-02 7.36318212e-02 7.36218406e-02 + 7.36118641e-02 7.36018916e-02 7.35919231e-02 7.35819587e-02 7.35719984e-02 + 7.35620421e-02 7.35520898e-02 7.35421416e-02 7.35321974e-02 7.35222572e-02 + 7.35123211e-02 7.35023890e-02 7.34924610e-02 7.34825369e-02 7.34726169e-02 + 7.34627009e-02 7.34527889e-02 7.34428809e-02 7.34329769e-02 7.34230769e-02 + 7.34131809e-02 7.34032890e-02 7.33934010e-02 7.33835170e-02 7.33736370e-02 + 7.33637610e-02 7.33538890e-02 7.33440210e-02 7.33341569e-02 7.33242969e-02 + 7.33144408e-02 7.33045886e-02 7.32947405e-02 7.32848963e-02 7.32750561e-02 + 7.32652199e-02 7.32553876e-02 7.32455592e-02 7.32357348e-02 7.32259144e-02 + 7.32160979e-02 7.32062854e-02 7.31964768e-02 7.31866722e-02 7.31768715e-02 + 7.31670747e-02 7.31572819e-02 7.31474930e-02 7.31377080e-02 7.31279269e-02 + 7.31181498e-02 7.31083766e-02 7.30986073e-02 7.30888419e-02 7.30790805e-02 + 7.30693229e-02 7.30595693e-02 7.30498195e-02 7.30400737e-02 7.30303318e-02 + 7.30205937e-02 7.30108596e-02 7.30011293e-02 7.29914030e-02 7.29816805e-02 + 7.29719619e-02 7.29622472e-02 7.29525364e-02 7.29428294e-02 7.29331263e-02 + 7.29234271e-02 7.29137318e-02 7.29040403e-02 7.28943527e-02 7.28846689e-02 + 7.28749890e-02 7.28653130e-02 7.28556408e-02 7.28459725e-02 7.28363080e-02 + 7.28266473e-02 7.28169905e-02 7.28073376e-02 7.27976885e-02 7.27880432e-02 + 7.27784017e-02 7.27687641e-02 7.27591303e-02 7.27495003e-02 7.27398742e-02 + 7.27302519e-02 7.27206334e-02 7.27110187e-02 7.27014078e-02 7.26918007e-02 + 7.26821975e-02 7.26725980e-02 7.26630023e-02 7.26534105e-02 7.26438224e-02 + 7.26342382e-02 7.26246577e-02 7.26150810e-02 7.26055081e-02 7.25959390e-02 + 7.25863737e-02 7.25768121e-02 7.25672544e-02 7.25577004e-02 7.25481502e-02 + 7.25386037e-02 7.25290610e-02 7.25195221e-02 7.25099870e-02 7.25004556e-02 + 7.24909279e-02 7.24814040e-02 7.24718839e-02 7.24623675e-02 7.24528549e-02 + 7.24433460e-02 7.24338409e-02 7.24243395e-02 7.24148418e-02 7.24053479e-02 + 7.23958577e-02 7.23863712e-02 7.23768885e-02 7.23674095e-02 7.23579342e-02 + 7.23484626e-02 7.23389948e-02 7.23295307e-02 7.23200702e-02 7.23106135e-02 + 7.23011605e-02 7.22917112e-02 7.22822656e-02 7.22728238e-02 7.22633856e-02 + 7.22539511e-02 7.22445203e-02 7.22350932e-02 7.22256698e-02 7.22162500e-02 + 7.22068340e-02 7.21974216e-02 7.21880130e-02 7.21786080e-02 7.21692066e-02 + 7.21598090e-02 7.21504150e-02 7.21410247e-02 7.21316380e-02 7.21222550e-02 + 7.21128757e-02 7.21035000e-02 7.20941280e-02 7.20847596e-02 7.20753949e-02 + 7.20660339e-02 7.20566765e-02 7.20473227e-02 7.20379726e-02 7.20286261e-02 + 7.20192832e-02 7.20099440e-02 7.20006084e-02 7.19912765e-02 7.19819481e-02 + 7.19726234e-02 7.19633024e-02 7.19539849e-02 7.19446711e-02 7.19353608e-02 + 7.19260542e-02 7.19167512e-02 7.19074518e-02 7.18981560e-02 7.18888639e-02 + 7.18795753e-02 7.18702903e-02 7.18610089e-02 7.18517311e-02 7.18424569e-02 + 7.18331863e-02 7.18239193e-02 7.18146559e-02 7.18053960e-02 7.17961398e-02 + 7.17868871e-02 7.17776380e-02 7.17683924e-02 7.17591505e-02 7.17499121e-02 + 7.17406772e-02 7.17314460e-02 7.17222183e-02 7.17129941e-02 7.17037735e-02 + 7.16945565e-02 7.16853430e-02 7.16761331e-02 7.16669267e-02 7.16577239e-02 + 7.16485246e-02 7.16393289e-02 7.16301367e-02 7.16209480e-02 7.16117629e-02 + 7.16025813e-02 7.15934032e-02 7.15842287e-02 7.15750577e-02 7.15658902e-02 + 7.15567262e-02 7.15475658e-02 7.15384089e-02 7.15292555e-02 7.15201056e-02 + 7.15109592e-02 7.15018163e-02 7.14926769e-02 7.14835410e-02 7.14744087e-02 + 7.14652798e-02 7.14561544e-02 7.14470325e-02 7.14379142e-02 7.14287993e-02 + 7.14196878e-02 7.14105799e-02 7.14014755e-02 7.13923745e-02 7.13832770e-02 + 7.13741830e-02 7.13650925e-02 7.13560055e-02 7.13469219e-02 7.13378418e-02 + 7.13287651e-02 7.13196919e-02 7.13106222e-02 7.13015559e-02 7.12924931e-02 + 7.12834338e-02 7.12743779e-02 7.12653254e-02 7.12562764e-02 7.12472309e-02 + 7.12381888e-02 7.12291501e-02 7.12201149e-02 7.12110831e-02 7.12020547e-02 + 7.11930298e-02 7.11840083e-02 7.11749902e-02 7.11659756e-02 7.11569644e-02 + 7.11479566e-02 7.11389522e-02 7.11299512e-02 7.11209537e-02 7.11119596e-02 + 7.11029689e-02 7.10939816e-02 7.10849977e-02 7.10760172e-02 7.10670401e-02 + 7.10580664e-02 7.10490961e-02 7.10401292e-02 7.10311657e-02 7.10222056e-02 + 7.10132489e-02 7.10042956e-02 7.09953456e-02 7.09863990e-02 7.09774559e-02 + 7.09685161e-02 7.09595796e-02 7.09506466e-02 7.09417169e-02 7.09327906e-02 + 7.09238677e-02 7.09149481e-02 7.09060319e-02 7.08971191e-02 7.08882096e-02 + 7.08793035e-02 7.08704007e-02 7.08615013e-02 7.08526052e-02 7.08437125e-02 + 7.08348231e-02 7.08259371e-02 7.08170544e-02 7.08081751e-02 7.07992991e-02 + 7.07904264e-02 7.07815571e-02 7.07726911e-02 7.07638285e-02 7.07549691e-02 + 7.07461131e-02 7.07372604e-02 7.07284111e-02 7.07195650e-02 7.07107223e-02 + 7.07018829e-02 7.06930468e-02 7.06842141e-02 7.06753846e-02 7.06665584e-02 + 7.06577356e-02 7.06489160e-02 7.06400998e-02 7.06312868e-02 7.06224772e-02 + 7.06136708e-02 7.06048678e-02 7.05960680e-02 7.05872715e-02 7.05784783e-02 + 7.05696884e-02 7.05609018e-02 7.05521184e-02 7.05433384e-02 7.05345616e-02 + 1.00000000e+00 9.75894263e-01 9.53451752e-01 9.32489601e-01 9.12851907e-01 + 8.94404826e-01 8.77032714e-01 8.60635068e-01 8.45124065e-01 8.30422576e-01 + 8.16462554e-01 8.03183696e-01 7.90532350e-01 7.78460602e-01 7.66925506e-01 + 7.55888443e-01 7.45314577e-01 7.35172390e-01 7.25433287e-01 7.16071258e-01 + 7.07062580e-01 6.98385572e-01 6.90020370e-01 6.81948734e-01 6.74153887e-01 + 6.66620364e-01 6.59333880e-01 6.52281224e-01 6.45450150e-01 6.38829295e-01 + 6.32408091e-01 6.26176704e-01 6.20125961e-01 6.14247300e-01 6.08532716e-01 + 6.02974715e-01 5.97566276e-01 5.92300808e-01 5.87172122e-01 5.82174396e-01 + 5.77302151e-01 5.72550221e-01 5.67913735e-01 5.63388093e-01 5.58968948e-01 + 5.54652188e-01 5.50433918e-01 5.46310451e-01 5.42278287e-01 5.38334105e-01 + 5.34474753e-01 5.30697232e-01 5.26998691e-01 5.23376415e-01 5.19827818e-01 + 5.16350438e-01 5.12941922e-01 5.09600027e-01 5.06322612e-01 5.03107629e-01 + 4.99953120e-01 4.96857213e-01 4.93818117e-01 4.90834114e-01 4.87903560e-01 + 4.85024878e-01 4.82196556e-01 4.79417141e-01 4.76685242e-01 4.73999519e-01 + 4.71358685e-01 4.68761505e-01 4.66206788e-01 4.63693390e-01 4.61220209e-01 + 4.58786184e-01 4.56390292e-01 4.54031548e-01 4.51709002e-01 4.49421737e-01 + 4.47168870e-01 4.44949545e-01 4.42762941e-01 4.40608259e-01 4.38484731e-01 + 4.36391613e-01 4.34328187e-01 4.32293756e-01 4.30287649e-01 4.28309213e-01 + 4.26357819e-01 4.24432857e-01 4.22533734e-01 4.20659877e-01 4.18810733e-01 + 4.16985761e-01 4.15184441e-01 4.13406264e-01 4.11650741e-01 4.09917394e-01 + 4.08205761e-01 4.06515390e-01 4.04845847e-01 4.03196706e-01 4.01567556e-01 + 3.99957996e-01 3.98367636e-01 3.96796098e-01 3.95243014e-01 3.93708024e-01 + 3.92190780e-01 3.90690944e-01 3.89208184e-01 3.87742180e-01 3.86292617e-01 + 3.84859191e-01 3.83441605e-01 3.82039569e-01 3.80652800e-01 3.79281024e-01 + 3.77923973e-01 3.76581385e-01 3.75253005e-01 3.73938583e-01 3.72637878e-01 + 3.71350652e-01 3.70076675e-01 3.68815719e-01 3.67567566e-01 3.66332000e-01 + 3.65108810e-01 3.63897792e-01 3.62698745e-01 3.61511473e-01 3.60335785e-01 + 3.59171493e-01 3.58018415e-01 3.56876371e-01 3.55745187e-01 3.54624691e-01 + 3.53514717e-01 3.52415101e-01 3.51325683e-01 3.50246306e-01 3.49176816e-01 + 3.48117064e-01 3.47066903e-01 3.46026189e-01 3.44994782e-01 3.43972542e-01 + 3.42959337e-01 3.41955032e-01 3.40959498e-01 3.39972609e-01 3.38994241e-01 + 3.38024270e-01 3.37062579e-01 3.36109049e-01 3.35163566e-01 3.34226018e-01 + 3.33296293e-01 3.32374284e-01 3.31459885e-01 3.30552992e-01 3.29653502e-01 + 3.28761315e-01 3.27876333e-01 3.26998460e-01 3.26127600e-01 3.25263662e-01 + 3.24406553e-01 3.23556184e-01 3.22712468e-01 3.21875318e-01 3.21044649e-01 + 3.20220378e-01 3.19402424e-01 3.18590706e-01 3.17785145e-01 3.16985665e-01 + 3.16192188e-01 3.15404639e-01 3.14622947e-01 3.13847038e-01 3.13076841e-01 + 3.12312287e-01 3.11553306e-01 3.10799833e-01 3.10051800e-01 3.09309142e-01 + 3.08571795e-01 3.07839697e-01 3.07112784e-01 3.06390997e-01 3.05674275e-01 + 3.04962560e-01 3.04255793e-01 3.03553917e-01 3.02856876e-01 3.02164615e-01 + 3.01477079e-01 3.00794216e-01 3.00115971e-01 2.99442294e-01 2.98773134e-01 + 2.98108439e-01 2.97448161e-01 2.96792252e-01 2.96140662e-01 2.95493345e-01 + 2.94850254e-01 2.94211344e-01 2.93576570e-01 2.92945886e-01 2.92319250e-01 + 2.91696618e-01 2.91077947e-01 2.90463197e-01 2.89852325e-01 2.89245291e-01 + 2.88642055e-01 2.88042577e-01 2.87446820e-01 2.86854743e-01 2.86266311e-01 + 2.85681484e-01 2.85100228e-01 2.84522505e-01 2.83948280e-01 2.83377517e-01 + 2.82810183e-01 2.82246243e-01 2.81685662e-01 2.81128409e-01 2.80574450e-01 + 2.80023753e-01 2.79476286e-01 2.78932017e-01 2.78390916e-01 2.77852951e-01 + 2.77318094e-01 2.76786313e-01 2.76257580e-01 2.75731865e-01 2.75209140e-01 + 2.74689377e-01 2.74172548e-01 2.73658625e-01 2.73147581e-01 2.72639389e-01 + 2.72134024e-01 2.71631458e-01 2.71131667e-01 2.70634624e-01 2.70140305e-01 + 2.69648684e-01 2.69159738e-01 2.68673442e-01 2.68189772e-01 2.67708706e-01 + 2.67230218e-01 2.66754287e-01 2.66280890e-01 2.65810005e-01 2.65341608e-01 + 2.64875680e-01 2.64412197e-01 2.63951138e-01 2.63492483e-01 2.63036211e-01 + 2.62582301e-01 2.62130732e-01 2.61681486e-01 2.61234541e-01 2.60789879e-01 + 2.60347479e-01 2.59907323e-01 2.59469393e-01 2.59033668e-01 2.58600131e-01 + 2.58168764e-01 2.57739549e-01 2.57312467e-01 2.56887501e-01 2.56464633e-01 + 2.56043847e-01 2.55625126e-01 2.55208452e-01 2.54793809e-01 2.54381180e-01 + 2.53970550e-01 2.53561902e-01 2.53155220e-01 2.52750489e-01 2.52347693e-01 + 2.51946816e-01 2.51547844e-01 2.51150761e-01 2.50755553e-01 2.50362204e-01 + 2.49970701e-01 2.49581029e-01 2.49193173e-01 2.48807120e-01 2.48422856e-01 + 2.48040367e-01 2.47659639e-01 2.47280658e-01 2.46903413e-01 2.46527888e-01 + 2.46154072e-01 2.45781951e-01 2.45411513e-01 2.45042745e-01 2.44675634e-01 + 2.44310168e-01 2.43946335e-01 2.43584122e-01 2.43223518e-01 2.42864511e-01 + 2.42507089e-01 2.42151241e-01 2.41796954e-01 2.41444218e-01 2.41093021e-01 + 2.40743352e-01 2.40395201e-01 2.40048555e-01 2.39703404e-01 2.39359739e-01 + 2.39017547e-01 2.38676818e-01 2.38337542e-01 2.37999710e-01 2.37663309e-01 + 2.37328332e-01 2.36994766e-01 2.36662603e-01 2.36331833e-01 2.36002446e-01 + 2.35674432e-01 2.35347783e-01 2.35022487e-01 2.34698537e-01 2.34375923e-01 + 2.34054635e-01 2.33734666e-01 2.33416004e-01 2.33098643e-01 2.32782573e-01 + 2.32467784e-01 2.32154270e-01 2.31842020e-01 2.31531028e-01 2.31221283e-01 + 2.30912778e-01 2.30605504e-01 2.30299454e-01 2.29994620e-01 2.29690992e-01 + 2.29388564e-01 2.29087328e-01 2.28787275e-01 2.28488398e-01 2.28190689e-01 + 2.27894141e-01 2.27598746e-01 2.27304497e-01 2.27011386e-01 2.26719406e-01 + 2.26428550e-01 2.26138810e-01 2.25850180e-01 2.25562652e-01 2.25276219e-01 + 2.24990875e-01 2.24706613e-01 2.24423425e-01 2.24141305e-01 2.23860246e-01 + 2.23580243e-01 2.23301287e-01 2.23023372e-01 2.22746493e-01 2.22470643e-01 + 2.22195814e-01 2.21922002e-01 2.21649200e-01 2.21377401e-01 2.21106599e-01 + 2.20836789e-01 2.20567964e-01 2.20300119e-01 2.20033247e-01 2.19767342e-01 + 2.19502400e-01 2.19238413e-01 2.18975376e-01 2.18713284e-01 2.18452130e-01 + 2.18191910e-01 2.17932618e-01 2.17674247e-01 2.17416794e-01 2.17160252e-01 + 2.16904616e-01 2.16649880e-01 2.16396040e-01 2.16143090e-01 2.15891025e-01 + 2.15639840e-01 2.15389530e-01 2.15140089e-01 2.14891513e-01 2.14643796e-01 + 2.14396935e-01 2.14150923e-01 2.13905756e-01 2.13661429e-01 2.13417937e-01 + 2.13175276e-01 2.12933441e-01 2.12692427e-01 2.12452229e-01 2.12212843e-01 + 2.11974265e-01 2.11736490e-01 2.11499513e-01 2.11263330e-01 2.11027936e-01 + 2.10793328e-01 2.10559500e-01 2.10326449e-01 2.10094169e-01 2.09862658e-01 + 2.09631910e-01 2.09401922e-01 2.09172689e-01 2.08944208e-01 2.08716473e-01 + 2.08489481e-01 2.08263229e-01 2.08037711e-01 2.07812924e-01 2.07588865e-01 + 2.07365528e-01 2.07142911e-01 2.06921010e-01 2.06699820e-01 2.06479337e-01 + 2.06259559e-01 2.06040481e-01 2.05822100e-01 2.05604412e-01 2.05387413e-01 + 2.05171099e-01 2.04955468e-01 2.04740515e-01 2.04526237e-01 2.04312630e-01 + 2.04099691e-01 2.03887417e-01 2.03675803e-01 2.03464847e-01 2.03254545e-01 + 2.03044894e-01 2.02835891e-01 2.02627531e-01 2.02419812e-01 2.02212731e-01 + 2.02006284e-01 2.01800468e-01 2.01595280e-01 2.01390716e-01 2.01186774e-01 + 2.00983451e-01 2.00780742e-01 2.00578646e-01 2.00377158e-01 2.00176277e-01 + 1.99975998e-01 1.99776320e-01 1.99577238e-01 1.99378751e-01 1.99180854e-01 + 1.98983546e-01 1.98786822e-01 1.98590681e-01 1.98395120e-01 1.98200135e-01 + 1.98005724e-01 1.97811884e-01 1.97618612e-01 1.97425905e-01 1.97233761e-01 + 1.97042177e-01 1.96851151e-01 1.96660678e-01 1.96470758e-01 1.96281387e-01 + 1.96092562e-01 1.95904281e-01 1.95716541e-01 1.95529341e-01 1.95342676e-01 + 1.95156545e-01 1.94970945e-01 1.94785873e-01 1.94601328e-01 1.94417306e-01 + 1.94233805e-01 1.94050823e-01 1.93868357e-01 1.93686404e-01 1.93504963e-01 + 1.93324031e-01 1.93143606e-01 1.92963685e-01 1.92784265e-01 1.92605345e-01 + 1.92426923e-01 1.92248995e-01 1.92071560e-01 1.91894616e-01 1.91718159e-01 + 1.91542189e-01 1.91366702e-01 1.91191696e-01 1.91017170e-01 1.90843121e-01 + 1.90669546e-01 1.90496445e-01 1.90323814e-01 1.90151652e-01 1.89979956e-01 + 1.89808724e-01 1.89637954e-01 1.89467644e-01 1.89297793e-01 1.89128397e-01 + 1.88959456e-01 1.88790966e-01 1.88622926e-01 1.88455335e-01 1.88288189e-01 + 1.88121487e-01 1.87955227e-01 1.87789407e-01 1.87624025e-01 1.87459079e-01 + 1.87294568e-01 1.87130489e-01 1.86966840e-01 1.86803620e-01 1.86640827e-01 + 1.86478458e-01 1.86316513e-01 1.86154989e-01 1.85993884e-01 1.85833197e-01 + 1.85672925e-01 1.85513068e-01 1.85353622e-01 1.85194587e-01 1.85035961e-01 + 1.84877742e-01 1.84719927e-01 1.84562517e-01 1.84405508e-01 1.84248899e-01 + 1.84092688e-01 1.83936874e-01 1.83781455e-01 1.83626429e-01 1.83471795e-01 + 1.83317551e-01 1.83163695e-01 1.83010226e-01 1.82857142e-01 1.82704442e-01 + 1.82552123e-01 1.82400185e-01 1.82248626e-01 1.82097444e-01 1.81946637e-01 + 1.81796204e-01 1.81646144e-01 1.81496455e-01 1.81347136e-01 1.81198184e-01 + 1.81049599e-01 1.80901378e-01 1.80753522e-01 1.80606027e-01 1.80458892e-01 + 1.80312117e-01 1.80165699e-01 1.80019637e-01 1.79873930e-01 1.79728576e-01 + 1.79583574e-01 1.79438922e-01 1.79294620e-01 1.79150665e-01 1.79007056e-01 + 1.78863792e-01 1.78720871e-01 1.78578292e-01 1.78436054e-01 1.78294156e-01 + 1.78152595e-01 1.78011371e-01 1.77870482e-01 1.77729928e-01 1.77589706e-01 + 1.77449815e-01 1.77310255e-01 1.77171023e-01 1.77032119e-01 1.76893540e-01 + 1.76755287e-01 1.76617358e-01 1.76479751e-01 1.76342465e-01 1.76205499e-01 + 1.76068851e-01 1.75932521e-01 1.75796507e-01 1.75660808e-01 1.75525423e-01 + 1.75390351e-01 1.75255589e-01 1.75121138e-01 1.74986996e-01 1.74853162e-01 + 1.74719634e-01 1.74586412e-01 1.74453494e-01 1.74320879e-01 1.74188566e-01 + 1.74056554e-01 1.73924842e-01 1.73793428e-01 1.73662312e-01 1.73531492e-01 + 1.73400967e-01 1.73270736e-01 1.73140798e-01 1.73011152e-01 1.72881797e-01 + 1.72752732e-01 1.72623955e-01 1.72495466e-01 1.72367263e-01 1.72239346e-01 + 1.72111713e-01 1.71984363e-01 1.71857296e-01 1.71730510e-01 1.71604004e-01 + 1.71477777e-01 1.71351828e-01 1.71226157e-01 1.71100761e-01 1.70975641e-01 + 1.70850795e-01 1.70726222e-01 1.70601921e-01 1.70477891e-01 1.70354131e-01 + 1.70230640e-01 1.70107418e-01 1.69984462e-01 1.69861773e-01 1.69739349e-01 + 1.69617190e-01 1.69495294e-01 1.69373660e-01 1.69252288e-01 1.69131176e-01 + 1.69010324e-01 1.68889731e-01 1.68769395e-01 1.68649317e-01 1.68529494e-01 + 1.68409926e-01 1.68290613e-01 1.68171552e-01 1.68052744e-01 1.67934188e-01 + 1.67815882e-01 1.67697825e-01 1.67580018e-01 1.67462458e-01 1.67345146e-01 + 1.67228079e-01 1.67111258e-01 1.66994682e-01 1.66878349e-01 1.66762259e-01 + 1.66646411e-01 1.66530804e-01 1.66415437e-01 1.66300309e-01 1.66185421e-01 + 1.66070770e-01 1.65956356e-01 1.65842178e-01 1.65728235e-01 1.65614527e-01 + 1.65501053e-01 1.65387812e-01 1.65274803e-01 1.65162025e-01 1.65049477e-01 + 1.64937160e-01 1.64825071e-01 1.64713211e-01 1.64601578e-01 1.64490172e-01 + 1.64378991e-01 1.64268036e-01 1.64157305e-01 1.64046798e-01 1.63936514e-01 + 1.63826452e-01 1.63716611e-01 1.63606991e-01 1.63497591e-01 1.63388409e-01 + 1.63279447e-01 1.63170702e-01 1.63062174e-01 1.62953862e-01 1.62845766e-01 + 1.62737885e-01 1.62630217e-01 1.62522764e-01 1.62415523e-01 1.62308493e-01 + 1.62201676e-01 1.62095069e-01 1.61988671e-01 1.61882483e-01 1.61776504e-01 + 1.61670732e-01 1.61565168e-01 1.61459810e-01 1.61354658e-01 1.61249711e-01 + 1.61144969e-01 1.61040431e-01 1.60936095e-01 1.60831963e-01 1.60728032e-01 + 1.60624302e-01 1.60520773e-01 1.60417444e-01 1.60314314e-01 1.60211383e-01 + 1.60108650e-01 1.60006114e-01 1.59903775e-01 1.59801632e-01 1.59699684e-01 + 1.59597932e-01 1.59496373e-01 1.59395009e-01 1.59293837e-01 1.59192858e-01 + 1.59092070e-01 1.58991474e-01 1.58891068e-01 1.58790852e-01 1.58690826e-01 + 1.58590988e-01 1.58491339e-01 1.58391877e-01 1.58292602e-01 1.58193514e-01 + 1.58094612e-01 1.57995894e-01 1.57897362e-01 1.57799013e-01 1.57700849e-01 + 1.57602867e-01 1.57505067e-01 1.57407450e-01 1.57310013e-01 1.57212758e-01 + 1.57115682e-01 1.57018786e-01 1.56922069e-01 1.56825531e-01 1.56729171e-01 + 1.56632988e-01 1.56536982e-01 1.56441152e-01 1.56345498e-01 1.56250019e-01 + 1.56154715e-01 1.56059585e-01 1.55964629e-01 1.55869846e-01 1.55775235e-01 + 1.55680797e-01 1.55586530e-01 1.55492434e-01 1.55398509e-01 1.55304754e-01 + 1.55211168e-01 1.55117751e-01 1.55024502e-01 1.54931422e-01 1.54838509e-01 + 1.54745763e-01 1.54653183e-01 1.54560770e-01 1.54468522e-01 1.54376439e-01 + 1.54284520e-01 1.54192765e-01 1.54101174e-01 1.54009746e-01 1.53918481e-01 + 1.53827377e-01 1.53736435e-01 1.53645654e-01 1.53555034e-01 1.53464574e-01 + 1.53374274e-01 1.53284132e-01 1.53194150e-01 1.53104326e-01 1.53014660e-01 + 1.52925151e-01 1.52835798e-01 1.52746603e-01 1.52657563e-01 1.52568679e-01 + 1.52479950e-01 1.52391376e-01 1.52302955e-01 1.52214689e-01 1.52126576e-01 + 1.52038615e-01 1.51950807e-01 1.51863151e-01 1.51775647e-01 1.51688293e-01 + 1.51601091e-01 1.51514038e-01 1.51427135e-01 1.51340382e-01 1.51253778e-01 + 1.51167322e-01 1.51081014e-01 1.50994854e-01 1.50908841e-01 1.50822975e-01 + 1.50737255e-01 1.50651681e-01 1.50566253e-01 1.50480970e-01 1.50395832e-01 + 1.50310838e-01 1.50225988e-01 1.50141281e-01 1.50056718e-01 1.49972298e-01 + 1.49888019e-01 1.49803883e-01 1.49719888e-01 1.49636035e-01 1.49552322e-01 + 1.49468749e-01 1.49385316e-01 1.49302023e-01 1.49218869e-01 1.49135854e-01 + 1.49052977e-01 1.48970239e-01 1.48887638e-01 1.48805174e-01 1.48722847e-01 + 1.48640656e-01 1.48558602e-01 1.48476683e-01 1.48394900e-01 1.48313252e-01 + 1.48231738e-01 1.48150359e-01 1.48069113e-01 1.47988001e-01 1.47907022e-01 + 1.47826176e-01 1.47745463e-01 1.47664881e-01 1.47584431e-01 1.47504113e-01 + 1.47423925e-01 1.47343868e-01 1.47263942e-01 1.47184145e-01 1.47104478e-01 + 1.47024940e-01 1.46945531e-01 1.46866251e-01 1.46787099e-01 1.46708074e-01 + 1.46629177e-01 1.46550407e-01 1.46471764e-01 1.46393248e-01 1.46314857e-01 + 1.46236593e-01 1.46158454e-01 1.46080440e-01 1.46002551e-01 1.45924786e-01 + 1.45847145e-01 1.45769628e-01 1.45692235e-01 1.45614965e-01 1.45537817e-01 + 1.45460792e-01 1.45383890e-01 1.45307109e-01 1.45230449e-01 1.45153911e-01 + 1.45077494e-01 1.45001197e-01 1.44925021e-01 1.44848964e-01 1.44773027e-01 + 1.44697209e-01 1.44621511e-01 1.44545931e-01 1.44470469e-01 1.44395126e-01 + 1.44319900e-01 1.44244791e-01 1.44169800e-01 1.44094926e-01 1.44020168e-01 + 1.43945527e-01 1.43871001e-01 1.43796591e-01 1.43722296e-01 1.43648117e-01 + 1.43574052e-01 1.43500101e-01 1.43426265e-01 1.43352542e-01 1.43278934e-01 + 1.43205438e-01 1.43132055e-01 1.43058785e-01 1.42985628e-01 1.42912583e-01 + 1.42839649e-01 1.42766827e-01 1.42694116e-01 1.42621516e-01 1.42549027e-01 + 1.42476649e-01 1.42404380e-01 1.42332222e-01 1.42260172e-01 1.42188233e-01 + 1.42116402e-01 1.42044680e-01 1.41973066e-01 1.41901561e-01 1.41830164e-01 + 1.41758874e-01 1.41687692e-01 1.41616617e-01 1.41545648e-01 1.41474786e-01 + 1.41404031e-01 1.41333382e-01 1.41262838e-01 1.41192400e-01 1.41122067e-01 + 1.41051839e-01 1.40981716e-01 1.40911698e-01 1.40841783e-01 1.40771973e-01 + 1.40702266e-01 1.40632663e-01 1.40563163e-01 1.40493766e-01 1.40424471e-01 + 1.40355279e-01 1.40286189e-01 1.40217202e-01 1.40148315e-01 1.40079531e-01 + 1.40010847e-01 1.39942264e-01 1.39873782e-01 1.39805401e-01 1.39737119e-01 + 1.39668938e-01 1.39600856e-01 1.39532874e-01 1.39464991e-01 1.39397207e-01 + 1.39329522e-01 1.39261935e-01 1.39194446e-01 1.39127056e-01 1.39059763e-01 + 1.38992568e-01 1.38925470e-01 1.38858469e-01 1.38791565e-01 1.38724758e-01 + 1.38658047e-01 1.38591432e-01 1.38524913e-01 1.38458490e-01 1.38392162e-01 + 1.38325930e-01 1.38259792e-01 1.38193750e-01 1.38127801e-01 1.38061947e-01 + 1.37996188e-01 1.37930522e-01 1.37864950e-01 1.37799471e-01 1.37734085e-01 + 1.37668793e-01 1.37603593e-01 1.37538485e-01 1.37473471e-01 1.37408548e-01 + 1.37343717e-01 1.37278977e-01 1.37214330e-01 1.37149773e-01 1.37085308e-01 + 1.37020933e-01 1.36956649e-01 1.36892455e-01 1.36828351e-01 1.36764338e-01 + 1.36700414e-01 1.36636580e-01 1.36572835e-01 1.36509179e-01 1.36445612e-01 + 1.36382134e-01 1.36318745e-01 1.36255443e-01 1.36192230e-01 1.36129105e-01 + 1.36066067e-01 1.36003117e-01 1.35940254e-01 1.35877478e-01 1.35814789e-01 + 1.35752187e-01 1.35689672e-01 1.35627242e-01 1.35564899e-01 1.35502641e-01 + 1.35440470e-01 1.35378384e-01 1.35316383e-01 1.35254467e-01 1.35192636e-01 + 1.35130890e-01 1.35069228e-01 1.35007651e-01 1.34946158e-01 1.34884748e-01 + 1.34823423e-01 1.34762181e-01 1.34701022e-01 1.34639947e-01 1.34578955e-01 + 1.34518045e-01 1.34457218e-01 1.34396474e-01 1.34335812e-01 1.34275232e-01 + 1.34214733e-01 1.34154317e-01 1.34093982e-01 1.34033728e-01 1.33973556e-01 + 1.33913464e-01 1.33853453e-01 1.33793523e-01 1.33733673e-01 1.33673904e-01 + 1.33614214e-01 1.33554605e-01 1.33495075e-01 1.33435625e-01 1.33376254e-01 + 1.33316962e-01 1.33257749e-01 1.33198615e-01 1.33139560e-01 1.33080583e-01 + 1.33021685e-01 1.32962864e-01 1.32904122e-01 1.32845457e-01 1.32786870e-01 + 1.32728361e-01 1.32669928e-01 1.32611573e-01 1.32553295e-01 1.32495093e-01 + 1.32436968e-01 1.32378920e-01 1.32320948e-01 1.32263052e-01 1.32205232e-01 + 1.32147487e-01 1.32089818e-01 1.32032225e-01 1.31974707e-01 1.31917264e-01 + 1.31859896e-01 1.31802603e-01 1.31745384e-01 1.31688240e-01 1.31631170e-01 + 1.31574174e-01 1.31517252e-01 1.31460404e-01 1.31403630e-01 1.31346929e-01 + 1.31290301e-01 1.31233747e-01 1.31177266e-01 1.31120857e-01 1.31064522e-01 + 1.31008258e-01 1.30952068e-01 1.30895949e-01 1.30839903e-01 1.30783928e-01 + 1.30728025e-01 1.30672194e-01 1.30616435e-01 1.30560746e-01 1.30505129e-01 + 1.30449583e-01 1.30394108e-01 1.30338703e-01 1.30283369e-01 1.30228105e-01 + 1.30172912e-01 1.30117789e-01 1.30062736e-01 1.30007752e-01 1.29952839e-01 + 1.29897994e-01 1.29843219e-01 1.29788514e-01 1.29733877e-01 1.29679310e-01 + 1.29624811e-01 1.29570381e-01 1.29516019e-01 1.29461726e-01 1.29407501e-01 + 1.29353344e-01 1.29299255e-01 1.29245234e-01 1.29191280e-01 1.29137394e-01 + 1.29083575e-01 1.29029824e-01 1.28976140e-01 1.28922522e-01 1.28868972e-01 + 1.28815488e-01 1.28762070e-01 1.28708719e-01 1.28655435e-01 1.28602216e-01 + 1.28549063e-01 1.28495977e-01 1.28442955e-01 1.28390000e-01 1.28337110e-01 + 1.28284285e-01 1.28231526e-01 1.28178831e-01 1.28126202e-01 1.28073637e-01 + 1.28021137e-01 1.27968701e-01 1.27916330e-01 1.27864023e-01 1.27811780e-01 + 1.27759601e-01 1.27707486e-01 1.27655434e-01 1.27603447e-01 1.27551522e-01 + 1.27499661e-01 1.27447864e-01 1.27396129e-01 1.27344457e-01 1.27292848e-01 + 1.27241302e-01 1.27189818e-01 1.27138397e-01 1.27087038e-01 1.27035742e-01 + 1.26984507e-01 1.26933334e-01 1.26882223e-01 1.26831174e-01 1.26780187e-01 + 1.26729260e-01 1.26678396e-01 1.26627592e-01 1.26576849e-01 1.26526168e-01 + 1.26475547e-01 1.26424987e-01 1.26374487e-01 1.26324048e-01 1.26273670e-01 + 1.26223351e-01 1.26173093e-01 1.26122894e-01 1.26072756e-01 1.26022677e-01 + 1.25972658e-01 1.25922698e-01 1.25872798e-01 1.25822957e-01 1.25773176e-01 + 1.25723453e-01 1.25673789e-01 1.25624184e-01 1.25574638e-01 1.25525150e-01 + 1.25475721e-01 1.25426350e-01 1.25377037e-01 1.25327782e-01 1.25278586e-01 + 1.25229447e-01 1.25180366e-01 1.25131343e-01 1.25082377e-01 1.25033469e-01 + 1.24984618e-01 1.24935824e-01 1.24887088e-01 1.24838408e-01 1.24789785e-01 + 1.24741219e-01 1.24692710e-01 1.24644257e-01 1.24595861e-01 1.24547521e-01 + 1.24499237e-01 1.24451010e-01 1.24402838e-01 1.24354722e-01 1.24306662e-01 + 1.24258658e-01 1.24210709e-01 1.24162816e-01 1.24114978e-01 1.24067195e-01 + 1.24019468e-01 1.23971795e-01 1.23924178e-01 1.23876615e-01 1.23829107e-01 + 1.23781654e-01 1.23734255e-01 1.23686910e-01 1.23639620e-01 1.23592384e-01 + 1.23545202e-01 1.23498075e-01 1.23451001e-01 1.23403980e-01 1.23357014e-01 + 1.23310101e-01 1.23263242e-01 1.23216436e-01 1.23169683e-01 1.23122983e-01 + 1.23076337e-01 1.23029743e-01 1.22983202e-01 1.22936715e-01 1.22890279e-01 + 1.22843897e-01 1.22797567e-01 1.22751289e-01 1.22705063e-01 1.22658890e-01 + 1.22612769e-01 1.22566700e-01 1.22520682e-01 1.22474717e-01 1.22428803e-01 + 1.22382941e-01 1.22337130e-01 1.22291371e-01 1.22245663e-01 1.22200006e-01 + 1.22154400e-01 1.22108845e-01 1.22063342e-01 1.22017889e-01 1.21972487e-01 + 1.21927135e-01 1.21881834e-01 1.21836584e-01 1.21791383e-01 1.21746234e-01 + 1.21701134e-01 1.21656084e-01 1.21611085e-01 1.21566135e-01 1.21521235e-01 + 1.21476385e-01 1.21431584e-01 1.21386833e-01 1.21342131e-01 1.21297479e-01 + 1.21252876e-01 1.21208322e-01 1.21163817e-01 1.21119362e-01 1.21074955e-01 + 1.21030597e-01 1.20986287e-01 1.20942026e-01 1.20897814e-01 1.20853651e-01 + 1.20809535e-01 1.20765468e-01 1.20721449e-01 1.20677478e-01 1.20633555e-01 + 1.20589681e-01 1.20545854e-01 1.20502074e-01 1.20458343e-01 1.20414659e-01 + 1.20371022e-01 1.20327433e-01 1.20283891e-01 1.20240396e-01 1.20196949e-01 + 1.20153549e-01 1.20110195e-01 1.20066889e-01 1.20023629e-01 1.19980416e-01 + 1.19937250e-01 1.19894130e-01 1.19851056e-01 1.19808030e-01 1.19765049e-01 + 1.19722115e-01 1.19679226e-01 1.19636384e-01 1.19593588e-01 1.19550838e-01 + 1.19508133e-01 1.19465474e-01 1.19422861e-01 1.19380294e-01 1.19337772e-01 + 1.19295295e-01 1.19252863e-01 1.19210477e-01 1.19168136e-01 1.19125841e-01 + 1.19083590e-01 1.19041384e-01 1.18999223e-01 1.18957106e-01 1.18915035e-01 + 1.18873008e-01 1.18831025e-01 1.18789087e-01 1.18747194e-01 1.18705344e-01 + 1.18663539e-01 1.18621778e-01 1.18580061e-01 1.18538388e-01 1.18496759e-01 + 1.18455174e-01 1.18413632e-01 1.18372134e-01 1.18330680e-01 1.18289269e-01 + 1.18247902e-01 1.18206578e-01 1.18165298e-01 1.18124060e-01 1.18082866e-01 + 1.18041715e-01 1.18000607e-01 1.17959541e-01 1.17918519e-01 1.17877539e-01 + 1.17836602e-01 1.17795708e-01 1.17754856e-01 1.17714047e-01 1.17673280e-01 + 1.17632556e-01 1.17591873e-01 1.17551233e-01 1.17510635e-01 1.17470079e-01 + 1.17429565e-01 1.17389093e-01 1.17348662e-01 1.17308274e-01 1.17267927e-01 + 1.17227622e-01 1.17187358e-01 1.17147135e-01 1.17106955e-01 1.17066815e-01 + 1.17026717e-01 1.16986659e-01 1.16946643e-01 1.16906668e-01 1.16866734e-01 + 1.16826841e-01 1.16786988e-01 1.16747177e-01 1.16707406e-01 1.16667676e-01 + 1.16627986e-01 1.16588337e-01 1.16548728e-01 1.16509159e-01 1.16469631e-01 + 1.16430143e-01 1.16390695e-01 1.16351287e-01 1.16311919e-01 1.16272591e-01 + 1.16233303e-01 1.16194055e-01 1.16154846e-01 1.16115678e-01 1.16076548e-01 + 1.16037459e-01 1.15998408e-01 1.15959397e-01 1.15920426e-01 1.15881494e-01 + 1.15842601e-01 1.15803747e-01 1.15764932e-01 1.15726156e-01 1.15687419e-01 + 1.15648721e-01 1.15610062e-01 1.15571441e-01 1.15532859e-01 1.15494316e-01 + 1.15455812e-01 1.15417345e-01 1.15378918e-01 1.15340528e-01 1.15302177e-01 + 1.15263864e-01 1.15225590e-01 1.15187353e-01 1.15149155e-01 1.15110994e-01 + 1.15072871e-01 1.15034786e-01 1.14996739e-01 1.14958730e-01 1.14920759e-01 + 1.14882824e-01 1.14844928e-01 1.14807069e-01 1.14769247e-01 1.14731463e-01 + 1.14693716e-01 1.14656006e-01 1.14618334e-01 1.14580699e-01 1.14543100e-01 + 1.14505539e-01 1.14468014e-01 1.14430527e-01 1.14393076e-01 1.14355662e-01 + 1.14318284e-01 1.14280944e-01 1.14243640e-01 1.14206372e-01 1.14169141e-01 + 1.14131946e-01 1.14094787e-01 1.14057665e-01 1.14020579e-01 1.13983529e-01 + 1.13946515e-01 1.13909538e-01 1.13872596e-01 1.13835690e-01 1.13798820e-01 + 1.13761986e-01 1.13725188e-01 1.13688425e-01 1.13651698e-01 1.13615006e-01 + 1.13578350e-01 1.13541730e-01 1.13505144e-01 1.13468595e-01 1.13432080e-01 + 1.13395601e-01 1.13359156e-01 1.13322747e-01 1.13286373e-01 1.13250035e-01 + 1.13213730e-01 1.13177461e-01 1.13141227e-01 1.13105028e-01 1.13068863e-01 + 1.13032733e-01 1.12996637e-01 1.12960576e-01 1.12924550e-01 1.12888558e-01 + 1.12852600e-01 1.12816677e-01 1.12780788e-01 1.12744933e-01 1.12709112e-01 + 1.12673326e-01 1.12637574e-01 1.12601855e-01 1.12566171e-01 1.12530520e-01 + 1.12494904e-01 1.12459321e-01 1.12423772e-01 1.12388256e-01 1.12352774e-01 + 1.12317326e-01 1.12281911e-01 1.12246530e-01 1.12211182e-01 1.12175868e-01 + 1.12140587e-01 1.12105339e-01 1.12070125e-01 1.12034943e-01 1.11999795e-01 + 1.11964679e-01 1.11929597e-01 1.11894548e-01 1.11859532e-01 1.11824548e-01 + 1.11789597e-01 1.11754679e-01 1.11719794e-01 1.11684941e-01 1.11650121e-01 + 1.11615334e-01 1.11580579e-01 1.11545856e-01 1.11511166e-01 1.11476508e-01 + 1.11441883e-01 1.11407289e-01 1.11372728e-01 1.11338199e-01 1.11303703e-01 + 1.11269238e-01 1.11234805e-01 1.11200404e-01 1.11166035e-01 1.11131698e-01 + 1.11097393e-01 1.11063119e-01 1.11028877e-01 1.10994667e-01 1.10960489e-01 + 1.10926342e-01 1.10892226e-01 1.10858142e-01 1.10824089e-01 1.10790068e-01 + 1.10756078e-01 1.10722119e-01 1.10688192e-01 1.10654295e-01 1.10620430e-01 + 1.10586596e-01 1.10552793e-01 1.10519021e-01 1.10485279e-01 1.10451569e-01 + 1.10417890e-01 1.10384241e-01 1.10350623e-01 1.10317036e-01 1.10283479e-01 + 1.10249953e-01 1.10216458e-01 1.10182993e-01 1.10149558e-01 1.10116154e-01 + 1.10082780e-01 1.10049437e-01 1.10016124e-01 1.09982841e-01 1.09949588e-01 + 1.09916366e-01 1.09883174e-01 1.09850011e-01 1.09816879e-01 1.09783776e-01 + 1.09750704e-01 1.09717661e-01 1.09684648e-01 1.09651665e-01 1.09618712e-01 + 1.09585789e-01 1.09552895e-01 1.09520030e-01 1.09487196e-01 1.09454390e-01 + 1.09421615e-01 1.09388868e-01 1.09356151e-01 1.09323464e-01 1.09290805e-01 + 1.09258176e-01 1.09225576e-01 1.09193006e-01 1.09160464e-01 1.09127951e-01 + 1.09095468e-01 1.09063013e-01 1.09030588e-01 1.08998191e-01 1.08965824e-01 + 1.08933485e-01 1.08901174e-01 1.08868893e-01 1.08836640e-01 1.08804416e-01 + 1.08772220e-01 1.08740054e-01 1.08707915e-01 1.08675805e-01 1.08643724e-01 + 1.08611671e-01 1.08579646e-01 1.08547649e-01 1.08515681e-01 1.08483741e-01 + 1.08451829e-01 1.08419946e-01 1.08388090e-01 1.08356263e-01 1.08324463e-01 + 1.08292692e-01 1.08260948e-01 1.08229233e-01 1.08197545e-01 1.08165885e-01 + 1.08134253e-01 1.08102648e-01 1.08071072e-01 1.08039523e-01 1.08008001e-01 + 1.07976507e-01 1.07945041e-01 1.07913602e-01 1.07882191e-01 1.07850807e-01 + 1.07819450e-01 1.07788121e-01 1.07756819e-01 1.07725544e-01 1.07694296e-01 + 1.07663076e-01 1.07631883e-01 1.07600717e-01 1.07569578e-01 1.07538466e-01 + 1.07507381e-01 1.07476322e-01 1.07445291e-01 1.07414287e-01 1.07383309e-01 + 1.07352359e-01 1.07321435e-01 1.07290537e-01 1.07259667e-01 1.07228823e-01 + 1.07198005e-01 1.07167214e-01 1.07136450e-01 1.07105712e-01 1.07075001e-01 + 1.07044316e-01 1.07013657e-01 1.06983025e-01 1.06952419e-01 1.06921839e-01 + 1.06891286e-01 1.06860758e-01 1.06830257e-01 1.06799782e-01 1.06769333e-01 + 1.06738910e-01 1.06708513e-01 1.06678142e-01 1.06647796e-01 1.06617477e-01 + 1.06587184e-01 1.06556916e-01 1.06526674e-01 1.06496458e-01 1.06466268e-01 + 1.06436103e-01 1.06405964e-01 1.06375850e-01 1.06345762e-01 1.06315700e-01 + 1.06285663e-01 1.06255651e-01 1.06225665e-01 1.06195704e-01 1.06165769e-01 + 1.06135859e-01 1.06105974e-01 1.06076114e-01 1.06046280e-01 1.06016470e-01 + 1.05986686e-01 1.05956927e-01 1.05927193e-01 1.05897484e-01 1.05867800e-01 + 1.05838141e-01 1.05808507e-01 1.05778897e-01 1.05749313e-01 1.05719753e-01 + 1.05690218e-01 1.05660708e-01 1.05631223e-01 1.05601762e-01 1.05572326e-01 + 1.05542914e-01 1.05513528e-01 1.05484165e-01 1.05454827e-01 1.05425514e-01 + 1.05396225e-01 1.05366960e-01 1.05337720e-01 1.05308504e-01 1.05279312e-01 + 1.05250145e-01 1.05221002e-01 1.05191883e-01 1.05162788e-01 1.05133717e-01 + 1.05104671e-01 1.05075648e-01 1.05046650e-01 1.05017675e-01 1.04988725e-01 + 1.04959798e-01 1.04930896e-01 1.04902017e-01 1.04873162e-01 1.04844331e-01 + 1.04815523e-01 1.04786740e-01 1.04757980e-01 1.04729243e-01 1.04700531e-01 + 1.04671841e-01 1.04643176e-01 1.04614534e-01 1.04585916e-01 1.04557321e-01 + 1.04528749e-01 1.04500201e-01 1.04471676e-01 1.04443175e-01 1.04414697e-01 + 1.04386242e-01 1.04357810e-01 1.04329402e-01 1.04301017e-01 1.04272655e-01 + 1.04244316e-01 1.04216000e-01 1.04187707e-01 1.04159437e-01 1.04131191e-01 + 1.04102967e-01 1.04074766e-01 1.04046588e-01 1.04018433e-01 1.03990301e-01 + 1.03962192e-01 1.03934105e-01 1.03906041e-01 1.03878000e-01 1.03849982e-01 + 1.03821986e-01 1.03794013e-01 1.03766062e-01 1.03738134e-01 1.03710229e-01 + 1.03682346e-01 1.03654486e-01 1.03626648e-01 1.03598832e-01 1.03571039e-01 + 1.03543268e-01 1.03515520e-01 1.03487793e-01 1.03460089e-01 1.03432408e-01 + 1.03404748e-01 1.03377111e-01 1.03349496e-01 1.03321903e-01 1.03294332e-01 + 1.03266783e-01 1.03239256e-01 1.03211751e-01 1.03184268e-01 1.03156807e-01 + 1.03129368e-01 1.03101951e-01 1.03074556e-01 1.03047182e-01 1.03019831e-01 + 1.02992501e-01 1.02965192e-01 1.02937906e-01 1.02910641e-01 1.02883398e-01 + 1.02856177e-01 1.02828977e-01 1.02801798e-01 1.02774642e-01 1.02747506e-01 + 1.02720392e-01 1.02693300e-01 1.02666229e-01 1.02639180e-01 1.02612151e-01 + 1.02585145e-01 1.02558159e-01 1.02531195e-01 1.02504252e-01 1.02477330e-01 + 1.02450430e-01 1.02423550e-01 1.02396692e-01 1.02369855e-01 1.02343039e-01 + 1.02316244e-01 1.02289470e-01 1.02262717e-01 1.02235985e-01 1.02209274e-01 + 1.02182584e-01 1.02155915e-01 1.02129267e-01 1.02102639e-01 1.02076033e-01 + 1.02049447e-01 1.02022882e-01 1.01996338e-01 1.01969814e-01 1.01943311e-01 + 1.01916829e-01 1.01890367e-01 1.01863926e-01 1.01837505e-01 1.01811106e-01 + 1.01784726e-01 1.01758367e-01 1.01732029e-01 1.01705711e-01 1.01679413e-01 + 1.01653136e-01 1.01626879e-01 1.01600643e-01 1.01574426e-01 1.01548230e-01 + 1.01522055e-01 1.01495899e-01 1.01469764e-01 1.01443649e-01 1.01417554e-01 + 1.01391479e-01 1.01365425e-01 1.01339390e-01 1.01313376e-01 1.01287381e-01 + 1.01261406e-01 1.01235452e-01 1.01209517e-01 1.01183603e-01 1.01157708e-01 + 1.01131833e-01 1.01105978e-01 1.01080143e-01 1.01054327e-01 1.01028532e-01 + 1.01002756e-01 1.00976999e-01 1.00951263e-01 1.00925546e-01 1.00899849e-01 + 1.00874171e-01 1.00848513e-01 1.00822875e-01 1.00797256e-01 1.00771656e-01 + 1.00746077e-01 1.00720516e-01 1.00694975e-01 1.00669454e-01 1.00643952e-01 + 1.00618469e-01 1.00593005e-01 1.00567561e-01 1.00542136e-01 1.00516731e-01 + 1.00491345e-01 1.00465978e-01 1.00440630e-01 1.00415301e-01 1.00389992e-01 + 1.00364701e-01 1.00339430e-01 1.00314178e-01 1.00288944e-01 1.00263730e-01 + 1.00238535e-01 1.00213359e-01 1.00188202e-01 1.00163064e-01 1.00137944e-01 + 1.00112844e-01 1.00087762e-01 1.00062700e-01 1.00037656e-01 1.00012631e-01 + 9.99876242e-02 9.99626366e-02 9.99376677e-02 9.99127176e-02 9.98877861e-02 + 9.98628732e-02 9.98379790e-02 9.98131034e-02 9.97882464e-02 9.97634079e-02 + 9.97385880e-02 9.97137866e-02 9.96890037e-02 9.96642393e-02 9.96394933e-02 + 9.96147657e-02 9.95900565e-02 9.95653657e-02 9.95406933e-02 9.95160392e-02 + 9.94914034e-02 9.94667859e-02 9.94421867e-02 9.94176057e-02 9.93930429e-02 + 9.93684983e-02 9.93439719e-02 9.93194636e-02 9.92949735e-02 9.92705015e-02 + 9.92460476e-02 9.92216117e-02 9.91971939e-02 9.91727940e-02 9.91484122e-02 + 9.91240484e-02 9.90997025e-02 9.90753745e-02 9.90510645e-02 9.90267723e-02 + 9.90024980e-02 9.89782415e-02 9.89540029e-02 9.89297821e-02 9.89055790e-02 + 9.88813937e-02 9.88572261e-02 9.88330763e-02 9.88089441e-02 9.87848296e-02 + 9.87607327e-02 9.87366535e-02 9.87125919e-02 9.86885478e-02 9.86645213e-02 + 9.86405124e-02 9.86165209e-02 9.85925470e-02 9.85685906e-02 9.85446516e-02 + 9.85207300e-02 9.84968258e-02 9.84729391e-02 9.84490697e-02 9.84252176e-02 + 9.84013829e-02 9.83775655e-02 9.83537654e-02 9.83299825e-02 9.83062169e-02 + 9.82824685e-02 9.82587374e-02 9.82350233e-02 9.82113265e-02 9.81876468e-02 + 9.81639842e-02 9.81403387e-02 9.81167103e-02 9.80930990e-02 9.80695047e-02 + 9.80459274e-02 9.80223671e-02 9.79988238e-02 9.79752974e-02 9.79517880e-02 + 9.79282955e-02 9.79048199e-02 9.78813611e-02 9.78579192e-02 9.78344942e-02 + 9.78110859e-02 9.77876945e-02 9.77643198e-02 9.77409619e-02 9.77176207e-02 + 9.76942963e-02 9.76709885e-02 9.76476974e-02 9.76244230e-02 9.76011651e-02 + 9.75779239e-02 9.75546993e-02 9.75314913e-02 9.75082999e-02 9.74851249e-02 + 9.74619665e-02 9.74388246e-02 9.74156991e-02 9.73925901e-02 9.73694976e-02 + 9.73464215e-02 9.73233617e-02 9.73003184e-02 9.72772914e-02 9.72542807e-02 + 9.72312864e-02 9.72083084e-02 9.71853467e-02 9.71624012e-02 9.71394719e-02 + 9.71165589e-02 9.70936621e-02 9.70707815e-02 9.70479171e-02 9.70250688e-02 + 9.70022366e-02 9.69794205e-02 9.69566206e-02 9.69338367e-02 9.69110688e-02 + 9.68883170e-02 9.68655813e-02 9.68428615e-02 9.68201577e-02 9.67974698e-02 + 9.67747979e-02 9.67521419e-02 9.67295019e-02 9.67068777e-02 9.66842693e-02 + 9.66616769e-02 9.66391002e-02 9.66165394e-02 9.65939943e-02 9.65714651e-02 + 9.65489516e-02 9.65264538e-02 9.65039718e-02 9.64815054e-02 9.64590547e-02 + 9.64366197e-02 9.64142004e-02 9.63917967e-02 9.63694086e-02 9.63470360e-02 + 9.63246791e-02 9.63023377e-02 9.62800118e-02 9.62577015e-02 9.62354067e-02 + 9.62131273e-02 9.61908635e-02 9.61686150e-02 9.61463820e-02 9.61241644e-02 + 9.61019623e-02 9.60797754e-02 9.60576040e-02 9.60354479e-02 9.60133071e-02 + 9.59911816e-02 9.59690714e-02 9.59469765e-02 9.59248968e-02 9.59028324e-02 + 9.58807832e-02 9.58587492e-02 9.58367303e-02 9.58147267e-02 9.57927382e-02 + 9.57707648e-02 9.57488065e-02 9.57268633e-02 9.57049352e-02 9.56830222e-02 + 9.56611242e-02 9.56392413e-02 9.56173733e-02 9.55955204e-02 9.55736824e-02 + 9.55518594e-02 9.55300513e-02 9.55082582e-02 9.54864799e-02 9.54647166e-02 + 9.54429681e-02 9.54212345e-02 9.53995157e-02 9.53778117e-02 9.53561226e-02 + 9.53344482e-02 9.53127886e-02 9.52911438e-02 9.52695137e-02 9.52478984e-02 + 9.52262977e-02 9.52047117e-02 9.51831404e-02 9.51615838e-02 9.51400418e-02 + 9.51185144e-02 9.50970016e-02 9.50755034e-02 9.50540198e-02 9.50325508e-02 + 9.50110963e-02 9.49896563e-02 9.49682308e-02 9.49468198e-02 9.49254233e-02 + 9.49040412e-02 9.48826736e-02 9.48613204e-02 9.48399817e-02 9.48186573e-02 + 9.47973473e-02 9.47760516e-02 9.47547703e-02 9.47335034e-02 9.47122507e-02 + 9.46910123e-02 9.46697883e-02 9.46485784e-02 9.46273829e-02 9.46062015e-02 + 9.45850344e-02 9.45638815e-02 9.45427428e-02 9.45216182e-02 9.45005078e-02 + 9.44794116e-02 9.44583294e-02 9.44372614e-02 9.44162074e-02 9.43951676e-02 + 9.43741418e-02 9.43531300e-02 9.43321323e-02 9.43111485e-02 9.42901788e-02 + 9.42692231e-02 9.42482813e-02 9.42273534e-02 9.42064395e-02 9.41855396e-02 + 9.41646535e-02 9.41437813e-02 9.41229230e-02 9.41020785e-02 9.40812479e-02 + 9.40604311e-02 9.40396282e-02 9.40188390e-02 9.39980636e-02 9.39773020e-02 + 9.39565541e-02 9.39358200e-02 9.39150995e-02 9.38943928e-02 9.38736998e-02 + 9.38530204e-02 9.38323548e-02 9.38117027e-02 9.37910643e-02 9.37704395e-02 + 9.37498283e-02 9.37292307e-02 9.37086466e-02 9.36880762e-02 9.36675192e-02 + 9.36469758e-02 9.36264459e-02 9.36059295e-02 9.35854265e-02 9.35649371e-02 + 9.35444611e-02 9.35239985e-02 9.35035493e-02 9.34831136e-02 9.34626912e-02 + 9.34422823e-02 9.34218866e-02 9.34015044e-02 9.33811355e-02 9.33607798e-02 + 9.33404375e-02 9.33201085e-02 9.32997928e-02 9.32794903e-02 9.32592011e-02 + 9.32389251e-02 9.32186624e-02 9.31984128e-02 9.31781764e-02 9.31579532e-02 + 9.31377432e-02 9.31175463e-02 9.30973626e-02 9.30771919e-02 9.30570344e-02 + 9.30368899e-02 9.30167586e-02 9.29966403e-02 9.29765350e-02 9.29564428e-02 + 9.29363636e-02 9.29162974e-02 9.28962442e-02 9.28762040e-02 9.28561768e-02 + 9.28361624e-02 9.28161611e-02 9.27961726e-02 9.27761971e-02 9.27562344e-02 + 9.27362847e-02 9.27163478e-02 9.26964237e-02 9.26765125e-02 9.26566141e-02 + 9.26367286e-02 9.26168558e-02 9.25969958e-02 9.25771486e-02 9.25573141e-02 + 9.25374924e-02 9.25176834e-02 9.24978871e-02 9.24781036e-02 9.24583327e-02 + 9.24385745e-02 9.24188289e-02 9.23990960e-02 9.23793758e-02 9.23596681e-02 + 9.23399731e-02 9.23202907e-02 9.23006208e-02 9.22809635e-02 9.22613188e-02 + 9.22416866e-02 9.22220669e-02 9.22024597e-02 9.21828651e-02 9.21632829e-02 + 9.21437132e-02 9.21241560e-02 9.21046112e-02 9.20850788e-02 9.20655589e-02 + 9.20460514e-02 9.20265563e-02 9.20070735e-02 9.19876031e-02 9.19681451e-02 + 9.19486994e-02 9.19292661e-02 9.19098451e-02 9.18904363e-02 9.18710399e-02 + 9.18516557e-02 9.18322838e-02 9.18129242e-02 9.17935768e-02 9.17742416e-02 + 9.17549186e-02 9.17356079e-02 9.17163093e-02 9.16970229e-02 9.16777486e-02 + 9.16584865e-02 9.16392366e-02 9.16199987e-02 9.16007730e-02 9.15815594e-02 + 9.15623578e-02 9.15431684e-02 9.15239910e-02 9.15048256e-02 9.14856723e-02 + 9.14665310e-02 9.14474017e-02 9.14282844e-02 9.14091791e-02 9.13900857e-02 + 9.13710043e-02 9.13519349e-02 9.13328774e-02 9.13138318e-02 9.12947982e-02 + 9.12757764e-02 9.12567665e-02 9.12377685e-02 9.12187823e-02 9.11998080e-02 + 9.11808456e-02 9.11618949e-02 9.11429561e-02 9.11240290e-02 9.11051138e-02 + 9.10862103e-02 9.10673186e-02 9.10484386e-02 9.10295704e-02 9.10107139e-02 + 9.09918691e-02 9.09730360e-02 9.09542146e-02 9.09354049e-02 9.09166069e-02 + 9.08978205e-02 9.08790457e-02 9.08602826e-02 9.08415311e-02 9.08227911e-02 + 9.08040628e-02 9.07853461e-02 9.07666409e-02 9.07479473e-02 9.07292652e-02 + 9.07105947e-02 9.06919357e-02 9.06732882e-02 9.06546522e-02 9.06360277e-02 + 9.06174146e-02 9.05988131e-02 9.05802229e-02 9.05616442e-02 9.05430770e-02 + 9.05245211e-02 9.05059767e-02 9.04874436e-02 9.04689219e-02 9.04504116e-02 + 9.04319127e-02 9.04134251e-02 9.03949488e-02 9.03764839e-02 9.03580303e-02 + 9.03395879e-02 9.03211569e-02 9.03027371e-02 9.02843286e-02 9.02659313e-02 + 9.02475453e-02 9.02291706e-02 9.02108070e-02 9.01924546e-02 9.01741135e-02 + 9.01557835e-02 9.01374647e-02 9.01191571e-02 9.01008606e-02 9.00825752e-02 + 9.00643010e-02 9.00460379e-02 9.00277859e-02 9.00095450e-02 8.99913152e-02 + 8.99730965e-02 8.99548888e-02 8.99366921e-02 8.99185065e-02 8.99003320e-02 + 8.98821684e-02 8.98640159e-02 8.98458743e-02 8.98277437e-02 8.98096241e-02 + 8.97915155e-02 8.97734178e-02 8.97553311e-02 8.97372552e-02 8.97191903e-02 + 8.97011363e-02 8.96830932e-02 8.96650610e-02 8.96470396e-02 8.96290291e-02 + 8.96110295e-02 8.95930407e-02 8.95750627e-02 8.95570956e-02 8.95391392e-02 + 8.95211937e-02 8.95032589e-02 8.94853349e-02 8.94674217e-02 8.94495192e-02 + 8.94316275e-02 8.94137465e-02 8.93958762e-02 8.93780167e-02 8.93601678e-02 + 8.93423296e-02 8.93245021e-02 8.93066853e-02 8.92888791e-02 8.92710836e-02 + 8.92532987e-02 8.92355244e-02 8.92177608e-02 8.92000077e-02 8.91822653e-02 + 8.91645334e-02 8.91468121e-02 8.91291014e-02 8.91114012e-02 8.90937115e-02 + 8.90760324e-02 8.90583638e-02 8.90407057e-02 8.90230582e-02 8.90054211e-02 + 8.89877945e-02 8.89701783e-02 8.89525726e-02 8.89349774e-02 8.89173926e-02 + 8.88998182e-02 8.88822542e-02 8.88647007e-02 8.88471575e-02 8.88296247e-02 + 8.88121023e-02 8.87945903e-02 8.87770886e-02 8.87595973e-02 8.87421163e-02 + 8.87246456e-02 8.87071853e-02 8.86897352e-02 8.86722954e-02 8.86548660e-02 + 8.86374468e-02 8.86200378e-02 8.86026391e-02 8.85852507e-02 8.85678725e-02 + 8.85505045e-02 8.85331467e-02 8.85157991e-02 8.84984618e-02 8.84811346e-02 + 8.84638176e-02 8.84465107e-02 8.84292140e-02 8.84119274e-02 8.83946510e-02 + 8.83773847e-02 8.83601285e-02 8.83428825e-02 8.83256465e-02 8.83084206e-02 + 8.82912047e-02 8.82739990e-02 8.82568033e-02 8.82396176e-02 8.82224420e-02 + 8.82052764e-02 8.81881208e-02 8.81709752e-02 8.81538396e-02 8.81367140e-02 + 8.81195984e-02 8.81024927e-02 8.80853970e-02 8.80683113e-02 8.80512355e-02 + 8.80341696e-02 8.80171137e-02 8.80000676e-02 8.79830314e-02 8.79660052e-02 + 8.79489888e-02 8.79319823e-02 8.79149857e-02 8.78979989e-02 8.78810219e-02 + 8.78640548e-02 8.78470975e-02 8.78301500e-02 8.78132123e-02 8.77962845e-02 + 8.77793664e-02 8.77624580e-02 8.77455595e-02 8.77286707e-02 8.77117916e-02 + 8.76949223e-02 8.76780628e-02 8.76612129e-02 8.76443728e-02 8.76275423e-02 + 8.76107216e-02 8.75939105e-02 8.75771091e-02 8.75603174e-02 8.75435353e-02 + 8.75267629e-02 8.75100001e-02 8.74932469e-02 8.74765033e-02 8.74597694e-02 + 8.74430451e-02 8.74263303e-02 8.74096251e-02 8.73929296e-02 8.73762435e-02 + 8.73595670e-02 8.73429001e-02 8.73262427e-02 8.73095948e-02 8.72929565e-02 + 8.72763276e-02 8.72597083e-02 8.72430984e-02 8.72264981e-02 8.72099072e-02 + 8.71933257e-02 8.71767537e-02 8.71601912e-02 8.71436381e-02 8.71270944e-02 + 8.71105602e-02 8.70940353e-02 8.70775199e-02 8.70610138e-02 8.70445172e-02 + 8.70280299e-02 8.70115519e-02 8.69950834e-02 8.69786241e-02 8.69621742e-02 + 8.69457337e-02 8.69293024e-02 8.69128805e-02 8.68964679e-02 8.68800646e-02 + 8.68636705e-02 8.68472857e-02 8.68309103e-02 8.68145440e-02 8.67981870e-02 + 8.67818393e-02 8.67655008e-02 8.67491715e-02 8.67328514e-02 8.67165406e-02 + 8.67002389e-02 8.66839464e-02 8.66676631e-02 8.66513890e-02 8.66351240e-02 + 8.66188682e-02 8.66026216e-02 8.65863841e-02 8.65701557e-02 8.65539364e-02 + 8.65377263e-02 8.65215252e-02 8.65053333e-02 8.64891504e-02 8.64729766e-02 + 8.64568119e-02 8.64406563e-02 8.64245097e-02 8.64083721e-02 8.63922436e-02 + 8.63761241e-02 8.63600136e-02 8.63439122e-02 8.63278197e-02 8.63117363e-02 + 8.62956618e-02 8.62795963e-02 8.62635398e-02 8.62474922e-02 8.62314536e-02 + 8.62154239e-02 8.61994032e-02 8.61833914e-02 8.61673885e-02 8.61513945e-02 + 8.61354094e-02 8.61194332e-02 8.61034659e-02 8.60875075e-02 8.60715580e-02 + 8.60556173e-02 8.60396855e-02 8.60237625e-02 8.60078483e-02 8.59919430e-02 + 8.59760465e-02 8.59601588e-02 8.59442800e-02 8.59284099e-02 8.59125486e-02 + 8.58966961e-02 8.58808523e-02 8.58650173e-02 8.58491911e-02 8.58333736e-02 + 8.58175649e-02 8.58017649e-02 8.57859736e-02 8.57701911e-02 8.57544172e-02 + 8.57386520e-02 8.57228956e-02 8.57071478e-02 8.56914087e-02 8.56756782e-02 + 8.56599565e-02 8.56442433e-02 8.56285389e-02 8.56128430e-02 8.55971558e-02 + 8.55814772e-02 8.55658072e-02 8.55501458e-02 8.55344930e-02 8.55188488e-02 + 8.55032132e-02 8.54875862e-02 8.54719677e-02 8.54563578e-02 8.54407564e-02 + 8.54251636e-02 8.54095793e-02 8.53940035e-02 8.53784363e-02 8.53628775e-02 + 8.53473273e-02 8.53317855e-02 8.53162523e-02 8.53007275e-02 8.52852112e-02 + 8.52697034e-02 8.52542040e-02 8.52387130e-02 8.52232305e-02 8.52077565e-02 + 8.51922909e-02 8.51768336e-02 8.51613848e-02 8.51459444e-02 8.51305124e-02 + 8.51150888e-02 8.50996736e-02 8.50842667e-02 8.50688682e-02 8.50534780e-02 + 8.50380963e-02 8.50227228e-02 8.50073577e-02 8.49920009e-02 8.49766524e-02 + 8.49613123e-02 8.49459804e-02 8.49306569e-02 8.49153416e-02 8.49000346e-02 + 8.48847359e-02 8.48694455e-02 8.48541633e-02 8.48388893e-02 8.48236237e-02 + 8.48083662e-02 8.47931170e-02 8.47778760e-02 8.47626432e-02 8.47474187e-02 + 8.47322023e-02 8.47169941e-02 8.47017941e-02 8.46866023e-02 8.46714187e-02 + 8.46562432e-02 8.46410759e-02 8.46259167e-02 8.46107657e-02 8.45956228e-02 + 8.45804880e-02 8.45653614e-02 8.45502428e-02 8.45351324e-02 8.45200301e-02 + 8.45049358e-02 8.44898497e-02 8.44747716e-02 8.44597016e-02 8.44446397e-02 + 8.44295858e-02 8.44145399e-02 8.43995021e-02 8.43844724e-02 8.43694506e-02 + 8.43544369e-02 8.43394312e-02 8.43244335e-02 8.43094438e-02 8.42944621e-02 + 8.42794883e-02 8.42645226e-02 8.42495648e-02 8.42346150e-02 8.42196731e-02 + 8.42047392e-02 8.41898132e-02 8.41748952e-02 8.41599851e-02 8.41450829e-02 + 8.41301886e-02 8.41153022e-02 8.41004238e-02 8.40855532e-02 8.40706905e-02 + 8.40558357e-02 8.40409887e-02 8.40261496e-02 8.40113184e-02 8.39964950e-02 + 8.39816795e-02 8.39668718e-02 8.39520719e-02 8.39372799e-02 8.39224957e-02 + 8.39077193e-02 8.38929507e-02 8.38781898e-02 8.38634368e-02 8.38486916e-02 + 8.38339541e-02 8.38192244e-02 8.38045025e-02 8.37897883e-02 8.37750818e-02 + 8.37603831e-02 8.37456922e-02 8.37310089e-02 8.37163334e-02 8.37016656e-02 + 8.36870055e-02 8.36723531e-02 8.36577084e-02 8.36430714e-02 8.36284421e-02 + 8.36138204e-02 8.35992064e-02 8.35846001e-02 8.35700014e-02 8.35554104e-02 + 8.35408270e-02 8.35262512e-02 8.35116831e-02 8.34971226e-02 8.34825697e-02 + 8.34680244e-02 8.34534867e-02 8.34389566e-02 8.34244341e-02 8.34099191e-02 + 8.33954118e-02 8.33809120e-02 8.33664197e-02 8.33519351e-02 8.33374579e-02 + 8.33229883e-02 8.33085263e-02 8.32940718e-02 8.32796248e-02 8.32651853e-02 + 8.32507533e-02 8.32363288e-02 8.32219118e-02 8.32075023e-02 8.31931003e-02 + 8.31787058e-02 8.31643187e-02 8.31499391e-02 8.31355669e-02 8.31212022e-02 + 8.31068450e-02 8.30924951e-02 8.30781528e-02 8.30638178e-02 8.30494902e-02 + 8.30351701e-02 8.30208574e-02 8.30065520e-02 8.29922541e-02 8.29779635e-02 + 8.29636804e-02 8.29494046e-02 8.29351361e-02 8.29208751e-02 8.29066213e-02 + 8.28923750e-02 8.28781359e-02 8.28639042e-02 8.28496799e-02 8.28354628e-02 + 8.28212531e-02 8.28070507e-02 8.27928556e-02 8.27786678e-02 8.27644872e-02 + 8.27503140e-02 8.27361480e-02 8.27219893e-02 8.27078379e-02 8.26936938e-02 + 8.26795569e-02 8.26654272e-02 8.26513048e-02 8.26371896e-02 8.26230816e-02 + 8.26089809e-02 8.25948874e-02 8.25808011e-02 8.25667220e-02 8.25526501e-02 + 8.25385854e-02 8.25245279e-02 8.25104775e-02 8.24964344e-02 8.24823984e-02 + 8.24683695e-02 8.24543479e-02 8.24403333e-02 8.24263259e-02 8.24123257e-02 + 8.23983326e-02 8.23843466e-02 8.23703677e-02 8.23563960e-02 8.23424313e-02 + 8.23284737e-02 8.23145233e-02 8.23005799e-02 8.22866436e-02 8.22727144e-02 + 8.22587923e-02 8.22448772e-02 8.22309692e-02 8.22170683e-02 8.22031744e-02 + 8.21892875e-02 8.21754077e-02 8.21615349e-02 8.21476691e-02 8.21338103e-02 + 8.21199586e-02 8.21061138e-02 8.20922761e-02 8.20784453e-02 8.20646216e-02 + 8.20508048e-02 8.20369950e-02 8.20231922e-02 8.20093963e-02 8.19956074e-02 + 8.19818254e-02 8.19680504e-02 8.19542823e-02 8.19405212e-02 8.19267670e-02 + 8.19130197e-02 8.18992794e-02 8.18855459e-02 8.18718194e-02 8.18580997e-02 + 8.18443870e-02 8.18306811e-02 8.18169822e-02 8.18032901e-02 8.17896048e-02 + 8.17759265e-02 8.17622550e-02 8.17485903e-02 8.17349326e-02 8.17212816e-02 + 8.17076375e-02 8.16940002e-02 8.16803697e-02 8.16667461e-02 8.16531293e-02 + 8.16395193e-02 8.16259161e-02 8.16123197e-02 8.15987300e-02 8.15851472e-02 + 8.15715712e-02 8.15580019e-02 8.15444394e-02 8.15308836e-02 8.15173346e-02 + 8.15037924e-02 8.14902569e-02 8.14767282e-02 8.14632062e-02 8.14496909e-02 + 8.14361823e-02 8.14226805e-02 8.14091854e-02 8.13956970e-02 8.13822153e-02 + 8.13687402e-02 8.13552719e-02 8.13418103e-02 8.13283553e-02 8.13149070e-02 + 8.13014654e-02 8.12880305e-02 8.12746022e-02 8.12611805e-02 8.12477656e-02 + 8.12343572e-02 8.12209555e-02 8.12075604e-02 8.11941719e-02 8.11807901e-02 + 8.11674149e-02 8.11540463e-02 8.11406843e-02 8.11273288e-02 8.11139800e-02 + 8.11006378e-02 8.10873021e-02 8.10739731e-02 8.10606506e-02 8.10473346e-02 + 8.10340252e-02 8.10207224e-02 8.10074261e-02 8.09941364e-02 8.09808532e-02 + 8.09675765e-02 8.09543064e-02 8.09410428e-02 8.09277857e-02 8.09145351e-02 + 8.09012911e-02 8.08880535e-02 8.08748224e-02 8.08615978e-02 8.08483797e-02 + 8.08351681e-02 8.08219630e-02 8.08087643e-02 8.07955721e-02 8.07823863e-02 + 8.07692070e-02 8.07560342e-02 8.07428678e-02 8.07297078e-02 8.07165542e-02 + 8.07034071e-02 8.06902664e-02 8.06771322e-02 8.06640043e-02 8.06508829e-02 + 8.06377678e-02 8.06246592e-02 8.06115569e-02 8.05984610e-02 8.05853715e-02 + 8.05722884e-02 8.05592116e-02 8.05461412e-02 8.05330772e-02 8.05200195e-02 + 8.05069682e-02 8.04939232e-02 8.04808846e-02 8.04678523e-02 8.04548263e-02 + 8.04418066e-02 8.04287933e-02 8.04157863e-02 8.04027856e-02 8.03897912e-02 + 8.03768031e-02 8.03638212e-02 8.03508457e-02 8.03378765e-02 8.03249135e-02 + 8.03119568e-02 8.02990064e-02 8.02860622e-02 8.02731243e-02 8.02601926e-02 + 8.02472672e-02 8.02343481e-02 8.02214351e-02 8.02085284e-02 8.01956280e-02 + 8.01827337e-02 8.01698457e-02 8.01569639e-02 8.01440883e-02 8.01312189e-02 + 8.01183557e-02 8.01054986e-02 8.00926478e-02 8.00798032e-02 8.00669647e-02 + 8.00541324e-02 8.00413063e-02 8.00284863e-02 8.00156725e-02 8.00028649e-02 + 7.99900634e-02 7.99772680e-02 7.99644788e-02 7.99516957e-02 7.99389187e-02 + 7.99261479e-02 7.99133832e-02 7.99006246e-02 7.98878721e-02 7.98751257e-02 + 7.98623854e-02 7.98496512e-02 7.98369231e-02 7.98242011e-02 7.98114851e-02 + 7.97987753e-02 7.97860715e-02 7.97733737e-02 7.97606821e-02 7.97479965e-02 + 7.97353169e-02 7.97226434e-02 7.97099759e-02 7.96973145e-02 7.96846590e-02 + 7.96720097e-02 7.96593663e-02 7.96467290e-02 7.96340976e-02 7.96214723e-02 + 7.96088530e-02 7.95962397e-02 7.95836323e-02 7.95710310e-02 7.95584356e-02 + 7.95458463e-02 7.95332629e-02 7.95206854e-02 7.95081140e-02 7.94955485e-02 + 7.94829889e-02 7.94704353e-02 7.94578877e-02 7.94453459e-02 7.94328102e-02 + 7.94202803e-02 7.94077564e-02 7.93952384e-02 7.93827263e-02 7.93702202e-02 + 7.93577199e-02 7.93452256e-02 7.93327371e-02 7.93202546e-02 7.93077779e-02 + 7.92953071e-02 7.92828423e-02 7.92703832e-02 7.92579301e-02 7.92454828e-02 + 7.92330414e-02 7.92206058e-02 7.92081761e-02 7.91957523e-02 7.91833343e-02 + 7.91709221e-02 7.91585157e-02 7.91461152e-02 7.91337206e-02 7.91213317e-02 + 7.91089486e-02 7.90965714e-02 7.90842000e-02 7.90718344e-02 7.90594746e-02 + 7.90471205e-02 7.90347723e-02 7.90224298e-02 7.90100932e-02 7.89977623e-02 + 7.89854371e-02 7.89731178e-02 7.89608042e-02 7.89484964e-02 7.89361943e-02 + 7.89238979e-02 7.89116073e-02 7.88993225e-02 7.88870434e-02 7.88747700e-02 + 7.88625023e-02 7.88502404e-02 7.88379842e-02 7.88257337e-02 7.88134889e-02 + 7.88012498e-02 7.87890164e-02 7.87767887e-02 7.87645667e-02 7.87523504e-02 + 7.87401398e-02 7.87279348e-02 7.87157355e-02 7.87035419e-02 7.86913540e-02 + 7.86791717e-02 7.86669951e-02 7.86548241e-02 7.86426588e-02 7.86304991e-02 + 7.86183450e-02 7.86061966e-02 7.85940538e-02 7.85819167e-02 7.85697851e-02 + 7.85576592e-02 7.85455389e-02 7.85334242e-02 7.85213151e-02 7.85092116e-02 + 7.84971137e-02 7.84850214e-02 7.84729347e-02 7.84608535e-02 7.84487780e-02 + 7.84367080e-02 7.84246436e-02 7.84125847e-02 7.84005314e-02 7.83884837e-02 + 7.83764415e-02 7.83644048e-02 7.83523737e-02 7.83403482e-02 7.83283282e-02 + 7.83163137e-02 7.83043047e-02 7.82923013e-02 7.82803034e-02 7.82683110e-02 + 7.82563241e-02 7.82443427e-02 7.82323668e-02 7.82203964e-02 7.82084315e-02 + 7.81964721e-02 7.81845182e-02 7.81725697e-02 7.81606268e-02 7.81486893e-02 + 7.81367572e-02 7.81248307e-02 7.81129096e-02 7.81009939e-02 7.80890837e-02 + 7.80771790e-02 7.80652797e-02 7.80533858e-02 7.80414974e-02 7.80296144e-02 + 7.80177368e-02 7.80058646e-02 7.79939979e-02 7.79821366e-02 7.79702807e-02 + 7.79584302e-02 7.79465851e-02 7.79347454e-02 7.79229111e-02 7.79110821e-02 + 7.78992586e-02 7.78874404e-02 7.78756277e-02 7.78638202e-02 7.78520182e-02 + 7.78402215e-02 7.78284302e-02 7.78166443e-02 7.78048637e-02 7.77930884e-02 + 7.77813185e-02 7.77695539e-02 7.77577947e-02 7.77460408e-02 7.77342922e-02 + 7.77225490e-02 7.77108111e-02 7.76990785e-02 7.76873512e-02 7.76756292e-02 + 7.76639125e-02 7.76522011e-02 7.76404950e-02 7.76287942e-02 7.76170987e-02 + 7.76054085e-02 7.75937236e-02 7.75820439e-02 7.75703695e-02 7.75587004e-02 + 7.75470365e-02 7.75353780e-02 7.75237246e-02 7.75120765e-02 7.75004337e-02 + 7.74887961e-02 7.74771637e-02 7.74655366e-02 7.74539147e-02 7.74422981e-02 + 7.74306867e-02 7.74190805e-02 7.74074795e-02 7.73958837e-02 7.73842931e-02 + 7.73727078e-02 7.73611276e-02 7.73495527e-02 7.73379829e-02 7.73264183e-02 + 7.73148589e-02 7.73033047e-02 7.72917557e-02 7.72802118e-02 7.72686732e-02 + 7.72571396e-02 7.72456113e-02 7.72340881e-02 7.72225701e-02 7.72110572e-02 + 7.71995494e-02 7.71880468e-02 7.71765494e-02 7.71650571e-02 7.71535699e-02 + 7.71420878e-02 7.71306109e-02 7.71191391e-02 7.71076724e-02 7.70962108e-02 + 7.70847543e-02 7.70733030e-02 7.70618567e-02 7.70504155e-02 7.70389795e-02 + 7.70275485e-02 7.70161226e-02 7.70047018e-02 7.69932860e-02 7.69818754e-02 + 7.69704698e-02 7.69590693e-02 7.69476738e-02 7.69362834e-02 7.69248981e-02 + 7.69135178e-02 7.69021426e-02 7.68907724e-02 7.68794073e-02 7.68680472e-02 + 7.68566921e-02 7.68453420e-02 7.68339970e-02 7.68226570e-02 7.68113221e-02 + 7.67999921e-02 7.67886672e-02 7.67773472e-02 7.67660323e-02 7.67547224e-02 + 7.67434174e-02 7.67321175e-02 7.67208226e-02 7.67095326e-02 7.66982476e-02 + 7.66869676e-02 7.66756926e-02 7.66644225e-02 7.66531574e-02 7.66418973e-02 + 7.66306422e-02 7.66193920e-02 7.66081467e-02 7.65969064e-02 7.65856711e-02 + 7.65744407e-02 7.65632152e-02 7.65519946e-02 7.65407790e-02 7.65295684e-02 + 7.65183626e-02 7.65071618e-02 7.64959659e-02 7.64847749e-02 7.64735888e-02 + 7.64624076e-02 7.64512313e-02 7.64400599e-02 7.64288935e-02 7.64177319e-02 + 7.64065752e-02 7.63954233e-02 7.63842764e-02 7.63731343e-02 7.63619972e-02 + 7.63508648e-02 7.63397374e-02 7.63286148e-02 7.63174971e-02 7.63063842e-02 + 7.62952762e-02 7.62841730e-02 7.62730747e-02 7.62619813e-02 7.62508926e-02 + 7.62398088e-02 7.62287298e-02 7.62176557e-02 7.62065864e-02 7.61955219e-02 + 7.61844622e-02 7.61734074e-02 7.61623573e-02 7.61513121e-02 7.61402716e-02 + 7.61292360e-02 7.61182052e-02 7.61071791e-02 7.60961579e-02 7.60851414e-02 + 7.60741297e-02 7.60631228e-02 7.60521207e-02 7.60411233e-02 7.60301307e-02 + 7.60191429e-02 7.60081598e-02 7.59971815e-02 7.59862080e-02 7.59752392e-02 + 7.59642751e-02 7.59533158e-02 7.59423613e-02 7.59314115e-02 7.59204664e-02 + 7.59095260e-02 7.58985904e-02 7.58876595e-02 7.58767333e-02 7.58658119e-02 + 7.58548951e-02 7.58439831e-02 7.58330758e-02 7.58221731e-02 7.58112752e-02 + 7.58003820e-02 7.57894935e-02 7.57786096e-02 7.57677305e-02 7.57568560e-02 + 7.57459862e-02 7.57351211e-02 7.57242607e-02 7.57134049e-02 7.57025538e-02 + 7.56917074e-02 7.56808656e-02 7.56700285e-02 7.56591961e-02 7.56483683e-02 + 7.56375451e-02 7.56267266e-02 7.56159127e-02 7.56051035e-02 7.55942989e-02 + 7.55834989e-02 7.55727035e-02 7.55619128e-02 7.55511267e-02 7.55403452e-02 + 7.55295684e-02 7.55187961e-02 7.55080285e-02 7.54972654e-02 7.54865070e-02 + 7.54757531e-02 7.54650039e-02 7.54542592e-02 7.54435192e-02 7.54327837e-02 + 7.54220528e-02 7.54113264e-02 7.54006047e-02 7.53898875e-02 7.53791749e-02 + 7.53684669e-02 7.53577634e-02 7.53470644e-02 7.53363701e-02 7.53256803e-02 + 7.53149950e-02 7.53043143e-02 7.52936381e-02 7.52829665e-02 7.52722994e-02 + 7.52616368e-02 7.52509787e-02 7.52403252e-02 7.52296762e-02 7.52190318e-02 + 7.52083918e-02 7.51977564e-02 7.51871255e-02 7.51764990e-02 7.51658771e-02 + 7.51552597e-02 7.51446468e-02 7.51340384e-02 7.51234344e-02 7.51128350e-02 + 7.51022400e-02 7.50916496e-02 7.50810636e-02 7.50704821e-02 7.50599050e-02 + 7.50493324e-02 7.50387643e-02 7.50282007e-02 7.50176415e-02 7.50070868e-02 + 7.49965365e-02 7.49859907e-02 7.49754493e-02 7.49649123e-02 7.49543799e-02 + 7.49438518e-02 7.49333282e-02 7.49228090e-02 7.49122942e-02 7.49017839e-02 + 7.48912780e-02 7.48807765e-02 7.48702794e-02 7.48597868e-02 7.48492985e-02 + 7.48388147e-02 7.48283352e-02 7.48178602e-02 7.48073895e-02 7.47969233e-02 + 7.47864614e-02 7.47760040e-02 7.47655509e-02 7.47551022e-02 7.47446579e-02 + 7.47342179e-02 7.47237824e-02 7.47133512e-02 7.47029243e-02 7.46925019e-02 + 7.46820838e-02 7.46716700e-02 7.46612606e-02 7.46508556e-02 7.46404549e-02 + 7.46300586e-02 7.46196666e-02 7.46092789e-02 7.45988956e-02 7.45885166e-02 + 7.45781419e-02 7.45677716e-02 7.45574056e-02 7.45470439e-02 7.45366865e-02 + 7.45263335e-02 7.45159847e-02 7.45056403e-02 7.44953002e-02 7.44849644e-02 + 7.44746329e-02 7.44643056e-02 7.44539827e-02 7.44436641e-02 7.44333497e-02 + 7.44230397e-02 7.44127339e-02 7.44024324e-02 7.43921352e-02 7.43818423e-02 + 7.43715536e-02 7.43612692e-02 7.43509890e-02 7.43407132e-02 7.43304416e-02 + 7.43201742e-02 7.43099111e-02 7.42996522e-02 7.42893976e-02 7.42791473e-02 + 7.42689011e-02 7.42586593e-02 7.42484216e-02 7.42381882e-02 7.42279590e-02 + 7.42177341e-02 7.42075133e-02 7.41972968e-02 7.41870845e-02 7.41768765e-02 + 7.41666726e-02 7.41564729e-02 7.41462775e-02 7.41360863e-02 7.41258992e-02 + 7.41157164e-02 7.41055377e-02 7.40953633e-02 7.40851930e-02 7.40750269e-02 + 7.40648650e-02 7.40547073e-02 7.40445538e-02 7.40344044e-02 7.40242592e-02 + 7.40141182e-02 7.40039814e-02 7.39938487e-02 7.39837202e-02 7.39735958e-02 + 7.39634756e-02 7.39533595e-02 7.39432476e-02 7.39331398e-02 7.39230362e-02 + 7.39129367e-02 7.39028414e-02 7.38927502e-02 7.38826631e-02 7.38725802e-02 + 7.38625014e-02 7.38524267e-02 7.38423561e-02 7.38322896e-02 7.38222273e-02 + 7.38121691e-02 7.38021150e-02 7.37920650e-02 7.37820191e-02 7.37719773e-02 + 7.37619396e-02 7.37519060e-02 7.37418765e-02 7.37318510e-02 7.37218297e-02 + 7.37118125e-02 7.37017993e-02 7.36917902e-02 7.36817852e-02 7.36717843e-02 + 7.36617874e-02 7.36517946e-02 7.36418059e-02 7.36318212e-02 7.36218406e-02 + 7.36118641e-02 7.36018916e-02 7.35919231e-02 7.35819587e-02 7.35719984e-02 + 7.35620421e-02 7.35520898e-02 7.35421416e-02 7.35321974e-02 7.35222572e-02 + 7.35123211e-02 7.35023890e-02 7.34924610e-02 7.34825369e-02 7.34726169e-02 + 7.34627009e-02 7.34527889e-02 7.34428809e-02 7.34329769e-02 7.34230769e-02 + 7.34131809e-02 7.34032890e-02 7.33934010e-02 7.33835170e-02 7.33736370e-02 + 7.33637610e-02 7.33538890e-02 7.33440210e-02 7.33341569e-02 7.33242969e-02 + 7.33144408e-02 7.33045886e-02 7.32947405e-02 7.32848963e-02 7.32750561e-02 + 7.32652199e-02 7.32553876e-02 7.32455592e-02 7.32357348e-02 7.32259144e-02 + 7.32160979e-02 7.32062854e-02 7.31964768e-02 7.31866722e-02 7.31768715e-02 + 7.31670747e-02 7.31572819e-02 7.31474930e-02 7.31377080e-02 7.31279269e-02 + 7.31181498e-02 7.31083766e-02 7.30986073e-02 7.30888419e-02 7.30790805e-02 + 7.30693229e-02 7.30595693e-02 7.30498195e-02 7.30400737e-02 7.30303318e-02 + 7.30205937e-02 7.30108596e-02 7.30011293e-02 7.29914030e-02 7.29816805e-02 + 7.29719619e-02 7.29622472e-02 7.29525364e-02 7.29428294e-02 7.29331263e-02 + 7.29234271e-02 7.29137318e-02 7.29040403e-02 7.28943527e-02 7.28846689e-02 + 7.28749890e-02 7.28653130e-02 7.28556408e-02 7.28459725e-02 7.28363080e-02 + 7.28266473e-02 7.28169905e-02 7.28073376e-02 7.27976885e-02 7.27880432e-02 + 7.27784017e-02 7.27687641e-02 7.27591303e-02 7.27495003e-02 7.27398742e-02 + 7.27302519e-02 7.27206334e-02 7.27110187e-02 7.27014078e-02 7.26918007e-02 + 7.26821975e-02 7.26725980e-02 7.26630023e-02 7.26534105e-02 7.26438224e-02 + 7.26342382e-02 7.26246577e-02 7.26150810e-02 7.26055081e-02 7.25959390e-02 + 7.25863737e-02 7.25768121e-02 7.25672544e-02 7.25577004e-02 7.25481502e-02 + 7.25386037e-02 7.25290610e-02 7.25195221e-02 7.25099870e-02 7.25004556e-02 + 7.24909279e-02 7.24814040e-02 7.24718839e-02 7.24623675e-02 7.24528549e-02 + 7.24433460e-02 7.24338409e-02 7.24243395e-02 7.24148418e-02 7.24053479e-02 + 7.23958577e-02 7.23863712e-02 7.23768885e-02 7.23674095e-02 7.23579342e-02 + 7.23484626e-02 7.23389948e-02 7.23295307e-02 7.23200702e-02 7.23106135e-02 + 7.23011605e-02 7.22917112e-02 7.22822656e-02 7.22728238e-02 7.22633856e-02 + 7.22539511e-02 7.22445203e-02 7.22350932e-02 7.22256698e-02 7.22162500e-02 + 7.22068340e-02 7.21974216e-02 7.21880130e-02 7.21786080e-02 7.21692066e-02 + 7.21598090e-02 7.21504150e-02 7.21410247e-02 7.21316380e-02 7.21222550e-02 + 7.21128757e-02 7.21035000e-02 7.20941280e-02 7.20847596e-02 7.20753949e-02 + 7.20660339e-02 7.20566765e-02 7.20473227e-02 7.20379726e-02 7.20286261e-02 + 7.20192832e-02 7.20099440e-02 7.20006084e-02 7.19912765e-02 7.19819481e-02 + 7.19726234e-02 7.19633024e-02 7.19539849e-02 7.19446711e-02 7.19353608e-02 + 7.19260542e-02 7.19167512e-02 7.19074518e-02 7.18981560e-02 7.18888639e-02 + 7.18795753e-02 7.18702903e-02 7.18610089e-02 7.18517311e-02 7.18424569e-02 + 7.18331863e-02 7.18239193e-02 7.18146559e-02 7.18053960e-02 7.17961398e-02 + 7.17868871e-02 7.17776380e-02 7.17683924e-02 7.17591505e-02 7.17499121e-02 + 7.17406772e-02 7.17314460e-02 7.17222183e-02 7.17129941e-02 7.17037735e-02 + 7.16945565e-02 7.16853430e-02 7.16761331e-02 7.16669267e-02 7.16577239e-02 + 7.16485246e-02 7.16393289e-02 7.16301367e-02 7.16209480e-02 7.16117629e-02 + 7.16025813e-02 7.15934032e-02 7.15842287e-02 7.15750577e-02 7.15658902e-02 + 7.15567262e-02 7.15475658e-02 7.15384089e-02 7.15292555e-02 7.15201056e-02 + 7.15109592e-02 7.15018163e-02 7.14926769e-02 7.14835410e-02 7.14744087e-02 + 7.14652798e-02 7.14561544e-02 7.14470325e-02 7.14379142e-02 7.14287993e-02 + 7.14196878e-02 7.14105799e-02 7.14014755e-02 7.13923745e-02 7.13832770e-02 + 7.13741830e-02 7.13650925e-02 7.13560055e-02 7.13469219e-02 7.13378418e-02 + 7.13287651e-02 7.13196919e-02 7.13106222e-02 7.13015559e-02 7.12924931e-02 + 7.12834338e-02 7.12743779e-02 7.12653254e-02 7.12562764e-02 7.12472309e-02 + 7.12381888e-02 7.12291501e-02 7.12201149e-02 7.12110831e-02 7.12020547e-02 + 7.11930298e-02 7.11840083e-02 7.11749902e-02 7.11659756e-02 7.11569644e-02 + 7.11479566e-02 7.11389522e-02 7.11299512e-02 7.11209537e-02 7.11119596e-02 + 7.11029689e-02 7.10939816e-02 7.10849977e-02 7.10760172e-02 7.10670401e-02 + 7.10580664e-02 7.10490961e-02 7.10401292e-02 7.10311657e-02 7.10222056e-02 + 7.10132489e-02 7.10042956e-02 7.09953456e-02 7.09863990e-02 7.09774559e-02 + 7.09685161e-02 7.09595796e-02 7.09506466e-02 7.09417169e-02 7.09327906e-02 + 7.09238677e-02 7.09149481e-02 7.09060319e-02 7.08971191e-02 7.08882096e-02 + 7.08793035e-02 7.08704007e-02 7.08615013e-02 7.08526052e-02 7.08437125e-02 + 7.08348231e-02 7.08259371e-02 7.08170544e-02 7.08081751e-02 7.07992991e-02 + 7.07904264e-02 7.07815571e-02 7.07726911e-02 7.07638285e-02 7.07549691e-02 + 7.07461131e-02 7.07372604e-02 7.07284111e-02 7.07195650e-02 7.07107223e-02 + 7.07018829e-02 7.06930468e-02 7.06842141e-02 7.06753846e-02 7.06665584e-02 + 7.06577356e-02 7.06489160e-02 7.06400998e-02 7.06312868e-02 7.06224772e-02 + 7.06136708e-02 7.06048678e-02 7.05960680e-02 7.05872715e-02 7.05784783e-02 + 7.05696884e-02 7.05609018e-02 7.05521184e-02 7.05433384e-02 7.05345616e-02 + 1.00000000e+00 9.75894263e-01 9.53451752e-01 9.32489601e-01 9.12851907e-01 + 8.94404826e-01 8.77032714e-01 8.60635068e-01 8.45124065e-01 8.30422576e-01 + 8.16462554e-01 8.03183696e-01 7.90532350e-01 7.78460602e-01 7.66925506e-01 + 7.55888443e-01 7.45314577e-01 7.35172390e-01 7.25433287e-01 7.16071258e-01 + 7.07062580e-01 6.98385572e-01 6.90020370e-01 6.81948734e-01 6.74153887e-01 + 6.66620364e-01 6.59333880e-01 6.52281224e-01 6.45450150e-01 6.38829295e-01 + 6.32408091e-01 6.26176704e-01 6.20125961e-01 6.14247300e-01 6.08532716e-01 + 6.02974715e-01 5.97566276e-01 5.92300808e-01 5.87172122e-01 5.82174396e-01 + 5.77302151e-01 5.72550221e-01 5.67913735e-01 5.63388093e-01 5.58968948e-01 + 5.54652188e-01 5.50433918e-01 5.46310451e-01 5.42278287e-01 5.38334105e-01 + 5.34474753e-01 5.30697232e-01 5.26998691e-01 5.23376415e-01 5.19827818e-01 + 5.16350438e-01 5.12941922e-01 5.09600027e-01 5.06322612e-01 5.03107629e-01 + 4.99953120e-01 4.96857213e-01 4.93818117e-01 4.90834114e-01 4.87903560e-01 + 4.85024878e-01 4.82196556e-01 4.79417141e-01 4.76685242e-01 4.73999519e-01 + 4.71358685e-01 4.68761505e-01 4.66206788e-01 4.63693390e-01 4.61220209e-01 + 4.58786184e-01 4.56390292e-01 4.54031548e-01 4.51709002e-01 4.49421737e-01 + 4.47168870e-01 4.44949545e-01 4.42762941e-01 4.40608259e-01 4.38484731e-01 + 4.36391613e-01 4.34328187e-01 4.32293756e-01 4.30287649e-01 4.28309213e-01 + 4.26357819e-01 4.24432857e-01 4.22533734e-01 4.20659877e-01 4.18810733e-01 + 4.16985761e-01 4.15184441e-01 4.13406264e-01 4.11650741e-01 4.09917394e-01 + 4.08205761e-01 4.06515390e-01 4.04845847e-01 4.03196706e-01 4.01567556e-01 + 3.99957996e-01 3.98367636e-01 3.96796098e-01 3.95243014e-01 3.93708024e-01 + 3.92190780e-01 3.90690944e-01 3.89208184e-01 3.87742180e-01 3.86292617e-01 + 3.84859191e-01 3.83441605e-01 3.82039569e-01 3.80652800e-01 3.79281024e-01 + 3.77923973e-01 3.76581385e-01 3.75253005e-01 3.73938583e-01 3.72637878e-01 + 3.71350652e-01 3.70076675e-01 3.68815719e-01 3.67567566e-01 3.66332000e-01 + 3.65108810e-01 3.63897792e-01 3.62698745e-01 3.61511473e-01 3.60335785e-01 + 3.59171493e-01 3.58018415e-01 3.56876371e-01 3.55745187e-01 3.54624691e-01 + 3.53514717e-01 3.52415101e-01 3.51325683e-01 3.50246306e-01 3.49176816e-01 + 3.48117064e-01 3.47066903e-01 3.46026189e-01 3.44994782e-01 3.43972542e-01 + 3.42959337e-01 3.41955032e-01 3.40959498e-01 3.39972609e-01 3.38994241e-01 + 3.38024270e-01 3.37062579e-01 3.36109049e-01 3.35163566e-01 3.34226018e-01 + 3.33296293e-01 3.32374284e-01 3.31459885e-01 3.30552992e-01 3.29653502e-01 + 3.28761315e-01 3.27876333e-01 3.26998460e-01 3.26127600e-01 3.25263662e-01 + 3.24406553e-01 3.23556184e-01 3.22712468e-01 3.21875318e-01 3.21044649e-01 + 3.20220378e-01 3.19402424e-01 3.18590706e-01 3.17785145e-01 3.16985665e-01 + 3.16192188e-01 3.15404639e-01 3.14622947e-01 3.13847038e-01 3.13076841e-01 + 3.12312287e-01 3.11553306e-01 3.10799833e-01 3.10051800e-01 3.09309142e-01 + 3.08571795e-01 3.07839697e-01 3.07112784e-01 3.06390997e-01 3.05674275e-01 + 3.04962560e-01 3.04255793e-01 3.03553917e-01 3.02856876e-01 3.02164615e-01 + 3.01477079e-01 3.00794216e-01 3.00115971e-01 2.99442294e-01 2.98773134e-01 + 2.98108439e-01 2.97448161e-01 2.96792252e-01 2.96140662e-01 2.95493345e-01 + 2.94850254e-01 2.94211344e-01 2.93576570e-01 2.92945886e-01 2.92319250e-01 + 2.91696618e-01 2.91077947e-01 2.90463197e-01 2.89852325e-01 2.89245291e-01 + 2.88642055e-01 2.88042577e-01 2.87446820e-01 2.86854743e-01 2.86266311e-01 + 2.85681484e-01 2.85100228e-01 2.84522505e-01 2.83948280e-01 2.83377517e-01 + 2.82810183e-01 2.82246243e-01 2.81685662e-01 2.81128409e-01 2.80574450e-01 + 2.80023753e-01 2.79476286e-01 2.78932017e-01 2.78390916e-01 2.77852951e-01 + 2.77318094e-01 2.76786313e-01 2.76257580e-01 2.75731865e-01 2.75209140e-01 + 2.74689377e-01 2.74172548e-01 2.73658625e-01 2.73147581e-01 2.72639389e-01 + 2.72134024e-01 2.71631458e-01 2.71131667e-01 2.70634624e-01 2.70140305e-01 + 2.69648684e-01 2.69159738e-01 2.68673442e-01 2.68189772e-01 2.67708706e-01 + 2.67230218e-01 2.66754287e-01 2.66280890e-01 2.65810005e-01 2.65341608e-01 + 2.64875680e-01 2.64412197e-01 2.63951138e-01 2.63492483e-01 2.63036211e-01 + 2.62582301e-01 2.62130732e-01 2.61681486e-01 2.61234541e-01 2.60789879e-01 + 2.60347479e-01 2.59907323e-01 2.59469393e-01 2.59033668e-01 2.58600131e-01 + 2.58168764e-01 2.57739549e-01 2.57312467e-01 2.56887501e-01 2.56464633e-01 + 2.56043847e-01 2.55625126e-01 2.55208452e-01 2.54793809e-01 2.54381180e-01 + 2.53970550e-01 2.53561902e-01 2.53155220e-01 2.52750489e-01 2.52347693e-01 + 2.51946816e-01 2.51547844e-01 2.51150761e-01 2.50755553e-01 2.50362204e-01 + 2.49970701e-01 2.49581029e-01 2.49193173e-01 2.48807120e-01 2.48422856e-01 + 2.48040367e-01 2.47659639e-01 2.47280658e-01 2.46903413e-01 2.46527888e-01 + 2.46154072e-01 2.45781951e-01 2.45411513e-01 2.45042745e-01 2.44675634e-01 + 2.44310168e-01 2.43946335e-01 2.43584122e-01 2.43223518e-01 2.42864511e-01 + 2.42507089e-01 2.42151241e-01 2.41796954e-01 2.41444218e-01 2.41093021e-01 + 2.40743352e-01 2.40395201e-01 2.40048555e-01 2.39703404e-01 2.39359739e-01 + 2.39017547e-01 2.38676818e-01 2.38337542e-01 2.37999710e-01 2.37663309e-01 + 2.37328332e-01 2.36994766e-01 2.36662603e-01 2.36331833e-01 2.36002446e-01 + 2.35674432e-01 2.35347783e-01 2.35022487e-01 2.34698537e-01 2.34375923e-01 + 2.34054635e-01 2.33734666e-01 2.33416004e-01 2.33098643e-01 2.32782573e-01 + 2.32467784e-01 2.32154270e-01 2.31842020e-01 2.31531028e-01 2.31221283e-01 + 2.30912778e-01 2.30605504e-01 2.30299454e-01 2.29994620e-01 2.29690992e-01 + 2.29388564e-01 2.29087328e-01 2.28787275e-01 2.28488398e-01 2.28190689e-01 + 2.27894141e-01 2.27598746e-01 2.27304497e-01 2.27011386e-01 2.26719406e-01 + 2.26428550e-01 2.26138810e-01 2.25850180e-01 2.25562652e-01 2.25276219e-01 + 2.24990875e-01 2.24706613e-01 2.24423425e-01 2.24141305e-01 2.23860246e-01 + 2.23580243e-01 2.23301287e-01 2.23023372e-01 2.22746493e-01 2.22470643e-01 + 2.22195814e-01 2.21922002e-01 2.21649200e-01 2.21377401e-01 2.21106599e-01 + 2.20836789e-01 2.20567964e-01 2.20300119e-01 2.20033247e-01 2.19767342e-01 + 2.19502400e-01 2.19238413e-01 2.18975376e-01 2.18713284e-01 2.18452130e-01 + 2.18191910e-01 2.17932618e-01 2.17674247e-01 2.17416794e-01 2.17160252e-01 + 2.16904616e-01 2.16649880e-01 2.16396040e-01 2.16143090e-01 2.15891025e-01 + 2.15639840e-01 2.15389530e-01 2.15140089e-01 2.14891513e-01 2.14643796e-01 + 2.14396935e-01 2.14150923e-01 2.13905756e-01 2.13661429e-01 2.13417937e-01 + 2.13175276e-01 2.12933441e-01 2.12692427e-01 2.12452229e-01 2.12212843e-01 + 2.11974265e-01 2.11736490e-01 2.11499513e-01 2.11263330e-01 2.11027936e-01 + 2.10793328e-01 2.10559500e-01 2.10326449e-01 2.10094169e-01 2.09862658e-01 + 2.09631910e-01 2.09401922e-01 2.09172689e-01 2.08944208e-01 2.08716473e-01 + 2.08489481e-01 2.08263229e-01 2.08037711e-01 2.07812924e-01 2.07588865e-01 + 2.07365528e-01 2.07142911e-01 2.06921010e-01 2.06699820e-01 2.06479337e-01 + 2.06259559e-01 2.06040481e-01 2.05822100e-01 2.05604412e-01 2.05387413e-01 + 2.05171099e-01 2.04955468e-01 2.04740515e-01 2.04526237e-01 2.04312630e-01 + 2.04099691e-01 2.03887417e-01 2.03675803e-01 2.03464847e-01 2.03254545e-01 + 2.03044894e-01 2.02835891e-01 2.02627531e-01 2.02419812e-01 2.02212731e-01 + 2.02006284e-01 2.01800468e-01 2.01595280e-01 2.01390716e-01 2.01186774e-01 + 2.00983451e-01 2.00780742e-01 2.00578646e-01 2.00377158e-01 2.00176277e-01 + 1.99975998e-01 1.99776320e-01 1.99577238e-01 1.99378751e-01 1.99180854e-01 + 1.98983546e-01 1.98786822e-01 1.98590681e-01 1.98395120e-01 1.98200135e-01 + 1.98005724e-01 1.97811884e-01 1.97618612e-01 1.97425905e-01 1.97233761e-01 + 1.97042177e-01 1.96851151e-01 1.96660678e-01 1.96470758e-01 1.96281387e-01 + 1.96092562e-01 1.95904281e-01 1.95716541e-01 1.95529341e-01 1.95342676e-01 + 1.95156545e-01 1.94970945e-01 1.94785873e-01 1.94601328e-01 1.94417306e-01 + 1.94233805e-01 1.94050823e-01 1.93868357e-01 1.93686404e-01 1.93504963e-01 + 1.93324031e-01 1.93143606e-01 1.92963685e-01 1.92784265e-01 1.92605345e-01 + 1.92426923e-01 1.92248995e-01 1.92071560e-01 1.91894616e-01 1.91718159e-01 + 1.91542189e-01 1.91366702e-01 1.91191696e-01 1.91017170e-01 1.90843121e-01 + 1.90669546e-01 1.90496445e-01 1.90323814e-01 1.90151652e-01 1.89979956e-01 + 1.89808724e-01 1.89637954e-01 1.89467644e-01 1.89297793e-01 1.89128397e-01 + 1.88959456e-01 1.88790966e-01 1.88622926e-01 1.88455335e-01 1.88288189e-01 + 1.88121487e-01 1.87955227e-01 1.87789407e-01 1.87624025e-01 1.87459079e-01 + 1.87294568e-01 1.87130489e-01 1.86966840e-01 1.86803620e-01 1.86640827e-01 + 1.86478458e-01 1.86316513e-01 1.86154989e-01 1.85993884e-01 1.85833197e-01 + 1.85672925e-01 1.85513068e-01 1.85353622e-01 1.85194587e-01 1.85035961e-01 + 1.84877742e-01 1.84719927e-01 1.84562517e-01 1.84405508e-01 1.84248899e-01 + 1.84092688e-01 1.83936874e-01 1.83781455e-01 1.83626429e-01 1.83471795e-01 + 1.83317551e-01 1.83163695e-01 1.83010226e-01 1.82857142e-01 1.82704442e-01 + 1.82552123e-01 1.82400185e-01 1.82248626e-01 1.82097444e-01 1.81946637e-01 + 1.81796204e-01 1.81646144e-01 1.81496455e-01 1.81347136e-01 1.81198184e-01 + 1.81049599e-01 1.80901378e-01 1.80753522e-01 1.80606027e-01 1.80458892e-01 + 1.80312117e-01 1.80165699e-01 1.80019637e-01 1.79873930e-01 1.79728576e-01 + 1.79583574e-01 1.79438922e-01 1.79294620e-01 1.79150665e-01 1.79007056e-01 + 1.78863792e-01 1.78720871e-01 1.78578292e-01 1.78436054e-01 1.78294156e-01 + 1.78152595e-01 1.78011371e-01 1.77870482e-01 1.77729928e-01 1.77589706e-01 + 1.77449815e-01 1.77310255e-01 1.77171023e-01 1.77032119e-01 1.76893540e-01 + 1.76755287e-01 1.76617358e-01 1.76479751e-01 1.76342465e-01 1.76205499e-01 + 1.76068851e-01 1.75932521e-01 1.75796507e-01 1.75660808e-01 1.75525423e-01 + 1.75390351e-01 1.75255589e-01 1.75121138e-01 1.74986996e-01 1.74853162e-01 + 1.74719634e-01 1.74586412e-01 1.74453494e-01 1.74320879e-01 1.74188566e-01 + 1.74056554e-01 1.73924842e-01 1.73793428e-01 1.73662312e-01 1.73531492e-01 + 1.73400967e-01 1.73270736e-01 1.73140798e-01 1.73011152e-01 1.72881797e-01 + 1.72752732e-01 1.72623955e-01 1.72495466e-01 1.72367263e-01 1.72239346e-01 + 1.72111713e-01 1.71984363e-01 1.71857296e-01 1.71730510e-01 1.71604004e-01 + 1.71477777e-01 1.71351828e-01 1.71226157e-01 1.71100761e-01 1.70975641e-01 + 1.70850795e-01 1.70726222e-01 1.70601921e-01 1.70477891e-01 1.70354131e-01 + 1.70230640e-01 1.70107418e-01 1.69984462e-01 1.69861773e-01 1.69739349e-01 + 1.69617190e-01 1.69495294e-01 1.69373660e-01 1.69252288e-01 1.69131176e-01 + 1.69010324e-01 1.68889731e-01 1.68769395e-01 1.68649317e-01 1.68529494e-01 + 1.68409926e-01 1.68290613e-01 1.68171552e-01 1.68052744e-01 1.67934188e-01 + 1.67815882e-01 1.67697825e-01 1.67580018e-01 1.67462458e-01 1.67345146e-01 + 1.67228079e-01 1.67111258e-01 1.66994682e-01 1.66878349e-01 1.66762259e-01 + 1.66646411e-01 1.66530804e-01 1.66415437e-01 1.66300309e-01 1.66185421e-01 + 1.66070770e-01 1.65956356e-01 1.65842178e-01 1.65728235e-01 1.65614527e-01 + 1.65501053e-01 1.65387812e-01 1.65274803e-01 1.65162025e-01 1.65049477e-01 + 1.64937160e-01 1.64825071e-01 1.64713211e-01 1.64601578e-01 1.64490172e-01 + 1.64378991e-01 1.64268036e-01 1.64157305e-01 1.64046798e-01 1.63936514e-01 + 1.63826452e-01 1.63716611e-01 1.63606991e-01 1.63497591e-01 1.63388409e-01 + 1.63279447e-01 1.63170702e-01 1.63062174e-01 1.62953862e-01 1.62845766e-01 + 1.62737885e-01 1.62630217e-01 1.62522764e-01 1.62415523e-01 1.62308493e-01 + 1.62201676e-01 1.62095069e-01 1.61988671e-01 1.61882483e-01 1.61776504e-01 + 1.61670732e-01 1.61565168e-01 1.61459810e-01 1.61354658e-01 1.61249711e-01 + 1.61144969e-01 1.61040431e-01 1.60936095e-01 1.60831963e-01 1.60728032e-01 + 1.60624302e-01 1.60520773e-01 1.60417444e-01 1.60314314e-01 1.60211383e-01 + 1.60108650e-01 1.60006114e-01 1.59903775e-01 1.59801632e-01 1.59699684e-01 + 1.59597932e-01 1.59496373e-01 1.59395009e-01 1.59293837e-01 1.59192858e-01 + 1.59092070e-01 1.58991474e-01 1.58891068e-01 1.58790852e-01 1.58690826e-01 + 1.58590988e-01 1.58491339e-01 1.58391877e-01 1.58292602e-01 1.58193514e-01 + 1.58094612e-01 1.57995894e-01 1.57897362e-01 1.57799013e-01 1.57700849e-01 + 1.57602867e-01 1.57505067e-01 1.57407450e-01 1.57310013e-01 1.57212758e-01 + 1.57115682e-01 1.57018786e-01 1.56922069e-01 1.56825531e-01 1.56729171e-01 + 1.56632988e-01 1.56536982e-01 1.56441152e-01 1.56345498e-01 1.56250019e-01 + 1.56154715e-01 1.56059585e-01 1.55964629e-01 1.55869846e-01 1.55775235e-01 + 1.55680797e-01 1.55586530e-01 1.55492434e-01 1.55398509e-01 1.55304754e-01 + 1.55211168e-01 1.55117751e-01 1.55024502e-01 1.54931422e-01 1.54838509e-01 + 1.54745763e-01 1.54653183e-01 1.54560770e-01 1.54468522e-01 1.54376439e-01 + 1.54284520e-01 1.54192765e-01 1.54101174e-01 1.54009746e-01 1.53918481e-01 + 1.53827377e-01 1.53736435e-01 1.53645654e-01 1.53555034e-01 1.53464574e-01 + 1.53374274e-01 1.53284132e-01 1.53194150e-01 1.53104326e-01 1.53014660e-01 + 1.52925151e-01 1.52835798e-01 1.52746603e-01 1.52657563e-01 1.52568679e-01 + 1.52479950e-01 1.52391376e-01 1.52302955e-01 1.52214689e-01 1.52126576e-01 + 1.52038615e-01 1.51950807e-01 1.51863151e-01 1.51775647e-01 1.51688293e-01 + 1.51601091e-01 1.51514038e-01 1.51427135e-01 1.51340382e-01 1.51253778e-01 + 1.51167322e-01 1.51081014e-01 1.50994854e-01 1.50908841e-01 1.50822975e-01 + 1.50737255e-01 1.50651681e-01 1.50566253e-01 1.50480970e-01 1.50395832e-01 + 1.50310838e-01 1.50225988e-01 1.50141281e-01 1.50056718e-01 1.49972298e-01 + 1.49888019e-01 1.49803883e-01 1.49719888e-01 1.49636035e-01 1.49552322e-01 + 1.49468749e-01 1.49385316e-01 1.49302023e-01 1.49218869e-01 1.49135854e-01 + 1.49052977e-01 1.48970239e-01 1.48887638e-01 1.48805174e-01 1.48722847e-01 + 1.48640656e-01 1.48558602e-01 1.48476683e-01 1.48394900e-01 1.48313252e-01 + 1.48231738e-01 1.48150359e-01 1.48069113e-01 1.47988001e-01 1.47907022e-01 + 1.47826176e-01 1.47745463e-01 1.47664881e-01 1.47584431e-01 1.47504113e-01 + 1.47423925e-01 1.47343868e-01 1.47263942e-01 1.47184145e-01 1.47104478e-01 + 1.47024940e-01 1.46945531e-01 1.46866251e-01 1.46787099e-01 1.46708074e-01 + 1.46629177e-01 1.46550407e-01 1.46471764e-01 1.46393248e-01 1.46314857e-01 + 1.46236593e-01 1.46158454e-01 1.46080440e-01 1.46002551e-01 1.45924786e-01 + 1.45847145e-01 1.45769628e-01 1.45692235e-01 1.45614965e-01 1.45537817e-01 + 1.45460792e-01 1.45383890e-01 1.45307109e-01 1.45230449e-01 1.45153911e-01 + 1.45077494e-01 1.45001197e-01 1.44925021e-01 1.44848964e-01 1.44773027e-01 + 1.44697209e-01 1.44621511e-01 1.44545931e-01 1.44470469e-01 1.44395126e-01 + 1.44319900e-01 1.44244791e-01 1.44169800e-01 1.44094926e-01 1.44020168e-01 + 1.43945527e-01 1.43871001e-01 1.43796591e-01 1.43722296e-01 1.43648117e-01 + 1.43574052e-01 1.43500101e-01 1.43426265e-01 1.43352542e-01 1.43278934e-01 + 1.43205438e-01 1.43132055e-01 1.43058785e-01 1.42985628e-01 1.42912583e-01 + 1.42839649e-01 1.42766827e-01 1.42694116e-01 1.42621516e-01 1.42549027e-01 + 1.42476649e-01 1.42404380e-01 1.42332222e-01 1.42260172e-01 1.42188233e-01 + 1.42116402e-01 1.42044680e-01 1.41973066e-01 1.41901561e-01 1.41830164e-01 + 1.41758874e-01 1.41687692e-01 1.41616617e-01 1.41545648e-01 1.41474786e-01 + 1.41404031e-01 1.41333382e-01 1.41262838e-01 1.41192400e-01 1.41122067e-01 + 1.41051839e-01 1.40981716e-01 1.40911698e-01 1.40841783e-01 1.40771973e-01 + 1.40702266e-01 1.40632663e-01 1.40563163e-01 1.40493766e-01 1.40424471e-01 + 1.40355279e-01 1.40286189e-01 1.40217202e-01 1.40148315e-01 1.40079531e-01 + 1.40010847e-01 1.39942264e-01 1.39873782e-01 1.39805401e-01 1.39737119e-01 + 1.39668938e-01 1.39600856e-01 1.39532874e-01 1.39464991e-01 1.39397207e-01 + 1.39329522e-01 1.39261935e-01 1.39194446e-01 1.39127056e-01 1.39059763e-01 + 1.38992568e-01 1.38925470e-01 1.38858469e-01 1.38791565e-01 1.38724758e-01 + 1.38658047e-01 1.38591432e-01 1.38524913e-01 1.38458490e-01 1.38392162e-01 + 1.38325930e-01 1.38259792e-01 1.38193750e-01 1.38127801e-01 1.38061947e-01 + 1.37996188e-01 1.37930522e-01 1.37864950e-01 1.37799471e-01 1.37734085e-01 + 1.37668793e-01 1.37603593e-01 1.37538485e-01 1.37473471e-01 1.37408548e-01 + 1.37343717e-01 1.37278977e-01 1.37214330e-01 1.37149773e-01 1.37085308e-01 + 1.37020933e-01 1.36956649e-01 1.36892455e-01 1.36828351e-01 1.36764338e-01 + 1.36700414e-01 1.36636580e-01 1.36572835e-01 1.36509179e-01 1.36445612e-01 + 1.36382134e-01 1.36318745e-01 1.36255443e-01 1.36192230e-01 1.36129105e-01 + 1.36066067e-01 1.36003117e-01 1.35940254e-01 1.35877478e-01 1.35814789e-01 + 1.35752187e-01 1.35689672e-01 1.35627242e-01 1.35564899e-01 1.35502641e-01 + 1.35440470e-01 1.35378384e-01 1.35316383e-01 1.35254467e-01 1.35192636e-01 + 1.35130890e-01 1.35069228e-01 1.35007651e-01 1.34946158e-01 1.34884748e-01 + 1.34823423e-01 1.34762181e-01 1.34701022e-01 1.34639947e-01 1.34578955e-01 + 1.34518045e-01 1.34457218e-01 1.34396474e-01 1.34335812e-01 1.34275232e-01 + 1.34214733e-01 1.34154317e-01 1.34093982e-01 1.34033728e-01 1.33973556e-01 + 1.33913464e-01 1.33853453e-01 1.33793523e-01 1.33733673e-01 1.33673904e-01 + 1.33614214e-01 1.33554605e-01 1.33495075e-01 1.33435625e-01 1.33376254e-01 + 1.33316962e-01 1.33257749e-01 1.33198615e-01 1.33139560e-01 1.33080583e-01 + 1.33021685e-01 1.32962864e-01 1.32904122e-01 1.32845457e-01 1.32786870e-01 + 1.32728361e-01 1.32669928e-01 1.32611573e-01 1.32553295e-01 1.32495093e-01 + 1.32436968e-01 1.32378920e-01 1.32320948e-01 1.32263052e-01 1.32205232e-01 + 1.32147487e-01 1.32089818e-01 1.32032225e-01 1.31974707e-01 1.31917264e-01 + 1.31859896e-01 1.31802603e-01 1.31745384e-01 1.31688240e-01 1.31631170e-01 + 1.31574174e-01 1.31517252e-01 1.31460404e-01 1.31403630e-01 1.31346929e-01 + 1.31290301e-01 1.31233747e-01 1.31177266e-01 1.31120857e-01 1.31064522e-01 + 1.31008258e-01 1.30952068e-01 1.30895949e-01 1.30839903e-01 1.30783928e-01 + 1.30728025e-01 1.30672194e-01 1.30616435e-01 1.30560746e-01 1.30505129e-01 + 1.30449583e-01 1.30394108e-01 1.30338703e-01 1.30283369e-01 1.30228105e-01 + 1.30172912e-01 1.30117789e-01 1.30062736e-01 1.30007752e-01 1.29952839e-01 + 1.29897994e-01 1.29843219e-01 1.29788514e-01 1.29733877e-01 1.29679310e-01 + 1.29624811e-01 1.29570381e-01 1.29516019e-01 1.29461726e-01 1.29407501e-01 + 1.29353344e-01 1.29299255e-01 1.29245234e-01 1.29191280e-01 1.29137394e-01 + 1.29083575e-01 1.29029824e-01 1.28976140e-01 1.28922522e-01 1.28868972e-01 + 1.28815488e-01 1.28762070e-01 1.28708719e-01 1.28655435e-01 1.28602216e-01 + 1.28549063e-01 1.28495977e-01 1.28442955e-01 1.28390000e-01 1.28337110e-01 + 1.28284285e-01 1.28231526e-01 1.28178831e-01 1.28126202e-01 1.28073637e-01 + 1.28021137e-01 1.27968701e-01 1.27916330e-01 1.27864023e-01 1.27811780e-01 + 1.27759601e-01 1.27707486e-01 1.27655434e-01 1.27603447e-01 1.27551522e-01 + 1.27499661e-01 1.27447864e-01 1.27396129e-01 1.27344457e-01 1.27292848e-01 + 1.27241302e-01 1.27189818e-01 1.27138397e-01 1.27087038e-01 1.27035742e-01 + 1.26984507e-01 1.26933334e-01 1.26882223e-01 1.26831174e-01 1.26780187e-01 + 1.26729260e-01 1.26678396e-01 1.26627592e-01 1.26576849e-01 1.26526168e-01 + 1.26475547e-01 1.26424987e-01 1.26374487e-01 1.26324048e-01 1.26273670e-01 + 1.26223351e-01 1.26173093e-01 1.26122894e-01 1.26072756e-01 1.26022677e-01 + 1.25972658e-01 1.25922698e-01 1.25872798e-01 1.25822957e-01 1.25773176e-01 + 1.25723453e-01 1.25673789e-01 1.25624184e-01 1.25574638e-01 1.25525150e-01 + 1.25475721e-01 1.25426350e-01 1.25377037e-01 1.25327782e-01 1.25278586e-01 + 1.25229447e-01 1.25180366e-01 1.25131343e-01 1.25082377e-01 1.25033469e-01 + 1.24984618e-01 1.24935824e-01 1.24887088e-01 1.24838408e-01 1.24789785e-01 + 1.24741219e-01 1.24692710e-01 1.24644257e-01 1.24595861e-01 1.24547521e-01 + 1.24499237e-01 1.24451010e-01 1.24402838e-01 1.24354722e-01 1.24306662e-01 + 1.24258658e-01 1.24210709e-01 1.24162816e-01 1.24114978e-01 1.24067195e-01 + 1.24019468e-01 1.23971795e-01 1.23924178e-01 1.23876615e-01 1.23829107e-01 + 1.23781654e-01 1.23734255e-01 1.23686910e-01 1.23639620e-01 1.23592384e-01 + 1.23545202e-01 1.23498075e-01 1.23451001e-01 1.23403980e-01 1.23357014e-01 + 1.23310101e-01 1.23263242e-01 1.23216436e-01 1.23169683e-01 1.23122983e-01 + 1.23076337e-01 1.23029743e-01 1.22983202e-01 1.22936715e-01 1.22890279e-01 + 1.22843897e-01 1.22797567e-01 1.22751289e-01 1.22705063e-01 1.22658890e-01 + 1.22612769e-01 1.22566700e-01 1.22520682e-01 1.22474717e-01 1.22428803e-01 + 1.22382941e-01 1.22337130e-01 1.22291371e-01 1.22245663e-01 1.22200006e-01 + 1.22154400e-01 1.22108845e-01 1.22063342e-01 1.22017889e-01 1.21972487e-01 + 1.21927135e-01 1.21881834e-01 1.21836584e-01 1.21791383e-01 1.21746234e-01 + 1.21701134e-01 1.21656084e-01 1.21611085e-01 1.21566135e-01 1.21521235e-01 + 1.21476385e-01 1.21431584e-01 1.21386833e-01 1.21342131e-01 1.21297479e-01 + 1.21252876e-01 1.21208322e-01 1.21163817e-01 1.21119362e-01 1.21074955e-01 + 1.21030597e-01 1.20986287e-01 1.20942026e-01 1.20897814e-01 1.20853651e-01 + 1.20809535e-01 1.20765468e-01 1.20721449e-01 1.20677478e-01 1.20633555e-01 + 1.20589681e-01 1.20545854e-01 1.20502074e-01 1.20458343e-01 1.20414659e-01 + 1.20371022e-01 1.20327433e-01 1.20283891e-01 1.20240396e-01 1.20196949e-01 + 1.20153549e-01 1.20110195e-01 1.20066889e-01 1.20023629e-01 1.19980416e-01 + 1.19937250e-01 1.19894130e-01 1.19851056e-01 1.19808030e-01 1.19765049e-01 + 1.19722115e-01 1.19679226e-01 1.19636384e-01 1.19593588e-01 1.19550838e-01 + 1.19508133e-01 1.19465474e-01 1.19422861e-01 1.19380294e-01 1.19337772e-01 + 1.19295295e-01 1.19252863e-01 1.19210477e-01 1.19168136e-01 1.19125841e-01 + 1.19083590e-01 1.19041384e-01 1.18999223e-01 1.18957106e-01 1.18915035e-01 + 1.18873008e-01 1.18831025e-01 1.18789087e-01 1.18747194e-01 1.18705344e-01 + 1.18663539e-01 1.18621778e-01 1.18580061e-01 1.18538388e-01 1.18496759e-01 + 1.18455174e-01 1.18413632e-01 1.18372134e-01 1.18330680e-01 1.18289269e-01 + 1.18247902e-01 1.18206578e-01 1.18165298e-01 1.18124060e-01 1.18082866e-01 + 1.18041715e-01 1.18000607e-01 1.17959541e-01 1.17918519e-01 1.17877539e-01 + 1.17836602e-01 1.17795708e-01 1.17754856e-01 1.17714047e-01 1.17673280e-01 + 1.17632556e-01 1.17591873e-01 1.17551233e-01 1.17510635e-01 1.17470079e-01 + 1.17429565e-01 1.17389093e-01 1.17348662e-01 1.17308274e-01 1.17267927e-01 + 1.17227622e-01 1.17187358e-01 1.17147135e-01 1.17106955e-01 1.17066815e-01 + 1.17026717e-01 1.16986659e-01 1.16946643e-01 1.16906668e-01 1.16866734e-01 + 1.16826841e-01 1.16786988e-01 1.16747177e-01 1.16707406e-01 1.16667676e-01 + 1.16627986e-01 1.16588337e-01 1.16548728e-01 1.16509159e-01 1.16469631e-01 + 1.16430143e-01 1.16390695e-01 1.16351287e-01 1.16311919e-01 1.16272591e-01 + 1.16233303e-01 1.16194055e-01 1.16154846e-01 1.16115678e-01 1.16076548e-01 + 1.16037459e-01 1.15998408e-01 1.15959397e-01 1.15920426e-01 1.15881494e-01 + 1.15842601e-01 1.15803747e-01 1.15764932e-01 1.15726156e-01 1.15687419e-01 + 1.15648721e-01 1.15610062e-01 1.15571441e-01 1.15532859e-01 1.15494316e-01 + 1.15455812e-01 1.15417345e-01 1.15378918e-01 1.15340528e-01 1.15302177e-01 + 1.15263864e-01 1.15225590e-01 1.15187353e-01 1.15149155e-01 1.15110994e-01 + 1.15072871e-01 1.15034786e-01 1.14996739e-01 1.14958730e-01 1.14920759e-01 + 1.14882824e-01 1.14844928e-01 1.14807069e-01 1.14769247e-01 1.14731463e-01 + 1.14693716e-01 1.14656006e-01 1.14618334e-01 1.14580699e-01 1.14543100e-01 + 1.14505539e-01 1.14468014e-01 1.14430527e-01 1.14393076e-01 1.14355662e-01 + 1.14318284e-01 1.14280944e-01 1.14243640e-01 1.14206372e-01 1.14169141e-01 + 1.14131946e-01 1.14094787e-01 1.14057665e-01 1.14020579e-01 1.13983529e-01 + 1.13946515e-01 1.13909538e-01 1.13872596e-01 1.13835690e-01 1.13798820e-01 + 1.13761986e-01 1.13725188e-01 1.13688425e-01 1.13651698e-01 1.13615006e-01 + 1.13578350e-01 1.13541730e-01 1.13505144e-01 1.13468595e-01 1.13432080e-01 + 1.13395601e-01 1.13359156e-01 1.13322747e-01 1.13286373e-01 1.13250035e-01 + 1.13213730e-01 1.13177461e-01 1.13141227e-01 1.13105028e-01 1.13068863e-01 + 1.13032733e-01 1.12996637e-01 1.12960576e-01 1.12924550e-01 1.12888558e-01 + 1.12852600e-01 1.12816677e-01 1.12780788e-01 1.12744933e-01 1.12709112e-01 + 1.12673326e-01 1.12637574e-01 1.12601855e-01 1.12566171e-01 1.12530520e-01 + 1.12494904e-01 1.12459321e-01 1.12423772e-01 1.12388256e-01 1.12352774e-01 + 1.12317326e-01 1.12281911e-01 1.12246530e-01 1.12211182e-01 1.12175868e-01 + 1.12140587e-01 1.12105339e-01 1.12070125e-01 1.12034943e-01 1.11999795e-01 + 1.11964679e-01 1.11929597e-01 1.11894548e-01 1.11859532e-01 1.11824548e-01 + 1.11789597e-01 1.11754679e-01 1.11719794e-01 1.11684941e-01 1.11650121e-01 + 1.11615334e-01 1.11580579e-01 1.11545856e-01 1.11511166e-01 1.11476508e-01 + 1.11441883e-01 1.11407289e-01 1.11372728e-01 1.11338199e-01 1.11303703e-01 + 1.11269238e-01 1.11234805e-01 1.11200404e-01 1.11166035e-01 1.11131698e-01 + 1.11097393e-01 1.11063119e-01 1.11028877e-01 1.10994667e-01 1.10960489e-01 + 1.10926342e-01 1.10892226e-01 1.10858142e-01 1.10824089e-01 1.10790068e-01 + 1.10756078e-01 1.10722119e-01 1.10688192e-01 1.10654295e-01 1.10620430e-01 + 1.10586596e-01 1.10552793e-01 1.10519021e-01 1.10485279e-01 1.10451569e-01 + 1.10417890e-01 1.10384241e-01 1.10350623e-01 1.10317036e-01 1.10283479e-01 + 1.10249953e-01 1.10216458e-01 1.10182993e-01 1.10149558e-01 1.10116154e-01 + 1.10082780e-01 1.10049437e-01 1.10016124e-01 1.09982841e-01 1.09949588e-01 + 1.09916366e-01 1.09883174e-01 1.09850011e-01 1.09816879e-01 1.09783776e-01 + 1.09750704e-01 1.09717661e-01 1.09684648e-01 1.09651665e-01 1.09618712e-01 + 1.09585789e-01 1.09552895e-01 1.09520030e-01 1.09487196e-01 1.09454390e-01 + 1.09421615e-01 1.09388868e-01 1.09356151e-01 1.09323464e-01 1.09290805e-01 + 1.09258176e-01 1.09225576e-01 1.09193006e-01 1.09160464e-01 1.09127951e-01 + 1.09095468e-01 1.09063013e-01 1.09030588e-01 1.08998191e-01 1.08965824e-01 + 1.08933485e-01 1.08901174e-01 1.08868893e-01 1.08836640e-01 1.08804416e-01 + 1.08772220e-01 1.08740054e-01 1.08707915e-01 1.08675805e-01 1.08643724e-01 + 1.08611671e-01 1.08579646e-01 1.08547649e-01 1.08515681e-01 1.08483741e-01 + 1.08451829e-01 1.08419946e-01 1.08388090e-01 1.08356263e-01 1.08324463e-01 + 1.08292692e-01 1.08260948e-01 1.08229233e-01 1.08197545e-01 1.08165885e-01 + 1.08134253e-01 1.08102648e-01 1.08071072e-01 1.08039523e-01 1.08008001e-01 + 1.07976507e-01 1.07945041e-01 1.07913602e-01 1.07882191e-01 1.07850807e-01 + 1.07819450e-01 1.07788121e-01 1.07756819e-01 1.07725544e-01 1.07694296e-01 + 1.07663076e-01 1.07631883e-01 1.07600717e-01 1.07569578e-01 1.07538466e-01 + 1.07507381e-01 1.07476322e-01 1.07445291e-01 1.07414287e-01 1.07383309e-01 + 1.07352359e-01 1.07321435e-01 1.07290537e-01 1.07259667e-01 1.07228823e-01 + 1.07198005e-01 1.07167214e-01 1.07136450e-01 1.07105712e-01 1.07075001e-01 + 1.07044316e-01 1.07013657e-01 1.06983025e-01 1.06952419e-01 1.06921839e-01 + 1.06891286e-01 1.06860758e-01 1.06830257e-01 1.06799782e-01 1.06769333e-01 + 1.06738910e-01 1.06708513e-01 1.06678142e-01 1.06647796e-01 1.06617477e-01 + 1.06587184e-01 1.06556916e-01 1.06526674e-01 1.06496458e-01 1.06466268e-01 + 1.06436103e-01 1.06405964e-01 1.06375850e-01 1.06345762e-01 1.06315700e-01 + 1.06285663e-01 1.06255651e-01 1.06225665e-01 1.06195704e-01 1.06165769e-01 + 1.06135859e-01 1.06105974e-01 1.06076114e-01 1.06046280e-01 1.06016470e-01 + 1.05986686e-01 1.05956927e-01 1.05927193e-01 1.05897484e-01 1.05867800e-01 + 1.05838141e-01 1.05808507e-01 1.05778897e-01 1.05749313e-01 1.05719753e-01 + 1.05690218e-01 1.05660708e-01 1.05631223e-01 1.05601762e-01 1.05572326e-01 + 1.05542914e-01 1.05513528e-01 1.05484165e-01 1.05454827e-01 1.05425514e-01 + 1.05396225e-01 1.05366960e-01 1.05337720e-01 1.05308504e-01 1.05279312e-01 + 1.05250145e-01 1.05221002e-01 1.05191883e-01 1.05162788e-01 1.05133717e-01 + 1.05104671e-01 1.05075648e-01 1.05046650e-01 1.05017675e-01 1.04988725e-01 + 1.04959798e-01 1.04930896e-01 1.04902017e-01 1.04873162e-01 1.04844331e-01 + 1.04815523e-01 1.04786740e-01 1.04757980e-01 1.04729243e-01 1.04700531e-01 + 1.04671841e-01 1.04643176e-01 1.04614534e-01 1.04585916e-01 1.04557321e-01 + 1.04528749e-01 1.04500201e-01 1.04471676e-01 1.04443175e-01 1.04414697e-01 + 1.04386242e-01 1.04357810e-01 1.04329402e-01 1.04301017e-01 1.04272655e-01 + 1.04244316e-01 1.04216000e-01 1.04187707e-01 1.04159437e-01 1.04131191e-01 + 1.04102967e-01 1.04074766e-01 1.04046588e-01 1.04018433e-01 1.03990301e-01 + 1.03962192e-01 1.03934105e-01 1.03906041e-01 1.03878000e-01 1.03849982e-01 + 1.03821986e-01 1.03794013e-01 1.03766062e-01 1.03738134e-01 1.03710229e-01 + 1.03682346e-01 1.03654486e-01 1.03626648e-01 1.03598832e-01 1.03571039e-01 + 1.03543268e-01 1.03515520e-01 1.03487793e-01 1.03460089e-01 1.03432408e-01 + 1.03404748e-01 1.03377111e-01 1.03349496e-01 1.03321903e-01 1.03294332e-01 + 1.03266783e-01 1.03239256e-01 1.03211751e-01 1.03184268e-01 1.03156807e-01 + 1.03129368e-01 1.03101951e-01 1.03074556e-01 1.03047182e-01 1.03019831e-01 + 1.02992501e-01 1.02965192e-01 1.02937906e-01 1.02910641e-01 1.02883398e-01 + 1.02856177e-01 1.02828977e-01 1.02801798e-01 1.02774642e-01 1.02747506e-01 + 1.02720392e-01 1.02693300e-01 1.02666229e-01 1.02639180e-01 1.02612151e-01 + 1.02585145e-01 1.02558159e-01 1.02531195e-01 1.02504252e-01 1.02477330e-01 + 1.02450430e-01 1.02423550e-01 1.02396692e-01 1.02369855e-01 1.02343039e-01 + 1.02316244e-01 1.02289470e-01 1.02262717e-01 1.02235985e-01 1.02209274e-01 + 1.02182584e-01 1.02155915e-01 1.02129267e-01 1.02102639e-01 1.02076033e-01 + 1.02049447e-01 1.02022882e-01 1.01996338e-01 1.01969814e-01 1.01943311e-01 + 1.01916829e-01 1.01890367e-01 1.01863926e-01 1.01837505e-01 1.01811106e-01 + 1.01784726e-01 1.01758367e-01 1.01732029e-01 1.01705711e-01 1.01679413e-01 + 1.01653136e-01 1.01626879e-01 1.01600643e-01 1.01574426e-01 1.01548230e-01 + 1.01522055e-01 1.01495899e-01 1.01469764e-01 1.01443649e-01 1.01417554e-01 + 1.01391479e-01 1.01365425e-01 1.01339390e-01 1.01313376e-01 1.01287381e-01 + 1.01261406e-01 1.01235452e-01 1.01209517e-01 1.01183603e-01 1.01157708e-01 + 1.01131833e-01 1.01105978e-01 1.01080143e-01 1.01054327e-01 1.01028532e-01 + 1.01002756e-01 1.00976999e-01 1.00951263e-01 1.00925546e-01 1.00899849e-01 + 1.00874171e-01 1.00848513e-01 1.00822875e-01 1.00797256e-01 1.00771656e-01 + 1.00746077e-01 1.00720516e-01 1.00694975e-01 1.00669454e-01 1.00643952e-01 + 1.00618469e-01 1.00593005e-01 1.00567561e-01 1.00542136e-01 1.00516731e-01 + 1.00491345e-01 1.00465978e-01 1.00440630e-01 1.00415301e-01 1.00389992e-01 + 1.00364701e-01 1.00339430e-01 1.00314178e-01 1.00288944e-01 1.00263730e-01 + 1.00238535e-01 1.00213359e-01 1.00188202e-01 1.00163064e-01 1.00137944e-01 + 1.00112844e-01 1.00087762e-01 1.00062700e-01 1.00037656e-01 1.00012631e-01 + 9.99876242e-02 9.99626366e-02 9.99376677e-02 9.99127176e-02 9.98877861e-02 + 9.98628732e-02 9.98379790e-02 9.98131034e-02 9.97882464e-02 9.97634079e-02 + 9.97385880e-02 9.97137866e-02 9.96890037e-02 9.96642393e-02 9.96394933e-02 + 9.96147657e-02 9.95900565e-02 9.95653657e-02 9.95406933e-02 9.95160392e-02 + 9.94914034e-02 9.94667859e-02 9.94421867e-02 9.94176057e-02 9.93930429e-02 + 9.93684983e-02 9.93439719e-02 9.93194636e-02 9.92949735e-02 9.92705015e-02 + 9.92460476e-02 9.92216117e-02 9.91971939e-02 9.91727940e-02 9.91484122e-02 + 9.91240484e-02 9.90997025e-02 9.90753745e-02 9.90510645e-02 9.90267723e-02 + 9.90024980e-02 9.89782415e-02 9.89540029e-02 9.89297821e-02 9.89055790e-02 + 9.88813937e-02 9.88572261e-02 9.88330763e-02 9.88089441e-02 9.87848296e-02 + 9.87607327e-02 9.87366535e-02 9.87125919e-02 9.86885478e-02 9.86645213e-02 + 9.86405124e-02 9.86165209e-02 9.85925470e-02 9.85685906e-02 9.85446516e-02 + 9.85207300e-02 9.84968258e-02 9.84729391e-02 9.84490697e-02 9.84252176e-02 + 9.84013829e-02 9.83775655e-02 9.83537654e-02 9.83299825e-02 9.83062169e-02 + 9.82824685e-02 9.82587374e-02 9.82350233e-02 9.82113265e-02 9.81876468e-02 + 9.81639842e-02 9.81403387e-02 9.81167103e-02 9.80930990e-02 9.80695047e-02 + 9.80459274e-02 9.80223671e-02 9.79988238e-02 9.79752974e-02 9.79517880e-02 + 9.79282955e-02 9.79048199e-02 9.78813611e-02 9.78579192e-02 9.78344942e-02 + 9.78110859e-02 9.77876945e-02 9.77643198e-02 9.77409619e-02 9.77176207e-02 + 9.76942963e-02 9.76709885e-02 9.76476974e-02 9.76244230e-02 9.76011651e-02 + 9.75779239e-02 9.75546993e-02 9.75314913e-02 9.75082999e-02 9.74851249e-02 + 9.74619665e-02 9.74388246e-02 9.74156991e-02 9.73925901e-02 9.73694976e-02 + 9.73464215e-02 9.73233617e-02 9.73003184e-02 9.72772914e-02 9.72542807e-02 + 9.72312864e-02 9.72083084e-02 9.71853467e-02 9.71624012e-02 9.71394719e-02 + 9.71165589e-02 9.70936621e-02 9.70707815e-02 9.70479171e-02 9.70250688e-02 + 9.70022366e-02 9.69794205e-02 9.69566206e-02 9.69338367e-02 9.69110688e-02 + 9.68883170e-02 9.68655813e-02 9.68428615e-02 9.68201577e-02 9.67974698e-02 + 9.67747979e-02 9.67521419e-02 9.67295019e-02 9.67068777e-02 9.66842693e-02 + 9.66616769e-02 9.66391002e-02 9.66165394e-02 9.65939943e-02 9.65714651e-02 + 9.65489516e-02 9.65264538e-02 9.65039718e-02 9.64815054e-02 9.64590547e-02 + 9.64366197e-02 9.64142004e-02 9.63917967e-02 9.63694086e-02 9.63470360e-02 + 9.63246791e-02 9.63023377e-02 9.62800118e-02 9.62577015e-02 9.62354067e-02 + 9.62131273e-02 9.61908635e-02 9.61686150e-02 9.61463820e-02 9.61241644e-02 + 9.61019623e-02 9.60797754e-02 9.60576040e-02 9.60354479e-02 9.60133071e-02 + 9.59911816e-02 9.59690714e-02 9.59469765e-02 9.59248968e-02 9.59028324e-02 + 9.58807832e-02 9.58587492e-02 9.58367303e-02 9.58147267e-02 9.57927382e-02 + 9.57707648e-02 9.57488065e-02 9.57268633e-02 9.57049352e-02 9.56830222e-02 + 9.56611242e-02 9.56392413e-02 9.56173733e-02 9.55955204e-02 9.55736824e-02 + 9.55518594e-02 9.55300513e-02 9.55082582e-02 9.54864799e-02 9.54647166e-02 + 9.54429681e-02 9.54212345e-02 9.53995157e-02 9.53778117e-02 9.53561226e-02 + 9.53344482e-02 9.53127886e-02 9.52911438e-02 9.52695137e-02 9.52478984e-02 + 9.52262977e-02 9.52047117e-02 9.51831404e-02 9.51615838e-02 9.51400418e-02 + 9.51185144e-02 9.50970016e-02 9.50755034e-02 9.50540198e-02 9.50325508e-02 + 9.50110963e-02 9.49896563e-02 9.49682308e-02 9.49468198e-02 9.49254233e-02 + 9.49040412e-02 9.48826736e-02 9.48613204e-02 9.48399817e-02 9.48186573e-02 + 9.47973473e-02 9.47760516e-02 9.47547703e-02 9.47335034e-02 9.47122507e-02 + 9.46910123e-02 9.46697883e-02 9.46485784e-02 9.46273829e-02 9.46062015e-02 + 9.45850344e-02 9.45638815e-02 9.45427428e-02 9.45216182e-02 9.45005078e-02 + 9.44794116e-02 9.44583294e-02 9.44372614e-02 9.44162074e-02 9.43951676e-02 + 9.43741418e-02 9.43531300e-02 9.43321323e-02 9.43111485e-02 9.42901788e-02 + 9.42692231e-02 9.42482813e-02 9.42273534e-02 9.42064395e-02 9.41855396e-02 + 9.41646535e-02 9.41437813e-02 9.41229230e-02 9.41020785e-02 9.40812479e-02 + 9.40604311e-02 9.40396282e-02 9.40188390e-02 9.39980636e-02 9.39773020e-02 + 9.39565541e-02 9.39358200e-02 9.39150995e-02 9.38943928e-02 9.38736998e-02 + 9.38530204e-02 9.38323548e-02 9.38117027e-02 9.37910643e-02 9.37704395e-02 + 9.37498283e-02 9.37292307e-02 9.37086466e-02 9.36880762e-02 9.36675192e-02 + 9.36469758e-02 9.36264459e-02 9.36059295e-02 9.35854265e-02 9.35649371e-02 + 9.35444611e-02 9.35239985e-02 9.35035493e-02 9.34831136e-02 9.34626912e-02 + 9.34422823e-02 9.34218866e-02 9.34015044e-02 9.33811355e-02 9.33607798e-02 + 9.33404375e-02 9.33201085e-02 9.32997928e-02 9.32794903e-02 9.32592011e-02 + 9.32389251e-02 9.32186624e-02 9.31984128e-02 9.31781764e-02 9.31579532e-02 + 9.31377432e-02 9.31175463e-02 9.30973626e-02 9.30771919e-02 9.30570344e-02 + 9.30368899e-02 9.30167586e-02 9.29966403e-02 9.29765350e-02 9.29564428e-02 + 9.29363636e-02 9.29162974e-02 9.28962442e-02 9.28762040e-02 9.28561768e-02 + 9.28361624e-02 9.28161611e-02 9.27961726e-02 9.27761971e-02 9.27562344e-02 + 9.27362847e-02 9.27163478e-02 9.26964237e-02 9.26765125e-02 9.26566141e-02 + 9.26367286e-02 9.26168558e-02 9.25969958e-02 9.25771486e-02 9.25573141e-02 + 9.25374924e-02 9.25176834e-02 9.24978871e-02 9.24781036e-02 9.24583327e-02 + 9.24385745e-02 9.24188289e-02 9.23990960e-02 9.23793758e-02 9.23596681e-02 + 9.23399731e-02 9.23202907e-02 9.23006208e-02 9.22809635e-02 9.22613188e-02 + 9.22416866e-02 9.22220669e-02 9.22024597e-02 9.21828651e-02 9.21632829e-02 + 9.21437132e-02 9.21241560e-02 9.21046112e-02 9.20850788e-02 9.20655589e-02 + 9.20460514e-02 9.20265563e-02 9.20070735e-02 9.19876031e-02 9.19681451e-02 + 9.19486994e-02 9.19292661e-02 9.19098451e-02 9.18904363e-02 9.18710399e-02 + 9.18516557e-02 9.18322838e-02 9.18129242e-02 9.17935768e-02 9.17742416e-02 + 9.17549186e-02 9.17356079e-02 9.17163093e-02 9.16970229e-02 9.16777486e-02 + 9.16584865e-02 9.16392366e-02 9.16199987e-02 9.16007730e-02 9.15815594e-02 + 9.15623578e-02 9.15431684e-02 9.15239910e-02 9.15048256e-02 9.14856723e-02 + 9.14665310e-02 9.14474017e-02 9.14282844e-02 9.14091791e-02 9.13900857e-02 + 9.13710043e-02 9.13519349e-02 9.13328774e-02 9.13138318e-02 9.12947982e-02 + 9.12757764e-02 9.12567665e-02 9.12377685e-02 9.12187823e-02 9.11998080e-02 + 9.11808456e-02 9.11618949e-02 9.11429561e-02 9.11240290e-02 9.11051138e-02 + 9.10862103e-02 9.10673186e-02 9.10484386e-02 9.10295704e-02 9.10107139e-02 + 9.09918691e-02 9.09730360e-02 9.09542146e-02 9.09354049e-02 9.09166069e-02 + 9.08978205e-02 9.08790457e-02 9.08602826e-02 9.08415311e-02 9.08227911e-02 + 9.08040628e-02 9.07853461e-02 9.07666409e-02 9.07479473e-02 9.07292652e-02 + 9.07105947e-02 9.06919357e-02 9.06732882e-02 9.06546522e-02 9.06360277e-02 + 9.06174146e-02 9.05988131e-02 9.05802229e-02 9.05616442e-02 9.05430770e-02 + 9.05245211e-02 9.05059767e-02 9.04874436e-02 9.04689219e-02 9.04504116e-02 + 9.04319127e-02 9.04134251e-02 9.03949488e-02 9.03764839e-02 9.03580303e-02 + 9.03395879e-02 9.03211569e-02 9.03027371e-02 9.02843286e-02 9.02659313e-02 + 9.02475453e-02 9.02291706e-02 9.02108070e-02 9.01924546e-02 9.01741135e-02 + 9.01557835e-02 9.01374647e-02 9.01191571e-02 9.01008606e-02 9.00825752e-02 + 9.00643010e-02 9.00460379e-02 9.00277859e-02 9.00095450e-02 8.99913152e-02 + 8.99730965e-02 8.99548888e-02 8.99366921e-02 8.99185065e-02 8.99003320e-02 + 8.98821684e-02 8.98640159e-02 8.98458743e-02 8.98277437e-02 8.98096241e-02 + 8.97915155e-02 8.97734178e-02 8.97553311e-02 8.97372552e-02 8.97191903e-02 + 8.97011363e-02 8.96830932e-02 8.96650610e-02 8.96470396e-02 8.96290291e-02 + 8.96110295e-02 8.95930407e-02 8.95750627e-02 8.95570956e-02 8.95391392e-02 + 8.95211937e-02 8.95032589e-02 8.94853349e-02 8.94674217e-02 8.94495192e-02 + 8.94316275e-02 8.94137465e-02 8.93958762e-02 8.93780167e-02 8.93601678e-02 + 8.93423296e-02 8.93245021e-02 8.93066853e-02 8.92888791e-02 8.92710836e-02 + 8.92532987e-02 8.92355244e-02 8.92177608e-02 8.92000077e-02 8.91822653e-02 + 8.91645334e-02 8.91468121e-02 8.91291014e-02 8.91114012e-02 8.90937115e-02 + 8.90760324e-02 8.90583638e-02 8.90407057e-02 8.90230582e-02 8.90054211e-02 + 8.89877945e-02 8.89701783e-02 8.89525726e-02 8.89349774e-02 8.89173926e-02 + 8.88998182e-02 8.88822542e-02 8.88647007e-02 8.88471575e-02 8.88296247e-02 + 8.88121023e-02 8.87945903e-02 8.87770886e-02 8.87595973e-02 8.87421163e-02 + 8.87246456e-02 8.87071853e-02 8.86897352e-02 8.86722954e-02 8.86548660e-02 + 8.86374468e-02 8.86200378e-02 8.86026391e-02 8.85852507e-02 8.85678725e-02 + 8.85505045e-02 8.85331467e-02 8.85157991e-02 8.84984618e-02 8.84811346e-02 + 8.84638176e-02 8.84465107e-02 8.84292140e-02 8.84119274e-02 8.83946510e-02 + 8.83773847e-02 8.83601285e-02 8.83428825e-02 8.83256465e-02 8.83084206e-02 + 8.82912047e-02 8.82739990e-02 8.82568033e-02 8.82396176e-02 8.82224420e-02 + 8.82052764e-02 8.81881208e-02 8.81709752e-02 8.81538396e-02 8.81367140e-02 + 8.81195984e-02 8.81024927e-02 8.80853970e-02 8.80683113e-02 8.80512355e-02 + 8.80341696e-02 8.80171137e-02 8.80000676e-02 8.79830314e-02 8.79660052e-02 + 8.79489888e-02 8.79319823e-02 8.79149857e-02 8.78979989e-02 8.78810219e-02 + 8.78640548e-02 8.78470975e-02 8.78301500e-02 8.78132123e-02 8.77962845e-02 + 8.77793664e-02 8.77624580e-02 8.77455595e-02 8.77286707e-02 8.77117916e-02 + 8.76949223e-02 8.76780628e-02 8.76612129e-02 8.76443728e-02 8.76275423e-02 + 8.76107216e-02 8.75939105e-02 8.75771091e-02 8.75603174e-02 8.75435353e-02 + 8.75267629e-02 8.75100001e-02 8.74932469e-02 8.74765033e-02 8.74597694e-02 + 8.74430451e-02 8.74263303e-02 8.74096251e-02 8.73929296e-02 8.73762435e-02 + 8.73595670e-02 8.73429001e-02 8.73262427e-02 8.73095948e-02 8.72929565e-02 + 8.72763276e-02 8.72597083e-02 8.72430984e-02 8.72264981e-02 8.72099072e-02 + 8.71933257e-02 8.71767537e-02 8.71601912e-02 8.71436381e-02 8.71270944e-02 + 8.71105602e-02 8.70940353e-02 8.70775199e-02 8.70610138e-02 8.70445172e-02 + 8.70280299e-02 8.70115519e-02 8.69950834e-02 8.69786241e-02 8.69621742e-02 + 8.69457337e-02 8.69293024e-02 8.69128805e-02 8.68964679e-02 8.68800646e-02 + 8.68636705e-02 8.68472857e-02 8.68309103e-02 8.68145440e-02 8.67981870e-02 + 8.67818393e-02 8.67655008e-02 8.67491715e-02 8.67328514e-02 8.67165406e-02 + 8.67002389e-02 8.66839464e-02 8.66676631e-02 8.66513890e-02 8.66351240e-02 + 8.66188682e-02 8.66026216e-02 8.65863841e-02 8.65701557e-02 8.65539364e-02 + 8.65377263e-02 8.65215252e-02 8.65053333e-02 8.64891504e-02 8.64729766e-02 + 8.64568119e-02 8.64406563e-02 8.64245097e-02 8.64083721e-02 8.63922436e-02 + 8.63761241e-02 8.63600136e-02 8.63439122e-02 8.63278197e-02 8.63117363e-02 + 8.62956618e-02 8.62795963e-02 8.62635398e-02 8.62474922e-02 8.62314536e-02 + 8.62154239e-02 8.61994032e-02 8.61833914e-02 8.61673885e-02 8.61513945e-02 + 8.61354094e-02 8.61194332e-02 8.61034659e-02 8.60875075e-02 8.60715580e-02 + 8.60556173e-02 8.60396855e-02 8.60237625e-02 8.60078483e-02 8.59919430e-02 + 8.59760465e-02 8.59601588e-02 8.59442800e-02 8.59284099e-02 8.59125486e-02 + 8.58966961e-02 8.58808523e-02 8.58650173e-02 8.58491911e-02 8.58333736e-02 + 8.58175649e-02 8.58017649e-02 8.57859736e-02 8.57701911e-02 8.57544172e-02 + 8.57386520e-02 8.57228956e-02 8.57071478e-02 8.56914087e-02 8.56756782e-02 + 8.56599565e-02 8.56442433e-02 8.56285389e-02 8.56128430e-02 8.55971558e-02 + 8.55814772e-02 8.55658072e-02 8.55501458e-02 8.55344930e-02 8.55188488e-02 + 8.55032132e-02 8.54875862e-02 8.54719677e-02 8.54563578e-02 8.54407564e-02 + 8.54251636e-02 8.54095793e-02 8.53940035e-02 8.53784363e-02 8.53628775e-02 + 8.53473273e-02 8.53317855e-02 8.53162523e-02 8.53007275e-02 8.52852112e-02 + 8.52697034e-02 8.52542040e-02 8.52387130e-02 8.52232305e-02 8.52077565e-02 + 8.51922909e-02 8.51768336e-02 8.51613848e-02 8.51459444e-02 8.51305124e-02 + 8.51150888e-02 8.50996736e-02 8.50842667e-02 8.50688682e-02 8.50534780e-02 + 8.50380963e-02 8.50227228e-02 8.50073577e-02 8.49920009e-02 8.49766524e-02 + 8.49613123e-02 8.49459804e-02 8.49306569e-02 8.49153416e-02 8.49000346e-02 + 8.48847359e-02 8.48694455e-02 8.48541633e-02 8.48388893e-02 8.48236237e-02 + 8.48083662e-02 8.47931170e-02 8.47778760e-02 8.47626432e-02 8.47474187e-02 + 8.47322023e-02 8.47169941e-02 8.47017941e-02 8.46866023e-02 8.46714187e-02 + 8.46562432e-02 8.46410759e-02 8.46259167e-02 8.46107657e-02 8.45956228e-02 + 8.45804880e-02 8.45653614e-02 8.45502428e-02 8.45351324e-02 8.45200301e-02 + 8.45049358e-02 8.44898497e-02 8.44747716e-02 8.44597016e-02 8.44446397e-02 + 8.44295858e-02 8.44145399e-02 8.43995021e-02 8.43844724e-02 8.43694506e-02 + 8.43544369e-02 8.43394312e-02 8.43244335e-02 8.43094438e-02 8.42944621e-02 + 8.42794883e-02 8.42645226e-02 8.42495648e-02 8.42346150e-02 8.42196731e-02 + 8.42047392e-02 8.41898132e-02 8.41748952e-02 8.41599851e-02 8.41450829e-02 + 8.41301886e-02 8.41153022e-02 8.41004238e-02 8.40855532e-02 8.40706905e-02 + 8.40558357e-02 8.40409887e-02 8.40261496e-02 8.40113184e-02 8.39964950e-02 + 8.39816795e-02 8.39668718e-02 8.39520719e-02 8.39372799e-02 8.39224957e-02 + 8.39077193e-02 8.38929507e-02 8.38781898e-02 8.38634368e-02 8.38486916e-02 + 8.38339541e-02 8.38192244e-02 8.38045025e-02 8.37897883e-02 8.37750818e-02 + 8.37603831e-02 8.37456922e-02 8.37310089e-02 8.37163334e-02 8.37016656e-02 + 8.36870055e-02 8.36723531e-02 8.36577084e-02 8.36430714e-02 8.36284421e-02 + 8.36138204e-02 8.35992064e-02 8.35846001e-02 8.35700014e-02 8.35554104e-02 + 8.35408270e-02 8.35262512e-02 8.35116831e-02 8.34971226e-02 8.34825697e-02 + 8.34680244e-02 8.34534867e-02 8.34389566e-02 8.34244341e-02 8.34099191e-02 + 8.33954118e-02 8.33809120e-02 8.33664197e-02 8.33519351e-02 8.33374579e-02 + 8.33229883e-02 8.33085263e-02 8.32940718e-02 8.32796248e-02 8.32651853e-02 + 8.32507533e-02 8.32363288e-02 8.32219118e-02 8.32075023e-02 8.31931003e-02 + 8.31787058e-02 8.31643187e-02 8.31499391e-02 8.31355669e-02 8.31212022e-02 + 8.31068450e-02 8.30924951e-02 8.30781528e-02 8.30638178e-02 8.30494902e-02 + 8.30351701e-02 8.30208574e-02 8.30065520e-02 8.29922541e-02 8.29779635e-02 + 8.29636804e-02 8.29494046e-02 8.29351361e-02 8.29208751e-02 8.29066213e-02 + 8.28923750e-02 8.28781359e-02 8.28639042e-02 8.28496799e-02 8.28354628e-02 + 8.28212531e-02 8.28070507e-02 8.27928556e-02 8.27786678e-02 8.27644872e-02 + 8.27503140e-02 8.27361480e-02 8.27219893e-02 8.27078379e-02 8.26936938e-02 + 8.26795569e-02 8.26654272e-02 8.26513048e-02 8.26371896e-02 8.26230816e-02 + 8.26089809e-02 8.25948874e-02 8.25808011e-02 8.25667220e-02 8.25526501e-02 + 8.25385854e-02 8.25245279e-02 8.25104775e-02 8.24964344e-02 8.24823984e-02 + 8.24683695e-02 8.24543479e-02 8.24403333e-02 8.24263259e-02 8.24123257e-02 + 8.23983326e-02 8.23843466e-02 8.23703677e-02 8.23563960e-02 8.23424313e-02 + 8.23284737e-02 8.23145233e-02 8.23005799e-02 8.22866436e-02 8.22727144e-02 + 8.22587923e-02 8.22448772e-02 8.22309692e-02 8.22170683e-02 8.22031744e-02 + 8.21892875e-02 8.21754077e-02 8.21615349e-02 8.21476691e-02 8.21338103e-02 + 8.21199586e-02 8.21061138e-02 8.20922761e-02 8.20784453e-02 8.20646216e-02 + 8.20508048e-02 8.20369950e-02 8.20231922e-02 8.20093963e-02 8.19956074e-02 + 8.19818254e-02 8.19680504e-02 8.19542823e-02 8.19405212e-02 8.19267670e-02 + 8.19130197e-02 8.18992794e-02 8.18855459e-02 8.18718194e-02 8.18580997e-02 + 8.18443870e-02 8.18306811e-02 8.18169822e-02 8.18032901e-02 8.17896048e-02 + 8.17759265e-02 8.17622550e-02 8.17485903e-02 8.17349326e-02 8.17212816e-02 + 8.17076375e-02 8.16940002e-02 8.16803697e-02 8.16667461e-02 8.16531293e-02 + 8.16395193e-02 8.16259161e-02 8.16123197e-02 8.15987300e-02 8.15851472e-02 + 8.15715712e-02 8.15580019e-02 8.15444394e-02 8.15308836e-02 8.15173346e-02 + 8.15037924e-02 8.14902569e-02 8.14767282e-02 8.14632062e-02 8.14496909e-02 + 8.14361823e-02 8.14226805e-02 8.14091854e-02 8.13956970e-02 8.13822153e-02 + 8.13687402e-02 8.13552719e-02 8.13418103e-02 8.13283553e-02 8.13149070e-02 + 8.13014654e-02 8.12880305e-02 8.12746022e-02 8.12611805e-02 8.12477656e-02 + 8.12343572e-02 8.12209555e-02 8.12075604e-02 8.11941719e-02 8.11807901e-02 + 8.11674149e-02 8.11540463e-02 8.11406843e-02 8.11273288e-02 8.11139800e-02 + 8.11006378e-02 8.10873021e-02 8.10739731e-02 8.10606506e-02 8.10473346e-02 + 8.10340252e-02 8.10207224e-02 8.10074261e-02 8.09941364e-02 8.09808532e-02 + 8.09675765e-02 8.09543064e-02 8.09410428e-02 8.09277857e-02 8.09145351e-02 + 8.09012911e-02 8.08880535e-02 8.08748224e-02 8.08615978e-02 8.08483797e-02 + 8.08351681e-02 8.08219630e-02 8.08087643e-02 8.07955721e-02 8.07823863e-02 + 8.07692070e-02 8.07560342e-02 8.07428678e-02 8.07297078e-02 8.07165542e-02 + 8.07034071e-02 8.06902664e-02 8.06771322e-02 8.06640043e-02 8.06508829e-02 + 8.06377678e-02 8.06246592e-02 8.06115569e-02 8.05984610e-02 8.05853715e-02 + 8.05722884e-02 8.05592116e-02 8.05461412e-02 8.05330772e-02 8.05200195e-02 + 8.05069682e-02 8.04939232e-02 8.04808846e-02 8.04678523e-02 8.04548263e-02 + 8.04418066e-02 8.04287933e-02 8.04157863e-02 8.04027856e-02 8.03897912e-02 + 8.03768031e-02 8.03638212e-02 8.03508457e-02 8.03378765e-02 8.03249135e-02 + 8.03119568e-02 8.02990064e-02 8.02860622e-02 8.02731243e-02 8.02601926e-02 + 8.02472672e-02 8.02343481e-02 8.02214351e-02 8.02085284e-02 8.01956280e-02 + 8.01827337e-02 8.01698457e-02 8.01569639e-02 8.01440883e-02 8.01312189e-02 + 8.01183557e-02 8.01054986e-02 8.00926478e-02 8.00798032e-02 8.00669647e-02 + 8.00541324e-02 8.00413063e-02 8.00284863e-02 8.00156725e-02 8.00028649e-02 + 7.99900634e-02 7.99772680e-02 7.99644788e-02 7.99516957e-02 7.99389187e-02 + 7.99261479e-02 7.99133832e-02 7.99006246e-02 7.98878721e-02 7.98751257e-02 + 7.98623854e-02 7.98496512e-02 7.98369231e-02 7.98242011e-02 7.98114851e-02 + 7.97987753e-02 7.97860715e-02 7.97733737e-02 7.97606821e-02 7.97479965e-02 + 7.97353169e-02 7.97226434e-02 7.97099759e-02 7.96973145e-02 7.96846590e-02 + 7.96720097e-02 7.96593663e-02 7.96467290e-02 7.96340976e-02 7.96214723e-02 + 7.96088530e-02 7.95962397e-02 7.95836323e-02 7.95710310e-02 7.95584356e-02 + 7.95458463e-02 7.95332629e-02 7.95206854e-02 7.95081140e-02 7.94955485e-02 + 7.94829889e-02 7.94704353e-02 7.94578877e-02 7.94453459e-02 7.94328102e-02 + 7.94202803e-02 7.94077564e-02 7.93952384e-02 7.93827263e-02 7.93702202e-02 + 7.93577199e-02 7.93452256e-02 7.93327371e-02 7.93202546e-02 7.93077779e-02 + 7.92953071e-02 7.92828423e-02 7.92703832e-02 7.92579301e-02 7.92454828e-02 + 7.92330414e-02 7.92206058e-02 7.92081761e-02 7.91957523e-02 7.91833343e-02 + 7.91709221e-02 7.91585157e-02 7.91461152e-02 7.91337206e-02 7.91213317e-02 + 7.91089486e-02 7.90965714e-02 7.90842000e-02 7.90718344e-02 7.90594746e-02 + 7.90471205e-02 7.90347723e-02 7.90224298e-02 7.90100932e-02 7.89977623e-02 + 7.89854371e-02 7.89731178e-02 7.89608042e-02 7.89484964e-02 7.89361943e-02 + 7.89238979e-02 7.89116073e-02 7.88993225e-02 7.88870434e-02 7.88747700e-02 + 7.88625023e-02 7.88502404e-02 7.88379842e-02 7.88257337e-02 7.88134889e-02 + 7.88012498e-02 7.87890164e-02 7.87767887e-02 7.87645667e-02 7.87523504e-02 + 7.87401398e-02 7.87279348e-02 7.87157355e-02 7.87035419e-02 7.86913540e-02 + 7.86791717e-02 7.86669951e-02 7.86548241e-02 7.86426588e-02 7.86304991e-02 + 7.86183450e-02 7.86061966e-02 7.85940538e-02 7.85819167e-02 7.85697851e-02 + 7.85576592e-02 7.85455389e-02 7.85334242e-02 7.85213151e-02 7.85092116e-02 + 7.84971137e-02 7.84850214e-02 7.84729347e-02 7.84608535e-02 7.84487780e-02 + 7.84367080e-02 7.84246436e-02 7.84125847e-02 7.84005314e-02 7.83884837e-02 + 7.83764415e-02 7.83644048e-02 7.83523737e-02 7.83403482e-02 7.83283282e-02 + 7.83163137e-02 7.83043047e-02 7.82923013e-02 7.82803034e-02 7.82683110e-02 + 7.82563241e-02 7.82443427e-02 7.82323668e-02 7.82203964e-02 7.82084315e-02 + 7.81964721e-02 7.81845182e-02 7.81725697e-02 7.81606268e-02 7.81486893e-02 + 7.81367572e-02 7.81248307e-02 7.81129096e-02 7.81009939e-02 7.80890837e-02 + 7.80771790e-02 7.80652797e-02 7.80533858e-02 7.80414974e-02 7.80296144e-02 + 7.80177368e-02 7.80058646e-02 7.79939979e-02 7.79821366e-02 7.79702807e-02 + 7.79584302e-02 7.79465851e-02 7.79347454e-02 7.79229111e-02 7.79110821e-02 + 7.78992586e-02 7.78874404e-02 7.78756277e-02 7.78638202e-02 7.78520182e-02 + 7.78402215e-02 7.78284302e-02 7.78166443e-02 7.78048637e-02 7.77930884e-02 + 7.77813185e-02 7.77695539e-02 7.77577947e-02 7.77460408e-02 7.77342922e-02 + 7.77225490e-02 7.77108111e-02 7.76990785e-02 7.76873512e-02 7.76756292e-02 + 7.76639125e-02 7.76522011e-02 7.76404950e-02 7.76287942e-02 7.76170987e-02 + 7.76054085e-02 7.75937236e-02 7.75820439e-02 7.75703695e-02 7.75587004e-02 + 7.75470365e-02 7.75353780e-02 7.75237246e-02 7.75120765e-02 7.75004337e-02 + 7.74887961e-02 7.74771637e-02 7.74655366e-02 7.74539147e-02 7.74422981e-02 + 7.74306867e-02 7.74190805e-02 7.74074795e-02 7.73958837e-02 7.73842931e-02 + 7.73727078e-02 7.73611276e-02 7.73495527e-02 7.73379829e-02 7.73264183e-02 + 7.73148589e-02 7.73033047e-02 7.72917557e-02 7.72802118e-02 7.72686732e-02 + 7.72571396e-02 7.72456113e-02 7.72340881e-02 7.72225701e-02 7.72110572e-02 + 7.71995494e-02 7.71880468e-02 7.71765494e-02 7.71650571e-02 7.71535699e-02 + 7.71420878e-02 7.71306109e-02 7.71191391e-02 7.71076724e-02 7.70962108e-02 + 7.70847543e-02 7.70733030e-02 7.70618567e-02 7.70504155e-02 7.70389795e-02 + 7.70275485e-02 7.70161226e-02 7.70047018e-02 7.69932860e-02 7.69818754e-02 + 7.69704698e-02 7.69590693e-02 7.69476738e-02 7.69362834e-02 7.69248981e-02 + 7.69135178e-02 7.69021426e-02 7.68907724e-02 7.68794073e-02 7.68680472e-02 + 7.68566921e-02 7.68453420e-02 7.68339970e-02 7.68226570e-02 7.68113221e-02 + 7.67999921e-02 7.67886672e-02 7.67773472e-02 7.67660323e-02 7.67547224e-02 + 7.67434174e-02 7.67321175e-02 7.67208226e-02 7.67095326e-02 7.66982476e-02 + 7.66869676e-02 7.66756926e-02 7.66644225e-02 7.66531574e-02 7.66418973e-02 + 7.66306422e-02 7.66193920e-02 7.66081467e-02 7.65969064e-02 7.65856711e-02 + 7.65744407e-02 7.65632152e-02 7.65519946e-02 7.65407790e-02 7.65295684e-02 + 7.65183626e-02 7.65071618e-02 7.64959659e-02 7.64847749e-02 7.64735888e-02 + 7.64624076e-02 7.64512313e-02 7.64400599e-02 7.64288935e-02 7.64177319e-02 + 7.64065752e-02 7.63954233e-02 7.63842764e-02 7.63731343e-02 7.63619972e-02 + 7.63508648e-02 7.63397374e-02 7.63286148e-02 7.63174971e-02 7.63063842e-02 + 7.62952762e-02 7.62841730e-02 7.62730747e-02 7.62619813e-02 7.62508926e-02 + 7.62398088e-02 7.62287298e-02 7.62176557e-02 7.62065864e-02 7.61955219e-02 + 7.61844622e-02 7.61734074e-02 7.61623573e-02 7.61513121e-02 7.61402716e-02 + 7.61292360e-02 7.61182052e-02 7.61071791e-02 7.60961579e-02 7.60851414e-02 + 7.60741297e-02 7.60631228e-02 7.60521207e-02 7.60411233e-02 7.60301307e-02 + 7.60191429e-02 7.60081598e-02 7.59971815e-02 7.59862080e-02 7.59752392e-02 + 7.59642751e-02 7.59533158e-02 7.59423613e-02 7.59314115e-02 7.59204664e-02 + 7.59095260e-02 7.58985904e-02 7.58876595e-02 7.58767333e-02 7.58658119e-02 + 7.58548951e-02 7.58439831e-02 7.58330758e-02 7.58221731e-02 7.58112752e-02 + 7.58003820e-02 7.57894935e-02 7.57786096e-02 7.57677305e-02 7.57568560e-02 + 7.57459862e-02 7.57351211e-02 7.57242607e-02 7.57134049e-02 7.57025538e-02 + 7.56917074e-02 7.56808656e-02 7.56700285e-02 7.56591961e-02 7.56483683e-02 + 7.56375451e-02 7.56267266e-02 7.56159127e-02 7.56051035e-02 7.55942989e-02 + 7.55834989e-02 7.55727035e-02 7.55619128e-02 7.55511267e-02 7.55403452e-02 + 7.55295684e-02 7.55187961e-02 7.55080285e-02 7.54972654e-02 7.54865070e-02 + 7.54757531e-02 7.54650039e-02 7.54542592e-02 7.54435192e-02 7.54327837e-02 + 7.54220528e-02 7.54113264e-02 7.54006047e-02 7.53898875e-02 7.53791749e-02 + 7.53684669e-02 7.53577634e-02 7.53470644e-02 7.53363701e-02 7.53256803e-02 + 7.53149950e-02 7.53043143e-02 7.52936381e-02 7.52829665e-02 7.52722994e-02 + 7.52616368e-02 7.52509787e-02 7.52403252e-02 7.52296762e-02 7.52190318e-02 + 7.52083918e-02 7.51977564e-02 7.51871255e-02 7.51764990e-02 7.51658771e-02 + 7.51552597e-02 7.51446468e-02 7.51340384e-02 7.51234344e-02 7.51128350e-02 + 7.51022400e-02 7.50916496e-02 7.50810636e-02 7.50704821e-02 7.50599050e-02 + 7.50493324e-02 7.50387643e-02 7.50282007e-02 7.50176415e-02 7.50070868e-02 + 7.49965365e-02 7.49859907e-02 7.49754493e-02 7.49649123e-02 7.49543799e-02 + 7.49438518e-02 7.49333282e-02 7.49228090e-02 7.49122942e-02 7.49017839e-02 + 7.48912780e-02 7.48807765e-02 7.48702794e-02 7.48597868e-02 7.48492985e-02 + 7.48388147e-02 7.48283352e-02 7.48178602e-02 7.48073895e-02 7.47969233e-02 + 7.47864614e-02 7.47760040e-02 7.47655509e-02 7.47551022e-02 7.47446579e-02 + 7.47342179e-02 7.47237824e-02 7.47133512e-02 7.47029243e-02 7.46925019e-02 + 7.46820838e-02 7.46716700e-02 7.46612606e-02 7.46508556e-02 7.46404549e-02 + 7.46300586e-02 7.46196666e-02 7.46092789e-02 7.45988956e-02 7.45885166e-02 + 7.45781419e-02 7.45677716e-02 7.45574056e-02 7.45470439e-02 7.45366865e-02 + 7.45263335e-02 7.45159847e-02 7.45056403e-02 7.44953002e-02 7.44849644e-02 + 7.44746329e-02 7.44643056e-02 7.44539827e-02 7.44436641e-02 7.44333497e-02 + 7.44230397e-02 7.44127339e-02 7.44024324e-02 7.43921352e-02 7.43818423e-02 + 7.43715536e-02 7.43612692e-02 7.43509890e-02 7.43407132e-02 7.43304416e-02 + 7.43201742e-02 7.43099111e-02 7.42996522e-02 7.42893976e-02 7.42791473e-02 + 7.42689011e-02 7.42586593e-02 7.42484216e-02 7.42381882e-02 7.42279590e-02 + 7.42177341e-02 7.42075133e-02 7.41972968e-02 7.41870845e-02 7.41768765e-02 + 7.41666726e-02 7.41564729e-02 7.41462775e-02 7.41360863e-02 7.41258992e-02 + 7.41157164e-02 7.41055377e-02 7.40953633e-02 7.40851930e-02 7.40750269e-02 + 7.40648650e-02 7.40547073e-02 7.40445538e-02 7.40344044e-02 7.40242592e-02 + 7.40141182e-02 7.40039814e-02 7.39938487e-02 7.39837202e-02 7.39735958e-02 + 7.39634756e-02 7.39533595e-02 7.39432476e-02 7.39331398e-02 7.39230362e-02 + 7.39129367e-02 7.39028414e-02 7.38927502e-02 7.38826631e-02 7.38725802e-02 + 7.38625014e-02 7.38524267e-02 7.38423561e-02 7.38322896e-02 7.38222273e-02 + 7.38121691e-02 7.38021150e-02 7.37920650e-02 7.37820191e-02 7.37719773e-02 + 7.37619396e-02 7.37519060e-02 7.37418765e-02 7.37318510e-02 7.37218297e-02 + 7.37118125e-02 7.37017993e-02 7.36917902e-02 7.36817852e-02 7.36717843e-02 + 7.36617874e-02 7.36517946e-02 7.36418059e-02 7.36318212e-02 7.36218406e-02 + 7.36118641e-02 7.36018916e-02 7.35919231e-02 7.35819587e-02 7.35719984e-02 + 7.35620421e-02 7.35520898e-02 7.35421416e-02 7.35321974e-02 7.35222572e-02 + 7.35123211e-02 7.35023890e-02 7.34924610e-02 7.34825369e-02 7.34726169e-02 + 7.34627009e-02 7.34527889e-02 7.34428809e-02 7.34329769e-02 7.34230769e-02 + 7.34131809e-02 7.34032890e-02 7.33934010e-02 7.33835170e-02 7.33736370e-02 + 7.33637610e-02 7.33538890e-02 7.33440210e-02 7.33341569e-02 7.33242969e-02 + 7.33144408e-02 7.33045886e-02 7.32947405e-02 7.32848963e-02 7.32750561e-02 + 7.32652199e-02 7.32553876e-02 7.32455592e-02 7.32357348e-02 7.32259144e-02 + 7.32160979e-02 7.32062854e-02 7.31964768e-02 7.31866722e-02 7.31768715e-02 + 7.31670747e-02 7.31572819e-02 7.31474930e-02 7.31377080e-02 7.31279269e-02 + 7.31181498e-02 7.31083766e-02 7.30986073e-02 7.30888419e-02 7.30790805e-02 + 7.30693229e-02 7.30595693e-02 7.30498195e-02 7.30400737e-02 7.30303318e-02 + 7.30205937e-02 7.30108596e-02 7.30011293e-02 7.29914030e-02 7.29816805e-02 + 7.29719619e-02 7.29622472e-02 7.29525364e-02 7.29428294e-02 7.29331263e-02 + 7.29234271e-02 7.29137318e-02 7.29040403e-02 7.28943527e-02 7.28846689e-02 + 7.28749890e-02 7.28653130e-02 7.28556408e-02 7.28459725e-02 7.28363080e-02 + 7.28266473e-02 7.28169905e-02 7.28073376e-02 7.27976885e-02 7.27880432e-02 + 7.27784017e-02 7.27687641e-02 7.27591303e-02 7.27495003e-02 7.27398742e-02 + 7.27302519e-02 7.27206334e-02 7.27110187e-02 7.27014078e-02 7.26918007e-02 + 7.26821975e-02 7.26725980e-02 7.26630023e-02 7.26534105e-02 7.26438224e-02 + 7.26342382e-02 7.26246577e-02 7.26150810e-02 7.26055081e-02 7.25959390e-02 + 7.25863737e-02 7.25768121e-02 7.25672544e-02 7.25577004e-02 7.25481502e-02 + 7.25386037e-02 7.25290610e-02 7.25195221e-02 7.25099870e-02 7.25004556e-02 + 7.24909279e-02 7.24814040e-02 7.24718839e-02 7.24623675e-02 7.24528549e-02 + 7.24433460e-02 7.24338409e-02 7.24243395e-02 7.24148418e-02 7.24053479e-02 + 7.23958577e-02 7.23863712e-02 7.23768885e-02 7.23674095e-02 7.23579342e-02 + 7.23484626e-02 7.23389948e-02 7.23295307e-02 7.23200702e-02 7.23106135e-02 + 7.23011605e-02 7.22917112e-02 7.22822656e-02 7.22728238e-02 7.22633856e-02 + 7.22539511e-02 7.22445203e-02 7.22350932e-02 7.22256698e-02 7.22162500e-02 + 7.22068340e-02 7.21974216e-02 7.21880130e-02 7.21786080e-02 7.21692066e-02 + 7.21598090e-02 7.21504150e-02 7.21410247e-02 7.21316380e-02 7.21222550e-02 + 7.21128757e-02 7.21035000e-02 7.20941280e-02 7.20847596e-02 7.20753949e-02 + 7.20660339e-02 7.20566765e-02 7.20473227e-02 7.20379726e-02 7.20286261e-02 + 7.20192832e-02 7.20099440e-02 7.20006084e-02 7.19912765e-02 7.19819481e-02 + 7.19726234e-02 7.19633024e-02 7.19539849e-02 7.19446711e-02 7.19353608e-02 + 7.19260542e-02 7.19167512e-02 7.19074518e-02 7.18981560e-02 7.18888639e-02 + 7.18795753e-02 7.18702903e-02 7.18610089e-02 7.18517311e-02 7.18424569e-02 + 7.18331863e-02 7.18239193e-02 7.18146559e-02 7.18053960e-02 7.17961398e-02 + 7.17868871e-02 7.17776380e-02 7.17683924e-02 7.17591505e-02 7.17499121e-02 + 7.17406772e-02 7.17314460e-02 7.17222183e-02 7.17129941e-02 7.17037735e-02 + 7.16945565e-02 7.16853430e-02 7.16761331e-02 7.16669267e-02 7.16577239e-02 + 7.16485246e-02 7.16393289e-02 7.16301367e-02 7.16209480e-02 7.16117629e-02 + 7.16025813e-02 7.15934032e-02 7.15842287e-02 7.15750577e-02 7.15658902e-02 + 7.15567262e-02 7.15475658e-02 7.15384089e-02 7.15292555e-02 7.15201056e-02 + 7.15109592e-02 7.15018163e-02 7.14926769e-02 7.14835410e-02 7.14744087e-02 + 7.14652798e-02 7.14561544e-02 7.14470325e-02 7.14379142e-02 7.14287993e-02 + 7.14196878e-02 7.14105799e-02 7.14014755e-02 7.13923745e-02 7.13832770e-02 + 7.13741830e-02 7.13650925e-02 7.13560055e-02 7.13469219e-02 7.13378418e-02 + 7.13287651e-02 7.13196919e-02 7.13106222e-02 7.13015559e-02 7.12924931e-02 + 7.12834338e-02 7.12743779e-02 7.12653254e-02 7.12562764e-02 7.12472309e-02 + 7.12381888e-02 7.12291501e-02 7.12201149e-02 7.12110831e-02 7.12020547e-02 + 7.11930298e-02 7.11840083e-02 7.11749902e-02 7.11659756e-02 7.11569644e-02 + 7.11479566e-02 7.11389522e-02 7.11299512e-02 7.11209537e-02 7.11119596e-02 + 7.11029689e-02 7.10939816e-02 7.10849977e-02 7.10760172e-02 7.10670401e-02 + 7.10580664e-02 7.10490961e-02 7.10401292e-02 7.10311657e-02 7.10222056e-02 + 7.10132489e-02 7.10042956e-02 7.09953456e-02 7.09863990e-02 7.09774559e-02 + 7.09685161e-02 7.09595796e-02 7.09506466e-02 7.09417169e-02 7.09327906e-02 + 7.09238677e-02 7.09149481e-02 7.09060319e-02 7.08971191e-02 7.08882096e-02 + 7.08793035e-02 7.08704007e-02 7.08615013e-02 7.08526052e-02 7.08437125e-02 + 7.08348231e-02 7.08259371e-02 7.08170544e-02 7.08081751e-02 7.07992991e-02 + 7.07904264e-02 7.07815571e-02 7.07726911e-02 7.07638285e-02 7.07549691e-02 + 7.07461131e-02 7.07372604e-02 7.07284111e-02 7.07195650e-02 7.07107223e-02 + 7.07018829e-02 7.06930468e-02 7.06842141e-02 7.06753846e-02 7.06665584e-02 + 7.06577356e-02 7.06489160e-02 7.06400998e-02 7.06312868e-02 7.06224772e-02 + 7.06136708e-02 7.06048678e-02 7.05960680e-02 7.05872715e-02 7.05784783e-02 + 7.05696884e-02 7.05609018e-02 7.05521184e-02 7.05433384e-02 7.05345616e-02 + 1.00000000e+00 9.75894263e-01 9.53451752e-01 9.32489601e-01 9.12851907e-01 + 8.94404826e-01 8.77032714e-01 8.60635068e-01 8.45124065e-01 8.30422576e-01 + 8.16462554e-01 8.03183696e-01 7.90532350e-01 7.78460602e-01 7.66925506e-01 + 7.55888443e-01 7.45314577e-01 7.35172390e-01 7.25433287e-01 7.16071258e-01 + 7.07062580e-01 6.98385572e-01 6.90020370e-01 6.81948734e-01 6.74153887e-01 + 6.66620364e-01 6.59333880e-01 6.52281224e-01 6.45450150e-01 6.38829295e-01 + 6.32408091e-01 6.26176704e-01 6.20125961e-01 6.14247300e-01 6.08532716e-01 + 6.02974715e-01 5.97566276e-01 5.92300808e-01 5.87172122e-01 5.82174396e-01 + 5.77302151e-01 5.72550221e-01 5.67913735e-01 5.63388093e-01 5.58968948e-01 + 5.54652188e-01 5.50433918e-01 5.46310451e-01 5.42278287e-01 5.38334105e-01 + 5.34474753e-01 5.30697232e-01 5.26998691e-01 5.23376415e-01 5.19827818e-01 + 5.16350438e-01 5.12941922e-01 5.09600027e-01 5.06322612e-01 5.03107629e-01 + 4.99953120e-01 4.96857213e-01 4.93818117e-01 4.90834114e-01 4.87903560e-01 + 4.85024878e-01 4.82196556e-01 4.79417141e-01 4.76685242e-01 4.73999519e-01 + 4.71358685e-01 4.68761505e-01 4.66206788e-01 4.63693390e-01 4.61220209e-01 + 4.58786184e-01 4.56390292e-01 4.54031548e-01 4.51709002e-01 4.49421737e-01 + 4.47168870e-01 4.44949545e-01 4.42762941e-01 4.40608259e-01 4.38484731e-01 + 4.36391613e-01 4.34328187e-01 4.32293756e-01 4.30287649e-01 4.28309213e-01 + 4.26357819e-01 4.24432857e-01 4.22533734e-01 4.20659877e-01 4.18810733e-01 + 4.16985761e-01 4.15184441e-01 4.13406264e-01 4.11650741e-01 4.09917394e-01 + 4.08205761e-01 4.06515390e-01 4.04845847e-01 4.03196706e-01 4.01567556e-01 + 3.99957996e-01 3.98367636e-01 3.96796098e-01 3.95243014e-01 3.93708024e-01 + 3.92190780e-01 3.90690944e-01 3.89208184e-01 3.87742180e-01 3.86292617e-01 + 3.84859191e-01 3.83441605e-01 3.82039569e-01 3.80652800e-01 3.79281024e-01 + 3.77923973e-01 3.76581385e-01 3.75253005e-01 3.73938583e-01 3.72637878e-01 + 3.71350652e-01 3.70076675e-01 3.68815719e-01 3.67567566e-01 3.66332000e-01 + 3.65108810e-01 3.63897792e-01 3.62698745e-01 3.61511473e-01 3.60335785e-01 + 3.59171493e-01 3.58018415e-01 3.56876371e-01 3.55745187e-01 3.54624691e-01 + 3.53514717e-01 3.52415101e-01 3.51325683e-01 3.50246306e-01 3.49176816e-01 + 3.48117064e-01 3.47066903e-01 3.46026189e-01 3.44994782e-01 3.43972542e-01 + 3.42959337e-01 3.41955032e-01 3.40959498e-01 3.39972609e-01 3.38994241e-01 + 3.38024270e-01 3.37062579e-01 3.36109049e-01 3.35163566e-01 3.34226018e-01 + 3.33296293e-01 3.32374284e-01 3.31459885e-01 3.30552992e-01 3.29653502e-01 + 3.28761315e-01 3.27876333e-01 3.26998460e-01 3.26127600e-01 3.25263662e-01 + 3.24406553e-01 3.23556184e-01 3.22712468e-01 3.21875318e-01 3.21044649e-01 + 3.20220378e-01 3.19402424e-01 3.18590706e-01 3.17785145e-01 3.16985665e-01 + 3.16192188e-01 3.15404639e-01 3.14622947e-01 3.13847038e-01 3.13076841e-01 + 3.12312287e-01 3.11553306e-01 3.10799833e-01 3.10051800e-01 3.09309142e-01 + 3.08571795e-01 3.07839697e-01 3.07112784e-01 3.06390997e-01 3.05674275e-01 + 3.04962560e-01 3.04255793e-01 3.03553917e-01 3.02856876e-01 3.02164615e-01 + 3.01477079e-01 3.00794216e-01 3.00115971e-01 2.99442294e-01 2.98773134e-01 + 2.98108439e-01 2.97448161e-01 2.96792252e-01 2.96140662e-01 2.95493345e-01 + 2.94850254e-01 2.94211344e-01 2.93576570e-01 2.92945886e-01 2.92319250e-01 + 2.91696618e-01 2.91077947e-01 2.90463197e-01 2.89852325e-01 2.89245291e-01 + 2.88642055e-01 2.88042577e-01 2.87446820e-01 2.86854743e-01 2.86266311e-01 + 2.85681484e-01 2.85100228e-01 2.84522505e-01 2.83948280e-01 2.83377517e-01 + 2.82810183e-01 2.82246243e-01 2.81685662e-01 2.81128409e-01 2.80574450e-01 + 2.80023753e-01 2.79476286e-01 2.78932017e-01 2.78390916e-01 2.77852951e-01 + 2.77318094e-01 2.76786313e-01 2.76257580e-01 2.75731865e-01 2.75209140e-01 + 2.74689377e-01 2.74172548e-01 2.73658625e-01 2.73147581e-01 2.72639389e-01 + 2.72134024e-01 2.71631458e-01 2.71131667e-01 2.70634624e-01 2.70140305e-01 + 2.69648684e-01 2.69159738e-01 2.68673442e-01 2.68189772e-01 2.67708706e-01 + 2.67230218e-01 2.66754287e-01 2.66280890e-01 2.65810005e-01 2.65341608e-01 + 2.64875680e-01 2.64412197e-01 2.63951138e-01 2.63492483e-01 2.63036211e-01 + 2.62582301e-01 2.62130732e-01 2.61681486e-01 2.61234541e-01 2.60789879e-01 + 2.60347479e-01 2.59907323e-01 2.59469393e-01 2.59033668e-01 2.58600131e-01 + 2.58168764e-01 2.57739549e-01 2.57312467e-01 2.56887501e-01 2.56464633e-01 + 2.56043847e-01 2.55625126e-01 2.55208452e-01 2.54793809e-01 2.54381180e-01 + 2.53970550e-01 2.53561902e-01 2.53155220e-01 2.52750489e-01 2.52347693e-01 + 2.51946816e-01 2.51547844e-01 2.51150761e-01 2.50755553e-01 2.50362204e-01 + 2.49970701e-01 2.49581029e-01 2.49193173e-01 2.48807120e-01 2.48422856e-01 + 2.48040367e-01 2.47659639e-01 2.47280658e-01 2.46903413e-01 2.46527888e-01 + 2.46154072e-01 2.45781951e-01 2.45411513e-01 2.45042745e-01 2.44675634e-01 + 2.44310168e-01 2.43946335e-01 2.43584122e-01 2.43223518e-01 2.42864511e-01 + 2.42507089e-01 2.42151241e-01 2.41796954e-01 2.41444218e-01 2.41093021e-01 + 2.40743352e-01 2.40395201e-01 2.40048555e-01 2.39703404e-01 2.39359739e-01 + 2.39017547e-01 2.38676818e-01 2.38337542e-01 2.37999710e-01 2.37663309e-01 + 2.37328332e-01 2.36994766e-01 2.36662603e-01 2.36331833e-01 2.36002446e-01 + 2.35674432e-01 2.35347783e-01 2.35022487e-01 2.34698537e-01 2.34375923e-01 + 2.34054635e-01 2.33734666e-01 2.33416004e-01 2.33098643e-01 2.32782573e-01 + 2.32467784e-01 2.32154270e-01 2.31842020e-01 2.31531028e-01 2.31221283e-01 + 2.30912778e-01 2.30605504e-01 2.30299454e-01 2.29994620e-01 2.29690992e-01 + 2.29388564e-01 2.29087328e-01 2.28787275e-01 2.28488398e-01 2.28190689e-01 + 2.27894141e-01 2.27598746e-01 2.27304497e-01 2.27011386e-01 2.26719406e-01 + 2.26428550e-01 2.26138810e-01 2.25850180e-01 2.25562652e-01 2.25276219e-01 + 2.24990875e-01 2.24706613e-01 2.24423425e-01 2.24141305e-01 2.23860246e-01 + 2.23580243e-01 2.23301287e-01 2.23023372e-01 2.22746493e-01 2.22470643e-01 + 2.22195814e-01 2.21922002e-01 2.21649200e-01 2.21377401e-01 2.21106599e-01 + 2.20836789e-01 2.20567964e-01 2.20300119e-01 2.20033247e-01 2.19767342e-01 + 2.19502400e-01 2.19238413e-01 2.18975376e-01 2.18713284e-01 2.18452130e-01 + 2.18191910e-01 2.17932618e-01 2.17674247e-01 2.17416794e-01 2.17160252e-01 + 2.16904616e-01 2.16649880e-01 2.16396040e-01 2.16143090e-01 2.15891025e-01 + 2.15639840e-01 2.15389530e-01 2.15140089e-01 2.14891513e-01 2.14643796e-01 + 2.14396935e-01 2.14150923e-01 2.13905756e-01 2.13661429e-01 2.13417937e-01 + 2.13175276e-01 2.12933441e-01 2.12692427e-01 2.12452229e-01 2.12212843e-01 + 2.11974265e-01 2.11736490e-01 2.11499513e-01 2.11263330e-01 2.11027936e-01 + 2.10793328e-01 2.10559500e-01 2.10326449e-01 2.10094169e-01 2.09862658e-01 + 2.09631910e-01 2.09401922e-01 2.09172689e-01 2.08944208e-01 2.08716473e-01 + 2.08489481e-01 2.08263229e-01 2.08037711e-01 2.07812924e-01 2.07588865e-01 + 2.07365528e-01 2.07142911e-01 2.06921010e-01 2.06699820e-01 2.06479337e-01 + 2.06259559e-01 2.06040481e-01 2.05822100e-01 2.05604412e-01 2.05387413e-01 + 2.05171099e-01 2.04955468e-01 2.04740515e-01 2.04526237e-01 2.04312630e-01 + 2.04099691e-01 2.03887417e-01 2.03675803e-01 2.03464847e-01 2.03254545e-01 + 2.03044894e-01 2.02835891e-01 2.02627531e-01 2.02419812e-01 2.02212731e-01 + 2.02006284e-01 2.01800468e-01 2.01595280e-01 2.01390716e-01 2.01186774e-01 + 2.00983451e-01 2.00780742e-01 2.00578646e-01 2.00377158e-01 2.00176277e-01 + 1.99975998e-01 1.99776320e-01 1.99577238e-01 1.99378751e-01 1.99180854e-01 + 1.98983546e-01 1.98786822e-01 1.98590681e-01 1.98395120e-01 1.98200135e-01 + 1.98005724e-01 1.97811884e-01 1.97618612e-01 1.97425905e-01 1.97233761e-01 + 1.97042177e-01 1.96851151e-01 1.96660678e-01 1.96470758e-01 1.96281387e-01 + 1.96092562e-01 1.95904281e-01 1.95716541e-01 1.95529341e-01 1.95342676e-01 + 1.95156545e-01 1.94970945e-01 1.94785873e-01 1.94601328e-01 1.94417306e-01 + 1.94233805e-01 1.94050823e-01 1.93868357e-01 1.93686404e-01 1.93504963e-01 + 1.93324031e-01 1.93143606e-01 1.92963685e-01 1.92784265e-01 1.92605345e-01 + 1.92426923e-01 1.92248995e-01 1.92071560e-01 1.91894616e-01 1.91718159e-01 + 1.91542189e-01 1.91366702e-01 1.91191696e-01 1.91017170e-01 1.90843121e-01 + 1.90669546e-01 1.90496445e-01 1.90323814e-01 1.90151652e-01 1.89979956e-01 + 1.89808724e-01 1.89637954e-01 1.89467644e-01 1.89297793e-01 1.89128397e-01 + 1.88959456e-01 1.88790966e-01 1.88622926e-01 1.88455335e-01 1.88288189e-01 + 1.88121487e-01 1.87955227e-01 1.87789407e-01 1.87624025e-01 1.87459079e-01 + 1.87294568e-01 1.87130489e-01 1.86966840e-01 1.86803620e-01 1.86640827e-01 + 1.86478458e-01 1.86316513e-01 1.86154989e-01 1.85993884e-01 1.85833197e-01 + 1.85672925e-01 1.85513068e-01 1.85353622e-01 1.85194587e-01 1.85035961e-01 + 1.84877742e-01 1.84719927e-01 1.84562517e-01 1.84405508e-01 1.84248899e-01 + 1.84092688e-01 1.83936874e-01 1.83781455e-01 1.83626429e-01 1.83471795e-01 + 1.83317551e-01 1.83163695e-01 1.83010226e-01 1.82857142e-01 1.82704442e-01 + 1.82552123e-01 1.82400185e-01 1.82248626e-01 1.82097444e-01 1.81946637e-01 + 1.81796204e-01 1.81646144e-01 1.81496455e-01 1.81347136e-01 1.81198184e-01 + 1.81049599e-01 1.80901378e-01 1.80753522e-01 1.80606027e-01 1.80458892e-01 + 1.80312117e-01 1.80165699e-01 1.80019637e-01 1.79873930e-01 1.79728576e-01 + 1.79583574e-01 1.79438922e-01 1.79294620e-01 1.79150665e-01 1.79007056e-01 + 1.78863792e-01 1.78720871e-01 1.78578292e-01 1.78436054e-01 1.78294156e-01 + 1.78152595e-01 1.78011371e-01 1.77870482e-01 1.77729928e-01 1.77589706e-01 + 1.77449815e-01 1.77310255e-01 1.77171023e-01 1.77032119e-01 1.76893540e-01 + 1.76755287e-01 1.76617358e-01 1.76479751e-01 1.76342465e-01 1.76205499e-01 + 1.76068851e-01 1.75932521e-01 1.75796507e-01 1.75660808e-01 1.75525423e-01 + 1.75390351e-01 1.75255589e-01 1.75121138e-01 1.74986996e-01 1.74853162e-01 + 1.74719634e-01 1.74586412e-01 1.74453494e-01 1.74320879e-01 1.74188566e-01 + 1.74056554e-01 1.73924842e-01 1.73793428e-01 1.73662312e-01 1.73531492e-01 + 1.73400967e-01 1.73270736e-01 1.73140798e-01 1.73011152e-01 1.72881797e-01 + 1.72752732e-01 1.72623955e-01 1.72495466e-01 1.72367263e-01 1.72239346e-01 + 1.72111713e-01 1.71984363e-01 1.71857296e-01 1.71730510e-01 1.71604004e-01 + 1.71477777e-01 1.71351828e-01 1.71226157e-01 1.71100761e-01 1.70975641e-01 + 1.70850795e-01 1.70726222e-01 1.70601921e-01 1.70477891e-01 1.70354131e-01 + 1.70230640e-01 1.70107418e-01 1.69984462e-01 1.69861773e-01 1.69739349e-01 + 1.69617190e-01 1.69495294e-01 1.69373660e-01 1.69252288e-01 1.69131176e-01 + 1.69010324e-01 1.68889731e-01 1.68769395e-01 1.68649317e-01 1.68529494e-01 + 1.68409926e-01 1.68290613e-01 1.68171552e-01 1.68052744e-01 1.67934188e-01 + 1.67815882e-01 1.67697825e-01 1.67580018e-01 1.67462458e-01 1.67345146e-01 + 1.67228079e-01 1.67111258e-01 1.66994682e-01 1.66878349e-01 1.66762259e-01 + 1.66646411e-01 1.66530804e-01 1.66415437e-01 1.66300309e-01 1.66185421e-01 + 1.66070770e-01 1.65956356e-01 1.65842178e-01 1.65728235e-01 1.65614527e-01 + 1.65501053e-01 1.65387812e-01 1.65274803e-01 1.65162025e-01 1.65049477e-01 + 1.64937160e-01 1.64825071e-01 1.64713211e-01 1.64601578e-01 1.64490172e-01 + 1.64378991e-01 1.64268036e-01 1.64157305e-01 1.64046798e-01 1.63936514e-01 + 1.63826452e-01 1.63716611e-01 1.63606991e-01 1.63497591e-01 1.63388409e-01 + 1.63279447e-01 1.63170702e-01 1.63062174e-01 1.62953862e-01 1.62845766e-01 + 1.62737885e-01 1.62630217e-01 1.62522764e-01 1.62415523e-01 1.62308493e-01 + 1.62201676e-01 1.62095069e-01 1.61988671e-01 1.61882483e-01 1.61776504e-01 + 1.61670732e-01 1.61565168e-01 1.61459810e-01 1.61354658e-01 1.61249711e-01 + 1.61144969e-01 1.61040431e-01 1.60936095e-01 1.60831963e-01 1.60728032e-01 + 1.60624302e-01 1.60520773e-01 1.60417444e-01 1.60314314e-01 1.60211383e-01 + 1.60108650e-01 1.60006114e-01 1.59903775e-01 1.59801632e-01 1.59699684e-01 + 1.59597932e-01 1.59496373e-01 1.59395009e-01 1.59293837e-01 1.59192858e-01 + 1.59092070e-01 1.58991474e-01 1.58891068e-01 1.58790852e-01 1.58690826e-01 + 1.58590988e-01 1.58491339e-01 1.58391877e-01 1.58292602e-01 1.58193514e-01 + 1.58094612e-01 1.57995894e-01 1.57897362e-01 1.57799013e-01 1.57700849e-01 + 1.57602867e-01 1.57505067e-01 1.57407450e-01 1.57310013e-01 1.57212758e-01 + 1.57115682e-01 1.57018786e-01 1.56922069e-01 1.56825531e-01 1.56729171e-01 + 1.56632988e-01 1.56536982e-01 1.56441152e-01 1.56345498e-01 1.56250019e-01 + 1.56154715e-01 1.56059585e-01 1.55964629e-01 1.55869846e-01 1.55775235e-01 + 1.55680797e-01 1.55586530e-01 1.55492434e-01 1.55398509e-01 1.55304754e-01 + 1.55211168e-01 1.55117751e-01 1.55024502e-01 1.54931422e-01 1.54838509e-01 + 1.54745763e-01 1.54653183e-01 1.54560770e-01 1.54468522e-01 1.54376439e-01 + 1.54284520e-01 1.54192765e-01 1.54101174e-01 1.54009746e-01 1.53918481e-01 + 1.53827377e-01 1.53736435e-01 1.53645654e-01 1.53555034e-01 1.53464574e-01 + 1.53374274e-01 1.53284132e-01 1.53194150e-01 1.53104326e-01 1.53014660e-01 + 1.52925151e-01 1.52835798e-01 1.52746603e-01 1.52657563e-01 1.52568679e-01 + 1.52479950e-01 1.52391376e-01 1.52302955e-01 1.52214689e-01 1.52126576e-01 + 1.52038615e-01 1.51950807e-01 1.51863151e-01 1.51775647e-01 1.51688293e-01 + 1.51601091e-01 1.51514038e-01 1.51427135e-01 1.51340382e-01 1.51253778e-01 + 1.51167322e-01 1.51081014e-01 1.50994854e-01 1.50908841e-01 1.50822975e-01 + 1.50737255e-01 1.50651681e-01 1.50566253e-01 1.50480970e-01 1.50395832e-01 + 1.50310838e-01 1.50225988e-01 1.50141281e-01 1.50056718e-01 1.49972298e-01 + 1.49888019e-01 1.49803883e-01 1.49719888e-01 1.49636035e-01 1.49552322e-01 + 1.49468749e-01 1.49385316e-01 1.49302023e-01 1.49218869e-01 1.49135854e-01 + 1.49052977e-01 1.48970239e-01 1.48887638e-01 1.48805174e-01 1.48722847e-01 + 1.48640656e-01 1.48558602e-01 1.48476683e-01 1.48394900e-01 1.48313252e-01 + 1.48231738e-01 1.48150359e-01 1.48069113e-01 1.47988001e-01 1.47907022e-01 + 1.47826176e-01 1.47745463e-01 1.47664881e-01 1.47584431e-01 1.47504113e-01 + 1.47423925e-01 1.47343868e-01 1.47263942e-01 1.47184145e-01 1.47104478e-01 + 1.47024940e-01 1.46945531e-01 1.46866251e-01 1.46787099e-01 1.46708074e-01 + 1.46629177e-01 1.46550407e-01 1.46471764e-01 1.46393248e-01 1.46314857e-01 + 1.46236593e-01 1.46158454e-01 1.46080440e-01 1.46002551e-01 1.45924786e-01 + 1.45847145e-01 1.45769628e-01 1.45692235e-01 1.45614965e-01 1.45537817e-01 + 1.45460792e-01 1.45383890e-01 1.45307109e-01 1.45230449e-01 1.45153911e-01 + 1.45077494e-01 1.45001197e-01 1.44925021e-01 1.44848964e-01 1.44773027e-01 + 1.44697209e-01 1.44621511e-01 1.44545931e-01 1.44470469e-01 1.44395126e-01 + 1.44319900e-01 1.44244791e-01 1.44169800e-01 1.44094926e-01 1.44020168e-01 + 1.43945527e-01 1.43871001e-01 1.43796591e-01 1.43722296e-01 1.43648117e-01 + 1.43574052e-01 1.43500101e-01 1.43426265e-01 1.43352542e-01 1.43278934e-01 + 1.43205438e-01 1.43132055e-01 1.43058785e-01 1.42985628e-01 1.42912583e-01 + 1.42839649e-01 1.42766827e-01 1.42694116e-01 1.42621516e-01 1.42549027e-01 + 1.42476649e-01 1.42404380e-01 1.42332222e-01 1.42260172e-01 1.42188233e-01 + 1.42116402e-01 1.42044680e-01 1.41973066e-01 1.41901561e-01 1.41830164e-01 + 1.41758874e-01 1.41687692e-01 1.41616617e-01 1.41545648e-01 1.41474786e-01 + 1.41404031e-01 1.41333382e-01 1.41262838e-01 1.41192400e-01 1.41122067e-01 + 1.41051839e-01 1.40981716e-01 1.40911698e-01 1.40841783e-01 1.40771973e-01 + 1.40702266e-01 1.40632663e-01 1.40563163e-01 1.40493766e-01 1.40424471e-01 + 1.40355279e-01 1.40286189e-01 1.40217202e-01 1.40148315e-01 1.40079531e-01 + 1.40010847e-01 1.39942264e-01 1.39873782e-01 1.39805401e-01 1.39737119e-01 + 1.39668938e-01 1.39600856e-01 1.39532874e-01 1.39464991e-01 1.39397207e-01 + 1.39329522e-01 1.39261935e-01 1.39194446e-01 1.39127056e-01 1.39059763e-01 + 1.38992568e-01 1.38925470e-01 1.38858469e-01 1.38791565e-01 1.38724758e-01 + 1.38658047e-01 1.38591432e-01 1.38524913e-01 1.38458490e-01 1.38392162e-01 + 1.38325930e-01 1.38259792e-01 1.38193750e-01 1.38127801e-01 1.38061947e-01 + 1.37996188e-01 1.37930522e-01 1.37864950e-01 1.37799471e-01 1.37734085e-01 + 1.37668793e-01 1.37603593e-01 1.37538485e-01 1.37473471e-01 1.37408548e-01 + 1.37343717e-01 1.37278977e-01 1.37214330e-01 1.37149773e-01 1.37085308e-01 + 1.37020933e-01 1.36956649e-01 1.36892455e-01 1.36828351e-01 1.36764338e-01 + 1.36700414e-01 1.36636580e-01 1.36572835e-01 1.36509179e-01 1.36445612e-01 + 1.36382134e-01 1.36318745e-01 1.36255443e-01 1.36192230e-01 1.36129105e-01 + 1.36066067e-01 1.36003117e-01 1.35940254e-01 1.35877478e-01 1.35814789e-01 + 1.35752187e-01 1.35689672e-01 1.35627242e-01 1.35564899e-01 1.35502641e-01 + 1.35440470e-01 1.35378384e-01 1.35316383e-01 1.35254467e-01 1.35192636e-01 + 1.35130890e-01 1.35069228e-01 1.35007651e-01 1.34946158e-01 1.34884748e-01 + 1.34823423e-01 1.34762181e-01 1.34701022e-01 1.34639947e-01 1.34578955e-01 + 1.34518045e-01 1.34457218e-01 1.34396474e-01 1.34335812e-01 1.34275232e-01 + 1.34214733e-01 1.34154317e-01 1.34093982e-01 1.34033728e-01 1.33973556e-01 + 1.33913464e-01 1.33853453e-01 1.33793523e-01 1.33733673e-01 1.33673904e-01 + 1.33614214e-01 1.33554605e-01 1.33495075e-01 1.33435625e-01 1.33376254e-01 + 1.33316962e-01 1.33257749e-01 1.33198615e-01 1.33139560e-01 1.33080583e-01 + 1.33021685e-01 1.32962864e-01 1.32904122e-01 1.32845457e-01 1.32786870e-01 + 1.32728361e-01 1.32669928e-01 1.32611573e-01 1.32553295e-01 1.32495093e-01 + 1.32436968e-01 1.32378920e-01 1.32320948e-01 1.32263052e-01 1.32205232e-01 + 1.32147487e-01 1.32089818e-01 1.32032225e-01 1.31974707e-01 1.31917264e-01 + 1.31859896e-01 1.31802603e-01 1.31745384e-01 1.31688240e-01 1.31631170e-01 + 1.31574174e-01 1.31517252e-01 1.31460404e-01 1.31403630e-01 1.31346929e-01 + 1.31290301e-01 1.31233747e-01 1.31177266e-01 1.31120857e-01 1.31064522e-01 + 1.31008258e-01 1.30952068e-01 1.30895949e-01 1.30839903e-01 1.30783928e-01 + 1.30728025e-01 1.30672194e-01 1.30616435e-01 1.30560746e-01 1.30505129e-01 + 1.30449583e-01 1.30394108e-01 1.30338703e-01 1.30283369e-01 1.30228105e-01 + 1.30172912e-01 1.30117789e-01 1.30062736e-01 1.30007752e-01 1.29952839e-01 + 1.29897994e-01 1.29843219e-01 1.29788514e-01 1.29733877e-01 1.29679310e-01 + 1.29624811e-01 1.29570381e-01 1.29516019e-01 1.29461726e-01 1.29407501e-01 + 1.29353344e-01 1.29299255e-01 1.29245234e-01 1.29191280e-01 1.29137394e-01 + 1.29083575e-01 1.29029824e-01 1.28976140e-01 1.28922522e-01 1.28868972e-01 + 1.28815488e-01 1.28762070e-01 1.28708719e-01 1.28655435e-01 1.28602216e-01 + 1.28549063e-01 1.28495977e-01 1.28442955e-01 1.28390000e-01 1.28337110e-01 + 1.28284285e-01 1.28231526e-01 1.28178831e-01 1.28126202e-01 1.28073637e-01 + 1.28021137e-01 1.27968701e-01 1.27916330e-01 1.27864023e-01 1.27811780e-01 + 1.27759601e-01 1.27707486e-01 1.27655434e-01 1.27603447e-01 1.27551522e-01 + 1.27499661e-01 1.27447864e-01 1.27396129e-01 1.27344457e-01 1.27292848e-01 + 1.27241302e-01 1.27189818e-01 1.27138397e-01 1.27087038e-01 1.27035742e-01 + 1.26984507e-01 1.26933334e-01 1.26882223e-01 1.26831174e-01 1.26780187e-01 + 1.26729260e-01 1.26678396e-01 1.26627592e-01 1.26576849e-01 1.26526168e-01 + 1.26475547e-01 1.26424987e-01 1.26374487e-01 1.26324048e-01 1.26273670e-01 + 1.26223351e-01 1.26173093e-01 1.26122894e-01 1.26072756e-01 1.26022677e-01 + 1.25972658e-01 1.25922698e-01 1.25872798e-01 1.25822957e-01 1.25773176e-01 + 1.25723453e-01 1.25673789e-01 1.25624184e-01 1.25574638e-01 1.25525150e-01 + 1.25475721e-01 1.25426350e-01 1.25377037e-01 1.25327782e-01 1.25278586e-01 + 1.25229447e-01 1.25180366e-01 1.25131343e-01 1.25082377e-01 1.25033469e-01 + 1.24984618e-01 1.24935824e-01 1.24887088e-01 1.24838408e-01 1.24789785e-01 + 1.24741219e-01 1.24692710e-01 1.24644257e-01 1.24595861e-01 1.24547521e-01 + 1.24499237e-01 1.24451010e-01 1.24402838e-01 1.24354722e-01 1.24306662e-01 + 1.24258658e-01 1.24210709e-01 1.24162816e-01 1.24114978e-01 1.24067195e-01 + 1.24019468e-01 1.23971795e-01 1.23924178e-01 1.23876615e-01 1.23829107e-01 + 1.23781654e-01 1.23734255e-01 1.23686910e-01 1.23639620e-01 1.23592384e-01 + 1.23545202e-01 1.23498075e-01 1.23451001e-01 1.23403980e-01 1.23357014e-01 + 1.23310101e-01 1.23263242e-01 1.23216436e-01 1.23169683e-01 1.23122983e-01 + 1.23076337e-01 1.23029743e-01 1.22983202e-01 1.22936715e-01 1.22890279e-01 + 1.22843897e-01 1.22797567e-01 1.22751289e-01 1.22705063e-01 1.22658890e-01 + 1.22612769e-01 1.22566700e-01 1.22520682e-01 1.22474717e-01 1.22428803e-01 + 1.22382941e-01 1.22337130e-01 1.22291371e-01 1.22245663e-01 1.22200006e-01 + 1.22154400e-01 1.22108845e-01 1.22063342e-01 1.22017889e-01 1.21972487e-01 + 1.21927135e-01 1.21881834e-01 1.21836584e-01 1.21791383e-01 1.21746234e-01 + 1.21701134e-01 1.21656084e-01 1.21611085e-01 1.21566135e-01 1.21521235e-01 + 1.21476385e-01 1.21431584e-01 1.21386833e-01 1.21342131e-01 1.21297479e-01 + 1.21252876e-01 1.21208322e-01 1.21163817e-01 1.21119362e-01 1.21074955e-01 + 1.21030597e-01 1.20986287e-01 1.20942026e-01 1.20897814e-01 1.20853651e-01 + 1.20809535e-01 1.20765468e-01 1.20721449e-01 1.20677478e-01 1.20633555e-01 + 1.20589681e-01 1.20545854e-01 1.20502074e-01 1.20458343e-01 1.20414659e-01 + 1.20371022e-01 1.20327433e-01 1.20283891e-01 1.20240396e-01 1.20196949e-01 + 1.20153549e-01 1.20110195e-01 1.20066889e-01 1.20023629e-01 1.19980416e-01 + 1.19937250e-01 1.19894130e-01 1.19851056e-01 1.19808030e-01 1.19765049e-01 + 1.19722115e-01 1.19679226e-01 1.19636384e-01 1.19593588e-01 1.19550838e-01 + 1.19508133e-01 1.19465474e-01 1.19422861e-01 1.19380294e-01 1.19337772e-01 + 1.19295295e-01 1.19252863e-01 1.19210477e-01 1.19168136e-01 1.19125841e-01 + 1.19083590e-01 1.19041384e-01 1.18999223e-01 1.18957106e-01 1.18915035e-01 + 1.18873008e-01 1.18831025e-01 1.18789087e-01 1.18747194e-01 1.18705344e-01 + 1.18663539e-01 1.18621778e-01 1.18580061e-01 1.18538388e-01 1.18496759e-01 + 1.18455174e-01 1.18413632e-01 1.18372134e-01 1.18330680e-01 1.18289269e-01 + 1.18247902e-01 1.18206578e-01 1.18165298e-01 1.18124060e-01 1.18082866e-01 + 1.18041715e-01 1.18000607e-01 1.17959541e-01 1.17918519e-01 1.17877539e-01 + 1.17836602e-01 1.17795708e-01 1.17754856e-01 1.17714047e-01 1.17673280e-01 + 1.17632556e-01 1.17591873e-01 1.17551233e-01 1.17510635e-01 1.17470079e-01 + 1.17429565e-01 1.17389093e-01 1.17348662e-01 1.17308274e-01 1.17267927e-01 + 1.17227622e-01 1.17187358e-01 1.17147135e-01 1.17106955e-01 1.17066815e-01 + 1.17026717e-01 1.16986659e-01 1.16946643e-01 1.16906668e-01 1.16866734e-01 + 1.16826841e-01 1.16786988e-01 1.16747177e-01 1.16707406e-01 1.16667676e-01 + 1.16627986e-01 1.16588337e-01 1.16548728e-01 1.16509159e-01 1.16469631e-01 + 1.16430143e-01 1.16390695e-01 1.16351287e-01 1.16311919e-01 1.16272591e-01 + 1.16233303e-01 1.16194055e-01 1.16154846e-01 1.16115678e-01 1.16076548e-01 + 1.16037459e-01 1.15998408e-01 1.15959397e-01 1.15920426e-01 1.15881494e-01 + 1.15842601e-01 1.15803747e-01 1.15764932e-01 1.15726156e-01 1.15687419e-01 + 1.15648721e-01 1.15610062e-01 1.15571441e-01 1.15532859e-01 1.15494316e-01 + 1.15455812e-01 1.15417345e-01 1.15378918e-01 1.15340528e-01 1.15302177e-01 + 1.15263864e-01 1.15225590e-01 1.15187353e-01 1.15149155e-01 1.15110994e-01 + 1.15072871e-01 1.15034786e-01 1.14996739e-01 1.14958730e-01 1.14920759e-01 + 1.14882824e-01 1.14844928e-01 1.14807069e-01 1.14769247e-01 1.14731463e-01 + 1.14693716e-01 1.14656006e-01 1.14618334e-01 1.14580699e-01 1.14543100e-01 + 1.14505539e-01 1.14468014e-01 1.14430527e-01 1.14393076e-01 1.14355662e-01 + 1.14318284e-01 1.14280944e-01 1.14243640e-01 1.14206372e-01 1.14169141e-01 + 1.14131946e-01 1.14094787e-01 1.14057665e-01 1.14020579e-01 1.13983529e-01 + 1.13946515e-01 1.13909538e-01 1.13872596e-01 1.13835690e-01 1.13798820e-01 + 1.13761986e-01 1.13725188e-01 1.13688425e-01 1.13651698e-01 1.13615006e-01 + 1.13578350e-01 1.13541730e-01 1.13505144e-01 1.13468595e-01 1.13432080e-01 + 1.13395601e-01 1.13359156e-01 1.13322747e-01 1.13286373e-01 1.13250035e-01 + 1.13213730e-01 1.13177461e-01 1.13141227e-01 1.13105028e-01 1.13068863e-01 + 1.13032733e-01 1.12996637e-01 1.12960576e-01 1.12924550e-01 1.12888558e-01 + 1.12852600e-01 1.12816677e-01 1.12780788e-01 1.12744933e-01 1.12709112e-01 + 1.12673326e-01 1.12637574e-01 1.12601855e-01 1.12566171e-01 1.12530520e-01 + 1.12494904e-01 1.12459321e-01 1.12423772e-01 1.12388256e-01 1.12352774e-01 + 1.12317326e-01 1.12281911e-01 1.12246530e-01 1.12211182e-01 1.12175868e-01 + 1.12140587e-01 1.12105339e-01 1.12070125e-01 1.12034943e-01 1.11999795e-01 + 1.11964679e-01 1.11929597e-01 1.11894548e-01 1.11859532e-01 1.11824548e-01 + 1.11789597e-01 1.11754679e-01 1.11719794e-01 1.11684941e-01 1.11650121e-01 + 1.11615334e-01 1.11580579e-01 1.11545856e-01 1.11511166e-01 1.11476508e-01 + 1.11441883e-01 1.11407289e-01 1.11372728e-01 1.11338199e-01 1.11303703e-01 + 1.11269238e-01 1.11234805e-01 1.11200404e-01 1.11166035e-01 1.11131698e-01 + 1.11097393e-01 1.11063119e-01 1.11028877e-01 1.10994667e-01 1.10960489e-01 + 1.10926342e-01 1.10892226e-01 1.10858142e-01 1.10824089e-01 1.10790068e-01 + 1.10756078e-01 1.10722119e-01 1.10688192e-01 1.10654295e-01 1.10620430e-01 + 1.10586596e-01 1.10552793e-01 1.10519021e-01 1.10485279e-01 1.10451569e-01 + 1.10417890e-01 1.10384241e-01 1.10350623e-01 1.10317036e-01 1.10283479e-01 + 1.10249953e-01 1.10216458e-01 1.10182993e-01 1.10149558e-01 1.10116154e-01 + 1.10082780e-01 1.10049437e-01 1.10016124e-01 1.09982841e-01 1.09949588e-01 + 1.09916366e-01 1.09883174e-01 1.09850011e-01 1.09816879e-01 1.09783776e-01 + 1.09750704e-01 1.09717661e-01 1.09684648e-01 1.09651665e-01 1.09618712e-01 + 1.09585789e-01 1.09552895e-01 1.09520030e-01 1.09487196e-01 1.09454390e-01 + 1.09421615e-01 1.09388868e-01 1.09356151e-01 1.09323464e-01 1.09290805e-01 + 1.09258176e-01 1.09225576e-01 1.09193006e-01 1.09160464e-01 1.09127951e-01 + 1.09095468e-01 1.09063013e-01 1.09030588e-01 1.08998191e-01 1.08965824e-01 + 1.08933485e-01 1.08901174e-01 1.08868893e-01 1.08836640e-01 1.08804416e-01 + 1.08772220e-01 1.08740054e-01 1.08707915e-01 1.08675805e-01 1.08643724e-01 + 1.08611671e-01 1.08579646e-01 1.08547649e-01 1.08515681e-01 1.08483741e-01 + 1.08451829e-01 1.08419946e-01 1.08388090e-01 1.08356263e-01 1.08324463e-01 + 1.08292692e-01 1.08260948e-01 1.08229233e-01 1.08197545e-01 1.08165885e-01 + 1.08134253e-01 1.08102648e-01 1.08071072e-01 1.08039523e-01 1.08008001e-01 + 1.07976507e-01 1.07945041e-01 1.07913602e-01 1.07882191e-01 1.07850807e-01 + 1.07819450e-01 1.07788121e-01 1.07756819e-01 1.07725544e-01 1.07694296e-01 + 1.07663076e-01 1.07631883e-01 1.07600717e-01 1.07569578e-01 1.07538466e-01 + 1.07507381e-01 1.07476322e-01 1.07445291e-01 1.07414287e-01 1.07383309e-01 + 1.07352359e-01 1.07321435e-01 1.07290537e-01 1.07259667e-01 1.07228823e-01 + 1.07198005e-01 1.07167214e-01 1.07136450e-01 1.07105712e-01 1.07075001e-01 + 1.07044316e-01 1.07013657e-01 1.06983025e-01 1.06952419e-01 1.06921839e-01 + 1.06891286e-01 1.06860758e-01 1.06830257e-01 1.06799782e-01 1.06769333e-01 + 1.06738910e-01 1.06708513e-01 1.06678142e-01 1.06647796e-01 1.06617477e-01 + 1.06587184e-01 1.06556916e-01 1.06526674e-01 1.06496458e-01 1.06466268e-01 + 1.06436103e-01 1.06405964e-01 1.06375850e-01 1.06345762e-01 1.06315700e-01 + 1.06285663e-01 1.06255651e-01 1.06225665e-01 1.06195704e-01 1.06165769e-01 + 1.06135859e-01 1.06105974e-01 1.06076114e-01 1.06046280e-01 1.06016470e-01 + 1.05986686e-01 1.05956927e-01 1.05927193e-01 1.05897484e-01 1.05867800e-01 + 1.05838141e-01 1.05808507e-01 1.05778897e-01 1.05749313e-01 1.05719753e-01 + 1.05690218e-01 1.05660708e-01 1.05631223e-01 1.05601762e-01 1.05572326e-01 + 1.05542914e-01 1.05513528e-01 1.05484165e-01 1.05454827e-01 1.05425514e-01 + 1.05396225e-01 1.05366960e-01 1.05337720e-01 1.05308504e-01 1.05279312e-01 + 1.05250145e-01 1.05221002e-01 1.05191883e-01 1.05162788e-01 1.05133717e-01 + 1.05104671e-01 1.05075648e-01 1.05046650e-01 1.05017675e-01 1.04988725e-01 + 1.04959798e-01 1.04930896e-01 1.04902017e-01 1.04873162e-01 1.04844331e-01 + 1.04815523e-01 1.04786740e-01 1.04757980e-01 1.04729243e-01 1.04700531e-01 + 1.04671841e-01 1.04643176e-01 1.04614534e-01 1.04585916e-01 1.04557321e-01 + 1.04528749e-01 1.04500201e-01 1.04471676e-01 1.04443175e-01 1.04414697e-01 + 1.04386242e-01 1.04357810e-01 1.04329402e-01 1.04301017e-01 1.04272655e-01 + 1.04244316e-01 1.04216000e-01 1.04187707e-01 1.04159437e-01 1.04131191e-01 + 1.04102967e-01 1.04074766e-01 1.04046588e-01 1.04018433e-01 1.03990301e-01 + 1.03962192e-01 1.03934105e-01 1.03906041e-01 1.03878000e-01 1.03849982e-01 + 1.03821986e-01 1.03794013e-01 1.03766062e-01 1.03738134e-01 1.03710229e-01 + 1.03682346e-01 1.03654486e-01 1.03626648e-01 1.03598832e-01 1.03571039e-01 + 1.03543268e-01 1.03515520e-01 1.03487793e-01 1.03460089e-01 1.03432408e-01 + 1.03404748e-01 1.03377111e-01 1.03349496e-01 1.03321903e-01 1.03294332e-01 + 1.03266783e-01 1.03239256e-01 1.03211751e-01 1.03184268e-01 1.03156807e-01 + 1.03129368e-01 1.03101951e-01 1.03074556e-01 1.03047182e-01 1.03019831e-01 + 1.02992501e-01 1.02965192e-01 1.02937906e-01 1.02910641e-01 1.02883398e-01 + 1.02856177e-01 1.02828977e-01 1.02801798e-01 1.02774642e-01 1.02747506e-01 + 1.02720392e-01 1.02693300e-01 1.02666229e-01 1.02639180e-01 1.02612151e-01 + 1.02585145e-01 1.02558159e-01 1.02531195e-01 1.02504252e-01 1.02477330e-01 + 1.02450430e-01 1.02423550e-01 1.02396692e-01 1.02369855e-01 1.02343039e-01 + 1.02316244e-01 1.02289470e-01 1.02262717e-01 1.02235985e-01 1.02209274e-01 + 1.02182584e-01 1.02155915e-01 1.02129267e-01 1.02102639e-01 1.02076033e-01 + 1.02049447e-01 1.02022882e-01 1.01996338e-01 1.01969814e-01 1.01943311e-01 + 1.01916829e-01 1.01890367e-01 1.01863926e-01 1.01837505e-01 1.01811106e-01 + 1.01784726e-01 1.01758367e-01 1.01732029e-01 1.01705711e-01 1.01679413e-01 + 1.01653136e-01 1.01626879e-01 1.01600643e-01 1.01574426e-01 1.01548230e-01 + 1.01522055e-01 1.01495899e-01 1.01469764e-01 1.01443649e-01 1.01417554e-01 + 1.01391479e-01 1.01365425e-01 1.01339390e-01 1.01313376e-01 1.01287381e-01 + 1.01261406e-01 1.01235452e-01 1.01209517e-01 1.01183603e-01 1.01157708e-01 + 1.01131833e-01 1.01105978e-01 1.01080143e-01 1.01054327e-01 1.01028532e-01 + 1.01002756e-01 1.00976999e-01 1.00951263e-01 1.00925546e-01 1.00899849e-01 + 1.00874171e-01 1.00848513e-01 1.00822875e-01 1.00797256e-01 1.00771656e-01 + 1.00746077e-01 1.00720516e-01 1.00694975e-01 1.00669454e-01 1.00643952e-01 + 1.00618469e-01 1.00593005e-01 1.00567561e-01 1.00542136e-01 1.00516731e-01 + 1.00491345e-01 1.00465978e-01 1.00440630e-01 1.00415301e-01 1.00389992e-01 + 1.00364701e-01 1.00339430e-01 1.00314178e-01 1.00288944e-01 1.00263730e-01 + 1.00238535e-01 1.00213359e-01 1.00188202e-01 1.00163064e-01 1.00137944e-01 + 1.00112844e-01 1.00087762e-01 1.00062700e-01 1.00037656e-01 1.00012631e-01 + 9.99876242e-02 9.99626366e-02 9.99376677e-02 9.99127176e-02 9.98877861e-02 + 9.98628732e-02 9.98379790e-02 9.98131034e-02 9.97882464e-02 9.97634079e-02 + 9.97385880e-02 9.97137866e-02 9.96890037e-02 9.96642393e-02 9.96394933e-02 + 9.96147657e-02 9.95900565e-02 9.95653657e-02 9.95406933e-02 9.95160392e-02 + 9.94914034e-02 9.94667859e-02 9.94421867e-02 9.94176057e-02 9.93930429e-02 + 9.93684983e-02 9.93439719e-02 9.93194636e-02 9.92949735e-02 9.92705015e-02 + 9.92460476e-02 9.92216117e-02 9.91971939e-02 9.91727940e-02 9.91484122e-02 + 9.91240484e-02 9.90997025e-02 9.90753745e-02 9.90510645e-02 9.90267723e-02 + 9.90024980e-02 9.89782415e-02 9.89540029e-02 9.89297821e-02 9.89055790e-02 + 9.88813937e-02 9.88572261e-02 9.88330763e-02 9.88089441e-02 9.87848296e-02 + 9.87607327e-02 9.87366535e-02 9.87125919e-02 9.86885478e-02 9.86645213e-02 + 9.86405124e-02 9.86165209e-02 9.85925470e-02 9.85685906e-02 9.85446516e-02 + 9.85207300e-02 9.84968258e-02 9.84729391e-02 9.84490697e-02 9.84252176e-02 + 9.84013829e-02 9.83775655e-02 9.83537654e-02 9.83299825e-02 9.83062169e-02 + 9.82824685e-02 9.82587374e-02 9.82350233e-02 9.82113265e-02 9.81876468e-02 + 9.81639842e-02 9.81403387e-02 9.81167103e-02 9.80930990e-02 9.80695047e-02 + 9.80459274e-02 9.80223671e-02 9.79988238e-02 9.79752974e-02 9.79517880e-02 + 9.79282955e-02 9.79048199e-02 9.78813611e-02 9.78579192e-02 9.78344942e-02 + 9.78110859e-02 9.77876945e-02 9.77643198e-02 9.77409619e-02 9.77176207e-02 + 9.76942963e-02 9.76709885e-02 9.76476974e-02 9.76244230e-02 9.76011651e-02 + 9.75779239e-02 9.75546993e-02 9.75314913e-02 9.75082999e-02 9.74851249e-02 + 9.74619665e-02 9.74388246e-02 9.74156991e-02 9.73925901e-02 9.73694976e-02 + 9.73464215e-02 9.73233617e-02 9.73003184e-02 9.72772914e-02 9.72542807e-02 + 9.72312864e-02 9.72083084e-02 9.71853467e-02 9.71624012e-02 9.71394719e-02 + 9.71165589e-02 9.70936621e-02 9.70707815e-02 9.70479171e-02 9.70250688e-02 + 9.70022366e-02 9.69794205e-02 9.69566206e-02 9.69338367e-02 9.69110688e-02 + 9.68883170e-02 9.68655813e-02 9.68428615e-02 9.68201577e-02 9.67974698e-02 + 9.67747979e-02 9.67521419e-02 9.67295019e-02 9.67068777e-02 9.66842693e-02 + 9.66616769e-02 9.66391002e-02 9.66165394e-02 9.65939943e-02 9.65714651e-02 + 9.65489516e-02 9.65264538e-02 9.65039718e-02 9.64815054e-02 9.64590547e-02 + 9.64366197e-02 9.64142004e-02 9.63917967e-02 9.63694086e-02 9.63470360e-02 + 9.63246791e-02 9.63023377e-02 9.62800118e-02 9.62577015e-02 9.62354067e-02 + 9.62131273e-02 9.61908635e-02 9.61686150e-02 9.61463820e-02 9.61241644e-02 + 9.61019623e-02 9.60797754e-02 9.60576040e-02 9.60354479e-02 9.60133071e-02 + 9.59911816e-02 9.59690714e-02 9.59469765e-02 9.59248968e-02 9.59028324e-02 + 9.58807832e-02 9.58587492e-02 9.58367303e-02 9.58147267e-02 9.57927382e-02 + 9.57707648e-02 9.57488065e-02 9.57268633e-02 9.57049352e-02 9.56830222e-02 + 9.56611242e-02 9.56392413e-02 9.56173733e-02 9.55955204e-02 9.55736824e-02 + 9.55518594e-02 9.55300513e-02 9.55082582e-02 9.54864799e-02 9.54647166e-02 + 9.54429681e-02 9.54212345e-02 9.53995157e-02 9.53778117e-02 9.53561226e-02 + 9.53344482e-02 9.53127886e-02 9.52911438e-02 9.52695137e-02 9.52478984e-02 + 9.52262977e-02 9.52047117e-02 9.51831404e-02 9.51615838e-02 9.51400418e-02 + 9.51185144e-02 9.50970016e-02 9.50755034e-02 9.50540198e-02 9.50325508e-02 + 9.50110963e-02 9.49896563e-02 9.49682308e-02 9.49468198e-02 9.49254233e-02 + 9.49040412e-02 9.48826736e-02 9.48613204e-02 9.48399817e-02 9.48186573e-02 + 9.47973473e-02 9.47760516e-02 9.47547703e-02 9.47335034e-02 9.47122507e-02 + 9.46910123e-02 9.46697883e-02 9.46485784e-02 9.46273829e-02 9.46062015e-02 + 9.45850344e-02 9.45638815e-02 9.45427428e-02 9.45216182e-02 9.45005078e-02 + 9.44794116e-02 9.44583294e-02 9.44372614e-02 9.44162074e-02 9.43951676e-02 + 9.43741418e-02 9.43531300e-02 9.43321323e-02 9.43111485e-02 9.42901788e-02 + 9.42692231e-02 9.42482813e-02 9.42273534e-02 9.42064395e-02 9.41855396e-02 + 9.41646535e-02 9.41437813e-02 9.41229230e-02 9.41020785e-02 9.40812479e-02 + 9.40604311e-02 9.40396282e-02 9.40188390e-02 9.39980636e-02 9.39773020e-02 + 9.39565541e-02 9.39358200e-02 9.39150995e-02 9.38943928e-02 9.38736998e-02 + 9.38530204e-02 9.38323548e-02 9.38117027e-02 9.37910643e-02 9.37704395e-02 + 9.37498283e-02 9.37292307e-02 9.37086466e-02 9.36880762e-02 9.36675192e-02 + 9.36469758e-02 9.36264459e-02 9.36059295e-02 9.35854265e-02 9.35649371e-02 + 9.35444611e-02 9.35239985e-02 9.35035493e-02 9.34831136e-02 9.34626912e-02 + 9.34422823e-02 9.34218866e-02 9.34015044e-02 9.33811355e-02 9.33607798e-02 + 9.33404375e-02 9.33201085e-02 9.32997928e-02 9.32794903e-02 9.32592011e-02 + 9.32389251e-02 9.32186624e-02 9.31984128e-02 9.31781764e-02 9.31579532e-02 + 9.31377432e-02 9.31175463e-02 9.30973626e-02 9.30771919e-02 9.30570344e-02 + 9.30368899e-02 9.30167586e-02 9.29966403e-02 9.29765350e-02 9.29564428e-02 + 9.29363636e-02 9.29162974e-02 9.28962442e-02 9.28762040e-02 9.28561768e-02 + 9.28361624e-02 9.28161611e-02 9.27961726e-02 9.27761971e-02 9.27562344e-02 + 9.27362847e-02 9.27163478e-02 9.26964237e-02 9.26765125e-02 9.26566141e-02 + 9.26367286e-02 9.26168558e-02 9.25969958e-02 9.25771486e-02 9.25573141e-02 + 9.25374924e-02 9.25176834e-02 9.24978871e-02 9.24781036e-02 9.24583327e-02 + 9.24385745e-02 9.24188289e-02 9.23990960e-02 9.23793758e-02 9.23596681e-02 + 9.23399731e-02 9.23202907e-02 9.23006208e-02 9.22809635e-02 9.22613188e-02 + 9.22416866e-02 9.22220669e-02 9.22024597e-02 9.21828651e-02 9.21632829e-02 + 9.21437132e-02 9.21241560e-02 9.21046112e-02 9.20850788e-02 9.20655589e-02 + 9.20460514e-02 9.20265563e-02 9.20070735e-02 9.19876031e-02 9.19681451e-02 + 9.19486994e-02 9.19292661e-02 9.19098451e-02 9.18904363e-02 9.18710399e-02 + 9.18516557e-02 9.18322838e-02 9.18129242e-02 9.17935768e-02 9.17742416e-02 + 9.17549186e-02 9.17356079e-02 9.17163093e-02 9.16970229e-02 9.16777486e-02 + 9.16584865e-02 9.16392366e-02 9.16199987e-02 9.16007730e-02 9.15815594e-02 + 9.15623578e-02 9.15431684e-02 9.15239910e-02 9.15048256e-02 9.14856723e-02 + 9.14665310e-02 9.14474017e-02 9.14282844e-02 9.14091791e-02 9.13900857e-02 + 9.13710043e-02 9.13519349e-02 9.13328774e-02 9.13138318e-02 9.12947982e-02 + 9.12757764e-02 9.12567665e-02 9.12377685e-02 9.12187823e-02 9.11998080e-02 + 9.11808456e-02 9.11618949e-02 9.11429561e-02 9.11240290e-02 9.11051138e-02 + 9.10862103e-02 9.10673186e-02 9.10484386e-02 9.10295704e-02 9.10107139e-02 + 9.09918691e-02 9.09730360e-02 9.09542146e-02 9.09354049e-02 9.09166069e-02 + 9.08978205e-02 9.08790457e-02 9.08602826e-02 9.08415311e-02 9.08227911e-02 + 9.08040628e-02 9.07853461e-02 9.07666409e-02 9.07479473e-02 9.07292652e-02 + 9.07105947e-02 9.06919357e-02 9.06732882e-02 9.06546522e-02 9.06360277e-02 + 9.06174146e-02 9.05988131e-02 9.05802229e-02 9.05616442e-02 9.05430770e-02 + 9.05245211e-02 9.05059767e-02 9.04874436e-02 9.04689219e-02 9.04504116e-02 + 9.04319127e-02 9.04134251e-02 9.03949488e-02 9.03764839e-02 9.03580303e-02 + 9.03395879e-02 9.03211569e-02 9.03027371e-02 9.02843286e-02 9.02659313e-02 + 9.02475453e-02 9.02291706e-02 9.02108070e-02 9.01924546e-02 9.01741135e-02 + 9.01557835e-02 9.01374647e-02 9.01191571e-02 9.01008606e-02 9.00825752e-02 + 9.00643010e-02 9.00460379e-02 9.00277859e-02 9.00095450e-02 8.99913152e-02 + 8.99730965e-02 8.99548888e-02 8.99366921e-02 8.99185065e-02 8.99003320e-02 + 8.98821684e-02 8.98640159e-02 8.98458743e-02 8.98277437e-02 8.98096241e-02 + 8.97915155e-02 8.97734178e-02 8.97553311e-02 8.97372552e-02 8.97191903e-02 + 8.97011363e-02 8.96830932e-02 8.96650610e-02 8.96470396e-02 8.96290291e-02 + 8.96110295e-02 8.95930407e-02 8.95750627e-02 8.95570956e-02 8.95391392e-02 + 8.95211937e-02 8.95032589e-02 8.94853349e-02 8.94674217e-02 8.94495192e-02 + 8.94316275e-02 8.94137465e-02 8.93958762e-02 8.93780167e-02 8.93601678e-02 + 8.93423296e-02 8.93245021e-02 8.93066853e-02 8.92888791e-02 8.92710836e-02 + 8.92532987e-02 8.92355244e-02 8.92177608e-02 8.92000077e-02 8.91822653e-02 + 8.91645334e-02 8.91468121e-02 8.91291014e-02 8.91114012e-02 8.90937115e-02 + 8.90760324e-02 8.90583638e-02 8.90407057e-02 8.90230582e-02 8.90054211e-02 + 8.89877945e-02 8.89701783e-02 8.89525726e-02 8.89349774e-02 8.89173926e-02 + 8.88998182e-02 8.88822542e-02 8.88647007e-02 8.88471575e-02 8.88296247e-02 + 8.88121023e-02 8.87945903e-02 8.87770886e-02 8.87595973e-02 8.87421163e-02 + 8.87246456e-02 8.87071853e-02 8.86897352e-02 8.86722954e-02 8.86548660e-02 + 8.86374468e-02 8.86200378e-02 8.86026391e-02 8.85852507e-02 8.85678725e-02 + 8.85505045e-02 8.85331467e-02 8.85157991e-02 8.84984618e-02 8.84811346e-02 + 8.84638176e-02 8.84465107e-02 8.84292140e-02 8.84119274e-02 8.83946510e-02 + 8.83773847e-02 8.83601285e-02 8.83428825e-02 8.83256465e-02 8.83084206e-02 + 8.82912047e-02 8.82739990e-02 8.82568033e-02 8.82396176e-02 8.82224420e-02 + 8.82052764e-02 8.81881208e-02 8.81709752e-02 8.81538396e-02 8.81367140e-02 + 8.81195984e-02 8.81024927e-02 8.80853970e-02 8.80683113e-02 8.80512355e-02 + 8.80341696e-02 8.80171137e-02 8.80000676e-02 8.79830314e-02 8.79660052e-02 + 8.79489888e-02 8.79319823e-02 8.79149857e-02 8.78979989e-02 8.78810219e-02 + 8.78640548e-02 8.78470975e-02 8.78301500e-02 8.78132123e-02 8.77962845e-02 + 8.77793664e-02 8.77624580e-02 8.77455595e-02 8.77286707e-02 8.77117916e-02 + 8.76949223e-02 8.76780628e-02 8.76612129e-02 8.76443728e-02 8.76275423e-02 + 8.76107216e-02 8.75939105e-02 8.75771091e-02 8.75603174e-02 8.75435353e-02 + 8.75267629e-02 8.75100001e-02 8.74932469e-02 8.74765033e-02 8.74597694e-02 + 8.74430451e-02 8.74263303e-02 8.74096251e-02 8.73929296e-02 8.73762435e-02 + 8.73595670e-02 8.73429001e-02 8.73262427e-02 8.73095948e-02 8.72929565e-02 + 8.72763276e-02 8.72597083e-02 8.72430984e-02 8.72264981e-02 8.72099072e-02 + 8.71933257e-02 8.71767537e-02 8.71601912e-02 8.71436381e-02 8.71270944e-02 + 8.71105602e-02 8.70940353e-02 8.70775199e-02 8.70610138e-02 8.70445172e-02 + 8.70280299e-02 8.70115519e-02 8.69950834e-02 8.69786241e-02 8.69621742e-02 + 8.69457337e-02 8.69293024e-02 8.69128805e-02 8.68964679e-02 8.68800646e-02 + 8.68636705e-02 8.68472857e-02 8.68309103e-02 8.68145440e-02 8.67981870e-02 + 8.67818393e-02 8.67655008e-02 8.67491715e-02 8.67328514e-02 8.67165406e-02 + 8.67002389e-02 8.66839464e-02 8.66676631e-02 8.66513890e-02 8.66351240e-02 + 8.66188682e-02 8.66026216e-02 8.65863841e-02 8.65701557e-02 8.65539364e-02 + 8.65377263e-02 8.65215252e-02 8.65053333e-02 8.64891504e-02 8.64729766e-02 + 8.64568119e-02 8.64406563e-02 8.64245097e-02 8.64083721e-02 8.63922436e-02 + 8.63761241e-02 8.63600136e-02 8.63439122e-02 8.63278197e-02 8.63117363e-02 + 8.62956618e-02 8.62795963e-02 8.62635398e-02 8.62474922e-02 8.62314536e-02 + 8.62154239e-02 8.61994032e-02 8.61833914e-02 8.61673885e-02 8.61513945e-02 + 8.61354094e-02 8.61194332e-02 8.61034659e-02 8.60875075e-02 8.60715580e-02 + 8.60556173e-02 8.60396855e-02 8.60237625e-02 8.60078483e-02 8.59919430e-02 + 8.59760465e-02 8.59601588e-02 8.59442800e-02 8.59284099e-02 8.59125486e-02 + 8.58966961e-02 8.58808523e-02 8.58650173e-02 8.58491911e-02 8.58333736e-02 + 8.58175649e-02 8.58017649e-02 8.57859736e-02 8.57701911e-02 8.57544172e-02 + 8.57386520e-02 8.57228956e-02 8.57071478e-02 8.56914087e-02 8.56756782e-02 + 8.56599565e-02 8.56442433e-02 8.56285389e-02 8.56128430e-02 8.55971558e-02 + 8.55814772e-02 8.55658072e-02 8.55501458e-02 8.55344930e-02 8.55188488e-02 + 8.55032132e-02 8.54875862e-02 8.54719677e-02 8.54563578e-02 8.54407564e-02 + 8.54251636e-02 8.54095793e-02 8.53940035e-02 8.53784363e-02 8.53628775e-02 + 8.53473273e-02 8.53317855e-02 8.53162523e-02 8.53007275e-02 8.52852112e-02 + 8.52697034e-02 8.52542040e-02 8.52387130e-02 8.52232305e-02 8.52077565e-02 + 8.51922909e-02 8.51768336e-02 8.51613848e-02 8.51459444e-02 8.51305124e-02 + 8.51150888e-02 8.50996736e-02 8.50842667e-02 8.50688682e-02 8.50534780e-02 + 8.50380963e-02 8.50227228e-02 8.50073577e-02 8.49920009e-02 8.49766524e-02 + 8.49613123e-02 8.49459804e-02 8.49306569e-02 8.49153416e-02 8.49000346e-02 + 8.48847359e-02 8.48694455e-02 8.48541633e-02 8.48388893e-02 8.48236237e-02 + 8.48083662e-02 8.47931170e-02 8.47778760e-02 8.47626432e-02 8.47474187e-02 + 8.47322023e-02 8.47169941e-02 8.47017941e-02 8.46866023e-02 8.46714187e-02 + 8.46562432e-02 8.46410759e-02 8.46259167e-02 8.46107657e-02 8.45956228e-02 + 8.45804880e-02 8.45653614e-02 8.45502428e-02 8.45351324e-02 8.45200301e-02 + 8.45049358e-02 8.44898497e-02 8.44747716e-02 8.44597016e-02 8.44446397e-02 + 8.44295858e-02 8.44145399e-02 8.43995021e-02 8.43844724e-02 8.43694506e-02 + 8.43544369e-02 8.43394312e-02 8.43244335e-02 8.43094438e-02 8.42944621e-02 + 8.42794883e-02 8.42645226e-02 8.42495648e-02 8.42346150e-02 8.42196731e-02 + 8.42047392e-02 8.41898132e-02 8.41748952e-02 8.41599851e-02 8.41450829e-02 + 8.41301886e-02 8.41153022e-02 8.41004238e-02 8.40855532e-02 8.40706905e-02 + 8.40558357e-02 8.40409887e-02 8.40261496e-02 8.40113184e-02 8.39964950e-02 + 8.39816795e-02 8.39668718e-02 8.39520719e-02 8.39372799e-02 8.39224957e-02 + 8.39077193e-02 8.38929507e-02 8.38781898e-02 8.38634368e-02 8.38486916e-02 + 8.38339541e-02 8.38192244e-02 8.38045025e-02 8.37897883e-02 8.37750818e-02 + 8.37603831e-02 8.37456922e-02 8.37310089e-02 8.37163334e-02 8.37016656e-02 + 8.36870055e-02 8.36723531e-02 8.36577084e-02 8.36430714e-02 8.36284421e-02 + 8.36138204e-02 8.35992064e-02 8.35846001e-02 8.35700014e-02 8.35554104e-02 + 8.35408270e-02 8.35262512e-02 8.35116831e-02 8.34971226e-02 8.34825697e-02 + 8.34680244e-02 8.34534867e-02 8.34389566e-02 8.34244341e-02 8.34099191e-02 + 8.33954118e-02 8.33809120e-02 8.33664197e-02 8.33519351e-02 8.33374579e-02 + 8.33229883e-02 8.33085263e-02 8.32940718e-02 8.32796248e-02 8.32651853e-02 + 8.32507533e-02 8.32363288e-02 8.32219118e-02 8.32075023e-02 8.31931003e-02 + 8.31787058e-02 8.31643187e-02 8.31499391e-02 8.31355669e-02 8.31212022e-02 + 8.31068450e-02 8.30924951e-02 8.30781528e-02 8.30638178e-02 8.30494902e-02 + 8.30351701e-02 8.30208574e-02 8.30065520e-02 8.29922541e-02 8.29779635e-02 + 8.29636804e-02 8.29494046e-02 8.29351361e-02 8.29208751e-02 8.29066213e-02 + 8.28923750e-02 8.28781359e-02 8.28639042e-02 8.28496799e-02 8.28354628e-02 + 8.28212531e-02 8.28070507e-02 8.27928556e-02 8.27786678e-02 8.27644872e-02 + 8.27503140e-02 8.27361480e-02 8.27219893e-02 8.27078379e-02 8.26936938e-02 + 8.26795569e-02 8.26654272e-02 8.26513048e-02 8.26371896e-02 8.26230816e-02 + 8.26089809e-02 8.25948874e-02 8.25808011e-02 8.25667220e-02 8.25526501e-02 + 8.25385854e-02 8.25245279e-02 8.25104775e-02 8.24964344e-02 8.24823984e-02 + 8.24683695e-02 8.24543479e-02 8.24403333e-02 8.24263259e-02 8.24123257e-02 + 8.23983326e-02 8.23843466e-02 8.23703677e-02 8.23563960e-02 8.23424313e-02 + 8.23284737e-02 8.23145233e-02 8.23005799e-02 8.22866436e-02 8.22727144e-02 + 8.22587923e-02 8.22448772e-02 8.22309692e-02 8.22170683e-02 8.22031744e-02 + 8.21892875e-02 8.21754077e-02 8.21615349e-02 8.21476691e-02 8.21338103e-02 + 8.21199586e-02 8.21061138e-02 8.20922761e-02 8.20784453e-02 8.20646216e-02 + 8.20508048e-02 8.20369950e-02 8.20231922e-02 8.20093963e-02 8.19956074e-02 + 8.19818254e-02 8.19680504e-02 8.19542823e-02 8.19405212e-02 8.19267670e-02 + 8.19130197e-02 8.18992794e-02 8.18855459e-02 8.18718194e-02 8.18580997e-02 + 8.18443870e-02 8.18306811e-02 8.18169822e-02 8.18032901e-02 8.17896048e-02 + 8.17759265e-02 8.17622550e-02 8.17485903e-02 8.17349326e-02 8.17212816e-02 + 8.17076375e-02 8.16940002e-02 8.16803697e-02 8.16667461e-02 8.16531293e-02 + 8.16395193e-02 8.16259161e-02 8.16123197e-02 8.15987300e-02 8.15851472e-02 + 8.15715712e-02 8.15580019e-02 8.15444394e-02 8.15308836e-02 8.15173346e-02 + 8.15037924e-02 8.14902569e-02 8.14767282e-02 8.14632062e-02 8.14496909e-02 + 8.14361823e-02 8.14226805e-02 8.14091854e-02 8.13956970e-02 8.13822153e-02 + 8.13687402e-02 8.13552719e-02 8.13418103e-02 8.13283553e-02 8.13149070e-02 + 8.13014654e-02 8.12880305e-02 8.12746022e-02 8.12611805e-02 8.12477656e-02 + 8.12343572e-02 8.12209555e-02 8.12075604e-02 8.11941719e-02 8.11807901e-02 + 8.11674149e-02 8.11540463e-02 8.11406843e-02 8.11273288e-02 8.11139800e-02 + 8.11006378e-02 8.10873021e-02 8.10739731e-02 8.10606506e-02 8.10473346e-02 + 8.10340252e-02 8.10207224e-02 8.10074261e-02 8.09941364e-02 8.09808532e-02 + 8.09675765e-02 8.09543064e-02 8.09410428e-02 8.09277857e-02 8.09145351e-02 + 8.09012911e-02 8.08880535e-02 8.08748224e-02 8.08615978e-02 8.08483797e-02 + 8.08351681e-02 8.08219630e-02 8.08087643e-02 8.07955721e-02 8.07823863e-02 + 8.07692070e-02 8.07560342e-02 8.07428678e-02 8.07297078e-02 8.07165542e-02 + 8.07034071e-02 8.06902664e-02 8.06771322e-02 8.06640043e-02 8.06508829e-02 + 8.06377678e-02 8.06246592e-02 8.06115569e-02 8.05984610e-02 8.05853715e-02 + 8.05722884e-02 8.05592116e-02 8.05461412e-02 8.05330772e-02 8.05200195e-02 + 8.05069682e-02 8.04939232e-02 8.04808846e-02 8.04678523e-02 8.04548263e-02 + 8.04418066e-02 8.04287933e-02 8.04157863e-02 8.04027856e-02 8.03897912e-02 + 8.03768031e-02 8.03638212e-02 8.03508457e-02 8.03378765e-02 8.03249135e-02 + 8.03119568e-02 8.02990064e-02 8.02860622e-02 8.02731243e-02 8.02601926e-02 + 8.02472672e-02 8.02343481e-02 8.02214351e-02 8.02085284e-02 8.01956280e-02 + 8.01827337e-02 8.01698457e-02 8.01569639e-02 8.01440883e-02 8.01312189e-02 + 8.01183557e-02 8.01054986e-02 8.00926478e-02 8.00798032e-02 8.00669647e-02 + 8.00541324e-02 8.00413063e-02 8.00284863e-02 8.00156725e-02 8.00028649e-02 + 7.99900634e-02 7.99772680e-02 7.99644788e-02 7.99516957e-02 7.99389187e-02 + 7.99261479e-02 7.99133832e-02 7.99006246e-02 7.98878721e-02 7.98751257e-02 + 7.98623854e-02 7.98496512e-02 7.98369231e-02 7.98242011e-02 7.98114851e-02 + 7.97987753e-02 7.97860715e-02 7.97733737e-02 7.97606821e-02 7.97479965e-02 + 7.97353169e-02 7.97226434e-02 7.97099759e-02 7.96973145e-02 7.96846590e-02 + 7.96720097e-02 7.96593663e-02 7.96467290e-02 7.96340976e-02 7.96214723e-02 + 7.96088530e-02 7.95962397e-02 7.95836323e-02 7.95710310e-02 7.95584356e-02 + 7.95458463e-02 7.95332629e-02 7.95206854e-02 7.95081140e-02 7.94955485e-02 + 7.94829889e-02 7.94704353e-02 7.94578877e-02 7.94453459e-02 7.94328102e-02 + 7.94202803e-02 7.94077564e-02 7.93952384e-02 7.93827263e-02 7.93702202e-02 + 7.93577199e-02 7.93452256e-02 7.93327371e-02 7.93202546e-02 7.93077779e-02 + 7.92953071e-02 7.92828423e-02 7.92703832e-02 7.92579301e-02 7.92454828e-02 + 7.92330414e-02 7.92206058e-02 7.92081761e-02 7.91957523e-02 7.91833343e-02 + 7.91709221e-02 7.91585157e-02 7.91461152e-02 7.91337206e-02 7.91213317e-02 + 7.91089486e-02 7.90965714e-02 7.90842000e-02 7.90718344e-02 7.90594746e-02 + 7.90471205e-02 7.90347723e-02 7.90224298e-02 7.90100932e-02 7.89977623e-02 + 7.89854371e-02 7.89731178e-02 7.89608042e-02 7.89484964e-02 7.89361943e-02 + 7.89238979e-02 7.89116073e-02 7.88993225e-02 7.88870434e-02 7.88747700e-02 + 7.88625023e-02 7.88502404e-02 7.88379842e-02 7.88257337e-02 7.88134889e-02 + 7.88012498e-02 7.87890164e-02 7.87767887e-02 7.87645667e-02 7.87523504e-02 + 7.87401398e-02 7.87279348e-02 7.87157355e-02 7.87035419e-02 7.86913540e-02 + 7.86791717e-02 7.86669951e-02 7.86548241e-02 7.86426588e-02 7.86304991e-02 + 7.86183450e-02 7.86061966e-02 7.85940538e-02 7.85819167e-02 7.85697851e-02 + 7.85576592e-02 7.85455389e-02 7.85334242e-02 7.85213151e-02 7.85092116e-02 + 7.84971137e-02 7.84850214e-02 7.84729347e-02 7.84608535e-02 7.84487780e-02 + 7.84367080e-02 7.84246436e-02 7.84125847e-02 7.84005314e-02 7.83884837e-02 + 7.83764415e-02 7.83644048e-02 7.83523737e-02 7.83403482e-02 7.83283282e-02 + 7.83163137e-02 7.83043047e-02 7.82923013e-02 7.82803034e-02 7.82683110e-02 + 7.82563241e-02 7.82443427e-02 7.82323668e-02 7.82203964e-02 7.82084315e-02 + 7.81964721e-02 7.81845182e-02 7.81725697e-02 7.81606268e-02 7.81486893e-02 + 7.81367572e-02 7.81248307e-02 7.81129096e-02 7.81009939e-02 7.80890837e-02 + 7.80771790e-02 7.80652797e-02 7.80533858e-02 7.80414974e-02 7.80296144e-02 + 7.80177368e-02 7.80058646e-02 7.79939979e-02 7.79821366e-02 7.79702807e-02 + 7.79584302e-02 7.79465851e-02 7.79347454e-02 7.79229111e-02 7.79110821e-02 + 7.78992586e-02 7.78874404e-02 7.78756277e-02 7.78638202e-02 7.78520182e-02 + 7.78402215e-02 7.78284302e-02 7.78166443e-02 7.78048637e-02 7.77930884e-02 + 7.77813185e-02 7.77695539e-02 7.77577947e-02 7.77460408e-02 7.77342922e-02 + 7.77225490e-02 7.77108111e-02 7.76990785e-02 7.76873512e-02 7.76756292e-02 + 7.76639125e-02 7.76522011e-02 7.76404950e-02 7.76287942e-02 7.76170987e-02 + 7.76054085e-02 7.75937236e-02 7.75820439e-02 7.75703695e-02 7.75587004e-02 + 7.75470365e-02 7.75353780e-02 7.75237246e-02 7.75120765e-02 7.75004337e-02 + 7.74887961e-02 7.74771637e-02 7.74655366e-02 7.74539147e-02 7.74422981e-02 + 7.74306867e-02 7.74190805e-02 7.74074795e-02 7.73958837e-02 7.73842931e-02 + 7.73727078e-02 7.73611276e-02 7.73495527e-02 7.73379829e-02 7.73264183e-02 + 7.73148589e-02 7.73033047e-02 7.72917557e-02 7.72802118e-02 7.72686732e-02 + 7.72571396e-02 7.72456113e-02 7.72340881e-02 7.72225701e-02 7.72110572e-02 + 7.71995494e-02 7.71880468e-02 7.71765494e-02 7.71650571e-02 7.71535699e-02 + 7.71420878e-02 7.71306109e-02 7.71191391e-02 7.71076724e-02 7.70962108e-02 + 7.70847543e-02 7.70733030e-02 7.70618567e-02 7.70504155e-02 7.70389795e-02 + 7.70275485e-02 7.70161226e-02 7.70047018e-02 7.69932860e-02 7.69818754e-02 + 7.69704698e-02 7.69590693e-02 7.69476738e-02 7.69362834e-02 7.69248981e-02 + 7.69135178e-02 7.69021426e-02 7.68907724e-02 7.68794073e-02 7.68680472e-02 + 7.68566921e-02 7.68453420e-02 7.68339970e-02 7.68226570e-02 7.68113221e-02 + 7.67999921e-02 7.67886672e-02 7.67773472e-02 7.67660323e-02 7.67547224e-02 + 7.67434174e-02 7.67321175e-02 7.67208226e-02 7.67095326e-02 7.66982476e-02 + 7.66869676e-02 7.66756926e-02 7.66644225e-02 7.66531574e-02 7.66418973e-02 + 7.66306422e-02 7.66193920e-02 7.66081467e-02 7.65969064e-02 7.65856711e-02 + 7.65744407e-02 7.65632152e-02 7.65519946e-02 7.65407790e-02 7.65295684e-02 + 7.65183626e-02 7.65071618e-02 7.64959659e-02 7.64847749e-02 7.64735888e-02 + 7.64624076e-02 7.64512313e-02 7.64400599e-02 7.64288935e-02 7.64177319e-02 + 7.64065752e-02 7.63954233e-02 7.63842764e-02 7.63731343e-02 7.63619972e-02 + 7.63508648e-02 7.63397374e-02 7.63286148e-02 7.63174971e-02 7.63063842e-02 + 7.62952762e-02 7.62841730e-02 7.62730747e-02 7.62619813e-02 7.62508926e-02 + 7.62398088e-02 7.62287298e-02 7.62176557e-02 7.62065864e-02 7.61955219e-02 + 7.61844622e-02 7.61734074e-02 7.61623573e-02 7.61513121e-02 7.61402716e-02 + 7.61292360e-02 7.61182052e-02 7.61071791e-02 7.60961579e-02 7.60851414e-02 + 7.60741297e-02 7.60631228e-02 7.60521207e-02 7.60411233e-02 7.60301307e-02 + 7.60191429e-02 7.60081598e-02 7.59971815e-02 7.59862080e-02 7.59752392e-02 + 7.59642751e-02 7.59533158e-02 7.59423613e-02 7.59314115e-02 7.59204664e-02 + 7.59095260e-02 7.58985904e-02 7.58876595e-02 7.58767333e-02 7.58658119e-02 + 7.58548951e-02 7.58439831e-02 7.58330758e-02 7.58221731e-02 7.58112752e-02 + 7.58003820e-02 7.57894935e-02 7.57786096e-02 7.57677305e-02 7.57568560e-02 + 7.57459862e-02 7.57351211e-02 7.57242607e-02 7.57134049e-02 7.57025538e-02 + 7.56917074e-02 7.56808656e-02 7.56700285e-02 7.56591961e-02 7.56483683e-02 + 7.56375451e-02 7.56267266e-02 7.56159127e-02 7.56051035e-02 7.55942989e-02 + 7.55834989e-02 7.55727035e-02 7.55619128e-02 7.55511267e-02 7.55403452e-02 + 7.55295684e-02 7.55187961e-02 7.55080285e-02 7.54972654e-02 7.54865070e-02 + 7.54757531e-02 7.54650039e-02 7.54542592e-02 7.54435192e-02 7.54327837e-02 + 7.54220528e-02 7.54113264e-02 7.54006047e-02 7.53898875e-02 7.53791749e-02 + 7.53684669e-02 7.53577634e-02 7.53470644e-02 7.53363701e-02 7.53256803e-02 + 7.53149950e-02 7.53043143e-02 7.52936381e-02 7.52829665e-02 7.52722994e-02 + 7.52616368e-02 7.52509787e-02 7.52403252e-02 7.52296762e-02 7.52190318e-02 + 7.52083918e-02 7.51977564e-02 7.51871255e-02 7.51764990e-02 7.51658771e-02 + 7.51552597e-02 7.51446468e-02 7.51340384e-02 7.51234344e-02 7.51128350e-02 + 7.51022400e-02 7.50916496e-02 7.50810636e-02 7.50704821e-02 7.50599050e-02 + 7.50493324e-02 7.50387643e-02 7.50282007e-02 7.50176415e-02 7.50070868e-02 + 7.49965365e-02 7.49859907e-02 7.49754493e-02 7.49649123e-02 7.49543799e-02 + 7.49438518e-02 7.49333282e-02 7.49228090e-02 7.49122942e-02 7.49017839e-02 + 7.48912780e-02 7.48807765e-02 7.48702794e-02 7.48597868e-02 7.48492985e-02 + 7.48388147e-02 7.48283352e-02 7.48178602e-02 7.48073895e-02 7.47969233e-02 + 7.47864614e-02 7.47760040e-02 7.47655509e-02 7.47551022e-02 7.47446579e-02 + 7.47342179e-02 7.47237824e-02 7.47133512e-02 7.47029243e-02 7.46925019e-02 + 7.46820838e-02 7.46716700e-02 7.46612606e-02 7.46508556e-02 7.46404549e-02 + 7.46300586e-02 7.46196666e-02 7.46092789e-02 7.45988956e-02 7.45885166e-02 + 7.45781419e-02 7.45677716e-02 7.45574056e-02 7.45470439e-02 7.45366865e-02 + 7.45263335e-02 7.45159847e-02 7.45056403e-02 7.44953002e-02 7.44849644e-02 + 7.44746329e-02 7.44643056e-02 7.44539827e-02 7.44436641e-02 7.44333497e-02 + 7.44230397e-02 7.44127339e-02 7.44024324e-02 7.43921352e-02 7.43818423e-02 + 7.43715536e-02 7.43612692e-02 7.43509890e-02 7.43407132e-02 7.43304416e-02 + 7.43201742e-02 7.43099111e-02 7.42996522e-02 7.42893976e-02 7.42791473e-02 + 7.42689011e-02 7.42586593e-02 7.42484216e-02 7.42381882e-02 7.42279590e-02 + 7.42177341e-02 7.42075133e-02 7.41972968e-02 7.41870845e-02 7.41768765e-02 + 7.41666726e-02 7.41564729e-02 7.41462775e-02 7.41360863e-02 7.41258992e-02 + 7.41157164e-02 7.41055377e-02 7.40953633e-02 7.40851930e-02 7.40750269e-02 + 7.40648650e-02 7.40547073e-02 7.40445538e-02 7.40344044e-02 7.40242592e-02 + 7.40141182e-02 7.40039814e-02 7.39938487e-02 7.39837202e-02 7.39735958e-02 + 7.39634756e-02 7.39533595e-02 7.39432476e-02 7.39331398e-02 7.39230362e-02 + 7.39129367e-02 7.39028414e-02 7.38927502e-02 7.38826631e-02 7.38725802e-02 + 7.38625014e-02 7.38524267e-02 7.38423561e-02 7.38322896e-02 7.38222273e-02 + 7.38121691e-02 7.38021150e-02 7.37920650e-02 7.37820191e-02 7.37719773e-02 + 7.37619396e-02 7.37519060e-02 7.37418765e-02 7.37318510e-02 7.37218297e-02 + 7.37118125e-02 7.37017993e-02 7.36917902e-02 7.36817852e-02 7.36717843e-02 + 7.36617874e-02 7.36517946e-02 7.36418059e-02 7.36318212e-02 7.36218406e-02 + 7.36118641e-02 7.36018916e-02 7.35919231e-02 7.35819587e-02 7.35719984e-02 + 7.35620421e-02 7.35520898e-02 7.35421416e-02 7.35321974e-02 7.35222572e-02 + 7.35123211e-02 7.35023890e-02 7.34924610e-02 7.34825369e-02 7.34726169e-02 + 7.34627009e-02 7.34527889e-02 7.34428809e-02 7.34329769e-02 7.34230769e-02 + 7.34131809e-02 7.34032890e-02 7.33934010e-02 7.33835170e-02 7.33736370e-02 + 7.33637610e-02 7.33538890e-02 7.33440210e-02 7.33341569e-02 7.33242969e-02 + 7.33144408e-02 7.33045886e-02 7.32947405e-02 7.32848963e-02 7.32750561e-02 + 7.32652199e-02 7.32553876e-02 7.32455592e-02 7.32357348e-02 7.32259144e-02 + 7.32160979e-02 7.32062854e-02 7.31964768e-02 7.31866722e-02 7.31768715e-02 + 7.31670747e-02 7.31572819e-02 7.31474930e-02 7.31377080e-02 7.31279269e-02 + 7.31181498e-02 7.31083766e-02 7.30986073e-02 7.30888419e-02 7.30790805e-02 + 7.30693229e-02 7.30595693e-02 7.30498195e-02 7.30400737e-02 7.30303318e-02 + 7.30205937e-02 7.30108596e-02 7.30011293e-02 7.29914030e-02 7.29816805e-02 + 7.29719619e-02 7.29622472e-02 7.29525364e-02 7.29428294e-02 7.29331263e-02 + 7.29234271e-02 7.29137318e-02 7.29040403e-02 7.28943527e-02 7.28846689e-02 + 7.28749890e-02 7.28653130e-02 7.28556408e-02 7.28459725e-02 7.28363080e-02 + 7.28266473e-02 7.28169905e-02 7.28073376e-02 7.27976885e-02 7.27880432e-02 + 7.27784017e-02 7.27687641e-02 7.27591303e-02 7.27495003e-02 7.27398742e-02 + 7.27302519e-02 7.27206334e-02 7.27110187e-02 7.27014078e-02 7.26918007e-02 + 7.26821975e-02 7.26725980e-02 7.26630023e-02 7.26534105e-02 7.26438224e-02 + 7.26342382e-02 7.26246577e-02 7.26150810e-02 7.26055081e-02 7.25959390e-02 + 7.25863737e-02 7.25768121e-02 7.25672544e-02 7.25577004e-02 7.25481502e-02 + 7.25386037e-02 7.25290610e-02 7.25195221e-02 7.25099870e-02 7.25004556e-02 + 7.24909279e-02 7.24814040e-02 7.24718839e-02 7.24623675e-02 7.24528549e-02 + 7.24433460e-02 7.24338409e-02 7.24243395e-02 7.24148418e-02 7.24053479e-02 + 7.23958577e-02 7.23863712e-02 7.23768885e-02 7.23674095e-02 7.23579342e-02 + 7.23484626e-02 7.23389948e-02 7.23295307e-02 7.23200702e-02 7.23106135e-02 + 7.23011605e-02 7.22917112e-02 7.22822656e-02 7.22728238e-02 7.22633856e-02 + 7.22539511e-02 7.22445203e-02 7.22350932e-02 7.22256698e-02 7.22162500e-02 + 7.22068340e-02 7.21974216e-02 7.21880130e-02 7.21786080e-02 7.21692066e-02 + 7.21598090e-02 7.21504150e-02 7.21410247e-02 7.21316380e-02 7.21222550e-02 + 7.21128757e-02 7.21035000e-02 7.20941280e-02 7.20847596e-02 7.20753949e-02 + 7.20660339e-02 7.20566765e-02 7.20473227e-02 7.20379726e-02 7.20286261e-02 + 7.20192832e-02 7.20099440e-02 7.20006084e-02 7.19912765e-02 7.19819481e-02 + 7.19726234e-02 7.19633024e-02 7.19539849e-02 7.19446711e-02 7.19353608e-02 + 7.19260542e-02 7.19167512e-02 7.19074518e-02 7.18981560e-02 7.18888639e-02 + 7.18795753e-02 7.18702903e-02 7.18610089e-02 7.18517311e-02 7.18424569e-02 + 7.18331863e-02 7.18239193e-02 7.18146559e-02 7.18053960e-02 7.17961398e-02 + 7.17868871e-02 7.17776380e-02 7.17683924e-02 7.17591505e-02 7.17499121e-02 + 7.17406772e-02 7.17314460e-02 7.17222183e-02 7.17129941e-02 7.17037735e-02 + 7.16945565e-02 7.16853430e-02 7.16761331e-02 7.16669267e-02 7.16577239e-02 + 7.16485246e-02 7.16393289e-02 7.16301367e-02 7.16209480e-02 7.16117629e-02 + 7.16025813e-02 7.15934032e-02 7.15842287e-02 7.15750577e-02 7.15658902e-02 + 7.15567262e-02 7.15475658e-02 7.15384089e-02 7.15292555e-02 7.15201056e-02 + 7.15109592e-02 7.15018163e-02 7.14926769e-02 7.14835410e-02 7.14744087e-02 + 7.14652798e-02 7.14561544e-02 7.14470325e-02 7.14379142e-02 7.14287993e-02 + 7.14196878e-02 7.14105799e-02 7.14014755e-02 7.13923745e-02 7.13832770e-02 + 7.13741830e-02 7.13650925e-02 7.13560055e-02 7.13469219e-02 7.13378418e-02 + 7.13287651e-02 7.13196919e-02 7.13106222e-02 7.13015559e-02 7.12924931e-02 + 7.12834338e-02 7.12743779e-02 7.12653254e-02 7.12562764e-02 7.12472309e-02 + 7.12381888e-02 7.12291501e-02 7.12201149e-02 7.12110831e-02 7.12020547e-02 + 7.11930298e-02 7.11840083e-02 7.11749902e-02 7.11659756e-02 7.11569644e-02 + 7.11479566e-02 7.11389522e-02 7.11299512e-02 7.11209537e-02 7.11119596e-02 + 7.11029689e-02 7.10939816e-02 7.10849977e-02 7.10760172e-02 7.10670401e-02 + 7.10580664e-02 7.10490961e-02 7.10401292e-02 7.10311657e-02 7.10222056e-02 + 7.10132489e-02 7.10042956e-02 7.09953456e-02 7.09863990e-02 7.09774559e-02 + 7.09685161e-02 7.09595796e-02 7.09506466e-02 7.09417169e-02 7.09327906e-02 + 7.09238677e-02 7.09149481e-02 7.09060319e-02 7.08971191e-02 7.08882096e-02 + 7.08793035e-02 7.08704007e-02 7.08615013e-02 7.08526052e-02 7.08437125e-02 + 7.08348231e-02 7.08259371e-02 7.08170544e-02 7.08081751e-02 7.07992991e-02 + 7.07904264e-02 7.07815571e-02 7.07726911e-02 7.07638285e-02 7.07549691e-02 + 7.07461131e-02 7.07372604e-02 7.07284111e-02 7.07195650e-02 7.07107223e-02 + 7.07018829e-02 7.06930468e-02 7.06842141e-02 7.06753846e-02 7.06665584e-02 + 7.06577356e-02 7.06489160e-02 7.06400998e-02 7.06312868e-02 7.06224772e-02 + 7.06136708e-02 7.06048678e-02 7.05960680e-02 7.05872715e-02 7.05784783e-02 + 7.05696884e-02 7.05609018e-02 7.05521184e-02 7.05433384e-02 7.05345616e-02 + 1.00000000e+00 9.75894263e-01 9.53451752e-01 9.32489601e-01 9.12851907e-01 + 8.94404826e-01 8.77032714e-01 8.60635068e-01 8.45124065e-01 8.30422576e-01 + 8.16462554e-01 8.03183696e-01 7.90532350e-01 7.78460602e-01 7.66925506e-01 + 7.55888443e-01 7.45314577e-01 7.35172390e-01 7.25433287e-01 7.16071258e-01 + 7.07062580e-01 6.98385572e-01 6.90020370e-01 6.81948734e-01 6.74153887e-01 + 6.66620364e-01 6.59333880e-01 6.52281224e-01 6.45450150e-01 6.38829295e-01 + 6.32408091e-01 6.26176704e-01 6.20125961e-01 6.14247300e-01 6.08532716e-01 + 6.02974715e-01 5.97566276e-01 5.92300808e-01 5.87172122e-01 5.82174396e-01 + 5.77302151e-01 5.72550221e-01 5.67913735e-01 5.63388093e-01 5.58968948e-01 + 5.54652188e-01 5.50433918e-01 5.46310451e-01 5.42278287e-01 5.38334105e-01 + 5.34474753e-01 5.30697232e-01 5.26998691e-01 5.23376415e-01 5.19827818e-01 + 5.16350438e-01 5.12941922e-01 5.09600027e-01 5.06322612e-01 5.03107629e-01 + 4.99953120e-01 4.96857213e-01 4.93818117e-01 4.90834114e-01 4.87903560e-01 + 4.85024878e-01 4.82196556e-01 4.79417141e-01 4.76685242e-01 4.73999519e-01 + 4.71358685e-01 4.68761505e-01 4.66206788e-01 4.63693390e-01 4.61220209e-01 + 4.58786184e-01 4.56390292e-01 4.54031548e-01 4.51709002e-01 4.49421737e-01 + 4.47168870e-01 4.44949545e-01 4.42762941e-01 4.40608259e-01 4.38484731e-01 + 4.36391613e-01 4.34328187e-01 4.32293756e-01 4.30287649e-01 4.28309213e-01 + 4.26357819e-01 4.24432857e-01 4.22533734e-01 4.20659877e-01 4.18810733e-01 + 4.16985761e-01 4.15184441e-01 4.13406264e-01 4.11650741e-01 4.09917394e-01 + 4.08205761e-01 4.06515390e-01 4.04845847e-01 4.03196706e-01 4.01567556e-01 + 3.99957996e-01 3.98367636e-01 3.96796098e-01 3.95243014e-01 3.93708024e-01 + 3.92190780e-01 3.90690944e-01 3.89208184e-01 3.87742180e-01 3.86292617e-01 + 3.84859191e-01 3.83441605e-01 3.82039569e-01 3.80652800e-01 3.79281024e-01 + 3.77923973e-01 3.76581385e-01 3.75253005e-01 3.73938583e-01 3.72637878e-01 + 3.71350652e-01 3.70076675e-01 3.68815719e-01 3.67567566e-01 3.66332000e-01 + 3.65108810e-01 3.63897792e-01 3.62698745e-01 3.61511473e-01 3.60335785e-01 + 3.59171493e-01 3.58018415e-01 3.56876371e-01 3.55745187e-01 3.54624691e-01 + 3.53514717e-01 3.52415101e-01 3.51325683e-01 3.50246306e-01 3.49176816e-01 + 3.48117064e-01 3.47066903e-01 3.46026189e-01 3.44994782e-01 3.43972542e-01 + 3.42959337e-01 3.41955032e-01 3.40959498e-01 3.39972609e-01 3.38994241e-01 + 3.38024270e-01 3.37062579e-01 3.36109049e-01 3.35163566e-01 3.34226018e-01 + 3.33296293e-01 3.32374284e-01 3.31459885e-01 3.30552992e-01 3.29653502e-01 + 3.28761315e-01 3.27876333e-01 3.26998460e-01 3.26127600e-01 3.25263662e-01 + 3.24406553e-01 3.23556184e-01 3.22712468e-01 3.21875318e-01 3.21044649e-01 + 3.20220378e-01 3.19402424e-01 3.18590706e-01 3.17785145e-01 3.16985665e-01 + 3.16192188e-01 3.15404639e-01 3.14622947e-01 3.13847038e-01 3.13076841e-01 + 3.12312287e-01 3.11553306e-01 3.10799833e-01 3.10051800e-01 3.09309142e-01 + 3.08571795e-01 3.07839697e-01 3.07112784e-01 3.06390997e-01 3.05674275e-01 + 3.04962560e-01 3.04255793e-01 3.03553917e-01 3.02856876e-01 3.02164615e-01 + 3.01477079e-01 3.00794216e-01 3.00115971e-01 2.99442294e-01 2.98773134e-01 + 2.98108439e-01 2.97448161e-01 2.96792252e-01 2.96140662e-01 2.95493345e-01 + 2.94850254e-01 2.94211344e-01 2.93576570e-01 2.92945886e-01 2.92319250e-01 + 2.91696618e-01 2.91077947e-01 2.90463197e-01 2.89852325e-01 2.89245291e-01 + 2.88642055e-01 2.88042577e-01 2.87446820e-01 2.86854743e-01 2.86266311e-01 + 2.85681484e-01 2.85100228e-01 2.84522505e-01 2.83948280e-01 2.83377517e-01 + 2.82810183e-01 2.82246243e-01 2.81685662e-01 2.81128409e-01 2.80574450e-01 + 2.80023753e-01 2.79476286e-01 2.78932017e-01 2.78390916e-01 2.77852951e-01 + 2.77318094e-01 2.76786313e-01 2.76257580e-01 2.75731865e-01 2.75209140e-01 + 2.74689377e-01 2.74172548e-01 2.73658625e-01 2.73147581e-01 2.72639389e-01 + 2.72134024e-01 2.71631458e-01 2.71131667e-01 2.70634624e-01 2.70140305e-01 + 2.69648684e-01 2.69159738e-01 2.68673442e-01 2.68189772e-01 2.67708706e-01 + 2.67230218e-01 2.66754287e-01 2.66280890e-01 2.65810005e-01 2.65341608e-01 + 2.64875680e-01 2.64412197e-01 2.63951138e-01 2.63492483e-01 2.63036211e-01 + 2.62582301e-01 2.62130732e-01 2.61681486e-01 2.61234541e-01 2.60789879e-01 + 2.60347479e-01 2.59907323e-01 2.59469393e-01 2.59033668e-01 2.58600131e-01 + 2.58168764e-01 2.57739549e-01 2.57312467e-01 2.56887501e-01 2.56464633e-01 + 2.56043847e-01 2.55625126e-01 2.55208452e-01 2.54793809e-01 2.54381180e-01 + 2.53970550e-01 2.53561902e-01 2.53155220e-01 2.52750489e-01 2.52347693e-01 + 2.51946816e-01 2.51547844e-01 2.51150761e-01 2.50755553e-01 2.50362204e-01 + 2.49970701e-01 2.49581029e-01 2.49193173e-01 2.48807120e-01 2.48422856e-01 + 2.48040367e-01 2.47659639e-01 2.47280658e-01 2.46903413e-01 2.46527888e-01 + 2.46154072e-01 2.45781951e-01 2.45411513e-01 2.45042745e-01 2.44675634e-01 + 2.44310168e-01 2.43946335e-01 2.43584122e-01 2.43223518e-01 2.42864511e-01 + 2.42507089e-01 2.42151241e-01 2.41796954e-01 2.41444218e-01 2.41093021e-01 + 2.40743352e-01 2.40395201e-01 2.40048555e-01 2.39703404e-01 2.39359739e-01 + 2.39017547e-01 2.38676818e-01 2.38337542e-01 2.37999710e-01 2.37663309e-01 + 2.37328332e-01 2.36994766e-01 2.36662603e-01 2.36331833e-01 2.36002446e-01 + 2.35674432e-01 2.35347783e-01 2.35022487e-01 2.34698537e-01 2.34375923e-01 + 2.34054635e-01 2.33734666e-01 2.33416004e-01 2.33098643e-01 2.32782573e-01 + 2.32467784e-01 2.32154270e-01 2.31842020e-01 2.31531028e-01 2.31221283e-01 + 2.30912778e-01 2.30605504e-01 2.30299454e-01 2.29994620e-01 2.29690992e-01 + 2.29388564e-01 2.29087328e-01 2.28787275e-01 2.28488398e-01 2.28190689e-01 + 2.27894141e-01 2.27598746e-01 2.27304497e-01 2.27011386e-01 2.26719406e-01 + 2.26428550e-01 2.26138810e-01 2.25850180e-01 2.25562652e-01 2.25276219e-01 + 2.24990875e-01 2.24706613e-01 2.24423425e-01 2.24141305e-01 2.23860246e-01 + 2.23580243e-01 2.23301287e-01 2.23023372e-01 2.22746493e-01 2.22470643e-01 + 2.22195814e-01 2.21922002e-01 2.21649200e-01 2.21377401e-01 2.21106599e-01 + 2.20836789e-01 2.20567964e-01 2.20300119e-01 2.20033247e-01 2.19767342e-01 + 2.19502400e-01 2.19238413e-01 2.18975376e-01 2.18713284e-01 2.18452130e-01 + 2.18191910e-01 2.17932618e-01 2.17674247e-01 2.17416794e-01 2.17160252e-01 + 2.16904616e-01 2.16649880e-01 2.16396040e-01 2.16143090e-01 2.15891025e-01 + 2.15639840e-01 2.15389530e-01 2.15140089e-01 2.14891513e-01 2.14643796e-01 + 2.14396935e-01 2.14150923e-01 2.13905756e-01 2.13661429e-01 2.13417937e-01 + 2.13175276e-01 2.12933441e-01 2.12692427e-01 2.12452229e-01 2.12212843e-01 + 2.11974265e-01 2.11736490e-01 2.11499513e-01 2.11263330e-01 2.11027936e-01 + 2.10793328e-01 2.10559500e-01 2.10326449e-01 2.10094169e-01 2.09862658e-01 + 2.09631910e-01 2.09401922e-01 2.09172689e-01 2.08944208e-01 2.08716473e-01 + 2.08489481e-01 2.08263229e-01 2.08037711e-01 2.07812924e-01 2.07588865e-01 + 2.07365528e-01 2.07142911e-01 2.06921010e-01 2.06699820e-01 2.06479337e-01 + 2.06259559e-01 2.06040481e-01 2.05822100e-01 2.05604412e-01 2.05387413e-01 + 2.05171099e-01 2.04955468e-01 2.04740515e-01 2.04526237e-01 2.04312630e-01 + 2.04099691e-01 2.03887417e-01 2.03675803e-01 2.03464847e-01 2.03254545e-01 + 2.03044894e-01 2.02835891e-01 2.02627531e-01 2.02419812e-01 2.02212731e-01 + 2.02006284e-01 2.01800468e-01 2.01595280e-01 2.01390716e-01 2.01186774e-01 + 2.00983451e-01 2.00780742e-01 2.00578646e-01 2.00377158e-01 2.00176277e-01 + 1.99975998e-01 1.99776320e-01 1.99577238e-01 1.99378751e-01 1.99180854e-01 + 1.98983546e-01 1.98786822e-01 1.98590681e-01 1.98395120e-01 1.98200135e-01 + 1.98005724e-01 1.97811884e-01 1.97618612e-01 1.97425905e-01 1.97233761e-01 + 1.97042177e-01 1.96851151e-01 1.96660678e-01 1.96470758e-01 1.96281387e-01 + 1.96092562e-01 1.95904281e-01 1.95716541e-01 1.95529341e-01 1.95342676e-01 + 1.95156545e-01 1.94970945e-01 1.94785873e-01 1.94601328e-01 1.94417306e-01 + 1.94233805e-01 1.94050823e-01 1.93868357e-01 1.93686404e-01 1.93504963e-01 + 1.93324031e-01 1.93143606e-01 1.92963685e-01 1.92784265e-01 1.92605345e-01 + 1.92426923e-01 1.92248995e-01 1.92071560e-01 1.91894616e-01 1.91718159e-01 + 1.91542189e-01 1.91366702e-01 1.91191696e-01 1.91017170e-01 1.90843121e-01 + 1.90669546e-01 1.90496445e-01 1.90323814e-01 1.90151652e-01 1.89979956e-01 + 1.89808724e-01 1.89637954e-01 1.89467644e-01 1.89297793e-01 1.89128397e-01 + 1.88959456e-01 1.88790966e-01 1.88622926e-01 1.88455335e-01 1.88288189e-01 + 1.88121487e-01 1.87955227e-01 1.87789407e-01 1.87624025e-01 1.87459079e-01 + 1.87294568e-01 1.87130489e-01 1.86966840e-01 1.86803620e-01 1.86640827e-01 + 1.86478458e-01 1.86316513e-01 1.86154989e-01 1.85993884e-01 1.85833197e-01 + 1.85672925e-01 1.85513068e-01 1.85353622e-01 1.85194587e-01 1.85035961e-01 + 1.84877742e-01 1.84719927e-01 1.84562517e-01 1.84405508e-01 1.84248899e-01 + 1.84092688e-01 1.83936874e-01 1.83781455e-01 1.83626429e-01 1.83471795e-01 + 1.83317551e-01 1.83163695e-01 1.83010226e-01 1.82857142e-01 1.82704442e-01 + 1.82552123e-01 1.82400185e-01 1.82248626e-01 1.82097444e-01 1.81946637e-01 + 1.81796204e-01 1.81646144e-01 1.81496455e-01 1.81347136e-01 1.81198184e-01 + 1.81049599e-01 1.80901378e-01 1.80753522e-01 1.80606027e-01 1.80458892e-01 + 1.80312117e-01 1.80165699e-01 1.80019637e-01 1.79873930e-01 1.79728576e-01 + 1.79583574e-01 1.79438922e-01 1.79294620e-01 1.79150665e-01 1.79007056e-01 + 1.78863792e-01 1.78720871e-01 1.78578292e-01 1.78436054e-01 1.78294156e-01 + 1.78152595e-01 1.78011371e-01 1.77870482e-01 1.77729928e-01 1.77589706e-01 + 1.77449815e-01 1.77310255e-01 1.77171023e-01 1.77032119e-01 1.76893540e-01 + 1.76755287e-01 1.76617358e-01 1.76479751e-01 1.76342465e-01 1.76205499e-01 + 1.76068851e-01 1.75932521e-01 1.75796507e-01 1.75660808e-01 1.75525423e-01 + 1.75390351e-01 1.75255589e-01 1.75121138e-01 1.74986996e-01 1.74853162e-01 + 1.74719634e-01 1.74586412e-01 1.74453494e-01 1.74320879e-01 1.74188566e-01 + 1.74056554e-01 1.73924842e-01 1.73793428e-01 1.73662312e-01 1.73531492e-01 + 1.73400967e-01 1.73270736e-01 1.73140798e-01 1.73011152e-01 1.72881797e-01 + 1.72752732e-01 1.72623955e-01 1.72495466e-01 1.72367263e-01 1.72239346e-01 + 1.72111713e-01 1.71984363e-01 1.71857296e-01 1.71730510e-01 1.71604004e-01 + 1.71477777e-01 1.71351828e-01 1.71226157e-01 1.71100761e-01 1.70975641e-01 + 1.70850795e-01 1.70726222e-01 1.70601921e-01 1.70477891e-01 1.70354131e-01 + 1.70230640e-01 1.70107418e-01 1.69984462e-01 1.69861773e-01 1.69739349e-01 + 1.69617190e-01 1.69495294e-01 1.69373660e-01 1.69252288e-01 1.69131176e-01 + 1.69010324e-01 1.68889731e-01 1.68769395e-01 1.68649317e-01 1.68529494e-01 + 1.68409926e-01 1.68290613e-01 1.68171552e-01 1.68052744e-01 1.67934188e-01 + 1.67815882e-01 1.67697825e-01 1.67580018e-01 1.67462458e-01 1.67345146e-01 + 1.67228079e-01 1.67111258e-01 1.66994682e-01 1.66878349e-01 1.66762259e-01 + 1.66646411e-01 1.66530804e-01 1.66415437e-01 1.66300309e-01 1.66185421e-01 + 1.66070770e-01 1.65956356e-01 1.65842178e-01 1.65728235e-01 1.65614527e-01 + 1.65501053e-01 1.65387812e-01 1.65274803e-01 1.65162025e-01 1.65049477e-01 + 1.64937160e-01 1.64825071e-01 1.64713211e-01 1.64601578e-01 1.64490172e-01 + 1.64378991e-01 1.64268036e-01 1.64157305e-01 1.64046798e-01 1.63936514e-01 + 1.63826452e-01 1.63716611e-01 1.63606991e-01 1.63497591e-01 1.63388409e-01 + 1.63279447e-01 1.63170702e-01 1.63062174e-01 1.62953862e-01 1.62845766e-01 + 1.62737885e-01 1.62630217e-01 1.62522764e-01 1.62415523e-01 1.62308493e-01 + 1.62201676e-01 1.62095069e-01 1.61988671e-01 1.61882483e-01 1.61776504e-01 + 1.61670732e-01 1.61565168e-01 1.61459810e-01 1.61354658e-01 1.61249711e-01 + 1.61144969e-01 1.61040431e-01 1.60936095e-01 1.60831963e-01 1.60728032e-01 + 1.60624302e-01 1.60520773e-01 1.60417444e-01 1.60314314e-01 1.60211383e-01 + 1.60108650e-01 1.60006114e-01 1.59903775e-01 1.59801632e-01 1.59699684e-01 + 1.59597932e-01 1.59496373e-01 1.59395009e-01 1.59293837e-01 1.59192858e-01 + 1.59092070e-01 1.58991474e-01 1.58891068e-01 1.58790852e-01 1.58690826e-01 + 1.58590988e-01 1.58491339e-01 1.58391877e-01 1.58292602e-01 1.58193514e-01 + 1.58094612e-01 1.57995894e-01 1.57897362e-01 1.57799013e-01 1.57700849e-01 + 1.57602867e-01 1.57505067e-01 1.57407450e-01 1.57310013e-01 1.57212758e-01 + 1.57115682e-01 1.57018786e-01 1.56922069e-01 1.56825531e-01 1.56729171e-01 + 1.56632988e-01 1.56536982e-01 1.56441152e-01 1.56345498e-01 1.56250019e-01 + 1.56154715e-01 1.56059585e-01 1.55964629e-01 1.55869846e-01 1.55775235e-01 + 1.55680797e-01 1.55586530e-01 1.55492434e-01 1.55398509e-01 1.55304754e-01 + 1.55211168e-01 1.55117751e-01 1.55024502e-01 1.54931422e-01 1.54838509e-01 + 1.54745763e-01 1.54653183e-01 1.54560770e-01 1.54468522e-01 1.54376439e-01 + 1.54284520e-01 1.54192765e-01 1.54101174e-01 1.54009746e-01 1.53918481e-01 + 1.53827377e-01 1.53736435e-01 1.53645654e-01 1.53555034e-01 1.53464574e-01 + 1.53374274e-01 1.53284132e-01 1.53194150e-01 1.53104326e-01 1.53014660e-01 + 1.52925151e-01 1.52835798e-01 1.52746603e-01 1.52657563e-01 1.52568679e-01 + 1.52479950e-01 1.52391376e-01 1.52302955e-01 1.52214689e-01 1.52126576e-01 + 1.52038615e-01 1.51950807e-01 1.51863151e-01 1.51775647e-01 1.51688293e-01 + 1.51601091e-01 1.51514038e-01 1.51427135e-01 1.51340382e-01 1.51253778e-01 + 1.51167322e-01 1.51081014e-01 1.50994854e-01 1.50908841e-01 1.50822975e-01 + 1.50737255e-01 1.50651681e-01 1.50566253e-01 1.50480970e-01 1.50395832e-01 + 1.50310838e-01 1.50225988e-01 1.50141281e-01 1.50056718e-01 1.49972298e-01 + 1.49888019e-01 1.49803883e-01 1.49719888e-01 1.49636035e-01 1.49552322e-01 + 1.49468749e-01 1.49385316e-01 1.49302023e-01 1.49218869e-01 1.49135854e-01 + 1.49052977e-01 1.48970239e-01 1.48887638e-01 1.48805174e-01 1.48722847e-01 + 1.48640656e-01 1.48558602e-01 1.48476683e-01 1.48394900e-01 1.48313252e-01 + 1.48231738e-01 1.48150359e-01 1.48069113e-01 1.47988001e-01 1.47907022e-01 + 1.47826176e-01 1.47745463e-01 1.47664881e-01 1.47584431e-01 1.47504113e-01 + 1.47423925e-01 1.47343868e-01 1.47263942e-01 1.47184145e-01 1.47104478e-01 + 1.47024940e-01 1.46945531e-01 1.46866251e-01 1.46787099e-01 1.46708074e-01 + 1.46629177e-01 1.46550407e-01 1.46471764e-01 1.46393248e-01 1.46314857e-01 + 1.46236593e-01 1.46158454e-01 1.46080440e-01 1.46002551e-01 1.45924786e-01 + 1.45847145e-01 1.45769628e-01 1.45692235e-01 1.45614965e-01 1.45537817e-01 + 1.45460792e-01 1.45383890e-01 1.45307109e-01 1.45230449e-01 1.45153911e-01 + 1.45077494e-01 1.45001197e-01 1.44925021e-01 1.44848964e-01 1.44773027e-01 + 1.44697209e-01 1.44621511e-01 1.44545931e-01 1.44470469e-01 1.44395126e-01 + 1.44319900e-01 1.44244791e-01 1.44169800e-01 1.44094926e-01 1.44020168e-01 + 1.43945527e-01 1.43871001e-01 1.43796591e-01 1.43722296e-01 1.43648117e-01 + 1.43574052e-01 1.43500101e-01 1.43426265e-01 1.43352542e-01 1.43278934e-01 + 1.43205438e-01 1.43132055e-01 1.43058785e-01 1.42985628e-01 1.42912583e-01 + 1.42839649e-01 1.42766827e-01 1.42694116e-01 1.42621516e-01 1.42549027e-01 + 1.42476649e-01 1.42404380e-01 1.42332222e-01 1.42260172e-01 1.42188233e-01 + 1.42116402e-01 1.42044680e-01 1.41973066e-01 1.41901561e-01 1.41830164e-01 + 1.41758874e-01 1.41687692e-01 1.41616617e-01 1.41545648e-01 1.41474786e-01 + 1.41404031e-01 1.41333382e-01 1.41262838e-01 1.41192400e-01 1.41122067e-01 + 1.41051839e-01 1.40981716e-01 1.40911698e-01 1.40841783e-01 1.40771973e-01 + 1.40702266e-01 1.40632663e-01 1.40563163e-01 1.40493766e-01 1.40424471e-01 + 1.40355279e-01 1.40286189e-01 1.40217202e-01 1.40148315e-01 1.40079531e-01 + 1.40010847e-01 1.39942264e-01 1.39873782e-01 1.39805401e-01 1.39737119e-01 + 1.39668938e-01 1.39600856e-01 1.39532874e-01 1.39464991e-01 1.39397207e-01 + 1.39329522e-01 1.39261935e-01 1.39194446e-01 1.39127056e-01 1.39059763e-01 + 1.38992568e-01 1.38925470e-01 1.38858469e-01 1.38791565e-01 1.38724758e-01 + 1.38658047e-01 1.38591432e-01 1.38524913e-01 1.38458490e-01 1.38392162e-01 + 1.38325930e-01 1.38259792e-01 1.38193750e-01 1.38127801e-01 1.38061947e-01 + 1.37996188e-01 1.37930522e-01 1.37864950e-01 1.37799471e-01 1.37734085e-01 + 1.37668793e-01 1.37603593e-01 1.37538485e-01 1.37473471e-01 1.37408548e-01 + 1.37343717e-01 1.37278977e-01 1.37214330e-01 1.37149773e-01 1.37085308e-01 + 1.37020933e-01 1.36956649e-01 1.36892455e-01 1.36828351e-01 1.36764338e-01 + 1.36700414e-01 1.36636580e-01 1.36572835e-01 1.36509179e-01 1.36445612e-01 + 1.36382134e-01 1.36318745e-01 1.36255443e-01 1.36192230e-01 1.36129105e-01 + 1.36066067e-01 1.36003117e-01 1.35940254e-01 1.35877478e-01 1.35814789e-01 + 1.35752187e-01 1.35689672e-01 1.35627242e-01 1.35564899e-01 1.35502641e-01 + 1.35440470e-01 1.35378384e-01 1.35316383e-01 1.35254467e-01 1.35192636e-01 + 1.35130890e-01 1.35069228e-01 1.35007651e-01 1.34946158e-01 1.34884748e-01 + 1.34823423e-01 1.34762181e-01 1.34701022e-01 1.34639947e-01 1.34578955e-01 + 1.34518045e-01 1.34457218e-01 1.34396474e-01 1.34335812e-01 1.34275232e-01 + 1.34214733e-01 1.34154317e-01 1.34093982e-01 1.34033728e-01 1.33973556e-01 + 1.33913464e-01 1.33853453e-01 1.33793523e-01 1.33733673e-01 1.33673904e-01 + 1.33614214e-01 1.33554605e-01 1.33495075e-01 1.33435625e-01 1.33376254e-01 + 1.33316962e-01 1.33257749e-01 1.33198615e-01 1.33139560e-01 1.33080583e-01 + 1.33021685e-01 1.32962864e-01 1.32904122e-01 1.32845457e-01 1.32786870e-01 + 1.32728361e-01 1.32669928e-01 1.32611573e-01 1.32553295e-01 1.32495093e-01 + 1.32436968e-01 1.32378920e-01 1.32320948e-01 1.32263052e-01 1.32205232e-01 + 1.32147487e-01 1.32089818e-01 1.32032225e-01 1.31974707e-01 1.31917264e-01 + 1.31859896e-01 1.31802603e-01 1.31745384e-01 1.31688240e-01 1.31631170e-01 + 1.31574174e-01 1.31517252e-01 1.31460404e-01 1.31403630e-01 1.31346929e-01 + 1.31290301e-01 1.31233747e-01 1.31177266e-01 1.31120857e-01 1.31064522e-01 + 1.31008258e-01 1.30952068e-01 1.30895949e-01 1.30839903e-01 1.30783928e-01 + 1.30728025e-01 1.30672194e-01 1.30616435e-01 1.30560746e-01 1.30505129e-01 + 1.30449583e-01 1.30394108e-01 1.30338703e-01 1.30283369e-01 1.30228105e-01 + 1.30172912e-01 1.30117789e-01 1.30062736e-01 1.30007752e-01 1.29952839e-01 + 1.29897994e-01 1.29843219e-01 1.29788514e-01 1.29733877e-01 1.29679310e-01 + 1.29624811e-01 1.29570381e-01 1.29516019e-01 1.29461726e-01 1.29407501e-01 + 1.29353344e-01 1.29299255e-01 1.29245234e-01 1.29191280e-01 1.29137394e-01 + 1.29083575e-01 1.29029824e-01 1.28976140e-01 1.28922522e-01 1.28868972e-01 + 1.28815488e-01 1.28762070e-01 1.28708719e-01 1.28655435e-01 1.28602216e-01 + 1.28549063e-01 1.28495977e-01 1.28442955e-01 1.28390000e-01 1.28337110e-01 + 1.28284285e-01 1.28231526e-01 1.28178831e-01 1.28126202e-01 1.28073637e-01 + 1.28021137e-01 1.27968701e-01 1.27916330e-01 1.27864023e-01 1.27811780e-01 + 1.27759601e-01 1.27707486e-01 1.27655434e-01 1.27603447e-01 1.27551522e-01 + 1.27499661e-01 1.27447864e-01 1.27396129e-01 1.27344457e-01 1.27292848e-01 + 1.27241302e-01 1.27189818e-01 1.27138397e-01 1.27087038e-01 1.27035742e-01 + 1.26984507e-01 1.26933334e-01 1.26882223e-01 1.26831174e-01 1.26780187e-01 + 1.26729260e-01 1.26678396e-01 1.26627592e-01 1.26576849e-01 1.26526168e-01 + 1.26475547e-01 1.26424987e-01 1.26374487e-01 1.26324048e-01 1.26273670e-01 + 1.26223351e-01 1.26173093e-01 1.26122894e-01 1.26072756e-01 1.26022677e-01 + 1.25972658e-01 1.25922698e-01 1.25872798e-01 1.25822957e-01 1.25773176e-01 + 1.25723453e-01 1.25673789e-01 1.25624184e-01 1.25574638e-01 1.25525150e-01 + 1.25475721e-01 1.25426350e-01 1.25377037e-01 1.25327782e-01 1.25278586e-01 + 1.25229447e-01 1.25180366e-01 1.25131343e-01 1.25082377e-01 1.25033469e-01 + 1.24984618e-01 1.24935824e-01 1.24887088e-01 1.24838408e-01 1.24789785e-01 + 1.24741219e-01 1.24692710e-01 1.24644257e-01 1.24595861e-01 1.24547521e-01 + 1.24499237e-01 1.24451010e-01 1.24402838e-01 1.24354722e-01 1.24306662e-01 + 1.24258658e-01 1.24210709e-01 1.24162816e-01 1.24114978e-01 1.24067195e-01 + 1.24019468e-01 1.23971795e-01 1.23924178e-01 1.23876615e-01 1.23829107e-01 + 1.23781654e-01 1.23734255e-01 1.23686910e-01 1.23639620e-01 1.23592384e-01 + 1.23545202e-01 1.23498075e-01 1.23451001e-01 1.23403980e-01 1.23357014e-01 + 1.23310101e-01 1.23263242e-01 1.23216436e-01 1.23169683e-01 1.23122983e-01 + 1.23076337e-01 1.23029743e-01 1.22983202e-01 1.22936715e-01 1.22890279e-01 + 1.22843897e-01 1.22797567e-01 1.22751289e-01 1.22705063e-01 1.22658890e-01 + 1.22612769e-01 1.22566700e-01 1.22520682e-01 1.22474717e-01 1.22428803e-01 + 1.22382941e-01 1.22337130e-01 1.22291371e-01 1.22245663e-01 1.22200006e-01 + 1.22154400e-01 1.22108845e-01 1.22063342e-01 1.22017889e-01 1.21972487e-01 + 1.21927135e-01 1.21881834e-01 1.21836584e-01 1.21791383e-01 1.21746234e-01 + 1.21701134e-01 1.21656084e-01 1.21611085e-01 1.21566135e-01 1.21521235e-01 + 1.21476385e-01 1.21431584e-01 1.21386833e-01 1.21342131e-01 1.21297479e-01 + 1.21252876e-01 1.21208322e-01 1.21163817e-01 1.21119362e-01 1.21074955e-01 + 1.21030597e-01 1.20986287e-01 1.20942026e-01 1.20897814e-01 1.20853651e-01 + 1.20809535e-01 1.20765468e-01 1.20721449e-01 1.20677478e-01 1.20633555e-01 + 1.20589681e-01 1.20545854e-01 1.20502074e-01 1.20458343e-01 1.20414659e-01 + 1.20371022e-01 1.20327433e-01 1.20283891e-01 1.20240396e-01 1.20196949e-01 + 1.20153549e-01 1.20110195e-01 1.20066889e-01 1.20023629e-01 1.19980416e-01 + 1.19937250e-01 1.19894130e-01 1.19851056e-01 1.19808030e-01 1.19765049e-01 + 1.19722115e-01 1.19679226e-01 1.19636384e-01 1.19593588e-01 1.19550838e-01 + 1.19508133e-01 1.19465474e-01 1.19422861e-01 1.19380294e-01 1.19337772e-01 + 1.19295295e-01 1.19252863e-01 1.19210477e-01 1.19168136e-01 1.19125841e-01 + 1.19083590e-01 1.19041384e-01 1.18999223e-01 1.18957106e-01 1.18915035e-01 + 1.18873008e-01 1.18831025e-01 1.18789087e-01 1.18747194e-01 1.18705344e-01 + 1.18663539e-01 1.18621778e-01 1.18580061e-01 1.18538388e-01 1.18496759e-01 + 1.18455174e-01 1.18413632e-01 1.18372134e-01 1.18330680e-01 1.18289269e-01 + 1.18247902e-01 1.18206578e-01 1.18165298e-01 1.18124060e-01 1.18082866e-01 + 1.18041715e-01 1.18000607e-01 1.17959541e-01 1.17918519e-01 1.17877539e-01 + 1.17836602e-01 1.17795708e-01 1.17754856e-01 1.17714047e-01 1.17673280e-01 + 1.17632556e-01 1.17591873e-01 1.17551233e-01 1.17510635e-01 1.17470079e-01 + 1.17429565e-01 1.17389093e-01 1.17348662e-01 1.17308274e-01 1.17267927e-01 + 1.17227622e-01 1.17187358e-01 1.17147135e-01 1.17106955e-01 1.17066815e-01 + 1.17026717e-01 1.16986659e-01 1.16946643e-01 1.16906668e-01 1.16866734e-01 + 1.16826841e-01 1.16786988e-01 1.16747177e-01 1.16707406e-01 1.16667676e-01 + 1.16627986e-01 1.16588337e-01 1.16548728e-01 1.16509159e-01 1.16469631e-01 + 1.16430143e-01 1.16390695e-01 1.16351287e-01 1.16311919e-01 1.16272591e-01 + 1.16233303e-01 1.16194055e-01 1.16154846e-01 1.16115678e-01 1.16076548e-01 + 1.16037459e-01 1.15998408e-01 1.15959397e-01 1.15920426e-01 1.15881494e-01 + 1.15842601e-01 1.15803747e-01 1.15764932e-01 1.15726156e-01 1.15687419e-01 + 1.15648721e-01 1.15610062e-01 1.15571441e-01 1.15532859e-01 1.15494316e-01 + 1.15455812e-01 1.15417345e-01 1.15378918e-01 1.15340528e-01 1.15302177e-01 + 1.15263864e-01 1.15225590e-01 1.15187353e-01 1.15149155e-01 1.15110994e-01 + 1.15072871e-01 1.15034786e-01 1.14996739e-01 1.14958730e-01 1.14920759e-01 + 1.14882824e-01 1.14844928e-01 1.14807069e-01 1.14769247e-01 1.14731463e-01 + 1.14693716e-01 1.14656006e-01 1.14618334e-01 1.14580699e-01 1.14543100e-01 + 1.14505539e-01 1.14468014e-01 1.14430527e-01 1.14393076e-01 1.14355662e-01 + 1.14318284e-01 1.14280944e-01 1.14243640e-01 1.14206372e-01 1.14169141e-01 + 1.14131946e-01 1.14094787e-01 1.14057665e-01 1.14020579e-01 1.13983529e-01 + 1.13946515e-01 1.13909538e-01 1.13872596e-01 1.13835690e-01 1.13798820e-01 + 1.13761986e-01 1.13725188e-01 1.13688425e-01 1.13651698e-01 1.13615006e-01 + 1.13578350e-01 1.13541730e-01 1.13505144e-01 1.13468595e-01 1.13432080e-01 + 1.13395601e-01 1.13359156e-01 1.13322747e-01 1.13286373e-01 1.13250035e-01 + 1.13213730e-01 1.13177461e-01 1.13141227e-01 1.13105028e-01 1.13068863e-01 + 1.13032733e-01 1.12996637e-01 1.12960576e-01 1.12924550e-01 1.12888558e-01 + 1.12852600e-01 1.12816677e-01 1.12780788e-01 1.12744933e-01 1.12709112e-01 + 1.12673326e-01 1.12637574e-01 1.12601855e-01 1.12566171e-01 1.12530520e-01 + 1.12494904e-01 1.12459321e-01 1.12423772e-01 1.12388256e-01 1.12352774e-01 + 1.12317326e-01 1.12281911e-01 1.12246530e-01 1.12211182e-01 1.12175868e-01 + 1.12140587e-01 1.12105339e-01 1.12070125e-01 1.12034943e-01 1.11999795e-01 + 1.11964679e-01 1.11929597e-01 1.11894548e-01 1.11859532e-01 1.11824548e-01 + 1.11789597e-01 1.11754679e-01 1.11719794e-01 1.11684941e-01 1.11650121e-01 + 1.11615334e-01 1.11580579e-01 1.11545856e-01 1.11511166e-01 1.11476508e-01 + 1.11441883e-01 1.11407289e-01 1.11372728e-01 1.11338199e-01 1.11303703e-01 + 1.11269238e-01 1.11234805e-01 1.11200404e-01 1.11166035e-01 1.11131698e-01 + 1.11097393e-01 1.11063119e-01 1.11028877e-01 1.10994667e-01 1.10960489e-01 + 1.10926342e-01 1.10892226e-01 1.10858142e-01 1.10824089e-01 1.10790068e-01 + 1.10756078e-01 1.10722119e-01 1.10688192e-01 1.10654295e-01 1.10620430e-01 + 1.10586596e-01 1.10552793e-01 1.10519021e-01 1.10485279e-01 1.10451569e-01 + 1.10417890e-01 1.10384241e-01 1.10350623e-01 1.10317036e-01 1.10283479e-01 + 1.10249953e-01 1.10216458e-01 1.10182993e-01 1.10149558e-01 1.10116154e-01 + 1.10082780e-01 1.10049437e-01 1.10016124e-01 1.09982841e-01 1.09949588e-01 + 1.09916366e-01 1.09883174e-01 1.09850011e-01 1.09816879e-01 1.09783776e-01 + 1.09750704e-01 1.09717661e-01 1.09684648e-01 1.09651665e-01 1.09618712e-01 + 1.09585789e-01 1.09552895e-01 1.09520030e-01 1.09487196e-01 1.09454390e-01 + 1.09421615e-01 1.09388868e-01 1.09356151e-01 1.09323464e-01 1.09290805e-01 + 1.09258176e-01 1.09225576e-01 1.09193006e-01 1.09160464e-01 1.09127951e-01 + 1.09095468e-01 1.09063013e-01 1.09030588e-01 1.08998191e-01 1.08965824e-01 + 1.08933485e-01 1.08901174e-01 1.08868893e-01 1.08836640e-01 1.08804416e-01 + 1.08772220e-01 1.08740054e-01 1.08707915e-01 1.08675805e-01 1.08643724e-01 + 1.08611671e-01 1.08579646e-01 1.08547649e-01 1.08515681e-01 1.08483741e-01 + 1.08451829e-01 1.08419946e-01 1.08388090e-01 1.08356263e-01 1.08324463e-01 + 1.08292692e-01 1.08260948e-01 1.08229233e-01 1.08197545e-01 1.08165885e-01 + 1.08134253e-01 1.08102648e-01 1.08071072e-01 1.08039523e-01 1.08008001e-01 + 1.07976507e-01 1.07945041e-01 1.07913602e-01 1.07882191e-01 1.07850807e-01 + 1.07819450e-01 1.07788121e-01 1.07756819e-01 1.07725544e-01 1.07694296e-01 + 1.07663076e-01 1.07631883e-01 1.07600717e-01 1.07569578e-01 1.07538466e-01 + 1.07507381e-01 1.07476322e-01 1.07445291e-01 1.07414287e-01 1.07383309e-01 + 1.07352359e-01 1.07321435e-01 1.07290537e-01 1.07259667e-01 1.07228823e-01 + 1.07198005e-01 1.07167214e-01 1.07136450e-01 1.07105712e-01 1.07075001e-01 + 1.07044316e-01 1.07013657e-01 1.06983025e-01 1.06952419e-01 1.06921839e-01 + 1.06891286e-01 1.06860758e-01 1.06830257e-01 1.06799782e-01 1.06769333e-01 + 1.06738910e-01 1.06708513e-01 1.06678142e-01 1.06647796e-01 1.06617477e-01 + 1.06587184e-01 1.06556916e-01 1.06526674e-01 1.06496458e-01 1.06466268e-01 + 1.06436103e-01 1.06405964e-01 1.06375850e-01 1.06345762e-01 1.06315700e-01 + 1.06285663e-01 1.06255651e-01 1.06225665e-01 1.06195704e-01 1.06165769e-01 + 1.06135859e-01 1.06105974e-01 1.06076114e-01 1.06046280e-01 1.06016470e-01 + 1.05986686e-01 1.05956927e-01 1.05927193e-01 1.05897484e-01 1.05867800e-01 + 1.05838141e-01 1.05808507e-01 1.05778897e-01 1.05749313e-01 1.05719753e-01 + 1.05690218e-01 1.05660708e-01 1.05631223e-01 1.05601762e-01 1.05572326e-01 + 1.05542914e-01 1.05513528e-01 1.05484165e-01 1.05454827e-01 1.05425514e-01 + 1.05396225e-01 1.05366960e-01 1.05337720e-01 1.05308504e-01 1.05279312e-01 + 1.05250145e-01 1.05221002e-01 1.05191883e-01 1.05162788e-01 1.05133717e-01 + 1.05104671e-01 1.05075648e-01 1.05046650e-01 1.05017675e-01 1.04988725e-01 + 1.04959798e-01 1.04930896e-01 1.04902017e-01 1.04873162e-01 1.04844331e-01 + 1.04815523e-01 1.04786740e-01 1.04757980e-01 1.04729243e-01 1.04700531e-01 + 1.04671841e-01 1.04643176e-01 1.04614534e-01 1.04585916e-01 1.04557321e-01 + 1.04528749e-01 1.04500201e-01 1.04471676e-01 1.04443175e-01 1.04414697e-01 + 1.04386242e-01 1.04357810e-01 1.04329402e-01 1.04301017e-01 1.04272655e-01 + 1.04244316e-01 1.04216000e-01 1.04187707e-01 1.04159437e-01 1.04131191e-01 + 1.04102967e-01 1.04074766e-01 1.04046588e-01 1.04018433e-01 1.03990301e-01 + 1.03962192e-01 1.03934105e-01 1.03906041e-01 1.03878000e-01 1.03849982e-01 + 1.03821986e-01 1.03794013e-01 1.03766062e-01 1.03738134e-01 1.03710229e-01 + 1.03682346e-01 1.03654486e-01 1.03626648e-01 1.03598832e-01 1.03571039e-01 + 1.03543268e-01 1.03515520e-01 1.03487793e-01 1.03460089e-01 1.03432408e-01 + 1.03404748e-01 1.03377111e-01 1.03349496e-01 1.03321903e-01 1.03294332e-01 + 1.03266783e-01 1.03239256e-01 1.03211751e-01 1.03184268e-01 1.03156807e-01 + 1.03129368e-01 1.03101951e-01 1.03074556e-01 1.03047182e-01 1.03019831e-01 + 1.02992501e-01 1.02965192e-01 1.02937906e-01 1.02910641e-01 1.02883398e-01 + 1.02856177e-01 1.02828977e-01 1.02801798e-01 1.02774642e-01 1.02747506e-01 + 1.02720392e-01 1.02693300e-01 1.02666229e-01 1.02639180e-01 1.02612151e-01 + 1.02585145e-01 1.02558159e-01 1.02531195e-01 1.02504252e-01 1.02477330e-01 + 1.02450430e-01 1.02423550e-01 1.02396692e-01 1.02369855e-01 1.02343039e-01 + 1.02316244e-01 1.02289470e-01 1.02262717e-01 1.02235985e-01 1.02209274e-01 + 1.02182584e-01 1.02155915e-01 1.02129267e-01 1.02102639e-01 1.02076033e-01 + 1.02049447e-01 1.02022882e-01 1.01996338e-01 1.01969814e-01 1.01943311e-01 + 1.01916829e-01 1.01890367e-01 1.01863926e-01 1.01837505e-01 1.01811106e-01 + 1.01784726e-01 1.01758367e-01 1.01732029e-01 1.01705711e-01 1.01679413e-01 + 1.01653136e-01 1.01626879e-01 1.01600643e-01 1.01574426e-01 1.01548230e-01 + 1.01522055e-01 1.01495899e-01 1.01469764e-01 1.01443649e-01 1.01417554e-01 + 1.01391479e-01 1.01365425e-01 1.01339390e-01 1.01313376e-01 1.01287381e-01 + 1.01261406e-01 1.01235452e-01 1.01209517e-01 1.01183603e-01 1.01157708e-01 + 1.01131833e-01 1.01105978e-01 1.01080143e-01 1.01054327e-01 1.01028532e-01 + 1.01002756e-01 1.00976999e-01 1.00951263e-01 1.00925546e-01 1.00899849e-01 + 1.00874171e-01 1.00848513e-01 1.00822875e-01 1.00797256e-01 1.00771656e-01 + 1.00746077e-01 1.00720516e-01 1.00694975e-01 1.00669454e-01 1.00643952e-01 + 1.00618469e-01 1.00593005e-01 1.00567561e-01 1.00542136e-01 1.00516731e-01 + 1.00491345e-01 1.00465978e-01 1.00440630e-01 1.00415301e-01 1.00389992e-01 + 1.00364701e-01 1.00339430e-01 1.00314178e-01 1.00288944e-01 1.00263730e-01 + 1.00238535e-01 1.00213359e-01 1.00188202e-01 1.00163064e-01 1.00137944e-01 + 1.00112844e-01 1.00087762e-01 1.00062700e-01 1.00037656e-01 1.00012631e-01 + 9.99876242e-02 9.99626366e-02 9.99376677e-02 9.99127176e-02 9.98877861e-02 + 9.98628732e-02 9.98379790e-02 9.98131034e-02 9.97882464e-02 9.97634079e-02 + 9.97385880e-02 9.97137866e-02 9.96890037e-02 9.96642393e-02 9.96394933e-02 + 9.96147657e-02 9.95900565e-02 9.95653657e-02 9.95406933e-02 9.95160392e-02 + 9.94914034e-02 9.94667859e-02 9.94421867e-02 9.94176057e-02 9.93930429e-02 + 9.93684983e-02 9.93439719e-02 9.93194636e-02 9.92949735e-02 9.92705015e-02 + 9.92460476e-02 9.92216117e-02 9.91971939e-02 9.91727940e-02 9.91484122e-02 + 9.91240484e-02 9.90997025e-02 9.90753745e-02 9.90510645e-02 9.90267723e-02 + 9.90024980e-02 9.89782415e-02 9.89540029e-02 9.89297821e-02 9.89055790e-02 + 9.88813937e-02 9.88572261e-02 9.88330763e-02 9.88089441e-02 9.87848296e-02 + 9.87607327e-02 9.87366535e-02 9.87125919e-02 9.86885478e-02 9.86645213e-02 + 9.86405124e-02 9.86165209e-02 9.85925470e-02 9.85685906e-02 9.85446516e-02 + 9.85207300e-02 9.84968258e-02 9.84729391e-02 9.84490697e-02 9.84252176e-02 + 9.84013829e-02 9.83775655e-02 9.83537654e-02 9.83299825e-02 9.83062169e-02 + 9.82824685e-02 9.82587374e-02 9.82350233e-02 9.82113265e-02 9.81876468e-02 + 9.81639842e-02 9.81403387e-02 9.81167103e-02 9.80930990e-02 9.80695047e-02 + 9.80459274e-02 9.80223671e-02 9.79988238e-02 9.79752974e-02 9.79517880e-02 + 9.79282955e-02 9.79048199e-02 9.78813611e-02 9.78579192e-02 9.78344942e-02 + 9.78110859e-02 9.77876945e-02 9.77643198e-02 9.77409619e-02 9.77176207e-02 + 9.76942963e-02 9.76709885e-02 9.76476974e-02 9.76244230e-02 9.76011651e-02 + 9.75779239e-02 9.75546993e-02 9.75314913e-02 9.75082999e-02 9.74851249e-02 + 9.74619665e-02 9.74388246e-02 9.74156991e-02 9.73925901e-02 9.73694976e-02 + 9.73464215e-02 9.73233617e-02 9.73003184e-02 9.72772914e-02 9.72542807e-02 + 9.72312864e-02 9.72083084e-02 9.71853467e-02 9.71624012e-02 9.71394719e-02 + 9.71165589e-02 9.70936621e-02 9.70707815e-02 9.70479171e-02 9.70250688e-02 + 9.70022366e-02 9.69794205e-02 9.69566206e-02 9.69338367e-02 9.69110688e-02 + 9.68883170e-02 9.68655813e-02 9.68428615e-02 9.68201577e-02 9.67974698e-02 + 9.67747979e-02 9.67521419e-02 9.67295019e-02 9.67068777e-02 9.66842693e-02 + 9.66616769e-02 9.66391002e-02 9.66165394e-02 9.65939943e-02 9.65714651e-02 + 9.65489516e-02 9.65264538e-02 9.65039718e-02 9.64815054e-02 9.64590547e-02 + 9.64366197e-02 9.64142004e-02 9.63917967e-02 9.63694086e-02 9.63470360e-02 + 9.63246791e-02 9.63023377e-02 9.62800118e-02 9.62577015e-02 9.62354067e-02 + 9.62131273e-02 9.61908635e-02 9.61686150e-02 9.61463820e-02 9.61241644e-02 + 9.61019623e-02 9.60797754e-02 9.60576040e-02 9.60354479e-02 9.60133071e-02 + 9.59911816e-02 9.59690714e-02 9.59469765e-02 9.59248968e-02 9.59028324e-02 + 9.58807832e-02 9.58587492e-02 9.58367303e-02 9.58147267e-02 9.57927382e-02 + 9.57707648e-02 9.57488065e-02 9.57268633e-02 9.57049352e-02 9.56830222e-02 + 9.56611242e-02 9.56392413e-02 9.56173733e-02 9.55955204e-02 9.55736824e-02 + 9.55518594e-02 9.55300513e-02 9.55082582e-02 9.54864799e-02 9.54647166e-02 + 9.54429681e-02 9.54212345e-02 9.53995157e-02 9.53778117e-02 9.53561226e-02 + 9.53344482e-02 9.53127886e-02 9.52911438e-02 9.52695137e-02 9.52478984e-02 + 9.52262977e-02 9.52047117e-02 9.51831404e-02 9.51615838e-02 9.51400418e-02 + 9.51185144e-02 9.50970016e-02 9.50755034e-02 9.50540198e-02 9.50325508e-02 + 9.50110963e-02 9.49896563e-02 9.49682308e-02 9.49468198e-02 9.49254233e-02 + 9.49040412e-02 9.48826736e-02 9.48613204e-02 9.48399817e-02 9.48186573e-02 + 9.47973473e-02 9.47760516e-02 9.47547703e-02 9.47335034e-02 9.47122507e-02 + 9.46910123e-02 9.46697883e-02 9.46485784e-02 9.46273829e-02 9.46062015e-02 + 9.45850344e-02 9.45638815e-02 9.45427428e-02 9.45216182e-02 9.45005078e-02 + 9.44794116e-02 9.44583294e-02 9.44372614e-02 9.44162074e-02 9.43951676e-02 + 9.43741418e-02 9.43531300e-02 9.43321323e-02 9.43111485e-02 9.42901788e-02 + 9.42692231e-02 9.42482813e-02 9.42273534e-02 9.42064395e-02 9.41855396e-02 + 9.41646535e-02 9.41437813e-02 9.41229230e-02 9.41020785e-02 9.40812479e-02 + 9.40604311e-02 9.40396282e-02 9.40188390e-02 9.39980636e-02 9.39773020e-02 + 9.39565541e-02 9.39358200e-02 9.39150995e-02 9.38943928e-02 9.38736998e-02 + 9.38530204e-02 9.38323548e-02 9.38117027e-02 9.37910643e-02 9.37704395e-02 + 9.37498283e-02 9.37292307e-02 9.37086466e-02 9.36880762e-02 9.36675192e-02 + 9.36469758e-02 9.36264459e-02 9.36059295e-02 9.35854265e-02 9.35649371e-02 + 9.35444611e-02 9.35239985e-02 9.35035493e-02 9.34831136e-02 9.34626912e-02 + 9.34422823e-02 9.34218866e-02 9.34015044e-02 9.33811355e-02 9.33607798e-02 + 9.33404375e-02 9.33201085e-02 9.32997928e-02 9.32794903e-02 9.32592011e-02 + 9.32389251e-02 9.32186624e-02 9.31984128e-02 9.31781764e-02 9.31579532e-02 + 9.31377432e-02 9.31175463e-02 9.30973626e-02 9.30771919e-02 9.30570344e-02 + 9.30368899e-02 9.30167586e-02 9.29966403e-02 9.29765350e-02 9.29564428e-02 + 9.29363636e-02 9.29162974e-02 9.28962442e-02 9.28762040e-02 9.28561768e-02 + 9.28361624e-02 9.28161611e-02 9.27961726e-02 9.27761971e-02 9.27562344e-02 + 9.27362847e-02 9.27163478e-02 9.26964237e-02 9.26765125e-02 9.26566141e-02 + 9.26367286e-02 9.26168558e-02 9.25969958e-02 9.25771486e-02 9.25573141e-02 + 9.25374924e-02 9.25176834e-02 9.24978871e-02 9.24781036e-02 9.24583327e-02 + 9.24385745e-02 9.24188289e-02 9.23990960e-02 9.23793758e-02 9.23596681e-02 + 9.23399731e-02 9.23202907e-02 9.23006208e-02 9.22809635e-02 9.22613188e-02 + 9.22416866e-02 9.22220669e-02 9.22024597e-02 9.21828651e-02 9.21632829e-02 + 9.21437132e-02 9.21241560e-02 9.21046112e-02 9.20850788e-02 9.20655589e-02 + 9.20460514e-02 9.20265563e-02 9.20070735e-02 9.19876031e-02 9.19681451e-02 + 9.19486994e-02 9.19292661e-02 9.19098451e-02 9.18904363e-02 9.18710399e-02 + 9.18516557e-02 9.18322838e-02 9.18129242e-02 9.17935768e-02 9.17742416e-02 + 9.17549186e-02 9.17356079e-02 9.17163093e-02 9.16970229e-02 9.16777486e-02 + 9.16584865e-02 9.16392366e-02 9.16199987e-02 9.16007730e-02 9.15815594e-02 + 9.15623578e-02 9.15431684e-02 9.15239910e-02 9.15048256e-02 9.14856723e-02 + 9.14665310e-02 9.14474017e-02 9.14282844e-02 9.14091791e-02 9.13900857e-02 + 9.13710043e-02 9.13519349e-02 9.13328774e-02 9.13138318e-02 9.12947982e-02 + 9.12757764e-02 9.12567665e-02 9.12377685e-02 9.12187823e-02 9.11998080e-02 + 9.11808456e-02 9.11618949e-02 9.11429561e-02 9.11240290e-02 9.11051138e-02 + 9.10862103e-02 9.10673186e-02 9.10484386e-02 9.10295704e-02 9.10107139e-02 + 9.09918691e-02 9.09730360e-02 9.09542146e-02 9.09354049e-02 9.09166069e-02 + 9.08978205e-02 9.08790457e-02 9.08602826e-02 9.08415311e-02 9.08227911e-02 + 9.08040628e-02 9.07853461e-02 9.07666409e-02 9.07479473e-02 9.07292652e-02 + 9.07105947e-02 9.06919357e-02 9.06732882e-02 9.06546522e-02 9.06360277e-02 + 9.06174146e-02 9.05988131e-02 9.05802229e-02 9.05616442e-02 9.05430770e-02 + 9.05245211e-02 9.05059767e-02 9.04874436e-02 9.04689219e-02 9.04504116e-02 + 9.04319127e-02 9.04134251e-02 9.03949488e-02 9.03764839e-02 9.03580303e-02 + 9.03395879e-02 9.03211569e-02 9.03027371e-02 9.02843286e-02 9.02659313e-02 + 9.02475453e-02 9.02291706e-02 9.02108070e-02 9.01924546e-02 9.01741135e-02 + 9.01557835e-02 9.01374647e-02 9.01191571e-02 9.01008606e-02 9.00825752e-02 + 9.00643010e-02 9.00460379e-02 9.00277859e-02 9.00095450e-02 8.99913152e-02 + 8.99730965e-02 8.99548888e-02 8.99366921e-02 8.99185065e-02 8.99003320e-02 + 8.98821684e-02 8.98640159e-02 8.98458743e-02 8.98277437e-02 8.98096241e-02 + 8.97915155e-02 8.97734178e-02 8.97553311e-02 8.97372552e-02 8.97191903e-02 + 8.97011363e-02 8.96830932e-02 8.96650610e-02 8.96470396e-02 8.96290291e-02 + 8.96110295e-02 8.95930407e-02 8.95750627e-02 8.95570956e-02 8.95391392e-02 + 8.95211937e-02 8.95032589e-02 8.94853349e-02 8.94674217e-02 8.94495192e-02 + 8.94316275e-02 8.94137465e-02 8.93958762e-02 8.93780167e-02 8.93601678e-02 + 8.93423296e-02 8.93245021e-02 8.93066853e-02 8.92888791e-02 8.92710836e-02 + 8.92532987e-02 8.92355244e-02 8.92177608e-02 8.92000077e-02 8.91822653e-02 + 8.91645334e-02 8.91468121e-02 8.91291014e-02 8.91114012e-02 8.90937115e-02 + 8.90760324e-02 8.90583638e-02 8.90407057e-02 8.90230582e-02 8.90054211e-02 + 8.89877945e-02 8.89701783e-02 8.89525726e-02 8.89349774e-02 8.89173926e-02 + 8.88998182e-02 8.88822542e-02 8.88647007e-02 8.88471575e-02 8.88296247e-02 + 8.88121023e-02 8.87945903e-02 8.87770886e-02 8.87595973e-02 8.87421163e-02 + 8.87246456e-02 8.87071853e-02 8.86897352e-02 8.86722954e-02 8.86548660e-02 + 8.86374468e-02 8.86200378e-02 8.86026391e-02 8.85852507e-02 8.85678725e-02 + 8.85505045e-02 8.85331467e-02 8.85157991e-02 8.84984618e-02 8.84811346e-02 + 8.84638176e-02 8.84465107e-02 8.84292140e-02 8.84119274e-02 8.83946510e-02 + 8.83773847e-02 8.83601285e-02 8.83428825e-02 8.83256465e-02 8.83084206e-02 + 8.82912047e-02 8.82739990e-02 8.82568033e-02 8.82396176e-02 8.82224420e-02 + 8.82052764e-02 8.81881208e-02 8.81709752e-02 8.81538396e-02 8.81367140e-02 + 8.81195984e-02 8.81024927e-02 8.80853970e-02 8.80683113e-02 8.80512355e-02 + 8.80341696e-02 8.80171137e-02 8.80000676e-02 8.79830314e-02 8.79660052e-02 + 8.79489888e-02 8.79319823e-02 8.79149857e-02 8.78979989e-02 8.78810219e-02 + 8.78640548e-02 8.78470975e-02 8.78301500e-02 8.78132123e-02 8.77962845e-02 + 8.77793664e-02 8.77624580e-02 8.77455595e-02 8.77286707e-02 8.77117916e-02 + 8.76949223e-02 8.76780628e-02 8.76612129e-02 8.76443728e-02 8.76275423e-02 + 8.76107216e-02 8.75939105e-02 8.75771091e-02 8.75603174e-02 8.75435353e-02 + 8.75267629e-02 8.75100001e-02 8.74932469e-02 8.74765033e-02 8.74597694e-02 + 8.74430451e-02 8.74263303e-02 8.74096251e-02 8.73929296e-02 8.73762435e-02 + 8.73595670e-02 8.73429001e-02 8.73262427e-02 8.73095948e-02 8.72929565e-02 + 8.72763276e-02 8.72597083e-02 8.72430984e-02 8.72264981e-02 8.72099072e-02 + 8.71933257e-02 8.71767537e-02 8.71601912e-02 8.71436381e-02 8.71270944e-02 + 8.71105602e-02 8.70940353e-02 8.70775199e-02 8.70610138e-02 8.70445172e-02 + 8.70280299e-02 8.70115519e-02 8.69950834e-02 8.69786241e-02 8.69621742e-02 + 8.69457337e-02 8.69293024e-02 8.69128805e-02 8.68964679e-02 8.68800646e-02 + 8.68636705e-02 8.68472857e-02 8.68309103e-02 8.68145440e-02 8.67981870e-02 + 8.67818393e-02 8.67655008e-02 8.67491715e-02 8.67328514e-02 8.67165406e-02 + 8.67002389e-02 8.66839464e-02 8.66676631e-02 8.66513890e-02 8.66351240e-02 + 8.66188682e-02 8.66026216e-02 8.65863841e-02 8.65701557e-02 8.65539364e-02 + 8.65377263e-02 8.65215252e-02 8.65053333e-02 8.64891504e-02 8.64729766e-02 + 8.64568119e-02 8.64406563e-02 8.64245097e-02 8.64083721e-02 8.63922436e-02 + 8.63761241e-02 8.63600136e-02 8.63439122e-02 8.63278197e-02 8.63117363e-02 + 8.62956618e-02 8.62795963e-02 8.62635398e-02 8.62474922e-02 8.62314536e-02 + 8.62154239e-02 8.61994032e-02 8.61833914e-02 8.61673885e-02 8.61513945e-02 + 8.61354094e-02 8.61194332e-02 8.61034659e-02 8.60875075e-02 8.60715580e-02 + 8.60556173e-02 8.60396855e-02 8.60237625e-02 8.60078483e-02 8.59919430e-02 + 8.59760465e-02 8.59601588e-02 8.59442800e-02 8.59284099e-02 8.59125486e-02 + 8.58966961e-02 8.58808523e-02 8.58650173e-02 8.58491911e-02 8.58333736e-02 + 8.58175649e-02 8.58017649e-02 8.57859736e-02 8.57701911e-02 8.57544172e-02 + 8.57386520e-02 8.57228956e-02 8.57071478e-02 8.56914087e-02 8.56756782e-02 + 8.56599565e-02 8.56442433e-02 8.56285389e-02 8.56128430e-02 8.55971558e-02 + 8.55814772e-02 8.55658072e-02 8.55501458e-02 8.55344930e-02 8.55188488e-02 + 8.55032132e-02 8.54875862e-02 8.54719677e-02 8.54563578e-02 8.54407564e-02 + 8.54251636e-02 8.54095793e-02 8.53940035e-02 8.53784363e-02 8.53628775e-02 + 8.53473273e-02 8.53317855e-02 8.53162523e-02 8.53007275e-02 8.52852112e-02 + 8.52697034e-02 8.52542040e-02 8.52387130e-02 8.52232305e-02 8.52077565e-02 + 8.51922909e-02 8.51768336e-02 8.51613848e-02 8.51459444e-02 8.51305124e-02 + 8.51150888e-02 8.50996736e-02 8.50842667e-02 8.50688682e-02 8.50534780e-02 + 8.50380963e-02 8.50227228e-02 8.50073577e-02 8.49920009e-02 8.49766524e-02 + 8.49613123e-02 8.49459804e-02 8.49306569e-02 8.49153416e-02 8.49000346e-02 + 8.48847359e-02 8.48694455e-02 8.48541633e-02 8.48388893e-02 8.48236237e-02 + 8.48083662e-02 8.47931170e-02 8.47778760e-02 8.47626432e-02 8.47474187e-02 + 8.47322023e-02 8.47169941e-02 8.47017941e-02 8.46866023e-02 8.46714187e-02 + 8.46562432e-02 8.46410759e-02 8.46259167e-02 8.46107657e-02 8.45956228e-02 + 8.45804880e-02 8.45653614e-02 8.45502428e-02 8.45351324e-02 8.45200301e-02 + 8.45049358e-02 8.44898497e-02 8.44747716e-02 8.44597016e-02 8.44446397e-02 + 8.44295858e-02 8.44145399e-02 8.43995021e-02 8.43844724e-02 8.43694506e-02 + 8.43544369e-02 8.43394312e-02 8.43244335e-02 8.43094438e-02 8.42944621e-02 + 8.42794883e-02 8.42645226e-02 8.42495648e-02 8.42346150e-02 8.42196731e-02 + 8.42047392e-02 8.41898132e-02 8.41748952e-02 8.41599851e-02 8.41450829e-02 + 8.41301886e-02 8.41153022e-02 8.41004238e-02 8.40855532e-02 8.40706905e-02 + 8.40558357e-02 8.40409887e-02 8.40261496e-02 8.40113184e-02 8.39964950e-02 + 8.39816795e-02 8.39668718e-02 8.39520719e-02 8.39372799e-02 8.39224957e-02 + 8.39077193e-02 8.38929507e-02 8.38781898e-02 8.38634368e-02 8.38486916e-02 + 8.38339541e-02 8.38192244e-02 8.38045025e-02 8.37897883e-02 8.37750818e-02 + 8.37603831e-02 8.37456922e-02 8.37310089e-02 8.37163334e-02 8.37016656e-02 + 8.36870055e-02 8.36723531e-02 8.36577084e-02 8.36430714e-02 8.36284421e-02 + 8.36138204e-02 8.35992064e-02 8.35846001e-02 8.35700014e-02 8.35554104e-02 + 8.35408270e-02 8.35262512e-02 8.35116831e-02 8.34971226e-02 8.34825697e-02 + 8.34680244e-02 8.34534867e-02 8.34389566e-02 8.34244341e-02 8.34099191e-02 + 8.33954118e-02 8.33809120e-02 8.33664197e-02 8.33519351e-02 8.33374579e-02 + 8.33229883e-02 8.33085263e-02 8.32940718e-02 8.32796248e-02 8.32651853e-02 + 8.32507533e-02 8.32363288e-02 8.32219118e-02 8.32075023e-02 8.31931003e-02 + 8.31787058e-02 8.31643187e-02 8.31499391e-02 8.31355669e-02 8.31212022e-02 + 8.31068450e-02 8.30924951e-02 8.30781528e-02 8.30638178e-02 8.30494902e-02 + 8.30351701e-02 8.30208574e-02 8.30065520e-02 8.29922541e-02 8.29779635e-02 + 8.29636804e-02 8.29494046e-02 8.29351361e-02 8.29208751e-02 8.29066213e-02 + 8.28923750e-02 8.28781359e-02 8.28639042e-02 8.28496799e-02 8.28354628e-02 + 8.28212531e-02 8.28070507e-02 8.27928556e-02 8.27786678e-02 8.27644872e-02 + 8.27503140e-02 8.27361480e-02 8.27219893e-02 8.27078379e-02 8.26936938e-02 + 8.26795569e-02 8.26654272e-02 8.26513048e-02 8.26371896e-02 8.26230816e-02 + 8.26089809e-02 8.25948874e-02 8.25808011e-02 8.25667220e-02 8.25526501e-02 + 8.25385854e-02 8.25245279e-02 8.25104775e-02 8.24964344e-02 8.24823984e-02 + 8.24683695e-02 8.24543479e-02 8.24403333e-02 8.24263259e-02 8.24123257e-02 + 8.23983326e-02 8.23843466e-02 8.23703677e-02 8.23563960e-02 8.23424313e-02 + 8.23284737e-02 8.23145233e-02 8.23005799e-02 8.22866436e-02 8.22727144e-02 + 8.22587923e-02 8.22448772e-02 8.22309692e-02 8.22170683e-02 8.22031744e-02 + 8.21892875e-02 8.21754077e-02 8.21615349e-02 8.21476691e-02 8.21338103e-02 + 8.21199586e-02 8.21061138e-02 8.20922761e-02 8.20784453e-02 8.20646216e-02 + 8.20508048e-02 8.20369950e-02 8.20231922e-02 8.20093963e-02 8.19956074e-02 + 8.19818254e-02 8.19680504e-02 8.19542823e-02 8.19405212e-02 8.19267670e-02 + 8.19130197e-02 8.18992794e-02 8.18855459e-02 8.18718194e-02 8.18580997e-02 + 8.18443870e-02 8.18306811e-02 8.18169822e-02 8.18032901e-02 8.17896048e-02 + 8.17759265e-02 8.17622550e-02 8.17485903e-02 8.17349326e-02 8.17212816e-02 + 8.17076375e-02 8.16940002e-02 8.16803697e-02 8.16667461e-02 8.16531293e-02 + 8.16395193e-02 8.16259161e-02 8.16123197e-02 8.15987300e-02 8.15851472e-02 + 8.15715712e-02 8.15580019e-02 8.15444394e-02 8.15308836e-02 8.15173346e-02 + 8.15037924e-02 8.14902569e-02 8.14767282e-02 8.14632062e-02 8.14496909e-02 + 8.14361823e-02 8.14226805e-02 8.14091854e-02 8.13956970e-02 8.13822153e-02 + 8.13687402e-02 8.13552719e-02 8.13418103e-02 8.13283553e-02 8.13149070e-02 + 8.13014654e-02 8.12880305e-02 8.12746022e-02 8.12611805e-02 8.12477656e-02 + 8.12343572e-02 8.12209555e-02 8.12075604e-02 8.11941719e-02 8.11807901e-02 + 8.11674149e-02 8.11540463e-02 8.11406843e-02 8.11273288e-02 8.11139800e-02 + 8.11006378e-02 8.10873021e-02 8.10739731e-02 8.10606506e-02 8.10473346e-02 + 8.10340252e-02 8.10207224e-02 8.10074261e-02 8.09941364e-02 8.09808532e-02 + 8.09675765e-02 8.09543064e-02 8.09410428e-02 8.09277857e-02 8.09145351e-02 + 8.09012911e-02 8.08880535e-02 8.08748224e-02 8.08615978e-02 8.08483797e-02 + 8.08351681e-02 8.08219630e-02 8.08087643e-02 8.07955721e-02 8.07823863e-02 + 8.07692070e-02 8.07560342e-02 8.07428678e-02 8.07297078e-02 8.07165542e-02 + 8.07034071e-02 8.06902664e-02 8.06771322e-02 8.06640043e-02 8.06508829e-02 + 8.06377678e-02 8.06246592e-02 8.06115569e-02 8.05984610e-02 8.05853715e-02 + 8.05722884e-02 8.05592116e-02 8.05461412e-02 8.05330772e-02 8.05200195e-02 + 8.05069682e-02 8.04939232e-02 8.04808846e-02 8.04678523e-02 8.04548263e-02 + 8.04418066e-02 8.04287933e-02 8.04157863e-02 8.04027856e-02 8.03897912e-02 + 8.03768031e-02 8.03638212e-02 8.03508457e-02 8.03378765e-02 8.03249135e-02 + 8.03119568e-02 8.02990064e-02 8.02860622e-02 8.02731243e-02 8.02601926e-02 + 8.02472672e-02 8.02343481e-02 8.02214351e-02 8.02085284e-02 8.01956280e-02 + 8.01827337e-02 8.01698457e-02 8.01569639e-02 8.01440883e-02 8.01312189e-02 + 8.01183557e-02 8.01054986e-02 8.00926478e-02 8.00798032e-02 8.00669647e-02 + 8.00541324e-02 8.00413063e-02 8.00284863e-02 8.00156725e-02 8.00028649e-02 + 7.99900634e-02 7.99772680e-02 7.99644788e-02 7.99516957e-02 7.99389187e-02 + 7.99261479e-02 7.99133832e-02 7.99006246e-02 7.98878721e-02 7.98751257e-02 + 7.98623854e-02 7.98496512e-02 7.98369231e-02 7.98242011e-02 7.98114851e-02 + 7.97987753e-02 7.97860715e-02 7.97733737e-02 7.97606821e-02 7.97479965e-02 + 7.97353169e-02 7.97226434e-02 7.97099759e-02 7.96973145e-02 7.96846590e-02 + 7.96720097e-02 7.96593663e-02 7.96467290e-02 7.96340976e-02 7.96214723e-02 + 7.96088530e-02 7.95962397e-02 7.95836323e-02 7.95710310e-02 7.95584356e-02 + 7.95458463e-02 7.95332629e-02 7.95206854e-02 7.95081140e-02 7.94955485e-02 + 7.94829889e-02 7.94704353e-02 7.94578877e-02 7.94453459e-02 7.94328102e-02 + 7.94202803e-02 7.94077564e-02 7.93952384e-02 7.93827263e-02 7.93702202e-02 + 7.93577199e-02 7.93452256e-02 7.93327371e-02 7.93202546e-02 7.93077779e-02 + 7.92953071e-02 7.92828423e-02 7.92703832e-02 7.92579301e-02 7.92454828e-02 + 7.92330414e-02 7.92206058e-02 7.92081761e-02 7.91957523e-02 7.91833343e-02 + 7.91709221e-02 7.91585157e-02 7.91461152e-02 7.91337206e-02 7.91213317e-02 + 7.91089486e-02 7.90965714e-02 7.90842000e-02 7.90718344e-02 7.90594746e-02 + 7.90471205e-02 7.90347723e-02 7.90224298e-02 7.90100932e-02 7.89977623e-02 + 7.89854371e-02 7.89731178e-02 7.89608042e-02 7.89484964e-02 7.89361943e-02 + 7.89238979e-02 7.89116073e-02 7.88993225e-02 7.88870434e-02 7.88747700e-02 + 7.88625023e-02 7.88502404e-02 7.88379842e-02 7.88257337e-02 7.88134889e-02 + 7.88012498e-02 7.87890164e-02 7.87767887e-02 7.87645667e-02 7.87523504e-02 + 7.87401398e-02 7.87279348e-02 7.87157355e-02 7.87035419e-02 7.86913540e-02 + 7.86791717e-02 7.86669951e-02 7.86548241e-02 7.86426588e-02 7.86304991e-02 + 7.86183450e-02 7.86061966e-02 7.85940538e-02 7.85819167e-02 7.85697851e-02 + 7.85576592e-02 7.85455389e-02 7.85334242e-02 7.85213151e-02 7.85092116e-02 + 7.84971137e-02 7.84850214e-02 7.84729347e-02 7.84608535e-02 7.84487780e-02 + 7.84367080e-02 7.84246436e-02 7.84125847e-02 7.84005314e-02 7.83884837e-02 + 7.83764415e-02 7.83644048e-02 7.83523737e-02 7.83403482e-02 7.83283282e-02 + 7.83163137e-02 7.83043047e-02 7.82923013e-02 7.82803034e-02 7.82683110e-02 + 7.82563241e-02 7.82443427e-02 7.82323668e-02 7.82203964e-02 7.82084315e-02 + 7.81964721e-02 7.81845182e-02 7.81725697e-02 7.81606268e-02 7.81486893e-02 + 7.81367572e-02 7.81248307e-02 7.81129096e-02 7.81009939e-02 7.80890837e-02 + 7.80771790e-02 7.80652797e-02 7.80533858e-02 7.80414974e-02 7.80296144e-02 + 7.80177368e-02 7.80058646e-02 7.79939979e-02 7.79821366e-02 7.79702807e-02 + 7.79584302e-02 7.79465851e-02 7.79347454e-02 7.79229111e-02 7.79110821e-02 + 7.78992586e-02 7.78874404e-02 7.78756277e-02 7.78638202e-02 7.78520182e-02 + 7.78402215e-02 7.78284302e-02 7.78166443e-02 7.78048637e-02 7.77930884e-02 + 7.77813185e-02 7.77695539e-02 7.77577947e-02 7.77460408e-02 7.77342922e-02 + 7.77225490e-02 7.77108111e-02 7.76990785e-02 7.76873512e-02 7.76756292e-02 + 7.76639125e-02 7.76522011e-02 7.76404950e-02 7.76287942e-02 7.76170987e-02 + 7.76054085e-02 7.75937236e-02 7.75820439e-02 7.75703695e-02 7.75587004e-02 + 7.75470365e-02 7.75353780e-02 7.75237246e-02 7.75120765e-02 7.75004337e-02 + 7.74887961e-02 7.74771637e-02 7.74655366e-02 7.74539147e-02 7.74422981e-02 + 7.74306867e-02 7.74190805e-02 7.74074795e-02 7.73958837e-02 7.73842931e-02 + 7.73727078e-02 7.73611276e-02 7.73495527e-02 7.73379829e-02 7.73264183e-02 + 7.73148589e-02 7.73033047e-02 7.72917557e-02 7.72802118e-02 7.72686732e-02 + 7.72571396e-02 7.72456113e-02 7.72340881e-02 7.72225701e-02 7.72110572e-02 + 7.71995494e-02 7.71880468e-02 7.71765494e-02 7.71650571e-02 7.71535699e-02 + 7.71420878e-02 7.71306109e-02 7.71191391e-02 7.71076724e-02 7.70962108e-02 + 7.70847543e-02 7.70733030e-02 7.70618567e-02 7.70504155e-02 7.70389795e-02 + 7.70275485e-02 7.70161226e-02 7.70047018e-02 7.69932860e-02 7.69818754e-02 + 7.69704698e-02 7.69590693e-02 7.69476738e-02 7.69362834e-02 7.69248981e-02 + 7.69135178e-02 7.69021426e-02 7.68907724e-02 7.68794073e-02 7.68680472e-02 + 7.68566921e-02 7.68453420e-02 7.68339970e-02 7.68226570e-02 7.68113221e-02 + 7.67999921e-02 7.67886672e-02 7.67773472e-02 7.67660323e-02 7.67547224e-02 + 7.67434174e-02 7.67321175e-02 7.67208226e-02 7.67095326e-02 7.66982476e-02 + 7.66869676e-02 7.66756926e-02 7.66644225e-02 7.66531574e-02 7.66418973e-02 + 7.66306422e-02 7.66193920e-02 7.66081467e-02 7.65969064e-02 7.65856711e-02 + 7.65744407e-02 7.65632152e-02 7.65519946e-02 7.65407790e-02 7.65295684e-02 + 7.65183626e-02 7.65071618e-02 7.64959659e-02 7.64847749e-02 7.64735888e-02 + 7.64624076e-02 7.64512313e-02 7.64400599e-02 7.64288935e-02 7.64177319e-02 + 7.64065752e-02 7.63954233e-02 7.63842764e-02 7.63731343e-02 7.63619972e-02 + 7.63508648e-02 7.63397374e-02 7.63286148e-02 7.63174971e-02 7.63063842e-02 + 7.62952762e-02 7.62841730e-02 7.62730747e-02 7.62619813e-02 7.62508926e-02 + 7.62398088e-02 7.62287298e-02 7.62176557e-02 7.62065864e-02 7.61955219e-02 + 7.61844622e-02 7.61734074e-02 7.61623573e-02 7.61513121e-02 7.61402716e-02 + 7.61292360e-02 7.61182052e-02 7.61071791e-02 7.60961579e-02 7.60851414e-02 + 7.60741297e-02 7.60631228e-02 7.60521207e-02 7.60411233e-02 7.60301307e-02 + 7.60191429e-02 7.60081598e-02 7.59971815e-02 7.59862080e-02 7.59752392e-02 + 7.59642751e-02 7.59533158e-02 7.59423613e-02 7.59314115e-02 7.59204664e-02 + 7.59095260e-02 7.58985904e-02 7.58876595e-02 7.58767333e-02 7.58658119e-02 + 7.58548951e-02 7.58439831e-02 7.58330758e-02 7.58221731e-02 7.58112752e-02 + 7.58003820e-02 7.57894935e-02 7.57786096e-02 7.57677305e-02 7.57568560e-02 + 7.57459862e-02 7.57351211e-02 7.57242607e-02 7.57134049e-02 7.57025538e-02 + 7.56917074e-02 7.56808656e-02 7.56700285e-02 7.56591961e-02 7.56483683e-02 + 7.56375451e-02 7.56267266e-02 7.56159127e-02 7.56051035e-02 7.55942989e-02 + 7.55834989e-02 7.55727035e-02 7.55619128e-02 7.55511267e-02 7.55403452e-02 + 7.55295684e-02 7.55187961e-02 7.55080285e-02 7.54972654e-02 7.54865070e-02 + 7.54757531e-02 7.54650039e-02 7.54542592e-02 7.54435192e-02 7.54327837e-02 + 7.54220528e-02 7.54113264e-02 7.54006047e-02 7.53898875e-02 7.53791749e-02 + 7.53684669e-02 7.53577634e-02 7.53470644e-02 7.53363701e-02 7.53256803e-02 + 7.53149950e-02 7.53043143e-02 7.52936381e-02 7.52829665e-02 7.52722994e-02 + 7.52616368e-02 7.52509787e-02 7.52403252e-02 7.52296762e-02 7.52190318e-02 + 7.52083918e-02 7.51977564e-02 7.51871255e-02 7.51764990e-02 7.51658771e-02 + 7.51552597e-02 7.51446468e-02 7.51340384e-02 7.51234344e-02 7.51128350e-02 + 7.51022400e-02 7.50916496e-02 7.50810636e-02 7.50704821e-02 7.50599050e-02 + 7.50493324e-02 7.50387643e-02 7.50282007e-02 7.50176415e-02 7.50070868e-02 + 7.49965365e-02 7.49859907e-02 7.49754493e-02 7.49649123e-02 7.49543799e-02 + 7.49438518e-02 7.49333282e-02 7.49228090e-02 7.49122942e-02 7.49017839e-02 + 7.48912780e-02 7.48807765e-02 7.48702794e-02 7.48597868e-02 7.48492985e-02 + 7.48388147e-02 7.48283352e-02 7.48178602e-02 7.48073895e-02 7.47969233e-02 + 7.47864614e-02 7.47760040e-02 7.47655509e-02 7.47551022e-02 7.47446579e-02 + 7.47342179e-02 7.47237824e-02 7.47133512e-02 7.47029243e-02 7.46925019e-02 + 7.46820838e-02 7.46716700e-02 7.46612606e-02 7.46508556e-02 7.46404549e-02 + 7.46300586e-02 7.46196666e-02 7.46092789e-02 7.45988956e-02 7.45885166e-02 + 7.45781419e-02 7.45677716e-02 7.45574056e-02 7.45470439e-02 7.45366865e-02 + 7.45263335e-02 7.45159847e-02 7.45056403e-02 7.44953002e-02 7.44849644e-02 + 7.44746329e-02 7.44643056e-02 7.44539827e-02 7.44436641e-02 7.44333497e-02 + 7.44230397e-02 7.44127339e-02 7.44024324e-02 7.43921352e-02 7.43818423e-02 + 7.43715536e-02 7.43612692e-02 7.43509890e-02 7.43407132e-02 7.43304416e-02 + 7.43201742e-02 7.43099111e-02 7.42996522e-02 7.42893976e-02 7.42791473e-02 + 7.42689011e-02 7.42586593e-02 7.42484216e-02 7.42381882e-02 7.42279590e-02 + 7.42177341e-02 7.42075133e-02 7.41972968e-02 7.41870845e-02 7.41768765e-02 + 7.41666726e-02 7.41564729e-02 7.41462775e-02 7.41360863e-02 7.41258992e-02 + 7.41157164e-02 7.41055377e-02 7.40953633e-02 7.40851930e-02 7.40750269e-02 + 7.40648650e-02 7.40547073e-02 7.40445538e-02 7.40344044e-02 7.40242592e-02 + 7.40141182e-02 7.40039814e-02 7.39938487e-02 7.39837202e-02 7.39735958e-02 + 7.39634756e-02 7.39533595e-02 7.39432476e-02 7.39331398e-02 7.39230362e-02 + 7.39129367e-02 7.39028414e-02 7.38927502e-02 7.38826631e-02 7.38725802e-02 + 7.38625014e-02 7.38524267e-02 7.38423561e-02 7.38322896e-02 7.38222273e-02 + 7.38121691e-02 7.38021150e-02 7.37920650e-02 7.37820191e-02 7.37719773e-02 + 7.37619396e-02 7.37519060e-02 7.37418765e-02 7.37318510e-02 7.37218297e-02 + 7.37118125e-02 7.37017993e-02 7.36917902e-02 7.36817852e-02 7.36717843e-02 + 7.36617874e-02 7.36517946e-02 7.36418059e-02 7.36318212e-02 7.36218406e-02 + 7.36118641e-02 7.36018916e-02 7.35919231e-02 7.35819587e-02 7.35719984e-02 + 7.35620421e-02 7.35520898e-02 7.35421416e-02 7.35321974e-02 7.35222572e-02 + 7.35123211e-02 7.35023890e-02 7.34924610e-02 7.34825369e-02 7.34726169e-02 + 7.34627009e-02 7.34527889e-02 7.34428809e-02 7.34329769e-02 7.34230769e-02 + 7.34131809e-02 7.34032890e-02 7.33934010e-02 7.33835170e-02 7.33736370e-02 + 7.33637610e-02 7.33538890e-02 7.33440210e-02 7.33341569e-02 7.33242969e-02 + 7.33144408e-02 7.33045886e-02 7.32947405e-02 7.32848963e-02 7.32750561e-02 + 7.32652199e-02 7.32553876e-02 7.32455592e-02 7.32357348e-02 7.32259144e-02 + 7.32160979e-02 7.32062854e-02 7.31964768e-02 7.31866722e-02 7.31768715e-02 + 7.31670747e-02 7.31572819e-02 7.31474930e-02 7.31377080e-02 7.31279269e-02 + 7.31181498e-02 7.31083766e-02 7.30986073e-02 7.30888419e-02 7.30790805e-02 + 7.30693229e-02 7.30595693e-02 7.30498195e-02 7.30400737e-02 7.30303318e-02 + 7.30205937e-02 7.30108596e-02 7.30011293e-02 7.29914030e-02 7.29816805e-02 + 7.29719619e-02 7.29622472e-02 7.29525364e-02 7.29428294e-02 7.29331263e-02 + 7.29234271e-02 7.29137318e-02 7.29040403e-02 7.28943527e-02 7.28846689e-02 + 7.28749890e-02 7.28653130e-02 7.28556408e-02 7.28459725e-02 7.28363080e-02 + 7.28266473e-02 7.28169905e-02 7.28073376e-02 7.27976885e-02 7.27880432e-02 + 7.27784017e-02 7.27687641e-02 7.27591303e-02 7.27495003e-02 7.27398742e-02 + 7.27302519e-02 7.27206334e-02 7.27110187e-02 7.27014078e-02 7.26918007e-02 + 7.26821975e-02 7.26725980e-02 7.26630023e-02 7.26534105e-02 7.26438224e-02 + 7.26342382e-02 7.26246577e-02 7.26150810e-02 7.26055081e-02 7.25959390e-02 + 7.25863737e-02 7.25768121e-02 7.25672544e-02 7.25577004e-02 7.25481502e-02 + 7.25386037e-02 7.25290610e-02 7.25195221e-02 7.25099870e-02 7.25004556e-02 + 7.24909279e-02 7.24814040e-02 7.24718839e-02 7.24623675e-02 7.24528549e-02 + 7.24433460e-02 7.24338409e-02 7.24243395e-02 7.24148418e-02 7.24053479e-02 + 7.23958577e-02 7.23863712e-02 7.23768885e-02 7.23674095e-02 7.23579342e-02 + 7.23484626e-02 7.23389948e-02 7.23295307e-02 7.23200702e-02 7.23106135e-02 + 7.23011605e-02 7.22917112e-02 7.22822656e-02 7.22728238e-02 7.22633856e-02 + 7.22539511e-02 7.22445203e-02 7.22350932e-02 7.22256698e-02 7.22162500e-02 + 7.22068340e-02 7.21974216e-02 7.21880130e-02 7.21786080e-02 7.21692066e-02 + 7.21598090e-02 7.21504150e-02 7.21410247e-02 7.21316380e-02 7.21222550e-02 + 7.21128757e-02 7.21035000e-02 7.20941280e-02 7.20847596e-02 7.20753949e-02 + 7.20660339e-02 7.20566765e-02 7.20473227e-02 7.20379726e-02 7.20286261e-02 + 7.20192832e-02 7.20099440e-02 7.20006084e-02 7.19912765e-02 7.19819481e-02 + 7.19726234e-02 7.19633024e-02 7.19539849e-02 7.19446711e-02 7.19353608e-02 + 7.19260542e-02 7.19167512e-02 7.19074518e-02 7.18981560e-02 7.18888639e-02 + 7.18795753e-02 7.18702903e-02 7.18610089e-02 7.18517311e-02 7.18424569e-02 + 7.18331863e-02 7.18239193e-02 7.18146559e-02 7.18053960e-02 7.17961398e-02 + 7.17868871e-02 7.17776380e-02 7.17683924e-02 7.17591505e-02 7.17499121e-02 + 7.17406772e-02 7.17314460e-02 7.17222183e-02 7.17129941e-02 7.17037735e-02 + 7.16945565e-02 7.16853430e-02 7.16761331e-02 7.16669267e-02 7.16577239e-02 + 7.16485246e-02 7.16393289e-02 7.16301367e-02 7.16209480e-02 7.16117629e-02 + 7.16025813e-02 7.15934032e-02 7.15842287e-02 7.15750577e-02 7.15658902e-02 + 7.15567262e-02 7.15475658e-02 7.15384089e-02 7.15292555e-02 7.15201056e-02 + 7.15109592e-02 7.15018163e-02 7.14926769e-02 7.14835410e-02 7.14744087e-02 + 7.14652798e-02 7.14561544e-02 7.14470325e-02 7.14379142e-02 7.14287993e-02 + 7.14196878e-02 7.14105799e-02 7.14014755e-02 7.13923745e-02 7.13832770e-02 + 7.13741830e-02 7.13650925e-02 7.13560055e-02 7.13469219e-02 7.13378418e-02 + 7.13287651e-02 7.13196919e-02 7.13106222e-02 7.13015559e-02 7.12924931e-02 + 7.12834338e-02 7.12743779e-02 7.12653254e-02 7.12562764e-02 7.12472309e-02 + 7.12381888e-02 7.12291501e-02 7.12201149e-02 7.12110831e-02 7.12020547e-02 + 7.11930298e-02 7.11840083e-02 7.11749902e-02 7.11659756e-02 7.11569644e-02 + 7.11479566e-02 7.11389522e-02 7.11299512e-02 7.11209537e-02 7.11119596e-02 + 7.11029689e-02 7.10939816e-02 7.10849977e-02 7.10760172e-02 7.10670401e-02 + 7.10580664e-02 7.10490961e-02 7.10401292e-02 7.10311657e-02 7.10222056e-02 + 7.10132489e-02 7.10042956e-02 7.09953456e-02 7.09863990e-02 7.09774559e-02 + 7.09685161e-02 7.09595796e-02 7.09506466e-02 7.09417169e-02 7.09327906e-02 + 7.09238677e-02 7.09149481e-02 7.09060319e-02 7.08971191e-02 7.08882096e-02 + 7.08793035e-02 7.08704007e-02 7.08615013e-02 7.08526052e-02 7.08437125e-02 + 7.08348231e-02 7.08259371e-02 7.08170544e-02 7.08081751e-02 7.07992991e-02 + 7.07904264e-02 7.07815571e-02 7.07726911e-02 7.07638285e-02 7.07549691e-02 + 7.07461131e-02 7.07372604e-02 7.07284111e-02 7.07195650e-02 7.07107223e-02 + 7.07018829e-02 7.06930468e-02 7.06842141e-02 7.06753846e-02 7.06665584e-02 + 7.06577356e-02 7.06489160e-02 7.06400998e-02 7.06312868e-02 7.06224772e-02 + 7.06136708e-02 7.06048678e-02 7.05960680e-02 7.05872715e-02 7.05784783e-02 + 7.05696884e-02 7.05609018e-02 7.05521184e-02 7.05433384e-02 7.05345616e-02 diff --git a/potentials/FeCH_BOP_II.poly b/potentials/FeCH_BOP_II.poly new file mode 100644 index 0000000000000000000000000000000000000000..ed0b771887b6ffe22e406dabefb3bf7adbf99043 --- /dev/null +++ b/potentials/FeCH_BOP_II.poly @@ -0,0 +1,33618 @@ +# DATE 2018-12-18 CONTRIBUTOR: X. W. Zhou, xzhou@sandia.gov CITATION: X. W. Zhou, +# M. E. Foster, J. A. Ronevich, and C. W San Marchi, J. Comp. Chem., 41, 1299 (2020). +# M. Muller, P. Erhart, and K. Albe, J. Phys.: Condens. Matter, 19, 326220 (2007). +# D. W. Brenner, Phys. Rev. B, 42, 9458 (1990). N. Juslin et al, J. Appl. Phys., +# 98, 123520 (2005). P. Kuopanportti et al, Comp. Mater. Sci., 111, 525 (2016). +# K. O. E. Hendriksson, C. Bjorkas, and K. Nordlund, J. Phys.: Condens. Matter, +# 25, 445401 (2013). + 3 3 + 26. 5.58500000e+01 Fe + 6. 1.20100000e+01 C + 1. 1.01000000e+00 H + 2000 2000 4000 2.00000000e+02 + 3.35000000e+00 1.00000000e+00 + 2.00000000e+00 1.00000000e+00 + 1.70000000e+00 1.00000000e+00 + 2.80000000e+00 1.00000000e+00 + 2.69660000e+00 1.00000000e+00 + 1.80000000e+00 1.00000000e+00 + 9.05461601e+06 5.36400429e+06 2.63461103e+06 1.72573643e+06 1.27196396e+06 + 1.00021130e+06 8.19451798e+05 6.90674672e+05 5.94375068e+05 5.19717409e+05 + 4.60200739e+05 4.11688423e+05 3.71423001e+05 3.37495720e+05 3.08543417e+05 + 2.83566642e+05 2.61815992e+05 2.42718557e+05 2.25828890e+05 2.10795455e+05 + 1.97337145e+05 1.85226505e+05 1.74277539e+05 1.64336688e+05 1.55276068e+05 + 1.46988336e+05 1.39382733e+05 1.32382007e+05 1.25920006e+05 1.19939754e+05 + 1.14391924e+05 1.09233599e+05 1.04427270e+05 9.99400149e+04 9.57428218e+04 + 9.18100283e+04 8.81188552e+04 8.46490156e+04 8.13823855e+04 7.83027252e+04 + 7.53954428e+04 7.26473922e+04 7.00467000e+04 6.75826165e+04 6.52453872e+04 + 6.30261416e+04 6.09167962e+04 5.89099701e+04 5.69989113e+04 5.51774319e+04 + 5.34398509e+04 5.17809444e+04 5.01959007e+04 4.86802814e+04 4.72299860e+04 + 4.58412213e+04 4.45104728e+04 4.32344809e+04 4.20102176e+04 4.08348673e+04 + 3.97058085e+04 3.86205977e+04 3.75769545e+04 3.65727491e+04 3.56059895e+04 + 3.46748114e+04 3.37774676e+04 3.29123197e+04 3.20778299e+04 3.12725529e+04 + 3.04951300e+04 2.97442821e+04 2.90188046e+04 2.83175618e+04 2.76394824e+04 + 2.69835548e+04 2.63488233e+04 2.57343842e+04 2.51393827e+04 2.45630092e+04 + 2.40044967e+04 2.34631182e+04 2.29381839e+04 2.24290391e+04 2.19350619e+04 + 2.14556614e+04 2.09902755e+04 2.05383695e+04 2.00994344e+04 1.96729855e+04 + 1.92585606e+04 1.88557194e+04 1.84640414e+04 1.80831257e+04 1.77125894e+04 + 1.73520664e+04 1.70012072e+04 1.66596774e+04 1.63271571e+04 1.60033402e+04 + 1.56879336e+04 1.53806565e+04 1.50812401e+04 1.47894263e+04 1.45049679e+04 + 1.42276276e+04 1.39571778e+04 1.36933997e+04 1.34360835e+04 1.31850274e+04 + 1.29400376e+04 1.27009275e+04 1.24675180e+04 1.22396366e+04 1.20171172e+04 + 1.17998000e+04 1.15875312e+04 1.13801624e+04 1.11775509e+04 1.09795589e+04 + 1.07860536e+04 1.05969071e+04 1.04119957e+04 1.02312003e+04 1.00544059e+04 + 9.88150120e+03 9.71237907e+03 9.54693582e+03 9.38507131e+03 9.22668873e+03 + 9.07169452e+03 8.91999818e+03 8.77151221e+03 8.62615193e+03 8.48383542e+03 + 8.34448337e+03 8.20801901e+03 8.07436802e+03 7.94345839e+03 7.81522038e+03 + 7.68958642e+03 7.56649102e+03 7.44587069e+03 7.32766388e+03 7.21181093e+03 + 7.09825393e+03 6.98693673e+03 6.87780486e+03 6.77080544e+03 6.66588714e+03 + 6.56300015e+03 6.46209609e+03 6.36312798e+03 6.26605019e+03 6.17081839e+03 + 6.07738950e+03 5.98572168e+03 5.89577424e+03 5.80750762e+03 5.72088339e+03 + 5.63586415e+03 5.55241353e+03 5.47049616e+03 5.39007764e+03 5.31112448e+03 + 5.23360410e+03 5.15748479e+03 5.08273568e+03 5.00932671e+03 4.93722863e+03 + 4.86641295e+03 4.79685190e+03 4.72851846e+03 4.66138630e+03 4.59542975e+03 + 4.53062382e+03 4.46694413e+03 4.40436693e+03 4.34286908e+03 4.28242800e+03 + 4.22302168e+03 4.16462866e+03 4.10722802e+03 4.05079934e+03 3.99532269e+03 + 3.94077867e+03 3.88714830e+03 3.83441308e+03 3.78255498e+03 3.73155636e+03 + 3.68140002e+03 3.63206918e+03 3.58354745e+03 3.53581881e+03 3.48886764e+03 + 3.44267867e+03 3.39723699e+03 3.35252804e+03 3.30853758e+03 3.26525173e+03 + 3.22265689e+03 3.18073979e+03 3.13948747e+03 3.09888724e+03 3.05892672e+03 + 3.01959379e+03 2.98087661e+03 2.94276360e+03 2.90524344e+03 2.86830507e+03 + 2.83193765e+03 2.79613060e+03 2.76087356e+03 2.72615640e+03 2.69196921e+03 + 2.65830228e+03 2.62514615e+03 2.59249151e+03 2.56032930e+03 2.52865060e+03 + 2.49744673e+03 2.46670917e+03 2.43642957e+03 2.40659978e+03 2.37721180e+03 + 2.34825782e+03 2.31973016e+03 2.29162133e+03 2.26392397e+03 2.23663090e+03 + 2.20973506e+03 2.18322956e+03 2.15710762e+03 2.13136263e+03 2.10598809e+03 + 2.08097764e+03 2.05632506e+03 2.03202423e+03 2.00806917e+03 1.98445402e+03 + 1.96117302e+03 1.93822056e+03 1.91559109e+03 1.89327921e+03 1.87127961e+03 + 1.84958709e+03 1.82819654e+03 1.80710296e+03 1.78630146e+03 1.76578720e+03 + 1.74555549e+03 1.72560169e+03 1.70592126e+03 1.68650975e+03 1.66736279e+03 + 1.64847611e+03 1.62984549e+03 1.61146682e+03 1.59333605e+03 1.57544921e+03 + 1.55780240e+03 1.54039180e+03 1.52321367e+03 1.50626431e+03 1.48954012e+03 + 1.47303755e+03 1.45675312e+03 1.44068341e+03 1.42482506e+03 1.40917478e+03 + 1.39372935e+03 1.37848557e+03 1.36344035e+03 1.34859060e+03 1.33393334e+03 + 1.31946560e+03 1.30518449e+03 1.29108716e+03 1.27717082e+03 1.26343271e+03 + 1.24987014e+03 1.23648046e+03 1.22326106e+03 1.21020939e+03 1.19732293e+03 + 1.18459921e+03 1.17203582e+03 1.15963035e+03 1.14738048e+03 1.13528390e+03 + 1.12333834e+03 1.11154159e+03 1.09989146e+03 1.08838579e+03 1.07702249e+03 + 1.06579947e+03 1.05471469e+03 1.04376616e+03 1.03295189e+03 1.02226995e+03 + 1.01171844e+03 1.00129547e+03 9.90999221e+02 9.80827866e+02 9.70779627e+02 + 9.60852753e+02 9.51045522e+02 9.41356240e+02 9.31783240e+02 9.22324884e+02 + 9.12979560e+02 9.03745682e+02 8.94621693e+02 8.85606056e+02 8.76697264e+02 + 8.67893832e+02 8.59194298e+02 8.50597227e+02 8.42101203e+02 8.33704837e+02 + 8.25406759e+02 8.17205622e+02 8.09100100e+02 8.01088890e+02 7.93170707e+02 + 7.85344289e+02 7.77608391e+02 7.69961790e+02 7.62403281e+02 7.54931679e+02 + 7.47545817e+02 7.40244545e+02 7.33026733e+02 7.25891267e+02 7.18837051e+02 + 7.11863007e+02 7.04968070e+02 6.98151197e+02 6.91411355e+02 6.84747531e+02 + 6.78158727e+02 6.71643958e+02 6.65202257e+02 6.58832668e+02 6.52534254e+02 + 6.46306089e+02 6.40147261e+02 6.34056873e+02 6.28034042e+02 6.22077896e+02 + 6.16187577e+02 6.10362242e+02 6.04601056e+02 5.98903202e+02 5.93267870e+02 + 5.87694264e+02 5.82181602e+02 5.76729110e+02 5.71336026e+02 5.66001601e+02 + 5.60725097e+02 5.55505783e+02 5.50342944e+02 5.45235871e+02 5.40183867e+02 + 5.35186247e+02 5.30242332e+02 5.25351455e+02 5.20512960e+02 5.15726197e+02 + 5.10990527e+02 5.06305322e+02 5.01669960e+02 4.97083829e+02 4.92546326e+02 + 4.88056856e+02 4.83614833e+02 4.79219679e+02 4.74870824e+02 4.70567705e+02 + 4.66309770e+02 4.62096471e+02 4.57927271e+02 4.53801637e+02 4.49719046e+02 + 4.45678982e+02 4.41680935e+02 4.37724403e+02 4.33808890e+02 4.29933908e+02 + 4.26098976e+02 4.22303617e+02 4.18547364e+02 4.14829753e+02 4.11150329e+02 + 4.07508641e+02 4.03904247e+02 4.00336708e+02 3.96805592e+02 3.93310474e+02 + 3.89850933e+02 3.86426555e+02 3.83036929e+02 3.79681654e+02 3.76360330e+02 + 3.73072565e+02 3.69817971e+02 3.66596165e+02 3.63406770e+02 3.60249413e+02 + 3.57123727e+02 3.54029350e+02 3.50965922e+02 3.47933091e+02 3.44930508e+02 + 3.41957830e+02 3.39014715e+02 3.36100830e+02 3.33215844e+02 3.30359429e+02 + 3.27531263e+02 3.24731029e+02 3.21958412e+02 3.19213102e+02 3.16494793e+02 + 3.13803184e+02 3.11137975e+02 3.08498872e+02 3.05885585e+02 3.03297826e+02 + 3.00735313e+02 2.98197764e+02 2.95684905e+02 2.93196463e+02 2.90732167e+02 + 2.88291753e+02 2.85874957e+02 2.83481521e+02 2.81111187e+02 2.78763704e+02 + 2.76438822e+02 2.74136293e+02 2.71855875e+02 2.69597327e+02 2.67360411e+02 + 2.65144894e+02 2.62950542e+02 2.60777127e+02 2.58624423e+02 2.56492207e+02 + 2.54380259e+02 2.52288359e+02 2.50216294e+02 2.48163850e+02 2.46130818e+02 + 2.44116990e+02 2.42122161e+02 2.40146129e+02 2.38188694e+02 2.36249657e+02 + 2.34328824e+02 2.32426002e+02 2.30541001e+02 2.28673631e+02 2.26823707e+02 + 2.24991045e+02 2.23175464e+02 2.21376784e+02 2.19594827e+02 2.17829418e+02 + 2.16080385e+02 2.14347555e+02 2.12630760e+02 2.10929833e+02 2.09244609e+02 + 2.07574923e+02 2.05920616e+02 2.04281526e+02 2.02657498e+02 2.01048375e+02 + 1.99454003e+02 1.97874230e+02 1.96308905e+02 1.94757881e+02 1.93221009e+02 + 1.91698145e+02 1.90189145e+02 1.88693868e+02 1.87212173e+02 1.85743920e+02 + 1.84288974e+02 1.82847199e+02 1.81418460e+02 1.80002626e+02 1.78599565e+02 + 1.77209147e+02 1.75831246e+02 1.74465733e+02 1.73112485e+02 1.71771377e+02 + 1.70442287e+02 1.69125095e+02 1.67819680e+02 1.66525924e+02 1.65243711e+02 + 1.63972925e+02 1.62713451e+02 1.61465177e+02 1.60227990e+02 1.59001781e+02 + 1.57786440e+02 1.56581858e+02 1.55387929e+02 1.54204547e+02 1.53031608e+02 + 1.51869008e+02 1.50716645e+02 1.49574417e+02 1.48442226e+02 1.47319971e+02 + 1.46207555e+02 1.45104882e+02 1.44011854e+02 1.42928379e+02 1.41854362e+02 + 1.40789710e+02 1.39734332e+02 1.38688137e+02 1.37651036e+02 1.36622940e+02 + 1.35603760e+02 1.34593412e+02 1.33591807e+02 1.32598863e+02 1.31614494e+02 + 1.30638617e+02 1.29671151e+02 1.28712014e+02 1.27761125e+02 1.26818405e+02 + 1.25883774e+02 1.24957157e+02 1.24038474e+02 1.23127650e+02 1.22224609e+02 + 1.21329277e+02 1.20441579e+02 1.19561443e+02 1.18688797e+02 1.17823568e+02 + 1.16965686e+02 1.16115081e+02 1.15271684e+02 1.14435425e+02 1.13606238e+02 + 1.12784054e+02 1.11968807e+02 1.11160433e+02 1.10358864e+02 1.09564038e+02 + 1.08775890e+02 1.07994357e+02 1.07219377e+02 1.06450888e+02 1.05688829e+02 + 1.04933139e+02 1.04183758e+02 1.03440628e+02 1.02703689e+02 1.01972884e+02 + 1.01248155e+02 1.00529444e+02 9.98166971e+01 9.91098568e+01 9.84088685e+01 + 9.77136777e+01 9.70242302e+01 9.63404726e+01 9.56623521e+01 9.49898161e+01 + 9.43228130e+01 9.36612913e+01 9.30052002e+01 9.23544895e+01 9.17091095e+01 + 9.10690107e+01 9.04341445e+01 8.98044625e+01 8.91799170e+01 8.85604607e+01 + 8.79460467e+01 8.73366286e+01 8.67321606e+01 8.61325973e+01 8.55378935e+01 + 8.49480049e+01 8.43628874e+01 8.37824972e+01 8.32067912e+01 8.26357266e+01 + 8.20692610e+01 8.15073526e+01 8.09499598e+01 8.03970415e+01 7.98485571e+01 + 7.93044662e+01 7.87647290e+01 7.82293059e+01 7.76981580e+01 7.71712464e+01 + 7.66485329e+01 7.61299794e+01 7.56155485e+01 7.51052029e+01 7.45989058e+01 + 7.40966207e+01 7.35983115e+01 7.31039424e+01 7.26134780e+01 7.21268833e+01 + 7.16441236e+01 7.11651643e+01 7.06899717e+01 7.02185118e+01 6.97507513e+01 + 6.92866573e+01 6.88261968e+01 6.83693376e+01 6.79160476e+01 6.74662949e+01 + 6.70200480e+01 6.65772759e+01 6.61379476e+01 6.57020326e+01 6.52695006e+01 + 6.48403216e+01 6.44144660e+01 6.39919043e+01 6.35726074e+01 6.31565465e+01 + 6.27436931e+01 6.23340188e+01 6.19274956e+01 6.15240959e+01 6.11237920e+01 + 6.07265569e+01 6.03323636e+01 5.99411853e+01 5.95529958e+01 5.91677686e+01 + 5.87854781e+01 5.84060984e+01 5.80296042e+01 5.76559702e+01 5.72851715e+01 + 5.69171834e+01 5.65519814e+01 5.61895413e+01 5.58298391e+01 5.54728509e+01 + 5.51185533e+01 5.47669228e+01 5.44179365e+01 5.40715713e+01 5.37278046e+01 + 5.33866140e+01 5.30479772e+01 5.27118722e+01 5.23782772e+01 5.20471704e+01 + 5.17185306e+01 5.13923365e+01 5.10685671e+01 5.07472016e+01 5.04282193e+01 + 5.01115998e+01 4.97973230e+01 4.94853687e+01 4.91757171e+01 4.88683486e+01 + 4.85632436e+01 4.82603829e+01 4.79597473e+01 4.76613179e+01 4.73650760e+01 + 4.70710029e+01 4.67790803e+01 4.64892899e+01 4.62016137e+01 4.59160336e+01 + 4.56325321e+01 4.53510916e+01 4.50716945e+01 4.47943238e+01 4.45189623e+01 + 4.42455931e+01 4.39741994e+01 4.37047647e+01 4.34372724e+01 4.31717063e+01 + 4.29080503e+01 4.26462882e+01 4.23864043e+01 4.21283829e+01 4.18722084e+01 + 4.16178654e+01 4.13653386e+01 4.11146129e+01 4.08656732e+01 4.06185049e+01 + 4.03730930e+01 4.01294231e+01 3.98874807e+01 3.96472515e+01 3.94087213e+01 + 3.91718761e+01 3.89367019e+01 3.87031849e+01 3.84713115e+01 3.82410682e+01 + 3.80124414e+01 3.77854180e+01 3.75599847e+01 3.73361285e+01 3.71138365e+01 + 3.68930959e+01 3.66738939e+01 3.64562179e+01 3.62400556e+01 3.60253946e+01 + 3.58122225e+01 3.56005273e+01 3.53902971e+01 3.51815197e+01 3.49741836e+01 + 3.47682769e+01 3.45637881e+01 3.43607057e+01 3.41590183e+01 3.39587147e+01 + 3.37597837e+01 3.35622142e+01 3.33659952e+01 3.31711159e+01 3.29775655e+01 + 3.27853334e+01 3.25944089e+01 3.24047816e+01 3.22164410e+01 3.20293769e+01 + 3.18435792e+01 3.16590376e+01 3.14757421e+01 3.12936829e+01 3.11128501e+01 + 3.09332339e+01 3.07548247e+01 3.05776129e+01 3.04015890e+01 3.02267437e+01 + 3.00530675e+01 2.98805512e+01 2.97091858e+01 2.95389621e+01 2.93698711e+01 + 2.92019039e+01 2.90350517e+01 2.88693057e+01 2.87046574e+01 2.85410979e+01 + 2.83786189e+01 2.82172119e+01 2.80568686e+01 2.78975805e+01 2.77393396e+01 + 2.75821376e+01 2.74259665e+01 2.72708183e+01 2.71166850e+01 2.69635588e+01 + 2.68114319e+01 2.66602966e+01 2.65101451e+01 2.63609700e+01 2.62127637e+01 + 2.60655187e+01 2.59192276e+01 2.57738831e+01 2.56294781e+01 2.54860051e+01 + 2.53434572e+01 2.52018273e+01 2.50611083e+01 2.49212933e+01 2.47823754e+01 + 2.46443478e+01 2.45072037e+01 2.43709365e+01 2.42355394e+01 2.41010058e+01 + 2.39673294e+01 2.38345034e+01 2.37025216e+01 2.35713776e+01 2.34410651e+01 + 2.33115778e+01 2.31829095e+01 2.30550541e+01 2.29280055e+01 2.28017576e+01 + 2.26763044e+01 2.25516401e+01 2.24277587e+01 2.23046545e+01 2.21823215e+01 + 2.20607542e+01 2.19399467e+01 2.18198935e+01 2.17005890e+01 2.15820277e+01 + 2.14642040e+01 2.13471125e+01 2.12307479e+01 2.11151047e+01 2.10001777e+01 + 2.08859616e+01 2.07724512e+01 2.06596413e+01 2.05475268e+01 2.04361027e+01 + 2.03253638e+01 2.02153052e+01 2.01059220e+01 1.99972092e+01 1.98891619e+01 + 1.97817754e+01 1.96750448e+01 1.95689655e+01 1.94635326e+01 1.93587416e+01 + 1.92545877e+01 1.91510665e+01 1.90481733e+01 1.89459038e+01 1.88442533e+01 + 1.87432174e+01 1.86427918e+01 1.85429721e+01 1.84437540e+01 1.83451332e+01 + 1.82471054e+01 1.81496665e+01 1.80528122e+01 1.79565384e+01 1.78608409e+01 + 1.77657158e+01 1.76711590e+01 1.75771664e+01 1.74837341e+01 1.73908582e+01 + 1.72985347e+01 1.72067597e+01 1.71155295e+01 1.70248401e+01 1.69346879e+01 + 1.68450691e+01 1.67559799e+01 1.66674167e+01 1.65793758e+01 1.64918535e+01 + 1.64048464e+01 1.63183507e+01 1.62323630e+01 1.61468798e+01 1.60618976e+01 + 1.59774129e+01 1.58934223e+01 1.58099224e+01 1.57269098e+01 1.56443812e+01 + 1.55623334e+01 1.54807629e+01 1.53996665e+01 1.53190411e+01 1.52388833e+01 + 1.51591901e+01 1.50799582e+01 1.50011845e+01 1.49228660e+01 1.48449995e+01 + 1.47675820e+01 1.46906104e+01 1.46140818e+01 1.45379931e+01 1.44623414e+01 + 1.43871239e+01 1.43123374e+01 1.42379793e+01 1.41640465e+01 1.40905364e+01 + 1.40174459e+01 1.39447724e+01 1.38725131e+01 1.38006652e+01 1.37292261e+01 + 1.36581928e+01 1.35875629e+01 1.35173336e+01 1.34475023e+01 1.33780664e+01 + 1.33090232e+01 1.32403701e+01 1.31721047e+01 1.31042244e+01 1.30367265e+01 + 1.29696088e+01 1.29028685e+01 1.28365034e+01 1.27705109e+01 1.27048887e+01 + 1.26396342e+01 1.25747452e+01 1.25102192e+01 1.24460540e+01 1.23822471e+01 + 1.23187962e+01 1.22556992e+01 1.21929536e+01 1.21305572e+01 1.20685078e+01 + 1.20068031e+01 1.19454410e+01 1.18844192e+01 1.18237356e+01 1.17633880e+01 + 1.17033742e+01 1.16436922e+01 1.15843398e+01 1.15253150e+01 1.14666156e+01 + 1.14082396e+01 1.13501849e+01 1.12924496e+01 1.12350315e+01 1.11779288e+01 + 1.11211393e+01 1.10646612e+01 1.10084925e+01 1.09526312e+01 1.08970754e+01 + 1.08418233e+01 1.07868728e+01 1.07322221e+01 1.06778695e+01 1.06238129e+01 + 1.05700505e+01 1.05165806e+01 1.04634013e+01 1.04105108e+01 1.03579073e+01 + 1.03055891e+01 1.02535544e+01 1.02018014e+01 1.01503283e+01 1.00991336e+01 + 1.00482155e+01 9.99757219e+00 9.94720209e+00 9.89710351e+00 9.84727478e+00 + 9.79771426e+00 9.74842031e+00 9.69939130e+00 9.65062562e+00 9.60212167e+00 + 9.55387786e+00 9.50589262e+00 9.45816438e+00 9.41069157e+00 9.36347267e+00 + 9.31650613e+00 9.26979044e+00 9.22332408e+00 9.17710556e+00 9.13113337e+00 + 9.08540606e+00 9.03992214e+00 8.99468017e+00 8.94967869e+00 8.90491626e+00 + 8.86039147e+00 8.81610289e+00 8.77204912e+00 8.72822876e+00 8.68464043e+00 + 8.64128274e+00 8.59815434e+00 8.55525386e+00 8.51257996e+00 8.47013129e+00 + 8.42790653e+00 8.38590436e+00 8.34412347e+00 8.30256256e+00 8.26122033e+00 + 8.22009551e+00 8.17918681e+00 8.13849297e+00 8.09801274e+00 8.05774487e+00 + 8.01768811e+00 7.97784124e+00 7.93820303e+00 7.89877228e+00 7.85954777e+00 + 7.82052831e+00 7.78171270e+00 7.74309977e+00 7.70468835e+00 7.66647727e+00 + 7.62846537e+00 7.59065151e+00 7.55303453e+00 7.51561332e+00 7.47838674e+00 + 7.44135367e+00 7.40451301e+00 7.36786365e+00 7.33140449e+00 7.29513445e+00 + 7.25905245e+00 7.22315741e+00 7.18744826e+00 7.15192396e+00 7.11658343e+00 + 7.08142564e+00 7.04644956e+00 7.01165414e+00 6.97703837e+00 6.94260122e+00 + 6.90834169e+00 6.87425877e+00 6.84035146e+00 6.80661878e+00 6.77305973e+00 + 6.73967334e+00 6.70645864e+00 6.67341467e+00 6.64054045e+00 6.60783505e+00 + 6.57529751e+00 6.54292690e+00 6.51072227e+00 6.47868271e+00 6.44680729e+00 + 6.41509509e+00 6.38354521e+00 6.35215673e+00 6.32092877e+00 6.28986042e+00 + 6.25895081e+00 6.22819905e+00 6.19760426e+00 6.16716558e+00 6.13688214e+00 + 6.10675309e+00 6.07677756e+00 6.04695472e+00 6.01728371e+00 5.98776371e+00 + 5.95839388e+00 5.92917339e+00 5.90010142e+00 5.87117717e+00 5.84239981e+00 + 5.81376854e+00 5.78528256e+00 5.75694108e+00 5.72874330e+00 5.70068845e+00 + 5.67277573e+00 5.64500437e+00 5.61737361e+00 5.58988267e+00 5.56253080e+00 + 5.53531723e+00 5.50824123e+00 5.48130203e+00 5.45449890e+00 5.42783110e+00 + 5.40129789e+00 5.37489855e+00 5.34863236e+00 5.32249859e+00 5.29649653e+00 + 5.27062546e+00 5.24488469e+00 5.21927350e+00 5.19379121e+00 5.16843711e+00 + 5.14321052e+00 5.11811076e+00 5.09313713e+00 5.06828897e+00 5.04356560e+00 + 5.01896636e+00 4.99449057e+00 4.97013759e+00 4.94590674e+00 4.92179739e+00 + 4.89780888e+00 4.87394056e+00 4.85019180e+00 4.82656195e+00 4.80305039e+00 + 4.77965649e+00 4.75637962e+00 4.73321916e+00 4.71017449e+00 4.68724499e+00 + 4.66443006e+00 4.64172909e+00 4.61914148e+00 4.59666662e+00 4.57430392e+00 + 4.55205278e+00 4.52991263e+00 4.50788286e+00 4.48596291e+00 4.46415218e+00 + 4.44245011e+00 4.42085612e+00 4.39936965e+00 4.37799012e+00 4.35671699e+00 + 4.33554968e+00 4.31448764e+00 4.29353033e+00 4.27267718e+00 4.25192766e+00 + 4.23128123e+00 4.21073734e+00 4.19029546e+00 4.16995505e+00 4.14971559e+00 + 4.12957654e+00 4.10953739e+00 4.08959761e+00 4.06975669e+00 4.05001410e+00 + 4.03036935e+00 4.01082191e+00 3.99137129e+00 3.97201698e+00 3.95275847e+00 + 3.93359529e+00 3.91452691e+00 3.89555287e+00 3.87667266e+00 3.85788581e+00 + 3.83919182e+00 3.82059022e+00 3.80208053e+00 3.78366227e+00 3.76533498e+00 + 3.74709818e+00 3.72895141e+00 3.71089420e+00 3.69292608e+00 3.67504661e+00 + 3.65725533e+00 3.63955177e+00 3.62193549e+00 3.60440604e+00 3.58696298e+00 + 3.56960585e+00 3.55233422e+00 3.53514766e+00 3.51804571e+00 3.50102796e+00 + 3.48409396e+00 3.46724329e+00 3.45047553e+00 3.43379024e+00 3.41718700e+00 + 3.40066541e+00 3.38422503e+00 3.36786545e+00 3.35158627e+00 3.33538707e+00 + 3.31926744e+00 3.30322698e+00 3.28726528e+00 3.27138194e+00 3.25557657e+00 + 3.23984876e+00 3.22419813e+00 3.20862427e+00 3.19312680e+00 3.17770533e+00 + 3.16235948e+00 3.14708885e+00 3.13189308e+00 3.11677177e+00 3.10172455e+00 + 3.08675105e+00 3.07185089e+00 3.05702370e+00 3.04226911e+00 3.02758675e+00 + 3.01297626e+00 2.99843728e+00 2.98396943e+00 2.96957237e+00 2.95524574e+00 + 2.94098917e+00 2.92680232e+00 2.91268483e+00 2.89863636e+00 2.88465656e+00 + 2.87074507e+00 2.85690156e+00 2.84312568e+00 2.82941710e+00 2.81577547e+00 + 2.80220045e+00 2.78869172e+00 2.77524894e+00 2.76187177e+00 2.74855989e+00 + 2.73531297e+00 2.72213068e+00 2.70901271e+00 2.69595871e+00 2.68296839e+00 + 2.67004141e+00 2.65717745e+00 2.64437621e+00 2.63163737e+00 2.61896061e+00 + 2.60634563e+00 2.59379211e+00 2.58129976e+00 2.56886825e+00 2.55649729e+00 + 2.54418658e+00 2.53193581e+00 2.51974468e+00 2.50761290e+00 2.49554018e+00 + 2.48352620e+00 2.47157070e+00 2.45967336e+00 2.44783390e+00 2.43605203e+00 + 2.42432747e+00 2.41265993e+00 2.40104912e+00 2.38949477e+00 2.37799659e+00 + 2.36655430e+00 2.35516763e+00 2.34383629e+00 2.33256002e+00 2.32133853e+00 + 2.31017156e+00 2.29905884e+00 2.28800009e+00 2.27699505e+00 2.26604346e+00 + 2.25514503e+00 2.24429952e+00 2.23350666e+00 2.22276619e+00 2.21207785e+00 + 2.20144138e+00 2.19085652e+00 2.18032302e+00 2.16984062e+00 2.15940907e+00 + 2.14902812e+00 2.13869751e+00 2.12841701e+00 2.11818636e+00 2.10800531e+00 + 2.09787362e+00 2.08779104e+00 2.07775734e+00 2.06777226e+00 2.05783558e+00 + 2.04794705e+00 2.03810643e+00 2.02831349e+00 2.01856799e+00 2.00886969e+00 + 1.99921838e+00 1.98961380e+00 1.98005574e+00 1.97054395e+00 1.96107823e+00 + 1.95165833e+00 1.94228403e+00 1.93295511e+00 1.92367134e+00 1.91443251e+00 + 1.90523838e+00 1.89608874e+00 1.88698338e+00 1.87792206e+00 1.86890459e+00 + 1.85993073e+00 1.85100028e+00 1.84211302e+00 1.83326875e+00 1.82446724e+00 + 1.81570829e+00 1.80699169e+00 1.79831723e+00 1.78968471e+00 1.78109391e+00 + 1.77254464e+00 1.76403669e+00 1.75556986e+00 1.74714394e+00 1.73875873e+00 + 1.73041405e+00 1.72210967e+00 1.71384542e+00 1.70562109e+00 1.69743648e+00 + 1.68929141e+00 1.68118567e+00 1.67311908e+00 1.66509145e+00 1.65710257e+00 + 1.64915227e+00 1.64124035e+00 1.63336663e+00 1.62553091e+00 1.61773302e+00 + 1.60997277e+00 1.60224997e+00 1.59456444e+00 1.58691600e+00 1.57930447e+00 + 1.57172966e+00 1.56419140e+00 1.55668951e+00 1.54922381e+00 1.54179412e+00 + 1.53440027e+00 1.52704208e+00 1.51971938e+00 1.51243200e+00 1.50517976e+00 + 1.49796249e+00 1.49078002e+00 1.48363218e+00 1.47651881e+00 1.46943972e+00 + 1.46239477e+00 1.45538377e+00 1.44840657e+00 1.44146299e+00 1.43455288e+00 + 1.42767608e+00 1.42083241e+00 1.41402172e+00 1.40724385e+00 1.40049863e+00 + 1.39378592e+00 1.38710554e+00 1.38045735e+00 1.37384119e+00 1.36725689e+00 + 1.36070431e+00 1.35418329e+00 1.34769367e+00 1.34123531e+00 1.33480805e+00 + 1.32841174e+00 1.32204623e+00 1.31571137e+00 1.30940702e+00 1.30313301e+00 + 1.29688921e+00 1.29067547e+00 1.28449163e+00 1.27833757e+00 1.27221313e+00 + 1.26611816e+00 1.26005253e+00 1.25401609e+00 1.24800870e+00 1.24203022e+00 + 1.23608051e+00 1.23015943e+00 1.22426684e+00 1.21840259e+00 1.21256657e+00 + 1.20675861e+00 1.20097860e+00 1.19522640e+00 1.18950186e+00 1.18380486e+00 + 1.17813526e+00 1.17249293e+00 1.16687773e+00 1.16128954e+00 1.15572823e+00 + 1.15019366e+00 1.14468570e+00 1.13920423e+00 1.13374911e+00 1.12832022e+00 + 1.12291743e+00 1.11754062e+00 1.11218966e+00 1.10686442e+00 1.10156477e+00 + 1.09629061e+00 1.09104179e+00 1.08581821e+00 1.08061973e+00 1.07544623e+00 + 1.07029760e+00 1.06517371e+00 1.06007445e+00 1.05499969e+00 1.04994931e+00 + 1.04492320e+00 1.03992125e+00 1.03494332e+00 1.02998931e+00 1.02505910e+00 + 1.02015258e+00 1.01526963e+00 1.01041014e+00 1.00557399e+00 1.00076107e+00 + 9.95971269e-01 9.91204474e-01 9.86460574e-01 9.81739459e-01 9.77041017e-01 + 9.72365141e-01 9.67711719e-01 9.63080644e-01 9.58471808e-01 9.53885103e-01 + 9.49320422e-01 9.44777659e-01 9.40256708e-01 9.35757463e-01 9.31279819e-01 + 9.26823673e-01 9.22388920e-01 9.17975456e-01 9.13583180e-01 9.09211987e-01 + 9.04861778e-01 9.00532450e-01 8.96223902e-01 8.91936035e-01 8.87668748e-01 + 8.83421941e-01 8.79195517e-01 8.74989376e-01 8.70803420e-01 8.66637553e-01 + 8.62491677e-01 8.58365695e-01 8.54259512e-01 8.50173032e-01 8.46106160e-01 + 8.42058801e-01 8.38030861e-01 8.34022246e-01 8.30032864e-01 8.26062621e-01 + 8.22111425e-01 8.18179184e-01 8.14265806e-01 8.10371202e-01 8.06495279e-01 + 8.02637948e-01 7.98799120e-01 7.94978705e-01 7.91176614e-01 7.87392758e-01 + 7.83627051e-01 7.79879404e-01 7.76149731e-01 7.72437944e-01 7.68743958e-01 + 7.65067686e-01 7.61409044e-01 7.57767945e-01 7.54144307e-01 7.50538044e-01 + 7.46949073e-01 7.43377311e-01 7.39822674e-01 7.36285080e-01 7.32764446e-01 + 7.29260693e-01 7.25773736e-01 7.22303497e-01 7.18849895e-01 7.15412848e-01 + 7.11992278e-01 7.08588105e-01 7.05200250e-01 7.01828635e-01 6.98473181e-01 + 6.95133811e-01 6.91810447e-01 6.88503011e-01 6.85211428e-01 6.81935621e-01 + 6.78675514e-01 6.75431031e-01 6.72202097e-01 6.68988638e-01 6.65790578e-01 + 6.62607844e-01 6.59440362e-01 6.56288059e-01 6.53150861e-01 6.50028696e-01 + 6.46921491e-01 6.43829174e-01 6.40751674e-01 6.37688920e-01 6.34640840e-01 + 6.31607364e-01 6.28588422e-01 6.25583943e-01 6.22593858e-01 6.19618099e-01 + 6.16656595e-01 6.13709278e-01 6.10776081e-01 6.07856935e-01 6.04951772e-01 + 6.02060526e-01 5.99183129e-01 5.96319515e-01 5.93469617e-01 5.90633370e-01 + 5.87810708e-01 5.85001566e-01 5.82205878e-01 5.79423580e-01 5.76654607e-01 + 5.73898896e-01 5.71156383e-01 5.68427004e-01 5.65710696e-01 5.63007396e-01 + 5.60317042e-01 5.57639571e-01 5.54974922e-01 5.52323033e-01 5.49683843e-01 + 5.47057290e-01 5.44443314e-01 5.41841854e-01 5.39252851e-01 5.36676244e-01 + 5.34111973e-01 5.31559981e-01 5.29020206e-01 5.26492592e-01 5.23977079e-01 + 5.21473609e-01 5.18982125e-01 5.16502568e-01 5.14034882e-01 5.11579010e-01 + 5.09134894e-01 5.06702479e-01 5.04281707e-01 5.01872524e-01 4.99474873e-01 + 4.97088699e-01 4.94713948e-01 4.92350563e-01 4.89998491e-01 4.87657677e-01 + 4.85328067e-01 4.83009607e-01 4.80702244e-01 4.78405925e-01 4.76120596e-01 + 4.73846204e-01 4.71582698e-01 4.69330025e-01 4.67088133e-01 4.64856970e-01 + 4.62636484e-01 4.60426625e-01 4.58227341e-01 4.56038581e-01 4.53860296e-01 + 4.51692435e-01 4.49534947e-01 4.47387783e-01 4.45250893e-01 4.43124229e-01 + 4.41007741e-01 4.38901379e-01 4.36805097e-01 4.34718844e-01 4.32642574e-01 + 4.30576237e-01 4.28519788e-01 4.26473177e-01 4.24436358e-01 4.22409284e-01 + 4.20391908e-01 4.18384183e-01 4.16386064e-01 4.14397504e-01 4.12418457e-01 + 4.10448878e-01 4.08488721e-01 4.06537941e-01 4.04596493e-01 4.02664332e-01 + 4.00741414e-01 3.98827694e-01 3.96923129e-01 3.95027674e-01 3.93141285e-01 + 3.91263920e-01 3.89395535e-01 3.87536086e-01 3.85685532e-01 3.83843828e-01 + 3.82010934e-01 3.80186806e-01 3.78371402e-01 3.76564682e-01 3.74766602e-01 + 3.72977122e-01 3.71196200e-01 3.69423796e-01 3.67659868e-01 3.65904377e-01 + 3.64157280e-01 3.62418539e-01 3.60688113e-01 3.58965962e-01 3.57252046e-01 + 3.55546327e-01 3.53848764e-01 3.52159319e-01 3.50477953e-01 3.48804627e-01 + 3.47139302e-01 3.45481941e-01 3.43832504e-01 3.42190955e-01 3.40557254e-01 + 3.38931366e-01 3.37313251e-01 3.35702873e-01 3.34100195e-01 3.32505179e-01 + 3.30917790e-01 3.29337990e-01 3.27765744e-01 3.26201014e-01 3.24643766e-01 + 3.23093962e-01 3.21551569e-01 3.20016548e-01 3.18488867e-01 3.16968489e-01 + 3.15455379e-01 3.13949503e-01 3.12450826e-01 3.10959314e-01 3.09474931e-01 + 3.07997645e-01 3.06527420e-01 3.05064224e-01 3.03608022e-01 3.02158781e-01 + 3.00716467e-01 2.99281048e-01 2.97852490e-01 2.96430761e-01 2.95015827e-01 + 2.93607657e-01 2.92206218e-01 2.90811477e-01 2.89423403e-01 2.88041963e-01 + 2.86667126e-01 2.85298860e-01 2.83937134e-01 2.82581916e-01 2.81233175e-01 + 2.79890881e-01 2.78555001e-01 2.77225507e-01 2.75902366e-01 2.74585549e-01 + 2.73275025e-01 2.71970764e-01 2.70672736e-01 2.69380912e-01 2.68095261e-01 + 2.66815754e-01 2.65542362e-01 2.64275055e-01 2.63013804e-01 2.61758580e-01 + 2.60509355e-01 2.59266099e-01 2.58028784e-01 2.56797382e-01 2.55571864e-01 + 2.54352202e-01 2.53138368e-01 2.51930334e-01 2.50728072e-01 2.49531555e-01 + 2.48340756e-01 2.47155646e-01 2.45976199e-01 2.44802387e-01 2.43634184e-01 + 2.42471562e-01 2.41314495e-01 2.40162957e-01 2.39016920e-01 2.37876359e-01 + 2.36741248e-01 2.35611559e-01 2.34487268e-01 2.33368348e-01 2.32254774e-01 + 2.31146520e-01 2.30043561e-01 2.28945871e-01 2.27853426e-01 2.26766199e-01 + 2.25684166e-01 2.24607302e-01 2.23535583e-01 2.22468984e-01 2.21407480e-01 + 2.20351047e-01 2.19299660e-01 2.18253296e-01 2.17211931e-01 2.16175540e-01 + 2.15144100e-01 2.14113243e-01 2.13069891e-01 2.12013376e-01 2.10943940e-01 + 2.09861825e-01 2.08767274e-01 2.07660532e-01 2.06541843e-01 2.05411450e-01 + 2.04269601e-01 2.03116539e-01 2.01952510e-01 2.00777762e-01 1.99592539e-01 + 1.98397087e-01 1.97191654e-01 1.95976486e-01 1.94751828e-01 1.93517927e-01 + 1.92275030e-01 1.91023382e-01 1.89763228e-01 1.88494815e-01 1.87218387e-01 + 1.85934189e-01 1.84642465e-01 1.83343460e-01 1.82037416e-01 1.80724576e-01 + 1.79405183e-01 1.78079478e-01 1.76747703e-01 1.75410096e-01 1.74066898e-01 + 1.72718347e-01 1.71364681e-01 1.70006137e-01 1.68642951e-01 1.67275357e-01 + 1.65903590e-01 1.64527883e-01 1.63148467e-01 1.61765573e-01 1.60379431e-01 + 1.58990269e-01 1.57598315e-01 1.56203794e-01 1.54806930e-01 1.53407948e-01 + 1.52007068e-01 1.50604512e-01 1.49200499e-01 1.47795247e-01 1.46388970e-01 + 1.44981885e-01 1.43574205e-01 1.42166140e-01 1.40757901e-01 1.39349697e-01 + 1.37941733e-01 1.36534215e-01 1.35127346e-01 1.33721328e-01 1.32316360e-01 + 1.30912641e-01 1.29510367e-01 1.28109732e-01 1.26710929e-01 1.25314148e-01 + 1.23919578e-01 1.22527407e-01 1.21137818e-01 1.19750996e-01 1.18367121e-01 + 1.16986372e-01 1.15608926e-01 1.14234958e-01 1.12864641e-01 1.11498147e-01 + 1.10135644e-01 1.08777298e-01 1.07423275e-01 1.06073737e-01 1.04728844e-01 + 1.03388755e-01 1.02053626e-01 1.00723611e-01 9.93988621e-02 9.80795283e-02 + 9.67657573e-02 9.54576944e-02 9.41554826e-02 9.28592628e-02 9.15691736e-02 + 9.02853512e-02 8.90079298e-02 8.77370413e-02 8.64728153e-02 8.52153791e-02 + 8.39648579e-02 8.27213744e-02 8.14850493e-02 8.02560007e-02 7.90343447e-02 + 7.78201951e-02 7.66136632e-02 7.54148582e-02 7.42238870e-02 7.30408542e-02 + 7.18658621e-02 7.06990106e-02 6.95403977e-02 6.83901186e-02 6.72482667e-02 + 6.61149327e-02 6.49902053e-02 6.38741708e-02 6.27669135e-02 6.16685149e-02 + 6.05790548e-02 5.94986105e-02 5.84272569e-02 5.73650669e-02 5.63121110e-02 + 5.52684577e-02 5.42341729e-02 5.32093207e-02 5.21939626e-02 5.11881582e-02 + 5.01919647e-02 4.92054373e-02 4.82286288e-02 4.72615900e-02 4.63043694e-02 + 4.53570136e-02 4.44195668e-02 4.34920712e-02 4.25745668e-02 4.16670917e-02 + 4.07696815e-02 3.98823701e-02 3.90051893e-02 3.81381685e-02 3.72813355e-02 + 3.64347158e-02 3.55983328e-02 3.47722083e-02 3.39563616e-02 3.31508103e-02 + 3.23555701e-02 3.15706545e-02 3.07960754e-02 3.00318424e-02 2.92779635e-02 + 2.85344447e-02 2.78012900e-02 2.70785019e-02 2.63660805e-02 2.56640247e-02 + 2.49723312e-02 2.42909949e-02 2.36200091e-02 2.29593653e-02 2.23090532e-02 + 2.16690608e-02 2.10393744e-02 2.04199786e-02 1.98108565e-02 1.92119892e-02 + 1.86233564e-02 1.80449363e-02 1.74767052e-02 1.69186380e-02 1.63707081e-02 + 1.58328873e-02 1.53051458e-02 1.47874523e-02 1.42797743e-02 1.37820775e-02 + 1.32943263e-02 1.28164837e-02 1.23485112e-02 1.18903690e-02 1.14420160e-02 + 1.10034096e-02 1.05745061e-02 1.01552602e-02 9.74562554e-03 9.34555446e-03 + 8.95499803e-03 8.57390613e-03 8.20222740e-03 7.83990935e-03 7.48689830e-03 + 7.14313944e-03 6.80857685e-03 6.48315351e-03 6.16681133e-03 5.85949117e-03 + 5.56113283e-03 5.27167514e-03 4.99105590e-03 4.71921196e-03 4.45607922e-03 + 4.20159263e-03 3.95568626e-03 3.71829328e-03 3.48934599e-03 3.26877583e-03 + 3.05651345e-03 2.85248865e-03 2.65663049e-03 2.46886724e-03 2.28912643e-03 + 2.11733486e-03 1.95341864e-03 1.79730319e-03 1.64891328e-03 1.50817302e-03 + 1.37500590e-03 1.24933483e-03 1.13108212e-03 1.02016951e-03 9.16518227e-04 + 8.20048948e-04 7.30681861e-04 6.48336671e-04 5.72932617e-04 5.04388498e-04 + 4.42622685e-04 3.87553146e-04 3.39097464e-04 2.97172855e-04 2.61696185e-04 + 2.32583995e-04 2.09752512e-04 1.93117675e-04 1.82595147e-04 1.78100339e-04 + 5.10303315e+05 5.10046225e+05 2.53097548e+05 1.67464388e+05 1.24659895e+05 + 9.89867038e+04 8.18790278e+04 6.96658180e+04 6.05115520e+04 5.33964966e+04 + 4.77088135e+04 4.30591523e+04 3.91879473e+04 3.59155003e+04 3.31134563e+04 + 3.06876893e+04 2.85676056e+04 2.66992224e+04 2.50405539e+04 2.35584542e+04 + 2.22264069e+04 2.10229471e+04 1.99305132e+04 1.89345980e+04 1.80231129e+04 + 1.71859038e+04 1.64143793e+04 1.57012210e+04 1.50401564e+04 1.44257787e+04 + 1.38534022e+04 1.33189460e+04 1.28188399e+04 1.23499464e+04 1.19094977e+04 + 1.14950424e+04 1.11044018e+04 1.07356328e+04 1.03869972e+04 1.00569354e+04 + 9.74404375e+03 9.44705580e+03 9.16482594e+03 8.89631528e+03 8.64057954e+03 + 8.39675857e+03 8.16406712e+03 7.94178697e+03 7.72925986e+03 7.52588141e+03 + 7.33109575e+03 7.14439069e+03 6.96529360e+03 6.79336763e+03 6.62820838e+03 + 6.46944099e+03 6.31671748e+03 6.16971439e+03 6.02813065e+03 5.89168572e+03 + 5.76011783e+03 5.63318249e+03 5.51065103e+03 5.39230941e+03 5.27795704e+03 + 5.16740574e+03 5.06047881e+03 4.95701018e+03 4.85684361e+03 4.75983198e+03 + 4.66583665e+03 4.57472683e+03 4.48637909e+03 4.40067679e+03 4.31750967e+03 + 4.23677339e+03 4.15836916e+03 4.08220338e+03 4.00818728e+03 3.93623666e+03 + 3.86627154e+03 3.79821596e+03 3.73199770e+03 3.66754806e+03 3.60480166e+03 + 3.54369622e+03 3.48417242e+03 3.42617367e+03 3.36964602e+03 3.31453796e+03 + 3.26080030e+03 3.20838606e+03 3.15725033e+03 3.10735015e+03 3.05864443e+03 + 3.01109383e+03 2.96466068e+03 2.91930891e+03 2.87500390e+03 2.83171251e+03 + 2.78940292e+03 2.74804459e+03 2.70760821e+03 2.66806564e+03 2.62938983e+03 + 2.59155479e+03 2.55453552e+03 2.51830799e+03 2.48284908e+03 2.44813652e+03 + 2.41414887e+03 2.38086551e+03 2.34826654e+03 2.31633280e+03 2.28504581e+03 + 2.25438775e+03 2.22434144e+03 2.19489029e+03 2.16601829e+03 2.13770999e+03 + 2.10995046e+03 2.08272529e+03 2.05602053e+03 2.02982273e+03 2.00411886e+03 + 1.97889633e+03 1.95414296e+03 1.92984697e+03 1.90599695e+03 1.88258187e+03 + 1.85959103e+03 1.83701408e+03 1.81484100e+03 1.79306205e+03 1.77166784e+03 + 1.75064922e+03 1.72999735e+03 1.70970364e+03 1.68975977e+03 1.67015765e+03 + 1.65088945e+03 1.63194756e+03 1.61332459e+03 1.59501336e+03 1.57700693e+03 + 1.55929851e+03 1.54188153e+03 1.52474960e+03 1.50789653e+03 1.49131626e+03 + 1.47500294e+03 1.45895085e+03 1.44315444e+03 1.42760833e+03 1.41230725e+03 + 1.39724609e+03 1.38241988e+03 1.36782377e+03 1.35345305e+03 1.33930313e+03 + 1.32536953e+03 1.31164791e+03 1.29813401e+03 1.28482370e+03 1.27171296e+03 + 1.25879786e+03 1.24607457e+03 1.23353935e+03 1.22118857e+03 1.20901868e+03 + 1.19702622e+03 1.18520781e+03 1.17356016e+03 1.16208005e+03 1.15076434e+03 + 1.13960999e+03 1.12861399e+03 1.11777342e+03 1.10708545e+03 1.09654729e+03 + 1.08615621e+03 1.07590958e+03 1.06580478e+03 1.05583930e+03 1.04601066e+03 + 1.03631643e+03 1.02675426e+03 1.01732183e+03 1.00801689e+03 9.98837223e+02 + 9.89780672e+02 9.80845126e+02 9.72028519e+02 9.63328832e+02 9.54744087e+02 + 9.46272351e+02 9.37911733e+02 9.29660381e+02 9.21516483e+02 9.13478267e+02 + 9.05543995e+02 8.97711969e+02 8.89980525e+02 8.82348035e+02 8.74812902e+02 + 8.67373564e+02 8.60028492e+02 8.52776186e+02 8.45615178e+02 8.38544029e+02 + 8.31561330e+02 8.24665699e+02 8.17855783e+02 8.11130255e+02 8.04487814e+02 + 7.97927187e+02 7.91447123e+02 7.85046396e+02 7.78723806e+02 7.72478175e+02 + 7.66308347e+02 7.60213188e+02 7.54191588e+02 7.48242457e+02 7.42364723e+02 + 7.36557340e+02 7.30819275e+02 7.25149520e+02 7.19547083e+02 7.14010990e+02 + 7.08540286e+02 7.03134035e+02 6.97791316e+02 6.92511225e+02 6.87292875e+02 + 6.82135395e+02 6.77037931e+02 6.71999642e+02 6.67019703e+02 6.62097305e+02 + 6.57231651e+02 6.52421960e+02 6.47667464e+02 6.42967409e+02 6.38321053e+02 + 6.33727668e+02 6.29186538e+02 6.24696960e+02 6.20258243e+02 6.15869708e+02 + 6.11530686e+02 6.07240521e+02 6.02998567e+02 5.98804191e+02 5.94656769e+02 + 5.90555686e+02 5.86500341e+02 5.82490139e+02 5.78524499e+02 5.74602845e+02 + 5.70724613e+02 5.66889250e+02 5.63096208e+02 5.59344950e+02 5.55634949e+02 + 5.51965684e+02 5.48336644e+02 5.44747325e+02 5.41197231e+02 5.37685877e+02 + 5.34212781e+02 5.30777471e+02 5.27379483e+02 5.24018359e+02 5.20693648e+02 + 5.17404908e+02 5.14151701e+02 5.10933598e+02 5.07750176e+02 5.04601017e+02 + 5.01485712e+02 4.98403856e+02 4.95355051e+02 4.92338905e+02 4.89355032e+02 + 4.86403051e+02 4.83482588e+02 4.80593273e+02 4.77734743e+02 4.74906640e+02 + 4.72108610e+02 4.69340305e+02 4.66601383e+02 4.63891506e+02 4.61210340e+02 + 4.58557558e+02 4.55932836e+02 4.53335856e+02 4.50766302e+02 4.48223866e+02 + 4.45708241e+02 4.43219127e+02 4.40756227e+02 4.38319248e+02 4.35907902e+02 + 4.33521903e+02 4.31160971e+02 4.28824829e+02 4.26513205e+02 4.24225829e+02 + 4.21962435e+02 4.19722762e+02 4.17506550e+02 4.15313545e+02 4.13143496e+02 + 4.10996155e+02 4.08871275e+02 4.06768616e+02 4.04687940e+02 4.02629011e+02 + 4.00591597e+02 3.98575469e+02 3.96580400e+02 3.94606168e+02 3.92652552e+02 + 3.90719335e+02 3.88806302e+02 3.86913240e+02 3.85039942e+02 3.83186199e+02 + 3.81351809e+02 3.79536569e+02 3.77740281e+02 3.75962749e+02 3.74203778e+02 + 3.72463176e+02 3.70740756e+02 3.69036329e+02 3.67349711e+02 3.65680719e+02 + 3.64029175e+02 3.62394898e+02 3.60777715e+02 3.59177450e+02 3.57593933e+02 + 3.56026994e+02 3.54476464e+02 3.52942179e+02 3.51423975e+02 3.49921689e+02 + 3.48435163e+02 3.46964237e+02 3.45508756e+02 3.44068565e+02 3.42643511e+02 + 3.41233444e+02 3.39838215e+02 3.38457674e+02 3.37091678e+02 3.35740081e+02 + 3.34402740e+02 3.33079515e+02 3.31770266e+02 3.30474855e+02 3.29193145e+02 + 3.27925002e+02 3.26670291e+02 3.25428880e+02 3.24200640e+02 3.22985439e+02 + 3.21783151e+02 3.20593649e+02 3.19416806e+02 3.18252500e+02 3.17100608e+02 + 3.15961007e+02 3.14833578e+02 3.13718202e+02 3.12614761e+02 3.11523138e+02 + 3.10443218e+02 3.09374887e+02 3.08318030e+02 3.07272538e+02 3.06238297e+02 + 3.05215199e+02 3.04203134e+02 3.03201996e+02 3.02211676e+02 3.01232070e+02 + 3.00263073e+02 2.99304581e+02 2.98356492e+02 2.97418703e+02 2.96491113e+02 + 2.95573624e+02 2.94666135e+02 2.93768550e+02 2.92880770e+02 2.92002699e+02 + 2.91134242e+02 2.90275304e+02 2.89425791e+02 2.88585611e+02 2.87754672e+02 + 2.86932882e+02 2.86120150e+02 2.85316386e+02 2.84521503e+02 2.83735411e+02 + 2.82958023e+02 2.82189252e+02 2.81429013e+02 2.80677219e+02 2.79933787e+02 + 2.79198632e+02 2.78471671e+02 2.77752821e+02 2.77042001e+02 2.76339129e+02 + 2.75644124e+02 2.74956907e+02 2.74277399e+02 2.73605519e+02 2.72941192e+02 + 2.72284337e+02 2.71634880e+02 2.70992743e+02 2.70357851e+02 2.69730128e+02 + 2.69109499e+02 2.68495891e+02 2.67889230e+02 2.67289443e+02 2.66696458e+02 + 2.66110201e+02 2.65530603e+02 2.64957592e+02 2.64391096e+02 2.63831048e+02 + 2.63277376e+02 2.62730013e+02 2.62188888e+02 2.61653935e+02 2.61125086e+02 + 2.60602273e+02 2.60085431e+02 2.59574492e+02 2.59069390e+02 2.58570061e+02 + 2.58076440e+02 2.57588462e+02 2.57106063e+02 2.56629179e+02 2.56157746e+02 + 2.55691703e+02 2.55230987e+02 2.54775535e+02 2.54325287e+02 2.53880179e+02 + 2.53440153e+02 2.53005147e+02 2.52575100e+02 2.52149954e+02 2.51729649e+02 + 2.51314126e+02 2.50903326e+02 2.50497191e+02 2.50095662e+02 2.49698683e+02 + 2.49306196e+02 2.48918144e+02 2.48534470e+02 2.48155118e+02 2.47780033e+02 + 2.47409158e+02 2.47042438e+02 2.46679819e+02 2.46321246e+02 2.45966664e+02 + 2.45616020e+02 2.45269260e+02 2.44926330e+02 2.44587178e+02 2.44251750e+02 + 2.43919995e+02 2.43591860e+02 2.43267294e+02 2.42946244e+02 2.42628660e+02 + 2.42314491e+02 2.42003686e+02 2.41696195e+02 2.41391967e+02 2.41090953e+02 + 2.40793105e+02 2.40498371e+02 2.40206704e+02 2.39918055e+02 2.39632375e+02 + 2.39349617e+02 2.39069733e+02 2.38792675e+02 2.38518396e+02 2.38246849e+02 + 2.37977988e+02 2.37711767e+02 2.37448138e+02 2.37187057e+02 2.36928477e+02 + 2.36672354e+02 2.36418643e+02 2.36167298e+02 2.35918276e+02 2.35671532e+02 + 2.35427023e+02 2.35184704e+02 2.34944533e+02 2.34706466e+02 2.34470460e+02 + 2.34236473e+02 2.34004463e+02 2.33774388e+02 2.33546205e+02 2.33319874e+02 + 2.33095353e+02 2.32872602e+02 2.32651579e+02 2.32432244e+02 2.32214558e+02 + 2.31998480e+02 2.31783971e+02 2.31570991e+02 2.31359501e+02 2.31149464e+02 + 2.30940839e+02 2.30733589e+02 2.30527677e+02 2.30323063e+02 2.30119712e+02 + 2.29917585e+02 2.29716646e+02 2.29516859e+02 2.29318186e+02 2.29120593e+02 + 2.28924042e+02 2.28728500e+02 2.28533929e+02 2.28340297e+02 2.28147567e+02 + 2.27955705e+02 2.27764678e+02 2.27574452e+02 2.27384992e+02 2.27196266e+02 + 2.27008241e+02 2.26820884e+02 2.26634163e+02 2.26448044e+02 2.26262498e+02 + 2.26077491e+02 2.25892993e+02 2.25708972e+02 2.25525399e+02 2.25342242e+02 + 2.25159470e+02 2.24977056e+02 2.24794968e+02 2.24613177e+02 2.24431655e+02 + 2.24250372e+02 2.24069301e+02 2.23888413e+02 2.23707679e+02 2.23527074e+02 + 2.23346568e+02 2.23166136e+02 2.22985751e+02 2.22805385e+02 2.22625013e+02 + 2.22444610e+02 2.22264149e+02 2.22083605e+02 2.21902954e+02 2.21722170e+02 + 2.21541230e+02 2.21360109e+02 2.21178783e+02 2.20997229e+02 2.20815424e+02 + 2.20633345e+02 2.20450968e+02 2.20268273e+02 2.20085237e+02 2.19901837e+02 + 2.19718053e+02 2.19533864e+02 2.19349248e+02 2.19164186e+02 2.18978656e+02 + 2.18792640e+02 2.18606116e+02 2.18419067e+02 2.18231472e+02 2.18043313e+02 + 2.17854572e+02 2.17665230e+02 2.17475270e+02 2.17284673e+02 2.17093423e+02 + 2.16901503e+02 2.16708895e+02 2.16515584e+02 2.16321553e+02 2.16126786e+02 + 2.15931269e+02 2.15734985e+02 2.15537919e+02 2.15340058e+02 2.15141386e+02 + 2.14941889e+02 2.14741555e+02 2.14540368e+02 2.14338316e+02 2.14135386e+02 + 2.13931566e+02 2.13726842e+02 2.13521203e+02 2.13314637e+02 2.13107133e+02 + 2.12898678e+02 2.12689263e+02 2.12478876e+02 2.12267508e+02 2.12055147e+02 + 2.11841784e+02 2.11627410e+02 2.11412015e+02 2.11195590e+02 2.10978127e+02 + 2.10759616e+02 2.10540050e+02 2.10319420e+02 2.10097719e+02 2.09874940e+02 + 2.09651076e+02 2.09426118e+02 2.09200061e+02 2.08972899e+02 2.08744625e+02 + 2.08515233e+02 2.08284718e+02 2.08053074e+02 2.07820297e+02 2.07586381e+02 + 2.07351321e+02 2.07115114e+02 2.06877755e+02 2.06639241e+02 2.06399567e+02 + 2.06158730e+02 2.05916728e+02 2.05673556e+02 2.05429214e+02 2.05183697e+02 + 2.04937004e+02 2.04689132e+02 2.04440081e+02 2.04189848e+02 2.03938432e+02 + 2.03685832e+02 2.03432047e+02 2.03177076e+02 2.02920920e+02 2.02663577e+02 + 2.02405047e+02 2.02145331e+02 2.01884430e+02 2.01622343e+02 2.01359072e+02 + 2.01094617e+02 2.00828980e+02 2.00562162e+02 2.00294164e+02 2.00024989e+02 + 1.99754638e+02 1.99483114e+02 1.99210418e+02 1.98936553e+02 1.98661523e+02 + 1.98385329e+02 1.98107975e+02 1.97829464e+02 1.97549799e+02 1.97268984e+02 + 1.96987023e+02 1.96703919e+02 1.96419677e+02 1.96134301e+02 1.95847795e+02 + 1.95560163e+02 1.95271410e+02 1.94981542e+02 1.94690563e+02 1.94398477e+02 + 1.94105292e+02 1.93811010e+02 1.93515640e+02 1.93219185e+02 1.92921652e+02 + 1.92623046e+02 1.92323374e+02 1.92022643e+02 1.91720857e+02 1.91418024e+02 + 1.91114151e+02 1.90809243e+02 1.90503308e+02 1.90196352e+02 1.89888383e+02 + 1.89579408e+02 1.89269434e+02 1.88958468e+02 1.88646517e+02 1.88333590e+02 + 1.88019694e+02 1.87704836e+02 1.87389025e+02 1.87072268e+02 1.86754573e+02 + 1.86435949e+02 1.86116403e+02 1.85795944e+02 1.85474580e+02 1.85152320e+02 + 1.84829171e+02 1.84505143e+02 1.84180245e+02 1.83854484e+02 1.83527870e+02 + 1.83200411e+02 1.82872117e+02 1.82542996e+02 1.82213057e+02 1.81882310e+02 + 1.81550763e+02 1.81218426e+02 1.80885308e+02 1.80551418e+02 1.80216766e+02 + 1.79881360e+02 1.79545211e+02 1.79208327e+02 1.78870719e+02 1.78532395e+02 + 1.78193366e+02 1.77853641e+02 1.77513229e+02 1.77172140e+02 1.76830384e+02 + 1.76487971e+02 1.76144911e+02 1.75801212e+02 1.75456885e+02 1.75111940e+02 + 1.74766387e+02 1.74420235e+02 1.74073494e+02 1.73726174e+02 1.73378285e+02 + 1.73029837e+02 1.72680840e+02 1.72331304e+02 1.71981238e+02 1.71630653e+02 + 1.71279558e+02 1.70927963e+02 1.70575879e+02 1.70223315e+02 1.69870281e+02 + 1.69516787e+02 1.69162843e+02 1.68808459e+02 1.68453644e+02 1.68098409e+02 + 1.67742764e+02 1.67386718e+02 1.67030281e+02 1.66673463e+02 1.66316274e+02 + 1.65958724e+02 1.65600822e+02 1.65242578e+02 1.64884002e+02 1.64525104e+02 + 1.64165893e+02 1.63806379e+02 1.63446572e+02 1.63086481e+02 1.62726115e+02 + 1.62365486e+02 1.62004601e+02 1.61643471e+02 1.61282104e+02 1.60920511e+02 + 1.60558701e+02 1.60196684e+02 1.59834467e+02 1.59472062e+02 1.59109477e+02 + 1.58746721e+02 1.58383804e+02 1.58020734e+02 1.57657521e+02 1.57294175e+02 + 1.56930703e+02 1.56567116e+02 1.56203421e+02 1.55839629e+02 1.55475747e+02 + 1.55111785e+02 1.54747751e+02 1.54383654e+02 1.54019504e+02 1.53655308e+02 + 1.53291075e+02 1.52926813e+02 1.52562532e+02 1.52198240e+02 1.51833945e+02 + 1.51469655e+02 1.51105379e+02 1.50741125e+02 1.50376902e+02 1.50012717e+02 + 1.49648578e+02 1.49284494e+02 1.48920473e+02 1.48556522e+02 1.48192650e+02 + 1.47828864e+02 1.47465173e+02 1.47101583e+02 1.46738103e+02 1.46374741e+02 + 1.46011503e+02 1.45648398e+02 1.45285432e+02 1.44922614e+02 1.44559950e+02 + 1.44197449e+02 1.43835116e+02 1.43472960e+02 1.43110988e+02 1.42749206e+02 + 1.42387622e+02 1.42026243e+02 1.41665075e+02 1.41304126e+02 1.40943402e+02 + 1.40582910e+02 1.40222657e+02 1.39862648e+02 1.39502892e+02 1.39143395e+02 + 1.38784162e+02 1.38425200e+02 1.38066516e+02 1.37708117e+02 1.37350007e+02 + 1.36992193e+02 1.36634682e+02 1.36277480e+02 1.35920592e+02 1.35564024e+02 + 1.35207783e+02 1.34851874e+02 1.34496303e+02 1.34141076e+02 1.33786198e+02 + 1.33431675e+02 1.33077512e+02 1.32723715e+02 1.32370290e+02 1.32017242e+02 + 1.31664575e+02 1.31312296e+02 1.30960410e+02 1.30608921e+02 1.30257835e+02 + 1.29907157e+02 1.29556892e+02 1.29207045e+02 1.28857620e+02 1.28508623e+02 + 1.28160058e+02 1.27811930e+02 1.27464243e+02 1.27117003e+02 1.26770214e+02 + 1.26423879e+02 1.26078005e+02 1.25732594e+02 1.25387652e+02 1.25043183e+02 + 1.24699190e+02 1.24355679e+02 1.24012652e+02 1.23670115e+02 1.23328071e+02 + 1.22986525e+02 1.22645479e+02 1.22304939e+02 1.21964907e+02 1.21625388e+02 + 1.21286385e+02 1.20947903e+02 1.20609943e+02 1.20272511e+02 1.19935610e+02 + 1.19599242e+02 1.19263412e+02 1.18928123e+02 1.18593378e+02 1.18259180e+02 + 1.17925533e+02 1.17592440e+02 1.17259904e+02 1.16927927e+02 1.16596514e+02 + 1.16265667e+02 1.15935389e+02 1.15605682e+02 1.15276550e+02 1.14947996e+02 + 1.14620022e+02 1.14292630e+02 1.13965825e+02 1.13639607e+02 1.13313981e+02 + 1.12988947e+02 1.12664510e+02 1.12340671e+02 1.12017432e+02 1.11694796e+02 + 1.11372766e+02 1.11051343e+02 1.10730530e+02 1.10410329e+02 1.10090743e+02 + 1.09771772e+02 1.09453420e+02 1.09135688e+02 1.08818579e+02 1.08502094e+02 + 1.08186235e+02 1.07871004e+02 1.07556404e+02 1.07242435e+02 1.06929099e+02 + 1.06616399e+02 1.06304336e+02 1.05992911e+02 1.05682126e+02 1.05371983e+02 + 1.05062483e+02 1.04753628e+02 1.04445420e+02 1.04137859e+02 1.03830947e+02 + 1.03524685e+02 1.03219075e+02 1.02914119e+02 1.02609816e+02 1.02306169e+02 + 1.02003179e+02 1.01700846e+02 1.01399173e+02 1.01098160e+02 1.00797808e+02 + 1.00498118e+02 1.00199091e+02 9.99007283e+01 9.96030307e+01 9.93059992e+01 + 9.90096345e+01 9.87139375e+01 9.84189091e+01 9.81245500e+01 9.78308609e+01 + 9.75378427e+01 9.72454959e+01 9.69538214e+01 9.66628197e+01 9.63724914e+01 + 9.60828371e+01 9.57938574e+01 9.55055529e+01 9.52179239e+01 9.49309711e+01 + 9.46446949e+01 9.43590956e+01 9.40741738e+01 9.37899297e+01 9.35063638e+01 + 9.32234763e+01 9.29412676e+01 9.26597379e+01 9.23788875e+01 9.20987167e+01 + 9.18192256e+01 9.15404144e+01 9.12622833e+01 9.09848325e+01 9.07080619e+01 + 9.04319719e+01 9.01565623e+01 8.98818333e+01 8.96077848e+01 8.93344170e+01 + 8.90617297e+01 8.87897230e+01 8.85183968e+01 8.82477510e+01 8.79777855e+01 + 8.77085002e+01 8.74398950e+01 8.71719697e+01 8.69047241e+01 8.66381581e+01 + 8.63722714e+01 8.61070638e+01 8.58425350e+01 8.55786849e+01 8.53155130e+01 + 8.50530192e+01 8.47912030e+01 8.45300641e+01 8.42696023e+01 8.40098170e+01 + 8.37507080e+01 8.34922748e+01 8.32345170e+01 8.29774342e+01 8.27210259e+01 + 8.24652916e+01 8.22102308e+01 8.19558432e+01 8.17021280e+01 8.14490849e+01 + 8.11967133e+01 8.09450125e+01 8.06939821e+01 8.04436215e+01 8.01939300e+01 + 7.99449070e+01 7.96965520e+01 7.94488642e+01 7.92018430e+01 7.89554878e+01 + 7.87097978e+01 7.84647724e+01 7.82204109e+01 7.79767125e+01 7.77336765e+01 + 7.74913023e+01 7.72495889e+01 7.70085357e+01 7.67681418e+01 7.65284066e+01 + 7.62893292e+01 7.60509087e+01 7.58131444e+01 7.55760354e+01 7.53395809e+01 + 7.51037800e+01 7.48686319e+01 7.46341358e+01 7.44002906e+01 7.41670955e+01 + 7.39345497e+01 7.37026521e+01 7.34714020e+01 7.32407983e+01 7.30108401e+01 + 7.27815265e+01 7.25528565e+01 7.23248291e+01 7.20974435e+01 7.18706985e+01 + 7.16445932e+01 7.14191266e+01 7.11942977e+01 7.09701055e+01 7.07465489e+01 + 7.05236270e+01 7.03013386e+01 7.00796828e+01 6.98586585e+01 6.96382647e+01 + 6.94185002e+01 6.91993640e+01 6.89808550e+01 6.87629722e+01 6.85457144e+01 + 6.83290806e+01 6.81130696e+01 6.78976804e+01 6.76829117e+01 6.74687626e+01 + 6.72552318e+01 6.70423183e+01 6.68300208e+01 6.66183384e+01 6.64072697e+01 + 6.61968136e+01 6.59869691e+01 6.57777348e+01 6.55691097e+01 6.53610926e+01 + 6.51536823e+01 6.49468776e+01 6.47406774e+01 6.45350803e+01 6.43300853e+01 + 6.41256912e+01 6.39218966e+01 6.37187005e+01 6.35161016e+01 6.33140987e+01 + 6.31126905e+01 6.29118759e+01 6.27116536e+01 6.25120224e+01 6.23129810e+01 + 6.21145283e+01 6.19166629e+01 6.17193836e+01 6.15226892e+01 6.13265785e+01 + 6.11310501e+01 6.09361028e+01 6.07417354e+01 6.05479465e+01 6.03547350e+01 + 6.01620996e+01 5.99700389e+01 5.97785518e+01 5.95876369e+01 5.93972930e+01 + 5.92075188e+01 5.90183130e+01 5.88296743e+01 5.86416014e+01 5.84540932e+01 + 5.82671481e+01 5.80807651e+01 5.78949427e+01 5.77096798e+01 5.75249749e+01 + 5.73408269e+01 5.71572343e+01 5.69741960e+01 5.67917105e+01 5.66097767e+01 + 5.64283931e+01 5.62475586e+01 5.60672718e+01 5.58875313e+01 5.57083359e+01 + 5.55296843e+01 5.53515752e+01 5.51740072e+01 5.49969790e+01 5.48204894e+01 + 5.46445370e+01 5.44691206e+01 5.42942387e+01 5.41198901e+01 5.39460735e+01 + 5.37727875e+01 5.36000309e+01 5.34278023e+01 5.32561004e+01 5.30849240e+01 + 5.29142716e+01 5.27441420e+01 5.25745339e+01 5.24054459e+01 5.22368767e+01 + 5.20688251e+01 5.19012896e+01 5.17342691e+01 5.15677621e+01 5.14017674e+01 + 5.12362836e+01 5.10713095e+01 5.09068437e+01 5.07428849e+01 5.05794318e+01 + 5.04164830e+01 5.02540374e+01 5.00920935e+01 4.99306501e+01 4.97697059e+01 + 4.96092595e+01 4.94493096e+01 4.92898550e+01 4.91308942e+01 4.89724261e+01 + 4.88144493e+01 4.86569626e+01 4.84999645e+01 4.83434539e+01 4.81874293e+01 + 4.80318896e+01 4.78768334e+01 4.77222594e+01 4.75681664e+01 4.74145529e+01 + 4.72614178e+01 4.71087598e+01 4.69565775e+01 4.68048696e+01 4.66536350e+01 + 4.65028722e+01 4.63525800e+01 4.62027572e+01 4.60534023e+01 4.59045143e+01 + 4.57560917e+01 4.56081333e+01 4.54606378e+01 4.53136040e+01 4.51670306e+01 + 4.50209162e+01 4.48752597e+01 4.47300597e+01 4.45853150e+01 4.44410244e+01 + 4.42971865e+01 4.41538001e+01 4.40108640e+01 4.38683768e+01 4.37263374e+01 + 4.35847444e+01 4.34435966e+01 4.33028929e+01 4.31626318e+01 4.30228122e+01 + 4.28834328e+01 4.27444924e+01 4.26059897e+01 4.24679235e+01 4.23302926e+01 + 4.21930956e+01 4.20563315e+01 4.19199989e+01 4.17840967e+01 4.16486235e+01 + 4.15135782e+01 4.13789595e+01 4.12447663e+01 4.11109973e+01 4.09776512e+01 + 4.08447269e+01 4.07122232e+01 4.05801387e+01 4.04484725e+01 4.03172231e+01 + 4.01863895e+01 4.00559704e+01 3.99259645e+01 3.97963709e+01 3.96671881e+01 + 3.95384150e+01 3.94100505e+01 3.92820933e+01 3.91545423e+01 3.90273962e+01 + 3.89006540e+01 3.87743143e+01 3.86483760e+01 3.85228381e+01 3.83976991e+01 + 3.82729581e+01 3.81486139e+01 3.80246652e+01 3.79011109e+01 3.77779498e+01 + 3.76551809e+01 3.75328028e+01 3.74108145e+01 3.72892149e+01 3.71680027e+01 + 3.70471769e+01 3.69267362e+01 3.68066795e+01 3.66870058e+01 3.65677138e+01 + 3.64488024e+01 3.63302705e+01 3.62121170e+01 3.60943407e+01 3.59769405e+01 + 3.58599153e+01 3.57432639e+01 3.56269853e+01 3.55110783e+01 3.53955418e+01 + 3.52803747e+01 3.51655759e+01 3.50511443e+01 3.49370788e+01 3.48233782e+01 + 3.47100416e+01 3.45970677e+01 3.44844555e+01 3.43722040e+01 3.42603119e+01 + 3.41487783e+01 3.40376020e+01 3.39267820e+01 3.38163172e+01 3.37062065e+01 + 3.35964488e+01 3.34870432e+01 3.33779884e+01 3.32692834e+01 3.31609272e+01 + 3.30529188e+01 3.29452570e+01 3.28379408e+01 3.27309691e+01 3.26243410e+01 + 3.25180553e+01 3.24121110e+01 3.23065071e+01 3.22012425e+01 3.20963161e+01 + 3.19917271e+01 3.18874742e+01 3.17835566e+01 3.16799731e+01 3.15767228e+01 + 3.14738046e+01 3.13712175e+01 3.12689604e+01 3.11670325e+01 3.10654326e+01 + 3.09641597e+01 3.08632129e+01 3.07625912e+01 3.06622934e+01 3.05623187e+01 + 3.04626661e+01 3.03633345e+01 3.02643230e+01 3.01656305e+01 3.00672562e+01 + 2.99691989e+01 2.98714578e+01 2.97740318e+01 2.96769199e+01 2.95801213e+01 + 2.94836349e+01 2.93874598e+01 2.92915949e+01 2.91960394e+01 2.91007922e+01 + 2.90058525e+01 2.89112192e+01 2.88168915e+01 2.87228682e+01 2.86291486e+01 + 2.85357317e+01 2.84426165e+01 2.83498020e+01 2.82572874e+01 2.81650717e+01 + 2.80731540e+01 2.79815334e+01 2.78902088e+01 2.77991795e+01 2.77084444e+01 + 2.76180027e+01 2.75278535e+01 2.74379957e+01 2.73484286e+01 2.72591511e+01 + 2.71701625e+01 2.70814617e+01 2.69930480e+01 2.69049203e+01 2.68170778e+01 + 2.67295196e+01 2.66422449e+01 2.65552526e+01 2.64685420e+01 2.63821121e+01 + 2.62959621e+01 2.62100910e+01 2.61244981e+01 2.60391824e+01 2.59541430e+01 + 2.58693792e+01 2.57848899e+01 2.57006744e+01 2.56167319e+01 2.55330613e+01 + 2.54496619e+01 2.53665329e+01 2.52836733e+01 2.52010823e+01 2.51187591e+01 + 2.50367028e+01 2.49549127e+01 2.48733877e+01 2.47921272e+01 2.47111302e+01 + 2.46303959e+01 2.45499236e+01 2.44697123e+01 2.43897613e+01 2.43100697e+01 + 2.42306367e+01 2.41514615e+01 2.40725433e+01 2.39938812e+01 2.39154744e+01 + 2.38373222e+01 2.37594237e+01 2.36817781e+01 2.36043846e+01 2.35272425e+01 + 2.34503509e+01 2.33737090e+01 2.32973160e+01 2.32211711e+01 2.31452736e+01 + 2.30696227e+01 2.29942176e+01 2.29190574e+01 2.28441415e+01 2.27694690e+01 + 2.26950391e+01 2.26208512e+01 2.25469044e+01 2.24731979e+01 2.23997310e+01 + 2.23265030e+01 2.22535130e+01 2.21807603e+01 2.21082441e+01 2.20359638e+01 + 2.19639185e+01 2.18921075e+01 2.18205300e+01 2.17491853e+01 2.16780727e+01 + 2.16071914e+01 2.15365407e+01 2.14661198e+01 2.13959280e+01 2.13259646e+01 + 2.12562288e+01 2.11867200e+01 2.11174373e+01 2.10483801e+01 2.09795476e+01 + 2.09109392e+01 2.08425541e+01 2.07743915e+01 2.07064508e+01 2.06387313e+01 + 2.05712323e+01 2.05039530e+01 2.04368928e+01 2.03700509e+01 2.03034266e+01 + 2.02370194e+01 2.01708283e+01 2.01048528e+01 2.00390922e+01 1.99735458e+01 + 1.99082129e+01 1.98430927e+01 1.97781847e+01 1.97134882e+01 1.96490024e+01 + 1.95847267e+01 1.95206604e+01 1.94568028e+01 1.93931533e+01 1.93297112e+01 + 1.92664759e+01 1.92034466e+01 1.91406227e+01 1.90780035e+01 1.90155885e+01 + 1.89533769e+01 1.88913680e+01 1.88295613e+01 1.87679561e+01 1.87065517e+01 + 1.86453474e+01 1.85843427e+01 1.85235369e+01 1.84629294e+01 1.84025194e+01 + 1.83423064e+01 1.82822898e+01 1.82224689e+01 1.81628431e+01 1.81034117e+01 + 1.80441741e+01 1.79851297e+01 1.79262779e+01 1.78676181e+01 1.78091496e+01 + 1.77508718e+01 1.76927841e+01 1.76348859e+01 1.75771766e+01 1.75196556e+01 + 1.74623222e+01 1.74051759e+01 1.73482160e+01 1.72914420e+01 1.72348532e+01 + 1.71784491e+01 1.71222290e+01 1.70661924e+01 1.70103386e+01 1.69546672e+01 + 1.68991774e+01 1.68438687e+01 1.67887405e+01 1.67337923e+01 1.66790234e+01 + 1.66244333e+01 1.65700214e+01 1.65157871e+01 1.64617298e+01 1.64078490e+01 + 1.63541441e+01 1.63006145e+01 1.62472597e+01 1.61940791e+01 1.61410721e+01 + 1.60882382e+01 1.60355768e+01 1.59830874e+01 1.59307693e+01 1.58786221e+01 + 1.58266452e+01 1.57748380e+01 1.57232000e+01 1.56717306e+01 1.56204294e+01 + 1.55692956e+01 1.55183289e+01 1.54675287e+01 1.54168943e+01 1.53664254e+01 + 1.53161213e+01 1.52659815e+01 1.52160055e+01 1.51661927e+01 1.51165427e+01 + 1.50670549e+01 1.50177287e+01 1.49685637e+01 1.49195593e+01 1.48707150e+01 + 1.48220303e+01 1.47735047e+01 1.47251376e+01 1.46769285e+01 1.46288769e+01 + 1.45809824e+01 1.45332444e+01 1.44856623e+01 1.44382358e+01 1.43909642e+01 + 1.43438471e+01 1.42968840e+01 1.42500743e+01 1.42034177e+01 1.41569135e+01 + 1.41105613e+01 1.40643606e+01 1.40183109e+01 1.39724117e+01 1.39266625e+01 + 1.38810629e+01 1.38356123e+01 1.37903103e+01 1.37451563e+01 1.37001500e+01 + 1.36552907e+01 1.36105781e+01 1.35660117e+01 1.35215910e+01 1.34773155e+01 + 1.34331847e+01 1.33891982e+01 1.33453555e+01 1.33016562e+01 1.32580997e+01 + 1.32146856e+01 1.31714135e+01 1.31282829e+01 1.30852932e+01 1.30424442e+01 + 1.29997352e+01 1.29571659e+01 1.29147358e+01 1.28724444e+01 1.28302914e+01 + 1.27882761e+01 1.27463983e+01 1.27046574e+01 1.26630530e+01 1.26215847e+01 + 1.25802519e+01 1.25390544e+01 1.24979916e+01 1.24570630e+01 1.24162684e+01 + 1.23756071e+01 1.23350789e+01 1.22946831e+01 1.22544196e+01 1.22142877e+01 + 1.21742870e+01 1.21344172e+01 1.20946778e+01 1.20550684e+01 1.20155886e+01 + 1.19762379e+01 1.19370159e+01 1.18979222e+01 1.18589564e+01 1.18201180e+01 + 1.17814067e+01 1.17428220e+01 1.17043636e+01 1.16660310e+01 1.16278237e+01 + 1.15897415e+01 1.15517839e+01 1.15139504e+01 1.14762407e+01 1.14386544e+01 + 1.14011910e+01 1.13638502e+01 1.13266316e+01 1.12895347e+01 1.12525593e+01 + 1.12157048e+01 1.11789708e+01 1.11423571e+01 1.11058632e+01 1.10694887e+01 + 1.10332332e+01 1.09970963e+01 1.09610777e+01 1.09251769e+01 1.08893936e+01 + 1.08537274e+01 1.08181779e+01 1.07827447e+01 1.07474275e+01 1.07122258e+01 + 1.06771394e+01 1.06421677e+01 1.06073105e+01 1.05725674e+01 1.05379379e+01 + 1.05034218e+01 1.04690187e+01 1.04347281e+01 1.04005498e+01 1.03664833e+01 + 1.03325283e+01 1.02986844e+01 1.02649513e+01 1.02313286e+01 1.01978159e+01 + 1.01644129e+01 1.01311193e+01 1.00979346e+01 1.00648585e+01 1.00318907e+01 + 9.99903076e+00 9.96627839e+00 9.93363322e+00 9.90109490e+00 9.86866308e+00 + 9.83614239e+00 9.80319678e+00 9.76982516e+00 9.73603257e+00 9.70182408e+00 + 9.66720477e+00 9.63217974e+00 9.59675413e+00 9.56093309e+00 9.52472178e+00 + 9.48812539e+00 9.45114912e+00 9.41379820e+00 9.37607786e+00 9.33799336e+00 + 9.29954996e+00 9.26075296e+00 9.22160764e+00 9.18211931e+00 9.14229331e+00 + 9.10213495e+00 9.06164959e+00 9.02084257e+00 8.97971926e+00 8.93828502e+00 + 8.89654524e+00 8.85450530e+00 8.81217059e+00 8.76954651e+00 8.72663845e+00 + 8.68345183e+00 8.63999205e+00 8.59626452e+00 8.55227466e+00 8.50802788e+00 + 8.46352960e+00 8.41878522e+00 8.37380017e+00 8.32857986e+00 8.28312970e+00 + 8.23745510e+00 8.19156147e+00 8.14545420e+00 8.09913868e+00 8.05262033e+00 + 8.00590451e+00 7.95899661e+00 7.91190200e+00 7.86462604e+00 7.81717409e+00 + 7.76955150e+00 7.72176361e+00 7.67381573e+00 7.62571320e+00 7.57746130e+00 + 7.52906535e+00 7.48053061e+00 7.43186235e+00 7.38306584e+00 7.33414631e+00 + 7.28510898e+00 7.23595907e+00 7.18670176e+00 7.13734225e+00 7.08788568e+00 + 7.03833721e+00 6.98870196e+00 6.93898503e+00 6.88919151e+00 6.83932648e+00 + 6.78939499e+00 6.73940205e+00 6.68935268e+00 6.63925187e+00 6.58910458e+00 + 6.53891575e+00 6.48869031e+00 6.43843314e+00 6.38814912e+00 6.33784310e+00 + 6.28751990e+00 6.23718433e+00 6.18684115e+00 6.13649511e+00 6.08615093e+00 + 6.03581331e+00 5.98548692e+00 5.93517639e+00 5.88488633e+00 5.83462134e+00 + 5.78438596e+00 5.73418472e+00 5.68402212e+00 5.63390262e+00 5.58383066e+00 + 5.53381065e+00 5.48384696e+00 5.43394394e+00 5.38410590e+00 5.33433712e+00 + 5.28464184e+00 5.23502429e+00 5.18548865e+00 5.13603907e+00 5.08667967e+00 + 5.03741453e+00 4.98824769e+00 4.93918318e+00 4.89022498e+00 4.84137703e+00 + 4.79264324e+00 4.74402749e+00 4.69553363e+00 4.64716544e+00 4.59892671e+00 + 4.55082117e+00 4.50285251e+00 4.45502439e+00 4.40734043e+00 4.35980422e+00 + 4.31241932e+00 4.26518921e+00 4.21811739e+00 4.17120729e+00 4.12446230e+00 + 4.07788579e+00 4.03148106e+00 3.98525142e+00 3.93920009e+00 3.89333028e+00 + 3.84764517e+00 3.80214787e+00 3.75684147e+00 3.71172903e+00 3.66681354e+00 + 3.62209799e+00 3.57758528e+00 3.53327833e+00 3.48917997e+00 3.44529302e+00 + 3.40162024e+00 3.35816437e+00 3.31492809e+00 3.27191405e+00 3.22912486e+00 + 3.18656308e+00 3.14423125e+00 3.10213185e+00 3.06026733e+00 3.01864009e+00 + 2.97725249e+00 2.93610687e+00 2.89520550e+00 2.85455062e+00 2.81414444e+00 + 2.77398912e+00 2.73408678e+00 2.69443950e+00 2.65504931e+00 2.61591822e+00 + 2.57704818e+00 2.53844110e+00 2.50009887e+00 2.46202332e+00 2.42421623e+00 + 2.38667938e+00 2.34941446e+00 2.31242315e+00 2.27570709e+00 2.23926786e+00 + 2.20310702e+00 2.16722608e+00 2.13162650e+00 2.09630973e+00 2.06127714e+00 + 2.02653009e+00 1.99206990e+00 1.95789783e+00 1.92401511e+00 1.89042294e+00 + 1.85712247e+00 1.82411481e+00 1.79140103e+00 1.75898217e+00 1.72685923e+00 + 1.69503316e+00 1.66350488e+00 1.63227527e+00 1.60134517e+00 1.57071538e+00 + 1.54038667e+00 1.51035976e+00 1.48063534e+00 1.45121406e+00 1.42209654e+00 + 1.39328335e+00 1.36477502e+00 1.33657207e+00 1.30867494e+00 1.28108408e+00 + 1.25379988e+00 1.22682267e+00 1.20015280e+00 1.17379052e+00 1.14773611e+00 + 1.12198975e+00 1.09655164e+00 1.07142191e+00 1.04660066e+00 1.02208796e+00 + 9.97883860e-01 9.73988350e-01 9.50401399e-01 9.27122941e-01 9.04152875e-01 + 8.81491067e-01 8.59137350e-01 8.37091523e-01 8.15353353e-01 7.93922575e-01 + 7.72798890e-01 7.51981967e-01 7.31471445e-01 7.11266929e-01 6.91367995e-01 + 6.71774185e-01 6.52485014e-01 6.33499962e-01 6.14818482e-01 5.96439995e-01 + 5.78363892e-01 5.60589536e-01 5.43116259e-01 5.25943365e-01 5.09070129e-01 + 4.92495797e-01 4.76219586e-01 4.60240687e-01 4.44558262e-01 4.29171445e-01 + 4.14079344e-01 3.99281039e-01 3.84775584e-01 3.70562007e-01 3.56639309e-01 + 3.43006466e-01 3.29662427e-01 3.16606118e-01 3.03836438e-01 2.91352263e-01 + 2.79152444e-01 2.67235806e-01 2.55601154e-01 2.44247267e-01 2.33172900e-01 + 2.22376787e-01 2.11857640e-01 2.01614145e-01 1.91644970e-01 1.81948759e-01 + 1.72524135e-01 1.63369700e-01 1.54484036e-01 1.45865702e-01 1.37513239e-01 + 1.29425168e-01 1.21599989e-01 1.14036184e-01 1.06732215e-01 9.96865252e-02 + 9.28975401e-02 8.63636667e-02 8.00832940e-02 7.40547937e-02 6.82765202e-02 + 6.27468109e-02 5.74639865e-02 5.24263517e-02 4.76321948e-02 4.30797886e-02 + 3.87673904e-02 3.46932424e-02 3.08555720e-02 2.72525920e-02 2.38825011e-02 + 2.07434841e-02 1.78337121e-02 1.51513430e-02 1.26945216e-02 1.04613800e-02 + 8.45003801e-03 6.65860321e-03 5.08517143e-03 3.72782701e-03 2.58464306e-03 + 1.65368178e-03 9.32994753e-04 4.20623265e-04 1.14598566e-04 1.29421836e-05 + 1.42532190e+04 1.42532190e+04 8.35034822e+03 5.54302535e+03 4.13949198e+03 + 3.29747342e+03 2.73621144e+03 2.33538110e+03 2.03481994e+03 1.80110437e+03 + 1.61418025e+03 1.46128584e+03 1.33391334e+03 1.22617273e+03 1.13385685e+03 + 1.05388046e+03 9.83929637e+02 9.22234903e+02 8.67420006e+02 8.18398433e+02 + 7.74300975e+02 7.34423991e+02 6.98191774e+02 6.65128743e+02 6.34838584e+02 + 6.06988393e+02 5.81296485e+02 5.57522906e+02 5.35461985e+02 5.14936419e+02 + 4.95792548e+02 4.77896540e+02 4.61131293e+02 4.45393901e+02 4.30593565e+02 + 4.16649865e+02 4.03491318e+02 3.91054168e+02 3.79281373e+02 3.68121742e+02 + 3.57529204e+02 3.47462184e+02 3.37883066e+02 3.28757736e+02 3.20055180e+02 + 3.11747144e+02 3.03807830e+02 2.96213636e+02 2.88942929e+02 2.81975842e+02 + 2.75294097e+02 2.68880852e+02 2.62720560e+02 2.56798848e+02 2.51102410e+02 + 2.45618906e+02 2.40336878e+02 2.35245675e+02 2.30335379e+02 2.25596746e+02 + 2.21021147e+02 2.16600522e+02 2.12327330e+02 2.08194509e+02 2.04195440e+02 + 2.00323909e+02 1.96574084e+02 1.92940476e+02 1.89417923e+02 1.86001562e+02 + 1.82686808e+02 1.79469334e+02 1.76345054e+02 1.73310107e+02 1.70360841e+02 + 1.67493798e+02 1.64705704e+02 1.61993454e+02 1.59354103e+02 1.56784856e+02 + 1.54283057e+02 1.51846183e+02 1.49471832e+02 1.47157720e+02 1.44901673e+02 + 1.42701615e+02 1.40555573e+02 1.38461660e+02 1.36418077e+02 1.34423107e+02 + 1.32475108e+02 1.30572512e+02 1.28713816e+02 1.26897587e+02 1.25122449e+02 + 1.23387086e+02 1.21690237e+02 1.20030692e+02 1.18407293e+02 1.16818927e+02 + 1.15264525e+02 1.13743063e+02 1.12253557e+02 1.10795059e+02 1.09366659e+02 + 1.07967484e+02 1.06596690e+02 1.05253468e+02 1.03937038e+02 1.02646649e+02 + 1.01381577e+02 1.00141124e+02 9.89246189e+01 9.77314125e+01 9.65608793e+01 + 9.54124160e+01 9.42854397e+01 9.31793879e+01 9.20937174e+01 9.10279032e+01 + 8.99814378e+01 8.89538311e+01 8.79446087e+01 8.69533121e+01 8.59794975e+01 + 8.50227355e+01 8.40826106e+01 8.31587203e+01 8.22506749e+01 8.13580969e+01 + 8.04806206e+01 7.96178913e+01 7.87695656e+01 7.79353102e+01 7.71148019e+01 + 7.63077273e+01 7.55137824e+01 7.47326719e+01 7.39641093e+01 7.32078166e+01 + 7.24635236e+01 7.17309679e+01 7.10098949e+01 7.03000567e+01 6.96012128e+01 + 6.89131293e+01 6.82355787e+01 6.75683399e+01 6.69111977e+01 6.62639431e+01 + 6.56263723e+01 6.49982874e+01 6.43794956e+01 6.37698091e+01 6.31690453e+01 + 6.25770263e+01 6.19935787e+01 6.14185338e+01 6.08517272e+01 6.02929986e+01 + 5.97421918e+01 5.91991547e+01 5.86637390e+01 5.81357998e+01 5.76151962e+01 + 5.71017906e+01 5.65954489e+01 5.60960400e+01 5.56034362e+01 5.51175129e+01 + 5.46381485e+01 5.41652242e+01 5.36986241e+01 5.32382349e+01 5.27839462e+01 + 5.23356501e+01 5.18932410e+01 5.14566160e+01 5.10256745e+01 5.06003182e+01 + 5.01804510e+01 4.97659789e+01 4.93568102e+01 4.89528552e+01 4.85540261e+01 + 4.81602371e+01 4.77714044e+01 4.73874459e+01 4.70082813e+01 4.66338322e+01 + 4.62640217e+01 4.58987746e+01 4.55380174e+01 4.51816782e+01 4.48296865e+01 + 4.44819732e+01 4.41384709e+01 4.37991135e+01 4.34638362e+01 4.31325757e+01 + 4.28052699e+01 4.24818579e+01 4.21622802e+01 4.18464784e+01 4.15343953e+01 + 4.12259749e+01 4.09211624e+01 4.06199038e+01 4.03221464e+01 4.00278386e+01 + 3.97369296e+01 3.94493698e+01 3.91651104e+01 3.88841037e+01 3.86063027e+01 + 3.83316615e+01 3.80601351e+01 3.77916792e+01 3.75262504e+01 3.72638062e+01 + 3.70043048e+01 3.67477053e+01 3.64939673e+01 3.62430514e+01 3.59949189e+01 + 3.57495317e+01 3.55068525e+01 3.52668446e+01 3.50294720e+01 3.47946994e+01 + 3.45624920e+01 3.43328158e+01 3.41056372e+01 3.38809233e+01 3.36586419e+01 + 3.34387612e+01 3.32212499e+01 3.30060774e+01 3.27932136e+01 3.25826288e+01 + 3.23742940e+01 3.21681806e+01 3.19642604e+01 3.17625057e+01 3.15628894e+01 + 3.13653847e+01 3.11699654e+01 3.09766056e+01 3.07852799e+01 3.05959632e+01 + 3.04086309e+01 3.02232588e+01 3.00398232e+01 2.98583005e+01 2.96786677e+01 + 2.95009021e+01 2.93249814e+01 2.91508835e+01 2.89785868e+01 2.88080701e+01 + 2.86393122e+01 2.84722926e+01 2.83069909e+01 2.81433870e+01 2.79814613e+01 + 2.78211942e+01 2.76625666e+01 2.75055597e+01 2.73501548e+01 2.71963336e+01 + 2.70440781e+01 2.68933704e+01 2.67441931e+01 2.65965287e+01 2.64503604e+01 + 2.63056711e+01 2.61624445e+01 2.60206641e+01 2.58803138e+01 2.57413777e+01 + 2.56038401e+01 2.54676856e+01 2.53328988e+01 2.51994647e+01 2.50673684e+01 + 2.49365953e+01 2.48071308e+01 2.46789607e+01 2.45520708e+01 2.44264471e+01 + 2.43020760e+01 2.41789438e+01 2.40570371e+01 2.39363426e+01 2.38168472e+01 + 2.36985380e+01 2.35814021e+01 2.34654270e+01 2.33506000e+01 2.32369090e+01 + 2.31243415e+01 2.30128857e+01 2.29025295e+01 2.27932611e+01 2.26850689e+01 + 2.25779413e+01 2.24718668e+01 2.23668342e+01 2.22628324e+01 2.21598501e+01 + 2.20578765e+01 2.19569007e+01 2.18569121e+01 2.17578999e+01 2.16598537e+01 + 2.15627630e+01 2.14666176e+01 2.13714072e+01 2.12771217e+01 2.11837511e+01 + 2.10912855e+01 2.09997150e+01 2.09090298e+01 2.08192204e+01 2.07302772e+01 + 2.06421906e+01 2.05549512e+01 2.04685498e+01 2.03829771e+01 2.02982239e+01 + 2.02142812e+01 2.01311398e+01 2.00487910e+01 1.99672258e+01 1.98864354e+01 + 1.98064111e+01 1.97271442e+01 1.96486262e+01 1.95708485e+01 1.94938027e+01 + 1.94174804e+01 1.93418732e+01 1.92669729e+01 1.91927713e+01 1.91192603e+01 + 1.90464316e+01 1.89742774e+01 1.89027897e+01 1.88319605e+01 1.87617819e+01 + 1.86922463e+01 1.86233458e+01 1.85550727e+01 1.84874195e+01 1.84203785e+01 + 1.83539421e+01 1.82881030e+01 1.82228537e+01 1.81581868e+01 1.80940949e+01 + 1.80305708e+01 1.79676074e+01 1.79051973e+01 1.78433334e+01 1.77820088e+01 + 1.77212163e+01 1.76609489e+01 1.76011998e+01 1.75419620e+01 1.74832287e+01 + 1.74249931e+01 1.73672484e+01 1.73099880e+01 1.72532052e+01 1.71968933e+01 + 1.71410459e+01 1.70856564e+01 1.70307183e+01 1.69762252e+01 1.69221707e+01 + 1.68685486e+01 1.68153525e+01 1.67625761e+01 1.67102134e+01 1.66582581e+01 + 1.66067041e+01 1.65555455e+01 1.65047762e+01 1.64543902e+01 1.64043816e+01 + 1.63547447e+01 1.63054735e+01 1.62565623e+01 1.62080053e+01 1.61597970e+01 + 1.61119317e+01 1.60644038e+01 1.60172077e+01 1.59703381e+01 1.59237895e+01 + 1.58775564e+01 1.58316337e+01 1.57860159e+01 1.57406980e+01 1.56956746e+01 + 1.56509407e+01 1.56064912e+01 1.55623210e+01 1.55184252e+01 1.54747989e+01 + 1.54314371e+01 1.53883351e+01 1.53454881e+01 1.53028914e+01 1.52605403e+01 + 1.52184302e+01 1.51765565e+01 1.51349148e+01 1.50935005e+01 1.50523092e+01 + 1.50113367e+01 1.49705786e+01 1.49300307e+01 1.48896888e+01 1.48495487e+01 + 1.48096064e+01 1.47698579e+01 1.47302991e+01 1.46909262e+01 1.46517353e+01 + 1.46127226e+01 1.45738843e+01 1.45352167e+01 1.44967163e+01 1.44583793e+01 + 1.44202022e+01 1.43821817e+01 1.43443142e+01 1.43065963e+01 1.42690248e+01 + 1.42315964e+01 1.41943079e+01 1.41571561e+01 1.41201380e+01 1.40832504e+01 + 1.40464903e+01 1.40098550e+01 1.39733414e+01 1.39369467e+01 1.39006681e+01 + 1.38645030e+01 1.38284486e+01 1.37925024e+01 1.37566617e+01 1.37209240e+01 + 1.36852870e+01 1.36497481e+01 1.36143050e+01 1.35789554e+01 1.35436970e+01 + 1.35085277e+01 1.34734452e+01 1.34384476e+01 1.34035326e+01 1.33686983e+01 + 1.33339428e+01 1.32992641e+01 1.32646604e+01 1.32301299e+01 1.31956707e+01 + 1.31612811e+01 1.31269596e+01 1.30927044e+01 1.30585140e+01 1.30243869e+01 + 1.29903215e+01 1.29563163e+01 1.29223701e+01 1.28884813e+01 1.28546488e+01 + 1.28208712e+01 1.27871473e+01 1.27534759e+01 1.27198558e+01 1.26862859e+01 + 1.26527651e+01 1.26192925e+01 1.25858669e+01 1.25524875e+01 1.25191534e+01 + 1.24858635e+01 1.24526171e+01 1.24194134e+01 1.23862516e+01 1.23531309e+01 + 1.23200507e+01 1.22870102e+01 1.22540087e+01 1.22210458e+01 1.21881208e+01 + 1.21552331e+01 1.21223823e+01 1.20895678e+01 1.20567892e+01 1.20240460e+01 + 1.19913379e+01 1.19586644e+01 1.19260252e+01 1.18934200e+01 1.18608486e+01 + 1.18283105e+01 1.17958056e+01 1.17633336e+01 1.17308944e+01 1.16984877e+01 + 1.16661134e+01 1.16337715e+01 1.16014616e+01 1.15691839e+01 1.15369381e+01 + 1.15047243e+01 1.14725424e+01 1.14403924e+01 1.14082743e+01 1.13761882e+01 + 1.13441340e+01 1.13121118e+01 1.12801217e+01 1.12481638e+01 1.12162382e+01 + 1.11843451e+01 1.11524844e+01 1.11206564e+01 1.10888613e+01 1.10570992e+01 + 1.10253702e+01 1.09936747e+01 1.09620128e+01 1.09303847e+01 1.08987906e+01 + 1.08672309e+01 1.08357056e+01 1.08042152e+01 1.07727598e+01 1.07413398e+01 + 1.07099554e+01 1.06786069e+01 1.06472947e+01 1.06160189e+01 1.05847800e+01 + 1.05535783e+01 1.05224140e+01 1.04912875e+01 1.04601992e+01 1.04291494e+01 + 1.03981385e+01 1.03671667e+01 1.03362344e+01 1.03053421e+01 1.02744901e+01 + 1.02436786e+01 1.02129082e+01 1.01821791e+01 1.01514918e+01 1.01208466e+01 + 1.00902439e+01 1.00596841e+01 1.00291676e+01 9.99869465e+00 9.96826576e+00 + 9.93788127e+00 9.90754156e+00 9.87724703e+00 9.84699806e+00 9.81679503e+00 + 9.78663832e+00 9.75652833e+00 9.72646541e+00 9.69644998e+00 9.66648239e+00 + 9.63656303e+00 9.60669228e+00 9.57687051e+00 9.54709811e+00 9.51737543e+00 + 9.48770285e+00 9.45808075e+00 9.42850948e+00 9.39898941e+00 9.36952091e+00 + 9.34010432e+00 9.31074002e+00 9.28142834e+00 9.25216964e+00 9.22296427e+00 + 9.19381257e+00 9.16471488e+00 9.13567154e+00 9.10668288e+00 9.07774924e+00 + 9.04887094e+00 9.02004831e+00 8.99128166e+00 8.96257131e+00 8.93391757e+00 + 8.90532075e+00 8.87678116e+00 8.84829910e+00 8.81987485e+00 8.79150872e+00 + 8.76320099e+00 8.73495195e+00 8.70676187e+00 8.67863103e+00 8.65055970e+00 + 8.62254815e+00 8.59459664e+00 8.56670543e+00 8.53887477e+00 8.51110492e+00 + 8.48339611e+00 8.45574859e+00 8.42816259e+00 8.40063835e+00 8.37317608e+00 + 8.34577603e+00 8.31843839e+00 8.29116339e+00 8.26395124e+00 8.23680214e+00 + 8.20971629e+00 8.18269388e+00 8.15573511e+00 8.12884017e+00 8.10200923e+00 + 8.07524248e+00 8.04854008e+00 8.02190221e+00 7.99532904e+00 7.96882072e+00 + 7.94237740e+00 7.91599925e+00 7.88968640e+00 7.86343901e+00 7.83725720e+00 + 7.81114112e+00 7.78509089e+00 7.75910664e+00 7.73318849e+00 7.70733656e+00 + 7.68155097e+00 7.65583181e+00 7.63017921e+00 7.60459325e+00 7.57907404e+00 + 7.55362167e+00 7.52823623e+00 7.50291780e+00 7.47766647e+00 7.45248231e+00 + 7.42736540e+00 7.40231580e+00 7.37733359e+00 7.35241882e+00 7.32757156e+00 + 7.30279186e+00 7.27807976e+00 7.25343533e+00 7.22885860e+00 7.20434961e+00 + 7.17990840e+00 7.15553501e+00 7.13122946e+00 7.10699178e+00 7.08282200e+00 + 7.05872014e+00 7.03468621e+00 7.01072022e+00 6.98682220e+00 6.96299214e+00 + 6.93923004e+00 6.91553592e+00 6.89190977e+00 6.86835159e+00 6.84486136e+00 + 6.82143907e+00 6.79808472e+00 6.77479828e+00 6.75157975e+00 6.72842908e+00 + 6.70534627e+00 6.68233128e+00 6.65938408e+00 6.63650464e+00 6.61369293e+00 + 6.59094890e+00 6.56827252e+00 6.54566374e+00 6.52312252e+00 6.50064881e+00 + 6.47824255e+00 6.45590371e+00 6.43363221e+00 6.41142801e+00 6.38929105e+00 + 6.36722125e+00 6.34521857e+00 6.32328293e+00 6.30141427e+00 6.27961251e+00 + 6.25787758e+00 6.23620941e+00 6.21460793e+00 6.19307305e+00 6.17160469e+00 + 6.15020277e+00 6.12886721e+00 6.10759793e+00 6.08639483e+00 6.06525782e+00 + 6.04418682e+00 6.02318173e+00 6.00224246e+00 5.98136891e+00 5.96056098e+00 + 5.93981858e+00 5.91914161e+00 5.89852995e+00 5.87798352e+00 5.85750219e+00 + 5.83708588e+00 5.81673446e+00 5.79644783e+00 5.77622588e+00 5.75606849e+00 + 5.73597556e+00 5.71594697e+00 5.69598259e+00 5.67608233e+00 5.65624605e+00 + 5.63647363e+00 5.61676497e+00 5.59711992e+00 5.57753838e+00 5.55802022e+00 + 5.53856531e+00 5.51917352e+00 5.49984474e+00 5.48057882e+00 5.46137565e+00 + 5.44223509e+00 5.42315701e+00 5.40414129e+00 5.38518777e+00 5.36629635e+00 + 5.34746687e+00 5.32869920e+00 5.30999322e+00 5.29134877e+00 5.27276573e+00 + 5.25424395e+00 5.23578330e+00 5.21738364e+00 5.19904482e+00 5.18076671e+00 + 5.16254917e+00 5.14439204e+00 5.12629520e+00 5.10825849e+00 5.09028177e+00 + 5.07236490e+00 5.05450773e+00 5.03671012e+00 5.01897192e+00 5.00129298e+00 + 4.98367316e+00 4.96611231e+00 4.94861028e+00 4.93116692e+00 4.91378209e+00 + 4.89645563e+00 4.87918740e+00 4.86197724e+00 4.84482501e+00 4.82773055e+00 + 4.81069372e+00 4.79371436e+00 4.77679233e+00 4.75992746e+00 4.74311961e+00 + 4.72636862e+00 4.70967435e+00 4.69303663e+00 4.67645533e+00 4.65993027e+00 + 4.64346132e+00 4.62704831e+00 4.61069110e+00 4.59438952e+00 4.57814343e+00 + 4.56195267e+00 4.54581708e+00 4.52973652e+00 4.51371082e+00 4.49773984e+00 + 4.48182341e+00 4.46596139e+00 4.45015361e+00 4.43439993e+00 4.41870018e+00 + 4.40305422e+00 4.38746188e+00 4.37192301e+00 4.35643746e+00 4.34100508e+00 + 4.32562570e+00 4.31029917e+00 4.29502534e+00 4.27980405e+00 4.26463514e+00 + 4.24951847e+00 4.23445387e+00 4.21944120e+00 4.20448029e+00 4.18957099e+00 + 4.17471315e+00 4.15990661e+00 4.14515122e+00 4.13044682e+00 4.11579326e+00 + 4.10119038e+00 4.08663804e+00 4.07213607e+00 4.05768433e+00 4.04328265e+00 + 4.02893089e+00 4.01462889e+00 4.00037650e+00 3.98617357e+00 3.97201993e+00 + 3.95791545e+00 3.94385997e+00 3.92985333e+00 3.91589538e+00 3.90198597e+00 + 3.88812495e+00 3.87431217e+00 3.86054747e+00 3.84683071e+00 3.83316173e+00 + 3.81954038e+00 3.80596652e+00 3.79243998e+00 3.77896063e+00 3.76552831e+00 + 3.75214287e+00 3.73880416e+00 3.72551204e+00 3.71226635e+00 3.69906694e+00 + 3.68591367e+00 3.67280639e+00 3.65974495e+00 3.64672921e+00 3.63375901e+00 + 3.62083421e+00 3.60795466e+00 3.59512021e+00 3.58233073e+00 3.56958605e+00 + 3.55688605e+00 3.54423056e+00 3.53161946e+00 3.51905258e+00 3.50652979e+00 + 3.49405095e+00 3.48161590e+00 3.46922451e+00 3.45687663e+00 3.44457213e+00 + 3.43231084e+00 3.42009264e+00 3.40791739e+00 3.39578493e+00 3.38369513e+00 + 3.37164785e+00 3.35964295e+00 3.34768028e+00 3.33575971e+00 3.32388109e+00 + 3.31204429e+00 3.30024917e+00 3.28849559e+00 3.27678341e+00 3.26511249e+00 + 3.25348269e+00 3.24189388e+00 3.23034592e+00 3.21883867e+00 3.20737200e+00 + 3.19594577e+00 3.18455984e+00 3.17321408e+00 3.16190835e+00 3.15064252e+00 + 3.13941646e+00 3.12823003e+00 3.11708309e+00 3.10597552e+00 3.09490717e+00 + 3.08387793e+00 3.07288764e+00 3.06193620e+00 3.05102345e+00 3.04014927e+00 + 3.02931353e+00 3.01851611e+00 3.00775685e+00 2.99703565e+00 2.98635237e+00 + 2.97570688e+00 2.96509904e+00 2.95452874e+00 2.94399585e+00 2.93350023e+00 + 2.92304176e+00 2.91262032e+00 2.90223577e+00 2.89188799e+00 2.88157685e+00 + 2.87130223e+00 2.86106401e+00 2.85086205e+00 2.84069624e+00 2.83056645e+00 + 2.82047255e+00 2.81041442e+00 2.80039195e+00 2.79040500e+00 2.78045345e+00 + 2.77053719e+00 2.76065609e+00 2.75081003e+00 2.74099889e+00 2.73122254e+00 + 2.72148088e+00 2.71177377e+00 2.70210110e+00 2.69246275e+00 2.68285861e+00 + 2.67328854e+00 2.66375244e+00 2.65425019e+00 2.64478167e+00 2.63534676e+00 + 2.62594535e+00 2.61657732e+00 2.60724255e+00 2.59794093e+00 2.58867235e+00 + 2.57943668e+00 2.57023382e+00 2.56106365e+00 2.55192606e+00 2.54282093e+00 + 2.53374816e+00 2.52470762e+00 2.51569920e+00 2.50672280e+00 2.49777830e+00 + 2.48886559e+00 2.47998457e+00 2.47113511e+00 2.46231711e+00 2.45353046e+00 + 2.44477506e+00 2.43605078e+00 2.42735752e+00 2.41869518e+00 2.41006365e+00 + 2.40146281e+00 2.39289257e+00 2.38435280e+00 2.37584342e+00 2.36736430e+00 + 2.35891535e+00 2.35049646e+00 2.34210752e+00 2.33374843e+00 2.32541909e+00 + 2.31711938e+00 2.30884921e+00 2.30060847e+00 2.29239706e+00 2.28421488e+00 + 2.27606182e+00 2.26793778e+00 2.25984266e+00 2.25177636e+00 2.24373877e+00 + 2.23572980e+00 2.22774934e+00 2.21979730e+00 2.21187357e+00 2.20397806e+00 + 2.19611066e+00 2.18827128e+00 2.18045982e+00 2.17267618e+00 2.16492026e+00 + 2.15719196e+00 2.14949119e+00 2.14181785e+00 2.13417184e+00 2.12655307e+00 + 2.11896144e+00 2.11139686e+00 2.10385922e+00 2.09634844e+00 2.08886442e+00 + 2.08140707e+00 2.07397629e+00 2.06657198e+00 2.05919406e+00 2.05184243e+00 + 2.04451700e+00 2.03721767e+00 2.02994436e+00 2.02269697e+00 2.01547541e+00 + 2.00827959e+00 2.00110941e+00 1.99396479e+00 1.98684564e+00 1.97975187e+00 + 1.97268338e+00 1.96564009e+00 1.95862191e+00 1.95162875e+00 1.94466051e+00 + 1.93771713e+00 1.93079849e+00 1.92390453e+00 1.91703514e+00 1.91019025e+00 + 1.90336976e+00 1.89657359e+00 1.88980166e+00 1.88305387e+00 1.87633015e+00 + 1.86963040e+00 1.86295454e+00 1.85630249e+00 1.84967417e+00 1.84306948e+00 + 1.83648835e+00 1.82993069e+00 1.82339642e+00 1.81688545e+00 1.81039771e+00 + 1.80393311e+00 1.79749156e+00 1.79107300e+00 1.78467732e+00 1.77830446e+00 + 1.77195434e+00 1.76562686e+00 1.75932196e+00 1.75303955e+00 1.74677955e+00 + 1.74054188e+00 1.73432647e+00 1.72813323e+00 1.72196208e+00 1.71581295e+00 + 1.70968576e+00 1.70358043e+00 1.69749689e+00 1.69143505e+00 1.68539483e+00 + 1.67937617e+00 1.67337899e+00 1.66740320e+00 1.66144874e+00 1.65551552e+00 + 1.64960347e+00 1.64371252e+00 1.63784260e+00 1.63199361e+00 1.62616550e+00 + 1.62035819e+00 1.61457160e+00 1.60880567e+00 1.60306030e+00 1.59733545e+00 + 1.59163102e+00 1.58594695e+00 1.58028317e+00 1.57463960e+00 1.56901617e+00 + 1.56341281e+00 1.55782945e+00 1.55226601e+00 1.54672244e+00 1.54119865e+00 + 1.53569457e+00 1.53021014e+00 1.52474528e+00 1.51929993e+00 1.51387402e+00 + 1.50846747e+00 1.50308023e+00 1.49771221e+00 1.49236335e+00 1.48703358e+00 + 1.48172284e+00 1.47643106e+00 1.47115816e+00 1.46590409e+00 1.46066878e+00 + 1.45545215e+00 1.45025414e+00 1.44507469e+00 1.43991373e+00 1.43477119e+00 + 1.42964701e+00 1.42454112e+00 1.41945346e+00 1.41438397e+00 1.40933257e+00 + 1.40429920e+00 1.39928380e+00 1.39428631e+00 1.38930666e+00 1.38434479e+00 + 1.37940063e+00 1.37447412e+00 1.36956521e+00 1.36467381e+00 1.35979988e+00 + 1.35494335e+00 1.35010416e+00 1.34528225e+00 1.34047755e+00 1.33569001e+00 + 1.33091956e+00 1.32616615e+00 1.32142970e+00 1.31671017e+00 1.31200748e+00 + 1.30732159e+00 1.30265243e+00 1.29799993e+00 1.29336405e+00 1.28874473e+00 + 1.28414189e+00 1.27955549e+00 1.27498547e+00 1.27043177e+00 1.26589432e+00 + 1.26137308e+00 1.25686798e+00 1.25237896e+00 1.24790598e+00 1.24344896e+00 + 1.23900786e+00 1.23458262e+00 1.23017318e+00 1.22577949e+00 1.22140148e+00 + 1.21703911e+00 1.21269231e+00 1.20836104e+00 1.20404523e+00 1.19974484e+00 + 1.19545980e+00 1.19119006e+00 1.18693557e+00 1.18269627e+00 1.17847210e+00 + 1.17426303e+00 1.17006898e+00 1.16588991e+00 1.16172576e+00 1.15757649e+00 + 1.15344203e+00 1.14932233e+00 1.14521735e+00 1.14112702e+00 1.13705130e+00 + 1.13299014e+00 1.12894348e+00 1.12491127e+00 1.12089346e+00 1.11689000e+00 + 1.11290083e+00 1.10892591e+00 1.10496519e+00 1.10101861e+00 1.09708612e+00 + 1.09316768e+00 1.08926323e+00 1.08537272e+00 1.08149611e+00 1.07763334e+00 + 1.07378437e+00 1.06994914e+00 1.06612761e+00 1.06231972e+00 1.05852544e+00 + 1.05474470e+00 1.05097747e+00 1.04722369e+00 1.04348332e+00 1.03975630e+00 + 1.03604260e+00 1.03234216e+00 1.02865493e+00 1.02498087e+00 1.02131993e+00 + 1.01767207e+00 1.01403724e+00 1.01041538e+00 1.00680646e+00 1.00321043e+00 + 9.99627246e-01 9.96056856e-01 9.92499216e-01 9.88954283e-01 9.85422010e-01 + 9.81902352e-01 9.78395264e-01 9.74900702e-01 9.71418620e-01 9.67948974e-01 + 9.64491719e-01 9.61046812e-01 9.57614208e-01 9.54193864e-01 9.50785735e-01 + 9.47389779e-01 9.44005950e-01 9.40634207e-01 9.37274506e-01 9.33926805e-01 + 9.30591059e-01 9.27267227e-01 9.23955266e-01 9.20655134e-01 9.17366788e-01 + 9.14090187e-01 9.10825288e-01 9.07572050e-01 9.04330430e-01 9.01100389e-01 + 8.97881883e-01 8.94674872e-01 8.91479316e-01 8.88295172e-01 8.85122401e-01 + 8.81960962e-01 8.78810814e-01 8.75671916e-01 8.72544230e-01 8.69427714e-01 + 8.66322329e-01 8.63228035e-01 8.60144793e-01 8.57072563e-01 8.54011306e-01 + 8.50960982e-01 8.47921552e-01 8.44892979e-01 8.41875222e-01 8.38868243e-01 + 8.35872004e-01 8.32886467e-01 8.29911592e-01 8.26947343e-01 8.23993681e-01 + 8.21050568e-01 8.18117967e-01 8.15195841e-01 8.12284151e-01 8.09382860e-01 + 8.06491932e-01 8.03611329e-01 8.00741015e-01 7.97880952e-01 7.95031104e-01 + 7.92191436e-01 7.89361909e-01 7.86542489e-01 7.83733138e-01 7.80932737e-01 + 7.78135481e-01 7.75340559e-01 7.72548015e-01 7.69757898e-01 7.66970253e-01 + 7.64185126e-01 7.61402562e-01 7.58622607e-01 7.55845306e-01 7.53070703e-01 + 7.50298843e-01 7.47529769e-01 7.44763525e-01 7.42000155e-01 7.39239702e-01 + 7.36482208e-01 7.33727716e-01 7.30976267e-01 7.28227905e-01 7.25482670e-01 + 7.22740604e-01 7.20001747e-01 7.17266140e-01 7.14533823e-01 7.11804837e-01 + 7.09079221e-01 7.06357014e-01 7.03638256e-01 7.00922986e-01 6.98211241e-01 + 6.95503060e-01 6.92798481e-01 6.90097542e-01 6.87400280e-01 6.84706731e-01 + 6.82016933e-01 6.79330922e-01 6.76648734e-01 6.73970405e-01 6.71295970e-01 + 6.68625464e-01 6.65958924e-01 6.63296382e-01 6.60637874e-01 6.57983434e-01 + 6.55333095e-01 6.52686890e-01 6.50044854e-01 6.47407019e-01 6.44773417e-01 + 6.42144081e-01 6.39519042e-01 6.36898334e-01 6.34281986e-01 6.31670031e-01 + 6.29062499e-01 6.26459420e-01 6.23860826e-01 6.21266746e-01 6.18677209e-01 + 6.16092246e-01 6.13511886e-01 6.10936157e-01 6.08365088e-01 6.05798708e-01 + 6.03237045e-01 6.00680126e-01 5.98127979e-01 5.95580631e-01 5.93038110e-01 + 5.90500441e-01 5.87967652e-01 5.85439769e-01 5.82916817e-01 5.80398823e-01 + 5.77885811e-01 5.75377807e-01 5.72874835e-01 5.70376921e-01 5.67884088e-01 + 5.65396360e-01 5.62913762e-01 5.60436316e-01 5.57964047e-01 5.55496977e-01 + 5.53035128e-01 5.50578524e-01 5.48127187e-01 5.45681138e-01 5.43240399e-01 + 5.40804991e-01 5.38374937e-01 5.35950256e-01 5.33530970e-01 5.31117099e-01 + 5.28708663e-01 5.26305682e-01 5.23908176e-01 5.21516164e-01 5.19129666e-01 + 5.16748699e-01 5.14373284e-01 5.12003438e-01 5.09639180e-01 5.07280528e-01 + 5.04927499e-01 5.02580111e-01 5.00238381e-01 4.97902326e-01 4.95571964e-01 + 4.93247309e-01 4.90928379e-01 4.88615190e-01 4.86307758e-01 4.84006098e-01 + 4.81710225e-01 4.79420155e-01 4.77135903e-01 4.74857483e-01 4.72584909e-01 + 4.70318196e-01 4.68057358e-01 4.65802409e-01 4.63553362e-01 4.61310230e-01 + 4.59073026e-01 4.56841764e-01 4.54616456e-01 4.52397114e-01 4.50183750e-01 + 4.47976377e-01 4.45775007e-01 4.43579650e-01 4.41390318e-01 4.39207022e-01 + 4.37029774e-01 4.34858583e-01 4.32693460e-01 4.30534416e-01 4.28381460e-01 + 4.26234603e-01 4.24093854e-01 4.21959222e-01 4.19830716e-01 4.17708346e-01 + 4.15592121e-01 4.13482048e-01 4.11378137e-01 4.09280395e-01 4.07188831e-01 + 4.05103452e-01 4.03024267e-01 4.00951281e-01 3.98884503e-01 3.96823939e-01 + 3.94769597e-01 3.92721483e-01 3.90679603e-01 3.88643963e-01 3.86614570e-01 + 3.84591429e-01 3.82574547e-01 3.80563928e-01 3.78559578e-01 3.76561502e-01 + 3.74569704e-01 3.72584190e-01 3.70604965e-01 3.68632031e-01 3.66665395e-01 + 3.64705058e-01 3.62751027e-01 3.60803303e-01 3.58861891e-01 3.56926793e-01 + 3.54998014e-01 3.53075555e-01 3.51159420e-01 3.49249611e-01 3.47346130e-01 + 3.45448981e-01 3.43558164e-01 3.41673682e-01 3.39795537e-01 3.37923729e-01 + 3.36058261e-01 3.34199134e-01 3.32346349e-01 3.30499906e-01 3.28659807e-01 + 3.26826052e-01 3.24998641e-01 3.23177575e-01 3.21362854e-01 3.19554477e-01 + 3.17752446e-01 3.15956758e-01 3.14167414e-01 3.12384413e-01 3.10607754e-01 + 3.08837437e-01 3.07073459e-01 3.05315821e-01 3.03564519e-01 3.01819554e-01 + 3.00080922e-01 2.98348623e-01 2.96622654e-01 2.94903013e-01 2.93189698e-01 + 2.91482706e-01 2.89782035e-01 2.88087682e-01 2.86399644e-01 2.84717918e-01 + 2.83042501e-01 2.81373389e-01 2.79710580e-01 2.78054070e-01 2.76403855e-01 + 2.74759931e-01 2.73122294e-01 2.71490940e-01 2.69865865e-01 2.68247065e-01 + 2.66634536e-01 2.65028271e-01 2.63428268e-01 2.61834520e-01 2.60247024e-01 + 2.58665773e-01 2.57090764e-01 2.55521989e-01 2.53959444e-01 2.52403124e-01 + 2.50853022e-01 2.49309133e-01 2.47771451e-01 2.46239969e-01 2.44714682e-01 + 2.43195584e-01 2.41682667e-01 2.40175925e-01 2.38675352e-01 2.37180941e-01 + 2.35692686e-01 2.34210578e-01 2.32734611e-01 2.31264778e-01 2.29801072e-01 + 2.28343485e-01 2.26892010e-01 2.25446638e-01 2.24007363e-01 2.22574177e-01 + 2.21147071e-01 2.19726037e-01 2.18311068e-01 2.16902156e-01 2.15499291e-01 + 2.14102466e-01 2.12711671e-01 2.11326899e-01 2.09948141e-01 2.08575387e-01 + 2.07208630e-01 2.05847859e-01 2.04493066e-01 2.03144242e-01 2.01801377e-01 + 2.00464463e-01 1.99133489e-01 1.97808446e-01 1.96489324e-01 1.95176114e-01 + 1.93868806e-01 1.92567391e-01 1.91271857e-01 1.89982196e-01 1.88698396e-01 + 1.87420448e-01 1.86148342e-01 1.84882066e-01 1.83621611e-01 1.82366967e-01 + 1.81118121e-01 1.79875065e-01 1.78637786e-01 1.77406275e-01 1.76180520e-01 + 1.74960510e-01 1.73746235e-01 1.72537682e-01 1.71334841e-01 1.70137701e-01 + 1.68946250e-01 1.67760477e-01 1.66580371e-01 1.65405919e-01 1.64237110e-01 + 1.63073933e-01 1.61916375e-01 1.60764425e-01 1.59618071e-01 1.58477302e-01 + 1.57342104e-01 1.56212466e-01 1.55088376e-01 1.53969822e-01 1.52856791e-01 + 1.51749271e-01 1.50647250e-01 1.49550715e-01 1.48459654e-01 1.47374054e-01 + 1.46293903e-01 1.45219188e-01 1.44149895e-01 1.43086014e-01 1.42027530e-01 + 1.40974430e-01 1.39926703e-01 1.38884334e-01 1.37847312e-01 1.36815622e-01 + 1.35789251e-01 1.34768187e-01 1.33752417e-01 1.32741926e-01 1.31736702e-01 + 1.30736731e-01 1.29742001e-01 1.28752496e-01 1.27768205e-01 1.26789113e-01 + 1.25815206e-01 1.24846472e-01 1.23882897e-01 1.22924466e-01 1.21971167e-01 + 1.21022984e-01 1.20079906e-01 1.19141916e-01 1.18209003e-01 1.17281151e-01 + 1.16358347e-01 1.15440577e-01 1.14527827e-01 1.13620082e-01 1.12717329e-01 + 1.11819553e-01 1.10926741e-01 1.10038877e-01 1.09155949e-01 1.08277940e-01 + 1.07404838e-01 1.06536628e-01 1.05673296e-01 1.04814826e-01 1.03961206e-01 + 1.03112419e-01 1.02268453e-01 1.01429291e-01 1.00594921e-01 9.97653261e-02 + 9.89404933e-02 9.81204076e-02 9.73050542e-02 9.64944186e-02 9.56884861e-02 + 9.48872421e-02 9.40906717e-02 9.32987602e-02 9.25114930e-02 9.17288552e-02 + 9.09508321e-02 9.01774088e-02 8.94085704e-02 8.86443023e-02 8.78845894e-02 + 8.71294169e-02 8.63787700e-02 8.56326336e-02 8.48909929e-02 8.41538330e-02 + 8.34211388e-02 8.26928954e-02 8.19690879e-02 8.12497011e-02 8.05347202e-02 + 7.98241301e-02 7.91179157e-02 7.84160621e-02 7.77185541e-02 7.70253768e-02 + 7.63365150e-02 7.56519536e-02 7.49716776e-02 7.42956719e-02 7.36239214e-02 + 7.29564109e-02 7.22931253e-02 7.16340496e-02 7.09791686e-02 7.03284671e-02 + 6.96819300e-02 6.90395422e-02 6.84012886e-02 6.77671539e-02 6.71371231e-02 + 6.65111809e-02 6.58893122e-02 6.52715019e-02 6.46577348e-02 6.40479958e-02 + 6.34422696e-02 6.28405411e-02 6.22427951e-02 6.16490165e-02 6.10591902e-02 + 6.04733010e-02 5.98913336e-02 5.93132730e-02 5.87391041e-02 5.81688116e-02 + 5.76023804e-02 5.70397954e-02 5.64810414e-02 5.59261034e-02 5.53749662e-02 + 5.48276146e-02 5.42840336e-02 5.37442081e-02 5.32081229e-02 5.26757629e-02 + 5.21471132e-02 5.16221585e-02 5.11008839e-02 5.05832742e-02 5.00693144e-02 + 4.95589895e-02 4.90522845e-02 4.85491842e-02 4.80496738e-02 4.75537381e-02 + 4.70613623e-02 4.65725312e-02 4.60872300e-02 4.56054437e-02 4.51271574e-02 + 4.46523560e-02 4.41810248e-02 4.37131487e-02 4.32487129e-02 4.27877026e-02 + 4.23301028e-02 4.18758987e-02 4.14250754e-02 4.09776182e-02 4.05335123e-02 + 4.00927428e-02 3.96552949e-02 3.92211540e-02 3.87903053e-02 3.83627340e-02 + 3.79384255e-02 3.75173650e-02 3.70995379e-02 3.66849296e-02 3.62735253e-02 + 3.58653105e-02 3.54602706e-02 3.50583911e-02 3.46596572e-02 3.42640546e-02 + 3.38715687e-02 3.34821850e-02 3.30958890e-02 3.27126662e-02 3.23325023e-02 + 3.19553828e-02 3.15812932e-02 3.12102194e-02 3.08421468e-02 3.04770612e-02 + 3.01149482e-02 2.97557936e-02 2.93995832e-02 2.90463026e-02 2.86959377e-02 + 2.83484743e-02 2.80038982e-02 2.76621952e-02 2.73233514e-02 2.69873525e-02 + 2.66541845e-02 2.63238333e-02 2.59962850e-02 2.56715256e-02 2.53495410e-02 + 2.50303174e-02 2.47138408e-02 2.44000974e-02 2.40890733e-02 2.37807546e-02 + 2.34751275e-02 2.31721784e-02 2.28718933e-02 2.25742587e-02 2.22792607e-02 + 2.19868858e-02 2.16971202e-02 2.14099505e-02 2.11253629e-02 2.08433439e-02 + 2.05638801e-02 2.02869579e-02 2.00125638e-02 1.97406844e-02 1.94713063e-02 + 1.92044162e-02 1.89400006e-02 1.86780462e-02 1.84185398e-02 1.81614681e-02 + 1.79068179e-02 1.76545759e-02 1.74047290e-02 1.71572641e-02 1.69121681e-02 + 1.66694279e-02 1.64290304e-02 1.61909626e-02 1.59552116e-02 1.57217644e-02 + 1.54906081e-02 1.52617298e-02 1.50351167e-02 1.48107559e-02 1.45886347e-02 + 1.43687403e-02 1.41510600e-02 1.39355811e-02 1.37222909e-02 1.35111769e-02 + 1.33022264e-02 1.30954269e-02 1.28907658e-02 1.26882308e-02 1.24878092e-02 + 1.22894888e-02 1.20932571e-02 1.18991017e-02 1.17070104e-02 1.15169709e-02 + 1.13289709e-02 1.11429983e-02 1.09590407e-02 1.07770862e-02 1.05971226e-02 + 1.04191377e-02 1.02431196e-02 1.00690563e-02 9.89693584e-03 9.72674620e-03 + 9.55847554e-03 9.39211199e-03 9.22764373e-03 9.06505895e-03 8.90434592e-03 + 8.74549290e-03 8.58848822e-03 8.43332023e-03 8.27997732e-03 8.12844792e-03 + 7.97872048e-03 7.83078350e-03 7.68462553e-03 7.54023512e-03 7.39760089e-03 + 7.25671149e-03 7.11755558e-03 6.98012189e-03 6.84439918e-03 6.71037622e-03 + 6.57804186e-03 6.44738496e-03 6.31839441e-03 6.19105916e-03 6.06536818e-03 + 5.94131048e-03 5.81887512e-03 5.69805119e-03 5.57882780e-03 5.46119412e-03 + 5.34513934e-03 5.23065272e-03 5.11772351e-03 5.00634104e-03 4.89649464e-03 + 4.78817372e-03 4.68136769e-03 4.57606601e-03 4.47225819e-03 4.36993376e-03 + 4.26908230e-03 4.16969342e-03 4.07175677e-03 3.97526205e-03 3.88019897e-03 + 3.78655730e-03 3.69432685e-03 3.60349746e-03 3.51405899e-03 3.42600138e-03 + 3.33931457e-03 3.25398856e-03 3.17001338e-03 3.08737909e-03 3.00607580e-03 + 2.92609366e-03 2.84742285e-03 2.77005359e-03 2.69397614e-03 2.61918079e-03 + 2.54565788e-03 2.47339778e-03 2.40239090e-03 2.33262770e-03 2.26409866e-03 + 2.19679431e-03 2.13070520e-03 2.06582195e-03 2.00213518e-03 1.93963558e-03 + 1.87831387e-03 1.81816080e-03 1.75916715e-03 1.70132377e-03 1.64462151e-03 + 1.58905129e-03 1.53460405e-03 1.48127077e-03 1.42904247e-03 1.37791021e-03 + 1.32786509e-03 1.27889824e-03 1.23100083e-03 1.18416408e-03 1.13837922e-03 + 1.09363756e-03 1.04993040e-03 1.00724912e-03 9.65585108e-04 9.24929807e-04 + 8.85274690e-04 8.46611271e-04 8.08931100e-04 7.72225766e-04 7.36486893e-04 + 7.01706146e-04 6.67875227e-04 6.34985873e-04 6.03029860e-04 5.71999004e-04 + 5.41885154e-04 5.12680200e-04 4.84376068e-04 4.56964721e-04 4.30438160e-04 + 4.04788423e-04 3.80007585e-04 3.56087759e-04 3.33021095e-04 3.10799778e-04 + 2.89416035e-04 2.68862124e-04 2.49130345e-04 2.30213031e-04 2.12102556e-04 + 1.94791327e-04 1.78271789e-04 1.62536427e-04 1.47577757e-04 1.33388336e-04 + 1.19960756e-04 1.07287646e-04 9.53616714e-05 8.41755336e-05 7.37219709e-05 + 6.39937580e-05 5.49837057e-05 4.66846611e-05 3.90895074e-05 3.21911642e-05 + 2.59825869e-05 2.04567671e-05 1.56067322e-05 1.14255457e-05 7.90630673e-06 + 5.04215042e-06 2.82624746e-06 1.25180428e-06 3.12062870e-07 0.00000000e+00 + 2.22608225e+06 1.58349819e+06 7.81810035e+05 5.14720588e+05 3.81277804e+05 + 3.01291353e+05 2.48031186e+05 2.10041621e+05 1.81594861e+05 1.59508832e+05 + 1.41874326e+05 1.27476419e+05 1.15505188e+05 1.05399940e+05 9.67601994e+04 + 8.92923040e+04 8.27760232e+04 7.70429606e+04 7.19621553e+04 6.74302297e+04 + 6.33644936e+04 5.96980178e+04 5.63760523e+04 5.33533778e+04 5.05923202e+04 + 4.80612410e+04 4.57333767e+04 4.35859354e+04 4.15993877e+04 3.97569038e+04 + 3.80439035e+04 3.64476930e+04 3.49571701e+04 3.35625831e+04 3.22553317e+04 + 3.10278024e+04 2.98732316e+04 2.87855905e+04 2.77594881e+04 2.67900896e+04 + 2.58730467e+04 2.50044379e+04 2.41807181e+04 2.33986745e+04 2.26553884e+04 + 2.19482032e+04 2.12746952e+04 2.06326489e+04 2.00200357e+04 1.94349939e+04 + 1.88758129e+04 1.83409177e+04 1.78288558e+04 1.73382861e+04 1.68679681e+04 + 1.64167529e+04 1.59835747e+04 1.55674439e+04 1.51674403e+04 1.47827070e+04 + 1.44124453e+04 1.40559100e+04 1.37124046e+04 1.33812782e+04 1.30619208e+04 + 1.27537613e+04 1.24562637e+04 1.21689247e+04 1.18912715e+04 1.16228592e+04 + 1.13632689e+04 1.11121063e+04 1.08689990e+04 1.06335961e+04 1.04055659e+04 + 1.01845949e+04 9.97038669e+03 9.76266069e+03 9.56115111e+03 9.36560607e+03 + 9.17578669e+03 8.99146627e+03 8.81242953e+03 8.63847193e+03 8.46939900e+03 + 8.30502576e+03 8.14517614e+03 7.98968245e+03 7.83838493e+03 7.69113127e+03 + 7.54777618e+03 7.40818102e+03 7.27221341e+03 7.13974691e+03 7.01066068e+03 + 6.88483917e+03 6.76217186e+03 6.64255298e+03 6.52588127e+03 6.41205975e+03 + 6.30099549e+03 6.19259938e+03 6.08678602e+03 5.98347343e+03 5.88258297e+03 + 5.78403912e+03 5.68776935e+03 5.59370398e+03 5.50177603e+03 5.41192111e+03 + 5.32407728e+03 5.23818495e+03 5.15418678e+03 5.07202755e+03 4.99165408e+03 + 4.91301515e+03 4.83606139e+03 4.76074521e+03 4.68702073e+03 4.61484368e+03 + 4.54417137e+03 4.47496258e+03 4.40717752e+03 4.34077778e+03 4.27572626e+03 + 4.21198709e+03 4.14952564e+03 4.08830841e+03 4.02830302e+03 3.96947815e+03 + 3.91180349e+03 3.85524973e+03 3.79978850e+03 3.74539232e+03 3.69203459e+03 + 3.63968956e+03 3.58833225e+03 3.53793850e+03 3.48848485e+03 3.43994858e+03 + 3.39230768e+03 3.34554075e+03 3.29962709e+03 3.25454659e+03 3.21027972e+03 + 3.16680755e+03 3.12411169e+03 3.08217429e+03 3.04097801e+03 3.00050601e+03 + 2.96074193e+03 2.92166985e+03 2.88327434e+03 2.84554037e+03 2.80845334e+03 + 2.77199904e+03 2.73616366e+03 2.70093376e+03 2.66629629e+03 2.63223850e+03 + 2.59874804e+03 2.56581284e+03 2.53342118e+03 2.50156163e+03 2.47022308e+03 + 2.43939468e+03 2.40906589e+03 2.37922642e+03 2.34986625e+03 2.32097563e+03 + 2.29254502e+03 2.26456516e+03 2.23702699e+03 2.20992170e+03 2.18324069e+03 + 2.15697556e+03 2.13111812e+03 2.10566040e+03 2.08059459e+03 2.05591310e+03 + 2.03160849e+03 2.00767354e+03 1.98410115e+03 1.96088443e+03 1.93801663e+03 + 1.91549116e+03 1.89330159e+03 1.87144164e+03 1.84990517e+03 1.82868617e+03 + 1.80777879e+03 1.78717729e+03 1.76687607e+03 1.74686967e+03 1.72715272e+03 + 1.70772001e+03 1.68856640e+03 1.66968690e+03 1.65107661e+03 1.63273076e+03 + 1.61464464e+03 1.59681369e+03 1.57923342e+03 1.56189944e+03 1.54480747e+03 + 1.52795329e+03 1.51133281e+03 1.49494199e+03 1.47877690e+03 1.46283367e+03 + 1.44710853e+03 1.43159778e+03 1.41629779e+03 1.40120502e+03 1.38631599e+03 + 1.37162730e+03 1.35713560e+03 1.34283764e+03 1.32873021e+03 1.31481016e+03 + 1.30107443e+03 1.28752000e+03 1.27414392e+03 1.26094329e+03 1.24791526e+03 + 1.23505706e+03 1.22236596e+03 1.20983928e+03 1.19747440e+03 1.18526874e+03 + 1.17321977e+03 1.16132503e+03 1.14958208e+03 1.13798854e+03 1.12654208e+03 + 1.11524039e+03 1.10408123e+03 1.09306240e+03 1.08218171e+03 1.07143706e+03 + 1.06082635e+03 1.05034752e+03 1.03999858e+03 1.02977755e+03 1.01968248e+03 + 1.00971148e+03 9.99862673e+02 9.90134232e+02 9.80524352e+02 9.71031265e+02 + 9.61653233e+02 9.52388550e+02 9.43235540e+02 9.34192556e+02 9.25257981e+02 + 9.16430226e+02 9.07707731e+02 8.99088962e+02 8.90572412e+02 8.82156601e+02 + 8.73840073e+02 8.65621398e+02 8.57499172e+02 8.49472013e+02 8.41538563e+02 + 8.33697489e+02 8.25947478e+02 8.18287242e+02 8.10715512e+02 8.03231042e+02 + 7.95832607e+02 7.88519002e+02 7.81289042e+02 7.74141562e+02 7.67075417e+02 + 7.60089480e+02 7.53182643e+02 7.46353816e+02 7.39601926e+02 7.32925920e+02 + 7.26324759e+02 7.19797425e+02 7.13342912e+02 7.06960233e+02 7.00648417e+02 + 6.94406507e+02 6.88233563e+02 6.82128659e+02 6.76090883e+02 6.70119341e+02 + 6.64213148e+02 6.58371437e+02 6.52593354e+02 6.46878057e+02 6.41224718e+02 + 6.35632522e+02 6.30100667e+02 6.24628363e+02 6.19214833e+02 6.13859311e+02 + 6.08561043e+02 6.03319287e+02 5.98133313e+02 5.93002401e+02 5.87925843e+02 + 5.82902941e+02 5.77933007e+02 5.73015366e+02 5.68149350e+02 5.63334303e+02 + 5.58569579e+02 5.53854542e+02 5.49188562e+02 5.44571024e+02 5.40001318e+02 + 5.35478844e+02 5.31003012e+02 5.26573240e+02 5.22188954e+02 5.17849590e+02 + 5.13554590e+02 5.09303406e+02 5.05095498e+02 5.00930333e+02 4.96807386e+02 + 4.92726140e+02 4.88686085e+02 4.84686718e+02 4.80727545e+02 4.76808077e+02 + 4.72927834e+02 4.69086341e+02 4.65283131e+02 4.61517743e+02 4.57789722e+02 + 4.54098622e+02 4.50444001e+02 4.46825423e+02 4.43242459e+02 4.39694687e+02 + 4.36181689e+02 4.32703055e+02 4.29258377e+02 4.25847258e+02 4.22469302e+02 + 4.19124121e+02 4.15811330e+02 4.12530553e+02 4.09281415e+02 4.06063550e+02 + 4.02876594e+02 3.99720190e+02 3.96593984e+02 3.93497629e+02 3.90430781e+02 + 3.87393101e+02 3.84384256e+02 3.81403915e+02 3.78451754e+02 3.75527452e+02 + 3.72630692e+02 3.69761162e+02 3.66918554e+02 3.64102564e+02 3.61312892e+02 + 3.58549243e+02 3.55811324e+02 3.53098846e+02 3.50411527e+02 3.47749085e+02 + 3.45111244e+02 3.42497730e+02 3.39908273e+02 3.37342608e+02 3.34800472e+02 + 3.32281605e+02 3.29785752e+02 3.27312661e+02 3.24862081e+02 3.22433768e+02 + 3.20027478e+02 3.17642971e+02 3.15280011e+02 3.12938364e+02 3.10617800e+02 + 3.08318091e+02 3.06039012e+02 3.03780341e+02 3.01541860e+02 2.99323352e+02 + 2.97124603e+02 2.94945402e+02 2.92785542e+02 2.90644817e+02 2.88523024e+02 + 2.86419962e+02 2.84335434e+02 2.82269244e+02 2.80221198e+02 2.78191108e+02 + 2.76178783e+02 2.74184039e+02 2.72206692e+02 2.70246559e+02 2.68303464e+02 + 2.66377228e+02 2.64467676e+02 2.62574637e+02 2.60697939e+02 2.58837415e+02 + 2.56992898e+02 2.55164224e+02 2.53351231e+02 2.51553757e+02 2.49771646e+02 + 2.48004741e+02 2.46252886e+02 2.44515930e+02 2.42793721e+02 2.41086110e+02 + 2.39392951e+02 2.37714098e+02 2.36049407e+02 2.34398736e+02 2.32761944e+02 + 2.31138894e+02 2.29529448e+02 2.27933471e+02 2.26350828e+02 2.24781389e+02 + 2.23225022e+02 2.21681598e+02 2.20150990e+02 2.18633071e+02 2.17127717e+02 + 2.15634805e+02 2.14154214e+02 2.12685822e+02 2.11229511e+02 2.09785165e+02 + 2.08352666e+02 2.06931899e+02 2.05522752e+02 2.04125113e+02 2.02738870e+02 + 2.01363914e+02 2.00000136e+02 1.98647431e+02 1.97305691e+02 1.95974813e+02 + 1.94654692e+02 1.93345228e+02 1.92046318e+02 1.90757863e+02 1.89479764e+02 + 1.88211924e+02 1.86954245e+02 1.85706633e+02 1.84468994e+02 1.83241234e+02 + 1.82023260e+02 1.80814982e+02 1.79616309e+02 1.78427153e+02 1.77247425e+02 + 1.76077038e+02 1.74915905e+02 1.73763943e+02 1.72621066e+02 1.71487191e+02 + 1.70362235e+02 1.69246118e+02 1.68138758e+02 1.67040077e+02 1.65949994e+02 + 1.64868433e+02 1.63795316e+02 1.62730567e+02 1.61674111e+02 1.60625872e+02 + 1.59585778e+02 1.58553755e+02 1.57529732e+02 1.56513636e+02 1.55505398e+02 + 1.54504947e+02 1.53512215e+02 1.52527133e+02 1.51549634e+02 1.50579651e+02 + 1.49617117e+02 1.48661968e+02 1.47714139e+02 1.46773566e+02 1.45840185e+02 + 1.44913934e+02 1.43994752e+02 1.43082576e+02 1.42177346e+02 1.41279003e+02 + 1.40387486e+02 1.39502738e+02 1.38624700e+02 1.37753314e+02 1.36888525e+02 + 1.36030275e+02 1.35178509e+02 1.34333173e+02 1.33494210e+02 1.32661569e+02 + 1.31835195e+02 1.31015035e+02 1.30201038e+02 1.29393152e+02 1.28591325e+02 + 1.27795507e+02 1.27005648e+02 1.26221699e+02 1.25443610e+02 1.24671333e+02 + 1.23904819e+02 1.23144023e+02 1.22388895e+02 1.21639390e+02 1.20895462e+02 + 1.20157066e+02 1.19424155e+02 1.18696686e+02 1.17974614e+02 1.17257895e+02 + 1.16546486e+02 1.15840345e+02 1.15139429e+02 1.14443696e+02 1.13753104e+02 + 1.13067612e+02 1.12387179e+02 1.11711766e+02 1.11041331e+02 1.10375837e+02 + 1.09715243e+02 1.09059510e+02 1.08408601e+02 1.07762478e+02 1.07121102e+02 + 1.06484437e+02 1.05852445e+02 1.05225091e+02 1.04602338e+02 1.03984150e+02 + 1.03370492e+02 1.02761329e+02 1.02156626e+02 1.01556348e+02 1.00960462e+02 + 1.00368933e+02 9.97817288e+01 9.91988155e+01 9.86201604e+01 9.80457312e+01 + 9.74754955e+01 9.69094215e+01 9.63474776e+01 9.57896324e+01 9.52358551e+01 + 9.46861147e+01 9.41403810e+01 9.35986237e+01 9.30608129e+01 9.25269190e+01 + 9.19969127e+01 9.14707649e+01 9.09484468e+01 9.04299298e+01 8.99151856e+01 + 8.94041860e+01 8.88969034e+01 8.83933101e+01 8.78933789e+01 8.73970825e+01 + 8.69043941e+01 8.64152872e+01 8.59297352e+01 8.54477121e+01 8.49691918e+01 + 8.44941486e+01 8.40225570e+01 8.35543915e+01 8.30896273e+01 8.26282392e+01 + 8.21702026e+01 8.17154929e+01 8.12640859e+01 8.08159575e+01 8.03710836e+01 + 7.99294406e+01 7.94910048e+01 7.90557528e+01 7.86236615e+01 7.81947079e+01 + 7.77688689e+01 7.73461220e+01 7.69264446e+01 7.65098144e+01 7.60962090e+01 + 7.56856065e+01 7.52779850e+01 7.48733228e+01 7.44715981e+01 7.40727897e+01 + 7.36768761e+01 7.32838363e+01 7.28936492e+01 7.25062939e+01 7.21217496e+01 + 7.17399959e+01 7.13610121e+01 7.09847779e+01 7.06112732e+01 7.02404777e+01 + 6.98723715e+01 6.95069348e+01 6.91441478e+01 6.87839908e+01 6.84264444e+01 + 6.80714892e+01 6.77191058e+01 6.73692750e+01 6.70219779e+01 6.66771953e+01 + 6.63349084e+01 6.59950985e+01 6.56577468e+01 6.53228348e+01 6.49903439e+01 + 6.46602559e+01 6.43325523e+01 6.40072149e+01 6.36842258e+01 6.33635667e+01 + 6.30452197e+01 6.27291670e+01 6.24153909e+01 6.21038734e+01 6.17945972e+01 + 6.14875446e+01 6.11826981e+01 6.08800404e+01 6.05795541e+01 6.02812221e+01 + 5.99850271e+01 5.96909520e+01 5.93989799e+01 5.91090938e+01 5.88212767e+01 + 5.85355120e+01 5.82517829e+01 5.79700727e+01 5.76903647e+01 5.74126425e+01 + 5.71368896e+01 5.68630897e+01 5.65912262e+01 5.63212831e+01 5.60532440e+01 + 5.57870929e+01 5.55228137e+01 5.52603904e+01 5.49998069e+01 5.47410475e+01 + 5.44840964e+01 5.42289376e+01 5.39755557e+01 5.37239350e+01 5.34740598e+01 + 5.32259147e+01 5.29794844e+01 5.27347533e+01 5.24917062e+01 5.22503279e+01 + 5.20106033e+01 5.17725171e+01 5.15360544e+01 5.13012002e+01 5.10679396e+01 + 5.08362578e+01 5.06061399e+01 5.03775714e+01 5.01505376e+01 4.99250240e+01 + 4.97010159e+01 4.94784991e+01 4.92574593e+01 4.90378820e+01 4.88197532e+01 + 4.86030588e+01 4.83877846e+01 4.81739168e+01 4.79614414e+01 4.77503447e+01 + 4.75406128e+01 4.73322323e+01 4.71251894e+01 4.69194707e+01 4.67150628e+01 + 4.65119524e+01 4.63101262e+01 4.61095712e+01 4.59102741e+01 4.57122221e+01 + 4.55154023e+01 4.53198019e+01 4.51254081e+01 4.49322083e+01 4.47401900e+01 + 4.45493409e+01 4.43596484e+01 4.41711005e+01 4.39836848e+01 4.37973895e+01 + 4.36122025e+01 4.34281120e+01 4.32451062e+01 4.30631734e+01 4.28823021e+01 + 4.27024809e+01 4.25236983e+01 4.23459432e+01 4.21692043e+01 4.19934706e+01 + 4.18187313e+01 4.16449754e+01 4.14721922e+01 4.13003711e+01 4.11295016e+01 + 4.09595733e+01 4.07905759e+01 4.06224991e+01 4.04553330e+01 4.02890674e+01 + 4.01236927e+01 3.99591990e+01 3.97955766e+01 3.96328161e+01 3.94709080e+01 + 3.93098430e+01 3.91496120e+01 3.89902058e+01 3.88316154e+01 3.86738321e+01 + 3.85168470e+01 3.83606515e+01 3.82052371e+01 3.80505954e+01 3.78967181e+01 + 3.77435969e+01 3.75912238e+01 3.74395909e+01 3.72886902e+01 3.71385140e+01 + 3.69890548e+01 3.68403049e+01 3.66922569e+01 3.65449035e+01 3.63982376e+01 + 3.62522520e+01 3.61069398e+01 3.59622940e+01 3.58183080e+01 3.56749750e+01 + 3.55322884e+01 3.53902419e+01 3.52488290e+01 3.51080436e+01 3.49678794e+01 + 3.48283304e+01 3.46893908e+01 3.45510545e+01 3.44133160e+01 3.42761695e+01 + 3.41396096e+01 3.40036306e+01 3.38682274e+01 3.37333946e+01 3.35991271e+01 + 3.34654197e+01 3.33322676e+01 3.31996658e+01 3.30676095e+01 3.29360940e+01 + 3.28051146e+01 3.26746669e+01 3.25447464e+01 3.24153486e+01 3.22864694e+01 + 3.21581045e+01 3.20302498e+01 3.19029013e+01 3.17760549e+01 3.16497068e+01 + 3.15238532e+01 3.13984903e+01 3.12736145e+01 3.11492222e+01 3.10253099e+01 + 3.09018741e+01 3.07789115e+01 3.06564187e+01 3.05343925e+01 3.04128297e+01 + 3.02917272e+01 3.01710820e+01 3.00508911e+01 2.99311516e+01 2.98118605e+01 + 2.96930151e+01 2.95746127e+01 2.94566505e+01 2.93391259e+01 2.92220364e+01 + 2.91053793e+01 2.89891523e+01 2.88733530e+01 2.87579788e+01 2.86430275e+01 + 2.85284969e+01 2.84143847e+01 2.83006887e+01 2.81874068e+01 2.80745368e+01 + 2.79620768e+01 2.78500247e+01 2.77383786e+01 2.76271364e+01 2.75162964e+01 + 2.74058566e+01 2.72958153e+01 2.71861707e+01 2.70769209e+01 2.69680644e+01 + 2.68595994e+01 2.67515242e+01 2.66438373e+01 2.65365371e+01 2.64296219e+01 + 2.63230904e+01 2.62169409e+01 2.61111720e+01 2.60057823e+01 2.59007703e+01 + 2.57961347e+01 2.56918740e+01 2.55879869e+01 2.54844721e+01 2.53813283e+01 + 2.52785542e+01 2.51761485e+01 2.50741101e+01 2.49724376e+01 2.48711298e+01 + 2.47701856e+01 2.46696038e+01 2.45693833e+01 2.44695229e+01 2.43700215e+01 + 2.42708779e+01 2.41720911e+01 2.40736601e+01 2.39755837e+01 2.38778609e+01 + 2.37804906e+01 2.36834719e+01 2.35868037e+01 2.34904850e+01 2.33945148e+01 + 2.32988921e+01 2.32036160e+01 2.31086854e+01 2.30140995e+01 2.29198573e+01 + 2.28259578e+01 2.27324001e+01 2.26391833e+01 2.25463065e+01 2.24537687e+01 + 2.23615691e+01 2.22697067e+01 2.21781807e+01 2.20869902e+01 2.19961343e+01 + 2.19056121e+01 2.18154227e+01 2.17255653e+01 2.16360390e+01 2.15468430e+01 + 2.14579763e+01 2.13694383e+01 2.12812279e+01 2.11933443e+01 2.11057868e+01 + 2.10185544e+01 2.09316464e+01 2.08450619e+01 2.07588000e+01 2.06728599e+01 + 2.05872409e+01 2.05019420e+01 2.04169624e+01 2.03323014e+01 2.02479581e+01 + 2.01639316e+01 2.00802212e+01 1.99968260e+01 1.99137452e+01 1.98309780e+01 + 1.97485236e+01 1.96663811e+01 1.95845497e+01 1.95030287e+01 1.94218171e+01 + 1.93409142e+01 1.92603192e+01 1.91800312e+01 1.91000494e+01 1.90203730e+01 + 1.89410012e+01 1.88619332e+01 1.87831681e+01 1.87047051e+01 1.86265434e+01 + 1.85486822e+01 1.84711207e+01 1.83938580e+01 1.83168933e+01 1.82402258e+01 + 1.81638547e+01 1.80877791e+01 1.80119982e+01 1.79365112e+01 1.78613173e+01 + 1.77864157e+01 1.77118054e+01 1.76374858e+01 1.75634559e+01 1.74897149e+01 + 1.74162620e+01 1.73430964e+01 1.72702173e+01 1.71976237e+01 1.71253149e+01 + 1.70532900e+01 1.69815482e+01 1.69100887e+01 1.68389107e+01 1.67680132e+01 + 1.66973955e+01 1.66270567e+01 1.65569960e+01 1.64872125e+01 1.64177054e+01 + 1.63484739e+01 1.62795171e+01 1.62108342e+01 1.61424243e+01 1.60742866e+01 + 1.60064203e+01 1.59388245e+01 1.58714984e+01 1.58044411e+01 1.57376518e+01 + 1.56711296e+01 1.56048737e+01 1.55388833e+01 1.54731575e+01 1.54076954e+01 + 1.53424963e+01 1.52775592e+01 1.52128833e+01 1.51484679e+01 1.50843120e+01 + 1.50204147e+01 1.49567753e+01 1.48933929e+01 1.48302667e+01 1.47673958e+01 + 1.47047793e+01 1.46424165e+01 1.45803065e+01 1.45184483e+01 1.44568413e+01 + 1.43954845e+01 1.43343772e+01 1.42735183e+01 1.42129073e+01 1.41525430e+01 + 1.40924249e+01 1.40325519e+01 1.39729232e+01 1.39135381e+01 1.38543957e+01 + 1.37954951e+01 1.37368355e+01 1.36784161e+01 1.36202360e+01 1.35622943e+01 + 1.35045904e+01 1.34471233e+01 1.33898921e+01 1.33328961e+01 1.32761345e+01 + 1.32196063e+01 1.31633108e+01 1.31072471e+01 1.30514145e+01 1.29958120e+01 + 1.29404389e+01 1.28852943e+01 1.28303774e+01 1.27756875e+01 1.27212235e+01 + 1.26669849e+01 1.26129706e+01 1.25591800e+01 1.25056122e+01 1.24522663e+01 + 1.23991416e+01 1.23462373e+01 1.22935525e+01 1.22410865e+01 1.21888384e+01 + 1.21368074e+01 1.20849927e+01 1.20333935e+01 1.19820090e+01 1.19308385e+01 + 1.18798810e+01 1.18291359e+01 1.17786023e+01 1.17282794e+01 1.16781664e+01 + 1.16282626e+01 1.15785671e+01 1.15290791e+01 1.14797980e+01 1.14307228e+01 + 1.13818529e+01 1.13331873e+01 1.12847254e+01 1.12364664e+01 1.11884095e+01 + 1.11405539e+01 1.10928988e+01 1.10454435e+01 1.09981872e+01 1.09511292e+01 + 1.09042686e+01 1.08576047e+01 1.08111368e+01 1.07648641e+01 1.07187858e+01 + 1.06729012e+01 1.06272095e+01 1.05817100e+01 1.05364019e+01 1.04912845e+01 + 1.04463570e+01 1.04016187e+01 1.03570688e+01 1.03127066e+01 1.02685315e+01 + 1.02245425e+01 1.01807390e+01 1.01371203e+01 1.00936857e+01 1.00504343e+01 + 1.00073655e+01 9.96447860e+00 9.92177282e+00 9.87924746e+00 9.83690179e+00 + 9.79473512e+00 9.75274671e+00 9.71093587e+00 9.66930188e+00 9.62784404e+00 + 9.58656164e+00 9.54545398e+00 9.50452035e+00 9.46376007e+00 9.42317244e+00 + 9.38275676e+00 9.34251233e+00 9.30243848e+00 9.26253451e+00 9.22279974e+00 + 9.18323348e+00 9.14383506e+00 9.10460379e+00 9.06553900e+00 9.02664002e+00 + 8.98790617e+00 8.94933678e+00 8.91093119e+00 8.87268873e+00 8.83460873e+00 + 8.79669054e+00 8.75893350e+00 8.72133695e+00 8.68390023e+00 8.64662269e+00 + 8.60950368e+00 8.57254256e+00 8.53573868e+00 8.49909140e+00 8.46260006e+00 + 8.42626405e+00 8.39008271e+00 8.35405541e+00 8.31818152e+00 8.28246041e+00 + 8.24689146e+00 8.21147403e+00 8.17620750e+00 8.14109126e+00 8.10612467e+00 + 8.07130713e+00 8.03663801e+00 8.00211672e+00 7.96774262e+00 7.93351513e+00 + 7.89943362e+00 7.86549750e+00 7.83170617e+00 7.79805902e+00 7.76455546e+00 + 7.73119489e+00 7.69797671e+00 7.66490035e+00 7.63196520e+00 7.59917068e+00 + 7.56651621e+00 7.53400121e+00 7.50162509e+00 7.46938727e+00 7.43728719e+00 + 7.40532426e+00 7.37349792e+00 7.34180759e+00 7.31025271e+00 7.27883270e+00 + 7.24754702e+00 7.21639510e+00 7.18537637e+00 7.15449029e+00 7.12373629e+00 + 7.09311383e+00 7.06262235e+00 7.03226130e+00 7.00203015e+00 6.97192833e+00 + 6.94195532e+00 6.91211058e+00 6.88239355e+00 6.85280371e+00 6.82334053e+00 + 6.79400347e+00 6.76479200e+00 6.73570560e+00 6.70674373e+00 6.67790588e+00 + 6.64919152e+00 6.62060013e+00 6.59213120e+00 6.56378421e+00 6.53555865e+00 + 6.50745400e+00 6.47946976e+00 6.45160541e+00 6.42386046e+00 6.39623439e+00 + 6.36872671e+00 6.34133692e+00 6.31406452e+00 6.28690901e+00 6.25986990e+00 + 6.23294670e+00 6.20613892e+00 6.17944607e+00 6.15286766e+00 6.12640322e+00 + 6.10005225e+00 6.07381428e+00 6.04768883e+00 6.02167542e+00 5.99577358e+00 + 5.96998284e+00 5.94430272e+00 5.91873277e+00 5.89327250e+00 5.86792145e+00 + 5.84267917e+00 5.81754519e+00 5.79251905e+00 5.76760030e+00 5.74278847e+00 + 5.71808312e+00 5.69348379e+00 5.66899003e+00 5.64460139e+00 5.62031743e+00 + 5.59613771e+00 5.57206177e+00 5.54808918e+00 5.52421950e+00 5.50045229e+00 + 5.47678712e+00 5.45322355e+00 5.42976115e+00 5.40639949e+00 5.38313814e+00 + 5.35997667e+00 5.33691466e+00 5.31395168e+00 5.29108732e+00 5.26832115e+00 + 5.24565275e+00 5.22308172e+00 5.20060762e+00 5.17823006e+00 5.15594861e+00 + 5.13376288e+00 5.11167245e+00 5.08967691e+00 5.06777586e+00 5.04596890e+00 + 5.02425562e+00 5.00263563e+00 4.98110853e+00 4.95967392e+00 4.93833141e+00 + 4.91708060e+00 4.89592111e+00 4.87485253e+00 4.85387449e+00 4.83298660e+00 + 4.81218848e+00 4.79147973e+00 4.77085998e+00 4.75032884e+00 4.72988595e+00 + 4.70953091e+00 4.68926337e+00 4.66908293e+00 4.64898924e+00 4.62898191e+00 + 4.60906059e+00 4.58922490e+00 4.56947447e+00 4.54980894e+00 4.53022796e+00 + 4.51073115e+00 4.49131815e+00 4.47198862e+00 4.45274218e+00 4.43357849e+00 + 4.41449719e+00 4.39549793e+00 4.37658036e+00 4.35774412e+00 4.33898888e+00 + 4.32031427e+00 4.30171997e+00 4.28320562e+00 4.26477088e+00 4.24641541e+00 + 4.22813887e+00 4.20994092e+00 4.19182123e+00 4.17377947e+00 4.15581528e+00 + 4.13792836e+00 4.12011835e+00 4.10238495e+00 4.08472780e+00 4.06714660e+00 + 4.04964101e+00 4.03221071e+00 4.01485537e+00 3.99757469e+00 3.98036832e+00 + 3.96323597e+00 3.94617730e+00 3.92919201e+00 3.91227977e+00 3.89544028e+00 + 3.87867323e+00 3.86197830e+00 3.84535518e+00 3.82880356e+00 3.81232315e+00 + 3.79591363e+00 3.77957470e+00 3.76330605e+00 3.74710739e+00 3.73097842e+00 + 3.71491883e+00 3.69892833e+00 3.68300662e+00 3.66715340e+00 3.65136839e+00 + 3.63565129e+00 3.62000181e+00 3.60441965e+00 3.58890454e+00 3.57345617e+00 + 3.55807427e+00 3.54275855e+00 3.52750872e+00 3.51232451e+00 3.49720562e+00 + 3.48215179e+00 3.46716273e+00 3.45223816e+00 3.43737780e+00 3.42258139e+00 + 3.40784864e+00 3.39317928e+00 3.37857305e+00 3.36402966e+00 3.34954885e+00 + 3.33513035e+00 3.32077389e+00 3.30647921e+00 3.29224604e+00 3.27807411e+00 + 3.26396317e+00 3.24991295e+00 3.23592318e+00 3.22199362e+00 3.20812400e+00 + 3.19431407e+00 3.18056356e+00 3.16687223e+00 3.15323981e+00 3.13966606e+00 + 3.12615072e+00 3.11269354e+00 3.09929428e+00 3.08595268e+00 3.07266849e+00 + 3.05944147e+00 3.04627137e+00 3.03315796e+00 3.02010097e+00 3.00710018e+00 + 2.99415534e+00 2.98126621e+00 2.96843255e+00 2.95565412e+00 2.94293069e+00 + 2.93026201e+00 2.91764786e+00 2.90508800e+00 2.89258219e+00 2.88013020e+00 + 2.86773181e+00 2.85538677e+00 2.84309487e+00 2.83085587e+00 2.81866954e+00 + 2.80653567e+00 2.79445401e+00 2.78242436e+00 2.77044648e+00 2.75852016e+00 + 2.74664516e+00 2.73482128e+00 2.72304828e+00 2.71132596e+00 2.69965409e+00 + 2.68803246e+00 2.67646085e+00 2.66493904e+00 2.65346683e+00 2.64204399e+00 + 2.63067032e+00 2.61934561e+00 2.60806964e+00 2.59684220e+00 2.58566308e+00 + 2.57453209e+00 2.56344901e+00 2.55241362e+00 2.54142574e+00 2.53048516e+00 + 2.51959166e+00 2.50874506e+00 2.49794514e+00 2.48719171e+00 2.47648456e+00 + 2.46582351e+00 2.45520834e+00 2.44463886e+00 2.43411488e+00 2.42363620e+00 + 2.41320262e+00 2.40281395e+00 2.39247000e+00 2.38217057e+00 2.37191548e+00 + 2.36170453e+00 2.35153754e+00 2.34141430e+00 2.33133465e+00 2.32129838e+00 + 2.31130531e+00 2.30135526e+00 2.29144803e+00 2.28158346e+00 2.27176134e+00 + 2.26198151e+00 2.25224377e+00 2.24254795e+00 2.23289387e+00 2.22328134e+00 + 2.21371020e+00 2.20418025e+00 2.19469132e+00 2.18524324e+00 2.17583583e+00 + 2.16646892e+00 2.15714233e+00 2.14785588e+00 2.13860941e+00 2.12940274e+00 + 2.12023571e+00 2.11110813e+00 2.10201985e+00 2.09297069e+00 2.08396048e+00 + 2.07498906e+00 2.06605626e+00 2.05716191e+00 2.04830585e+00 2.03948791e+00 + 2.03070793e+00 2.02196575e+00 2.01326120e+00 2.00459412e+00 1.99596435e+00 + 1.98737173e+00 1.97881609e+00 1.97029729e+00 1.96181516e+00 1.95336954e+00 + 1.94496028e+00 1.93658722e+00 1.92825021e+00 1.91994908e+00 1.91168369e+00 + 1.90345387e+00 1.89525949e+00 1.88710038e+00 1.87897640e+00 1.87088738e+00 + 1.86283319e+00 1.85481367e+00 1.84682867e+00 1.83887805e+00 1.83096166e+00 + 1.82307934e+00 1.81523095e+00 1.80741635e+00 1.79963539e+00 1.79188793e+00 + 1.78417382e+00 1.77649292e+00 1.76884508e+00 1.76123016e+00 1.75364803e+00 + 1.74609854e+00 1.73858154e+00 1.73109691e+00 1.72364450e+00 1.71622416e+00 + 1.70883578e+00 1.70147920e+00 1.69415428e+00 1.68686090e+00 1.67959892e+00 + 1.67236820e+00 1.66516861e+00 1.65800001e+00 1.65086227e+00 1.64375526e+00 + 1.63667885e+00 1.62963289e+00 1.62261727e+00 1.61563185e+00 1.60867651e+00 + 1.60175110e+00 1.59485551e+00 1.58798960e+00 1.58115326e+00 1.57434634e+00 + 1.56756872e+00 1.56082028e+00 1.55410090e+00 1.54741044e+00 1.54074878e+00 + 1.53411580e+00 1.52751137e+00 1.52093538e+00 1.51438770e+00 1.50786820e+00 + 1.50137677e+00 1.49491329e+00 1.48847763e+00 1.48206967e+00 1.47568930e+00 + 1.46933640e+00 1.46301085e+00 1.45671253e+00 1.45044132e+00 1.44419711e+00 + 1.43797979e+00 1.43178922e+00 1.42562531e+00 1.41948793e+00 1.41337698e+00 + 1.40729233e+00 1.40123388e+00 1.39520150e+00 1.38919510e+00 1.38321456e+00 + 1.37725976e+00 1.37133059e+00 1.36542696e+00 1.35954873e+00 1.35369581e+00 + 1.34786809e+00 1.34206546e+00 1.33628781e+00 1.33053503e+00 1.32480701e+00 + 1.31910366e+00 1.31342486e+00 1.30777050e+00 1.30214049e+00 1.29653472e+00 + 1.29095307e+00 1.28539546e+00 1.27986177e+00 1.27435191e+00 1.26886576e+00 + 1.26340323e+00 1.25796422e+00 1.25254863e+00 1.24715635e+00 1.24178728e+00 + 1.23644132e+00 1.23111838e+00 1.22581836e+00 1.22054115e+00 1.21528666e+00 + 1.21005479e+00 1.20484545e+00 1.19965853e+00 1.19449394e+00 1.18935159e+00 + 1.18423137e+00 1.17913319e+00 1.17405697e+00 1.16900259e+00 1.16396998e+00 + 1.15895903e+00 1.15396965e+00 1.14900176e+00 1.14405525e+00 1.13913003e+00 + 1.13422602e+00 1.12934312e+00 1.12448124e+00 1.11964029e+00 1.11482018e+00 + 1.11002083e+00 1.10524213e+00 1.10048401e+00 1.09574637e+00 1.09102912e+00 + 1.08633219e+00 1.08165547e+00 1.07699889e+00 1.07236235e+00 1.06774578e+00 + 1.06314908e+00 1.05857217e+00 1.05401496e+00 1.04947737e+00 1.04495932e+00 + 1.04046071e+00 1.03598147e+00 1.03152152e+00 1.02708077e+00 1.02265913e+00 + 1.01825653e+00 1.01387288e+00 1.00950811e+00 1.00516212e+00 1.00083485e+00 + 9.96526200e-01 9.92236102e-01 9.87964474e-01 9.83711235e-01 9.79476307e-01 + 9.75259610e-01 9.71061066e-01 9.66880597e-01 9.62718125e-01 9.58573573e-01 + 9.54446863e-01 9.50337919e-01 9.46246665e-01 9.42173023e-01 9.38116918e-01 + 9.34078275e-01 9.30057019e-01 9.26053075e-01 9.22066367e-01 9.18096823e-01 + 9.14144367e-01 9.10208927e-01 9.06290430e-01 9.02388801e-01 8.98503970e-01 + 8.94635863e-01 8.90784408e-01 8.86949534e-01 8.83131169e-01 8.79329242e-01 + 8.75543683e-01 8.71774421e-01 8.68021386e-01 8.64284508e-01 8.60563717e-01 + 8.56858944e-01 8.53170121e-01 8.49497178e-01 8.45840048e-01 8.42198661e-01 + 8.38572951e-01 8.34962850e-01 8.31368290e-01 8.27789206e-01 8.24225529e-01 + 8.20677194e-01 8.17144135e-01 8.13626286e-01 8.10123581e-01 8.06635956e-01 + 8.03163345e-01 7.99705684e-01 7.96262909e-01 7.92834954e-01 7.89421757e-01 + 7.86023255e-01 7.82639383e-01 7.79270078e-01 7.75915279e-01 7.72574922e-01 + 7.69248946e-01 7.65937288e-01 7.62639887e-01 7.59356682e-01 7.56087611e-01 + 7.52832613e-01 7.49591629e-01 7.46364597e-01 7.43151457e-01 7.39952150e-01 + 7.36766617e-01 7.33594797e-01 7.30436632e-01 7.27292064e-01 7.24161032e-01 + 7.21043481e-01 7.17939350e-01 7.14848583e-01 7.11771121e-01 7.08706909e-01 + 7.05655887e-01 7.02618001e-01 6.99593193e-01 6.96581407e-01 6.93582587e-01 + 6.90596677e-01 6.87623621e-01 6.84663365e-01 6.81715852e-01 6.78781029e-01 + 6.75858841e-01 6.72949232e-01 6.70052150e-01 6.67167540e-01 6.64295348e-01 + 6.61435521e-01 6.58588006e-01 6.55752749e-01 6.52929699e-01 6.50118801e-01 + 6.47320005e-01 6.44533258e-01 6.41758508e-01 6.38995703e-01 6.36238507e-01 + 6.33458395e-01 6.30652264e-01 6.27820565e-01 6.24963747e-01 6.22082260e-01 + 6.19176555e-01 6.16247082e-01 6.13294291e-01 6.10318634e-01 6.07320561e-01 + 6.04300524e-01 6.01258971e-01 5.98196355e-01 5.95113124e-01 5.92009729e-01 + 5.88886619e-01 5.85744243e-01 5.82583049e-01 5.79403486e-01 5.76206000e-01 + 5.72991037e-01 5.69759044e-01 5.66510466e-01 5.63245747e-01 5.59965329e-01 + 5.56669655e-01 5.53359166e-01 5.50034303e-01 5.46695503e-01 5.43343205e-01 + 5.39977845e-01 5.36599858e-01 5.33209679e-01 5.29807738e-01 5.26394469e-01 + 5.22970298e-01 5.19535655e-01 5.16090966e-01 5.12636655e-01 5.09173146e-01 + 5.05700858e-01 5.02220212e-01 4.98731626e-01 4.95235513e-01 4.91732289e-01 + 4.88222365e-01 4.84706151e-01 4.81184053e-01 4.77656479e-01 4.74123830e-01 + 4.70586509e-01 4.67044914e-01 4.63499441e-01 4.59950486e-01 4.56398440e-01 + 4.52843693e-01 4.49286632e-01 4.45727643e-01 4.42167106e-01 4.38605403e-01 + 4.35042911e-01 4.31480003e-01 4.27917053e-01 4.24354430e-01 4.20792500e-01 + 4.17231628e-01 4.13672175e-01 4.10114499e-01 4.06558956e-01 4.03005900e-01 + 3.99455680e-01 3.95908643e-01 3.92365134e-01 3.88825495e-01 3.85290063e-01 + 3.81759174e-01 3.78233160e-01 3.74712352e-01 3.71197075e-01 3.67687654e-01 + 3.64184407e-01 3.60687652e-01 3.57197704e-01 3.53714873e-01 3.50239466e-01 + 3.46771790e-01 3.43312144e-01 3.39860827e-01 3.36418134e-01 3.32984356e-01 + 3.29559782e-01 3.26144697e-01 3.22739384e-01 3.19344119e-01 3.15959180e-01 + 3.12584837e-01 3.09221359e-01 3.05869011e-01 3.02528056e-01 2.99198751e-01 + 2.95881353e-01 2.92576112e-01 2.89283277e-01 2.86003093e-01 2.82735801e-01 + 2.79481640e-01 2.76240845e-01 2.73013646e-01 2.69800271e-01 2.66600946e-01 + 2.63415890e-01 2.60245322e-01 2.57089455e-01 2.53948501e-01 2.50822666e-01 + 2.47712155e-01 2.44617167e-01 2.41537899e-01 2.38474546e-01 2.35427297e-01 + 2.32396338e-01 2.29381852e-01 2.26384020e-01 2.23403018e-01 2.20439018e-01 + 2.17492189e-01 2.14562698e-01 2.11650708e-01 2.08756376e-01 2.05879860e-01 + 2.03021310e-01 2.00180877e-01 1.97358705e-01 1.94554938e-01 1.91769712e-01 + 1.89003164e-01 1.86255427e-01 1.83526627e-01 1.80816892e-01 1.78126342e-01 + 1.75455096e-01 1.72803270e-01 1.70170976e-01 1.67558322e-01 1.64965415e-01 + 1.62392355e-01 1.59839242e-01 1.57306173e-01 1.54793238e-01 1.52300528e-01 + 1.49828128e-01 1.47376122e-01 1.44944589e-01 1.42533605e-01 1.40143244e-01 + 1.37773576e-01 1.35424669e-01 1.33096586e-01 1.30789388e-01 1.28503133e-01 + 1.26237876e-01 1.23993669e-01 1.21770561e-01 1.19568597e-01 1.17387819e-01 + 1.15228269e-01 1.13089983e-01 1.10972994e-01 1.08877334e-01 1.06803032e-01 + 1.04750111e-01 1.02718596e-01 1.00708504e-01 9.87198546e-02 9.67526601e-02 + 9.48069321e-02 9.28826793e-02 9.09799074e-02 8.90986195e-02 8.72388160e-02 + 8.54004947e-02 8.35836507e-02 8.17882765e-02 8.00143621e-02 7.82618946e-02 + 7.65308589e-02 7.48212373e-02 7.31330096e-02 7.14661528e-02 6.98206420e-02 + 6.81964494e-02 6.65935450e-02 6.50118964e-02 6.34514687e-02 6.19122249e-02 + 6.03941255e-02 5.88971287e-02 5.74211906e-02 5.59662647e-02 5.45323028e-02 + 5.31192541e-02 5.17270657e-02 5.03556826e-02 4.90050478e-02 4.76751021e-02 + 4.63657840e-02 4.50770304e-02 4.38087758e-02 4.25609529e-02 4.13334924e-02 + 4.01263230e-02 3.89393716e-02 3.77725629e-02 3.66258202e-02 3.54990645e-02 + 3.43922153e-02 3.33051902e-02 3.22379050e-02 3.11902738e-02 3.01622089e-02 + 2.91536210e-02 2.81644191e-02 2.71945107e-02 2.62438014e-02 2.53121954e-02 + 2.43995955e-02 2.35059025e-02 2.26310161e-02 2.17748345e-02 2.09372541e-02 + 2.01181702e-02 1.93174766e-02 1.85350657e-02 1.77708286e-02 1.70246549e-02 + 1.62964331e-02 1.55860503e-02 1.48933924e-02 1.42183441e-02 1.35607888e-02 + 1.29206088e-02 1.22976853e-02 1.16918981e-02 1.11031263e-02 1.05312477e-02 + 9.97613897e-03 9.43767596e-03 8.91573339e-03 8.41018504e-03 7.92090374e-03 + 7.44776140e-03 6.99062900e-03 6.54937668e-03 6.12387372e-03 5.71398855e-03 + 5.31958883e-03 4.94054141e-03 4.57671242e-03 4.22796722e-03 3.89417050e-03 + 3.57518626e-03 3.27087781e-03 2.98110787e-03 2.70573852e-03 2.44463127e-03 + 2.19764704e-03 1.96464623e-03 1.74548872e-03 1.54003390e-03 1.34814065e-03 + 1.16966746e-03 1.00447234e-03 8.52412931e-04 7.13346467e-04 5.87129835e-04 + 4.73619582e-04 3.72671936e-04 2.84142832e-04 2.07887934e-04 1.43762651e-04 + 9.16221633e-05 5.13214436e-05 2.27152755e-05 5.65827573e-06 0.00000000e+00 + 3.71505131e+05 2.74649258e+05 1.35893225e+05 8.96579686e+04 6.65526070e+04 + 5.26989696e+04 4.34710050e+04 3.68861241e+04 3.19530360e+04 2.81210268e+04 + 2.50596707e+04 2.25586996e+04 2.04779367e+04 1.87203386e+04 1.72165903e+04 + 1.59158625e+04 1.47800346e+04 1.37799571e+04 1.28929591e+04 1.21011439e+04 + 1.13901951e+04 1.07485244e+04 1.01666510e+04 9.63674408e+03 9.15227864e+03 + 8.70777443e+03 8.29859499e+03 7.92079138e+03 7.57097941e+03 7.24624224e+03 + 6.94405245e+03 6.66220928e+03 6.39878750e+03 6.15209569e+03 5.92064187e+03 + 5.70310492e+03 5.49831093e+03 5.30521323e+03 5.12287567e+03 4.95045842e+03 + 4.78720594e+03 4.63243671e+03 4.48553435e+03 4.34594011e+03 4.21314626e+03 + 4.08669044e+03 3.96615071e+03 3.85114128e+03 3.74130867e+03 3.63632847e+03 + 3.53590240e+03 3.43975576e+03 3.34763513e+03 3.25930639e+03 3.17455290e+03 + 3.09317393e+03 3.01498322e+03 2.93980772e+03 2.86748644e+03 2.79786941e+03 + 2.73081680e+03 2.66619804e+03 2.60389110e+03 2.54378179e+03 2.48576316e+03 + 2.42973494e+03 2.37560302e+03 2.32327899e+03 2.27267973e+03 2.22372701e+03 + 2.17634716e+03 2.13047071e+03 2.08603215e+03 2.04296960e+03 2.00122459e+03 + 1.96074185e+03 1.92146906e+03 1.88335668e+03 1.84635776e+03 1.81042780e+03 + 1.77552455e+03 1.74160791e+03 1.70863977e+03 1.67658393e+03 1.64540592e+03 + 1.61507295e+03 1.58555380e+03 1.55681872e+03 1.52883936e+03 1.50158865e+03 + 1.47504079e+03 1.44917112e+03 1.42395612e+03 1.39937327e+03 1.37540106e+03 + 1.35201892e+03 1.32920716e+03 1.30694691e+03 1.28522013e+03 1.26400950e+03 + 1.24329844e+03 1.22307103e+03 1.20331203e+03 1.18400677e+03 1.16514119e+03 + 1.14670178e+03 1.12867557e+03 1.11105008e+03 1.09381330e+03 1.07695372e+03 + 1.06046021e+03 1.04432210e+03 1.02852909e+03 1.01307129e+03 9.97939129e+02 + 9.83123423e+02 9.68615298e+02 9.54406200e+02 9.40487878e+02 9.26852371e+02 + 9.13491996e+02 9.00399335e+02 8.87567225e+02 8.74988744e+02 8.62657207e+02 + 8.50566152e+02 8.38709332e+02 8.27080706e+02 8.15674431e+02 8.04484854e+02 + 7.93506505e+02 7.82734090e+02 7.72162481e+02 7.61786715e+02 7.51601983e+02 + 7.41603627e+02 7.31787132e+02 7.22148123e+02 7.12682357e+02 7.03385720e+02 + 6.94254225e+02 6.85283999e+02 6.76471287e+02 6.67812446e+02 6.59303936e+02 + 6.50942324e+02 6.42724275e+02 6.34646548e+02 6.26705997e+02 6.18899565e+02 + 6.11224280e+02 6.03677253e+02 5.96255678e+02 5.88956824e+02 5.81778037e+02 + 5.74716734e+02 5.67770403e+02 5.60936600e+02 5.54212947e+02 5.47597127e+02 + 5.41086888e+02 5.34680034e+02 5.28374430e+02 5.22167994e+02 5.16058699e+02 + 5.10044569e+02 5.04123681e+02 4.98294159e+02 4.92554175e+02 4.86901947e+02 + 4.81335739e+02 4.75853855e+02 4.70454645e+02 4.65136496e+02 4.59897836e+02 + 4.54737133e+02 4.49652890e+02 4.44643646e+02 4.39707976e+02 4.34844488e+02 + 4.30051824e+02 4.25328659e+02 4.20673696e+02 4.16085670e+02 4.11563347e+02 + 4.07105518e+02 4.02711005e+02 3.98378656e+02 3.94107344e+02 3.89895969e+02 + 3.85743454e+02 3.81648749e+02 3.77610825e+02 3.73628677e+02 3.69701321e+02 + 3.65827796e+02 3.62007162e+02 3.58238498e+02 3.54520905e+02 3.50853501e+02 + 3.47235425e+02 3.43665834e+02 3.40143902e+02 3.36668821e+02 3.33239801e+02 + 3.29856066e+02 3.26516860e+02 3.23221438e+02 3.19969076e+02 3.16759059e+02 + 3.13590692e+02 3.10463290e+02 3.07376184e+02 3.04328720e+02 3.01320253e+02 + 2.98350154e+02 2.95417807e+02 2.92522606e+02 2.89663958e+02 2.86841283e+02 + 2.84054011e+02 2.81301582e+02 2.78583450e+02 2.75899078e+02 2.73247937e+02 + 2.70629513e+02 2.68043298e+02 2.65488794e+02 2.62965516e+02 2.60472984e+02 + 2.58010728e+02 2.55578289e+02 2.53175214e+02 2.50801060e+02 2.48455392e+02 + 2.46137782e+02 2.43847811e+02 2.41585068e+02 2.39349147e+02 2.37139654e+02 + 2.34956196e+02 2.32798393e+02 2.30665869e+02 2.28558254e+02 2.26475186e+02 + 2.24416310e+02 2.22381275e+02 2.20369739e+02 2.18381363e+02 2.16415817e+02 + 2.14472775e+02 2.12551916e+02 2.10652927e+02 2.08775497e+02 2.06919325e+02 + 2.05084110e+02 2.03269560e+02 2.01475387e+02 1.99701306e+02 1.97947040e+02 + 1.96212314e+02 1.94496858e+02 1.92800409e+02 1.91122705e+02 1.89463490e+02 + 1.87822514e+02 1.86199527e+02 1.84594287e+02 1.83006553e+02 1.81436090e+02 + 1.79882667e+02 1.78346055e+02 1.76826030e+02 1.75322370e+02 1.73834860e+02 + 1.72363285e+02 1.70907435e+02 1.69467104e+02 1.68042086e+02 1.66632183e+02 + 1.65237197e+02 1.63856933e+02 1.62491201e+02 1.61139813e+02 1.59802583e+02 + 1.58479330e+02 1.57169873e+02 1.55874037e+02 1.54591647e+02 1.53322532e+02 + 1.52066524e+02 1.50823456e+02 1.49593165e+02 1.48375490e+02 1.47170273e+02 + 1.45977356e+02 1.44796588e+02 1.43627815e+02 1.42470889e+02 1.41325662e+02 + 1.40191991e+02 1.39069732e+02 1.37958744e+02 1.36858890e+02 1.35770033e+02 + 1.34692038e+02 1.33624774e+02 1.32568109e+02 1.31521915e+02 1.30486065e+02 + 1.29460434e+02 1.28444900e+02 1.27439341e+02 1.26443637e+02 1.25457671e+02 + 1.24481326e+02 1.23514488e+02 1.22557044e+02 1.21608883e+02 1.20669895e+02 + 1.19739973e+02 1.18819008e+02 1.17906897e+02 1.17003536e+02 1.16108822e+02 + 1.15222655e+02 1.14344935e+02 1.13475565e+02 1.12614448e+02 1.11761488e+02 + 1.10916591e+02 1.10079666e+02 1.09250620e+02 1.08429363e+02 1.07615807e+02 + 1.06809864e+02 1.06011446e+02 1.05220470e+02 1.04436850e+02 1.03660504e+02 + 1.02891350e+02 1.02129306e+02 1.01374294e+02 1.00626234e+02 9.98850490e+01 + 9.91506621e+01 9.84229978e+01 9.77019815e+01 9.69875397e+01 9.62795998e+01 + 9.55780899e+01 9.48829395e+01 9.41940788e+01 9.35114387e+01 9.28349515e+01 + 9.21645498e+01 9.15001676e+01 9.08417394e+01 9.01892007e+01 8.95424878e+01 + 8.89015379e+01 8.82662888e+01 8.76366793e+01 8.70126489e+01 8.63941379e+01 + 8.57810873e+01 8.51734390e+01 8.45711354e+01 8.39741198e+01 8.33823362e+01 + 8.27957293e+01 8.22142444e+01 8.16378276e+01 8.10664257e+01 8.04999861e+01 + 7.99384568e+01 7.93817865e+01 7.88299247e+01 7.82828212e+01 7.77404266e+01 + 7.72026922e+01 7.66695698e+01 7.61410118e+01 7.56169711e+01 7.50974014e+01 + 7.45822568e+01 7.40714918e+01 7.35650619e+01 7.30629228e+01 7.25650308e+01 + 7.20713427e+01 7.15818160e+01 7.10964085e+01 7.06150787e+01 7.01377854e+01 + 6.96644881e+01 6.91951466e+01 6.87297212e+01 6.82681729e+01 6.78104629e+01 + 6.73565530e+01 6.69064053e+01 6.64599827e+01 6.60172481e+01 6.55781651e+01 + 6.51426977e+01 6.47108103e+01 6.42824677e+01 6.38576352e+01 6.34362783e+01 + 6.30183631e+01 6.26038561e+01 6.21927241e+01 6.17849342e+01 6.13804542e+01 + 6.09792519e+01 6.05812957e+01 6.01865543e+01 5.97949967e+01 5.94065925e+01 + 5.90213113e+01 5.86391234e+01 5.82599991e+01 5.78839092e+01 5.75108250e+01 + 5.71407179e+01 5.67735596e+01 5.64093223e+01 5.60479784e+01 5.56895007e+01 + 5.53338621e+01 5.49810362e+01 5.46309964e+01 5.42837169e+01 5.39391717e+01 + 5.35973355e+01 5.32581831e+01 5.29216896e+01 5.25878303e+01 5.22565810e+01 + 5.19279175e+01 5.16018161e+01 5.12782532e+01 5.09572056e+01 5.06386501e+01 + 5.03225641e+01 5.00089251e+01 4.96977108e+01 4.93888991e+01 4.90824683e+01 + 4.87783969e+01 4.84766635e+01 4.81772471e+01 4.78801269e+01 4.75852822e+01 + 4.72926927e+01 4.70023383e+01 4.67141989e+01 4.64282548e+01 4.61444866e+01 + 4.58628749e+01 4.55834007e+01 4.53060451e+01 4.50307894e+01 4.47576150e+01 + 4.44865039e+01 4.42174378e+01 4.39503989e+01 4.36853695e+01 4.34223320e+01 + 4.31612692e+01 4.29021640e+01 4.26449994e+01 4.23897586e+01 4.21364250e+01 + 4.18849823e+01 4.16354141e+01 4.13877045e+01 4.11418375e+01 4.08977974e+01 + 4.06555686e+01 4.04151358e+01 4.01764837e+01 3.99395973e+01 3.97044616e+01 + 3.94710618e+01 3.92393834e+01 3.90094120e+01 3.87811332e+01 3.85545328e+01 + 3.83295969e+01 3.81063117e+01 3.78846634e+01 3.76646384e+01 3.74462233e+01 + 3.72294049e+01 3.70141699e+01 3.68005054e+01 3.65883986e+01 3.63778365e+01 + 3.61688067e+01 3.59612967e+01 3.57552940e+01 3.55507865e+01 3.53477621e+01 + 3.51462088e+01 3.49461146e+01 3.47474680e+01 3.45502573e+01 3.43544709e+01 + 3.41600975e+01 3.39671259e+01 3.37755448e+01 3.35853433e+01 3.33965104e+01 + 3.32090353e+01 3.30229073e+01 3.28381158e+01 3.26546502e+01 3.24725003e+01 + 3.22916557e+01 3.21121062e+01 3.19338418e+01 3.17568524e+01 3.15811282e+01 + 3.14066595e+01 3.12334364e+01 3.10614495e+01 3.08906892e+01 3.07211461e+01 + 3.05528109e+01 3.03856744e+01 3.02197274e+01 3.00549609e+01 2.98913659e+01 + 2.97289337e+01 2.95676552e+01 2.94075220e+01 2.92485253e+01 2.90906567e+01 + 2.89339075e+01 2.87782696e+01 2.86237345e+01 2.84702941e+01 2.83179402e+01 + 2.81666647e+01 2.80164597e+01 2.78673172e+01 2.77192294e+01 2.75721884e+01 + 2.74261867e+01 2.72812164e+01 2.71372702e+01 2.69943404e+01 2.68524196e+01 + 2.67115005e+01 2.65715758e+01 2.64326381e+01 2.62946804e+01 2.61576954e+01 + 2.60216762e+01 2.58866157e+01 2.57525070e+01 2.56193432e+01 2.54871175e+01 + 2.53558231e+01 2.52254532e+01 2.50960012e+01 2.49674605e+01 2.48398246e+01 + 2.47130868e+01 2.45872407e+01 2.44622800e+01 2.43381982e+01 2.42149890e+01 + 2.40926461e+01 2.39711634e+01 2.38505345e+01 2.37307534e+01 2.36118139e+01 + 2.34937099e+01 2.33764355e+01 2.32599847e+01 2.31443514e+01 2.30295297e+01 + 2.29155138e+01 2.28022979e+01 2.26898760e+01 2.25782423e+01 2.24673913e+01 + 2.23573170e+01 2.22480138e+01 2.21394760e+01 2.20316979e+01 2.19246741e+01 + 2.18183987e+01 2.17128663e+01 2.16080713e+01 2.15040081e+01 2.14006713e+01 + 2.12980553e+01 2.11961547e+01 2.10949639e+01 2.09944776e+01 2.08946903e+01 + 2.07955965e+01 2.06971909e+01 2.05994680e+01 2.05024225e+01 2.04060489e+01 + 2.03103419e+01 2.02152961e+01 2.01209062e+01 2.00271667e+01 1.99340723e+01 + 1.98416176e+01 1.97497974e+01 1.96586061e+01 1.95680384e+01 1.94780891e+01 + 1.93887526e+01 1.93000236e+01 1.92118968e+01 1.91243667e+01 1.90374279e+01 + 1.89510751e+01 1.88653027e+01 1.87801054e+01 1.86954777e+01 1.86114142e+01 + 1.85279093e+01 1.84449576e+01 1.83625536e+01 1.82806917e+01 1.81993664e+01 + 1.81185722e+01 1.80383034e+01 1.79585544e+01 1.78793197e+01 1.78005935e+01 + 1.77223703e+01 1.76446442e+01 1.75674096e+01 1.74906608e+01 1.74143919e+01 + 1.73385972e+01 1.72632708e+01 1.71884069e+01 1.71139997e+01 1.70400432e+01 + 1.69665314e+01 1.68934585e+01 1.68208185e+01 1.67486053e+01 1.66768129e+01 + 1.66054352e+01 1.65344662e+01 1.64638996e+01 1.63937295e+01 1.63239495e+01 + 1.62545536e+01 1.61855354e+01 1.61168888e+01 1.60486074e+01 1.59806849e+01 + 1.59131152e+01 1.58458917e+01 1.57790082e+01 1.57124583e+01 1.56462356e+01 + 1.55803337e+01 1.55147462e+01 1.54494667e+01 1.53844886e+01 1.53198057e+01 + 1.52554114e+01 1.51912992e+01 1.51274628e+01 1.50638956e+01 1.50005912e+01 + 1.49375432e+01 1.48747451e+01 1.48121904e+01 1.47498729e+01 1.46877860e+01 + 1.46259234e+01 1.45642788e+01 1.45028458e+01 1.44416180e+01 1.43805894e+01 + 1.43197535e+01 1.42591043e+01 1.41986356e+01 1.41383412e+01 1.40782152e+01 + 1.40182515e+01 1.39584442e+01 1.38987874e+01 1.38392754e+01 1.37799023e+01 + 1.37206626e+01 1.36615506e+01 1.36025608e+01 1.35436879e+01 1.34849265e+01 + 1.34262714e+01 1.33677175e+01 1.33092596e+01 1.32508930e+01 1.31926128e+01 + 1.31344143e+01 1.30762930e+01 1.30182443e+01 1.29602640e+01 1.29023479e+01 + 1.28444919e+01 1.27866920e+01 1.27289446e+01 1.26712459e+01 1.26135925e+01 + 1.25559810e+01 1.24984082e+01 1.24408710e+01 1.23833667e+01 1.23258924e+01 + 1.22684456e+01 1.22110239e+01 1.21536251e+01 1.20962470e+01 1.20388879e+01 + 1.19815458e+01 1.19242194e+01 1.18669071e+01 1.18096078e+01 1.17523204e+01 + 1.16950440e+01 1.16377779e+01 1.15805216e+01 1.15232746e+01 1.14660369e+01 + 1.14088083e+01 1.13515889e+01 1.12943791e+01 1.12371794e+01 1.11799903e+01 + 1.11228126e+01 1.10656472e+01 1.10084953e+01 1.09513580e+01 1.08942368e+01 + 1.08371332e+01 1.07800489e+01 1.07229856e+01 1.06659454e+01 1.06089302e+01 + 1.05519423e+01 1.04949840e+01 1.04380578e+01 1.03811662e+01 1.03243118e+01 + 1.02674975e+01 1.02107262e+01 1.01540007e+01 1.00973241e+01 1.00406996e+01 + 9.98413044e+00 9.92761985e+00 9.87117124e+00 9.81478802e+00 9.75847371e+00 + 9.70223184e+00 9.64606603e+00 9.58997992e+00 9.53397719e+00 9.47806158e+00 + 9.42223684e+00 9.36650675e+00 9.31087511e+00 9.25534574e+00 9.19992248e+00 + 9.14460916e+00 9.08940962e+00 9.03432771e+00 8.97936725e+00 8.92453207e+00 + 8.86982599e+00 8.81525279e+00 8.76081624e+00 8.70652009e+00 8.65236805e+00 + 8.59836381e+00 8.54451101e+00 8.49081326e+00 8.43727413e+00 8.38389714e+00 + 8.33068575e+00 8.27764339e+00 8.22477343e+00 8.17207918e+00 8.11956390e+00 + 8.06723078e+00 8.01508296e+00 7.96312350e+00 7.91135542e+00 7.85978164e+00 + 7.80840505e+00 7.75722843e+00 7.70625452e+00 7.65548598e+00 7.60492538e+00 + 7.55457525e+00 7.50443802e+00 7.45451604e+00 7.40481162e+00 7.35532695e+00 + 7.30606417e+00 7.25702534e+00 7.20821245e+00 7.15962739e+00 7.11127200e+00 + 7.06314804e+00 7.01525718e+00 6.96760102e+00 6.92018109e+00 6.87299885e+00 + 6.82605568e+00 6.77935288e+00 6.73289168e+00 6.68667325e+00 6.64069867e+00 + 6.59496898e+00 6.54948512e+00 6.50424797e+00 6.45925834e+00 6.41451700e+00 + 6.37002461e+00 6.32578181e+00 6.28178913e+00 6.23804709e+00 6.19455611e+00 + 6.15131656e+00 6.10832876e+00 6.06559296e+00 6.02310937e+00 5.98087813e+00 + 5.93889933e+00 5.89717300e+00 5.85569914e+00 5.81447769e+00 5.77350853e+00 + 5.73279150e+00 5.69232639e+00 5.65211296e+00 5.61215092e+00 5.57243991e+00 + 5.53297956e+00 5.49376946e+00 5.45480915e+00 5.41609812e+00 5.37763584e+00 + 5.33942175e+00 5.30145525e+00 5.26373568e+00 5.22626240e+00 5.18903469e+00 + 5.15205182e+00 5.11531304e+00 5.07881756e+00 5.04256457e+00 5.00655322e+00 + 4.97078266e+00 4.93525199e+00 4.89996030e+00 4.86490667e+00 4.83009013e+00 + 4.79550971e+00 4.76116442e+00 4.72705324e+00 4.69317516e+00 4.65952911e+00 + 4.62611405e+00 4.59292889e+00 4.55997254e+00 4.52724390e+00 4.49474186e+00 + 4.46246527e+00 4.43041301e+00 4.39858391e+00 4.36697683e+00 4.33559058e+00 + 4.30442399e+00 4.27347587e+00 4.24274502e+00 4.21223025e+00 4.18193034e+00 + 4.15184408e+00 4.12197025e+00 4.09230762e+00 4.06285497e+00 4.03361105e+00 + 4.00457465e+00 3.97574451e+00 3.94711939e+00 3.91869805e+00 3.89047924e+00 + 3.86246171e+00 3.83464422e+00 3.80702552e+00 3.77960436e+00 3.75237948e+00 + 3.72534965e+00 3.69851361e+00 3.67187011e+00 3.64541790e+00 3.61915576e+00 + 3.59308242e+00 3.56719665e+00 3.54149722e+00 3.51598288e+00 3.49065241e+00 + 3.46550458e+00 3.44053815e+00 3.41575191e+00 3.39114464e+00 3.36671512e+00 + 3.34246213e+00 3.31838448e+00 3.29448096e+00 3.27075038e+00 3.24719152e+00 + 3.22380322e+00 3.20058428e+00 3.17753353e+00 3.15464979e+00 3.13193188e+00 + 3.10937866e+00 3.08698896e+00 3.06476163e+00 3.04269551e+00 3.02078948e+00 + 2.99904239e+00 2.97745312e+00 2.95602054e+00 2.93474353e+00 2.91362099e+00 + 2.89265181e+00 2.87183488e+00 2.85116912e+00 2.83065343e+00 2.81028675e+00 + 2.79006799e+00 2.76999609e+00 2.75006998e+00 2.73028861e+00 2.71065093e+00 + 2.69115591e+00 2.67180250e+00 2.65258967e+00 2.63351641e+00 2.61458169e+00 + 2.59578452e+00 2.57712388e+00 2.55859877e+00 2.54020822e+00 2.52195123e+00 + 2.50382683e+00 2.48583406e+00 2.46797193e+00 2.45023951e+00 2.43263583e+00 + 2.41515996e+00 2.39781095e+00 2.38058788e+00 2.36348981e+00 2.34651584e+00 + 2.32966505e+00 2.31293654e+00 2.29632940e+00 2.27984274e+00 2.26347568e+00 + 2.24722733e+00 2.23109683e+00 2.21508330e+00 2.19918589e+00 2.18340374e+00 + 2.16773599e+00 2.15218181e+00 2.13674036e+00 2.12141081e+00 2.10619234e+00 + 2.09108412e+00 2.07608534e+00 2.06119520e+00 2.04641290e+00 2.03173764e+00 + 2.01716864e+00 2.00270510e+00 1.98834625e+00 1.97409133e+00 1.95993956e+00 + 1.94589018e+00 1.93194245e+00 1.91809560e+00 1.90434891e+00 1.89070162e+00 + 1.87715301e+00 1.86370236e+00 1.85034893e+00 1.83709202e+00 1.82393091e+00 + 1.81086490e+00 1.79789329e+00 1.78501538e+00 1.77223049e+00 1.75953793e+00 + 1.74693701e+00 1.73442708e+00 1.72200745e+00 1.70967747e+00 1.69743647e+00 + 1.68528380e+00 1.67321882e+00 1.66124088e+00 1.64934933e+00 1.63754355e+00 + 1.62582290e+00 1.61418677e+00 1.60263452e+00 1.59116555e+00 1.57977925e+00 + 1.56847500e+00 1.55725221e+00 1.54611027e+00 1.53504861e+00 1.52406662e+00 + 1.51316373e+00 1.50233935e+00 1.49159292e+00 1.48092386e+00 1.47033160e+00 + 1.45981558e+00 1.44937525e+00 1.43901005e+00 1.42871943e+00 1.41850285e+00 + 1.40835976e+00 1.39828964e+00 1.38829194e+00 1.37836613e+00 1.36851170e+00 + 1.35872813e+00 1.34901488e+00 1.33937146e+00 1.32979735e+00 1.32029205e+00 + 1.31085505e+00 1.30148586e+00 1.29218399e+00 1.28294893e+00 1.27378022e+00 + 1.26467735e+00 1.25563986e+00 1.24666727e+00 1.23775911e+00 1.22891490e+00 + 1.22013419e+00 1.21141650e+00 1.20276139e+00 1.19416839e+00 1.18563706e+00 + 1.17716695e+00 1.16875761e+00 1.16040861e+00 1.15211950e+00 1.14388985e+00 + 1.13571922e+00 1.12760720e+00 1.11955335e+00 1.11155725e+00 1.10361848e+00 + 1.09573664e+00 1.08791130e+00 1.08014205e+00 1.07242850e+00 1.06477023e+00 + 1.05716685e+00 1.04961796e+00 1.04212316e+00 1.03468206e+00 1.02729427e+00 + 1.01995942e+00 1.01267711e+00 1.00544696e+00 9.98268607e-01 9.91141664e-01 + 9.84065763e-01 9.77040534e-01 9.70065612e-01 9.63140634e-01 9.56265238e-01 + 9.49439067e-01 9.42661765e-01 9.35932979e-01 9.29252359e-01 9.22619557e-01 + 9.16034229e-01 9.09496031e-01 9.03004625e-01 8.96559671e-01 8.90160836e-01 + 8.83807786e-01 8.77500192e-01 8.71237727e-01 8.65020063e-01 8.58846880e-01 + 8.52717856e-01 8.46632673e-01 8.40591016e-01 8.34592571e-01 8.28637027e-01 + 8.22724074e-01 8.16853407e-01 8.11024721e-01 8.05237713e-01 7.99492085e-01 + 7.93787537e-01 7.88123775e-01 7.82500506e-01 7.76917437e-01 7.71374280e-01 + 7.65870748e-01 7.60406556e-01 7.54981421e-01 7.49595063e-01 7.44247202e-01 + 7.38937563e-01 7.33665869e-01 7.28431850e-01 7.23235234e-01 7.18075752e-01 + 7.12953138e-01 7.07867127e-01 7.02817456e-01 6.97803864e-01 6.92826092e-01 + 6.87883884e-01 6.82976983e-01 6.78105137e-01 6.73268093e-01 6.68465603e-01 + 6.63697417e-01 6.58963291e-01 6.54262979e-01 6.49596240e-01 6.44962832e-01 + 6.40362516e-01 6.35795055e-01 6.31260213e-01 6.26757758e-01 6.22287455e-01 + 6.17849075e-01 6.13442390e-01 6.09067171e-01 6.04723193e-01 6.00410233e-01 + 5.96128068e-01 5.91876478e-01 5.87655243e-01 5.83464146e-01 5.79302972e-01 + 5.75171505e-01 5.71069533e-01 5.66996845e-01 5.62953230e-01 5.58938482e-01 + 5.54952393e-01 5.50994758e-01 5.47065373e-01 5.43164035e-01 5.39290546e-01 + 5.35444703e-01 5.31626311e-01 5.27835173e-01 5.24071092e-01 5.20333877e-01 + 5.16623334e-01 5.12939273e-01 5.09281504e-01 5.05649839e-01 5.02044091e-01 + 4.98464075e-01 4.94909607e-01 4.91380505e-01 4.87876585e-01 4.84397670e-01 + 4.80943579e-01 4.77514135e-01 4.74109162e-01 4.70728485e-01 4.67371930e-01 + 4.64039325e-01 4.60730498e-01 4.57445280e-01 4.54183502e-01 4.50944995e-01 + 4.47729594e-01 4.44537134e-01 4.41367451e-01 4.38220381e-01 4.35095763e-01 + 4.31993437e-01 4.28913243e-01 4.25855024e-01 4.22818621e-01 4.19803880e-01 + 4.16810646e-01 4.13838764e-01 4.10888082e-01 4.07958449e-01 4.05049714e-01 + 4.02161729e-01 3.99294344e-01 3.96447413e-01 3.93620789e-01 3.90814328e-01 + 3.88027885e-01 3.85261318e-01 3.82514484e-01 3.79787243e-01 3.77079454e-01 + 3.74390979e-01 3.71721680e-01 3.69071419e-01 3.66440061e-01 3.63827471e-01 + 3.61233515e-01 3.58658059e-01 3.56100972e-01 3.53562123e-01 3.51041381e-01 + 3.48538617e-01 3.46053702e-01 3.43586510e-01 3.41136913e-01 3.38704786e-01 + 3.36290004e-01 3.33892444e-01 3.31511982e-01 3.29148497e-01 3.26801867e-01 + 3.24471972e-01 3.22158693e-01 3.19861910e-01 3.17581506e-01 3.15317365e-01 + 3.13069370e-01 3.10837405e-01 3.08621358e-01 3.06421113e-01 3.04236558e-01 + 3.02067581e-01 2.99914071e-01 2.97775918e-01 2.95653012e-01 2.93545243e-01 + 2.91452505e-01 2.89374690e-01 2.87311691e-01 2.85263403e-01 2.83229721e-01 + 2.81210540e-01 2.79205757e-01 2.77215269e-01 2.75238974e-01 2.73276772e-01 + 2.71328561e-01 2.69394241e-01 2.67473714e-01 2.65566881e-01 2.63673644e-01 + 2.61793907e-01 2.59927573e-01 2.58074546e-01 2.56234732e-01 2.54408036e-01 + 2.52594364e-01 2.50793624e-01 2.49005724e-01 2.47230572e-01 2.45468077e-01 + 2.43718148e-01 2.41980696e-01 2.40255632e-01 2.38542868e-01 2.36842316e-01 + 2.35153889e-01 2.33477499e-01 2.31813063e-01 2.30160493e-01 2.28519706e-01 + 2.26890618e-01 2.25273144e-01 2.23667203e-01 2.22072711e-01 2.20489588e-01 + 2.18917752e-01 2.17357123e-01 2.15807620e-01 2.14269165e-01 2.12741679e-01 + 2.11225083e-01 2.09719299e-01 2.08224251e-01 2.06739862e-01 2.05266056e-01 + 2.03802758e-01 2.02349892e-01 2.00907384e-01 1.99475161e-01 1.98053148e-01 + 1.96641274e-01 1.95239466e-01 1.93847651e-01 1.92465759e-01 1.91093720e-01 + 1.89731462e-01 1.88378916e-01 1.87036013e-01 1.85702683e-01 1.84378860e-01 + 1.83064474e-01 1.81759459e-01 1.80463748e-01 1.79177274e-01 1.77899972e-01 + 1.76631776e-01 1.75372621e-01 1.74122443e-01 1.72881178e-01 1.71648762e-01 + 1.70425132e-01 1.69210225e-01 1.68003980e-01 1.66806334e-01 1.65617226e-01 + 1.64436595e-01 1.63264382e-01 1.62100525e-01 1.60944965e-01 1.59797644e-01 + 1.58658502e-01 1.57527480e-01 1.56404522e-01 1.55289570e-01 1.54182566e-01 + 1.53083453e-01 1.51992177e-01 1.50908680e-01 1.49832907e-01 1.48764803e-01 + 1.47704314e-01 1.46651386e-01 1.45605963e-01 1.44567993e-01 1.43537423e-01 + 1.42514199e-01 1.41498271e-01 1.40489584e-01 1.39488089e-01 1.38493732e-01 + 1.37506465e-01 1.36526236e-01 1.35552995e-01 1.34586691e-01 1.33627277e-01 + 1.32674702e-01 1.31728917e-01 1.30789875e-01 1.29857528e-01 1.28931827e-01 + 1.28012725e-01 1.27100175e-01 1.26194131e-01 1.25294545e-01 1.24401373e-01 + 1.23514568e-01 1.22634084e-01 1.21759878e-01 1.20891903e-01 1.20030116e-01 + 1.19174473e-01 1.18324929e-01 1.17481442e-01 1.16643967e-01 1.15812463e-01 + 1.14986886e-01 1.14167195e-01 1.13353347e-01 1.12545300e-01 1.11743014e-01 + 1.10946447e-01 1.10155559e-01 1.09370309e-01 1.08590657e-01 1.07816562e-01 + 1.07047986e-01 1.06284889e-01 1.05527232e-01 1.04774975e-01 1.04028082e-01 + 1.03286513e-01 1.02550230e-01 1.01819196e-01 1.01093373e-01 1.00372724e-01 + 9.96572130e-02 9.89468023e-02 9.82414559e-02 9.75411377e-02 9.68458118e-02 + 9.61554427e-02 9.54699950e-02 9.47894335e-02 9.41137236e-02 9.34428306e-02 + 9.27767201e-02 9.21153581e-02 9.14587107e-02 9.08067443e-02 9.01594255e-02 + 8.95167213e-02 8.88785986e-02 8.82450249e-02 8.76159677e-02 8.69913948e-02 + 8.63712742e-02 8.57555743e-02 8.51442634e-02 8.45373104e-02 8.39346840e-02 + 8.33363536e-02 8.27422884e-02 8.21524581e-02 8.15668325e-02 8.09853815e-02 + 8.04080755e-02 7.98348848e-02 7.92657803e-02 7.87007326e-02 7.81397129e-02 + 7.75826925e-02 7.70296429e-02 7.64805357e-02 7.59353429e-02 7.53940365e-02 + 7.48565889e-02 7.43229725e-02 7.37931601e-02 7.32671244e-02 7.27448387e-02 + 7.22262761e-02 7.17114101e-02 7.12002144e-02 7.06926628e-02 7.01887293e-02 + 6.96883881e-02 6.91916136e-02 6.86983804e-02 6.82086633e-02 6.77224371e-02 + 6.72396770e-02 6.67603584e-02 6.62844565e-02 6.58119472e-02 6.53428062e-02 + 6.48770095e-02 6.44145332e-02 6.39553537e-02 6.34994475e-02 6.30467913e-02 + 6.25973618e-02 6.21511361e-02 6.17080914e-02 6.12682049e-02 6.08314542e-02 + 6.03978168e-02 5.99672707e-02 5.95397938e-02 5.91153641e-02 5.86939600e-02 + 5.82755599e-02 5.78601423e-02 5.74476861e-02 5.70381701e-02 5.66315734e-02 + 5.62278751e-02 5.58270545e-02 5.54290913e-02 5.50339649e-02 5.46416552e-02 + 5.42521421e-02 5.38654056e-02 5.34814260e-02 5.31001837e-02 5.27216590e-02 + 5.23458326e-02 5.19726854e-02 5.16021981e-02 5.12343518e-02 5.08691278e-02 + 5.05065072e-02 5.01464716e-02 4.97890026e-02 4.94340817e-02 4.90816910e-02 + 4.87318122e-02 4.83844276e-02 4.80395193e-02 4.76970697e-02 4.73570612e-02 + 4.70194765e-02 4.66842983e-02 4.63515094e-02 4.60210928e-02 4.56930316e-02 + 4.53673090e-02 4.50439082e-02 4.47228129e-02 4.44040065e-02 4.40874727e-02 + 4.37731953e-02 4.34611583e-02 4.31513456e-02 4.28437414e-02 4.25383300e-02 + 4.22350957e-02 4.19340230e-02 4.16350965e-02 4.13383009e-02 4.10436211e-02 + 4.07510418e-02 4.04605482e-02 4.01721254e-02 3.98857586e-02 3.96014332e-02 + 3.93191346e-02 3.90388484e-02 3.87605602e-02 3.84842558e-02 3.82099210e-02 + 3.79375418e-02 3.76671043e-02 3.73985946e-02 3.71319989e-02 3.68673037e-02 + 3.66044954e-02 3.63435605e-02 3.60844856e-02 3.58272576e-02 3.55718633e-02 + 3.53182895e-02 3.50665233e-02 3.48165518e-02 3.45683623e-02 3.43219420e-02 + 3.40772783e-02 3.38343586e-02 3.35931707e-02 3.33537020e-02 3.31159404e-02 + 3.28798737e-02 3.26454897e-02 3.24127766e-02 3.21817224e-02 3.19523153e-02 + 3.17245434e-02 3.14983953e-02 3.12738592e-02 3.10509238e-02 3.08295775e-02 + 3.06098091e-02 3.03916074e-02 3.01749610e-02 2.99598591e-02 2.97462905e-02 + 2.95342443e-02 2.93237097e-02 2.91146759e-02 2.89071322e-02 2.87010679e-02 + 2.84964726e-02 2.82933358e-02 2.80916470e-02 2.78913959e-02 2.76925724e-02 + 2.74951661e-02 2.72991671e-02 2.71045652e-02 2.69113506e-02 2.67195132e-02 + 2.65290434e-02 2.63399314e-02 2.61521674e-02 2.59657420e-02 2.57806454e-02 + 2.55968683e-02 2.54144013e-02 2.52332350e-02 2.50533601e-02 2.48747675e-02 + 2.46974479e-02 2.45213924e-02 2.43465919e-02 2.41730374e-02 2.40007202e-02 + 2.38296313e-02 2.36597620e-02 2.34911036e-02 2.33236475e-02 2.31573851e-02 + 2.29923079e-02 2.28284075e-02 2.26656754e-02 2.25041034e-02 2.23436831e-02 + 2.21844064e-02 2.20262651e-02 2.18692510e-02 2.17133563e-02 2.15585729e-02 + 2.14048928e-02 2.12523082e-02 2.11008114e-02 2.09503945e-02 2.08010498e-02 + 2.06527697e-02 2.05055467e-02 2.03593731e-02 2.02142415e-02 2.00701445e-02 + 1.99270747e-02 1.97850247e-02 1.96439874e-02 1.95039554e-02 1.93649217e-02 + 1.92268790e-02 1.90898204e-02 1.89537388e-02 1.88186273e-02 1.86844789e-02 + 1.85512868e-02 1.84190442e-02 1.82877442e-02 1.81573802e-02 1.80279455e-02 + 1.78994335e-02 1.77718376e-02 1.76451512e-02 1.75193680e-02 1.73944813e-02 + 1.72704850e-02 1.71473725e-02 1.70251376e-02 1.69037741e-02 1.67832757e-02 + 1.66636363e-02 1.65448498e-02 1.64269100e-02 1.63098110e-02 1.61935467e-02 + 1.60781111e-02 1.59634985e-02 1.58497029e-02 1.57367184e-02 1.56245394e-02 + 1.55131600e-02 1.54025746e-02 1.52927776e-02 1.51837632e-02 1.50755259e-02 + 1.49680602e-02 1.48613605e-02 1.47554215e-02 1.46502376e-02 1.45458035e-02 + 1.44421139e-02 1.43391635e-02 1.42369469e-02 1.41354590e-02 1.40346945e-02 + 1.39346484e-02 1.38353154e-02 1.37366905e-02 1.36387686e-02 1.35415448e-02 + 1.34450141e-02 1.33491714e-02 1.32540120e-02 1.31595309e-02 1.30657234e-02 + 1.29725845e-02 1.28801096e-02 1.27882939e-02 1.26971327e-02 1.26063151e-02 + 1.25154436e-02 1.24245269e-02 1.23335755e-02 1.22425997e-02 1.21516097e-02 + 1.20606156e-02 1.19696276e-02 1.18786553e-02 1.17877088e-02 1.16967975e-02 + 1.16059312e-02 1.15151193e-02 1.14243711e-02 1.13336959e-02 1.12431028e-02 + 1.11526008e-02 1.10621990e-02 1.09719059e-02 1.08817305e-02 1.07916812e-02 + 1.07017665e-02 1.06119947e-02 1.05223742e-02 1.04329131e-02 1.03436193e-02 + 1.02545008e-02 1.01655655e-02 1.00768209e-02 9.98827475e-03 9.89993445e-03 + 9.81180737e-03 9.72390078e-03 9.63622180e-03 9.54877749e-03 9.46157475e-03 + 9.37462041e-03 9.28792117e-03 9.20148363e-03 9.11531428e-03 9.02941949e-03 + 8.94380554e-03 8.85847859e-03 8.77344469e-03 8.68870981e-03 8.60427978e-03 + 8.52016033e-03 8.43635711e-03 8.35287563e-03 8.26972131e-03 8.18689948e-03 + 8.10441534e-03 8.02227400e-03 7.94048046e-03 7.85903964e-03 7.77795632e-03 + 7.69723520e-03 7.61688088e-03 7.53689786e-03 7.45729054e-03 7.37806320e-03 + 7.29922004e-03 7.22076516e-03 7.14270257e-03 7.06503616e-03 6.98776974e-03 + 6.91090701e-03 6.83445160e-03 6.75840702e-03 6.68277668e-03 6.60756394e-03 + 6.53277201e-03 6.45840404e-03 6.38446310e-03 6.31095212e-03 6.23787400e-03 + 6.16523150e-03 6.09302732e-03 6.02126407e-03 5.94994425e-03 5.87907029e-03 + 5.80864453e-03 5.73866924e-03 5.66914657e-03 5.60007862e-03 5.53146739e-03 + 5.46331479e-03 5.39562266e-03 5.32839276e-03 5.26162676e-03 5.19532625e-03 + 5.12949276e-03 5.06412771e-03 4.99923247e-03 4.93480832e-03 4.87085646e-03 + 4.80737803e-03 4.74437407e-03 4.68184557e-03 4.61979344e-03 4.55821851e-03 + 4.49712154e-03 4.43650324e-03 4.37636421e-03 4.31670502e-03 4.25752614e-03 + 4.19882800e-03 4.14061094e-03 4.08287524e-03 4.02562113e-03 3.96884876e-03 + 3.91255821e-03 3.85674951e-03 3.80142263e-03 3.74657745e-03 3.69221384e-03 + 3.63833156e-03 3.58493033e-03 3.53200982e-03 3.47956964e-03 3.42760932e-03 + 3.37612837e-03 3.32512621e-03 3.27460223e-03 3.22455576e-03 3.17498607e-03 + 3.12589238e-03 3.07727386e-03 3.02912963e-03 2.98145877e-03 2.93426028e-03 + 2.88753314e-03 2.84127627e-03 2.79548856e-03 2.75016882e-03 2.70531585e-03 + 2.66092838e-03 2.61700511e-03 2.57354469e-03 2.53054574e-03 2.48800680e-03 + 2.44592643e-03 2.40430309e-03 2.36313524e-03 2.32242128e-03 2.28215958e-03 + 2.24234848e-03 2.20298627e-03 2.16407120e-03 2.12560150e-03 2.08757536e-03 + 2.04999094e-03 2.01284635e-03 1.97613968e-03 1.93986899e-03 1.90403230e-03 + 1.86862762e-03 1.83365289e-03 1.79910607e-03 1.76498506e-03 1.73128773e-03 + 1.69801194e-03 1.66515551e-03 1.63271624e-03 1.60069191e-03 1.56908027e-03 + 1.53787904e-03 1.50708593e-03 1.47669860e-03 1.44671473e-03 1.41713194e-03 + 1.38794786e-03 1.35916007e-03 1.33076615e-03 1.30276366e-03 1.27515013e-03 + 1.24792309e-03 1.22108002e-03 1.19461843e-03 1.16853578e-03 1.14282952e-03 + 1.11749709e-03 1.09253592e-03 1.06794342e-03 1.04371697e-03 1.01985397e-03 + 9.96351789e-04 9.73207785e-04 9.50419307e-04 9.27983692e-04 9.05898268e-04 + 8.84160354e-04 8.62767259e-04 8.41716282e-04 8.21004715e-04 8.00629843e-04 + 7.80588942e-04 7.60879284e-04 7.41498133e-04 7.22442746e-04 7.03710377e-04 + 6.85298275e-04 6.67203682e-04 6.49423839e-04 6.31955983e-04 6.14797347e-04 + 5.97945161e-04 5.81396654e-04 5.65149053e-04 5.49199583e-04 5.33545470e-04 + 5.18183936e-04 5.03112205e-04 4.88327503e-04 4.73827052e-04 4.59608080e-04 + 4.45667814e-04 4.32003482e-04 4.18612315e-04 4.05491548e-04 3.92638416e-04 + 3.80050161e-04 3.67724024e-04 3.55657254e-04 3.43847102e-04 3.32290824e-04 + 3.20985682e-04 3.09928942e-04 2.99117876e-04 2.88549763e-04 2.78221885e-04 + 2.68131534e-04 2.58276007e-04 2.48652609e-04 2.39258651e-04 2.30091454e-04 + 2.21148345e-04 2.12426659e-04 2.03923742e-04 1.95636945e-04 1.87563631e-04 + 1.79701172e-04 1.72046947e-04 1.64598349e-04 1.57352776e-04 1.50307641e-04 + 1.43460364e-04 1.36808378e-04 1.30349125e-04 1.24080059e-04 1.17998647e-04 + 1.12102364e-04 1.06388699e-04 1.00855154e-04 9.54992401e-05 9.03184837e-05 + 8.53104220e-05 8.04726054e-05 7.58025972e-05 7.12979737e-05 6.69563244e-05 + 6.27752523e-05 5.87523737e-05 5.48853189e-05 5.11717319e-05 4.76092706e-05 + 4.41956073e-05 4.09284284e-05 3.78054347e-05 3.48243416e-05 3.19828792e-05 + 2.92787923e-05 2.67098408e-05 2.42737994e-05 2.19684581e-05 1.97916221e-05 + 1.77411120e-05 1.58147637e-05 1.40104289e-05 1.23259747e-05 1.07592841e-05 + 9.30825580e-06 7.97080453e-06 6.74486090e-06 5.62837161e-06 4.61929948e-06 + 3.71562352e-06 2.91533901e-06 2.21645756e-06 1.61700713e-06 1.11503215e-06 + 7.08593517e-07 3.95768671e-07 1.74651632e-07 4.33530448e-08 0.00000000e+00 + 8.54089214e+04 8.54089214e+04 4.71851341e+04 3.12780768e+04 2.33258140e+04 + 1.85554559e+04 1.53760394e+04 1.31057232e+04 1.14035870e+04 1.00802305e+04 + 9.02201376e+03 8.15662046e+03 7.43583982e+03 6.82629521e+03 6.30414625e+03 + 5.85191002e+03 5.45647442e+03 5.10781256e+03 4.79812582e+03 4.52125743e+03 + 4.27228201e+03 4.04721238e+03 3.84278633e+03 3.65630905e+03 3.48553486e+03 + 3.32857745e+03 3.18384071e+03 3.04996505e+03 2.92578509e+03 2.81029625e+03 + 2.70262791e+03 2.60202179e+03 2.50781443e+03 2.41942281e+03 2.33633252e+03 + 2.25808794e+03 2.18428413e+03 2.11455989e+03 2.04859210e+03 1.98609078e+03 + 1.92679496e+03 1.87046914e+03 1.81690028e+03 1.76589516e+03 1.71727813e+03 + 1.67088917e+03 1.62658219e+03 1.58422355e+03 1.54369075e+03 1.50487129e+03 + 1.46766169e+03 1.43196661e+03 1.39769802e+03 1.36477457e+03 1.33312095e+03 + 1.30266729e+03 1.27334878e+03 1.24510512e+03 1.21788020e+03 1.19162171e+03 + 1.16628084e+03 1.14181198e+03 1.11817248e+03 1.09532240e+03 1.07322430e+03 + 1.05184306e+03 1.03114567e+03 1.01110113e+03 9.91680241e+02 9.72855519e+02 + 9.54601047e+02 9.36892379e+02 9.19706428e+02 9.03021378e+02 8.86816598e+02 + 8.71072562e+02 8.55770773e+02 8.40893704e+02 8.26424727e+02 8.12348062e+02 + 7.98648722e+02 7.85312464e+02 7.72325742e+02 7.59675669e+02 7.47349973e+02 + 7.35336964e+02 7.23625501e+02 7.12204954e+02 7.01065184e+02 6.90196508e+02 + 6.79589678e+02 6.69235854e+02 6.59126586e+02 6.49253787e+02 6.39609720e+02 + 6.30186973e+02 6.20978448e+02 6.11977343e+02 6.03177134e+02 5.94571564e+02 + 5.86154629e+02 5.77920564e+02 5.69863834e+02 5.61979120e+02 5.54261311e+02 + 5.46705492e+02 5.39306934e+02 5.32061090e+02 5.24963582e+02 5.18010194e+02 + 5.11196866e+02 5.04519685e+02 4.97974882e+02 4.91558820e+02 4.85267995e+02 + 4.79099023e+02 4.73048641e+02 4.67113699e+02 4.61291153e+02 4.55578065e+02 + 4.49971597e+02 4.44469004e+02 4.39067634e+02 4.33764924e+02 4.28558392e+02 + 4.23445639e+02 4.18424343e+02 4.13492256e+02 4.08647203e+02 4.03887075e+02 + 3.99209833e+02 3.94613497e+02 3.90096152e+02 3.85655939e+02 3.81291059e+02 + 3.76999763e+02 3.72780358e+02 3.68631201e+02 3.64550696e+02 3.60537296e+02 + 3.56589497e+02 3.52705842e+02 3.48884912e+02 3.45125332e+02 3.41425764e+02 + 3.37784909e+02 3.34201504e+02 3.30674322e+02 3.27202169e+02 3.23783884e+02 + 3.20418339e+02 3.17104435e+02 3.13841105e+02 3.10627308e+02 3.07462032e+02 + 3.04344294e+02 3.01273133e+02 2.98247616e+02 2.95266833e+02 2.92329900e+02 + 2.89435952e+02 2.86584149e+02 2.83773672e+02 2.81003722e+02 2.78273520e+02 + 2.75582308e+02 2.72929346e+02 2.70313911e+02 2.67735301e+02 2.65192828e+02 + 2.62685823e+02 2.60213632e+02 2.57775617e+02 2.55371156e+02 2.52999641e+02 + 2.50660479e+02 2.48353090e+02 2.46076909e+02 2.43831384e+02 2.41615975e+02 + 2.39430155e+02 2.37273410e+02 2.35145235e+02 2.33045140e+02 2.30972644e+02 + 2.28927278e+02 2.26908581e+02 2.24916107e+02 2.22949415e+02 2.21008077e+02 + 2.19091672e+02 2.17199792e+02 2.15332033e+02 2.13488004e+02 2.11667319e+02 + 2.09869604e+02 2.08094489e+02 2.06341616e+02 2.04610631e+02 2.02901189e+02 + 2.01212953e+02 1.99545592e+02 1.97898782e+02 1.96272206e+02 1.94665554e+02 + 1.93078520e+02 1.91510808e+02 1.89962126e+02 1.88432186e+02 1.86920710e+02 + 1.85427423e+02 1.83952055e+02 1.82494343e+02 1.81054029e+02 1.79630858e+02 + 1.78224583e+02 1.76834961e+02 1.75461751e+02 1.74104720e+02 1.72763638e+02 + 1.71438281e+02 1.70128427e+02 1.68833859e+02 1.67554365e+02 1.66289736e+02 + 1.65039768e+02 1.63804259e+02 1.62583012e+02 1.61375835e+02 1.60182536e+02 + 1.59002930e+02 1.57836834e+02 1.56684068e+02 1.55544455e+02 1.54417822e+02 + 1.53304000e+02 1.52202820e+02 1.51114119e+02 1.50037736e+02 1.48973511e+02 + 1.47921291e+02 1.46880920e+02 1.45852251e+02 1.44835133e+02 1.43829423e+02 + 1.42834978e+02 1.41851657e+02 1.40879323e+02 1.39917840e+02 1.38967075e+02 + 1.38026896e+02 1.37097174e+02 1.36177784e+02 1.35268599e+02 1.34369498e+02 + 1.33480360e+02 1.32601065e+02 1.31731497e+02 1.30871541e+02 1.30021083e+02 + 1.29180012e+02 1.28348219e+02 1.27525595e+02 1.26712033e+02 1.25907430e+02 + 1.25111682e+02 1.24324686e+02 1.23546344e+02 1.22776556e+02 1.22015225e+02 + 1.21262256e+02 1.20517553e+02 1.19781025e+02 1.19052579e+02 1.18332124e+02 + 1.17619573e+02 1.16914836e+02 1.16217827e+02 1.15528460e+02 1.14846652e+02 + 1.14172318e+02 1.13505378e+02 1.12845749e+02 1.12193352e+02 1.11548107e+02 + 1.10909938e+02 1.10278766e+02 1.09654517e+02 1.09037114e+02 1.08426484e+02 + 1.07822554e+02 1.07225250e+02 1.06634503e+02 1.06050240e+02 1.05472393e+02 + 1.04900892e+02 1.04335670e+02 1.03776657e+02 1.03223789e+02 1.02676999e+02 + 1.02136221e+02 1.01601391e+02 1.01072445e+02 1.00549321e+02 1.00031955e+02 + 9.95202850e+01 9.90142506e+01 9.85137906e+01 9.80188451e+01 9.75293545e+01 + 9.70452599e+01 9.65665028e+01 9.60930254e+01 9.56247704e+01 9.51616810e+01 + 9.47037009e+01 9.42507742e+01 9.38028458e+01 9.33598606e+01 9.29217644e+01 + 9.24885033e+01 9.20600236e+01 9.16362725e+01 9.12171972e+01 9.08027455e+01 + 9.03928657e+01 8.99875063e+01 8.95866163e+01 8.91901451e+01 8.87980424e+01 + 8.84102583e+01 8.80267434e+01 8.76474484e+01 8.72723244e+01 8.69013231e+01 + 8.65343963e+01 8.61714961e+01 8.58125750e+01 8.54575859e+01 8.51064819e+01 + 8.47592164e+01 8.44157432e+01 8.40760164e+01 8.37399902e+01 8.34076193e+01 + 8.30788587e+01 8.27536636e+01 8.24319894e+01 8.21137919e+01 8.17990272e+01 + 8.14876516e+01 8.11796217e+01 8.08748944e+01 8.05734267e+01 8.02751761e+01 + 7.99801003e+01 7.96881571e+01 7.93993048e+01 7.91135019e+01 7.88307069e+01 + 7.85508789e+01 7.82739771e+01 7.79999609e+01 7.77287902e+01 7.74604249e+01 + 7.71948253e+01 7.69319518e+01 7.66717652e+01 7.64142266e+01 7.61592973e+01 + 7.59069387e+01 7.56571128e+01 7.54097815e+01 7.51649071e+01 7.49224524e+01 + 7.46823800e+01 7.44446532e+01 7.42092353e+01 7.39760900e+01 7.37451811e+01 + 7.35164730e+01 7.32899300e+01 7.30655169e+01 7.28431986e+01 7.26229406e+01 + 7.24047084e+01 7.21884677e+01 7.19741848e+01 7.17618261e+01 7.15513583e+01 + 7.13427483e+01 7.11359635e+01 7.09309715e+01 7.07277401e+01 7.05262375e+01 + 7.03264321e+01 7.01282928e+01 6.99317885e+01 6.97368888e+01 6.95435632e+01 + 6.93517818e+01 6.91615148e+01 6.89727329e+01 6.87854070e+01 6.85995083e+01 + 6.84150084e+01 6.82318792e+01 6.80500928e+01 6.78696219e+01 6.76904391e+01 + 6.75125177e+01 6.73358312e+01 6.71603534e+01 6.69860584e+01 6.68129207e+01 + 6.66409151e+01 6.64700167e+01 6.63002010e+01 6.61314439e+01 6.59637213e+01 + 6.57970099e+01 6.56312863e+01 6.54665278e+01 6.53027117e+01 6.51398160e+01 + 6.49778186e+01 6.48166982e+01 6.46564335e+01 6.44970036e+01 6.43383881e+01 + 6.41805668e+01 6.40235197e+01 6.38672274e+01 6.37116708e+01 6.35568308e+01 + 6.34026891e+01 6.32492275e+01 6.30964280e+01 6.29442732e+01 6.27927459e+01 + 6.26418291e+01 6.24915063e+01 6.23417613e+01 6.21925783e+01 6.20439415e+01 + 6.18958357e+01 6.17482461e+01 6.16011579e+01 6.14545569e+01 6.13084290e+01 + 6.11627605e+01 6.10175380e+01 6.08727484e+01 6.07283791e+01 6.05844173e+01 + 6.04408511e+01 6.02976684e+01 6.01548577e+01 6.00124076e+01 5.98703072e+01 + 5.97285456e+01 5.95871125e+01 5.94459976e+01 5.93051910e+01 5.91646830e+01 + 5.90244644e+01 5.88845260e+01 5.87448589e+01 5.86054545e+01 5.84663047e+01 + 5.83274012e+01 5.81887362e+01 5.80503022e+01 5.79120918e+01 5.77740979e+01 + 5.76363137e+01 5.74987325e+01 5.73613480e+01 5.72241539e+01 5.70871444e+01 + 5.69503136e+01 5.68136560e+01 5.66771664e+01 5.65408396e+01 5.64046708e+01 + 5.62686552e+01 5.61327884e+01 5.59970660e+01 5.58614839e+01 5.57260382e+01 + 5.55907252e+01 5.54555412e+01 5.53204830e+01 5.51855472e+01 5.50507308e+01 + 5.49160309e+01 5.47814449e+01 5.46469700e+01 5.45126041e+01 5.43783446e+01 + 5.42441897e+01 5.41101372e+01 5.39761853e+01 5.38423325e+01 5.37085770e+01 + 5.35749175e+01 5.34413527e+01 5.33078815e+01 5.31745027e+01 5.30412154e+01 + 5.29080189e+01 5.27749124e+01 5.26418952e+01 5.25089671e+01 5.23761274e+01 + 5.22433760e+01 5.21107127e+01 5.19781374e+01 5.18456500e+01 5.17132507e+01 + 5.15809395e+01 5.14487169e+01 5.13165831e+01 5.11845384e+01 5.10525835e+01 + 5.09207189e+01 5.07889451e+01 5.06572630e+01 5.05256731e+01 5.03941765e+01 + 5.02627739e+01 5.01314663e+01 5.00002547e+01 4.98691402e+01 4.97381238e+01 + 4.96072067e+01 4.94763901e+01 4.93456753e+01 4.92150635e+01 4.90845560e+01 + 4.89541543e+01 4.88238597e+01 4.86936737e+01 4.85635977e+01 4.84336333e+01 + 4.83037819e+01 4.81740452e+01 4.80444247e+01 4.79149220e+01 4.77855388e+01 + 4.76562768e+01 4.75271375e+01 4.73981228e+01 4.72692343e+01 4.71404737e+01 + 4.70118428e+01 4.68833434e+01 4.67549771e+01 4.66267459e+01 4.64986515e+01 + 4.63706956e+01 4.62428801e+01 4.61152068e+01 4.59876775e+01 4.58602941e+01 + 4.57330582e+01 4.56059719e+01 4.54790368e+01 4.53522548e+01 4.52256277e+01 + 4.50991574e+01 4.49728457e+01 4.48466943e+01 4.47207051e+01 4.45948799e+01 + 4.44692205e+01 4.43437286e+01 4.42184061e+01 4.40932546e+01 4.39682761e+01 + 4.38434722e+01 4.37188447e+01 4.35943953e+01 4.34701257e+01 4.33460377e+01 + 4.32221329e+01 4.30984131e+01 4.29748798e+01 4.28515348e+01 4.27283798e+01 + 4.26054162e+01 4.24826459e+01 4.23600702e+01 4.22376909e+01 4.21155096e+01 + 4.19935276e+01 4.18717467e+01 4.17501683e+01 4.16287939e+01 4.15076250e+01 + 4.13866631e+01 4.12659096e+01 4.11453659e+01 4.10250336e+01 4.09049138e+01 + 4.07850081e+01 4.06653178e+01 4.05458443e+01 4.04265888e+01 4.03075526e+01 + 4.01887371e+01 4.00701435e+01 3.99517730e+01 3.98336269e+01 3.97157064e+01 + 3.95980126e+01 3.94805467e+01 3.93633099e+01 3.92463033e+01 3.91295280e+01 + 3.90129851e+01 3.88966757e+01 3.87806007e+01 3.86647613e+01 3.85491584e+01 + 3.84337931e+01 3.83186662e+01 3.82037788e+01 3.80891318e+01 3.79747260e+01 + 3.78605625e+01 3.77466420e+01 3.76329654e+01 3.75195335e+01 3.74063472e+01 + 3.72934073e+01 3.71807145e+01 3.70682695e+01 3.69560733e+01 3.68441263e+01 + 3.67324294e+01 3.66209833e+01 3.65097885e+01 3.63988459e+01 3.62881559e+01 + 3.61777192e+01 3.60675364e+01 3.59576080e+01 3.58479347e+01 3.57385170e+01 + 3.56293554e+01 3.55204504e+01 3.54118025e+01 3.53034122e+01 3.51952799e+01 + 3.50874060e+01 3.49797911e+01 3.48724355e+01 3.47653396e+01 3.46585038e+01 + 3.45519285e+01 3.44456139e+01 3.43395604e+01 3.42337684e+01 3.41282382e+01 + 3.40229699e+01 3.39179640e+01 3.38132206e+01 3.37087400e+01 3.36045224e+01 + 3.35005681e+01 3.33968772e+01 3.32934500e+01 3.31902865e+01 3.30873870e+01 + 3.29847516e+01 3.28823804e+01 3.27802736e+01 3.26784313e+01 3.25768535e+01 + 3.24755403e+01 3.23744918e+01 3.22737081e+01 3.21731893e+01 3.20729352e+01 + 3.19729460e+01 3.18732217e+01 3.17737623e+01 3.16745677e+01 3.15756379e+01 + 3.14769730e+01 3.13785728e+01 3.12804372e+01 3.11825664e+01 3.10849600e+01 + 3.09876181e+01 3.08905406e+01 3.07937274e+01 3.06971783e+01 3.06008932e+01 + 3.05048719e+01 3.04091144e+01 3.03136205e+01 3.02183900e+01 3.01234227e+01 + 3.00287185e+01 2.99342772e+01 2.98400985e+01 2.97461823e+01 2.96525283e+01 + 2.95591363e+01 2.94660061e+01 2.93731375e+01 2.92805302e+01 2.91881839e+01 + 2.90960984e+01 2.90042734e+01 2.89127086e+01 2.88214038e+01 2.87303587e+01 + 2.86395729e+01 2.85490462e+01 2.84587782e+01 2.83687687e+01 2.82790172e+01 + 2.81895236e+01 2.81002873e+01 2.80113082e+01 2.79225858e+01 2.78341198e+01 + 2.77459099e+01 2.76579556e+01 2.75702566e+01 2.74828125e+01 2.73956229e+01 + 2.73086875e+01 2.72220059e+01 2.71355776e+01 2.70494022e+01 2.69634795e+01 + 2.68778088e+01 2.67923899e+01 2.67072223e+01 2.66223055e+01 2.65376392e+01 + 2.64532230e+01 2.63690562e+01 2.62851387e+01 2.62014698e+01 2.61180491e+01 + 2.60348762e+01 2.59519507e+01 2.58692720e+01 2.57868397e+01 2.57046534e+01 + 2.56227125e+01 2.55410166e+01 2.54595652e+01 2.53783578e+01 2.52973940e+01 + 2.52166733e+01 2.51361951e+01 2.50559589e+01 2.49759644e+01 2.48962109e+01 + 2.48166980e+01 2.47374252e+01 2.46583919e+01 2.45795977e+01 2.45010421e+01 + 2.44227245e+01 2.43446444e+01 2.42668013e+01 2.41891946e+01 2.41118240e+01 + 2.40346888e+01 2.39577884e+01 2.38811225e+01 2.38046904e+01 2.37284917e+01 + 2.36525257e+01 2.35767919e+01 2.35012899e+01 2.34260191e+01 2.33509789e+01 + 2.32761688e+01 2.32015882e+01 2.31272367e+01 2.30531136e+01 2.29792185e+01 + 2.29055507e+01 2.28321097e+01 2.27588950e+01 2.26859061e+01 2.26131423e+01 + 2.25406031e+01 2.24682880e+01 2.23961964e+01 2.23243277e+01 2.22526815e+01 + 2.21812571e+01 2.21100539e+01 2.20390715e+01 2.19683093e+01 2.18977666e+01 + 2.18274430e+01 2.17573379e+01 2.16874508e+01 2.16177809e+01 2.15483279e+01 + 2.14790911e+01 2.14100700e+01 2.13412640e+01 2.12726726e+01 2.12042951e+01 + 2.11361311e+01 2.10681799e+01 2.10004410e+01 2.09329138e+01 2.08655978e+01 + 2.07984924e+01 2.07315971e+01 2.06649112e+01 2.05984342e+01 2.05321655e+01 + 2.04661046e+01 2.04002510e+01 2.03346039e+01 2.02691630e+01 2.02039276e+01 + 2.01388971e+01 2.00740711e+01 2.00094488e+01 1.99450298e+01 1.98808136e+01 + 1.98167994e+01 1.97529869e+01 1.96893754e+01 1.96259643e+01 1.95627531e+01 + 1.94997413e+01 1.94369282e+01 1.93743134e+01 1.93118962e+01 1.92496761e+01 + 1.91876525e+01 1.91258250e+01 1.90641928e+01 1.90027555e+01 1.89415126e+01 + 1.88804634e+01 1.88196074e+01 1.87589440e+01 1.86984728e+01 1.86381931e+01 + 1.85781044e+01 1.85182061e+01 1.84584977e+01 1.83989787e+01 1.83396484e+01 + 1.82805064e+01 1.82215521e+01 1.81627849e+01 1.81042044e+01 1.80458099e+01 + 1.79876009e+01 1.79295769e+01 1.78717373e+01 1.78140817e+01 1.77566093e+01 + 1.76993198e+01 1.76422125e+01 1.75852870e+01 1.75285426e+01 1.74719789e+01 + 1.74155954e+01 1.73593914e+01 1.73033665e+01 1.72475200e+01 1.71918516e+01 + 1.71363607e+01 1.70810466e+01 1.70259090e+01 1.69709472e+01 1.69161608e+01 + 1.68615492e+01 1.68071119e+01 1.67528484e+01 1.66987581e+01 1.66448405e+01 + 1.65910952e+01 1.65375215e+01 1.64841190e+01 1.64308872e+01 1.63778255e+01 + 1.63249334e+01 1.62722105e+01 1.62196561e+01 1.61672698e+01 1.61150511e+01 + 1.60629994e+01 1.60111143e+01 1.59593953e+01 1.59078418e+01 1.58564533e+01 + 1.58052293e+01 1.57541694e+01 1.57032730e+01 1.56525397e+01 1.56019688e+01 + 1.55515600e+01 1.55013128e+01 1.54512266e+01 1.54013009e+01 1.53515352e+01 + 1.53019291e+01 1.52524821e+01 1.52031937e+01 1.51540633e+01 1.51050906e+01 + 1.50562750e+01 1.50076159e+01 1.49591131e+01 1.49107659e+01 1.48625738e+01 + 1.48145365e+01 1.47666534e+01 1.47189241e+01 1.46713480e+01 1.46239246e+01 + 1.45766536e+01 1.45295345e+01 1.44825667e+01 1.44357498e+01 1.43890834e+01 + 1.43425669e+01 1.42961999e+01 1.42499819e+01 1.42039125e+01 1.41579912e+01 + 1.41122175e+01 1.40665910e+01 1.40211112e+01 1.39757777e+01 1.39305900e+01 + 1.38855476e+01 1.38406501e+01 1.37958971e+01 1.37512880e+01 1.37068225e+01 + 1.36625000e+01 1.36183202e+01 1.35742825e+01 1.35303866e+01 1.34866320e+01 + 1.34430183e+01 1.33995449e+01 1.33562115e+01 1.33130177e+01 1.32699629e+01 + 1.32270467e+01 1.31842688e+01 1.31416287e+01 1.30991259e+01 1.30567600e+01 + 1.30145306e+01 1.29724372e+01 1.29304794e+01 1.28886568e+01 1.28469690e+01 + 1.28054156e+01 1.27639960e+01 1.27227099e+01 1.26815569e+01 1.26405365e+01 + 1.25996484e+01 1.25588920e+01 1.25182671e+01 1.24777731e+01 1.24374097e+01 + 1.23971764e+01 1.23570729e+01 1.23170986e+01 1.22772533e+01 1.22375365e+01 + 1.21979477e+01 1.21584867e+01 1.21191529e+01 1.20799461e+01 1.20408656e+01 + 1.20019113e+01 1.19630826e+01 1.19243792e+01 1.18858007e+01 1.18473466e+01 + 1.18090166e+01 1.17708103e+01 1.17327273e+01 1.16947672e+01 1.16569296e+01 + 1.16192141e+01 1.15816204e+01 1.15441480e+01 1.15067965e+01 1.14695656e+01 + 1.14324549e+01 1.13954640e+01 1.13585925e+01 1.13218400e+01 1.12852062e+01 + 1.12486906e+01 1.12122930e+01 1.11760129e+01 1.11398499e+01 1.11038037e+01 + 1.10678739e+01 1.10320602e+01 1.09963621e+01 1.09607793e+01 1.09253114e+01 + 1.08899580e+01 1.08547189e+01 1.08195935e+01 1.07845816e+01 1.07496829e+01 + 1.07148968e+01 1.06802231e+01 1.06456614e+01 1.06112114e+01 1.05768727e+01 + 1.05426449e+01 1.05085277e+01 1.04745207e+01 1.04406236e+01 1.04068360e+01 + 1.03731576e+01 1.03395880e+01 1.03061269e+01 1.02727739e+01 1.02395287e+01 + 1.02063909e+01 1.01733603e+01 1.01404363e+01 1.01076188e+01 1.00749073e+01 + 1.00423016e+01 1.00098012e+01 9.97740586e+00 9.94511523e+00 9.91292898e+00 + 9.88084676e+00 9.84886825e+00 9.81699310e+00 9.78522099e+00 9.75355158e+00 + 9.72198455e+00 9.69051957e+00 9.65915630e+00 9.62789442e+00 9.59673361e+00 + 9.56567354e+00 9.53471389e+00 9.50385433e+00 9.47309455e+00 9.44243421e+00 + 9.41187301e+00 9.38141062e+00 9.35104672e+00 9.32078101e+00 9.29061315e+00 + 9.26054285e+00 9.23056977e+00 9.20069362e+00 9.17091408e+00 9.14123084e+00 + 9.11164358e+00 9.08215200e+00 9.05275580e+00 9.02345465e+00 8.99424827e+00 + 8.96513634e+00 8.93611856e+00 8.90719462e+00 8.87836423e+00 8.84962708e+00 + 8.82098287e+00 8.79243131e+00 8.76397209e+00 8.73560491e+00 8.70732949e+00 + 8.67914552e+00 8.65105271e+00 8.62305076e+00 8.59513939e+00 8.56731831e+00 + 8.53958721e+00 8.51194581e+00 8.48439382e+00 8.45693096e+00 8.42955693e+00 + 8.40227145e+00 8.37507424e+00 8.34796500e+00 8.32094347e+00 8.29400934e+00 + 8.26716234e+00 8.24040220e+00 8.21372862e+00 8.18714134e+00 8.16064006e+00 + 8.13422453e+00 8.10789445e+00 8.08164955e+00 8.05548956e+00 8.02941421e+00 + 8.00342321e+00 7.97751631e+00 7.95169322e+00 7.92595368e+00 7.90029741e+00 + 7.87472416e+00 7.84923364e+00 7.82382560e+00 7.79849977e+00 7.77325588e+00 + 7.74809366e+00 7.72301286e+00 7.69801321e+00 7.67309445e+00 7.64825632e+00 + 7.62349856e+00 7.59882090e+00 7.57422310e+00 7.54970489e+00 7.52526601e+00 + 7.50090621e+00 7.47662523e+00 7.45242282e+00 7.42829873e+00 7.40425270e+00 + 7.38028448e+00 7.35639382e+00 7.33258046e+00 7.30884417e+00 7.28518468e+00 + 7.26160176e+00 7.23809515e+00 7.21466461e+00 7.19130989e+00 7.16803075e+00 + 7.14482694e+00 7.12169822e+00 7.09864435e+00 7.07566508e+00 7.05276018e+00 + 7.02992940e+00 7.00717250e+00 6.98448925e+00 6.96187941e+00 6.93934274e+00 + 6.91687900e+00 6.89448796e+00 6.87216939e+00 6.84992304e+00 6.82774869e+00 + 6.80564610e+00 6.78361505e+00 6.76165529e+00 6.73976661e+00 6.71794876e+00 + 6.69620152e+00 6.67452467e+00 6.65291797e+00 6.63138120e+00 6.60991414e+00 + 6.58851655e+00 6.56718821e+00 6.54592890e+00 6.52473840e+00 6.50361648e+00 + 6.48256292e+00 6.46157750e+00 6.44066000e+00 6.41981020e+00 6.39902789e+00 + 6.37831283e+00 6.35766483e+00 6.33708365e+00 6.31656908e+00 6.29612092e+00 + 6.27573893e+00 6.25542292e+00 6.23517266e+00 6.21498794e+00 6.19486855e+00 + 6.17481429e+00 6.15482493e+00 6.13490027e+00 6.11504011e+00 6.09524422e+00 + 6.07551241e+00 6.05584446e+00 6.03624018e+00 6.01669935e+00 5.99722177e+00 + 5.97780723e+00 5.95845553e+00 5.93916647e+00 5.91993984e+00 5.90077545e+00 + 5.88167309e+00 5.86263256e+00 5.84365365e+00 5.82473619e+00 5.80587995e+00 + 5.78708475e+00 5.76835038e+00 5.74967666e+00 5.73106338e+00 5.71251035e+00 + 5.69401737e+00 5.67558425e+00 5.65721080e+00 5.63889682e+00 5.62064212e+00 + 5.60244651e+00 5.58430980e+00 5.56623179e+00 5.54821231e+00 5.53025115e+00 + 5.51234812e+00 5.49450305e+00 5.47671575e+00 5.45898602e+00 5.44131368e+00 + 5.42369855e+00 5.40614043e+00 5.38863915e+00 5.37119452e+00 5.35380636e+00 + 5.33647449e+00 5.31919872e+00 5.30197887e+00 5.28481476e+00 5.26770621e+00 + 5.25065305e+00 5.23365508e+00 5.21671214e+00 5.19982404e+00 5.18299061e+00 + 5.16621167e+00 5.14948704e+00 5.13281656e+00 5.11620003e+00 5.09963730e+00 + 5.08312818e+00 5.06667250e+00 5.05027009e+00 5.03392077e+00 5.01762438e+00 + 5.00138074e+00 4.98518969e+00 4.96905104e+00 4.95296464e+00 4.93693031e+00 + 4.92094789e+00 4.90501720e+00 4.88913808e+00 4.87331037e+00 4.85753389e+00 + 4.84180848e+00 4.82613398e+00 4.81051021e+00 4.79493703e+00 4.77941425e+00 + 4.76394173e+00 4.74851929e+00 4.73314678e+00 4.71782403e+00 4.70255088e+00 + 4.68732717e+00 4.67215275e+00 4.65702744e+00 4.64195110e+00 4.62692357e+00 + 4.61194468e+00 4.59701428e+00 4.58213221e+00 4.56729832e+00 4.55251245e+00 + 4.53777444e+00 4.52308415e+00 4.50844141e+00 4.49384606e+00 4.47929797e+00 + 4.46479697e+00 4.45034292e+00 4.43593566e+00 4.42157503e+00 4.40726089e+00 + 4.39299310e+00 4.37877148e+00 4.36459591e+00 4.35046623e+00 4.33638229e+00 + 4.32234394e+00 4.30835103e+00 4.29440343e+00 4.28050097e+00 4.26664352e+00 + 4.25283093e+00 4.23906306e+00 4.22533975e+00 4.21166087e+00 4.19802627e+00 + 4.18443581e+00 4.17088935e+00 4.15738674e+00 4.14392784e+00 4.13051251e+00 + 4.11714061e+00 4.10381200e+00 4.09052653e+00 4.07728407e+00 4.06408449e+00 + 4.05092763e+00 4.03781337e+00 4.02474156e+00 4.01171206e+00 3.99872475e+00 + 3.98577948e+00 3.97287611e+00 3.96001452e+00 3.94719457e+00 3.93441611e+00 + 3.92167903e+00 3.90898318e+00 3.89632842e+00 3.88371464e+00 3.87114168e+00 + 3.85860944e+00 3.84611776e+00 3.83366652e+00 3.82125558e+00 3.80888483e+00 + 3.79655412e+00 3.78426333e+00 3.77201234e+00 3.75980100e+00 3.74762919e+00 + 3.73549678e+00 3.72340365e+00 3.71134967e+00 3.69933472e+00 3.68735866e+00 + 3.67542137e+00 3.66352272e+00 3.65166259e+00 3.63984086e+00 3.62805740e+00 + 3.61631208e+00 3.60460479e+00 3.59293540e+00 3.58130378e+00 3.56970982e+00 + 3.55815340e+00 3.54663438e+00 3.53515266e+00 3.52370810e+00 3.51230060e+00 + 3.50093002e+00 3.48959626e+00 3.47829918e+00 3.46703868e+00 3.45581463e+00 + 3.44462692e+00 3.43347542e+00 3.42236003e+00 3.41128062e+00 3.40023708e+00 + 3.38922929e+00 3.37825713e+00 3.36732050e+00 3.35641927e+00 3.34555333e+00 + 3.33472257e+00 3.32392687e+00 3.31316612e+00 3.30244021e+00 3.29174901e+00 + 3.28109243e+00 3.27047035e+00 3.25988266e+00 3.24932924e+00 3.23880999e+00 + 3.22832479e+00 3.21787353e+00 3.20745611e+00 3.19707242e+00 3.18672234e+00 + 3.17640576e+00 3.16612258e+00 3.15587270e+00 3.14565599e+00 3.13547237e+00 + 3.12532170e+00 3.11520390e+00 3.10511886e+00 3.09506646e+00 3.08504661e+00 + 3.07505919e+00 3.06510411e+00 3.05518125e+00 3.04529052e+00 3.03543181e+00 + 3.02560501e+00 3.01581003e+00 3.00604676e+00 2.99631509e+00 2.98661493e+00 + 2.97694617e+00 2.96730871e+00 2.95770245e+00 2.94812729e+00 2.93858313e+00 + 2.92906986e+00 2.91958740e+00 2.91013563e+00 2.90071446e+00 2.89132379e+00 + 2.88196352e+00 2.87263355e+00 2.86333379e+00 2.85406413e+00 2.84482448e+00 + 2.83561475e+00 2.82643483e+00 2.81728463e+00 2.80816405e+00 2.79907299e+00 + 2.79001137e+00 2.78097909e+00 2.77197604e+00 2.76300214e+00 2.75405559e+00 + 2.74510554e+00 2.73614077e+00 2.72716164e+00 2.71816846e+00 2.70916157e+00 + 2.70014130e+00 2.69110798e+00 2.68206194e+00 2.67300350e+00 2.66393299e+00 + 2.65485073e+00 2.64575705e+00 2.63665226e+00 2.62753670e+00 2.61841067e+00 + 2.60927450e+00 2.60012851e+00 2.59097300e+00 2.58180831e+00 2.57263473e+00 + 2.56345258e+00 2.55426218e+00 2.54506383e+00 2.53585784e+00 2.52664452e+00 + 2.51742418e+00 2.50819712e+00 2.49896364e+00 2.48972406e+00 2.48047866e+00 + 2.47122774e+00 2.46197162e+00 2.45271058e+00 2.44344492e+00 2.43417494e+00 + 2.42490093e+00 2.41562317e+00 2.40634197e+00 2.39705762e+00 2.38777039e+00 + 2.37848057e+00 2.36918847e+00 2.35989434e+00 2.35059849e+00 2.34130118e+00 + 2.33200271e+00 2.32270335e+00 2.31340337e+00 2.30410306e+00 2.29480269e+00 + 2.28550252e+00 2.27620284e+00 2.26690392e+00 2.25760601e+00 2.24830940e+00 + 2.23901434e+00 2.22972110e+00 2.22042995e+00 2.21114115e+00 2.20185495e+00 + 2.19257162e+00 2.18329142e+00 2.17401459e+00 2.16474141e+00 2.15547211e+00 + 2.14620696e+00 2.13694620e+00 2.12769008e+00 2.11843885e+00 2.10919276e+00 + 2.09995205e+00 2.09071696e+00 2.08148774e+00 2.07226463e+00 2.06304787e+00 + 2.05383769e+00 2.04463433e+00 2.03543803e+00 2.02624901e+00 2.01706752e+00 + 2.00789378e+00 1.99872802e+00 1.98957047e+00 1.98042135e+00 1.97128090e+00 + 1.96214932e+00 1.95302685e+00 1.94391370e+00 1.93481009e+00 1.92571625e+00 + 1.91663238e+00 1.90755870e+00 1.89849542e+00 1.88944276e+00 1.88040092e+00 + 1.87137011e+00 1.86235054e+00 1.85334242e+00 1.84434594e+00 1.83536132e+00 + 1.82638875e+00 1.81742843e+00 1.80848057e+00 1.79954534e+00 1.79062296e+00 + 1.78171362e+00 1.77281750e+00 1.76393481e+00 1.75506572e+00 1.74621042e+00 + 1.73736911e+00 1.72854196e+00 1.71972916e+00 1.71093090e+00 1.70214734e+00 + 1.69337868e+00 1.68462508e+00 1.67588673e+00 1.66716380e+00 1.65845646e+00 + 1.64976489e+00 1.64108925e+00 1.63242971e+00 1.62378644e+00 1.61515960e+00 + 1.60654936e+00 1.59795589e+00 1.58937934e+00 1.58081988e+00 1.57227765e+00 + 1.56375283e+00 1.55524556e+00 1.54675599e+00 1.53828429e+00 1.52983061e+00 + 1.52139508e+00 1.51297787e+00 1.50457911e+00 1.49619895e+00 1.48783755e+00 + 1.47949503e+00 1.47117154e+00 1.46286723e+00 1.45458222e+00 1.44631666e+00 + 1.43807068e+00 1.42984441e+00 1.42163800e+00 1.41345156e+00 1.40528523e+00 + 1.39713914e+00 1.38901341e+00 1.38090818e+00 1.37282356e+00 1.36475967e+00 + 1.35671664e+00 1.34869460e+00 1.34069364e+00 1.33271391e+00 1.32475550e+00 + 1.31681854e+00 1.30890314e+00 1.30100940e+00 1.29313745e+00 1.28528739e+00 + 1.27745932e+00 1.26965336e+00 1.26186960e+00 1.25410815e+00 1.24636912e+00 + 1.23865261e+00 1.23095871e+00 1.22328752e+00 1.21563914e+00 1.20801367e+00 + 1.20041119e+00 1.19283181e+00 1.18527561e+00 1.17774269e+00 1.17023313e+00 + 1.16274702e+00 1.15528445e+00 1.14784550e+00 1.14043025e+00 1.13303880e+00 + 1.12567121e+00 1.11832758e+00 1.11100797e+00 1.10371247e+00 1.09644115e+00 + 1.08919409e+00 1.08197135e+00 1.07477302e+00 1.06759917e+00 1.06044985e+00 + 1.05332515e+00 1.04622513e+00 1.03914985e+00 1.03209938e+00 1.02507379e+00 + 1.01807313e+00 1.01109747e+00 1.00414687e+00 9.97221386e-01 9.90321073e-01 + 9.83445990e-01 9.76596193e-01 9.69771734e-01 9.62972667e-01 9.56199044e-01 + 9.49450914e-01 9.42728328e-01 9.36031332e-01 9.29359975e-01 9.22714301e-01 + 9.16094356e-01 9.09500183e-01 9.02931824e-01 8.96389320e-01 8.89872712e-01 + 8.83382038e-01 8.76917335e-01 8.70478642e-01 8.64065993e-01 8.57679422e-01 + 8.51318963e-01 8.44984649e-01 8.38676510e-01 8.32394576e-01 8.26138877e-01 + 8.19909440e-01 8.13706292e-01 8.07529459e-01 8.01378965e-01 7.95254834e-01 + 7.89157089e-01 7.83085752e-01 7.77040841e-01 7.71022378e-01 7.65030381e-01 + 7.59064866e-01 7.53125850e-01 7.47213349e-01 7.41327376e-01 7.35467946e-01 + 7.29635070e-01 7.23828760e-01 7.18049026e-01 7.12295878e-01 7.06569323e-01 + 7.00869370e-01 6.95196024e-01 6.89549291e-01 6.83929175e-01 6.78335681e-01 + 6.72768810e-01 6.67228564e-01 6.61714945e-01 6.56227951e-01 6.50767581e-01 + 6.45333835e-01 6.39926707e-01 6.34546195e-01 6.29192295e-01 6.23864999e-01 + 6.18564301e-01 6.13290195e-01 6.08042671e-01 6.02821721e-01 5.97627334e-01 + 5.92459499e-01 5.87318204e-01 5.82203438e-01 5.77115185e-01 5.72053432e-01 + 5.67018163e-01 5.62009363e-01 5.57027014e-01 5.52071099e-01 5.47141599e-01 + 5.42238495e-01 5.37361766e-01 5.32511392e-01 5.27687351e-01 5.22889620e-01 + 5.18118177e-01 5.13372996e-01 5.08654052e-01 5.03961322e-01 4.99294776e-01 + 4.94654390e-01 4.90040134e-01 4.85451980e-01 4.80889899e-01 4.76353860e-01 + 4.71843832e-01 4.67359785e-01 4.62901684e-01 4.58469498e-01 4.54063193e-01 + 4.49682734e-01 4.45328086e-01 4.40999213e-01 4.36696079e-01 4.32418646e-01 + 4.28166876e-01 4.23940731e-01 4.19740172e-01 4.15565159e-01 4.11415650e-01 + 4.07291606e-01 4.03192983e-01 3.99119741e-01 3.95071834e-01 3.91049220e-01 + 3.87051855e-01 3.83079693e-01 3.79132688e-01 3.75210796e-01 3.71313967e-01 + 3.67442156e-01 3.63595315e-01 3.59773394e-01 3.55976344e-01 3.52204117e-01 + 3.48456661e-01 3.44733925e-01 3.41035859e-01 3.37362410e-01 3.33713525e-01 + 3.30089152e-01 3.26489237e-01 3.22913726e-01 3.19362564e-01 3.15835697e-01 + 3.12333067e-01 3.08854620e-01 3.05400297e-01 3.01970043e-01 2.98563800e-01 + 2.95181508e-01 2.91823110e-01 2.88488547e-01 2.85177758e-01 2.81890683e-01 + 2.78627263e-01 2.75387435e-01 2.72171139e-01 2.68978312e-01 2.65808892e-01 + 2.62662816e-01 2.59540022e-01 2.56440444e-01 2.53364020e-01 2.50310684e-01 + 2.47280372e-01 2.44273018e-01 2.41288556e-01 2.38326921e-01 2.35388045e-01 + 2.32471862e-01 2.29578304e-01 2.26707304e-01 2.23858794e-01 2.21032705e-01 + 2.18228967e-01 2.15447513e-01 2.12688273e-01 2.09951176e-01 2.07236152e-01 + 2.04543131e-01 2.01872042e-01 1.99222813e-01 1.96595373e-01 1.93989650e-01 + 1.91405572e-01 1.88843066e-01 1.86302060e-01 1.83782479e-01 1.81284252e-01 + 1.78807303e-01 1.76351559e-01 1.73916946e-01 1.71503389e-01 1.69110813e-01 + 1.66739143e-01 1.64388303e-01 1.62058219e-01 1.59748813e-01 1.57460009e-01 + 1.55191732e-01 1.52943905e-01 1.50716450e-01 1.48509290e-01 1.46322348e-01 + 1.44155547e-01 1.42008808e-01 1.39882053e-01 1.37775205e-01 1.35688184e-01 + 1.33620912e-01 1.31573309e-01 1.29545298e-01 1.27536798e-01 1.25547730e-01 + 1.23578015e-01 1.21627572e-01 1.19696321e-01 1.17784183e-01 1.15891077e-01 + 1.14016921e-01 1.12161637e-01 1.10325142e-01 1.08507356e-01 1.06708197e-01 + 1.04927585e-01 1.03165437e-01 1.01421673e-01 9.96962103e-02 9.79889672e-02 + 9.62998618e-02 9.46288120e-02 9.29757356e-02 9.13405503e-02 8.97231736e-02 + 8.81235231e-02 8.65415161e-02 8.49770698e-02 8.34301014e-02 8.19005281e-02 + 8.03882668e-02 7.88932345e-02 7.74153479e-02 7.59545239e-02 7.45106790e-02 + 7.30837300e-02 7.16735935e-02 7.02801858e-02 6.89034235e-02 6.75432228e-02 + 6.61995003e-02 6.48721721e-02 6.35611545e-02 6.22663637e-02 6.09877158e-02 + 5.97251271e-02 5.84785135e-02 5.72477913e-02 5.60328764e-02 5.48336849e-02 + 5.36501328e-02 5.24821361e-02 5.13296109e-02 5.01924730e-02 4.90706386e-02 + 4.79640236e-02 4.68725440e-02 4.57961157e-02 4.47346549e-02 4.36880775e-02 + 4.26562996e-02 4.16392373e-02 4.06368065e-02 3.96489235e-02 3.86755044e-02 + 3.77164653e-02 3.67717225e-02 3.58411921e-02 3.49247905e-02 3.40224340e-02 + 3.31340390e-02 3.22595219e-02 3.13987991e-02 3.05517872e-02 2.97184028e-02 + 2.88985626e-02 2.80921832e-02 2.72991814e-02 2.65194740e-02 2.57529781e-02 + 2.49996105e-02 2.42592885e-02 2.35319290e-02 2.28174494e-02 2.21157669e-02 + 2.14267990e-02 2.07504632e-02 2.00866771e-02 1.94353583e-02 1.87964247e-02 + 1.81697941e-02 1.75553845e-02 1.69531141e-02 1.63629010e-02 1.57846636e-02 + 1.52183202e-02 1.46637895e-02 1.41209901e-02 1.35898408e-02 1.30702605e-02 + 1.25621682e-02 1.20654832e-02 1.15801246e-02 1.11060119e-02 1.06430648e-02 + 1.01912028e-02 9.75034577e-03 9.32041377e-03 8.90132688e-03 8.49300538e-03 + 8.09536966e-03 7.70834030e-03 7.33183802e-03 6.96578368e-03 6.61009831e-03 + 6.26470310e-03 5.92951939e-03 5.60446868e-03 5.28947266e-03 4.98445316e-03 + 4.68933218e-03 4.40403190e-03 4.12847467e-03 3.86258301e-03 3.60627963e-03 + 3.35948739e-03 3.12212936e-03 2.89412876e-03 2.67540903e-03 2.46589377e-03 + 2.26550676e-03 2.07417199e-03 1.89181364e-03 1.71835606e-03 1.55372381e-03 + 1.39784164e-03 1.25063451e-03 1.11202756e-03 9.81946133e-04 8.60315789e-04 + 7.47062278e-04 6.42111559e-04 5.45389798e-04 4.56823367e-04 3.76338850e-04 + 3.03863043e-04 2.39322951e-04 1.82645796e-04 1.33759016e-04 9.25902631e-05 + 5.90674105e-05 3.31185502e-05 1.46719954e-05 3.65628182e-06 0.00000000e+00 + 4.06412796e+00 4.06783653e+00 4.07704324e+00 4.08626532e+00 4.09550275e+00 + 4.10475551e+00 4.11402360e+00 4.12330700e+00 4.13260568e+00 4.14191965e+00 + 4.15124888e+00 4.16059336e+00 4.16995307e+00 4.17932799e+00 4.18871811e+00 + 4.19812340e+00 4.20754387e+00 4.21697947e+00 4.22643020e+00 4.23589604e+00 + 4.24537696e+00 4.25487296e+00 4.26438400e+00 4.27391007e+00 4.28345115e+00 + 4.29300721e+00 4.30257824e+00 4.31216421e+00 4.32176511e+00 4.33138090e+00 + 4.34101157e+00 4.35065709e+00 4.36031744e+00 4.36999260e+00 4.37968253e+00 + 4.38938722e+00 4.39910664e+00 4.40884076e+00 4.41858956e+00 4.42835301e+00 + 4.43813109e+00 4.44792376e+00 4.45773100e+00 4.46755278e+00 4.47738908e+00 + 4.48723985e+00 4.49710508e+00 4.50698473e+00 4.51687878e+00 4.52678718e+00 + 4.53670992e+00 4.54664696e+00 4.55659826e+00 4.56656380e+00 4.57654353e+00 + 4.58653744e+00 4.59654548e+00 4.60656761e+00 4.61660382e+00 4.62665405e+00 + 4.63671827e+00 4.64679645e+00 4.65688855e+00 4.66699453e+00 4.67711435e+00 + 4.68724799e+00 4.69739539e+00 4.70755652e+00 4.71773133e+00 4.72791980e+00 + 4.73812188e+00 4.74833752e+00 4.75856669e+00 4.76880934e+00 4.77906544e+00 + 4.78933493e+00 4.79961778e+00 4.80991393e+00 4.82022336e+00 4.83054600e+00 + 4.84088182e+00 4.85123077e+00 4.86159280e+00 4.87196787e+00 4.88235592e+00 + 4.89275691e+00 4.90317080e+00 4.91359752e+00 4.92403704e+00 4.93448930e+00 + 4.94495425e+00 4.95543184e+00 4.96592201e+00 4.97642472e+00 4.98693991e+00 + 4.99746754e+00 5.00800753e+00 5.01855985e+00 5.02912442e+00 5.03970121e+00 + 5.05029015e+00 5.06089119e+00 5.07150426e+00 5.08212932e+00 5.09276629e+00 + 5.10341513e+00 5.11407577e+00 5.12474815e+00 5.13543222e+00 5.14612790e+00 + 5.15683515e+00 5.16755389e+00 5.17828406e+00 5.18902560e+00 5.19977844e+00 + 5.21054252e+00 5.22131778e+00 5.23210415e+00 5.24290155e+00 5.25370993e+00 + 5.26452922e+00 5.27535934e+00 5.28620023e+00 5.29705182e+00 5.30791404e+00 + 5.31878681e+00 5.32967007e+00 5.34056375e+00 5.35146776e+00 5.36238204e+00 + 5.37330652e+00 5.38424111e+00 5.39518574e+00 5.40614035e+00 5.41710484e+00 + 5.42807915e+00 5.43906319e+00 5.45005689e+00 5.46106017e+00 5.47207294e+00 + 5.48309514e+00 5.49412667e+00 5.50516746e+00 5.51621742e+00 5.52727647e+00 + 5.53834452e+00 5.54942150e+00 5.56050732e+00 5.57160189e+00 5.58270512e+00 + 5.59381693e+00 5.60493724e+00 5.61606594e+00 5.62720297e+00 5.63834821e+00 + 5.64950159e+00 5.66066301e+00 5.67183239e+00 5.68300962e+00 5.69419463e+00 + 5.70538730e+00 5.71658756e+00 5.72779530e+00 5.73901042e+00 5.75023284e+00 + 5.76146246e+00 5.77269917e+00 5.78394289e+00 5.79519350e+00 5.80645092e+00 + 5.81771503e+00 5.82898575e+00 5.84026296e+00 5.85154657e+00 5.86283647e+00 + 5.87413256e+00 5.88543473e+00 5.89674289e+00 5.90805691e+00 5.91937670e+00 + 5.93070215e+00 5.94203316e+00 5.95336960e+00 5.96471138e+00 5.97605838e+00 + 5.98741049e+00 5.99876760e+00 6.01012960e+00 6.02149638e+00 6.03286782e+00 + 6.04424380e+00 6.05562422e+00 6.06700896e+00 6.07839789e+00 6.08979091e+00 + 6.10118790e+00 6.11258873e+00 6.12399329e+00 6.13540145e+00 6.14681311e+00 + 6.15822813e+00 6.16964639e+00 6.18106777e+00 6.19249215e+00 6.20391941e+00 + 6.21534941e+00 6.22678203e+00 6.23821715e+00 6.24965464e+00 6.26109436e+00 + 6.27253621e+00 6.28398003e+00 6.29542571e+00 6.30687311e+00 6.31832210e+00 + 6.32977255e+00 6.34122433e+00 6.35267730e+00 6.36413133e+00 6.37558628e+00 + 6.38704202e+00 6.39849842e+00 6.40995532e+00 6.42141261e+00 6.43287013e+00 + 6.44432776e+00 6.45578534e+00 6.46724275e+00 6.47869983e+00 6.49015644e+00 + 6.50161246e+00 6.51306772e+00 6.52452208e+00 6.53597541e+00 6.54742756e+00 + 6.55887837e+00 6.57032771e+00 6.58177542e+00 6.59322136e+00 6.60466538e+00 + 6.61610733e+00 6.62754705e+00 6.63898441e+00 6.65041923e+00 6.66185139e+00 + 6.67328071e+00 6.68470705e+00 6.69613025e+00 6.70755016e+00 6.71896662e+00 + 6.73037948e+00 6.74178857e+00 6.75319375e+00 6.76459484e+00 6.77599170e+00 + 6.78738417e+00 6.79877207e+00 6.81015526e+00 6.82153357e+00 6.83290684e+00 + 6.84427490e+00 6.85563759e+00 6.86699475e+00 6.87834621e+00 6.88969181e+00 + 6.90103138e+00 6.91236475e+00 6.92369176e+00 6.93501224e+00 6.94632601e+00 + 6.95763292e+00 6.96893279e+00 6.98022544e+00 6.99151072e+00 7.00278844e+00 + 7.01405843e+00 7.02532053e+00 7.03657455e+00 7.04782033e+00 7.05905769e+00 + 7.07028644e+00 7.08150643e+00 7.09271747e+00 7.10391938e+00 7.11511199e+00 + 7.12629511e+00 7.13746858e+00 7.14863220e+00 7.15978581e+00 7.17092921e+00 + 7.18206223e+00 7.19318469e+00 7.20429640e+00 7.21539719e+00 7.22648686e+00 + 7.23756524e+00 7.24863215e+00 7.25968738e+00 7.27073077e+00 7.28176213e+00 + 7.29278126e+00 7.30378798e+00 7.31478212e+00 7.32576346e+00 7.33673184e+00 + 7.34768706e+00 7.35862893e+00 7.36955726e+00 7.38047187e+00 7.39137255e+00 + 7.40225913e+00 7.41313140e+00 7.42398918e+00 7.43483228e+00 7.44566050e+00 + 7.45647365e+00 7.46727153e+00 7.47805396e+00 7.48882073e+00 7.49957166e+00 + 7.51030654e+00 7.52102519e+00 7.53172740e+00 7.54241298e+00 7.55308173e+00 + 7.56373346e+00 7.57436797e+00 7.58498506e+00 7.59558453e+00 7.60616619e+00 + 7.61672984e+00 7.62727527e+00 7.63780229e+00 7.64831069e+00 7.65880029e+00 + 7.66927087e+00 7.67972224e+00 7.69015420e+00 7.70056655e+00 7.71095908e+00 + 7.72133159e+00 7.73168388e+00 7.74201575e+00 7.75232700e+00 7.76261742e+00 + 7.77288682e+00 7.78313498e+00 7.79336172e+00 7.80356681e+00 7.81375006e+00 + 7.82391127e+00 7.83405023e+00 7.84416673e+00 7.85426058e+00 7.86433157e+00 + 7.87437949e+00 7.88440415e+00 7.89440533e+00 7.90438283e+00 7.91433644e+00 + 7.92426597e+00 7.93417120e+00 7.94405193e+00 7.95390796e+00 7.96373908e+00 + 7.97354509e+00 7.98332577e+00 7.99308093e+00 8.00281035e+00 8.01251384e+00 + 8.02219119e+00 8.03184219e+00 8.04146664e+00 8.05106433e+00 8.06063505e+00 + 8.07017861e+00 8.07969479e+00 8.08918339e+00 8.09864421e+00 8.10807704e+00 + 8.11748167e+00 8.12685791e+00 8.13620553e+00 8.14552435e+00 8.15481416e+00 + 8.16407475e+00 8.17330592e+00 8.18250746e+00 8.19167916e+00 8.20082084e+00 + 8.20993228e+00 8.21901327e+00 8.22806362e+00 8.23708313e+00 8.24607158e+00 + 8.25502879e+00 8.26395453e+00 8.27284862e+00 8.28171085e+00 8.29054102e+00 + 8.29933893e+00 8.30810438e+00 8.31683717e+00 8.32553709e+00 8.33420394e+00 + 8.34283754e+00 8.35143767e+00 8.36000414e+00 8.36853676e+00 8.37703531e+00 + 8.38549961e+00 8.39392946e+00 8.40232465e+00 8.41068500e+00 8.41901031e+00 + 8.42730037e+00 8.43555501e+00 8.44377401e+00 8.45195719e+00 8.46010436e+00 + 8.46821531e+00 8.47628987e+00 8.48432782e+00 8.49232899e+00 8.50029318e+00 + 8.50822020e+00 8.51610986e+00 8.52396198e+00 8.53177635e+00 8.53955280e+00 + 8.54729113e+00 8.55499116e+00 8.56265270e+00 8.57027557e+00 8.57785958e+00 + 8.58540454e+00 8.59291028e+00 8.60037660e+00 8.60780333e+00 8.61519028e+00 + 8.62253727e+00 8.62984412e+00 8.63711066e+00 8.64433670e+00 8.65152206e+00 + 8.65866656e+00 8.66577004e+00 8.67283231e+00 8.67985319e+00 8.68683252e+00 + 8.69377012e+00 8.70066582e+00 8.70751944e+00 8.71433081e+00 8.72109977e+00 + 8.72782614e+00 8.73450975e+00 8.74115044e+00 8.74774804e+00 8.75430239e+00 + 8.76081331e+00 8.76728065e+00 8.77370424e+00 8.78008391e+00 8.78641952e+00 + 8.79271089e+00 8.79895787e+00 8.80516030e+00 8.81131803e+00 8.81743088e+00 + 8.82349872e+00 8.82952138e+00 8.83549872e+00 8.84143057e+00 8.84731680e+00 + 8.85315724e+00 8.85895175e+00 8.86470018e+00 8.87040239e+00 8.87605822e+00 + 8.88166754e+00 8.88723019e+00 8.89274604e+00 8.89821495e+00 8.90363677e+00 + 8.90901137e+00 8.91433860e+00 8.91961834e+00 8.92485044e+00 8.93003477e+00 + 8.93517119e+00 8.94025959e+00 8.94529981e+00 8.95029174e+00 8.95523525e+00 + 8.96013020e+00 8.96497648e+00 8.96977395e+00 8.97452250e+00 8.97922200e+00 + 8.98387233e+00 8.98847338e+00 8.99302501e+00 8.99752712e+00 9.00197960e+00 + 9.00638231e+00 9.01073516e+00 9.01503803e+00 9.01929081e+00 9.02349339e+00 + 9.02764567e+00 9.03174753e+00 9.03579887e+00 9.03979959e+00 9.04374958e+00 + 9.04764875e+00 9.05149699e+00 9.05529422e+00 9.05904032e+00 9.06273520e+00 + 9.06637878e+00 9.06997095e+00 9.07351163e+00 9.07700073e+00 9.08043816e+00 + 9.08382383e+00 9.08715765e+00 9.09043955e+00 9.09366944e+00 9.09684724e+00 + 9.09997287e+00 9.10304626e+00 9.10606732e+00 9.10903597e+00 9.11195216e+00 + 9.11481580e+00 9.11762683e+00 9.12038517e+00 9.12309076e+00 9.12574353e+00 + 9.12834342e+00 9.13089036e+00 9.13338430e+00 9.13582517e+00 9.13821291e+00 + 9.14054747e+00 9.14282880e+00 9.14505683e+00 9.14723152e+00 9.14935282e+00 + 9.15142067e+00 9.15343503e+00 9.15539586e+00 9.15730311e+00 9.15915673e+00 + 9.16095669e+00 9.16270294e+00 9.16439545e+00 9.16603418e+00 9.16761910e+00 + 9.16915017e+00 9.17062736e+00 9.17205064e+00 9.17341998e+00 9.17473536e+00 + 9.17599674e+00 9.17720412e+00 9.17835745e+00 9.17945673e+00 9.18050193e+00 + 9.18149304e+00 9.18243003e+00 9.18331291e+00 9.18414165e+00 9.18491623e+00 + 9.18563667e+00 9.18630293e+00 9.18691503e+00 9.18747295e+00 9.18797669e+00 + 9.18842625e+00 9.18882163e+00 9.18916283e+00 9.18944985e+00 9.18968271e+00 + 9.18986140e+00 9.18998593e+00 9.19005632e+00 9.19007257e+00 9.19003470e+00 + 9.18994273e+00 9.18979666e+00 9.18959652e+00 9.18934232e+00 9.18903409e+00 + 9.18867185e+00 9.18825562e+00 9.18778542e+00 9.18726130e+00 9.18668327e+00 + 9.18605136e+00 9.18536561e+00 9.18462604e+00 9.18383270e+00 9.18298563e+00 + 9.18208485e+00 9.18113041e+00 9.18012235e+00 9.17906071e+00 9.17794554e+00 + 9.17677688e+00 9.17555479e+00 9.17427930e+00 9.17295047e+00 9.17156835e+00 + 9.17013299e+00 9.16864446e+00 9.16710280e+00 9.16550808e+00 9.16386035e+00 + 9.16215967e+00 9.16040612e+00 9.15859974e+00 9.15674061e+00 9.15482879e+00 + 9.15286435e+00 9.15084737e+00 9.14877791e+00 9.14665604e+00 9.14448185e+00 + 9.14225540e+00 9.13997677e+00 9.13764605e+00 9.13526330e+00 9.13282862e+00 + 9.13034209e+00 9.12780378e+00 9.12521379e+00 9.12257220e+00 9.11987911e+00 + 9.11713459e+00 9.11433875e+00 9.11149167e+00 9.10859345e+00 9.10564418e+00 + 9.10264397e+00 9.09959290e+00 9.09649108e+00 9.09333860e+00 9.09013558e+00 + 9.08688211e+00 9.08357830e+00 9.08022426e+00 9.07682008e+00 9.07336589e+00 + 9.06986178e+00 9.06630788e+00 9.06270429e+00 9.05905112e+00 9.05534850e+00 + 9.05159653e+00 9.04779534e+00 9.04394504e+00 9.04004575e+00 9.03609759e+00 + 9.03210069e+00 9.02805517e+00 9.02396116e+00 9.01981877e+00 9.01562814e+00 + 9.01138939e+00 9.00710265e+00 9.00276806e+00 8.99838574e+00 8.99395583e+00 + 8.98947846e+00 8.98495376e+00 8.98038187e+00 8.97576293e+00 8.97109708e+00 + 8.96638445e+00 8.96162519e+00 8.95681943e+00 8.95196732e+00 8.94706900e+00 + 8.94212462e+00 8.93713431e+00 8.93209824e+00 8.92701653e+00 8.92188935e+00 + 8.91671684e+00 8.91149915e+00 8.90623643e+00 8.90092884e+00 8.89557652e+00 + 8.89017964e+00 8.88473834e+00 8.87925278e+00 8.87372312e+00 8.86814952e+00 + 8.86253212e+00 8.85687110e+00 8.85116662e+00 8.84541882e+00 8.83962789e+00 + 8.83379397e+00 8.82791723e+00 8.82199783e+00 8.81603595e+00 8.81003174e+00 + 8.80398538e+00 8.79789702e+00 8.79176684e+00 8.78559501e+00 8.77938169e+00 + 8.77312706e+00 8.76683129e+00 8.76049454e+00 8.75411700e+00 8.74769883e+00 + 8.74124020e+00 8.73474130e+00 8.72820229e+00 8.72162336e+00 8.71500467e+00 + 8.70834641e+00 8.70164876e+00 8.69491188e+00 8.68813596e+00 8.68132118e+00 + 8.67446772e+00 8.66757576e+00 8.66064548e+00 8.65367706e+00 8.64667068e+00 + 8.63962653e+00 8.63254478e+00 8.62542563e+00 8.61826925e+00 8.61107584e+00 + 8.60384557e+00 8.59657863e+00 8.58927521e+00 8.58193549e+00 8.57455966e+00 + 8.56714790e+00 8.55970041e+00 8.55221737e+00 8.54469898e+00 8.53714541e+00 + 8.52955686e+00 8.52193351e+00 8.51427557e+00 8.50658321e+00 8.49885663e+00 + 8.49109602e+00 8.48330156e+00 8.47547346e+00 8.46761190e+00 8.45971708e+00 + 8.45178918e+00 8.44382840e+00 8.43583493e+00 8.42780897e+00 8.41975070e+00 + 8.41166033e+00 8.40353804e+00 8.39538403e+00 8.38719849e+00 8.37898162e+00 + 8.37073361e+00 8.36245465e+00 8.35414495e+00 8.34580469e+00 8.33743407e+00 + 8.32903329e+00 8.32060254e+00 8.31214201e+00 8.30365190e+00 8.29513241e+00 + 8.28658374e+00 8.27800607e+00 8.26939960e+00 8.26076454e+00 8.25210107e+00 + 8.24340939e+00 8.23468970e+00 8.22594219e+00 8.21716706e+00 8.20836451e+00 + 8.19953473e+00 8.19067791e+00 8.18179426e+00 8.17288396e+00 8.16394722e+00 + 8.15498424e+00 8.14599519e+00 8.13698029e+00 8.12793973e+00 8.11887370e+00 + 8.10978240e+00 8.10066603e+00 8.09152477e+00 8.08235883e+00 8.07316840e+00 + 8.06395367e+00 8.05471485e+00 8.04545211e+00 8.03616567e+00 8.02685571e+00 + 8.01752243e+00 8.00816601e+00 7.99878667e+00 7.98938458e+00 7.97995994e+00 + 7.97051296e+00 7.96104381e+00 7.95155269e+00 7.94203979e+00 7.93250532e+00 + 7.92294945e+00 7.91337238e+00 7.90377431e+00 7.89415542e+00 7.88451590e+00 + 7.87485596e+00 7.86517577e+00 7.85547552e+00 7.84575542e+00 7.83601564e+00 + 7.82625638e+00 7.81647783e+00 7.80668017e+00 7.79686359e+00 7.78702829e+00 + 7.77717445e+00 7.76730225e+00 7.75741189e+00 7.74750355e+00 7.73757742e+00 + 7.72763369e+00 7.71767253e+00 7.70769414e+00 7.69769870e+00 7.68768640e+00 + 7.67765742e+00 7.66761194e+00 7.65755015e+00 7.64747223e+00 7.63737837e+00 + 7.62726874e+00 7.61714352e+00 7.60700291e+00 7.59684708e+00 7.58667621e+00 + 7.57649048e+00 7.56629007e+00 7.55607516e+00 7.54584593e+00 7.53560256e+00 + 7.52534522e+00 7.51507410e+00 7.50478936e+00 7.49449120e+00 7.48417977e+00 + 7.47385527e+00 7.46351786e+00 7.45316771e+00 7.44280501e+00 7.43242993e+00 + 7.42204263e+00 7.41164329e+00 7.40123209e+00 7.39080920e+00 7.38037478e+00 + 7.36992901e+00 7.35947205e+00 7.34900408e+00 7.33852527e+00 7.32803578e+00 + 7.31753578e+00 7.30702545e+00 7.29650493e+00 7.28597442e+00 7.27543405e+00 + 7.26488402e+00 7.25432447e+00 7.24375557e+00 7.23317749e+00 7.22259039e+00 + 7.21199442e+00 7.20138976e+00 7.19077657e+00 7.18015500e+00 7.16952521e+00 + 7.15888737e+00 7.14824163e+00 7.13758815e+00 7.12692709e+00 7.11625861e+00 + 7.10558286e+00 7.09490000e+00 7.08421018e+00 7.07351356e+00 7.06281029e+00 + 7.05210053e+00 7.04138443e+00 7.03066215e+00 7.01993382e+00 7.00919961e+00 + 6.99845967e+00 6.98771414e+00 6.97696317e+00 6.96620692e+00 6.95544553e+00 + 6.94467914e+00 6.93390791e+00 6.92313198e+00 6.91235150e+00 6.90156661e+00 + 6.89077746e+00 6.87998418e+00 6.86918693e+00 6.85838585e+00 6.84758107e+00 + 6.83677273e+00 6.82596099e+00 6.81514597e+00 6.80432782e+00 6.79350668e+00 + 6.78268268e+00 6.77185596e+00 6.76102665e+00 6.75019490e+00 6.73936084e+00 + 6.72852461e+00 6.71768633e+00 6.70684614e+00 6.69600417e+00 6.68516056e+00 + 6.67431544e+00 6.66346894e+00 6.65262118e+00 6.64177230e+00 6.63092243e+00 + 6.62007169e+00 6.60922022e+00 6.59836813e+00 6.58751556e+00 6.57666263e+00 + 6.56580946e+00 6.55495619e+00 6.54410293e+00 6.53324981e+00 6.52239695e+00 + 6.51154446e+00 6.50069248e+00 6.48984112e+00 6.47899051e+00 6.46814075e+00 + 6.45729198e+00 6.44644430e+00 6.43559784e+00 6.42475271e+00 6.41390903e+00 + 6.40306690e+00 6.39222646e+00 6.38138781e+00 6.37055106e+00 6.35971632e+00 + 6.34888372e+00 6.33805335e+00 6.32722534e+00 6.31639979e+00 6.30557680e+00 + 6.29475650e+00 6.28393898e+00 6.27312436e+00 6.26231274e+00 6.25150422e+00 + 6.24069892e+00 6.22989694e+00 6.21909838e+00 6.20830334e+00 6.19751193e+00 + 6.18672426e+00 6.17594041e+00 6.16516051e+00 6.15438463e+00 6.14361289e+00 + 6.13284538e+00 6.12208221e+00 6.11132347e+00 6.10056925e+00 6.08981965e+00 + 6.07907478e+00 6.06833472e+00 6.05759958e+00 6.04686943e+00 6.03614439e+00 + 6.02542453e+00 6.01470996e+00 6.00400077e+00 5.99329704e+00 5.98259887e+00 + 5.97190634e+00 5.96121955e+00 5.95053859e+00 5.93986353e+00 5.92919448e+00 + 5.91853152e+00 5.90787472e+00 5.89722419e+00 5.88658000e+00 5.87594224e+00 + 5.86531099e+00 5.85468634e+00 5.84406836e+00 5.83345715e+00 5.82285277e+00 + 5.81225532e+00 5.80166487e+00 5.79108151e+00 5.78050530e+00 5.76993634e+00 + 5.75937469e+00 5.74882044e+00 5.73827366e+00 5.72773443e+00 5.71720283e+00 + 5.70667892e+00 5.69616279e+00 5.68565450e+00 5.67515414e+00 5.66466177e+00 + 5.65417746e+00 5.64370130e+00 5.63323334e+00 5.62277366e+00 5.61232233e+00 + 5.60187942e+00 5.59144500e+00 5.58101913e+00 5.57060189e+00 5.56019334e+00 + 5.54979355e+00 5.53940258e+00 5.52902050e+00 5.51864737e+00 5.50828327e+00 + 5.49792824e+00 5.48758237e+00 5.47724570e+00 5.46691830e+00 5.45660024e+00 + 5.44629158e+00 5.43599237e+00 5.42570267e+00 5.41542255e+00 5.40515207e+00 + 5.39489128e+00 5.38464024e+00 5.37439902e+00 5.36416766e+00 5.35394622e+00 + 5.34373477e+00 5.33353335e+00 5.32334202e+00 5.31316083e+00 5.30298985e+00 + 5.29282912e+00 5.28267869e+00 5.27253863e+00 5.26240898e+00 5.25228979e+00 + 5.24218111e+00 5.23208300e+00 5.22199550e+00 5.21191867e+00 5.20185256e+00 + 5.19179721e+00 5.18175267e+00 5.17171899e+00 5.16169621e+00 5.15168439e+00 + 5.14168357e+00 5.13169380e+00 5.12171512e+00 5.11174758e+00 5.10179121e+00 + 5.09184608e+00 5.08191221e+00 5.07198966e+00 5.06207846e+00 5.05217866e+00 + 5.04229030e+00 5.03241343e+00 5.02254807e+00 5.01269428e+00 5.00285209e+00 + 4.99302155e+00 4.98320269e+00 4.97339555e+00 4.96360017e+00 4.95381659e+00 + 4.94404484e+00 4.93428497e+00 4.92453700e+00 4.91480098e+00 4.90507695e+00 + 4.89536493e+00 4.88566496e+00 4.87597708e+00 4.86630132e+00 4.85663772e+00 + 4.84698631e+00 4.83734712e+00 4.82772018e+00 4.81810553e+00 4.80850320e+00 + 4.79891322e+00 4.78933562e+00 4.77977044e+00 4.77021769e+00 4.76067742e+00 + 4.75114965e+00 4.74163441e+00 4.73213174e+00 4.72264165e+00 4.71316418e+00 + 4.70369935e+00 4.69424719e+00 4.68480774e+00 4.67538100e+00 4.66596702e+00 + 4.65656582e+00 4.64717742e+00 4.63780185e+00 4.62843913e+00 4.61908929e+00 + 4.60975235e+00 4.60042833e+00 4.59111726e+00 4.58181917e+00 4.57253407e+00 + 4.56326198e+00 4.55400294e+00 4.54475695e+00 4.53552405e+00 4.52630425e+00 + 4.51709757e+00 4.50790404e+00 4.49872367e+00 4.48955648e+00 4.48040250e+00 + 4.47126174e+00 4.46213422e+00 4.45301995e+00 4.44391897e+00 4.43483128e+00 + 4.42575690e+00 4.41669585e+00 4.40764815e+00 4.39861381e+00 4.38959285e+00 + 4.38058529e+00 4.37159113e+00 4.36261041e+00 4.35364312e+00 4.34468929e+00 + 4.33574893e+00 4.32682205e+00 4.31790867e+00 4.30900881e+00 4.30012247e+00 + 4.29124966e+00 4.28239041e+00 4.27354472e+00 4.26471261e+00 4.25589408e+00 + 4.24708916e+00 4.23829784e+00 4.22952014e+00 4.22075608e+00 4.21200566e+00 + 4.20326889e+00 4.19454579e+00 4.18583635e+00 4.17714060e+00 4.16845854e+00 + 4.15979019e+00 4.15113553e+00 4.14249460e+00 4.13386739e+00 4.12525392e+00 + 4.11665419e+00 4.10806820e+00 4.09949597e+00 4.09093751e+00 4.08239281e+00 + 4.07386189e+00 4.06534475e+00 4.05684139e+00 4.04835184e+00 4.03987608e+00 + 4.03141412e+00 4.02296598e+00 4.01453165e+00 4.00611113e+00 3.99770444e+00 + 3.98931158e+00 3.98093255e+00 3.97256735e+00 3.96421600e+00 3.95587848e+00 + 3.94755481e+00 3.93924499e+00 3.93094901e+00 3.92266689e+00 3.91439862e+00 + 3.90614421e+00 3.89790366e+00 3.88967697e+00 3.88146413e+00 3.87326516e+00 + 3.86508006e+00 3.85690881e+00 3.84875144e+00 3.84060792e+00 3.83247827e+00 + 3.82436249e+00 3.81626057e+00 3.80817252e+00 3.80009833e+00 3.79203800e+00 + 3.78399153e+00 3.77595892e+00 3.76794018e+00 3.75993529e+00 3.75194425e+00 + 3.74396707e+00 3.73600375e+00 3.72805427e+00 3.72011864e+00 3.71219685e+00 + 3.70428890e+00 3.69639480e+00 3.68851453e+00 3.68064809e+00 3.67279548e+00 + 3.66495669e+00 3.65713173e+00 3.64932058e+00 3.64152325e+00 3.63373972e+00 + 3.62597000e+00 3.61821408e+00 3.61047196e+00 3.60274362e+00 3.59502907e+00 + 3.58732830e+00 3.57964131e+00 3.57196808e+00 3.56430861e+00 3.55666291e+00 + 3.54903095e+00 3.54141274e+00 3.53380827e+00 3.52621753e+00 3.51864051e+00 + 3.51107722e+00 3.50352763e+00 3.49599176e+00 3.48846958e+00 3.48096109e+00 + 3.47346628e+00 3.46598515e+00 3.45851769e+00 3.45106389e+00 3.44362374e+00 + 3.43619724e+00 3.42878437e+00 3.42138513e+00 3.41399951e+00 3.40662750e+00 + 3.39926909e+00 3.39192428e+00 3.38459305e+00 3.37727539e+00 3.36997131e+00 + 3.36268077e+00 3.35540379e+00 3.34814034e+00 3.34089043e+00 3.33365403e+00 + 3.32643114e+00 3.31922175e+00 3.31202584e+00 3.30484342e+00 3.29767446e+00 + 3.29051896e+00 3.28337691e+00 3.27624829e+00 3.26913310e+00 3.26203132e+00 + 3.25494295e+00 3.24786797e+00 3.24080638e+00 3.23375815e+00 3.22672328e+00 + 3.21970176e+00 3.21269357e+00 3.20569871e+00 3.19871717e+00 3.19174892e+00 + 3.18479396e+00 3.17785228e+00 3.17092386e+00 3.16400870e+00 3.15710677e+00 + 3.15021808e+00 3.14334260e+00 3.13648032e+00 3.12963123e+00 3.12279532e+00 + 3.11597257e+00 3.10916298e+00 3.10236652e+00 3.09558319e+00 3.08881297e+00 + 3.08205585e+00 3.07531182e+00 3.06858086e+00 3.06186296e+00 3.05515810e+00 + 3.04846628e+00 3.04178747e+00 3.03512167e+00 3.02846886e+00 3.02182902e+00 + 3.01520215e+00 3.00858823e+00 3.00198724e+00 2.99539917e+00 2.98882400e+00 + 2.98226173e+00 2.97571234e+00 2.96917581e+00 2.96265212e+00 2.95614127e+00 + 2.94964324e+00 2.94315802e+00 2.93668558e+00 2.93022592e+00 2.92377902e+00 + 2.91734486e+00 2.91092343e+00 2.90451471e+00 2.89811870e+00 2.89173537e+00 + 2.88536471e+00 2.87900670e+00 2.87266133e+00 2.86632858e+00 2.86000844e+00 + 2.85370090e+00 2.84740593e+00 2.84112351e+00 2.83485365e+00 2.82859631e+00 + 2.82235149e+00 2.81611916e+00 2.80989931e+00 2.80369193e+00 2.79749700e+00 + 2.79131451e+00 2.78514443e+00 2.77898675e+00 2.77284146e+00 2.76670853e+00 + 2.76058796e+00 2.75447972e+00 2.74838381e+00 2.74230020e+00 2.73622887e+00 + 2.73016982e+00 2.72412302e+00 2.71808845e+00 2.71206611e+00 2.70605597e+00 + 2.70005802e+00 2.69407224e+00 2.68809862e+00 2.68213713e+00 2.67618776e+00 + 2.67025050e+00 2.66432532e+00 2.65841221e+00 2.65251116e+00 2.64662214e+00 + 2.64074514e+00 2.63488014e+00 2.62902713e+00 2.62318608e+00 2.61735698e+00 + 2.61153982e+00 2.60573457e+00 2.59994122e+00 2.59415976e+00 2.58839016e+00 + 2.58263240e+00 2.57688647e+00 2.57115236e+00 2.56543004e+00 2.55971950e+00 + 2.55402071e+00 2.54833367e+00 2.54265836e+00 2.53699475e+00 2.53134283e+00 + 2.52570258e+00 2.52007399e+00 2.51445704e+00 2.50885170e+00 2.50325797e+00 + 2.49767582e+00 2.49210523e+00 2.48654620e+00 2.48099869e+00 2.47546270e+00 + 2.46993821e+00 2.46442519e+00 2.45892363e+00 2.45343351e+00 2.44795481e+00 + 2.44248753e+00 2.43703163e+00 2.43158710e+00 2.42615392e+00 2.42073208e+00 + 2.41532155e+00 2.40992232e+00 2.40453438e+00 2.39915769e+00 2.39379225e+00 + 2.38843804e+00 2.38309504e+00 2.37776322e+00 2.37244258e+00 2.36713309e+00 + 2.36183474e+00 2.35654751e+00 2.35127138e+00 2.34600633e+00 2.34075234e+00 + 2.33550940e+00 2.33027749e+00 2.32505659e+00 2.31984668e+00 2.31464774e+00 + 2.30945976e+00 2.30428272e+00 2.29911659e+00 2.29396137e+00 2.28881702e+00 + 2.28368355e+00 2.27856091e+00 2.27344911e+00 2.26834812e+00 2.26325792e+00 + 2.25817849e+00 2.25310982e+00 2.24805188e+00 2.24300466e+00 2.23796815e+00 + 2.23294231e+00 2.22792715e+00 2.22292262e+00 2.21792873e+00 2.21294544e+00 + 2.20797275e+00 2.20301063e+00 2.19805906e+00 2.19311803e+00 2.18818752e+00 + 2.18326751e+00 2.17835798e+00 2.17345892e+00 2.16857030e+00 2.16369211e+00 + 2.15882433e+00 2.15396694e+00 2.14911992e+00 2.14428325e+00 2.13945693e+00 + 2.13464092e+00 2.12983521e+00 2.12503978e+00 2.12025462e+00 2.11547970e+00 + 2.11071501e+00 2.10596053e+00 2.10121624e+00 2.09648213e+00 2.09175816e+00 + 2.08704434e+00 2.08234063e+00 2.07764702e+00 2.07296350e+00 2.06829004e+00 + 2.06362662e+00 2.05897323e+00 2.05432985e+00 2.04969647e+00 2.04507305e+00 + 2.04045960e+00 2.03585608e+00 2.03126247e+00 2.02667877e+00 2.02210496e+00 + 2.01754101e+00 2.01298690e+00 2.00844262e+00 2.00390816e+00 1.99938349e+00 + 1.99486859e+00 1.99036345e+00 1.98586805e+00 1.98138237e+00 1.97690639e+00 + 1.97244010e+00 1.96798348e+00 1.96353650e+00 1.95909916e+00 1.95467143e+00 + 1.95025330e+00 1.94584474e+00 1.94144574e+00 1.93705629e+00 1.93267636e+00 + 1.92830594e+00 1.92394500e+00 1.91959354e+00 1.91525153e+00 1.91091895e+00 + 1.90659579e+00 1.90228203e+00 1.89797766e+00 1.89368264e+00 1.88939698e+00 + 1.88512064e+00 1.88085361e+00 1.87659588e+00 1.87234743e+00 1.86810823e+00 + 1.86387827e+00 1.85965754e+00 1.85544601e+00 1.85124367e+00 1.84705050e+00 + 1.84286648e+00 1.83869160e+00 1.83452583e+00 1.83036917e+00 1.82622159e+00 + 1.82208307e+00 1.81795360e+00 1.81383316e+00 1.80972174e+00 1.80561931e+00 + 1.80152586e+00 1.79744137e+00 1.79336582e+00 1.78929920e+00 1.78524149e+00 + 1.78119267e+00 1.77715272e+00 1.77312163e+00 1.76909939e+00 1.76508596e+00 + 1.76108134e+00 1.75708551e+00 1.75309844e+00 1.74912014e+00 1.74515057e+00 + 1.74118972e+00 1.73723757e+00 1.73329410e+00 1.72935931e+00 1.72543317e+00 + 1.72151566e+00 1.71760676e+00 1.71370647e+00 1.70981477e+00 1.70593162e+00 + 1.70205703e+00 1.69819097e+00 1.69433343e+00 1.69048438e+00 1.68664382e+00 + 1.68281172e+00 1.67898807e+00 1.67517286e+00 1.67136605e+00 1.66756765e+00 + 1.66377762e+00 1.65999597e+00 1.65622265e+00 1.65245767e+00 1.64870101e+00 + 1.64495264e+00 1.64121256e+00 1.63748074e+00 1.63375716e+00 1.63004182e+00 + 1.62633470e+00 1.62263577e+00 1.61894502e+00 1.61526245e+00 1.61158802e+00 + 1.60792172e+00 1.60426354e+00 1.60061346e+00 1.59697146e+00 1.59333753e+00 + 1.58971165e+00 1.58609381e+00 1.58248399e+00 1.57888216e+00 1.57528833e+00 + 1.57170246e+00 1.56812455e+00 1.56455458e+00 1.56099252e+00 1.55743837e+00 + 1.55389211e+00 1.55035373e+00 1.54682320e+00 1.54330051e+00 1.53978565e+00 + 1.53627860e+00 1.53277934e+00 1.52928786e+00 1.52580413e+00 1.52232816e+00 + 1.51885991e+00 1.51539938e+00 1.51194655e+00 1.50850139e+00 1.50506391e+00 + 1.50163407e+00 1.49821187e+00 1.49479729e+00 1.49139031e+00 1.48799092e+00 + 1.48459910e+00 1.48121484e+00 1.47783812e+00 1.47446893e+00 1.47110724e+00 + 1.46775305e+00 1.46440634e+00 1.46106709e+00 1.45773529e+00 1.45441092e+00 + 1.45109397e+00 1.44778442e+00 1.44448226e+00 1.44118747e+00 1.43790003e+00 + 1.43461994e+00 1.43134717e+00 1.42808171e+00 1.42482354e+00 1.42157265e+00 + 1.41832903e+00 1.41509266e+00 1.41186352e+00 1.40864160e+00 1.40542689e+00 + 1.40221936e+00 1.39901901e+00 1.39582581e+00 1.39263976e+00 1.38946084e+00 + 1.38628904e+00 1.38312433e+00 1.37996670e+00 1.37681615e+00 1.37367265e+00 + 1.37053619e+00 1.36740676e+00 1.36428433e+00 1.36116890e+00 1.35806045e+00 + 1.35495897e+00 1.35186444e+00 1.34877684e+00 1.34569617e+00 1.34262240e+00 + 1.33955553e+00 1.33649554e+00 1.33344241e+00 1.33039613e+00 1.32735668e+00 + 1.32432406e+00 1.32129824e+00 1.31827921e+00 1.31526696e+00 1.31226147e+00 + 1.30926273e+00 1.30627073e+00 1.30328544e+00 1.30030687e+00 1.29733498e+00 + 1.29436977e+00 1.29141122e+00 1.28845932e+00 1.28551406e+00 1.28257542e+00 + 1.27964338e+00 1.27671794e+00 1.27379907e+00 1.27088677e+00 1.26798102e+00 + 1.26508181e+00 1.26218912e+00 1.25930293e+00 1.25642325e+00 1.25355004e+00 + 1.25068330e+00 1.24782302e+00 1.24496917e+00 1.24212175e+00 1.23928074e+00 + 1.23644613e+00 1.23361790e+00 1.23079605e+00 1.22798055e+00 1.22517139e+00 + 1.22236857e+00 1.21957206e+00 1.21678186e+00 1.21399794e+00 1.21122030e+00 + 1.20844892e+00 1.20568379e+00 1.20292490e+00 1.20017223e+00 1.19742577e+00 + 1.19468550e+00 1.19195141e+00 1.18922350e+00 1.18650174e+00 1.18378612e+00 + 1.18107663e+00 1.17837325e+00 1.17567598e+00 1.17298479e+00 1.17029969e+00 + 1.16762064e+00 1.16492387e+00 1.16213751e+00 1.15925731e+00 1.15628397e+00 + 1.15321822e+00 1.15006080e+00 1.14681247e+00 1.14347399e+00 1.14004614e+00 + 1.13652972e+00 1.13292553e+00 1.12923439e+00 1.12545713e+00 1.12159460e+00 + 1.11764764e+00 1.11361712e+00 1.10950393e+00 1.10530894e+00 1.10103307e+00 + 1.09667722e+00 1.09224230e+00 1.08772926e+00 1.08313904e+00 1.07847259e+00 + 1.07373086e+00 1.06891483e+00 1.06402548e+00 1.05906380e+00 1.05403079e+00 + 1.04892746e+00 1.04375481e+00 1.03851388e+00 1.03320569e+00 1.02783129e+00 + 1.02239172e+00 1.01688803e+00 1.01132129e+00 1.00569257e+00 1.00000294e+00 + 9.94253473e-01 9.88445268e-01 9.82579415e-01 9.76657013e-01 9.70679167e-01 + 9.64646985e-01 9.58561585e-01 9.52424084e-01 9.46235609e-01 9.39997288e-01 + 9.33710253e-01 9.27375643e-01 9.20994598e-01 9.14568262e-01 9.08097783e-01 + 9.01584312e-01 8.95029002e-01 8.88433010e-01 8.81797494e-01 8.75123616e-01 + 8.68412537e-01 8.61665423e-01 8.54883440e-01 8.48067755e-01 8.41219538e-01 + 8.34339956e-01 8.27430181e-01 8.20491384e-01 8.13524734e-01 8.06531404e-01 + 7.99512564e-01 7.92469384e-01 7.85403035e-01 7.78314685e-01 7.71205503e-01 + 7.64076656e-01 7.56929308e-01 7.49764624e-01 7.42583767e-01 7.35387895e-01 + 7.28178168e-01 7.20955740e-01 7.13721765e-01 7.06477392e-01 6.99223769e-01 + 6.91962040e-01 6.84693345e-01 6.77418822e-01 6.70139603e-01 6.62856818e-01 + 6.55571593e-01 6.48285047e-01 6.40998299e-01 6.33712459e-01 6.26428635e-01 + 6.19147929e-01 6.11871437e-01 6.04600250e-01 5.97335456e-01 5.90078134e-01 + 5.82829357e-01 5.75590196e-01 5.68361711e-01 5.61144959e-01 5.53940989e-01 + 5.46750843e-01 5.39575557e-01 5.32416160e-01 5.25273674e-01 5.18149112e-01 + 5.11043482e-01 5.03957784e-01 4.96893007e-01 4.89850137e-01 4.82830149e-01 + 4.75834011e-01 4.68862681e-01 4.61917111e-01 4.54998243e-01 4.48107011e-01 + 4.41244339e-01 4.34411143e-01 4.27608330e-01 4.20836798e-01 4.14097435e-01 + 4.07391119e-01 4.00718721e-01 3.94081100e-01 3.87479106e-01 3.80913579e-01 + 3.74385350e-01 3.67895238e-01 3.61444053e-01 3.55032596e-01 3.48661655e-01 + 3.42332009e-01 3.36044427e-01 3.29799666e-01 3.23598473e-01 3.17441585e-01 + 3.11329726e-01 3.05263611e-01 2.99243943e-01 2.93271414e-01 2.87346706e-01 + 2.81470487e-01 2.75643416e-01 2.69866139e-01 2.64139293e-01 2.58463501e-01 + 2.52839376e-01 2.47267517e-01 2.41748515e-01 2.36282946e-01 2.30871375e-01 + 2.25514356e-01 2.20212432e-01 2.14966130e-01 2.09775970e-01 2.04642457e-01 + 1.99566084e-01 1.94547333e-01 1.89586674e-01 1.84684564e-01 1.79841448e-01 + 1.75057759e-01 1.70333918e-01 1.65670332e-01 1.61067399e-01 1.56525503e-01 + 1.52045014e-01 1.47626293e-01 1.43269686e-01 1.38975529e-01 1.34744143e-01 + 1.30575839e-01 1.26470915e-01 1.22429656e-01 1.18452335e-01 1.14539213e-01 + 1.10690539e-01 1.06906550e-01 1.03187468e-01 9.95335069e-02 9.59448653e-02 + 9.24217306e-02 8.89642782e-02 8.55726710e-02 8.22470599e-02 7.89875836e-02 + 7.57943689e-02 7.26675303e-02 6.96071705e-02 6.66133801e-02 6.36862378e-02 + 6.08258104e-02 5.80321528e-02 5.53053081e-02 5.26453077e-02 5.00521712e-02 + 4.75259065e-02 4.50665099e-02 4.26739664e-02 4.03482489e-02 3.80893195e-02 + 3.58971284e-02 3.37716148e-02 3.17127063e-02 2.97203197e-02 2.77943602e-02 + 2.59347223e-02 2.41412894e-02 2.24139337e-02 2.07525169e-02 1.91568897e-02 + 1.76268922e-02 1.61623537e-02 1.47630931e-02 1.34289187e-02 1.21596286e-02 + 1.09550102e-02 9.81484109e-03 8.73888848e-03 7.72690959e-03 6.77865166e-03 + 5.89385204e-03 5.07223831e-03 4.31352836e-03 3.61743045e-03 2.98364337e-03 + 2.41185648e-03 1.90174984e-03 1.45299430e-03 1.06525159e-03 7.38174448e-04 + 4.71406686e-04 2.64583325e-04 1.17330685e-04 2.92664954e-05 0.00000000e+00 + 1.14636847e+01 1.14637147e+01 1.15240318e+01 1.15846601e+01 1.16456011e+01 + 1.17068565e+01 1.17684277e+01 1.18303164e+01 1.18925239e+01 1.19550520e+01 + 1.20179021e+01 1.20810759e+01 1.21445749e+01 1.22084007e+01 1.22725549e+01 + 1.23370391e+01 1.24018548e+01 1.24670037e+01 1.25324875e+01 1.25983076e+01 + 1.26644659e+01 1.27309638e+01 1.27978031e+01 1.28649853e+01 1.29325122e+01 + 1.30003854e+01 1.30686065e+01 1.31371773e+01 1.32060994e+01 1.32753745e+01 + 1.33450043e+01 1.34149905e+01 1.34853349e+01 1.35560390e+01 1.36271047e+01 + 1.36985337e+01 1.37703277e+01 1.38424884e+01 1.39150176e+01 1.39879171e+01 + 1.40611886e+01 1.41348338e+01 1.42088546e+01 1.42832528e+01 1.43580300e+01 + 1.44331882e+01 1.45087290e+01 1.45846544e+01 1.46609661e+01 1.47376660e+01 + 1.48147558e+01 1.48922374e+01 1.49701127e+01 1.50483835e+01 1.51270516e+01 + 1.52061190e+01 1.52855874e+01 1.53654587e+01 1.54457349e+01 1.55264178e+01 + 1.56075093e+01 1.56890113e+01 1.57709257e+01 1.58532545e+01 1.59359994e+01 + 1.60191626e+01 1.61027458e+01 1.61867511e+01 1.62711803e+01 1.63560355e+01 + 1.64413185e+01 1.65270315e+01 1.66131762e+01 1.66997547e+01 1.67867690e+01 + 1.68742211e+01 1.69621130e+01 1.70504466e+01 1.71392240e+01 1.72284472e+01 + 1.73181182e+01 1.74082391e+01 1.74988118e+01 1.75898384e+01 1.76813210e+01 + 1.77732616e+01 1.78656623e+01 1.79585251e+01 1.80518522e+01 1.81456455e+01 + 1.82399071e+01 1.83346392e+01 1.84298439e+01 1.85255232e+01 1.86216793e+01 + 1.87183142e+01 1.88154301e+01 1.89130291e+01 1.90111134e+01 1.91096850e+01 + 1.92087462e+01 1.93082990e+01 1.94083456e+01 1.95088881e+01 1.96099288e+01 + 1.97114699e+01 1.98135133e+01 1.99160615e+01 2.00191164e+01 2.01226804e+01 + 2.02267556e+01 2.03313443e+01 2.04364485e+01 2.05420707e+01 2.06482128e+01 + 2.07548773e+01 2.08620662e+01 2.09697819e+01 2.10780265e+01 2.11868023e+01 + 2.12961116e+01 2.14059566e+01 2.15163395e+01 2.16272627e+01 2.17387283e+01 + 2.18507387e+01 2.19632961e+01 2.20764027e+01 2.21900610e+01 2.23042731e+01 + 2.24190413e+01 2.25343679e+01 2.26502553e+01 2.27667057e+01 2.28837215e+01 + 2.30013049e+01 2.31194582e+01 2.32381838e+01 2.33574839e+01 2.34773610e+01 + 2.35978172e+01 2.37188550e+01 2.38404767e+01 2.39626846e+01 2.40854811e+01 + 2.42088684e+01 2.43328489e+01 2.44574250e+01 2.45825991e+01 2.47083733e+01 + 2.48347502e+01 2.49617321e+01 2.50893212e+01 2.52175201e+01 2.53463309e+01 + 2.54757562e+01 2.56057981e+01 2.57364592e+01 2.58677418e+01 2.59996482e+01 + 2.61321808e+01 2.62653420e+01 2.63991341e+01 2.65335596e+01 2.66686207e+01 + 2.68043198e+01 2.69406594e+01 2.70776417e+01 2.72152692e+01 2.73535442e+01 + 2.74924691e+01 2.76320462e+01 2.77722780e+01 2.79131668e+01 2.80547149e+01 + 2.81969248e+01 2.83397987e+01 2.84833391e+01 2.86275483e+01 2.87724286e+01 + 2.89179825e+01 2.90642123e+01 2.92111203e+01 2.93587088e+01 2.95069803e+01 + 2.96559371e+01 2.98055815e+01 2.99559159e+01 3.01069425e+01 3.02586638e+01 + 3.04110820e+01 3.05641996e+01 3.07180187e+01 3.08725417e+01 3.10277709e+01 + 3.11837087e+01 3.13403573e+01 3.14977190e+01 3.16557962e+01 3.18145911e+01 + 3.19741059e+01 3.21343430e+01 3.22953047e+01 3.24569931e+01 3.26194106e+01 + 3.27825594e+01 3.29464417e+01 3.31110597e+01 3.32764158e+01 3.34425121e+01 + 3.36093508e+01 3.37769341e+01 3.39452642e+01 3.41143433e+01 3.42841736e+01 + 3.44547572e+01 3.46260964e+01 3.47981931e+01 3.49710496e+01 3.51446681e+01 + 3.53190505e+01 3.54941990e+01 3.56701158e+01 3.58468028e+01 3.60242622e+01 + 3.62024960e+01 3.63815062e+01 3.65612949e+01 3.67418641e+01 3.69232158e+01 + 3.71053520e+01 3.72882746e+01 3.74719857e+01 3.76564872e+01 3.78417809e+01 + 3.80278689e+01 3.82147530e+01 3.84024351e+01 3.85909171e+01 3.87802007e+01 + 3.89702880e+01 3.91611806e+01 3.93528804e+01 3.95453892e+01 3.97387086e+01 + 3.99328406e+01 4.01277867e+01 4.03235487e+01 4.05201283e+01 4.07175271e+01 + 4.09157468e+01 4.11147890e+01 4.13146553e+01 4.15153472e+01 4.17168665e+01 + 4.19192145e+01 4.21223928e+01 4.23264028e+01 4.25312461e+01 4.27369241e+01 + 4.29434382e+01 4.31507898e+01 4.33589802e+01 4.35680108e+01 4.37778828e+01 + 4.39885977e+01 4.42001566e+01 4.44125608e+01 4.46258114e+01 4.48399097e+01 + 4.50548568e+01 4.52706538e+01 4.54873017e+01 4.57048017e+01 4.59231548e+01 + 4.61423619e+01 4.63624241e+01 4.65833421e+01 4.68051170e+01 4.70277497e+01 + 4.72512408e+01 4.74755912e+01 4.77008018e+01 4.79268731e+01 4.81538059e+01 + 4.83816009e+01 4.86102586e+01 4.88397796e+01 4.90701646e+01 4.93014139e+01 + 4.95335280e+01 4.97665074e+01 5.00003524e+01 5.02350634e+01 5.04706407e+01 + 5.07070845e+01 5.09443951e+01 5.11825727e+01 5.14216173e+01 5.16615291e+01 + 5.19023081e+01 5.21439543e+01 5.23864676e+01 5.26298480e+01 5.28740954e+01 + 5.31192095e+01 5.33651902e+01 5.36120371e+01 5.38597499e+01 5.41083282e+01 + 5.43577717e+01 5.46080798e+01 5.48592520e+01 5.51112877e+01 5.53641863e+01 + 5.56179471e+01 5.58725694e+01 5.61280524e+01 5.63843952e+01 5.66415969e+01 + 5.68996567e+01 5.71585734e+01 5.74183459e+01 5.76789733e+01 5.79404543e+01 + 5.82027876e+01 5.84659719e+01 5.87300059e+01 5.89948882e+01 5.92606173e+01 + 5.95271916e+01 5.97946095e+01 6.00628694e+01 6.03319696e+01 6.06019081e+01 + 6.08726832e+01 6.11442930e+01 6.14167355e+01 6.16900085e+01 6.19641100e+01 + 6.22390378e+01 6.25147896e+01 6.27913631e+01 6.30687559e+01 6.33469656e+01 + 6.36259895e+01 6.39058251e+01 6.41864697e+01 6.44679206e+01 6.47501749e+01 + 6.50332297e+01 6.53170821e+01 6.56017290e+01 6.58871673e+01 6.61733938e+01 + 6.64604052e+01 6.67481982e+01 6.70367693e+01 6.73261150e+01 6.76162318e+01 + 6.79071160e+01 6.81987638e+01 6.84911715e+01 6.87843350e+01 6.90782505e+01 + 6.93729139e+01 6.96683210e+01 6.99644676e+01 7.02613493e+01 7.05589619e+01 + 7.08573007e+01 7.11563612e+01 7.14561389e+01 7.17566288e+01 7.20578263e+01 + 7.23597263e+01 7.26623240e+01 7.29656142e+01 7.32695917e+01 7.35742513e+01 + 7.38795876e+01 7.41855952e+01 7.44922686e+01 7.47996021e+01 7.51075900e+01 + 7.54162265e+01 7.57255057e+01 7.60354217e+01 7.63459683e+01 7.66571394e+01 + 7.69689287e+01 7.72813299e+01 7.75943364e+01 7.79079418e+01 7.82221395e+01 + 7.85369226e+01 7.88522843e+01 7.91682178e+01 7.94847160e+01 7.98017717e+01 + 8.01193779e+01 8.04375271e+01 8.07562119e+01 8.10754249e+01 8.13951584e+01 + 8.17154048e+01 8.20361563e+01 8.23574049e+01 8.26791427e+01 8.30013615e+01 + 8.33240533e+01 8.36472097e+01 8.39708223e+01 8.42948827e+01 8.46193822e+01 + 8.49443123e+01 8.52696640e+01 8.55954286e+01 8.59215971e+01 8.62481604e+01 + 8.65751093e+01 8.69024346e+01 8.72301269e+01 8.75581767e+01 8.78865745e+01 + 8.82153106e+01 8.85443752e+01 8.88737586e+01 8.92034507e+01 8.95334414e+01 + 8.98637208e+01 9.01942784e+01 9.05251039e+01 9.08561870e+01 9.11875170e+01 + 9.15190834e+01 9.18508754e+01 9.21828822e+01 9.25150929e+01 9.28474964e+01 + 9.31800817e+01 9.35128376e+01 9.38457526e+01 9.41788156e+01 9.45120150e+01 + 9.48453391e+01 9.51787764e+01 9.55123152e+01 9.58459434e+01 9.61796493e+01 + 9.65134208e+01 9.68472458e+01 9.71811120e+01 9.75150072e+01 9.78489190e+01 + 9.81828350e+01 9.85167426e+01 9.88506292e+01 9.91844820e+01 9.95182882e+01 + 9.98520351e+01 1.00185710e+02 1.00519299e+02 1.00852789e+02 1.01186168e+02 + 1.01519421e+02 1.01852537e+02 1.02185500e+02 1.02518298e+02 1.02850918e+02 + 1.03183344e+02 1.03515565e+02 1.03847565e+02 1.04179331e+02 1.04510850e+02 + 1.04842106e+02 1.05173087e+02 1.05503777e+02 1.05834164e+02 1.06164231e+02 + 1.06493966e+02 1.06823354e+02 1.07152380e+02 1.07481029e+02 1.07809288e+02 + 1.08137142e+02 1.08464575e+02 1.08791574e+02 1.09118124e+02 1.09444209e+02 + 1.09769815e+02 1.10094926e+02 1.10419529e+02 1.10743608e+02 1.11067148e+02 + 1.11390133e+02 1.11712550e+02 1.12034382e+02 1.12355614e+02 1.12676232e+02 + 1.12996219e+02 1.13315562e+02 1.13634243e+02 1.13952249e+02 1.14269563e+02 + 1.14586171e+02 1.14902056e+02 1.15217204e+02 1.15531599e+02 1.15845226e+02 + 1.16158068e+02 1.16470111e+02 1.16781340e+02 1.17091737e+02 1.17401289e+02 + 1.17709980e+02 1.18017793e+02 1.18324714e+02 1.18630727e+02 1.18935817e+02 + 1.19239967e+02 1.19543163e+02 1.19845389e+02 1.20146630e+02 1.20446869e+02 + 1.20746092e+02 1.21044283e+02 1.21341427e+02 1.21637508e+02 1.21932512e+02 + 1.22226421e+02 1.22519222e+02 1.22810899e+02 1.23101437e+02 1.23390820e+02 + 1.23679033e+02 1.23966062e+02 1.24251891e+02 1.24536504e+02 1.24819888e+02 + 1.25102026e+02 1.25382904e+02 1.25662508e+02 1.25940822e+02 1.26217831e+02 + 1.26493521e+02 1.26767877e+02 1.27040885e+02 1.27312529e+02 1.27582796e+02 + 1.27851672e+02 1.28119141e+02 1.28385189e+02 1.28649803e+02 1.28912968e+02 + 1.29174670e+02 1.29434895e+02 1.29693630e+02 1.29950860e+02 1.30206572e+02 + 1.30460752e+02 1.30713387e+02 1.30964463e+02 1.31213966e+02 1.31461885e+02 + 1.31708205e+02 1.31952913e+02 1.32195997e+02 1.32437443e+02 1.32677239e+02 + 1.32915372e+02 1.33151830e+02 1.33386601e+02 1.33619671e+02 1.33851029e+02 + 1.34080662e+02 1.34308560e+02 1.34534709e+02 1.34759099e+02 1.34981717e+02 + 1.35202552e+02 1.35421593e+02 1.35638829e+02 1.35854248e+02 1.36067840e+02 + 1.36279593e+02 1.36489498e+02 1.36697543e+02 1.36903718e+02 1.37108013e+02 + 1.37310417e+02 1.37510922e+02 1.37709516e+02 1.37906191e+02 1.38100936e+02 + 1.38293742e+02 1.38484600e+02 1.38673502e+02 1.38860437e+02 1.39045397e+02 + 1.39228374e+02 1.39409359e+02 1.39588343e+02 1.39765319e+02 1.39940278e+02 + 1.40113213e+02 1.40284116e+02 1.40452979e+02 1.40619796e+02 1.40784558e+02 + 1.40947259e+02 1.41107891e+02 1.41266449e+02 1.41422926e+02 1.41577314e+02 + 1.41729609e+02 1.41879804e+02 1.42027892e+02 1.42173869e+02 1.42317729e+02 + 1.42459467e+02 1.42599077e+02 1.42736554e+02 1.42871893e+02 1.43005090e+02 + 1.43136140e+02 1.43265040e+02 1.43391784e+02 1.43516369e+02 1.43638790e+02 + 1.43759046e+02 1.43877131e+02 1.43993042e+02 1.44106777e+02 1.44218333e+02 + 1.44327706e+02 1.44434895e+02 1.44539897e+02 1.44642709e+02 1.44743329e+02 + 1.44841757e+02 1.44937989e+02 1.45032025e+02 1.45123862e+02 1.45213501e+02 + 1.45300939e+02 1.45386177e+02 1.45469212e+02 1.45550046e+02 1.45628677e+02 + 1.45705106e+02 1.45779332e+02 1.45851355e+02 1.45921177e+02 1.45988797e+02 + 1.46054216e+02 1.46117435e+02 1.46178455e+02 1.46237278e+02 1.46293904e+02 + 1.46348336e+02 1.46400574e+02 1.46450622e+02 1.46498480e+02 1.46544151e+02 + 1.46587637e+02 1.46628941e+02 1.46668066e+02 1.46705014e+02 1.46739788e+02 + 1.46772392e+02 1.46802828e+02 1.46831101e+02 1.46857213e+02 1.46881169e+02 + 1.46902973e+02 1.46922628e+02 1.46940138e+02 1.46955509e+02 1.46968744e+02 + 1.46979849e+02 1.46988827e+02 1.46995684e+02 1.47000426e+02 1.47003056e+02 + 1.47003581e+02 1.47002006e+02 1.46998336e+02 1.46992578e+02 1.46984737e+02 + 1.46974819e+02 1.46962831e+02 1.46948778e+02 1.46932668e+02 1.46914506e+02 + 1.46894299e+02 1.46872054e+02 1.46847778e+02 1.46821478e+02 1.46793161e+02 + 1.46762834e+02 1.46730505e+02 1.46696181e+02 1.46659869e+02 1.46621578e+02 + 1.46581315e+02 1.46539088e+02 1.46494906e+02 1.46448775e+02 1.46400705e+02 + 1.46350703e+02 1.46298779e+02 1.46244940e+02 1.46189196e+02 1.46131554e+02 + 1.46072025e+02 1.46010616e+02 1.45947336e+02 1.45882196e+02 1.45815203e+02 + 1.45746367e+02 1.45675697e+02 1.45603203e+02 1.45528895e+02 1.45452781e+02 + 1.45374871e+02 1.45295176e+02 1.45213704e+02 1.45130467e+02 1.45045472e+02 + 1.44958732e+02 1.44870254e+02 1.44780051e+02 1.44688131e+02 1.44594506e+02 + 1.44499185e+02 1.44402178e+02 1.44303497e+02 1.44203151e+02 1.44101151e+02 + 1.43997508e+02 1.43892232e+02 1.43785334e+02 1.43676825e+02 1.43566715e+02 + 1.43455014e+02 1.43341735e+02 1.43226888e+02 1.43110483e+02 1.42992531e+02 + 1.42873045e+02 1.42752034e+02 1.42629509e+02 1.42505482e+02 1.42379964e+02 + 1.42252966e+02 1.42124499e+02 1.41994574e+02 1.41863202e+02 1.41730395e+02 + 1.41596164e+02 1.41460520e+02 1.41323475e+02 1.41185039e+02 1.41045224e+02 + 1.40904041e+02 1.40761503e+02 1.40617619e+02 1.40472401e+02 1.40325861e+02 + 1.40178011e+02 1.40028860e+02 1.39878422e+02 1.39726706e+02 1.39573726e+02 + 1.39419491e+02 1.39264013e+02 1.39107304e+02 1.38949376e+02 1.38790238e+02 + 1.38629904e+02 1.38468384e+02 1.38305689e+02 1.38141831e+02 1.37976821e+02 + 1.37810671e+02 1.37643391e+02 1.37474994e+02 1.37305490e+02 1.37134890e+02 + 1.36963207e+02 1.36790450e+02 1.36616632e+02 1.36441764e+02 1.36265856e+02 + 1.36088919e+02 1.35910966e+02 1.35732007e+02 1.35552053e+02 1.35371115e+02 + 1.35189204e+02 1.35006331e+02 1.34822508e+02 1.34637745e+02 1.34452052e+02 + 1.34265442e+02 1.34077924e+02 1.33889510e+02 1.33700211e+02 1.33510036e+02 + 1.33318997e+02 1.33127105e+02 1.32934370e+02 1.32740803e+02 1.32546414e+02 + 1.32351214e+02 1.32155213e+02 1.31958423e+02 1.31760852e+02 1.31562512e+02 + 1.31363414e+02 1.31163566e+02 1.30962981e+02 1.30761667e+02 1.30559635e+02 + 1.30356895e+02 1.30153458e+02 1.29949332e+02 1.29744529e+02 1.29539058e+02 + 1.29332930e+02 1.29126153e+02 1.28918738e+02 1.28710695e+02 1.28502033e+02 + 1.28292762e+02 1.28082892e+02 1.27872431e+02 1.27661391e+02 1.27449780e+02 + 1.27237607e+02 1.27024882e+02 1.26811615e+02 1.26597815e+02 1.26383490e+02 + 1.26168650e+02 1.25953305e+02 1.25737462e+02 1.25521132e+02 1.25304323e+02 + 1.25087045e+02 1.24869305e+02 1.24651113e+02 1.24432478e+02 1.24213408e+02 + 1.23993912e+02 1.23773999e+02 1.23553677e+02 1.23332954e+02 1.23111839e+02 + 1.22890341e+02 1.22668468e+02 1.22446227e+02 1.22223628e+02 1.22000678e+02 + 1.21777386e+02 1.21553760e+02 1.21329807e+02 1.21105535e+02 1.20880953e+02 + 1.20656068e+02 1.20430889e+02 1.20205422e+02 1.19979676e+02 1.19753657e+02 + 1.19527375e+02 1.19300835e+02 1.19074046e+02 1.18847015e+02 1.18619750e+02 + 1.18392257e+02 1.18164544e+02 1.17936618e+02 1.17708486e+02 1.17480156e+02 + 1.17251634e+02 1.17022927e+02 1.16794042e+02 1.16564986e+02 1.16335766e+02 + 1.16106388e+02 1.15876860e+02 1.15647187e+02 1.15417377e+02 1.15187436e+02 + 1.14957370e+02 1.14727186e+02 1.14496890e+02 1.14266489e+02 1.14035988e+02 + 1.13805395e+02 1.13574714e+02 1.13343953e+02 1.13113117e+02 1.12882212e+02 + 1.12651245e+02 1.12420220e+02 1.12189145e+02 1.11958024e+02 1.11726863e+02 + 1.11495669e+02 1.11264446e+02 1.11033201e+02 1.10801938e+02 1.10570664e+02 + 1.10339384e+02 1.10108102e+02 1.09876825e+02 1.09645558e+02 1.09414306e+02 + 1.09183074e+02 1.08951867e+02 1.08720690e+02 1.08489549e+02 1.08258447e+02 + 1.08027392e+02 1.07796386e+02 1.07565435e+02 1.07334544e+02 1.07103717e+02 + 1.06872960e+02 1.06642276e+02 1.06411671e+02 1.06181148e+02 1.05950713e+02 + 1.05720370e+02 1.05490123e+02 1.05259977e+02 1.05029936e+02 1.04800004e+02 + 1.04570186e+02 1.04340485e+02 1.04110906e+02 1.03881453e+02 1.03652130e+02 + 1.03422940e+02 1.03193889e+02 1.02964980e+02 1.02736216e+02 1.02507602e+02 + 1.02279141e+02 1.02050837e+02 1.01822694e+02 1.01594715e+02 1.01366905e+02 + 1.01139266e+02 1.00911802e+02 1.00684517e+02 1.00457414e+02 1.00230497e+02 + 1.00003768e+02 9.97772321e+01 9.95508915e+01 9.93247499e+01 9.90988103e+01 + 9.88730759e+01 9.86475500e+01 9.84222355e+01 9.81971356e+01 9.79722534e+01 + 9.77475917e+01 9.75231536e+01 9.72989420e+01 9.70749597e+01 9.68512097e+01 + 9.66276947e+01 9.64044174e+01 9.61813808e+01 9.59585873e+01 9.57360398e+01 + 9.55137409e+01 9.52916930e+01 9.50698990e+01 9.48483611e+01 9.46270821e+01 + 9.44060642e+01 9.41853100e+01 9.39648219e+01 9.37446022e+01 9.35246532e+01 + 9.33049773e+01 9.30855768e+01 9.28664538e+01 9.26476106e+01 9.24290493e+01 + 9.22107722e+01 9.19927813e+01 9.17750786e+01 9.15576664e+01 9.13405465e+01 + 9.11237210e+01 9.09071919e+01 9.06909610e+01 9.04750303e+01 9.02594017e+01 + 9.00440770e+01 8.98290581e+01 8.96143467e+01 8.93999446e+01 8.91858535e+01 + 8.89720752e+01 8.87586114e+01 8.85454636e+01 8.83326336e+01 8.81201229e+01 + 8.79079332e+01 8.76960659e+01 8.74845226e+01 8.72733048e+01 8.70624140e+01 + 8.68518516e+01 8.66416191e+01 8.64317178e+01 8.62221492e+01 8.60129146e+01 + 8.58040153e+01 8.55954526e+01 8.53872279e+01 8.51793423e+01 8.49717971e+01 + 8.47645936e+01 8.45577329e+01 8.43512162e+01 8.41450446e+01 8.39392193e+01 + 8.37337413e+01 8.35286118e+01 8.33238319e+01 8.31194024e+01 8.29153246e+01 + 8.27115993e+01 8.25082275e+01 8.23052103e+01 8.21025484e+01 8.19002430e+01 + 8.16982948e+01 8.14967047e+01 8.12954737e+01 8.10946024e+01 8.08940918e+01 + 8.06939427e+01 8.04941558e+01 8.02947318e+01 8.00956717e+01 7.98969760e+01 + 7.96986455e+01 7.95006808e+01 7.93030827e+01 7.91058518e+01 7.89089888e+01 + 7.87124942e+01 7.85163688e+01 7.83206129e+01 7.81252274e+01 7.79302126e+01 + 7.77355691e+01 7.75412975e+01 7.73473983e+01 7.71538720e+01 7.69607190e+01 + 7.67679398e+01 7.65755348e+01 7.63835046e+01 7.61918494e+01 7.60005698e+01 + 7.58096660e+01 7.56191385e+01 7.54289877e+01 7.52392138e+01 7.50498172e+01 + 7.48607982e+01 7.46721572e+01 7.44838943e+01 7.42960100e+01 7.41085045e+01 + 7.39213779e+01 7.37346306e+01 7.35482627e+01 7.33622746e+01 7.31766663e+01 + 7.29914382e+01 7.28065902e+01 7.26221227e+01 7.24380357e+01 7.22543295e+01 + 7.20710041e+01 7.18880596e+01 7.17054962e+01 7.15233140e+01 7.13415130e+01 + 7.11600933e+01 7.09790550e+01 7.07983980e+01 7.06181226e+01 7.04382286e+01 + 7.02587162e+01 7.00795852e+01 6.99008358e+01 6.97224679e+01 6.95444815e+01 + 6.93668765e+01 6.91896529e+01 6.90128107e+01 6.88363498e+01 6.86602702e+01 + 6.84845716e+01 6.83092542e+01 6.81343177e+01 6.79597621e+01 6.77855872e+01 + 6.76117930e+01 6.74383792e+01 6.72653459e+01 6.70926927e+01 6.69204196e+01 + 6.67485263e+01 6.65770128e+01 6.64058788e+01 6.62351242e+01 6.60647487e+01 + 6.58947522e+01 6.57251344e+01 6.55558951e+01 6.53870341e+01 6.52185512e+01 + 6.50504461e+01 6.48827185e+01 6.47153683e+01 6.45483951e+01 6.43817987e+01 + 6.42155788e+01 6.40497352e+01 6.38842675e+01 6.37191754e+01 6.35544587e+01 + 6.33901170e+01 6.32261501e+01 6.30625575e+01 6.28993390e+01 6.27364943e+01 + 6.25740230e+01 6.24119248e+01 6.22501992e+01 6.20888461e+01 6.19278649e+01 + 6.17672554e+01 6.16070172e+01 6.14471498e+01 6.12876529e+01 6.11285262e+01 + 6.09697692e+01 6.08113816e+01 6.06533628e+01 6.04957126e+01 6.03384305e+01 + 6.01815161e+01 6.00249690e+01 5.98687888e+01 5.97129749e+01 5.95575271e+01 + 5.94024448e+01 5.92477276e+01 5.90933750e+01 5.89393867e+01 5.87857621e+01 + 5.86325008e+01 5.84796024e+01 5.83270662e+01 5.81748920e+01 5.80230792e+01 + 5.78716273e+01 5.77205359e+01 5.75698044e+01 5.74194325e+01 5.72694194e+01 + 5.71197649e+01 5.69704684e+01 5.68215293e+01 5.66729472e+01 5.65247215e+01 + 5.63768518e+01 5.62293375e+01 5.60821782e+01 5.59353732e+01 5.57889220e+01 + 5.56428242e+01 5.54970792e+01 5.53516865e+01 5.52066455e+01 5.50619556e+01 + 5.49176164e+01 5.47736273e+01 5.46299878e+01 5.44866972e+01 5.43437551e+01 + 5.42011609e+01 5.40589140e+01 5.39170138e+01 5.37754599e+01 5.36342516e+01 + 5.34933884e+01 5.33528697e+01 5.32126949e+01 5.30728635e+01 5.29333749e+01 + 5.27942284e+01 5.26554236e+01 5.25169599e+01 5.23788366e+01 5.22410531e+01 + 5.21036090e+01 5.19665035e+01 5.18297362e+01 5.16933064e+01 5.15572135e+01 + 5.14214569e+01 5.12860360e+01 5.11509503e+01 5.10161991e+01 5.08817818e+01 + 5.07476979e+01 5.06139466e+01 5.04805275e+01 5.03474399e+01 5.02146831e+01 + 5.00822567e+01 4.99501599e+01 4.98183922e+01 4.96869529e+01 4.95558415e+01 + 4.94250573e+01 4.92945997e+01 4.91644680e+01 4.90346617e+01 4.89051802e+01 + 4.87760228e+01 4.86471889e+01 4.85186778e+01 4.83904890e+01 4.82626219e+01 + 4.81350757e+01 4.80078499e+01 4.78809439e+01 4.77543570e+01 4.76280885e+01 + 4.75021379e+01 4.73765046e+01 4.72511879e+01 4.71261871e+01 4.70015017e+01 + 4.68771310e+01 4.67530743e+01 4.66293311e+01 4.65059007e+01 4.63827825e+01 + 4.62599758e+01 4.61374800e+01 4.60152945e+01 4.58934186e+01 4.57718517e+01 + 4.56505932e+01 4.55296424e+01 4.54089987e+01 4.52886614e+01 4.51686299e+01 + 4.50489036e+01 4.49294819e+01 4.48103640e+01 4.46915494e+01 4.45730374e+01 + 4.44548274e+01 4.43369187e+01 4.42193108e+01 4.41020029e+01 4.39849944e+01 + 4.38682847e+01 4.37518731e+01 4.36357591e+01 4.35199419e+01 4.34044210e+01 + 4.32891956e+01 4.31742652e+01 4.30596292e+01 4.29452868e+01 4.28312374e+01 + 4.27174804e+01 4.26040152e+01 4.24908411e+01 4.23779575e+01 4.22653637e+01 + 4.21530592e+01 4.20410432e+01 4.19293152e+01 4.18178744e+01 4.17067204e+01 + 4.15958523e+01 4.14852696e+01 4.13749717e+01 4.12649579e+01 4.11552276e+01 + 4.10457802e+01 4.09366150e+01 4.08277313e+01 4.07191286e+01 4.06108062e+01 + 4.05027635e+01 4.03949999e+01 4.02875147e+01 4.01803072e+01 4.00733770e+01 + 3.99667232e+01 3.98603454e+01 3.97542428e+01 3.96484149e+01 3.95428610e+01 + 3.94375804e+01 3.93325727e+01 3.92278370e+01 3.91233729e+01 3.90191797e+01 + 3.89152567e+01 3.88116033e+01 3.87082190e+01 3.86051031e+01 3.85022549e+01 + 3.83996738e+01 3.82973593e+01 3.81953107e+01 3.80935274e+01 3.79920087e+01 + 3.78907541e+01 3.77897629e+01 3.76890345e+01 3.75885683e+01 3.74883637e+01 + 3.73884200e+01 3.72887367e+01 3.71893131e+01 3.70901487e+01 3.69912428e+01 + 3.68925948e+01 3.67942040e+01 3.66960700e+01 3.65981920e+01 3.65005695e+01 + 3.64032018e+01 3.63060884e+01 3.62092287e+01 3.61126219e+01 3.60162677e+01 + 3.59201652e+01 3.58243140e+01 3.57287134e+01 3.56333628e+01 3.55382617e+01 + 3.54434094e+01 3.53488054e+01 3.52544489e+01 3.51603395e+01 3.50664766e+01 + 3.49728595e+01 3.48794877e+01 3.47863605e+01 3.46934774e+01 3.46008377e+01 + 3.45084410e+01 3.44162866e+01 3.43243738e+01 3.42327022e+01 3.41412712e+01 + 3.40500801e+01 3.39591283e+01 3.38684154e+01 3.37779406e+01 3.36877035e+01 + 3.35977034e+01 3.35079398e+01 3.34184120e+01 3.33291196e+01 3.32400618e+01 + 3.31512383e+01 3.30626483e+01 3.29742913e+01 3.28861667e+01 3.27982740e+01 + 3.27106125e+01 3.26231818e+01 3.25359813e+01 3.24490103e+01 3.23622683e+01 + 3.22757548e+01 3.21894691e+01 3.21034108e+01 3.20175792e+01 3.19319738e+01 + 3.18465940e+01 3.17614393e+01 3.16765091e+01 3.15918029e+01 3.15073200e+01 + 3.14230600e+01 3.13390223e+01 3.12552063e+01 3.11716115e+01 3.10882373e+01 + 3.10050832e+01 3.09221486e+01 3.08394330e+01 3.07569358e+01 3.06746565e+01 + 3.05925945e+01 3.05107493e+01 3.04291204e+01 3.03477071e+01 3.02665091e+01 + 3.01855256e+01 3.01047563e+01 3.00242005e+01 2.99438576e+01 2.98637273e+01 + 2.97838089e+01 2.97041019e+01 2.96246058e+01 2.95453200e+01 2.94662440e+01 + 2.93873773e+01 2.93087194e+01 2.92302697e+01 2.91520276e+01 2.90739928e+01 + 2.89961646e+01 2.89185425e+01 2.88411260e+01 2.87639145e+01 2.86869077e+01 + 2.86101048e+01 2.85335055e+01 2.84571092e+01 2.83809154e+01 2.83049236e+01 + 2.82291332e+01 2.81535438e+01 2.80781548e+01 2.80029657e+01 2.79279760e+01 + 2.78531853e+01 2.77785929e+01 2.77041985e+01 2.76300014e+01 2.75560012e+01 + 2.74821974e+01 2.74085895e+01 2.73351769e+01 2.72619592e+01 2.71889360e+01 + 2.71161065e+01 2.70434705e+01 2.69710274e+01 2.68987766e+01 2.68267178e+01 + 2.67548504e+01 2.66831739e+01 2.66116878e+01 2.65403917e+01 2.64692850e+01 + 2.63983673e+01 2.63276380e+01 2.62570968e+01 2.61867431e+01 2.61165764e+01 + 2.60465962e+01 2.59768021e+01 2.59071936e+01 2.58377702e+01 2.57685315e+01 + 2.56994769e+01 2.56306059e+01 2.55619182e+01 2.54934132e+01 2.54250905e+01 + 2.53569496e+01 2.52889900e+01 2.52212112e+01 2.51536129e+01 2.50861944e+01 + 2.50189554e+01 2.49518954e+01 2.48850139e+01 2.48183105e+01 2.47517847e+01 + 2.46854360e+01 2.46192641e+01 2.45532683e+01 2.44874483e+01 2.44218036e+01 + 2.43563338e+01 2.42910384e+01 2.42259169e+01 2.41609689e+01 2.40961940e+01 + 2.40315917e+01 2.39671615e+01 2.39029030e+01 2.38388158e+01 2.37748994e+01 + 2.37111533e+01 2.36475772e+01 2.35841706e+01 2.35209330e+01 2.34578640e+01 + 2.33949631e+01 2.33322300e+01 2.32696641e+01 2.32072651e+01 2.31450326e+01 + 2.30829659e+01 2.30210649e+01 2.29593289e+01 2.28977577e+01 2.28363507e+01 + 2.27751075e+01 2.27140277e+01 2.26531109e+01 2.25923566e+01 2.25317644e+01 + 2.24713339e+01 2.24110647e+01 2.23509564e+01 2.22910085e+01 2.22312206e+01 + 2.21715922e+01 2.21121231e+01 2.20528127e+01 2.19936606e+01 2.19346665e+01 + 2.18758299e+01 2.18171503e+01 2.17586275e+01 2.17002609e+01 2.16420503e+01 + 2.15839950e+01 2.15260948e+01 2.14683493e+01 2.14107580e+01 2.13533205e+01 + 2.12960364e+01 2.12389054e+01 2.11819270e+01 2.11251008e+01 2.10684265e+01 + 2.10119035e+01 2.09555316e+01 2.08993103e+01 2.08432393e+01 2.07873181e+01 + 2.07315463e+01 2.06759236e+01 2.06204495e+01 2.05651237e+01 2.05099458e+01 + 2.04549154e+01 2.04000321e+01 2.03452954e+01 2.02907052e+01 2.02362608e+01 + 2.01819620e+01 2.01278084e+01 2.00737995e+01 2.00199351e+01 1.99662147e+01 + 1.99126380e+01 1.98592045e+01 1.98059139e+01 1.97527658e+01 1.96997599e+01 + 1.96468957e+01 1.95941729e+01 1.95415912e+01 1.94891500e+01 1.94368492e+01 + 1.93846882e+01 1.93326668e+01 1.92807846e+01 1.92290411e+01 1.91774361e+01 + 1.91259691e+01 1.90746398e+01 1.90234479e+01 1.89723930e+01 1.89214746e+01 + 1.88706925e+01 1.88200463e+01 1.87695356e+01 1.87191601e+01 1.86689194e+01 + 1.86188132e+01 1.85688411e+01 1.85190027e+01 1.84692977e+01 1.84197257e+01 + 1.83702865e+01 1.83209796e+01 1.82718046e+01 1.82227613e+01 1.81738493e+01 + 1.81250682e+01 1.80764177e+01 1.80278975e+01 1.79795071e+01 1.79312463e+01 + 1.78831148e+01 1.78351121e+01 1.77872379e+01 1.77394919e+01 1.76918738e+01 + 1.76443832e+01 1.75970197e+01 1.75497831e+01 1.75026730e+01 1.74556891e+01 + 1.74088310e+01 1.73620983e+01 1.73154909e+01 1.72690082e+01 1.72226501e+01 + 1.71764161e+01 1.71303060e+01 1.70843194e+01 1.70384560e+01 1.69927154e+01 + 1.69470973e+01 1.69016015e+01 1.68562275e+01 1.68109751e+01 1.67658439e+01 + 1.67208336e+01 1.66759439e+01 1.66311745e+01 1.65865250e+01 1.65419952e+01 + 1.64975846e+01 1.64532931e+01 1.64091202e+01 1.63650657e+01 1.63211293e+01 + 1.62773106e+01 1.62336093e+01 1.61900251e+01 1.61465577e+01 1.61032068e+01 + 1.60599721e+01 1.60168532e+01 1.59738499e+01 1.59309619e+01 1.58881887e+01 + 1.58455303e+01 1.58029861e+01 1.57605560e+01 1.57182397e+01 1.56760367e+01 + 1.56339469e+01 1.55919699e+01 1.55501054e+01 1.55083531e+01 1.54667128e+01 + 1.54251840e+01 1.53837666e+01 1.53424603e+01 1.53012646e+01 1.52601794e+01 + 1.52192044e+01 1.51783392e+01 1.51375835e+01 1.50969371e+01 1.50563997e+01 + 1.50159710e+01 1.49756507e+01 1.49354385e+01 1.48953341e+01 1.48553372e+01 + 1.48154476e+01 1.47756649e+01 1.47359889e+01 1.46964193e+01 1.46569558e+01 + 1.46175982e+01 1.45783460e+01 1.45391992e+01 1.45001573e+01 1.44612201e+01 + 1.44221013e+01 1.43823077e+01 1.43418365e+01 1.43006939e+01 1.42588863e+01 + 1.42164199e+01 1.41733013e+01 1.41295367e+01 1.40851327e+01 1.40400959e+01 + 1.39944327e+01 1.39481499e+01 1.39012541e+01 1.38537520e+01 1.38056503e+01 + 1.37569558e+01 1.37076754e+01 1.36578159e+01 1.36073842e+01 1.35563871e+01 + 1.35048318e+01 1.34527252e+01 1.34000743e+01 1.33468861e+01 1.32931679e+01 + 1.32389266e+01 1.31841694e+01 1.31289036e+01 1.30731363e+01 1.30168747e+01 + 1.29601261e+01 1.29028978e+01 1.28451971e+01 1.27870312e+01 1.27284076e+01 + 1.26693335e+01 1.26098164e+01 1.25498637e+01 1.24894827e+01 1.24286808e+01 + 1.23674656e+01 1.23058445e+01 1.22438250e+01 1.21814144e+01 1.21186203e+01 + 1.20554503e+01 1.19919118e+01 1.19280122e+01 1.18637593e+01 1.17991604e+01 + 1.17342231e+01 1.16689549e+01 1.16033634e+01 1.15374562e+01 1.14712406e+01 + 1.14047244e+01 1.13379151e+01 1.12708201e+01 1.12034471e+01 1.11358035e+01 + 1.10678969e+01 1.09997348e+01 1.09313248e+01 1.08626743e+01 1.07937909e+01 + 1.07246820e+01 1.06553552e+01 1.05858180e+01 1.05160777e+01 1.04461419e+01 + 1.03760180e+01 1.03057134e+01 1.02352356e+01 1.01645919e+01 1.00937898e+01 + 1.00228366e+01 9.95173971e+00 9.88050638e+00 9.80914398e+00 9.73765979e+00 + 9.66606109e+00 9.59435515e+00 9.52254919e+00 9.45065043e+00 9.37866605e+00 + 9.30660322e+00 9.23446907e+00 9.16227073e+00 9.09001528e+00 9.01770977e+00 + 8.94536125e+00 8.87297672e+00 8.80056316e+00 8.72812750e+00 8.65567668e+00 + 8.58321756e+00 8.51075702e+00 8.43830186e+00 8.36585889e+00 8.29343485e+00 + 8.22103646e+00 8.14867042e+00 8.07634337e+00 8.00406193e+00 7.93183268e+00 + 7.85966216e+00 7.78755688e+00 7.71552329e+00 7.64356784e+00 7.57169690e+00 + 7.49991683e+00 7.42823393e+00 7.35665448e+00 7.28518468e+00 7.21383074e+00 + 7.14259879e+00 7.07149492e+00 7.00052520e+00 6.92969562e+00 6.85901217e+00 + 6.78848076e+00 6.71810726e+00 6.64789751e+00 6.57785729e+00 6.50799234e+00 + 6.43830834e+00 6.36881094e+00 6.29950573e+00 6.23039827e+00 6.16149404e+00 + 6.09279849e+00 6.02431702e+00 5.95605499e+00 5.88801768e+00 5.82021035e+00 + 5.75263820e+00 5.68530636e+00 5.61821994e+00 5.55138397e+00 5.48480344e+00 + 5.41848329e+00 5.35242840e+00 5.28664361e+00 5.22113368e+00 5.15590335e+00 + 5.09095728e+00 5.02630009e+00 4.96193633e+00 4.89787051e+00 4.83410709e+00 + 4.77065045e+00 4.70750493e+00 4.64467483e+00 4.58216436e+00 4.51997769e+00 + 4.45811895e+00 4.39659218e+00 4.33540140e+00 4.27455054e+00 4.21404350e+00 + 4.15388409e+00 4.09407611e+00 4.03462325e+00 3.97552918e+00 3.91679750e+00 + 3.85843175e+00 3.80043541e+00 3.74281191e+00 3.68556461e+00 3.62869683e+00 + 3.57221182e+00 3.51611277e+00 3.46040280e+00 3.40508500e+00 3.35016239e+00 + 3.29563791e+00 3.24151448e+00 3.18779492e+00 3.13448202e+00 3.08157850e+00 + 3.02908703e+00 2.97701021e+00 2.92535059e+00 2.87411065e+00 2.82329282e+00 + 2.77289947e+00 2.72293291e+00 2.67339540e+00 2.62428912e+00 2.57561621e+00 + 2.52737875e+00 2.47957875e+00 2.43221817e+00 2.38529892e+00 2.33882283e+00 + 2.29279169e+00 2.24720723e+00 2.20207111e+00 2.15738494e+00 2.11315028e+00 + 2.06936862e+00 2.02604139e+00 1.98316998e+00 1.94075571e+00 1.89879985e+00 + 1.85730359e+00 1.81626811e+00 1.77569447e+00 1.73558374e+00 1.69593688e+00 + 1.65675483e+00 1.61803846e+00 1.57978857e+00 1.54200593e+00 1.50469123e+00 + 1.46784514e+00 1.43146824e+00 1.39556106e+00 1.36012410e+00 1.32515778e+00 + 1.29066248e+00 1.25663851e+00 1.22308616e+00 1.19000563e+00 1.15739708e+00 + 1.12526062e+00 1.09359631e+00 1.06240415e+00 1.03168410e+00 1.00143606e+00 + 9.71659862e-01 9.42355321e-01 9.13522177e-01 8.85160127e-01 8.57268818e-01 + 8.29847844e-01 8.02896752e-01 7.76415039e-01 7.50402153e-01 7.24857492e-01 + 6.99780408e-01 6.75170202e-01 6.51026130e-01 6.27347399e-01 6.04133170e-01 + 5.81382555e-01 5.59094623e-01 5.37268394e-01 5.15902844e-01 4.94996902e-01 + 4.74549455e-01 4.54559343e-01 4.35025362e-01 4.15946264e-01 3.97320759e-01 + 3.79147513e-01 3.61425148e-01 3.44152245e-01 3.27327344e-01 3.10948942e-01 + 2.95015494e-01 2.79525416e-01 2.64477082e-01 2.49868829e-01 2.35698950e-01 + 2.21965702e-01 2.08667302e-01 1.95801929e-01 1.83367724e-01 1.71362791e-01 + 1.59785195e-01 1.48632967e-01 1.37904098e-01 1.27596548e-01 1.17708236e-01 + 1.08237051e-01 9.91808451e-02 9.05374353e-02 8.23046065e-02 7.44801094e-02 + 6.70616623e-02 6.00469508e-02 5.34336286e-02 4.72193177e-02 4.14016091e-02 + 3.59780630e-02 3.09462095e-02 2.63035487e-02 2.20475516e-02 1.81756600e-02 + 1.46852874e-02 1.15738194e-02 8.83861364e-03 6.47700104e-03 4.48628566e-03 + 2.86374536e-03 1.60663225e-03 7.12173109e-04 1.77569856e-04 0.00000000e+00 + 1.65968286e-01 1.65968286e-01 1.67501954e-01 1.69381845e-01 1.71282685e-01 + 1.73204702e-01 1.75148130e-01 1.77113201e-01 1.79100155e-01 1.81109230e-01 + 1.83140669e-01 1.85194716e-01 1.87271619e-01 1.89371627e-01 1.91494994e-01 + 1.93641974e-01 1.95812825e-01 1.98007809e-01 2.00227187e-01 2.02471227e-01 + 2.04740197e-01 2.07034369e-01 2.09354018e-01 2.11699420e-01 2.14070856e-01 + 2.16468609e-01 2.18892965e-01 2.21344213e-01 2.23822646e-01 2.26328558e-01 + 2.28862247e-01 2.31424015e-01 2.34014167e-01 2.36633008e-01 2.39280850e-01 + 2.41958008e-01 2.44664796e-01 2.47401537e-01 2.50168554e-01 2.52966173e-01 + 2.55794724e-01 2.58654541e-01 2.61545961e-01 2.64469325e-01 2.67424975e-01 + 2.70413260e-01 2.73434529e-01 2.76489138e-01 2.79577445e-01 2.82699810e-01 + 2.85856598e-01 2.89048180e-01 2.92274926e-01 2.95537214e-01 2.98835423e-01 + 3.02169937e-01 3.05541143e-01 3.08949433e-01 3.12395202e-01 3.15878849e-01 + 3.19400778e-01 3.22961395e-01 3.26561111e-01 3.30200343e-01 3.33879508e-01 + 3.37599030e-01 3.41359337e-01 3.45160859e-01 3.49004034e-01 3.52889300e-01 + 3.56817102e-01 3.60787889e-01 3.64802114e-01 3.68860232e-01 3.72962707e-01 + 3.77110004e-01 3.81302594e-01 3.85540951e-01 3.89825554e-01 3.94156889e-01 + 3.98535442e-01 4.02961708e-01 4.07436184e-01 4.11959373e-01 4.16531781e-01 + 4.21153920e-01 4.25826307e-01 4.30549463e-01 4.35323915e-01 4.40150193e-01 + 4.45028834e-01 4.49960377e-01 4.54945369e-01 4.59984360e-01 4.65077907e-01 + 4.70226569e-01 4.75430912e-01 4.80691507e-01 4.86008931e-01 4.91383763e-01 + 4.96816591e-01 5.02308005e-01 5.07858602e-01 5.13468983e-01 5.19139757e-01 + 5.24871535e-01 5.30664934e-01 5.36520578e-01 5.42439096e-01 5.48421119e-01 + 5.54467289e-01 5.60578249e-01 5.66754649e-01 5.72997145e-01 5.79306397e-01 + 5.85683073e-01 5.92127843e-01 5.98641385e-01 6.05224382e-01 6.11877524e-01 + 6.18601503e-01 6.25397020e-01 6.32264781e-01 6.39205495e-01 6.46219881e-01 + 6.53308659e-01 6.60472559e-01 6.67712313e-01 6.75028662e-01 6.82422349e-01 + 6.89894127e-01 6.97444750e-01 7.05074982e-01 7.12785590e-01 7.20577348e-01 + 7.28451035e-01 7.36407436e-01 7.44447341e-01 7.52571547e-01 7.60780856e-01 + 7.69076076e-01 7.77458020e-01 7.85927507e-01 7.94485362e-01 8.03132416e-01 + 8.11869504e-01 8.20697469e-01 8.29617157e-01 8.38629421e-01 8.47735121e-01 + 8.56935119e-01 8.66230285e-01 8.75621495e-01 8.85109628e-01 8.94695572e-01 + 9.04380216e-01 9.14164458e-01 9.24049199e-01 9.34035347e-01 9.44123815e-01 + 9.54315519e-01 9.64611384e-01 9.75012336e-01 9.85519310e-01 9.96133242e-01 + 1.00685508e+00 1.01768576e+00 1.02862625e+00 1.03967749e+00 1.05084046e+00 + 1.06211612e+00 1.07350544e+00 1.08500939e+00 1.09662896e+00 1.10836513e+00 + 1.12021890e+00 1.13219124e+00 1.14428316e+00 1.15649566e+00 1.16882975e+00 + 1.18128643e+00 1.19386672e+00 1.20657163e+00 1.21940218e+00 1.23235939e+00 + 1.24544429e+00 1.25865790e+00 1.27200127e+00 1.28547542e+00 1.29908139e+00 + 1.31282021e+00 1.32669294e+00 1.34070062e+00 1.35484429e+00 1.36912500e+00 + 1.38354380e+00 1.39810174e+00 1.41279987e+00 1.42763926e+00 1.44262095e+00 + 1.45774600e+00 1.47301546e+00 1.48843041e+00 1.50399188e+00 1.51970095e+00 + 1.53555866e+00 1.55156608e+00 1.56772426e+00 1.58403426e+00 1.60049713e+00 + 1.61711393e+00 1.63388570e+00 1.65081351e+00 1.66789840e+00 1.68514141e+00 + 1.70254358e+00 1.72010597e+00 1.73782961e+00 1.75571552e+00 1.77376475e+00 + 1.79197832e+00 1.81035726e+00 1.82890257e+00 1.84761528e+00 1.86649640e+00 + 1.88554692e+00 1.90476784e+00 1.92416016e+00 1.94372486e+00 1.96346292e+00 + 1.98337531e+00 2.00346299e+00 2.02372692e+00 2.04416804e+00 2.06478730e+00 + 2.08558562e+00 2.10656392e+00 2.12772312e+00 2.14906411e+00 2.17058779e+00 + 2.19229503e+00 2.21418670e+00 2.23626366e+00 2.25852674e+00 2.28097679e+00 + 2.30361461e+00 2.32644102e+00 2.34945680e+00 2.37266272e+00 2.39605955e+00 + 2.41964804e+00 2.44342891e+00 2.46740287e+00 2.49157062e+00 2.51593285e+00 + 2.54049020e+00 2.56524333e+00 2.59019286e+00 2.61533938e+00 2.64068350e+00 + 2.66622577e+00 2.69196673e+00 2.71790690e+00 2.74404680e+00 2.77038689e+00 + 2.79692763e+00 2.82366945e+00 2.85061275e+00 2.87775793e+00 2.90510534e+00 + 2.93265530e+00 2.96040813e+00 2.98836411e+00 3.01652347e+00 3.04488646e+00 + 3.07345326e+00 3.10222404e+00 3.13119894e+00 3.16037805e+00 3.18976147e+00 + 3.21934922e+00 3.24914133e+00 3.27913778e+00 3.30933850e+00 3.33974343e+00 + 3.37035242e+00 3.40116534e+00 3.43218198e+00 3.46340213e+00 3.49482552e+00 + 3.52645185e+00 3.55828079e+00 3.59031197e+00 3.62254496e+00 3.65497933e+00 + 3.68761457e+00 3.72045016e+00 3.75348554e+00 3.78672008e+00 3.82015313e+00 + 3.85378401e+00 3.88761196e+00 3.92163622e+00 3.95585596e+00 3.99027032e+00 + 4.02487837e+00 4.05967918e+00 4.09467173e+00 4.12985498e+00 4.16522784e+00 + 4.20078917e+00 4.23653779e+00 4.27247247e+00 4.30859194e+00 4.34489485e+00 + 4.38137985e+00 4.41804551e+00 4.45489037e+00 4.49191289e+00 4.52911153e+00 + 4.56648465e+00 4.60403061e+00 4.64174767e+00 4.67963408e+00 4.71768803e+00 + 4.75590765e+00 4.79429103e+00 4.83283620e+00 4.87154114e+00 4.91040381e+00 + 4.94942207e+00 4.98859378e+00 5.02791670e+00 5.06738858e+00 5.10700710e+00 + 5.14676990e+00 5.18667457e+00 5.22671863e+00 5.26689957e+00 5.30721483e+00 + 5.34766180e+00 5.38823781e+00 5.42894016e+00 5.46976609e+00 5.51071278e+00 + 5.55177738e+00 5.59295700e+00 5.63424868e+00 5.67564943e+00 5.71715620e+00 + 5.75876591e+00 5.80047542e+00 5.84228156e+00 5.88418111e+00 5.92617080e+00 + 5.96824732e+00 6.01040733e+00 6.05264743e+00 6.09496419e+00 6.13735413e+00 + 6.17981376e+00 6.22233950e+00 6.26492779e+00 6.30757498e+00 6.35027743e+00 + 6.39303142e+00 6.43583324e+00 6.47867912e+00 6.52156525e+00 6.56448781e+00 + 6.60744295e+00 6.65042676e+00 6.69343534e+00 6.73646474e+00 6.77951098e+00 + 6.82257007e+00 6.86563800e+00 6.90871071e+00 6.95178414e+00 6.99485420e+00 + 7.03791679e+00 7.08096779e+00 7.12400304e+00 7.16701841e+00 7.21000970e+00 + 7.25297275e+00 7.29590336e+00 7.33879731e+00 7.38165039e+00 7.42445838e+00 + 7.46721705e+00 7.50992216e+00 7.55256947e+00 7.59515474e+00 7.63767373e+00 + 7.68012218e+00 7.72249588e+00 7.76479056e+00 7.80700201e+00 7.84912598e+00 + 7.89115827e+00 7.93309466e+00 7.97493094e+00 8.01666293e+00 8.05828645e+00 + 8.09979734e+00 8.14119143e+00 8.18246462e+00 8.22361278e+00 8.26463181e+00 + 8.30551766e+00 8.34626626e+00 8.38687359e+00 8.42733566e+00 8.46764848e+00 + 8.50780811e+00 8.54781063e+00 8.58765216e+00 8.62732884e+00 8.66683685e+00 + 8.70617239e+00 8.74533171e+00 8.78431109e+00 8.82310687e+00 8.86171538e+00 + 8.90013304e+00 8.93835627e+00 8.97638157e+00 9.01420545e+00 9.05182449e+00 + 9.08923530e+00 9.12643453e+00 9.16341889e+00 9.20018514e+00 9.23673009e+00 + 9.27305057e+00 9.30914350e+00 9.34500584e+00 9.38063458e+00 9.41602679e+00 + 9.45117958e+00 9.48609012e+00 9.52075564e+00 9.55517340e+00 9.58934075e+00 + 9.62325508e+00 9.65691384e+00 9.69031453e+00 9.72345472e+00 9.75633204e+00 + 9.78894416e+00 9.82128884e+00 9.85336387e+00 9.88516712e+00 9.91669651e+00 + 9.94795003e+00 9.97892573e+00 1.00096217e+01 1.00400361e+01 1.00701673e+01 + 1.01000134e+01 1.01295728e+01 1.01588440e+01 1.01878254e+01 1.02165155e+01 + 1.02449131e+01 1.02730167e+01 1.03008250e+01 1.03283369e+01 1.03555512e+01 + 1.03824668e+01 1.04090827e+01 1.04353979e+01 1.04614115e+01 1.04871227e+01 + 1.05125307e+01 1.05376347e+01 1.05624341e+01 1.05869282e+01 1.06111166e+01 + 1.06349988e+01 1.06585742e+01 1.06818426e+01 1.07048035e+01 1.07274568e+01 + 1.07498023e+01 1.07718397e+01 1.07935690e+01 1.08149902e+01 1.08361032e+01 + 1.08569082e+01 1.08774051e+01 1.08975943e+01 1.09174759e+01 1.09370501e+01 + 1.09563174e+01 1.09752780e+01 1.09939325e+01 1.10122811e+01 1.10303246e+01 + 1.10480633e+01 1.10654980e+01 1.10826292e+01 1.10994577e+01 1.11159841e+01 + 1.11322093e+01 1.11481341e+01 1.11637593e+01 1.11790858e+01 1.11941146e+01 + 1.12088466e+01 1.12232829e+01 1.12374245e+01 1.12512725e+01 1.12648279e+01 + 1.12780921e+01 1.12910660e+01 1.13037511e+01 1.13161484e+01 1.13282594e+01 + 1.13400853e+01 1.13516274e+01 1.13628872e+01 1.13738660e+01 1.13845653e+01 + 1.13949865e+01 1.14051310e+01 1.14150005e+01 1.14245965e+01 1.14339203e+01 + 1.14429738e+01 1.14517584e+01 1.14602758e+01 1.14685276e+01 1.14765154e+01 + 1.14842410e+01 1.14917060e+01 1.14989121e+01 1.15058611e+01 1.15125547e+01 + 1.15189947e+01 1.15251829e+01 1.15311209e+01 1.15368107e+01 1.15422540e+01 + 1.15474527e+01 1.15524086e+01 1.15571235e+01 1.15615993e+01 1.15658378e+01 + 1.15698410e+01 1.15736107e+01 1.15771488e+01 1.15804572e+01 1.15835378e+01 + 1.15863925e+01 1.15890232e+01 1.15914318e+01 1.15936202e+01 1.15955905e+01 + 1.15973444e+01 1.15988840e+01 1.16002111e+01 1.16013277e+01 1.16022357e+01 + 1.16029371e+01 1.16034338e+01 1.16037276e+01 1.16038207e+01 1.16037148e+01 + 1.16034120e+01 1.16029141e+01 1.16022230e+01 1.16013408e+01 1.16002692e+01 + 1.15990103e+01 1.15975659e+01 1.15959380e+01 1.15941284e+01 1.15921390e+01 + 1.15899718e+01 1.15876286e+01 1.15851113e+01 1.15824217e+01 1.15795618e+01 + 1.15765334e+01 1.15733384e+01 1.15699786e+01 1.15664558e+01 1.15627718e+01 + 1.15589286e+01 1.15549279e+01 1.15507715e+01 1.15464612e+01 1.15419987e+01 + 1.15373860e+01 1.15326247e+01 1.15277166e+01 1.15226635e+01 1.15174671e+01 + 1.15121291e+01 1.15066512e+01 1.15010352e+01 1.14952827e+01 1.14893955e+01 + 1.14833752e+01 1.14772235e+01 1.14709421e+01 1.14645325e+01 1.14579965e+01 + 1.14513356e+01 1.14445514e+01 1.14376456e+01 1.14306198e+01 1.14234754e+01 + 1.14162142e+01 1.14088375e+01 1.14013471e+01 1.13937443e+01 1.13860308e+01 + 1.13782080e+01 1.13702775e+01 1.13622406e+01 1.13540989e+01 1.13458538e+01 + 1.13375068e+01 1.13290592e+01 1.13205127e+01 1.13118684e+01 1.13031278e+01 + 1.12942924e+01 1.12853635e+01 1.12763423e+01 1.12672304e+01 1.12580290e+01 + 1.12487394e+01 1.12393630e+01 1.12299010e+01 1.12203547e+01 1.12107255e+01 + 1.12010145e+01 1.11912231e+01 1.11813524e+01 1.11714036e+01 1.11613781e+01 + 1.11512770e+01 1.11411014e+01 1.11308526e+01 1.11205317e+01 1.11101399e+01 + 1.10996784e+01 1.10891481e+01 1.10785504e+01 1.10678862e+01 1.10571567e+01 + 1.10463630e+01 1.10355060e+01 1.10245870e+01 1.10136069e+01 1.10025668e+01 + 1.09914677e+01 1.09803106e+01 1.09690966e+01 1.09578266e+01 1.09465015e+01 + 1.09351225e+01 1.09236904e+01 1.09122062e+01 1.09006708e+01 1.08890852e+01 + 1.08774503e+01 1.08657669e+01 1.08540361e+01 1.08422586e+01 1.08304354e+01 + 1.08185673e+01 1.08066552e+01 1.07947000e+01 1.07827024e+01 1.07706633e+01 + 1.07585835e+01 1.07464638e+01 1.07343051e+01 1.07221081e+01 1.07098735e+01 + 1.06976023e+01 1.06852951e+01 1.06729526e+01 1.06605757e+01 1.06481651e+01 + 1.06357214e+01 1.06232455e+01 1.06107379e+01 1.05981995e+01 1.05856309e+01 + 1.05730327e+01 1.05604057e+01 1.05477506e+01 1.05350679e+01 1.05223583e+01 + 1.05096226e+01 1.04968612e+01 1.04840748e+01 1.04712641e+01 1.04584297e+01 + 1.04455721e+01 1.04326919e+01 1.04197898e+01 1.04068663e+01 1.03939220e+01 + 1.03809575e+01 1.03679732e+01 1.03549698e+01 1.03419478e+01 1.03289077e+01 + 1.03158501e+01 1.03027754e+01 1.02896843e+01 1.02765771e+01 1.02634544e+01 + 1.02503168e+01 1.02371646e+01 1.02239984e+01 1.02108186e+01 1.01976257e+01 + 1.01844202e+01 1.01712025e+01 1.01579730e+01 1.01447323e+01 1.01314808e+01 + 1.01182188e+01 1.01049468e+01 1.00916652e+01 1.00783745e+01 1.00650751e+01 + 1.00517673e+01 1.00384515e+01 1.00251282e+01 1.00117977e+01 9.99846039e+00 + 9.98511668e+00 9.97176692e+00 9.95841148e+00 9.94505072e+00 9.93168499e+00 + 9.91831464e+00 9.90494002e+00 9.89156146e+00 9.87817931e+00 9.86479389e+00 + 9.85140552e+00 9.83801454e+00 9.82462125e+00 9.81122596e+00 9.79782899e+00 + 9.78443064e+00 9.77103121e+00 9.75763099e+00 9.74423026e+00 9.73082933e+00 + 9.71742846e+00 9.70402794e+00 9.69062803e+00 9.67722902e+00 9.66383116e+00 + 9.65043471e+00 9.63703994e+00 9.62364710e+00 9.61025643e+00 9.59686819e+00 + 9.58348261e+00 9.57009994e+00 9.55672041e+00 9.54334426e+00 9.52997170e+00 + 9.51660298e+00 9.50323830e+00 9.48987788e+00 9.47652195e+00 9.46317071e+00 + 9.44982438e+00 9.43648315e+00 9.42314723e+00 9.40981681e+00 9.39649211e+00 + 9.38317329e+00 9.36986057e+00 9.35655411e+00 9.34325412e+00 9.32996076e+00 + 9.31667422e+00 9.30339467e+00 9.29012228e+00 9.27685723e+00 9.26359969e+00 + 9.25034980e+00 9.23710775e+00 9.22387369e+00 9.21064777e+00 9.19743015e+00 + 9.18422098e+00 9.17102040e+00 9.15782858e+00 9.14464565e+00 9.13147175e+00 + 9.11830703e+00 9.10515161e+00 9.09200565e+00 9.07886926e+00 9.06574258e+00 + 9.05262574e+00 9.03951887e+00 9.02642209e+00 9.01333552e+00 9.00025928e+00 + 8.98719349e+00 8.97413827e+00 8.96109373e+00 8.94805998e+00 8.93503713e+00 + 8.92202530e+00 8.90902459e+00 8.89603510e+00 8.88305693e+00 8.87009019e+00 + 8.85713498e+00 8.84419139e+00 8.83125952e+00 8.81833946e+00 8.80543131e+00 + 8.79253516e+00 8.77965109e+00 8.76677920e+00 8.75391957e+00 8.74107228e+00 + 8.72823741e+00 8.71541505e+00 8.70260529e+00 8.68980818e+00 8.67702382e+00 + 8.66425228e+00 8.65149363e+00 8.63874794e+00 8.62601529e+00 8.61329575e+00 + 8.60058938e+00 8.58789625e+00 8.57521642e+00 8.56254997e+00 8.54989695e+00 + 8.53725743e+00 8.52463147e+00 8.51201913e+00 8.49942046e+00 8.48683552e+00 + 8.47426437e+00 8.46170706e+00 8.44916365e+00 8.43663420e+00 8.42411874e+00 + 8.41161733e+00 8.39913003e+00 8.38665687e+00 8.37419791e+00 8.36175319e+00 + 8.34932276e+00 8.33690667e+00 8.32450494e+00 8.31211764e+00 8.29974479e+00 + 8.28738645e+00 8.27504264e+00 8.26271341e+00 8.25039879e+00 8.23809882e+00 + 8.22581354e+00 8.21354298e+00 8.20128718e+00 8.18904617e+00 8.17681998e+00 + 8.16460864e+00 8.15241219e+00 8.14023065e+00 8.12806405e+00 8.11591243e+00 + 8.10377580e+00 8.09165420e+00 8.07954766e+00 8.06745619e+00 8.05537982e+00 + 8.04331859e+00 8.03127250e+00 8.01924158e+00 8.00722586e+00 7.99522536e+00 + 7.98324009e+00 7.97127008e+00 7.95931535e+00 7.94737591e+00 7.93545178e+00 + 7.92354299e+00 7.91164954e+00 7.89977146e+00 7.88790876e+00 7.87606145e+00 + 7.86422956e+00 7.85241308e+00 7.84061205e+00 7.82882646e+00 7.81705634e+00 + 7.80530170e+00 7.79356254e+00 7.78183887e+00 7.77013072e+00 7.75843808e+00 + 7.74676097e+00 7.73509939e+00 7.72345336e+00 7.71182288e+00 7.70020796e+00 + 7.68860861e+00 7.67702484e+00 7.66545664e+00 7.65390403e+00 7.64236701e+00 + 7.63084558e+00 7.61933976e+00 7.60784954e+00 7.59637493e+00 7.58491593e+00 + 7.57347255e+00 7.56204478e+00 7.55063263e+00 7.53923611e+00 7.52785521e+00 + 7.51648993e+00 7.50514027e+00 7.49380625e+00 7.48248784e+00 7.47118506e+00 + 7.45989791e+00 7.44862638e+00 7.43737047e+00 7.42613019e+00 7.41490552e+00 + 7.40369647e+00 7.39250303e+00 7.38132520e+00 7.37016298e+00 7.35901637e+00 + 7.34788536e+00 7.33676995e+00 7.32567012e+00 7.31458589e+00 7.30351724e+00 + 7.29246417e+00 7.28142668e+00 7.27040475e+00 7.25939839e+00 7.24840758e+00 + 7.23743232e+00 7.22647260e+00 7.21552843e+00 7.20459978e+00 7.19368666e+00 + 7.18278905e+00 7.17190695e+00 7.16104035e+00 7.15018924e+00 7.13935361e+00 + 7.12853346e+00 7.11772878e+00 7.10693956e+00 7.09616578e+00 7.08540745e+00 + 7.07466454e+00 7.06393706e+00 7.05322498e+00 7.04252831e+00 7.03184703e+00 + 7.02118113e+00 7.01053060e+00 6.99989543e+00 6.98927560e+00 6.97867112e+00 + 6.96808196e+00 6.95750811e+00 6.94694957e+00 6.93640632e+00 6.92587836e+00 + 6.91536566e+00 6.90486821e+00 6.89438602e+00 6.88391905e+00 6.87346730e+00 + 6.86303076e+00 6.85260942e+00 6.84220325e+00 6.83181225e+00 6.82143641e+00 + 6.81107571e+00 6.80073014e+00 6.79039969e+00 6.78008434e+00 6.76978407e+00 + 6.75949888e+00 6.74922875e+00 6.73897367e+00 6.72873362e+00 6.71850858e+00 + 6.70829855e+00 6.69810351e+00 6.68792344e+00 6.67775834e+00 6.66760818e+00 + 6.65747295e+00 6.64735264e+00 6.63724722e+00 6.62715669e+00 6.61708104e+00 + 6.60702024e+00 6.59697427e+00 6.58694314e+00 6.57692681e+00 6.56692528e+00 + 6.55693852e+00 6.54696653e+00 6.53700928e+00 6.52706676e+00 6.51713896e+00 + 6.50722585e+00 6.49732743e+00 6.48744368e+00 6.47757458e+00 6.46772011e+00 + 6.45788025e+00 6.44805500e+00 6.43824434e+00 6.42844824e+00 6.41866669e+00 + 6.40889968e+00 6.39914719e+00 6.38940920e+00 6.37968570e+00 6.36997666e+00 + 6.36028208e+00 6.35060193e+00 6.34093620e+00 6.33128487e+00 6.32164792e+00 + 6.31202534e+00 6.30241711e+00 6.29282321e+00 6.28324363e+00 6.27367834e+00 + 6.26412734e+00 6.25459059e+00 6.24506810e+00 6.23555983e+00 6.22606577e+00 + 6.21658591e+00 6.20712022e+00 6.19766869e+00 6.18823131e+00 6.17880804e+00 + 6.16939888e+00 6.16000381e+00 6.15062281e+00 6.14125587e+00 6.13190295e+00 + 6.12256406e+00 6.11323916e+00 6.10392825e+00 6.09463130e+00 6.08534829e+00 + 6.07607921e+00 6.06682405e+00 6.05758277e+00 6.04835537e+00 6.03914183e+00 + 6.02994212e+00 6.02075624e+00 6.01158416e+00 6.00242586e+00 5.99328133e+00 + 5.98415054e+00 5.97503349e+00 5.96593015e+00 5.95684050e+00 5.94776453e+00 + 5.93870221e+00 5.92965354e+00 5.92061849e+00 5.91159704e+00 5.90258917e+00 + 5.89359488e+00 5.88461413e+00 5.87564691e+00 5.86669320e+00 5.85775299e+00 + 5.84882626e+00 5.83991298e+00 5.83101314e+00 5.82212673e+00 5.81325371e+00 + 5.80439408e+00 5.79554782e+00 5.78671491e+00 5.77789533e+00 5.76908906e+00 + 5.76029608e+00 5.75151638e+00 5.74274993e+00 5.73399672e+00 5.72525674e+00 + 5.71652996e+00 5.70781636e+00 5.69911593e+00 5.69042864e+00 5.68175449e+00 + 5.67309344e+00 5.66444549e+00 5.65581061e+00 5.64718879e+00 5.63858001e+00 + 5.62998425e+00 5.62140149e+00 5.61283171e+00 5.60427490e+00 5.59573104e+00 + 5.58720011e+00 5.57868208e+00 5.57017695e+00 5.56168469e+00 5.55320529e+00 + 5.54473873e+00 5.53628499e+00 5.52784405e+00 5.51941589e+00 5.51100050e+00 + 5.50259785e+00 5.49420794e+00 5.48583073e+00 5.47746622e+00 5.46911438e+00 + 5.46077521e+00 5.45244866e+00 5.44413474e+00 5.43583343e+00 5.42754469e+00 + 5.41926853e+00 5.41100491e+00 5.40275382e+00 5.39451524e+00 5.38628916e+00 + 5.37807556e+00 5.36987441e+00 5.36168571e+00 5.35350943e+00 5.34534555e+00 + 5.33719406e+00 5.32905493e+00 5.32092816e+00 5.31281372e+00 5.30471160e+00 + 5.29662178e+00 5.28854423e+00 5.28047895e+00 5.27242591e+00 5.26438509e+00 + 5.25635649e+00 5.24834007e+00 5.24033583e+00 5.23234374e+00 5.22436379e+00 + 5.21639596e+00 5.20844023e+00 5.20049659e+00 5.19256501e+00 5.18464548e+00 + 5.17673799e+00 5.16884250e+00 5.16095902e+00 5.15308751e+00 5.14522796e+00 + 5.13738036e+00 5.12954468e+00 5.12172091e+00 5.11390904e+00 5.10610903e+00 + 5.09832088e+00 5.09054457e+00 5.08278008e+00 5.07502740e+00 5.06728650e+00 + 5.05955737e+00 5.05184000e+00 5.04413435e+00 5.03644043e+00 5.02875820e+00 + 5.02108766e+00 5.01342878e+00 5.00578155e+00 4.99814595e+00 4.99052196e+00 + 4.98290957e+00 4.97530876e+00 4.96771951e+00 4.96014181e+00 4.95257563e+00 + 4.94502096e+00 4.93747779e+00 4.92994610e+00 4.92242586e+00 4.91491707e+00 + 4.90741970e+00 4.89993374e+00 4.89245917e+00 4.88499598e+00 4.87754414e+00 + 4.87010365e+00 4.86267447e+00 4.85525661e+00 4.84785004e+00 4.84045474e+00 + 4.83307069e+00 4.82569789e+00 4.81833631e+00 4.81098593e+00 4.80364675e+00 + 4.79631873e+00 4.78900188e+00 4.78169616e+00 4.77440157e+00 4.76711808e+00 + 4.75984568e+00 4.75258436e+00 4.74533409e+00 4.73809486e+00 4.73086666e+00 + 4.72364946e+00 4.71644325e+00 4.70924802e+00 4.70206374e+00 4.69489041e+00 + 4.68772800e+00 4.68057649e+00 4.67343589e+00 4.66630615e+00 4.65918728e+00 + 4.65207925e+00 4.64498204e+00 4.63789565e+00 4.63082005e+00 4.62375523e+00 + 4.61670117e+00 4.60965786e+00 4.60262527e+00 4.59560340e+00 4.58859223e+00 + 4.58159174e+00 4.57460191e+00 4.56762274e+00 4.56065419e+00 4.55369627e+00 + 4.54674894e+00 4.53981220e+00 4.53288603e+00 4.52597042e+00 4.51906534e+00 + 4.51217078e+00 4.50528673e+00 4.49841317e+00 4.49155008e+00 4.48469745e+00 + 4.47785527e+00 4.47102351e+00 4.46420216e+00 4.45739121e+00 4.45059063e+00 + 4.44380043e+00 4.43702057e+00 4.43025104e+00 4.42349183e+00 4.41674292e+00 + 4.41000430e+00 4.40327595e+00 4.39655786e+00 4.38985000e+00 4.38315237e+00 + 4.37646495e+00 4.36978772e+00 4.36312067e+00 4.35646378e+00 4.34981100e+00 + 4.34313007e+00 4.33641641e+00 4.32967019e+00 4.32289160e+00 4.31608082e+00 + 4.30923804e+00 4.30236343e+00 4.29545719e+00 4.28851949e+00 4.28155052e+00 + 4.27455047e+00 4.26751952e+00 4.26045786e+00 4.25336567e+00 4.24624314e+00 + 4.23909045e+00 4.23190779e+00 4.22469535e+00 4.21745331e+00 4.21018186e+00 + 4.20288119e+00 4.19555148e+00 4.18819292e+00 4.18080570e+00 4.17339000e+00 + 4.16594602e+00 4.15847393e+00 4.15097394e+00 4.14344622e+00 4.13589097e+00 + 4.12830837e+00 4.12069861e+00 4.11306189e+00 4.10539838e+00 4.09770828e+00 + 4.08999178e+00 4.08224906e+00 4.07448032e+00 4.06668575e+00 4.05886552e+00 + 4.05101984e+00 4.04314890e+00 4.03525287e+00 4.02733196e+00 4.01938635e+00 + 4.01141623e+00 4.00342179e+00 3.99540322e+00 3.98736072e+00 3.97929446e+00 + 3.97120464e+00 3.96309146e+00 3.95495510e+00 3.94679575e+00 3.93861359e+00 + 3.93040883e+00 3.92218166e+00 3.91393225e+00 3.90566080e+00 3.89736751e+00 + 3.88905256e+00 3.88071614e+00 3.87235844e+00 3.86397966e+00 3.85557998e+00 + 3.84715959e+00 3.83871868e+00 3.83025744e+00 3.82177607e+00 3.81327475e+00 + 3.80475367e+00 3.79621303e+00 3.78765300e+00 3.77907379e+00 3.77047558e+00 + 3.76185855e+00 3.75322291e+00 3.74456884e+00 3.73589653e+00 3.72720616e+00 + 3.71849793e+00 3.70977203e+00 3.70102864e+00 3.69226796e+00 3.68349016e+00 + 3.67469545e+00 3.66588401e+00 3.65705603e+00 3.64821169e+00 3.63935119e+00 + 3.63047471e+00 3.62158245e+00 3.61267458e+00 3.60375129e+00 3.59481278e+00 + 3.58585923e+00 3.57689083e+00 3.56790776e+00 3.55891022e+00 3.54989838e+00 + 3.54087244e+00 3.53183258e+00 3.52277899e+00 3.51371185e+00 3.50463135e+00 + 3.49553767e+00 3.48643101e+00 3.47731154e+00 3.46817945e+00 3.45903493e+00 + 3.44987815e+00 3.44070932e+00 3.43152860e+00 3.42233618e+00 3.41313225e+00 + 3.40391699e+00 3.39469059e+00 3.38545322e+00 3.37620507e+00 3.36694632e+00 + 3.35767716e+00 3.34839776e+00 3.33910832e+00 3.32980900e+00 3.32050000e+00 + 3.31118149e+00 3.30185365e+00 3.29251667e+00 3.28317072e+00 3.27381599e+00 + 3.26445265e+00 3.25508089e+00 3.24570088e+00 3.23631281e+00 3.22691684e+00 + 3.21751317e+00 3.20810196e+00 3.19868340e+00 3.18925766e+00 3.17982493e+00 + 3.17038537e+00 3.16093916e+00 3.15148649e+00 3.14202752e+00 3.13256244e+00 + 3.12309141e+00 3.11361462e+00 3.10413223e+00 3.09464443e+00 3.08515138e+00 + 3.07565326e+00 3.06615024e+00 3.05664250e+00 3.04713021e+00 3.03761354e+00 + 3.02809266e+00 3.01856774e+00 3.00903897e+00 2.99950650e+00 2.98997050e+00 + 2.98043116e+00 2.97088863e+00 2.96134309e+00 2.95179470e+00 2.94224364e+00 + 2.93269008e+00 2.92313417e+00 2.91357609e+00 2.90401601e+00 2.89445409e+00 + 2.88489050e+00 2.87532541e+00 2.86575898e+00 2.85619137e+00 2.84662275e+00 + 2.83705329e+00 2.82748315e+00 2.81791249e+00 2.80834148e+00 2.79877027e+00 + 2.78919904e+00 2.77962794e+00 2.77005714e+00 2.76048679e+00 2.75091706e+00 + 2.74134810e+00 2.73178009e+00 2.72221316e+00 2.71264750e+00 2.70308325e+00 + 2.69352056e+00 2.68395961e+00 2.67440055e+00 2.66484352e+00 2.65528870e+00 + 2.64573623e+00 2.63618628e+00 2.62663899e+00 2.61709452e+00 2.60755302e+00 + 2.59801465e+00 2.58847956e+00 2.57894791e+00 2.56941984e+00 2.55989551e+00 + 2.55037507e+00 2.54085867e+00 2.53134646e+00 2.52183858e+00 2.51233520e+00 + 2.50283645e+00 2.49334249e+00 2.48385347e+00 2.47436952e+00 2.46489080e+00 + 2.45541746e+00 2.44594964e+00 2.43648748e+00 2.42703114e+00 2.41758075e+00 + 2.40813646e+00 2.39869841e+00 2.38926675e+00 2.37984161e+00 2.37042314e+00 + 2.36101149e+00 2.35160679e+00 2.34220918e+00 2.33281880e+00 2.32343580e+00 + 2.31406030e+00 2.30469245e+00 2.29533239e+00 2.28598026e+00 2.27663618e+00 + 2.26730030e+00 2.25797276e+00 2.24865368e+00 2.23934320e+00 2.23004146e+00 + 2.22074859e+00 2.21146472e+00 2.20218999e+00 2.19292452e+00 2.18366846e+00 + 2.17442192e+00 2.16518504e+00 2.15595795e+00 2.14674078e+00 2.13753366e+00 + 2.12833672e+00 2.11915008e+00 2.10997386e+00 2.10080821e+00 2.09165324e+00 + 2.08250907e+00 2.07337585e+00 2.06425367e+00 2.05514268e+00 2.04604299e+00 + 2.03695473e+00 2.02787802e+00 2.01881298e+00 2.00975974e+00 2.00071840e+00 + 1.99168910e+00 1.98267194e+00 1.97366706e+00 1.96467456e+00 1.95569457e+00 + 1.94672720e+00 1.93777257e+00 1.92883080e+00 1.91990200e+00 1.91098628e+00 + 1.90208375e+00 1.89319455e+00 1.88431876e+00 1.87545652e+00 1.86660792e+00 + 1.85777308e+00 1.84895212e+00 1.84014514e+00 1.83135225e+00 1.82257356e+00 + 1.81380917e+00 1.80505921e+00 1.79632376e+00 1.78760295e+00 1.77889687e+00 + 1.77020564e+00 1.76152935e+00 1.75286811e+00 1.74422202e+00 1.73559119e+00 + 1.72697573e+00 1.71837572e+00 1.70979128e+00 1.70122250e+00 1.69266948e+00 + 1.68413233e+00 1.67561114e+00 1.66710601e+00 1.65861704e+00 1.65014433e+00 + 1.64168796e+00 1.63324805e+00 1.62482468e+00 1.61641795e+00 1.60802795e+00 + 1.59965478e+00 1.59129852e+00 1.58295928e+00 1.57463714e+00 1.56633220e+00 + 1.55804454e+00 1.54977426e+00 1.54152144e+00 1.53328618e+00 1.52506856e+00 + 1.51686867e+00 1.50868660e+00 1.50052243e+00 1.49237625e+00 1.48424814e+00 + 1.47613819e+00 1.46804649e+00 1.45997311e+00 1.45191814e+00 1.44388167e+00 + 1.43586376e+00 1.42786452e+00 1.41988400e+00 1.41192230e+00 1.40397950e+00 + 1.39605567e+00 1.38815089e+00 1.38026524e+00 1.37239879e+00 1.36455162e+00 + 1.35672382e+00 1.34891544e+00 1.34112657e+00 1.33335728e+00 1.32560765e+00 + 1.31787774e+00 1.31016763e+00 1.30247739e+00 1.29480709e+00 1.28715681e+00 + 1.27952660e+00 1.27191655e+00 1.26432671e+00 1.25675716e+00 1.24920796e+00 + 1.24167918e+00 1.23417089e+00 1.22668316e+00 1.21921604e+00 1.21176960e+00 + 1.20434390e+00 1.19693902e+00 1.18955500e+00 1.18219192e+00 1.17484983e+00 + 1.16752879e+00 1.16022887e+00 1.15295013e+00 1.14569262e+00 1.13845640e+00 + 1.13124153e+00 1.12404806e+00 1.11687606e+00 1.10972558e+00 1.10259667e+00 + 1.09548940e+00 1.08840380e+00 1.08133995e+00 1.07429788e+00 1.06727766e+00 + 1.06027933e+00 1.05330295e+00 1.04634857e+00 1.03941623e+00 1.03250599e+00 + 1.02561789e+00 1.01875199e+00 1.01190833e+00 1.00508696e+00 9.98287921e-01 + 9.91511267e-01 9.84757040e-01 9.78025284e-01 9.71316045e-01 9.64629366e-01 + 9.57965290e-01 9.51323860e-01 9.44705117e-01 9.38109103e-01 9.31535860e-01 + 9.24985426e-01 9.18457843e-01 9.11953148e-01 9.05471382e-01 8.99012580e-01 + 8.92576782e-01 8.86164024e-01 8.79774342e-01 8.73407772e-01 8.67064349e-01 + 8.60744107e-01 8.54447081e-01 8.48173305e-01 8.41922810e-01 8.35695630e-01 + 8.29491795e-01 8.23311338e-01 8.17154289e-01 8.11020678e-01 8.04910535e-01 + 7.98823888e-01 7.92760766e-01 7.86721197e-01 7.80705208e-01 7.74712826e-01 + 7.68744078e-01 7.62798988e-01 7.56877582e-01 7.50979884e-01 7.45105919e-01 + 7.39255710e-01 7.33429280e-01 7.27626651e-01 7.21847845e-01 7.16092884e-01 + 7.10361787e-01 7.04654576e-01 6.98971271e-01 6.93311889e-01 6.87676450e-01 + 6.82064972e-01 6.76477473e-01 6.70913968e-01 6.65374476e-01 6.59859012e-01 + 6.54367590e-01 6.48900227e-01 6.43456936e-01 6.38037732e-01 6.32642627e-01 + 6.27271635e-01 6.21924767e-01 6.16602035e-01 6.11303451e-01 6.06029026e-01 + 6.00778769e-01 5.95552690e-01 5.90350798e-01 5.85173102e-01 5.80019611e-01 + 5.74890331e-01 5.69785270e-01 5.64704434e-01 5.59647830e-01 5.54615462e-01 + 5.49607337e-01 5.44623459e-01 5.39663832e-01 5.34728459e-01 5.29817343e-01 + 5.24930488e-01 5.20067895e-01 5.15229565e-01 5.10415501e-01 5.05625702e-01 + 5.00860168e-01 4.96118900e-01 4.91401897e-01 4.86709156e-01 4.82040676e-01 + 4.77396456e-01 4.72776492e-01 4.68180780e-01 4.63609318e-01 4.59062100e-01 + 4.54539123e-01 4.50040381e-01 4.45565868e-01 4.41115579e-01 4.36689506e-01 + 4.32287643e-01 4.27909982e-01 4.23556515e-01 4.19227234e-01 4.14922129e-01 + 4.10641192e-01 4.06384413e-01 4.02151780e-01 3.97943285e-01 3.93758914e-01 + 3.89598658e-01 3.85462502e-01 3.81350436e-01 3.77262446e-01 3.73198519e-01 + 3.69158640e-01 3.65142795e-01 3.61150970e-01 3.57183150e-01 3.53239318e-01 + 3.49319459e-01 3.45423556e-01 3.41551592e-01 3.37703549e-01 3.33879411e-01 + 3.30079158e-01 3.26302772e-01 3.22550234e-01 3.18821524e-01 3.15116623e-01 + 3.11435510e-01 3.07778164e-01 3.04144564e-01 3.00534688e-01 2.96948515e-01 + 2.93386021e-01 2.89847185e-01 2.86331983e-01 2.82840390e-01 2.79372384e-01 + 2.75927939e-01 2.72507030e-01 2.69109633e-01 2.65735722e-01 2.62385270e-01 + 2.59058252e-01 2.55754640e-01 2.52474406e-01 2.49217524e-01 2.45983966e-01 + 2.42773702e-01 2.39586704e-01 2.36422943e-01 2.33282390e-01 2.30165013e-01 + 2.27070784e-01 2.23999671e-01 2.20951643e-01 2.17926669e-01 2.14924717e-01 + 2.11945755e-01 2.08989749e-01 2.06056668e-01 2.03146478e-01 2.00259146e-01 + 1.97394636e-01 1.94552916e-01 1.91733949e-01 1.88937702e-01 1.86164139e-01 + 1.83413223e-01 1.80684919e-01 1.77979190e-01 1.75296000e-01 1.72635311e-01 + 1.69997086e-01 1.67381287e-01 1.64787875e-01 1.62216813e-01 1.59668060e-01 + 1.57141579e-01 1.54637330e-01 1.52155272e-01 1.49695366e-01 1.47257571e-01 + 1.44841846e-01 1.42448150e-01 1.40076442e-01 1.37726679e-01 1.35398821e-01 + 1.33092823e-01 1.30808644e-01 1.28546240e-01 1.26305568e-01 1.24086585e-01 + 1.21889246e-01 1.19713507e-01 1.17559324e-01 1.15426652e-01 1.13315445e-01 + 1.11225658e-01 1.09157245e-01 1.07110161e-01 1.05084359e-01 1.03079791e-01 + 1.01096412e-01 9.91341744e-02 9.71930301e-02 9.52729316e-02 9.33738308e-02 + 9.14956795e-02 8.96384290e-02 8.78020304e-02 8.59864346e-02 8.41915922e-02 + 8.24174533e-02 8.06639682e-02 7.89310865e-02 7.72187578e-02 7.55269312e-02 + 7.38555559e-02 7.22045805e-02 7.05739536e-02 6.89636232e-02 6.73735375e-02 + 6.58036440e-02 6.42538904e-02 6.27242238e-02 6.12145912e-02 5.97249393e-02 + 5.82552147e-02 5.68053636e-02 5.53753320e-02 5.39650657e-02 5.25745103e-02 + 5.12036111e-02 4.98523131e-02 4.85205613e-02 4.72083003e-02 4.59154745e-02 + 4.46420281e-02 4.33879051e-02 4.21530492e-02 4.09374040e-02 3.97409128e-02 + 3.85635187e-02 3.74051646e-02 3.62657932e-02 3.51453469e-02 3.40437682e-02 + 3.29609990e-02 3.18969812e-02 3.08516564e-02 2.98249663e-02 2.88168520e-02 + 2.78272546e-02 2.68561150e-02 2.59033739e-02 2.49689719e-02 2.40528492e-02 + 2.31549461e-02 2.22752024e-02 2.14135579e-02 2.05699522e-02 1.97443248e-02 + 1.89366149e-02 1.81467615e-02 1.73747036e-02 1.66203799e-02 1.58837289e-02 + 1.51646890e-02 1.44631985e-02 1.37791954e-02 1.31126175e-02 1.24634028e-02 + 1.18314886e-02 1.12168125e-02 1.06193117e-02 1.00389234e-02 9.47558447e-03 + 8.92923178e-03 8.39980199e-03 7.88723163e-03 7.39145708e-03 6.91241458e-03 + 6.45004024e-03 6.00427002e-03 5.57503974e-03 5.16228511e-03 4.76594168e-03 + 4.38594487e-03 4.02222999e-03 3.67473222e-03 3.34338659e-03 3.02812803e-03 + 2.72889134e-03 2.44561121e-03 2.17822219e-03 1.92665872e-03 1.69085514e-03 + 1.47074567e-03 1.26626440e-03 1.07734534e-03 9.03922361e-04 7.45929254e-04 + 6.03299692e-04 4.75967247e-04 3.63865391e-04 2.66927494e-04 1.85086832e-04 + 1.18276582e-04 6.64298274e-05 2.94795605e-05 7.35868100e-06 0.00000000e+00 + 1.63504040e-02 1.64018897e-02 1.65831418e-02 1.67663967e-02 1.69516765e-02 + 1.71390036e-02 1.73284007e-02 1.75198905e-02 1.77134962e-02 1.79092413e-02 + 1.81071492e-02 1.83072440e-02 1.85095497e-02 1.87140908e-02 1.89208921e-02 + 1.91299784e-02 1.93413750e-02 1.95551074e-02 1.97712014e-02 1.99896832e-02 + 2.02105791e-02 2.04339157e-02 2.06597201e-02 2.08880195e-02 2.11188414e-02 + 2.13522138e-02 2.15881647e-02 2.18267227e-02 2.20679166e-02 2.23117755e-02 + 2.25583288e-02 2.28076063e-02 2.30596381e-02 2.33144546e-02 2.35720866e-02 + 2.38325651e-02 2.40959217e-02 2.43621881e-02 2.46313964e-02 2.49035791e-02 + 2.51787692e-02 2.54569998e-02 2.57383044e-02 2.60227172e-02 2.63102723e-02 + 2.66010045e-02 2.68949488e-02 2.71921409e-02 2.74926164e-02 2.77964118e-02 + 2.81035636e-02 2.84141090e-02 2.87280854e-02 2.90455306e-02 2.93664831e-02 + 2.96909816e-02 3.00190652e-02 3.03507735e-02 3.06861465e-02 3.10252247e-02 + 3.13680491e-02 3.17146610e-02 3.20651022e-02 3.24194151e-02 3.27776423e-02 + 3.31398271e-02 3.35060133e-02 3.38762449e-02 3.42505667e-02 3.46290239e-02 + 3.50116620e-02 3.53985274e-02 3.57896665e-02 3.61851268e-02 3.65849557e-02 + 3.69892017e-02 3.73979135e-02 3.78111403e-02 3.82289321e-02 3.86513391e-02 + 3.90784125e-02 3.95102037e-02 3.99467649e-02 4.03881486e-02 4.08344081e-02 + 4.12855972e-02 4.17417704e-02 4.22029828e-02 4.26692898e-02 4.31407479e-02 + 4.36174138e-02 4.40993450e-02 4.45865997e-02 4.50792366e-02 4.55773152e-02 + 4.60808954e-02 4.65900382e-02 4.71048048e-02 4.76252573e-02 4.81514585e-02 + 4.86834719e-02 4.92213615e-02 4.97651924e-02 5.03150299e-02 5.08709405e-02 + 5.14329912e-02 5.20012497e-02 5.25757846e-02 5.31566651e-02 5.37439612e-02 + 5.43377438e-02 5.49380844e-02 5.55450555e-02 5.61587301e-02 5.67791823e-02 + 5.74064868e-02 5.80407193e-02 5.86819562e-02 5.93302748e-02 5.99857533e-02 + 6.06484706e-02 6.13185066e-02 6.19959420e-02 6.26808586e-02 6.33733388e-02 + 6.40734660e-02 6.47813248e-02 6.54970002e-02 6.62205787e-02 6.69521473e-02 + 6.76917942e-02 6.84396085e-02 6.91956803e-02 6.99601006e-02 7.07329617e-02 + 7.15143565e-02 7.23043792e-02 7.31031250e-02 7.39106900e-02 7.47271715e-02 + 7.55526679e-02 7.63872785e-02 7.72311040e-02 7.80842458e-02 7.89468067e-02 + 7.98188906e-02 8.07006024e-02 8.15920484e-02 8.24933359e-02 8.34045733e-02 + 8.43258704e-02 8.52573380e-02 8.61990883e-02 8.71512346e-02 8.81138916e-02 + 8.90871750e-02 9.00712021e-02 9.10660912e-02 9.20719620e-02 9.30889356e-02 + 9.41171343e-02 9.51566819e-02 9.62077033e-02 9.72703251e-02 9.83446751e-02 + 9.94308824e-02 1.00529078e-01 1.01639393e-01 1.02761962e-01 1.03896920e-01 + 1.05044403e-01 1.06204549e-01 1.07377497e-01 1.08563390e-01 1.09762368e-01 + 1.10974576e-01 1.12200161e-01 1.13439268e-01 1.14692048e-01 1.15958651e-01 + 1.17239229e-01 1.18533935e-01 1.19842926e-01 1.21166358e-01 1.22504391e-01 + 1.23857185e-01 1.25224903e-01 1.26607709e-01 1.28005770e-01 1.29419252e-01 + 1.30848326e-01 1.32293163e-01 1.33753937e-01 1.35230823e-01 1.36723998e-01 + 1.38233642e-01 1.39759936e-01 1.41303062e-01 1.42863207e-01 1.44440557e-01 + 1.46035301e-01 1.47647630e-01 1.49277739e-01 1.50925822e-01 1.52592078e-01 + 1.54276705e-01 1.55979907e-01 1.57701886e-01 1.59442850e-01 1.61203007e-01 + 1.62982568e-01 1.64781746e-01 1.66600758e-01 1.68439819e-01 1.70299152e-01 + 1.72178979e-01 1.74079524e-01 1.76001016e-01 1.77943684e-01 1.79907761e-01 + 1.81893482e-01 1.83901085e-01 1.85930809e-01 1.87982898e-01 1.90057598e-01 + 1.92155156e-01 1.94275823e-01 1.96419852e-01 1.98587501e-01 2.00779028e-01 + 2.02994696e-01 2.05234768e-01 2.07499513e-01 2.09789201e-01 2.12104105e-01 + 2.14444503e-01 2.16810673e-01 2.19202899e-01 2.21621465e-01 2.24066661e-01 + 2.26538777e-01 2.29038110e-01 2.31564957e-01 2.34119619e-01 2.36702402e-01 + 2.39313613e-01 2.41953563e-01 2.44622567e-01 2.47320943e-01 2.50049013e-01 + 2.52807102e-01 2.55595537e-01 2.58414651e-01 2.61264780e-01 2.64146262e-01 + 2.67059441e-01 2.70004664e-01 2.72982279e-01 2.75992643e-01 2.79036111e-01 + 2.82113047e-01 2.85223816e-01 2.88368787e-01 2.91548334e-01 2.94762834e-01 + 2.98012670e-01 3.01298226e-01 3.04619893e-01 3.07978065e-01 3.11373140e-01 + 3.14805520e-01 3.18275613e-01 3.21783830e-01 3.25330585e-01 3.28916301e-01 + 3.32541400e-01 3.36206312e-01 3.39911471e-01 3.43657315e-01 3.47444287e-01 + 3.51272835e-01 3.55143411e-01 3.59056473e-01 3.63012483e-01 3.67011909e-01 + 3.71055221e-01 3.75142898e-01 3.79275422e-01 3.83453280e-01 3.87676964e-01 + 3.91946972e-01 3.96263808e-01 4.00627980e-01 4.05040001e-01 4.09500391e-01 + 4.14009675e-01 4.18568382e-01 4.23177049e-01 4.27836217e-01 4.32546434e-01 + 4.37308252e-01 4.42122230e-01 4.46988934e-01 4.51908933e-01 4.56882804e-01 + 4.61911131e-01 4.66994503e-01 4.72133513e-01 4.77328764e-01 4.82580863e-01 + 4.87890425e-01 4.93258069e-01 4.98684422e-01 5.04170119e-01 5.09715799e-01 + 5.15322109e-01 5.20989702e-01 5.26719239e-01 5.32511387e-01 5.38366819e-01 + 5.44286219e-01 5.50270272e-01 5.56319675e-01 5.62435131e-01 5.68617349e-01 + 5.74867046e-01 5.81184947e-01 5.87571784e-01 5.94028296e-01 6.00555231e-01 + 6.07153344e-01 6.13823397e-01 6.20566161e-01 6.27382414e-01 6.34272942e-01 + 6.41238540e-01 6.48280011e-01 6.55398166e-01 6.62593822e-01 6.69867808e-01 + 6.77220959e-01 6.84654120e-01 6.92168143e-01 6.99763890e-01 7.07442231e-01 + 7.15204044e-01 7.23050219e-01 7.30981650e-01 7.38999246e-01 7.47103919e-01 + 7.55296595e-01 7.63578206e-01 7.71949696e-01 7.80412016e-01 7.88966128e-01 + 7.97613003e-01 8.06353622e-01 8.15188976e-01 8.24120065e-01 8.33147899e-01 + 8.42273499e-01 8.51497895e-01 8.60822127e-01 8.70247246e-01 8.79774313e-01 + 8.89404400e-01 8.99138588e-01 9.08977970e-01 9.18923649e-01 9.28976738e-01 + 9.39138363e-01 9.49409658e-01 9.59791770e-01 9.70285857e-01 9.80893086e-01 + 9.91614639e-01 1.00245171e+00 1.01340549e+00 1.02447720e+00 1.03566807e+00 + 1.04697933e+00 1.05841224e+00 1.06996804e+00 1.08164802e+00 1.09345346e+00 + 1.10538566e+00 1.11744592e+00 1.12963556e+00 1.14195593e+00 1.15440835e+00 + 1.16699420e+00 1.17971484e+00 1.19257165e+00 1.20556603e+00 1.21869939e+00 + 1.23197314e+00 1.24538873e+00 1.25894760e+00 1.27265121e+00 1.28650104e+00 + 1.30049856e+00 1.31464528e+00 1.32894271e+00 1.34339238e+00 1.35799582e+00 + 1.37275460e+00 1.38767027e+00 1.40274442e+00 1.41797865e+00 1.43337455e+00 + 1.44893375e+00 1.46465790e+00 1.48054862e+00 1.49660760e+00 1.51283651e+00 + 1.52923704e+00 1.54581089e+00 1.56255979e+00 1.57948548e+00 1.59658969e+00 + 1.61387419e+00 1.63134077e+00 1.64899121e+00 1.66682733e+00 1.68485093e+00 + 1.70306386e+00 1.72146797e+00 1.74006512e+00 1.75885719e+00 1.77784608e+00 + 1.79703369e+00 1.81642195e+00 1.83601280e+00 1.85580819e+00 1.87581009e+00 + 1.89602048e+00 1.91644135e+00 1.93707473e+00 1.95792263e+00 1.97898710e+00 + 2.00027019e+00 2.02177398e+00 2.04350055e+00 2.06545200e+00 2.08763045e+00 + 2.11003801e+00 2.13267685e+00 2.15554911e+00 2.17865698e+00 2.20200263e+00 + 2.22558826e+00 2.24941610e+00 2.27348838e+00 2.29780733e+00 2.32237521e+00 + 2.34719430e+00 2.37226689e+00 2.39759526e+00 2.42318174e+00 2.44902865e+00 + 2.47513834e+00 2.50151315e+00 2.52815545e+00 2.55506762e+00 2.58225206e+00 + 2.60971116e+00 2.63744735e+00 2.66546305e+00 2.69376072e+00 2.72234279e+00 + 2.75121174e+00 2.78037005e+00 2.80982021e+00 2.83956470e+00 2.86960606e+00 + 2.89994679e+00 2.93058943e+00 2.96153652e+00 2.99279062e+00 3.02435428e+00 + 3.05623008e+00 3.08842060e+00 3.12092843e+00 3.15375616e+00 3.18690640e+00 + 3.22038177e+00 3.25418489e+00 3.28831837e+00 3.32278487e+00 3.35758701e+00 + 3.39272745e+00 3.42820884e+00 3.46403383e+00 3.50020509e+00 3.53672528e+00 + 3.57359708e+00 3.61082314e+00 3.64840616e+00 3.68634881e+00 3.72465376e+00 + 3.76332370e+00 3.80236131e+00 3.84176927e+00 3.88155025e+00 3.92170694e+00 + 3.96224202e+00 4.00315816e+00 4.04445802e+00 4.08614428e+00 4.12821960e+00 + 4.17068664e+00 4.21354806e+00 4.25680648e+00 4.30046456e+00 4.34452492e+00 + 4.38899019e+00 4.43386296e+00 4.47914586e+00 4.52484145e+00 4.57095233e+00 + 4.61748105e+00 4.66443016e+00 4.71180220e+00 4.75959968e+00 4.80782510e+00 + 4.85648096e+00 4.90556971e+00 4.95509379e+00 5.00505564e+00 5.05545765e+00 + 5.10630220e+00 5.15759165e+00 5.20932831e+00 5.26151451e+00 5.31415250e+00 + 5.36724454e+00 5.42079284e+00 5.47479959e+00 5.52926693e+00 5.58419699e+00 + 5.63959185e+00 5.69545356e+00 5.75178411e+00 5.80858549e+00 5.86585963e+00 + 5.92360840e+00 5.98183366e+00 6.04053721e+00 6.09972079e+00 6.15938611e+00 + 6.21953483e+00 6.28016856e+00 6.34128885e+00 6.40289720e+00 6.46499505e+00 + 6.52758380e+00 6.59066476e+00 6.65423922e+00 6.71830838e+00 6.78287339e+00 + 6.84793531e+00 6.91349517e+00 6.97955391e+00 7.04611241e+00 7.11317146e+00 + 7.18073180e+00 7.24879407e+00 7.31735886e+00 7.38642666e+00 7.45599788e+00 + 7.52607287e+00 7.59665186e+00 7.66773503e+00 7.73932244e+00 7.81141409e+00 + 7.88400986e+00 7.95710956e+00 8.03071290e+00 8.10481947e+00 8.17942878e+00 + 8.25454026e+00 8.33015318e+00 8.40626677e+00 8.48288011e+00 8.55999218e+00 + 8.63760187e+00 8.71570793e+00 8.79430901e+00 8.87340364e+00 8.95299024e+00 + 9.03306711e+00 9.11363242e+00 9.19468422e+00 9.27622044e+00 9.35823888e+00 + 9.44073721e+00 9.52371298e+00 9.60716359e+00 9.69108633e+00 9.77547834e+00 + 9.86033663e+00 9.94565806e+00 1.00314394e+01 1.01176771e+01 1.02043678e+01 + 1.02915077e+01 1.03790930e+01 1.04671196e+01 1.05555835e+01 1.06444803e+01 + 1.07338057e+01 1.08235550e+01 1.09137235e+01 1.10043062e+01 1.10952983e+01 + 1.11866943e+01 1.12784891e+01 1.13706770e+01 1.14632524e+01 1.15562095e+01 + 1.16495422e+01 1.17432444e+01 1.18373098e+01 1.19317319e+01 1.20265041e+01 + 1.21216196e+01 1.22170714e+01 1.23128523e+01 1.24089552e+01 1.25053726e+01 + 1.26020968e+01 1.26991201e+01 1.27964345e+01 1.28940320e+01 1.29919044e+01 + 1.30900431e+01 1.31884397e+01 1.32870854e+01 1.33859713e+01 1.34850885e+01 + 1.35844276e+01 1.36839794e+01 1.37837343e+01 1.38836827e+01 1.39838149e+01 + 1.40841207e+01 1.41845903e+01 1.42852132e+01 1.43859792e+01 1.44868777e+01 + 1.45878980e+01 1.46890294e+01 1.47902609e+01 1.48915815e+01 1.49929800e+01 + 1.50944450e+01 1.51959651e+01 1.52975288e+01 1.53991244e+01 1.55007401e+01 + 1.56023640e+01 1.57039840e+01 1.58055882e+01 1.59071642e+01 1.60086998e+01 + 1.61101825e+01 1.62116000e+01 1.63129394e+01 1.64141884e+01 1.65153340e+01 + 1.66163635e+01 1.67172641e+01 1.68180227e+01 1.69186264e+01 1.70190621e+01 + 1.71193167e+01 1.72193771e+01 1.73192300e+01 1.74188623e+01 1.75182606e+01 + 1.76174118e+01 1.77163024e+01 1.78149192e+01 1.79132487e+01 1.80112778e+01 + 1.81089930e+01 1.82063809e+01 1.83034283e+01 1.84001219e+01 1.84964482e+01 + 1.85923942e+01 1.86879464e+01 1.87830918e+01 1.88778172e+01 1.89721094e+01 + 1.90659553e+01 1.91593421e+01 1.92522566e+01 1.93446861e+01 1.94366178e+01 + 1.95280389e+01 1.96189368e+01 1.97092990e+01 1.97991129e+01 1.98883663e+01 + 1.99770470e+01 2.00651426e+01 2.01526413e+01 2.02395312e+01 2.03258004e+01 + 2.04114374e+01 2.04964306e+01 2.05807686e+01 2.06644403e+01 2.07474345e+01 + 2.08297404e+01 2.09113471e+01 2.09922441e+01 2.10724209e+01 2.11518673e+01 + 2.12305732e+01 2.13085287e+01 2.13857240e+01 2.14621496e+01 2.15377961e+01 + 2.16126544e+01 2.16867156e+01 2.17599708e+01 2.18324115e+01 2.19040294e+01 + 2.19748162e+01 2.20447641e+01 2.21138653e+01 2.21821123e+01 2.22494979e+01 + 2.23160149e+01 2.23816566e+01 2.24464162e+01 2.25102874e+01 2.25732640e+01 + 2.26353400e+01 2.26965099e+01 2.27567680e+01 2.28161091e+01 2.28745282e+01 + 2.29320206e+01 2.29885816e+01 2.30442069e+01 2.30988925e+01 2.31526346e+01 + 2.32054295e+01 2.32572738e+01 2.33081644e+01 2.33580984e+01 2.34070731e+01 + 2.34550860e+01 2.35021351e+01 2.35482182e+01 2.35933337e+01 2.36374799e+01 + 2.36806558e+01 2.37228600e+01 2.37640920e+01 2.38043509e+01 2.38436364e+01 + 2.38819484e+01 2.39192869e+01 2.39556521e+01 2.39910445e+01 2.40254649e+01 + 2.40589140e+01 2.40913931e+01 2.41229033e+01 2.41534463e+01 2.41830236e+01 + 2.42116373e+01 2.42392894e+01 2.42659822e+01 2.42917181e+01 2.43164999e+01 + 2.43403303e+01 2.43632125e+01 2.43851494e+01 2.44061447e+01 2.44262016e+01 + 2.44453241e+01 2.44635158e+01 2.44807810e+01 2.44971236e+01 2.45125481e+01 + 2.45270589e+01 2.45406606e+01 2.45533580e+01 2.45651561e+01 2.45760597e+01 + 2.45860741e+01 2.45952047e+01 2.46034567e+01 2.46108357e+01 2.46173474e+01 + 2.46229976e+01 2.46277920e+01 2.46317367e+01 2.46348378e+01 2.46371015e+01 + 2.46385339e+01 2.46391415e+01 2.46389307e+01 2.46379081e+01 2.46360803e+01 + 2.46334539e+01 2.46300357e+01 2.46258327e+01 2.46208515e+01 2.46150994e+01 + 2.46085832e+01 2.46013100e+01 2.45932871e+01 2.45845215e+01 2.45750206e+01 + 2.45647916e+01 2.45538418e+01 2.45421787e+01 2.45298095e+01 2.45167418e+01 + 2.45029829e+01 2.44885405e+01 2.44734220e+01 2.44576348e+01 2.44411867e+01 + 2.44240852e+01 2.44063377e+01 2.43879520e+01 2.43689357e+01 2.43492963e+01 + 2.43290414e+01 2.43081788e+01 2.42867159e+01 2.42646603e+01 2.42420198e+01 + 2.42188019e+01 2.41950141e+01 2.41706641e+01 2.41457594e+01 2.41203075e+01 + 2.40943160e+01 2.40677924e+01 2.40407441e+01 2.40131787e+01 2.39851036e+01 + 2.39565261e+01 2.39274536e+01 2.38978936e+01 2.38678533e+01 2.38373400e+01 + 2.38063610e+01 2.37749235e+01 2.37430347e+01 2.37107017e+01 2.36779316e+01 + 2.36447316e+01 2.36111085e+01 2.35770695e+01 2.35426214e+01 2.35077712e+01 + 2.34725257e+01 2.34368916e+01 2.34008758e+01 2.33644850e+01 2.33277258e+01 + 2.32906049e+01 2.32531287e+01 2.32153039e+01 2.31771368e+01 2.31386339e+01 + 2.30998016e+01 2.30606460e+01 2.30211736e+01 2.29813904e+01 2.29413026e+01 + 2.29009163e+01 2.28602376e+01 2.28192723e+01 2.27780264e+01 2.27365058e+01 + 2.26947163e+01 2.26526636e+01 2.26103534e+01 2.25677914e+01 2.25249831e+01 + 2.24819340e+01 2.24386496e+01 2.23951354e+01 2.23513966e+01 2.23074385e+01 + 2.22632664e+01 2.22188855e+01 2.21743008e+01 2.21295175e+01 2.20845404e+01 + 2.20393747e+01 2.19940251e+01 2.19484965e+01 2.19027936e+01 2.18569212e+01 + 2.18108840e+01 2.17646864e+01 2.17183332e+01 2.16718287e+01 2.16251775e+01 + 2.15783838e+01 2.15314521e+01 2.14843865e+01 2.14371913e+01 2.13898707e+01 + 2.13424287e+01 2.12948694e+01 2.12471969e+01 2.11994150e+01 2.11515276e+01 + 2.11035386e+01 2.10554518e+01 2.10072709e+01 2.09589996e+01 2.09106416e+01 + 2.08622003e+01 2.08136794e+01 2.07650822e+01 2.07164124e+01 2.06676732e+01 + 2.06188679e+01 2.05699999e+01 2.05210724e+01 2.04720886e+01 2.04230515e+01 + 2.03739645e+01 2.03248304e+01 2.02756522e+01 2.02264330e+01 2.01771757e+01 + 2.01278830e+01 2.00785580e+01 2.00292032e+01 1.99798215e+01 1.99304156e+01 + 1.98809881e+01 1.98315416e+01 1.97820787e+01 1.97326019e+01 1.96831137e+01 + 1.96336166e+01 1.95841129e+01 1.95346051e+01 1.94850955e+01 1.94355863e+01 + 1.93860798e+01 1.93365782e+01 1.92870838e+01 1.92375986e+01 1.91881247e+01 + 1.91386643e+01 1.90892193e+01 1.90397918e+01 1.89903837e+01 1.89409969e+01 + 1.88916334e+01 1.88422950e+01 1.87929836e+01 1.87437009e+01 1.86944486e+01 + 1.86452287e+01 1.85960426e+01 1.85468922e+01 1.84977791e+01 1.84487048e+01 + 1.83996709e+01 1.83506791e+01 1.83017308e+01 1.82528275e+01 1.82039707e+01 + 1.81551618e+01 1.81064023e+01 1.80576934e+01 1.80090367e+01 1.79604334e+01 + 1.79118848e+01 1.78633921e+01 1.78149568e+01 1.77665799e+01 1.77182627e+01 + 1.76700064e+01 1.76218121e+01 1.75736809e+01 1.75256141e+01 1.74776126e+01 + 1.74296775e+01 1.73818098e+01 1.73340107e+01 1.72862810e+01 1.72386219e+01 + 1.71910341e+01 1.71435187e+01 1.70960765e+01 1.70487086e+01 1.70014157e+01 + 1.69541986e+01 1.69070584e+01 1.68599957e+01 1.68130113e+01 1.67661061e+01 + 1.67192808e+01 1.66725362e+01 1.66258729e+01 1.65792917e+01 1.65327934e+01 + 1.64863785e+01 1.64400477e+01 1.63938017e+01 1.63476411e+01 1.63015666e+01 + 1.62555786e+01 1.62096779e+01 1.61638649e+01 1.61181402e+01 1.60725044e+01 + 1.60269580e+01 1.59815015e+01 1.59361354e+01 1.58908602e+01 1.58456763e+01 + 1.58005842e+01 1.57555844e+01 1.57106773e+01 1.56658633e+01 1.56211427e+01 + 1.55765161e+01 1.55319838e+01 1.54875461e+01 1.54432035e+01 1.53989562e+01 + 1.53548046e+01 1.53107491e+01 1.52667899e+01 1.52229273e+01 1.51791617e+01 + 1.51354933e+01 1.50919224e+01 1.50484493e+01 1.50050742e+01 1.49617974e+01 + 1.49186190e+01 1.48755394e+01 1.48325588e+01 1.47896772e+01 1.47468951e+01 + 1.47042125e+01 1.46616296e+01 1.46191466e+01 1.45767637e+01 1.45344810e+01 + 1.44922987e+01 1.44502169e+01 1.44082357e+01 1.43663553e+01 1.43245758e+01 + 1.42828974e+01 1.42413200e+01 1.41998439e+01 1.41584690e+01 1.41171956e+01 + 1.40760236e+01 1.40349532e+01 1.39939844e+01 1.39531172e+01 1.39123518e+01 + 1.38716881e+01 1.38311263e+01 1.37906663e+01 1.37503081e+01 1.37100519e+01 + 1.36698975e+01 1.36298452e+01 1.35898947e+01 1.35500462e+01 1.35102996e+01 + 1.34706550e+01 1.34311123e+01 1.33916715e+01 1.33523325e+01 1.33130954e+01 + 1.32739602e+01 1.32349267e+01 1.31959950e+01 1.31571650e+01 1.31184367e+01 + 1.30798100e+01 1.30412848e+01 1.30028611e+01 1.29645389e+01 1.29263180e+01 + 1.28881984e+01 1.28501800e+01 1.28122627e+01 1.27744466e+01 1.27367313e+01 + 1.26991170e+01 1.26616034e+01 1.26241906e+01 1.25868783e+01 1.25496665e+01 + 1.25125551e+01 1.24755440e+01 1.24386331e+01 1.24018222e+01 1.23651113e+01 + 1.23285002e+01 1.22919888e+01 1.22555770e+01 1.22192646e+01 1.21830515e+01 + 1.21469377e+01 1.21109229e+01 1.20750070e+01 1.20391899e+01 1.20034714e+01 + 1.19678515e+01 1.19323299e+01 1.18969065e+01 1.18615812e+01 1.18263537e+01 + 1.17912241e+01 1.17561920e+01 1.17212574e+01 1.16864200e+01 1.16516798e+01 + 1.16170365e+01 1.15824901e+01 1.15480403e+01 1.15136869e+01 1.14794298e+01 + 1.14452689e+01 1.14112039e+01 1.13772347e+01 1.13433612e+01 1.13095830e+01 + 1.12759001e+01 1.12423123e+01 1.12088194e+01 1.11754212e+01 1.11421175e+01 + 1.11089082e+01 1.10757931e+01 1.10427719e+01 1.10098445e+01 1.09770108e+01 + 1.09442704e+01 1.09116233e+01 1.08790693e+01 1.08466080e+01 1.08142395e+01 + 1.07819634e+01 1.07497795e+01 1.07176878e+01 1.06856879e+01 1.06537797e+01 + 1.06219629e+01 1.05902375e+01 1.05586031e+01 1.05270597e+01 1.04956069e+01 + 1.04642446e+01 1.04329726e+01 1.04017907e+01 1.03706986e+01 1.03396963e+01 + 1.03087834e+01 1.02779597e+01 1.02472252e+01 1.02165795e+01 1.01860224e+01 + 1.01555538e+01 1.01251735e+01 1.00948812e+01 1.00646767e+01 1.00345598e+01 + 1.00045304e+01 9.97458814e+00 9.94473290e+00 9.91496445e+00 9.88528258e+00 + 9.85568708e+00 9.82617774e+00 9.79675435e+00 9.76741671e+00 9.73816461e+00 + 9.70899782e+00 9.67991615e+00 9.65091938e+00 9.62200731e+00 9.59317971e+00 + 9.56443639e+00 9.53577712e+00 9.50720171e+00 9.47870993e+00 9.45030158e+00 + 9.42197644e+00 9.39373431e+00 9.36557497e+00 9.33749821e+00 9.30950383e+00 + 9.28159160e+00 9.25376132e+00 9.22601278e+00 9.19834576e+00 9.17076006e+00 + 9.14325546e+00 9.11583176e+00 9.08848873e+00 9.06122618e+00 9.03404388e+00 + 9.00694164e+00 8.97991924e+00 8.95297646e+00 8.92611310e+00 8.89932895e+00 + 8.87262380e+00 8.84599744e+00 8.81944966e+00 8.79298024e+00 8.76658899e+00 + 8.74027568e+00 8.71404012e+00 8.68788209e+00 8.66180139e+00 8.63579780e+00 + 8.60987112e+00 8.58402115e+00 8.55824766e+00 8.53255046e+00 8.50692933e+00 + 8.48138408e+00 8.45591449e+00 8.43052036e+00 8.40520148e+00 8.37995765e+00 + 8.35478866e+00 8.32969430e+00 8.30467437e+00 8.27972866e+00 8.25485698e+00 + 8.23005911e+00 8.20533485e+00 8.18068400e+00 8.15610636e+00 8.13160172e+00 + 8.10716987e+00 8.08281063e+00 8.05852378e+00 8.03430912e+00 8.01016645e+00 + 7.98609558e+00 7.96209630e+00 7.93816840e+00 7.91431170e+00 7.89052598e+00 + 7.86681106e+00 7.84316673e+00 7.81959279e+00 7.79608904e+00 7.77265530e+00 + 7.74929135e+00 7.72599701e+00 7.70277207e+00 7.67961634e+00 7.65652962e+00 + 7.63351172e+00 7.61056245e+00 7.58768160e+00 7.56486899e+00 7.54212441e+00 + 7.51944768e+00 7.49683860e+00 7.47429699e+00 7.45182263e+00 7.42941536e+00 + 7.40707496e+00 7.38480126e+00 7.36259406e+00 7.34045317e+00 7.31837840e+00 + 7.29636956e+00 7.27442647e+00 7.25254892e+00 7.23073674e+00 7.20898973e+00 + 7.18730772e+00 7.16569050e+00 7.14413790e+00 7.12264973e+00 7.10122580e+00 + 7.07986593e+00 7.05856993e+00 7.03733762e+00 7.01616881e+00 6.99506332e+00 + 6.97402096e+00 6.95304156e+00 6.93212493e+00 6.91127089e+00 6.89047925e+00 + 6.86974984e+00 6.84908248e+00 6.82847698e+00 6.80793316e+00 6.78745085e+00 + 6.76702986e+00 6.74667003e+00 6.72637116e+00 6.70613308e+00 6.68595562e+00 + 6.66583859e+00 6.64578183e+00 6.62578515e+00 6.60584838e+00 6.58597135e+00 + 6.56615387e+00 6.54639578e+00 6.52669691e+00 6.50705707e+00 6.48747609e+00 + 6.46795381e+00 6.44849005e+00 6.42908464e+00 6.40973740e+00 6.39044818e+00 + 6.37121679e+00 6.35204307e+00 6.33292684e+00 6.31386795e+00 6.29486621e+00 + 6.27592147e+00 6.25703355e+00 6.23820229e+00 6.21942752e+00 6.20070907e+00 + 6.18204679e+00 6.16344049e+00 6.14489002e+00 6.12639522e+00 6.10795591e+00 + 6.08957194e+00 6.07124314e+00 6.05296935e+00 6.03475041e+00 6.01658615e+00 + 5.99847642e+00 5.98042104e+00 5.96241987e+00 5.94447274e+00 5.92657949e+00 + 5.90873996e+00 5.89095400e+00 5.87322144e+00 5.85554212e+00 5.83791590e+00 + 5.82034260e+00 5.80282208e+00 5.78535418e+00 5.76793874e+00 5.75057561e+00 + 5.73326463e+00 5.71600564e+00 5.69879850e+00 5.68164305e+00 5.66453913e+00 + 5.64748659e+00 5.63048529e+00 5.61353506e+00 5.59663576e+00 5.57978723e+00 + 5.56298932e+00 5.54624189e+00 5.52954479e+00 5.51289785e+00 5.49630094e+00 + 5.47975391e+00 5.46325661e+00 5.44680888e+00 5.43041059e+00 5.41406158e+00 + 5.39776171e+00 5.38151083e+00 5.36530879e+00 5.34915546e+00 5.33305068e+00 + 5.31699432e+00 5.30098622e+00 5.28502624e+00 5.26911424e+00 5.25325008e+00 + 5.23743361e+00 5.22166470e+00 5.20594319e+00 5.19026895e+00 5.17464184e+00 + 5.15906171e+00 5.14352844e+00 5.12804187e+00 5.11260186e+00 5.09720829e+00 + 5.08186100e+00 5.06655986e+00 5.05130474e+00 5.03609550e+00 5.02093199e+00 + 5.00581409e+00 4.99074165e+00 4.97571455e+00 4.96073264e+00 4.94579579e+00 + 4.93090386e+00 4.91605673e+00 4.90125425e+00 4.88649630e+00 4.87178274e+00 + 4.85711343e+00 4.84248825e+00 4.82790707e+00 4.81336974e+00 4.79887615e+00 + 4.78442616e+00 4.77001963e+00 4.75565645e+00 4.74133647e+00 4.72705958e+00 + 4.71282564e+00 4.69863452e+00 4.68448609e+00 4.67038023e+00 4.65631681e+00 + 4.64229571e+00 4.62831678e+00 4.61437992e+00 4.60048499e+00 4.58663187e+00 + 4.57282043e+00 4.55905055e+00 4.54532210e+00 4.53163497e+00 4.51798901e+00 + 4.50438412e+00 4.49082017e+00 4.47729703e+00 4.46381458e+00 4.45037271e+00 + 4.43697129e+00 4.42361020e+00 4.41028931e+00 4.39700851e+00 4.38376768e+00 + 4.37056670e+00 4.35740544e+00 4.34428380e+00 4.33120164e+00 4.31815885e+00 + 4.30515532e+00 4.29219093e+00 4.27926555e+00 4.26637907e+00 4.25353138e+00 + 4.24072235e+00 4.22795188e+00 4.21521984e+00 4.20252613e+00 4.18987062e+00 + 4.17725320e+00 4.16467376e+00 4.15213218e+00 4.13962835e+00 4.12716216e+00 + 4.11473349e+00 4.10234223e+00 4.08998827e+00 4.07767150e+00 4.06539180e+00 + 4.05314906e+00 4.04094318e+00 4.02877403e+00 4.01664152e+00 4.00454553e+00 + 3.99248595e+00 3.98046268e+00 3.96847559e+00 3.95652460e+00 3.94460957e+00 + 3.93273042e+00 3.92088702e+00 3.90907928e+00 3.89730709e+00 3.88557033e+00 + 3.87386891e+00 3.86220271e+00 3.85057163e+00 3.83897557e+00 3.82741442e+00 + 3.81588807e+00 3.80439643e+00 3.79293938e+00 3.78151682e+00 3.77012865e+00 + 3.75877476e+00 3.74745506e+00 3.73616944e+00 3.72491779e+00 3.71370002e+00 + 3.70251602e+00 3.69136569e+00 3.68024894e+00 3.66916565e+00 3.65811573e+00 + 3.64709908e+00 3.63611560e+00 3.62516518e+00 3.61424774e+00 3.60336317e+00 + 3.59251136e+00 3.58169223e+00 3.57090568e+00 3.56015160e+00 3.54942990e+00 + 3.53874049e+00 3.52808325e+00 3.51745811e+00 3.50686495e+00 3.49630370e+00 + 3.48577424e+00 3.47527648e+00 3.46481033e+00 3.45437570e+00 3.44397248e+00 + 3.43360059e+00 3.42325993e+00 3.41295040e+00 3.40267192e+00 3.39242438e+00 + 3.38220770e+00 3.37202179e+00 3.36186654e+00 3.35174187e+00 3.34164769e+00 + 3.33158390e+00 3.32155042e+00 3.31154714e+00 3.30157399e+00 3.29163087e+00 + 3.28171769e+00 3.27183436e+00 3.26198078e+00 3.25215688e+00 3.24236256e+00 + 3.23259774e+00 3.22286231e+00 3.21315620e+00 3.20347932e+00 3.19383158e+00 + 3.18421289e+00 3.17462316e+00 3.16506231e+00 3.15553025e+00 3.14602689e+00 + 3.13655215e+00 3.12710594e+00 3.11768818e+00 3.10829878e+00 3.09893764e+00 + 3.08960470e+00 3.08029986e+00 3.07102305e+00 3.06177416e+00 3.05255313e+00 + 3.04335987e+00 3.03419429e+00 3.02505631e+00 3.01594584e+00 3.00686282e+00 + 2.99780714e+00 2.98877873e+00 2.97977752e+00 2.97080340e+00 2.96185631e+00 + 2.95293617e+00 2.94404288e+00 2.93517638e+00 2.92633658e+00 2.91752340e+00 + 2.90873676e+00 2.89997657e+00 2.89124277e+00 2.88253527e+00 2.87385399e+00 + 2.86519886e+00 2.85656979e+00 2.84796670e+00 2.83938952e+00 2.83083817e+00 + 2.82231258e+00 2.81381265e+00 2.80533833e+00 2.79688952e+00 2.78846616e+00 + 2.78006816e+00 2.77169546e+00 2.76334797e+00 2.75502561e+00 2.74672832e+00 + 2.73845602e+00 2.73020863e+00 2.72198607e+00 2.71378828e+00 2.70561518e+00 + 2.69746668e+00 2.68934273e+00 2.68124324e+00 2.67316815e+00 2.66511737e+00 + 2.65709084e+00 2.64908848e+00 2.64111022e+00 2.63315598e+00 2.62522570e+00 + 2.61731930e+00 2.60943672e+00 2.60157787e+00 2.59374268e+00 2.58593110e+00 + 2.57814304e+00 2.57037843e+00 2.56263721e+00 2.55491930e+00 2.54722463e+00 + 2.53955314e+00 2.53190474e+00 2.52427939e+00 2.51667699e+00 2.50909749e+00 + 2.50154082e+00 2.49400691e+00 2.48649568e+00 2.47900708e+00 2.47154102e+00 + 2.46409745e+00 2.45667630e+00 2.44927750e+00 2.44190098e+00 2.43454668e+00 + 2.42721452e+00 2.41990444e+00 2.41261638e+00 2.40535027e+00 2.39810604e+00 + 2.39088363e+00 2.38368297e+00 2.37650400e+00 2.36934664e+00 2.36221084e+00 + 2.35509653e+00 2.34800365e+00 2.34093212e+00 2.33388190e+00 2.32685290e+00 + 2.31984508e+00 2.31285835e+00 2.30589268e+00 2.29894797e+00 2.29202419e+00 + 2.28512125e+00 2.27823911e+00 2.27137769e+00 2.26453693e+00 2.25771678e+00 + 2.25091717e+00 2.24413803e+00 2.23737931e+00 2.23064095e+00 2.22392288e+00 + 2.21722504e+00 2.21054737e+00 2.20388982e+00 2.19725231e+00 2.19063479e+00 + 2.18403721e+00 2.17745949e+00 2.17090158e+00 2.16436343e+00 2.15784496e+00 + 2.15134613e+00 2.14486686e+00 2.13840711e+00 2.13196682e+00 2.12554592e+00 + 2.11914436e+00 2.11276208e+00 2.10639902e+00 2.10005512e+00 2.09373033e+00 + 2.08742458e+00 2.08113783e+00 2.07487001e+00 2.06862107e+00 2.06239095e+00 + 2.05617959e+00 2.04998693e+00 2.04381293e+00 2.03765752e+00 2.03150058e+00 + 2.02525094e+00 2.01889835e+00 2.01244387e+00 2.00588860e+00 1.99923363e+00 + 1.99248005e+00 1.98562896e+00 1.97868149e+00 1.97163875e+00 1.96450186e+00 + 1.95727197e+00 1.94995020e+00 1.94253771e+00 1.93503564e+00 1.92744516e+00 + 1.91976742e+00 1.91200360e+00 1.90415486e+00 1.89622239e+00 1.88820736e+00 + 1.88011098e+00 1.87193441e+00 1.86367888e+00 1.85534557e+00 1.84693568e+00 + 1.83845044e+00 1.82989104e+00 1.82125871e+00 1.81255466e+00 1.80378012e+00 + 1.79493630e+00 1.78602444e+00 1.77704576e+00 1.76800150e+00 1.75889289e+00 + 1.74972116e+00 1.74048755e+00 1.73119331e+00 1.72183966e+00 1.71242786e+00 + 1.70295915e+00 1.69343476e+00 1.68385594e+00 1.67422395e+00 1.66454001e+00 + 1.65480539e+00 1.64502132e+00 1.63518905e+00 1.62530982e+00 1.61538488e+00 + 1.60541547e+00 1.59540285e+00 1.58534824e+00 1.57525289e+00 1.56511804e+00 + 1.55494493e+00 1.54473479e+00 1.53448887e+00 1.52420839e+00 1.51389459e+00 + 1.50354870e+00 1.49317194e+00 1.48276553e+00 1.47233071e+00 1.46186869e+00 + 1.45138068e+00 1.44086791e+00 1.43033157e+00 1.41977288e+00 1.40919304e+00 + 1.39859326e+00 1.38797471e+00 1.37733861e+00 1.36668614e+00 1.35601847e+00 + 1.34533680e+00 1.33464230e+00 1.32393613e+00 1.31321947e+00 1.30249348e+00 + 1.29175931e+00 1.28101811e+00 1.27027104e+00 1.25951922e+00 1.24876381e+00 + 1.23800593e+00 1.22724670e+00 1.21648724e+00 1.20572867e+00 1.19497209e+00 + 1.18421861e+00 1.17346932e+00 1.16272530e+00 1.15198765e+00 1.14125743e+00 + 1.13053572e+00 1.11982358e+00 1.10912207e+00 1.09843223e+00 1.08775510e+00 + 1.07709172e+00 1.06644313e+00 1.05581033e+00 1.04519434e+00 1.03459617e+00 + 1.02401681e+00 1.01345726e+00 1.00291849e+00 9.92401492e-01 9.81907221e-01 + 9.71436639e-01 9.60990696e-01 9.50570336e-01 9.40176493e-01 9.29810093e-01 + 9.19472056e-01 9.09163289e-01 8.98884695e-01 8.88637166e-01 8.78421586e-01 + 8.68238831e-01 8.58089766e-01 8.47975250e-01 8.37896131e-01 8.27853250e-01 + 8.17847437e-01 8.07879515e-01 7.97950295e-01 7.88060583e-01 7.78211172e-01 + 7.68402847e-01 7.58636385e-01 7.48912551e-01 7.39232104e-01 7.29595791e-01 + 7.20004351e-01 7.10458511e-01 7.00958991e-01 6.91506501e-01 6.82101741e-01 + 6.72745401e-01 6.63438161e-01 6.54180693e-01 6.44973658e-01 6.35817706e-01 + 6.26713480e-01 6.17661611e-01 6.08662720e-01 5.99717420e-01 5.90826313e-01 + 5.81989990e-01 5.73209034e-01 5.64484016e-01 5.55815499e-01 5.47204035e-01 + 5.38650166e-01 5.30154423e-01 5.21717329e-01 5.13339396e-01 5.05021126e-01 + 4.96763010e-01 4.88565529e-01 4.80429157e-01 4.72354354e-01 4.64341571e-01 + 4.56391251e-01 4.48503824e-01 4.40679712e-01 4.32919326e-01 4.25223066e-01 + 4.17591324e-01 4.10024482e-01 4.02522909e-01 3.95086967e-01 3.87717007e-01 + 3.80413369e-01 3.73176384e-01 3.66006374e-01 3.58903648e-01 3.51868509e-01 + 3.44901247e-01 3.38002144e-01 3.31171470e-01 3.24409487e-01 3.17716446e-01 + 3.11092590e-01 3.04538150e-01 2.98053348e-01 2.91638397e-01 2.85293500e-01 + 2.79018849e-01 2.72814628e-01 2.66681011e-01 2.60618162e-01 2.54626235e-01 + 2.48705377e-01 2.42855722e-01 2.37077396e-01 2.31370518e-01 2.25735193e-01 + 2.20171521e-01 2.14679590e-01 2.09259479e-01 2.03911260e-01 1.98634994e-01 + 1.93430733e-01 1.88298520e-01 1.83238389e-01 1.78250365e-01 1.73334466e-01 + 1.68490697e-01 1.63719059e-01 1.59019540e-01 1.54392122e-01 1.49836778e-01 + 1.45353470e-01 1.40942156e-01 1.36602781e-01 1.32335284e-01 1.28139595e-01 + 1.24015636e-01 1.19963320e-01 1.15982553e-01 1.12073231e-01 1.08235245e-01 + 1.04468474e-01 1.00772792e-01 9.71480639e-02 9.35941475e-02 9.01108922e-02 + 8.66981398e-02 8.33557246e-02 8.00834733e-02 7.68812050e-02 7.37487314e-02 + 7.06858571e-02 6.76923789e-02 6.47680867e-02 6.19127631e-02 5.91261838e-02 + 5.64081173e-02 5.37583251e-02 5.11765620e-02 4.86625757e-02 4.62161076e-02 + 4.38368919e-02 4.15246567e-02 3.92791232e-02 3.71000065e-02 3.49870149e-02 + 3.29398508e-02 3.09582101e-02 2.90417828e-02 2.71902526e-02 2.54032973e-02 + 2.36805888e-02 2.20217931e-02 2.04265704e-02 1.88945754e-02 1.74254570e-02 + 1.60188586e-02 1.46744181e-02 1.33917682e-02 1.21705362e-02 1.10103441e-02 + 9.91080879e-03 8.87154218e-03 7.89215113e-03 6.97223762e-03 6.11139877e-03 + 5.30922700e-03 4.56531002e-03 3.87923100e-03 3.25056856e-03 2.67889694e-03 + 2.16378599e-03 1.70480133e-03 1.30150438e-03 9.53452457e-04 6.60198872e-04 + 4.21292975e-04 2.36280265e-04 1.04702458e-04 2.60975699e-05 0.00000000e+00 + 2.04047571e-06 2.05095161e-06 2.09195486e-06 2.13377786e-06 2.17643701e-06 + 2.21994900e-06 2.26433090e-06 2.30960010e-06 2.35577433e-06 2.40287169e-06 + 2.45091064e-06 2.49991000e-06 2.54988896e-06 2.60086712e-06 2.65286446e-06 + 2.70590133e-06 2.75999854e-06 2.81517728e-06 2.87145916e-06 2.92886625e-06 + 2.98742104e-06 3.04714647e-06 3.10806596e-06 3.17020336e-06 3.23358303e-06 + 3.29822981e-06 3.36416903e-06 3.43142652e-06 3.50002865e-06 3.57000228e-06 + 3.64137486e-06 3.71417433e-06 3.78842924e-06 3.86416867e-06 3.94142230e-06 + 4.02022042e-06 4.10059389e-06 4.18257420e-06 4.26619350e-06 4.35148453e-06 + 4.43848073e-06 4.52721619e-06 4.61772567e-06 4.71004464e-06 4.80420928e-06 + 4.90025648e-06 4.99822390e-06 5.09814990e-06 5.20007365e-06 5.30403510e-06 + 5.41007497e-06 5.51823482e-06 5.62855704e-06 5.74108485e-06 5.85586235e-06 + 5.97293451e-06 6.09234722e-06 6.21414726e-06 6.33838236e-06 6.46510120e-06 + 6.59435345e-06 6.72618974e-06 6.86066175e-06 6.99782215e-06 7.13772471e-06 + 7.28042424e-06 7.42597666e-06 7.57443900e-06 7.72586945e-06 7.88032734e-06 + 8.03787319e-06 8.19856875e-06 8.36247698e-06 8.52966210e-06 8.70018965e-06 + 8.87412642e-06 9.05154059e-06 9.23250167e-06 9.41708058e-06 9.60534964e-06 + 9.79738263e-06 9.99325479e-06 1.01930429e-05 1.03968252e-05 1.06046816e-05 + 1.08166935e-05 1.10329440e-05 1.12535179e-05 1.14785015e-05 1.17079831e-05 + 1.19420525e-05 1.21808015e-05 1.24243236e-05 1.26727143e-05 1.29260709e-05 + 1.31844927e-05 1.34480809e-05 1.37169388e-05 1.39911718e-05 1.42708873e-05 + 1.45561950e-05 1.48472067e-05 1.51440363e-05 1.54468002e-05 1.57556170e-05 + 1.60706078e-05 1.63918960e-05 1.67196075e-05 1.70538706e-05 1.73948164e-05 + 1.77425785e-05 1.80972932e-05 1.84590994e-05 1.88281389e-05 1.92045563e-05 + 1.95884992e-05 1.99801179e-05 2.03795660e-05 2.07869999e-05 2.12025794e-05 + 2.16264672e-05 2.20588295e-05 2.24998357e-05 2.29496586e-05 2.34084745e-05 + 2.38764631e-05 2.43538078e-05 2.48406958e-05 2.53373177e-05 2.58438682e-05 + 2.63605457e-05 2.68875528e-05 2.74250960e-05 2.79733858e-05 2.85326371e-05 + 2.91030692e-05 2.96849054e-05 3.02783738e-05 3.08837069e-05 3.15011420e-05 + 3.21309210e-05 3.27732907e-05 3.34285027e-05 3.40968139e-05 3.47784861e-05 + 3.54737864e-05 3.61829873e-05 3.69063666e-05 3.76442079e-05 3.83968003e-05 + 3.91644386e-05 3.99474237e-05 4.07460623e-05 4.15606675e-05 4.23915584e-05 + 4.32390606e-05 4.41035062e-05 4.49852339e-05 4.58845893e-05 4.68019247e-05 + 4.77375996e-05 4.86919807e-05 4.96654419e-05 5.06583647e-05 5.16711381e-05 + 5.27041590e-05 5.37578322e-05 5.48325706e-05 5.59287953e-05 5.70469358e-05 + 5.81874303e-05 5.93507257e-05 6.05372778e-05 6.17475516e-05 6.29820212e-05 + 6.42411705e-05 6.55254929e-05 6.68354915e-05 6.81716797e-05 6.95345810e-05 + 7.09247296e-05 7.23426700e-05 7.37889581e-05 7.52641604e-05 7.67688550e-05 + 7.83036314e-05 7.98690912e-05 8.14658477e-05 8.30945266e-05 8.47557661e-05 + 8.64502170e-05 8.81785434e-05 8.99414225e-05 9.17395450e-05 9.35736156e-05 + 9.54443528e-05 9.73524898e-05 9.92987741e-05 1.01283968e-04 1.03308851e-04 + 1.05374214e-04 1.07480868e-04 1.09629638e-04 1.11821367e-04 1.14056912e-04 + 1.16337149e-04 1.18662973e-04 1.21035295e-04 1.23455043e-04 1.25923167e-04 + 1.28440634e-04 1.31008428e-04 1.33627558e-04 1.36299049e-04 1.39023948e-04 + 1.41803323e-04 1.44638262e-04 1.47529876e-04 1.50479299e-04 1.53487686e-04 + 1.56556216e-04 1.59686091e-04 1.62878538e-04 1.66134807e-04 1.69456174e-04 + 1.72843941e-04 1.76299435e-04 1.79824010e-04 1.83419046e-04 1.87085954e-04 + 1.90826168e-04 1.94641156e-04 1.98532411e-04 2.02501458e-04 2.06549852e-04 + 2.10679180e-04 2.14891059e-04 2.19187140e-04 2.23569105e-04 2.28038673e-04 + 2.32597593e-04 2.37247653e-04 2.41990673e-04 2.46828513e-04 2.51763068e-04 + 2.56796271e-04 2.61930094e-04 2.67166549e-04 2.72507687e-04 2.77955601e-04 + 2.83512425e-04 2.89180337e-04 2.94961556e-04 3.00858349e-04 3.06873025e-04 + 3.13007940e-04 3.19265499e-04 3.25648153e-04 3.32158403e-04 3.38798798e-04 + 3.45571942e-04 3.52480486e-04 3.59527138e-04 3.66714659e-04 3.74045863e-04 + 3.81523625e-04 3.89150872e-04 3.96930593e-04 4.04865836e-04 4.12959709e-04 + 4.21215383e-04 4.29636094e-04 4.38225138e-04 4.46985881e-04 4.55921756e-04 + 4.65036262e-04 4.74332970e-04 4.83815523e-04 4.93487634e-04 5.03353093e-04 + 5.13415764e-04 5.23679589e-04 5.34148588e-04 5.44826864e-04 5.55718598e-04 + 5.66828057e-04 5.78159592e-04 5.89717643e-04 6.01506737e-04 6.13531492e-04 + 6.25796617e-04 6.38306917e-04 6.51067293e-04 6.64082741e-04 6.77358361e-04 + 6.90899352e-04 7.04711018e-04 7.18798769e-04 7.33168121e-04 7.47824704e-04 + 7.62774258e-04 7.78022638e-04 7.93575816e-04 8.09439883e-04 8.25621052e-04 + 8.42125661e-04 8.58960174e-04 8.76131183e-04 8.93645413e-04 9.11509723e-04 + 9.29731109e-04 9.48316707e-04 9.67273794e-04 9.86609795e-04 1.00633228e-03 + 1.02644898e-03 1.04696776e-03 1.06789666e-03 1.08924387e-03 1.11101776e-03 + 1.13322685e-03 1.15587984e-03 1.17898559e-03 1.20255316e-03 1.22659177e-03 + 1.25111082e-03 1.27611993e-03 1.30162888e-03 1.32764766e-03 1.35418646e-03 + 1.38125566e-03 1.40886586e-03 1.43702787e-03 1.46575272e-03 1.49505165e-03 + 1.52493613e-03 1.55541785e-03 1.58650875e-03 1.61822099e-03 1.65056700e-03 + 1.68355942e-03 1.71721118e-03 1.75153544e-03 1.78654563e-03 1.82225546e-03 + 1.85867890e-03 1.89583021e-03 1.93372392e-03 1.97237487e-03 2.01179817e-03 + 2.05200925e-03 2.09302385e-03 2.13485800e-03 2.17752809e-03 2.22105080e-03 + 2.26544317e-03 2.31072255e-03 2.35690665e-03 2.40401356e-03 2.45206169e-03 + 2.50106983e-03 2.55105716e-03 2.60204323e-03 2.65404797e-03 2.70709172e-03 + 2.76119524e-03 2.81637966e-03 2.87266659e-03 2.93007801e-03 2.98863639e-03 + 3.04836461e-03 3.10928602e-03 3.17142445e-03 3.23480418e-03 3.29944999e-03 + 3.36538715e-03 3.43264142e-03 3.50123910e-03 3.57120699e-03 3.64257244e-03 + 3.71536332e-03 3.78960809e-03 3.86533575e-03 3.94257589e-03 4.02135868e-03 + 4.10171490e-03 4.18367594e-03 4.26727380e-03 4.35254115e-03 4.43951127e-03 + 4.52821813e-03 4.61869637e-03 4.71098131e-03 4.80510898e-03 4.90111612e-03 + 4.99904022e-03 5.09891950e-03 5.20079293e-03 5.30470026e-03 5.41068205e-03 + 5.51877965e-03 5.62903523e-03 5.74149179e-03 5.85619321e-03 5.97318421e-03 + 6.09251043e-03 6.21421839e-03 6.33835555e-03 6.46497030e-03 6.59411200e-03 + 6.72583098e-03 6.86017857e-03 6.99720713e-03 7.13697005e-03 7.27952178e-03 + 7.42491784e-03 7.57321486e-03 7.72447059e-03 7.87874393e-03 8.03609494e-03 + 8.19658487e-03 8.36027618e-03 8.52723257e-03 8.69751901e-03 8.87120173e-03 + 9.04834830e-03 9.22902762e-03 9.41330992e-03 9.60126687e-03 9.79297152e-03 + 9.98849837e-03 1.01879234e-02 1.03913241e-02 1.05987794e-02 1.08103700e-02 + 1.10261779e-02 1.12462870e-02 1.14707827e-02 1.16997521e-02 1.19332840e-02 + 1.21714690e-02 1.24143995e-02 1.26621696e-02 1.29148754e-02 1.31726148e-02 + 1.34354876e-02 1.37035958e-02 1.39770430e-02 1.42559352e-02 1.45403802e-02 + 1.48304882e-02 1.51263713e-02 1.54281440e-02 1.57359229e-02 1.60498269e-02 + 1.63699774e-02 1.66964980e-02 1.70295147e-02 1.73691561e-02 1.77155533e-02 + 1.80688398e-02 1.84291520e-02 1.87966285e-02 1.91714111e-02 1.95536442e-02 + 1.99434748e-02 2.03410530e-02 2.07465318e-02 2.11600670e-02 2.15818178e-02 + 2.20119461e-02 2.24506171e-02 2.28979992e-02 2.33542642e-02 2.38195870e-02 + 2.42941460e-02 2.47781231e-02 2.52717037e-02 2.57750767e-02 2.62884346e-02 + 2.68119739e-02 2.73458947e-02 2.78904008e-02 2.84457003e-02 2.90120049e-02 + 2.95895307e-02 3.01784978e-02 3.07791305e-02 3.13916574e-02 3.20163116e-02 + 3.26533305e-02 3.33029562e-02 3.39654353e-02 3.46410192e-02 3.53299639e-02 + 3.60325306e-02 3.67489851e-02 3.74795985e-02 3.82246470e-02 3.89844119e-02 + 3.97591800e-02 4.05492435e-02 4.13549000e-02 4.21764528e-02 4.30142108e-02 + 4.38684889e-02 4.47396078e-02 4.56278942e-02 4.65336809e-02 4.74573070e-02 + 4.83991179e-02 4.93594654e-02 5.03387080e-02 5.13372105e-02 5.23553449e-02 + 5.33934898e-02 5.44520309e-02 5.55313610e-02 5.66318801e-02 5.77539956e-02 + 5.88981224e-02 6.00646830e-02 6.12541074e-02 6.24668337e-02 6.37033078e-02 + 6.49639840e-02 6.62493243e-02 6.75597995e-02 6.88958888e-02 7.02580798e-02 + 7.16468690e-02 7.30627619e-02 7.45062728e-02 7.59779252e-02 7.74782520e-02 + 7.90077955e-02 8.05671075e-02 8.21567496e-02 8.37772930e-02 8.54293193e-02 + 8.71134198e-02 8.88301965e-02 9.05802615e-02 9.23642375e-02 9.41827581e-02 + 9.60364675e-02 9.79260210e-02 9.98520852e-02 1.01815338e-01 1.03816468e-01 + 1.05856176e-01 1.07935174e-01 1.10054188e-01 1.12213953e-01 1.14415217e-01 + 1.16658742e-01 1.18945300e-01 1.21275677e-01 1.23650671e-01 1.26071094e-01 + 1.28537770e-01 1.31051536e-01 1.33613243e-01 1.36223754e-01 1.38883946e-01 + 1.41594711e-01 1.44356954e-01 1.47171591e-01 1.50039557e-01 1.52961797e-01 + 1.55939273e-01 1.58972958e-01 1.62063842e-01 1.65212929e-01 1.68421236e-01 + 1.71689797e-01 1.75019659e-01 1.78411885e-01 1.81867550e-01 1.85387748e-01 + 1.88973584e-01 1.92626180e-01 1.96346674e-01 2.00136216e-01 2.03995974e-01 + 2.07927128e-01 2.11930876e-01 2.16008430e-01 2.20161015e-01 2.24389873e-01 + 2.28696261e-01 2.33081449e-01 2.37546724e-01 2.42093385e-01 2.46722749e-01 + 2.51436143e-01 2.56234912e-01 2.61120413e-01 2.66094017e-01 2.71157111e-01 + 2.76311093e-01 2.81557374e-01 2.86897380e-01 2.92332550e-01 2.97864332e-01 + 3.03494190e-01 3.09223599e-01 3.15054044e-01 3.20987022e-01 3.27024041e-01 + 3.33166619e-01 3.39416285e-01 3.45774574e-01 3.52243033e-01 3.58823217e-01 + 3.65516687e-01 3.72325013e-01 3.79249770e-01 3.86292540e-01 3.93454910e-01 + 4.00738470e-01 4.08144814e-01 4.15675541e-01 4.23332251e-01 4.31116542e-01 + 4.39030017e-01 4.47074276e-01 4.55250916e-01 4.63561533e-01 4.72007720e-01 + 4.80591063e-01 4.89313143e-01 4.98175533e-01 5.07179799e-01 5.16327497e-01 + 5.25620170e-01 5.35059350e-01 5.44646556e-01 5.54383291e-01 5.64271040e-01 + 5.74311272e-01 5.84505434e-01 5.94854953e-01 6.05361233e-01 6.16025651e-01 + 6.26849561e-01 6.37834285e-01 6.48981116e-01 6.60291318e-01 6.71766115e-01 + 6.83406701e-01 6.95214229e-01 7.07189811e-01 7.19334521e-01 7.31649384e-01 + 7.44135384e-01 7.56793451e-01 7.69624469e-01 7.82629267e-01 7.95808620e-01 + 8.09163245e-01 8.22693799e-01 8.36400879e-01 8.50285015e-01 8.64346674e-01 + 8.78586252e-01 8.93004073e-01 9.07600389e-01 9.22375377e-01 9.37329134e-01 + 9.52461677e-01 9.67772941e-01 9.83262776e-01 9.98930942e-01 1.01477711e+00 + 1.03080087e+00 1.04700170e+00 1.06337899e+00 1.07993204e+00 1.09666004e+00 + 1.11356207e+00 1.13063713e+00 1.14788410e+00 1.16530174e+00 1.18288873e+00 + 1.20064361e+00 1.21856482e+00 1.23665070e+00 1.25489945e+00 1.27330916e+00 + 1.29187782e+00 1.31060328e+00 1.32948329e+00 1.34851546e+00 1.36769729e+00 + 1.38702617e+00 1.40649935e+00 1.42611396e+00 1.44586702e+00 1.46575542e+00 + 1.48577594e+00 1.50592523e+00 1.52619982e+00 1.54659613e+00 1.56711045e+00 + 1.58773895e+00 1.60847772e+00 1.62932269e+00 1.65026971e+00 1.67131450e+00 + 1.69245268e+00 1.71367978e+00 1.73499120e+00 1.75638226e+00 1.77784817e+00 + 1.79938405e+00 1.82098493e+00 1.84264575e+00 1.86436137e+00 1.88612657e+00 + 1.90793604e+00 1.92978441e+00 1.95166624e+00 1.97357603e+00 1.99550821e+00 + 2.01745715e+00 2.03941720e+00 2.06138263e+00 2.08334768e+00 2.10530657e+00 + 2.12725347e+00 2.14918254e+00 2.17108791e+00 2.19296369e+00 2.21480400e+00 + 2.23660295e+00 2.25835463e+00 2.28005318e+00 2.30169271e+00 2.32326738e+00 + 2.34477136e+00 2.36619884e+00 2.38754407e+00 2.40880133e+00 2.42996492e+00 + 2.45102924e+00 2.47198870e+00 2.49283781e+00 2.51357111e+00 2.53418325e+00 + 2.55466891e+00 2.57502290e+00 2.59524008e+00 2.61531541e+00 2.63524395e+00 + 2.65502086e+00 2.67464139e+00 2.69410090e+00 2.71339486e+00 2.73251886e+00 + 2.75146860e+00 2.77023990e+00 2.78882870e+00 2.80723106e+00 2.82544319e+00 + 2.84346139e+00 2.86128213e+00 2.87890199e+00 2.89631769e+00 2.91352609e+00 + 2.93052419e+00 2.94730912e+00 2.96387815e+00 2.98022870e+00 2.99635831e+00 + 3.01226468e+00 3.02794565e+00 3.04339918e+00 3.05862340e+00 3.07361655e+00 + 3.08837703e+00 3.10290336e+00 3.11719422e+00 3.13124840e+00 3.14506485e+00 + 3.15864262e+00 3.17198093e+00 3.18507910e+00 3.19793658e+00 3.21055297e+00 + 3.22292797e+00 3.23506140e+00 3.24695322e+00 3.25860348e+00 3.27001236e+00 + 3.28118016e+00 3.29210726e+00 3.30279418e+00 3.31324151e+00 3.32344997e+00 + 3.33342036e+00 3.34315358e+00 3.35265062e+00 3.36191256e+00 3.37094056e+00 + 3.37973589e+00 3.38829985e+00 3.39663387e+00 3.40473941e+00 3.41261803e+00 + 3.42027135e+00 3.42770104e+00 3.43490886e+00 3.44189660e+00 3.44866613e+00 + 3.45521936e+00 3.46155824e+00 3.46768480e+00 3.47360108e+00 3.47930919e+00 + 3.48481125e+00 3.49010944e+00 3.49520597e+00 3.50010308e+00 3.50480303e+00 + 3.50930811e+00 3.51362065e+00 3.51774299e+00 3.52167748e+00 3.52542650e+00 + 3.52899245e+00 3.53237772e+00 3.53558474e+00 3.53861594e+00 3.54147374e+00 + 3.54416059e+00 3.54667892e+00 3.54903119e+00 3.55121984e+00 3.55324732e+00 + 3.55511606e+00 3.55682850e+00 3.55838708e+00 3.55979422e+00 3.56105233e+00 + 3.56216384e+00 3.56313112e+00 3.56395658e+00 3.56464257e+00 3.56519147e+00 + 3.56560561e+00 3.56588732e+00 3.56603892e+00 3.56606270e+00 3.56596093e+00 + 3.56573588e+00 3.56538979e+00 3.56492486e+00 3.56434331e+00 3.56364730e+00 + 3.56283899e+00 3.56192051e+00 3.56089397e+00 3.55976147e+00 3.55852505e+00 + 3.55718677e+00 3.55574864e+00 3.55421264e+00 3.55258076e+00 3.55085491e+00 + 3.54903704e+00 3.54712902e+00 3.54513272e+00 3.54304999e+00 3.54088264e+00 + 3.53863246e+00 3.53630122e+00 3.53389065e+00 3.53140248e+00 3.52883839e+00 + 3.52620004e+00 3.52348907e+00 3.52070710e+00 3.51785572e+00 3.51493648e+00 + 3.51195092e+00 3.50890056e+00 3.50578689e+00 3.50261136e+00 3.49937543e+00 + 3.49608051e+00 3.49272798e+00 3.48931922e+00 3.48585557e+00 3.48233835e+00 + 3.47876886e+00 3.47514837e+00 3.47147815e+00 3.46775941e+00 3.46399337e+00 + 3.46018121e+00 3.45632410e+00 3.45242318e+00 3.44847957e+00 3.44449438e+00 + 3.44046868e+00 3.43640354e+00 3.43229999e+00 3.42815906e+00 3.42398175e+00 + 3.41976903e+00 3.41552187e+00 3.41124122e+00 3.40692800e+00 3.40258311e+00 + 3.39820746e+00 3.39380190e+00 3.38936729e+00 3.38490448e+00 3.38041427e+00 + 3.37589748e+00 3.37135489e+00 3.36678728e+00 3.36219540e+00 3.35757999e+00 + 3.35294177e+00 3.34828146e+00 3.34359975e+00 3.33889733e+00 3.33417485e+00 + 3.32943298e+00 3.32467235e+00 3.31989358e+00 3.31509730e+00 3.31028410e+00 + 3.30545456e+00 3.30060926e+00 3.29574877e+00 3.29087362e+00 3.28598437e+00 + 3.28108153e+00 3.27616563e+00 3.27123716e+00 3.26629662e+00 3.26134448e+00 + 3.25638123e+00 3.25140733e+00 3.24642321e+00 3.24142933e+00 3.23642612e+00 + 3.23141399e+00 3.22639337e+00 3.22136464e+00 3.21632821e+00 3.21128447e+00 + 3.20623378e+00 3.20117652e+00 3.19611304e+00 3.19104371e+00 3.18596885e+00 + 3.18088881e+00 3.17580392e+00 3.17071449e+00 3.16562085e+00 3.16052328e+00 + 3.15542211e+00 3.15031760e+00 3.14521006e+00 3.14009976e+00 3.13498697e+00 + 3.12987197e+00 3.12475499e+00 3.11963632e+00 3.11451618e+00 3.10939482e+00 + 3.10427248e+00 3.09914938e+00 3.09402576e+00 3.08890183e+00 3.08377781e+00 + 3.07865391e+00 3.07353033e+00 3.06840726e+00 3.06328491e+00 3.05816347e+00 + 3.05304312e+00 3.04792404e+00 3.04280640e+00 3.03769039e+00 3.03257616e+00 + 3.02746388e+00 3.02235372e+00 3.01724582e+00 3.01214034e+00 3.00703743e+00 + 3.00193723e+00 2.99683988e+00 2.99174552e+00 2.98665429e+00 2.98156632e+00 + 2.97648172e+00 2.97140063e+00 2.96632317e+00 2.96124945e+00 2.95617960e+00 + 2.95111371e+00 2.94605191e+00 2.94099429e+00 2.93594097e+00 2.93089203e+00 + 2.92584759e+00 2.92080773e+00 2.91577254e+00 2.91074213e+00 2.90571657e+00 + 2.90069596e+00 2.89568037e+00 2.89066989e+00 2.88566460e+00 2.88066457e+00 + 2.87566987e+00 2.87068059e+00 2.86569679e+00 2.86071855e+00 2.85574592e+00 + 2.85077897e+00 2.84581777e+00 2.84086238e+00 2.83591285e+00 2.83096925e+00 + 2.82603163e+00 2.82110005e+00 2.81617456e+00 2.81125521e+00 2.80634205e+00 + 2.80143513e+00 2.79653450e+00 2.79164020e+00 2.78675227e+00 2.78187077e+00 + 2.77699573e+00 2.77212719e+00 2.76726520e+00 2.76240978e+00 2.75756098e+00 + 2.75271883e+00 2.74788336e+00 2.74305462e+00 2.73823262e+00 2.73341741e+00 + 2.72860901e+00 2.72380745e+00 2.71901276e+00 2.71422497e+00 2.70944410e+00 + 2.70467018e+00 2.69990323e+00 2.69514328e+00 2.69039035e+00 2.68564445e+00 + 2.68090562e+00 2.67617386e+00 2.67144921e+00 2.66673167e+00 2.66202127e+00 + 2.65731803e+00 2.65262195e+00 2.64793306e+00 2.64325137e+00 2.63857689e+00 + 2.63390964e+00 2.62924963e+00 2.62459688e+00 2.61995139e+00 2.61531318e+00 + 2.61068225e+00 2.60605863e+00 2.60144230e+00 2.59683330e+00 2.59223161e+00 + 2.58763726e+00 2.58305025e+00 2.57847059e+00 2.57389828e+00 2.56933332e+00 + 2.56477573e+00 2.56022551e+00 2.55568267e+00 2.55114720e+00 2.54661911e+00 + 2.54209841e+00 2.53758510e+00 2.53307918e+00 2.52858066e+00 2.52408953e+00 + 2.51960579e+00 2.51512946e+00 2.51066052e+00 2.50619899e+00 2.50174486e+00 + 2.49729812e+00 2.49285879e+00 2.48842685e+00 2.48400232e+00 2.47958518e+00 + 2.47517543e+00 2.47077309e+00 2.46637813e+00 2.46199056e+00 2.45761038e+00 + 2.45323759e+00 2.44887217e+00 2.44451414e+00 2.44016348e+00 2.43582019e+00 + 2.43148426e+00 2.42715571e+00 2.42283451e+00 2.41852066e+00 2.41421416e+00 + 2.40991501e+00 2.40562320e+00 2.40133873e+00 2.39706158e+00 2.39279176e+00 + 2.38852925e+00 2.38427406e+00 2.38002617e+00 2.37578559e+00 2.37155229e+00 + 2.36732629e+00 2.36310756e+00 2.35889611e+00 2.35469192e+00 2.35049500e+00 + 2.34630533e+00 2.34212290e+00 2.33794771e+00 2.33377975e+00 2.32961902e+00 + 2.32546550e+00 2.32131918e+00 2.31718007e+00 2.31304815e+00 2.30892341e+00 + 2.30480585e+00 2.30069545e+00 2.29659221e+00 2.29249613e+00 2.28840718e+00 + 2.28432536e+00 2.28025067e+00 2.27618310e+00 2.27212263e+00 2.26806926e+00 + 2.26402298e+00 2.25998377e+00 2.25595164e+00 2.25192657e+00 2.24790854e+00 + 2.24389756e+00 2.23989362e+00 2.23589669e+00 2.23190679e+00 2.22792388e+00 + 2.22394797e+00 2.21997904e+00 2.21601709e+00 2.21206211e+00 2.20811408e+00 + 2.20417300e+00 2.20023885e+00 2.19631163e+00 2.19239132e+00 2.18847792e+00 + 2.18457142e+00 2.18067180e+00 2.17677906e+00 2.17289318e+00 2.16901416e+00 + 2.16514198e+00 2.16127664e+00 2.15741813e+00 2.15356642e+00 2.14972153e+00 + 2.14588342e+00 2.14205210e+00 2.13822755e+00 2.13440977e+00 2.13059873e+00 + 2.12679444e+00 2.12299688e+00 2.11920604e+00 2.11542191e+00 2.11164448e+00 + 2.10787374e+00 2.10410968e+00 2.10035229e+00 2.09660155e+00 2.09285746e+00 + 2.08912001e+00 2.08538918e+00 2.08166497e+00 2.07794736e+00 2.07423635e+00 + 2.07053191e+00 2.06683406e+00 2.06314276e+00 2.05945801e+00 2.05577981e+00 + 2.05210813e+00 2.04844298e+00 2.04478433e+00 2.04113218e+00 2.03748651e+00 + 2.03384733e+00 2.03021461e+00 2.02658834e+00 2.02296852e+00 2.01935513e+00 + 2.01574817e+00 2.01214761e+00 2.00855346e+00 2.00496570e+00 2.00138432e+00 + 1.99780931e+00 1.99424066e+00 1.99067835e+00 1.98712239e+00 1.98357275e+00 + 1.98002942e+00 1.97649240e+00 1.97296168e+00 1.96943724e+00 1.96591907e+00 + 1.96240717e+00 1.95890152e+00 1.95540211e+00 1.95190893e+00 1.94842197e+00 + 1.94494122e+00 1.94146667e+00 1.93799831e+00 1.93453613e+00 1.93108011e+00 + 1.92763025e+00 1.92418654e+00 1.92074896e+00 1.91731750e+00 1.91389217e+00 + 1.91047293e+00 1.90705979e+00 1.90365273e+00 1.90025175e+00 1.89685682e+00 + 1.89346795e+00 1.89008512e+00 1.88670832e+00 1.88333754e+00 1.87997276e+00 + 1.87661399e+00 1.87326121e+00 1.86991440e+00 1.86657357e+00 1.86323869e+00 + 1.85990976e+00 1.85658676e+00 1.85326969e+00 1.84995854e+00 1.84665329e+00 + 1.84335394e+00 1.84006048e+00 1.83677289e+00 1.83349116e+00 1.83021529e+00 + 1.82694527e+00 1.82368107e+00 1.82042271e+00 1.81717015e+00 1.81392340e+00 + 1.81068244e+00 1.80744727e+00 1.80421786e+00 1.80099422e+00 1.79777634e+00 + 1.79456419e+00 1.79135778e+00 1.78815710e+00 1.78496212e+00 1.78177285e+00 + 1.77858926e+00 1.77541136e+00 1.77223914e+00 1.76907257e+00 1.76591166e+00 + 1.76275639e+00 1.75960675e+00 1.75646274e+00 1.75332434e+00 1.75019154e+00 + 1.74706433e+00 1.74394271e+00 1.74082665e+00 1.73771617e+00 1.73461123e+00 + 1.73151184e+00 1.72841799e+00 1.72532965e+00 1.72224683e+00 1.71916952e+00 + 1.71609770e+00 1.71303137e+00 1.70997051e+00 1.70691511e+00 1.70386518e+00 + 1.70082068e+00 1.69778163e+00 1.69474800e+00 1.69171979e+00 1.68869699e+00 + 1.68567958e+00 1.68266757e+00 1.67966093e+00 1.67665967e+00 1.67366376e+00 + 1.67067320e+00 1.66768799e+00 1.66470810e+00 1.66173354e+00 1.65876429e+00 + 1.65580034e+00 1.65284169e+00 1.64988832e+00 1.64694023e+00 1.64399740e+00 + 1.64105983e+00 1.63812751e+00 1.63520042e+00 1.63227856e+00 1.62936192e+00 + 1.62645049e+00 1.62354426e+00 1.62064322e+00 1.61774737e+00 1.61485669e+00 + 1.61197117e+00 1.60909080e+00 1.60621558e+00 1.60334550e+00 1.60048054e+00 + 1.59762070e+00 1.59476597e+00 1.59191634e+00 1.58907180e+00 1.58623234e+00 + 1.58339795e+00 1.58056863e+00 1.57774436e+00 1.57492513e+00 1.57211094e+00 + 1.56930178e+00 1.56649764e+00 1.56369851e+00 1.56090438e+00 1.55811524e+00 + 1.55533108e+00 1.55255190e+00 1.54977768e+00 1.54700842e+00 1.54424410e+00 + 1.54148473e+00 1.53873028e+00 1.53598076e+00 1.53323614e+00 1.53049643e+00 + 1.52776162e+00 1.52503169e+00 1.52230664e+00 1.51958646e+00 1.51687113e+00 + 1.51416066e+00 1.51145503e+00 1.50875424e+00 1.50605826e+00 1.50336711e+00 + 1.50068077e+00 1.49799922e+00 1.49532247e+00 1.49265049e+00 1.48998329e+00 + 1.48732086e+00 1.48466319e+00 1.48201026e+00 1.47936207e+00 1.47671861e+00 + 1.47407988e+00 1.47144586e+00 1.46881655e+00 1.46619193e+00 1.46357201e+00 + 1.46095676e+00 1.45834619e+00 1.45574029e+00 1.45313903e+00 1.45054243e+00 + 1.44795047e+00 1.44536313e+00 1.44278042e+00 1.44020233e+00 1.43762884e+00 + 1.43505995e+00 1.43249565e+00 1.42993593e+00 1.42738079e+00 1.42483021e+00 + 1.42228418e+00 1.41974271e+00 1.41720578e+00 1.41467338e+00 1.41214550e+00 + 1.40962214e+00 1.40710330e+00 1.40458895e+00 1.40207909e+00 1.39957372e+00 + 1.39707283e+00 1.39457640e+00 1.39208443e+00 1.38959692e+00 1.38711385e+00 + 1.38463522e+00 1.38216102e+00 1.37969124e+00 1.37722587e+00 1.37476490e+00 + 1.37230834e+00 1.36985616e+00 1.36740837e+00 1.36496495e+00 1.36252589e+00 + 1.36009119e+00 1.35766085e+00 1.35523484e+00 1.35281317e+00 1.35039583e+00 + 1.34798281e+00 1.34557410e+00 1.34316969e+00 1.34076958e+00 1.33837375e+00 + 1.33598221e+00 1.33359495e+00 1.33121194e+00 1.32883320e+00 1.32645870e+00 + 1.32408845e+00 1.32172244e+00 1.31936065e+00 1.31700308e+00 1.31464973e+00 + 1.31230058e+00 1.30995562e+00 1.30761486e+00 1.30527828e+00 1.30294588e+00 + 1.30061764e+00 1.29829356e+00 1.29597364e+00 1.29365786e+00 1.29134622e+00 + 1.28903871e+00 1.28673532e+00 1.28443605e+00 1.28214089e+00 1.27984983e+00 + 1.27756286e+00 1.27527998e+00 1.27300118e+00 1.27072645e+00 1.26845578e+00 + 1.26618917e+00 1.26392662e+00 1.26166810e+00 1.25941362e+00 1.25716317e+00 + 1.25491674e+00 1.25267433e+00 1.25043592e+00 1.24820151e+00 1.24597109e+00 + 1.24374466e+00 1.24152221e+00 1.23930373e+00 1.23708921e+00 1.23487865e+00 + 1.23267204e+00 1.23046938e+00 1.22827064e+00 1.22607584e+00 1.22388496e+00 + 1.22169800e+00 1.21951494e+00 1.21733578e+00 1.21516052e+00 1.21298915e+00 + 1.21082165e+00 1.20865803e+00 1.20649827e+00 1.20434237e+00 1.20219033e+00 + 1.20004213e+00 1.19789777e+00 1.19575724e+00 1.19362053e+00 1.19148765e+00 + 1.18935857e+00 1.18723330e+00 1.18511183e+00 1.18299415e+00 1.18088025e+00 + 1.17877013e+00 1.17666378e+00 1.17456119e+00 1.17246236e+00 1.17036728e+00 + 1.16827595e+00 1.16618835e+00 1.16410448e+00 1.16202434e+00 1.15994791e+00 + 1.15787520e+00 1.15580618e+00 1.15374087e+00 1.15167924e+00 1.14962130e+00 + 1.14756704e+00 1.14551644e+00 1.14346951e+00 1.14142624e+00 1.13938662e+00 + 1.13735064e+00 1.13531831e+00 1.13328960e+00 1.13126452e+00 1.12924306e+00 + 1.12722521e+00 1.12521096e+00 1.12320032e+00 1.12119326e+00 1.11918980e+00 + 1.11718991e+00 1.11519360e+00 1.11320085e+00 1.11121167e+00 1.10922604e+00 + 1.10724396e+00 1.10526542e+00 1.10329041e+00 1.10131893e+00 1.09935098e+00 + 1.09738655e+00 1.09542562e+00 1.09346820e+00 1.09151427e+00 1.08956384e+00 + 1.08761689e+00 1.08567342e+00 1.08373343e+00 1.08179690e+00 1.07986383e+00 + 1.07793421e+00 1.07600805e+00 1.07408532e+00 1.07216603e+00 1.07025017e+00 + 1.06833774e+00 1.06642872e+00 1.06452311e+00 1.06262091e+00 1.06072211e+00 + 1.05882670e+00 1.05693467e+00 1.05504603e+00 1.05316076e+00 1.05127886e+00 + 1.04940033e+00 1.04752515e+00 1.04565332e+00 1.04378484e+00 1.04191969e+00 + 1.04005788e+00 1.03819939e+00 1.03634423e+00 1.03449238e+00 1.03264384e+00 + 1.03079860e+00 1.02895666e+00 1.02711801e+00 1.02528265e+00 1.02345057e+00 + 1.02162176e+00 1.01979621e+00 1.01797393e+00 1.01615491e+00 1.01433914e+00 + 1.01252661e+00 1.01071732e+00 1.00891126e+00 1.00710843e+00 1.00530883e+00 + 1.00351243e+00 1.00171925e+00 9.99929274e-01 9.98142494e-01 9.96358908e-01 + 9.94578508e-01 9.92801290e-01 9.91027248e-01 9.89256375e-01 9.87488667e-01 + 9.85724118e-01 9.83962722e-01 9.82204473e-01 9.80449366e-01 9.78697395e-01 + 9.76948555e-01 9.75202840e-01 9.73460244e-01 9.71720763e-01 9.69984389e-01 + 9.68251118e-01 9.66520945e-01 9.64793863e-01 9.63069867e-01 9.61348952e-01 + 9.59631112e-01 9.57916341e-01 9.56204635e-01 9.54495987e-01 9.52790393e-01 + 9.51087846e-01 9.49388341e-01 9.47691874e-01 9.45998438e-01 9.44308027e-01 + 9.42620638e-01 9.40936263e-01 9.39254899e-01 9.37576539e-01 9.35901178e-01 + 9.34228810e-01 9.32559431e-01 9.30893035e-01 9.29229617e-01 9.27569171e-01 + 9.25911692e-01 9.24257175e-01 9.22605615e-01 9.20957005e-01 9.19311342e-01 + 9.17668619e-01 9.16028831e-01 9.14391974e-01 9.12758042e-01 9.11127029e-01 + 9.09498931e-01 9.07873742e-01 9.06251457e-01 9.04632071e-01 9.03015578e-01 + 9.01401974e-01 8.99791254e-01 8.98183411e-01 8.96578442e-01 8.94976341e-01 + 8.93377102e-01 8.91780721e-01 8.90187193e-01 8.88596512e-01 8.87008674e-01 + 8.85423673e-01 8.83841504e-01 8.82262163e-01 8.80685643e-01 8.79111941e-01 + 8.77541050e-01 8.75972967e-01 8.74407686e-01 8.72845201e-01 8.71285509e-01 + 8.69728604e-01 8.68174481e-01 8.66623135e-01 8.65074560e-01 8.63528754e-01 + 8.61985709e-01 8.60445422e-01 8.58907887e-01 8.57373099e-01 8.55841054e-01 + 8.54311746e-01 8.52785172e-01 8.51261325e-01 8.49740201e-01 8.48201192e-01 + 8.46617382e-01 8.44988908e-01 8.43316032e-01 8.41599021e-01 8.39838147e-01 + 8.38033686e-01 8.36185917e-01 8.34295124e-01 8.32361596e-01 8.30385625e-01 + 8.28367507e-01 8.26307542e-01 8.24206035e-01 8.22063293e-01 8.19879628e-01 + 8.17655357e-01 8.15390797e-01 8.13086273e-01 8.10742111e-01 8.08358641e-01 + 8.05936196e-01 8.03475115e-01 8.00975736e-01 7.98438405e-01 7.95863469e-01 + 7.93251278e-01 7.90602186e-01 7.87916549e-01 7.85194728e-01 7.82437085e-01 + 7.79643987e-01 7.76815803e-01 7.73952904e-01 7.71055665e-01 7.68124463e-01 + 7.65159679e-01 7.62161696e-01 7.59130898e-01 7.56067674e-01 7.52972415e-01 + 7.49845513e-01 7.46687363e-01 7.43498364e-01 7.40278916e-01 7.37029420e-01 + 7.33750281e-01 7.30441906e-01 7.27104703e-01 7.23739083e-01 7.20345459e-01 + 7.16924244e-01 7.13475856e-01 7.10000712e-01 7.06499233e-01 7.02971840e-01 + 6.99418956e-01 6.95841006e-01 6.92238416e-01 6.88611614e-01 6.84961030e-01 + 6.81287093e-01 6.77590236e-01 6.73870892e-01 6.70129494e-01 6.66366479e-01 + 6.62582283e-01 6.58777343e-01 6.54952099e-01 6.51106988e-01 6.47242453e-01 + 6.43358933e-01 6.39456870e-01 6.35536708e-01 6.31598889e-01 6.27643857e-01 + 6.23672057e-01 6.19683933e-01 6.15679931e-01 6.11660495e-01 6.07626073e-01 + 6.03577111e-01 5.99514054e-01 5.95437349e-01 5.91347444e-01 5.87244785e-01 + 5.83129819e-01 5.79002992e-01 5.74864752e-01 5.70715544e-01 5.66555816e-01 + 5.62386013e-01 5.58206581e-01 5.54017965e-01 5.49820611e-01 5.45614964e-01 + 5.41401466e-01 5.37180563e-01 5.32952696e-01 5.28718309e-01 5.24477842e-01 + 5.20231737e-01 5.15980433e-01 5.11724371e-01 5.07463987e-01 5.03199721e-01 + 4.98932007e-01 4.94661282e-01 4.90387980e-01 4.86112534e-01 4.81835376e-01 + 4.77556936e-01 4.73277645e-01 4.68997930e-01 4.64718219e-01 4.60438936e-01 + 4.56160507e-01 4.51883352e-01 4.47607894e-01 4.43334552e-01 4.39063743e-01 + 4.34795884e-01 4.30531389e-01 4.26270671e-01 4.22014140e-01 4.17762207e-01 + 4.13515277e-01 4.09273757e-01 4.05038049e-01 4.00808555e-01 3.96585674e-01 + 3.92369804e-01 3.88161340e-01 3.83960674e-01 3.79768198e-01 3.75584299e-01 + 3.71409365e-01 3.67243780e-01 3.63087924e-01 3.58942178e-01 3.54806918e-01 + 3.50682519e-01 3.46569353e-01 3.42467789e-01 3.38378195e-01 3.34300933e-01 + 3.30236368e-01 3.26184857e-01 3.22146757e-01 3.18122421e-01 3.14112201e-01 + 3.10116445e-01 3.06135499e-01 3.02169705e-01 2.98219402e-01 2.94284928e-01 + 2.90366616e-01 2.86464798e-01 2.82579801e-01 2.78711951e-01 2.74861569e-01 + 2.71028975e-01 2.67214484e-01 2.63418409e-01 2.59641060e-01 2.55882743e-01 + 2.52143761e-01 2.48424414e-01 2.44725000e-01 2.41045812e-01 2.37387139e-01 + 2.33749270e-01 2.30132488e-01 2.26537072e-01 2.22963301e-01 2.19411448e-01 + 2.15881782e-01 2.12374571e-01 2.08890078e-01 2.05428563e-01 2.01990283e-01 + 1.98575490e-01 1.95184433e-01 1.91817359e-01 1.88474510e-01 1.85156124e-01 + 1.81862438e-01 1.78593682e-01 1.75350084e-01 1.72131869e-01 1.68939258e-01 + 1.65772468e-01 1.62631713e-01 1.59517201e-01 1.56429140e-01 1.53367731e-01 + 1.50333174e-01 1.47325663e-01 1.44345390e-01 1.41392542e-01 1.38467304e-01 + 1.35569855e-01 1.32700372e-01 1.29859028e-01 1.27045990e-01 1.24261425e-01 + 1.21505494e-01 1.18778353e-01 1.16080157e-01 1.13411056e-01 1.10771196e-01 + 1.08160719e-01 1.05579764e-01 1.03028466e-01 1.00506954e-01 9.80153575e-02 + 9.55537985e-02 9.31223968e-02 9.07212680e-02 8.83505241e-02 8.60102730e-02 + 8.37006190e-02 8.14216626e-02 7.91735004e-02 7.69562251e-02 7.47699258e-02 + 7.26146878e-02 7.04905924e-02 6.83977173e-02 6.63361363e-02 6.43059195e-02 + 6.23071332e-02 6.03398398e-02 5.84040982e-02 5.64999633e-02 5.46274863e-02 + 5.27867148e-02 5.09776925e-02 4.92004594e-02 4.74550517e-02 4.57415023e-02 + 4.40598398e-02 4.24100894e-02 4.07922728e-02 3.92064078e-02 3.76525084e-02 + 3.61305853e-02 3.46406454e-02 3.31826918e-02 3.17567243e-02 3.03627389e-02 + 2.90007281e-02 2.76706807e-02 2.63725820e-02 2.51064140e-02 2.38721547e-02 + 2.26697789e-02 2.14992579e-02 2.03605594e-02 1.92536477e-02 1.81784835e-02 + 1.71350243e-02 1.61232240e-02 1.51430332e-02 1.41943991e-02 1.32772654e-02 + 1.23915726e-02 1.15372579e-02 1.07142551e-02 9.92249463e-03 9.16190382e-03 + 8.43240666e-03 7.73392391e-03 7.06637314e-03 6.42966871e-03 5.82372182e-03 + 5.24844054e-03 4.70372977e-03 4.18949135e-03 3.70562400e-03 3.25202343e-03 + 2.82858225e-03 2.43519012e-03 2.07173366e-03 1.73809655e-03 1.43415952e-03 + 1.15980039e-03 9.14894082e-04 6.99312635e-04 5.12925259e-04 3.55598341e-04 + 2.27195472e-04 1.27577478e-04 5.66024399e-05 1.41257221e-05 0.00000000e+00 + 5.11971098e-01 5.11971098e-01 5.17242510e-01 5.23233505e-01 5.29293369e-01 + 5.35422881e-01 5.41622827e-01 5.47894004e-01 5.54237214e-01 5.60653272e-01 + 5.67142999e-01 5.73707225e-01 5.80346789e-01 5.87062542e-01 5.93855339e-01 + 6.00726049e-01 6.07675547e-01 6.14704719e-01 6.21814461e-01 6.29005677e-01 + 6.36279282e-01 6.43636201e-01 6.51077366e-01 6.58603723e-01 6.66216226e-01 + 6.73915839e-01 6.81703537e-01 6.89580304e-01 6.97547137e-01 7.05605040e-01 + 7.13755031e-01 7.21998138e-01 7.30335397e-01 7.38767858e-01 7.47296582e-01 + 7.55922638e-01 7.64647111e-01 7.73471093e-01 7.82395690e-01 7.91422019e-01 + 8.00551207e-01 8.09784394e-01 8.19122734e-01 8.28567388e-01 8.38119534e-01 + 8.47780359e-01 8.57551064e-01 8.67432860e-01 8.77426973e-01 8.87534640e-01 + 8.97757111e-01 9.08095650e-01 9.18551533e-01 9.29126046e-01 9.39820494e-01 + 9.50636190e-01 9.61574463e-01 9.72636655e-01 9.83824120e-01 9.95138227e-01 + 1.00658036e+00 1.01815191e+00 1.02985430e+00 1.04168894e+00 1.05365727e+00 + 1.06576075e+00 1.07800084e+00 1.09037902e+00 1.10289680e+00 1.11555567e+00 + 1.12835717e+00 1.14130283e+00 1.15439422e+00 1.16763289e+00 1.18102044e+00 + 1.19455846e+00 1.20824858e+00 1.22209242e+00 1.23609162e+00 1.25024786e+00 + 1.26456280e+00 1.27903815e+00 1.29367562e+00 1.30847692e+00 1.32344380e+00 + 1.33857802e+00 1.35388135e+00 1.36935559e+00 1.38500254e+00 1.40082403e+00 + 1.41682189e+00 1.43299799e+00 1.44935419e+00 1.46589240e+00 1.48261451e+00 + 1.49952245e+00 1.51661817e+00 1.53390362e+00 1.55138079e+00 1.56905166e+00 + 1.58691825e+00 1.60498258e+00 1.62324671e+00 1.64171270e+00 1.66038262e+00 + 1.67925859e+00 1.69834272e+00 1.71763713e+00 1.73714400e+00 1.75686548e+00 + 1.77680377e+00 1.79696108e+00 1.81733963e+00 1.83794166e+00 1.85876944e+00 + 1.87982524e+00 1.90111137e+00 1.92263014e+00 1.94438389e+00 1.96637497e+00 + 1.98860574e+00 2.01107861e+00 2.03379597e+00 2.05676026e+00 2.07997391e+00 + 2.10343939e+00 2.12715919e+00 2.15113579e+00 2.17537172e+00 2.19986952e+00 + 2.22463173e+00 2.24966092e+00 2.27495969e+00 2.30053064e+00 2.32637640e+00 + 2.35249962e+00 2.37890294e+00 2.40558905e+00 2.43256065e+00 2.45982045e+00 + 2.48737117e+00 2.51521557e+00 2.54335641e+00 2.57179648e+00 2.60053857e+00 + 2.62958549e+00 2.65894009e+00 2.68860520e+00 2.71858370e+00 2.74887845e+00 + 2.77949237e+00 2.81042835e+00 2.84168934e+00 2.87327827e+00 2.90519809e+00 + 2.93745179e+00 2.97004235e+00 3.00297276e+00 3.03624605e+00 3.06986525e+00 + 3.10383339e+00 3.13815354e+00 3.17282876e+00 3.20786213e+00 3.24325674e+00 + 3.27901571e+00 3.31514214e+00 3.35163917e+00 3.38850993e+00 3.42575757e+00 + 3.46338525e+00 3.50139614e+00 3.53979341e+00 3.57858025e+00 3.61775985e+00 + 3.65733542e+00 3.69731016e+00 3.73768729e+00 3.77847002e+00 3.81966159e+00 + 3.86126523e+00 3.90328416e+00 3.94572164e+00 3.98858089e+00 4.03186518e+00 + 4.07557773e+00 4.11972181e+00 4.16430066e+00 4.20931753e+00 4.25477566e+00 + 4.30067831e+00 4.34702870e+00 4.39383010e+00 4.44108572e+00 4.48879881e+00 + 4.53697258e+00 4.58561026e+00 4.63471506e+00 4.68429018e+00 4.73433881e+00 + 4.78486415e+00 4.83586936e+00 4.88735761e+00 4.93933204e+00 4.99179578e+00 + 5.04475196e+00 5.09820369e+00 5.15215403e+00 5.20660607e+00 5.26156285e+00 + 5.31702739e+00 5.37300271e+00 5.42949179e+00 5.48649757e+00 5.54402301e+00 + 5.60207099e+00 5.66064441e+00 5.71974611e+00 5.77937891e+00 5.83954559e+00 + 5.90024891e+00 5.96149159e+00 6.02327631e+00 6.08560572e+00 6.14848241e+00 + 6.21190897e+00 6.27588790e+00 6.34042169e+00 6.40551278e+00 6.47116356e+00 + 6.53737636e+00 6.60415348e+00 6.67149715e+00 6.73940957e+00 6.80789285e+00 + 6.87694909e+00 6.94658030e+00 7.01678842e+00 7.08757537e+00 7.15894297e+00 + 7.23089300e+00 7.30342714e+00 7.37654704e+00 7.45025425e+00 7.52455027e+00 + 7.59943651e+00 7.67491431e+00 7.75098493e+00 7.82764955e+00 7.90490929e+00 + 7.98276514e+00 8.06121804e+00 8.14026884e+00 8.21991829e+00 8.30016706e+00 + 8.38101571e+00 8.46246472e+00 8.54451447e+00 8.62716524e+00 8.71041720e+00 + 8.79427042e+00 8.87872489e+00 8.96378046e+00 9.04943689e+00 9.13569381e+00 + 9.22255077e+00 9.31000717e+00 9.39806232e+00 9.48671539e+00 9.57596544e+00 + 9.66581142e+00 9.75625214e+00 9.84728628e+00 9.93891240e+00 1.00311289e+01 + 1.01239342e+01 1.02173263e+01 1.03113033e+01 1.04058631e+01 1.05010035e+01 + 1.05967220e+01 1.06930162e+01 1.07898833e+01 1.08873205e+01 1.09853250e+01 + 1.10838934e+01 1.11830227e+01 1.12827094e+01 1.13829499e+01 1.14837404e+01 + 1.15850772e+01 1.16869562e+01 1.17893732e+01 1.18923238e+01 1.19958035e+01 + 1.20998077e+01 1.22043314e+01 1.23093699e+01 1.24149177e+01 1.25209698e+01 + 1.26275204e+01 1.27345640e+01 1.28420948e+01 1.29501068e+01 1.30585938e+01 + 1.31675494e+01 1.32769672e+01 1.33868405e+01 1.34971625e+01 1.36079262e+01 + 1.37191244e+01 1.38307497e+01 1.39427946e+01 1.40552516e+01 1.41681126e+01 + 1.42813698e+01 1.43950148e+01 1.45090394e+01 1.46234351e+01 1.47381932e+01 + 1.48533048e+01 1.49687609e+01 1.50845524e+01 1.52006699e+01 1.53171040e+01 + 1.54338449e+01 1.55508829e+01 1.56682081e+01 1.57858103e+01 1.59036792e+01 + 1.60218045e+01 1.61401756e+01 1.62587818e+01 1.63776122e+01 1.64966559e+01 + 1.66159016e+01 1.67353383e+01 1.68549545e+01 1.69747385e+01 1.70946789e+01 + 1.72147639e+01 1.73349814e+01 1.74553195e+01 1.75757662e+01 1.76963091e+01 + 1.78169358e+01 1.79376340e+01 1.80583911e+01 1.81791944e+01 1.83000312e+01 + 1.84208886e+01 1.85417538e+01 1.86626136e+01 1.87834551e+01 1.89042651e+01 + 1.90250303e+01 1.91457375e+01 1.92663733e+01 1.93869243e+01 1.95073771e+01 + 1.96277181e+01 1.97479338e+01 1.98680106e+01 1.99879349e+01 2.01076930e+01 + 2.02272714e+01 2.03466562e+01 2.04658338e+01 2.05847906e+01 2.07035127e+01 + 2.08219864e+01 2.09401981e+01 2.10581341e+01 2.11757807e+01 2.12931242e+01 + 2.14101510e+01 2.15268475e+01 2.16432002e+01 2.17591956e+01 2.18748201e+01 + 2.19900603e+01 2.21049030e+01 2.22193347e+01 2.23333424e+01 2.24469127e+01 + 2.25600327e+01 2.26726893e+01 2.27848696e+01 2.28965608e+01 2.30077502e+01 + 2.31184251e+01 2.32285731e+01 2.33381817e+01 2.34472387e+01 2.35557318e+01 + 2.36636490e+01 2.37709785e+01 2.38777084e+01 2.39838270e+01 2.40893229e+01 + 2.41941847e+01 2.42984012e+01 2.44019613e+01 2.45048542e+01 2.46070690e+01 + 2.47085951e+01 2.48094223e+01 2.49095401e+01 2.50089387e+01 2.51076079e+01 + 2.52055383e+01 2.53027201e+01 2.53991441e+01 2.54948011e+01 2.55896821e+01 + 2.56837784e+01 2.57770813e+01 2.58695826e+01 2.59612740e+01 2.60521475e+01 + 2.61421953e+01 2.62314100e+01 2.63197840e+01 2.64073104e+01 2.64939820e+01 + 2.65797922e+01 2.66647345e+01 2.67488026e+01 2.68319902e+01 2.69142917e+01 + 2.69957012e+01 2.70762134e+01 2.71558231e+01 2.72345251e+01 2.73123147e+01 + 2.73891873e+01 2.74651386e+01 2.75401644e+01 2.76142607e+01 2.76874239e+01 + 2.77596504e+01 2.78309370e+01 2.79012805e+01 2.79706782e+01 2.80391273e+01 + 2.81066254e+01 2.81731704e+01 2.82387601e+01 2.83033927e+01 2.83670667e+01 + 2.84297807e+01 2.84915333e+01 2.85523238e+01 2.86121511e+01 2.86710148e+01 + 2.87289145e+01 2.87858498e+01 2.88418209e+01 2.88968278e+01 2.89508709e+01 + 2.90039508e+01 2.90560681e+01 2.91072238e+01 2.91574190e+01 2.92066549e+01 + 2.92549329e+01 2.93022546e+01 2.93486219e+01 2.93940365e+01 2.94385007e+01 + 2.94820167e+01 2.95245868e+01 2.95662136e+01 2.96068999e+01 2.96466484e+01 + 2.96854623e+01 2.97233446e+01 2.97602986e+01 2.97963278e+01 2.98314357e+01 + 2.98656260e+01 2.98989025e+01 2.99312691e+01 2.99627299e+01 2.99932890e+01 + 3.00229508e+01 3.00517197e+01 3.00796001e+01 3.01065967e+01 3.01327141e+01 + 3.01579573e+01 3.01823311e+01 3.02058406e+01 3.02284907e+01 3.02502868e+01 + 3.02712341e+01 3.02913379e+01 3.03106037e+01 3.03290370e+01 3.03466434e+01 + 3.03634285e+01 3.03793980e+01 3.03945578e+01 3.04089136e+01 3.04224715e+01 + 3.04352373e+01 3.04472170e+01 3.04584168e+01 3.04688428e+01 3.04785011e+01 + 3.04873979e+01 3.04955395e+01 3.05029321e+01 3.05095822e+01 3.05154960e+01 + 3.05206800e+01 3.05251405e+01 3.05288840e+01 3.05319170e+01 3.05342459e+01 + 3.05358773e+01 3.05368177e+01 3.05370737e+01 3.05366518e+01 3.05355586e+01 + 3.05338006e+01 3.05313844e+01 3.05283167e+01 3.05246041e+01 3.05202531e+01 + 3.05152703e+01 3.05096624e+01 3.05034359e+01 3.04965974e+01 3.04891535e+01 + 3.04811109e+01 3.04724759e+01 3.04632553e+01 3.04534556e+01 3.04430832e+01 + 3.04321448e+01 3.04206467e+01 3.04085955e+01 3.03959977e+01 3.03828596e+01 + 3.03691878e+01 3.03549885e+01 3.03402682e+01 3.03250332e+01 3.03092899e+01 + 3.02930445e+01 3.02763032e+01 3.02590725e+01 3.02413583e+01 3.02231670e+01 + 3.02045046e+01 3.01853773e+01 3.01657911e+01 3.01457522e+01 3.01252664e+01 + 3.01043398e+01 3.00829783e+01 3.00611878e+01 3.00389742e+01 3.00163433e+01 + 2.99933008e+01 2.99698526e+01 2.99460043e+01 2.99217616e+01 2.98971302e+01 + 2.98721155e+01 2.98467232e+01 2.98209588e+01 2.97948277e+01 2.97683353e+01 + 2.97414870e+01 2.97142882e+01 2.96867441e+01 2.96588599e+01 2.96306410e+01 + 2.96020923e+01 2.95732191e+01 2.95440265e+01 2.95145193e+01 2.94847027e+01 + 2.94545815e+01 2.94241606e+01 2.93934449e+01 2.93624392e+01 2.93311482e+01 + 2.92995767e+01 2.92677292e+01 2.92356105e+01 2.92032251e+01 2.91705775e+01 + 2.91376723e+01 2.91045137e+01 2.90711064e+01 2.90374545e+01 2.90035624e+01 + 2.89694344e+01 2.89350746e+01 2.89004873e+01 2.88656766e+01 2.88306465e+01 + 2.87954011e+01 2.87599444e+01 2.87242804e+01 2.86884129e+01 2.86523458e+01 + 2.86160830e+01 2.85796281e+01 2.85429851e+01 2.85061574e+01 2.84691489e+01 + 2.84319631e+01 2.83946035e+01 2.83570738e+01 2.83193774e+01 2.82815177e+01 + 2.82434981e+01 2.82053220e+01 2.81669928e+01 2.81285137e+01 2.80898879e+01 + 2.80511187e+01 2.80122092e+01 2.79731625e+01 2.79339818e+01 2.78946701e+01 + 2.78552303e+01 2.78156656e+01 2.77759787e+01 2.77361727e+01 2.76962503e+01 + 2.76562144e+01 2.76160678e+01 2.75758133e+01 2.75354535e+01 2.74949912e+01 + 2.74544289e+01 2.74137694e+01 2.73730151e+01 2.73321687e+01 2.72912326e+01 + 2.72502094e+01 2.72091014e+01 2.71679111e+01 2.71266408e+01 2.70852930e+01 + 2.70438699e+01 2.70023738e+01 2.69608070e+01 2.69191717e+01 2.68774700e+01 + 2.68357042e+01 2.67938764e+01 2.67519887e+01 2.67100431e+01 2.66680417e+01 + 2.66259866e+01 2.65838796e+01 2.65417228e+01 2.64995182e+01 2.64572675e+01 + 2.64149727e+01 2.63726356e+01 2.63302581e+01 2.62878419e+01 2.62453889e+01 + 2.62029007e+01 2.61603792e+01 2.61178259e+01 2.60752425e+01 2.60326308e+01 + 2.59899923e+01 2.59473287e+01 2.59046414e+01 2.58619321e+01 2.58192022e+01 + 2.57764534e+01 2.57336870e+01 2.56909045e+01 2.56481074e+01 2.56052971e+01 + 2.55624750e+01 2.55196424e+01 2.54768007e+01 2.54339513e+01 2.53910954e+01 + 2.53482344e+01 2.53053694e+01 2.52625019e+01 2.52196329e+01 2.51767637e+01 + 2.51338956e+01 2.50910296e+01 2.50481669e+01 2.50053088e+01 2.49624562e+01 + 2.49196103e+01 2.48767722e+01 2.48339430e+01 2.47911236e+01 2.47483152e+01 + 2.47055188e+01 2.46627353e+01 2.46199657e+01 2.45772111e+01 2.45344723e+01 + 2.44917503e+01 2.44490460e+01 2.44063604e+01 2.43636943e+01 2.43210485e+01 + 2.42784241e+01 2.42358217e+01 2.41932423e+01 2.41506866e+01 2.41081555e+01 + 2.40656497e+01 2.40231701e+01 2.39807174e+01 2.39382923e+01 2.38958957e+01 + 2.38535281e+01 2.38111904e+01 2.37688832e+01 2.37266073e+01 2.36843632e+01 + 2.36421517e+01 2.35999735e+01 2.35578291e+01 2.35157192e+01 2.34736444e+01 + 2.34316053e+01 2.33896025e+01 2.33476367e+01 2.33057084e+01 2.32638180e+01 + 2.32219664e+01 2.31801538e+01 2.31383810e+01 2.30966483e+01 2.30549564e+01 + 2.30133057e+01 2.29716968e+01 2.29301300e+01 2.28886060e+01 2.28471252e+01 + 2.28056879e+01 2.27642948e+01 2.27229461e+01 2.26816425e+01 2.26403842e+01 + 2.25991717e+01 2.25580054e+01 2.25168857e+01 2.24758130e+01 2.24347878e+01 + 2.23938102e+01 2.23528809e+01 2.23120000e+01 2.22711680e+01 2.22303851e+01 + 2.21896519e+01 2.21489685e+01 2.21083353e+01 2.20677526e+01 2.20272208e+01 + 2.19867401e+01 2.19463109e+01 2.19059334e+01 2.18656079e+01 2.18253348e+01 + 2.17851142e+01 2.17449465e+01 2.17048318e+01 2.16647706e+01 2.16247630e+01 + 2.15848092e+01 2.15449096e+01 2.15050643e+01 2.14652736e+01 2.14255376e+01 + 2.13858567e+01 2.13462310e+01 2.13066607e+01 2.12671461e+01 2.12276873e+01 + 2.11882845e+01 2.11489380e+01 2.11096478e+01 2.10704142e+01 2.10312374e+01 + 2.09921175e+01 2.09530546e+01 2.09140491e+01 2.08751009e+01 2.08362102e+01 + 2.07973773e+01 2.07586022e+01 2.07198851e+01 2.06812261e+01 2.06426254e+01 + 2.06040830e+01 2.05655991e+01 2.05271739e+01 2.04888074e+01 2.04504997e+01 + 2.04122511e+01 2.03740614e+01 2.03359310e+01 2.02978598e+01 2.02598479e+01 + 2.02218956e+01 2.01840027e+01 2.01461695e+01 2.01083960e+01 2.00706823e+01 + 2.00330285e+01 1.99954346e+01 1.99579007e+01 1.99204268e+01 1.98830132e+01 + 1.98456597e+01 1.98083665e+01 1.97711336e+01 1.97339610e+01 1.96968489e+01 + 1.96597973e+01 1.96228062e+01 1.95858756e+01 1.95490056e+01 1.95121963e+01 + 1.94754476e+01 1.94387597e+01 1.94021325e+01 1.93655660e+01 1.93290604e+01 + 1.92926155e+01 1.92562315e+01 1.92199084e+01 1.91836461e+01 1.91474447e+01 + 1.91113042e+01 1.90752247e+01 1.90392061e+01 1.90032484e+01 1.89673516e+01 + 1.89315158e+01 1.88957410e+01 1.88600271e+01 1.88243741e+01 1.87887821e+01 + 1.87532511e+01 1.87177809e+01 1.86823717e+01 1.86470234e+01 1.86117360e+01 + 1.85765095e+01 1.85413439e+01 1.85062392e+01 1.84711952e+01 1.84362122e+01 + 1.84012899e+01 1.83664284e+01 1.83316276e+01 1.82968876e+01 1.82622083e+01 + 1.82275897e+01 1.81930318e+01 1.81585344e+01 1.81240977e+01 1.80897215e+01 + 1.80554058e+01 1.80211507e+01 1.79869560e+01 1.79528217e+01 1.79187478e+01 + 1.78847342e+01 1.78507810e+01 1.78168880e+01 1.77830552e+01 1.77492826e+01 + 1.77155701e+01 1.76819177e+01 1.76483254e+01 1.76147930e+01 1.75813206e+01 + 1.75479081e+01 1.75145554e+01 1.74812625e+01 1.74480294e+01 1.74148559e+01 + 1.73817421e+01 1.73486879e+01 1.73156931e+01 1.72827579e+01 1.72498821e+01 + 1.72170656e+01 1.71843084e+01 1.71516105e+01 1.71189717e+01 1.70863920e+01 + 1.70538715e+01 1.70214099e+01 1.69890072e+01 1.69566634e+01 1.69243784e+01 + 1.68921522e+01 1.68599846e+01 1.68278756e+01 1.67958252e+01 1.67638333e+01 + 1.67318997e+01 1.67000245e+01 1.66682076e+01 1.66364489e+01 1.66047483e+01 + 1.65731058e+01 1.65415213e+01 1.65099947e+01 1.64785260e+01 1.64471150e+01 + 1.64157618e+01 1.63844662e+01 1.63532281e+01 1.63220476e+01 1.62909244e+01 + 1.62598586e+01 1.62288501e+01 1.61978987e+01 1.61670045e+01 1.61361673e+01 + 1.61053871e+01 1.60746637e+01 1.60439972e+01 1.60133874e+01 1.59828342e+01 + 1.59523377e+01 1.59218976e+01 1.58915139e+01 1.58611866e+01 1.58309155e+01 + 1.58007007e+01 1.57705419e+01 1.57404391e+01 1.57103923e+01 1.56804013e+01 + 1.56504661e+01 1.56205866e+01 1.55907628e+01 1.55609944e+01 1.55312816e+01 + 1.55016240e+01 1.54720218e+01 1.54424748e+01 1.54129829e+01 1.53835460e+01 + 1.53541641e+01 1.53248371e+01 1.52955649e+01 1.52663473e+01 1.52371844e+01 + 1.52080761e+01 1.51790222e+01 1.51500226e+01 1.51210774e+01 1.50921863e+01 + 1.50633494e+01 1.50345665e+01 1.50058375e+01 1.49771624e+01 1.49485411e+01 + 1.49199735e+01 1.48914595e+01 1.48629990e+01 1.48345920e+01 1.48062382e+01 + 1.47779378e+01 1.47496905e+01 1.47214964e+01 1.46933552e+01 1.46652670e+01 + 1.46372316e+01 1.46092489e+01 1.45813189e+01 1.45534415e+01 1.45256166e+01 + 1.44978440e+01 1.44701238e+01 1.44424559e+01 1.44148400e+01 1.43872762e+01 + 1.43597644e+01 1.43323045e+01 1.43048964e+01 1.42775400e+01 1.42502352e+01 + 1.42229819e+01 1.41957801e+01 1.41686296e+01 1.41415305e+01 1.41144825e+01 + 1.40874856e+01 1.40605397e+01 1.40336448e+01 1.40068007e+01 1.39800074e+01 + 1.39532647e+01 1.39265726e+01 1.38999310e+01 1.38733398e+01 1.38467989e+01 + 1.38203083e+01 1.37938678e+01 1.37674774e+01 1.37411369e+01 1.37148464e+01 + 1.36886056e+01 1.36624145e+01 1.36362731e+01 1.36101812e+01 1.35841388e+01 + 1.35581457e+01 1.35322019e+01 1.35063073e+01 1.34804618e+01 1.34546654e+01 + 1.34289178e+01 1.34032192e+01 1.33775692e+01 1.33519680e+01 1.33264153e+01 + 1.33009112e+01 1.32754555e+01 1.32500481e+01 1.32246889e+01 1.31993779e+01 + 1.31741150e+01 1.31489001e+01 1.31237331e+01 1.30986139e+01 1.30735424e+01 + 1.30485186e+01 1.30235423e+01 1.29986135e+01 1.29737321e+01 1.29488980e+01 + 1.29241112e+01 1.28993714e+01 1.28746788e+01 1.28500330e+01 1.28254342e+01 + 1.28008822e+01 1.27763769e+01 1.27519182e+01 1.27275060e+01 1.27031403e+01 + 1.26788210e+01 1.26545480e+01 1.26303212e+01 1.26061405e+01 1.25820059e+01 + 1.25579172e+01 1.25338743e+01 1.25098773e+01 1.24859260e+01 1.24620203e+01 + 1.24381601e+01 1.24143454e+01 1.23905761e+01 1.23668520e+01 1.23431732e+01 + 1.23195394e+01 1.22959508e+01 1.22724070e+01 1.22489082e+01 1.22254541e+01 + 1.22020448e+01 1.21786801e+01 1.21553599e+01 1.21320842e+01 1.21088529e+01 + 1.20856658e+01 1.20625230e+01 1.20394244e+01 1.20163698e+01 1.19933591e+01 + 1.19703924e+01 1.19474695e+01 1.19245903e+01 1.19017547e+01 1.18789628e+01 + 1.18562143e+01 1.18335092e+01 1.18108474e+01 1.17882289e+01 1.17656536e+01 + 1.17431214e+01 1.17206321e+01 1.16981858e+01 1.16757823e+01 1.16534217e+01 + 1.16311036e+01 1.16088283e+01 1.15865954e+01 1.15644050e+01 1.15422569e+01 + 1.15201512e+01 1.14980876e+01 1.14760662e+01 1.14540869e+01 1.14321495e+01 + 1.14102540e+01 1.13884004e+01 1.13665885e+01 1.13448182e+01 1.13230896e+01 + 1.13014025e+01 1.12797567e+01 1.12581524e+01 1.12365893e+01 1.12150674e+01 + 1.11935867e+01 1.11721470e+01 1.11507482e+01 1.11293904e+01 1.11080733e+01 + 1.10867970e+01 1.10655614e+01 1.10443663e+01 1.10232118e+01 1.10020977e+01 + 1.09810239e+01 1.09599905e+01 1.09389972e+01 1.09180441e+01 1.08971310e+01 + 1.08762579e+01 1.08554247e+01 1.08346313e+01 1.08138777e+01 1.07931638e+01 + 1.07724894e+01 1.07518546e+01 1.07312593e+01 1.07107033e+01 1.06901867e+01 + 1.06697093e+01 1.06492710e+01 1.06288718e+01 1.06085117e+01 1.05881904e+01 + 1.05679081e+01 1.05476645e+01 1.05274596e+01 1.05072934e+01 1.04871658e+01 + 1.04670766e+01 1.04470259e+01 1.04270135e+01 1.04070395e+01 1.03871036e+01 + 1.03672058e+01 1.03473462e+01 1.03275245e+01 1.03077407e+01 1.02879948e+01 + 1.02682866e+01 1.02486162e+01 1.02289834e+01 1.02093882e+01 1.01898304e+01 + 1.01703101e+01 1.01508271e+01 1.01313814e+01 1.01119729e+01 1.00926016e+01 + 1.00732673e+01 1.00539700e+01 1.00347096e+01 1.00154861e+01 9.99629938e+00 + 9.97714938e+00 9.95803602e+00 9.93895924e+00 9.91991896e+00 9.90091513e+00 + 9.88194766e+00 9.86301650e+00 9.84412157e+00 9.82526280e+00 9.80644012e+00 + 9.78765347e+00 9.76890278e+00 9.75018798e+00 9.73150899e+00 9.71286576e+00 + 9.69425822e+00 9.67568629e+00 9.65714991e+00 9.63864901e+00 9.62018353e+00 + 9.60175339e+00 9.58335854e+00 9.56499889e+00 9.54667439e+00 9.52838497e+00 + 9.51013056e+00 9.49191110e+00 9.47372652e+00 9.45557675e+00 9.43746172e+00 + 9.41938137e+00 9.40133564e+00 9.38332446e+00 9.36534776e+00 9.34740547e+00 + 9.32949754e+00 9.31162389e+00 9.29378447e+00 9.27597920e+00 9.25820801e+00 + 9.24047086e+00 9.22276766e+00 9.20509836e+00 9.18746289e+00 9.16986119e+00 + 9.15229319e+00 9.13475883e+00 9.11725804e+00 9.09979077e+00 9.08235693e+00 + 9.06495649e+00 9.04758936e+00 9.03025548e+00 9.01295480e+00 8.99568724e+00 + 8.97845276e+00 8.96125127e+00 8.94408272e+00 8.92694705e+00 8.90984419e+00 + 8.89277409e+00 8.87573667e+00 8.85873188e+00 8.84175965e+00 8.82481993e+00 + 8.80791264e+00 8.79103774e+00 8.77419515e+00 8.75738481e+00 8.74060667e+00 + 8.72386066e+00 8.70714672e+00 8.69046479e+00 8.67381480e+00 8.65719671e+00 + 8.64061044e+00 8.62405593e+00 8.60753313e+00 8.59104198e+00 8.57458240e+00 + 8.55815435e+00 8.54175777e+00 8.52539259e+00 8.50905875e+00 8.49275619e+00 + 8.47648486e+00 8.46024469e+00 8.44403563e+00 8.42785761e+00 8.41171057e+00 + 8.39559447e+00 8.37950923e+00 8.36345479e+00 8.34743111e+00 8.33143812e+00 + 8.31547576e+00 8.29954398e+00 8.28364271e+00 8.26777190e+00 8.25193148e+00 + 8.23612141e+00 8.22034162e+00 8.20459205e+00 8.18887265e+00 8.17318336e+00 + 8.15752412e+00 8.14189488e+00 8.12629557e+00 8.11072614e+00 8.09518654e+00 + 8.07967670e+00 8.06419657e+00 8.04874609e+00 8.03332521e+00 8.01793386e+00 + 8.00257200e+00 7.98723957e+00 7.97193650e+00 7.95666274e+00 7.94141825e+00 + 7.92620295e+00 7.91101680e+00 7.89585974e+00 7.88073172e+00 7.86563267e+00 + 7.85056255e+00 7.83552129e+00 7.82050885e+00 7.80552516e+00 7.79057018e+00 + 7.77564385e+00 7.76074610e+00 7.74587690e+00 7.73103618e+00 7.71622389e+00 + 7.70143997e+00 7.68668438e+00 7.67195705e+00 7.65725793e+00 7.64258697e+00 + 7.62794411e+00 7.61332931e+00 7.59874250e+00 7.58418364e+00 7.56965266e+00 + 7.55514952e+00 7.54067417e+00 7.52622655e+00 7.51180660e+00 7.49741427e+00 + 7.48304952e+00 7.46871229e+00 7.45440252e+00 7.44012017e+00 7.42586517e+00 + 7.41163749e+00 7.39743706e+00 7.38326383e+00 7.36911776e+00 7.35499879e+00 + 7.34090686e+00 7.32684193e+00 7.31280395e+00 7.29879286e+00 7.28480861e+00 + 7.27085115e+00 7.25692043e+00 7.24301640e+00 7.22913900e+00 7.21528819e+00 + 7.20146392e+00 7.18766613e+00 7.17389477e+00 7.16014979e+00 7.14643115e+00 + 7.13273879e+00 7.11907266e+00 7.10543272e+00 7.09181890e+00 7.07823116e+00 + 7.06466946e+00 7.05113374e+00 7.03762395e+00 7.02414004e+00 7.01068196e+00 + 6.99724967e+00 6.98384311e+00 6.97046224e+00 6.95710700e+00 6.94377734e+00 + 6.93047323e+00 6.91719460e+00 6.90394141e+00 6.89071361e+00 6.87751116e+00 + 6.86433400e+00 6.85118208e+00 6.83805536e+00 6.82495379e+00 6.81187732e+00 + 6.79882590e+00 6.78579949e+00 6.77279803e+00 6.75982148e+00 6.74686980e+00 + 6.73394292e+00 6.72104082e+00 6.70816343e+00 6.69531071e+00 6.68248262e+00 + 6.66967910e+00 6.65690011e+00 6.64414561e+00 6.63141554e+00 6.61870986e+00 + 6.60602853e+00 6.59337149e+00 6.58073869e+00 6.56813011e+00 6.55554567e+00 + 6.54298535e+00 6.53044909e+00 6.51793685e+00 6.50544859e+00 6.49298424e+00 + 6.48054378e+00 6.46812716e+00 6.45573432e+00 6.44336522e+00 6.43101983e+00 + 6.41869808e+00 6.40639995e+00 6.39412537e+00 6.38187431e+00 6.36964673e+00 + 6.35744257e+00 6.34526179e+00 6.33310435e+00 6.32097020e+00 6.30885930e+00 + 6.29677160e+00 6.28470707e+00 6.27266564e+00 6.26064729e+00 6.24865196e+00 + 6.23667962e+00 6.22473021e+00 6.21280370e+00 6.20090004e+00 6.18901918e+00 + 6.17716109e+00 6.16532571e+00 6.15351301e+00 6.14172295e+00 6.12995547e+00 + 6.11821054e+00 6.10648811e+00 6.09478814e+00 6.08311058e+00 6.07145165e+00 + 6.05974338e+00 6.04796088e+00 6.03610468e+00 6.02417530e+00 6.01217326e+00 + 6.00009907e+00 5.98795327e+00 5.97573636e+00 5.96344889e+00 5.95109137e+00 + 5.93866433e+00 5.92616829e+00 5.91360379e+00 5.90097135e+00 5.88827149e+00 + 5.87550476e+00 5.86267167e+00 5.84977277e+00 5.83680857e+00 5.82377962e+00 + 5.81068645e+00 5.79752958e+00 5.78430956e+00 5.77102692e+00 5.75768219e+00 + 5.74427591e+00 5.73080862e+00 5.71728085e+00 5.70369313e+00 5.69004601e+00 + 5.67634003e+00 5.66257572e+00 5.64875361e+00 5.63487426e+00 5.62093820e+00 + 5.60694596e+00 5.59289809e+00 5.57879513e+00 5.56463761e+00 5.55042608e+00 + 5.53616108e+00 5.52184315e+00 5.50747283e+00 5.49305067e+00 5.47857719e+00 + 5.46405294e+00 5.44947847e+00 5.43485432e+00 5.42018102e+00 5.40545912e+00 + 5.39068917e+00 5.37587169e+00 5.36100723e+00 5.34609634e+00 5.33113955e+00 + 5.31613741e+00 5.30109045e+00 5.28599922e+00 5.27086425e+00 5.25568610e+00 + 5.24046529e+00 5.22520236e+00 5.20989787e+00 5.19455234e+00 5.17916631e+00 + 5.16374033e+00 5.14827493e+00 5.13277065e+00 5.11722803e+00 5.10164761e+00 + 5.08602991e+00 5.07037549e+00 5.05468487e+00 5.03895859e+00 5.02319718e+00 + 5.00740119e+00 4.99157113e+00 4.97570756e+00 4.95981100e+00 4.94388198e+00 + 4.92792103e+00 4.91192870e+00 4.89590550e+00 4.87985196e+00 4.86376863e+00 + 4.84765602e+00 4.83151466e+00 4.81534508e+00 4.79914782e+00 4.78292338e+00 + 4.76667231e+00 4.75039512e+00 4.73409233e+00 4.71776448e+00 4.70141208e+00 + 4.68503565e+00 4.66863572e+00 4.65221280e+00 4.63576741e+00 4.61930007e+00 + 4.60281130e+00 4.58630161e+00 4.56977152e+00 4.55322154e+00 4.53665219e+00 + 4.52006398e+00 4.50345741e+00 4.48683300e+00 4.47019126e+00 4.45353270e+00 + 4.43685781e+00 4.42016712e+00 4.40346112e+00 4.38674032e+00 4.37000522e+00 + 4.35325631e+00 4.33649412e+00 4.31971912e+00 4.30293182e+00 4.28613271e+00 + 4.26932230e+00 4.25250108e+00 4.23566953e+00 4.21882815e+00 4.20197744e+00 + 4.18511788e+00 4.16824996e+00 4.15137416e+00 4.13449098e+00 4.11760089e+00 + 4.10070438e+00 4.08380193e+00 4.06689403e+00 4.04998114e+00 4.03306375e+00 + 4.01614234e+00 3.99921737e+00 3.98228932e+00 3.96535867e+00 3.94842588e+00 + 3.93149143e+00 3.91455578e+00 3.89761939e+00 3.88068273e+00 3.86374627e+00 + 3.84681046e+00 3.82987577e+00 3.81294265e+00 3.79601156e+00 3.77908296e+00 + 3.76215730e+00 3.74523503e+00 3.72831661e+00 3.71140247e+00 3.69449308e+00 + 3.67758887e+00 3.66069030e+00 3.64379779e+00 3.62691180e+00 3.61003276e+00 + 3.59316111e+00 3.57629729e+00 3.55944172e+00 3.54259485e+00 3.52575711e+00 + 3.50892892e+00 3.49211070e+00 3.47530290e+00 3.45850592e+00 3.44172019e+00 + 3.42494614e+00 3.40818418e+00 3.39143473e+00 3.37469820e+00 3.35797501e+00 + 3.34126556e+00 3.32457027e+00 3.30788955e+00 3.29122380e+00 3.27457343e+00 + 3.25793884e+00 3.24132042e+00 3.22471858e+00 3.20813372e+00 3.19156622e+00 + 3.17501649e+00 3.15848491e+00 3.14197187e+00 3.12547777e+00 3.10900298e+00 + 3.09254788e+00 3.07611287e+00 3.05969832e+00 3.04330461e+00 3.02693211e+00 + 3.01058120e+00 2.99425225e+00 2.97794563e+00 2.96166171e+00 2.94540085e+00 + 2.92916342e+00 2.91294978e+00 2.89676028e+00 2.88059530e+00 2.86445518e+00 + 2.84834028e+00 2.83225095e+00 2.81618754e+00 2.80015040e+00 2.78413987e+00 + 2.76815630e+00 2.75220003e+00 2.73627139e+00 2.72037074e+00 2.70449840e+00 + 2.68865471e+00 2.67283999e+00 2.65705459e+00 2.64129882e+00 2.62557301e+00 + 2.60987749e+00 2.59421257e+00 2.57857857e+00 2.56297582e+00 2.54740463e+00 + 2.53186530e+00 2.51635816e+00 2.50088350e+00 2.48544165e+00 2.47003289e+00 + 2.45465753e+00 2.43931588e+00 2.42400823e+00 2.40873488e+00 2.39349611e+00 + 2.37829223e+00 2.36312353e+00 2.34799028e+00 2.33289278e+00 2.31783130e+00 + 2.30280614e+00 2.28781756e+00 2.27286585e+00 2.25795128e+00 2.24307412e+00 + 2.22823464e+00 2.21343311e+00 2.19866980e+00 2.18394497e+00 2.16925889e+00 + 2.15461180e+00 2.14000397e+00 2.12543566e+00 2.11090712e+00 2.09641859e+00 + 2.08197033e+00 2.06756258e+00 2.05319559e+00 2.03886960e+00 2.02458485e+00 + 2.01034158e+00 1.99614002e+00 1.98198041e+00 1.96786297e+00 1.95378795e+00 + 1.93975556e+00 1.92576602e+00 1.91181957e+00 1.89791642e+00 1.88405680e+00 + 1.87024091e+00 1.85646897e+00 1.84274119e+00 1.82905778e+00 1.81541896e+00 + 1.80182492e+00 1.78827586e+00 1.77477200e+00 1.76131352e+00 1.74790063e+00 + 1.73453352e+00 1.72121237e+00 1.70793739e+00 1.69470876e+00 1.68152666e+00 + 1.66839128e+00 1.65530280e+00 1.64226140e+00 1.62926725e+00 1.61632054e+00 + 1.60342143e+00 1.59057009e+00 1.57776670e+00 1.56501142e+00 1.55230441e+00 + 1.53964583e+00 1.52703585e+00 1.51447463e+00 1.50196231e+00 1.48949906e+00 + 1.47708502e+00 1.46472034e+00 1.45240518e+00 1.44013967e+00 1.42792395e+00 + 1.41575818e+00 1.40364248e+00 1.39157700e+00 1.37956187e+00 1.36759721e+00 + 1.35568317e+00 1.34381987e+00 1.33200743e+00 1.32024598e+00 1.30853564e+00 + 1.29687653e+00 1.28526877e+00 1.27371247e+00 1.26220775e+00 1.25075472e+00 + 1.23935348e+00 1.22800415e+00 1.21670683e+00 1.20546162e+00 1.19426863e+00 + 1.18312795e+00 1.17203968e+00 1.16100391e+00 1.15002074e+00 1.13909026e+00 + 1.12821255e+00 1.11738771e+00 1.10661582e+00 1.09589696e+00 1.08523121e+00 + 1.07461865e+00 1.06405936e+00 1.05355341e+00 1.04310087e+00 1.03270182e+00 + 1.02235632e+00 1.01206445e+00 1.00182626e+00 9.91641811e-01 9.81511175e-01 + 9.71434406e-01 9.61411561e-01 9.51442695e-01 9.41527861e-01 9.31667110e-01 + 9.21860490e-01 9.12108049e-01 9.02409833e-01 8.92765883e-01 8.83176243e-01 + 8.73640950e-01 8.64160043e-01 8.54733558e-01 8.45361527e-01 8.36043983e-01 + 8.26780955e-01 8.17572473e-01 8.08418561e-01 7.99319245e-01 7.90274546e-01 + 7.81284486e-01 7.72349083e-01 7.63468354e-01 7.54642314e-01 7.45870976e-01 + 7.37154353e-01 7.28492452e-01 7.19885284e-01 7.11332852e-01 7.02835162e-01 + 6.94392216e-01 6.86004014e-01 6.77670556e-01 6.69391838e-01 6.61167856e-01 + 6.52998603e-01 6.44884072e-01 6.36824251e-01 6.28819131e-01 6.20868696e-01 + 6.12972932e-01 6.05131822e-01 5.97345348e-01 5.89613489e-01 5.81936223e-01 + 5.74313527e-01 5.66745375e-01 5.59231740e-01 5.51772594e-01 5.44367906e-01 + 5.37017644e-01 5.29721774e-01 5.22480262e-01 5.15293069e-01 5.08160159e-01 + 5.01081489e-01 4.94057020e-01 4.87086706e-01 4.80170504e-01 4.73308366e-01 + 4.66500245e-01 4.59746091e-01 4.53045851e-01 4.46399475e-01 4.39806906e-01 + 4.33268089e-01 4.26782967e-01 4.20351481e-01 4.13973569e-01 4.07649170e-01 + 4.01378220e-01 3.95160655e-01 3.88996407e-01 3.82885408e-01 3.76827589e-01 + 3.70822880e-01 3.64871206e-01 3.58972495e-01 3.53126672e-01 3.47333658e-01 + 3.41593377e-01 3.35905748e-01 3.30270691e-01 3.24688122e-01 3.19157958e-01 + 3.13680115e-01 3.08254504e-01 3.02881038e-01 2.97559628e-01 2.92290183e-01 + 2.87072611e-01 2.81906818e-01 2.76792711e-01 2.71730191e-01 2.66719163e-01 + 2.61759528e-01 2.56851184e-01 2.51994033e-01 2.47187969e-01 2.42432891e-01 + 2.37728692e-01 2.33075267e-01 2.28472507e-01 2.23920304e-01 2.19418548e-01 + 2.14967127e-01 2.10565929e-01 2.06214840e-01 2.01913745e-01 1.97662529e-01 + 1.93461073e-01 1.89309259e-01 1.85206967e-01 1.81154078e-01 1.77150468e-01 + 1.73196014e-01 1.69290593e-01 1.65434080e-01 1.61626346e-01 1.57867266e-01 + 1.54156710e-01 1.50494548e-01 1.46880650e-01 1.43314884e-01 1.39797116e-01 + 1.36327214e-01 1.32905040e-01 1.29530461e-01 1.26203337e-01 1.22923532e-01 + 1.19690905e-01 1.16505318e-01 1.13366628e-01 1.10274693e-01 1.07229370e-01 + 1.04230516e-01 1.01277984e-01 9.83716292e-02 9.55113045e-02 9.26968618e-02 + 8.99281522e-02 8.72050260e-02 8.45273325e-02 8.18949202e-02 7.93076365e-02 + 7.67653281e-02 7.42678408e-02 7.18150195e-02 6.94067082e-02 6.70427500e-02 + 6.47229875e-02 6.24472620e-02 6.02154142e-02 5.80272842e-02 5.58827108e-02 + 5.37815325e-02 5.17235866e-02 4.97087099e-02 4.77367383e-02 4.58075070e-02 + 4.39208503e-02 4.20766021e-02 4.02745951e-02 3.85146615e-02 3.67966330e-02 + 3.51203401e-02 3.34856129e-02 3.18922809e-02 3.03401727e-02 2.88291163e-02 + 2.73589389e-02 2.59294673e-02 2.45405275e-02 2.31919449e-02 2.18835440e-02 + 2.06151492e-02 1.93865837e-02 1.81976705e-02 1.70482319e-02 1.59380895e-02 + 1.48670644e-02 1.38349771e-02 1.28416476e-02 1.18868951e-02 1.09705385e-02 + 1.00923962e-02 9.25228574e-03 8.45002444e-03 7.68542897e-03 6.95831551e-03 + 6.26849972e-03 5.61579679e-03 5.00002140e-03 4.42098778e-03 3.87850967e-03 + 3.37240035e-03 2.90247264e-03 2.46853892e-03 2.07041115e-03 1.70790084e-03 + 1.38081907e-03 1.08897653e-03 8.32183493e-04 6.10249837e-04 4.22985050e-04 + 2.70198238e-04 1.51698135e-04 6.72931116e-05 1.67911789e-05 0.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 9.99979585e-01 9.99876811e-01 9.99687440e-01 9.99411505e-01 + 9.99049054e-01 9.98600150e-01 9.98064871e-01 9.97443309e-01 9.96735573e-01 + 9.95941783e-01 9.95062079e-01 9.94096613e-01 9.93045551e-01 9.91909077e-01 + 9.90687386e-01 9.89380690e-01 9.87989216e-01 9.86513205e-01 9.84952913e-01 + 9.83308609e-01 9.81580579e-01 9.79769122e-01 9.77874552e-01 9.75897197e-01 + 9.73837399e-01 9.71695516e-01 9.69471919e-01 9.67166992e-01 9.64781135e-01 + 9.62314761e-01 9.59768298e-01 9.57142187e-01 9.54436882e-01 9.51652852e-01 + 9.48790581e-01 9.45850562e-01 9.42833306e-01 9.39739336e-01 9.36569187e-01 + 9.33323409e-01 9.30002564e-01 9.26607226e-01 9.23137986e-01 9.19595442e-01 + 9.15980210e-01 9.12292915e-01 9.08534196e-01 9.04704704e-01 9.00805103e-01 + 8.96836069e-01 8.92798288e-01 8.88692460e-01 8.84519297e-01 8.80279522e-01 + 8.75973868e-01 8.71603083e-01 8.67167922e-01 8.62669155e-01 8.58107560e-01 + 8.53483929e-01 8.48799061e-01 8.44053769e-01 8.39248875e-01 8.34385211e-01 + 8.29463619e-01 8.24484952e-01 8.19450073e-01 8.14359853e-01 8.09215176e-01 + 8.04016931e-01 7.98766019e-01 7.93463351e-01 7.88109844e-01 7.82706427e-01 + 7.77254034e-01 7.71753611e-01 7.66206111e-01 7.60612494e-01 7.54973730e-01 + 7.49290796e-01 7.43564675e-01 7.37796360e-01 7.31986850e-01 7.26137152e-01 + 7.20248279e-01 7.14321251e-01 7.08357095e-01 7.02356844e-01 6.96321537e-01 + 6.90252221e-01 6.84149946e-01 6.78015770e-01 6.71850755e-01 6.65655970e-01 + 6.59432486e-01 6.53181384e-01 6.46903745e-01 6.40600657e-01 6.34273212e-01 + 6.27922506e-01 6.21549639e-01 6.15155716e-01 6.08741843e-01 6.02309133e-01 + 5.95858698e-01 5.89391658e-01 5.82909132e-01 5.76412243e-01 5.69902117e-01 + 5.63379881e-01 5.56846666e-01 5.50303602e-01 5.43751824e-01 5.37192467e-01 + 5.30626667e-01 5.24055561e-01 5.17480288e-01 5.10901987e-01 5.04321797e-01 + 4.97740858e-01 4.91160311e-01 4.84581295e-01 4.78004950e-01 4.71432416e-01 + 4.64864830e-01 4.58303331e-01 4.51749056e-01 4.45203139e-01 4.38666715e-01 + 4.32140916e-01 4.25626873e-01 4.19125714e-01 4.12638565e-01 4.06166550e-01 + 3.99710791e-01 3.93272405e-01 3.86852508e-01 3.80452213e-01 3.74072627e-01 + 3.67714857e-01 3.61380003e-01 3.55069163e-01 3.48783430e-01 3.42523893e-01 + 3.36291637e-01 3.30087741e-01 3.23913280e-01 3.17769323e-01 3.11656936e-01 + 3.05577176e-01 2.99531097e-01 2.93519746e-01 2.87544165e-01 2.81605389e-01 + 2.75704447e-01 2.69842361e-01 2.64020146e-01 2.58238812e-01 2.52499359e-01 + 2.46802782e-01 2.41150068e-01 2.35542196e-01 2.29980137e-01 2.24464856e-01 + 2.18997307e-01 2.13578438e-01 2.08209187e-01 2.02890485e-01 1.97623253e-01 + 1.92408404e-01 1.87246840e-01 1.82139456e-01 1.77087137e-01 1.72090758e-01 + 1.67151185e-01 1.62269273e-01 1.57445868e-01 1.52681806e-01 1.47977912e-01 + 1.43335000e-01 1.38753876e-01 1.34235332e-01 1.29780152e-01 1.25389107e-01 + 1.21062958e-01 1.16802455e-01 1.12608335e-01 1.08481325e-01 1.04422140e-01 + 1.00431484e-01 9.65100466e-02 9.26585085e-02 8.88775365e-02 8.51677856e-02 + 8.15298985e-02 7.79645054e-02 7.44722238e-02 7.10536590e-02 6.77094029e-02 + 6.44400350e-02 6.12461217e-02 5.81282163e-02 5.50868588e-02 5.21225762e-02 + 4.92358820e-02 4.64272763e-02 4.36972455e-02 4.10462627e-02 3.84747871e-02 + 3.59832642e-02 3.35721256e-02 3.12417889e-02 2.89926579e-02 2.68251222e-02 + 2.47395574e-02 2.27363246e-02 2.08157709e-02 1.89782291e-02 1.72240175e-02 + 1.55534399e-02 1.39667858e-02 1.24643300e-02 1.10463329e-02 9.71303993e-03 + 8.46468223e-03 7.30147603e-03 6.22362282e-03 5.23130933e-03 4.32470747e-03 + 3.50397429e-03 2.76925197e-03 2.12066779e-03 1.55833411e-03 1.08234835e-03 + 6.92792954e-04 3.89735421e-04 1.73228247e-04 4.33089373e-05 0.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 9.99980173e-01 9.99906079e-01 9.99777111e-01 9.99593281e-01 9.99354611e-01 + 9.99061126e-01 9.98712858e-01 9.98309847e-01 9.97852135e-01 9.97339773e-01 + 9.96772819e-01 9.96151332e-01 9.95475383e-01 9.94745045e-01 9.93960398e-01 + 9.93121529e-01 9.92228529e-01 9.91281497e-01 9.90280537e-01 9.89225758e-01 + 9.88117276e-01 9.86955213e-01 9.85739696e-01 9.84470859e-01 9.83148841e-01 + 9.81773788e-01 9.80345850e-01 9.78865184e-01 9.77331952e-01 9.75746323e-01 + 9.74108471e-01 9.72418575e-01 9.70676822e-01 9.68883402e-01 9.67038512e-01 + 9.65142355e-01 9.63195139e-01 9.61197077e-01 9.59148389e-01 9.57049300e-01 + 9.54900041e-01 9.52700846e-01 9.50451958e-01 9.48153624e-01 9.45806095e-01 + 9.43409630e-01 9.40964491e-01 9.38470947e-01 9.35929271e-01 9.33339743e-01 + 9.30702647e-01 9.28018273e-01 9.25286914e-01 9.22508871e-01 9.19684449e-01 + 9.16813958e-01 9.13897713e-01 9.10936034e-01 9.07929245e-01 9.04877679e-01 + 9.01781668e-01 8.98641553e-01 8.95457679e-01 8.92230395e-01 8.88960056e-01 + 8.85647020e-01 8.82291651e-01 8.78894318e-01 8.75455393e-01 8.71975254e-01 + 8.68454283e-01 8.64892866e-01 8.61291395e-01 8.57650264e-01 8.53969874e-01 + 8.50250628e-01 8.46492934e-01 8.42697206e-01 8.38863860e-01 8.34993316e-01 + 8.31085999e-01 8.27142339e-01 8.23162768e-01 8.19147724e-01 8.15097646e-01 + 8.11012979e-01 8.06894173e-01 8.02741678e-01 7.98555951e-01 7.94337451e-01 + 7.90086642e-01 7.85803989e-01 7.81489963e-01 7.77145038e-01 7.72769691e-01 + 7.68364401e-01 7.63929652e-01 7.59465932e-01 7.54973730e-01 7.50453539e-01 + 7.45905856e-01 7.41331179e-01 7.36730012e-01 7.32102858e-01 7.27450226e-01 + 7.22772626e-01 7.18070573e-01 7.13344581e-01 7.08595171e-01 7.03822863e-01 + 6.99028181e-01 6.94211651e-01 6.89373803e-01 6.84515167e-01 6.79636277e-01 + 6.74737667e-01 6.69819877e-01 6.64883445e-01 6.59928914e-01 6.54956827e-01 + 6.49967731e-01 6.44962172e-01 6.39940701e-01 6.34903869e-01 6.29852227e-01 + 6.24786332e-01 6.19706739e-01 6.14614006e-01 6.09508691e-01 6.04391355e-01 + 5.99262560e-01 5.94122870e-01 5.88972847e-01 5.83813057e-01 5.78644067e-01 + 5.73466445e-01 5.68280758e-01 5.63087575e-01 5.57887468e-01 5.52681006e-01 + 5.47468761e-01 5.42251306e-01 5.37029212e-01 5.31803054e-01 5.26573405e-01 + 5.21340839e-01 5.16105930e-01 5.10869253e-01 5.05631384e-01 5.00392895e-01 + 4.95154364e-01 4.89916365e-01 4.84679473e-01 4.79444262e-01 4.74211308e-01 + 4.68981185e-01 4.63754466e-01 4.58531727e-01 4.53313539e-01 4.48100476e-01 + 4.42893110e-01 4.37692013e-01 4.32497756e-01 4.27310908e-01 4.22132040e-01 + 4.16961719e-01 4.11800513e-01 4.06648989e-01 4.01507712e-01 3.96377247e-01 + 3.91258157e-01 3.86151003e-01 3.81056347e-01 3.75974747e-01 3.70906762e-01 + 3.65852947e-01 3.60813858e-01 3.55790047e-01 3.50782067e-01 3.45790466e-01 + 3.40815793e-01 3.35858594e-01 3.30919413e-01 3.25998792e-01 3.21097271e-01 + 3.16215388e-01 3.11353680e-01 3.06512680e-01 3.01692919e-01 2.96894926e-01 + 2.92119228e-01 2.87366350e-01 2.82636813e-01 2.77931136e-01 2.73249835e-01 + 2.68593425e-01 2.63962417e-01 2.59357319e-01 2.54778637e-01 2.50226873e-01 + 2.45702526e-01 2.41206094e-01 2.36738071e-01 2.32298945e-01 2.27889206e-01 + 2.23509336e-01 2.19159817e-01 2.14841126e-01 2.10553738e-01 2.06298122e-01 + 2.02074746e-01 1.97884074e-01 1.93726565e-01 1.89602676e-01 1.85512860e-01 + 1.81457565e-01 1.77437238e-01 1.73452318e-01 1.69503243e-01 1.65590448e-01 + 1.61714361e-01 1.57875408e-01 1.54074010e-01 1.50310585e-01 1.46585546e-01 + 1.42899302e-01 1.39252256e-01 1.35644811e-01 1.32077361e-01 1.28550298e-01 + 1.25064010e-01 1.21618879e-01 1.18215283e-01 1.14853596e-01 1.11534187e-01 + 1.08257420e-01 1.05023655e-01 1.01833247e-01 9.86865462e-02 9.55838981e-02 + 9.25256431e-02 8.95121170e-02 8.65436505e-02 8.36205696e-02 8.07431951e-02 + 7.79118428e-02 7.51268235e-02 7.23884430e-02 6.96970019e-02 6.70527955e-02 + 6.44561143e-02 6.19072431e-02 5.94064618e-02 5.69540448e-02 5.45502615e-02 + 5.21953757e-02 4.98896458e-02 4.76333250e-02 4.54266610e-02 4.32698959e-02 + 4.11632665e-02 3.91070041e-02 3.71013344e-02 3.51464776e-02 3.32426482e-02 + 3.13900552e-02 2.95889020e-02 2.78393864e-02 2.61417002e-02 2.44960300e-02 + 2.29025563e-02 2.13614541e-02 1.98728925e-02 1.84370350e-02 1.70540391e-02 + 1.57240567e-02 1.44472338e-02 1.32237104e-02 1.20536210e-02 1.09370940e-02 + 9.87425188e-03 8.86521137e-03 7.91008322e-03 7.00897228e-03 6.16197747e-03 + 5.36919175e-03 4.63070216e-03 3.94658975e-03 3.31692963e-03 2.74179092e-03 + 2.22123674e-03 1.75532423e-03 1.34410455e-03 9.87622837e-04 6.85918213e-04 + 4.39023800e-04 2.46966702e-04 1.09767999e-04 2.74427529e-05 0.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 9.99998611e-01 + 9.99988405e-01 9.99968287e-01 9.99938255e-01 9.99898310e-01 9.99848454e-01 + 9.99788687e-01 9.99719010e-01 9.99639425e-01 9.99549934e-01 9.99450537e-01 + 9.99341238e-01 9.99222038e-01 9.99092940e-01 9.98953946e-01 9.98805059e-01 + 9.98646282e-01 9.98477618e-01 9.98299070e-01 9.98110643e-01 9.97912339e-01 + 9.97704162e-01 9.97486118e-01 9.97258209e-01 9.97020441e-01 9.96772819e-01 + 9.96515346e-01 9.96248029e-01 9.95970873e-01 9.95683882e-01 9.95387064e-01 + 9.95080423e-01 9.94763966e-01 9.94437699e-01 9.94101628e-01 9.93755761e-01 + 9.93400104e-01 9.93034664e-01 9.92659448e-01 9.92274464e-01 9.91879719e-01 + 9.91475222e-01 9.91060979e-01 9.90637001e-01 9.90203294e-01 9.89759867e-01 + 9.89306730e-01 9.88843892e-01 9.88371360e-01 9.87889146e-01 9.87397257e-01 + 9.86895705e-01 9.86384499e-01 9.85863649e-01 9.85333166e-01 9.84793060e-01 + 9.84243341e-01 9.83684021e-01 9.83115111e-01 9.82536622e-01 9.81948565e-01 + 9.81350952e-01 9.80743796e-01 9.80127107e-01 9.79500899e-01 9.78865184e-01 + 9.78219973e-01 9.77565281e-01 9.76901120e-01 9.76227503e-01 9.75544444e-01 + 9.74851956e-01 9.74150052e-01 9.73438748e-01 9.72718056e-01 9.71987991e-01 + 9.71248568e-01 9.70499802e-01 9.69741706e-01 9.68974297e-01 9.68197589e-01 + 9.67411598e-01 9.66616339e-01 9.65811829e-01 9.64998082e-01 9.64175116e-01 + 9.63342946e-01 9.62501590e-01 9.61651063e-01 9.60791382e-01 9.59922566e-01 + 9.59044630e-01 9.58157592e-01 9.57261471e-01 9.56356283e-01 9.55442046e-01 + 9.54518780e-01 9.53586501e-01 9.52645229e-01 9.51694982e-01 9.50735778e-01 + 9.49767638e-01 9.48790581e-01 9.47804624e-01 9.46809789e-01 9.45806095e-01 + 9.44793561e-01 9.43772209e-01 9.42742057e-01 9.41703127e-01 9.40655439e-01 + 9.39599014e-01 9.38533873e-01 9.37460037e-01 9.36377527e-01 9.35286364e-01 + 9.34186571e-01 9.33078170e-01 9.31961181e-01 9.30835628e-01 9.29701532e-01 + 9.28558916e-01 9.27407803e-01 9.26248215e-01 9.25080177e-01 9.23903709e-01 + 9.22718837e-01 9.21525584e-01 9.20323972e-01 9.19114027e-01 9.17895771e-01 + 9.16669230e-01 9.15434427e-01 9.14191387e-01 9.12940135e-01 9.11680695e-01 + 9.10413093e-01 9.09137353e-01 9.07853501e-01 9.06561562e-01 9.05261562e-01 + 9.03953527e-01 9.02637482e-01 9.01313454e-01 8.99981469e-01 8.98641553e-01 + 8.97293733e-01 8.95938036e-01 8.94574488e-01 8.93203117e-01 8.91823950e-01 + 8.90437014e-01 8.89042336e-01 8.87639945e-01 8.86229867e-01 8.84812132e-01 + 8.83386767e-01 8.81953800e-01 8.80513260e-01 8.79065175e-01 8.77609575e-01 + 8.76146487e-01 8.74675941e-01 8.73197967e-01 8.71712593e-01 8.70219848e-01 + 8.68719763e-01 8.67212368e-01 8.65697691e-01 8.64175763e-01 8.62646615e-01 + 8.61110277e-01 8.59566778e-01 8.58016150e-01 8.56458424e-01 8.54893630e-01 + 8.53321799e-01 8.51742963e-01 8.50157152e-01 8.48564399e-01 8.46964734e-01 + 8.45358191e-01 8.43744799e-01 8.42124592e-01 8.40497601e-01 8.38863860e-01 + 8.37223399e-01 8.35576252e-01 8.33922451e-01 8.32262030e-01 8.30595020e-01 + 8.28921456e-01 8.27241370e-01 8.25554796e-01 8.23861766e-01 8.22162316e-01 + 8.20456477e-01 8.18744285e-01 8.17025773e-01 8.15300975e-01 8.13569925e-01 + 8.11832658e-01 8.10089208e-01 8.08339610e-01 8.06583898e-01 8.04822108e-01 + 8.03054273e-01 8.01280430e-01 7.99500613e-01 7.97714858e-01 7.95923200e-01 + 7.94125674e-01 7.92322317e-01 7.90513163e-01 7.88698249e-01 7.86877612e-01 + 7.85051286e-01 7.83219308e-01 7.81381715e-01 7.79538542e-01 7.77689827e-01 + 7.75835606e-01 7.73975916e-01 7.72110794e-01 7.70240277e-01 7.68364401e-01 + 7.66483204e-01 7.64596724e-01 7.62704997e-01 7.60808061e-01 7.58905954e-01 + 7.56998714e-01 7.55086378e-01 7.53168985e-01 7.51246571e-01 7.49319177e-01 + 7.47386838e-01 7.45449595e-01 7.43507485e-01 7.41560547e-01 7.39608819e-01 + 7.37652340e-01 7.35691150e-01 7.33725286e-01 7.31754788e-01 7.29779695e-01 + 7.27800045e-01 7.25815880e-01 7.23827236e-01 7.21834155e-01 7.19836676e-01 + 7.17834837e-01 7.15828680e-01 7.13818243e-01 7.11803566e-01 7.09784691e-01 + 7.07761655e-01 7.05734500e-01 7.03703266e-01 7.01667993e-01 6.99628722e-01 + 6.97585492e-01 6.95538345e-01 6.93487320e-01 6.91432460e-01 6.89373803e-01 + 6.87311392e-01 6.85245267e-01 6.83175469e-01 6.81102039e-01 6.79025018e-01 + 6.76944447e-01 6.74860369e-01 6.72772823e-01 6.70681851e-01 6.68587496e-01 + 6.66489797e-01 6.64388798e-01 6.62284539e-01 6.60177062e-01 6.58066410e-01 + 6.55952623e-01 6.53835744e-01 6.51715815e-01 6.49592878e-01 6.47466975e-01 + 6.45338148e-01 6.43206439e-01 6.41071891e-01 6.38934546e-01 6.36794446e-01 + 6.34651634e-01 6.32506151e-01 6.30358042e-01 6.28207348e-01 6.26054112e-01 + 6.23898376e-01 6.21740184e-01 6.19579579e-01 6.17416602e-01 6.15251297e-01 + 6.13083707e-01 6.10913875e-01 6.08741843e-01 6.06567656e-01 6.04391355e-01 + 6.02212985e-01 6.00032588e-01 5.97850208e-01 5.95665887e-01 5.93479670e-01 + 5.91291599e-01 5.89101719e-01 5.86910071e-01 5.84716701e-01 5.82521650e-01 + 5.80324964e-01 5.78126684e-01 5.75926856e-01 5.73725522e-01 5.71522727e-01 + 5.69318513e-01 5.67112925e-01 5.64906006e-01 5.62697800e-01 5.60488352e-01 + 5.58277703e-01 5.56065900e-01 5.53852984e-01 5.51639001e-01 5.49423994e-01 + 5.47208007e-01 5.44991085e-01 5.42773270e-01 5.40554606e-01 5.38335139e-01 + 5.36114912e-01 5.33893969e-01 5.31672353e-01 5.29450110e-01 5.27227283e-01 + 5.25003915e-01 5.22780052e-01 5.20555738e-01 5.18331016e-01 5.16105930e-01 + 5.13880525e-01 5.11654845e-01 5.09428934e-01 5.07202836e-01 5.04976595e-01 + 5.02750255e-01 5.00523861e-01 4.98297456e-01 4.96071085e-01 4.93844792e-01 + 4.91618621e-01 4.89392617e-01 4.87166822e-01 4.84941282e-01 4.82716041e-01 + 4.80491142e-01 4.78266630e-01 4.76042549e-01 4.73818943e-01 4.71595856e-01 + 4.69373333e-01 4.67151416e-01 4.64930151e-01 4.62709582e-01 4.60489751e-01 + 4.58270704e-01 4.56052485e-01 4.53835136e-01 4.51618704e-01 4.49403230e-01 + 4.47188760e-01 4.44975336e-01 4.42763004e-01 4.40551807e-01 4.38341788e-01 + 4.36132992e-01 4.33925462e-01 4.31719242e-01 4.29514376e-01 4.27310908e-01 + 4.25108881e-01 4.22908339e-01 4.20709325e-01 4.18511884e-01 4.16316058e-01 + 4.14121891e-01 4.11929427e-01 4.09738710e-01 4.07549782e-01 4.05362687e-01 + 4.03177469e-01 4.00994170e-01 3.98812834e-01 3.96633505e-01 3.94456225e-01 + 3.92281038e-01 3.90107987e-01 3.87937114e-01 3.85768464e-01 3.83602078e-01 + 3.81438000e-01 3.79276273e-01 3.77116940e-01 3.74960043e-01 3.72805626e-01 + 3.70653730e-01 3.68504399e-01 3.66357675e-01 3.64213601e-01 3.62072219e-01 + 3.59933573e-01 3.57797703e-01 3.55664653e-01 3.53534464e-01 3.51407180e-01 + 3.49282842e-01 3.47161492e-01 3.45043173e-01 3.42927926e-01 3.40815793e-01 + 3.38706817e-01 3.36601038e-01 3.34498500e-01 3.32399243e-01 3.30303309e-01 + 3.28210740e-01 3.26121577e-01 3.24035861e-01 3.21953634e-01 3.19874938e-01 + 3.17799813e-01 3.15728301e-01 3.13660442e-01 3.11596278e-01 3.09535850e-01 + 3.07479198e-01 3.05426363e-01 3.03377386e-01 3.01332308e-01 2.99291168e-01 + 2.97254009e-01 2.95220869e-01 2.93191789e-01 2.91166810e-01 2.89145972e-01 + 2.87129315e-01 2.85116878e-01 2.83108701e-01 2.81104825e-01 2.79105290e-01 + 2.77110134e-01 2.75119397e-01 2.73133119e-01 2.71151340e-01 2.69174098e-01 + 2.67201433e-01 2.65233383e-01 2.63269988e-01 2.61311288e-01 2.59357319e-01 + 2.57408122e-01 2.55463735e-01 2.53524197e-01 2.51589546e-01 2.49659820e-01 + 2.47735057e-01 2.45815297e-01 2.43900576e-01 2.41990933e-01 2.40086406e-01 + 2.38187032e-01 2.36292850e-01 2.34403896e-01 2.32520208e-01 2.30641823e-01 + 2.28768780e-01 2.26901114e-01 2.25038863e-01 2.23182064e-01 2.21330753e-01 + 2.19484968e-01 2.17644744e-01 2.15810120e-01 2.13981129e-01 2.12157810e-01 + 2.10340199e-01 2.08528330e-01 2.06722240e-01 2.04921966e-01 2.03127542e-01 + 2.01339005e-01 1.99556389e-01 1.97779730e-01 1.96009063e-01 1.94244424e-01 + 1.92485848e-01 1.90733368e-01 1.88987021e-01 1.87246840e-01 1.85512860e-01 + 1.83785116e-01 1.82063641e-01 1.80348471e-01 1.78639638e-01 1.76937177e-01 + 1.75241122e-01 1.73551506e-01 1.71868362e-01 1.70191725e-01 1.68521627e-01 + 1.66858101e-01 1.65201180e-01 1.63550898e-01 1.61907287e-01 1.60270379e-01 + 1.58640208e-01 1.57016804e-01 1.55400201e-01 1.53790431e-01 1.52187525e-01 + 1.50591516e-01 1.49002434e-01 1.47420312e-01 1.45845181e-01 1.44277071e-01 + 1.42716015e-01 1.41162043e-01 1.39615186e-01 1.38075474e-01 1.36542938e-01 + 1.35017609e-01 1.33499516e-01 1.31988690e-01 1.30485161e-01 1.28988959e-01 + 1.27500113e-01 1.26018652e-01 1.24544607e-01 1.23078006e-01 1.21618879e-01 + 1.20167254e-01 1.18723160e-01 1.17286625e-01 1.15857679e-01 1.14436350e-01 + 1.13022665e-01 1.11616654e-01 1.10218343e-01 1.08827760e-01 1.07444933e-01 + 1.06069890e-01 1.04702657e-01 1.03343262e-01 1.01991732e-01 1.00648094e-01 + 9.93123732e-02 9.79845974e-02 9.66647925e-02 9.53529849e-02 9.40492003e-02 + 9.27534648e-02 9.14658040e-02 9.01862434e-02 8.89148084e-02 8.76515242e-02 + 8.63964159e-02 8.51495083e-02 8.39108261e-02 8.26803940e-02 8.14582364e-02 + 8.02443773e-02 7.90388410e-02 7.78416513e-02 7.66528320e-02 7.54724066e-02 + 7.43003985e-02 7.31368310e-02 7.19817272e-02 7.08351099e-02 6.96970019e-02 + 6.85674257e-02 6.74464038e-02 6.63339584e-02 6.52301115e-02 6.41348850e-02 + 6.30483006e-02 6.19703799e-02 6.09011443e-02 5.98406149e-02 5.87888128e-02 + 5.77457588e-02 5.67114736e-02 5.56859778e-02 5.46692916e-02 5.36614352e-02 + 5.26624286e-02 5.16722916e-02 5.06910438e-02 4.97187048e-02 4.87552937e-02 + 4.78008297e-02 4.68553316e-02 4.59188183e-02 4.49913084e-02 4.40728201e-02 + 4.31633717e-02 4.22629813e-02 4.13716667e-02 4.04894456e-02 3.96163354e-02 + 3.87523535e-02 3.78975170e-02 3.70518428e-02 3.62153478e-02 3.53880485e-02 + 3.45699613e-02 3.37611024e-02 3.29614879e-02 3.21711336e-02 3.13900552e-02 + 3.06182682e-02 2.98557879e-02 2.91026294e-02 2.83588076e-02 2.76243373e-02 + 2.68992330e-02 2.61835092e-02 2.54771800e-02 2.47802594e-02 2.40927612e-02 + 2.34146991e-02 2.27460866e-02 2.20869367e-02 2.14372628e-02 2.07970775e-02 + 2.01663937e-02 1.95452238e-02 1.89335801e-02 1.83314748e-02 1.77389197e-02 + 1.71559268e-02 1.65825074e-02 1.60186730e-02 1.54644348e-02 1.49198037e-02 + 1.43847906e-02 1.38594060e-02 1.33436604e-02 1.28375640e-02 1.23411268e-02 + 1.18543587e-02 1.13772693e-02 1.09098682e-02 1.04521644e-02 1.00041672e-02 + 9.56588541e-03 9.13732771e-03 8.71850261e-03 8.30941841e-03 7.91008322e-03 + 7.52050497e-03 7.14069137e-03 6.77064996e-03 6.41038807e-03 6.05991285e-03 + 5.71923124e-03 5.38835001e-03 5.06727570e-03 4.75601470e-03 4.45457316e-03 + 4.16295707e-03 3.88117220e-03 3.60922415e-03 3.34711831e-03 3.09485987e-03 + 2.85245383e-03 2.61990501e-03 2.39721801e-03 2.18439724e-03 1.98144694e-03 + 1.78837111e-03 1.60517360e-03 1.43185803e-03 1.26842784e-03 1.11488626e-03 + 9.71236350e-04 8.37480951e-04 7.13622715e-04 5.99664099e-04 4.95607361e-04 + 4.01454566e-04 3.17207579e-04 2.42868072e-04 1.78437519e-04 1.23917196e-04 + 7.93081847e-05 4.46113698e-05 1.98274393e-05 4.95688439e-06 0.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 9.99990121e-01 + 9.99925288e-01 9.99799954e-01 9.99614132e-01 9.99367846e-01 9.99061126e-01 + 9.98694008e-01 9.98266536e-01 9.97778763e-01 9.97230748e-01 9.96622557e-01 + 9.95954263e-01 9.95225948e-01 9.94437699e-01 9.93589612e-01 9.92681790e-01 + 9.91714342e-01 9.90687386e-01 9.89601045e-01 9.88455452e-01 9.87250745e-01 + 9.85987069e-01 9.84664578e-01 9.83283432e-01 9.81843798e-01 9.80345850e-01 + 9.78789769e-01 9.77175744e-01 9.75503970e-01 9.73774649e-01 9.71987991e-01 + 9.70144212e-01 9.68243535e-01 9.66286190e-01 9.64272414e-01 9.62202450e-01 + 9.60076550e-01 9.57894969e-01 9.55657974e-01 9.53365833e-01 9.51018826e-01 + 9.48617234e-01 9.46161350e-01 9.43651471e-01 9.41087899e-01 9.38470947e-01 + 9.35800929e-01 9.33078170e-01 9.30302998e-01 9.27475750e-01 9.24596768e-01 + 9.21666401e-01 9.18685002e-01 9.15652933e-01 9.12570560e-01 9.09438258e-01 + 9.06256404e-01 9.03025384e-01 8.99745589e-01 8.96417415e-01 8.93041266e-01 + 8.89617551e-01 8.86146683e-01 8.82629082e-01 8.79065175e-01 8.75455393e-01 + 8.71800172e-01 8.68099955e-01 8.64355189e-01 8.60566328e-01 8.56733831e-01 + 8.52858161e-01 8.48939787e-01 8.44979184e-01 8.40976830e-01 8.36933211e-01 + 8.32848815e-01 8.28724137e-01 8.24559676e-01 8.20355936e-01 8.16113425e-01 + 8.11832658e-01 8.07514152e-01 8.03158430e-01 7.98766019e-01 7.94337451e-01 + 7.89873261e-01 7.85373990e-01 7.80840183e-01 7.76272387e-01 7.71671156e-01 + 7.67037047e-01 7.62370621e-01 7.57672442e-01 7.52943078e-01 7.48183103e-01 + 7.43393092e-01 7.38573625e-01 7.33725286e-01 7.28848660e-01 7.23944339e-01 + 7.19012915e-01 7.14054986e-01 7.09071151e-01 7.04062014e-01 6.99028181e-01 + 6.93970261e-01 6.88888866e-01 6.83784612e-01 6.78658115e-01 6.73509997e-01 + 6.68340880e-01 6.63151390e-01 6.57942156e-01 6.52713806e-01 6.47466975e-01 + 6.42202297e-01 6.36920410e-01 6.31621952e-01 6.26307564e-01 6.20977891e-01 + 6.15633577e-01 6.10275268e-01 6.04903614e-01 5.99519264e-01 5.94122870e-01 + 5.88715084e-01 5.83296563e-01 5.77867960e-01 5.72429934e-01 5.66983143e-01 + 5.61528244e-01 5.56065900e-01 5.50596770e-01 5.45121517e-01 5.39640803e-01 + 5.34155292e-01 5.28665647e-01 5.23172533e-01 5.17676615e-01 5.12178557e-01 + 5.06679025e-01 5.01178685e-01 4.95678203e-01 4.90178244e-01 4.84679473e-01 + 4.79182556e-01 4.73688159e-01 4.68196946e-01 4.62709582e-01 4.57226730e-01 + 4.51749056e-01 4.46277221e-01 4.40811887e-01 4.35353717e-01 4.29903370e-01 + 4.24461507e-01 4.19028785e-01 4.13605863e-01 4.08193396e-01 4.02792040e-01 + 3.97402448e-01 3.92025273e-01 3.86661165e-01 3.81310774e-01 3.75974747e-01 + 3.70653730e-01 3.65348366e-01 3.60059299e-01 3.54787167e-01 3.49532610e-01 + 3.44296262e-01 3.39078758e-01 3.33880729e-01 3.28702804e-01 3.23545610e-01 + 3.18409771e-01 3.13295908e-01 3.08204641e-01 3.03136585e-01 2.98092355e-01 + 2.93072559e-01 2.88077807e-01 2.83108701e-01 2.78165845e-01 2.73249835e-01 + 2.68361267e-01 2.63500733e-01 2.58668821e-01 2.53866115e-01 2.49093196e-01 + 2.44350643e-01 2.39639029e-01 2.34958925e-01 2.30310897e-01 2.25695507e-01 + 2.21113314e-01 2.16564873e-01 2.12050734e-01 2.07571443e-01 2.03127542e-01 + 1.98719570e-01 1.94348059e-01 1.90013539e-01 1.85716535e-01 1.81457565e-01 + 1.77237147e-01 1.73055790e-01 1.68914001e-01 1.64812280e-01 1.60751125e-01 + 1.56731026e-01 1.52752471e-01 1.48815940e-01 1.44921911e-01 1.41070854e-01 + 1.37263235e-01 1.33499516e-01 1.29780152e-01 1.26105592e-01 1.22476282e-01 + 1.18892661e-01 1.15355162e-01 1.11864215e-01 1.08420240e-01 1.05023655e-01 + 1.01674871e-01 9.83742934e-02 9.51223215e-02 9.19193489e-02 8.87657632e-02 + 8.56619461e-02 8.26082731e-02 7.96051139e-02 7.66528320e-02 7.37517845e-02 + 7.09023226e-02 6.81047912e-02 6.53595288e-02 6.26668676e-02 6.00271336e-02 + 5.74406461e-02 5.49077182e-02 5.24286565e-02 5.00037609e-02 4.76333250e-02 + 4.53176356e-02 4.30569730e-02 4.08516107e-02 3.87018157e-02 3.66078480e-02 + 3.45699613e-02 3.25884020e-02 3.06634100e-02 2.87952182e-02 2.69840528e-02 + 2.52301330e-02 2.35336709e-02 2.18948719e-02 2.03139344e-02 1.87910497e-02 + 1.73264020e-02 1.59201687e-02 1.45725199e-02 1.32836186e-02 1.20536210e-02 + 1.08826759e-02 9.77092489e-03 8.71850261e-03 7.72553641e-03 6.79214646e-03 + 5.91844572e-03 5.10453993e-03 4.35052759e-03 3.65649996e-03 3.02254101e-03 + 2.44872749e-03 1.93512883e-03 1.48180718e-03 1.08881742e-03 7.56207102e-04 + 4.84016478e-04 2.72278491e-04 1.21018765e-04 3.02556067e-05 0.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 9.99975710e-01 + 9.99895217e-01 9.99758386e-01 9.99565232e-01 9.99315778e-01 9.99010051e-01 + 9.98648086e-01 9.98229923e-01 9.97755610e-01 9.97225201e-01 9.96638754e-01 + 9.95996336e-01 9.95298020e-01 9.94543884e-01 9.93734013e-01 9.92868499e-01 + 9.91947438e-01 9.90970935e-01 9.89939101e-01 9.88852050e-01 9.87709905e-01 + 9.86512796e-01 9.85260858e-01 9.83954230e-01 9.82593062e-01 9.81177505e-01 + 9.79707720e-01 9.78183872e-01 9.76606132e-01 9.74974680e-01 9.73289698e-01 + 9.71551377e-01 9.69759912e-01 9.67915505e-01 9.66018364e-01 9.64068704e-01 + 9.62066743e-01 9.60012707e-01 9.57906828e-01 9.55749343e-01 9.53540496e-01 + 9.51280535e-01 9.48969714e-01 9.46608295e-01 9.44196544e-01 9.41734731e-01 + 9.39223136e-01 9.36662040e-01 9.34051732e-01 9.31392507e-01 9.28684665e-01 + 9.25928510e-01 9.23124352e-01 9.20272509e-01 9.17373302e-01 9.14427057e-01 + 9.11434106e-01 9.08394786e-01 9.05309441e-01 9.02178417e-01 8.99002068e-01 + 8.95780752e-01 8.92514832e-01 8.89204675e-01 8.85850655e-01 8.82453150e-01 + 8.79012542e-01 8.75529221e-01 8.72003577e-01 8.68436008e-01 8.64826917e-01 + 8.61176710e-01 8.57485799e-01 8.53754599e-01 8.49983531e-01 8.46173020e-01 + 8.42323496e-01 8.38435392e-01 8.34509147e-01 8.30545202e-01 8.26544005e-01 + 8.22506007e-01 8.18431663e-01 8.14321431e-01 8.10175776e-01 8.05995164e-01 + 8.01780066e-01 7.97530958e-01 7.93248319e-01 7.88932630e-01 7.84584379e-01 + 7.80204055e-01 7.75792153e-01 7.71349168e-01 7.66875603e-01 7.62371961e-01 + 7.57838750e-01 7.53276481e-01 7.48685668e-01 7.44066827e-01 7.39420481e-01 + 7.34747152e-01 7.30047367e-01 7.25321656e-01 7.20570551e-01 7.15794588e-01 + 7.10994305e-01 7.06170243e-01 7.01322946e-01 6.96452960e-01 6.91560833e-01 + 6.86647118e-01 6.81712368e-01 6.76757139e-01 6.71781989e-01 6.66787480e-01 + 6.61774174e-01 6.56742636e-01 6.51693433e-01 6.46627134e-01 6.41544311e-01 + 6.36445535e-01 6.31331383e-01 6.26202429e-01 6.21059252e-01 6.15902432e-01 + 6.10732550e-01 6.05550188e-01 6.00355931e-01 5.95150364e-01 5.89934073e-01 + 5.84707647e-01 5.79471675e-01 5.74226746e-01 5.68973451e-01 5.63712384e-01 + 5.58444136e-01 5.53169301e-01 5.47888474e-01 5.42602250e-01 5.37311225e-01 + 5.32015995e-01 5.26717157e-01 5.21415308e-01 5.16111045e-01 5.10804967e-01 + 5.05497671e-01 5.00189755e-01 4.94881818e-01 4.89574458e-01 4.84268272e-01 + 4.78963860e-01 4.73661819e-01 4.68362745e-01 4.63067237e-01 4.57775892e-01 + 4.52489305e-01 4.47208073e-01 4.41932790e-01 4.36664051e-01 4.31402451e-01 + 4.26148581e-01 4.20903034e-01 4.15666401e-01 4.10439273e-01 4.05222238e-01 + 4.00015885e-01 3.94820800e-01 3.89637568e-01 3.84466774e-01 3.79309001e-01 + 3.74164830e-01 3.69034840e-01 3.63919610e-01 3.58819716e-01 3.53735733e-01 + 3.48668234e-01 3.43617790e-01 3.38584970e-01 3.33570341e-01 3.28574469e-01 + 3.23597917e-01 3.18641245e-01 3.13705012e-01 3.08789775e-01 3.03896087e-01 + 2.99024499e-01 2.94175562e-01 2.89349820e-01 2.84547819e-01 2.79770100e-01 + 2.75017200e-01 2.70289655e-01 2.65587999e-01 2.60912761e-01 2.56264468e-01 + 2.51643644e-01 2.47050809e-01 2.42486482e-01 2.37951176e-01 2.33445403e-01 + 2.28969671e-01 2.24524484e-01 2.20110342e-01 2.15727744e-01 2.11377184e-01 + 2.07059151e-01 2.02774132e-01 1.98522611e-01 1.94305066e-01 1.90121972e-01 + 1.85973802e-01 1.81861023e-01 1.77784097e-01 1.73743485e-01 1.69739642e-01 + 1.65773019e-01 1.61844064e-01 1.57953218e-01 1.54100921e-01 1.50287606e-01 + 1.46513704e-01 1.42779640e-01 1.39085834e-01 1.35432703e-01 1.31820659e-01 + 1.28250109e-01 1.24721454e-01 1.21235093e-01 1.17791419e-01 1.14390819e-01 + 1.11033677e-01 1.07720372e-01 1.04451277e-01 1.01226759e-01 9.80471834e-02 + 9.49129074e-02 9.18242846e-02 8.87816629e-02 8.57853854e-02 8.28357897e-02 + 7.99332082e-02 7.70779680e-02 7.42703909e-02 7.15107933e-02 6.87994863e-02 + 6.61367753e-02 6.35229606e-02 6.09583365e-02 5.84431923e-02 5.59778113e-02 + 5.35624714e-02 5.11974448e-02 4.88829981e-02 4.66193920e-02 4.44068816e-02 + 4.22457164e-02 4.01361399e-02 3.80783899e-02 3.60726981e-02 3.41192908e-02 + 3.22183880e-02 3.03702040e-02 2.85749470e-02 2.68328194e-02 2.51440175e-02 + 2.35087316e-02 2.19271461e-02 2.03994392e-02 1.89257830e-02 1.75063436e-02 + 1.61412811e-02 1.48307492e-02 1.35748956e-02 1.23738620e-02 1.12277835e-02 + 1.01367895e-02 9.10100279e-03 8.12054017e-03 7.19551214e-03 6.32602293e-03 + 5.51217055e-03 4.75404670e-03 4.05173684e-03 3.40532012e-03 2.81486937e-03 + 2.28045115e-03 1.80212569e-03 1.37994689e-03 1.01396233e-03 7.04213259e-04 + 4.50734584e-04 2.53554873e-04 1.12696347e-04 2.81748805e-05 0.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 9.99999383e-01 + 9.99986934e-01 9.99958482e-01 9.99914026e-01 9.99853569e-01 9.99777111e-01 + 9.99684655e-01 9.99576205e-01 9.99451764e-01 9.99311336e-01 9.99154925e-01 + 9.98982536e-01 9.98794176e-01 9.98589849e-01 9.98369562e-01 9.98133323e-01 + 9.97881139e-01 9.97613018e-01 9.97328969e-01 9.97029001e-01 9.96713123e-01 + 9.96381345e-01 9.96033679e-01 9.95670135e-01 9.95290724e-01 9.94895460e-01 + 9.94484354e-01 9.94057421e-01 9.93614672e-01 9.93156124e-01 9.92681790e-01 + 9.92191685e-01 9.91685825e-01 9.91164227e-01 9.90626907e-01 9.90073883e-01 + 9.89505171e-01 9.88920791e-01 9.88320760e-01 9.87705099e-01 9.87073826e-01 + 9.86426963e-01 9.85764529e-01 9.85086546e-01 9.84393036e-01 9.83684021e-01 + 9.82959523e-01 9.82219566e-01 9.81464174e-01 9.80693370e-01 9.79907179e-01 + 9.79105627e-01 9.78288739e-01 9.77456541e-01 9.76609060e-01 9.75746323e-01 + 9.74868358e-01 9.73975192e-01 9.73066855e-01 9.72143375e-01 9.71204782e-01 + 9.70251106e-01 9.69282377e-01 9.68298628e-01 9.67299888e-01 9.66286190e-01 + 9.65257566e-01 9.64214050e-01 9.63155675e-01 9.62082474e-01 9.60994483e-01 + 9.59891735e-01 9.58774266e-01 9.57642113e-01 9.56495310e-01 9.55333895e-01 + 9.54157905e-01 9.52967378e-01 9.51762352e-01 9.50542865e-01 9.49308956e-01 + 9.48060665e-01 9.46798032e-01 9.45521098e-01 9.44229902e-01 9.42924487e-01 + 9.41604894e-01 9.40271166e-01 9.38923345e-01 9.37561474e-01 9.36185597e-01 + 9.34795758e-01 9.33392001e-01 9.31974372e-01 9.30542915e-01 9.29097677e-01 + 9.27638704e-01 9.26166043e-01 9.24679740e-01 9.23179843e-01 9.21666401e-01 + 9.20139461e-01 9.18599073e-01 9.17045285e-01 9.15478149e-01 9.13897713e-01 + 9.12304028e-01 9.10697146e-01 9.09077118e-01 9.07443995e-01 9.05797831e-01 + 9.04138676e-01 9.02466586e-01 9.00781613e-01 8.99083811e-01 8.97373235e-01 + 8.95649939e-01 8.93913979e-01 8.92165409e-01 8.90404287e-01 8.88630668e-01 + 8.86844609e-01 8.85046167e-01 8.83235400e-01 8.81412366e-01 8.79577124e-01 + 8.77729731e-01 8.75870247e-01 8.73998732e-01 8.72115246e-01 8.70219848e-01 + 8.68312600e-01 8.66393562e-01 8.64462797e-01 8.62520365e-01 8.60566328e-01 + 8.58600751e-01 8.56623695e-01 8.54635223e-01 8.52635400e-01 8.50624289e-01 + 8.48601955e-01 8.46568462e-01 8.44523876e-01 8.42468262e-01 8.40401685e-01 + 8.38324213e-01 8.36235911e-01 8.34136846e-01 8.32027086e-01 8.29906698e-01 + 8.27775749e-01 8.25634309e-01 8.23482445e-01 8.21320227e-01 8.19147724e-01 + 8.16965004e-01 8.14772139e-01 8.12569199e-01 8.10356253e-01 8.08133373e-01 + 8.05900629e-01 8.03658094e-01 8.01405839e-01 7.99143936e-01 7.96872458e-01 + 7.94591477e-01 7.92301066e-01 7.90001299e-01 7.87692249e-01 7.85373990e-01 + 7.83046597e-01 7.80710143e-01 7.78364704e-01 7.76010355e-01 7.73647171e-01 + 7.71275227e-01 7.68894601e-01 7.66505367e-01 7.64107602e-01 7.61701383e-01 + 7.59286788e-01 7.56863893e-01 7.54432775e-01 7.51993514e-01 7.49546186e-01 + 7.47090871e-01 7.44627646e-01 7.42156591e-01 7.39677784e-01 7.37191306e-01 + 7.34697235e-01 7.32195652e-01 7.29686636e-01 7.27170269e-01 7.24646629e-01 + 7.22115799e-01 7.19577859e-01 7.17032890e-01 7.14480975e-01 7.11922193e-01 + 7.09356629e-01 7.06784363e-01 7.04205478e-01 7.01620056e-01 6.99028181e-01 + 6.96429935e-01 6.93825401e-01 6.91214663e-01 6.88597804e-01 6.85974909e-01 + 6.83346060e-01 6.80711343e-01 6.78070841e-01 6.75424640e-01 6.72772823e-01 + 6.70115475e-01 6.67452683e-01 6.64784530e-01 6.62111103e-01 6.59432486e-01 + 6.56748767e-01 6.54060030e-01 6.51366361e-01 6.48667847e-01 6.45964575e-01 + 6.43256630e-01 6.40544100e-01 6.37827071e-01 6.35105630e-01 6.32379864e-01 + 6.29649862e-01 6.26915709e-01 6.24177493e-01 6.21435303e-01 6.18689226e-01 + 6.15939349e-01 6.13185762e-01 6.10428551e-01 6.07667806e-01 6.04903614e-01 + 6.02136064e-01 5.99365245e-01 5.96591245e-01 5.93814154e-01 5.91034060e-01 + 5.88251051e-01 5.85465218e-01 5.82676649e-01 5.79885434e-01 5.77091661e-01 + 5.74295421e-01 5.71496803e-01 5.68695896e-01 5.65892790e-01 5.63087575e-01 + 5.60280341e-01 5.57471177e-01 5.54660174e-01 5.51847421e-01 5.49033008e-01 + 5.46217026e-01 5.43399564e-01 5.40580713e-01 5.37760563e-01 5.34939205e-01 + 5.32116728e-01 5.29293223e-01 5.26468780e-01 5.23643491e-01 5.20817444e-01 + 5.17990731e-01 5.15163442e-01 5.12335668e-01 5.09507499e-01 5.06679025e-01 + 5.03850338e-01 5.01021528e-01 4.98192685e-01 4.95363899e-01 4.92535262e-01 + 4.89706864e-01 4.86878796e-01 4.84051147e-01 4.81224009e-01 4.78397472e-01 + 4.75571627e-01 4.72746563e-01 4.69922372e-01 4.67099144e-01 4.64276968e-01 + 4.61455937e-01 4.58636139e-01 4.55817665e-01 4.53000605e-01 4.50185050e-01 + 4.47371089e-01 4.44558813e-01 4.41748311e-01 4.38939674e-01 4.36132992e-01 + 4.33328354e-01 4.30525850e-01 4.27725570e-01 4.24927603e-01 4.22132040e-01 + 4.19338968e-01 4.16548479e-01 4.13760661e-01 4.10975604e-01 4.08193396e-01 + 4.05414127e-01 4.02637885e-01 3.99864760e-01 3.97094840e-01 3.94328215e-01 + 3.91564971e-01 3.88805199e-01 3.86048986e-01 3.83296420e-01 3.80547590e-01 + 3.77802584e-01 3.75061489e-01 3.72324393e-01 3.69591384e-01 3.66862550e-01 + 3.64137977e-01 3.61417753e-01 3.58701965e-01 3.55990699e-01 3.53284044e-01 + 3.50582085e-01 3.47884908e-01 3.45192601e-01 3.42505249e-01 3.39822938e-01 + 3.37145754e-01 3.34473784e-01 3.31807111e-01 3.29145823e-01 3.26490003e-01 + 3.23839737e-01 3.21195110e-01 3.18556207e-01 3.15923112e-01 3.13295908e-01 + 3.10674681e-01 3.08059514e-01 3.05450491e-01 3.02847696e-01 3.00251211e-01 + 2.97661120e-01 2.95077506e-01 2.92500451e-01 2.89930039e-01 2.87366350e-01 + 2.84809468e-01 2.82259474e-01 2.79716449e-01 2.77180476e-01 2.74651635e-01 + 2.72130007e-01 2.69615674e-01 2.67108715e-01 2.64609210e-01 2.62117240e-01 + 2.59632885e-01 2.57156224e-01 2.54687336e-01 2.52226300e-01 2.49773196e-01 + 2.47328101e-01 2.44891094e-01 2.42462253e-01 2.40041655e-01 2.37629379e-01 + 2.35225501e-01 2.32830098e-01 2.30443248e-01 2.28065025e-01 2.25695507e-01 + 2.23334770e-01 2.20982888e-01 2.18639937e-01 2.16305993e-01 2.13981129e-01 + 2.11665421e-01 2.09358943e-01 2.07061767e-01 2.04773968e-01 2.02495620e-01 + 2.00226794e-01 1.97967564e-01 1.95718001e-01 1.93478179e-01 1.91248168e-01 + 1.89028040e-01 1.86817867e-01 1.84617718e-01 1.82427664e-01 1.80247775e-01 + 1.78078122e-01 1.75918773e-01 1.73769798e-01 1.71631265e-01 1.69503243e-01 + 1.67385801e-01 1.65279004e-01 1.63182923e-01 1.61097622e-01 1.59023170e-01 + 1.56959632e-01 1.54907074e-01 1.52865563e-01 1.50835164e-01 1.48815940e-01 + 1.46807959e-01 1.44811282e-01 1.42825975e-01 1.40852101e-01 1.38889723e-01 + 1.36938904e-01 1.34999707e-01 1.33072193e-01 1.31156424e-01 1.29252461e-01 + 1.27360366e-01 1.25480199e-01 1.23612020e-01 1.21755889e-01 1.19911865e-01 + 1.18080008e-01 1.16260376e-01 1.14453027e-01 1.12658019e-01 1.10875410e-01 + 1.09105257e-01 1.07347616e-01 1.05602543e-01 1.03870095e-01 1.02150327e-01 + 1.00443293e-01 9.87490497e-02 9.70676498e-02 9.53991475e-02 9.37435963e-02 + 9.21010491e-02 9.04715586e-02 8.88551768e-02 8.72519555e-02 8.56619461e-02 + 8.40851993e-02 8.25217658e-02 8.09716956e-02 7.94350381e-02 7.79118428e-02 + 7.64021582e-02 7.49060328e-02 7.34235143e-02 7.19546504e-02 7.04994879e-02 + 6.90580735e-02 6.76304533e-02 6.62166731e-02 6.48167779e-02 6.34308128e-02 + 6.20588220e-02 6.07008494e-02 5.93569385e-02 5.80271324e-02 5.67114736e-02 + 5.54100042e-02 5.41227659e-02 5.28497998e-02 5.15911468e-02 5.03468471e-02 + 4.91169405e-02 4.79014665e-02 4.67004638e-02 4.55139711e-02 4.43420261e-02 + 4.31846665e-02 4.20419294e-02 4.09138512e-02 3.98004680e-02 3.87018157e-02 + 3.76179292e-02 3.65488433e-02 3.54945922e-02 3.44552096e-02 3.34307289e-02 + 3.24211828e-02 3.14266036e-02 3.04470233e-02 2.94824730e-02 2.85329837e-02 + 2.75985858e-02 2.66793093e-02 2.57751834e-02 2.48862372e-02 2.40124992e-02 + 2.31539972e-02 2.23107588e-02 2.14828110e-02 2.06701802e-02 1.98728925e-02 + 1.90909735e-02 1.83244480e-02 1.75733407e-02 1.68376756e-02 1.61174762e-02 + 1.54127657e-02 1.47235665e-02 1.40499008e-02 1.33917900e-02 1.27492553e-02 + 1.21223172e-02 1.15109958e-02 1.09153106e-02 1.03352808e-02 9.77092489e-03 + 9.22226091e-03 8.68930645e-03 8.17207857e-03 7.67059382e-03 7.18486826e-03 + 6.71491743e-03 6.26075638e-03 5.82239964e-03 5.39986125e-03 4.99315473e-03 + 4.60229310e-03 4.22728887e-03 3.86815404e-03 3.52490011e-03 3.19753807e-03 + 2.88607840e-03 2.59053106e-03 2.31090551e-03 2.04721071e-03 1.79945510e-03 + 1.56764661e-03 1.35179266e-03 1.15190015e-03 9.67975486e-04 8.00024557e-04 + 6.48052736e-04 5.12064889e-04 3.92065368e-04 2.88058015e-04 2.00046158e-04 + 1.28032615e-04 7.20196905e-05 3.20091782e-05 8.00235860e-06 0.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 5.14330820e-07 5.21272731e-07 5.28308337e-07 5.35438902e-07 5.42665708e-07 + 5.49990054e-07 5.57413257e-07 5.64936650e-07 5.72561587e-07 5.80289437e-07 + 5.88121589e-07 5.96059452e-07 6.04104453e-07 6.12258036e-07 6.20521668e-07 + 6.28896834e-07 6.37385040e-07 6.45987811e-07 6.54706693e-07 6.63543253e-07 + 6.72499081e-07 6.81575785e-07 6.90774997e-07 7.00098371e-07 7.09547582e-07 + 7.19124329e-07 7.28830332e-07 7.38667338e-07 7.48637114e-07 7.58741451e-07 + 7.68982166e-07 7.79361100e-07 7.89880118e-07 8.00541111e-07 8.11345996e-07 + 8.22296713e-07 8.33395232e-07 8.44643548e-07 8.56043682e-07 8.67597683e-07 + 8.79307628e-07 8.91175622e-07 9.03203799e-07 9.15394319e-07 9.27749374e-07 + 9.40271185e-07 9.52962003e-07 9.65824108e-07 9.78859813e-07 9.92071461e-07 + 1.00546143e-06 1.01903211e-06 1.03278597e-06 1.04672545e-06 1.06085308e-06 + 1.07517139e-06 1.08968295e-06 1.10439038e-06 1.11929631e-06 1.13440343e-06 + 1.14971444e-06 1.16523211e-06 1.18095922e-06 1.19689860e-06 1.21305311e-06 + 1.22942566e-06 1.24601919e-06 1.26283668e-06 1.27988116e-06 1.29715568e-06 + 1.31466336e-06 1.33240734e-06 1.35039081e-06 1.36861700e-06 1.38708919e-06 + 1.40581070e-06 1.42478490e-06 1.44401519e-06 1.46350502e-06 1.48325792e-06 + 1.50327741e-06 1.52356711e-06 1.54413066e-06 1.56497176e-06 1.58609414e-06 + 1.60750162e-06 1.62919803e-06 1.65118728e-06 1.67347331e-06 1.69606014e-06 + 1.71895182e-06 1.74215248e-06 1.76566627e-06 1.78949742e-06 1.81365023e-06 + 1.83812902e-06 1.86293820e-06 1.88808224e-06 1.91356564e-06 1.93939299e-06 + 1.96556893e-06 1.99209816e-06 2.01898547e-06 2.04623566e-06 2.07385366e-06 + 2.10184441e-06 2.13021296e-06 2.15896439e-06 2.18810388e-06 2.21763667e-06 + 2.24756806e-06 2.27790343e-06 2.30864824e-06 2.33980801e-06 2.37138834e-06 + 2.40339491e-06 2.43583348e-06 2.46870986e-06 2.50202998e-06 2.53579982e-06 + 2.57002545e-06 2.60471302e-06 2.63986877e-06 2.67549902e-06 2.71161016e-06 + 2.74820870e-06 2.78530121e-06 2.82289435e-06 2.86099489e-06 2.89960967e-06 + 2.93874563e-06 2.97840981e-06 3.01860934e-06 3.05935144e-06 3.10064343e-06 + 3.14249274e-06 3.18490689e-06 3.22789350e-06 3.27146030e-06 3.31561513e-06 + 3.36036590e-06 3.40572068e-06 3.45168761e-06 3.49827496e-06 3.54549109e-06 + 3.59334450e-06 3.64184379e-06 3.69099766e-06 3.74081497e-06 3.79130466e-06 + 3.84247581e-06 3.89433762e-06 3.94689940e-06 4.00017061e-06 4.05416081e-06 + 4.10887972e-06 4.16433718e-06 4.22054314e-06 4.27750771e-06 4.33524113e-06 + 4.39375377e-06 4.45305616e-06 4.51315895e-06 4.57407295e-06 4.63580911e-06 + 4.69837851e-06 4.76179241e-06 4.82606221e-06 4.89119946e-06 4.95721586e-06 + 5.02412329e-06 5.09193376e-06 5.16065947e-06 5.23031277e-06 5.30090617e-06 + 5.37245238e-06 5.44496424e-06 5.51845479e-06 5.59293724e-06 5.66842498e-06 + 5.74493158e-06 5.82247079e-06 5.90105654e-06 5.98070296e-06 6.06142436e-06 + 6.14323526e-06 6.22615036e-06 6.31018456e-06 6.39535297e-06 6.48167090e-06 + 6.56915386e-06 6.65781757e-06 6.74767798e-06 6.83875123e-06 6.93105369e-06 + 7.02460195e-06 7.11941284e-06 7.21550338e-06 7.31289086e-06 7.41159278e-06 + 7.51162687e-06 7.61301112e-06 7.71576375e-06 7.81990322e-06 7.92544827e-06 + 8.03241786e-06 8.14083121e-06 8.25070782e-06 8.36206742e-06 8.47493005e-06 + 8.58931598e-06 8.70524577e-06 8.82274026e-06 8.94182058e-06 9.06250812e-06 + 9.18482457e-06 9.30879193e-06 9.43443248e-06 9.56176879e-06 9.69082375e-06 + 9.82162057e-06 9.95418275e-06 1.00885341e-05 1.02246988e-05 1.03627013e-05 + 1.05025665e-05 1.06443194e-05 1.07879855e-05 1.09335907e-05 1.10811611e-05 + 1.12307232e-05 1.13823040e-05 1.15359307e-05 1.16916309e-05 1.18494326e-05 + 1.20093641e-05 1.21714542e-05 1.23357320e-05 1.25022271e-05 1.26709694e-05 + 1.28419891e-05 1.30153172e-05 1.31909846e-05 1.33690230e-05 1.35494644e-05 + 1.37323412e-05 1.39176862e-05 1.41055329e-05 1.42959150e-05 1.44888666e-05 + 1.46844225e-05 1.48826178e-05 1.50834881e-05 1.52870696e-05 1.54933988e-05 + 1.57025128e-05 1.59144493e-05 1.61292462e-05 1.63469423e-05 1.65675766e-05 + 1.67911888e-05 1.70178190e-05 1.72475081e-05 1.74802973e-05 1.77162285e-05 + 1.79553440e-05 1.81976869e-05 1.84433006e-05 1.86922294e-05 1.89445180e-05 + 1.92002117e-05 1.94593565e-05 1.97219989e-05 1.99881863e-05 2.02579664e-05 + 2.05313877e-05 2.08084993e-05 2.10893511e-05 2.13739936e-05 2.16624779e-05 + 2.19548558e-05 2.22511800e-05 2.25515036e-05 2.28558807e-05 2.31643660e-05 + 2.34770149e-05 2.37938836e-05 2.41150291e-05 2.44405091e-05 2.47703821e-05 + 2.51047073e-05 2.54435449e-05 2.57869559e-05 2.61350018e-05 2.64877453e-05 + 2.68452498e-05 2.72075795e-05 2.75747995e-05 2.79469759e-05 2.83241756e-05 + 2.87064663e-05 2.90939168e-05 2.94865967e-05 2.98845766e-05 3.02879280e-05 + 3.06967235e-05 3.11110364e-05 3.15309413e-05 3.19565137e-05 3.23878300e-05 + 3.28249678e-05 3.32680056e-05 3.37170230e-05 3.41721009e-05 3.46333209e-05 + 3.51007660e-05 3.55745202e-05 3.60546687e-05 3.65412977e-05 3.70344947e-05 + 3.75343484e-05 3.80409486e-05 3.85543864e-05 3.90747540e-05 3.96021450e-05 + 4.01366543e-05 4.06783777e-05 4.12274128e-05 4.17838582e-05 4.23478140e-05 + 4.29193814e-05 4.34986633e-05 4.40857637e-05 4.46807882e-05 4.52838437e-05 + 4.58950387e-05 4.65144829e-05 4.71422878e-05 4.77785661e-05 4.84234323e-05 + 4.90770022e-05 4.97393933e-05 5.04107247e-05 5.10911171e-05 5.17806927e-05 + 5.24795755e-05 5.31878910e-05 5.39057667e-05 5.46333316e-05 5.53707164e-05 + 5.61180536e-05 5.68754776e-05 5.76431246e-05 5.84211325e-05 5.92096411e-05 + 6.00087922e-05 6.08187295e-05 6.16395984e-05 6.24715466e-05 6.33147236e-05 + 6.41692809e-05 6.50353721e-05 6.59131530e-05 6.68027813e-05 6.77044168e-05 + 6.86182217e-05 6.95443602e-05 7.04829988e-05 7.14343061e-05 7.23984533e-05 + 7.33756135e-05 7.43659624e-05 7.53696780e-05 7.63869407e-05 7.74179335e-05 + 7.84628415e-05 7.95218526e-05 8.05951571e-05 8.16829480e-05 8.27854208e-05 + 8.39027737e-05 8.50352074e-05 8.61829256e-05 8.73461345e-05 8.85250432e-05 + 8.97198636e-05 9.09308104e-05 9.21581014e-05 9.34019571e-05 9.46626011e-05 + 9.59402600e-05 9.72351634e-05 9.85475441e-05 9.98776379e-05 1.01225684e-04 + 1.02591925e-04 1.03976605e-04 1.05379975e-04 1.06802286e-04 1.08243794e-04 + 1.09704758e-04 1.11185441e-04 1.12686108e-04 1.14207029e-04 1.15748479e-04 + 1.17310733e-04 1.18894074e-04 1.20498784e-04 1.22125153e-04 1.23773474e-04 + 1.25444041e-04 1.27137157e-04 1.28853124e-04 1.30592251e-04 1.32354852e-04 + 1.34141242e-04 1.35951743e-04 1.37786681e-04 1.39646384e-04 1.41531188e-04 + 1.43441431e-04 1.45377457e-04 1.47339613e-04 1.49328252e-04 1.51343732e-04 + 1.53386415e-04 1.55456667e-04 1.57554862e-04 1.59681377e-04 1.61836592e-04 + 1.64020897e-04 1.66234683e-04 1.68478349e-04 1.70752297e-04 1.73056937e-04 + 1.75392682e-04 1.77759953e-04 1.80159175e-04 1.82590779e-04 1.85055202e-04 + 1.87552888e-04 1.90084285e-04 1.92649848e-04 1.95250038e-04 1.97885323e-04 + 2.00556177e-04 2.03263079e-04 2.06006515e-04 2.08786981e-04 2.11604973e-04 + 2.14461001e-04 2.17355576e-04 2.20289219e-04 2.23262457e-04 2.26275825e-04 + 2.29329865e-04 2.32425124e-04 2.35562161e-04 2.38741538e-04 2.41963826e-04 + 2.45229606e-04 2.48539465e-04 2.51893996e-04 2.55293803e-04 2.58739497e-04 + 2.62231698e-04 2.65771033e-04 2.69358138e-04 2.72993659e-04 2.76678248e-04 + 2.80412567e-04 2.84197289e-04 2.88033093e-04 2.91920669e-04 2.95860715e-04 + 2.99853940e-04 3.03901062e-04 3.08002807e-04 3.12159914e-04 3.16373129e-04 + 3.20643209e-04 3.24970923e-04 3.29357048e-04 3.33802372e-04 3.38307695e-04 + 3.42873826e-04 3.47501586e-04 3.52191806e-04 3.56945331e-04 3.61763013e-04 + 3.66645720e-04 3.71594328e-04 3.76609728e-04 3.81692821e-04 3.86844520e-04 + 3.92065751e-04 3.97357453e-04 4.02720577e-04 4.08156087e-04 4.13664960e-04 + 4.19248186e-04 4.24906769e-04 4.30641726e-04 4.36454087e-04 4.42344897e-04 + 4.48315216e-04 4.54366115e-04 4.60498684e-04 4.66714024e-04 4.73013252e-04 + 4.79397500e-04 4.85867917e-04 4.92425665e-04 4.99071922e-04 5.05807884e-04 + 5.12634761e-04 5.19553780e-04 5.26566185e-04 5.33673236e-04 5.40876211e-04 + 5.48176405e-04 5.55575129e-04 5.63073713e-04 5.70673505e-04 5.78375872e-04 + 5.86182197e-04 5.94093885e-04 6.02112356e-04 6.10239052e-04 6.18475434e-04 + 6.26822982e-04 6.35283197e-04 6.43857599e-04 6.52547729e-04 6.61355151e-04 + 6.70281445e-04 6.79328218e-04 6.88497095e-04 6.97789724e-04 7.07207775e-04 + 7.16752941e-04 7.26426939e-04 7.36231506e-04 7.46168405e-04 7.56239422e-04 + 7.66446368e-04 7.76791076e-04 7.87275407e-04 7.97901244e-04 8.08670498e-04 + 8.19585105e-04 8.30647025e-04 8.41858248e-04 8.53220789e-04 8.64736690e-04 + 8.76408020e-04 8.88236878e-04 9.00225390e-04 9.12375711e-04 9.24690024e-04 + 9.37170543e-04 9.49819512e-04 9.62639203e-04 9.75631922e-04 9.88800002e-04 + 1.00214581e-03 1.01567175e-03 1.02938025e-03 1.04327377e-03 1.05735481e-03 + 1.07162590e-03 1.08608961e-03 1.10074854e-03 1.11560531e-03 1.13066261e-03 + 1.14592314e-03 1.16138964e-03 1.17706488e-03 1.19295170e-03 1.20905294e-03 + 1.22537150e-03 1.24191031e-03 1.25867234e-03 1.27566061e-03 1.29287818e-03 + 1.31032812e-03 1.32801359e-03 1.34593776e-03 1.36410385e-03 1.38251512e-03 + 1.40117490e-03 1.42008652e-03 1.43925340e-03 1.45867896e-03 1.47836672e-03 + 1.49832020e-03 1.51854299e-03 1.53903873e-03 1.55981110e-03 1.58086383e-03 + 1.60220071e-03 1.62382558e-03 1.64574231e-03 1.66795486e-03 1.69046721e-03 + 1.71328340e-03 1.73640755e-03 1.75984380e-03 1.78359637e-03 1.80766953e-03 + 1.83206760e-03 1.85679497e-03 1.88185609e-03 1.90725546e-03 1.93299764e-03 + 1.95908726e-03 1.98552901e-03 2.01232765e-03 2.03948799e-03 2.06701491e-03 + 2.09491336e-03 2.12318836e-03 2.15184498e-03 2.18088838e-03 2.21032378e-03 + 2.24015647e-03 2.27039180e-03 2.30103523e-03 2.33209225e-03 2.36356844e-03 + 2.39546947e-03 2.42780106e-03 2.46056903e-03 2.49377928e-03 2.52743776e-03 + 2.56155052e-03 2.59612371e-03 2.63116353e-03 2.66667628e-03 2.70266835e-03 + 2.73914620e-03 2.77611639e-03 2.81358556e-03 2.85156046e-03 2.89004791e-03 + 2.92905481e-03 2.96858820e-03 3.00865516e-03 3.04926291e-03 3.09041874e-03 + 3.13213004e-03 3.17440433e-03 3.21724919e-03 3.26067232e-03 3.30468154e-03 + 3.34928475e-03 3.39448996e-03 3.44030531e-03 3.48673903e-03 3.53379947e-03 + 3.58149507e-03 3.62983443e-03 3.67882622e-03 3.72847925e-03 3.77880244e-03 + 3.82980485e-03 3.88149563e-03 3.93388409e-03 3.98697963e-03 4.04079180e-03 + 4.09533027e-03 4.15060484e-03 4.20662546e-03 4.26340218e-03 4.32094522e-03 + 4.37926491e-03 4.43837175e-03 4.49827634e-03 4.55898947e-03 4.62052205e-03 + 4.68288512e-03 4.74608991e-03 4.81014777e-03 4.87507022e-03 4.94086893e-03 + 5.00755572e-03 5.07514258e-03 5.14364166e-03 5.21306527e-03 5.28342588e-03 + 5.35473616e-03 5.42700890e-03 5.50025711e-03 5.57449395e-03 5.64973276e-03 + 5.72598707e-03 5.80327058e-03 5.88159719e-03 5.96098097e-03 6.04143618e-03 + 6.12297730e-03 6.20561898e-03 6.28937607e-03 6.37426363e-03 6.46029692e-03 + 6.54749139e-03 6.63586273e-03 6.72542681e-03 6.81619973e-03 6.90819782e-03 + 7.00143760e-03 7.09593584e-03 7.19170951e-03 7.28877585e-03 7.38715228e-03 + 7.48685650e-03 7.58790642e-03 7.69032021e-03 7.79411628e-03 7.89931328e-03 + 8.00593013e-03 8.11398598e-03 8.22350025e-03 8.33449264e-03 8.44698309e-03 + 8.56099182e-03 8.67653932e-03 8.79364636e-03 8.91233400e-03 9.03262356e-03 + 9.15453666e-03 9.27809523e-03 9.40332146e-03 9.53023786e-03 9.65886725e-03 + 9.78923276e-03 9.92135780e-03 1.00552661e-02 1.01909818e-02 1.03285293e-02 + 1.04679332e-02 1.06092186e-02 1.07524110e-02 1.08975360e-02 1.10446198e-02 + 1.11936888e-02 1.13447697e-02 1.14978898e-02 1.16530766e-02 1.18103578e-02 + 1.19697620e-02 1.21313176e-02 1.22950537e-02 1.24609997e-02 1.26291855e-02 + 1.27996413e-02 1.29723978e-02 1.31474859e-02 1.33249372e-02 1.35047836e-02 + 1.36870573e-02 1.38717912e-02 1.40590185e-02 1.42487727e-02 1.44410881e-02 + 1.46359991e-02 1.48335408e-02 1.50337487e-02 1.52366589e-02 1.54423077e-02 + 1.56507322e-02 1.58619697e-02 1.60760584e-02 1.62930365e-02 1.65129433e-02 + 1.67358181e-02 1.69617010e-02 1.71906327e-02 1.74226542e-02 1.76578074e-02 + 1.78961344e-02 1.81376781e-02 1.83824819e-02 1.86305898e-02 1.88820465e-02 + 1.91368970e-02 1.93951872e-02 1.96569636e-02 1.99222732e-02 2.01911636e-02 + 2.04636833e-02 2.07398811e-02 2.10198068e-02 2.13035106e-02 2.15910436e-02 + 2.18824574e-02 2.21778044e-02 2.24771377e-02 2.27805111e-02 2.30879791e-02 + 2.33995970e-02 2.37154208e-02 2.40355073e-02 2.43599140e-02 2.46886991e-02 + 2.50219219e-02 2.53596422e-02 2.57019207e-02 2.60488189e-02 2.64003992e-02 + 2.67567248e-02 2.71178596e-02 2.74838687e-02 2.78548179e-02 2.82307737e-02 + 2.86118038e-02 2.89979766e-02 2.93893616e-02 2.97860291e-02 3.01880504e-02 + 3.05954978e-02 3.10084445e-02 3.14269648e-02 3.18511338e-02 3.22810278e-02 + 3.27167240e-02 3.31583009e-02 3.36058377e-02 3.40594148e-02 3.45191140e-02 + 3.49850176e-02 3.54572096e-02 3.59357747e-02 3.64207990e-02 3.69123696e-02 + 3.74105750e-02 3.79155046e-02 3.84272493e-02 3.89459010e-02 3.94715529e-02 + 4.00042995e-02 4.05442365e-02 4.10914611e-02 4.16460716e-02 4.22081677e-02 + 4.27778503e-02 4.33552219e-02 4.39403863e-02 4.45334487e-02 4.51345155e-02 + 4.57436950e-02 4.63610966e-02 4.69868312e-02 4.76210113e-02 4.82637510e-02 + 4.89151657e-02 4.95753725e-02 5.02444901e-02 5.09226388e-02 5.16099405e-02 + 5.23065186e-02 5.30124984e-02 5.37280069e-02 5.44531725e-02 5.51881257e-02 + 5.59329985e-02 5.66879248e-02 5.74530404e-02 5.82284827e-02 5.90143912e-02 + 5.98109070e-02 6.06181734e-02 6.14363354e-02 6.22655402e-02 6.31059367e-02 + 6.39576760e-02 6.48209113e-02 6.56957975e-02 6.65824922e-02 6.74811545e-02 + 6.83919460e-02 6.93150305e-02 7.02505738e-02 7.11987441e-02 7.21597119e-02 + 7.31336498e-02 7.41207329e-02 7.51211387e-02 7.61350469e-02 7.71626398e-02 + 7.82041021e-02 7.92596210e-02 8.03293862e-02 8.14135900e-02 8.25124273e-02 + 8.36260956e-02 8.47547950e-02 8.58987284e-02 8.70581015e-02 8.82331227e-02 + 8.94240030e-02 9.06309567e-02 9.18542005e-02 9.30939545e-02 9.43504414e-02 + 9.56238870e-02 9.69145203e-02 9.82225733e-02 9.95482810e-02 1.00891882e-01 + 1.02253617e-01 1.03633732e-01 1.05032474e-01 1.06450095e-01 1.07886849e-01 + 1.09342995e-01 1.10818795e-01 1.12314514e-01 1.13830420e-01 1.15366786e-01 + 1.16923889e-01 1.18502008e-01 1.20101427e-01 1.21722433e-01 1.23365318e-01 + 1.25030377e-01 1.26717909e-01 1.28428217e-01 1.30161610e-01 1.31918398e-01 + 1.33698897e-01 1.35503428e-01 1.37332315e-01 1.39185886e-01 1.41064474e-01 + 1.42968418e-01 1.44898059e-01 1.46853745e-01 1.48835827e-01 1.50844660e-01 + 1.52880607e-01 1.54944033e-01 1.57035309e-01 1.59154811e-01 1.61302919e-01 + 1.63480021e-01 1.65686507e-01 1.67922774e-01 1.70189223e-01 1.72486263e-01 + 1.74814306e-01 1.77173771e-01 1.79565081e-01 1.81988667e-01 1.84444963e-01 + 1.86934413e-01 1.89457462e-01 1.92014565e-01 1.94606181e-01 1.97232776e-01 + 1.99894822e-01 2.02592797e-01 2.05327188e-01 2.08098484e-01 2.10907184e-01 + 2.13753793e-01 2.16638823e-01 2.19562792e-01 2.22526226e-01 2.25529657e-01 + 2.28573626e-01 2.31658678e-01 2.34785370e-01 2.37954263e-01 2.41165926e-01 + 2.44420936e-01 2.47719880e-01 2.51063349e-01 2.54451945e-01 2.57886277e-01 + 2.61366962e-01 2.64894626e-01 2.68469902e-01 2.72093434e-01 2.75765873e-01 + 2.79487878e-01 2.83260119e-01 2.87083274e-01 2.90958030e-01 2.94885084e-01 + 2.98865141e-01 3.02898917e-01 3.06987136e-01 3.11130534e-01 3.15329856e-01 + 3.19585855e-01 3.23899298e-01 3.28270959e-01 3.32701624e-01 3.37192090e-01 + 3.41743164e-01 3.46355663e-01 3.51030417e-01 3.55768266e-01 3.60570062e-01 + 3.65436668e-01 3.70368958e-01 3.75367819e-01 3.80434149e-01 3.85568860e-01 + 3.90772873e-01 3.96047126e-01 4.01392564e-01 4.06810150e-01 4.12300857e-01 + 4.17865672e-01 4.23505595e-01 4.29221640e-01 4.35014834e-01 4.40886219e-01 + 4.46836850e-01 4.52867796e-01 4.58980142e-01 4.65174986e-01 4.71453442e-01 + 4.77816637e-01 4.84265717e-01 4.90801840e-01 4.97426181e-01 5.04139930e-01 + 5.10944295e-01 5.17840498e-01 5.24829779e-01 5.31913394e-01 5.39092616e-01 + 5.46368736e-01 5.53743062e-01 5.61216919e-01 5.68791650e-01 5.76468618e-01 + 5.84249201e-01 5.92134798e-01 6.00126828e-01 6.08226725e-01 6.16435947e-01 + 6.24755968e-01 6.33188284e-01 6.41734412e-01 6.50395886e-01 6.59174263e-01 + 6.68071123e-01 6.77088063e-01 6.86226704e-01 6.95488690e-01 7.04875684e-01 + 7.14389374e-01 7.24031471e-01 7.33803706e-01 7.43707837e-01 7.53745644e-01 + 7.63918931e-01 7.74229527e-01 7.84679284e-01 7.95270082e-01 8.06003823e-01 + 8.16882438e-01 8.27907880e-01 8.39082133e-01 8.50407205e-01 8.61885131e-01 + 8.73517974e-01 8.85307825e-01 8.97256804e-01 9.09367057e-01 9.21640763e-01 + 9.34080126e-01 9.46687383e-01 9.59464800e-01 9.72414674e-01 9.85539332e-01 + 9.98841133e-01 1.01232247e+00 1.02598576e+00 1.03983347e+00 1.05386807e+00 + 1.06809210e+00 1.08250812e+00 1.09711870e+00 1.11192649e+00 1.12693414e+00 + 1.14214434e+00 1.15755983e+00 1.17318339e+00 1.18901782e+00 1.20506596e+00 + 1.22133071e+00 1.23781498e+00 1.25452174e+00 1.27145399e+00 1.28861478e+00 + 1.30600718e+00 1.32363433e+00 1.34149939e+00 1.35960557e+00 1.37795614e+00 + 1.39655438e+00 1.41540364e+00 1.43450731e+00 1.45386882e+00 1.47349165e+00 + 1.49337933e+00 1.51353544e+00 1.53396359e+00 1.55466746e+00 1.57565077e+00 + 1.59691729e+00 1.61847085e+00 1.64031531e+00 1.66245461e+00 1.68489272e+00 + 1.70763367e+00 1.73068156e+00 1.75404053e+00 1.77771477e+00 1.80170855e+00 + 1.82602617e+00 1.85067200e+00 1.87565047e+00 1.90096608e+00 1.92662338e+00 + 1.95262697e+00 1.97898153e+00 2.00569179e+00 2.03276257e+00 2.06019871e+00 + 2.08800517e+00 2.11618692e+00 2.14474905e+00 2.17369667e+00 2.20303501e+00 + 2.23276932e+00 2.26290495e+00 2.29344733e+00 2.32440193e+00 2.35577433e+00 + 2.38757016e+00 2.41979514e+00 2.45245505e+00 2.48555578e+00 2.51910327e+00 + 2.55310354e+00 2.58756272e+00 2.62248699e+00 2.65788264e+00 2.69375602e+00 + 2.73011358e+00 2.76696186e+00 2.80430747e+00 2.84215715e+00 2.88051767e+00 + 2.91939595e+00 2.95879897e+00 2.99873381e+00 3.03920765e+00 3.08022776e+00 + 3.12180152e+00 3.16393640e+00 3.20663997e+00 3.24991992e+00 3.29378401e+00 + 3.33824013e+00 3.38329628e+00 3.42896055e+00 3.47524115e+00 3.52214640e+00 + 3.56968472e+00 3.61786467e+00 3.66669491e+00 3.71618420e+00 3.76634145e+00 + 3.81717567e+00 3.86869600e+00 3.92091170e+00 3.97383215e+00 4.02746687e+00 + 4.08182549e+00 4.13691779e+00 4.19275367e+00 4.24934317e+00 4.30669645e+00 + 4.36482383e+00 4.42373576e+00 4.48344281e+00 4.54395573e+00 4.60528539e+00 + 4.66744282e+00 4.73043919e+00 4.79428581e+00 4.85899417e+00 4.92457590e+00 + 4.99104278e+00 5.05840677e+00 5.12667997e+00 5.19587464e+00 5.26600324e+00 + 5.33707836e+00 5.40911278e+00 5.48211944e+00 5.55611148e+00 5.63110218e+00 + 5.70710504e+00 5.78413370e+00 5.86220201e+00 5.94132401e+00 6.02151392e+00 + 6.10278615e+00 6.18515531e+00 6.26863620e+00 6.35324384e+00 6.43899342e+00 + 6.52590036e+00 6.61398028e+00 6.70324902e+00 6.79372261e+00 6.88541732e+00 + 6.97834963e+00 7.07253625e+00 7.16799410e+00 7.26474035e+00 7.36279238e+00 + 7.46216781e+00 7.56288451e+00 7.66496058e+00 7.76841437e+00 7.87326448e+00 + 7.97952974e+00 8.08722926e+00 8.19638240e+00 8.30700878e+00 8.41912828e+00 + 8.53276106e+00 8.64792753e+00 8.76464840e+00 8.88294465e+00 9.00283754e+00 + 9.12434863e+00 9.24749974e+00 9.37231303e+00 9.49881091e+00 9.62701614e+00 + 9.75695174e+00 9.88864109e+00 1.00221078e+01 1.01573760e+01 1.02944699e+01 + 1.04334141e+01 1.05742336e+01 1.07169538e+01 1.08616003e+01 1.10081990e+01 + 1.11567764e+01 1.13073592e+01 1.14599743e+01 1.16146493e+01 1.17714120e+01 + 1.19302904e+01 1.20913133e+01 1.22545094e+01 1.24199083e+01 1.25875395e+01 + 1.27574332e+01 1.29296200e+01 1.31041307e+01 1.32809969e+01 1.34602502e+01 + 1.36419229e+01 1.38260476e+01 1.40126574e+01 1.42017859e+01 1.43934671e+01 + 1.45877353e+01 1.47846257e+01 1.49841734e+01 1.51864144e+01 1.53913851e+01 + 1.55991223e+01 1.58096632e+01 1.60230459e+01 1.62393086e+01 1.64584901e+01 + 1.66806300e+01 1.69057680e+01 1.71339448e+01 1.73652012e+01 1.75995789e+01 + 1.78371200e+01 1.80778672e+01 1.83218638e+01 1.85691535e+01 1.88197809e+01 + 1.90737911e+01 1.93312296e+01 1.95921427e+01 1.98565774e+01 2.01245812e+01 + 2.03962022e+01 2.06714892e+01 2.09504918e+01 2.12332601e+01 2.15198449e+01 + 2.18102977e+01 2.21046708e+01 2.24030170e+01 2.27053900e+01 2.30118441e+01 + 2.33224344e+01 2.36372168e+01 2.39562477e+01 2.42795846e+01 2.46072856e+01 + 2.49394095e+01 2.52760162e+01 2.56171659e+01 2.59629202e+01 2.63133411e+01 + 2.66684917e+01 2.70284357e+01 2.73932378e+01 2.77629637e+01 2.81376798e+01 + 2.85174534e+01 2.89023527e+01 2.92924471e+01 2.96878066e+01 3.00885022e+01 + 3.04946060e+01 3.09061910e+01 3.13233311e+01 3.17461013e+01 3.21745777e+01 + 3.26088372e+01 3.30489579e+01 3.34950189e+01 3.39471004e+01 3.44052836e+01 + 3.48696509e+01 3.53402857e+01 3.58172727e+01 3.63006976e+01 3.67906473e+01 + 3.72872097e+01 3.77904743e+01 3.83005315e+01 3.88174728e+01 3.93413913e+01 + 3.98723811e+01 4.04105377e+01 4.09559578e+01 4.15087394e+01 4.20689818e+01 + 4.26367859e+01 4.32122536e+01 4.37954883e+01 4.43865950e+01 4.49856798e+01 + 4.55928504e+01 4.62082161e+01 4.68318873e+01 4.74639761e+01 4.81045963e+01 + 4.87538629e+01 4.94118926e+01 5.00788037e+01 5.07547161e+01 5.14397513e+01 + 5.21340324e+01 5.28376842e+01 5.35508332e+01 5.42736075e+01 5.50061371e+01 + 5.57485536e+01 5.65009905e+01 5.72635830e+01 5.80364683e+01 5.88197851e+01 + 5.96136743e+01 6.04182787e+01 6.12337427e+01 6.20602131e+01 6.28978383e+01 + 6.37467689e+01 6.46071576e+01 6.54791588e+01 6.63629295e+01 6.72586284e+01 + 6.81664165e+01 6.90864570e+01 7.00189152e+01 7.09639589e+01 7.19217577e+01 + 7.28924840e+01 7.38763121e+01 7.48734189e+01 7.58839837e+01 7.69081880e+01 + 7.79462160e+01 7.89982542e+01 8.00644917e+01 8.11451203e+01 8.22403340e+01 + 8.33503299e+01 8.44753073e+01 8.56154685e+01 8.67710184e+01 8.79421648e+01 + 8.91291181e+01 9.03320917e+01 9.15513018e+01 9.27869675e+01 9.40393110e+01 + 9.53085573e+01 9.65949346e+01 9.78986742e+01 9.92200103e+01 1.00559180e+02 + 1.01916425e+02 1.03291989e+02 1.04686118e+02 1.06099064e+02 1.07531081e+02 + 1.08982425e+02 1.10453359e+02 1.11944145e+02 1.13455052e+02 1.14986352e+02 + 1.16538321e+02 1.18111235e+02 1.19705380e+02 1.21321041e+02 1.22958508e+02 + 1.24618076e+02 1.26300043e+02 1.28004712e+02 1.29732388e+02 1.31483383e+02 + 1.33258011e+02 1.35056592e+02 1.36879447e+02 1.38726906e+02 1.40599300e+02 + 1.42496965e+02 1.44420243e+02 1.46369480e+02 1.48345025e+02 1.50347234e+02 + 1.52376467e+02 1.54433089e+02 1.56517469e+02 1.58629981e+02 1.60771006e+02 + 1.62940929e+02 1.65140138e+02 1.67369031e+02 1.69628007e+02 1.71917472e+02 + 1.74237838e+02 1.76589522e+02 1.78972947e+02 1.81388540e+02 1.83836737e+02 + 1.86317977e+02 1.88832706e+02 1.91381377e+02 1.93964447e+02 1.96582380e+02 + 1.99235648e+02 2.01924727e+02 2.04650100e+02 2.07412257e+02 2.10211696e+02 + 2.13048918e+02 2.15924434e+02 2.18838761e+02 2.21792423e+02 2.24785950e+02 + 2.27819880e+02 2.30894760e+02 2.34011141e+02 2.37169584e+02 2.40370656e+02 + 2.43614933e+02 2.46902998e+02 2.50235442e+02 2.53612863e+02 2.57035870e+02 + 2.60505077e+02 2.64021108e+02 2.67584595e+02 2.71196178e+02 2.74856506e+02 + 2.78566238e+02 2.82326040e+02 2.86136587e+02 2.89998566e+02 2.93912670e+02 + 2.97879602e+02 3.01900076e+02 3.05974814e+02 3.10104549e+02 3.14290023e+02 + 3.18531988e+02 3.22831206e+02 3.27188451e+02 3.31604506e+02 3.36080164e+02 + 3.40616230e+02 3.45213519e+02 3.49872858e+02 3.54595083e+02 3.59381045e+02 + 3.64231602e+02 3.69147628e+02 3.74130004e+02 3.79179628e+02 3.84297406e+02 + 3.89484259e+02 3.94741119e+02 4.00068931e+02 4.05468651e+02 4.10941252e+02 + 4.16487716e+02 4.22109041e+02 4.27806237e+02 4.33580327e+02 4.39432351e+02 + 4.45363359e+02 4.51374417e+02 4.57466607e+02 4.63641023e+02 4.69898775e+02 + 4.76240987e+02 4.82668801e+02 4.89183370e+02 4.95785866e+02 5.02477476e+02 + 5.09259403e+02 5.16132865e+02 5.23099098e+02 5.30159354e+02 5.37314902e+02 + 5.44567029e+02 5.51917037e+02 5.59366248e+02 5.66916001e+02 5.74567652e+02 + 5.82322578e+02 5.90182172e+02 5.98147847e+02 6.06221034e+02 6.14403185e+02 + 6.22695770e+02 6.31100280e+02 6.39618226e+02 6.48251138e+02 6.57000568e+02 + 6.65868089e+02 6.74855295e+02 6.83963800e+02 6.93195244e+02 7.02551283e+02 + 7.12033601e+02 7.21643902e+02 7.31383912e+02 7.41255383e+02 7.51260090e+02 + 7.61399829e+02 7.71676425e+02 7.82091723e+02 7.92647596e+02 8.03345942e+02 + 8.14188683e+02 8.25177768e+02 8.36315173e+02 8.47602899e+02 8.59042975e+02 + 8.70637458e+02 8.82388431e+02 8.94298006e+02 9.06368325e+02 9.18601557e+02 + 9.30999900e+02 9.43565584e+02 9.56300866e+02 9.69208036e+02 9.82289413e+02 + 9.95547350e+02 1.00898423e+03 1.02260247e+03 1.03640451e+03 1.05039283e+03 + 1.06456996e+03 1.07893844e+03 1.09350084e+03 1.10825980e+03 1.12321795e+03 + 1.13837800e+03 1.15374266e+03 1.16931470e+03 1.18509691e+03 1.20109213e+03 + 1.21730325e+03 1.23373316e+03 1.25038483e+03 1.26726124e+03 1.28436543e+03 + 1.30170048e+03 1.31926950e+03 1.33707565e+03 1.35512213e+03 1.37341218e+03 + 1.39194909e+03 1.41073620e+03 1.42977687e+03 1.44907454e+03 1.46863266e+03 + 1.48845476e+03 1.50854440e+03 1.52890519e+03 1.54954078e+03 1.57045490e+03 + 1.59165129e+03 1.61313377e+03 1.63490620e+03 1.65697249e+03 1.67933661e+03 + 1.70200257e+03 1.72497446e+03 1.74825640e+03 1.77185258e+03 1.79576723e+03 + 1.82000465e+03 1.84456921e+03 1.86946532e+03 1.89469745e+03 1.92027014e+03 + 1.94618798e+03 1.97245563e+03 1.99907782e+03 2.02605932e+03 2.05340500e+03 + 2.08111975e+03 2.10920858e+03 2.13767652e+03 2.16652868e+03 2.19577027e+03 + 2.22540653e+03 2.25544279e+03 2.28588445e+03 2.31673697e+03 2.34800592e+03 + 2.37969690e+03 2.41181561e+03 2.44436783e+03 2.47735940e+03 2.51079626e+03 + 2.54468442e+03 2.57902996e+03 2.61383907e+03 2.64911799e+03 2.68487308e+03 + 2.72111074e+03 2.75783751e+03 2.79505998e+03 2.83278484e+03 2.87101887e+03 + 2.90976894e+03 2.94904202e+03 2.98884517e+03 3.02918554e+03 3.07007039e+03 + 3.11150706e+03 3.15350299e+03 3.19606575e+03 3.23920297e+03 3.28292242e+03 + 3.32723194e+03 3.37213951e+03 3.41765320e+03 3.46378118e+03 3.51053175e+03 + 3.55791332e+03 3.60593439e+03 3.65460360e+03 3.70392970e+03 3.75392155e+03 + 3.80458814e+03 3.85593857e+03 3.90798208e+03 3.96072802e+03 4.01418588e+03 + 4.06836525e+03 4.12327588e+03 4.17892763e+03 4.23533052e+03 4.29249467e+03 + 4.35043037e+03 4.40914803e+03 4.46865819e+03 4.52897157e+03 4.59009899e+03 + 4.65205144e+03 4.71484007e+03 4.77847616e+03 4.84297113e+03 4.90833660e+03 + 4.97458430e+03 5.04172615e+03 5.10977421e+03 5.17874071e+03 5.24863805e+03 + 5.31947879e+03 5.39127567e+03 5.46404159e+03 5.53778963e+03 5.61253304e+03 + 5.68828527e+03 5.76505992e+03 5.84287079e+03 5.92173188e+03 6.00165735e+03 + 6.08266158e+03 6.16475912e+03 6.24796473e+03 6.33229336e+03 6.41776017e+03 + 6.50438053e+03 6.59216999e+03 6.68114436e+03 6.77131960e+03 6.86271194e+03 + 6.95533780e+03 7.04921383e+03 7.14435690e+03 7.24078412e+03 7.33851281e+03 + 7.43756054e+03 7.53794512e+03 7.63968458e+03 7.74279722e+03 7.84730157e+03 + 7.95321641e+03 8.06056079e+03 8.16935398e+03 8.27961556e+03 8.39136533e+03 + 8.50462339e+03 8.61941009e+03 8.73574606e+03 8.85365222e+03 8.97314975e+03 + 9.09426014e+03 9.21700515e+03 9.34140685e+03 9.46748760e+03 9.59527005e+03 + 9.72477718e+03 9.85603227e+03 9.98905890e+03 1.01238810e+04 1.02605228e+04 + 1.03990088e+04 1.05393640e+04 1.06816135e+04 1.08257830e+04 1.09718983e+04 + 1.11199858e+04 1.12700720e+04 1.14221839e+04 1.15763488e+04 1.17325945e+04 + 1.18909491e+04 1.20514409e+04 1.22140989e+04 1.23789523e+04 1.25460308e+04 + 1.27153642e+04 1.28869832e+04 1.30609185e+04 1.32372014e+04 1.34158636e+04 + 1.35969372e+04 1.37804547e+04 1.39664492e+04 1.41549540e+04 1.43460031e+04 + 1.45396308e+04 1.47358718e+04 1.49347615e+04 1.51363357e+04 1.53406304e+04 + 1.55476825e+04 1.57575292e+04 1.59702082e+04 1.61857578e+04 1.64042165e+04 + 1.66256239e+04 1.68500195e+04 1.70774438e+04 1.73079377e+04 1.75415425e+04 + 1.77783003e+04 1.80182536e+04 1.82614455e+04 1.85079198e+04 1.87577208e+04 + 1.90108933e+04 1.92674828e+04 1.95275356e+04 1.97910983e+04 2.00582183e+04 + 2.03289436e+04 2.06033228e+04 2.08814054e+04 2.11632412e+04 2.14488810e+04 + 2.17383760e+04 2.20317784e+04 2.23291407e+04 2.26305166e+04 2.29359602e+04 + 2.32455263e+04 2.35592706e+04 2.38772495e+04 2.41995202e+04 2.45261405e+04 + 2.48571693e+04 2.51926659e+04 2.55326907e+04 2.58773048e+04 2.62265702e+04 + 2.65805496e+04 2.69393066e+04 2.73029058e+04 2.76714125e+04 2.80448928e+04 + 2.84234141e+04 2.88070442e+04 2.91958522e+04 2.95899080e+04 2.99892822e+04 + 3.03940469e+04 3.08042746e+04 3.12200391e+04 3.16414153e+04 3.20684787e+04 + 3.25013062e+04 3.29399755e+04 3.33845656e+04 3.38351563e+04 3.42918286e+04 + 3.47546646e+04 3.52237475e+04 3.56991616e+04 3.61809923e+04 3.66693263e+04 + 3.71642513e+04 3.76658563e+04 3.81742315e+04 3.86894682e+04 3.92116590e+04 + 3.97408978e+04 4.02772798e+04 4.08209013e+04 4.13718600e+04 4.19302550e+04 + 4.24961867e+04 4.30697567e+04 4.36510682e+04 4.42402256e+04 4.48373349e+04 + 4.54425033e+04 4.60558397e+04 4.66774542e+04 4.73074587e+04 4.79459664e+04 + 4.85930919e+04 4.92489517e+04 4.99136637e+04 5.05873472e+04 5.12701234e+04 + 5.19621151e+04 5.26634465e+04 5.33742438e+04 5.40946347e+04 5.48247487e+04 + 5.55647170e+04 5.63146726e+04 5.70747504e+04 5.78450870e+04 5.86258207e+04 + 5.94170921e+04 6.02190431e+04 6.10318181e+04 6.18555631e+04 6.26904262e+04 + 6.35365574e+04 6.43941088e+04 6.52632345e+04 6.61440908e+04 6.70368361e+04 + 6.79416306e+04 6.88586372e+04 6.97880206e+04 7.07299478e+04 7.16845883e+04 + 7.26521134e+04 7.36326973e+04 7.46265160e+04 7.56337483e+04 7.66545752e+04 + 7.76891802e+04 7.87377492e+04 7.98004708e+04 8.08775358e+04 8.19691380e+04 + 8.30754735e+04 8.41967412e+04 8.53331426e+04 8.64848820e+04 8.76521664e+04 + 8.88352056e+04 9.00342122e+04 9.12494018e+04 9.24809928e+04 9.37292066e+04 + 9.49942675e+04 9.62764028e+04 9.75758431e+04 9.88928220e+04 1.00227576e+05 + 1.01580345e+05 1.02951373e+05 1.04340905e+05 1.05749192e+05 1.07176486e+05 + 1.08623044e+05 1.10089127e+05 1.11574997e+05 1.13080923e+05 1.14607173e+05 + 1.16154023e+05 1.17721751e+05 1.19310639e+05 1.20920972e+05 1.22553039e+05 + 1.24207135e+05 1.25883556e+05 1.27582603e+05 1.29304582e+05 1.31049803e+05 + 1.32818579e+05 1.34611228e+05 1.36428073e+05 1.38269439e+05 1.40135659e+05 + 1.42027066e+05 1.43944002e+05 1.45886811e+05 1.47855842e+05 1.49851449e+05 + 1.51873990e+05 1.53923830e+05 1.56001336e+05 1.58106882e+05 1.60240847e+05 + 1.62403614e+05 1.64595572e+05 1.66817114e+05 1.69068641e+05 1.71350556e+05 + 1.73663271e+05 1.76007200e+05 1.78382765e+05 1.80790393e+05 1.83230516e+05 + 1.85703574e+05 1.88210011e+05 1.90750277e+05 1.93324829e+05 1.95934129e+05 + 1.98578648e+05 2.01258859e+05 2.03975245e+05 2.06728294e+05 2.09518501e+05 + 2.12346367e+05 2.15212401e+05 2.18117118e+05 2.21061039e+05 2.24044695e+05 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.51514411e-06 1.53559398e-06 1.55631985e-06 1.57732546e-06 1.59861459e-06 + 1.62019105e-06 1.64205873e-06 1.66422156e-06 1.68668352e-06 1.70944864e-06 + 1.73252103e-06 1.75590483e-06 1.77960423e-06 1.80362351e-06 1.82796697e-06 + 1.85263900e-06 1.87764402e-06 1.90298654e-06 1.92867110e-06 1.95470233e-06 + 1.98108490e-06 2.00782356e-06 2.03492310e-06 2.06238841e-06 2.09022442e-06 + 2.11843613e-06 2.14702861e-06 2.17600701e-06 2.20537652e-06 2.23514243e-06 + 2.26531010e-06 2.29588494e-06 2.32687244e-06 2.35827818e-06 2.39010781e-06 + 2.42236703e-06 2.45506166e-06 2.48819757e-06 2.52178072e-06 2.55581713e-06 + 2.59031293e-06 2.62527433e-06 2.66070759e-06 2.69661910e-06 2.73301530e-06 + 2.76990274e-06 2.80728805e-06 2.84517795e-06 2.88357925e-06 2.92249885e-06 + 2.96194375e-06 3.00192104e-06 3.04243789e-06 3.08350160e-06 3.12511955e-06 + 3.16729922e-06 3.21004818e-06 3.25337412e-06 3.29728483e-06 3.34178821e-06 + 3.38689225e-06 3.43260505e-06 3.47893484e-06 3.52588994e-06 3.57347879e-06 + 3.62170995e-06 3.67059208e-06 3.72013398e-06 3.77034453e-06 3.82123279e-06 + 3.87280787e-06 3.92507907e-06 3.97805577e-06 4.03174749e-06 4.08616389e-06 + 4.14131475e-06 4.19720997e-06 4.25385962e-06 4.31127386e-06 4.36946302e-06 + 4.42843756e-06 4.48820807e-06 4.54878531e-06 4.61018016e-06 4.67240365e-06 + 4.73546697e-06 4.79938146e-06 4.86415859e-06 4.92981003e-06 4.99634755e-06 + 5.06378314e-06 5.13212890e-06 5.20139712e-06 5.27160025e-06 5.34275092e-06 + 5.41486190e-06 5.48794616e-06 5.56201684e-06 5.63708725e-06 5.71317088e-06 + 5.79028141e-06 5.86843270e-06 5.94763880e-06 6.02791394e-06 6.10927255e-06 + 6.19172925e-06 6.27529887e-06 6.35999643e-06 6.44583715e-06 6.53283646e-06 + 6.62101000e-06 6.71037362e-06 6.80094337e-06 6.89273554e-06 6.98576663e-06 + 7.08005335e-06 7.17561266e-06 7.27246174e-06 7.37061798e-06 7.47009904e-06 + 7.57092278e-06 7.67310735e-06 7.77667110e-06 7.88163264e-06 7.98801085e-06 + 8.09582484e-06 8.20509399e-06 8.31583795e-06 8.42807662e-06 8.54183017e-06 + 8.65711905e-06 8.77396398e-06 8.89238596e-06 9.01240628e-06 9.13404651e-06 + 9.25732852e-06 9.38227446e-06 9.50890680e-06 9.63724829e-06 9.76732200e-06 + 9.89915131e-06 1.00327599e-05 1.01681718e-05 1.03054114e-05 1.04445033e-05 + 1.05854725e-05 1.07283444e-05 1.08731446e-05 1.10198992e-05 1.11686345e-05 + 1.13193773e-05 1.14721546e-05 1.16269940e-05 1.17839233e-05 1.19429706e-05 + 1.21041646e-05 1.22675342e-05 1.24331089e-05 1.26009182e-05 1.27709925e-05 + 1.29433623e-05 1.31180586e-05 1.32951127e-05 1.34745565e-05 1.36564223e-05 + 1.38407427e-05 1.40275509e-05 1.42168804e-05 1.44087653e-05 1.46032400e-05 + 1.48003396e-05 1.50000995e-05 1.52025554e-05 1.54077440e-05 1.56157019e-05 + 1.58264667e-05 1.60400761e-05 1.62565686e-05 1.64759832e-05 1.66983591e-05 + 1.69237365e-05 1.71521557e-05 1.73836580e-05 1.76182848e-05 1.78560784e-05 + 1.80970814e-05 1.83413373e-05 1.85888899e-05 1.88397837e-05 1.90940638e-05 + 1.93517759e-05 1.96129664e-05 1.98776821e-05 2.01459707e-05 2.04178804e-05 + 2.06934601e-05 2.09727592e-05 2.12558280e-05 2.15427174e-05 2.18334790e-05 + 2.21281649e-05 2.24268282e-05 2.27295226e-05 2.30363024e-05 2.33472229e-05 + 2.36623398e-05 2.39817098e-05 2.43053904e-05 2.46334396e-05 2.49659166e-05 + 2.53028810e-05 2.56443934e-05 2.59905151e-05 2.63413085e-05 2.66968365e-05 + 2.70571631e-05 2.74223530e-05 2.77924718e-05 2.81675861e-05 2.85477634e-05 + 2.89330718e-05 2.93235808e-05 2.97193605e-05 3.01204820e-05 3.05270174e-05 + 3.09390399e-05 3.13566233e-05 3.17798429e-05 3.22087747e-05 3.26434958e-05 + 3.30840843e-05 3.35306194e-05 3.39831813e-05 3.44418515e-05 3.49067124e-05 + 3.53778474e-05 3.58553414e-05 3.63392801e-05 3.68297505e-05 3.73268407e-05 + 3.78306402e-05 3.83412395e-05 3.88587303e-05 3.93832056e-05 3.99147598e-05 + 4.04534884e-05 4.09994881e-05 4.15528573e-05 4.21136952e-05 4.26821027e-05 + 4.32581821e-05 4.38420367e-05 4.44337716e-05 4.50334932e-05 4.56413092e-05 + 4.62573288e-05 4.68816629e-05 4.75144236e-05 4.81557246e-05 4.88056813e-05 + 4.94644104e-05 5.01320304e-05 5.08086612e-05 5.14944245e-05 5.21894435e-05 + 5.28938432e-05 5.36077501e-05 5.43312927e-05 5.50646008e-05 5.58078064e-05 + 5.65610431e-05 5.73244461e-05 5.80981528e-05 5.88823022e-05 5.96770352e-05 + 6.04824947e-05 6.12988255e-05 6.21261743e-05 6.29646898e-05 6.38145227e-05 + 6.46758258e-05 6.55487539e-05 6.64334638e-05 6.73301147e-05 6.82388677e-05 + 6.91598861e-05 7.00933354e-05 7.10393835e-05 7.19982003e-05 7.29699583e-05 + 7.39548321e-05 7.49529987e-05 7.59646376e-05 7.69899305e-05 7.80290617e-05 + 7.90822181e-05 8.01495889e-05 8.12313660e-05 8.23277438e-05 8.34389194e-05 + 8.45650925e-05 8.57064656e-05 8.68632437e-05 8.80356348e-05 8.92238497e-05 + 9.04281018e-05 9.16486078e-05 9.28855869e-05 9.41392614e-05 9.54098568e-05 + 9.66976013e-05 9.80027266e-05 9.93254670e-05 1.00666060e-04 1.02024748e-04 + 1.03401773e-04 1.04797385e-04 1.06211833e-04 1.07645371e-04 1.09098258e-04 + 1.10570755e-04 1.12063126e-04 1.13575639e-04 1.15108567e-04 1.16662184e-04 + 1.18236771e-04 1.19832610e-04 1.21449988e-04 1.23089195e-04 1.24750527e-04 + 1.26434282e-04 1.28140763e-04 1.29870275e-04 1.31623131e-04 1.33399646e-04 + 1.35200138e-04 1.37024931e-04 1.38874353e-04 1.40748737e-04 1.42648419e-04 + 1.44573741e-04 1.46525050e-04 1.48502695e-04 1.50507032e-04 1.52538422e-04 + 1.54597229e-04 1.56683824e-04 1.58798582e-04 1.60941883e-04 1.63114112e-04 + 1.65315659e-04 1.67546920e-04 1.69808297e-04 1.72100196e-04 1.74423028e-04 + 1.76777212e-04 1.79163169e-04 1.81581330e-04 1.84032129e-04 1.86516007e-04 + 1.89033409e-04 1.91584788e-04 1.94170603e-04 1.96791319e-04 1.99447407e-04 + 2.02139344e-04 2.04867614e-04 2.07632707e-04 2.10435121e-04 2.13275359e-04 + 2.16153931e-04 2.19071356e-04 2.22028156e-04 2.25024865e-04 2.28062020e-04 + 2.31140168e-04 2.34259861e-04 2.37421661e-04 2.40626136e-04 2.43873861e-04 + 2.47165421e-04 2.50501406e-04 2.53882418e-04 2.57309063e-04 2.60781957e-04 + 2.64301725e-04 2.67868999e-04 2.71484421e-04 2.75148639e-04 2.78862314e-04 + 2.82626112e-04 2.86440710e-04 2.90306793e-04 2.94225057e-04 2.98196206e-04 + 3.02220953e-04 3.06300022e-04 3.10434146e-04 3.14624068e-04 3.18870542e-04 + 3.23174330e-04 3.27536206e-04 3.31956954e-04 3.36437370e-04 3.40978257e-04 + 3.45580432e-04 3.50244723e-04 3.54971968e-04 3.59763016e-04 3.64618729e-04 + 3.69539979e-04 3.74527651e-04 3.79582642e-04 3.84705860e-04 3.89898226e-04 + 3.95160673e-04 4.00494147e-04 4.05899607e-04 4.11378024e-04 4.16930384e-04 + 4.22557683e-04 4.28260934e-04 4.34041162e-04 4.39899405e-04 4.45836717e-04 + 4.51854164e-04 4.57952829e-04 4.64133808e-04 4.70398211e-04 4.76747164e-04 + 4.83181809e-04 4.89703302e-04 4.96312816e-04 5.03011539e-04 5.09800673e-04 + 5.16681441e-04 5.23655078e-04 5.30722838e-04 5.37885992e-04 5.45145826e-04 + 5.52503646e-04 5.59960775e-04 5.67518552e-04 5.75178336e-04 5.82941505e-04 + 5.90809452e-04 5.98783593e-04 6.06865361e-04 6.15056208e-04 6.23357607e-04 + 6.31771050e-04 6.40298049e-04 6.48940137e-04 6.57698866e-04 6.66575812e-04 + 6.75572570e-04 6.84690757e-04 6.93932012e-04 7.03297995e-04 7.12790392e-04 + 7.22410907e-04 7.32161269e-04 7.42043233e-04 7.52058572e-04 7.62209089e-04 + 7.72496607e-04 7.82922975e-04 7.93490068e-04 8.04199785e-04 8.15054050e-04 + 8.26054815e-04 8.37204057e-04 8.48503780e-04 8.59956016e-04 8.71562821e-04 + 8.83326284e-04 8.95248518e-04 9.07331666e-04 9.19577900e-04 9.31989421e-04 + 9.44568460e-04 9.57317278e-04 9.70238166e-04 9.83333448e-04 9.96605476e-04 + 1.01005664e-03 1.02368935e-03 1.03750606e-03 1.05150925e-03 1.06570145e-03 + 1.08008519e-03 1.09466308e-03 1.10943772e-03 1.12441177e-03 1.13958793e-03 + 1.15496892e-03 1.17055751e-03 1.18635650e-03 1.20236872e-03 1.21859707e-03 + 1.23504444e-03 1.25171381e-03 1.26860816e-03 1.28573053e-03 1.30308401e-03 + 1.32067170e-03 1.33849678e-03 1.35656243e-03 1.37487193e-03 1.39342854e-03 + 1.41223561e-03 1.43129652e-03 1.45061470e-03 1.47019361e-03 1.49003678e-03 + 1.51014777e-03 1.53053020e-03 1.55118773e-03 1.57212407e-03 1.59334299e-03 + 1.61484830e-03 1.63664387e-03 1.65873361e-03 1.68112150e-03 1.70381156e-03 + 1.72680786e-03 1.75011455e-03 1.77373580e-03 1.79767587e-03 1.82193906e-03 + 1.84652973e-03 1.87145230e-03 1.89671124e-03 1.92231111e-03 1.94825650e-03 + 1.97455207e-03 2.00120255e-03 2.02821273e-03 2.05558747e-03 2.08333169e-03 + 2.11145037e-03 2.13994856e-03 2.16883140e-03 2.19810406e-03 2.22777182e-03 + 2.25784000e-03 2.28831402e-03 2.31919934e-03 2.35050151e-03 2.38222618e-03 + 2.41437903e-03 2.44696584e-03 2.47999248e-03 2.51346488e-03 2.54738906e-03 + 2.58177111e-03 2.61661721e-03 2.65193363e-03 2.68772672e-03 2.72400290e-03 + 2.76076870e-03 2.79803073e-03 2.83579568e-03 2.87407035e-03 2.91286161e-03 + 2.95217643e-03 2.99202189e-03 3.03240514e-03 3.07333344e-03 3.11481415e-03 + 3.15685472e-03 3.19946271e-03 3.24264578e-03 3.28641170e-03 3.33076832e-03 + 3.37572362e-03 3.42128568e-03 3.46746269e-03 3.51426295e-03 3.56169487e-03 + 3.60976698e-03 3.65848792e-03 3.70786645e-03 3.75791143e-03 3.80863187e-03 + 3.86003689e-03 3.91213571e-03 3.96493772e-03 4.01845239e-03 4.07268934e-03 + 4.12765833e-03 4.18336924e-03 4.23983207e-03 4.29705699e-03 4.35505426e-03 + 4.41383433e-03 4.47340774e-03 4.53378522e-03 4.59497761e-03 4.65699591e-03 + 4.71985128e-03 4.78355500e-03 4.84811852e-03 4.91355347e-03 4.97987158e-03 + 5.04708479e-03 5.11520517e-03 5.18424497e-03 5.25421660e-03 5.32513264e-03 + 5.39700583e-03 5.46984909e-03 5.54367551e-03 5.61849837e-03 5.69433110e-03 + 5.77118736e-03 5.84908093e-03 5.92802584e-03 6.00803626e-03 6.08912659e-03 + 6.17131138e-03 6.25460542e-03 6.33902369e-03 6.42458134e-03 6.51129376e-03 + 6.59917653e-03 6.68824546e-03 6.77851655e-03 6.87000603e-03 6.96273034e-03 + 7.05670614e-03 7.15195034e-03 7.24848004e-03 7.34631260e-03 7.44546561e-03 + 7.54595688e-03 7.64780448e-03 7.75102672e-03 7.85564214e-03 7.96166955e-03 + 8.06912802e-03 8.17803685e-03 8.28841561e-03 8.40028416e-03 8.51366260e-03 + 8.62857130e-03 8.74503092e-03 8.86306239e-03 8.98268694e-03 9.10392605e-03 + 9.22680152e-03 9.35133544e-03 9.47755019e-03 9.60546846e-03 9.73511324e-03 + 9.86650783e-03 9.99967585e-03 1.01346412e-02 1.02714283e-02 1.04100615e-02 + 1.05505658e-02 1.06929666e-02 1.08372893e-02 1.09835599e-02 1.11318048e-02 + 1.12820505e-02 1.14343240e-02 1.15886528e-02 1.17450646e-02 1.19035875e-02 + 1.20642499e-02 1.22270808e-02 1.23921094e-02 1.25593654e-02 1.27288789e-02 + 1.29006802e-02 1.30748004e-02 1.32512707e-02 1.34301228e-02 1.36113888e-02 + 1.37951014e-02 1.39812936e-02 1.41699987e-02 1.43612509e-02 1.45550843e-02 + 1.47515340e-02 1.49506351e-02 1.51524234e-02 1.53569353e-02 1.55642075e-02 + 1.57742773e-02 1.59871823e-02 1.62029609e-02 1.64216519e-02 1.66432945e-02 + 1.68679287e-02 1.70955947e-02 1.73263336e-02 1.75601867e-02 1.77971961e-02 + 1.80374044e-02 1.82808548e-02 1.85275911e-02 1.87776576e-02 1.90310992e-02 + 1.92879614e-02 1.95482906e-02 1.98121334e-02 2.00795373e-02 2.03505503e-02 + 2.06252212e-02 2.09035994e-02 2.11857347e-02 2.14716781e-02 2.17614808e-02 + 2.20551950e-02 2.23528734e-02 2.26545697e-02 2.29603378e-02 2.32702330e-02 + 2.35843107e-02 2.39026276e-02 2.42252408e-02 2.45522083e-02 2.48835889e-02 + 2.52194421e-02 2.55598283e-02 2.59048087e-02 2.62544453e-02 2.66088009e-02 + 2.69679393e-02 2.73319249e-02 2.77008232e-02 2.80747006e-02 2.84536242e-02 + 2.88376620e-02 2.92268833e-02 2.96213578e-02 3.00211566e-02 3.04263514e-02 + 3.08370152e-02 3.12532216e-02 3.16750456e-02 3.21025629e-02 3.25358505e-02 + 3.29749861e-02 3.34200487e-02 3.38711183e-02 3.43282759e-02 3.47916039e-02 + 3.52611853e-02 3.57371047e-02 3.62194475e-02 3.67083006e-02 3.72037516e-02 + 3.77058898e-02 3.82148053e-02 3.87305896e-02 3.92533354e-02 3.97831368e-02 + 4.03200888e-02 4.08642881e-02 4.14158324e-02 4.19748209e-02 4.25413541e-02 + 4.31155337e-02 4.36974630e-02 4.42872467e-02 4.48849906e-02 4.54908022e-02 + 4.61047905e-02 4.67270657e-02 4.73577398e-02 4.79969261e-02 4.86447395e-02 + 4.93012964e-02 4.99667148e-02 5.06411144e-02 5.13246163e-02 5.20173434e-02 + 5.27194202e-02 5.34309730e-02 5.41521296e-02 5.48830196e-02 5.56237744e-02 + 5.63745271e-02 5.71354128e-02 5.79065681e-02 5.86881317e-02 5.94802440e-02 + 6.02830474e-02 6.10966863e-02 6.19213068e-02 6.27570572e-02 6.36040877e-02 + 6.44625506e-02 6.53326001e-02 6.62143926e-02 6.71080867e-02 6.80138429e-02 + 6.89318241e-02 6.98621953e-02 7.08051237e-02 7.17607788e-02 7.27293323e-02 + 7.37109584e-02 7.47058334e-02 7.57141363e-02 7.67360482e-02 7.77717528e-02 + 7.88214363e-02 7.98852873e-02 8.09634971e-02 8.20562595e-02 8.31637709e-02 + 8.42862303e-02 8.54238396e-02 8.65768031e-02 8.77453282e-02 8.89296248e-02 + 9.01299058e-02 9.13463870e-02 9.25792870e-02 9.38288274e-02 9.50952329e-02 + 9.63787310e-02 9.76795524e-02 9.89979310e-02 1.00334104e-01 1.01688311e-01 + 1.03060795e-01 1.04451805e-01 1.05861588e-01 1.07290399e-01 1.08738495e-01 + 1.10206136e-01 1.11693586e-01 1.13201111e-01 1.14728984e-01 1.16277479e-01 + 1.17846873e-01 1.19437449e-01 1.21049494e-01 1.22683296e-01 1.24339149e-01 + 1.26017352e-01 1.27718205e-01 1.29442015e-01 1.31189090e-01 1.32959747e-01 + 1.34754301e-01 1.36573077e-01 1.38416400e-01 1.40284603e-01 1.42178021e-01 + 1.44096994e-01 1.46041868e-01 1.48012992e-01 1.50010719e-01 1.52035411e-01 + 1.54087429e-01 1.56167143e-01 1.58274927e-01 1.60411160e-01 1.62576226e-01 + 1.64770513e-01 1.66994417e-01 1.69248337e-01 1.71532678e-01 1.73847850e-01 + 1.76194270e-01 1.78572360e-01 1.80982547e-01 1.83425264e-01 1.85900951e-01 + 1.88410051e-01 1.90953017e-01 1.93530306e-01 1.96142380e-01 1.98789709e-01 + 2.01472769e-01 2.04192042e-01 2.06948017e-01 2.09741189e-01 2.12572061e-01 + 2.15441141e-01 2.18348945e-01 2.21295996e-01 2.24282822e-01 2.27309962e-01 + 2.30377959e-01 2.33487365e-01 2.36638739e-01 2.39832646e-01 2.43069662e-01 + 2.46350367e-01 2.49675352e-01 2.53045214e-01 2.56460560e-01 2.59922002e-01 + 2.63430163e-01 2.66985673e-01 2.70589173e-01 2.74241308e-01 2.77942737e-01 + 2.81694123e-01 2.85496142e-01 2.89349477e-01 2.93254820e-01 2.97212873e-01 + 3.01224348e-01 3.05289966e-01 3.09410457e-01 3.13586563e-01 3.17819033e-01 + 3.22108629e-01 3.26456121e-01 3.30862292e-01 3.35327932e-01 3.39853846e-01 + 3.44440845e-01 3.49089755e-01 3.53801411e-01 3.58576660e-01 3.63416361e-01 + 3.68321383e-01 3.73292608e-01 3.78330929e-01 3.83437252e-01 3.88612496e-01 + 3.93857590e-01 3.99173476e-01 4.04561111e-01 4.10021463e-01 4.15555512e-01 + 4.21164255e-01 4.26848699e-01 4.32609866e-01 4.38448791e-01 4.44366524e-01 + 4.50364128e-01 4.56442682e-01 4.62603278e-01 4.68847024e-01 4.75175041e-01 + 4.81588467e-01 4.88088455e-01 4.94676173e-01 5.01352806e-01 5.08119553e-01 + 5.14977630e-01 5.21928271e-01 5.28972724e-01 5.36112257e-01 5.43348151e-01 + 5.50681708e-01 5.58114246e-01 5.65647101e-01 5.73281626e-01 5.81019194e-01 + 5.88861197e-01 5.96809042e-01 6.04864160e-01 6.13027997e-01 6.21302021e-01 + 6.29687720e-01 6.38186600e-01 6.46800189e-01 6.55530036e-01 6.64377709e-01 + 6.73344799e-01 6.82432918e-01 6.91643699e-01 7.00978797e-01 7.10439891e-01 + 7.20028682e-01 7.29746892e-01 7.39596268e-01 7.49578581e-01 7.59695625e-01 + 7.69949219e-01 7.80341205e-01 7.90873452e-01 8.01547852e-01 8.12366325e-01 + 8.23330813e-01 8.34443290e-01 8.45705751e-01 8.57120221e-01 8.68688753e-01 + 8.80413424e-01 8.92296343e-01 9.04339645e-01 9.16545496e-01 9.28916089e-01 + 9.41453647e-01 9.54160425e-01 9.67038705e-01 9.80090803e-01 9.93319066e-01 + 1.00672587e+00 1.02031362e+00 1.03408477e+00 1.04804179e+00 1.06218719e+00 + 1.07652350e+00 1.09105331e+00 1.10577923e+00 1.12070391e+00 1.13583002e+00 + 1.15116029e+00 1.16669748e+00 1.18244437e+00 1.19840379e+00 1.21457862e+00 + 1.23097175e+00 1.24758615e+00 1.26442479e+00 1.28149070e+00 1.29878695e+00 + 1.31631665e+00 1.33408294e+00 1.35208903e+00 1.37033814e+00 1.38883356e+00 + 1.40757862e+00 1.42657667e+00 1.44583114e+00 1.46534549e+00 1.48512323e+00 + 1.50516790e+00 1.52548311e+00 1.54607252e+00 1.56693983e+00 1.58808878e+00 + 1.60952317e+00 1.63124687e+00 1.65326377e+00 1.67557783e+00 1.69819306e+00 + 1.72111354e+00 1.74434336e+00 1.76788672e+00 1.79174785e+00 1.81593103e+00 + 1.84044061e+00 1.86528099e+00 1.89045664e+00 1.91597209e+00 1.94183192e+00 + 1.96804078e+00 1.99460338e+00 2.02152449e+00 2.04880896e+00 2.07646169e+00 + 2.10448764e+00 2.13289186e+00 2.16167945e+00 2.19085559e+00 2.22042551e+00 + 2.25039454e+00 2.28076806e+00 2.31155154e+00 2.34275049e+00 2.37437054e+00 + 2.40641736e+00 2.43889672e+00 2.47181445e+00 2.50517647e+00 2.53898878e+00 + 2.57325745e+00 2.60798864e+00 2.64318860e+00 2.67886366e+00 2.71502022e+00 + 2.75166478e+00 2.78880393e+00 2.82644435e+00 2.86459281e+00 2.90325615e+00 + 2.94244133e+00 2.98215539e+00 3.02240547e+00 3.06319880e+00 3.10454272e+00 + 3.14644466e+00 3.18891215e+00 3.23195282e+00 3.27557441e+00 3.31978476e+00 + 3.36459182e+00 3.41000363e+00 3.45602837e+00 3.50267430e+00 3.54994981e+00 + 3.59786340e+00 3.64642368e+00 3.69563937e+00 3.74551933e+00 3.79607251e+00 + 3.84730801e+00 3.89923504e+00 3.95186292e+00 4.00520112e+00 4.05925923e+00 + 4.11404695e+00 4.16957414e+00 4.22585079e+00 4.28288699e+00 4.34069302e+00 + 4.39927925e+00 4.45865622e+00 4.51883459e+00 4.57982520e+00 4.64163899e+00 + 4.70428708e+00 4.76778073e+00 4.83213135e+00 4.89735051e+00 4.96344994e+00 + 5.03044150e+00 5.09833725e+00 5.16714939e+00 5.23689028e+00 5.30757246e+00 + 5.37920864e+00 5.45181169e+00 5.52539466e+00 5.59997078e+00 5.67555346e+00 + 5.75215627e+00 5.82979298e+00 5.90847756e+00 5.98822414e+00 6.06904706e+00 + 6.15096084e+00 6.23398021e+00 6.31812010e+00 6.40339561e+00 6.48982209e+00 + 6.57741507e+00 6.66619028e+00 6.75616369e+00 6.84735147e+00 6.93977001e+00 + 7.03343592e+00 7.12836604e+00 7.22457742e+00 7.32208737e+00 7.42091341e+00 + 7.52107330e+00 7.62258505e+00 7.72546690e+00 7.82973734e+00 7.93541512e+00 + 8.04251923e+00 8.15106892e+00 8.26108370e+00 8.37258335e+00 8.48558791e+00 + 8.60011769e+00 8.71619327e+00 8.83383553e+00 8.95306559e+00 9.07390491e+00 + 9.19637518e+00 9.32049844e+00 9.44629699e+00 9.57379343e+00 9.70301069e+00 + 9.83397200e+00 9.96670088e+00 1.01012212e+01 1.02375571e+01 1.03757332e+01 + 1.05157742e+01 1.06577054e+01 1.08015522e+01 1.09473405e+01 1.10950965e+01 + 1.12448467e+01 1.13966182e+01 1.15504380e+01 1.17063340e+01 1.18643341e+01 + 1.20244668e+01 1.21867607e+01 1.23512451e+01 1.25179496e+01 1.26869041e+01 + 1.28581389e+01 1.30316849e+01 1.32075732e+01 1.33858355e+01 1.35665038e+01 + 1.37496106e+01 1.39351888e+01 1.41232717e+01 1.43138932e+01 1.45070874e+01 + 1.47028892e+01 1.49013338e+01 1.51024567e+01 1.53062942e+01 1.55128829e+01 + 1.57222599e+01 1.59344629e+01 1.61495300e+01 1.63674998e+01 1.65884115e+01 + 1.68123049e+01 1.70392202e+01 1.72691982e+01 1.75022801e+01 1.77385080e+01 + 1.79779242e+01 1.82205718e+01 1.84664944e+01 1.87157363e+01 1.89683421e+01 + 1.92243574e+01 1.94838281e+01 1.97468008e+01 2.00133229e+01 2.02834423e+01 + 2.05572074e+01 2.08346676e+01 2.11158726e+01 2.14008730e+01 2.16897201e+01 + 2.19824657e+01 2.22791625e+01 2.25798639e+01 2.28846237e+01 2.31934970e+01 + 2.35065390e+01 2.38238062e+01 2.41453556e+01 2.44712449e+01 2.48015327e+01 + 2.51362784e+01 2.54755421e+01 2.58193849e+01 2.61678685e+01 2.65210556e+01 + 2.68790097e+01 2.72417950e+01 2.76094769e+01 2.79821213e+01 2.83597954e+01 + 2.87425669e+01 2.91305046e+01 2.95236783e+01 2.99221587e+01 3.03260174e+01 + 3.07353269e+01 3.11501609e+01 3.15705939e+01 3.19967014e+01 3.24285601e+01 + 3.28662476e+01 3.33098426e+01 3.37594247e+01 3.42150749e+01 3.46768749e+01 + 3.51449079e+01 3.56192579e+01 3.61000102e+01 3.65872511e+01 3.70810684e+01 + 3.75815507e+01 3.80887880e+01 3.86028714e+01 3.91238935e+01 3.96519477e+01 + 4.01871291e+01 4.07295339e+01 4.12792594e+01 4.18364046e+01 4.24010695e+01 + 4.29733558e+01 4.35533661e+01 4.41412049e+01 4.47369777e+01 4.53407916e+01 + 4.59527552e+01 4.65729784e+01 4.72015728e+01 4.78386513e+01 4.84843284e+01 + 4.91387202e+01 4.98019444e+01 5.04741200e+01 5.11553680e+01 5.18458108e+01 + 5.25455725e+01 5.32547788e+01 5.39735573e+01 5.47020371e+01 5.54403492e+01 + 5.61886263e+01 5.69470028e+01 5.77156152e+01 5.84946015e+01 5.92841017e+01 + 6.00842578e+01 6.08952136e+01 6.17171149e+01 6.25501093e+01 6.33943466e+01 + 6.42499786e+01 6.51171590e+01 6.59960438e+01 6.68867908e+01 6.77895602e+01 + 6.87045143e+01 6.96318175e+01 7.05716365e+01 7.15241402e+01 7.24894998e+01 + 7.34678888e+01 7.44594832e+01 7.54644611e+01 7.64830031e+01 7.75152924e+01 + 7.85615144e+01 7.96218573e+01 8.06965116e+01 8.17856705e+01 8.28895297e+01 + 8.40082878e+01 8.51421456e+01 8.62913071e+01 8.74559788e+01 8.86363701e+01 + 8.98326931e+01 9.10451628e+01 9.22739972e+01 9.35194171e+01 9.47816465e+01 + 9.60609121e+01 9.73574439e+01 9.86714750e+01 1.00003242e+02 1.01352983e+02 + 1.02720942e+02 1.04107364e+02 1.05512498e+02 1.06936598e+02 1.08379919e+02 + 1.09842720e+02 1.11325265e+02 1.12827819e+02 1.14350653e+02 1.15894041e+02 + 1.17458261e+02 1.19043592e+02 1.20650320e+02 1.22278735e+02 1.23929128e+02 + 1.25601797e+02 1.27297041e+02 1.29015166e+02 1.30756481e+02 1.32521298e+02 + 1.34309935e+02 1.36122713e+02 1.37959958e+02 1.39822000e+02 1.41709174e+02 + 1.43621820e+02 1.45560280e+02 1.47524903e+02 1.49516044e+02 1.51534058e+02 + 1.53579310e+02 1.55652166e+02 1.57752999e+02 1.59882188e+02 1.62040114e+02 + 1.64227166e+02 1.66443736e+02 1.68690223e+02 1.70967031e+02 1.73274569e+02 + 1.75613251e+02 1.77983499e+02 1.80385738e+02 1.82820400e+02 1.85287923e+02 + 1.87788750e+02 1.90323330e+02 1.92892119e+02 1.95495580e+02 1.98134179e+02 + 2.00808391e+02 2.03518697e+02 2.06265584e+02 2.09049546e+02 2.11871083e+02 + 2.14730702e+02 2.17628917e+02 2.20566249e+02 2.23543226e+02 2.26560384e+02 + 2.29618264e+02 2.32717416e+02 2.35858398e+02 2.39041773e+02 2.42268114e+02 + 2.45538001e+02 2.48852022e+02 2.52210771e+02 2.55614854e+02 2.59064882e+02 + 2.62561474e+02 2.66105260e+02 2.69696877e+02 2.73336969e+02 2.77026192e+02 + 2.80765207e+02 2.84554689e+02 2.88395317e+02 2.92287781e+02 2.96232783e+02 + 3.00231029e+02 3.04283240e+02 3.08390144e+02 3.12552478e+02 3.16770992e+02 + 3.21046442e+02 3.25379599e+02 3.29771239e+02 3.34222154e+02 3.38733142e+02 + 3.43305015e+02 3.47938595e+02 3.52634714e+02 3.57394216e+02 3.62217957e+02 + 3.67106805e+02 3.72061636e+02 3.77083343e+02 3.82172828e+02 3.87331006e+02 + 3.92558803e+02 3.97857160e+02 4.03227029e+02 4.08669374e+02 4.14185175e+02 + 4.19775422e+02 4.25441121e+02 4.31183290e+02 4.37002961e+02 4.42901179e+02 + 4.48879006e+02 4.54937515e+02 4.61077796e+02 4.67300952e+02 4.73608102e+02 + 4.80000379e+02 4.86478933e+02 4.93044927e+02 4.99699543e+02 5.06443976e+02 + 5.13279438e+02 5.20207158e+02 5.27228382e+02 5.34344371e+02 5.41556404e+02 + 5.48865778e+02 5.56273806e+02 5.63781821e+02 5.71391170e+02 5.79103223e+02 + 5.86919366e+02 5.94841002e+02 6.02869557e+02 6.11006473e+02 6.19253213e+02 + 6.27611259e+02 6.36082113e+02 6.44667298e+02 6.53368357e+02 6.62186855e+02 + 6.71124375e+02 6.80182525e+02 6.89362932e+02 6.98667247e+02 7.08097142e+02 + 7.17654312e+02 7.27340476e+02 7.37157373e+02 7.47106768e+02 7.57190450e+02 + 7.67410232e+02 7.77767949e+02 7.88265465e+02 7.98904665e+02 8.09687462e+02 + 8.20615795e+02 8.31691626e+02 8.42916949e+02 8.54293779e+02 8.65824161e+02 + 8.77510169e+02 8.89353903e+02 9.01357492e+02 9.13523092e+02 9.25852892e+02 + 9.38349106e+02 9.51013982e+02 9.63849795e+02 9.76858852e+02 9.90043493e+02 + 1.00340609e+03 1.01694903e+03 1.03067477e+03 1.04458576e+03 1.05868451e+03 + 1.07297355e+03 1.08745545e+03 1.10213281e+03 1.11700827e+03 1.13208451e+03 + 1.14736422e+03 1.16285017e+03 1.17854513e+03 1.19445193e+03 1.21057342e+03 + 1.22691250e+03 1.24347211e+03 1.26025522e+03 1.27726485e+03 1.29450407e+03 + 1.31197596e+03 1.32968367e+03 1.34763038e+03 1.36581931e+03 1.38425374e+03 + 1.40293698e+03 1.42187239e+03 1.44106337e+03 1.46051336e+03 1.48022588e+03 + 1.50020445e+03 1.52045267e+03 1.54097419e+03 1.56177268e+03 1.58285189e+03 + 1.60421560e+03 1.62586766e+03 1.64781196e+03 1.67005244e+03 1.69259310e+03 + 1.71543799e+03 1.73859121e+03 1.76205693e+03 1.78583938e+03 1.80994281e+03 + 1.83437156e+03 1.85913003e+03 1.88422266e+03 1.90965397e+03 1.93542853e+03 + 1.96155096e+03 1.98802597e+03 2.01485831e+03 2.04205280e+03 2.06961434e+03 + 2.09754787e+03 2.12585843e+03 2.15455109e+03 2.18363101e+03 2.21310343e+03 + 2.24297363e+03 2.27324699e+03 2.30392895e+03 2.33502503e+03 2.36654081e+03 + 2.39848195e+03 2.43085420e+03 2.46366339e+03 2.49691539e+03 2.53061620e+03 + 2.56477187e+03 2.59938853e+03 2.63447242e+03 2.67002983e+03 2.70606716e+03 + 2.74259088e+03 2.77960756e+03 2.81712386e+03 2.85514651e+03 2.89368236e+03 + 2.93273832e+03 2.97232142e+03 3.01243877e+03 3.05309759e+03 3.09430517e+03 + 3.13606893e+03 3.17839638e+03 3.22129512e+03 3.26477287e+03 3.30883743e+03 + 3.35349673e+03 3.39875879e+03 3.44463176e+03 3.49112387e+03 3.53824349e+03 + 3.58599907e+03 3.63439922e+03 3.68345262e+03 3.73316809e+03 3.78355457e+03 + 3.83462112e+03 3.88637691e+03 3.93883124e+03 3.99199356e+03 4.04587340e+03 + 4.10048045e+03 4.15582454e+03 4.21191561e+03 4.26876373e+03 4.32637913e+03 + 4.38477217e+03 4.44395333e+03 4.50393327e+03 4.56472275e+03 4.62633270e+03 + 4.68877420e+03 4.75205848e+03 4.81619690e+03 4.88120099e+03 4.94708244e+03 + 5.01385310e+03 5.08152495e+03 5.15011018e+03 5.21962109e+03 5.29007019e+03 + 5.36147014e+03 5.43383378e+03 5.50717410e+03 5.58150430e+03 5.65683773e+03 + 5.73318793e+03 5.81056864e+03 5.88899374e+03 5.96847735e+03 6.04903375e+03 + 6.13067741e+03 6.21342302e+03 6.29728544e+03 6.38227975e+03 6.46842123e+03 + 6.55572536e+03 6.64420783e+03 6.73388454e+03 6.82477162e+03 6.91688540e+03 + 7.01024244e+03 7.10485951e+03 7.20075363e+03 7.29794203e+03 7.39644218e+03 + 7.49627178e+03 7.59744879e+03 7.69999137e+03 7.80391797e+03 7.90924727e+03 + 8.01599819e+03 8.12418992e+03 8.23384192e+03 8.34497389e+03 8.45760580e+03 + 8.57175791e+03 8.68745072e+03 8.80470504e+03 8.92354193e+03 9.04398276e+03 + 9.16604918e+03 9.28976313e+03 9.41514684e+03 9.54222285e+03 9.67101401e+03 + 9.80154345e+03 9.93383465e+03 1.00679114e+04 1.02037977e+04 1.03415182e+04 + 1.04810974e+04 1.06225605e+04 1.07659329e+04 1.09112405e+04 1.10585092e+04 + 1.12077657e+04 1.13590366e+04 1.15123493e+04 1.16677312e+04 1.18252103e+04 + 1.19848148e+04 1.21465736e+04 1.23105156e+04 1.24766704e+04 1.26450677e+04 + 1.28157379e+04 1.29887116e+04 1.31640199e+04 1.33416944e+04 1.35217669e+04 + 1.37042699e+04 1.38892361e+04 1.40766987e+04 1.42666916e+04 1.44592488e+04 + 1.46544049e+04 1.48521951e+04 1.50526548e+04 1.52558201e+04 1.54617276e+04 + 1.56704142e+04 1.58819174e+04 1.60962752e+04 1.63135263e+04 1.65337095e+04 + 1.67568646e+04 1.69830316e+04 1.72122512e+04 1.74445645e+04 1.76800134e+04 + 1.79186401e+04 1.81604876e+04 1.84055993e+04 1.86540192e+04 1.89057921e+04 + 1.91609631e+04 1.94195781e+04 1.96816837e+04 1.99473269e+04 2.02165555e+04 + 2.04894179e+04 2.07659631e+04 2.10462408e+04 2.13303014e+04 2.16181960e+04 + 2.19099763e+04 2.22056947e+04 2.25054044e+04 2.28091593e+04 2.31170140e+04 + 2.34290238e+04 2.37452448e+04 2.40657338e+04 2.43905484e+04 2.47197470e+04 + 2.50533889e+04 2.53915339e+04 2.57342428e+04 2.60815773e+04 2.64335997e+04 + 2.67903734e+04 2.71519624e+04 2.75184318e+04 2.78898474e+04 2.82662760e+04 + 2.86477853e+04 2.90344437e+04 2.94263209e+04 2.98234873e+04 3.02260142e+04 + 3.06339740e+04 3.10474400e+04 3.14664865e+04 3.18911890e+04 3.23216236e+04 + 3.27578678e+04 3.31999999e+04 3.36480995e+04 3.41022471e+04 3.45625243e+04 + 3.50290139e+04 3.55017997e+04 3.59809666e+04 3.64666009e+04 3.69587897e+04 + 3.74576216e+04 3.79631862e+04 3.84755745e+04 3.89948784e+04 3.95211913e+04 + 4.00546079e+04 4.05952240e+04 4.11431368e+04 4.16984447e+04 4.22612476e+04 + 4.28316467e+04 4.34097444e+04 4.39956447e+04 4.45894528e+04 4.51912756e+04 + 4.58012212e+04 4.64193992e+04 4.70459207e+04 4.76808984e+04 4.83244463e+04 + 4.89766802e+04 4.96377173e+04 5.03076764e+04 5.09866779e+04 5.16748439e+04 + 5.23722980e+04 5.30791657e+04 5.37955739e+04 5.45216515e+04 5.52575289e+04 + 5.60033385e+04 5.67592142e+04 5.75252919e+04 5.83017094e+04 5.90886062e+04 + 5.98861237e+04 6.06944053e+04 6.15135963e+04 6.23438438e+04 6.31852972e+04 + 6.40381076e+04 6.49024284e+04 6.57784150e+04 6.66662247e+04 6.75660171e+04 + 6.84779540e+04 6.94021994e+04 7.03389192e+04 7.12882819e+04 7.22504581e+04 + 7.32256209e+04 7.42139453e+04 7.52156092e+04 7.62307924e+04 7.72596776e+04 + 7.83024497e+04 7.93592960e+04 8.04304065e+04 8.15159738e+04 8.26161929e+04 + 8.37312617e+04 8.48613806e+04 8.60067526e+04 8.71675837e+04 8.83440825e+04 + 8.95364604e+04 9.07449319e+04 9.19697141e+04 9.32110271e+04 9.44690942e+04 + 9.57441413e+04 9.70363977e+04 9.83460956e+04 9.96734705e+04 1.01018761e+05 + 1.02382209e+05 1.03764059e+05 1.05164560e+05 1.06583964e+05 1.08022525e+05 + 1.09480502e+05 1.10958158e+05 1.12455758e+05 1.13973570e+05 1.15511869e+05 + 1.17070930e+05 1.18651033e+05 1.20252464e+05 1.21875508e+05 1.23520459e+05 + 1.25187612e+05 1.26877266e+05 1.28589725e+05 1.30325298e+05 1.32084295e+05 + 1.33867034e+05 1.35673834e+05 1.37505020e+05 1.39360922e+05 1.41241873e+05 + 1.43148212e+05 1.45080280e+05 1.47038425e+05 1.49022999e+05 1.51034359e+05 + 1.53072866e+05 1.55138887e+05 1.57232793e+05 1.59354960e+05 1.61505770e+05 + 1.63685609e+05 1.65894870e+05 1.68133949e+05 1.70403249e+05 1.72703178e+05 + 1.75034149e+05 1.77396580e+05 1.79790898e+05 1.82217531e+05 1.84676917e+05 + 1.87169497e+05 1.89695719e+05 1.92256038e+05 1.94850913e+05 1.97480811e+05 + 2.00146205e+05 2.02847573e+05 2.05585402e+05 2.08360183e+05 2.11172416e+05 + 2.14022605e+05 2.16911263e+05 2.19838909e+05 2.22806069e+05 2.25813278e+05 + 2.28861074e+05 2.31950007e+05 2.35080630e+05 2.38253508e+05 2.41469210e+05 + 2.44728314e+05 2.48031406e+05 2.51379080e+05 2.54771938e+05 2.58210588e+05 + 2.61695651e+05 2.65227751e+05 2.68807523e+05 2.72435612e+05 2.76112669e+05 + 2.79839355e+05 2.83616340e+05 2.87444303e+05 2.91323932e+05 2.95255924e+05 + 2.99240986e+05 3.03279835e+05 3.07373196e+05 3.11521804e+05 3.15726407e+05 + 3.19987758e+05 3.24306626e+05 3.28683784e+05 3.33120022e+05 3.37616135e+05 + 3.42172931e+05 3.46791231e+05 3.51471864e+05 3.56215672e+05 3.61023506e+05 + 3.65896232e+05 3.70834725e+05 3.75839872e+05 3.80912574e+05 3.86053742e+05 + 3.91264300e+05 3.96545185e+05 4.01897346e+05 4.07321745e+05 4.12819356e+05 + 4.18391169e+05 4.24038185e+05 4.29761418e+05 4.35561898e+05 4.41440667e+05 + 4.47398781e+05 4.53437311e+05 4.59557344e+05 4.65759979e+05 4.72046330e+05 + 4.78417528e+05 4.84874718e+05 4.91419060e+05 4.98051732e+05 5.04773924e+05 + 5.11586846e+05 5.18491721e+05 5.25489792e+05 5.32582315e+05 5.39770566e+05 + 5.47055836e+05 5.54439436e+05 5.61922691e+05 5.69506949e+05 5.77193570e+05 + 5.84983938e+05 5.92879453e+05 6.00881532e+05 6.08991616e+05 6.17211161e+05 + 6.25541646e+05 6.33984566e+05 6.42541441e+05 6.51213808e+05 6.60003225e+05 + 3.33422613e-07 3.37922810e-07 3.42483747e-07 3.47106241e-07 3.51791126e-07 + 3.56539243e-07 3.61351444e-07 3.66228596e-07 3.71171575e-07 3.76181269e-07 + 3.81258578e-07 3.86404416e-07 3.91619707e-07 3.96905389e-07 4.02262412e-07 + 4.07691738e-07 4.13194344e-07 4.18771218e-07 4.24423363e-07 4.30151795e-07 + 4.35957544e-07 4.41841652e-07 4.47805178e-07 4.53849194e-07 4.59974786e-07 + 4.66183055e-07 4.72475116e-07 4.78852102e-07 4.85315157e-07 4.91865444e-07 + 4.98504140e-07 5.05232439e-07 5.12051549e-07 5.18962697e-07 5.25967124e-07 + 5.33066089e-07 5.40260870e-07 5.47552758e-07 5.54943064e-07 5.62433118e-07 + 5.70024264e-07 5.77717868e-07 5.85515312e-07 5.93417998e-07 6.01427347e-07 + 6.09544798e-07 6.17771809e-07 6.26109861e-07 6.34560451e-07 6.43125098e-07 + 6.51805342e-07 6.60602743e-07 6.69518883e-07 6.78555363e-07 6.87713809e-07 + 6.96995865e-07 7.06403202e-07 7.15937509e-07 7.25600501e-07 7.35393913e-07 + 7.45319507e-07 7.55379067e-07 7.65574400e-07 7.75907340e-07 7.86379743e-07 + 7.96993491e-07 8.07750493e-07 8.18652683e-07 8.29702018e-07 8.40900487e-07 + 8.52250101e-07 8.63752900e-07 8.75410952e-07 8.87226353e-07 8.99201226e-07 + 9.11337723e-07 9.23638027e-07 9.36104347e-07 9.48738925e-07 9.61544032e-07 + 9.74521969e-07 9.87675069e-07 1.00100570e-06 1.01451625e-06 1.02820915e-06 + 1.04208686e-06 1.05615188e-06 1.07040674e-06 1.08485399e-06 1.09949624e-06 + 1.11433612e-06 1.12937629e-06 1.14461945e-06 1.16006835e-06 1.17572577e-06 + 1.19159451e-06 1.20767743e-06 1.22397743e-06 1.24049742e-06 1.25724038e-06 + 1.27420933e-06 1.29140730e-06 1.30883739e-06 1.32650274e-06 1.34440652e-06 + 1.36255194e-06 1.38094227e-06 1.39958082e-06 1.41847092e-06 1.43761599e-06 + 1.45701946e-06 1.47668482e-06 1.49661560e-06 1.51681538e-06 1.53728780e-06 + 1.55803654e-06 1.57906532e-06 1.60037793e-06 1.62197819e-06 1.64386999e-06 + 1.66605727e-06 1.68854400e-06 1.71133424e-06 1.73443208e-06 1.75784167e-06 + 1.78156721e-06 1.80561298e-06 1.82998330e-06 1.85468254e-06 1.87971515e-06 + 1.90508562e-06 1.93079851e-06 1.95685845e-06 1.98327013e-06 2.01003828e-06 + 2.03716771e-06 2.06466332e-06 2.09253003e-06 2.12077286e-06 2.14939688e-06 + 2.17840724e-06 2.20780915e-06 2.23760790e-06 2.26780884e-06 2.29841740e-06 + 2.32943908e-06 2.36087947e-06 2.39274420e-06 2.42503901e-06 2.45776971e-06 + 2.49094216e-06 2.52456235e-06 2.55863631e-06 2.59317016e-06 2.62817012e-06 + 2.66364247e-06 2.69959359e-06 2.73602994e-06 2.77295807e-06 2.81038462e-06 + 2.84831631e-06 2.88675997e-06 2.92572250e-06 2.96521091e-06 3.00523229e-06 + 3.04579384e-06 3.08690284e-06 3.12856670e-06 3.17079289e-06 3.21358900e-06 + 3.25696274e-06 3.30092189e-06 3.34547435e-06 3.39062814e-06 3.43639136e-06 + 3.48277226e-06 3.52977915e-06 3.57742050e-06 3.62570485e-06 3.67464091e-06 + 3.72423745e-06 3.77450339e-06 3.82544777e-06 3.87707975e-06 3.92940860e-06 + 3.98244374e-06 4.03619469e-06 4.09067111e-06 4.14588280e-06 4.20183968e-06 + 4.25855181e-06 4.31602938e-06 4.37428273e-06 4.43332232e-06 4.49315877e-06 + 4.55380282e-06 4.61526539e-06 4.67755752e-06 4.74069040e-06 4.80467539e-06 + 4.86952397e-06 4.93524782e-06 5.00185875e-06 5.06936871e-06 5.13778986e-06 + 5.20713449e-06 5.27741506e-06 5.34864421e-06 5.42083473e-06 5.49399961e-06 + 5.56815199e-06 5.64330520e-06 5.71947276e-06 5.79666835e-06 5.87490584e-06 + 5.95419930e-06 6.03456299e-06 6.11601134e-06 6.19855900e-06 6.28222081e-06 + 6.36701179e-06 6.45294720e-06 6.54004247e-06 6.62831327e-06 6.71777545e-06 + 6.80844511e-06 6.90033853e-06 6.99347224e-06 7.08786296e-06 7.18352768e-06 + 7.28048358e-06 7.37874810e-06 7.47833888e-06 7.57927385e-06 7.68157112e-06 + 7.78524911e-06 7.89032643e-06 7.99682198e-06 8.10475489e-06 8.21414458e-06 + 8.32501069e-06 8.43737316e-06 8.55125218e-06 8.66666823e-06 8.78364205e-06 + 8.90219465e-06 9.02234736e-06 9.14412177e-06 9.26753976e-06 9.39262353e-06 + 9.51939554e-06 9.64787860e-06 9.77809578e-06 9.91007051e-06 1.00438265e-05 + 1.01793878e-05 1.03167787e-05 1.04560241e-05 1.05971488e-05 1.07401782e-05 + 1.08851382e-05 1.10320546e-05 1.11809540e-05 1.13318631e-05 1.14848089e-05 + 1.16398191e-05 1.17969215e-05 1.19561443e-05 1.21175161e-05 1.22810659e-05 + 1.24468231e-05 1.26148176e-05 1.27850795e-05 1.29576394e-05 1.31325284e-05 + 1.33097778e-05 1.34894195e-05 1.36714859e-05 1.38560096e-05 1.40430239e-05 + 1.42325622e-05 1.44246588e-05 1.46193481e-05 1.48166650e-05 1.50166452e-05 + 1.52193245e-05 1.54247394e-05 1.56329267e-05 1.58439240e-05 1.60577690e-05 + 1.62745004e-05 1.64941569e-05 1.67167781e-05 1.69424041e-05 1.71710753e-05 + 1.74028329e-05 1.76377185e-05 1.78757744e-05 1.81170433e-05 1.83615686e-05 + 1.86093943e-05 1.88605648e-05 1.91151254e-05 1.93731218e-05 1.96346004e-05 + 1.98996081e-05 2.01681926e-05 2.04404022e-05 2.07162859e-05 2.09958931e-05 + 2.12792742e-05 2.15664800e-05 2.18575623e-05 2.21525733e-05 2.24515660e-05 + 2.27545943e-05 2.30617125e-05 2.33729759e-05 2.36884404e-05 2.40081627e-05 + 2.43322003e-05 2.46606114e-05 2.49934551e-05 2.53307912e-05 2.56726803e-05 + 2.60191838e-05 2.63703641e-05 2.67262843e-05 2.70870083e-05 2.74526010e-05 + 2.78231281e-05 2.81986562e-05 2.85792528e-05 2.89649863e-05 2.93559260e-05 + 2.97521423e-05 3.01537062e-05 3.05606901e-05 3.09731670e-05 3.13912111e-05 + 3.18148975e-05 3.22443024e-05 3.26795030e-05 3.31205775e-05 3.35676051e-05 + 3.40206663e-05 3.44798424e-05 3.49452160e-05 3.54168708e-05 3.58948914e-05 + 3.63793639e-05 3.68703753e-05 3.73680139e-05 3.78723691e-05 3.83835316e-05 + 3.89015932e-05 3.94266470e-05 3.99587876e-05 4.04981104e-05 4.10447124e-05 + 4.15986919e-05 4.21601485e-05 4.27291830e-05 4.33058977e-05 4.38903964e-05 + 4.44827840e-05 4.50831671e-05 4.56916535e-05 4.63083527e-05 4.69333754e-05 + 4.75668341e-05 4.82088425e-05 4.88595161e-05 4.95189718e-05 5.01873282e-05 + 5.08647054e-05 5.15512251e-05 5.22470108e-05 5.29521874e-05 5.36668818e-05 + 5.43912225e-05 5.51253395e-05 5.58693649e-05 5.66234324e-05 5.73876775e-05 + 5.81622376e-05 5.89472519e-05 5.97428616e-05 6.05492096e-05 6.13664408e-05 + 6.21947022e-05 6.30341426e-05 6.38849129e-05 6.47471661e-05 6.56210570e-05 + 6.65067429e-05 6.74043828e-05 6.83141382e-05 6.92361725e-05 7.01706514e-05 + 7.11177430e-05 7.20776175e-05 7.30504474e-05 7.40364076e-05 7.50356752e-05 + 7.60484299e-05 7.70748537e-05 7.81151312e-05 7.91694493e-05 8.02379974e-05 + 8.13209678e-05 8.24185549e-05 8.35309562e-05 8.46583715e-05 8.58010036e-05 + 8.69590577e-05 8.81327420e-05 8.93222675e-05 9.05278480e-05 9.17497002e-05 + 9.29880438e-05 9.42431012e-05 9.55150981e-05 9.68042631e-05 9.81108279e-05 + 9.94350274e-05 1.00777100e-04 1.02137286e-04 1.03515830e-04 1.04912981e-04 + 1.06328989e-04 1.07764109e-04 1.09218598e-04 1.10692719e-04 1.12186736e-04 + 1.13700918e-04 1.15235536e-04 1.16790868e-04 1.18367191e-04 1.19964790e-04 + 1.21583952e-04 1.23224968e-04 1.24888133e-04 1.26573745e-04 1.28282107e-04 + 1.30013528e-04 1.31768318e-04 1.33546791e-04 1.35349269e-04 1.37176075e-04 + 1.39027537e-04 1.40903989e-04 1.42805766e-04 1.44733212e-04 1.46686673e-04 + 1.48666500e-04 1.50673048e-04 1.52706678e-04 1.54767757e-04 1.56856654e-04 + 1.58973744e-04 1.61119409e-04 1.63294034e-04 1.65498009e-04 1.67731732e-04 + 1.69995603e-04 1.72290030e-04 1.74615424e-04 1.76972205e-04 1.79360794e-04 + 1.81781623e-04 1.84235125e-04 1.86721742e-04 1.89241921e-04 1.91796114e-04 + 1.94384782e-04 1.97008389e-04 1.99667406e-04 2.02362313e-04 2.05093592e-04 + 2.07861735e-04 2.10667240e-04 2.13510611e-04 2.16392358e-04 2.19313001e-04 + 2.22273063e-04 2.25273078e-04 2.28313583e-04 2.31395126e-04 2.34518260e-04 + 2.37683548e-04 2.40891557e-04 2.44142865e-04 2.47438055e-04 2.50777721e-04 + 2.54162461e-04 2.57592886e-04 2.61069611e-04 2.64593261e-04 2.68164470e-04 + 2.71783880e-04 2.75452140e-04 2.79169911e-04 2.82937861e-04 2.86756667e-04 + 2.90627015e-04 2.94549600e-04 2.98525129e-04 3.02554316e-04 3.06637884e-04 + 3.10776569e-04 3.14971112e-04 3.19222270e-04 3.23530805e-04 3.27897493e-04 + 3.32323118e-04 3.36808475e-04 3.41354371e-04 3.45961623e-04 3.50631058e-04 + 3.55363517e-04 3.60159850e-04 3.65020919e-04 3.69947598e-04 3.74940772e-04 + 3.80001338e-04 3.85130207e-04 3.90328301e-04 3.95596553e-04 4.00935910e-04 + 4.06347332e-04 4.11831792e-04 4.17390276e-04 4.23023783e-04 4.28733325e-04 + 4.34519928e-04 4.40384633e-04 4.46328494e-04 4.52352579e-04 4.58457971e-04 + 4.64645768e-04 4.70917081e-04 4.77273037e-04 4.83714780e-04 4.90243467e-04 + 4.96860271e-04 5.03566382e-04 5.10363006e-04 5.17251363e-04 5.24232693e-04 + 5.31308249e-04 5.38479303e-04 5.45747146e-04 5.53113082e-04 5.60578436e-04 + 5.68144550e-04 5.75812783e-04 5.83584515e-04 5.91461141e-04 5.99444078e-04 + 6.07534760e-04 6.15734643e-04 6.24045198e-04 6.32467922e-04 6.41004326e-04 + 6.49655946e-04 6.58424337e-04 6.67311075e-04 6.76317756e-04 6.85446001e-04 + 6.94697449e-04 7.04073764e-04 7.13576631e-04 7.23207758e-04 7.32968876e-04 + 7.42861739e-04 7.52888126e-04 7.63049839e-04 7.73348705e-04 7.83786574e-04 + 7.94365323e-04 8.05086852e-04 8.15953090e-04 8.26965990e-04 8.38127530e-04 + 8.49439717e-04 8.60904585e-04 8.72524194e-04 8.84300632e-04 8.96236017e-04 + 9.08332493e-04 9.20592235e-04 9.33017446e-04 9.45610360e-04 9.58373241e-04 + 9.71308382e-04 9.84418108e-04 9.97704775e-04 1.01117077e-03 1.02481852e-03 + 1.03865047e-03 1.05266911e-03 1.06687696e-03 1.08127658e-03 1.09587054e-03 + 1.11066148e-03 1.12565205e-03 1.14084495e-03 1.15624291e-03 1.17184869e-03 + 1.18766510e-03 1.20369499e-03 1.21994123e-03 1.23640675e-03 1.25309450e-03 + 1.27000749e-03 1.28714875e-03 1.30452137e-03 1.32212846e-03 1.33997320e-03 + 1.35805878e-03 1.37638847e-03 1.39496555e-03 1.41379337e-03 1.43287530e-03 + 1.45221479e-03 1.47181530e-03 1.49168035e-03 1.51181353e-03 1.53221844e-03 + 1.55289875e-03 1.57385819e-03 1.59510052e-03 1.61662955e-03 1.63844916e-03 + 1.66056327e-03 1.68297585e-03 1.70569094e-03 1.72871261e-03 1.75204500e-03 + 1.77569231e-03 1.79965879e-03 1.82394874e-03 1.84856653e-03 1.87351659e-03 + 1.89880340e-03 1.92443150e-03 1.95040551e-03 1.97673009e-03 2.00340997e-03 + 2.03044994e-03 2.05785488e-03 2.08562970e-03 2.11377939e-03 2.14230902e-03 + 2.17122371e-03 2.20052867e-03 2.23022915e-03 2.26033050e-03 2.29083813e-03 + 2.32175752e-03 2.35309422e-03 2.38485388e-03 2.41704219e-03 2.44966495e-03 + 2.48272802e-03 2.51623735e-03 2.55019894e-03 2.58461891e-03 2.61950345e-03 + 2.65485883e-03 2.69069140e-03 2.72700759e-03 2.76381395e-03 2.80111708e-03 + 2.83892369e-03 2.87724058e-03 2.91607463e-03 2.95543282e-03 2.99532222e-03 + 3.03575001e-03 3.07672346e-03 3.11824992e-03 3.16033687e-03 3.20299186e-03 + 3.24622256e-03 3.29003675e-03 3.33444230e-03 3.37944719e-03 3.42505951e-03 + 3.47128745e-03 3.51813934e-03 3.56562358e-03 3.61374872e-03 3.66252340e-03 + 3.71195639e-03 3.76205657e-03 3.81283296e-03 3.86429468e-03 3.91645097e-03 + 3.96931122e-03 4.02288492e-03 4.07718170e-03 4.13221132e-03 4.18798368e-03 + 4.24450880e-03 4.30179683e-03 4.35985808e-03 4.41870298e-03 4.47834211e-03 + 4.53878618e-03 4.60004607e-03 4.66213279e-03 4.72505748e-03 4.78883147e-03 + 4.85346621e-03 4.91897333e-03 4.98536460e-03 5.05265194e-03 5.12084747e-03 + 5.18996342e-03 5.26001224e-03 5.33100650e-03 5.40295896e-03 5.47588257e-03 + 5.54979043e-03 5.62469582e-03 5.70061220e-03 5.77755323e-03 5.85553273e-03 + 5.93456471e-03 6.01466339e-03 6.09584316e-03 6.17811861e-03 6.26150453e-03 + 6.34601591e-03 6.43166793e-03 6.51847600e-03 6.60645572e-03 6.69562289e-03 + 6.78599356e-03 6.87758395e-03 6.97041054e-03 7.06449000e-03 7.15983925e-03 + 7.25647543e-03 7.35441591e-03 7.45367829e-03 7.55428040e-03 7.65624035e-03 + 7.75957644e-03 7.86430726e-03 7.97045163e-03 8.07802862e-03 8.18705758e-03 + 8.29755810e-03 8.40955005e-03 8.52305354e-03 8.63808899e-03 8.75467707e-03 + 8.87283874e-03 8.99259524e-03 9.11396808e-03 9.23697909e-03 9.36165038e-03 + 9.48800435e-03 9.61606372e-03 9.74585150e-03 9.87739102e-03 1.00107059e-02 + 1.01458202e-02 1.02827581e-02 1.04215442e-02 1.05622036e-02 1.07047614e-02 + 1.08492433e-02 1.09956753e-02 1.11440836e-02 1.12944951e-02 1.14469366e-02 + 1.16014356e-02 1.17580199e-02 1.19167176e-02 1.20775573e-02 1.22405678e-02 + 1.24057784e-02 1.25732189e-02 1.27429194e-02 1.29149103e-02 1.30892225e-02 + 1.32658874e-02 1.34449368e-02 1.36264028e-02 1.38103180e-02 1.39967155e-02 + 1.41856289e-02 1.43770920e-02 1.45711392e-02 1.47678056e-02 1.49671263e-02 + 1.51691372e-02 1.53738747e-02 1.55813755e-02 1.57916770e-02 1.60048169e-02 + 1.62208335e-02 1.64397657e-02 1.66616528e-02 1.68865348e-02 1.71144519e-02 + 1.73454453e-02 1.75795563e-02 1.78168272e-02 1.80573005e-02 1.83010194e-02 + 1.85480279e-02 1.87983701e-02 1.90520913e-02 1.93092369e-02 1.95698532e-02 + 1.98339871e-02 2.01016859e-02 2.03729979e-02 2.06479718e-02 2.09266569e-02 + 2.12091035e-02 2.14953623e-02 2.17854847e-02 2.20795229e-02 2.23775297e-02 + 2.26795586e-02 2.29856641e-02 2.32959011e-02 2.36103253e-02 2.39289933e-02 + 2.42519623e-02 2.45792905e-02 2.49110366e-02 2.52472603e-02 2.55880219e-02 + 2.59333828e-02 2.62834051e-02 2.66381516e-02 2.69976861e-02 2.73620732e-02 + 2.77313785e-02 2.81056682e-02 2.84850098e-02 2.88694713e-02 2.92591218e-02 + 2.96540315e-02 3.00542712e-02 3.04599130e-02 3.08710297e-02 3.12876953e-02 + 3.17099846e-02 3.21379735e-02 3.25717389e-02 3.30113589e-02 3.34569125e-02 + 3.39084796e-02 3.43661415e-02 3.48299805e-02 3.53000800e-02 3.57765243e-02 + 3.62593992e-02 3.67487914e-02 3.72447890e-02 3.77474810e-02 3.82569579e-02 + 3.87733111e-02 3.92966336e-02 3.98270193e-02 4.03645636e-02 4.09093632e-02 + 4.14615159e-02 4.20211210e-02 4.25882791e-02 4.31630920e-02 4.37456633e-02 + 4.43360974e-02 4.49345007e-02 4.55409806e-02 4.61556461e-02 4.67786078e-02 + 4.74099775e-02 4.80498689e-02 4.86983968e-02 4.93556779e-02 5.00218303e-02 + 5.06969737e-02 5.13812296e-02 5.20747208e-02 5.27775721e-02 5.34899097e-02 + 5.42118618e-02 5.49435580e-02 5.56851299e-02 5.64367107e-02 5.71984357e-02 + 5.79704416e-02 5.87528673e-02 5.95458533e-02 6.03495423e-02 6.11640786e-02 + 6.19896087e-02 6.28262810e-02 6.36742458e-02 6.45336556e-02 6.54046648e-02 + 6.62874300e-02 6.71821099e-02 6.80888652e-02 6.90078590e-02 6.99392564e-02 + 7.08832249e-02 7.18399341e-02 7.28095560e-02 7.37922648e-02 7.47882373e-02 + 7.57976523e-02 7.68206914e-02 7.78575385e-02 7.89083798e-02 7.99734043e-02 + 8.10528035e-02 8.21467712e-02 8.32555042e-02 8.43792018e-02 8.55180659e-02 + 8.66723011e-02 8.78421151e-02 8.90277181e-02 9.02293231e-02 9.14471461e-02 + 9.26814060e-02 9.39323248e-02 9.52001271e-02 9.64850410e-02 9.77872973e-02 + 9.91071301e-02 1.00444777e-01 1.01800477e-01 1.03174476e-01 1.04567019e-01 + 1.05978358e-01 1.07408745e-01 1.08858439e-01 1.10327698e-01 1.11816789e-01 + 1.13325977e-01 1.14855535e-01 1.16405738e-01 1.17976863e-01 1.19569194e-01 + 1.21183017e-01 1.22818621e-01 1.24476301e-01 1.26156355e-01 1.27859084e-01 + 1.29584795e-01 1.31333798e-01 1.33106407e-01 1.34902941e-01 1.36723723e-01 + 1.38569080e-01 1.40439343e-01 1.42334850e-01 1.44255940e-01 1.46202959e-01 + 1.48176257e-01 1.50176188e-01 1.52203112e-01 1.54257394e-01 1.56339402e-01 + 1.58449512e-01 1.60588101e-01 1.62755555e-01 1.64952263e-01 1.67178619e-01 + 1.69435025e-01 1.71721886e-01 1.74039612e-01 1.76388620e-01 1.78769333e-01 + 1.81182179e-01 1.83627590e-01 1.86106008e-01 1.88617876e-01 1.91163647e-01 + 1.93743778e-01 1.96358733e-01 1.99008982e-01 2.01695002e-01 2.04417275e-01 + 2.07176290e-01 2.09972543e-01 2.12806537e-01 2.15678782e-01 2.18589794e-01 + 2.21540095e-01 2.24530216e-01 2.27560695e-01 2.30632076e-01 2.33744912e-01 + 2.36899762e-01 2.40097192e-01 2.43337778e-01 2.46622102e-01 2.49950755e-01 + 2.53324334e-01 2.56743447e-01 2.60208707e-01 2.63720738e-01 2.67280170e-01 + 2.70887644e-01 2.74543808e-01 2.78249320e-01 2.82004844e-01 2.85811057e-01 + 2.89668642e-01 2.93578293e-01 2.97540712e-01 3.01556612e-01 3.05626714e-01 + 3.09751751e-01 3.13932463e-01 3.18169601e-01 3.22463929e-01 3.26816217e-01 + 3.31227248e-01 3.35697814e-01 3.40228719e-01 3.44820778e-01 3.49474816e-01 + 3.54191669e-01 3.58972186e-01 3.63817225e-01 3.68727657e-01 3.73704366e-01 + 3.78748245e-01 3.83860201e-01 3.89041153e-01 3.94292032e-01 3.99613782e-01 + 4.05007360e-01 4.10473734e-01 4.16013889e-01 4.21628818e-01 4.27319532e-01 + 4.33087054e-01 4.38932419e-01 4.44856680e-01 4.50860900e-01 4.56946159e-01 + 4.63113550e-01 4.69364183e-01 4.75699180e-01 4.82119680e-01 4.88626838e-01 + 4.95221823e-01 5.01905820e-01 5.08680031e-01 5.15545673e-01 5.22503981e-01 + 5.29556205e-01 5.36703612e-01 5.43947488e-01 5.51289134e-01 5.58729871e-01 + 5.66271034e-01 5.73913981e-01 5.81660084e-01 5.89510737e-01 5.97467349e-01 + 6.05531351e-01 6.13704194e-01 6.21987345e-01 6.30382293e-01 6.38890548e-01 + 6.47513638e-01 6.56253114e-01 6.65110547e-01 6.74087528e-01 6.83185672e-01 + 6.92406612e-01 7.01752008e-01 7.11223538e-01 7.20822905e-01 7.30551835e-01 + 7.40412075e-01 7.50405399e-01 7.60533603e-01 7.70798507e-01 7.81201956e-01 + 7.91745820e-01 8.02431995e-01 8.13262400e-01 8.24238984e-01 8.35363718e-01 + 8.46638602e-01 8.58065663e-01 8.69646955e-01 8.81384559e-01 8.93280585e-01 + 9.05337172e-01 9.17556486e-01 9.29940724e-01 9.42492112e-01 9.55212906e-01 + 9.68105391e-01 9.81171887e-01 9.94414740e-01 1.00783633e+00 1.02143908e+00 + 1.03522541e+00 1.04919783e+00 1.06335883e+00 1.07771095e+00 1.09225679e+00 + 1.10699896e+00 1.12194010e+00 1.13708289e+00 1.15243007e+00 1.16798440e+00 + 1.18374865e+00 1.19972568e+00 1.21591835e+00 1.23232957e+00 1.24896229e+00 + 1.26581951e+00 1.28290424e+00 1.30021957e+00 1.31776860e+00 1.33555450e+00 + 1.35358044e+00 1.37184969e+00 1.39036551e+00 1.40913124e+00 1.42815025e+00 + 1.44742596e+00 1.46696183e+00 1.48676138e+00 1.50682816e+00 1.52716579e+00 + 1.54777791e+00 1.56866823e+00 1.58984051e+00 1.61129855e+00 1.63304621e+00 + 1.65508739e+00 1.67742607e+00 1.70006625e+00 1.72301200e+00 1.74626745e+00 + 1.76983678e+00 1.79372423e+00 1.81793408e+00 1.84247069e+00 1.86733848e+00 + 1.89254190e+00 1.91808549e+00 1.94397385e+00 1.97021161e+00 1.99680351e+00 + 2.02375432e+00 2.05106889e+00 2.07875211e+00 2.10680898e+00 2.13524453e+00 + 2.16406388e+00 2.19327220e+00 2.22287474e+00 2.25287683e+00 2.28328385e+00 + 2.31410128e+00 2.34533465e+00 2.37698957e+00 2.40907175e+00 2.44158693e+00 + 2.47454097e+00 2.50793979e+00 2.54178939e+00 2.57609587e+00 2.61086537e+00 + 2.64610416e+00 2.68181856e+00 2.71801500e+00 2.75469999e+00 2.79188011e+00 + 2.82956205e+00 2.86775258e+00 2.90645857e+00 2.94568697e+00 2.98544484e+00 + 3.02573931e+00 3.06657764e+00 3.10796717e+00 3.14991533e+00 3.19242966e+00 + 3.23551781e+00 3.27918751e+00 3.32344663e+00 3.36830311e+00 3.41376502e+00 + 3.45984052e+00 3.50653791e+00 3.55386557e+00 3.60183200e+00 3.65044585e+00 + 3.69971583e+00 3.74965080e+00 3.80025975e+00 3.85155177e+00 3.90353607e+00 + 3.95622200e+00 4.00961904e+00 4.06373677e+00 4.11858493e+00 4.17417337e+00 + 4.23051209e+00 4.28761121e+00 4.34548099e+00 4.40413185e+00 4.46357431e+00 + 4.52381907e+00 4.58487694e+00 4.64675892e+00 4.70947611e+00 4.77303980e+00 + 4.83746140e+00 4.90275251e+00 4.96892484e+00 5.03599030e+00 5.10396094e+00 + 5.17284898e+00 5.24266680e+00 5.31342695e+00 5.38514215e+00 5.45782528e+00 + 5.53148942e+00 5.60614780e+00 5.68181384e+00 5.75850115e+00 5.83622350e+00 + 5.91499487e+00 5.99482942e+00 6.07574149e+00 6.15774562e+00 6.24085657e+00 + 6.32508926e+00 6.41045884e+00 6.49698065e+00 6.58467024e+00 6.67354338e+00 + 6.76361604e+00 6.85490440e+00 6.94742488e+00 7.04119411e+00 7.13622894e+00 + 7.23254645e+00 7.33016396e+00 7.42909901e+00 7.52936938e+00 7.63099310e+00 + 7.73398843e+00 7.83837389e+00 7.94416823e+00 8.05139048e+00 8.16005991e+00 + 8.27019604e+00 8.38181868e+00 8.49494789e+00 8.60960400e+00 8.72580762e+00 + 8.84357964e+00 8.96294122e+00 9.08391382e+00 9.20651919e+00 9.33077936e+00 + 9.45671667e+00 9.58435375e+00 9.71371354e+00 9.84481930e+00 9.97769459e+00 + 1.01123633e+01 1.02488496e+01 1.03871781e+01 1.05273736e+01 1.06694613e+01 + 1.08134668e+01 1.09594159e+01 1.11073349e+01 1.12572503e+01 1.14091891e+01 + 1.15631787e+01 1.17192466e+01 1.18774210e+01 1.20377303e+01 1.22002032e+01 + 1.23648691e+01 1.25317574e+01 1.27008983e+01 1.28723220e+01 1.30460594e+01 + 1.32221418e+01 1.34006007e+01 1.35814683e+01 1.37647770e+01 1.39505599e+01 + 1.41388503e+01 1.43296820e+01 1.45230894e+01 1.47191072e+01 1.49177706e+01 + 1.51191154e+01 1.53231778e+01 1.55299943e+01 1.57396023e+01 1.59520393e+01 + 1.61673436e+01 1.63855539e+01 1.66067093e+01 1.68308497e+01 1.70580152e+01 + 1.72882469e+01 1.75215859e+01 1.77580743e+01 1.79977547e+01 1.82406699e+01 + 1.84868638e+01 1.87363806e+01 1.89892650e+01 1.92455627e+01 1.95053196e+01 + 1.97685824e+01 2.00353985e+01 2.03058158e+01 2.05798829e+01 2.08576491e+01 + 2.11391643e+01 2.14244791e+01 2.17136448e+01 2.20067133e+01 2.23037374e+01 + 2.26047704e+01 2.29098665e+01 2.32190804e+01 2.35324678e+01 2.38500849e+01 + 2.41719890e+01 2.44982377e+01 2.48288899e+01 2.51640048e+01 2.55036428e+01 + 2.58478648e+01 2.61967328e+01 2.65503095e+01 2.69086584e+01 2.72718439e+01 + 2.76399314e+01 2.80129869e+01 2.83910775e+01 2.87742712e+01 2.91626368e+01 + 2.95562442e+01 2.99551642e+01 3.03594683e+01 3.07692293e+01 3.11845209e+01 + 3.16054176e+01 3.20319952e+01 3.24643303e+01 3.29025005e+01 3.33465848e+01 + 3.37966629e+01 3.42528156e+01 3.47151251e+01 3.51836743e+01 3.56585475e+01 + 3.61398301e+01 3.66276085e+01 3.71219704e+01 3.76230048e+01 3.81308016e+01 + 3.86454521e+01 3.91670489e+01 3.96956856e+01 4.02314573e+01 4.07744603e+01 + 4.13247922e+01 4.18825520e+01 4.24478398e+01 4.30207573e+01 4.36014074e+01 + 4.41898946e+01 4.47863245e+01 4.53908045e+01 4.60034431e+01 4.66243504e+01 + 4.72536382e+01 4.78914194e+01 4.85378088e+01 4.91929224e+01 4.98568781e+01 + 5.05297952e+01 5.12117947e+01 5.19029990e+01 5.26035326e+01 5.33135212e+01 + 5.40330925e+01 5.47623759e+01 5.55015024e+01 5.62506048e+01 5.70098179e+01 + 5.77792780e+01 5.85591236e+01 5.93494947e+01 6.01505334e+01 6.09623837e+01 + 6.17851916e+01 6.26191048e+01 6.34642734e+01 6.43208492e+01 6.51889861e+01 + 6.60688403e+01 6.69605699e+01 6.78643351e+01 6.87802984e+01 6.97086245e+01 + 7.06494801e+01 7.16030345e+01 7.25694589e+01 7.35489272e+01 7.45416153e+01 + 7.55477017e+01 7.65673672e+01 7.76007951e+01 7.86481712e+01 7.97096837e+01 + 8.07855234e+01 8.18758837e+01 8.29809606e+01 8.41009526e+01 8.52360612e+01 + 8.63864902e+01 8.75524466e+01 8.87341399e+01 8.99317825e+01 9.11455896e+01 + 9.23757795e+01 9.36225732e+01 9.48861948e+01 9.61668715e+01 9.74648335e+01 + 9.87803140e+01 1.00113550e+02 1.01464780e+02 1.02834247e+02 1.04222199e+02 + 1.05628883e+02 1.07054554e+02 1.08499467e+02 1.09963881e+02 1.11448061e+02 + 1.12952273e+02 1.14476787e+02 1.16021878e+02 1.17587822e+02 1.19174902e+02 + 1.20783403e+02 1.22413614e+02 1.24065827e+02 1.25740341e+02 1.27437455e+02 + 1.29157476e+02 1.30900711e+02 1.32667475e+02 1.34458085e+02 1.36272862e+02 + 1.38112134e+02 1.39976230e+02 1.41865486e+02 1.43780241e+02 1.45720839e+02 + 1.47687630e+02 1.49680966e+02 1.51701207e+02 1.53748714e+02 1.55823857e+02 + 1.57927008e+02 1.60058545e+02 1.62218851e+02 1.64408315e+02 1.66627330e+02 + 1.68876296e+02 1.71155615e+02 1.73465698e+02 1.75806961e+02 1.78179823e+02 + 1.80584712e+02 1.83022059e+02 1.85492304e+02 1.87995889e+02 1.90533265e+02 + 1.93104888e+02 1.95711220e+02 1.98352730e+02 2.01029892e+02 2.03743187e+02 + 2.06493104e+02 2.09280137e+02 2.12104786e+02 2.14967559e+02 2.17868971e+02 + 2.20809543e+02 2.23789805e+02 2.26810290e+02 2.29871543e+02 2.32974114e+02 + 2.36118560e+02 2.39305447e+02 2.42535347e+02 2.45808840e+02 2.49126516e+02 + 2.52488971e+02 2.55896809e+02 2.59350642e+02 2.62851091e+02 2.66398786e+02 + 2.69994364e+02 2.73638472e+02 2.77331764e+02 2.81074904e+02 2.84868565e+02 + 2.88713429e+02 2.92610188e+02 2.96559540e+02 3.00562197e+02 3.04618878e+02 + 3.08730312e+02 3.12897238e+02 3.17120404e+02 3.21400571e+02 3.25738507e+02 + 3.30134991e+02 3.34590816e+02 3.39106780e+02 3.43683696e+02 3.48322387e+02 + 3.53023686e+02 3.57788438e+02 3.62617500e+02 3.67511740e+02 3.72472037e+02 + 3.77499283e+02 3.82594382e+02 3.87758249e+02 3.92991813e+02 3.98296014e+02 + 4.03671806e+02 4.09120155e+02 4.14642040e+02 4.20238453e+02 4.25910402e+02 + 4.31658904e+02 4.37484994e+02 4.43389719e+02 4.49374139e+02 4.55439331e+02 + 4.61586385e+02 4.67816405e+02 4.74130512e+02 4.80529841e+02 4.87015540e+02 + 4.93588778e+02 5.00250733e+02 5.07002606e+02 5.13845608e+02 5.20780970e+02 + 5.27809938e+02 5.34933776e+02 5.42153765e+02 5.49471201e+02 5.56887401e+02 + 5.64403697e+02 5.72021440e+02 5.79742000e+02 5.87566764e+02 5.95497138e+02 + 6.03534549e+02 6.11680440e+02 6.19936277e+02 6.28303542e+02 6.36783740e+02 + 6.45378395e+02 6.54089052e+02 6.62917276e+02 6.71864655e+02 6.80932796e+02 + 6.90123330e+02 6.99437908e+02 7.08878204e+02 7.18445917e+02 7.28142764e+02 + 7.37970490e+02 7.47930860e+02 7.58025665e+02 7.68256719e+02 7.78625862e+02 + 7.89134956e+02 7.99785892e+02 8.10580583e+02 8.21520970e+02 8.32609019e+02 + 8.43846723e+02 8.55236102e+02 8.66779204e+02 8.78478102e+02 8.90334900e+02 + 9.02351729e+02 9.14530748e+02 9.26874148e+02 9.39384146e+02 9.52062992e+02 + 9.64912963e+02 9.77936371e+02 9.91135555e+02 1.00451289e+03 1.01807077e+03 + 1.03181165e+03 1.04573799e+03 1.05985229e+03 1.07415709e+03 1.08865496e+03 + 1.10334851e+03 1.11824038e+03 1.13333325e+03 1.14862982e+03 1.16413285e+03 + 1.17984512e+03 1.19576946e+03 1.21190873e+03 1.22826584e+03 1.24484371e+03 + 1.26164534e+03 1.27867373e+03 1.29593196e+03 1.31342313e+03 1.33115037e+03 + 1.34911687e+03 1.36732587e+03 1.38578063e+03 1.40448448e+03 1.42344078e+03 + 1.44265292e+03 1.46212437e+03 1.48185863e+03 1.50185924e+03 1.52212980e+03 + 1.54267395e+03 1.56349538e+03 1.58459784e+03 1.60598512e+03 1.62766107e+03 + 1.64962957e+03 1.67189458e+03 1.69446010e+03 1.71733019e+03 1.74050895e+03 + 1.76400056e+03 1.78780923e+03 1.81193925e+03 1.83639495e+03 1.86118073e+03 + 1.88630105e+03 1.91176041e+03 1.93756339e+03 1.96371464e+03 1.99021885e+03 + 2.01708078e+03 2.04430527e+03 2.07189721e+03 2.09986156e+03 2.12820334e+03 + 2.15692765e+03 2.18603965e+03 2.21554458e+03 2.24544773e+03 2.27575449e+03 + 2.30647029e+03 2.33760066e+03 2.36915120e+03 2.40112758e+03 2.43353554e+03 + 2.46638092e+03 2.49966960e+03 2.53340758e+03 2.56760092e+03 2.60225577e+03 + 2.63737835e+03 2.67297499e+03 2.70905207e+03 2.74561608e+03 2.78267359e+03 + 2.82023127e+03 2.85829587e+03 2.89687422e+03 2.93597326e+03 2.97560002e+03 + 3.01576162e+03 3.05646529e+03 3.09771833e+03 3.13952816e+03 3.18190229e+03 + 3.22484835e+03 3.26837405e+03 3.31248722e+03 3.35719578e+03 3.40250777e+03 + 3.44843134e+03 3.49497473e+03 3.54214633e+03 3.58995459e+03 3.63840812e+03 + 3.68751563e+03 3.73728594e+03 3.78772800e+03 3.83885087e+03 3.89066375e+03 + 3.94317595e+03 3.99639690e+03 4.05033617e+03 4.10500346e+03 4.16040860e+03 + 4.21656153e+03 4.27347236e+03 4.33115132e+03 4.38960877e+03 4.44885521e+03 + 4.50890130e+03 4.56975784e+03 4.63143575e+03 4.69394613e+03 4.75730021e+03 + 4.82150937e+03 4.88658517e+03 4.95253929e+03 5.01938360e+03 5.08713010e+03 + 5.15579097e+03 5.22537856e+03 5.29590537e+03 5.36738408e+03 5.43982754e+03 + 5.51324876e+03 5.58766095e+03 5.66307747e+03 5.73951189e+03 5.81697795e+03 + 5.89548956e+03 5.97506084e+03 6.05570610e+03 6.13743982e+03 6.22027670e+03 + 6.30423162e+03 6.38931969e+03 6.47555618e+03 6.56295661e+03 6.65153668e+03 + 6.74131231e+03 6.83229964e+03 6.92451503e+03 7.01797504e+03 7.11269648e+03 + 7.20869638e+03 7.30599198e+03 7.40460078e+03 7.50454050e+03 7.60582911e+03 + 7.70848480e+03 7.81252604e+03 7.91797151e+03 8.02484019e+03 8.13315126e+03 + 8.24292421e+03 8.35417876e+03 8.46693492e+03 8.58121294e+03 8.69703336e+03 + 8.81441701e+03 8.93338499e+03 9.05395867e+03 9.17615974e+03 9.30001015e+03 + 9.42553216e+03 9.55274835e+03 9.68168156e+03 9.81235499e+03 9.94479211e+03 + 1.00790167e+04 1.02150530e+04 1.03529253e+04 1.04926585e+04 1.06342777e+04 + 1.07778082e+04 1.09232761e+04 1.10707073e+04 1.12201283e+04 1.13715661e+04 + 1.15250479e+04 1.16806012e+04 1.18382540e+04 1.19980346e+04 1.21599718e+04 + 1.23240947e+04 1.24904327e+04 1.26590157e+04 1.28298742e+04 1.30030387e+04 + 1.31785404e+04 1.33564108e+04 1.35366820e+04 1.37193863e+04 1.39045565e+04 + 1.40922260e+04 1.42824284e+04 1.44751980e+04 1.46705694e+04 1.48685777e+04 + 1.50692586e+04 1.52726480e+04 1.54787826e+04 1.56876993e+04 1.58994358e+04 + 1.61140301e+04 1.63315208e+04 1.65519470e+04 1.67753482e+04 1.70017647e+04 + 1.72312371e+04 1.74638067e+04 1.76995153e+04 1.79384052e+04 1.81805194e+04 + 1.84259015e+04 1.86745954e+04 1.89266460e+04 1.91820985e+04 1.94409988e+04 + 1.97033935e+04 1.99693297e+04 2.02388553e+04 2.05120186e+04 2.07888689e+04 + 2.10694557e+04 2.13538297e+04 2.16420418e+04 2.19341439e+04 2.22301885e+04 + 2.25302289e+04 2.28343188e+04 2.31425131e+04 2.34548670e+04 2.37714368e+04 + 2.40922793e+04 2.44174522e+04 2.47470140e+04 2.50810239e+04 2.54195419e+04 + 2.57626288e+04 2.61103464e+04 2.64627571e+04 2.68199243e+04 2.71819122e+04 + 2.75487858e+04 2.79206111e+04 2.82974550e+04 2.86793850e+04 2.90664700e+04 + 2.94587795e+04 2.98563839e+04 3.02593548e+04 3.06677646e+04 3.10816867e+04 + 3.15011955e+04 3.19263663e+04 3.23572758e+04 3.27940011e+04 3.32366210e+04 + 3.36852149e+04 3.41398634e+04 3.46006483e+04 3.50676525e+04 3.55409597e+04 + 3.60206552e+04 3.65068251e+04 3.69995569e+04 3.74989390e+04 3.80050613e+04 + 3.85180147e+04 3.90378914e+04 3.95647849e+04 4.00987899e+04 4.06400023e+04 + 4.11885195e+04 4.17444399e+04 4.23078636e+04 4.28788919e+04 4.34576272e+04 + 4.40441738e+04 4.46386370e+04 4.52411236e+04 4.58517419e+04 4.64706018e+04 + 4.70978144e+04 4.77334925e+04 4.83777503e+04 4.90307037e+04 4.96924699e+04 + 5.03631680e+04 5.10429184e+04 5.17318435e+04 5.24300670e+04 5.31377143e+04 + 5.38549128e+04 5.45817913e+04 5.53184804e+04 5.60651126e+04 5.68218221e+04 + 5.75887449e+04 5.83660188e+04 5.91537836e+04 5.99521808e+04 6.07613539e+04 + 6.15814485e+04 6.24126118e+04 6.32549933e+04 6.41087445e+04 6.49740187e+04 + 6.58509715e+04 6.67397605e+04 6.76405454e+04 6.85534882e+04 6.94787530e+04 + 7.04165061e+04 7.13669160e+04 7.23301536e+04 7.33063919e+04 7.42958066e+04 + 7.52985753e+04 7.63148784e+04 7.73448985e+04 7.83888207e+04 7.94468328e+04 + 8.05191248e+04 8.16058895e+04 8.27073222e+04 8.38236210e+04 8.49549864e+04 + 8.61016218e+04 8.72637334e+04 8.84415299e+04 8.96352231e+04 9.08450276e+04 + 9.20711608e+04 9.33138430e+04 9.45732977e+04 9.58497513e+04 9.71434331e+04 + 9.84545757e+04 9.97834147e+04 1.01130189e+05 1.02495141e+05 1.03878515e+05 + 1.05280561e+05 1.06701530e+05 1.08141678e+05 1.09601264e+05 1.11080550e+05 + 1.12579801e+05 1.14099288e+05 1.15639284e+05 1.17200064e+05 1.18781911e+05 + 1.20385107e+05 1.22009942e+05 1.23656707e+05 1.25325699e+05 1.27017217e+05 + 1.28731565e+05 1.30469052e+05 1.32229990e+05 1.34014695e+05 1.35823488e+05 + 1.37656695e+05 1.39514644e+05 1.41397670e+05 1.43306110e+05 1.45240310e+05 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 4.46340243e-06 4.52364487e-06 4.58470040e-06 4.64657999e-06 4.70929477e-06 + 4.77285601e-06 4.83727513e-06 4.90256372e-06 4.96873350e-06 5.03579638e-06 + 5.10376441e-06 5.17264979e-06 5.24246492e-06 5.31322235e-06 5.38493478e-06 + 5.45761512e-06 5.53127642e-06 5.60593193e-06 5.68159506e-06 5.75827941e-06 + 5.83599877e-06 5.91476711e-06 5.99459858e-06 6.07550753e-06 6.15750851e-06 + 6.24061626e-06 6.32484571e-06 6.41021200e-06 6.49673048e-06 6.58441669e-06 + 6.67328641e-06 6.76335560e-06 6.85464044e-06 6.94715736e-06 7.04092298e-06 + 7.13595415e-06 7.23226795e-06 7.32988170e-06 7.42881294e-06 7.52907945e-06 + 7.63069926e-06 7.73369062e-06 7.83807206e-06 7.94386233e-06 8.05108045e-06 + 8.15974569e-06 8.26987759e-06 8.38149593e-06 8.49462078e-06 8.60927247e-06 + 8.72547162e-06 8.84323910e-06 8.96259609e-06 9.08356403e-06 9.20616468e-06 + 9.33042007e-06 9.45635252e-06 9.58398469e-06 9.71333950e-06 9.84444021e-06 + 9.97731039e-06 1.01119739e-05 1.02484550e-05 1.03867781e-05 1.05269682e-05 + 1.06690505e-05 1.08130504e-05 1.09589939e-05 1.11069072e-05 1.12568168e-05 + 1.14087498e-05 1.15627334e-05 1.17187954e-05 1.18769637e-05 1.20372668e-05 + 1.21997335e-05 1.23643930e-05 1.25312749e-05 1.27004092e-05 1.28718263e-05 + 1.30455571e-05 1.32216326e-05 1.34000847e-05 1.35809453e-05 1.37642470e-05 + 1.39500227e-05 1.41383059e-05 1.43291302e-05 1.45225302e-05 1.47185404e-05 + 1.49171962e-05 1.51185332e-05 1.53225877e-05 1.55293963e-05 1.57389962e-05 + 1.59514251e-05 1.61667211e-05 1.63849229e-05 1.66060698e-05 1.68302016e-05 + 1.70573584e-05 1.72875812e-05 1.75209112e-05 1.77573905e-05 1.79970616e-05 + 1.82399675e-05 1.84861519e-05 1.87356591e-05 1.89885338e-05 1.92448216e-05 + 1.95045685e-05 1.97678212e-05 2.00346270e-05 2.03050339e-05 2.05790905e-05 + 2.08568460e-05 2.11383503e-05 2.14236541e-05 2.17128087e-05 2.20058659e-05 + 2.23028786e-05 2.26039000e-05 2.29089843e-05 2.32181863e-05 2.35315616e-05 + 2.38491666e-05 2.41710582e-05 2.44972944e-05 2.48279338e-05 2.51630358e-05 + 2.55026607e-05 2.58468695e-05 2.61957241e-05 2.65492872e-05 2.69076223e-05 + 2.72707938e-05 2.76388671e-05 2.80119082e-05 2.83899842e-05 2.87731632e-05 + 2.91615139e-05 2.95551061e-05 2.99540107e-05 3.03582993e-05 3.07680445e-05 + 3.11833201e-05 3.16042006e-05 3.20307617e-05 3.24630802e-05 3.29012336e-05 + 3.33453008e-05 3.37953615e-05 3.42514967e-05 3.47137883e-05 3.51823195e-05 + 3.56571744e-05 3.61384384e-05 3.66261981e-05 3.71205410e-05 3.76215561e-05 + 3.81293333e-05 3.86439640e-05 3.91655407e-05 3.96941570e-05 4.02299081e-05 + 4.07728902e-05 4.13232010e-05 4.18809392e-05 4.24462053e-05 4.30191007e-05 + 4.35997285e-05 4.41881930e-05 4.47846000e-05 4.53890566e-05 4.60016716e-05 + 4.66225551e-05 4.72518186e-05 4.78895753e-05 4.85359398e-05 4.91910282e-05 + 4.98549583e-05 5.05278495e-05 5.12098227e-05 5.19010004e-05 5.26015070e-05 + 5.33114683e-05 5.40310119e-05 5.47602672e-05 5.54993652e-05 5.62484388e-05 + 5.70076227e-05 5.77770532e-05 5.85568687e-05 5.93472093e-05 6.01482172e-05 + 6.09600363e-05 6.17828124e-05 6.26166936e-05 6.34618296e-05 6.43183724e-05 + 6.51864759e-05 6.60662962e-05 6.69579915e-05 6.78617219e-05 6.87776499e-05 + 6.97059402e-05 7.06467597e-05 7.16002773e-05 7.25666645e-05 7.35460951e-05 + 7.45387450e-05 7.55447926e-05 7.65644189e-05 7.75978070e-05 7.86451428e-05 + 7.97066144e-05 8.07824127e-05 8.18727310e-05 8.29777653e-05 8.40977142e-05 + 8.52327790e-05 8.63831638e-05 8.75490753e-05 8.87307231e-05 8.99283196e-05 + 9.11420799e-05 9.23722224e-05 9.36189681e-05 9.48825411e-05 9.61631685e-05 + 9.74610805e-05 9.87765104e-05 1.00109695e-04 1.01460873e-04 1.02830288e-04 + 1.04218186e-04 1.05624816e-04 1.07050432e-04 1.08495289e-04 1.09959647e-04 + 1.11443770e-04 1.12947924e-04 1.14472379e-04 1.16017410e-04 1.17583294e-04 + 1.19170313e-04 1.20778752e-04 1.22408900e-04 1.24061050e-04 1.25735499e-04 + 1.27432548e-04 1.29152502e-04 1.30895670e-04 1.32662366e-04 1.34452907e-04 + 1.36267615e-04 1.38106815e-04 1.39970840e-04 1.41860023e-04 1.43774704e-04 + 1.45715228e-04 1.47681943e-04 1.49675203e-04 1.51695365e-04 1.53742794e-04 + 1.55817857e-04 1.57920927e-04 1.60052382e-04 1.62212605e-04 1.64401985e-04 + 1.66620914e-04 1.68869793e-04 1.71149024e-04 1.73459019e-04 1.75800191e-04 + 1.78172962e-04 1.80577758e-04 1.83015012e-04 1.85485161e-04 1.87988650e-04 + 1.90525928e-04 1.93097452e-04 1.95703684e-04 1.98345092e-04 2.01022151e-04 + 2.03735342e-04 2.06485153e-04 2.09272078e-04 2.12096618e-04 2.14959281e-04 + 2.17860582e-04 2.20801041e-04 2.23781187e-04 2.26801557e-04 2.29862692e-04 + 2.32965143e-04 2.36109468e-04 2.39296232e-04 2.42526007e-04 2.45799375e-04 + 2.49116923e-04 2.52479249e-04 2.55886955e-04 2.59340655e-04 2.62840970e-04 + 2.66388528e-04 2.69983968e-04 2.73627935e-04 2.77321085e-04 2.81064081e-04 + 2.84857596e-04 2.88702312e-04 2.92598920e-04 2.96548121e-04 3.00550624e-04 + 3.04607148e-04 3.08718424e-04 3.12885189e-04 3.17108193e-04 3.21388195e-04 + 3.25725964e-04 3.30122279e-04 3.34577932e-04 3.39093722e-04 3.43670462e-04 + 3.48308974e-04 3.53010092e-04 3.57774661e-04 3.62603537e-04 3.67497588e-04 + 3.72457694e-04 3.77484747e-04 3.82579649e-04 3.87743318e-04 3.92976680e-04 + 3.98280677e-04 4.03656262e-04 4.09104401e-04 4.14626073e-04 4.20222271e-04 + 4.25894001e-04 4.31642283e-04 4.37468148e-04 4.43372645e-04 4.49356835e-04 + 4.55421794e-04 4.61568611e-04 4.67798392e-04 4.74112255e-04 4.80511337e-04 + 4.86996787e-04 4.93569771e-04 5.00231471e-04 5.06983083e-04 5.13825821e-04 + 5.20760916e-04 5.27789614e-04 5.34913178e-04 5.42132888e-04 5.49450043e-04 + 5.56865957e-04 5.64381964e-04 5.71999414e-04 5.79719676e-04 5.87544139e-04 + 5.95474208e-04 6.03511309e-04 6.11656887e-04 6.19912405e-04 6.28279348e-04 + 6.36759220e-04 6.45353544e-04 6.54063865e-04 6.62891749e-04 6.71838784e-04 + 6.80906576e-04 6.90096755e-04 6.99410975e-04 7.08850908e-04 7.18418252e-04 + 7.28114726e-04 7.37942073e-04 7.47902060e-04 7.57996476e-04 7.68227136e-04 + 7.78595880e-04 7.89104570e-04 7.99755095e-04 8.10549371e-04 8.21489336e-04 + 8.32576958e-04 8.43814230e-04 8.55203170e-04 8.66745827e-04 8.78444275e-04 + 8.90300616e-04 9.02316982e-04 9.14495533e-04 9.26838458e-04 9.39347974e-04 + 9.52026331e-04 9.64875808e-04 9.77898714e-04 9.91097390e-04 1.00447421e-03 + 1.01803157e-03 1.03177192e-03 1.04569772e-03 1.05981148e-03 1.07411573e-03 + 1.08861304e-03 1.10330603e-03 1.11819732e-03 1.13328960e-03 1.14858559e-03 + 1.16408802e-03 1.17979969e-03 1.19572342e-03 1.21186207e-03 1.22821854e-03 + 1.24479578e-03 1.26159676e-03 1.27862450e-03 1.29588206e-03 1.31337255e-03 + 1.33109911e-03 1.34906492e-03 1.36727322e-03 1.38572727e-03 1.40443040e-03 + 1.42338596e-03 1.44259737e-03 1.46206807e-03 1.48180157e-03 1.50180141e-03 + 1.52207119e-03 1.54261455e-03 1.56343518e-03 1.58453683e-03 1.60592328e-03 + 1.62759839e-03 1.64956605e-03 1.67183020e-03 1.69439485e-03 1.71726406e-03 + 1.74044193e-03 1.76393264e-03 1.78774039e-03 1.81186948e-03 1.83632424e-03 + 1.86110907e-03 1.88622841e-03 1.91168679e-03 1.93748878e-03 1.96363902e-03 + 1.99014221e-03 2.01700311e-03 2.04422656e-03 2.07181743e-03 2.09978070e-03 + 2.12812139e-03 2.15684460e-03 2.18595548e-03 2.21545927e-03 2.24536127e-03 + 2.27566685e-03 2.30638148e-03 2.33751065e-03 2.36905998e-03 2.40103512e-03 + 2.43344184e-03 2.46628594e-03 2.49957335e-03 2.53331003e-03 2.56750205e-03 + 2.60215557e-03 2.63727680e-03 2.67287206e-03 2.70894775e-03 2.74551035e-03 + 2.78256644e-03 2.82012268e-03 2.85818580e-03 2.89676267e-03 2.93586021e-03 + 2.97548544e-03 3.01564550e-03 3.05634759e-03 3.09759904e-03 3.13940726e-03 + 3.18177977e-03 3.22472418e-03 3.26824820e-03 3.31235967e-03 3.35706651e-03 + 3.40237675e-03 3.44829855e-03 3.49484016e-03 3.54200993e-03 3.58981635e-03 + 3.63826802e-03 3.68737364e-03 3.73714203e-03 3.78758215e-03 3.83870305e-03 + 3.89051394e-03 3.94302411e-03 3.99624301e-03 4.05018021e-03 4.10484540e-03 + 4.16024840e-03 4.21639917e-03 4.27330781e-03 4.33098454e-03 4.38943974e-03 + 4.44868390e-03 4.50872768e-03 4.56958187e-03 4.63125741e-03 4.69376538e-03 + 4.75711702e-03 4.82132372e-03 4.88639701e-03 4.95234859e-03 5.01919032e-03 + 5.08693421e-03 5.15559244e-03 5.22517735e-03 5.29570145e-03 5.36717740e-03 + 5.43961807e-03 5.51303646e-03 5.58744578e-03 5.66285941e-03 5.73929089e-03 + 5.81675396e-03 5.89526255e-03 5.97483077e-03 6.05547291e-03 6.13720349e-03 + 6.22003718e-03 6.30398887e-03 6.38907366e-03 6.47530683e-03 6.56270389e-03 + 6.65128055e-03 6.74105273e-03 6.83203656e-03 6.92424839e-03 7.01770481e-03 + 7.11242260e-03 7.20841880e-03 7.30571066e-03 7.40431566e-03 7.50425153e-03 + 7.60553623e-03 7.70818798e-03 7.81222521e-03 7.91766662e-03 8.02453118e-03 + 8.13283809e-03 8.24260681e-03 8.35385708e-03 8.46660889e-03 8.58088250e-03 + 8.69669847e-03 8.81407760e-03 8.93304100e-03 9.05361004e-03 9.17580640e-03 + 9.29965204e-03 9.42516922e-03 9.55238051e-03 9.68130876e-03 9.81197715e-03 + 9.94440917e-03 1.00786286e-02 1.02146596e-02 1.03525267e-02 1.04922545e-02 + 1.06338682e-02 1.07773932e-02 1.09228555e-02 1.10702810e-02 1.12196963e-02 + 1.13711283e-02 1.15246041e-02 1.16801514e-02 1.18377981e-02 1.19975726e-02 + 1.21595036e-02 1.23236201e-02 1.24899517e-02 1.26585283e-02 1.28293801e-02 + 1.30025380e-02 1.31780329e-02 1.33558965e-02 1.35361607e-02 1.37188580e-02 + 1.39040211e-02 1.40916833e-02 1.42818784e-02 1.44746406e-02 1.46700045e-02 + 1.48680052e-02 1.50686783e-02 1.52720599e-02 1.54781865e-02 1.56870952e-02 + 1.58988236e-02 1.61134096e-02 1.63308919e-02 1.65513096e-02 1.67747022e-02 + 1.70011100e-02 1.72305736e-02 1.74631342e-02 1.76988337e-02 1.79377144e-02 + 1.81798193e-02 1.84251919e-02 1.86738763e-02 1.89259172e-02 1.91813598e-02 + 1.94402502e-02 1.97026348e-02 1.99685608e-02 2.02380760e-02 2.05112288e-02 + 2.07880684e-02 2.10686444e-02 2.13530074e-02 2.16412084e-02 2.19332993e-02 + 2.22293325e-02 2.25293613e-02 2.28334396e-02 2.31416219e-02 2.34539639e-02 + 2.37705215e-02 2.40913516e-02 2.44165120e-02 2.47460611e-02 2.50800581e-02 + 2.54185630e-02 2.57616368e-02 2.61093410e-02 2.64617381e-02 2.68188916e-02 + 2.71808655e-02 2.75477250e-02 2.79195360e-02 2.82963653e-02 2.86782807e-02 + 2.90653508e-02 2.94576451e-02 2.98552342e-02 3.02581896e-02 3.06665837e-02 + 3.10804898e-02 3.14999825e-02 3.19251370e-02 3.23560298e-02 3.27927384e-02 + 3.32353412e-02 3.36839178e-02 3.41385488e-02 3.45993160e-02 3.50663021e-02 + 3.55395912e-02 3.60192682e-02 3.65054194e-02 3.69981322e-02 3.74974951e-02 + 3.80035979e-02 3.85165315e-02 3.90363882e-02 3.95632614e-02 4.00972458e-02 + 4.06384374e-02 4.11869334e-02 4.17428325e-02 4.23062345e-02 4.28772407e-02 + 4.34559538e-02 4.40424778e-02 4.46369181e-02 4.52393815e-02 4.58499764e-02 + 4.64688124e-02 4.70960009e-02 4.77316545e-02 4.83758875e-02 4.90288157e-02 + 4.96905564e-02 5.03612287e-02 5.10409530e-02 5.17298515e-02 5.24280481e-02 + 5.31356682e-02 5.38528390e-02 5.45796895e-02 5.53163503e-02 5.60629537e-02 + 5.68196341e-02 5.75865273e-02 5.83637713e-02 5.91515058e-02 5.99498722e-02 + 6.07590142e-02 6.15790772e-02 6.24102085e-02 6.32525576e-02 6.41062759e-02 + 6.49715168e-02 6.58484358e-02 6.67371905e-02 6.76379408e-02 6.85508485e-02 + 6.94760777e-02 7.04137946e-02 7.13641679e-02 7.23273684e-02 7.33035692e-02 + 7.42929457e-02 7.52956758e-02 7.63119398e-02 7.73419202e-02 7.83858022e-02 + 7.94437736e-02 8.05160243e-02 8.16027471e-02 8.27041375e-02 8.38203932e-02 + 8.49517151e-02 8.60983064e-02 8.72603732e-02 8.84381243e-02 8.96317716e-02 + 9.08415295e-02 9.20676154e-02 9.33102498e-02 9.45696561e-02 9.58460605e-02 + 9.71396924e-02 9.84507846e-02 9.97795725e-02 1.01126295e-01 1.02491194e-01 + 1.03874515e-01 1.05276507e-01 1.06697422e-01 1.08137514e-01 1.09597044e-01 + 1.11076272e-01 1.12575466e-01 1.14094895e-01 1.15634831e-01 1.17195551e-01 + 1.18777337e-01 1.20380472e-01 1.22005244e-01 1.23651946e-01 1.25320873e-01 + 1.27012326e-01 1.28726608e-01 1.30464028e-01 1.32224898e-01 1.34009535e-01 + 1.35818258e-01 1.37651394e-01 1.39509271e-01 1.41392225e-01 1.43300592e-01 + 1.45234717e-01 1.47194946e-01 1.49181633e-01 1.51195134e-01 1.53235811e-01 + 1.55304031e-01 1.57400166e-01 1.59524592e-01 1.61677692e-01 1.63859852e-01 + 1.66071465e-01 1.68312927e-01 1.70584643e-01 1.72887020e-01 1.75220472e-01 + 1.77585418e-01 1.79982284e-01 1.82411501e-01 1.84873504e-01 1.87368738e-01 + 1.89897649e-01 1.92460693e-01 1.95058331e-01 1.97691028e-01 2.00359259e-01 + 2.03063503e-01 2.05804247e-01 2.08581982e-01 2.11397208e-01 2.14250431e-01 + 2.17142164e-01 2.20072926e-01 2.23043245e-01 2.26053655e-01 2.29104696e-01 + 2.32196916e-01 2.35330873e-01 2.38507128e-01 2.41726253e-01 2.44988826e-01 + 2.48295435e-01 2.51646672e-01 2.55043141e-01 2.58485452e-01 2.61974224e-01 + 2.65510084e-01 2.69093668e-01 2.72725618e-01 2.76406590e-01 2.80137243e-01 + 2.83918248e-01 2.87750286e-01 2.91634045e-01 2.95570223e-01 2.99559527e-01 + 3.03602675e-01 3.07700393e-01 3.11853418e-01 3.16062496e-01 3.20328384e-01 + 3.24651848e-01 3.29033667e-01 3.33474626e-01 3.37975525e-01 3.42537173e-01 + 3.47160389e-01 3.51846004e-01 3.56594862e-01 3.61407814e-01 3.66285727e-01 + 3.71229476e-01 3.76239952e-01 3.81318053e-01 3.86464694e-01 3.91680799e-01 + 3.96967305e-01 4.02325164e-01 4.07755337e-01 4.13258801e-01 4.18836545e-01 + 4.24489572e-01 4.30218897e-01 4.36025552e-01 4.41910578e-01 4.47875035e-01 + 4.53919993e-01 4.60046541e-01 4.66255778e-01 4.72548821e-01 4.78926801e-01 + 4.85390865e-01 4.91942174e-01 4.98581905e-01 5.05311254e-01 5.12131428e-01 + 5.19043653e-01 5.26049173e-01 5.33149246e-01 5.40345149e-01 5.47638174e-01 + 5.55029634e-01 5.62520856e-01 5.70113186e-01 5.77807990e-01 5.85606651e-01 + 5.93510570e-01 6.01521168e-01 6.09639885e-01 6.17868180e-01 6.26207532e-01 + 6.34659440e-01 6.43225423e-01 6.51907022e-01 6.60705795e-01 6.69623325e-01 + 6.78661216e-01 6.87821090e-01 6.97104595e-01 7.06513399e-01 7.16049193e-01 + 7.25713692e-01 7.35508633e-01 7.45435775e-01 7.55496904e-01 7.65693828e-01 + 7.76028379e-01 7.86502415e-01 7.97117820e-01 8.07876500e-01 8.18780390e-01 + 8.29831449e-01 8.41031665e-01 8.52383049e-01 8.63887643e-01 8.75547514e-01 + 8.87364758e-01 8.99341499e-01 9.11479889e-01 9.23782112e-01 9.36250377e-01 + 9.48886926e-01 9.61694030e-01 9.74673991e-01 9.87829143e-01 1.00116185e+00 + 1.01467451e+00 1.02836954e+00 1.04224942e+00 1.05631664e+00 1.07057372e+00 + 1.08502323e+00 1.09966776e+00 1.11450995e+00 1.12955246e+00 1.14479801e+00 + 1.16024932e+00 1.17590918e+00 1.19178039e+00 1.20786583e+00 1.22416836e+00 + 1.24069093e+00 1.25743651e+00 1.27440810e+00 1.29160876e+00 1.30904157e+00 + 1.32670967e+00 1.34461624e+00 1.36276449e+00 1.38115769e+00 1.39979915e+00 + 1.41869220e+00 1.43784026e+00 1.45724675e+00 1.47691518e+00 1.49684907e+00 + 1.51705200e+00 1.53752762e+00 1.55827959e+00 1.57931165e+00 1.60062758e+00 + 1.62223122e+00 1.64412643e+00 1.66631717e+00 1.68880741e+00 1.71160120e+00 + 1.73470264e+00 1.75811589e+00 1.78184513e+00 1.80589465e+00 1.83026877e+00 + 1.85497187e+00 1.88000838e+00 1.90538281e+00 1.93109971e+00 1.95716372e+00 + 1.98357951e+00 2.01035184e+00 2.03748551e+00 2.06498540e+00 2.09285646e+00 + 2.12110369e+00 2.14973218e+00 2.17874706e+00 2.20815356e+00 2.23795696e+00 + 2.26816261e+00 2.29877594e+00 2.32980247e+00 2.36124776e+00 2.39311746e+00 + 2.42541731e+00 2.45815311e+00 2.49133074e+00 2.52495618e+00 2.55903545e+00 + 2.59357469e+00 2.62858010e+00 2.66405799e+00 2.70001472e+00 2.73645675e+00 + 2.77339064e+00 2.81082303e+00 2.84876064e+00 2.88721029e+00 2.92617890e+00 + 2.96567347e+00 3.00570109e+00 3.04626897e+00 3.08738439e+00 3.12905474e+00 + 3.17128752e+00 3.21409031e+00 3.25747081e+00 3.30143682e+00 3.34599623e+00 + 3.39115706e+00 3.43692743e+00 3.48331556e+00 3.53032979e+00 3.57797856e+00 + 3.62627045e+00 3.67521414e+00 3.72481842e+00 3.77509220e+00 3.82604453e+00 + 3.87768456e+00 3.93002158e+00 3.98306499e+00 4.03682432e+00 4.09130924e+00 + 4.14652955e+00 4.20249516e+00 4.25921613e+00 4.31670267e+00 4.37496510e+00 + 4.43401390e+00 4.49385968e+00 4.55451320e+00 4.61598536e+00 4.67828720e+00 + 4.74142993e+00 4.80542490e+00 4.87028361e+00 4.93601771e+00 5.00263902e+00 + 5.07015952e+00 5.13859134e+00 5.20794679e+00 5.27823832e+00 5.34947858e+00 + 5.42168036e+00 5.49485665e+00 5.56902060e+00 5.64418554e+00 5.72036498e+00 + 5.79757261e+00 5.87582231e+00 5.95512814e+00 6.03550436e+00 6.11696542e+00 + 6.19952596e+00 6.28320081e+00 6.36800502e+00 6.45395384e+00 6.54106270e+00 + 6.62934727e+00 6.71882341e+00 6.80950721e+00 6.90141496e+00 6.99456320e+00 + 7.08896865e+00 7.18464829e+00 7.28161932e+00 7.37989916e+00 7.47950548e+00 + 7.58045619e+00 7.68276943e+00 7.78646358e+00 7.89155730e+00 7.99806946e+00 + 8.10601921e+00 8.21542596e+00 8.32630937e+00 8.43868936e+00 8.55258615e+00 + 8.66802020e+00 8.78501227e+00 8.90358337e+00 9.02375482e+00 9.14554822e+00 + 9.26898547e+00 9.39408875e+00 9.52088054e+00 9.64938364e+00 9.77962114e+00 + 9.91161645e+00 1.00453933e+01 1.01809757e+01 1.03183881e+01 1.04576552e+01 + 1.05988019e+01 1.07418537e+01 1.08868362e+01 1.10337756e+01 1.11826982e+01 + 1.13336308e+01 1.14866005e+01 1.16416349e+01 1.17987618e+01 1.19580094e+01 + 1.21194064e+01 1.22829817e+01 1.24487648e+01 1.26167855e+01 1.27870739e+01 + 1.29596608e+01 1.31345770e+01 1.33118541e+01 1.34915238e+01 1.36736186e+01 + 1.38581711e+01 1.40452145e+01 1.42347825e+01 1.44269090e+01 1.46216286e+01 + 1.48189764e+01 1.50189878e+01 1.52216987e+01 1.54271456e+01 1.56353654e+01 + 1.58463956e+01 1.60602740e+01 1.62770391e+01 1.64967299e+01 1.67193859e+01 + 1.69450471e+01 1.71737540e+01 1.74055477e+01 1.76404700e+01 1.78785630e+01 + 1.81198695e+01 1.83644330e+01 1.86122973e+01 1.88635070e+01 1.91181073e+01 + 1.93761439e+01 1.96376633e+01 1.99027124e+01 2.01713388e+01 2.04435909e+01 + 2.07195175e+01 2.09991684e+01 2.12825937e+01 2.15698443e+01 2.18609720e+01 + 2.21560290e+01 2.24550684e+01 2.27581439e+01 2.30653100e+01 2.33766220e+01 + 2.36921357e+01 2.40119079e+01 2.43359960e+01 2.46644584e+01 2.49973540e+01 + 2.53347427e+01 2.56766851e+01 2.60232427e+01 2.63744778e+01 2.67304535e+01 + 2.70912338e+01 2.74568835e+01 2.78274684e+01 2.82030551e+01 2.85837111e+01 + 2.89695047e+01 2.93605055e+01 2.97567835e+01 3.01584101e+01 3.05654574e+01 + 3.09779987e+01 3.13961080e+01 3.18198605e+01 3.22493324e+01 3.26846009e+01 + 3.31257442e+01 3.35728416e+01 3.40259734e+01 3.44852212e+01 3.49506674e+01 + 3.54223957e+01 3.59004909e+01 3.63850390e+01 3.68761270e+01 3.73738432e+01 + 3.78782771e+01 3.83895193e+01 3.89076617e+01 3.94327975e+01 3.99650210e+01 + 4.05044279e+01 4.10511152e+01 4.16051812e+01 4.21667253e+01 4.27358486e+01 + 4.33126533e+01 4.38972432e+01 4.44897232e+01 4.50902000e+01 4.56987813e+01 + 4.63155767e+01 4.69406969e+01 4.75742544e+01 4.82163629e+01 4.88671380e+01 + 4.95266966e+01 5.01951573e+01 5.08726401e+01 5.15592669e+01 5.22551611e+01 + 5.29604478e+01 5.36752537e+01 5.43997073e+01 5.51339389e+01 5.58780803e+01 + 5.66322655e+01 5.73966298e+01 5.81713107e+01 5.89564475e+01 5.97521813e+01 + 6.05586551e+01 6.13760138e+01 6.22044044e+01 6.30439758e+01 6.38948788e+01 + 6.47572664e+01 6.56312937e+01 6.65171177e+01 6.74148977e+01 6.83247950e+01 + 6.92469731e+01 7.01815978e+01 7.11288372e+01 7.20888614e+01 7.30618430e+01 + 7.40479570e+01 7.50473805e+01 7.60602932e+01 7.70868772e+01 7.81273169e+01 + 7.91817995e+01 8.02505143e+01 8.13336536e+01 8.24314120e+01 8.35439868e+01 + 8.46715780e+01 8.58143883e+01 8.69726230e+01 8.81464904e+01 8.93362015e+01 + 9.05419701e+01 9.17640129e+01 9.30025496e+01 9.42578028e+01 9.55299981e+01 + 9.68193642e+01 9.81261329e+01 9.94505390e+01 1.00792821e+02 1.02153219e+02 + 1.03531978e+02 1.04929347e+02 1.06345576e+02 1.07780920e+02 1.09235636e+02 + 1.10709987e+02 1.12204237e+02 1.13718655e+02 1.15253513e+02 1.16809087e+02 + 1.18385656e+02 1.19983505e+02 1.21602919e+02 1.23244191e+02 1.24907615e+02 + 1.26593490e+02 1.28302119e+02 1.30033810e+02 1.31788873e+02 1.33567624e+02 + 1.35370383e+02 1.37197474e+02 1.39049225e+02 1.40925969e+02 1.42828044e+02 + 1.44755790e+02 1.46709556e+02 1.48689691e+02 1.50696552e+02 1.52730500e+02 + 1.54791900e+02 1.56881123e+02 1.58998544e+02 1.61144543e+02 1.63319507e+02 + 1.65523827e+02 1.67757898e+02 1.70022122e+02 1.72316907e+02 1.74642664e+02 + 1.76999812e+02 1.79388774e+02 1.81809980e+02 1.84263865e+02 1.86750870e+02 + 1.89271442e+02 1.91826034e+02 1.94415106e+02 1.97039122e+02 1.99698554e+02 + 2.02393881e+02 2.05125586e+02 2.07894161e+02 2.10700104e+02 2.13543918e+02 + 2.16426115e+02 2.19347213e+02 2.22307737e+02 2.25308219e+02 2.28349199e+02 + 2.31431223e+02 2.34554845e+02 2.37720626e+02 2.40929135e+02 2.44180950e+02 + 2.47476655e+02 2.50816841e+02 2.54202110e+02 2.57633070e+02 2.61110337e+02 + 2.64634537e+02 2.68206303e+02 2.71826277e+02 2.75495110e+02 2.79213461e+02 + 2.82981999e+02 2.86801400e+02 2.90672351e+02 2.94595549e+02 2.98571698e+02 + 3.02601513e+02 3.06685719e+02 3.10825049e+02 3.15020247e+02 3.19272068e+02 + 3.23581275e+02 3.27948644e+02 3.32374959e+02 3.36861016e+02 3.41407621e+02 + 3.46015592e+02 3.50685756e+02 3.55418953e+02 3.60216034e+02 3.65077861e+02 + 3.70005309e+02 3.74999261e+02 3.80060618e+02 3.85190287e+02 3.90389191e+02 + 3.95658264e+02 4.00998455e+02 4.06410721e+02 4.11896037e+02 4.17455388e+02 + 4.23089773e+02 4.28800206e+02 4.34587712e+02 4.40453332e+02 4.46398120e+02 + 4.52423145e+02 4.58529489e+02 4.64718251e+02 4.70990542e+02 4.77347490e+02 + 4.83790238e+02 4.90319943e+02 4.96937780e+02 5.03644937e+02 5.10442621e+02 + 5.17332053e+02 5.24314471e+02 5.31391131e+02 5.38563305e+02 5.45832281e+02 + 5.53199366e+02 5.60665885e+02 5.68233179e+02 5.75902608e+02 5.83675552e+02 + 5.91553407e+02 5.99537589e+02 6.07629534e+02 6.15830695e+02 6.24142548e+02 + 6.32566585e+02 6.41104321e+02 6.49757290e+02 6.58527049e+02 6.67415173e+02 + 6.76423260e+02 6.85552928e+02 6.94805820e+02 7.04183597e+02 7.13687947e+02 + 7.23320576e+02 7.33083216e+02 7.42977623e+02 7.53005574e+02 7.63168873e+02 + 7.73469345e+02 7.83908842e+02 7.94489241e+02 8.05212443e+02 8.16080377e+02 + 8.27094994e+02 8.38258275e+02 8.49572227e+02 8.61038884e+02 8.72660305e+02 + 8.84438580e+02 8.96375827e+02 9.08474190e+02 9.20735844e+02 9.33162994e+02 + 9.45757873e+02 9.58522744e+02 9.71459903e+02 9.84571674e+02 9.97860414e+02 + 1.01132851e+03 1.02497839e+03 1.03881250e+03 1.05283333e+03 1.06704339e+03 + 1.08144525e+03 1.09604149e+03 1.11083474e+03 1.12582765e+03 1.14102292e+03 + 1.15642328e+03 1.17203149e+03 1.18785037e+03 1.20388276e+03 1.22013154e+03 + 1.23659963e+03 1.25328998e+03 1.27020561e+03 1.28734954e+03 1.30472487e+03 + 1.32233471e+03 1.34018223e+03 1.35827064e+03 1.37660318e+03 1.39518316e+03 + 1.41401392e+03 1.43309883e+03 1.45244133e+03 1.47204490e+03 1.49191305e+03 + 1.51204937e+03 1.53245746e+03 1.55314100e+03 1.57410371e+03 1.59534935e+03 + 1.61688174e+03 1.63870475e+03 1.66082231e+03 1.68323839e+03 1.70595702e+03 + 1.72898228e+03 1.75231832e+03 1.77596931e+03 1.79993953e+03 1.82423327e+03 + 1.84885490e+03 1.87380885e+03 1.89909961e+03 1.92473171e+03 1.95070977e+03 + 1.97703845e+03 2.00372249e+03 2.03076669e+03 2.05817590e+03 2.08595505e+03 + 2.11410913e+03 2.14264321e+03 2.17156242e+03 2.20087194e+03 2.23057706e+03 + 2.26068311e+03 2.29119549e+03 2.32211970e+03 2.35346130e+03 2.38522591e+03 + 2.41741924e+03 2.45004709e+03 2.48311532e+03 2.51662987e+03 2.55059676e+03 + 2.58502211e+03 2.61991209e+03 2.65527298e+03 2.69111114e+03 2.72743300e+03 + 2.76424510e+03 2.80155405e+03 2.83936656e+03 2.87768942e+03 2.91652952e+03 + 2.95589385e+03 2.99578948e+03 3.03622358e+03 3.07720342e+03 3.11873636e+03 + 3.16082987e+03 3.20349152e+03 3.24672896e+03 3.29054999e+03 3.33496246e+03 + 3.37997437e+03 3.42559381e+03 3.47182896e+03 3.51868816e+03 3.56617981e+03 + 3.61431245e+03 3.66309474e+03 3.71253544e+03 3.76264344e+03 3.81342775e+03 + 3.86489750e+03 3.91706193e+03 3.96993042e+03 4.02351247e+03 4.07781773e+03 + 4.13285593e+03 4.18863699e+03 4.24517093e+03 4.30246790e+03 4.36053820e+03 + 4.41939228e+03 4.47904072e+03 4.53949422e+03 4.60076367e+03 4.66286006e+03 + 4.72579458e+03 4.78957851e+03 4.85422334e+03 4.91974068e+03 4.98614230e+03 + 5.05344014e+03 5.12164630e+03 5.19077304e+03 5.26083278e+03 5.33183812e+03 + 5.40380181e+03 5.47673679e+03 5.55065618e+03 5.62557325e+03 5.70150148e+03 + 5.77845451e+03 5.85644617e+03 5.93549049e+03 6.01560166e+03 6.09679409e+03 + 6.17908238e+03 6.26248131e+03 6.34700587e+03 6.43267125e+03 6.51949286e+03 + 6.60748630e+03 6.69666739e+03 6.78705215e+03 6.87865683e+03 6.97149790e+03 + 7.06559204e+03 7.16095617e+03 7.25760742e+03 7.35556318e+03 7.45484104e+03 + 7.55545885e+03 7.65743470e+03 7.76078691e+03 7.86553407e+03 7.97169499e+03 + 8.07928877e+03 8.18833474e+03 8.29885250e+03 8.41086191e+03 8.52438311e+03 + 8.63943651e+03 8.75604278e+03 8.87422288e+03 8.99399805e+03 9.11538983e+03 + 9.23842003e+03 9.36311076e+03 9.48948445e+03 9.61756379e+03 9.74737182e+03 + 9.87893187e+03 1.00122676e+04 1.01474029e+04 1.02843622e+04 1.04231700e+04 + 1.05638512e+04 1.07064313e+04 1.08509357e+04 1.09973906e+04 1.11458221e+04 + 1.12962570e+04 1.14487223e+04 1.16032454e+04 1.17598541e+04 1.19185766e+04 + 1.20794414e+04 1.22424773e+04 1.24077137e+04 1.25751803e+04 1.27449072e+04 + 1.29169249e+04 1.30912644e+04 1.32679569e+04 1.34470341e+04 1.36285284e+04 + 1.38124724e+04 1.39988990e+04 1.41878418e+04 1.43793348e+04 1.45734123e+04 + 1.47701093e+04 1.49694611e+04 1.51715036e+04 1.53762730e+04 1.55838062e+04 + 1.57941404e+04 1.60073136e+04 1.62233639e+04 1.64423303e+04 1.66642520e+04 + 1.68891690e+04 1.71171217e+04 1.73481511e+04 1.75822987e+04 1.78196066e+04 + 1.80601174e+04 1.83038743e+04 1.85509213e+04 1.88013026e+04 1.90550634e+04 + 1.93122491e+04 1.95729061e+04 1.98370811e+04 2.01048217e+04 2.03761760e+04 + 2.06511928e+04 2.09299214e+04 2.12124121e+04 2.14987155e+04 2.17888832e+04 + 2.20829672e+04 2.23810205e+04 2.26830966e+04 2.29892498e+04 2.32995352e+04 + 2.36140084e+04 2.39327261e+04 2.42557456e+04 2.45831248e+04 2.49149226e+04 + 2.52511988e+04 2.55920136e+04 2.59374284e+04 2.62875052e+04 2.66423071e+04 + 2.70018976e+04 2.73663416e+04 2.77357045e+04 2.81100526e+04 2.84894533e+04 + 2.88739748e+04 2.92636861e+04 2.96586574e+04 3.00589596e+04 3.04646647e+04 + 3.08758455e+04 3.12925761e+04 3.17149312e+04 3.21429869e+04 3.25768200e+04 + 3.30165086e+04 3.34621316e+04 3.39137692e+04 3.43715026e+04 3.48354139e+04 + 3.53055867e+04 3.57821053e+04 3.62650555e+04 3.67545241e+04 3.72505991e+04 + 3.77533695e+04 3.82629258e+04 3.87793596e+04 3.93027637e+04 3.98332322e+04 + 4.03708604e+04 4.09157449e+04 4.14679838e+04 4.20276762e+04 4.25949227e+04 + 4.31698254e+04 4.37524875e+04 4.43430137e+04 4.49415103e+04 4.55480848e+04 + 4.61628462e+04 4.67859051e+04 4.74173733e+04 4.80573645e+04 4.87059936e+04 + 4.93633772e+04 5.00296335e+04 5.07048823e+04 5.13892449e+04 5.20828443e+04 + 5.27858052e+04 5.34982540e+04 5.42203186e+04 5.49521290e+04 5.56938166e+04 + 5.64455147e+04 5.72073585e+04 5.79794848e+04 5.87620325e+04 5.95551423e+04 + 6.03589566e+04 6.11736200e+04 6.19992789e+04 6.28360817e+04 6.36841788e+04 + 6.45437226e+04 6.54148677e+04 6.62977706e+04 6.71925901e+04 6.80994869e+04 + 6.90186240e+04 6.99501667e+04 7.08942825e+04 7.18511409e+04 7.28209140e+04 + 7.38037762e+04 7.47999040e+04 7.58094765e+04 7.68326752e+04 7.78696840e+04 + 7.89206893e+04 7.99858799e+04 8.10654474e+04 8.21595859e+04 8.32684918e+04 + 8.43923647e+04 8.55314064e+04 8.66858218e+04 8.78558182e+04 8.90416061e+04 + 9.02433986e+04 9.14614116e+04 9.26958640e+04 9.39469779e+04 9.52149780e+04 + 9.65000923e+04 9.78025518e+04 9.91225905e+04 1.00460446e+05 1.01816358e+05 + 1.03190571e+05 1.04583332e+05 1.05994890e+05 1.07425501e+05 1.08875420e+05 + 1.10344909e+05 1.11834232e+05 1.13343656e+05 1.14873452e+05 1.16423897e+05 + 1.17995267e+05 1.19587847e+05 1.21201921e+05 1.22837780e+05 1.24495719e+05 + 1.26176035e+05 1.27879030e+05 1.29605010e+05 1.31354286e+05 1.33127171e+05 + 1.34923985e+05 1.36745051e+05 1.38590696e+05 1.40461251e+05 1.42357053e+05 + 1.44278443e+05 1.46225766e+05 1.48199372e+05 1.50199615e+05 1.52226856e+05 + 1.54281458e+05 1.56363791e+05 1.58474229e+05 1.60613152e+05 1.62780944e+05 + 1.64977995e+05 1.67204699e+05 1.69461457e+05 1.71748674e+05 1.74066762e+05 + 1.76416136e+05 1.78797221e+05 1.81210443e+05 1.83656236e+05 1.86135040e+05 + 1.88647300e+05 1.91193468e+05 1.93774002e+05 1.96389365e+05 1.99040027e+05 + 2.01726466e+05 2.04449163e+05 2.07208608e+05 2.10005298e+05 2.12839735e+05 + 2.15712427e+05 2.18623893e+05 2.21574654e+05 2.24565242e+05 2.27596194e+05 + 2.30668054e+05 2.33781376e+05 2.36936717e+05 2.40134646e+05 2.43375738e+05 + 2.46660575e+05 2.49989747e+05 2.53363852e+05 2.56783498e+05 2.60249299e+05 + 2.63761877e+05 2.67321865e+05 2.70929902e+05 2.74586636e+05 2.78292726e+05 + 2.82048836e+05 2.85855642e+05 2.89713829e+05 2.93624090e+05 2.97587127e+05 + 3.01603654e+05 3.05674391e+05 3.09800071e+05 3.13981435e+05 3.18219235e+05 + 3.22514232e+05 3.26867199e+05 3.31278918e+05 3.35750182e+05 3.40281794e+05 + 3.44874569e+05 3.49529333e+05 3.54246922e+05 3.59028184e+05 3.63873979e+05 + 3.68785178e+05 3.73762662e+05 3.78807328e+05 3.83920082e+05 3.89101842e+05 + 3.94353540e+05 3.99676120e+05 4.05070540e+05 4.10537767e+05 4.16078785e+05 + 4.21694591e+05 4.27386193e+05 4.33154614e+05 4.39000892e+05 4.44926076e+05 + 4.50931233e+05 4.57017441e+05 4.63185794e+05 4.69437402e+05 4.75773387e+05 + 4.82194889e+05 4.88703062e+05 4.95299076e+05 5.01984116e+05 5.08759383e+05 + 5.15626097e+05 5.22585490e+05 5.29638814e+05 5.36787336e+05 5.44032342e+05 + 5.51375134e+05 5.58817031e+05 5.66359371e+05 5.74003510e+05 5.81750821e+05 + 5.89602698e+05 5.97560552e+05 6.05625813e+05 6.13799930e+05 6.22084373e+05 + 6.30480631e+05 6.38990213e+05 6.47614648e+05 6.56355488e+05 6.65214302e+05 + 6.74192684e+05 6.83292246e+05 6.92514626e+05 7.01861479e+05 7.11334487e+05 + 7.20935351e+05 7.30665798e+05 7.40527577e+05 7.50522460e+05 7.60652244e+05 + 7.70918749e+05 7.81323821e+05 7.91869330e+05 8.02557172e+05 8.13389267e+05 + 8.24367562e+05 8.35494032e+05 8.46770675e+05 8.58199518e+05 8.69782617e+05 + 8.81522052e+05 8.93419934e+05 9.05478402e+05 9.17699622e+05 9.30085792e+05 + 9.42639138e+05 9.55361916e+05 9.68256413e+05 9.81324947e+05 9.94569866e+05 + 1.00799355e+06 1.02159842e+06 1.03538691e+06 1.04936150e+06 1.06352471e+06 + 1.07787907e+06 1.09242718e+06 1.10717165e+06 1.12211511e+06 1.13726028e+06 + 1.15260985e+06 1.16816660e+06 1.18393331e+06 1.19991283e+06 1.21610803e+06 + 1.23252181e+06 1.24915713e+06 1.26601697e+06 1.28310437e+06 1.30042240e+06 + 1.31797417e+06 1.33576284e+06 1.35379160e+06 1.37206369e+06 1.39058240e+06 + 1.40935106e+06 1.42837304e+06 1.44765175e+06 1.46719067e+06 1.48699331e+06 + 1.50706323e+06 1.52740402e+06 1.54801936e+06 1.56891294e+06 1.59008852e+06 + 1.61154991e+06 1.63330096e+06 1.65534558e+06 1.67768774e+06 1.70033145e+06 + 1.72328078e+06 1.74653986e+06 1.77011287e+06 1.79400404e+06 1.81821767e+06 + 1.84275811e+06 1.86762977e+06 1.89283713e+06 1.91838471e+06 1.94427710e+06 + 1.51514411e-06 1.53559398e-06 1.55631985e-06 1.57732546e-06 1.59861459e-06 + 1.62019105e-06 1.64205873e-06 1.66422156e-06 1.68668352e-06 1.70944864e-06 + 1.73252103e-06 1.75590483e-06 1.77960423e-06 1.80362351e-06 1.82796697e-06 + 1.85263900e-06 1.87764402e-06 1.90298654e-06 1.92867110e-06 1.95470233e-06 + 1.98108490e-06 2.00782356e-06 2.03492310e-06 2.06238841e-06 2.09022442e-06 + 2.11843613e-06 2.14702861e-06 2.17600701e-06 2.20537652e-06 2.23514243e-06 + 2.26531010e-06 2.29588494e-06 2.32687244e-06 2.35827818e-06 2.39010781e-06 + 2.42236703e-06 2.45506166e-06 2.48819757e-06 2.52178072e-06 2.55581713e-06 + 2.59031293e-06 2.62527433e-06 2.66070759e-06 2.69661910e-06 2.73301530e-06 + 2.76990274e-06 2.80728805e-06 2.84517795e-06 2.88357925e-06 2.92249885e-06 + 2.96194375e-06 3.00192104e-06 3.04243789e-06 3.08350160e-06 3.12511955e-06 + 3.16729922e-06 3.21004818e-06 3.25337412e-06 3.29728483e-06 3.34178821e-06 + 3.38689225e-06 3.43260505e-06 3.47893484e-06 3.52588994e-06 3.57347879e-06 + 3.62170995e-06 3.67059208e-06 3.72013398e-06 3.77034453e-06 3.82123279e-06 + 3.87280787e-06 3.92507907e-06 3.97805577e-06 4.03174749e-06 4.08616389e-06 + 4.14131475e-06 4.19720997e-06 4.25385962e-06 4.31127386e-06 4.36946302e-06 + 4.42843756e-06 4.48820807e-06 4.54878531e-06 4.61018016e-06 4.67240365e-06 + 4.73546697e-06 4.79938146e-06 4.86415859e-06 4.92981003e-06 4.99634755e-06 + 5.06378314e-06 5.13212890e-06 5.20139712e-06 5.27160025e-06 5.34275092e-06 + 5.41486190e-06 5.48794616e-06 5.56201684e-06 5.63708725e-06 5.71317088e-06 + 5.79028141e-06 5.86843270e-06 5.94763880e-06 6.02791394e-06 6.10927255e-06 + 6.19172925e-06 6.27529887e-06 6.35999643e-06 6.44583715e-06 6.53283646e-06 + 6.62101000e-06 6.71037362e-06 6.80094337e-06 6.89273554e-06 6.98576663e-06 + 7.08005335e-06 7.17561266e-06 7.27246174e-06 7.37061798e-06 7.47009904e-06 + 7.57092278e-06 7.67310735e-06 7.77667110e-06 7.88163264e-06 7.98801085e-06 + 8.09582484e-06 8.20509399e-06 8.31583795e-06 8.42807662e-06 8.54183017e-06 + 8.65711905e-06 8.77396398e-06 8.89238596e-06 9.01240628e-06 9.13404651e-06 + 9.25732852e-06 9.38227446e-06 9.50890680e-06 9.63724829e-06 9.76732200e-06 + 9.89915131e-06 1.00327599e-05 1.01681718e-05 1.03054114e-05 1.04445033e-05 + 1.05854725e-05 1.07283444e-05 1.08731446e-05 1.10198992e-05 1.11686345e-05 + 1.13193773e-05 1.14721546e-05 1.16269940e-05 1.17839233e-05 1.19429706e-05 + 1.21041646e-05 1.22675342e-05 1.24331089e-05 1.26009182e-05 1.27709925e-05 + 1.29433623e-05 1.31180586e-05 1.32951127e-05 1.34745565e-05 1.36564223e-05 + 1.38407427e-05 1.40275509e-05 1.42168804e-05 1.44087653e-05 1.46032400e-05 + 1.48003396e-05 1.50000995e-05 1.52025554e-05 1.54077440e-05 1.56157019e-05 + 1.58264667e-05 1.60400761e-05 1.62565686e-05 1.64759832e-05 1.66983591e-05 + 1.69237365e-05 1.71521557e-05 1.73836580e-05 1.76182848e-05 1.78560784e-05 + 1.80970814e-05 1.83413373e-05 1.85888899e-05 1.88397837e-05 1.90940638e-05 + 1.93517759e-05 1.96129664e-05 1.98776821e-05 2.01459707e-05 2.04178804e-05 + 2.06934601e-05 2.09727592e-05 2.12558280e-05 2.15427174e-05 2.18334790e-05 + 2.21281649e-05 2.24268282e-05 2.27295226e-05 2.30363024e-05 2.33472229e-05 + 2.36623398e-05 2.39817098e-05 2.43053904e-05 2.46334396e-05 2.49659166e-05 + 2.53028810e-05 2.56443934e-05 2.59905151e-05 2.63413085e-05 2.66968365e-05 + 2.70571631e-05 2.74223530e-05 2.77924718e-05 2.81675861e-05 2.85477634e-05 + 2.89330718e-05 2.93235808e-05 2.97193605e-05 3.01204820e-05 3.05270174e-05 + 3.09390399e-05 3.13566233e-05 3.17798429e-05 3.22087747e-05 3.26434958e-05 + 3.30840843e-05 3.35306194e-05 3.39831813e-05 3.44418515e-05 3.49067124e-05 + 3.53778474e-05 3.58553414e-05 3.63392801e-05 3.68297505e-05 3.73268407e-05 + 3.78306402e-05 3.83412395e-05 3.88587303e-05 3.93832056e-05 3.99147598e-05 + 4.04534884e-05 4.09994881e-05 4.15528573e-05 4.21136952e-05 4.26821027e-05 + 4.32581821e-05 4.38420367e-05 4.44337716e-05 4.50334932e-05 4.56413092e-05 + 4.62573288e-05 4.68816629e-05 4.75144236e-05 4.81557246e-05 4.88056813e-05 + 4.94644104e-05 5.01320304e-05 5.08086612e-05 5.14944245e-05 5.21894435e-05 + 5.28938432e-05 5.36077501e-05 5.43312927e-05 5.50646008e-05 5.58078064e-05 + 5.65610431e-05 5.73244461e-05 5.80981528e-05 5.88823022e-05 5.96770352e-05 + 6.04824947e-05 6.12988255e-05 6.21261743e-05 6.29646898e-05 6.38145227e-05 + 6.46758258e-05 6.55487539e-05 6.64334638e-05 6.73301147e-05 6.82388677e-05 + 6.91598861e-05 7.00933354e-05 7.10393835e-05 7.19982003e-05 7.29699583e-05 + 7.39548321e-05 7.49529987e-05 7.59646376e-05 7.69899305e-05 7.80290617e-05 + 7.90822181e-05 8.01495889e-05 8.12313660e-05 8.23277438e-05 8.34389194e-05 + 8.45650925e-05 8.57064656e-05 8.68632437e-05 8.80356348e-05 8.92238497e-05 + 9.04281018e-05 9.16486078e-05 9.28855869e-05 9.41392614e-05 9.54098568e-05 + 9.66976013e-05 9.80027266e-05 9.93254670e-05 1.00666060e-04 1.02024748e-04 + 1.03401773e-04 1.04797385e-04 1.06211833e-04 1.07645371e-04 1.09098258e-04 + 1.10570755e-04 1.12063126e-04 1.13575639e-04 1.15108567e-04 1.16662184e-04 + 1.18236771e-04 1.19832610e-04 1.21449988e-04 1.23089195e-04 1.24750527e-04 + 1.26434282e-04 1.28140763e-04 1.29870275e-04 1.31623131e-04 1.33399646e-04 + 1.35200138e-04 1.37024931e-04 1.38874353e-04 1.40748737e-04 1.42648419e-04 + 1.44573741e-04 1.46525050e-04 1.48502695e-04 1.50507032e-04 1.52538422e-04 + 1.54597229e-04 1.56683824e-04 1.58798582e-04 1.60941883e-04 1.63114112e-04 + 1.65315659e-04 1.67546920e-04 1.69808297e-04 1.72100196e-04 1.74423028e-04 + 1.76777212e-04 1.79163169e-04 1.81581330e-04 1.84032129e-04 1.86516007e-04 + 1.89033409e-04 1.91584788e-04 1.94170603e-04 1.96791319e-04 1.99447407e-04 + 2.02139344e-04 2.04867614e-04 2.07632707e-04 2.10435121e-04 2.13275359e-04 + 2.16153931e-04 2.19071356e-04 2.22028156e-04 2.25024865e-04 2.28062020e-04 + 2.31140168e-04 2.34259861e-04 2.37421661e-04 2.40626136e-04 2.43873861e-04 + 2.47165421e-04 2.50501406e-04 2.53882418e-04 2.57309063e-04 2.60781957e-04 + 2.64301725e-04 2.67868999e-04 2.71484421e-04 2.75148639e-04 2.78862314e-04 + 2.82626112e-04 2.86440710e-04 2.90306793e-04 2.94225057e-04 2.98196206e-04 + 3.02220953e-04 3.06300022e-04 3.10434146e-04 3.14624068e-04 3.18870542e-04 + 3.23174330e-04 3.27536206e-04 3.31956954e-04 3.36437370e-04 3.40978257e-04 + 3.45580432e-04 3.50244723e-04 3.54971968e-04 3.59763016e-04 3.64618729e-04 + 3.69539979e-04 3.74527651e-04 3.79582642e-04 3.84705860e-04 3.89898226e-04 + 3.95160673e-04 4.00494147e-04 4.05899607e-04 4.11378024e-04 4.16930384e-04 + 4.22557683e-04 4.28260934e-04 4.34041162e-04 4.39899405e-04 4.45836717e-04 + 4.51854164e-04 4.57952829e-04 4.64133808e-04 4.70398211e-04 4.76747164e-04 + 4.83181809e-04 4.89703302e-04 4.96312816e-04 5.03011539e-04 5.09800673e-04 + 5.16681441e-04 5.23655078e-04 5.30722838e-04 5.37885992e-04 5.45145826e-04 + 5.52503646e-04 5.59960775e-04 5.67518552e-04 5.75178336e-04 5.82941505e-04 + 5.90809452e-04 5.98783593e-04 6.06865361e-04 6.15056208e-04 6.23357607e-04 + 6.31771050e-04 6.40298049e-04 6.48940137e-04 6.57698866e-04 6.66575812e-04 + 6.75572570e-04 6.84690757e-04 6.93932012e-04 7.03297995e-04 7.12790392e-04 + 7.22410907e-04 7.32161269e-04 7.42043233e-04 7.52058572e-04 7.62209089e-04 + 7.72496607e-04 7.82922975e-04 7.93490068e-04 8.04199785e-04 8.15054050e-04 + 8.26054815e-04 8.37204057e-04 8.48503780e-04 8.59956016e-04 8.71562821e-04 + 8.83326284e-04 8.95248518e-04 9.07331666e-04 9.19577900e-04 9.31989421e-04 + 9.44568460e-04 9.57317278e-04 9.70238166e-04 9.83333448e-04 9.96605476e-04 + 1.01005664e-03 1.02368935e-03 1.03750606e-03 1.05150925e-03 1.06570145e-03 + 1.08008519e-03 1.09466308e-03 1.10943772e-03 1.12441177e-03 1.13958793e-03 + 1.15496892e-03 1.17055751e-03 1.18635650e-03 1.20236872e-03 1.21859707e-03 + 1.23504444e-03 1.25171381e-03 1.26860816e-03 1.28573053e-03 1.30308401e-03 + 1.32067170e-03 1.33849678e-03 1.35656243e-03 1.37487193e-03 1.39342854e-03 + 1.41223561e-03 1.43129652e-03 1.45061470e-03 1.47019361e-03 1.49003678e-03 + 1.51014777e-03 1.53053020e-03 1.55118773e-03 1.57212407e-03 1.59334299e-03 + 1.61484830e-03 1.63664387e-03 1.65873361e-03 1.68112150e-03 1.70381156e-03 + 1.72680786e-03 1.75011455e-03 1.77373580e-03 1.79767587e-03 1.82193906e-03 + 1.84652973e-03 1.87145230e-03 1.89671124e-03 1.92231111e-03 1.94825650e-03 + 1.97455207e-03 2.00120255e-03 2.02821273e-03 2.05558747e-03 2.08333169e-03 + 2.11145037e-03 2.13994856e-03 2.16883140e-03 2.19810406e-03 2.22777182e-03 + 2.25784000e-03 2.28831402e-03 2.31919934e-03 2.35050151e-03 2.38222618e-03 + 2.41437903e-03 2.44696584e-03 2.47999248e-03 2.51346488e-03 2.54738906e-03 + 2.58177111e-03 2.61661721e-03 2.65193363e-03 2.68772672e-03 2.72400290e-03 + 2.76076870e-03 2.79803073e-03 2.83579568e-03 2.87407035e-03 2.91286161e-03 + 2.95217643e-03 2.99202189e-03 3.03240514e-03 3.07333344e-03 3.11481415e-03 + 3.15685472e-03 3.19946271e-03 3.24264578e-03 3.28641170e-03 3.33076832e-03 + 3.37572362e-03 3.42128568e-03 3.46746269e-03 3.51426295e-03 3.56169487e-03 + 3.60976698e-03 3.65848792e-03 3.70786645e-03 3.75791143e-03 3.80863187e-03 + 3.86003689e-03 3.91213571e-03 3.96493772e-03 4.01845239e-03 4.07268934e-03 + 4.12765833e-03 4.18336924e-03 4.23983207e-03 4.29705699e-03 4.35505426e-03 + 4.41383433e-03 4.47340774e-03 4.53378522e-03 4.59497761e-03 4.65699591e-03 + 4.71985128e-03 4.78355500e-03 4.84811852e-03 4.91355347e-03 4.97987158e-03 + 5.04708479e-03 5.11520517e-03 5.18424497e-03 5.25421660e-03 5.32513264e-03 + 5.39700583e-03 5.46984909e-03 5.54367551e-03 5.61849837e-03 5.69433110e-03 + 5.77118736e-03 5.84908093e-03 5.92802584e-03 6.00803626e-03 6.08912659e-03 + 6.17131138e-03 6.25460542e-03 6.33902369e-03 6.42458134e-03 6.51129376e-03 + 6.59917653e-03 6.68824546e-03 6.77851655e-03 6.87000603e-03 6.96273034e-03 + 7.05670614e-03 7.15195034e-03 7.24848004e-03 7.34631260e-03 7.44546561e-03 + 7.54595688e-03 7.64780448e-03 7.75102672e-03 7.85564214e-03 7.96166955e-03 + 8.06912802e-03 8.17803685e-03 8.28841561e-03 8.40028416e-03 8.51366260e-03 + 8.62857130e-03 8.74503092e-03 8.86306239e-03 8.98268694e-03 9.10392605e-03 + 9.22680152e-03 9.35133544e-03 9.47755019e-03 9.60546846e-03 9.73511324e-03 + 9.86650783e-03 9.99967585e-03 1.01346412e-02 1.02714283e-02 1.04100615e-02 + 1.05505658e-02 1.06929666e-02 1.08372893e-02 1.09835599e-02 1.11318048e-02 + 1.12820505e-02 1.14343240e-02 1.15886528e-02 1.17450646e-02 1.19035875e-02 + 1.20642499e-02 1.22270808e-02 1.23921094e-02 1.25593654e-02 1.27288789e-02 + 1.29006802e-02 1.30748004e-02 1.32512707e-02 1.34301228e-02 1.36113888e-02 + 1.37951014e-02 1.39812936e-02 1.41699987e-02 1.43612509e-02 1.45550843e-02 + 1.47515340e-02 1.49506351e-02 1.51524234e-02 1.53569353e-02 1.55642075e-02 + 1.57742773e-02 1.59871823e-02 1.62029609e-02 1.64216519e-02 1.66432945e-02 + 1.68679287e-02 1.70955947e-02 1.73263336e-02 1.75601867e-02 1.77971961e-02 + 1.80374044e-02 1.82808548e-02 1.85275911e-02 1.87776576e-02 1.90310992e-02 + 1.92879614e-02 1.95482906e-02 1.98121334e-02 2.00795373e-02 2.03505503e-02 + 2.06252212e-02 2.09035994e-02 2.11857347e-02 2.14716781e-02 2.17614808e-02 + 2.20551950e-02 2.23528734e-02 2.26545697e-02 2.29603378e-02 2.32702330e-02 + 2.35843107e-02 2.39026276e-02 2.42252408e-02 2.45522083e-02 2.48835889e-02 + 2.52194421e-02 2.55598283e-02 2.59048087e-02 2.62544453e-02 2.66088009e-02 + 2.69679393e-02 2.73319249e-02 2.77008232e-02 2.80747006e-02 2.84536242e-02 + 2.88376620e-02 2.92268833e-02 2.96213578e-02 3.00211566e-02 3.04263514e-02 + 3.08370152e-02 3.12532216e-02 3.16750456e-02 3.21025629e-02 3.25358505e-02 + 3.29749861e-02 3.34200487e-02 3.38711183e-02 3.43282759e-02 3.47916039e-02 + 3.52611853e-02 3.57371047e-02 3.62194475e-02 3.67083006e-02 3.72037516e-02 + 3.77058898e-02 3.82148053e-02 3.87305896e-02 3.92533354e-02 3.97831368e-02 + 4.03200888e-02 4.08642881e-02 4.14158324e-02 4.19748209e-02 4.25413541e-02 + 4.31155337e-02 4.36974630e-02 4.42872467e-02 4.48849906e-02 4.54908022e-02 + 4.61047905e-02 4.67270657e-02 4.73577398e-02 4.79969261e-02 4.86447395e-02 + 4.93012964e-02 4.99667148e-02 5.06411144e-02 5.13246163e-02 5.20173434e-02 + 5.27194202e-02 5.34309730e-02 5.41521296e-02 5.48830196e-02 5.56237744e-02 + 5.63745271e-02 5.71354128e-02 5.79065681e-02 5.86881317e-02 5.94802440e-02 + 6.02830474e-02 6.10966863e-02 6.19213068e-02 6.27570572e-02 6.36040877e-02 + 6.44625506e-02 6.53326001e-02 6.62143926e-02 6.71080867e-02 6.80138429e-02 + 6.89318241e-02 6.98621953e-02 7.08051237e-02 7.17607788e-02 7.27293323e-02 + 7.37109584e-02 7.47058334e-02 7.57141363e-02 7.67360482e-02 7.77717528e-02 + 7.88214363e-02 7.98852873e-02 8.09634971e-02 8.20562595e-02 8.31637709e-02 + 8.42862303e-02 8.54238396e-02 8.65768031e-02 8.77453282e-02 8.89296248e-02 + 9.01299058e-02 9.13463870e-02 9.25792870e-02 9.38288274e-02 9.50952329e-02 + 9.63787310e-02 9.76795524e-02 9.89979310e-02 1.00334104e-01 1.01688311e-01 + 1.03060795e-01 1.04451805e-01 1.05861588e-01 1.07290399e-01 1.08738495e-01 + 1.10206136e-01 1.11693586e-01 1.13201111e-01 1.14728984e-01 1.16277479e-01 + 1.17846873e-01 1.19437449e-01 1.21049494e-01 1.22683296e-01 1.24339149e-01 + 1.26017352e-01 1.27718205e-01 1.29442015e-01 1.31189090e-01 1.32959747e-01 + 1.34754301e-01 1.36573077e-01 1.38416400e-01 1.40284603e-01 1.42178021e-01 + 1.44096994e-01 1.46041868e-01 1.48012992e-01 1.50010719e-01 1.52035411e-01 + 1.54087429e-01 1.56167143e-01 1.58274927e-01 1.60411160e-01 1.62576226e-01 + 1.64770513e-01 1.66994417e-01 1.69248337e-01 1.71532678e-01 1.73847850e-01 + 1.76194270e-01 1.78572360e-01 1.80982547e-01 1.83425264e-01 1.85900951e-01 + 1.88410051e-01 1.90953017e-01 1.93530306e-01 1.96142380e-01 1.98789709e-01 + 2.01472769e-01 2.04192042e-01 2.06948017e-01 2.09741189e-01 2.12572061e-01 + 2.15441141e-01 2.18348945e-01 2.21295996e-01 2.24282822e-01 2.27309962e-01 + 2.30377959e-01 2.33487365e-01 2.36638739e-01 2.39832646e-01 2.43069662e-01 + 2.46350367e-01 2.49675352e-01 2.53045214e-01 2.56460560e-01 2.59922002e-01 + 2.63430163e-01 2.66985673e-01 2.70589173e-01 2.74241308e-01 2.77942737e-01 + 2.81694123e-01 2.85496142e-01 2.89349477e-01 2.93254820e-01 2.97212873e-01 + 3.01224348e-01 3.05289966e-01 3.09410457e-01 3.13586563e-01 3.17819033e-01 + 3.22108629e-01 3.26456121e-01 3.30862292e-01 3.35327932e-01 3.39853846e-01 + 3.44440845e-01 3.49089755e-01 3.53801411e-01 3.58576660e-01 3.63416361e-01 + 3.68321383e-01 3.73292608e-01 3.78330929e-01 3.83437252e-01 3.88612496e-01 + 3.93857590e-01 3.99173476e-01 4.04561111e-01 4.10021463e-01 4.15555512e-01 + 4.21164255e-01 4.26848699e-01 4.32609866e-01 4.38448791e-01 4.44366524e-01 + 4.50364128e-01 4.56442682e-01 4.62603278e-01 4.68847024e-01 4.75175041e-01 + 4.81588467e-01 4.88088455e-01 4.94676173e-01 5.01352806e-01 5.08119553e-01 + 5.14977630e-01 5.21928271e-01 5.28972724e-01 5.36112257e-01 5.43348151e-01 + 5.50681708e-01 5.58114246e-01 5.65647101e-01 5.73281626e-01 5.81019194e-01 + 5.88861197e-01 5.96809042e-01 6.04864160e-01 6.13027997e-01 6.21302021e-01 + 6.29687720e-01 6.38186600e-01 6.46800189e-01 6.55530036e-01 6.64377709e-01 + 6.73344799e-01 6.82432918e-01 6.91643699e-01 7.00978797e-01 7.10439891e-01 + 7.20028682e-01 7.29746892e-01 7.39596268e-01 7.49578581e-01 7.59695625e-01 + 7.69949219e-01 7.80341205e-01 7.90873452e-01 8.01547852e-01 8.12366325e-01 + 8.23330813e-01 8.34443290e-01 8.45705751e-01 8.57120221e-01 8.68688753e-01 + 8.80413424e-01 8.92296343e-01 9.04339645e-01 9.16545496e-01 9.28916089e-01 + 9.41453647e-01 9.54160425e-01 9.67038705e-01 9.80090803e-01 9.93319066e-01 + 1.00672587e+00 1.02031362e+00 1.03408477e+00 1.04804179e+00 1.06218719e+00 + 1.07652350e+00 1.09105331e+00 1.10577923e+00 1.12070391e+00 1.13583002e+00 + 1.15116029e+00 1.16669748e+00 1.18244437e+00 1.19840379e+00 1.21457862e+00 + 1.23097175e+00 1.24758615e+00 1.26442479e+00 1.28149070e+00 1.29878695e+00 + 1.31631665e+00 1.33408294e+00 1.35208903e+00 1.37033814e+00 1.38883356e+00 + 1.40757862e+00 1.42657667e+00 1.44583114e+00 1.46534549e+00 1.48512323e+00 + 1.50516790e+00 1.52548311e+00 1.54607252e+00 1.56693983e+00 1.58808878e+00 + 1.60952317e+00 1.63124687e+00 1.65326377e+00 1.67557783e+00 1.69819306e+00 + 1.72111354e+00 1.74434336e+00 1.76788672e+00 1.79174785e+00 1.81593103e+00 + 1.84044061e+00 1.86528099e+00 1.89045664e+00 1.91597209e+00 1.94183192e+00 + 1.96804078e+00 1.99460338e+00 2.02152449e+00 2.04880896e+00 2.07646169e+00 + 2.10448764e+00 2.13289186e+00 2.16167945e+00 2.19085559e+00 2.22042551e+00 + 2.25039454e+00 2.28076806e+00 2.31155154e+00 2.34275049e+00 2.37437054e+00 + 2.40641736e+00 2.43889672e+00 2.47181445e+00 2.50517647e+00 2.53898878e+00 + 2.57325745e+00 2.60798864e+00 2.64318860e+00 2.67886366e+00 2.71502022e+00 + 2.75166478e+00 2.78880393e+00 2.82644435e+00 2.86459281e+00 2.90325615e+00 + 2.94244133e+00 2.98215539e+00 3.02240547e+00 3.06319880e+00 3.10454272e+00 + 3.14644466e+00 3.18891215e+00 3.23195282e+00 3.27557441e+00 3.31978476e+00 + 3.36459182e+00 3.41000363e+00 3.45602837e+00 3.50267430e+00 3.54994981e+00 + 3.59786340e+00 3.64642368e+00 3.69563937e+00 3.74551933e+00 3.79607251e+00 + 3.84730801e+00 3.89923504e+00 3.95186292e+00 4.00520112e+00 4.05925923e+00 + 4.11404695e+00 4.16957414e+00 4.22585079e+00 4.28288699e+00 4.34069302e+00 + 4.39927925e+00 4.45865622e+00 4.51883459e+00 4.57982520e+00 4.64163899e+00 + 4.70428708e+00 4.76778073e+00 4.83213135e+00 4.89735051e+00 4.96344994e+00 + 5.03044150e+00 5.09833725e+00 5.16714939e+00 5.23689028e+00 5.30757246e+00 + 5.37920864e+00 5.45181169e+00 5.52539466e+00 5.59997078e+00 5.67555346e+00 + 5.75215627e+00 5.82979298e+00 5.90847756e+00 5.98822414e+00 6.06904706e+00 + 6.15096084e+00 6.23398021e+00 6.31812010e+00 6.40339561e+00 6.48982209e+00 + 6.57741507e+00 6.66619028e+00 6.75616369e+00 6.84735147e+00 6.93977001e+00 + 7.03343592e+00 7.12836604e+00 7.22457742e+00 7.32208737e+00 7.42091341e+00 + 7.52107330e+00 7.62258505e+00 7.72546690e+00 7.82973734e+00 7.93541512e+00 + 8.04251923e+00 8.15106892e+00 8.26108370e+00 8.37258335e+00 8.48558791e+00 + 8.60011769e+00 8.71619327e+00 8.83383553e+00 8.95306559e+00 9.07390491e+00 + 9.19637518e+00 9.32049844e+00 9.44629699e+00 9.57379343e+00 9.70301069e+00 + 9.83397200e+00 9.96670088e+00 1.01012212e+01 1.02375571e+01 1.03757332e+01 + 1.05157742e+01 1.06577054e+01 1.08015522e+01 1.09473405e+01 1.10950965e+01 + 1.12448467e+01 1.13966182e+01 1.15504380e+01 1.17063340e+01 1.18643341e+01 + 1.20244668e+01 1.21867607e+01 1.23512451e+01 1.25179496e+01 1.26869041e+01 + 1.28581389e+01 1.30316849e+01 1.32075732e+01 1.33858355e+01 1.35665038e+01 + 1.37496106e+01 1.39351888e+01 1.41232717e+01 1.43138932e+01 1.45070874e+01 + 1.47028892e+01 1.49013338e+01 1.51024567e+01 1.53062942e+01 1.55128829e+01 + 1.57222599e+01 1.59344629e+01 1.61495300e+01 1.63674998e+01 1.65884115e+01 + 1.68123049e+01 1.70392202e+01 1.72691982e+01 1.75022801e+01 1.77385080e+01 + 1.79779242e+01 1.82205718e+01 1.84664944e+01 1.87157363e+01 1.89683421e+01 + 1.92243574e+01 1.94838281e+01 1.97468008e+01 2.00133229e+01 2.02834423e+01 + 2.05572074e+01 2.08346676e+01 2.11158726e+01 2.14008730e+01 2.16897201e+01 + 2.19824657e+01 2.22791625e+01 2.25798639e+01 2.28846237e+01 2.31934970e+01 + 2.35065390e+01 2.38238062e+01 2.41453556e+01 2.44712449e+01 2.48015327e+01 + 2.51362784e+01 2.54755421e+01 2.58193849e+01 2.61678685e+01 2.65210556e+01 + 2.68790097e+01 2.72417950e+01 2.76094769e+01 2.79821213e+01 2.83597954e+01 + 2.87425669e+01 2.91305046e+01 2.95236783e+01 2.99221587e+01 3.03260174e+01 + 3.07353269e+01 3.11501609e+01 3.15705939e+01 3.19967014e+01 3.24285601e+01 + 3.28662476e+01 3.33098426e+01 3.37594247e+01 3.42150749e+01 3.46768749e+01 + 3.51449079e+01 3.56192579e+01 3.61000102e+01 3.65872511e+01 3.70810684e+01 + 3.75815507e+01 3.80887880e+01 3.86028714e+01 3.91238935e+01 3.96519477e+01 + 4.01871291e+01 4.07295339e+01 4.12792594e+01 4.18364046e+01 4.24010695e+01 + 4.29733558e+01 4.35533661e+01 4.41412049e+01 4.47369777e+01 4.53407916e+01 + 4.59527552e+01 4.65729784e+01 4.72015728e+01 4.78386513e+01 4.84843284e+01 + 4.91387202e+01 4.98019444e+01 5.04741200e+01 5.11553680e+01 5.18458108e+01 + 5.25455725e+01 5.32547788e+01 5.39735573e+01 5.47020371e+01 5.54403492e+01 + 5.61886263e+01 5.69470028e+01 5.77156152e+01 5.84946015e+01 5.92841017e+01 + 6.00842578e+01 6.08952136e+01 6.17171149e+01 6.25501093e+01 6.33943466e+01 + 6.42499786e+01 6.51171590e+01 6.59960438e+01 6.68867908e+01 6.77895602e+01 + 6.87045143e+01 6.96318175e+01 7.05716365e+01 7.15241402e+01 7.24894998e+01 + 7.34678888e+01 7.44594832e+01 7.54644611e+01 7.64830031e+01 7.75152924e+01 + 7.85615144e+01 7.96218573e+01 8.06965116e+01 8.17856705e+01 8.28895297e+01 + 8.40082878e+01 8.51421456e+01 8.62913071e+01 8.74559788e+01 8.86363701e+01 + 8.98326931e+01 9.10451628e+01 9.22739972e+01 9.35194171e+01 9.47816465e+01 + 9.60609121e+01 9.73574439e+01 9.86714750e+01 1.00003242e+02 1.01352983e+02 + 1.02720942e+02 1.04107364e+02 1.05512498e+02 1.06936598e+02 1.08379919e+02 + 1.09842720e+02 1.11325265e+02 1.12827819e+02 1.14350653e+02 1.15894041e+02 + 1.17458261e+02 1.19043592e+02 1.20650320e+02 1.22278735e+02 1.23929128e+02 + 1.25601797e+02 1.27297041e+02 1.29015166e+02 1.30756481e+02 1.32521298e+02 + 1.34309935e+02 1.36122713e+02 1.37959958e+02 1.39822000e+02 1.41709174e+02 + 1.43621820e+02 1.45560280e+02 1.47524903e+02 1.49516044e+02 1.51534058e+02 + 1.53579310e+02 1.55652166e+02 1.57752999e+02 1.59882188e+02 1.62040114e+02 + 1.64227166e+02 1.66443736e+02 1.68690223e+02 1.70967031e+02 1.73274569e+02 + 1.75613251e+02 1.77983499e+02 1.80385738e+02 1.82820400e+02 1.85287923e+02 + 1.87788750e+02 1.90323330e+02 1.92892119e+02 1.95495580e+02 1.98134179e+02 + 2.00808391e+02 2.03518697e+02 2.06265584e+02 2.09049546e+02 2.11871083e+02 + 2.14730702e+02 2.17628917e+02 2.20566249e+02 2.23543226e+02 2.26560384e+02 + 2.29618264e+02 2.32717416e+02 2.35858398e+02 2.39041773e+02 2.42268114e+02 + 2.45538001e+02 2.48852022e+02 2.52210771e+02 2.55614854e+02 2.59064882e+02 + 2.62561474e+02 2.66105260e+02 2.69696877e+02 2.73336969e+02 2.77026192e+02 + 2.80765207e+02 2.84554689e+02 2.88395317e+02 2.92287781e+02 2.96232783e+02 + 3.00231029e+02 3.04283240e+02 3.08390144e+02 3.12552478e+02 3.16770992e+02 + 3.21046442e+02 3.25379599e+02 3.29771239e+02 3.34222154e+02 3.38733142e+02 + 3.43305015e+02 3.47938595e+02 3.52634714e+02 3.57394216e+02 3.62217957e+02 + 3.67106805e+02 3.72061636e+02 3.77083343e+02 3.82172828e+02 3.87331006e+02 + 3.92558803e+02 3.97857160e+02 4.03227029e+02 4.08669374e+02 4.14185175e+02 + 4.19775422e+02 4.25441121e+02 4.31183290e+02 4.37002961e+02 4.42901179e+02 + 4.48879006e+02 4.54937515e+02 4.61077796e+02 4.67300952e+02 4.73608102e+02 + 4.80000379e+02 4.86478933e+02 4.93044927e+02 4.99699543e+02 5.06443976e+02 + 5.13279438e+02 5.20207158e+02 5.27228382e+02 5.34344371e+02 5.41556404e+02 + 5.48865778e+02 5.56273806e+02 5.63781821e+02 5.71391170e+02 5.79103223e+02 + 5.86919366e+02 5.94841002e+02 6.02869557e+02 6.11006473e+02 6.19253213e+02 + 6.27611259e+02 6.36082113e+02 6.44667298e+02 6.53368357e+02 6.62186855e+02 + 6.71124375e+02 6.80182525e+02 6.89362932e+02 6.98667247e+02 7.08097142e+02 + 7.17654312e+02 7.27340476e+02 7.37157373e+02 7.47106768e+02 7.57190450e+02 + 7.67410232e+02 7.77767949e+02 7.88265465e+02 7.98904665e+02 8.09687462e+02 + 8.20615795e+02 8.31691626e+02 8.42916949e+02 8.54293779e+02 8.65824161e+02 + 8.77510169e+02 8.89353903e+02 9.01357492e+02 9.13523092e+02 9.25852892e+02 + 9.38349106e+02 9.51013982e+02 9.63849795e+02 9.76858852e+02 9.90043493e+02 + 1.00340609e+03 1.01694903e+03 1.03067477e+03 1.04458576e+03 1.05868451e+03 + 1.07297355e+03 1.08745545e+03 1.10213281e+03 1.11700827e+03 1.13208451e+03 + 1.14736422e+03 1.16285017e+03 1.17854513e+03 1.19445193e+03 1.21057342e+03 + 1.22691250e+03 1.24347211e+03 1.26025522e+03 1.27726485e+03 1.29450407e+03 + 1.31197596e+03 1.32968367e+03 1.34763038e+03 1.36581931e+03 1.38425374e+03 + 1.40293698e+03 1.42187239e+03 1.44106337e+03 1.46051336e+03 1.48022588e+03 + 1.50020445e+03 1.52045267e+03 1.54097419e+03 1.56177268e+03 1.58285189e+03 + 1.60421560e+03 1.62586766e+03 1.64781196e+03 1.67005244e+03 1.69259310e+03 + 1.71543799e+03 1.73859121e+03 1.76205693e+03 1.78583938e+03 1.80994281e+03 + 1.83437156e+03 1.85913003e+03 1.88422266e+03 1.90965397e+03 1.93542853e+03 + 1.96155096e+03 1.98802597e+03 2.01485831e+03 2.04205280e+03 2.06961434e+03 + 2.09754787e+03 2.12585843e+03 2.15455109e+03 2.18363101e+03 2.21310343e+03 + 2.24297363e+03 2.27324699e+03 2.30392895e+03 2.33502503e+03 2.36654081e+03 + 2.39848195e+03 2.43085420e+03 2.46366339e+03 2.49691539e+03 2.53061620e+03 + 2.56477187e+03 2.59938853e+03 2.63447242e+03 2.67002983e+03 2.70606716e+03 + 2.74259088e+03 2.77960756e+03 2.81712386e+03 2.85514651e+03 2.89368236e+03 + 2.93273832e+03 2.97232142e+03 3.01243877e+03 3.05309759e+03 3.09430517e+03 + 3.13606893e+03 3.17839638e+03 3.22129512e+03 3.26477287e+03 3.30883743e+03 + 3.35349673e+03 3.39875879e+03 3.44463176e+03 3.49112387e+03 3.53824349e+03 + 3.58599907e+03 3.63439922e+03 3.68345262e+03 3.73316809e+03 3.78355457e+03 + 3.83462112e+03 3.88637691e+03 3.93883124e+03 3.99199356e+03 4.04587340e+03 + 4.10048045e+03 4.15582454e+03 4.21191561e+03 4.26876373e+03 4.32637913e+03 + 4.38477217e+03 4.44395333e+03 4.50393327e+03 4.56472275e+03 4.62633270e+03 + 4.68877420e+03 4.75205848e+03 4.81619690e+03 4.88120099e+03 4.94708244e+03 + 5.01385310e+03 5.08152495e+03 5.15011018e+03 5.21962109e+03 5.29007019e+03 + 5.36147014e+03 5.43383378e+03 5.50717410e+03 5.58150430e+03 5.65683773e+03 + 5.73318793e+03 5.81056864e+03 5.88899374e+03 5.96847735e+03 6.04903375e+03 + 6.13067741e+03 6.21342302e+03 6.29728544e+03 6.38227975e+03 6.46842123e+03 + 6.55572536e+03 6.64420783e+03 6.73388454e+03 6.82477162e+03 6.91688540e+03 + 7.01024244e+03 7.10485951e+03 7.20075363e+03 7.29794203e+03 7.39644218e+03 + 7.49627178e+03 7.59744879e+03 7.69999137e+03 7.80391797e+03 7.90924727e+03 + 8.01599819e+03 8.12418992e+03 8.23384192e+03 8.34497389e+03 8.45760580e+03 + 8.57175791e+03 8.68745072e+03 8.80470504e+03 8.92354193e+03 9.04398276e+03 + 9.16604918e+03 9.28976313e+03 9.41514684e+03 9.54222285e+03 9.67101401e+03 + 9.80154345e+03 9.93383465e+03 1.00679114e+04 1.02037977e+04 1.03415182e+04 + 1.04810974e+04 1.06225605e+04 1.07659329e+04 1.09112405e+04 1.10585092e+04 + 1.12077657e+04 1.13590366e+04 1.15123493e+04 1.16677312e+04 1.18252103e+04 + 1.19848148e+04 1.21465736e+04 1.23105156e+04 1.24766704e+04 1.26450677e+04 + 1.28157379e+04 1.29887116e+04 1.31640199e+04 1.33416944e+04 1.35217669e+04 + 1.37042699e+04 1.38892361e+04 1.40766987e+04 1.42666916e+04 1.44592488e+04 + 1.46544049e+04 1.48521951e+04 1.50526548e+04 1.52558201e+04 1.54617276e+04 + 1.56704142e+04 1.58819174e+04 1.60962752e+04 1.63135263e+04 1.65337095e+04 + 1.67568646e+04 1.69830316e+04 1.72122512e+04 1.74445645e+04 1.76800134e+04 + 1.79186401e+04 1.81604876e+04 1.84055993e+04 1.86540192e+04 1.89057921e+04 + 1.91609631e+04 1.94195781e+04 1.96816837e+04 1.99473269e+04 2.02165555e+04 + 2.04894179e+04 2.07659631e+04 2.10462408e+04 2.13303014e+04 2.16181960e+04 + 2.19099763e+04 2.22056947e+04 2.25054044e+04 2.28091593e+04 2.31170140e+04 + 2.34290238e+04 2.37452448e+04 2.40657338e+04 2.43905484e+04 2.47197470e+04 + 2.50533889e+04 2.53915339e+04 2.57342428e+04 2.60815773e+04 2.64335997e+04 + 2.67903734e+04 2.71519624e+04 2.75184318e+04 2.78898474e+04 2.82662760e+04 + 2.86477853e+04 2.90344437e+04 2.94263209e+04 2.98234873e+04 3.02260142e+04 + 3.06339740e+04 3.10474400e+04 3.14664865e+04 3.18911890e+04 3.23216236e+04 + 3.27578678e+04 3.31999999e+04 3.36480995e+04 3.41022471e+04 3.45625243e+04 + 3.50290139e+04 3.55017997e+04 3.59809666e+04 3.64666009e+04 3.69587897e+04 + 3.74576216e+04 3.79631862e+04 3.84755745e+04 3.89948784e+04 3.95211913e+04 + 4.00546079e+04 4.05952240e+04 4.11431368e+04 4.16984447e+04 4.22612476e+04 + 4.28316467e+04 4.34097444e+04 4.39956447e+04 4.45894528e+04 4.51912756e+04 + 4.58012212e+04 4.64193992e+04 4.70459207e+04 4.76808984e+04 4.83244463e+04 + 4.89766802e+04 4.96377173e+04 5.03076764e+04 5.09866779e+04 5.16748439e+04 + 5.23722980e+04 5.30791657e+04 5.37955739e+04 5.45216515e+04 5.52575289e+04 + 5.60033385e+04 5.67592142e+04 5.75252919e+04 5.83017094e+04 5.90886062e+04 + 5.98861237e+04 6.06944053e+04 6.15135963e+04 6.23438438e+04 6.31852972e+04 + 6.40381076e+04 6.49024284e+04 6.57784150e+04 6.66662247e+04 6.75660171e+04 + 6.84779540e+04 6.94021994e+04 7.03389192e+04 7.12882819e+04 7.22504581e+04 + 7.32256209e+04 7.42139453e+04 7.52156092e+04 7.62307924e+04 7.72596776e+04 + 7.83024497e+04 7.93592960e+04 8.04304065e+04 8.15159738e+04 8.26161929e+04 + 8.37312617e+04 8.48613806e+04 8.60067526e+04 8.71675837e+04 8.83440825e+04 + 8.95364604e+04 9.07449319e+04 9.19697141e+04 9.32110271e+04 9.44690942e+04 + 9.57441413e+04 9.70363977e+04 9.83460956e+04 9.96734705e+04 1.01018761e+05 + 1.02382209e+05 1.03764059e+05 1.05164560e+05 1.06583964e+05 1.08022525e+05 + 1.09480502e+05 1.10958158e+05 1.12455758e+05 1.13973570e+05 1.15511869e+05 + 1.17070930e+05 1.18651033e+05 1.20252464e+05 1.21875508e+05 1.23520459e+05 + 1.25187612e+05 1.26877266e+05 1.28589725e+05 1.30325298e+05 1.32084295e+05 + 1.33867034e+05 1.35673834e+05 1.37505020e+05 1.39360922e+05 1.41241873e+05 + 1.43148212e+05 1.45080280e+05 1.47038425e+05 1.49022999e+05 1.51034359e+05 + 1.53072866e+05 1.55138887e+05 1.57232793e+05 1.59354960e+05 1.61505770e+05 + 1.63685609e+05 1.65894870e+05 1.68133949e+05 1.70403249e+05 1.72703178e+05 + 1.75034149e+05 1.77396580e+05 1.79790898e+05 1.82217531e+05 1.84676917e+05 + 1.87169497e+05 1.89695719e+05 1.92256038e+05 1.94850913e+05 1.97480811e+05 + 2.00146205e+05 2.02847573e+05 2.05585402e+05 2.08360183e+05 2.11172416e+05 + 2.14022605e+05 2.16911263e+05 2.19838909e+05 2.22806069e+05 2.25813278e+05 + 2.28861074e+05 2.31950007e+05 2.35080630e+05 2.38253508e+05 2.41469210e+05 + 2.44728314e+05 2.48031406e+05 2.51379080e+05 2.54771938e+05 2.58210588e+05 + 2.61695651e+05 2.65227751e+05 2.68807523e+05 2.72435612e+05 2.76112669e+05 + 2.79839355e+05 2.83616340e+05 2.87444303e+05 2.91323932e+05 2.95255924e+05 + 2.99240986e+05 3.03279835e+05 3.07373196e+05 3.11521804e+05 3.15726407e+05 + 3.19987758e+05 3.24306626e+05 3.28683784e+05 3.33120022e+05 3.37616135e+05 + 3.42172931e+05 3.46791231e+05 3.51471864e+05 3.56215672e+05 3.61023506e+05 + 3.65896232e+05 3.70834725e+05 3.75839872e+05 3.80912574e+05 3.86053742e+05 + 3.91264300e+05 3.96545185e+05 4.01897346e+05 4.07321745e+05 4.12819356e+05 + 4.18391169e+05 4.24038185e+05 4.29761418e+05 4.35561898e+05 4.41440667e+05 + 4.47398781e+05 4.53437311e+05 4.59557344e+05 4.65759979e+05 4.72046330e+05 + 4.78417528e+05 4.84874718e+05 4.91419060e+05 4.98051732e+05 5.04773924e+05 + 5.11586846e+05 5.18491721e+05 5.25489792e+05 5.32582315e+05 5.39770566e+05 + 5.47055836e+05 5.54439436e+05 5.61922691e+05 5.69506949e+05 5.77193570e+05 + 5.84983938e+05 5.92879453e+05 6.00881532e+05 6.08991616e+05 6.17211161e+05 + 6.25541646e+05 6.33984566e+05 6.42541441e+05 6.51213808e+05 6.60003225e+05 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 6.88504212e-06 6.97796937e-06 7.07215085e-06 7.16760350e-06 7.26434448e-06 + 7.36239116e-06 7.46176118e-06 7.56247239e-06 7.66454290e-06 7.76799106e-06 + 7.87283545e-06 7.97909492e-06 8.08678857e-06 8.19593576e-06 8.30655611e-06 + 8.41866950e-06 8.53229609e-06 8.64745628e-06 8.76417079e-06 8.88246060e-06 + 9.00234696e-06 9.12385142e-06 9.24699583e-06 9.37180231e-06 9.49829330e-06 + 9.62649154e-06 9.75642007e-06 9.88810223e-06 1.00215617e-05 1.01568225e-05 + 1.02939089e-05 1.04328455e-05 1.05736574e-05 1.07163698e-05 1.08610084e-05 + 1.10075992e-05 1.11561685e-05 1.13067430e-05 1.14593498e-05 1.16140164e-05 + 1.17707705e-05 1.19296403e-05 1.20906544e-05 1.22538417e-05 1.24192315e-05 + 1.25868536e-05 1.27567380e-05 1.29289154e-05 1.31034167e-05 1.32802732e-05 + 1.34595167e-05 1.36411795e-05 1.38252941e-05 1.40118938e-05 1.42010120e-05 + 1.43926827e-05 1.45869404e-05 1.47838200e-05 1.49833569e-05 1.51855869e-05 + 1.53905464e-05 1.55982722e-05 1.58088017e-05 1.60221728e-05 1.62384236e-05 + 1.64575933e-05 1.66797210e-05 1.69048468e-05 1.71330111e-05 1.73642550e-05 + 1.75986199e-05 1.78361481e-05 1.80768821e-05 1.83208654e-05 1.85681416e-05 + 1.88187554e-05 1.90727517e-05 1.93301762e-05 1.95910751e-05 1.98554954e-05 + 2.01234845e-05 2.03950907e-05 2.06703628e-05 2.09493502e-05 2.12321030e-05 + 2.15186722e-05 2.18091092e-05 2.21034663e-05 2.24017962e-05 2.27041527e-05 + 2.30105901e-05 2.33211635e-05 2.36359287e-05 2.39549423e-05 2.42782616e-05 + 2.46059447e-05 2.49380505e-05 2.52746388e-05 2.56157700e-05 2.59615054e-05 + 2.63119073e-05 2.66670385e-05 2.70269628e-05 2.73917451e-05 2.77614508e-05 + 2.81361465e-05 2.85158994e-05 2.89007778e-05 2.92908509e-05 2.96861888e-05 + 3.00868626e-05 3.04929443e-05 3.09045068e-05 3.13216242e-05 3.17443714e-05 + 3.21728244e-05 3.26070603e-05 3.30471570e-05 3.34931937e-05 3.39452505e-05 + 3.44034088e-05 3.48677508e-05 3.53383600e-05 3.58153210e-05 3.62987195e-05 + 3.67886424e-05 3.72851779e-05 3.77884150e-05 3.82984444e-05 3.88153576e-05 + 3.93392475e-05 3.98702084e-05 4.04083357e-05 4.09537260e-05 4.15064775e-05 + 4.20666894e-05 4.26344625e-05 4.32098988e-05 4.37931018e-05 4.43841763e-05 + 4.49832284e-05 4.55903660e-05 4.62056981e-05 4.68293353e-05 4.74613897e-05 + 4.81019749e-05 4.87512062e-05 4.94092000e-05 5.00760748e-05 5.07519504e-05 + 5.14369483e-05 5.21311915e-05 5.28348050e-05 5.35479151e-05 5.42706500e-05 + 5.50031397e-05 5.57455158e-05 5.64979117e-05 5.72604626e-05 5.80333057e-05 + 5.88165799e-05 5.96104258e-05 6.04149863e-05 6.12304060e-05 6.20568313e-05 + 6.28944109e-05 6.37432952e-05 6.46036370e-05 6.54755907e-05 6.63593132e-05 + 6.72549633e-05 6.81627019e-05 6.90826923e-05 7.00150997e-05 7.09600919e-05 + 7.19178385e-05 7.28885119e-05 7.38722864e-05 7.48693389e-05 7.58798486e-05 + 7.69039971e-05 7.79419685e-05 7.89939494e-05 8.00601288e-05 8.11406985e-05 + 8.22358526e-05 8.33457879e-05 8.44707040e-05 8.56108031e-05 8.67662901e-05 + 8.79373726e-05 8.91242612e-05 9.03271693e-05 9.15463129e-05 9.27819113e-05 + 9.40341866e-05 9.53033637e-05 9.65896710e-05 9.78933395e-05 9.92146035e-05 + 1.00553701e-04 1.01910872e-04 1.03286360e-04 1.04680414e-04 1.06093283e-04 + 1.07525221e-04 1.08976487e-04 1.10447340e-04 1.11938045e-04 1.13448870e-04 + 1.14980087e-04 1.16531970e-04 1.18104799e-04 1.19698857e-04 1.21314430e-04 + 1.22951808e-04 1.24611285e-04 1.26293161e-04 1.27997736e-04 1.29725319e-04 + 1.31476218e-04 1.33250750e-04 1.35049232e-04 1.36871988e-04 1.38719346e-04 + 1.40591638e-04 1.42489200e-04 1.44412373e-04 1.46361504e-04 1.48336941e-04 + 1.50339042e-04 1.52368164e-04 1.54424673e-04 1.56508940e-04 1.58621337e-04 + 1.60762245e-04 1.62932050e-04 1.65131140e-04 1.67359911e-04 1.69618763e-04 + 1.71908104e-04 1.74228343e-04 1.76579899e-04 1.78963194e-04 1.81378656e-04 + 1.83826719e-04 1.86307824e-04 1.88822416e-04 1.91370948e-04 1.93953877e-04 + 1.96571668e-04 1.99224791e-04 2.01913723e-04 2.04638948e-04 2.07400955e-04 + 2.10200241e-04 2.13037308e-04 2.15912668e-04 2.18826836e-04 2.21780337e-04 + 2.24773701e-04 2.27807466e-04 2.30882178e-04 2.33998389e-04 2.37156660e-04 + 2.40357558e-04 2.43601658e-04 2.46889543e-04 2.50221806e-04 2.53599044e-04 + 2.57021864e-04 2.60490882e-04 2.64006721e-04 2.67570013e-04 2.71181399e-04 + 2.74841528e-04 2.78551058e-04 2.82310655e-04 2.86120995e-04 2.89982763e-04 + 2.93896654e-04 2.97863370e-04 3.01883625e-04 3.05958141e-04 3.10087651e-04 + 3.14272896e-04 3.18514630e-04 3.22813614e-04 3.27170622e-04 3.31586436e-04 + 3.36061850e-04 3.40597669e-04 3.45194708e-04 3.49853792e-04 3.54575761e-04 + 3.59361461e-04 3.64211754e-04 3.69127512e-04 3.74109617e-04 3.79158966e-04 + 3.84276465e-04 3.89463035e-04 3.94719609e-04 4.00047130e-04 4.05446556e-04 + 4.10918859e-04 4.16465021e-04 4.22086040e-04 4.27782925e-04 4.33556701e-04 + 4.39408405e-04 4.45339090e-04 4.51349821e-04 4.57441679e-04 4.63615758e-04 + 4.69873169e-04 4.76215036e-04 4.82642499e-04 4.89156713e-04 4.95758850e-04 + 5.02450095e-04 5.09231652e-04 5.16104740e-04 5.23070593e-04 5.30130464e-04 + 5.37285623e-04 5.44537354e-04 5.51886961e-04 5.59335767e-04 5.66885108e-04 + 5.74536343e-04 5.82290846e-04 5.90150012e-04 5.98115253e-04 6.06188000e-04 + 6.14369705e-04 6.22661838e-04 6.31065890e-04 6.39583371e-04 6.48215813e-04 + 6.56964766e-04 6.65831804e-04 6.74818520e-04 6.83926530e-04 6.93157470e-04 + 7.02513000e-04 7.11994801e-04 7.21604578e-04 7.31344057e-04 7.41214991e-04 + 7.51219152e-04 7.61358339e-04 7.71634374e-04 7.82049105e-04 7.92604403e-04 + 8.03302166e-04 8.14144316e-04 8.25132802e-04 8.36269600e-04 8.47556711e-04 + 8.58996164e-04 8.70590014e-04 8.82340347e-04 8.94249274e-04 9.06318935e-04 + 9.18551500e-04 9.30949168e-04 9.43514166e-04 9.56248755e-04 9.69155221e-04 + 9.82235886e-04 9.95493101e-04 1.00892925e-03 1.02254674e-03 1.03634803e-03 + 1.05033559e-03 1.06451195e-03 1.07887964e-03 1.09344125e-03 1.10819941e-03 + 1.12315675e-03 1.13831597e-03 1.15367979e-03 1.16925098e-03 1.18503233e-03 + 1.20102668e-03 1.21723691e-03 1.23366593e-03 1.25031669e-03 1.26719218e-03 + 1.28429545e-03 1.30162955e-03 1.31919761e-03 1.33700279e-03 1.35504829e-03 + 1.37333734e-03 1.39187324e-03 1.41065932e-03 1.42969896e-03 1.44899557e-03 + 1.46855263e-03 1.48837365e-03 1.50846219e-03 1.52882187e-03 1.54945635e-03 + 1.57036932e-03 1.59156456e-03 1.61304587e-03 1.63481711e-03 1.65688220e-03 + 1.67924510e-03 1.70190983e-03 1.72488046e-03 1.74816113e-03 1.77175602e-03 + 1.79566937e-03 1.81990548e-03 1.84446870e-03 1.86936345e-03 1.89459420e-03 + 1.92016550e-03 1.94608192e-03 1.97234815e-03 1.99896888e-03 2.02594892e-03 + 2.05329310e-03 2.08100635e-03 2.10909364e-03 2.13756003e-03 2.16641063e-03 + 2.19565062e-03 2.22528526e-03 2.25531988e-03 2.28575988e-03 2.31661073e-03 + 2.34787797e-03 2.37956722e-03 2.41168418e-03 2.44423463e-03 2.47722440e-03 + 2.51065944e-03 2.54454575e-03 2.57888943e-03 2.61369664e-03 2.64897364e-03 + 2.68472677e-03 2.72096247e-03 2.75768723e-03 2.79490767e-03 2.83263047e-03 + 2.87086242e-03 2.90961038e-03 2.94888132e-03 2.98868230e-03 3.02902048e-03 + 3.06990309e-03 3.11133750e-03 3.15333115e-03 3.19589159e-03 3.23902646e-03 + 3.28274352e-03 3.32705063e-03 3.37195576e-03 3.41746696e-03 3.46359243e-03 + 3.51034046e-03 3.55771944e-03 3.60573789e-03 3.65440445e-03 3.70372786e-03 + 3.75371699e-03 3.80438082e-03 3.85572845e-03 3.90776913e-03 3.96051220e-03 + 4.01396713e-03 4.06814355e-03 4.12305119e-03 4.17869991e-03 4.23509973e-03 + 4.29226077e-03 4.35019331e-03 4.40890776e-03 4.46841469e-03 4.52872477e-03 + 4.58984886e-03 4.65179794e-03 4.71458315e-03 4.77821577e-03 4.84270723e-03 + 4.90806913e-03 4.97431323e-03 5.04145141e-03 5.10949576e-03 5.17845851e-03 + 5.24835204e-03 5.31918892e-03 5.39098188e-03 5.46374384e-03 5.53748786e-03 + 5.61222720e-03 5.68797530e-03 5.76474576e-03 5.84255240e-03 5.92140919e-03 + 6.00133031e-03 6.08233012e-03 6.16442319e-03 6.24762426e-03 6.33194830e-03 + 6.41741045e-03 6.50402609e-03 6.59181077e-03 6.68078028e-03 6.77095062e-03 + 6.86233798e-03 6.95495879e-03 7.04882970e-03 7.14396759e-03 7.24038955e-03 + 7.33811291e-03 7.43715525e-03 7.53753436e-03 7.63926828e-03 7.74237530e-03 + 7.84687395e-03 7.95278302e-03 8.06012155e-03 8.16890882e-03 8.27916438e-03 + 8.39090807e-03 8.50415995e-03 8.61894040e-03 8.73527003e-03 8.85316976e-03 + 8.97266078e-03 9.09376457e-03 9.21650290e-03 9.34089782e-03 9.46697169e-03 + 9.59474718e-03 9.72424726e-03 9.85549519e-03 9.98851457e-03 1.01233293e-02 + 1.02599637e-02 1.03984421e-02 1.05387897e-02 1.06810315e-02 1.08251931e-02 + 1.09713005e-02 1.11193798e-02 1.12694578e-02 1.14215614e-02 1.15757180e-02 + 1.17319552e-02 1.18903011e-02 1.20507842e-02 1.22134334e-02 1.23782778e-02 + 1.25453471e-02 1.27146713e-02 1.28862810e-02 1.30602068e-02 1.32364801e-02 + 1.34151325e-02 1.35961963e-02 1.37797038e-02 1.39656881e-02 1.41541827e-02 + 1.43452214e-02 1.45388385e-02 1.47350688e-02 1.49339477e-02 1.51355108e-02 + 1.53397945e-02 1.55468353e-02 1.57566706e-02 1.59693380e-02 1.61848758e-02 + 1.64033226e-02 1.66247179e-02 1.68491013e-02 1.70765132e-02 1.73069945e-02 + 1.75405866e-02 1.77773315e-02 1.80172717e-02 1.82604504e-02 1.85069113e-02 + 1.87566986e-02 1.90098573e-02 1.92664329e-02 1.95264715e-02 1.97900198e-02 + 2.00571252e-02 2.03278358e-02 2.06022001e-02 2.08802675e-02 2.11620880e-02 + 2.14477122e-02 2.17371914e-02 2.20305778e-02 2.23279240e-02 2.26292834e-02 + 2.29347103e-02 2.32442596e-02 2.35579868e-02 2.38759484e-02 2.41982015e-02 + 2.45248040e-02 2.48558147e-02 2.51912931e-02 2.55312994e-02 2.58758947e-02 + 2.62251410e-02 2.65791011e-02 2.69378386e-02 2.73014180e-02 2.76699046e-02 + 2.80433646e-02 2.84218652e-02 2.88054745e-02 2.91942613e-02 2.95882955e-02 + 2.99876481e-02 3.03923906e-02 3.08025960e-02 3.12183379e-02 3.16396911e-02 + 3.20667312e-02 3.24995351e-02 3.29381806e-02 3.33827464e-02 3.38333125e-02 + 3.42899600e-02 3.47527707e-02 3.52218280e-02 3.56972162e-02 3.61790207e-02 + 3.66673281e-02 3.71622261e-02 3.76638038e-02 3.81721513e-02 3.86873599e-02 + 3.92095223e-02 3.97387323e-02 4.02750850e-02 4.08186768e-02 4.13696055e-02 + 4.19279701e-02 4.24938709e-02 4.30674097e-02 4.36486895e-02 4.42378148e-02 + 4.48348916e-02 4.54400270e-02 4.60533300e-02 4.66749107e-02 4.73048808e-02 + 4.79433537e-02 4.85904440e-02 4.92462681e-02 4.99109438e-02 5.05845906e-02 + 5.12673296e-02 5.19592835e-02 5.26605767e-02 5.33713353e-02 5.40916869e-02 + 5.48217611e-02 5.55616891e-02 5.63116039e-02 5.70716403e-02 5.78419349e-02 + 5.86226261e-02 5.94138543e-02 6.02157617e-02 6.10284924e-02 6.18521925e-02 + 6.26870100e-02 6.35330951e-02 6.43905998e-02 6.52596782e-02 6.61404865e-02 + 6.70331831e-02 6.79379283e-02 6.88548849e-02 6.97842177e-02 7.07260936e-02 + 7.16806820e-02 7.26481545e-02 7.36286849e-02 7.46224495e-02 7.56296269e-02 + 7.66503982e-02 7.76849468e-02 7.87334586e-02 7.97961222e-02 8.08731286e-02 + 8.19646713e-02 8.30709465e-02 8.41921531e-02 8.53284926e-02 8.64801692e-02 + 8.76473900e-02 8.88303647e-02 9.00293060e-02 9.12444294e-02 9.24759533e-02 + 9.37240991e-02 9.49890910e-02 9.62711565e-02 9.75705260e-02 9.88874331e-02 + 1.00222114e-01 1.01574810e-01 1.02945763e-01 1.04335219e-01 1.05743429e-01 + 1.07170646e-01 1.08617125e-01 1.10083128e-01 1.11568917e-01 1.13074760e-01 + 1.14600928e-01 1.16147694e-01 1.17715336e-01 1.19304138e-01 1.20914383e-01 + 1.22546361e-01 1.24200367e-01 1.25876696e-01 1.27575651e-01 1.29297536e-01 + 1.31042662e-01 1.32811342e-01 1.34603893e-01 1.36420639e-01 1.38261905e-01 + 1.40128022e-01 1.42019327e-01 1.43936158e-01 1.45878861e-01 1.47847785e-01 + 1.49843283e-01 1.51865714e-01 1.53915442e-01 1.55992835e-01 1.58098267e-01 + 1.60232115e-01 1.62394764e-01 1.64586603e-01 1.66808024e-01 1.69059428e-01 + 1.71341219e-01 1.73653807e-01 1.75997609e-01 1.78373044e-01 1.80780541e-01 + 1.83220532e-01 1.85693455e-01 1.88199755e-01 1.90739882e-01 1.93314294e-01 + 1.95923452e-01 1.98567827e-01 2.01247892e-01 2.03964130e-01 2.06717029e-01 + 2.09507084e-01 2.12334796e-01 2.15200673e-01 2.18105232e-01 2.21048993e-01 + 2.24032486e-01 2.27056247e-01 2.30120820e-01 2.33226755e-01 2.36374611e-01 + 2.39564954e-01 2.42798356e-01 2.46075400e-01 2.49396673e-01 2.52762774e-01 + 2.56174308e-01 2.59631886e-01 2.63136131e-01 2.66687674e-01 2.70287151e-01 + 2.73935210e-01 2.77632507e-01 2.81379706e-01 2.85177481e-01 2.89026515e-01 + 2.92927499e-01 2.96881135e-01 3.00888132e-01 3.04949212e-01 3.09065104e-01 + 3.13236549e-01 3.17464295e-01 3.21749103e-01 3.26091743e-01 3.30492995e-01 + 3.34953651e-01 3.39474513e-01 3.44056392e-01 3.48700113e-01 3.53406510e-01 + 3.58176430e-01 3.63010728e-01 3.67910276e-01 3.72875952e-01 3.77908650e-01 + 3.83009274e-01 3.88178741e-01 3.93417980e-01 3.98727933e-01 4.04109554e-01 + 4.09563811e-01 4.15091684e-01 4.20694167e-01 4.26372266e-01 4.32127002e-01 + 4.37959410e-01 4.43870538e-01 4.49861448e-01 4.55933217e-01 4.62086937e-01 + 4.68323713e-01 4.74644667e-01 4.81050935e-01 4.87543668e-01 4.94124034e-01 + 5.00793214e-01 5.07552408e-01 5.14402831e-01 5.21345713e-01 5.28382304e-01 + 5.35513867e-01 5.42741685e-01 5.50067057e-01 5.57491299e-01 5.65015746e-01 + 5.72641750e-01 5.80370682e-01 5.88203931e-01 5.96142905e-01 6.04189032e-01 + 6.12343757e-01 6.20608546e-01 6.28984885e-01 6.37474279e-01 6.46078254e-01 + 6.54798357e-01 6.63636155e-01 6.72593236e-01 6.81671211e-01 6.90871711e-01 + 7.00196390e-01 7.09646924e-01 7.19225012e-01 7.28932374e-01 7.38770757e-01 + 7.48741929e-01 7.58847681e-01 7.69089830e-01 7.79470217e-01 7.89990708e-01 + 8.00653193e-01 8.11459591e-01 8.22411841e-01 8.33511914e-01 8.44761805e-01 + 8.56163535e-01 8.67719154e-01 8.79430738e-01 8.91300394e-01 9.03330254e-01 + 9.15522481e-01 9.27879266e-01 9.40402831e-01 9.53095425e-01 9.65959331e-01 + 9.78996861e-01 9.92210359e-01 1.00560220e+00 1.01917479e+00 1.03293057e+00 + 1.04687200e+00 1.06100161e+00 1.07532192e+00 1.08983552e+00 1.10454500e+00 + 1.11945302e+00 1.13456225e+00 1.14987541e+00 1.16539525e+00 1.18112456e+00 + 1.19706617e+00 1.21322295e+00 1.22959779e+00 1.24619364e+00 1.26301349e+00 + 1.28006035e+00 1.29733729e+00 1.31484742e+00 1.33259389e+00 1.35057988e+00 + 1.36880862e+00 1.38728340e+00 1.40600753e+00 1.42498438e+00 1.44421736e+00 + 1.46370993e+00 1.48346558e+00 1.50348788e+00 1.52378042e+00 1.54434685e+00 + 1.56519086e+00 1.58631621e+00 1.60772668e+00 1.62942613e+00 1.65141846e+00 + 1.67370761e+00 1.69629760e+00 1.71919249e+00 1.74239639e+00 1.76591347e+00 + 1.78974797e+00 1.81390415e+00 1.83838637e+00 1.86319903e+00 1.88834658e+00 + 1.91383355e+00 1.93966452e+00 1.96584412e+00 1.99237707e+00 2.01926814e+00 + 2.04652215e+00 2.07414401e+00 2.10213869e+00 2.13051120e+00 2.15926666e+00 + 2.18841023e+00 2.21794715e+00 2.24788273e+00 2.27822235e+00 2.30897147e+00 + 2.34013560e+00 2.37172035e+00 2.40373141e+00 2.43617451e+00 2.46905550e+00 + 2.50238028e+00 2.53615485e+00 2.57038527e+00 2.60507770e+00 2.64023837e+00 + 2.67587361e+00 2.71198981e+00 2.74859347e+00 2.78569117e+00 2.82328958e+00 + 2.86139545e+00 2.90001564e+00 2.93915708e+00 2.97882681e+00 3.01903197e+00 + 3.05977977e+00 3.10107754e+00 3.14293271e+00 3.18535280e+00 3.22834543e+00 + 3.27191833e+00 3.31607934e+00 3.36083638e+00 3.40619751e+00 3.45217088e+00 + 3.49876474e+00 3.54598749e+00 3.59384760e+00 3.64235367e+00 3.69151443e+00 + 3.74133872e+00 3.79183548e+00 3.84301379e+00 3.89488285e+00 3.94745200e+00 + 4.00073066e+00 4.05472843e+00 4.10945500e+00 4.16492022e+00 4.22113405e+00 + 4.27810659e+00 4.33584809e+00 4.39436893e+00 4.45367962e+00 4.51379083e+00 + 4.57471336e+00 4.63645816e+00 4.69903632e+00 4.76245910e+00 4.82673790e+00 + 4.89188427e+00 4.95790991e+00 5.02482670e+00 5.09264667e+00 5.16138200e+00 + 5.23104505e+00 5.30164834e+00 5.37320456e+00 5.44572658e+00 5.51922742e+00 + 5.59372030e+00 5.66921861e+00 5.74573592e+00 5.82328598e+00 5.90188273e+00 + 5.98154030e+00 6.06227301e+00 6.14409536e+00 6.22702207e+00 6.31106804e+00 + 6.39624837e+00 6.48257839e+00 6.57007359e+00 6.65874972e+00 6.74862270e+00 + 6.83970870e+00 6.93202409e+00 7.02558545e+00 7.12040961e+00 7.21651361e+00 + 7.31391472e+00 7.41263046e+00 7.51267855e+00 7.61407700e+00 7.71684401e+00 + 7.82099807e+00 7.92655790e+00 8.03354246e+00 8.14197099e+00 8.25186298e+00 + 8.36323818e+00 8.47611660e+00 8.59051855e+00 8.70646457e+00 8.82397552e+00 + 8.94307250e+00 9.06377694e+00 9.18611052e+00 9.31009524e+00 9.43575337e+00 + 9.56310751e+00 9.69218054e+00 9.82299567e+00 9.95557641e+00 1.00899466e+01 + 1.02261304e+01 1.03641522e+01 1.05040369e+01 1.06458096e+01 1.07894959e+01 + 1.09351215e+01 1.10827125e+01 1.12322956e+01 1.13838977e+01 1.15375459e+01 + 1.16932678e+01 1.18510916e+01 1.20110455e+01 1.21731583e+01 1.23374591e+01 + 1.25039775e+01 1.26727434e+01 1.28437871e+01 1.30171394e+01 1.31928314e+01 + 1.33708948e+01 1.35513614e+01 1.37342638e+01 1.39196348e+01 1.41075078e+01 + 1.42979165e+01 1.44908951e+01 1.46864784e+01 1.48847015e+01 1.50855999e+01 + 1.52892099e+01 1.54955680e+01 1.57047113e+01 1.59166774e+01 1.61315045e+01 + 1.63492310e+01 1.65698962e+01 1.67935397e+01 1.70202017e+01 1.72499229e+01 + 1.74827447e+01 1.77187089e+01 1.79578579e+01 1.82002347e+01 1.84458828e+01 + 1.86948465e+01 1.89471703e+01 1.92028999e+01 1.94620809e+01 1.97247602e+01 + 1.99909848e+01 2.02608026e+01 2.05342622e+01 2.08114127e+01 2.10923038e+01 + 2.13769861e+01 2.16655108e+01 2.19579297e+01 2.22542953e+01 2.25546610e+01 + 2.28590807e+01 2.31676092e+01 2.34803019e+01 2.37972150e+01 2.41184054e+01 + 2.44439309e+01 2.47738501e+01 2.51082222e+01 2.54471072e+01 2.57905662e+01 + 2.61386609e+01 2.64914538e+01 2.68490083e+01 2.72113887e+01 2.75786602e+01 + 2.79508887e+01 2.83281412e+01 2.87104854e+01 2.90979902e+01 2.94907251e+01 + 2.98887607e+01 3.02921686e+01 3.07010212e+01 3.11153922e+01 3.15353559e+01 + 3.19609878e+01 3.23923645e+01 3.28295635e+01 3.32726633e+01 3.37217437e+01 + 3.41768853e+01 3.46381699e+01 3.51056804e+01 3.55795009e+01 3.60597166e+01 + 3.65464138e+01 3.70396798e+01 3.75396035e+01 3.80462746e+01 3.85597843e+01 + 3.90802248e+01 3.96076897e+01 4.01422737e+01 4.06840730e+01 4.12331850e+01 + 4.17897083e+01 4.23537430e+01 4.29253905e+01 4.35047534e+01 4.40919360e+01 + 4.46870439e+01 4.52901838e+01 4.59014643e+01 4.65209953e+01 4.71488881e+01 + 4.77852555e+01 4.84302120e+01 4.90838734e+01 4.97463572e+01 5.04177826e+01 + 5.10982703e+01 5.17879424e+01 5.24869230e+01 5.31953378e+01 5.39133140e+01 + 5.46409807e+01 5.53784687e+01 5.61259106e+01 5.68834406e+01 5.76511951e+01 + 5.84293119e+01 5.92179309e+01 6.00171939e+01 6.08272446e+01 6.16482284e+01 + 6.24802931e+01 6.33235881e+01 6.41782651e+01 6.50444776e+01 6.59223814e+01 + 6.68121342e+01 6.77138960e+01 6.86278288e+01 6.95540970e+01 7.04928670e+01 + 7.14443075e+01 7.24085896e+01 7.33858866e+01 7.43763742e+01 7.53802303e+01 + 7.63976355e+01 7.74287726e+01 7.84738269e+01 7.95329863e+01 8.06064411e+01 + 8.16943843e+01 8.27970114e+01 8.39145207e+01 8.50471130e+01 8.61949919e+01 + 8.73583636e+01 8.85374374e+01 8.97324251e+01 9.09435415e+01 9.21710043e+01 + 9.34150341e+01 9.46758546e+01 9.59536924e+01 9.72487771e+01 9.85613415e+01 + 9.98916216e+01 1.01239856e+02 1.02606288e+02 1.03991163e+02 1.05394729e+02 + 1.06817239e+02 1.08258949e+02 1.09720118e+02 1.11201007e+02 1.12701885e+02 + 1.14223019e+02 1.15764685e+02 1.17327158e+02 1.18910720e+02 1.20515655e+02 + 1.22142252e+02 1.23790803e+02 1.25461604e+02 1.27154957e+02 1.28871164e+02 + 1.30610535e+02 1.32373382e+02 1.34160023e+02 1.35970777e+02 1.37805972e+02 + 1.39665936e+02 1.41551004e+02 1.43461514e+02 1.45397811e+02 1.47360241e+02 + 1.49349159e+02 1.51364921e+02 1.53407890e+02 1.55478433e+02 1.57576921e+02 + 1.59703733e+02 1.61859251e+02 1.64043861e+02 1.66257957e+02 1.68501937e+02 + 1.70776204e+02 1.73081166e+02 1.75417238e+02 1.77784841e+02 1.80184398e+02 + 1.82616343e+02 1.85081111e+02 1.87579147e+02 1.90110898e+02 1.92676820e+02 + 1.95277375e+02 1.97913029e+02 2.00584256e+02 2.03291537e+02 2.06035358e+02 + 2.08816212e+02 2.11634600e+02 2.14491027e+02 2.17386007e+02 2.20320061e+02 + 2.23293716e+02 2.26307506e+02 2.29361973e+02 2.32457666e+02 2.35595141e+02 + 2.38774963e+02 2.41997703e+02 2.45263940e+02 2.48574262e+02 2.51929263e+02 + 2.55329546e+02 2.58775723e+02 2.62268413e+02 2.65808243e+02 2.69395851e+02 + 2.73031880e+02 2.76716985e+02 2.80451827e+02 2.84237079e+02 2.88073420e+02 + 2.91961540e+02 2.95902138e+02 2.99895922e+02 3.03943610e+02 3.08045930e+02 + 3.12203619e+02 3.16417423e+02 3.20688102e+02 3.25016422e+02 3.29403160e+02 + 3.33849107e+02 3.38355061e+02 3.42921831e+02 3.47550238e+02 3.52241116e+02 + 3.56995306e+02 3.61813663e+02 3.66697053e+02 3.71646355e+02 3.76662457e+02 + 3.81746261e+02 3.86898681e+02 3.92120643e+02 3.97413086e+02 4.02776961e+02 + 4.08213232e+02 4.13722877e+02 4.19306884e+02 4.24966259e+02 4.30702019e+02 + 4.36515194e+02 4.42406829e+02 4.48377983e+02 4.54429730e+02 4.60563157e+02 + 4.66779367e+02 4.73079477e+02 4.79464620e+02 4.85935942e+02 4.92494608e+02 + 4.99141796e+02 5.05878701e+02 5.12706534e+02 5.19626522e+02 5.26639909e+02 + 5.33747955e+02 5.40951938e+02 5.48253154e+02 5.55652913e+02 5.63152548e+02 + 5.70753404e+02 5.78456849e+02 5.86264268e+02 5.94177062e+02 6.02196656e+02 + 6.10324490e+02 6.18562025e+02 6.26910742e+02 6.35372141e+02 6.43947744e+02 + 6.52639091e+02 6.61447746e+02 6.70375290e+02 6.79423329e+02 6.88593490e+02 + 6.97887420e+02 7.07306790e+02 7.16853293e+02 7.26528644e+02 7.36334584e+02 + 7.46272874e+02 7.56345302e+02 7.66553676e+02 7.76899833e+02 7.87385631e+02 + 7.98012956e+02 8.08783718e+02 8.19699853e+02 8.30763322e+02 8.41976115e+02 + 8.53340247e+02 8.64857760e+02 8.76530724e+02 8.88361238e+02 9.00351429e+02 + 9.12503451e+02 9.24819488e+02 9.37301755e+02 9.49952494e+02 9.62773980e+02 + 9.75768518e+02 9.88938442e+02 1.00228612e+03 1.01581395e+03 1.02952437e+03 + 1.04341984e+03 1.05750285e+03 1.07177594e+03 1.08624167e+03 1.10090265e+03 + 1.11576151e+03 1.13082091e+03 1.14608358e+03 1.16155224e+03 1.17722968e+03 + 1.19311872e+03 1.20922222e+03 1.22554306e+03 1.24208419e+03 1.25884857e+03 + 1.27583922e+03 1.29305919e+03 1.31051158e+03 1.32819952e+03 1.34612620e+03 + 1.36429483e+03 1.38270869e+03 1.40137107e+03 1.42028535e+03 1.43945490e+03 + 1.45888319e+03 1.47857370e+03 1.49852998e+03 1.51875560e+03 1.53925421e+03 + 1.56002949e+03 1.58108517e+03 1.60242504e+03 1.62405293e+03 1.64597273e+03 + 1.66818839e+03 1.69070388e+03 1.71352328e+03 1.73665066e+03 1.76009019e+03 + 1.78384609e+03 1.80792261e+03 1.83232410e+03 1.85705494e+03 1.88211956e+03 + 1.90752249e+03 1.93326827e+03 1.95936155e+03 1.98580700e+03 2.01260939e+03 + 2.03977353e+03 2.06730431e+03 2.09520667e+03 2.12348562e+03 2.15214626e+03 + 2.18119372e+03 2.21063324e+03 2.24047011e+03 2.27070968e+03 2.30135739e+03 + 2.33241876e+03 2.36389936e+03 2.39580485e+03 2.42814097e+03 2.46091353e+03 + 2.49412842e+03 2.52779162e+03 2.56190916e+03 2.59648719e+03 2.63153191e+03 + 2.66704964e+03 2.70304674e+03 2.73952970e+03 2.77650507e+03 2.81397949e+03 + 2.85195970e+03 2.89045253e+03 2.92946490e+03 2.96900382e+03 3.00907640e+03 + 3.04968983e+03 3.09085142e+03 3.13256857e+03 3.17484877e+03 3.21769963e+03 + 3.26112884e+03 3.30514422e+03 3.34975367e+03 3.39496522e+03 3.44078698e+03 + 3.48722720e+03 3.53429423e+03 3.58199651e+03 3.63034263e+03 3.67934128e+03 + 3.72900126e+03 3.77933150e+03 3.83034105e+03 3.88203907e+03 3.93443486e+03 + 3.98753784e+03 4.04135754e+03 4.09590365e+03 4.15118596e+03 4.20721442e+03 + 4.26399909e+03 4.32155018e+03 4.37987804e+03 4.43899315e+03 4.49890614e+03 + 4.55962777e+03 4.62116895e+03 4.68354076e+03 4.74675440e+03 4.81082123e+03 + 4.87575277e+03 4.94156069e+03 5.00825682e+03 5.07585314e+03 5.14436181e+03 + 5.21379514e+03 5.28416561e+03 5.35548586e+03 5.42776873e+03 5.50102719e+03 + 5.57527443e+03 5.65052377e+03 5.72678876e+03 5.80408309e+03 5.88242066e+03 + 5.96181555e+03 6.04228203e+03 6.12383457e+03 6.20648782e+03 6.29025664e+03 + 6.37515608e+03 6.46120141e+03 6.54840809e+03 6.63679180e+03 6.72636842e+03 + 6.81715406e+03 6.90916502e+03 7.00241786e+03 7.09692932e+03 7.19271641e+03 + 7.28979633e+03 7.38818654e+03 7.48790472e+03 7.58896879e+03 7.69139692e+03 + 7.79520752e+03 7.90041925e+03 8.00705102e+03 8.11512200e+03 8.22465161e+03 + 8.33565953e+03 8.44816573e+03 8.56219042e+03 8.67775410e+03 8.79487754e+03 + 8.91358179e+03 9.03388820e+03 9.15581837e+03 9.27939423e+03 9.40463799e+03 + 9.53157217e+03 9.66021957e+03 9.79060332e+03 9.92274686e+03 1.00566739e+04 + 1.01924086e+04 1.03299753e+04 1.04693988e+04 1.06107040e+04 1.07539164e+04 + 1.08990618e+04 1.10461661e+04 1.11952560e+04 1.13463581e+04 1.14994996e+04 + 1.16547081e+04 1.18120114e+04 1.19714378e+04 1.21330160e+04 1.22967751e+04 + 1.24627443e+04 1.26309537e+04 1.28014334e+04 1.29742140e+04 1.31493267e+04 + 1.33268028e+04 1.35066744e+04 1.36889736e+04 1.38737334e+04 1.40609868e+04 + 1.42507676e+04 1.44431099e+04 1.46380482e+04 1.48356176e+04 1.50358536e+04 + 1.52387922e+04 1.54444698e+04 1.56529234e+04 1.58641905e+04 1.60783091e+04 + 1.62953177e+04 1.65152552e+04 1.67381612e+04 1.69640758e+04 1.71930395e+04 + 1.74250936e+04 1.76602796e+04 1.78986400e+04 1.81402175e+04 1.83850556e+04 + 1.86331983e+04 1.88846901e+04 1.91395763e+04 1.93979027e+04 1.96597157e+04 + 1.99250625e+04 2.01939905e+04 2.04665484e+04 2.07427849e+04 2.10227497e+04 + 2.13064933e+04 2.15940665e+04 2.18855211e+04 2.21809095e+04 2.24802847e+04 + 2.27837006e+04 2.30912116e+04 2.34028732e+04 2.37187412e+04 2.40388725e+04 + 2.43633245e+04 2.46921558e+04 2.50254252e+04 2.53631928e+04 2.57055192e+04 + 2.60524660e+04 2.64040955e+04 2.67604709e+04 2.71216563e+04 2.74877167e+04 + 2.78587178e+04 2.82347262e+04 2.86158096e+04 2.90020365e+04 2.93934763e+04 + 2.97901994e+04 3.01922770e+04 3.05997814e+04 3.10127860e+04 3.14313648e+04 + 3.18555932e+04 3.22855473e+04 3.27213046e+04 3.31629433e+04 3.36105427e+04 + 3.40641834e+04 3.45239469e+04 3.49899158e+04 3.54621738e+04 3.59408060e+04 + 3.64258982e+04 3.69175376e+04 3.74158128e+04 3.79208131e+04 3.84326294e+04 + 3.89513537e+04 3.94770792e+04 4.00099004e+04 4.05499131e+04 4.10972143e+04 + 4.16519024e+04 4.22140771e+04 4.27838395e+04 4.33612920e+04 4.39465383e+04 + 4.45396837e+04 4.51408347e+04 4.57500995e+04 4.63675875e+04 4.69934097e+04 + 4.76276787e+04 4.82705083e+04 4.89220142e+04 4.95823135e+04 5.02515248e+04 + 5.09297684e+04 5.16171663e+04 5.23138419e+04 5.30199206e+04 5.37355292e+04 + 5.44607964e+04 5.51958524e+04 5.59408296e+04 5.66958616e+04 5.74610843e+04 + 5.82366352e+04 5.90226537e+04 5.98192810e+04 6.06266604e+04 6.14449370e+04 + 6.22742579e+04 6.31147720e+04 6.39666306e+04 6.48299867e+04 6.57049955e+04 + 6.65918142e+04 6.74906024e+04 6.84015214e+04 6.93247351e+04 7.02604094e+04 + 7.12087125e+04 7.21698148e+04 7.31438891e+04 7.41311104e+04 7.51316562e+04 + 7.61457064e+04 7.71734432e+04 7.82150513e+04 7.92707180e+04 8.03406330e+04 + 8.14249886e+04 8.25239797e+04 8.36378039e+04 8.47666613e+04 8.59107549e+04 + 8.70702904e+04 8.82454760e+04 8.94365231e+04 9.06436457e+04 9.18670608e+04 + 9.31069884e+04 9.43636512e+04 9.56372751e+04 9.69280891e+04 9.82363252e+04 + 9.95622186e+04 1.00906007e+05 1.02267933e+05 1.03648241e+05 1.05047179e+05 + 1.06464998e+05 1.07901954e+05 1.09358304e+05 1.10834311e+05 1.12330239e+05 + 1.13846357e+05 1.15382939e+05 1.16940259e+05 1.18518599e+05 1.20118242e+05 + 1.21739475e+05 1.23382590e+05 1.25047882e+05 1.26735650e+05 1.28446198e+05 + 1.30179833e+05 1.31936867e+05 1.33717616e+05 1.35522400e+05 1.37351542e+05 + 1.39205373e+05 1.41084224e+05 1.42988435e+05 1.44918346e+05 1.46874306e+05 + 1.48856665e+05 1.50865780e+05 1.52902011e+05 1.54965726e+05 1.57057295e+05 + 1.59177094e+05 1.61325503e+05 1.63502909e+05 1.65709704e+05 1.67946284e+05 + 1.70213051e+05 1.72510413e+05 1.74838782e+05 1.77198577e+05 1.79590222e+05 + 1.82014146e+05 1.84470787e+05 1.86960585e+05 1.89483987e+05 1.92041448e+05 + 1.94633427e+05 1.97260390e+05 1.99922809e+05 2.02621162e+05 2.05355935e+05 + 2.08127619e+05 2.10936713e+05 2.13783721e+05 2.16669154e+05 2.19593533e+05 + 2.22557381e+05 2.25561233e+05 2.28605628e+05 2.31691112e+05 2.34818242e+05 + 2.37987578e+05 2.41199691e+05 2.44455157e+05 2.47754563e+05 2.51098500e+05 + 2.54487570e+05 2.57922383e+05 2.61403555e+05 2.64931713e+05 2.68507490e+05 + 2.72131529e+05 2.75804482e+05 2.79527008e+05 2.83299778e+05 2.87123468e+05 + 2.90998767e+05 2.94926370e+05 2.98906984e+05 3.02941325e+05 3.07030117e+05 + 3.11174095e+05 3.15374004e+05 3.19630600e+05 3.23944646e+05 3.28316919e+05 + 3.32748205e+05 3.37239300e+05 3.41791010e+05 3.46404155e+05 3.51079564e+05 + 3.55818077e+05 3.60620545e+05 3.65487832e+05 3.70420812e+05 3.75420373e+05 + 3.80487413e+05 3.85622842e+05 3.90827585e+05 3.96102575e+05 4.01448762e+05 + 4.06867107e+05 4.12358582e+05 4.17924176e+05 4.23564889e+05 4.29281734e+05 + 4.35075740e+05 4.40947946e+05 4.46899410e+05 4.52931201e+05 4.59044403e+05 + 4.65240114e+05 4.71519449e+05 4.77883536e+05 4.84333518e+05 4.90870556e+05 + 4.97495824e+05 5.04210514e+05 5.11015831e+05 5.17912999e+05 5.24903259e+05 + 5.31987866e+05 5.39168093e+05 5.46445232e+05 5.53820590e+05 5.61295494e+05 + 5.68871286e+05 5.76549328e+05 5.84331000e+05 5.92217702e+05 6.00210850e+05 + 6.08311882e+05 6.16522253e+05 6.24843439e+05 6.33276936e+05 6.41824259e+05 + 6.50486946e+05 6.59266553e+05 6.68164658e+05 6.77182860e+05 6.86322781e+05 + 6.95586064e+05 7.04974372e+05 7.14489394e+05 7.24132841e+05 7.33906444e+05 + 7.43811962e+05 7.53851175e+05 7.64025886e+05 7.74337925e+05 7.84789146e+05 + 7.95381426e+05 8.06116670e+05 8.16996808e+05 8.28023794e+05 8.39199611e+05 + 8.50526269e+05 8.62005801e+05 8.73640273e+05 8.85431775e+05 8.97382427e+05 + 9.09494376e+05 9.21769800e+05 9.34210905e+05 9.46819927e+05 9.59599133e+05 + 9.72550820e+05 9.85677315e+05 9.98980978e+05 1.01246420e+06 1.02612941e+06 + 1.03997905e+06 1.05401562e+06 1.06824165e+06 1.08265968e+06 1.09727231e+06 + 1.11208217e+06 1.12709191e+06 1.14230425e+06 1.15772190e+06 1.17334765e+06 + 1.18918429e+06 1.20523468e+06 1.22150171e+06 1.23798829e+06 1.25469738e+06 + 1.27163201e+06 1.28879519e+06 1.30619003e+06 1.32381965e+06 1.34168721e+06 + 1.35979593e+06 1.37814906e+06 1.39674991e+06 1.41560181e+06 1.43470815e+06 + 1.45407237e+06 1.47369795e+06 1.49358842e+06 1.51374735e+06 1.53417836e+06 + 1.55488513e+06 1.57587137e+06 1.59714087e+06 1.61869744e+06 1.64054497e+06 + 1.66268736e+06 1.68512861e+06 1.70787275e+06 1.73092387e+06 1.75428611e+06 + 1.77796367e+06 1.80196080e+06 1.82628182e+06 1.85093111e+06 1.87591308e+06 + 1.90123223e+06 1.92689312e+06 1.95290035e+06 1.97925860e+06 2.00597261e+06 + 2.03304717e+06 2.06048716e+06 2.08829750e+06 2.11648321e+06 2.14504933e+06 + 2.17400101e+06 2.20334345e+06 2.23308192e+06 2.26322178e+06 2.29376843e+06 + 2.32472736e+06 2.35610415e+06 2.38790444e+06 2.42013393e+06 2.45279842e+06 + 2.48590378e+06 2.51945596e+06 2.55346100e+06 2.58792500e+06 2.62285416e+06 + 2.65825476e+06 2.69413316e+06 2.73049582e+06 2.76734925e+06 2.80470010e+06 + 2.84255507e+06 2.88092097e+06 2.91980469e+06 2.95921322e+06 2.99915365e+06 + 1.51514411e-06 1.53559398e-06 1.55631985e-06 1.57732546e-06 1.59861459e-06 + 1.62019105e-06 1.64205873e-06 1.66422156e-06 1.68668352e-06 1.70944864e-06 + 1.73252103e-06 1.75590483e-06 1.77960423e-06 1.80362351e-06 1.82796697e-06 + 1.85263900e-06 1.87764402e-06 1.90298654e-06 1.92867110e-06 1.95470233e-06 + 1.98108490e-06 2.00782356e-06 2.03492310e-06 2.06238841e-06 2.09022442e-06 + 2.11843613e-06 2.14702861e-06 2.17600701e-06 2.20537652e-06 2.23514243e-06 + 2.26531010e-06 2.29588494e-06 2.32687244e-06 2.35827818e-06 2.39010781e-06 + 2.42236703e-06 2.45506166e-06 2.48819757e-06 2.52178072e-06 2.55581713e-06 + 2.59031293e-06 2.62527433e-06 2.66070759e-06 2.69661910e-06 2.73301530e-06 + 2.76990274e-06 2.80728805e-06 2.84517795e-06 2.88357925e-06 2.92249885e-06 + 2.96194375e-06 3.00192104e-06 3.04243789e-06 3.08350160e-06 3.12511955e-06 + 3.16729922e-06 3.21004818e-06 3.25337412e-06 3.29728483e-06 3.34178821e-06 + 3.38689225e-06 3.43260505e-06 3.47893484e-06 3.52588994e-06 3.57347879e-06 + 3.62170995e-06 3.67059208e-06 3.72013398e-06 3.77034453e-06 3.82123279e-06 + 3.87280787e-06 3.92507907e-06 3.97805577e-06 4.03174749e-06 4.08616389e-06 + 4.14131475e-06 4.19720997e-06 4.25385962e-06 4.31127386e-06 4.36946302e-06 + 4.42843756e-06 4.48820807e-06 4.54878531e-06 4.61018016e-06 4.67240365e-06 + 4.73546697e-06 4.79938146e-06 4.86415859e-06 4.92981003e-06 4.99634755e-06 + 5.06378314e-06 5.13212890e-06 5.20139712e-06 5.27160025e-06 5.34275092e-06 + 5.41486190e-06 5.48794616e-06 5.56201684e-06 5.63708725e-06 5.71317088e-06 + 5.79028141e-06 5.86843270e-06 5.94763880e-06 6.02791394e-06 6.10927255e-06 + 6.19172925e-06 6.27529887e-06 6.35999643e-06 6.44583715e-06 6.53283646e-06 + 6.62101000e-06 6.71037362e-06 6.80094337e-06 6.89273554e-06 6.98576663e-06 + 7.08005335e-06 7.17561266e-06 7.27246174e-06 7.37061798e-06 7.47009904e-06 + 7.57092278e-06 7.67310735e-06 7.77667110e-06 7.88163264e-06 7.98801085e-06 + 8.09582484e-06 8.20509399e-06 8.31583795e-06 8.42807662e-06 8.54183017e-06 + 8.65711905e-06 8.77396398e-06 8.89238596e-06 9.01240628e-06 9.13404651e-06 + 9.25732852e-06 9.38227446e-06 9.50890680e-06 9.63724829e-06 9.76732200e-06 + 9.89915131e-06 1.00327599e-05 1.01681718e-05 1.03054114e-05 1.04445033e-05 + 1.05854725e-05 1.07283444e-05 1.08731446e-05 1.10198992e-05 1.11686345e-05 + 1.13193773e-05 1.14721546e-05 1.16269940e-05 1.17839233e-05 1.19429706e-05 + 1.21041646e-05 1.22675342e-05 1.24331089e-05 1.26009182e-05 1.27709925e-05 + 1.29433623e-05 1.31180586e-05 1.32951127e-05 1.34745565e-05 1.36564223e-05 + 1.38407427e-05 1.40275509e-05 1.42168804e-05 1.44087653e-05 1.46032400e-05 + 1.48003396e-05 1.50000995e-05 1.52025554e-05 1.54077440e-05 1.56157019e-05 + 1.58264667e-05 1.60400761e-05 1.62565686e-05 1.64759832e-05 1.66983591e-05 + 1.69237365e-05 1.71521557e-05 1.73836580e-05 1.76182848e-05 1.78560784e-05 + 1.80970814e-05 1.83413373e-05 1.85888899e-05 1.88397837e-05 1.90940638e-05 + 1.93517759e-05 1.96129664e-05 1.98776821e-05 2.01459707e-05 2.04178804e-05 + 2.06934601e-05 2.09727592e-05 2.12558280e-05 2.15427174e-05 2.18334790e-05 + 2.21281649e-05 2.24268282e-05 2.27295226e-05 2.30363024e-05 2.33472229e-05 + 2.36623398e-05 2.39817098e-05 2.43053904e-05 2.46334396e-05 2.49659166e-05 + 2.53028810e-05 2.56443934e-05 2.59905151e-05 2.63413085e-05 2.66968365e-05 + 2.70571631e-05 2.74223530e-05 2.77924718e-05 2.81675861e-05 2.85477634e-05 + 2.89330718e-05 2.93235808e-05 2.97193605e-05 3.01204820e-05 3.05270174e-05 + 3.09390399e-05 3.13566233e-05 3.17798429e-05 3.22087747e-05 3.26434958e-05 + 3.30840843e-05 3.35306194e-05 3.39831813e-05 3.44418515e-05 3.49067124e-05 + 3.53778474e-05 3.58553414e-05 3.63392801e-05 3.68297505e-05 3.73268407e-05 + 3.78306402e-05 3.83412395e-05 3.88587303e-05 3.93832056e-05 3.99147598e-05 + 4.04534884e-05 4.09994881e-05 4.15528573e-05 4.21136952e-05 4.26821027e-05 + 4.32581821e-05 4.38420367e-05 4.44337716e-05 4.50334932e-05 4.56413092e-05 + 4.62573288e-05 4.68816629e-05 4.75144236e-05 4.81557246e-05 4.88056813e-05 + 4.94644104e-05 5.01320304e-05 5.08086612e-05 5.14944245e-05 5.21894435e-05 + 5.28938432e-05 5.36077501e-05 5.43312927e-05 5.50646008e-05 5.58078064e-05 + 5.65610431e-05 5.73244461e-05 5.80981528e-05 5.88823022e-05 5.96770352e-05 + 6.04824947e-05 6.12988255e-05 6.21261743e-05 6.29646898e-05 6.38145227e-05 + 6.46758258e-05 6.55487539e-05 6.64334638e-05 6.73301147e-05 6.82388677e-05 + 6.91598861e-05 7.00933354e-05 7.10393835e-05 7.19982003e-05 7.29699583e-05 + 7.39548321e-05 7.49529987e-05 7.59646376e-05 7.69899305e-05 7.80290617e-05 + 7.90822181e-05 8.01495889e-05 8.12313660e-05 8.23277438e-05 8.34389194e-05 + 8.45650925e-05 8.57064656e-05 8.68632437e-05 8.80356348e-05 8.92238497e-05 + 9.04281018e-05 9.16486078e-05 9.28855869e-05 9.41392614e-05 9.54098568e-05 + 9.66976013e-05 9.80027266e-05 9.93254670e-05 1.00666060e-04 1.02024748e-04 + 1.03401773e-04 1.04797385e-04 1.06211833e-04 1.07645371e-04 1.09098258e-04 + 1.10570755e-04 1.12063126e-04 1.13575639e-04 1.15108567e-04 1.16662184e-04 + 1.18236771e-04 1.19832610e-04 1.21449988e-04 1.23089195e-04 1.24750527e-04 + 1.26434282e-04 1.28140763e-04 1.29870275e-04 1.31623131e-04 1.33399646e-04 + 1.35200138e-04 1.37024931e-04 1.38874353e-04 1.40748737e-04 1.42648419e-04 + 1.44573741e-04 1.46525050e-04 1.48502695e-04 1.50507032e-04 1.52538422e-04 + 1.54597229e-04 1.56683824e-04 1.58798582e-04 1.60941883e-04 1.63114112e-04 + 1.65315659e-04 1.67546920e-04 1.69808297e-04 1.72100196e-04 1.74423028e-04 + 1.76777212e-04 1.79163169e-04 1.81581330e-04 1.84032129e-04 1.86516007e-04 + 1.89033409e-04 1.91584788e-04 1.94170603e-04 1.96791319e-04 1.99447407e-04 + 2.02139344e-04 2.04867614e-04 2.07632707e-04 2.10435121e-04 2.13275359e-04 + 2.16153931e-04 2.19071356e-04 2.22028156e-04 2.25024865e-04 2.28062020e-04 + 2.31140168e-04 2.34259861e-04 2.37421661e-04 2.40626136e-04 2.43873861e-04 + 2.47165421e-04 2.50501406e-04 2.53882418e-04 2.57309063e-04 2.60781957e-04 + 2.64301725e-04 2.67868999e-04 2.71484421e-04 2.75148639e-04 2.78862314e-04 + 2.82626112e-04 2.86440710e-04 2.90306793e-04 2.94225057e-04 2.98196206e-04 + 3.02220953e-04 3.06300022e-04 3.10434146e-04 3.14624068e-04 3.18870542e-04 + 3.23174330e-04 3.27536206e-04 3.31956954e-04 3.36437370e-04 3.40978257e-04 + 3.45580432e-04 3.50244723e-04 3.54971968e-04 3.59763016e-04 3.64618729e-04 + 3.69539979e-04 3.74527651e-04 3.79582642e-04 3.84705860e-04 3.89898226e-04 + 3.95160673e-04 4.00494147e-04 4.05899607e-04 4.11378024e-04 4.16930384e-04 + 4.22557683e-04 4.28260934e-04 4.34041162e-04 4.39899405e-04 4.45836717e-04 + 4.51854164e-04 4.57952829e-04 4.64133808e-04 4.70398211e-04 4.76747164e-04 + 4.83181809e-04 4.89703302e-04 4.96312816e-04 5.03011539e-04 5.09800673e-04 + 5.16681441e-04 5.23655078e-04 5.30722838e-04 5.37885992e-04 5.45145826e-04 + 5.52503646e-04 5.59960775e-04 5.67518552e-04 5.75178336e-04 5.82941505e-04 + 5.90809452e-04 5.98783593e-04 6.06865361e-04 6.15056208e-04 6.23357607e-04 + 6.31771050e-04 6.40298049e-04 6.48940137e-04 6.57698866e-04 6.66575812e-04 + 6.75572570e-04 6.84690757e-04 6.93932012e-04 7.03297995e-04 7.12790392e-04 + 7.22410907e-04 7.32161269e-04 7.42043233e-04 7.52058572e-04 7.62209089e-04 + 7.72496607e-04 7.82922975e-04 7.93490068e-04 8.04199785e-04 8.15054050e-04 + 8.26054815e-04 8.37204057e-04 8.48503780e-04 8.59956016e-04 8.71562821e-04 + 8.83326284e-04 8.95248518e-04 9.07331666e-04 9.19577900e-04 9.31989421e-04 + 9.44568460e-04 9.57317278e-04 9.70238166e-04 9.83333448e-04 9.96605476e-04 + 1.01005664e-03 1.02368935e-03 1.03750606e-03 1.05150925e-03 1.06570145e-03 + 1.08008519e-03 1.09466308e-03 1.10943772e-03 1.12441177e-03 1.13958793e-03 + 1.15496892e-03 1.17055751e-03 1.18635650e-03 1.20236872e-03 1.21859707e-03 + 1.23504444e-03 1.25171381e-03 1.26860816e-03 1.28573053e-03 1.30308401e-03 + 1.32067170e-03 1.33849678e-03 1.35656243e-03 1.37487193e-03 1.39342854e-03 + 1.41223561e-03 1.43129652e-03 1.45061470e-03 1.47019361e-03 1.49003678e-03 + 1.51014777e-03 1.53053020e-03 1.55118773e-03 1.57212407e-03 1.59334299e-03 + 1.61484830e-03 1.63664387e-03 1.65873361e-03 1.68112150e-03 1.70381156e-03 + 1.72680786e-03 1.75011455e-03 1.77373580e-03 1.79767587e-03 1.82193906e-03 + 1.84652973e-03 1.87145230e-03 1.89671124e-03 1.92231111e-03 1.94825650e-03 + 1.97455207e-03 2.00120255e-03 2.02821273e-03 2.05558747e-03 2.08333169e-03 + 2.11145037e-03 2.13994856e-03 2.16883140e-03 2.19810406e-03 2.22777182e-03 + 2.25784000e-03 2.28831402e-03 2.31919934e-03 2.35050151e-03 2.38222618e-03 + 2.41437903e-03 2.44696584e-03 2.47999248e-03 2.51346488e-03 2.54738906e-03 + 2.58177111e-03 2.61661721e-03 2.65193363e-03 2.68772672e-03 2.72400290e-03 + 2.76076870e-03 2.79803073e-03 2.83579568e-03 2.87407035e-03 2.91286161e-03 + 2.95217643e-03 2.99202189e-03 3.03240514e-03 3.07333344e-03 3.11481415e-03 + 3.15685472e-03 3.19946271e-03 3.24264578e-03 3.28641170e-03 3.33076832e-03 + 3.37572362e-03 3.42128568e-03 3.46746269e-03 3.51426295e-03 3.56169487e-03 + 3.60976698e-03 3.65848792e-03 3.70786645e-03 3.75791143e-03 3.80863187e-03 + 3.86003689e-03 3.91213571e-03 3.96493772e-03 4.01845239e-03 4.07268934e-03 + 4.12765833e-03 4.18336924e-03 4.23983207e-03 4.29705699e-03 4.35505426e-03 + 4.41383433e-03 4.47340774e-03 4.53378522e-03 4.59497761e-03 4.65699591e-03 + 4.71985128e-03 4.78355500e-03 4.84811852e-03 4.91355347e-03 4.97987158e-03 + 5.04708479e-03 5.11520517e-03 5.18424497e-03 5.25421660e-03 5.32513264e-03 + 5.39700583e-03 5.46984909e-03 5.54367551e-03 5.61849837e-03 5.69433110e-03 + 5.77118736e-03 5.84908093e-03 5.92802584e-03 6.00803626e-03 6.08912659e-03 + 6.17131138e-03 6.25460542e-03 6.33902369e-03 6.42458134e-03 6.51129376e-03 + 6.59917653e-03 6.68824546e-03 6.77851655e-03 6.87000603e-03 6.96273034e-03 + 7.05670614e-03 7.15195034e-03 7.24848004e-03 7.34631260e-03 7.44546561e-03 + 7.54595688e-03 7.64780448e-03 7.75102672e-03 7.85564214e-03 7.96166955e-03 + 8.06912802e-03 8.17803685e-03 8.28841561e-03 8.40028416e-03 8.51366260e-03 + 8.62857130e-03 8.74503092e-03 8.86306239e-03 8.98268694e-03 9.10392605e-03 + 9.22680152e-03 9.35133544e-03 9.47755019e-03 9.60546846e-03 9.73511324e-03 + 9.86650783e-03 9.99967585e-03 1.01346412e-02 1.02714283e-02 1.04100615e-02 + 1.05505658e-02 1.06929666e-02 1.08372893e-02 1.09835599e-02 1.11318048e-02 + 1.12820505e-02 1.14343240e-02 1.15886528e-02 1.17450646e-02 1.19035875e-02 + 1.20642499e-02 1.22270808e-02 1.23921094e-02 1.25593654e-02 1.27288789e-02 + 1.29006802e-02 1.30748004e-02 1.32512707e-02 1.34301228e-02 1.36113888e-02 + 1.37951014e-02 1.39812936e-02 1.41699987e-02 1.43612509e-02 1.45550843e-02 + 1.47515340e-02 1.49506351e-02 1.51524234e-02 1.53569353e-02 1.55642075e-02 + 1.57742773e-02 1.59871823e-02 1.62029609e-02 1.64216519e-02 1.66432945e-02 + 1.68679287e-02 1.70955947e-02 1.73263336e-02 1.75601867e-02 1.77971961e-02 + 1.80374044e-02 1.82808548e-02 1.85275911e-02 1.87776576e-02 1.90310992e-02 + 1.92879614e-02 1.95482906e-02 1.98121334e-02 2.00795373e-02 2.03505503e-02 + 2.06252212e-02 2.09035994e-02 2.11857347e-02 2.14716781e-02 2.17614808e-02 + 2.20551950e-02 2.23528734e-02 2.26545697e-02 2.29603378e-02 2.32702330e-02 + 2.35843107e-02 2.39026276e-02 2.42252408e-02 2.45522083e-02 2.48835889e-02 + 2.52194421e-02 2.55598283e-02 2.59048087e-02 2.62544453e-02 2.66088009e-02 + 2.69679393e-02 2.73319249e-02 2.77008232e-02 2.80747006e-02 2.84536242e-02 + 2.88376620e-02 2.92268833e-02 2.96213578e-02 3.00211566e-02 3.04263514e-02 + 3.08370152e-02 3.12532216e-02 3.16750456e-02 3.21025629e-02 3.25358505e-02 + 3.29749861e-02 3.34200487e-02 3.38711183e-02 3.43282759e-02 3.47916039e-02 + 3.52611853e-02 3.57371047e-02 3.62194475e-02 3.67083006e-02 3.72037516e-02 + 3.77058898e-02 3.82148053e-02 3.87305896e-02 3.92533354e-02 3.97831368e-02 + 4.03200888e-02 4.08642881e-02 4.14158324e-02 4.19748209e-02 4.25413541e-02 + 4.31155337e-02 4.36974630e-02 4.42872467e-02 4.48849906e-02 4.54908022e-02 + 4.61047905e-02 4.67270657e-02 4.73577398e-02 4.79969261e-02 4.86447395e-02 + 4.93012964e-02 4.99667148e-02 5.06411144e-02 5.13246163e-02 5.20173434e-02 + 5.27194202e-02 5.34309730e-02 5.41521296e-02 5.48830196e-02 5.56237744e-02 + 5.63745271e-02 5.71354128e-02 5.79065681e-02 5.86881317e-02 5.94802440e-02 + 6.02830474e-02 6.10966863e-02 6.19213068e-02 6.27570572e-02 6.36040877e-02 + 6.44625506e-02 6.53326001e-02 6.62143926e-02 6.71080867e-02 6.80138429e-02 + 6.89318241e-02 6.98621953e-02 7.08051237e-02 7.17607788e-02 7.27293323e-02 + 7.37109584e-02 7.47058334e-02 7.57141363e-02 7.67360482e-02 7.77717528e-02 + 7.88214363e-02 7.98852873e-02 8.09634971e-02 8.20562595e-02 8.31637709e-02 + 8.42862303e-02 8.54238396e-02 8.65768031e-02 8.77453282e-02 8.89296248e-02 + 9.01299058e-02 9.13463870e-02 9.25792870e-02 9.38288274e-02 9.50952329e-02 + 9.63787310e-02 9.76795524e-02 9.89979310e-02 1.00334104e-01 1.01688311e-01 + 1.03060795e-01 1.04451805e-01 1.05861588e-01 1.07290399e-01 1.08738495e-01 + 1.10206136e-01 1.11693586e-01 1.13201111e-01 1.14728984e-01 1.16277479e-01 + 1.17846873e-01 1.19437449e-01 1.21049494e-01 1.22683296e-01 1.24339149e-01 + 1.26017352e-01 1.27718205e-01 1.29442015e-01 1.31189090e-01 1.32959747e-01 + 1.34754301e-01 1.36573077e-01 1.38416400e-01 1.40284603e-01 1.42178021e-01 + 1.44096994e-01 1.46041868e-01 1.48012992e-01 1.50010719e-01 1.52035411e-01 + 1.54087429e-01 1.56167143e-01 1.58274927e-01 1.60411160e-01 1.62576226e-01 + 1.64770513e-01 1.66994417e-01 1.69248337e-01 1.71532678e-01 1.73847850e-01 + 1.76194270e-01 1.78572360e-01 1.80982547e-01 1.83425264e-01 1.85900951e-01 + 1.88410051e-01 1.90953017e-01 1.93530306e-01 1.96142380e-01 1.98789709e-01 + 2.01472769e-01 2.04192042e-01 2.06948017e-01 2.09741189e-01 2.12572061e-01 + 2.15441141e-01 2.18348945e-01 2.21295996e-01 2.24282822e-01 2.27309962e-01 + 2.30377959e-01 2.33487365e-01 2.36638739e-01 2.39832646e-01 2.43069662e-01 + 2.46350367e-01 2.49675352e-01 2.53045214e-01 2.56460560e-01 2.59922002e-01 + 2.63430163e-01 2.66985673e-01 2.70589173e-01 2.74241308e-01 2.77942737e-01 + 2.81694123e-01 2.85496142e-01 2.89349477e-01 2.93254820e-01 2.97212873e-01 + 3.01224348e-01 3.05289966e-01 3.09410457e-01 3.13586563e-01 3.17819033e-01 + 3.22108629e-01 3.26456121e-01 3.30862292e-01 3.35327932e-01 3.39853846e-01 + 3.44440845e-01 3.49089755e-01 3.53801411e-01 3.58576660e-01 3.63416361e-01 + 3.68321383e-01 3.73292608e-01 3.78330929e-01 3.83437252e-01 3.88612496e-01 + 3.93857590e-01 3.99173476e-01 4.04561111e-01 4.10021463e-01 4.15555512e-01 + 4.21164255e-01 4.26848699e-01 4.32609866e-01 4.38448791e-01 4.44366524e-01 + 4.50364128e-01 4.56442682e-01 4.62603278e-01 4.68847024e-01 4.75175041e-01 + 4.81588467e-01 4.88088455e-01 4.94676173e-01 5.01352806e-01 5.08119553e-01 + 5.14977630e-01 5.21928271e-01 5.28972724e-01 5.36112257e-01 5.43348151e-01 + 5.50681708e-01 5.58114246e-01 5.65647101e-01 5.73281626e-01 5.81019194e-01 + 5.88861197e-01 5.96809042e-01 6.04864160e-01 6.13027997e-01 6.21302021e-01 + 6.29687720e-01 6.38186600e-01 6.46800189e-01 6.55530036e-01 6.64377709e-01 + 6.73344799e-01 6.82432918e-01 6.91643699e-01 7.00978797e-01 7.10439891e-01 + 7.20028682e-01 7.29746892e-01 7.39596268e-01 7.49578581e-01 7.59695625e-01 + 7.69949219e-01 7.80341205e-01 7.90873452e-01 8.01547852e-01 8.12366325e-01 + 8.23330813e-01 8.34443290e-01 8.45705751e-01 8.57120221e-01 8.68688753e-01 + 8.80413424e-01 8.92296343e-01 9.04339645e-01 9.16545496e-01 9.28916089e-01 + 9.41453647e-01 9.54160425e-01 9.67038705e-01 9.80090803e-01 9.93319066e-01 + 1.00672587e+00 1.02031362e+00 1.03408477e+00 1.04804179e+00 1.06218719e+00 + 1.07652350e+00 1.09105331e+00 1.10577923e+00 1.12070391e+00 1.13583002e+00 + 1.15116029e+00 1.16669748e+00 1.18244437e+00 1.19840379e+00 1.21457862e+00 + 1.23097175e+00 1.24758615e+00 1.26442479e+00 1.28149070e+00 1.29878695e+00 + 1.31631665e+00 1.33408294e+00 1.35208903e+00 1.37033814e+00 1.38883356e+00 + 1.40757862e+00 1.42657667e+00 1.44583114e+00 1.46534549e+00 1.48512323e+00 + 1.50516790e+00 1.52548311e+00 1.54607252e+00 1.56693983e+00 1.58808878e+00 + 1.60952317e+00 1.63124687e+00 1.65326377e+00 1.67557783e+00 1.69819306e+00 + 1.72111354e+00 1.74434336e+00 1.76788672e+00 1.79174785e+00 1.81593103e+00 + 1.84044061e+00 1.86528099e+00 1.89045664e+00 1.91597209e+00 1.94183192e+00 + 1.96804078e+00 1.99460338e+00 2.02152449e+00 2.04880896e+00 2.07646169e+00 + 2.10448764e+00 2.13289186e+00 2.16167945e+00 2.19085559e+00 2.22042551e+00 + 2.25039454e+00 2.28076806e+00 2.31155154e+00 2.34275049e+00 2.37437054e+00 + 2.40641736e+00 2.43889672e+00 2.47181445e+00 2.50517647e+00 2.53898878e+00 + 2.57325745e+00 2.60798864e+00 2.64318860e+00 2.67886366e+00 2.71502022e+00 + 2.75166478e+00 2.78880393e+00 2.82644435e+00 2.86459281e+00 2.90325615e+00 + 2.94244133e+00 2.98215539e+00 3.02240547e+00 3.06319880e+00 3.10454272e+00 + 3.14644466e+00 3.18891215e+00 3.23195282e+00 3.27557441e+00 3.31978476e+00 + 3.36459182e+00 3.41000363e+00 3.45602837e+00 3.50267430e+00 3.54994981e+00 + 3.59786340e+00 3.64642368e+00 3.69563937e+00 3.74551933e+00 3.79607251e+00 + 3.84730801e+00 3.89923504e+00 3.95186292e+00 4.00520112e+00 4.05925923e+00 + 4.11404695e+00 4.16957414e+00 4.22585079e+00 4.28288699e+00 4.34069302e+00 + 4.39927925e+00 4.45865622e+00 4.51883459e+00 4.57982520e+00 4.64163899e+00 + 4.70428708e+00 4.76778073e+00 4.83213135e+00 4.89735051e+00 4.96344994e+00 + 5.03044150e+00 5.09833725e+00 5.16714939e+00 5.23689028e+00 5.30757246e+00 + 5.37920864e+00 5.45181169e+00 5.52539466e+00 5.59997078e+00 5.67555346e+00 + 5.75215627e+00 5.82979298e+00 5.90847756e+00 5.98822414e+00 6.06904706e+00 + 6.15096084e+00 6.23398021e+00 6.31812010e+00 6.40339561e+00 6.48982209e+00 + 6.57741507e+00 6.66619028e+00 6.75616369e+00 6.84735147e+00 6.93977001e+00 + 7.03343592e+00 7.12836604e+00 7.22457742e+00 7.32208737e+00 7.42091341e+00 + 7.52107330e+00 7.62258505e+00 7.72546690e+00 7.82973734e+00 7.93541512e+00 + 8.04251923e+00 8.15106892e+00 8.26108370e+00 8.37258335e+00 8.48558791e+00 + 8.60011769e+00 8.71619327e+00 8.83383553e+00 8.95306559e+00 9.07390491e+00 + 9.19637518e+00 9.32049844e+00 9.44629699e+00 9.57379343e+00 9.70301069e+00 + 9.83397200e+00 9.96670088e+00 1.01012212e+01 1.02375571e+01 1.03757332e+01 + 1.05157742e+01 1.06577054e+01 1.08015522e+01 1.09473405e+01 1.10950965e+01 + 1.12448467e+01 1.13966182e+01 1.15504380e+01 1.17063340e+01 1.18643341e+01 + 1.20244668e+01 1.21867607e+01 1.23512451e+01 1.25179496e+01 1.26869041e+01 + 1.28581389e+01 1.30316849e+01 1.32075732e+01 1.33858355e+01 1.35665038e+01 + 1.37496106e+01 1.39351888e+01 1.41232717e+01 1.43138932e+01 1.45070874e+01 + 1.47028892e+01 1.49013338e+01 1.51024567e+01 1.53062942e+01 1.55128829e+01 + 1.57222599e+01 1.59344629e+01 1.61495300e+01 1.63674998e+01 1.65884115e+01 + 1.68123049e+01 1.70392202e+01 1.72691982e+01 1.75022801e+01 1.77385080e+01 + 1.79779242e+01 1.82205718e+01 1.84664944e+01 1.87157363e+01 1.89683421e+01 + 1.92243574e+01 1.94838281e+01 1.97468008e+01 2.00133229e+01 2.02834423e+01 + 2.05572074e+01 2.08346676e+01 2.11158726e+01 2.14008730e+01 2.16897201e+01 + 2.19824657e+01 2.22791625e+01 2.25798639e+01 2.28846237e+01 2.31934970e+01 + 2.35065390e+01 2.38238062e+01 2.41453556e+01 2.44712449e+01 2.48015327e+01 + 2.51362784e+01 2.54755421e+01 2.58193849e+01 2.61678685e+01 2.65210556e+01 + 2.68790097e+01 2.72417950e+01 2.76094769e+01 2.79821213e+01 2.83597954e+01 + 2.87425669e+01 2.91305046e+01 2.95236783e+01 2.99221587e+01 3.03260174e+01 + 3.07353269e+01 3.11501609e+01 3.15705939e+01 3.19967014e+01 3.24285601e+01 + 3.28662476e+01 3.33098426e+01 3.37594247e+01 3.42150749e+01 3.46768749e+01 + 3.51449079e+01 3.56192579e+01 3.61000102e+01 3.65872511e+01 3.70810684e+01 + 3.75815507e+01 3.80887880e+01 3.86028714e+01 3.91238935e+01 3.96519477e+01 + 4.01871291e+01 4.07295339e+01 4.12792594e+01 4.18364046e+01 4.24010695e+01 + 4.29733558e+01 4.35533661e+01 4.41412049e+01 4.47369777e+01 4.53407916e+01 + 4.59527552e+01 4.65729784e+01 4.72015728e+01 4.78386513e+01 4.84843284e+01 + 4.91387202e+01 4.98019444e+01 5.04741200e+01 5.11553680e+01 5.18458108e+01 + 5.25455725e+01 5.32547788e+01 5.39735573e+01 5.47020371e+01 5.54403492e+01 + 5.61886263e+01 5.69470028e+01 5.77156152e+01 5.84946015e+01 5.92841017e+01 + 6.00842578e+01 6.08952136e+01 6.17171149e+01 6.25501093e+01 6.33943466e+01 + 6.42499786e+01 6.51171590e+01 6.59960438e+01 6.68867908e+01 6.77895602e+01 + 6.87045143e+01 6.96318175e+01 7.05716365e+01 7.15241402e+01 7.24894998e+01 + 7.34678888e+01 7.44594832e+01 7.54644611e+01 7.64830031e+01 7.75152924e+01 + 7.85615144e+01 7.96218573e+01 8.06965116e+01 8.17856705e+01 8.28895297e+01 + 8.40082878e+01 8.51421456e+01 8.62913071e+01 8.74559788e+01 8.86363701e+01 + 8.98326931e+01 9.10451628e+01 9.22739972e+01 9.35194171e+01 9.47816465e+01 + 9.60609121e+01 9.73574439e+01 9.86714750e+01 1.00003242e+02 1.01352983e+02 + 1.02720942e+02 1.04107364e+02 1.05512498e+02 1.06936598e+02 1.08379919e+02 + 1.09842720e+02 1.11325265e+02 1.12827819e+02 1.14350653e+02 1.15894041e+02 + 1.17458261e+02 1.19043592e+02 1.20650320e+02 1.22278735e+02 1.23929128e+02 + 1.25601797e+02 1.27297041e+02 1.29015166e+02 1.30756481e+02 1.32521298e+02 + 1.34309935e+02 1.36122713e+02 1.37959958e+02 1.39822000e+02 1.41709174e+02 + 1.43621820e+02 1.45560280e+02 1.47524903e+02 1.49516044e+02 1.51534058e+02 + 1.53579310e+02 1.55652166e+02 1.57752999e+02 1.59882188e+02 1.62040114e+02 + 1.64227166e+02 1.66443736e+02 1.68690223e+02 1.70967031e+02 1.73274569e+02 + 1.75613251e+02 1.77983499e+02 1.80385738e+02 1.82820400e+02 1.85287923e+02 + 1.87788750e+02 1.90323330e+02 1.92892119e+02 1.95495580e+02 1.98134179e+02 + 2.00808391e+02 2.03518697e+02 2.06265584e+02 2.09049546e+02 2.11871083e+02 + 2.14730702e+02 2.17628917e+02 2.20566249e+02 2.23543226e+02 2.26560384e+02 + 2.29618264e+02 2.32717416e+02 2.35858398e+02 2.39041773e+02 2.42268114e+02 + 2.45538001e+02 2.48852022e+02 2.52210771e+02 2.55614854e+02 2.59064882e+02 + 2.62561474e+02 2.66105260e+02 2.69696877e+02 2.73336969e+02 2.77026192e+02 + 2.80765207e+02 2.84554689e+02 2.88395317e+02 2.92287781e+02 2.96232783e+02 + 3.00231029e+02 3.04283240e+02 3.08390144e+02 3.12552478e+02 3.16770992e+02 + 3.21046442e+02 3.25379599e+02 3.29771239e+02 3.34222154e+02 3.38733142e+02 + 3.43305015e+02 3.47938595e+02 3.52634714e+02 3.57394216e+02 3.62217957e+02 + 3.67106805e+02 3.72061636e+02 3.77083343e+02 3.82172828e+02 3.87331006e+02 + 3.92558803e+02 3.97857160e+02 4.03227029e+02 4.08669374e+02 4.14185175e+02 + 4.19775422e+02 4.25441121e+02 4.31183290e+02 4.37002961e+02 4.42901179e+02 + 4.48879006e+02 4.54937515e+02 4.61077796e+02 4.67300952e+02 4.73608102e+02 + 4.80000379e+02 4.86478933e+02 4.93044927e+02 4.99699543e+02 5.06443976e+02 + 5.13279438e+02 5.20207158e+02 5.27228382e+02 5.34344371e+02 5.41556404e+02 + 5.48865778e+02 5.56273806e+02 5.63781821e+02 5.71391170e+02 5.79103223e+02 + 5.86919366e+02 5.94841002e+02 6.02869557e+02 6.11006473e+02 6.19253213e+02 + 6.27611259e+02 6.36082113e+02 6.44667298e+02 6.53368357e+02 6.62186855e+02 + 6.71124375e+02 6.80182525e+02 6.89362932e+02 6.98667247e+02 7.08097142e+02 + 7.17654312e+02 7.27340476e+02 7.37157373e+02 7.47106768e+02 7.57190450e+02 + 7.67410232e+02 7.77767949e+02 7.88265465e+02 7.98904665e+02 8.09687462e+02 + 8.20615795e+02 8.31691626e+02 8.42916949e+02 8.54293779e+02 8.65824161e+02 + 8.77510169e+02 8.89353903e+02 9.01357492e+02 9.13523092e+02 9.25852892e+02 + 9.38349106e+02 9.51013982e+02 9.63849795e+02 9.76858852e+02 9.90043493e+02 + 1.00340609e+03 1.01694903e+03 1.03067477e+03 1.04458576e+03 1.05868451e+03 + 1.07297355e+03 1.08745545e+03 1.10213281e+03 1.11700827e+03 1.13208451e+03 + 1.14736422e+03 1.16285017e+03 1.17854513e+03 1.19445193e+03 1.21057342e+03 + 1.22691250e+03 1.24347211e+03 1.26025522e+03 1.27726485e+03 1.29450407e+03 + 1.31197596e+03 1.32968367e+03 1.34763038e+03 1.36581931e+03 1.38425374e+03 + 1.40293698e+03 1.42187239e+03 1.44106337e+03 1.46051336e+03 1.48022588e+03 + 1.50020445e+03 1.52045267e+03 1.54097419e+03 1.56177268e+03 1.58285189e+03 + 1.60421560e+03 1.62586766e+03 1.64781196e+03 1.67005244e+03 1.69259310e+03 + 1.71543799e+03 1.73859121e+03 1.76205693e+03 1.78583938e+03 1.80994281e+03 + 1.83437156e+03 1.85913003e+03 1.88422266e+03 1.90965397e+03 1.93542853e+03 + 1.96155096e+03 1.98802597e+03 2.01485831e+03 2.04205280e+03 2.06961434e+03 + 2.09754787e+03 2.12585843e+03 2.15455109e+03 2.18363101e+03 2.21310343e+03 + 2.24297363e+03 2.27324699e+03 2.30392895e+03 2.33502503e+03 2.36654081e+03 + 2.39848195e+03 2.43085420e+03 2.46366339e+03 2.49691539e+03 2.53061620e+03 + 2.56477187e+03 2.59938853e+03 2.63447242e+03 2.67002983e+03 2.70606716e+03 + 2.74259088e+03 2.77960756e+03 2.81712386e+03 2.85514651e+03 2.89368236e+03 + 2.93273832e+03 2.97232142e+03 3.01243877e+03 3.05309759e+03 3.09430517e+03 + 3.13606893e+03 3.17839638e+03 3.22129512e+03 3.26477287e+03 3.30883743e+03 + 3.35349673e+03 3.39875879e+03 3.44463176e+03 3.49112387e+03 3.53824349e+03 + 3.58599907e+03 3.63439922e+03 3.68345262e+03 3.73316809e+03 3.78355457e+03 + 3.83462112e+03 3.88637691e+03 3.93883124e+03 3.99199356e+03 4.04587340e+03 + 4.10048045e+03 4.15582454e+03 4.21191561e+03 4.26876373e+03 4.32637913e+03 + 4.38477217e+03 4.44395333e+03 4.50393327e+03 4.56472275e+03 4.62633270e+03 + 4.68877420e+03 4.75205848e+03 4.81619690e+03 4.88120099e+03 4.94708244e+03 + 5.01385310e+03 5.08152495e+03 5.15011018e+03 5.21962109e+03 5.29007019e+03 + 5.36147014e+03 5.43383378e+03 5.50717410e+03 5.58150430e+03 5.65683773e+03 + 5.73318793e+03 5.81056864e+03 5.88899374e+03 5.96847735e+03 6.04903375e+03 + 6.13067741e+03 6.21342302e+03 6.29728544e+03 6.38227975e+03 6.46842123e+03 + 6.55572536e+03 6.64420783e+03 6.73388454e+03 6.82477162e+03 6.91688540e+03 + 7.01024244e+03 7.10485951e+03 7.20075363e+03 7.29794203e+03 7.39644218e+03 + 7.49627178e+03 7.59744879e+03 7.69999137e+03 7.80391797e+03 7.90924727e+03 + 8.01599819e+03 8.12418992e+03 8.23384192e+03 8.34497389e+03 8.45760580e+03 + 8.57175791e+03 8.68745072e+03 8.80470504e+03 8.92354193e+03 9.04398276e+03 + 9.16604918e+03 9.28976313e+03 9.41514684e+03 9.54222285e+03 9.67101401e+03 + 9.80154345e+03 9.93383465e+03 1.00679114e+04 1.02037977e+04 1.03415182e+04 + 1.04810974e+04 1.06225605e+04 1.07659329e+04 1.09112405e+04 1.10585092e+04 + 1.12077657e+04 1.13590366e+04 1.15123493e+04 1.16677312e+04 1.18252103e+04 + 1.19848148e+04 1.21465736e+04 1.23105156e+04 1.24766704e+04 1.26450677e+04 + 1.28157379e+04 1.29887116e+04 1.31640199e+04 1.33416944e+04 1.35217669e+04 + 1.37042699e+04 1.38892361e+04 1.40766987e+04 1.42666916e+04 1.44592488e+04 + 1.46544049e+04 1.48521951e+04 1.50526548e+04 1.52558201e+04 1.54617276e+04 + 1.56704142e+04 1.58819174e+04 1.60962752e+04 1.63135263e+04 1.65337095e+04 + 1.67568646e+04 1.69830316e+04 1.72122512e+04 1.74445645e+04 1.76800134e+04 + 1.79186401e+04 1.81604876e+04 1.84055993e+04 1.86540192e+04 1.89057921e+04 + 1.91609631e+04 1.94195781e+04 1.96816837e+04 1.99473269e+04 2.02165555e+04 + 2.04894179e+04 2.07659631e+04 2.10462408e+04 2.13303014e+04 2.16181960e+04 + 2.19099763e+04 2.22056947e+04 2.25054044e+04 2.28091593e+04 2.31170140e+04 + 2.34290238e+04 2.37452448e+04 2.40657338e+04 2.43905484e+04 2.47197470e+04 + 2.50533889e+04 2.53915339e+04 2.57342428e+04 2.60815773e+04 2.64335997e+04 + 2.67903734e+04 2.71519624e+04 2.75184318e+04 2.78898474e+04 2.82662760e+04 + 2.86477853e+04 2.90344437e+04 2.94263209e+04 2.98234873e+04 3.02260142e+04 + 3.06339740e+04 3.10474400e+04 3.14664865e+04 3.18911890e+04 3.23216236e+04 + 3.27578678e+04 3.31999999e+04 3.36480995e+04 3.41022471e+04 3.45625243e+04 + 3.50290139e+04 3.55017997e+04 3.59809666e+04 3.64666009e+04 3.69587897e+04 + 3.74576216e+04 3.79631862e+04 3.84755745e+04 3.89948784e+04 3.95211913e+04 + 4.00546079e+04 4.05952240e+04 4.11431368e+04 4.16984447e+04 4.22612476e+04 + 4.28316467e+04 4.34097444e+04 4.39956447e+04 4.45894528e+04 4.51912756e+04 + 4.58012212e+04 4.64193992e+04 4.70459207e+04 4.76808984e+04 4.83244463e+04 + 4.89766802e+04 4.96377173e+04 5.03076764e+04 5.09866779e+04 5.16748439e+04 + 5.23722980e+04 5.30791657e+04 5.37955739e+04 5.45216515e+04 5.52575289e+04 + 5.60033385e+04 5.67592142e+04 5.75252919e+04 5.83017094e+04 5.90886062e+04 + 5.98861237e+04 6.06944053e+04 6.15135963e+04 6.23438438e+04 6.31852972e+04 + 6.40381076e+04 6.49024284e+04 6.57784150e+04 6.66662247e+04 6.75660171e+04 + 6.84779540e+04 6.94021994e+04 7.03389192e+04 7.12882819e+04 7.22504581e+04 + 7.32256209e+04 7.42139453e+04 7.52156092e+04 7.62307924e+04 7.72596776e+04 + 7.83024497e+04 7.93592960e+04 8.04304065e+04 8.15159738e+04 8.26161929e+04 + 8.37312617e+04 8.48613806e+04 8.60067526e+04 8.71675837e+04 8.83440825e+04 + 8.95364604e+04 9.07449319e+04 9.19697141e+04 9.32110271e+04 9.44690942e+04 + 9.57441413e+04 9.70363977e+04 9.83460956e+04 9.96734705e+04 1.01018761e+05 + 1.02382209e+05 1.03764059e+05 1.05164560e+05 1.06583964e+05 1.08022525e+05 + 1.09480502e+05 1.10958158e+05 1.12455758e+05 1.13973570e+05 1.15511869e+05 + 1.17070930e+05 1.18651033e+05 1.20252464e+05 1.21875508e+05 1.23520459e+05 + 1.25187612e+05 1.26877266e+05 1.28589725e+05 1.30325298e+05 1.32084295e+05 + 1.33867034e+05 1.35673834e+05 1.37505020e+05 1.39360922e+05 1.41241873e+05 + 1.43148212e+05 1.45080280e+05 1.47038425e+05 1.49022999e+05 1.51034359e+05 + 1.53072866e+05 1.55138887e+05 1.57232793e+05 1.59354960e+05 1.61505770e+05 + 1.63685609e+05 1.65894870e+05 1.68133949e+05 1.70403249e+05 1.72703178e+05 + 1.75034149e+05 1.77396580e+05 1.79790898e+05 1.82217531e+05 1.84676917e+05 + 1.87169497e+05 1.89695719e+05 1.92256038e+05 1.94850913e+05 1.97480811e+05 + 2.00146205e+05 2.02847573e+05 2.05585402e+05 2.08360183e+05 2.11172416e+05 + 2.14022605e+05 2.16911263e+05 2.19838909e+05 2.22806069e+05 2.25813278e+05 + 2.28861074e+05 2.31950007e+05 2.35080630e+05 2.38253508e+05 2.41469210e+05 + 2.44728314e+05 2.48031406e+05 2.51379080e+05 2.54771938e+05 2.58210588e+05 + 2.61695651e+05 2.65227751e+05 2.68807523e+05 2.72435612e+05 2.76112669e+05 + 2.79839355e+05 2.83616340e+05 2.87444303e+05 2.91323932e+05 2.95255924e+05 + 2.99240986e+05 3.03279835e+05 3.07373196e+05 3.11521804e+05 3.15726407e+05 + 3.19987758e+05 3.24306626e+05 3.28683784e+05 3.33120022e+05 3.37616135e+05 + 3.42172931e+05 3.46791231e+05 3.51471864e+05 3.56215672e+05 3.61023506e+05 + 3.65896232e+05 3.70834725e+05 3.75839872e+05 3.80912574e+05 3.86053742e+05 + 3.91264300e+05 3.96545185e+05 4.01897346e+05 4.07321745e+05 4.12819356e+05 + 4.18391169e+05 4.24038185e+05 4.29761418e+05 4.35561898e+05 4.41440667e+05 + 4.47398781e+05 4.53437311e+05 4.59557344e+05 4.65759979e+05 4.72046330e+05 + 4.78417528e+05 4.84874718e+05 4.91419060e+05 4.98051732e+05 5.04773924e+05 + 5.11586846e+05 5.18491721e+05 5.25489792e+05 5.32582315e+05 5.39770566e+05 + 5.47055836e+05 5.54439436e+05 5.61922691e+05 5.69506949e+05 5.77193570e+05 + 5.84983938e+05 5.92879453e+05 6.00881532e+05 6.08991616e+05 6.17211161e+05 + 6.25541646e+05 6.33984566e+05 6.42541441e+05 6.51213808e+05 6.60003225e+05 + 1.65580254e-01 1.65563515e-01 1.65546741e-01 1.65529929e-01 1.65513082e-01 + 1.65496198e-01 1.65479277e-01 1.65462319e-01 1.65445324e-01 1.65428292e-01 + 1.65411223e-01 1.65394117e-01 1.65376974e-01 1.65359793e-01 1.65342574e-01 + 1.65325318e-01 1.65308025e-01 1.65290693e-01 1.65273323e-01 1.65255915e-01 + 1.65238469e-01 1.65220985e-01 1.65203462e-01 1.65185901e-01 1.65168301e-01 + 1.65150662e-01 1.65132985e-01 1.65115268e-01 1.65097513e-01 1.65079718e-01 + 1.65061884e-01 1.65044011e-01 1.65026098e-01 1.65008145e-01 1.64990153e-01 + 1.64972120e-01 1.64954048e-01 1.64935936e-01 1.64917783e-01 1.64899591e-01 + 1.64881357e-01 1.64863083e-01 1.64844769e-01 1.64826414e-01 1.64808017e-01 + 1.64789580e-01 1.64771102e-01 1.64752582e-01 1.64734021e-01 1.64715418e-01 + 1.64696774e-01 1.64678088e-01 1.64659360e-01 1.64640590e-01 1.64621778e-01 + 1.64602924e-01 1.64584027e-01 1.64565088e-01 1.64546107e-01 1.64527082e-01 + 1.64508015e-01 1.64488905e-01 1.64469751e-01 1.64450555e-01 1.64431315e-01 + 1.64412031e-01 1.64392704e-01 1.64373334e-01 1.64353919e-01 1.64334460e-01 + 1.64314958e-01 1.64295411e-01 1.64275819e-01 1.64256183e-01 1.64236503e-01 + 1.64216777e-01 1.64197007e-01 1.64177192e-01 1.64157331e-01 1.64137425e-01 + 1.64117474e-01 1.64097477e-01 1.64077435e-01 1.64057346e-01 1.64037212e-01 + 1.64017032e-01 1.63996805e-01 1.63976532e-01 1.63956212e-01 1.63935846e-01 + 1.63915433e-01 1.63894973e-01 1.63874465e-01 1.63853911e-01 1.63833309e-01 + 1.63812660e-01 1.63791963e-01 1.63771218e-01 1.63750426e-01 1.63729585e-01 + 1.63708696e-01 1.63687759e-01 1.63666773e-01 1.63645738e-01 1.63624655e-01 + 1.63603523e-01 1.63582341e-01 1.63561111e-01 1.63539831e-01 1.63518501e-01 + 1.63497122e-01 1.63475693e-01 1.63454214e-01 1.63432685e-01 1.63411106e-01 + 1.63389476e-01 1.63367795e-01 1.63346064e-01 1.63324282e-01 1.63302449e-01 + 1.63280565e-01 1.63258629e-01 1.63236642e-01 1.63214603e-01 1.63192512e-01 + 1.63170369e-01 1.63148174e-01 1.63125927e-01 1.63103628e-01 1.63081275e-01 + 1.63058870e-01 1.63036412e-01 1.63013901e-01 1.62991337e-01 1.62968719e-01 + 1.62946048e-01 1.62923323e-01 1.62900544e-01 1.62877710e-01 1.62854823e-01 + 1.62831881e-01 1.62808885e-01 1.62785834e-01 1.62762728e-01 1.62739567e-01 + 1.62716350e-01 1.62693078e-01 1.62669751e-01 1.62646368e-01 1.62622929e-01 + 1.62599433e-01 1.62575882e-01 1.62552274e-01 1.62528609e-01 1.62504888e-01 + 1.62481109e-01 1.62457274e-01 1.62433381e-01 1.62409431e-01 1.62385423e-01 + 1.62361357e-01 1.62337233e-01 1.62313050e-01 1.62288810e-01 1.62264510e-01 + 1.62240152e-01 1.62215735e-01 1.62191259e-01 1.62166724e-01 1.62142129e-01 + 1.62117474e-01 1.62092759e-01 1.62067985e-01 1.62043150e-01 1.62018255e-01 + 1.61993299e-01 1.61968282e-01 1.61943204e-01 1.61918065e-01 1.61892865e-01 + 1.61867603e-01 1.61842279e-01 1.61816893e-01 1.61791445e-01 1.61765935e-01 + 1.61740362e-01 1.61714726e-01 1.61689028e-01 1.61663266e-01 1.61637441e-01 + 1.61611552e-01 1.61585600e-01 1.61559583e-01 1.61533503e-01 1.61507358e-01 + 1.61481148e-01 1.61454874e-01 1.61428535e-01 1.61402130e-01 1.61375660e-01 + 1.61349125e-01 1.61322523e-01 1.61295856e-01 1.61269123e-01 1.61242323e-01 + 1.61215456e-01 1.61188522e-01 1.61161522e-01 1.61134454e-01 1.61107319e-01 + 1.61080115e-01 1.61052844e-01 1.61025505e-01 1.60998098e-01 1.60970621e-01 + 1.60943076e-01 1.60915462e-01 1.60887779e-01 1.60860026e-01 1.60832204e-01 + 1.60804311e-01 1.60776349e-01 1.60748316e-01 1.60720212e-01 1.60692038e-01 + 1.60663792e-01 1.60635475e-01 1.60607087e-01 1.60578627e-01 1.60550095e-01 + 1.60521491e-01 1.60492814e-01 1.60464065e-01 1.60435242e-01 1.60406347e-01 + 1.60377378e-01 1.60348335e-01 1.60319219e-01 1.60290028e-01 1.60260764e-01 + 1.60231424e-01 1.60202010e-01 1.60172520e-01 1.60142955e-01 1.60113315e-01 + 1.60083599e-01 1.60053807e-01 1.60023938e-01 1.59993993e-01 1.59963971e-01 + 1.59933872e-01 1.59903696e-01 1.59873442e-01 1.59843110e-01 1.59812700e-01 + 1.59782212e-01 1.59751645e-01 1.59720999e-01 1.59690274e-01 1.59659470e-01 + 1.59628586e-01 1.59597622e-01 1.59566578e-01 1.59535454e-01 1.59504249e-01 + 1.59472963e-01 1.59441595e-01 1.59410146e-01 1.59378616e-01 1.59347003e-01 + 1.59315308e-01 1.59283531e-01 1.59251670e-01 1.59219726e-01 1.59187699e-01 + 1.59155589e-01 1.59123394e-01 1.59091115e-01 1.59058751e-01 1.59026303e-01 + 1.58993770e-01 1.58961151e-01 1.58928446e-01 1.58895656e-01 1.58862779e-01 + 1.58829816e-01 1.58796766e-01 1.58763628e-01 1.58730404e-01 1.58697092e-01 + 1.58663691e-01 1.58630203e-01 1.58596625e-01 1.58562959e-01 1.58529204e-01 + 1.58495359e-01 1.58461425e-01 1.58427400e-01 1.58393285e-01 1.58359079e-01 + 1.58324782e-01 1.58290394e-01 1.58255915e-01 1.58221343e-01 1.58186679e-01 + 1.58151923e-01 1.58117073e-01 1.58082131e-01 1.58047095e-01 1.58011965e-01 + 1.57976741e-01 1.57941422e-01 1.57906009e-01 1.57870501e-01 1.57834897e-01 + 1.57799197e-01 1.57763402e-01 1.57727510e-01 1.57691521e-01 1.57655435e-01 + 1.57619252e-01 1.57582971e-01 1.57546592e-01 1.57510115e-01 1.57473538e-01 + 1.57436863e-01 1.57400088e-01 1.57363214e-01 1.57326239e-01 1.57289164e-01 + 1.57251989e-01 1.57214712e-01 1.57177333e-01 1.57139853e-01 1.57102271e-01 + 1.57064586e-01 1.57026798e-01 1.56988907e-01 1.56950912e-01 1.56912813e-01 + 1.56874610e-01 1.56836302e-01 1.56797890e-01 1.56759371e-01 1.56720748e-01 + 1.56682017e-01 1.56643181e-01 1.56604237e-01 1.56565187e-01 1.56526028e-01 + 1.56486762e-01 1.56447387e-01 1.56407903e-01 1.56368311e-01 1.56328609e-01 + 1.56288796e-01 1.56248874e-01 1.56208841e-01 1.56168697e-01 1.56128441e-01 + 1.56088074e-01 1.56047594e-01 1.56007002e-01 1.55966297e-01 1.55925478e-01 + 1.55884546e-01 1.55843499e-01 1.55802338e-01 1.55761062e-01 1.55719670e-01 + 1.55678163e-01 1.55636539e-01 1.55594799e-01 1.55552941e-01 1.55510966e-01 + 1.55468873e-01 1.55426662e-01 1.55384333e-01 1.55341884e-01 1.55299315e-01 + 1.55256627e-01 1.55213818e-01 1.55170888e-01 1.55127838e-01 1.55084665e-01 + 1.55041370e-01 1.54997953e-01 1.54954413e-01 1.54910749e-01 1.54866961e-01 + 1.54823050e-01 1.54779013e-01 1.54734851e-01 1.54690564e-01 1.54646150e-01 + 1.54601610e-01 1.54556943e-01 1.54512149e-01 1.54467226e-01 1.54422176e-01 + 1.54376996e-01 1.54331687e-01 1.54286249e-01 1.54240680e-01 1.54194981e-01 + 1.54149150e-01 1.54103188e-01 1.54057094e-01 1.54010867e-01 1.53964507e-01 + 1.53918014e-01 1.53871386e-01 1.53824625e-01 1.53777728e-01 1.53730696e-01 + 1.53683527e-01 1.53636223e-01 1.53588781e-01 1.53541202e-01 1.53493486e-01 + 1.53445630e-01 1.53397636e-01 1.53349503e-01 1.53301229e-01 1.53252815e-01 + 1.53204260e-01 1.53155564e-01 1.53106726e-01 1.53057745e-01 1.53008621e-01 + 1.52959354e-01 1.52909943e-01 1.52860387e-01 1.52810686e-01 1.52760840e-01 + 1.52710847e-01 1.52660708e-01 1.52610421e-01 1.52559987e-01 1.52509404e-01 + 1.52458673e-01 1.52407792e-01 1.52356762e-01 1.52305580e-01 1.52254248e-01 + 1.52202764e-01 1.52151129e-01 1.52099340e-01 1.52047398e-01 1.51995302e-01 + 1.51943052e-01 1.51890647e-01 1.51838087e-01 1.51785370e-01 1.51732497e-01 + 1.51679467e-01 1.51626279e-01 1.51572932e-01 1.51519426e-01 1.51465761e-01 + 1.51411936e-01 1.51357950e-01 1.51303802e-01 1.51249493e-01 1.51195021e-01 + 1.51140386e-01 1.51085587e-01 1.51030624e-01 1.50975496e-01 1.50920202e-01 + 1.50864742e-01 1.50809116e-01 1.50753322e-01 1.50697360e-01 1.50641229e-01 + 1.50584929e-01 1.50528459e-01 1.50471818e-01 1.50415007e-01 1.50358023e-01 + 1.50300867e-01 1.50243538e-01 1.50186035e-01 1.50128358e-01 1.50070506e-01 + 1.50012478e-01 1.49954274e-01 1.49895893e-01 1.49837334e-01 1.49778596e-01 + 1.49719680e-01 1.49660584e-01 1.49601308e-01 1.49541850e-01 1.49482211e-01 + 1.49422390e-01 1.49362385e-01 1.49302197e-01 1.49241824e-01 1.49181266e-01 + 1.49120523e-01 1.49059593e-01 1.48998475e-01 1.48937170e-01 1.48875676e-01 + 1.48813992e-01 1.48752119e-01 1.48690055e-01 1.48627799e-01 1.48565351e-01 + 1.48502710e-01 1.48439876e-01 1.48376847e-01 1.48313623e-01 1.48250203e-01 + 1.48186586e-01 1.48122773e-01 1.48058761e-01 1.47994550e-01 1.47930139e-01 + 1.47865528e-01 1.47800717e-01 1.47735703e-01 1.47670486e-01 1.47605066e-01 + 1.47539442e-01 1.47473613e-01 1.47407579e-01 1.47341337e-01 1.47274889e-01 + 1.47208232e-01 1.47141367e-01 1.47074292e-01 1.47007006e-01 1.46939509e-01 + 1.46871800e-01 1.46803878e-01 1.46735743e-01 1.46667393e-01 1.46598827e-01 + 1.46530046e-01 1.46461047e-01 1.46391831e-01 1.46322396e-01 1.46252742e-01 + 1.46182867e-01 1.46112772e-01 1.46042454e-01 1.45971913e-01 1.45901149e-01 + 1.45830160e-01 1.45758946e-01 1.45687506e-01 1.45615839e-01 1.45543943e-01 + 1.45471819e-01 1.45399465e-01 1.45326880e-01 1.45254064e-01 1.45181016e-01 + 1.45107734e-01 1.45034218e-01 1.44960467e-01 1.44886480e-01 1.44812256e-01 + 1.44737795e-01 1.44663094e-01 1.44588154e-01 1.44512974e-01 1.44437552e-01 + 1.44361888e-01 1.44285981e-01 1.44209829e-01 1.44133432e-01 1.44056789e-01 + 1.43979899e-01 1.43902761e-01 1.43825374e-01 1.43747737e-01 1.43669849e-01 + 1.43591710e-01 1.43513317e-01 1.43434671e-01 1.43355770e-01 1.43276613e-01 + 1.43197200e-01 1.43117528e-01 1.43037599e-01 1.42957409e-01 1.42876959e-01 + 1.42796247e-01 1.42715272e-01 1.42634034e-01 1.42552530e-01 1.42470761e-01 + 1.42388726e-01 1.42306422e-01 1.42223850e-01 1.42141007e-01 1.42057894e-01 + 1.41974509e-01 1.41890851e-01 1.41806919e-01 1.41722711e-01 1.41638228e-01 + 1.41553467e-01 1.41468428e-01 1.41383109e-01 1.41297511e-01 1.41211630e-01 + 1.41125467e-01 1.41039020e-01 1.40952288e-01 1.40865271e-01 1.40777966e-01 + 1.40690373e-01 1.40602491e-01 1.40514319e-01 1.40425855e-01 1.40337099e-01 + 1.40248048e-01 1.40158703e-01 1.40069062e-01 1.39979124e-01 1.39888888e-01 + 1.39798352e-01 1.39707515e-01 1.39616377e-01 1.39524936e-01 1.39433191e-01 + 1.39341140e-01 1.39248784e-01 1.39156119e-01 1.39063146e-01 1.38969862e-01 + 1.38876268e-01 1.38782361e-01 1.38688141e-01 1.38593606e-01 1.38498755e-01 + 1.38403586e-01 1.38308099e-01 1.38212293e-01 1.38116166e-01 1.38019716e-01 + 1.37922943e-01 1.37825846e-01 1.37728423e-01 1.37630672e-01 1.37532594e-01 + 1.37434185e-01 1.37335446e-01 1.37236375e-01 1.37136970e-01 1.37037230e-01 + 1.36937155e-01 1.36836742e-01 1.36735991e-01 1.36634900e-01 1.36533467e-01 + 1.36431692e-01 1.36329574e-01 1.36227110e-01 1.36124300e-01 1.36021142e-01 + 1.35917635e-01 1.35813778e-01 1.35709568e-01 1.35605006e-01 1.35500089e-01 + 1.35394817e-01 1.35289187e-01 1.35183199e-01 1.35076851e-01 1.34970142e-01 + 1.34863070e-01 1.34755634e-01 1.34647833e-01 1.34539665e-01 1.34431128e-01 + 1.34322223e-01 1.34212946e-01 1.34103297e-01 1.33993274e-01 1.33882876e-01 + 1.33772101e-01 1.33660948e-01 1.33549416e-01 1.33437503e-01 1.33325207e-01 + 1.33212528e-01 1.33099463e-01 1.32986012e-01 1.32872172e-01 1.32757943e-01 + 1.32643323e-01 1.32528310e-01 1.32412904e-01 1.32297101e-01 1.32180902e-01 + 1.32064305e-01 1.31947307e-01 1.31829908e-01 1.31712106e-01 1.31593899e-01 + 1.31475287e-01 1.31356267e-01 1.31236838e-01 1.31116998e-01 1.30996746e-01 + 1.30876081e-01 1.30755001e-01 1.30633504e-01 1.30511588e-01 1.30389253e-01 + 1.30266497e-01 1.30143318e-01 1.30019714e-01 1.29895684e-01 1.29771227e-01 + 1.29646341e-01 1.29521024e-01 1.29395274e-01 1.29269091e-01 1.29142472e-01 + 1.29015417e-01 1.28887922e-01 1.28759987e-01 1.28631611e-01 1.28502791e-01 + 1.28373525e-01 1.28243813e-01 1.28113653e-01 1.27983043e-01 1.27851981e-01 + 1.27720466e-01 1.27588496e-01 1.27456070e-01 1.27323186e-01 1.27189841e-01 + 1.27056036e-01 1.26921767e-01 1.26787033e-01 1.26651833e-01 1.26516166e-01 + 1.26380028e-01 1.26243419e-01 1.26106337e-01 1.25968780e-01 1.25830747e-01 + 1.25692235e-01 1.25553244e-01 1.25413771e-01 1.25273815e-01 1.25133375e-01 + 1.24992448e-01 1.24851032e-01 1.24709127e-01 1.24566730e-01 1.24423839e-01 + 1.24280454e-01 1.24136571e-01 1.23992190e-01 1.23847309e-01 1.23701926e-01 + 1.23556040e-01 1.23409647e-01 1.23262748e-01 1.23115340e-01 1.22967422e-01 + 1.22818991e-01 1.22670046e-01 1.22520585e-01 1.22370607e-01 1.22220110e-01 + 1.22069091e-01 1.21917550e-01 1.21765484e-01 1.21612892e-01 1.21459773e-01 + 1.21306123e-01 1.21151942e-01 1.20997228e-01 1.20841979e-01 1.20686193e-01 + 1.20529869e-01 1.20373004e-01 1.20215598e-01 1.20057648e-01 1.19899152e-01 + 1.19740109e-01 1.19580518e-01 1.19420375e-01 1.19259680e-01 1.19098431e-01 + 1.18936626e-01 1.18774263e-01 1.18611341e-01 1.18447857e-01 1.18283810e-01 + 1.18119199e-01 1.17954021e-01 1.17788276e-01 1.17621960e-01 1.17455072e-01 + 1.17287611e-01 1.17119575e-01 1.16950961e-01 1.16781770e-01 1.16611997e-01 + 1.16441643e-01 1.16270705e-01 1.16099181e-01 1.15927070e-01 1.15754370e-01 + 1.15581079e-01 1.15407195e-01 1.15232718e-01 1.15057644e-01 1.14881973e-01 + 1.14705703e-01 1.14528831e-01 1.14351357e-01 1.14173279e-01 1.13994594e-01 + 1.13815302e-01 1.13635400e-01 1.13454887e-01 1.13273762e-01 1.13092022e-01 + 1.12909666e-01 1.12726692e-01 1.12543099e-01 1.12358884e-01 1.12174047e-01 + 1.11988586e-01 1.11802499e-01 1.11615785e-01 1.11428441e-01 1.11240467e-01 + 1.11051860e-01 1.10862619e-01 1.10672743e-01 1.10482230e-01 1.10291079e-01 + 1.10099287e-01 1.09906853e-01 1.09713777e-01 1.09520055e-01 1.09325688e-01 + 1.09130672e-01 1.08935008e-01 1.08738692e-01 1.08541725e-01 1.08344104e-01 + 1.08145827e-01 1.07946894e-01 1.07747304e-01 1.07547053e-01 1.07346142e-01 + 1.07144569e-01 1.06942333e-01 1.06739431e-01 1.06535863e-01 1.06331627e-01 + 1.06126723e-01 1.05921148e-01 1.05714902e-01 1.05507982e-01 1.05300389e-01 + 1.05092120e-01 1.04883175e-01 1.04673552e-01 1.04463250e-01 1.04252268e-01 + 1.04040604e-01 1.03828258e-01 1.03615228e-01 1.03401513e-01 1.03187113e-01 + 1.02972026e-01 1.02756250e-01 1.02539786e-01 1.02322631e-01 1.02104785e-01 + 1.01886248e-01 1.01667017e-01 1.01447092e-01 1.01226473e-01 1.01005158e-01 + 1.00783146e-01 1.00560436e-01 1.00337028e-01 1.00112922e-01 9.98881150e-02 + 9.96626076e-02 9.94363989e-02 9.92094881e-02 9.89818746e-02 9.87535577e-02 + 9.85245367e-02 9.82948112e-02 9.80643804e-02 9.78332440e-02 9.76014013e-02 + 9.73688518e-02 9.71355952e-02 9.69016310e-02 9.66669588e-02 9.64315783e-02 + 9.61954891e-02 9.59586908e-02 9.57211834e-02 9.54829664e-02 9.52440398e-02 + 9.50044033e-02 9.47640568e-02 9.45230003e-02 9.42812335e-02 9.40387567e-02 + 9.37955696e-02 9.35516725e-02 9.33070653e-02 9.30617482e-02 9.28157214e-02 + 9.25689850e-02 9.23215393e-02 9.20733846e-02 9.18245212e-02 9.15749495e-02 + 9.13246699e-02 9.10736827e-02 9.08219886e-02 9.05695880e-02 9.03164816e-02 + 9.00626699e-02 8.98081536e-02 8.95529334e-02 8.92970102e-02 8.90403847e-02 + 8.87830577e-02 8.85250303e-02 8.82663032e-02 8.80068776e-02 8.77467546e-02 + 8.74859351e-02 8.72244204e-02 8.69622117e-02 8.66993103e-02 8.64357174e-02 + 8.61714345e-02 8.59064630e-02 8.56408044e-02 8.53744602e-02 8.51074320e-02 + 8.48397215e-02 8.45713304e-02 8.43022605e-02 8.40325136e-02 8.37620916e-02 + 8.34909965e-02 8.32192302e-02 8.29467950e-02 8.26736929e-02 8.23999262e-02 + 8.21254970e-02 8.18504079e-02 8.15746611e-02 8.12982592e-02 8.10212047e-02 + 8.07435002e-02 8.04651484e-02 8.01861521e-02 7.99065141e-02 7.96262372e-02 + 7.93453246e-02 7.90637791e-02 7.87816039e-02 7.84988023e-02 7.82153774e-02 + 7.79313327e-02 7.76466715e-02 7.73613974e-02 7.70755139e-02 7.67890246e-02 + 7.65019334e-02 7.62142440e-02 7.59259604e-02 7.56370865e-02 7.53476263e-02 + 7.50575841e-02 7.47669641e-02 7.44757706e-02 7.41840079e-02 7.38916807e-02 + 7.35987934e-02 7.33053507e-02 7.30113575e-02 7.27168185e-02 7.24217387e-02 + 7.21261231e-02 7.18299768e-02 7.15333051e-02 7.12361133e-02 7.09384067e-02 + 7.06401909e-02 7.03414715e-02 7.00422541e-02 6.97425446e-02 6.94423488e-02 + 6.91416728e-02 6.88405225e-02 6.85389043e-02 6.82368244e-02 6.79342891e-02 + 6.76313050e-02 6.73278787e-02 6.70240169e-02 6.67197264e-02 6.64150140e-02 + 6.61098869e-02 6.58043520e-02 6.54984168e-02 6.51920884e-02 6.48853744e-02 + 6.45782823e-02 6.42708198e-02 6.39629946e-02 6.36548146e-02 6.33462879e-02 + 6.30374225e-02 6.27282267e-02 6.24187088e-02 6.21088773e-02 6.17987406e-02 + 6.14883076e-02 6.11775870e-02 6.08665877e-02 6.05553188e-02 6.02437893e-02 + 5.99320086e-02 5.96199860e-02 5.93077311e-02 5.89952534e-02 5.86825627e-02 + 5.83696689e-02 5.80565818e-02 5.77433118e-02 5.74298688e-02 5.71162634e-02 + 5.68025058e-02 5.64886069e-02 5.61745771e-02 5.58604274e-02 5.55461687e-02 + 5.52318121e-02 5.49173687e-02 5.46028499e-02 5.42882672e-02 5.39736321e-02 + 5.36589562e-02 5.33442514e-02 5.30295296e-02 5.27148029e-02 5.24000835e-02 + 5.20853836e-02 5.17707158e-02 5.14560924e-02 5.11415263e-02 5.08270302e-02 + 5.05126170e-02 5.01982998e-02 4.98840918e-02 4.95700061e-02 4.92560564e-02 + 4.89422560e-02 4.86286186e-02 4.83151580e-02 4.80018882e-02 4.76888231e-02 + 4.73759769e-02 4.70633638e-02 4.67509982e-02 4.64388946e-02 4.61270676e-02 + 4.58155320e-02 4.55043026e-02 4.51933944e-02 4.48828225e-02 4.45726020e-02 + 4.42627483e-02 4.39532767e-02 4.36442030e-02 4.33355426e-02 4.30273114e-02 + 4.27195253e-02 4.24122002e-02 4.21053521e-02 4.17989974e-02 4.14931524e-02 + 4.11878333e-02 4.08830568e-02 4.05788395e-02 4.02751981e-02 3.99721494e-02 + 3.96697104e-02 3.93678979e-02 3.90667293e-02 3.87662217e-02 3.84663923e-02 + 3.81672586e-02 3.78688381e-02 3.75711484e-02 3.72742070e-02 3.69780319e-02 + 3.66826407e-02 3.63880515e-02 3.60942822e-02 3.58013509e-02 3.55092758e-02 + 3.52180750e-02 3.49277670e-02 3.46383700e-02 3.43499026e-02 3.40623832e-02 + 3.37758304e-02 3.34902629e-02 3.32056994e-02 3.29221586e-02 3.26396593e-02 + 3.23582205e-02 3.20778611e-02 3.17986000e-02 3.15204562e-02 3.12434489e-02 + 3.09675972e-02 3.06929202e-02 3.04194370e-02 3.01471670e-02 2.98761294e-02 + 2.96063435e-02 2.93378286e-02 2.90706040e-02 2.88046891e-02 2.85401033e-02 + 2.82768660e-02 2.80149966e-02 2.77545145e-02 2.74954392e-02 2.72377901e-02 + 2.69815866e-02 2.67268481e-02 2.64735941e-02 2.62218441e-02 2.59716174e-02 + 2.57229334e-02 2.54758115e-02 2.52302711e-02 2.49863315e-02 2.47440120e-02 + 2.45033320e-02 2.42643105e-02 2.40269669e-02 2.37913204e-02 2.35573900e-02 + 2.33251949e-02 2.30947540e-02 2.28660864e-02 2.26392110e-02 2.24141466e-02 + 2.21909120e-02 2.19695260e-02 2.17500072e-02 2.15323742e-02 2.13166455e-02 + 2.11028396e-02 2.08909747e-02 2.06810691e-02 2.04731411e-02 2.02672086e-02 + 2.00632896e-02 1.98614019e-02 1.96615634e-02 1.94637917e-02 1.92681043e-02 + 1.90745186e-02 1.88830519e-02 1.86937213e-02 1.85065440e-02 1.83215368e-02 + 1.81387165e-02 1.79580998e-02 1.77797030e-02 1.76035426e-02 1.74296348e-02 + 1.72579956e-02 1.70886409e-02 1.69215864e-02 1.67568478e-02 1.65944402e-02 + 1.64343791e-02 1.62766795e-02 1.61213562e-02 1.59684240e-02 1.58178973e-02 + 1.56697904e-02 1.55241176e-02 1.53808927e-02 1.52401295e-02 1.51018416e-02 + 1.49660422e-02 1.48327446e-02 1.47019616e-02 1.45737059e-02 1.44479901e-02 + 1.43248264e-02 1.42042269e-02 1.40862035e-02 1.39707676e-02 1.38579308e-02 + 1.37477041e-02 1.36400985e-02 1.35351246e-02 1.34327929e-02 1.33331135e-02 + 1.32360964e-02 1.31417514e-02 1.30500877e-02 1.29611147e-02 1.28748412e-02 + 1.27912760e-02 1.27104274e-02 1.26323037e-02 1.25569127e-02 1.24842620e-02 + 1.24143590e-02 1.23472109e-02 1.22828243e-02 1.22212060e-02 1.21623621e-02 + 1.21062986e-02 1.20530213e-02 1.20025356e-02 1.19548467e-02 1.19099595e-02 + 1.18678785e-02 1.18286081e-02 1.17921522e-02 1.17585148e-02 1.17276991e-02 + 1.16997084e-02 1.16745455e-02 1.16522130e-02 1.16327133e-02 1.16160484e-02 + 1.16022198e-02 1.15912292e-02 1.15830776e-02 1.15777658e-02 1.15752944e-02 + 1.15756637e-02 1.15788736e-02 1.15849238e-02 1.15938137e-02 1.16055423e-02 + 1.16201084e-02 1.16375106e-02 1.16577471e-02 1.16808156e-02 1.17067140e-02 + 1.17354395e-02 1.17669892e-02 1.18013598e-02 1.18385478e-02 1.18785493e-02 + 1.19213604e-02 1.19669765e-02 1.20153931e-02 1.20666051e-02 1.21206073e-02 + 1.21773942e-02 1.22369601e-02 1.22992988e-02 1.23644040e-02 1.24322691e-02 + 1.25028871e-02 1.25762510e-02 1.26523533e-02 1.27311863e-02 1.28127420e-02 + 1.28970121e-02 1.29839883e-02 1.30736618e-02 1.31660235e-02 1.32610642e-02 + 1.33587744e-02 1.34591444e-02 1.35621641e-02 1.36678232e-02 1.37761113e-02 + 1.38870177e-02 1.40005314e-02 1.41166411e-02 1.42353355e-02 1.43566028e-02 + 1.44804312e-02 1.46068085e-02 1.47357225e-02 1.48671606e-02 1.50011099e-02 + 1.51375576e-02 1.52764904e-02 1.54178949e-02 1.55617576e-02 1.57080646e-02 + 1.58568020e-02 1.60079555e-02 1.61615108e-02 1.63174534e-02 1.64757685e-02 + 1.66364411e-02 1.67994562e-02 1.69647985e-02 1.71324525e-02 1.73024027e-02 + 1.74746333e-02 1.76491283e-02 1.78258717e-02 1.80048472e-02 1.81860385e-02 + 1.83694290e-02 1.85550020e-02 1.87427408e-02 1.89326284e-02 1.91246477e-02 + 1.93187815e-02 1.95150125e-02 1.97133233e-02 1.99136963e-02 2.01161138e-02 + 2.03205580e-02 2.05270111e-02 2.07354551e-02 2.09458718e-02 2.11582431e-02 + 2.13725507e-02 2.15887763e-02 2.18069014e-02 2.20269075e-02 2.22487759e-02 + 2.24724880e-02 2.26980251e-02 2.29253683e-02 2.31544988e-02 2.33853976e-02 + 2.36180458e-02 2.38524242e-02 2.40885138e-02 2.43262955e-02 2.45657500e-02 + 2.48068582e-02 2.50496007e-02 2.52939584e-02 2.55399119e-02 2.57874418e-02 + 2.60365287e-02 2.62871534e-02 2.65392963e-02 2.67929381e-02 2.70480593e-02 + 2.73046406e-02 2.75626624e-02 2.78221053e-02 2.80829500e-02 2.83451769e-02 + 2.86087667e-02 2.88736999e-02 2.91399572e-02 2.94075191e-02 2.96763664e-02 + 2.99464796e-02 3.02178395e-02 3.04904267e-02 3.07642221e-02 3.10392064e-02 + 3.13153605e-02 3.15926651e-02 3.18711011e-02 3.21506496e-02 3.24312916e-02 + 3.27130079e-02 3.29957798e-02 3.32795883e-02 3.35644146e-02 3.38502401e-02 + 3.41370460e-02 3.44248137e-02 3.47135246e-02 3.50031602e-02 3.52937021e-02 + 3.55851319e-02 3.58774314e-02 3.61705823e-02 3.64645665e-02 3.67593660e-02 + 3.70549627e-02 3.73513388e-02 3.76484764e-02 3.79463579e-02 3.82449655e-02 + 3.85442817e-02 3.88442891e-02 3.91449703e-02 3.94463079e-02 3.97482849e-02 + 4.00508841e-02 4.03540886e-02 4.06578813e-02 4.09622456e-02 4.12671648e-02 + 4.15726221e-02 4.18786013e-02 4.21850858e-02 4.24920594e-02 4.27995060e-02 + 4.31074094e-02 4.34157537e-02 4.37245230e-02 4.40337017e-02 4.43432741e-02 + 4.46532246e-02 4.49635380e-02 4.52741988e-02 4.55851920e-02 4.58965024e-02 + 4.62081152e-02 4.65200155e-02 4.68321886e-02 4.71446199e-02 4.74572950e-02 + 4.77701996e-02 4.80833192e-02 4.83966400e-02 4.87101479e-02 4.90238289e-02 + 4.93376695e-02 4.96516559e-02 4.99657746e-02 5.02800123e-02 5.05943557e-02 + 5.09087917e-02 5.12233073e-02 5.15378895e-02 5.18525256e-02 5.21672030e-02 + 5.24819092e-02 5.27966317e-02 5.31113583e-02 5.34260768e-02 5.37407752e-02 + 5.40554416e-02 5.43700642e-02 5.46846314e-02 5.49991317e-02 5.53135536e-02 + 5.56278858e-02 5.59421172e-02 5.62562368e-02 5.65702336e-02 5.68840968e-02 + 5.71978158e-02 5.75113800e-02 5.78247790e-02 5.81380025e-02 5.84510402e-02 + 5.87638822e-02 5.90765185e-02 5.93889392e-02 5.97011346e-02 6.00130952e-02 + 6.03248115e-02 6.06362741e-02 6.09474738e-02 6.12584015e-02 6.15690482e-02 + 6.18794050e-02 6.21894631e-02 6.24992140e-02 6.28086489e-02 6.31177596e-02 + 6.34265377e-02 6.37349751e-02 6.40430636e-02 6.43507952e-02 6.46581622e-02 + 6.49651567e-02 6.52717712e-02 6.55779981e-02 6.58838299e-02 6.61892594e-02 + 6.64942794e-02 6.67988828e-02 6.71030625e-02 6.74068117e-02 6.77101237e-02 + 6.80129917e-02 6.83154092e-02 6.86173697e-02 6.89188669e-02 6.92198944e-02 + 6.95204462e-02 6.98205161e-02 7.01200982e-02 7.04191867e-02 7.07177757e-02 + 7.10158596e-02 7.13134329e-02 7.16104900e-02 7.19070256e-02 7.22030344e-02 + 7.24985112e-02 7.27934509e-02 7.30878484e-02 7.33816990e-02 7.36749977e-02 + 7.39677398e-02 7.42599207e-02 7.45515358e-02 7.48425807e-02 7.51330509e-02 + 7.54229421e-02 7.57122502e-02 7.60009711e-02 7.62891006e-02 7.65766348e-02 + 7.68635699e-02 7.71499020e-02 7.74356274e-02 7.77207425e-02 7.80052438e-02 + 7.82891277e-02 7.85723908e-02 7.88550299e-02 7.91370416e-02 7.94184229e-02 + 7.96991705e-02 7.99792815e-02 8.02587530e-02 8.05375820e-02 8.08157657e-02 + 8.10933015e-02 8.13701866e-02 8.16464184e-02 8.19219944e-02 8.21969122e-02 + 8.24711693e-02 8.27447635e-02 8.30176924e-02 8.32899539e-02 8.35615458e-02 + 8.38324661e-02 8.41027128e-02 8.43722839e-02 8.46411775e-02 8.49093918e-02 + 8.51769250e-02 8.54437756e-02 8.57099417e-02 8.59754218e-02 8.62402144e-02 + 8.65043180e-02 8.67677312e-02 8.70304527e-02 8.72924810e-02 8.75538151e-02 + 8.78144536e-02 8.80743954e-02 8.83336395e-02 8.85921847e-02 8.88500302e-02 + 8.91071748e-02 8.93636178e-02 8.96193583e-02 8.98743956e-02 9.01287287e-02 + 9.03823571e-02 9.06352801e-02 9.08874971e-02 9.11390074e-02 9.13898107e-02 + 9.16399063e-02 9.18892939e-02 9.21379731e-02 9.23859434e-02 9.26332047e-02 + 9.28797566e-02 9.31255989e-02 9.33707315e-02 9.36151540e-02 9.38588666e-02 + 9.41018690e-02 9.43441612e-02 9.45857433e-02 9.48266152e-02 9.50667771e-02 + 9.53062290e-02 9.55449711e-02 9.57830036e-02 9.60203266e-02 9.62569405e-02 + 9.64928454e-02 9.67280417e-02 9.69625298e-02 9.71963100e-02 9.74293827e-02 + 9.76617483e-02 9.78934074e-02 9.81243603e-02 9.83546076e-02 9.85841499e-02 + 9.88129878e-02 9.90411218e-02 9.92685525e-02 9.94952807e-02 9.97213070e-02 + 9.99466321e-02 1.00171257e-01 1.00395182e-01 1.00618408e-01 1.00840936e-01 + 1.01062766e-01 1.01283901e-01 1.01504340e-01 1.01724084e-01 1.01943134e-01 + 1.02161492e-01 1.02379158e-01 1.02596133e-01 1.02812418e-01 1.03028014e-01 + 1.03242923e-01 1.03457145e-01 1.03670682e-01 1.03883534e-01 1.04095702e-01 + 1.04307189e-01 1.04517994e-01 1.04728119e-01 1.04937566e-01 1.05146335e-01 + 1.05354428e-01 1.05561846e-01 1.05768590e-01 1.05974662e-01 1.06180062e-01 + 1.06384793e-01 1.06588855e-01 1.06792249e-01 1.06994978e-01 1.07197042e-01 + 1.07398443e-01 1.07599182e-01 1.07799261e-01 1.07998680e-01 1.08197442e-01 + 1.08395548e-01 1.08592999e-01 1.08789797e-01 1.08985943e-01 1.09181439e-01 + 1.09376286e-01 1.09570485e-01 1.09764039e-01 1.09956948e-01 1.10149214e-01 + 1.10340840e-01 1.10531825e-01 1.10722172e-01 1.10911883e-01 1.11100959e-01 + 1.11289401e-01 1.11477211e-01 1.11664391e-01 1.11850942e-01 1.12036866e-01 + 1.12222165e-01 1.12406840e-01 1.12590892e-01 1.12774325e-01 1.12957138e-01 + 1.13139333e-01 1.13320913e-01 1.13501880e-01 1.13682233e-01 1.13861976e-01 + 1.14041111e-01 1.14219637e-01 1.14397559e-01 1.14574876e-01 1.14751591e-01 + 1.14927705e-01 1.15103221e-01 1.15278139e-01 1.15452462e-01 1.15626191e-01 + 1.15799328e-01 1.15971875e-01 1.16143834e-01 1.16315205e-01 1.16485991e-01 + 1.16656194e-01 1.16825815e-01 1.16994856e-01 1.17163320e-01 1.17331206e-01 + 1.17498518e-01 1.17665257e-01 1.17831424e-01 1.17997022e-01 1.18162053e-01 + 1.18326517e-01 1.18490417e-01 1.18653754e-01 1.18816531e-01 1.18978749e-01 + 1.19140409e-01 1.19301514e-01 1.19462065e-01 1.19622064e-01 1.19781513e-01 + 1.19940414e-01 1.20098767e-01 1.20256576e-01 1.20413841e-01 1.20570565e-01 + 1.20726749e-01 1.20882395e-01 1.21037505e-01 1.21192080e-01 1.21346123e-01 + 1.21499635e-01 1.21652617e-01 1.21805072e-01 1.21957001e-01 1.22108406e-01 + 1.22259289e-01 1.22409651e-01 1.22559495e-01 1.22708821e-01 1.22857632e-01 + 1.23005930e-01 1.23153715e-01 1.23300991e-01 1.23447758e-01 1.23594019e-01 + 1.23739774e-01 1.23885027e-01 1.24029777e-01 1.24174028e-01 1.24317781e-01 + 1.24461038e-01 1.24603800e-01 1.24746069e-01 1.24887847e-01 1.25029136e-01 + 1.25169936e-01 1.25310251e-01 1.25450081e-01 1.25589428e-01 1.25728294e-01 + 1.25866681e-01 1.26004590e-01 1.26142024e-01 1.26278983e-01 1.26415469e-01 + 1.26551484e-01 1.26687030e-01 1.26822109e-01 1.26956721e-01 1.27090870e-01 + 1.27224555e-01 1.27357780e-01 1.27490545e-01 1.27622852e-01 1.27754704e-01 + 1.27886101e-01 1.28017045e-01 1.28147538e-01 1.28277582e-01 1.28407177e-01 + 1.28536327e-01 1.28665031e-01 1.28793293e-01 1.28921113e-01 1.29048493e-01 + 1.29175435e-01 1.29301941e-01 1.29428011e-01 1.29553648e-01 1.29678853e-01 + 1.29803627e-01 1.29927973e-01 1.30051892e-01 1.30175385e-01 1.30298454e-01 + 1.30421101e-01 1.30543327e-01 1.30665133e-01 1.30786522e-01 1.30907494e-01 + 1.31028051e-01 1.31148196e-01 1.31267929e-01 1.31387251e-01 1.31506165e-01 + 1.31624672e-01 1.31742773e-01 1.31860470e-01 1.31977765e-01 1.32094658e-01 + 1.32211152e-01 1.32327248e-01 1.32442947e-01 1.32558252e-01 1.32673162e-01 + 1.32787680e-01 1.32901808e-01 1.33015546e-01 1.33128897e-01 1.33241861e-01 + 1.33354441e-01 1.33466637e-01 1.33578451e-01 1.33689884e-01 1.33800939e-01 + 1.33911615e-01 1.34021916e-01 1.34131841e-01 1.34241394e-01 1.34350574e-01 + 1.34459383e-01 1.34567824e-01 1.34675896e-01 1.34783602e-01 1.34890944e-01 + 1.34997921e-01 1.35104536e-01 1.35210791e-01 1.35316685e-01 1.35422222e-01 + 1.35527402e-01 1.35632226e-01 1.35736697e-01 1.35840814e-01 1.35944580e-01 + 1.36047997e-01 1.36151064e-01 1.36253784e-01 1.36356158e-01 1.36458187e-01 + 1.36559873e-01 1.36661216e-01 1.36762219e-01 1.36862882e-01 1.36963207e-01 + 1.37063195e-01 1.37162847e-01 1.37262165e-01 1.37361150e-01 1.37459803e-01 + 1.37558126e-01 1.37656119e-01 1.37753784e-01 1.37851123e-01 1.37948136e-01 + 1.38044824e-01 1.38141190e-01 1.38237233e-01 1.38332957e-01 1.38428361e-01 + 1.38523446e-01 1.38618215e-01 1.38712668e-01 1.38806807e-01 1.38900633e-01 + 1.38994146e-01 1.39087349e-01 1.39180241e-01 1.39272826e-01 1.39365103e-01 + 1.39457074e-01 1.39548740e-01 1.39640102e-01 1.39731162e-01 1.39821920e-01 + 1.39912378e-01 1.40002537e-01 1.40092398e-01 1.40181961e-01 1.40271230e-01 + 1.40360203e-01 1.40448884e-01 1.40537272e-01 1.40625368e-01 1.40713175e-01 + 1.40800693e-01 1.40887923e-01 1.40974866e-01 1.41061523e-01 1.41147896e-01 + 1.41233986e-01 1.41319793e-01 1.41405319e-01 1.41490565e-01 1.41575532e-01 + 1.41660220e-01 1.41744632e-01 1.41828768e-01 1.41912628e-01 1.41996216e-01 + 1.42079530e-01 1.42162572e-01 1.42245344e-01 1.42327847e-01 1.42410081e-01 + 1.42492047e-01 1.42573747e-01 1.42655181e-01 1.42736351e-01 1.42817257e-01 + 1.42897901e-01 1.42978283e-01 1.43058405e-01 1.43138268e-01 1.43217872e-01 + 1.43297218e-01 1.43376309e-01 1.43455143e-01 1.43533723e-01 1.43612050e-01 + 1.43690124e-01 1.43767947e-01 1.43845519e-01 1.43922841e-01 1.43999914e-01 + 1.44076740e-01 1.44153319e-01 1.44229652e-01 1.44305740e-01 1.44381584e-01 + 1.44457185e-01 1.44532544e-01 1.44607662e-01 1.44682539e-01 1.44757177e-01 + 1.44831577e-01 1.44905739e-01 1.44979665e-01 1.45053355e-01 1.45126809e-01 + 1.45200031e-01 1.45273019e-01 1.45345774e-01 1.45418299e-01 1.45490593e-01 + 1.45562658e-01 1.45634494e-01 1.45706102e-01 1.45777484e-01 1.45848639e-01 + 1.45919569e-01 1.45990275e-01 1.46060758e-01 1.46131018e-01 1.46201056e-01 + 1.46270873e-01 1.46340470e-01 1.46409848e-01 1.46479008e-01 1.46547950e-01 + 1.46616675e-01 1.46685184e-01 1.46753479e-01 1.46821558e-01 1.46889425e-01 + 1.46957079e-01 1.47024520e-01 1.47091751e-01 1.47158772e-01 1.47225583e-01 + 1.47292185e-01 1.47358580e-01 1.47424768e-01 1.47490749e-01 1.47556524e-01 + 1.47622095e-01 1.47687462e-01 1.47752626e-01 1.47817587e-01 1.47882347e-01 + 1.38518338e-01 1.38476565e-01 1.38434740e-01 1.38392864e-01 1.38350938e-01 + 1.38308960e-01 1.38266931e-01 1.38224851e-01 1.38182720e-01 1.38140538e-01 + 1.38098305e-01 1.38056020e-01 1.38013684e-01 1.37971296e-01 1.37928857e-01 + 1.37886366e-01 1.37843824e-01 1.37801230e-01 1.37758585e-01 1.37715888e-01 + 1.37673139e-01 1.37630338e-01 1.37587486e-01 1.37544581e-01 1.37501625e-01 + 1.37458617e-01 1.37415556e-01 1.37372444e-01 1.37329279e-01 1.37286062e-01 + 1.37242794e-01 1.37199472e-01 1.37156099e-01 1.37112673e-01 1.37069195e-01 + 1.37025664e-01 1.36982081e-01 1.36938445e-01 1.36894757e-01 1.36851016e-01 + 1.36807222e-01 1.36763376e-01 1.36719477e-01 1.36675525e-01 1.36631520e-01 + 1.36587463e-01 1.36543352e-01 1.36499189e-01 1.36454972e-01 1.36410702e-01 + 1.36366380e-01 1.36322004e-01 1.36277574e-01 1.36233092e-01 1.36188556e-01 + 1.36143967e-01 1.36099325e-01 1.36054629e-01 1.36009880e-01 1.35965077e-01 + 1.35920221e-01 1.35875311e-01 1.35830347e-01 1.35785330e-01 1.35740259e-01 + 1.35695134e-01 1.35649956e-01 1.35604723e-01 1.35559437e-01 1.35514096e-01 + 1.35468702e-01 1.35423254e-01 1.35377752e-01 1.35332195e-01 1.35286585e-01 + 1.35240920e-01 1.35195201e-01 1.35149428e-01 1.35103600e-01 1.35057718e-01 + 1.35011782e-01 1.34965791e-01 1.34919746e-01 1.34873646e-01 1.34827492e-01 + 1.34781283e-01 1.34735020e-01 1.34688702e-01 1.34642329e-01 1.34595901e-01 + 1.34549419e-01 1.34502882e-01 1.34456290e-01 1.34409643e-01 1.34362941e-01 + 1.34316184e-01 1.34269372e-01 1.34222505e-01 1.34175583e-01 1.34128606e-01 + 1.34081573e-01 1.34034486e-01 1.33987343e-01 1.33940145e-01 1.33892892e-01 + 1.33845583e-01 1.33798219e-01 1.33750799e-01 1.33703324e-01 1.33655794e-01 + 1.33608207e-01 1.33560566e-01 1.33512869e-01 1.33465116e-01 1.33417307e-01 + 1.33369443e-01 1.33321523e-01 1.33273547e-01 1.33225515e-01 1.33177428e-01 + 1.33129285e-01 1.33081085e-01 1.33032830e-01 1.32984519e-01 1.32936152e-01 + 1.32887728e-01 1.32839249e-01 1.32790713e-01 1.32742122e-01 1.32693474e-01 + 1.32644770e-01 1.32596010e-01 1.32547193e-01 1.32498320e-01 1.32449391e-01 + 1.32400405e-01 1.32351363e-01 1.32302265e-01 1.32253110e-01 1.32203899e-01 + 1.32154631e-01 1.32105306e-01 1.32055925e-01 1.32006488e-01 1.31956993e-01 + 1.31907442e-01 1.31857835e-01 1.31808170e-01 1.31758449e-01 1.31708671e-01 + 1.31658836e-01 1.31608945e-01 1.31558996e-01 1.31508991e-01 1.31458929e-01 + 1.31408809e-01 1.31358633e-01 1.31308400e-01 1.31258110e-01 1.31207762e-01 + 1.31157358e-01 1.31106897e-01 1.31056378e-01 1.31005802e-01 1.30955169e-01 + 1.30904479e-01 1.30853732e-01 1.30802927e-01 1.30752065e-01 1.30701146e-01 + 1.30650170e-01 1.30599136e-01 1.30548045e-01 1.30496896e-01 1.30445690e-01 + 1.30394426e-01 1.30343106e-01 1.30291727e-01 1.30240291e-01 1.30188798e-01 + 1.30137247e-01 1.30085639e-01 1.30033973e-01 1.29982249e-01 1.29930468e-01 + 1.29878629e-01 1.29826732e-01 1.29774778e-01 1.29722766e-01 1.29670696e-01 + 1.29618569e-01 1.29566384e-01 1.29514141e-01 1.29461841e-01 1.29409482e-01 + 1.29357066e-01 1.29304592e-01 1.29252060e-01 1.29199470e-01 1.29146823e-01 + 1.29094117e-01 1.29041354e-01 1.28988533e-01 1.28935654e-01 1.28882717e-01 + 1.28829721e-01 1.28776668e-01 1.28723557e-01 1.28670388e-01 1.28617161e-01 + 1.28563876e-01 1.28510533e-01 1.28457132e-01 1.28403673e-01 1.28350156e-01 + 1.28296581e-01 1.28242948e-01 1.28189256e-01 1.28135507e-01 1.28081699e-01 + 1.28027834e-01 1.27973910e-01 1.27919928e-01 1.27865888e-01 1.27811790e-01 + 1.27757634e-01 1.27703420e-01 1.27649147e-01 1.27594816e-01 1.27540427e-01 + 1.27485980e-01 1.27431475e-01 1.27376912e-01 1.27322290e-01 1.27267611e-01 + 1.27212873e-01 1.27158077e-01 1.27103223e-01 1.27048310e-01 1.26993340e-01 + 1.26938311e-01 1.26883224e-01 1.26828079e-01 1.26772875e-01 1.26717614e-01 + 1.26662294e-01 1.26606916e-01 1.26551480e-01 1.26495986e-01 1.26440433e-01 + 1.26384823e-01 1.26329154e-01 1.26273427e-01 1.26217642e-01 1.26161799e-01 + 1.26105898e-01 1.26049938e-01 1.25993920e-01 1.25937845e-01 1.25881711e-01 + 1.25825519e-01 1.25769269e-01 1.25712961e-01 1.25656594e-01 1.25600170e-01 + 1.25543688e-01 1.25487147e-01 1.25430549e-01 1.25373892e-01 1.25317178e-01 + 1.25260405e-01 1.25203574e-01 1.25146686e-01 1.25089739e-01 1.25032735e-01 + 1.24975672e-01 1.24918552e-01 1.24861374e-01 1.24804137e-01 1.24746843e-01 + 1.24689491e-01 1.24632082e-01 1.24574614e-01 1.24517089e-01 1.24459505e-01 + 1.24401864e-01 1.24344166e-01 1.24286409e-01 1.24228595e-01 1.24170723e-01 + 1.24112794e-01 1.24054806e-01 1.23996762e-01 1.23938659e-01 1.23880499e-01 + 1.23822281e-01 1.23764006e-01 1.23705674e-01 1.23647284e-01 1.23588836e-01 + 1.23530331e-01 1.23471769e-01 1.23413149e-01 1.23354472e-01 1.23295737e-01 + 1.23236946e-01 1.23178097e-01 1.23119190e-01 1.23060227e-01 1.23001206e-01 + 1.22942129e-01 1.22882994e-01 1.22823802e-01 1.22764553e-01 1.22705247e-01 + 1.22645884e-01 1.22586464e-01 1.22526988e-01 1.22467454e-01 1.22407864e-01 + 1.22348217e-01 1.22288513e-01 1.22228752e-01 1.22168935e-01 1.22109061e-01 + 1.22049130e-01 1.21989143e-01 1.21929100e-01 1.21869000e-01 1.21808843e-01 + 1.21748630e-01 1.21688361e-01 1.21628036e-01 1.21567654e-01 1.21507216e-01 + 1.21446722e-01 1.21386172e-01 1.21325566e-01 1.21264904e-01 1.21204185e-01 + 1.21143411e-01 1.21082581e-01 1.21021696e-01 1.20960754e-01 1.20899757e-01 + 1.20838704e-01 1.20777596e-01 1.20716432e-01 1.20655212e-01 1.20593937e-01 + 1.20532607e-01 1.20471221e-01 1.20409780e-01 1.20348284e-01 1.20286733e-01 + 1.20225127e-01 1.20163465e-01 1.20101749e-01 1.20039978e-01 1.19978152e-01 + 1.19916271e-01 1.19854335e-01 1.19792345e-01 1.19730300e-01 1.19668200e-01 + 1.19606047e-01 1.19543838e-01 1.19481576e-01 1.19419259e-01 1.19356888e-01 + 1.19294463e-01 1.19231984e-01 1.19169450e-01 1.19106863e-01 1.19044222e-01 + 1.18981528e-01 1.18918779e-01 1.18855977e-01 1.18793122e-01 1.18730213e-01 + 1.18667250e-01 1.18604235e-01 1.18541166e-01 1.18478043e-01 1.18414868e-01 + 1.18351640e-01 1.18288359e-01 1.18225025e-01 1.18161638e-01 1.18098199e-01 + 1.18034707e-01 1.17971163e-01 1.17907566e-01 1.17843917e-01 1.17780216e-01 + 1.17716462e-01 1.17652656e-01 1.17588799e-01 1.17524889e-01 1.17460928e-01 + 1.17396915e-01 1.17332851e-01 1.17268735e-01 1.17204567e-01 1.17140349e-01 + 1.17076079e-01 1.17011757e-01 1.16947385e-01 1.16882962e-01 1.16818488e-01 + 1.16753964e-01 1.16689388e-01 1.16624762e-01 1.16560086e-01 1.16495360e-01 + 1.16430583e-01 1.16365756e-01 1.16300879e-01 1.16235952e-01 1.16170975e-01 + 1.16105949e-01 1.16040873e-01 1.15975748e-01 1.15910573e-01 1.15845349e-01 + 1.15780076e-01 1.15714754e-01 1.15649383e-01 1.15583963e-01 1.15518494e-01 + 1.15452977e-01 1.15387412e-01 1.15321798e-01 1.15256136e-01 1.15190426e-01 + 1.15124668e-01 1.15058862e-01 1.14993008e-01 1.14927107e-01 1.14861158e-01 + 1.14795162e-01 1.14729119e-01 1.14663029e-01 1.14596892e-01 1.14530707e-01 + 1.14464477e-01 1.14398199e-01 1.14331875e-01 1.14265505e-01 1.14199089e-01 + 1.14132627e-01 1.14066119e-01 1.13999565e-01 1.13932965e-01 1.13866320e-01 + 1.13799630e-01 1.13732894e-01 1.13666113e-01 1.13599288e-01 1.13532417e-01 + 1.13465503e-01 1.13398543e-01 1.13331539e-01 1.13264491e-01 1.13197399e-01 + 1.13130263e-01 1.13063084e-01 1.12995861e-01 1.12928594e-01 1.12861284e-01 + 1.12793931e-01 1.12726535e-01 1.12659096e-01 1.12591615e-01 1.12524091e-01 + 1.12456524e-01 1.12388916e-01 1.12321265e-01 1.12253573e-01 1.12185839e-01 + 1.12118063e-01 1.12050246e-01 1.11982388e-01 1.11914489e-01 1.11846549e-01 + 1.11778568e-01 1.11710547e-01 1.11642485e-01 1.11574383e-01 1.11506242e-01 + 1.11438060e-01 1.11369839e-01 1.11301578e-01 1.11233278e-01 1.11164939e-01 + 1.11096561e-01 1.11028144e-01 1.10959689e-01 1.10891195e-01 1.10822663e-01 + 1.10754093e-01 1.10685486e-01 1.10616840e-01 1.10548157e-01 1.10479437e-01 + 1.10410680e-01 1.10341886e-01 1.10273055e-01 1.10204188e-01 1.10135284e-01 + 1.10066345e-01 1.09997369e-01 1.09928358e-01 1.09859311e-01 1.09790229e-01 + 1.09721112e-01 1.09651960e-01 1.09582773e-01 1.09513552e-01 1.09444296e-01 + 1.09375007e-01 1.09305683e-01 1.09236326e-01 1.09166936e-01 1.09097512e-01 + 1.09028055e-01 1.08958566e-01 1.08889044e-01 1.08819489e-01 1.08749902e-01 + 1.08680284e-01 1.08610634e-01 1.08540952e-01 1.08471239e-01 1.08401495e-01 + 1.08331720e-01 1.08261914e-01 1.08192078e-01 1.08122212e-01 1.08052316e-01 + 1.07982391e-01 1.07912436e-01 1.07842452e-01 1.07772438e-01 1.07702397e-01 + 1.07632326e-01 1.07562227e-01 1.07492101e-01 1.07421946e-01 1.07351764e-01 + 1.07281555e-01 1.07211318e-01 1.07141055e-01 1.07070766e-01 1.07000449e-01 + 1.06930107e-01 1.06859739e-01 1.06789346e-01 1.06718927e-01 1.06648483e-01 + 1.06578015e-01 1.06507521e-01 1.06437004e-01 1.06366462e-01 1.06295897e-01 + 1.06225308e-01 1.06154696e-01 1.06084061e-01 1.06013403e-01 1.05942723e-01 + 1.05872021e-01 1.05801296e-01 1.05730551e-01 1.05659783e-01 1.05588995e-01 + 1.05518186e-01 1.05447356e-01 1.05376506e-01 1.05305636e-01 1.05234746e-01 + 1.05163837e-01 1.05092908e-01 1.05021961e-01 1.04950995e-01 1.04880011e-01 + 1.04809009e-01 1.04737989e-01 1.04666951e-01 1.04595897e-01 1.04524826e-01 + 1.04453738e-01 1.04382633e-01 1.04311513e-01 1.04240377e-01 1.04169226e-01 + 1.04098060e-01 1.04026878e-01 1.03955683e-01 1.03884473e-01 1.03813249e-01 + 1.03742012e-01 1.03670761e-01 1.03599498e-01 1.03528222e-01 1.03456933e-01 + 1.03385633e-01 1.03314321e-01 1.03242997e-01 1.03171662e-01 1.03100317e-01 + 1.03028961e-01 1.02957595e-01 1.02886219e-01 1.02814833e-01 1.02743439e-01 + 1.02672036e-01 1.02600624e-01 1.02529204e-01 1.02457776e-01 1.02386340e-01 + 1.02314898e-01 1.02243448e-01 1.02171992e-01 1.02100530e-01 1.02029062e-01 + 1.01957589e-01 1.01886110e-01 1.01814626e-01 1.01743138e-01 1.01671646e-01 + 1.01600150e-01 1.01528651e-01 1.01457148e-01 1.01385643e-01 1.01314135e-01 + 1.01242625e-01 1.01171114e-01 1.01099601e-01 1.01028087e-01 1.00956573e-01 + 1.00885058e-01 1.00813543e-01 1.00742029e-01 1.00670515e-01 1.00599003e-01 + 1.00527492e-01 1.00455983e-01 1.00384477e-01 1.00312973e-01 1.00241472e-01 + 1.00169974e-01 1.00098480e-01 1.00026990e-01 9.99555050e-02 9.98840245e-02 + 9.98125493e-02 9.97410797e-02 9.96696161e-02 9.95981588e-02 9.95267084e-02 + 9.94552650e-02 9.93838292e-02 9.93124014e-02 9.92409818e-02 9.91695709e-02 + 9.90981691e-02 9.90267768e-02 9.89553944e-02 9.88840222e-02 9.88126607e-02 + 9.87413103e-02 9.86699713e-02 9.85986441e-02 9.85273293e-02 9.84560271e-02 + 9.83847379e-02 9.83134622e-02 9.82422004e-02 9.81709529e-02 9.80997201e-02 + 9.80285023e-02 9.79573001e-02 9.78861138e-02 9.78149439e-02 9.77437907e-02 + 9.76726547e-02 9.76015362e-02 9.75304358e-02 9.74593538e-02 9.73882907e-02 + 9.73172468e-02 9.72462226e-02 9.71752186e-02 9.71042351e-02 9.70332725e-02 + 9.69623314e-02 9.68914121e-02 9.68205151e-02 9.67496408e-02 9.66787897e-02 + 9.66079621e-02 9.65371585e-02 9.64663793e-02 9.63956251e-02 9.63248961e-02 + 9.62541930e-02 9.61835160e-02 9.61128657e-02 9.60422425e-02 9.59716469e-02 + 9.59010792e-02 9.58305400e-02 9.57600297e-02 9.56895487e-02 9.56190976e-02 + 9.55486767e-02 9.54782865e-02 9.54079274e-02 9.53376000e-02 9.52673047e-02 + 9.51970419e-02 9.51268121e-02 9.50566158e-02 9.49864534e-02 9.49163254e-02 + 9.48462322e-02 9.47761744e-02 9.47061524e-02 9.46361667e-02 9.45662176e-02 + 9.44963058e-02 9.44264317e-02 9.43565957e-02 9.42867984e-02 9.42170402e-02 + 9.41473215e-02 9.40776429e-02 9.40080049e-02 9.39384078e-02 9.38688523e-02 + 9.37993388e-02 9.37298677e-02 9.36604397e-02 9.35910550e-02 9.35217143e-02 + 9.34524180e-02 9.33831666e-02 9.33139606e-02 9.32448006e-02 9.31756869e-02 + 9.31066201e-02 9.30376006e-02 9.29686291e-02 9.28997059e-02 9.28308316e-02 + 9.27620066e-02 9.26932315e-02 9.26245068e-02 9.25558330e-02 9.24872106e-02 + 9.24186400e-02 9.23501218e-02 9.22816566e-02 9.22132447e-02 9.21448867e-02 + 9.20765832e-02 9.20083346e-02 9.19401414e-02 9.18720042e-02 9.18039235e-02 + 9.17358998e-02 9.16679335e-02 9.16000253e-02 9.15321756e-02 9.14643850e-02 + 9.13966540e-02 9.13289830e-02 9.12613727e-02 9.11938235e-02 9.11263360e-02 + 9.10589106e-02 9.09915480e-02 9.09242486e-02 9.08570130e-02 9.07898417e-02 + 9.07227352e-02 9.06556940e-02 9.05887187e-02 9.05218099e-02 9.04549680e-02 + 9.03881935e-02 9.03214871e-02 9.02548492e-02 9.01882804e-02 9.01217813e-02 + 9.00553522e-02 8.99889939e-02 8.99227068e-02 8.98564915e-02 8.97903485e-02 + 8.97242783e-02 8.96582816e-02 8.95923588e-02 8.95265104e-02 8.94607371e-02 + 8.93950394e-02 8.93294177e-02 8.92638728e-02 8.91984050e-02 8.91330150e-02 + 8.90677033e-02 8.90024705e-02 8.89373170e-02 8.88722435e-02 8.88072505e-02 + 8.87423386e-02 8.86775083e-02 8.86127602e-02 8.85480947e-02 8.84835126e-02 + 8.84190142e-02 8.83546003e-02 8.82902712e-02 8.82260277e-02 8.81618702e-02 + 8.80977994e-02 8.80338157e-02 8.79699197e-02 8.79061120e-02 8.78423932e-02 + 8.77787637e-02 8.77152243e-02 8.76517753e-02 8.75884175e-02 8.75251513e-02 + 8.74619773e-02 8.73988961e-02 8.73359083e-02 8.72730143e-02 8.72102149e-02 + 8.71475104e-02 8.70849016e-02 8.70223890e-02 8.69599731e-02 8.68976544e-02 + 8.68354337e-02 8.67733114e-02 8.67112881e-02 8.66493644e-02 8.65875409e-02 + 8.65258180e-02 8.64641964e-02 8.64026767e-02 8.63412594e-02 8.62799451e-02 + 8.62187344e-02 8.61576278e-02 8.60966259e-02 8.60357293e-02 8.59749386e-02 + 8.59142542e-02 8.58536769e-02 8.57932071e-02 8.57328455e-02 8.56725925e-02 + 8.56124489e-02 8.55524151e-02 8.54924918e-02 8.54326794e-02 8.53729787e-02 + 8.53133900e-02 8.52539141e-02 8.51945515e-02 8.51353028e-02 8.50761685e-02 + 8.50171493e-02 8.49582456e-02 8.48994581e-02 8.48407874e-02 8.47822340e-02 + 8.47237984e-02 8.46654813e-02 8.46072833e-02 8.45492049e-02 8.44912466e-02 + 8.44334092e-02 8.43756930e-02 8.43180988e-02 8.42606271e-02 8.42032784e-02 + 8.41460533e-02 8.40889525e-02 8.40319764e-02 8.39751257e-02 8.39184009e-02 + 8.38618026e-02 8.38053314e-02 8.37489878e-02 8.36927724e-02 8.36366859e-02 + 8.35807286e-02 8.35249013e-02 8.34692046e-02 8.34136388e-02 8.33582048e-02 + 8.33029029e-02 8.32477338e-02 8.31926981e-02 8.31377963e-02 8.30830290e-02 + 8.30283967e-02 8.29739001e-02 8.29195397e-02 8.28653161e-02 8.28112297e-02 + 8.27572813e-02 8.27034714e-02 8.26498005e-02 8.25962691e-02 8.25428780e-02 + 8.24896276e-02 8.24365184e-02 8.23835511e-02 8.23307263e-02 8.22780444e-02 + 8.22255060e-02 8.21731118e-02 8.21208622e-02 8.20687579e-02 8.20167993e-02 + 8.19649871e-02 8.19133218e-02 8.18618039e-02 8.18104341e-02 8.17592128e-02 + 8.17081407e-02 8.16572182e-02 8.16064460e-02 8.15558245e-02 8.15053545e-02 + 8.14550363e-02 8.14048705e-02 8.13548578e-02 8.13049986e-02 8.12552935e-02 + 8.12057430e-02 8.11563478e-02 8.11071082e-02 8.10580250e-02 8.10090986e-02 + 8.09603295e-02 8.09117184e-02 8.08632657e-02 8.08149721e-02 8.07668379e-02 + 8.07188639e-02 8.06710504e-02 8.06233982e-02 8.05759075e-02 8.05285792e-02 + 8.04814136e-02 8.04344112e-02 8.03875727e-02 8.03408986e-02 8.02943893e-02 + 8.02480455e-02 8.02018675e-02 8.01558561e-02 8.01100116e-02 8.00643347e-02 + 8.00188258e-02 7.99734855e-02 7.99283142e-02 7.98833126e-02 7.98384810e-02 + 7.97938201e-02 7.97493304e-02 7.97050123e-02 7.96608664e-02 7.96168932e-02 + 7.95730933e-02 7.95294670e-02 7.94860149e-02 7.94427376e-02 7.93996355e-02 + 7.93567091e-02 7.93139590e-02 7.92713856e-02 7.92289895e-02 7.91867711e-02 + 7.91447310e-02 7.91028695e-02 7.90611873e-02 7.90196849e-02 7.89783626e-02 + 7.89372210e-02 7.88962607e-02 7.88554819e-02 7.88148854e-02 7.87744715e-02 + 7.87342407e-02 7.86941935e-02 7.86543304e-02 7.86146519e-02 7.85751584e-02 + 7.85358504e-02 7.84967284e-02 7.84577929e-02 7.84190442e-02 7.83804830e-02 + 7.83421096e-02 7.83039245e-02 7.82659282e-02 7.82281212e-02 7.81905038e-02 + 7.81530766e-02 7.81158400e-02 7.80787945e-02 7.80419405e-02 7.80052784e-02 + 7.79688088e-02 7.79325320e-02 7.78964485e-02 7.78605587e-02 7.78248631e-02 + 7.77893622e-02 7.77540563e-02 7.77189459e-02 7.76840314e-02 7.76493132e-02 + 7.76147919e-02 7.75804677e-02 7.75463412e-02 7.75124127e-02 7.74786828e-02 + 7.74451517e-02 7.74118199e-02 7.73786878e-02 7.73457559e-02 7.73130245e-02 + 7.72804941e-02 7.72481650e-02 7.72160377e-02 7.71841125e-02 7.71523900e-02 + 7.71208703e-02 7.70895541e-02 7.70584416e-02 7.70275332e-02 7.69968293e-02 + 7.69663304e-02 7.69360368e-02 7.69059488e-02 7.68760670e-02 7.68463915e-02 + 7.68169229e-02 7.67876614e-02 7.67586075e-02 7.67297616e-02 7.67011239e-02 + 7.66726949e-02 7.66444749e-02 7.66164642e-02 7.65886633e-02 7.65610725e-02 + 7.65336921e-02 7.65065225e-02 7.64795641e-02 7.64528171e-02 7.64262819e-02 + 7.63999589e-02 7.63738484e-02 7.63479508e-02 7.63222662e-02 7.62967952e-02 + 7.62715380e-02 7.62464950e-02 7.62216664e-02 7.61970526e-02 7.61726539e-02 + 7.61484706e-02 7.61245031e-02 7.61007516e-02 7.60772164e-02 7.60538979e-02 + 7.60307964e-02 7.60079121e-02 7.59852453e-02 7.59627964e-02 7.59405657e-02 + 7.59185533e-02 7.58967597e-02 7.58751851e-02 7.58538297e-02 7.58326939e-02 + 7.58117779e-02 7.57910820e-02 7.57706065e-02 7.57503516e-02 7.57303176e-02 + 7.57105048e-02 7.56909134e-02 7.56715437e-02 7.56523959e-02 7.56334703e-02 + 7.56147671e-02 7.55962866e-02 7.55780290e-02 7.55599946e-02 7.55421835e-02 + 7.55245961e-02 7.55072326e-02 7.54900931e-02 7.54731780e-02 7.54564874e-02 + 7.54400215e-02 7.54237806e-02 7.54077649e-02 7.53919746e-02 7.53764099e-02 + 7.53610711e-02 7.53459582e-02 7.53310716e-02 7.53164113e-02 7.53019777e-02 + 7.52877708e-02 7.52737910e-02 7.52600383e-02 7.52465130e-02 7.52332152e-02 + 7.52201451e-02 7.52073028e-02 7.51946887e-02 7.51823027e-02 7.51701451e-02 + 7.51582161e-02 7.51465158e-02 7.51350443e-02 7.51238019e-02 7.51127886e-02 + 7.51020046e-02 7.50914500e-02 7.50811251e-02 7.50710299e-02 7.50611645e-02 + 7.50515291e-02 7.50421239e-02 7.50329489e-02 7.50240043e-02 7.50152901e-02 + 7.50068066e-02 7.49985538e-02 7.49905318e-02 7.49827407e-02 7.49751807e-02 + 7.49678518e-02 7.49607542e-02 7.49538879e-02 7.49472530e-02 7.49408496e-02 + 7.49346779e-02 7.49287378e-02 7.49230295e-02 7.49175530e-02 7.49123084e-02 + 7.49072958e-02 7.49025153e-02 7.48979669e-02 7.48936506e-02 7.48895666e-02 + 7.48857148e-02 7.48820954e-02 7.48787084e-02 7.48755538e-02 7.48726317e-02 + 7.48699421e-02 7.48674851e-02 7.48652606e-02 7.48632687e-02 7.48615095e-02 + 7.48599830e-02 7.48586891e-02 7.48576279e-02 7.48567994e-02 7.48562037e-02 + 7.48558407e-02 7.48557104e-02 7.48558129e-02 7.48561481e-02 7.48567160e-02 + 7.48575167e-02 7.48585501e-02 7.48598162e-02 7.48613149e-02 7.48630464e-02 + 7.48650104e-02 7.48672071e-02 7.48696364e-02 7.48722982e-02 7.48751926e-02 + 7.48783194e-02 7.48816786e-02 7.48852703e-02 7.48890943e-02 7.48931506e-02 + 7.48974391e-02 7.49019598e-02 7.49067126e-02 7.49116975e-02 7.49169143e-02 + 7.49223631e-02 7.49280438e-02 7.49339562e-02 7.49401003e-02 7.49464760e-02 + 7.49530832e-02 7.49599219e-02 7.49669919e-02 7.49742931e-02 7.49818255e-02 + 7.49895890e-02 7.49975834e-02 7.50058087e-02 7.50142646e-02 7.50229512e-02 + 7.50318684e-02 7.50410158e-02 7.50503936e-02 7.50600015e-02 7.50698394e-02 + 7.50799072e-02 7.50902047e-02 7.51007318e-02 7.51114884e-02 7.51224743e-02 + 7.51336894e-02 7.51451335e-02 7.51568065e-02 7.51687082e-02 7.51808385e-02 + 7.51931972e-02 7.52057841e-02 7.52185991e-02 7.52316420e-02 7.52449126e-02 + 7.52584108e-02 7.52721363e-02 7.52860890e-02 7.53002688e-02 7.53146753e-02 + 7.53293085e-02 7.53441681e-02 7.53592540e-02 7.53745659e-02 7.53901036e-02 + 7.54058670e-02 7.54218558e-02 7.54380698e-02 7.54545087e-02 7.54711725e-02 + 7.54880609e-02 7.55051735e-02 7.55225103e-02 7.55400710e-02 7.55578553e-02 + 7.55758631e-02 7.55940940e-02 7.56125479e-02 7.56312245e-02 7.56501236e-02 + 7.56692448e-02 7.56885881e-02 7.57081530e-02 7.57279394e-02 7.57479470e-02 + 7.57681755e-02 7.57886247e-02 7.58092942e-02 7.58301840e-02 7.58512935e-02 + 7.58726227e-02 7.58941712e-02 7.59159386e-02 7.59379249e-02 7.59601296e-02 + 7.59825524e-02 7.60051932e-02 7.60280515e-02 7.60511271e-02 7.60744197e-02 + 7.60979290e-02 7.61216547e-02 7.61455964e-02 7.61697540e-02 7.61941269e-02 + 7.62187151e-02 7.62435180e-02 7.62685354e-02 7.62937671e-02 7.63192126e-02 + 7.63448716e-02 7.63707438e-02 7.63968289e-02 7.64231266e-02 7.64496364e-02 + 7.64763581e-02 7.65032913e-02 7.65304357e-02 7.65577909e-02 7.65853566e-02 + 7.66131325e-02 7.66411181e-02 7.66693131e-02 7.66977171e-02 7.67263299e-02 + 7.67551510e-02 7.67841801e-02 7.68134168e-02 7.68428607e-02 7.68725114e-02 + 7.69023687e-02 7.69324320e-02 7.69627011e-02 7.69931756e-02 7.70238549e-02 + 7.70547389e-02 7.70858271e-02 7.71171190e-02 7.71486144e-02 7.71803127e-02 + 7.72122137e-02 7.72443169e-02 7.72766219e-02 7.73091283e-02 7.73418357e-02 + 7.73747437e-02 7.74078518e-02 7.74411598e-02 7.74746671e-02 7.75083734e-02 + 7.75422781e-02 7.75763810e-02 7.76106816e-02 7.76451794e-02 7.76798741e-02 + 7.77147651e-02 7.77498522e-02 7.77851347e-02 7.78206124e-02 7.78562848e-02 + 7.78921513e-02 7.79282117e-02 7.79644654e-02 7.80009121e-02 7.80375512e-02 + 7.80743823e-02 7.81114050e-02 7.81486188e-02 7.81860233e-02 7.82236179e-02 + 7.82614023e-02 7.82993761e-02 7.83375386e-02 7.83758895e-02 7.84144284e-02 + 7.84531546e-02 7.84920679e-02 7.85311676e-02 7.85704534e-02 7.86099248e-02 + 7.86495813e-02 7.86894223e-02 7.87294475e-02 7.87696564e-02 7.88100485e-02 + 7.88506232e-02 7.88913802e-02 7.89323189e-02 7.89734389e-02 7.90147396e-02 + 7.90562205e-02 7.90978813e-02 7.91397213e-02 7.91817402e-02 7.92239373e-02 + 7.92663122e-02 7.93088645e-02 7.93515935e-02 7.93944988e-02 7.94375800e-02 + 7.94808364e-02 7.95242676e-02 7.95678731e-02 7.96116524e-02 7.96556049e-02 + 7.96997302e-02 7.97440277e-02 7.97884970e-02 7.98331374e-02 7.98779486e-02 + 7.99229300e-02 7.99680810e-02 8.00134012e-02 8.00588900e-02 8.01045468e-02 + 8.01503713e-02 8.01963628e-02 8.02425209e-02 8.02888450e-02 8.03353345e-02 + 8.03819890e-02 8.04288079e-02 8.04757907e-02 8.05229368e-02 8.05702458e-02 + 8.06177170e-02 8.06653500e-02 8.07131443e-02 8.07610992e-02 8.08092142e-02 + 8.08574888e-02 8.09059225e-02 8.09545148e-02 8.10032650e-02 8.10521726e-02 + 8.11012372e-02 8.11504581e-02 8.11998347e-02 8.12493667e-02 8.12990534e-02 + 8.13488942e-02 8.13988886e-02 8.14490361e-02 8.14993361e-02 8.15497881e-02 + 8.16003915e-02 8.16511457e-02 8.17020502e-02 8.17531045e-02 8.18043080e-02 + 8.18556601e-02 8.19071604e-02 8.19588081e-02 8.20106028e-02 8.20625439e-02 + 8.21146309e-02 8.21668631e-02 8.22192401e-02 8.22717613e-02 8.23244260e-02 + 8.23772339e-02 8.24301842e-02 8.24832764e-02 8.25365100e-02 8.25898843e-02 + 8.26433990e-02 8.26970532e-02 8.27508466e-02 8.28047785e-02 8.28588484e-02 + 8.29130557e-02 8.29673998e-02 8.30218801e-02 8.30764962e-02 8.31312474e-02 + 8.31861332e-02 8.32411529e-02 8.32963061e-02 8.33515922e-02 8.34070105e-02 + 8.34625605e-02 8.35182417e-02 8.35740534e-02 8.36299951e-02 8.36860663e-02 + 8.37422663e-02 8.37985946e-02 8.38550506e-02 8.39116338e-02 8.39683435e-02 + 8.40251792e-02 8.40821403e-02 8.41392263e-02 8.41964365e-02 8.42537705e-02 + 8.43112275e-02 8.43688072e-02 8.44265088e-02 8.44843318e-02 8.45422756e-02 + 8.46003397e-02 8.46585235e-02 8.47168264e-02 8.47752478e-02 8.48337872e-02 + 8.48924439e-02 8.49512175e-02 8.50101073e-02 8.50691128e-02 8.51282334e-02 + 8.51874685e-02 8.52468175e-02 8.53062799e-02 8.53658551e-02 8.54255425e-02 + 8.54853415e-02 8.55452516e-02 8.56052723e-02 8.56654028e-02 8.57256427e-02 + 8.57859914e-02 8.58464483e-02 8.59070128e-02 8.59676844e-02 8.60284625e-02 + 8.60893465e-02 8.61503358e-02 8.62114299e-02 8.62726282e-02 8.63339302e-02 + 8.63953352e-02 8.64568427e-02 8.65184522e-02 8.65801629e-02 8.66419745e-02 + 8.67038863e-02 8.67658977e-02 8.68280082e-02 8.68902172e-02 8.69525242e-02 + 8.70149285e-02 8.70774296e-02 8.71400270e-02 8.72027200e-02 8.72655081e-02 + 8.73283908e-02 8.73913675e-02 8.74544376e-02 8.75176005e-02 8.75808557e-02 + 8.76442026e-02 8.77076407e-02 8.77711694e-02 8.78347881e-02 8.78984963e-02 + 8.79622934e-02 8.80261789e-02 8.80901521e-02 8.81542126e-02 8.82183598e-02 + 8.82825930e-02 8.83469119e-02 8.84113157e-02 8.84758040e-02 8.85403762e-02 + 8.86050317e-02 8.86697700e-02 8.87345905e-02 8.87994927e-02 8.88644761e-02 + 8.89295400e-02 8.89946839e-02 8.90599073e-02 8.91252096e-02 8.91905903e-02 + 8.92560488e-02 8.93215845e-02 8.93871970e-02 8.94528857e-02 8.95186500e-02 + 8.95844894e-02 8.96504034e-02 8.97163914e-02 8.97824528e-02 8.98485871e-02 + 8.99147938e-02 8.99810724e-02 9.00474222e-02 9.01138428e-02 9.01803336e-02 + 9.02468942e-02 9.03135238e-02 9.03802221e-02 9.04469884e-02 9.05138223e-02 + 9.05807232e-02 9.06476906e-02 9.07147239e-02 9.07818226e-02 9.08489862e-02 + 9.09162142e-02 9.09835060e-02 9.10508611e-02 9.11182790e-02 9.11857591e-02 + 9.12533009e-02 9.13209040e-02 9.13885677e-02 9.14562916e-02 9.15240751e-02 + 9.15919178e-02 9.16598190e-02 9.17277784e-02 9.17957953e-02 9.18638692e-02 + 9.19319997e-02 9.20001862e-02 9.20684282e-02 9.21367252e-02 9.22050767e-02 + 9.22734821e-02 9.23419411e-02 9.24104530e-02 9.24790173e-02 9.25476336e-02 + 9.26163013e-02 9.26850199e-02 9.27537890e-02 9.28226080e-02 9.28914765e-02 + 9.29603938e-02 9.30293596e-02 9.30983734e-02 9.31674346e-02 9.32365427e-02 + 9.33056973e-02 9.33748978e-02 9.34441438e-02 9.35134347e-02 9.35827701e-02 + 9.36521496e-02 9.37215725e-02 9.37910385e-02 9.38605469e-02 9.39300975e-02 + 9.39996895e-02 9.40693227e-02 9.41389965e-02 9.42087104e-02 9.42784639e-02 + 9.43482566e-02 9.44180880e-02 9.44879576e-02 9.45578649e-02 9.46278095e-02 + 9.46977909e-02 9.47678086e-02 9.48378622e-02 9.49079511e-02 9.49780750e-02 + 9.50482333e-02 9.51184256e-02 9.51886514e-02 9.52589103e-02 9.53292017e-02 + 9.53995254e-02 9.54698806e-02 9.55402671e-02 9.56106844e-02 9.56811320e-02 + 9.57516094e-02 9.58221162e-02 9.58926520e-02 9.59632163e-02 9.60338086e-02 + 9.61044286e-02 9.61750756e-02 9.62457494e-02 9.63164495e-02 9.63871754e-02 + 9.64579266e-02 9.65287028e-02 9.65995035e-02 9.66703283e-02 9.67411766e-02 + 9.68120482e-02 9.68829425e-02 9.69538592e-02 9.70247977e-02 9.70957577e-02 + 9.71667387e-02 9.72377403e-02 9.73087621e-02 9.73798037e-02 9.74508645e-02 + 9.75219443e-02 9.75930426e-02 9.76641589e-02 9.77352928e-02 9.78064440e-02 + 9.78776119e-02 9.79487963e-02 9.80199966e-02 9.80912125e-02 9.81624436e-02 + 9.82336894e-02 9.83049495e-02 9.83762235e-02 9.84475111e-02 9.85188118e-02 + 9.85901251e-02 9.86614508e-02 9.87327884e-02 9.88041375e-02 9.88754977e-02 + 9.89468687e-02 9.90182499e-02 9.90896410e-02 9.91610417e-02 9.92324515e-02 + 9.93038701e-02 9.93752970e-02 9.94467318e-02 9.95181743e-02 9.95896239e-02 + 9.96610804e-02 9.97325432e-02 9.98040122e-02 9.98754867e-02 9.99469666e-02 + 1.00018451e-01 1.00089941e-01 1.00161434e-01 1.00232931e-01 1.00304432e-01 + 1.00375936e-01 1.00447442e-01 1.00518951e-01 1.00590461e-01 1.00661973e-01 + 1.00733487e-01 1.00805001e-01 1.00876516e-01 1.00948030e-01 1.01019545e-01 + 1.01091059e-01 1.01162572e-01 1.01234084e-01 1.01305594e-01 1.01377102e-01 + 1.01448607e-01 1.01520110e-01 1.01591610e-01 1.01663106e-01 1.01734599e-01 + 1.01806088e-01 1.01877572e-01 1.01949051e-01 1.02020525e-01 1.02091994e-01 + 1.02163457e-01 1.02234914e-01 1.02306364e-01 1.02377807e-01 1.02449244e-01 + 1.02520672e-01 1.02592093e-01 1.02663506e-01 1.02734911e-01 1.02806306e-01 + 1.02877693e-01 1.02949070e-01 1.03020437e-01 1.03091794e-01 1.03163141e-01 + 1.03234477e-01 1.03305802e-01 1.03377115e-01 1.03448417e-01 1.03519707e-01 + 1.03590985e-01 1.03662250e-01 1.03733502e-01 1.03804741e-01 1.03875966e-01 + 1.03947178e-01 1.04018375e-01 1.04089558e-01 1.04160726e-01 1.04231879e-01 + 1.04303017e-01 1.04374139e-01 1.04445245e-01 1.04516335e-01 1.04587409e-01 + 1.04658465e-01 1.04729504e-01 1.04800527e-01 1.04871531e-01 1.04942517e-01 + 1.05013485e-01 1.05084435e-01 1.05155365e-01 1.05226277e-01 1.05297169e-01 + 1.05368041e-01 1.05438894e-01 1.05509726e-01 1.05580538e-01 1.05651329e-01 + 1.05722099e-01 1.05792847e-01 1.05863574e-01 1.05934279e-01 1.06004962e-01 + 1.06075622e-01 1.06146260e-01 1.06216875e-01 1.06287467e-01 1.06358035e-01 + 1.06428579e-01 1.06499100e-01 1.06569596e-01 1.06640067e-01 1.06710514e-01 + 1.06780936e-01 1.06851332e-01 1.06921703e-01 1.06992049e-01 1.07062368e-01 + 1.07132661e-01 1.07202927e-01 1.07273167e-01 1.07343379e-01 1.07413565e-01 + 1.07483722e-01 1.07553852e-01 1.07623955e-01 1.07694028e-01 1.07764074e-01 + 1.07834090e-01 1.07904078e-01 1.07974036e-01 1.08043966e-01 1.08113865e-01 + 1.08183735e-01 1.08253574e-01 1.08323383e-01 1.08393162e-01 1.08462910e-01 + 1.08532626e-01 1.08602312e-01 1.08671966e-01 1.08741588e-01 1.08811179e-01 + 1.08880737e-01 1.08950263e-01 1.09019757e-01 1.09089217e-01 1.09158645e-01 + 1.09228040e-01 1.09297401e-01 1.09366728e-01 1.09436022e-01 1.09505281e-01 + 1.09574507e-01 1.09643698e-01 1.09712854e-01 1.09781975e-01 1.09851061e-01 + 1.09920112e-01 1.09989128e-01 1.10058108e-01 1.10127052e-01 1.10195959e-01 + 1.10264831e-01 1.10333666e-01 1.10402465e-01 1.10471226e-01 1.10539951e-01 + 1.10608638e-01 1.10677288e-01 1.10745900e-01 1.10814475e-01 1.10883011e-01 + 1.10951510e-01 1.11019970e-01 1.11088391e-01 1.11156774e-01 1.11225117e-01 + 1.11293422e-01 1.11361687e-01 1.11429913e-01 1.11498100e-01 1.11566246e-01 + 1.11634353e-01 1.11702419e-01 1.11770445e-01 1.11838431e-01 1.11906376e-01 + 1.11974280e-01 1.12042143e-01 1.12109965e-01 1.12177745e-01 1.12245484e-01 + 1.12313182e-01 1.12380837e-01 1.12448451e-01 1.12516022e-01 1.12583551e-01 + 1.12651038e-01 1.12718482e-01 1.12785883e-01 1.12853241e-01 1.12920556e-01 + 1.12987828e-01 1.13055056e-01 1.13122241e-01 1.13189382e-01 1.13256480e-01 + 1.13323533e-01 1.13390542e-01 1.13457507e-01 1.13524427e-01 1.13591303e-01 + 1.13658134e-01 1.13724920e-01 1.13791661e-01 1.13858356e-01 1.13925007e-01 + 1.13991612e-01 1.14058171e-01 1.14124685e-01 1.14191153e-01 1.14257575e-01 + 1.14323950e-01 1.14390280e-01 1.14456562e-01 1.14522799e-01 1.14588988e-01 + 1.14655131e-01 1.14721227e-01 1.14787276e-01 1.14853278e-01 1.14919232e-01 + 1.14985139e-01 1.15050998e-01 1.15116810e-01 1.15182574e-01 1.15248290e-01 + 1.15313957e-01 1.15379577e-01 1.15445148e-01 1.15510671e-01 1.15576146e-01 + 1.15641571e-01 1.15706948e-01 1.15772276e-01 1.15837555e-01 1.15902785e-01 + 1.15967965e-01 1.16033097e-01 1.16098179e-01 1.16163211e-01 1.16228193e-01 + 1.16293126e-01 1.16358009e-01 1.16422842e-01 1.16487625e-01 1.16552357e-01 + 1.16617040e-01 1.16681672e-01 1.16746253e-01 1.16810784e-01 1.16875264e-01 + 1.16939693e-01 1.17004071e-01 1.17068398e-01 1.17132674e-01 1.17196899e-01 + 1.17261073e-01 1.17325195e-01 1.17389266e-01 1.17453285e-01 1.17517252e-01 + 1.17581168e-01 1.17645032e-01 1.17708843e-01 1.17772603e-01 1.17836311e-01 + 1.17899966e-01 1.17963569e-01 1.18027120e-01 1.18090618e-01 1.18154064e-01 + 1.18217457e-01 1.18280797e-01 1.18344084e-01 1.18407319e-01 1.18470500e-01 + 1.18533629e-01 1.18596704e-01 1.18659726e-01 1.18722695e-01 1.18785610e-01 + 1.18848472e-01 1.18911281e-01 1.18974035e-01 1.19036736e-01 1.19099384e-01 + 1.03953624e+00 1.03772749e+00 1.03592023e+00 1.03411445e+00 1.03231016e+00 + 1.03050735e+00 1.02870603e+00 1.02690620e+00 1.02510785e+00 1.02331100e+00 + 1.02151562e+00 1.01972174e+00 1.01792935e+00 1.01613844e+00 1.01434902e+00 + 1.01256110e+00 1.01077466e+00 1.00898971e+00 1.00720626e+00 1.00542429e+00 + 1.00364382e+00 1.00186484e+00 1.00008735e+00 9.98311355e-01 9.96536852e-01 + 9.94763842e-01 9.92992326e-01 9.91222304e-01 9.89453777e-01 9.87686744e-01 + 9.85921207e-01 9.84157165e-01 9.82394619e-01 9.80633570e-01 9.78874017e-01 + 9.77115962e-01 9.75359404e-01 9.73604344e-01 9.71850782e-01 9.70098719e-01 + 9.68348155e-01 9.66599090e-01 9.64851525e-01 9.63105460e-01 9.61360895e-01 + 9.59617832e-01 9.57876269e-01 9.56136208e-01 9.54397649e-01 9.52660593e-01 + 9.50925039e-01 9.49190988e-01 9.47458441e-01 9.45727397e-01 9.43997858e-01 + 9.42269823e-01 9.40543293e-01 9.38818268e-01 9.37094749e-01 9.35372736e-01 + 9.33652230e-01 9.31933230e-01 9.30215737e-01 9.28499752e-01 9.26785274e-01 + 9.25072305e-01 9.23360844e-01 9.21650893e-01 9.19942450e-01 9.18235517e-01 + 9.16530094e-01 9.14826182e-01 9.13123780e-01 9.11422890e-01 9.09723511e-01 + 9.08025644e-01 9.06329289e-01 9.04634446e-01 9.02941117e-01 9.01249300e-01 + 8.99558998e-01 8.97870209e-01 8.96182935e-01 8.94497176e-01 8.92812931e-01 + 8.91130202e-01 8.89448989e-01 8.87769292e-01 8.86091112e-01 8.84414448e-01 + 8.82739302e-01 8.81065673e-01 8.79393562e-01 8.77722970e-01 8.76053896e-01 + 8.74386341e-01 8.72720306e-01 8.71055790e-01 8.69392795e-01 8.67731320e-01 + 8.66071366e-01 8.64412932e-01 8.62756021e-01 8.61100631e-01 8.59446764e-01 + 8.57794419e-01 8.56143597e-01 8.54494298e-01 8.52846523e-01 8.51200272e-01 + 8.49555545e-01 8.47912343e-01 8.46270666e-01 8.44630515e-01 8.42991889e-01 + 8.41354789e-01 8.39719216e-01 8.38085170e-01 8.36452650e-01 8.34821658e-01 + 8.33192195e-01 8.31564259e-01 8.29937852e-01 8.28312973e-01 8.26689624e-01 + 8.25067805e-01 8.23447515e-01 8.21828756e-01 8.20211528e-01 8.18595830e-01 + 8.16981664e-01 8.15369029e-01 8.13757927e-01 8.12148357e-01 8.10540319e-01 + 8.08933815e-01 8.07328844e-01 8.05725406e-01 8.04123503e-01 8.02523135e-01 + 8.00924301e-01 7.99327002e-01 7.97731239e-01 7.96137011e-01 7.94544320e-01 + 7.92953165e-01 7.91363547e-01 7.89775466e-01 7.88188923e-01 7.86603918e-01 + 7.85020450e-01 7.83438522e-01 7.81858132e-01 7.80279281e-01 7.78701970e-01 + 7.77126199e-01 7.75551968e-01 7.73979278e-01 7.72408129e-01 7.70838521e-01 + 7.69270454e-01 7.67703930e-01 7.66138947e-01 7.64575508e-01 7.63013611e-01 + 7.61453258e-01 7.59894448e-01 7.58337182e-01 7.56781460e-01 7.55227283e-01 + 7.53674651e-01 7.52123565e-01 7.50574024e-01 7.49026029e-01 7.47479580e-01 + 7.45934678e-01 7.44391322e-01 7.42849514e-01 7.41309254e-01 7.39770542e-01 + 7.38233378e-01 7.36697762e-01 7.35163696e-01 7.33631179e-01 7.32100211e-01 + 7.30570794e-01 7.29042926e-01 7.27516610e-01 7.25991844e-01 7.24468629e-01 + 7.22946966e-01 7.21426855e-01 7.19908297e-01 7.18391291e-01 7.16875837e-01 + 7.15361937e-01 7.13849591e-01 7.12338798e-01 7.10829560e-01 7.09321876e-01 + 7.07815747e-01 7.06311174e-01 7.04808155e-01 7.03306693e-01 7.01806787e-01 + 7.00308437e-01 6.98811644e-01 6.97316408e-01 6.95822730e-01 6.94330610e-01 + 6.92840047e-01 6.91351043e-01 6.89863598e-01 6.88377712e-01 6.86893385e-01 + 6.85410618e-01 6.83929411e-01 6.82449765e-01 6.80971679e-01 6.79495154e-01 + 6.78020190e-01 6.76546789e-01 6.75074949e-01 6.73604671e-01 6.72135956e-01 + 6.70668804e-01 6.69203215e-01 6.67739189e-01 6.66276728e-01 6.64815830e-01 + 6.63356498e-01 6.61898730e-01 6.60442527e-01 6.58987889e-01 6.57534818e-01 + 6.56083312e-01 6.54633373e-01 6.53185001e-01 6.51738195e-01 6.50292957e-01 + 6.48849287e-01 6.47407184e-01 6.45966650e-01 6.44527685e-01 6.43090288e-01 + 6.41654460e-01 6.40220202e-01 6.38787514e-01 6.37356396e-01 6.35926849e-01 + 6.34498872e-01 6.33072467e-01 6.31647633e-01 6.30224370e-01 6.28802680e-01 + 6.27382561e-01 6.25964016e-01 6.24547043e-01 6.23131644e-01 6.21717818e-01 + 6.20305566e-01 6.18894889e-01 6.17485785e-01 6.16078257e-01 6.14672303e-01 + 6.13267925e-01 6.11865123e-01 6.10463897e-01 6.09064247e-01 6.07666173e-01 + 6.06269677e-01 6.04874758e-01 6.03481416e-01 6.02089652e-01 6.00699467e-01 + 5.99310859e-01 5.97923831e-01 5.96538381e-01 5.95154511e-01 5.93772221e-01 + 5.92391510e-01 5.91012380e-01 5.89634830e-01 5.88258861e-01 5.86884473e-01 + 5.85511667e-01 5.84140442e-01 5.82770800e-01 5.81402740e-01 5.80036262e-01 + 5.78671367e-01 5.77308056e-01 5.75946328e-01 5.74586184e-01 5.73227624e-01 + 5.71870649e-01 5.70515258e-01 5.69161453e-01 5.67809232e-01 5.66458597e-01 + 5.65109548e-01 5.63762086e-01 5.62416210e-01 5.61071920e-01 5.59729218e-01 + 5.58388103e-01 5.57048576e-01 5.55710636e-01 5.54374285e-01 5.53039523e-01 + 5.51706349e-01 5.50374764e-01 5.49044769e-01 5.47716364e-01 5.46389548e-01 + 5.45064323e-01 5.43740689e-01 5.42418645e-01 5.41098192e-01 5.39779331e-01 + 5.38462062e-01 5.37146385e-01 5.35832299e-01 5.34519807e-01 5.33208907e-01 + 5.31899601e-01 5.30591888e-01 5.29285769e-01 5.27981244e-01 5.26678313e-01 + 5.25376977e-01 5.24077235e-01 5.22779089e-01 5.21482538e-01 5.20187583e-01 + 5.18894224e-01 5.17602461e-01 5.16312295e-01 5.15023726e-01 5.13736754e-01 + 5.12451379e-01 5.11167602e-01 5.09885423e-01 5.08604843e-01 5.07325861e-01 + 5.06048477e-01 5.04772693e-01 5.03498508e-01 5.02225923e-01 5.00954938e-01 + 4.99685553e-01 4.98417769e-01 4.97151585e-01 4.95887003e-01 4.94624021e-01 + 4.93362642e-01 4.92102864e-01 4.90844689e-01 4.89588116e-01 4.88333145e-01 + 4.87079778e-01 4.85828014e-01 4.84577853e-01 4.83329297e-01 4.82082344e-01 + 4.80836996e-01 4.79593252e-01 4.78351114e-01 4.77110580e-01 4.75871652e-01 + 4.74634330e-01 4.73398614e-01 4.72164504e-01 4.70932001e-01 4.69701104e-01 + 4.68471815e-01 4.67244132e-01 4.66018058e-01 4.64793591e-01 4.63570733e-01 + 4.62349483e-01 4.61129842e-01 4.59911810e-01 4.58695387e-01 4.57480573e-01 + 4.56267369e-01 4.55055776e-01 4.53845792e-01 4.52637419e-01 4.51430658e-01 + 4.50225507e-01 4.49021967e-01 4.47820039e-01 4.46619724e-01 4.45421020e-01 + 4.44223928e-01 4.43028450e-01 4.41834584e-01 4.40642332e-01 4.39451693e-01 + 4.38262668e-01 4.37075256e-01 4.35889459e-01 4.34705277e-01 4.33522709e-01 + 4.32341757e-01 4.31162420e-01 4.29984698e-01 4.28808592e-01 4.27634102e-01 + 4.26461229e-01 4.25289972e-01 4.24120332e-01 4.22952310e-01 4.21785904e-01 + 4.20621116e-01 4.19457946e-01 4.18296395e-01 4.17136461e-01 4.15978147e-01 + 4.14821451e-01 4.13666374e-01 4.12512917e-01 4.11361080e-01 4.10210862e-01 + 4.09062265e-01 4.07915288e-01 4.06769932e-01 4.05626197e-01 4.04484083e-01 + 4.03343590e-01 4.02204719e-01 4.01067470e-01 3.99931844e-01 3.98797839e-01 + 3.97665458e-01 3.96534699e-01 3.95405564e-01 3.94278052e-01 3.93152164e-01 + 3.92027900e-01 3.90905259e-01 3.89784244e-01 3.88664853e-01 3.87547087e-01 + 3.86430946e-01 3.85316431e-01 3.84203541e-01 3.83092278e-01 3.81982640e-01 + 3.80874629e-01 3.79768245e-01 3.78663487e-01 3.77560357e-01 3.76458854e-01 + 3.75358979e-01 3.74260731e-01 3.73164112e-01 3.72069121e-01 3.70975759e-01 + 3.69884025e-01 3.68793921e-01 3.67705446e-01 3.66618601e-01 3.65533385e-01 + 3.64449799e-01 3.63367844e-01 3.62287520e-01 3.61208826e-01 3.60131763e-01 + 3.59056331e-01 3.57982531e-01 3.56910363e-01 3.55839826e-01 3.54770922e-01 + 3.53703650e-01 3.52638011e-01 3.51574005e-01 3.50511632e-01 3.49450892e-01 + 3.48391786e-01 3.47334314e-01 3.46278476e-01 3.45224272e-01 3.44171703e-01 + 3.43120769e-01 3.42071469e-01 3.41023805e-01 3.39977776e-01 3.38933384e-01 + 3.37890627e-01 3.36849506e-01 3.35810021e-01 3.34772174e-01 3.33735963e-01 + 3.32701389e-01 3.31668453e-01 3.30637154e-01 3.29607493e-01 3.28579470e-01 + 3.27553085e-01 3.26528339e-01 3.25505231e-01 3.24483762e-01 3.23463933e-01 + 3.22445743e-01 3.21429192e-01 3.20414282e-01 3.19401011e-01 3.18389381e-01 + 3.17379391e-01 3.16371042e-01 3.15364334e-01 3.14359267e-01 3.13355841e-01 + 3.12354057e-01 3.11353915e-01 3.10355415e-01 3.09358557e-01 3.08363342e-01 + 3.07369770e-01 3.06377840e-01 3.05387554e-01 3.04398911e-01 3.03411912e-01 + 3.02426556e-01 3.01442845e-01 3.00460777e-01 2.99480355e-01 2.98501577e-01 + 2.97524444e-01 2.96548956e-01 2.95575113e-01 2.94602916e-01 2.93632365e-01 + 2.92663460e-01 2.91696201e-01 2.90730589e-01 2.89766623e-01 2.88804304e-01 + 2.87843632e-01 2.86884607e-01 2.85927230e-01 2.84971501e-01 2.84017420e-01 + 2.83064986e-01 2.82114201e-01 2.81165065e-01 2.80217578e-01 2.79271739e-01 + 2.78327550e-01 2.77385010e-01 2.76444119e-01 2.75504879e-01 2.74567288e-01 + 2.73631348e-01 2.72697059e-01 2.71764419e-01 2.70833431e-01 2.69904094e-01 + 2.68976408e-01 2.68050374e-01 2.67125991e-01 2.66203261e-01 2.65282182e-01 + 2.64362756e-01 2.63444982e-01 2.62528861e-01 2.61614393e-01 2.60701578e-01 + 2.59790416e-01 2.58880908e-01 2.57973054e-01 2.57066853e-01 2.56162307e-01 + 2.55259415e-01 2.54358178e-01 2.53458595e-01 2.52560668e-01 2.51664395e-01 + 2.50769778e-01 2.49876816e-01 2.48985511e-01 2.48095861e-01 2.47207867e-01 + 2.46321530e-01 2.45436849e-01 2.44553825e-01 2.43672457e-01 2.42792747e-01 + 2.41914695e-01 2.41038300e-01 2.40163562e-01 2.39290483e-01 2.38419061e-01 + 2.37549298e-01 2.36681193e-01 2.35814748e-01 2.34949961e-01 2.34086833e-01 + 2.33225364e-01 2.32365555e-01 2.31507405e-01 2.30650916e-01 2.29796086e-01 + 2.28942916e-01 2.28091407e-01 2.27241559e-01 2.26393372e-01 2.25546845e-01 + 2.24701980e-01 2.23858776e-01 2.23017233e-01 2.22177352e-01 2.21339134e-01 + 2.20502577e-01 2.19667682e-01 2.18834451e-01 2.18002881e-01 2.17172975e-01 + 2.16344732e-01 2.15518152e-01 2.14693235e-01 2.13869982e-01 2.13048393e-01 + 2.12228468e-01 2.11410207e-01 2.10593610e-01 2.09778678e-01 2.08965410e-01 + 2.08153807e-01 2.07343870e-01 2.06535598e-01 2.05728991e-01 2.04924049e-01 + 2.04120774e-01 2.03319164e-01 2.02519221e-01 2.01720944e-01 2.00924334e-01 + 2.00129390e-01 1.99336113e-01 1.98544503e-01 1.97754560e-01 1.96966285e-01 + 1.96179677e-01 1.95394737e-01 1.94611465e-01 1.93829861e-01 1.93049925e-01 + 1.92271658e-01 1.91495059e-01 1.90720129e-01 1.89946869e-01 1.89175277e-01 + 1.88405354e-01 1.87637101e-01 1.86870518e-01 1.86105605e-01 1.85342361e-01 + 1.84580788e-01 1.83820885e-01 1.83062653e-01 1.82306091e-01 1.81551200e-01 + 1.80797980e-01 1.80046431e-01 1.79296554e-01 1.78548348e-01 1.77801814e-01 + 1.77056952e-01 1.76313762e-01 1.75572244e-01 1.74832398e-01 1.74094225e-01 + 1.73357725e-01 1.72622897e-01 1.71889743e-01 1.71158261e-01 1.70428453e-01 + 1.69700319e-01 1.68973858e-01 1.68249071e-01 1.67525958e-01 1.66804519e-01 + 1.66084755e-01 1.65366665e-01 1.64650249e-01 1.63935509e-01 1.63222443e-01 + 1.62511053e-01 1.61801338e-01 1.61093298e-01 1.60386934e-01 1.59682246e-01 + 1.58979233e-01 1.58277897e-01 1.57578237e-01 1.56880253e-01 1.56183946e-01 + 1.55489316e-01 1.54796362e-01 1.54105086e-01 1.53415486e-01 1.52727564e-01 + 1.52041320e-01 1.51356753e-01 1.50673864e-01 1.49992653e-01 1.49313120e-01 + 1.48635265e-01 1.47959088e-01 1.47284591e-01 1.46611771e-01 1.45940631e-01 + 1.45271170e-01 1.44603388e-01 1.43937285e-01 1.43272862e-01 1.42610118e-01 + 1.41949054e-01 1.41289670e-01 1.40631966e-01 1.39975942e-01 1.39321598e-01 + 1.38668935e-01 1.38017953e-01 1.37368652e-01 1.36721031e-01 1.36075091e-01 + 1.35430833e-01 1.34788256e-01 1.34147361e-01 1.33508147e-01 1.32870615e-01 + 1.32234765e-01 1.31600597e-01 1.30968111e-01 1.30337308e-01 1.29708187e-01 + 1.29080749e-01 1.28454994e-01 1.27830921e-01 1.27208532e-01 1.26587826e-01 + 1.25968803e-01 1.25351464e-01 1.24735808e-01 1.24121836e-01 1.23509548e-01 + 1.22898944e-01 1.22290024e-01 1.21682789e-01 1.21077238e-01 1.20473372e-01 + 1.19871190e-01 1.19270693e-01 1.18671881e-01 1.18074755e-01 1.17479313e-01 + 1.16885558e-01 1.16293487e-01 1.15703102e-01 1.15114403e-01 1.14527390e-01 + 1.13942064e-01 1.13358423e-01 1.12776468e-01 1.12196200e-01 1.11617619e-01 + 1.11040725e-01 1.10465517e-01 1.09891996e-01 1.09320162e-01 1.08750016e-01 + 1.08181557e-01 1.07614785e-01 1.07049701e-01 1.06486305e-01 1.05924597e-01 + 1.05364577e-01 1.04806244e-01 1.04249601e-01 1.03694645e-01 1.03141378e-01 + 1.02589800e-01 1.02039910e-01 1.01491709e-01 1.00945198e-01 1.00400375e-01 + 9.98572416e-02 9.93157976e-02 9.87760431e-02 9.82379782e-02 9.77016030e-02 + 9.71669178e-02 9.66339224e-02 9.61026172e-02 9.55730022e-02 9.50450776e-02 + 9.45188434e-02 9.39942997e-02 9.34714468e-02 9.29502847e-02 9.24308135e-02 + 9.19130333e-02 9.13969443e-02 9.08825466e-02 9.03698403e-02 8.98588255e-02 + 8.93495023e-02 8.88418708e-02 8.83359312e-02 8.78316836e-02 8.73291281e-02 + 8.68282647e-02 8.63290937e-02 8.58316150e-02 8.53358290e-02 8.48417355e-02 + 8.43493348e-02 8.38586270e-02 8.33696121e-02 8.28822904e-02 8.23966618e-02 + 8.19127265e-02 8.14304847e-02 8.09499364e-02 8.04710817e-02 7.99939207e-02 + 7.95184537e-02 7.90446805e-02 7.85726014e-02 7.81022165e-02 7.76335259e-02 + 7.71665296e-02 7.67012279e-02 7.62376207e-02 7.57757082e-02 7.53154905e-02 + 7.48569677e-02 7.44001400e-02 7.39450073e-02 7.34915699e-02 7.30398277e-02 + 7.25897810e-02 7.21414298e-02 7.16947743e-02 7.12498144e-02 7.08065504e-02 + 7.03649822e-02 6.99251102e-02 6.94869342e-02 6.90504544e-02 6.86156710e-02 + 6.81825840e-02 6.77511935e-02 6.73214996e-02 6.68935024e-02 6.64672020e-02 + 6.60425985e-02 6.56196920e-02 6.51984826e-02 6.47789704e-02 6.43611555e-02 + 6.39450379e-02 6.35306178e-02 6.31178953e-02 6.27068704e-02 6.22975433e-02 + 6.18899141e-02 6.14839827e-02 6.10797494e-02 6.06772142e-02 6.02763772e-02 + 5.98772385e-02 5.94797982e-02 5.90840564e-02 5.86900131e-02 5.82976685e-02 + 5.79070227e-02 5.75180757e-02 5.71308276e-02 5.67452785e-02 5.63614285e-02 + 5.59792777e-02 5.55988261e-02 5.52200739e-02 5.48430212e-02 5.44676679e-02 + 5.40940143e-02 5.37220604e-02 5.33518062e-02 5.29832520e-02 5.26163976e-02 + 5.22512433e-02 5.18877891e-02 5.15260351e-02 5.11659814e-02 5.08076280e-02 + 5.04509751e-02 5.00960227e-02 4.97427708e-02 4.93912197e-02 4.90413693e-02 + 4.86932198e-02 4.83467711e-02 4.80020235e-02 4.76589769e-02 4.73176315e-02 + 4.69779873e-02 4.66400444e-02 4.63038029e-02 4.59692628e-02 4.56364243e-02 + 4.53052874e-02 4.49758521e-02 4.46481186e-02 4.43220870e-02 4.39977572e-02 + 4.36751294e-02 4.33542037e-02 4.30349801e-02 4.27174587e-02 4.24016395e-02 + 4.20875227e-02 4.17751083e-02 4.14643964e-02 4.11553870e-02 4.08480802e-02 + 4.05424762e-02 4.02385749e-02 3.99363764e-02 3.96358808e-02 3.93370881e-02 + 3.90399985e-02 3.87446120e-02 3.84509287e-02 3.81589486e-02 3.78686718e-02 + 3.75800983e-02 3.72932283e-02 3.70080618e-02 3.67245988e-02 3.64428394e-02 + 3.61627838e-02 3.58844318e-02 3.56077837e-02 3.53328395e-02 3.50595992e-02 + 3.47880629e-02 3.45182306e-02 3.42501025e-02 3.39836786e-02 3.37189589e-02 + 3.34559435e-02 3.31946324e-02 3.29350258e-02 3.26771236e-02 3.24209260e-02 + 3.21664330e-02 3.19136446e-02 3.16625610e-02 3.14131821e-02 3.11655080e-02 + 3.09195388e-02 3.06752746e-02 3.04327153e-02 3.01918611e-02 2.99527120e-02 + 2.97152680e-02 2.94795292e-02 2.92454957e-02 2.90131675e-02 2.87825447e-02 + 2.85536273e-02 2.83264153e-02 2.81009089e-02 2.78771081e-02 2.76550128e-02 + 2.74346233e-02 2.72159395e-02 2.69989614e-02 2.67836892e-02 2.65701228e-02 + 2.63582623e-02 2.61481079e-02 2.59396594e-02 2.57329170e-02 2.55278807e-02 + 2.53245505e-02 2.51229266e-02 2.49230089e-02 2.47247975e-02 2.45282924e-02 + 2.43334937e-02 2.41404014e-02 2.39490156e-02 2.37593363e-02 2.35713636e-02 + 2.33850975e-02 2.32005380e-02 2.30176851e-02 2.28365390e-02 2.26570997e-02 + 2.24793672e-02 2.23033415e-02 2.21290227e-02 2.19564108e-02 2.17855059e-02 + 2.16163080e-02 2.14488171e-02 2.12830333e-02 2.11189566e-02 2.09565871e-02 + 2.07959248e-02 2.06369696e-02 2.04797218e-02 2.03241812e-02 2.01703480e-02 + 2.00182221e-02 1.98678037e-02 1.97190927e-02 1.95720891e-02 1.94267931e-02 + 1.92832045e-02 1.91413236e-02 1.90011502e-02 1.88626845e-02 1.87259265e-02 + 1.85908761e-02 1.84575335e-02 1.83258986e-02 1.81959715e-02 1.80677522e-02 + 1.79412408e-02 1.78164372e-02 1.76933415e-02 1.75719538e-02 1.74522740e-02 + 1.73343022e-02 1.72180384e-02 1.71034827e-02 1.69906350e-02 1.68794954e-02 + 1.67700639e-02 1.66623405e-02 1.65563253e-02 1.64520183e-02 1.63494195e-02 + 1.62485289e-02 1.61493466e-02 1.60518726e-02 1.59561068e-02 1.58620494e-02 + 1.57697003e-02 1.56790596e-02 1.55901273e-02 1.55029034e-02 1.54173879e-02 + 1.53335808e-02 1.52514822e-02 1.51710921e-02 1.50924105e-02 1.50154374e-02 + 1.49401728e-02 1.48666168e-02 1.47947694e-02 1.47246305e-02 1.46562002e-02 + 1.45894786e-02 1.45244656e-02 1.44611612e-02 1.43995655e-02 1.43396785e-02 + 1.42815001e-02 1.42250305e-02 1.41702695e-02 1.41172173e-02 1.40658738e-02 + 1.40162391e-02 1.39683132e-02 1.39220960e-02 1.38775876e-02 1.38347880e-02 + 1.37936971e-02 1.37543151e-02 1.37166420e-02 1.36806776e-02 1.36464221e-02 + 1.36138754e-02 1.35830376e-02 1.35539086e-02 1.35264885e-02 1.35007773e-02 + 1.34767750e-02 1.34544815e-02 1.34338969e-02 1.34150212e-02 1.33978544e-02 + 1.33823966e-02 1.33686476e-02 1.33566075e-02 1.33462763e-02 1.33376541e-02 + 1.33307407e-02 1.33255363e-02 1.33220408e-02 1.33202542e-02 1.33201765e-02 + 1.33218078e-02 1.33251480e-02 1.33301970e-02 1.33369550e-02 1.33454220e-02 + 1.33555978e-02 1.33674825e-02 1.33810762e-02 1.33963787e-02 1.34133902e-02 + 1.34321105e-02 1.34525397e-02 1.34746779e-02 1.34985249e-02 1.35240808e-02 + 1.35513455e-02 1.35803192e-02 1.36110016e-02 1.36433930e-02 1.36774932e-02 + 1.37133022e-02 1.37508200e-02 1.37900467e-02 1.38309822e-02 1.38736265e-02 + 1.39179796e-02 1.39640414e-02 1.40118121e-02 1.40612914e-02 1.41124796e-02 + 1.41653765e-02 1.42199821e-02 1.42762964e-02 1.43343194e-02 1.43940512e-02 + 1.44554916e-02 1.45186406e-02 1.45834983e-02 1.46500646e-02 1.47183396e-02 + 1.47883231e-02 1.48600153e-02 1.49334160e-02 1.50085252e-02 1.50853430e-02 + 1.51638693e-02 1.52441041e-02 1.53260474e-02 1.54096992e-02 1.54950594e-02 + 1.55821280e-02 1.56709051e-02 1.57613905e-02 1.58535843e-02 1.59474864e-02 + 1.60430969e-02 1.61404156e-02 1.62394427e-02 1.63401780e-02 1.64426215e-02 + 1.65467732e-02 1.66526331e-02 1.67602012e-02 1.68694775e-02 1.69804618e-02 + 1.70931542e-02 1.72075547e-02 1.73236633e-02 1.74414798e-02 1.75610043e-02 + 1.76822368e-02 1.78051772e-02 1.79298256e-02 1.80561818e-02 1.81842458e-02 + 1.83140177e-02 1.84454973e-02 1.85786847e-02 1.87135798e-02 1.88501827e-02 + 1.89884931e-02 1.91285113e-02 1.92702370e-02 1.94136703e-02 1.95588111e-02 + 1.97056595e-02 1.98542153e-02 2.00044786e-02 2.01564492e-02 2.03101272e-02 + 2.04655126e-02 2.06226053e-02 2.07814052e-02 2.09419123e-02 2.11041267e-02 + 2.12680482e-02 2.14336768e-02 2.16010125e-02 2.17700553e-02 2.19408050e-02 + 2.21132617e-02 2.22874254e-02 2.24632959e-02 2.26408733e-02 2.28201575e-02 + 2.30011484e-02 2.31838461e-02 2.33682505e-02 2.35543615e-02 2.37421791e-02 + 2.39317033e-02 2.41229339e-02 2.43158711e-02 2.45105147e-02 2.47068647e-02 + 2.49049210e-02 2.51046836e-02 2.53061524e-02 2.55093275e-02 2.57142087e-02 + 2.59207960e-02 2.61290894e-02 2.63390888e-02 2.65507942e-02 2.67642055e-02 + 2.69793227e-02 2.71961457e-02 2.74146744e-02 2.76349090e-02 2.78568491e-02 + 2.80804949e-02 2.83058463e-02 2.85329032e-02 2.87616656e-02 2.89921334e-02 + 2.92243066e-02 2.94581851e-02 2.96937689e-02 2.99310578e-02 3.01700520e-02 + 3.04107512e-02 3.06531555e-02 3.08972648e-02 3.11430790e-02 3.13905981e-02 + 3.16398220e-02 3.18907507e-02 3.21433841e-02 3.23977222e-02 3.26537648e-02 + 3.29115120e-02 3.31709637e-02 3.34321199e-02 3.36949803e-02 3.39595451e-02 + 3.42258142e-02 3.44937874e-02 3.47634647e-02 3.50348461e-02 3.53079315e-02 + 3.55827209e-02 3.58592141e-02 3.61374112e-02 3.64173120e-02 3.66989165e-02 + 3.69822246e-02 3.72672363e-02 3.75539515e-02 3.78423701e-02 3.81324920e-02 + 3.84243173e-02 3.87178458e-02 3.90130775e-02 3.93100123e-02 3.96086502e-02 + 3.99089910e-02 4.02110347e-02 4.05147812e-02 4.08202305e-02 4.11273825e-02 + 4.14362371e-02 4.17467942e-02 4.20590539e-02 4.23730160e-02 4.26886804e-02 + 4.30060471e-02 4.33251159e-02 4.36458870e-02 4.39683600e-02 4.42925351e-02 + 4.46184120e-02 4.49459908e-02 4.52752714e-02 4.56062536e-02 4.59389375e-02 + 4.62733229e-02 4.66094097e-02 4.69471980e-02 4.72866875e-02 4.76278783e-02 + 4.79707703e-02 4.83153633e-02 4.86616573e-02 4.90096522e-02 4.93593480e-02 + 4.97107446e-02 5.00638418e-02 5.04186396e-02 5.07751380e-02 5.11333368e-02 + 5.14932360e-02 5.18548354e-02 5.22181351e-02 5.25831349e-02 5.29498347e-02 + 5.33182344e-02 5.36883341e-02 5.40601335e-02 5.44336326e-02 5.48088313e-02 + 5.51857296e-02 5.55643273e-02 5.59446244e-02 5.63266207e-02 5.67103163e-02 + 5.70957109e-02 5.74828046e-02 5.78715972e-02 5.82620886e-02 5.86542788e-02 + 5.90481677e-02 5.94437551e-02 5.98410410e-02 6.02400253e-02 6.06407080e-02 + 6.10430888e-02 6.14471678e-02 6.18529447e-02 6.22604197e-02 6.26695925e-02 + 6.30804630e-02 6.34930312e-02 6.39072970e-02 6.43232602e-02 6.47409209e-02 + 6.51602788e-02 6.55813340e-02 6.60040862e-02 6.64285354e-02 6.68546816e-02 + 6.72825245e-02 6.77120642e-02 6.81433005e-02 6.85762333e-02 6.90108625e-02 + 6.94471881e-02 6.98852099e-02 7.03249278e-02 7.07663417e-02 7.12094516e-02 + 7.16542573e-02 7.21007588e-02 7.25489558e-02 7.29988484e-02 7.34504365e-02 + 7.39037198e-02 7.43586984e-02 7.48153721e-02 7.52737408e-02 7.57338044e-02 + 7.61955628e-02 7.66590160e-02 7.71241637e-02 7.75910059e-02 7.80595425e-02 + 7.85297734e-02 7.90016985e-02 7.94753177e-02 7.99506308e-02 8.04276378e-02 + 8.09063385e-02 8.13867329e-02 8.18688208e-02 8.23526021e-02 8.28380768e-02 + 8.33252446e-02 8.38141056e-02 8.43046595e-02 8.47969063e-02 8.52908459e-02 + 8.57864782e-02 8.62838029e-02 8.67828201e-02 8.72835297e-02 8.77859314e-02 + 8.82900252e-02 8.87958110e-02 8.93032887e-02 8.98124581e-02 9.03233191e-02 + 9.08358717e-02 9.13501157e-02 9.18660509e-02 9.23836774e-02 9.29029949e-02 + 9.34240033e-02 9.39467025e-02 9.44710925e-02 9.49971730e-02 9.55249440e-02 + 9.60544054e-02 9.65855570e-02 9.71183987e-02 9.76529303e-02 9.81891519e-02 + 9.87270632e-02 9.92666641e-02 9.98079545e-02 1.00350934e-01 1.00895603e-01 + 1.01441962e-01 1.01990009e-01 1.02539745e-01 1.03091170e-01 1.03644283e-01 + 1.04199085e-01 1.04755576e-01 1.05313754e-01 1.05873621e-01 1.06435176e-01 + 1.06998419e-01 1.07563349e-01 1.08129968e-01 1.08698273e-01 1.09268266e-01 + 1.09839947e-01 1.10413314e-01 1.10988368e-01 1.11565110e-01 1.12143538e-01 + 1.12723652e-01 1.13305453e-01 1.13888941e-01 1.14474115e-01 1.15060974e-01 + 1.15649520e-01 1.16239751e-01 1.16831669e-01 1.17425271e-01 1.18020560e-01 + 1.18617533e-01 1.19216192e-01 1.19816535e-01 1.20418564e-01 1.21022277e-01 + 1.21627675e-01 1.22234757e-01 1.22843524e-01 1.23453975e-01 1.24066109e-01 + 1.24679928e-01 1.25295431e-01 1.25912617e-01 1.26531487e-01 1.27152040e-01 + 1.27774276e-01 1.28398196e-01 1.29023798e-01 1.29651083e-01 1.30280051e-01 + 1.30910702e-01 1.31543034e-01 1.32177050e-01 1.32812747e-01 1.33450126e-01 + 1.34089187e-01 1.34729929e-01 1.35372353e-01 1.36016459e-01 1.36662246e-01 + 1.37309713e-01 1.37958862e-01 1.38609692e-01 1.39262202e-01 1.39916393e-01 + 1.40572264e-01 1.41229815e-01 1.41889046e-01 1.42549958e-01 1.43212549e-01 + 1.43876819e-01 1.44542770e-01 1.45210399e-01 1.45879708e-01 1.46550695e-01 + 1.47223362e-01 1.47897707e-01 1.48573731e-01 1.49251433e-01 1.49930814e-01 + 1.50611872e-01 1.51294609e-01 1.51979023e-01 1.52665115e-01 1.53352885e-01 + 1.54042332e-01 1.54733456e-01 1.55426257e-01 1.56120735e-01 1.56816890e-01 + 1.57514721e-01 1.58214229e-01 1.58915413e-01 1.59618273e-01 1.60322809e-01 + 1.61029020e-01 1.61736908e-01 1.62446471e-01 1.63157709e-01 1.63870622e-01 + 1.64585210e-01 1.65301473e-01 1.66019411e-01 1.66739023e-01 1.67460310e-01 + 1.68183271e-01 1.68907906e-01 1.69634214e-01 1.70362197e-01 1.71091853e-01 + 1.71823182e-01 1.72556184e-01 1.73290860e-01 1.74027208e-01 1.74765229e-01 + 1.75504923e-01 1.76246289e-01 1.76989327e-01 1.77734037e-01 1.78480419e-01 + 1.79228473e-01 1.79978199e-01 1.80729595e-01 1.81482663e-01 1.82237402e-01 + 1.82993812e-01 1.83751893e-01 1.84511644e-01 1.85273065e-01 1.86036157e-01 + 1.86800919e-01 1.87567350e-01 1.88335451e-01 1.89105222e-01 1.89876662e-01 + 1.90649771e-01 1.91424549e-01 1.92200996e-01 1.92979112e-01 1.93758896e-01 + 1.94540348e-01 1.95323469e-01 1.96108257e-01 1.96894713e-01 1.97682837e-01 + 1.98472628e-01 1.99264087e-01 2.00057212e-01 2.00852004e-01 2.01648463e-01 + 2.02446589e-01 2.03246381e-01 2.04047839e-01 2.04850963e-01 2.05655753e-01 + 2.06462208e-01 2.07270329e-01 2.08080115e-01 2.08891567e-01 2.09704683e-01 + 2.10519464e-01 2.11335909e-01 2.12154019e-01 2.12973793e-01 2.13795231e-01 + 2.14618333e-01 2.15443098e-01 2.16269527e-01 2.17097619e-01 2.17927374e-01 + 2.18758792e-01 2.19591873e-01 2.20426616e-01 2.21263022e-01 2.22101090e-01 + 2.22940819e-01 2.23782211e-01 2.24625264e-01 2.25469978e-01 2.26316354e-01 + 2.27164390e-01 2.28014088e-01 2.28865446e-01 2.29718464e-01 2.30573143e-01 + 2.31429482e-01 2.32287480e-01 2.33147139e-01 2.34008457e-01 2.34871434e-01 + 2.35736070e-01 2.36602365e-01 2.37470319e-01 2.38339931e-01 2.39211202e-01 + 2.40084131e-01 2.40958717e-01 2.41834962e-01 2.42712864e-01 2.43592423e-01 + 2.44473640e-01 2.45356513e-01 2.46241044e-01 2.47127230e-01 2.48015074e-01 + 2.48904573e-01 2.49795728e-01 2.50688539e-01 2.51583006e-01 2.52479128e-01 + 2.53376905e-01 2.54276337e-01 2.55177424e-01 2.56080166e-01 2.56984562e-01 + 2.57890612e-01 2.58798316e-01 2.59707674e-01 2.60618685e-01 2.61531350e-01 + 2.62445667e-01 2.63361638e-01 2.64279262e-01 2.65198538e-01 2.66119466e-01 + 2.67042047e-01 2.67966279e-01 2.68892164e-01 2.69819699e-01 2.70748886e-01 + 2.71679724e-01 2.72612213e-01 2.73546353e-01 2.74482143e-01 2.75419584e-01 + 2.76358674e-01 2.77299415e-01 2.78241805e-01 2.79185844e-01 2.80131533e-01 + 2.81078870e-01 2.82027857e-01 2.82978492e-01 2.83930775e-01 2.84884707e-01 + 2.85840287e-01 2.86797514e-01 2.87756389e-01 2.88716911e-01 2.89679080e-01 + 2.90642896e-01 2.91608359e-01 2.92575468e-01 2.93544224e-01 2.94514625e-01 + 2.95486673e-01 2.96460366e-01 2.97435704e-01 2.98412687e-01 2.99391316e-01 + 3.00371589e-01 3.01353507e-01 3.02337069e-01 3.03322275e-01 3.04309125e-01 + 3.05297618e-01 3.06287755e-01 3.07279535e-01 3.08272958e-01 3.09268024e-01 + 3.10264733e-01 3.11263084e-01 3.12263076e-01 3.13264711e-01 3.14267987e-01 + 3.15272905e-01 3.16279464e-01 3.17287664e-01 3.18297505e-01 3.19308986e-01 + 3.20322108e-01 3.21336869e-01 3.22353271e-01 3.23371312e-01 3.24390992e-01 + 3.25412312e-01 3.26435271e-01 3.27459868e-01 3.28486104e-01 3.29513978e-01 + 3.30543490e-01 3.31574640e-01 3.32607428e-01 3.33641852e-01 3.34677914e-01 + 3.35715613e-01 3.36754949e-01 3.37795921e-01 3.38838529e-01 3.39882774e-01 + 3.40928653e-01 3.41976169e-01 3.43025320e-01 3.44076105e-01 3.45128526e-01 + 3.46182581e-01 3.47238271e-01 3.48295594e-01 3.49354552e-01 3.50415143e-01 + 3.51477368e-01 3.52541225e-01 3.53606716e-01 3.54673839e-01 3.55742595e-01 + 3.56812983e-01 3.57885003e-01 3.58958655e-01 3.60033939e-01 3.61110853e-01 + 3.62189399e-01 3.63269575e-01 3.64351382e-01 3.65434820e-01 3.66519887e-01 + 3.67606584e-01 3.68694911e-01 3.69784868e-01 3.70876453e-01 3.71969667e-01 + 3.73064510e-01 3.74160981e-01 3.75259081e-01 3.76358808e-01 3.77460163e-01 + 3.78563145e-01 3.79667755e-01 3.80773992e-01 3.81881855e-01 3.82991344e-01 + 3.84102460e-01 3.85215202e-01 3.86329570e-01 3.87445563e-01 3.88563181e-01 + 3.89682424e-01 3.90803292e-01 3.91925784e-01 3.93049901e-01 3.94175642e-01 + 3.95303006e-01 3.96431994e-01 3.97562605e-01 3.98694839e-01 3.99828696e-01 + 4.00964175e-01 4.02101276e-01 4.03240000e-01 4.04380345e-01 4.05522312e-01 + 4.06665899e-01 4.07811108e-01 4.08957938e-01 4.10106388e-01 4.11256458e-01 + 4.12408148e-01 4.13561458e-01 4.14716388e-01 4.15872936e-01 4.17031104e-01 + 4.18190890e-01 4.19352295e-01 4.20515317e-01 4.21679958e-01 4.22846216e-01 + 4.24014092e-01 4.25183585e-01 4.26354695e-01 4.27527421e-01 4.28701764e-01 + 4.29877723e-01 4.31055298e-01 4.32234488e-01 4.33415294e-01 4.34597715e-01 + 4.35781751e-01 4.36967401e-01 4.38154665e-01 4.39343544e-01 4.40534036e-01 + 4.41726142e-01 4.42919861e-01 4.44115193e-01 4.45312138e-01 4.46510695e-01 + 4.47710864e-01 4.48912645e-01 4.50116038e-01 4.51321043e-01 4.52527658e-01 + 4.53735885e-01 4.54945722e-01 4.56157169e-01 4.57370226e-01 4.58584894e-01 + 4.59801170e-01 4.61019056e-01 4.62238551e-01 4.63459655e-01 4.64682367e-01 + 4.65906688e-01 4.67132616e-01 4.68360152e-01 4.69589295e-01 4.70820046e-01 + 4.72052403e-01 4.73286367e-01 4.74521937e-01 4.75759113e-01 4.76997895e-01 + 4.78238283e-01 4.79480276e-01 4.80723873e-01 4.81969076e-01 4.83215882e-01 + 4.84464293e-01 4.85714308e-01 4.86965926e-01 4.88219148e-01 4.89473972e-01 + 4.90730400e-01 4.91988430e-01 4.93248062e-01 4.94509296e-01 4.95772131e-01 + 4.97036568e-01 4.98302606e-01 4.99570245e-01 5.00839485e-01 5.02110324e-01 + 5.03382764e-01 5.04656804e-01 5.05932442e-01 5.07209680e-01 5.08488517e-01 + 5.09768953e-01 5.11050986e-01 5.12334618e-01 5.13619847e-01 5.14906674e-01 + 5.16195098e-01 5.17485119e-01 5.18776737e-01 5.20069951e-01 5.21364761e-01 + 5.22661167e-01 5.23959168e-01 5.25258764e-01 5.26559955e-01 5.27862741e-01 + 5.29167122e-01 5.30473096e-01 5.31780664e-01 5.33089826e-01 5.34400580e-01 + 5.35712928e-01 5.37026868e-01 5.38342401e-01 5.39659526e-01 5.40978242e-01 + 5.42298550e-01 5.43620449e-01 5.44943939e-01 5.46269020e-01 5.47595691e-01 + 5.48923952e-01 5.50253802e-01 5.51585242e-01 5.52918272e-01 5.54252890e-01 + 5.55589096e-01 5.56926891e-01 5.58266274e-01 5.59607245e-01 5.60949803e-01 + 5.62293948e-01 5.63639680e-01 5.64986999e-01 5.66335903e-01 5.67686394e-01 + 5.69038470e-01 5.70392132e-01 5.71747378e-01 5.73104210e-01 5.74462626e-01 + 5.75822626e-01 5.77184210e-01 5.78547377e-01 5.79912128e-01 5.81278461e-01 + 5.82646378e-01 5.84015876e-01 5.85386957e-01 5.86759620e-01 5.88133864e-01 + 5.89509689e-01 5.90887095e-01 5.92266082e-01 5.93646649e-01 5.95028796e-01 + 5.96412522e-01 5.97797828e-01 5.99184713e-01 6.00573177e-01 6.01963219e-01 + 6.03354840e-01 6.04748038e-01 6.06142814e-01 6.07539167e-01 6.08937097e-01 + 6.10336603e-01 6.11737686e-01 6.13140346e-01 6.14544580e-01 6.15950391e-01 + 6.17357776e-01 6.18766736e-01 6.20177271e-01 6.21589379e-01 6.23003062e-01 + 6.24418319e-01 6.25835148e-01 6.27253551e-01 6.28673526e-01 6.30095073e-01 + 6.31518193e-01 6.32942884e-01 6.34369147e-01 6.35796981e-01 6.37226386e-01 + 6.38657361e-01 6.40089906e-01 6.41524022e-01 6.42959706e-01 6.44396960e-01 + 6.45835783e-01 6.47276175e-01 6.48718135e-01 6.50161663e-01 6.51606758e-01 + 6.53053421e-01 6.54501651e-01 6.55951448e-01 6.57402811e-01 6.58855740e-01 + 6.60310236e-01 6.61766296e-01 6.63223922e-01 6.64683112e-01 6.66143868e-01 + 6.67606187e-01 6.69070070e-01 6.70535517e-01 6.72002527e-01 6.73471100e-01 + 6.74941236e-01 6.76412934e-01 6.77886194e-01 6.79361015e-01 6.80837398e-01 + 1.38518338e-01 1.38476565e-01 1.38434740e-01 1.38392864e-01 1.38350938e-01 + 1.38308960e-01 1.38266931e-01 1.38224851e-01 1.38182720e-01 1.38140538e-01 + 1.38098305e-01 1.38056020e-01 1.38013684e-01 1.37971296e-01 1.37928857e-01 + 1.37886366e-01 1.37843824e-01 1.37801230e-01 1.37758585e-01 1.37715888e-01 + 1.37673139e-01 1.37630338e-01 1.37587486e-01 1.37544581e-01 1.37501625e-01 + 1.37458617e-01 1.37415556e-01 1.37372444e-01 1.37329279e-01 1.37286062e-01 + 1.37242794e-01 1.37199472e-01 1.37156099e-01 1.37112673e-01 1.37069195e-01 + 1.37025664e-01 1.36982081e-01 1.36938445e-01 1.36894757e-01 1.36851016e-01 + 1.36807222e-01 1.36763376e-01 1.36719477e-01 1.36675525e-01 1.36631520e-01 + 1.36587463e-01 1.36543352e-01 1.36499189e-01 1.36454972e-01 1.36410702e-01 + 1.36366380e-01 1.36322004e-01 1.36277574e-01 1.36233092e-01 1.36188556e-01 + 1.36143967e-01 1.36099325e-01 1.36054629e-01 1.36009880e-01 1.35965077e-01 + 1.35920221e-01 1.35875311e-01 1.35830347e-01 1.35785330e-01 1.35740259e-01 + 1.35695134e-01 1.35649956e-01 1.35604723e-01 1.35559437e-01 1.35514096e-01 + 1.35468702e-01 1.35423254e-01 1.35377752e-01 1.35332195e-01 1.35286585e-01 + 1.35240920e-01 1.35195201e-01 1.35149428e-01 1.35103600e-01 1.35057718e-01 + 1.35011782e-01 1.34965791e-01 1.34919746e-01 1.34873646e-01 1.34827492e-01 + 1.34781283e-01 1.34735020e-01 1.34688702e-01 1.34642329e-01 1.34595901e-01 + 1.34549419e-01 1.34502882e-01 1.34456290e-01 1.34409643e-01 1.34362941e-01 + 1.34316184e-01 1.34269372e-01 1.34222505e-01 1.34175583e-01 1.34128606e-01 + 1.34081573e-01 1.34034486e-01 1.33987343e-01 1.33940145e-01 1.33892892e-01 + 1.33845583e-01 1.33798219e-01 1.33750799e-01 1.33703324e-01 1.33655794e-01 + 1.33608207e-01 1.33560566e-01 1.33512869e-01 1.33465116e-01 1.33417307e-01 + 1.33369443e-01 1.33321523e-01 1.33273547e-01 1.33225515e-01 1.33177428e-01 + 1.33129285e-01 1.33081085e-01 1.33032830e-01 1.32984519e-01 1.32936152e-01 + 1.32887728e-01 1.32839249e-01 1.32790713e-01 1.32742122e-01 1.32693474e-01 + 1.32644770e-01 1.32596010e-01 1.32547193e-01 1.32498320e-01 1.32449391e-01 + 1.32400405e-01 1.32351363e-01 1.32302265e-01 1.32253110e-01 1.32203899e-01 + 1.32154631e-01 1.32105306e-01 1.32055925e-01 1.32006488e-01 1.31956993e-01 + 1.31907442e-01 1.31857835e-01 1.31808170e-01 1.31758449e-01 1.31708671e-01 + 1.31658836e-01 1.31608945e-01 1.31558996e-01 1.31508991e-01 1.31458929e-01 + 1.31408809e-01 1.31358633e-01 1.31308400e-01 1.31258110e-01 1.31207762e-01 + 1.31157358e-01 1.31106897e-01 1.31056378e-01 1.31005802e-01 1.30955169e-01 + 1.30904479e-01 1.30853732e-01 1.30802927e-01 1.30752065e-01 1.30701146e-01 + 1.30650170e-01 1.30599136e-01 1.30548045e-01 1.30496896e-01 1.30445690e-01 + 1.30394426e-01 1.30343106e-01 1.30291727e-01 1.30240291e-01 1.30188798e-01 + 1.30137247e-01 1.30085639e-01 1.30033973e-01 1.29982249e-01 1.29930468e-01 + 1.29878629e-01 1.29826732e-01 1.29774778e-01 1.29722766e-01 1.29670696e-01 + 1.29618569e-01 1.29566384e-01 1.29514141e-01 1.29461841e-01 1.29409482e-01 + 1.29357066e-01 1.29304592e-01 1.29252060e-01 1.29199470e-01 1.29146823e-01 + 1.29094117e-01 1.29041354e-01 1.28988533e-01 1.28935654e-01 1.28882717e-01 + 1.28829721e-01 1.28776668e-01 1.28723557e-01 1.28670388e-01 1.28617161e-01 + 1.28563876e-01 1.28510533e-01 1.28457132e-01 1.28403673e-01 1.28350156e-01 + 1.28296581e-01 1.28242948e-01 1.28189256e-01 1.28135507e-01 1.28081699e-01 + 1.28027834e-01 1.27973910e-01 1.27919928e-01 1.27865888e-01 1.27811790e-01 + 1.27757634e-01 1.27703420e-01 1.27649147e-01 1.27594816e-01 1.27540427e-01 + 1.27485980e-01 1.27431475e-01 1.27376912e-01 1.27322290e-01 1.27267611e-01 + 1.27212873e-01 1.27158077e-01 1.27103223e-01 1.27048310e-01 1.26993340e-01 + 1.26938311e-01 1.26883224e-01 1.26828079e-01 1.26772875e-01 1.26717614e-01 + 1.26662294e-01 1.26606916e-01 1.26551480e-01 1.26495986e-01 1.26440433e-01 + 1.26384823e-01 1.26329154e-01 1.26273427e-01 1.26217642e-01 1.26161799e-01 + 1.26105898e-01 1.26049938e-01 1.25993920e-01 1.25937845e-01 1.25881711e-01 + 1.25825519e-01 1.25769269e-01 1.25712961e-01 1.25656594e-01 1.25600170e-01 + 1.25543688e-01 1.25487147e-01 1.25430549e-01 1.25373892e-01 1.25317178e-01 + 1.25260405e-01 1.25203574e-01 1.25146686e-01 1.25089739e-01 1.25032735e-01 + 1.24975672e-01 1.24918552e-01 1.24861374e-01 1.24804137e-01 1.24746843e-01 + 1.24689491e-01 1.24632082e-01 1.24574614e-01 1.24517089e-01 1.24459505e-01 + 1.24401864e-01 1.24344166e-01 1.24286409e-01 1.24228595e-01 1.24170723e-01 + 1.24112794e-01 1.24054806e-01 1.23996762e-01 1.23938659e-01 1.23880499e-01 + 1.23822281e-01 1.23764006e-01 1.23705674e-01 1.23647284e-01 1.23588836e-01 + 1.23530331e-01 1.23471769e-01 1.23413149e-01 1.23354472e-01 1.23295737e-01 + 1.23236946e-01 1.23178097e-01 1.23119190e-01 1.23060227e-01 1.23001206e-01 + 1.22942129e-01 1.22882994e-01 1.22823802e-01 1.22764553e-01 1.22705247e-01 + 1.22645884e-01 1.22586464e-01 1.22526988e-01 1.22467454e-01 1.22407864e-01 + 1.22348217e-01 1.22288513e-01 1.22228752e-01 1.22168935e-01 1.22109061e-01 + 1.22049130e-01 1.21989143e-01 1.21929100e-01 1.21869000e-01 1.21808843e-01 + 1.21748630e-01 1.21688361e-01 1.21628036e-01 1.21567654e-01 1.21507216e-01 + 1.21446722e-01 1.21386172e-01 1.21325566e-01 1.21264904e-01 1.21204185e-01 + 1.21143411e-01 1.21082581e-01 1.21021696e-01 1.20960754e-01 1.20899757e-01 + 1.20838704e-01 1.20777596e-01 1.20716432e-01 1.20655212e-01 1.20593937e-01 + 1.20532607e-01 1.20471221e-01 1.20409780e-01 1.20348284e-01 1.20286733e-01 + 1.20225127e-01 1.20163465e-01 1.20101749e-01 1.20039978e-01 1.19978152e-01 + 1.19916271e-01 1.19854335e-01 1.19792345e-01 1.19730300e-01 1.19668200e-01 + 1.19606047e-01 1.19543838e-01 1.19481576e-01 1.19419259e-01 1.19356888e-01 + 1.19294463e-01 1.19231984e-01 1.19169450e-01 1.19106863e-01 1.19044222e-01 + 1.18981528e-01 1.18918779e-01 1.18855977e-01 1.18793122e-01 1.18730213e-01 + 1.18667250e-01 1.18604235e-01 1.18541166e-01 1.18478043e-01 1.18414868e-01 + 1.18351640e-01 1.18288359e-01 1.18225025e-01 1.18161638e-01 1.18098199e-01 + 1.18034707e-01 1.17971163e-01 1.17907566e-01 1.17843917e-01 1.17780216e-01 + 1.17716462e-01 1.17652656e-01 1.17588799e-01 1.17524889e-01 1.17460928e-01 + 1.17396915e-01 1.17332851e-01 1.17268735e-01 1.17204567e-01 1.17140349e-01 + 1.17076079e-01 1.17011757e-01 1.16947385e-01 1.16882962e-01 1.16818488e-01 + 1.16753964e-01 1.16689388e-01 1.16624762e-01 1.16560086e-01 1.16495360e-01 + 1.16430583e-01 1.16365756e-01 1.16300879e-01 1.16235952e-01 1.16170975e-01 + 1.16105949e-01 1.16040873e-01 1.15975748e-01 1.15910573e-01 1.15845349e-01 + 1.15780076e-01 1.15714754e-01 1.15649383e-01 1.15583963e-01 1.15518494e-01 + 1.15452977e-01 1.15387412e-01 1.15321798e-01 1.15256136e-01 1.15190426e-01 + 1.15124668e-01 1.15058862e-01 1.14993008e-01 1.14927107e-01 1.14861158e-01 + 1.14795162e-01 1.14729119e-01 1.14663029e-01 1.14596892e-01 1.14530707e-01 + 1.14464477e-01 1.14398199e-01 1.14331875e-01 1.14265505e-01 1.14199089e-01 + 1.14132627e-01 1.14066119e-01 1.13999565e-01 1.13932965e-01 1.13866320e-01 + 1.13799630e-01 1.13732894e-01 1.13666113e-01 1.13599288e-01 1.13532417e-01 + 1.13465503e-01 1.13398543e-01 1.13331539e-01 1.13264491e-01 1.13197399e-01 + 1.13130263e-01 1.13063084e-01 1.12995861e-01 1.12928594e-01 1.12861284e-01 + 1.12793931e-01 1.12726535e-01 1.12659096e-01 1.12591615e-01 1.12524091e-01 + 1.12456524e-01 1.12388916e-01 1.12321265e-01 1.12253573e-01 1.12185839e-01 + 1.12118063e-01 1.12050246e-01 1.11982388e-01 1.11914489e-01 1.11846549e-01 + 1.11778568e-01 1.11710547e-01 1.11642485e-01 1.11574383e-01 1.11506242e-01 + 1.11438060e-01 1.11369839e-01 1.11301578e-01 1.11233278e-01 1.11164939e-01 + 1.11096561e-01 1.11028144e-01 1.10959689e-01 1.10891195e-01 1.10822663e-01 + 1.10754093e-01 1.10685486e-01 1.10616840e-01 1.10548157e-01 1.10479437e-01 + 1.10410680e-01 1.10341886e-01 1.10273055e-01 1.10204188e-01 1.10135284e-01 + 1.10066345e-01 1.09997369e-01 1.09928358e-01 1.09859311e-01 1.09790229e-01 + 1.09721112e-01 1.09651960e-01 1.09582773e-01 1.09513552e-01 1.09444296e-01 + 1.09375007e-01 1.09305683e-01 1.09236326e-01 1.09166936e-01 1.09097512e-01 + 1.09028055e-01 1.08958566e-01 1.08889044e-01 1.08819489e-01 1.08749902e-01 + 1.08680284e-01 1.08610634e-01 1.08540952e-01 1.08471239e-01 1.08401495e-01 + 1.08331720e-01 1.08261914e-01 1.08192078e-01 1.08122212e-01 1.08052316e-01 + 1.07982391e-01 1.07912436e-01 1.07842452e-01 1.07772438e-01 1.07702397e-01 + 1.07632326e-01 1.07562227e-01 1.07492101e-01 1.07421946e-01 1.07351764e-01 + 1.07281555e-01 1.07211318e-01 1.07141055e-01 1.07070766e-01 1.07000449e-01 + 1.06930107e-01 1.06859739e-01 1.06789346e-01 1.06718927e-01 1.06648483e-01 + 1.06578015e-01 1.06507521e-01 1.06437004e-01 1.06366462e-01 1.06295897e-01 + 1.06225308e-01 1.06154696e-01 1.06084061e-01 1.06013403e-01 1.05942723e-01 + 1.05872021e-01 1.05801296e-01 1.05730551e-01 1.05659783e-01 1.05588995e-01 + 1.05518186e-01 1.05447356e-01 1.05376506e-01 1.05305636e-01 1.05234746e-01 + 1.05163837e-01 1.05092908e-01 1.05021961e-01 1.04950995e-01 1.04880011e-01 + 1.04809009e-01 1.04737989e-01 1.04666951e-01 1.04595897e-01 1.04524826e-01 + 1.04453738e-01 1.04382633e-01 1.04311513e-01 1.04240377e-01 1.04169226e-01 + 1.04098060e-01 1.04026878e-01 1.03955683e-01 1.03884473e-01 1.03813249e-01 + 1.03742012e-01 1.03670761e-01 1.03599498e-01 1.03528222e-01 1.03456933e-01 + 1.03385633e-01 1.03314321e-01 1.03242997e-01 1.03171662e-01 1.03100317e-01 + 1.03028961e-01 1.02957595e-01 1.02886219e-01 1.02814833e-01 1.02743439e-01 + 1.02672036e-01 1.02600624e-01 1.02529204e-01 1.02457776e-01 1.02386340e-01 + 1.02314898e-01 1.02243448e-01 1.02171992e-01 1.02100530e-01 1.02029062e-01 + 1.01957589e-01 1.01886110e-01 1.01814626e-01 1.01743138e-01 1.01671646e-01 + 1.01600150e-01 1.01528651e-01 1.01457148e-01 1.01385643e-01 1.01314135e-01 + 1.01242625e-01 1.01171114e-01 1.01099601e-01 1.01028087e-01 1.00956573e-01 + 1.00885058e-01 1.00813543e-01 1.00742029e-01 1.00670515e-01 1.00599003e-01 + 1.00527492e-01 1.00455983e-01 1.00384477e-01 1.00312973e-01 1.00241472e-01 + 1.00169974e-01 1.00098480e-01 1.00026990e-01 9.99555050e-02 9.98840245e-02 + 9.98125493e-02 9.97410797e-02 9.96696161e-02 9.95981588e-02 9.95267084e-02 + 9.94552650e-02 9.93838292e-02 9.93124014e-02 9.92409818e-02 9.91695709e-02 + 9.90981691e-02 9.90267768e-02 9.89553944e-02 9.88840222e-02 9.88126607e-02 + 9.87413103e-02 9.86699713e-02 9.85986441e-02 9.85273293e-02 9.84560271e-02 + 9.83847379e-02 9.83134622e-02 9.82422004e-02 9.81709529e-02 9.80997201e-02 + 9.80285023e-02 9.79573001e-02 9.78861138e-02 9.78149439e-02 9.77437907e-02 + 9.76726547e-02 9.76015362e-02 9.75304358e-02 9.74593538e-02 9.73882907e-02 + 9.73172468e-02 9.72462226e-02 9.71752186e-02 9.71042351e-02 9.70332725e-02 + 9.69623314e-02 9.68914121e-02 9.68205151e-02 9.67496408e-02 9.66787897e-02 + 9.66079621e-02 9.65371585e-02 9.64663793e-02 9.63956251e-02 9.63248961e-02 + 9.62541930e-02 9.61835160e-02 9.61128657e-02 9.60422425e-02 9.59716469e-02 + 9.59010792e-02 9.58305400e-02 9.57600297e-02 9.56895487e-02 9.56190976e-02 + 9.55486767e-02 9.54782865e-02 9.54079274e-02 9.53376000e-02 9.52673047e-02 + 9.51970419e-02 9.51268121e-02 9.50566158e-02 9.49864534e-02 9.49163254e-02 + 9.48462322e-02 9.47761744e-02 9.47061524e-02 9.46361667e-02 9.45662176e-02 + 9.44963058e-02 9.44264317e-02 9.43565957e-02 9.42867984e-02 9.42170402e-02 + 9.41473215e-02 9.40776429e-02 9.40080049e-02 9.39384078e-02 9.38688523e-02 + 9.37993388e-02 9.37298677e-02 9.36604397e-02 9.35910550e-02 9.35217143e-02 + 9.34524180e-02 9.33831666e-02 9.33139606e-02 9.32448006e-02 9.31756869e-02 + 9.31066201e-02 9.30376006e-02 9.29686291e-02 9.28997059e-02 9.28308316e-02 + 9.27620066e-02 9.26932315e-02 9.26245068e-02 9.25558330e-02 9.24872106e-02 + 9.24186400e-02 9.23501218e-02 9.22816566e-02 9.22132447e-02 9.21448867e-02 + 9.20765832e-02 9.20083346e-02 9.19401414e-02 9.18720042e-02 9.18039235e-02 + 9.17358998e-02 9.16679335e-02 9.16000253e-02 9.15321756e-02 9.14643850e-02 + 9.13966540e-02 9.13289830e-02 9.12613727e-02 9.11938235e-02 9.11263360e-02 + 9.10589106e-02 9.09915480e-02 9.09242486e-02 9.08570130e-02 9.07898417e-02 + 9.07227352e-02 9.06556940e-02 9.05887187e-02 9.05218099e-02 9.04549680e-02 + 9.03881935e-02 9.03214871e-02 9.02548492e-02 9.01882804e-02 9.01217813e-02 + 9.00553522e-02 8.99889939e-02 8.99227068e-02 8.98564915e-02 8.97903485e-02 + 8.97242783e-02 8.96582816e-02 8.95923588e-02 8.95265104e-02 8.94607371e-02 + 8.93950394e-02 8.93294177e-02 8.92638728e-02 8.91984050e-02 8.91330150e-02 + 8.90677033e-02 8.90024705e-02 8.89373170e-02 8.88722435e-02 8.88072505e-02 + 8.87423386e-02 8.86775083e-02 8.86127602e-02 8.85480947e-02 8.84835126e-02 + 8.84190142e-02 8.83546003e-02 8.82902712e-02 8.82260277e-02 8.81618702e-02 + 8.80977994e-02 8.80338157e-02 8.79699197e-02 8.79061120e-02 8.78423932e-02 + 8.77787637e-02 8.77152243e-02 8.76517753e-02 8.75884175e-02 8.75251513e-02 + 8.74619773e-02 8.73988961e-02 8.73359083e-02 8.72730143e-02 8.72102149e-02 + 8.71475104e-02 8.70849016e-02 8.70223890e-02 8.69599731e-02 8.68976544e-02 + 8.68354337e-02 8.67733114e-02 8.67112881e-02 8.66493644e-02 8.65875409e-02 + 8.65258180e-02 8.64641964e-02 8.64026767e-02 8.63412594e-02 8.62799451e-02 + 8.62187344e-02 8.61576278e-02 8.60966259e-02 8.60357293e-02 8.59749386e-02 + 8.59142542e-02 8.58536769e-02 8.57932071e-02 8.57328455e-02 8.56725925e-02 + 8.56124489e-02 8.55524151e-02 8.54924918e-02 8.54326794e-02 8.53729787e-02 + 8.53133900e-02 8.52539141e-02 8.51945515e-02 8.51353028e-02 8.50761685e-02 + 8.50171493e-02 8.49582456e-02 8.48994581e-02 8.48407874e-02 8.47822340e-02 + 8.47237984e-02 8.46654813e-02 8.46072833e-02 8.45492049e-02 8.44912466e-02 + 8.44334092e-02 8.43756930e-02 8.43180988e-02 8.42606271e-02 8.42032784e-02 + 8.41460533e-02 8.40889525e-02 8.40319764e-02 8.39751257e-02 8.39184009e-02 + 8.38618026e-02 8.38053314e-02 8.37489878e-02 8.36927724e-02 8.36366859e-02 + 8.35807286e-02 8.35249013e-02 8.34692046e-02 8.34136388e-02 8.33582048e-02 + 8.33029029e-02 8.32477338e-02 8.31926981e-02 8.31377963e-02 8.30830290e-02 + 8.30283967e-02 8.29739001e-02 8.29195397e-02 8.28653161e-02 8.28112297e-02 + 8.27572813e-02 8.27034714e-02 8.26498005e-02 8.25962691e-02 8.25428780e-02 + 8.24896276e-02 8.24365184e-02 8.23835511e-02 8.23307263e-02 8.22780444e-02 + 8.22255060e-02 8.21731118e-02 8.21208622e-02 8.20687579e-02 8.20167993e-02 + 8.19649871e-02 8.19133218e-02 8.18618039e-02 8.18104341e-02 8.17592128e-02 + 8.17081407e-02 8.16572182e-02 8.16064460e-02 8.15558245e-02 8.15053545e-02 + 8.14550363e-02 8.14048705e-02 8.13548578e-02 8.13049986e-02 8.12552935e-02 + 8.12057430e-02 8.11563478e-02 8.11071082e-02 8.10580250e-02 8.10090986e-02 + 8.09603295e-02 8.09117184e-02 8.08632657e-02 8.08149721e-02 8.07668379e-02 + 8.07188639e-02 8.06710504e-02 8.06233982e-02 8.05759075e-02 8.05285792e-02 + 8.04814136e-02 8.04344112e-02 8.03875727e-02 8.03408986e-02 8.02943893e-02 + 8.02480455e-02 8.02018675e-02 8.01558561e-02 8.01100116e-02 8.00643347e-02 + 8.00188258e-02 7.99734855e-02 7.99283142e-02 7.98833126e-02 7.98384810e-02 + 7.97938201e-02 7.97493304e-02 7.97050123e-02 7.96608664e-02 7.96168932e-02 + 7.95730933e-02 7.95294670e-02 7.94860149e-02 7.94427376e-02 7.93996355e-02 + 7.93567091e-02 7.93139590e-02 7.92713856e-02 7.92289895e-02 7.91867711e-02 + 7.91447310e-02 7.91028695e-02 7.90611873e-02 7.90196849e-02 7.89783626e-02 + 7.89372210e-02 7.88962607e-02 7.88554819e-02 7.88148854e-02 7.87744715e-02 + 7.87342407e-02 7.86941935e-02 7.86543304e-02 7.86146519e-02 7.85751584e-02 + 7.85358504e-02 7.84967284e-02 7.84577929e-02 7.84190442e-02 7.83804830e-02 + 7.83421096e-02 7.83039245e-02 7.82659282e-02 7.82281212e-02 7.81905038e-02 + 7.81530766e-02 7.81158400e-02 7.80787945e-02 7.80419405e-02 7.80052784e-02 + 7.79688088e-02 7.79325320e-02 7.78964485e-02 7.78605587e-02 7.78248631e-02 + 7.77893622e-02 7.77540563e-02 7.77189459e-02 7.76840314e-02 7.76493132e-02 + 7.76147919e-02 7.75804677e-02 7.75463412e-02 7.75124127e-02 7.74786828e-02 + 7.74451517e-02 7.74118199e-02 7.73786878e-02 7.73457559e-02 7.73130245e-02 + 7.72804941e-02 7.72481650e-02 7.72160377e-02 7.71841125e-02 7.71523900e-02 + 7.71208703e-02 7.70895541e-02 7.70584416e-02 7.70275332e-02 7.69968293e-02 + 7.69663304e-02 7.69360368e-02 7.69059488e-02 7.68760670e-02 7.68463915e-02 + 7.68169229e-02 7.67876614e-02 7.67586075e-02 7.67297616e-02 7.67011239e-02 + 7.66726949e-02 7.66444749e-02 7.66164642e-02 7.65886633e-02 7.65610725e-02 + 7.65336921e-02 7.65065225e-02 7.64795641e-02 7.64528171e-02 7.64262819e-02 + 7.63999589e-02 7.63738484e-02 7.63479508e-02 7.63222662e-02 7.62967952e-02 + 7.62715380e-02 7.62464950e-02 7.62216664e-02 7.61970526e-02 7.61726539e-02 + 7.61484706e-02 7.61245031e-02 7.61007516e-02 7.60772164e-02 7.60538979e-02 + 7.60307964e-02 7.60079121e-02 7.59852453e-02 7.59627964e-02 7.59405657e-02 + 7.59185533e-02 7.58967597e-02 7.58751851e-02 7.58538297e-02 7.58326939e-02 + 7.58117779e-02 7.57910820e-02 7.57706065e-02 7.57503516e-02 7.57303176e-02 + 7.57105048e-02 7.56909134e-02 7.56715437e-02 7.56523959e-02 7.56334703e-02 + 7.56147671e-02 7.55962866e-02 7.55780290e-02 7.55599946e-02 7.55421835e-02 + 7.55245961e-02 7.55072326e-02 7.54900931e-02 7.54731780e-02 7.54564874e-02 + 7.54400215e-02 7.54237806e-02 7.54077649e-02 7.53919746e-02 7.53764099e-02 + 7.53610711e-02 7.53459582e-02 7.53310716e-02 7.53164113e-02 7.53019777e-02 + 7.52877708e-02 7.52737910e-02 7.52600383e-02 7.52465130e-02 7.52332152e-02 + 7.52201451e-02 7.52073028e-02 7.51946887e-02 7.51823027e-02 7.51701451e-02 + 7.51582161e-02 7.51465158e-02 7.51350443e-02 7.51238019e-02 7.51127886e-02 + 7.51020046e-02 7.50914500e-02 7.50811251e-02 7.50710299e-02 7.50611645e-02 + 7.50515291e-02 7.50421239e-02 7.50329489e-02 7.50240043e-02 7.50152901e-02 + 7.50068066e-02 7.49985538e-02 7.49905318e-02 7.49827407e-02 7.49751807e-02 + 7.49678518e-02 7.49607542e-02 7.49538879e-02 7.49472530e-02 7.49408496e-02 + 7.49346779e-02 7.49287378e-02 7.49230295e-02 7.49175530e-02 7.49123084e-02 + 7.49072958e-02 7.49025153e-02 7.48979669e-02 7.48936506e-02 7.48895666e-02 + 7.48857148e-02 7.48820954e-02 7.48787084e-02 7.48755538e-02 7.48726317e-02 + 7.48699421e-02 7.48674851e-02 7.48652606e-02 7.48632687e-02 7.48615095e-02 + 7.48599830e-02 7.48586891e-02 7.48576279e-02 7.48567994e-02 7.48562037e-02 + 7.48558407e-02 7.48557104e-02 7.48558129e-02 7.48561481e-02 7.48567160e-02 + 7.48575167e-02 7.48585501e-02 7.48598162e-02 7.48613149e-02 7.48630464e-02 + 7.48650104e-02 7.48672071e-02 7.48696364e-02 7.48722982e-02 7.48751926e-02 + 7.48783194e-02 7.48816786e-02 7.48852703e-02 7.48890943e-02 7.48931506e-02 + 7.48974391e-02 7.49019598e-02 7.49067126e-02 7.49116975e-02 7.49169143e-02 + 7.49223631e-02 7.49280438e-02 7.49339562e-02 7.49401003e-02 7.49464760e-02 + 7.49530832e-02 7.49599219e-02 7.49669919e-02 7.49742931e-02 7.49818255e-02 + 7.49895890e-02 7.49975834e-02 7.50058087e-02 7.50142646e-02 7.50229512e-02 + 7.50318684e-02 7.50410158e-02 7.50503936e-02 7.50600015e-02 7.50698394e-02 + 7.50799072e-02 7.50902047e-02 7.51007318e-02 7.51114884e-02 7.51224743e-02 + 7.51336894e-02 7.51451335e-02 7.51568065e-02 7.51687082e-02 7.51808385e-02 + 7.51931972e-02 7.52057841e-02 7.52185991e-02 7.52316420e-02 7.52449126e-02 + 7.52584108e-02 7.52721363e-02 7.52860890e-02 7.53002688e-02 7.53146753e-02 + 7.53293085e-02 7.53441681e-02 7.53592540e-02 7.53745659e-02 7.53901036e-02 + 7.54058670e-02 7.54218558e-02 7.54380698e-02 7.54545087e-02 7.54711725e-02 + 7.54880609e-02 7.55051735e-02 7.55225103e-02 7.55400710e-02 7.55578553e-02 + 7.55758631e-02 7.55940940e-02 7.56125479e-02 7.56312245e-02 7.56501236e-02 + 7.56692448e-02 7.56885881e-02 7.57081530e-02 7.57279394e-02 7.57479470e-02 + 7.57681755e-02 7.57886247e-02 7.58092942e-02 7.58301840e-02 7.58512935e-02 + 7.58726227e-02 7.58941712e-02 7.59159386e-02 7.59379249e-02 7.59601296e-02 + 7.59825524e-02 7.60051932e-02 7.60280515e-02 7.60511271e-02 7.60744197e-02 + 7.60979290e-02 7.61216547e-02 7.61455964e-02 7.61697540e-02 7.61941269e-02 + 7.62187151e-02 7.62435180e-02 7.62685354e-02 7.62937671e-02 7.63192126e-02 + 7.63448716e-02 7.63707438e-02 7.63968289e-02 7.64231266e-02 7.64496364e-02 + 7.64763581e-02 7.65032913e-02 7.65304357e-02 7.65577909e-02 7.65853566e-02 + 7.66131325e-02 7.66411181e-02 7.66693131e-02 7.66977171e-02 7.67263299e-02 + 7.67551510e-02 7.67841801e-02 7.68134168e-02 7.68428607e-02 7.68725114e-02 + 7.69023687e-02 7.69324320e-02 7.69627011e-02 7.69931756e-02 7.70238549e-02 + 7.70547389e-02 7.70858271e-02 7.71171190e-02 7.71486144e-02 7.71803127e-02 + 7.72122137e-02 7.72443169e-02 7.72766219e-02 7.73091283e-02 7.73418357e-02 + 7.73747437e-02 7.74078518e-02 7.74411598e-02 7.74746671e-02 7.75083734e-02 + 7.75422781e-02 7.75763810e-02 7.76106816e-02 7.76451794e-02 7.76798741e-02 + 7.77147651e-02 7.77498522e-02 7.77851347e-02 7.78206124e-02 7.78562848e-02 + 7.78921513e-02 7.79282117e-02 7.79644654e-02 7.80009121e-02 7.80375512e-02 + 7.80743823e-02 7.81114050e-02 7.81486188e-02 7.81860233e-02 7.82236179e-02 + 7.82614023e-02 7.82993761e-02 7.83375386e-02 7.83758895e-02 7.84144284e-02 + 7.84531546e-02 7.84920679e-02 7.85311676e-02 7.85704534e-02 7.86099248e-02 + 7.86495813e-02 7.86894223e-02 7.87294475e-02 7.87696564e-02 7.88100485e-02 + 7.88506232e-02 7.88913802e-02 7.89323189e-02 7.89734389e-02 7.90147396e-02 + 7.90562205e-02 7.90978813e-02 7.91397213e-02 7.91817402e-02 7.92239373e-02 + 7.92663122e-02 7.93088645e-02 7.93515935e-02 7.93944988e-02 7.94375800e-02 + 7.94808364e-02 7.95242676e-02 7.95678731e-02 7.96116524e-02 7.96556049e-02 + 7.96997302e-02 7.97440277e-02 7.97884970e-02 7.98331374e-02 7.98779486e-02 + 7.99229300e-02 7.99680810e-02 8.00134012e-02 8.00588900e-02 8.01045468e-02 + 8.01503713e-02 8.01963628e-02 8.02425209e-02 8.02888450e-02 8.03353345e-02 + 8.03819890e-02 8.04288079e-02 8.04757907e-02 8.05229368e-02 8.05702458e-02 + 8.06177170e-02 8.06653500e-02 8.07131443e-02 8.07610992e-02 8.08092142e-02 + 8.08574888e-02 8.09059225e-02 8.09545148e-02 8.10032650e-02 8.10521726e-02 + 8.11012372e-02 8.11504581e-02 8.11998347e-02 8.12493667e-02 8.12990534e-02 + 8.13488942e-02 8.13988886e-02 8.14490361e-02 8.14993361e-02 8.15497881e-02 + 8.16003915e-02 8.16511457e-02 8.17020502e-02 8.17531045e-02 8.18043080e-02 + 8.18556601e-02 8.19071604e-02 8.19588081e-02 8.20106028e-02 8.20625439e-02 + 8.21146309e-02 8.21668631e-02 8.22192401e-02 8.22717613e-02 8.23244260e-02 + 8.23772339e-02 8.24301842e-02 8.24832764e-02 8.25365100e-02 8.25898843e-02 + 8.26433990e-02 8.26970532e-02 8.27508466e-02 8.28047785e-02 8.28588484e-02 + 8.29130557e-02 8.29673998e-02 8.30218801e-02 8.30764962e-02 8.31312474e-02 + 8.31861332e-02 8.32411529e-02 8.32963061e-02 8.33515922e-02 8.34070105e-02 + 8.34625605e-02 8.35182417e-02 8.35740534e-02 8.36299951e-02 8.36860663e-02 + 8.37422663e-02 8.37985946e-02 8.38550506e-02 8.39116338e-02 8.39683435e-02 + 8.40251792e-02 8.40821403e-02 8.41392263e-02 8.41964365e-02 8.42537705e-02 + 8.43112275e-02 8.43688072e-02 8.44265088e-02 8.44843318e-02 8.45422756e-02 + 8.46003397e-02 8.46585235e-02 8.47168264e-02 8.47752478e-02 8.48337872e-02 + 8.48924439e-02 8.49512175e-02 8.50101073e-02 8.50691128e-02 8.51282334e-02 + 8.51874685e-02 8.52468175e-02 8.53062799e-02 8.53658551e-02 8.54255425e-02 + 8.54853415e-02 8.55452516e-02 8.56052723e-02 8.56654028e-02 8.57256427e-02 + 8.57859914e-02 8.58464483e-02 8.59070128e-02 8.59676844e-02 8.60284625e-02 + 8.60893465e-02 8.61503358e-02 8.62114299e-02 8.62726282e-02 8.63339302e-02 + 8.63953352e-02 8.64568427e-02 8.65184522e-02 8.65801629e-02 8.66419745e-02 + 8.67038863e-02 8.67658977e-02 8.68280082e-02 8.68902172e-02 8.69525242e-02 + 8.70149285e-02 8.70774296e-02 8.71400270e-02 8.72027200e-02 8.72655081e-02 + 8.73283908e-02 8.73913675e-02 8.74544376e-02 8.75176005e-02 8.75808557e-02 + 8.76442026e-02 8.77076407e-02 8.77711694e-02 8.78347881e-02 8.78984963e-02 + 8.79622934e-02 8.80261789e-02 8.80901521e-02 8.81542126e-02 8.82183598e-02 + 8.82825930e-02 8.83469119e-02 8.84113157e-02 8.84758040e-02 8.85403762e-02 + 8.86050317e-02 8.86697700e-02 8.87345905e-02 8.87994927e-02 8.88644761e-02 + 8.89295400e-02 8.89946839e-02 8.90599073e-02 8.91252096e-02 8.91905903e-02 + 8.92560488e-02 8.93215845e-02 8.93871970e-02 8.94528857e-02 8.95186500e-02 + 8.95844894e-02 8.96504034e-02 8.97163914e-02 8.97824528e-02 8.98485871e-02 + 8.99147938e-02 8.99810724e-02 9.00474222e-02 9.01138428e-02 9.01803336e-02 + 9.02468942e-02 9.03135238e-02 9.03802221e-02 9.04469884e-02 9.05138223e-02 + 9.05807232e-02 9.06476906e-02 9.07147239e-02 9.07818226e-02 9.08489862e-02 + 9.09162142e-02 9.09835060e-02 9.10508611e-02 9.11182790e-02 9.11857591e-02 + 9.12533009e-02 9.13209040e-02 9.13885677e-02 9.14562916e-02 9.15240751e-02 + 9.15919178e-02 9.16598190e-02 9.17277784e-02 9.17957953e-02 9.18638692e-02 + 9.19319997e-02 9.20001862e-02 9.20684282e-02 9.21367252e-02 9.22050767e-02 + 9.22734821e-02 9.23419411e-02 9.24104530e-02 9.24790173e-02 9.25476336e-02 + 9.26163013e-02 9.26850199e-02 9.27537890e-02 9.28226080e-02 9.28914765e-02 + 9.29603938e-02 9.30293596e-02 9.30983734e-02 9.31674346e-02 9.32365427e-02 + 9.33056973e-02 9.33748978e-02 9.34441438e-02 9.35134347e-02 9.35827701e-02 + 9.36521496e-02 9.37215725e-02 9.37910385e-02 9.38605469e-02 9.39300975e-02 + 9.39996895e-02 9.40693227e-02 9.41389965e-02 9.42087104e-02 9.42784639e-02 + 9.43482566e-02 9.44180880e-02 9.44879576e-02 9.45578649e-02 9.46278095e-02 + 9.46977909e-02 9.47678086e-02 9.48378622e-02 9.49079511e-02 9.49780750e-02 + 9.50482333e-02 9.51184256e-02 9.51886514e-02 9.52589103e-02 9.53292017e-02 + 9.53995254e-02 9.54698806e-02 9.55402671e-02 9.56106844e-02 9.56811320e-02 + 9.57516094e-02 9.58221162e-02 9.58926520e-02 9.59632163e-02 9.60338086e-02 + 9.61044286e-02 9.61750756e-02 9.62457494e-02 9.63164495e-02 9.63871754e-02 + 9.64579266e-02 9.65287028e-02 9.65995035e-02 9.66703283e-02 9.67411766e-02 + 9.68120482e-02 9.68829425e-02 9.69538592e-02 9.70247977e-02 9.70957577e-02 + 9.71667387e-02 9.72377403e-02 9.73087621e-02 9.73798037e-02 9.74508645e-02 + 9.75219443e-02 9.75930426e-02 9.76641589e-02 9.77352928e-02 9.78064440e-02 + 9.78776119e-02 9.79487963e-02 9.80199966e-02 9.80912125e-02 9.81624436e-02 + 9.82336894e-02 9.83049495e-02 9.83762235e-02 9.84475111e-02 9.85188118e-02 + 9.85901251e-02 9.86614508e-02 9.87327884e-02 9.88041375e-02 9.88754977e-02 + 9.89468687e-02 9.90182499e-02 9.90896410e-02 9.91610417e-02 9.92324515e-02 + 9.93038701e-02 9.93752970e-02 9.94467318e-02 9.95181743e-02 9.95896239e-02 + 9.96610804e-02 9.97325432e-02 9.98040122e-02 9.98754867e-02 9.99469666e-02 + 1.00018451e-01 1.00089941e-01 1.00161434e-01 1.00232931e-01 1.00304432e-01 + 1.00375936e-01 1.00447442e-01 1.00518951e-01 1.00590461e-01 1.00661973e-01 + 1.00733487e-01 1.00805001e-01 1.00876516e-01 1.00948030e-01 1.01019545e-01 + 1.01091059e-01 1.01162572e-01 1.01234084e-01 1.01305594e-01 1.01377102e-01 + 1.01448607e-01 1.01520110e-01 1.01591610e-01 1.01663106e-01 1.01734599e-01 + 1.01806088e-01 1.01877572e-01 1.01949051e-01 1.02020525e-01 1.02091994e-01 + 1.02163457e-01 1.02234914e-01 1.02306364e-01 1.02377807e-01 1.02449244e-01 + 1.02520672e-01 1.02592093e-01 1.02663506e-01 1.02734911e-01 1.02806306e-01 + 1.02877693e-01 1.02949070e-01 1.03020437e-01 1.03091794e-01 1.03163141e-01 + 1.03234477e-01 1.03305802e-01 1.03377115e-01 1.03448417e-01 1.03519707e-01 + 1.03590985e-01 1.03662250e-01 1.03733502e-01 1.03804741e-01 1.03875966e-01 + 1.03947178e-01 1.04018375e-01 1.04089558e-01 1.04160726e-01 1.04231879e-01 + 1.04303017e-01 1.04374139e-01 1.04445245e-01 1.04516335e-01 1.04587409e-01 + 1.04658465e-01 1.04729504e-01 1.04800527e-01 1.04871531e-01 1.04942517e-01 + 1.05013485e-01 1.05084435e-01 1.05155365e-01 1.05226277e-01 1.05297169e-01 + 1.05368041e-01 1.05438894e-01 1.05509726e-01 1.05580538e-01 1.05651329e-01 + 1.05722099e-01 1.05792847e-01 1.05863574e-01 1.05934279e-01 1.06004962e-01 + 1.06075622e-01 1.06146260e-01 1.06216875e-01 1.06287467e-01 1.06358035e-01 + 1.06428579e-01 1.06499100e-01 1.06569596e-01 1.06640067e-01 1.06710514e-01 + 1.06780936e-01 1.06851332e-01 1.06921703e-01 1.06992049e-01 1.07062368e-01 + 1.07132661e-01 1.07202927e-01 1.07273167e-01 1.07343379e-01 1.07413565e-01 + 1.07483722e-01 1.07553852e-01 1.07623955e-01 1.07694028e-01 1.07764074e-01 + 1.07834090e-01 1.07904078e-01 1.07974036e-01 1.08043966e-01 1.08113865e-01 + 1.08183735e-01 1.08253574e-01 1.08323383e-01 1.08393162e-01 1.08462910e-01 + 1.08532626e-01 1.08602312e-01 1.08671966e-01 1.08741588e-01 1.08811179e-01 + 1.08880737e-01 1.08950263e-01 1.09019757e-01 1.09089217e-01 1.09158645e-01 + 1.09228040e-01 1.09297401e-01 1.09366728e-01 1.09436022e-01 1.09505281e-01 + 1.09574507e-01 1.09643698e-01 1.09712854e-01 1.09781975e-01 1.09851061e-01 + 1.09920112e-01 1.09989128e-01 1.10058108e-01 1.10127052e-01 1.10195959e-01 + 1.10264831e-01 1.10333666e-01 1.10402465e-01 1.10471226e-01 1.10539951e-01 + 1.10608638e-01 1.10677288e-01 1.10745900e-01 1.10814475e-01 1.10883011e-01 + 1.10951510e-01 1.11019970e-01 1.11088391e-01 1.11156774e-01 1.11225117e-01 + 1.11293422e-01 1.11361687e-01 1.11429913e-01 1.11498100e-01 1.11566246e-01 + 1.11634353e-01 1.11702419e-01 1.11770445e-01 1.11838431e-01 1.11906376e-01 + 1.11974280e-01 1.12042143e-01 1.12109965e-01 1.12177745e-01 1.12245484e-01 + 1.12313182e-01 1.12380837e-01 1.12448451e-01 1.12516022e-01 1.12583551e-01 + 1.12651038e-01 1.12718482e-01 1.12785883e-01 1.12853241e-01 1.12920556e-01 + 1.12987828e-01 1.13055056e-01 1.13122241e-01 1.13189382e-01 1.13256480e-01 + 1.13323533e-01 1.13390542e-01 1.13457507e-01 1.13524427e-01 1.13591303e-01 + 1.13658134e-01 1.13724920e-01 1.13791661e-01 1.13858356e-01 1.13925007e-01 + 1.13991612e-01 1.14058171e-01 1.14124685e-01 1.14191153e-01 1.14257575e-01 + 1.14323950e-01 1.14390280e-01 1.14456562e-01 1.14522799e-01 1.14588988e-01 + 1.14655131e-01 1.14721227e-01 1.14787276e-01 1.14853278e-01 1.14919232e-01 + 1.14985139e-01 1.15050998e-01 1.15116810e-01 1.15182574e-01 1.15248290e-01 + 1.15313957e-01 1.15379577e-01 1.15445148e-01 1.15510671e-01 1.15576146e-01 + 1.15641571e-01 1.15706948e-01 1.15772276e-01 1.15837555e-01 1.15902785e-01 + 1.15967965e-01 1.16033097e-01 1.16098179e-01 1.16163211e-01 1.16228193e-01 + 1.16293126e-01 1.16358009e-01 1.16422842e-01 1.16487625e-01 1.16552357e-01 + 1.16617040e-01 1.16681672e-01 1.16746253e-01 1.16810784e-01 1.16875264e-01 + 1.16939693e-01 1.17004071e-01 1.17068398e-01 1.17132674e-01 1.17196899e-01 + 1.17261073e-01 1.17325195e-01 1.17389266e-01 1.17453285e-01 1.17517252e-01 + 1.17581168e-01 1.17645032e-01 1.17708843e-01 1.17772603e-01 1.17836311e-01 + 1.17899966e-01 1.17963569e-01 1.18027120e-01 1.18090618e-01 1.18154064e-01 + 1.18217457e-01 1.18280797e-01 1.18344084e-01 1.18407319e-01 1.18470500e-01 + 1.18533629e-01 1.18596704e-01 1.18659726e-01 1.18722695e-01 1.18785610e-01 + 1.18848472e-01 1.18911281e-01 1.18974035e-01 1.19036736e-01 1.19099384e-01 + 2.08130000e-04 2.08281191e-04 2.08734762e-04 2.09490714e-04 2.10549046e-04 + 2.11909757e-04 2.13572846e-04 2.15538310e-04 2.17806148e-04 2.20376358e-04 + 2.23248936e-04 2.26423882e-04 2.29901190e-04 2.33680858e-04 2.37762883e-04 + 2.42147260e-04 2.46833984e-04 2.51823051e-04 2.57114457e-04 2.62708196e-04 + 2.68604263e-04 2.74802652e-04 2.81303356e-04 2.88106370e-04 2.95211687e-04 + 3.02619299e-04 3.10329200e-04 3.18341382e-04 3.26655837e-04 3.35272557e-04 + 3.44191533e-04 3.53412758e-04 3.62936221e-04 3.72761913e-04 3.82889825e-04 + 3.93319947e-04 4.04052269e-04 4.15086779e-04 4.26423468e-04 4.38062324e-04 + 4.50003336e-04 4.62246492e-04 4.74791780e-04 4.87639188e-04 5.00788703e-04 + 5.14240312e-04 5.27994002e-04 5.42049760e-04 5.56407572e-04 5.71067423e-04 + 5.86029300e-04 6.01293187e-04 6.16859071e-04 6.32726934e-04 6.48896763e-04 + 6.65368541e-04 6.82142252e-04 6.99217880e-04 7.16595407e-04 7.34274817e-04 + 7.52256092e-04 7.70539216e-04 7.89124169e-04 8.08010934e-04 8.27199493e-04 + 8.46689825e-04 8.66481913e-04 8.86575737e-04 9.06971278e-04 9.27668514e-04 + 9.48667427e-04 9.69967995e-04 9.91570198e-04 1.01347401e-03 1.03567942e-03 + 1.05818640e-03 1.08099493e-03 1.10410498e-03 1.12751654e-03 1.15122957e-03 + 1.17524406e-03 1.19955999e-03 1.22417733e-03 1.24909605e-03 1.27431613e-03 + 1.29983755e-03 1.32566029e-03 1.35178430e-03 1.37820958e-03 1.40493610e-03 + 1.43196382e-03 1.45929272e-03 1.48692278e-03 1.51485397e-03 1.54308626e-03 + 1.57161963e-03 1.60045404e-03 1.62958946e-03 1.65902588e-03 1.68876325e-03 + 1.71880156e-03 1.74914077e-03 1.77978085e-03 1.81072177e-03 1.84196351e-03 + 1.87350602e-03 1.90534929e-03 1.93749327e-03 1.96993795e-03 2.00268328e-03 + 2.03572923e-03 2.06907577e-03 2.10272288e-03 2.13667051e-03 2.17091863e-03 + 2.20546721e-03 2.24031622e-03 2.27546562e-03 2.31091538e-03 2.34666546e-03 + 2.38271583e-03 2.41906645e-03 2.45571729e-03 2.49266831e-03 2.52991947e-03 + 2.56747075e-03 2.60532209e-03 2.64347347e-03 2.68192485e-03 2.72067619e-03 + 2.75972745e-03 2.79907859e-03 2.83872959e-03 2.87868038e-03 2.91893095e-03 + 2.95948125e-03 3.00033123e-03 3.04148087e-03 3.08293011e-03 3.12467892e-03 + 3.16672726e-03 3.20907509e-03 3.25172236e-03 3.29466904e-03 3.33791508e-03 + 3.38146044e-03 3.42530507e-03 3.46944894e-03 3.51389201e-03 3.55863422e-03 + 3.60367554e-03 3.64901591e-03 3.69465531e-03 3.74059367e-03 3.78683096e-03 + 3.83336714e-03 3.88020215e-03 3.92733595e-03 3.97476850e-03 4.02249975e-03 + 4.07052965e-03 4.11885815e-03 4.16748522e-03 4.21641079e-03 4.26563483e-03 + 4.31515728e-03 4.36497811e-03 4.41509725e-03 4.46551466e-03 4.51623029e-03 + 4.56724409e-03 4.61855601e-03 4.67016601e-03 4.72207403e-03 4.77428002e-03 + 4.82678393e-03 4.87958570e-03 4.93268530e-03 4.98608266e-03 5.03977774e-03 + 5.09377048e-03 5.14806083e-03 5.20264873e-03 5.25753414e-03 5.31271700e-03 + 5.36819725e-03 5.42397485e-03 5.48004973e-03 5.53642185e-03 5.59309115e-03 + 5.65005757e-03 5.70732106e-03 5.76488157e-03 5.82273903e-03 5.88089339e-03 + 5.93934459e-03 5.99809258e-03 6.05713731e-03 6.11647870e-03 6.17611671e-03 + 6.23605128e-03 6.29628235e-03 6.35680986e-03 6.41763375e-03 6.47875396e-03 + 6.54017044e-03 6.60188312e-03 6.66389194e-03 6.72619685e-03 6.78879778e-03 + 6.85169468e-03 6.91488748e-03 6.97837611e-03 7.04216053e-03 7.10624066e-03 + 7.17061645e-03 7.23528783e-03 7.30025474e-03 7.36551712e-03 7.43107490e-03 + 7.49692802e-03 7.56307641e-03 7.62952002e-03 7.69625878e-03 7.76329262e-03 + 7.83062147e-03 7.89824528e-03 7.96616398e-03 8.03437750e-03 8.10288577e-03 + 8.17168874e-03 8.24078632e-03 8.31017847e-03 8.37986510e-03 8.44984615e-03 + 8.52012155e-03 8.59069124e-03 8.66155515e-03 8.73271321e-03 8.80416535e-03 + 8.87591149e-03 8.94795158e-03 9.02028554e-03 9.09291331e-03 9.16583480e-03 + 9.23904995e-03 9.31255870e-03 9.38636096e-03 9.46045668e-03 9.53484577e-03 + 9.60952816e-03 9.68450379e-03 9.75977258e-03 9.83533445e-03 9.91118934e-03 + 9.98733717e-03 1.00637779e-02 1.01405114e-02 1.02175376e-02 1.02948564e-02 + 1.03724679e-02 1.04503718e-02 1.05285681e-02 1.06070568e-02 1.06858378e-02 + 1.07649109e-02 1.08442762e-02 1.09239335e-02 1.10038828e-02 1.10841240e-02 + 1.11646570e-02 1.12454817e-02 1.13265980e-02 1.14080060e-02 1.14897054e-02 + 1.15716963e-02 1.16539785e-02 1.17365519e-02 1.18194166e-02 1.19025723e-02 + 1.19860191e-02 1.20697568e-02 1.21537854e-02 1.22381047e-02 1.23227148e-02 + 1.24076155e-02 1.24928067e-02 1.25782883e-02 1.26640604e-02 1.27501227e-02 + 1.28364752e-02 1.29231179e-02 1.30100506e-02 1.30972732e-02 1.31847858e-02 + 1.32725881e-02 1.33606801e-02 1.34490618e-02 1.35377329e-02 1.36266936e-02 + 1.37159436e-02 1.38054829e-02 1.38953113e-02 1.39854289e-02 1.40758355e-02 + 1.41665311e-02 1.42575155e-02 1.43487886e-02 1.44403504e-02 1.45322008e-02 + 1.46243398e-02 1.47167671e-02 1.48094827e-02 1.49024866e-02 1.49957786e-02 + 1.50893587e-02 1.51832267e-02 1.52773826e-02 1.53718263e-02 1.54665577e-02 + 1.55615767e-02 1.56568832e-02 1.57524771e-02 1.58483584e-02 1.59445269e-02 + 1.60409825e-02 1.61377252e-02 1.62347549e-02 1.63320714e-02 1.64296747e-02 + 1.65275647e-02 1.66257413e-02 1.67242043e-02 1.68229538e-02 1.69219896e-02 + 1.70213116e-02 1.71209197e-02 1.72208138e-02 1.73209939e-02 1.74214598e-02 + 1.75222114e-02 1.76232487e-02 1.77245715e-02 1.78261798e-02 1.79280734e-02 + 1.80302523e-02 1.81327163e-02 1.82354654e-02 1.83384994e-02 1.84418184e-02 + 1.85454220e-02 1.86493104e-02 1.87534833e-02 1.88579407e-02 1.89626824e-02 + 1.90677084e-02 1.91730186e-02 1.92786129e-02 1.93844911e-02 1.94906532e-02 + 1.95970991e-02 1.97038286e-02 1.98108417e-02 1.99181382e-02 2.00257182e-02 + 2.01335813e-02 2.02417277e-02 2.03501571e-02 2.04588694e-02 2.05678646e-02 + 2.06771425e-02 2.07867031e-02 2.08965462e-02 2.10066717e-02 2.11170796e-02 + 2.12277697e-02 2.13387419e-02 2.14499962e-02 2.15615323e-02 2.16733503e-02 + 2.17854499e-02 2.18978311e-02 2.20104938e-02 2.21234379e-02 2.22366633e-02 + 2.23501698e-02 2.24639574e-02 2.25780260e-02 2.26923753e-02 2.28070055e-02 + 2.29219162e-02 2.30371074e-02 2.31525791e-02 2.32683311e-02 2.33843632e-02 + 2.35006755e-02 2.36172677e-02 2.37341397e-02 2.38512915e-02 2.39687230e-02 + 2.40864339e-02 2.42044243e-02 2.43226940e-02 2.44412429e-02 2.45600709e-02 + 2.46791779e-02 2.47985637e-02 2.49182282e-02 2.50381714e-02 2.51583931e-02 + 2.52788932e-02 2.53996717e-02 2.55207283e-02 2.56420629e-02 2.57636755e-02 + 2.58855660e-02 2.60077341e-02 2.61301799e-02 2.62529032e-02 2.63759039e-02 + 2.64991818e-02 2.66227368e-02 2.67465689e-02 2.68706779e-02 2.69950637e-02 + 2.71197262e-02 2.72446653e-02 2.73698808e-02 2.74953726e-02 2.76211406e-02 + 2.77471848e-02 2.78735049e-02 2.80001009e-02 2.81269726e-02 2.82541199e-02 + 2.83815427e-02 2.85092409e-02 2.86372144e-02 2.87654630e-02 2.88939867e-02 + 2.90227852e-02 2.91518585e-02 2.92812065e-02 2.94108290e-02 2.95407260e-02 + 2.96708972e-02 2.98013426e-02 2.99320621e-02 3.00630555e-02 3.01943227e-02 + 3.03258636e-02 3.04576781e-02 3.05897660e-02 3.07221272e-02 3.08547616e-02 + 3.09876691e-02 3.11208496e-02 3.12543028e-02 3.13880288e-02 3.15220273e-02 + 3.16562983e-02 3.17908416e-02 3.19256571e-02 3.20607447e-02 3.21961042e-02 + 3.23317356e-02 3.24676386e-02 3.26038132e-02 3.27402593e-02 3.28769766e-02 + 3.30139652e-02 3.31512248e-02 3.32887554e-02 3.34265567e-02 3.35646288e-02 + 3.37029714e-02 3.38415844e-02 3.39804677e-02 3.41196212e-02 3.42590447e-02 + 3.43987381e-02 3.45387013e-02 3.46789341e-02 3.48194365e-02 3.49602082e-02 + 3.51012492e-02 3.52425593e-02 3.53841384e-02 3.55259864e-02 3.56681031e-02 + 3.58104884e-02 3.59531422e-02 3.60960643e-02 3.62392547e-02 3.63827131e-02 + 3.65264394e-02 3.66704335e-02 3.68146954e-02 3.69592247e-02 3.71040215e-02 + 3.72490856e-02 3.73944167e-02 3.75400149e-02 3.76858800e-02 3.78320118e-02 + 3.79784102e-02 3.81250751e-02 3.82720063e-02 3.84192037e-02 3.85666672e-02 + 3.87143966e-02 3.88623918e-02 3.90106526e-02 3.91591790e-02 3.93079707e-02 + 3.94570277e-02 3.96063498e-02 3.97559369e-02 3.99057888e-02 4.00559054e-02 + 4.02062865e-02 4.03569321e-02 4.05078419e-02 4.06590159e-02 4.08104539e-02 + 4.09621558e-02 4.11141214e-02 4.12663506e-02 4.14188432e-02 4.15715991e-02 + 4.17246182e-02 4.18779004e-02 4.20314454e-02 4.21852532e-02 4.23393235e-02 + 4.24936564e-02 4.26482515e-02 4.28031089e-02 4.29582283e-02 4.31136096e-02 + 4.32692526e-02 4.34251573e-02 4.35813234e-02 4.37377508e-02 4.38944395e-02 + 4.40513892e-02 4.42085998e-02 4.43660711e-02 4.45238031e-02 4.46817956e-02 + 4.48400483e-02 4.49985613e-02 4.51573343e-02 4.53163671e-02 4.54756598e-02 + 4.56352120e-02 4.57950237e-02 4.59550947e-02 4.61154249e-02 4.62760141e-02 + 4.64368622e-02 4.65979690e-02 4.67593344e-02 4.69209582e-02 4.70828403e-02 + 4.72449806e-02 4.74073789e-02 4.75700350e-02 4.77329488e-02 4.78961202e-02 + 4.80595489e-02 4.82232350e-02 4.83871781e-02 4.85513782e-02 4.87158351e-02 + 4.88805487e-02 4.90455188e-02 4.92107453e-02 4.93762280e-02 4.95419667e-02 + 4.97079614e-02 4.98742118e-02 5.00407179e-02 5.02074794e-02 5.03744963e-02 + 5.05417683e-02 5.07092953e-02 5.08770772e-02 5.10451138e-02 5.12134049e-02 + 5.13819505e-02 5.15507503e-02 5.17198043e-02 5.18891121e-02 5.20586738e-02 + 5.22284892e-02 5.23985580e-02 5.25688802e-02 5.27394555e-02 5.29102839e-02 + 5.30813652e-02 5.32526992e-02 5.34242858e-02 5.35961248e-02 5.37682161e-02 + 5.39405595e-02 5.41131548e-02 5.42860020e-02 5.44591008e-02 5.46324511e-02 + 5.48060527e-02 5.49799055e-02 5.51540094e-02 5.53283641e-02 5.55029695e-02 + 5.56778255e-02 5.58529319e-02 5.60282885e-02 5.62038952e-02 5.63797519e-02 + 5.65558583e-02 5.67322144e-02 5.69088199e-02 5.70856747e-02 5.72627786e-02 + 5.74401316e-02 5.76177334e-02 5.77955838e-02 5.79736828e-02 5.81520301e-02 + 5.83306256e-02 5.85094691e-02 5.86885605e-02 5.88678997e-02 5.90474864e-02 + 5.92273205e-02 5.94074018e-02 5.95877302e-02 5.97683055e-02 5.99491276e-02 + 6.01301963e-02 6.03115114e-02 6.04930728e-02 6.06748803e-02 6.08569338e-02 + 6.10392330e-02 6.12217779e-02 6.14045683e-02 6.15876039e-02 6.17708848e-02 + 6.19544105e-02 6.21381812e-02 6.23221964e-02 6.25064562e-02 6.26909603e-02 + 6.28757085e-02 6.30607008e-02 6.32459369e-02 6.34314167e-02 6.36171400e-02 + 6.38031067e-02 6.39893165e-02 6.41757694e-02 6.43624651e-02 6.45494036e-02 + 6.47365845e-02 6.49240078e-02 6.51116734e-02 6.52995809e-02 6.54877303e-02 + 6.56761215e-02 6.58647541e-02 6.60536282e-02 6.62427434e-02 6.64320997e-02 + 6.66216969e-02 6.68115348e-02 6.70016132e-02 6.71919320e-02 6.73824910e-02 + 6.75732900e-02 6.77643289e-02 6.79556075e-02 6.81471257e-02 6.83388832e-02 + 6.85308799e-02 6.87231157e-02 6.89155904e-02 6.91083037e-02 6.93012556e-02 + 6.94944458e-02 6.96878742e-02 6.98815407e-02 7.00754450e-02 7.02695870e-02 + 7.04639665e-02 7.06585833e-02 7.08534374e-02 7.10485284e-02 7.12438563e-02 + 7.14394208e-02 7.16352219e-02 7.18312593e-02 7.20275328e-02 7.22240423e-02 + 7.24207876e-02 7.26177686e-02 7.28149851e-02 7.30124368e-02 7.32101237e-02 + 7.34080456e-02 7.36062022e-02 7.38045935e-02 7.40032192e-02 7.42020791e-02 + 7.44011732e-02 7.46005012e-02 7.48000630e-02 7.49998583e-02 7.51998870e-02 + 7.54001490e-02 7.56006441e-02 7.58013720e-02 7.60023326e-02 7.62035258e-02 + 7.64049514e-02 7.66066092e-02 7.68084989e-02 7.70106206e-02 7.72129739e-02 + 7.74155587e-02 7.76183748e-02 7.78214221e-02 7.80247003e-02 7.82282094e-02 + 7.84319490e-02 7.86359192e-02 7.88401196e-02 7.90445501e-02 7.92492105e-02 + 7.94541007e-02 7.96592204e-02 7.98645695e-02 8.00701479e-02 8.02759553e-02 + 8.04819916e-02 8.06882565e-02 8.08947500e-02 8.11014718e-02 8.13084218e-02 + 8.15155998e-02 8.17230055e-02 8.19306389e-02 8.21384998e-02 8.23465879e-02 + 8.25549031e-02 8.27634452e-02 8.29722141e-02 8.31812095e-02 8.33904313e-02 + 8.35998794e-02 8.38095534e-02 8.40194533e-02 8.42295789e-02 8.44399299e-02 + 8.46505063e-02 8.48613078e-02 8.50723343e-02 8.52835855e-02 8.54950613e-02 + 8.57067616e-02 8.59186860e-02 8.61308346e-02 8.63432070e-02 8.65558031e-02 + 8.67686227e-02 8.69816656e-02 8.71949318e-02 8.74084208e-02 8.76221327e-02 + 8.78360672e-02 8.80502241e-02 8.82646033e-02 8.84792045e-02 8.86940276e-02 + 8.89090725e-02 8.91243388e-02 8.93398265e-02 8.95555354e-02 8.97714652e-02 + 8.99876159e-02 9.02039871e-02 9.04205788e-02 9.06373908e-02 9.08544228e-02 + 9.10716747e-02 9.12891463e-02 9.15068374e-02 9.17247478e-02 9.19428774e-02 + 9.21612260e-02 9.23797934e-02 9.25985793e-02 9.28175837e-02 9.30368064e-02 + 9.32562470e-02 9.34759056e-02 9.36957818e-02 9.39158756e-02 9.41361866e-02 + 9.43567148e-02 9.45774599e-02 9.47984219e-02 9.50196003e-02 9.52409952e-02 + 9.54626063e-02 9.56844334e-02 9.59064764e-02 9.61287350e-02 9.63512090e-02 + 9.65738984e-02 9.67968029e-02 9.70199222e-02 9.72432563e-02 9.74668050e-02 + 9.76905680e-02 9.79145452e-02 9.81387363e-02 9.83631413e-02 9.85877598e-02 + 9.88125918e-02 9.90376370e-02 9.92628953e-02 9.94883665e-02 9.97140503e-02 + 9.99399466e-02 1.00166055e-01 1.00392376e-01 1.00618909e-01 1.00845653e-01 + 1.01072609e-01 1.01299776e-01 1.01527155e-01 1.01754744e-01 1.01982545e-01 + 1.02210556e-01 1.02438777e-01 1.02667209e-01 1.02895850e-01 1.03124702e-01 + 1.03353763e-01 1.03583034e-01 1.03812514e-01 1.04042203e-01 1.04272101e-01 + 1.04502207e-01 1.04732523e-01 1.04963046e-01 1.05193778e-01 1.05424718e-01 + 1.05655865e-01 1.05887221e-01 1.06118783e-01 1.06350553e-01 1.06582530e-01 + 1.06814713e-01 1.07047104e-01 1.07279701e-01 1.07512504e-01 1.07745513e-01 + 1.07978728e-01 1.08212148e-01 1.08445775e-01 1.08679606e-01 1.08913643e-01 + 1.09147884e-01 1.09382331e-01 1.09616982e-01 1.09851837e-01 1.10086896e-01 + 1.10322160e-01 1.10557627e-01 1.10793298e-01 1.11029172e-01 1.11265249e-01 + 1.11501530e-01 1.11738013e-01 1.11974699e-01 1.12211587e-01 1.12448678e-01 + 1.12685971e-01 1.12923465e-01 1.13161162e-01 1.13399059e-01 1.13637158e-01 + 1.13875458e-01 1.14113960e-01 1.14352661e-01 1.14591564e-01 1.14830666e-01 + 1.15069969e-01 1.15309472e-01 1.15549174e-01 1.15789076e-01 1.16029178e-01 + 1.16269478e-01 1.16509978e-01 1.16750676e-01 1.16991573e-01 1.17232669e-01 + 1.17473962e-01 1.17715454e-01 1.17957143e-01 1.18199030e-01 1.18441115e-01 + 1.18683397e-01 1.18925875e-01 1.19168551e-01 1.19411423e-01 1.19654492e-01 + 1.19897757e-01 1.20141218e-01 1.20384875e-01 1.20628728e-01 1.20872776e-01 + 1.21117020e-01 1.21361458e-01 1.21606092e-01 1.21850920e-01 1.22095943e-01 + 1.22341160e-01 1.22586571e-01 1.22832176e-01 1.23077975e-01 1.23323967e-01 + 1.23570153e-01 1.23816532e-01 1.24063104e-01 1.24309869e-01 1.24556826e-01 + 1.24803975e-01 1.25051317e-01 1.25298851e-01 1.25546576e-01 1.25794494e-01 + 1.26042602e-01 1.26290902e-01 1.26539393e-01 1.26788074e-01 1.27036946e-01 + 1.27286009e-01 1.27535261e-01 1.27784704e-01 1.28034337e-01 1.28284159e-01 + 1.28534171e-01 1.28784372e-01 1.29034762e-01 1.29285340e-01 1.29536108e-01 + 1.29787064e-01 1.30038208e-01 1.30289540e-01 1.30541060e-01 1.30792768e-01 + 1.31044663e-01 1.31296746e-01 1.31549015e-01 1.31801471e-01 1.32054115e-01 + 1.32306944e-01 1.32559960e-01 1.32813162e-01 1.33066550e-01 1.33320123e-01 + 1.33573882e-01 1.33827826e-01 1.34081956e-01 1.34336270e-01 1.34590769e-01 + 1.34845452e-01 1.35100320e-01 1.35355372e-01 1.35610608e-01 1.35866027e-01 + 1.36121630e-01 1.36377417e-01 1.36633386e-01 1.36889538e-01 1.37145873e-01 + 1.37402391e-01 1.37659091e-01 1.37915973e-01 1.38173037e-01 1.38430283e-01 + 1.38687710e-01 1.38945318e-01 1.39203108e-01 1.39461079e-01 1.39719230e-01 + 1.39977562e-01 1.40236074e-01 1.40494766e-01 1.40753639e-01 1.41012691e-01 + 1.41271922e-01 1.41531333e-01 1.41790923e-01 1.42050692e-01 1.42310640e-01 + 1.42570766e-01 1.42831071e-01 1.43091554e-01 1.43352214e-01 1.43613053e-01 + 1.43874069e-01 1.44135262e-01 1.44396633e-01 1.44658180e-01 1.44919904e-01 + 1.45181805e-01 1.45443882e-01 1.45706135e-01 1.45968565e-01 1.46231170e-01 + 1.46493950e-01 1.46756906e-01 1.47020037e-01 1.47283343e-01 1.47546824e-01 + 1.47810479e-01 1.48074308e-01 1.48338312e-01 1.48602490e-01 1.48866841e-01 + 1.49131366e-01 1.49396065e-01 1.49660936e-01 1.49925981e-01 1.50191198e-01 + 1.50456588e-01 1.50722150e-01 1.50987884e-01 1.51253790e-01 1.51519868e-01 + 1.51786118e-01 1.52052539e-01 1.52319131e-01 1.52585894e-01 1.52852827e-01 + 1.53119932e-01 1.53387206e-01 1.53654651e-01 1.53922266e-01 1.54190050e-01 + 1.54458004e-01 1.54726127e-01 1.54994420e-01 1.55262881e-01 1.55531511e-01 + 1.55800310e-01 1.56069277e-01 1.56338412e-01 1.56607715e-01 1.56877186e-01 + 1.57146824e-01 1.57416630e-01 1.57686603e-01 1.57956743e-01 1.58227049e-01 + 1.58497522e-01 1.58768161e-01 1.59038967e-01 1.59309938e-01 1.59581075e-01 + 1.59852378e-01 1.60123846e-01 1.60395479e-01 1.60667277e-01 1.60939240e-01 + 1.61211367e-01 1.61483659e-01 1.61756114e-01 1.62028734e-01 1.62301517e-01 + 1.62574464e-01 1.62847574e-01 1.63120847e-01 1.63394283e-01 1.63667882e-01 + 1.63941644e-01 1.64215567e-01 1.64489653e-01 1.64763901e-01 1.65038310e-01 + 1.65312881e-01 1.65587613e-01 1.65862506e-01 1.66137560e-01 1.66412775e-01 + 1.66688150e-01 1.66963686e-01 1.67239381e-01 1.67515237e-01 1.67791252e-01 + 1.68067427e-01 1.68343761e-01 1.68620254e-01 1.68896906e-01 1.69173717e-01 + 1.69450686e-01 1.69727813e-01 1.70005098e-01 1.70282542e-01 1.70560143e-01 + 1.70837901e-01 1.71115817e-01 1.71393889e-01 1.71672119e-01 1.71950505e-01 + 1.72229048e-01 1.72507747e-01 1.72786602e-01 1.73065613e-01 1.73344779e-01 + 1.73624101e-01 1.73903579e-01 1.74183211e-01 1.74462998e-01 1.74742940e-01 + 1.75023036e-01 1.75303286e-01 1.75583691e-01 1.75864249e-01 1.76144961e-01 + 1.76425826e-01 1.76706845e-01 1.76988017e-01 1.77269341e-01 1.77550818e-01 + 1.77832448e-01 1.78114229e-01 1.78396163e-01 1.78678248e-01 1.78960486e-01 + 1.79242874e-01 1.79525414e-01 1.79808105e-01 1.80090946e-01 1.80373938e-01 + 1.80657081e-01 1.80940374e-01 1.81223816e-01 1.81507409e-01 1.81791151e-01 + 1.82075043e-01 1.82359084e-01 1.82643273e-01 1.82927612e-01 1.83212099e-01 + 1.83496734e-01 1.83781518e-01 1.84066450e-01 1.84351529e-01 1.84636756e-01 + 1.84922131e-01 1.85207652e-01 1.85493321e-01 1.85779136e-01 1.86065098e-01 + 1.86351206e-01 1.86637461e-01 1.86923861e-01 1.87210407e-01 1.87497099e-01 + 1.87783936e-01 1.88070919e-01 1.88358046e-01 1.88645318e-01 1.88932734e-01 + 1.89220295e-01 1.89508000e-01 1.89795849e-01 1.90083842e-01 1.90371978e-01 + 1.90660258e-01 1.90948681e-01 1.91237246e-01 1.91525955e-01 1.91814806e-01 + 1.92103799e-01 1.92392935e-01 1.92682212e-01 1.92971631e-01 1.93261192e-01 + 1.93550894e-01 1.93840737e-01 1.94130721e-01 1.94420846e-01 1.94711111e-01 + 1.95001517e-01 1.95292063e-01 1.95582748e-01 1.95873574e-01 1.96164539e-01 + 1.96455643e-01 1.96746886e-01 1.97038269e-01 1.97329790e-01 1.97621449e-01 + 1.97913247e-01 1.98205183e-01 1.98497257e-01 1.98789469e-01 1.99081818e-01 + 1.99374304e-01 1.99666928e-01 1.99959688e-01 2.00252585e-01 2.00545619e-01 + 2.00838789e-01 2.01132095e-01 2.01425537e-01 2.01719114e-01 2.02012828e-01 + 2.02306676e-01 2.02600660e-01 2.02894778e-01 2.03189031e-01 2.03483419e-01 + 2.03777941e-01 2.04072597e-01 2.04367387e-01 2.04662311e-01 2.04957368e-01 + 2.05252558e-01 2.05547882e-01 2.05843338e-01 2.06138928e-01 2.06434649e-01 + 2.06730503e-01 2.07026489e-01 2.07322607e-01 2.07618857e-01 2.07915238e-01 + 2.08211750e-01 2.08508394e-01 2.08805168e-01 2.09102073e-01 2.09399109e-01 + 2.09696275e-01 2.09993571e-01 2.10290997e-01 2.10588552e-01 2.10886237e-01 + 2.11184052e-01 2.11481995e-01 2.11780068e-01 2.12078269e-01 2.12376598e-01 + 2.12675056e-01 2.12973642e-01 2.13272356e-01 2.13571197e-01 2.13870166e-01 + 2.14169263e-01 2.14468486e-01 2.14767837e-01 2.15067314e-01 2.15366917e-01 + 2.15666647e-01 2.15966503e-01 2.16266485e-01 2.16566592e-01 2.16866825e-01 + 2.17167184e-01 2.17467667e-01 2.17768276e-01 2.18069009e-01 2.18369866e-01 + 2.18670848e-01 2.18971954e-01 2.19273184e-01 2.19574538e-01 2.19876015e-01 + 2.20177615e-01 2.20479339e-01 2.20781185e-01 2.21083155e-01 2.21385246e-01 + 2.21687460e-01 2.21989797e-01 2.22292255e-01 2.22594835e-01 2.22897536e-01 + 2.23200359e-01 2.23503303e-01 2.23806367e-01 2.24109553e-01 2.24412859e-01 + 2.24716285e-01 2.25019832e-01 2.25323498e-01 2.25627285e-01 2.25931191e-01 + 2.26235216e-01 2.26539360e-01 2.26843623e-01 2.27148005e-01 2.27452506e-01 + 2.27757125e-01 2.28061862e-01 2.28366717e-01 2.28671690e-01 2.28976780e-01 + 2.29281988e-01 2.29587313e-01 2.29892755e-01 2.30198313e-01 2.30503989e-01 + 2.30809780e-01 2.31115688e-01 2.31421712e-01 2.31727852e-01 2.32034107e-01 + 2.32340478e-01 2.32646964e-01 2.32953565e-01 2.33260280e-01 2.33567111e-01 + 2.33874055e-01 2.34181114e-01 2.34488287e-01 2.34795574e-01 2.35102975e-01 + 2.35410489e-01 2.35718116e-01 2.36025856e-01 2.36333709e-01 2.36641675e-01 + 2.36949753e-01 2.37257943e-01 2.37566246e-01 2.37874660e-01 2.38183186e-01 + 2.38491824e-01 2.38800572e-01 2.39109432e-01 2.39418403e-01 2.39727484e-01 + 2.40036676e-01 2.40345978e-01 2.40655391e-01 2.40964913e-01 2.41274545e-01 + 2.41584286e-01 2.41894137e-01 2.42204097e-01 2.42514166e-01 2.42824344e-01 + 2.43134630e-01 2.43445024e-01 2.43755527e-01 2.44066138e-01 2.44376856e-01 + 2.44687682e-01 2.44998615e-01 2.45309656e-01 2.45620803e-01 2.45932058e-01 + 2.46243419e-01 2.46554886e-01 2.46866459e-01 2.47178139e-01 2.47489924e-01 + 2.47801815e-01 2.48113812e-01 2.48425913e-01 2.48738120e-01 2.49050431e-01 + 2.49362848e-01 2.49675368e-01 2.49987993e-01 2.50300722e-01 2.50613555e-01 + 2.50926492e-01 2.51239532e-01 2.51552675e-01 2.51865922e-01 2.52179271e-01 + 2.52492723e-01 2.52806278e-01 2.53119935e-01 2.53433694e-01 2.53747555e-01 + 2.54061518e-01 2.54375582e-01 2.54689748e-01 2.55004015e-01 2.55318383e-01 + 2.55632851e-01 2.55947421e-01 2.56262090e-01 2.56576860e-01 2.56891730e-01 + 2.57206700e-01 2.57521770e-01 2.57836938e-01 2.58152207e-01 2.58467574e-01 + 2.58783040e-01 2.59098605e-01 2.59414268e-01 2.59730029e-01 2.60045889e-01 + 2.60361847e-01 2.60677902e-01 2.60994055e-01 2.61310305e-01 2.61626652e-01 + 2.61943096e-01 2.62259637e-01 2.62576275e-01 2.62893009e-01 2.63209839e-01 + 2.63526765e-01 2.63843787e-01 2.64160905e-01 2.64478118e-01 2.64795426e-01 + 2.65112830e-01 2.65430328e-01 2.65747921e-01 2.66065608e-01 2.66383390e-01 + 2.66701265e-01 2.67019235e-01 2.67337298e-01 2.67655455e-01 2.67973706e-01 + 2.68292049e-01 2.68610485e-01 2.68929014e-01 2.69247636e-01 2.69566350e-01 + 2.69885156e-01 2.70204055e-01 2.70523045e-01 2.70842127e-01 2.71161300e-01 + 2.71480564e-01 2.71799920e-01 2.72119366e-01 2.72438903e-01 2.72758531e-01 + 2.73078249e-01 2.73398057e-01 2.73717955e-01 2.74037942e-01 2.74358019e-01 + 2.74678186e-01 2.74998442e-01 2.75318787e-01 2.75639220e-01 2.75959743e-01 + 2.76280353e-01 2.76601052e-01 2.76921839e-01 2.77242714e-01 2.77563676e-01 + 2.77884726e-01 2.78205864e-01 2.78527088e-01 2.78848399e-01 2.79169798e-01 + 2.79491282e-01 2.79812853e-01 2.80134510e-01 2.80456254e-01 2.80778083e-01 + 2.81099997e-01 2.81421997e-01 2.81744083e-01 2.82066253e-01 2.82388508e-01 + 2.82710848e-01 2.83033273e-01 2.83355782e-01 2.83678374e-01 2.84001051e-01 + 2.84323812e-01 2.84646656e-01 2.84969584e-01 2.85292594e-01 2.85615688e-01 + 2.85938865e-01 2.86262124e-01 2.86585466e-01 2.86908890e-01 2.87232396e-01 + 2.87555984e-01 2.87879654e-01 2.88203405e-01 2.88527238e-01 2.88851152e-01 + 2.89175147e-01 2.89499222e-01 2.89823378e-01 2.90147615e-01 2.90471932e-01 + 2.90796329e-01 2.91120806e-01 2.91445362e-01 2.91769999e-01 2.92094714e-01 + 2.92419508e-01 2.92744382e-01 2.93069334e-01 2.93394365e-01 2.93719474e-01 + 2.94044662e-01 2.94369927e-01 2.94695271e-01 2.95020692e-01 2.95346191e-01 + 2.95671767e-01 2.95997420e-01 2.96323150e-01 2.96648956e-01 2.96974840e-01 + 2.97300799e-01 2.97626835e-01 2.97952947e-01 2.98279135e-01 2.98605399e-01 + 2.98931738e-01 2.99258152e-01 2.99584642e-01 2.99911206e-01 3.00237845e-01 + 3.00564559e-01 3.00891347e-01 3.01218209e-01 3.01545146e-01 3.01872156e-01 + 3.02199240e-01 3.02526398e-01 3.02853628e-01 3.03180932e-01 3.03508309e-01 + 3.03835759e-01 3.04163281e-01 3.04490876e-01 3.04818543e-01 3.05146281e-01 + 3.05474092e-01 3.05801975e-01 3.06129929e-01 3.06457954e-01 3.06786051e-01 + 3.07114218e-01 3.07442456e-01 3.07770765e-01 3.08099145e-01 3.08427594e-01 + 3.08756114e-01 3.09084703e-01 3.09413363e-01 3.09742091e-01 3.10070890e-01 + 3.10399757e-01 3.10728693e-01 3.11057699e-01 3.11386772e-01 3.11715915e-01 + 3.12045125e-01 3.12374404e-01 3.12703751e-01 3.13033165e-01 3.13362647e-01 + 3.13692197e-01 3.14021813e-01 3.14351497e-01 3.14681248e-01 3.15011065e-01 + 3.15340949e-01 3.15670899e-01 3.16000915e-01 3.16330997e-01 3.16661145e-01 + 3.16991359e-01 3.17321638e-01 3.17651983e-01 3.17982392e-01 3.18312867e-01 + 3.18643406e-01 3.18974010e-01 3.19304678e-01 3.19635411e-01 3.19966207e-01 + 3.20297067e-01 3.20627992e-01 3.20958979e-01 3.21290030e-01 3.21621144e-01 + 3.21952321e-01 3.22283561e-01 3.22614864e-01 3.22946229e-01 3.23277656e-01 + 3.23609146e-01 3.23940697e-01 3.24272310e-01 3.24603985e-01 3.24935721e-01 + 3.25267519e-01 3.25599377e-01 3.25931297e-01 3.26263277e-01 3.26595317e-01 + 3.26927419e-01 3.27259580e-01 3.27591801e-01 3.27924082e-01 3.28256423e-01 + 3.28588824e-01 3.28921283e-01 3.29253802e-01 3.29586380e-01 3.29919017e-01 + 3.30251712e-01 3.30584466e-01 3.30917278e-01 3.31250149e-01 3.31583077e-01 + 3.31916063e-01 3.32249107e-01 3.32582208e-01 3.32915366e-01 3.33248582e-01 + 3.33581854e-01 3.33915183e-01 3.34248569e-01 3.34582011e-01 3.34915510e-01 + 3.35249064e-01 3.35582675e-01 3.35916341e-01 3.36250062e-01 3.36583839e-01 + 3.36917672e-01 3.37251559e-01 3.37585501e-01 3.37919498e-01 3.38253550e-01 + 3.38587656e-01 3.38921816e-01 3.39256030e-01 3.39590298e-01 3.39924620e-01 + 3.40258995e-01 3.40593423e-01 3.40927905e-01 3.41262440e-01 3.41597027e-01 + 3.41931667e-01 3.42266360e-01 3.42601105e-01 3.42935903e-01 3.43270752e-01 + 3.43605653e-01 3.43940606e-01 3.44275610e-01 3.44610666e-01 3.44945772e-01 + 3.45280930e-01 3.45616139e-01 3.45951398e-01 3.46286708e-01 3.46622068e-01 + 3.46957478e-01 3.47292938e-01 3.47628448e-01 3.47964008e-01 3.48299617e-01 + 3.48635275e-01 3.48970983e-01 3.49306740e-01 3.49642545e-01 3.49978399e-01 + 3.50314302e-01 3.50650253e-01 3.50986252e-01 3.51322299e-01 3.51658394e-01 + 3.51994536e-01 3.52330726e-01 3.52666964e-01 3.53003248e-01 3.53339580e-01 + 3.53675958e-01 3.54012383e-01 3.54348855e-01 3.54685373e-01 3.55021937e-01 + 3.55358547e-01 3.55695203e-01 3.56031904e-01 3.56368651e-01 3.56705444e-01 + 3.57042281e-01 3.57379164e-01 3.57716092e-01 3.58053064e-01 3.58390081e-01 + 3.58727142e-01 3.59064247e-01 3.59401397e-01 3.59738590e-01 3.60075827e-01 + 3.60413107e-01 3.60750431e-01 3.61087799e-01 3.61425209e-01 3.61762662e-01 + 3.62100158e-01 3.62437696e-01 3.62775277e-01 3.63112900e-01 3.63450566e-01 + 3.63788273e-01 3.64126022e-01 3.64463812e-01 3.64801645e-01 3.65139518e-01 + 3.65477432e-01 3.65815388e-01 3.66153384e-01 3.66491421e-01 3.66829498e-01 + 3.67167616e-01 3.67505774e-01 3.67843971e-01 3.68182209e-01 3.68520487e-01 + 3.68858803e-01 3.69197160e-01 3.69535555e-01 3.69873990e-01 3.70212463e-01 + 3.70550975e-01 3.70889526e-01 3.71228115e-01 3.71566742e-01 3.71905408e-01 + 3.72244111e-01 3.72582852e-01 3.72921631e-01 3.73260447e-01 3.73599300e-01 + 3.73938191e-01 3.74277119e-01 3.74616083e-01 3.74955084e-01 3.75294122e-01 + 3.75633196e-01 3.75972306e-01 3.76311452e-01 3.76650634e-01 3.76989852e-01 + 3.77329105e-01 3.77668394e-01 3.78007718e-01 3.78347077e-01 3.78686471e-01 + 3.79025899e-01 3.79365363e-01 3.79704861e-01 3.80044393e-01 3.80383959e-01 + 3.80723559e-01 3.81063194e-01 3.81402861e-01 3.81742563e-01 3.82082298e-01 + 3.82422065e-01 3.82761866e-01 3.83101700e-01 3.83441567e-01 3.83781466e-01 + 3.84121398e-01 3.84461362e-01 3.84801358e-01 3.85141386e-01 3.85481446e-01 + 3.85821538e-01 3.86161661e-01 3.86501816e-01 3.86842001e-01 3.87182218e-01 + 3.87522466e-01 3.87862744e-01 3.88203053e-01 3.88543393e-01 3.88883763e-01 + 3.89224162e-01 3.89564592e-01 3.89905052e-01 3.90245541e-01 3.90586060e-01 + 3.90926609e-01 3.91267186e-01 3.91607793e-01 3.91948428e-01 3.92289093e-01 + 3.92629785e-01 3.92970507e-01 3.93311256e-01 3.93652034e-01 3.93992840e-01 + 3.94333674e-01 3.94674535e-01 3.95015424e-01 3.95356341e-01 3.95697284e-01 + 3.96038255e-01 3.96379253e-01 3.96720277e-01 3.97061328e-01 3.97402406e-01 + 3.97743510e-01 3.98084640e-01 3.98425796e-01 3.98766978e-01 3.99108186e-01 + 3.99449420e-01 3.99790679e-01 4.00131963e-01 4.00473272e-01 4.00814607e-01 + 4.01155966e-01 4.01497350e-01 4.01838759e-01 4.02180192e-01 4.02521649e-01 + 4.02863130e-01 4.03204636e-01 4.03546165e-01 4.03887718e-01 4.04229294e-01 + 4.04570894e-01 4.04912517e-01 4.05254163e-01 4.05595832e-01 4.05937524e-01 + 4.06279238e-01 4.06620975e-01 4.06962734e-01 4.07304516e-01 4.07646319e-01 + 4.07988145e-01 4.08329992e-01 4.08671861e-01 4.09013751e-01 4.09355663e-01 + 4.09697596e-01 4.10039549e-01 4.10381524e-01 4.10723520e-01 4.11065536e-01 + 4.11407572e-01 4.11749629e-01 4.12091706e-01 4.12433803e-01 4.12775920e-01 + 4.13118057e-01 4.13460213e-01 4.13802389e-01 4.14144583e-01 4.14486798e-01 + 4.14829031e-01 4.15171283e-01 4.15513553e-01 4.15855843e-01 4.16198150e-01 + 4.16540476e-01 4.16882821e-01 4.17225183e-01 4.17567563e-01 4.17909961e-01 + 4.18252376e-01 4.18594809e-01 4.18937259e-01 4.19279726e-01 4.19622210e-01 + 4.19964711e-01 4.20307229e-01 4.20649763e-01 4.20992314e-01 4.21334881e-01 + 4.21677465e-01 4.22020064e-01 4.22362679e-01 4.22705310e-01 4.23047957e-01 + 4.23390619e-01 4.23733296e-01 4.24075988e-01 4.24418696e-01 4.24761418e-01 + 4.25104155e-01 4.25446907e-01 4.25789673e-01 4.26132454e-01 4.26475249e-01 + 4.26818057e-01 4.27160880e-01 4.27503717e-01 4.27846567e-01 4.28189430e-01 + 4.28532307e-01 4.28875197e-01 4.29218101e-01 4.29561017e-01 4.29903946e-01 + 4.30246888e-01 4.30589842e-01 4.30932808e-01 4.31275787e-01 4.31618778e-01 + 4.31961781e-01 4.32304796e-01 4.32647822e-01 4.32990860e-01 4.33333909e-01 + 4.33676970e-01 4.34020042e-01 4.34363125e-01 4.34706219e-01 4.35049323e-01 + 4.35392438e-01 4.35735564e-01 4.36078700e-01 4.36421846e-01 4.36765002e-01 + 4.37108168e-01 4.37451344e-01 4.37794529e-01 4.38137724e-01 4.38480929e-01 + 4.38824142e-01 4.39167365e-01 4.39510597e-01 4.39853837e-01 4.40197087e-01 + 4.40540345e-01 4.40883611e-01 4.41226885e-01 4.41570168e-01 4.41913459e-01 + 4.42256758e-01 4.42600064e-01 4.42943378e-01 4.43286700e-01 4.43630029e-01 + 4.43973365e-01 4.44316708e-01 4.44660058e-01 4.45003416e-01 4.45346779e-01 + 4.45690150e-01 4.46033526e-01 4.46376910e-01 4.46720299e-01 4.47063694e-01 + 4.47407095e-01 4.47750502e-01 4.48093915e-01 4.48437333e-01 4.48780757e-01 + 4.49124185e-01 4.49467619e-01 4.49811058e-01 4.50154502e-01 4.50497950e-01 + 4.50841403e-01 4.51184861e-01 4.51528322e-01 4.51871788e-01 4.52215259e-01 + 4.52558733e-01 4.52902210e-01 4.53245692e-01 4.53589177e-01 4.53932665e-01 + 4.54276157e-01 4.54619652e-01 4.54963150e-01 4.55306651e-01 4.55650154e-01 + 2.08130000e-04 2.08281191e-04 2.08734762e-04 2.09490714e-04 2.10549046e-04 + 2.11909757e-04 2.13572846e-04 2.15538310e-04 2.17806148e-04 2.20376358e-04 + 2.23248936e-04 2.26423882e-04 2.29901190e-04 2.33680858e-04 2.37762883e-04 + 2.42147260e-04 2.46833984e-04 2.51823051e-04 2.57114457e-04 2.62708196e-04 + 2.68604263e-04 2.74802652e-04 2.81303356e-04 2.88106370e-04 2.95211687e-04 + 3.02619299e-04 3.10329200e-04 3.18341382e-04 3.26655837e-04 3.35272557e-04 + 3.44191533e-04 3.53412758e-04 3.62936221e-04 3.72761913e-04 3.82889825e-04 + 3.93319947e-04 4.04052269e-04 4.15086779e-04 4.26423468e-04 4.38062324e-04 + 4.50003336e-04 4.62246492e-04 4.74791780e-04 4.87639188e-04 5.00788703e-04 + 5.14240312e-04 5.27994002e-04 5.42049760e-04 5.56407572e-04 5.71067423e-04 + 5.86029300e-04 6.01293187e-04 6.16859071e-04 6.32726934e-04 6.48896763e-04 + 6.65368541e-04 6.82142252e-04 6.99217880e-04 7.16595407e-04 7.34274817e-04 + 7.52256092e-04 7.70539216e-04 7.89124169e-04 8.08010934e-04 8.27199493e-04 + 8.46689825e-04 8.66481913e-04 8.86575737e-04 9.06971278e-04 9.27668514e-04 + 9.48667427e-04 9.69967995e-04 9.91570198e-04 1.01347401e-03 1.03567942e-03 + 1.05818640e-03 1.08099493e-03 1.10410498e-03 1.12751654e-03 1.15122957e-03 + 1.17524406e-03 1.19955999e-03 1.22417733e-03 1.24909605e-03 1.27431613e-03 + 1.29983755e-03 1.32566029e-03 1.35178430e-03 1.37820958e-03 1.40493610e-03 + 1.43196382e-03 1.45929272e-03 1.48692278e-03 1.51485397e-03 1.54308626e-03 + 1.57161963e-03 1.60045404e-03 1.62958946e-03 1.65902588e-03 1.68876325e-03 + 1.71880156e-03 1.74914077e-03 1.77978085e-03 1.81072177e-03 1.84196351e-03 + 1.87350602e-03 1.90534929e-03 1.93749327e-03 1.96993795e-03 2.00268328e-03 + 2.03572923e-03 2.06907577e-03 2.10272288e-03 2.13667051e-03 2.17091863e-03 + 2.20546721e-03 2.24031622e-03 2.27546562e-03 2.31091538e-03 2.34666546e-03 + 2.38271583e-03 2.41906645e-03 2.45571729e-03 2.49266831e-03 2.52991947e-03 + 2.56747075e-03 2.60532209e-03 2.64347347e-03 2.68192485e-03 2.72067619e-03 + 2.75972745e-03 2.79907859e-03 2.83872959e-03 2.87868038e-03 2.91893095e-03 + 2.95948125e-03 3.00033123e-03 3.04148087e-03 3.08293011e-03 3.12467892e-03 + 3.16672726e-03 3.20907509e-03 3.25172236e-03 3.29466904e-03 3.33791508e-03 + 3.38146044e-03 3.42530507e-03 3.46944894e-03 3.51389201e-03 3.55863422e-03 + 3.60367554e-03 3.64901591e-03 3.69465531e-03 3.74059367e-03 3.78683096e-03 + 3.83336714e-03 3.88020215e-03 3.92733595e-03 3.97476850e-03 4.02249975e-03 + 4.07052965e-03 4.11885815e-03 4.16748522e-03 4.21641079e-03 4.26563483e-03 + 4.31515728e-03 4.36497811e-03 4.41509725e-03 4.46551466e-03 4.51623029e-03 + 4.56724409e-03 4.61855601e-03 4.67016601e-03 4.72207403e-03 4.77428002e-03 + 4.82678393e-03 4.87958570e-03 4.93268530e-03 4.98608266e-03 5.03977774e-03 + 5.09377048e-03 5.14806083e-03 5.20264873e-03 5.25753414e-03 5.31271700e-03 + 5.36819725e-03 5.42397485e-03 5.48004973e-03 5.53642185e-03 5.59309115e-03 + 5.65005757e-03 5.70732106e-03 5.76488157e-03 5.82273903e-03 5.88089339e-03 + 5.93934459e-03 5.99809258e-03 6.05713731e-03 6.11647870e-03 6.17611671e-03 + 6.23605128e-03 6.29628235e-03 6.35680986e-03 6.41763375e-03 6.47875396e-03 + 6.54017044e-03 6.60188312e-03 6.66389194e-03 6.72619685e-03 6.78879778e-03 + 6.85169468e-03 6.91488748e-03 6.97837611e-03 7.04216053e-03 7.10624066e-03 + 7.17061645e-03 7.23528783e-03 7.30025474e-03 7.36551712e-03 7.43107490e-03 + 7.49692802e-03 7.56307641e-03 7.62952002e-03 7.69625878e-03 7.76329262e-03 + 7.83062147e-03 7.89824528e-03 7.96616398e-03 8.03437750e-03 8.10288577e-03 + 8.17168874e-03 8.24078632e-03 8.31017847e-03 8.37986510e-03 8.44984615e-03 + 8.52012155e-03 8.59069124e-03 8.66155515e-03 8.73271321e-03 8.80416535e-03 + 8.87591149e-03 8.94795158e-03 9.02028554e-03 9.09291331e-03 9.16583480e-03 + 9.23904995e-03 9.31255870e-03 9.38636096e-03 9.46045668e-03 9.53484577e-03 + 9.60952816e-03 9.68450379e-03 9.75977258e-03 9.83533445e-03 9.91118934e-03 + 9.98733717e-03 1.00637779e-02 1.01405114e-02 1.02175376e-02 1.02948564e-02 + 1.03724679e-02 1.04503718e-02 1.05285681e-02 1.06070568e-02 1.06858378e-02 + 1.07649109e-02 1.08442762e-02 1.09239335e-02 1.10038828e-02 1.10841240e-02 + 1.11646570e-02 1.12454817e-02 1.13265980e-02 1.14080060e-02 1.14897054e-02 + 1.15716963e-02 1.16539785e-02 1.17365519e-02 1.18194166e-02 1.19025723e-02 + 1.19860191e-02 1.20697568e-02 1.21537854e-02 1.22381047e-02 1.23227148e-02 + 1.24076155e-02 1.24928067e-02 1.25782883e-02 1.26640604e-02 1.27501227e-02 + 1.28364752e-02 1.29231179e-02 1.30100506e-02 1.30972732e-02 1.31847858e-02 + 1.32725881e-02 1.33606801e-02 1.34490618e-02 1.35377329e-02 1.36266936e-02 + 1.37159436e-02 1.38054829e-02 1.38953113e-02 1.39854289e-02 1.40758355e-02 + 1.41665311e-02 1.42575155e-02 1.43487886e-02 1.44403504e-02 1.45322008e-02 + 1.46243398e-02 1.47167671e-02 1.48094827e-02 1.49024866e-02 1.49957786e-02 + 1.50893587e-02 1.51832267e-02 1.52773826e-02 1.53718263e-02 1.54665577e-02 + 1.55615767e-02 1.56568832e-02 1.57524771e-02 1.58483584e-02 1.59445269e-02 + 1.60409825e-02 1.61377252e-02 1.62347549e-02 1.63320714e-02 1.64296747e-02 + 1.65275647e-02 1.66257413e-02 1.67242043e-02 1.68229538e-02 1.69219896e-02 + 1.70213116e-02 1.71209197e-02 1.72208138e-02 1.73209939e-02 1.74214598e-02 + 1.75222114e-02 1.76232487e-02 1.77245715e-02 1.78261798e-02 1.79280734e-02 + 1.80302523e-02 1.81327163e-02 1.82354654e-02 1.83384994e-02 1.84418184e-02 + 1.85454220e-02 1.86493104e-02 1.87534833e-02 1.88579407e-02 1.89626824e-02 + 1.90677084e-02 1.91730186e-02 1.92786129e-02 1.93844911e-02 1.94906532e-02 + 1.95970991e-02 1.97038286e-02 1.98108417e-02 1.99181382e-02 2.00257182e-02 + 2.01335813e-02 2.02417277e-02 2.03501571e-02 2.04588694e-02 2.05678646e-02 + 2.06771425e-02 2.07867031e-02 2.08965462e-02 2.10066717e-02 2.11170796e-02 + 2.12277697e-02 2.13387419e-02 2.14499962e-02 2.15615323e-02 2.16733503e-02 + 2.17854499e-02 2.18978311e-02 2.20104938e-02 2.21234379e-02 2.22366633e-02 + 2.23501698e-02 2.24639574e-02 2.25780260e-02 2.26923753e-02 2.28070055e-02 + 2.29219162e-02 2.30371074e-02 2.31525791e-02 2.32683311e-02 2.33843632e-02 + 2.35006755e-02 2.36172677e-02 2.37341397e-02 2.38512915e-02 2.39687230e-02 + 2.40864339e-02 2.42044243e-02 2.43226940e-02 2.44412429e-02 2.45600709e-02 + 2.46791779e-02 2.47985637e-02 2.49182282e-02 2.50381714e-02 2.51583931e-02 + 2.52788932e-02 2.53996717e-02 2.55207283e-02 2.56420629e-02 2.57636755e-02 + 2.58855660e-02 2.60077341e-02 2.61301799e-02 2.62529032e-02 2.63759039e-02 + 2.64991818e-02 2.66227368e-02 2.67465689e-02 2.68706779e-02 2.69950637e-02 + 2.71197262e-02 2.72446653e-02 2.73698808e-02 2.74953726e-02 2.76211406e-02 + 2.77471848e-02 2.78735049e-02 2.80001009e-02 2.81269726e-02 2.82541199e-02 + 2.83815427e-02 2.85092409e-02 2.86372144e-02 2.87654630e-02 2.88939867e-02 + 2.90227852e-02 2.91518585e-02 2.92812065e-02 2.94108290e-02 2.95407260e-02 + 2.96708972e-02 2.98013426e-02 2.99320621e-02 3.00630555e-02 3.01943227e-02 + 3.03258636e-02 3.04576781e-02 3.05897660e-02 3.07221272e-02 3.08547616e-02 + 3.09876691e-02 3.11208496e-02 3.12543028e-02 3.13880288e-02 3.15220273e-02 + 3.16562983e-02 3.17908416e-02 3.19256571e-02 3.20607447e-02 3.21961042e-02 + 3.23317356e-02 3.24676386e-02 3.26038132e-02 3.27402593e-02 3.28769766e-02 + 3.30139652e-02 3.31512248e-02 3.32887554e-02 3.34265567e-02 3.35646288e-02 + 3.37029714e-02 3.38415844e-02 3.39804677e-02 3.41196212e-02 3.42590447e-02 + 3.43987381e-02 3.45387013e-02 3.46789341e-02 3.48194365e-02 3.49602082e-02 + 3.51012492e-02 3.52425593e-02 3.53841384e-02 3.55259864e-02 3.56681031e-02 + 3.58104884e-02 3.59531422e-02 3.60960643e-02 3.62392547e-02 3.63827131e-02 + 3.65264394e-02 3.66704335e-02 3.68146954e-02 3.69592247e-02 3.71040215e-02 + 3.72490856e-02 3.73944167e-02 3.75400149e-02 3.76858800e-02 3.78320118e-02 + 3.79784102e-02 3.81250751e-02 3.82720063e-02 3.84192037e-02 3.85666672e-02 + 3.87143966e-02 3.88623918e-02 3.90106526e-02 3.91591790e-02 3.93079707e-02 + 3.94570277e-02 3.96063498e-02 3.97559369e-02 3.99057888e-02 4.00559054e-02 + 4.02062865e-02 4.03569321e-02 4.05078419e-02 4.06590159e-02 4.08104539e-02 + 4.09621558e-02 4.11141214e-02 4.12663506e-02 4.14188432e-02 4.15715991e-02 + 4.17246182e-02 4.18779004e-02 4.20314454e-02 4.21852532e-02 4.23393235e-02 + 4.24936564e-02 4.26482515e-02 4.28031089e-02 4.29582283e-02 4.31136096e-02 + 4.32692526e-02 4.34251573e-02 4.35813234e-02 4.37377508e-02 4.38944395e-02 + 4.40513892e-02 4.42085998e-02 4.43660711e-02 4.45238031e-02 4.46817956e-02 + 4.48400483e-02 4.49985613e-02 4.51573343e-02 4.53163671e-02 4.54756598e-02 + 4.56352120e-02 4.57950237e-02 4.59550947e-02 4.61154249e-02 4.62760141e-02 + 4.64368622e-02 4.65979690e-02 4.67593344e-02 4.69209582e-02 4.70828403e-02 + 4.72449806e-02 4.74073789e-02 4.75700350e-02 4.77329488e-02 4.78961202e-02 + 4.80595489e-02 4.82232350e-02 4.83871781e-02 4.85513782e-02 4.87158351e-02 + 4.88805487e-02 4.90455188e-02 4.92107453e-02 4.93762280e-02 4.95419667e-02 + 4.97079614e-02 4.98742118e-02 5.00407179e-02 5.02074794e-02 5.03744963e-02 + 5.05417683e-02 5.07092953e-02 5.08770772e-02 5.10451138e-02 5.12134049e-02 + 5.13819505e-02 5.15507503e-02 5.17198043e-02 5.18891121e-02 5.20586738e-02 + 5.22284892e-02 5.23985580e-02 5.25688802e-02 5.27394555e-02 5.29102839e-02 + 5.30813652e-02 5.32526992e-02 5.34242858e-02 5.35961248e-02 5.37682161e-02 + 5.39405595e-02 5.41131548e-02 5.42860020e-02 5.44591008e-02 5.46324511e-02 + 5.48060527e-02 5.49799055e-02 5.51540094e-02 5.53283641e-02 5.55029695e-02 + 5.56778255e-02 5.58529319e-02 5.60282885e-02 5.62038952e-02 5.63797519e-02 + 5.65558583e-02 5.67322144e-02 5.69088199e-02 5.70856747e-02 5.72627786e-02 + 5.74401316e-02 5.76177334e-02 5.77955838e-02 5.79736828e-02 5.81520301e-02 + 5.83306256e-02 5.85094691e-02 5.86885605e-02 5.88678997e-02 5.90474864e-02 + 5.92273205e-02 5.94074018e-02 5.95877302e-02 5.97683055e-02 5.99491276e-02 + 6.01301963e-02 6.03115114e-02 6.04930728e-02 6.06748803e-02 6.08569338e-02 + 6.10392330e-02 6.12217779e-02 6.14045683e-02 6.15876039e-02 6.17708848e-02 + 6.19544105e-02 6.21381812e-02 6.23221964e-02 6.25064562e-02 6.26909603e-02 + 6.28757085e-02 6.30607008e-02 6.32459369e-02 6.34314167e-02 6.36171400e-02 + 6.38031067e-02 6.39893165e-02 6.41757694e-02 6.43624651e-02 6.45494036e-02 + 6.47365845e-02 6.49240078e-02 6.51116734e-02 6.52995809e-02 6.54877303e-02 + 6.56761215e-02 6.58647541e-02 6.60536282e-02 6.62427434e-02 6.64320997e-02 + 6.66216969e-02 6.68115348e-02 6.70016132e-02 6.71919320e-02 6.73824910e-02 + 6.75732900e-02 6.77643289e-02 6.79556075e-02 6.81471257e-02 6.83388832e-02 + 6.85308799e-02 6.87231157e-02 6.89155904e-02 6.91083037e-02 6.93012556e-02 + 6.94944458e-02 6.96878742e-02 6.98815407e-02 7.00754450e-02 7.02695870e-02 + 7.04639665e-02 7.06585833e-02 7.08534374e-02 7.10485284e-02 7.12438563e-02 + 7.14394208e-02 7.16352219e-02 7.18312593e-02 7.20275328e-02 7.22240423e-02 + 7.24207876e-02 7.26177686e-02 7.28149851e-02 7.30124368e-02 7.32101237e-02 + 7.34080456e-02 7.36062022e-02 7.38045935e-02 7.40032192e-02 7.42020791e-02 + 7.44011732e-02 7.46005012e-02 7.48000630e-02 7.49998583e-02 7.51998870e-02 + 7.54001490e-02 7.56006441e-02 7.58013720e-02 7.60023326e-02 7.62035258e-02 + 7.64049514e-02 7.66066092e-02 7.68084989e-02 7.70106206e-02 7.72129739e-02 + 7.74155587e-02 7.76183748e-02 7.78214221e-02 7.80247003e-02 7.82282094e-02 + 7.84319490e-02 7.86359192e-02 7.88401196e-02 7.90445501e-02 7.92492105e-02 + 7.94541007e-02 7.96592204e-02 7.98645695e-02 8.00701479e-02 8.02759553e-02 + 8.04819916e-02 8.06882565e-02 8.08947500e-02 8.11014718e-02 8.13084218e-02 + 8.15155998e-02 8.17230055e-02 8.19306389e-02 8.21384998e-02 8.23465879e-02 + 8.25549031e-02 8.27634452e-02 8.29722141e-02 8.31812095e-02 8.33904313e-02 + 8.35998794e-02 8.38095534e-02 8.40194533e-02 8.42295789e-02 8.44399299e-02 + 8.46505063e-02 8.48613078e-02 8.50723343e-02 8.52835855e-02 8.54950613e-02 + 8.57067616e-02 8.59186860e-02 8.61308346e-02 8.63432070e-02 8.65558031e-02 + 8.67686227e-02 8.69816656e-02 8.71949318e-02 8.74084208e-02 8.76221327e-02 + 8.78360672e-02 8.80502241e-02 8.82646033e-02 8.84792045e-02 8.86940276e-02 + 8.89090725e-02 8.91243388e-02 8.93398265e-02 8.95555354e-02 8.97714652e-02 + 8.99876159e-02 9.02039871e-02 9.04205788e-02 9.06373908e-02 9.08544228e-02 + 9.10716747e-02 9.12891463e-02 9.15068374e-02 9.17247478e-02 9.19428774e-02 + 9.21612260e-02 9.23797934e-02 9.25985793e-02 9.28175837e-02 9.30368064e-02 + 9.32562470e-02 9.34759056e-02 9.36957818e-02 9.39158756e-02 9.41361866e-02 + 9.43567148e-02 9.45774599e-02 9.47984219e-02 9.50196003e-02 9.52409952e-02 + 9.54626063e-02 9.56844334e-02 9.59064764e-02 9.61287350e-02 9.63512090e-02 + 9.65738984e-02 9.67968029e-02 9.70199222e-02 9.72432563e-02 9.74668050e-02 + 9.76905680e-02 9.79145452e-02 9.81387363e-02 9.83631413e-02 9.85877598e-02 + 9.88125918e-02 9.90376370e-02 9.92628953e-02 9.94883665e-02 9.97140503e-02 + 9.99399466e-02 1.00166055e-01 1.00392376e-01 1.00618909e-01 1.00845653e-01 + 1.01072609e-01 1.01299776e-01 1.01527155e-01 1.01754744e-01 1.01982545e-01 + 1.02210556e-01 1.02438777e-01 1.02667209e-01 1.02895850e-01 1.03124702e-01 + 1.03353763e-01 1.03583034e-01 1.03812514e-01 1.04042203e-01 1.04272101e-01 + 1.04502207e-01 1.04732523e-01 1.04963046e-01 1.05193778e-01 1.05424718e-01 + 1.05655865e-01 1.05887221e-01 1.06118783e-01 1.06350553e-01 1.06582530e-01 + 1.06814713e-01 1.07047104e-01 1.07279701e-01 1.07512504e-01 1.07745513e-01 + 1.07978728e-01 1.08212148e-01 1.08445775e-01 1.08679606e-01 1.08913643e-01 + 1.09147884e-01 1.09382331e-01 1.09616982e-01 1.09851837e-01 1.10086896e-01 + 1.10322160e-01 1.10557627e-01 1.10793298e-01 1.11029172e-01 1.11265249e-01 + 1.11501530e-01 1.11738013e-01 1.11974699e-01 1.12211587e-01 1.12448678e-01 + 1.12685971e-01 1.12923465e-01 1.13161162e-01 1.13399059e-01 1.13637158e-01 + 1.13875458e-01 1.14113960e-01 1.14352661e-01 1.14591564e-01 1.14830666e-01 + 1.15069969e-01 1.15309472e-01 1.15549174e-01 1.15789076e-01 1.16029178e-01 + 1.16269478e-01 1.16509978e-01 1.16750676e-01 1.16991573e-01 1.17232669e-01 + 1.17473962e-01 1.17715454e-01 1.17957143e-01 1.18199030e-01 1.18441115e-01 + 1.18683397e-01 1.18925875e-01 1.19168551e-01 1.19411423e-01 1.19654492e-01 + 1.19897757e-01 1.20141218e-01 1.20384875e-01 1.20628728e-01 1.20872776e-01 + 1.21117020e-01 1.21361458e-01 1.21606092e-01 1.21850920e-01 1.22095943e-01 + 1.22341160e-01 1.22586571e-01 1.22832176e-01 1.23077975e-01 1.23323967e-01 + 1.23570153e-01 1.23816532e-01 1.24063104e-01 1.24309869e-01 1.24556826e-01 + 1.24803975e-01 1.25051317e-01 1.25298851e-01 1.25546576e-01 1.25794494e-01 + 1.26042602e-01 1.26290902e-01 1.26539393e-01 1.26788074e-01 1.27036946e-01 + 1.27286009e-01 1.27535261e-01 1.27784704e-01 1.28034337e-01 1.28284159e-01 + 1.28534171e-01 1.28784372e-01 1.29034762e-01 1.29285340e-01 1.29536108e-01 + 1.29787064e-01 1.30038208e-01 1.30289540e-01 1.30541060e-01 1.30792768e-01 + 1.31044663e-01 1.31296746e-01 1.31549015e-01 1.31801471e-01 1.32054115e-01 + 1.32306944e-01 1.32559960e-01 1.32813162e-01 1.33066550e-01 1.33320123e-01 + 1.33573882e-01 1.33827826e-01 1.34081956e-01 1.34336270e-01 1.34590769e-01 + 1.34845452e-01 1.35100320e-01 1.35355372e-01 1.35610608e-01 1.35866027e-01 + 1.36121630e-01 1.36377417e-01 1.36633386e-01 1.36889538e-01 1.37145873e-01 + 1.37402391e-01 1.37659091e-01 1.37915973e-01 1.38173037e-01 1.38430283e-01 + 1.38687710e-01 1.38945318e-01 1.39203108e-01 1.39461079e-01 1.39719230e-01 + 1.39977562e-01 1.40236074e-01 1.40494766e-01 1.40753639e-01 1.41012691e-01 + 1.41271922e-01 1.41531333e-01 1.41790923e-01 1.42050692e-01 1.42310640e-01 + 1.42570766e-01 1.42831071e-01 1.43091554e-01 1.43352214e-01 1.43613053e-01 + 1.43874069e-01 1.44135262e-01 1.44396633e-01 1.44658180e-01 1.44919904e-01 + 1.45181805e-01 1.45443882e-01 1.45706135e-01 1.45968565e-01 1.46231170e-01 + 1.46493950e-01 1.46756906e-01 1.47020037e-01 1.47283343e-01 1.47546824e-01 + 1.47810479e-01 1.48074308e-01 1.48338312e-01 1.48602490e-01 1.48866841e-01 + 1.49131366e-01 1.49396065e-01 1.49660936e-01 1.49925981e-01 1.50191198e-01 + 1.50456588e-01 1.50722150e-01 1.50987884e-01 1.51253790e-01 1.51519868e-01 + 1.51786118e-01 1.52052539e-01 1.52319131e-01 1.52585894e-01 1.52852827e-01 + 1.53119932e-01 1.53387206e-01 1.53654651e-01 1.53922266e-01 1.54190050e-01 + 1.54458004e-01 1.54726127e-01 1.54994420e-01 1.55262881e-01 1.55531511e-01 + 1.55800310e-01 1.56069277e-01 1.56338412e-01 1.56607715e-01 1.56877186e-01 + 1.57146824e-01 1.57416630e-01 1.57686603e-01 1.57956743e-01 1.58227049e-01 + 1.58497522e-01 1.58768161e-01 1.59038967e-01 1.59309938e-01 1.59581075e-01 + 1.59852378e-01 1.60123846e-01 1.60395479e-01 1.60667277e-01 1.60939240e-01 + 1.61211367e-01 1.61483659e-01 1.61756114e-01 1.62028734e-01 1.62301517e-01 + 1.62574464e-01 1.62847574e-01 1.63120847e-01 1.63394283e-01 1.63667882e-01 + 1.63941644e-01 1.64215567e-01 1.64489653e-01 1.64763901e-01 1.65038310e-01 + 1.65312881e-01 1.65587613e-01 1.65862506e-01 1.66137560e-01 1.66412775e-01 + 1.66688150e-01 1.66963686e-01 1.67239381e-01 1.67515237e-01 1.67791252e-01 + 1.68067427e-01 1.68343761e-01 1.68620254e-01 1.68896906e-01 1.69173717e-01 + 1.69450686e-01 1.69727813e-01 1.70005098e-01 1.70282542e-01 1.70560143e-01 + 1.70837901e-01 1.71115817e-01 1.71393889e-01 1.71672119e-01 1.71950505e-01 + 1.72229048e-01 1.72507747e-01 1.72786602e-01 1.73065613e-01 1.73344779e-01 + 1.73624101e-01 1.73903579e-01 1.74183211e-01 1.74462998e-01 1.74742940e-01 + 1.75023036e-01 1.75303286e-01 1.75583691e-01 1.75864249e-01 1.76144961e-01 + 1.76425826e-01 1.76706845e-01 1.76988017e-01 1.77269341e-01 1.77550818e-01 + 1.77832448e-01 1.78114229e-01 1.78396163e-01 1.78678248e-01 1.78960486e-01 + 1.79242874e-01 1.79525414e-01 1.79808105e-01 1.80090946e-01 1.80373938e-01 + 1.80657081e-01 1.80940374e-01 1.81223816e-01 1.81507409e-01 1.81791151e-01 + 1.82075043e-01 1.82359084e-01 1.82643273e-01 1.82927612e-01 1.83212099e-01 + 1.83496734e-01 1.83781518e-01 1.84066450e-01 1.84351529e-01 1.84636756e-01 + 1.84922131e-01 1.85207652e-01 1.85493321e-01 1.85779136e-01 1.86065098e-01 + 1.86351206e-01 1.86637461e-01 1.86923861e-01 1.87210407e-01 1.87497099e-01 + 1.87783936e-01 1.88070919e-01 1.88358046e-01 1.88645318e-01 1.88932734e-01 + 1.89220295e-01 1.89508000e-01 1.89795849e-01 1.90083842e-01 1.90371978e-01 + 1.90660258e-01 1.90948681e-01 1.91237246e-01 1.91525955e-01 1.91814806e-01 + 1.92103799e-01 1.92392935e-01 1.92682212e-01 1.92971631e-01 1.93261192e-01 + 1.93550894e-01 1.93840737e-01 1.94130721e-01 1.94420846e-01 1.94711111e-01 + 1.95001517e-01 1.95292063e-01 1.95582748e-01 1.95873574e-01 1.96164539e-01 + 1.96455643e-01 1.96746886e-01 1.97038269e-01 1.97329790e-01 1.97621449e-01 + 1.97913247e-01 1.98205183e-01 1.98497257e-01 1.98789469e-01 1.99081818e-01 + 1.99374304e-01 1.99666928e-01 1.99959688e-01 2.00252585e-01 2.00545619e-01 + 2.00838789e-01 2.01132095e-01 2.01425537e-01 2.01719114e-01 2.02012828e-01 + 2.02306676e-01 2.02600660e-01 2.02894778e-01 2.03189031e-01 2.03483419e-01 + 2.03777941e-01 2.04072597e-01 2.04367387e-01 2.04662311e-01 2.04957368e-01 + 2.05252558e-01 2.05547882e-01 2.05843338e-01 2.06138928e-01 2.06434649e-01 + 2.06730503e-01 2.07026489e-01 2.07322607e-01 2.07618857e-01 2.07915238e-01 + 2.08211750e-01 2.08508394e-01 2.08805168e-01 2.09102073e-01 2.09399109e-01 + 2.09696275e-01 2.09993571e-01 2.10290997e-01 2.10588552e-01 2.10886237e-01 + 2.11184052e-01 2.11481995e-01 2.11780068e-01 2.12078269e-01 2.12376598e-01 + 2.12675056e-01 2.12973642e-01 2.13272356e-01 2.13571197e-01 2.13870166e-01 + 2.14169263e-01 2.14468486e-01 2.14767837e-01 2.15067314e-01 2.15366917e-01 + 2.15666647e-01 2.15966503e-01 2.16266485e-01 2.16566592e-01 2.16866825e-01 + 2.17167184e-01 2.17467667e-01 2.17768276e-01 2.18069009e-01 2.18369866e-01 + 2.18670848e-01 2.18971954e-01 2.19273184e-01 2.19574538e-01 2.19876015e-01 + 2.20177615e-01 2.20479339e-01 2.20781185e-01 2.21083155e-01 2.21385246e-01 + 2.21687460e-01 2.21989797e-01 2.22292255e-01 2.22594835e-01 2.22897536e-01 + 2.23200359e-01 2.23503303e-01 2.23806367e-01 2.24109553e-01 2.24412859e-01 + 2.24716285e-01 2.25019832e-01 2.25323498e-01 2.25627285e-01 2.25931191e-01 + 2.26235216e-01 2.26539360e-01 2.26843623e-01 2.27148005e-01 2.27452506e-01 + 2.27757125e-01 2.28061862e-01 2.28366717e-01 2.28671690e-01 2.28976780e-01 + 2.29281988e-01 2.29587313e-01 2.29892755e-01 2.30198313e-01 2.30503989e-01 + 2.30809780e-01 2.31115688e-01 2.31421712e-01 2.31727852e-01 2.32034107e-01 + 2.32340478e-01 2.32646964e-01 2.32953565e-01 2.33260280e-01 2.33567111e-01 + 2.33874055e-01 2.34181114e-01 2.34488287e-01 2.34795574e-01 2.35102975e-01 + 2.35410489e-01 2.35718116e-01 2.36025856e-01 2.36333709e-01 2.36641675e-01 + 2.36949753e-01 2.37257943e-01 2.37566246e-01 2.37874660e-01 2.38183186e-01 + 2.38491824e-01 2.38800572e-01 2.39109432e-01 2.39418403e-01 2.39727484e-01 + 2.40036676e-01 2.40345978e-01 2.40655391e-01 2.40964913e-01 2.41274545e-01 + 2.41584286e-01 2.41894137e-01 2.42204097e-01 2.42514166e-01 2.42824344e-01 + 2.43134630e-01 2.43445024e-01 2.43755527e-01 2.44066138e-01 2.44376856e-01 + 2.44687682e-01 2.44998615e-01 2.45309656e-01 2.45620803e-01 2.45932058e-01 + 2.46243419e-01 2.46554886e-01 2.46866459e-01 2.47178139e-01 2.47489924e-01 + 2.47801815e-01 2.48113812e-01 2.48425913e-01 2.48738120e-01 2.49050431e-01 + 2.49362848e-01 2.49675368e-01 2.49987993e-01 2.50300722e-01 2.50613555e-01 + 2.50926492e-01 2.51239532e-01 2.51552675e-01 2.51865922e-01 2.52179271e-01 + 2.52492723e-01 2.52806278e-01 2.53119935e-01 2.53433694e-01 2.53747555e-01 + 2.54061518e-01 2.54375582e-01 2.54689748e-01 2.55004015e-01 2.55318383e-01 + 2.55632851e-01 2.55947421e-01 2.56262090e-01 2.56576860e-01 2.56891730e-01 + 2.57206700e-01 2.57521770e-01 2.57836938e-01 2.58152207e-01 2.58467574e-01 + 2.58783040e-01 2.59098605e-01 2.59414268e-01 2.59730029e-01 2.60045889e-01 + 2.60361847e-01 2.60677902e-01 2.60994055e-01 2.61310305e-01 2.61626652e-01 + 2.61943096e-01 2.62259637e-01 2.62576275e-01 2.62893009e-01 2.63209839e-01 + 2.63526765e-01 2.63843787e-01 2.64160905e-01 2.64478118e-01 2.64795426e-01 + 2.65112830e-01 2.65430328e-01 2.65747921e-01 2.66065608e-01 2.66383390e-01 + 2.66701265e-01 2.67019235e-01 2.67337298e-01 2.67655455e-01 2.67973706e-01 + 2.68292049e-01 2.68610485e-01 2.68929014e-01 2.69247636e-01 2.69566350e-01 + 2.69885156e-01 2.70204055e-01 2.70523045e-01 2.70842127e-01 2.71161300e-01 + 2.71480564e-01 2.71799920e-01 2.72119366e-01 2.72438903e-01 2.72758531e-01 + 2.73078249e-01 2.73398057e-01 2.73717955e-01 2.74037942e-01 2.74358019e-01 + 2.74678186e-01 2.74998442e-01 2.75318787e-01 2.75639220e-01 2.75959743e-01 + 2.76280353e-01 2.76601052e-01 2.76921839e-01 2.77242714e-01 2.77563676e-01 + 2.77884726e-01 2.78205864e-01 2.78527088e-01 2.78848399e-01 2.79169798e-01 + 2.79491282e-01 2.79812853e-01 2.80134510e-01 2.80456254e-01 2.80778083e-01 + 2.81099997e-01 2.81421997e-01 2.81744083e-01 2.82066253e-01 2.82388508e-01 + 2.82710848e-01 2.83033273e-01 2.83355782e-01 2.83678374e-01 2.84001051e-01 + 2.84323812e-01 2.84646656e-01 2.84969584e-01 2.85292594e-01 2.85615688e-01 + 2.85938865e-01 2.86262124e-01 2.86585466e-01 2.86908890e-01 2.87232396e-01 + 2.87555984e-01 2.87879654e-01 2.88203405e-01 2.88527238e-01 2.88851152e-01 + 2.89175147e-01 2.89499222e-01 2.89823378e-01 2.90147615e-01 2.90471932e-01 + 2.90796329e-01 2.91120806e-01 2.91445362e-01 2.91769999e-01 2.92094714e-01 + 2.92419508e-01 2.92744382e-01 2.93069334e-01 2.93394365e-01 2.93719474e-01 + 2.94044662e-01 2.94369927e-01 2.94695271e-01 2.95020692e-01 2.95346191e-01 + 2.95671767e-01 2.95997420e-01 2.96323150e-01 2.96648956e-01 2.96974840e-01 + 2.97300799e-01 2.97626835e-01 2.97952947e-01 2.98279135e-01 2.98605399e-01 + 2.98931738e-01 2.99258152e-01 2.99584642e-01 2.99911206e-01 3.00237845e-01 + 3.00564559e-01 3.00891347e-01 3.01218209e-01 3.01545146e-01 3.01872156e-01 + 3.02199240e-01 3.02526398e-01 3.02853628e-01 3.03180932e-01 3.03508309e-01 + 3.03835759e-01 3.04163281e-01 3.04490876e-01 3.04818543e-01 3.05146281e-01 + 3.05474092e-01 3.05801975e-01 3.06129929e-01 3.06457954e-01 3.06786051e-01 + 3.07114218e-01 3.07442456e-01 3.07770765e-01 3.08099145e-01 3.08427594e-01 + 3.08756114e-01 3.09084703e-01 3.09413363e-01 3.09742091e-01 3.10070890e-01 + 3.10399757e-01 3.10728693e-01 3.11057699e-01 3.11386772e-01 3.11715915e-01 + 3.12045125e-01 3.12374404e-01 3.12703751e-01 3.13033165e-01 3.13362647e-01 + 3.13692197e-01 3.14021813e-01 3.14351497e-01 3.14681248e-01 3.15011065e-01 + 3.15340949e-01 3.15670899e-01 3.16000915e-01 3.16330997e-01 3.16661145e-01 + 3.16991359e-01 3.17321638e-01 3.17651983e-01 3.17982392e-01 3.18312867e-01 + 3.18643406e-01 3.18974010e-01 3.19304678e-01 3.19635411e-01 3.19966207e-01 + 3.20297067e-01 3.20627992e-01 3.20958979e-01 3.21290030e-01 3.21621144e-01 + 3.21952321e-01 3.22283561e-01 3.22614864e-01 3.22946229e-01 3.23277656e-01 + 3.23609146e-01 3.23940697e-01 3.24272310e-01 3.24603985e-01 3.24935721e-01 + 3.25267519e-01 3.25599377e-01 3.25931297e-01 3.26263277e-01 3.26595317e-01 + 3.26927419e-01 3.27259580e-01 3.27591801e-01 3.27924082e-01 3.28256423e-01 + 3.28588824e-01 3.28921283e-01 3.29253802e-01 3.29586380e-01 3.29919017e-01 + 3.30251712e-01 3.30584466e-01 3.30917278e-01 3.31250149e-01 3.31583077e-01 + 3.31916063e-01 3.32249107e-01 3.32582208e-01 3.32915366e-01 3.33248582e-01 + 3.33581854e-01 3.33915183e-01 3.34248569e-01 3.34582011e-01 3.34915510e-01 + 3.35249064e-01 3.35582675e-01 3.35916341e-01 3.36250062e-01 3.36583839e-01 + 3.36917672e-01 3.37251559e-01 3.37585501e-01 3.37919498e-01 3.38253550e-01 + 3.38587656e-01 3.38921816e-01 3.39256030e-01 3.39590298e-01 3.39924620e-01 + 3.40258995e-01 3.40593423e-01 3.40927905e-01 3.41262440e-01 3.41597027e-01 + 3.41931667e-01 3.42266360e-01 3.42601105e-01 3.42935903e-01 3.43270752e-01 + 3.43605653e-01 3.43940606e-01 3.44275610e-01 3.44610666e-01 3.44945772e-01 + 3.45280930e-01 3.45616139e-01 3.45951398e-01 3.46286708e-01 3.46622068e-01 + 3.46957478e-01 3.47292938e-01 3.47628448e-01 3.47964008e-01 3.48299617e-01 + 3.48635275e-01 3.48970983e-01 3.49306740e-01 3.49642545e-01 3.49978399e-01 + 3.50314302e-01 3.50650253e-01 3.50986252e-01 3.51322299e-01 3.51658394e-01 + 3.51994536e-01 3.52330726e-01 3.52666964e-01 3.53003248e-01 3.53339580e-01 + 3.53675958e-01 3.54012383e-01 3.54348855e-01 3.54685373e-01 3.55021937e-01 + 3.55358547e-01 3.55695203e-01 3.56031904e-01 3.56368651e-01 3.56705444e-01 + 3.57042281e-01 3.57379164e-01 3.57716092e-01 3.58053064e-01 3.58390081e-01 + 3.58727142e-01 3.59064247e-01 3.59401397e-01 3.59738590e-01 3.60075827e-01 + 3.60413107e-01 3.60750431e-01 3.61087799e-01 3.61425209e-01 3.61762662e-01 + 3.62100158e-01 3.62437696e-01 3.62775277e-01 3.63112900e-01 3.63450566e-01 + 3.63788273e-01 3.64126022e-01 3.64463812e-01 3.64801645e-01 3.65139518e-01 + 3.65477432e-01 3.65815388e-01 3.66153384e-01 3.66491421e-01 3.66829498e-01 + 3.67167616e-01 3.67505774e-01 3.67843971e-01 3.68182209e-01 3.68520487e-01 + 3.68858803e-01 3.69197160e-01 3.69535555e-01 3.69873990e-01 3.70212463e-01 + 3.70550975e-01 3.70889526e-01 3.71228115e-01 3.71566742e-01 3.71905408e-01 + 3.72244111e-01 3.72582852e-01 3.72921631e-01 3.73260447e-01 3.73599300e-01 + 3.73938191e-01 3.74277119e-01 3.74616083e-01 3.74955084e-01 3.75294122e-01 + 3.75633196e-01 3.75972306e-01 3.76311452e-01 3.76650634e-01 3.76989852e-01 + 3.77329105e-01 3.77668394e-01 3.78007718e-01 3.78347077e-01 3.78686471e-01 + 3.79025899e-01 3.79365363e-01 3.79704861e-01 3.80044393e-01 3.80383959e-01 + 3.80723559e-01 3.81063194e-01 3.81402861e-01 3.81742563e-01 3.82082298e-01 + 3.82422065e-01 3.82761866e-01 3.83101700e-01 3.83441567e-01 3.83781466e-01 + 3.84121398e-01 3.84461362e-01 3.84801358e-01 3.85141386e-01 3.85481446e-01 + 3.85821538e-01 3.86161661e-01 3.86501816e-01 3.86842001e-01 3.87182218e-01 + 3.87522466e-01 3.87862744e-01 3.88203053e-01 3.88543393e-01 3.88883763e-01 + 3.89224162e-01 3.89564592e-01 3.89905052e-01 3.90245541e-01 3.90586060e-01 + 3.90926609e-01 3.91267186e-01 3.91607793e-01 3.91948428e-01 3.92289093e-01 + 3.92629785e-01 3.92970507e-01 3.93311256e-01 3.93652034e-01 3.93992840e-01 + 3.94333674e-01 3.94674535e-01 3.95015424e-01 3.95356341e-01 3.95697284e-01 + 3.96038255e-01 3.96379253e-01 3.96720277e-01 3.97061328e-01 3.97402406e-01 + 3.97743510e-01 3.98084640e-01 3.98425796e-01 3.98766978e-01 3.99108186e-01 + 3.99449420e-01 3.99790679e-01 4.00131963e-01 4.00473272e-01 4.00814607e-01 + 4.01155966e-01 4.01497350e-01 4.01838759e-01 4.02180192e-01 4.02521649e-01 + 4.02863130e-01 4.03204636e-01 4.03546165e-01 4.03887718e-01 4.04229294e-01 + 4.04570894e-01 4.04912517e-01 4.05254163e-01 4.05595832e-01 4.05937524e-01 + 4.06279238e-01 4.06620975e-01 4.06962734e-01 4.07304516e-01 4.07646319e-01 + 4.07988145e-01 4.08329992e-01 4.08671861e-01 4.09013751e-01 4.09355663e-01 + 4.09697596e-01 4.10039549e-01 4.10381524e-01 4.10723520e-01 4.11065536e-01 + 4.11407572e-01 4.11749629e-01 4.12091706e-01 4.12433803e-01 4.12775920e-01 + 4.13118057e-01 4.13460213e-01 4.13802389e-01 4.14144583e-01 4.14486798e-01 + 4.14829031e-01 4.15171283e-01 4.15513553e-01 4.15855843e-01 4.16198150e-01 + 4.16540476e-01 4.16882821e-01 4.17225183e-01 4.17567563e-01 4.17909961e-01 + 4.18252376e-01 4.18594809e-01 4.18937259e-01 4.19279726e-01 4.19622210e-01 + 4.19964711e-01 4.20307229e-01 4.20649763e-01 4.20992314e-01 4.21334881e-01 + 4.21677465e-01 4.22020064e-01 4.22362679e-01 4.22705310e-01 4.23047957e-01 + 4.23390619e-01 4.23733296e-01 4.24075988e-01 4.24418696e-01 4.24761418e-01 + 4.25104155e-01 4.25446907e-01 4.25789673e-01 4.26132454e-01 4.26475249e-01 + 4.26818057e-01 4.27160880e-01 4.27503717e-01 4.27846567e-01 4.28189430e-01 + 4.28532307e-01 4.28875197e-01 4.29218101e-01 4.29561017e-01 4.29903946e-01 + 4.30246888e-01 4.30589842e-01 4.30932808e-01 4.31275787e-01 4.31618778e-01 + 4.31961781e-01 4.32304796e-01 4.32647822e-01 4.32990860e-01 4.33333909e-01 + 4.33676970e-01 4.34020042e-01 4.34363125e-01 4.34706219e-01 4.35049323e-01 + 4.35392438e-01 4.35735564e-01 4.36078700e-01 4.36421846e-01 4.36765002e-01 + 4.37108168e-01 4.37451344e-01 4.37794529e-01 4.38137724e-01 4.38480929e-01 + 4.38824142e-01 4.39167365e-01 4.39510597e-01 4.39853837e-01 4.40197087e-01 + 4.40540345e-01 4.40883611e-01 4.41226885e-01 4.41570168e-01 4.41913459e-01 + 4.42256758e-01 4.42600064e-01 4.42943378e-01 4.43286700e-01 4.43630029e-01 + 4.43973365e-01 4.44316708e-01 4.44660058e-01 4.45003416e-01 4.45346779e-01 + 4.45690150e-01 4.46033526e-01 4.46376910e-01 4.46720299e-01 4.47063694e-01 + 4.47407095e-01 4.47750502e-01 4.48093915e-01 4.48437333e-01 4.48780757e-01 + 4.49124185e-01 4.49467619e-01 4.49811058e-01 4.50154502e-01 4.50497950e-01 + 4.50841403e-01 4.51184861e-01 4.51528322e-01 4.51871788e-01 4.52215259e-01 + 4.52558733e-01 4.52902210e-01 4.53245692e-01 4.53589177e-01 4.53932665e-01 + 4.54276157e-01 4.54619652e-01 4.54963150e-01 4.55306651e-01 4.55650154e-01 + 1.03953624e+00 1.03772749e+00 1.03592023e+00 1.03411445e+00 1.03231016e+00 + 1.03050735e+00 1.02870603e+00 1.02690620e+00 1.02510785e+00 1.02331100e+00 + 1.02151562e+00 1.01972174e+00 1.01792935e+00 1.01613844e+00 1.01434902e+00 + 1.01256110e+00 1.01077466e+00 1.00898971e+00 1.00720626e+00 1.00542429e+00 + 1.00364382e+00 1.00186484e+00 1.00008735e+00 9.98311355e-01 9.96536852e-01 + 9.94763842e-01 9.92992326e-01 9.91222304e-01 9.89453777e-01 9.87686744e-01 + 9.85921207e-01 9.84157165e-01 9.82394619e-01 9.80633570e-01 9.78874017e-01 + 9.77115962e-01 9.75359404e-01 9.73604344e-01 9.71850782e-01 9.70098719e-01 + 9.68348155e-01 9.66599090e-01 9.64851525e-01 9.63105460e-01 9.61360895e-01 + 9.59617832e-01 9.57876269e-01 9.56136208e-01 9.54397649e-01 9.52660593e-01 + 9.50925039e-01 9.49190988e-01 9.47458441e-01 9.45727397e-01 9.43997858e-01 + 9.42269823e-01 9.40543293e-01 9.38818268e-01 9.37094749e-01 9.35372736e-01 + 9.33652230e-01 9.31933230e-01 9.30215737e-01 9.28499752e-01 9.26785274e-01 + 9.25072305e-01 9.23360844e-01 9.21650893e-01 9.19942450e-01 9.18235517e-01 + 9.16530094e-01 9.14826182e-01 9.13123780e-01 9.11422890e-01 9.09723511e-01 + 9.08025644e-01 9.06329289e-01 9.04634446e-01 9.02941117e-01 9.01249300e-01 + 8.99558998e-01 8.97870209e-01 8.96182935e-01 8.94497176e-01 8.92812931e-01 + 8.91130202e-01 8.89448989e-01 8.87769292e-01 8.86091112e-01 8.84414448e-01 + 8.82739302e-01 8.81065673e-01 8.79393562e-01 8.77722970e-01 8.76053896e-01 + 8.74386341e-01 8.72720306e-01 8.71055790e-01 8.69392795e-01 8.67731320e-01 + 8.66071366e-01 8.64412932e-01 8.62756021e-01 8.61100631e-01 8.59446764e-01 + 8.57794419e-01 8.56143597e-01 8.54494298e-01 8.52846523e-01 8.51200272e-01 + 8.49555545e-01 8.47912343e-01 8.46270666e-01 8.44630515e-01 8.42991889e-01 + 8.41354789e-01 8.39719216e-01 8.38085170e-01 8.36452650e-01 8.34821658e-01 + 8.33192195e-01 8.31564259e-01 8.29937852e-01 8.28312973e-01 8.26689624e-01 + 8.25067805e-01 8.23447515e-01 8.21828756e-01 8.20211528e-01 8.18595830e-01 + 8.16981664e-01 8.15369029e-01 8.13757927e-01 8.12148357e-01 8.10540319e-01 + 8.08933815e-01 8.07328844e-01 8.05725406e-01 8.04123503e-01 8.02523135e-01 + 8.00924301e-01 7.99327002e-01 7.97731239e-01 7.96137011e-01 7.94544320e-01 + 7.92953165e-01 7.91363547e-01 7.89775466e-01 7.88188923e-01 7.86603918e-01 + 7.85020450e-01 7.83438522e-01 7.81858132e-01 7.80279281e-01 7.78701970e-01 + 7.77126199e-01 7.75551968e-01 7.73979278e-01 7.72408129e-01 7.70838521e-01 + 7.69270454e-01 7.67703930e-01 7.66138947e-01 7.64575508e-01 7.63013611e-01 + 7.61453258e-01 7.59894448e-01 7.58337182e-01 7.56781460e-01 7.55227283e-01 + 7.53674651e-01 7.52123565e-01 7.50574024e-01 7.49026029e-01 7.47479580e-01 + 7.45934678e-01 7.44391322e-01 7.42849514e-01 7.41309254e-01 7.39770542e-01 + 7.38233378e-01 7.36697762e-01 7.35163696e-01 7.33631179e-01 7.32100211e-01 + 7.30570794e-01 7.29042926e-01 7.27516610e-01 7.25991844e-01 7.24468629e-01 + 7.22946966e-01 7.21426855e-01 7.19908297e-01 7.18391291e-01 7.16875837e-01 + 7.15361937e-01 7.13849591e-01 7.12338798e-01 7.10829560e-01 7.09321876e-01 + 7.07815747e-01 7.06311174e-01 7.04808155e-01 7.03306693e-01 7.01806787e-01 + 7.00308437e-01 6.98811644e-01 6.97316408e-01 6.95822730e-01 6.94330610e-01 + 6.92840047e-01 6.91351043e-01 6.89863598e-01 6.88377712e-01 6.86893385e-01 + 6.85410618e-01 6.83929411e-01 6.82449765e-01 6.80971679e-01 6.79495154e-01 + 6.78020190e-01 6.76546789e-01 6.75074949e-01 6.73604671e-01 6.72135956e-01 + 6.70668804e-01 6.69203215e-01 6.67739189e-01 6.66276728e-01 6.64815830e-01 + 6.63356498e-01 6.61898730e-01 6.60442527e-01 6.58987889e-01 6.57534818e-01 + 6.56083312e-01 6.54633373e-01 6.53185001e-01 6.51738195e-01 6.50292957e-01 + 6.48849287e-01 6.47407184e-01 6.45966650e-01 6.44527685e-01 6.43090288e-01 + 6.41654460e-01 6.40220202e-01 6.38787514e-01 6.37356396e-01 6.35926849e-01 + 6.34498872e-01 6.33072467e-01 6.31647633e-01 6.30224370e-01 6.28802680e-01 + 6.27382561e-01 6.25964016e-01 6.24547043e-01 6.23131644e-01 6.21717818e-01 + 6.20305566e-01 6.18894889e-01 6.17485785e-01 6.16078257e-01 6.14672303e-01 + 6.13267925e-01 6.11865123e-01 6.10463897e-01 6.09064247e-01 6.07666173e-01 + 6.06269677e-01 6.04874758e-01 6.03481416e-01 6.02089652e-01 6.00699467e-01 + 5.99310859e-01 5.97923831e-01 5.96538381e-01 5.95154511e-01 5.93772221e-01 + 5.92391510e-01 5.91012380e-01 5.89634830e-01 5.88258861e-01 5.86884473e-01 + 5.85511667e-01 5.84140442e-01 5.82770800e-01 5.81402740e-01 5.80036262e-01 + 5.78671367e-01 5.77308056e-01 5.75946328e-01 5.74586184e-01 5.73227624e-01 + 5.71870649e-01 5.70515258e-01 5.69161453e-01 5.67809232e-01 5.66458597e-01 + 5.65109548e-01 5.63762086e-01 5.62416210e-01 5.61071920e-01 5.59729218e-01 + 5.58388103e-01 5.57048576e-01 5.55710636e-01 5.54374285e-01 5.53039523e-01 + 5.51706349e-01 5.50374764e-01 5.49044769e-01 5.47716364e-01 5.46389548e-01 + 5.45064323e-01 5.43740689e-01 5.42418645e-01 5.41098192e-01 5.39779331e-01 + 5.38462062e-01 5.37146385e-01 5.35832299e-01 5.34519807e-01 5.33208907e-01 + 5.31899601e-01 5.30591888e-01 5.29285769e-01 5.27981244e-01 5.26678313e-01 + 5.25376977e-01 5.24077235e-01 5.22779089e-01 5.21482538e-01 5.20187583e-01 + 5.18894224e-01 5.17602461e-01 5.16312295e-01 5.15023726e-01 5.13736754e-01 + 5.12451379e-01 5.11167602e-01 5.09885423e-01 5.08604843e-01 5.07325861e-01 + 5.06048477e-01 5.04772693e-01 5.03498508e-01 5.02225923e-01 5.00954938e-01 + 4.99685553e-01 4.98417769e-01 4.97151585e-01 4.95887003e-01 4.94624021e-01 + 4.93362642e-01 4.92102864e-01 4.90844689e-01 4.89588116e-01 4.88333145e-01 + 4.87079778e-01 4.85828014e-01 4.84577853e-01 4.83329297e-01 4.82082344e-01 + 4.80836996e-01 4.79593252e-01 4.78351114e-01 4.77110580e-01 4.75871652e-01 + 4.74634330e-01 4.73398614e-01 4.72164504e-01 4.70932001e-01 4.69701104e-01 + 4.68471815e-01 4.67244132e-01 4.66018058e-01 4.64793591e-01 4.63570733e-01 + 4.62349483e-01 4.61129842e-01 4.59911810e-01 4.58695387e-01 4.57480573e-01 + 4.56267369e-01 4.55055776e-01 4.53845792e-01 4.52637419e-01 4.51430658e-01 + 4.50225507e-01 4.49021967e-01 4.47820039e-01 4.46619724e-01 4.45421020e-01 + 4.44223928e-01 4.43028450e-01 4.41834584e-01 4.40642332e-01 4.39451693e-01 + 4.38262668e-01 4.37075256e-01 4.35889459e-01 4.34705277e-01 4.33522709e-01 + 4.32341757e-01 4.31162420e-01 4.29984698e-01 4.28808592e-01 4.27634102e-01 + 4.26461229e-01 4.25289972e-01 4.24120332e-01 4.22952310e-01 4.21785904e-01 + 4.20621116e-01 4.19457946e-01 4.18296395e-01 4.17136461e-01 4.15978147e-01 + 4.14821451e-01 4.13666374e-01 4.12512917e-01 4.11361080e-01 4.10210862e-01 + 4.09062265e-01 4.07915288e-01 4.06769932e-01 4.05626197e-01 4.04484083e-01 + 4.03343590e-01 4.02204719e-01 4.01067470e-01 3.99931844e-01 3.98797839e-01 + 3.97665458e-01 3.96534699e-01 3.95405564e-01 3.94278052e-01 3.93152164e-01 + 3.92027900e-01 3.90905259e-01 3.89784244e-01 3.88664853e-01 3.87547087e-01 + 3.86430946e-01 3.85316431e-01 3.84203541e-01 3.83092278e-01 3.81982640e-01 + 3.80874629e-01 3.79768245e-01 3.78663487e-01 3.77560357e-01 3.76458854e-01 + 3.75358979e-01 3.74260731e-01 3.73164112e-01 3.72069121e-01 3.70975759e-01 + 3.69884025e-01 3.68793921e-01 3.67705446e-01 3.66618601e-01 3.65533385e-01 + 3.64449799e-01 3.63367844e-01 3.62287520e-01 3.61208826e-01 3.60131763e-01 + 3.59056331e-01 3.57982531e-01 3.56910363e-01 3.55839826e-01 3.54770922e-01 + 3.53703650e-01 3.52638011e-01 3.51574005e-01 3.50511632e-01 3.49450892e-01 + 3.48391786e-01 3.47334314e-01 3.46278476e-01 3.45224272e-01 3.44171703e-01 + 3.43120769e-01 3.42071469e-01 3.41023805e-01 3.39977776e-01 3.38933384e-01 + 3.37890627e-01 3.36849506e-01 3.35810021e-01 3.34772174e-01 3.33735963e-01 + 3.32701389e-01 3.31668453e-01 3.30637154e-01 3.29607493e-01 3.28579470e-01 + 3.27553085e-01 3.26528339e-01 3.25505231e-01 3.24483762e-01 3.23463933e-01 + 3.22445743e-01 3.21429192e-01 3.20414282e-01 3.19401011e-01 3.18389381e-01 + 3.17379391e-01 3.16371042e-01 3.15364334e-01 3.14359267e-01 3.13355841e-01 + 3.12354057e-01 3.11353915e-01 3.10355415e-01 3.09358557e-01 3.08363342e-01 + 3.07369770e-01 3.06377840e-01 3.05387554e-01 3.04398911e-01 3.03411912e-01 + 3.02426556e-01 3.01442845e-01 3.00460777e-01 2.99480355e-01 2.98501577e-01 + 2.97524444e-01 2.96548956e-01 2.95575113e-01 2.94602916e-01 2.93632365e-01 + 2.92663460e-01 2.91696201e-01 2.90730589e-01 2.89766623e-01 2.88804304e-01 + 2.87843632e-01 2.86884607e-01 2.85927230e-01 2.84971501e-01 2.84017420e-01 + 2.83064986e-01 2.82114201e-01 2.81165065e-01 2.80217578e-01 2.79271739e-01 + 2.78327550e-01 2.77385010e-01 2.76444119e-01 2.75504879e-01 2.74567288e-01 + 2.73631348e-01 2.72697059e-01 2.71764419e-01 2.70833431e-01 2.69904094e-01 + 2.68976408e-01 2.68050374e-01 2.67125991e-01 2.66203261e-01 2.65282182e-01 + 2.64362756e-01 2.63444982e-01 2.62528861e-01 2.61614393e-01 2.60701578e-01 + 2.59790416e-01 2.58880908e-01 2.57973054e-01 2.57066853e-01 2.56162307e-01 + 2.55259415e-01 2.54358178e-01 2.53458595e-01 2.52560668e-01 2.51664395e-01 + 2.50769778e-01 2.49876816e-01 2.48985511e-01 2.48095861e-01 2.47207867e-01 + 2.46321530e-01 2.45436849e-01 2.44553825e-01 2.43672457e-01 2.42792747e-01 + 2.41914695e-01 2.41038300e-01 2.40163562e-01 2.39290483e-01 2.38419061e-01 + 2.37549298e-01 2.36681193e-01 2.35814748e-01 2.34949961e-01 2.34086833e-01 + 2.33225364e-01 2.32365555e-01 2.31507405e-01 2.30650916e-01 2.29796086e-01 + 2.28942916e-01 2.28091407e-01 2.27241559e-01 2.26393372e-01 2.25546845e-01 + 2.24701980e-01 2.23858776e-01 2.23017233e-01 2.22177352e-01 2.21339134e-01 + 2.20502577e-01 2.19667682e-01 2.18834451e-01 2.18002881e-01 2.17172975e-01 + 2.16344732e-01 2.15518152e-01 2.14693235e-01 2.13869982e-01 2.13048393e-01 + 2.12228468e-01 2.11410207e-01 2.10593610e-01 2.09778678e-01 2.08965410e-01 + 2.08153807e-01 2.07343870e-01 2.06535598e-01 2.05728991e-01 2.04924049e-01 + 2.04120774e-01 2.03319164e-01 2.02519221e-01 2.01720944e-01 2.00924334e-01 + 2.00129390e-01 1.99336113e-01 1.98544503e-01 1.97754560e-01 1.96966285e-01 + 1.96179677e-01 1.95394737e-01 1.94611465e-01 1.93829861e-01 1.93049925e-01 + 1.92271658e-01 1.91495059e-01 1.90720129e-01 1.89946869e-01 1.89175277e-01 + 1.88405354e-01 1.87637101e-01 1.86870518e-01 1.86105605e-01 1.85342361e-01 + 1.84580788e-01 1.83820885e-01 1.83062653e-01 1.82306091e-01 1.81551200e-01 + 1.80797980e-01 1.80046431e-01 1.79296554e-01 1.78548348e-01 1.77801814e-01 + 1.77056952e-01 1.76313762e-01 1.75572244e-01 1.74832398e-01 1.74094225e-01 + 1.73357725e-01 1.72622897e-01 1.71889743e-01 1.71158261e-01 1.70428453e-01 + 1.69700319e-01 1.68973858e-01 1.68249071e-01 1.67525958e-01 1.66804519e-01 + 1.66084755e-01 1.65366665e-01 1.64650249e-01 1.63935509e-01 1.63222443e-01 + 1.62511053e-01 1.61801338e-01 1.61093298e-01 1.60386934e-01 1.59682246e-01 + 1.58979233e-01 1.58277897e-01 1.57578237e-01 1.56880253e-01 1.56183946e-01 + 1.55489316e-01 1.54796362e-01 1.54105086e-01 1.53415486e-01 1.52727564e-01 + 1.52041320e-01 1.51356753e-01 1.50673864e-01 1.49992653e-01 1.49313120e-01 + 1.48635265e-01 1.47959088e-01 1.47284591e-01 1.46611771e-01 1.45940631e-01 + 1.45271170e-01 1.44603388e-01 1.43937285e-01 1.43272862e-01 1.42610118e-01 + 1.41949054e-01 1.41289670e-01 1.40631966e-01 1.39975942e-01 1.39321598e-01 + 1.38668935e-01 1.38017953e-01 1.37368652e-01 1.36721031e-01 1.36075091e-01 + 1.35430833e-01 1.34788256e-01 1.34147361e-01 1.33508147e-01 1.32870615e-01 + 1.32234765e-01 1.31600597e-01 1.30968111e-01 1.30337308e-01 1.29708187e-01 + 1.29080749e-01 1.28454994e-01 1.27830921e-01 1.27208532e-01 1.26587826e-01 + 1.25968803e-01 1.25351464e-01 1.24735808e-01 1.24121836e-01 1.23509548e-01 + 1.22898944e-01 1.22290024e-01 1.21682789e-01 1.21077238e-01 1.20473372e-01 + 1.19871190e-01 1.19270693e-01 1.18671881e-01 1.18074755e-01 1.17479313e-01 + 1.16885558e-01 1.16293487e-01 1.15703102e-01 1.15114403e-01 1.14527390e-01 + 1.13942064e-01 1.13358423e-01 1.12776468e-01 1.12196200e-01 1.11617619e-01 + 1.11040725e-01 1.10465517e-01 1.09891996e-01 1.09320162e-01 1.08750016e-01 + 1.08181557e-01 1.07614785e-01 1.07049701e-01 1.06486305e-01 1.05924597e-01 + 1.05364577e-01 1.04806244e-01 1.04249601e-01 1.03694645e-01 1.03141378e-01 + 1.02589800e-01 1.02039910e-01 1.01491709e-01 1.00945198e-01 1.00400375e-01 + 9.98572416e-02 9.93157976e-02 9.87760431e-02 9.82379782e-02 9.77016030e-02 + 9.71669178e-02 9.66339224e-02 9.61026172e-02 9.55730022e-02 9.50450776e-02 + 9.45188434e-02 9.39942997e-02 9.34714468e-02 9.29502847e-02 9.24308135e-02 + 9.19130333e-02 9.13969443e-02 9.08825466e-02 9.03698403e-02 8.98588255e-02 + 8.93495023e-02 8.88418708e-02 8.83359312e-02 8.78316836e-02 8.73291281e-02 + 8.68282647e-02 8.63290937e-02 8.58316150e-02 8.53358290e-02 8.48417355e-02 + 8.43493348e-02 8.38586270e-02 8.33696121e-02 8.28822904e-02 8.23966618e-02 + 8.19127265e-02 8.14304847e-02 8.09499364e-02 8.04710817e-02 7.99939207e-02 + 7.95184537e-02 7.90446805e-02 7.85726014e-02 7.81022165e-02 7.76335259e-02 + 7.71665296e-02 7.67012279e-02 7.62376207e-02 7.57757082e-02 7.53154905e-02 + 7.48569677e-02 7.44001400e-02 7.39450073e-02 7.34915699e-02 7.30398277e-02 + 7.25897810e-02 7.21414298e-02 7.16947743e-02 7.12498144e-02 7.08065504e-02 + 7.03649822e-02 6.99251102e-02 6.94869342e-02 6.90504544e-02 6.86156710e-02 + 6.81825840e-02 6.77511935e-02 6.73214996e-02 6.68935024e-02 6.64672020e-02 + 6.60425985e-02 6.56196920e-02 6.51984826e-02 6.47789704e-02 6.43611555e-02 + 6.39450379e-02 6.35306178e-02 6.31178953e-02 6.27068704e-02 6.22975433e-02 + 6.18899141e-02 6.14839827e-02 6.10797494e-02 6.06772142e-02 6.02763772e-02 + 5.98772385e-02 5.94797982e-02 5.90840564e-02 5.86900131e-02 5.82976685e-02 + 5.79070227e-02 5.75180757e-02 5.71308276e-02 5.67452785e-02 5.63614285e-02 + 5.59792777e-02 5.55988261e-02 5.52200739e-02 5.48430212e-02 5.44676679e-02 + 5.40940143e-02 5.37220604e-02 5.33518062e-02 5.29832520e-02 5.26163976e-02 + 5.22512433e-02 5.18877891e-02 5.15260351e-02 5.11659814e-02 5.08076280e-02 + 5.04509751e-02 5.00960227e-02 4.97427708e-02 4.93912197e-02 4.90413693e-02 + 4.86932198e-02 4.83467711e-02 4.80020235e-02 4.76589769e-02 4.73176315e-02 + 4.69779873e-02 4.66400444e-02 4.63038029e-02 4.59692628e-02 4.56364243e-02 + 4.53052874e-02 4.49758521e-02 4.46481186e-02 4.43220870e-02 4.39977572e-02 + 4.36751294e-02 4.33542037e-02 4.30349801e-02 4.27174587e-02 4.24016395e-02 + 4.20875227e-02 4.17751083e-02 4.14643964e-02 4.11553870e-02 4.08480802e-02 + 4.05424762e-02 4.02385749e-02 3.99363764e-02 3.96358808e-02 3.93370881e-02 + 3.90399985e-02 3.87446120e-02 3.84509287e-02 3.81589486e-02 3.78686718e-02 + 3.75800983e-02 3.72932283e-02 3.70080618e-02 3.67245988e-02 3.64428394e-02 + 3.61627838e-02 3.58844318e-02 3.56077837e-02 3.53328395e-02 3.50595992e-02 + 3.47880629e-02 3.45182306e-02 3.42501025e-02 3.39836786e-02 3.37189589e-02 + 3.34559435e-02 3.31946324e-02 3.29350258e-02 3.26771236e-02 3.24209260e-02 + 3.21664330e-02 3.19136446e-02 3.16625610e-02 3.14131821e-02 3.11655080e-02 + 3.09195388e-02 3.06752746e-02 3.04327153e-02 3.01918611e-02 2.99527120e-02 + 2.97152680e-02 2.94795292e-02 2.92454957e-02 2.90131675e-02 2.87825447e-02 + 2.85536273e-02 2.83264153e-02 2.81009089e-02 2.78771081e-02 2.76550128e-02 + 2.74346233e-02 2.72159395e-02 2.69989614e-02 2.67836892e-02 2.65701228e-02 + 2.63582623e-02 2.61481079e-02 2.59396594e-02 2.57329170e-02 2.55278807e-02 + 2.53245505e-02 2.51229266e-02 2.49230089e-02 2.47247975e-02 2.45282924e-02 + 2.43334937e-02 2.41404014e-02 2.39490156e-02 2.37593363e-02 2.35713636e-02 + 2.33850975e-02 2.32005380e-02 2.30176851e-02 2.28365390e-02 2.26570997e-02 + 2.24793672e-02 2.23033415e-02 2.21290227e-02 2.19564108e-02 2.17855059e-02 + 2.16163080e-02 2.14488171e-02 2.12830333e-02 2.11189566e-02 2.09565871e-02 + 2.07959248e-02 2.06369696e-02 2.04797218e-02 2.03241812e-02 2.01703480e-02 + 2.00182221e-02 1.98678037e-02 1.97190927e-02 1.95720891e-02 1.94267931e-02 + 1.92832045e-02 1.91413236e-02 1.90011502e-02 1.88626845e-02 1.87259265e-02 + 1.85908761e-02 1.84575335e-02 1.83258986e-02 1.81959715e-02 1.80677522e-02 + 1.79412408e-02 1.78164372e-02 1.76933415e-02 1.75719538e-02 1.74522740e-02 + 1.73343022e-02 1.72180384e-02 1.71034827e-02 1.69906350e-02 1.68794954e-02 + 1.67700639e-02 1.66623405e-02 1.65563253e-02 1.64520183e-02 1.63494195e-02 + 1.62485289e-02 1.61493466e-02 1.60518726e-02 1.59561068e-02 1.58620494e-02 + 1.57697003e-02 1.56790596e-02 1.55901273e-02 1.55029034e-02 1.54173879e-02 + 1.53335808e-02 1.52514822e-02 1.51710921e-02 1.50924105e-02 1.50154374e-02 + 1.49401728e-02 1.48666168e-02 1.47947694e-02 1.47246305e-02 1.46562002e-02 + 1.45894786e-02 1.45244656e-02 1.44611612e-02 1.43995655e-02 1.43396785e-02 + 1.42815001e-02 1.42250305e-02 1.41702695e-02 1.41172173e-02 1.40658738e-02 + 1.40162391e-02 1.39683132e-02 1.39220960e-02 1.38775876e-02 1.38347880e-02 + 1.37936971e-02 1.37543151e-02 1.37166420e-02 1.36806776e-02 1.36464221e-02 + 1.36138754e-02 1.35830376e-02 1.35539086e-02 1.35264885e-02 1.35007773e-02 + 1.34767750e-02 1.34544815e-02 1.34338969e-02 1.34150212e-02 1.33978544e-02 + 1.33823966e-02 1.33686476e-02 1.33566075e-02 1.33462763e-02 1.33376541e-02 + 1.33307407e-02 1.33255363e-02 1.33220408e-02 1.33202542e-02 1.33201765e-02 + 1.33218078e-02 1.33251480e-02 1.33301970e-02 1.33369550e-02 1.33454220e-02 + 1.33555978e-02 1.33674825e-02 1.33810762e-02 1.33963787e-02 1.34133902e-02 + 1.34321105e-02 1.34525397e-02 1.34746779e-02 1.34985249e-02 1.35240808e-02 + 1.35513455e-02 1.35803192e-02 1.36110016e-02 1.36433930e-02 1.36774932e-02 + 1.37133022e-02 1.37508200e-02 1.37900467e-02 1.38309822e-02 1.38736265e-02 + 1.39179796e-02 1.39640414e-02 1.40118121e-02 1.40612914e-02 1.41124796e-02 + 1.41653765e-02 1.42199821e-02 1.42762964e-02 1.43343194e-02 1.43940512e-02 + 1.44554916e-02 1.45186406e-02 1.45834983e-02 1.46500646e-02 1.47183396e-02 + 1.47883231e-02 1.48600153e-02 1.49334160e-02 1.50085252e-02 1.50853430e-02 + 1.51638693e-02 1.52441041e-02 1.53260474e-02 1.54096992e-02 1.54950594e-02 + 1.55821280e-02 1.56709051e-02 1.57613905e-02 1.58535843e-02 1.59474864e-02 + 1.60430969e-02 1.61404156e-02 1.62394427e-02 1.63401780e-02 1.64426215e-02 + 1.65467732e-02 1.66526331e-02 1.67602012e-02 1.68694775e-02 1.69804618e-02 + 1.70931542e-02 1.72075547e-02 1.73236633e-02 1.74414798e-02 1.75610043e-02 + 1.76822368e-02 1.78051772e-02 1.79298256e-02 1.80561818e-02 1.81842458e-02 + 1.83140177e-02 1.84454973e-02 1.85786847e-02 1.87135798e-02 1.88501827e-02 + 1.89884931e-02 1.91285113e-02 1.92702370e-02 1.94136703e-02 1.95588111e-02 + 1.97056595e-02 1.98542153e-02 2.00044786e-02 2.01564492e-02 2.03101272e-02 + 2.04655126e-02 2.06226053e-02 2.07814052e-02 2.09419123e-02 2.11041267e-02 + 2.12680482e-02 2.14336768e-02 2.16010125e-02 2.17700553e-02 2.19408050e-02 + 2.21132617e-02 2.22874254e-02 2.24632959e-02 2.26408733e-02 2.28201575e-02 + 2.30011484e-02 2.31838461e-02 2.33682505e-02 2.35543615e-02 2.37421791e-02 + 2.39317033e-02 2.41229339e-02 2.43158711e-02 2.45105147e-02 2.47068647e-02 + 2.49049210e-02 2.51046836e-02 2.53061524e-02 2.55093275e-02 2.57142087e-02 + 2.59207960e-02 2.61290894e-02 2.63390888e-02 2.65507942e-02 2.67642055e-02 + 2.69793227e-02 2.71961457e-02 2.74146744e-02 2.76349090e-02 2.78568491e-02 + 2.80804949e-02 2.83058463e-02 2.85329032e-02 2.87616656e-02 2.89921334e-02 + 2.92243066e-02 2.94581851e-02 2.96937689e-02 2.99310578e-02 3.01700520e-02 + 3.04107512e-02 3.06531555e-02 3.08972648e-02 3.11430790e-02 3.13905981e-02 + 3.16398220e-02 3.18907507e-02 3.21433841e-02 3.23977222e-02 3.26537648e-02 + 3.29115120e-02 3.31709637e-02 3.34321199e-02 3.36949803e-02 3.39595451e-02 + 3.42258142e-02 3.44937874e-02 3.47634647e-02 3.50348461e-02 3.53079315e-02 + 3.55827209e-02 3.58592141e-02 3.61374112e-02 3.64173120e-02 3.66989165e-02 + 3.69822246e-02 3.72672363e-02 3.75539515e-02 3.78423701e-02 3.81324920e-02 + 3.84243173e-02 3.87178458e-02 3.90130775e-02 3.93100123e-02 3.96086502e-02 + 3.99089910e-02 4.02110347e-02 4.05147812e-02 4.08202305e-02 4.11273825e-02 + 4.14362371e-02 4.17467942e-02 4.20590539e-02 4.23730160e-02 4.26886804e-02 + 4.30060471e-02 4.33251159e-02 4.36458870e-02 4.39683600e-02 4.42925351e-02 + 4.46184120e-02 4.49459908e-02 4.52752714e-02 4.56062536e-02 4.59389375e-02 + 4.62733229e-02 4.66094097e-02 4.69471980e-02 4.72866875e-02 4.76278783e-02 + 4.79707703e-02 4.83153633e-02 4.86616573e-02 4.90096522e-02 4.93593480e-02 + 4.97107446e-02 5.00638418e-02 5.04186396e-02 5.07751380e-02 5.11333368e-02 + 5.14932360e-02 5.18548354e-02 5.22181351e-02 5.25831349e-02 5.29498347e-02 + 5.33182344e-02 5.36883341e-02 5.40601335e-02 5.44336326e-02 5.48088313e-02 + 5.51857296e-02 5.55643273e-02 5.59446244e-02 5.63266207e-02 5.67103163e-02 + 5.70957109e-02 5.74828046e-02 5.78715972e-02 5.82620886e-02 5.86542788e-02 + 5.90481677e-02 5.94437551e-02 5.98410410e-02 6.02400253e-02 6.06407080e-02 + 6.10430888e-02 6.14471678e-02 6.18529447e-02 6.22604197e-02 6.26695925e-02 + 6.30804630e-02 6.34930312e-02 6.39072970e-02 6.43232602e-02 6.47409209e-02 + 6.51602788e-02 6.55813340e-02 6.60040862e-02 6.64285354e-02 6.68546816e-02 + 6.72825245e-02 6.77120642e-02 6.81433005e-02 6.85762333e-02 6.90108625e-02 + 6.94471881e-02 6.98852099e-02 7.03249278e-02 7.07663417e-02 7.12094516e-02 + 7.16542573e-02 7.21007588e-02 7.25489558e-02 7.29988484e-02 7.34504365e-02 + 7.39037198e-02 7.43586984e-02 7.48153721e-02 7.52737408e-02 7.57338044e-02 + 7.61955628e-02 7.66590160e-02 7.71241637e-02 7.75910059e-02 7.80595425e-02 + 7.85297734e-02 7.90016985e-02 7.94753177e-02 7.99506308e-02 8.04276378e-02 + 8.09063385e-02 8.13867329e-02 8.18688208e-02 8.23526021e-02 8.28380768e-02 + 8.33252446e-02 8.38141056e-02 8.43046595e-02 8.47969063e-02 8.52908459e-02 + 8.57864782e-02 8.62838029e-02 8.67828201e-02 8.72835297e-02 8.77859314e-02 + 8.82900252e-02 8.87958110e-02 8.93032887e-02 8.98124581e-02 9.03233191e-02 + 9.08358717e-02 9.13501157e-02 9.18660509e-02 9.23836774e-02 9.29029949e-02 + 9.34240033e-02 9.39467025e-02 9.44710925e-02 9.49971730e-02 9.55249440e-02 + 9.60544054e-02 9.65855570e-02 9.71183987e-02 9.76529303e-02 9.81891519e-02 + 9.87270632e-02 9.92666641e-02 9.98079545e-02 1.00350934e-01 1.00895603e-01 + 1.01441962e-01 1.01990009e-01 1.02539745e-01 1.03091170e-01 1.03644283e-01 + 1.04199085e-01 1.04755576e-01 1.05313754e-01 1.05873621e-01 1.06435176e-01 + 1.06998419e-01 1.07563349e-01 1.08129968e-01 1.08698273e-01 1.09268266e-01 + 1.09839947e-01 1.10413314e-01 1.10988368e-01 1.11565110e-01 1.12143538e-01 + 1.12723652e-01 1.13305453e-01 1.13888941e-01 1.14474115e-01 1.15060974e-01 + 1.15649520e-01 1.16239751e-01 1.16831669e-01 1.17425271e-01 1.18020560e-01 + 1.18617533e-01 1.19216192e-01 1.19816535e-01 1.20418564e-01 1.21022277e-01 + 1.21627675e-01 1.22234757e-01 1.22843524e-01 1.23453975e-01 1.24066109e-01 + 1.24679928e-01 1.25295431e-01 1.25912617e-01 1.26531487e-01 1.27152040e-01 + 1.27774276e-01 1.28398196e-01 1.29023798e-01 1.29651083e-01 1.30280051e-01 + 1.30910702e-01 1.31543034e-01 1.32177050e-01 1.32812747e-01 1.33450126e-01 + 1.34089187e-01 1.34729929e-01 1.35372353e-01 1.36016459e-01 1.36662246e-01 + 1.37309713e-01 1.37958862e-01 1.38609692e-01 1.39262202e-01 1.39916393e-01 + 1.40572264e-01 1.41229815e-01 1.41889046e-01 1.42549958e-01 1.43212549e-01 + 1.43876819e-01 1.44542770e-01 1.45210399e-01 1.45879708e-01 1.46550695e-01 + 1.47223362e-01 1.47897707e-01 1.48573731e-01 1.49251433e-01 1.49930814e-01 + 1.50611872e-01 1.51294609e-01 1.51979023e-01 1.52665115e-01 1.53352885e-01 + 1.54042332e-01 1.54733456e-01 1.55426257e-01 1.56120735e-01 1.56816890e-01 + 1.57514721e-01 1.58214229e-01 1.58915413e-01 1.59618273e-01 1.60322809e-01 + 1.61029020e-01 1.61736908e-01 1.62446471e-01 1.63157709e-01 1.63870622e-01 + 1.64585210e-01 1.65301473e-01 1.66019411e-01 1.66739023e-01 1.67460310e-01 + 1.68183271e-01 1.68907906e-01 1.69634214e-01 1.70362197e-01 1.71091853e-01 + 1.71823182e-01 1.72556184e-01 1.73290860e-01 1.74027208e-01 1.74765229e-01 + 1.75504923e-01 1.76246289e-01 1.76989327e-01 1.77734037e-01 1.78480419e-01 + 1.79228473e-01 1.79978199e-01 1.80729595e-01 1.81482663e-01 1.82237402e-01 + 1.82993812e-01 1.83751893e-01 1.84511644e-01 1.85273065e-01 1.86036157e-01 + 1.86800919e-01 1.87567350e-01 1.88335451e-01 1.89105222e-01 1.89876662e-01 + 1.90649771e-01 1.91424549e-01 1.92200996e-01 1.92979112e-01 1.93758896e-01 + 1.94540348e-01 1.95323469e-01 1.96108257e-01 1.96894713e-01 1.97682837e-01 + 1.98472628e-01 1.99264087e-01 2.00057212e-01 2.00852004e-01 2.01648463e-01 + 2.02446589e-01 2.03246381e-01 2.04047839e-01 2.04850963e-01 2.05655753e-01 + 2.06462208e-01 2.07270329e-01 2.08080115e-01 2.08891567e-01 2.09704683e-01 + 2.10519464e-01 2.11335909e-01 2.12154019e-01 2.12973793e-01 2.13795231e-01 + 2.14618333e-01 2.15443098e-01 2.16269527e-01 2.17097619e-01 2.17927374e-01 + 2.18758792e-01 2.19591873e-01 2.20426616e-01 2.21263022e-01 2.22101090e-01 + 2.22940819e-01 2.23782211e-01 2.24625264e-01 2.25469978e-01 2.26316354e-01 + 2.27164390e-01 2.28014088e-01 2.28865446e-01 2.29718464e-01 2.30573143e-01 + 2.31429482e-01 2.32287480e-01 2.33147139e-01 2.34008457e-01 2.34871434e-01 + 2.35736070e-01 2.36602365e-01 2.37470319e-01 2.38339931e-01 2.39211202e-01 + 2.40084131e-01 2.40958717e-01 2.41834962e-01 2.42712864e-01 2.43592423e-01 + 2.44473640e-01 2.45356513e-01 2.46241044e-01 2.47127230e-01 2.48015074e-01 + 2.48904573e-01 2.49795728e-01 2.50688539e-01 2.51583006e-01 2.52479128e-01 + 2.53376905e-01 2.54276337e-01 2.55177424e-01 2.56080166e-01 2.56984562e-01 + 2.57890612e-01 2.58798316e-01 2.59707674e-01 2.60618685e-01 2.61531350e-01 + 2.62445667e-01 2.63361638e-01 2.64279262e-01 2.65198538e-01 2.66119466e-01 + 2.67042047e-01 2.67966279e-01 2.68892164e-01 2.69819699e-01 2.70748886e-01 + 2.71679724e-01 2.72612213e-01 2.73546353e-01 2.74482143e-01 2.75419584e-01 + 2.76358674e-01 2.77299415e-01 2.78241805e-01 2.79185844e-01 2.80131533e-01 + 2.81078870e-01 2.82027857e-01 2.82978492e-01 2.83930775e-01 2.84884707e-01 + 2.85840287e-01 2.86797514e-01 2.87756389e-01 2.88716911e-01 2.89679080e-01 + 2.90642896e-01 2.91608359e-01 2.92575468e-01 2.93544224e-01 2.94514625e-01 + 2.95486673e-01 2.96460366e-01 2.97435704e-01 2.98412687e-01 2.99391316e-01 + 3.00371589e-01 3.01353507e-01 3.02337069e-01 3.03322275e-01 3.04309125e-01 + 3.05297618e-01 3.06287755e-01 3.07279535e-01 3.08272958e-01 3.09268024e-01 + 3.10264733e-01 3.11263084e-01 3.12263076e-01 3.13264711e-01 3.14267987e-01 + 3.15272905e-01 3.16279464e-01 3.17287664e-01 3.18297505e-01 3.19308986e-01 + 3.20322108e-01 3.21336869e-01 3.22353271e-01 3.23371312e-01 3.24390992e-01 + 3.25412312e-01 3.26435271e-01 3.27459868e-01 3.28486104e-01 3.29513978e-01 + 3.30543490e-01 3.31574640e-01 3.32607428e-01 3.33641852e-01 3.34677914e-01 + 3.35715613e-01 3.36754949e-01 3.37795921e-01 3.38838529e-01 3.39882774e-01 + 3.40928653e-01 3.41976169e-01 3.43025320e-01 3.44076105e-01 3.45128526e-01 + 3.46182581e-01 3.47238271e-01 3.48295594e-01 3.49354552e-01 3.50415143e-01 + 3.51477368e-01 3.52541225e-01 3.53606716e-01 3.54673839e-01 3.55742595e-01 + 3.56812983e-01 3.57885003e-01 3.58958655e-01 3.60033939e-01 3.61110853e-01 + 3.62189399e-01 3.63269575e-01 3.64351382e-01 3.65434820e-01 3.66519887e-01 + 3.67606584e-01 3.68694911e-01 3.69784868e-01 3.70876453e-01 3.71969667e-01 + 3.73064510e-01 3.74160981e-01 3.75259081e-01 3.76358808e-01 3.77460163e-01 + 3.78563145e-01 3.79667755e-01 3.80773992e-01 3.81881855e-01 3.82991344e-01 + 3.84102460e-01 3.85215202e-01 3.86329570e-01 3.87445563e-01 3.88563181e-01 + 3.89682424e-01 3.90803292e-01 3.91925784e-01 3.93049901e-01 3.94175642e-01 + 3.95303006e-01 3.96431994e-01 3.97562605e-01 3.98694839e-01 3.99828696e-01 + 4.00964175e-01 4.02101276e-01 4.03240000e-01 4.04380345e-01 4.05522312e-01 + 4.06665899e-01 4.07811108e-01 4.08957938e-01 4.10106388e-01 4.11256458e-01 + 4.12408148e-01 4.13561458e-01 4.14716388e-01 4.15872936e-01 4.17031104e-01 + 4.18190890e-01 4.19352295e-01 4.20515317e-01 4.21679958e-01 4.22846216e-01 + 4.24014092e-01 4.25183585e-01 4.26354695e-01 4.27527421e-01 4.28701764e-01 + 4.29877723e-01 4.31055298e-01 4.32234488e-01 4.33415294e-01 4.34597715e-01 + 4.35781751e-01 4.36967401e-01 4.38154665e-01 4.39343544e-01 4.40534036e-01 + 4.41726142e-01 4.42919861e-01 4.44115193e-01 4.45312138e-01 4.46510695e-01 + 4.47710864e-01 4.48912645e-01 4.50116038e-01 4.51321043e-01 4.52527658e-01 + 4.53735885e-01 4.54945722e-01 4.56157169e-01 4.57370226e-01 4.58584894e-01 + 4.59801170e-01 4.61019056e-01 4.62238551e-01 4.63459655e-01 4.64682367e-01 + 4.65906688e-01 4.67132616e-01 4.68360152e-01 4.69589295e-01 4.70820046e-01 + 4.72052403e-01 4.73286367e-01 4.74521937e-01 4.75759113e-01 4.76997895e-01 + 4.78238283e-01 4.79480276e-01 4.80723873e-01 4.81969076e-01 4.83215882e-01 + 4.84464293e-01 4.85714308e-01 4.86965926e-01 4.88219148e-01 4.89473972e-01 + 4.90730400e-01 4.91988430e-01 4.93248062e-01 4.94509296e-01 4.95772131e-01 + 4.97036568e-01 4.98302606e-01 4.99570245e-01 5.00839485e-01 5.02110324e-01 + 5.03382764e-01 5.04656804e-01 5.05932442e-01 5.07209680e-01 5.08488517e-01 + 5.09768953e-01 5.11050986e-01 5.12334618e-01 5.13619847e-01 5.14906674e-01 + 5.16195098e-01 5.17485119e-01 5.18776737e-01 5.20069951e-01 5.21364761e-01 + 5.22661167e-01 5.23959168e-01 5.25258764e-01 5.26559955e-01 5.27862741e-01 + 5.29167122e-01 5.30473096e-01 5.31780664e-01 5.33089826e-01 5.34400580e-01 + 5.35712928e-01 5.37026868e-01 5.38342401e-01 5.39659526e-01 5.40978242e-01 + 5.42298550e-01 5.43620449e-01 5.44943939e-01 5.46269020e-01 5.47595691e-01 + 5.48923952e-01 5.50253802e-01 5.51585242e-01 5.52918272e-01 5.54252890e-01 + 5.55589096e-01 5.56926891e-01 5.58266274e-01 5.59607245e-01 5.60949803e-01 + 5.62293948e-01 5.63639680e-01 5.64986999e-01 5.66335903e-01 5.67686394e-01 + 5.69038470e-01 5.70392132e-01 5.71747378e-01 5.73104210e-01 5.74462626e-01 + 5.75822626e-01 5.77184210e-01 5.78547377e-01 5.79912128e-01 5.81278461e-01 + 5.82646378e-01 5.84015876e-01 5.85386957e-01 5.86759620e-01 5.88133864e-01 + 5.89509689e-01 5.90887095e-01 5.92266082e-01 5.93646649e-01 5.95028796e-01 + 5.96412522e-01 5.97797828e-01 5.99184713e-01 6.00573177e-01 6.01963219e-01 + 6.03354840e-01 6.04748038e-01 6.06142814e-01 6.07539167e-01 6.08937097e-01 + 6.10336603e-01 6.11737686e-01 6.13140346e-01 6.14544580e-01 6.15950391e-01 + 6.17357776e-01 6.18766736e-01 6.20177271e-01 6.21589379e-01 6.23003062e-01 + 6.24418319e-01 6.25835148e-01 6.27253551e-01 6.28673526e-01 6.30095073e-01 + 6.31518193e-01 6.32942884e-01 6.34369147e-01 6.35796981e-01 6.37226386e-01 + 6.38657361e-01 6.40089906e-01 6.41524022e-01 6.42959706e-01 6.44396960e-01 + 6.45835783e-01 6.47276175e-01 6.48718135e-01 6.50161663e-01 6.51606758e-01 + 6.53053421e-01 6.54501651e-01 6.55951448e-01 6.57402811e-01 6.58855740e-01 + 6.60310236e-01 6.61766296e-01 6.63223922e-01 6.64683112e-01 6.66143868e-01 + 6.67606187e-01 6.69070070e-01 6.70535517e-01 6.72002527e-01 6.73471100e-01 + 6.74941236e-01 6.76412934e-01 6.77886194e-01 6.79361015e-01 6.80837398e-01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.65580254e-01 1.65563515e-01 1.65546741e-01 1.65529929e-01 1.65513082e-01 + 1.65496198e-01 1.65479277e-01 1.65462319e-01 1.65445324e-01 1.65428292e-01 + 1.65411223e-01 1.65394117e-01 1.65376974e-01 1.65359793e-01 1.65342574e-01 + 1.65325318e-01 1.65308025e-01 1.65290693e-01 1.65273323e-01 1.65255915e-01 + 1.65238469e-01 1.65220985e-01 1.65203462e-01 1.65185901e-01 1.65168301e-01 + 1.65150662e-01 1.65132985e-01 1.65115268e-01 1.65097513e-01 1.65079718e-01 + 1.65061884e-01 1.65044011e-01 1.65026098e-01 1.65008145e-01 1.64990153e-01 + 1.64972120e-01 1.64954048e-01 1.64935936e-01 1.64917783e-01 1.64899591e-01 + 1.64881357e-01 1.64863083e-01 1.64844769e-01 1.64826414e-01 1.64808017e-01 + 1.64789580e-01 1.64771102e-01 1.64752582e-01 1.64734021e-01 1.64715418e-01 + 1.64696774e-01 1.64678088e-01 1.64659360e-01 1.64640590e-01 1.64621778e-01 + 1.64602924e-01 1.64584027e-01 1.64565088e-01 1.64546107e-01 1.64527082e-01 + 1.64508015e-01 1.64488905e-01 1.64469751e-01 1.64450555e-01 1.64431315e-01 + 1.64412031e-01 1.64392704e-01 1.64373334e-01 1.64353919e-01 1.64334460e-01 + 1.64314958e-01 1.64295411e-01 1.64275819e-01 1.64256183e-01 1.64236503e-01 + 1.64216777e-01 1.64197007e-01 1.64177192e-01 1.64157331e-01 1.64137425e-01 + 1.64117474e-01 1.64097477e-01 1.64077435e-01 1.64057346e-01 1.64037212e-01 + 1.64017032e-01 1.63996805e-01 1.63976532e-01 1.63956212e-01 1.63935846e-01 + 1.63915433e-01 1.63894973e-01 1.63874465e-01 1.63853911e-01 1.63833309e-01 + 1.63812660e-01 1.63791963e-01 1.63771218e-01 1.63750426e-01 1.63729585e-01 + 1.63708696e-01 1.63687759e-01 1.63666773e-01 1.63645738e-01 1.63624655e-01 + 1.63603523e-01 1.63582341e-01 1.63561111e-01 1.63539831e-01 1.63518501e-01 + 1.63497122e-01 1.63475693e-01 1.63454214e-01 1.63432685e-01 1.63411106e-01 + 1.63389476e-01 1.63367795e-01 1.63346064e-01 1.63324282e-01 1.63302449e-01 + 1.63280565e-01 1.63258629e-01 1.63236642e-01 1.63214603e-01 1.63192512e-01 + 1.63170369e-01 1.63148174e-01 1.63125927e-01 1.63103628e-01 1.63081275e-01 + 1.63058870e-01 1.63036412e-01 1.63013901e-01 1.62991337e-01 1.62968719e-01 + 1.62946048e-01 1.62923323e-01 1.62900544e-01 1.62877710e-01 1.62854823e-01 + 1.62831881e-01 1.62808885e-01 1.62785834e-01 1.62762728e-01 1.62739567e-01 + 1.62716350e-01 1.62693078e-01 1.62669751e-01 1.62646368e-01 1.62622929e-01 + 1.62599433e-01 1.62575882e-01 1.62552274e-01 1.62528609e-01 1.62504888e-01 + 1.62481109e-01 1.62457274e-01 1.62433381e-01 1.62409431e-01 1.62385423e-01 + 1.62361357e-01 1.62337233e-01 1.62313050e-01 1.62288810e-01 1.62264510e-01 + 1.62240152e-01 1.62215735e-01 1.62191259e-01 1.62166724e-01 1.62142129e-01 + 1.62117474e-01 1.62092759e-01 1.62067985e-01 1.62043150e-01 1.62018255e-01 + 1.61993299e-01 1.61968282e-01 1.61943204e-01 1.61918065e-01 1.61892865e-01 + 1.61867603e-01 1.61842279e-01 1.61816893e-01 1.61791445e-01 1.61765935e-01 + 1.61740362e-01 1.61714726e-01 1.61689028e-01 1.61663266e-01 1.61637441e-01 + 1.61611552e-01 1.61585600e-01 1.61559583e-01 1.61533503e-01 1.61507358e-01 + 1.61481148e-01 1.61454874e-01 1.61428535e-01 1.61402130e-01 1.61375660e-01 + 1.61349125e-01 1.61322523e-01 1.61295856e-01 1.61269123e-01 1.61242323e-01 + 1.61215456e-01 1.61188522e-01 1.61161522e-01 1.61134454e-01 1.61107319e-01 + 1.61080115e-01 1.61052844e-01 1.61025505e-01 1.60998098e-01 1.60970621e-01 + 1.60943076e-01 1.60915462e-01 1.60887779e-01 1.60860026e-01 1.60832204e-01 + 1.60804311e-01 1.60776349e-01 1.60748316e-01 1.60720212e-01 1.60692038e-01 + 1.60663792e-01 1.60635475e-01 1.60607087e-01 1.60578627e-01 1.60550095e-01 + 1.60521491e-01 1.60492814e-01 1.60464065e-01 1.60435242e-01 1.60406347e-01 + 1.60377378e-01 1.60348335e-01 1.60319219e-01 1.60290028e-01 1.60260764e-01 + 1.60231424e-01 1.60202010e-01 1.60172520e-01 1.60142955e-01 1.60113315e-01 + 1.60083599e-01 1.60053807e-01 1.60023938e-01 1.59993993e-01 1.59963971e-01 + 1.59933872e-01 1.59903696e-01 1.59873442e-01 1.59843110e-01 1.59812700e-01 + 1.59782212e-01 1.59751645e-01 1.59720999e-01 1.59690274e-01 1.59659470e-01 + 1.59628586e-01 1.59597622e-01 1.59566578e-01 1.59535454e-01 1.59504249e-01 + 1.59472963e-01 1.59441595e-01 1.59410146e-01 1.59378616e-01 1.59347003e-01 + 1.59315308e-01 1.59283531e-01 1.59251670e-01 1.59219726e-01 1.59187699e-01 + 1.59155589e-01 1.59123394e-01 1.59091115e-01 1.59058751e-01 1.59026303e-01 + 1.58993770e-01 1.58961151e-01 1.58928446e-01 1.58895656e-01 1.58862779e-01 + 1.58829816e-01 1.58796766e-01 1.58763628e-01 1.58730404e-01 1.58697092e-01 + 1.58663691e-01 1.58630203e-01 1.58596625e-01 1.58562959e-01 1.58529204e-01 + 1.58495359e-01 1.58461425e-01 1.58427400e-01 1.58393285e-01 1.58359079e-01 + 1.58324782e-01 1.58290394e-01 1.58255915e-01 1.58221343e-01 1.58186679e-01 + 1.58151923e-01 1.58117073e-01 1.58082131e-01 1.58047095e-01 1.58011965e-01 + 1.57976741e-01 1.57941422e-01 1.57906009e-01 1.57870501e-01 1.57834897e-01 + 1.57799197e-01 1.57763402e-01 1.57727510e-01 1.57691521e-01 1.57655435e-01 + 1.57619252e-01 1.57582971e-01 1.57546592e-01 1.57510115e-01 1.57473538e-01 + 1.57436863e-01 1.57400088e-01 1.57363214e-01 1.57326239e-01 1.57289164e-01 + 1.57251989e-01 1.57214712e-01 1.57177333e-01 1.57139853e-01 1.57102271e-01 + 1.57064586e-01 1.57026798e-01 1.56988907e-01 1.56950912e-01 1.56912813e-01 + 1.56874610e-01 1.56836302e-01 1.56797890e-01 1.56759371e-01 1.56720748e-01 + 1.56682017e-01 1.56643181e-01 1.56604237e-01 1.56565187e-01 1.56526028e-01 + 1.56486762e-01 1.56447387e-01 1.56407903e-01 1.56368311e-01 1.56328609e-01 + 1.56288796e-01 1.56248874e-01 1.56208841e-01 1.56168697e-01 1.56128441e-01 + 1.56088074e-01 1.56047594e-01 1.56007002e-01 1.55966297e-01 1.55925478e-01 + 1.55884546e-01 1.55843499e-01 1.55802338e-01 1.55761062e-01 1.55719670e-01 + 1.55678163e-01 1.55636539e-01 1.55594799e-01 1.55552941e-01 1.55510966e-01 + 1.55468873e-01 1.55426662e-01 1.55384333e-01 1.55341884e-01 1.55299315e-01 + 1.55256627e-01 1.55213818e-01 1.55170888e-01 1.55127838e-01 1.55084665e-01 + 1.55041370e-01 1.54997953e-01 1.54954413e-01 1.54910749e-01 1.54866961e-01 + 1.54823050e-01 1.54779013e-01 1.54734851e-01 1.54690564e-01 1.54646150e-01 + 1.54601610e-01 1.54556943e-01 1.54512149e-01 1.54467226e-01 1.54422176e-01 + 1.54376996e-01 1.54331687e-01 1.54286249e-01 1.54240680e-01 1.54194981e-01 + 1.54149150e-01 1.54103188e-01 1.54057094e-01 1.54010867e-01 1.53964507e-01 + 1.53918014e-01 1.53871386e-01 1.53824625e-01 1.53777728e-01 1.53730696e-01 + 1.53683527e-01 1.53636223e-01 1.53588781e-01 1.53541202e-01 1.53493486e-01 + 1.53445630e-01 1.53397636e-01 1.53349503e-01 1.53301229e-01 1.53252815e-01 + 1.53204260e-01 1.53155564e-01 1.53106726e-01 1.53057745e-01 1.53008621e-01 + 1.52959354e-01 1.52909943e-01 1.52860387e-01 1.52810686e-01 1.52760840e-01 + 1.52710847e-01 1.52660708e-01 1.52610421e-01 1.52559987e-01 1.52509404e-01 + 1.52458673e-01 1.52407792e-01 1.52356762e-01 1.52305580e-01 1.52254248e-01 + 1.52202764e-01 1.52151129e-01 1.52099340e-01 1.52047398e-01 1.51995302e-01 + 1.51943052e-01 1.51890647e-01 1.51838087e-01 1.51785370e-01 1.51732497e-01 + 1.51679467e-01 1.51626279e-01 1.51572932e-01 1.51519426e-01 1.51465761e-01 + 1.51411936e-01 1.51357950e-01 1.51303802e-01 1.51249493e-01 1.51195021e-01 + 1.51140386e-01 1.51085587e-01 1.51030624e-01 1.50975496e-01 1.50920202e-01 + 1.50864742e-01 1.50809116e-01 1.50753322e-01 1.50697360e-01 1.50641229e-01 + 1.50584929e-01 1.50528459e-01 1.50471818e-01 1.50415007e-01 1.50358023e-01 + 1.50300867e-01 1.50243538e-01 1.50186035e-01 1.50128358e-01 1.50070506e-01 + 1.50012478e-01 1.49954274e-01 1.49895893e-01 1.49837334e-01 1.49778596e-01 + 1.49719680e-01 1.49660584e-01 1.49601308e-01 1.49541850e-01 1.49482211e-01 + 1.49422390e-01 1.49362385e-01 1.49302197e-01 1.49241824e-01 1.49181266e-01 + 1.49120523e-01 1.49059593e-01 1.48998475e-01 1.48937170e-01 1.48875676e-01 + 1.48813992e-01 1.48752119e-01 1.48690055e-01 1.48627799e-01 1.48565351e-01 + 1.48502710e-01 1.48439876e-01 1.48376847e-01 1.48313623e-01 1.48250203e-01 + 1.48186586e-01 1.48122773e-01 1.48058761e-01 1.47994550e-01 1.47930139e-01 + 1.47865528e-01 1.47800717e-01 1.47735703e-01 1.47670486e-01 1.47605066e-01 + 1.47539442e-01 1.47473613e-01 1.47407579e-01 1.47341337e-01 1.47274889e-01 + 1.47208232e-01 1.47141367e-01 1.47074292e-01 1.47007006e-01 1.46939509e-01 + 1.46871800e-01 1.46803878e-01 1.46735743e-01 1.46667393e-01 1.46598827e-01 + 1.46530046e-01 1.46461047e-01 1.46391831e-01 1.46322396e-01 1.46252742e-01 + 1.46182867e-01 1.46112772e-01 1.46042454e-01 1.45971913e-01 1.45901149e-01 + 1.45830160e-01 1.45758946e-01 1.45687506e-01 1.45615839e-01 1.45543943e-01 + 1.45471819e-01 1.45399465e-01 1.45326880e-01 1.45254064e-01 1.45181016e-01 + 1.45107734e-01 1.45034218e-01 1.44960467e-01 1.44886480e-01 1.44812256e-01 + 1.44737795e-01 1.44663094e-01 1.44588154e-01 1.44512974e-01 1.44437552e-01 + 1.44361888e-01 1.44285981e-01 1.44209829e-01 1.44133432e-01 1.44056789e-01 + 1.43979899e-01 1.43902761e-01 1.43825374e-01 1.43747737e-01 1.43669849e-01 + 1.43591710e-01 1.43513317e-01 1.43434671e-01 1.43355770e-01 1.43276613e-01 + 1.43197200e-01 1.43117528e-01 1.43037599e-01 1.42957409e-01 1.42876959e-01 + 1.42796247e-01 1.42715272e-01 1.42634034e-01 1.42552530e-01 1.42470761e-01 + 1.42388726e-01 1.42306422e-01 1.42223850e-01 1.42141007e-01 1.42057894e-01 + 1.41974509e-01 1.41890851e-01 1.41806919e-01 1.41722711e-01 1.41638228e-01 + 1.41553467e-01 1.41468428e-01 1.41383109e-01 1.41297511e-01 1.41211630e-01 + 1.41125467e-01 1.41039020e-01 1.40952288e-01 1.40865271e-01 1.40777966e-01 + 1.40690373e-01 1.40602491e-01 1.40514319e-01 1.40425855e-01 1.40337099e-01 + 1.40248048e-01 1.40158703e-01 1.40069062e-01 1.39979124e-01 1.39888888e-01 + 1.39798352e-01 1.39707515e-01 1.39616377e-01 1.39524936e-01 1.39433191e-01 + 1.39341140e-01 1.39248784e-01 1.39156119e-01 1.39063146e-01 1.38969862e-01 + 1.38876268e-01 1.38782361e-01 1.38688141e-01 1.38593606e-01 1.38498755e-01 + 1.38403586e-01 1.38308099e-01 1.38212293e-01 1.38116166e-01 1.38019716e-01 + 1.37922943e-01 1.37825846e-01 1.37728423e-01 1.37630672e-01 1.37532594e-01 + 1.37434185e-01 1.37335446e-01 1.37236375e-01 1.37136970e-01 1.37037230e-01 + 1.36937155e-01 1.36836742e-01 1.36735991e-01 1.36634900e-01 1.36533467e-01 + 1.36431692e-01 1.36329574e-01 1.36227110e-01 1.36124300e-01 1.36021142e-01 + 1.35917635e-01 1.35813778e-01 1.35709568e-01 1.35605006e-01 1.35500089e-01 + 1.35394817e-01 1.35289187e-01 1.35183199e-01 1.35076851e-01 1.34970142e-01 + 1.34863070e-01 1.34755634e-01 1.34647833e-01 1.34539665e-01 1.34431128e-01 + 1.34322223e-01 1.34212946e-01 1.34103297e-01 1.33993274e-01 1.33882876e-01 + 1.33772101e-01 1.33660948e-01 1.33549416e-01 1.33437503e-01 1.33325207e-01 + 1.33212528e-01 1.33099463e-01 1.32986012e-01 1.32872172e-01 1.32757943e-01 + 1.32643323e-01 1.32528310e-01 1.32412904e-01 1.32297101e-01 1.32180902e-01 + 1.32064305e-01 1.31947307e-01 1.31829908e-01 1.31712106e-01 1.31593899e-01 + 1.31475287e-01 1.31356267e-01 1.31236838e-01 1.31116998e-01 1.30996746e-01 + 1.30876081e-01 1.30755001e-01 1.30633504e-01 1.30511588e-01 1.30389253e-01 + 1.30266497e-01 1.30143318e-01 1.30019714e-01 1.29895684e-01 1.29771227e-01 + 1.29646341e-01 1.29521024e-01 1.29395274e-01 1.29269091e-01 1.29142472e-01 + 1.29015417e-01 1.28887922e-01 1.28759987e-01 1.28631611e-01 1.28502791e-01 + 1.28373525e-01 1.28243813e-01 1.28113653e-01 1.27983043e-01 1.27851981e-01 + 1.27720466e-01 1.27588496e-01 1.27456070e-01 1.27323186e-01 1.27189841e-01 + 1.27056036e-01 1.26921767e-01 1.26787033e-01 1.26651833e-01 1.26516166e-01 + 1.26380028e-01 1.26243419e-01 1.26106337e-01 1.25968780e-01 1.25830747e-01 + 1.25692235e-01 1.25553244e-01 1.25413771e-01 1.25273815e-01 1.25133375e-01 + 1.24992448e-01 1.24851032e-01 1.24709127e-01 1.24566730e-01 1.24423839e-01 + 1.24280454e-01 1.24136571e-01 1.23992190e-01 1.23847309e-01 1.23701926e-01 + 1.23556040e-01 1.23409647e-01 1.23262748e-01 1.23115340e-01 1.22967422e-01 + 1.22818991e-01 1.22670046e-01 1.22520585e-01 1.22370607e-01 1.22220110e-01 + 1.22069091e-01 1.21917550e-01 1.21765484e-01 1.21612892e-01 1.21459773e-01 + 1.21306123e-01 1.21151942e-01 1.20997228e-01 1.20841979e-01 1.20686193e-01 + 1.20529869e-01 1.20373004e-01 1.20215598e-01 1.20057648e-01 1.19899152e-01 + 1.19740109e-01 1.19580518e-01 1.19420375e-01 1.19259680e-01 1.19098431e-01 + 1.18936626e-01 1.18774263e-01 1.18611341e-01 1.18447857e-01 1.18283810e-01 + 1.18119199e-01 1.17954021e-01 1.17788276e-01 1.17621960e-01 1.17455072e-01 + 1.17287611e-01 1.17119575e-01 1.16950961e-01 1.16781770e-01 1.16611997e-01 + 1.16441643e-01 1.16270705e-01 1.16099181e-01 1.15927070e-01 1.15754370e-01 + 1.15581079e-01 1.15407195e-01 1.15232718e-01 1.15057644e-01 1.14881973e-01 + 1.14705703e-01 1.14528831e-01 1.14351357e-01 1.14173279e-01 1.13994594e-01 + 1.13815302e-01 1.13635400e-01 1.13454887e-01 1.13273762e-01 1.13092022e-01 + 1.12909666e-01 1.12726692e-01 1.12543099e-01 1.12358884e-01 1.12174047e-01 + 1.11988586e-01 1.11802499e-01 1.11615785e-01 1.11428441e-01 1.11240467e-01 + 1.11051860e-01 1.10862619e-01 1.10672743e-01 1.10482230e-01 1.10291079e-01 + 1.10099287e-01 1.09906853e-01 1.09713777e-01 1.09520055e-01 1.09325688e-01 + 1.09130672e-01 1.08935008e-01 1.08738692e-01 1.08541725e-01 1.08344104e-01 + 1.08145827e-01 1.07946894e-01 1.07747304e-01 1.07547053e-01 1.07346142e-01 + 1.07144569e-01 1.06942333e-01 1.06739431e-01 1.06535863e-01 1.06331627e-01 + 1.06126723e-01 1.05921148e-01 1.05714902e-01 1.05507982e-01 1.05300389e-01 + 1.05092120e-01 1.04883175e-01 1.04673552e-01 1.04463250e-01 1.04252268e-01 + 1.04040604e-01 1.03828258e-01 1.03615228e-01 1.03401513e-01 1.03187113e-01 + 1.02972026e-01 1.02756250e-01 1.02539786e-01 1.02322631e-01 1.02104785e-01 + 1.01886248e-01 1.01667017e-01 1.01447092e-01 1.01226473e-01 1.01005158e-01 + 1.00783146e-01 1.00560436e-01 1.00337028e-01 1.00112922e-01 9.98881150e-02 + 9.96626076e-02 9.94363989e-02 9.92094881e-02 9.89818746e-02 9.87535577e-02 + 9.85245367e-02 9.82948112e-02 9.80643804e-02 9.78332440e-02 9.76014013e-02 + 9.73688518e-02 9.71355952e-02 9.69016310e-02 9.66669588e-02 9.64315783e-02 + 9.61954891e-02 9.59586908e-02 9.57211834e-02 9.54829664e-02 9.52440398e-02 + 9.50044033e-02 9.47640568e-02 9.45230003e-02 9.42812335e-02 9.40387567e-02 + 9.37955696e-02 9.35516725e-02 9.33070653e-02 9.30617482e-02 9.28157214e-02 + 9.25689850e-02 9.23215393e-02 9.20733846e-02 9.18245212e-02 9.15749495e-02 + 9.13246699e-02 9.10736827e-02 9.08219886e-02 9.05695880e-02 9.03164816e-02 + 9.00626699e-02 8.98081536e-02 8.95529334e-02 8.92970102e-02 8.90403847e-02 + 8.87830577e-02 8.85250303e-02 8.82663032e-02 8.80068776e-02 8.77467546e-02 + 8.74859351e-02 8.72244204e-02 8.69622117e-02 8.66993103e-02 8.64357174e-02 + 8.61714345e-02 8.59064630e-02 8.56408044e-02 8.53744602e-02 8.51074320e-02 + 8.48397215e-02 8.45713304e-02 8.43022605e-02 8.40325136e-02 8.37620916e-02 + 8.34909965e-02 8.32192302e-02 8.29467950e-02 8.26736929e-02 8.23999262e-02 + 8.21254970e-02 8.18504079e-02 8.15746611e-02 8.12982592e-02 8.10212047e-02 + 8.07435002e-02 8.04651484e-02 8.01861521e-02 7.99065141e-02 7.96262372e-02 + 7.93453246e-02 7.90637791e-02 7.87816039e-02 7.84988023e-02 7.82153774e-02 + 7.79313327e-02 7.76466715e-02 7.73613974e-02 7.70755139e-02 7.67890246e-02 + 7.65019334e-02 7.62142440e-02 7.59259604e-02 7.56370865e-02 7.53476263e-02 + 7.50575841e-02 7.47669641e-02 7.44757706e-02 7.41840079e-02 7.38916807e-02 + 7.35987934e-02 7.33053507e-02 7.30113575e-02 7.27168185e-02 7.24217387e-02 + 7.21261231e-02 7.18299768e-02 7.15333051e-02 7.12361133e-02 7.09384067e-02 + 7.06401909e-02 7.03414715e-02 7.00422541e-02 6.97425446e-02 6.94423488e-02 + 6.91416728e-02 6.88405225e-02 6.85389043e-02 6.82368244e-02 6.79342891e-02 + 6.76313050e-02 6.73278787e-02 6.70240169e-02 6.67197264e-02 6.64150140e-02 + 6.61098869e-02 6.58043520e-02 6.54984168e-02 6.51920884e-02 6.48853744e-02 + 6.45782823e-02 6.42708198e-02 6.39629946e-02 6.36548146e-02 6.33462879e-02 + 6.30374225e-02 6.27282267e-02 6.24187088e-02 6.21088773e-02 6.17987406e-02 + 6.14883076e-02 6.11775870e-02 6.08665877e-02 6.05553188e-02 6.02437893e-02 + 5.99320086e-02 5.96199860e-02 5.93077311e-02 5.89952534e-02 5.86825627e-02 + 5.83696689e-02 5.80565818e-02 5.77433118e-02 5.74298688e-02 5.71162634e-02 + 5.68025058e-02 5.64886069e-02 5.61745771e-02 5.58604274e-02 5.55461687e-02 + 5.52318121e-02 5.49173687e-02 5.46028499e-02 5.42882672e-02 5.39736321e-02 + 5.36589562e-02 5.33442514e-02 5.30295296e-02 5.27148029e-02 5.24000835e-02 + 5.20853836e-02 5.17707158e-02 5.14560924e-02 5.11415263e-02 5.08270302e-02 + 5.05126170e-02 5.01982998e-02 4.98840918e-02 4.95700061e-02 4.92560564e-02 + 4.89422560e-02 4.86286186e-02 4.83151580e-02 4.80018882e-02 4.76888231e-02 + 4.73759769e-02 4.70633638e-02 4.67509982e-02 4.64388946e-02 4.61270676e-02 + 4.58155320e-02 4.55043026e-02 4.51933944e-02 4.48828225e-02 4.45726020e-02 + 4.42627483e-02 4.39532767e-02 4.36442030e-02 4.33355426e-02 4.30273114e-02 + 4.27195253e-02 4.24122002e-02 4.21053521e-02 4.17989974e-02 4.14931524e-02 + 4.11878333e-02 4.08830568e-02 4.05788395e-02 4.02751981e-02 3.99721494e-02 + 3.96697104e-02 3.93678979e-02 3.90667293e-02 3.87662217e-02 3.84663923e-02 + 3.81672586e-02 3.78688381e-02 3.75711484e-02 3.72742070e-02 3.69780319e-02 + 3.66826407e-02 3.63880515e-02 3.60942822e-02 3.58013509e-02 3.55092758e-02 + 3.52180750e-02 3.49277670e-02 3.46383700e-02 3.43499026e-02 3.40623832e-02 + 3.37758304e-02 3.34902629e-02 3.32056994e-02 3.29221586e-02 3.26396593e-02 + 3.23582205e-02 3.20778611e-02 3.17986000e-02 3.15204562e-02 3.12434489e-02 + 3.09675972e-02 3.06929202e-02 3.04194370e-02 3.01471670e-02 2.98761294e-02 + 2.96063435e-02 2.93378286e-02 2.90706040e-02 2.88046891e-02 2.85401033e-02 + 2.82768660e-02 2.80149966e-02 2.77545145e-02 2.74954392e-02 2.72377901e-02 + 2.69815866e-02 2.67268481e-02 2.64735941e-02 2.62218441e-02 2.59716174e-02 + 2.57229334e-02 2.54758115e-02 2.52302711e-02 2.49863315e-02 2.47440120e-02 + 2.45033320e-02 2.42643105e-02 2.40269669e-02 2.37913204e-02 2.35573900e-02 + 2.33251949e-02 2.30947540e-02 2.28660864e-02 2.26392110e-02 2.24141466e-02 + 2.21909120e-02 2.19695260e-02 2.17500072e-02 2.15323742e-02 2.13166455e-02 + 2.11028396e-02 2.08909747e-02 2.06810691e-02 2.04731411e-02 2.02672086e-02 + 2.00632896e-02 1.98614019e-02 1.96615634e-02 1.94637917e-02 1.92681043e-02 + 1.90745186e-02 1.88830519e-02 1.86937213e-02 1.85065440e-02 1.83215368e-02 + 1.81387165e-02 1.79580998e-02 1.77797030e-02 1.76035426e-02 1.74296348e-02 + 1.72579956e-02 1.70886409e-02 1.69215864e-02 1.67568478e-02 1.65944402e-02 + 1.64343791e-02 1.62766795e-02 1.61213562e-02 1.59684240e-02 1.58178973e-02 + 1.56697904e-02 1.55241176e-02 1.53808927e-02 1.52401295e-02 1.51018416e-02 + 1.49660422e-02 1.48327446e-02 1.47019616e-02 1.45737059e-02 1.44479901e-02 + 1.43248264e-02 1.42042269e-02 1.40862035e-02 1.39707676e-02 1.38579308e-02 + 1.37477041e-02 1.36400985e-02 1.35351246e-02 1.34327929e-02 1.33331135e-02 + 1.32360964e-02 1.31417514e-02 1.30500877e-02 1.29611147e-02 1.28748412e-02 + 1.27912760e-02 1.27104274e-02 1.26323037e-02 1.25569127e-02 1.24842620e-02 + 1.24143590e-02 1.23472109e-02 1.22828243e-02 1.22212060e-02 1.21623621e-02 + 1.21062986e-02 1.20530213e-02 1.20025356e-02 1.19548467e-02 1.19099595e-02 + 1.18678785e-02 1.18286081e-02 1.17921522e-02 1.17585148e-02 1.17276991e-02 + 1.16997084e-02 1.16745455e-02 1.16522130e-02 1.16327133e-02 1.16160484e-02 + 1.16022198e-02 1.15912292e-02 1.15830776e-02 1.15777658e-02 1.15752944e-02 + 1.15756637e-02 1.15788736e-02 1.15849238e-02 1.15938137e-02 1.16055423e-02 + 1.16201084e-02 1.16375106e-02 1.16577471e-02 1.16808156e-02 1.17067140e-02 + 1.17354395e-02 1.17669892e-02 1.18013598e-02 1.18385478e-02 1.18785493e-02 + 1.19213604e-02 1.19669765e-02 1.20153931e-02 1.20666051e-02 1.21206073e-02 + 1.21773942e-02 1.22369601e-02 1.22992988e-02 1.23644040e-02 1.24322691e-02 + 1.25028871e-02 1.25762510e-02 1.26523533e-02 1.27311863e-02 1.28127420e-02 + 1.28970121e-02 1.29839883e-02 1.30736618e-02 1.31660235e-02 1.32610642e-02 + 1.33587744e-02 1.34591444e-02 1.35621641e-02 1.36678232e-02 1.37761113e-02 + 1.38870177e-02 1.40005314e-02 1.41166411e-02 1.42353355e-02 1.43566028e-02 + 1.44804312e-02 1.46068085e-02 1.47357225e-02 1.48671606e-02 1.50011099e-02 + 1.51375576e-02 1.52764904e-02 1.54178949e-02 1.55617576e-02 1.57080646e-02 + 1.58568020e-02 1.60079555e-02 1.61615108e-02 1.63174534e-02 1.64757685e-02 + 1.66364411e-02 1.67994562e-02 1.69647985e-02 1.71324525e-02 1.73024027e-02 + 1.74746333e-02 1.76491283e-02 1.78258717e-02 1.80048472e-02 1.81860385e-02 + 1.83694290e-02 1.85550020e-02 1.87427408e-02 1.89326284e-02 1.91246477e-02 + 1.93187815e-02 1.95150125e-02 1.97133233e-02 1.99136963e-02 2.01161138e-02 + 2.03205580e-02 2.05270111e-02 2.07354551e-02 2.09458718e-02 2.11582431e-02 + 2.13725507e-02 2.15887763e-02 2.18069014e-02 2.20269075e-02 2.22487759e-02 + 2.24724880e-02 2.26980251e-02 2.29253683e-02 2.31544988e-02 2.33853976e-02 + 2.36180458e-02 2.38524242e-02 2.40885138e-02 2.43262955e-02 2.45657500e-02 + 2.48068582e-02 2.50496007e-02 2.52939584e-02 2.55399119e-02 2.57874418e-02 + 2.60365287e-02 2.62871534e-02 2.65392963e-02 2.67929381e-02 2.70480593e-02 + 2.73046406e-02 2.75626624e-02 2.78221053e-02 2.80829500e-02 2.83451769e-02 + 2.86087667e-02 2.88736999e-02 2.91399572e-02 2.94075191e-02 2.96763664e-02 + 2.99464796e-02 3.02178395e-02 3.04904267e-02 3.07642221e-02 3.10392064e-02 + 3.13153605e-02 3.15926651e-02 3.18711011e-02 3.21506496e-02 3.24312916e-02 + 3.27130079e-02 3.29957798e-02 3.32795883e-02 3.35644146e-02 3.38502401e-02 + 3.41370460e-02 3.44248137e-02 3.47135246e-02 3.50031602e-02 3.52937021e-02 + 3.55851319e-02 3.58774314e-02 3.61705823e-02 3.64645665e-02 3.67593660e-02 + 3.70549627e-02 3.73513388e-02 3.76484764e-02 3.79463579e-02 3.82449655e-02 + 3.85442817e-02 3.88442891e-02 3.91449703e-02 3.94463079e-02 3.97482849e-02 + 4.00508841e-02 4.03540886e-02 4.06578813e-02 4.09622456e-02 4.12671648e-02 + 4.15726221e-02 4.18786013e-02 4.21850858e-02 4.24920594e-02 4.27995060e-02 + 4.31074094e-02 4.34157537e-02 4.37245230e-02 4.40337017e-02 4.43432741e-02 + 4.46532246e-02 4.49635380e-02 4.52741988e-02 4.55851920e-02 4.58965024e-02 + 4.62081152e-02 4.65200155e-02 4.68321886e-02 4.71446199e-02 4.74572950e-02 + 4.77701996e-02 4.80833192e-02 4.83966400e-02 4.87101479e-02 4.90238289e-02 + 4.93376695e-02 4.96516559e-02 4.99657746e-02 5.02800123e-02 5.05943557e-02 + 5.09087917e-02 5.12233073e-02 5.15378895e-02 5.18525256e-02 5.21672030e-02 + 5.24819092e-02 5.27966317e-02 5.31113583e-02 5.34260768e-02 5.37407752e-02 + 5.40554416e-02 5.43700642e-02 5.46846314e-02 5.49991317e-02 5.53135536e-02 + 5.56278858e-02 5.59421172e-02 5.62562368e-02 5.65702336e-02 5.68840968e-02 + 5.71978158e-02 5.75113800e-02 5.78247790e-02 5.81380025e-02 5.84510402e-02 + 5.87638822e-02 5.90765185e-02 5.93889392e-02 5.97011346e-02 6.00130952e-02 + 6.03248115e-02 6.06362741e-02 6.09474738e-02 6.12584015e-02 6.15690482e-02 + 6.18794050e-02 6.21894631e-02 6.24992140e-02 6.28086489e-02 6.31177596e-02 + 6.34265377e-02 6.37349751e-02 6.40430636e-02 6.43507952e-02 6.46581622e-02 + 6.49651567e-02 6.52717712e-02 6.55779981e-02 6.58838299e-02 6.61892594e-02 + 6.64942794e-02 6.67988828e-02 6.71030625e-02 6.74068117e-02 6.77101237e-02 + 6.80129917e-02 6.83154092e-02 6.86173697e-02 6.89188669e-02 6.92198944e-02 + 6.95204462e-02 6.98205161e-02 7.01200982e-02 7.04191867e-02 7.07177757e-02 + 7.10158596e-02 7.13134329e-02 7.16104900e-02 7.19070256e-02 7.22030344e-02 + 7.24985112e-02 7.27934509e-02 7.30878484e-02 7.33816990e-02 7.36749977e-02 + 7.39677398e-02 7.42599207e-02 7.45515358e-02 7.48425807e-02 7.51330509e-02 + 7.54229421e-02 7.57122502e-02 7.60009711e-02 7.62891006e-02 7.65766348e-02 + 7.68635699e-02 7.71499020e-02 7.74356274e-02 7.77207425e-02 7.80052438e-02 + 7.82891277e-02 7.85723908e-02 7.88550299e-02 7.91370416e-02 7.94184229e-02 + 7.96991705e-02 7.99792815e-02 8.02587530e-02 8.05375820e-02 8.08157657e-02 + 8.10933015e-02 8.13701866e-02 8.16464184e-02 8.19219944e-02 8.21969122e-02 + 8.24711693e-02 8.27447635e-02 8.30176924e-02 8.32899539e-02 8.35615458e-02 + 8.38324661e-02 8.41027128e-02 8.43722839e-02 8.46411775e-02 8.49093918e-02 + 8.51769250e-02 8.54437756e-02 8.57099417e-02 8.59754218e-02 8.62402144e-02 + 8.65043180e-02 8.67677312e-02 8.70304527e-02 8.72924810e-02 8.75538151e-02 + 8.78144536e-02 8.80743954e-02 8.83336395e-02 8.85921847e-02 8.88500302e-02 + 8.91071748e-02 8.93636178e-02 8.96193583e-02 8.98743956e-02 9.01287287e-02 + 9.03823571e-02 9.06352801e-02 9.08874971e-02 9.11390074e-02 9.13898107e-02 + 9.16399063e-02 9.18892939e-02 9.21379731e-02 9.23859434e-02 9.26332047e-02 + 9.28797566e-02 9.31255989e-02 9.33707315e-02 9.36151540e-02 9.38588666e-02 + 9.41018690e-02 9.43441612e-02 9.45857433e-02 9.48266152e-02 9.50667771e-02 + 9.53062290e-02 9.55449711e-02 9.57830036e-02 9.60203266e-02 9.62569405e-02 + 9.64928454e-02 9.67280417e-02 9.69625298e-02 9.71963100e-02 9.74293827e-02 + 9.76617483e-02 9.78934074e-02 9.81243603e-02 9.83546076e-02 9.85841499e-02 + 9.88129878e-02 9.90411218e-02 9.92685525e-02 9.94952807e-02 9.97213070e-02 + 9.99466321e-02 1.00171257e-01 1.00395182e-01 1.00618408e-01 1.00840936e-01 + 1.01062766e-01 1.01283901e-01 1.01504340e-01 1.01724084e-01 1.01943134e-01 + 1.02161492e-01 1.02379158e-01 1.02596133e-01 1.02812418e-01 1.03028014e-01 + 1.03242923e-01 1.03457145e-01 1.03670682e-01 1.03883534e-01 1.04095702e-01 + 1.04307189e-01 1.04517994e-01 1.04728119e-01 1.04937566e-01 1.05146335e-01 + 1.05354428e-01 1.05561846e-01 1.05768590e-01 1.05974662e-01 1.06180062e-01 + 1.06384793e-01 1.06588855e-01 1.06792249e-01 1.06994978e-01 1.07197042e-01 + 1.07398443e-01 1.07599182e-01 1.07799261e-01 1.07998680e-01 1.08197442e-01 + 1.08395548e-01 1.08592999e-01 1.08789797e-01 1.08985943e-01 1.09181439e-01 + 1.09376286e-01 1.09570485e-01 1.09764039e-01 1.09956948e-01 1.10149214e-01 + 1.10340840e-01 1.10531825e-01 1.10722172e-01 1.10911883e-01 1.11100959e-01 + 1.11289401e-01 1.11477211e-01 1.11664391e-01 1.11850942e-01 1.12036866e-01 + 1.12222165e-01 1.12406840e-01 1.12590892e-01 1.12774325e-01 1.12957138e-01 + 1.13139333e-01 1.13320913e-01 1.13501880e-01 1.13682233e-01 1.13861976e-01 + 1.14041111e-01 1.14219637e-01 1.14397559e-01 1.14574876e-01 1.14751591e-01 + 1.14927705e-01 1.15103221e-01 1.15278139e-01 1.15452462e-01 1.15626191e-01 + 1.15799328e-01 1.15971875e-01 1.16143834e-01 1.16315205e-01 1.16485991e-01 + 1.16656194e-01 1.16825815e-01 1.16994856e-01 1.17163320e-01 1.17331206e-01 + 1.17498518e-01 1.17665257e-01 1.17831424e-01 1.17997022e-01 1.18162053e-01 + 1.18326517e-01 1.18490417e-01 1.18653754e-01 1.18816531e-01 1.18978749e-01 + 1.19140409e-01 1.19301514e-01 1.19462065e-01 1.19622064e-01 1.19781513e-01 + 1.19940414e-01 1.20098767e-01 1.20256576e-01 1.20413841e-01 1.20570565e-01 + 1.20726749e-01 1.20882395e-01 1.21037505e-01 1.21192080e-01 1.21346123e-01 + 1.21499635e-01 1.21652617e-01 1.21805072e-01 1.21957001e-01 1.22108406e-01 + 1.22259289e-01 1.22409651e-01 1.22559495e-01 1.22708821e-01 1.22857632e-01 + 1.23005930e-01 1.23153715e-01 1.23300991e-01 1.23447758e-01 1.23594019e-01 + 1.23739774e-01 1.23885027e-01 1.24029777e-01 1.24174028e-01 1.24317781e-01 + 1.24461038e-01 1.24603800e-01 1.24746069e-01 1.24887847e-01 1.25029136e-01 + 1.25169936e-01 1.25310251e-01 1.25450081e-01 1.25589428e-01 1.25728294e-01 + 1.25866681e-01 1.26004590e-01 1.26142024e-01 1.26278983e-01 1.26415469e-01 + 1.26551484e-01 1.26687030e-01 1.26822109e-01 1.26956721e-01 1.27090870e-01 + 1.27224555e-01 1.27357780e-01 1.27490545e-01 1.27622852e-01 1.27754704e-01 + 1.27886101e-01 1.28017045e-01 1.28147538e-01 1.28277582e-01 1.28407177e-01 + 1.28536327e-01 1.28665031e-01 1.28793293e-01 1.28921113e-01 1.29048493e-01 + 1.29175435e-01 1.29301941e-01 1.29428011e-01 1.29553648e-01 1.29678853e-01 + 1.29803627e-01 1.29927973e-01 1.30051892e-01 1.30175385e-01 1.30298454e-01 + 1.30421101e-01 1.30543327e-01 1.30665133e-01 1.30786522e-01 1.30907494e-01 + 1.31028051e-01 1.31148196e-01 1.31267929e-01 1.31387251e-01 1.31506165e-01 + 1.31624672e-01 1.31742773e-01 1.31860470e-01 1.31977765e-01 1.32094658e-01 + 1.32211152e-01 1.32327248e-01 1.32442947e-01 1.32558252e-01 1.32673162e-01 + 1.32787680e-01 1.32901808e-01 1.33015546e-01 1.33128897e-01 1.33241861e-01 + 1.33354441e-01 1.33466637e-01 1.33578451e-01 1.33689884e-01 1.33800939e-01 + 1.33911615e-01 1.34021916e-01 1.34131841e-01 1.34241394e-01 1.34350574e-01 + 1.34459383e-01 1.34567824e-01 1.34675896e-01 1.34783602e-01 1.34890944e-01 + 1.34997921e-01 1.35104536e-01 1.35210791e-01 1.35316685e-01 1.35422222e-01 + 1.35527402e-01 1.35632226e-01 1.35736697e-01 1.35840814e-01 1.35944580e-01 + 1.36047997e-01 1.36151064e-01 1.36253784e-01 1.36356158e-01 1.36458187e-01 + 1.36559873e-01 1.36661216e-01 1.36762219e-01 1.36862882e-01 1.36963207e-01 + 1.37063195e-01 1.37162847e-01 1.37262165e-01 1.37361150e-01 1.37459803e-01 + 1.37558126e-01 1.37656119e-01 1.37753784e-01 1.37851123e-01 1.37948136e-01 + 1.38044824e-01 1.38141190e-01 1.38237233e-01 1.38332957e-01 1.38428361e-01 + 1.38523446e-01 1.38618215e-01 1.38712668e-01 1.38806807e-01 1.38900633e-01 + 1.38994146e-01 1.39087349e-01 1.39180241e-01 1.39272826e-01 1.39365103e-01 + 1.39457074e-01 1.39548740e-01 1.39640102e-01 1.39731162e-01 1.39821920e-01 + 1.39912378e-01 1.40002537e-01 1.40092398e-01 1.40181961e-01 1.40271230e-01 + 1.40360203e-01 1.40448884e-01 1.40537272e-01 1.40625368e-01 1.40713175e-01 + 1.40800693e-01 1.40887923e-01 1.40974866e-01 1.41061523e-01 1.41147896e-01 + 1.41233986e-01 1.41319793e-01 1.41405319e-01 1.41490565e-01 1.41575532e-01 + 1.41660220e-01 1.41744632e-01 1.41828768e-01 1.41912628e-01 1.41996216e-01 + 1.42079530e-01 1.42162572e-01 1.42245344e-01 1.42327847e-01 1.42410081e-01 + 1.42492047e-01 1.42573747e-01 1.42655181e-01 1.42736351e-01 1.42817257e-01 + 1.42897901e-01 1.42978283e-01 1.43058405e-01 1.43138268e-01 1.43217872e-01 + 1.43297218e-01 1.43376309e-01 1.43455143e-01 1.43533723e-01 1.43612050e-01 + 1.43690124e-01 1.43767947e-01 1.43845519e-01 1.43922841e-01 1.43999914e-01 + 1.44076740e-01 1.44153319e-01 1.44229652e-01 1.44305740e-01 1.44381584e-01 + 1.44457185e-01 1.44532544e-01 1.44607662e-01 1.44682539e-01 1.44757177e-01 + 1.44831577e-01 1.44905739e-01 1.44979665e-01 1.45053355e-01 1.45126809e-01 + 1.45200031e-01 1.45273019e-01 1.45345774e-01 1.45418299e-01 1.45490593e-01 + 1.45562658e-01 1.45634494e-01 1.45706102e-01 1.45777484e-01 1.45848639e-01 + 1.45919569e-01 1.45990275e-01 1.46060758e-01 1.46131018e-01 1.46201056e-01 + 1.46270873e-01 1.46340470e-01 1.46409848e-01 1.46479008e-01 1.46547950e-01 + 1.46616675e-01 1.46685184e-01 1.46753479e-01 1.46821558e-01 1.46889425e-01 + 1.46957079e-01 1.47024520e-01 1.47091751e-01 1.47158772e-01 1.47225583e-01 + 1.47292185e-01 1.47358580e-01 1.47424768e-01 1.47490749e-01 1.47556524e-01 + 1.47622095e-01 1.47687462e-01 1.47752626e-01 1.47817587e-01 1.47882347e-01 + 1.38518338e-01 1.38476565e-01 1.38434740e-01 1.38392864e-01 1.38350938e-01 + 1.38308960e-01 1.38266931e-01 1.38224851e-01 1.38182720e-01 1.38140538e-01 + 1.38098305e-01 1.38056020e-01 1.38013684e-01 1.37971296e-01 1.37928857e-01 + 1.37886366e-01 1.37843824e-01 1.37801230e-01 1.37758585e-01 1.37715888e-01 + 1.37673139e-01 1.37630338e-01 1.37587486e-01 1.37544581e-01 1.37501625e-01 + 1.37458617e-01 1.37415556e-01 1.37372444e-01 1.37329279e-01 1.37286062e-01 + 1.37242794e-01 1.37199472e-01 1.37156099e-01 1.37112673e-01 1.37069195e-01 + 1.37025664e-01 1.36982081e-01 1.36938445e-01 1.36894757e-01 1.36851016e-01 + 1.36807222e-01 1.36763376e-01 1.36719477e-01 1.36675525e-01 1.36631520e-01 + 1.36587463e-01 1.36543352e-01 1.36499189e-01 1.36454972e-01 1.36410702e-01 + 1.36366380e-01 1.36322004e-01 1.36277574e-01 1.36233092e-01 1.36188556e-01 + 1.36143967e-01 1.36099325e-01 1.36054629e-01 1.36009880e-01 1.35965077e-01 + 1.35920221e-01 1.35875311e-01 1.35830347e-01 1.35785330e-01 1.35740259e-01 + 1.35695134e-01 1.35649956e-01 1.35604723e-01 1.35559437e-01 1.35514096e-01 + 1.35468702e-01 1.35423254e-01 1.35377752e-01 1.35332195e-01 1.35286585e-01 + 1.35240920e-01 1.35195201e-01 1.35149428e-01 1.35103600e-01 1.35057718e-01 + 1.35011782e-01 1.34965791e-01 1.34919746e-01 1.34873646e-01 1.34827492e-01 + 1.34781283e-01 1.34735020e-01 1.34688702e-01 1.34642329e-01 1.34595901e-01 + 1.34549419e-01 1.34502882e-01 1.34456290e-01 1.34409643e-01 1.34362941e-01 + 1.34316184e-01 1.34269372e-01 1.34222505e-01 1.34175583e-01 1.34128606e-01 + 1.34081573e-01 1.34034486e-01 1.33987343e-01 1.33940145e-01 1.33892892e-01 + 1.33845583e-01 1.33798219e-01 1.33750799e-01 1.33703324e-01 1.33655794e-01 + 1.33608207e-01 1.33560566e-01 1.33512869e-01 1.33465116e-01 1.33417307e-01 + 1.33369443e-01 1.33321523e-01 1.33273547e-01 1.33225515e-01 1.33177428e-01 + 1.33129285e-01 1.33081085e-01 1.33032830e-01 1.32984519e-01 1.32936152e-01 + 1.32887728e-01 1.32839249e-01 1.32790713e-01 1.32742122e-01 1.32693474e-01 + 1.32644770e-01 1.32596010e-01 1.32547193e-01 1.32498320e-01 1.32449391e-01 + 1.32400405e-01 1.32351363e-01 1.32302265e-01 1.32253110e-01 1.32203899e-01 + 1.32154631e-01 1.32105306e-01 1.32055925e-01 1.32006488e-01 1.31956993e-01 + 1.31907442e-01 1.31857835e-01 1.31808170e-01 1.31758449e-01 1.31708671e-01 + 1.31658836e-01 1.31608945e-01 1.31558996e-01 1.31508991e-01 1.31458929e-01 + 1.31408809e-01 1.31358633e-01 1.31308400e-01 1.31258110e-01 1.31207762e-01 + 1.31157358e-01 1.31106897e-01 1.31056378e-01 1.31005802e-01 1.30955169e-01 + 1.30904479e-01 1.30853732e-01 1.30802927e-01 1.30752065e-01 1.30701146e-01 + 1.30650170e-01 1.30599136e-01 1.30548045e-01 1.30496896e-01 1.30445690e-01 + 1.30394426e-01 1.30343106e-01 1.30291727e-01 1.30240291e-01 1.30188798e-01 + 1.30137247e-01 1.30085639e-01 1.30033973e-01 1.29982249e-01 1.29930468e-01 + 1.29878629e-01 1.29826732e-01 1.29774778e-01 1.29722766e-01 1.29670696e-01 + 1.29618569e-01 1.29566384e-01 1.29514141e-01 1.29461841e-01 1.29409482e-01 + 1.29357066e-01 1.29304592e-01 1.29252060e-01 1.29199470e-01 1.29146823e-01 + 1.29094117e-01 1.29041354e-01 1.28988533e-01 1.28935654e-01 1.28882717e-01 + 1.28829721e-01 1.28776668e-01 1.28723557e-01 1.28670388e-01 1.28617161e-01 + 1.28563876e-01 1.28510533e-01 1.28457132e-01 1.28403673e-01 1.28350156e-01 + 1.28296581e-01 1.28242948e-01 1.28189256e-01 1.28135507e-01 1.28081699e-01 + 1.28027834e-01 1.27973910e-01 1.27919928e-01 1.27865888e-01 1.27811790e-01 + 1.27757634e-01 1.27703420e-01 1.27649147e-01 1.27594816e-01 1.27540427e-01 + 1.27485980e-01 1.27431475e-01 1.27376912e-01 1.27322290e-01 1.27267611e-01 + 1.27212873e-01 1.27158077e-01 1.27103223e-01 1.27048310e-01 1.26993340e-01 + 1.26938311e-01 1.26883224e-01 1.26828079e-01 1.26772875e-01 1.26717614e-01 + 1.26662294e-01 1.26606916e-01 1.26551480e-01 1.26495986e-01 1.26440433e-01 + 1.26384823e-01 1.26329154e-01 1.26273427e-01 1.26217642e-01 1.26161799e-01 + 1.26105898e-01 1.26049938e-01 1.25993920e-01 1.25937845e-01 1.25881711e-01 + 1.25825519e-01 1.25769269e-01 1.25712961e-01 1.25656594e-01 1.25600170e-01 + 1.25543688e-01 1.25487147e-01 1.25430549e-01 1.25373892e-01 1.25317178e-01 + 1.25260405e-01 1.25203574e-01 1.25146686e-01 1.25089739e-01 1.25032735e-01 + 1.24975672e-01 1.24918552e-01 1.24861374e-01 1.24804137e-01 1.24746843e-01 + 1.24689491e-01 1.24632082e-01 1.24574614e-01 1.24517089e-01 1.24459505e-01 + 1.24401864e-01 1.24344166e-01 1.24286409e-01 1.24228595e-01 1.24170723e-01 + 1.24112794e-01 1.24054806e-01 1.23996762e-01 1.23938659e-01 1.23880499e-01 + 1.23822281e-01 1.23764006e-01 1.23705674e-01 1.23647284e-01 1.23588836e-01 + 1.23530331e-01 1.23471769e-01 1.23413149e-01 1.23354472e-01 1.23295737e-01 + 1.23236946e-01 1.23178097e-01 1.23119190e-01 1.23060227e-01 1.23001206e-01 + 1.22942129e-01 1.22882994e-01 1.22823802e-01 1.22764553e-01 1.22705247e-01 + 1.22645884e-01 1.22586464e-01 1.22526988e-01 1.22467454e-01 1.22407864e-01 + 1.22348217e-01 1.22288513e-01 1.22228752e-01 1.22168935e-01 1.22109061e-01 + 1.22049130e-01 1.21989143e-01 1.21929100e-01 1.21869000e-01 1.21808843e-01 + 1.21748630e-01 1.21688361e-01 1.21628036e-01 1.21567654e-01 1.21507216e-01 + 1.21446722e-01 1.21386172e-01 1.21325566e-01 1.21264904e-01 1.21204185e-01 + 1.21143411e-01 1.21082581e-01 1.21021696e-01 1.20960754e-01 1.20899757e-01 + 1.20838704e-01 1.20777596e-01 1.20716432e-01 1.20655212e-01 1.20593937e-01 + 1.20532607e-01 1.20471221e-01 1.20409780e-01 1.20348284e-01 1.20286733e-01 + 1.20225127e-01 1.20163465e-01 1.20101749e-01 1.20039978e-01 1.19978152e-01 + 1.19916271e-01 1.19854335e-01 1.19792345e-01 1.19730300e-01 1.19668200e-01 + 1.19606047e-01 1.19543838e-01 1.19481576e-01 1.19419259e-01 1.19356888e-01 + 1.19294463e-01 1.19231984e-01 1.19169450e-01 1.19106863e-01 1.19044222e-01 + 1.18981528e-01 1.18918779e-01 1.18855977e-01 1.18793122e-01 1.18730213e-01 + 1.18667250e-01 1.18604235e-01 1.18541166e-01 1.18478043e-01 1.18414868e-01 + 1.18351640e-01 1.18288359e-01 1.18225025e-01 1.18161638e-01 1.18098199e-01 + 1.18034707e-01 1.17971163e-01 1.17907566e-01 1.17843917e-01 1.17780216e-01 + 1.17716462e-01 1.17652656e-01 1.17588799e-01 1.17524889e-01 1.17460928e-01 + 1.17396915e-01 1.17332851e-01 1.17268735e-01 1.17204567e-01 1.17140349e-01 + 1.17076079e-01 1.17011757e-01 1.16947385e-01 1.16882962e-01 1.16818488e-01 + 1.16753964e-01 1.16689388e-01 1.16624762e-01 1.16560086e-01 1.16495360e-01 + 1.16430583e-01 1.16365756e-01 1.16300879e-01 1.16235952e-01 1.16170975e-01 + 1.16105949e-01 1.16040873e-01 1.15975748e-01 1.15910573e-01 1.15845349e-01 + 1.15780076e-01 1.15714754e-01 1.15649383e-01 1.15583963e-01 1.15518494e-01 + 1.15452977e-01 1.15387412e-01 1.15321798e-01 1.15256136e-01 1.15190426e-01 + 1.15124668e-01 1.15058862e-01 1.14993008e-01 1.14927107e-01 1.14861158e-01 + 1.14795162e-01 1.14729119e-01 1.14663029e-01 1.14596892e-01 1.14530707e-01 + 1.14464477e-01 1.14398199e-01 1.14331875e-01 1.14265505e-01 1.14199089e-01 + 1.14132627e-01 1.14066119e-01 1.13999565e-01 1.13932965e-01 1.13866320e-01 + 1.13799630e-01 1.13732894e-01 1.13666113e-01 1.13599288e-01 1.13532417e-01 + 1.13465503e-01 1.13398543e-01 1.13331539e-01 1.13264491e-01 1.13197399e-01 + 1.13130263e-01 1.13063084e-01 1.12995861e-01 1.12928594e-01 1.12861284e-01 + 1.12793931e-01 1.12726535e-01 1.12659096e-01 1.12591615e-01 1.12524091e-01 + 1.12456524e-01 1.12388916e-01 1.12321265e-01 1.12253573e-01 1.12185839e-01 + 1.12118063e-01 1.12050246e-01 1.11982388e-01 1.11914489e-01 1.11846549e-01 + 1.11778568e-01 1.11710547e-01 1.11642485e-01 1.11574383e-01 1.11506242e-01 + 1.11438060e-01 1.11369839e-01 1.11301578e-01 1.11233278e-01 1.11164939e-01 + 1.11096561e-01 1.11028144e-01 1.10959689e-01 1.10891195e-01 1.10822663e-01 + 1.10754093e-01 1.10685486e-01 1.10616840e-01 1.10548157e-01 1.10479437e-01 + 1.10410680e-01 1.10341886e-01 1.10273055e-01 1.10204188e-01 1.10135284e-01 + 1.10066345e-01 1.09997369e-01 1.09928358e-01 1.09859311e-01 1.09790229e-01 + 1.09721112e-01 1.09651960e-01 1.09582773e-01 1.09513552e-01 1.09444296e-01 + 1.09375007e-01 1.09305683e-01 1.09236326e-01 1.09166936e-01 1.09097512e-01 + 1.09028055e-01 1.08958566e-01 1.08889044e-01 1.08819489e-01 1.08749902e-01 + 1.08680284e-01 1.08610634e-01 1.08540952e-01 1.08471239e-01 1.08401495e-01 + 1.08331720e-01 1.08261914e-01 1.08192078e-01 1.08122212e-01 1.08052316e-01 + 1.07982391e-01 1.07912436e-01 1.07842452e-01 1.07772438e-01 1.07702397e-01 + 1.07632326e-01 1.07562227e-01 1.07492101e-01 1.07421946e-01 1.07351764e-01 + 1.07281555e-01 1.07211318e-01 1.07141055e-01 1.07070766e-01 1.07000449e-01 + 1.06930107e-01 1.06859739e-01 1.06789346e-01 1.06718927e-01 1.06648483e-01 + 1.06578015e-01 1.06507521e-01 1.06437004e-01 1.06366462e-01 1.06295897e-01 + 1.06225308e-01 1.06154696e-01 1.06084061e-01 1.06013403e-01 1.05942723e-01 + 1.05872021e-01 1.05801296e-01 1.05730551e-01 1.05659783e-01 1.05588995e-01 + 1.05518186e-01 1.05447356e-01 1.05376506e-01 1.05305636e-01 1.05234746e-01 + 1.05163837e-01 1.05092908e-01 1.05021961e-01 1.04950995e-01 1.04880011e-01 + 1.04809009e-01 1.04737989e-01 1.04666951e-01 1.04595897e-01 1.04524826e-01 + 1.04453738e-01 1.04382633e-01 1.04311513e-01 1.04240377e-01 1.04169226e-01 + 1.04098060e-01 1.04026878e-01 1.03955683e-01 1.03884473e-01 1.03813249e-01 + 1.03742012e-01 1.03670761e-01 1.03599498e-01 1.03528222e-01 1.03456933e-01 + 1.03385633e-01 1.03314321e-01 1.03242997e-01 1.03171662e-01 1.03100317e-01 + 1.03028961e-01 1.02957595e-01 1.02886219e-01 1.02814833e-01 1.02743439e-01 + 1.02672036e-01 1.02600624e-01 1.02529204e-01 1.02457776e-01 1.02386340e-01 + 1.02314898e-01 1.02243448e-01 1.02171992e-01 1.02100530e-01 1.02029062e-01 + 1.01957589e-01 1.01886110e-01 1.01814626e-01 1.01743138e-01 1.01671646e-01 + 1.01600150e-01 1.01528651e-01 1.01457148e-01 1.01385643e-01 1.01314135e-01 + 1.01242625e-01 1.01171114e-01 1.01099601e-01 1.01028087e-01 1.00956573e-01 + 1.00885058e-01 1.00813543e-01 1.00742029e-01 1.00670515e-01 1.00599003e-01 + 1.00527492e-01 1.00455983e-01 1.00384477e-01 1.00312973e-01 1.00241472e-01 + 1.00169974e-01 1.00098480e-01 1.00026990e-01 9.99555050e-02 9.98840245e-02 + 9.98125493e-02 9.97410797e-02 9.96696161e-02 9.95981588e-02 9.95267084e-02 + 9.94552650e-02 9.93838292e-02 9.93124014e-02 9.92409818e-02 9.91695709e-02 + 9.90981691e-02 9.90267768e-02 9.89553944e-02 9.88840222e-02 9.88126607e-02 + 9.87413103e-02 9.86699713e-02 9.85986441e-02 9.85273293e-02 9.84560271e-02 + 9.83847379e-02 9.83134622e-02 9.82422004e-02 9.81709529e-02 9.80997201e-02 + 9.80285023e-02 9.79573001e-02 9.78861138e-02 9.78149439e-02 9.77437907e-02 + 9.76726547e-02 9.76015362e-02 9.75304358e-02 9.74593538e-02 9.73882907e-02 + 9.73172468e-02 9.72462226e-02 9.71752186e-02 9.71042351e-02 9.70332725e-02 + 9.69623314e-02 9.68914121e-02 9.68205151e-02 9.67496408e-02 9.66787897e-02 + 9.66079621e-02 9.65371585e-02 9.64663793e-02 9.63956251e-02 9.63248961e-02 + 9.62541930e-02 9.61835160e-02 9.61128657e-02 9.60422425e-02 9.59716469e-02 + 9.59010792e-02 9.58305400e-02 9.57600297e-02 9.56895487e-02 9.56190976e-02 + 9.55486767e-02 9.54782865e-02 9.54079274e-02 9.53376000e-02 9.52673047e-02 + 9.51970419e-02 9.51268121e-02 9.50566158e-02 9.49864534e-02 9.49163254e-02 + 9.48462322e-02 9.47761744e-02 9.47061524e-02 9.46361667e-02 9.45662176e-02 + 9.44963058e-02 9.44264317e-02 9.43565957e-02 9.42867984e-02 9.42170402e-02 + 9.41473215e-02 9.40776429e-02 9.40080049e-02 9.39384078e-02 9.38688523e-02 + 9.37993388e-02 9.37298677e-02 9.36604397e-02 9.35910550e-02 9.35217143e-02 + 9.34524180e-02 9.33831666e-02 9.33139606e-02 9.32448006e-02 9.31756869e-02 + 9.31066201e-02 9.30376006e-02 9.29686291e-02 9.28997059e-02 9.28308316e-02 + 9.27620066e-02 9.26932315e-02 9.26245068e-02 9.25558330e-02 9.24872106e-02 + 9.24186400e-02 9.23501218e-02 9.22816566e-02 9.22132447e-02 9.21448867e-02 + 9.20765832e-02 9.20083346e-02 9.19401414e-02 9.18720042e-02 9.18039235e-02 + 9.17358998e-02 9.16679335e-02 9.16000253e-02 9.15321756e-02 9.14643850e-02 + 9.13966540e-02 9.13289830e-02 9.12613727e-02 9.11938235e-02 9.11263360e-02 + 9.10589106e-02 9.09915480e-02 9.09242486e-02 9.08570130e-02 9.07898417e-02 + 9.07227352e-02 9.06556940e-02 9.05887187e-02 9.05218099e-02 9.04549680e-02 + 9.03881935e-02 9.03214871e-02 9.02548492e-02 9.01882804e-02 9.01217813e-02 + 9.00553522e-02 8.99889939e-02 8.99227068e-02 8.98564915e-02 8.97903485e-02 + 8.97242783e-02 8.96582816e-02 8.95923588e-02 8.95265104e-02 8.94607371e-02 + 8.93950394e-02 8.93294177e-02 8.92638728e-02 8.91984050e-02 8.91330150e-02 + 8.90677033e-02 8.90024705e-02 8.89373170e-02 8.88722435e-02 8.88072505e-02 + 8.87423386e-02 8.86775083e-02 8.86127602e-02 8.85480947e-02 8.84835126e-02 + 8.84190142e-02 8.83546003e-02 8.82902712e-02 8.82260277e-02 8.81618702e-02 + 8.80977994e-02 8.80338157e-02 8.79699197e-02 8.79061120e-02 8.78423932e-02 + 8.77787637e-02 8.77152243e-02 8.76517753e-02 8.75884175e-02 8.75251513e-02 + 8.74619773e-02 8.73988961e-02 8.73359083e-02 8.72730143e-02 8.72102149e-02 + 8.71475104e-02 8.70849016e-02 8.70223890e-02 8.69599731e-02 8.68976544e-02 + 8.68354337e-02 8.67733114e-02 8.67112881e-02 8.66493644e-02 8.65875409e-02 + 8.65258180e-02 8.64641964e-02 8.64026767e-02 8.63412594e-02 8.62799451e-02 + 8.62187344e-02 8.61576278e-02 8.60966259e-02 8.60357293e-02 8.59749386e-02 + 8.59142542e-02 8.58536769e-02 8.57932071e-02 8.57328455e-02 8.56725925e-02 + 8.56124489e-02 8.55524151e-02 8.54924918e-02 8.54326794e-02 8.53729787e-02 + 8.53133900e-02 8.52539141e-02 8.51945515e-02 8.51353028e-02 8.50761685e-02 + 8.50171493e-02 8.49582456e-02 8.48994581e-02 8.48407874e-02 8.47822340e-02 + 8.47237984e-02 8.46654813e-02 8.46072833e-02 8.45492049e-02 8.44912466e-02 + 8.44334092e-02 8.43756930e-02 8.43180988e-02 8.42606271e-02 8.42032784e-02 + 8.41460533e-02 8.40889525e-02 8.40319764e-02 8.39751257e-02 8.39184009e-02 + 8.38618026e-02 8.38053314e-02 8.37489878e-02 8.36927724e-02 8.36366859e-02 + 8.35807286e-02 8.35249013e-02 8.34692046e-02 8.34136388e-02 8.33582048e-02 + 8.33029029e-02 8.32477338e-02 8.31926981e-02 8.31377963e-02 8.30830290e-02 + 8.30283967e-02 8.29739001e-02 8.29195397e-02 8.28653161e-02 8.28112297e-02 + 8.27572813e-02 8.27034714e-02 8.26498005e-02 8.25962691e-02 8.25428780e-02 + 8.24896276e-02 8.24365184e-02 8.23835511e-02 8.23307263e-02 8.22780444e-02 + 8.22255060e-02 8.21731118e-02 8.21208622e-02 8.20687579e-02 8.20167993e-02 + 8.19649871e-02 8.19133218e-02 8.18618039e-02 8.18104341e-02 8.17592128e-02 + 8.17081407e-02 8.16572182e-02 8.16064460e-02 8.15558245e-02 8.15053545e-02 + 8.14550363e-02 8.14048705e-02 8.13548578e-02 8.13049986e-02 8.12552935e-02 + 8.12057430e-02 8.11563478e-02 8.11071082e-02 8.10580250e-02 8.10090986e-02 + 8.09603295e-02 8.09117184e-02 8.08632657e-02 8.08149721e-02 8.07668379e-02 + 8.07188639e-02 8.06710504e-02 8.06233982e-02 8.05759075e-02 8.05285792e-02 + 8.04814136e-02 8.04344112e-02 8.03875727e-02 8.03408986e-02 8.02943893e-02 + 8.02480455e-02 8.02018675e-02 8.01558561e-02 8.01100116e-02 8.00643347e-02 + 8.00188258e-02 7.99734855e-02 7.99283142e-02 7.98833126e-02 7.98384810e-02 + 7.97938201e-02 7.97493304e-02 7.97050123e-02 7.96608664e-02 7.96168932e-02 + 7.95730933e-02 7.95294670e-02 7.94860149e-02 7.94427376e-02 7.93996355e-02 + 7.93567091e-02 7.93139590e-02 7.92713856e-02 7.92289895e-02 7.91867711e-02 + 7.91447310e-02 7.91028695e-02 7.90611873e-02 7.90196849e-02 7.89783626e-02 + 7.89372210e-02 7.88962607e-02 7.88554819e-02 7.88148854e-02 7.87744715e-02 + 7.87342407e-02 7.86941935e-02 7.86543304e-02 7.86146519e-02 7.85751584e-02 + 7.85358504e-02 7.84967284e-02 7.84577929e-02 7.84190442e-02 7.83804830e-02 + 7.83421096e-02 7.83039245e-02 7.82659282e-02 7.82281212e-02 7.81905038e-02 + 7.81530766e-02 7.81158400e-02 7.80787945e-02 7.80419405e-02 7.80052784e-02 + 7.79688088e-02 7.79325320e-02 7.78964485e-02 7.78605587e-02 7.78248631e-02 + 7.77893622e-02 7.77540563e-02 7.77189459e-02 7.76840314e-02 7.76493132e-02 + 7.76147919e-02 7.75804677e-02 7.75463412e-02 7.75124127e-02 7.74786828e-02 + 7.74451517e-02 7.74118199e-02 7.73786878e-02 7.73457559e-02 7.73130245e-02 + 7.72804941e-02 7.72481650e-02 7.72160377e-02 7.71841125e-02 7.71523900e-02 + 7.71208703e-02 7.70895541e-02 7.70584416e-02 7.70275332e-02 7.69968293e-02 + 7.69663304e-02 7.69360368e-02 7.69059488e-02 7.68760670e-02 7.68463915e-02 + 7.68169229e-02 7.67876614e-02 7.67586075e-02 7.67297616e-02 7.67011239e-02 + 7.66726949e-02 7.66444749e-02 7.66164642e-02 7.65886633e-02 7.65610725e-02 + 7.65336921e-02 7.65065225e-02 7.64795641e-02 7.64528171e-02 7.64262819e-02 + 7.63999589e-02 7.63738484e-02 7.63479508e-02 7.63222662e-02 7.62967952e-02 + 7.62715380e-02 7.62464950e-02 7.62216664e-02 7.61970526e-02 7.61726539e-02 + 7.61484706e-02 7.61245031e-02 7.61007516e-02 7.60772164e-02 7.60538979e-02 + 7.60307964e-02 7.60079121e-02 7.59852453e-02 7.59627964e-02 7.59405657e-02 + 7.59185533e-02 7.58967597e-02 7.58751851e-02 7.58538297e-02 7.58326939e-02 + 7.58117779e-02 7.57910820e-02 7.57706065e-02 7.57503516e-02 7.57303176e-02 + 7.57105048e-02 7.56909134e-02 7.56715437e-02 7.56523959e-02 7.56334703e-02 + 7.56147671e-02 7.55962866e-02 7.55780290e-02 7.55599946e-02 7.55421835e-02 + 7.55245961e-02 7.55072326e-02 7.54900931e-02 7.54731780e-02 7.54564874e-02 + 7.54400215e-02 7.54237806e-02 7.54077649e-02 7.53919746e-02 7.53764099e-02 + 7.53610711e-02 7.53459582e-02 7.53310716e-02 7.53164113e-02 7.53019777e-02 + 7.52877708e-02 7.52737910e-02 7.52600383e-02 7.52465130e-02 7.52332152e-02 + 7.52201451e-02 7.52073028e-02 7.51946887e-02 7.51823027e-02 7.51701451e-02 + 7.51582161e-02 7.51465158e-02 7.51350443e-02 7.51238019e-02 7.51127886e-02 + 7.51020046e-02 7.50914500e-02 7.50811251e-02 7.50710299e-02 7.50611645e-02 + 7.50515291e-02 7.50421239e-02 7.50329489e-02 7.50240043e-02 7.50152901e-02 + 7.50068066e-02 7.49985538e-02 7.49905318e-02 7.49827407e-02 7.49751807e-02 + 7.49678518e-02 7.49607542e-02 7.49538879e-02 7.49472530e-02 7.49408496e-02 + 7.49346779e-02 7.49287378e-02 7.49230295e-02 7.49175530e-02 7.49123084e-02 + 7.49072958e-02 7.49025153e-02 7.48979669e-02 7.48936506e-02 7.48895666e-02 + 7.48857148e-02 7.48820954e-02 7.48787084e-02 7.48755538e-02 7.48726317e-02 + 7.48699421e-02 7.48674851e-02 7.48652606e-02 7.48632687e-02 7.48615095e-02 + 7.48599830e-02 7.48586891e-02 7.48576279e-02 7.48567994e-02 7.48562037e-02 + 7.48558407e-02 7.48557104e-02 7.48558129e-02 7.48561481e-02 7.48567160e-02 + 7.48575167e-02 7.48585501e-02 7.48598162e-02 7.48613149e-02 7.48630464e-02 + 7.48650104e-02 7.48672071e-02 7.48696364e-02 7.48722982e-02 7.48751926e-02 + 7.48783194e-02 7.48816786e-02 7.48852703e-02 7.48890943e-02 7.48931506e-02 + 7.48974391e-02 7.49019598e-02 7.49067126e-02 7.49116975e-02 7.49169143e-02 + 7.49223631e-02 7.49280438e-02 7.49339562e-02 7.49401003e-02 7.49464760e-02 + 7.49530832e-02 7.49599219e-02 7.49669919e-02 7.49742931e-02 7.49818255e-02 + 7.49895890e-02 7.49975834e-02 7.50058087e-02 7.50142646e-02 7.50229512e-02 + 7.50318684e-02 7.50410158e-02 7.50503936e-02 7.50600015e-02 7.50698394e-02 + 7.50799072e-02 7.50902047e-02 7.51007318e-02 7.51114884e-02 7.51224743e-02 + 7.51336894e-02 7.51451335e-02 7.51568065e-02 7.51687082e-02 7.51808385e-02 + 7.51931972e-02 7.52057841e-02 7.52185991e-02 7.52316420e-02 7.52449126e-02 + 7.52584108e-02 7.52721363e-02 7.52860890e-02 7.53002688e-02 7.53146753e-02 + 7.53293085e-02 7.53441681e-02 7.53592540e-02 7.53745659e-02 7.53901036e-02 + 7.54058670e-02 7.54218558e-02 7.54380698e-02 7.54545087e-02 7.54711725e-02 + 7.54880609e-02 7.55051735e-02 7.55225103e-02 7.55400710e-02 7.55578553e-02 + 7.55758631e-02 7.55940940e-02 7.56125479e-02 7.56312245e-02 7.56501236e-02 + 7.56692448e-02 7.56885881e-02 7.57081530e-02 7.57279394e-02 7.57479470e-02 + 7.57681755e-02 7.57886247e-02 7.58092942e-02 7.58301840e-02 7.58512935e-02 + 7.58726227e-02 7.58941712e-02 7.59159386e-02 7.59379249e-02 7.59601296e-02 + 7.59825524e-02 7.60051932e-02 7.60280515e-02 7.60511271e-02 7.60744197e-02 + 7.60979290e-02 7.61216547e-02 7.61455964e-02 7.61697540e-02 7.61941269e-02 + 7.62187151e-02 7.62435180e-02 7.62685354e-02 7.62937671e-02 7.63192126e-02 + 7.63448716e-02 7.63707438e-02 7.63968289e-02 7.64231266e-02 7.64496364e-02 + 7.64763581e-02 7.65032913e-02 7.65304357e-02 7.65577909e-02 7.65853566e-02 + 7.66131325e-02 7.66411181e-02 7.66693131e-02 7.66977171e-02 7.67263299e-02 + 7.67551510e-02 7.67841801e-02 7.68134168e-02 7.68428607e-02 7.68725114e-02 + 7.69023687e-02 7.69324320e-02 7.69627011e-02 7.69931756e-02 7.70238549e-02 + 7.70547389e-02 7.70858271e-02 7.71171190e-02 7.71486144e-02 7.71803127e-02 + 7.72122137e-02 7.72443169e-02 7.72766219e-02 7.73091283e-02 7.73418357e-02 + 7.73747437e-02 7.74078518e-02 7.74411598e-02 7.74746671e-02 7.75083734e-02 + 7.75422781e-02 7.75763810e-02 7.76106816e-02 7.76451794e-02 7.76798741e-02 + 7.77147651e-02 7.77498522e-02 7.77851347e-02 7.78206124e-02 7.78562848e-02 + 7.78921513e-02 7.79282117e-02 7.79644654e-02 7.80009121e-02 7.80375512e-02 + 7.80743823e-02 7.81114050e-02 7.81486188e-02 7.81860233e-02 7.82236179e-02 + 7.82614023e-02 7.82993761e-02 7.83375386e-02 7.83758895e-02 7.84144284e-02 + 7.84531546e-02 7.84920679e-02 7.85311676e-02 7.85704534e-02 7.86099248e-02 + 7.86495813e-02 7.86894223e-02 7.87294475e-02 7.87696564e-02 7.88100485e-02 + 7.88506232e-02 7.88913802e-02 7.89323189e-02 7.89734389e-02 7.90147396e-02 + 7.90562205e-02 7.90978813e-02 7.91397213e-02 7.91817402e-02 7.92239373e-02 + 7.92663122e-02 7.93088645e-02 7.93515935e-02 7.93944988e-02 7.94375800e-02 + 7.94808364e-02 7.95242676e-02 7.95678731e-02 7.96116524e-02 7.96556049e-02 + 7.96997302e-02 7.97440277e-02 7.97884970e-02 7.98331374e-02 7.98779486e-02 + 7.99229300e-02 7.99680810e-02 8.00134012e-02 8.00588900e-02 8.01045468e-02 + 8.01503713e-02 8.01963628e-02 8.02425209e-02 8.02888450e-02 8.03353345e-02 + 8.03819890e-02 8.04288079e-02 8.04757907e-02 8.05229368e-02 8.05702458e-02 + 8.06177170e-02 8.06653500e-02 8.07131443e-02 8.07610992e-02 8.08092142e-02 + 8.08574888e-02 8.09059225e-02 8.09545148e-02 8.10032650e-02 8.10521726e-02 + 8.11012372e-02 8.11504581e-02 8.11998347e-02 8.12493667e-02 8.12990534e-02 + 8.13488942e-02 8.13988886e-02 8.14490361e-02 8.14993361e-02 8.15497881e-02 + 8.16003915e-02 8.16511457e-02 8.17020502e-02 8.17531045e-02 8.18043080e-02 + 8.18556601e-02 8.19071604e-02 8.19588081e-02 8.20106028e-02 8.20625439e-02 + 8.21146309e-02 8.21668631e-02 8.22192401e-02 8.22717613e-02 8.23244260e-02 + 8.23772339e-02 8.24301842e-02 8.24832764e-02 8.25365100e-02 8.25898843e-02 + 8.26433990e-02 8.26970532e-02 8.27508466e-02 8.28047785e-02 8.28588484e-02 + 8.29130557e-02 8.29673998e-02 8.30218801e-02 8.30764962e-02 8.31312474e-02 + 8.31861332e-02 8.32411529e-02 8.32963061e-02 8.33515922e-02 8.34070105e-02 + 8.34625605e-02 8.35182417e-02 8.35740534e-02 8.36299951e-02 8.36860663e-02 + 8.37422663e-02 8.37985946e-02 8.38550506e-02 8.39116338e-02 8.39683435e-02 + 8.40251792e-02 8.40821403e-02 8.41392263e-02 8.41964365e-02 8.42537705e-02 + 8.43112275e-02 8.43688072e-02 8.44265088e-02 8.44843318e-02 8.45422756e-02 + 8.46003397e-02 8.46585235e-02 8.47168264e-02 8.47752478e-02 8.48337872e-02 + 8.48924439e-02 8.49512175e-02 8.50101073e-02 8.50691128e-02 8.51282334e-02 + 8.51874685e-02 8.52468175e-02 8.53062799e-02 8.53658551e-02 8.54255425e-02 + 8.54853415e-02 8.55452516e-02 8.56052723e-02 8.56654028e-02 8.57256427e-02 + 8.57859914e-02 8.58464483e-02 8.59070128e-02 8.59676844e-02 8.60284625e-02 + 8.60893465e-02 8.61503358e-02 8.62114299e-02 8.62726282e-02 8.63339302e-02 + 8.63953352e-02 8.64568427e-02 8.65184522e-02 8.65801629e-02 8.66419745e-02 + 8.67038863e-02 8.67658977e-02 8.68280082e-02 8.68902172e-02 8.69525242e-02 + 8.70149285e-02 8.70774296e-02 8.71400270e-02 8.72027200e-02 8.72655081e-02 + 8.73283908e-02 8.73913675e-02 8.74544376e-02 8.75176005e-02 8.75808557e-02 + 8.76442026e-02 8.77076407e-02 8.77711694e-02 8.78347881e-02 8.78984963e-02 + 8.79622934e-02 8.80261789e-02 8.80901521e-02 8.81542126e-02 8.82183598e-02 + 8.82825930e-02 8.83469119e-02 8.84113157e-02 8.84758040e-02 8.85403762e-02 + 8.86050317e-02 8.86697700e-02 8.87345905e-02 8.87994927e-02 8.88644761e-02 + 8.89295400e-02 8.89946839e-02 8.90599073e-02 8.91252096e-02 8.91905903e-02 + 8.92560488e-02 8.93215845e-02 8.93871970e-02 8.94528857e-02 8.95186500e-02 + 8.95844894e-02 8.96504034e-02 8.97163914e-02 8.97824528e-02 8.98485871e-02 + 8.99147938e-02 8.99810724e-02 9.00474222e-02 9.01138428e-02 9.01803336e-02 + 9.02468942e-02 9.03135238e-02 9.03802221e-02 9.04469884e-02 9.05138223e-02 + 9.05807232e-02 9.06476906e-02 9.07147239e-02 9.07818226e-02 9.08489862e-02 + 9.09162142e-02 9.09835060e-02 9.10508611e-02 9.11182790e-02 9.11857591e-02 + 9.12533009e-02 9.13209040e-02 9.13885677e-02 9.14562916e-02 9.15240751e-02 + 9.15919178e-02 9.16598190e-02 9.17277784e-02 9.17957953e-02 9.18638692e-02 + 9.19319997e-02 9.20001862e-02 9.20684282e-02 9.21367252e-02 9.22050767e-02 + 9.22734821e-02 9.23419411e-02 9.24104530e-02 9.24790173e-02 9.25476336e-02 + 9.26163013e-02 9.26850199e-02 9.27537890e-02 9.28226080e-02 9.28914765e-02 + 9.29603938e-02 9.30293596e-02 9.30983734e-02 9.31674346e-02 9.32365427e-02 + 9.33056973e-02 9.33748978e-02 9.34441438e-02 9.35134347e-02 9.35827701e-02 + 9.36521496e-02 9.37215725e-02 9.37910385e-02 9.38605469e-02 9.39300975e-02 + 9.39996895e-02 9.40693227e-02 9.41389965e-02 9.42087104e-02 9.42784639e-02 + 9.43482566e-02 9.44180880e-02 9.44879576e-02 9.45578649e-02 9.46278095e-02 + 9.46977909e-02 9.47678086e-02 9.48378622e-02 9.49079511e-02 9.49780750e-02 + 9.50482333e-02 9.51184256e-02 9.51886514e-02 9.52589103e-02 9.53292017e-02 + 9.53995254e-02 9.54698806e-02 9.55402671e-02 9.56106844e-02 9.56811320e-02 + 9.57516094e-02 9.58221162e-02 9.58926520e-02 9.59632163e-02 9.60338086e-02 + 9.61044286e-02 9.61750756e-02 9.62457494e-02 9.63164495e-02 9.63871754e-02 + 9.64579266e-02 9.65287028e-02 9.65995035e-02 9.66703283e-02 9.67411766e-02 + 9.68120482e-02 9.68829425e-02 9.69538592e-02 9.70247977e-02 9.70957577e-02 + 9.71667387e-02 9.72377403e-02 9.73087621e-02 9.73798037e-02 9.74508645e-02 + 9.75219443e-02 9.75930426e-02 9.76641589e-02 9.77352928e-02 9.78064440e-02 + 9.78776119e-02 9.79487963e-02 9.80199966e-02 9.80912125e-02 9.81624436e-02 + 9.82336894e-02 9.83049495e-02 9.83762235e-02 9.84475111e-02 9.85188118e-02 + 9.85901251e-02 9.86614508e-02 9.87327884e-02 9.88041375e-02 9.88754977e-02 + 9.89468687e-02 9.90182499e-02 9.90896410e-02 9.91610417e-02 9.92324515e-02 + 9.93038701e-02 9.93752970e-02 9.94467318e-02 9.95181743e-02 9.95896239e-02 + 9.96610804e-02 9.97325432e-02 9.98040122e-02 9.98754867e-02 9.99469666e-02 + 1.00018451e-01 1.00089941e-01 1.00161434e-01 1.00232931e-01 1.00304432e-01 + 1.00375936e-01 1.00447442e-01 1.00518951e-01 1.00590461e-01 1.00661973e-01 + 1.00733487e-01 1.00805001e-01 1.00876516e-01 1.00948030e-01 1.01019545e-01 + 1.01091059e-01 1.01162572e-01 1.01234084e-01 1.01305594e-01 1.01377102e-01 + 1.01448607e-01 1.01520110e-01 1.01591610e-01 1.01663106e-01 1.01734599e-01 + 1.01806088e-01 1.01877572e-01 1.01949051e-01 1.02020525e-01 1.02091994e-01 + 1.02163457e-01 1.02234914e-01 1.02306364e-01 1.02377807e-01 1.02449244e-01 + 1.02520672e-01 1.02592093e-01 1.02663506e-01 1.02734911e-01 1.02806306e-01 + 1.02877693e-01 1.02949070e-01 1.03020437e-01 1.03091794e-01 1.03163141e-01 + 1.03234477e-01 1.03305802e-01 1.03377115e-01 1.03448417e-01 1.03519707e-01 + 1.03590985e-01 1.03662250e-01 1.03733502e-01 1.03804741e-01 1.03875966e-01 + 1.03947178e-01 1.04018375e-01 1.04089558e-01 1.04160726e-01 1.04231879e-01 + 1.04303017e-01 1.04374139e-01 1.04445245e-01 1.04516335e-01 1.04587409e-01 + 1.04658465e-01 1.04729504e-01 1.04800527e-01 1.04871531e-01 1.04942517e-01 + 1.05013485e-01 1.05084435e-01 1.05155365e-01 1.05226277e-01 1.05297169e-01 + 1.05368041e-01 1.05438894e-01 1.05509726e-01 1.05580538e-01 1.05651329e-01 + 1.05722099e-01 1.05792847e-01 1.05863574e-01 1.05934279e-01 1.06004962e-01 + 1.06075622e-01 1.06146260e-01 1.06216875e-01 1.06287467e-01 1.06358035e-01 + 1.06428579e-01 1.06499100e-01 1.06569596e-01 1.06640067e-01 1.06710514e-01 + 1.06780936e-01 1.06851332e-01 1.06921703e-01 1.06992049e-01 1.07062368e-01 + 1.07132661e-01 1.07202927e-01 1.07273167e-01 1.07343379e-01 1.07413565e-01 + 1.07483722e-01 1.07553852e-01 1.07623955e-01 1.07694028e-01 1.07764074e-01 + 1.07834090e-01 1.07904078e-01 1.07974036e-01 1.08043966e-01 1.08113865e-01 + 1.08183735e-01 1.08253574e-01 1.08323383e-01 1.08393162e-01 1.08462910e-01 + 1.08532626e-01 1.08602312e-01 1.08671966e-01 1.08741588e-01 1.08811179e-01 + 1.08880737e-01 1.08950263e-01 1.09019757e-01 1.09089217e-01 1.09158645e-01 + 1.09228040e-01 1.09297401e-01 1.09366728e-01 1.09436022e-01 1.09505281e-01 + 1.09574507e-01 1.09643698e-01 1.09712854e-01 1.09781975e-01 1.09851061e-01 + 1.09920112e-01 1.09989128e-01 1.10058108e-01 1.10127052e-01 1.10195959e-01 + 1.10264831e-01 1.10333666e-01 1.10402465e-01 1.10471226e-01 1.10539951e-01 + 1.10608638e-01 1.10677288e-01 1.10745900e-01 1.10814475e-01 1.10883011e-01 + 1.10951510e-01 1.11019970e-01 1.11088391e-01 1.11156774e-01 1.11225117e-01 + 1.11293422e-01 1.11361687e-01 1.11429913e-01 1.11498100e-01 1.11566246e-01 + 1.11634353e-01 1.11702419e-01 1.11770445e-01 1.11838431e-01 1.11906376e-01 + 1.11974280e-01 1.12042143e-01 1.12109965e-01 1.12177745e-01 1.12245484e-01 + 1.12313182e-01 1.12380837e-01 1.12448451e-01 1.12516022e-01 1.12583551e-01 + 1.12651038e-01 1.12718482e-01 1.12785883e-01 1.12853241e-01 1.12920556e-01 + 1.12987828e-01 1.13055056e-01 1.13122241e-01 1.13189382e-01 1.13256480e-01 + 1.13323533e-01 1.13390542e-01 1.13457507e-01 1.13524427e-01 1.13591303e-01 + 1.13658134e-01 1.13724920e-01 1.13791661e-01 1.13858356e-01 1.13925007e-01 + 1.13991612e-01 1.14058171e-01 1.14124685e-01 1.14191153e-01 1.14257575e-01 + 1.14323950e-01 1.14390280e-01 1.14456562e-01 1.14522799e-01 1.14588988e-01 + 1.14655131e-01 1.14721227e-01 1.14787276e-01 1.14853278e-01 1.14919232e-01 + 1.14985139e-01 1.15050998e-01 1.15116810e-01 1.15182574e-01 1.15248290e-01 + 1.15313957e-01 1.15379577e-01 1.15445148e-01 1.15510671e-01 1.15576146e-01 + 1.15641571e-01 1.15706948e-01 1.15772276e-01 1.15837555e-01 1.15902785e-01 + 1.15967965e-01 1.16033097e-01 1.16098179e-01 1.16163211e-01 1.16228193e-01 + 1.16293126e-01 1.16358009e-01 1.16422842e-01 1.16487625e-01 1.16552357e-01 + 1.16617040e-01 1.16681672e-01 1.16746253e-01 1.16810784e-01 1.16875264e-01 + 1.16939693e-01 1.17004071e-01 1.17068398e-01 1.17132674e-01 1.17196899e-01 + 1.17261073e-01 1.17325195e-01 1.17389266e-01 1.17453285e-01 1.17517252e-01 + 1.17581168e-01 1.17645032e-01 1.17708843e-01 1.17772603e-01 1.17836311e-01 + 1.17899966e-01 1.17963569e-01 1.18027120e-01 1.18090618e-01 1.18154064e-01 + 1.18217457e-01 1.18280797e-01 1.18344084e-01 1.18407319e-01 1.18470500e-01 + 1.18533629e-01 1.18596704e-01 1.18659726e-01 1.18722695e-01 1.18785610e-01 + 1.18848472e-01 1.18911281e-01 1.18974035e-01 1.19036736e-01 1.19099384e-01 + 1.03953624e+00 1.03772749e+00 1.03592023e+00 1.03411445e+00 1.03231016e+00 + 1.03050735e+00 1.02870603e+00 1.02690620e+00 1.02510785e+00 1.02331100e+00 + 1.02151562e+00 1.01972174e+00 1.01792935e+00 1.01613844e+00 1.01434902e+00 + 1.01256110e+00 1.01077466e+00 1.00898971e+00 1.00720626e+00 1.00542429e+00 + 1.00364382e+00 1.00186484e+00 1.00008735e+00 9.98311355e-01 9.96536852e-01 + 9.94763842e-01 9.92992326e-01 9.91222304e-01 9.89453777e-01 9.87686744e-01 + 9.85921207e-01 9.84157165e-01 9.82394619e-01 9.80633570e-01 9.78874017e-01 + 9.77115962e-01 9.75359404e-01 9.73604344e-01 9.71850782e-01 9.70098719e-01 + 9.68348155e-01 9.66599090e-01 9.64851525e-01 9.63105460e-01 9.61360895e-01 + 9.59617832e-01 9.57876269e-01 9.56136208e-01 9.54397649e-01 9.52660593e-01 + 9.50925039e-01 9.49190988e-01 9.47458441e-01 9.45727397e-01 9.43997858e-01 + 9.42269823e-01 9.40543293e-01 9.38818268e-01 9.37094749e-01 9.35372736e-01 + 9.33652230e-01 9.31933230e-01 9.30215737e-01 9.28499752e-01 9.26785274e-01 + 9.25072305e-01 9.23360844e-01 9.21650893e-01 9.19942450e-01 9.18235517e-01 + 9.16530094e-01 9.14826182e-01 9.13123780e-01 9.11422890e-01 9.09723511e-01 + 9.08025644e-01 9.06329289e-01 9.04634446e-01 9.02941117e-01 9.01249300e-01 + 8.99558998e-01 8.97870209e-01 8.96182935e-01 8.94497176e-01 8.92812931e-01 + 8.91130202e-01 8.89448989e-01 8.87769292e-01 8.86091112e-01 8.84414448e-01 + 8.82739302e-01 8.81065673e-01 8.79393562e-01 8.77722970e-01 8.76053896e-01 + 8.74386341e-01 8.72720306e-01 8.71055790e-01 8.69392795e-01 8.67731320e-01 + 8.66071366e-01 8.64412932e-01 8.62756021e-01 8.61100631e-01 8.59446764e-01 + 8.57794419e-01 8.56143597e-01 8.54494298e-01 8.52846523e-01 8.51200272e-01 + 8.49555545e-01 8.47912343e-01 8.46270666e-01 8.44630515e-01 8.42991889e-01 + 8.41354789e-01 8.39719216e-01 8.38085170e-01 8.36452650e-01 8.34821658e-01 + 8.33192195e-01 8.31564259e-01 8.29937852e-01 8.28312973e-01 8.26689624e-01 + 8.25067805e-01 8.23447515e-01 8.21828756e-01 8.20211528e-01 8.18595830e-01 + 8.16981664e-01 8.15369029e-01 8.13757927e-01 8.12148357e-01 8.10540319e-01 + 8.08933815e-01 8.07328844e-01 8.05725406e-01 8.04123503e-01 8.02523135e-01 + 8.00924301e-01 7.99327002e-01 7.97731239e-01 7.96137011e-01 7.94544320e-01 + 7.92953165e-01 7.91363547e-01 7.89775466e-01 7.88188923e-01 7.86603918e-01 + 7.85020450e-01 7.83438522e-01 7.81858132e-01 7.80279281e-01 7.78701970e-01 + 7.77126199e-01 7.75551968e-01 7.73979278e-01 7.72408129e-01 7.70838521e-01 + 7.69270454e-01 7.67703930e-01 7.66138947e-01 7.64575508e-01 7.63013611e-01 + 7.61453258e-01 7.59894448e-01 7.58337182e-01 7.56781460e-01 7.55227283e-01 + 7.53674651e-01 7.52123565e-01 7.50574024e-01 7.49026029e-01 7.47479580e-01 + 7.45934678e-01 7.44391322e-01 7.42849514e-01 7.41309254e-01 7.39770542e-01 + 7.38233378e-01 7.36697762e-01 7.35163696e-01 7.33631179e-01 7.32100211e-01 + 7.30570794e-01 7.29042926e-01 7.27516610e-01 7.25991844e-01 7.24468629e-01 + 7.22946966e-01 7.21426855e-01 7.19908297e-01 7.18391291e-01 7.16875837e-01 + 7.15361937e-01 7.13849591e-01 7.12338798e-01 7.10829560e-01 7.09321876e-01 + 7.07815747e-01 7.06311174e-01 7.04808155e-01 7.03306693e-01 7.01806787e-01 + 7.00308437e-01 6.98811644e-01 6.97316408e-01 6.95822730e-01 6.94330610e-01 + 6.92840047e-01 6.91351043e-01 6.89863598e-01 6.88377712e-01 6.86893385e-01 + 6.85410618e-01 6.83929411e-01 6.82449765e-01 6.80971679e-01 6.79495154e-01 + 6.78020190e-01 6.76546789e-01 6.75074949e-01 6.73604671e-01 6.72135956e-01 + 6.70668804e-01 6.69203215e-01 6.67739189e-01 6.66276728e-01 6.64815830e-01 + 6.63356498e-01 6.61898730e-01 6.60442527e-01 6.58987889e-01 6.57534818e-01 + 6.56083312e-01 6.54633373e-01 6.53185001e-01 6.51738195e-01 6.50292957e-01 + 6.48849287e-01 6.47407184e-01 6.45966650e-01 6.44527685e-01 6.43090288e-01 + 6.41654460e-01 6.40220202e-01 6.38787514e-01 6.37356396e-01 6.35926849e-01 + 6.34498872e-01 6.33072467e-01 6.31647633e-01 6.30224370e-01 6.28802680e-01 + 6.27382561e-01 6.25964016e-01 6.24547043e-01 6.23131644e-01 6.21717818e-01 + 6.20305566e-01 6.18894889e-01 6.17485785e-01 6.16078257e-01 6.14672303e-01 + 6.13267925e-01 6.11865123e-01 6.10463897e-01 6.09064247e-01 6.07666173e-01 + 6.06269677e-01 6.04874758e-01 6.03481416e-01 6.02089652e-01 6.00699467e-01 + 5.99310859e-01 5.97923831e-01 5.96538381e-01 5.95154511e-01 5.93772221e-01 + 5.92391510e-01 5.91012380e-01 5.89634830e-01 5.88258861e-01 5.86884473e-01 + 5.85511667e-01 5.84140442e-01 5.82770800e-01 5.81402740e-01 5.80036262e-01 + 5.78671367e-01 5.77308056e-01 5.75946328e-01 5.74586184e-01 5.73227624e-01 + 5.71870649e-01 5.70515258e-01 5.69161453e-01 5.67809232e-01 5.66458597e-01 + 5.65109548e-01 5.63762086e-01 5.62416210e-01 5.61071920e-01 5.59729218e-01 + 5.58388103e-01 5.57048576e-01 5.55710636e-01 5.54374285e-01 5.53039523e-01 + 5.51706349e-01 5.50374764e-01 5.49044769e-01 5.47716364e-01 5.46389548e-01 + 5.45064323e-01 5.43740689e-01 5.42418645e-01 5.41098192e-01 5.39779331e-01 + 5.38462062e-01 5.37146385e-01 5.35832299e-01 5.34519807e-01 5.33208907e-01 + 5.31899601e-01 5.30591888e-01 5.29285769e-01 5.27981244e-01 5.26678313e-01 + 5.25376977e-01 5.24077235e-01 5.22779089e-01 5.21482538e-01 5.20187583e-01 + 5.18894224e-01 5.17602461e-01 5.16312295e-01 5.15023726e-01 5.13736754e-01 + 5.12451379e-01 5.11167602e-01 5.09885423e-01 5.08604843e-01 5.07325861e-01 + 5.06048477e-01 5.04772693e-01 5.03498508e-01 5.02225923e-01 5.00954938e-01 + 4.99685553e-01 4.98417769e-01 4.97151585e-01 4.95887003e-01 4.94624021e-01 + 4.93362642e-01 4.92102864e-01 4.90844689e-01 4.89588116e-01 4.88333145e-01 + 4.87079778e-01 4.85828014e-01 4.84577853e-01 4.83329297e-01 4.82082344e-01 + 4.80836996e-01 4.79593252e-01 4.78351114e-01 4.77110580e-01 4.75871652e-01 + 4.74634330e-01 4.73398614e-01 4.72164504e-01 4.70932001e-01 4.69701104e-01 + 4.68471815e-01 4.67244132e-01 4.66018058e-01 4.64793591e-01 4.63570733e-01 + 4.62349483e-01 4.61129842e-01 4.59911810e-01 4.58695387e-01 4.57480573e-01 + 4.56267369e-01 4.55055776e-01 4.53845792e-01 4.52637419e-01 4.51430658e-01 + 4.50225507e-01 4.49021967e-01 4.47820039e-01 4.46619724e-01 4.45421020e-01 + 4.44223928e-01 4.43028450e-01 4.41834584e-01 4.40642332e-01 4.39451693e-01 + 4.38262668e-01 4.37075256e-01 4.35889459e-01 4.34705277e-01 4.33522709e-01 + 4.32341757e-01 4.31162420e-01 4.29984698e-01 4.28808592e-01 4.27634102e-01 + 4.26461229e-01 4.25289972e-01 4.24120332e-01 4.22952310e-01 4.21785904e-01 + 4.20621116e-01 4.19457946e-01 4.18296395e-01 4.17136461e-01 4.15978147e-01 + 4.14821451e-01 4.13666374e-01 4.12512917e-01 4.11361080e-01 4.10210862e-01 + 4.09062265e-01 4.07915288e-01 4.06769932e-01 4.05626197e-01 4.04484083e-01 + 4.03343590e-01 4.02204719e-01 4.01067470e-01 3.99931844e-01 3.98797839e-01 + 3.97665458e-01 3.96534699e-01 3.95405564e-01 3.94278052e-01 3.93152164e-01 + 3.92027900e-01 3.90905259e-01 3.89784244e-01 3.88664853e-01 3.87547087e-01 + 3.86430946e-01 3.85316431e-01 3.84203541e-01 3.83092278e-01 3.81982640e-01 + 3.80874629e-01 3.79768245e-01 3.78663487e-01 3.77560357e-01 3.76458854e-01 + 3.75358979e-01 3.74260731e-01 3.73164112e-01 3.72069121e-01 3.70975759e-01 + 3.69884025e-01 3.68793921e-01 3.67705446e-01 3.66618601e-01 3.65533385e-01 + 3.64449799e-01 3.63367844e-01 3.62287520e-01 3.61208826e-01 3.60131763e-01 + 3.59056331e-01 3.57982531e-01 3.56910363e-01 3.55839826e-01 3.54770922e-01 + 3.53703650e-01 3.52638011e-01 3.51574005e-01 3.50511632e-01 3.49450892e-01 + 3.48391786e-01 3.47334314e-01 3.46278476e-01 3.45224272e-01 3.44171703e-01 + 3.43120769e-01 3.42071469e-01 3.41023805e-01 3.39977776e-01 3.38933384e-01 + 3.37890627e-01 3.36849506e-01 3.35810021e-01 3.34772174e-01 3.33735963e-01 + 3.32701389e-01 3.31668453e-01 3.30637154e-01 3.29607493e-01 3.28579470e-01 + 3.27553085e-01 3.26528339e-01 3.25505231e-01 3.24483762e-01 3.23463933e-01 + 3.22445743e-01 3.21429192e-01 3.20414282e-01 3.19401011e-01 3.18389381e-01 + 3.17379391e-01 3.16371042e-01 3.15364334e-01 3.14359267e-01 3.13355841e-01 + 3.12354057e-01 3.11353915e-01 3.10355415e-01 3.09358557e-01 3.08363342e-01 + 3.07369770e-01 3.06377840e-01 3.05387554e-01 3.04398911e-01 3.03411912e-01 + 3.02426556e-01 3.01442845e-01 3.00460777e-01 2.99480355e-01 2.98501577e-01 + 2.97524444e-01 2.96548956e-01 2.95575113e-01 2.94602916e-01 2.93632365e-01 + 2.92663460e-01 2.91696201e-01 2.90730589e-01 2.89766623e-01 2.88804304e-01 + 2.87843632e-01 2.86884607e-01 2.85927230e-01 2.84971501e-01 2.84017420e-01 + 2.83064986e-01 2.82114201e-01 2.81165065e-01 2.80217578e-01 2.79271739e-01 + 2.78327550e-01 2.77385010e-01 2.76444119e-01 2.75504879e-01 2.74567288e-01 + 2.73631348e-01 2.72697059e-01 2.71764419e-01 2.70833431e-01 2.69904094e-01 + 2.68976408e-01 2.68050374e-01 2.67125991e-01 2.66203261e-01 2.65282182e-01 + 2.64362756e-01 2.63444982e-01 2.62528861e-01 2.61614393e-01 2.60701578e-01 + 2.59790416e-01 2.58880908e-01 2.57973054e-01 2.57066853e-01 2.56162307e-01 + 2.55259415e-01 2.54358178e-01 2.53458595e-01 2.52560668e-01 2.51664395e-01 + 2.50769778e-01 2.49876816e-01 2.48985511e-01 2.48095861e-01 2.47207867e-01 + 2.46321530e-01 2.45436849e-01 2.44553825e-01 2.43672457e-01 2.42792747e-01 + 2.41914695e-01 2.41038300e-01 2.40163562e-01 2.39290483e-01 2.38419061e-01 + 2.37549298e-01 2.36681193e-01 2.35814748e-01 2.34949961e-01 2.34086833e-01 + 2.33225364e-01 2.32365555e-01 2.31507405e-01 2.30650916e-01 2.29796086e-01 + 2.28942916e-01 2.28091407e-01 2.27241559e-01 2.26393372e-01 2.25546845e-01 + 2.24701980e-01 2.23858776e-01 2.23017233e-01 2.22177352e-01 2.21339134e-01 + 2.20502577e-01 2.19667682e-01 2.18834451e-01 2.18002881e-01 2.17172975e-01 + 2.16344732e-01 2.15518152e-01 2.14693235e-01 2.13869982e-01 2.13048393e-01 + 2.12228468e-01 2.11410207e-01 2.10593610e-01 2.09778678e-01 2.08965410e-01 + 2.08153807e-01 2.07343870e-01 2.06535598e-01 2.05728991e-01 2.04924049e-01 + 2.04120774e-01 2.03319164e-01 2.02519221e-01 2.01720944e-01 2.00924334e-01 + 2.00129390e-01 1.99336113e-01 1.98544503e-01 1.97754560e-01 1.96966285e-01 + 1.96179677e-01 1.95394737e-01 1.94611465e-01 1.93829861e-01 1.93049925e-01 + 1.92271658e-01 1.91495059e-01 1.90720129e-01 1.89946869e-01 1.89175277e-01 + 1.88405354e-01 1.87637101e-01 1.86870518e-01 1.86105605e-01 1.85342361e-01 + 1.84580788e-01 1.83820885e-01 1.83062653e-01 1.82306091e-01 1.81551200e-01 + 1.80797980e-01 1.80046431e-01 1.79296554e-01 1.78548348e-01 1.77801814e-01 + 1.77056952e-01 1.76313762e-01 1.75572244e-01 1.74832398e-01 1.74094225e-01 + 1.73357725e-01 1.72622897e-01 1.71889743e-01 1.71158261e-01 1.70428453e-01 + 1.69700319e-01 1.68973858e-01 1.68249071e-01 1.67525958e-01 1.66804519e-01 + 1.66084755e-01 1.65366665e-01 1.64650249e-01 1.63935509e-01 1.63222443e-01 + 1.62511053e-01 1.61801338e-01 1.61093298e-01 1.60386934e-01 1.59682246e-01 + 1.58979233e-01 1.58277897e-01 1.57578237e-01 1.56880253e-01 1.56183946e-01 + 1.55489316e-01 1.54796362e-01 1.54105086e-01 1.53415486e-01 1.52727564e-01 + 1.52041320e-01 1.51356753e-01 1.50673864e-01 1.49992653e-01 1.49313120e-01 + 1.48635265e-01 1.47959088e-01 1.47284591e-01 1.46611771e-01 1.45940631e-01 + 1.45271170e-01 1.44603388e-01 1.43937285e-01 1.43272862e-01 1.42610118e-01 + 1.41949054e-01 1.41289670e-01 1.40631966e-01 1.39975942e-01 1.39321598e-01 + 1.38668935e-01 1.38017953e-01 1.37368652e-01 1.36721031e-01 1.36075091e-01 + 1.35430833e-01 1.34788256e-01 1.34147361e-01 1.33508147e-01 1.32870615e-01 + 1.32234765e-01 1.31600597e-01 1.30968111e-01 1.30337308e-01 1.29708187e-01 + 1.29080749e-01 1.28454994e-01 1.27830921e-01 1.27208532e-01 1.26587826e-01 + 1.25968803e-01 1.25351464e-01 1.24735808e-01 1.24121836e-01 1.23509548e-01 + 1.22898944e-01 1.22290024e-01 1.21682789e-01 1.21077238e-01 1.20473372e-01 + 1.19871190e-01 1.19270693e-01 1.18671881e-01 1.18074755e-01 1.17479313e-01 + 1.16885558e-01 1.16293487e-01 1.15703102e-01 1.15114403e-01 1.14527390e-01 + 1.13942064e-01 1.13358423e-01 1.12776468e-01 1.12196200e-01 1.11617619e-01 + 1.11040725e-01 1.10465517e-01 1.09891996e-01 1.09320162e-01 1.08750016e-01 + 1.08181557e-01 1.07614785e-01 1.07049701e-01 1.06486305e-01 1.05924597e-01 + 1.05364577e-01 1.04806244e-01 1.04249601e-01 1.03694645e-01 1.03141378e-01 + 1.02589800e-01 1.02039910e-01 1.01491709e-01 1.00945198e-01 1.00400375e-01 + 9.98572416e-02 9.93157976e-02 9.87760431e-02 9.82379782e-02 9.77016030e-02 + 9.71669178e-02 9.66339224e-02 9.61026172e-02 9.55730022e-02 9.50450776e-02 + 9.45188434e-02 9.39942997e-02 9.34714468e-02 9.29502847e-02 9.24308135e-02 + 9.19130333e-02 9.13969443e-02 9.08825466e-02 9.03698403e-02 8.98588255e-02 + 8.93495023e-02 8.88418708e-02 8.83359312e-02 8.78316836e-02 8.73291281e-02 + 8.68282647e-02 8.63290937e-02 8.58316150e-02 8.53358290e-02 8.48417355e-02 + 8.43493348e-02 8.38586270e-02 8.33696121e-02 8.28822904e-02 8.23966618e-02 + 8.19127265e-02 8.14304847e-02 8.09499364e-02 8.04710817e-02 7.99939207e-02 + 7.95184537e-02 7.90446805e-02 7.85726014e-02 7.81022165e-02 7.76335259e-02 + 7.71665296e-02 7.67012279e-02 7.62376207e-02 7.57757082e-02 7.53154905e-02 + 7.48569677e-02 7.44001400e-02 7.39450073e-02 7.34915699e-02 7.30398277e-02 + 7.25897810e-02 7.21414298e-02 7.16947743e-02 7.12498144e-02 7.08065504e-02 + 7.03649822e-02 6.99251102e-02 6.94869342e-02 6.90504544e-02 6.86156710e-02 + 6.81825840e-02 6.77511935e-02 6.73214996e-02 6.68935024e-02 6.64672020e-02 + 6.60425985e-02 6.56196920e-02 6.51984826e-02 6.47789704e-02 6.43611555e-02 + 6.39450379e-02 6.35306178e-02 6.31178953e-02 6.27068704e-02 6.22975433e-02 + 6.18899141e-02 6.14839827e-02 6.10797494e-02 6.06772142e-02 6.02763772e-02 + 5.98772385e-02 5.94797982e-02 5.90840564e-02 5.86900131e-02 5.82976685e-02 + 5.79070227e-02 5.75180757e-02 5.71308276e-02 5.67452785e-02 5.63614285e-02 + 5.59792777e-02 5.55988261e-02 5.52200739e-02 5.48430212e-02 5.44676679e-02 + 5.40940143e-02 5.37220604e-02 5.33518062e-02 5.29832520e-02 5.26163976e-02 + 5.22512433e-02 5.18877891e-02 5.15260351e-02 5.11659814e-02 5.08076280e-02 + 5.04509751e-02 5.00960227e-02 4.97427708e-02 4.93912197e-02 4.90413693e-02 + 4.86932198e-02 4.83467711e-02 4.80020235e-02 4.76589769e-02 4.73176315e-02 + 4.69779873e-02 4.66400444e-02 4.63038029e-02 4.59692628e-02 4.56364243e-02 + 4.53052874e-02 4.49758521e-02 4.46481186e-02 4.43220870e-02 4.39977572e-02 + 4.36751294e-02 4.33542037e-02 4.30349801e-02 4.27174587e-02 4.24016395e-02 + 4.20875227e-02 4.17751083e-02 4.14643964e-02 4.11553870e-02 4.08480802e-02 + 4.05424762e-02 4.02385749e-02 3.99363764e-02 3.96358808e-02 3.93370881e-02 + 3.90399985e-02 3.87446120e-02 3.84509287e-02 3.81589486e-02 3.78686718e-02 + 3.75800983e-02 3.72932283e-02 3.70080618e-02 3.67245988e-02 3.64428394e-02 + 3.61627838e-02 3.58844318e-02 3.56077837e-02 3.53328395e-02 3.50595992e-02 + 3.47880629e-02 3.45182306e-02 3.42501025e-02 3.39836786e-02 3.37189589e-02 + 3.34559435e-02 3.31946324e-02 3.29350258e-02 3.26771236e-02 3.24209260e-02 + 3.21664330e-02 3.19136446e-02 3.16625610e-02 3.14131821e-02 3.11655080e-02 + 3.09195388e-02 3.06752746e-02 3.04327153e-02 3.01918611e-02 2.99527120e-02 + 2.97152680e-02 2.94795292e-02 2.92454957e-02 2.90131675e-02 2.87825447e-02 + 2.85536273e-02 2.83264153e-02 2.81009089e-02 2.78771081e-02 2.76550128e-02 + 2.74346233e-02 2.72159395e-02 2.69989614e-02 2.67836892e-02 2.65701228e-02 + 2.63582623e-02 2.61481079e-02 2.59396594e-02 2.57329170e-02 2.55278807e-02 + 2.53245505e-02 2.51229266e-02 2.49230089e-02 2.47247975e-02 2.45282924e-02 + 2.43334937e-02 2.41404014e-02 2.39490156e-02 2.37593363e-02 2.35713636e-02 + 2.33850975e-02 2.32005380e-02 2.30176851e-02 2.28365390e-02 2.26570997e-02 + 2.24793672e-02 2.23033415e-02 2.21290227e-02 2.19564108e-02 2.17855059e-02 + 2.16163080e-02 2.14488171e-02 2.12830333e-02 2.11189566e-02 2.09565871e-02 + 2.07959248e-02 2.06369696e-02 2.04797218e-02 2.03241812e-02 2.01703480e-02 + 2.00182221e-02 1.98678037e-02 1.97190927e-02 1.95720891e-02 1.94267931e-02 + 1.92832045e-02 1.91413236e-02 1.90011502e-02 1.88626845e-02 1.87259265e-02 + 1.85908761e-02 1.84575335e-02 1.83258986e-02 1.81959715e-02 1.80677522e-02 + 1.79412408e-02 1.78164372e-02 1.76933415e-02 1.75719538e-02 1.74522740e-02 + 1.73343022e-02 1.72180384e-02 1.71034827e-02 1.69906350e-02 1.68794954e-02 + 1.67700639e-02 1.66623405e-02 1.65563253e-02 1.64520183e-02 1.63494195e-02 + 1.62485289e-02 1.61493466e-02 1.60518726e-02 1.59561068e-02 1.58620494e-02 + 1.57697003e-02 1.56790596e-02 1.55901273e-02 1.55029034e-02 1.54173879e-02 + 1.53335808e-02 1.52514822e-02 1.51710921e-02 1.50924105e-02 1.50154374e-02 + 1.49401728e-02 1.48666168e-02 1.47947694e-02 1.47246305e-02 1.46562002e-02 + 1.45894786e-02 1.45244656e-02 1.44611612e-02 1.43995655e-02 1.43396785e-02 + 1.42815001e-02 1.42250305e-02 1.41702695e-02 1.41172173e-02 1.40658738e-02 + 1.40162391e-02 1.39683132e-02 1.39220960e-02 1.38775876e-02 1.38347880e-02 + 1.37936971e-02 1.37543151e-02 1.37166420e-02 1.36806776e-02 1.36464221e-02 + 1.36138754e-02 1.35830376e-02 1.35539086e-02 1.35264885e-02 1.35007773e-02 + 1.34767750e-02 1.34544815e-02 1.34338969e-02 1.34150212e-02 1.33978544e-02 + 1.33823966e-02 1.33686476e-02 1.33566075e-02 1.33462763e-02 1.33376541e-02 + 1.33307407e-02 1.33255363e-02 1.33220408e-02 1.33202542e-02 1.33201765e-02 + 1.33218078e-02 1.33251480e-02 1.33301970e-02 1.33369550e-02 1.33454220e-02 + 1.33555978e-02 1.33674825e-02 1.33810762e-02 1.33963787e-02 1.34133902e-02 + 1.34321105e-02 1.34525397e-02 1.34746779e-02 1.34985249e-02 1.35240808e-02 + 1.35513455e-02 1.35803192e-02 1.36110016e-02 1.36433930e-02 1.36774932e-02 + 1.37133022e-02 1.37508200e-02 1.37900467e-02 1.38309822e-02 1.38736265e-02 + 1.39179796e-02 1.39640414e-02 1.40118121e-02 1.40612914e-02 1.41124796e-02 + 1.41653765e-02 1.42199821e-02 1.42762964e-02 1.43343194e-02 1.43940512e-02 + 1.44554916e-02 1.45186406e-02 1.45834983e-02 1.46500646e-02 1.47183396e-02 + 1.47883231e-02 1.48600153e-02 1.49334160e-02 1.50085252e-02 1.50853430e-02 + 1.51638693e-02 1.52441041e-02 1.53260474e-02 1.54096992e-02 1.54950594e-02 + 1.55821280e-02 1.56709051e-02 1.57613905e-02 1.58535843e-02 1.59474864e-02 + 1.60430969e-02 1.61404156e-02 1.62394427e-02 1.63401780e-02 1.64426215e-02 + 1.65467732e-02 1.66526331e-02 1.67602012e-02 1.68694775e-02 1.69804618e-02 + 1.70931542e-02 1.72075547e-02 1.73236633e-02 1.74414798e-02 1.75610043e-02 + 1.76822368e-02 1.78051772e-02 1.79298256e-02 1.80561818e-02 1.81842458e-02 + 1.83140177e-02 1.84454973e-02 1.85786847e-02 1.87135798e-02 1.88501827e-02 + 1.89884931e-02 1.91285113e-02 1.92702370e-02 1.94136703e-02 1.95588111e-02 + 1.97056595e-02 1.98542153e-02 2.00044786e-02 2.01564492e-02 2.03101272e-02 + 2.04655126e-02 2.06226053e-02 2.07814052e-02 2.09419123e-02 2.11041267e-02 + 2.12680482e-02 2.14336768e-02 2.16010125e-02 2.17700553e-02 2.19408050e-02 + 2.21132617e-02 2.22874254e-02 2.24632959e-02 2.26408733e-02 2.28201575e-02 + 2.30011484e-02 2.31838461e-02 2.33682505e-02 2.35543615e-02 2.37421791e-02 + 2.39317033e-02 2.41229339e-02 2.43158711e-02 2.45105147e-02 2.47068647e-02 + 2.49049210e-02 2.51046836e-02 2.53061524e-02 2.55093275e-02 2.57142087e-02 + 2.59207960e-02 2.61290894e-02 2.63390888e-02 2.65507942e-02 2.67642055e-02 + 2.69793227e-02 2.71961457e-02 2.74146744e-02 2.76349090e-02 2.78568491e-02 + 2.80804949e-02 2.83058463e-02 2.85329032e-02 2.87616656e-02 2.89921334e-02 + 2.92243066e-02 2.94581851e-02 2.96937689e-02 2.99310578e-02 3.01700520e-02 + 3.04107512e-02 3.06531555e-02 3.08972648e-02 3.11430790e-02 3.13905981e-02 + 3.16398220e-02 3.18907507e-02 3.21433841e-02 3.23977222e-02 3.26537648e-02 + 3.29115120e-02 3.31709637e-02 3.34321199e-02 3.36949803e-02 3.39595451e-02 + 3.42258142e-02 3.44937874e-02 3.47634647e-02 3.50348461e-02 3.53079315e-02 + 3.55827209e-02 3.58592141e-02 3.61374112e-02 3.64173120e-02 3.66989165e-02 + 3.69822246e-02 3.72672363e-02 3.75539515e-02 3.78423701e-02 3.81324920e-02 + 3.84243173e-02 3.87178458e-02 3.90130775e-02 3.93100123e-02 3.96086502e-02 + 3.99089910e-02 4.02110347e-02 4.05147812e-02 4.08202305e-02 4.11273825e-02 + 4.14362371e-02 4.17467942e-02 4.20590539e-02 4.23730160e-02 4.26886804e-02 + 4.30060471e-02 4.33251159e-02 4.36458870e-02 4.39683600e-02 4.42925351e-02 + 4.46184120e-02 4.49459908e-02 4.52752714e-02 4.56062536e-02 4.59389375e-02 + 4.62733229e-02 4.66094097e-02 4.69471980e-02 4.72866875e-02 4.76278783e-02 + 4.79707703e-02 4.83153633e-02 4.86616573e-02 4.90096522e-02 4.93593480e-02 + 4.97107446e-02 5.00638418e-02 5.04186396e-02 5.07751380e-02 5.11333368e-02 + 5.14932360e-02 5.18548354e-02 5.22181351e-02 5.25831349e-02 5.29498347e-02 + 5.33182344e-02 5.36883341e-02 5.40601335e-02 5.44336326e-02 5.48088313e-02 + 5.51857296e-02 5.55643273e-02 5.59446244e-02 5.63266207e-02 5.67103163e-02 + 5.70957109e-02 5.74828046e-02 5.78715972e-02 5.82620886e-02 5.86542788e-02 + 5.90481677e-02 5.94437551e-02 5.98410410e-02 6.02400253e-02 6.06407080e-02 + 6.10430888e-02 6.14471678e-02 6.18529447e-02 6.22604197e-02 6.26695925e-02 + 6.30804630e-02 6.34930312e-02 6.39072970e-02 6.43232602e-02 6.47409209e-02 + 6.51602788e-02 6.55813340e-02 6.60040862e-02 6.64285354e-02 6.68546816e-02 + 6.72825245e-02 6.77120642e-02 6.81433005e-02 6.85762333e-02 6.90108625e-02 + 6.94471881e-02 6.98852099e-02 7.03249278e-02 7.07663417e-02 7.12094516e-02 + 7.16542573e-02 7.21007588e-02 7.25489558e-02 7.29988484e-02 7.34504365e-02 + 7.39037198e-02 7.43586984e-02 7.48153721e-02 7.52737408e-02 7.57338044e-02 + 7.61955628e-02 7.66590160e-02 7.71241637e-02 7.75910059e-02 7.80595425e-02 + 7.85297734e-02 7.90016985e-02 7.94753177e-02 7.99506308e-02 8.04276378e-02 + 8.09063385e-02 8.13867329e-02 8.18688208e-02 8.23526021e-02 8.28380768e-02 + 8.33252446e-02 8.38141056e-02 8.43046595e-02 8.47969063e-02 8.52908459e-02 + 8.57864782e-02 8.62838029e-02 8.67828201e-02 8.72835297e-02 8.77859314e-02 + 8.82900252e-02 8.87958110e-02 8.93032887e-02 8.98124581e-02 9.03233191e-02 + 9.08358717e-02 9.13501157e-02 9.18660509e-02 9.23836774e-02 9.29029949e-02 + 9.34240033e-02 9.39467025e-02 9.44710925e-02 9.49971730e-02 9.55249440e-02 + 9.60544054e-02 9.65855570e-02 9.71183987e-02 9.76529303e-02 9.81891519e-02 + 9.87270632e-02 9.92666641e-02 9.98079545e-02 1.00350934e-01 1.00895603e-01 + 1.01441962e-01 1.01990009e-01 1.02539745e-01 1.03091170e-01 1.03644283e-01 + 1.04199085e-01 1.04755576e-01 1.05313754e-01 1.05873621e-01 1.06435176e-01 + 1.06998419e-01 1.07563349e-01 1.08129968e-01 1.08698273e-01 1.09268266e-01 + 1.09839947e-01 1.10413314e-01 1.10988368e-01 1.11565110e-01 1.12143538e-01 + 1.12723652e-01 1.13305453e-01 1.13888941e-01 1.14474115e-01 1.15060974e-01 + 1.15649520e-01 1.16239751e-01 1.16831669e-01 1.17425271e-01 1.18020560e-01 + 1.18617533e-01 1.19216192e-01 1.19816535e-01 1.20418564e-01 1.21022277e-01 + 1.21627675e-01 1.22234757e-01 1.22843524e-01 1.23453975e-01 1.24066109e-01 + 1.24679928e-01 1.25295431e-01 1.25912617e-01 1.26531487e-01 1.27152040e-01 + 1.27774276e-01 1.28398196e-01 1.29023798e-01 1.29651083e-01 1.30280051e-01 + 1.30910702e-01 1.31543034e-01 1.32177050e-01 1.32812747e-01 1.33450126e-01 + 1.34089187e-01 1.34729929e-01 1.35372353e-01 1.36016459e-01 1.36662246e-01 + 1.37309713e-01 1.37958862e-01 1.38609692e-01 1.39262202e-01 1.39916393e-01 + 1.40572264e-01 1.41229815e-01 1.41889046e-01 1.42549958e-01 1.43212549e-01 + 1.43876819e-01 1.44542770e-01 1.45210399e-01 1.45879708e-01 1.46550695e-01 + 1.47223362e-01 1.47897707e-01 1.48573731e-01 1.49251433e-01 1.49930814e-01 + 1.50611872e-01 1.51294609e-01 1.51979023e-01 1.52665115e-01 1.53352885e-01 + 1.54042332e-01 1.54733456e-01 1.55426257e-01 1.56120735e-01 1.56816890e-01 + 1.57514721e-01 1.58214229e-01 1.58915413e-01 1.59618273e-01 1.60322809e-01 + 1.61029020e-01 1.61736908e-01 1.62446471e-01 1.63157709e-01 1.63870622e-01 + 1.64585210e-01 1.65301473e-01 1.66019411e-01 1.66739023e-01 1.67460310e-01 + 1.68183271e-01 1.68907906e-01 1.69634214e-01 1.70362197e-01 1.71091853e-01 + 1.71823182e-01 1.72556184e-01 1.73290860e-01 1.74027208e-01 1.74765229e-01 + 1.75504923e-01 1.76246289e-01 1.76989327e-01 1.77734037e-01 1.78480419e-01 + 1.79228473e-01 1.79978199e-01 1.80729595e-01 1.81482663e-01 1.82237402e-01 + 1.82993812e-01 1.83751893e-01 1.84511644e-01 1.85273065e-01 1.86036157e-01 + 1.86800919e-01 1.87567350e-01 1.88335451e-01 1.89105222e-01 1.89876662e-01 + 1.90649771e-01 1.91424549e-01 1.92200996e-01 1.92979112e-01 1.93758896e-01 + 1.94540348e-01 1.95323469e-01 1.96108257e-01 1.96894713e-01 1.97682837e-01 + 1.98472628e-01 1.99264087e-01 2.00057212e-01 2.00852004e-01 2.01648463e-01 + 2.02446589e-01 2.03246381e-01 2.04047839e-01 2.04850963e-01 2.05655753e-01 + 2.06462208e-01 2.07270329e-01 2.08080115e-01 2.08891567e-01 2.09704683e-01 + 2.10519464e-01 2.11335909e-01 2.12154019e-01 2.12973793e-01 2.13795231e-01 + 2.14618333e-01 2.15443098e-01 2.16269527e-01 2.17097619e-01 2.17927374e-01 + 2.18758792e-01 2.19591873e-01 2.20426616e-01 2.21263022e-01 2.22101090e-01 + 2.22940819e-01 2.23782211e-01 2.24625264e-01 2.25469978e-01 2.26316354e-01 + 2.27164390e-01 2.28014088e-01 2.28865446e-01 2.29718464e-01 2.30573143e-01 + 2.31429482e-01 2.32287480e-01 2.33147139e-01 2.34008457e-01 2.34871434e-01 + 2.35736070e-01 2.36602365e-01 2.37470319e-01 2.38339931e-01 2.39211202e-01 + 2.40084131e-01 2.40958717e-01 2.41834962e-01 2.42712864e-01 2.43592423e-01 + 2.44473640e-01 2.45356513e-01 2.46241044e-01 2.47127230e-01 2.48015074e-01 + 2.48904573e-01 2.49795728e-01 2.50688539e-01 2.51583006e-01 2.52479128e-01 + 2.53376905e-01 2.54276337e-01 2.55177424e-01 2.56080166e-01 2.56984562e-01 + 2.57890612e-01 2.58798316e-01 2.59707674e-01 2.60618685e-01 2.61531350e-01 + 2.62445667e-01 2.63361638e-01 2.64279262e-01 2.65198538e-01 2.66119466e-01 + 2.67042047e-01 2.67966279e-01 2.68892164e-01 2.69819699e-01 2.70748886e-01 + 2.71679724e-01 2.72612213e-01 2.73546353e-01 2.74482143e-01 2.75419584e-01 + 2.76358674e-01 2.77299415e-01 2.78241805e-01 2.79185844e-01 2.80131533e-01 + 2.81078870e-01 2.82027857e-01 2.82978492e-01 2.83930775e-01 2.84884707e-01 + 2.85840287e-01 2.86797514e-01 2.87756389e-01 2.88716911e-01 2.89679080e-01 + 2.90642896e-01 2.91608359e-01 2.92575468e-01 2.93544224e-01 2.94514625e-01 + 2.95486673e-01 2.96460366e-01 2.97435704e-01 2.98412687e-01 2.99391316e-01 + 3.00371589e-01 3.01353507e-01 3.02337069e-01 3.03322275e-01 3.04309125e-01 + 3.05297618e-01 3.06287755e-01 3.07279535e-01 3.08272958e-01 3.09268024e-01 + 3.10264733e-01 3.11263084e-01 3.12263076e-01 3.13264711e-01 3.14267987e-01 + 3.15272905e-01 3.16279464e-01 3.17287664e-01 3.18297505e-01 3.19308986e-01 + 3.20322108e-01 3.21336869e-01 3.22353271e-01 3.23371312e-01 3.24390992e-01 + 3.25412312e-01 3.26435271e-01 3.27459868e-01 3.28486104e-01 3.29513978e-01 + 3.30543490e-01 3.31574640e-01 3.32607428e-01 3.33641852e-01 3.34677914e-01 + 3.35715613e-01 3.36754949e-01 3.37795921e-01 3.38838529e-01 3.39882774e-01 + 3.40928653e-01 3.41976169e-01 3.43025320e-01 3.44076105e-01 3.45128526e-01 + 3.46182581e-01 3.47238271e-01 3.48295594e-01 3.49354552e-01 3.50415143e-01 + 3.51477368e-01 3.52541225e-01 3.53606716e-01 3.54673839e-01 3.55742595e-01 + 3.56812983e-01 3.57885003e-01 3.58958655e-01 3.60033939e-01 3.61110853e-01 + 3.62189399e-01 3.63269575e-01 3.64351382e-01 3.65434820e-01 3.66519887e-01 + 3.67606584e-01 3.68694911e-01 3.69784868e-01 3.70876453e-01 3.71969667e-01 + 3.73064510e-01 3.74160981e-01 3.75259081e-01 3.76358808e-01 3.77460163e-01 + 3.78563145e-01 3.79667755e-01 3.80773992e-01 3.81881855e-01 3.82991344e-01 + 3.84102460e-01 3.85215202e-01 3.86329570e-01 3.87445563e-01 3.88563181e-01 + 3.89682424e-01 3.90803292e-01 3.91925784e-01 3.93049901e-01 3.94175642e-01 + 3.95303006e-01 3.96431994e-01 3.97562605e-01 3.98694839e-01 3.99828696e-01 + 4.00964175e-01 4.02101276e-01 4.03240000e-01 4.04380345e-01 4.05522312e-01 + 4.06665899e-01 4.07811108e-01 4.08957938e-01 4.10106388e-01 4.11256458e-01 + 4.12408148e-01 4.13561458e-01 4.14716388e-01 4.15872936e-01 4.17031104e-01 + 4.18190890e-01 4.19352295e-01 4.20515317e-01 4.21679958e-01 4.22846216e-01 + 4.24014092e-01 4.25183585e-01 4.26354695e-01 4.27527421e-01 4.28701764e-01 + 4.29877723e-01 4.31055298e-01 4.32234488e-01 4.33415294e-01 4.34597715e-01 + 4.35781751e-01 4.36967401e-01 4.38154665e-01 4.39343544e-01 4.40534036e-01 + 4.41726142e-01 4.42919861e-01 4.44115193e-01 4.45312138e-01 4.46510695e-01 + 4.47710864e-01 4.48912645e-01 4.50116038e-01 4.51321043e-01 4.52527658e-01 + 4.53735885e-01 4.54945722e-01 4.56157169e-01 4.57370226e-01 4.58584894e-01 + 4.59801170e-01 4.61019056e-01 4.62238551e-01 4.63459655e-01 4.64682367e-01 + 4.65906688e-01 4.67132616e-01 4.68360152e-01 4.69589295e-01 4.70820046e-01 + 4.72052403e-01 4.73286367e-01 4.74521937e-01 4.75759113e-01 4.76997895e-01 + 4.78238283e-01 4.79480276e-01 4.80723873e-01 4.81969076e-01 4.83215882e-01 + 4.84464293e-01 4.85714308e-01 4.86965926e-01 4.88219148e-01 4.89473972e-01 + 4.90730400e-01 4.91988430e-01 4.93248062e-01 4.94509296e-01 4.95772131e-01 + 4.97036568e-01 4.98302606e-01 4.99570245e-01 5.00839485e-01 5.02110324e-01 + 5.03382764e-01 5.04656804e-01 5.05932442e-01 5.07209680e-01 5.08488517e-01 + 5.09768953e-01 5.11050986e-01 5.12334618e-01 5.13619847e-01 5.14906674e-01 + 5.16195098e-01 5.17485119e-01 5.18776737e-01 5.20069951e-01 5.21364761e-01 + 5.22661167e-01 5.23959168e-01 5.25258764e-01 5.26559955e-01 5.27862741e-01 + 5.29167122e-01 5.30473096e-01 5.31780664e-01 5.33089826e-01 5.34400580e-01 + 5.35712928e-01 5.37026868e-01 5.38342401e-01 5.39659526e-01 5.40978242e-01 + 5.42298550e-01 5.43620449e-01 5.44943939e-01 5.46269020e-01 5.47595691e-01 + 5.48923952e-01 5.50253802e-01 5.51585242e-01 5.52918272e-01 5.54252890e-01 + 5.55589096e-01 5.56926891e-01 5.58266274e-01 5.59607245e-01 5.60949803e-01 + 5.62293948e-01 5.63639680e-01 5.64986999e-01 5.66335903e-01 5.67686394e-01 + 5.69038470e-01 5.70392132e-01 5.71747378e-01 5.73104210e-01 5.74462626e-01 + 5.75822626e-01 5.77184210e-01 5.78547377e-01 5.79912128e-01 5.81278461e-01 + 5.82646378e-01 5.84015876e-01 5.85386957e-01 5.86759620e-01 5.88133864e-01 + 5.89509689e-01 5.90887095e-01 5.92266082e-01 5.93646649e-01 5.95028796e-01 + 5.96412522e-01 5.97797828e-01 5.99184713e-01 6.00573177e-01 6.01963219e-01 + 6.03354840e-01 6.04748038e-01 6.06142814e-01 6.07539167e-01 6.08937097e-01 + 6.10336603e-01 6.11737686e-01 6.13140346e-01 6.14544580e-01 6.15950391e-01 + 6.17357776e-01 6.18766736e-01 6.20177271e-01 6.21589379e-01 6.23003062e-01 + 6.24418319e-01 6.25835148e-01 6.27253551e-01 6.28673526e-01 6.30095073e-01 + 6.31518193e-01 6.32942884e-01 6.34369147e-01 6.35796981e-01 6.37226386e-01 + 6.38657361e-01 6.40089906e-01 6.41524022e-01 6.42959706e-01 6.44396960e-01 + 6.45835783e-01 6.47276175e-01 6.48718135e-01 6.50161663e-01 6.51606758e-01 + 6.53053421e-01 6.54501651e-01 6.55951448e-01 6.57402811e-01 6.58855740e-01 + 6.60310236e-01 6.61766296e-01 6.63223922e-01 6.64683112e-01 6.66143868e-01 + 6.67606187e-01 6.69070070e-01 6.70535517e-01 6.72002527e-01 6.73471100e-01 + 6.74941236e-01 6.76412934e-01 6.77886194e-01 6.79361015e-01 6.80837398e-01 + 1.38518338e-01 1.38476565e-01 1.38434740e-01 1.38392864e-01 1.38350938e-01 + 1.38308960e-01 1.38266931e-01 1.38224851e-01 1.38182720e-01 1.38140538e-01 + 1.38098305e-01 1.38056020e-01 1.38013684e-01 1.37971296e-01 1.37928857e-01 + 1.37886366e-01 1.37843824e-01 1.37801230e-01 1.37758585e-01 1.37715888e-01 + 1.37673139e-01 1.37630338e-01 1.37587486e-01 1.37544581e-01 1.37501625e-01 + 1.37458617e-01 1.37415556e-01 1.37372444e-01 1.37329279e-01 1.37286062e-01 + 1.37242794e-01 1.37199472e-01 1.37156099e-01 1.37112673e-01 1.37069195e-01 + 1.37025664e-01 1.36982081e-01 1.36938445e-01 1.36894757e-01 1.36851016e-01 + 1.36807222e-01 1.36763376e-01 1.36719477e-01 1.36675525e-01 1.36631520e-01 + 1.36587463e-01 1.36543352e-01 1.36499189e-01 1.36454972e-01 1.36410702e-01 + 1.36366380e-01 1.36322004e-01 1.36277574e-01 1.36233092e-01 1.36188556e-01 + 1.36143967e-01 1.36099325e-01 1.36054629e-01 1.36009880e-01 1.35965077e-01 + 1.35920221e-01 1.35875311e-01 1.35830347e-01 1.35785330e-01 1.35740259e-01 + 1.35695134e-01 1.35649956e-01 1.35604723e-01 1.35559437e-01 1.35514096e-01 + 1.35468702e-01 1.35423254e-01 1.35377752e-01 1.35332195e-01 1.35286585e-01 + 1.35240920e-01 1.35195201e-01 1.35149428e-01 1.35103600e-01 1.35057718e-01 + 1.35011782e-01 1.34965791e-01 1.34919746e-01 1.34873646e-01 1.34827492e-01 + 1.34781283e-01 1.34735020e-01 1.34688702e-01 1.34642329e-01 1.34595901e-01 + 1.34549419e-01 1.34502882e-01 1.34456290e-01 1.34409643e-01 1.34362941e-01 + 1.34316184e-01 1.34269372e-01 1.34222505e-01 1.34175583e-01 1.34128606e-01 + 1.34081573e-01 1.34034486e-01 1.33987343e-01 1.33940145e-01 1.33892892e-01 + 1.33845583e-01 1.33798219e-01 1.33750799e-01 1.33703324e-01 1.33655794e-01 + 1.33608207e-01 1.33560566e-01 1.33512869e-01 1.33465116e-01 1.33417307e-01 + 1.33369443e-01 1.33321523e-01 1.33273547e-01 1.33225515e-01 1.33177428e-01 + 1.33129285e-01 1.33081085e-01 1.33032830e-01 1.32984519e-01 1.32936152e-01 + 1.32887728e-01 1.32839249e-01 1.32790713e-01 1.32742122e-01 1.32693474e-01 + 1.32644770e-01 1.32596010e-01 1.32547193e-01 1.32498320e-01 1.32449391e-01 + 1.32400405e-01 1.32351363e-01 1.32302265e-01 1.32253110e-01 1.32203899e-01 + 1.32154631e-01 1.32105306e-01 1.32055925e-01 1.32006488e-01 1.31956993e-01 + 1.31907442e-01 1.31857835e-01 1.31808170e-01 1.31758449e-01 1.31708671e-01 + 1.31658836e-01 1.31608945e-01 1.31558996e-01 1.31508991e-01 1.31458929e-01 + 1.31408809e-01 1.31358633e-01 1.31308400e-01 1.31258110e-01 1.31207762e-01 + 1.31157358e-01 1.31106897e-01 1.31056378e-01 1.31005802e-01 1.30955169e-01 + 1.30904479e-01 1.30853732e-01 1.30802927e-01 1.30752065e-01 1.30701146e-01 + 1.30650170e-01 1.30599136e-01 1.30548045e-01 1.30496896e-01 1.30445690e-01 + 1.30394426e-01 1.30343106e-01 1.30291727e-01 1.30240291e-01 1.30188798e-01 + 1.30137247e-01 1.30085639e-01 1.30033973e-01 1.29982249e-01 1.29930468e-01 + 1.29878629e-01 1.29826732e-01 1.29774778e-01 1.29722766e-01 1.29670696e-01 + 1.29618569e-01 1.29566384e-01 1.29514141e-01 1.29461841e-01 1.29409482e-01 + 1.29357066e-01 1.29304592e-01 1.29252060e-01 1.29199470e-01 1.29146823e-01 + 1.29094117e-01 1.29041354e-01 1.28988533e-01 1.28935654e-01 1.28882717e-01 + 1.28829721e-01 1.28776668e-01 1.28723557e-01 1.28670388e-01 1.28617161e-01 + 1.28563876e-01 1.28510533e-01 1.28457132e-01 1.28403673e-01 1.28350156e-01 + 1.28296581e-01 1.28242948e-01 1.28189256e-01 1.28135507e-01 1.28081699e-01 + 1.28027834e-01 1.27973910e-01 1.27919928e-01 1.27865888e-01 1.27811790e-01 + 1.27757634e-01 1.27703420e-01 1.27649147e-01 1.27594816e-01 1.27540427e-01 + 1.27485980e-01 1.27431475e-01 1.27376912e-01 1.27322290e-01 1.27267611e-01 + 1.27212873e-01 1.27158077e-01 1.27103223e-01 1.27048310e-01 1.26993340e-01 + 1.26938311e-01 1.26883224e-01 1.26828079e-01 1.26772875e-01 1.26717614e-01 + 1.26662294e-01 1.26606916e-01 1.26551480e-01 1.26495986e-01 1.26440433e-01 + 1.26384823e-01 1.26329154e-01 1.26273427e-01 1.26217642e-01 1.26161799e-01 + 1.26105898e-01 1.26049938e-01 1.25993920e-01 1.25937845e-01 1.25881711e-01 + 1.25825519e-01 1.25769269e-01 1.25712961e-01 1.25656594e-01 1.25600170e-01 + 1.25543688e-01 1.25487147e-01 1.25430549e-01 1.25373892e-01 1.25317178e-01 + 1.25260405e-01 1.25203574e-01 1.25146686e-01 1.25089739e-01 1.25032735e-01 + 1.24975672e-01 1.24918552e-01 1.24861374e-01 1.24804137e-01 1.24746843e-01 + 1.24689491e-01 1.24632082e-01 1.24574614e-01 1.24517089e-01 1.24459505e-01 + 1.24401864e-01 1.24344166e-01 1.24286409e-01 1.24228595e-01 1.24170723e-01 + 1.24112794e-01 1.24054806e-01 1.23996762e-01 1.23938659e-01 1.23880499e-01 + 1.23822281e-01 1.23764006e-01 1.23705674e-01 1.23647284e-01 1.23588836e-01 + 1.23530331e-01 1.23471769e-01 1.23413149e-01 1.23354472e-01 1.23295737e-01 + 1.23236946e-01 1.23178097e-01 1.23119190e-01 1.23060227e-01 1.23001206e-01 + 1.22942129e-01 1.22882994e-01 1.22823802e-01 1.22764553e-01 1.22705247e-01 + 1.22645884e-01 1.22586464e-01 1.22526988e-01 1.22467454e-01 1.22407864e-01 + 1.22348217e-01 1.22288513e-01 1.22228752e-01 1.22168935e-01 1.22109061e-01 + 1.22049130e-01 1.21989143e-01 1.21929100e-01 1.21869000e-01 1.21808843e-01 + 1.21748630e-01 1.21688361e-01 1.21628036e-01 1.21567654e-01 1.21507216e-01 + 1.21446722e-01 1.21386172e-01 1.21325566e-01 1.21264904e-01 1.21204185e-01 + 1.21143411e-01 1.21082581e-01 1.21021696e-01 1.20960754e-01 1.20899757e-01 + 1.20838704e-01 1.20777596e-01 1.20716432e-01 1.20655212e-01 1.20593937e-01 + 1.20532607e-01 1.20471221e-01 1.20409780e-01 1.20348284e-01 1.20286733e-01 + 1.20225127e-01 1.20163465e-01 1.20101749e-01 1.20039978e-01 1.19978152e-01 + 1.19916271e-01 1.19854335e-01 1.19792345e-01 1.19730300e-01 1.19668200e-01 + 1.19606047e-01 1.19543838e-01 1.19481576e-01 1.19419259e-01 1.19356888e-01 + 1.19294463e-01 1.19231984e-01 1.19169450e-01 1.19106863e-01 1.19044222e-01 + 1.18981528e-01 1.18918779e-01 1.18855977e-01 1.18793122e-01 1.18730213e-01 + 1.18667250e-01 1.18604235e-01 1.18541166e-01 1.18478043e-01 1.18414868e-01 + 1.18351640e-01 1.18288359e-01 1.18225025e-01 1.18161638e-01 1.18098199e-01 + 1.18034707e-01 1.17971163e-01 1.17907566e-01 1.17843917e-01 1.17780216e-01 + 1.17716462e-01 1.17652656e-01 1.17588799e-01 1.17524889e-01 1.17460928e-01 + 1.17396915e-01 1.17332851e-01 1.17268735e-01 1.17204567e-01 1.17140349e-01 + 1.17076079e-01 1.17011757e-01 1.16947385e-01 1.16882962e-01 1.16818488e-01 + 1.16753964e-01 1.16689388e-01 1.16624762e-01 1.16560086e-01 1.16495360e-01 + 1.16430583e-01 1.16365756e-01 1.16300879e-01 1.16235952e-01 1.16170975e-01 + 1.16105949e-01 1.16040873e-01 1.15975748e-01 1.15910573e-01 1.15845349e-01 + 1.15780076e-01 1.15714754e-01 1.15649383e-01 1.15583963e-01 1.15518494e-01 + 1.15452977e-01 1.15387412e-01 1.15321798e-01 1.15256136e-01 1.15190426e-01 + 1.15124668e-01 1.15058862e-01 1.14993008e-01 1.14927107e-01 1.14861158e-01 + 1.14795162e-01 1.14729119e-01 1.14663029e-01 1.14596892e-01 1.14530707e-01 + 1.14464477e-01 1.14398199e-01 1.14331875e-01 1.14265505e-01 1.14199089e-01 + 1.14132627e-01 1.14066119e-01 1.13999565e-01 1.13932965e-01 1.13866320e-01 + 1.13799630e-01 1.13732894e-01 1.13666113e-01 1.13599288e-01 1.13532417e-01 + 1.13465503e-01 1.13398543e-01 1.13331539e-01 1.13264491e-01 1.13197399e-01 + 1.13130263e-01 1.13063084e-01 1.12995861e-01 1.12928594e-01 1.12861284e-01 + 1.12793931e-01 1.12726535e-01 1.12659096e-01 1.12591615e-01 1.12524091e-01 + 1.12456524e-01 1.12388916e-01 1.12321265e-01 1.12253573e-01 1.12185839e-01 + 1.12118063e-01 1.12050246e-01 1.11982388e-01 1.11914489e-01 1.11846549e-01 + 1.11778568e-01 1.11710547e-01 1.11642485e-01 1.11574383e-01 1.11506242e-01 + 1.11438060e-01 1.11369839e-01 1.11301578e-01 1.11233278e-01 1.11164939e-01 + 1.11096561e-01 1.11028144e-01 1.10959689e-01 1.10891195e-01 1.10822663e-01 + 1.10754093e-01 1.10685486e-01 1.10616840e-01 1.10548157e-01 1.10479437e-01 + 1.10410680e-01 1.10341886e-01 1.10273055e-01 1.10204188e-01 1.10135284e-01 + 1.10066345e-01 1.09997369e-01 1.09928358e-01 1.09859311e-01 1.09790229e-01 + 1.09721112e-01 1.09651960e-01 1.09582773e-01 1.09513552e-01 1.09444296e-01 + 1.09375007e-01 1.09305683e-01 1.09236326e-01 1.09166936e-01 1.09097512e-01 + 1.09028055e-01 1.08958566e-01 1.08889044e-01 1.08819489e-01 1.08749902e-01 + 1.08680284e-01 1.08610634e-01 1.08540952e-01 1.08471239e-01 1.08401495e-01 + 1.08331720e-01 1.08261914e-01 1.08192078e-01 1.08122212e-01 1.08052316e-01 + 1.07982391e-01 1.07912436e-01 1.07842452e-01 1.07772438e-01 1.07702397e-01 + 1.07632326e-01 1.07562227e-01 1.07492101e-01 1.07421946e-01 1.07351764e-01 + 1.07281555e-01 1.07211318e-01 1.07141055e-01 1.07070766e-01 1.07000449e-01 + 1.06930107e-01 1.06859739e-01 1.06789346e-01 1.06718927e-01 1.06648483e-01 + 1.06578015e-01 1.06507521e-01 1.06437004e-01 1.06366462e-01 1.06295897e-01 + 1.06225308e-01 1.06154696e-01 1.06084061e-01 1.06013403e-01 1.05942723e-01 + 1.05872021e-01 1.05801296e-01 1.05730551e-01 1.05659783e-01 1.05588995e-01 + 1.05518186e-01 1.05447356e-01 1.05376506e-01 1.05305636e-01 1.05234746e-01 + 1.05163837e-01 1.05092908e-01 1.05021961e-01 1.04950995e-01 1.04880011e-01 + 1.04809009e-01 1.04737989e-01 1.04666951e-01 1.04595897e-01 1.04524826e-01 + 1.04453738e-01 1.04382633e-01 1.04311513e-01 1.04240377e-01 1.04169226e-01 + 1.04098060e-01 1.04026878e-01 1.03955683e-01 1.03884473e-01 1.03813249e-01 + 1.03742012e-01 1.03670761e-01 1.03599498e-01 1.03528222e-01 1.03456933e-01 + 1.03385633e-01 1.03314321e-01 1.03242997e-01 1.03171662e-01 1.03100317e-01 + 1.03028961e-01 1.02957595e-01 1.02886219e-01 1.02814833e-01 1.02743439e-01 + 1.02672036e-01 1.02600624e-01 1.02529204e-01 1.02457776e-01 1.02386340e-01 + 1.02314898e-01 1.02243448e-01 1.02171992e-01 1.02100530e-01 1.02029062e-01 + 1.01957589e-01 1.01886110e-01 1.01814626e-01 1.01743138e-01 1.01671646e-01 + 1.01600150e-01 1.01528651e-01 1.01457148e-01 1.01385643e-01 1.01314135e-01 + 1.01242625e-01 1.01171114e-01 1.01099601e-01 1.01028087e-01 1.00956573e-01 + 1.00885058e-01 1.00813543e-01 1.00742029e-01 1.00670515e-01 1.00599003e-01 + 1.00527492e-01 1.00455983e-01 1.00384477e-01 1.00312973e-01 1.00241472e-01 + 1.00169974e-01 1.00098480e-01 1.00026990e-01 9.99555050e-02 9.98840245e-02 + 9.98125493e-02 9.97410797e-02 9.96696161e-02 9.95981588e-02 9.95267084e-02 + 9.94552650e-02 9.93838292e-02 9.93124014e-02 9.92409818e-02 9.91695709e-02 + 9.90981691e-02 9.90267768e-02 9.89553944e-02 9.88840222e-02 9.88126607e-02 + 9.87413103e-02 9.86699713e-02 9.85986441e-02 9.85273293e-02 9.84560271e-02 + 9.83847379e-02 9.83134622e-02 9.82422004e-02 9.81709529e-02 9.80997201e-02 + 9.80285023e-02 9.79573001e-02 9.78861138e-02 9.78149439e-02 9.77437907e-02 + 9.76726547e-02 9.76015362e-02 9.75304358e-02 9.74593538e-02 9.73882907e-02 + 9.73172468e-02 9.72462226e-02 9.71752186e-02 9.71042351e-02 9.70332725e-02 + 9.69623314e-02 9.68914121e-02 9.68205151e-02 9.67496408e-02 9.66787897e-02 + 9.66079621e-02 9.65371585e-02 9.64663793e-02 9.63956251e-02 9.63248961e-02 + 9.62541930e-02 9.61835160e-02 9.61128657e-02 9.60422425e-02 9.59716469e-02 + 9.59010792e-02 9.58305400e-02 9.57600297e-02 9.56895487e-02 9.56190976e-02 + 9.55486767e-02 9.54782865e-02 9.54079274e-02 9.53376000e-02 9.52673047e-02 + 9.51970419e-02 9.51268121e-02 9.50566158e-02 9.49864534e-02 9.49163254e-02 + 9.48462322e-02 9.47761744e-02 9.47061524e-02 9.46361667e-02 9.45662176e-02 + 9.44963058e-02 9.44264317e-02 9.43565957e-02 9.42867984e-02 9.42170402e-02 + 9.41473215e-02 9.40776429e-02 9.40080049e-02 9.39384078e-02 9.38688523e-02 + 9.37993388e-02 9.37298677e-02 9.36604397e-02 9.35910550e-02 9.35217143e-02 + 9.34524180e-02 9.33831666e-02 9.33139606e-02 9.32448006e-02 9.31756869e-02 + 9.31066201e-02 9.30376006e-02 9.29686291e-02 9.28997059e-02 9.28308316e-02 + 9.27620066e-02 9.26932315e-02 9.26245068e-02 9.25558330e-02 9.24872106e-02 + 9.24186400e-02 9.23501218e-02 9.22816566e-02 9.22132447e-02 9.21448867e-02 + 9.20765832e-02 9.20083346e-02 9.19401414e-02 9.18720042e-02 9.18039235e-02 + 9.17358998e-02 9.16679335e-02 9.16000253e-02 9.15321756e-02 9.14643850e-02 + 9.13966540e-02 9.13289830e-02 9.12613727e-02 9.11938235e-02 9.11263360e-02 + 9.10589106e-02 9.09915480e-02 9.09242486e-02 9.08570130e-02 9.07898417e-02 + 9.07227352e-02 9.06556940e-02 9.05887187e-02 9.05218099e-02 9.04549680e-02 + 9.03881935e-02 9.03214871e-02 9.02548492e-02 9.01882804e-02 9.01217813e-02 + 9.00553522e-02 8.99889939e-02 8.99227068e-02 8.98564915e-02 8.97903485e-02 + 8.97242783e-02 8.96582816e-02 8.95923588e-02 8.95265104e-02 8.94607371e-02 + 8.93950394e-02 8.93294177e-02 8.92638728e-02 8.91984050e-02 8.91330150e-02 + 8.90677033e-02 8.90024705e-02 8.89373170e-02 8.88722435e-02 8.88072505e-02 + 8.87423386e-02 8.86775083e-02 8.86127602e-02 8.85480947e-02 8.84835126e-02 + 8.84190142e-02 8.83546003e-02 8.82902712e-02 8.82260277e-02 8.81618702e-02 + 8.80977994e-02 8.80338157e-02 8.79699197e-02 8.79061120e-02 8.78423932e-02 + 8.77787637e-02 8.77152243e-02 8.76517753e-02 8.75884175e-02 8.75251513e-02 + 8.74619773e-02 8.73988961e-02 8.73359083e-02 8.72730143e-02 8.72102149e-02 + 8.71475104e-02 8.70849016e-02 8.70223890e-02 8.69599731e-02 8.68976544e-02 + 8.68354337e-02 8.67733114e-02 8.67112881e-02 8.66493644e-02 8.65875409e-02 + 8.65258180e-02 8.64641964e-02 8.64026767e-02 8.63412594e-02 8.62799451e-02 + 8.62187344e-02 8.61576278e-02 8.60966259e-02 8.60357293e-02 8.59749386e-02 + 8.59142542e-02 8.58536769e-02 8.57932071e-02 8.57328455e-02 8.56725925e-02 + 8.56124489e-02 8.55524151e-02 8.54924918e-02 8.54326794e-02 8.53729787e-02 + 8.53133900e-02 8.52539141e-02 8.51945515e-02 8.51353028e-02 8.50761685e-02 + 8.50171493e-02 8.49582456e-02 8.48994581e-02 8.48407874e-02 8.47822340e-02 + 8.47237984e-02 8.46654813e-02 8.46072833e-02 8.45492049e-02 8.44912466e-02 + 8.44334092e-02 8.43756930e-02 8.43180988e-02 8.42606271e-02 8.42032784e-02 + 8.41460533e-02 8.40889525e-02 8.40319764e-02 8.39751257e-02 8.39184009e-02 + 8.38618026e-02 8.38053314e-02 8.37489878e-02 8.36927724e-02 8.36366859e-02 + 8.35807286e-02 8.35249013e-02 8.34692046e-02 8.34136388e-02 8.33582048e-02 + 8.33029029e-02 8.32477338e-02 8.31926981e-02 8.31377963e-02 8.30830290e-02 + 8.30283967e-02 8.29739001e-02 8.29195397e-02 8.28653161e-02 8.28112297e-02 + 8.27572813e-02 8.27034714e-02 8.26498005e-02 8.25962691e-02 8.25428780e-02 + 8.24896276e-02 8.24365184e-02 8.23835511e-02 8.23307263e-02 8.22780444e-02 + 8.22255060e-02 8.21731118e-02 8.21208622e-02 8.20687579e-02 8.20167993e-02 + 8.19649871e-02 8.19133218e-02 8.18618039e-02 8.18104341e-02 8.17592128e-02 + 8.17081407e-02 8.16572182e-02 8.16064460e-02 8.15558245e-02 8.15053545e-02 + 8.14550363e-02 8.14048705e-02 8.13548578e-02 8.13049986e-02 8.12552935e-02 + 8.12057430e-02 8.11563478e-02 8.11071082e-02 8.10580250e-02 8.10090986e-02 + 8.09603295e-02 8.09117184e-02 8.08632657e-02 8.08149721e-02 8.07668379e-02 + 8.07188639e-02 8.06710504e-02 8.06233982e-02 8.05759075e-02 8.05285792e-02 + 8.04814136e-02 8.04344112e-02 8.03875727e-02 8.03408986e-02 8.02943893e-02 + 8.02480455e-02 8.02018675e-02 8.01558561e-02 8.01100116e-02 8.00643347e-02 + 8.00188258e-02 7.99734855e-02 7.99283142e-02 7.98833126e-02 7.98384810e-02 + 7.97938201e-02 7.97493304e-02 7.97050123e-02 7.96608664e-02 7.96168932e-02 + 7.95730933e-02 7.95294670e-02 7.94860149e-02 7.94427376e-02 7.93996355e-02 + 7.93567091e-02 7.93139590e-02 7.92713856e-02 7.92289895e-02 7.91867711e-02 + 7.91447310e-02 7.91028695e-02 7.90611873e-02 7.90196849e-02 7.89783626e-02 + 7.89372210e-02 7.88962607e-02 7.88554819e-02 7.88148854e-02 7.87744715e-02 + 7.87342407e-02 7.86941935e-02 7.86543304e-02 7.86146519e-02 7.85751584e-02 + 7.85358504e-02 7.84967284e-02 7.84577929e-02 7.84190442e-02 7.83804830e-02 + 7.83421096e-02 7.83039245e-02 7.82659282e-02 7.82281212e-02 7.81905038e-02 + 7.81530766e-02 7.81158400e-02 7.80787945e-02 7.80419405e-02 7.80052784e-02 + 7.79688088e-02 7.79325320e-02 7.78964485e-02 7.78605587e-02 7.78248631e-02 + 7.77893622e-02 7.77540563e-02 7.77189459e-02 7.76840314e-02 7.76493132e-02 + 7.76147919e-02 7.75804677e-02 7.75463412e-02 7.75124127e-02 7.74786828e-02 + 7.74451517e-02 7.74118199e-02 7.73786878e-02 7.73457559e-02 7.73130245e-02 + 7.72804941e-02 7.72481650e-02 7.72160377e-02 7.71841125e-02 7.71523900e-02 + 7.71208703e-02 7.70895541e-02 7.70584416e-02 7.70275332e-02 7.69968293e-02 + 7.69663304e-02 7.69360368e-02 7.69059488e-02 7.68760670e-02 7.68463915e-02 + 7.68169229e-02 7.67876614e-02 7.67586075e-02 7.67297616e-02 7.67011239e-02 + 7.66726949e-02 7.66444749e-02 7.66164642e-02 7.65886633e-02 7.65610725e-02 + 7.65336921e-02 7.65065225e-02 7.64795641e-02 7.64528171e-02 7.64262819e-02 + 7.63999589e-02 7.63738484e-02 7.63479508e-02 7.63222662e-02 7.62967952e-02 + 7.62715380e-02 7.62464950e-02 7.62216664e-02 7.61970526e-02 7.61726539e-02 + 7.61484706e-02 7.61245031e-02 7.61007516e-02 7.60772164e-02 7.60538979e-02 + 7.60307964e-02 7.60079121e-02 7.59852453e-02 7.59627964e-02 7.59405657e-02 + 7.59185533e-02 7.58967597e-02 7.58751851e-02 7.58538297e-02 7.58326939e-02 + 7.58117779e-02 7.57910820e-02 7.57706065e-02 7.57503516e-02 7.57303176e-02 + 7.57105048e-02 7.56909134e-02 7.56715437e-02 7.56523959e-02 7.56334703e-02 + 7.56147671e-02 7.55962866e-02 7.55780290e-02 7.55599946e-02 7.55421835e-02 + 7.55245961e-02 7.55072326e-02 7.54900931e-02 7.54731780e-02 7.54564874e-02 + 7.54400215e-02 7.54237806e-02 7.54077649e-02 7.53919746e-02 7.53764099e-02 + 7.53610711e-02 7.53459582e-02 7.53310716e-02 7.53164113e-02 7.53019777e-02 + 7.52877708e-02 7.52737910e-02 7.52600383e-02 7.52465130e-02 7.52332152e-02 + 7.52201451e-02 7.52073028e-02 7.51946887e-02 7.51823027e-02 7.51701451e-02 + 7.51582161e-02 7.51465158e-02 7.51350443e-02 7.51238019e-02 7.51127886e-02 + 7.51020046e-02 7.50914500e-02 7.50811251e-02 7.50710299e-02 7.50611645e-02 + 7.50515291e-02 7.50421239e-02 7.50329489e-02 7.50240043e-02 7.50152901e-02 + 7.50068066e-02 7.49985538e-02 7.49905318e-02 7.49827407e-02 7.49751807e-02 + 7.49678518e-02 7.49607542e-02 7.49538879e-02 7.49472530e-02 7.49408496e-02 + 7.49346779e-02 7.49287378e-02 7.49230295e-02 7.49175530e-02 7.49123084e-02 + 7.49072958e-02 7.49025153e-02 7.48979669e-02 7.48936506e-02 7.48895666e-02 + 7.48857148e-02 7.48820954e-02 7.48787084e-02 7.48755538e-02 7.48726317e-02 + 7.48699421e-02 7.48674851e-02 7.48652606e-02 7.48632687e-02 7.48615095e-02 + 7.48599830e-02 7.48586891e-02 7.48576279e-02 7.48567994e-02 7.48562037e-02 + 7.48558407e-02 7.48557104e-02 7.48558129e-02 7.48561481e-02 7.48567160e-02 + 7.48575167e-02 7.48585501e-02 7.48598162e-02 7.48613149e-02 7.48630464e-02 + 7.48650104e-02 7.48672071e-02 7.48696364e-02 7.48722982e-02 7.48751926e-02 + 7.48783194e-02 7.48816786e-02 7.48852703e-02 7.48890943e-02 7.48931506e-02 + 7.48974391e-02 7.49019598e-02 7.49067126e-02 7.49116975e-02 7.49169143e-02 + 7.49223631e-02 7.49280438e-02 7.49339562e-02 7.49401003e-02 7.49464760e-02 + 7.49530832e-02 7.49599219e-02 7.49669919e-02 7.49742931e-02 7.49818255e-02 + 7.49895890e-02 7.49975834e-02 7.50058087e-02 7.50142646e-02 7.50229512e-02 + 7.50318684e-02 7.50410158e-02 7.50503936e-02 7.50600015e-02 7.50698394e-02 + 7.50799072e-02 7.50902047e-02 7.51007318e-02 7.51114884e-02 7.51224743e-02 + 7.51336894e-02 7.51451335e-02 7.51568065e-02 7.51687082e-02 7.51808385e-02 + 7.51931972e-02 7.52057841e-02 7.52185991e-02 7.52316420e-02 7.52449126e-02 + 7.52584108e-02 7.52721363e-02 7.52860890e-02 7.53002688e-02 7.53146753e-02 + 7.53293085e-02 7.53441681e-02 7.53592540e-02 7.53745659e-02 7.53901036e-02 + 7.54058670e-02 7.54218558e-02 7.54380698e-02 7.54545087e-02 7.54711725e-02 + 7.54880609e-02 7.55051735e-02 7.55225103e-02 7.55400710e-02 7.55578553e-02 + 7.55758631e-02 7.55940940e-02 7.56125479e-02 7.56312245e-02 7.56501236e-02 + 7.56692448e-02 7.56885881e-02 7.57081530e-02 7.57279394e-02 7.57479470e-02 + 7.57681755e-02 7.57886247e-02 7.58092942e-02 7.58301840e-02 7.58512935e-02 + 7.58726227e-02 7.58941712e-02 7.59159386e-02 7.59379249e-02 7.59601296e-02 + 7.59825524e-02 7.60051932e-02 7.60280515e-02 7.60511271e-02 7.60744197e-02 + 7.60979290e-02 7.61216547e-02 7.61455964e-02 7.61697540e-02 7.61941269e-02 + 7.62187151e-02 7.62435180e-02 7.62685354e-02 7.62937671e-02 7.63192126e-02 + 7.63448716e-02 7.63707438e-02 7.63968289e-02 7.64231266e-02 7.64496364e-02 + 7.64763581e-02 7.65032913e-02 7.65304357e-02 7.65577909e-02 7.65853566e-02 + 7.66131325e-02 7.66411181e-02 7.66693131e-02 7.66977171e-02 7.67263299e-02 + 7.67551510e-02 7.67841801e-02 7.68134168e-02 7.68428607e-02 7.68725114e-02 + 7.69023687e-02 7.69324320e-02 7.69627011e-02 7.69931756e-02 7.70238549e-02 + 7.70547389e-02 7.70858271e-02 7.71171190e-02 7.71486144e-02 7.71803127e-02 + 7.72122137e-02 7.72443169e-02 7.72766219e-02 7.73091283e-02 7.73418357e-02 + 7.73747437e-02 7.74078518e-02 7.74411598e-02 7.74746671e-02 7.75083734e-02 + 7.75422781e-02 7.75763810e-02 7.76106816e-02 7.76451794e-02 7.76798741e-02 + 7.77147651e-02 7.77498522e-02 7.77851347e-02 7.78206124e-02 7.78562848e-02 + 7.78921513e-02 7.79282117e-02 7.79644654e-02 7.80009121e-02 7.80375512e-02 + 7.80743823e-02 7.81114050e-02 7.81486188e-02 7.81860233e-02 7.82236179e-02 + 7.82614023e-02 7.82993761e-02 7.83375386e-02 7.83758895e-02 7.84144284e-02 + 7.84531546e-02 7.84920679e-02 7.85311676e-02 7.85704534e-02 7.86099248e-02 + 7.86495813e-02 7.86894223e-02 7.87294475e-02 7.87696564e-02 7.88100485e-02 + 7.88506232e-02 7.88913802e-02 7.89323189e-02 7.89734389e-02 7.90147396e-02 + 7.90562205e-02 7.90978813e-02 7.91397213e-02 7.91817402e-02 7.92239373e-02 + 7.92663122e-02 7.93088645e-02 7.93515935e-02 7.93944988e-02 7.94375800e-02 + 7.94808364e-02 7.95242676e-02 7.95678731e-02 7.96116524e-02 7.96556049e-02 + 7.96997302e-02 7.97440277e-02 7.97884970e-02 7.98331374e-02 7.98779486e-02 + 7.99229300e-02 7.99680810e-02 8.00134012e-02 8.00588900e-02 8.01045468e-02 + 8.01503713e-02 8.01963628e-02 8.02425209e-02 8.02888450e-02 8.03353345e-02 + 8.03819890e-02 8.04288079e-02 8.04757907e-02 8.05229368e-02 8.05702458e-02 + 8.06177170e-02 8.06653500e-02 8.07131443e-02 8.07610992e-02 8.08092142e-02 + 8.08574888e-02 8.09059225e-02 8.09545148e-02 8.10032650e-02 8.10521726e-02 + 8.11012372e-02 8.11504581e-02 8.11998347e-02 8.12493667e-02 8.12990534e-02 + 8.13488942e-02 8.13988886e-02 8.14490361e-02 8.14993361e-02 8.15497881e-02 + 8.16003915e-02 8.16511457e-02 8.17020502e-02 8.17531045e-02 8.18043080e-02 + 8.18556601e-02 8.19071604e-02 8.19588081e-02 8.20106028e-02 8.20625439e-02 + 8.21146309e-02 8.21668631e-02 8.22192401e-02 8.22717613e-02 8.23244260e-02 + 8.23772339e-02 8.24301842e-02 8.24832764e-02 8.25365100e-02 8.25898843e-02 + 8.26433990e-02 8.26970532e-02 8.27508466e-02 8.28047785e-02 8.28588484e-02 + 8.29130557e-02 8.29673998e-02 8.30218801e-02 8.30764962e-02 8.31312474e-02 + 8.31861332e-02 8.32411529e-02 8.32963061e-02 8.33515922e-02 8.34070105e-02 + 8.34625605e-02 8.35182417e-02 8.35740534e-02 8.36299951e-02 8.36860663e-02 + 8.37422663e-02 8.37985946e-02 8.38550506e-02 8.39116338e-02 8.39683435e-02 + 8.40251792e-02 8.40821403e-02 8.41392263e-02 8.41964365e-02 8.42537705e-02 + 8.43112275e-02 8.43688072e-02 8.44265088e-02 8.44843318e-02 8.45422756e-02 + 8.46003397e-02 8.46585235e-02 8.47168264e-02 8.47752478e-02 8.48337872e-02 + 8.48924439e-02 8.49512175e-02 8.50101073e-02 8.50691128e-02 8.51282334e-02 + 8.51874685e-02 8.52468175e-02 8.53062799e-02 8.53658551e-02 8.54255425e-02 + 8.54853415e-02 8.55452516e-02 8.56052723e-02 8.56654028e-02 8.57256427e-02 + 8.57859914e-02 8.58464483e-02 8.59070128e-02 8.59676844e-02 8.60284625e-02 + 8.60893465e-02 8.61503358e-02 8.62114299e-02 8.62726282e-02 8.63339302e-02 + 8.63953352e-02 8.64568427e-02 8.65184522e-02 8.65801629e-02 8.66419745e-02 + 8.67038863e-02 8.67658977e-02 8.68280082e-02 8.68902172e-02 8.69525242e-02 + 8.70149285e-02 8.70774296e-02 8.71400270e-02 8.72027200e-02 8.72655081e-02 + 8.73283908e-02 8.73913675e-02 8.74544376e-02 8.75176005e-02 8.75808557e-02 + 8.76442026e-02 8.77076407e-02 8.77711694e-02 8.78347881e-02 8.78984963e-02 + 8.79622934e-02 8.80261789e-02 8.80901521e-02 8.81542126e-02 8.82183598e-02 + 8.82825930e-02 8.83469119e-02 8.84113157e-02 8.84758040e-02 8.85403762e-02 + 8.86050317e-02 8.86697700e-02 8.87345905e-02 8.87994927e-02 8.88644761e-02 + 8.89295400e-02 8.89946839e-02 8.90599073e-02 8.91252096e-02 8.91905903e-02 + 8.92560488e-02 8.93215845e-02 8.93871970e-02 8.94528857e-02 8.95186500e-02 + 8.95844894e-02 8.96504034e-02 8.97163914e-02 8.97824528e-02 8.98485871e-02 + 8.99147938e-02 8.99810724e-02 9.00474222e-02 9.01138428e-02 9.01803336e-02 + 9.02468942e-02 9.03135238e-02 9.03802221e-02 9.04469884e-02 9.05138223e-02 + 9.05807232e-02 9.06476906e-02 9.07147239e-02 9.07818226e-02 9.08489862e-02 + 9.09162142e-02 9.09835060e-02 9.10508611e-02 9.11182790e-02 9.11857591e-02 + 9.12533009e-02 9.13209040e-02 9.13885677e-02 9.14562916e-02 9.15240751e-02 + 9.15919178e-02 9.16598190e-02 9.17277784e-02 9.17957953e-02 9.18638692e-02 + 9.19319997e-02 9.20001862e-02 9.20684282e-02 9.21367252e-02 9.22050767e-02 + 9.22734821e-02 9.23419411e-02 9.24104530e-02 9.24790173e-02 9.25476336e-02 + 9.26163013e-02 9.26850199e-02 9.27537890e-02 9.28226080e-02 9.28914765e-02 + 9.29603938e-02 9.30293596e-02 9.30983734e-02 9.31674346e-02 9.32365427e-02 + 9.33056973e-02 9.33748978e-02 9.34441438e-02 9.35134347e-02 9.35827701e-02 + 9.36521496e-02 9.37215725e-02 9.37910385e-02 9.38605469e-02 9.39300975e-02 + 9.39996895e-02 9.40693227e-02 9.41389965e-02 9.42087104e-02 9.42784639e-02 + 9.43482566e-02 9.44180880e-02 9.44879576e-02 9.45578649e-02 9.46278095e-02 + 9.46977909e-02 9.47678086e-02 9.48378622e-02 9.49079511e-02 9.49780750e-02 + 9.50482333e-02 9.51184256e-02 9.51886514e-02 9.52589103e-02 9.53292017e-02 + 9.53995254e-02 9.54698806e-02 9.55402671e-02 9.56106844e-02 9.56811320e-02 + 9.57516094e-02 9.58221162e-02 9.58926520e-02 9.59632163e-02 9.60338086e-02 + 9.61044286e-02 9.61750756e-02 9.62457494e-02 9.63164495e-02 9.63871754e-02 + 9.64579266e-02 9.65287028e-02 9.65995035e-02 9.66703283e-02 9.67411766e-02 + 9.68120482e-02 9.68829425e-02 9.69538592e-02 9.70247977e-02 9.70957577e-02 + 9.71667387e-02 9.72377403e-02 9.73087621e-02 9.73798037e-02 9.74508645e-02 + 9.75219443e-02 9.75930426e-02 9.76641589e-02 9.77352928e-02 9.78064440e-02 + 9.78776119e-02 9.79487963e-02 9.80199966e-02 9.80912125e-02 9.81624436e-02 + 9.82336894e-02 9.83049495e-02 9.83762235e-02 9.84475111e-02 9.85188118e-02 + 9.85901251e-02 9.86614508e-02 9.87327884e-02 9.88041375e-02 9.88754977e-02 + 9.89468687e-02 9.90182499e-02 9.90896410e-02 9.91610417e-02 9.92324515e-02 + 9.93038701e-02 9.93752970e-02 9.94467318e-02 9.95181743e-02 9.95896239e-02 + 9.96610804e-02 9.97325432e-02 9.98040122e-02 9.98754867e-02 9.99469666e-02 + 1.00018451e-01 1.00089941e-01 1.00161434e-01 1.00232931e-01 1.00304432e-01 + 1.00375936e-01 1.00447442e-01 1.00518951e-01 1.00590461e-01 1.00661973e-01 + 1.00733487e-01 1.00805001e-01 1.00876516e-01 1.00948030e-01 1.01019545e-01 + 1.01091059e-01 1.01162572e-01 1.01234084e-01 1.01305594e-01 1.01377102e-01 + 1.01448607e-01 1.01520110e-01 1.01591610e-01 1.01663106e-01 1.01734599e-01 + 1.01806088e-01 1.01877572e-01 1.01949051e-01 1.02020525e-01 1.02091994e-01 + 1.02163457e-01 1.02234914e-01 1.02306364e-01 1.02377807e-01 1.02449244e-01 + 1.02520672e-01 1.02592093e-01 1.02663506e-01 1.02734911e-01 1.02806306e-01 + 1.02877693e-01 1.02949070e-01 1.03020437e-01 1.03091794e-01 1.03163141e-01 + 1.03234477e-01 1.03305802e-01 1.03377115e-01 1.03448417e-01 1.03519707e-01 + 1.03590985e-01 1.03662250e-01 1.03733502e-01 1.03804741e-01 1.03875966e-01 + 1.03947178e-01 1.04018375e-01 1.04089558e-01 1.04160726e-01 1.04231879e-01 + 1.04303017e-01 1.04374139e-01 1.04445245e-01 1.04516335e-01 1.04587409e-01 + 1.04658465e-01 1.04729504e-01 1.04800527e-01 1.04871531e-01 1.04942517e-01 + 1.05013485e-01 1.05084435e-01 1.05155365e-01 1.05226277e-01 1.05297169e-01 + 1.05368041e-01 1.05438894e-01 1.05509726e-01 1.05580538e-01 1.05651329e-01 + 1.05722099e-01 1.05792847e-01 1.05863574e-01 1.05934279e-01 1.06004962e-01 + 1.06075622e-01 1.06146260e-01 1.06216875e-01 1.06287467e-01 1.06358035e-01 + 1.06428579e-01 1.06499100e-01 1.06569596e-01 1.06640067e-01 1.06710514e-01 + 1.06780936e-01 1.06851332e-01 1.06921703e-01 1.06992049e-01 1.07062368e-01 + 1.07132661e-01 1.07202927e-01 1.07273167e-01 1.07343379e-01 1.07413565e-01 + 1.07483722e-01 1.07553852e-01 1.07623955e-01 1.07694028e-01 1.07764074e-01 + 1.07834090e-01 1.07904078e-01 1.07974036e-01 1.08043966e-01 1.08113865e-01 + 1.08183735e-01 1.08253574e-01 1.08323383e-01 1.08393162e-01 1.08462910e-01 + 1.08532626e-01 1.08602312e-01 1.08671966e-01 1.08741588e-01 1.08811179e-01 + 1.08880737e-01 1.08950263e-01 1.09019757e-01 1.09089217e-01 1.09158645e-01 + 1.09228040e-01 1.09297401e-01 1.09366728e-01 1.09436022e-01 1.09505281e-01 + 1.09574507e-01 1.09643698e-01 1.09712854e-01 1.09781975e-01 1.09851061e-01 + 1.09920112e-01 1.09989128e-01 1.10058108e-01 1.10127052e-01 1.10195959e-01 + 1.10264831e-01 1.10333666e-01 1.10402465e-01 1.10471226e-01 1.10539951e-01 + 1.10608638e-01 1.10677288e-01 1.10745900e-01 1.10814475e-01 1.10883011e-01 + 1.10951510e-01 1.11019970e-01 1.11088391e-01 1.11156774e-01 1.11225117e-01 + 1.11293422e-01 1.11361687e-01 1.11429913e-01 1.11498100e-01 1.11566246e-01 + 1.11634353e-01 1.11702419e-01 1.11770445e-01 1.11838431e-01 1.11906376e-01 + 1.11974280e-01 1.12042143e-01 1.12109965e-01 1.12177745e-01 1.12245484e-01 + 1.12313182e-01 1.12380837e-01 1.12448451e-01 1.12516022e-01 1.12583551e-01 + 1.12651038e-01 1.12718482e-01 1.12785883e-01 1.12853241e-01 1.12920556e-01 + 1.12987828e-01 1.13055056e-01 1.13122241e-01 1.13189382e-01 1.13256480e-01 + 1.13323533e-01 1.13390542e-01 1.13457507e-01 1.13524427e-01 1.13591303e-01 + 1.13658134e-01 1.13724920e-01 1.13791661e-01 1.13858356e-01 1.13925007e-01 + 1.13991612e-01 1.14058171e-01 1.14124685e-01 1.14191153e-01 1.14257575e-01 + 1.14323950e-01 1.14390280e-01 1.14456562e-01 1.14522799e-01 1.14588988e-01 + 1.14655131e-01 1.14721227e-01 1.14787276e-01 1.14853278e-01 1.14919232e-01 + 1.14985139e-01 1.15050998e-01 1.15116810e-01 1.15182574e-01 1.15248290e-01 + 1.15313957e-01 1.15379577e-01 1.15445148e-01 1.15510671e-01 1.15576146e-01 + 1.15641571e-01 1.15706948e-01 1.15772276e-01 1.15837555e-01 1.15902785e-01 + 1.15967965e-01 1.16033097e-01 1.16098179e-01 1.16163211e-01 1.16228193e-01 + 1.16293126e-01 1.16358009e-01 1.16422842e-01 1.16487625e-01 1.16552357e-01 + 1.16617040e-01 1.16681672e-01 1.16746253e-01 1.16810784e-01 1.16875264e-01 + 1.16939693e-01 1.17004071e-01 1.17068398e-01 1.17132674e-01 1.17196899e-01 + 1.17261073e-01 1.17325195e-01 1.17389266e-01 1.17453285e-01 1.17517252e-01 + 1.17581168e-01 1.17645032e-01 1.17708843e-01 1.17772603e-01 1.17836311e-01 + 1.17899966e-01 1.17963569e-01 1.18027120e-01 1.18090618e-01 1.18154064e-01 + 1.18217457e-01 1.18280797e-01 1.18344084e-01 1.18407319e-01 1.18470500e-01 + 1.18533629e-01 1.18596704e-01 1.18659726e-01 1.18722695e-01 1.18785610e-01 + 1.18848472e-01 1.18911281e-01 1.18974035e-01 1.19036736e-01 1.19099384e-01 + 2.08130000e-04 2.08281191e-04 2.08734762e-04 2.09490714e-04 2.10549046e-04 + 2.11909757e-04 2.13572846e-04 2.15538310e-04 2.17806148e-04 2.20376358e-04 + 2.23248936e-04 2.26423882e-04 2.29901190e-04 2.33680858e-04 2.37762883e-04 + 2.42147260e-04 2.46833984e-04 2.51823051e-04 2.57114457e-04 2.62708196e-04 + 2.68604263e-04 2.74802652e-04 2.81303356e-04 2.88106370e-04 2.95211687e-04 + 3.02619299e-04 3.10329200e-04 3.18341382e-04 3.26655837e-04 3.35272557e-04 + 3.44191533e-04 3.53412758e-04 3.62936221e-04 3.72761913e-04 3.82889825e-04 + 3.93319947e-04 4.04052269e-04 4.15086779e-04 4.26423468e-04 4.38062324e-04 + 4.50003336e-04 4.62246492e-04 4.74791780e-04 4.87639188e-04 5.00788703e-04 + 5.14240312e-04 5.27994002e-04 5.42049760e-04 5.56407572e-04 5.71067423e-04 + 5.86029300e-04 6.01293187e-04 6.16859071e-04 6.32726934e-04 6.48896763e-04 + 6.65368541e-04 6.82142252e-04 6.99217880e-04 7.16595407e-04 7.34274817e-04 + 7.52256092e-04 7.70539216e-04 7.89124169e-04 8.08010934e-04 8.27199493e-04 + 8.46689825e-04 8.66481913e-04 8.86575737e-04 9.06971278e-04 9.27668514e-04 + 9.48667427e-04 9.69967995e-04 9.91570198e-04 1.01347401e-03 1.03567942e-03 + 1.05818640e-03 1.08099493e-03 1.10410498e-03 1.12751654e-03 1.15122957e-03 + 1.17524406e-03 1.19955999e-03 1.22417733e-03 1.24909605e-03 1.27431613e-03 + 1.29983755e-03 1.32566029e-03 1.35178430e-03 1.37820958e-03 1.40493610e-03 + 1.43196382e-03 1.45929272e-03 1.48692278e-03 1.51485397e-03 1.54308626e-03 + 1.57161963e-03 1.60045404e-03 1.62958946e-03 1.65902588e-03 1.68876325e-03 + 1.71880156e-03 1.74914077e-03 1.77978085e-03 1.81072177e-03 1.84196351e-03 + 1.87350602e-03 1.90534929e-03 1.93749327e-03 1.96993795e-03 2.00268328e-03 + 2.03572923e-03 2.06907577e-03 2.10272288e-03 2.13667051e-03 2.17091863e-03 + 2.20546721e-03 2.24031622e-03 2.27546562e-03 2.31091538e-03 2.34666546e-03 + 2.38271583e-03 2.41906645e-03 2.45571729e-03 2.49266831e-03 2.52991947e-03 + 2.56747075e-03 2.60532209e-03 2.64347347e-03 2.68192485e-03 2.72067619e-03 + 2.75972745e-03 2.79907859e-03 2.83872959e-03 2.87868038e-03 2.91893095e-03 + 2.95948125e-03 3.00033123e-03 3.04148087e-03 3.08293011e-03 3.12467892e-03 + 3.16672726e-03 3.20907509e-03 3.25172236e-03 3.29466904e-03 3.33791508e-03 + 3.38146044e-03 3.42530507e-03 3.46944894e-03 3.51389201e-03 3.55863422e-03 + 3.60367554e-03 3.64901591e-03 3.69465531e-03 3.74059367e-03 3.78683096e-03 + 3.83336714e-03 3.88020215e-03 3.92733595e-03 3.97476850e-03 4.02249975e-03 + 4.07052965e-03 4.11885815e-03 4.16748522e-03 4.21641079e-03 4.26563483e-03 + 4.31515728e-03 4.36497811e-03 4.41509725e-03 4.46551466e-03 4.51623029e-03 + 4.56724409e-03 4.61855601e-03 4.67016601e-03 4.72207403e-03 4.77428002e-03 + 4.82678393e-03 4.87958570e-03 4.93268530e-03 4.98608266e-03 5.03977774e-03 + 5.09377048e-03 5.14806083e-03 5.20264873e-03 5.25753414e-03 5.31271700e-03 + 5.36819725e-03 5.42397485e-03 5.48004973e-03 5.53642185e-03 5.59309115e-03 + 5.65005757e-03 5.70732106e-03 5.76488157e-03 5.82273903e-03 5.88089339e-03 + 5.93934459e-03 5.99809258e-03 6.05713731e-03 6.11647870e-03 6.17611671e-03 + 6.23605128e-03 6.29628235e-03 6.35680986e-03 6.41763375e-03 6.47875396e-03 + 6.54017044e-03 6.60188312e-03 6.66389194e-03 6.72619685e-03 6.78879778e-03 + 6.85169468e-03 6.91488748e-03 6.97837611e-03 7.04216053e-03 7.10624066e-03 + 7.17061645e-03 7.23528783e-03 7.30025474e-03 7.36551712e-03 7.43107490e-03 + 7.49692802e-03 7.56307641e-03 7.62952002e-03 7.69625878e-03 7.76329262e-03 + 7.83062147e-03 7.89824528e-03 7.96616398e-03 8.03437750e-03 8.10288577e-03 + 8.17168874e-03 8.24078632e-03 8.31017847e-03 8.37986510e-03 8.44984615e-03 + 8.52012155e-03 8.59069124e-03 8.66155515e-03 8.73271321e-03 8.80416535e-03 + 8.87591149e-03 8.94795158e-03 9.02028554e-03 9.09291331e-03 9.16583480e-03 + 9.23904995e-03 9.31255870e-03 9.38636096e-03 9.46045668e-03 9.53484577e-03 + 9.60952816e-03 9.68450379e-03 9.75977258e-03 9.83533445e-03 9.91118934e-03 + 9.98733717e-03 1.00637779e-02 1.01405114e-02 1.02175376e-02 1.02948564e-02 + 1.03724679e-02 1.04503718e-02 1.05285681e-02 1.06070568e-02 1.06858378e-02 + 1.07649109e-02 1.08442762e-02 1.09239335e-02 1.10038828e-02 1.10841240e-02 + 1.11646570e-02 1.12454817e-02 1.13265980e-02 1.14080060e-02 1.14897054e-02 + 1.15716963e-02 1.16539785e-02 1.17365519e-02 1.18194166e-02 1.19025723e-02 + 1.19860191e-02 1.20697568e-02 1.21537854e-02 1.22381047e-02 1.23227148e-02 + 1.24076155e-02 1.24928067e-02 1.25782883e-02 1.26640604e-02 1.27501227e-02 + 1.28364752e-02 1.29231179e-02 1.30100506e-02 1.30972732e-02 1.31847858e-02 + 1.32725881e-02 1.33606801e-02 1.34490618e-02 1.35377329e-02 1.36266936e-02 + 1.37159436e-02 1.38054829e-02 1.38953113e-02 1.39854289e-02 1.40758355e-02 + 1.41665311e-02 1.42575155e-02 1.43487886e-02 1.44403504e-02 1.45322008e-02 + 1.46243398e-02 1.47167671e-02 1.48094827e-02 1.49024866e-02 1.49957786e-02 + 1.50893587e-02 1.51832267e-02 1.52773826e-02 1.53718263e-02 1.54665577e-02 + 1.55615767e-02 1.56568832e-02 1.57524771e-02 1.58483584e-02 1.59445269e-02 + 1.60409825e-02 1.61377252e-02 1.62347549e-02 1.63320714e-02 1.64296747e-02 + 1.65275647e-02 1.66257413e-02 1.67242043e-02 1.68229538e-02 1.69219896e-02 + 1.70213116e-02 1.71209197e-02 1.72208138e-02 1.73209939e-02 1.74214598e-02 + 1.75222114e-02 1.76232487e-02 1.77245715e-02 1.78261798e-02 1.79280734e-02 + 1.80302523e-02 1.81327163e-02 1.82354654e-02 1.83384994e-02 1.84418184e-02 + 1.85454220e-02 1.86493104e-02 1.87534833e-02 1.88579407e-02 1.89626824e-02 + 1.90677084e-02 1.91730186e-02 1.92786129e-02 1.93844911e-02 1.94906532e-02 + 1.95970991e-02 1.97038286e-02 1.98108417e-02 1.99181382e-02 2.00257182e-02 + 2.01335813e-02 2.02417277e-02 2.03501571e-02 2.04588694e-02 2.05678646e-02 + 2.06771425e-02 2.07867031e-02 2.08965462e-02 2.10066717e-02 2.11170796e-02 + 2.12277697e-02 2.13387419e-02 2.14499962e-02 2.15615323e-02 2.16733503e-02 + 2.17854499e-02 2.18978311e-02 2.20104938e-02 2.21234379e-02 2.22366633e-02 + 2.23501698e-02 2.24639574e-02 2.25780260e-02 2.26923753e-02 2.28070055e-02 + 2.29219162e-02 2.30371074e-02 2.31525791e-02 2.32683311e-02 2.33843632e-02 + 2.35006755e-02 2.36172677e-02 2.37341397e-02 2.38512915e-02 2.39687230e-02 + 2.40864339e-02 2.42044243e-02 2.43226940e-02 2.44412429e-02 2.45600709e-02 + 2.46791779e-02 2.47985637e-02 2.49182282e-02 2.50381714e-02 2.51583931e-02 + 2.52788932e-02 2.53996717e-02 2.55207283e-02 2.56420629e-02 2.57636755e-02 + 2.58855660e-02 2.60077341e-02 2.61301799e-02 2.62529032e-02 2.63759039e-02 + 2.64991818e-02 2.66227368e-02 2.67465689e-02 2.68706779e-02 2.69950637e-02 + 2.71197262e-02 2.72446653e-02 2.73698808e-02 2.74953726e-02 2.76211406e-02 + 2.77471848e-02 2.78735049e-02 2.80001009e-02 2.81269726e-02 2.82541199e-02 + 2.83815427e-02 2.85092409e-02 2.86372144e-02 2.87654630e-02 2.88939867e-02 + 2.90227852e-02 2.91518585e-02 2.92812065e-02 2.94108290e-02 2.95407260e-02 + 2.96708972e-02 2.98013426e-02 2.99320621e-02 3.00630555e-02 3.01943227e-02 + 3.03258636e-02 3.04576781e-02 3.05897660e-02 3.07221272e-02 3.08547616e-02 + 3.09876691e-02 3.11208496e-02 3.12543028e-02 3.13880288e-02 3.15220273e-02 + 3.16562983e-02 3.17908416e-02 3.19256571e-02 3.20607447e-02 3.21961042e-02 + 3.23317356e-02 3.24676386e-02 3.26038132e-02 3.27402593e-02 3.28769766e-02 + 3.30139652e-02 3.31512248e-02 3.32887554e-02 3.34265567e-02 3.35646288e-02 + 3.37029714e-02 3.38415844e-02 3.39804677e-02 3.41196212e-02 3.42590447e-02 + 3.43987381e-02 3.45387013e-02 3.46789341e-02 3.48194365e-02 3.49602082e-02 + 3.51012492e-02 3.52425593e-02 3.53841384e-02 3.55259864e-02 3.56681031e-02 + 3.58104884e-02 3.59531422e-02 3.60960643e-02 3.62392547e-02 3.63827131e-02 + 3.65264394e-02 3.66704335e-02 3.68146954e-02 3.69592247e-02 3.71040215e-02 + 3.72490856e-02 3.73944167e-02 3.75400149e-02 3.76858800e-02 3.78320118e-02 + 3.79784102e-02 3.81250751e-02 3.82720063e-02 3.84192037e-02 3.85666672e-02 + 3.87143966e-02 3.88623918e-02 3.90106526e-02 3.91591790e-02 3.93079707e-02 + 3.94570277e-02 3.96063498e-02 3.97559369e-02 3.99057888e-02 4.00559054e-02 + 4.02062865e-02 4.03569321e-02 4.05078419e-02 4.06590159e-02 4.08104539e-02 + 4.09621558e-02 4.11141214e-02 4.12663506e-02 4.14188432e-02 4.15715991e-02 + 4.17246182e-02 4.18779004e-02 4.20314454e-02 4.21852532e-02 4.23393235e-02 + 4.24936564e-02 4.26482515e-02 4.28031089e-02 4.29582283e-02 4.31136096e-02 + 4.32692526e-02 4.34251573e-02 4.35813234e-02 4.37377508e-02 4.38944395e-02 + 4.40513892e-02 4.42085998e-02 4.43660711e-02 4.45238031e-02 4.46817956e-02 + 4.48400483e-02 4.49985613e-02 4.51573343e-02 4.53163671e-02 4.54756598e-02 + 4.56352120e-02 4.57950237e-02 4.59550947e-02 4.61154249e-02 4.62760141e-02 + 4.64368622e-02 4.65979690e-02 4.67593344e-02 4.69209582e-02 4.70828403e-02 + 4.72449806e-02 4.74073789e-02 4.75700350e-02 4.77329488e-02 4.78961202e-02 + 4.80595489e-02 4.82232350e-02 4.83871781e-02 4.85513782e-02 4.87158351e-02 + 4.88805487e-02 4.90455188e-02 4.92107453e-02 4.93762280e-02 4.95419667e-02 + 4.97079614e-02 4.98742118e-02 5.00407179e-02 5.02074794e-02 5.03744963e-02 + 5.05417683e-02 5.07092953e-02 5.08770772e-02 5.10451138e-02 5.12134049e-02 + 5.13819505e-02 5.15507503e-02 5.17198043e-02 5.18891121e-02 5.20586738e-02 + 5.22284892e-02 5.23985580e-02 5.25688802e-02 5.27394555e-02 5.29102839e-02 + 5.30813652e-02 5.32526992e-02 5.34242858e-02 5.35961248e-02 5.37682161e-02 + 5.39405595e-02 5.41131548e-02 5.42860020e-02 5.44591008e-02 5.46324511e-02 + 5.48060527e-02 5.49799055e-02 5.51540094e-02 5.53283641e-02 5.55029695e-02 + 5.56778255e-02 5.58529319e-02 5.60282885e-02 5.62038952e-02 5.63797519e-02 + 5.65558583e-02 5.67322144e-02 5.69088199e-02 5.70856747e-02 5.72627786e-02 + 5.74401316e-02 5.76177334e-02 5.77955838e-02 5.79736828e-02 5.81520301e-02 + 5.83306256e-02 5.85094691e-02 5.86885605e-02 5.88678997e-02 5.90474864e-02 + 5.92273205e-02 5.94074018e-02 5.95877302e-02 5.97683055e-02 5.99491276e-02 + 6.01301963e-02 6.03115114e-02 6.04930728e-02 6.06748803e-02 6.08569338e-02 + 6.10392330e-02 6.12217779e-02 6.14045683e-02 6.15876039e-02 6.17708848e-02 + 6.19544105e-02 6.21381812e-02 6.23221964e-02 6.25064562e-02 6.26909603e-02 + 6.28757085e-02 6.30607008e-02 6.32459369e-02 6.34314167e-02 6.36171400e-02 + 6.38031067e-02 6.39893165e-02 6.41757694e-02 6.43624651e-02 6.45494036e-02 + 6.47365845e-02 6.49240078e-02 6.51116734e-02 6.52995809e-02 6.54877303e-02 + 6.56761215e-02 6.58647541e-02 6.60536282e-02 6.62427434e-02 6.64320997e-02 + 6.66216969e-02 6.68115348e-02 6.70016132e-02 6.71919320e-02 6.73824910e-02 + 6.75732900e-02 6.77643289e-02 6.79556075e-02 6.81471257e-02 6.83388832e-02 + 6.85308799e-02 6.87231157e-02 6.89155904e-02 6.91083037e-02 6.93012556e-02 + 6.94944458e-02 6.96878742e-02 6.98815407e-02 7.00754450e-02 7.02695870e-02 + 7.04639665e-02 7.06585833e-02 7.08534374e-02 7.10485284e-02 7.12438563e-02 + 7.14394208e-02 7.16352219e-02 7.18312593e-02 7.20275328e-02 7.22240423e-02 + 7.24207876e-02 7.26177686e-02 7.28149851e-02 7.30124368e-02 7.32101237e-02 + 7.34080456e-02 7.36062022e-02 7.38045935e-02 7.40032192e-02 7.42020791e-02 + 7.44011732e-02 7.46005012e-02 7.48000630e-02 7.49998583e-02 7.51998870e-02 + 7.54001490e-02 7.56006441e-02 7.58013720e-02 7.60023326e-02 7.62035258e-02 + 7.64049514e-02 7.66066092e-02 7.68084989e-02 7.70106206e-02 7.72129739e-02 + 7.74155587e-02 7.76183748e-02 7.78214221e-02 7.80247003e-02 7.82282094e-02 + 7.84319490e-02 7.86359192e-02 7.88401196e-02 7.90445501e-02 7.92492105e-02 + 7.94541007e-02 7.96592204e-02 7.98645695e-02 8.00701479e-02 8.02759553e-02 + 8.04819916e-02 8.06882565e-02 8.08947500e-02 8.11014718e-02 8.13084218e-02 + 8.15155998e-02 8.17230055e-02 8.19306389e-02 8.21384998e-02 8.23465879e-02 + 8.25549031e-02 8.27634452e-02 8.29722141e-02 8.31812095e-02 8.33904313e-02 + 8.35998794e-02 8.38095534e-02 8.40194533e-02 8.42295789e-02 8.44399299e-02 + 8.46505063e-02 8.48613078e-02 8.50723343e-02 8.52835855e-02 8.54950613e-02 + 8.57067616e-02 8.59186860e-02 8.61308346e-02 8.63432070e-02 8.65558031e-02 + 8.67686227e-02 8.69816656e-02 8.71949318e-02 8.74084208e-02 8.76221327e-02 + 8.78360672e-02 8.80502241e-02 8.82646033e-02 8.84792045e-02 8.86940276e-02 + 8.89090725e-02 8.91243388e-02 8.93398265e-02 8.95555354e-02 8.97714652e-02 + 8.99876159e-02 9.02039871e-02 9.04205788e-02 9.06373908e-02 9.08544228e-02 + 9.10716747e-02 9.12891463e-02 9.15068374e-02 9.17247478e-02 9.19428774e-02 + 9.21612260e-02 9.23797934e-02 9.25985793e-02 9.28175837e-02 9.30368064e-02 + 9.32562470e-02 9.34759056e-02 9.36957818e-02 9.39158756e-02 9.41361866e-02 + 9.43567148e-02 9.45774599e-02 9.47984219e-02 9.50196003e-02 9.52409952e-02 + 9.54626063e-02 9.56844334e-02 9.59064764e-02 9.61287350e-02 9.63512090e-02 + 9.65738984e-02 9.67968029e-02 9.70199222e-02 9.72432563e-02 9.74668050e-02 + 9.76905680e-02 9.79145452e-02 9.81387363e-02 9.83631413e-02 9.85877598e-02 + 9.88125918e-02 9.90376370e-02 9.92628953e-02 9.94883665e-02 9.97140503e-02 + 9.99399466e-02 1.00166055e-01 1.00392376e-01 1.00618909e-01 1.00845653e-01 + 1.01072609e-01 1.01299776e-01 1.01527155e-01 1.01754744e-01 1.01982545e-01 + 1.02210556e-01 1.02438777e-01 1.02667209e-01 1.02895850e-01 1.03124702e-01 + 1.03353763e-01 1.03583034e-01 1.03812514e-01 1.04042203e-01 1.04272101e-01 + 1.04502207e-01 1.04732523e-01 1.04963046e-01 1.05193778e-01 1.05424718e-01 + 1.05655865e-01 1.05887221e-01 1.06118783e-01 1.06350553e-01 1.06582530e-01 + 1.06814713e-01 1.07047104e-01 1.07279701e-01 1.07512504e-01 1.07745513e-01 + 1.07978728e-01 1.08212148e-01 1.08445775e-01 1.08679606e-01 1.08913643e-01 + 1.09147884e-01 1.09382331e-01 1.09616982e-01 1.09851837e-01 1.10086896e-01 + 1.10322160e-01 1.10557627e-01 1.10793298e-01 1.11029172e-01 1.11265249e-01 + 1.11501530e-01 1.11738013e-01 1.11974699e-01 1.12211587e-01 1.12448678e-01 + 1.12685971e-01 1.12923465e-01 1.13161162e-01 1.13399059e-01 1.13637158e-01 + 1.13875458e-01 1.14113960e-01 1.14352661e-01 1.14591564e-01 1.14830666e-01 + 1.15069969e-01 1.15309472e-01 1.15549174e-01 1.15789076e-01 1.16029178e-01 + 1.16269478e-01 1.16509978e-01 1.16750676e-01 1.16991573e-01 1.17232669e-01 + 1.17473962e-01 1.17715454e-01 1.17957143e-01 1.18199030e-01 1.18441115e-01 + 1.18683397e-01 1.18925875e-01 1.19168551e-01 1.19411423e-01 1.19654492e-01 + 1.19897757e-01 1.20141218e-01 1.20384875e-01 1.20628728e-01 1.20872776e-01 + 1.21117020e-01 1.21361458e-01 1.21606092e-01 1.21850920e-01 1.22095943e-01 + 1.22341160e-01 1.22586571e-01 1.22832176e-01 1.23077975e-01 1.23323967e-01 + 1.23570153e-01 1.23816532e-01 1.24063104e-01 1.24309869e-01 1.24556826e-01 + 1.24803975e-01 1.25051317e-01 1.25298851e-01 1.25546576e-01 1.25794494e-01 + 1.26042602e-01 1.26290902e-01 1.26539393e-01 1.26788074e-01 1.27036946e-01 + 1.27286009e-01 1.27535261e-01 1.27784704e-01 1.28034337e-01 1.28284159e-01 + 1.28534171e-01 1.28784372e-01 1.29034762e-01 1.29285340e-01 1.29536108e-01 + 1.29787064e-01 1.30038208e-01 1.30289540e-01 1.30541060e-01 1.30792768e-01 + 1.31044663e-01 1.31296746e-01 1.31549015e-01 1.31801471e-01 1.32054115e-01 + 1.32306944e-01 1.32559960e-01 1.32813162e-01 1.33066550e-01 1.33320123e-01 + 1.33573882e-01 1.33827826e-01 1.34081956e-01 1.34336270e-01 1.34590769e-01 + 1.34845452e-01 1.35100320e-01 1.35355372e-01 1.35610608e-01 1.35866027e-01 + 1.36121630e-01 1.36377417e-01 1.36633386e-01 1.36889538e-01 1.37145873e-01 + 1.37402391e-01 1.37659091e-01 1.37915973e-01 1.38173037e-01 1.38430283e-01 + 1.38687710e-01 1.38945318e-01 1.39203108e-01 1.39461079e-01 1.39719230e-01 + 1.39977562e-01 1.40236074e-01 1.40494766e-01 1.40753639e-01 1.41012691e-01 + 1.41271922e-01 1.41531333e-01 1.41790923e-01 1.42050692e-01 1.42310640e-01 + 1.42570766e-01 1.42831071e-01 1.43091554e-01 1.43352214e-01 1.43613053e-01 + 1.43874069e-01 1.44135262e-01 1.44396633e-01 1.44658180e-01 1.44919904e-01 + 1.45181805e-01 1.45443882e-01 1.45706135e-01 1.45968565e-01 1.46231170e-01 + 1.46493950e-01 1.46756906e-01 1.47020037e-01 1.47283343e-01 1.47546824e-01 + 1.47810479e-01 1.48074308e-01 1.48338312e-01 1.48602490e-01 1.48866841e-01 + 1.49131366e-01 1.49396065e-01 1.49660936e-01 1.49925981e-01 1.50191198e-01 + 1.50456588e-01 1.50722150e-01 1.50987884e-01 1.51253790e-01 1.51519868e-01 + 1.51786118e-01 1.52052539e-01 1.52319131e-01 1.52585894e-01 1.52852827e-01 + 1.53119932e-01 1.53387206e-01 1.53654651e-01 1.53922266e-01 1.54190050e-01 + 1.54458004e-01 1.54726127e-01 1.54994420e-01 1.55262881e-01 1.55531511e-01 + 1.55800310e-01 1.56069277e-01 1.56338412e-01 1.56607715e-01 1.56877186e-01 + 1.57146824e-01 1.57416630e-01 1.57686603e-01 1.57956743e-01 1.58227049e-01 + 1.58497522e-01 1.58768161e-01 1.59038967e-01 1.59309938e-01 1.59581075e-01 + 1.59852378e-01 1.60123846e-01 1.60395479e-01 1.60667277e-01 1.60939240e-01 + 1.61211367e-01 1.61483659e-01 1.61756114e-01 1.62028734e-01 1.62301517e-01 + 1.62574464e-01 1.62847574e-01 1.63120847e-01 1.63394283e-01 1.63667882e-01 + 1.63941644e-01 1.64215567e-01 1.64489653e-01 1.64763901e-01 1.65038310e-01 + 1.65312881e-01 1.65587613e-01 1.65862506e-01 1.66137560e-01 1.66412775e-01 + 1.66688150e-01 1.66963686e-01 1.67239381e-01 1.67515237e-01 1.67791252e-01 + 1.68067427e-01 1.68343761e-01 1.68620254e-01 1.68896906e-01 1.69173717e-01 + 1.69450686e-01 1.69727813e-01 1.70005098e-01 1.70282542e-01 1.70560143e-01 + 1.70837901e-01 1.71115817e-01 1.71393889e-01 1.71672119e-01 1.71950505e-01 + 1.72229048e-01 1.72507747e-01 1.72786602e-01 1.73065613e-01 1.73344779e-01 + 1.73624101e-01 1.73903579e-01 1.74183211e-01 1.74462998e-01 1.74742940e-01 + 1.75023036e-01 1.75303286e-01 1.75583691e-01 1.75864249e-01 1.76144961e-01 + 1.76425826e-01 1.76706845e-01 1.76988017e-01 1.77269341e-01 1.77550818e-01 + 1.77832448e-01 1.78114229e-01 1.78396163e-01 1.78678248e-01 1.78960486e-01 + 1.79242874e-01 1.79525414e-01 1.79808105e-01 1.80090946e-01 1.80373938e-01 + 1.80657081e-01 1.80940374e-01 1.81223816e-01 1.81507409e-01 1.81791151e-01 + 1.82075043e-01 1.82359084e-01 1.82643273e-01 1.82927612e-01 1.83212099e-01 + 1.83496734e-01 1.83781518e-01 1.84066450e-01 1.84351529e-01 1.84636756e-01 + 1.84922131e-01 1.85207652e-01 1.85493321e-01 1.85779136e-01 1.86065098e-01 + 1.86351206e-01 1.86637461e-01 1.86923861e-01 1.87210407e-01 1.87497099e-01 + 1.87783936e-01 1.88070919e-01 1.88358046e-01 1.88645318e-01 1.88932734e-01 + 1.89220295e-01 1.89508000e-01 1.89795849e-01 1.90083842e-01 1.90371978e-01 + 1.90660258e-01 1.90948681e-01 1.91237246e-01 1.91525955e-01 1.91814806e-01 + 1.92103799e-01 1.92392935e-01 1.92682212e-01 1.92971631e-01 1.93261192e-01 + 1.93550894e-01 1.93840737e-01 1.94130721e-01 1.94420846e-01 1.94711111e-01 + 1.95001517e-01 1.95292063e-01 1.95582748e-01 1.95873574e-01 1.96164539e-01 + 1.96455643e-01 1.96746886e-01 1.97038269e-01 1.97329790e-01 1.97621449e-01 + 1.97913247e-01 1.98205183e-01 1.98497257e-01 1.98789469e-01 1.99081818e-01 + 1.99374304e-01 1.99666928e-01 1.99959688e-01 2.00252585e-01 2.00545619e-01 + 2.00838789e-01 2.01132095e-01 2.01425537e-01 2.01719114e-01 2.02012828e-01 + 2.02306676e-01 2.02600660e-01 2.02894778e-01 2.03189031e-01 2.03483419e-01 + 2.03777941e-01 2.04072597e-01 2.04367387e-01 2.04662311e-01 2.04957368e-01 + 2.05252558e-01 2.05547882e-01 2.05843338e-01 2.06138928e-01 2.06434649e-01 + 2.06730503e-01 2.07026489e-01 2.07322607e-01 2.07618857e-01 2.07915238e-01 + 2.08211750e-01 2.08508394e-01 2.08805168e-01 2.09102073e-01 2.09399109e-01 + 2.09696275e-01 2.09993571e-01 2.10290997e-01 2.10588552e-01 2.10886237e-01 + 2.11184052e-01 2.11481995e-01 2.11780068e-01 2.12078269e-01 2.12376598e-01 + 2.12675056e-01 2.12973642e-01 2.13272356e-01 2.13571197e-01 2.13870166e-01 + 2.14169263e-01 2.14468486e-01 2.14767837e-01 2.15067314e-01 2.15366917e-01 + 2.15666647e-01 2.15966503e-01 2.16266485e-01 2.16566592e-01 2.16866825e-01 + 2.17167184e-01 2.17467667e-01 2.17768276e-01 2.18069009e-01 2.18369866e-01 + 2.18670848e-01 2.18971954e-01 2.19273184e-01 2.19574538e-01 2.19876015e-01 + 2.20177615e-01 2.20479339e-01 2.20781185e-01 2.21083155e-01 2.21385246e-01 + 2.21687460e-01 2.21989797e-01 2.22292255e-01 2.22594835e-01 2.22897536e-01 + 2.23200359e-01 2.23503303e-01 2.23806367e-01 2.24109553e-01 2.24412859e-01 + 2.24716285e-01 2.25019832e-01 2.25323498e-01 2.25627285e-01 2.25931191e-01 + 2.26235216e-01 2.26539360e-01 2.26843623e-01 2.27148005e-01 2.27452506e-01 + 2.27757125e-01 2.28061862e-01 2.28366717e-01 2.28671690e-01 2.28976780e-01 + 2.29281988e-01 2.29587313e-01 2.29892755e-01 2.30198313e-01 2.30503989e-01 + 2.30809780e-01 2.31115688e-01 2.31421712e-01 2.31727852e-01 2.32034107e-01 + 2.32340478e-01 2.32646964e-01 2.32953565e-01 2.33260280e-01 2.33567111e-01 + 2.33874055e-01 2.34181114e-01 2.34488287e-01 2.34795574e-01 2.35102975e-01 + 2.35410489e-01 2.35718116e-01 2.36025856e-01 2.36333709e-01 2.36641675e-01 + 2.36949753e-01 2.37257943e-01 2.37566246e-01 2.37874660e-01 2.38183186e-01 + 2.38491824e-01 2.38800572e-01 2.39109432e-01 2.39418403e-01 2.39727484e-01 + 2.40036676e-01 2.40345978e-01 2.40655391e-01 2.40964913e-01 2.41274545e-01 + 2.41584286e-01 2.41894137e-01 2.42204097e-01 2.42514166e-01 2.42824344e-01 + 2.43134630e-01 2.43445024e-01 2.43755527e-01 2.44066138e-01 2.44376856e-01 + 2.44687682e-01 2.44998615e-01 2.45309656e-01 2.45620803e-01 2.45932058e-01 + 2.46243419e-01 2.46554886e-01 2.46866459e-01 2.47178139e-01 2.47489924e-01 + 2.47801815e-01 2.48113812e-01 2.48425913e-01 2.48738120e-01 2.49050431e-01 + 2.49362848e-01 2.49675368e-01 2.49987993e-01 2.50300722e-01 2.50613555e-01 + 2.50926492e-01 2.51239532e-01 2.51552675e-01 2.51865922e-01 2.52179271e-01 + 2.52492723e-01 2.52806278e-01 2.53119935e-01 2.53433694e-01 2.53747555e-01 + 2.54061518e-01 2.54375582e-01 2.54689748e-01 2.55004015e-01 2.55318383e-01 + 2.55632851e-01 2.55947421e-01 2.56262090e-01 2.56576860e-01 2.56891730e-01 + 2.57206700e-01 2.57521770e-01 2.57836938e-01 2.58152207e-01 2.58467574e-01 + 2.58783040e-01 2.59098605e-01 2.59414268e-01 2.59730029e-01 2.60045889e-01 + 2.60361847e-01 2.60677902e-01 2.60994055e-01 2.61310305e-01 2.61626652e-01 + 2.61943096e-01 2.62259637e-01 2.62576275e-01 2.62893009e-01 2.63209839e-01 + 2.63526765e-01 2.63843787e-01 2.64160905e-01 2.64478118e-01 2.64795426e-01 + 2.65112830e-01 2.65430328e-01 2.65747921e-01 2.66065608e-01 2.66383390e-01 + 2.66701265e-01 2.67019235e-01 2.67337298e-01 2.67655455e-01 2.67973706e-01 + 2.68292049e-01 2.68610485e-01 2.68929014e-01 2.69247636e-01 2.69566350e-01 + 2.69885156e-01 2.70204055e-01 2.70523045e-01 2.70842127e-01 2.71161300e-01 + 2.71480564e-01 2.71799920e-01 2.72119366e-01 2.72438903e-01 2.72758531e-01 + 2.73078249e-01 2.73398057e-01 2.73717955e-01 2.74037942e-01 2.74358019e-01 + 2.74678186e-01 2.74998442e-01 2.75318787e-01 2.75639220e-01 2.75959743e-01 + 2.76280353e-01 2.76601052e-01 2.76921839e-01 2.77242714e-01 2.77563676e-01 + 2.77884726e-01 2.78205864e-01 2.78527088e-01 2.78848399e-01 2.79169798e-01 + 2.79491282e-01 2.79812853e-01 2.80134510e-01 2.80456254e-01 2.80778083e-01 + 2.81099997e-01 2.81421997e-01 2.81744083e-01 2.82066253e-01 2.82388508e-01 + 2.82710848e-01 2.83033273e-01 2.83355782e-01 2.83678374e-01 2.84001051e-01 + 2.84323812e-01 2.84646656e-01 2.84969584e-01 2.85292594e-01 2.85615688e-01 + 2.85938865e-01 2.86262124e-01 2.86585466e-01 2.86908890e-01 2.87232396e-01 + 2.87555984e-01 2.87879654e-01 2.88203405e-01 2.88527238e-01 2.88851152e-01 + 2.89175147e-01 2.89499222e-01 2.89823378e-01 2.90147615e-01 2.90471932e-01 + 2.90796329e-01 2.91120806e-01 2.91445362e-01 2.91769999e-01 2.92094714e-01 + 2.92419508e-01 2.92744382e-01 2.93069334e-01 2.93394365e-01 2.93719474e-01 + 2.94044662e-01 2.94369927e-01 2.94695271e-01 2.95020692e-01 2.95346191e-01 + 2.95671767e-01 2.95997420e-01 2.96323150e-01 2.96648956e-01 2.96974840e-01 + 2.97300799e-01 2.97626835e-01 2.97952947e-01 2.98279135e-01 2.98605399e-01 + 2.98931738e-01 2.99258152e-01 2.99584642e-01 2.99911206e-01 3.00237845e-01 + 3.00564559e-01 3.00891347e-01 3.01218209e-01 3.01545146e-01 3.01872156e-01 + 3.02199240e-01 3.02526398e-01 3.02853628e-01 3.03180932e-01 3.03508309e-01 + 3.03835759e-01 3.04163281e-01 3.04490876e-01 3.04818543e-01 3.05146281e-01 + 3.05474092e-01 3.05801975e-01 3.06129929e-01 3.06457954e-01 3.06786051e-01 + 3.07114218e-01 3.07442456e-01 3.07770765e-01 3.08099145e-01 3.08427594e-01 + 3.08756114e-01 3.09084703e-01 3.09413363e-01 3.09742091e-01 3.10070890e-01 + 3.10399757e-01 3.10728693e-01 3.11057699e-01 3.11386772e-01 3.11715915e-01 + 3.12045125e-01 3.12374404e-01 3.12703751e-01 3.13033165e-01 3.13362647e-01 + 3.13692197e-01 3.14021813e-01 3.14351497e-01 3.14681248e-01 3.15011065e-01 + 3.15340949e-01 3.15670899e-01 3.16000915e-01 3.16330997e-01 3.16661145e-01 + 3.16991359e-01 3.17321638e-01 3.17651983e-01 3.17982392e-01 3.18312867e-01 + 3.18643406e-01 3.18974010e-01 3.19304678e-01 3.19635411e-01 3.19966207e-01 + 3.20297067e-01 3.20627992e-01 3.20958979e-01 3.21290030e-01 3.21621144e-01 + 3.21952321e-01 3.22283561e-01 3.22614864e-01 3.22946229e-01 3.23277656e-01 + 3.23609146e-01 3.23940697e-01 3.24272310e-01 3.24603985e-01 3.24935721e-01 + 3.25267519e-01 3.25599377e-01 3.25931297e-01 3.26263277e-01 3.26595317e-01 + 3.26927419e-01 3.27259580e-01 3.27591801e-01 3.27924082e-01 3.28256423e-01 + 3.28588824e-01 3.28921283e-01 3.29253802e-01 3.29586380e-01 3.29919017e-01 + 3.30251712e-01 3.30584466e-01 3.30917278e-01 3.31250149e-01 3.31583077e-01 + 3.31916063e-01 3.32249107e-01 3.32582208e-01 3.32915366e-01 3.33248582e-01 + 3.33581854e-01 3.33915183e-01 3.34248569e-01 3.34582011e-01 3.34915510e-01 + 3.35249064e-01 3.35582675e-01 3.35916341e-01 3.36250062e-01 3.36583839e-01 + 3.36917672e-01 3.37251559e-01 3.37585501e-01 3.37919498e-01 3.38253550e-01 + 3.38587656e-01 3.38921816e-01 3.39256030e-01 3.39590298e-01 3.39924620e-01 + 3.40258995e-01 3.40593423e-01 3.40927905e-01 3.41262440e-01 3.41597027e-01 + 3.41931667e-01 3.42266360e-01 3.42601105e-01 3.42935903e-01 3.43270752e-01 + 3.43605653e-01 3.43940606e-01 3.44275610e-01 3.44610666e-01 3.44945772e-01 + 3.45280930e-01 3.45616139e-01 3.45951398e-01 3.46286708e-01 3.46622068e-01 + 3.46957478e-01 3.47292938e-01 3.47628448e-01 3.47964008e-01 3.48299617e-01 + 3.48635275e-01 3.48970983e-01 3.49306740e-01 3.49642545e-01 3.49978399e-01 + 3.50314302e-01 3.50650253e-01 3.50986252e-01 3.51322299e-01 3.51658394e-01 + 3.51994536e-01 3.52330726e-01 3.52666964e-01 3.53003248e-01 3.53339580e-01 + 3.53675958e-01 3.54012383e-01 3.54348855e-01 3.54685373e-01 3.55021937e-01 + 3.55358547e-01 3.55695203e-01 3.56031904e-01 3.56368651e-01 3.56705444e-01 + 3.57042281e-01 3.57379164e-01 3.57716092e-01 3.58053064e-01 3.58390081e-01 + 3.58727142e-01 3.59064247e-01 3.59401397e-01 3.59738590e-01 3.60075827e-01 + 3.60413107e-01 3.60750431e-01 3.61087799e-01 3.61425209e-01 3.61762662e-01 + 3.62100158e-01 3.62437696e-01 3.62775277e-01 3.63112900e-01 3.63450566e-01 + 3.63788273e-01 3.64126022e-01 3.64463812e-01 3.64801645e-01 3.65139518e-01 + 3.65477432e-01 3.65815388e-01 3.66153384e-01 3.66491421e-01 3.66829498e-01 + 3.67167616e-01 3.67505774e-01 3.67843971e-01 3.68182209e-01 3.68520487e-01 + 3.68858803e-01 3.69197160e-01 3.69535555e-01 3.69873990e-01 3.70212463e-01 + 3.70550975e-01 3.70889526e-01 3.71228115e-01 3.71566742e-01 3.71905408e-01 + 3.72244111e-01 3.72582852e-01 3.72921631e-01 3.73260447e-01 3.73599300e-01 + 3.73938191e-01 3.74277119e-01 3.74616083e-01 3.74955084e-01 3.75294122e-01 + 3.75633196e-01 3.75972306e-01 3.76311452e-01 3.76650634e-01 3.76989852e-01 + 3.77329105e-01 3.77668394e-01 3.78007718e-01 3.78347077e-01 3.78686471e-01 + 3.79025899e-01 3.79365363e-01 3.79704861e-01 3.80044393e-01 3.80383959e-01 + 3.80723559e-01 3.81063194e-01 3.81402861e-01 3.81742563e-01 3.82082298e-01 + 3.82422065e-01 3.82761866e-01 3.83101700e-01 3.83441567e-01 3.83781466e-01 + 3.84121398e-01 3.84461362e-01 3.84801358e-01 3.85141386e-01 3.85481446e-01 + 3.85821538e-01 3.86161661e-01 3.86501816e-01 3.86842001e-01 3.87182218e-01 + 3.87522466e-01 3.87862744e-01 3.88203053e-01 3.88543393e-01 3.88883763e-01 + 3.89224162e-01 3.89564592e-01 3.89905052e-01 3.90245541e-01 3.90586060e-01 + 3.90926609e-01 3.91267186e-01 3.91607793e-01 3.91948428e-01 3.92289093e-01 + 3.92629785e-01 3.92970507e-01 3.93311256e-01 3.93652034e-01 3.93992840e-01 + 3.94333674e-01 3.94674535e-01 3.95015424e-01 3.95356341e-01 3.95697284e-01 + 3.96038255e-01 3.96379253e-01 3.96720277e-01 3.97061328e-01 3.97402406e-01 + 3.97743510e-01 3.98084640e-01 3.98425796e-01 3.98766978e-01 3.99108186e-01 + 3.99449420e-01 3.99790679e-01 4.00131963e-01 4.00473272e-01 4.00814607e-01 + 4.01155966e-01 4.01497350e-01 4.01838759e-01 4.02180192e-01 4.02521649e-01 + 4.02863130e-01 4.03204636e-01 4.03546165e-01 4.03887718e-01 4.04229294e-01 + 4.04570894e-01 4.04912517e-01 4.05254163e-01 4.05595832e-01 4.05937524e-01 + 4.06279238e-01 4.06620975e-01 4.06962734e-01 4.07304516e-01 4.07646319e-01 + 4.07988145e-01 4.08329992e-01 4.08671861e-01 4.09013751e-01 4.09355663e-01 + 4.09697596e-01 4.10039549e-01 4.10381524e-01 4.10723520e-01 4.11065536e-01 + 4.11407572e-01 4.11749629e-01 4.12091706e-01 4.12433803e-01 4.12775920e-01 + 4.13118057e-01 4.13460213e-01 4.13802389e-01 4.14144583e-01 4.14486798e-01 + 4.14829031e-01 4.15171283e-01 4.15513553e-01 4.15855843e-01 4.16198150e-01 + 4.16540476e-01 4.16882821e-01 4.17225183e-01 4.17567563e-01 4.17909961e-01 + 4.18252376e-01 4.18594809e-01 4.18937259e-01 4.19279726e-01 4.19622210e-01 + 4.19964711e-01 4.20307229e-01 4.20649763e-01 4.20992314e-01 4.21334881e-01 + 4.21677465e-01 4.22020064e-01 4.22362679e-01 4.22705310e-01 4.23047957e-01 + 4.23390619e-01 4.23733296e-01 4.24075988e-01 4.24418696e-01 4.24761418e-01 + 4.25104155e-01 4.25446907e-01 4.25789673e-01 4.26132454e-01 4.26475249e-01 + 4.26818057e-01 4.27160880e-01 4.27503717e-01 4.27846567e-01 4.28189430e-01 + 4.28532307e-01 4.28875197e-01 4.29218101e-01 4.29561017e-01 4.29903946e-01 + 4.30246888e-01 4.30589842e-01 4.30932808e-01 4.31275787e-01 4.31618778e-01 + 4.31961781e-01 4.32304796e-01 4.32647822e-01 4.32990860e-01 4.33333909e-01 + 4.33676970e-01 4.34020042e-01 4.34363125e-01 4.34706219e-01 4.35049323e-01 + 4.35392438e-01 4.35735564e-01 4.36078700e-01 4.36421846e-01 4.36765002e-01 + 4.37108168e-01 4.37451344e-01 4.37794529e-01 4.38137724e-01 4.38480929e-01 + 4.38824142e-01 4.39167365e-01 4.39510597e-01 4.39853837e-01 4.40197087e-01 + 4.40540345e-01 4.40883611e-01 4.41226885e-01 4.41570168e-01 4.41913459e-01 + 4.42256758e-01 4.42600064e-01 4.42943378e-01 4.43286700e-01 4.43630029e-01 + 4.43973365e-01 4.44316708e-01 4.44660058e-01 4.45003416e-01 4.45346779e-01 + 4.45690150e-01 4.46033526e-01 4.46376910e-01 4.46720299e-01 4.47063694e-01 + 4.47407095e-01 4.47750502e-01 4.48093915e-01 4.48437333e-01 4.48780757e-01 + 4.49124185e-01 4.49467619e-01 4.49811058e-01 4.50154502e-01 4.50497950e-01 + 4.50841403e-01 4.51184861e-01 4.51528322e-01 4.51871788e-01 4.52215259e-01 + 4.52558733e-01 4.52902210e-01 4.53245692e-01 4.53589177e-01 4.53932665e-01 + 4.54276157e-01 4.54619652e-01 4.54963150e-01 4.55306651e-01 4.55650154e-01 + 2.08130000e-04 2.08281191e-04 2.08734762e-04 2.09490714e-04 2.10549046e-04 + 2.11909757e-04 2.13572846e-04 2.15538310e-04 2.17806148e-04 2.20376358e-04 + 2.23248936e-04 2.26423882e-04 2.29901190e-04 2.33680858e-04 2.37762883e-04 + 2.42147260e-04 2.46833984e-04 2.51823051e-04 2.57114457e-04 2.62708196e-04 + 2.68604263e-04 2.74802652e-04 2.81303356e-04 2.88106370e-04 2.95211687e-04 + 3.02619299e-04 3.10329200e-04 3.18341382e-04 3.26655837e-04 3.35272557e-04 + 3.44191533e-04 3.53412758e-04 3.62936221e-04 3.72761913e-04 3.82889825e-04 + 3.93319947e-04 4.04052269e-04 4.15086779e-04 4.26423468e-04 4.38062324e-04 + 4.50003336e-04 4.62246492e-04 4.74791780e-04 4.87639188e-04 5.00788703e-04 + 5.14240312e-04 5.27994002e-04 5.42049760e-04 5.56407572e-04 5.71067423e-04 + 5.86029300e-04 6.01293187e-04 6.16859071e-04 6.32726934e-04 6.48896763e-04 + 6.65368541e-04 6.82142252e-04 6.99217880e-04 7.16595407e-04 7.34274817e-04 + 7.52256092e-04 7.70539216e-04 7.89124169e-04 8.08010934e-04 8.27199493e-04 + 8.46689825e-04 8.66481913e-04 8.86575737e-04 9.06971278e-04 9.27668514e-04 + 9.48667427e-04 9.69967995e-04 9.91570198e-04 1.01347401e-03 1.03567942e-03 + 1.05818640e-03 1.08099493e-03 1.10410498e-03 1.12751654e-03 1.15122957e-03 + 1.17524406e-03 1.19955999e-03 1.22417733e-03 1.24909605e-03 1.27431613e-03 + 1.29983755e-03 1.32566029e-03 1.35178430e-03 1.37820958e-03 1.40493610e-03 + 1.43196382e-03 1.45929272e-03 1.48692278e-03 1.51485397e-03 1.54308626e-03 + 1.57161963e-03 1.60045404e-03 1.62958946e-03 1.65902588e-03 1.68876325e-03 + 1.71880156e-03 1.74914077e-03 1.77978085e-03 1.81072177e-03 1.84196351e-03 + 1.87350602e-03 1.90534929e-03 1.93749327e-03 1.96993795e-03 2.00268328e-03 + 2.03572923e-03 2.06907577e-03 2.10272288e-03 2.13667051e-03 2.17091863e-03 + 2.20546721e-03 2.24031622e-03 2.27546562e-03 2.31091538e-03 2.34666546e-03 + 2.38271583e-03 2.41906645e-03 2.45571729e-03 2.49266831e-03 2.52991947e-03 + 2.56747075e-03 2.60532209e-03 2.64347347e-03 2.68192485e-03 2.72067619e-03 + 2.75972745e-03 2.79907859e-03 2.83872959e-03 2.87868038e-03 2.91893095e-03 + 2.95948125e-03 3.00033123e-03 3.04148087e-03 3.08293011e-03 3.12467892e-03 + 3.16672726e-03 3.20907509e-03 3.25172236e-03 3.29466904e-03 3.33791508e-03 + 3.38146044e-03 3.42530507e-03 3.46944894e-03 3.51389201e-03 3.55863422e-03 + 3.60367554e-03 3.64901591e-03 3.69465531e-03 3.74059367e-03 3.78683096e-03 + 3.83336714e-03 3.88020215e-03 3.92733595e-03 3.97476850e-03 4.02249975e-03 + 4.07052965e-03 4.11885815e-03 4.16748522e-03 4.21641079e-03 4.26563483e-03 + 4.31515728e-03 4.36497811e-03 4.41509725e-03 4.46551466e-03 4.51623029e-03 + 4.56724409e-03 4.61855601e-03 4.67016601e-03 4.72207403e-03 4.77428002e-03 + 4.82678393e-03 4.87958570e-03 4.93268530e-03 4.98608266e-03 5.03977774e-03 + 5.09377048e-03 5.14806083e-03 5.20264873e-03 5.25753414e-03 5.31271700e-03 + 5.36819725e-03 5.42397485e-03 5.48004973e-03 5.53642185e-03 5.59309115e-03 + 5.65005757e-03 5.70732106e-03 5.76488157e-03 5.82273903e-03 5.88089339e-03 + 5.93934459e-03 5.99809258e-03 6.05713731e-03 6.11647870e-03 6.17611671e-03 + 6.23605128e-03 6.29628235e-03 6.35680986e-03 6.41763375e-03 6.47875396e-03 + 6.54017044e-03 6.60188312e-03 6.66389194e-03 6.72619685e-03 6.78879778e-03 + 6.85169468e-03 6.91488748e-03 6.97837611e-03 7.04216053e-03 7.10624066e-03 + 7.17061645e-03 7.23528783e-03 7.30025474e-03 7.36551712e-03 7.43107490e-03 + 7.49692802e-03 7.56307641e-03 7.62952002e-03 7.69625878e-03 7.76329262e-03 + 7.83062147e-03 7.89824528e-03 7.96616398e-03 8.03437750e-03 8.10288577e-03 + 8.17168874e-03 8.24078632e-03 8.31017847e-03 8.37986510e-03 8.44984615e-03 + 8.52012155e-03 8.59069124e-03 8.66155515e-03 8.73271321e-03 8.80416535e-03 + 8.87591149e-03 8.94795158e-03 9.02028554e-03 9.09291331e-03 9.16583480e-03 + 9.23904995e-03 9.31255870e-03 9.38636096e-03 9.46045668e-03 9.53484577e-03 + 9.60952816e-03 9.68450379e-03 9.75977258e-03 9.83533445e-03 9.91118934e-03 + 9.98733717e-03 1.00637779e-02 1.01405114e-02 1.02175376e-02 1.02948564e-02 + 1.03724679e-02 1.04503718e-02 1.05285681e-02 1.06070568e-02 1.06858378e-02 + 1.07649109e-02 1.08442762e-02 1.09239335e-02 1.10038828e-02 1.10841240e-02 + 1.11646570e-02 1.12454817e-02 1.13265980e-02 1.14080060e-02 1.14897054e-02 + 1.15716963e-02 1.16539785e-02 1.17365519e-02 1.18194166e-02 1.19025723e-02 + 1.19860191e-02 1.20697568e-02 1.21537854e-02 1.22381047e-02 1.23227148e-02 + 1.24076155e-02 1.24928067e-02 1.25782883e-02 1.26640604e-02 1.27501227e-02 + 1.28364752e-02 1.29231179e-02 1.30100506e-02 1.30972732e-02 1.31847858e-02 + 1.32725881e-02 1.33606801e-02 1.34490618e-02 1.35377329e-02 1.36266936e-02 + 1.37159436e-02 1.38054829e-02 1.38953113e-02 1.39854289e-02 1.40758355e-02 + 1.41665311e-02 1.42575155e-02 1.43487886e-02 1.44403504e-02 1.45322008e-02 + 1.46243398e-02 1.47167671e-02 1.48094827e-02 1.49024866e-02 1.49957786e-02 + 1.50893587e-02 1.51832267e-02 1.52773826e-02 1.53718263e-02 1.54665577e-02 + 1.55615767e-02 1.56568832e-02 1.57524771e-02 1.58483584e-02 1.59445269e-02 + 1.60409825e-02 1.61377252e-02 1.62347549e-02 1.63320714e-02 1.64296747e-02 + 1.65275647e-02 1.66257413e-02 1.67242043e-02 1.68229538e-02 1.69219896e-02 + 1.70213116e-02 1.71209197e-02 1.72208138e-02 1.73209939e-02 1.74214598e-02 + 1.75222114e-02 1.76232487e-02 1.77245715e-02 1.78261798e-02 1.79280734e-02 + 1.80302523e-02 1.81327163e-02 1.82354654e-02 1.83384994e-02 1.84418184e-02 + 1.85454220e-02 1.86493104e-02 1.87534833e-02 1.88579407e-02 1.89626824e-02 + 1.90677084e-02 1.91730186e-02 1.92786129e-02 1.93844911e-02 1.94906532e-02 + 1.95970991e-02 1.97038286e-02 1.98108417e-02 1.99181382e-02 2.00257182e-02 + 2.01335813e-02 2.02417277e-02 2.03501571e-02 2.04588694e-02 2.05678646e-02 + 2.06771425e-02 2.07867031e-02 2.08965462e-02 2.10066717e-02 2.11170796e-02 + 2.12277697e-02 2.13387419e-02 2.14499962e-02 2.15615323e-02 2.16733503e-02 + 2.17854499e-02 2.18978311e-02 2.20104938e-02 2.21234379e-02 2.22366633e-02 + 2.23501698e-02 2.24639574e-02 2.25780260e-02 2.26923753e-02 2.28070055e-02 + 2.29219162e-02 2.30371074e-02 2.31525791e-02 2.32683311e-02 2.33843632e-02 + 2.35006755e-02 2.36172677e-02 2.37341397e-02 2.38512915e-02 2.39687230e-02 + 2.40864339e-02 2.42044243e-02 2.43226940e-02 2.44412429e-02 2.45600709e-02 + 2.46791779e-02 2.47985637e-02 2.49182282e-02 2.50381714e-02 2.51583931e-02 + 2.52788932e-02 2.53996717e-02 2.55207283e-02 2.56420629e-02 2.57636755e-02 + 2.58855660e-02 2.60077341e-02 2.61301799e-02 2.62529032e-02 2.63759039e-02 + 2.64991818e-02 2.66227368e-02 2.67465689e-02 2.68706779e-02 2.69950637e-02 + 2.71197262e-02 2.72446653e-02 2.73698808e-02 2.74953726e-02 2.76211406e-02 + 2.77471848e-02 2.78735049e-02 2.80001009e-02 2.81269726e-02 2.82541199e-02 + 2.83815427e-02 2.85092409e-02 2.86372144e-02 2.87654630e-02 2.88939867e-02 + 2.90227852e-02 2.91518585e-02 2.92812065e-02 2.94108290e-02 2.95407260e-02 + 2.96708972e-02 2.98013426e-02 2.99320621e-02 3.00630555e-02 3.01943227e-02 + 3.03258636e-02 3.04576781e-02 3.05897660e-02 3.07221272e-02 3.08547616e-02 + 3.09876691e-02 3.11208496e-02 3.12543028e-02 3.13880288e-02 3.15220273e-02 + 3.16562983e-02 3.17908416e-02 3.19256571e-02 3.20607447e-02 3.21961042e-02 + 3.23317356e-02 3.24676386e-02 3.26038132e-02 3.27402593e-02 3.28769766e-02 + 3.30139652e-02 3.31512248e-02 3.32887554e-02 3.34265567e-02 3.35646288e-02 + 3.37029714e-02 3.38415844e-02 3.39804677e-02 3.41196212e-02 3.42590447e-02 + 3.43987381e-02 3.45387013e-02 3.46789341e-02 3.48194365e-02 3.49602082e-02 + 3.51012492e-02 3.52425593e-02 3.53841384e-02 3.55259864e-02 3.56681031e-02 + 3.58104884e-02 3.59531422e-02 3.60960643e-02 3.62392547e-02 3.63827131e-02 + 3.65264394e-02 3.66704335e-02 3.68146954e-02 3.69592247e-02 3.71040215e-02 + 3.72490856e-02 3.73944167e-02 3.75400149e-02 3.76858800e-02 3.78320118e-02 + 3.79784102e-02 3.81250751e-02 3.82720063e-02 3.84192037e-02 3.85666672e-02 + 3.87143966e-02 3.88623918e-02 3.90106526e-02 3.91591790e-02 3.93079707e-02 + 3.94570277e-02 3.96063498e-02 3.97559369e-02 3.99057888e-02 4.00559054e-02 + 4.02062865e-02 4.03569321e-02 4.05078419e-02 4.06590159e-02 4.08104539e-02 + 4.09621558e-02 4.11141214e-02 4.12663506e-02 4.14188432e-02 4.15715991e-02 + 4.17246182e-02 4.18779004e-02 4.20314454e-02 4.21852532e-02 4.23393235e-02 + 4.24936564e-02 4.26482515e-02 4.28031089e-02 4.29582283e-02 4.31136096e-02 + 4.32692526e-02 4.34251573e-02 4.35813234e-02 4.37377508e-02 4.38944395e-02 + 4.40513892e-02 4.42085998e-02 4.43660711e-02 4.45238031e-02 4.46817956e-02 + 4.48400483e-02 4.49985613e-02 4.51573343e-02 4.53163671e-02 4.54756598e-02 + 4.56352120e-02 4.57950237e-02 4.59550947e-02 4.61154249e-02 4.62760141e-02 + 4.64368622e-02 4.65979690e-02 4.67593344e-02 4.69209582e-02 4.70828403e-02 + 4.72449806e-02 4.74073789e-02 4.75700350e-02 4.77329488e-02 4.78961202e-02 + 4.80595489e-02 4.82232350e-02 4.83871781e-02 4.85513782e-02 4.87158351e-02 + 4.88805487e-02 4.90455188e-02 4.92107453e-02 4.93762280e-02 4.95419667e-02 + 4.97079614e-02 4.98742118e-02 5.00407179e-02 5.02074794e-02 5.03744963e-02 + 5.05417683e-02 5.07092953e-02 5.08770772e-02 5.10451138e-02 5.12134049e-02 + 5.13819505e-02 5.15507503e-02 5.17198043e-02 5.18891121e-02 5.20586738e-02 + 5.22284892e-02 5.23985580e-02 5.25688802e-02 5.27394555e-02 5.29102839e-02 + 5.30813652e-02 5.32526992e-02 5.34242858e-02 5.35961248e-02 5.37682161e-02 + 5.39405595e-02 5.41131548e-02 5.42860020e-02 5.44591008e-02 5.46324511e-02 + 5.48060527e-02 5.49799055e-02 5.51540094e-02 5.53283641e-02 5.55029695e-02 + 5.56778255e-02 5.58529319e-02 5.60282885e-02 5.62038952e-02 5.63797519e-02 + 5.65558583e-02 5.67322144e-02 5.69088199e-02 5.70856747e-02 5.72627786e-02 + 5.74401316e-02 5.76177334e-02 5.77955838e-02 5.79736828e-02 5.81520301e-02 + 5.83306256e-02 5.85094691e-02 5.86885605e-02 5.88678997e-02 5.90474864e-02 + 5.92273205e-02 5.94074018e-02 5.95877302e-02 5.97683055e-02 5.99491276e-02 + 6.01301963e-02 6.03115114e-02 6.04930728e-02 6.06748803e-02 6.08569338e-02 + 6.10392330e-02 6.12217779e-02 6.14045683e-02 6.15876039e-02 6.17708848e-02 + 6.19544105e-02 6.21381812e-02 6.23221964e-02 6.25064562e-02 6.26909603e-02 + 6.28757085e-02 6.30607008e-02 6.32459369e-02 6.34314167e-02 6.36171400e-02 + 6.38031067e-02 6.39893165e-02 6.41757694e-02 6.43624651e-02 6.45494036e-02 + 6.47365845e-02 6.49240078e-02 6.51116734e-02 6.52995809e-02 6.54877303e-02 + 6.56761215e-02 6.58647541e-02 6.60536282e-02 6.62427434e-02 6.64320997e-02 + 6.66216969e-02 6.68115348e-02 6.70016132e-02 6.71919320e-02 6.73824910e-02 + 6.75732900e-02 6.77643289e-02 6.79556075e-02 6.81471257e-02 6.83388832e-02 + 6.85308799e-02 6.87231157e-02 6.89155904e-02 6.91083037e-02 6.93012556e-02 + 6.94944458e-02 6.96878742e-02 6.98815407e-02 7.00754450e-02 7.02695870e-02 + 7.04639665e-02 7.06585833e-02 7.08534374e-02 7.10485284e-02 7.12438563e-02 + 7.14394208e-02 7.16352219e-02 7.18312593e-02 7.20275328e-02 7.22240423e-02 + 7.24207876e-02 7.26177686e-02 7.28149851e-02 7.30124368e-02 7.32101237e-02 + 7.34080456e-02 7.36062022e-02 7.38045935e-02 7.40032192e-02 7.42020791e-02 + 7.44011732e-02 7.46005012e-02 7.48000630e-02 7.49998583e-02 7.51998870e-02 + 7.54001490e-02 7.56006441e-02 7.58013720e-02 7.60023326e-02 7.62035258e-02 + 7.64049514e-02 7.66066092e-02 7.68084989e-02 7.70106206e-02 7.72129739e-02 + 7.74155587e-02 7.76183748e-02 7.78214221e-02 7.80247003e-02 7.82282094e-02 + 7.84319490e-02 7.86359192e-02 7.88401196e-02 7.90445501e-02 7.92492105e-02 + 7.94541007e-02 7.96592204e-02 7.98645695e-02 8.00701479e-02 8.02759553e-02 + 8.04819916e-02 8.06882565e-02 8.08947500e-02 8.11014718e-02 8.13084218e-02 + 8.15155998e-02 8.17230055e-02 8.19306389e-02 8.21384998e-02 8.23465879e-02 + 8.25549031e-02 8.27634452e-02 8.29722141e-02 8.31812095e-02 8.33904313e-02 + 8.35998794e-02 8.38095534e-02 8.40194533e-02 8.42295789e-02 8.44399299e-02 + 8.46505063e-02 8.48613078e-02 8.50723343e-02 8.52835855e-02 8.54950613e-02 + 8.57067616e-02 8.59186860e-02 8.61308346e-02 8.63432070e-02 8.65558031e-02 + 8.67686227e-02 8.69816656e-02 8.71949318e-02 8.74084208e-02 8.76221327e-02 + 8.78360672e-02 8.80502241e-02 8.82646033e-02 8.84792045e-02 8.86940276e-02 + 8.89090725e-02 8.91243388e-02 8.93398265e-02 8.95555354e-02 8.97714652e-02 + 8.99876159e-02 9.02039871e-02 9.04205788e-02 9.06373908e-02 9.08544228e-02 + 9.10716747e-02 9.12891463e-02 9.15068374e-02 9.17247478e-02 9.19428774e-02 + 9.21612260e-02 9.23797934e-02 9.25985793e-02 9.28175837e-02 9.30368064e-02 + 9.32562470e-02 9.34759056e-02 9.36957818e-02 9.39158756e-02 9.41361866e-02 + 9.43567148e-02 9.45774599e-02 9.47984219e-02 9.50196003e-02 9.52409952e-02 + 9.54626063e-02 9.56844334e-02 9.59064764e-02 9.61287350e-02 9.63512090e-02 + 9.65738984e-02 9.67968029e-02 9.70199222e-02 9.72432563e-02 9.74668050e-02 + 9.76905680e-02 9.79145452e-02 9.81387363e-02 9.83631413e-02 9.85877598e-02 + 9.88125918e-02 9.90376370e-02 9.92628953e-02 9.94883665e-02 9.97140503e-02 + 9.99399466e-02 1.00166055e-01 1.00392376e-01 1.00618909e-01 1.00845653e-01 + 1.01072609e-01 1.01299776e-01 1.01527155e-01 1.01754744e-01 1.01982545e-01 + 1.02210556e-01 1.02438777e-01 1.02667209e-01 1.02895850e-01 1.03124702e-01 + 1.03353763e-01 1.03583034e-01 1.03812514e-01 1.04042203e-01 1.04272101e-01 + 1.04502207e-01 1.04732523e-01 1.04963046e-01 1.05193778e-01 1.05424718e-01 + 1.05655865e-01 1.05887221e-01 1.06118783e-01 1.06350553e-01 1.06582530e-01 + 1.06814713e-01 1.07047104e-01 1.07279701e-01 1.07512504e-01 1.07745513e-01 + 1.07978728e-01 1.08212148e-01 1.08445775e-01 1.08679606e-01 1.08913643e-01 + 1.09147884e-01 1.09382331e-01 1.09616982e-01 1.09851837e-01 1.10086896e-01 + 1.10322160e-01 1.10557627e-01 1.10793298e-01 1.11029172e-01 1.11265249e-01 + 1.11501530e-01 1.11738013e-01 1.11974699e-01 1.12211587e-01 1.12448678e-01 + 1.12685971e-01 1.12923465e-01 1.13161162e-01 1.13399059e-01 1.13637158e-01 + 1.13875458e-01 1.14113960e-01 1.14352661e-01 1.14591564e-01 1.14830666e-01 + 1.15069969e-01 1.15309472e-01 1.15549174e-01 1.15789076e-01 1.16029178e-01 + 1.16269478e-01 1.16509978e-01 1.16750676e-01 1.16991573e-01 1.17232669e-01 + 1.17473962e-01 1.17715454e-01 1.17957143e-01 1.18199030e-01 1.18441115e-01 + 1.18683397e-01 1.18925875e-01 1.19168551e-01 1.19411423e-01 1.19654492e-01 + 1.19897757e-01 1.20141218e-01 1.20384875e-01 1.20628728e-01 1.20872776e-01 + 1.21117020e-01 1.21361458e-01 1.21606092e-01 1.21850920e-01 1.22095943e-01 + 1.22341160e-01 1.22586571e-01 1.22832176e-01 1.23077975e-01 1.23323967e-01 + 1.23570153e-01 1.23816532e-01 1.24063104e-01 1.24309869e-01 1.24556826e-01 + 1.24803975e-01 1.25051317e-01 1.25298851e-01 1.25546576e-01 1.25794494e-01 + 1.26042602e-01 1.26290902e-01 1.26539393e-01 1.26788074e-01 1.27036946e-01 + 1.27286009e-01 1.27535261e-01 1.27784704e-01 1.28034337e-01 1.28284159e-01 + 1.28534171e-01 1.28784372e-01 1.29034762e-01 1.29285340e-01 1.29536108e-01 + 1.29787064e-01 1.30038208e-01 1.30289540e-01 1.30541060e-01 1.30792768e-01 + 1.31044663e-01 1.31296746e-01 1.31549015e-01 1.31801471e-01 1.32054115e-01 + 1.32306944e-01 1.32559960e-01 1.32813162e-01 1.33066550e-01 1.33320123e-01 + 1.33573882e-01 1.33827826e-01 1.34081956e-01 1.34336270e-01 1.34590769e-01 + 1.34845452e-01 1.35100320e-01 1.35355372e-01 1.35610608e-01 1.35866027e-01 + 1.36121630e-01 1.36377417e-01 1.36633386e-01 1.36889538e-01 1.37145873e-01 + 1.37402391e-01 1.37659091e-01 1.37915973e-01 1.38173037e-01 1.38430283e-01 + 1.38687710e-01 1.38945318e-01 1.39203108e-01 1.39461079e-01 1.39719230e-01 + 1.39977562e-01 1.40236074e-01 1.40494766e-01 1.40753639e-01 1.41012691e-01 + 1.41271922e-01 1.41531333e-01 1.41790923e-01 1.42050692e-01 1.42310640e-01 + 1.42570766e-01 1.42831071e-01 1.43091554e-01 1.43352214e-01 1.43613053e-01 + 1.43874069e-01 1.44135262e-01 1.44396633e-01 1.44658180e-01 1.44919904e-01 + 1.45181805e-01 1.45443882e-01 1.45706135e-01 1.45968565e-01 1.46231170e-01 + 1.46493950e-01 1.46756906e-01 1.47020037e-01 1.47283343e-01 1.47546824e-01 + 1.47810479e-01 1.48074308e-01 1.48338312e-01 1.48602490e-01 1.48866841e-01 + 1.49131366e-01 1.49396065e-01 1.49660936e-01 1.49925981e-01 1.50191198e-01 + 1.50456588e-01 1.50722150e-01 1.50987884e-01 1.51253790e-01 1.51519868e-01 + 1.51786118e-01 1.52052539e-01 1.52319131e-01 1.52585894e-01 1.52852827e-01 + 1.53119932e-01 1.53387206e-01 1.53654651e-01 1.53922266e-01 1.54190050e-01 + 1.54458004e-01 1.54726127e-01 1.54994420e-01 1.55262881e-01 1.55531511e-01 + 1.55800310e-01 1.56069277e-01 1.56338412e-01 1.56607715e-01 1.56877186e-01 + 1.57146824e-01 1.57416630e-01 1.57686603e-01 1.57956743e-01 1.58227049e-01 + 1.58497522e-01 1.58768161e-01 1.59038967e-01 1.59309938e-01 1.59581075e-01 + 1.59852378e-01 1.60123846e-01 1.60395479e-01 1.60667277e-01 1.60939240e-01 + 1.61211367e-01 1.61483659e-01 1.61756114e-01 1.62028734e-01 1.62301517e-01 + 1.62574464e-01 1.62847574e-01 1.63120847e-01 1.63394283e-01 1.63667882e-01 + 1.63941644e-01 1.64215567e-01 1.64489653e-01 1.64763901e-01 1.65038310e-01 + 1.65312881e-01 1.65587613e-01 1.65862506e-01 1.66137560e-01 1.66412775e-01 + 1.66688150e-01 1.66963686e-01 1.67239381e-01 1.67515237e-01 1.67791252e-01 + 1.68067427e-01 1.68343761e-01 1.68620254e-01 1.68896906e-01 1.69173717e-01 + 1.69450686e-01 1.69727813e-01 1.70005098e-01 1.70282542e-01 1.70560143e-01 + 1.70837901e-01 1.71115817e-01 1.71393889e-01 1.71672119e-01 1.71950505e-01 + 1.72229048e-01 1.72507747e-01 1.72786602e-01 1.73065613e-01 1.73344779e-01 + 1.73624101e-01 1.73903579e-01 1.74183211e-01 1.74462998e-01 1.74742940e-01 + 1.75023036e-01 1.75303286e-01 1.75583691e-01 1.75864249e-01 1.76144961e-01 + 1.76425826e-01 1.76706845e-01 1.76988017e-01 1.77269341e-01 1.77550818e-01 + 1.77832448e-01 1.78114229e-01 1.78396163e-01 1.78678248e-01 1.78960486e-01 + 1.79242874e-01 1.79525414e-01 1.79808105e-01 1.80090946e-01 1.80373938e-01 + 1.80657081e-01 1.80940374e-01 1.81223816e-01 1.81507409e-01 1.81791151e-01 + 1.82075043e-01 1.82359084e-01 1.82643273e-01 1.82927612e-01 1.83212099e-01 + 1.83496734e-01 1.83781518e-01 1.84066450e-01 1.84351529e-01 1.84636756e-01 + 1.84922131e-01 1.85207652e-01 1.85493321e-01 1.85779136e-01 1.86065098e-01 + 1.86351206e-01 1.86637461e-01 1.86923861e-01 1.87210407e-01 1.87497099e-01 + 1.87783936e-01 1.88070919e-01 1.88358046e-01 1.88645318e-01 1.88932734e-01 + 1.89220295e-01 1.89508000e-01 1.89795849e-01 1.90083842e-01 1.90371978e-01 + 1.90660258e-01 1.90948681e-01 1.91237246e-01 1.91525955e-01 1.91814806e-01 + 1.92103799e-01 1.92392935e-01 1.92682212e-01 1.92971631e-01 1.93261192e-01 + 1.93550894e-01 1.93840737e-01 1.94130721e-01 1.94420846e-01 1.94711111e-01 + 1.95001517e-01 1.95292063e-01 1.95582748e-01 1.95873574e-01 1.96164539e-01 + 1.96455643e-01 1.96746886e-01 1.97038269e-01 1.97329790e-01 1.97621449e-01 + 1.97913247e-01 1.98205183e-01 1.98497257e-01 1.98789469e-01 1.99081818e-01 + 1.99374304e-01 1.99666928e-01 1.99959688e-01 2.00252585e-01 2.00545619e-01 + 2.00838789e-01 2.01132095e-01 2.01425537e-01 2.01719114e-01 2.02012828e-01 + 2.02306676e-01 2.02600660e-01 2.02894778e-01 2.03189031e-01 2.03483419e-01 + 2.03777941e-01 2.04072597e-01 2.04367387e-01 2.04662311e-01 2.04957368e-01 + 2.05252558e-01 2.05547882e-01 2.05843338e-01 2.06138928e-01 2.06434649e-01 + 2.06730503e-01 2.07026489e-01 2.07322607e-01 2.07618857e-01 2.07915238e-01 + 2.08211750e-01 2.08508394e-01 2.08805168e-01 2.09102073e-01 2.09399109e-01 + 2.09696275e-01 2.09993571e-01 2.10290997e-01 2.10588552e-01 2.10886237e-01 + 2.11184052e-01 2.11481995e-01 2.11780068e-01 2.12078269e-01 2.12376598e-01 + 2.12675056e-01 2.12973642e-01 2.13272356e-01 2.13571197e-01 2.13870166e-01 + 2.14169263e-01 2.14468486e-01 2.14767837e-01 2.15067314e-01 2.15366917e-01 + 2.15666647e-01 2.15966503e-01 2.16266485e-01 2.16566592e-01 2.16866825e-01 + 2.17167184e-01 2.17467667e-01 2.17768276e-01 2.18069009e-01 2.18369866e-01 + 2.18670848e-01 2.18971954e-01 2.19273184e-01 2.19574538e-01 2.19876015e-01 + 2.20177615e-01 2.20479339e-01 2.20781185e-01 2.21083155e-01 2.21385246e-01 + 2.21687460e-01 2.21989797e-01 2.22292255e-01 2.22594835e-01 2.22897536e-01 + 2.23200359e-01 2.23503303e-01 2.23806367e-01 2.24109553e-01 2.24412859e-01 + 2.24716285e-01 2.25019832e-01 2.25323498e-01 2.25627285e-01 2.25931191e-01 + 2.26235216e-01 2.26539360e-01 2.26843623e-01 2.27148005e-01 2.27452506e-01 + 2.27757125e-01 2.28061862e-01 2.28366717e-01 2.28671690e-01 2.28976780e-01 + 2.29281988e-01 2.29587313e-01 2.29892755e-01 2.30198313e-01 2.30503989e-01 + 2.30809780e-01 2.31115688e-01 2.31421712e-01 2.31727852e-01 2.32034107e-01 + 2.32340478e-01 2.32646964e-01 2.32953565e-01 2.33260280e-01 2.33567111e-01 + 2.33874055e-01 2.34181114e-01 2.34488287e-01 2.34795574e-01 2.35102975e-01 + 2.35410489e-01 2.35718116e-01 2.36025856e-01 2.36333709e-01 2.36641675e-01 + 2.36949753e-01 2.37257943e-01 2.37566246e-01 2.37874660e-01 2.38183186e-01 + 2.38491824e-01 2.38800572e-01 2.39109432e-01 2.39418403e-01 2.39727484e-01 + 2.40036676e-01 2.40345978e-01 2.40655391e-01 2.40964913e-01 2.41274545e-01 + 2.41584286e-01 2.41894137e-01 2.42204097e-01 2.42514166e-01 2.42824344e-01 + 2.43134630e-01 2.43445024e-01 2.43755527e-01 2.44066138e-01 2.44376856e-01 + 2.44687682e-01 2.44998615e-01 2.45309656e-01 2.45620803e-01 2.45932058e-01 + 2.46243419e-01 2.46554886e-01 2.46866459e-01 2.47178139e-01 2.47489924e-01 + 2.47801815e-01 2.48113812e-01 2.48425913e-01 2.48738120e-01 2.49050431e-01 + 2.49362848e-01 2.49675368e-01 2.49987993e-01 2.50300722e-01 2.50613555e-01 + 2.50926492e-01 2.51239532e-01 2.51552675e-01 2.51865922e-01 2.52179271e-01 + 2.52492723e-01 2.52806278e-01 2.53119935e-01 2.53433694e-01 2.53747555e-01 + 2.54061518e-01 2.54375582e-01 2.54689748e-01 2.55004015e-01 2.55318383e-01 + 2.55632851e-01 2.55947421e-01 2.56262090e-01 2.56576860e-01 2.56891730e-01 + 2.57206700e-01 2.57521770e-01 2.57836938e-01 2.58152207e-01 2.58467574e-01 + 2.58783040e-01 2.59098605e-01 2.59414268e-01 2.59730029e-01 2.60045889e-01 + 2.60361847e-01 2.60677902e-01 2.60994055e-01 2.61310305e-01 2.61626652e-01 + 2.61943096e-01 2.62259637e-01 2.62576275e-01 2.62893009e-01 2.63209839e-01 + 2.63526765e-01 2.63843787e-01 2.64160905e-01 2.64478118e-01 2.64795426e-01 + 2.65112830e-01 2.65430328e-01 2.65747921e-01 2.66065608e-01 2.66383390e-01 + 2.66701265e-01 2.67019235e-01 2.67337298e-01 2.67655455e-01 2.67973706e-01 + 2.68292049e-01 2.68610485e-01 2.68929014e-01 2.69247636e-01 2.69566350e-01 + 2.69885156e-01 2.70204055e-01 2.70523045e-01 2.70842127e-01 2.71161300e-01 + 2.71480564e-01 2.71799920e-01 2.72119366e-01 2.72438903e-01 2.72758531e-01 + 2.73078249e-01 2.73398057e-01 2.73717955e-01 2.74037942e-01 2.74358019e-01 + 2.74678186e-01 2.74998442e-01 2.75318787e-01 2.75639220e-01 2.75959743e-01 + 2.76280353e-01 2.76601052e-01 2.76921839e-01 2.77242714e-01 2.77563676e-01 + 2.77884726e-01 2.78205864e-01 2.78527088e-01 2.78848399e-01 2.79169798e-01 + 2.79491282e-01 2.79812853e-01 2.80134510e-01 2.80456254e-01 2.80778083e-01 + 2.81099997e-01 2.81421997e-01 2.81744083e-01 2.82066253e-01 2.82388508e-01 + 2.82710848e-01 2.83033273e-01 2.83355782e-01 2.83678374e-01 2.84001051e-01 + 2.84323812e-01 2.84646656e-01 2.84969584e-01 2.85292594e-01 2.85615688e-01 + 2.85938865e-01 2.86262124e-01 2.86585466e-01 2.86908890e-01 2.87232396e-01 + 2.87555984e-01 2.87879654e-01 2.88203405e-01 2.88527238e-01 2.88851152e-01 + 2.89175147e-01 2.89499222e-01 2.89823378e-01 2.90147615e-01 2.90471932e-01 + 2.90796329e-01 2.91120806e-01 2.91445362e-01 2.91769999e-01 2.92094714e-01 + 2.92419508e-01 2.92744382e-01 2.93069334e-01 2.93394365e-01 2.93719474e-01 + 2.94044662e-01 2.94369927e-01 2.94695271e-01 2.95020692e-01 2.95346191e-01 + 2.95671767e-01 2.95997420e-01 2.96323150e-01 2.96648956e-01 2.96974840e-01 + 2.97300799e-01 2.97626835e-01 2.97952947e-01 2.98279135e-01 2.98605399e-01 + 2.98931738e-01 2.99258152e-01 2.99584642e-01 2.99911206e-01 3.00237845e-01 + 3.00564559e-01 3.00891347e-01 3.01218209e-01 3.01545146e-01 3.01872156e-01 + 3.02199240e-01 3.02526398e-01 3.02853628e-01 3.03180932e-01 3.03508309e-01 + 3.03835759e-01 3.04163281e-01 3.04490876e-01 3.04818543e-01 3.05146281e-01 + 3.05474092e-01 3.05801975e-01 3.06129929e-01 3.06457954e-01 3.06786051e-01 + 3.07114218e-01 3.07442456e-01 3.07770765e-01 3.08099145e-01 3.08427594e-01 + 3.08756114e-01 3.09084703e-01 3.09413363e-01 3.09742091e-01 3.10070890e-01 + 3.10399757e-01 3.10728693e-01 3.11057699e-01 3.11386772e-01 3.11715915e-01 + 3.12045125e-01 3.12374404e-01 3.12703751e-01 3.13033165e-01 3.13362647e-01 + 3.13692197e-01 3.14021813e-01 3.14351497e-01 3.14681248e-01 3.15011065e-01 + 3.15340949e-01 3.15670899e-01 3.16000915e-01 3.16330997e-01 3.16661145e-01 + 3.16991359e-01 3.17321638e-01 3.17651983e-01 3.17982392e-01 3.18312867e-01 + 3.18643406e-01 3.18974010e-01 3.19304678e-01 3.19635411e-01 3.19966207e-01 + 3.20297067e-01 3.20627992e-01 3.20958979e-01 3.21290030e-01 3.21621144e-01 + 3.21952321e-01 3.22283561e-01 3.22614864e-01 3.22946229e-01 3.23277656e-01 + 3.23609146e-01 3.23940697e-01 3.24272310e-01 3.24603985e-01 3.24935721e-01 + 3.25267519e-01 3.25599377e-01 3.25931297e-01 3.26263277e-01 3.26595317e-01 + 3.26927419e-01 3.27259580e-01 3.27591801e-01 3.27924082e-01 3.28256423e-01 + 3.28588824e-01 3.28921283e-01 3.29253802e-01 3.29586380e-01 3.29919017e-01 + 3.30251712e-01 3.30584466e-01 3.30917278e-01 3.31250149e-01 3.31583077e-01 + 3.31916063e-01 3.32249107e-01 3.32582208e-01 3.32915366e-01 3.33248582e-01 + 3.33581854e-01 3.33915183e-01 3.34248569e-01 3.34582011e-01 3.34915510e-01 + 3.35249064e-01 3.35582675e-01 3.35916341e-01 3.36250062e-01 3.36583839e-01 + 3.36917672e-01 3.37251559e-01 3.37585501e-01 3.37919498e-01 3.38253550e-01 + 3.38587656e-01 3.38921816e-01 3.39256030e-01 3.39590298e-01 3.39924620e-01 + 3.40258995e-01 3.40593423e-01 3.40927905e-01 3.41262440e-01 3.41597027e-01 + 3.41931667e-01 3.42266360e-01 3.42601105e-01 3.42935903e-01 3.43270752e-01 + 3.43605653e-01 3.43940606e-01 3.44275610e-01 3.44610666e-01 3.44945772e-01 + 3.45280930e-01 3.45616139e-01 3.45951398e-01 3.46286708e-01 3.46622068e-01 + 3.46957478e-01 3.47292938e-01 3.47628448e-01 3.47964008e-01 3.48299617e-01 + 3.48635275e-01 3.48970983e-01 3.49306740e-01 3.49642545e-01 3.49978399e-01 + 3.50314302e-01 3.50650253e-01 3.50986252e-01 3.51322299e-01 3.51658394e-01 + 3.51994536e-01 3.52330726e-01 3.52666964e-01 3.53003248e-01 3.53339580e-01 + 3.53675958e-01 3.54012383e-01 3.54348855e-01 3.54685373e-01 3.55021937e-01 + 3.55358547e-01 3.55695203e-01 3.56031904e-01 3.56368651e-01 3.56705444e-01 + 3.57042281e-01 3.57379164e-01 3.57716092e-01 3.58053064e-01 3.58390081e-01 + 3.58727142e-01 3.59064247e-01 3.59401397e-01 3.59738590e-01 3.60075827e-01 + 3.60413107e-01 3.60750431e-01 3.61087799e-01 3.61425209e-01 3.61762662e-01 + 3.62100158e-01 3.62437696e-01 3.62775277e-01 3.63112900e-01 3.63450566e-01 + 3.63788273e-01 3.64126022e-01 3.64463812e-01 3.64801645e-01 3.65139518e-01 + 3.65477432e-01 3.65815388e-01 3.66153384e-01 3.66491421e-01 3.66829498e-01 + 3.67167616e-01 3.67505774e-01 3.67843971e-01 3.68182209e-01 3.68520487e-01 + 3.68858803e-01 3.69197160e-01 3.69535555e-01 3.69873990e-01 3.70212463e-01 + 3.70550975e-01 3.70889526e-01 3.71228115e-01 3.71566742e-01 3.71905408e-01 + 3.72244111e-01 3.72582852e-01 3.72921631e-01 3.73260447e-01 3.73599300e-01 + 3.73938191e-01 3.74277119e-01 3.74616083e-01 3.74955084e-01 3.75294122e-01 + 3.75633196e-01 3.75972306e-01 3.76311452e-01 3.76650634e-01 3.76989852e-01 + 3.77329105e-01 3.77668394e-01 3.78007718e-01 3.78347077e-01 3.78686471e-01 + 3.79025899e-01 3.79365363e-01 3.79704861e-01 3.80044393e-01 3.80383959e-01 + 3.80723559e-01 3.81063194e-01 3.81402861e-01 3.81742563e-01 3.82082298e-01 + 3.82422065e-01 3.82761866e-01 3.83101700e-01 3.83441567e-01 3.83781466e-01 + 3.84121398e-01 3.84461362e-01 3.84801358e-01 3.85141386e-01 3.85481446e-01 + 3.85821538e-01 3.86161661e-01 3.86501816e-01 3.86842001e-01 3.87182218e-01 + 3.87522466e-01 3.87862744e-01 3.88203053e-01 3.88543393e-01 3.88883763e-01 + 3.89224162e-01 3.89564592e-01 3.89905052e-01 3.90245541e-01 3.90586060e-01 + 3.90926609e-01 3.91267186e-01 3.91607793e-01 3.91948428e-01 3.92289093e-01 + 3.92629785e-01 3.92970507e-01 3.93311256e-01 3.93652034e-01 3.93992840e-01 + 3.94333674e-01 3.94674535e-01 3.95015424e-01 3.95356341e-01 3.95697284e-01 + 3.96038255e-01 3.96379253e-01 3.96720277e-01 3.97061328e-01 3.97402406e-01 + 3.97743510e-01 3.98084640e-01 3.98425796e-01 3.98766978e-01 3.99108186e-01 + 3.99449420e-01 3.99790679e-01 4.00131963e-01 4.00473272e-01 4.00814607e-01 + 4.01155966e-01 4.01497350e-01 4.01838759e-01 4.02180192e-01 4.02521649e-01 + 4.02863130e-01 4.03204636e-01 4.03546165e-01 4.03887718e-01 4.04229294e-01 + 4.04570894e-01 4.04912517e-01 4.05254163e-01 4.05595832e-01 4.05937524e-01 + 4.06279238e-01 4.06620975e-01 4.06962734e-01 4.07304516e-01 4.07646319e-01 + 4.07988145e-01 4.08329992e-01 4.08671861e-01 4.09013751e-01 4.09355663e-01 + 4.09697596e-01 4.10039549e-01 4.10381524e-01 4.10723520e-01 4.11065536e-01 + 4.11407572e-01 4.11749629e-01 4.12091706e-01 4.12433803e-01 4.12775920e-01 + 4.13118057e-01 4.13460213e-01 4.13802389e-01 4.14144583e-01 4.14486798e-01 + 4.14829031e-01 4.15171283e-01 4.15513553e-01 4.15855843e-01 4.16198150e-01 + 4.16540476e-01 4.16882821e-01 4.17225183e-01 4.17567563e-01 4.17909961e-01 + 4.18252376e-01 4.18594809e-01 4.18937259e-01 4.19279726e-01 4.19622210e-01 + 4.19964711e-01 4.20307229e-01 4.20649763e-01 4.20992314e-01 4.21334881e-01 + 4.21677465e-01 4.22020064e-01 4.22362679e-01 4.22705310e-01 4.23047957e-01 + 4.23390619e-01 4.23733296e-01 4.24075988e-01 4.24418696e-01 4.24761418e-01 + 4.25104155e-01 4.25446907e-01 4.25789673e-01 4.26132454e-01 4.26475249e-01 + 4.26818057e-01 4.27160880e-01 4.27503717e-01 4.27846567e-01 4.28189430e-01 + 4.28532307e-01 4.28875197e-01 4.29218101e-01 4.29561017e-01 4.29903946e-01 + 4.30246888e-01 4.30589842e-01 4.30932808e-01 4.31275787e-01 4.31618778e-01 + 4.31961781e-01 4.32304796e-01 4.32647822e-01 4.32990860e-01 4.33333909e-01 + 4.33676970e-01 4.34020042e-01 4.34363125e-01 4.34706219e-01 4.35049323e-01 + 4.35392438e-01 4.35735564e-01 4.36078700e-01 4.36421846e-01 4.36765002e-01 + 4.37108168e-01 4.37451344e-01 4.37794529e-01 4.38137724e-01 4.38480929e-01 + 4.38824142e-01 4.39167365e-01 4.39510597e-01 4.39853837e-01 4.40197087e-01 + 4.40540345e-01 4.40883611e-01 4.41226885e-01 4.41570168e-01 4.41913459e-01 + 4.42256758e-01 4.42600064e-01 4.42943378e-01 4.43286700e-01 4.43630029e-01 + 4.43973365e-01 4.44316708e-01 4.44660058e-01 4.45003416e-01 4.45346779e-01 + 4.45690150e-01 4.46033526e-01 4.46376910e-01 4.46720299e-01 4.47063694e-01 + 4.47407095e-01 4.47750502e-01 4.48093915e-01 4.48437333e-01 4.48780757e-01 + 4.49124185e-01 4.49467619e-01 4.49811058e-01 4.50154502e-01 4.50497950e-01 + 4.50841403e-01 4.51184861e-01 4.51528322e-01 4.51871788e-01 4.52215259e-01 + 4.52558733e-01 4.52902210e-01 4.53245692e-01 4.53589177e-01 4.53932665e-01 + 4.54276157e-01 4.54619652e-01 4.54963150e-01 4.55306651e-01 4.55650154e-01 + 1.03953624e+00 1.03772749e+00 1.03592023e+00 1.03411445e+00 1.03231016e+00 + 1.03050735e+00 1.02870603e+00 1.02690620e+00 1.02510785e+00 1.02331100e+00 + 1.02151562e+00 1.01972174e+00 1.01792935e+00 1.01613844e+00 1.01434902e+00 + 1.01256110e+00 1.01077466e+00 1.00898971e+00 1.00720626e+00 1.00542429e+00 + 1.00364382e+00 1.00186484e+00 1.00008735e+00 9.98311355e-01 9.96536852e-01 + 9.94763842e-01 9.92992326e-01 9.91222304e-01 9.89453777e-01 9.87686744e-01 + 9.85921207e-01 9.84157165e-01 9.82394619e-01 9.80633570e-01 9.78874017e-01 + 9.77115962e-01 9.75359404e-01 9.73604344e-01 9.71850782e-01 9.70098719e-01 + 9.68348155e-01 9.66599090e-01 9.64851525e-01 9.63105460e-01 9.61360895e-01 + 9.59617832e-01 9.57876269e-01 9.56136208e-01 9.54397649e-01 9.52660593e-01 + 9.50925039e-01 9.49190988e-01 9.47458441e-01 9.45727397e-01 9.43997858e-01 + 9.42269823e-01 9.40543293e-01 9.38818268e-01 9.37094749e-01 9.35372736e-01 + 9.33652230e-01 9.31933230e-01 9.30215737e-01 9.28499752e-01 9.26785274e-01 + 9.25072305e-01 9.23360844e-01 9.21650893e-01 9.19942450e-01 9.18235517e-01 + 9.16530094e-01 9.14826182e-01 9.13123780e-01 9.11422890e-01 9.09723511e-01 + 9.08025644e-01 9.06329289e-01 9.04634446e-01 9.02941117e-01 9.01249300e-01 + 8.99558998e-01 8.97870209e-01 8.96182935e-01 8.94497176e-01 8.92812931e-01 + 8.91130202e-01 8.89448989e-01 8.87769292e-01 8.86091112e-01 8.84414448e-01 + 8.82739302e-01 8.81065673e-01 8.79393562e-01 8.77722970e-01 8.76053896e-01 + 8.74386341e-01 8.72720306e-01 8.71055790e-01 8.69392795e-01 8.67731320e-01 + 8.66071366e-01 8.64412932e-01 8.62756021e-01 8.61100631e-01 8.59446764e-01 + 8.57794419e-01 8.56143597e-01 8.54494298e-01 8.52846523e-01 8.51200272e-01 + 8.49555545e-01 8.47912343e-01 8.46270666e-01 8.44630515e-01 8.42991889e-01 + 8.41354789e-01 8.39719216e-01 8.38085170e-01 8.36452650e-01 8.34821658e-01 + 8.33192195e-01 8.31564259e-01 8.29937852e-01 8.28312973e-01 8.26689624e-01 + 8.25067805e-01 8.23447515e-01 8.21828756e-01 8.20211528e-01 8.18595830e-01 + 8.16981664e-01 8.15369029e-01 8.13757927e-01 8.12148357e-01 8.10540319e-01 + 8.08933815e-01 8.07328844e-01 8.05725406e-01 8.04123503e-01 8.02523135e-01 + 8.00924301e-01 7.99327002e-01 7.97731239e-01 7.96137011e-01 7.94544320e-01 + 7.92953165e-01 7.91363547e-01 7.89775466e-01 7.88188923e-01 7.86603918e-01 + 7.85020450e-01 7.83438522e-01 7.81858132e-01 7.80279281e-01 7.78701970e-01 + 7.77126199e-01 7.75551968e-01 7.73979278e-01 7.72408129e-01 7.70838521e-01 + 7.69270454e-01 7.67703930e-01 7.66138947e-01 7.64575508e-01 7.63013611e-01 + 7.61453258e-01 7.59894448e-01 7.58337182e-01 7.56781460e-01 7.55227283e-01 + 7.53674651e-01 7.52123565e-01 7.50574024e-01 7.49026029e-01 7.47479580e-01 + 7.45934678e-01 7.44391322e-01 7.42849514e-01 7.41309254e-01 7.39770542e-01 + 7.38233378e-01 7.36697762e-01 7.35163696e-01 7.33631179e-01 7.32100211e-01 + 7.30570794e-01 7.29042926e-01 7.27516610e-01 7.25991844e-01 7.24468629e-01 + 7.22946966e-01 7.21426855e-01 7.19908297e-01 7.18391291e-01 7.16875837e-01 + 7.15361937e-01 7.13849591e-01 7.12338798e-01 7.10829560e-01 7.09321876e-01 + 7.07815747e-01 7.06311174e-01 7.04808155e-01 7.03306693e-01 7.01806787e-01 + 7.00308437e-01 6.98811644e-01 6.97316408e-01 6.95822730e-01 6.94330610e-01 + 6.92840047e-01 6.91351043e-01 6.89863598e-01 6.88377712e-01 6.86893385e-01 + 6.85410618e-01 6.83929411e-01 6.82449765e-01 6.80971679e-01 6.79495154e-01 + 6.78020190e-01 6.76546789e-01 6.75074949e-01 6.73604671e-01 6.72135956e-01 + 6.70668804e-01 6.69203215e-01 6.67739189e-01 6.66276728e-01 6.64815830e-01 + 6.63356498e-01 6.61898730e-01 6.60442527e-01 6.58987889e-01 6.57534818e-01 + 6.56083312e-01 6.54633373e-01 6.53185001e-01 6.51738195e-01 6.50292957e-01 + 6.48849287e-01 6.47407184e-01 6.45966650e-01 6.44527685e-01 6.43090288e-01 + 6.41654460e-01 6.40220202e-01 6.38787514e-01 6.37356396e-01 6.35926849e-01 + 6.34498872e-01 6.33072467e-01 6.31647633e-01 6.30224370e-01 6.28802680e-01 + 6.27382561e-01 6.25964016e-01 6.24547043e-01 6.23131644e-01 6.21717818e-01 + 6.20305566e-01 6.18894889e-01 6.17485785e-01 6.16078257e-01 6.14672303e-01 + 6.13267925e-01 6.11865123e-01 6.10463897e-01 6.09064247e-01 6.07666173e-01 + 6.06269677e-01 6.04874758e-01 6.03481416e-01 6.02089652e-01 6.00699467e-01 + 5.99310859e-01 5.97923831e-01 5.96538381e-01 5.95154511e-01 5.93772221e-01 + 5.92391510e-01 5.91012380e-01 5.89634830e-01 5.88258861e-01 5.86884473e-01 + 5.85511667e-01 5.84140442e-01 5.82770800e-01 5.81402740e-01 5.80036262e-01 + 5.78671367e-01 5.77308056e-01 5.75946328e-01 5.74586184e-01 5.73227624e-01 + 5.71870649e-01 5.70515258e-01 5.69161453e-01 5.67809232e-01 5.66458597e-01 + 5.65109548e-01 5.63762086e-01 5.62416210e-01 5.61071920e-01 5.59729218e-01 + 5.58388103e-01 5.57048576e-01 5.55710636e-01 5.54374285e-01 5.53039523e-01 + 5.51706349e-01 5.50374764e-01 5.49044769e-01 5.47716364e-01 5.46389548e-01 + 5.45064323e-01 5.43740689e-01 5.42418645e-01 5.41098192e-01 5.39779331e-01 + 5.38462062e-01 5.37146385e-01 5.35832299e-01 5.34519807e-01 5.33208907e-01 + 5.31899601e-01 5.30591888e-01 5.29285769e-01 5.27981244e-01 5.26678313e-01 + 5.25376977e-01 5.24077235e-01 5.22779089e-01 5.21482538e-01 5.20187583e-01 + 5.18894224e-01 5.17602461e-01 5.16312295e-01 5.15023726e-01 5.13736754e-01 + 5.12451379e-01 5.11167602e-01 5.09885423e-01 5.08604843e-01 5.07325861e-01 + 5.06048477e-01 5.04772693e-01 5.03498508e-01 5.02225923e-01 5.00954938e-01 + 4.99685553e-01 4.98417769e-01 4.97151585e-01 4.95887003e-01 4.94624021e-01 + 4.93362642e-01 4.92102864e-01 4.90844689e-01 4.89588116e-01 4.88333145e-01 + 4.87079778e-01 4.85828014e-01 4.84577853e-01 4.83329297e-01 4.82082344e-01 + 4.80836996e-01 4.79593252e-01 4.78351114e-01 4.77110580e-01 4.75871652e-01 + 4.74634330e-01 4.73398614e-01 4.72164504e-01 4.70932001e-01 4.69701104e-01 + 4.68471815e-01 4.67244132e-01 4.66018058e-01 4.64793591e-01 4.63570733e-01 + 4.62349483e-01 4.61129842e-01 4.59911810e-01 4.58695387e-01 4.57480573e-01 + 4.56267369e-01 4.55055776e-01 4.53845792e-01 4.52637419e-01 4.51430658e-01 + 4.50225507e-01 4.49021967e-01 4.47820039e-01 4.46619724e-01 4.45421020e-01 + 4.44223928e-01 4.43028450e-01 4.41834584e-01 4.40642332e-01 4.39451693e-01 + 4.38262668e-01 4.37075256e-01 4.35889459e-01 4.34705277e-01 4.33522709e-01 + 4.32341757e-01 4.31162420e-01 4.29984698e-01 4.28808592e-01 4.27634102e-01 + 4.26461229e-01 4.25289972e-01 4.24120332e-01 4.22952310e-01 4.21785904e-01 + 4.20621116e-01 4.19457946e-01 4.18296395e-01 4.17136461e-01 4.15978147e-01 + 4.14821451e-01 4.13666374e-01 4.12512917e-01 4.11361080e-01 4.10210862e-01 + 4.09062265e-01 4.07915288e-01 4.06769932e-01 4.05626197e-01 4.04484083e-01 + 4.03343590e-01 4.02204719e-01 4.01067470e-01 3.99931844e-01 3.98797839e-01 + 3.97665458e-01 3.96534699e-01 3.95405564e-01 3.94278052e-01 3.93152164e-01 + 3.92027900e-01 3.90905259e-01 3.89784244e-01 3.88664853e-01 3.87547087e-01 + 3.86430946e-01 3.85316431e-01 3.84203541e-01 3.83092278e-01 3.81982640e-01 + 3.80874629e-01 3.79768245e-01 3.78663487e-01 3.77560357e-01 3.76458854e-01 + 3.75358979e-01 3.74260731e-01 3.73164112e-01 3.72069121e-01 3.70975759e-01 + 3.69884025e-01 3.68793921e-01 3.67705446e-01 3.66618601e-01 3.65533385e-01 + 3.64449799e-01 3.63367844e-01 3.62287520e-01 3.61208826e-01 3.60131763e-01 + 3.59056331e-01 3.57982531e-01 3.56910363e-01 3.55839826e-01 3.54770922e-01 + 3.53703650e-01 3.52638011e-01 3.51574005e-01 3.50511632e-01 3.49450892e-01 + 3.48391786e-01 3.47334314e-01 3.46278476e-01 3.45224272e-01 3.44171703e-01 + 3.43120769e-01 3.42071469e-01 3.41023805e-01 3.39977776e-01 3.38933384e-01 + 3.37890627e-01 3.36849506e-01 3.35810021e-01 3.34772174e-01 3.33735963e-01 + 3.32701389e-01 3.31668453e-01 3.30637154e-01 3.29607493e-01 3.28579470e-01 + 3.27553085e-01 3.26528339e-01 3.25505231e-01 3.24483762e-01 3.23463933e-01 + 3.22445743e-01 3.21429192e-01 3.20414282e-01 3.19401011e-01 3.18389381e-01 + 3.17379391e-01 3.16371042e-01 3.15364334e-01 3.14359267e-01 3.13355841e-01 + 3.12354057e-01 3.11353915e-01 3.10355415e-01 3.09358557e-01 3.08363342e-01 + 3.07369770e-01 3.06377840e-01 3.05387554e-01 3.04398911e-01 3.03411912e-01 + 3.02426556e-01 3.01442845e-01 3.00460777e-01 2.99480355e-01 2.98501577e-01 + 2.97524444e-01 2.96548956e-01 2.95575113e-01 2.94602916e-01 2.93632365e-01 + 2.92663460e-01 2.91696201e-01 2.90730589e-01 2.89766623e-01 2.88804304e-01 + 2.87843632e-01 2.86884607e-01 2.85927230e-01 2.84971501e-01 2.84017420e-01 + 2.83064986e-01 2.82114201e-01 2.81165065e-01 2.80217578e-01 2.79271739e-01 + 2.78327550e-01 2.77385010e-01 2.76444119e-01 2.75504879e-01 2.74567288e-01 + 2.73631348e-01 2.72697059e-01 2.71764419e-01 2.70833431e-01 2.69904094e-01 + 2.68976408e-01 2.68050374e-01 2.67125991e-01 2.66203261e-01 2.65282182e-01 + 2.64362756e-01 2.63444982e-01 2.62528861e-01 2.61614393e-01 2.60701578e-01 + 2.59790416e-01 2.58880908e-01 2.57973054e-01 2.57066853e-01 2.56162307e-01 + 2.55259415e-01 2.54358178e-01 2.53458595e-01 2.52560668e-01 2.51664395e-01 + 2.50769778e-01 2.49876816e-01 2.48985511e-01 2.48095861e-01 2.47207867e-01 + 2.46321530e-01 2.45436849e-01 2.44553825e-01 2.43672457e-01 2.42792747e-01 + 2.41914695e-01 2.41038300e-01 2.40163562e-01 2.39290483e-01 2.38419061e-01 + 2.37549298e-01 2.36681193e-01 2.35814748e-01 2.34949961e-01 2.34086833e-01 + 2.33225364e-01 2.32365555e-01 2.31507405e-01 2.30650916e-01 2.29796086e-01 + 2.28942916e-01 2.28091407e-01 2.27241559e-01 2.26393372e-01 2.25546845e-01 + 2.24701980e-01 2.23858776e-01 2.23017233e-01 2.22177352e-01 2.21339134e-01 + 2.20502577e-01 2.19667682e-01 2.18834451e-01 2.18002881e-01 2.17172975e-01 + 2.16344732e-01 2.15518152e-01 2.14693235e-01 2.13869982e-01 2.13048393e-01 + 2.12228468e-01 2.11410207e-01 2.10593610e-01 2.09778678e-01 2.08965410e-01 + 2.08153807e-01 2.07343870e-01 2.06535598e-01 2.05728991e-01 2.04924049e-01 + 2.04120774e-01 2.03319164e-01 2.02519221e-01 2.01720944e-01 2.00924334e-01 + 2.00129390e-01 1.99336113e-01 1.98544503e-01 1.97754560e-01 1.96966285e-01 + 1.96179677e-01 1.95394737e-01 1.94611465e-01 1.93829861e-01 1.93049925e-01 + 1.92271658e-01 1.91495059e-01 1.90720129e-01 1.89946869e-01 1.89175277e-01 + 1.88405354e-01 1.87637101e-01 1.86870518e-01 1.86105605e-01 1.85342361e-01 + 1.84580788e-01 1.83820885e-01 1.83062653e-01 1.82306091e-01 1.81551200e-01 + 1.80797980e-01 1.80046431e-01 1.79296554e-01 1.78548348e-01 1.77801814e-01 + 1.77056952e-01 1.76313762e-01 1.75572244e-01 1.74832398e-01 1.74094225e-01 + 1.73357725e-01 1.72622897e-01 1.71889743e-01 1.71158261e-01 1.70428453e-01 + 1.69700319e-01 1.68973858e-01 1.68249071e-01 1.67525958e-01 1.66804519e-01 + 1.66084755e-01 1.65366665e-01 1.64650249e-01 1.63935509e-01 1.63222443e-01 + 1.62511053e-01 1.61801338e-01 1.61093298e-01 1.60386934e-01 1.59682246e-01 + 1.58979233e-01 1.58277897e-01 1.57578237e-01 1.56880253e-01 1.56183946e-01 + 1.55489316e-01 1.54796362e-01 1.54105086e-01 1.53415486e-01 1.52727564e-01 + 1.52041320e-01 1.51356753e-01 1.50673864e-01 1.49992653e-01 1.49313120e-01 + 1.48635265e-01 1.47959088e-01 1.47284591e-01 1.46611771e-01 1.45940631e-01 + 1.45271170e-01 1.44603388e-01 1.43937285e-01 1.43272862e-01 1.42610118e-01 + 1.41949054e-01 1.41289670e-01 1.40631966e-01 1.39975942e-01 1.39321598e-01 + 1.38668935e-01 1.38017953e-01 1.37368652e-01 1.36721031e-01 1.36075091e-01 + 1.35430833e-01 1.34788256e-01 1.34147361e-01 1.33508147e-01 1.32870615e-01 + 1.32234765e-01 1.31600597e-01 1.30968111e-01 1.30337308e-01 1.29708187e-01 + 1.29080749e-01 1.28454994e-01 1.27830921e-01 1.27208532e-01 1.26587826e-01 + 1.25968803e-01 1.25351464e-01 1.24735808e-01 1.24121836e-01 1.23509548e-01 + 1.22898944e-01 1.22290024e-01 1.21682789e-01 1.21077238e-01 1.20473372e-01 + 1.19871190e-01 1.19270693e-01 1.18671881e-01 1.18074755e-01 1.17479313e-01 + 1.16885558e-01 1.16293487e-01 1.15703102e-01 1.15114403e-01 1.14527390e-01 + 1.13942064e-01 1.13358423e-01 1.12776468e-01 1.12196200e-01 1.11617619e-01 + 1.11040725e-01 1.10465517e-01 1.09891996e-01 1.09320162e-01 1.08750016e-01 + 1.08181557e-01 1.07614785e-01 1.07049701e-01 1.06486305e-01 1.05924597e-01 + 1.05364577e-01 1.04806244e-01 1.04249601e-01 1.03694645e-01 1.03141378e-01 + 1.02589800e-01 1.02039910e-01 1.01491709e-01 1.00945198e-01 1.00400375e-01 + 9.98572416e-02 9.93157976e-02 9.87760431e-02 9.82379782e-02 9.77016030e-02 + 9.71669178e-02 9.66339224e-02 9.61026172e-02 9.55730022e-02 9.50450776e-02 + 9.45188434e-02 9.39942997e-02 9.34714468e-02 9.29502847e-02 9.24308135e-02 + 9.19130333e-02 9.13969443e-02 9.08825466e-02 9.03698403e-02 8.98588255e-02 + 8.93495023e-02 8.88418708e-02 8.83359312e-02 8.78316836e-02 8.73291281e-02 + 8.68282647e-02 8.63290937e-02 8.58316150e-02 8.53358290e-02 8.48417355e-02 + 8.43493348e-02 8.38586270e-02 8.33696121e-02 8.28822904e-02 8.23966618e-02 + 8.19127265e-02 8.14304847e-02 8.09499364e-02 8.04710817e-02 7.99939207e-02 + 7.95184537e-02 7.90446805e-02 7.85726014e-02 7.81022165e-02 7.76335259e-02 + 7.71665296e-02 7.67012279e-02 7.62376207e-02 7.57757082e-02 7.53154905e-02 + 7.48569677e-02 7.44001400e-02 7.39450073e-02 7.34915699e-02 7.30398277e-02 + 7.25897810e-02 7.21414298e-02 7.16947743e-02 7.12498144e-02 7.08065504e-02 + 7.03649822e-02 6.99251102e-02 6.94869342e-02 6.90504544e-02 6.86156710e-02 + 6.81825840e-02 6.77511935e-02 6.73214996e-02 6.68935024e-02 6.64672020e-02 + 6.60425985e-02 6.56196920e-02 6.51984826e-02 6.47789704e-02 6.43611555e-02 + 6.39450379e-02 6.35306178e-02 6.31178953e-02 6.27068704e-02 6.22975433e-02 + 6.18899141e-02 6.14839827e-02 6.10797494e-02 6.06772142e-02 6.02763772e-02 + 5.98772385e-02 5.94797982e-02 5.90840564e-02 5.86900131e-02 5.82976685e-02 + 5.79070227e-02 5.75180757e-02 5.71308276e-02 5.67452785e-02 5.63614285e-02 + 5.59792777e-02 5.55988261e-02 5.52200739e-02 5.48430212e-02 5.44676679e-02 + 5.40940143e-02 5.37220604e-02 5.33518062e-02 5.29832520e-02 5.26163976e-02 + 5.22512433e-02 5.18877891e-02 5.15260351e-02 5.11659814e-02 5.08076280e-02 + 5.04509751e-02 5.00960227e-02 4.97427708e-02 4.93912197e-02 4.90413693e-02 + 4.86932198e-02 4.83467711e-02 4.80020235e-02 4.76589769e-02 4.73176315e-02 + 4.69779873e-02 4.66400444e-02 4.63038029e-02 4.59692628e-02 4.56364243e-02 + 4.53052874e-02 4.49758521e-02 4.46481186e-02 4.43220870e-02 4.39977572e-02 + 4.36751294e-02 4.33542037e-02 4.30349801e-02 4.27174587e-02 4.24016395e-02 + 4.20875227e-02 4.17751083e-02 4.14643964e-02 4.11553870e-02 4.08480802e-02 + 4.05424762e-02 4.02385749e-02 3.99363764e-02 3.96358808e-02 3.93370881e-02 + 3.90399985e-02 3.87446120e-02 3.84509287e-02 3.81589486e-02 3.78686718e-02 + 3.75800983e-02 3.72932283e-02 3.70080618e-02 3.67245988e-02 3.64428394e-02 + 3.61627838e-02 3.58844318e-02 3.56077837e-02 3.53328395e-02 3.50595992e-02 + 3.47880629e-02 3.45182306e-02 3.42501025e-02 3.39836786e-02 3.37189589e-02 + 3.34559435e-02 3.31946324e-02 3.29350258e-02 3.26771236e-02 3.24209260e-02 + 3.21664330e-02 3.19136446e-02 3.16625610e-02 3.14131821e-02 3.11655080e-02 + 3.09195388e-02 3.06752746e-02 3.04327153e-02 3.01918611e-02 2.99527120e-02 + 2.97152680e-02 2.94795292e-02 2.92454957e-02 2.90131675e-02 2.87825447e-02 + 2.85536273e-02 2.83264153e-02 2.81009089e-02 2.78771081e-02 2.76550128e-02 + 2.74346233e-02 2.72159395e-02 2.69989614e-02 2.67836892e-02 2.65701228e-02 + 2.63582623e-02 2.61481079e-02 2.59396594e-02 2.57329170e-02 2.55278807e-02 + 2.53245505e-02 2.51229266e-02 2.49230089e-02 2.47247975e-02 2.45282924e-02 + 2.43334937e-02 2.41404014e-02 2.39490156e-02 2.37593363e-02 2.35713636e-02 + 2.33850975e-02 2.32005380e-02 2.30176851e-02 2.28365390e-02 2.26570997e-02 + 2.24793672e-02 2.23033415e-02 2.21290227e-02 2.19564108e-02 2.17855059e-02 + 2.16163080e-02 2.14488171e-02 2.12830333e-02 2.11189566e-02 2.09565871e-02 + 2.07959248e-02 2.06369696e-02 2.04797218e-02 2.03241812e-02 2.01703480e-02 + 2.00182221e-02 1.98678037e-02 1.97190927e-02 1.95720891e-02 1.94267931e-02 + 1.92832045e-02 1.91413236e-02 1.90011502e-02 1.88626845e-02 1.87259265e-02 + 1.85908761e-02 1.84575335e-02 1.83258986e-02 1.81959715e-02 1.80677522e-02 + 1.79412408e-02 1.78164372e-02 1.76933415e-02 1.75719538e-02 1.74522740e-02 + 1.73343022e-02 1.72180384e-02 1.71034827e-02 1.69906350e-02 1.68794954e-02 + 1.67700639e-02 1.66623405e-02 1.65563253e-02 1.64520183e-02 1.63494195e-02 + 1.62485289e-02 1.61493466e-02 1.60518726e-02 1.59561068e-02 1.58620494e-02 + 1.57697003e-02 1.56790596e-02 1.55901273e-02 1.55029034e-02 1.54173879e-02 + 1.53335808e-02 1.52514822e-02 1.51710921e-02 1.50924105e-02 1.50154374e-02 + 1.49401728e-02 1.48666168e-02 1.47947694e-02 1.47246305e-02 1.46562002e-02 + 1.45894786e-02 1.45244656e-02 1.44611612e-02 1.43995655e-02 1.43396785e-02 + 1.42815001e-02 1.42250305e-02 1.41702695e-02 1.41172173e-02 1.40658738e-02 + 1.40162391e-02 1.39683132e-02 1.39220960e-02 1.38775876e-02 1.38347880e-02 + 1.37936971e-02 1.37543151e-02 1.37166420e-02 1.36806776e-02 1.36464221e-02 + 1.36138754e-02 1.35830376e-02 1.35539086e-02 1.35264885e-02 1.35007773e-02 + 1.34767750e-02 1.34544815e-02 1.34338969e-02 1.34150212e-02 1.33978544e-02 + 1.33823966e-02 1.33686476e-02 1.33566075e-02 1.33462763e-02 1.33376541e-02 + 1.33307407e-02 1.33255363e-02 1.33220408e-02 1.33202542e-02 1.33201765e-02 + 1.33218078e-02 1.33251480e-02 1.33301970e-02 1.33369550e-02 1.33454220e-02 + 1.33555978e-02 1.33674825e-02 1.33810762e-02 1.33963787e-02 1.34133902e-02 + 1.34321105e-02 1.34525397e-02 1.34746779e-02 1.34985249e-02 1.35240808e-02 + 1.35513455e-02 1.35803192e-02 1.36110016e-02 1.36433930e-02 1.36774932e-02 + 1.37133022e-02 1.37508200e-02 1.37900467e-02 1.38309822e-02 1.38736265e-02 + 1.39179796e-02 1.39640414e-02 1.40118121e-02 1.40612914e-02 1.41124796e-02 + 1.41653765e-02 1.42199821e-02 1.42762964e-02 1.43343194e-02 1.43940512e-02 + 1.44554916e-02 1.45186406e-02 1.45834983e-02 1.46500646e-02 1.47183396e-02 + 1.47883231e-02 1.48600153e-02 1.49334160e-02 1.50085252e-02 1.50853430e-02 + 1.51638693e-02 1.52441041e-02 1.53260474e-02 1.54096992e-02 1.54950594e-02 + 1.55821280e-02 1.56709051e-02 1.57613905e-02 1.58535843e-02 1.59474864e-02 + 1.60430969e-02 1.61404156e-02 1.62394427e-02 1.63401780e-02 1.64426215e-02 + 1.65467732e-02 1.66526331e-02 1.67602012e-02 1.68694775e-02 1.69804618e-02 + 1.70931542e-02 1.72075547e-02 1.73236633e-02 1.74414798e-02 1.75610043e-02 + 1.76822368e-02 1.78051772e-02 1.79298256e-02 1.80561818e-02 1.81842458e-02 + 1.83140177e-02 1.84454973e-02 1.85786847e-02 1.87135798e-02 1.88501827e-02 + 1.89884931e-02 1.91285113e-02 1.92702370e-02 1.94136703e-02 1.95588111e-02 + 1.97056595e-02 1.98542153e-02 2.00044786e-02 2.01564492e-02 2.03101272e-02 + 2.04655126e-02 2.06226053e-02 2.07814052e-02 2.09419123e-02 2.11041267e-02 + 2.12680482e-02 2.14336768e-02 2.16010125e-02 2.17700553e-02 2.19408050e-02 + 2.21132617e-02 2.22874254e-02 2.24632959e-02 2.26408733e-02 2.28201575e-02 + 2.30011484e-02 2.31838461e-02 2.33682505e-02 2.35543615e-02 2.37421791e-02 + 2.39317033e-02 2.41229339e-02 2.43158711e-02 2.45105147e-02 2.47068647e-02 + 2.49049210e-02 2.51046836e-02 2.53061524e-02 2.55093275e-02 2.57142087e-02 + 2.59207960e-02 2.61290894e-02 2.63390888e-02 2.65507942e-02 2.67642055e-02 + 2.69793227e-02 2.71961457e-02 2.74146744e-02 2.76349090e-02 2.78568491e-02 + 2.80804949e-02 2.83058463e-02 2.85329032e-02 2.87616656e-02 2.89921334e-02 + 2.92243066e-02 2.94581851e-02 2.96937689e-02 2.99310578e-02 3.01700520e-02 + 3.04107512e-02 3.06531555e-02 3.08972648e-02 3.11430790e-02 3.13905981e-02 + 3.16398220e-02 3.18907507e-02 3.21433841e-02 3.23977222e-02 3.26537648e-02 + 3.29115120e-02 3.31709637e-02 3.34321199e-02 3.36949803e-02 3.39595451e-02 + 3.42258142e-02 3.44937874e-02 3.47634647e-02 3.50348461e-02 3.53079315e-02 + 3.55827209e-02 3.58592141e-02 3.61374112e-02 3.64173120e-02 3.66989165e-02 + 3.69822246e-02 3.72672363e-02 3.75539515e-02 3.78423701e-02 3.81324920e-02 + 3.84243173e-02 3.87178458e-02 3.90130775e-02 3.93100123e-02 3.96086502e-02 + 3.99089910e-02 4.02110347e-02 4.05147812e-02 4.08202305e-02 4.11273825e-02 + 4.14362371e-02 4.17467942e-02 4.20590539e-02 4.23730160e-02 4.26886804e-02 + 4.30060471e-02 4.33251159e-02 4.36458870e-02 4.39683600e-02 4.42925351e-02 + 4.46184120e-02 4.49459908e-02 4.52752714e-02 4.56062536e-02 4.59389375e-02 + 4.62733229e-02 4.66094097e-02 4.69471980e-02 4.72866875e-02 4.76278783e-02 + 4.79707703e-02 4.83153633e-02 4.86616573e-02 4.90096522e-02 4.93593480e-02 + 4.97107446e-02 5.00638418e-02 5.04186396e-02 5.07751380e-02 5.11333368e-02 + 5.14932360e-02 5.18548354e-02 5.22181351e-02 5.25831349e-02 5.29498347e-02 + 5.33182344e-02 5.36883341e-02 5.40601335e-02 5.44336326e-02 5.48088313e-02 + 5.51857296e-02 5.55643273e-02 5.59446244e-02 5.63266207e-02 5.67103163e-02 + 5.70957109e-02 5.74828046e-02 5.78715972e-02 5.82620886e-02 5.86542788e-02 + 5.90481677e-02 5.94437551e-02 5.98410410e-02 6.02400253e-02 6.06407080e-02 + 6.10430888e-02 6.14471678e-02 6.18529447e-02 6.22604197e-02 6.26695925e-02 + 6.30804630e-02 6.34930312e-02 6.39072970e-02 6.43232602e-02 6.47409209e-02 + 6.51602788e-02 6.55813340e-02 6.60040862e-02 6.64285354e-02 6.68546816e-02 + 6.72825245e-02 6.77120642e-02 6.81433005e-02 6.85762333e-02 6.90108625e-02 + 6.94471881e-02 6.98852099e-02 7.03249278e-02 7.07663417e-02 7.12094516e-02 + 7.16542573e-02 7.21007588e-02 7.25489558e-02 7.29988484e-02 7.34504365e-02 + 7.39037198e-02 7.43586984e-02 7.48153721e-02 7.52737408e-02 7.57338044e-02 + 7.61955628e-02 7.66590160e-02 7.71241637e-02 7.75910059e-02 7.80595425e-02 + 7.85297734e-02 7.90016985e-02 7.94753177e-02 7.99506308e-02 8.04276378e-02 + 8.09063385e-02 8.13867329e-02 8.18688208e-02 8.23526021e-02 8.28380768e-02 + 8.33252446e-02 8.38141056e-02 8.43046595e-02 8.47969063e-02 8.52908459e-02 + 8.57864782e-02 8.62838029e-02 8.67828201e-02 8.72835297e-02 8.77859314e-02 + 8.82900252e-02 8.87958110e-02 8.93032887e-02 8.98124581e-02 9.03233191e-02 + 9.08358717e-02 9.13501157e-02 9.18660509e-02 9.23836774e-02 9.29029949e-02 + 9.34240033e-02 9.39467025e-02 9.44710925e-02 9.49971730e-02 9.55249440e-02 + 9.60544054e-02 9.65855570e-02 9.71183987e-02 9.76529303e-02 9.81891519e-02 + 9.87270632e-02 9.92666641e-02 9.98079545e-02 1.00350934e-01 1.00895603e-01 + 1.01441962e-01 1.01990009e-01 1.02539745e-01 1.03091170e-01 1.03644283e-01 + 1.04199085e-01 1.04755576e-01 1.05313754e-01 1.05873621e-01 1.06435176e-01 + 1.06998419e-01 1.07563349e-01 1.08129968e-01 1.08698273e-01 1.09268266e-01 + 1.09839947e-01 1.10413314e-01 1.10988368e-01 1.11565110e-01 1.12143538e-01 + 1.12723652e-01 1.13305453e-01 1.13888941e-01 1.14474115e-01 1.15060974e-01 + 1.15649520e-01 1.16239751e-01 1.16831669e-01 1.17425271e-01 1.18020560e-01 + 1.18617533e-01 1.19216192e-01 1.19816535e-01 1.20418564e-01 1.21022277e-01 + 1.21627675e-01 1.22234757e-01 1.22843524e-01 1.23453975e-01 1.24066109e-01 + 1.24679928e-01 1.25295431e-01 1.25912617e-01 1.26531487e-01 1.27152040e-01 + 1.27774276e-01 1.28398196e-01 1.29023798e-01 1.29651083e-01 1.30280051e-01 + 1.30910702e-01 1.31543034e-01 1.32177050e-01 1.32812747e-01 1.33450126e-01 + 1.34089187e-01 1.34729929e-01 1.35372353e-01 1.36016459e-01 1.36662246e-01 + 1.37309713e-01 1.37958862e-01 1.38609692e-01 1.39262202e-01 1.39916393e-01 + 1.40572264e-01 1.41229815e-01 1.41889046e-01 1.42549958e-01 1.43212549e-01 + 1.43876819e-01 1.44542770e-01 1.45210399e-01 1.45879708e-01 1.46550695e-01 + 1.47223362e-01 1.47897707e-01 1.48573731e-01 1.49251433e-01 1.49930814e-01 + 1.50611872e-01 1.51294609e-01 1.51979023e-01 1.52665115e-01 1.53352885e-01 + 1.54042332e-01 1.54733456e-01 1.55426257e-01 1.56120735e-01 1.56816890e-01 + 1.57514721e-01 1.58214229e-01 1.58915413e-01 1.59618273e-01 1.60322809e-01 + 1.61029020e-01 1.61736908e-01 1.62446471e-01 1.63157709e-01 1.63870622e-01 + 1.64585210e-01 1.65301473e-01 1.66019411e-01 1.66739023e-01 1.67460310e-01 + 1.68183271e-01 1.68907906e-01 1.69634214e-01 1.70362197e-01 1.71091853e-01 + 1.71823182e-01 1.72556184e-01 1.73290860e-01 1.74027208e-01 1.74765229e-01 + 1.75504923e-01 1.76246289e-01 1.76989327e-01 1.77734037e-01 1.78480419e-01 + 1.79228473e-01 1.79978199e-01 1.80729595e-01 1.81482663e-01 1.82237402e-01 + 1.82993812e-01 1.83751893e-01 1.84511644e-01 1.85273065e-01 1.86036157e-01 + 1.86800919e-01 1.87567350e-01 1.88335451e-01 1.89105222e-01 1.89876662e-01 + 1.90649771e-01 1.91424549e-01 1.92200996e-01 1.92979112e-01 1.93758896e-01 + 1.94540348e-01 1.95323469e-01 1.96108257e-01 1.96894713e-01 1.97682837e-01 + 1.98472628e-01 1.99264087e-01 2.00057212e-01 2.00852004e-01 2.01648463e-01 + 2.02446589e-01 2.03246381e-01 2.04047839e-01 2.04850963e-01 2.05655753e-01 + 2.06462208e-01 2.07270329e-01 2.08080115e-01 2.08891567e-01 2.09704683e-01 + 2.10519464e-01 2.11335909e-01 2.12154019e-01 2.12973793e-01 2.13795231e-01 + 2.14618333e-01 2.15443098e-01 2.16269527e-01 2.17097619e-01 2.17927374e-01 + 2.18758792e-01 2.19591873e-01 2.20426616e-01 2.21263022e-01 2.22101090e-01 + 2.22940819e-01 2.23782211e-01 2.24625264e-01 2.25469978e-01 2.26316354e-01 + 2.27164390e-01 2.28014088e-01 2.28865446e-01 2.29718464e-01 2.30573143e-01 + 2.31429482e-01 2.32287480e-01 2.33147139e-01 2.34008457e-01 2.34871434e-01 + 2.35736070e-01 2.36602365e-01 2.37470319e-01 2.38339931e-01 2.39211202e-01 + 2.40084131e-01 2.40958717e-01 2.41834962e-01 2.42712864e-01 2.43592423e-01 + 2.44473640e-01 2.45356513e-01 2.46241044e-01 2.47127230e-01 2.48015074e-01 + 2.48904573e-01 2.49795728e-01 2.50688539e-01 2.51583006e-01 2.52479128e-01 + 2.53376905e-01 2.54276337e-01 2.55177424e-01 2.56080166e-01 2.56984562e-01 + 2.57890612e-01 2.58798316e-01 2.59707674e-01 2.60618685e-01 2.61531350e-01 + 2.62445667e-01 2.63361638e-01 2.64279262e-01 2.65198538e-01 2.66119466e-01 + 2.67042047e-01 2.67966279e-01 2.68892164e-01 2.69819699e-01 2.70748886e-01 + 2.71679724e-01 2.72612213e-01 2.73546353e-01 2.74482143e-01 2.75419584e-01 + 2.76358674e-01 2.77299415e-01 2.78241805e-01 2.79185844e-01 2.80131533e-01 + 2.81078870e-01 2.82027857e-01 2.82978492e-01 2.83930775e-01 2.84884707e-01 + 2.85840287e-01 2.86797514e-01 2.87756389e-01 2.88716911e-01 2.89679080e-01 + 2.90642896e-01 2.91608359e-01 2.92575468e-01 2.93544224e-01 2.94514625e-01 + 2.95486673e-01 2.96460366e-01 2.97435704e-01 2.98412687e-01 2.99391316e-01 + 3.00371589e-01 3.01353507e-01 3.02337069e-01 3.03322275e-01 3.04309125e-01 + 3.05297618e-01 3.06287755e-01 3.07279535e-01 3.08272958e-01 3.09268024e-01 + 3.10264733e-01 3.11263084e-01 3.12263076e-01 3.13264711e-01 3.14267987e-01 + 3.15272905e-01 3.16279464e-01 3.17287664e-01 3.18297505e-01 3.19308986e-01 + 3.20322108e-01 3.21336869e-01 3.22353271e-01 3.23371312e-01 3.24390992e-01 + 3.25412312e-01 3.26435271e-01 3.27459868e-01 3.28486104e-01 3.29513978e-01 + 3.30543490e-01 3.31574640e-01 3.32607428e-01 3.33641852e-01 3.34677914e-01 + 3.35715613e-01 3.36754949e-01 3.37795921e-01 3.38838529e-01 3.39882774e-01 + 3.40928653e-01 3.41976169e-01 3.43025320e-01 3.44076105e-01 3.45128526e-01 + 3.46182581e-01 3.47238271e-01 3.48295594e-01 3.49354552e-01 3.50415143e-01 + 3.51477368e-01 3.52541225e-01 3.53606716e-01 3.54673839e-01 3.55742595e-01 + 3.56812983e-01 3.57885003e-01 3.58958655e-01 3.60033939e-01 3.61110853e-01 + 3.62189399e-01 3.63269575e-01 3.64351382e-01 3.65434820e-01 3.66519887e-01 + 3.67606584e-01 3.68694911e-01 3.69784868e-01 3.70876453e-01 3.71969667e-01 + 3.73064510e-01 3.74160981e-01 3.75259081e-01 3.76358808e-01 3.77460163e-01 + 3.78563145e-01 3.79667755e-01 3.80773992e-01 3.81881855e-01 3.82991344e-01 + 3.84102460e-01 3.85215202e-01 3.86329570e-01 3.87445563e-01 3.88563181e-01 + 3.89682424e-01 3.90803292e-01 3.91925784e-01 3.93049901e-01 3.94175642e-01 + 3.95303006e-01 3.96431994e-01 3.97562605e-01 3.98694839e-01 3.99828696e-01 + 4.00964175e-01 4.02101276e-01 4.03240000e-01 4.04380345e-01 4.05522312e-01 + 4.06665899e-01 4.07811108e-01 4.08957938e-01 4.10106388e-01 4.11256458e-01 + 4.12408148e-01 4.13561458e-01 4.14716388e-01 4.15872936e-01 4.17031104e-01 + 4.18190890e-01 4.19352295e-01 4.20515317e-01 4.21679958e-01 4.22846216e-01 + 4.24014092e-01 4.25183585e-01 4.26354695e-01 4.27527421e-01 4.28701764e-01 + 4.29877723e-01 4.31055298e-01 4.32234488e-01 4.33415294e-01 4.34597715e-01 + 4.35781751e-01 4.36967401e-01 4.38154665e-01 4.39343544e-01 4.40534036e-01 + 4.41726142e-01 4.42919861e-01 4.44115193e-01 4.45312138e-01 4.46510695e-01 + 4.47710864e-01 4.48912645e-01 4.50116038e-01 4.51321043e-01 4.52527658e-01 + 4.53735885e-01 4.54945722e-01 4.56157169e-01 4.57370226e-01 4.58584894e-01 + 4.59801170e-01 4.61019056e-01 4.62238551e-01 4.63459655e-01 4.64682367e-01 + 4.65906688e-01 4.67132616e-01 4.68360152e-01 4.69589295e-01 4.70820046e-01 + 4.72052403e-01 4.73286367e-01 4.74521937e-01 4.75759113e-01 4.76997895e-01 + 4.78238283e-01 4.79480276e-01 4.80723873e-01 4.81969076e-01 4.83215882e-01 + 4.84464293e-01 4.85714308e-01 4.86965926e-01 4.88219148e-01 4.89473972e-01 + 4.90730400e-01 4.91988430e-01 4.93248062e-01 4.94509296e-01 4.95772131e-01 + 4.97036568e-01 4.98302606e-01 4.99570245e-01 5.00839485e-01 5.02110324e-01 + 5.03382764e-01 5.04656804e-01 5.05932442e-01 5.07209680e-01 5.08488517e-01 + 5.09768953e-01 5.11050986e-01 5.12334618e-01 5.13619847e-01 5.14906674e-01 + 5.16195098e-01 5.17485119e-01 5.18776737e-01 5.20069951e-01 5.21364761e-01 + 5.22661167e-01 5.23959168e-01 5.25258764e-01 5.26559955e-01 5.27862741e-01 + 5.29167122e-01 5.30473096e-01 5.31780664e-01 5.33089826e-01 5.34400580e-01 + 5.35712928e-01 5.37026868e-01 5.38342401e-01 5.39659526e-01 5.40978242e-01 + 5.42298550e-01 5.43620449e-01 5.44943939e-01 5.46269020e-01 5.47595691e-01 + 5.48923952e-01 5.50253802e-01 5.51585242e-01 5.52918272e-01 5.54252890e-01 + 5.55589096e-01 5.56926891e-01 5.58266274e-01 5.59607245e-01 5.60949803e-01 + 5.62293948e-01 5.63639680e-01 5.64986999e-01 5.66335903e-01 5.67686394e-01 + 5.69038470e-01 5.70392132e-01 5.71747378e-01 5.73104210e-01 5.74462626e-01 + 5.75822626e-01 5.77184210e-01 5.78547377e-01 5.79912128e-01 5.81278461e-01 + 5.82646378e-01 5.84015876e-01 5.85386957e-01 5.86759620e-01 5.88133864e-01 + 5.89509689e-01 5.90887095e-01 5.92266082e-01 5.93646649e-01 5.95028796e-01 + 5.96412522e-01 5.97797828e-01 5.99184713e-01 6.00573177e-01 6.01963219e-01 + 6.03354840e-01 6.04748038e-01 6.06142814e-01 6.07539167e-01 6.08937097e-01 + 6.10336603e-01 6.11737686e-01 6.13140346e-01 6.14544580e-01 6.15950391e-01 + 6.17357776e-01 6.18766736e-01 6.20177271e-01 6.21589379e-01 6.23003062e-01 + 6.24418319e-01 6.25835148e-01 6.27253551e-01 6.28673526e-01 6.30095073e-01 + 6.31518193e-01 6.32942884e-01 6.34369147e-01 6.35796981e-01 6.37226386e-01 + 6.38657361e-01 6.40089906e-01 6.41524022e-01 6.42959706e-01 6.44396960e-01 + 6.45835783e-01 6.47276175e-01 6.48718135e-01 6.50161663e-01 6.51606758e-01 + 6.53053421e-01 6.54501651e-01 6.55951448e-01 6.57402811e-01 6.58855740e-01 + 6.60310236e-01 6.61766296e-01 6.63223922e-01 6.64683112e-01 6.66143868e-01 + 6.67606187e-01 6.69070070e-01 6.70535517e-01 6.72002527e-01 6.73471100e-01 + 6.74941236e-01 6.76412934e-01 6.77886194e-01 6.79361015e-01 6.80837398e-01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.65580254e-01 1.65563515e-01 1.65546741e-01 1.65529929e-01 1.65513082e-01 + 1.65496198e-01 1.65479277e-01 1.65462319e-01 1.65445324e-01 1.65428292e-01 + 1.65411223e-01 1.65394117e-01 1.65376974e-01 1.65359793e-01 1.65342574e-01 + 1.65325318e-01 1.65308025e-01 1.65290693e-01 1.65273323e-01 1.65255915e-01 + 1.65238469e-01 1.65220985e-01 1.65203462e-01 1.65185901e-01 1.65168301e-01 + 1.65150662e-01 1.65132985e-01 1.65115268e-01 1.65097513e-01 1.65079718e-01 + 1.65061884e-01 1.65044011e-01 1.65026098e-01 1.65008145e-01 1.64990153e-01 + 1.64972120e-01 1.64954048e-01 1.64935936e-01 1.64917783e-01 1.64899591e-01 + 1.64881357e-01 1.64863083e-01 1.64844769e-01 1.64826414e-01 1.64808017e-01 + 1.64789580e-01 1.64771102e-01 1.64752582e-01 1.64734021e-01 1.64715418e-01 + 1.64696774e-01 1.64678088e-01 1.64659360e-01 1.64640590e-01 1.64621778e-01 + 1.64602924e-01 1.64584027e-01 1.64565088e-01 1.64546107e-01 1.64527082e-01 + 1.64508015e-01 1.64488905e-01 1.64469751e-01 1.64450555e-01 1.64431315e-01 + 1.64412031e-01 1.64392704e-01 1.64373334e-01 1.64353919e-01 1.64334460e-01 + 1.64314958e-01 1.64295411e-01 1.64275819e-01 1.64256183e-01 1.64236503e-01 + 1.64216777e-01 1.64197007e-01 1.64177192e-01 1.64157331e-01 1.64137425e-01 + 1.64117474e-01 1.64097477e-01 1.64077435e-01 1.64057346e-01 1.64037212e-01 + 1.64017032e-01 1.63996805e-01 1.63976532e-01 1.63956212e-01 1.63935846e-01 + 1.63915433e-01 1.63894973e-01 1.63874465e-01 1.63853911e-01 1.63833309e-01 + 1.63812660e-01 1.63791963e-01 1.63771218e-01 1.63750426e-01 1.63729585e-01 + 1.63708696e-01 1.63687759e-01 1.63666773e-01 1.63645738e-01 1.63624655e-01 + 1.63603523e-01 1.63582341e-01 1.63561111e-01 1.63539831e-01 1.63518501e-01 + 1.63497122e-01 1.63475693e-01 1.63454214e-01 1.63432685e-01 1.63411106e-01 + 1.63389476e-01 1.63367795e-01 1.63346064e-01 1.63324282e-01 1.63302449e-01 + 1.63280565e-01 1.63258629e-01 1.63236642e-01 1.63214603e-01 1.63192512e-01 + 1.63170369e-01 1.63148174e-01 1.63125927e-01 1.63103628e-01 1.63081275e-01 + 1.63058870e-01 1.63036412e-01 1.63013901e-01 1.62991337e-01 1.62968719e-01 + 1.62946048e-01 1.62923323e-01 1.62900544e-01 1.62877710e-01 1.62854823e-01 + 1.62831881e-01 1.62808885e-01 1.62785834e-01 1.62762728e-01 1.62739567e-01 + 1.62716350e-01 1.62693078e-01 1.62669751e-01 1.62646368e-01 1.62622929e-01 + 1.62599433e-01 1.62575882e-01 1.62552274e-01 1.62528609e-01 1.62504888e-01 + 1.62481109e-01 1.62457274e-01 1.62433381e-01 1.62409431e-01 1.62385423e-01 + 1.62361357e-01 1.62337233e-01 1.62313050e-01 1.62288810e-01 1.62264510e-01 + 1.62240152e-01 1.62215735e-01 1.62191259e-01 1.62166724e-01 1.62142129e-01 + 1.62117474e-01 1.62092759e-01 1.62067985e-01 1.62043150e-01 1.62018255e-01 + 1.61993299e-01 1.61968282e-01 1.61943204e-01 1.61918065e-01 1.61892865e-01 + 1.61867603e-01 1.61842279e-01 1.61816893e-01 1.61791445e-01 1.61765935e-01 + 1.61740362e-01 1.61714726e-01 1.61689028e-01 1.61663266e-01 1.61637441e-01 + 1.61611552e-01 1.61585600e-01 1.61559583e-01 1.61533503e-01 1.61507358e-01 + 1.61481148e-01 1.61454874e-01 1.61428535e-01 1.61402130e-01 1.61375660e-01 + 1.61349125e-01 1.61322523e-01 1.61295856e-01 1.61269123e-01 1.61242323e-01 + 1.61215456e-01 1.61188522e-01 1.61161522e-01 1.61134454e-01 1.61107319e-01 + 1.61080115e-01 1.61052844e-01 1.61025505e-01 1.60998098e-01 1.60970621e-01 + 1.60943076e-01 1.60915462e-01 1.60887779e-01 1.60860026e-01 1.60832204e-01 + 1.60804311e-01 1.60776349e-01 1.60748316e-01 1.60720212e-01 1.60692038e-01 + 1.60663792e-01 1.60635475e-01 1.60607087e-01 1.60578627e-01 1.60550095e-01 + 1.60521491e-01 1.60492814e-01 1.60464065e-01 1.60435242e-01 1.60406347e-01 + 1.60377378e-01 1.60348335e-01 1.60319219e-01 1.60290028e-01 1.60260764e-01 + 1.60231424e-01 1.60202010e-01 1.60172520e-01 1.60142955e-01 1.60113315e-01 + 1.60083599e-01 1.60053807e-01 1.60023938e-01 1.59993993e-01 1.59963971e-01 + 1.59933872e-01 1.59903696e-01 1.59873442e-01 1.59843110e-01 1.59812700e-01 + 1.59782212e-01 1.59751645e-01 1.59720999e-01 1.59690274e-01 1.59659470e-01 + 1.59628586e-01 1.59597622e-01 1.59566578e-01 1.59535454e-01 1.59504249e-01 + 1.59472963e-01 1.59441595e-01 1.59410146e-01 1.59378616e-01 1.59347003e-01 + 1.59315308e-01 1.59283531e-01 1.59251670e-01 1.59219726e-01 1.59187699e-01 + 1.59155589e-01 1.59123394e-01 1.59091115e-01 1.59058751e-01 1.59026303e-01 + 1.58993770e-01 1.58961151e-01 1.58928446e-01 1.58895656e-01 1.58862779e-01 + 1.58829816e-01 1.58796766e-01 1.58763628e-01 1.58730404e-01 1.58697092e-01 + 1.58663691e-01 1.58630203e-01 1.58596625e-01 1.58562959e-01 1.58529204e-01 + 1.58495359e-01 1.58461425e-01 1.58427400e-01 1.58393285e-01 1.58359079e-01 + 1.58324782e-01 1.58290394e-01 1.58255915e-01 1.58221343e-01 1.58186679e-01 + 1.58151923e-01 1.58117073e-01 1.58082131e-01 1.58047095e-01 1.58011965e-01 + 1.57976741e-01 1.57941422e-01 1.57906009e-01 1.57870501e-01 1.57834897e-01 + 1.57799197e-01 1.57763402e-01 1.57727510e-01 1.57691521e-01 1.57655435e-01 + 1.57619252e-01 1.57582971e-01 1.57546592e-01 1.57510115e-01 1.57473538e-01 + 1.57436863e-01 1.57400088e-01 1.57363214e-01 1.57326239e-01 1.57289164e-01 + 1.57251989e-01 1.57214712e-01 1.57177333e-01 1.57139853e-01 1.57102271e-01 + 1.57064586e-01 1.57026798e-01 1.56988907e-01 1.56950912e-01 1.56912813e-01 + 1.56874610e-01 1.56836302e-01 1.56797890e-01 1.56759371e-01 1.56720748e-01 + 1.56682017e-01 1.56643181e-01 1.56604237e-01 1.56565187e-01 1.56526028e-01 + 1.56486762e-01 1.56447387e-01 1.56407903e-01 1.56368311e-01 1.56328609e-01 + 1.56288796e-01 1.56248874e-01 1.56208841e-01 1.56168697e-01 1.56128441e-01 + 1.56088074e-01 1.56047594e-01 1.56007002e-01 1.55966297e-01 1.55925478e-01 + 1.55884546e-01 1.55843499e-01 1.55802338e-01 1.55761062e-01 1.55719670e-01 + 1.55678163e-01 1.55636539e-01 1.55594799e-01 1.55552941e-01 1.55510966e-01 + 1.55468873e-01 1.55426662e-01 1.55384333e-01 1.55341884e-01 1.55299315e-01 + 1.55256627e-01 1.55213818e-01 1.55170888e-01 1.55127838e-01 1.55084665e-01 + 1.55041370e-01 1.54997953e-01 1.54954413e-01 1.54910749e-01 1.54866961e-01 + 1.54823050e-01 1.54779013e-01 1.54734851e-01 1.54690564e-01 1.54646150e-01 + 1.54601610e-01 1.54556943e-01 1.54512149e-01 1.54467226e-01 1.54422176e-01 + 1.54376996e-01 1.54331687e-01 1.54286249e-01 1.54240680e-01 1.54194981e-01 + 1.54149150e-01 1.54103188e-01 1.54057094e-01 1.54010867e-01 1.53964507e-01 + 1.53918014e-01 1.53871386e-01 1.53824625e-01 1.53777728e-01 1.53730696e-01 + 1.53683527e-01 1.53636223e-01 1.53588781e-01 1.53541202e-01 1.53493486e-01 + 1.53445630e-01 1.53397636e-01 1.53349503e-01 1.53301229e-01 1.53252815e-01 + 1.53204260e-01 1.53155564e-01 1.53106726e-01 1.53057745e-01 1.53008621e-01 + 1.52959354e-01 1.52909943e-01 1.52860387e-01 1.52810686e-01 1.52760840e-01 + 1.52710847e-01 1.52660708e-01 1.52610421e-01 1.52559987e-01 1.52509404e-01 + 1.52458673e-01 1.52407792e-01 1.52356762e-01 1.52305580e-01 1.52254248e-01 + 1.52202764e-01 1.52151129e-01 1.52099340e-01 1.52047398e-01 1.51995302e-01 + 1.51943052e-01 1.51890647e-01 1.51838087e-01 1.51785370e-01 1.51732497e-01 + 1.51679467e-01 1.51626279e-01 1.51572932e-01 1.51519426e-01 1.51465761e-01 + 1.51411936e-01 1.51357950e-01 1.51303802e-01 1.51249493e-01 1.51195021e-01 + 1.51140386e-01 1.51085587e-01 1.51030624e-01 1.50975496e-01 1.50920202e-01 + 1.50864742e-01 1.50809116e-01 1.50753322e-01 1.50697360e-01 1.50641229e-01 + 1.50584929e-01 1.50528459e-01 1.50471818e-01 1.50415007e-01 1.50358023e-01 + 1.50300867e-01 1.50243538e-01 1.50186035e-01 1.50128358e-01 1.50070506e-01 + 1.50012478e-01 1.49954274e-01 1.49895893e-01 1.49837334e-01 1.49778596e-01 + 1.49719680e-01 1.49660584e-01 1.49601308e-01 1.49541850e-01 1.49482211e-01 + 1.49422390e-01 1.49362385e-01 1.49302197e-01 1.49241824e-01 1.49181266e-01 + 1.49120523e-01 1.49059593e-01 1.48998475e-01 1.48937170e-01 1.48875676e-01 + 1.48813992e-01 1.48752119e-01 1.48690055e-01 1.48627799e-01 1.48565351e-01 + 1.48502710e-01 1.48439876e-01 1.48376847e-01 1.48313623e-01 1.48250203e-01 + 1.48186586e-01 1.48122773e-01 1.48058761e-01 1.47994550e-01 1.47930139e-01 + 1.47865528e-01 1.47800717e-01 1.47735703e-01 1.47670486e-01 1.47605066e-01 + 1.47539442e-01 1.47473613e-01 1.47407579e-01 1.47341337e-01 1.47274889e-01 + 1.47208232e-01 1.47141367e-01 1.47074292e-01 1.47007006e-01 1.46939509e-01 + 1.46871800e-01 1.46803878e-01 1.46735743e-01 1.46667393e-01 1.46598827e-01 + 1.46530046e-01 1.46461047e-01 1.46391831e-01 1.46322396e-01 1.46252742e-01 + 1.46182867e-01 1.46112772e-01 1.46042454e-01 1.45971913e-01 1.45901149e-01 + 1.45830160e-01 1.45758946e-01 1.45687506e-01 1.45615839e-01 1.45543943e-01 + 1.45471819e-01 1.45399465e-01 1.45326880e-01 1.45254064e-01 1.45181016e-01 + 1.45107734e-01 1.45034218e-01 1.44960467e-01 1.44886480e-01 1.44812256e-01 + 1.44737795e-01 1.44663094e-01 1.44588154e-01 1.44512974e-01 1.44437552e-01 + 1.44361888e-01 1.44285981e-01 1.44209829e-01 1.44133432e-01 1.44056789e-01 + 1.43979899e-01 1.43902761e-01 1.43825374e-01 1.43747737e-01 1.43669849e-01 + 1.43591710e-01 1.43513317e-01 1.43434671e-01 1.43355770e-01 1.43276613e-01 + 1.43197200e-01 1.43117528e-01 1.43037599e-01 1.42957409e-01 1.42876959e-01 + 1.42796247e-01 1.42715272e-01 1.42634034e-01 1.42552530e-01 1.42470761e-01 + 1.42388726e-01 1.42306422e-01 1.42223850e-01 1.42141007e-01 1.42057894e-01 + 1.41974509e-01 1.41890851e-01 1.41806919e-01 1.41722711e-01 1.41638228e-01 + 1.41553467e-01 1.41468428e-01 1.41383109e-01 1.41297511e-01 1.41211630e-01 + 1.41125467e-01 1.41039020e-01 1.40952288e-01 1.40865271e-01 1.40777966e-01 + 1.40690373e-01 1.40602491e-01 1.40514319e-01 1.40425855e-01 1.40337099e-01 + 1.40248048e-01 1.40158703e-01 1.40069062e-01 1.39979124e-01 1.39888888e-01 + 1.39798352e-01 1.39707515e-01 1.39616377e-01 1.39524936e-01 1.39433191e-01 + 1.39341140e-01 1.39248784e-01 1.39156119e-01 1.39063146e-01 1.38969862e-01 + 1.38876268e-01 1.38782361e-01 1.38688141e-01 1.38593606e-01 1.38498755e-01 + 1.38403586e-01 1.38308099e-01 1.38212293e-01 1.38116166e-01 1.38019716e-01 + 1.37922943e-01 1.37825846e-01 1.37728423e-01 1.37630672e-01 1.37532594e-01 + 1.37434185e-01 1.37335446e-01 1.37236375e-01 1.37136970e-01 1.37037230e-01 + 1.36937155e-01 1.36836742e-01 1.36735991e-01 1.36634900e-01 1.36533467e-01 + 1.36431692e-01 1.36329574e-01 1.36227110e-01 1.36124300e-01 1.36021142e-01 + 1.35917635e-01 1.35813778e-01 1.35709568e-01 1.35605006e-01 1.35500089e-01 + 1.35394817e-01 1.35289187e-01 1.35183199e-01 1.35076851e-01 1.34970142e-01 + 1.34863070e-01 1.34755634e-01 1.34647833e-01 1.34539665e-01 1.34431128e-01 + 1.34322223e-01 1.34212946e-01 1.34103297e-01 1.33993274e-01 1.33882876e-01 + 1.33772101e-01 1.33660948e-01 1.33549416e-01 1.33437503e-01 1.33325207e-01 + 1.33212528e-01 1.33099463e-01 1.32986012e-01 1.32872172e-01 1.32757943e-01 + 1.32643323e-01 1.32528310e-01 1.32412904e-01 1.32297101e-01 1.32180902e-01 + 1.32064305e-01 1.31947307e-01 1.31829908e-01 1.31712106e-01 1.31593899e-01 + 1.31475287e-01 1.31356267e-01 1.31236838e-01 1.31116998e-01 1.30996746e-01 + 1.30876081e-01 1.30755001e-01 1.30633504e-01 1.30511588e-01 1.30389253e-01 + 1.30266497e-01 1.30143318e-01 1.30019714e-01 1.29895684e-01 1.29771227e-01 + 1.29646341e-01 1.29521024e-01 1.29395274e-01 1.29269091e-01 1.29142472e-01 + 1.29015417e-01 1.28887922e-01 1.28759987e-01 1.28631611e-01 1.28502791e-01 + 1.28373525e-01 1.28243813e-01 1.28113653e-01 1.27983043e-01 1.27851981e-01 + 1.27720466e-01 1.27588496e-01 1.27456070e-01 1.27323186e-01 1.27189841e-01 + 1.27056036e-01 1.26921767e-01 1.26787033e-01 1.26651833e-01 1.26516166e-01 + 1.26380028e-01 1.26243419e-01 1.26106337e-01 1.25968780e-01 1.25830747e-01 + 1.25692235e-01 1.25553244e-01 1.25413771e-01 1.25273815e-01 1.25133375e-01 + 1.24992448e-01 1.24851032e-01 1.24709127e-01 1.24566730e-01 1.24423839e-01 + 1.24280454e-01 1.24136571e-01 1.23992190e-01 1.23847309e-01 1.23701926e-01 + 1.23556040e-01 1.23409647e-01 1.23262748e-01 1.23115340e-01 1.22967422e-01 + 1.22818991e-01 1.22670046e-01 1.22520585e-01 1.22370607e-01 1.22220110e-01 + 1.22069091e-01 1.21917550e-01 1.21765484e-01 1.21612892e-01 1.21459773e-01 + 1.21306123e-01 1.21151942e-01 1.20997228e-01 1.20841979e-01 1.20686193e-01 + 1.20529869e-01 1.20373004e-01 1.20215598e-01 1.20057648e-01 1.19899152e-01 + 1.19740109e-01 1.19580518e-01 1.19420375e-01 1.19259680e-01 1.19098431e-01 + 1.18936626e-01 1.18774263e-01 1.18611341e-01 1.18447857e-01 1.18283810e-01 + 1.18119199e-01 1.17954021e-01 1.17788276e-01 1.17621960e-01 1.17455072e-01 + 1.17287611e-01 1.17119575e-01 1.16950961e-01 1.16781770e-01 1.16611997e-01 + 1.16441643e-01 1.16270705e-01 1.16099181e-01 1.15927070e-01 1.15754370e-01 + 1.15581079e-01 1.15407195e-01 1.15232718e-01 1.15057644e-01 1.14881973e-01 + 1.14705703e-01 1.14528831e-01 1.14351357e-01 1.14173279e-01 1.13994594e-01 + 1.13815302e-01 1.13635400e-01 1.13454887e-01 1.13273762e-01 1.13092022e-01 + 1.12909666e-01 1.12726692e-01 1.12543099e-01 1.12358884e-01 1.12174047e-01 + 1.11988586e-01 1.11802499e-01 1.11615785e-01 1.11428441e-01 1.11240467e-01 + 1.11051860e-01 1.10862619e-01 1.10672743e-01 1.10482230e-01 1.10291079e-01 + 1.10099287e-01 1.09906853e-01 1.09713777e-01 1.09520055e-01 1.09325688e-01 + 1.09130672e-01 1.08935008e-01 1.08738692e-01 1.08541725e-01 1.08344104e-01 + 1.08145827e-01 1.07946894e-01 1.07747304e-01 1.07547053e-01 1.07346142e-01 + 1.07144569e-01 1.06942333e-01 1.06739431e-01 1.06535863e-01 1.06331627e-01 + 1.06126723e-01 1.05921148e-01 1.05714902e-01 1.05507982e-01 1.05300389e-01 + 1.05092120e-01 1.04883175e-01 1.04673552e-01 1.04463250e-01 1.04252268e-01 + 1.04040604e-01 1.03828258e-01 1.03615228e-01 1.03401513e-01 1.03187113e-01 + 1.02972026e-01 1.02756250e-01 1.02539786e-01 1.02322631e-01 1.02104785e-01 + 1.01886248e-01 1.01667017e-01 1.01447092e-01 1.01226473e-01 1.01005158e-01 + 1.00783146e-01 1.00560436e-01 1.00337028e-01 1.00112922e-01 9.98881150e-02 + 9.96626076e-02 9.94363989e-02 9.92094881e-02 9.89818746e-02 9.87535577e-02 + 9.85245367e-02 9.82948112e-02 9.80643804e-02 9.78332440e-02 9.76014013e-02 + 9.73688518e-02 9.71355952e-02 9.69016310e-02 9.66669588e-02 9.64315783e-02 + 9.61954891e-02 9.59586908e-02 9.57211834e-02 9.54829664e-02 9.52440398e-02 + 9.50044033e-02 9.47640568e-02 9.45230003e-02 9.42812335e-02 9.40387567e-02 + 9.37955696e-02 9.35516725e-02 9.33070653e-02 9.30617482e-02 9.28157214e-02 + 9.25689850e-02 9.23215393e-02 9.20733846e-02 9.18245212e-02 9.15749495e-02 + 9.13246699e-02 9.10736827e-02 9.08219886e-02 9.05695880e-02 9.03164816e-02 + 9.00626699e-02 8.98081536e-02 8.95529334e-02 8.92970102e-02 8.90403847e-02 + 8.87830577e-02 8.85250303e-02 8.82663032e-02 8.80068776e-02 8.77467546e-02 + 8.74859351e-02 8.72244204e-02 8.69622117e-02 8.66993103e-02 8.64357174e-02 + 8.61714345e-02 8.59064630e-02 8.56408044e-02 8.53744602e-02 8.51074320e-02 + 8.48397215e-02 8.45713304e-02 8.43022605e-02 8.40325136e-02 8.37620916e-02 + 8.34909965e-02 8.32192302e-02 8.29467950e-02 8.26736929e-02 8.23999262e-02 + 8.21254970e-02 8.18504079e-02 8.15746611e-02 8.12982592e-02 8.10212047e-02 + 8.07435002e-02 8.04651484e-02 8.01861521e-02 7.99065141e-02 7.96262372e-02 + 7.93453246e-02 7.90637791e-02 7.87816039e-02 7.84988023e-02 7.82153774e-02 + 7.79313327e-02 7.76466715e-02 7.73613974e-02 7.70755139e-02 7.67890246e-02 + 7.65019334e-02 7.62142440e-02 7.59259604e-02 7.56370865e-02 7.53476263e-02 + 7.50575841e-02 7.47669641e-02 7.44757706e-02 7.41840079e-02 7.38916807e-02 + 7.35987934e-02 7.33053507e-02 7.30113575e-02 7.27168185e-02 7.24217387e-02 + 7.21261231e-02 7.18299768e-02 7.15333051e-02 7.12361133e-02 7.09384067e-02 + 7.06401909e-02 7.03414715e-02 7.00422541e-02 6.97425446e-02 6.94423488e-02 + 6.91416728e-02 6.88405225e-02 6.85389043e-02 6.82368244e-02 6.79342891e-02 + 6.76313050e-02 6.73278787e-02 6.70240169e-02 6.67197264e-02 6.64150140e-02 + 6.61098869e-02 6.58043520e-02 6.54984168e-02 6.51920884e-02 6.48853744e-02 + 6.45782823e-02 6.42708198e-02 6.39629946e-02 6.36548146e-02 6.33462879e-02 + 6.30374225e-02 6.27282267e-02 6.24187088e-02 6.21088773e-02 6.17987406e-02 + 6.14883076e-02 6.11775870e-02 6.08665877e-02 6.05553188e-02 6.02437893e-02 + 5.99320086e-02 5.96199860e-02 5.93077311e-02 5.89952534e-02 5.86825627e-02 + 5.83696689e-02 5.80565818e-02 5.77433118e-02 5.74298688e-02 5.71162634e-02 + 5.68025058e-02 5.64886069e-02 5.61745771e-02 5.58604274e-02 5.55461687e-02 + 5.52318121e-02 5.49173687e-02 5.46028499e-02 5.42882672e-02 5.39736321e-02 + 5.36589562e-02 5.33442514e-02 5.30295296e-02 5.27148029e-02 5.24000835e-02 + 5.20853836e-02 5.17707158e-02 5.14560924e-02 5.11415263e-02 5.08270302e-02 + 5.05126170e-02 5.01982998e-02 4.98840918e-02 4.95700061e-02 4.92560564e-02 + 4.89422560e-02 4.86286186e-02 4.83151580e-02 4.80018882e-02 4.76888231e-02 + 4.73759769e-02 4.70633638e-02 4.67509982e-02 4.64388946e-02 4.61270676e-02 + 4.58155320e-02 4.55043026e-02 4.51933944e-02 4.48828225e-02 4.45726020e-02 + 4.42627483e-02 4.39532767e-02 4.36442030e-02 4.33355426e-02 4.30273114e-02 + 4.27195253e-02 4.24122002e-02 4.21053521e-02 4.17989974e-02 4.14931524e-02 + 4.11878333e-02 4.08830568e-02 4.05788395e-02 4.02751981e-02 3.99721494e-02 + 3.96697104e-02 3.93678979e-02 3.90667293e-02 3.87662217e-02 3.84663923e-02 + 3.81672586e-02 3.78688381e-02 3.75711484e-02 3.72742070e-02 3.69780319e-02 + 3.66826407e-02 3.63880515e-02 3.60942822e-02 3.58013509e-02 3.55092758e-02 + 3.52180750e-02 3.49277670e-02 3.46383700e-02 3.43499026e-02 3.40623832e-02 + 3.37758304e-02 3.34902629e-02 3.32056994e-02 3.29221586e-02 3.26396593e-02 + 3.23582205e-02 3.20778611e-02 3.17986000e-02 3.15204562e-02 3.12434489e-02 + 3.09675972e-02 3.06929202e-02 3.04194370e-02 3.01471670e-02 2.98761294e-02 + 2.96063435e-02 2.93378286e-02 2.90706040e-02 2.88046891e-02 2.85401033e-02 + 2.82768660e-02 2.80149966e-02 2.77545145e-02 2.74954392e-02 2.72377901e-02 + 2.69815866e-02 2.67268481e-02 2.64735941e-02 2.62218441e-02 2.59716174e-02 + 2.57229334e-02 2.54758115e-02 2.52302711e-02 2.49863315e-02 2.47440120e-02 + 2.45033320e-02 2.42643105e-02 2.40269669e-02 2.37913204e-02 2.35573900e-02 + 2.33251949e-02 2.30947540e-02 2.28660864e-02 2.26392110e-02 2.24141466e-02 + 2.21909120e-02 2.19695260e-02 2.17500072e-02 2.15323742e-02 2.13166455e-02 + 2.11028396e-02 2.08909747e-02 2.06810691e-02 2.04731411e-02 2.02672086e-02 + 2.00632896e-02 1.98614019e-02 1.96615634e-02 1.94637917e-02 1.92681043e-02 + 1.90745186e-02 1.88830519e-02 1.86937213e-02 1.85065440e-02 1.83215368e-02 + 1.81387165e-02 1.79580998e-02 1.77797030e-02 1.76035426e-02 1.74296348e-02 + 1.72579956e-02 1.70886409e-02 1.69215864e-02 1.67568478e-02 1.65944402e-02 + 1.64343791e-02 1.62766795e-02 1.61213562e-02 1.59684240e-02 1.58178973e-02 + 1.56697904e-02 1.55241176e-02 1.53808927e-02 1.52401295e-02 1.51018416e-02 + 1.49660422e-02 1.48327446e-02 1.47019616e-02 1.45737059e-02 1.44479901e-02 + 1.43248264e-02 1.42042269e-02 1.40862035e-02 1.39707676e-02 1.38579308e-02 + 1.37477041e-02 1.36400985e-02 1.35351246e-02 1.34327929e-02 1.33331135e-02 + 1.32360964e-02 1.31417514e-02 1.30500877e-02 1.29611147e-02 1.28748412e-02 + 1.27912760e-02 1.27104274e-02 1.26323037e-02 1.25569127e-02 1.24842620e-02 + 1.24143590e-02 1.23472109e-02 1.22828243e-02 1.22212060e-02 1.21623621e-02 + 1.21062986e-02 1.20530213e-02 1.20025356e-02 1.19548467e-02 1.19099595e-02 + 1.18678785e-02 1.18286081e-02 1.17921522e-02 1.17585148e-02 1.17276991e-02 + 1.16997084e-02 1.16745455e-02 1.16522130e-02 1.16327133e-02 1.16160484e-02 + 1.16022198e-02 1.15912292e-02 1.15830776e-02 1.15777658e-02 1.15752944e-02 + 1.15756637e-02 1.15788736e-02 1.15849238e-02 1.15938137e-02 1.16055423e-02 + 1.16201084e-02 1.16375106e-02 1.16577471e-02 1.16808156e-02 1.17067140e-02 + 1.17354395e-02 1.17669892e-02 1.18013598e-02 1.18385478e-02 1.18785493e-02 + 1.19213604e-02 1.19669765e-02 1.20153931e-02 1.20666051e-02 1.21206073e-02 + 1.21773942e-02 1.22369601e-02 1.22992988e-02 1.23644040e-02 1.24322691e-02 + 1.25028871e-02 1.25762510e-02 1.26523533e-02 1.27311863e-02 1.28127420e-02 + 1.28970121e-02 1.29839883e-02 1.30736618e-02 1.31660235e-02 1.32610642e-02 + 1.33587744e-02 1.34591444e-02 1.35621641e-02 1.36678232e-02 1.37761113e-02 + 1.38870177e-02 1.40005314e-02 1.41166411e-02 1.42353355e-02 1.43566028e-02 + 1.44804312e-02 1.46068085e-02 1.47357225e-02 1.48671606e-02 1.50011099e-02 + 1.51375576e-02 1.52764904e-02 1.54178949e-02 1.55617576e-02 1.57080646e-02 + 1.58568020e-02 1.60079555e-02 1.61615108e-02 1.63174534e-02 1.64757685e-02 + 1.66364411e-02 1.67994562e-02 1.69647985e-02 1.71324525e-02 1.73024027e-02 + 1.74746333e-02 1.76491283e-02 1.78258717e-02 1.80048472e-02 1.81860385e-02 + 1.83694290e-02 1.85550020e-02 1.87427408e-02 1.89326284e-02 1.91246477e-02 + 1.93187815e-02 1.95150125e-02 1.97133233e-02 1.99136963e-02 2.01161138e-02 + 2.03205580e-02 2.05270111e-02 2.07354551e-02 2.09458718e-02 2.11582431e-02 + 2.13725507e-02 2.15887763e-02 2.18069014e-02 2.20269075e-02 2.22487759e-02 + 2.24724880e-02 2.26980251e-02 2.29253683e-02 2.31544988e-02 2.33853976e-02 + 2.36180458e-02 2.38524242e-02 2.40885138e-02 2.43262955e-02 2.45657500e-02 + 2.48068582e-02 2.50496007e-02 2.52939584e-02 2.55399119e-02 2.57874418e-02 + 2.60365287e-02 2.62871534e-02 2.65392963e-02 2.67929381e-02 2.70480593e-02 + 2.73046406e-02 2.75626624e-02 2.78221053e-02 2.80829500e-02 2.83451769e-02 + 2.86087667e-02 2.88736999e-02 2.91399572e-02 2.94075191e-02 2.96763664e-02 + 2.99464796e-02 3.02178395e-02 3.04904267e-02 3.07642221e-02 3.10392064e-02 + 3.13153605e-02 3.15926651e-02 3.18711011e-02 3.21506496e-02 3.24312916e-02 + 3.27130079e-02 3.29957798e-02 3.32795883e-02 3.35644146e-02 3.38502401e-02 + 3.41370460e-02 3.44248137e-02 3.47135246e-02 3.50031602e-02 3.52937021e-02 + 3.55851319e-02 3.58774314e-02 3.61705823e-02 3.64645665e-02 3.67593660e-02 + 3.70549627e-02 3.73513388e-02 3.76484764e-02 3.79463579e-02 3.82449655e-02 + 3.85442817e-02 3.88442891e-02 3.91449703e-02 3.94463079e-02 3.97482849e-02 + 4.00508841e-02 4.03540886e-02 4.06578813e-02 4.09622456e-02 4.12671648e-02 + 4.15726221e-02 4.18786013e-02 4.21850858e-02 4.24920594e-02 4.27995060e-02 + 4.31074094e-02 4.34157537e-02 4.37245230e-02 4.40337017e-02 4.43432741e-02 + 4.46532246e-02 4.49635380e-02 4.52741988e-02 4.55851920e-02 4.58965024e-02 + 4.62081152e-02 4.65200155e-02 4.68321886e-02 4.71446199e-02 4.74572950e-02 + 4.77701996e-02 4.80833192e-02 4.83966400e-02 4.87101479e-02 4.90238289e-02 + 4.93376695e-02 4.96516559e-02 4.99657746e-02 5.02800123e-02 5.05943557e-02 + 5.09087917e-02 5.12233073e-02 5.15378895e-02 5.18525256e-02 5.21672030e-02 + 5.24819092e-02 5.27966317e-02 5.31113583e-02 5.34260768e-02 5.37407752e-02 + 5.40554416e-02 5.43700642e-02 5.46846314e-02 5.49991317e-02 5.53135536e-02 + 5.56278858e-02 5.59421172e-02 5.62562368e-02 5.65702336e-02 5.68840968e-02 + 5.71978158e-02 5.75113800e-02 5.78247790e-02 5.81380025e-02 5.84510402e-02 + 5.87638822e-02 5.90765185e-02 5.93889392e-02 5.97011346e-02 6.00130952e-02 + 6.03248115e-02 6.06362741e-02 6.09474738e-02 6.12584015e-02 6.15690482e-02 + 6.18794050e-02 6.21894631e-02 6.24992140e-02 6.28086489e-02 6.31177596e-02 + 6.34265377e-02 6.37349751e-02 6.40430636e-02 6.43507952e-02 6.46581622e-02 + 6.49651567e-02 6.52717712e-02 6.55779981e-02 6.58838299e-02 6.61892594e-02 + 6.64942794e-02 6.67988828e-02 6.71030625e-02 6.74068117e-02 6.77101237e-02 + 6.80129917e-02 6.83154092e-02 6.86173697e-02 6.89188669e-02 6.92198944e-02 + 6.95204462e-02 6.98205161e-02 7.01200982e-02 7.04191867e-02 7.07177757e-02 + 7.10158596e-02 7.13134329e-02 7.16104900e-02 7.19070256e-02 7.22030344e-02 + 7.24985112e-02 7.27934509e-02 7.30878484e-02 7.33816990e-02 7.36749977e-02 + 7.39677398e-02 7.42599207e-02 7.45515358e-02 7.48425807e-02 7.51330509e-02 + 7.54229421e-02 7.57122502e-02 7.60009711e-02 7.62891006e-02 7.65766348e-02 + 7.68635699e-02 7.71499020e-02 7.74356274e-02 7.77207425e-02 7.80052438e-02 + 7.82891277e-02 7.85723908e-02 7.88550299e-02 7.91370416e-02 7.94184229e-02 + 7.96991705e-02 7.99792815e-02 8.02587530e-02 8.05375820e-02 8.08157657e-02 + 8.10933015e-02 8.13701866e-02 8.16464184e-02 8.19219944e-02 8.21969122e-02 + 8.24711693e-02 8.27447635e-02 8.30176924e-02 8.32899539e-02 8.35615458e-02 + 8.38324661e-02 8.41027128e-02 8.43722839e-02 8.46411775e-02 8.49093918e-02 + 8.51769250e-02 8.54437756e-02 8.57099417e-02 8.59754218e-02 8.62402144e-02 + 8.65043180e-02 8.67677312e-02 8.70304527e-02 8.72924810e-02 8.75538151e-02 + 8.78144536e-02 8.80743954e-02 8.83336395e-02 8.85921847e-02 8.88500302e-02 + 8.91071748e-02 8.93636178e-02 8.96193583e-02 8.98743956e-02 9.01287287e-02 + 9.03823571e-02 9.06352801e-02 9.08874971e-02 9.11390074e-02 9.13898107e-02 + 9.16399063e-02 9.18892939e-02 9.21379731e-02 9.23859434e-02 9.26332047e-02 + 9.28797566e-02 9.31255989e-02 9.33707315e-02 9.36151540e-02 9.38588666e-02 + 9.41018690e-02 9.43441612e-02 9.45857433e-02 9.48266152e-02 9.50667771e-02 + 9.53062290e-02 9.55449711e-02 9.57830036e-02 9.60203266e-02 9.62569405e-02 + 9.64928454e-02 9.67280417e-02 9.69625298e-02 9.71963100e-02 9.74293827e-02 + 9.76617483e-02 9.78934074e-02 9.81243603e-02 9.83546076e-02 9.85841499e-02 + 9.88129878e-02 9.90411218e-02 9.92685525e-02 9.94952807e-02 9.97213070e-02 + 9.99466321e-02 1.00171257e-01 1.00395182e-01 1.00618408e-01 1.00840936e-01 + 1.01062766e-01 1.01283901e-01 1.01504340e-01 1.01724084e-01 1.01943134e-01 + 1.02161492e-01 1.02379158e-01 1.02596133e-01 1.02812418e-01 1.03028014e-01 + 1.03242923e-01 1.03457145e-01 1.03670682e-01 1.03883534e-01 1.04095702e-01 + 1.04307189e-01 1.04517994e-01 1.04728119e-01 1.04937566e-01 1.05146335e-01 + 1.05354428e-01 1.05561846e-01 1.05768590e-01 1.05974662e-01 1.06180062e-01 + 1.06384793e-01 1.06588855e-01 1.06792249e-01 1.06994978e-01 1.07197042e-01 + 1.07398443e-01 1.07599182e-01 1.07799261e-01 1.07998680e-01 1.08197442e-01 + 1.08395548e-01 1.08592999e-01 1.08789797e-01 1.08985943e-01 1.09181439e-01 + 1.09376286e-01 1.09570485e-01 1.09764039e-01 1.09956948e-01 1.10149214e-01 + 1.10340840e-01 1.10531825e-01 1.10722172e-01 1.10911883e-01 1.11100959e-01 + 1.11289401e-01 1.11477211e-01 1.11664391e-01 1.11850942e-01 1.12036866e-01 + 1.12222165e-01 1.12406840e-01 1.12590892e-01 1.12774325e-01 1.12957138e-01 + 1.13139333e-01 1.13320913e-01 1.13501880e-01 1.13682233e-01 1.13861976e-01 + 1.14041111e-01 1.14219637e-01 1.14397559e-01 1.14574876e-01 1.14751591e-01 + 1.14927705e-01 1.15103221e-01 1.15278139e-01 1.15452462e-01 1.15626191e-01 + 1.15799328e-01 1.15971875e-01 1.16143834e-01 1.16315205e-01 1.16485991e-01 + 1.16656194e-01 1.16825815e-01 1.16994856e-01 1.17163320e-01 1.17331206e-01 + 1.17498518e-01 1.17665257e-01 1.17831424e-01 1.17997022e-01 1.18162053e-01 + 1.18326517e-01 1.18490417e-01 1.18653754e-01 1.18816531e-01 1.18978749e-01 + 1.19140409e-01 1.19301514e-01 1.19462065e-01 1.19622064e-01 1.19781513e-01 + 1.19940414e-01 1.20098767e-01 1.20256576e-01 1.20413841e-01 1.20570565e-01 + 1.20726749e-01 1.20882395e-01 1.21037505e-01 1.21192080e-01 1.21346123e-01 + 1.21499635e-01 1.21652617e-01 1.21805072e-01 1.21957001e-01 1.22108406e-01 + 1.22259289e-01 1.22409651e-01 1.22559495e-01 1.22708821e-01 1.22857632e-01 + 1.23005930e-01 1.23153715e-01 1.23300991e-01 1.23447758e-01 1.23594019e-01 + 1.23739774e-01 1.23885027e-01 1.24029777e-01 1.24174028e-01 1.24317781e-01 + 1.24461038e-01 1.24603800e-01 1.24746069e-01 1.24887847e-01 1.25029136e-01 + 1.25169936e-01 1.25310251e-01 1.25450081e-01 1.25589428e-01 1.25728294e-01 + 1.25866681e-01 1.26004590e-01 1.26142024e-01 1.26278983e-01 1.26415469e-01 + 1.26551484e-01 1.26687030e-01 1.26822109e-01 1.26956721e-01 1.27090870e-01 + 1.27224555e-01 1.27357780e-01 1.27490545e-01 1.27622852e-01 1.27754704e-01 + 1.27886101e-01 1.28017045e-01 1.28147538e-01 1.28277582e-01 1.28407177e-01 + 1.28536327e-01 1.28665031e-01 1.28793293e-01 1.28921113e-01 1.29048493e-01 + 1.29175435e-01 1.29301941e-01 1.29428011e-01 1.29553648e-01 1.29678853e-01 + 1.29803627e-01 1.29927973e-01 1.30051892e-01 1.30175385e-01 1.30298454e-01 + 1.30421101e-01 1.30543327e-01 1.30665133e-01 1.30786522e-01 1.30907494e-01 + 1.31028051e-01 1.31148196e-01 1.31267929e-01 1.31387251e-01 1.31506165e-01 + 1.31624672e-01 1.31742773e-01 1.31860470e-01 1.31977765e-01 1.32094658e-01 + 1.32211152e-01 1.32327248e-01 1.32442947e-01 1.32558252e-01 1.32673162e-01 + 1.32787680e-01 1.32901808e-01 1.33015546e-01 1.33128897e-01 1.33241861e-01 + 1.33354441e-01 1.33466637e-01 1.33578451e-01 1.33689884e-01 1.33800939e-01 + 1.33911615e-01 1.34021916e-01 1.34131841e-01 1.34241394e-01 1.34350574e-01 + 1.34459383e-01 1.34567824e-01 1.34675896e-01 1.34783602e-01 1.34890944e-01 + 1.34997921e-01 1.35104536e-01 1.35210791e-01 1.35316685e-01 1.35422222e-01 + 1.35527402e-01 1.35632226e-01 1.35736697e-01 1.35840814e-01 1.35944580e-01 + 1.36047997e-01 1.36151064e-01 1.36253784e-01 1.36356158e-01 1.36458187e-01 + 1.36559873e-01 1.36661216e-01 1.36762219e-01 1.36862882e-01 1.36963207e-01 + 1.37063195e-01 1.37162847e-01 1.37262165e-01 1.37361150e-01 1.37459803e-01 + 1.37558126e-01 1.37656119e-01 1.37753784e-01 1.37851123e-01 1.37948136e-01 + 1.38044824e-01 1.38141190e-01 1.38237233e-01 1.38332957e-01 1.38428361e-01 + 1.38523446e-01 1.38618215e-01 1.38712668e-01 1.38806807e-01 1.38900633e-01 + 1.38994146e-01 1.39087349e-01 1.39180241e-01 1.39272826e-01 1.39365103e-01 + 1.39457074e-01 1.39548740e-01 1.39640102e-01 1.39731162e-01 1.39821920e-01 + 1.39912378e-01 1.40002537e-01 1.40092398e-01 1.40181961e-01 1.40271230e-01 + 1.40360203e-01 1.40448884e-01 1.40537272e-01 1.40625368e-01 1.40713175e-01 + 1.40800693e-01 1.40887923e-01 1.40974866e-01 1.41061523e-01 1.41147896e-01 + 1.41233986e-01 1.41319793e-01 1.41405319e-01 1.41490565e-01 1.41575532e-01 + 1.41660220e-01 1.41744632e-01 1.41828768e-01 1.41912628e-01 1.41996216e-01 + 1.42079530e-01 1.42162572e-01 1.42245344e-01 1.42327847e-01 1.42410081e-01 + 1.42492047e-01 1.42573747e-01 1.42655181e-01 1.42736351e-01 1.42817257e-01 + 1.42897901e-01 1.42978283e-01 1.43058405e-01 1.43138268e-01 1.43217872e-01 + 1.43297218e-01 1.43376309e-01 1.43455143e-01 1.43533723e-01 1.43612050e-01 + 1.43690124e-01 1.43767947e-01 1.43845519e-01 1.43922841e-01 1.43999914e-01 + 1.44076740e-01 1.44153319e-01 1.44229652e-01 1.44305740e-01 1.44381584e-01 + 1.44457185e-01 1.44532544e-01 1.44607662e-01 1.44682539e-01 1.44757177e-01 + 1.44831577e-01 1.44905739e-01 1.44979665e-01 1.45053355e-01 1.45126809e-01 + 1.45200031e-01 1.45273019e-01 1.45345774e-01 1.45418299e-01 1.45490593e-01 + 1.45562658e-01 1.45634494e-01 1.45706102e-01 1.45777484e-01 1.45848639e-01 + 1.45919569e-01 1.45990275e-01 1.46060758e-01 1.46131018e-01 1.46201056e-01 + 1.46270873e-01 1.46340470e-01 1.46409848e-01 1.46479008e-01 1.46547950e-01 + 1.46616675e-01 1.46685184e-01 1.46753479e-01 1.46821558e-01 1.46889425e-01 + 1.46957079e-01 1.47024520e-01 1.47091751e-01 1.47158772e-01 1.47225583e-01 + 1.47292185e-01 1.47358580e-01 1.47424768e-01 1.47490749e-01 1.47556524e-01 + 1.47622095e-01 1.47687462e-01 1.47752626e-01 1.47817587e-01 1.47882347e-01 + 1.38518338e-01 1.38476565e-01 1.38434740e-01 1.38392864e-01 1.38350938e-01 + 1.38308960e-01 1.38266931e-01 1.38224851e-01 1.38182720e-01 1.38140538e-01 + 1.38098305e-01 1.38056020e-01 1.38013684e-01 1.37971296e-01 1.37928857e-01 + 1.37886366e-01 1.37843824e-01 1.37801230e-01 1.37758585e-01 1.37715888e-01 + 1.37673139e-01 1.37630338e-01 1.37587486e-01 1.37544581e-01 1.37501625e-01 + 1.37458617e-01 1.37415556e-01 1.37372444e-01 1.37329279e-01 1.37286062e-01 + 1.37242794e-01 1.37199472e-01 1.37156099e-01 1.37112673e-01 1.37069195e-01 + 1.37025664e-01 1.36982081e-01 1.36938445e-01 1.36894757e-01 1.36851016e-01 + 1.36807222e-01 1.36763376e-01 1.36719477e-01 1.36675525e-01 1.36631520e-01 + 1.36587463e-01 1.36543352e-01 1.36499189e-01 1.36454972e-01 1.36410702e-01 + 1.36366380e-01 1.36322004e-01 1.36277574e-01 1.36233092e-01 1.36188556e-01 + 1.36143967e-01 1.36099325e-01 1.36054629e-01 1.36009880e-01 1.35965077e-01 + 1.35920221e-01 1.35875311e-01 1.35830347e-01 1.35785330e-01 1.35740259e-01 + 1.35695134e-01 1.35649956e-01 1.35604723e-01 1.35559437e-01 1.35514096e-01 + 1.35468702e-01 1.35423254e-01 1.35377752e-01 1.35332195e-01 1.35286585e-01 + 1.35240920e-01 1.35195201e-01 1.35149428e-01 1.35103600e-01 1.35057718e-01 + 1.35011782e-01 1.34965791e-01 1.34919746e-01 1.34873646e-01 1.34827492e-01 + 1.34781283e-01 1.34735020e-01 1.34688702e-01 1.34642329e-01 1.34595901e-01 + 1.34549419e-01 1.34502882e-01 1.34456290e-01 1.34409643e-01 1.34362941e-01 + 1.34316184e-01 1.34269372e-01 1.34222505e-01 1.34175583e-01 1.34128606e-01 + 1.34081573e-01 1.34034486e-01 1.33987343e-01 1.33940145e-01 1.33892892e-01 + 1.33845583e-01 1.33798219e-01 1.33750799e-01 1.33703324e-01 1.33655794e-01 + 1.33608207e-01 1.33560566e-01 1.33512869e-01 1.33465116e-01 1.33417307e-01 + 1.33369443e-01 1.33321523e-01 1.33273547e-01 1.33225515e-01 1.33177428e-01 + 1.33129285e-01 1.33081085e-01 1.33032830e-01 1.32984519e-01 1.32936152e-01 + 1.32887728e-01 1.32839249e-01 1.32790713e-01 1.32742122e-01 1.32693474e-01 + 1.32644770e-01 1.32596010e-01 1.32547193e-01 1.32498320e-01 1.32449391e-01 + 1.32400405e-01 1.32351363e-01 1.32302265e-01 1.32253110e-01 1.32203899e-01 + 1.32154631e-01 1.32105306e-01 1.32055925e-01 1.32006488e-01 1.31956993e-01 + 1.31907442e-01 1.31857835e-01 1.31808170e-01 1.31758449e-01 1.31708671e-01 + 1.31658836e-01 1.31608945e-01 1.31558996e-01 1.31508991e-01 1.31458929e-01 + 1.31408809e-01 1.31358633e-01 1.31308400e-01 1.31258110e-01 1.31207762e-01 + 1.31157358e-01 1.31106897e-01 1.31056378e-01 1.31005802e-01 1.30955169e-01 + 1.30904479e-01 1.30853732e-01 1.30802927e-01 1.30752065e-01 1.30701146e-01 + 1.30650170e-01 1.30599136e-01 1.30548045e-01 1.30496896e-01 1.30445690e-01 + 1.30394426e-01 1.30343106e-01 1.30291727e-01 1.30240291e-01 1.30188798e-01 + 1.30137247e-01 1.30085639e-01 1.30033973e-01 1.29982249e-01 1.29930468e-01 + 1.29878629e-01 1.29826732e-01 1.29774778e-01 1.29722766e-01 1.29670696e-01 + 1.29618569e-01 1.29566384e-01 1.29514141e-01 1.29461841e-01 1.29409482e-01 + 1.29357066e-01 1.29304592e-01 1.29252060e-01 1.29199470e-01 1.29146823e-01 + 1.29094117e-01 1.29041354e-01 1.28988533e-01 1.28935654e-01 1.28882717e-01 + 1.28829721e-01 1.28776668e-01 1.28723557e-01 1.28670388e-01 1.28617161e-01 + 1.28563876e-01 1.28510533e-01 1.28457132e-01 1.28403673e-01 1.28350156e-01 + 1.28296581e-01 1.28242948e-01 1.28189256e-01 1.28135507e-01 1.28081699e-01 + 1.28027834e-01 1.27973910e-01 1.27919928e-01 1.27865888e-01 1.27811790e-01 + 1.27757634e-01 1.27703420e-01 1.27649147e-01 1.27594816e-01 1.27540427e-01 + 1.27485980e-01 1.27431475e-01 1.27376912e-01 1.27322290e-01 1.27267611e-01 + 1.27212873e-01 1.27158077e-01 1.27103223e-01 1.27048310e-01 1.26993340e-01 + 1.26938311e-01 1.26883224e-01 1.26828079e-01 1.26772875e-01 1.26717614e-01 + 1.26662294e-01 1.26606916e-01 1.26551480e-01 1.26495986e-01 1.26440433e-01 + 1.26384823e-01 1.26329154e-01 1.26273427e-01 1.26217642e-01 1.26161799e-01 + 1.26105898e-01 1.26049938e-01 1.25993920e-01 1.25937845e-01 1.25881711e-01 + 1.25825519e-01 1.25769269e-01 1.25712961e-01 1.25656594e-01 1.25600170e-01 + 1.25543688e-01 1.25487147e-01 1.25430549e-01 1.25373892e-01 1.25317178e-01 + 1.25260405e-01 1.25203574e-01 1.25146686e-01 1.25089739e-01 1.25032735e-01 + 1.24975672e-01 1.24918552e-01 1.24861374e-01 1.24804137e-01 1.24746843e-01 + 1.24689491e-01 1.24632082e-01 1.24574614e-01 1.24517089e-01 1.24459505e-01 + 1.24401864e-01 1.24344166e-01 1.24286409e-01 1.24228595e-01 1.24170723e-01 + 1.24112794e-01 1.24054806e-01 1.23996762e-01 1.23938659e-01 1.23880499e-01 + 1.23822281e-01 1.23764006e-01 1.23705674e-01 1.23647284e-01 1.23588836e-01 + 1.23530331e-01 1.23471769e-01 1.23413149e-01 1.23354472e-01 1.23295737e-01 + 1.23236946e-01 1.23178097e-01 1.23119190e-01 1.23060227e-01 1.23001206e-01 + 1.22942129e-01 1.22882994e-01 1.22823802e-01 1.22764553e-01 1.22705247e-01 + 1.22645884e-01 1.22586464e-01 1.22526988e-01 1.22467454e-01 1.22407864e-01 + 1.22348217e-01 1.22288513e-01 1.22228752e-01 1.22168935e-01 1.22109061e-01 + 1.22049130e-01 1.21989143e-01 1.21929100e-01 1.21869000e-01 1.21808843e-01 + 1.21748630e-01 1.21688361e-01 1.21628036e-01 1.21567654e-01 1.21507216e-01 + 1.21446722e-01 1.21386172e-01 1.21325566e-01 1.21264904e-01 1.21204185e-01 + 1.21143411e-01 1.21082581e-01 1.21021696e-01 1.20960754e-01 1.20899757e-01 + 1.20838704e-01 1.20777596e-01 1.20716432e-01 1.20655212e-01 1.20593937e-01 + 1.20532607e-01 1.20471221e-01 1.20409780e-01 1.20348284e-01 1.20286733e-01 + 1.20225127e-01 1.20163465e-01 1.20101749e-01 1.20039978e-01 1.19978152e-01 + 1.19916271e-01 1.19854335e-01 1.19792345e-01 1.19730300e-01 1.19668200e-01 + 1.19606047e-01 1.19543838e-01 1.19481576e-01 1.19419259e-01 1.19356888e-01 + 1.19294463e-01 1.19231984e-01 1.19169450e-01 1.19106863e-01 1.19044222e-01 + 1.18981528e-01 1.18918779e-01 1.18855977e-01 1.18793122e-01 1.18730213e-01 + 1.18667250e-01 1.18604235e-01 1.18541166e-01 1.18478043e-01 1.18414868e-01 + 1.18351640e-01 1.18288359e-01 1.18225025e-01 1.18161638e-01 1.18098199e-01 + 1.18034707e-01 1.17971163e-01 1.17907566e-01 1.17843917e-01 1.17780216e-01 + 1.17716462e-01 1.17652656e-01 1.17588799e-01 1.17524889e-01 1.17460928e-01 + 1.17396915e-01 1.17332851e-01 1.17268735e-01 1.17204567e-01 1.17140349e-01 + 1.17076079e-01 1.17011757e-01 1.16947385e-01 1.16882962e-01 1.16818488e-01 + 1.16753964e-01 1.16689388e-01 1.16624762e-01 1.16560086e-01 1.16495360e-01 + 1.16430583e-01 1.16365756e-01 1.16300879e-01 1.16235952e-01 1.16170975e-01 + 1.16105949e-01 1.16040873e-01 1.15975748e-01 1.15910573e-01 1.15845349e-01 + 1.15780076e-01 1.15714754e-01 1.15649383e-01 1.15583963e-01 1.15518494e-01 + 1.15452977e-01 1.15387412e-01 1.15321798e-01 1.15256136e-01 1.15190426e-01 + 1.15124668e-01 1.15058862e-01 1.14993008e-01 1.14927107e-01 1.14861158e-01 + 1.14795162e-01 1.14729119e-01 1.14663029e-01 1.14596892e-01 1.14530707e-01 + 1.14464477e-01 1.14398199e-01 1.14331875e-01 1.14265505e-01 1.14199089e-01 + 1.14132627e-01 1.14066119e-01 1.13999565e-01 1.13932965e-01 1.13866320e-01 + 1.13799630e-01 1.13732894e-01 1.13666113e-01 1.13599288e-01 1.13532417e-01 + 1.13465503e-01 1.13398543e-01 1.13331539e-01 1.13264491e-01 1.13197399e-01 + 1.13130263e-01 1.13063084e-01 1.12995861e-01 1.12928594e-01 1.12861284e-01 + 1.12793931e-01 1.12726535e-01 1.12659096e-01 1.12591615e-01 1.12524091e-01 + 1.12456524e-01 1.12388916e-01 1.12321265e-01 1.12253573e-01 1.12185839e-01 + 1.12118063e-01 1.12050246e-01 1.11982388e-01 1.11914489e-01 1.11846549e-01 + 1.11778568e-01 1.11710547e-01 1.11642485e-01 1.11574383e-01 1.11506242e-01 + 1.11438060e-01 1.11369839e-01 1.11301578e-01 1.11233278e-01 1.11164939e-01 + 1.11096561e-01 1.11028144e-01 1.10959689e-01 1.10891195e-01 1.10822663e-01 + 1.10754093e-01 1.10685486e-01 1.10616840e-01 1.10548157e-01 1.10479437e-01 + 1.10410680e-01 1.10341886e-01 1.10273055e-01 1.10204188e-01 1.10135284e-01 + 1.10066345e-01 1.09997369e-01 1.09928358e-01 1.09859311e-01 1.09790229e-01 + 1.09721112e-01 1.09651960e-01 1.09582773e-01 1.09513552e-01 1.09444296e-01 + 1.09375007e-01 1.09305683e-01 1.09236326e-01 1.09166936e-01 1.09097512e-01 + 1.09028055e-01 1.08958566e-01 1.08889044e-01 1.08819489e-01 1.08749902e-01 + 1.08680284e-01 1.08610634e-01 1.08540952e-01 1.08471239e-01 1.08401495e-01 + 1.08331720e-01 1.08261914e-01 1.08192078e-01 1.08122212e-01 1.08052316e-01 + 1.07982391e-01 1.07912436e-01 1.07842452e-01 1.07772438e-01 1.07702397e-01 + 1.07632326e-01 1.07562227e-01 1.07492101e-01 1.07421946e-01 1.07351764e-01 + 1.07281555e-01 1.07211318e-01 1.07141055e-01 1.07070766e-01 1.07000449e-01 + 1.06930107e-01 1.06859739e-01 1.06789346e-01 1.06718927e-01 1.06648483e-01 + 1.06578015e-01 1.06507521e-01 1.06437004e-01 1.06366462e-01 1.06295897e-01 + 1.06225308e-01 1.06154696e-01 1.06084061e-01 1.06013403e-01 1.05942723e-01 + 1.05872021e-01 1.05801296e-01 1.05730551e-01 1.05659783e-01 1.05588995e-01 + 1.05518186e-01 1.05447356e-01 1.05376506e-01 1.05305636e-01 1.05234746e-01 + 1.05163837e-01 1.05092908e-01 1.05021961e-01 1.04950995e-01 1.04880011e-01 + 1.04809009e-01 1.04737989e-01 1.04666951e-01 1.04595897e-01 1.04524826e-01 + 1.04453738e-01 1.04382633e-01 1.04311513e-01 1.04240377e-01 1.04169226e-01 + 1.04098060e-01 1.04026878e-01 1.03955683e-01 1.03884473e-01 1.03813249e-01 + 1.03742012e-01 1.03670761e-01 1.03599498e-01 1.03528222e-01 1.03456933e-01 + 1.03385633e-01 1.03314321e-01 1.03242997e-01 1.03171662e-01 1.03100317e-01 + 1.03028961e-01 1.02957595e-01 1.02886219e-01 1.02814833e-01 1.02743439e-01 + 1.02672036e-01 1.02600624e-01 1.02529204e-01 1.02457776e-01 1.02386340e-01 + 1.02314898e-01 1.02243448e-01 1.02171992e-01 1.02100530e-01 1.02029062e-01 + 1.01957589e-01 1.01886110e-01 1.01814626e-01 1.01743138e-01 1.01671646e-01 + 1.01600150e-01 1.01528651e-01 1.01457148e-01 1.01385643e-01 1.01314135e-01 + 1.01242625e-01 1.01171114e-01 1.01099601e-01 1.01028087e-01 1.00956573e-01 + 1.00885058e-01 1.00813543e-01 1.00742029e-01 1.00670515e-01 1.00599003e-01 + 1.00527492e-01 1.00455983e-01 1.00384477e-01 1.00312973e-01 1.00241472e-01 + 1.00169974e-01 1.00098480e-01 1.00026990e-01 9.99555050e-02 9.98840245e-02 + 9.98125493e-02 9.97410797e-02 9.96696161e-02 9.95981588e-02 9.95267084e-02 + 9.94552650e-02 9.93838292e-02 9.93124014e-02 9.92409818e-02 9.91695709e-02 + 9.90981691e-02 9.90267768e-02 9.89553944e-02 9.88840222e-02 9.88126607e-02 + 9.87413103e-02 9.86699713e-02 9.85986441e-02 9.85273293e-02 9.84560271e-02 + 9.83847379e-02 9.83134622e-02 9.82422004e-02 9.81709529e-02 9.80997201e-02 + 9.80285023e-02 9.79573001e-02 9.78861138e-02 9.78149439e-02 9.77437907e-02 + 9.76726547e-02 9.76015362e-02 9.75304358e-02 9.74593538e-02 9.73882907e-02 + 9.73172468e-02 9.72462226e-02 9.71752186e-02 9.71042351e-02 9.70332725e-02 + 9.69623314e-02 9.68914121e-02 9.68205151e-02 9.67496408e-02 9.66787897e-02 + 9.66079621e-02 9.65371585e-02 9.64663793e-02 9.63956251e-02 9.63248961e-02 + 9.62541930e-02 9.61835160e-02 9.61128657e-02 9.60422425e-02 9.59716469e-02 + 9.59010792e-02 9.58305400e-02 9.57600297e-02 9.56895487e-02 9.56190976e-02 + 9.55486767e-02 9.54782865e-02 9.54079274e-02 9.53376000e-02 9.52673047e-02 + 9.51970419e-02 9.51268121e-02 9.50566158e-02 9.49864534e-02 9.49163254e-02 + 9.48462322e-02 9.47761744e-02 9.47061524e-02 9.46361667e-02 9.45662176e-02 + 9.44963058e-02 9.44264317e-02 9.43565957e-02 9.42867984e-02 9.42170402e-02 + 9.41473215e-02 9.40776429e-02 9.40080049e-02 9.39384078e-02 9.38688523e-02 + 9.37993388e-02 9.37298677e-02 9.36604397e-02 9.35910550e-02 9.35217143e-02 + 9.34524180e-02 9.33831666e-02 9.33139606e-02 9.32448006e-02 9.31756869e-02 + 9.31066201e-02 9.30376006e-02 9.29686291e-02 9.28997059e-02 9.28308316e-02 + 9.27620066e-02 9.26932315e-02 9.26245068e-02 9.25558330e-02 9.24872106e-02 + 9.24186400e-02 9.23501218e-02 9.22816566e-02 9.22132447e-02 9.21448867e-02 + 9.20765832e-02 9.20083346e-02 9.19401414e-02 9.18720042e-02 9.18039235e-02 + 9.17358998e-02 9.16679335e-02 9.16000253e-02 9.15321756e-02 9.14643850e-02 + 9.13966540e-02 9.13289830e-02 9.12613727e-02 9.11938235e-02 9.11263360e-02 + 9.10589106e-02 9.09915480e-02 9.09242486e-02 9.08570130e-02 9.07898417e-02 + 9.07227352e-02 9.06556940e-02 9.05887187e-02 9.05218099e-02 9.04549680e-02 + 9.03881935e-02 9.03214871e-02 9.02548492e-02 9.01882804e-02 9.01217813e-02 + 9.00553522e-02 8.99889939e-02 8.99227068e-02 8.98564915e-02 8.97903485e-02 + 8.97242783e-02 8.96582816e-02 8.95923588e-02 8.95265104e-02 8.94607371e-02 + 8.93950394e-02 8.93294177e-02 8.92638728e-02 8.91984050e-02 8.91330150e-02 + 8.90677033e-02 8.90024705e-02 8.89373170e-02 8.88722435e-02 8.88072505e-02 + 8.87423386e-02 8.86775083e-02 8.86127602e-02 8.85480947e-02 8.84835126e-02 + 8.84190142e-02 8.83546003e-02 8.82902712e-02 8.82260277e-02 8.81618702e-02 + 8.80977994e-02 8.80338157e-02 8.79699197e-02 8.79061120e-02 8.78423932e-02 + 8.77787637e-02 8.77152243e-02 8.76517753e-02 8.75884175e-02 8.75251513e-02 + 8.74619773e-02 8.73988961e-02 8.73359083e-02 8.72730143e-02 8.72102149e-02 + 8.71475104e-02 8.70849016e-02 8.70223890e-02 8.69599731e-02 8.68976544e-02 + 8.68354337e-02 8.67733114e-02 8.67112881e-02 8.66493644e-02 8.65875409e-02 + 8.65258180e-02 8.64641964e-02 8.64026767e-02 8.63412594e-02 8.62799451e-02 + 8.62187344e-02 8.61576278e-02 8.60966259e-02 8.60357293e-02 8.59749386e-02 + 8.59142542e-02 8.58536769e-02 8.57932071e-02 8.57328455e-02 8.56725925e-02 + 8.56124489e-02 8.55524151e-02 8.54924918e-02 8.54326794e-02 8.53729787e-02 + 8.53133900e-02 8.52539141e-02 8.51945515e-02 8.51353028e-02 8.50761685e-02 + 8.50171493e-02 8.49582456e-02 8.48994581e-02 8.48407874e-02 8.47822340e-02 + 8.47237984e-02 8.46654813e-02 8.46072833e-02 8.45492049e-02 8.44912466e-02 + 8.44334092e-02 8.43756930e-02 8.43180988e-02 8.42606271e-02 8.42032784e-02 + 8.41460533e-02 8.40889525e-02 8.40319764e-02 8.39751257e-02 8.39184009e-02 + 8.38618026e-02 8.38053314e-02 8.37489878e-02 8.36927724e-02 8.36366859e-02 + 8.35807286e-02 8.35249013e-02 8.34692046e-02 8.34136388e-02 8.33582048e-02 + 8.33029029e-02 8.32477338e-02 8.31926981e-02 8.31377963e-02 8.30830290e-02 + 8.30283967e-02 8.29739001e-02 8.29195397e-02 8.28653161e-02 8.28112297e-02 + 8.27572813e-02 8.27034714e-02 8.26498005e-02 8.25962691e-02 8.25428780e-02 + 8.24896276e-02 8.24365184e-02 8.23835511e-02 8.23307263e-02 8.22780444e-02 + 8.22255060e-02 8.21731118e-02 8.21208622e-02 8.20687579e-02 8.20167993e-02 + 8.19649871e-02 8.19133218e-02 8.18618039e-02 8.18104341e-02 8.17592128e-02 + 8.17081407e-02 8.16572182e-02 8.16064460e-02 8.15558245e-02 8.15053545e-02 + 8.14550363e-02 8.14048705e-02 8.13548578e-02 8.13049986e-02 8.12552935e-02 + 8.12057430e-02 8.11563478e-02 8.11071082e-02 8.10580250e-02 8.10090986e-02 + 8.09603295e-02 8.09117184e-02 8.08632657e-02 8.08149721e-02 8.07668379e-02 + 8.07188639e-02 8.06710504e-02 8.06233982e-02 8.05759075e-02 8.05285792e-02 + 8.04814136e-02 8.04344112e-02 8.03875727e-02 8.03408986e-02 8.02943893e-02 + 8.02480455e-02 8.02018675e-02 8.01558561e-02 8.01100116e-02 8.00643347e-02 + 8.00188258e-02 7.99734855e-02 7.99283142e-02 7.98833126e-02 7.98384810e-02 + 7.97938201e-02 7.97493304e-02 7.97050123e-02 7.96608664e-02 7.96168932e-02 + 7.95730933e-02 7.95294670e-02 7.94860149e-02 7.94427376e-02 7.93996355e-02 + 7.93567091e-02 7.93139590e-02 7.92713856e-02 7.92289895e-02 7.91867711e-02 + 7.91447310e-02 7.91028695e-02 7.90611873e-02 7.90196849e-02 7.89783626e-02 + 7.89372210e-02 7.88962607e-02 7.88554819e-02 7.88148854e-02 7.87744715e-02 + 7.87342407e-02 7.86941935e-02 7.86543304e-02 7.86146519e-02 7.85751584e-02 + 7.85358504e-02 7.84967284e-02 7.84577929e-02 7.84190442e-02 7.83804830e-02 + 7.83421096e-02 7.83039245e-02 7.82659282e-02 7.82281212e-02 7.81905038e-02 + 7.81530766e-02 7.81158400e-02 7.80787945e-02 7.80419405e-02 7.80052784e-02 + 7.79688088e-02 7.79325320e-02 7.78964485e-02 7.78605587e-02 7.78248631e-02 + 7.77893622e-02 7.77540563e-02 7.77189459e-02 7.76840314e-02 7.76493132e-02 + 7.76147919e-02 7.75804677e-02 7.75463412e-02 7.75124127e-02 7.74786828e-02 + 7.74451517e-02 7.74118199e-02 7.73786878e-02 7.73457559e-02 7.73130245e-02 + 7.72804941e-02 7.72481650e-02 7.72160377e-02 7.71841125e-02 7.71523900e-02 + 7.71208703e-02 7.70895541e-02 7.70584416e-02 7.70275332e-02 7.69968293e-02 + 7.69663304e-02 7.69360368e-02 7.69059488e-02 7.68760670e-02 7.68463915e-02 + 7.68169229e-02 7.67876614e-02 7.67586075e-02 7.67297616e-02 7.67011239e-02 + 7.66726949e-02 7.66444749e-02 7.66164642e-02 7.65886633e-02 7.65610725e-02 + 7.65336921e-02 7.65065225e-02 7.64795641e-02 7.64528171e-02 7.64262819e-02 + 7.63999589e-02 7.63738484e-02 7.63479508e-02 7.63222662e-02 7.62967952e-02 + 7.62715380e-02 7.62464950e-02 7.62216664e-02 7.61970526e-02 7.61726539e-02 + 7.61484706e-02 7.61245031e-02 7.61007516e-02 7.60772164e-02 7.60538979e-02 + 7.60307964e-02 7.60079121e-02 7.59852453e-02 7.59627964e-02 7.59405657e-02 + 7.59185533e-02 7.58967597e-02 7.58751851e-02 7.58538297e-02 7.58326939e-02 + 7.58117779e-02 7.57910820e-02 7.57706065e-02 7.57503516e-02 7.57303176e-02 + 7.57105048e-02 7.56909134e-02 7.56715437e-02 7.56523959e-02 7.56334703e-02 + 7.56147671e-02 7.55962866e-02 7.55780290e-02 7.55599946e-02 7.55421835e-02 + 7.55245961e-02 7.55072326e-02 7.54900931e-02 7.54731780e-02 7.54564874e-02 + 7.54400215e-02 7.54237806e-02 7.54077649e-02 7.53919746e-02 7.53764099e-02 + 7.53610711e-02 7.53459582e-02 7.53310716e-02 7.53164113e-02 7.53019777e-02 + 7.52877708e-02 7.52737910e-02 7.52600383e-02 7.52465130e-02 7.52332152e-02 + 7.52201451e-02 7.52073028e-02 7.51946887e-02 7.51823027e-02 7.51701451e-02 + 7.51582161e-02 7.51465158e-02 7.51350443e-02 7.51238019e-02 7.51127886e-02 + 7.51020046e-02 7.50914500e-02 7.50811251e-02 7.50710299e-02 7.50611645e-02 + 7.50515291e-02 7.50421239e-02 7.50329489e-02 7.50240043e-02 7.50152901e-02 + 7.50068066e-02 7.49985538e-02 7.49905318e-02 7.49827407e-02 7.49751807e-02 + 7.49678518e-02 7.49607542e-02 7.49538879e-02 7.49472530e-02 7.49408496e-02 + 7.49346779e-02 7.49287378e-02 7.49230295e-02 7.49175530e-02 7.49123084e-02 + 7.49072958e-02 7.49025153e-02 7.48979669e-02 7.48936506e-02 7.48895666e-02 + 7.48857148e-02 7.48820954e-02 7.48787084e-02 7.48755538e-02 7.48726317e-02 + 7.48699421e-02 7.48674851e-02 7.48652606e-02 7.48632687e-02 7.48615095e-02 + 7.48599830e-02 7.48586891e-02 7.48576279e-02 7.48567994e-02 7.48562037e-02 + 7.48558407e-02 7.48557104e-02 7.48558129e-02 7.48561481e-02 7.48567160e-02 + 7.48575167e-02 7.48585501e-02 7.48598162e-02 7.48613149e-02 7.48630464e-02 + 7.48650104e-02 7.48672071e-02 7.48696364e-02 7.48722982e-02 7.48751926e-02 + 7.48783194e-02 7.48816786e-02 7.48852703e-02 7.48890943e-02 7.48931506e-02 + 7.48974391e-02 7.49019598e-02 7.49067126e-02 7.49116975e-02 7.49169143e-02 + 7.49223631e-02 7.49280438e-02 7.49339562e-02 7.49401003e-02 7.49464760e-02 + 7.49530832e-02 7.49599219e-02 7.49669919e-02 7.49742931e-02 7.49818255e-02 + 7.49895890e-02 7.49975834e-02 7.50058087e-02 7.50142646e-02 7.50229512e-02 + 7.50318684e-02 7.50410158e-02 7.50503936e-02 7.50600015e-02 7.50698394e-02 + 7.50799072e-02 7.50902047e-02 7.51007318e-02 7.51114884e-02 7.51224743e-02 + 7.51336894e-02 7.51451335e-02 7.51568065e-02 7.51687082e-02 7.51808385e-02 + 7.51931972e-02 7.52057841e-02 7.52185991e-02 7.52316420e-02 7.52449126e-02 + 7.52584108e-02 7.52721363e-02 7.52860890e-02 7.53002688e-02 7.53146753e-02 + 7.53293085e-02 7.53441681e-02 7.53592540e-02 7.53745659e-02 7.53901036e-02 + 7.54058670e-02 7.54218558e-02 7.54380698e-02 7.54545087e-02 7.54711725e-02 + 7.54880609e-02 7.55051735e-02 7.55225103e-02 7.55400710e-02 7.55578553e-02 + 7.55758631e-02 7.55940940e-02 7.56125479e-02 7.56312245e-02 7.56501236e-02 + 7.56692448e-02 7.56885881e-02 7.57081530e-02 7.57279394e-02 7.57479470e-02 + 7.57681755e-02 7.57886247e-02 7.58092942e-02 7.58301840e-02 7.58512935e-02 + 7.58726227e-02 7.58941712e-02 7.59159386e-02 7.59379249e-02 7.59601296e-02 + 7.59825524e-02 7.60051932e-02 7.60280515e-02 7.60511271e-02 7.60744197e-02 + 7.60979290e-02 7.61216547e-02 7.61455964e-02 7.61697540e-02 7.61941269e-02 + 7.62187151e-02 7.62435180e-02 7.62685354e-02 7.62937671e-02 7.63192126e-02 + 7.63448716e-02 7.63707438e-02 7.63968289e-02 7.64231266e-02 7.64496364e-02 + 7.64763581e-02 7.65032913e-02 7.65304357e-02 7.65577909e-02 7.65853566e-02 + 7.66131325e-02 7.66411181e-02 7.66693131e-02 7.66977171e-02 7.67263299e-02 + 7.67551510e-02 7.67841801e-02 7.68134168e-02 7.68428607e-02 7.68725114e-02 + 7.69023687e-02 7.69324320e-02 7.69627011e-02 7.69931756e-02 7.70238549e-02 + 7.70547389e-02 7.70858271e-02 7.71171190e-02 7.71486144e-02 7.71803127e-02 + 7.72122137e-02 7.72443169e-02 7.72766219e-02 7.73091283e-02 7.73418357e-02 + 7.73747437e-02 7.74078518e-02 7.74411598e-02 7.74746671e-02 7.75083734e-02 + 7.75422781e-02 7.75763810e-02 7.76106816e-02 7.76451794e-02 7.76798741e-02 + 7.77147651e-02 7.77498522e-02 7.77851347e-02 7.78206124e-02 7.78562848e-02 + 7.78921513e-02 7.79282117e-02 7.79644654e-02 7.80009121e-02 7.80375512e-02 + 7.80743823e-02 7.81114050e-02 7.81486188e-02 7.81860233e-02 7.82236179e-02 + 7.82614023e-02 7.82993761e-02 7.83375386e-02 7.83758895e-02 7.84144284e-02 + 7.84531546e-02 7.84920679e-02 7.85311676e-02 7.85704534e-02 7.86099248e-02 + 7.86495813e-02 7.86894223e-02 7.87294475e-02 7.87696564e-02 7.88100485e-02 + 7.88506232e-02 7.88913802e-02 7.89323189e-02 7.89734389e-02 7.90147396e-02 + 7.90562205e-02 7.90978813e-02 7.91397213e-02 7.91817402e-02 7.92239373e-02 + 7.92663122e-02 7.93088645e-02 7.93515935e-02 7.93944988e-02 7.94375800e-02 + 7.94808364e-02 7.95242676e-02 7.95678731e-02 7.96116524e-02 7.96556049e-02 + 7.96997302e-02 7.97440277e-02 7.97884970e-02 7.98331374e-02 7.98779486e-02 + 7.99229300e-02 7.99680810e-02 8.00134012e-02 8.00588900e-02 8.01045468e-02 + 8.01503713e-02 8.01963628e-02 8.02425209e-02 8.02888450e-02 8.03353345e-02 + 8.03819890e-02 8.04288079e-02 8.04757907e-02 8.05229368e-02 8.05702458e-02 + 8.06177170e-02 8.06653500e-02 8.07131443e-02 8.07610992e-02 8.08092142e-02 + 8.08574888e-02 8.09059225e-02 8.09545148e-02 8.10032650e-02 8.10521726e-02 + 8.11012372e-02 8.11504581e-02 8.11998347e-02 8.12493667e-02 8.12990534e-02 + 8.13488942e-02 8.13988886e-02 8.14490361e-02 8.14993361e-02 8.15497881e-02 + 8.16003915e-02 8.16511457e-02 8.17020502e-02 8.17531045e-02 8.18043080e-02 + 8.18556601e-02 8.19071604e-02 8.19588081e-02 8.20106028e-02 8.20625439e-02 + 8.21146309e-02 8.21668631e-02 8.22192401e-02 8.22717613e-02 8.23244260e-02 + 8.23772339e-02 8.24301842e-02 8.24832764e-02 8.25365100e-02 8.25898843e-02 + 8.26433990e-02 8.26970532e-02 8.27508466e-02 8.28047785e-02 8.28588484e-02 + 8.29130557e-02 8.29673998e-02 8.30218801e-02 8.30764962e-02 8.31312474e-02 + 8.31861332e-02 8.32411529e-02 8.32963061e-02 8.33515922e-02 8.34070105e-02 + 8.34625605e-02 8.35182417e-02 8.35740534e-02 8.36299951e-02 8.36860663e-02 + 8.37422663e-02 8.37985946e-02 8.38550506e-02 8.39116338e-02 8.39683435e-02 + 8.40251792e-02 8.40821403e-02 8.41392263e-02 8.41964365e-02 8.42537705e-02 + 8.43112275e-02 8.43688072e-02 8.44265088e-02 8.44843318e-02 8.45422756e-02 + 8.46003397e-02 8.46585235e-02 8.47168264e-02 8.47752478e-02 8.48337872e-02 + 8.48924439e-02 8.49512175e-02 8.50101073e-02 8.50691128e-02 8.51282334e-02 + 8.51874685e-02 8.52468175e-02 8.53062799e-02 8.53658551e-02 8.54255425e-02 + 8.54853415e-02 8.55452516e-02 8.56052723e-02 8.56654028e-02 8.57256427e-02 + 8.57859914e-02 8.58464483e-02 8.59070128e-02 8.59676844e-02 8.60284625e-02 + 8.60893465e-02 8.61503358e-02 8.62114299e-02 8.62726282e-02 8.63339302e-02 + 8.63953352e-02 8.64568427e-02 8.65184522e-02 8.65801629e-02 8.66419745e-02 + 8.67038863e-02 8.67658977e-02 8.68280082e-02 8.68902172e-02 8.69525242e-02 + 8.70149285e-02 8.70774296e-02 8.71400270e-02 8.72027200e-02 8.72655081e-02 + 8.73283908e-02 8.73913675e-02 8.74544376e-02 8.75176005e-02 8.75808557e-02 + 8.76442026e-02 8.77076407e-02 8.77711694e-02 8.78347881e-02 8.78984963e-02 + 8.79622934e-02 8.80261789e-02 8.80901521e-02 8.81542126e-02 8.82183598e-02 + 8.82825930e-02 8.83469119e-02 8.84113157e-02 8.84758040e-02 8.85403762e-02 + 8.86050317e-02 8.86697700e-02 8.87345905e-02 8.87994927e-02 8.88644761e-02 + 8.89295400e-02 8.89946839e-02 8.90599073e-02 8.91252096e-02 8.91905903e-02 + 8.92560488e-02 8.93215845e-02 8.93871970e-02 8.94528857e-02 8.95186500e-02 + 8.95844894e-02 8.96504034e-02 8.97163914e-02 8.97824528e-02 8.98485871e-02 + 8.99147938e-02 8.99810724e-02 9.00474222e-02 9.01138428e-02 9.01803336e-02 + 9.02468942e-02 9.03135238e-02 9.03802221e-02 9.04469884e-02 9.05138223e-02 + 9.05807232e-02 9.06476906e-02 9.07147239e-02 9.07818226e-02 9.08489862e-02 + 9.09162142e-02 9.09835060e-02 9.10508611e-02 9.11182790e-02 9.11857591e-02 + 9.12533009e-02 9.13209040e-02 9.13885677e-02 9.14562916e-02 9.15240751e-02 + 9.15919178e-02 9.16598190e-02 9.17277784e-02 9.17957953e-02 9.18638692e-02 + 9.19319997e-02 9.20001862e-02 9.20684282e-02 9.21367252e-02 9.22050767e-02 + 9.22734821e-02 9.23419411e-02 9.24104530e-02 9.24790173e-02 9.25476336e-02 + 9.26163013e-02 9.26850199e-02 9.27537890e-02 9.28226080e-02 9.28914765e-02 + 9.29603938e-02 9.30293596e-02 9.30983734e-02 9.31674346e-02 9.32365427e-02 + 9.33056973e-02 9.33748978e-02 9.34441438e-02 9.35134347e-02 9.35827701e-02 + 9.36521496e-02 9.37215725e-02 9.37910385e-02 9.38605469e-02 9.39300975e-02 + 9.39996895e-02 9.40693227e-02 9.41389965e-02 9.42087104e-02 9.42784639e-02 + 9.43482566e-02 9.44180880e-02 9.44879576e-02 9.45578649e-02 9.46278095e-02 + 9.46977909e-02 9.47678086e-02 9.48378622e-02 9.49079511e-02 9.49780750e-02 + 9.50482333e-02 9.51184256e-02 9.51886514e-02 9.52589103e-02 9.53292017e-02 + 9.53995254e-02 9.54698806e-02 9.55402671e-02 9.56106844e-02 9.56811320e-02 + 9.57516094e-02 9.58221162e-02 9.58926520e-02 9.59632163e-02 9.60338086e-02 + 9.61044286e-02 9.61750756e-02 9.62457494e-02 9.63164495e-02 9.63871754e-02 + 9.64579266e-02 9.65287028e-02 9.65995035e-02 9.66703283e-02 9.67411766e-02 + 9.68120482e-02 9.68829425e-02 9.69538592e-02 9.70247977e-02 9.70957577e-02 + 9.71667387e-02 9.72377403e-02 9.73087621e-02 9.73798037e-02 9.74508645e-02 + 9.75219443e-02 9.75930426e-02 9.76641589e-02 9.77352928e-02 9.78064440e-02 + 9.78776119e-02 9.79487963e-02 9.80199966e-02 9.80912125e-02 9.81624436e-02 + 9.82336894e-02 9.83049495e-02 9.83762235e-02 9.84475111e-02 9.85188118e-02 + 9.85901251e-02 9.86614508e-02 9.87327884e-02 9.88041375e-02 9.88754977e-02 + 9.89468687e-02 9.90182499e-02 9.90896410e-02 9.91610417e-02 9.92324515e-02 + 9.93038701e-02 9.93752970e-02 9.94467318e-02 9.95181743e-02 9.95896239e-02 + 9.96610804e-02 9.97325432e-02 9.98040122e-02 9.98754867e-02 9.99469666e-02 + 1.00018451e-01 1.00089941e-01 1.00161434e-01 1.00232931e-01 1.00304432e-01 + 1.00375936e-01 1.00447442e-01 1.00518951e-01 1.00590461e-01 1.00661973e-01 + 1.00733487e-01 1.00805001e-01 1.00876516e-01 1.00948030e-01 1.01019545e-01 + 1.01091059e-01 1.01162572e-01 1.01234084e-01 1.01305594e-01 1.01377102e-01 + 1.01448607e-01 1.01520110e-01 1.01591610e-01 1.01663106e-01 1.01734599e-01 + 1.01806088e-01 1.01877572e-01 1.01949051e-01 1.02020525e-01 1.02091994e-01 + 1.02163457e-01 1.02234914e-01 1.02306364e-01 1.02377807e-01 1.02449244e-01 + 1.02520672e-01 1.02592093e-01 1.02663506e-01 1.02734911e-01 1.02806306e-01 + 1.02877693e-01 1.02949070e-01 1.03020437e-01 1.03091794e-01 1.03163141e-01 + 1.03234477e-01 1.03305802e-01 1.03377115e-01 1.03448417e-01 1.03519707e-01 + 1.03590985e-01 1.03662250e-01 1.03733502e-01 1.03804741e-01 1.03875966e-01 + 1.03947178e-01 1.04018375e-01 1.04089558e-01 1.04160726e-01 1.04231879e-01 + 1.04303017e-01 1.04374139e-01 1.04445245e-01 1.04516335e-01 1.04587409e-01 + 1.04658465e-01 1.04729504e-01 1.04800527e-01 1.04871531e-01 1.04942517e-01 + 1.05013485e-01 1.05084435e-01 1.05155365e-01 1.05226277e-01 1.05297169e-01 + 1.05368041e-01 1.05438894e-01 1.05509726e-01 1.05580538e-01 1.05651329e-01 + 1.05722099e-01 1.05792847e-01 1.05863574e-01 1.05934279e-01 1.06004962e-01 + 1.06075622e-01 1.06146260e-01 1.06216875e-01 1.06287467e-01 1.06358035e-01 + 1.06428579e-01 1.06499100e-01 1.06569596e-01 1.06640067e-01 1.06710514e-01 + 1.06780936e-01 1.06851332e-01 1.06921703e-01 1.06992049e-01 1.07062368e-01 + 1.07132661e-01 1.07202927e-01 1.07273167e-01 1.07343379e-01 1.07413565e-01 + 1.07483722e-01 1.07553852e-01 1.07623955e-01 1.07694028e-01 1.07764074e-01 + 1.07834090e-01 1.07904078e-01 1.07974036e-01 1.08043966e-01 1.08113865e-01 + 1.08183735e-01 1.08253574e-01 1.08323383e-01 1.08393162e-01 1.08462910e-01 + 1.08532626e-01 1.08602312e-01 1.08671966e-01 1.08741588e-01 1.08811179e-01 + 1.08880737e-01 1.08950263e-01 1.09019757e-01 1.09089217e-01 1.09158645e-01 + 1.09228040e-01 1.09297401e-01 1.09366728e-01 1.09436022e-01 1.09505281e-01 + 1.09574507e-01 1.09643698e-01 1.09712854e-01 1.09781975e-01 1.09851061e-01 + 1.09920112e-01 1.09989128e-01 1.10058108e-01 1.10127052e-01 1.10195959e-01 + 1.10264831e-01 1.10333666e-01 1.10402465e-01 1.10471226e-01 1.10539951e-01 + 1.10608638e-01 1.10677288e-01 1.10745900e-01 1.10814475e-01 1.10883011e-01 + 1.10951510e-01 1.11019970e-01 1.11088391e-01 1.11156774e-01 1.11225117e-01 + 1.11293422e-01 1.11361687e-01 1.11429913e-01 1.11498100e-01 1.11566246e-01 + 1.11634353e-01 1.11702419e-01 1.11770445e-01 1.11838431e-01 1.11906376e-01 + 1.11974280e-01 1.12042143e-01 1.12109965e-01 1.12177745e-01 1.12245484e-01 + 1.12313182e-01 1.12380837e-01 1.12448451e-01 1.12516022e-01 1.12583551e-01 + 1.12651038e-01 1.12718482e-01 1.12785883e-01 1.12853241e-01 1.12920556e-01 + 1.12987828e-01 1.13055056e-01 1.13122241e-01 1.13189382e-01 1.13256480e-01 + 1.13323533e-01 1.13390542e-01 1.13457507e-01 1.13524427e-01 1.13591303e-01 + 1.13658134e-01 1.13724920e-01 1.13791661e-01 1.13858356e-01 1.13925007e-01 + 1.13991612e-01 1.14058171e-01 1.14124685e-01 1.14191153e-01 1.14257575e-01 + 1.14323950e-01 1.14390280e-01 1.14456562e-01 1.14522799e-01 1.14588988e-01 + 1.14655131e-01 1.14721227e-01 1.14787276e-01 1.14853278e-01 1.14919232e-01 + 1.14985139e-01 1.15050998e-01 1.15116810e-01 1.15182574e-01 1.15248290e-01 + 1.15313957e-01 1.15379577e-01 1.15445148e-01 1.15510671e-01 1.15576146e-01 + 1.15641571e-01 1.15706948e-01 1.15772276e-01 1.15837555e-01 1.15902785e-01 + 1.15967965e-01 1.16033097e-01 1.16098179e-01 1.16163211e-01 1.16228193e-01 + 1.16293126e-01 1.16358009e-01 1.16422842e-01 1.16487625e-01 1.16552357e-01 + 1.16617040e-01 1.16681672e-01 1.16746253e-01 1.16810784e-01 1.16875264e-01 + 1.16939693e-01 1.17004071e-01 1.17068398e-01 1.17132674e-01 1.17196899e-01 + 1.17261073e-01 1.17325195e-01 1.17389266e-01 1.17453285e-01 1.17517252e-01 + 1.17581168e-01 1.17645032e-01 1.17708843e-01 1.17772603e-01 1.17836311e-01 + 1.17899966e-01 1.17963569e-01 1.18027120e-01 1.18090618e-01 1.18154064e-01 + 1.18217457e-01 1.18280797e-01 1.18344084e-01 1.18407319e-01 1.18470500e-01 + 1.18533629e-01 1.18596704e-01 1.18659726e-01 1.18722695e-01 1.18785610e-01 + 1.18848472e-01 1.18911281e-01 1.18974035e-01 1.19036736e-01 1.19099384e-01 + 1.03953624e+00 1.03772749e+00 1.03592023e+00 1.03411445e+00 1.03231016e+00 + 1.03050735e+00 1.02870603e+00 1.02690620e+00 1.02510785e+00 1.02331100e+00 + 1.02151562e+00 1.01972174e+00 1.01792935e+00 1.01613844e+00 1.01434902e+00 + 1.01256110e+00 1.01077466e+00 1.00898971e+00 1.00720626e+00 1.00542429e+00 + 1.00364382e+00 1.00186484e+00 1.00008735e+00 9.98311355e-01 9.96536852e-01 + 9.94763842e-01 9.92992326e-01 9.91222304e-01 9.89453777e-01 9.87686744e-01 + 9.85921207e-01 9.84157165e-01 9.82394619e-01 9.80633570e-01 9.78874017e-01 + 9.77115962e-01 9.75359404e-01 9.73604344e-01 9.71850782e-01 9.70098719e-01 + 9.68348155e-01 9.66599090e-01 9.64851525e-01 9.63105460e-01 9.61360895e-01 + 9.59617832e-01 9.57876269e-01 9.56136208e-01 9.54397649e-01 9.52660593e-01 + 9.50925039e-01 9.49190988e-01 9.47458441e-01 9.45727397e-01 9.43997858e-01 + 9.42269823e-01 9.40543293e-01 9.38818268e-01 9.37094749e-01 9.35372736e-01 + 9.33652230e-01 9.31933230e-01 9.30215737e-01 9.28499752e-01 9.26785274e-01 + 9.25072305e-01 9.23360844e-01 9.21650893e-01 9.19942450e-01 9.18235517e-01 + 9.16530094e-01 9.14826182e-01 9.13123780e-01 9.11422890e-01 9.09723511e-01 + 9.08025644e-01 9.06329289e-01 9.04634446e-01 9.02941117e-01 9.01249300e-01 + 8.99558998e-01 8.97870209e-01 8.96182935e-01 8.94497176e-01 8.92812931e-01 + 8.91130202e-01 8.89448989e-01 8.87769292e-01 8.86091112e-01 8.84414448e-01 + 8.82739302e-01 8.81065673e-01 8.79393562e-01 8.77722970e-01 8.76053896e-01 + 8.74386341e-01 8.72720306e-01 8.71055790e-01 8.69392795e-01 8.67731320e-01 + 8.66071366e-01 8.64412932e-01 8.62756021e-01 8.61100631e-01 8.59446764e-01 + 8.57794419e-01 8.56143597e-01 8.54494298e-01 8.52846523e-01 8.51200272e-01 + 8.49555545e-01 8.47912343e-01 8.46270666e-01 8.44630515e-01 8.42991889e-01 + 8.41354789e-01 8.39719216e-01 8.38085170e-01 8.36452650e-01 8.34821658e-01 + 8.33192195e-01 8.31564259e-01 8.29937852e-01 8.28312973e-01 8.26689624e-01 + 8.25067805e-01 8.23447515e-01 8.21828756e-01 8.20211528e-01 8.18595830e-01 + 8.16981664e-01 8.15369029e-01 8.13757927e-01 8.12148357e-01 8.10540319e-01 + 8.08933815e-01 8.07328844e-01 8.05725406e-01 8.04123503e-01 8.02523135e-01 + 8.00924301e-01 7.99327002e-01 7.97731239e-01 7.96137011e-01 7.94544320e-01 + 7.92953165e-01 7.91363547e-01 7.89775466e-01 7.88188923e-01 7.86603918e-01 + 7.85020450e-01 7.83438522e-01 7.81858132e-01 7.80279281e-01 7.78701970e-01 + 7.77126199e-01 7.75551968e-01 7.73979278e-01 7.72408129e-01 7.70838521e-01 + 7.69270454e-01 7.67703930e-01 7.66138947e-01 7.64575508e-01 7.63013611e-01 + 7.61453258e-01 7.59894448e-01 7.58337182e-01 7.56781460e-01 7.55227283e-01 + 7.53674651e-01 7.52123565e-01 7.50574024e-01 7.49026029e-01 7.47479580e-01 + 7.45934678e-01 7.44391322e-01 7.42849514e-01 7.41309254e-01 7.39770542e-01 + 7.38233378e-01 7.36697762e-01 7.35163696e-01 7.33631179e-01 7.32100211e-01 + 7.30570794e-01 7.29042926e-01 7.27516610e-01 7.25991844e-01 7.24468629e-01 + 7.22946966e-01 7.21426855e-01 7.19908297e-01 7.18391291e-01 7.16875837e-01 + 7.15361937e-01 7.13849591e-01 7.12338798e-01 7.10829560e-01 7.09321876e-01 + 7.07815747e-01 7.06311174e-01 7.04808155e-01 7.03306693e-01 7.01806787e-01 + 7.00308437e-01 6.98811644e-01 6.97316408e-01 6.95822730e-01 6.94330610e-01 + 6.92840047e-01 6.91351043e-01 6.89863598e-01 6.88377712e-01 6.86893385e-01 + 6.85410618e-01 6.83929411e-01 6.82449765e-01 6.80971679e-01 6.79495154e-01 + 6.78020190e-01 6.76546789e-01 6.75074949e-01 6.73604671e-01 6.72135956e-01 + 6.70668804e-01 6.69203215e-01 6.67739189e-01 6.66276728e-01 6.64815830e-01 + 6.63356498e-01 6.61898730e-01 6.60442527e-01 6.58987889e-01 6.57534818e-01 + 6.56083312e-01 6.54633373e-01 6.53185001e-01 6.51738195e-01 6.50292957e-01 + 6.48849287e-01 6.47407184e-01 6.45966650e-01 6.44527685e-01 6.43090288e-01 + 6.41654460e-01 6.40220202e-01 6.38787514e-01 6.37356396e-01 6.35926849e-01 + 6.34498872e-01 6.33072467e-01 6.31647633e-01 6.30224370e-01 6.28802680e-01 + 6.27382561e-01 6.25964016e-01 6.24547043e-01 6.23131644e-01 6.21717818e-01 + 6.20305566e-01 6.18894889e-01 6.17485785e-01 6.16078257e-01 6.14672303e-01 + 6.13267925e-01 6.11865123e-01 6.10463897e-01 6.09064247e-01 6.07666173e-01 + 6.06269677e-01 6.04874758e-01 6.03481416e-01 6.02089652e-01 6.00699467e-01 + 5.99310859e-01 5.97923831e-01 5.96538381e-01 5.95154511e-01 5.93772221e-01 + 5.92391510e-01 5.91012380e-01 5.89634830e-01 5.88258861e-01 5.86884473e-01 + 5.85511667e-01 5.84140442e-01 5.82770800e-01 5.81402740e-01 5.80036262e-01 + 5.78671367e-01 5.77308056e-01 5.75946328e-01 5.74586184e-01 5.73227624e-01 + 5.71870649e-01 5.70515258e-01 5.69161453e-01 5.67809232e-01 5.66458597e-01 + 5.65109548e-01 5.63762086e-01 5.62416210e-01 5.61071920e-01 5.59729218e-01 + 5.58388103e-01 5.57048576e-01 5.55710636e-01 5.54374285e-01 5.53039523e-01 + 5.51706349e-01 5.50374764e-01 5.49044769e-01 5.47716364e-01 5.46389548e-01 + 5.45064323e-01 5.43740689e-01 5.42418645e-01 5.41098192e-01 5.39779331e-01 + 5.38462062e-01 5.37146385e-01 5.35832299e-01 5.34519807e-01 5.33208907e-01 + 5.31899601e-01 5.30591888e-01 5.29285769e-01 5.27981244e-01 5.26678313e-01 + 5.25376977e-01 5.24077235e-01 5.22779089e-01 5.21482538e-01 5.20187583e-01 + 5.18894224e-01 5.17602461e-01 5.16312295e-01 5.15023726e-01 5.13736754e-01 + 5.12451379e-01 5.11167602e-01 5.09885423e-01 5.08604843e-01 5.07325861e-01 + 5.06048477e-01 5.04772693e-01 5.03498508e-01 5.02225923e-01 5.00954938e-01 + 4.99685553e-01 4.98417769e-01 4.97151585e-01 4.95887003e-01 4.94624021e-01 + 4.93362642e-01 4.92102864e-01 4.90844689e-01 4.89588116e-01 4.88333145e-01 + 4.87079778e-01 4.85828014e-01 4.84577853e-01 4.83329297e-01 4.82082344e-01 + 4.80836996e-01 4.79593252e-01 4.78351114e-01 4.77110580e-01 4.75871652e-01 + 4.74634330e-01 4.73398614e-01 4.72164504e-01 4.70932001e-01 4.69701104e-01 + 4.68471815e-01 4.67244132e-01 4.66018058e-01 4.64793591e-01 4.63570733e-01 + 4.62349483e-01 4.61129842e-01 4.59911810e-01 4.58695387e-01 4.57480573e-01 + 4.56267369e-01 4.55055776e-01 4.53845792e-01 4.52637419e-01 4.51430658e-01 + 4.50225507e-01 4.49021967e-01 4.47820039e-01 4.46619724e-01 4.45421020e-01 + 4.44223928e-01 4.43028450e-01 4.41834584e-01 4.40642332e-01 4.39451693e-01 + 4.38262668e-01 4.37075256e-01 4.35889459e-01 4.34705277e-01 4.33522709e-01 + 4.32341757e-01 4.31162420e-01 4.29984698e-01 4.28808592e-01 4.27634102e-01 + 4.26461229e-01 4.25289972e-01 4.24120332e-01 4.22952310e-01 4.21785904e-01 + 4.20621116e-01 4.19457946e-01 4.18296395e-01 4.17136461e-01 4.15978147e-01 + 4.14821451e-01 4.13666374e-01 4.12512917e-01 4.11361080e-01 4.10210862e-01 + 4.09062265e-01 4.07915288e-01 4.06769932e-01 4.05626197e-01 4.04484083e-01 + 4.03343590e-01 4.02204719e-01 4.01067470e-01 3.99931844e-01 3.98797839e-01 + 3.97665458e-01 3.96534699e-01 3.95405564e-01 3.94278052e-01 3.93152164e-01 + 3.92027900e-01 3.90905259e-01 3.89784244e-01 3.88664853e-01 3.87547087e-01 + 3.86430946e-01 3.85316431e-01 3.84203541e-01 3.83092278e-01 3.81982640e-01 + 3.80874629e-01 3.79768245e-01 3.78663487e-01 3.77560357e-01 3.76458854e-01 + 3.75358979e-01 3.74260731e-01 3.73164112e-01 3.72069121e-01 3.70975759e-01 + 3.69884025e-01 3.68793921e-01 3.67705446e-01 3.66618601e-01 3.65533385e-01 + 3.64449799e-01 3.63367844e-01 3.62287520e-01 3.61208826e-01 3.60131763e-01 + 3.59056331e-01 3.57982531e-01 3.56910363e-01 3.55839826e-01 3.54770922e-01 + 3.53703650e-01 3.52638011e-01 3.51574005e-01 3.50511632e-01 3.49450892e-01 + 3.48391786e-01 3.47334314e-01 3.46278476e-01 3.45224272e-01 3.44171703e-01 + 3.43120769e-01 3.42071469e-01 3.41023805e-01 3.39977776e-01 3.38933384e-01 + 3.37890627e-01 3.36849506e-01 3.35810021e-01 3.34772174e-01 3.33735963e-01 + 3.32701389e-01 3.31668453e-01 3.30637154e-01 3.29607493e-01 3.28579470e-01 + 3.27553085e-01 3.26528339e-01 3.25505231e-01 3.24483762e-01 3.23463933e-01 + 3.22445743e-01 3.21429192e-01 3.20414282e-01 3.19401011e-01 3.18389381e-01 + 3.17379391e-01 3.16371042e-01 3.15364334e-01 3.14359267e-01 3.13355841e-01 + 3.12354057e-01 3.11353915e-01 3.10355415e-01 3.09358557e-01 3.08363342e-01 + 3.07369770e-01 3.06377840e-01 3.05387554e-01 3.04398911e-01 3.03411912e-01 + 3.02426556e-01 3.01442845e-01 3.00460777e-01 2.99480355e-01 2.98501577e-01 + 2.97524444e-01 2.96548956e-01 2.95575113e-01 2.94602916e-01 2.93632365e-01 + 2.92663460e-01 2.91696201e-01 2.90730589e-01 2.89766623e-01 2.88804304e-01 + 2.87843632e-01 2.86884607e-01 2.85927230e-01 2.84971501e-01 2.84017420e-01 + 2.83064986e-01 2.82114201e-01 2.81165065e-01 2.80217578e-01 2.79271739e-01 + 2.78327550e-01 2.77385010e-01 2.76444119e-01 2.75504879e-01 2.74567288e-01 + 2.73631348e-01 2.72697059e-01 2.71764419e-01 2.70833431e-01 2.69904094e-01 + 2.68976408e-01 2.68050374e-01 2.67125991e-01 2.66203261e-01 2.65282182e-01 + 2.64362756e-01 2.63444982e-01 2.62528861e-01 2.61614393e-01 2.60701578e-01 + 2.59790416e-01 2.58880908e-01 2.57973054e-01 2.57066853e-01 2.56162307e-01 + 2.55259415e-01 2.54358178e-01 2.53458595e-01 2.52560668e-01 2.51664395e-01 + 2.50769778e-01 2.49876816e-01 2.48985511e-01 2.48095861e-01 2.47207867e-01 + 2.46321530e-01 2.45436849e-01 2.44553825e-01 2.43672457e-01 2.42792747e-01 + 2.41914695e-01 2.41038300e-01 2.40163562e-01 2.39290483e-01 2.38419061e-01 + 2.37549298e-01 2.36681193e-01 2.35814748e-01 2.34949961e-01 2.34086833e-01 + 2.33225364e-01 2.32365555e-01 2.31507405e-01 2.30650916e-01 2.29796086e-01 + 2.28942916e-01 2.28091407e-01 2.27241559e-01 2.26393372e-01 2.25546845e-01 + 2.24701980e-01 2.23858776e-01 2.23017233e-01 2.22177352e-01 2.21339134e-01 + 2.20502577e-01 2.19667682e-01 2.18834451e-01 2.18002881e-01 2.17172975e-01 + 2.16344732e-01 2.15518152e-01 2.14693235e-01 2.13869982e-01 2.13048393e-01 + 2.12228468e-01 2.11410207e-01 2.10593610e-01 2.09778678e-01 2.08965410e-01 + 2.08153807e-01 2.07343870e-01 2.06535598e-01 2.05728991e-01 2.04924049e-01 + 2.04120774e-01 2.03319164e-01 2.02519221e-01 2.01720944e-01 2.00924334e-01 + 2.00129390e-01 1.99336113e-01 1.98544503e-01 1.97754560e-01 1.96966285e-01 + 1.96179677e-01 1.95394737e-01 1.94611465e-01 1.93829861e-01 1.93049925e-01 + 1.92271658e-01 1.91495059e-01 1.90720129e-01 1.89946869e-01 1.89175277e-01 + 1.88405354e-01 1.87637101e-01 1.86870518e-01 1.86105605e-01 1.85342361e-01 + 1.84580788e-01 1.83820885e-01 1.83062653e-01 1.82306091e-01 1.81551200e-01 + 1.80797980e-01 1.80046431e-01 1.79296554e-01 1.78548348e-01 1.77801814e-01 + 1.77056952e-01 1.76313762e-01 1.75572244e-01 1.74832398e-01 1.74094225e-01 + 1.73357725e-01 1.72622897e-01 1.71889743e-01 1.71158261e-01 1.70428453e-01 + 1.69700319e-01 1.68973858e-01 1.68249071e-01 1.67525958e-01 1.66804519e-01 + 1.66084755e-01 1.65366665e-01 1.64650249e-01 1.63935509e-01 1.63222443e-01 + 1.62511053e-01 1.61801338e-01 1.61093298e-01 1.60386934e-01 1.59682246e-01 + 1.58979233e-01 1.58277897e-01 1.57578237e-01 1.56880253e-01 1.56183946e-01 + 1.55489316e-01 1.54796362e-01 1.54105086e-01 1.53415486e-01 1.52727564e-01 + 1.52041320e-01 1.51356753e-01 1.50673864e-01 1.49992653e-01 1.49313120e-01 + 1.48635265e-01 1.47959088e-01 1.47284591e-01 1.46611771e-01 1.45940631e-01 + 1.45271170e-01 1.44603388e-01 1.43937285e-01 1.43272862e-01 1.42610118e-01 + 1.41949054e-01 1.41289670e-01 1.40631966e-01 1.39975942e-01 1.39321598e-01 + 1.38668935e-01 1.38017953e-01 1.37368652e-01 1.36721031e-01 1.36075091e-01 + 1.35430833e-01 1.34788256e-01 1.34147361e-01 1.33508147e-01 1.32870615e-01 + 1.32234765e-01 1.31600597e-01 1.30968111e-01 1.30337308e-01 1.29708187e-01 + 1.29080749e-01 1.28454994e-01 1.27830921e-01 1.27208532e-01 1.26587826e-01 + 1.25968803e-01 1.25351464e-01 1.24735808e-01 1.24121836e-01 1.23509548e-01 + 1.22898944e-01 1.22290024e-01 1.21682789e-01 1.21077238e-01 1.20473372e-01 + 1.19871190e-01 1.19270693e-01 1.18671881e-01 1.18074755e-01 1.17479313e-01 + 1.16885558e-01 1.16293487e-01 1.15703102e-01 1.15114403e-01 1.14527390e-01 + 1.13942064e-01 1.13358423e-01 1.12776468e-01 1.12196200e-01 1.11617619e-01 + 1.11040725e-01 1.10465517e-01 1.09891996e-01 1.09320162e-01 1.08750016e-01 + 1.08181557e-01 1.07614785e-01 1.07049701e-01 1.06486305e-01 1.05924597e-01 + 1.05364577e-01 1.04806244e-01 1.04249601e-01 1.03694645e-01 1.03141378e-01 + 1.02589800e-01 1.02039910e-01 1.01491709e-01 1.00945198e-01 1.00400375e-01 + 9.98572416e-02 9.93157976e-02 9.87760431e-02 9.82379782e-02 9.77016030e-02 + 9.71669178e-02 9.66339224e-02 9.61026172e-02 9.55730022e-02 9.50450776e-02 + 9.45188434e-02 9.39942997e-02 9.34714468e-02 9.29502847e-02 9.24308135e-02 + 9.19130333e-02 9.13969443e-02 9.08825466e-02 9.03698403e-02 8.98588255e-02 + 8.93495023e-02 8.88418708e-02 8.83359312e-02 8.78316836e-02 8.73291281e-02 + 8.68282647e-02 8.63290937e-02 8.58316150e-02 8.53358290e-02 8.48417355e-02 + 8.43493348e-02 8.38586270e-02 8.33696121e-02 8.28822904e-02 8.23966618e-02 + 8.19127265e-02 8.14304847e-02 8.09499364e-02 8.04710817e-02 7.99939207e-02 + 7.95184537e-02 7.90446805e-02 7.85726014e-02 7.81022165e-02 7.76335259e-02 + 7.71665296e-02 7.67012279e-02 7.62376207e-02 7.57757082e-02 7.53154905e-02 + 7.48569677e-02 7.44001400e-02 7.39450073e-02 7.34915699e-02 7.30398277e-02 + 7.25897810e-02 7.21414298e-02 7.16947743e-02 7.12498144e-02 7.08065504e-02 + 7.03649822e-02 6.99251102e-02 6.94869342e-02 6.90504544e-02 6.86156710e-02 + 6.81825840e-02 6.77511935e-02 6.73214996e-02 6.68935024e-02 6.64672020e-02 + 6.60425985e-02 6.56196920e-02 6.51984826e-02 6.47789704e-02 6.43611555e-02 + 6.39450379e-02 6.35306178e-02 6.31178953e-02 6.27068704e-02 6.22975433e-02 + 6.18899141e-02 6.14839827e-02 6.10797494e-02 6.06772142e-02 6.02763772e-02 + 5.98772385e-02 5.94797982e-02 5.90840564e-02 5.86900131e-02 5.82976685e-02 + 5.79070227e-02 5.75180757e-02 5.71308276e-02 5.67452785e-02 5.63614285e-02 + 5.59792777e-02 5.55988261e-02 5.52200739e-02 5.48430212e-02 5.44676679e-02 + 5.40940143e-02 5.37220604e-02 5.33518062e-02 5.29832520e-02 5.26163976e-02 + 5.22512433e-02 5.18877891e-02 5.15260351e-02 5.11659814e-02 5.08076280e-02 + 5.04509751e-02 5.00960227e-02 4.97427708e-02 4.93912197e-02 4.90413693e-02 + 4.86932198e-02 4.83467711e-02 4.80020235e-02 4.76589769e-02 4.73176315e-02 + 4.69779873e-02 4.66400444e-02 4.63038029e-02 4.59692628e-02 4.56364243e-02 + 4.53052874e-02 4.49758521e-02 4.46481186e-02 4.43220870e-02 4.39977572e-02 + 4.36751294e-02 4.33542037e-02 4.30349801e-02 4.27174587e-02 4.24016395e-02 + 4.20875227e-02 4.17751083e-02 4.14643964e-02 4.11553870e-02 4.08480802e-02 + 4.05424762e-02 4.02385749e-02 3.99363764e-02 3.96358808e-02 3.93370881e-02 + 3.90399985e-02 3.87446120e-02 3.84509287e-02 3.81589486e-02 3.78686718e-02 + 3.75800983e-02 3.72932283e-02 3.70080618e-02 3.67245988e-02 3.64428394e-02 + 3.61627838e-02 3.58844318e-02 3.56077837e-02 3.53328395e-02 3.50595992e-02 + 3.47880629e-02 3.45182306e-02 3.42501025e-02 3.39836786e-02 3.37189589e-02 + 3.34559435e-02 3.31946324e-02 3.29350258e-02 3.26771236e-02 3.24209260e-02 + 3.21664330e-02 3.19136446e-02 3.16625610e-02 3.14131821e-02 3.11655080e-02 + 3.09195388e-02 3.06752746e-02 3.04327153e-02 3.01918611e-02 2.99527120e-02 + 2.97152680e-02 2.94795292e-02 2.92454957e-02 2.90131675e-02 2.87825447e-02 + 2.85536273e-02 2.83264153e-02 2.81009089e-02 2.78771081e-02 2.76550128e-02 + 2.74346233e-02 2.72159395e-02 2.69989614e-02 2.67836892e-02 2.65701228e-02 + 2.63582623e-02 2.61481079e-02 2.59396594e-02 2.57329170e-02 2.55278807e-02 + 2.53245505e-02 2.51229266e-02 2.49230089e-02 2.47247975e-02 2.45282924e-02 + 2.43334937e-02 2.41404014e-02 2.39490156e-02 2.37593363e-02 2.35713636e-02 + 2.33850975e-02 2.32005380e-02 2.30176851e-02 2.28365390e-02 2.26570997e-02 + 2.24793672e-02 2.23033415e-02 2.21290227e-02 2.19564108e-02 2.17855059e-02 + 2.16163080e-02 2.14488171e-02 2.12830333e-02 2.11189566e-02 2.09565871e-02 + 2.07959248e-02 2.06369696e-02 2.04797218e-02 2.03241812e-02 2.01703480e-02 + 2.00182221e-02 1.98678037e-02 1.97190927e-02 1.95720891e-02 1.94267931e-02 + 1.92832045e-02 1.91413236e-02 1.90011502e-02 1.88626845e-02 1.87259265e-02 + 1.85908761e-02 1.84575335e-02 1.83258986e-02 1.81959715e-02 1.80677522e-02 + 1.79412408e-02 1.78164372e-02 1.76933415e-02 1.75719538e-02 1.74522740e-02 + 1.73343022e-02 1.72180384e-02 1.71034827e-02 1.69906350e-02 1.68794954e-02 + 1.67700639e-02 1.66623405e-02 1.65563253e-02 1.64520183e-02 1.63494195e-02 + 1.62485289e-02 1.61493466e-02 1.60518726e-02 1.59561068e-02 1.58620494e-02 + 1.57697003e-02 1.56790596e-02 1.55901273e-02 1.55029034e-02 1.54173879e-02 + 1.53335808e-02 1.52514822e-02 1.51710921e-02 1.50924105e-02 1.50154374e-02 + 1.49401728e-02 1.48666168e-02 1.47947694e-02 1.47246305e-02 1.46562002e-02 + 1.45894786e-02 1.45244656e-02 1.44611612e-02 1.43995655e-02 1.43396785e-02 + 1.42815001e-02 1.42250305e-02 1.41702695e-02 1.41172173e-02 1.40658738e-02 + 1.40162391e-02 1.39683132e-02 1.39220960e-02 1.38775876e-02 1.38347880e-02 + 1.37936971e-02 1.37543151e-02 1.37166420e-02 1.36806776e-02 1.36464221e-02 + 1.36138754e-02 1.35830376e-02 1.35539086e-02 1.35264885e-02 1.35007773e-02 + 1.34767750e-02 1.34544815e-02 1.34338969e-02 1.34150212e-02 1.33978544e-02 + 1.33823966e-02 1.33686476e-02 1.33566075e-02 1.33462763e-02 1.33376541e-02 + 1.33307407e-02 1.33255363e-02 1.33220408e-02 1.33202542e-02 1.33201765e-02 + 1.33218078e-02 1.33251480e-02 1.33301970e-02 1.33369550e-02 1.33454220e-02 + 1.33555978e-02 1.33674825e-02 1.33810762e-02 1.33963787e-02 1.34133902e-02 + 1.34321105e-02 1.34525397e-02 1.34746779e-02 1.34985249e-02 1.35240808e-02 + 1.35513455e-02 1.35803192e-02 1.36110016e-02 1.36433930e-02 1.36774932e-02 + 1.37133022e-02 1.37508200e-02 1.37900467e-02 1.38309822e-02 1.38736265e-02 + 1.39179796e-02 1.39640414e-02 1.40118121e-02 1.40612914e-02 1.41124796e-02 + 1.41653765e-02 1.42199821e-02 1.42762964e-02 1.43343194e-02 1.43940512e-02 + 1.44554916e-02 1.45186406e-02 1.45834983e-02 1.46500646e-02 1.47183396e-02 + 1.47883231e-02 1.48600153e-02 1.49334160e-02 1.50085252e-02 1.50853430e-02 + 1.51638693e-02 1.52441041e-02 1.53260474e-02 1.54096992e-02 1.54950594e-02 + 1.55821280e-02 1.56709051e-02 1.57613905e-02 1.58535843e-02 1.59474864e-02 + 1.60430969e-02 1.61404156e-02 1.62394427e-02 1.63401780e-02 1.64426215e-02 + 1.65467732e-02 1.66526331e-02 1.67602012e-02 1.68694775e-02 1.69804618e-02 + 1.70931542e-02 1.72075547e-02 1.73236633e-02 1.74414798e-02 1.75610043e-02 + 1.76822368e-02 1.78051772e-02 1.79298256e-02 1.80561818e-02 1.81842458e-02 + 1.83140177e-02 1.84454973e-02 1.85786847e-02 1.87135798e-02 1.88501827e-02 + 1.89884931e-02 1.91285113e-02 1.92702370e-02 1.94136703e-02 1.95588111e-02 + 1.97056595e-02 1.98542153e-02 2.00044786e-02 2.01564492e-02 2.03101272e-02 + 2.04655126e-02 2.06226053e-02 2.07814052e-02 2.09419123e-02 2.11041267e-02 + 2.12680482e-02 2.14336768e-02 2.16010125e-02 2.17700553e-02 2.19408050e-02 + 2.21132617e-02 2.22874254e-02 2.24632959e-02 2.26408733e-02 2.28201575e-02 + 2.30011484e-02 2.31838461e-02 2.33682505e-02 2.35543615e-02 2.37421791e-02 + 2.39317033e-02 2.41229339e-02 2.43158711e-02 2.45105147e-02 2.47068647e-02 + 2.49049210e-02 2.51046836e-02 2.53061524e-02 2.55093275e-02 2.57142087e-02 + 2.59207960e-02 2.61290894e-02 2.63390888e-02 2.65507942e-02 2.67642055e-02 + 2.69793227e-02 2.71961457e-02 2.74146744e-02 2.76349090e-02 2.78568491e-02 + 2.80804949e-02 2.83058463e-02 2.85329032e-02 2.87616656e-02 2.89921334e-02 + 2.92243066e-02 2.94581851e-02 2.96937689e-02 2.99310578e-02 3.01700520e-02 + 3.04107512e-02 3.06531555e-02 3.08972648e-02 3.11430790e-02 3.13905981e-02 + 3.16398220e-02 3.18907507e-02 3.21433841e-02 3.23977222e-02 3.26537648e-02 + 3.29115120e-02 3.31709637e-02 3.34321199e-02 3.36949803e-02 3.39595451e-02 + 3.42258142e-02 3.44937874e-02 3.47634647e-02 3.50348461e-02 3.53079315e-02 + 3.55827209e-02 3.58592141e-02 3.61374112e-02 3.64173120e-02 3.66989165e-02 + 3.69822246e-02 3.72672363e-02 3.75539515e-02 3.78423701e-02 3.81324920e-02 + 3.84243173e-02 3.87178458e-02 3.90130775e-02 3.93100123e-02 3.96086502e-02 + 3.99089910e-02 4.02110347e-02 4.05147812e-02 4.08202305e-02 4.11273825e-02 + 4.14362371e-02 4.17467942e-02 4.20590539e-02 4.23730160e-02 4.26886804e-02 + 4.30060471e-02 4.33251159e-02 4.36458870e-02 4.39683600e-02 4.42925351e-02 + 4.46184120e-02 4.49459908e-02 4.52752714e-02 4.56062536e-02 4.59389375e-02 + 4.62733229e-02 4.66094097e-02 4.69471980e-02 4.72866875e-02 4.76278783e-02 + 4.79707703e-02 4.83153633e-02 4.86616573e-02 4.90096522e-02 4.93593480e-02 + 4.97107446e-02 5.00638418e-02 5.04186396e-02 5.07751380e-02 5.11333368e-02 + 5.14932360e-02 5.18548354e-02 5.22181351e-02 5.25831349e-02 5.29498347e-02 + 5.33182344e-02 5.36883341e-02 5.40601335e-02 5.44336326e-02 5.48088313e-02 + 5.51857296e-02 5.55643273e-02 5.59446244e-02 5.63266207e-02 5.67103163e-02 + 5.70957109e-02 5.74828046e-02 5.78715972e-02 5.82620886e-02 5.86542788e-02 + 5.90481677e-02 5.94437551e-02 5.98410410e-02 6.02400253e-02 6.06407080e-02 + 6.10430888e-02 6.14471678e-02 6.18529447e-02 6.22604197e-02 6.26695925e-02 + 6.30804630e-02 6.34930312e-02 6.39072970e-02 6.43232602e-02 6.47409209e-02 + 6.51602788e-02 6.55813340e-02 6.60040862e-02 6.64285354e-02 6.68546816e-02 + 6.72825245e-02 6.77120642e-02 6.81433005e-02 6.85762333e-02 6.90108625e-02 + 6.94471881e-02 6.98852099e-02 7.03249278e-02 7.07663417e-02 7.12094516e-02 + 7.16542573e-02 7.21007588e-02 7.25489558e-02 7.29988484e-02 7.34504365e-02 + 7.39037198e-02 7.43586984e-02 7.48153721e-02 7.52737408e-02 7.57338044e-02 + 7.61955628e-02 7.66590160e-02 7.71241637e-02 7.75910059e-02 7.80595425e-02 + 7.85297734e-02 7.90016985e-02 7.94753177e-02 7.99506308e-02 8.04276378e-02 + 8.09063385e-02 8.13867329e-02 8.18688208e-02 8.23526021e-02 8.28380768e-02 + 8.33252446e-02 8.38141056e-02 8.43046595e-02 8.47969063e-02 8.52908459e-02 + 8.57864782e-02 8.62838029e-02 8.67828201e-02 8.72835297e-02 8.77859314e-02 + 8.82900252e-02 8.87958110e-02 8.93032887e-02 8.98124581e-02 9.03233191e-02 + 9.08358717e-02 9.13501157e-02 9.18660509e-02 9.23836774e-02 9.29029949e-02 + 9.34240033e-02 9.39467025e-02 9.44710925e-02 9.49971730e-02 9.55249440e-02 + 9.60544054e-02 9.65855570e-02 9.71183987e-02 9.76529303e-02 9.81891519e-02 + 9.87270632e-02 9.92666641e-02 9.98079545e-02 1.00350934e-01 1.00895603e-01 + 1.01441962e-01 1.01990009e-01 1.02539745e-01 1.03091170e-01 1.03644283e-01 + 1.04199085e-01 1.04755576e-01 1.05313754e-01 1.05873621e-01 1.06435176e-01 + 1.06998419e-01 1.07563349e-01 1.08129968e-01 1.08698273e-01 1.09268266e-01 + 1.09839947e-01 1.10413314e-01 1.10988368e-01 1.11565110e-01 1.12143538e-01 + 1.12723652e-01 1.13305453e-01 1.13888941e-01 1.14474115e-01 1.15060974e-01 + 1.15649520e-01 1.16239751e-01 1.16831669e-01 1.17425271e-01 1.18020560e-01 + 1.18617533e-01 1.19216192e-01 1.19816535e-01 1.20418564e-01 1.21022277e-01 + 1.21627675e-01 1.22234757e-01 1.22843524e-01 1.23453975e-01 1.24066109e-01 + 1.24679928e-01 1.25295431e-01 1.25912617e-01 1.26531487e-01 1.27152040e-01 + 1.27774276e-01 1.28398196e-01 1.29023798e-01 1.29651083e-01 1.30280051e-01 + 1.30910702e-01 1.31543034e-01 1.32177050e-01 1.32812747e-01 1.33450126e-01 + 1.34089187e-01 1.34729929e-01 1.35372353e-01 1.36016459e-01 1.36662246e-01 + 1.37309713e-01 1.37958862e-01 1.38609692e-01 1.39262202e-01 1.39916393e-01 + 1.40572264e-01 1.41229815e-01 1.41889046e-01 1.42549958e-01 1.43212549e-01 + 1.43876819e-01 1.44542770e-01 1.45210399e-01 1.45879708e-01 1.46550695e-01 + 1.47223362e-01 1.47897707e-01 1.48573731e-01 1.49251433e-01 1.49930814e-01 + 1.50611872e-01 1.51294609e-01 1.51979023e-01 1.52665115e-01 1.53352885e-01 + 1.54042332e-01 1.54733456e-01 1.55426257e-01 1.56120735e-01 1.56816890e-01 + 1.57514721e-01 1.58214229e-01 1.58915413e-01 1.59618273e-01 1.60322809e-01 + 1.61029020e-01 1.61736908e-01 1.62446471e-01 1.63157709e-01 1.63870622e-01 + 1.64585210e-01 1.65301473e-01 1.66019411e-01 1.66739023e-01 1.67460310e-01 + 1.68183271e-01 1.68907906e-01 1.69634214e-01 1.70362197e-01 1.71091853e-01 + 1.71823182e-01 1.72556184e-01 1.73290860e-01 1.74027208e-01 1.74765229e-01 + 1.75504923e-01 1.76246289e-01 1.76989327e-01 1.77734037e-01 1.78480419e-01 + 1.79228473e-01 1.79978199e-01 1.80729595e-01 1.81482663e-01 1.82237402e-01 + 1.82993812e-01 1.83751893e-01 1.84511644e-01 1.85273065e-01 1.86036157e-01 + 1.86800919e-01 1.87567350e-01 1.88335451e-01 1.89105222e-01 1.89876662e-01 + 1.90649771e-01 1.91424549e-01 1.92200996e-01 1.92979112e-01 1.93758896e-01 + 1.94540348e-01 1.95323469e-01 1.96108257e-01 1.96894713e-01 1.97682837e-01 + 1.98472628e-01 1.99264087e-01 2.00057212e-01 2.00852004e-01 2.01648463e-01 + 2.02446589e-01 2.03246381e-01 2.04047839e-01 2.04850963e-01 2.05655753e-01 + 2.06462208e-01 2.07270329e-01 2.08080115e-01 2.08891567e-01 2.09704683e-01 + 2.10519464e-01 2.11335909e-01 2.12154019e-01 2.12973793e-01 2.13795231e-01 + 2.14618333e-01 2.15443098e-01 2.16269527e-01 2.17097619e-01 2.17927374e-01 + 2.18758792e-01 2.19591873e-01 2.20426616e-01 2.21263022e-01 2.22101090e-01 + 2.22940819e-01 2.23782211e-01 2.24625264e-01 2.25469978e-01 2.26316354e-01 + 2.27164390e-01 2.28014088e-01 2.28865446e-01 2.29718464e-01 2.30573143e-01 + 2.31429482e-01 2.32287480e-01 2.33147139e-01 2.34008457e-01 2.34871434e-01 + 2.35736070e-01 2.36602365e-01 2.37470319e-01 2.38339931e-01 2.39211202e-01 + 2.40084131e-01 2.40958717e-01 2.41834962e-01 2.42712864e-01 2.43592423e-01 + 2.44473640e-01 2.45356513e-01 2.46241044e-01 2.47127230e-01 2.48015074e-01 + 2.48904573e-01 2.49795728e-01 2.50688539e-01 2.51583006e-01 2.52479128e-01 + 2.53376905e-01 2.54276337e-01 2.55177424e-01 2.56080166e-01 2.56984562e-01 + 2.57890612e-01 2.58798316e-01 2.59707674e-01 2.60618685e-01 2.61531350e-01 + 2.62445667e-01 2.63361638e-01 2.64279262e-01 2.65198538e-01 2.66119466e-01 + 2.67042047e-01 2.67966279e-01 2.68892164e-01 2.69819699e-01 2.70748886e-01 + 2.71679724e-01 2.72612213e-01 2.73546353e-01 2.74482143e-01 2.75419584e-01 + 2.76358674e-01 2.77299415e-01 2.78241805e-01 2.79185844e-01 2.80131533e-01 + 2.81078870e-01 2.82027857e-01 2.82978492e-01 2.83930775e-01 2.84884707e-01 + 2.85840287e-01 2.86797514e-01 2.87756389e-01 2.88716911e-01 2.89679080e-01 + 2.90642896e-01 2.91608359e-01 2.92575468e-01 2.93544224e-01 2.94514625e-01 + 2.95486673e-01 2.96460366e-01 2.97435704e-01 2.98412687e-01 2.99391316e-01 + 3.00371589e-01 3.01353507e-01 3.02337069e-01 3.03322275e-01 3.04309125e-01 + 3.05297618e-01 3.06287755e-01 3.07279535e-01 3.08272958e-01 3.09268024e-01 + 3.10264733e-01 3.11263084e-01 3.12263076e-01 3.13264711e-01 3.14267987e-01 + 3.15272905e-01 3.16279464e-01 3.17287664e-01 3.18297505e-01 3.19308986e-01 + 3.20322108e-01 3.21336869e-01 3.22353271e-01 3.23371312e-01 3.24390992e-01 + 3.25412312e-01 3.26435271e-01 3.27459868e-01 3.28486104e-01 3.29513978e-01 + 3.30543490e-01 3.31574640e-01 3.32607428e-01 3.33641852e-01 3.34677914e-01 + 3.35715613e-01 3.36754949e-01 3.37795921e-01 3.38838529e-01 3.39882774e-01 + 3.40928653e-01 3.41976169e-01 3.43025320e-01 3.44076105e-01 3.45128526e-01 + 3.46182581e-01 3.47238271e-01 3.48295594e-01 3.49354552e-01 3.50415143e-01 + 3.51477368e-01 3.52541225e-01 3.53606716e-01 3.54673839e-01 3.55742595e-01 + 3.56812983e-01 3.57885003e-01 3.58958655e-01 3.60033939e-01 3.61110853e-01 + 3.62189399e-01 3.63269575e-01 3.64351382e-01 3.65434820e-01 3.66519887e-01 + 3.67606584e-01 3.68694911e-01 3.69784868e-01 3.70876453e-01 3.71969667e-01 + 3.73064510e-01 3.74160981e-01 3.75259081e-01 3.76358808e-01 3.77460163e-01 + 3.78563145e-01 3.79667755e-01 3.80773992e-01 3.81881855e-01 3.82991344e-01 + 3.84102460e-01 3.85215202e-01 3.86329570e-01 3.87445563e-01 3.88563181e-01 + 3.89682424e-01 3.90803292e-01 3.91925784e-01 3.93049901e-01 3.94175642e-01 + 3.95303006e-01 3.96431994e-01 3.97562605e-01 3.98694839e-01 3.99828696e-01 + 4.00964175e-01 4.02101276e-01 4.03240000e-01 4.04380345e-01 4.05522312e-01 + 4.06665899e-01 4.07811108e-01 4.08957938e-01 4.10106388e-01 4.11256458e-01 + 4.12408148e-01 4.13561458e-01 4.14716388e-01 4.15872936e-01 4.17031104e-01 + 4.18190890e-01 4.19352295e-01 4.20515317e-01 4.21679958e-01 4.22846216e-01 + 4.24014092e-01 4.25183585e-01 4.26354695e-01 4.27527421e-01 4.28701764e-01 + 4.29877723e-01 4.31055298e-01 4.32234488e-01 4.33415294e-01 4.34597715e-01 + 4.35781751e-01 4.36967401e-01 4.38154665e-01 4.39343544e-01 4.40534036e-01 + 4.41726142e-01 4.42919861e-01 4.44115193e-01 4.45312138e-01 4.46510695e-01 + 4.47710864e-01 4.48912645e-01 4.50116038e-01 4.51321043e-01 4.52527658e-01 + 4.53735885e-01 4.54945722e-01 4.56157169e-01 4.57370226e-01 4.58584894e-01 + 4.59801170e-01 4.61019056e-01 4.62238551e-01 4.63459655e-01 4.64682367e-01 + 4.65906688e-01 4.67132616e-01 4.68360152e-01 4.69589295e-01 4.70820046e-01 + 4.72052403e-01 4.73286367e-01 4.74521937e-01 4.75759113e-01 4.76997895e-01 + 4.78238283e-01 4.79480276e-01 4.80723873e-01 4.81969076e-01 4.83215882e-01 + 4.84464293e-01 4.85714308e-01 4.86965926e-01 4.88219148e-01 4.89473972e-01 + 4.90730400e-01 4.91988430e-01 4.93248062e-01 4.94509296e-01 4.95772131e-01 + 4.97036568e-01 4.98302606e-01 4.99570245e-01 5.00839485e-01 5.02110324e-01 + 5.03382764e-01 5.04656804e-01 5.05932442e-01 5.07209680e-01 5.08488517e-01 + 5.09768953e-01 5.11050986e-01 5.12334618e-01 5.13619847e-01 5.14906674e-01 + 5.16195098e-01 5.17485119e-01 5.18776737e-01 5.20069951e-01 5.21364761e-01 + 5.22661167e-01 5.23959168e-01 5.25258764e-01 5.26559955e-01 5.27862741e-01 + 5.29167122e-01 5.30473096e-01 5.31780664e-01 5.33089826e-01 5.34400580e-01 + 5.35712928e-01 5.37026868e-01 5.38342401e-01 5.39659526e-01 5.40978242e-01 + 5.42298550e-01 5.43620449e-01 5.44943939e-01 5.46269020e-01 5.47595691e-01 + 5.48923952e-01 5.50253802e-01 5.51585242e-01 5.52918272e-01 5.54252890e-01 + 5.55589096e-01 5.56926891e-01 5.58266274e-01 5.59607245e-01 5.60949803e-01 + 5.62293948e-01 5.63639680e-01 5.64986999e-01 5.66335903e-01 5.67686394e-01 + 5.69038470e-01 5.70392132e-01 5.71747378e-01 5.73104210e-01 5.74462626e-01 + 5.75822626e-01 5.77184210e-01 5.78547377e-01 5.79912128e-01 5.81278461e-01 + 5.82646378e-01 5.84015876e-01 5.85386957e-01 5.86759620e-01 5.88133864e-01 + 5.89509689e-01 5.90887095e-01 5.92266082e-01 5.93646649e-01 5.95028796e-01 + 5.96412522e-01 5.97797828e-01 5.99184713e-01 6.00573177e-01 6.01963219e-01 + 6.03354840e-01 6.04748038e-01 6.06142814e-01 6.07539167e-01 6.08937097e-01 + 6.10336603e-01 6.11737686e-01 6.13140346e-01 6.14544580e-01 6.15950391e-01 + 6.17357776e-01 6.18766736e-01 6.20177271e-01 6.21589379e-01 6.23003062e-01 + 6.24418319e-01 6.25835148e-01 6.27253551e-01 6.28673526e-01 6.30095073e-01 + 6.31518193e-01 6.32942884e-01 6.34369147e-01 6.35796981e-01 6.37226386e-01 + 6.38657361e-01 6.40089906e-01 6.41524022e-01 6.42959706e-01 6.44396960e-01 + 6.45835783e-01 6.47276175e-01 6.48718135e-01 6.50161663e-01 6.51606758e-01 + 6.53053421e-01 6.54501651e-01 6.55951448e-01 6.57402811e-01 6.58855740e-01 + 6.60310236e-01 6.61766296e-01 6.63223922e-01 6.64683112e-01 6.66143868e-01 + 6.67606187e-01 6.69070070e-01 6.70535517e-01 6.72002527e-01 6.73471100e-01 + 6.74941236e-01 6.76412934e-01 6.77886194e-01 6.79361015e-01 6.80837398e-01 + 1.38518338e-01 1.38476565e-01 1.38434740e-01 1.38392864e-01 1.38350938e-01 + 1.38308960e-01 1.38266931e-01 1.38224851e-01 1.38182720e-01 1.38140538e-01 + 1.38098305e-01 1.38056020e-01 1.38013684e-01 1.37971296e-01 1.37928857e-01 + 1.37886366e-01 1.37843824e-01 1.37801230e-01 1.37758585e-01 1.37715888e-01 + 1.37673139e-01 1.37630338e-01 1.37587486e-01 1.37544581e-01 1.37501625e-01 + 1.37458617e-01 1.37415556e-01 1.37372444e-01 1.37329279e-01 1.37286062e-01 + 1.37242794e-01 1.37199472e-01 1.37156099e-01 1.37112673e-01 1.37069195e-01 + 1.37025664e-01 1.36982081e-01 1.36938445e-01 1.36894757e-01 1.36851016e-01 + 1.36807222e-01 1.36763376e-01 1.36719477e-01 1.36675525e-01 1.36631520e-01 + 1.36587463e-01 1.36543352e-01 1.36499189e-01 1.36454972e-01 1.36410702e-01 + 1.36366380e-01 1.36322004e-01 1.36277574e-01 1.36233092e-01 1.36188556e-01 + 1.36143967e-01 1.36099325e-01 1.36054629e-01 1.36009880e-01 1.35965077e-01 + 1.35920221e-01 1.35875311e-01 1.35830347e-01 1.35785330e-01 1.35740259e-01 + 1.35695134e-01 1.35649956e-01 1.35604723e-01 1.35559437e-01 1.35514096e-01 + 1.35468702e-01 1.35423254e-01 1.35377752e-01 1.35332195e-01 1.35286585e-01 + 1.35240920e-01 1.35195201e-01 1.35149428e-01 1.35103600e-01 1.35057718e-01 + 1.35011782e-01 1.34965791e-01 1.34919746e-01 1.34873646e-01 1.34827492e-01 + 1.34781283e-01 1.34735020e-01 1.34688702e-01 1.34642329e-01 1.34595901e-01 + 1.34549419e-01 1.34502882e-01 1.34456290e-01 1.34409643e-01 1.34362941e-01 + 1.34316184e-01 1.34269372e-01 1.34222505e-01 1.34175583e-01 1.34128606e-01 + 1.34081573e-01 1.34034486e-01 1.33987343e-01 1.33940145e-01 1.33892892e-01 + 1.33845583e-01 1.33798219e-01 1.33750799e-01 1.33703324e-01 1.33655794e-01 + 1.33608207e-01 1.33560566e-01 1.33512869e-01 1.33465116e-01 1.33417307e-01 + 1.33369443e-01 1.33321523e-01 1.33273547e-01 1.33225515e-01 1.33177428e-01 + 1.33129285e-01 1.33081085e-01 1.33032830e-01 1.32984519e-01 1.32936152e-01 + 1.32887728e-01 1.32839249e-01 1.32790713e-01 1.32742122e-01 1.32693474e-01 + 1.32644770e-01 1.32596010e-01 1.32547193e-01 1.32498320e-01 1.32449391e-01 + 1.32400405e-01 1.32351363e-01 1.32302265e-01 1.32253110e-01 1.32203899e-01 + 1.32154631e-01 1.32105306e-01 1.32055925e-01 1.32006488e-01 1.31956993e-01 + 1.31907442e-01 1.31857835e-01 1.31808170e-01 1.31758449e-01 1.31708671e-01 + 1.31658836e-01 1.31608945e-01 1.31558996e-01 1.31508991e-01 1.31458929e-01 + 1.31408809e-01 1.31358633e-01 1.31308400e-01 1.31258110e-01 1.31207762e-01 + 1.31157358e-01 1.31106897e-01 1.31056378e-01 1.31005802e-01 1.30955169e-01 + 1.30904479e-01 1.30853732e-01 1.30802927e-01 1.30752065e-01 1.30701146e-01 + 1.30650170e-01 1.30599136e-01 1.30548045e-01 1.30496896e-01 1.30445690e-01 + 1.30394426e-01 1.30343106e-01 1.30291727e-01 1.30240291e-01 1.30188798e-01 + 1.30137247e-01 1.30085639e-01 1.30033973e-01 1.29982249e-01 1.29930468e-01 + 1.29878629e-01 1.29826732e-01 1.29774778e-01 1.29722766e-01 1.29670696e-01 + 1.29618569e-01 1.29566384e-01 1.29514141e-01 1.29461841e-01 1.29409482e-01 + 1.29357066e-01 1.29304592e-01 1.29252060e-01 1.29199470e-01 1.29146823e-01 + 1.29094117e-01 1.29041354e-01 1.28988533e-01 1.28935654e-01 1.28882717e-01 + 1.28829721e-01 1.28776668e-01 1.28723557e-01 1.28670388e-01 1.28617161e-01 + 1.28563876e-01 1.28510533e-01 1.28457132e-01 1.28403673e-01 1.28350156e-01 + 1.28296581e-01 1.28242948e-01 1.28189256e-01 1.28135507e-01 1.28081699e-01 + 1.28027834e-01 1.27973910e-01 1.27919928e-01 1.27865888e-01 1.27811790e-01 + 1.27757634e-01 1.27703420e-01 1.27649147e-01 1.27594816e-01 1.27540427e-01 + 1.27485980e-01 1.27431475e-01 1.27376912e-01 1.27322290e-01 1.27267611e-01 + 1.27212873e-01 1.27158077e-01 1.27103223e-01 1.27048310e-01 1.26993340e-01 + 1.26938311e-01 1.26883224e-01 1.26828079e-01 1.26772875e-01 1.26717614e-01 + 1.26662294e-01 1.26606916e-01 1.26551480e-01 1.26495986e-01 1.26440433e-01 + 1.26384823e-01 1.26329154e-01 1.26273427e-01 1.26217642e-01 1.26161799e-01 + 1.26105898e-01 1.26049938e-01 1.25993920e-01 1.25937845e-01 1.25881711e-01 + 1.25825519e-01 1.25769269e-01 1.25712961e-01 1.25656594e-01 1.25600170e-01 + 1.25543688e-01 1.25487147e-01 1.25430549e-01 1.25373892e-01 1.25317178e-01 + 1.25260405e-01 1.25203574e-01 1.25146686e-01 1.25089739e-01 1.25032735e-01 + 1.24975672e-01 1.24918552e-01 1.24861374e-01 1.24804137e-01 1.24746843e-01 + 1.24689491e-01 1.24632082e-01 1.24574614e-01 1.24517089e-01 1.24459505e-01 + 1.24401864e-01 1.24344166e-01 1.24286409e-01 1.24228595e-01 1.24170723e-01 + 1.24112794e-01 1.24054806e-01 1.23996762e-01 1.23938659e-01 1.23880499e-01 + 1.23822281e-01 1.23764006e-01 1.23705674e-01 1.23647284e-01 1.23588836e-01 + 1.23530331e-01 1.23471769e-01 1.23413149e-01 1.23354472e-01 1.23295737e-01 + 1.23236946e-01 1.23178097e-01 1.23119190e-01 1.23060227e-01 1.23001206e-01 + 1.22942129e-01 1.22882994e-01 1.22823802e-01 1.22764553e-01 1.22705247e-01 + 1.22645884e-01 1.22586464e-01 1.22526988e-01 1.22467454e-01 1.22407864e-01 + 1.22348217e-01 1.22288513e-01 1.22228752e-01 1.22168935e-01 1.22109061e-01 + 1.22049130e-01 1.21989143e-01 1.21929100e-01 1.21869000e-01 1.21808843e-01 + 1.21748630e-01 1.21688361e-01 1.21628036e-01 1.21567654e-01 1.21507216e-01 + 1.21446722e-01 1.21386172e-01 1.21325566e-01 1.21264904e-01 1.21204185e-01 + 1.21143411e-01 1.21082581e-01 1.21021696e-01 1.20960754e-01 1.20899757e-01 + 1.20838704e-01 1.20777596e-01 1.20716432e-01 1.20655212e-01 1.20593937e-01 + 1.20532607e-01 1.20471221e-01 1.20409780e-01 1.20348284e-01 1.20286733e-01 + 1.20225127e-01 1.20163465e-01 1.20101749e-01 1.20039978e-01 1.19978152e-01 + 1.19916271e-01 1.19854335e-01 1.19792345e-01 1.19730300e-01 1.19668200e-01 + 1.19606047e-01 1.19543838e-01 1.19481576e-01 1.19419259e-01 1.19356888e-01 + 1.19294463e-01 1.19231984e-01 1.19169450e-01 1.19106863e-01 1.19044222e-01 + 1.18981528e-01 1.18918779e-01 1.18855977e-01 1.18793122e-01 1.18730213e-01 + 1.18667250e-01 1.18604235e-01 1.18541166e-01 1.18478043e-01 1.18414868e-01 + 1.18351640e-01 1.18288359e-01 1.18225025e-01 1.18161638e-01 1.18098199e-01 + 1.18034707e-01 1.17971163e-01 1.17907566e-01 1.17843917e-01 1.17780216e-01 + 1.17716462e-01 1.17652656e-01 1.17588799e-01 1.17524889e-01 1.17460928e-01 + 1.17396915e-01 1.17332851e-01 1.17268735e-01 1.17204567e-01 1.17140349e-01 + 1.17076079e-01 1.17011757e-01 1.16947385e-01 1.16882962e-01 1.16818488e-01 + 1.16753964e-01 1.16689388e-01 1.16624762e-01 1.16560086e-01 1.16495360e-01 + 1.16430583e-01 1.16365756e-01 1.16300879e-01 1.16235952e-01 1.16170975e-01 + 1.16105949e-01 1.16040873e-01 1.15975748e-01 1.15910573e-01 1.15845349e-01 + 1.15780076e-01 1.15714754e-01 1.15649383e-01 1.15583963e-01 1.15518494e-01 + 1.15452977e-01 1.15387412e-01 1.15321798e-01 1.15256136e-01 1.15190426e-01 + 1.15124668e-01 1.15058862e-01 1.14993008e-01 1.14927107e-01 1.14861158e-01 + 1.14795162e-01 1.14729119e-01 1.14663029e-01 1.14596892e-01 1.14530707e-01 + 1.14464477e-01 1.14398199e-01 1.14331875e-01 1.14265505e-01 1.14199089e-01 + 1.14132627e-01 1.14066119e-01 1.13999565e-01 1.13932965e-01 1.13866320e-01 + 1.13799630e-01 1.13732894e-01 1.13666113e-01 1.13599288e-01 1.13532417e-01 + 1.13465503e-01 1.13398543e-01 1.13331539e-01 1.13264491e-01 1.13197399e-01 + 1.13130263e-01 1.13063084e-01 1.12995861e-01 1.12928594e-01 1.12861284e-01 + 1.12793931e-01 1.12726535e-01 1.12659096e-01 1.12591615e-01 1.12524091e-01 + 1.12456524e-01 1.12388916e-01 1.12321265e-01 1.12253573e-01 1.12185839e-01 + 1.12118063e-01 1.12050246e-01 1.11982388e-01 1.11914489e-01 1.11846549e-01 + 1.11778568e-01 1.11710547e-01 1.11642485e-01 1.11574383e-01 1.11506242e-01 + 1.11438060e-01 1.11369839e-01 1.11301578e-01 1.11233278e-01 1.11164939e-01 + 1.11096561e-01 1.11028144e-01 1.10959689e-01 1.10891195e-01 1.10822663e-01 + 1.10754093e-01 1.10685486e-01 1.10616840e-01 1.10548157e-01 1.10479437e-01 + 1.10410680e-01 1.10341886e-01 1.10273055e-01 1.10204188e-01 1.10135284e-01 + 1.10066345e-01 1.09997369e-01 1.09928358e-01 1.09859311e-01 1.09790229e-01 + 1.09721112e-01 1.09651960e-01 1.09582773e-01 1.09513552e-01 1.09444296e-01 + 1.09375007e-01 1.09305683e-01 1.09236326e-01 1.09166936e-01 1.09097512e-01 + 1.09028055e-01 1.08958566e-01 1.08889044e-01 1.08819489e-01 1.08749902e-01 + 1.08680284e-01 1.08610634e-01 1.08540952e-01 1.08471239e-01 1.08401495e-01 + 1.08331720e-01 1.08261914e-01 1.08192078e-01 1.08122212e-01 1.08052316e-01 + 1.07982391e-01 1.07912436e-01 1.07842452e-01 1.07772438e-01 1.07702397e-01 + 1.07632326e-01 1.07562227e-01 1.07492101e-01 1.07421946e-01 1.07351764e-01 + 1.07281555e-01 1.07211318e-01 1.07141055e-01 1.07070766e-01 1.07000449e-01 + 1.06930107e-01 1.06859739e-01 1.06789346e-01 1.06718927e-01 1.06648483e-01 + 1.06578015e-01 1.06507521e-01 1.06437004e-01 1.06366462e-01 1.06295897e-01 + 1.06225308e-01 1.06154696e-01 1.06084061e-01 1.06013403e-01 1.05942723e-01 + 1.05872021e-01 1.05801296e-01 1.05730551e-01 1.05659783e-01 1.05588995e-01 + 1.05518186e-01 1.05447356e-01 1.05376506e-01 1.05305636e-01 1.05234746e-01 + 1.05163837e-01 1.05092908e-01 1.05021961e-01 1.04950995e-01 1.04880011e-01 + 1.04809009e-01 1.04737989e-01 1.04666951e-01 1.04595897e-01 1.04524826e-01 + 1.04453738e-01 1.04382633e-01 1.04311513e-01 1.04240377e-01 1.04169226e-01 + 1.04098060e-01 1.04026878e-01 1.03955683e-01 1.03884473e-01 1.03813249e-01 + 1.03742012e-01 1.03670761e-01 1.03599498e-01 1.03528222e-01 1.03456933e-01 + 1.03385633e-01 1.03314321e-01 1.03242997e-01 1.03171662e-01 1.03100317e-01 + 1.03028961e-01 1.02957595e-01 1.02886219e-01 1.02814833e-01 1.02743439e-01 + 1.02672036e-01 1.02600624e-01 1.02529204e-01 1.02457776e-01 1.02386340e-01 + 1.02314898e-01 1.02243448e-01 1.02171992e-01 1.02100530e-01 1.02029062e-01 + 1.01957589e-01 1.01886110e-01 1.01814626e-01 1.01743138e-01 1.01671646e-01 + 1.01600150e-01 1.01528651e-01 1.01457148e-01 1.01385643e-01 1.01314135e-01 + 1.01242625e-01 1.01171114e-01 1.01099601e-01 1.01028087e-01 1.00956573e-01 + 1.00885058e-01 1.00813543e-01 1.00742029e-01 1.00670515e-01 1.00599003e-01 + 1.00527492e-01 1.00455983e-01 1.00384477e-01 1.00312973e-01 1.00241472e-01 + 1.00169974e-01 1.00098480e-01 1.00026990e-01 9.99555050e-02 9.98840245e-02 + 9.98125493e-02 9.97410797e-02 9.96696161e-02 9.95981588e-02 9.95267084e-02 + 9.94552650e-02 9.93838292e-02 9.93124014e-02 9.92409818e-02 9.91695709e-02 + 9.90981691e-02 9.90267768e-02 9.89553944e-02 9.88840222e-02 9.88126607e-02 + 9.87413103e-02 9.86699713e-02 9.85986441e-02 9.85273293e-02 9.84560271e-02 + 9.83847379e-02 9.83134622e-02 9.82422004e-02 9.81709529e-02 9.80997201e-02 + 9.80285023e-02 9.79573001e-02 9.78861138e-02 9.78149439e-02 9.77437907e-02 + 9.76726547e-02 9.76015362e-02 9.75304358e-02 9.74593538e-02 9.73882907e-02 + 9.73172468e-02 9.72462226e-02 9.71752186e-02 9.71042351e-02 9.70332725e-02 + 9.69623314e-02 9.68914121e-02 9.68205151e-02 9.67496408e-02 9.66787897e-02 + 9.66079621e-02 9.65371585e-02 9.64663793e-02 9.63956251e-02 9.63248961e-02 + 9.62541930e-02 9.61835160e-02 9.61128657e-02 9.60422425e-02 9.59716469e-02 + 9.59010792e-02 9.58305400e-02 9.57600297e-02 9.56895487e-02 9.56190976e-02 + 9.55486767e-02 9.54782865e-02 9.54079274e-02 9.53376000e-02 9.52673047e-02 + 9.51970419e-02 9.51268121e-02 9.50566158e-02 9.49864534e-02 9.49163254e-02 + 9.48462322e-02 9.47761744e-02 9.47061524e-02 9.46361667e-02 9.45662176e-02 + 9.44963058e-02 9.44264317e-02 9.43565957e-02 9.42867984e-02 9.42170402e-02 + 9.41473215e-02 9.40776429e-02 9.40080049e-02 9.39384078e-02 9.38688523e-02 + 9.37993388e-02 9.37298677e-02 9.36604397e-02 9.35910550e-02 9.35217143e-02 + 9.34524180e-02 9.33831666e-02 9.33139606e-02 9.32448006e-02 9.31756869e-02 + 9.31066201e-02 9.30376006e-02 9.29686291e-02 9.28997059e-02 9.28308316e-02 + 9.27620066e-02 9.26932315e-02 9.26245068e-02 9.25558330e-02 9.24872106e-02 + 9.24186400e-02 9.23501218e-02 9.22816566e-02 9.22132447e-02 9.21448867e-02 + 9.20765832e-02 9.20083346e-02 9.19401414e-02 9.18720042e-02 9.18039235e-02 + 9.17358998e-02 9.16679335e-02 9.16000253e-02 9.15321756e-02 9.14643850e-02 + 9.13966540e-02 9.13289830e-02 9.12613727e-02 9.11938235e-02 9.11263360e-02 + 9.10589106e-02 9.09915480e-02 9.09242486e-02 9.08570130e-02 9.07898417e-02 + 9.07227352e-02 9.06556940e-02 9.05887187e-02 9.05218099e-02 9.04549680e-02 + 9.03881935e-02 9.03214871e-02 9.02548492e-02 9.01882804e-02 9.01217813e-02 + 9.00553522e-02 8.99889939e-02 8.99227068e-02 8.98564915e-02 8.97903485e-02 + 8.97242783e-02 8.96582816e-02 8.95923588e-02 8.95265104e-02 8.94607371e-02 + 8.93950394e-02 8.93294177e-02 8.92638728e-02 8.91984050e-02 8.91330150e-02 + 8.90677033e-02 8.90024705e-02 8.89373170e-02 8.88722435e-02 8.88072505e-02 + 8.87423386e-02 8.86775083e-02 8.86127602e-02 8.85480947e-02 8.84835126e-02 + 8.84190142e-02 8.83546003e-02 8.82902712e-02 8.82260277e-02 8.81618702e-02 + 8.80977994e-02 8.80338157e-02 8.79699197e-02 8.79061120e-02 8.78423932e-02 + 8.77787637e-02 8.77152243e-02 8.76517753e-02 8.75884175e-02 8.75251513e-02 + 8.74619773e-02 8.73988961e-02 8.73359083e-02 8.72730143e-02 8.72102149e-02 + 8.71475104e-02 8.70849016e-02 8.70223890e-02 8.69599731e-02 8.68976544e-02 + 8.68354337e-02 8.67733114e-02 8.67112881e-02 8.66493644e-02 8.65875409e-02 + 8.65258180e-02 8.64641964e-02 8.64026767e-02 8.63412594e-02 8.62799451e-02 + 8.62187344e-02 8.61576278e-02 8.60966259e-02 8.60357293e-02 8.59749386e-02 + 8.59142542e-02 8.58536769e-02 8.57932071e-02 8.57328455e-02 8.56725925e-02 + 8.56124489e-02 8.55524151e-02 8.54924918e-02 8.54326794e-02 8.53729787e-02 + 8.53133900e-02 8.52539141e-02 8.51945515e-02 8.51353028e-02 8.50761685e-02 + 8.50171493e-02 8.49582456e-02 8.48994581e-02 8.48407874e-02 8.47822340e-02 + 8.47237984e-02 8.46654813e-02 8.46072833e-02 8.45492049e-02 8.44912466e-02 + 8.44334092e-02 8.43756930e-02 8.43180988e-02 8.42606271e-02 8.42032784e-02 + 8.41460533e-02 8.40889525e-02 8.40319764e-02 8.39751257e-02 8.39184009e-02 + 8.38618026e-02 8.38053314e-02 8.37489878e-02 8.36927724e-02 8.36366859e-02 + 8.35807286e-02 8.35249013e-02 8.34692046e-02 8.34136388e-02 8.33582048e-02 + 8.33029029e-02 8.32477338e-02 8.31926981e-02 8.31377963e-02 8.30830290e-02 + 8.30283967e-02 8.29739001e-02 8.29195397e-02 8.28653161e-02 8.28112297e-02 + 8.27572813e-02 8.27034714e-02 8.26498005e-02 8.25962691e-02 8.25428780e-02 + 8.24896276e-02 8.24365184e-02 8.23835511e-02 8.23307263e-02 8.22780444e-02 + 8.22255060e-02 8.21731118e-02 8.21208622e-02 8.20687579e-02 8.20167993e-02 + 8.19649871e-02 8.19133218e-02 8.18618039e-02 8.18104341e-02 8.17592128e-02 + 8.17081407e-02 8.16572182e-02 8.16064460e-02 8.15558245e-02 8.15053545e-02 + 8.14550363e-02 8.14048705e-02 8.13548578e-02 8.13049986e-02 8.12552935e-02 + 8.12057430e-02 8.11563478e-02 8.11071082e-02 8.10580250e-02 8.10090986e-02 + 8.09603295e-02 8.09117184e-02 8.08632657e-02 8.08149721e-02 8.07668379e-02 + 8.07188639e-02 8.06710504e-02 8.06233982e-02 8.05759075e-02 8.05285792e-02 + 8.04814136e-02 8.04344112e-02 8.03875727e-02 8.03408986e-02 8.02943893e-02 + 8.02480455e-02 8.02018675e-02 8.01558561e-02 8.01100116e-02 8.00643347e-02 + 8.00188258e-02 7.99734855e-02 7.99283142e-02 7.98833126e-02 7.98384810e-02 + 7.97938201e-02 7.97493304e-02 7.97050123e-02 7.96608664e-02 7.96168932e-02 + 7.95730933e-02 7.95294670e-02 7.94860149e-02 7.94427376e-02 7.93996355e-02 + 7.93567091e-02 7.93139590e-02 7.92713856e-02 7.92289895e-02 7.91867711e-02 + 7.91447310e-02 7.91028695e-02 7.90611873e-02 7.90196849e-02 7.89783626e-02 + 7.89372210e-02 7.88962607e-02 7.88554819e-02 7.88148854e-02 7.87744715e-02 + 7.87342407e-02 7.86941935e-02 7.86543304e-02 7.86146519e-02 7.85751584e-02 + 7.85358504e-02 7.84967284e-02 7.84577929e-02 7.84190442e-02 7.83804830e-02 + 7.83421096e-02 7.83039245e-02 7.82659282e-02 7.82281212e-02 7.81905038e-02 + 7.81530766e-02 7.81158400e-02 7.80787945e-02 7.80419405e-02 7.80052784e-02 + 7.79688088e-02 7.79325320e-02 7.78964485e-02 7.78605587e-02 7.78248631e-02 + 7.77893622e-02 7.77540563e-02 7.77189459e-02 7.76840314e-02 7.76493132e-02 + 7.76147919e-02 7.75804677e-02 7.75463412e-02 7.75124127e-02 7.74786828e-02 + 7.74451517e-02 7.74118199e-02 7.73786878e-02 7.73457559e-02 7.73130245e-02 + 7.72804941e-02 7.72481650e-02 7.72160377e-02 7.71841125e-02 7.71523900e-02 + 7.71208703e-02 7.70895541e-02 7.70584416e-02 7.70275332e-02 7.69968293e-02 + 7.69663304e-02 7.69360368e-02 7.69059488e-02 7.68760670e-02 7.68463915e-02 + 7.68169229e-02 7.67876614e-02 7.67586075e-02 7.67297616e-02 7.67011239e-02 + 7.66726949e-02 7.66444749e-02 7.66164642e-02 7.65886633e-02 7.65610725e-02 + 7.65336921e-02 7.65065225e-02 7.64795641e-02 7.64528171e-02 7.64262819e-02 + 7.63999589e-02 7.63738484e-02 7.63479508e-02 7.63222662e-02 7.62967952e-02 + 7.62715380e-02 7.62464950e-02 7.62216664e-02 7.61970526e-02 7.61726539e-02 + 7.61484706e-02 7.61245031e-02 7.61007516e-02 7.60772164e-02 7.60538979e-02 + 7.60307964e-02 7.60079121e-02 7.59852453e-02 7.59627964e-02 7.59405657e-02 + 7.59185533e-02 7.58967597e-02 7.58751851e-02 7.58538297e-02 7.58326939e-02 + 7.58117779e-02 7.57910820e-02 7.57706065e-02 7.57503516e-02 7.57303176e-02 + 7.57105048e-02 7.56909134e-02 7.56715437e-02 7.56523959e-02 7.56334703e-02 + 7.56147671e-02 7.55962866e-02 7.55780290e-02 7.55599946e-02 7.55421835e-02 + 7.55245961e-02 7.55072326e-02 7.54900931e-02 7.54731780e-02 7.54564874e-02 + 7.54400215e-02 7.54237806e-02 7.54077649e-02 7.53919746e-02 7.53764099e-02 + 7.53610711e-02 7.53459582e-02 7.53310716e-02 7.53164113e-02 7.53019777e-02 + 7.52877708e-02 7.52737910e-02 7.52600383e-02 7.52465130e-02 7.52332152e-02 + 7.52201451e-02 7.52073028e-02 7.51946887e-02 7.51823027e-02 7.51701451e-02 + 7.51582161e-02 7.51465158e-02 7.51350443e-02 7.51238019e-02 7.51127886e-02 + 7.51020046e-02 7.50914500e-02 7.50811251e-02 7.50710299e-02 7.50611645e-02 + 7.50515291e-02 7.50421239e-02 7.50329489e-02 7.50240043e-02 7.50152901e-02 + 7.50068066e-02 7.49985538e-02 7.49905318e-02 7.49827407e-02 7.49751807e-02 + 7.49678518e-02 7.49607542e-02 7.49538879e-02 7.49472530e-02 7.49408496e-02 + 7.49346779e-02 7.49287378e-02 7.49230295e-02 7.49175530e-02 7.49123084e-02 + 7.49072958e-02 7.49025153e-02 7.48979669e-02 7.48936506e-02 7.48895666e-02 + 7.48857148e-02 7.48820954e-02 7.48787084e-02 7.48755538e-02 7.48726317e-02 + 7.48699421e-02 7.48674851e-02 7.48652606e-02 7.48632687e-02 7.48615095e-02 + 7.48599830e-02 7.48586891e-02 7.48576279e-02 7.48567994e-02 7.48562037e-02 + 7.48558407e-02 7.48557104e-02 7.48558129e-02 7.48561481e-02 7.48567160e-02 + 7.48575167e-02 7.48585501e-02 7.48598162e-02 7.48613149e-02 7.48630464e-02 + 7.48650104e-02 7.48672071e-02 7.48696364e-02 7.48722982e-02 7.48751926e-02 + 7.48783194e-02 7.48816786e-02 7.48852703e-02 7.48890943e-02 7.48931506e-02 + 7.48974391e-02 7.49019598e-02 7.49067126e-02 7.49116975e-02 7.49169143e-02 + 7.49223631e-02 7.49280438e-02 7.49339562e-02 7.49401003e-02 7.49464760e-02 + 7.49530832e-02 7.49599219e-02 7.49669919e-02 7.49742931e-02 7.49818255e-02 + 7.49895890e-02 7.49975834e-02 7.50058087e-02 7.50142646e-02 7.50229512e-02 + 7.50318684e-02 7.50410158e-02 7.50503936e-02 7.50600015e-02 7.50698394e-02 + 7.50799072e-02 7.50902047e-02 7.51007318e-02 7.51114884e-02 7.51224743e-02 + 7.51336894e-02 7.51451335e-02 7.51568065e-02 7.51687082e-02 7.51808385e-02 + 7.51931972e-02 7.52057841e-02 7.52185991e-02 7.52316420e-02 7.52449126e-02 + 7.52584108e-02 7.52721363e-02 7.52860890e-02 7.53002688e-02 7.53146753e-02 + 7.53293085e-02 7.53441681e-02 7.53592540e-02 7.53745659e-02 7.53901036e-02 + 7.54058670e-02 7.54218558e-02 7.54380698e-02 7.54545087e-02 7.54711725e-02 + 7.54880609e-02 7.55051735e-02 7.55225103e-02 7.55400710e-02 7.55578553e-02 + 7.55758631e-02 7.55940940e-02 7.56125479e-02 7.56312245e-02 7.56501236e-02 + 7.56692448e-02 7.56885881e-02 7.57081530e-02 7.57279394e-02 7.57479470e-02 + 7.57681755e-02 7.57886247e-02 7.58092942e-02 7.58301840e-02 7.58512935e-02 + 7.58726227e-02 7.58941712e-02 7.59159386e-02 7.59379249e-02 7.59601296e-02 + 7.59825524e-02 7.60051932e-02 7.60280515e-02 7.60511271e-02 7.60744197e-02 + 7.60979290e-02 7.61216547e-02 7.61455964e-02 7.61697540e-02 7.61941269e-02 + 7.62187151e-02 7.62435180e-02 7.62685354e-02 7.62937671e-02 7.63192126e-02 + 7.63448716e-02 7.63707438e-02 7.63968289e-02 7.64231266e-02 7.64496364e-02 + 7.64763581e-02 7.65032913e-02 7.65304357e-02 7.65577909e-02 7.65853566e-02 + 7.66131325e-02 7.66411181e-02 7.66693131e-02 7.66977171e-02 7.67263299e-02 + 7.67551510e-02 7.67841801e-02 7.68134168e-02 7.68428607e-02 7.68725114e-02 + 7.69023687e-02 7.69324320e-02 7.69627011e-02 7.69931756e-02 7.70238549e-02 + 7.70547389e-02 7.70858271e-02 7.71171190e-02 7.71486144e-02 7.71803127e-02 + 7.72122137e-02 7.72443169e-02 7.72766219e-02 7.73091283e-02 7.73418357e-02 + 7.73747437e-02 7.74078518e-02 7.74411598e-02 7.74746671e-02 7.75083734e-02 + 7.75422781e-02 7.75763810e-02 7.76106816e-02 7.76451794e-02 7.76798741e-02 + 7.77147651e-02 7.77498522e-02 7.77851347e-02 7.78206124e-02 7.78562848e-02 + 7.78921513e-02 7.79282117e-02 7.79644654e-02 7.80009121e-02 7.80375512e-02 + 7.80743823e-02 7.81114050e-02 7.81486188e-02 7.81860233e-02 7.82236179e-02 + 7.82614023e-02 7.82993761e-02 7.83375386e-02 7.83758895e-02 7.84144284e-02 + 7.84531546e-02 7.84920679e-02 7.85311676e-02 7.85704534e-02 7.86099248e-02 + 7.86495813e-02 7.86894223e-02 7.87294475e-02 7.87696564e-02 7.88100485e-02 + 7.88506232e-02 7.88913802e-02 7.89323189e-02 7.89734389e-02 7.90147396e-02 + 7.90562205e-02 7.90978813e-02 7.91397213e-02 7.91817402e-02 7.92239373e-02 + 7.92663122e-02 7.93088645e-02 7.93515935e-02 7.93944988e-02 7.94375800e-02 + 7.94808364e-02 7.95242676e-02 7.95678731e-02 7.96116524e-02 7.96556049e-02 + 7.96997302e-02 7.97440277e-02 7.97884970e-02 7.98331374e-02 7.98779486e-02 + 7.99229300e-02 7.99680810e-02 8.00134012e-02 8.00588900e-02 8.01045468e-02 + 8.01503713e-02 8.01963628e-02 8.02425209e-02 8.02888450e-02 8.03353345e-02 + 8.03819890e-02 8.04288079e-02 8.04757907e-02 8.05229368e-02 8.05702458e-02 + 8.06177170e-02 8.06653500e-02 8.07131443e-02 8.07610992e-02 8.08092142e-02 + 8.08574888e-02 8.09059225e-02 8.09545148e-02 8.10032650e-02 8.10521726e-02 + 8.11012372e-02 8.11504581e-02 8.11998347e-02 8.12493667e-02 8.12990534e-02 + 8.13488942e-02 8.13988886e-02 8.14490361e-02 8.14993361e-02 8.15497881e-02 + 8.16003915e-02 8.16511457e-02 8.17020502e-02 8.17531045e-02 8.18043080e-02 + 8.18556601e-02 8.19071604e-02 8.19588081e-02 8.20106028e-02 8.20625439e-02 + 8.21146309e-02 8.21668631e-02 8.22192401e-02 8.22717613e-02 8.23244260e-02 + 8.23772339e-02 8.24301842e-02 8.24832764e-02 8.25365100e-02 8.25898843e-02 + 8.26433990e-02 8.26970532e-02 8.27508466e-02 8.28047785e-02 8.28588484e-02 + 8.29130557e-02 8.29673998e-02 8.30218801e-02 8.30764962e-02 8.31312474e-02 + 8.31861332e-02 8.32411529e-02 8.32963061e-02 8.33515922e-02 8.34070105e-02 + 8.34625605e-02 8.35182417e-02 8.35740534e-02 8.36299951e-02 8.36860663e-02 + 8.37422663e-02 8.37985946e-02 8.38550506e-02 8.39116338e-02 8.39683435e-02 + 8.40251792e-02 8.40821403e-02 8.41392263e-02 8.41964365e-02 8.42537705e-02 + 8.43112275e-02 8.43688072e-02 8.44265088e-02 8.44843318e-02 8.45422756e-02 + 8.46003397e-02 8.46585235e-02 8.47168264e-02 8.47752478e-02 8.48337872e-02 + 8.48924439e-02 8.49512175e-02 8.50101073e-02 8.50691128e-02 8.51282334e-02 + 8.51874685e-02 8.52468175e-02 8.53062799e-02 8.53658551e-02 8.54255425e-02 + 8.54853415e-02 8.55452516e-02 8.56052723e-02 8.56654028e-02 8.57256427e-02 + 8.57859914e-02 8.58464483e-02 8.59070128e-02 8.59676844e-02 8.60284625e-02 + 8.60893465e-02 8.61503358e-02 8.62114299e-02 8.62726282e-02 8.63339302e-02 + 8.63953352e-02 8.64568427e-02 8.65184522e-02 8.65801629e-02 8.66419745e-02 + 8.67038863e-02 8.67658977e-02 8.68280082e-02 8.68902172e-02 8.69525242e-02 + 8.70149285e-02 8.70774296e-02 8.71400270e-02 8.72027200e-02 8.72655081e-02 + 8.73283908e-02 8.73913675e-02 8.74544376e-02 8.75176005e-02 8.75808557e-02 + 8.76442026e-02 8.77076407e-02 8.77711694e-02 8.78347881e-02 8.78984963e-02 + 8.79622934e-02 8.80261789e-02 8.80901521e-02 8.81542126e-02 8.82183598e-02 + 8.82825930e-02 8.83469119e-02 8.84113157e-02 8.84758040e-02 8.85403762e-02 + 8.86050317e-02 8.86697700e-02 8.87345905e-02 8.87994927e-02 8.88644761e-02 + 8.89295400e-02 8.89946839e-02 8.90599073e-02 8.91252096e-02 8.91905903e-02 + 8.92560488e-02 8.93215845e-02 8.93871970e-02 8.94528857e-02 8.95186500e-02 + 8.95844894e-02 8.96504034e-02 8.97163914e-02 8.97824528e-02 8.98485871e-02 + 8.99147938e-02 8.99810724e-02 9.00474222e-02 9.01138428e-02 9.01803336e-02 + 9.02468942e-02 9.03135238e-02 9.03802221e-02 9.04469884e-02 9.05138223e-02 + 9.05807232e-02 9.06476906e-02 9.07147239e-02 9.07818226e-02 9.08489862e-02 + 9.09162142e-02 9.09835060e-02 9.10508611e-02 9.11182790e-02 9.11857591e-02 + 9.12533009e-02 9.13209040e-02 9.13885677e-02 9.14562916e-02 9.15240751e-02 + 9.15919178e-02 9.16598190e-02 9.17277784e-02 9.17957953e-02 9.18638692e-02 + 9.19319997e-02 9.20001862e-02 9.20684282e-02 9.21367252e-02 9.22050767e-02 + 9.22734821e-02 9.23419411e-02 9.24104530e-02 9.24790173e-02 9.25476336e-02 + 9.26163013e-02 9.26850199e-02 9.27537890e-02 9.28226080e-02 9.28914765e-02 + 9.29603938e-02 9.30293596e-02 9.30983734e-02 9.31674346e-02 9.32365427e-02 + 9.33056973e-02 9.33748978e-02 9.34441438e-02 9.35134347e-02 9.35827701e-02 + 9.36521496e-02 9.37215725e-02 9.37910385e-02 9.38605469e-02 9.39300975e-02 + 9.39996895e-02 9.40693227e-02 9.41389965e-02 9.42087104e-02 9.42784639e-02 + 9.43482566e-02 9.44180880e-02 9.44879576e-02 9.45578649e-02 9.46278095e-02 + 9.46977909e-02 9.47678086e-02 9.48378622e-02 9.49079511e-02 9.49780750e-02 + 9.50482333e-02 9.51184256e-02 9.51886514e-02 9.52589103e-02 9.53292017e-02 + 9.53995254e-02 9.54698806e-02 9.55402671e-02 9.56106844e-02 9.56811320e-02 + 9.57516094e-02 9.58221162e-02 9.58926520e-02 9.59632163e-02 9.60338086e-02 + 9.61044286e-02 9.61750756e-02 9.62457494e-02 9.63164495e-02 9.63871754e-02 + 9.64579266e-02 9.65287028e-02 9.65995035e-02 9.66703283e-02 9.67411766e-02 + 9.68120482e-02 9.68829425e-02 9.69538592e-02 9.70247977e-02 9.70957577e-02 + 9.71667387e-02 9.72377403e-02 9.73087621e-02 9.73798037e-02 9.74508645e-02 + 9.75219443e-02 9.75930426e-02 9.76641589e-02 9.77352928e-02 9.78064440e-02 + 9.78776119e-02 9.79487963e-02 9.80199966e-02 9.80912125e-02 9.81624436e-02 + 9.82336894e-02 9.83049495e-02 9.83762235e-02 9.84475111e-02 9.85188118e-02 + 9.85901251e-02 9.86614508e-02 9.87327884e-02 9.88041375e-02 9.88754977e-02 + 9.89468687e-02 9.90182499e-02 9.90896410e-02 9.91610417e-02 9.92324515e-02 + 9.93038701e-02 9.93752970e-02 9.94467318e-02 9.95181743e-02 9.95896239e-02 + 9.96610804e-02 9.97325432e-02 9.98040122e-02 9.98754867e-02 9.99469666e-02 + 1.00018451e-01 1.00089941e-01 1.00161434e-01 1.00232931e-01 1.00304432e-01 + 1.00375936e-01 1.00447442e-01 1.00518951e-01 1.00590461e-01 1.00661973e-01 + 1.00733487e-01 1.00805001e-01 1.00876516e-01 1.00948030e-01 1.01019545e-01 + 1.01091059e-01 1.01162572e-01 1.01234084e-01 1.01305594e-01 1.01377102e-01 + 1.01448607e-01 1.01520110e-01 1.01591610e-01 1.01663106e-01 1.01734599e-01 + 1.01806088e-01 1.01877572e-01 1.01949051e-01 1.02020525e-01 1.02091994e-01 + 1.02163457e-01 1.02234914e-01 1.02306364e-01 1.02377807e-01 1.02449244e-01 + 1.02520672e-01 1.02592093e-01 1.02663506e-01 1.02734911e-01 1.02806306e-01 + 1.02877693e-01 1.02949070e-01 1.03020437e-01 1.03091794e-01 1.03163141e-01 + 1.03234477e-01 1.03305802e-01 1.03377115e-01 1.03448417e-01 1.03519707e-01 + 1.03590985e-01 1.03662250e-01 1.03733502e-01 1.03804741e-01 1.03875966e-01 + 1.03947178e-01 1.04018375e-01 1.04089558e-01 1.04160726e-01 1.04231879e-01 + 1.04303017e-01 1.04374139e-01 1.04445245e-01 1.04516335e-01 1.04587409e-01 + 1.04658465e-01 1.04729504e-01 1.04800527e-01 1.04871531e-01 1.04942517e-01 + 1.05013485e-01 1.05084435e-01 1.05155365e-01 1.05226277e-01 1.05297169e-01 + 1.05368041e-01 1.05438894e-01 1.05509726e-01 1.05580538e-01 1.05651329e-01 + 1.05722099e-01 1.05792847e-01 1.05863574e-01 1.05934279e-01 1.06004962e-01 + 1.06075622e-01 1.06146260e-01 1.06216875e-01 1.06287467e-01 1.06358035e-01 + 1.06428579e-01 1.06499100e-01 1.06569596e-01 1.06640067e-01 1.06710514e-01 + 1.06780936e-01 1.06851332e-01 1.06921703e-01 1.06992049e-01 1.07062368e-01 + 1.07132661e-01 1.07202927e-01 1.07273167e-01 1.07343379e-01 1.07413565e-01 + 1.07483722e-01 1.07553852e-01 1.07623955e-01 1.07694028e-01 1.07764074e-01 + 1.07834090e-01 1.07904078e-01 1.07974036e-01 1.08043966e-01 1.08113865e-01 + 1.08183735e-01 1.08253574e-01 1.08323383e-01 1.08393162e-01 1.08462910e-01 + 1.08532626e-01 1.08602312e-01 1.08671966e-01 1.08741588e-01 1.08811179e-01 + 1.08880737e-01 1.08950263e-01 1.09019757e-01 1.09089217e-01 1.09158645e-01 + 1.09228040e-01 1.09297401e-01 1.09366728e-01 1.09436022e-01 1.09505281e-01 + 1.09574507e-01 1.09643698e-01 1.09712854e-01 1.09781975e-01 1.09851061e-01 + 1.09920112e-01 1.09989128e-01 1.10058108e-01 1.10127052e-01 1.10195959e-01 + 1.10264831e-01 1.10333666e-01 1.10402465e-01 1.10471226e-01 1.10539951e-01 + 1.10608638e-01 1.10677288e-01 1.10745900e-01 1.10814475e-01 1.10883011e-01 + 1.10951510e-01 1.11019970e-01 1.11088391e-01 1.11156774e-01 1.11225117e-01 + 1.11293422e-01 1.11361687e-01 1.11429913e-01 1.11498100e-01 1.11566246e-01 + 1.11634353e-01 1.11702419e-01 1.11770445e-01 1.11838431e-01 1.11906376e-01 + 1.11974280e-01 1.12042143e-01 1.12109965e-01 1.12177745e-01 1.12245484e-01 + 1.12313182e-01 1.12380837e-01 1.12448451e-01 1.12516022e-01 1.12583551e-01 + 1.12651038e-01 1.12718482e-01 1.12785883e-01 1.12853241e-01 1.12920556e-01 + 1.12987828e-01 1.13055056e-01 1.13122241e-01 1.13189382e-01 1.13256480e-01 + 1.13323533e-01 1.13390542e-01 1.13457507e-01 1.13524427e-01 1.13591303e-01 + 1.13658134e-01 1.13724920e-01 1.13791661e-01 1.13858356e-01 1.13925007e-01 + 1.13991612e-01 1.14058171e-01 1.14124685e-01 1.14191153e-01 1.14257575e-01 + 1.14323950e-01 1.14390280e-01 1.14456562e-01 1.14522799e-01 1.14588988e-01 + 1.14655131e-01 1.14721227e-01 1.14787276e-01 1.14853278e-01 1.14919232e-01 + 1.14985139e-01 1.15050998e-01 1.15116810e-01 1.15182574e-01 1.15248290e-01 + 1.15313957e-01 1.15379577e-01 1.15445148e-01 1.15510671e-01 1.15576146e-01 + 1.15641571e-01 1.15706948e-01 1.15772276e-01 1.15837555e-01 1.15902785e-01 + 1.15967965e-01 1.16033097e-01 1.16098179e-01 1.16163211e-01 1.16228193e-01 + 1.16293126e-01 1.16358009e-01 1.16422842e-01 1.16487625e-01 1.16552357e-01 + 1.16617040e-01 1.16681672e-01 1.16746253e-01 1.16810784e-01 1.16875264e-01 + 1.16939693e-01 1.17004071e-01 1.17068398e-01 1.17132674e-01 1.17196899e-01 + 1.17261073e-01 1.17325195e-01 1.17389266e-01 1.17453285e-01 1.17517252e-01 + 1.17581168e-01 1.17645032e-01 1.17708843e-01 1.17772603e-01 1.17836311e-01 + 1.17899966e-01 1.17963569e-01 1.18027120e-01 1.18090618e-01 1.18154064e-01 + 1.18217457e-01 1.18280797e-01 1.18344084e-01 1.18407319e-01 1.18470500e-01 + 1.18533629e-01 1.18596704e-01 1.18659726e-01 1.18722695e-01 1.18785610e-01 + 1.18848472e-01 1.18911281e-01 1.18974035e-01 1.19036736e-01 1.19099384e-01 + 2.08130000e-04 2.08281191e-04 2.08734762e-04 2.09490714e-04 2.10549046e-04 + 2.11909757e-04 2.13572846e-04 2.15538310e-04 2.17806148e-04 2.20376358e-04 + 2.23248936e-04 2.26423882e-04 2.29901190e-04 2.33680858e-04 2.37762883e-04 + 2.42147260e-04 2.46833984e-04 2.51823051e-04 2.57114457e-04 2.62708196e-04 + 2.68604263e-04 2.74802652e-04 2.81303356e-04 2.88106370e-04 2.95211687e-04 + 3.02619299e-04 3.10329200e-04 3.18341382e-04 3.26655837e-04 3.35272557e-04 + 3.44191533e-04 3.53412758e-04 3.62936221e-04 3.72761913e-04 3.82889825e-04 + 3.93319947e-04 4.04052269e-04 4.15086779e-04 4.26423468e-04 4.38062324e-04 + 4.50003336e-04 4.62246492e-04 4.74791780e-04 4.87639188e-04 5.00788703e-04 + 5.14240312e-04 5.27994002e-04 5.42049760e-04 5.56407572e-04 5.71067423e-04 + 5.86029300e-04 6.01293187e-04 6.16859071e-04 6.32726934e-04 6.48896763e-04 + 6.65368541e-04 6.82142252e-04 6.99217880e-04 7.16595407e-04 7.34274817e-04 + 7.52256092e-04 7.70539216e-04 7.89124169e-04 8.08010934e-04 8.27199493e-04 + 8.46689825e-04 8.66481913e-04 8.86575737e-04 9.06971278e-04 9.27668514e-04 + 9.48667427e-04 9.69967995e-04 9.91570198e-04 1.01347401e-03 1.03567942e-03 + 1.05818640e-03 1.08099493e-03 1.10410498e-03 1.12751654e-03 1.15122957e-03 + 1.17524406e-03 1.19955999e-03 1.22417733e-03 1.24909605e-03 1.27431613e-03 + 1.29983755e-03 1.32566029e-03 1.35178430e-03 1.37820958e-03 1.40493610e-03 + 1.43196382e-03 1.45929272e-03 1.48692278e-03 1.51485397e-03 1.54308626e-03 + 1.57161963e-03 1.60045404e-03 1.62958946e-03 1.65902588e-03 1.68876325e-03 + 1.71880156e-03 1.74914077e-03 1.77978085e-03 1.81072177e-03 1.84196351e-03 + 1.87350602e-03 1.90534929e-03 1.93749327e-03 1.96993795e-03 2.00268328e-03 + 2.03572923e-03 2.06907577e-03 2.10272288e-03 2.13667051e-03 2.17091863e-03 + 2.20546721e-03 2.24031622e-03 2.27546562e-03 2.31091538e-03 2.34666546e-03 + 2.38271583e-03 2.41906645e-03 2.45571729e-03 2.49266831e-03 2.52991947e-03 + 2.56747075e-03 2.60532209e-03 2.64347347e-03 2.68192485e-03 2.72067619e-03 + 2.75972745e-03 2.79907859e-03 2.83872959e-03 2.87868038e-03 2.91893095e-03 + 2.95948125e-03 3.00033123e-03 3.04148087e-03 3.08293011e-03 3.12467892e-03 + 3.16672726e-03 3.20907509e-03 3.25172236e-03 3.29466904e-03 3.33791508e-03 + 3.38146044e-03 3.42530507e-03 3.46944894e-03 3.51389201e-03 3.55863422e-03 + 3.60367554e-03 3.64901591e-03 3.69465531e-03 3.74059367e-03 3.78683096e-03 + 3.83336714e-03 3.88020215e-03 3.92733595e-03 3.97476850e-03 4.02249975e-03 + 4.07052965e-03 4.11885815e-03 4.16748522e-03 4.21641079e-03 4.26563483e-03 + 4.31515728e-03 4.36497811e-03 4.41509725e-03 4.46551466e-03 4.51623029e-03 + 4.56724409e-03 4.61855601e-03 4.67016601e-03 4.72207403e-03 4.77428002e-03 + 4.82678393e-03 4.87958570e-03 4.93268530e-03 4.98608266e-03 5.03977774e-03 + 5.09377048e-03 5.14806083e-03 5.20264873e-03 5.25753414e-03 5.31271700e-03 + 5.36819725e-03 5.42397485e-03 5.48004973e-03 5.53642185e-03 5.59309115e-03 + 5.65005757e-03 5.70732106e-03 5.76488157e-03 5.82273903e-03 5.88089339e-03 + 5.93934459e-03 5.99809258e-03 6.05713731e-03 6.11647870e-03 6.17611671e-03 + 6.23605128e-03 6.29628235e-03 6.35680986e-03 6.41763375e-03 6.47875396e-03 + 6.54017044e-03 6.60188312e-03 6.66389194e-03 6.72619685e-03 6.78879778e-03 + 6.85169468e-03 6.91488748e-03 6.97837611e-03 7.04216053e-03 7.10624066e-03 + 7.17061645e-03 7.23528783e-03 7.30025474e-03 7.36551712e-03 7.43107490e-03 + 7.49692802e-03 7.56307641e-03 7.62952002e-03 7.69625878e-03 7.76329262e-03 + 7.83062147e-03 7.89824528e-03 7.96616398e-03 8.03437750e-03 8.10288577e-03 + 8.17168874e-03 8.24078632e-03 8.31017847e-03 8.37986510e-03 8.44984615e-03 + 8.52012155e-03 8.59069124e-03 8.66155515e-03 8.73271321e-03 8.80416535e-03 + 8.87591149e-03 8.94795158e-03 9.02028554e-03 9.09291331e-03 9.16583480e-03 + 9.23904995e-03 9.31255870e-03 9.38636096e-03 9.46045668e-03 9.53484577e-03 + 9.60952816e-03 9.68450379e-03 9.75977258e-03 9.83533445e-03 9.91118934e-03 + 9.98733717e-03 1.00637779e-02 1.01405114e-02 1.02175376e-02 1.02948564e-02 + 1.03724679e-02 1.04503718e-02 1.05285681e-02 1.06070568e-02 1.06858378e-02 + 1.07649109e-02 1.08442762e-02 1.09239335e-02 1.10038828e-02 1.10841240e-02 + 1.11646570e-02 1.12454817e-02 1.13265980e-02 1.14080060e-02 1.14897054e-02 + 1.15716963e-02 1.16539785e-02 1.17365519e-02 1.18194166e-02 1.19025723e-02 + 1.19860191e-02 1.20697568e-02 1.21537854e-02 1.22381047e-02 1.23227148e-02 + 1.24076155e-02 1.24928067e-02 1.25782883e-02 1.26640604e-02 1.27501227e-02 + 1.28364752e-02 1.29231179e-02 1.30100506e-02 1.30972732e-02 1.31847858e-02 + 1.32725881e-02 1.33606801e-02 1.34490618e-02 1.35377329e-02 1.36266936e-02 + 1.37159436e-02 1.38054829e-02 1.38953113e-02 1.39854289e-02 1.40758355e-02 + 1.41665311e-02 1.42575155e-02 1.43487886e-02 1.44403504e-02 1.45322008e-02 + 1.46243398e-02 1.47167671e-02 1.48094827e-02 1.49024866e-02 1.49957786e-02 + 1.50893587e-02 1.51832267e-02 1.52773826e-02 1.53718263e-02 1.54665577e-02 + 1.55615767e-02 1.56568832e-02 1.57524771e-02 1.58483584e-02 1.59445269e-02 + 1.60409825e-02 1.61377252e-02 1.62347549e-02 1.63320714e-02 1.64296747e-02 + 1.65275647e-02 1.66257413e-02 1.67242043e-02 1.68229538e-02 1.69219896e-02 + 1.70213116e-02 1.71209197e-02 1.72208138e-02 1.73209939e-02 1.74214598e-02 + 1.75222114e-02 1.76232487e-02 1.77245715e-02 1.78261798e-02 1.79280734e-02 + 1.80302523e-02 1.81327163e-02 1.82354654e-02 1.83384994e-02 1.84418184e-02 + 1.85454220e-02 1.86493104e-02 1.87534833e-02 1.88579407e-02 1.89626824e-02 + 1.90677084e-02 1.91730186e-02 1.92786129e-02 1.93844911e-02 1.94906532e-02 + 1.95970991e-02 1.97038286e-02 1.98108417e-02 1.99181382e-02 2.00257182e-02 + 2.01335813e-02 2.02417277e-02 2.03501571e-02 2.04588694e-02 2.05678646e-02 + 2.06771425e-02 2.07867031e-02 2.08965462e-02 2.10066717e-02 2.11170796e-02 + 2.12277697e-02 2.13387419e-02 2.14499962e-02 2.15615323e-02 2.16733503e-02 + 2.17854499e-02 2.18978311e-02 2.20104938e-02 2.21234379e-02 2.22366633e-02 + 2.23501698e-02 2.24639574e-02 2.25780260e-02 2.26923753e-02 2.28070055e-02 + 2.29219162e-02 2.30371074e-02 2.31525791e-02 2.32683311e-02 2.33843632e-02 + 2.35006755e-02 2.36172677e-02 2.37341397e-02 2.38512915e-02 2.39687230e-02 + 2.40864339e-02 2.42044243e-02 2.43226940e-02 2.44412429e-02 2.45600709e-02 + 2.46791779e-02 2.47985637e-02 2.49182282e-02 2.50381714e-02 2.51583931e-02 + 2.52788932e-02 2.53996717e-02 2.55207283e-02 2.56420629e-02 2.57636755e-02 + 2.58855660e-02 2.60077341e-02 2.61301799e-02 2.62529032e-02 2.63759039e-02 + 2.64991818e-02 2.66227368e-02 2.67465689e-02 2.68706779e-02 2.69950637e-02 + 2.71197262e-02 2.72446653e-02 2.73698808e-02 2.74953726e-02 2.76211406e-02 + 2.77471848e-02 2.78735049e-02 2.80001009e-02 2.81269726e-02 2.82541199e-02 + 2.83815427e-02 2.85092409e-02 2.86372144e-02 2.87654630e-02 2.88939867e-02 + 2.90227852e-02 2.91518585e-02 2.92812065e-02 2.94108290e-02 2.95407260e-02 + 2.96708972e-02 2.98013426e-02 2.99320621e-02 3.00630555e-02 3.01943227e-02 + 3.03258636e-02 3.04576781e-02 3.05897660e-02 3.07221272e-02 3.08547616e-02 + 3.09876691e-02 3.11208496e-02 3.12543028e-02 3.13880288e-02 3.15220273e-02 + 3.16562983e-02 3.17908416e-02 3.19256571e-02 3.20607447e-02 3.21961042e-02 + 3.23317356e-02 3.24676386e-02 3.26038132e-02 3.27402593e-02 3.28769766e-02 + 3.30139652e-02 3.31512248e-02 3.32887554e-02 3.34265567e-02 3.35646288e-02 + 3.37029714e-02 3.38415844e-02 3.39804677e-02 3.41196212e-02 3.42590447e-02 + 3.43987381e-02 3.45387013e-02 3.46789341e-02 3.48194365e-02 3.49602082e-02 + 3.51012492e-02 3.52425593e-02 3.53841384e-02 3.55259864e-02 3.56681031e-02 + 3.58104884e-02 3.59531422e-02 3.60960643e-02 3.62392547e-02 3.63827131e-02 + 3.65264394e-02 3.66704335e-02 3.68146954e-02 3.69592247e-02 3.71040215e-02 + 3.72490856e-02 3.73944167e-02 3.75400149e-02 3.76858800e-02 3.78320118e-02 + 3.79784102e-02 3.81250751e-02 3.82720063e-02 3.84192037e-02 3.85666672e-02 + 3.87143966e-02 3.88623918e-02 3.90106526e-02 3.91591790e-02 3.93079707e-02 + 3.94570277e-02 3.96063498e-02 3.97559369e-02 3.99057888e-02 4.00559054e-02 + 4.02062865e-02 4.03569321e-02 4.05078419e-02 4.06590159e-02 4.08104539e-02 + 4.09621558e-02 4.11141214e-02 4.12663506e-02 4.14188432e-02 4.15715991e-02 + 4.17246182e-02 4.18779004e-02 4.20314454e-02 4.21852532e-02 4.23393235e-02 + 4.24936564e-02 4.26482515e-02 4.28031089e-02 4.29582283e-02 4.31136096e-02 + 4.32692526e-02 4.34251573e-02 4.35813234e-02 4.37377508e-02 4.38944395e-02 + 4.40513892e-02 4.42085998e-02 4.43660711e-02 4.45238031e-02 4.46817956e-02 + 4.48400483e-02 4.49985613e-02 4.51573343e-02 4.53163671e-02 4.54756598e-02 + 4.56352120e-02 4.57950237e-02 4.59550947e-02 4.61154249e-02 4.62760141e-02 + 4.64368622e-02 4.65979690e-02 4.67593344e-02 4.69209582e-02 4.70828403e-02 + 4.72449806e-02 4.74073789e-02 4.75700350e-02 4.77329488e-02 4.78961202e-02 + 4.80595489e-02 4.82232350e-02 4.83871781e-02 4.85513782e-02 4.87158351e-02 + 4.88805487e-02 4.90455188e-02 4.92107453e-02 4.93762280e-02 4.95419667e-02 + 4.97079614e-02 4.98742118e-02 5.00407179e-02 5.02074794e-02 5.03744963e-02 + 5.05417683e-02 5.07092953e-02 5.08770772e-02 5.10451138e-02 5.12134049e-02 + 5.13819505e-02 5.15507503e-02 5.17198043e-02 5.18891121e-02 5.20586738e-02 + 5.22284892e-02 5.23985580e-02 5.25688802e-02 5.27394555e-02 5.29102839e-02 + 5.30813652e-02 5.32526992e-02 5.34242858e-02 5.35961248e-02 5.37682161e-02 + 5.39405595e-02 5.41131548e-02 5.42860020e-02 5.44591008e-02 5.46324511e-02 + 5.48060527e-02 5.49799055e-02 5.51540094e-02 5.53283641e-02 5.55029695e-02 + 5.56778255e-02 5.58529319e-02 5.60282885e-02 5.62038952e-02 5.63797519e-02 + 5.65558583e-02 5.67322144e-02 5.69088199e-02 5.70856747e-02 5.72627786e-02 + 5.74401316e-02 5.76177334e-02 5.77955838e-02 5.79736828e-02 5.81520301e-02 + 5.83306256e-02 5.85094691e-02 5.86885605e-02 5.88678997e-02 5.90474864e-02 + 5.92273205e-02 5.94074018e-02 5.95877302e-02 5.97683055e-02 5.99491276e-02 + 6.01301963e-02 6.03115114e-02 6.04930728e-02 6.06748803e-02 6.08569338e-02 + 6.10392330e-02 6.12217779e-02 6.14045683e-02 6.15876039e-02 6.17708848e-02 + 6.19544105e-02 6.21381812e-02 6.23221964e-02 6.25064562e-02 6.26909603e-02 + 6.28757085e-02 6.30607008e-02 6.32459369e-02 6.34314167e-02 6.36171400e-02 + 6.38031067e-02 6.39893165e-02 6.41757694e-02 6.43624651e-02 6.45494036e-02 + 6.47365845e-02 6.49240078e-02 6.51116734e-02 6.52995809e-02 6.54877303e-02 + 6.56761215e-02 6.58647541e-02 6.60536282e-02 6.62427434e-02 6.64320997e-02 + 6.66216969e-02 6.68115348e-02 6.70016132e-02 6.71919320e-02 6.73824910e-02 + 6.75732900e-02 6.77643289e-02 6.79556075e-02 6.81471257e-02 6.83388832e-02 + 6.85308799e-02 6.87231157e-02 6.89155904e-02 6.91083037e-02 6.93012556e-02 + 6.94944458e-02 6.96878742e-02 6.98815407e-02 7.00754450e-02 7.02695870e-02 + 7.04639665e-02 7.06585833e-02 7.08534374e-02 7.10485284e-02 7.12438563e-02 + 7.14394208e-02 7.16352219e-02 7.18312593e-02 7.20275328e-02 7.22240423e-02 + 7.24207876e-02 7.26177686e-02 7.28149851e-02 7.30124368e-02 7.32101237e-02 + 7.34080456e-02 7.36062022e-02 7.38045935e-02 7.40032192e-02 7.42020791e-02 + 7.44011732e-02 7.46005012e-02 7.48000630e-02 7.49998583e-02 7.51998870e-02 + 7.54001490e-02 7.56006441e-02 7.58013720e-02 7.60023326e-02 7.62035258e-02 + 7.64049514e-02 7.66066092e-02 7.68084989e-02 7.70106206e-02 7.72129739e-02 + 7.74155587e-02 7.76183748e-02 7.78214221e-02 7.80247003e-02 7.82282094e-02 + 7.84319490e-02 7.86359192e-02 7.88401196e-02 7.90445501e-02 7.92492105e-02 + 7.94541007e-02 7.96592204e-02 7.98645695e-02 8.00701479e-02 8.02759553e-02 + 8.04819916e-02 8.06882565e-02 8.08947500e-02 8.11014718e-02 8.13084218e-02 + 8.15155998e-02 8.17230055e-02 8.19306389e-02 8.21384998e-02 8.23465879e-02 + 8.25549031e-02 8.27634452e-02 8.29722141e-02 8.31812095e-02 8.33904313e-02 + 8.35998794e-02 8.38095534e-02 8.40194533e-02 8.42295789e-02 8.44399299e-02 + 8.46505063e-02 8.48613078e-02 8.50723343e-02 8.52835855e-02 8.54950613e-02 + 8.57067616e-02 8.59186860e-02 8.61308346e-02 8.63432070e-02 8.65558031e-02 + 8.67686227e-02 8.69816656e-02 8.71949318e-02 8.74084208e-02 8.76221327e-02 + 8.78360672e-02 8.80502241e-02 8.82646033e-02 8.84792045e-02 8.86940276e-02 + 8.89090725e-02 8.91243388e-02 8.93398265e-02 8.95555354e-02 8.97714652e-02 + 8.99876159e-02 9.02039871e-02 9.04205788e-02 9.06373908e-02 9.08544228e-02 + 9.10716747e-02 9.12891463e-02 9.15068374e-02 9.17247478e-02 9.19428774e-02 + 9.21612260e-02 9.23797934e-02 9.25985793e-02 9.28175837e-02 9.30368064e-02 + 9.32562470e-02 9.34759056e-02 9.36957818e-02 9.39158756e-02 9.41361866e-02 + 9.43567148e-02 9.45774599e-02 9.47984219e-02 9.50196003e-02 9.52409952e-02 + 9.54626063e-02 9.56844334e-02 9.59064764e-02 9.61287350e-02 9.63512090e-02 + 9.65738984e-02 9.67968029e-02 9.70199222e-02 9.72432563e-02 9.74668050e-02 + 9.76905680e-02 9.79145452e-02 9.81387363e-02 9.83631413e-02 9.85877598e-02 + 9.88125918e-02 9.90376370e-02 9.92628953e-02 9.94883665e-02 9.97140503e-02 + 9.99399466e-02 1.00166055e-01 1.00392376e-01 1.00618909e-01 1.00845653e-01 + 1.01072609e-01 1.01299776e-01 1.01527155e-01 1.01754744e-01 1.01982545e-01 + 1.02210556e-01 1.02438777e-01 1.02667209e-01 1.02895850e-01 1.03124702e-01 + 1.03353763e-01 1.03583034e-01 1.03812514e-01 1.04042203e-01 1.04272101e-01 + 1.04502207e-01 1.04732523e-01 1.04963046e-01 1.05193778e-01 1.05424718e-01 + 1.05655865e-01 1.05887221e-01 1.06118783e-01 1.06350553e-01 1.06582530e-01 + 1.06814713e-01 1.07047104e-01 1.07279701e-01 1.07512504e-01 1.07745513e-01 + 1.07978728e-01 1.08212148e-01 1.08445775e-01 1.08679606e-01 1.08913643e-01 + 1.09147884e-01 1.09382331e-01 1.09616982e-01 1.09851837e-01 1.10086896e-01 + 1.10322160e-01 1.10557627e-01 1.10793298e-01 1.11029172e-01 1.11265249e-01 + 1.11501530e-01 1.11738013e-01 1.11974699e-01 1.12211587e-01 1.12448678e-01 + 1.12685971e-01 1.12923465e-01 1.13161162e-01 1.13399059e-01 1.13637158e-01 + 1.13875458e-01 1.14113960e-01 1.14352661e-01 1.14591564e-01 1.14830666e-01 + 1.15069969e-01 1.15309472e-01 1.15549174e-01 1.15789076e-01 1.16029178e-01 + 1.16269478e-01 1.16509978e-01 1.16750676e-01 1.16991573e-01 1.17232669e-01 + 1.17473962e-01 1.17715454e-01 1.17957143e-01 1.18199030e-01 1.18441115e-01 + 1.18683397e-01 1.18925875e-01 1.19168551e-01 1.19411423e-01 1.19654492e-01 + 1.19897757e-01 1.20141218e-01 1.20384875e-01 1.20628728e-01 1.20872776e-01 + 1.21117020e-01 1.21361458e-01 1.21606092e-01 1.21850920e-01 1.22095943e-01 + 1.22341160e-01 1.22586571e-01 1.22832176e-01 1.23077975e-01 1.23323967e-01 + 1.23570153e-01 1.23816532e-01 1.24063104e-01 1.24309869e-01 1.24556826e-01 + 1.24803975e-01 1.25051317e-01 1.25298851e-01 1.25546576e-01 1.25794494e-01 + 1.26042602e-01 1.26290902e-01 1.26539393e-01 1.26788074e-01 1.27036946e-01 + 1.27286009e-01 1.27535261e-01 1.27784704e-01 1.28034337e-01 1.28284159e-01 + 1.28534171e-01 1.28784372e-01 1.29034762e-01 1.29285340e-01 1.29536108e-01 + 1.29787064e-01 1.30038208e-01 1.30289540e-01 1.30541060e-01 1.30792768e-01 + 1.31044663e-01 1.31296746e-01 1.31549015e-01 1.31801471e-01 1.32054115e-01 + 1.32306944e-01 1.32559960e-01 1.32813162e-01 1.33066550e-01 1.33320123e-01 + 1.33573882e-01 1.33827826e-01 1.34081956e-01 1.34336270e-01 1.34590769e-01 + 1.34845452e-01 1.35100320e-01 1.35355372e-01 1.35610608e-01 1.35866027e-01 + 1.36121630e-01 1.36377417e-01 1.36633386e-01 1.36889538e-01 1.37145873e-01 + 1.37402391e-01 1.37659091e-01 1.37915973e-01 1.38173037e-01 1.38430283e-01 + 1.38687710e-01 1.38945318e-01 1.39203108e-01 1.39461079e-01 1.39719230e-01 + 1.39977562e-01 1.40236074e-01 1.40494766e-01 1.40753639e-01 1.41012691e-01 + 1.41271922e-01 1.41531333e-01 1.41790923e-01 1.42050692e-01 1.42310640e-01 + 1.42570766e-01 1.42831071e-01 1.43091554e-01 1.43352214e-01 1.43613053e-01 + 1.43874069e-01 1.44135262e-01 1.44396633e-01 1.44658180e-01 1.44919904e-01 + 1.45181805e-01 1.45443882e-01 1.45706135e-01 1.45968565e-01 1.46231170e-01 + 1.46493950e-01 1.46756906e-01 1.47020037e-01 1.47283343e-01 1.47546824e-01 + 1.47810479e-01 1.48074308e-01 1.48338312e-01 1.48602490e-01 1.48866841e-01 + 1.49131366e-01 1.49396065e-01 1.49660936e-01 1.49925981e-01 1.50191198e-01 + 1.50456588e-01 1.50722150e-01 1.50987884e-01 1.51253790e-01 1.51519868e-01 + 1.51786118e-01 1.52052539e-01 1.52319131e-01 1.52585894e-01 1.52852827e-01 + 1.53119932e-01 1.53387206e-01 1.53654651e-01 1.53922266e-01 1.54190050e-01 + 1.54458004e-01 1.54726127e-01 1.54994420e-01 1.55262881e-01 1.55531511e-01 + 1.55800310e-01 1.56069277e-01 1.56338412e-01 1.56607715e-01 1.56877186e-01 + 1.57146824e-01 1.57416630e-01 1.57686603e-01 1.57956743e-01 1.58227049e-01 + 1.58497522e-01 1.58768161e-01 1.59038967e-01 1.59309938e-01 1.59581075e-01 + 1.59852378e-01 1.60123846e-01 1.60395479e-01 1.60667277e-01 1.60939240e-01 + 1.61211367e-01 1.61483659e-01 1.61756114e-01 1.62028734e-01 1.62301517e-01 + 1.62574464e-01 1.62847574e-01 1.63120847e-01 1.63394283e-01 1.63667882e-01 + 1.63941644e-01 1.64215567e-01 1.64489653e-01 1.64763901e-01 1.65038310e-01 + 1.65312881e-01 1.65587613e-01 1.65862506e-01 1.66137560e-01 1.66412775e-01 + 1.66688150e-01 1.66963686e-01 1.67239381e-01 1.67515237e-01 1.67791252e-01 + 1.68067427e-01 1.68343761e-01 1.68620254e-01 1.68896906e-01 1.69173717e-01 + 1.69450686e-01 1.69727813e-01 1.70005098e-01 1.70282542e-01 1.70560143e-01 + 1.70837901e-01 1.71115817e-01 1.71393889e-01 1.71672119e-01 1.71950505e-01 + 1.72229048e-01 1.72507747e-01 1.72786602e-01 1.73065613e-01 1.73344779e-01 + 1.73624101e-01 1.73903579e-01 1.74183211e-01 1.74462998e-01 1.74742940e-01 + 1.75023036e-01 1.75303286e-01 1.75583691e-01 1.75864249e-01 1.76144961e-01 + 1.76425826e-01 1.76706845e-01 1.76988017e-01 1.77269341e-01 1.77550818e-01 + 1.77832448e-01 1.78114229e-01 1.78396163e-01 1.78678248e-01 1.78960486e-01 + 1.79242874e-01 1.79525414e-01 1.79808105e-01 1.80090946e-01 1.80373938e-01 + 1.80657081e-01 1.80940374e-01 1.81223816e-01 1.81507409e-01 1.81791151e-01 + 1.82075043e-01 1.82359084e-01 1.82643273e-01 1.82927612e-01 1.83212099e-01 + 1.83496734e-01 1.83781518e-01 1.84066450e-01 1.84351529e-01 1.84636756e-01 + 1.84922131e-01 1.85207652e-01 1.85493321e-01 1.85779136e-01 1.86065098e-01 + 1.86351206e-01 1.86637461e-01 1.86923861e-01 1.87210407e-01 1.87497099e-01 + 1.87783936e-01 1.88070919e-01 1.88358046e-01 1.88645318e-01 1.88932734e-01 + 1.89220295e-01 1.89508000e-01 1.89795849e-01 1.90083842e-01 1.90371978e-01 + 1.90660258e-01 1.90948681e-01 1.91237246e-01 1.91525955e-01 1.91814806e-01 + 1.92103799e-01 1.92392935e-01 1.92682212e-01 1.92971631e-01 1.93261192e-01 + 1.93550894e-01 1.93840737e-01 1.94130721e-01 1.94420846e-01 1.94711111e-01 + 1.95001517e-01 1.95292063e-01 1.95582748e-01 1.95873574e-01 1.96164539e-01 + 1.96455643e-01 1.96746886e-01 1.97038269e-01 1.97329790e-01 1.97621449e-01 + 1.97913247e-01 1.98205183e-01 1.98497257e-01 1.98789469e-01 1.99081818e-01 + 1.99374304e-01 1.99666928e-01 1.99959688e-01 2.00252585e-01 2.00545619e-01 + 2.00838789e-01 2.01132095e-01 2.01425537e-01 2.01719114e-01 2.02012828e-01 + 2.02306676e-01 2.02600660e-01 2.02894778e-01 2.03189031e-01 2.03483419e-01 + 2.03777941e-01 2.04072597e-01 2.04367387e-01 2.04662311e-01 2.04957368e-01 + 2.05252558e-01 2.05547882e-01 2.05843338e-01 2.06138928e-01 2.06434649e-01 + 2.06730503e-01 2.07026489e-01 2.07322607e-01 2.07618857e-01 2.07915238e-01 + 2.08211750e-01 2.08508394e-01 2.08805168e-01 2.09102073e-01 2.09399109e-01 + 2.09696275e-01 2.09993571e-01 2.10290997e-01 2.10588552e-01 2.10886237e-01 + 2.11184052e-01 2.11481995e-01 2.11780068e-01 2.12078269e-01 2.12376598e-01 + 2.12675056e-01 2.12973642e-01 2.13272356e-01 2.13571197e-01 2.13870166e-01 + 2.14169263e-01 2.14468486e-01 2.14767837e-01 2.15067314e-01 2.15366917e-01 + 2.15666647e-01 2.15966503e-01 2.16266485e-01 2.16566592e-01 2.16866825e-01 + 2.17167184e-01 2.17467667e-01 2.17768276e-01 2.18069009e-01 2.18369866e-01 + 2.18670848e-01 2.18971954e-01 2.19273184e-01 2.19574538e-01 2.19876015e-01 + 2.20177615e-01 2.20479339e-01 2.20781185e-01 2.21083155e-01 2.21385246e-01 + 2.21687460e-01 2.21989797e-01 2.22292255e-01 2.22594835e-01 2.22897536e-01 + 2.23200359e-01 2.23503303e-01 2.23806367e-01 2.24109553e-01 2.24412859e-01 + 2.24716285e-01 2.25019832e-01 2.25323498e-01 2.25627285e-01 2.25931191e-01 + 2.26235216e-01 2.26539360e-01 2.26843623e-01 2.27148005e-01 2.27452506e-01 + 2.27757125e-01 2.28061862e-01 2.28366717e-01 2.28671690e-01 2.28976780e-01 + 2.29281988e-01 2.29587313e-01 2.29892755e-01 2.30198313e-01 2.30503989e-01 + 2.30809780e-01 2.31115688e-01 2.31421712e-01 2.31727852e-01 2.32034107e-01 + 2.32340478e-01 2.32646964e-01 2.32953565e-01 2.33260280e-01 2.33567111e-01 + 2.33874055e-01 2.34181114e-01 2.34488287e-01 2.34795574e-01 2.35102975e-01 + 2.35410489e-01 2.35718116e-01 2.36025856e-01 2.36333709e-01 2.36641675e-01 + 2.36949753e-01 2.37257943e-01 2.37566246e-01 2.37874660e-01 2.38183186e-01 + 2.38491824e-01 2.38800572e-01 2.39109432e-01 2.39418403e-01 2.39727484e-01 + 2.40036676e-01 2.40345978e-01 2.40655391e-01 2.40964913e-01 2.41274545e-01 + 2.41584286e-01 2.41894137e-01 2.42204097e-01 2.42514166e-01 2.42824344e-01 + 2.43134630e-01 2.43445024e-01 2.43755527e-01 2.44066138e-01 2.44376856e-01 + 2.44687682e-01 2.44998615e-01 2.45309656e-01 2.45620803e-01 2.45932058e-01 + 2.46243419e-01 2.46554886e-01 2.46866459e-01 2.47178139e-01 2.47489924e-01 + 2.47801815e-01 2.48113812e-01 2.48425913e-01 2.48738120e-01 2.49050431e-01 + 2.49362848e-01 2.49675368e-01 2.49987993e-01 2.50300722e-01 2.50613555e-01 + 2.50926492e-01 2.51239532e-01 2.51552675e-01 2.51865922e-01 2.52179271e-01 + 2.52492723e-01 2.52806278e-01 2.53119935e-01 2.53433694e-01 2.53747555e-01 + 2.54061518e-01 2.54375582e-01 2.54689748e-01 2.55004015e-01 2.55318383e-01 + 2.55632851e-01 2.55947421e-01 2.56262090e-01 2.56576860e-01 2.56891730e-01 + 2.57206700e-01 2.57521770e-01 2.57836938e-01 2.58152207e-01 2.58467574e-01 + 2.58783040e-01 2.59098605e-01 2.59414268e-01 2.59730029e-01 2.60045889e-01 + 2.60361847e-01 2.60677902e-01 2.60994055e-01 2.61310305e-01 2.61626652e-01 + 2.61943096e-01 2.62259637e-01 2.62576275e-01 2.62893009e-01 2.63209839e-01 + 2.63526765e-01 2.63843787e-01 2.64160905e-01 2.64478118e-01 2.64795426e-01 + 2.65112830e-01 2.65430328e-01 2.65747921e-01 2.66065608e-01 2.66383390e-01 + 2.66701265e-01 2.67019235e-01 2.67337298e-01 2.67655455e-01 2.67973706e-01 + 2.68292049e-01 2.68610485e-01 2.68929014e-01 2.69247636e-01 2.69566350e-01 + 2.69885156e-01 2.70204055e-01 2.70523045e-01 2.70842127e-01 2.71161300e-01 + 2.71480564e-01 2.71799920e-01 2.72119366e-01 2.72438903e-01 2.72758531e-01 + 2.73078249e-01 2.73398057e-01 2.73717955e-01 2.74037942e-01 2.74358019e-01 + 2.74678186e-01 2.74998442e-01 2.75318787e-01 2.75639220e-01 2.75959743e-01 + 2.76280353e-01 2.76601052e-01 2.76921839e-01 2.77242714e-01 2.77563676e-01 + 2.77884726e-01 2.78205864e-01 2.78527088e-01 2.78848399e-01 2.79169798e-01 + 2.79491282e-01 2.79812853e-01 2.80134510e-01 2.80456254e-01 2.80778083e-01 + 2.81099997e-01 2.81421997e-01 2.81744083e-01 2.82066253e-01 2.82388508e-01 + 2.82710848e-01 2.83033273e-01 2.83355782e-01 2.83678374e-01 2.84001051e-01 + 2.84323812e-01 2.84646656e-01 2.84969584e-01 2.85292594e-01 2.85615688e-01 + 2.85938865e-01 2.86262124e-01 2.86585466e-01 2.86908890e-01 2.87232396e-01 + 2.87555984e-01 2.87879654e-01 2.88203405e-01 2.88527238e-01 2.88851152e-01 + 2.89175147e-01 2.89499222e-01 2.89823378e-01 2.90147615e-01 2.90471932e-01 + 2.90796329e-01 2.91120806e-01 2.91445362e-01 2.91769999e-01 2.92094714e-01 + 2.92419508e-01 2.92744382e-01 2.93069334e-01 2.93394365e-01 2.93719474e-01 + 2.94044662e-01 2.94369927e-01 2.94695271e-01 2.95020692e-01 2.95346191e-01 + 2.95671767e-01 2.95997420e-01 2.96323150e-01 2.96648956e-01 2.96974840e-01 + 2.97300799e-01 2.97626835e-01 2.97952947e-01 2.98279135e-01 2.98605399e-01 + 2.98931738e-01 2.99258152e-01 2.99584642e-01 2.99911206e-01 3.00237845e-01 + 3.00564559e-01 3.00891347e-01 3.01218209e-01 3.01545146e-01 3.01872156e-01 + 3.02199240e-01 3.02526398e-01 3.02853628e-01 3.03180932e-01 3.03508309e-01 + 3.03835759e-01 3.04163281e-01 3.04490876e-01 3.04818543e-01 3.05146281e-01 + 3.05474092e-01 3.05801975e-01 3.06129929e-01 3.06457954e-01 3.06786051e-01 + 3.07114218e-01 3.07442456e-01 3.07770765e-01 3.08099145e-01 3.08427594e-01 + 3.08756114e-01 3.09084703e-01 3.09413363e-01 3.09742091e-01 3.10070890e-01 + 3.10399757e-01 3.10728693e-01 3.11057699e-01 3.11386772e-01 3.11715915e-01 + 3.12045125e-01 3.12374404e-01 3.12703751e-01 3.13033165e-01 3.13362647e-01 + 3.13692197e-01 3.14021813e-01 3.14351497e-01 3.14681248e-01 3.15011065e-01 + 3.15340949e-01 3.15670899e-01 3.16000915e-01 3.16330997e-01 3.16661145e-01 + 3.16991359e-01 3.17321638e-01 3.17651983e-01 3.17982392e-01 3.18312867e-01 + 3.18643406e-01 3.18974010e-01 3.19304678e-01 3.19635411e-01 3.19966207e-01 + 3.20297067e-01 3.20627992e-01 3.20958979e-01 3.21290030e-01 3.21621144e-01 + 3.21952321e-01 3.22283561e-01 3.22614864e-01 3.22946229e-01 3.23277656e-01 + 3.23609146e-01 3.23940697e-01 3.24272310e-01 3.24603985e-01 3.24935721e-01 + 3.25267519e-01 3.25599377e-01 3.25931297e-01 3.26263277e-01 3.26595317e-01 + 3.26927419e-01 3.27259580e-01 3.27591801e-01 3.27924082e-01 3.28256423e-01 + 3.28588824e-01 3.28921283e-01 3.29253802e-01 3.29586380e-01 3.29919017e-01 + 3.30251712e-01 3.30584466e-01 3.30917278e-01 3.31250149e-01 3.31583077e-01 + 3.31916063e-01 3.32249107e-01 3.32582208e-01 3.32915366e-01 3.33248582e-01 + 3.33581854e-01 3.33915183e-01 3.34248569e-01 3.34582011e-01 3.34915510e-01 + 3.35249064e-01 3.35582675e-01 3.35916341e-01 3.36250062e-01 3.36583839e-01 + 3.36917672e-01 3.37251559e-01 3.37585501e-01 3.37919498e-01 3.38253550e-01 + 3.38587656e-01 3.38921816e-01 3.39256030e-01 3.39590298e-01 3.39924620e-01 + 3.40258995e-01 3.40593423e-01 3.40927905e-01 3.41262440e-01 3.41597027e-01 + 3.41931667e-01 3.42266360e-01 3.42601105e-01 3.42935903e-01 3.43270752e-01 + 3.43605653e-01 3.43940606e-01 3.44275610e-01 3.44610666e-01 3.44945772e-01 + 3.45280930e-01 3.45616139e-01 3.45951398e-01 3.46286708e-01 3.46622068e-01 + 3.46957478e-01 3.47292938e-01 3.47628448e-01 3.47964008e-01 3.48299617e-01 + 3.48635275e-01 3.48970983e-01 3.49306740e-01 3.49642545e-01 3.49978399e-01 + 3.50314302e-01 3.50650253e-01 3.50986252e-01 3.51322299e-01 3.51658394e-01 + 3.51994536e-01 3.52330726e-01 3.52666964e-01 3.53003248e-01 3.53339580e-01 + 3.53675958e-01 3.54012383e-01 3.54348855e-01 3.54685373e-01 3.55021937e-01 + 3.55358547e-01 3.55695203e-01 3.56031904e-01 3.56368651e-01 3.56705444e-01 + 3.57042281e-01 3.57379164e-01 3.57716092e-01 3.58053064e-01 3.58390081e-01 + 3.58727142e-01 3.59064247e-01 3.59401397e-01 3.59738590e-01 3.60075827e-01 + 3.60413107e-01 3.60750431e-01 3.61087799e-01 3.61425209e-01 3.61762662e-01 + 3.62100158e-01 3.62437696e-01 3.62775277e-01 3.63112900e-01 3.63450566e-01 + 3.63788273e-01 3.64126022e-01 3.64463812e-01 3.64801645e-01 3.65139518e-01 + 3.65477432e-01 3.65815388e-01 3.66153384e-01 3.66491421e-01 3.66829498e-01 + 3.67167616e-01 3.67505774e-01 3.67843971e-01 3.68182209e-01 3.68520487e-01 + 3.68858803e-01 3.69197160e-01 3.69535555e-01 3.69873990e-01 3.70212463e-01 + 3.70550975e-01 3.70889526e-01 3.71228115e-01 3.71566742e-01 3.71905408e-01 + 3.72244111e-01 3.72582852e-01 3.72921631e-01 3.73260447e-01 3.73599300e-01 + 3.73938191e-01 3.74277119e-01 3.74616083e-01 3.74955084e-01 3.75294122e-01 + 3.75633196e-01 3.75972306e-01 3.76311452e-01 3.76650634e-01 3.76989852e-01 + 3.77329105e-01 3.77668394e-01 3.78007718e-01 3.78347077e-01 3.78686471e-01 + 3.79025899e-01 3.79365363e-01 3.79704861e-01 3.80044393e-01 3.80383959e-01 + 3.80723559e-01 3.81063194e-01 3.81402861e-01 3.81742563e-01 3.82082298e-01 + 3.82422065e-01 3.82761866e-01 3.83101700e-01 3.83441567e-01 3.83781466e-01 + 3.84121398e-01 3.84461362e-01 3.84801358e-01 3.85141386e-01 3.85481446e-01 + 3.85821538e-01 3.86161661e-01 3.86501816e-01 3.86842001e-01 3.87182218e-01 + 3.87522466e-01 3.87862744e-01 3.88203053e-01 3.88543393e-01 3.88883763e-01 + 3.89224162e-01 3.89564592e-01 3.89905052e-01 3.90245541e-01 3.90586060e-01 + 3.90926609e-01 3.91267186e-01 3.91607793e-01 3.91948428e-01 3.92289093e-01 + 3.92629785e-01 3.92970507e-01 3.93311256e-01 3.93652034e-01 3.93992840e-01 + 3.94333674e-01 3.94674535e-01 3.95015424e-01 3.95356341e-01 3.95697284e-01 + 3.96038255e-01 3.96379253e-01 3.96720277e-01 3.97061328e-01 3.97402406e-01 + 3.97743510e-01 3.98084640e-01 3.98425796e-01 3.98766978e-01 3.99108186e-01 + 3.99449420e-01 3.99790679e-01 4.00131963e-01 4.00473272e-01 4.00814607e-01 + 4.01155966e-01 4.01497350e-01 4.01838759e-01 4.02180192e-01 4.02521649e-01 + 4.02863130e-01 4.03204636e-01 4.03546165e-01 4.03887718e-01 4.04229294e-01 + 4.04570894e-01 4.04912517e-01 4.05254163e-01 4.05595832e-01 4.05937524e-01 + 4.06279238e-01 4.06620975e-01 4.06962734e-01 4.07304516e-01 4.07646319e-01 + 4.07988145e-01 4.08329992e-01 4.08671861e-01 4.09013751e-01 4.09355663e-01 + 4.09697596e-01 4.10039549e-01 4.10381524e-01 4.10723520e-01 4.11065536e-01 + 4.11407572e-01 4.11749629e-01 4.12091706e-01 4.12433803e-01 4.12775920e-01 + 4.13118057e-01 4.13460213e-01 4.13802389e-01 4.14144583e-01 4.14486798e-01 + 4.14829031e-01 4.15171283e-01 4.15513553e-01 4.15855843e-01 4.16198150e-01 + 4.16540476e-01 4.16882821e-01 4.17225183e-01 4.17567563e-01 4.17909961e-01 + 4.18252376e-01 4.18594809e-01 4.18937259e-01 4.19279726e-01 4.19622210e-01 + 4.19964711e-01 4.20307229e-01 4.20649763e-01 4.20992314e-01 4.21334881e-01 + 4.21677465e-01 4.22020064e-01 4.22362679e-01 4.22705310e-01 4.23047957e-01 + 4.23390619e-01 4.23733296e-01 4.24075988e-01 4.24418696e-01 4.24761418e-01 + 4.25104155e-01 4.25446907e-01 4.25789673e-01 4.26132454e-01 4.26475249e-01 + 4.26818057e-01 4.27160880e-01 4.27503717e-01 4.27846567e-01 4.28189430e-01 + 4.28532307e-01 4.28875197e-01 4.29218101e-01 4.29561017e-01 4.29903946e-01 + 4.30246888e-01 4.30589842e-01 4.30932808e-01 4.31275787e-01 4.31618778e-01 + 4.31961781e-01 4.32304796e-01 4.32647822e-01 4.32990860e-01 4.33333909e-01 + 4.33676970e-01 4.34020042e-01 4.34363125e-01 4.34706219e-01 4.35049323e-01 + 4.35392438e-01 4.35735564e-01 4.36078700e-01 4.36421846e-01 4.36765002e-01 + 4.37108168e-01 4.37451344e-01 4.37794529e-01 4.38137724e-01 4.38480929e-01 + 4.38824142e-01 4.39167365e-01 4.39510597e-01 4.39853837e-01 4.40197087e-01 + 4.40540345e-01 4.40883611e-01 4.41226885e-01 4.41570168e-01 4.41913459e-01 + 4.42256758e-01 4.42600064e-01 4.42943378e-01 4.43286700e-01 4.43630029e-01 + 4.43973365e-01 4.44316708e-01 4.44660058e-01 4.45003416e-01 4.45346779e-01 + 4.45690150e-01 4.46033526e-01 4.46376910e-01 4.46720299e-01 4.47063694e-01 + 4.47407095e-01 4.47750502e-01 4.48093915e-01 4.48437333e-01 4.48780757e-01 + 4.49124185e-01 4.49467619e-01 4.49811058e-01 4.50154502e-01 4.50497950e-01 + 4.50841403e-01 4.51184861e-01 4.51528322e-01 4.51871788e-01 4.52215259e-01 + 4.52558733e-01 4.52902210e-01 4.53245692e-01 4.53589177e-01 4.53932665e-01 + 4.54276157e-01 4.54619652e-01 4.54963150e-01 4.55306651e-01 4.55650154e-01 + 2.08130000e-04 2.08281191e-04 2.08734762e-04 2.09490714e-04 2.10549046e-04 + 2.11909757e-04 2.13572846e-04 2.15538310e-04 2.17806148e-04 2.20376358e-04 + 2.23248936e-04 2.26423882e-04 2.29901190e-04 2.33680858e-04 2.37762883e-04 + 2.42147260e-04 2.46833984e-04 2.51823051e-04 2.57114457e-04 2.62708196e-04 + 2.68604263e-04 2.74802652e-04 2.81303356e-04 2.88106370e-04 2.95211687e-04 + 3.02619299e-04 3.10329200e-04 3.18341382e-04 3.26655837e-04 3.35272557e-04 + 3.44191533e-04 3.53412758e-04 3.62936221e-04 3.72761913e-04 3.82889825e-04 + 3.93319947e-04 4.04052269e-04 4.15086779e-04 4.26423468e-04 4.38062324e-04 + 4.50003336e-04 4.62246492e-04 4.74791780e-04 4.87639188e-04 5.00788703e-04 + 5.14240312e-04 5.27994002e-04 5.42049760e-04 5.56407572e-04 5.71067423e-04 + 5.86029300e-04 6.01293187e-04 6.16859071e-04 6.32726934e-04 6.48896763e-04 + 6.65368541e-04 6.82142252e-04 6.99217880e-04 7.16595407e-04 7.34274817e-04 + 7.52256092e-04 7.70539216e-04 7.89124169e-04 8.08010934e-04 8.27199493e-04 + 8.46689825e-04 8.66481913e-04 8.86575737e-04 9.06971278e-04 9.27668514e-04 + 9.48667427e-04 9.69967995e-04 9.91570198e-04 1.01347401e-03 1.03567942e-03 + 1.05818640e-03 1.08099493e-03 1.10410498e-03 1.12751654e-03 1.15122957e-03 + 1.17524406e-03 1.19955999e-03 1.22417733e-03 1.24909605e-03 1.27431613e-03 + 1.29983755e-03 1.32566029e-03 1.35178430e-03 1.37820958e-03 1.40493610e-03 + 1.43196382e-03 1.45929272e-03 1.48692278e-03 1.51485397e-03 1.54308626e-03 + 1.57161963e-03 1.60045404e-03 1.62958946e-03 1.65902588e-03 1.68876325e-03 + 1.71880156e-03 1.74914077e-03 1.77978085e-03 1.81072177e-03 1.84196351e-03 + 1.87350602e-03 1.90534929e-03 1.93749327e-03 1.96993795e-03 2.00268328e-03 + 2.03572923e-03 2.06907577e-03 2.10272288e-03 2.13667051e-03 2.17091863e-03 + 2.20546721e-03 2.24031622e-03 2.27546562e-03 2.31091538e-03 2.34666546e-03 + 2.38271583e-03 2.41906645e-03 2.45571729e-03 2.49266831e-03 2.52991947e-03 + 2.56747075e-03 2.60532209e-03 2.64347347e-03 2.68192485e-03 2.72067619e-03 + 2.75972745e-03 2.79907859e-03 2.83872959e-03 2.87868038e-03 2.91893095e-03 + 2.95948125e-03 3.00033123e-03 3.04148087e-03 3.08293011e-03 3.12467892e-03 + 3.16672726e-03 3.20907509e-03 3.25172236e-03 3.29466904e-03 3.33791508e-03 + 3.38146044e-03 3.42530507e-03 3.46944894e-03 3.51389201e-03 3.55863422e-03 + 3.60367554e-03 3.64901591e-03 3.69465531e-03 3.74059367e-03 3.78683096e-03 + 3.83336714e-03 3.88020215e-03 3.92733595e-03 3.97476850e-03 4.02249975e-03 + 4.07052965e-03 4.11885815e-03 4.16748522e-03 4.21641079e-03 4.26563483e-03 + 4.31515728e-03 4.36497811e-03 4.41509725e-03 4.46551466e-03 4.51623029e-03 + 4.56724409e-03 4.61855601e-03 4.67016601e-03 4.72207403e-03 4.77428002e-03 + 4.82678393e-03 4.87958570e-03 4.93268530e-03 4.98608266e-03 5.03977774e-03 + 5.09377048e-03 5.14806083e-03 5.20264873e-03 5.25753414e-03 5.31271700e-03 + 5.36819725e-03 5.42397485e-03 5.48004973e-03 5.53642185e-03 5.59309115e-03 + 5.65005757e-03 5.70732106e-03 5.76488157e-03 5.82273903e-03 5.88089339e-03 + 5.93934459e-03 5.99809258e-03 6.05713731e-03 6.11647870e-03 6.17611671e-03 + 6.23605128e-03 6.29628235e-03 6.35680986e-03 6.41763375e-03 6.47875396e-03 + 6.54017044e-03 6.60188312e-03 6.66389194e-03 6.72619685e-03 6.78879778e-03 + 6.85169468e-03 6.91488748e-03 6.97837611e-03 7.04216053e-03 7.10624066e-03 + 7.17061645e-03 7.23528783e-03 7.30025474e-03 7.36551712e-03 7.43107490e-03 + 7.49692802e-03 7.56307641e-03 7.62952002e-03 7.69625878e-03 7.76329262e-03 + 7.83062147e-03 7.89824528e-03 7.96616398e-03 8.03437750e-03 8.10288577e-03 + 8.17168874e-03 8.24078632e-03 8.31017847e-03 8.37986510e-03 8.44984615e-03 + 8.52012155e-03 8.59069124e-03 8.66155515e-03 8.73271321e-03 8.80416535e-03 + 8.87591149e-03 8.94795158e-03 9.02028554e-03 9.09291331e-03 9.16583480e-03 + 9.23904995e-03 9.31255870e-03 9.38636096e-03 9.46045668e-03 9.53484577e-03 + 9.60952816e-03 9.68450379e-03 9.75977258e-03 9.83533445e-03 9.91118934e-03 + 9.98733717e-03 1.00637779e-02 1.01405114e-02 1.02175376e-02 1.02948564e-02 + 1.03724679e-02 1.04503718e-02 1.05285681e-02 1.06070568e-02 1.06858378e-02 + 1.07649109e-02 1.08442762e-02 1.09239335e-02 1.10038828e-02 1.10841240e-02 + 1.11646570e-02 1.12454817e-02 1.13265980e-02 1.14080060e-02 1.14897054e-02 + 1.15716963e-02 1.16539785e-02 1.17365519e-02 1.18194166e-02 1.19025723e-02 + 1.19860191e-02 1.20697568e-02 1.21537854e-02 1.22381047e-02 1.23227148e-02 + 1.24076155e-02 1.24928067e-02 1.25782883e-02 1.26640604e-02 1.27501227e-02 + 1.28364752e-02 1.29231179e-02 1.30100506e-02 1.30972732e-02 1.31847858e-02 + 1.32725881e-02 1.33606801e-02 1.34490618e-02 1.35377329e-02 1.36266936e-02 + 1.37159436e-02 1.38054829e-02 1.38953113e-02 1.39854289e-02 1.40758355e-02 + 1.41665311e-02 1.42575155e-02 1.43487886e-02 1.44403504e-02 1.45322008e-02 + 1.46243398e-02 1.47167671e-02 1.48094827e-02 1.49024866e-02 1.49957786e-02 + 1.50893587e-02 1.51832267e-02 1.52773826e-02 1.53718263e-02 1.54665577e-02 + 1.55615767e-02 1.56568832e-02 1.57524771e-02 1.58483584e-02 1.59445269e-02 + 1.60409825e-02 1.61377252e-02 1.62347549e-02 1.63320714e-02 1.64296747e-02 + 1.65275647e-02 1.66257413e-02 1.67242043e-02 1.68229538e-02 1.69219896e-02 + 1.70213116e-02 1.71209197e-02 1.72208138e-02 1.73209939e-02 1.74214598e-02 + 1.75222114e-02 1.76232487e-02 1.77245715e-02 1.78261798e-02 1.79280734e-02 + 1.80302523e-02 1.81327163e-02 1.82354654e-02 1.83384994e-02 1.84418184e-02 + 1.85454220e-02 1.86493104e-02 1.87534833e-02 1.88579407e-02 1.89626824e-02 + 1.90677084e-02 1.91730186e-02 1.92786129e-02 1.93844911e-02 1.94906532e-02 + 1.95970991e-02 1.97038286e-02 1.98108417e-02 1.99181382e-02 2.00257182e-02 + 2.01335813e-02 2.02417277e-02 2.03501571e-02 2.04588694e-02 2.05678646e-02 + 2.06771425e-02 2.07867031e-02 2.08965462e-02 2.10066717e-02 2.11170796e-02 + 2.12277697e-02 2.13387419e-02 2.14499962e-02 2.15615323e-02 2.16733503e-02 + 2.17854499e-02 2.18978311e-02 2.20104938e-02 2.21234379e-02 2.22366633e-02 + 2.23501698e-02 2.24639574e-02 2.25780260e-02 2.26923753e-02 2.28070055e-02 + 2.29219162e-02 2.30371074e-02 2.31525791e-02 2.32683311e-02 2.33843632e-02 + 2.35006755e-02 2.36172677e-02 2.37341397e-02 2.38512915e-02 2.39687230e-02 + 2.40864339e-02 2.42044243e-02 2.43226940e-02 2.44412429e-02 2.45600709e-02 + 2.46791779e-02 2.47985637e-02 2.49182282e-02 2.50381714e-02 2.51583931e-02 + 2.52788932e-02 2.53996717e-02 2.55207283e-02 2.56420629e-02 2.57636755e-02 + 2.58855660e-02 2.60077341e-02 2.61301799e-02 2.62529032e-02 2.63759039e-02 + 2.64991818e-02 2.66227368e-02 2.67465689e-02 2.68706779e-02 2.69950637e-02 + 2.71197262e-02 2.72446653e-02 2.73698808e-02 2.74953726e-02 2.76211406e-02 + 2.77471848e-02 2.78735049e-02 2.80001009e-02 2.81269726e-02 2.82541199e-02 + 2.83815427e-02 2.85092409e-02 2.86372144e-02 2.87654630e-02 2.88939867e-02 + 2.90227852e-02 2.91518585e-02 2.92812065e-02 2.94108290e-02 2.95407260e-02 + 2.96708972e-02 2.98013426e-02 2.99320621e-02 3.00630555e-02 3.01943227e-02 + 3.03258636e-02 3.04576781e-02 3.05897660e-02 3.07221272e-02 3.08547616e-02 + 3.09876691e-02 3.11208496e-02 3.12543028e-02 3.13880288e-02 3.15220273e-02 + 3.16562983e-02 3.17908416e-02 3.19256571e-02 3.20607447e-02 3.21961042e-02 + 3.23317356e-02 3.24676386e-02 3.26038132e-02 3.27402593e-02 3.28769766e-02 + 3.30139652e-02 3.31512248e-02 3.32887554e-02 3.34265567e-02 3.35646288e-02 + 3.37029714e-02 3.38415844e-02 3.39804677e-02 3.41196212e-02 3.42590447e-02 + 3.43987381e-02 3.45387013e-02 3.46789341e-02 3.48194365e-02 3.49602082e-02 + 3.51012492e-02 3.52425593e-02 3.53841384e-02 3.55259864e-02 3.56681031e-02 + 3.58104884e-02 3.59531422e-02 3.60960643e-02 3.62392547e-02 3.63827131e-02 + 3.65264394e-02 3.66704335e-02 3.68146954e-02 3.69592247e-02 3.71040215e-02 + 3.72490856e-02 3.73944167e-02 3.75400149e-02 3.76858800e-02 3.78320118e-02 + 3.79784102e-02 3.81250751e-02 3.82720063e-02 3.84192037e-02 3.85666672e-02 + 3.87143966e-02 3.88623918e-02 3.90106526e-02 3.91591790e-02 3.93079707e-02 + 3.94570277e-02 3.96063498e-02 3.97559369e-02 3.99057888e-02 4.00559054e-02 + 4.02062865e-02 4.03569321e-02 4.05078419e-02 4.06590159e-02 4.08104539e-02 + 4.09621558e-02 4.11141214e-02 4.12663506e-02 4.14188432e-02 4.15715991e-02 + 4.17246182e-02 4.18779004e-02 4.20314454e-02 4.21852532e-02 4.23393235e-02 + 4.24936564e-02 4.26482515e-02 4.28031089e-02 4.29582283e-02 4.31136096e-02 + 4.32692526e-02 4.34251573e-02 4.35813234e-02 4.37377508e-02 4.38944395e-02 + 4.40513892e-02 4.42085998e-02 4.43660711e-02 4.45238031e-02 4.46817956e-02 + 4.48400483e-02 4.49985613e-02 4.51573343e-02 4.53163671e-02 4.54756598e-02 + 4.56352120e-02 4.57950237e-02 4.59550947e-02 4.61154249e-02 4.62760141e-02 + 4.64368622e-02 4.65979690e-02 4.67593344e-02 4.69209582e-02 4.70828403e-02 + 4.72449806e-02 4.74073789e-02 4.75700350e-02 4.77329488e-02 4.78961202e-02 + 4.80595489e-02 4.82232350e-02 4.83871781e-02 4.85513782e-02 4.87158351e-02 + 4.88805487e-02 4.90455188e-02 4.92107453e-02 4.93762280e-02 4.95419667e-02 + 4.97079614e-02 4.98742118e-02 5.00407179e-02 5.02074794e-02 5.03744963e-02 + 5.05417683e-02 5.07092953e-02 5.08770772e-02 5.10451138e-02 5.12134049e-02 + 5.13819505e-02 5.15507503e-02 5.17198043e-02 5.18891121e-02 5.20586738e-02 + 5.22284892e-02 5.23985580e-02 5.25688802e-02 5.27394555e-02 5.29102839e-02 + 5.30813652e-02 5.32526992e-02 5.34242858e-02 5.35961248e-02 5.37682161e-02 + 5.39405595e-02 5.41131548e-02 5.42860020e-02 5.44591008e-02 5.46324511e-02 + 5.48060527e-02 5.49799055e-02 5.51540094e-02 5.53283641e-02 5.55029695e-02 + 5.56778255e-02 5.58529319e-02 5.60282885e-02 5.62038952e-02 5.63797519e-02 + 5.65558583e-02 5.67322144e-02 5.69088199e-02 5.70856747e-02 5.72627786e-02 + 5.74401316e-02 5.76177334e-02 5.77955838e-02 5.79736828e-02 5.81520301e-02 + 5.83306256e-02 5.85094691e-02 5.86885605e-02 5.88678997e-02 5.90474864e-02 + 5.92273205e-02 5.94074018e-02 5.95877302e-02 5.97683055e-02 5.99491276e-02 + 6.01301963e-02 6.03115114e-02 6.04930728e-02 6.06748803e-02 6.08569338e-02 + 6.10392330e-02 6.12217779e-02 6.14045683e-02 6.15876039e-02 6.17708848e-02 + 6.19544105e-02 6.21381812e-02 6.23221964e-02 6.25064562e-02 6.26909603e-02 + 6.28757085e-02 6.30607008e-02 6.32459369e-02 6.34314167e-02 6.36171400e-02 + 6.38031067e-02 6.39893165e-02 6.41757694e-02 6.43624651e-02 6.45494036e-02 + 6.47365845e-02 6.49240078e-02 6.51116734e-02 6.52995809e-02 6.54877303e-02 + 6.56761215e-02 6.58647541e-02 6.60536282e-02 6.62427434e-02 6.64320997e-02 + 6.66216969e-02 6.68115348e-02 6.70016132e-02 6.71919320e-02 6.73824910e-02 + 6.75732900e-02 6.77643289e-02 6.79556075e-02 6.81471257e-02 6.83388832e-02 + 6.85308799e-02 6.87231157e-02 6.89155904e-02 6.91083037e-02 6.93012556e-02 + 6.94944458e-02 6.96878742e-02 6.98815407e-02 7.00754450e-02 7.02695870e-02 + 7.04639665e-02 7.06585833e-02 7.08534374e-02 7.10485284e-02 7.12438563e-02 + 7.14394208e-02 7.16352219e-02 7.18312593e-02 7.20275328e-02 7.22240423e-02 + 7.24207876e-02 7.26177686e-02 7.28149851e-02 7.30124368e-02 7.32101237e-02 + 7.34080456e-02 7.36062022e-02 7.38045935e-02 7.40032192e-02 7.42020791e-02 + 7.44011732e-02 7.46005012e-02 7.48000630e-02 7.49998583e-02 7.51998870e-02 + 7.54001490e-02 7.56006441e-02 7.58013720e-02 7.60023326e-02 7.62035258e-02 + 7.64049514e-02 7.66066092e-02 7.68084989e-02 7.70106206e-02 7.72129739e-02 + 7.74155587e-02 7.76183748e-02 7.78214221e-02 7.80247003e-02 7.82282094e-02 + 7.84319490e-02 7.86359192e-02 7.88401196e-02 7.90445501e-02 7.92492105e-02 + 7.94541007e-02 7.96592204e-02 7.98645695e-02 8.00701479e-02 8.02759553e-02 + 8.04819916e-02 8.06882565e-02 8.08947500e-02 8.11014718e-02 8.13084218e-02 + 8.15155998e-02 8.17230055e-02 8.19306389e-02 8.21384998e-02 8.23465879e-02 + 8.25549031e-02 8.27634452e-02 8.29722141e-02 8.31812095e-02 8.33904313e-02 + 8.35998794e-02 8.38095534e-02 8.40194533e-02 8.42295789e-02 8.44399299e-02 + 8.46505063e-02 8.48613078e-02 8.50723343e-02 8.52835855e-02 8.54950613e-02 + 8.57067616e-02 8.59186860e-02 8.61308346e-02 8.63432070e-02 8.65558031e-02 + 8.67686227e-02 8.69816656e-02 8.71949318e-02 8.74084208e-02 8.76221327e-02 + 8.78360672e-02 8.80502241e-02 8.82646033e-02 8.84792045e-02 8.86940276e-02 + 8.89090725e-02 8.91243388e-02 8.93398265e-02 8.95555354e-02 8.97714652e-02 + 8.99876159e-02 9.02039871e-02 9.04205788e-02 9.06373908e-02 9.08544228e-02 + 9.10716747e-02 9.12891463e-02 9.15068374e-02 9.17247478e-02 9.19428774e-02 + 9.21612260e-02 9.23797934e-02 9.25985793e-02 9.28175837e-02 9.30368064e-02 + 9.32562470e-02 9.34759056e-02 9.36957818e-02 9.39158756e-02 9.41361866e-02 + 9.43567148e-02 9.45774599e-02 9.47984219e-02 9.50196003e-02 9.52409952e-02 + 9.54626063e-02 9.56844334e-02 9.59064764e-02 9.61287350e-02 9.63512090e-02 + 9.65738984e-02 9.67968029e-02 9.70199222e-02 9.72432563e-02 9.74668050e-02 + 9.76905680e-02 9.79145452e-02 9.81387363e-02 9.83631413e-02 9.85877598e-02 + 9.88125918e-02 9.90376370e-02 9.92628953e-02 9.94883665e-02 9.97140503e-02 + 9.99399466e-02 1.00166055e-01 1.00392376e-01 1.00618909e-01 1.00845653e-01 + 1.01072609e-01 1.01299776e-01 1.01527155e-01 1.01754744e-01 1.01982545e-01 + 1.02210556e-01 1.02438777e-01 1.02667209e-01 1.02895850e-01 1.03124702e-01 + 1.03353763e-01 1.03583034e-01 1.03812514e-01 1.04042203e-01 1.04272101e-01 + 1.04502207e-01 1.04732523e-01 1.04963046e-01 1.05193778e-01 1.05424718e-01 + 1.05655865e-01 1.05887221e-01 1.06118783e-01 1.06350553e-01 1.06582530e-01 + 1.06814713e-01 1.07047104e-01 1.07279701e-01 1.07512504e-01 1.07745513e-01 + 1.07978728e-01 1.08212148e-01 1.08445775e-01 1.08679606e-01 1.08913643e-01 + 1.09147884e-01 1.09382331e-01 1.09616982e-01 1.09851837e-01 1.10086896e-01 + 1.10322160e-01 1.10557627e-01 1.10793298e-01 1.11029172e-01 1.11265249e-01 + 1.11501530e-01 1.11738013e-01 1.11974699e-01 1.12211587e-01 1.12448678e-01 + 1.12685971e-01 1.12923465e-01 1.13161162e-01 1.13399059e-01 1.13637158e-01 + 1.13875458e-01 1.14113960e-01 1.14352661e-01 1.14591564e-01 1.14830666e-01 + 1.15069969e-01 1.15309472e-01 1.15549174e-01 1.15789076e-01 1.16029178e-01 + 1.16269478e-01 1.16509978e-01 1.16750676e-01 1.16991573e-01 1.17232669e-01 + 1.17473962e-01 1.17715454e-01 1.17957143e-01 1.18199030e-01 1.18441115e-01 + 1.18683397e-01 1.18925875e-01 1.19168551e-01 1.19411423e-01 1.19654492e-01 + 1.19897757e-01 1.20141218e-01 1.20384875e-01 1.20628728e-01 1.20872776e-01 + 1.21117020e-01 1.21361458e-01 1.21606092e-01 1.21850920e-01 1.22095943e-01 + 1.22341160e-01 1.22586571e-01 1.22832176e-01 1.23077975e-01 1.23323967e-01 + 1.23570153e-01 1.23816532e-01 1.24063104e-01 1.24309869e-01 1.24556826e-01 + 1.24803975e-01 1.25051317e-01 1.25298851e-01 1.25546576e-01 1.25794494e-01 + 1.26042602e-01 1.26290902e-01 1.26539393e-01 1.26788074e-01 1.27036946e-01 + 1.27286009e-01 1.27535261e-01 1.27784704e-01 1.28034337e-01 1.28284159e-01 + 1.28534171e-01 1.28784372e-01 1.29034762e-01 1.29285340e-01 1.29536108e-01 + 1.29787064e-01 1.30038208e-01 1.30289540e-01 1.30541060e-01 1.30792768e-01 + 1.31044663e-01 1.31296746e-01 1.31549015e-01 1.31801471e-01 1.32054115e-01 + 1.32306944e-01 1.32559960e-01 1.32813162e-01 1.33066550e-01 1.33320123e-01 + 1.33573882e-01 1.33827826e-01 1.34081956e-01 1.34336270e-01 1.34590769e-01 + 1.34845452e-01 1.35100320e-01 1.35355372e-01 1.35610608e-01 1.35866027e-01 + 1.36121630e-01 1.36377417e-01 1.36633386e-01 1.36889538e-01 1.37145873e-01 + 1.37402391e-01 1.37659091e-01 1.37915973e-01 1.38173037e-01 1.38430283e-01 + 1.38687710e-01 1.38945318e-01 1.39203108e-01 1.39461079e-01 1.39719230e-01 + 1.39977562e-01 1.40236074e-01 1.40494766e-01 1.40753639e-01 1.41012691e-01 + 1.41271922e-01 1.41531333e-01 1.41790923e-01 1.42050692e-01 1.42310640e-01 + 1.42570766e-01 1.42831071e-01 1.43091554e-01 1.43352214e-01 1.43613053e-01 + 1.43874069e-01 1.44135262e-01 1.44396633e-01 1.44658180e-01 1.44919904e-01 + 1.45181805e-01 1.45443882e-01 1.45706135e-01 1.45968565e-01 1.46231170e-01 + 1.46493950e-01 1.46756906e-01 1.47020037e-01 1.47283343e-01 1.47546824e-01 + 1.47810479e-01 1.48074308e-01 1.48338312e-01 1.48602490e-01 1.48866841e-01 + 1.49131366e-01 1.49396065e-01 1.49660936e-01 1.49925981e-01 1.50191198e-01 + 1.50456588e-01 1.50722150e-01 1.50987884e-01 1.51253790e-01 1.51519868e-01 + 1.51786118e-01 1.52052539e-01 1.52319131e-01 1.52585894e-01 1.52852827e-01 + 1.53119932e-01 1.53387206e-01 1.53654651e-01 1.53922266e-01 1.54190050e-01 + 1.54458004e-01 1.54726127e-01 1.54994420e-01 1.55262881e-01 1.55531511e-01 + 1.55800310e-01 1.56069277e-01 1.56338412e-01 1.56607715e-01 1.56877186e-01 + 1.57146824e-01 1.57416630e-01 1.57686603e-01 1.57956743e-01 1.58227049e-01 + 1.58497522e-01 1.58768161e-01 1.59038967e-01 1.59309938e-01 1.59581075e-01 + 1.59852378e-01 1.60123846e-01 1.60395479e-01 1.60667277e-01 1.60939240e-01 + 1.61211367e-01 1.61483659e-01 1.61756114e-01 1.62028734e-01 1.62301517e-01 + 1.62574464e-01 1.62847574e-01 1.63120847e-01 1.63394283e-01 1.63667882e-01 + 1.63941644e-01 1.64215567e-01 1.64489653e-01 1.64763901e-01 1.65038310e-01 + 1.65312881e-01 1.65587613e-01 1.65862506e-01 1.66137560e-01 1.66412775e-01 + 1.66688150e-01 1.66963686e-01 1.67239381e-01 1.67515237e-01 1.67791252e-01 + 1.68067427e-01 1.68343761e-01 1.68620254e-01 1.68896906e-01 1.69173717e-01 + 1.69450686e-01 1.69727813e-01 1.70005098e-01 1.70282542e-01 1.70560143e-01 + 1.70837901e-01 1.71115817e-01 1.71393889e-01 1.71672119e-01 1.71950505e-01 + 1.72229048e-01 1.72507747e-01 1.72786602e-01 1.73065613e-01 1.73344779e-01 + 1.73624101e-01 1.73903579e-01 1.74183211e-01 1.74462998e-01 1.74742940e-01 + 1.75023036e-01 1.75303286e-01 1.75583691e-01 1.75864249e-01 1.76144961e-01 + 1.76425826e-01 1.76706845e-01 1.76988017e-01 1.77269341e-01 1.77550818e-01 + 1.77832448e-01 1.78114229e-01 1.78396163e-01 1.78678248e-01 1.78960486e-01 + 1.79242874e-01 1.79525414e-01 1.79808105e-01 1.80090946e-01 1.80373938e-01 + 1.80657081e-01 1.80940374e-01 1.81223816e-01 1.81507409e-01 1.81791151e-01 + 1.82075043e-01 1.82359084e-01 1.82643273e-01 1.82927612e-01 1.83212099e-01 + 1.83496734e-01 1.83781518e-01 1.84066450e-01 1.84351529e-01 1.84636756e-01 + 1.84922131e-01 1.85207652e-01 1.85493321e-01 1.85779136e-01 1.86065098e-01 + 1.86351206e-01 1.86637461e-01 1.86923861e-01 1.87210407e-01 1.87497099e-01 + 1.87783936e-01 1.88070919e-01 1.88358046e-01 1.88645318e-01 1.88932734e-01 + 1.89220295e-01 1.89508000e-01 1.89795849e-01 1.90083842e-01 1.90371978e-01 + 1.90660258e-01 1.90948681e-01 1.91237246e-01 1.91525955e-01 1.91814806e-01 + 1.92103799e-01 1.92392935e-01 1.92682212e-01 1.92971631e-01 1.93261192e-01 + 1.93550894e-01 1.93840737e-01 1.94130721e-01 1.94420846e-01 1.94711111e-01 + 1.95001517e-01 1.95292063e-01 1.95582748e-01 1.95873574e-01 1.96164539e-01 + 1.96455643e-01 1.96746886e-01 1.97038269e-01 1.97329790e-01 1.97621449e-01 + 1.97913247e-01 1.98205183e-01 1.98497257e-01 1.98789469e-01 1.99081818e-01 + 1.99374304e-01 1.99666928e-01 1.99959688e-01 2.00252585e-01 2.00545619e-01 + 2.00838789e-01 2.01132095e-01 2.01425537e-01 2.01719114e-01 2.02012828e-01 + 2.02306676e-01 2.02600660e-01 2.02894778e-01 2.03189031e-01 2.03483419e-01 + 2.03777941e-01 2.04072597e-01 2.04367387e-01 2.04662311e-01 2.04957368e-01 + 2.05252558e-01 2.05547882e-01 2.05843338e-01 2.06138928e-01 2.06434649e-01 + 2.06730503e-01 2.07026489e-01 2.07322607e-01 2.07618857e-01 2.07915238e-01 + 2.08211750e-01 2.08508394e-01 2.08805168e-01 2.09102073e-01 2.09399109e-01 + 2.09696275e-01 2.09993571e-01 2.10290997e-01 2.10588552e-01 2.10886237e-01 + 2.11184052e-01 2.11481995e-01 2.11780068e-01 2.12078269e-01 2.12376598e-01 + 2.12675056e-01 2.12973642e-01 2.13272356e-01 2.13571197e-01 2.13870166e-01 + 2.14169263e-01 2.14468486e-01 2.14767837e-01 2.15067314e-01 2.15366917e-01 + 2.15666647e-01 2.15966503e-01 2.16266485e-01 2.16566592e-01 2.16866825e-01 + 2.17167184e-01 2.17467667e-01 2.17768276e-01 2.18069009e-01 2.18369866e-01 + 2.18670848e-01 2.18971954e-01 2.19273184e-01 2.19574538e-01 2.19876015e-01 + 2.20177615e-01 2.20479339e-01 2.20781185e-01 2.21083155e-01 2.21385246e-01 + 2.21687460e-01 2.21989797e-01 2.22292255e-01 2.22594835e-01 2.22897536e-01 + 2.23200359e-01 2.23503303e-01 2.23806367e-01 2.24109553e-01 2.24412859e-01 + 2.24716285e-01 2.25019832e-01 2.25323498e-01 2.25627285e-01 2.25931191e-01 + 2.26235216e-01 2.26539360e-01 2.26843623e-01 2.27148005e-01 2.27452506e-01 + 2.27757125e-01 2.28061862e-01 2.28366717e-01 2.28671690e-01 2.28976780e-01 + 2.29281988e-01 2.29587313e-01 2.29892755e-01 2.30198313e-01 2.30503989e-01 + 2.30809780e-01 2.31115688e-01 2.31421712e-01 2.31727852e-01 2.32034107e-01 + 2.32340478e-01 2.32646964e-01 2.32953565e-01 2.33260280e-01 2.33567111e-01 + 2.33874055e-01 2.34181114e-01 2.34488287e-01 2.34795574e-01 2.35102975e-01 + 2.35410489e-01 2.35718116e-01 2.36025856e-01 2.36333709e-01 2.36641675e-01 + 2.36949753e-01 2.37257943e-01 2.37566246e-01 2.37874660e-01 2.38183186e-01 + 2.38491824e-01 2.38800572e-01 2.39109432e-01 2.39418403e-01 2.39727484e-01 + 2.40036676e-01 2.40345978e-01 2.40655391e-01 2.40964913e-01 2.41274545e-01 + 2.41584286e-01 2.41894137e-01 2.42204097e-01 2.42514166e-01 2.42824344e-01 + 2.43134630e-01 2.43445024e-01 2.43755527e-01 2.44066138e-01 2.44376856e-01 + 2.44687682e-01 2.44998615e-01 2.45309656e-01 2.45620803e-01 2.45932058e-01 + 2.46243419e-01 2.46554886e-01 2.46866459e-01 2.47178139e-01 2.47489924e-01 + 2.47801815e-01 2.48113812e-01 2.48425913e-01 2.48738120e-01 2.49050431e-01 + 2.49362848e-01 2.49675368e-01 2.49987993e-01 2.50300722e-01 2.50613555e-01 + 2.50926492e-01 2.51239532e-01 2.51552675e-01 2.51865922e-01 2.52179271e-01 + 2.52492723e-01 2.52806278e-01 2.53119935e-01 2.53433694e-01 2.53747555e-01 + 2.54061518e-01 2.54375582e-01 2.54689748e-01 2.55004015e-01 2.55318383e-01 + 2.55632851e-01 2.55947421e-01 2.56262090e-01 2.56576860e-01 2.56891730e-01 + 2.57206700e-01 2.57521770e-01 2.57836938e-01 2.58152207e-01 2.58467574e-01 + 2.58783040e-01 2.59098605e-01 2.59414268e-01 2.59730029e-01 2.60045889e-01 + 2.60361847e-01 2.60677902e-01 2.60994055e-01 2.61310305e-01 2.61626652e-01 + 2.61943096e-01 2.62259637e-01 2.62576275e-01 2.62893009e-01 2.63209839e-01 + 2.63526765e-01 2.63843787e-01 2.64160905e-01 2.64478118e-01 2.64795426e-01 + 2.65112830e-01 2.65430328e-01 2.65747921e-01 2.66065608e-01 2.66383390e-01 + 2.66701265e-01 2.67019235e-01 2.67337298e-01 2.67655455e-01 2.67973706e-01 + 2.68292049e-01 2.68610485e-01 2.68929014e-01 2.69247636e-01 2.69566350e-01 + 2.69885156e-01 2.70204055e-01 2.70523045e-01 2.70842127e-01 2.71161300e-01 + 2.71480564e-01 2.71799920e-01 2.72119366e-01 2.72438903e-01 2.72758531e-01 + 2.73078249e-01 2.73398057e-01 2.73717955e-01 2.74037942e-01 2.74358019e-01 + 2.74678186e-01 2.74998442e-01 2.75318787e-01 2.75639220e-01 2.75959743e-01 + 2.76280353e-01 2.76601052e-01 2.76921839e-01 2.77242714e-01 2.77563676e-01 + 2.77884726e-01 2.78205864e-01 2.78527088e-01 2.78848399e-01 2.79169798e-01 + 2.79491282e-01 2.79812853e-01 2.80134510e-01 2.80456254e-01 2.80778083e-01 + 2.81099997e-01 2.81421997e-01 2.81744083e-01 2.82066253e-01 2.82388508e-01 + 2.82710848e-01 2.83033273e-01 2.83355782e-01 2.83678374e-01 2.84001051e-01 + 2.84323812e-01 2.84646656e-01 2.84969584e-01 2.85292594e-01 2.85615688e-01 + 2.85938865e-01 2.86262124e-01 2.86585466e-01 2.86908890e-01 2.87232396e-01 + 2.87555984e-01 2.87879654e-01 2.88203405e-01 2.88527238e-01 2.88851152e-01 + 2.89175147e-01 2.89499222e-01 2.89823378e-01 2.90147615e-01 2.90471932e-01 + 2.90796329e-01 2.91120806e-01 2.91445362e-01 2.91769999e-01 2.92094714e-01 + 2.92419508e-01 2.92744382e-01 2.93069334e-01 2.93394365e-01 2.93719474e-01 + 2.94044662e-01 2.94369927e-01 2.94695271e-01 2.95020692e-01 2.95346191e-01 + 2.95671767e-01 2.95997420e-01 2.96323150e-01 2.96648956e-01 2.96974840e-01 + 2.97300799e-01 2.97626835e-01 2.97952947e-01 2.98279135e-01 2.98605399e-01 + 2.98931738e-01 2.99258152e-01 2.99584642e-01 2.99911206e-01 3.00237845e-01 + 3.00564559e-01 3.00891347e-01 3.01218209e-01 3.01545146e-01 3.01872156e-01 + 3.02199240e-01 3.02526398e-01 3.02853628e-01 3.03180932e-01 3.03508309e-01 + 3.03835759e-01 3.04163281e-01 3.04490876e-01 3.04818543e-01 3.05146281e-01 + 3.05474092e-01 3.05801975e-01 3.06129929e-01 3.06457954e-01 3.06786051e-01 + 3.07114218e-01 3.07442456e-01 3.07770765e-01 3.08099145e-01 3.08427594e-01 + 3.08756114e-01 3.09084703e-01 3.09413363e-01 3.09742091e-01 3.10070890e-01 + 3.10399757e-01 3.10728693e-01 3.11057699e-01 3.11386772e-01 3.11715915e-01 + 3.12045125e-01 3.12374404e-01 3.12703751e-01 3.13033165e-01 3.13362647e-01 + 3.13692197e-01 3.14021813e-01 3.14351497e-01 3.14681248e-01 3.15011065e-01 + 3.15340949e-01 3.15670899e-01 3.16000915e-01 3.16330997e-01 3.16661145e-01 + 3.16991359e-01 3.17321638e-01 3.17651983e-01 3.17982392e-01 3.18312867e-01 + 3.18643406e-01 3.18974010e-01 3.19304678e-01 3.19635411e-01 3.19966207e-01 + 3.20297067e-01 3.20627992e-01 3.20958979e-01 3.21290030e-01 3.21621144e-01 + 3.21952321e-01 3.22283561e-01 3.22614864e-01 3.22946229e-01 3.23277656e-01 + 3.23609146e-01 3.23940697e-01 3.24272310e-01 3.24603985e-01 3.24935721e-01 + 3.25267519e-01 3.25599377e-01 3.25931297e-01 3.26263277e-01 3.26595317e-01 + 3.26927419e-01 3.27259580e-01 3.27591801e-01 3.27924082e-01 3.28256423e-01 + 3.28588824e-01 3.28921283e-01 3.29253802e-01 3.29586380e-01 3.29919017e-01 + 3.30251712e-01 3.30584466e-01 3.30917278e-01 3.31250149e-01 3.31583077e-01 + 3.31916063e-01 3.32249107e-01 3.32582208e-01 3.32915366e-01 3.33248582e-01 + 3.33581854e-01 3.33915183e-01 3.34248569e-01 3.34582011e-01 3.34915510e-01 + 3.35249064e-01 3.35582675e-01 3.35916341e-01 3.36250062e-01 3.36583839e-01 + 3.36917672e-01 3.37251559e-01 3.37585501e-01 3.37919498e-01 3.38253550e-01 + 3.38587656e-01 3.38921816e-01 3.39256030e-01 3.39590298e-01 3.39924620e-01 + 3.40258995e-01 3.40593423e-01 3.40927905e-01 3.41262440e-01 3.41597027e-01 + 3.41931667e-01 3.42266360e-01 3.42601105e-01 3.42935903e-01 3.43270752e-01 + 3.43605653e-01 3.43940606e-01 3.44275610e-01 3.44610666e-01 3.44945772e-01 + 3.45280930e-01 3.45616139e-01 3.45951398e-01 3.46286708e-01 3.46622068e-01 + 3.46957478e-01 3.47292938e-01 3.47628448e-01 3.47964008e-01 3.48299617e-01 + 3.48635275e-01 3.48970983e-01 3.49306740e-01 3.49642545e-01 3.49978399e-01 + 3.50314302e-01 3.50650253e-01 3.50986252e-01 3.51322299e-01 3.51658394e-01 + 3.51994536e-01 3.52330726e-01 3.52666964e-01 3.53003248e-01 3.53339580e-01 + 3.53675958e-01 3.54012383e-01 3.54348855e-01 3.54685373e-01 3.55021937e-01 + 3.55358547e-01 3.55695203e-01 3.56031904e-01 3.56368651e-01 3.56705444e-01 + 3.57042281e-01 3.57379164e-01 3.57716092e-01 3.58053064e-01 3.58390081e-01 + 3.58727142e-01 3.59064247e-01 3.59401397e-01 3.59738590e-01 3.60075827e-01 + 3.60413107e-01 3.60750431e-01 3.61087799e-01 3.61425209e-01 3.61762662e-01 + 3.62100158e-01 3.62437696e-01 3.62775277e-01 3.63112900e-01 3.63450566e-01 + 3.63788273e-01 3.64126022e-01 3.64463812e-01 3.64801645e-01 3.65139518e-01 + 3.65477432e-01 3.65815388e-01 3.66153384e-01 3.66491421e-01 3.66829498e-01 + 3.67167616e-01 3.67505774e-01 3.67843971e-01 3.68182209e-01 3.68520487e-01 + 3.68858803e-01 3.69197160e-01 3.69535555e-01 3.69873990e-01 3.70212463e-01 + 3.70550975e-01 3.70889526e-01 3.71228115e-01 3.71566742e-01 3.71905408e-01 + 3.72244111e-01 3.72582852e-01 3.72921631e-01 3.73260447e-01 3.73599300e-01 + 3.73938191e-01 3.74277119e-01 3.74616083e-01 3.74955084e-01 3.75294122e-01 + 3.75633196e-01 3.75972306e-01 3.76311452e-01 3.76650634e-01 3.76989852e-01 + 3.77329105e-01 3.77668394e-01 3.78007718e-01 3.78347077e-01 3.78686471e-01 + 3.79025899e-01 3.79365363e-01 3.79704861e-01 3.80044393e-01 3.80383959e-01 + 3.80723559e-01 3.81063194e-01 3.81402861e-01 3.81742563e-01 3.82082298e-01 + 3.82422065e-01 3.82761866e-01 3.83101700e-01 3.83441567e-01 3.83781466e-01 + 3.84121398e-01 3.84461362e-01 3.84801358e-01 3.85141386e-01 3.85481446e-01 + 3.85821538e-01 3.86161661e-01 3.86501816e-01 3.86842001e-01 3.87182218e-01 + 3.87522466e-01 3.87862744e-01 3.88203053e-01 3.88543393e-01 3.88883763e-01 + 3.89224162e-01 3.89564592e-01 3.89905052e-01 3.90245541e-01 3.90586060e-01 + 3.90926609e-01 3.91267186e-01 3.91607793e-01 3.91948428e-01 3.92289093e-01 + 3.92629785e-01 3.92970507e-01 3.93311256e-01 3.93652034e-01 3.93992840e-01 + 3.94333674e-01 3.94674535e-01 3.95015424e-01 3.95356341e-01 3.95697284e-01 + 3.96038255e-01 3.96379253e-01 3.96720277e-01 3.97061328e-01 3.97402406e-01 + 3.97743510e-01 3.98084640e-01 3.98425796e-01 3.98766978e-01 3.99108186e-01 + 3.99449420e-01 3.99790679e-01 4.00131963e-01 4.00473272e-01 4.00814607e-01 + 4.01155966e-01 4.01497350e-01 4.01838759e-01 4.02180192e-01 4.02521649e-01 + 4.02863130e-01 4.03204636e-01 4.03546165e-01 4.03887718e-01 4.04229294e-01 + 4.04570894e-01 4.04912517e-01 4.05254163e-01 4.05595832e-01 4.05937524e-01 + 4.06279238e-01 4.06620975e-01 4.06962734e-01 4.07304516e-01 4.07646319e-01 + 4.07988145e-01 4.08329992e-01 4.08671861e-01 4.09013751e-01 4.09355663e-01 + 4.09697596e-01 4.10039549e-01 4.10381524e-01 4.10723520e-01 4.11065536e-01 + 4.11407572e-01 4.11749629e-01 4.12091706e-01 4.12433803e-01 4.12775920e-01 + 4.13118057e-01 4.13460213e-01 4.13802389e-01 4.14144583e-01 4.14486798e-01 + 4.14829031e-01 4.15171283e-01 4.15513553e-01 4.15855843e-01 4.16198150e-01 + 4.16540476e-01 4.16882821e-01 4.17225183e-01 4.17567563e-01 4.17909961e-01 + 4.18252376e-01 4.18594809e-01 4.18937259e-01 4.19279726e-01 4.19622210e-01 + 4.19964711e-01 4.20307229e-01 4.20649763e-01 4.20992314e-01 4.21334881e-01 + 4.21677465e-01 4.22020064e-01 4.22362679e-01 4.22705310e-01 4.23047957e-01 + 4.23390619e-01 4.23733296e-01 4.24075988e-01 4.24418696e-01 4.24761418e-01 + 4.25104155e-01 4.25446907e-01 4.25789673e-01 4.26132454e-01 4.26475249e-01 + 4.26818057e-01 4.27160880e-01 4.27503717e-01 4.27846567e-01 4.28189430e-01 + 4.28532307e-01 4.28875197e-01 4.29218101e-01 4.29561017e-01 4.29903946e-01 + 4.30246888e-01 4.30589842e-01 4.30932808e-01 4.31275787e-01 4.31618778e-01 + 4.31961781e-01 4.32304796e-01 4.32647822e-01 4.32990860e-01 4.33333909e-01 + 4.33676970e-01 4.34020042e-01 4.34363125e-01 4.34706219e-01 4.35049323e-01 + 4.35392438e-01 4.35735564e-01 4.36078700e-01 4.36421846e-01 4.36765002e-01 + 4.37108168e-01 4.37451344e-01 4.37794529e-01 4.38137724e-01 4.38480929e-01 + 4.38824142e-01 4.39167365e-01 4.39510597e-01 4.39853837e-01 4.40197087e-01 + 4.40540345e-01 4.40883611e-01 4.41226885e-01 4.41570168e-01 4.41913459e-01 + 4.42256758e-01 4.42600064e-01 4.42943378e-01 4.43286700e-01 4.43630029e-01 + 4.43973365e-01 4.44316708e-01 4.44660058e-01 4.45003416e-01 4.45346779e-01 + 4.45690150e-01 4.46033526e-01 4.46376910e-01 4.46720299e-01 4.47063694e-01 + 4.47407095e-01 4.47750502e-01 4.48093915e-01 4.48437333e-01 4.48780757e-01 + 4.49124185e-01 4.49467619e-01 4.49811058e-01 4.50154502e-01 4.50497950e-01 + 4.50841403e-01 4.51184861e-01 4.51528322e-01 4.51871788e-01 4.52215259e-01 + 4.52558733e-01 4.52902210e-01 4.53245692e-01 4.53589177e-01 4.53932665e-01 + 4.54276157e-01 4.54619652e-01 4.54963150e-01 4.55306651e-01 4.55650154e-01 + 1.03953624e+00 1.03772749e+00 1.03592023e+00 1.03411445e+00 1.03231016e+00 + 1.03050735e+00 1.02870603e+00 1.02690620e+00 1.02510785e+00 1.02331100e+00 + 1.02151562e+00 1.01972174e+00 1.01792935e+00 1.01613844e+00 1.01434902e+00 + 1.01256110e+00 1.01077466e+00 1.00898971e+00 1.00720626e+00 1.00542429e+00 + 1.00364382e+00 1.00186484e+00 1.00008735e+00 9.98311355e-01 9.96536852e-01 + 9.94763842e-01 9.92992326e-01 9.91222304e-01 9.89453777e-01 9.87686744e-01 + 9.85921207e-01 9.84157165e-01 9.82394619e-01 9.80633570e-01 9.78874017e-01 + 9.77115962e-01 9.75359404e-01 9.73604344e-01 9.71850782e-01 9.70098719e-01 + 9.68348155e-01 9.66599090e-01 9.64851525e-01 9.63105460e-01 9.61360895e-01 + 9.59617832e-01 9.57876269e-01 9.56136208e-01 9.54397649e-01 9.52660593e-01 + 9.50925039e-01 9.49190988e-01 9.47458441e-01 9.45727397e-01 9.43997858e-01 + 9.42269823e-01 9.40543293e-01 9.38818268e-01 9.37094749e-01 9.35372736e-01 + 9.33652230e-01 9.31933230e-01 9.30215737e-01 9.28499752e-01 9.26785274e-01 + 9.25072305e-01 9.23360844e-01 9.21650893e-01 9.19942450e-01 9.18235517e-01 + 9.16530094e-01 9.14826182e-01 9.13123780e-01 9.11422890e-01 9.09723511e-01 + 9.08025644e-01 9.06329289e-01 9.04634446e-01 9.02941117e-01 9.01249300e-01 + 8.99558998e-01 8.97870209e-01 8.96182935e-01 8.94497176e-01 8.92812931e-01 + 8.91130202e-01 8.89448989e-01 8.87769292e-01 8.86091112e-01 8.84414448e-01 + 8.82739302e-01 8.81065673e-01 8.79393562e-01 8.77722970e-01 8.76053896e-01 + 8.74386341e-01 8.72720306e-01 8.71055790e-01 8.69392795e-01 8.67731320e-01 + 8.66071366e-01 8.64412932e-01 8.62756021e-01 8.61100631e-01 8.59446764e-01 + 8.57794419e-01 8.56143597e-01 8.54494298e-01 8.52846523e-01 8.51200272e-01 + 8.49555545e-01 8.47912343e-01 8.46270666e-01 8.44630515e-01 8.42991889e-01 + 8.41354789e-01 8.39719216e-01 8.38085170e-01 8.36452650e-01 8.34821658e-01 + 8.33192195e-01 8.31564259e-01 8.29937852e-01 8.28312973e-01 8.26689624e-01 + 8.25067805e-01 8.23447515e-01 8.21828756e-01 8.20211528e-01 8.18595830e-01 + 8.16981664e-01 8.15369029e-01 8.13757927e-01 8.12148357e-01 8.10540319e-01 + 8.08933815e-01 8.07328844e-01 8.05725406e-01 8.04123503e-01 8.02523135e-01 + 8.00924301e-01 7.99327002e-01 7.97731239e-01 7.96137011e-01 7.94544320e-01 + 7.92953165e-01 7.91363547e-01 7.89775466e-01 7.88188923e-01 7.86603918e-01 + 7.85020450e-01 7.83438522e-01 7.81858132e-01 7.80279281e-01 7.78701970e-01 + 7.77126199e-01 7.75551968e-01 7.73979278e-01 7.72408129e-01 7.70838521e-01 + 7.69270454e-01 7.67703930e-01 7.66138947e-01 7.64575508e-01 7.63013611e-01 + 7.61453258e-01 7.59894448e-01 7.58337182e-01 7.56781460e-01 7.55227283e-01 + 7.53674651e-01 7.52123565e-01 7.50574024e-01 7.49026029e-01 7.47479580e-01 + 7.45934678e-01 7.44391322e-01 7.42849514e-01 7.41309254e-01 7.39770542e-01 + 7.38233378e-01 7.36697762e-01 7.35163696e-01 7.33631179e-01 7.32100211e-01 + 7.30570794e-01 7.29042926e-01 7.27516610e-01 7.25991844e-01 7.24468629e-01 + 7.22946966e-01 7.21426855e-01 7.19908297e-01 7.18391291e-01 7.16875837e-01 + 7.15361937e-01 7.13849591e-01 7.12338798e-01 7.10829560e-01 7.09321876e-01 + 7.07815747e-01 7.06311174e-01 7.04808155e-01 7.03306693e-01 7.01806787e-01 + 7.00308437e-01 6.98811644e-01 6.97316408e-01 6.95822730e-01 6.94330610e-01 + 6.92840047e-01 6.91351043e-01 6.89863598e-01 6.88377712e-01 6.86893385e-01 + 6.85410618e-01 6.83929411e-01 6.82449765e-01 6.80971679e-01 6.79495154e-01 + 6.78020190e-01 6.76546789e-01 6.75074949e-01 6.73604671e-01 6.72135956e-01 + 6.70668804e-01 6.69203215e-01 6.67739189e-01 6.66276728e-01 6.64815830e-01 + 6.63356498e-01 6.61898730e-01 6.60442527e-01 6.58987889e-01 6.57534818e-01 + 6.56083312e-01 6.54633373e-01 6.53185001e-01 6.51738195e-01 6.50292957e-01 + 6.48849287e-01 6.47407184e-01 6.45966650e-01 6.44527685e-01 6.43090288e-01 + 6.41654460e-01 6.40220202e-01 6.38787514e-01 6.37356396e-01 6.35926849e-01 + 6.34498872e-01 6.33072467e-01 6.31647633e-01 6.30224370e-01 6.28802680e-01 + 6.27382561e-01 6.25964016e-01 6.24547043e-01 6.23131644e-01 6.21717818e-01 + 6.20305566e-01 6.18894889e-01 6.17485785e-01 6.16078257e-01 6.14672303e-01 + 6.13267925e-01 6.11865123e-01 6.10463897e-01 6.09064247e-01 6.07666173e-01 + 6.06269677e-01 6.04874758e-01 6.03481416e-01 6.02089652e-01 6.00699467e-01 + 5.99310859e-01 5.97923831e-01 5.96538381e-01 5.95154511e-01 5.93772221e-01 + 5.92391510e-01 5.91012380e-01 5.89634830e-01 5.88258861e-01 5.86884473e-01 + 5.85511667e-01 5.84140442e-01 5.82770800e-01 5.81402740e-01 5.80036262e-01 + 5.78671367e-01 5.77308056e-01 5.75946328e-01 5.74586184e-01 5.73227624e-01 + 5.71870649e-01 5.70515258e-01 5.69161453e-01 5.67809232e-01 5.66458597e-01 + 5.65109548e-01 5.63762086e-01 5.62416210e-01 5.61071920e-01 5.59729218e-01 + 5.58388103e-01 5.57048576e-01 5.55710636e-01 5.54374285e-01 5.53039523e-01 + 5.51706349e-01 5.50374764e-01 5.49044769e-01 5.47716364e-01 5.46389548e-01 + 5.45064323e-01 5.43740689e-01 5.42418645e-01 5.41098192e-01 5.39779331e-01 + 5.38462062e-01 5.37146385e-01 5.35832299e-01 5.34519807e-01 5.33208907e-01 + 5.31899601e-01 5.30591888e-01 5.29285769e-01 5.27981244e-01 5.26678313e-01 + 5.25376977e-01 5.24077235e-01 5.22779089e-01 5.21482538e-01 5.20187583e-01 + 5.18894224e-01 5.17602461e-01 5.16312295e-01 5.15023726e-01 5.13736754e-01 + 5.12451379e-01 5.11167602e-01 5.09885423e-01 5.08604843e-01 5.07325861e-01 + 5.06048477e-01 5.04772693e-01 5.03498508e-01 5.02225923e-01 5.00954938e-01 + 4.99685553e-01 4.98417769e-01 4.97151585e-01 4.95887003e-01 4.94624021e-01 + 4.93362642e-01 4.92102864e-01 4.90844689e-01 4.89588116e-01 4.88333145e-01 + 4.87079778e-01 4.85828014e-01 4.84577853e-01 4.83329297e-01 4.82082344e-01 + 4.80836996e-01 4.79593252e-01 4.78351114e-01 4.77110580e-01 4.75871652e-01 + 4.74634330e-01 4.73398614e-01 4.72164504e-01 4.70932001e-01 4.69701104e-01 + 4.68471815e-01 4.67244132e-01 4.66018058e-01 4.64793591e-01 4.63570733e-01 + 4.62349483e-01 4.61129842e-01 4.59911810e-01 4.58695387e-01 4.57480573e-01 + 4.56267369e-01 4.55055776e-01 4.53845792e-01 4.52637419e-01 4.51430658e-01 + 4.50225507e-01 4.49021967e-01 4.47820039e-01 4.46619724e-01 4.45421020e-01 + 4.44223928e-01 4.43028450e-01 4.41834584e-01 4.40642332e-01 4.39451693e-01 + 4.38262668e-01 4.37075256e-01 4.35889459e-01 4.34705277e-01 4.33522709e-01 + 4.32341757e-01 4.31162420e-01 4.29984698e-01 4.28808592e-01 4.27634102e-01 + 4.26461229e-01 4.25289972e-01 4.24120332e-01 4.22952310e-01 4.21785904e-01 + 4.20621116e-01 4.19457946e-01 4.18296395e-01 4.17136461e-01 4.15978147e-01 + 4.14821451e-01 4.13666374e-01 4.12512917e-01 4.11361080e-01 4.10210862e-01 + 4.09062265e-01 4.07915288e-01 4.06769932e-01 4.05626197e-01 4.04484083e-01 + 4.03343590e-01 4.02204719e-01 4.01067470e-01 3.99931844e-01 3.98797839e-01 + 3.97665458e-01 3.96534699e-01 3.95405564e-01 3.94278052e-01 3.93152164e-01 + 3.92027900e-01 3.90905259e-01 3.89784244e-01 3.88664853e-01 3.87547087e-01 + 3.86430946e-01 3.85316431e-01 3.84203541e-01 3.83092278e-01 3.81982640e-01 + 3.80874629e-01 3.79768245e-01 3.78663487e-01 3.77560357e-01 3.76458854e-01 + 3.75358979e-01 3.74260731e-01 3.73164112e-01 3.72069121e-01 3.70975759e-01 + 3.69884025e-01 3.68793921e-01 3.67705446e-01 3.66618601e-01 3.65533385e-01 + 3.64449799e-01 3.63367844e-01 3.62287520e-01 3.61208826e-01 3.60131763e-01 + 3.59056331e-01 3.57982531e-01 3.56910363e-01 3.55839826e-01 3.54770922e-01 + 3.53703650e-01 3.52638011e-01 3.51574005e-01 3.50511632e-01 3.49450892e-01 + 3.48391786e-01 3.47334314e-01 3.46278476e-01 3.45224272e-01 3.44171703e-01 + 3.43120769e-01 3.42071469e-01 3.41023805e-01 3.39977776e-01 3.38933384e-01 + 3.37890627e-01 3.36849506e-01 3.35810021e-01 3.34772174e-01 3.33735963e-01 + 3.32701389e-01 3.31668453e-01 3.30637154e-01 3.29607493e-01 3.28579470e-01 + 3.27553085e-01 3.26528339e-01 3.25505231e-01 3.24483762e-01 3.23463933e-01 + 3.22445743e-01 3.21429192e-01 3.20414282e-01 3.19401011e-01 3.18389381e-01 + 3.17379391e-01 3.16371042e-01 3.15364334e-01 3.14359267e-01 3.13355841e-01 + 3.12354057e-01 3.11353915e-01 3.10355415e-01 3.09358557e-01 3.08363342e-01 + 3.07369770e-01 3.06377840e-01 3.05387554e-01 3.04398911e-01 3.03411912e-01 + 3.02426556e-01 3.01442845e-01 3.00460777e-01 2.99480355e-01 2.98501577e-01 + 2.97524444e-01 2.96548956e-01 2.95575113e-01 2.94602916e-01 2.93632365e-01 + 2.92663460e-01 2.91696201e-01 2.90730589e-01 2.89766623e-01 2.88804304e-01 + 2.87843632e-01 2.86884607e-01 2.85927230e-01 2.84971501e-01 2.84017420e-01 + 2.83064986e-01 2.82114201e-01 2.81165065e-01 2.80217578e-01 2.79271739e-01 + 2.78327550e-01 2.77385010e-01 2.76444119e-01 2.75504879e-01 2.74567288e-01 + 2.73631348e-01 2.72697059e-01 2.71764419e-01 2.70833431e-01 2.69904094e-01 + 2.68976408e-01 2.68050374e-01 2.67125991e-01 2.66203261e-01 2.65282182e-01 + 2.64362756e-01 2.63444982e-01 2.62528861e-01 2.61614393e-01 2.60701578e-01 + 2.59790416e-01 2.58880908e-01 2.57973054e-01 2.57066853e-01 2.56162307e-01 + 2.55259415e-01 2.54358178e-01 2.53458595e-01 2.52560668e-01 2.51664395e-01 + 2.50769778e-01 2.49876816e-01 2.48985511e-01 2.48095861e-01 2.47207867e-01 + 2.46321530e-01 2.45436849e-01 2.44553825e-01 2.43672457e-01 2.42792747e-01 + 2.41914695e-01 2.41038300e-01 2.40163562e-01 2.39290483e-01 2.38419061e-01 + 2.37549298e-01 2.36681193e-01 2.35814748e-01 2.34949961e-01 2.34086833e-01 + 2.33225364e-01 2.32365555e-01 2.31507405e-01 2.30650916e-01 2.29796086e-01 + 2.28942916e-01 2.28091407e-01 2.27241559e-01 2.26393372e-01 2.25546845e-01 + 2.24701980e-01 2.23858776e-01 2.23017233e-01 2.22177352e-01 2.21339134e-01 + 2.20502577e-01 2.19667682e-01 2.18834451e-01 2.18002881e-01 2.17172975e-01 + 2.16344732e-01 2.15518152e-01 2.14693235e-01 2.13869982e-01 2.13048393e-01 + 2.12228468e-01 2.11410207e-01 2.10593610e-01 2.09778678e-01 2.08965410e-01 + 2.08153807e-01 2.07343870e-01 2.06535598e-01 2.05728991e-01 2.04924049e-01 + 2.04120774e-01 2.03319164e-01 2.02519221e-01 2.01720944e-01 2.00924334e-01 + 2.00129390e-01 1.99336113e-01 1.98544503e-01 1.97754560e-01 1.96966285e-01 + 1.96179677e-01 1.95394737e-01 1.94611465e-01 1.93829861e-01 1.93049925e-01 + 1.92271658e-01 1.91495059e-01 1.90720129e-01 1.89946869e-01 1.89175277e-01 + 1.88405354e-01 1.87637101e-01 1.86870518e-01 1.86105605e-01 1.85342361e-01 + 1.84580788e-01 1.83820885e-01 1.83062653e-01 1.82306091e-01 1.81551200e-01 + 1.80797980e-01 1.80046431e-01 1.79296554e-01 1.78548348e-01 1.77801814e-01 + 1.77056952e-01 1.76313762e-01 1.75572244e-01 1.74832398e-01 1.74094225e-01 + 1.73357725e-01 1.72622897e-01 1.71889743e-01 1.71158261e-01 1.70428453e-01 + 1.69700319e-01 1.68973858e-01 1.68249071e-01 1.67525958e-01 1.66804519e-01 + 1.66084755e-01 1.65366665e-01 1.64650249e-01 1.63935509e-01 1.63222443e-01 + 1.62511053e-01 1.61801338e-01 1.61093298e-01 1.60386934e-01 1.59682246e-01 + 1.58979233e-01 1.58277897e-01 1.57578237e-01 1.56880253e-01 1.56183946e-01 + 1.55489316e-01 1.54796362e-01 1.54105086e-01 1.53415486e-01 1.52727564e-01 + 1.52041320e-01 1.51356753e-01 1.50673864e-01 1.49992653e-01 1.49313120e-01 + 1.48635265e-01 1.47959088e-01 1.47284591e-01 1.46611771e-01 1.45940631e-01 + 1.45271170e-01 1.44603388e-01 1.43937285e-01 1.43272862e-01 1.42610118e-01 + 1.41949054e-01 1.41289670e-01 1.40631966e-01 1.39975942e-01 1.39321598e-01 + 1.38668935e-01 1.38017953e-01 1.37368652e-01 1.36721031e-01 1.36075091e-01 + 1.35430833e-01 1.34788256e-01 1.34147361e-01 1.33508147e-01 1.32870615e-01 + 1.32234765e-01 1.31600597e-01 1.30968111e-01 1.30337308e-01 1.29708187e-01 + 1.29080749e-01 1.28454994e-01 1.27830921e-01 1.27208532e-01 1.26587826e-01 + 1.25968803e-01 1.25351464e-01 1.24735808e-01 1.24121836e-01 1.23509548e-01 + 1.22898944e-01 1.22290024e-01 1.21682789e-01 1.21077238e-01 1.20473372e-01 + 1.19871190e-01 1.19270693e-01 1.18671881e-01 1.18074755e-01 1.17479313e-01 + 1.16885558e-01 1.16293487e-01 1.15703102e-01 1.15114403e-01 1.14527390e-01 + 1.13942064e-01 1.13358423e-01 1.12776468e-01 1.12196200e-01 1.11617619e-01 + 1.11040725e-01 1.10465517e-01 1.09891996e-01 1.09320162e-01 1.08750016e-01 + 1.08181557e-01 1.07614785e-01 1.07049701e-01 1.06486305e-01 1.05924597e-01 + 1.05364577e-01 1.04806244e-01 1.04249601e-01 1.03694645e-01 1.03141378e-01 + 1.02589800e-01 1.02039910e-01 1.01491709e-01 1.00945198e-01 1.00400375e-01 + 9.98572416e-02 9.93157976e-02 9.87760431e-02 9.82379782e-02 9.77016030e-02 + 9.71669178e-02 9.66339224e-02 9.61026172e-02 9.55730022e-02 9.50450776e-02 + 9.45188434e-02 9.39942997e-02 9.34714468e-02 9.29502847e-02 9.24308135e-02 + 9.19130333e-02 9.13969443e-02 9.08825466e-02 9.03698403e-02 8.98588255e-02 + 8.93495023e-02 8.88418708e-02 8.83359312e-02 8.78316836e-02 8.73291281e-02 + 8.68282647e-02 8.63290937e-02 8.58316150e-02 8.53358290e-02 8.48417355e-02 + 8.43493348e-02 8.38586270e-02 8.33696121e-02 8.28822904e-02 8.23966618e-02 + 8.19127265e-02 8.14304847e-02 8.09499364e-02 8.04710817e-02 7.99939207e-02 + 7.95184537e-02 7.90446805e-02 7.85726014e-02 7.81022165e-02 7.76335259e-02 + 7.71665296e-02 7.67012279e-02 7.62376207e-02 7.57757082e-02 7.53154905e-02 + 7.48569677e-02 7.44001400e-02 7.39450073e-02 7.34915699e-02 7.30398277e-02 + 7.25897810e-02 7.21414298e-02 7.16947743e-02 7.12498144e-02 7.08065504e-02 + 7.03649822e-02 6.99251102e-02 6.94869342e-02 6.90504544e-02 6.86156710e-02 + 6.81825840e-02 6.77511935e-02 6.73214996e-02 6.68935024e-02 6.64672020e-02 + 6.60425985e-02 6.56196920e-02 6.51984826e-02 6.47789704e-02 6.43611555e-02 + 6.39450379e-02 6.35306178e-02 6.31178953e-02 6.27068704e-02 6.22975433e-02 + 6.18899141e-02 6.14839827e-02 6.10797494e-02 6.06772142e-02 6.02763772e-02 + 5.98772385e-02 5.94797982e-02 5.90840564e-02 5.86900131e-02 5.82976685e-02 + 5.79070227e-02 5.75180757e-02 5.71308276e-02 5.67452785e-02 5.63614285e-02 + 5.59792777e-02 5.55988261e-02 5.52200739e-02 5.48430212e-02 5.44676679e-02 + 5.40940143e-02 5.37220604e-02 5.33518062e-02 5.29832520e-02 5.26163976e-02 + 5.22512433e-02 5.18877891e-02 5.15260351e-02 5.11659814e-02 5.08076280e-02 + 5.04509751e-02 5.00960227e-02 4.97427708e-02 4.93912197e-02 4.90413693e-02 + 4.86932198e-02 4.83467711e-02 4.80020235e-02 4.76589769e-02 4.73176315e-02 + 4.69779873e-02 4.66400444e-02 4.63038029e-02 4.59692628e-02 4.56364243e-02 + 4.53052874e-02 4.49758521e-02 4.46481186e-02 4.43220870e-02 4.39977572e-02 + 4.36751294e-02 4.33542037e-02 4.30349801e-02 4.27174587e-02 4.24016395e-02 + 4.20875227e-02 4.17751083e-02 4.14643964e-02 4.11553870e-02 4.08480802e-02 + 4.05424762e-02 4.02385749e-02 3.99363764e-02 3.96358808e-02 3.93370881e-02 + 3.90399985e-02 3.87446120e-02 3.84509287e-02 3.81589486e-02 3.78686718e-02 + 3.75800983e-02 3.72932283e-02 3.70080618e-02 3.67245988e-02 3.64428394e-02 + 3.61627838e-02 3.58844318e-02 3.56077837e-02 3.53328395e-02 3.50595992e-02 + 3.47880629e-02 3.45182306e-02 3.42501025e-02 3.39836786e-02 3.37189589e-02 + 3.34559435e-02 3.31946324e-02 3.29350258e-02 3.26771236e-02 3.24209260e-02 + 3.21664330e-02 3.19136446e-02 3.16625610e-02 3.14131821e-02 3.11655080e-02 + 3.09195388e-02 3.06752746e-02 3.04327153e-02 3.01918611e-02 2.99527120e-02 + 2.97152680e-02 2.94795292e-02 2.92454957e-02 2.90131675e-02 2.87825447e-02 + 2.85536273e-02 2.83264153e-02 2.81009089e-02 2.78771081e-02 2.76550128e-02 + 2.74346233e-02 2.72159395e-02 2.69989614e-02 2.67836892e-02 2.65701228e-02 + 2.63582623e-02 2.61481079e-02 2.59396594e-02 2.57329170e-02 2.55278807e-02 + 2.53245505e-02 2.51229266e-02 2.49230089e-02 2.47247975e-02 2.45282924e-02 + 2.43334937e-02 2.41404014e-02 2.39490156e-02 2.37593363e-02 2.35713636e-02 + 2.33850975e-02 2.32005380e-02 2.30176851e-02 2.28365390e-02 2.26570997e-02 + 2.24793672e-02 2.23033415e-02 2.21290227e-02 2.19564108e-02 2.17855059e-02 + 2.16163080e-02 2.14488171e-02 2.12830333e-02 2.11189566e-02 2.09565871e-02 + 2.07959248e-02 2.06369696e-02 2.04797218e-02 2.03241812e-02 2.01703480e-02 + 2.00182221e-02 1.98678037e-02 1.97190927e-02 1.95720891e-02 1.94267931e-02 + 1.92832045e-02 1.91413236e-02 1.90011502e-02 1.88626845e-02 1.87259265e-02 + 1.85908761e-02 1.84575335e-02 1.83258986e-02 1.81959715e-02 1.80677522e-02 + 1.79412408e-02 1.78164372e-02 1.76933415e-02 1.75719538e-02 1.74522740e-02 + 1.73343022e-02 1.72180384e-02 1.71034827e-02 1.69906350e-02 1.68794954e-02 + 1.67700639e-02 1.66623405e-02 1.65563253e-02 1.64520183e-02 1.63494195e-02 + 1.62485289e-02 1.61493466e-02 1.60518726e-02 1.59561068e-02 1.58620494e-02 + 1.57697003e-02 1.56790596e-02 1.55901273e-02 1.55029034e-02 1.54173879e-02 + 1.53335808e-02 1.52514822e-02 1.51710921e-02 1.50924105e-02 1.50154374e-02 + 1.49401728e-02 1.48666168e-02 1.47947694e-02 1.47246305e-02 1.46562002e-02 + 1.45894786e-02 1.45244656e-02 1.44611612e-02 1.43995655e-02 1.43396785e-02 + 1.42815001e-02 1.42250305e-02 1.41702695e-02 1.41172173e-02 1.40658738e-02 + 1.40162391e-02 1.39683132e-02 1.39220960e-02 1.38775876e-02 1.38347880e-02 + 1.37936971e-02 1.37543151e-02 1.37166420e-02 1.36806776e-02 1.36464221e-02 + 1.36138754e-02 1.35830376e-02 1.35539086e-02 1.35264885e-02 1.35007773e-02 + 1.34767750e-02 1.34544815e-02 1.34338969e-02 1.34150212e-02 1.33978544e-02 + 1.33823966e-02 1.33686476e-02 1.33566075e-02 1.33462763e-02 1.33376541e-02 + 1.33307407e-02 1.33255363e-02 1.33220408e-02 1.33202542e-02 1.33201765e-02 + 1.33218078e-02 1.33251480e-02 1.33301970e-02 1.33369550e-02 1.33454220e-02 + 1.33555978e-02 1.33674825e-02 1.33810762e-02 1.33963787e-02 1.34133902e-02 + 1.34321105e-02 1.34525397e-02 1.34746779e-02 1.34985249e-02 1.35240808e-02 + 1.35513455e-02 1.35803192e-02 1.36110016e-02 1.36433930e-02 1.36774932e-02 + 1.37133022e-02 1.37508200e-02 1.37900467e-02 1.38309822e-02 1.38736265e-02 + 1.39179796e-02 1.39640414e-02 1.40118121e-02 1.40612914e-02 1.41124796e-02 + 1.41653765e-02 1.42199821e-02 1.42762964e-02 1.43343194e-02 1.43940512e-02 + 1.44554916e-02 1.45186406e-02 1.45834983e-02 1.46500646e-02 1.47183396e-02 + 1.47883231e-02 1.48600153e-02 1.49334160e-02 1.50085252e-02 1.50853430e-02 + 1.51638693e-02 1.52441041e-02 1.53260474e-02 1.54096992e-02 1.54950594e-02 + 1.55821280e-02 1.56709051e-02 1.57613905e-02 1.58535843e-02 1.59474864e-02 + 1.60430969e-02 1.61404156e-02 1.62394427e-02 1.63401780e-02 1.64426215e-02 + 1.65467732e-02 1.66526331e-02 1.67602012e-02 1.68694775e-02 1.69804618e-02 + 1.70931542e-02 1.72075547e-02 1.73236633e-02 1.74414798e-02 1.75610043e-02 + 1.76822368e-02 1.78051772e-02 1.79298256e-02 1.80561818e-02 1.81842458e-02 + 1.83140177e-02 1.84454973e-02 1.85786847e-02 1.87135798e-02 1.88501827e-02 + 1.89884931e-02 1.91285113e-02 1.92702370e-02 1.94136703e-02 1.95588111e-02 + 1.97056595e-02 1.98542153e-02 2.00044786e-02 2.01564492e-02 2.03101272e-02 + 2.04655126e-02 2.06226053e-02 2.07814052e-02 2.09419123e-02 2.11041267e-02 + 2.12680482e-02 2.14336768e-02 2.16010125e-02 2.17700553e-02 2.19408050e-02 + 2.21132617e-02 2.22874254e-02 2.24632959e-02 2.26408733e-02 2.28201575e-02 + 2.30011484e-02 2.31838461e-02 2.33682505e-02 2.35543615e-02 2.37421791e-02 + 2.39317033e-02 2.41229339e-02 2.43158711e-02 2.45105147e-02 2.47068647e-02 + 2.49049210e-02 2.51046836e-02 2.53061524e-02 2.55093275e-02 2.57142087e-02 + 2.59207960e-02 2.61290894e-02 2.63390888e-02 2.65507942e-02 2.67642055e-02 + 2.69793227e-02 2.71961457e-02 2.74146744e-02 2.76349090e-02 2.78568491e-02 + 2.80804949e-02 2.83058463e-02 2.85329032e-02 2.87616656e-02 2.89921334e-02 + 2.92243066e-02 2.94581851e-02 2.96937689e-02 2.99310578e-02 3.01700520e-02 + 3.04107512e-02 3.06531555e-02 3.08972648e-02 3.11430790e-02 3.13905981e-02 + 3.16398220e-02 3.18907507e-02 3.21433841e-02 3.23977222e-02 3.26537648e-02 + 3.29115120e-02 3.31709637e-02 3.34321199e-02 3.36949803e-02 3.39595451e-02 + 3.42258142e-02 3.44937874e-02 3.47634647e-02 3.50348461e-02 3.53079315e-02 + 3.55827209e-02 3.58592141e-02 3.61374112e-02 3.64173120e-02 3.66989165e-02 + 3.69822246e-02 3.72672363e-02 3.75539515e-02 3.78423701e-02 3.81324920e-02 + 3.84243173e-02 3.87178458e-02 3.90130775e-02 3.93100123e-02 3.96086502e-02 + 3.99089910e-02 4.02110347e-02 4.05147812e-02 4.08202305e-02 4.11273825e-02 + 4.14362371e-02 4.17467942e-02 4.20590539e-02 4.23730160e-02 4.26886804e-02 + 4.30060471e-02 4.33251159e-02 4.36458870e-02 4.39683600e-02 4.42925351e-02 + 4.46184120e-02 4.49459908e-02 4.52752714e-02 4.56062536e-02 4.59389375e-02 + 4.62733229e-02 4.66094097e-02 4.69471980e-02 4.72866875e-02 4.76278783e-02 + 4.79707703e-02 4.83153633e-02 4.86616573e-02 4.90096522e-02 4.93593480e-02 + 4.97107446e-02 5.00638418e-02 5.04186396e-02 5.07751380e-02 5.11333368e-02 + 5.14932360e-02 5.18548354e-02 5.22181351e-02 5.25831349e-02 5.29498347e-02 + 5.33182344e-02 5.36883341e-02 5.40601335e-02 5.44336326e-02 5.48088313e-02 + 5.51857296e-02 5.55643273e-02 5.59446244e-02 5.63266207e-02 5.67103163e-02 + 5.70957109e-02 5.74828046e-02 5.78715972e-02 5.82620886e-02 5.86542788e-02 + 5.90481677e-02 5.94437551e-02 5.98410410e-02 6.02400253e-02 6.06407080e-02 + 6.10430888e-02 6.14471678e-02 6.18529447e-02 6.22604197e-02 6.26695925e-02 + 6.30804630e-02 6.34930312e-02 6.39072970e-02 6.43232602e-02 6.47409209e-02 + 6.51602788e-02 6.55813340e-02 6.60040862e-02 6.64285354e-02 6.68546816e-02 + 6.72825245e-02 6.77120642e-02 6.81433005e-02 6.85762333e-02 6.90108625e-02 + 6.94471881e-02 6.98852099e-02 7.03249278e-02 7.07663417e-02 7.12094516e-02 + 7.16542573e-02 7.21007588e-02 7.25489558e-02 7.29988484e-02 7.34504365e-02 + 7.39037198e-02 7.43586984e-02 7.48153721e-02 7.52737408e-02 7.57338044e-02 + 7.61955628e-02 7.66590160e-02 7.71241637e-02 7.75910059e-02 7.80595425e-02 + 7.85297734e-02 7.90016985e-02 7.94753177e-02 7.99506308e-02 8.04276378e-02 + 8.09063385e-02 8.13867329e-02 8.18688208e-02 8.23526021e-02 8.28380768e-02 + 8.33252446e-02 8.38141056e-02 8.43046595e-02 8.47969063e-02 8.52908459e-02 + 8.57864782e-02 8.62838029e-02 8.67828201e-02 8.72835297e-02 8.77859314e-02 + 8.82900252e-02 8.87958110e-02 8.93032887e-02 8.98124581e-02 9.03233191e-02 + 9.08358717e-02 9.13501157e-02 9.18660509e-02 9.23836774e-02 9.29029949e-02 + 9.34240033e-02 9.39467025e-02 9.44710925e-02 9.49971730e-02 9.55249440e-02 + 9.60544054e-02 9.65855570e-02 9.71183987e-02 9.76529303e-02 9.81891519e-02 + 9.87270632e-02 9.92666641e-02 9.98079545e-02 1.00350934e-01 1.00895603e-01 + 1.01441962e-01 1.01990009e-01 1.02539745e-01 1.03091170e-01 1.03644283e-01 + 1.04199085e-01 1.04755576e-01 1.05313754e-01 1.05873621e-01 1.06435176e-01 + 1.06998419e-01 1.07563349e-01 1.08129968e-01 1.08698273e-01 1.09268266e-01 + 1.09839947e-01 1.10413314e-01 1.10988368e-01 1.11565110e-01 1.12143538e-01 + 1.12723652e-01 1.13305453e-01 1.13888941e-01 1.14474115e-01 1.15060974e-01 + 1.15649520e-01 1.16239751e-01 1.16831669e-01 1.17425271e-01 1.18020560e-01 + 1.18617533e-01 1.19216192e-01 1.19816535e-01 1.20418564e-01 1.21022277e-01 + 1.21627675e-01 1.22234757e-01 1.22843524e-01 1.23453975e-01 1.24066109e-01 + 1.24679928e-01 1.25295431e-01 1.25912617e-01 1.26531487e-01 1.27152040e-01 + 1.27774276e-01 1.28398196e-01 1.29023798e-01 1.29651083e-01 1.30280051e-01 + 1.30910702e-01 1.31543034e-01 1.32177050e-01 1.32812747e-01 1.33450126e-01 + 1.34089187e-01 1.34729929e-01 1.35372353e-01 1.36016459e-01 1.36662246e-01 + 1.37309713e-01 1.37958862e-01 1.38609692e-01 1.39262202e-01 1.39916393e-01 + 1.40572264e-01 1.41229815e-01 1.41889046e-01 1.42549958e-01 1.43212549e-01 + 1.43876819e-01 1.44542770e-01 1.45210399e-01 1.45879708e-01 1.46550695e-01 + 1.47223362e-01 1.47897707e-01 1.48573731e-01 1.49251433e-01 1.49930814e-01 + 1.50611872e-01 1.51294609e-01 1.51979023e-01 1.52665115e-01 1.53352885e-01 + 1.54042332e-01 1.54733456e-01 1.55426257e-01 1.56120735e-01 1.56816890e-01 + 1.57514721e-01 1.58214229e-01 1.58915413e-01 1.59618273e-01 1.60322809e-01 + 1.61029020e-01 1.61736908e-01 1.62446471e-01 1.63157709e-01 1.63870622e-01 + 1.64585210e-01 1.65301473e-01 1.66019411e-01 1.66739023e-01 1.67460310e-01 + 1.68183271e-01 1.68907906e-01 1.69634214e-01 1.70362197e-01 1.71091853e-01 + 1.71823182e-01 1.72556184e-01 1.73290860e-01 1.74027208e-01 1.74765229e-01 + 1.75504923e-01 1.76246289e-01 1.76989327e-01 1.77734037e-01 1.78480419e-01 + 1.79228473e-01 1.79978199e-01 1.80729595e-01 1.81482663e-01 1.82237402e-01 + 1.82993812e-01 1.83751893e-01 1.84511644e-01 1.85273065e-01 1.86036157e-01 + 1.86800919e-01 1.87567350e-01 1.88335451e-01 1.89105222e-01 1.89876662e-01 + 1.90649771e-01 1.91424549e-01 1.92200996e-01 1.92979112e-01 1.93758896e-01 + 1.94540348e-01 1.95323469e-01 1.96108257e-01 1.96894713e-01 1.97682837e-01 + 1.98472628e-01 1.99264087e-01 2.00057212e-01 2.00852004e-01 2.01648463e-01 + 2.02446589e-01 2.03246381e-01 2.04047839e-01 2.04850963e-01 2.05655753e-01 + 2.06462208e-01 2.07270329e-01 2.08080115e-01 2.08891567e-01 2.09704683e-01 + 2.10519464e-01 2.11335909e-01 2.12154019e-01 2.12973793e-01 2.13795231e-01 + 2.14618333e-01 2.15443098e-01 2.16269527e-01 2.17097619e-01 2.17927374e-01 + 2.18758792e-01 2.19591873e-01 2.20426616e-01 2.21263022e-01 2.22101090e-01 + 2.22940819e-01 2.23782211e-01 2.24625264e-01 2.25469978e-01 2.26316354e-01 + 2.27164390e-01 2.28014088e-01 2.28865446e-01 2.29718464e-01 2.30573143e-01 + 2.31429482e-01 2.32287480e-01 2.33147139e-01 2.34008457e-01 2.34871434e-01 + 2.35736070e-01 2.36602365e-01 2.37470319e-01 2.38339931e-01 2.39211202e-01 + 2.40084131e-01 2.40958717e-01 2.41834962e-01 2.42712864e-01 2.43592423e-01 + 2.44473640e-01 2.45356513e-01 2.46241044e-01 2.47127230e-01 2.48015074e-01 + 2.48904573e-01 2.49795728e-01 2.50688539e-01 2.51583006e-01 2.52479128e-01 + 2.53376905e-01 2.54276337e-01 2.55177424e-01 2.56080166e-01 2.56984562e-01 + 2.57890612e-01 2.58798316e-01 2.59707674e-01 2.60618685e-01 2.61531350e-01 + 2.62445667e-01 2.63361638e-01 2.64279262e-01 2.65198538e-01 2.66119466e-01 + 2.67042047e-01 2.67966279e-01 2.68892164e-01 2.69819699e-01 2.70748886e-01 + 2.71679724e-01 2.72612213e-01 2.73546353e-01 2.74482143e-01 2.75419584e-01 + 2.76358674e-01 2.77299415e-01 2.78241805e-01 2.79185844e-01 2.80131533e-01 + 2.81078870e-01 2.82027857e-01 2.82978492e-01 2.83930775e-01 2.84884707e-01 + 2.85840287e-01 2.86797514e-01 2.87756389e-01 2.88716911e-01 2.89679080e-01 + 2.90642896e-01 2.91608359e-01 2.92575468e-01 2.93544224e-01 2.94514625e-01 + 2.95486673e-01 2.96460366e-01 2.97435704e-01 2.98412687e-01 2.99391316e-01 + 3.00371589e-01 3.01353507e-01 3.02337069e-01 3.03322275e-01 3.04309125e-01 + 3.05297618e-01 3.06287755e-01 3.07279535e-01 3.08272958e-01 3.09268024e-01 + 3.10264733e-01 3.11263084e-01 3.12263076e-01 3.13264711e-01 3.14267987e-01 + 3.15272905e-01 3.16279464e-01 3.17287664e-01 3.18297505e-01 3.19308986e-01 + 3.20322108e-01 3.21336869e-01 3.22353271e-01 3.23371312e-01 3.24390992e-01 + 3.25412312e-01 3.26435271e-01 3.27459868e-01 3.28486104e-01 3.29513978e-01 + 3.30543490e-01 3.31574640e-01 3.32607428e-01 3.33641852e-01 3.34677914e-01 + 3.35715613e-01 3.36754949e-01 3.37795921e-01 3.38838529e-01 3.39882774e-01 + 3.40928653e-01 3.41976169e-01 3.43025320e-01 3.44076105e-01 3.45128526e-01 + 3.46182581e-01 3.47238271e-01 3.48295594e-01 3.49354552e-01 3.50415143e-01 + 3.51477368e-01 3.52541225e-01 3.53606716e-01 3.54673839e-01 3.55742595e-01 + 3.56812983e-01 3.57885003e-01 3.58958655e-01 3.60033939e-01 3.61110853e-01 + 3.62189399e-01 3.63269575e-01 3.64351382e-01 3.65434820e-01 3.66519887e-01 + 3.67606584e-01 3.68694911e-01 3.69784868e-01 3.70876453e-01 3.71969667e-01 + 3.73064510e-01 3.74160981e-01 3.75259081e-01 3.76358808e-01 3.77460163e-01 + 3.78563145e-01 3.79667755e-01 3.80773992e-01 3.81881855e-01 3.82991344e-01 + 3.84102460e-01 3.85215202e-01 3.86329570e-01 3.87445563e-01 3.88563181e-01 + 3.89682424e-01 3.90803292e-01 3.91925784e-01 3.93049901e-01 3.94175642e-01 + 3.95303006e-01 3.96431994e-01 3.97562605e-01 3.98694839e-01 3.99828696e-01 + 4.00964175e-01 4.02101276e-01 4.03240000e-01 4.04380345e-01 4.05522312e-01 + 4.06665899e-01 4.07811108e-01 4.08957938e-01 4.10106388e-01 4.11256458e-01 + 4.12408148e-01 4.13561458e-01 4.14716388e-01 4.15872936e-01 4.17031104e-01 + 4.18190890e-01 4.19352295e-01 4.20515317e-01 4.21679958e-01 4.22846216e-01 + 4.24014092e-01 4.25183585e-01 4.26354695e-01 4.27527421e-01 4.28701764e-01 + 4.29877723e-01 4.31055298e-01 4.32234488e-01 4.33415294e-01 4.34597715e-01 + 4.35781751e-01 4.36967401e-01 4.38154665e-01 4.39343544e-01 4.40534036e-01 + 4.41726142e-01 4.42919861e-01 4.44115193e-01 4.45312138e-01 4.46510695e-01 + 4.47710864e-01 4.48912645e-01 4.50116038e-01 4.51321043e-01 4.52527658e-01 + 4.53735885e-01 4.54945722e-01 4.56157169e-01 4.57370226e-01 4.58584894e-01 + 4.59801170e-01 4.61019056e-01 4.62238551e-01 4.63459655e-01 4.64682367e-01 + 4.65906688e-01 4.67132616e-01 4.68360152e-01 4.69589295e-01 4.70820046e-01 + 4.72052403e-01 4.73286367e-01 4.74521937e-01 4.75759113e-01 4.76997895e-01 + 4.78238283e-01 4.79480276e-01 4.80723873e-01 4.81969076e-01 4.83215882e-01 + 4.84464293e-01 4.85714308e-01 4.86965926e-01 4.88219148e-01 4.89473972e-01 + 4.90730400e-01 4.91988430e-01 4.93248062e-01 4.94509296e-01 4.95772131e-01 + 4.97036568e-01 4.98302606e-01 4.99570245e-01 5.00839485e-01 5.02110324e-01 + 5.03382764e-01 5.04656804e-01 5.05932442e-01 5.07209680e-01 5.08488517e-01 + 5.09768953e-01 5.11050986e-01 5.12334618e-01 5.13619847e-01 5.14906674e-01 + 5.16195098e-01 5.17485119e-01 5.18776737e-01 5.20069951e-01 5.21364761e-01 + 5.22661167e-01 5.23959168e-01 5.25258764e-01 5.26559955e-01 5.27862741e-01 + 5.29167122e-01 5.30473096e-01 5.31780664e-01 5.33089826e-01 5.34400580e-01 + 5.35712928e-01 5.37026868e-01 5.38342401e-01 5.39659526e-01 5.40978242e-01 + 5.42298550e-01 5.43620449e-01 5.44943939e-01 5.46269020e-01 5.47595691e-01 + 5.48923952e-01 5.50253802e-01 5.51585242e-01 5.52918272e-01 5.54252890e-01 + 5.55589096e-01 5.56926891e-01 5.58266274e-01 5.59607245e-01 5.60949803e-01 + 5.62293948e-01 5.63639680e-01 5.64986999e-01 5.66335903e-01 5.67686394e-01 + 5.69038470e-01 5.70392132e-01 5.71747378e-01 5.73104210e-01 5.74462626e-01 + 5.75822626e-01 5.77184210e-01 5.78547377e-01 5.79912128e-01 5.81278461e-01 + 5.82646378e-01 5.84015876e-01 5.85386957e-01 5.86759620e-01 5.88133864e-01 + 5.89509689e-01 5.90887095e-01 5.92266082e-01 5.93646649e-01 5.95028796e-01 + 5.96412522e-01 5.97797828e-01 5.99184713e-01 6.00573177e-01 6.01963219e-01 + 6.03354840e-01 6.04748038e-01 6.06142814e-01 6.07539167e-01 6.08937097e-01 + 6.10336603e-01 6.11737686e-01 6.13140346e-01 6.14544580e-01 6.15950391e-01 + 6.17357776e-01 6.18766736e-01 6.20177271e-01 6.21589379e-01 6.23003062e-01 + 6.24418319e-01 6.25835148e-01 6.27253551e-01 6.28673526e-01 6.30095073e-01 + 6.31518193e-01 6.32942884e-01 6.34369147e-01 6.35796981e-01 6.37226386e-01 + 6.38657361e-01 6.40089906e-01 6.41524022e-01 6.42959706e-01 6.44396960e-01 + 6.45835783e-01 6.47276175e-01 6.48718135e-01 6.50161663e-01 6.51606758e-01 + 6.53053421e-01 6.54501651e-01 6.55951448e-01 6.57402811e-01 6.58855740e-01 + 6.60310236e-01 6.61766296e-01 6.63223922e-01 6.64683112e-01 6.66143868e-01 + 6.67606187e-01 6.69070070e-01 6.70535517e-01 6.72002527e-01 6.73471100e-01 + 6.74941236e-01 6.76412934e-01 6.77886194e-01 6.79361015e-01 6.80837398e-01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 1.23300000e+01 + 1.00000000e+00 9.75894263e-01 9.53451752e-01 9.32489601e-01 9.12851907e-01 + 8.94404826e-01 8.77032714e-01 8.60635068e-01 8.45124065e-01 8.30422576e-01 + 8.16462554e-01 8.03183696e-01 7.90532350e-01 7.78460602e-01 7.66925506e-01 + 7.55888443e-01 7.45314577e-01 7.35172390e-01 7.25433287e-01 7.16071258e-01 + 7.07062580e-01 6.98385572e-01 6.90020370e-01 6.81948734e-01 6.74153887e-01 + 6.66620364e-01 6.59333880e-01 6.52281224e-01 6.45450150e-01 6.38829295e-01 + 6.32408091e-01 6.26176704e-01 6.20125961e-01 6.14247300e-01 6.08532716e-01 + 6.02974715e-01 5.97566276e-01 5.92300808e-01 5.87172122e-01 5.82174396e-01 + 5.77302151e-01 5.72550221e-01 5.67913735e-01 5.63388093e-01 5.58968948e-01 + 5.54652188e-01 5.50433918e-01 5.46310451e-01 5.42278287e-01 5.38334105e-01 + 5.34474753e-01 5.30697232e-01 5.26998691e-01 5.23376415e-01 5.19827818e-01 + 5.16350438e-01 5.12941922e-01 5.09600027e-01 5.06322612e-01 5.03107629e-01 + 4.99953120e-01 4.96857213e-01 4.93818117e-01 4.90834114e-01 4.87903560e-01 + 4.85024878e-01 4.82196556e-01 4.79417141e-01 4.76685242e-01 4.73999519e-01 + 4.71358685e-01 4.68761505e-01 4.66206788e-01 4.63693390e-01 4.61220209e-01 + 4.58786184e-01 4.56390292e-01 4.54031548e-01 4.51709002e-01 4.49421737e-01 + 4.47168870e-01 4.44949545e-01 4.42762941e-01 4.40608259e-01 4.38484731e-01 + 4.36391613e-01 4.34328187e-01 4.32293756e-01 4.30287649e-01 4.28309213e-01 + 4.26357819e-01 4.24432857e-01 4.22533734e-01 4.20659877e-01 4.18810733e-01 + 4.16985761e-01 4.15184441e-01 4.13406264e-01 4.11650741e-01 4.09917394e-01 + 4.08205761e-01 4.06515390e-01 4.04845847e-01 4.03196706e-01 4.01567556e-01 + 3.99957996e-01 3.98367636e-01 3.96796098e-01 3.95243014e-01 3.93708024e-01 + 3.92190780e-01 3.90690944e-01 3.89208184e-01 3.87742180e-01 3.86292617e-01 + 3.84859191e-01 3.83441605e-01 3.82039569e-01 3.80652800e-01 3.79281024e-01 + 3.77923973e-01 3.76581385e-01 3.75253005e-01 3.73938583e-01 3.72637878e-01 + 3.71350652e-01 3.70076675e-01 3.68815719e-01 3.67567566e-01 3.66332000e-01 + 3.65108810e-01 3.63897792e-01 3.62698745e-01 3.61511473e-01 3.60335785e-01 + 3.59171493e-01 3.58018415e-01 3.56876371e-01 3.55745187e-01 3.54624691e-01 + 3.53514717e-01 3.52415101e-01 3.51325683e-01 3.50246306e-01 3.49176816e-01 + 3.48117064e-01 3.47066903e-01 3.46026189e-01 3.44994782e-01 3.43972542e-01 + 3.42959337e-01 3.41955032e-01 3.40959498e-01 3.39972609e-01 3.38994241e-01 + 3.38024270e-01 3.37062579e-01 3.36109049e-01 3.35163566e-01 3.34226018e-01 + 3.33296293e-01 3.32374284e-01 3.31459885e-01 3.30552992e-01 3.29653502e-01 + 3.28761315e-01 3.27876333e-01 3.26998460e-01 3.26127600e-01 3.25263662e-01 + 3.24406553e-01 3.23556184e-01 3.22712468e-01 3.21875318e-01 3.21044649e-01 + 3.20220378e-01 3.19402424e-01 3.18590706e-01 3.17785145e-01 3.16985665e-01 + 3.16192188e-01 3.15404639e-01 3.14622947e-01 3.13847038e-01 3.13076841e-01 + 3.12312287e-01 3.11553306e-01 3.10799833e-01 3.10051800e-01 3.09309142e-01 + 3.08571795e-01 3.07839697e-01 3.07112784e-01 3.06390997e-01 3.05674275e-01 + 3.04962560e-01 3.04255793e-01 3.03553917e-01 3.02856876e-01 3.02164615e-01 + 3.01477079e-01 3.00794216e-01 3.00115971e-01 2.99442294e-01 2.98773134e-01 + 2.98108439e-01 2.97448161e-01 2.96792252e-01 2.96140662e-01 2.95493345e-01 + 2.94850254e-01 2.94211344e-01 2.93576570e-01 2.92945886e-01 2.92319250e-01 + 2.91696618e-01 2.91077947e-01 2.90463197e-01 2.89852325e-01 2.89245291e-01 + 2.88642055e-01 2.88042577e-01 2.87446820e-01 2.86854743e-01 2.86266311e-01 + 2.85681484e-01 2.85100228e-01 2.84522505e-01 2.83948280e-01 2.83377517e-01 + 2.82810183e-01 2.82246243e-01 2.81685662e-01 2.81128409e-01 2.80574450e-01 + 2.80023753e-01 2.79476286e-01 2.78932017e-01 2.78390916e-01 2.77852951e-01 + 2.77318094e-01 2.76786313e-01 2.76257580e-01 2.75731865e-01 2.75209140e-01 + 2.74689377e-01 2.74172548e-01 2.73658625e-01 2.73147581e-01 2.72639389e-01 + 2.72134024e-01 2.71631458e-01 2.71131667e-01 2.70634624e-01 2.70140305e-01 + 2.69648684e-01 2.69159738e-01 2.68673442e-01 2.68189772e-01 2.67708706e-01 + 2.67230218e-01 2.66754287e-01 2.66280890e-01 2.65810005e-01 2.65341608e-01 + 2.64875680e-01 2.64412197e-01 2.63951138e-01 2.63492483e-01 2.63036211e-01 + 2.62582301e-01 2.62130732e-01 2.61681486e-01 2.61234541e-01 2.60789879e-01 + 2.60347479e-01 2.59907323e-01 2.59469393e-01 2.59033668e-01 2.58600131e-01 + 2.58168764e-01 2.57739549e-01 2.57312467e-01 2.56887501e-01 2.56464633e-01 + 2.56043847e-01 2.55625126e-01 2.55208452e-01 2.54793809e-01 2.54381180e-01 + 2.53970550e-01 2.53561902e-01 2.53155220e-01 2.52750489e-01 2.52347693e-01 + 2.51946816e-01 2.51547844e-01 2.51150761e-01 2.50755553e-01 2.50362204e-01 + 2.49970701e-01 2.49581029e-01 2.49193173e-01 2.48807120e-01 2.48422856e-01 + 2.48040367e-01 2.47659639e-01 2.47280658e-01 2.46903413e-01 2.46527888e-01 + 2.46154072e-01 2.45781951e-01 2.45411513e-01 2.45042745e-01 2.44675634e-01 + 2.44310168e-01 2.43946335e-01 2.43584122e-01 2.43223518e-01 2.42864511e-01 + 2.42507089e-01 2.42151241e-01 2.41796954e-01 2.41444218e-01 2.41093021e-01 + 2.40743352e-01 2.40395201e-01 2.40048555e-01 2.39703404e-01 2.39359739e-01 + 2.39017547e-01 2.38676818e-01 2.38337542e-01 2.37999710e-01 2.37663309e-01 + 2.37328332e-01 2.36994766e-01 2.36662603e-01 2.36331833e-01 2.36002446e-01 + 2.35674432e-01 2.35347783e-01 2.35022487e-01 2.34698537e-01 2.34375923e-01 + 2.34054635e-01 2.33734666e-01 2.33416004e-01 2.33098643e-01 2.32782573e-01 + 2.32467784e-01 2.32154270e-01 2.31842020e-01 2.31531028e-01 2.31221283e-01 + 2.30912778e-01 2.30605504e-01 2.30299454e-01 2.29994620e-01 2.29690992e-01 + 2.29388564e-01 2.29087328e-01 2.28787275e-01 2.28488398e-01 2.28190689e-01 + 2.27894141e-01 2.27598746e-01 2.27304497e-01 2.27011386e-01 2.26719406e-01 + 2.26428550e-01 2.26138810e-01 2.25850180e-01 2.25562652e-01 2.25276219e-01 + 2.24990875e-01 2.24706613e-01 2.24423425e-01 2.24141305e-01 2.23860246e-01 + 2.23580243e-01 2.23301287e-01 2.23023372e-01 2.22746493e-01 2.22470643e-01 + 2.22195814e-01 2.21922002e-01 2.21649200e-01 2.21377401e-01 2.21106599e-01 + 2.20836789e-01 2.20567964e-01 2.20300119e-01 2.20033247e-01 2.19767342e-01 + 2.19502400e-01 2.19238413e-01 2.18975376e-01 2.18713284e-01 2.18452130e-01 + 2.18191910e-01 2.17932618e-01 2.17674247e-01 2.17416794e-01 2.17160252e-01 + 2.16904616e-01 2.16649880e-01 2.16396040e-01 2.16143090e-01 2.15891025e-01 + 2.15639840e-01 2.15389530e-01 2.15140089e-01 2.14891513e-01 2.14643796e-01 + 2.14396935e-01 2.14150923e-01 2.13905756e-01 2.13661429e-01 2.13417937e-01 + 2.13175276e-01 2.12933441e-01 2.12692427e-01 2.12452229e-01 2.12212843e-01 + 2.11974265e-01 2.11736490e-01 2.11499513e-01 2.11263330e-01 2.11027936e-01 + 2.10793328e-01 2.10559500e-01 2.10326449e-01 2.10094169e-01 2.09862658e-01 + 2.09631910e-01 2.09401922e-01 2.09172689e-01 2.08944208e-01 2.08716473e-01 + 2.08489481e-01 2.08263229e-01 2.08037711e-01 2.07812924e-01 2.07588865e-01 + 2.07365528e-01 2.07142911e-01 2.06921010e-01 2.06699820e-01 2.06479337e-01 + 2.06259559e-01 2.06040481e-01 2.05822100e-01 2.05604412e-01 2.05387413e-01 + 2.05171099e-01 2.04955468e-01 2.04740515e-01 2.04526237e-01 2.04312630e-01 + 2.04099691e-01 2.03887417e-01 2.03675803e-01 2.03464847e-01 2.03254545e-01 + 2.03044894e-01 2.02835891e-01 2.02627531e-01 2.02419812e-01 2.02212731e-01 + 2.02006284e-01 2.01800468e-01 2.01595280e-01 2.01390716e-01 2.01186774e-01 + 2.00983451e-01 2.00780742e-01 2.00578646e-01 2.00377158e-01 2.00176277e-01 + 1.99975998e-01 1.99776320e-01 1.99577238e-01 1.99378751e-01 1.99180854e-01 + 1.98983546e-01 1.98786822e-01 1.98590681e-01 1.98395120e-01 1.98200135e-01 + 1.98005724e-01 1.97811884e-01 1.97618612e-01 1.97425905e-01 1.97233761e-01 + 1.97042177e-01 1.96851151e-01 1.96660678e-01 1.96470758e-01 1.96281387e-01 + 1.96092562e-01 1.95904281e-01 1.95716541e-01 1.95529341e-01 1.95342676e-01 + 1.95156545e-01 1.94970945e-01 1.94785873e-01 1.94601328e-01 1.94417306e-01 + 1.94233805e-01 1.94050823e-01 1.93868357e-01 1.93686404e-01 1.93504963e-01 + 1.93324031e-01 1.93143606e-01 1.92963685e-01 1.92784265e-01 1.92605345e-01 + 1.92426923e-01 1.92248995e-01 1.92071560e-01 1.91894616e-01 1.91718159e-01 + 1.91542189e-01 1.91366702e-01 1.91191696e-01 1.91017170e-01 1.90843121e-01 + 1.90669546e-01 1.90496445e-01 1.90323814e-01 1.90151652e-01 1.89979956e-01 + 1.89808724e-01 1.89637954e-01 1.89467644e-01 1.89297793e-01 1.89128397e-01 + 1.88959456e-01 1.88790966e-01 1.88622926e-01 1.88455335e-01 1.88288189e-01 + 1.88121487e-01 1.87955227e-01 1.87789407e-01 1.87624025e-01 1.87459079e-01 + 1.87294568e-01 1.87130489e-01 1.86966840e-01 1.86803620e-01 1.86640827e-01 + 1.86478458e-01 1.86316513e-01 1.86154989e-01 1.85993884e-01 1.85833197e-01 + 1.85672925e-01 1.85513068e-01 1.85353622e-01 1.85194587e-01 1.85035961e-01 + 1.84877742e-01 1.84719927e-01 1.84562517e-01 1.84405508e-01 1.84248899e-01 + 1.84092688e-01 1.83936874e-01 1.83781455e-01 1.83626429e-01 1.83471795e-01 + 1.83317551e-01 1.83163695e-01 1.83010226e-01 1.82857142e-01 1.82704442e-01 + 1.82552123e-01 1.82400185e-01 1.82248626e-01 1.82097444e-01 1.81946637e-01 + 1.81796204e-01 1.81646144e-01 1.81496455e-01 1.81347136e-01 1.81198184e-01 + 1.81049599e-01 1.80901378e-01 1.80753522e-01 1.80606027e-01 1.80458892e-01 + 1.80312117e-01 1.80165699e-01 1.80019637e-01 1.79873930e-01 1.79728576e-01 + 1.79583574e-01 1.79438922e-01 1.79294620e-01 1.79150665e-01 1.79007056e-01 + 1.78863792e-01 1.78720871e-01 1.78578292e-01 1.78436054e-01 1.78294156e-01 + 1.78152595e-01 1.78011371e-01 1.77870482e-01 1.77729928e-01 1.77589706e-01 + 1.77449815e-01 1.77310255e-01 1.77171023e-01 1.77032119e-01 1.76893540e-01 + 1.76755287e-01 1.76617358e-01 1.76479751e-01 1.76342465e-01 1.76205499e-01 + 1.76068851e-01 1.75932521e-01 1.75796507e-01 1.75660808e-01 1.75525423e-01 + 1.75390351e-01 1.75255589e-01 1.75121138e-01 1.74986996e-01 1.74853162e-01 + 1.74719634e-01 1.74586412e-01 1.74453494e-01 1.74320879e-01 1.74188566e-01 + 1.74056554e-01 1.73924842e-01 1.73793428e-01 1.73662312e-01 1.73531492e-01 + 1.73400967e-01 1.73270736e-01 1.73140798e-01 1.73011152e-01 1.72881797e-01 + 1.72752732e-01 1.72623955e-01 1.72495466e-01 1.72367263e-01 1.72239346e-01 + 1.72111713e-01 1.71984363e-01 1.71857296e-01 1.71730510e-01 1.71604004e-01 + 1.71477777e-01 1.71351828e-01 1.71226157e-01 1.71100761e-01 1.70975641e-01 + 1.70850795e-01 1.70726222e-01 1.70601921e-01 1.70477891e-01 1.70354131e-01 + 1.70230640e-01 1.70107418e-01 1.69984462e-01 1.69861773e-01 1.69739349e-01 + 1.69617190e-01 1.69495294e-01 1.69373660e-01 1.69252288e-01 1.69131176e-01 + 1.69010324e-01 1.68889731e-01 1.68769395e-01 1.68649317e-01 1.68529494e-01 + 1.68409926e-01 1.68290613e-01 1.68171552e-01 1.68052744e-01 1.67934188e-01 + 1.67815882e-01 1.67697825e-01 1.67580018e-01 1.67462458e-01 1.67345146e-01 + 1.67228079e-01 1.67111258e-01 1.66994682e-01 1.66878349e-01 1.66762259e-01 + 1.66646411e-01 1.66530804e-01 1.66415437e-01 1.66300309e-01 1.66185421e-01 + 1.66070770e-01 1.65956356e-01 1.65842178e-01 1.65728235e-01 1.65614527e-01 + 1.65501053e-01 1.65387812e-01 1.65274803e-01 1.65162025e-01 1.65049477e-01 + 1.64937160e-01 1.64825071e-01 1.64713211e-01 1.64601578e-01 1.64490172e-01 + 1.64378991e-01 1.64268036e-01 1.64157305e-01 1.64046798e-01 1.63936514e-01 + 1.63826452e-01 1.63716611e-01 1.63606991e-01 1.63497591e-01 1.63388409e-01 + 1.63279447e-01 1.63170702e-01 1.63062174e-01 1.62953862e-01 1.62845766e-01 + 1.62737885e-01 1.62630217e-01 1.62522764e-01 1.62415523e-01 1.62308493e-01 + 1.62201676e-01 1.62095069e-01 1.61988671e-01 1.61882483e-01 1.61776504e-01 + 1.61670732e-01 1.61565168e-01 1.61459810e-01 1.61354658e-01 1.61249711e-01 + 1.61144969e-01 1.61040431e-01 1.60936095e-01 1.60831963e-01 1.60728032e-01 + 1.60624302e-01 1.60520773e-01 1.60417444e-01 1.60314314e-01 1.60211383e-01 + 1.60108650e-01 1.60006114e-01 1.59903775e-01 1.59801632e-01 1.59699684e-01 + 1.59597932e-01 1.59496373e-01 1.59395009e-01 1.59293837e-01 1.59192858e-01 + 1.59092070e-01 1.58991474e-01 1.58891068e-01 1.58790852e-01 1.58690826e-01 + 1.58590988e-01 1.58491339e-01 1.58391877e-01 1.58292602e-01 1.58193514e-01 + 1.58094612e-01 1.57995894e-01 1.57897362e-01 1.57799013e-01 1.57700849e-01 + 1.57602867e-01 1.57505067e-01 1.57407450e-01 1.57310013e-01 1.57212758e-01 + 1.57115682e-01 1.57018786e-01 1.56922069e-01 1.56825531e-01 1.56729171e-01 + 1.56632988e-01 1.56536982e-01 1.56441152e-01 1.56345498e-01 1.56250019e-01 + 1.56154715e-01 1.56059585e-01 1.55964629e-01 1.55869846e-01 1.55775235e-01 + 1.55680797e-01 1.55586530e-01 1.55492434e-01 1.55398509e-01 1.55304754e-01 + 1.55211168e-01 1.55117751e-01 1.55024502e-01 1.54931422e-01 1.54838509e-01 + 1.54745763e-01 1.54653183e-01 1.54560770e-01 1.54468522e-01 1.54376439e-01 + 1.54284520e-01 1.54192765e-01 1.54101174e-01 1.54009746e-01 1.53918481e-01 + 1.53827377e-01 1.53736435e-01 1.53645654e-01 1.53555034e-01 1.53464574e-01 + 1.53374274e-01 1.53284132e-01 1.53194150e-01 1.53104326e-01 1.53014660e-01 + 1.52925151e-01 1.52835798e-01 1.52746603e-01 1.52657563e-01 1.52568679e-01 + 1.52479950e-01 1.52391376e-01 1.52302955e-01 1.52214689e-01 1.52126576e-01 + 1.52038615e-01 1.51950807e-01 1.51863151e-01 1.51775647e-01 1.51688293e-01 + 1.51601091e-01 1.51514038e-01 1.51427135e-01 1.51340382e-01 1.51253778e-01 + 1.51167322e-01 1.51081014e-01 1.50994854e-01 1.50908841e-01 1.50822975e-01 + 1.50737255e-01 1.50651681e-01 1.50566253e-01 1.50480970e-01 1.50395832e-01 + 1.50310838e-01 1.50225988e-01 1.50141281e-01 1.50056718e-01 1.49972298e-01 + 1.49888019e-01 1.49803883e-01 1.49719888e-01 1.49636035e-01 1.49552322e-01 + 1.49468749e-01 1.49385316e-01 1.49302023e-01 1.49218869e-01 1.49135854e-01 + 1.49052977e-01 1.48970239e-01 1.48887638e-01 1.48805174e-01 1.48722847e-01 + 1.48640656e-01 1.48558602e-01 1.48476683e-01 1.48394900e-01 1.48313252e-01 + 1.48231738e-01 1.48150359e-01 1.48069113e-01 1.47988001e-01 1.47907022e-01 + 1.47826176e-01 1.47745463e-01 1.47664881e-01 1.47584431e-01 1.47504113e-01 + 1.47423925e-01 1.47343868e-01 1.47263942e-01 1.47184145e-01 1.47104478e-01 + 1.47024940e-01 1.46945531e-01 1.46866251e-01 1.46787099e-01 1.46708074e-01 + 1.46629177e-01 1.46550407e-01 1.46471764e-01 1.46393248e-01 1.46314857e-01 + 1.46236593e-01 1.46158454e-01 1.46080440e-01 1.46002551e-01 1.45924786e-01 + 1.45847145e-01 1.45769628e-01 1.45692235e-01 1.45614965e-01 1.45537817e-01 + 1.45460792e-01 1.45383890e-01 1.45307109e-01 1.45230449e-01 1.45153911e-01 + 1.45077494e-01 1.45001197e-01 1.44925021e-01 1.44848964e-01 1.44773027e-01 + 1.44697209e-01 1.44621511e-01 1.44545931e-01 1.44470469e-01 1.44395126e-01 + 1.44319900e-01 1.44244791e-01 1.44169800e-01 1.44094926e-01 1.44020168e-01 + 1.43945527e-01 1.43871001e-01 1.43796591e-01 1.43722296e-01 1.43648117e-01 + 1.43574052e-01 1.43500101e-01 1.43426265e-01 1.43352542e-01 1.43278934e-01 + 1.43205438e-01 1.43132055e-01 1.43058785e-01 1.42985628e-01 1.42912583e-01 + 1.42839649e-01 1.42766827e-01 1.42694116e-01 1.42621516e-01 1.42549027e-01 + 1.42476649e-01 1.42404380e-01 1.42332222e-01 1.42260172e-01 1.42188233e-01 + 1.42116402e-01 1.42044680e-01 1.41973066e-01 1.41901561e-01 1.41830164e-01 + 1.41758874e-01 1.41687692e-01 1.41616617e-01 1.41545648e-01 1.41474786e-01 + 1.41404031e-01 1.41333382e-01 1.41262838e-01 1.41192400e-01 1.41122067e-01 + 1.41051839e-01 1.40981716e-01 1.40911698e-01 1.40841783e-01 1.40771973e-01 + 1.40702266e-01 1.40632663e-01 1.40563163e-01 1.40493766e-01 1.40424471e-01 + 1.40355279e-01 1.40286189e-01 1.40217202e-01 1.40148315e-01 1.40079531e-01 + 1.40010847e-01 1.39942264e-01 1.39873782e-01 1.39805401e-01 1.39737119e-01 + 1.39668938e-01 1.39600856e-01 1.39532874e-01 1.39464991e-01 1.39397207e-01 + 1.39329522e-01 1.39261935e-01 1.39194446e-01 1.39127056e-01 1.39059763e-01 + 1.38992568e-01 1.38925470e-01 1.38858469e-01 1.38791565e-01 1.38724758e-01 + 1.38658047e-01 1.38591432e-01 1.38524913e-01 1.38458490e-01 1.38392162e-01 + 1.38325930e-01 1.38259792e-01 1.38193750e-01 1.38127801e-01 1.38061947e-01 + 1.37996188e-01 1.37930522e-01 1.37864950e-01 1.37799471e-01 1.37734085e-01 + 1.37668793e-01 1.37603593e-01 1.37538485e-01 1.37473471e-01 1.37408548e-01 + 1.37343717e-01 1.37278977e-01 1.37214330e-01 1.37149773e-01 1.37085308e-01 + 1.37020933e-01 1.36956649e-01 1.36892455e-01 1.36828351e-01 1.36764338e-01 + 1.36700414e-01 1.36636580e-01 1.36572835e-01 1.36509179e-01 1.36445612e-01 + 1.36382134e-01 1.36318745e-01 1.36255443e-01 1.36192230e-01 1.36129105e-01 + 1.36066067e-01 1.36003117e-01 1.35940254e-01 1.35877478e-01 1.35814789e-01 + 1.35752187e-01 1.35689672e-01 1.35627242e-01 1.35564899e-01 1.35502641e-01 + 1.35440470e-01 1.35378384e-01 1.35316383e-01 1.35254467e-01 1.35192636e-01 + 1.35130890e-01 1.35069228e-01 1.35007651e-01 1.34946158e-01 1.34884748e-01 + 1.34823423e-01 1.34762181e-01 1.34701022e-01 1.34639947e-01 1.34578955e-01 + 1.34518045e-01 1.34457218e-01 1.34396474e-01 1.34335812e-01 1.34275232e-01 + 1.34214733e-01 1.34154317e-01 1.34093982e-01 1.34033728e-01 1.33973556e-01 + 1.33913464e-01 1.33853453e-01 1.33793523e-01 1.33733673e-01 1.33673904e-01 + 1.33614214e-01 1.33554605e-01 1.33495075e-01 1.33435625e-01 1.33376254e-01 + 1.33316962e-01 1.33257749e-01 1.33198615e-01 1.33139560e-01 1.33080583e-01 + 1.33021685e-01 1.32962864e-01 1.32904122e-01 1.32845457e-01 1.32786870e-01 + 1.32728361e-01 1.32669928e-01 1.32611573e-01 1.32553295e-01 1.32495093e-01 + 1.32436968e-01 1.32378920e-01 1.32320948e-01 1.32263052e-01 1.32205232e-01 + 1.32147487e-01 1.32089818e-01 1.32032225e-01 1.31974707e-01 1.31917264e-01 + 1.31859896e-01 1.31802603e-01 1.31745384e-01 1.31688240e-01 1.31631170e-01 + 1.31574174e-01 1.31517252e-01 1.31460404e-01 1.31403630e-01 1.31346929e-01 + 1.31290301e-01 1.31233747e-01 1.31177266e-01 1.31120857e-01 1.31064522e-01 + 1.31008258e-01 1.30952068e-01 1.30895949e-01 1.30839903e-01 1.30783928e-01 + 1.30728025e-01 1.30672194e-01 1.30616435e-01 1.30560746e-01 1.30505129e-01 + 1.30449583e-01 1.30394108e-01 1.30338703e-01 1.30283369e-01 1.30228105e-01 + 1.30172912e-01 1.30117789e-01 1.30062736e-01 1.30007752e-01 1.29952839e-01 + 1.29897994e-01 1.29843219e-01 1.29788514e-01 1.29733877e-01 1.29679310e-01 + 1.29624811e-01 1.29570381e-01 1.29516019e-01 1.29461726e-01 1.29407501e-01 + 1.29353344e-01 1.29299255e-01 1.29245234e-01 1.29191280e-01 1.29137394e-01 + 1.29083575e-01 1.29029824e-01 1.28976140e-01 1.28922522e-01 1.28868972e-01 + 1.28815488e-01 1.28762070e-01 1.28708719e-01 1.28655435e-01 1.28602216e-01 + 1.28549063e-01 1.28495977e-01 1.28442955e-01 1.28390000e-01 1.28337110e-01 + 1.28284285e-01 1.28231526e-01 1.28178831e-01 1.28126202e-01 1.28073637e-01 + 1.28021137e-01 1.27968701e-01 1.27916330e-01 1.27864023e-01 1.27811780e-01 + 1.27759601e-01 1.27707486e-01 1.27655434e-01 1.27603447e-01 1.27551522e-01 + 1.27499661e-01 1.27447864e-01 1.27396129e-01 1.27344457e-01 1.27292848e-01 + 1.27241302e-01 1.27189818e-01 1.27138397e-01 1.27087038e-01 1.27035742e-01 + 1.26984507e-01 1.26933334e-01 1.26882223e-01 1.26831174e-01 1.26780187e-01 + 1.26729260e-01 1.26678396e-01 1.26627592e-01 1.26576849e-01 1.26526168e-01 + 1.26475547e-01 1.26424987e-01 1.26374487e-01 1.26324048e-01 1.26273670e-01 + 1.26223351e-01 1.26173093e-01 1.26122894e-01 1.26072756e-01 1.26022677e-01 + 1.25972658e-01 1.25922698e-01 1.25872798e-01 1.25822957e-01 1.25773176e-01 + 1.25723453e-01 1.25673789e-01 1.25624184e-01 1.25574638e-01 1.25525150e-01 + 1.25475721e-01 1.25426350e-01 1.25377037e-01 1.25327782e-01 1.25278586e-01 + 1.25229447e-01 1.25180366e-01 1.25131343e-01 1.25082377e-01 1.25033469e-01 + 1.24984618e-01 1.24935824e-01 1.24887088e-01 1.24838408e-01 1.24789785e-01 + 1.24741219e-01 1.24692710e-01 1.24644257e-01 1.24595861e-01 1.24547521e-01 + 1.24499237e-01 1.24451010e-01 1.24402838e-01 1.24354722e-01 1.24306662e-01 + 1.24258658e-01 1.24210709e-01 1.24162816e-01 1.24114978e-01 1.24067195e-01 + 1.24019468e-01 1.23971795e-01 1.23924178e-01 1.23876615e-01 1.23829107e-01 + 1.23781654e-01 1.23734255e-01 1.23686910e-01 1.23639620e-01 1.23592384e-01 + 1.23545202e-01 1.23498075e-01 1.23451001e-01 1.23403980e-01 1.23357014e-01 + 1.23310101e-01 1.23263242e-01 1.23216436e-01 1.23169683e-01 1.23122983e-01 + 1.23076337e-01 1.23029743e-01 1.22983202e-01 1.22936715e-01 1.22890279e-01 + 1.22843897e-01 1.22797567e-01 1.22751289e-01 1.22705063e-01 1.22658890e-01 + 1.22612769e-01 1.22566700e-01 1.22520682e-01 1.22474717e-01 1.22428803e-01 + 1.22382941e-01 1.22337130e-01 1.22291371e-01 1.22245663e-01 1.22200006e-01 + 1.22154400e-01 1.22108845e-01 1.22063342e-01 1.22017889e-01 1.21972487e-01 + 1.21927135e-01 1.21881834e-01 1.21836584e-01 1.21791383e-01 1.21746234e-01 + 1.21701134e-01 1.21656084e-01 1.21611085e-01 1.21566135e-01 1.21521235e-01 + 1.21476385e-01 1.21431584e-01 1.21386833e-01 1.21342131e-01 1.21297479e-01 + 1.21252876e-01 1.21208322e-01 1.21163817e-01 1.21119362e-01 1.21074955e-01 + 1.21030597e-01 1.20986287e-01 1.20942026e-01 1.20897814e-01 1.20853651e-01 + 1.20809535e-01 1.20765468e-01 1.20721449e-01 1.20677478e-01 1.20633555e-01 + 1.20589681e-01 1.20545854e-01 1.20502074e-01 1.20458343e-01 1.20414659e-01 + 1.20371022e-01 1.20327433e-01 1.20283891e-01 1.20240396e-01 1.20196949e-01 + 1.20153549e-01 1.20110195e-01 1.20066889e-01 1.20023629e-01 1.19980416e-01 + 1.19937250e-01 1.19894130e-01 1.19851056e-01 1.19808030e-01 1.19765049e-01 + 1.19722115e-01 1.19679226e-01 1.19636384e-01 1.19593588e-01 1.19550838e-01 + 1.19508133e-01 1.19465474e-01 1.19422861e-01 1.19380294e-01 1.19337772e-01 + 1.19295295e-01 1.19252863e-01 1.19210477e-01 1.19168136e-01 1.19125841e-01 + 1.19083590e-01 1.19041384e-01 1.18999223e-01 1.18957106e-01 1.18915035e-01 + 1.18873008e-01 1.18831025e-01 1.18789087e-01 1.18747194e-01 1.18705344e-01 + 1.18663539e-01 1.18621778e-01 1.18580061e-01 1.18538388e-01 1.18496759e-01 + 1.18455174e-01 1.18413632e-01 1.18372134e-01 1.18330680e-01 1.18289269e-01 + 1.18247902e-01 1.18206578e-01 1.18165298e-01 1.18124060e-01 1.18082866e-01 + 1.18041715e-01 1.18000607e-01 1.17959541e-01 1.17918519e-01 1.17877539e-01 + 1.17836602e-01 1.17795708e-01 1.17754856e-01 1.17714047e-01 1.17673280e-01 + 1.17632556e-01 1.17591873e-01 1.17551233e-01 1.17510635e-01 1.17470079e-01 + 1.17429565e-01 1.17389093e-01 1.17348662e-01 1.17308274e-01 1.17267927e-01 + 1.17227622e-01 1.17187358e-01 1.17147135e-01 1.17106955e-01 1.17066815e-01 + 1.17026717e-01 1.16986659e-01 1.16946643e-01 1.16906668e-01 1.16866734e-01 + 1.16826841e-01 1.16786988e-01 1.16747177e-01 1.16707406e-01 1.16667676e-01 + 1.16627986e-01 1.16588337e-01 1.16548728e-01 1.16509159e-01 1.16469631e-01 + 1.16430143e-01 1.16390695e-01 1.16351287e-01 1.16311919e-01 1.16272591e-01 + 1.16233303e-01 1.16194055e-01 1.16154846e-01 1.16115678e-01 1.16076548e-01 + 1.16037459e-01 1.15998408e-01 1.15959397e-01 1.15920426e-01 1.15881494e-01 + 1.15842601e-01 1.15803747e-01 1.15764932e-01 1.15726156e-01 1.15687419e-01 + 1.15648721e-01 1.15610062e-01 1.15571441e-01 1.15532859e-01 1.15494316e-01 + 1.15455812e-01 1.15417345e-01 1.15378918e-01 1.15340528e-01 1.15302177e-01 + 1.15263864e-01 1.15225590e-01 1.15187353e-01 1.15149155e-01 1.15110994e-01 + 1.15072871e-01 1.15034786e-01 1.14996739e-01 1.14958730e-01 1.14920759e-01 + 1.14882824e-01 1.14844928e-01 1.14807069e-01 1.14769247e-01 1.14731463e-01 + 1.14693716e-01 1.14656006e-01 1.14618334e-01 1.14580699e-01 1.14543100e-01 + 1.14505539e-01 1.14468014e-01 1.14430527e-01 1.14393076e-01 1.14355662e-01 + 1.14318284e-01 1.14280944e-01 1.14243640e-01 1.14206372e-01 1.14169141e-01 + 1.14131946e-01 1.14094787e-01 1.14057665e-01 1.14020579e-01 1.13983529e-01 + 1.13946515e-01 1.13909538e-01 1.13872596e-01 1.13835690e-01 1.13798820e-01 + 1.13761986e-01 1.13725188e-01 1.13688425e-01 1.13651698e-01 1.13615006e-01 + 1.13578350e-01 1.13541730e-01 1.13505144e-01 1.13468595e-01 1.13432080e-01 + 1.13395601e-01 1.13359156e-01 1.13322747e-01 1.13286373e-01 1.13250035e-01 + 1.13213730e-01 1.13177461e-01 1.13141227e-01 1.13105028e-01 1.13068863e-01 + 1.13032733e-01 1.12996637e-01 1.12960576e-01 1.12924550e-01 1.12888558e-01 + 1.12852600e-01 1.12816677e-01 1.12780788e-01 1.12744933e-01 1.12709112e-01 + 1.12673326e-01 1.12637574e-01 1.12601855e-01 1.12566171e-01 1.12530520e-01 + 1.12494904e-01 1.12459321e-01 1.12423772e-01 1.12388256e-01 1.12352774e-01 + 1.12317326e-01 1.12281911e-01 1.12246530e-01 1.12211182e-01 1.12175868e-01 + 1.12140587e-01 1.12105339e-01 1.12070125e-01 1.12034943e-01 1.11999795e-01 + 1.11964679e-01 1.11929597e-01 1.11894548e-01 1.11859532e-01 1.11824548e-01 + 1.11789597e-01 1.11754679e-01 1.11719794e-01 1.11684941e-01 1.11650121e-01 + 1.11615334e-01 1.11580579e-01 1.11545856e-01 1.11511166e-01 1.11476508e-01 + 1.11441883e-01 1.11407289e-01 1.11372728e-01 1.11338199e-01 1.11303703e-01 + 1.11269238e-01 1.11234805e-01 1.11200404e-01 1.11166035e-01 1.11131698e-01 + 1.11097393e-01 1.11063119e-01 1.11028877e-01 1.10994667e-01 1.10960489e-01 + 1.10926342e-01 1.10892226e-01 1.10858142e-01 1.10824089e-01 1.10790068e-01 + 1.10756078e-01 1.10722119e-01 1.10688192e-01 1.10654295e-01 1.10620430e-01 + 1.10586596e-01 1.10552793e-01 1.10519021e-01 1.10485279e-01 1.10451569e-01 + 1.10417890e-01 1.10384241e-01 1.10350623e-01 1.10317036e-01 1.10283479e-01 + 1.10249953e-01 1.10216458e-01 1.10182993e-01 1.10149558e-01 1.10116154e-01 + 1.10082780e-01 1.10049437e-01 1.10016124e-01 1.09982841e-01 1.09949588e-01 + 1.09916366e-01 1.09883174e-01 1.09850011e-01 1.09816879e-01 1.09783776e-01 + 1.09750704e-01 1.09717661e-01 1.09684648e-01 1.09651665e-01 1.09618712e-01 + 1.09585789e-01 1.09552895e-01 1.09520030e-01 1.09487196e-01 1.09454390e-01 + 1.09421615e-01 1.09388868e-01 1.09356151e-01 1.09323464e-01 1.09290805e-01 + 1.09258176e-01 1.09225576e-01 1.09193006e-01 1.09160464e-01 1.09127951e-01 + 1.09095468e-01 1.09063013e-01 1.09030588e-01 1.08998191e-01 1.08965824e-01 + 1.08933485e-01 1.08901174e-01 1.08868893e-01 1.08836640e-01 1.08804416e-01 + 1.08772220e-01 1.08740054e-01 1.08707915e-01 1.08675805e-01 1.08643724e-01 + 1.08611671e-01 1.08579646e-01 1.08547649e-01 1.08515681e-01 1.08483741e-01 + 1.08451829e-01 1.08419946e-01 1.08388090e-01 1.08356263e-01 1.08324463e-01 + 1.08292692e-01 1.08260948e-01 1.08229233e-01 1.08197545e-01 1.08165885e-01 + 1.08134253e-01 1.08102648e-01 1.08071072e-01 1.08039523e-01 1.08008001e-01 + 1.07976507e-01 1.07945041e-01 1.07913602e-01 1.07882191e-01 1.07850807e-01 + 1.07819450e-01 1.07788121e-01 1.07756819e-01 1.07725544e-01 1.07694296e-01 + 1.07663076e-01 1.07631883e-01 1.07600717e-01 1.07569578e-01 1.07538466e-01 + 1.07507381e-01 1.07476322e-01 1.07445291e-01 1.07414287e-01 1.07383309e-01 + 1.07352359e-01 1.07321435e-01 1.07290537e-01 1.07259667e-01 1.07228823e-01 + 1.07198005e-01 1.07167214e-01 1.07136450e-01 1.07105712e-01 1.07075001e-01 + 1.07044316e-01 1.07013657e-01 1.06983025e-01 1.06952419e-01 1.06921839e-01 + 1.06891286e-01 1.06860758e-01 1.06830257e-01 1.06799782e-01 1.06769333e-01 + 1.06738910e-01 1.06708513e-01 1.06678142e-01 1.06647796e-01 1.06617477e-01 + 1.06587184e-01 1.06556916e-01 1.06526674e-01 1.06496458e-01 1.06466268e-01 + 1.06436103e-01 1.06405964e-01 1.06375850e-01 1.06345762e-01 1.06315700e-01 + 1.06285663e-01 1.06255651e-01 1.06225665e-01 1.06195704e-01 1.06165769e-01 + 1.06135859e-01 1.06105974e-01 1.06076114e-01 1.06046280e-01 1.06016470e-01 + 1.05986686e-01 1.05956927e-01 1.05927193e-01 1.05897484e-01 1.05867800e-01 + 1.05838141e-01 1.05808507e-01 1.05778897e-01 1.05749313e-01 1.05719753e-01 + 1.05690218e-01 1.05660708e-01 1.05631223e-01 1.05601762e-01 1.05572326e-01 + 1.05542914e-01 1.05513528e-01 1.05484165e-01 1.05454827e-01 1.05425514e-01 + 1.05396225e-01 1.05366960e-01 1.05337720e-01 1.05308504e-01 1.05279312e-01 + 1.05250145e-01 1.05221002e-01 1.05191883e-01 1.05162788e-01 1.05133717e-01 + 1.05104671e-01 1.05075648e-01 1.05046650e-01 1.05017675e-01 1.04988725e-01 + 1.04959798e-01 1.04930896e-01 1.04902017e-01 1.04873162e-01 1.04844331e-01 + 1.04815523e-01 1.04786740e-01 1.04757980e-01 1.04729243e-01 1.04700531e-01 + 1.04671841e-01 1.04643176e-01 1.04614534e-01 1.04585916e-01 1.04557321e-01 + 1.04528749e-01 1.04500201e-01 1.04471676e-01 1.04443175e-01 1.04414697e-01 + 1.04386242e-01 1.04357810e-01 1.04329402e-01 1.04301017e-01 1.04272655e-01 + 1.04244316e-01 1.04216000e-01 1.04187707e-01 1.04159437e-01 1.04131191e-01 + 1.04102967e-01 1.04074766e-01 1.04046588e-01 1.04018433e-01 1.03990301e-01 + 1.03962192e-01 1.03934105e-01 1.03906041e-01 1.03878000e-01 1.03849982e-01 + 1.03821986e-01 1.03794013e-01 1.03766062e-01 1.03738134e-01 1.03710229e-01 + 1.03682346e-01 1.03654486e-01 1.03626648e-01 1.03598832e-01 1.03571039e-01 + 1.03543268e-01 1.03515520e-01 1.03487793e-01 1.03460089e-01 1.03432408e-01 + 1.03404748e-01 1.03377111e-01 1.03349496e-01 1.03321903e-01 1.03294332e-01 + 1.03266783e-01 1.03239256e-01 1.03211751e-01 1.03184268e-01 1.03156807e-01 + 1.03129368e-01 1.03101951e-01 1.03074556e-01 1.03047182e-01 1.03019831e-01 + 1.02992501e-01 1.02965192e-01 1.02937906e-01 1.02910641e-01 1.02883398e-01 + 1.02856177e-01 1.02828977e-01 1.02801798e-01 1.02774642e-01 1.02747506e-01 + 1.02720392e-01 1.02693300e-01 1.02666229e-01 1.02639180e-01 1.02612151e-01 + 1.02585145e-01 1.02558159e-01 1.02531195e-01 1.02504252e-01 1.02477330e-01 + 1.02450430e-01 1.02423550e-01 1.02396692e-01 1.02369855e-01 1.02343039e-01 + 1.02316244e-01 1.02289470e-01 1.02262717e-01 1.02235985e-01 1.02209274e-01 + 1.02182584e-01 1.02155915e-01 1.02129267e-01 1.02102639e-01 1.02076033e-01 + 1.02049447e-01 1.02022882e-01 1.01996338e-01 1.01969814e-01 1.01943311e-01 + 1.01916829e-01 1.01890367e-01 1.01863926e-01 1.01837505e-01 1.01811106e-01 + 1.01784726e-01 1.01758367e-01 1.01732029e-01 1.01705711e-01 1.01679413e-01 + 1.01653136e-01 1.01626879e-01 1.01600643e-01 1.01574426e-01 1.01548230e-01 + 1.01522055e-01 1.01495899e-01 1.01469764e-01 1.01443649e-01 1.01417554e-01 + 1.01391479e-01 1.01365425e-01 1.01339390e-01 1.01313376e-01 1.01287381e-01 + 1.01261406e-01 1.01235452e-01 1.01209517e-01 1.01183603e-01 1.01157708e-01 + 1.01131833e-01 1.01105978e-01 1.01080143e-01 1.01054327e-01 1.01028532e-01 + 1.01002756e-01 1.00976999e-01 1.00951263e-01 1.00925546e-01 1.00899849e-01 + 1.00874171e-01 1.00848513e-01 1.00822875e-01 1.00797256e-01 1.00771656e-01 + 1.00746077e-01 1.00720516e-01 1.00694975e-01 1.00669454e-01 1.00643952e-01 + 1.00618469e-01 1.00593005e-01 1.00567561e-01 1.00542136e-01 1.00516731e-01 + 1.00491345e-01 1.00465978e-01 1.00440630e-01 1.00415301e-01 1.00389992e-01 + 1.00364701e-01 1.00339430e-01 1.00314178e-01 1.00288944e-01 1.00263730e-01 + 1.00238535e-01 1.00213359e-01 1.00188202e-01 1.00163064e-01 1.00137944e-01 + 1.00112844e-01 1.00087762e-01 1.00062700e-01 1.00037656e-01 1.00012631e-01 + 9.99876242e-02 9.99626366e-02 9.99376677e-02 9.99127176e-02 9.98877861e-02 + 9.98628732e-02 9.98379790e-02 9.98131034e-02 9.97882464e-02 9.97634079e-02 + 9.97385880e-02 9.97137866e-02 9.96890037e-02 9.96642393e-02 9.96394933e-02 + 9.96147657e-02 9.95900565e-02 9.95653657e-02 9.95406933e-02 9.95160392e-02 + 9.94914034e-02 9.94667859e-02 9.94421867e-02 9.94176057e-02 9.93930429e-02 + 9.93684983e-02 9.93439719e-02 9.93194636e-02 9.92949735e-02 9.92705015e-02 + 9.92460476e-02 9.92216117e-02 9.91971939e-02 9.91727940e-02 9.91484122e-02 + 9.91240484e-02 9.90997025e-02 9.90753745e-02 9.90510645e-02 9.90267723e-02 + 9.90024980e-02 9.89782415e-02 9.89540029e-02 9.89297821e-02 9.89055790e-02 + 9.88813937e-02 9.88572261e-02 9.88330763e-02 9.88089441e-02 9.87848296e-02 + 9.87607327e-02 9.87366535e-02 9.87125919e-02 9.86885478e-02 9.86645213e-02 + 9.86405124e-02 9.86165209e-02 9.85925470e-02 9.85685906e-02 9.85446516e-02 + 9.85207300e-02 9.84968258e-02 9.84729391e-02 9.84490697e-02 9.84252176e-02 + 9.84013829e-02 9.83775655e-02 9.83537654e-02 9.83299825e-02 9.83062169e-02 + 9.82824685e-02 9.82587374e-02 9.82350233e-02 9.82113265e-02 9.81876468e-02 + 9.81639842e-02 9.81403387e-02 9.81167103e-02 9.80930990e-02 9.80695047e-02 + 9.80459274e-02 9.80223671e-02 9.79988238e-02 9.79752974e-02 9.79517880e-02 + 9.79282955e-02 9.79048199e-02 9.78813611e-02 9.78579192e-02 9.78344942e-02 + 9.78110859e-02 9.77876945e-02 9.77643198e-02 9.77409619e-02 9.77176207e-02 + 9.76942963e-02 9.76709885e-02 9.76476974e-02 9.76244230e-02 9.76011651e-02 + 9.75779239e-02 9.75546993e-02 9.75314913e-02 9.75082999e-02 9.74851249e-02 + 9.74619665e-02 9.74388246e-02 9.74156991e-02 9.73925901e-02 9.73694976e-02 + 9.73464215e-02 9.73233617e-02 9.73003184e-02 9.72772914e-02 9.72542807e-02 + 9.72312864e-02 9.72083084e-02 9.71853467e-02 9.71624012e-02 9.71394719e-02 + 9.71165589e-02 9.70936621e-02 9.70707815e-02 9.70479171e-02 9.70250688e-02 + 9.70022366e-02 9.69794205e-02 9.69566206e-02 9.69338367e-02 9.69110688e-02 + 9.68883170e-02 9.68655813e-02 9.68428615e-02 9.68201577e-02 9.67974698e-02 + 9.67747979e-02 9.67521419e-02 9.67295019e-02 9.67068777e-02 9.66842693e-02 + 9.66616769e-02 9.66391002e-02 9.66165394e-02 9.65939943e-02 9.65714651e-02 + 9.65489516e-02 9.65264538e-02 9.65039718e-02 9.64815054e-02 9.64590547e-02 + 9.64366197e-02 9.64142004e-02 9.63917967e-02 9.63694086e-02 9.63470360e-02 + 9.63246791e-02 9.63023377e-02 9.62800118e-02 9.62577015e-02 9.62354067e-02 + 9.62131273e-02 9.61908635e-02 9.61686150e-02 9.61463820e-02 9.61241644e-02 + 9.61019623e-02 9.60797754e-02 9.60576040e-02 9.60354479e-02 9.60133071e-02 + 9.59911816e-02 9.59690714e-02 9.59469765e-02 9.59248968e-02 9.59028324e-02 + 9.58807832e-02 9.58587492e-02 9.58367303e-02 9.58147267e-02 9.57927382e-02 + 9.57707648e-02 9.57488065e-02 9.57268633e-02 9.57049352e-02 9.56830222e-02 + 9.56611242e-02 9.56392413e-02 9.56173733e-02 9.55955204e-02 9.55736824e-02 + 9.55518594e-02 9.55300513e-02 9.55082582e-02 9.54864799e-02 9.54647166e-02 + 9.54429681e-02 9.54212345e-02 9.53995157e-02 9.53778117e-02 9.53561226e-02 + 9.53344482e-02 9.53127886e-02 9.52911438e-02 9.52695137e-02 9.52478984e-02 + 9.52262977e-02 9.52047117e-02 9.51831404e-02 9.51615838e-02 9.51400418e-02 + 9.51185144e-02 9.50970016e-02 9.50755034e-02 9.50540198e-02 9.50325508e-02 + 9.50110963e-02 9.49896563e-02 9.49682308e-02 9.49468198e-02 9.49254233e-02 + 9.49040412e-02 9.48826736e-02 9.48613204e-02 9.48399817e-02 9.48186573e-02 + 9.47973473e-02 9.47760516e-02 9.47547703e-02 9.47335034e-02 9.47122507e-02 + 9.46910123e-02 9.46697883e-02 9.46485784e-02 9.46273829e-02 9.46062015e-02 + 9.45850344e-02 9.45638815e-02 9.45427428e-02 9.45216182e-02 9.45005078e-02 + 9.44794116e-02 9.44583294e-02 9.44372614e-02 9.44162074e-02 9.43951676e-02 + 9.43741418e-02 9.43531300e-02 9.43321323e-02 9.43111485e-02 9.42901788e-02 + 9.42692231e-02 9.42482813e-02 9.42273534e-02 9.42064395e-02 9.41855396e-02 + 9.41646535e-02 9.41437813e-02 9.41229230e-02 9.41020785e-02 9.40812479e-02 + 9.40604311e-02 9.40396282e-02 9.40188390e-02 9.39980636e-02 9.39773020e-02 + 9.39565541e-02 9.39358200e-02 9.39150995e-02 9.38943928e-02 9.38736998e-02 + 9.38530204e-02 9.38323548e-02 9.38117027e-02 9.37910643e-02 9.37704395e-02 + 9.37498283e-02 9.37292307e-02 9.37086466e-02 9.36880762e-02 9.36675192e-02 + 9.36469758e-02 9.36264459e-02 9.36059295e-02 9.35854265e-02 9.35649371e-02 + 9.35444611e-02 9.35239985e-02 9.35035493e-02 9.34831136e-02 9.34626912e-02 + 9.34422823e-02 9.34218866e-02 9.34015044e-02 9.33811355e-02 9.33607798e-02 + 9.33404375e-02 9.33201085e-02 9.32997928e-02 9.32794903e-02 9.32592011e-02 + 9.32389251e-02 9.32186624e-02 9.31984128e-02 9.31781764e-02 9.31579532e-02 + 9.31377432e-02 9.31175463e-02 9.30973626e-02 9.30771919e-02 9.30570344e-02 + 9.30368899e-02 9.30167586e-02 9.29966403e-02 9.29765350e-02 9.29564428e-02 + 9.29363636e-02 9.29162974e-02 9.28962442e-02 9.28762040e-02 9.28561768e-02 + 9.28361624e-02 9.28161611e-02 9.27961726e-02 9.27761971e-02 9.27562344e-02 + 9.27362847e-02 9.27163478e-02 9.26964237e-02 9.26765125e-02 9.26566141e-02 + 9.26367286e-02 9.26168558e-02 9.25969958e-02 9.25771486e-02 9.25573141e-02 + 9.25374924e-02 9.25176834e-02 9.24978871e-02 9.24781036e-02 9.24583327e-02 + 9.24385745e-02 9.24188289e-02 9.23990960e-02 9.23793758e-02 9.23596681e-02 + 9.23399731e-02 9.23202907e-02 9.23006208e-02 9.22809635e-02 9.22613188e-02 + 9.22416866e-02 9.22220669e-02 9.22024597e-02 9.21828651e-02 9.21632829e-02 + 9.21437132e-02 9.21241560e-02 9.21046112e-02 9.20850788e-02 9.20655589e-02 + 9.20460514e-02 9.20265563e-02 9.20070735e-02 9.19876031e-02 9.19681451e-02 + 9.19486994e-02 9.19292661e-02 9.19098451e-02 9.18904363e-02 9.18710399e-02 + 9.18516557e-02 9.18322838e-02 9.18129242e-02 9.17935768e-02 9.17742416e-02 + 9.17549186e-02 9.17356079e-02 9.17163093e-02 9.16970229e-02 9.16777486e-02 + 9.16584865e-02 9.16392366e-02 9.16199987e-02 9.16007730e-02 9.15815594e-02 + 9.15623578e-02 9.15431684e-02 9.15239910e-02 9.15048256e-02 9.14856723e-02 + 9.14665310e-02 9.14474017e-02 9.14282844e-02 9.14091791e-02 9.13900857e-02 + 9.13710043e-02 9.13519349e-02 9.13328774e-02 9.13138318e-02 9.12947982e-02 + 9.12757764e-02 9.12567665e-02 9.12377685e-02 9.12187823e-02 9.11998080e-02 + 9.11808456e-02 9.11618949e-02 9.11429561e-02 9.11240290e-02 9.11051138e-02 + 9.10862103e-02 9.10673186e-02 9.10484386e-02 9.10295704e-02 9.10107139e-02 + 9.09918691e-02 9.09730360e-02 9.09542146e-02 9.09354049e-02 9.09166069e-02 + 9.08978205e-02 9.08790457e-02 9.08602826e-02 9.08415311e-02 9.08227911e-02 + 9.08040628e-02 9.07853461e-02 9.07666409e-02 9.07479473e-02 9.07292652e-02 + 9.07105947e-02 9.06919357e-02 9.06732882e-02 9.06546522e-02 9.06360277e-02 + 9.06174146e-02 9.05988131e-02 9.05802229e-02 9.05616442e-02 9.05430770e-02 + 9.05245211e-02 9.05059767e-02 9.04874436e-02 9.04689219e-02 9.04504116e-02 + 9.04319127e-02 9.04134251e-02 9.03949488e-02 9.03764839e-02 9.03580303e-02 + 9.03395879e-02 9.03211569e-02 9.03027371e-02 9.02843286e-02 9.02659313e-02 + 9.02475453e-02 9.02291706e-02 9.02108070e-02 9.01924546e-02 9.01741135e-02 + 9.01557835e-02 9.01374647e-02 9.01191571e-02 9.01008606e-02 9.00825752e-02 + 9.00643010e-02 9.00460379e-02 9.00277859e-02 9.00095450e-02 8.99913152e-02 + 8.99730965e-02 8.99548888e-02 8.99366921e-02 8.99185065e-02 8.99003320e-02 + 8.98821684e-02 8.98640159e-02 8.98458743e-02 8.98277437e-02 8.98096241e-02 + 8.97915155e-02 8.97734178e-02 8.97553311e-02 8.97372552e-02 8.97191903e-02 + 8.97011363e-02 8.96830932e-02 8.96650610e-02 8.96470396e-02 8.96290291e-02 + 8.96110295e-02 8.95930407e-02 8.95750627e-02 8.95570956e-02 8.95391392e-02 + 8.95211937e-02 8.95032589e-02 8.94853349e-02 8.94674217e-02 8.94495192e-02 + 8.94316275e-02 8.94137465e-02 8.93958762e-02 8.93780167e-02 8.93601678e-02 + 8.93423296e-02 8.93245021e-02 8.93066853e-02 8.92888791e-02 8.92710836e-02 + 8.92532987e-02 8.92355244e-02 8.92177608e-02 8.92000077e-02 8.91822653e-02 + 8.91645334e-02 8.91468121e-02 8.91291014e-02 8.91114012e-02 8.90937115e-02 + 8.90760324e-02 8.90583638e-02 8.90407057e-02 8.90230582e-02 8.90054211e-02 + 8.89877945e-02 8.89701783e-02 8.89525726e-02 8.89349774e-02 8.89173926e-02 + 8.88998182e-02 8.88822542e-02 8.88647007e-02 8.88471575e-02 8.88296247e-02 + 8.88121023e-02 8.87945903e-02 8.87770886e-02 8.87595973e-02 8.87421163e-02 + 8.87246456e-02 8.87071853e-02 8.86897352e-02 8.86722954e-02 8.86548660e-02 + 8.86374468e-02 8.86200378e-02 8.86026391e-02 8.85852507e-02 8.85678725e-02 + 8.85505045e-02 8.85331467e-02 8.85157991e-02 8.84984618e-02 8.84811346e-02 + 8.84638176e-02 8.84465107e-02 8.84292140e-02 8.84119274e-02 8.83946510e-02 + 8.83773847e-02 8.83601285e-02 8.83428825e-02 8.83256465e-02 8.83084206e-02 + 8.82912047e-02 8.82739990e-02 8.82568033e-02 8.82396176e-02 8.82224420e-02 + 8.82052764e-02 8.81881208e-02 8.81709752e-02 8.81538396e-02 8.81367140e-02 + 8.81195984e-02 8.81024927e-02 8.80853970e-02 8.80683113e-02 8.80512355e-02 + 8.80341696e-02 8.80171137e-02 8.80000676e-02 8.79830314e-02 8.79660052e-02 + 8.79489888e-02 8.79319823e-02 8.79149857e-02 8.78979989e-02 8.78810219e-02 + 8.78640548e-02 8.78470975e-02 8.78301500e-02 8.78132123e-02 8.77962845e-02 + 8.77793664e-02 8.77624580e-02 8.77455595e-02 8.77286707e-02 8.77117916e-02 + 8.76949223e-02 8.76780628e-02 8.76612129e-02 8.76443728e-02 8.76275423e-02 + 8.76107216e-02 8.75939105e-02 8.75771091e-02 8.75603174e-02 8.75435353e-02 + 8.75267629e-02 8.75100001e-02 8.74932469e-02 8.74765033e-02 8.74597694e-02 + 8.74430451e-02 8.74263303e-02 8.74096251e-02 8.73929296e-02 8.73762435e-02 + 8.73595670e-02 8.73429001e-02 8.73262427e-02 8.73095948e-02 8.72929565e-02 + 8.72763276e-02 8.72597083e-02 8.72430984e-02 8.72264981e-02 8.72099072e-02 + 8.71933257e-02 8.71767537e-02 8.71601912e-02 8.71436381e-02 8.71270944e-02 + 8.71105602e-02 8.70940353e-02 8.70775199e-02 8.70610138e-02 8.70445172e-02 + 8.70280299e-02 8.70115519e-02 8.69950834e-02 8.69786241e-02 8.69621742e-02 + 8.69457337e-02 8.69293024e-02 8.69128805e-02 8.68964679e-02 8.68800646e-02 + 8.68636705e-02 8.68472857e-02 8.68309103e-02 8.68145440e-02 8.67981870e-02 + 8.67818393e-02 8.67655008e-02 8.67491715e-02 8.67328514e-02 8.67165406e-02 + 8.67002389e-02 8.66839464e-02 8.66676631e-02 8.66513890e-02 8.66351240e-02 + 8.66188682e-02 8.66026216e-02 8.65863841e-02 8.65701557e-02 8.65539364e-02 + 8.65377263e-02 8.65215252e-02 8.65053333e-02 8.64891504e-02 8.64729766e-02 + 8.64568119e-02 8.64406563e-02 8.64245097e-02 8.64083721e-02 8.63922436e-02 + 8.63761241e-02 8.63600136e-02 8.63439122e-02 8.63278197e-02 8.63117363e-02 + 8.62956618e-02 8.62795963e-02 8.62635398e-02 8.62474922e-02 8.62314536e-02 + 8.62154239e-02 8.61994032e-02 8.61833914e-02 8.61673885e-02 8.61513945e-02 + 8.61354094e-02 8.61194332e-02 8.61034659e-02 8.60875075e-02 8.60715580e-02 + 8.60556173e-02 8.60396855e-02 8.60237625e-02 8.60078483e-02 8.59919430e-02 + 8.59760465e-02 8.59601588e-02 8.59442800e-02 8.59284099e-02 8.59125486e-02 + 8.58966961e-02 8.58808523e-02 8.58650173e-02 8.58491911e-02 8.58333736e-02 + 8.58175649e-02 8.58017649e-02 8.57859736e-02 8.57701911e-02 8.57544172e-02 + 8.57386520e-02 8.57228956e-02 8.57071478e-02 8.56914087e-02 8.56756782e-02 + 8.56599565e-02 8.56442433e-02 8.56285389e-02 8.56128430e-02 8.55971558e-02 + 8.55814772e-02 8.55658072e-02 8.55501458e-02 8.55344930e-02 8.55188488e-02 + 8.55032132e-02 8.54875862e-02 8.54719677e-02 8.54563578e-02 8.54407564e-02 + 8.54251636e-02 8.54095793e-02 8.53940035e-02 8.53784363e-02 8.53628775e-02 + 8.53473273e-02 8.53317855e-02 8.53162523e-02 8.53007275e-02 8.52852112e-02 + 8.52697034e-02 8.52542040e-02 8.52387130e-02 8.52232305e-02 8.52077565e-02 + 8.51922909e-02 8.51768336e-02 8.51613848e-02 8.51459444e-02 8.51305124e-02 + 8.51150888e-02 8.50996736e-02 8.50842667e-02 8.50688682e-02 8.50534780e-02 + 8.50380963e-02 8.50227228e-02 8.50073577e-02 8.49920009e-02 8.49766524e-02 + 8.49613123e-02 8.49459804e-02 8.49306569e-02 8.49153416e-02 8.49000346e-02 + 8.48847359e-02 8.48694455e-02 8.48541633e-02 8.48388893e-02 8.48236237e-02 + 8.48083662e-02 8.47931170e-02 8.47778760e-02 8.47626432e-02 8.47474187e-02 + 8.47322023e-02 8.47169941e-02 8.47017941e-02 8.46866023e-02 8.46714187e-02 + 8.46562432e-02 8.46410759e-02 8.46259167e-02 8.46107657e-02 8.45956228e-02 + 8.45804880e-02 8.45653614e-02 8.45502428e-02 8.45351324e-02 8.45200301e-02 + 8.45049358e-02 8.44898497e-02 8.44747716e-02 8.44597016e-02 8.44446397e-02 + 8.44295858e-02 8.44145399e-02 8.43995021e-02 8.43844724e-02 8.43694506e-02 + 8.43544369e-02 8.43394312e-02 8.43244335e-02 8.43094438e-02 8.42944621e-02 + 8.42794883e-02 8.42645226e-02 8.42495648e-02 8.42346150e-02 8.42196731e-02 + 8.42047392e-02 8.41898132e-02 8.41748952e-02 8.41599851e-02 8.41450829e-02 + 8.41301886e-02 8.41153022e-02 8.41004238e-02 8.40855532e-02 8.40706905e-02 + 8.40558357e-02 8.40409887e-02 8.40261496e-02 8.40113184e-02 8.39964950e-02 + 8.39816795e-02 8.39668718e-02 8.39520719e-02 8.39372799e-02 8.39224957e-02 + 8.39077193e-02 8.38929507e-02 8.38781898e-02 8.38634368e-02 8.38486916e-02 + 8.38339541e-02 8.38192244e-02 8.38045025e-02 8.37897883e-02 8.37750818e-02 + 8.37603831e-02 8.37456922e-02 8.37310089e-02 8.37163334e-02 8.37016656e-02 + 8.36870055e-02 8.36723531e-02 8.36577084e-02 8.36430714e-02 8.36284421e-02 + 8.36138204e-02 8.35992064e-02 8.35846001e-02 8.35700014e-02 8.35554104e-02 + 8.35408270e-02 8.35262512e-02 8.35116831e-02 8.34971226e-02 8.34825697e-02 + 8.34680244e-02 8.34534867e-02 8.34389566e-02 8.34244341e-02 8.34099191e-02 + 8.33954118e-02 8.33809120e-02 8.33664197e-02 8.33519351e-02 8.33374579e-02 + 8.33229883e-02 8.33085263e-02 8.32940718e-02 8.32796248e-02 8.32651853e-02 + 8.32507533e-02 8.32363288e-02 8.32219118e-02 8.32075023e-02 8.31931003e-02 + 8.31787058e-02 8.31643187e-02 8.31499391e-02 8.31355669e-02 8.31212022e-02 + 8.31068450e-02 8.30924951e-02 8.30781528e-02 8.30638178e-02 8.30494902e-02 + 8.30351701e-02 8.30208574e-02 8.30065520e-02 8.29922541e-02 8.29779635e-02 + 8.29636804e-02 8.29494046e-02 8.29351361e-02 8.29208751e-02 8.29066213e-02 + 8.28923750e-02 8.28781359e-02 8.28639042e-02 8.28496799e-02 8.28354628e-02 + 8.28212531e-02 8.28070507e-02 8.27928556e-02 8.27786678e-02 8.27644872e-02 + 8.27503140e-02 8.27361480e-02 8.27219893e-02 8.27078379e-02 8.26936938e-02 + 8.26795569e-02 8.26654272e-02 8.26513048e-02 8.26371896e-02 8.26230816e-02 + 8.26089809e-02 8.25948874e-02 8.25808011e-02 8.25667220e-02 8.25526501e-02 + 8.25385854e-02 8.25245279e-02 8.25104775e-02 8.24964344e-02 8.24823984e-02 + 8.24683695e-02 8.24543479e-02 8.24403333e-02 8.24263259e-02 8.24123257e-02 + 8.23983326e-02 8.23843466e-02 8.23703677e-02 8.23563960e-02 8.23424313e-02 + 8.23284737e-02 8.23145233e-02 8.23005799e-02 8.22866436e-02 8.22727144e-02 + 8.22587923e-02 8.22448772e-02 8.22309692e-02 8.22170683e-02 8.22031744e-02 + 8.21892875e-02 8.21754077e-02 8.21615349e-02 8.21476691e-02 8.21338103e-02 + 8.21199586e-02 8.21061138e-02 8.20922761e-02 8.20784453e-02 8.20646216e-02 + 8.20508048e-02 8.20369950e-02 8.20231922e-02 8.20093963e-02 8.19956074e-02 + 8.19818254e-02 8.19680504e-02 8.19542823e-02 8.19405212e-02 8.19267670e-02 + 8.19130197e-02 8.18992794e-02 8.18855459e-02 8.18718194e-02 8.18580997e-02 + 8.18443870e-02 8.18306811e-02 8.18169822e-02 8.18032901e-02 8.17896048e-02 + 8.17759265e-02 8.17622550e-02 8.17485903e-02 8.17349326e-02 8.17212816e-02 + 8.17076375e-02 8.16940002e-02 8.16803697e-02 8.16667461e-02 8.16531293e-02 + 8.16395193e-02 8.16259161e-02 8.16123197e-02 8.15987300e-02 8.15851472e-02 + 8.15715712e-02 8.15580019e-02 8.15444394e-02 8.15308836e-02 8.15173346e-02 + 8.15037924e-02 8.14902569e-02 8.14767282e-02 8.14632062e-02 8.14496909e-02 + 8.14361823e-02 8.14226805e-02 8.14091854e-02 8.13956970e-02 8.13822153e-02 + 8.13687402e-02 8.13552719e-02 8.13418103e-02 8.13283553e-02 8.13149070e-02 + 8.13014654e-02 8.12880305e-02 8.12746022e-02 8.12611805e-02 8.12477656e-02 + 8.12343572e-02 8.12209555e-02 8.12075604e-02 8.11941719e-02 8.11807901e-02 + 8.11674149e-02 8.11540463e-02 8.11406843e-02 8.11273288e-02 8.11139800e-02 + 8.11006378e-02 8.10873021e-02 8.10739731e-02 8.10606506e-02 8.10473346e-02 + 8.10340252e-02 8.10207224e-02 8.10074261e-02 8.09941364e-02 8.09808532e-02 + 8.09675765e-02 8.09543064e-02 8.09410428e-02 8.09277857e-02 8.09145351e-02 + 8.09012911e-02 8.08880535e-02 8.08748224e-02 8.08615978e-02 8.08483797e-02 + 8.08351681e-02 8.08219630e-02 8.08087643e-02 8.07955721e-02 8.07823863e-02 + 8.07692070e-02 8.07560342e-02 8.07428678e-02 8.07297078e-02 8.07165542e-02 + 8.07034071e-02 8.06902664e-02 8.06771322e-02 8.06640043e-02 8.06508829e-02 + 8.06377678e-02 8.06246592e-02 8.06115569e-02 8.05984610e-02 8.05853715e-02 + 8.05722884e-02 8.05592116e-02 8.05461412e-02 8.05330772e-02 8.05200195e-02 + 8.05069682e-02 8.04939232e-02 8.04808846e-02 8.04678523e-02 8.04548263e-02 + 8.04418066e-02 8.04287933e-02 8.04157863e-02 8.04027856e-02 8.03897912e-02 + 8.03768031e-02 8.03638212e-02 8.03508457e-02 8.03378765e-02 8.03249135e-02 + 8.03119568e-02 8.02990064e-02 8.02860622e-02 8.02731243e-02 8.02601926e-02 + 8.02472672e-02 8.02343481e-02 8.02214351e-02 8.02085284e-02 8.01956280e-02 + 8.01827337e-02 8.01698457e-02 8.01569639e-02 8.01440883e-02 8.01312189e-02 + 8.01183557e-02 8.01054986e-02 8.00926478e-02 8.00798032e-02 8.00669647e-02 + 8.00541324e-02 8.00413063e-02 8.00284863e-02 8.00156725e-02 8.00028649e-02 + 7.99900634e-02 7.99772680e-02 7.99644788e-02 7.99516957e-02 7.99389187e-02 + 7.99261479e-02 7.99133832e-02 7.99006246e-02 7.98878721e-02 7.98751257e-02 + 7.98623854e-02 7.98496512e-02 7.98369231e-02 7.98242011e-02 7.98114851e-02 + 7.97987753e-02 7.97860715e-02 7.97733737e-02 7.97606821e-02 7.97479965e-02 + 7.97353169e-02 7.97226434e-02 7.97099759e-02 7.96973145e-02 7.96846590e-02 + 7.96720097e-02 7.96593663e-02 7.96467290e-02 7.96340976e-02 7.96214723e-02 + 7.96088530e-02 7.95962397e-02 7.95836323e-02 7.95710310e-02 7.95584356e-02 + 7.95458463e-02 7.95332629e-02 7.95206854e-02 7.95081140e-02 7.94955485e-02 + 7.94829889e-02 7.94704353e-02 7.94578877e-02 7.94453459e-02 7.94328102e-02 + 7.94202803e-02 7.94077564e-02 7.93952384e-02 7.93827263e-02 7.93702202e-02 + 7.93577199e-02 7.93452256e-02 7.93327371e-02 7.93202546e-02 7.93077779e-02 + 7.92953071e-02 7.92828423e-02 7.92703832e-02 7.92579301e-02 7.92454828e-02 + 7.92330414e-02 7.92206058e-02 7.92081761e-02 7.91957523e-02 7.91833343e-02 + 7.91709221e-02 7.91585157e-02 7.91461152e-02 7.91337206e-02 7.91213317e-02 + 7.91089486e-02 7.90965714e-02 7.90842000e-02 7.90718344e-02 7.90594746e-02 + 7.90471205e-02 7.90347723e-02 7.90224298e-02 7.90100932e-02 7.89977623e-02 + 7.89854371e-02 7.89731178e-02 7.89608042e-02 7.89484964e-02 7.89361943e-02 + 7.89238979e-02 7.89116073e-02 7.88993225e-02 7.88870434e-02 7.88747700e-02 + 7.88625023e-02 7.88502404e-02 7.88379842e-02 7.88257337e-02 7.88134889e-02 + 7.88012498e-02 7.87890164e-02 7.87767887e-02 7.87645667e-02 7.87523504e-02 + 7.87401398e-02 7.87279348e-02 7.87157355e-02 7.87035419e-02 7.86913540e-02 + 7.86791717e-02 7.86669951e-02 7.86548241e-02 7.86426588e-02 7.86304991e-02 + 7.86183450e-02 7.86061966e-02 7.85940538e-02 7.85819167e-02 7.85697851e-02 + 7.85576592e-02 7.85455389e-02 7.85334242e-02 7.85213151e-02 7.85092116e-02 + 7.84971137e-02 7.84850214e-02 7.84729347e-02 7.84608535e-02 7.84487780e-02 + 7.84367080e-02 7.84246436e-02 7.84125847e-02 7.84005314e-02 7.83884837e-02 + 7.83764415e-02 7.83644048e-02 7.83523737e-02 7.83403482e-02 7.83283282e-02 + 7.83163137e-02 7.83043047e-02 7.82923013e-02 7.82803034e-02 7.82683110e-02 + 7.82563241e-02 7.82443427e-02 7.82323668e-02 7.82203964e-02 7.82084315e-02 + 7.81964721e-02 7.81845182e-02 7.81725697e-02 7.81606268e-02 7.81486893e-02 + 7.81367572e-02 7.81248307e-02 7.81129096e-02 7.81009939e-02 7.80890837e-02 + 7.80771790e-02 7.80652797e-02 7.80533858e-02 7.80414974e-02 7.80296144e-02 + 7.80177368e-02 7.80058646e-02 7.79939979e-02 7.79821366e-02 7.79702807e-02 + 7.79584302e-02 7.79465851e-02 7.79347454e-02 7.79229111e-02 7.79110821e-02 + 7.78992586e-02 7.78874404e-02 7.78756277e-02 7.78638202e-02 7.78520182e-02 + 7.78402215e-02 7.78284302e-02 7.78166443e-02 7.78048637e-02 7.77930884e-02 + 7.77813185e-02 7.77695539e-02 7.77577947e-02 7.77460408e-02 7.77342922e-02 + 7.77225490e-02 7.77108111e-02 7.76990785e-02 7.76873512e-02 7.76756292e-02 + 7.76639125e-02 7.76522011e-02 7.76404950e-02 7.76287942e-02 7.76170987e-02 + 7.76054085e-02 7.75937236e-02 7.75820439e-02 7.75703695e-02 7.75587004e-02 + 7.75470365e-02 7.75353780e-02 7.75237246e-02 7.75120765e-02 7.75004337e-02 + 7.74887961e-02 7.74771637e-02 7.74655366e-02 7.74539147e-02 7.74422981e-02 + 7.74306867e-02 7.74190805e-02 7.74074795e-02 7.73958837e-02 7.73842931e-02 + 7.73727078e-02 7.73611276e-02 7.73495527e-02 7.73379829e-02 7.73264183e-02 + 7.73148589e-02 7.73033047e-02 7.72917557e-02 7.72802118e-02 7.72686732e-02 + 7.72571396e-02 7.72456113e-02 7.72340881e-02 7.72225701e-02 7.72110572e-02 + 7.71995494e-02 7.71880468e-02 7.71765494e-02 7.71650571e-02 7.71535699e-02 + 7.71420878e-02 7.71306109e-02 7.71191391e-02 7.71076724e-02 7.70962108e-02 + 7.70847543e-02 7.70733030e-02 7.70618567e-02 7.70504155e-02 7.70389795e-02 + 7.70275485e-02 7.70161226e-02 7.70047018e-02 7.69932860e-02 7.69818754e-02 + 7.69704698e-02 7.69590693e-02 7.69476738e-02 7.69362834e-02 7.69248981e-02 + 7.69135178e-02 7.69021426e-02 7.68907724e-02 7.68794073e-02 7.68680472e-02 + 7.68566921e-02 7.68453420e-02 7.68339970e-02 7.68226570e-02 7.68113221e-02 + 7.67999921e-02 7.67886672e-02 7.67773472e-02 7.67660323e-02 7.67547224e-02 + 7.67434174e-02 7.67321175e-02 7.67208226e-02 7.67095326e-02 7.66982476e-02 + 7.66869676e-02 7.66756926e-02 7.66644225e-02 7.66531574e-02 7.66418973e-02 + 7.66306422e-02 7.66193920e-02 7.66081467e-02 7.65969064e-02 7.65856711e-02 + 7.65744407e-02 7.65632152e-02 7.65519946e-02 7.65407790e-02 7.65295684e-02 + 7.65183626e-02 7.65071618e-02 7.64959659e-02 7.64847749e-02 7.64735888e-02 + 7.64624076e-02 7.64512313e-02 7.64400599e-02 7.64288935e-02 7.64177319e-02 + 7.64065752e-02 7.63954233e-02 7.63842764e-02 7.63731343e-02 7.63619972e-02 + 7.63508648e-02 7.63397374e-02 7.63286148e-02 7.63174971e-02 7.63063842e-02 + 7.62952762e-02 7.62841730e-02 7.62730747e-02 7.62619813e-02 7.62508926e-02 + 7.62398088e-02 7.62287298e-02 7.62176557e-02 7.62065864e-02 7.61955219e-02 + 7.61844622e-02 7.61734074e-02 7.61623573e-02 7.61513121e-02 7.61402716e-02 + 7.61292360e-02 7.61182052e-02 7.61071791e-02 7.60961579e-02 7.60851414e-02 + 7.60741297e-02 7.60631228e-02 7.60521207e-02 7.60411233e-02 7.60301307e-02 + 7.60191429e-02 7.60081598e-02 7.59971815e-02 7.59862080e-02 7.59752392e-02 + 7.59642751e-02 7.59533158e-02 7.59423613e-02 7.59314115e-02 7.59204664e-02 + 7.59095260e-02 7.58985904e-02 7.58876595e-02 7.58767333e-02 7.58658119e-02 + 7.58548951e-02 7.58439831e-02 7.58330758e-02 7.58221731e-02 7.58112752e-02 + 7.58003820e-02 7.57894935e-02 7.57786096e-02 7.57677305e-02 7.57568560e-02 + 7.57459862e-02 7.57351211e-02 7.57242607e-02 7.57134049e-02 7.57025538e-02 + 7.56917074e-02 7.56808656e-02 7.56700285e-02 7.56591961e-02 7.56483683e-02 + 7.56375451e-02 7.56267266e-02 7.56159127e-02 7.56051035e-02 7.55942989e-02 + 7.55834989e-02 7.55727035e-02 7.55619128e-02 7.55511267e-02 7.55403452e-02 + 7.55295684e-02 7.55187961e-02 7.55080285e-02 7.54972654e-02 7.54865070e-02 + 7.54757531e-02 7.54650039e-02 7.54542592e-02 7.54435192e-02 7.54327837e-02 + 7.54220528e-02 7.54113264e-02 7.54006047e-02 7.53898875e-02 7.53791749e-02 + 7.53684669e-02 7.53577634e-02 7.53470644e-02 7.53363701e-02 7.53256803e-02 + 7.53149950e-02 7.53043143e-02 7.52936381e-02 7.52829665e-02 7.52722994e-02 + 7.52616368e-02 7.52509787e-02 7.52403252e-02 7.52296762e-02 7.52190318e-02 + 7.52083918e-02 7.51977564e-02 7.51871255e-02 7.51764990e-02 7.51658771e-02 + 7.51552597e-02 7.51446468e-02 7.51340384e-02 7.51234344e-02 7.51128350e-02 + 7.51022400e-02 7.50916496e-02 7.50810636e-02 7.50704821e-02 7.50599050e-02 + 7.50493324e-02 7.50387643e-02 7.50282007e-02 7.50176415e-02 7.50070868e-02 + 7.49965365e-02 7.49859907e-02 7.49754493e-02 7.49649123e-02 7.49543799e-02 + 7.49438518e-02 7.49333282e-02 7.49228090e-02 7.49122942e-02 7.49017839e-02 + 7.48912780e-02 7.48807765e-02 7.48702794e-02 7.48597868e-02 7.48492985e-02 + 7.48388147e-02 7.48283352e-02 7.48178602e-02 7.48073895e-02 7.47969233e-02 + 7.47864614e-02 7.47760040e-02 7.47655509e-02 7.47551022e-02 7.47446579e-02 + 7.47342179e-02 7.47237824e-02 7.47133512e-02 7.47029243e-02 7.46925019e-02 + 7.46820838e-02 7.46716700e-02 7.46612606e-02 7.46508556e-02 7.46404549e-02 + 7.46300586e-02 7.46196666e-02 7.46092789e-02 7.45988956e-02 7.45885166e-02 + 7.45781419e-02 7.45677716e-02 7.45574056e-02 7.45470439e-02 7.45366865e-02 + 7.45263335e-02 7.45159847e-02 7.45056403e-02 7.44953002e-02 7.44849644e-02 + 7.44746329e-02 7.44643056e-02 7.44539827e-02 7.44436641e-02 7.44333497e-02 + 7.44230397e-02 7.44127339e-02 7.44024324e-02 7.43921352e-02 7.43818423e-02 + 7.43715536e-02 7.43612692e-02 7.43509890e-02 7.43407132e-02 7.43304416e-02 + 7.43201742e-02 7.43099111e-02 7.42996522e-02 7.42893976e-02 7.42791473e-02 + 7.42689011e-02 7.42586593e-02 7.42484216e-02 7.42381882e-02 7.42279590e-02 + 7.42177341e-02 7.42075133e-02 7.41972968e-02 7.41870845e-02 7.41768765e-02 + 7.41666726e-02 7.41564729e-02 7.41462775e-02 7.41360863e-02 7.41258992e-02 + 7.41157164e-02 7.41055377e-02 7.40953633e-02 7.40851930e-02 7.40750269e-02 + 7.40648650e-02 7.40547073e-02 7.40445538e-02 7.40344044e-02 7.40242592e-02 + 7.40141182e-02 7.40039814e-02 7.39938487e-02 7.39837202e-02 7.39735958e-02 + 7.39634756e-02 7.39533595e-02 7.39432476e-02 7.39331398e-02 7.39230362e-02 + 7.39129367e-02 7.39028414e-02 7.38927502e-02 7.38826631e-02 7.38725802e-02 + 7.38625014e-02 7.38524267e-02 7.38423561e-02 7.38322896e-02 7.38222273e-02 + 7.38121691e-02 7.38021150e-02 7.37920650e-02 7.37820191e-02 7.37719773e-02 + 7.37619396e-02 7.37519060e-02 7.37418765e-02 7.37318510e-02 7.37218297e-02 + 7.37118125e-02 7.37017993e-02 7.36917902e-02 7.36817852e-02 7.36717843e-02 + 7.36617874e-02 7.36517946e-02 7.36418059e-02 7.36318212e-02 7.36218406e-02 + 7.36118641e-02 7.36018916e-02 7.35919231e-02 7.35819587e-02 7.35719984e-02 + 7.35620421e-02 7.35520898e-02 7.35421416e-02 7.35321974e-02 7.35222572e-02 + 7.35123211e-02 7.35023890e-02 7.34924610e-02 7.34825369e-02 7.34726169e-02 + 7.34627009e-02 7.34527889e-02 7.34428809e-02 7.34329769e-02 7.34230769e-02 + 7.34131809e-02 7.34032890e-02 7.33934010e-02 7.33835170e-02 7.33736370e-02 + 7.33637610e-02 7.33538890e-02 7.33440210e-02 7.33341569e-02 7.33242969e-02 + 7.33144408e-02 7.33045886e-02 7.32947405e-02 7.32848963e-02 7.32750561e-02 + 7.32652199e-02 7.32553876e-02 7.32455592e-02 7.32357348e-02 7.32259144e-02 + 7.32160979e-02 7.32062854e-02 7.31964768e-02 7.31866722e-02 7.31768715e-02 + 7.31670747e-02 7.31572819e-02 7.31474930e-02 7.31377080e-02 7.31279269e-02 + 7.31181498e-02 7.31083766e-02 7.30986073e-02 7.30888419e-02 7.30790805e-02 + 7.30693229e-02 7.30595693e-02 7.30498195e-02 7.30400737e-02 7.30303318e-02 + 7.30205937e-02 7.30108596e-02 7.30011293e-02 7.29914030e-02 7.29816805e-02 + 7.29719619e-02 7.29622472e-02 7.29525364e-02 7.29428294e-02 7.29331263e-02 + 7.29234271e-02 7.29137318e-02 7.29040403e-02 7.28943527e-02 7.28846689e-02 + 7.28749890e-02 7.28653130e-02 7.28556408e-02 7.28459725e-02 7.28363080e-02 + 7.28266473e-02 7.28169905e-02 7.28073376e-02 7.27976885e-02 7.27880432e-02 + 7.27784017e-02 7.27687641e-02 7.27591303e-02 7.27495003e-02 7.27398742e-02 + 7.27302519e-02 7.27206334e-02 7.27110187e-02 7.27014078e-02 7.26918007e-02 + 7.26821975e-02 7.26725980e-02 7.26630023e-02 7.26534105e-02 7.26438224e-02 + 7.26342382e-02 7.26246577e-02 7.26150810e-02 7.26055081e-02 7.25959390e-02 + 7.25863737e-02 7.25768121e-02 7.25672544e-02 7.25577004e-02 7.25481502e-02 + 7.25386037e-02 7.25290610e-02 7.25195221e-02 7.25099870e-02 7.25004556e-02 + 7.24909279e-02 7.24814040e-02 7.24718839e-02 7.24623675e-02 7.24528549e-02 + 7.24433460e-02 7.24338409e-02 7.24243395e-02 7.24148418e-02 7.24053479e-02 + 7.23958577e-02 7.23863712e-02 7.23768885e-02 7.23674095e-02 7.23579342e-02 + 7.23484626e-02 7.23389948e-02 7.23295307e-02 7.23200702e-02 7.23106135e-02 + 7.23011605e-02 7.22917112e-02 7.22822656e-02 7.22728238e-02 7.22633856e-02 + 7.22539511e-02 7.22445203e-02 7.22350932e-02 7.22256698e-02 7.22162500e-02 + 7.22068340e-02 7.21974216e-02 7.21880130e-02 7.21786080e-02 7.21692066e-02 + 7.21598090e-02 7.21504150e-02 7.21410247e-02 7.21316380e-02 7.21222550e-02 + 7.21128757e-02 7.21035000e-02 7.20941280e-02 7.20847596e-02 7.20753949e-02 + 7.20660339e-02 7.20566765e-02 7.20473227e-02 7.20379726e-02 7.20286261e-02 + 7.20192832e-02 7.20099440e-02 7.20006084e-02 7.19912765e-02 7.19819481e-02 + 7.19726234e-02 7.19633024e-02 7.19539849e-02 7.19446711e-02 7.19353608e-02 + 7.19260542e-02 7.19167512e-02 7.19074518e-02 7.18981560e-02 7.18888639e-02 + 7.18795753e-02 7.18702903e-02 7.18610089e-02 7.18517311e-02 7.18424569e-02 + 7.18331863e-02 7.18239193e-02 7.18146559e-02 7.18053960e-02 7.17961398e-02 + 7.17868871e-02 7.17776380e-02 7.17683924e-02 7.17591505e-02 7.17499121e-02 + 7.17406772e-02 7.17314460e-02 7.17222183e-02 7.17129941e-02 7.17037735e-02 + 7.16945565e-02 7.16853430e-02 7.16761331e-02 7.16669267e-02 7.16577239e-02 + 7.16485246e-02 7.16393289e-02 7.16301367e-02 7.16209480e-02 7.16117629e-02 + 7.16025813e-02 7.15934032e-02 7.15842287e-02 7.15750577e-02 7.15658902e-02 + 7.15567262e-02 7.15475658e-02 7.15384089e-02 7.15292555e-02 7.15201056e-02 + 7.15109592e-02 7.15018163e-02 7.14926769e-02 7.14835410e-02 7.14744087e-02 + 7.14652798e-02 7.14561544e-02 7.14470325e-02 7.14379142e-02 7.14287993e-02 + 7.14196878e-02 7.14105799e-02 7.14014755e-02 7.13923745e-02 7.13832770e-02 + 7.13741830e-02 7.13650925e-02 7.13560055e-02 7.13469219e-02 7.13378418e-02 + 7.13287651e-02 7.13196919e-02 7.13106222e-02 7.13015559e-02 7.12924931e-02 + 7.12834338e-02 7.12743779e-02 7.12653254e-02 7.12562764e-02 7.12472309e-02 + 7.12381888e-02 7.12291501e-02 7.12201149e-02 7.12110831e-02 7.12020547e-02 + 7.11930298e-02 7.11840083e-02 7.11749902e-02 7.11659756e-02 7.11569644e-02 + 7.11479566e-02 7.11389522e-02 7.11299512e-02 7.11209537e-02 7.11119596e-02 + 7.11029689e-02 7.10939816e-02 7.10849977e-02 7.10760172e-02 7.10670401e-02 + 7.10580664e-02 7.10490961e-02 7.10401292e-02 7.10311657e-02 7.10222056e-02 + 7.10132489e-02 7.10042956e-02 7.09953456e-02 7.09863990e-02 7.09774559e-02 + 7.09685161e-02 7.09595796e-02 7.09506466e-02 7.09417169e-02 7.09327906e-02 + 7.09238677e-02 7.09149481e-02 7.09060319e-02 7.08971191e-02 7.08882096e-02 + 7.08793035e-02 7.08704007e-02 7.08615013e-02 7.08526052e-02 7.08437125e-02 + 7.08348231e-02 7.08259371e-02 7.08170544e-02 7.08081751e-02 7.07992991e-02 + 7.07904264e-02 7.07815571e-02 7.07726911e-02 7.07638285e-02 7.07549691e-02 + 7.07461131e-02 7.07372604e-02 7.07284111e-02 7.07195650e-02 7.07107223e-02 + 7.07018829e-02 7.06930468e-02 7.06842141e-02 7.06753846e-02 7.06665584e-02 + 7.06577356e-02 7.06489160e-02 7.06400998e-02 7.06312868e-02 7.06224772e-02 + 7.06136708e-02 7.06048678e-02 7.05960680e-02 7.05872715e-02 7.05784783e-02 + 7.05696884e-02 7.05609018e-02 7.05521184e-02 7.05433384e-02 7.05345616e-02 + 1.00000000e+00 9.75894263e-01 9.53451752e-01 9.32489601e-01 9.12851907e-01 + 8.94404826e-01 8.77032714e-01 8.60635068e-01 8.45124065e-01 8.30422576e-01 + 8.16462554e-01 8.03183696e-01 7.90532350e-01 7.78460602e-01 7.66925506e-01 + 7.55888443e-01 7.45314577e-01 7.35172390e-01 7.25433287e-01 7.16071258e-01 + 7.07062580e-01 6.98385572e-01 6.90020370e-01 6.81948734e-01 6.74153887e-01 + 6.66620364e-01 6.59333880e-01 6.52281224e-01 6.45450150e-01 6.38829295e-01 + 6.32408091e-01 6.26176704e-01 6.20125961e-01 6.14247300e-01 6.08532716e-01 + 6.02974715e-01 5.97566276e-01 5.92300808e-01 5.87172122e-01 5.82174396e-01 + 5.77302151e-01 5.72550221e-01 5.67913735e-01 5.63388093e-01 5.58968948e-01 + 5.54652188e-01 5.50433918e-01 5.46310451e-01 5.42278287e-01 5.38334105e-01 + 5.34474753e-01 5.30697232e-01 5.26998691e-01 5.23376415e-01 5.19827818e-01 + 5.16350438e-01 5.12941922e-01 5.09600027e-01 5.06322612e-01 5.03107629e-01 + 4.99953120e-01 4.96857213e-01 4.93818117e-01 4.90834114e-01 4.87903560e-01 + 4.85024878e-01 4.82196556e-01 4.79417141e-01 4.76685242e-01 4.73999519e-01 + 4.71358685e-01 4.68761505e-01 4.66206788e-01 4.63693390e-01 4.61220209e-01 + 4.58786184e-01 4.56390292e-01 4.54031548e-01 4.51709002e-01 4.49421737e-01 + 4.47168870e-01 4.44949545e-01 4.42762941e-01 4.40608259e-01 4.38484731e-01 + 4.36391613e-01 4.34328187e-01 4.32293756e-01 4.30287649e-01 4.28309213e-01 + 4.26357819e-01 4.24432857e-01 4.22533734e-01 4.20659877e-01 4.18810733e-01 + 4.16985761e-01 4.15184441e-01 4.13406264e-01 4.11650741e-01 4.09917394e-01 + 4.08205761e-01 4.06515390e-01 4.04845847e-01 4.03196706e-01 4.01567556e-01 + 3.99957996e-01 3.98367636e-01 3.96796098e-01 3.95243014e-01 3.93708024e-01 + 3.92190780e-01 3.90690944e-01 3.89208184e-01 3.87742180e-01 3.86292617e-01 + 3.84859191e-01 3.83441605e-01 3.82039569e-01 3.80652800e-01 3.79281024e-01 + 3.77923973e-01 3.76581385e-01 3.75253005e-01 3.73938583e-01 3.72637878e-01 + 3.71350652e-01 3.70076675e-01 3.68815719e-01 3.67567566e-01 3.66332000e-01 + 3.65108810e-01 3.63897792e-01 3.62698745e-01 3.61511473e-01 3.60335785e-01 + 3.59171493e-01 3.58018415e-01 3.56876371e-01 3.55745187e-01 3.54624691e-01 + 3.53514717e-01 3.52415101e-01 3.51325683e-01 3.50246306e-01 3.49176816e-01 + 3.48117064e-01 3.47066903e-01 3.46026189e-01 3.44994782e-01 3.43972542e-01 + 3.42959337e-01 3.41955032e-01 3.40959498e-01 3.39972609e-01 3.38994241e-01 + 3.38024270e-01 3.37062579e-01 3.36109049e-01 3.35163566e-01 3.34226018e-01 + 3.33296293e-01 3.32374284e-01 3.31459885e-01 3.30552992e-01 3.29653502e-01 + 3.28761315e-01 3.27876333e-01 3.26998460e-01 3.26127600e-01 3.25263662e-01 + 3.24406553e-01 3.23556184e-01 3.22712468e-01 3.21875318e-01 3.21044649e-01 + 3.20220378e-01 3.19402424e-01 3.18590706e-01 3.17785145e-01 3.16985665e-01 + 3.16192188e-01 3.15404639e-01 3.14622947e-01 3.13847038e-01 3.13076841e-01 + 3.12312287e-01 3.11553306e-01 3.10799833e-01 3.10051800e-01 3.09309142e-01 + 3.08571795e-01 3.07839697e-01 3.07112784e-01 3.06390997e-01 3.05674275e-01 + 3.04962560e-01 3.04255793e-01 3.03553917e-01 3.02856876e-01 3.02164615e-01 + 3.01477079e-01 3.00794216e-01 3.00115971e-01 2.99442294e-01 2.98773134e-01 + 2.98108439e-01 2.97448161e-01 2.96792252e-01 2.96140662e-01 2.95493345e-01 + 2.94850254e-01 2.94211344e-01 2.93576570e-01 2.92945886e-01 2.92319250e-01 + 2.91696618e-01 2.91077947e-01 2.90463197e-01 2.89852325e-01 2.89245291e-01 + 2.88642055e-01 2.88042577e-01 2.87446820e-01 2.86854743e-01 2.86266311e-01 + 2.85681484e-01 2.85100228e-01 2.84522505e-01 2.83948280e-01 2.83377517e-01 + 2.82810183e-01 2.82246243e-01 2.81685662e-01 2.81128409e-01 2.80574450e-01 + 2.80023753e-01 2.79476286e-01 2.78932017e-01 2.78390916e-01 2.77852951e-01 + 2.77318094e-01 2.76786313e-01 2.76257580e-01 2.75731865e-01 2.75209140e-01 + 2.74689377e-01 2.74172548e-01 2.73658625e-01 2.73147581e-01 2.72639389e-01 + 2.72134024e-01 2.71631458e-01 2.71131667e-01 2.70634624e-01 2.70140305e-01 + 2.69648684e-01 2.69159738e-01 2.68673442e-01 2.68189772e-01 2.67708706e-01 + 2.67230218e-01 2.66754287e-01 2.66280890e-01 2.65810005e-01 2.65341608e-01 + 2.64875680e-01 2.64412197e-01 2.63951138e-01 2.63492483e-01 2.63036211e-01 + 2.62582301e-01 2.62130732e-01 2.61681486e-01 2.61234541e-01 2.60789879e-01 + 2.60347479e-01 2.59907323e-01 2.59469393e-01 2.59033668e-01 2.58600131e-01 + 2.58168764e-01 2.57739549e-01 2.57312467e-01 2.56887501e-01 2.56464633e-01 + 2.56043847e-01 2.55625126e-01 2.55208452e-01 2.54793809e-01 2.54381180e-01 + 2.53970550e-01 2.53561902e-01 2.53155220e-01 2.52750489e-01 2.52347693e-01 + 2.51946816e-01 2.51547844e-01 2.51150761e-01 2.50755553e-01 2.50362204e-01 + 2.49970701e-01 2.49581029e-01 2.49193173e-01 2.48807120e-01 2.48422856e-01 + 2.48040367e-01 2.47659639e-01 2.47280658e-01 2.46903413e-01 2.46527888e-01 + 2.46154072e-01 2.45781951e-01 2.45411513e-01 2.45042745e-01 2.44675634e-01 + 2.44310168e-01 2.43946335e-01 2.43584122e-01 2.43223518e-01 2.42864511e-01 + 2.42507089e-01 2.42151241e-01 2.41796954e-01 2.41444218e-01 2.41093021e-01 + 2.40743352e-01 2.40395201e-01 2.40048555e-01 2.39703404e-01 2.39359739e-01 + 2.39017547e-01 2.38676818e-01 2.38337542e-01 2.37999710e-01 2.37663309e-01 + 2.37328332e-01 2.36994766e-01 2.36662603e-01 2.36331833e-01 2.36002446e-01 + 2.35674432e-01 2.35347783e-01 2.35022487e-01 2.34698537e-01 2.34375923e-01 + 2.34054635e-01 2.33734666e-01 2.33416004e-01 2.33098643e-01 2.32782573e-01 + 2.32467784e-01 2.32154270e-01 2.31842020e-01 2.31531028e-01 2.31221283e-01 + 2.30912778e-01 2.30605504e-01 2.30299454e-01 2.29994620e-01 2.29690992e-01 + 2.29388564e-01 2.29087328e-01 2.28787275e-01 2.28488398e-01 2.28190689e-01 + 2.27894141e-01 2.27598746e-01 2.27304497e-01 2.27011386e-01 2.26719406e-01 + 2.26428550e-01 2.26138810e-01 2.25850180e-01 2.25562652e-01 2.25276219e-01 + 2.24990875e-01 2.24706613e-01 2.24423425e-01 2.24141305e-01 2.23860246e-01 + 2.23580243e-01 2.23301287e-01 2.23023372e-01 2.22746493e-01 2.22470643e-01 + 2.22195814e-01 2.21922002e-01 2.21649200e-01 2.21377401e-01 2.21106599e-01 + 2.20836789e-01 2.20567964e-01 2.20300119e-01 2.20033247e-01 2.19767342e-01 + 2.19502400e-01 2.19238413e-01 2.18975376e-01 2.18713284e-01 2.18452130e-01 + 2.18191910e-01 2.17932618e-01 2.17674247e-01 2.17416794e-01 2.17160252e-01 + 2.16904616e-01 2.16649880e-01 2.16396040e-01 2.16143090e-01 2.15891025e-01 + 2.15639840e-01 2.15389530e-01 2.15140089e-01 2.14891513e-01 2.14643796e-01 + 2.14396935e-01 2.14150923e-01 2.13905756e-01 2.13661429e-01 2.13417937e-01 + 2.13175276e-01 2.12933441e-01 2.12692427e-01 2.12452229e-01 2.12212843e-01 + 2.11974265e-01 2.11736490e-01 2.11499513e-01 2.11263330e-01 2.11027936e-01 + 2.10793328e-01 2.10559500e-01 2.10326449e-01 2.10094169e-01 2.09862658e-01 + 2.09631910e-01 2.09401922e-01 2.09172689e-01 2.08944208e-01 2.08716473e-01 + 2.08489481e-01 2.08263229e-01 2.08037711e-01 2.07812924e-01 2.07588865e-01 + 2.07365528e-01 2.07142911e-01 2.06921010e-01 2.06699820e-01 2.06479337e-01 + 2.06259559e-01 2.06040481e-01 2.05822100e-01 2.05604412e-01 2.05387413e-01 + 2.05171099e-01 2.04955468e-01 2.04740515e-01 2.04526237e-01 2.04312630e-01 + 2.04099691e-01 2.03887417e-01 2.03675803e-01 2.03464847e-01 2.03254545e-01 + 2.03044894e-01 2.02835891e-01 2.02627531e-01 2.02419812e-01 2.02212731e-01 + 2.02006284e-01 2.01800468e-01 2.01595280e-01 2.01390716e-01 2.01186774e-01 + 2.00983451e-01 2.00780742e-01 2.00578646e-01 2.00377158e-01 2.00176277e-01 + 1.99975998e-01 1.99776320e-01 1.99577238e-01 1.99378751e-01 1.99180854e-01 + 1.98983546e-01 1.98786822e-01 1.98590681e-01 1.98395120e-01 1.98200135e-01 + 1.98005724e-01 1.97811884e-01 1.97618612e-01 1.97425905e-01 1.97233761e-01 + 1.97042177e-01 1.96851151e-01 1.96660678e-01 1.96470758e-01 1.96281387e-01 + 1.96092562e-01 1.95904281e-01 1.95716541e-01 1.95529341e-01 1.95342676e-01 + 1.95156545e-01 1.94970945e-01 1.94785873e-01 1.94601328e-01 1.94417306e-01 + 1.94233805e-01 1.94050823e-01 1.93868357e-01 1.93686404e-01 1.93504963e-01 + 1.93324031e-01 1.93143606e-01 1.92963685e-01 1.92784265e-01 1.92605345e-01 + 1.92426923e-01 1.92248995e-01 1.92071560e-01 1.91894616e-01 1.91718159e-01 + 1.91542189e-01 1.91366702e-01 1.91191696e-01 1.91017170e-01 1.90843121e-01 + 1.90669546e-01 1.90496445e-01 1.90323814e-01 1.90151652e-01 1.89979956e-01 + 1.89808724e-01 1.89637954e-01 1.89467644e-01 1.89297793e-01 1.89128397e-01 + 1.88959456e-01 1.88790966e-01 1.88622926e-01 1.88455335e-01 1.88288189e-01 + 1.88121487e-01 1.87955227e-01 1.87789407e-01 1.87624025e-01 1.87459079e-01 + 1.87294568e-01 1.87130489e-01 1.86966840e-01 1.86803620e-01 1.86640827e-01 + 1.86478458e-01 1.86316513e-01 1.86154989e-01 1.85993884e-01 1.85833197e-01 + 1.85672925e-01 1.85513068e-01 1.85353622e-01 1.85194587e-01 1.85035961e-01 + 1.84877742e-01 1.84719927e-01 1.84562517e-01 1.84405508e-01 1.84248899e-01 + 1.84092688e-01 1.83936874e-01 1.83781455e-01 1.83626429e-01 1.83471795e-01 + 1.83317551e-01 1.83163695e-01 1.83010226e-01 1.82857142e-01 1.82704442e-01 + 1.82552123e-01 1.82400185e-01 1.82248626e-01 1.82097444e-01 1.81946637e-01 + 1.81796204e-01 1.81646144e-01 1.81496455e-01 1.81347136e-01 1.81198184e-01 + 1.81049599e-01 1.80901378e-01 1.80753522e-01 1.80606027e-01 1.80458892e-01 + 1.80312117e-01 1.80165699e-01 1.80019637e-01 1.79873930e-01 1.79728576e-01 + 1.79583574e-01 1.79438922e-01 1.79294620e-01 1.79150665e-01 1.79007056e-01 + 1.78863792e-01 1.78720871e-01 1.78578292e-01 1.78436054e-01 1.78294156e-01 + 1.78152595e-01 1.78011371e-01 1.77870482e-01 1.77729928e-01 1.77589706e-01 + 1.77449815e-01 1.77310255e-01 1.77171023e-01 1.77032119e-01 1.76893540e-01 + 1.76755287e-01 1.76617358e-01 1.76479751e-01 1.76342465e-01 1.76205499e-01 + 1.76068851e-01 1.75932521e-01 1.75796507e-01 1.75660808e-01 1.75525423e-01 + 1.75390351e-01 1.75255589e-01 1.75121138e-01 1.74986996e-01 1.74853162e-01 + 1.74719634e-01 1.74586412e-01 1.74453494e-01 1.74320879e-01 1.74188566e-01 + 1.74056554e-01 1.73924842e-01 1.73793428e-01 1.73662312e-01 1.73531492e-01 + 1.73400967e-01 1.73270736e-01 1.73140798e-01 1.73011152e-01 1.72881797e-01 + 1.72752732e-01 1.72623955e-01 1.72495466e-01 1.72367263e-01 1.72239346e-01 + 1.72111713e-01 1.71984363e-01 1.71857296e-01 1.71730510e-01 1.71604004e-01 + 1.71477777e-01 1.71351828e-01 1.71226157e-01 1.71100761e-01 1.70975641e-01 + 1.70850795e-01 1.70726222e-01 1.70601921e-01 1.70477891e-01 1.70354131e-01 + 1.70230640e-01 1.70107418e-01 1.69984462e-01 1.69861773e-01 1.69739349e-01 + 1.69617190e-01 1.69495294e-01 1.69373660e-01 1.69252288e-01 1.69131176e-01 + 1.69010324e-01 1.68889731e-01 1.68769395e-01 1.68649317e-01 1.68529494e-01 + 1.68409926e-01 1.68290613e-01 1.68171552e-01 1.68052744e-01 1.67934188e-01 + 1.67815882e-01 1.67697825e-01 1.67580018e-01 1.67462458e-01 1.67345146e-01 + 1.67228079e-01 1.67111258e-01 1.66994682e-01 1.66878349e-01 1.66762259e-01 + 1.66646411e-01 1.66530804e-01 1.66415437e-01 1.66300309e-01 1.66185421e-01 + 1.66070770e-01 1.65956356e-01 1.65842178e-01 1.65728235e-01 1.65614527e-01 + 1.65501053e-01 1.65387812e-01 1.65274803e-01 1.65162025e-01 1.65049477e-01 + 1.64937160e-01 1.64825071e-01 1.64713211e-01 1.64601578e-01 1.64490172e-01 + 1.64378991e-01 1.64268036e-01 1.64157305e-01 1.64046798e-01 1.63936514e-01 + 1.63826452e-01 1.63716611e-01 1.63606991e-01 1.63497591e-01 1.63388409e-01 + 1.63279447e-01 1.63170702e-01 1.63062174e-01 1.62953862e-01 1.62845766e-01 + 1.62737885e-01 1.62630217e-01 1.62522764e-01 1.62415523e-01 1.62308493e-01 + 1.62201676e-01 1.62095069e-01 1.61988671e-01 1.61882483e-01 1.61776504e-01 + 1.61670732e-01 1.61565168e-01 1.61459810e-01 1.61354658e-01 1.61249711e-01 + 1.61144969e-01 1.61040431e-01 1.60936095e-01 1.60831963e-01 1.60728032e-01 + 1.60624302e-01 1.60520773e-01 1.60417444e-01 1.60314314e-01 1.60211383e-01 + 1.60108650e-01 1.60006114e-01 1.59903775e-01 1.59801632e-01 1.59699684e-01 + 1.59597932e-01 1.59496373e-01 1.59395009e-01 1.59293837e-01 1.59192858e-01 + 1.59092070e-01 1.58991474e-01 1.58891068e-01 1.58790852e-01 1.58690826e-01 + 1.58590988e-01 1.58491339e-01 1.58391877e-01 1.58292602e-01 1.58193514e-01 + 1.58094612e-01 1.57995894e-01 1.57897362e-01 1.57799013e-01 1.57700849e-01 + 1.57602867e-01 1.57505067e-01 1.57407450e-01 1.57310013e-01 1.57212758e-01 + 1.57115682e-01 1.57018786e-01 1.56922069e-01 1.56825531e-01 1.56729171e-01 + 1.56632988e-01 1.56536982e-01 1.56441152e-01 1.56345498e-01 1.56250019e-01 + 1.56154715e-01 1.56059585e-01 1.55964629e-01 1.55869846e-01 1.55775235e-01 + 1.55680797e-01 1.55586530e-01 1.55492434e-01 1.55398509e-01 1.55304754e-01 + 1.55211168e-01 1.55117751e-01 1.55024502e-01 1.54931422e-01 1.54838509e-01 + 1.54745763e-01 1.54653183e-01 1.54560770e-01 1.54468522e-01 1.54376439e-01 + 1.54284520e-01 1.54192765e-01 1.54101174e-01 1.54009746e-01 1.53918481e-01 + 1.53827377e-01 1.53736435e-01 1.53645654e-01 1.53555034e-01 1.53464574e-01 + 1.53374274e-01 1.53284132e-01 1.53194150e-01 1.53104326e-01 1.53014660e-01 + 1.52925151e-01 1.52835798e-01 1.52746603e-01 1.52657563e-01 1.52568679e-01 + 1.52479950e-01 1.52391376e-01 1.52302955e-01 1.52214689e-01 1.52126576e-01 + 1.52038615e-01 1.51950807e-01 1.51863151e-01 1.51775647e-01 1.51688293e-01 + 1.51601091e-01 1.51514038e-01 1.51427135e-01 1.51340382e-01 1.51253778e-01 + 1.51167322e-01 1.51081014e-01 1.50994854e-01 1.50908841e-01 1.50822975e-01 + 1.50737255e-01 1.50651681e-01 1.50566253e-01 1.50480970e-01 1.50395832e-01 + 1.50310838e-01 1.50225988e-01 1.50141281e-01 1.50056718e-01 1.49972298e-01 + 1.49888019e-01 1.49803883e-01 1.49719888e-01 1.49636035e-01 1.49552322e-01 + 1.49468749e-01 1.49385316e-01 1.49302023e-01 1.49218869e-01 1.49135854e-01 + 1.49052977e-01 1.48970239e-01 1.48887638e-01 1.48805174e-01 1.48722847e-01 + 1.48640656e-01 1.48558602e-01 1.48476683e-01 1.48394900e-01 1.48313252e-01 + 1.48231738e-01 1.48150359e-01 1.48069113e-01 1.47988001e-01 1.47907022e-01 + 1.47826176e-01 1.47745463e-01 1.47664881e-01 1.47584431e-01 1.47504113e-01 + 1.47423925e-01 1.47343868e-01 1.47263942e-01 1.47184145e-01 1.47104478e-01 + 1.47024940e-01 1.46945531e-01 1.46866251e-01 1.46787099e-01 1.46708074e-01 + 1.46629177e-01 1.46550407e-01 1.46471764e-01 1.46393248e-01 1.46314857e-01 + 1.46236593e-01 1.46158454e-01 1.46080440e-01 1.46002551e-01 1.45924786e-01 + 1.45847145e-01 1.45769628e-01 1.45692235e-01 1.45614965e-01 1.45537817e-01 + 1.45460792e-01 1.45383890e-01 1.45307109e-01 1.45230449e-01 1.45153911e-01 + 1.45077494e-01 1.45001197e-01 1.44925021e-01 1.44848964e-01 1.44773027e-01 + 1.44697209e-01 1.44621511e-01 1.44545931e-01 1.44470469e-01 1.44395126e-01 + 1.44319900e-01 1.44244791e-01 1.44169800e-01 1.44094926e-01 1.44020168e-01 + 1.43945527e-01 1.43871001e-01 1.43796591e-01 1.43722296e-01 1.43648117e-01 + 1.43574052e-01 1.43500101e-01 1.43426265e-01 1.43352542e-01 1.43278934e-01 + 1.43205438e-01 1.43132055e-01 1.43058785e-01 1.42985628e-01 1.42912583e-01 + 1.42839649e-01 1.42766827e-01 1.42694116e-01 1.42621516e-01 1.42549027e-01 + 1.42476649e-01 1.42404380e-01 1.42332222e-01 1.42260172e-01 1.42188233e-01 + 1.42116402e-01 1.42044680e-01 1.41973066e-01 1.41901561e-01 1.41830164e-01 + 1.41758874e-01 1.41687692e-01 1.41616617e-01 1.41545648e-01 1.41474786e-01 + 1.41404031e-01 1.41333382e-01 1.41262838e-01 1.41192400e-01 1.41122067e-01 + 1.41051839e-01 1.40981716e-01 1.40911698e-01 1.40841783e-01 1.40771973e-01 + 1.40702266e-01 1.40632663e-01 1.40563163e-01 1.40493766e-01 1.40424471e-01 + 1.40355279e-01 1.40286189e-01 1.40217202e-01 1.40148315e-01 1.40079531e-01 + 1.40010847e-01 1.39942264e-01 1.39873782e-01 1.39805401e-01 1.39737119e-01 + 1.39668938e-01 1.39600856e-01 1.39532874e-01 1.39464991e-01 1.39397207e-01 + 1.39329522e-01 1.39261935e-01 1.39194446e-01 1.39127056e-01 1.39059763e-01 + 1.38992568e-01 1.38925470e-01 1.38858469e-01 1.38791565e-01 1.38724758e-01 + 1.38658047e-01 1.38591432e-01 1.38524913e-01 1.38458490e-01 1.38392162e-01 + 1.38325930e-01 1.38259792e-01 1.38193750e-01 1.38127801e-01 1.38061947e-01 + 1.37996188e-01 1.37930522e-01 1.37864950e-01 1.37799471e-01 1.37734085e-01 + 1.37668793e-01 1.37603593e-01 1.37538485e-01 1.37473471e-01 1.37408548e-01 + 1.37343717e-01 1.37278977e-01 1.37214330e-01 1.37149773e-01 1.37085308e-01 + 1.37020933e-01 1.36956649e-01 1.36892455e-01 1.36828351e-01 1.36764338e-01 + 1.36700414e-01 1.36636580e-01 1.36572835e-01 1.36509179e-01 1.36445612e-01 + 1.36382134e-01 1.36318745e-01 1.36255443e-01 1.36192230e-01 1.36129105e-01 + 1.36066067e-01 1.36003117e-01 1.35940254e-01 1.35877478e-01 1.35814789e-01 + 1.35752187e-01 1.35689672e-01 1.35627242e-01 1.35564899e-01 1.35502641e-01 + 1.35440470e-01 1.35378384e-01 1.35316383e-01 1.35254467e-01 1.35192636e-01 + 1.35130890e-01 1.35069228e-01 1.35007651e-01 1.34946158e-01 1.34884748e-01 + 1.34823423e-01 1.34762181e-01 1.34701022e-01 1.34639947e-01 1.34578955e-01 + 1.34518045e-01 1.34457218e-01 1.34396474e-01 1.34335812e-01 1.34275232e-01 + 1.34214733e-01 1.34154317e-01 1.34093982e-01 1.34033728e-01 1.33973556e-01 + 1.33913464e-01 1.33853453e-01 1.33793523e-01 1.33733673e-01 1.33673904e-01 + 1.33614214e-01 1.33554605e-01 1.33495075e-01 1.33435625e-01 1.33376254e-01 + 1.33316962e-01 1.33257749e-01 1.33198615e-01 1.33139560e-01 1.33080583e-01 + 1.33021685e-01 1.32962864e-01 1.32904122e-01 1.32845457e-01 1.32786870e-01 + 1.32728361e-01 1.32669928e-01 1.32611573e-01 1.32553295e-01 1.32495093e-01 + 1.32436968e-01 1.32378920e-01 1.32320948e-01 1.32263052e-01 1.32205232e-01 + 1.32147487e-01 1.32089818e-01 1.32032225e-01 1.31974707e-01 1.31917264e-01 + 1.31859896e-01 1.31802603e-01 1.31745384e-01 1.31688240e-01 1.31631170e-01 + 1.31574174e-01 1.31517252e-01 1.31460404e-01 1.31403630e-01 1.31346929e-01 + 1.31290301e-01 1.31233747e-01 1.31177266e-01 1.31120857e-01 1.31064522e-01 + 1.31008258e-01 1.30952068e-01 1.30895949e-01 1.30839903e-01 1.30783928e-01 + 1.30728025e-01 1.30672194e-01 1.30616435e-01 1.30560746e-01 1.30505129e-01 + 1.30449583e-01 1.30394108e-01 1.30338703e-01 1.30283369e-01 1.30228105e-01 + 1.30172912e-01 1.30117789e-01 1.30062736e-01 1.30007752e-01 1.29952839e-01 + 1.29897994e-01 1.29843219e-01 1.29788514e-01 1.29733877e-01 1.29679310e-01 + 1.29624811e-01 1.29570381e-01 1.29516019e-01 1.29461726e-01 1.29407501e-01 + 1.29353344e-01 1.29299255e-01 1.29245234e-01 1.29191280e-01 1.29137394e-01 + 1.29083575e-01 1.29029824e-01 1.28976140e-01 1.28922522e-01 1.28868972e-01 + 1.28815488e-01 1.28762070e-01 1.28708719e-01 1.28655435e-01 1.28602216e-01 + 1.28549063e-01 1.28495977e-01 1.28442955e-01 1.28390000e-01 1.28337110e-01 + 1.28284285e-01 1.28231526e-01 1.28178831e-01 1.28126202e-01 1.28073637e-01 + 1.28021137e-01 1.27968701e-01 1.27916330e-01 1.27864023e-01 1.27811780e-01 + 1.27759601e-01 1.27707486e-01 1.27655434e-01 1.27603447e-01 1.27551522e-01 + 1.27499661e-01 1.27447864e-01 1.27396129e-01 1.27344457e-01 1.27292848e-01 + 1.27241302e-01 1.27189818e-01 1.27138397e-01 1.27087038e-01 1.27035742e-01 + 1.26984507e-01 1.26933334e-01 1.26882223e-01 1.26831174e-01 1.26780187e-01 + 1.26729260e-01 1.26678396e-01 1.26627592e-01 1.26576849e-01 1.26526168e-01 + 1.26475547e-01 1.26424987e-01 1.26374487e-01 1.26324048e-01 1.26273670e-01 + 1.26223351e-01 1.26173093e-01 1.26122894e-01 1.26072756e-01 1.26022677e-01 + 1.25972658e-01 1.25922698e-01 1.25872798e-01 1.25822957e-01 1.25773176e-01 + 1.25723453e-01 1.25673789e-01 1.25624184e-01 1.25574638e-01 1.25525150e-01 + 1.25475721e-01 1.25426350e-01 1.25377037e-01 1.25327782e-01 1.25278586e-01 + 1.25229447e-01 1.25180366e-01 1.25131343e-01 1.25082377e-01 1.25033469e-01 + 1.24984618e-01 1.24935824e-01 1.24887088e-01 1.24838408e-01 1.24789785e-01 + 1.24741219e-01 1.24692710e-01 1.24644257e-01 1.24595861e-01 1.24547521e-01 + 1.24499237e-01 1.24451010e-01 1.24402838e-01 1.24354722e-01 1.24306662e-01 + 1.24258658e-01 1.24210709e-01 1.24162816e-01 1.24114978e-01 1.24067195e-01 + 1.24019468e-01 1.23971795e-01 1.23924178e-01 1.23876615e-01 1.23829107e-01 + 1.23781654e-01 1.23734255e-01 1.23686910e-01 1.23639620e-01 1.23592384e-01 + 1.23545202e-01 1.23498075e-01 1.23451001e-01 1.23403980e-01 1.23357014e-01 + 1.23310101e-01 1.23263242e-01 1.23216436e-01 1.23169683e-01 1.23122983e-01 + 1.23076337e-01 1.23029743e-01 1.22983202e-01 1.22936715e-01 1.22890279e-01 + 1.22843897e-01 1.22797567e-01 1.22751289e-01 1.22705063e-01 1.22658890e-01 + 1.22612769e-01 1.22566700e-01 1.22520682e-01 1.22474717e-01 1.22428803e-01 + 1.22382941e-01 1.22337130e-01 1.22291371e-01 1.22245663e-01 1.22200006e-01 + 1.22154400e-01 1.22108845e-01 1.22063342e-01 1.22017889e-01 1.21972487e-01 + 1.21927135e-01 1.21881834e-01 1.21836584e-01 1.21791383e-01 1.21746234e-01 + 1.21701134e-01 1.21656084e-01 1.21611085e-01 1.21566135e-01 1.21521235e-01 + 1.21476385e-01 1.21431584e-01 1.21386833e-01 1.21342131e-01 1.21297479e-01 + 1.21252876e-01 1.21208322e-01 1.21163817e-01 1.21119362e-01 1.21074955e-01 + 1.21030597e-01 1.20986287e-01 1.20942026e-01 1.20897814e-01 1.20853651e-01 + 1.20809535e-01 1.20765468e-01 1.20721449e-01 1.20677478e-01 1.20633555e-01 + 1.20589681e-01 1.20545854e-01 1.20502074e-01 1.20458343e-01 1.20414659e-01 + 1.20371022e-01 1.20327433e-01 1.20283891e-01 1.20240396e-01 1.20196949e-01 + 1.20153549e-01 1.20110195e-01 1.20066889e-01 1.20023629e-01 1.19980416e-01 + 1.19937250e-01 1.19894130e-01 1.19851056e-01 1.19808030e-01 1.19765049e-01 + 1.19722115e-01 1.19679226e-01 1.19636384e-01 1.19593588e-01 1.19550838e-01 + 1.19508133e-01 1.19465474e-01 1.19422861e-01 1.19380294e-01 1.19337772e-01 + 1.19295295e-01 1.19252863e-01 1.19210477e-01 1.19168136e-01 1.19125841e-01 + 1.19083590e-01 1.19041384e-01 1.18999223e-01 1.18957106e-01 1.18915035e-01 + 1.18873008e-01 1.18831025e-01 1.18789087e-01 1.18747194e-01 1.18705344e-01 + 1.18663539e-01 1.18621778e-01 1.18580061e-01 1.18538388e-01 1.18496759e-01 + 1.18455174e-01 1.18413632e-01 1.18372134e-01 1.18330680e-01 1.18289269e-01 + 1.18247902e-01 1.18206578e-01 1.18165298e-01 1.18124060e-01 1.18082866e-01 + 1.18041715e-01 1.18000607e-01 1.17959541e-01 1.17918519e-01 1.17877539e-01 + 1.17836602e-01 1.17795708e-01 1.17754856e-01 1.17714047e-01 1.17673280e-01 + 1.17632556e-01 1.17591873e-01 1.17551233e-01 1.17510635e-01 1.17470079e-01 + 1.17429565e-01 1.17389093e-01 1.17348662e-01 1.17308274e-01 1.17267927e-01 + 1.17227622e-01 1.17187358e-01 1.17147135e-01 1.17106955e-01 1.17066815e-01 + 1.17026717e-01 1.16986659e-01 1.16946643e-01 1.16906668e-01 1.16866734e-01 + 1.16826841e-01 1.16786988e-01 1.16747177e-01 1.16707406e-01 1.16667676e-01 + 1.16627986e-01 1.16588337e-01 1.16548728e-01 1.16509159e-01 1.16469631e-01 + 1.16430143e-01 1.16390695e-01 1.16351287e-01 1.16311919e-01 1.16272591e-01 + 1.16233303e-01 1.16194055e-01 1.16154846e-01 1.16115678e-01 1.16076548e-01 + 1.16037459e-01 1.15998408e-01 1.15959397e-01 1.15920426e-01 1.15881494e-01 + 1.15842601e-01 1.15803747e-01 1.15764932e-01 1.15726156e-01 1.15687419e-01 + 1.15648721e-01 1.15610062e-01 1.15571441e-01 1.15532859e-01 1.15494316e-01 + 1.15455812e-01 1.15417345e-01 1.15378918e-01 1.15340528e-01 1.15302177e-01 + 1.15263864e-01 1.15225590e-01 1.15187353e-01 1.15149155e-01 1.15110994e-01 + 1.15072871e-01 1.15034786e-01 1.14996739e-01 1.14958730e-01 1.14920759e-01 + 1.14882824e-01 1.14844928e-01 1.14807069e-01 1.14769247e-01 1.14731463e-01 + 1.14693716e-01 1.14656006e-01 1.14618334e-01 1.14580699e-01 1.14543100e-01 + 1.14505539e-01 1.14468014e-01 1.14430527e-01 1.14393076e-01 1.14355662e-01 + 1.14318284e-01 1.14280944e-01 1.14243640e-01 1.14206372e-01 1.14169141e-01 + 1.14131946e-01 1.14094787e-01 1.14057665e-01 1.14020579e-01 1.13983529e-01 + 1.13946515e-01 1.13909538e-01 1.13872596e-01 1.13835690e-01 1.13798820e-01 + 1.13761986e-01 1.13725188e-01 1.13688425e-01 1.13651698e-01 1.13615006e-01 + 1.13578350e-01 1.13541730e-01 1.13505144e-01 1.13468595e-01 1.13432080e-01 + 1.13395601e-01 1.13359156e-01 1.13322747e-01 1.13286373e-01 1.13250035e-01 + 1.13213730e-01 1.13177461e-01 1.13141227e-01 1.13105028e-01 1.13068863e-01 + 1.13032733e-01 1.12996637e-01 1.12960576e-01 1.12924550e-01 1.12888558e-01 + 1.12852600e-01 1.12816677e-01 1.12780788e-01 1.12744933e-01 1.12709112e-01 + 1.12673326e-01 1.12637574e-01 1.12601855e-01 1.12566171e-01 1.12530520e-01 + 1.12494904e-01 1.12459321e-01 1.12423772e-01 1.12388256e-01 1.12352774e-01 + 1.12317326e-01 1.12281911e-01 1.12246530e-01 1.12211182e-01 1.12175868e-01 + 1.12140587e-01 1.12105339e-01 1.12070125e-01 1.12034943e-01 1.11999795e-01 + 1.11964679e-01 1.11929597e-01 1.11894548e-01 1.11859532e-01 1.11824548e-01 + 1.11789597e-01 1.11754679e-01 1.11719794e-01 1.11684941e-01 1.11650121e-01 + 1.11615334e-01 1.11580579e-01 1.11545856e-01 1.11511166e-01 1.11476508e-01 + 1.11441883e-01 1.11407289e-01 1.11372728e-01 1.11338199e-01 1.11303703e-01 + 1.11269238e-01 1.11234805e-01 1.11200404e-01 1.11166035e-01 1.11131698e-01 + 1.11097393e-01 1.11063119e-01 1.11028877e-01 1.10994667e-01 1.10960489e-01 + 1.10926342e-01 1.10892226e-01 1.10858142e-01 1.10824089e-01 1.10790068e-01 + 1.10756078e-01 1.10722119e-01 1.10688192e-01 1.10654295e-01 1.10620430e-01 + 1.10586596e-01 1.10552793e-01 1.10519021e-01 1.10485279e-01 1.10451569e-01 + 1.10417890e-01 1.10384241e-01 1.10350623e-01 1.10317036e-01 1.10283479e-01 + 1.10249953e-01 1.10216458e-01 1.10182993e-01 1.10149558e-01 1.10116154e-01 + 1.10082780e-01 1.10049437e-01 1.10016124e-01 1.09982841e-01 1.09949588e-01 + 1.09916366e-01 1.09883174e-01 1.09850011e-01 1.09816879e-01 1.09783776e-01 + 1.09750704e-01 1.09717661e-01 1.09684648e-01 1.09651665e-01 1.09618712e-01 + 1.09585789e-01 1.09552895e-01 1.09520030e-01 1.09487196e-01 1.09454390e-01 + 1.09421615e-01 1.09388868e-01 1.09356151e-01 1.09323464e-01 1.09290805e-01 + 1.09258176e-01 1.09225576e-01 1.09193006e-01 1.09160464e-01 1.09127951e-01 + 1.09095468e-01 1.09063013e-01 1.09030588e-01 1.08998191e-01 1.08965824e-01 + 1.08933485e-01 1.08901174e-01 1.08868893e-01 1.08836640e-01 1.08804416e-01 + 1.08772220e-01 1.08740054e-01 1.08707915e-01 1.08675805e-01 1.08643724e-01 + 1.08611671e-01 1.08579646e-01 1.08547649e-01 1.08515681e-01 1.08483741e-01 + 1.08451829e-01 1.08419946e-01 1.08388090e-01 1.08356263e-01 1.08324463e-01 + 1.08292692e-01 1.08260948e-01 1.08229233e-01 1.08197545e-01 1.08165885e-01 + 1.08134253e-01 1.08102648e-01 1.08071072e-01 1.08039523e-01 1.08008001e-01 + 1.07976507e-01 1.07945041e-01 1.07913602e-01 1.07882191e-01 1.07850807e-01 + 1.07819450e-01 1.07788121e-01 1.07756819e-01 1.07725544e-01 1.07694296e-01 + 1.07663076e-01 1.07631883e-01 1.07600717e-01 1.07569578e-01 1.07538466e-01 + 1.07507381e-01 1.07476322e-01 1.07445291e-01 1.07414287e-01 1.07383309e-01 + 1.07352359e-01 1.07321435e-01 1.07290537e-01 1.07259667e-01 1.07228823e-01 + 1.07198005e-01 1.07167214e-01 1.07136450e-01 1.07105712e-01 1.07075001e-01 + 1.07044316e-01 1.07013657e-01 1.06983025e-01 1.06952419e-01 1.06921839e-01 + 1.06891286e-01 1.06860758e-01 1.06830257e-01 1.06799782e-01 1.06769333e-01 + 1.06738910e-01 1.06708513e-01 1.06678142e-01 1.06647796e-01 1.06617477e-01 + 1.06587184e-01 1.06556916e-01 1.06526674e-01 1.06496458e-01 1.06466268e-01 + 1.06436103e-01 1.06405964e-01 1.06375850e-01 1.06345762e-01 1.06315700e-01 + 1.06285663e-01 1.06255651e-01 1.06225665e-01 1.06195704e-01 1.06165769e-01 + 1.06135859e-01 1.06105974e-01 1.06076114e-01 1.06046280e-01 1.06016470e-01 + 1.05986686e-01 1.05956927e-01 1.05927193e-01 1.05897484e-01 1.05867800e-01 + 1.05838141e-01 1.05808507e-01 1.05778897e-01 1.05749313e-01 1.05719753e-01 + 1.05690218e-01 1.05660708e-01 1.05631223e-01 1.05601762e-01 1.05572326e-01 + 1.05542914e-01 1.05513528e-01 1.05484165e-01 1.05454827e-01 1.05425514e-01 + 1.05396225e-01 1.05366960e-01 1.05337720e-01 1.05308504e-01 1.05279312e-01 + 1.05250145e-01 1.05221002e-01 1.05191883e-01 1.05162788e-01 1.05133717e-01 + 1.05104671e-01 1.05075648e-01 1.05046650e-01 1.05017675e-01 1.04988725e-01 + 1.04959798e-01 1.04930896e-01 1.04902017e-01 1.04873162e-01 1.04844331e-01 + 1.04815523e-01 1.04786740e-01 1.04757980e-01 1.04729243e-01 1.04700531e-01 + 1.04671841e-01 1.04643176e-01 1.04614534e-01 1.04585916e-01 1.04557321e-01 + 1.04528749e-01 1.04500201e-01 1.04471676e-01 1.04443175e-01 1.04414697e-01 + 1.04386242e-01 1.04357810e-01 1.04329402e-01 1.04301017e-01 1.04272655e-01 + 1.04244316e-01 1.04216000e-01 1.04187707e-01 1.04159437e-01 1.04131191e-01 + 1.04102967e-01 1.04074766e-01 1.04046588e-01 1.04018433e-01 1.03990301e-01 + 1.03962192e-01 1.03934105e-01 1.03906041e-01 1.03878000e-01 1.03849982e-01 + 1.03821986e-01 1.03794013e-01 1.03766062e-01 1.03738134e-01 1.03710229e-01 + 1.03682346e-01 1.03654486e-01 1.03626648e-01 1.03598832e-01 1.03571039e-01 + 1.03543268e-01 1.03515520e-01 1.03487793e-01 1.03460089e-01 1.03432408e-01 + 1.03404748e-01 1.03377111e-01 1.03349496e-01 1.03321903e-01 1.03294332e-01 + 1.03266783e-01 1.03239256e-01 1.03211751e-01 1.03184268e-01 1.03156807e-01 + 1.03129368e-01 1.03101951e-01 1.03074556e-01 1.03047182e-01 1.03019831e-01 + 1.02992501e-01 1.02965192e-01 1.02937906e-01 1.02910641e-01 1.02883398e-01 + 1.02856177e-01 1.02828977e-01 1.02801798e-01 1.02774642e-01 1.02747506e-01 + 1.02720392e-01 1.02693300e-01 1.02666229e-01 1.02639180e-01 1.02612151e-01 + 1.02585145e-01 1.02558159e-01 1.02531195e-01 1.02504252e-01 1.02477330e-01 + 1.02450430e-01 1.02423550e-01 1.02396692e-01 1.02369855e-01 1.02343039e-01 + 1.02316244e-01 1.02289470e-01 1.02262717e-01 1.02235985e-01 1.02209274e-01 + 1.02182584e-01 1.02155915e-01 1.02129267e-01 1.02102639e-01 1.02076033e-01 + 1.02049447e-01 1.02022882e-01 1.01996338e-01 1.01969814e-01 1.01943311e-01 + 1.01916829e-01 1.01890367e-01 1.01863926e-01 1.01837505e-01 1.01811106e-01 + 1.01784726e-01 1.01758367e-01 1.01732029e-01 1.01705711e-01 1.01679413e-01 + 1.01653136e-01 1.01626879e-01 1.01600643e-01 1.01574426e-01 1.01548230e-01 + 1.01522055e-01 1.01495899e-01 1.01469764e-01 1.01443649e-01 1.01417554e-01 + 1.01391479e-01 1.01365425e-01 1.01339390e-01 1.01313376e-01 1.01287381e-01 + 1.01261406e-01 1.01235452e-01 1.01209517e-01 1.01183603e-01 1.01157708e-01 + 1.01131833e-01 1.01105978e-01 1.01080143e-01 1.01054327e-01 1.01028532e-01 + 1.01002756e-01 1.00976999e-01 1.00951263e-01 1.00925546e-01 1.00899849e-01 + 1.00874171e-01 1.00848513e-01 1.00822875e-01 1.00797256e-01 1.00771656e-01 + 1.00746077e-01 1.00720516e-01 1.00694975e-01 1.00669454e-01 1.00643952e-01 + 1.00618469e-01 1.00593005e-01 1.00567561e-01 1.00542136e-01 1.00516731e-01 + 1.00491345e-01 1.00465978e-01 1.00440630e-01 1.00415301e-01 1.00389992e-01 + 1.00364701e-01 1.00339430e-01 1.00314178e-01 1.00288944e-01 1.00263730e-01 + 1.00238535e-01 1.00213359e-01 1.00188202e-01 1.00163064e-01 1.00137944e-01 + 1.00112844e-01 1.00087762e-01 1.00062700e-01 1.00037656e-01 1.00012631e-01 + 9.99876242e-02 9.99626366e-02 9.99376677e-02 9.99127176e-02 9.98877861e-02 + 9.98628732e-02 9.98379790e-02 9.98131034e-02 9.97882464e-02 9.97634079e-02 + 9.97385880e-02 9.97137866e-02 9.96890037e-02 9.96642393e-02 9.96394933e-02 + 9.96147657e-02 9.95900565e-02 9.95653657e-02 9.95406933e-02 9.95160392e-02 + 9.94914034e-02 9.94667859e-02 9.94421867e-02 9.94176057e-02 9.93930429e-02 + 9.93684983e-02 9.93439719e-02 9.93194636e-02 9.92949735e-02 9.92705015e-02 + 9.92460476e-02 9.92216117e-02 9.91971939e-02 9.91727940e-02 9.91484122e-02 + 9.91240484e-02 9.90997025e-02 9.90753745e-02 9.90510645e-02 9.90267723e-02 + 9.90024980e-02 9.89782415e-02 9.89540029e-02 9.89297821e-02 9.89055790e-02 + 9.88813937e-02 9.88572261e-02 9.88330763e-02 9.88089441e-02 9.87848296e-02 + 9.87607327e-02 9.87366535e-02 9.87125919e-02 9.86885478e-02 9.86645213e-02 + 9.86405124e-02 9.86165209e-02 9.85925470e-02 9.85685906e-02 9.85446516e-02 + 9.85207300e-02 9.84968258e-02 9.84729391e-02 9.84490697e-02 9.84252176e-02 + 9.84013829e-02 9.83775655e-02 9.83537654e-02 9.83299825e-02 9.83062169e-02 + 9.82824685e-02 9.82587374e-02 9.82350233e-02 9.82113265e-02 9.81876468e-02 + 9.81639842e-02 9.81403387e-02 9.81167103e-02 9.80930990e-02 9.80695047e-02 + 9.80459274e-02 9.80223671e-02 9.79988238e-02 9.79752974e-02 9.79517880e-02 + 9.79282955e-02 9.79048199e-02 9.78813611e-02 9.78579192e-02 9.78344942e-02 + 9.78110859e-02 9.77876945e-02 9.77643198e-02 9.77409619e-02 9.77176207e-02 + 9.76942963e-02 9.76709885e-02 9.76476974e-02 9.76244230e-02 9.76011651e-02 + 9.75779239e-02 9.75546993e-02 9.75314913e-02 9.75082999e-02 9.74851249e-02 + 9.74619665e-02 9.74388246e-02 9.74156991e-02 9.73925901e-02 9.73694976e-02 + 9.73464215e-02 9.73233617e-02 9.73003184e-02 9.72772914e-02 9.72542807e-02 + 9.72312864e-02 9.72083084e-02 9.71853467e-02 9.71624012e-02 9.71394719e-02 + 9.71165589e-02 9.70936621e-02 9.70707815e-02 9.70479171e-02 9.70250688e-02 + 9.70022366e-02 9.69794205e-02 9.69566206e-02 9.69338367e-02 9.69110688e-02 + 9.68883170e-02 9.68655813e-02 9.68428615e-02 9.68201577e-02 9.67974698e-02 + 9.67747979e-02 9.67521419e-02 9.67295019e-02 9.67068777e-02 9.66842693e-02 + 9.66616769e-02 9.66391002e-02 9.66165394e-02 9.65939943e-02 9.65714651e-02 + 9.65489516e-02 9.65264538e-02 9.65039718e-02 9.64815054e-02 9.64590547e-02 + 9.64366197e-02 9.64142004e-02 9.63917967e-02 9.63694086e-02 9.63470360e-02 + 9.63246791e-02 9.63023377e-02 9.62800118e-02 9.62577015e-02 9.62354067e-02 + 9.62131273e-02 9.61908635e-02 9.61686150e-02 9.61463820e-02 9.61241644e-02 + 9.61019623e-02 9.60797754e-02 9.60576040e-02 9.60354479e-02 9.60133071e-02 + 9.59911816e-02 9.59690714e-02 9.59469765e-02 9.59248968e-02 9.59028324e-02 + 9.58807832e-02 9.58587492e-02 9.58367303e-02 9.58147267e-02 9.57927382e-02 + 9.57707648e-02 9.57488065e-02 9.57268633e-02 9.57049352e-02 9.56830222e-02 + 9.56611242e-02 9.56392413e-02 9.56173733e-02 9.55955204e-02 9.55736824e-02 + 9.55518594e-02 9.55300513e-02 9.55082582e-02 9.54864799e-02 9.54647166e-02 + 9.54429681e-02 9.54212345e-02 9.53995157e-02 9.53778117e-02 9.53561226e-02 + 9.53344482e-02 9.53127886e-02 9.52911438e-02 9.52695137e-02 9.52478984e-02 + 9.52262977e-02 9.52047117e-02 9.51831404e-02 9.51615838e-02 9.51400418e-02 + 9.51185144e-02 9.50970016e-02 9.50755034e-02 9.50540198e-02 9.50325508e-02 + 9.50110963e-02 9.49896563e-02 9.49682308e-02 9.49468198e-02 9.49254233e-02 + 9.49040412e-02 9.48826736e-02 9.48613204e-02 9.48399817e-02 9.48186573e-02 + 9.47973473e-02 9.47760516e-02 9.47547703e-02 9.47335034e-02 9.47122507e-02 + 9.46910123e-02 9.46697883e-02 9.46485784e-02 9.46273829e-02 9.46062015e-02 + 9.45850344e-02 9.45638815e-02 9.45427428e-02 9.45216182e-02 9.45005078e-02 + 9.44794116e-02 9.44583294e-02 9.44372614e-02 9.44162074e-02 9.43951676e-02 + 9.43741418e-02 9.43531300e-02 9.43321323e-02 9.43111485e-02 9.42901788e-02 + 9.42692231e-02 9.42482813e-02 9.42273534e-02 9.42064395e-02 9.41855396e-02 + 9.41646535e-02 9.41437813e-02 9.41229230e-02 9.41020785e-02 9.40812479e-02 + 9.40604311e-02 9.40396282e-02 9.40188390e-02 9.39980636e-02 9.39773020e-02 + 9.39565541e-02 9.39358200e-02 9.39150995e-02 9.38943928e-02 9.38736998e-02 + 9.38530204e-02 9.38323548e-02 9.38117027e-02 9.37910643e-02 9.37704395e-02 + 9.37498283e-02 9.37292307e-02 9.37086466e-02 9.36880762e-02 9.36675192e-02 + 9.36469758e-02 9.36264459e-02 9.36059295e-02 9.35854265e-02 9.35649371e-02 + 9.35444611e-02 9.35239985e-02 9.35035493e-02 9.34831136e-02 9.34626912e-02 + 9.34422823e-02 9.34218866e-02 9.34015044e-02 9.33811355e-02 9.33607798e-02 + 9.33404375e-02 9.33201085e-02 9.32997928e-02 9.32794903e-02 9.32592011e-02 + 9.32389251e-02 9.32186624e-02 9.31984128e-02 9.31781764e-02 9.31579532e-02 + 9.31377432e-02 9.31175463e-02 9.30973626e-02 9.30771919e-02 9.30570344e-02 + 9.30368899e-02 9.30167586e-02 9.29966403e-02 9.29765350e-02 9.29564428e-02 + 9.29363636e-02 9.29162974e-02 9.28962442e-02 9.28762040e-02 9.28561768e-02 + 9.28361624e-02 9.28161611e-02 9.27961726e-02 9.27761971e-02 9.27562344e-02 + 9.27362847e-02 9.27163478e-02 9.26964237e-02 9.26765125e-02 9.26566141e-02 + 9.26367286e-02 9.26168558e-02 9.25969958e-02 9.25771486e-02 9.25573141e-02 + 9.25374924e-02 9.25176834e-02 9.24978871e-02 9.24781036e-02 9.24583327e-02 + 9.24385745e-02 9.24188289e-02 9.23990960e-02 9.23793758e-02 9.23596681e-02 + 9.23399731e-02 9.23202907e-02 9.23006208e-02 9.22809635e-02 9.22613188e-02 + 9.22416866e-02 9.22220669e-02 9.22024597e-02 9.21828651e-02 9.21632829e-02 + 9.21437132e-02 9.21241560e-02 9.21046112e-02 9.20850788e-02 9.20655589e-02 + 9.20460514e-02 9.20265563e-02 9.20070735e-02 9.19876031e-02 9.19681451e-02 + 9.19486994e-02 9.19292661e-02 9.19098451e-02 9.18904363e-02 9.18710399e-02 + 9.18516557e-02 9.18322838e-02 9.18129242e-02 9.17935768e-02 9.17742416e-02 + 9.17549186e-02 9.17356079e-02 9.17163093e-02 9.16970229e-02 9.16777486e-02 + 9.16584865e-02 9.16392366e-02 9.16199987e-02 9.16007730e-02 9.15815594e-02 + 9.15623578e-02 9.15431684e-02 9.15239910e-02 9.15048256e-02 9.14856723e-02 + 9.14665310e-02 9.14474017e-02 9.14282844e-02 9.14091791e-02 9.13900857e-02 + 9.13710043e-02 9.13519349e-02 9.13328774e-02 9.13138318e-02 9.12947982e-02 + 9.12757764e-02 9.12567665e-02 9.12377685e-02 9.12187823e-02 9.11998080e-02 + 9.11808456e-02 9.11618949e-02 9.11429561e-02 9.11240290e-02 9.11051138e-02 + 9.10862103e-02 9.10673186e-02 9.10484386e-02 9.10295704e-02 9.10107139e-02 + 9.09918691e-02 9.09730360e-02 9.09542146e-02 9.09354049e-02 9.09166069e-02 + 9.08978205e-02 9.08790457e-02 9.08602826e-02 9.08415311e-02 9.08227911e-02 + 9.08040628e-02 9.07853461e-02 9.07666409e-02 9.07479473e-02 9.07292652e-02 + 9.07105947e-02 9.06919357e-02 9.06732882e-02 9.06546522e-02 9.06360277e-02 + 9.06174146e-02 9.05988131e-02 9.05802229e-02 9.05616442e-02 9.05430770e-02 + 9.05245211e-02 9.05059767e-02 9.04874436e-02 9.04689219e-02 9.04504116e-02 + 9.04319127e-02 9.04134251e-02 9.03949488e-02 9.03764839e-02 9.03580303e-02 + 9.03395879e-02 9.03211569e-02 9.03027371e-02 9.02843286e-02 9.02659313e-02 + 9.02475453e-02 9.02291706e-02 9.02108070e-02 9.01924546e-02 9.01741135e-02 + 9.01557835e-02 9.01374647e-02 9.01191571e-02 9.01008606e-02 9.00825752e-02 + 9.00643010e-02 9.00460379e-02 9.00277859e-02 9.00095450e-02 8.99913152e-02 + 8.99730965e-02 8.99548888e-02 8.99366921e-02 8.99185065e-02 8.99003320e-02 + 8.98821684e-02 8.98640159e-02 8.98458743e-02 8.98277437e-02 8.98096241e-02 + 8.97915155e-02 8.97734178e-02 8.97553311e-02 8.97372552e-02 8.97191903e-02 + 8.97011363e-02 8.96830932e-02 8.96650610e-02 8.96470396e-02 8.96290291e-02 + 8.96110295e-02 8.95930407e-02 8.95750627e-02 8.95570956e-02 8.95391392e-02 + 8.95211937e-02 8.95032589e-02 8.94853349e-02 8.94674217e-02 8.94495192e-02 + 8.94316275e-02 8.94137465e-02 8.93958762e-02 8.93780167e-02 8.93601678e-02 + 8.93423296e-02 8.93245021e-02 8.93066853e-02 8.92888791e-02 8.92710836e-02 + 8.92532987e-02 8.92355244e-02 8.92177608e-02 8.92000077e-02 8.91822653e-02 + 8.91645334e-02 8.91468121e-02 8.91291014e-02 8.91114012e-02 8.90937115e-02 + 8.90760324e-02 8.90583638e-02 8.90407057e-02 8.90230582e-02 8.90054211e-02 + 8.89877945e-02 8.89701783e-02 8.89525726e-02 8.89349774e-02 8.89173926e-02 + 8.88998182e-02 8.88822542e-02 8.88647007e-02 8.88471575e-02 8.88296247e-02 + 8.88121023e-02 8.87945903e-02 8.87770886e-02 8.87595973e-02 8.87421163e-02 + 8.87246456e-02 8.87071853e-02 8.86897352e-02 8.86722954e-02 8.86548660e-02 + 8.86374468e-02 8.86200378e-02 8.86026391e-02 8.85852507e-02 8.85678725e-02 + 8.85505045e-02 8.85331467e-02 8.85157991e-02 8.84984618e-02 8.84811346e-02 + 8.84638176e-02 8.84465107e-02 8.84292140e-02 8.84119274e-02 8.83946510e-02 + 8.83773847e-02 8.83601285e-02 8.83428825e-02 8.83256465e-02 8.83084206e-02 + 8.82912047e-02 8.82739990e-02 8.82568033e-02 8.82396176e-02 8.82224420e-02 + 8.82052764e-02 8.81881208e-02 8.81709752e-02 8.81538396e-02 8.81367140e-02 + 8.81195984e-02 8.81024927e-02 8.80853970e-02 8.80683113e-02 8.80512355e-02 + 8.80341696e-02 8.80171137e-02 8.80000676e-02 8.79830314e-02 8.79660052e-02 + 8.79489888e-02 8.79319823e-02 8.79149857e-02 8.78979989e-02 8.78810219e-02 + 8.78640548e-02 8.78470975e-02 8.78301500e-02 8.78132123e-02 8.77962845e-02 + 8.77793664e-02 8.77624580e-02 8.77455595e-02 8.77286707e-02 8.77117916e-02 + 8.76949223e-02 8.76780628e-02 8.76612129e-02 8.76443728e-02 8.76275423e-02 + 8.76107216e-02 8.75939105e-02 8.75771091e-02 8.75603174e-02 8.75435353e-02 + 8.75267629e-02 8.75100001e-02 8.74932469e-02 8.74765033e-02 8.74597694e-02 + 8.74430451e-02 8.74263303e-02 8.74096251e-02 8.73929296e-02 8.73762435e-02 + 8.73595670e-02 8.73429001e-02 8.73262427e-02 8.73095948e-02 8.72929565e-02 + 8.72763276e-02 8.72597083e-02 8.72430984e-02 8.72264981e-02 8.72099072e-02 + 8.71933257e-02 8.71767537e-02 8.71601912e-02 8.71436381e-02 8.71270944e-02 + 8.71105602e-02 8.70940353e-02 8.70775199e-02 8.70610138e-02 8.70445172e-02 + 8.70280299e-02 8.70115519e-02 8.69950834e-02 8.69786241e-02 8.69621742e-02 + 8.69457337e-02 8.69293024e-02 8.69128805e-02 8.68964679e-02 8.68800646e-02 + 8.68636705e-02 8.68472857e-02 8.68309103e-02 8.68145440e-02 8.67981870e-02 + 8.67818393e-02 8.67655008e-02 8.67491715e-02 8.67328514e-02 8.67165406e-02 + 8.67002389e-02 8.66839464e-02 8.66676631e-02 8.66513890e-02 8.66351240e-02 + 8.66188682e-02 8.66026216e-02 8.65863841e-02 8.65701557e-02 8.65539364e-02 + 8.65377263e-02 8.65215252e-02 8.65053333e-02 8.64891504e-02 8.64729766e-02 + 8.64568119e-02 8.64406563e-02 8.64245097e-02 8.64083721e-02 8.63922436e-02 + 8.63761241e-02 8.63600136e-02 8.63439122e-02 8.63278197e-02 8.63117363e-02 + 8.62956618e-02 8.62795963e-02 8.62635398e-02 8.62474922e-02 8.62314536e-02 + 8.62154239e-02 8.61994032e-02 8.61833914e-02 8.61673885e-02 8.61513945e-02 + 8.61354094e-02 8.61194332e-02 8.61034659e-02 8.60875075e-02 8.60715580e-02 + 8.60556173e-02 8.60396855e-02 8.60237625e-02 8.60078483e-02 8.59919430e-02 + 8.59760465e-02 8.59601588e-02 8.59442800e-02 8.59284099e-02 8.59125486e-02 + 8.58966961e-02 8.58808523e-02 8.58650173e-02 8.58491911e-02 8.58333736e-02 + 8.58175649e-02 8.58017649e-02 8.57859736e-02 8.57701911e-02 8.57544172e-02 + 8.57386520e-02 8.57228956e-02 8.57071478e-02 8.56914087e-02 8.56756782e-02 + 8.56599565e-02 8.56442433e-02 8.56285389e-02 8.56128430e-02 8.55971558e-02 + 8.55814772e-02 8.55658072e-02 8.55501458e-02 8.55344930e-02 8.55188488e-02 + 8.55032132e-02 8.54875862e-02 8.54719677e-02 8.54563578e-02 8.54407564e-02 + 8.54251636e-02 8.54095793e-02 8.53940035e-02 8.53784363e-02 8.53628775e-02 + 8.53473273e-02 8.53317855e-02 8.53162523e-02 8.53007275e-02 8.52852112e-02 + 8.52697034e-02 8.52542040e-02 8.52387130e-02 8.52232305e-02 8.52077565e-02 + 8.51922909e-02 8.51768336e-02 8.51613848e-02 8.51459444e-02 8.51305124e-02 + 8.51150888e-02 8.50996736e-02 8.50842667e-02 8.50688682e-02 8.50534780e-02 + 8.50380963e-02 8.50227228e-02 8.50073577e-02 8.49920009e-02 8.49766524e-02 + 8.49613123e-02 8.49459804e-02 8.49306569e-02 8.49153416e-02 8.49000346e-02 + 8.48847359e-02 8.48694455e-02 8.48541633e-02 8.48388893e-02 8.48236237e-02 + 8.48083662e-02 8.47931170e-02 8.47778760e-02 8.47626432e-02 8.47474187e-02 + 8.47322023e-02 8.47169941e-02 8.47017941e-02 8.46866023e-02 8.46714187e-02 + 8.46562432e-02 8.46410759e-02 8.46259167e-02 8.46107657e-02 8.45956228e-02 + 8.45804880e-02 8.45653614e-02 8.45502428e-02 8.45351324e-02 8.45200301e-02 + 8.45049358e-02 8.44898497e-02 8.44747716e-02 8.44597016e-02 8.44446397e-02 + 8.44295858e-02 8.44145399e-02 8.43995021e-02 8.43844724e-02 8.43694506e-02 + 8.43544369e-02 8.43394312e-02 8.43244335e-02 8.43094438e-02 8.42944621e-02 + 8.42794883e-02 8.42645226e-02 8.42495648e-02 8.42346150e-02 8.42196731e-02 + 8.42047392e-02 8.41898132e-02 8.41748952e-02 8.41599851e-02 8.41450829e-02 + 8.41301886e-02 8.41153022e-02 8.41004238e-02 8.40855532e-02 8.40706905e-02 + 8.40558357e-02 8.40409887e-02 8.40261496e-02 8.40113184e-02 8.39964950e-02 + 8.39816795e-02 8.39668718e-02 8.39520719e-02 8.39372799e-02 8.39224957e-02 + 8.39077193e-02 8.38929507e-02 8.38781898e-02 8.38634368e-02 8.38486916e-02 + 8.38339541e-02 8.38192244e-02 8.38045025e-02 8.37897883e-02 8.37750818e-02 + 8.37603831e-02 8.37456922e-02 8.37310089e-02 8.37163334e-02 8.37016656e-02 + 8.36870055e-02 8.36723531e-02 8.36577084e-02 8.36430714e-02 8.36284421e-02 + 8.36138204e-02 8.35992064e-02 8.35846001e-02 8.35700014e-02 8.35554104e-02 + 8.35408270e-02 8.35262512e-02 8.35116831e-02 8.34971226e-02 8.34825697e-02 + 8.34680244e-02 8.34534867e-02 8.34389566e-02 8.34244341e-02 8.34099191e-02 + 8.33954118e-02 8.33809120e-02 8.33664197e-02 8.33519351e-02 8.33374579e-02 + 8.33229883e-02 8.33085263e-02 8.32940718e-02 8.32796248e-02 8.32651853e-02 + 8.32507533e-02 8.32363288e-02 8.32219118e-02 8.32075023e-02 8.31931003e-02 + 8.31787058e-02 8.31643187e-02 8.31499391e-02 8.31355669e-02 8.31212022e-02 + 8.31068450e-02 8.30924951e-02 8.30781528e-02 8.30638178e-02 8.30494902e-02 + 8.30351701e-02 8.30208574e-02 8.30065520e-02 8.29922541e-02 8.29779635e-02 + 8.29636804e-02 8.29494046e-02 8.29351361e-02 8.29208751e-02 8.29066213e-02 + 8.28923750e-02 8.28781359e-02 8.28639042e-02 8.28496799e-02 8.28354628e-02 + 8.28212531e-02 8.28070507e-02 8.27928556e-02 8.27786678e-02 8.27644872e-02 + 8.27503140e-02 8.27361480e-02 8.27219893e-02 8.27078379e-02 8.26936938e-02 + 8.26795569e-02 8.26654272e-02 8.26513048e-02 8.26371896e-02 8.26230816e-02 + 8.26089809e-02 8.25948874e-02 8.25808011e-02 8.25667220e-02 8.25526501e-02 + 8.25385854e-02 8.25245279e-02 8.25104775e-02 8.24964344e-02 8.24823984e-02 + 8.24683695e-02 8.24543479e-02 8.24403333e-02 8.24263259e-02 8.24123257e-02 + 8.23983326e-02 8.23843466e-02 8.23703677e-02 8.23563960e-02 8.23424313e-02 + 8.23284737e-02 8.23145233e-02 8.23005799e-02 8.22866436e-02 8.22727144e-02 + 8.22587923e-02 8.22448772e-02 8.22309692e-02 8.22170683e-02 8.22031744e-02 + 8.21892875e-02 8.21754077e-02 8.21615349e-02 8.21476691e-02 8.21338103e-02 + 8.21199586e-02 8.21061138e-02 8.20922761e-02 8.20784453e-02 8.20646216e-02 + 8.20508048e-02 8.20369950e-02 8.20231922e-02 8.20093963e-02 8.19956074e-02 + 8.19818254e-02 8.19680504e-02 8.19542823e-02 8.19405212e-02 8.19267670e-02 + 8.19130197e-02 8.18992794e-02 8.18855459e-02 8.18718194e-02 8.18580997e-02 + 8.18443870e-02 8.18306811e-02 8.18169822e-02 8.18032901e-02 8.17896048e-02 + 8.17759265e-02 8.17622550e-02 8.17485903e-02 8.17349326e-02 8.17212816e-02 + 8.17076375e-02 8.16940002e-02 8.16803697e-02 8.16667461e-02 8.16531293e-02 + 8.16395193e-02 8.16259161e-02 8.16123197e-02 8.15987300e-02 8.15851472e-02 + 8.15715712e-02 8.15580019e-02 8.15444394e-02 8.15308836e-02 8.15173346e-02 + 8.15037924e-02 8.14902569e-02 8.14767282e-02 8.14632062e-02 8.14496909e-02 + 8.14361823e-02 8.14226805e-02 8.14091854e-02 8.13956970e-02 8.13822153e-02 + 8.13687402e-02 8.13552719e-02 8.13418103e-02 8.13283553e-02 8.13149070e-02 + 8.13014654e-02 8.12880305e-02 8.12746022e-02 8.12611805e-02 8.12477656e-02 + 8.12343572e-02 8.12209555e-02 8.12075604e-02 8.11941719e-02 8.11807901e-02 + 8.11674149e-02 8.11540463e-02 8.11406843e-02 8.11273288e-02 8.11139800e-02 + 8.11006378e-02 8.10873021e-02 8.10739731e-02 8.10606506e-02 8.10473346e-02 + 8.10340252e-02 8.10207224e-02 8.10074261e-02 8.09941364e-02 8.09808532e-02 + 8.09675765e-02 8.09543064e-02 8.09410428e-02 8.09277857e-02 8.09145351e-02 + 8.09012911e-02 8.08880535e-02 8.08748224e-02 8.08615978e-02 8.08483797e-02 + 8.08351681e-02 8.08219630e-02 8.08087643e-02 8.07955721e-02 8.07823863e-02 + 8.07692070e-02 8.07560342e-02 8.07428678e-02 8.07297078e-02 8.07165542e-02 + 8.07034071e-02 8.06902664e-02 8.06771322e-02 8.06640043e-02 8.06508829e-02 + 8.06377678e-02 8.06246592e-02 8.06115569e-02 8.05984610e-02 8.05853715e-02 + 8.05722884e-02 8.05592116e-02 8.05461412e-02 8.05330772e-02 8.05200195e-02 + 8.05069682e-02 8.04939232e-02 8.04808846e-02 8.04678523e-02 8.04548263e-02 + 8.04418066e-02 8.04287933e-02 8.04157863e-02 8.04027856e-02 8.03897912e-02 + 8.03768031e-02 8.03638212e-02 8.03508457e-02 8.03378765e-02 8.03249135e-02 + 8.03119568e-02 8.02990064e-02 8.02860622e-02 8.02731243e-02 8.02601926e-02 + 8.02472672e-02 8.02343481e-02 8.02214351e-02 8.02085284e-02 8.01956280e-02 + 8.01827337e-02 8.01698457e-02 8.01569639e-02 8.01440883e-02 8.01312189e-02 + 8.01183557e-02 8.01054986e-02 8.00926478e-02 8.00798032e-02 8.00669647e-02 + 8.00541324e-02 8.00413063e-02 8.00284863e-02 8.00156725e-02 8.00028649e-02 + 7.99900634e-02 7.99772680e-02 7.99644788e-02 7.99516957e-02 7.99389187e-02 + 7.99261479e-02 7.99133832e-02 7.99006246e-02 7.98878721e-02 7.98751257e-02 + 7.98623854e-02 7.98496512e-02 7.98369231e-02 7.98242011e-02 7.98114851e-02 + 7.97987753e-02 7.97860715e-02 7.97733737e-02 7.97606821e-02 7.97479965e-02 + 7.97353169e-02 7.97226434e-02 7.97099759e-02 7.96973145e-02 7.96846590e-02 + 7.96720097e-02 7.96593663e-02 7.96467290e-02 7.96340976e-02 7.96214723e-02 + 7.96088530e-02 7.95962397e-02 7.95836323e-02 7.95710310e-02 7.95584356e-02 + 7.95458463e-02 7.95332629e-02 7.95206854e-02 7.95081140e-02 7.94955485e-02 + 7.94829889e-02 7.94704353e-02 7.94578877e-02 7.94453459e-02 7.94328102e-02 + 7.94202803e-02 7.94077564e-02 7.93952384e-02 7.93827263e-02 7.93702202e-02 + 7.93577199e-02 7.93452256e-02 7.93327371e-02 7.93202546e-02 7.93077779e-02 + 7.92953071e-02 7.92828423e-02 7.92703832e-02 7.92579301e-02 7.92454828e-02 + 7.92330414e-02 7.92206058e-02 7.92081761e-02 7.91957523e-02 7.91833343e-02 + 7.91709221e-02 7.91585157e-02 7.91461152e-02 7.91337206e-02 7.91213317e-02 + 7.91089486e-02 7.90965714e-02 7.90842000e-02 7.90718344e-02 7.90594746e-02 + 7.90471205e-02 7.90347723e-02 7.90224298e-02 7.90100932e-02 7.89977623e-02 + 7.89854371e-02 7.89731178e-02 7.89608042e-02 7.89484964e-02 7.89361943e-02 + 7.89238979e-02 7.89116073e-02 7.88993225e-02 7.88870434e-02 7.88747700e-02 + 7.88625023e-02 7.88502404e-02 7.88379842e-02 7.88257337e-02 7.88134889e-02 + 7.88012498e-02 7.87890164e-02 7.87767887e-02 7.87645667e-02 7.87523504e-02 + 7.87401398e-02 7.87279348e-02 7.87157355e-02 7.87035419e-02 7.86913540e-02 + 7.86791717e-02 7.86669951e-02 7.86548241e-02 7.86426588e-02 7.86304991e-02 + 7.86183450e-02 7.86061966e-02 7.85940538e-02 7.85819167e-02 7.85697851e-02 + 7.85576592e-02 7.85455389e-02 7.85334242e-02 7.85213151e-02 7.85092116e-02 + 7.84971137e-02 7.84850214e-02 7.84729347e-02 7.84608535e-02 7.84487780e-02 + 7.84367080e-02 7.84246436e-02 7.84125847e-02 7.84005314e-02 7.83884837e-02 + 7.83764415e-02 7.83644048e-02 7.83523737e-02 7.83403482e-02 7.83283282e-02 + 7.83163137e-02 7.83043047e-02 7.82923013e-02 7.82803034e-02 7.82683110e-02 + 7.82563241e-02 7.82443427e-02 7.82323668e-02 7.82203964e-02 7.82084315e-02 + 7.81964721e-02 7.81845182e-02 7.81725697e-02 7.81606268e-02 7.81486893e-02 + 7.81367572e-02 7.81248307e-02 7.81129096e-02 7.81009939e-02 7.80890837e-02 + 7.80771790e-02 7.80652797e-02 7.80533858e-02 7.80414974e-02 7.80296144e-02 + 7.80177368e-02 7.80058646e-02 7.79939979e-02 7.79821366e-02 7.79702807e-02 + 7.79584302e-02 7.79465851e-02 7.79347454e-02 7.79229111e-02 7.79110821e-02 + 7.78992586e-02 7.78874404e-02 7.78756277e-02 7.78638202e-02 7.78520182e-02 + 7.78402215e-02 7.78284302e-02 7.78166443e-02 7.78048637e-02 7.77930884e-02 + 7.77813185e-02 7.77695539e-02 7.77577947e-02 7.77460408e-02 7.77342922e-02 + 7.77225490e-02 7.77108111e-02 7.76990785e-02 7.76873512e-02 7.76756292e-02 + 7.76639125e-02 7.76522011e-02 7.76404950e-02 7.76287942e-02 7.76170987e-02 + 7.76054085e-02 7.75937236e-02 7.75820439e-02 7.75703695e-02 7.75587004e-02 + 7.75470365e-02 7.75353780e-02 7.75237246e-02 7.75120765e-02 7.75004337e-02 + 7.74887961e-02 7.74771637e-02 7.74655366e-02 7.74539147e-02 7.74422981e-02 + 7.74306867e-02 7.74190805e-02 7.74074795e-02 7.73958837e-02 7.73842931e-02 + 7.73727078e-02 7.73611276e-02 7.73495527e-02 7.73379829e-02 7.73264183e-02 + 7.73148589e-02 7.73033047e-02 7.72917557e-02 7.72802118e-02 7.72686732e-02 + 7.72571396e-02 7.72456113e-02 7.72340881e-02 7.72225701e-02 7.72110572e-02 + 7.71995494e-02 7.71880468e-02 7.71765494e-02 7.71650571e-02 7.71535699e-02 + 7.71420878e-02 7.71306109e-02 7.71191391e-02 7.71076724e-02 7.70962108e-02 + 7.70847543e-02 7.70733030e-02 7.70618567e-02 7.70504155e-02 7.70389795e-02 + 7.70275485e-02 7.70161226e-02 7.70047018e-02 7.69932860e-02 7.69818754e-02 + 7.69704698e-02 7.69590693e-02 7.69476738e-02 7.69362834e-02 7.69248981e-02 + 7.69135178e-02 7.69021426e-02 7.68907724e-02 7.68794073e-02 7.68680472e-02 + 7.68566921e-02 7.68453420e-02 7.68339970e-02 7.68226570e-02 7.68113221e-02 + 7.67999921e-02 7.67886672e-02 7.67773472e-02 7.67660323e-02 7.67547224e-02 + 7.67434174e-02 7.67321175e-02 7.67208226e-02 7.67095326e-02 7.66982476e-02 + 7.66869676e-02 7.66756926e-02 7.66644225e-02 7.66531574e-02 7.66418973e-02 + 7.66306422e-02 7.66193920e-02 7.66081467e-02 7.65969064e-02 7.65856711e-02 + 7.65744407e-02 7.65632152e-02 7.65519946e-02 7.65407790e-02 7.65295684e-02 + 7.65183626e-02 7.65071618e-02 7.64959659e-02 7.64847749e-02 7.64735888e-02 + 7.64624076e-02 7.64512313e-02 7.64400599e-02 7.64288935e-02 7.64177319e-02 + 7.64065752e-02 7.63954233e-02 7.63842764e-02 7.63731343e-02 7.63619972e-02 + 7.63508648e-02 7.63397374e-02 7.63286148e-02 7.63174971e-02 7.63063842e-02 + 7.62952762e-02 7.62841730e-02 7.62730747e-02 7.62619813e-02 7.62508926e-02 + 7.62398088e-02 7.62287298e-02 7.62176557e-02 7.62065864e-02 7.61955219e-02 + 7.61844622e-02 7.61734074e-02 7.61623573e-02 7.61513121e-02 7.61402716e-02 + 7.61292360e-02 7.61182052e-02 7.61071791e-02 7.60961579e-02 7.60851414e-02 + 7.60741297e-02 7.60631228e-02 7.60521207e-02 7.60411233e-02 7.60301307e-02 + 7.60191429e-02 7.60081598e-02 7.59971815e-02 7.59862080e-02 7.59752392e-02 + 7.59642751e-02 7.59533158e-02 7.59423613e-02 7.59314115e-02 7.59204664e-02 + 7.59095260e-02 7.58985904e-02 7.58876595e-02 7.58767333e-02 7.58658119e-02 + 7.58548951e-02 7.58439831e-02 7.58330758e-02 7.58221731e-02 7.58112752e-02 + 7.58003820e-02 7.57894935e-02 7.57786096e-02 7.57677305e-02 7.57568560e-02 + 7.57459862e-02 7.57351211e-02 7.57242607e-02 7.57134049e-02 7.57025538e-02 + 7.56917074e-02 7.56808656e-02 7.56700285e-02 7.56591961e-02 7.56483683e-02 + 7.56375451e-02 7.56267266e-02 7.56159127e-02 7.56051035e-02 7.55942989e-02 + 7.55834989e-02 7.55727035e-02 7.55619128e-02 7.55511267e-02 7.55403452e-02 + 7.55295684e-02 7.55187961e-02 7.55080285e-02 7.54972654e-02 7.54865070e-02 + 7.54757531e-02 7.54650039e-02 7.54542592e-02 7.54435192e-02 7.54327837e-02 + 7.54220528e-02 7.54113264e-02 7.54006047e-02 7.53898875e-02 7.53791749e-02 + 7.53684669e-02 7.53577634e-02 7.53470644e-02 7.53363701e-02 7.53256803e-02 + 7.53149950e-02 7.53043143e-02 7.52936381e-02 7.52829665e-02 7.52722994e-02 + 7.52616368e-02 7.52509787e-02 7.52403252e-02 7.52296762e-02 7.52190318e-02 + 7.52083918e-02 7.51977564e-02 7.51871255e-02 7.51764990e-02 7.51658771e-02 + 7.51552597e-02 7.51446468e-02 7.51340384e-02 7.51234344e-02 7.51128350e-02 + 7.51022400e-02 7.50916496e-02 7.50810636e-02 7.50704821e-02 7.50599050e-02 + 7.50493324e-02 7.50387643e-02 7.50282007e-02 7.50176415e-02 7.50070868e-02 + 7.49965365e-02 7.49859907e-02 7.49754493e-02 7.49649123e-02 7.49543799e-02 + 7.49438518e-02 7.49333282e-02 7.49228090e-02 7.49122942e-02 7.49017839e-02 + 7.48912780e-02 7.48807765e-02 7.48702794e-02 7.48597868e-02 7.48492985e-02 + 7.48388147e-02 7.48283352e-02 7.48178602e-02 7.48073895e-02 7.47969233e-02 + 7.47864614e-02 7.47760040e-02 7.47655509e-02 7.47551022e-02 7.47446579e-02 + 7.47342179e-02 7.47237824e-02 7.47133512e-02 7.47029243e-02 7.46925019e-02 + 7.46820838e-02 7.46716700e-02 7.46612606e-02 7.46508556e-02 7.46404549e-02 + 7.46300586e-02 7.46196666e-02 7.46092789e-02 7.45988956e-02 7.45885166e-02 + 7.45781419e-02 7.45677716e-02 7.45574056e-02 7.45470439e-02 7.45366865e-02 + 7.45263335e-02 7.45159847e-02 7.45056403e-02 7.44953002e-02 7.44849644e-02 + 7.44746329e-02 7.44643056e-02 7.44539827e-02 7.44436641e-02 7.44333497e-02 + 7.44230397e-02 7.44127339e-02 7.44024324e-02 7.43921352e-02 7.43818423e-02 + 7.43715536e-02 7.43612692e-02 7.43509890e-02 7.43407132e-02 7.43304416e-02 + 7.43201742e-02 7.43099111e-02 7.42996522e-02 7.42893976e-02 7.42791473e-02 + 7.42689011e-02 7.42586593e-02 7.42484216e-02 7.42381882e-02 7.42279590e-02 + 7.42177341e-02 7.42075133e-02 7.41972968e-02 7.41870845e-02 7.41768765e-02 + 7.41666726e-02 7.41564729e-02 7.41462775e-02 7.41360863e-02 7.41258992e-02 + 7.41157164e-02 7.41055377e-02 7.40953633e-02 7.40851930e-02 7.40750269e-02 + 7.40648650e-02 7.40547073e-02 7.40445538e-02 7.40344044e-02 7.40242592e-02 + 7.40141182e-02 7.40039814e-02 7.39938487e-02 7.39837202e-02 7.39735958e-02 + 7.39634756e-02 7.39533595e-02 7.39432476e-02 7.39331398e-02 7.39230362e-02 + 7.39129367e-02 7.39028414e-02 7.38927502e-02 7.38826631e-02 7.38725802e-02 + 7.38625014e-02 7.38524267e-02 7.38423561e-02 7.38322896e-02 7.38222273e-02 + 7.38121691e-02 7.38021150e-02 7.37920650e-02 7.37820191e-02 7.37719773e-02 + 7.37619396e-02 7.37519060e-02 7.37418765e-02 7.37318510e-02 7.37218297e-02 + 7.37118125e-02 7.37017993e-02 7.36917902e-02 7.36817852e-02 7.36717843e-02 + 7.36617874e-02 7.36517946e-02 7.36418059e-02 7.36318212e-02 7.36218406e-02 + 7.36118641e-02 7.36018916e-02 7.35919231e-02 7.35819587e-02 7.35719984e-02 + 7.35620421e-02 7.35520898e-02 7.35421416e-02 7.35321974e-02 7.35222572e-02 + 7.35123211e-02 7.35023890e-02 7.34924610e-02 7.34825369e-02 7.34726169e-02 + 7.34627009e-02 7.34527889e-02 7.34428809e-02 7.34329769e-02 7.34230769e-02 + 7.34131809e-02 7.34032890e-02 7.33934010e-02 7.33835170e-02 7.33736370e-02 + 7.33637610e-02 7.33538890e-02 7.33440210e-02 7.33341569e-02 7.33242969e-02 + 7.33144408e-02 7.33045886e-02 7.32947405e-02 7.32848963e-02 7.32750561e-02 + 7.32652199e-02 7.32553876e-02 7.32455592e-02 7.32357348e-02 7.32259144e-02 + 7.32160979e-02 7.32062854e-02 7.31964768e-02 7.31866722e-02 7.31768715e-02 + 7.31670747e-02 7.31572819e-02 7.31474930e-02 7.31377080e-02 7.31279269e-02 + 7.31181498e-02 7.31083766e-02 7.30986073e-02 7.30888419e-02 7.30790805e-02 + 7.30693229e-02 7.30595693e-02 7.30498195e-02 7.30400737e-02 7.30303318e-02 + 7.30205937e-02 7.30108596e-02 7.30011293e-02 7.29914030e-02 7.29816805e-02 + 7.29719619e-02 7.29622472e-02 7.29525364e-02 7.29428294e-02 7.29331263e-02 + 7.29234271e-02 7.29137318e-02 7.29040403e-02 7.28943527e-02 7.28846689e-02 + 7.28749890e-02 7.28653130e-02 7.28556408e-02 7.28459725e-02 7.28363080e-02 + 7.28266473e-02 7.28169905e-02 7.28073376e-02 7.27976885e-02 7.27880432e-02 + 7.27784017e-02 7.27687641e-02 7.27591303e-02 7.27495003e-02 7.27398742e-02 + 7.27302519e-02 7.27206334e-02 7.27110187e-02 7.27014078e-02 7.26918007e-02 + 7.26821975e-02 7.26725980e-02 7.26630023e-02 7.26534105e-02 7.26438224e-02 + 7.26342382e-02 7.26246577e-02 7.26150810e-02 7.26055081e-02 7.25959390e-02 + 7.25863737e-02 7.25768121e-02 7.25672544e-02 7.25577004e-02 7.25481502e-02 + 7.25386037e-02 7.25290610e-02 7.25195221e-02 7.25099870e-02 7.25004556e-02 + 7.24909279e-02 7.24814040e-02 7.24718839e-02 7.24623675e-02 7.24528549e-02 + 7.24433460e-02 7.24338409e-02 7.24243395e-02 7.24148418e-02 7.24053479e-02 + 7.23958577e-02 7.23863712e-02 7.23768885e-02 7.23674095e-02 7.23579342e-02 + 7.23484626e-02 7.23389948e-02 7.23295307e-02 7.23200702e-02 7.23106135e-02 + 7.23011605e-02 7.22917112e-02 7.22822656e-02 7.22728238e-02 7.22633856e-02 + 7.22539511e-02 7.22445203e-02 7.22350932e-02 7.22256698e-02 7.22162500e-02 + 7.22068340e-02 7.21974216e-02 7.21880130e-02 7.21786080e-02 7.21692066e-02 + 7.21598090e-02 7.21504150e-02 7.21410247e-02 7.21316380e-02 7.21222550e-02 + 7.21128757e-02 7.21035000e-02 7.20941280e-02 7.20847596e-02 7.20753949e-02 + 7.20660339e-02 7.20566765e-02 7.20473227e-02 7.20379726e-02 7.20286261e-02 + 7.20192832e-02 7.20099440e-02 7.20006084e-02 7.19912765e-02 7.19819481e-02 + 7.19726234e-02 7.19633024e-02 7.19539849e-02 7.19446711e-02 7.19353608e-02 + 7.19260542e-02 7.19167512e-02 7.19074518e-02 7.18981560e-02 7.18888639e-02 + 7.18795753e-02 7.18702903e-02 7.18610089e-02 7.18517311e-02 7.18424569e-02 + 7.18331863e-02 7.18239193e-02 7.18146559e-02 7.18053960e-02 7.17961398e-02 + 7.17868871e-02 7.17776380e-02 7.17683924e-02 7.17591505e-02 7.17499121e-02 + 7.17406772e-02 7.17314460e-02 7.17222183e-02 7.17129941e-02 7.17037735e-02 + 7.16945565e-02 7.16853430e-02 7.16761331e-02 7.16669267e-02 7.16577239e-02 + 7.16485246e-02 7.16393289e-02 7.16301367e-02 7.16209480e-02 7.16117629e-02 + 7.16025813e-02 7.15934032e-02 7.15842287e-02 7.15750577e-02 7.15658902e-02 + 7.15567262e-02 7.15475658e-02 7.15384089e-02 7.15292555e-02 7.15201056e-02 + 7.15109592e-02 7.15018163e-02 7.14926769e-02 7.14835410e-02 7.14744087e-02 + 7.14652798e-02 7.14561544e-02 7.14470325e-02 7.14379142e-02 7.14287993e-02 + 7.14196878e-02 7.14105799e-02 7.14014755e-02 7.13923745e-02 7.13832770e-02 + 7.13741830e-02 7.13650925e-02 7.13560055e-02 7.13469219e-02 7.13378418e-02 + 7.13287651e-02 7.13196919e-02 7.13106222e-02 7.13015559e-02 7.12924931e-02 + 7.12834338e-02 7.12743779e-02 7.12653254e-02 7.12562764e-02 7.12472309e-02 + 7.12381888e-02 7.12291501e-02 7.12201149e-02 7.12110831e-02 7.12020547e-02 + 7.11930298e-02 7.11840083e-02 7.11749902e-02 7.11659756e-02 7.11569644e-02 + 7.11479566e-02 7.11389522e-02 7.11299512e-02 7.11209537e-02 7.11119596e-02 + 7.11029689e-02 7.10939816e-02 7.10849977e-02 7.10760172e-02 7.10670401e-02 + 7.10580664e-02 7.10490961e-02 7.10401292e-02 7.10311657e-02 7.10222056e-02 + 7.10132489e-02 7.10042956e-02 7.09953456e-02 7.09863990e-02 7.09774559e-02 + 7.09685161e-02 7.09595796e-02 7.09506466e-02 7.09417169e-02 7.09327906e-02 + 7.09238677e-02 7.09149481e-02 7.09060319e-02 7.08971191e-02 7.08882096e-02 + 7.08793035e-02 7.08704007e-02 7.08615013e-02 7.08526052e-02 7.08437125e-02 + 7.08348231e-02 7.08259371e-02 7.08170544e-02 7.08081751e-02 7.07992991e-02 + 7.07904264e-02 7.07815571e-02 7.07726911e-02 7.07638285e-02 7.07549691e-02 + 7.07461131e-02 7.07372604e-02 7.07284111e-02 7.07195650e-02 7.07107223e-02 + 7.07018829e-02 7.06930468e-02 7.06842141e-02 7.06753846e-02 7.06665584e-02 + 7.06577356e-02 7.06489160e-02 7.06400998e-02 7.06312868e-02 7.06224772e-02 + 7.06136708e-02 7.06048678e-02 7.05960680e-02 7.05872715e-02 7.05784783e-02 + 7.05696884e-02 7.05609018e-02 7.05521184e-02 7.05433384e-02 7.05345616e-02 + 1.00000000e+00 9.75894263e-01 9.53451752e-01 9.32489601e-01 9.12851907e-01 + 8.94404826e-01 8.77032714e-01 8.60635068e-01 8.45124065e-01 8.30422576e-01 + 8.16462554e-01 8.03183696e-01 7.90532350e-01 7.78460602e-01 7.66925506e-01 + 7.55888443e-01 7.45314577e-01 7.35172390e-01 7.25433287e-01 7.16071258e-01 + 7.07062580e-01 6.98385572e-01 6.90020370e-01 6.81948734e-01 6.74153887e-01 + 6.66620364e-01 6.59333880e-01 6.52281224e-01 6.45450150e-01 6.38829295e-01 + 6.32408091e-01 6.26176704e-01 6.20125961e-01 6.14247300e-01 6.08532716e-01 + 6.02974715e-01 5.97566276e-01 5.92300808e-01 5.87172122e-01 5.82174396e-01 + 5.77302151e-01 5.72550221e-01 5.67913735e-01 5.63388093e-01 5.58968948e-01 + 5.54652188e-01 5.50433918e-01 5.46310451e-01 5.42278287e-01 5.38334105e-01 + 5.34474753e-01 5.30697232e-01 5.26998691e-01 5.23376415e-01 5.19827818e-01 + 5.16350438e-01 5.12941922e-01 5.09600027e-01 5.06322612e-01 5.03107629e-01 + 4.99953120e-01 4.96857213e-01 4.93818117e-01 4.90834114e-01 4.87903560e-01 + 4.85024878e-01 4.82196556e-01 4.79417141e-01 4.76685242e-01 4.73999519e-01 + 4.71358685e-01 4.68761505e-01 4.66206788e-01 4.63693390e-01 4.61220209e-01 + 4.58786184e-01 4.56390292e-01 4.54031548e-01 4.51709002e-01 4.49421737e-01 + 4.47168870e-01 4.44949545e-01 4.42762941e-01 4.40608259e-01 4.38484731e-01 + 4.36391613e-01 4.34328187e-01 4.32293756e-01 4.30287649e-01 4.28309213e-01 + 4.26357819e-01 4.24432857e-01 4.22533734e-01 4.20659877e-01 4.18810733e-01 + 4.16985761e-01 4.15184441e-01 4.13406264e-01 4.11650741e-01 4.09917394e-01 + 4.08205761e-01 4.06515390e-01 4.04845847e-01 4.03196706e-01 4.01567556e-01 + 3.99957996e-01 3.98367636e-01 3.96796098e-01 3.95243014e-01 3.93708024e-01 + 3.92190780e-01 3.90690944e-01 3.89208184e-01 3.87742180e-01 3.86292617e-01 + 3.84859191e-01 3.83441605e-01 3.82039569e-01 3.80652800e-01 3.79281024e-01 + 3.77923973e-01 3.76581385e-01 3.75253005e-01 3.73938583e-01 3.72637878e-01 + 3.71350652e-01 3.70076675e-01 3.68815719e-01 3.67567566e-01 3.66332000e-01 + 3.65108810e-01 3.63897792e-01 3.62698745e-01 3.61511473e-01 3.60335785e-01 + 3.59171493e-01 3.58018415e-01 3.56876371e-01 3.55745187e-01 3.54624691e-01 + 3.53514717e-01 3.52415101e-01 3.51325683e-01 3.50246306e-01 3.49176816e-01 + 3.48117064e-01 3.47066903e-01 3.46026189e-01 3.44994782e-01 3.43972542e-01 + 3.42959337e-01 3.41955032e-01 3.40959498e-01 3.39972609e-01 3.38994241e-01 + 3.38024270e-01 3.37062579e-01 3.36109049e-01 3.35163566e-01 3.34226018e-01 + 3.33296293e-01 3.32374284e-01 3.31459885e-01 3.30552992e-01 3.29653502e-01 + 3.28761315e-01 3.27876333e-01 3.26998460e-01 3.26127600e-01 3.25263662e-01 + 3.24406553e-01 3.23556184e-01 3.22712468e-01 3.21875318e-01 3.21044649e-01 + 3.20220378e-01 3.19402424e-01 3.18590706e-01 3.17785145e-01 3.16985665e-01 + 3.16192188e-01 3.15404639e-01 3.14622947e-01 3.13847038e-01 3.13076841e-01 + 3.12312287e-01 3.11553306e-01 3.10799833e-01 3.10051800e-01 3.09309142e-01 + 3.08571795e-01 3.07839697e-01 3.07112784e-01 3.06390997e-01 3.05674275e-01 + 3.04962560e-01 3.04255793e-01 3.03553917e-01 3.02856876e-01 3.02164615e-01 + 3.01477079e-01 3.00794216e-01 3.00115971e-01 2.99442294e-01 2.98773134e-01 + 2.98108439e-01 2.97448161e-01 2.96792252e-01 2.96140662e-01 2.95493345e-01 + 2.94850254e-01 2.94211344e-01 2.93576570e-01 2.92945886e-01 2.92319250e-01 + 2.91696618e-01 2.91077947e-01 2.90463197e-01 2.89852325e-01 2.89245291e-01 + 2.88642055e-01 2.88042577e-01 2.87446820e-01 2.86854743e-01 2.86266311e-01 + 2.85681484e-01 2.85100228e-01 2.84522505e-01 2.83948280e-01 2.83377517e-01 + 2.82810183e-01 2.82246243e-01 2.81685662e-01 2.81128409e-01 2.80574450e-01 + 2.80023753e-01 2.79476286e-01 2.78932017e-01 2.78390916e-01 2.77852951e-01 + 2.77318094e-01 2.76786313e-01 2.76257580e-01 2.75731865e-01 2.75209140e-01 + 2.74689377e-01 2.74172548e-01 2.73658625e-01 2.73147581e-01 2.72639389e-01 + 2.72134024e-01 2.71631458e-01 2.71131667e-01 2.70634624e-01 2.70140305e-01 + 2.69648684e-01 2.69159738e-01 2.68673442e-01 2.68189772e-01 2.67708706e-01 + 2.67230218e-01 2.66754287e-01 2.66280890e-01 2.65810005e-01 2.65341608e-01 + 2.64875680e-01 2.64412197e-01 2.63951138e-01 2.63492483e-01 2.63036211e-01 + 2.62582301e-01 2.62130732e-01 2.61681486e-01 2.61234541e-01 2.60789879e-01 + 2.60347479e-01 2.59907323e-01 2.59469393e-01 2.59033668e-01 2.58600131e-01 + 2.58168764e-01 2.57739549e-01 2.57312467e-01 2.56887501e-01 2.56464633e-01 + 2.56043847e-01 2.55625126e-01 2.55208452e-01 2.54793809e-01 2.54381180e-01 + 2.53970550e-01 2.53561902e-01 2.53155220e-01 2.52750489e-01 2.52347693e-01 + 2.51946816e-01 2.51547844e-01 2.51150761e-01 2.50755553e-01 2.50362204e-01 + 2.49970701e-01 2.49581029e-01 2.49193173e-01 2.48807120e-01 2.48422856e-01 + 2.48040367e-01 2.47659639e-01 2.47280658e-01 2.46903413e-01 2.46527888e-01 + 2.46154072e-01 2.45781951e-01 2.45411513e-01 2.45042745e-01 2.44675634e-01 + 2.44310168e-01 2.43946335e-01 2.43584122e-01 2.43223518e-01 2.42864511e-01 + 2.42507089e-01 2.42151241e-01 2.41796954e-01 2.41444218e-01 2.41093021e-01 + 2.40743352e-01 2.40395201e-01 2.40048555e-01 2.39703404e-01 2.39359739e-01 + 2.39017547e-01 2.38676818e-01 2.38337542e-01 2.37999710e-01 2.37663309e-01 + 2.37328332e-01 2.36994766e-01 2.36662603e-01 2.36331833e-01 2.36002446e-01 + 2.35674432e-01 2.35347783e-01 2.35022487e-01 2.34698537e-01 2.34375923e-01 + 2.34054635e-01 2.33734666e-01 2.33416004e-01 2.33098643e-01 2.32782573e-01 + 2.32467784e-01 2.32154270e-01 2.31842020e-01 2.31531028e-01 2.31221283e-01 + 2.30912778e-01 2.30605504e-01 2.30299454e-01 2.29994620e-01 2.29690992e-01 + 2.29388564e-01 2.29087328e-01 2.28787275e-01 2.28488398e-01 2.28190689e-01 + 2.27894141e-01 2.27598746e-01 2.27304497e-01 2.27011386e-01 2.26719406e-01 + 2.26428550e-01 2.26138810e-01 2.25850180e-01 2.25562652e-01 2.25276219e-01 + 2.24990875e-01 2.24706613e-01 2.24423425e-01 2.24141305e-01 2.23860246e-01 + 2.23580243e-01 2.23301287e-01 2.23023372e-01 2.22746493e-01 2.22470643e-01 + 2.22195814e-01 2.21922002e-01 2.21649200e-01 2.21377401e-01 2.21106599e-01 + 2.20836789e-01 2.20567964e-01 2.20300119e-01 2.20033247e-01 2.19767342e-01 + 2.19502400e-01 2.19238413e-01 2.18975376e-01 2.18713284e-01 2.18452130e-01 + 2.18191910e-01 2.17932618e-01 2.17674247e-01 2.17416794e-01 2.17160252e-01 + 2.16904616e-01 2.16649880e-01 2.16396040e-01 2.16143090e-01 2.15891025e-01 + 2.15639840e-01 2.15389530e-01 2.15140089e-01 2.14891513e-01 2.14643796e-01 + 2.14396935e-01 2.14150923e-01 2.13905756e-01 2.13661429e-01 2.13417937e-01 + 2.13175276e-01 2.12933441e-01 2.12692427e-01 2.12452229e-01 2.12212843e-01 + 2.11974265e-01 2.11736490e-01 2.11499513e-01 2.11263330e-01 2.11027936e-01 + 2.10793328e-01 2.10559500e-01 2.10326449e-01 2.10094169e-01 2.09862658e-01 + 2.09631910e-01 2.09401922e-01 2.09172689e-01 2.08944208e-01 2.08716473e-01 + 2.08489481e-01 2.08263229e-01 2.08037711e-01 2.07812924e-01 2.07588865e-01 + 2.07365528e-01 2.07142911e-01 2.06921010e-01 2.06699820e-01 2.06479337e-01 + 2.06259559e-01 2.06040481e-01 2.05822100e-01 2.05604412e-01 2.05387413e-01 + 2.05171099e-01 2.04955468e-01 2.04740515e-01 2.04526237e-01 2.04312630e-01 + 2.04099691e-01 2.03887417e-01 2.03675803e-01 2.03464847e-01 2.03254545e-01 + 2.03044894e-01 2.02835891e-01 2.02627531e-01 2.02419812e-01 2.02212731e-01 + 2.02006284e-01 2.01800468e-01 2.01595280e-01 2.01390716e-01 2.01186774e-01 + 2.00983451e-01 2.00780742e-01 2.00578646e-01 2.00377158e-01 2.00176277e-01 + 1.99975998e-01 1.99776320e-01 1.99577238e-01 1.99378751e-01 1.99180854e-01 + 1.98983546e-01 1.98786822e-01 1.98590681e-01 1.98395120e-01 1.98200135e-01 + 1.98005724e-01 1.97811884e-01 1.97618612e-01 1.97425905e-01 1.97233761e-01 + 1.97042177e-01 1.96851151e-01 1.96660678e-01 1.96470758e-01 1.96281387e-01 + 1.96092562e-01 1.95904281e-01 1.95716541e-01 1.95529341e-01 1.95342676e-01 + 1.95156545e-01 1.94970945e-01 1.94785873e-01 1.94601328e-01 1.94417306e-01 + 1.94233805e-01 1.94050823e-01 1.93868357e-01 1.93686404e-01 1.93504963e-01 + 1.93324031e-01 1.93143606e-01 1.92963685e-01 1.92784265e-01 1.92605345e-01 + 1.92426923e-01 1.92248995e-01 1.92071560e-01 1.91894616e-01 1.91718159e-01 + 1.91542189e-01 1.91366702e-01 1.91191696e-01 1.91017170e-01 1.90843121e-01 + 1.90669546e-01 1.90496445e-01 1.90323814e-01 1.90151652e-01 1.89979956e-01 + 1.89808724e-01 1.89637954e-01 1.89467644e-01 1.89297793e-01 1.89128397e-01 + 1.88959456e-01 1.88790966e-01 1.88622926e-01 1.88455335e-01 1.88288189e-01 + 1.88121487e-01 1.87955227e-01 1.87789407e-01 1.87624025e-01 1.87459079e-01 + 1.87294568e-01 1.87130489e-01 1.86966840e-01 1.86803620e-01 1.86640827e-01 + 1.86478458e-01 1.86316513e-01 1.86154989e-01 1.85993884e-01 1.85833197e-01 + 1.85672925e-01 1.85513068e-01 1.85353622e-01 1.85194587e-01 1.85035961e-01 + 1.84877742e-01 1.84719927e-01 1.84562517e-01 1.84405508e-01 1.84248899e-01 + 1.84092688e-01 1.83936874e-01 1.83781455e-01 1.83626429e-01 1.83471795e-01 + 1.83317551e-01 1.83163695e-01 1.83010226e-01 1.82857142e-01 1.82704442e-01 + 1.82552123e-01 1.82400185e-01 1.82248626e-01 1.82097444e-01 1.81946637e-01 + 1.81796204e-01 1.81646144e-01 1.81496455e-01 1.81347136e-01 1.81198184e-01 + 1.81049599e-01 1.80901378e-01 1.80753522e-01 1.80606027e-01 1.80458892e-01 + 1.80312117e-01 1.80165699e-01 1.80019637e-01 1.79873930e-01 1.79728576e-01 + 1.79583574e-01 1.79438922e-01 1.79294620e-01 1.79150665e-01 1.79007056e-01 + 1.78863792e-01 1.78720871e-01 1.78578292e-01 1.78436054e-01 1.78294156e-01 + 1.78152595e-01 1.78011371e-01 1.77870482e-01 1.77729928e-01 1.77589706e-01 + 1.77449815e-01 1.77310255e-01 1.77171023e-01 1.77032119e-01 1.76893540e-01 + 1.76755287e-01 1.76617358e-01 1.76479751e-01 1.76342465e-01 1.76205499e-01 + 1.76068851e-01 1.75932521e-01 1.75796507e-01 1.75660808e-01 1.75525423e-01 + 1.75390351e-01 1.75255589e-01 1.75121138e-01 1.74986996e-01 1.74853162e-01 + 1.74719634e-01 1.74586412e-01 1.74453494e-01 1.74320879e-01 1.74188566e-01 + 1.74056554e-01 1.73924842e-01 1.73793428e-01 1.73662312e-01 1.73531492e-01 + 1.73400967e-01 1.73270736e-01 1.73140798e-01 1.73011152e-01 1.72881797e-01 + 1.72752732e-01 1.72623955e-01 1.72495466e-01 1.72367263e-01 1.72239346e-01 + 1.72111713e-01 1.71984363e-01 1.71857296e-01 1.71730510e-01 1.71604004e-01 + 1.71477777e-01 1.71351828e-01 1.71226157e-01 1.71100761e-01 1.70975641e-01 + 1.70850795e-01 1.70726222e-01 1.70601921e-01 1.70477891e-01 1.70354131e-01 + 1.70230640e-01 1.70107418e-01 1.69984462e-01 1.69861773e-01 1.69739349e-01 + 1.69617190e-01 1.69495294e-01 1.69373660e-01 1.69252288e-01 1.69131176e-01 + 1.69010324e-01 1.68889731e-01 1.68769395e-01 1.68649317e-01 1.68529494e-01 + 1.68409926e-01 1.68290613e-01 1.68171552e-01 1.68052744e-01 1.67934188e-01 + 1.67815882e-01 1.67697825e-01 1.67580018e-01 1.67462458e-01 1.67345146e-01 + 1.67228079e-01 1.67111258e-01 1.66994682e-01 1.66878349e-01 1.66762259e-01 + 1.66646411e-01 1.66530804e-01 1.66415437e-01 1.66300309e-01 1.66185421e-01 + 1.66070770e-01 1.65956356e-01 1.65842178e-01 1.65728235e-01 1.65614527e-01 + 1.65501053e-01 1.65387812e-01 1.65274803e-01 1.65162025e-01 1.65049477e-01 + 1.64937160e-01 1.64825071e-01 1.64713211e-01 1.64601578e-01 1.64490172e-01 + 1.64378991e-01 1.64268036e-01 1.64157305e-01 1.64046798e-01 1.63936514e-01 + 1.63826452e-01 1.63716611e-01 1.63606991e-01 1.63497591e-01 1.63388409e-01 + 1.63279447e-01 1.63170702e-01 1.63062174e-01 1.62953862e-01 1.62845766e-01 + 1.62737885e-01 1.62630217e-01 1.62522764e-01 1.62415523e-01 1.62308493e-01 + 1.62201676e-01 1.62095069e-01 1.61988671e-01 1.61882483e-01 1.61776504e-01 + 1.61670732e-01 1.61565168e-01 1.61459810e-01 1.61354658e-01 1.61249711e-01 + 1.61144969e-01 1.61040431e-01 1.60936095e-01 1.60831963e-01 1.60728032e-01 + 1.60624302e-01 1.60520773e-01 1.60417444e-01 1.60314314e-01 1.60211383e-01 + 1.60108650e-01 1.60006114e-01 1.59903775e-01 1.59801632e-01 1.59699684e-01 + 1.59597932e-01 1.59496373e-01 1.59395009e-01 1.59293837e-01 1.59192858e-01 + 1.59092070e-01 1.58991474e-01 1.58891068e-01 1.58790852e-01 1.58690826e-01 + 1.58590988e-01 1.58491339e-01 1.58391877e-01 1.58292602e-01 1.58193514e-01 + 1.58094612e-01 1.57995894e-01 1.57897362e-01 1.57799013e-01 1.57700849e-01 + 1.57602867e-01 1.57505067e-01 1.57407450e-01 1.57310013e-01 1.57212758e-01 + 1.57115682e-01 1.57018786e-01 1.56922069e-01 1.56825531e-01 1.56729171e-01 + 1.56632988e-01 1.56536982e-01 1.56441152e-01 1.56345498e-01 1.56250019e-01 + 1.56154715e-01 1.56059585e-01 1.55964629e-01 1.55869846e-01 1.55775235e-01 + 1.55680797e-01 1.55586530e-01 1.55492434e-01 1.55398509e-01 1.55304754e-01 + 1.55211168e-01 1.55117751e-01 1.55024502e-01 1.54931422e-01 1.54838509e-01 + 1.54745763e-01 1.54653183e-01 1.54560770e-01 1.54468522e-01 1.54376439e-01 + 1.54284520e-01 1.54192765e-01 1.54101174e-01 1.54009746e-01 1.53918481e-01 + 1.53827377e-01 1.53736435e-01 1.53645654e-01 1.53555034e-01 1.53464574e-01 + 1.53374274e-01 1.53284132e-01 1.53194150e-01 1.53104326e-01 1.53014660e-01 + 1.52925151e-01 1.52835798e-01 1.52746603e-01 1.52657563e-01 1.52568679e-01 + 1.52479950e-01 1.52391376e-01 1.52302955e-01 1.52214689e-01 1.52126576e-01 + 1.52038615e-01 1.51950807e-01 1.51863151e-01 1.51775647e-01 1.51688293e-01 + 1.51601091e-01 1.51514038e-01 1.51427135e-01 1.51340382e-01 1.51253778e-01 + 1.51167322e-01 1.51081014e-01 1.50994854e-01 1.50908841e-01 1.50822975e-01 + 1.50737255e-01 1.50651681e-01 1.50566253e-01 1.50480970e-01 1.50395832e-01 + 1.50310838e-01 1.50225988e-01 1.50141281e-01 1.50056718e-01 1.49972298e-01 + 1.49888019e-01 1.49803883e-01 1.49719888e-01 1.49636035e-01 1.49552322e-01 + 1.49468749e-01 1.49385316e-01 1.49302023e-01 1.49218869e-01 1.49135854e-01 + 1.49052977e-01 1.48970239e-01 1.48887638e-01 1.48805174e-01 1.48722847e-01 + 1.48640656e-01 1.48558602e-01 1.48476683e-01 1.48394900e-01 1.48313252e-01 + 1.48231738e-01 1.48150359e-01 1.48069113e-01 1.47988001e-01 1.47907022e-01 + 1.47826176e-01 1.47745463e-01 1.47664881e-01 1.47584431e-01 1.47504113e-01 + 1.47423925e-01 1.47343868e-01 1.47263942e-01 1.47184145e-01 1.47104478e-01 + 1.47024940e-01 1.46945531e-01 1.46866251e-01 1.46787099e-01 1.46708074e-01 + 1.46629177e-01 1.46550407e-01 1.46471764e-01 1.46393248e-01 1.46314857e-01 + 1.46236593e-01 1.46158454e-01 1.46080440e-01 1.46002551e-01 1.45924786e-01 + 1.45847145e-01 1.45769628e-01 1.45692235e-01 1.45614965e-01 1.45537817e-01 + 1.45460792e-01 1.45383890e-01 1.45307109e-01 1.45230449e-01 1.45153911e-01 + 1.45077494e-01 1.45001197e-01 1.44925021e-01 1.44848964e-01 1.44773027e-01 + 1.44697209e-01 1.44621511e-01 1.44545931e-01 1.44470469e-01 1.44395126e-01 + 1.44319900e-01 1.44244791e-01 1.44169800e-01 1.44094926e-01 1.44020168e-01 + 1.43945527e-01 1.43871001e-01 1.43796591e-01 1.43722296e-01 1.43648117e-01 + 1.43574052e-01 1.43500101e-01 1.43426265e-01 1.43352542e-01 1.43278934e-01 + 1.43205438e-01 1.43132055e-01 1.43058785e-01 1.42985628e-01 1.42912583e-01 + 1.42839649e-01 1.42766827e-01 1.42694116e-01 1.42621516e-01 1.42549027e-01 + 1.42476649e-01 1.42404380e-01 1.42332222e-01 1.42260172e-01 1.42188233e-01 + 1.42116402e-01 1.42044680e-01 1.41973066e-01 1.41901561e-01 1.41830164e-01 + 1.41758874e-01 1.41687692e-01 1.41616617e-01 1.41545648e-01 1.41474786e-01 + 1.41404031e-01 1.41333382e-01 1.41262838e-01 1.41192400e-01 1.41122067e-01 + 1.41051839e-01 1.40981716e-01 1.40911698e-01 1.40841783e-01 1.40771973e-01 + 1.40702266e-01 1.40632663e-01 1.40563163e-01 1.40493766e-01 1.40424471e-01 + 1.40355279e-01 1.40286189e-01 1.40217202e-01 1.40148315e-01 1.40079531e-01 + 1.40010847e-01 1.39942264e-01 1.39873782e-01 1.39805401e-01 1.39737119e-01 + 1.39668938e-01 1.39600856e-01 1.39532874e-01 1.39464991e-01 1.39397207e-01 + 1.39329522e-01 1.39261935e-01 1.39194446e-01 1.39127056e-01 1.39059763e-01 + 1.38992568e-01 1.38925470e-01 1.38858469e-01 1.38791565e-01 1.38724758e-01 + 1.38658047e-01 1.38591432e-01 1.38524913e-01 1.38458490e-01 1.38392162e-01 + 1.38325930e-01 1.38259792e-01 1.38193750e-01 1.38127801e-01 1.38061947e-01 + 1.37996188e-01 1.37930522e-01 1.37864950e-01 1.37799471e-01 1.37734085e-01 + 1.37668793e-01 1.37603593e-01 1.37538485e-01 1.37473471e-01 1.37408548e-01 + 1.37343717e-01 1.37278977e-01 1.37214330e-01 1.37149773e-01 1.37085308e-01 + 1.37020933e-01 1.36956649e-01 1.36892455e-01 1.36828351e-01 1.36764338e-01 + 1.36700414e-01 1.36636580e-01 1.36572835e-01 1.36509179e-01 1.36445612e-01 + 1.36382134e-01 1.36318745e-01 1.36255443e-01 1.36192230e-01 1.36129105e-01 + 1.36066067e-01 1.36003117e-01 1.35940254e-01 1.35877478e-01 1.35814789e-01 + 1.35752187e-01 1.35689672e-01 1.35627242e-01 1.35564899e-01 1.35502641e-01 + 1.35440470e-01 1.35378384e-01 1.35316383e-01 1.35254467e-01 1.35192636e-01 + 1.35130890e-01 1.35069228e-01 1.35007651e-01 1.34946158e-01 1.34884748e-01 + 1.34823423e-01 1.34762181e-01 1.34701022e-01 1.34639947e-01 1.34578955e-01 + 1.34518045e-01 1.34457218e-01 1.34396474e-01 1.34335812e-01 1.34275232e-01 + 1.34214733e-01 1.34154317e-01 1.34093982e-01 1.34033728e-01 1.33973556e-01 + 1.33913464e-01 1.33853453e-01 1.33793523e-01 1.33733673e-01 1.33673904e-01 + 1.33614214e-01 1.33554605e-01 1.33495075e-01 1.33435625e-01 1.33376254e-01 + 1.33316962e-01 1.33257749e-01 1.33198615e-01 1.33139560e-01 1.33080583e-01 + 1.33021685e-01 1.32962864e-01 1.32904122e-01 1.32845457e-01 1.32786870e-01 + 1.32728361e-01 1.32669928e-01 1.32611573e-01 1.32553295e-01 1.32495093e-01 + 1.32436968e-01 1.32378920e-01 1.32320948e-01 1.32263052e-01 1.32205232e-01 + 1.32147487e-01 1.32089818e-01 1.32032225e-01 1.31974707e-01 1.31917264e-01 + 1.31859896e-01 1.31802603e-01 1.31745384e-01 1.31688240e-01 1.31631170e-01 + 1.31574174e-01 1.31517252e-01 1.31460404e-01 1.31403630e-01 1.31346929e-01 + 1.31290301e-01 1.31233747e-01 1.31177266e-01 1.31120857e-01 1.31064522e-01 + 1.31008258e-01 1.30952068e-01 1.30895949e-01 1.30839903e-01 1.30783928e-01 + 1.30728025e-01 1.30672194e-01 1.30616435e-01 1.30560746e-01 1.30505129e-01 + 1.30449583e-01 1.30394108e-01 1.30338703e-01 1.30283369e-01 1.30228105e-01 + 1.30172912e-01 1.30117789e-01 1.30062736e-01 1.30007752e-01 1.29952839e-01 + 1.29897994e-01 1.29843219e-01 1.29788514e-01 1.29733877e-01 1.29679310e-01 + 1.29624811e-01 1.29570381e-01 1.29516019e-01 1.29461726e-01 1.29407501e-01 + 1.29353344e-01 1.29299255e-01 1.29245234e-01 1.29191280e-01 1.29137394e-01 + 1.29083575e-01 1.29029824e-01 1.28976140e-01 1.28922522e-01 1.28868972e-01 + 1.28815488e-01 1.28762070e-01 1.28708719e-01 1.28655435e-01 1.28602216e-01 + 1.28549063e-01 1.28495977e-01 1.28442955e-01 1.28390000e-01 1.28337110e-01 + 1.28284285e-01 1.28231526e-01 1.28178831e-01 1.28126202e-01 1.28073637e-01 + 1.28021137e-01 1.27968701e-01 1.27916330e-01 1.27864023e-01 1.27811780e-01 + 1.27759601e-01 1.27707486e-01 1.27655434e-01 1.27603447e-01 1.27551522e-01 + 1.27499661e-01 1.27447864e-01 1.27396129e-01 1.27344457e-01 1.27292848e-01 + 1.27241302e-01 1.27189818e-01 1.27138397e-01 1.27087038e-01 1.27035742e-01 + 1.26984507e-01 1.26933334e-01 1.26882223e-01 1.26831174e-01 1.26780187e-01 + 1.26729260e-01 1.26678396e-01 1.26627592e-01 1.26576849e-01 1.26526168e-01 + 1.26475547e-01 1.26424987e-01 1.26374487e-01 1.26324048e-01 1.26273670e-01 + 1.26223351e-01 1.26173093e-01 1.26122894e-01 1.26072756e-01 1.26022677e-01 + 1.25972658e-01 1.25922698e-01 1.25872798e-01 1.25822957e-01 1.25773176e-01 + 1.25723453e-01 1.25673789e-01 1.25624184e-01 1.25574638e-01 1.25525150e-01 + 1.25475721e-01 1.25426350e-01 1.25377037e-01 1.25327782e-01 1.25278586e-01 + 1.25229447e-01 1.25180366e-01 1.25131343e-01 1.25082377e-01 1.25033469e-01 + 1.24984618e-01 1.24935824e-01 1.24887088e-01 1.24838408e-01 1.24789785e-01 + 1.24741219e-01 1.24692710e-01 1.24644257e-01 1.24595861e-01 1.24547521e-01 + 1.24499237e-01 1.24451010e-01 1.24402838e-01 1.24354722e-01 1.24306662e-01 + 1.24258658e-01 1.24210709e-01 1.24162816e-01 1.24114978e-01 1.24067195e-01 + 1.24019468e-01 1.23971795e-01 1.23924178e-01 1.23876615e-01 1.23829107e-01 + 1.23781654e-01 1.23734255e-01 1.23686910e-01 1.23639620e-01 1.23592384e-01 + 1.23545202e-01 1.23498075e-01 1.23451001e-01 1.23403980e-01 1.23357014e-01 + 1.23310101e-01 1.23263242e-01 1.23216436e-01 1.23169683e-01 1.23122983e-01 + 1.23076337e-01 1.23029743e-01 1.22983202e-01 1.22936715e-01 1.22890279e-01 + 1.22843897e-01 1.22797567e-01 1.22751289e-01 1.22705063e-01 1.22658890e-01 + 1.22612769e-01 1.22566700e-01 1.22520682e-01 1.22474717e-01 1.22428803e-01 + 1.22382941e-01 1.22337130e-01 1.22291371e-01 1.22245663e-01 1.22200006e-01 + 1.22154400e-01 1.22108845e-01 1.22063342e-01 1.22017889e-01 1.21972487e-01 + 1.21927135e-01 1.21881834e-01 1.21836584e-01 1.21791383e-01 1.21746234e-01 + 1.21701134e-01 1.21656084e-01 1.21611085e-01 1.21566135e-01 1.21521235e-01 + 1.21476385e-01 1.21431584e-01 1.21386833e-01 1.21342131e-01 1.21297479e-01 + 1.21252876e-01 1.21208322e-01 1.21163817e-01 1.21119362e-01 1.21074955e-01 + 1.21030597e-01 1.20986287e-01 1.20942026e-01 1.20897814e-01 1.20853651e-01 + 1.20809535e-01 1.20765468e-01 1.20721449e-01 1.20677478e-01 1.20633555e-01 + 1.20589681e-01 1.20545854e-01 1.20502074e-01 1.20458343e-01 1.20414659e-01 + 1.20371022e-01 1.20327433e-01 1.20283891e-01 1.20240396e-01 1.20196949e-01 + 1.20153549e-01 1.20110195e-01 1.20066889e-01 1.20023629e-01 1.19980416e-01 + 1.19937250e-01 1.19894130e-01 1.19851056e-01 1.19808030e-01 1.19765049e-01 + 1.19722115e-01 1.19679226e-01 1.19636384e-01 1.19593588e-01 1.19550838e-01 + 1.19508133e-01 1.19465474e-01 1.19422861e-01 1.19380294e-01 1.19337772e-01 + 1.19295295e-01 1.19252863e-01 1.19210477e-01 1.19168136e-01 1.19125841e-01 + 1.19083590e-01 1.19041384e-01 1.18999223e-01 1.18957106e-01 1.18915035e-01 + 1.18873008e-01 1.18831025e-01 1.18789087e-01 1.18747194e-01 1.18705344e-01 + 1.18663539e-01 1.18621778e-01 1.18580061e-01 1.18538388e-01 1.18496759e-01 + 1.18455174e-01 1.18413632e-01 1.18372134e-01 1.18330680e-01 1.18289269e-01 + 1.18247902e-01 1.18206578e-01 1.18165298e-01 1.18124060e-01 1.18082866e-01 + 1.18041715e-01 1.18000607e-01 1.17959541e-01 1.17918519e-01 1.17877539e-01 + 1.17836602e-01 1.17795708e-01 1.17754856e-01 1.17714047e-01 1.17673280e-01 + 1.17632556e-01 1.17591873e-01 1.17551233e-01 1.17510635e-01 1.17470079e-01 + 1.17429565e-01 1.17389093e-01 1.17348662e-01 1.17308274e-01 1.17267927e-01 + 1.17227622e-01 1.17187358e-01 1.17147135e-01 1.17106955e-01 1.17066815e-01 + 1.17026717e-01 1.16986659e-01 1.16946643e-01 1.16906668e-01 1.16866734e-01 + 1.16826841e-01 1.16786988e-01 1.16747177e-01 1.16707406e-01 1.16667676e-01 + 1.16627986e-01 1.16588337e-01 1.16548728e-01 1.16509159e-01 1.16469631e-01 + 1.16430143e-01 1.16390695e-01 1.16351287e-01 1.16311919e-01 1.16272591e-01 + 1.16233303e-01 1.16194055e-01 1.16154846e-01 1.16115678e-01 1.16076548e-01 + 1.16037459e-01 1.15998408e-01 1.15959397e-01 1.15920426e-01 1.15881494e-01 + 1.15842601e-01 1.15803747e-01 1.15764932e-01 1.15726156e-01 1.15687419e-01 + 1.15648721e-01 1.15610062e-01 1.15571441e-01 1.15532859e-01 1.15494316e-01 + 1.15455812e-01 1.15417345e-01 1.15378918e-01 1.15340528e-01 1.15302177e-01 + 1.15263864e-01 1.15225590e-01 1.15187353e-01 1.15149155e-01 1.15110994e-01 + 1.15072871e-01 1.15034786e-01 1.14996739e-01 1.14958730e-01 1.14920759e-01 + 1.14882824e-01 1.14844928e-01 1.14807069e-01 1.14769247e-01 1.14731463e-01 + 1.14693716e-01 1.14656006e-01 1.14618334e-01 1.14580699e-01 1.14543100e-01 + 1.14505539e-01 1.14468014e-01 1.14430527e-01 1.14393076e-01 1.14355662e-01 + 1.14318284e-01 1.14280944e-01 1.14243640e-01 1.14206372e-01 1.14169141e-01 + 1.14131946e-01 1.14094787e-01 1.14057665e-01 1.14020579e-01 1.13983529e-01 + 1.13946515e-01 1.13909538e-01 1.13872596e-01 1.13835690e-01 1.13798820e-01 + 1.13761986e-01 1.13725188e-01 1.13688425e-01 1.13651698e-01 1.13615006e-01 + 1.13578350e-01 1.13541730e-01 1.13505144e-01 1.13468595e-01 1.13432080e-01 + 1.13395601e-01 1.13359156e-01 1.13322747e-01 1.13286373e-01 1.13250035e-01 + 1.13213730e-01 1.13177461e-01 1.13141227e-01 1.13105028e-01 1.13068863e-01 + 1.13032733e-01 1.12996637e-01 1.12960576e-01 1.12924550e-01 1.12888558e-01 + 1.12852600e-01 1.12816677e-01 1.12780788e-01 1.12744933e-01 1.12709112e-01 + 1.12673326e-01 1.12637574e-01 1.12601855e-01 1.12566171e-01 1.12530520e-01 + 1.12494904e-01 1.12459321e-01 1.12423772e-01 1.12388256e-01 1.12352774e-01 + 1.12317326e-01 1.12281911e-01 1.12246530e-01 1.12211182e-01 1.12175868e-01 + 1.12140587e-01 1.12105339e-01 1.12070125e-01 1.12034943e-01 1.11999795e-01 + 1.11964679e-01 1.11929597e-01 1.11894548e-01 1.11859532e-01 1.11824548e-01 + 1.11789597e-01 1.11754679e-01 1.11719794e-01 1.11684941e-01 1.11650121e-01 + 1.11615334e-01 1.11580579e-01 1.11545856e-01 1.11511166e-01 1.11476508e-01 + 1.11441883e-01 1.11407289e-01 1.11372728e-01 1.11338199e-01 1.11303703e-01 + 1.11269238e-01 1.11234805e-01 1.11200404e-01 1.11166035e-01 1.11131698e-01 + 1.11097393e-01 1.11063119e-01 1.11028877e-01 1.10994667e-01 1.10960489e-01 + 1.10926342e-01 1.10892226e-01 1.10858142e-01 1.10824089e-01 1.10790068e-01 + 1.10756078e-01 1.10722119e-01 1.10688192e-01 1.10654295e-01 1.10620430e-01 + 1.10586596e-01 1.10552793e-01 1.10519021e-01 1.10485279e-01 1.10451569e-01 + 1.10417890e-01 1.10384241e-01 1.10350623e-01 1.10317036e-01 1.10283479e-01 + 1.10249953e-01 1.10216458e-01 1.10182993e-01 1.10149558e-01 1.10116154e-01 + 1.10082780e-01 1.10049437e-01 1.10016124e-01 1.09982841e-01 1.09949588e-01 + 1.09916366e-01 1.09883174e-01 1.09850011e-01 1.09816879e-01 1.09783776e-01 + 1.09750704e-01 1.09717661e-01 1.09684648e-01 1.09651665e-01 1.09618712e-01 + 1.09585789e-01 1.09552895e-01 1.09520030e-01 1.09487196e-01 1.09454390e-01 + 1.09421615e-01 1.09388868e-01 1.09356151e-01 1.09323464e-01 1.09290805e-01 + 1.09258176e-01 1.09225576e-01 1.09193006e-01 1.09160464e-01 1.09127951e-01 + 1.09095468e-01 1.09063013e-01 1.09030588e-01 1.08998191e-01 1.08965824e-01 + 1.08933485e-01 1.08901174e-01 1.08868893e-01 1.08836640e-01 1.08804416e-01 + 1.08772220e-01 1.08740054e-01 1.08707915e-01 1.08675805e-01 1.08643724e-01 + 1.08611671e-01 1.08579646e-01 1.08547649e-01 1.08515681e-01 1.08483741e-01 + 1.08451829e-01 1.08419946e-01 1.08388090e-01 1.08356263e-01 1.08324463e-01 + 1.08292692e-01 1.08260948e-01 1.08229233e-01 1.08197545e-01 1.08165885e-01 + 1.08134253e-01 1.08102648e-01 1.08071072e-01 1.08039523e-01 1.08008001e-01 + 1.07976507e-01 1.07945041e-01 1.07913602e-01 1.07882191e-01 1.07850807e-01 + 1.07819450e-01 1.07788121e-01 1.07756819e-01 1.07725544e-01 1.07694296e-01 + 1.07663076e-01 1.07631883e-01 1.07600717e-01 1.07569578e-01 1.07538466e-01 + 1.07507381e-01 1.07476322e-01 1.07445291e-01 1.07414287e-01 1.07383309e-01 + 1.07352359e-01 1.07321435e-01 1.07290537e-01 1.07259667e-01 1.07228823e-01 + 1.07198005e-01 1.07167214e-01 1.07136450e-01 1.07105712e-01 1.07075001e-01 + 1.07044316e-01 1.07013657e-01 1.06983025e-01 1.06952419e-01 1.06921839e-01 + 1.06891286e-01 1.06860758e-01 1.06830257e-01 1.06799782e-01 1.06769333e-01 + 1.06738910e-01 1.06708513e-01 1.06678142e-01 1.06647796e-01 1.06617477e-01 + 1.06587184e-01 1.06556916e-01 1.06526674e-01 1.06496458e-01 1.06466268e-01 + 1.06436103e-01 1.06405964e-01 1.06375850e-01 1.06345762e-01 1.06315700e-01 + 1.06285663e-01 1.06255651e-01 1.06225665e-01 1.06195704e-01 1.06165769e-01 + 1.06135859e-01 1.06105974e-01 1.06076114e-01 1.06046280e-01 1.06016470e-01 + 1.05986686e-01 1.05956927e-01 1.05927193e-01 1.05897484e-01 1.05867800e-01 + 1.05838141e-01 1.05808507e-01 1.05778897e-01 1.05749313e-01 1.05719753e-01 + 1.05690218e-01 1.05660708e-01 1.05631223e-01 1.05601762e-01 1.05572326e-01 + 1.05542914e-01 1.05513528e-01 1.05484165e-01 1.05454827e-01 1.05425514e-01 + 1.05396225e-01 1.05366960e-01 1.05337720e-01 1.05308504e-01 1.05279312e-01 + 1.05250145e-01 1.05221002e-01 1.05191883e-01 1.05162788e-01 1.05133717e-01 + 1.05104671e-01 1.05075648e-01 1.05046650e-01 1.05017675e-01 1.04988725e-01 + 1.04959798e-01 1.04930896e-01 1.04902017e-01 1.04873162e-01 1.04844331e-01 + 1.04815523e-01 1.04786740e-01 1.04757980e-01 1.04729243e-01 1.04700531e-01 + 1.04671841e-01 1.04643176e-01 1.04614534e-01 1.04585916e-01 1.04557321e-01 + 1.04528749e-01 1.04500201e-01 1.04471676e-01 1.04443175e-01 1.04414697e-01 + 1.04386242e-01 1.04357810e-01 1.04329402e-01 1.04301017e-01 1.04272655e-01 + 1.04244316e-01 1.04216000e-01 1.04187707e-01 1.04159437e-01 1.04131191e-01 + 1.04102967e-01 1.04074766e-01 1.04046588e-01 1.04018433e-01 1.03990301e-01 + 1.03962192e-01 1.03934105e-01 1.03906041e-01 1.03878000e-01 1.03849982e-01 + 1.03821986e-01 1.03794013e-01 1.03766062e-01 1.03738134e-01 1.03710229e-01 + 1.03682346e-01 1.03654486e-01 1.03626648e-01 1.03598832e-01 1.03571039e-01 + 1.03543268e-01 1.03515520e-01 1.03487793e-01 1.03460089e-01 1.03432408e-01 + 1.03404748e-01 1.03377111e-01 1.03349496e-01 1.03321903e-01 1.03294332e-01 + 1.03266783e-01 1.03239256e-01 1.03211751e-01 1.03184268e-01 1.03156807e-01 + 1.03129368e-01 1.03101951e-01 1.03074556e-01 1.03047182e-01 1.03019831e-01 + 1.02992501e-01 1.02965192e-01 1.02937906e-01 1.02910641e-01 1.02883398e-01 + 1.02856177e-01 1.02828977e-01 1.02801798e-01 1.02774642e-01 1.02747506e-01 + 1.02720392e-01 1.02693300e-01 1.02666229e-01 1.02639180e-01 1.02612151e-01 + 1.02585145e-01 1.02558159e-01 1.02531195e-01 1.02504252e-01 1.02477330e-01 + 1.02450430e-01 1.02423550e-01 1.02396692e-01 1.02369855e-01 1.02343039e-01 + 1.02316244e-01 1.02289470e-01 1.02262717e-01 1.02235985e-01 1.02209274e-01 + 1.02182584e-01 1.02155915e-01 1.02129267e-01 1.02102639e-01 1.02076033e-01 + 1.02049447e-01 1.02022882e-01 1.01996338e-01 1.01969814e-01 1.01943311e-01 + 1.01916829e-01 1.01890367e-01 1.01863926e-01 1.01837505e-01 1.01811106e-01 + 1.01784726e-01 1.01758367e-01 1.01732029e-01 1.01705711e-01 1.01679413e-01 + 1.01653136e-01 1.01626879e-01 1.01600643e-01 1.01574426e-01 1.01548230e-01 + 1.01522055e-01 1.01495899e-01 1.01469764e-01 1.01443649e-01 1.01417554e-01 + 1.01391479e-01 1.01365425e-01 1.01339390e-01 1.01313376e-01 1.01287381e-01 + 1.01261406e-01 1.01235452e-01 1.01209517e-01 1.01183603e-01 1.01157708e-01 + 1.01131833e-01 1.01105978e-01 1.01080143e-01 1.01054327e-01 1.01028532e-01 + 1.01002756e-01 1.00976999e-01 1.00951263e-01 1.00925546e-01 1.00899849e-01 + 1.00874171e-01 1.00848513e-01 1.00822875e-01 1.00797256e-01 1.00771656e-01 + 1.00746077e-01 1.00720516e-01 1.00694975e-01 1.00669454e-01 1.00643952e-01 + 1.00618469e-01 1.00593005e-01 1.00567561e-01 1.00542136e-01 1.00516731e-01 + 1.00491345e-01 1.00465978e-01 1.00440630e-01 1.00415301e-01 1.00389992e-01 + 1.00364701e-01 1.00339430e-01 1.00314178e-01 1.00288944e-01 1.00263730e-01 + 1.00238535e-01 1.00213359e-01 1.00188202e-01 1.00163064e-01 1.00137944e-01 + 1.00112844e-01 1.00087762e-01 1.00062700e-01 1.00037656e-01 1.00012631e-01 + 9.99876242e-02 9.99626366e-02 9.99376677e-02 9.99127176e-02 9.98877861e-02 + 9.98628732e-02 9.98379790e-02 9.98131034e-02 9.97882464e-02 9.97634079e-02 + 9.97385880e-02 9.97137866e-02 9.96890037e-02 9.96642393e-02 9.96394933e-02 + 9.96147657e-02 9.95900565e-02 9.95653657e-02 9.95406933e-02 9.95160392e-02 + 9.94914034e-02 9.94667859e-02 9.94421867e-02 9.94176057e-02 9.93930429e-02 + 9.93684983e-02 9.93439719e-02 9.93194636e-02 9.92949735e-02 9.92705015e-02 + 9.92460476e-02 9.92216117e-02 9.91971939e-02 9.91727940e-02 9.91484122e-02 + 9.91240484e-02 9.90997025e-02 9.90753745e-02 9.90510645e-02 9.90267723e-02 + 9.90024980e-02 9.89782415e-02 9.89540029e-02 9.89297821e-02 9.89055790e-02 + 9.88813937e-02 9.88572261e-02 9.88330763e-02 9.88089441e-02 9.87848296e-02 + 9.87607327e-02 9.87366535e-02 9.87125919e-02 9.86885478e-02 9.86645213e-02 + 9.86405124e-02 9.86165209e-02 9.85925470e-02 9.85685906e-02 9.85446516e-02 + 9.85207300e-02 9.84968258e-02 9.84729391e-02 9.84490697e-02 9.84252176e-02 + 9.84013829e-02 9.83775655e-02 9.83537654e-02 9.83299825e-02 9.83062169e-02 + 9.82824685e-02 9.82587374e-02 9.82350233e-02 9.82113265e-02 9.81876468e-02 + 9.81639842e-02 9.81403387e-02 9.81167103e-02 9.80930990e-02 9.80695047e-02 + 9.80459274e-02 9.80223671e-02 9.79988238e-02 9.79752974e-02 9.79517880e-02 + 9.79282955e-02 9.79048199e-02 9.78813611e-02 9.78579192e-02 9.78344942e-02 + 9.78110859e-02 9.77876945e-02 9.77643198e-02 9.77409619e-02 9.77176207e-02 + 9.76942963e-02 9.76709885e-02 9.76476974e-02 9.76244230e-02 9.76011651e-02 + 9.75779239e-02 9.75546993e-02 9.75314913e-02 9.75082999e-02 9.74851249e-02 + 9.74619665e-02 9.74388246e-02 9.74156991e-02 9.73925901e-02 9.73694976e-02 + 9.73464215e-02 9.73233617e-02 9.73003184e-02 9.72772914e-02 9.72542807e-02 + 9.72312864e-02 9.72083084e-02 9.71853467e-02 9.71624012e-02 9.71394719e-02 + 9.71165589e-02 9.70936621e-02 9.70707815e-02 9.70479171e-02 9.70250688e-02 + 9.70022366e-02 9.69794205e-02 9.69566206e-02 9.69338367e-02 9.69110688e-02 + 9.68883170e-02 9.68655813e-02 9.68428615e-02 9.68201577e-02 9.67974698e-02 + 9.67747979e-02 9.67521419e-02 9.67295019e-02 9.67068777e-02 9.66842693e-02 + 9.66616769e-02 9.66391002e-02 9.66165394e-02 9.65939943e-02 9.65714651e-02 + 9.65489516e-02 9.65264538e-02 9.65039718e-02 9.64815054e-02 9.64590547e-02 + 9.64366197e-02 9.64142004e-02 9.63917967e-02 9.63694086e-02 9.63470360e-02 + 9.63246791e-02 9.63023377e-02 9.62800118e-02 9.62577015e-02 9.62354067e-02 + 9.62131273e-02 9.61908635e-02 9.61686150e-02 9.61463820e-02 9.61241644e-02 + 9.61019623e-02 9.60797754e-02 9.60576040e-02 9.60354479e-02 9.60133071e-02 + 9.59911816e-02 9.59690714e-02 9.59469765e-02 9.59248968e-02 9.59028324e-02 + 9.58807832e-02 9.58587492e-02 9.58367303e-02 9.58147267e-02 9.57927382e-02 + 9.57707648e-02 9.57488065e-02 9.57268633e-02 9.57049352e-02 9.56830222e-02 + 9.56611242e-02 9.56392413e-02 9.56173733e-02 9.55955204e-02 9.55736824e-02 + 9.55518594e-02 9.55300513e-02 9.55082582e-02 9.54864799e-02 9.54647166e-02 + 9.54429681e-02 9.54212345e-02 9.53995157e-02 9.53778117e-02 9.53561226e-02 + 9.53344482e-02 9.53127886e-02 9.52911438e-02 9.52695137e-02 9.52478984e-02 + 9.52262977e-02 9.52047117e-02 9.51831404e-02 9.51615838e-02 9.51400418e-02 + 9.51185144e-02 9.50970016e-02 9.50755034e-02 9.50540198e-02 9.50325508e-02 + 9.50110963e-02 9.49896563e-02 9.49682308e-02 9.49468198e-02 9.49254233e-02 + 9.49040412e-02 9.48826736e-02 9.48613204e-02 9.48399817e-02 9.48186573e-02 + 9.47973473e-02 9.47760516e-02 9.47547703e-02 9.47335034e-02 9.47122507e-02 + 9.46910123e-02 9.46697883e-02 9.46485784e-02 9.46273829e-02 9.46062015e-02 + 9.45850344e-02 9.45638815e-02 9.45427428e-02 9.45216182e-02 9.45005078e-02 + 9.44794116e-02 9.44583294e-02 9.44372614e-02 9.44162074e-02 9.43951676e-02 + 9.43741418e-02 9.43531300e-02 9.43321323e-02 9.43111485e-02 9.42901788e-02 + 9.42692231e-02 9.42482813e-02 9.42273534e-02 9.42064395e-02 9.41855396e-02 + 9.41646535e-02 9.41437813e-02 9.41229230e-02 9.41020785e-02 9.40812479e-02 + 9.40604311e-02 9.40396282e-02 9.40188390e-02 9.39980636e-02 9.39773020e-02 + 9.39565541e-02 9.39358200e-02 9.39150995e-02 9.38943928e-02 9.38736998e-02 + 9.38530204e-02 9.38323548e-02 9.38117027e-02 9.37910643e-02 9.37704395e-02 + 9.37498283e-02 9.37292307e-02 9.37086466e-02 9.36880762e-02 9.36675192e-02 + 9.36469758e-02 9.36264459e-02 9.36059295e-02 9.35854265e-02 9.35649371e-02 + 9.35444611e-02 9.35239985e-02 9.35035493e-02 9.34831136e-02 9.34626912e-02 + 9.34422823e-02 9.34218866e-02 9.34015044e-02 9.33811355e-02 9.33607798e-02 + 9.33404375e-02 9.33201085e-02 9.32997928e-02 9.32794903e-02 9.32592011e-02 + 9.32389251e-02 9.32186624e-02 9.31984128e-02 9.31781764e-02 9.31579532e-02 + 9.31377432e-02 9.31175463e-02 9.30973626e-02 9.30771919e-02 9.30570344e-02 + 9.30368899e-02 9.30167586e-02 9.29966403e-02 9.29765350e-02 9.29564428e-02 + 9.29363636e-02 9.29162974e-02 9.28962442e-02 9.28762040e-02 9.28561768e-02 + 9.28361624e-02 9.28161611e-02 9.27961726e-02 9.27761971e-02 9.27562344e-02 + 9.27362847e-02 9.27163478e-02 9.26964237e-02 9.26765125e-02 9.26566141e-02 + 9.26367286e-02 9.26168558e-02 9.25969958e-02 9.25771486e-02 9.25573141e-02 + 9.25374924e-02 9.25176834e-02 9.24978871e-02 9.24781036e-02 9.24583327e-02 + 9.24385745e-02 9.24188289e-02 9.23990960e-02 9.23793758e-02 9.23596681e-02 + 9.23399731e-02 9.23202907e-02 9.23006208e-02 9.22809635e-02 9.22613188e-02 + 9.22416866e-02 9.22220669e-02 9.22024597e-02 9.21828651e-02 9.21632829e-02 + 9.21437132e-02 9.21241560e-02 9.21046112e-02 9.20850788e-02 9.20655589e-02 + 9.20460514e-02 9.20265563e-02 9.20070735e-02 9.19876031e-02 9.19681451e-02 + 9.19486994e-02 9.19292661e-02 9.19098451e-02 9.18904363e-02 9.18710399e-02 + 9.18516557e-02 9.18322838e-02 9.18129242e-02 9.17935768e-02 9.17742416e-02 + 9.17549186e-02 9.17356079e-02 9.17163093e-02 9.16970229e-02 9.16777486e-02 + 9.16584865e-02 9.16392366e-02 9.16199987e-02 9.16007730e-02 9.15815594e-02 + 9.15623578e-02 9.15431684e-02 9.15239910e-02 9.15048256e-02 9.14856723e-02 + 9.14665310e-02 9.14474017e-02 9.14282844e-02 9.14091791e-02 9.13900857e-02 + 9.13710043e-02 9.13519349e-02 9.13328774e-02 9.13138318e-02 9.12947982e-02 + 9.12757764e-02 9.12567665e-02 9.12377685e-02 9.12187823e-02 9.11998080e-02 + 9.11808456e-02 9.11618949e-02 9.11429561e-02 9.11240290e-02 9.11051138e-02 + 9.10862103e-02 9.10673186e-02 9.10484386e-02 9.10295704e-02 9.10107139e-02 + 9.09918691e-02 9.09730360e-02 9.09542146e-02 9.09354049e-02 9.09166069e-02 + 9.08978205e-02 9.08790457e-02 9.08602826e-02 9.08415311e-02 9.08227911e-02 + 9.08040628e-02 9.07853461e-02 9.07666409e-02 9.07479473e-02 9.07292652e-02 + 9.07105947e-02 9.06919357e-02 9.06732882e-02 9.06546522e-02 9.06360277e-02 + 9.06174146e-02 9.05988131e-02 9.05802229e-02 9.05616442e-02 9.05430770e-02 + 9.05245211e-02 9.05059767e-02 9.04874436e-02 9.04689219e-02 9.04504116e-02 + 9.04319127e-02 9.04134251e-02 9.03949488e-02 9.03764839e-02 9.03580303e-02 + 9.03395879e-02 9.03211569e-02 9.03027371e-02 9.02843286e-02 9.02659313e-02 + 9.02475453e-02 9.02291706e-02 9.02108070e-02 9.01924546e-02 9.01741135e-02 + 9.01557835e-02 9.01374647e-02 9.01191571e-02 9.01008606e-02 9.00825752e-02 + 9.00643010e-02 9.00460379e-02 9.00277859e-02 9.00095450e-02 8.99913152e-02 + 8.99730965e-02 8.99548888e-02 8.99366921e-02 8.99185065e-02 8.99003320e-02 + 8.98821684e-02 8.98640159e-02 8.98458743e-02 8.98277437e-02 8.98096241e-02 + 8.97915155e-02 8.97734178e-02 8.97553311e-02 8.97372552e-02 8.97191903e-02 + 8.97011363e-02 8.96830932e-02 8.96650610e-02 8.96470396e-02 8.96290291e-02 + 8.96110295e-02 8.95930407e-02 8.95750627e-02 8.95570956e-02 8.95391392e-02 + 8.95211937e-02 8.95032589e-02 8.94853349e-02 8.94674217e-02 8.94495192e-02 + 8.94316275e-02 8.94137465e-02 8.93958762e-02 8.93780167e-02 8.93601678e-02 + 8.93423296e-02 8.93245021e-02 8.93066853e-02 8.92888791e-02 8.92710836e-02 + 8.92532987e-02 8.92355244e-02 8.92177608e-02 8.92000077e-02 8.91822653e-02 + 8.91645334e-02 8.91468121e-02 8.91291014e-02 8.91114012e-02 8.90937115e-02 + 8.90760324e-02 8.90583638e-02 8.90407057e-02 8.90230582e-02 8.90054211e-02 + 8.89877945e-02 8.89701783e-02 8.89525726e-02 8.89349774e-02 8.89173926e-02 + 8.88998182e-02 8.88822542e-02 8.88647007e-02 8.88471575e-02 8.88296247e-02 + 8.88121023e-02 8.87945903e-02 8.87770886e-02 8.87595973e-02 8.87421163e-02 + 8.87246456e-02 8.87071853e-02 8.86897352e-02 8.86722954e-02 8.86548660e-02 + 8.86374468e-02 8.86200378e-02 8.86026391e-02 8.85852507e-02 8.85678725e-02 + 8.85505045e-02 8.85331467e-02 8.85157991e-02 8.84984618e-02 8.84811346e-02 + 8.84638176e-02 8.84465107e-02 8.84292140e-02 8.84119274e-02 8.83946510e-02 + 8.83773847e-02 8.83601285e-02 8.83428825e-02 8.83256465e-02 8.83084206e-02 + 8.82912047e-02 8.82739990e-02 8.82568033e-02 8.82396176e-02 8.82224420e-02 + 8.82052764e-02 8.81881208e-02 8.81709752e-02 8.81538396e-02 8.81367140e-02 + 8.81195984e-02 8.81024927e-02 8.80853970e-02 8.80683113e-02 8.80512355e-02 + 8.80341696e-02 8.80171137e-02 8.80000676e-02 8.79830314e-02 8.79660052e-02 + 8.79489888e-02 8.79319823e-02 8.79149857e-02 8.78979989e-02 8.78810219e-02 + 8.78640548e-02 8.78470975e-02 8.78301500e-02 8.78132123e-02 8.77962845e-02 + 8.77793664e-02 8.77624580e-02 8.77455595e-02 8.77286707e-02 8.77117916e-02 + 8.76949223e-02 8.76780628e-02 8.76612129e-02 8.76443728e-02 8.76275423e-02 + 8.76107216e-02 8.75939105e-02 8.75771091e-02 8.75603174e-02 8.75435353e-02 + 8.75267629e-02 8.75100001e-02 8.74932469e-02 8.74765033e-02 8.74597694e-02 + 8.74430451e-02 8.74263303e-02 8.74096251e-02 8.73929296e-02 8.73762435e-02 + 8.73595670e-02 8.73429001e-02 8.73262427e-02 8.73095948e-02 8.72929565e-02 + 8.72763276e-02 8.72597083e-02 8.72430984e-02 8.72264981e-02 8.72099072e-02 + 8.71933257e-02 8.71767537e-02 8.71601912e-02 8.71436381e-02 8.71270944e-02 + 8.71105602e-02 8.70940353e-02 8.70775199e-02 8.70610138e-02 8.70445172e-02 + 8.70280299e-02 8.70115519e-02 8.69950834e-02 8.69786241e-02 8.69621742e-02 + 8.69457337e-02 8.69293024e-02 8.69128805e-02 8.68964679e-02 8.68800646e-02 + 8.68636705e-02 8.68472857e-02 8.68309103e-02 8.68145440e-02 8.67981870e-02 + 8.67818393e-02 8.67655008e-02 8.67491715e-02 8.67328514e-02 8.67165406e-02 + 8.67002389e-02 8.66839464e-02 8.66676631e-02 8.66513890e-02 8.66351240e-02 + 8.66188682e-02 8.66026216e-02 8.65863841e-02 8.65701557e-02 8.65539364e-02 + 8.65377263e-02 8.65215252e-02 8.65053333e-02 8.64891504e-02 8.64729766e-02 + 8.64568119e-02 8.64406563e-02 8.64245097e-02 8.64083721e-02 8.63922436e-02 + 8.63761241e-02 8.63600136e-02 8.63439122e-02 8.63278197e-02 8.63117363e-02 + 8.62956618e-02 8.62795963e-02 8.62635398e-02 8.62474922e-02 8.62314536e-02 + 8.62154239e-02 8.61994032e-02 8.61833914e-02 8.61673885e-02 8.61513945e-02 + 8.61354094e-02 8.61194332e-02 8.61034659e-02 8.60875075e-02 8.60715580e-02 + 8.60556173e-02 8.60396855e-02 8.60237625e-02 8.60078483e-02 8.59919430e-02 + 8.59760465e-02 8.59601588e-02 8.59442800e-02 8.59284099e-02 8.59125486e-02 + 8.58966961e-02 8.58808523e-02 8.58650173e-02 8.58491911e-02 8.58333736e-02 + 8.58175649e-02 8.58017649e-02 8.57859736e-02 8.57701911e-02 8.57544172e-02 + 8.57386520e-02 8.57228956e-02 8.57071478e-02 8.56914087e-02 8.56756782e-02 + 8.56599565e-02 8.56442433e-02 8.56285389e-02 8.56128430e-02 8.55971558e-02 + 8.55814772e-02 8.55658072e-02 8.55501458e-02 8.55344930e-02 8.55188488e-02 + 8.55032132e-02 8.54875862e-02 8.54719677e-02 8.54563578e-02 8.54407564e-02 + 8.54251636e-02 8.54095793e-02 8.53940035e-02 8.53784363e-02 8.53628775e-02 + 8.53473273e-02 8.53317855e-02 8.53162523e-02 8.53007275e-02 8.52852112e-02 + 8.52697034e-02 8.52542040e-02 8.52387130e-02 8.52232305e-02 8.52077565e-02 + 8.51922909e-02 8.51768336e-02 8.51613848e-02 8.51459444e-02 8.51305124e-02 + 8.51150888e-02 8.50996736e-02 8.50842667e-02 8.50688682e-02 8.50534780e-02 + 8.50380963e-02 8.50227228e-02 8.50073577e-02 8.49920009e-02 8.49766524e-02 + 8.49613123e-02 8.49459804e-02 8.49306569e-02 8.49153416e-02 8.49000346e-02 + 8.48847359e-02 8.48694455e-02 8.48541633e-02 8.48388893e-02 8.48236237e-02 + 8.48083662e-02 8.47931170e-02 8.47778760e-02 8.47626432e-02 8.47474187e-02 + 8.47322023e-02 8.47169941e-02 8.47017941e-02 8.46866023e-02 8.46714187e-02 + 8.46562432e-02 8.46410759e-02 8.46259167e-02 8.46107657e-02 8.45956228e-02 + 8.45804880e-02 8.45653614e-02 8.45502428e-02 8.45351324e-02 8.45200301e-02 + 8.45049358e-02 8.44898497e-02 8.44747716e-02 8.44597016e-02 8.44446397e-02 + 8.44295858e-02 8.44145399e-02 8.43995021e-02 8.43844724e-02 8.43694506e-02 + 8.43544369e-02 8.43394312e-02 8.43244335e-02 8.43094438e-02 8.42944621e-02 + 8.42794883e-02 8.42645226e-02 8.42495648e-02 8.42346150e-02 8.42196731e-02 + 8.42047392e-02 8.41898132e-02 8.41748952e-02 8.41599851e-02 8.41450829e-02 + 8.41301886e-02 8.41153022e-02 8.41004238e-02 8.40855532e-02 8.40706905e-02 + 8.40558357e-02 8.40409887e-02 8.40261496e-02 8.40113184e-02 8.39964950e-02 + 8.39816795e-02 8.39668718e-02 8.39520719e-02 8.39372799e-02 8.39224957e-02 + 8.39077193e-02 8.38929507e-02 8.38781898e-02 8.38634368e-02 8.38486916e-02 + 8.38339541e-02 8.38192244e-02 8.38045025e-02 8.37897883e-02 8.37750818e-02 + 8.37603831e-02 8.37456922e-02 8.37310089e-02 8.37163334e-02 8.37016656e-02 + 8.36870055e-02 8.36723531e-02 8.36577084e-02 8.36430714e-02 8.36284421e-02 + 8.36138204e-02 8.35992064e-02 8.35846001e-02 8.35700014e-02 8.35554104e-02 + 8.35408270e-02 8.35262512e-02 8.35116831e-02 8.34971226e-02 8.34825697e-02 + 8.34680244e-02 8.34534867e-02 8.34389566e-02 8.34244341e-02 8.34099191e-02 + 8.33954118e-02 8.33809120e-02 8.33664197e-02 8.33519351e-02 8.33374579e-02 + 8.33229883e-02 8.33085263e-02 8.32940718e-02 8.32796248e-02 8.32651853e-02 + 8.32507533e-02 8.32363288e-02 8.32219118e-02 8.32075023e-02 8.31931003e-02 + 8.31787058e-02 8.31643187e-02 8.31499391e-02 8.31355669e-02 8.31212022e-02 + 8.31068450e-02 8.30924951e-02 8.30781528e-02 8.30638178e-02 8.30494902e-02 + 8.30351701e-02 8.30208574e-02 8.30065520e-02 8.29922541e-02 8.29779635e-02 + 8.29636804e-02 8.29494046e-02 8.29351361e-02 8.29208751e-02 8.29066213e-02 + 8.28923750e-02 8.28781359e-02 8.28639042e-02 8.28496799e-02 8.28354628e-02 + 8.28212531e-02 8.28070507e-02 8.27928556e-02 8.27786678e-02 8.27644872e-02 + 8.27503140e-02 8.27361480e-02 8.27219893e-02 8.27078379e-02 8.26936938e-02 + 8.26795569e-02 8.26654272e-02 8.26513048e-02 8.26371896e-02 8.26230816e-02 + 8.26089809e-02 8.25948874e-02 8.25808011e-02 8.25667220e-02 8.25526501e-02 + 8.25385854e-02 8.25245279e-02 8.25104775e-02 8.24964344e-02 8.24823984e-02 + 8.24683695e-02 8.24543479e-02 8.24403333e-02 8.24263259e-02 8.24123257e-02 + 8.23983326e-02 8.23843466e-02 8.23703677e-02 8.23563960e-02 8.23424313e-02 + 8.23284737e-02 8.23145233e-02 8.23005799e-02 8.22866436e-02 8.22727144e-02 + 8.22587923e-02 8.22448772e-02 8.22309692e-02 8.22170683e-02 8.22031744e-02 + 8.21892875e-02 8.21754077e-02 8.21615349e-02 8.21476691e-02 8.21338103e-02 + 8.21199586e-02 8.21061138e-02 8.20922761e-02 8.20784453e-02 8.20646216e-02 + 8.20508048e-02 8.20369950e-02 8.20231922e-02 8.20093963e-02 8.19956074e-02 + 8.19818254e-02 8.19680504e-02 8.19542823e-02 8.19405212e-02 8.19267670e-02 + 8.19130197e-02 8.18992794e-02 8.18855459e-02 8.18718194e-02 8.18580997e-02 + 8.18443870e-02 8.18306811e-02 8.18169822e-02 8.18032901e-02 8.17896048e-02 + 8.17759265e-02 8.17622550e-02 8.17485903e-02 8.17349326e-02 8.17212816e-02 + 8.17076375e-02 8.16940002e-02 8.16803697e-02 8.16667461e-02 8.16531293e-02 + 8.16395193e-02 8.16259161e-02 8.16123197e-02 8.15987300e-02 8.15851472e-02 + 8.15715712e-02 8.15580019e-02 8.15444394e-02 8.15308836e-02 8.15173346e-02 + 8.15037924e-02 8.14902569e-02 8.14767282e-02 8.14632062e-02 8.14496909e-02 + 8.14361823e-02 8.14226805e-02 8.14091854e-02 8.13956970e-02 8.13822153e-02 + 8.13687402e-02 8.13552719e-02 8.13418103e-02 8.13283553e-02 8.13149070e-02 + 8.13014654e-02 8.12880305e-02 8.12746022e-02 8.12611805e-02 8.12477656e-02 + 8.12343572e-02 8.12209555e-02 8.12075604e-02 8.11941719e-02 8.11807901e-02 + 8.11674149e-02 8.11540463e-02 8.11406843e-02 8.11273288e-02 8.11139800e-02 + 8.11006378e-02 8.10873021e-02 8.10739731e-02 8.10606506e-02 8.10473346e-02 + 8.10340252e-02 8.10207224e-02 8.10074261e-02 8.09941364e-02 8.09808532e-02 + 8.09675765e-02 8.09543064e-02 8.09410428e-02 8.09277857e-02 8.09145351e-02 + 8.09012911e-02 8.08880535e-02 8.08748224e-02 8.08615978e-02 8.08483797e-02 + 8.08351681e-02 8.08219630e-02 8.08087643e-02 8.07955721e-02 8.07823863e-02 + 8.07692070e-02 8.07560342e-02 8.07428678e-02 8.07297078e-02 8.07165542e-02 + 8.07034071e-02 8.06902664e-02 8.06771322e-02 8.06640043e-02 8.06508829e-02 + 8.06377678e-02 8.06246592e-02 8.06115569e-02 8.05984610e-02 8.05853715e-02 + 8.05722884e-02 8.05592116e-02 8.05461412e-02 8.05330772e-02 8.05200195e-02 + 8.05069682e-02 8.04939232e-02 8.04808846e-02 8.04678523e-02 8.04548263e-02 + 8.04418066e-02 8.04287933e-02 8.04157863e-02 8.04027856e-02 8.03897912e-02 + 8.03768031e-02 8.03638212e-02 8.03508457e-02 8.03378765e-02 8.03249135e-02 + 8.03119568e-02 8.02990064e-02 8.02860622e-02 8.02731243e-02 8.02601926e-02 + 8.02472672e-02 8.02343481e-02 8.02214351e-02 8.02085284e-02 8.01956280e-02 + 8.01827337e-02 8.01698457e-02 8.01569639e-02 8.01440883e-02 8.01312189e-02 + 8.01183557e-02 8.01054986e-02 8.00926478e-02 8.00798032e-02 8.00669647e-02 + 8.00541324e-02 8.00413063e-02 8.00284863e-02 8.00156725e-02 8.00028649e-02 + 7.99900634e-02 7.99772680e-02 7.99644788e-02 7.99516957e-02 7.99389187e-02 + 7.99261479e-02 7.99133832e-02 7.99006246e-02 7.98878721e-02 7.98751257e-02 + 7.98623854e-02 7.98496512e-02 7.98369231e-02 7.98242011e-02 7.98114851e-02 + 7.97987753e-02 7.97860715e-02 7.97733737e-02 7.97606821e-02 7.97479965e-02 + 7.97353169e-02 7.97226434e-02 7.97099759e-02 7.96973145e-02 7.96846590e-02 + 7.96720097e-02 7.96593663e-02 7.96467290e-02 7.96340976e-02 7.96214723e-02 + 7.96088530e-02 7.95962397e-02 7.95836323e-02 7.95710310e-02 7.95584356e-02 + 7.95458463e-02 7.95332629e-02 7.95206854e-02 7.95081140e-02 7.94955485e-02 + 7.94829889e-02 7.94704353e-02 7.94578877e-02 7.94453459e-02 7.94328102e-02 + 7.94202803e-02 7.94077564e-02 7.93952384e-02 7.93827263e-02 7.93702202e-02 + 7.93577199e-02 7.93452256e-02 7.93327371e-02 7.93202546e-02 7.93077779e-02 + 7.92953071e-02 7.92828423e-02 7.92703832e-02 7.92579301e-02 7.92454828e-02 + 7.92330414e-02 7.92206058e-02 7.92081761e-02 7.91957523e-02 7.91833343e-02 + 7.91709221e-02 7.91585157e-02 7.91461152e-02 7.91337206e-02 7.91213317e-02 + 7.91089486e-02 7.90965714e-02 7.90842000e-02 7.90718344e-02 7.90594746e-02 + 7.90471205e-02 7.90347723e-02 7.90224298e-02 7.90100932e-02 7.89977623e-02 + 7.89854371e-02 7.89731178e-02 7.89608042e-02 7.89484964e-02 7.89361943e-02 + 7.89238979e-02 7.89116073e-02 7.88993225e-02 7.88870434e-02 7.88747700e-02 + 7.88625023e-02 7.88502404e-02 7.88379842e-02 7.88257337e-02 7.88134889e-02 + 7.88012498e-02 7.87890164e-02 7.87767887e-02 7.87645667e-02 7.87523504e-02 + 7.87401398e-02 7.87279348e-02 7.87157355e-02 7.87035419e-02 7.86913540e-02 + 7.86791717e-02 7.86669951e-02 7.86548241e-02 7.86426588e-02 7.86304991e-02 + 7.86183450e-02 7.86061966e-02 7.85940538e-02 7.85819167e-02 7.85697851e-02 + 7.85576592e-02 7.85455389e-02 7.85334242e-02 7.85213151e-02 7.85092116e-02 + 7.84971137e-02 7.84850214e-02 7.84729347e-02 7.84608535e-02 7.84487780e-02 + 7.84367080e-02 7.84246436e-02 7.84125847e-02 7.84005314e-02 7.83884837e-02 + 7.83764415e-02 7.83644048e-02 7.83523737e-02 7.83403482e-02 7.83283282e-02 + 7.83163137e-02 7.83043047e-02 7.82923013e-02 7.82803034e-02 7.82683110e-02 + 7.82563241e-02 7.82443427e-02 7.82323668e-02 7.82203964e-02 7.82084315e-02 + 7.81964721e-02 7.81845182e-02 7.81725697e-02 7.81606268e-02 7.81486893e-02 + 7.81367572e-02 7.81248307e-02 7.81129096e-02 7.81009939e-02 7.80890837e-02 + 7.80771790e-02 7.80652797e-02 7.80533858e-02 7.80414974e-02 7.80296144e-02 + 7.80177368e-02 7.80058646e-02 7.79939979e-02 7.79821366e-02 7.79702807e-02 + 7.79584302e-02 7.79465851e-02 7.79347454e-02 7.79229111e-02 7.79110821e-02 + 7.78992586e-02 7.78874404e-02 7.78756277e-02 7.78638202e-02 7.78520182e-02 + 7.78402215e-02 7.78284302e-02 7.78166443e-02 7.78048637e-02 7.77930884e-02 + 7.77813185e-02 7.77695539e-02 7.77577947e-02 7.77460408e-02 7.77342922e-02 + 7.77225490e-02 7.77108111e-02 7.76990785e-02 7.76873512e-02 7.76756292e-02 + 7.76639125e-02 7.76522011e-02 7.76404950e-02 7.76287942e-02 7.76170987e-02 + 7.76054085e-02 7.75937236e-02 7.75820439e-02 7.75703695e-02 7.75587004e-02 + 7.75470365e-02 7.75353780e-02 7.75237246e-02 7.75120765e-02 7.75004337e-02 + 7.74887961e-02 7.74771637e-02 7.74655366e-02 7.74539147e-02 7.74422981e-02 + 7.74306867e-02 7.74190805e-02 7.74074795e-02 7.73958837e-02 7.73842931e-02 + 7.73727078e-02 7.73611276e-02 7.73495527e-02 7.73379829e-02 7.73264183e-02 + 7.73148589e-02 7.73033047e-02 7.72917557e-02 7.72802118e-02 7.72686732e-02 + 7.72571396e-02 7.72456113e-02 7.72340881e-02 7.72225701e-02 7.72110572e-02 + 7.71995494e-02 7.71880468e-02 7.71765494e-02 7.71650571e-02 7.71535699e-02 + 7.71420878e-02 7.71306109e-02 7.71191391e-02 7.71076724e-02 7.70962108e-02 + 7.70847543e-02 7.70733030e-02 7.70618567e-02 7.70504155e-02 7.70389795e-02 + 7.70275485e-02 7.70161226e-02 7.70047018e-02 7.69932860e-02 7.69818754e-02 + 7.69704698e-02 7.69590693e-02 7.69476738e-02 7.69362834e-02 7.69248981e-02 + 7.69135178e-02 7.69021426e-02 7.68907724e-02 7.68794073e-02 7.68680472e-02 + 7.68566921e-02 7.68453420e-02 7.68339970e-02 7.68226570e-02 7.68113221e-02 + 7.67999921e-02 7.67886672e-02 7.67773472e-02 7.67660323e-02 7.67547224e-02 + 7.67434174e-02 7.67321175e-02 7.67208226e-02 7.67095326e-02 7.66982476e-02 + 7.66869676e-02 7.66756926e-02 7.66644225e-02 7.66531574e-02 7.66418973e-02 + 7.66306422e-02 7.66193920e-02 7.66081467e-02 7.65969064e-02 7.65856711e-02 + 7.65744407e-02 7.65632152e-02 7.65519946e-02 7.65407790e-02 7.65295684e-02 + 7.65183626e-02 7.65071618e-02 7.64959659e-02 7.64847749e-02 7.64735888e-02 + 7.64624076e-02 7.64512313e-02 7.64400599e-02 7.64288935e-02 7.64177319e-02 + 7.64065752e-02 7.63954233e-02 7.63842764e-02 7.63731343e-02 7.63619972e-02 + 7.63508648e-02 7.63397374e-02 7.63286148e-02 7.63174971e-02 7.63063842e-02 + 7.62952762e-02 7.62841730e-02 7.62730747e-02 7.62619813e-02 7.62508926e-02 + 7.62398088e-02 7.62287298e-02 7.62176557e-02 7.62065864e-02 7.61955219e-02 + 7.61844622e-02 7.61734074e-02 7.61623573e-02 7.61513121e-02 7.61402716e-02 + 7.61292360e-02 7.61182052e-02 7.61071791e-02 7.60961579e-02 7.60851414e-02 + 7.60741297e-02 7.60631228e-02 7.60521207e-02 7.60411233e-02 7.60301307e-02 + 7.60191429e-02 7.60081598e-02 7.59971815e-02 7.59862080e-02 7.59752392e-02 + 7.59642751e-02 7.59533158e-02 7.59423613e-02 7.59314115e-02 7.59204664e-02 + 7.59095260e-02 7.58985904e-02 7.58876595e-02 7.58767333e-02 7.58658119e-02 + 7.58548951e-02 7.58439831e-02 7.58330758e-02 7.58221731e-02 7.58112752e-02 + 7.58003820e-02 7.57894935e-02 7.57786096e-02 7.57677305e-02 7.57568560e-02 + 7.57459862e-02 7.57351211e-02 7.57242607e-02 7.57134049e-02 7.57025538e-02 + 7.56917074e-02 7.56808656e-02 7.56700285e-02 7.56591961e-02 7.56483683e-02 + 7.56375451e-02 7.56267266e-02 7.56159127e-02 7.56051035e-02 7.55942989e-02 + 7.55834989e-02 7.55727035e-02 7.55619128e-02 7.55511267e-02 7.55403452e-02 + 7.55295684e-02 7.55187961e-02 7.55080285e-02 7.54972654e-02 7.54865070e-02 + 7.54757531e-02 7.54650039e-02 7.54542592e-02 7.54435192e-02 7.54327837e-02 + 7.54220528e-02 7.54113264e-02 7.54006047e-02 7.53898875e-02 7.53791749e-02 + 7.53684669e-02 7.53577634e-02 7.53470644e-02 7.53363701e-02 7.53256803e-02 + 7.53149950e-02 7.53043143e-02 7.52936381e-02 7.52829665e-02 7.52722994e-02 + 7.52616368e-02 7.52509787e-02 7.52403252e-02 7.52296762e-02 7.52190318e-02 + 7.52083918e-02 7.51977564e-02 7.51871255e-02 7.51764990e-02 7.51658771e-02 + 7.51552597e-02 7.51446468e-02 7.51340384e-02 7.51234344e-02 7.51128350e-02 + 7.51022400e-02 7.50916496e-02 7.50810636e-02 7.50704821e-02 7.50599050e-02 + 7.50493324e-02 7.50387643e-02 7.50282007e-02 7.50176415e-02 7.50070868e-02 + 7.49965365e-02 7.49859907e-02 7.49754493e-02 7.49649123e-02 7.49543799e-02 + 7.49438518e-02 7.49333282e-02 7.49228090e-02 7.49122942e-02 7.49017839e-02 + 7.48912780e-02 7.48807765e-02 7.48702794e-02 7.48597868e-02 7.48492985e-02 + 7.48388147e-02 7.48283352e-02 7.48178602e-02 7.48073895e-02 7.47969233e-02 + 7.47864614e-02 7.47760040e-02 7.47655509e-02 7.47551022e-02 7.47446579e-02 + 7.47342179e-02 7.47237824e-02 7.47133512e-02 7.47029243e-02 7.46925019e-02 + 7.46820838e-02 7.46716700e-02 7.46612606e-02 7.46508556e-02 7.46404549e-02 + 7.46300586e-02 7.46196666e-02 7.46092789e-02 7.45988956e-02 7.45885166e-02 + 7.45781419e-02 7.45677716e-02 7.45574056e-02 7.45470439e-02 7.45366865e-02 + 7.45263335e-02 7.45159847e-02 7.45056403e-02 7.44953002e-02 7.44849644e-02 + 7.44746329e-02 7.44643056e-02 7.44539827e-02 7.44436641e-02 7.44333497e-02 + 7.44230397e-02 7.44127339e-02 7.44024324e-02 7.43921352e-02 7.43818423e-02 + 7.43715536e-02 7.43612692e-02 7.43509890e-02 7.43407132e-02 7.43304416e-02 + 7.43201742e-02 7.43099111e-02 7.42996522e-02 7.42893976e-02 7.42791473e-02 + 7.42689011e-02 7.42586593e-02 7.42484216e-02 7.42381882e-02 7.42279590e-02 + 7.42177341e-02 7.42075133e-02 7.41972968e-02 7.41870845e-02 7.41768765e-02 + 7.41666726e-02 7.41564729e-02 7.41462775e-02 7.41360863e-02 7.41258992e-02 + 7.41157164e-02 7.41055377e-02 7.40953633e-02 7.40851930e-02 7.40750269e-02 + 7.40648650e-02 7.40547073e-02 7.40445538e-02 7.40344044e-02 7.40242592e-02 + 7.40141182e-02 7.40039814e-02 7.39938487e-02 7.39837202e-02 7.39735958e-02 + 7.39634756e-02 7.39533595e-02 7.39432476e-02 7.39331398e-02 7.39230362e-02 + 7.39129367e-02 7.39028414e-02 7.38927502e-02 7.38826631e-02 7.38725802e-02 + 7.38625014e-02 7.38524267e-02 7.38423561e-02 7.38322896e-02 7.38222273e-02 + 7.38121691e-02 7.38021150e-02 7.37920650e-02 7.37820191e-02 7.37719773e-02 + 7.37619396e-02 7.37519060e-02 7.37418765e-02 7.37318510e-02 7.37218297e-02 + 7.37118125e-02 7.37017993e-02 7.36917902e-02 7.36817852e-02 7.36717843e-02 + 7.36617874e-02 7.36517946e-02 7.36418059e-02 7.36318212e-02 7.36218406e-02 + 7.36118641e-02 7.36018916e-02 7.35919231e-02 7.35819587e-02 7.35719984e-02 + 7.35620421e-02 7.35520898e-02 7.35421416e-02 7.35321974e-02 7.35222572e-02 + 7.35123211e-02 7.35023890e-02 7.34924610e-02 7.34825369e-02 7.34726169e-02 + 7.34627009e-02 7.34527889e-02 7.34428809e-02 7.34329769e-02 7.34230769e-02 + 7.34131809e-02 7.34032890e-02 7.33934010e-02 7.33835170e-02 7.33736370e-02 + 7.33637610e-02 7.33538890e-02 7.33440210e-02 7.33341569e-02 7.33242969e-02 + 7.33144408e-02 7.33045886e-02 7.32947405e-02 7.32848963e-02 7.32750561e-02 + 7.32652199e-02 7.32553876e-02 7.32455592e-02 7.32357348e-02 7.32259144e-02 + 7.32160979e-02 7.32062854e-02 7.31964768e-02 7.31866722e-02 7.31768715e-02 + 7.31670747e-02 7.31572819e-02 7.31474930e-02 7.31377080e-02 7.31279269e-02 + 7.31181498e-02 7.31083766e-02 7.30986073e-02 7.30888419e-02 7.30790805e-02 + 7.30693229e-02 7.30595693e-02 7.30498195e-02 7.30400737e-02 7.30303318e-02 + 7.30205937e-02 7.30108596e-02 7.30011293e-02 7.29914030e-02 7.29816805e-02 + 7.29719619e-02 7.29622472e-02 7.29525364e-02 7.29428294e-02 7.29331263e-02 + 7.29234271e-02 7.29137318e-02 7.29040403e-02 7.28943527e-02 7.28846689e-02 + 7.28749890e-02 7.28653130e-02 7.28556408e-02 7.28459725e-02 7.28363080e-02 + 7.28266473e-02 7.28169905e-02 7.28073376e-02 7.27976885e-02 7.27880432e-02 + 7.27784017e-02 7.27687641e-02 7.27591303e-02 7.27495003e-02 7.27398742e-02 + 7.27302519e-02 7.27206334e-02 7.27110187e-02 7.27014078e-02 7.26918007e-02 + 7.26821975e-02 7.26725980e-02 7.26630023e-02 7.26534105e-02 7.26438224e-02 + 7.26342382e-02 7.26246577e-02 7.26150810e-02 7.26055081e-02 7.25959390e-02 + 7.25863737e-02 7.25768121e-02 7.25672544e-02 7.25577004e-02 7.25481502e-02 + 7.25386037e-02 7.25290610e-02 7.25195221e-02 7.25099870e-02 7.25004556e-02 + 7.24909279e-02 7.24814040e-02 7.24718839e-02 7.24623675e-02 7.24528549e-02 + 7.24433460e-02 7.24338409e-02 7.24243395e-02 7.24148418e-02 7.24053479e-02 + 7.23958577e-02 7.23863712e-02 7.23768885e-02 7.23674095e-02 7.23579342e-02 + 7.23484626e-02 7.23389948e-02 7.23295307e-02 7.23200702e-02 7.23106135e-02 + 7.23011605e-02 7.22917112e-02 7.22822656e-02 7.22728238e-02 7.22633856e-02 + 7.22539511e-02 7.22445203e-02 7.22350932e-02 7.22256698e-02 7.22162500e-02 + 7.22068340e-02 7.21974216e-02 7.21880130e-02 7.21786080e-02 7.21692066e-02 + 7.21598090e-02 7.21504150e-02 7.21410247e-02 7.21316380e-02 7.21222550e-02 + 7.21128757e-02 7.21035000e-02 7.20941280e-02 7.20847596e-02 7.20753949e-02 + 7.20660339e-02 7.20566765e-02 7.20473227e-02 7.20379726e-02 7.20286261e-02 + 7.20192832e-02 7.20099440e-02 7.20006084e-02 7.19912765e-02 7.19819481e-02 + 7.19726234e-02 7.19633024e-02 7.19539849e-02 7.19446711e-02 7.19353608e-02 + 7.19260542e-02 7.19167512e-02 7.19074518e-02 7.18981560e-02 7.18888639e-02 + 7.18795753e-02 7.18702903e-02 7.18610089e-02 7.18517311e-02 7.18424569e-02 + 7.18331863e-02 7.18239193e-02 7.18146559e-02 7.18053960e-02 7.17961398e-02 + 7.17868871e-02 7.17776380e-02 7.17683924e-02 7.17591505e-02 7.17499121e-02 + 7.17406772e-02 7.17314460e-02 7.17222183e-02 7.17129941e-02 7.17037735e-02 + 7.16945565e-02 7.16853430e-02 7.16761331e-02 7.16669267e-02 7.16577239e-02 + 7.16485246e-02 7.16393289e-02 7.16301367e-02 7.16209480e-02 7.16117629e-02 + 7.16025813e-02 7.15934032e-02 7.15842287e-02 7.15750577e-02 7.15658902e-02 + 7.15567262e-02 7.15475658e-02 7.15384089e-02 7.15292555e-02 7.15201056e-02 + 7.15109592e-02 7.15018163e-02 7.14926769e-02 7.14835410e-02 7.14744087e-02 + 7.14652798e-02 7.14561544e-02 7.14470325e-02 7.14379142e-02 7.14287993e-02 + 7.14196878e-02 7.14105799e-02 7.14014755e-02 7.13923745e-02 7.13832770e-02 + 7.13741830e-02 7.13650925e-02 7.13560055e-02 7.13469219e-02 7.13378418e-02 + 7.13287651e-02 7.13196919e-02 7.13106222e-02 7.13015559e-02 7.12924931e-02 + 7.12834338e-02 7.12743779e-02 7.12653254e-02 7.12562764e-02 7.12472309e-02 + 7.12381888e-02 7.12291501e-02 7.12201149e-02 7.12110831e-02 7.12020547e-02 + 7.11930298e-02 7.11840083e-02 7.11749902e-02 7.11659756e-02 7.11569644e-02 + 7.11479566e-02 7.11389522e-02 7.11299512e-02 7.11209537e-02 7.11119596e-02 + 7.11029689e-02 7.10939816e-02 7.10849977e-02 7.10760172e-02 7.10670401e-02 + 7.10580664e-02 7.10490961e-02 7.10401292e-02 7.10311657e-02 7.10222056e-02 + 7.10132489e-02 7.10042956e-02 7.09953456e-02 7.09863990e-02 7.09774559e-02 + 7.09685161e-02 7.09595796e-02 7.09506466e-02 7.09417169e-02 7.09327906e-02 + 7.09238677e-02 7.09149481e-02 7.09060319e-02 7.08971191e-02 7.08882096e-02 + 7.08793035e-02 7.08704007e-02 7.08615013e-02 7.08526052e-02 7.08437125e-02 + 7.08348231e-02 7.08259371e-02 7.08170544e-02 7.08081751e-02 7.07992991e-02 + 7.07904264e-02 7.07815571e-02 7.07726911e-02 7.07638285e-02 7.07549691e-02 + 7.07461131e-02 7.07372604e-02 7.07284111e-02 7.07195650e-02 7.07107223e-02 + 7.07018829e-02 7.06930468e-02 7.06842141e-02 7.06753846e-02 7.06665584e-02 + 7.06577356e-02 7.06489160e-02 7.06400998e-02 7.06312868e-02 7.06224772e-02 + 7.06136708e-02 7.06048678e-02 7.05960680e-02 7.05872715e-02 7.05784783e-02 + 7.05696884e-02 7.05609018e-02 7.05521184e-02 7.05433384e-02 7.05345616e-02 + 1.00000000e+00 9.75894263e-01 9.53451752e-01 9.32489601e-01 9.12851907e-01 + 8.94404826e-01 8.77032714e-01 8.60635068e-01 8.45124065e-01 8.30422576e-01 + 8.16462554e-01 8.03183696e-01 7.90532350e-01 7.78460602e-01 7.66925506e-01 + 7.55888443e-01 7.45314577e-01 7.35172390e-01 7.25433287e-01 7.16071258e-01 + 7.07062580e-01 6.98385572e-01 6.90020370e-01 6.81948734e-01 6.74153887e-01 + 6.66620364e-01 6.59333880e-01 6.52281224e-01 6.45450150e-01 6.38829295e-01 + 6.32408091e-01 6.26176704e-01 6.20125961e-01 6.14247300e-01 6.08532716e-01 + 6.02974715e-01 5.97566276e-01 5.92300808e-01 5.87172122e-01 5.82174396e-01 + 5.77302151e-01 5.72550221e-01 5.67913735e-01 5.63388093e-01 5.58968948e-01 + 5.54652188e-01 5.50433918e-01 5.46310451e-01 5.42278287e-01 5.38334105e-01 + 5.34474753e-01 5.30697232e-01 5.26998691e-01 5.23376415e-01 5.19827818e-01 + 5.16350438e-01 5.12941922e-01 5.09600027e-01 5.06322612e-01 5.03107629e-01 + 4.99953120e-01 4.96857213e-01 4.93818117e-01 4.90834114e-01 4.87903560e-01 + 4.85024878e-01 4.82196556e-01 4.79417141e-01 4.76685242e-01 4.73999519e-01 + 4.71358685e-01 4.68761505e-01 4.66206788e-01 4.63693390e-01 4.61220209e-01 + 4.58786184e-01 4.56390292e-01 4.54031548e-01 4.51709002e-01 4.49421737e-01 + 4.47168870e-01 4.44949545e-01 4.42762941e-01 4.40608259e-01 4.38484731e-01 + 4.36391613e-01 4.34328187e-01 4.32293756e-01 4.30287649e-01 4.28309213e-01 + 4.26357819e-01 4.24432857e-01 4.22533734e-01 4.20659877e-01 4.18810733e-01 + 4.16985761e-01 4.15184441e-01 4.13406264e-01 4.11650741e-01 4.09917394e-01 + 4.08205761e-01 4.06515390e-01 4.04845847e-01 4.03196706e-01 4.01567556e-01 + 3.99957996e-01 3.98367636e-01 3.96796098e-01 3.95243014e-01 3.93708024e-01 + 3.92190780e-01 3.90690944e-01 3.89208184e-01 3.87742180e-01 3.86292617e-01 + 3.84859191e-01 3.83441605e-01 3.82039569e-01 3.80652800e-01 3.79281024e-01 + 3.77923973e-01 3.76581385e-01 3.75253005e-01 3.73938583e-01 3.72637878e-01 + 3.71350652e-01 3.70076675e-01 3.68815719e-01 3.67567566e-01 3.66332000e-01 + 3.65108810e-01 3.63897792e-01 3.62698745e-01 3.61511473e-01 3.60335785e-01 + 3.59171493e-01 3.58018415e-01 3.56876371e-01 3.55745187e-01 3.54624691e-01 + 3.53514717e-01 3.52415101e-01 3.51325683e-01 3.50246306e-01 3.49176816e-01 + 3.48117064e-01 3.47066903e-01 3.46026189e-01 3.44994782e-01 3.43972542e-01 + 3.42959337e-01 3.41955032e-01 3.40959498e-01 3.39972609e-01 3.38994241e-01 + 3.38024270e-01 3.37062579e-01 3.36109049e-01 3.35163566e-01 3.34226018e-01 + 3.33296293e-01 3.32374284e-01 3.31459885e-01 3.30552992e-01 3.29653502e-01 + 3.28761315e-01 3.27876333e-01 3.26998460e-01 3.26127600e-01 3.25263662e-01 + 3.24406553e-01 3.23556184e-01 3.22712468e-01 3.21875318e-01 3.21044649e-01 + 3.20220378e-01 3.19402424e-01 3.18590706e-01 3.17785145e-01 3.16985665e-01 + 3.16192188e-01 3.15404639e-01 3.14622947e-01 3.13847038e-01 3.13076841e-01 + 3.12312287e-01 3.11553306e-01 3.10799833e-01 3.10051800e-01 3.09309142e-01 + 3.08571795e-01 3.07839697e-01 3.07112784e-01 3.06390997e-01 3.05674275e-01 + 3.04962560e-01 3.04255793e-01 3.03553917e-01 3.02856876e-01 3.02164615e-01 + 3.01477079e-01 3.00794216e-01 3.00115971e-01 2.99442294e-01 2.98773134e-01 + 2.98108439e-01 2.97448161e-01 2.96792252e-01 2.96140662e-01 2.95493345e-01 + 2.94850254e-01 2.94211344e-01 2.93576570e-01 2.92945886e-01 2.92319250e-01 + 2.91696618e-01 2.91077947e-01 2.90463197e-01 2.89852325e-01 2.89245291e-01 + 2.88642055e-01 2.88042577e-01 2.87446820e-01 2.86854743e-01 2.86266311e-01 + 2.85681484e-01 2.85100228e-01 2.84522505e-01 2.83948280e-01 2.83377517e-01 + 2.82810183e-01 2.82246243e-01 2.81685662e-01 2.81128409e-01 2.80574450e-01 + 2.80023753e-01 2.79476286e-01 2.78932017e-01 2.78390916e-01 2.77852951e-01 + 2.77318094e-01 2.76786313e-01 2.76257580e-01 2.75731865e-01 2.75209140e-01 + 2.74689377e-01 2.74172548e-01 2.73658625e-01 2.73147581e-01 2.72639389e-01 + 2.72134024e-01 2.71631458e-01 2.71131667e-01 2.70634624e-01 2.70140305e-01 + 2.69648684e-01 2.69159738e-01 2.68673442e-01 2.68189772e-01 2.67708706e-01 + 2.67230218e-01 2.66754287e-01 2.66280890e-01 2.65810005e-01 2.65341608e-01 + 2.64875680e-01 2.64412197e-01 2.63951138e-01 2.63492483e-01 2.63036211e-01 + 2.62582301e-01 2.62130732e-01 2.61681486e-01 2.61234541e-01 2.60789879e-01 + 2.60347479e-01 2.59907323e-01 2.59469393e-01 2.59033668e-01 2.58600131e-01 + 2.58168764e-01 2.57739549e-01 2.57312467e-01 2.56887501e-01 2.56464633e-01 + 2.56043847e-01 2.55625126e-01 2.55208452e-01 2.54793809e-01 2.54381180e-01 + 2.53970550e-01 2.53561902e-01 2.53155220e-01 2.52750489e-01 2.52347693e-01 + 2.51946816e-01 2.51547844e-01 2.51150761e-01 2.50755553e-01 2.50362204e-01 + 2.49970701e-01 2.49581029e-01 2.49193173e-01 2.48807120e-01 2.48422856e-01 + 2.48040367e-01 2.47659639e-01 2.47280658e-01 2.46903413e-01 2.46527888e-01 + 2.46154072e-01 2.45781951e-01 2.45411513e-01 2.45042745e-01 2.44675634e-01 + 2.44310168e-01 2.43946335e-01 2.43584122e-01 2.43223518e-01 2.42864511e-01 + 2.42507089e-01 2.42151241e-01 2.41796954e-01 2.41444218e-01 2.41093021e-01 + 2.40743352e-01 2.40395201e-01 2.40048555e-01 2.39703404e-01 2.39359739e-01 + 2.39017547e-01 2.38676818e-01 2.38337542e-01 2.37999710e-01 2.37663309e-01 + 2.37328332e-01 2.36994766e-01 2.36662603e-01 2.36331833e-01 2.36002446e-01 + 2.35674432e-01 2.35347783e-01 2.35022487e-01 2.34698537e-01 2.34375923e-01 + 2.34054635e-01 2.33734666e-01 2.33416004e-01 2.33098643e-01 2.32782573e-01 + 2.32467784e-01 2.32154270e-01 2.31842020e-01 2.31531028e-01 2.31221283e-01 + 2.30912778e-01 2.30605504e-01 2.30299454e-01 2.29994620e-01 2.29690992e-01 + 2.29388564e-01 2.29087328e-01 2.28787275e-01 2.28488398e-01 2.28190689e-01 + 2.27894141e-01 2.27598746e-01 2.27304497e-01 2.27011386e-01 2.26719406e-01 + 2.26428550e-01 2.26138810e-01 2.25850180e-01 2.25562652e-01 2.25276219e-01 + 2.24990875e-01 2.24706613e-01 2.24423425e-01 2.24141305e-01 2.23860246e-01 + 2.23580243e-01 2.23301287e-01 2.23023372e-01 2.22746493e-01 2.22470643e-01 + 2.22195814e-01 2.21922002e-01 2.21649200e-01 2.21377401e-01 2.21106599e-01 + 2.20836789e-01 2.20567964e-01 2.20300119e-01 2.20033247e-01 2.19767342e-01 + 2.19502400e-01 2.19238413e-01 2.18975376e-01 2.18713284e-01 2.18452130e-01 + 2.18191910e-01 2.17932618e-01 2.17674247e-01 2.17416794e-01 2.17160252e-01 + 2.16904616e-01 2.16649880e-01 2.16396040e-01 2.16143090e-01 2.15891025e-01 + 2.15639840e-01 2.15389530e-01 2.15140089e-01 2.14891513e-01 2.14643796e-01 + 2.14396935e-01 2.14150923e-01 2.13905756e-01 2.13661429e-01 2.13417937e-01 + 2.13175276e-01 2.12933441e-01 2.12692427e-01 2.12452229e-01 2.12212843e-01 + 2.11974265e-01 2.11736490e-01 2.11499513e-01 2.11263330e-01 2.11027936e-01 + 2.10793328e-01 2.10559500e-01 2.10326449e-01 2.10094169e-01 2.09862658e-01 + 2.09631910e-01 2.09401922e-01 2.09172689e-01 2.08944208e-01 2.08716473e-01 + 2.08489481e-01 2.08263229e-01 2.08037711e-01 2.07812924e-01 2.07588865e-01 + 2.07365528e-01 2.07142911e-01 2.06921010e-01 2.06699820e-01 2.06479337e-01 + 2.06259559e-01 2.06040481e-01 2.05822100e-01 2.05604412e-01 2.05387413e-01 + 2.05171099e-01 2.04955468e-01 2.04740515e-01 2.04526237e-01 2.04312630e-01 + 2.04099691e-01 2.03887417e-01 2.03675803e-01 2.03464847e-01 2.03254545e-01 + 2.03044894e-01 2.02835891e-01 2.02627531e-01 2.02419812e-01 2.02212731e-01 + 2.02006284e-01 2.01800468e-01 2.01595280e-01 2.01390716e-01 2.01186774e-01 + 2.00983451e-01 2.00780742e-01 2.00578646e-01 2.00377158e-01 2.00176277e-01 + 1.99975998e-01 1.99776320e-01 1.99577238e-01 1.99378751e-01 1.99180854e-01 + 1.98983546e-01 1.98786822e-01 1.98590681e-01 1.98395120e-01 1.98200135e-01 + 1.98005724e-01 1.97811884e-01 1.97618612e-01 1.97425905e-01 1.97233761e-01 + 1.97042177e-01 1.96851151e-01 1.96660678e-01 1.96470758e-01 1.96281387e-01 + 1.96092562e-01 1.95904281e-01 1.95716541e-01 1.95529341e-01 1.95342676e-01 + 1.95156545e-01 1.94970945e-01 1.94785873e-01 1.94601328e-01 1.94417306e-01 + 1.94233805e-01 1.94050823e-01 1.93868357e-01 1.93686404e-01 1.93504963e-01 + 1.93324031e-01 1.93143606e-01 1.92963685e-01 1.92784265e-01 1.92605345e-01 + 1.92426923e-01 1.92248995e-01 1.92071560e-01 1.91894616e-01 1.91718159e-01 + 1.91542189e-01 1.91366702e-01 1.91191696e-01 1.91017170e-01 1.90843121e-01 + 1.90669546e-01 1.90496445e-01 1.90323814e-01 1.90151652e-01 1.89979956e-01 + 1.89808724e-01 1.89637954e-01 1.89467644e-01 1.89297793e-01 1.89128397e-01 + 1.88959456e-01 1.88790966e-01 1.88622926e-01 1.88455335e-01 1.88288189e-01 + 1.88121487e-01 1.87955227e-01 1.87789407e-01 1.87624025e-01 1.87459079e-01 + 1.87294568e-01 1.87130489e-01 1.86966840e-01 1.86803620e-01 1.86640827e-01 + 1.86478458e-01 1.86316513e-01 1.86154989e-01 1.85993884e-01 1.85833197e-01 + 1.85672925e-01 1.85513068e-01 1.85353622e-01 1.85194587e-01 1.85035961e-01 + 1.84877742e-01 1.84719927e-01 1.84562517e-01 1.84405508e-01 1.84248899e-01 + 1.84092688e-01 1.83936874e-01 1.83781455e-01 1.83626429e-01 1.83471795e-01 + 1.83317551e-01 1.83163695e-01 1.83010226e-01 1.82857142e-01 1.82704442e-01 + 1.82552123e-01 1.82400185e-01 1.82248626e-01 1.82097444e-01 1.81946637e-01 + 1.81796204e-01 1.81646144e-01 1.81496455e-01 1.81347136e-01 1.81198184e-01 + 1.81049599e-01 1.80901378e-01 1.80753522e-01 1.80606027e-01 1.80458892e-01 + 1.80312117e-01 1.80165699e-01 1.80019637e-01 1.79873930e-01 1.79728576e-01 + 1.79583574e-01 1.79438922e-01 1.79294620e-01 1.79150665e-01 1.79007056e-01 + 1.78863792e-01 1.78720871e-01 1.78578292e-01 1.78436054e-01 1.78294156e-01 + 1.78152595e-01 1.78011371e-01 1.77870482e-01 1.77729928e-01 1.77589706e-01 + 1.77449815e-01 1.77310255e-01 1.77171023e-01 1.77032119e-01 1.76893540e-01 + 1.76755287e-01 1.76617358e-01 1.76479751e-01 1.76342465e-01 1.76205499e-01 + 1.76068851e-01 1.75932521e-01 1.75796507e-01 1.75660808e-01 1.75525423e-01 + 1.75390351e-01 1.75255589e-01 1.75121138e-01 1.74986996e-01 1.74853162e-01 + 1.74719634e-01 1.74586412e-01 1.74453494e-01 1.74320879e-01 1.74188566e-01 + 1.74056554e-01 1.73924842e-01 1.73793428e-01 1.73662312e-01 1.73531492e-01 + 1.73400967e-01 1.73270736e-01 1.73140798e-01 1.73011152e-01 1.72881797e-01 + 1.72752732e-01 1.72623955e-01 1.72495466e-01 1.72367263e-01 1.72239346e-01 + 1.72111713e-01 1.71984363e-01 1.71857296e-01 1.71730510e-01 1.71604004e-01 + 1.71477777e-01 1.71351828e-01 1.71226157e-01 1.71100761e-01 1.70975641e-01 + 1.70850795e-01 1.70726222e-01 1.70601921e-01 1.70477891e-01 1.70354131e-01 + 1.70230640e-01 1.70107418e-01 1.69984462e-01 1.69861773e-01 1.69739349e-01 + 1.69617190e-01 1.69495294e-01 1.69373660e-01 1.69252288e-01 1.69131176e-01 + 1.69010324e-01 1.68889731e-01 1.68769395e-01 1.68649317e-01 1.68529494e-01 + 1.68409926e-01 1.68290613e-01 1.68171552e-01 1.68052744e-01 1.67934188e-01 + 1.67815882e-01 1.67697825e-01 1.67580018e-01 1.67462458e-01 1.67345146e-01 + 1.67228079e-01 1.67111258e-01 1.66994682e-01 1.66878349e-01 1.66762259e-01 + 1.66646411e-01 1.66530804e-01 1.66415437e-01 1.66300309e-01 1.66185421e-01 + 1.66070770e-01 1.65956356e-01 1.65842178e-01 1.65728235e-01 1.65614527e-01 + 1.65501053e-01 1.65387812e-01 1.65274803e-01 1.65162025e-01 1.65049477e-01 + 1.64937160e-01 1.64825071e-01 1.64713211e-01 1.64601578e-01 1.64490172e-01 + 1.64378991e-01 1.64268036e-01 1.64157305e-01 1.64046798e-01 1.63936514e-01 + 1.63826452e-01 1.63716611e-01 1.63606991e-01 1.63497591e-01 1.63388409e-01 + 1.63279447e-01 1.63170702e-01 1.63062174e-01 1.62953862e-01 1.62845766e-01 + 1.62737885e-01 1.62630217e-01 1.62522764e-01 1.62415523e-01 1.62308493e-01 + 1.62201676e-01 1.62095069e-01 1.61988671e-01 1.61882483e-01 1.61776504e-01 + 1.61670732e-01 1.61565168e-01 1.61459810e-01 1.61354658e-01 1.61249711e-01 + 1.61144969e-01 1.61040431e-01 1.60936095e-01 1.60831963e-01 1.60728032e-01 + 1.60624302e-01 1.60520773e-01 1.60417444e-01 1.60314314e-01 1.60211383e-01 + 1.60108650e-01 1.60006114e-01 1.59903775e-01 1.59801632e-01 1.59699684e-01 + 1.59597932e-01 1.59496373e-01 1.59395009e-01 1.59293837e-01 1.59192858e-01 + 1.59092070e-01 1.58991474e-01 1.58891068e-01 1.58790852e-01 1.58690826e-01 + 1.58590988e-01 1.58491339e-01 1.58391877e-01 1.58292602e-01 1.58193514e-01 + 1.58094612e-01 1.57995894e-01 1.57897362e-01 1.57799013e-01 1.57700849e-01 + 1.57602867e-01 1.57505067e-01 1.57407450e-01 1.57310013e-01 1.57212758e-01 + 1.57115682e-01 1.57018786e-01 1.56922069e-01 1.56825531e-01 1.56729171e-01 + 1.56632988e-01 1.56536982e-01 1.56441152e-01 1.56345498e-01 1.56250019e-01 + 1.56154715e-01 1.56059585e-01 1.55964629e-01 1.55869846e-01 1.55775235e-01 + 1.55680797e-01 1.55586530e-01 1.55492434e-01 1.55398509e-01 1.55304754e-01 + 1.55211168e-01 1.55117751e-01 1.55024502e-01 1.54931422e-01 1.54838509e-01 + 1.54745763e-01 1.54653183e-01 1.54560770e-01 1.54468522e-01 1.54376439e-01 + 1.54284520e-01 1.54192765e-01 1.54101174e-01 1.54009746e-01 1.53918481e-01 + 1.53827377e-01 1.53736435e-01 1.53645654e-01 1.53555034e-01 1.53464574e-01 + 1.53374274e-01 1.53284132e-01 1.53194150e-01 1.53104326e-01 1.53014660e-01 + 1.52925151e-01 1.52835798e-01 1.52746603e-01 1.52657563e-01 1.52568679e-01 + 1.52479950e-01 1.52391376e-01 1.52302955e-01 1.52214689e-01 1.52126576e-01 + 1.52038615e-01 1.51950807e-01 1.51863151e-01 1.51775647e-01 1.51688293e-01 + 1.51601091e-01 1.51514038e-01 1.51427135e-01 1.51340382e-01 1.51253778e-01 + 1.51167322e-01 1.51081014e-01 1.50994854e-01 1.50908841e-01 1.50822975e-01 + 1.50737255e-01 1.50651681e-01 1.50566253e-01 1.50480970e-01 1.50395832e-01 + 1.50310838e-01 1.50225988e-01 1.50141281e-01 1.50056718e-01 1.49972298e-01 + 1.49888019e-01 1.49803883e-01 1.49719888e-01 1.49636035e-01 1.49552322e-01 + 1.49468749e-01 1.49385316e-01 1.49302023e-01 1.49218869e-01 1.49135854e-01 + 1.49052977e-01 1.48970239e-01 1.48887638e-01 1.48805174e-01 1.48722847e-01 + 1.48640656e-01 1.48558602e-01 1.48476683e-01 1.48394900e-01 1.48313252e-01 + 1.48231738e-01 1.48150359e-01 1.48069113e-01 1.47988001e-01 1.47907022e-01 + 1.47826176e-01 1.47745463e-01 1.47664881e-01 1.47584431e-01 1.47504113e-01 + 1.47423925e-01 1.47343868e-01 1.47263942e-01 1.47184145e-01 1.47104478e-01 + 1.47024940e-01 1.46945531e-01 1.46866251e-01 1.46787099e-01 1.46708074e-01 + 1.46629177e-01 1.46550407e-01 1.46471764e-01 1.46393248e-01 1.46314857e-01 + 1.46236593e-01 1.46158454e-01 1.46080440e-01 1.46002551e-01 1.45924786e-01 + 1.45847145e-01 1.45769628e-01 1.45692235e-01 1.45614965e-01 1.45537817e-01 + 1.45460792e-01 1.45383890e-01 1.45307109e-01 1.45230449e-01 1.45153911e-01 + 1.45077494e-01 1.45001197e-01 1.44925021e-01 1.44848964e-01 1.44773027e-01 + 1.44697209e-01 1.44621511e-01 1.44545931e-01 1.44470469e-01 1.44395126e-01 + 1.44319900e-01 1.44244791e-01 1.44169800e-01 1.44094926e-01 1.44020168e-01 + 1.43945527e-01 1.43871001e-01 1.43796591e-01 1.43722296e-01 1.43648117e-01 + 1.43574052e-01 1.43500101e-01 1.43426265e-01 1.43352542e-01 1.43278934e-01 + 1.43205438e-01 1.43132055e-01 1.43058785e-01 1.42985628e-01 1.42912583e-01 + 1.42839649e-01 1.42766827e-01 1.42694116e-01 1.42621516e-01 1.42549027e-01 + 1.42476649e-01 1.42404380e-01 1.42332222e-01 1.42260172e-01 1.42188233e-01 + 1.42116402e-01 1.42044680e-01 1.41973066e-01 1.41901561e-01 1.41830164e-01 + 1.41758874e-01 1.41687692e-01 1.41616617e-01 1.41545648e-01 1.41474786e-01 + 1.41404031e-01 1.41333382e-01 1.41262838e-01 1.41192400e-01 1.41122067e-01 + 1.41051839e-01 1.40981716e-01 1.40911698e-01 1.40841783e-01 1.40771973e-01 + 1.40702266e-01 1.40632663e-01 1.40563163e-01 1.40493766e-01 1.40424471e-01 + 1.40355279e-01 1.40286189e-01 1.40217202e-01 1.40148315e-01 1.40079531e-01 + 1.40010847e-01 1.39942264e-01 1.39873782e-01 1.39805401e-01 1.39737119e-01 + 1.39668938e-01 1.39600856e-01 1.39532874e-01 1.39464991e-01 1.39397207e-01 + 1.39329522e-01 1.39261935e-01 1.39194446e-01 1.39127056e-01 1.39059763e-01 + 1.38992568e-01 1.38925470e-01 1.38858469e-01 1.38791565e-01 1.38724758e-01 + 1.38658047e-01 1.38591432e-01 1.38524913e-01 1.38458490e-01 1.38392162e-01 + 1.38325930e-01 1.38259792e-01 1.38193750e-01 1.38127801e-01 1.38061947e-01 + 1.37996188e-01 1.37930522e-01 1.37864950e-01 1.37799471e-01 1.37734085e-01 + 1.37668793e-01 1.37603593e-01 1.37538485e-01 1.37473471e-01 1.37408548e-01 + 1.37343717e-01 1.37278977e-01 1.37214330e-01 1.37149773e-01 1.37085308e-01 + 1.37020933e-01 1.36956649e-01 1.36892455e-01 1.36828351e-01 1.36764338e-01 + 1.36700414e-01 1.36636580e-01 1.36572835e-01 1.36509179e-01 1.36445612e-01 + 1.36382134e-01 1.36318745e-01 1.36255443e-01 1.36192230e-01 1.36129105e-01 + 1.36066067e-01 1.36003117e-01 1.35940254e-01 1.35877478e-01 1.35814789e-01 + 1.35752187e-01 1.35689672e-01 1.35627242e-01 1.35564899e-01 1.35502641e-01 + 1.35440470e-01 1.35378384e-01 1.35316383e-01 1.35254467e-01 1.35192636e-01 + 1.35130890e-01 1.35069228e-01 1.35007651e-01 1.34946158e-01 1.34884748e-01 + 1.34823423e-01 1.34762181e-01 1.34701022e-01 1.34639947e-01 1.34578955e-01 + 1.34518045e-01 1.34457218e-01 1.34396474e-01 1.34335812e-01 1.34275232e-01 + 1.34214733e-01 1.34154317e-01 1.34093982e-01 1.34033728e-01 1.33973556e-01 + 1.33913464e-01 1.33853453e-01 1.33793523e-01 1.33733673e-01 1.33673904e-01 + 1.33614214e-01 1.33554605e-01 1.33495075e-01 1.33435625e-01 1.33376254e-01 + 1.33316962e-01 1.33257749e-01 1.33198615e-01 1.33139560e-01 1.33080583e-01 + 1.33021685e-01 1.32962864e-01 1.32904122e-01 1.32845457e-01 1.32786870e-01 + 1.32728361e-01 1.32669928e-01 1.32611573e-01 1.32553295e-01 1.32495093e-01 + 1.32436968e-01 1.32378920e-01 1.32320948e-01 1.32263052e-01 1.32205232e-01 + 1.32147487e-01 1.32089818e-01 1.32032225e-01 1.31974707e-01 1.31917264e-01 + 1.31859896e-01 1.31802603e-01 1.31745384e-01 1.31688240e-01 1.31631170e-01 + 1.31574174e-01 1.31517252e-01 1.31460404e-01 1.31403630e-01 1.31346929e-01 + 1.31290301e-01 1.31233747e-01 1.31177266e-01 1.31120857e-01 1.31064522e-01 + 1.31008258e-01 1.30952068e-01 1.30895949e-01 1.30839903e-01 1.30783928e-01 + 1.30728025e-01 1.30672194e-01 1.30616435e-01 1.30560746e-01 1.30505129e-01 + 1.30449583e-01 1.30394108e-01 1.30338703e-01 1.30283369e-01 1.30228105e-01 + 1.30172912e-01 1.30117789e-01 1.30062736e-01 1.30007752e-01 1.29952839e-01 + 1.29897994e-01 1.29843219e-01 1.29788514e-01 1.29733877e-01 1.29679310e-01 + 1.29624811e-01 1.29570381e-01 1.29516019e-01 1.29461726e-01 1.29407501e-01 + 1.29353344e-01 1.29299255e-01 1.29245234e-01 1.29191280e-01 1.29137394e-01 + 1.29083575e-01 1.29029824e-01 1.28976140e-01 1.28922522e-01 1.28868972e-01 + 1.28815488e-01 1.28762070e-01 1.28708719e-01 1.28655435e-01 1.28602216e-01 + 1.28549063e-01 1.28495977e-01 1.28442955e-01 1.28390000e-01 1.28337110e-01 + 1.28284285e-01 1.28231526e-01 1.28178831e-01 1.28126202e-01 1.28073637e-01 + 1.28021137e-01 1.27968701e-01 1.27916330e-01 1.27864023e-01 1.27811780e-01 + 1.27759601e-01 1.27707486e-01 1.27655434e-01 1.27603447e-01 1.27551522e-01 + 1.27499661e-01 1.27447864e-01 1.27396129e-01 1.27344457e-01 1.27292848e-01 + 1.27241302e-01 1.27189818e-01 1.27138397e-01 1.27087038e-01 1.27035742e-01 + 1.26984507e-01 1.26933334e-01 1.26882223e-01 1.26831174e-01 1.26780187e-01 + 1.26729260e-01 1.26678396e-01 1.26627592e-01 1.26576849e-01 1.26526168e-01 + 1.26475547e-01 1.26424987e-01 1.26374487e-01 1.26324048e-01 1.26273670e-01 + 1.26223351e-01 1.26173093e-01 1.26122894e-01 1.26072756e-01 1.26022677e-01 + 1.25972658e-01 1.25922698e-01 1.25872798e-01 1.25822957e-01 1.25773176e-01 + 1.25723453e-01 1.25673789e-01 1.25624184e-01 1.25574638e-01 1.25525150e-01 + 1.25475721e-01 1.25426350e-01 1.25377037e-01 1.25327782e-01 1.25278586e-01 + 1.25229447e-01 1.25180366e-01 1.25131343e-01 1.25082377e-01 1.25033469e-01 + 1.24984618e-01 1.24935824e-01 1.24887088e-01 1.24838408e-01 1.24789785e-01 + 1.24741219e-01 1.24692710e-01 1.24644257e-01 1.24595861e-01 1.24547521e-01 + 1.24499237e-01 1.24451010e-01 1.24402838e-01 1.24354722e-01 1.24306662e-01 + 1.24258658e-01 1.24210709e-01 1.24162816e-01 1.24114978e-01 1.24067195e-01 + 1.24019468e-01 1.23971795e-01 1.23924178e-01 1.23876615e-01 1.23829107e-01 + 1.23781654e-01 1.23734255e-01 1.23686910e-01 1.23639620e-01 1.23592384e-01 + 1.23545202e-01 1.23498075e-01 1.23451001e-01 1.23403980e-01 1.23357014e-01 + 1.23310101e-01 1.23263242e-01 1.23216436e-01 1.23169683e-01 1.23122983e-01 + 1.23076337e-01 1.23029743e-01 1.22983202e-01 1.22936715e-01 1.22890279e-01 + 1.22843897e-01 1.22797567e-01 1.22751289e-01 1.22705063e-01 1.22658890e-01 + 1.22612769e-01 1.22566700e-01 1.22520682e-01 1.22474717e-01 1.22428803e-01 + 1.22382941e-01 1.22337130e-01 1.22291371e-01 1.22245663e-01 1.22200006e-01 + 1.22154400e-01 1.22108845e-01 1.22063342e-01 1.22017889e-01 1.21972487e-01 + 1.21927135e-01 1.21881834e-01 1.21836584e-01 1.21791383e-01 1.21746234e-01 + 1.21701134e-01 1.21656084e-01 1.21611085e-01 1.21566135e-01 1.21521235e-01 + 1.21476385e-01 1.21431584e-01 1.21386833e-01 1.21342131e-01 1.21297479e-01 + 1.21252876e-01 1.21208322e-01 1.21163817e-01 1.21119362e-01 1.21074955e-01 + 1.21030597e-01 1.20986287e-01 1.20942026e-01 1.20897814e-01 1.20853651e-01 + 1.20809535e-01 1.20765468e-01 1.20721449e-01 1.20677478e-01 1.20633555e-01 + 1.20589681e-01 1.20545854e-01 1.20502074e-01 1.20458343e-01 1.20414659e-01 + 1.20371022e-01 1.20327433e-01 1.20283891e-01 1.20240396e-01 1.20196949e-01 + 1.20153549e-01 1.20110195e-01 1.20066889e-01 1.20023629e-01 1.19980416e-01 + 1.19937250e-01 1.19894130e-01 1.19851056e-01 1.19808030e-01 1.19765049e-01 + 1.19722115e-01 1.19679226e-01 1.19636384e-01 1.19593588e-01 1.19550838e-01 + 1.19508133e-01 1.19465474e-01 1.19422861e-01 1.19380294e-01 1.19337772e-01 + 1.19295295e-01 1.19252863e-01 1.19210477e-01 1.19168136e-01 1.19125841e-01 + 1.19083590e-01 1.19041384e-01 1.18999223e-01 1.18957106e-01 1.18915035e-01 + 1.18873008e-01 1.18831025e-01 1.18789087e-01 1.18747194e-01 1.18705344e-01 + 1.18663539e-01 1.18621778e-01 1.18580061e-01 1.18538388e-01 1.18496759e-01 + 1.18455174e-01 1.18413632e-01 1.18372134e-01 1.18330680e-01 1.18289269e-01 + 1.18247902e-01 1.18206578e-01 1.18165298e-01 1.18124060e-01 1.18082866e-01 + 1.18041715e-01 1.18000607e-01 1.17959541e-01 1.17918519e-01 1.17877539e-01 + 1.17836602e-01 1.17795708e-01 1.17754856e-01 1.17714047e-01 1.17673280e-01 + 1.17632556e-01 1.17591873e-01 1.17551233e-01 1.17510635e-01 1.17470079e-01 + 1.17429565e-01 1.17389093e-01 1.17348662e-01 1.17308274e-01 1.17267927e-01 + 1.17227622e-01 1.17187358e-01 1.17147135e-01 1.17106955e-01 1.17066815e-01 + 1.17026717e-01 1.16986659e-01 1.16946643e-01 1.16906668e-01 1.16866734e-01 + 1.16826841e-01 1.16786988e-01 1.16747177e-01 1.16707406e-01 1.16667676e-01 + 1.16627986e-01 1.16588337e-01 1.16548728e-01 1.16509159e-01 1.16469631e-01 + 1.16430143e-01 1.16390695e-01 1.16351287e-01 1.16311919e-01 1.16272591e-01 + 1.16233303e-01 1.16194055e-01 1.16154846e-01 1.16115678e-01 1.16076548e-01 + 1.16037459e-01 1.15998408e-01 1.15959397e-01 1.15920426e-01 1.15881494e-01 + 1.15842601e-01 1.15803747e-01 1.15764932e-01 1.15726156e-01 1.15687419e-01 + 1.15648721e-01 1.15610062e-01 1.15571441e-01 1.15532859e-01 1.15494316e-01 + 1.15455812e-01 1.15417345e-01 1.15378918e-01 1.15340528e-01 1.15302177e-01 + 1.15263864e-01 1.15225590e-01 1.15187353e-01 1.15149155e-01 1.15110994e-01 + 1.15072871e-01 1.15034786e-01 1.14996739e-01 1.14958730e-01 1.14920759e-01 + 1.14882824e-01 1.14844928e-01 1.14807069e-01 1.14769247e-01 1.14731463e-01 + 1.14693716e-01 1.14656006e-01 1.14618334e-01 1.14580699e-01 1.14543100e-01 + 1.14505539e-01 1.14468014e-01 1.14430527e-01 1.14393076e-01 1.14355662e-01 + 1.14318284e-01 1.14280944e-01 1.14243640e-01 1.14206372e-01 1.14169141e-01 + 1.14131946e-01 1.14094787e-01 1.14057665e-01 1.14020579e-01 1.13983529e-01 + 1.13946515e-01 1.13909538e-01 1.13872596e-01 1.13835690e-01 1.13798820e-01 + 1.13761986e-01 1.13725188e-01 1.13688425e-01 1.13651698e-01 1.13615006e-01 + 1.13578350e-01 1.13541730e-01 1.13505144e-01 1.13468595e-01 1.13432080e-01 + 1.13395601e-01 1.13359156e-01 1.13322747e-01 1.13286373e-01 1.13250035e-01 + 1.13213730e-01 1.13177461e-01 1.13141227e-01 1.13105028e-01 1.13068863e-01 + 1.13032733e-01 1.12996637e-01 1.12960576e-01 1.12924550e-01 1.12888558e-01 + 1.12852600e-01 1.12816677e-01 1.12780788e-01 1.12744933e-01 1.12709112e-01 + 1.12673326e-01 1.12637574e-01 1.12601855e-01 1.12566171e-01 1.12530520e-01 + 1.12494904e-01 1.12459321e-01 1.12423772e-01 1.12388256e-01 1.12352774e-01 + 1.12317326e-01 1.12281911e-01 1.12246530e-01 1.12211182e-01 1.12175868e-01 + 1.12140587e-01 1.12105339e-01 1.12070125e-01 1.12034943e-01 1.11999795e-01 + 1.11964679e-01 1.11929597e-01 1.11894548e-01 1.11859532e-01 1.11824548e-01 + 1.11789597e-01 1.11754679e-01 1.11719794e-01 1.11684941e-01 1.11650121e-01 + 1.11615334e-01 1.11580579e-01 1.11545856e-01 1.11511166e-01 1.11476508e-01 + 1.11441883e-01 1.11407289e-01 1.11372728e-01 1.11338199e-01 1.11303703e-01 + 1.11269238e-01 1.11234805e-01 1.11200404e-01 1.11166035e-01 1.11131698e-01 + 1.11097393e-01 1.11063119e-01 1.11028877e-01 1.10994667e-01 1.10960489e-01 + 1.10926342e-01 1.10892226e-01 1.10858142e-01 1.10824089e-01 1.10790068e-01 + 1.10756078e-01 1.10722119e-01 1.10688192e-01 1.10654295e-01 1.10620430e-01 + 1.10586596e-01 1.10552793e-01 1.10519021e-01 1.10485279e-01 1.10451569e-01 + 1.10417890e-01 1.10384241e-01 1.10350623e-01 1.10317036e-01 1.10283479e-01 + 1.10249953e-01 1.10216458e-01 1.10182993e-01 1.10149558e-01 1.10116154e-01 + 1.10082780e-01 1.10049437e-01 1.10016124e-01 1.09982841e-01 1.09949588e-01 + 1.09916366e-01 1.09883174e-01 1.09850011e-01 1.09816879e-01 1.09783776e-01 + 1.09750704e-01 1.09717661e-01 1.09684648e-01 1.09651665e-01 1.09618712e-01 + 1.09585789e-01 1.09552895e-01 1.09520030e-01 1.09487196e-01 1.09454390e-01 + 1.09421615e-01 1.09388868e-01 1.09356151e-01 1.09323464e-01 1.09290805e-01 + 1.09258176e-01 1.09225576e-01 1.09193006e-01 1.09160464e-01 1.09127951e-01 + 1.09095468e-01 1.09063013e-01 1.09030588e-01 1.08998191e-01 1.08965824e-01 + 1.08933485e-01 1.08901174e-01 1.08868893e-01 1.08836640e-01 1.08804416e-01 + 1.08772220e-01 1.08740054e-01 1.08707915e-01 1.08675805e-01 1.08643724e-01 + 1.08611671e-01 1.08579646e-01 1.08547649e-01 1.08515681e-01 1.08483741e-01 + 1.08451829e-01 1.08419946e-01 1.08388090e-01 1.08356263e-01 1.08324463e-01 + 1.08292692e-01 1.08260948e-01 1.08229233e-01 1.08197545e-01 1.08165885e-01 + 1.08134253e-01 1.08102648e-01 1.08071072e-01 1.08039523e-01 1.08008001e-01 + 1.07976507e-01 1.07945041e-01 1.07913602e-01 1.07882191e-01 1.07850807e-01 + 1.07819450e-01 1.07788121e-01 1.07756819e-01 1.07725544e-01 1.07694296e-01 + 1.07663076e-01 1.07631883e-01 1.07600717e-01 1.07569578e-01 1.07538466e-01 + 1.07507381e-01 1.07476322e-01 1.07445291e-01 1.07414287e-01 1.07383309e-01 + 1.07352359e-01 1.07321435e-01 1.07290537e-01 1.07259667e-01 1.07228823e-01 + 1.07198005e-01 1.07167214e-01 1.07136450e-01 1.07105712e-01 1.07075001e-01 + 1.07044316e-01 1.07013657e-01 1.06983025e-01 1.06952419e-01 1.06921839e-01 + 1.06891286e-01 1.06860758e-01 1.06830257e-01 1.06799782e-01 1.06769333e-01 + 1.06738910e-01 1.06708513e-01 1.06678142e-01 1.06647796e-01 1.06617477e-01 + 1.06587184e-01 1.06556916e-01 1.06526674e-01 1.06496458e-01 1.06466268e-01 + 1.06436103e-01 1.06405964e-01 1.06375850e-01 1.06345762e-01 1.06315700e-01 + 1.06285663e-01 1.06255651e-01 1.06225665e-01 1.06195704e-01 1.06165769e-01 + 1.06135859e-01 1.06105974e-01 1.06076114e-01 1.06046280e-01 1.06016470e-01 + 1.05986686e-01 1.05956927e-01 1.05927193e-01 1.05897484e-01 1.05867800e-01 + 1.05838141e-01 1.05808507e-01 1.05778897e-01 1.05749313e-01 1.05719753e-01 + 1.05690218e-01 1.05660708e-01 1.05631223e-01 1.05601762e-01 1.05572326e-01 + 1.05542914e-01 1.05513528e-01 1.05484165e-01 1.05454827e-01 1.05425514e-01 + 1.05396225e-01 1.05366960e-01 1.05337720e-01 1.05308504e-01 1.05279312e-01 + 1.05250145e-01 1.05221002e-01 1.05191883e-01 1.05162788e-01 1.05133717e-01 + 1.05104671e-01 1.05075648e-01 1.05046650e-01 1.05017675e-01 1.04988725e-01 + 1.04959798e-01 1.04930896e-01 1.04902017e-01 1.04873162e-01 1.04844331e-01 + 1.04815523e-01 1.04786740e-01 1.04757980e-01 1.04729243e-01 1.04700531e-01 + 1.04671841e-01 1.04643176e-01 1.04614534e-01 1.04585916e-01 1.04557321e-01 + 1.04528749e-01 1.04500201e-01 1.04471676e-01 1.04443175e-01 1.04414697e-01 + 1.04386242e-01 1.04357810e-01 1.04329402e-01 1.04301017e-01 1.04272655e-01 + 1.04244316e-01 1.04216000e-01 1.04187707e-01 1.04159437e-01 1.04131191e-01 + 1.04102967e-01 1.04074766e-01 1.04046588e-01 1.04018433e-01 1.03990301e-01 + 1.03962192e-01 1.03934105e-01 1.03906041e-01 1.03878000e-01 1.03849982e-01 + 1.03821986e-01 1.03794013e-01 1.03766062e-01 1.03738134e-01 1.03710229e-01 + 1.03682346e-01 1.03654486e-01 1.03626648e-01 1.03598832e-01 1.03571039e-01 + 1.03543268e-01 1.03515520e-01 1.03487793e-01 1.03460089e-01 1.03432408e-01 + 1.03404748e-01 1.03377111e-01 1.03349496e-01 1.03321903e-01 1.03294332e-01 + 1.03266783e-01 1.03239256e-01 1.03211751e-01 1.03184268e-01 1.03156807e-01 + 1.03129368e-01 1.03101951e-01 1.03074556e-01 1.03047182e-01 1.03019831e-01 + 1.02992501e-01 1.02965192e-01 1.02937906e-01 1.02910641e-01 1.02883398e-01 + 1.02856177e-01 1.02828977e-01 1.02801798e-01 1.02774642e-01 1.02747506e-01 + 1.02720392e-01 1.02693300e-01 1.02666229e-01 1.02639180e-01 1.02612151e-01 + 1.02585145e-01 1.02558159e-01 1.02531195e-01 1.02504252e-01 1.02477330e-01 + 1.02450430e-01 1.02423550e-01 1.02396692e-01 1.02369855e-01 1.02343039e-01 + 1.02316244e-01 1.02289470e-01 1.02262717e-01 1.02235985e-01 1.02209274e-01 + 1.02182584e-01 1.02155915e-01 1.02129267e-01 1.02102639e-01 1.02076033e-01 + 1.02049447e-01 1.02022882e-01 1.01996338e-01 1.01969814e-01 1.01943311e-01 + 1.01916829e-01 1.01890367e-01 1.01863926e-01 1.01837505e-01 1.01811106e-01 + 1.01784726e-01 1.01758367e-01 1.01732029e-01 1.01705711e-01 1.01679413e-01 + 1.01653136e-01 1.01626879e-01 1.01600643e-01 1.01574426e-01 1.01548230e-01 + 1.01522055e-01 1.01495899e-01 1.01469764e-01 1.01443649e-01 1.01417554e-01 + 1.01391479e-01 1.01365425e-01 1.01339390e-01 1.01313376e-01 1.01287381e-01 + 1.01261406e-01 1.01235452e-01 1.01209517e-01 1.01183603e-01 1.01157708e-01 + 1.01131833e-01 1.01105978e-01 1.01080143e-01 1.01054327e-01 1.01028532e-01 + 1.01002756e-01 1.00976999e-01 1.00951263e-01 1.00925546e-01 1.00899849e-01 + 1.00874171e-01 1.00848513e-01 1.00822875e-01 1.00797256e-01 1.00771656e-01 + 1.00746077e-01 1.00720516e-01 1.00694975e-01 1.00669454e-01 1.00643952e-01 + 1.00618469e-01 1.00593005e-01 1.00567561e-01 1.00542136e-01 1.00516731e-01 + 1.00491345e-01 1.00465978e-01 1.00440630e-01 1.00415301e-01 1.00389992e-01 + 1.00364701e-01 1.00339430e-01 1.00314178e-01 1.00288944e-01 1.00263730e-01 + 1.00238535e-01 1.00213359e-01 1.00188202e-01 1.00163064e-01 1.00137944e-01 + 1.00112844e-01 1.00087762e-01 1.00062700e-01 1.00037656e-01 1.00012631e-01 + 9.99876242e-02 9.99626366e-02 9.99376677e-02 9.99127176e-02 9.98877861e-02 + 9.98628732e-02 9.98379790e-02 9.98131034e-02 9.97882464e-02 9.97634079e-02 + 9.97385880e-02 9.97137866e-02 9.96890037e-02 9.96642393e-02 9.96394933e-02 + 9.96147657e-02 9.95900565e-02 9.95653657e-02 9.95406933e-02 9.95160392e-02 + 9.94914034e-02 9.94667859e-02 9.94421867e-02 9.94176057e-02 9.93930429e-02 + 9.93684983e-02 9.93439719e-02 9.93194636e-02 9.92949735e-02 9.92705015e-02 + 9.92460476e-02 9.92216117e-02 9.91971939e-02 9.91727940e-02 9.91484122e-02 + 9.91240484e-02 9.90997025e-02 9.90753745e-02 9.90510645e-02 9.90267723e-02 + 9.90024980e-02 9.89782415e-02 9.89540029e-02 9.89297821e-02 9.89055790e-02 + 9.88813937e-02 9.88572261e-02 9.88330763e-02 9.88089441e-02 9.87848296e-02 + 9.87607327e-02 9.87366535e-02 9.87125919e-02 9.86885478e-02 9.86645213e-02 + 9.86405124e-02 9.86165209e-02 9.85925470e-02 9.85685906e-02 9.85446516e-02 + 9.85207300e-02 9.84968258e-02 9.84729391e-02 9.84490697e-02 9.84252176e-02 + 9.84013829e-02 9.83775655e-02 9.83537654e-02 9.83299825e-02 9.83062169e-02 + 9.82824685e-02 9.82587374e-02 9.82350233e-02 9.82113265e-02 9.81876468e-02 + 9.81639842e-02 9.81403387e-02 9.81167103e-02 9.80930990e-02 9.80695047e-02 + 9.80459274e-02 9.80223671e-02 9.79988238e-02 9.79752974e-02 9.79517880e-02 + 9.79282955e-02 9.79048199e-02 9.78813611e-02 9.78579192e-02 9.78344942e-02 + 9.78110859e-02 9.77876945e-02 9.77643198e-02 9.77409619e-02 9.77176207e-02 + 9.76942963e-02 9.76709885e-02 9.76476974e-02 9.76244230e-02 9.76011651e-02 + 9.75779239e-02 9.75546993e-02 9.75314913e-02 9.75082999e-02 9.74851249e-02 + 9.74619665e-02 9.74388246e-02 9.74156991e-02 9.73925901e-02 9.73694976e-02 + 9.73464215e-02 9.73233617e-02 9.73003184e-02 9.72772914e-02 9.72542807e-02 + 9.72312864e-02 9.72083084e-02 9.71853467e-02 9.71624012e-02 9.71394719e-02 + 9.71165589e-02 9.70936621e-02 9.70707815e-02 9.70479171e-02 9.70250688e-02 + 9.70022366e-02 9.69794205e-02 9.69566206e-02 9.69338367e-02 9.69110688e-02 + 9.68883170e-02 9.68655813e-02 9.68428615e-02 9.68201577e-02 9.67974698e-02 + 9.67747979e-02 9.67521419e-02 9.67295019e-02 9.67068777e-02 9.66842693e-02 + 9.66616769e-02 9.66391002e-02 9.66165394e-02 9.65939943e-02 9.65714651e-02 + 9.65489516e-02 9.65264538e-02 9.65039718e-02 9.64815054e-02 9.64590547e-02 + 9.64366197e-02 9.64142004e-02 9.63917967e-02 9.63694086e-02 9.63470360e-02 + 9.63246791e-02 9.63023377e-02 9.62800118e-02 9.62577015e-02 9.62354067e-02 + 9.62131273e-02 9.61908635e-02 9.61686150e-02 9.61463820e-02 9.61241644e-02 + 9.61019623e-02 9.60797754e-02 9.60576040e-02 9.60354479e-02 9.60133071e-02 + 9.59911816e-02 9.59690714e-02 9.59469765e-02 9.59248968e-02 9.59028324e-02 + 9.58807832e-02 9.58587492e-02 9.58367303e-02 9.58147267e-02 9.57927382e-02 + 9.57707648e-02 9.57488065e-02 9.57268633e-02 9.57049352e-02 9.56830222e-02 + 9.56611242e-02 9.56392413e-02 9.56173733e-02 9.55955204e-02 9.55736824e-02 + 9.55518594e-02 9.55300513e-02 9.55082582e-02 9.54864799e-02 9.54647166e-02 + 9.54429681e-02 9.54212345e-02 9.53995157e-02 9.53778117e-02 9.53561226e-02 + 9.53344482e-02 9.53127886e-02 9.52911438e-02 9.52695137e-02 9.52478984e-02 + 9.52262977e-02 9.52047117e-02 9.51831404e-02 9.51615838e-02 9.51400418e-02 + 9.51185144e-02 9.50970016e-02 9.50755034e-02 9.50540198e-02 9.50325508e-02 + 9.50110963e-02 9.49896563e-02 9.49682308e-02 9.49468198e-02 9.49254233e-02 + 9.49040412e-02 9.48826736e-02 9.48613204e-02 9.48399817e-02 9.48186573e-02 + 9.47973473e-02 9.47760516e-02 9.47547703e-02 9.47335034e-02 9.47122507e-02 + 9.46910123e-02 9.46697883e-02 9.46485784e-02 9.46273829e-02 9.46062015e-02 + 9.45850344e-02 9.45638815e-02 9.45427428e-02 9.45216182e-02 9.45005078e-02 + 9.44794116e-02 9.44583294e-02 9.44372614e-02 9.44162074e-02 9.43951676e-02 + 9.43741418e-02 9.43531300e-02 9.43321323e-02 9.43111485e-02 9.42901788e-02 + 9.42692231e-02 9.42482813e-02 9.42273534e-02 9.42064395e-02 9.41855396e-02 + 9.41646535e-02 9.41437813e-02 9.41229230e-02 9.41020785e-02 9.40812479e-02 + 9.40604311e-02 9.40396282e-02 9.40188390e-02 9.39980636e-02 9.39773020e-02 + 9.39565541e-02 9.39358200e-02 9.39150995e-02 9.38943928e-02 9.38736998e-02 + 9.38530204e-02 9.38323548e-02 9.38117027e-02 9.37910643e-02 9.37704395e-02 + 9.37498283e-02 9.37292307e-02 9.37086466e-02 9.36880762e-02 9.36675192e-02 + 9.36469758e-02 9.36264459e-02 9.36059295e-02 9.35854265e-02 9.35649371e-02 + 9.35444611e-02 9.35239985e-02 9.35035493e-02 9.34831136e-02 9.34626912e-02 + 9.34422823e-02 9.34218866e-02 9.34015044e-02 9.33811355e-02 9.33607798e-02 + 9.33404375e-02 9.33201085e-02 9.32997928e-02 9.32794903e-02 9.32592011e-02 + 9.32389251e-02 9.32186624e-02 9.31984128e-02 9.31781764e-02 9.31579532e-02 + 9.31377432e-02 9.31175463e-02 9.30973626e-02 9.30771919e-02 9.30570344e-02 + 9.30368899e-02 9.30167586e-02 9.29966403e-02 9.29765350e-02 9.29564428e-02 + 9.29363636e-02 9.29162974e-02 9.28962442e-02 9.28762040e-02 9.28561768e-02 + 9.28361624e-02 9.28161611e-02 9.27961726e-02 9.27761971e-02 9.27562344e-02 + 9.27362847e-02 9.27163478e-02 9.26964237e-02 9.26765125e-02 9.26566141e-02 + 9.26367286e-02 9.26168558e-02 9.25969958e-02 9.25771486e-02 9.25573141e-02 + 9.25374924e-02 9.25176834e-02 9.24978871e-02 9.24781036e-02 9.24583327e-02 + 9.24385745e-02 9.24188289e-02 9.23990960e-02 9.23793758e-02 9.23596681e-02 + 9.23399731e-02 9.23202907e-02 9.23006208e-02 9.22809635e-02 9.22613188e-02 + 9.22416866e-02 9.22220669e-02 9.22024597e-02 9.21828651e-02 9.21632829e-02 + 9.21437132e-02 9.21241560e-02 9.21046112e-02 9.20850788e-02 9.20655589e-02 + 9.20460514e-02 9.20265563e-02 9.20070735e-02 9.19876031e-02 9.19681451e-02 + 9.19486994e-02 9.19292661e-02 9.19098451e-02 9.18904363e-02 9.18710399e-02 + 9.18516557e-02 9.18322838e-02 9.18129242e-02 9.17935768e-02 9.17742416e-02 + 9.17549186e-02 9.17356079e-02 9.17163093e-02 9.16970229e-02 9.16777486e-02 + 9.16584865e-02 9.16392366e-02 9.16199987e-02 9.16007730e-02 9.15815594e-02 + 9.15623578e-02 9.15431684e-02 9.15239910e-02 9.15048256e-02 9.14856723e-02 + 9.14665310e-02 9.14474017e-02 9.14282844e-02 9.14091791e-02 9.13900857e-02 + 9.13710043e-02 9.13519349e-02 9.13328774e-02 9.13138318e-02 9.12947982e-02 + 9.12757764e-02 9.12567665e-02 9.12377685e-02 9.12187823e-02 9.11998080e-02 + 9.11808456e-02 9.11618949e-02 9.11429561e-02 9.11240290e-02 9.11051138e-02 + 9.10862103e-02 9.10673186e-02 9.10484386e-02 9.10295704e-02 9.10107139e-02 + 9.09918691e-02 9.09730360e-02 9.09542146e-02 9.09354049e-02 9.09166069e-02 + 9.08978205e-02 9.08790457e-02 9.08602826e-02 9.08415311e-02 9.08227911e-02 + 9.08040628e-02 9.07853461e-02 9.07666409e-02 9.07479473e-02 9.07292652e-02 + 9.07105947e-02 9.06919357e-02 9.06732882e-02 9.06546522e-02 9.06360277e-02 + 9.06174146e-02 9.05988131e-02 9.05802229e-02 9.05616442e-02 9.05430770e-02 + 9.05245211e-02 9.05059767e-02 9.04874436e-02 9.04689219e-02 9.04504116e-02 + 9.04319127e-02 9.04134251e-02 9.03949488e-02 9.03764839e-02 9.03580303e-02 + 9.03395879e-02 9.03211569e-02 9.03027371e-02 9.02843286e-02 9.02659313e-02 + 9.02475453e-02 9.02291706e-02 9.02108070e-02 9.01924546e-02 9.01741135e-02 + 9.01557835e-02 9.01374647e-02 9.01191571e-02 9.01008606e-02 9.00825752e-02 + 9.00643010e-02 9.00460379e-02 9.00277859e-02 9.00095450e-02 8.99913152e-02 + 8.99730965e-02 8.99548888e-02 8.99366921e-02 8.99185065e-02 8.99003320e-02 + 8.98821684e-02 8.98640159e-02 8.98458743e-02 8.98277437e-02 8.98096241e-02 + 8.97915155e-02 8.97734178e-02 8.97553311e-02 8.97372552e-02 8.97191903e-02 + 8.97011363e-02 8.96830932e-02 8.96650610e-02 8.96470396e-02 8.96290291e-02 + 8.96110295e-02 8.95930407e-02 8.95750627e-02 8.95570956e-02 8.95391392e-02 + 8.95211937e-02 8.95032589e-02 8.94853349e-02 8.94674217e-02 8.94495192e-02 + 8.94316275e-02 8.94137465e-02 8.93958762e-02 8.93780167e-02 8.93601678e-02 + 8.93423296e-02 8.93245021e-02 8.93066853e-02 8.92888791e-02 8.92710836e-02 + 8.92532987e-02 8.92355244e-02 8.92177608e-02 8.92000077e-02 8.91822653e-02 + 8.91645334e-02 8.91468121e-02 8.91291014e-02 8.91114012e-02 8.90937115e-02 + 8.90760324e-02 8.90583638e-02 8.90407057e-02 8.90230582e-02 8.90054211e-02 + 8.89877945e-02 8.89701783e-02 8.89525726e-02 8.89349774e-02 8.89173926e-02 + 8.88998182e-02 8.88822542e-02 8.88647007e-02 8.88471575e-02 8.88296247e-02 + 8.88121023e-02 8.87945903e-02 8.87770886e-02 8.87595973e-02 8.87421163e-02 + 8.87246456e-02 8.87071853e-02 8.86897352e-02 8.86722954e-02 8.86548660e-02 + 8.86374468e-02 8.86200378e-02 8.86026391e-02 8.85852507e-02 8.85678725e-02 + 8.85505045e-02 8.85331467e-02 8.85157991e-02 8.84984618e-02 8.84811346e-02 + 8.84638176e-02 8.84465107e-02 8.84292140e-02 8.84119274e-02 8.83946510e-02 + 8.83773847e-02 8.83601285e-02 8.83428825e-02 8.83256465e-02 8.83084206e-02 + 8.82912047e-02 8.82739990e-02 8.82568033e-02 8.82396176e-02 8.82224420e-02 + 8.82052764e-02 8.81881208e-02 8.81709752e-02 8.81538396e-02 8.81367140e-02 + 8.81195984e-02 8.81024927e-02 8.80853970e-02 8.80683113e-02 8.80512355e-02 + 8.80341696e-02 8.80171137e-02 8.80000676e-02 8.79830314e-02 8.79660052e-02 + 8.79489888e-02 8.79319823e-02 8.79149857e-02 8.78979989e-02 8.78810219e-02 + 8.78640548e-02 8.78470975e-02 8.78301500e-02 8.78132123e-02 8.77962845e-02 + 8.77793664e-02 8.77624580e-02 8.77455595e-02 8.77286707e-02 8.77117916e-02 + 8.76949223e-02 8.76780628e-02 8.76612129e-02 8.76443728e-02 8.76275423e-02 + 8.76107216e-02 8.75939105e-02 8.75771091e-02 8.75603174e-02 8.75435353e-02 + 8.75267629e-02 8.75100001e-02 8.74932469e-02 8.74765033e-02 8.74597694e-02 + 8.74430451e-02 8.74263303e-02 8.74096251e-02 8.73929296e-02 8.73762435e-02 + 8.73595670e-02 8.73429001e-02 8.73262427e-02 8.73095948e-02 8.72929565e-02 + 8.72763276e-02 8.72597083e-02 8.72430984e-02 8.72264981e-02 8.72099072e-02 + 8.71933257e-02 8.71767537e-02 8.71601912e-02 8.71436381e-02 8.71270944e-02 + 8.71105602e-02 8.70940353e-02 8.70775199e-02 8.70610138e-02 8.70445172e-02 + 8.70280299e-02 8.70115519e-02 8.69950834e-02 8.69786241e-02 8.69621742e-02 + 8.69457337e-02 8.69293024e-02 8.69128805e-02 8.68964679e-02 8.68800646e-02 + 8.68636705e-02 8.68472857e-02 8.68309103e-02 8.68145440e-02 8.67981870e-02 + 8.67818393e-02 8.67655008e-02 8.67491715e-02 8.67328514e-02 8.67165406e-02 + 8.67002389e-02 8.66839464e-02 8.66676631e-02 8.66513890e-02 8.66351240e-02 + 8.66188682e-02 8.66026216e-02 8.65863841e-02 8.65701557e-02 8.65539364e-02 + 8.65377263e-02 8.65215252e-02 8.65053333e-02 8.64891504e-02 8.64729766e-02 + 8.64568119e-02 8.64406563e-02 8.64245097e-02 8.64083721e-02 8.63922436e-02 + 8.63761241e-02 8.63600136e-02 8.63439122e-02 8.63278197e-02 8.63117363e-02 + 8.62956618e-02 8.62795963e-02 8.62635398e-02 8.62474922e-02 8.62314536e-02 + 8.62154239e-02 8.61994032e-02 8.61833914e-02 8.61673885e-02 8.61513945e-02 + 8.61354094e-02 8.61194332e-02 8.61034659e-02 8.60875075e-02 8.60715580e-02 + 8.60556173e-02 8.60396855e-02 8.60237625e-02 8.60078483e-02 8.59919430e-02 + 8.59760465e-02 8.59601588e-02 8.59442800e-02 8.59284099e-02 8.59125486e-02 + 8.58966961e-02 8.58808523e-02 8.58650173e-02 8.58491911e-02 8.58333736e-02 + 8.58175649e-02 8.58017649e-02 8.57859736e-02 8.57701911e-02 8.57544172e-02 + 8.57386520e-02 8.57228956e-02 8.57071478e-02 8.56914087e-02 8.56756782e-02 + 8.56599565e-02 8.56442433e-02 8.56285389e-02 8.56128430e-02 8.55971558e-02 + 8.55814772e-02 8.55658072e-02 8.55501458e-02 8.55344930e-02 8.55188488e-02 + 8.55032132e-02 8.54875862e-02 8.54719677e-02 8.54563578e-02 8.54407564e-02 + 8.54251636e-02 8.54095793e-02 8.53940035e-02 8.53784363e-02 8.53628775e-02 + 8.53473273e-02 8.53317855e-02 8.53162523e-02 8.53007275e-02 8.52852112e-02 + 8.52697034e-02 8.52542040e-02 8.52387130e-02 8.52232305e-02 8.52077565e-02 + 8.51922909e-02 8.51768336e-02 8.51613848e-02 8.51459444e-02 8.51305124e-02 + 8.51150888e-02 8.50996736e-02 8.50842667e-02 8.50688682e-02 8.50534780e-02 + 8.50380963e-02 8.50227228e-02 8.50073577e-02 8.49920009e-02 8.49766524e-02 + 8.49613123e-02 8.49459804e-02 8.49306569e-02 8.49153416e-02 8.49000346e-02 + 8.48847359e-02 8.48694455e-02 8.48541633e-02 8.48388893e-02 8.48236237e-02 + 8.48083662e-02 8.47931170e-02 8.47778760e-02 8.47626432e-02 8.47474187e-02 + 8.47322023e-02 8.47169941e-02 8.47017941e-02 8.46866023e-02 8.46714187e-02 + 8.46562432e-02 8.46410759e-02 8.46259167e-02 8.46107657e-02 8.45956228e-02 + 8.45804880e-02 8.45653614e-02 8.45502428e-02 8.45351324e-02 8.45200301e-02 + 8.45049358e-02 8.44898497e-02 8.44747716e-02 8.44597016e-02 8.44446397e-02 + 8.44295858e-02 8.44145399e-02 8.43995021e-02 8.43844724e-02 8.43694506e-02 + 8.43544369e-02 8.43394312e-02 8.43244335e-02 8.43094438e-02 8.42944621e-02 + 8.42794883e-02 8.42645226e-02 8.42495648e-02 8.42346150e-02 8.42196731e-02 + 8.42047392e-02 8.41898132e-02 8.41748952e-02 8.41599851e-02 8.41450829e-02 + 8.41301886e-02 8.41153022e-02 8.41004238e-02 8.40855532e-02 8.40706905e-02 + 8.40558357e-02 8.40409887e-02 8.40261496e-02 8.40113184e-02 8.39964950e-02 + 8.39816795e-02 8.39668718e-02 8.39520719e-02 8.39372799e-02 8.39224957e-02 + 8.39077193e-02 8.38929507e-02 8.38781898e-02 8.38634368e-02 8.38486916e-02 + 8.38339541e-02 8.38192244e-02 8.38045025e-02 8.37897883e-02 8.37750818e-02 + 8.37603831e-02 8.37456922e-02 8.37310089e-02 8.37163334e-02 8.37016656e-02 + 8.36870055e-02 8.36723531e-02 8.36577084e-02 8.36430714e-02 8.36284421e-02 + 8.36138204e-02 8.35992064e-02 8.35846001e-02 8.35700014e-02 8.35554104e-02 + 8.35408270e-02 8.35262512e-02 8.35116831e-02 8.34971226e-02 8.34825697e-02 + 8.34680244e-02 8.34534867e-02 8.34389566e-02 8.34244341e-02 8.34099191e-02 + 8.33954118e-02 8.33809120e-02 8.33664197e-02 8.33519351e-02 8.33374579e-02 + 8.33229883e-02 8.33085263e-02 8.32940718e-02 8.32796248e-02 8.32651853e-02 + 8.32507533e-02 8.32363288e-02 8.32219118e-02 8.32075023e-02 8.31931003e-02 + 8.31787058e-02 8.31643187e-02 8.31499391e-02 8.31355669e-02 8.31212022e-02 + 8.31068450e-02 8.30924951e-02 8.30781528e-02 8.30638178e-02 8.30494902e-02 + 8.30351701e-02 8.30208574e-02 8.30065520e-02 8.29922541e-02 8.29779635e-02 + 8.29636804e-02 8.29494046e-02 8.29351361e-02 8.29208751e-02 8.29066213e-02 + 8.28923750e-02 8.28781359e-02 8.28639042e-02 8.28496799e-02 8.28354628e-02 + 8.28212531e-02 8.28070507e-02 8.27928556e-02 8.27786678e-02 8.27644872e-02 + 8.27503140e-02 8.27361480e-02 8.27219893e-02 8.27078379e-02 8.26936938e-02 + 8.26795569e-02 8.26654272e-02 8.26513048e-02 8.26371896e-02 8.26230816e-02 + 8.26089809e-02 8.25948874e-02 8.25808011e-02 8.25667220e-02 8.25526501e-02 + 8.25385854e-02 8.25245279e-02 8.25104775e-02 8.24964344e-02 8.24823984e-02 + 8.24683695e-02 8.24543479e-02 8.24403333e-02 8.24263259e-02 8.24123257e-02 + 8.23983326e-02 8.23843466e-02 8.23703677e-02 8.23563960e-02 8.23424313e-02 + 8.23284737e-02 8.23145233e-02 8.23005799e-02 8.22866436e-02 8.22727144e-02 + 8.22587923e-02 8.22448772e-02 8.22309692e-02 8.22170683e-02 8.22031744e-02 + 8.21892875e-02 8.21754077e-02 8.21615349e-02 8.21476691e-02 8.21338103e-02 + 8.21199586e-02 8.21061138e-02 8.20922761e-02 8.20784453e-02 8.20646216e-02 + 8.20508048e-02 8.20369950e-02 8.20231922e-02 8.20093963e-02 8.19956074e-02 + 8.19818254e-02 8.19680504e-02 8.19542823e-02 8.19405212e-02 8.19267670e-02 + 8.19130197e-02 8.18992794e-02 8.18855459e-02 8.18718194e-02 8.18580997e-02 + 8.18443870e-02 8.18306811e-02 8.18169822e-02 8.18032901e-02 8.17896048e-02 + 8.17759265e-02 8.17622550e-02 8.17485903e-02 8.17349326e-02 8.17212816e-02 + 8.17076375e-02 8.16940002e-02 8.16803697e-02 8.16667461e-02 8.16531293e-02 + 8.16395193e-02 8.16259161e-02 8.16123197e-02 8.15987300e-02 8.15851472e-02 + 8.15715712e-02 8.15580019e-02 8.15444394e-02 8.15308836e-02 8.15173346e-02 + 8.15037924e-02 8.14902569e-02 8.14767282e-02 8.14632062e-02 8.14496909e-02 + 8.14361823e-02 8.14226805e-02 8.14091854e-02 8.13956970e-02 8.13822153e-02 + 8.13687402e-02 8.13552719e-02 8.13418103e-02 8.13283553e-02 8.13149070e-02 + 8.13014654e-02 8.12880305e-02 8.12746022e-02 8.12611805e-02 8.12477656e-02 + 8.12343572e-02 8.12209555e-02 8.12075604e-02 8.11941719e-02 8.11807901e-02 + 8.11674149e-02 8.11540463e-02 8.11406843e-02 8.11273288e-02 8.11139800e-02 + 8.11006378e-02 8.10873021e-02 8.10739731e-02 8.10606506e-02 8.10473346e-02 + 8.10340252e-02 8.10207224e-02 8.10074261e-02 8.09941364e-02 8.09808532e-02 + 8.09675765e-02 8.09543064e-02 8.09410428e-02 8.09277857e-02 8.09145351e-02 + 8.09012911e-02 8.08880535e-02 8.08748224e-02 8.08615978e-02 8.08483797e-02 + 8.08351681e-02 8.08219630e-02 8.08087643e-02 8.07955721e-02 8.07823863e-02 + 8.07692070e-02 8.07560342e-02 8.07428678e-02 8.07297078e-02 8.07165542e-02 + 8.07034071e-02 8.06902664e-02 8.06771322e-02 8.06640043e-02 8.06508829e-02 + 8.06377678e-02 8.06246592e-02 8.06115569e-02 8.05984610e-02 8.05853715e-02 + 8.05722884e-02 8.05592116e-02 8.05461412e-02 8.05330772e-02 8.05200195e-02 + 8.05069682e-02 8.04939232e-02 8.04808846e-02 8.04678523e-02 8.04548263e-02 + 8.04418066e-02 8.04287933e-02 8.04157863e-02 8.04027856e-02 8.03897912e-02 + 8.03768031e-02 8.03638212e-02 8.03508457e-02 8.03378765e-02 8.03249135e-02 + 8.03119568e-02 8.02990064e-02 8.02860622e-02 8.02731243e-02 8.02601926e-02 + 8.02472672e-02 8.02343481e-02 8.02214351e-02 8.02085284e-02 8.01956280e-02 + 8.01827337e-02 8.01698457e-02 8.01569639e-02 8.01440883e-02 8.01312189e-02 + 8.01183557e-02 8.01054986e-02 8.00926478e-02 8.00798032e-02 8.00669647e-02 + 8.00541324e-02 8.00413063e-02 8.00284863e-02 8.00156725e-02 8.00028649e-02 + 7.99900634e-02 7.99772680e-02 7.99644788e-02 7.99516957e-02 7.99389187e-02 + 7.99261479e-02 7.99133832e-02 7.99006246e-02 7.98878721e-02 7.98751257e-02 + 7.98623854e-02 7.98496512e-02 7.98369231e-02 7.98242011e-02 7.98114851e-02 + 7.97987753e-02 7.97860715e-02 7.97733737e-02 7.97606821e-02 7.97479965e-02 + 7.97353169e-02 7.97226434e-02 7.97099759e-02 7.96973145e-02 7.96846590e-02 + 7.96720097e-02 7.96593663e-02 7.96467290e-02 7.96340976e-02 7.96214723e-02 + 7.96088530e-02 7.95962397e-02 7.95836323e-02 7.95710310e-02 7.95584356e-02 + 7.95458463e-02 7.95332629e-02 7.95206854e-02 7.95081140e-02 7.94955485e-02 + 7.94829889e-02 7.94704353e-02 7.94578877e-02 7.94453459e-02 7.94328102e-02 + 7.94202803e-02 7.94077564e-02 7.93952384e-02 7.93827263e-02 7.93702202e-02 + 7.93577199e-02 7.93452256e-02 7.93327371e-02 7.93202546e-02 7.93077779e-02 + 7.92953071e-02 7.92828423e-02 7.92703832e-02 7.92579301e-02 7.92454828e-02 + 7.92330414e-02 7.92206058e-02 7.92081761e-02 7.91957523e-02 7.91833343e-02 + 7.91709221e-02 7.91585157e-02 7.91461152e-02 7.91337206e-02 7.91213317e-02 + 7.91089486e-02 7.90965714e-02 7.90842000e-02 7.90718344e-02 7.90594746e-02 + 7.90471205e-02 7.90347723e-02 7.90224298e-02 7.90100932e-02 7.89977623e-02 + 7.89854371e-02 7.89731178e-02 7.89608042e-02 7.89484964e-02 7.89361943e-02 + 7.89238979e-02 7.89116073e-02 7.88993225e-02 7.88870434e-02 7.88747700e-02 + 7.88625023e-02 7.88502404e-02 7.88379842e-02 7.88257337e-02 7.88134889e-02 + 7.88012498e-02 7.87890164e-02 7.87767887e-02 7.87645667e-02 7.87523504e-02 + 7.87401398e-02 7.87279348e-02 7.87157355e-02 7.87035419e-02 7.86913540e-02 + 7.86791717e-02 7.86669951e-02 7.86548241e-02 7.86426588e-02 7.86304991e-02 + 7.86183450e-02 7.86061966e-02 7.85940538e-02 7.85819167e-02 7.85697851e-02 + 7.85576592e-02 7.85455389e-02 7.85334242e-02 7.85213151e-02 7.85092116e-02 + 7.84971137e-02 7.84850214e-02 7.84729347e-02 7.84608535e-02 7.84487780e-02 + 7.84367080e-02 7.84246436e-02 7.84125847e-02 7.84005314e-02 7.83884837e-02 + 7.83764415e-02 7.83644048e-02 7.83523737e-02 7.83403482e-02 7.83283282e-02 + 7.83163137e-02 7.83043047e-02 7.82923013e-02 7.82803034e-02 7.82683110e-02 + 7.82563241e-02 7.82443427e-02 7.82323668e-02 7.82203964e-02 7.82084315e-02 + 7.81964721e-02 7.81845182e-02 7.81725697e-02 7.81606268e-02 7.81486893e-02 + 7.81367572e-02 7.81248307e-02 7.81129096e-02 7.81009939e-02 7.80890837e-02 + 7.80771790e-02 7.80652797e-02 7.80533858e-02 7.80414974e-02 7.80296144e-02 + 7.80177368e-02 7.80058646e-02 7.79939979e-02 7.79821366e-02 7.79702807e-02 + 7.79584302e-02 7.79465851e-02 7.79347454e-02 7.79229111e-02 7.79110821e-02 + 7.78992586e-02 7.78874404e-02 7.78756277e-02 7.78638202e-02 7.78520182e-02 + 7.78402215e-02 7.78284302e-02 7.78166443e-02 7.78048637e-02 7.77930884e-02 + 7.77813185e-02 7.77695539e-02 7.77577947e-02 7.77460408e-02 7.77342922e-02 + 7.77225490e-02 7.77108111e-02 7.76990785e-02 7.76873512e-02 7.76756292e-02 + 7.76639125e-02 7.76522011e-02 7.76404950e-02 7.76287942e-02 7.76170987e-02 + 7.76054085e-02 7.75937236e-02 7.75820439e-02 7.75703695e-02 7.75587004e-02 + 7.75470365e-02 7.75353780e-02 7.75237246e-02 7.75120765e-02 7.75004337e-02 + 7.74887961e-02 7.74771637e-02 7.74655366e-02 7.74539147e-02 7.74422981e-02 + 7.74306867e-02 7.74190805e-02 7.74074795e-02 7.73958837e-02 7.73842931e-02 + 7.73727078e-02 7.73611276e-02 7.73495527e-02 7.73379829e-02 7.73264183e-02 + 7.73148589e-02 7.73033047e-02 7.72917557e-02 7.72802118e-02 7.72686732e-02 + 7.72571396e-02 7.72456113e-02 7.72340881e-02 7.72225701e-02 7.72110572e-02 + 7.71995494e-02 7.71880468e-02 7.71765494e-02 7.71650571e-02 7.71535699e-02 + 7.71420878e-02 7.71306109e-02 7.71191391e-02 7.71076724e-02 7.70962108e-02 + 7.70847543e-02 7.70733030e-02 7.70618567e-02 7.70504155e-02 7.70389795e-02 + 7.70275485e-02 7.70161226e-02 7.70047018e-02 7.69932860e-02 7.69818754e-02 + 7.69704698e-02 7.69590693e-02 7.69476738e-02 7.69362834e-02 7.69248981e-02 + 7.69135178e-02 7.69021426e-02 7.68907724e-02 7.68794073e-02 7.68680472e-02 + 7.68566921e-02 7.68453420e-02 7.68339970e-02 7.68226570e-02 7.68113221e-02 + 7.67999921e-02 7.67886672e-02 7.67773472e-02 7.67660323e-02 7.67547224e-02 + 7.67434174e-02 7.67321175e-02 7.67208226e-02 7.67095326e-02 7.66982476e-02 + 7.66869676e-02 7.66756926e-02 7.66644225e-02 7.66531574e-02 7.66418973e-02 + 7.66306422e-02 7.66193920e-02 7.66081467e-02 7.65969064e-02 7.65856711e-02 + 7.65744407e-02 7.65632152e-02 7.65519946e-02 7.65407790e-02 7.65295684e-02 + 7.65183626e-02 7.65071618e-02 7.64959659e-02 7.64847749e-02 7.64735888e-02 + 7.64624076e-02 7.64512313e-02 7.64400599e-02 7.64288935e-02 7.64177319e-02 + 7.64065752e-02 7.63954233e-02 7.63842764e-02 7.63731343e-02 7.63619972e-02 + 7.63508648e-02 7.63397374e-02 7.63286148e-02 7.63174971e-02 7.63063842e-02 + 7.62952762e-02 7.62841730e-02 7.62730747e-02 7.62619813e-02 7.62508926e-02 + 7.62398088e-02 7.62287298e-02 7.62176557e-02 7.62065864e-02 7.61955219e-02 + 7.61844622e-02 7.61734074e-02 7.61623573e-02 7.61513121e-02 7.61402716e-02 + 7.61292360e-02 7.61182052e-02 7.61071791e-02 7.60961579e-02 7.60851414e-02 + 7.60741297e-02 7.60631228e-02 7.60521207e-02 7.60411233e-02 7.60301307e-02 + 7.60191429e-02 7.60081598e-02 7.59971815e-02 7.59862080e-02 7.59752392e-02 + 7.59642751e-02 7.59533158e-02 7.59423613e-02 7.59314115e-02 7.59204664e-02 + 7.59095260e-02 7.58985904e-02 7.58876595e-02 7.58767333e-02 7.58658119e-02 + 7.58548951e-02 7.58439831e-02 7.58330758e-02 7.58221731e-02 7.58112752e-02 + 7.58003820e-02 7.57894935e-02 7.57786096e-02 7.57677305e-02 7.57568560e-02 + 7.57459862e-02 7.57351211e-02 7.57242607e-02 7.57134049e-02 7.57025538e-02 + 7.56917074e-02 7.56808656e-02 7.56700285e-02 7.56591961e-02 7.56483683e-02 + 7.56375451e-02 7.56267266e-02 7.56159127e-02 7.56051035e-02 7.55942989e-02 + 7.55834989e-02 7.55727035e-02 7.55619128e-02 7.55511267e-02 7.55403452e-02 + 7.55295684e-02 7.55187961e-02 7.55080285e-02 7.54972654e-02 7.54865070e-02 + 7.54757531e-02 7.54650039e-02 7.54542592e-02 7.54435192e-02 7.54327837e-02 + 7.54220528e-02 7.54113264e-02 7.54006047e-02 7.53898875e-02 7.53791749e-02 + 7.53684669e-02 7.53577634e-02 7.53470644e-02 7.53363701e-02 7.53256803e-02 + 7.53149950e-02 7.53043143e-02 7.52936381e-02 7.52829665e-02 7.52722994e-02 + 7.52616368e-02 7.52509787e-02 7.52403252e-02 7.52296762e-02 7.52190318e-02 + 7.52083918e-02 7.51977564e-02 7.51871255e-02 7.51764990e-02 7.51658771e-02 + 7.51552597e-02 7.51446468e-02 7.51340384e-02 7.51234344e-02 7.51128350e-02 + 7.51022400e-02 7.50916496e-02 7.50810636e-02 7.50704821e-02 7.50599050e-02 + 7.50493324e-02 7.50387643e-02 7.50282007e-02 7.50176415e-02 7.50070868e-02 + 7.49965365e-02 7.49859907e-02 7.49754493e-02 7.49649123e-02 7.49543799e-02 + 7.49438518e-02 7.49333282e-02 7.49228090e-02 7.49122942e-02 7.49017839e-02 + 7.48912780e-02 7.48807765e-02 7.48702794e-02 7.48597868e-02 7.48492985e-02 + 7.48388147e-02 7.48283352e-02 7.48178602e-02 7.48073895e-02 7.47969233e-02 + 7.47864614e-02 7.47760040e-02 7.47655509e-02 7.47551022e-02 7.47446579e-02 + 7.47342179e-02 7.47237824e-02 7.47133512e-02 7.47029243e-02 7.46925019e-02 + 7.46820838e-02 7.46716700e-02 7.46612606e-02 7.46508556e-02 7.46404549e-02 + 7.46300586e-02 7.46196666e-02 7.46092789e-02 7.45988956e-02 7.45885166e-02 + 7.45781419e-02 7.45677716e-02 7.45574056e-02 7.45470439e-02 7.45366865e-02 + 7.45263335e-02 7.45159847e-02 7.45056403e-02 7.44953002e-02 7.44849644e-02 + 7.44746329e-02 7.44643056e-02 7.44539827e-02 7.44436641e-02 7.44333497e-02 + 7.44230397e-02 7.44127339e-02 7.44024324e-02 7.43921352e-02 7.43818423e-02 + 7.43715536e-02 7.43612692e-02 7.43509890e-02 7.43407132e-02 7.43304416e-02 + 7.43201742e-02 7.43099111e-02 7.42996522e-02 7.42893976e-02 7.42791473e-02 + 7.42689011e-02 7.42586593e-02 7.42484216e-02 7.42381882e-02 7.42279590e-02 + 7.42177341e-02 7.42075133e-02 7.41972968e-02 7.41870845e-02 7.41768765e-02 + 7.41666726e-02 7.41564729e-02 7.41462775e-02 7.41360863e-02 7.41258992e-02 + 7.41157164e-02 7.41055377e-02 7.40953633e-02 7.40851930e-02 7.40750269e-02 + 7.40648650e-02 7.40547073e-02 7.40445538e-02 7.40344044e-02 7.40242592e-02 + 7.40141182e-02 7.40039814e-02 7.39938487e-02 7.39837202e-02 7.39735958e-02 + 7.39634756e-02 7.39533595e-02 7.39432476e-02 7.39331398e-02 7.39230362e-02 + 7.39129367e-02 7.39028414e-02 7.38927502e-02 7.38826631e-02 7.38725802e-02 + 7.38625014e-02 7.38524267e-02 7.38423561e-02 7.38322896e-02 7.38222273e-02 + 7.38121691e-02 7.38021150e-02 7.37920650e-02 7.37820191e-02 7.37719773e-02 + 7.37619396e-02 7.37519060e-02 7.37418765e-02 7.37318510e-02 7.37218297e-02 + 7.37118125e-02 7.37017993e-02 7.36917902e-02 7.36817852e-02 7.36717843e-02 + 7.36617874e-02 7.36517946e-02 7.36418059e-02 7.36318212e-02 7.36218406e-02 + 7.36118641e-02 7.36018916e-02 7.35919231e-02 7.35819587e-02 7.35719984e-02 + 7.35620421e-02 7.35520898e-02 7.35421416e-02 7.35321974e-02 7.35222572e-02 + 7.35123211e-02 7.35023890e-02 7.34924610e-02 7.34825369e-02 7.34726169e-02 + 7.34627009e-02 7.34527889e-02 7.34428809e-02 7.34329769e-02 7.34230769e-02 + 7.34131809e-02 7.34032890e-02 7.33934010e-02 7.33835170e-02 7.33736370e-02 + 7.33637610e-02 7.33538890e-02 7.33440210e-02 7.33341569e-02 7.33242969e-02 + 7.33144408e-02 7.33045886e-02 7.32947405e-02 7.32848963e-02 7.32750561e-02 + 7.32652199e-02 7.32553876e-02 7.32455592e-02 7.32357348e-02 7.32259144e-02 + 7.32160979e-02 7.32062854e-02 7.31964768e-02 7.31866722e-02 7.31768715e-02 + 7.31670747e-02 7.31572819e-02 7.31474930e-02 7.31377080e-02 7.31279269e-02 + 7.31181498e-02 7.31083766e-02 7.30986073e-02 7.30888419e-02 7.30790805e-02 + 7.30693229e-02 7.30595693e-02 7.30498195e-02 7.30400737e-02 7.30303318e-02 + 7.30205937e-02 7.30108596e-02 7.30011293e-02 7.29914030e-02 7.29816805e-02 + 7.29719619e-02 7.29622472e-02 7.29525364e-02 7.29428294e-02 7.29331263e-02 + 7.29234271e-02 7.29137318e-02 7.29040403e-02 7.28943527e-02 7.28846689e-02 + 7.28749890e-02 7.28653130e-02 7.28556408e-02 7.28459725e-02 7.28363080e-02 + 7.28266473e-02 7.28169905e-02 7.28073376e-02 7.27976885e-02 7.27880432e-02 + 7.27784017e-02 7.27687641e-02 7.27591303e-02 7.27495003e-02 7.27398742e-02 + 7.27302519e-02 7.27206334e-02 7.27110187e-02 7.27014078e-02 7.26918007e-02 + 7.26821975e-02 7.26725980e-02 7.26630023e-02 7.26534105e-02 7.26438224e-02 + 7.26342382e-02 7.26246577e-02 7.26150810e-02 7.26055081e-02 7.25959390e-02 + 7.25863737e-02 7.25768121e-02 7.25672544e-02 7.25577004e-02 7.25481502e-02 + 7.25386037e-02 7.25290610e-02 7.25195221e-02 7.25099870e-02 7.25004556e-02 + 7.24909279e-02 7.24814040e-02 7.24718839e-02 7.24623675e-02 7.24528549e-02 + 7.24433460e-02 7.24338409e-02 7.24243395e-02 7.24148418e-02 7.24053479e-02 + 7.23958577e-02 7.23863712e-02 7.23768885e-02 7.23674095e-02 7.23579342e-02 + 7.23484626e-02 7.23389948e-02 7.23295307e-02 7.23200702e-02 7.23106135e-02 + 7.23011605e-02 7.22917112e-02 7.22822656e-02 7.22728238e-02 7.22633856e-02 + 7.22539511e-02 7.22445203e-02 7.22350932e-02 7.22256698e-02 7.22162500e-02 + 7.22068340e-02 7.21974216e-02 7.21880130e-02 7.21786080e-02 7.21692066e-02 + 7.21598090e-02 7.21504150e-02 7.21410247e-02 7.21316380e-02 7.21222550e-02 + 7.21128757e-02 7.21035000e-02 7.20941280e-02 7.20847596e-02 7.20753949e-02 + 7.20660339e-02 7.20566765e-02 7.20473227e-02 7.20379726e-02 7.20286261e-02 + 7.20192832e-02 7.20099440e-02 7.20006084e-02 7.19912765e-02 7.19819481e-02 + 7.19726234e-02 7.19633024e-02 7.19539849e-02 7.19446711e-02 7.19353608e-02 + 7.19260542e-02 7.19167512e-02 7.19074518e-02 7.18981560e-02 7.18888639e-02 + 7.18795753e-02 7.18702903e-02 7.18610089e-02 7.18517311e-02 7.18424569e-02 + 7.18331863e-02 7.18239193e-02 7.18146559e-02 7.18053960e-02 7.17961398e-02 + 7.17868871e-02 7.17776380e-02 7.17683924e-02 7.17591505e-02 7.17499121e-02 + 7.17406772e-02 7.17314460e-02 7.17222183e-02 7.17129941e-02 7.17037735e-02 + 7.16945565e-02 7.16853430e-02 7.16761331e-02 7.16669267e-02 7.16577239e-02 + 7.16485246e-02 7.16393289e-02 7.16301367e-02 7.16209480e-02 7.16117629e-02 + 7.16025813e-02 7.15934032e-02 7.15842287e-02 7.15750577e-02 7.15658902e-02 + 7.15567262e-02 7.15475658e-02 7.15384089e-02 7.15292555e-02 7.15201056e-02 + 7.15109592e-02 7.15018163e-02 7.14926769e-02 7.14835410e-02 7.14744087e-02 + 7.14652798e-02 7.14561544e-02 7.14470325e-02 7.14379142e-02 7.14287993e-02 + 7.14196878e-02 7.14105799e-02 7.14014755e-02 7.13923745e-02 7.13832770e-02 + 7.13741830e-02 7.13650925e-02 7.13560055e-02 7.13469219e-02 7.13378418e-02 + 7.13287651e-02 7.13196919e-02 7.13106222e-02 7.13015559e-02 7.12924931e-02 + 7.12834338e-02 7.12743779e-02 7.12653254e-02 7.12562764e-02 7.12472309e-02 + 7.12381888e-02 7.12291501e-02 7.12201149e-02 7.12110831e-02 7.12020547e-02 + 7.11930298e-02 7.11840083e-02 7.11749902e-02 7.11659756e-02 7.11569644e-02 + 7.11479566e-02 7.11389522e-02 7.11299512e-02 7.11209537e-02 7.11119596e-02 + 7.11029689e-02 7.10939816e-02 7.10849977e-02 7.10760172e-02 7.10670401e-02 + 7.10580664e-02 7.10490961e-02 7.10401292e-02 7.10311657e-02 7.10222056e-02 + 7.10132489e-02 7.10042956e-02 7.09953456e-02 7.09863990e-02 7.09774559e-02 + 7.09685161e-02 7.09595796e-02 7.09506466e-02 7.09417169e-02 7.09327906e-02 + 7.09238677e-02 7.09149481e-02 7.09060319e-02 7.08971191e-02 7.08882096e-02 + 7.08793035e-02 7.08704007e-02 7.08615013e-02 7.08526052e-02 7.08437125e-02 + 7.08348231e-02 7.08259371e-02 7.08170544e-02 7.08081751e-02 7.07992991e-02 + 7.07904264e-02 7.07815571e-02 7.07726911e-02 7.07638285e-02 7.07549691e-02 + 7.07461131e-02 7.07372604e-02 7.07284111e-02 7.07195650e-02 7.07107223e-02 + 7.07018829e-02 7.06930468e-02 7.06842141e-02 7.06753846e-02 7.06665584e-02 + 7.06577356e-02 7.06489160e-02 7.06400998e-02 7.06312868e-02 7.06224772e-02 + 7.06136708e-02 7.06048678e-02 7.05960680e-02 7.05872715e-02 7.05784783e-02 + 7.05696884e-02 7.05609018e-02 7.05521184e-02 7.05433384e-02 7.05345616e-02 + 1.00000000e+00 9.75894263e-01 9.53451752e-01 9.32489601e-01 9.12851907e-01 + 8.94404826e-01 8.77032714e-01 8.60635068e-01 8.45124065e-01 8.30422576e-01 + 8.16462554e-01 8.03183696e-01 7.90532350e-01 7.78460602e-01 7.66925506e-01 + 7.55888443e-01 7.45314577e-01 7.35172390e-01 7.25433287e-01 7.16071258e-01 + 7.07062580e-01 6.98385572e-01 6.90020370e-01 6.81948734e-01 6.74153887e-01 + 6.66620364e-01 6.59333880e-01 6.52281224e-01 6.45450150e-01 6.38829295e-01 + 6.32408091e-01 6.26176704e-01 6.20125961e-01 6.14247300e-01 6.08532716e-01 + 6.02974715e-01 5.97566276e-01 5.92300808e-01 5.87172122e-01 5.82174396e-01 + 5.77302151e-01 5.72550221e-01 5.67913735e-01 5.63388093e-01 5.58968948e-01 + 5.54652188e-01 5.50433918e-01 5.46310451e-01 5.42278287e-01 5.38334105e-01 + 5.34474753e-01 5.30697232e-01 5.26998691e-01 5.23376415e-01 5.19827818e-01 + 5.16350438e-01 5.12941922e-01 5.09600027e-01 5.06322612e-01 5.03107629e-01 + 4.99953120e-01 4.96857213e-01 4.93818117e-01 4.90834114e-01 4.87903560e-01 + 4.85024878e-01 4.82196556e-01 4.79417141e-01 4.76685242e-01 4.73999519e-01 + 4.71358685e-01 4.68761505e-01 4.66206788e-01 4.63693390e-01 4.61220209e-01 + 4.58786184e-01 4.56390292e-01 4.54031548e-01 4.51709002e-01 4.49421737e-01 + 4.47168870e-01 4.44949545e-01 4.42762941e-01 4.40608259e-01 4.38484731e-01 + 4.36391613e-01 4.34328187e-01 4.32293756e-01 4.30287649e-01 4.28309213e-01 + 4.26357819e-01 4.24432857e-01 4.22533734e-01 4.20659877e-01 4.18810733e-01 + 4.16985761e-01 4.15184441e-01 4.13406264e-01 4.11650741e-01 4.09917394e-01 + 4.08205761e-01 4.06515390e-01 4.04845847e-01 4.03196706e-01 4.01567556e-01 + 3.99957996e-01 3.98367636e-01 3.96796098e-01 3.95243014e-01 3.93708024e-01 + 3.92190780e-01 3.90690944e-01 3.89208184e-01 3.87742180e-01 3.86292617e-01 + 3.84859191e-01 3.83441605e-01 3.82039569e-01 3.80652800e-01 3.79281024e-01 + 3.77923973e-01 3.76581385e-01 3.75253005e-01 3.73938583e-01 3.72637878e-01 + 3.71350652e-01 3.70076675e-01 3.68815719e-01 3.67567566e-01 3.66332000e-01 + 3.65108810e-01 3.63897792e-01 3.62698745e-01 3.61511473e-01 3.60335785e-01 + 3.59171493e-01 3.58018415e-01 3.56876371e-01 3.55745187e-01 3.54624691e-01 + 3.53514717e-01 3.52415101e-01 3.51325683e-01 3.50246306e-01 3.49176816e-01 + 3.48117064e-01 3.47066903e-01 3.46026189e-01 3.44994782e-01 3.43972542e-01 + 3.42959337e-01 3.41955032e-01 3.40959498e-01 3.39972609e-01 3.38994241e-01 + 3.38024270e-01 3.37062579e-01 3.36109049e-01 3.35163566e-01 3.34226018e-01 + 3.33296293e-01 3.32374284e-01 3.31459885e-01 3.30552992e-01 3.29653502e-01 + 3.28761315e-01 3.27876333e-01 3.26998460e-01 3.26127600e-01 3.25263662e-01 + 3.24406553e-01 3.23556184e-01 3.22712468e-01 3.21875318e-01 3.21044649e-01 + 3.20220378e-01 3.19402424e-01 3.18590706e-01 3.17785145e-01 3.16985665e-01 + 3.16192188e-01 3.15404639e-01 3.14622947e-01 3.13847038e-01 3.13076841e-01 + 3.12312287e-01 3.11553306e-01 3.10799833e-01 3.10051800e-01 3.09309142e-01 + 3.08571795e-01 3.07839697e-01 3.07112784e-01 3.06390997e-01 3.05674275e-01 + 3.04962560e-01 3.04255793e-01 3.03553917e-01 3.02856876e-01 3.02164615e-01 + 3.01477079e-01 3.00794216e-01 3.00115971e-01 2.99442294e-01 2.98773134e-01 + 2.98108439e-01 2.97448161e-01 2.96792252e-01 2.96140662e-01 2.95493345e-01 + 2.94850254e-01 2.94211344e-01 2.93576570e-01 2.92945886e-01 2.92319250e-01 + 2.91696618e-01 2.91077947e-01 2.90463197e-01 2.89852325e-01 2.89245291e-01 + 2.88642055e-01 2.88042577e-01 2.87446820e-01 2.86854743e-01 2.86266311e-01 + 2.85681484e-01 2.85100228e-01 2.84522505e-01 2.83948280e-01 2.83377517e-01 + 2.82810183e-01 2.82246243e-01 2.81685662e-01 2.81128409e-01 2.80574450e-01 + 2.80023753e-01 2.79476286e-01 2.78932017e-01 2.78390916e-01 2.77852951e-01 + 2.77318094e-01 2.76786313e-01 2.76257580e-01 2.75731865e-01 2.75209140e-01 + 2.74689377e-01 2.74172548e-01 2.73658625e-01 2.73147581e-01 2.72639389e-01 + 2.72134024e-01 2.71631458e-01 2.71131667e-01 2.70634624e-01 2.70140305e-01 + 2.69648684e-01 2.69159738e-01 2.68673442e-01 2.68189772e-01 2.67708706e-01 + 2.67230218e-01 2.66754287e-01 2.66280890e-01 2.65810005e-01 2.65341608e-01 + 2.64875680e-01 2.64412197e-01 2.63951138e-01 2.63492483e-01 2.63036211e-01 + 2.62582301e-01 2.62130732e-01 2.61681486e-01 2.61234541e-01 2.60789879e-01 + 2.60347479e-01 2.59907323e-01 2.59469393e-01 2.59033668e-01 2.58600131e-01 + 2.58168764e-01 2.57739549e-01 2.57312467e-01 2.56887501e-01 2.56464633e-01 + 2.56043847e-01 2.55625126e-01 2.55208452e-01 2.54793809e-01 2.54381180e-01 + 2.53970550e-01 2.53561902e-01 2.53155220e-01 2.52750489e-01 2.52347693e-01 + 2.51946816e-01 2.51547844e-01 2.51150761e-01 2.50755553e-01 2.50362204e-01 + 2.49970701e-01 2.49581029e-01 2.49193173e-01 2.48807120e-01 2.48422856e-01 + 2.48040367e-01 2.47659639e-01 2.47280658e-01 2.46903413e-01 2.46527888e-01 + 2.46154072e-01 2.45781951e-01 2.45411513e-01 2.45042745e-01 2.44675634e-01 + 2.44310168e-01 2.43946335e-01 2.43584122e-01 2.43223518e-01 2.42864511e-01 + 2.42507089e-01 2.42151241e-01 2.41796954e-01 2.41444218e-01 2.41093021e-01 + 2.40743352e-01 2.40395201e-01 2.40048555e-01 2.39703404e-01 2.39359739e-01 + 2.39017547e-01 2.38676818e-01 2.38337542e-01 2.37999710e-01 2.37663309e-01 + 2.37328332e-01 2.36994766e-01 2.36662603e-01 2.36331833e-01 2.36002446e-01 + 2.35674432e-01 2.35347783e-01 2.35022487e-01 2.34698537e-01 2.34375923e-01 + 2.34054635e-01 2.33734666e-01 2.33416004e-01 2.33098643e-01 2.32782573e-01 + 2.32467784e-01 2.32154270e-01 2.31842020e-01 2.31531028e-01 2.31221283e-01 + 2.30912778e-01 2.30605504e-01 2.30299454e-01 2.29994620e-01 2.29690992e-01 + 2.29388564e-01 2.29087328e-01 2.28787275e-01 2.28488398e-01 2.28190689e-01 + 2.27894141e-01 2.27598746e-01 2.27304497e-01 2.27011386e-01 2.26719406e-01 + 2.26428550e-01 2.26138810e-01 2.25850180e-01 2.25562652e-01 2.25276219e-01 + 2.24990875e-01 2.24706613e-01 2.24423425e-01 2.24141305e-01 2.23860246e-01 + 2.23580243e-01 2.23301287e-01 2.23023372e-01 2.22746493e-01 2.22470643e-01 + 2.22195814e-01 2.21922002e-01 2.21649200e-01 2.21377401e-01 2.21106599e-01 + 2.20836789e-01 2.20567964e-01 2.20300119e-01 2.20033247e-01 2.19767342e-01 + 2.19502400e-01 2.19238413e-01 2.18975376e-01 2.18713284e-01 2.18452130e-01 + 2.18191910e-01 2.17932618e-01 2.17674247e-01 2.17416794e-01 2.17160252e-01 + 2.16904616e-01 2.16649880e-01 2.16396040e-01 2.16143090e-01 2.15891025e-01 + 2.15639840e-01 2.15389530e-01 2.15140089e-01 2.14891513e-01 2.14643796e-01 + 2.14396935e-01 2.14150923e-01 2.13905756e-01 2.13661429e-01 2.13417937e-01 + 2.13175276e-01 2.12933441e-01 2.12692427e-01 2.12452229e-01 2.12212843e-01 + 2.11974265e-01 2.11736490e-01 2.11499513e-01 2.11263330e-01 2.11027936e-01 + 2.10793328e-01 2.10559500e-01 2.10326449e-01 2.10094169e-01 2.09862658e-01 + 2.09631910e-01 2.09401922e-01 2.09172689e-01 2.08944208e-01 2.08716473e-01 + 2.08489481e-01 2.08263229e-01 2.08037711e-01 2.07812924e-01 2.07588865e-01 + 2.07365528e-01 2.07142911e-01 2.06921010e-01 2.06699820e-01 2.06479337e-01 + 2.06259559e-01 2.06040481e-01 2.05822100e-01 2.05604412e-01 2.05387413e-01 + 2.05171099e-01 2.04955468e-01 2.04740515e-01 2.04526237e-01 2.04312630e-01 + 2.04099691e-01 2.03887417e-01 2.03675803e-01 2.03464847e-01 2.03254545e-01 + 2.03044894e-01 2.02835891e-01 2.02627531e-01 2.02419812e-01 2.02212731e-01 + 2.02006284e-01 2.01800468e-01 2.01595280e-01 2.01390716e-01 2.01186774e-01 + 2.00983451e-01 2.00780742e-01 2.00578646e-01 2.00377158e-01 2.00176277e-01 + 1.99975998e-01 1.99776320e-01 1.99577238e-01 1.99378751e-01 1.99180854e-01 + 1.98983546e-01 1.98786822e-01 1.98590681e-01 1.98395120e-01 1.98200135e-01 + 1.98005724e-01 1.97811884e-01 1.97618612e-01 1.97425905e-01 1.97233761e-01 + 1.97042177e-01 1.96851151e-01 1.96660678e-01 1.96470758e-01 1.96281387e-01 + 1.96092562e-01 1.95904281e-01 1.95716541e-01 1.95529341e-01 1.95342676e-01 + 1.95156545e-01 1.94970945e-01 1.94785873e-01 1.94601328e-01 1.94417306e-01 + 1.94233805e-01 1.94050823e-01 1.93868357e-01 1.93686404e-01 1.93504963e-01 + 1.93324031e-01 1.93143606e-01 1.92963685e-01 1.92784265e-01 1.92605345e-01 + 1.92426923e-01 1.92248995e-01 1.92071560e-01 1.91894616e-01 1.91718159e-01 + 1.91542189e-01 1.91366702e-01 1.91191696e-01 1.91017170e-01 1.90843121e-01 + 1.90669546e-01 1.90496445e-01 1.90323814e-01 1.90151652e-01 1.89979956e-01 + 1.89808724e-01 1.89637954e-01 1.89467644e-01 1.89297793e-01 1.89128397e-01 + 1.88959456e-01 1.88790966e-01 1.88622926e-01 1.88455335e-01 1.88288189e-01 + 1.88121487e-01 1.87955227e-01 1.87789407e-01 1.87624025e-01 1.87459079e-01 + 1.87294568e-01 1.87130489e-01 1.86966840e-01 1.86803620e-01 1.86640827e-01 + 1.86478458e-01 1.86316513e-01 1.86154989e-01 1.85993884e-01 1.85833197e-01 + 1.85672925e-01 1.85513068e-01 1.85353622e-01 1.85194587e-01 1.85035961e-01 + 1.84877742e-01 1.84719927e-01 1.84562517e-01 1.84405508e-01 1.84248899e-01 + 1.84092688e-01 1.83936874e-01 1.83781455e-01 1.83626429e-01 1.83471795e-01 + 1.83317551e-01 1.83163695e-01 1.83010226e-01 1.82857142e-01 1.82704442e-01 + 1.82552123e-01 1.82400185e-01 1.82248626e-01 1.82097444e-01 1.81946637e-01 + 1.81796204e-01 1.81646144e-01 1.81496455e-01 1.81347136e-01 1.81198184e-01 + 1.81049599e-01 1.80901378e-01 1.80753522e-01 1.80606027e-01 1.80458892e-01 + 1.80312117e-01 1.80165699e-01 1.80019637e-01 1.79873930e-01 1.79728576e-01 + 1.79583574e-01 1.79438922e-01 1.79294620e-01 1.79150665e-01 1.79007056e-01 + 1.78863792e-01 1.78720871e-01 1.78578292e-01 1.78436054e-01 1.78294156e-01 + 1.78152595e-01 1.78011371e-01 1.77870482e-01 1.77729928e-01 1.77589706e-01 + 1.77449815e-01 1.77310255e-01 1.77171023e-01 1.77032119e-01 1.76893540e-01 + 1.76755287e-01 1.76617358e-01 1.76479751e-01 1.76342465e-01 1.76205499e-01 + 1.76068851e-01 1.75932521e-01 1.75796507e-01 1.75660808e-01 1.75525423e-01 + 1.75390351e-01 1.75255589e-01 1.75121138e-01 1.74986996e-01 1.74853162e-01 + 1.74719634e-01 1.74586412e-01 1.74453494e-01 1.74320879e-01 1.74188566e-01 + 1.74056554e-01 1.73924842e-01 1.73793428e-01 1.73662312e-01 1.73531492e-01 + 1.73400967e-01 1.73270736e-01 1.73140798e-01 1.73011152e-01 1.72881797e-01 + 1.72752732e-01 1.72623955e-01 1.72495466e-01 1.72367263e-01 1.72239346e-01 + 1.72111713e-01 1.71984363e-01 1.71857296e-01 1.71730510e-01 1.71604004e-01 + 1.71477777e-01 1.71351828e-01 1.71226157e-01 1.71100761e-01 1.70975641e-01 + 1.70850795e-01 1.70726222e-01 1.70601921e-01 1.70477891e-01 1.70354131e-01 + 1.70230640e-01 1.70107418e-01 1.69984462e-01 1.69861773e-01 1.69739349e-01 + 1.69617190e-01 1.69495294e-01 1.69373660e-01 1.69252288e-01 1.69131176e-01 + 1.69010324e-01 1.68889731e-01 1.68769395e-01 1.68649317e-01 1.68529494e-01 + 1.68409926e-01 1.68290613e-01 1.68171552e-01 1.68052744e-01 1.67934188e-01 + 1.67815882e-01 1.67697825e-01 1.67580018e-01 1.67462458e-01 1.67345146e-01 + 1.67228079e-01 1.67111258e-01 1.66994682e-01 1.66878349e-01 1.66762259e-01 + 1.66646411e-01 1.66530804e-01 1.66415437e-01 1.66300309e-01 1.66185421e-01 + 1.66070770e-01 1.65956356e-01 1.65842178e-01 1.65728235e-01 1.65614527e-01 + 1.65501053e-01 1.65387812e-01 1.65274803e-01 1.65162025e-01 1.65049477e-01 + 1.64937160e-01 1.64825071e-01 1.64713211e-01 1.64601578e-01 1.64490172e-01 + 1.64378991e-01 1.64268036e-01 1.64157305e-01 1.64046798e-01 1.63936514e-01 + 1.63826452e-01 1.63716611e-01 1.63606991e-01 1.63497591e-01 1.63388409e-01 + 1.63279447e-01 1.63170702e-01 1.63062174e-01 1.62953862e-01 1.62845766e-01 + 1.62737885e-01 1.62630217e-01 1.62522764e-01 1.62415523e-01 1.62308493e-01 + 1.62201676e-01 1.62095069e-01 1.61988671e-01 1.61882483e-01 1.61776504e-01 + 1.61670732e-01 1.61565168e-01 1.61459810e-01 1.61354658e-01 1.61249711e-01 + 1.61144969e-01 1.61040431e-01 1.60936095e-01 1.60831963e-01 1.60728032e-01 + 1.60624302e-01 1.60520773e-01 1.60417444e-01 1.60314314e-01 1.60211383e-01 + 1.60108650e-01 1.60006114e-01 1.59903775e-01 1.59801632e-01 1.59699684e-01 + 1.59597932e-01 1.59496373e-01 1.59395009e-01 1.59293837e-01 1.59192858e-01 + 1.59092070e-01 1.58991474e-01 1.58891068e-01 1.58790852e-01 1.58690826e-01 + 1.58590988e-01 1.58491339e-01 1.58391877e-01 1.58292602e-01 1.58193514e-01 + 1.58094612e-01 1.57995894e-01 1.57897362e-01 1.57799013e-01 1.57700849e-01 + 1.57602867e-01 1.57505067e-01 1.57407450e-01 1.57310013e-01 1.57212758e-01 + 1.57115682e-01 1.57018786e-01 1.56922069e-01 1.56825531e-01 1.56729171e-01 + 1.56632988e-01 1.56536982e-01 1.56441152e-01 1.56345498e-01 1.56250019e-01 + 1.56154715e-01 1.56059585e-01 1.55964629e-01 1.55869846e-01 1.55775235e-01 + 1.55680797e-01 1.55586530e-01 1.55492434e-01 1.55398509e-01 1.55304754e-01 + 1.55211168e-01 1.55117751e-01 1.55024502e-01 1.54931422e-01 1.54838509e-01 + 1.54745763e-01 1.54653183e-01 1.54560770e-01 1.54468522e-01 1.54376439e-01 + 1.54284520e-01 1.54192765e-01 1.54101174e-01 1.54009746e-01 1.53918481e-01 + 1.53827377e-01 1.53736435e-01 1.53645654e-01 1.53555034e-01 1.53464574e-01 + 1.53374274e-01 1.53284132e-01 1.53194150e-01 1.53104326e-01 1.53014660e-01 + 1.52925151e-01 1.52835798e-01 1.52746603e-01 1.52657563e-01 1.52568679e-01 + 1.52479950e-01 1.52391376e-01 1.52302955e-01 1.52214689e-01 1.52126576e-01 + 1.52038615e-01 1.51950807e-01 1.51863151e-01 1.51775647e-01 1.51688293e-01 + 1.51601091e-01 1.51514038e-01 1.51427135e-01 1.51340382e-01 1.51253778e-01 + 1.51167322e-01 1.51081014e-01 1.50994854e-01 1.50908841e-01 1.50822975e-01 + 1.50737255e-01 1.50651681e-01 1.50566253e-01 1.50480970e-01 1.50395832e-01 + 1.50310838e-01 1.50225988e-01 1.50141281e-01 1.50056718e-01 1.49972298e-01 + 1.49888019e-01 1.49803883e-01 1.49719888e-01 1.49636035e-01 1.49552322e-01 + 1.49468749e-01 1.49385316e-01 1.49302023e-01 1.49218869e-01 1.49135854e-01 + 1.49052977e-01 1.48970239e-01 1.48887638e-01 1.48805174e-01 1.48722847e-01 + 1.48640656e-01 1.48558602e-01 1.48476683e-01 1.48394900e-01 1.48313252e-01 + 1.48231738e-01 1.48150359e-01 1.48069113e-01 1.47988001e-01 1.47907022e-01 + 1.47826176e-01 1.47745463e-01 1.47664881e-01 1.47584431e-01 1.47504113e-01 + 1.47423925e-01 1.47343868e-01 1.47263942e-01 1.47184145e-01 1.47104478e-01 + 1.47024940e-01 1.46945531e-01 1.46866251e-01 1.46787099e-01 1.46708074e-01 + 1.46629177e-01 1.46550407e-01 1.46471764e-01 1.46393248e-01 1.46314857e-01 + 1.46236593e-01 1.46158454e-01 1.46080440e-01 1.46002551e-01 1.45924786e-01 + 1.45847145e-01 1.45769628e-01 1.45692235e-01 1.45614965e-01 1.45537817e-01 + 1.45460792e-01 1.45383890e-01 1.45307109e-01 1.45230449e-01 1.45153911e-01 + 1.45077494e-01 1.45001197e-01 1.44925021e-01 1.44848964e-01 1.44773027e-01 + 1.44697209e-01 1.44621511e-01 1.44545931e-01 1.44470469e-01 1.44395126e-01 + 1.44319900e-01 1.44244791e-01 1.44169800e-01 1.44094926e-01 1.44020168e-01 + 1.43945527e-01 1.43871001e-01 1.43796591e-01 1.43722296e-01 1.43648117e-01 + 1.43574052e-01 1.43500101e-01 1.43426265e-01 1.43352542e-01 1.43278934e-01 + 1.43205438e-01 1.43132055e-01 1.43058785e-01 1.42985628e-01 1.42912583e-01 + 1.42839649e-01 1.42766827e-01 1.42694116e-01 1.42621516e-01 1.42549027e-01 + 1.42476649e-01 1.42404380e-01 1.42332222e-01 1.42260172e-01 1.42188233e-01 + 1.42116402e-01 1.42044680e-01 1.41973066e-01 1.41901561e-01 1.41830164e-01 + 1.41758874e-01 1.41687692e-01 1.41616617e-01 1.41545648e-01 1.41474786e-01 + 1.41404031e-01 1.41333382e-01 1.41262838e-01 1.41192400e-01 1.41122067e-01 + 1.41051839e-01 1.40981716e-01 1.40911698e-01 1.40841783e-01 1.40771973e-01 + 1.40702266e-01 1.40632663e-01 1.40563163e-01 1.40493766e-01 1.40424471e-01 + 1.40355279e-01 1.40286189e-01 1.40217202e-01 1.40148315e-01 1.40079531e-01 + 1.40010847e-01 1.39942264e-01 1.39873782e-01 1.39805401e-01 1.39737119e-01 + 1.39668938e-01 1.39600856e-01 1.39532874e-01 1.39464991e-01 1.39397207e-01 + 1.39329522e-01 1.39261935e-01 1.39194446e-01 1.39127056e-01 1.39059763e-01 + 1.38992568e-01 1.38925470e-01 1.38858469e-01 1.38791565e-01 1.38724758e-01 + 1.38658047e-01 1.38591432e-01 1.38524913e-01 1.38458490e-01 1.38392162e-01 + 1.38325930e-01 1.38259792e-01 1.38193750e-01 1.38127801e-01 1.38061947e-01 + 1.37996188e-01 1.37930522e-01 1.37864950e-01 1.37799471e-01 1.37734085e-01 + 1.37668793e-01 1.37603593e-01 1.37538485e-01 1.37473471e-01 1.37408548e-01 + 1.37343717e-01 1.37278977e-01 1.37214330e-01 1.37149773e-01 1.37085308e-01 + 1.37020933e-01 1.36956649e-01 1.36892455e-01 1.36828351e-01 1.36764338e-01 + 1.36700414e-01 1.36636580e-01 1.36572835e-01 1.36509179e-01 1.36445612e-01 + 1.36382134e-01 1.36318745e-01 1.36255443e-01 1.36192230e-01 1.36129105e-01 + 1.36066067e-01 1.36003117e-01 1.35940254e-01 1.35877478e-01 1.35814789e-01 + 1.35752187e-01 1.35689672e-01 1.35627242e-01 1.35564899e-01 1.35502641e-01 + 1.35440470e-01 1.35378384e-01 1.35316383e-01 1.35254467e-01 1.35192636e-01 + 1.35130890e-01 1.35069228e-01 1.35007651e-01 1.34946158e-01 1.34884748e-01 + 1.34823423e-01 1.34762181e-01 1.34701022e-01 1.34639947e-01 1.34578955e-01 + 1.34518045e-01 1.34457218e-01 1.34396474e-01 1.34335812e-01 1.34275232e-01 + 1.34214733e-01 1.34154317e-01 1.34093982e-01 1.34033728e-01 1.33973556e-01 + 1.33913464e-01 1.33853453e-01 1.33793523e-01 1.33733673e-01 1.33673904e-01 + 1.33614214e-01 1.33554605e-01 1.33495075e-01 1.33435625e-01 1.33376254e-01 + 1.33316962e-01 1.33257749e-01 1.33198615e-01 1.33139560e-01 1.33080583e-01 + 1.33021685e-01 1.32962864e-01 1.32904122e-01 1.32845457e-01 1.32786870e-01 + 1.32728361e-01 1.32669928e-01 1.32611573e-01 1.32553295e-01 1.32495093e-01 + 1.32436968e-01 1.32378920e-01 1.32320948e-01 1.32263052e-01 1.32205232e-01 + 1.32147487e-01 1.32089818e-01 1.32032225e-01 1.31974707e-01 1.31917264e-01 + 1.31859896e-01 1.31802603e-01 1.31745384e-01 1.31688240e-01 1.31631170e-01 + 1.31574174e-01 1.31517252e-01 1.31460404e-01 1.31403630e-01 1.31346929e-01 + 1.31290301e-01 1.31233747e-01 1.31177266e-01 1.31120857e-01 1.31064522e-01 + 1.31008258e-01 1.30952068e-01 1.30895949e-01 1.30839903e-01 1.30783928e-01 + 1.30728025e-01 1.30672194e-01 1.30616435e-01 1.30560746e-01 1.30505129e-01 + 1.30449583e-01 1.30394108e-01 1.30338703e-01 1.30283369e-01 1.30228105e-01 + 1.30172912e-01 1.30117789e-01 1.30062736e-01 1.30007752e-01 1.29952839e-01 + 1.29897994e-01 1.29843219e-01 1.29788514e-01 1.29733877e-01 1.29679310e-01 + 1.29624811e-01 1.29570381e-01 1.29516019e-01 1.29461726e-01 1.29407501e-01 + 1.29353344e-01 1.29299255e-01 1.29245234e-01 1.29191280e-01 1.29137394e-01 + 1.29083575e-01 1.29029824e-01 1.28976140e-01 1.28922522e-01 1.28868972e-01 + 1.28815488e-01 1.28762070e-01 1.28708719e-01 1.28655435e-01 1.28602216e-01 + 1.28549063e-01 1.28495977e-01 1.28442955e-01 1.28390000e-01 1.28337110e-01 + 1.28284285e-01 1.28231526e-01 1.28178831e-01 1.28126202e-01 1.28073637e-01 + 1.28021137e-01 1.27968701e-01 1.27916330e-01 1.27864023e-01 1.27811780e-01 + 1.27759601e-01 1.27707486e-01 1.27655434e-01 1.27603447e-01 1.27551522e-01 + 1.27499661e-01 1.27447864e-01 1.27396129e-01 1.27344457e-01 1.27292848e-01 + 1.27241302e-01 1.27189818e-01 1.27138397e-01 1.27087038e-01 1.27035742e-01 + 1.26984507e-01 1.26933334e-01 1.26882223e-01 1.26831174e-01 1.26780187e-01 + 1.26729260e-01 1.26678396e-01 1.26627592e-01 1.26576849e-01 1.26526168e-01 + 1.26475547e-01 1.26424987e-01 1.26374487e-01 1.26324048e-01 1.26273670e-01 + 1.26223351e-01 1.26173093e-01 1.26122894e-01 1.26072756e-01 1.26022677e-01 + 1.25972658e-01 1.25922698e-01 1.25872798e-01 1.25822957e-01 1.25773176e-01 + 1.25723453e-01 1.25673789e-01 1.25624184e-01 1.25574638e-01 1.25525150e-01 + 1.25475721e-01 1.25426350e-01 1.25377037e-01 1.25327782e-01 1.25278586e-01 + 1.25229447e-01 1.25180366e-01 1.25131343e-01 1.25082377e-01 1.25033469e-01 + 1.24984618e-01 1.24935824e-01 1.24887088e-01 1.24838408e-01 1.24789785e-01 + 1.24741219e-01 1.24692710e-01 1.24644257e-01 1.24595861e-01 1.24547521e-01 + 1.24499237e-01 1.24451010e-01 1.24402838e-01 1.24354722e-01 1.24306662e-01 + 1.24258658e-01 1.24210709e-01 1.24162816e-01 1.24114978e-01 1.24067195e-01 + 1.24019468e-01 1.23971795e-01 1.23924178e-01 1.23876615e-01 1.23829107e-01 + 1.23781654e-01 1.23734255e-01 1.23686910e-01 1.23639620e-01 1.23592384e-01 + 1.23545202e-01 1.23498075e-01 1.23451001e-01 1.23403980e-01 1.23357014e-01 + 1.23310101e-01 1.23263242e-01 1.23216436e-01 1.23169683e-01 1.23122983e-01 + 1.23076337e-01 1.23029743e-01 1.22983202e-01 1.22936715e-01 1.22890279e-01 + 1.22843897e-01 1.22797567e-01 1.22751289e-01 1.22705063e-01 1.22658890e-01 + 1.22612769e-01 1.22566700e-01 1.22520682e-01 1.22474717e-01 1.22428803e-01 + 1.22382941e-01 1.22337130e-01 1.22291371e-01 1.22245663e-01 1.22200006e-01 + 1.22154400e-01 1.22108845e-01 1.22063342e-01 1.22017889e-01 1.21972487e-01 + 1.21927135e-01 1.21881834e-01 1.21836584e-01 1.21791383e-01 1.21746234e-01 + 1.21701134e-01 1.21656084e-01 1.21611085e-01 1.21566135e-01 1.21521235e-01 + 1.21476385e-01 1.21431584e-01 1.21386833e-01 1.21342131e-01 1.21297479e-01 + 1.21252876e-01 1.21208322e-01 1.21163817e-01 1.21119362e-01 1.21074955e-01 + 1.21030597e-01 1.20986287e-01 1.20942026e-01 1.20897814e-01 1.20853651e-01 + 1.20809535e-01 1.20765468e-01 1.20721449e-01 1.20677478e-01 1.20633555e-01 + 1.20589681e-01 1.20545854e-01 1.20502074e-01 1.20458343e-01 1.20414659e-01 + 1.20371022e-01 1.20327433e-01 1.20283891e-01 1.20240396e-01 1.20196949e-01 + 1.20153549e-01 1.20110195e-01 1.20066889e-01 1.20023629e-01 1.19980416e-01 + 1.19937250e-01 1.19894130e-01 1.19851056e-01 1.19808030e-01 1.19765049e-01 + 1.19722115e-01 1.19679226e-01 1.19636384e-01 1.19593588e-01 1.19550838e-01 + 1.19508133e-01 1.19465474e-01 1.19422861e-01 1.19380294e-01 1.19337772e-01 + 1.19295295e-01 1.19252863e-01 1.19210477e-01 1.19168136e-01 1.19125841e-01 + 1.19083590e-01 1.19041384e-01 1.18999223e-01 1.18957106e-01 1.18915035e-01 + 1.18873008e-01 1.18831025e-01 1.18789087e-01 1.18747194e-01 1.18705344e-01 + 1.18663539e-01 1.18621778e-01 1.18580061e-01 1.18538388e-01 1.18496759e-01 + 1.18455174e-01 1.18413632e-01 1.18372134e-01 1.18330680e-01 1.18289269e-01 + 1.18247902e-01 1.18206578e-01 1.18165298e-01 1.18124060e-01 1.18082866e-01 + 1.18041715e-01 1.18000607e-01 1.17959541e-01 1.17918519e-01 1.17877539e-01 + 1.17836602e-01 1.17795708e-01 1.17754856e-01 1.17714047e-01 1.17673280e-01 + 1.17632556e-01 1.17591873e-01 1.17551233e-01 1.17510635e-01 1.17470079e-01 + 1.17429565e-01 1.17389093e-01 1.17348662e-01 1.17308274e-01 1.17267927e-01 + 1.17227622e-01 1.17187358e-01 1.17147135e-01 1.17106955e-01 1.17066815e-01 + 1.17026717e-01 1.16986659e-01 1.16946643e-01 1.16906668e-01 1.16866734e-01 + 1.16826841e-01 1.16786988e-01 1.16747177e-01 1.16707406e-01 1.16667676e-01 + 1.16627986e-01 1.16588337e-01 1.16548728e-01 1.16509159e-01 1.16469631e-01 + 1.16430143e-01 1.16390695e-01 1.16351287e-01 1.16311919e-01 1.16272591e-01 + 1.16233303e-01 1.16194055e-01 1.16154846e-01 1.16115678e-01 1.16076548e-01 + 1.16037459e-01 1.15998408e-01 1.15959397e-01 1.15920426e-01 1.15881494e-01 + 1.15842601e-01 1.15803747e-01 1.15764932e-01 1.15726156e-01 1.15687419e-01 + 1.15648721e-01 1.15610062e-01 1.15571441e-01 1.15532859e-01 1.15494316e-01 + 1.15455812e-01 1.15417345e-01 1.15378918e-01 1.15340528e-01 1.15302177e-01 + 1.15263864e-01 1.15225590e-01 1.15187353e-01 1.15149155e-01 1.15110994e-01 + 1.15072871e-01 1.15034786e-01 1.14996739e-01 1.14958730e-01 1.14920759e-01 + 1.14882824e-01 1.14844928e-01 1.14807069e-01 1.14769247e-01 1.14731463e-01 + 1.14693716e-01 1.14656006e-01 1.14618334e-01 1.14580699e-01 1.14543100e-01 + 1.14505539e-01 1.14468014e-01 1.14430527e-01 1.14393076e-01 1.14355662e-01 + 1.14318284e-01 1.14280944e-01 1.14243640e-01 1.14206372e-01 1.14169141e-01 + 1.14131946e-01 1.14094787e-01 1.14057665e-01 1.14020579e-01 1.13983529e-01 + 1.13946515e-01 1.13909538e-01 1.13872596e-01 1.13835690e-01 1.13798820e-01 + 1.13761986e-01 1.13725188e-01 1.13688425e-01 1.13651698e-01 1.13615006e-01 + 1.13578350e-01 1.13541730e-01 1.13505144e-01 1.13468595e-01 1.13432080e-01 + 1.13395601e-01 1.13359156e-01 1.13322747e-01 1.13286373e-01 1.13250035e-01 + 1.13213730e-01 1.13177461e-01 1.13141227e-01 1.13105028e-01 1.13068863e-01 + 1.13032733e-01 1.12996637e-01 1.12960576e-01 1.12924550e-01 1.12888558e-01 + 1.12852600e-01 1.12816677e-01 1.12780788e-01 1.12744933e-01 1.12709112e-01 + 1.12673326e-01 1.12637574e-01 1.12601855e-01 1.12566171e-01 1.12530520e-01 + 1.12494904e-01 1.12459321e-01 1.12423772e-01 1.12388256e-01 1.12352774e-01 + 1.12317326e-01 1.12281911e-01 1.12246530e-01 1.12211182e-01 1.12175868e-01 + 1.12140587e-01 1.12105339e-01 1.12070125e-01 1.12034943e-01 1.11999795e-01 + 1.11964679e-01 1.11929597e-01 1.11894548e-01 1.11859532e-01 1.11824548e-01 + 1.11789597e-01 1.11754679e-01 1.11719794e-01 1.11684941e-01 1.11650121e-01 + 1.11615334e-01 1.11580579e-01 1.11545856e-01 1.11511166e-01 1.11476508e-01 + 1.11441883e-01 1.11407289e-01 1.11372728e-01 1.11338199e-01 1.11303703e-01 + 1.11269238e-01 1.11234805e-01 1.11200404e-01 1.11166035e-01 1.11131698e-01 + 1.11097393e-01 1.11063119e-01 1.11028877e-01 1.10994667e-01 1.10960489e-01 + 1.10926342e-01 1.10892226e-01 1.10858142e-01 1.10824089e-01 1.10790068e-01 + 1.10756078e-01 1.10722119e-01 1.10688192e-01 1.10654295e-01 1.10620430e-01 + 1.10586596e-01 1.10552793e-01 1.10519021e-01 1.10485279e-01 1.10451569e-01 + 1.10417890e-01 1.10384241e-01 1.10350623e-01 1.10317036e-01 1.10283479e-01 + 1.10249953e-01 1.10216458e-01 1.10182993e-01 1.10149558e-01 1.10116154e-01 + 1.10082780e-01 1.10049437e-01 1.10016124e-01 1.09982841e-01 1.09949588e-01 + 1.09916366e-01 1.09883174e-01 1.09850011e-01 1.09816879e-01 1.09783776e-01 + 1.09750704e-01 1.09717661e-01 1.09684648e-01 1.09651665e-01 1.09618712e-01 + 1.09585789e-01 1.09552895e-01 1.09520030e-01 1.09487196e-01 1.09454390e-01 + 1.09421615e-01 1.09388868e-01 1.09356151e-01 1.09323464e-01 1.09290805e-01 + 1.09258176e-01 1.09225576e-01 1.09193006e-01 1.09160464e-01 1.09127951e-01 + 1.09095468e-01 1.09063013e-01 1.09030588e-01 1.08998191e-01 1.08965824e-01 + 1.08933485e-01 1.08901174e-01 1.08868893e-01 1.08836640e-01 1.08804416e-01 + 1.08772220e-01 1.08740054e-01 1.08707915e-01 1.08675805e-01 1.08643724e-01 + 1.08611671e-01 1.08579646e-01 1.08547649e-01 1.08515681e-01 1.08483741e-01 + 1.08451829e-01 1.08419946e-01 1.08388090e-01 1.08356263e-01 1.08324463e-01 + 1.08292692e-01 1.08260948e-01 1.08229233e-01 1.08197545e-01 1.08165885e-01 + 1.08134253e-01 1.08102648e-01 1.08071072e-01 1.08039523e-01 1.08008001e-01 + 1.07976507e-01 1.07945041e-01 1.07913602e-01 1.07882191e-01 1.07850807e-01 + 1.07819450e-01 1.07788121e-01 1.07756819e-01 1.07725544e-01 1.07694296e-01 + 1.07663076e-01 1.07631883e-01 1.07600717e-01 1.07569578e-01 1.07538466e-01 + 1.07507381e-01 1.07476322e-01 1.07445291e-01 1.07414287e-01 1.07383309e-01 + 1.07352359e-01 1.07321435e-01 1.07290537e-01 1.07259667e-01 1.07228823e-01 + 1.07198005e-01 1.07167214e-01 1.07136450e-01 1.07105712e-01 1.07075001e-01 + 1.07044316e-01 1.07013657e-01 1.06983025e-01 1.06952419e-01 1.06921839e-01 + 1.06891286e-01 1.06860758e-01 1.06830257e-01 1.06799782e-01 1.06769333e-01 + 1.06738910e-01 1.06708513e-01 1.06678142e-01 1.06647796e-01 1.06617477e-01 + 1.06587184e-01 1.06556916e-01 1.06526674e-01 1.06496458e-01 1.06466268e-01 + 1.06436103e-01 1.06405964e-01 1.06375850e-01 1.06345762e-01 1.06315700e-01 + 1.06285663e-01 1.06255651e-01 1.06225665e-01 1.06195704e-01 1.06165769e-01 + 1.06135859e-01 1.06105974e-01 1.06076114e-01 1.06046280e-01 1.06016470e-01 + 1.05986686e-01 1.05956927e-01 1.05927193e-01 1.05897484e-01 1.05867800e-01 + 1.05838141e-01 1.05808507e-01 1.05778897e-01 1.05749313e-01 1.05719753e-01 + 1.05690218e-01 1.05660708e-01 1.05631223e-01 1.05601762e-01 1.05572326e-01 + 1.05542914e-01 1.05513528e-01 1.05484165e-01 1.05454827e-01 1.05425514e-01 + 1.05396225e-01 1.05366960e-01 1.05337720e-01 1.05308504e-01 1.05279312e-01 + 1.05250145e-01 1.05221002e-01 1.05191883e-01 1.05162788e-01 1.05133717e-01 + 1.05104671e-01 1.05075648e-01 1.05046650e-01 1.05017675e-01 1.04988725e-01 + 1.04959798e-01 1.04930896e-01 1.04902017e-01 1.04873162e-01 1.04844331e-01 + 1.04815523e-01 1.04786740e-01 1.04757980e-01 1.04729243e-01 1.04700531e-01 + 1.04671841e-01 1.04643176e-01 1.04614534e-01 1.04585916e-01 1.04557321e-01 + 1.04528749e-01 1.04500201e-01 1.04471676e-01 1.04443175e-01 1.04414697e-01 + 1.04386242e-01 1.04357810e-01 1.04329402e-01 1.04301017e-01 1.04272655e-01 + 1.04244316e-01 1.04216000e-01 1.04187707e-01 1.04159437e-01 1.04131191e-01 + 1.04102967e-01 1.04074766e-01 1.04046588e-01 1.04018433e-01 1.03990301e-01 + 1.03962192e-01 1.03934105e-01 1.03906041e-01 1.03878000e-01 1.03849982e-01 + 1.03821986e-01 1.03794013e-01 1.03766062e-01 1.03738134e-01 1.03710229e-01 + 1.03682346e-01 1.03654486e-01 1.03626648e-01 1.03598832e-01 1.03571039e-01 + 1.03543268e-01 1.03515520e-01 1.03487793e-01 1.03460089e-01 1.03432408e-01 + 1.03404748e-01 1.03377111e-01 1.03349496e-01 1.03321903e-01 1.03294332e-01 + 1.03266783e-01 1.03239256e-01 1.03211751e-01 1.03184268e-01 1.03156807e-01 + 1.03129368e-01 1.03101951e-01 1.03074556e-01 1.03047182e-01 1.03019831e-01 + 1.02992501e-01 1.02965192e-01 1.02937906e-01 1.02910641e-01 1.02883398e-01 + 1.02856177e-01 1.02828977e-01 1.02801798e-01 1.02774642e-01 1.02747506e-01 + 1.02720392e-01 1.02693300e-01 1.02666229e-01 1.02639180e-01 1.02612151e-01 + 1.02585145e-01 1.02558159e-01 1.02531195e-01 1.02504252e-01 1.02477330e-01 + 1.02450430e-01 1.02423550e-01 1.02396692e-01 1.02369855e-01 1.02343039e-01 + 1.02316244e-01 1.02289470e-01 1.02262717e-01 1.02235985e-01 1.02209274e-01 + 1.02182584e-01 1.02155915e-01 1.02129267e-01 1.02102639e-01 1.02076033e-01 + 1.02049447e-01 1.02022882e-01 1.01996338e-01 1.01969814e-01 1.01943311e-01 + 1.01916829e-01 1.01890367e-01 1.01863926e-01 1.01837505e-01 1.01811106e-01 + 1.01784726e-01 1.01758367e-01 1.01732029e-01 1.01705711e-01 1.01679413e-01 + 1.01653136e-01 1.01626879e-01 1.01600643e-01 1.01574426e-01 1.01548230e-01 + 1.01522055e-01 1.01495899e-01 1.01469764e-01 1.01443649e-01 1.01417554e-01 + 1.01391479e-01 1.01365425e-01 1.01339390e-01 1.01313376e-01 1.01287381e-01 + 1.01261406e-01 1.01235452e-01 1.01209517e-01 1.01183603e-01 1.01157708e-01 + 1.01131833e-01 1.01105978e-01 1.01080143e-01 1.01054327e-01 1.01028532e-01 + 1.01002756e-01 1.00976999e-01 1.00951263e-01 1.00925546e-01 1.00899849e-01 + 1.00874171e-01 1.00848513e-01 1.00822875e-01 1.00797256e-01 1.00771656e-01 + 1.00746077e-01 1.00720516e-01 1.00694975e-01 1.00669454e-01 1.00643952e-01 + 1.00618469e-01 1.00593005e-01 1.00567561e-01 1.00542136e-01 1.00516731e-01 + 1.00491345e-01 1.00465978e-01 1.00440630e-01 1.00415301e-01 1.00389992e-01 + 1.00364701e-01 1.00339430e-01 1.00314178e-01 1.00288944e-01 1.00263730e-01 + 1.00238535e-01 1.00213359e-01 1.00188202e-01 1.00163064e-01 1.00137944e-01 + 1.00112844e-01 1.00087762e-01 1.00062700e-01 1.00037656e-01 1.00012631e-01 + 9.99876242e-02 9.99626366e-02 9.99376677e-02 9.99127176e-02 9.98877861e-02 + 9.98628732e-02 9.98379790e-02 9.98131034e-02 9.97882464e-02 9.97634079e-02 + 9.97385880e-02 9.97137866e-02 9.96890037e-02 9.96642393e-02 9.96394933e-02 + 9.96147657e-02 9.95900565e-02 9.95653657e-02 9.95406933e-02 9.95160392e-02 + 9.94914034e-02 9.94667859e-02 9.94421867e-02 9.94176057e-02 9.93930429e-02 + 9.93684983e-02 9.93439719e-02 9.93194636e-02 9.92949735e-02 9.92705015e-02 + 9.92460476e-02 9.92216117e-02 9.91971939e-02 9.91727940e-02 9.91484122e-02 + 9.91240484e-02 9.90997025e-02 9.90753745e-02 9.90510645e-02 9.90267723e-02 + 9.90024980e-02 9.89782415e-02 9.89540029e-02 9.89297821e-02 9.89055790e-02 + 9.88813937e-02 9.88572261e-02 9.88330763e-02 9.88089441e-02 9.87848296e-02 + 9.87607327e-02 9.87366535e-02 9.87125919e-02 9.86885478e-02 9.86645213e-02 + 9.86405124e-02 9.86165209e-02 9.85925470e-02 9.85685906e-02 9.85446516e-02 + 9.85207300e-02 9.84968258e-02 9.84729391e-02 9.84490697e-02 9.84252176e-02 + 9.84013829e-02 9.83775655e-02 9.83537654e-02 9.83299825e-02 9.83062169e-02 + 9.82824685e-02 9.82587374e-02 9.82350233e-02 9.82113265e-02 9.81876468e-02 + 9.81639842e-02 9.81403387e-02 9.81167103e-02 9.80930990e-02 9.80695047e-02 + 9.80459274e-02 9.80223671e-02 9.79988238e-02 9.79752974e-02 9.79517880e-02 + 9.79282955e-02 9.79048199e-02 9.78813611e-02 9.78579192e-02 9.78344942e-02 + 9.78110859e-02 9.77876945e-02 9.77643198e-02 9.77409619e-02 9.77176207e-02 + 9.76942963e-02 9.76709885e-02 9.76476974e-02 9.76244230e-02 9.76011651e-02 + 9.75779239e-02 9.75546993e-02 9.75314913e-02 9.75082999e-02 9.74851249e-02 + 9.74619665e-02 9.74388246e-02 9.74156991e-02 9.73925901e-02 9.73694976e-02 + 9.73464215e-02 9.73233617e-02 9.73003184e-02 9.72772914e-02 9.72542807e-02 + 9.72312864e-02 9.72083084e-02 9.71853467e-02 9.71624012e-02 9.71394719e-02 + 9.71165589e-02 9.70936621e-02 9.70707815e-02 9.70479171e-02 9.70250688e-02 + 9.70022366e-02 9.69794205e-02 9.69566206e-02 9.69338367e-02 9.69110688e-02 + 9.68883170e-02 9.68655813e-02 9.68428615e-02 9.68201577e-02 9.67974698e-02 + 9.67747979e-02 9.67521419e-02 9.67295019e-02 9.67068777e-02 9.66842693e-02 + 9.66616769e-02 9.66391002e-02 9.66165394e-02 9.65939943e-02 9.65714651e-02 + 9.65489516e-02 9.65264538e-02 9.65039718e-02 9.64815054e-02 9.64590547e-02 + 9.64366197e-02 9.64142004e-02 9.63917967e-02 9.63694086e-02 9.63470360e-02 + 9.63246791e-02 9.63023377e-02 9.62800118e-02 9.62577015e-02 9.62354067e-02 + 9.62131273e-02 9.61908635e-02 9.61686150e-02 9.61463820e-02 9.61241644e-02 + 9.61019623e-02 9.60797754e-02 9.60576040e-02 9.60354479e-02 9.60133071e-02 + 9.59911816e-02 9.59690714e-02 9.59469765e-02 9.59248968e-02 9.59028324e-02 + 9.58807832e-02 9.58587492e-02 9.58367303e-02 9.58147267e-02 9.57927382e-02 + 9.57707648e-02 9.57488065e-02 9.57268633e-02 9.57049352e-02 9.56830222e-02 + 9.56611242e-02 9.56392413e-02 9.56173733e-02 9.55955204e-02 9.55736824e-02 + 9.55518594e-02 9.55300513e-02 9.55082582e-02 9.54864799e-02 9.54647166e-02 + 9.54429681e-02 9.54212345e-02 9.53995157e-02 9.53778117e-02 9.53561226e-02 + 9.53344482e-02 9.53127886e-02 9.52911438e-02 9.52695137e-02 9.52478984e-02 + 9.52262977e-02 9.52047117e-02 9.51831404e-02 9.51615838e-02 9.51400418e-02 + 9.51185144e-02 9.50970016e-02 9.50755034e-02 9.50540198e-02 9.50325508e-02 + 9.50110963e-02 9.49896563e-02 9.49682308e-02 9.49468198e-02 9.49254233e-02 + 9.49040412e-02 9.48826736e-02 9.48613204e-02 9.48399817e-02 9.48186573e-02 + 9.47973473e-02 9.47760516e-02 9.47547703e-02 9.47335034e-02 9.47122507e-02 + 9.46910123e-02 9.46697883e-02 9.46485784e-02 9.46273829e-02 9.46062015e-02 + 9.45850344e-02 9.45638815e-02 9.45427428e-02 9.45216182e-02 9.45005078e-02 + 9.44794116e-02 9.44583294e-02 9.44372614e-02 9.44162074e-02 9.43951676e-02 + 9.43741418e-02 9.43531300e-02 9.43321323e-02 9.43111485e-02 9.42901788e-02 + 9.42692231e-02 9.42482813e-02 9.42273534e-02 9.42064395e-02 9.41855396e-02 + 9.41646535e-02 9.41437813e-02 9.41229230e-02 9.41020785e-02 9.40812479e-02 + 9.40604311e-02 9.40396282e-02 9.40188390e-02 9.39980636e-02 9.39773020e-02 + 9.39565541e-02 9.39358200e-02 9.39150995e-02 9.38943928e-02 9.38736998e-02 + 9.38530204e-02 9.38323548e-02 9.38117027e-02 9.37910643e-02 9.37704395e-02 + 9.37498283e-02 9.37292307e-02 9.37086466e-02 9.36880762e-02 9.36675192e-02 + 9.36469758e-02 9.36264459e-02 9.36059295e-02 9.35854265e-02 9.35649371e-02 + 9.35444611e-02 9.35239985e-02 9.35035493e-02 9.34831136e-02 9.34626912e-02 + 9.34422823e-02 9.34218866e-02 9.34015044e-02 9.33811355e-02 9.33607798e-02 + 9.33404375e-02 9.33201085e-02 9.32997928e-02 9.32794903e-02 9.32592011e-02 + 9.32389251e-02 9.32186624e-02 9.31984128e-02 9.31781764e-02 9.31579532e-02 + 9.31377432e-02 9.31175463e-02 9.30973626e-02 9.30771919e-02 9.30570344e-02 + 9.30368899e-02 9.30167586e-02 9.29966403e-02 9.29765350e-02 9.29564428e-02 + 9.29363636e-02 9.29162974e-02 9.28962442e-02 9.28762040e-02 9.28561768e-02 + 9.28361624e-02 9.28161611e-02 9.27961726e-02 9.27761971e-02 9.27562344e-02 + 9.27362847e-02 9.27163478e-02 9.26964237e-02 9.26765125e-02 9.26566141e-02 + 9.26367286e-02 9.26168558e-02 9.25969958e-02 9.25771486e-02 9.25573141e-02 + 9.25374924e-02 9.25176834e-02 9.24978871e-02 9.24781036e-02 9.24583327e-02 + 9.24385745e-02 9.24188289e-02 9.23990960e-02 9.23793758e-02 9.23596681e-02 + 9.23399731e-02 9.23202907e-02 9.23006208e-02 9.22809635e-02 9.22613188e-02 + 9.22416866e-02 9.22220669e-02 9.22024597e-02 9.21828651e-02 9.21632829e-02 + 9.21437132e-02 9.21241560e-02 9.21046112e-02 9.20850788e-02 9.20655589e-02 + 9.20460514e-02 9.20265563e-02 9.20070735e-02 9.19876031e-02 9.19681451e-02 + 9.19486994e-02 9.19292661e-02 9.19098451e-02 9.18904363e-02 9.18710399e-02 + 9.18516557e-02 9.18322838e-02 9.18129242e-02 9.17935768e-02 9.17742416e-02 + 9.17549186e-02 9.17356079e-02 9.17163093e-02 9.16970229e-02 9.16777486e-02 + 9.16584865e-02 9.16392366e-02 9.16199987e-02 9.16007730e-02 9.15815594e-02 + 9.15623578e-02 9.15431684e-02 9.15239910e-02 9.15048256e-02 9.14856723e-02 + 9.14665310e-02 9.14474017e-02 9.14282844e-02 9.14091791e-02 9.13900857e-02 + 9.13710043e-02 9.13519349e-02 9.13328774e-02 9.13138318e-02 9.12947982e-02 + 9.12757764e-02 9.12567665e-02 9.12377685e-02 9.12187823e-02 9.11998080e-02 + 9.11808456e-02 9.11618949e-02 9.11429561e-02 9.11240290e-02 9.11051138e-02 + 9.10862103e-02 9.10673186e-02 9.10484386e-02 9.10295704e-02 9.10107139e-02 + 9.09918691e-02 9.09730360e-02 9.09542146e-02 9.09354049e-02 9.09166069e-02 + 9.08978205e-02 9.08790457e-02 9.08602826e-02 9.08415311e-02 9.08227911e-02 + 9.08040628e-02 9.07853461e-02 9.07666409e-02 9.07479473e-02 9.07292652e-02 + 9.07105947e-02 9.06919357e-02 9.06732882e-02 9.06546522e-02 9.06360277e-02 + 9.06174146e-02 9.05988131e-02 9.05802229e-02 9.05616442e-02 9.05430770e-02 + 9.05245211e-02 9.05059767e-02 9.04874436e-02 9.04689219e-02 9.04504116e-02 + 9.04319127e-02 9.04134251e-02 9.03949488e-02 9.03764839e-02 9.03580303e-02 + 9.03395879e-02 9.03211569e-02 9.03027371e-02 9.02843286e-02 9.02659313e-02 + 9.02475453e-02 9.02291706e-02 9.02108070e-02 9.01924546e-02 9.01741135e-02 + 9.01557835e-02 9.01374647e-02 9.01191571e-02 9.01008606e-02 9.00825752e-02 + 9.00643010e-02 9.00460379e-02 9.00277859e-02 9.00095450e-02 8.99913152e-02 + 8.99730965e-02 8.99548888e-02 8.99366921e-02 8.99185065e-02 8.99003320e-02 + 8.98821684e-02 8.98640159e-02 8.98458743e-02 8.98277437e-02 8.98096241e-02 + 8.97915155e-02 8.97734178e-02 8.97553311e-02 8.97372552e-02 8.97191903e-02 + 8.97011363e-02 8.96830932e-02 8.96650610e-02 8.96470396e-02 8.96290291e-02 + 8.96110295e-02 8.95930407e-02 8.95750627e-02 8.95570956e-02 8.95391392e-02 + 8.95211937e-02 8.95032589e-02 8.94853349e-02 8.94674217e-02 8.94495192e-02 + 8.94316275e-02 8.94137465e-02 8.93958762e-02 8.93780167e-02 8.93601678e-02 + 8.93423296e-02 8.93245021e-02 8.93066853e-02 8.92888791e-02 8.92710836e-02 + 8.92532987e-02 8.92355244e-02 8.92177608e-02 8.92000077e-02 8.91822653e-02 + 8.91645334e-02 8.91468121e-02 8.91291014e-02 8.91114012e-02 8.90937115e-02 + 8.90760324e-02 8.90583638e-02 8.90407057e-02 8.90230582e-02 8.90054211e-02 + 8.89877945e-02 8.89701783e-02 8.89525726e-02 8.89349774e-02 8.89173926e-02 + 8.88998182e-02 8.88822542e-02 8.88647007e-02 8.88471575e-02 8.88296247e-02 + 8.88121023e-02 8.87945903e-02 8.87770886e-02 8.87595973e-02 8.87421163e-02 + 8.87246456e-02 8.87071853e-02 8.86897352e-02 8.86722954e-02 8.86548660e-02 + 8.86374468e-02 8.86200378e-02 8.86026391e-02 8.85852507e-02 8.85678725e-02 + 8.85505045e-02 8.85331467e-02 8.85157991e-02 8.84984618e-02 8.84811346e-02 + 8.84638176e-02 8.84465107e-02 8.84292140e-02 8.84119274e-02 8.83946510e-02 + 8.83773847e-02 8.83601285e-02 8.83428825e-02 8.83256465e-02 8.83084206e-02 + 8.82912047e-02 8.82739990e-02 8.82568033e-02 8.82396176e-02 8.82224420e-02 + 8.82052764e-02 8.81881208e-02 8.81709752e-02 8.81538396e-02 8.81367140e-02 + 8.81195984e-02 8.81024927e-02 8.80853970e-02 8.80683113e-02 8.80512355e-02 + 8.80341696e-02 8.80171137e-02 8.80000676e-02 8.79830314e-02 8.79660052e-02 + 8.79489888e-02 8.79319823e-02 8.79149857e-02 8.78979989e-02 8.78810219e-02 + 8.78640548e-02 8.78470975e-02 8.78301500e-02 8.78132123e-02 8.77962845e-02 + 8.77793664e-02 8.77624580e-02 8.77455595e-02 8.77286707e-02 8.77117916e-02 + 8.76949223e-02 8.76780628e-02 8.76612129e-02 8.76443728e-02 8.76275423e-02 + 8.76107216e-02 8.75939105e-02 8.75771091e-02 8.75603174e-02 8.75435353e-02 + 8.75267629e-02 8.75100001e-02 8.74932469e-02 8.74765033e-02 8.74597694e-02 + 8.74430451e-02 8.74263303e-02 8.74096251e-02 8.73929296e-02 8.73762435e-02 + 8.73595670e-02 8.73429001e-02 8.73262427e-02 8.73095948e-02 8.72929565e-02 + 8.72763276e-02 8.72597083e-02 8.72430984e-02 8.72264981e-02 8.72099072e-02 + 8.71933257e-02 8.71767537e-02 8.71601912e-02 8.71436381e-02 8.71270944e-02 + 8.71105602e-02 8.70940353e-02 8.70775199e-02 8.70610138e-02 8.70445172e-02 + 8.70280299e-02 8.70115519e-02 8.69950834e-02 8.69786241e-02 8.69621742e-02 + 8.69457337e-02 8.69293024e-02 8.69128805e-02 8.68964679e-02 8.68800646e-02 + 8.68636705e-02 8.68472857e-02 8.68309103e-02 8.68145440e-02 8.67981870e-02 + 8.67818393e-02 8.67655008e-02 8.67491715e-02 8.67328514e-02 8.67165406e-02 + 8.67002389e-02 8.66839464e-02 8.66676631e-02 8.66513890e-02 8.66351240e-02 + 8.66188682e-02 8.66026216e-02 8.65863841e-02 8.65701557e-02 8.65539364e-02 + 8.65377263e-02 8.65215252e-02 8.65053333e-02 8.64891504e-02 8.64729766e-02 + 8.64568119e-02 8.64406563e-02 8.64245097e-02 8.64083721e-02 8.63922436e-02 + 8.63761241e-02 8.63600136e-02 8.63439122e-02 8.63278197e-02 8.63117363e-02 + 8.62956618e-02 8.62795963e-02 8.62635398e-02 8.62474922e-02 8.62314536e-02 + 8.62154239e-02 8.61994032e-02 8.61833914e-02 8.61673885e-02 8.61513945e-02 + 8.61354094e-02 8.61194332e-02 8.61034659e-02 8.60875075e-02 8.60715580e-02 + 8.60556173e-02 8.60396855e-02 8.60237625e-02 8.60078483e-02 8.59919430e-02 + 8.59760465e-02 8.59601588e-02 8.59442800e-02 8.59284099e-02 8.59125486e-02 + 8.58966961e-02 8.58808523e-02 8.58650173e-02 8.58491911e-02 8.58333736e-02 + 8.58175649e-02 8.58017649e-02 8.57859736e-02 8.57701911e-02 8.57544172e-02 + 8.57386520e-02 8.57228956e-02 8.57071478e-02 8.56914087e-02 8.56756782e-02 + 8.56599565e-02 8.56442433e-02 8.56285389e-02 8.56128430e-02 8.55971558e-02 + 8.55814772e-02 8.55658072e-02 8.55501458e-02 8.55344930e-02 8.55188488e-02 + 8.55032132e-02 8.54875862e-02 8.54719677e-02 8.54563578e-02 8.54407564e-02 + 8.54251636e-02 8.54095793e-02 8.53940035e-02 8.53784363e-02 8.53628775e-02 + 8.53473273e-02 8.53317855e-02 8.53162523e-02 8.53007275e-02 8.52852112e-02 + 8.52697034e-02 8.52542040e-02 8.52387130e-02 8.52232305e-02 8.52077565e-02 + 8.51922909e-02 8.51768336e-02 8.51613848e-02 8.51459444e-02 8.51305124e-02 + 8.51150888e-02 8.50996736e-02 8.50842667e-02 8.50688682e-02 8.50534780e-02 + 8.50380963e-02 8.50227228e-02 8.50073577e-02 8.49920009e-02 8.49766524e-02 + 8.49613123e-02 8.49459804e-02 8.49306569e-02 8.49153416e-02 8.49000346e-02 + 8.48847359e-02 8.48694455e-02 8.48541633e-02 8.48388893e-02 8.48236237e-02 + 8.48083662e-02 8.47931170e-02 8.47778760e-02 8.47626432e-02 8.47474187e-02 + 8.47322023e-02 8.47169941e-02 8.47017941e-02 8.46866023e-02 8.46714187e-02 + 8.46562432e-02 8.46410759e-02 8.46259167e-02 8.46107657e-02 8.45956228e-02 + 8.45804880e-02 8.45653614e-02 8.45502428e-02 8.45351324e-02 8.45200301e-02 + 8.45049358e-02 8.44898497e-02 8.44747716e-02 8.44597016e-02 8.44446397e-02 + 8.44295858e-02 8.44145399e-02 8.43995021e-02 8.43844724e-02 8.43694506e-02 + 8.43544369e-02 8.43394312e-02 8.43244335e-02 8.43094438e-02 8.42944621e-02 + 8.42794883e-02 8.42645226e-02 8.42495648e-02 8.42346150e-02 8.42196731e-02 + 8.42047392e-02 8.41898132e-02 8.41748952e-02 8.41599851e-02 8.41450829e-02 + 8.41301886e-02 8.41153022e-02 8.41004238e-02 8.40855532e-02 8.40706905e-02 + 8.40558357e-02 8.40409887e-02 8.40261496e-02 8.40113184e-02 8.39964950e-02 + 8.39816795e-02 8.39668718e-02 8.39520719e-02 8.39372799e-02 8.39224957e-02 + 8.39077193e-02 8.38929507e-02 8.38781898e-02 8.38634368e-02 8.38486916e-02 + 8.38339541e-02 8.38192244e-02 8.38045025e-02 8.37897883e-02 8.37750818e-02 + 8.37603831e-02 8.37456922e-02 8.37310089e-02 8.37163334e-02 8.37016656e-02 + 8.36870055e-02 8.36723531e-02 8.36577084e-02 8.36430714e-02 8.36284421e-02 + 8.36138204e-02 8.35992064e-02 8.35846001e-02 8.35700014e-02 8.35554104e-02 + 8.35408270e-02 8.35262512e-02 8.35116831e-02 8.34971226e-02 8.34825697e-02 + 8.34680244e-02 8.34534867e-02 8.34389566e-02 8.34244341e-02 8.34099191e-02 + 8.33954118e-02 8.33809120e-02 8.33664197e-02 8.33519351e-02 8.33374579e-02 + 8.33229883e-02 8.33085263e-02 8.32940718e-02 8.32796248e-02 8.32651853e-02 + 8.32507533e-02 8.32363288e-02 8.32219118e-02 8.32075023e-02 8.31931003e-02 + 8.31787058e-02 8.31643187e-02 8.31499391e-02 8.31355669e-02 8.31212022e-02 + 8.31068450e-02 8.30924951e-02 8.30781528e-02 8.30638178e-02 8.30494902e-02 + 8.30351701e-02 8.30208574e-02 8.30065520e-02 8.29922541e-02 8.29779635e-02 + 8.29636804e-02 8.29494046e-02 8.29351361e-02 8.29208751e-02 8.29066213e-02 + 8.28923750e-02 8.28781359e-02 8.28639042e-02 8.28496799e-02 8.28354628e-02 + 8.28212531e-02 8.28070507e-02 8.27928556e-02 8.27786678e-02 8.27644872e-02 + 8.27503140e-02 8.27361480e-02 8.27219893e-02 8.27078379e-02 8.26936938e-02 + 8.26795569e-02 8.26654272e-02 8.26513048e-02 8.26371896e-02 8.26230816e-02 + 8.26089809e-02 8.25948874e-02 8.25808011e-02 8.25667220e-02 8.25526501e-02 + 8.25385854e-02 8.25245279e-02 8.25104775e-02 8.24964344e-02 8.24823984e-02 + 8.24683695e-02 8.24543479e-02 8.24403333e-02 8.24263259e-02 8.24123257e-02 + 8.23983326e-02 8.23843466e-02 8.23703677e-02 8.23563960e-02 8.23424313e-02 + 8.23284737e-02 8.23145233e-02 8.23005799e-02 8.22866436e-02 8.22727144e-02 + 8.22587923e-02 8.22448772e-02 8.22309692e-02 8.22170683e-02 8.22031744e-02 + 8.21892875e-02 8.21754077e-02 8.21615349e-02 8.21476691e-02 8.21338103e-02 + 8.21199586e-02 8.21061138e-02 8.20922761e-02 8.20784453e-02 8.20646216e-02 + 8.20508048e-02 8.20369950e-02 8.20231922e-02 8.20093963e-02 8.19956074e-02 + 8.19818254e-02 8.19680504e-02 8.19542823e-02 8.19405212e-02 8.19267670e-02 + 8.19130197e-02 8.18992794e-02 8.18855459e-02 8.18718194e-02 8.18580997e-02 + 8.18443870e-02 8.18306811e-02 8.18169822e-02 8.18032901e-02 8.17896048e-02 + 8.17759265e-02 8.17622550e-02 8.17485903e-02 8.17349326e-02 8.17212816e-02 + 8.17076375e-02 8.16940002e-02 8.16803697e-02 8.16667461e-02 8.16531293e-02 + 8.16395193e-02 8.16259161e-02 8.16123197e-02 8.15987300e-02 8.15851472e-02 + 8.15715712e-02 8.15580019e-02 8.15444394e-02 8.15308836e-02 8.15173346e-02 + 8.15037924e-02 8.14902569e-02 8.14767282e-02 8.14632062e-02 8.14496909e-02 + 8.14361823e-02 8.14226805e-02 8.14091854e-02 8.13956970e-02 8.13822153e-02 + 8.13687402e-02 8.13552719e-02 8.13418103e-02 8.13283553e-02 8.13149070e-02 + 8.13014654e-02 8.12880305e-02 8.12746022e-02 8.12611805e-02 8.12477656e-02 + 8.12343572e-02 8.12209555e-02 8.12075604e-02 8.11941719e-02 8.11807901e-02 + 8.11674149e-02 8.11540463e-02 8.11406843e-02 8.11273288e-02 8.11139800e-02 + 8.11006378e-02 8.10873021e-02 8.10739731e-02 8.10606506e-02 8.10473346e-02 + 8.10340252e-02 8.10207224e-02 8.10074261e-02 8.09941364e-02 8.09808532e-02 + 8.09675765e-02 8.09543064e-02 8.09410428e-02 8.09277857e-02 8.09145351e-02 + 8.09012911e-02 8.08880535e-02 8.08748224e-02 8.08615978e-02 8.08483797e-02 + 8.08351681e-02 8.08219630e-02 8.08087643e-02 8.07955721e-02 8.07823863e-02 + 8.07692070e-02 8.07560342e-02 8.07428678e-02 8.07297078e-02 8.07165542e-02 + 8.07034071e-02 8.06902664e-02 8.06771322e-02 8.06640043e-02 8.06508829e-02 + 8.06377678e-02 8.06246592e-02 8.06115569e-02 8.05984610e-02 8.05853715e-02 + 8.05722884e-02 8.05592116e-02 8.05461412e-02 8.05330772e-02 8.05200195e-02 + 8.05069682e-02 8.04939232e-02 8.04808846e-02 8.04678523e-02 8.04548263e-02 + 8.04418066e-02 8.04287933e-02 8.04157863e-02 8.04027856e-02 8.03897912e-02 + 8.03768031e-02 8.03638212e-02 8.03508457e-02 8.03378765e-02 8.03249135e-02 + 8.03119568e-02 8.02990064e-02 8.02860622e-02 8.02731243e-02 8.02601926e-02 + 8.02472672e-02 8.02343481e-02 8.02214351e-02 8.02085284e-02 8.01956280e-02 + 8.01827337e-02 8.01698457e-02 8.01569639e-02 8.01440883e-02 8.01312189e-02 + 8.01183557e-02 8.01054986e-02 8.00926478e-02 8.00798032e-02 8.00669647e-02 + 8.00541324e-02 8.00413063e-02 8.00284863e-02 8.00156725e-02 8.00028649e-02 + 7.99900634e-02 7.99772680e-02 7.99644788e-02 7.99516957e-02 7.99389187e-02 + 7.99261479e-02 7.99133832e-02 7.99006246e-02 7.98878721e-02 7.98751257e-02 + 7.98623854e-02 7.98496512e-02 7.98369231e-02 7.98242011e-02 7.98114851e-02 + 7.97987753e-02 7.97860715e-02 7.97733737e-02 7.97606821e-02 7.97479965e-02 + 7.97353169e-02 7.97226434e-02 7.97099759e-02 7.96973145e-02 7.96846590e-02 + 7.96720097e-02 7.96593663e-02 7.96467290e-02 7.96340976e-02 7.96214723e-02 + 7.96088530e-02 7.95962397e-02 7.95836323e-02 7.95710310e-02 7.95584356e-02 + 7.95458463e-02 7.95332629e-02 7.95206854e-02 7.95081140e-02 7.94955485e-02 + 7.94829889e-02 7.94704353e-02 7.94578877e-02 7.94453459e-02 7.94328102e-02 + 7.94202803e-02 7.94077564e-02 7.93952384e-02 7.93827263e-02 7.93702202e-02 + 7.93577199e-02 7.93452256e-02 7.93327371e-02 7.93202546e-02 7.93077779e-02 + 7.92953071e-02 7.92828423e-02 7.92703832e-02 7.92579301e-02 7.92454828e-02 + 7.92330414e-02 7.92206058e-02 7.92081761e-02 7.91957523e-02 7.91833343e-02 + 7.91709221e-02 7.91585157e-02 7.91461152e-02 7.91337206e-02 7.91213317e-02 + 7.91089486e-02 7.90965714e-02 7.90842000e-02 7.90718344e-02 7.90594746e-02 + 7.90471205e-02 7.90347723e-02 7.90224298e-02 7.90100932e-02 7.89977623e-02 + 7.89854371e-02 7.89731178e-02 7.89608042e-02 7.89484964e-02 7.89361943e-02 + 7.89238979e-02 7.89116073e-02 7.88993225e-02 7.88870434e-02 7.88747700e-02 + 7.88625023e-02 7.88502404e-02 7.88379842e-02 7.88257337e-02 7.88134889e-02 + 7.88012498e-02 7.87890164e-02 7.87767887e-02 7.87645667e-02 7.87523504e-02 + 7.87401398e-02 7.87279348e-02 7.87157355e-02 7.87035419e-02 7.86913540e-02 + 7.86791717e-02 7.86669951e-02 7.86548241e-02 7.86426588e-02 7.86304991e-02 + 7.86183450e-02 7.86061966e-02 7.85940538e-02 7.85819167e-02 7.85697851e-02 + 7.85576592e-02 7.85455389e-02 7.85334242e-02 7.85213151e-02 7.85092116e-02 + 7.84971137e-02 7.84850214e-02 7.84729347e-02 7.84608535e-02 7.84487780e-02 + 7.84367080e-02 7.84246436e-02 7.84125847e-02 7.84005314e-02 7.83884837e-02 + 7.83764415e-02 7.83644048e-02 7.83523737e-02 7.83403482e-02 7.83283282e-02 + 7.83163137e-02 7.83043047e-02 7.82923013e-02 7.82803034e-02 7.82683110e-02 + 7.82563241e-02 7.82443427e-02 7.82323668e-02 7.82203964e-02 7.82084315e-02 + 7.81964721e-02 7.81845182e-02 7.81725697e-02 7.81606268e-02 7.81486893e-02 + 7.81367572e-02 7.81248307e-02 7.81129096e-02 7.81009939e-02 7.80890837e-02 + 7.80771790e-02 7.80652797e-02 7.80533858e-02 7.80414974e-02 7.80296144e-02 + 7.80177368e-02 7.80058646e-02 7.79939979e-02 7.79821366e-02 7.79702807e-02 + 7.79584302e-02 7.79465851e-02 7.79347454e-02 7.79229111e-02 7.79110821e-02 + 7.78992586e-02 7.78874404e-02 7.78756277e-02 7.78638202e-02 7.78520182e-02 + 7.78402215e-02 7.78284302e-02 7.78166443e-02 7.78048637e-02 7.77930884e-02 + 7.77813185e-02 7.77695539e-02 7.77577947e-02 7.77460408e-02 7.77342922e-02 + 7.77225490e-02 7.77108111e-02 7.76990785e-02 7.76873512e-02 7.76756292e-02 + 7.76639125e-02 7.76522011e-02 7.76404950e-02 7.76287942e-02 7.76170987e-02 + 7.76054085e-02 7.75937236e-02 7.75820439e-02 7.75703695e-02 7.75587004e-02 + 7.75470365e-02 7.75353780e-02 7.75237246e-02 7.75120765e-02 7.75004337e-02 + 7.74887961e-02 7.74771637e-02 7.74655366e-02 7.74539147e-02 7.74422981e-02 + 7.74306867e-02 7.74190805e-02 7.74074795e-02 7.73958837e-02 7.73842931e-02 + 7.73727078e-02 7.73611276e-02 7.73495527e-02 7.73379829e-02 7.73264183e-02 + 7.73148589e-02 7.73033047e-02 7.72917557e-02 7.72802118e-02 7.72686732e-02 + 7.72571396e-02 7.72456113e-02 7.72340881e-02 7.72225701e-02 7.72110572e-02 + 7.71995494e-02 7.71880468e-02 7.71765494e-02 7.71650571e-02 7.71535699e-02 + 7.71420878e-02 7.71306109e-02 7.71191391e-02 7.71076724e-02 7.70962108e-02 + 7.70847543e-02 7.70733030e-02 7.70618567e-02 7.70504155e-02 7.70389795e-02 + 7.70275485e-02 7.70161226e-02 7.70047018e-02 7.69932860e-02 7.69818754e-02 + 7.69704698e-02 7.69590693e-02 7.69476738e-02 7.69362834e-02 7.69248981e-02 + 7.69135178e-02 7.69021426e-02 7.68907724e-02 7.68794073e-02 7.68680472e-02 + 7.68566921e-02 7.68453420e-02 7.68339970e-02 7.68226570e-02 7.68113221e-02 + 7.67999921e-02 7.67886672e-02 7.67773472e-02 7.67660323e-02 7.67547224e-02 + 7.67434174e-02 7.67321175e-02 7.67208226e-02 7.67095326e-02 7.66982476e-02 + 7.66869676e-02 7.66756926e-02 7.66644225e-02 7.66531574e-02 7.66418973e-02 + 7.66306422e-02 7.66193920e-02 7.66081467e-02 7.65969064e-02 7.65856711e-02 + 7.65744407e-02 7.65632152e-02 7.65519946e-02 7.65407790e-02 7.65295684e-02 + 7.65183626e-02 7.65071618e-02 7.64959659e-02 7.64847749e-02 7.64735888e-02 + 7.64624076e-02 7.64512313e-02 7.64400599e-02 7.64288935e-02 7.64177319e-02 + 7.64065752e-02 7.63954233e-02 7.63842764e-02 7.63731343e-02 7.63619972e-02 + 7.63508648e-02 7.63397374e-02 7.63286148e-02 7.63174971e-02 7.63063842e-02 + 7.62952762e-02 7.62841730e-02 7.62730747e-02 7.62619813e-02 7.62508926e-02 + 7.62398088e-02 7.62287298e-02 7.62176557e-02 7.62065864e-02 7.61955219e-02 + 7.61844622e-02 7.61734074e-02 7.61623573e-02 7.61513121e-02 7.61402716e-02 + 7.61292360e-02 7.61182052e-02 7.61071791e-02 7.60961579e-02 7.60851414e-02 + 7.60741297e-02 7.60631228e-02 7.60521207e-02 7.60411233e-02 7.60301307e-02 + 7.60191429e-02 7.60081598e-02 7.59971815e-02 7.59862080e-02 7.59752392e-02 + 7.59642751e-02 7.59533158e-02 7.59423613e-02 7.59314115e-02 7.59204664e-02 + 7.59095260e-02 7.58985904e-02 7.58876595e-02 7.58767333e-02 7.58658119e-02 + 7.58548951e-02 7.58439831e-02 7.58330758e-02 7.58221731e-02 7.58112752e-02 + 7.58003820e-02 7.57894935e-02 7.57786096e-02 7.57677305e-02 7.57568560e-02 + 7.57459862e-02 7.57351211e-02 7.57242607e-02 7.57134049e-02 7.57025538e-02 + 7.56917074e-02 7.56808656e-02 7.56700285e-02 7.56591961e-02 7.56483683e-02 + 7.56375451e-02 7.56267266e-02 7.56159127e-02 7.56051035e-02 7.55942989e-02 + 7.55834989e-02 7.55727035e-02 7.55619128e-02 7.55511267e-02 7.55403452e-02 + 7.55295684e-02 7.55187961e-02 7.55080285e-02 7.54972654e-02 7.54865070e-02 + 7.54757531e-02 7.54650039e-02 7.54542592e-02 7.54435192e-02 7.54327837e-02 + 7.54220528e-02 7.54113264e-02 7.54006047e-02 7.53898875e-02 7.53791749e-02 + 7.53684669e-02 7.53577634e-02 7.53470644e-02 7.53363701e-02 7.53256803e-02 + 7.53149950e-02 7.53043143e-02 7.52936381e-02 7.52829665e-02 7.52722994e-02 + 7.52616368e-02 7.52509787e-02 7.52403252e-02 7.52296762e-02 7.52190318e-02 + 7.52083918e-02 7.51977564e-02 7.51871255e-02 7.51764990e-02 7.51658771e-02 + 7.51552597e-02 7.51446468e-02 7.51340384e-02 7.51234344e-02 7.51128350e-02 + 7.51022400e-02 7.50916496e-02 7.50810636e-02 7.50704821e-02 7.50599050e-02 + 7.50493324e-02 7.50387643e-02 7.50282007e-02 7.50176415e-02 7.50070868e-02 + 7.49965365e-02 7.49859907e-02 7.49754493e-02 7.49649123e-02 7.49543799e-02 + 7.49438518e-02 7.49333282e-02 7.49228090e-02 7.49122942e-02 7.49017839e-02 + 7.48912780e-02 7.48807765e-02 7.48702794e-02 7.48597868e-02 7.48492985e-02 + 7.48388147e-02 7.48283352e-02 7.48178602e-02 7.48073895e-02 7.47969233e-02 + 7.47864614e-02 7.47760040e-02 7.47655509e-02 7.47551022e-02 7.47446579e-02 + 7.47342179e-02 7.47237824e-02 7.47133512e-02 7.47029243e-02 7.46925019e-02 + 7.46820838e-02 7.46716700e-02 7.46612606e-02 7.46508556e-02 7.46404549e-02 + 7.46300586e-02 7.46196666e-02 7.46092789e-02 7.45988956e-02 7.45885166e-02 + 7.45781419e-02 7.45677716e-02 7.45574056e-02 7.45470439e-02 7.45366865e-02 + 7.45263335e-02 7.45159847e-02 7.45056403e-02 7.44953002e-02 7.44849644e-02 + 7.44746329e-02 7.44643056e-02 7.44539827e-02 7.44436641e-02 7.44333497e-02 + 7.44230397e-02 7.44127339e-02 7.44024324e-02 7.43921352e-02 7.43818423e-02 + 7.43715536e-02 7.43612692e-02 7.43509890e-02 7.43407132e-02 7.43304416e-02 + 7.43201742e-02 7.43099111e-02 7.42996522e-02 7.42893976e-02 7.42791473e-02 + 7.42689011e-02 7.42586593e-02 7.42484216e-02 7.42381882e-02 7.42279590e-02 + 7.42177341e-02 7.42075133e-02 7.41972968e-02 7.41870845e-02 7.41768765e-02 + 7.41666726e-02 7.41564729e-02 7.41462775e-02 7.41360863e-02 7.41258992e-02 + 7.41157164e-02 7.41055377e-02 7.40953633e-02 7.40851930e-02 7.40750269e-02 + 7.40648650e-02 7.40547073e-02 7.40445538e-02 7.40344044e-02 7.40242592e-02 + 7.40141182e-02 7.40039814e-02 7.39938487e-02 7.39837202e-02 7.39735958e-02 + 7.39634756e-02 7.39533595e-02 7.39432476e-02 7.39331398e-02 7.39230362e-02 + 7.39129367e-02 7.39028414e-02 7.38927502e-02 7.38826631e-02 7.38725802e-02 + 7.38625014e-02 7.38524267e-02 7.38423561e-02 7.38322896e-02 7.38222273e-02 + 7.38121691e-02 7.38021150e-02 7.37920650e-02 7.37820191e-02 7.37719773e-02 + 7.37619396e-02 7.37519060e-02 7.37418765e-02 7.37318510e-02 7.37218297e-02 + 7.37118125e-02 7.37017993e-02 7.36917902e-02 7.36817852e-02 7.36717843e-02 + 7.36617874e-02 7.36517946e-02 7.36418059e-02 7.36318212e-02 7.36218406e-02 + 7.36118641e-02 7.36018916e-02 7.35919231e-02 7.35819587e-02 7.35719984e-02 + 7.35620421e-02 7.35520898e-02 7.35421416e-02 7.35321974e-02 7.35222572e-02 + 7.35123211e-02 7.35023890e-02 7.34924610e-02 7.34825369e-02 7.34726169e-02 + 7.34627009e-02 7.34527889e-02 7.34428809e-02 7.34329769e-02 7.34230769e-02 + 7.34131809e-02 7.34032890e-02 7.33934010e-02 7.33835170e-02 7.33736370e-02 + 7.33637610e-02 7.33538890e-02 7.33440210e-02 7.33341569e-02 7.33242969e-02 + 7.33144408e-02 7.33045886e-02 7.32947405e-02 7.32848963e-02 7.32750561e-02 + 7.32652199e-02 7.32553876e-02 7.32455592e-02 7.32357348e-02 7.32259144e-02 + 7.32160979e-02 7.32062854e-02 7.31964768e-02 7.31866722e-02 7.31768715e-02 + 7.31670747e-02 7.31572819e-02 7.31474930e-02 7.31377080e-02 7.31279269e-02 + 7.31181498e-02 7.31083766e-02 7.30986073e-02 7.30888419e-02 7.30790805e-02 + 7.30693229e-02 7.30595693e-02 7.30498195e-02 7.30400737e-02 7.30303318e-02 + 7.30205937e-02 7.30108596e-02 7.30011293e-02 7.29914030e-02 7.29816805e-02 + 7.29719619e-02 7.29622472e-02 7.29525364e-02 7.29428294e-02 7.29331263e-02 + 7.29234271e-02 7.29137318e-02 7.29040403e-02 7.28943527e-02 7.28846689e-02 + 7.28749890e-02 7.28653130e-02 7.28556408e-02 7.28459725e-02 7.28363080e-02 + 7.28266473e-02 7.28169905e-02 7.28073376e-02 7.27976885e-02 7.27880432e-02 + 7.27784017e-02 7.27687641e-02 7.27591303e-02 7.27495003e-02 7.27398742e-02 + 7.27302519e-02 7.27206334e-02 7.27110187e-02 7.27014078e-02 7.26918007e-02 + 7.26821975e-02 7.26725980e-02 7.26630023e-02 7.26534105e-02 7.26438224e-02 + 7.26342382e-02 7.26246577e-02 7.26150810e-02 7.26055081e-02 7.25959390e-02 + 7.25863737e-02 7.25768121e-02 7.25672544e-02 7.25577004e-02 7.25481502e-02 + 7.25386037e-02 7.25290610e-02 7.25195221e-02 7.25099870e-02 7.25004556e-02 + 7.24909279e-02 7.24814040e-02 7.24718839e-02 7.24623675e-02 7.24528549e-02 + 7.24433460e-02 7.24338409e-02 7.24243395e-02 7.24148418e-02 7.24053479e-02 + 7.23958577e-02 7.23863712e-02 7.23768885e-02 7.23674095e-02 7.23579342e-02 + 7.23484626e-02 7.23389948e-02 7.23295307e-02 7.23200702e-02 7.23106135e-02 + 7.23011605e-02 7.22917112e-02 7.22822656e-02 7.22728238e-02 7.22633856e-02 + 7.22539511e-02 7.22445203e-02 7.22350932e-02 7.22256698e-02 7.22162500e-02 + 7.22068340e-02 7.21974216e-02 7.21880130e-02 7.21786080e-02 7.21692066e-02 + 7.21598090e-02 7.21504150e-02 7.21410247e-02 7.21316380e-02 7.21222550e-02 + 7.21128757e-02 7.21035000e-02 7.20941280e-02 7.20847596e-02 7.20753949e-02 + 7.20660339e-02 7.20566765e-02 7.20473227e-02 7.20379726e-02 7.20286261e-02 + 7.20192832e-02 7.20099440e-02 7.20006084e-02 7.19912765e-02 7.19819481e-02 + 7.19726234e-02 7.19633024e-02 7.19539849e-02 7.19446711e-02 7.19353608e-02 + 7.19260542e-02 7.19167512e-02 7.19074518e-02 7.18981560e-02 7.18888639e-02 + 7.18795753e-02 7.18702903e-02 7.18610089e-02 7.18517311e-02 7.18424569e-02 + 7.18331863e-02 7.18239193e-02 7.18146559e-02 7.18053960e-02 7.17961398e-02 + 7.17868871e-02 7.17776380e-02 7.17683924e-02 7.17591505e-02 7.17499121e-02 + 7.17406772e-02 7.17314460e-02 7.17222183e-02 7.17129941e-02 7.17037735e-02 + 7.16945565e-02 7.16853430e-02 7.16761331e-02 7.16669267e-02 7.16577239e-02 + 7.16485246e-02 7.16393289e-02 7.16301367e-02 7.16209480e-02 7.16117629e-02 + 7.16025813e-02 7.15934032e-02 7.15842287e-02 7.15750577e-02 7.15658902e-02 + 7.15567262e-02 7.15475658e-02 7.15384089e-02 7.15292555e-02 7.15201056e-02 + 7.15109592e-02 7.15018163e-02 7.14926769e-02 7.14835410e-02 7.14744087e-02 + 7.14652798e-02 7.14561544e-02 7.14470325e-02 7.14379142e-02 7.14287993e-02 + 7.14196878e-02 7.14105799e-02 7.14014755e-02 7.13923745e-02 7.13832770e-02 + 7.13741830e-02 7.13650925e-02 7.13560055e-02 7.13469219e-02 7.13378418e-02 + 7.13287651e-02 7.13196919e-02 7.13106222e-02 7.13015559e-02 7.12924931e-02 + 7.12834338e-02 7.12743779e-02 7.12653254e-02 7.12562764e-02 7.12472309e-02 + 7.12381888e-02 7.12291501e-02 7.12201149e-02 7.12110831e-02 7.12020547e-02 + 7.11930298e-02 7.11840083e-02 7.11749902e-02 7.11659756e-02 7.11569644e-02 + 7.11479566e-02 7.11389522e-02 7.11299512e-02 7.11209537e-02 7.11119596e-02 + 7.11029689e-02 7.10939816e-02 7.10849977e-02 7.10760172e-02 7.10670401e-02 + 7.10580664e-02 7.10490961e-02 7.10401292e-02 7.10311657e-02 7.10222056e-02 + 7.10132489e-02 7.10042956e-02 7.09953456e-02 7.09863990e-02 7.09774559e-02 + 7.09685161e-02 7.09595796e-02 7.09506466e-02 7.09417169e-02 7.09327906e-02 + 7.09238677e-02 7.09149481e-02 7.09060319e-02 7.08971191e-02 7.08882096e-02 + 7.08793035e-02 7.08704007e-02 7.08615013e-02 7.08526052e-02 7.08437125e-02 + 7.08348231e-02 7.08259371e-02 7.08170544e-02 7.08081751e-02 7.07992991e-02 + 7.07904264e-02 7.07815571e-02 7.07726911e-02 7.07638285e-02 7.07549691e-02 + 7.07461131e-02 7.07372604e-02 7.07284111e-02 7.07195650e-02 7.07107223e-02 + 7.07018829e-02 7.06930468e-02 7.06842141e-02 7.06753846e-02 7.06665584e-02 + 7.06577356e-02 7.06489160e-02 7.06400998e-02 7.06312868e-02 7.06224772e-02 + 7.06136708e-02 7.06048678e-02 7.05960680e-02 7.05872715e-02 7.05784783e-02 + 7.05696884e-02 7.05609018e-02 7.05521184e-02 7.05433384e-02 7.05345616e-02 + 1.00000000e+00 9.75894263e-01 9.53451752e-01 9.32489601e-01 9.12851907e-01 + 8.94404826e-01 8.77032714e-01 8.60635068e-01 8.45124065e-01 8.30422576e-01 + 8.16462554e-01 8.03183696e-01 7.90532350e-01 7.78460602e-01 7.66925506e-01 + 7.55888443e-01 7.45314577e-01 7.35172390e-01 7.25433287e-01 7.16071258e-01 + 7.07062580e-01 6.98385572e-01 6.90020370e-01 6.81948734e-01 6.74153887e-01 + 6.66620364e-01 6.59333880e-01 6.52281224e-01 6.45450150e-01 6.38829295e-01 + 6.32408091e-01 6.26176704e-01 6.20125961e-01 6.14247300e-01 6.08532716e-01 + 6.02974715e-01 5.97566276e-01 5.92300808e-01 5.87172122e-01 5.82174396e-01 + 5.77302151e-01 5.72550221e-01 5.67913735e-01 5.63388093e-01 5.58968948e-01 + 5.54652188e-01 5.50433918e-01 5.46310451e-01 5.42278287e-01 5.38334105e-01 + 5.34474753e-01 5.30697232e-01 5.26998691e-01 5.23376415e-01 5.19827818e-01 + 5.16350438e-01 5.12941922e-01 5.09600027e-01 5.06322612e-01 5.03107629e-01 + 4.99953120e-01 4.96857213e-01 4.93818117e-01 4.90834114e-01 4.87903560e-01 + 4.85024878e-01 4.82196556e-01 4.79417141e-01 4.76685242e-01 4.73999519e-01 + 4.71358685e-01 4.68761505e-01 4.66206788e-01 4.63693390e-01 4.61220209e-01 + 4.58786184e-01 4.56390292e-01 4.54031548e-01 4.51709002e-01 4.49421737e-01 + 4.47168870e-01 4.44949545e-01 4.42762941e-01 4.40608259e-01 4.38484731e-01 + 4.36391613e-01 4.34328187e-01 4.32293756e-01 4.30287649e-01 4.28309213e-01 + 4.26357819e-01 4.24432857e-01 4.22533734e-01 4.20659877e-01 4.18810733e-01 + 4.16985761e-01 4.15184441e-01 4.13406264e-01 4.11650741e-01 4.09917394e-01 + 4.08205761e-01 4.06515390e-01 4.04845847e-01 4.03196706e-01 4.01567556e-01 + 3.99957996e-01 3.98367636e-01 3.96796098e-01 3.95243014e-01 3.93708024e-01 + 3.92190780e-01 3.90690944e-01 3.89208184e-01 3.87742180e-01 3.86292617e-01 + 3.84859191e-01 3.83441605e-01 3.82039569e-01 3.80652800e-01 3.79281024e-01 + 3.77923973e-01 3.76581385e-01 3.75253005e-01 3.73938583e-01 3.72637878e-01 + 3.71350652e-01 3.70076675e-01 3.68815719e-01 3.67567566e-01 3.66332000e-01 + 3.65108810e-01 3.63897792e-01 3.62698745e-01 3.61511473e-01 3.60335785e-01 + 3.59171493e-01 3.58018415e-01 3.56876371e-01 3.55745187e-01 3.54624691e-01 + 3.53514717e-01 3.52415101e-01 3.51325683e-01 3.50246306e-01 3.49176816e-01 + 3.48117064e-01 3.47066903e-01 3.46026189e-01 3.44994782e-01 3.43972542e-01 + 3.42959337e-01 3.41955032e-01 3.40959498e-01 3.39972609e-01 3.38994241e-01 + 3.38024270e-01 3.37062579e-01 3.36109049e-01 3.35163566e-01 3.34226018e-01 + 3.33296293e-01 3.32374284e-01 3.31459885e-01 3.30552992e-01 3.29653502e-01 + 3.28761315e-01 3.27876333e-01 3.26998460e-01 3.26127600e-01 3.25263662e-01 + 3.24406553e-01 3.23556184e-01 3.22712468e-01 3.21875318e-01 3.21044649e-01 + 3.20220378e-01 3.19402424e-01 3.18590706e-01 3.17785145e-01 3.16985665e-01 + 3.16192188e-01 3.15404639e-01 3.14622947e-01 3.13847038e-01 3.13076841e-01 + 3.12312287e-01 3.11553306e-01 3.10799833e-01 3.10051800e-01 3.09309142e-01 + 3.08571795e-01 3.07839697e-01 3.07112784e-01 3.06390997e-01 3.05674275e-01 + 3.04962560e-01 3.04255793e-01 3.03553917e-01 3.02856876e-01 3.02164615e-01 + 3.01477079e-01 3.00794216e-01 3.00115971e-01 2.99442294e-01 2.98773134e-01 + 2.98108439e-01 2.97448161e-01 2.96792252e-01 2.96140662e-01 2.95493345e-01 + 2.94850254e-01 2.94211344e-01 2.93576570e-01 2.92945886e-01 2.92319250e-01 + 2.91696618e-01 2.91077947e-01 2.90463197e-01 2.89852325e-01 2.89245291e-01 + 2.88642055e-01 2.88042577e-01 2.87446820e-01 2.86854743e-01 2.86266311e-01 + 2.85681484e-01 2.85100228e-01 2.84522505e-01 2.83948280e-01 2.83377517e-01 + 2.82810183e-01 2.82246243e-01 2.81685662e-01 2.81128409e-01 2.80574450e-01 + 2.80023753e-01 2.79476286e-01 2.78932017e-01 2.78390916e-01 2.77852951e-01 + 2.77318094e-01 2.76786313e-01 2.76257580e-01 2.75731865e-01 2.75209140e-01 + 2.74689377e-01 2.74172548e-01 2.73658625e-01 2.73147581e-01 2.72639389e-01 + 2.72134024e-01 2.71631458e-01 2.71131667e-01 2.70634624e-01 2.70140305e-01 + 2.69648684e-01 2.69159738e-01 2.68673442e-01 2.68189772e-01 2.67708706e-01 + 2.67230218e-01 2.66754287e-01 2.66280890e-01 2.65810005e-01 2.65341608e-01 + 2.64875680e-01 2.64412197e-01 2.63951138e-01 2.63492483e-01 2.63036211e-01 + 2.62582301e-01 2.62130732e-01 2.61681486e-01 2.61234541e-01 2.60789879e-01 + 2.60347479e-01 2.59907323e-01 2.59469393e-01 2.59033668e-01 2.58600131e-01 + 2.58168764e-01 2.57739549e-01 2.57312467e-01 2.56887501e-01 2.56464633e-01 + 2.56043847e-01 2.55625126e-01 2.55208452e-01 2.54793809e-01 2.54381180e-01 + 2.53970550e-01 2.53561902e-01 2.53155220e-01 2.52750489e-01 2.52347693e-01 + 2.51946816e-01 2.51547844e-01 2.51150761e-01 2.50755553e-01 2.50362204e-01 + 2.49970701e-01 2.49581029e-01 2.49193173e-01 2.48807120e-01 2.48422856e-01 + 2.48040367e-01 2.47659639e-01 2.47280658e-01 2.46903413e-01 2.46527888e-01 + 2.46154072e-01 2.45781951e-01 2.45411513e-01 2.45042745e-01 2.44675634e-01 + 2.44310168e-01 2.43946335e-01 2.43584122e-01 2.43223518e-01 2.42864511e-01 + 2.42507089e-01 2.42151241e-01 2.41796954e-01 2.41444218e-01 2.41093021e-01 + 2.40743352e-01 2.40395201e-01 2.40048555e-01 2.39703404e-01 2.39359739e-01 + 2.39017547e-01 2.38676818e-01 2.38337542e-01 2.37999710e-01 2.37663309e-01 + 2.37328332e-01 2.36994766e-01 2.36662603e-01 2.36331833e-01 2.36002446e-01 + 2.35674432e-01 2.35347783e-01 2.35022487e-01 2.34698537e-01 2.34375923e-01 + 2.34054635e-01 2.33734666e-01 2.33416004e-01 2.33098643e-01 2.32782573e-01 + 2.32467784e-01 2.32154270e-01 2.31842020e-01 2.31531028e-01 2.31221283e-01 + 2.30912778e-01 2.30605504e-01 2.30299454e-01 2.29994620e-01 2.29690992e-01 + 2.29388564e-01 2.29087328e-01 2.28787275e-01 2.28488398e-01 2.28190689e-01 + 2.27894141e-01 2.27598746e-01 2.27304497e-01 2.27011386e-01 2.26719406e-01 + 2.26428550e-01 2.26138810e-01 2.25850180e-01 2.25562652e-01 2.25276219e-01 + 2.24990875e-01 2.24706613e-01 2.24423425e-01 2.24141305e-01 2.23860246e-01 + 2.23580243e-01 2.23301287e-01 2.23023372e-01 2.22746493e-01 2.22470643e-01 + 2.22195814e-01 2.21922002e-01 2.21649200e-01 2.21377401e-01 2.21106599e-01 + 2.20836789e-01 2.20567964e-01 2.20300119e-01 2.20033247e-01 2.19767342e-01 + 2.19502400e-01 2.19238413e-01 2.18975376e-01 2.18713284e-01 2.18452130e-01 + 2.18191910e-01 2.17932618e-01 2.17674247e-01 2.17416794e-01 2.17160252e-01 + 2.16904616e-01 2.16649880e-01 2.16396040e-01 2.16143090e-01 2.15891025e-01 + 2.15639840e-01 2.15389530e-01 2.15140089e-01 2.14891513e-01 2.14643796e-01 + 2.14396935e-01 2.14150923e-01 2.13905756e-01 2.13661429e-01 2.13417937e-01 + 2.13175276e-01 2.12933441e-01 2.12692427e-01 2.12452229e-01 2.12212843e-01 + 2.11974265e-01 2.11736490e-01 2.11499513e-01 2.11263330e-01 2.11027936e-01 + 2.10793328e-01 2.10559500e-01 2.10326449e-01 2.10094169e-01 2.09862658e-01 + 2.09631910e-01 2.09401922e-01 2.09172689e-01 2.08944208e-01 2.08716473e-01 + 2.08489481e-01 2.08263229e-01 2.08037711e-01 2.07812924e-01 2.07588865e-01 + 2.07365528e-01 2.07142911e-01 2.06921010e-01 2.06699820e-01 2.06479337e-01 + 2.06259559e-01 2.06040481e-01 2.05822100e-01 2.05604412e-01 2.05387413e-01 + 2.05171099e-01 2.04955468e-01 2.04740515e-01 2.04526237e-01 2.04312630e-01 + 2.04099691e-01 2.03887417e-01 2.03675803e-01 2.03464847e-01 2.03254545e-01 + 2.03044894e-01 2.02835891e-01 2.02627531e-01 2.02419812e-01 2.02212731e-01 + 2.02006284e-01 2.01800468e-01 2.01595280e-01 2.01390716e-01 2.01186774e-01 + 2.00983451e-01 2.00780742e-01 2.00578646e-01 2.00377158e-01 2.00176277e-01 + 1.99975998e-01 1.99776320e-01 1.99577238e-01 1.99378751e-01 1.99180854e-01 + 1.98983546e-01 1.98786822e-01 1.98590681e-01 1.98395120e-01 1.98200135e-01 + 1.98005724e-01 1.97811884e-01 1.97618612e-01 1.97425905e-01 1.97233761e-01 + 1.97042177e-01 1.96851151e-01 1.96660678e-01 1.96470758e-01 1.96281387e-01 + 1.96092562e-01 1.95904281e-01 1.95716541e-01 1.95529341e-01 1.95342676e-01 + 1.95156545e-01 1.94970945e-01 1.94785873e-01 1.94601328e-01 1.94417306e-01 + 1.94233805e-01 1.94050823e-01 1.93868357e-01 1.93686404e-01 1.93504963e-01 + 1.93324031e-01 1.93143606e-01 1.92963685e-01 1.92784265e-01 1.92605345e-01 + 1.92426923e-01 1.92248995e-01 1.92071560e-01 1.91894616e-01 1.91718159e-01 + 1.91542189e-01 1.91366702e-01 1.91191696e-01 1.91017170e-01 1.90843121e-01 + 1.90669546e-01 1.90496445e-01 1.90323814e-01 1.90151652e-01 1.89979956e-01 + 1.89808724e-01 1.89637954e-01 1.89467644e-01 1.89297793e-01 1.89128397e-01 + 1.88959456e-01 1.88790966e-01 1.88622926e-01 1.88455335e-01 1.88288189e-01 + 1.88121487e-01 1.87955227e-01 1.87789407e-01 1.87624025e-01 1.87459079e-01 + 1.87294568e-01 1.87130489e-01 1.86966840e-01 1.86803620e-01 1.86640827e-01 + 1.86478458e-01 1.86316513e-01 1.86154989e-01 1.85993884e-01 1.85833197e-01 + 1.85672925e-01 1.85513068e-01 1.85353622e-01 1.85194587e-01 1.85035961e-01 + 1.84877742e-01 1.84719927e-01 1.84562517e-01 1.84405508e-01 1.84248899e-01 + 1.84092688e-01 1.83936874e-01 1.83781455e-01 1.83626429e-01 1.83471795e-01 + 1.83317551e-01 1.83163695e-01 1.83010226e-01 1.82857142e-01 1.82704442e-01 + 1.82552123e-01 1.82400185e-01 1.82248626e-01 1.82097444e-01 1.81946637e-01 + 1.81796204e-01 1.81646144e-01 1.81496455e-01 1.81347136e-01 1.81198184e-01 + 1.81049599e-01 1.80901378e-01 1.80753522e-01 1.80606027e-01 1.80458892e-01 + 1.80312117e-01 1.80165699e-01 1.80019637e-01 1.79873930e-01 1.79728576e-01 + 1.79583574e-01 1.79438922e-01 1.79294620e-01 1.79150665e-01 1.79007056e-01 + 1.78863792e-01 1.78720871e-01 1.78578292e-01 1.78436054e-01 1.78294156e-01 + 1.78152595e-01 1.78011371e-01 1.77870482e-01 1.77729928e-01 1.77589706e-01 + 1.77449815e-01 1.77310255e-01 1.77171023e-01 1.77032119e-01 1.76893540e-01 + 1.76755287e-01 1.76617358e-01 1.76479751e-01 1.76342465e-01 1.76205499e-01 + 1.76068851e-01 1.75932521e-01 1.75796507e-01 1.75660808e-01 1.75525423e-01 + 1.75390351e-01 1.75255589e-01 1.75121138e-01 1.74986996e-01 1.74853162e-01 + 1.74719634e-01 1.74586412e-01 1.74453494e-01 1.74320879e-01 1.74188566e-01 + 1.74056554e-01 1.73924842e-01 1.73793428e-01 1.73662312e-01 1.73531492e-01 + 1.73400967e-01 1.73270736e-01 1.73140798e-01 1.73011152e-01 1.72881797e-01 + 1.72752732e-01 1.72623955e-01 1.72495466e-01 1.72367263e-01 1.72239346e-01 + 1.72111713e-01 1.71984363e-01 1.71857296e-01 1.71730510e-01 1.71604004e-01 + 1.71477777e-01 1.71351828e-01 1.71226157e-01 1.71100761e-01 1.70975641e-01 + 1.70850795e-01 1.70726222e-01 1.70601921e-01 1.70477891e-01 1.70354131e-01 + 1.70230640e-01 1.70107418e-01 1.69984462e-01 1.69861773e-01 1.69739349e-01 + 1.69617190e-01 1.69495294e-01 1.69373660e-01 1.69252288e-01 1.69131176e-01 + 1.69010324e-01 1.68889731e-01 1.68769395e-01 1.68649317e-01 1.68529494e-01 + 1.68409926e-01 1.68290613e-01 1.68171552e-01 1.68052744e-01 1.67934188e-01 + 1.67815882e-01 1.67697825e-01 1.67580018e-01 1.67462458e-01 1.67345146e-01 + 1.67228079e-01 1.67111258e-01 1.66994682e-01 1.66878349e-01 1.66762259e-01 + 1.66646411e-01 1.66530804e-01 1.66415437e-01 1.66300309e-01 1.66185421e-01 + 1.66070770e-01 1.65956356e-01 1.65842178e-01 1.65728235e-01 1.65614527e-01 + 1.65501053e-01 1.65387812e-01 1.65274803e-01 1.65162025e-01 1.65049477e-01 + 1.64937160e-01 1.64825071e-01 1.64713211e-01 1.64601578e-01 1.64490172e-01 + 1.64378991e-01 1.64268036e-01 1.64157305e-01 1.64046798e-01 1.63936514e-01 + 1.63826452e-01 1.63716611e-01 1.63606991e-01 1.63497591e-01 1.63388409e-01 + 1.63279447e-01 1.63170702e-01 1.63062174e-01 1.62953862e-01 1.62845766e-01 + 1.62737885e-01 1.62630217e-01 1.62522764e-01 1.62415523e-01 1.62308493e-01 + 1.62201676e-01 1.62095069e-01 1.61988671e-01 1.61882483e-01 1.61776504e-01 + 1.61670732e-01 1.61565168e-01 1.61459810e-01 1.61354658e-01 1.61249711e-01 + 1.61144969e-01 1.61040431e-01 1.60936095e-01 1.60831963e-01 1.60728032e-01 + 1.60624302e-01 1.60520773e-01 1.60417444e-01 1.60314314e-01 1.60211383e-01 + 1.60108650e-01 1.60006114e-01 1.59903775e-01 1.59801632e-01 1.59699684e-01 + 1.59597932e-01 1.59496373e-01 1.59395009e-01 1.59293837e-01 1.59192858e-01 + 1.59092070e-01 1.58991474e-01 1.58891068e-01 1.58790852e-01 1.58690826e-01 + 1.58590988e-01 1.58491339e-01 1.58391877e-01 1.58292602e-01 1.58193514e-01 + 1.58094612e-01 1.57995894e-01 1.57897362e-01 1.57799013e-01 1.57700849e-01 + 1.57602867e-01 1.57505067e-01 1.57407450e-01 1.57310013e-01 1.57212758e-01 + 1.57115682e-01 1.57018786e-01 1.56922069e-01 1.56825531e-01 1.56729171e-01 + 1.56632988e-01 1.56536982e-01 1.56441152e-01 1.56345498e-01 1.56250019e-01 + 1.56154715e-01 1.56059585e-01 1.55964629e-01 1.55869846e-01 1.55775235e-01 + 1.55680797e-01 1.55586530e-01 1.55492434e-01 1.55398509e-01 1.55304754e-01 + 1.55211168e-01 1.55117751e-01 1.55024502e-01 1.54931422e-01 1.54838509e-01 + 1.54745763e-01 1.54653183e-01 1.54560770e-01 1.54468522e-01 1.54376439e-01 + 1.54284520e-01 1.54192765e-01 1.54101174e-01 1.54009746e-01 1.53918481e-01 + 1.53827377e-01 1.53736435e-01 1.53645654e-01 1.53555034e-01 1.53464574e-01 + 1.53374274e-01 1.53284132e-01 1.53194150e-01 1.53104326e-01 1.53014660e-01 + 1.52925151e-01 1.52835798e-01 1.52746603e-01 1.52657563e-01 1.52568679e-01 + 1.52479950e-01 1.52391376e-01 1.52302955e-01 1.52214689e-01 1.52126576e-01 + 1.52038615e-01 1.51950807e-01 1.51863151e-01 1.51775647e-01 1.51688293e-01 + 1.51601091e-01 1.51514038e-01 1.51427135e-01 1.51340382e-01 1.51253778e-01 + 1.51167322e-01 1.51081014e-01 1.50994854e-01 1.50908841e-01 1.50822975e-01 + 1.50737255e-01 1.50651681e-01 1.50566253e-01 1.50480970e-01 1.50395832e-01 + 1.50310838e-01 1.50225988e-01 1.50141281e-01 1.50056718e-01 1.49972298e-01 + 1.49888019e-01 1.49803883e-01 1.49719888e-01 1.49636035e-01 1.49552322e-01 + 1.49468749e-01 1.49385316e-01 1.49302023e-01 1.49218869e-01 1.49135854e-01 + 1.49052977e-01 1.48970239e-01 1.48887638e-01 1.48805174e-01 1.48722847e-01 + 1.48640656e-01 1.48558602e-01 1.48476683e-01 1.48394900e-01 1.48313252e-01 + 1.48231738e-01 1.48150359e-01 1.48069113e-01 1.47988001e-01 1.47907022e-01 + 1.47826176e-01 1.47745463e-01 1.47664881e-01 1.47584431e-01 1.47504113e-01 + 1.47423925e-01 1.47343868e-01 1.47263942e-01 1.47184145e-01 1.47104478e-01 + 1.47024940e-01 1.46945531e-01 1.46866251e-01 1.46787099e-01 1.46708074e-01 + 1.46629177e-01 1.46550407e-01 1.46471764e-01 1.46393248e-01 1.46314857e-01 + 1.46236593e-01 1.46158454e-01 1.46080440e-01 1.46002551e-01 1.45924786e-01 + 1.45847145e-01 1.45769628e-01 1.45692235e-01 1.45614965e-01 1.45537817e-01 + 1.45460792e-01 1.45383890e-01 1.45307109e-01 1.45230449e-01 1.45153911e-01 + 1.45077494e-01 1.45001197e-01 1.44925021e-01 1.44848964e-01 1.44773027e-01 + 1.44697209e-01 1.44621511e-01 1.44545931e-01 1.44470469e-01 1.44395126e-01 + 1.44319900e-01 1.44244791e-01 1.44169800e-01 1.44094926e-01 1.44020168e-01 + 1.43945527e-01 1.43871001e-01 1.43796591e-01 1.43722296e-01 1.43648117e-01 + 1.43574052e-01 1.43500101e-01 1.43426265e-01 1.43352542e-01 1.43278934e-01 + 1.43205438e-01 1.43132055e-01 1.43058785e-01 1.42985628e-01 1.42912583e-01 + 1.42839649e-01 1.42766827e-01 1.42694116e-01 1.42621516e-01 1.42549027e-01 + 1.42476649e-01 1.42404380e-01 1.42332222e-01 1.42260172e-01 1.42188233e-01 + 1.42116402e-01 1.42044680e-01 1.41973066e-01 1.41901561e-01 1.41830164e-01 + 1.41758874e-01 1.41687692e-01 1.41616617e-01 1.41545648e-01 1.41474786e-01 + 1.41404031e-01 1.41333382e-01 1.41262838e-01 1.41192400e-01 1.41122067e-01 + 1.41051839e-01 1.40981716e-01 1.40911698e-01 1.40841783e-01 1.40771973e-01 + 1.40702266e-01 1.40632663e-01 1.40563163e-01 1.40493766e-01 1.40424471e-01 + 1.40355279e-01 1.40286189e-01 1.40217202e-01 1.40148315e-01 1.40079531e-01 + 1.40010847e-01 1.39942264e-01 1.39873782e-01 1.39805401e-01 1.39737119e-01 + 1.39668938e-01 1.39600856e-01 1.39532874e-01 1.39464991e-01 1.39397207e-01 + 1.39329522e-01 1.39261935e-01 1.39194446e-01 1.39127056e-01 1.39059763e-01 + 1.38992568e-01 1.38925470e-01 1.38858469e-01 1.38791565e-01 1.38724758e-01 + 1.38658047e-01 1.38591432e-01 1.38524913e-01 1.38458490e-01 1.38392162e-01 + 1.38325930e-01 1.38259792e-01 1.38193750e-01 1.38127801e-01 1.38061947e-01 + 1.37996188e-01 1.37930522e-01 1.37864950e-01 1.37799471e-01 1.37734085e-01 + 1.37668793e-01 1.37603593e-01 1.37538485e-01 1.37473471e-01 1.37408548e-01 + 1.37343717e-01 1.37278977e-01 1.37214330e-01 1.37149773e-01 1.37085308e-01 + 1.37020933e-01 1.36956649e-01 1.36892455e-01 1.36828351e-01 1.36764338e-01 + 1.36700414e-01 1.36636580e-01 1.36572835e-01 1.36509179e-01 1.36445612e-01 + 1.36382134e-01 1.36318745e-01 1.36255443e-01 1.36192230e-01 1.36129105e-01 + 1.36066067e-01 1.36003117e-01 1.35940254e-01 1.35877478e-01 1.35814789e-01 + 1.35752187e-01 1.35689672e-01 1.35627242e-01 1.35564899e-01 1.35502641e-01 + 1.35440470e-01 1.35378384e-01 1.35316383e-01 1.35254467e-01 1.35192636e-01 + 1.35130890e-01 1.35069228e-01 1.35007651e-01 1.34946158e-01 1.34884748e-01 + 1.34823423e-01 1.34762181e-01 1.34701022e-01 1.34639947e-01 1.34578955e-01 + 1.34518045e-01 1.34457218e-01 1.34396474e-01 1.34335812e-01 1.34275232e-01 + 1.34214733e-01 1.34154317e-01 1.34093982e-01 1.34033728e-01 1.33973556e-01 + 1.33913464e-01 1.33853453e-01 1.33793523e-01 1.33733673e-01 1.33673904e-01 + 1.33614214e-01 1.33554605e-01 1.33495075e-01 1.33435625e-01 1.33376254e-01 + 1.33316962e-01 1.33257749e-01 1.33198615e-01 1.33139560e-01 1.33080583e-01 + 1.33021685e-01 1.32962864e-01 1.32904122e-01 1.32845457e-01 1.32786870e-01 + 1.32728361e-01 1.32669928e-01 1.32611573e-01 1.32553295e-01 1.32495093e-01 + 1.32436968e-01 1.32378920e-01 1.32320948e-01 1.32263052e-01 1.32205232e-01 + 1.32147487e-01 1.32089818e-01 1.32032225e-01 1.31974707e-01 1.31917264e-01 + 1.31859896e-01 1.31802603e-01 1.31745384e-01 1.31688240e-01 1.31631170e-01 + 1.31574174e-01 1.31517252e-01 1.31460404e-01 1.31403630e-01 1.31346929e-01 + 1.31290301e-01 1.31233747e-01 1.31177266e-01 1.31120857e-01 1.31064522e-01 + 1.31008258e-01 1.30952068e-01 1.30895949e-01 1.30839903e-01 1.30783928e-01 + 1.30728025e-01 1.30672194e-01 1.30616435e-01 1.30560746e-01 1.30505129e-01 + 1.30449583e-01 1.30394108e-01 1.30338703e-01 1.30283369e-01 1.30228105e-01 + 1.30172912e-01 1.30117789e-01 1.30062736e-01 1.30007752e-01 1.29952839e-01 + 1.29897994e-01 1.29843219e-01 1.29788514e-01 1.29733877e-01 1.29679310e-01 + 1.29624811e-01 1.29570381e-01 1.29516019e-01 1.29461726e-01 1.29407501e-01 + 1.29353344e-01 1.29299255e-01 1.29245234e-01 1.29191280e-01 1.29137394e-01 + 1.29083575e-01 1.29029824e-01 1.28976140e-01 1.28922522e-01 1.28868972e-01 + 1.28815488e-01 1.28762070e-01 1.28708719e-01 1.28655435e-01 1.28602216e-01 + 1.28549063e-01 1.28495977e-01 1.28442955e-01 1.28390000e-01 1.28337110e-01 + 1.28284285e-01 1.28231526e-01 1.28178831e-01 1.28126202e-01 1.28073637e-01 + 1.28021137e-01 1.27968701e-01 1.27916330e-01 1.27864023e-01 1.27811780e-01 + 1.27759601e-01 1.27707486e-01 1.27655434e-01 1.27603447e-01 1.27551522e-01 + 1.27499661e-01 1.27447864e-01 1.27396129e-01 1.27344457e-01 1.27292848e-01 + 1.27241302e-01 1.27189818e-01 1.27138397e-01 1.27087038e-01 1.27035742e-01 + 1.26984507e-01 1.26933334e-01 1.26882223e-01 1.26831174e-01 1.26780187e-01 + 1.26729260e-01 1.26678396e-01 1.26627592e-01 1.26576849e-01 1.26526168e-01 + 1.26475547e-01 1.26424987e-01 1.26374487e-01 1.26324048e-01 1.26273670e-01 + 1.26223351e-01 1.26173093e-01 1.26122894e-01 1.26072756e-01 1.26022677e-01 + 1.25972658e-01 1.25922698e-01 1.25872798e-01 1.25822957e-01 1.25773176e-01 + 1.25723453e-01 1.25673789e-01 1.25624184e-01 1.25574638e-01 1.25525150e-01 + 1.25475721e-01 1.25426350e-01 1.25377037e-01 1.25327782e-01 1.25278586e-01 + 1.25229447e-01 1.25180366e-01 1.25131343e-01 1.25082377e-01 1.25033469e-01 + 1.24984618e-01 1.24935824e-01 1.24887088e-01 1.24838408e-01 1.24789785e-01 + 1.24741219e-01 1.24692710e-01 1.24644257e-01 1.24595861e-01 1.24547521e-01 + 1.24499237e-01 1.24451010e-01 1.24402838e-01 1.24354722e-01 1.24306662e-01 + 1.24258658e-01 1.24210709e-01 1.24162816e-01 1.24114978e-01 1.24067195e-01 + 1.24019468e-01 1.23971795e-01 1.23924178e-01 1.23876615e-01 1.23829107e-01 + 1.23781654e-01 1.23734255e-01 1.23686910e-01 1.23639620e-01 1.23592384e-01 + 1.23545202e-01 1.23498075e-01 1.23451001e-01 1.23403980e-01 1.23357014e-01 + 1.23310101e-01 1.23263242e-01 1.23216436e-01 1.23169683e-01 1.23122983e-01 + 1.23076337e-01 1.23029743e-01 1.22983202e-01 1.22936715e-01 1.22890279e-01 + 1.22843897e-01 1.22797567e-01 1.22751289e-01 1.22705063e-01 1.22658890e-01 + 1.22612769e-01 1.22566700e-01 1.22520682e-01 1.22474717e-01 1.22428803e-01 + 1.22382941e-01 1.22337130e-01 1.22291371e-01 1.22245663e-01 1.22200006e-01 + 1.22154400e-01 1.22108845e-01 1.22063342e-01 1.22017889e-01 1.21972487e-01 + 1.21927135e-01 1.21881834e-01 1.21836584e-01 1.21791383e-01 1.21746234e-01 + 1.21701134e-01 1.21656084e-01 1.21611085e-01 1.21566135e-01 1.21521235e-01 + 1.21476385e-01 1.21431584e-01 1.21386833e-01 1.21342131e-01 1.21297479e-01 + 1.21252876e-01 1.21208322e-01 1.21163817e-01 1.21119362e-01 1.21074955e-01 + 1.21030597e-01 1.20986287e-01 1.20942026e-01 1.20897814e-01 1.20853651e-01 + 1.20809535e-01 1.20765468e-01 1.20721449e-01 1.20677478e-01 1.20633555e-01 + 1.20589681e-01 1.20545854e-01 1.20502074e-01 1.20458343e-01 1.20414659e-01 + 1.20371022e-01 1.20327433e-01 1.20283891e-01 1.20240396e-01 1.20196949e-01 + 1.20153549e-01 1.20110195e-01 1.20066889e-01 1.20023629e-01 1.19980416e-01 + 1.19937250e-01 1.19894130e-01 1.19851056e-01 1.19808030e-01 1.19765049e-01 + 1.19722115e-01 1.19679226e-01 1.19636384e-01 1.19593588e-01 1.19550838e-01 + 1.19508133e-01 1.19465474e-01 1.19422861e-01 1.19380294e-01 1.19337772e-01 + 1.19295295e-01 1.19252863e-01 1.19210477e-01 1.19168136e-01 1.19125841e-01 + 1.19083590e-01 1.19041384e-01 1.18999223e-01 1.18957106e-01 1.18915035e-01 + 1.18873008e-01 1.18831025e-01 1.18789087e-01 1.18747194e-01 1.18705344e-01 + 1.18663539e-01 1.18621778e-01 1.18580061e-01 1.18538388e-01 1.18496759e-01 + 1.18455174e-01 1.18413632e-01 1.18372134e-01 1.18330680e-01 1.18289269e-01 + 1.18247902e-01 1.18206578e-01 1.18165298e-01 1.18124060e-01 1.18082866e-01 + 1.18041715e-01 1.18000607e-01 1.17959541e-01 1.17918519e-01 1.17877539e-01 + 1.17836602e-01 1.17795708e-01 1.17754856e-01 1.17714047e-01 1.17673280e-01 + 1.17632556e-01 1.17591873e-01 1.17551233e-01 1.17510635e-01 1.17470079e-01 + 1.17429565e-01 1.17389093e-01 1.17348662e-01 1.17308274e-01 1.17267927e-01 + 1.17227622e-01 1.17187358e-01 1.17147135e-01 1.17106955e-01 1.17066815e-01 + 1.17026717e-01 1.16986659e-01 1.16946643e-01 1.16906668e-01 1.16866734e-01 + 1.16826841e-01 1.16786988e-01 1.16747177e-01 1.16707406e-01 1.16667676e-01 + 1.16627986e-01 1.16588337e-01 1.16548728e-01 1.16509159e-01 1.16469631e-01 + 1.16430143e-01 1.16390695e-01 1.16351287e-01 1.16311919e-01 1.16272591e-01 + 1.16233303e-01 1.16194055e-01 1.16154846e-01 1.16115678e-01 1.16076548e-01 + 1.16037459e-01 1.15998408e-01 1.15959397e-01 1.15920426e-01 1.15881494e-01 + 1.15842601e-01 1.15803747e-01 1.15764932e-01 1.15726156e-01 1.15687419e-01 + 1.15648721e-01 1.15610062e-01 1.15571441e-01 1.15532859e-01 1.15494316e-01 + 1.15455812e-01 1.15417345e-01 1.15378918e-01 1.15340528e-01 1.15302177e-01 + 1.15263864e-01 1.15225590e-01 1.15187353e-01 1.15149155e-01 1.15110994e-01 + 1.15072871e-01 1.15034786e-01 1.14996739e-01 1.14958730e-01 1.14920759e-01 + 1.14882824e-01 1.14844928e-01 1.14807069e-01 1.14769247e-01 1.14731463e-01 + 1.14693716e-01 1.14656006e-01 1.14618334e-01 1.14580699e-01 1.14543100e-01 + 1.14505539e-01 1.14468014e-01 1.14430527e-01 1.14393076e-01 1.14355662e-01 + 1.14318284e-01 1.14280944e-01 1.14243640e-01 1.14206372e-01 1.14169141e-01 + 1.14131946e-01 1.14094787e-01 1.14057665e-01 1.14020579e-01 1.13983529e-01 + 1.13946515e-01 1.13909538e-01 1.13872596e-01 1.13835690e-01 1.13798820e-01 + 1.13761986e-01 1.13725188e-01 1.13688425e-01 1.13651698e-01 1.13615006e-01 + 1.13578350e-01 1.13541730e-01 1.13505144e-01 1.13468595e-01 1.13432080e-01 + 1.13395601e-01 1.13359156e-01 1.13322747e-01 1.13286373e-01 1.13250035e-01 + 1.13213730e-01 1.13177461e-01 1.13141227e-01 1.13105028e-01 1.13068863e-01 + 1.13032733e-01 1.12996637e-01 1.12960576e-01 1.12924550e-01 1.12888558e-01 + 1.12852600e-01 1.12816677e-01 1.12780788e-01 1.12744933e-01 1.12709112e-01 + 1.12673326e-01 1.12637574e-01 1.12601855e-01 1.12566171e-01 1.12530520e-01 + 1.12494904e-01 1.12459321e-01 1.12423772e-01 1.12388256e-01 1.12352774e-01 + 1.12317326e-01 1.12281911e-01 1.12246530e-01 1.12211182e-01 1.12175868e-01 + 1.12140587e-01 1.12105339e-01 1.12070125e-01 1.12034943e-01 1.11999795e-01 + 1.11964679e-01 1.11929597e-01 1.11894548e-01 1.11859532e-01 1.11824548e-01 + 1.11789597e-01 1.11754679e-01 1.11719794e-01 1.11684941e-01 1.11650121e-01 + 1.11615334e-01 1.11580579e-01 1.11545856e-01 1.11511166e-01 1.11476508e-01 + 1.11441883e-01 1.11407289e-01 1.11372728e-01 1.11338199e-01 1.11303703e-01 + 1.11269238e-01 1.11234805e-01 1.11200404e-01 1.11166035e-01 1.11131698e-01 + 1.11097393e-01 1.11063119e-01 1.11028877e-01 1.10994667e-01 1.10960489e-01 + 1.10926342e-01 1.10892226e-01 1.10858142e-01 1.10824089e-01 1.10790068e-01 + 1.10756078e-01 1.10722119e-01 1.10688192e-01 1.10654295e-01 1.10620430e-01 + 1.10586596e-01 1.10552793e-01 1.10519021e-01 1.10485279e-01 1.10451569e-01 + 1.10417890e-01 1.10384241e-01 1.10350623e-01 1.10317036e-01 1.10283479e-01 + 1.10249953e-01 1.10216458e-01 1.10182993e-01 1.10149558e-01 1.10116154e-01 + 1.10082780e-01 1.10049437e-01 1.10016124e-01 1.09982841e-01 1.09949588e-01 + 1.09916366e-01 1.09883174e-01 1.09850011e-01 1.09816879e-01 1.09783776e-01 + 1.09750704e-01 1.09717661e-01 1.09684648e-01 1.09651665e-01 1.09618712e-01 + 1.09585789e-01 1.09552895e-01 1.09520030e-01 1.09487196e-01 1.09454390e-01 + 1.09421615e-01 1.09388868e-01 1.09356151e-01 1.09323464e-01 1.09290805e-01 + 1.09258176e-01 1.09225576e-01 1.09193006e-01 1.09160464e-01 1.09127951e-01 + 1.09095468e-01 1.09063013e-01 1.09030588e-01 1.08998191e-01 1.08965824e-01 + 1.08933485e-01 1.08901174e-01 1.08868893e-01 1.08836640e-01 1.08804416e-01 + 1.08772220e-01 1.08740054e-01 1.08707915e-01 1.08675805e-01 1.08643724e-01 + 1.08611671e-01 1.08579646e-01 1.08547649e-01 1.08515681e-01 1.08483741e-01 + 1.08451829e-01 1.08419946e-01 1.08388090e-01 1.08356263e-01 1.08324463e-01 + 1.08292692e-01 1.08260948e-01 1.08229233e-01 1.08197545e-01 1.08165885e-01 + 1.08134253e-01 1.08102648e-01 1.08071072e-01 1.08039523e-01 1.08008001e-01 + 1.07976507e-01 1.07945041e-01 1.07913602e-01 1.07882191e-01 1.07850807e-01 + 1.07819450e-01 1.07788121e-01 1.07756819e-01 1.07725544e-01 1.07694296e-01 + 1.07663076e-01 1.07631883e-01 1.07600717e-01 1.07569578e-01 1.07538466e-01 + 1.07507381e-01 1.07476322e-01 1.07445291e-01 1.07414287e-01 1.07383309e-01 + 1.07352359e-01 1.07321435e-01 1.07290537e-01 1.07259667e-01 1.07228823e-01 + 1.07198005e-01 1.07167214e-01 1.07136450e-01 1.07105712e-01 1.07075001e-01 + 1.07044316e-01 1.07013657e-01 1.06983025e-01 1.06952419e-01 1.06921839e-01 + 1.06891286e-01 1.06860758e-01 1.06830257e-01 1.06799782e-01 1.06769333e-01 + 1.06738910e-01 1.06708513e-01 1.06678142e-01 1.06647796e-01 1.06617477e-01 + 1.06587184e-01 1.06556916e-01 1.06526674e-01 1.06496458e-01 1.06466268e-01 + 1.06436103e-01 1.06405964e-01 1.06375850e-01 1.06345762e-01 1.06315700e-01 + 1.06285663e-01 1.06255651e-01 1.06225665e-01 1.06195704e-01 1.06165769e-01 + 1.06135859e-01 1.06105974e-01 1.06076114e-01 1.06046280e-01 1.06016470e-01 + 1.05986686e-01 1.05956927e-01 1.05927193e-01 1.05897484e-01 1.05867800e-01 + 1.05838141e-01 1.05808507e-01 1.05778897e-01 1.05749313e-01 1.05719753e-01 + 1.05690218e-01 1.05660708e-01 1.05631223e-01 1.05601762e-01 1.05572326e-01 + 1.05542914e-01 1.05513528e-01 1.05484165e-01 1.05454827e-01 1.05425514e-01 + 1.05396225e-01 1.05366960e-01 1.05337720e-01 1.05308504e-01 1.05279312e-01 + 1.05250145e-01 1.05221002e-01 1.05191883e-01 1.05162788e-01 1.05133717e-01 + 1.05104671e-01 1.05075648e-01 1.05046650e-01 1.05017675e-01 1.04988725e-01 + 1.04959798e-01 1.04930896e-01 1.04902017e-01 1.04873162e-01 1.04844331e-01 + 1.04815523e-01 1.04786740e-01 1.04757980e-01 1.04729243e-01 1.04700531e-01 + 1.04671841e-01 1.04643176e-01 1.04614534e-01 1.04585916e-01 1.04557321e-01 + 1.04528749e-01 1.04500201e-01 1.04471676e-01 1.04443175e-01 1.04414697e-01 + 1.04386242e-01 1.04357810e-01 1.04329402e-01 1.04301017e-01 1.04272655e-01 + 1.04244316e-01 1.04216000e-01 1.04187707e-01 1.04159437e-01 1.04131191e-01 + 1.04102967e-01 1.04074766e-01 1.04046588e-01 1.04018433e-01 1.03990301e-01 + 1.03962192e-01 1.03934105e-01 1.03906041e-01 1.03878000e-01 1.03849982e-01 + 1.03821986e-01 1.03794013e-01 1.03766062e-01 1.03738134e-01 1.03710229e-01 + 1.03682346e-01 1.03654486e-01 1.03626648e-01 1.03598832e-01 1.03571039e-01 + 1.03543268e-01 1.03515520e-01 1.03487793e-01 1.03460089e-01 1.03432408e-01 + 1.03404748e-01 1.03377111e-01 1.03349496e-01 1.03321903e-01 1.03294332e-01 + 1.03266783e-01 1.03239256e-01 1.03211751e-01 1.03184268e-01 1.03156807e-01 + 1.03129368e-01 1.03101951e-01 1.03074556e-01 1.03047182e-01 1.03019831e-01 + 1.02992501e-01 1.02965192e-01 1.02937906e-01 1.02910641e-01 1.02883398e-01 + 1.02856177e-01 1.02828977e-01 1.02801798e-01 1.02774642e-01 1.02747506e-01 + 1.02720392e-01 1.02693300e-01 1.02666229e-01 1.02639180e-01 1.02612151e-01 + 1.02585145e-01 1.02558159e-01 1.02531195e-01 1.02504252e-01 1.02477330e-01 + 1.02450430e-01 1.02423550e-01 1.02396692e-01 1.02369855e-01 1.02343039e-01 + 1.02316244e-01 1.02289470e-01 1.02262717e-01 1.02235985e-01 1.02209274e-01 + 1.02182584e-01 1.02155915e-01 1.02129267e-01 1.02102639e-01 1.02076033e-01 + 1.02049447e-01 1.02022882e-01 1.01996338e-01 1.01969814e-01 1.01943311e-01 + 1.01916829e-01 1.01890367e-01 1.01863926e-01 1.01837505e-01 1.01811106e-01 + 1.01784726e-01 1.01758367e-01 1.01732029e-01 1.01705711e-01 1.01679413e-01 + 1.01653136e-01 1.01626879e-01 1.01600643e-01 1.01574426e-01 1.01548230e-01 + 1.01522055e-01 1.01495899e-01 1.01469764e-01 1.01443649e-01 1.01417554e-01 + 1.01391479e-01 1.01365425e-01 1.01339390e-01 1.01313376e-01 1.01287381e-01 + 1.01261406e-01 1.01235452e-01 1.01209517e-01 1.01183603e-01 1.01157708e-01 + 1.01131833e-01 1.01105978e-01 1.01080143e-01 1.01054327e-01 1.01028532e-01 + 1.01002756e-01 1.00976999e-01 1.00951263e-01 1.00925546e-01 1.00899849e-01 + 1.00874171e-01 1.00848513e-01 1.00822875e-01 1.00797256e-01 1.00771656e-01 + 1.00746077e-01 1.00720516e-01 1.00694975e-01 1.00669454e-01 1.00643952e-01 + 1.00618469e-01 1.00593005e-01 1.00567561e-01 1.00542136e-01 1.00516731e-01 + 1.00491345e-01 1.00465978e-01 1.00440630e-01 1.00415301e-01 1.00389992e-01 + 1.00364701e-01 1.00339430e-01 1.00314178e-01 1.00288944e-01 1.00263730e-01 + 1.00238535e-01 1.00213359e-01 1.00188202e-01 1.00163064e-01 1.00137944e-01 + 1.00112844e-01 1.00087762e-01 1.00062700e-01 1.00037656e-01 1.00012631e-01 + 9.99876242e-02 9.99626366e-02 9.99376677e-02 9.99127176e-02 9.98877861e-02 + 9.98628732e-02 9.98379790e-02 9.98131034e-02 9.97882464e-02 9.97634079e-02 + 9.97385880e-02 9.97137866e-02 9.96890037e-02 9.96642393e-02 9.96394933e-02 + 9.96147657e-02 9.95900565e-02 9.95653657e-02 9.95406933e-02 9.95160392e-02 + 9.94914034e-02 9.94667859e-02 9.94421867e-02 9.94176057e-02 9.93930429e-02 + 9.93684983e-02 9.93439719e-02 9.93194636e-02 9.92949735e-02 9.92705015e-02 + 9.92460476e-02 9.92216117e-02 9.91971939e-02 9.91727940e-02 9.91484122e-02 + 9.91240484e-02 9.90997025e-02 9.90753745e-02 9.90510645e-02 9.90267723e-02 + 9.90024980e-02 9.89782415e-02 9.89540029e-02 9.89297821e-02 9.89055790e-02 + 9.88813937e-02 9.88572261e-02 9.88330763e-02 9.88089441e-02 9.87848296e-02 + 9.87607327e-02 9.87366535e-02 9.87125919e-02 9.86885478e-02 9.86645213e-02 + 9.86405124e-02 9.86165209e-02 9.85925470e-02 9.85685906e-02 9.85446516e-02 + 9.85207300e-02 9.84968258e-02 9.84729391e-02 9.84490697e-02 9.84252176e-02 + 9.84013829e-02 9.83775655e-02 9.83537654e-02 9.83299825e-02 9.83062169e-02 + 9.82824685e-02 9.82587374e-02 9.82350233e-02 9.82113265e-02 9.81876468e-02 + 9.81639842e-02 9.81403387e-02 9.81167103e-02 9.80930990e-02 9.80695047e-02 + 9.80459274e-02 9.80223671e-02 9.79988238e-02 9.79752974e-02 9.79517880e-02 + 9.79282955e-02 9.79048199e-02 9.78813611e-02 9.78579192e-02 9.78344942e-02 + 9.78110859e-02 9.77876945e-02 9.77643198e-02 9.77409619e-02 9.77176207e-02 + 9.76942963e-02 9.76709885e-02 9.76476974e-02 9.76244230e-02 9.76011651e-02 + 9.75779239e-02 9.75546993e-02 9.75314913e-02 9.75082999e-02 9.74851249e-02 + 9.74619665e-02 9.74388246e-02 9.74156991e-02 9.73925901e-02 9.73694976e-02 + 9.73464215e-02 9.73233617e-02 9.73003184e-02 9.72772914e-02 9.72542807e-02 + 9.72312864e-02 9.72083084e-02 9.71853467e-02 9.71624012e-02 9.71394719e-02 + 9.71165589e-02 9.70936621e-02 9.70707815e-02 9.70479171e-02 9.70250688e-02 + 9.70022366e-02 9.69794205e-02 9.69566206e-02 9.69338367e-02 9.69110688e-02 + 9.68883170e-02 9.68655813e-02 9.68428615e-02 9.68201577e-02 9.67974698e-02 + 9.67747979e-02 9.67521419e-02 9.67295019e-02 9.67068777e-02 9.66842693e-02 + 9.66616769e-02 9.66391002e-02 9.66165394e-02 9.65939943e-02 9.65714651e-02 + 9.65489516e-02 9.65264538e-02 9.65039718e-02 9.64815054e-02 9.64590547e-02 + 9.64366197e-02 9.64142004e-02 9.63917967e-02 9.63694086e-02 9.63470360e-02 + 9.63246791e-02 9.63023377e-02 9.62800118e-02 9.62577015e-02 9.62354067e-02 + 9.62131273e-02 9.61908635e-02 9.61686150e-02 9.61463820e-02 9.61241644e-02 + 9.61019623e-02 9.60797754e-02 9.60576040e-02 9.60354479e-02 9.60133071e-02 + 9.59911816e-02 9.59690714e-02 9.59469765e-02 9.59248968e-02 9.59028324e-02 + 9.58807832e-02 9.58587492e-02 9.58367303e-02 9.58147267e-02 9.57927382e-02 + 9.57707648e-02 9.57488065e-02 9.57268633e-02 9.57049352e-02 9.56830222e-02 + 9.56611242e-02 9.56392413e-02 9.56173733e-02 9.55955204e-02 9.55736824e-02 + 9.55518594e-02 9.55300513e-02 9.55082582e-02 9.54864799e-02 9.54647166e-02 + 9.54429681e-02 9.54212345e-02 9.53995157e-02 9.53778117e-02 9.53561226e-02 + 9.53344482e-02 9.53127886e-02 9.52911438e-02 9.52695137e-02 9.52478984e-02 + 9.52262977e-02 9.52047117e-02 9.51831404e-02 9.51615838e-02 9.51400418e-02 + 9.51185144e-02 9.50970016e-02 9.50755034e-02 9.50540198e-02 9.50325508e-02 + 9.50110963e-02 9.49896563e-02 9.49682308e-02 9.49468198e-02 9.49254233e-02 + 9.49040412e-02 9.48826736e-02 9.48613204e-02 9.48399817e-02 9.48186573e-02 + 9.47973473e-02 9.47760516e-02 9.47547703e-02 9.47335034e-02 9.47122507e-02 + 9.46910123e-02 9.46697883e-02 9.46485784e-02 9.46273829e-02 9.46062015e-02 + 9.45850344e-02 9.45638815e-02 9.45427428e-02 9.45216182e-02 9.45005078e-02 + 9.44794116e-02 9.44583294e-02 9.44372614e-02 9.44162074e-02 9.43951676e-02 + 9.43741418e-02 9.43531300e-02 9.43321323e-02 9.43111485e-02 9.42901788e-02 + 9.42692231e-02 9.42482813e-02 9.42273534e-02 9.42064395e-02 9.41855396e-02 + 9.41646535e-02 9.41437813e-02 9.41229230e-02 9.41020785e-02 9.40812479e-02 + 9.40604311e-02 9.40396282e-02 9.40188390e-02 9.39980636e-02 9.39773020e-02 + 9.39565541e-02 9.39358200e-02 9.39150995e-02 9.38943928e-02 9.38736998e-02 + 9.38530204e-02 9.38323548e-02 9.38117027e-02 9.37910643e-02 9.37704395e-02 + 9.37498283e-02 9.37292307e-02 9.37086466e-02 9.36880762e-02 9.36675192e-02 + 9.36469758e-02 9.36264459e-02 9.36059295e-02 9.35854265e-02 9.35649371e-02 + 9.35444611e-02 9.35239985e-02 9.35035493e-02 9.34831136e-02 9.34626912e-02 + 9.34422823e-02 9.34218866e-02 9.34015044e-02 9.33811355e-02 9.33607798e-02 + 9.33404375e-02 9.33201085e-02 9.32997928e-02 9.32794903e-02 9.32592011e-02 + 9.32389251e-02 9.32186624e-02 9.31984128e-02 9.31781764e-02 9.31579532e-02 + 9.31377432e-02 9.31175463e-02 9.30973626e-02 9.30771919e-02 9.30570344e-02 + 9.30368899e-02 9.30167586e-02 9.29966403e-02 9.29765350e-02 9.29564428e-02 + 9.29363636e-02 9.29162974e-02 9.28962442e-02 9.28762040e-02 9.28561768e-02 + 9.28361624e-02 9.28161611e-02 9.27961726e-02 9.27761971e-02 9.27562344e-02 + 9.27362847e-02 9.27163478e-02 9.26964237e-02 9.26765125e-02 9.26566141e-02 + 9.26367286e-02 9.26168558e-02 9.25969958e-02 9.25771486e-02 9.25573141e-02 + 9.25374924e-02 9.25176834e-02 9.24978871e-02 9.24781036e-02 9.24583327e-02 + 9.24385745e-02 9.24188289e-02 9.23990960e-02 9.23793758e-02 9.23596681e-02 + 9.23399731e-02 9.23202907e-02 9.23006208e-02 9.22809635e-02 9.22613188e-02 + 9.22416866e-02 9.22220669e-02 9.22024597e-02 9.21828651e-02 9.21632829e-02 + 9.21437132e-02 9.21241560e-02 9.21046112e-02 9.20850788e-02 9.20655589e-02 + 9.20460514e-02 9.20265563e-02 9.20070735e-02 9.19876031e-02 9.19681451e-02 + 9.19486994e-02 9.19292661e-02 9.19098451e-02 9.18904363e-02 9.18710399e-02 + 9.18516557e-02 9.18322838e-02 9.18129242e-02 9.17935768e-02 9.17742416e-02 + 9.17549186e-02 9.17356079e-02 9.17163093e-02 9.16970229e-02 9.16777486e-02 + 9.16584865e-02 9.16392366e-02 9.16199987e-02 9.16007730e-02 9.15815594e-02 + 9.15623578e-02 9.15431684e-02 9.15239910e-02 9.15048256e-02 9.14856723e-02 + 9.14665310e-02 9.14474017e-02 9.14282844e-02 9.14091791e-02 9.13900857e-02 + 9.13710043e-02 9.13519349e-02 9.13328774e-02 9.13138318e-02 9.12947982e-02 + 9.12757764e-02 9.12567665e-02 9.12377685e-02 9.12187823e-02 9.11998080e-02 + 9.11808456e-02 9.11618949e-02 9.11429561e-02 9.11240290e-02 9.11051138e-02 + 9.10862103e-02 9.10673186e-02 9.10484386e-02 9.10295704e-02 9.10107139e-02 + 9.09918691e-02 9.09730360e-02 9.09542146e-02 9.09354049e-02 9.09166069e-02 + 9.08978205e-02 9.08790457e-02 9.08602826e-02 9.08415311e-02 9.08227911e-02 + 9.08040628e-02 9.07853461e-02 9.07666409e-02 9.07479473e-02 9.07292652e-02 + 9.07105947e-02 9.06919357e-02 9.06732882e-02 9.06546522e-02 9.06360277e-02 + 9.06174146e-02 9.05988131e-02 9.05802229e-02 9.05616442e-02 9.05430770e-02 + 9.05245211e-02 9.05059767e-02 9.04874436e-02 9.04689219e-02 9.04504116e-02 + 9.04319127e-02 9.04134251e-02 9.03949488e-02 9.03764839e-02 9.03580303e-02 + 9.03395879e-02 9.03211569e-02 9.03027371e-02 9.02843286e-02 9.02659313e-02 + 9.02475453e-02 9.02291706e-02 9.02108070e-02 9.01924546e-02 9.01741135e-02 + 9.01557835e-02 9.01374647e-02 9.01191571e-02 9.01008606e-02 9.00825752e-02 + 9.00643010e-02 9.00460379e-02 9.00277859e-02 9.00095450e-02 8.99913152e-02 + 8.99730965e-02 8.99548888e-02 8.99366921e-02 8.99185065e-02 8.99003320e-02 + 8.98821684e-02 8.98640159e-02 8.98458743e-02 8.98277437e-02 8.98096241e-02 + 8.97915155e-02 8.97734178e-02 8.97553311e-02 8.97372552e-02 8.97191903e-02 + 8.97011363e-02 8.96830932e-02 8.96650610e-02 8.96470396e-02 8.96290291e-02 + 8.96110295e-02 8.95930407e-02 8.95750627e-02 8.95570956e-02 8.95391392e-02 + 8.95211937e-02 8.95032589e-02 8.94853349e-02 8.94674217e-02 8.94495192e-02 + 8.94316275e-02 8.94137465e-02 8.93958762e-02 8.93780167e-02 8.93601678e-02 + 8.93423296e-02 8.93245021e-02 8.93066853e-02 8.92888791e-02 8.92710836e-02 + 8.92532987e-02 8.92355244e-02 8.92177608e-02 8.92000077e-02 8.91822653e-02 + 8.91645334e-02 8.91468121e-02 8.91291014e-02 8.91114012e-02 8.90937115e-02 + 8.90760324e-02 8.90583638e-02 8.90407057e-02 8.90230582e-02 8.90054211e-02 + 8.89877945e-02 8.89701783e-02 8.89525726e-02 8.89349774e-02 8.89173926e-02 + 8.88998182e-02 8.88822542e-02 8.88647007e-02 8.88471575e-02 8.88296247e-02 + 8.88121023e-02 8.87945903e-02 8.87770886e-02 8.87595973e-02 8.87421163e-02 + 8.87246456e-02 8.87071853e-02 8.86897352e-02 8.86722954e-02 8.86548660e-02 + 8.86374468e-02 8.86200378e-02 8.86026391e-02 8.85852507e-02 8.85678725e-02 + 8.85505045e-02 8.85331467e-02 8.85157991e-02 8.84984618e-02 8.84811346e-02 + 8.84638176e-02 8.84465107e-02 8.84292140e-02 8.84119274e-02 8.83946510e-02 + 8.83773847e-02 8.83601285e-02 8.83428825e-02 8.83256465e-02 8.83084206e-02 + 8.82912047e-02 8.82739990e-02 8.82568033e-02 8.82396176e-02 8.82224420e-02 + 8.82052764e-02 8.81881208e-02 8.81709752e-02 8.81538396e-02 8.81367140e-02 + 8.81195984e-02 8.81024927e-02 8.80853970e-02 8.80683113e-02 8.80512355e-02 + 8.80341696e-02 8.80171137e-02 8.80000676e-02 8.79830314e-02 8.79660052e-02 + 8.79489888e-02 8.79319823e-02 8.79149857e-02 8.78979989e-02 8.78810219e-02 + 8.78640548e-02 8.78470975e-02 8.78301500e-02 8.78132123e-02 8.77962845e-02 + 8.77793664e-02 8.77624580e-02 8.77455595e-02 8.77286707e-02 8.77117916e-02 + 8.76949223e-02 8.76780628e-02 8.76612129e-02 8.76443728e-02 8.76275423e-02 + 8.76107216e-02 8.75939105e-02 8.75771091e-02 8.75603174e-02 8.75435353e-02 + 8.75267629e-02 8.75100001e-02 8.74932469e-02 8.74765033e-02 8.74597694e-02 + 8.74430451e-02 8.74263303e-02 8.74096251e-02 8.73929296e-02 8.73762435e-02 + 8.73595670e-02 8.73429001e-02 8.73262427e-02 8.73095948e-02 8.72929565e-02 + 8.72763276e-02 8.72597083e-02 8.72430984e-02 8.72264981e-02 8.72099072e-02 + 8.71933257e-02 8.71767537e-02 8.71601912e-02 8.71436381e-02 8.71270944e-02 + 8.71105602e-02 8.70940353e-02 8.70775199e-02 8.70610138e-02 8.70445172e-02 + 8.70280299e-02 8.70115519e-02 8.69950834e-02 8.69786241e-02 8.69621742e-02 + 8.69457337e-02 8.69293024e-02 8.69128805e-02 8.68964679e-02 8.68800646e-02 + 8.68636705e-02 8.68472857e-02 8.68309103e-02 8.68145440e-02 8.67981870e-02 + 8.67818393e-02 8.67655008e-02 8.67491715e-02 8.67328514e-02 8.67165406e-02 + 8.67002389e-02 8.66839464e-02 8.66676631e-02 8.66513890e-02 8.66351240e-02 + 8.66188682e-02 8.66026216e-02 8.65863841e-02 8.65701557e-02 8.65539364e-02 + 8.65377263e-02 8.65215252e-02 8.65053333e-02 8.64891504e-02 8.64729766e-02 + 8.64568119e-02 8.64406563e-02 8.64245097e-02 8.64083721e-02 8.63922436e-02 + 8.63761241e-02 8.63600136e-02 8.63439122e-02 8.63278197e-02 8.63117363e-02 + 8.62956618e-02 8.62795963e-02 8.62635398e-02 8.62474922e-02 8.62314536e-02 + 8.62154239e-02 8.61994032e-02 8.61833914e-02 8.61673885e-02 8.61513945e-02 + 8.61354094e-02 8.61194332e-02 8.61034659e-02 8.60875075e-02 8.60715580e-02 + 8.60556173e-02 8.60396855e-02 8.60237625e-02 8.60078483e-02 8.59919430e-02 + 8.59760465e-02 8.59601588e-02 8.59442800e-02 8.59284099e-02 8.59125486e-02 + 8.58966961e-02 8.58808523e-02 8.58650173e-02 8.58491911e-02 8.58333736e-02 + 8.58175649e-02 8.58017649e-02 8.57859736e-02 8.57701911e-02 8.57544172e-02 + 8.57386520e-02 8.57228956e-02 8.57071478e-02 8.56914087e-02 8.56756782e-02 + 8.56599565e-02 8.56442433e-02 8.56285389e-02 8.56128430e-02 8.55971558e-02 + 8.55814772e-02 8.55658072e-02 8.55501458e-02 8.55344930e-02 8.55188488e-02 + 8.55032132e-02 8.54875862e-02 8.54719677e-02 8.54563578e-02 8.54407564e-02 + 8.54251636e-02 8.54095793e-02 8.53940035e-02 8.53784363e-02 8.53628775e-02 + 8.53473273e-02 8.53317855e-02 8.53162523e-02 8.53007275e-02 8.52852112e-02 + 8.52697034e-02 8.52542040e-02 8.52387130e-02 8.52232305e-02 8.52077565e-02 + 8.51922909e-02 8.51768336e-02 8.51613848e-02 8.51459444e-02 8.51305124e-02 + 8.51150888e-02 8.50996736e-02 8.50842667e-02 8.50688682e-02 8.50534780e-02 + 8.50380963e-02 8.50227228e-02 8.50073577e-02 8.49920009e-02 8.49766524e-02 + 8.49613123e-02 8.49459804e-02 8.49306569e-02 8.49153416e-02 8.49000346e-02 + 8.48847359e-02 8.48694455e-02 8.48541633e-02 8.48388893e-02 8.48236237e-02 + 8.48083662e-02 8.47931170e-02 8.47778760e-02 8.47626432e-02 8.47474187e-02 + 8.47322023e-02 8.47169941e-02 8.47017941e-02 8.46866023e-02 8.46714187e-02 + 8.46562432e-02 8.46410759e-02 8.46259167e-02 8.46107657e-02 8.45956228e-02 + 8.45804880e-02 8.45653614e-02 8.45502428e-02 8.45351324e-02 8.45200301e-02 + 8.45049358e-02 8.44898497e-02 8.44747716e-02 8.44597016e-02 8.44446397e-02 + 8.44295858e-02 8.44145399e-02 8.43995021e-02 8.43844724e-02 8.43694506e-02 + 8.43544369e-02 8.43394312e-02 8.43244335e-02 8.43094438e-02 8.42944621e-02 + 8.42794883e-02 8.42645226e-02 8.42495648e-02 8.42346150e-02 8.42196731e-02 + 8.42047392e-02 8.41898132e-02 8.41748952e-02 8.41599851e-02 8.41450829e-02 + 8.41301886e-02 8.41153022e-02 8.41004238e-02 8.40855532e-02 8.40706905e-02 + 8.40558357e-02 8.40409887e-02 8.40261496e-02 8.40113184e-02 8.39964950e-02 + 8.39816795e-02 8.39668718e-02 8.39520719e-02 8.39372799e-02 8.39224957e-02 + 8.39077193e-02 8.38929507e-02 8.38781898e-02 8.38634368e-02 8.38486916e-02 + 8.38339541e-02 8.38192244e-02 8.38045025e-02 8.37897883e-02 8.37750818e-02 + 8.37603831e-02 8.37456922e-02 8.37310089e-02 8.37163334e-02 8.37016656e-02 + 8.36870055e-02 8.36723531e-02 8.36577084e-02 8.36430714e-02 8.36284421e-02 + 8.36138204e-02 8.35992064e-02 8.35846001e-02 8.35700014e-02 8.35554104e-02 + 8.35408270e-02 8.35262512e-02 8.35116831e-02 8.34971226e-02 8.34825697e-02 + 8.34680244e-02 8.34534867e-02 8.34389566e-02 8.34244341e-02 8.34099191e-02 + 8.33954118e-02 8.33809120e-02 8.33664197e-02 8.33519351e-02 8.33374579e-02 + 8.33229883e-02 8.33085263e-02 8.32940718e-02 8.32796248e-02 8.32651853e-02 + 8.32507533e-02 8.32363288e-02 8.32219118e-02 8.32075023e-02 8.31931003e-02 + 8.31787058e-02 8.31643187e-02 8.31499391e-02 8.31355669e-02 8.31212022e-02 + 8.31068450e-02 8.30924951e-02 8.30781528e-02 8.30638178e-02 8.30494902e-02 + 8.30351701e-02 8.30208574e-02 8.30065520e-02 8.29922541e-02 8.29779635e-02 + 8.29636804e-02 8.29494046e-02 8.29351361e-02 8.29208751e-02 8.29066213e-02 + 8.28923750e-02 8.28781359e-02 8.28639042e-02 8.28496799e-02 8.28354628e-02 + 8.28212531e-02 8.28070507e-02 8.27928556e-02 8.27786678e-02 8.27644872e-02 + 8.27503140e-02 8.27361480e-02 8.27219893e-02 8.27078379e-02 8.26936938e-02 + 8.26795569e-02 8.26654272e-02 8.26513048e-02 8.26371896e-02 8.26230816e-02 + 8.26089809e-02 8.25948874e-02 8.25808011e-02 8.25667220e-02 8.25526501e-02 + 8.25385854e-02 8.25245279e-02 8.25104775e-02 8.24964344e-02 8.24823984e-02 + 8.24683695e-02 8.24543479e-02 8.24403333e-02 8.24263259e-02 8.24123257e-02 + 8.23983326e-02 8.23843466e-02 8.23703677e-02 8.23563960e-02 8.23424313e-02 + 8.23284737e-02 8.23145233e-02 8.23005799e-02 8.22866436e-02 8.22727144e-02 + 8.22587923e-02 8.22448772e-02 8.22309692e-02 8.22170683e-02 8.22031744e-02 + 8.21892875e-02 8.21754077e-02 8.21615349e-02 8.21476691e-02 8.21338103e-02 + 8.21199586e-02 8.21061138e-02 8.20922761e-02 8.20784453e-02 8.20646216e-02 + 8.20508048e-02 8.20369950e-02 8.20231922e-02 8.20093963e-02 8.19956074e-02 + 8.19818254e-02 8.19680504e-02 8.19542823e-02 8.19405212e-02 8.19267670e-02 + 8.19130197e-02 8.18992794e-02 8.18855459e-02 8.18718194e-02 8.18580997e-02 + 8.18443870e-02 8.18306811e-02 8.18169822e-02 8.18032901e-02 8.17896048e-02 + 8.17759265e-02 8.17622550e-02 8.17485903e-02 8.17349326e-02 8.17212816e-02 + 8.17076375e-02 8.16940002e-02 8.16803697e-02 8.16667461e-02 8.16531293e-02 + 8.16395193e-02 8.16259161e-02 8.16123197e-02 8.15987300e-02 8.15851472e-02 + 8.15715712e-02 8.15580019e-02 8.15444394e-02 8.15308836e-02 8.15173346e-02 + 8.15037924e-02 8.14902569e-02 8.14767282e-02 8.14632062e-02 8.14496909e-02 + 8.14361823e-02 8.14226805e-02 8.14091854e-02 8.13956970e-02 8.13822153e-02 + 8.13687402e-02 8.13552719e-02 8.13418103e-02 8.13283553e-02 8.13149070e-02 + 8.13014654e-02 8.12880305e-02 8.12746022e-02 8.12611805e-02 8.12477656e-02 + 8.12343572e-02 8.12209555e-02 8.12075604e-02 8.11941719e-02 8.11807901e-02 + 8.11674149e-02 8.11540463e-02 8.11406843e-02 8.11273288e-02 8.11139800e-02 + 8.11006378e-02 8.10873021e-02 8.10739731e-02 8.10606506e-02 8.10473346e-02 + 8.10340252e-02 8.10207224e-02 8.10074261e-02 8.09941364e-02 8.09808532e-02 + 8.09675765e-02 8.09543064e-02 8.09410428e-02 8.09277857e-02 8.09145351e-02 + 8.09012911e-02 8.08880535e-02 8.08748224e-02 8.08615978e-02 8.08483797e-02 + 8.08351681e-02 8.08219630e-02 8.08087643e-02 8.07955721e-02 8.07823863e-02 + 8.07692070e-02 8.07560342e-02 8.07428678e-02 8.07297078e-02 8.07165542e-02 + 8.07034071e-02 8.06902664e-02 8.06771322e-02 8.06640043e-02 8.06508829e-02 + 8.06377678e-02 8.06246592e-02 8.06115569e-02 8.05984610e-02 8.05853715e-02 + 8.05722884e-02 8.05592116e-02 8.05461412e-02 8.05330772e-02 8.05200195e-02 + 8.05069682e-02 8.04939232e-02 8.04808846e-02 8.04678523e-02 8.04548263e-02 + 8.04418066e-02 8.04287933e-02 8.04157863e-02 8.04027856e-02 8.03897912e-02 + 8.03768031e-02 8.03638212e-02 8.03508457e-02 8.03378765e-02 8.03249135e-02 + 8.03119568e-02 8.02990064e-02 8.02860622e-02 8.02731243e-02 8.02601926e-02 + 8.02472672e-02 8.02343481e-02 8.02214351e-02 8.02085284e-02 8.01956280e-02 + 8.01827337e-02 8.01698457e-02 8.01569639e-02 8.01440883e-02 8.01312189e-02 + 8.01183557e-02 8.01054986e-02 8.00926478e-02 8.00798032e-02 8.00669647e-02 + 8.00541324e-02 8.00413063e-02 8.00284863e-02 8.00156725e-02 8.00028649e-02 + 7.99900634e-02 7.99772680e-02 7.99644788e-02 7.99516957e-02 7.99389187e-02 + 7.99261479e-02 7.99133832e-02 7.99006246e-02 7.98878721e-02 7.98751257e-02 + 7.98623854e-02 7.98496512e-02 7.98369231e-02 7.98242011e-02 7.98114851e-02 + 7.97987753e-02 7.97860715e-02 7.97733737e-02 7.97606821e-02 7.97479965e-02 + 7.97353169e-02 7.97226434e-02 7.97099759e-02 7.96973145e-02 7.96846590e-02 + 7.96720097e-02 7.96593663e-02 7.96467290e-02 7.96340976e-02 7.96214723e-02 + 7.96088530e-02 7.95962397e-02 7.95836323e-02 7.95710310e-02 7.95584356e-02 + 7.95458463e-02 7.95332629e-02 7.95206854e-02 7.95081140e-02 7.94955485e-02 + 7.94829889e-02 7.94704353e-02 7.94578877e-02 7.94453459e-02 7.94328102e-02 + 7.94202803e-02 7.94077564e-02 7.93952384e-02 7.93827263e-02 7.93702202e-02 + 7.93577199e-02 7.93452256e-02 7.93327371e-02 7.93202546e-02 7.93077779e-02 + 7.92953071e-02 7.92828423e-02 7.92703832e-02 7.92579301e-02 7.92454828e-02 + 7.92330414e-02 7.92206058e-02 7.92081761e-02 7.91957523e-02 7.91833343e-02 + 7.91709221e-02 7.91585157e-02 7.91461152e-02 7.91337206e-02 7.91213317e-02 + 7.91089486e-02 7.90965714e-02 7.90842000e-02 7.90718344e-02 7.90594746e-02 + 7.90471205e-02 7.90347723e-02 7.90224298e-02 7.90100932e-02 7.89977623e-02 + 7.89854371e-02 7.89731178e-02 7.89608042e-02 7.89484964e-02 7.89361943e-02 + 7.89238979e-02 7.89116073e-02 7.88993225e-02 7.88870434e-02 7.88747700e-02 + 7.88625023e-02 7.88502404e-02 7.88379842e-02 7.88257337e-02 7.88134889e-02 + 7.88012498e-02 7.87890164e-02 7.87767887e-02 7.87645667e-02 7.87523504e-02 + 7.87401398e-02 7.87279348e-02 7.87157355e-02 7.87035419e-02 7.86913540e-02 + 7.86791717e-02 7.86669951e-02 7.86548241e-02 7.86426588e-02 7.86304991e-02 + 7.86183450e-02 7.86061966e-02 7.85940538e-02 7.85819167e-02 7.85697851e-02 + 7.85576592e-02 7.85455389e-02 7.85334242e-02 7.85213151e-02 7.85092116e-02 + 7.84971137e-02 7.84850214e-02 7.84729347e-02 7.84608535e-02 7.84487780e-02 + 7.84367080e-02 7.84246436e-02 7.84125847e-02 7.84005314e-02 7.83884837e-02 + 7.83764415e-02 7.83644048e-02 7.83523737e-02 7.83403482e-02 7.83283282e-02 + 7.83163137e-02 7.83043047e-02 7.82923013e-02 7.82803034e-02 7.82683110e-02 + 7.82563241e-02 7.82443427e-02 7.82323668e-02 7.82203964e-02 7.82084315e-02 + 7.81964721e-02 7.81845182e-02 7.81725697e-02 7.81606268e-02 7.81486893e-02 + 7.81367572e-02 7.81248307e-02 7.81129096e-02 7.81009939e-02 7.80890837e-02 + 7.80771790e-02 7.80652797e-02 7.80533858e-02 7.80414974e-02 7.80296144e-02 + 7.80177368e-02 7.80058646e-02 7.79939979e-02 7.79821366e-02 7.79702807e-02 + 7.79584302e-02 7.79465851e-02 7.79347454e-02 7.79229111e-02 7.79110821e-02 + 7.78992586e-02 7.78874404e-02 7.78756277e-02 7.78638202e-02 7.78520182e-02 + 7.78402215e-02 7.78284302e-02 7.78166443e-02 7.78048637e-02 7.77930884e-02 + 7.77813185e-02 7.77695539e-02 7.77577947e-02 7.77460408e-02 7.77342922e-02 + 7.77225490e-02 7.77108111e-02 7.76990785e-02 7.76873512e-02 7.76756292e-02 + 7.76639125e-02 7.76522011e-02 7.76404950e-02 7.76287942e-02 7.76170987e-02 + 7.76054085e-02 7.75937236e-02 7.75820439e-02 7.75703695e-02 7.75587004e-02 + 7.75470365e-02 7.75353780e-02 7.75237246e-02 7.75120765e-02 7.75004337e-02 + 7.74887961e-02 7.74771637e-02 7.74655366e-02 7.74539147e-02 7.74422981e-02 + 7.74306867e-02 7.74190805e-02 7.74074795e-02 7.73958837e-02 7.73842931e-02 + 7.73727078e-02 7.73611276e-02 7.73495527e-02 7.73379829e-02 7.73264183e-02 + 7.73148589e-02 7.73033047e-02 7.72917557e-02 7.72802118e-02 7.72686732e-02 + 7.72571396e-02 7.72456113e-02 7.72340881e-02 7.72225701e-02 7.72110572e-02 + 7.71995494e-02 7.71880468e-02 7.71765494e-02 7.71650571e-02 7.71535699e-02 + 7.71420878e-02 7.71306109e-02 7.71191391e-02 7.71076724e-02 7.70962108e-02 + 7.70847543e-02 7.70733030e-02 7.70618567e-02 7.70504155e-02 7.70389795e-02 + 7.70275485e-02 7.70161226e-02 7.70047018e-02 7.69932860e-02 7.69818754e-02 + 7.69704698e-02 7.69590693e-02 7.69476738e-02 7.69362834e-02 7.69248981e-02 + 7.69135178e-02 7.69021426e-02 7.68907724e-02 7.68794073e-02 7.68680472e-02 + 7.68566921e-02 7.68453420e-02 7.68339970e-02 7.68226570e-02 7.68113221e-02 + 7.67999921e-02 7.67886672e-02 7.67773472e-02 7.67660323e-02 7.67547224e-02 + 7.67434174e-02 7.67321175e-02 7.67208226e-02 7.67095326e-02 7.66982476e-02 + 7.66869676e-02 7.66756926e-02 7.66644225e-02 7.66531574e-02 7.66418973e-02 + 7.66306422e-02 7.66193920e-02 7.66081467e-02 7.65969064e-02 7.65856711e-02 + 7.65744407e-02 7.65632152e-02 7.65519946e-02 7.65407790e-02 7.65295684e-02 + 7.65183626e-02 7.65071618e-02 7.64959659e-02 7.64847749e-02 7.64735888e-02 + 7.64624076e-02 7.64512313e-02 7.64400599e-02 7.64288935e-02 7.64177319e-02 + 7.64065752e-02 7.63954233e-02 7.63842764e-02 7.63731343e-02 7.63619972e-02 + 7.63508648e-02 7.63397374e-02 7.63286148e-02 7.63174971e-02 7.63063842e-02 + 7.62952762e-02 7.62841730e-02 7.62730747e-02 7.62619813e-02 7.62508926e-02 + 7.62398088e-02 7.62287298e-02 7.62176557e-02 7.62065864e-02 7.61955219e-02 + 7.61844622e-02 7.61734074e-02 7.61623573e-02 7.61513121e-02 7.61402716e-02 + 7.61292360e-02 7.61182052e-02 7.61071791e-02 7.60961579e-02 7.60851414e-02 + 7.60741297e-02 7.60631228e-02 7.60521207e-02 7.60411233e-02 7.60301307e-02 + 7.60191429e-02 7.60081598e-02 7.59971815e-02 7.59862080e-02 7.59752392e-02 + 7.59642751e-02 7.59533158e-02 7.59423613e-02 7.59314115e-02 7.59204664e-02 + 7.59095260e-02 7.58985904e-02 7.58876595e-02 7.58767333e-02 7.58658119e-02 + 7.58548951e-02 7.58439831e-02 7.58330758e-02 7.58221731e-02 7.58112752e-02 + 7.58003820e-02 7.57894935e-02 7.57786096e-02 7.57677305e-02 7.57568560e-02 + 7.57459862e-02 7.57351211e-02 7.57242607e-02 7.57134049e-02 7.57025538e-02 + 7.56917074e-02 7.56808656e-02 7.56700285e-02 7.56591961e-02 7.56483683e-02 + 7.56375451e-02 7.56267266e-02 7.56159127e-02 7.56051035e-02 7.55942989e-02 + 7.55834989e-02 7.55727035e-02 7.55619128e-02 7.55511267e-02 7.55403452e-02 + 7.55295684e-02 7.55187961e-02 7.55080285e-02 7.54972654e-02 7.54865070e-02 + 7.54757531e-02 7.54650039e-02 7.54542592e-02 7.54435192e-02 7.54327837e-02 + 7.54220528e-02 7.54113264e-02 7.54006047e-02 7.53898875e-02 7.53791749e-02 + 7.53684669e-02 7.53577634e-02 7.53470644e-02 7.53363701e-02 7.53256803e-02 + 7.53149950e-02 7.53043143e-02 7.52936381e-02 7.52829665e-02 7.52722994e-02 + 7.52616368e-02 7.52509787e-02 7.52403252e-02 7.52296762e-02 7.52190318e-02 + 7.52083918e-02 7.51977564e-02 7.51871255e-02 7.51764990e-02 7.51658771e-02 + 7.51552597e-02 7.51446468e-02 7.51340384e-02 7.51234344e-02 7.51128350e-02 + 7.51022400e-02 7.50916496e-02 7.50810636e-02 7.50704821e-02 7.50599050e-02 + 7.50493324e-02 7.50387643e-02 7.50282007e-02 7.50176415e-02 7.50070868e-02 + 7.49965365e-02 7.49859907e-02 7.49754493e-02 7.49649123e-02 7.49543799e-02 + 7.49438518e-02 7.49333282e-02 7.49228090e-02 7.49122942e-02 7.49017839e-02 + 7.48912780e-02 7.48807765e-02 7.48702794e-02 7.48597868e-02 7.48492985e-02 + 7.48388147e-02 7.48283352e-02 7.48178602e-02 7.48073895e-02 7.47969233e-02 + 7.47864614e-02 7.47760040e-02 7.47655509e-02 7.47551022e-02 7.47446579e-02 + 7.47342179e-02 7.47237824e-02 7.47133512e-02 7.47029243e-02 7.46925019e-02 + 7.46820838e-02 7.46716700e-02 7.46612606e-02 7.46508556e-02 7.46404549e-02 + 7.46300586e-02 7.46196666e-02 7.46092789e-02 7.45988956e-02 7.45885166e-02 + 7.45781419e-02 7.45677716e-02 7.45574056e-02 7.45470439e-02 7.45366865e-02 + 7.45263335e-02 7.45159847e-02 7.45056403e-02 7.44953002e-02 7.44849644e-02 + 7.44746329e-02 7.44643056e-02 7.44539827e-02 7.44436641e-02 7.44333497e-02 + 7.44230397e-02 7.44127339e-02 7.44024324e-02 7.43921352e-02 7.43818423e-02 + 7.43715536e-02 7.43612692e-02 7.43509890e-02 7.43407132e-02 7.43304416e-02 + 7.43201742e-02 7.43099111e-02 7.42996522e-02 7.42893976e-02 7.42791473e-02 + 7.42689011e-02 7.42586593e-02 7.42484216e-02 7.42381882e-02 7.42279590e-02 + 7.42177341e-02 7.42075133e-02 7.41972968e-02 7.41870845e-02 7.41768765e-02 + 7.41666726e-02 7.41564729e-02 7.41462775e-02 7.41360863e-02 7.41258992e-02 + 7.41157164e-02 7.41055377e-02 7.40953633e-02 7.40851930e-02 7.40750269e-02 + 7.40648650e-02 7.40547073e-02 7.40445538e-02 7.40344044e-02 7.40242592e-02 + 7.40141182e-02 7.40039814e-02 7.39938487e-02 7.39837202e-02 7.39735958e-02 + 7.39634756e-02 7.39533595e-02 7.39432476e-02 7.39331398e-02 7.39230362e-02 + 7.39129367e-02 7.39028414e-02 7.38927502e-02 7.38826631e-02 7.38725802e-02 + 7.38625014e-02 7.38524267e-02 7.38423561e-02 7.38322896e-02 7.38222273e-02 + 7.38121691e-02 7.38021150e-02 7.37920650e-02 7.37820191e-02 7.37719773e-02 + 7.37619396e-02 7.37519060e-02 7.37418765e-02 7.37318510e-02 7.37218297e-02 + 7.37118125e-02 7.37017993e-02 7.36917902e-02 7.36817852e-02 7.36717843e-02 + 7.36617874e-02 7.36517946e-02 7.36418059e-02 7.36318212e-02 7.36218406e-02 + 7.36118641e-02 7.36018916e-02 7.35919231e-02 7.35819587e-02 7.35719984e-02 + 7.35620421e-02 7.35520898e-02 7.35421416e-02 7.35321974e-02 7.35222572e-02 + 7.35123211e-02 7.35023890e-02 7.34924610e-02 7.34825369e-02 7.34726169e-02 + 7.34627009e-02 7.34527889e-02 7.34428809e-02 7.34329769e-02 7.34230769e-02 + 7.34131809e-02 7.34032890e-02 7.33934010e-02 7.33835170e-02 7.33736370e-02 + 7.33637610e-02 7.33538890e-02 7.33440210e-02 7.33341569e-02 7.33242969e-02 + 7.33144408e-02 7.33045886e-02 7.32947405e-02 7.32848963e-02 7.32750561e-02 + 7.32652199e-02 7.32553876e-02 7.32455592e-02 7.32357348e-02 7.32259144e-02 + 7.32160979e-02 7.32062854e-02 7.31964768e-02 7.31866722e-02 7.31768715e-02 + 7.31670747e-02 7.31572819e-02 7.31474930e-02 7.31377080e-02 7.31279269e-02 + 7.31181498e-02 7.31083766e-02 7.30986073e-02 7.30888419e-02 7.30790805e-02 + 7.30693229e-02 7.30595693e-02 7.30498195e-02 7.30400737e-02 7.30303318e-02 + 7.30205937e-02 7.30108596e-02 7.30011293e-02 7.29914030e-02 7.29816805e-02 + 7.29719619e-02 7.29622472e-02 7.29525364e-02 7.29428294e-02 7.29331263e-02 + 7.29234271e-02 7.29137318e-02 7.29040403e-02 7.28943527e-02 7.28846689e-02 + 7.28749890e-02 7.28653130e-02 7.28556408e-02 7.28459725e-02 7.28363080e-02 + 7.28266473e-02 7.28169905e-02 7.28073376e-02 7.27976885e-02 7.27880432e-02 + 7.27784017e-02 7.27687641e-02 7.27591303e-02 7.27495003e-02 7.27398742e-02 + 7.27302519e-02 7.27206334e-02 7.27110187e-02 7.27014078e-02 7.26918007e-02 + 7.26821975e-02 7.26725980e-02 7.26630023e-02 7.26534105e-02 7.26438224e-02 + 7.26342382e-02 7.26246577e-02 7.26150810e-02 7.26055081e-02 7.25959390e-02 + 7.25863737e-02 7.25768121e-02 7.25672544e-02 7.25577004e-02 7.25481502e-02 + 7.25386037e-02 7.25290610e-02 7.25195221e-02 7.25099870e-02 7.25004556e-02 + 7.24909279e-02 7.24814040e-02 7.24718839e-02 7.24623675e-02 7.24528549e-02 + 7.24433460e-02 7.24338409e-02 7.24243395e-02 7.24148418e-02 7.24053479e-02 + 7.23958577e-02 7.23863712e-02 7.23768885e-02 7.23674095e-02 7.23579342e-02 + 7.23484626e-02 7.23389948e-02 7.23295307e-02 7.23200702e-02 7.23106135e-02 + 7.23011605e-02 7.22917112e-02 7.22822656e-02 7.22728238e-02 7.22633856e-02 + 7.22539511e-02 7.22445203e-02 7.22350932e-02 7.22256698e-02 7.22162500e-02 + 7.22068340e-02 7.21974216e-02 7.21880130e-02 7.21786080e-02 7.21692066e-02 + 7.21598090e-02 7.21504150e-02 7.21410247e-02 7.21316380e-02 7.21222550e-02 + 7.21128757e-02 7.21035000e-02 7.20941280e-02 7.20847596e-02 7.20753949e-02 + 7.20660339e-02 7.20566765e-02 7.20473227e-02 7.20379726e-02 7.20286261e-02 + 7.20192832e-02 7.20099440e-02 7.20006084e-02 7.19912765e-02 7.19819481e-02 + 7.19726234e-02 7.19633024e-02 7.19539849e-02 7.19446711e-02 7.19353608e-02 + 7.19260542e-02 7.19167512e-02 7.19074518e-02 7.18981560e-02 7.18888639e-02 + 7.18795753e-02 7.18702903e-02 7.18610089e-02 7.18517311e-02 7.18424569e-02 + 7.18331863e-02 7.18239193e-02 7.18146559e-02 7.18053960e-02 7.17961398e-02 + 7.17868871e-02 7.17776380e-02 7.17683924e-02 7.17591505e-02 7.17499121e-02 + 7.17406772e-02 7.17314460e-02 7.17222183e-02 7.17129941e-02 7.17037735e-02 + 7.16945565e-02 7.16853430e-02 7.16761331e-02 7.16669267e-02 7.16577239e-02 + 7.16485246e-02 7.16393289e-02 7.16301367e-02 7.16209480e-02 7.16117629e-02 + 7.16025813e-02 7.15934032e-02 7.15842287e-02 7.15750577e-02 7.15658902e-02 + 7.15567262e-02 7.15475658e-02 7.15384089e-02 7.15292555e-02 7.15201056e-02 + 7.15109592e-02 7.15018163e-02 7.14926769e-02 7.14835410e-02 7.14744087e-02 + 7.14652798e-02 7.14561544e-02 7.14470325e-02 7.14379142e-02 7.14287993e-02 + 7.14196878e-02 7.14105799e-02 7.14014755e-02 7.13923745e-02 7.13832770e-02 + 7.13741830e-02 7.13650925e-02 7.13560055e-02 7.13469219e-02 7.13378418e-02 + 7.13287651e-02 7.13196919e-02 7.13106222e-02 7.13015559e-02 7.12924931e-02 + 7.12834338e-02 7.12743779e-02 7.12653254e-02 7.12562764e-02 7.12472309e-02 + 7.12381888e-02 7.12291501e-02 7.12201149e-02 7.12110831e-02 7.12020547e-02 + 7.11930298e-02 7.11840083e-02 7.11749902e-02 7.11659756e-02 7.11569644e-02 + 7.11479566e-02 7.11389522e-02 7.11299512e-02 7.11209537e-02 7.11119596e-02 + 7.11029689e-02 7.10939816e-02 7.10849977e-02 7.10760172e-02 7.10670401e-02 + 7.10580664e-02 7.10490961e-02 7.10401292e-02 7.10311657e-02 7.10222056e-02 + 7.10132489e-02 7.10042956e-02 7.09953456e-02 7.09863990e-02 7.09774559e-02 + 7.09685161e-02 7.09595796e-02 7.09506466e-02 7.09417169e-02 7.09327906e-02 + 7.09238677e-02 7.09149481e-02 7.09060319e-02 7.08971191e-02 7.08882096e-02 + 7.08793035e-02 7.08704007e-02 7.08615013e-02 7.08526052e-02 7.08437125e-02 + 7.08348231e-02 7.08259371e-02 7.08170544e-02 7.08081751e-02 7.07992991e-02 + 7.07904264e-02 7.07815571e-02 7.07726911e-02 7.07638285e-02 7.07549691e-02 + 7.07461131e-02 7.07372604e-02 7.07284111e-02 7.07195650e-02 7.07107223e-02 + 7.07018829e-02 7.06930468e-02 7.06842141e-02 7.06753846e-02 7.06665584e-02 + 7.06577356e-02 7.06489160e-02 7.06400998e-02 7.06312868e-02 7.06224772e-02 + 7.06136708e-02 7.06048678e-02 7.05960680e-02 7.05872715e-02 7.05784783e-02 + 7.05696884e-02 7.05609018e-02 7.05521184e-02 7.05433384e-02 7.05345616e-02 diff --git a/potentials/TlBr_msw.poly b/potentials/TlBr_msw.poly new file mode 100644 index 0000000000000000000000000000000000000000..451d72ef3d11f03751a511d1bb28d98655306047 --- /dev/null +++ b/potentials/TlBr_msw.poly @@ -0,0 +1,8014 @@ +### DATA: 2015-04-30 CONTRIBUTOR: X. W. Zhou, xzhou@sandia.gov, CITATION: Zhou, Foster, Jones, Yang, Fan, and Doty, J. Mater. Sci. Res., 4, 15 (2015) + 2 0 + 81 2.04380000e+02 Tl + 35 7.99000000e+01 Br + 2000 2000 10 1.00000000e+04 + 4.26900000e+00 0.00000000e+00 + 4.05800000e+00 0.00000000e+00 + 4.73600000e+00 0.00000000e+00 + 1.59066741e+02 1.59066741e+02 1.59066741e+02 1.59066741e+02 1.59066741e+02 + 1.59066741e+02 1.59066741e+02 1.59066741e+02 1.59066741e+02 1.59066741e+02 + 1.59066741e+02 1.59066741e+02 1.59066741e+02 1.59066741e+02 1.59066741e+02 + 1.59066741e+02 1.59066741e+02 1.59066741e+02 1.59066741e+02 1.59066741e+02 + 1.59066741e+02 1.59066741e+02 1.59066741e+02 1.59066741e+02 1.59066741e+02 + 1.59066741e+02 1.59066741e+02 1.59066741e+02 1.59066741e+02 1.59066741e+02 + 1.59066741e+02 1.59066741e+02 1.59066741e+02 1.59066741e+02 1.59066741e+02 + 1.59066741e+02 1.59066741e+02 1.59066741e+02 1.59066741e+02 1.59066741e+02 + 1.59066741e+02 1.59066741e+02 1.59066741e+02 1.59066741e+02 1.59066741e+02 + 1.59066741e+02 1.59066741e+02 1.58946820e+02 1.58259480e+02 1.57574997e+02 + 1.56893359e+02 1.56214555e+02 1.55538572e+02 1.54865399e+02 1.54195026e+02 + 1.53527439e+02 1.52862629e+02 1.52200584e+02 1.51541292e+02 1.50884743e+02 + 1.50230924e+02 1.49579826e+02 1.48931437e+02 1.48285746e+02 1.47642742e+02 + 1.47002414e+02 1.46364752e+02 1.45729743e+02 1.45097378e+02 1.44467646e+02 + 1.43840536e+02 1.43216038e+02 1.42594140e+02 1.41974832e+02 1.41358104e+02 + 1.40743945e+02 1.40132345e+02 1.39523293e+02 1.38916779e+02 1.38312792e+02 + 1.37711322e+02 1.37112360e+02 1.36515894e+02 1.35921914e+02 1.35330412e+02 + 1.34741375e+02 1.34154795e+02 1.33570661e+02 1.32988963e+02 1.32409692e+02 + 1.31832838e+02 1.31258390e+02 1.30686338e+02 1.30116674e+02 1.29549387e+02 + 1.28984468e+02 1.28421907e+02 1.27861694e+02 1.27303821e+02 1.26748276e+02 + 1.26195051e+02 1.25644136e+02 1.25095523e+02 1.24549201e+02 1.24005161e+02 + 1.23463393e+02 1.22923890e+02 1.22386641e+02 1.21851636e+02 1.21318868e+02 + 1.20788327e+02 1.20260004e+02 1.19733889e+02 1.19209974e+02 1.18688250e+02 + 1.18168707e+02 1.17651338e+02 1.17136132e+02 1.16623082e+02 1.16112178e+02 + 1.15603411e+02 1.15096774e+02 1.14592257e+02 1.14089851e+02 1.13589548e+02 + 1.13091340e+02 1.12595217e+02 1.12101172e+02 1.11609196e+02 1.11119280e+02 + 1.10631415e+02 1.10145595e+02 1.09661809e+02 1.09180050e+02 1.08700310e+02 + 1.08222581e+02 1.07746853e+02 1.07273120e+02 1.06801372e+02 1.06331602e+02 + 1.05863801e+02 1.05397962e+02 1.04934077e+02 1.04472137e+02 1.04012135e+02 + 1.03554063e+02 1.03097912e+02 1.02643675e+02 1.02191344e+02 1.01740912e+02 + 1.01292370e+02 1.00845711e+02 1.00400927e+02 9.99580109e+01 9.95169543e+01 + 9.90777499e+01 9.86403901e+01 9.82048674e+01 9.77711743e+01 9.73393032e+01 + 9.69092468e+01 9.64809975e+01 9.60545481e+01 9.56298911e+01 9.52070191e+01 + 9.47859250e+01 9.43666014e+01 9.39490411e+01 9.35332368e+01 9.31191813e+01 + 9.27068676e+01 9.22962884e+01 9.18874367e+01 9.14803054e+01 9.10748874e+01 + 9.06711758e+01 9.02691635e+01 8.98688436e+01 8.94702091e+01 8.90732531e+01 + 8.86779689e+01 8.82843494e+01 8.78923879e+01 8.75020776e+01 8.71134118e+01 + 8.67263836e+01 8.63409865e+01 8.59572136e+01 8.55750584e+01 8.51945141e+01 + 8.48155743e+01 8.44382323e+01 8.40624816e+01 8.36883156e+01 8.33157279e+01 + 8.29447120e+01 8.25752613e+01 8.22073696e+01 8.18410305e+01 8.14762374e+01 + 8.11129842e+01 8.07512645e+01 8.03910720e+01 8.00324004e+01 7.96752435e+01 + 7.93195951e+01 7.89654489e+01 7.86127989e+01 7.82616389e+01 7.79119627e+01 + 7.75637643e+01 7.72170377e+01 7.68717766e+01 7.65279753e+01 7.61856276e+01 + 7.58447276e+01 7.55052693e+01 7.51672468e+01 7.48306543e+01 7.44954858e+01 + 7.41617355e+01 7.38293977e+01 7.34984663e+01 7.31689358e+01 7.28408003e+01 + 7.25140541e+01 7.21886916e+01 7.18647069e+01 7.15420945e+01 7.12208487e+01 + 7.09009639e+01 7.05824344e+01 7.02652549e+01 6.99494196e+01 6.96349230e+01 + 6.93217597e+01 6.90099241e+01 6.86994109e+01 6.83902145e+01 6.80823296e+01 + 6.77757507e+01 6.74704725e+01 6.71664897e+01 6.68637968e+01 6.65623886e+01 + 6.62622599e+01 6.59634053e+01 6.56658196e+01 6.53694976e+01 6.50744340e+01 + 6.47806238e+01 6.44880616e+01 6.41967425e+01 6.39066613e+01 6.36178129e+01 + 6.33301922e+01 6.30437941e+01 6.27586136e+01 6.24746458e+01 6.21918856e+01 + 6.19103280e+01 6.16299681e+01 6.13508009e+01 6.10728216e+01 6.07960252e+01 + 6.05204069e+01 6.02459618e+01 5.99726850e+01 5.97005719e+01 5.94296175e+01 + 5.91598171e+01 5.88911659e+01 5.86236592e+01 5.83572923e+01 5.80920605e+01 + 5.78279590e+01 5.75649833e+01 5.73031287e+01 5.70423906e+01 5.67827643e+01 + 5.65242453e+01 5.62668290e+01 5.60105109e+01 5.57552864e+01 5.55011510e+01 + 5.52481002e+01 5.49961296e+01 5.47452346e+01 5.44954109e+01 5.42466541e+01 + 5.39989596e+01 5.37523232e+01 5.35067404e+01 5.32622070e+01 5.30187186e+01 + 5.27762708e+01 5.25348594e+01 5.22944800e+01 5.20551285e+01 5.18168006e+01 + 5.15794920e+01 5.13431986e+01 5.11079161e+01 5.08736403e+01 5.06403672e+01 + 5.04080925e+01 5.01768122e+01 4.99465221e+01 4.97172181e+01 4.94888962e+01 + 4.92615523e+01 4.90351823e+01 4.88097822e+01 4.85853481e+01 4.83618758e+01 + 4.81393615e+01 4.79178012e+01 4.76971909e+01 4.74775267e+01 4.72588047e+01 + 4.70410210e+01 4.68241716e+01 4.66082528e+01 4.63932607e+01 4.61791914e+01 + 4.59660412e+01 4.57538062e+01 4.55424826e+01 4.53320666e+01 4.51225546e+01 + 4.49139427e+01 4.47062273e+01 4.44994045e+01 4.42934708e+01 4.40884224e+01 + 4.38842557e+01 4.36809670e+01 4.34785527e+01 4.32770091e+01 4.30763326e+01 + 4.28765198e+01 4.26775668e+01 4.24794703e+01 4.22822267e+01 4.20858323e+01 + 4.18902838e+01 4.16955775e+01 4.15017100e+01 4.13086779e+01 4.11164776e+01 + 4.09251057e+01 4.07345588e+01 4.05448334e+01 4.03559261e+01 4.01678336e+01 + 3.99805524e+01 3.97940792e+01 3.96084107e+01 3.94235435e+01 3.92394742e+01 + 3.90561996e+01 3.88737163e+01 3.86920211e+01 3.85111107e+01 3.83309818e+01 + 3.81516312e+01 3.79730557e+01 3.77952520e+01 3.76182170e+01 3.74419474e+01 + 3.72664400e+01 3.70916918e+01 3.69176994e+01 3.67444599e+01 3.65719700e+01 + 3.64002267e+01 3.62292268e+01 3.60589673e+01 3.58894450e+01 3.57206569e+01 + 3.55526000e+01 3.53852712e+01 3.52186675e+01 3.50527858e+01 3.48876232e+01 + 3.47231767e+01 3.45594433e+01 3.43964200e+01 3.42341038e+01 3.40724919e+01 + 3.39115813e+01 3.37513690e+01 3.35918522e+01 3.34330279e+01 3.32748934e+01 + 3.31174456e+01 3.29606818e+01 3.28045991e+01 3.26491947e+01 3.24944657e+01 + 3.23404093e+01 3.21870227e+01 3.20343032e+01 3.18822479e+01 3.17308541e+01 + 3.15801190e+01 3.14300399e+01 3.12806140e+01 3.11318386e+01 3.09837111e+01 + 3.08362286e+01 3.06893886e+01 3.05431882e+01 3.03976250e+01 3.02526961e+01 + 3.01083990e+01 2.99647310e+01 2.98216895e+01 2.96792719e+01 2.95374755e+01 + 2.93962979e+01 2.92557363e+01 2.91157882e+01 2.89764511e+01 2.88377225e+01 + 2.86995996e+01 2.85620802e+01 2.84251615e+01 2.82888412e+01 2.81531166e+01 + 2.80179854e+01 2.78834450e+01 2.77494930e+01 2.76161269e+01 2.74833442e+01 + 2.73511426e+01 2.72195195e+01 2.70884726e+01 2.69579995e+01 2.68280978e+01 + 2.66987650e+01 2.65699988e+01 2.64417968e+01 2.63141567e+01 2.61870760e+01 + 2.60605526e+01 2.59345840e+01 2.58091679e+01 2.56843019e+01 2.55599839e+01 + 2.54362115e+01 2.53129824e+01 2.51902943e+01 2.50681450e+01 2.49465323e+01 + 2.48254537e+01 2.47049073e+01 2.45848906e+01 2.44654015e+01 2.43464377e+01 + 2.42279972e+01 2.41100775e+01 2.39926767e+01 2.38757925e+01 2.37594228e+01 + 2.36435653e+01 2.35282180e+01 2.34133786e+01 2.32990452e+01 2.31852155e+01 + 2.30718874e+01 2.29590588e+01 2.28467277e+01 2.27348919e+01 2.26235494e+01 + 2.25126981e+01 2.24023359e+01 2.22924607e+01 2.21830706e+01 2.20741635e+01 + 2.19657374e+01 2.18577902e+01 2.17503199e+01 2.16433245e+01 2.15368021e+01 + 2.14307507e+01 2.13251681e+01 2.12200526e+01 2.11154021e+01 2.10112147e+01 + 2.09074884e+01 2.08042213e+01 2.07014114e+01 2.05990569e+01 2.04971557e+01 + 2.03957061e+01 2.02947061e+01 2.01941538e+01 2.00940473e+01 1.99943848e+01 + 1.98951644e+01 1.97963842e+01 1.96980423e+01 1.96001370e+01 1.95026663e+01 + 1.94056286e+01 1.93090218e+01 1.92128442e+01 1.91170941e+01 1.90217695e+01 + 1.89268688e+01 1.88323901e+01 1.87383316e+01 1.86446916e+01 1.85514683e+01 + 1.84586599e+01 1.83662647e+01 1.82742810e+01 1.81827070e+01 1.80915410e+01 + 1.80007813e+01 1.79104261e+01 1.78204738e+01 1.77309226e+01 1.76417708e+01 + 1.75530168e+01 1.74646589e+01 1.73766954e+01 1.72891247e+01 1.72019450e+01 + 1.71151548e+01 1.70287524e+01 1.69427361e+01 1.68571043e+01 1.67718555e+01 + 1.66869879e+01 1.66024999e+01 1.65183900e+01 1.64346566e+01 1.63512980e+01 + 1.62683127e+01 1.61856991e+01 1.61034557e+01 1.60215808e+01 1.59400729e+01 + 1.58589304e+01 1.57781518e+01 1.56977356e+01 1.56176803e+01 1.55379842e+01 + 1.54586459e+01 1.53796638e+01 1.53010365e+01 1.52227625e+01 1.51448402e+01 + 1.50672681e+01 1.49900448e+01 1.49131689e+01 1.48366387e+01 1.47604529e+01 + 1.46846100e+01 1.46091085e+01 1.45339471e+01 1.44591241e+01 1.43846383e+01 + 1.43104882e+01 1.42366724e+01 1.41631893e+01 1.40900377e+01 1.40172162e+01 + 1.39447232e+01 1.38725575e+01 1.38007176e+01 1.37292021e+01 1.36580097e+01 + 1.35871390e+01 1.35165887e+01 1.34463573e+01 1.33764435e+01 1.33068460e+01 + 1.32375634e+01 1.31685944e+01 1.30999376e+01 1.30315918e+01 1.29635555e+01 + 1.28958275e+01 1.28284065e+01 1.27612911e+01 1.26944801e+01 1.26279721e+01 + 1.25617660e+01 1.24958603e+01 1.24302538e+01 1.23649452e+01 1.22999333e+01 + 1.22352168e+01 1.21707945e+01 1.21066650e+01 1.20428272e+01 1.19792797e+01 + 1.19160215e+01 1.18530511e+01 1.17903674e+01 1.17279692e+01 1.16658553e+01 + 1.16040244e+01 1.15424753e+01 1.14812069e+01 1.14202179e+01 1.13595071e+01 + 1.12990734e+01 1.12389156e+01 1.11790324e+01 1.11194228e+01 1.10600855e+01 + 1.10010194e+01 1.09422233e+01 1.08836961e+01 1.08254366e+01 1.07674437e+01 + 1.07097162e+01 1.06522531e+01 1.05950531e+01 1.05381151e+01 1.04814381e+01 + 1.04250209e+01 1.03688624e+01 1.03129614e+01 1.02573170e+01 1.02019279e+01 + 1.01467932e+01 1.00919116e+01 1.00372822e+01 9.98290383e+00 9.92877541e+00 + 9.87489588e+00 9.82126418e+00 9.76787925e+00 9.71474003e+00 9.66184546e+00 + 9.60919449e+00 9.55678608e+00 9.50461920e+00 9.45269279e+00 9.40100584e+00 + 9.34955731e+00 9.29834619e+00 9.24737144e+00 9.19663206e+00 9.14612703e+00 + 9.09585535e+00 9.04581602e+00 8.99600803e+00 8.94643040e+00 8.89708213e+00 + 8.84796224e+00 8.79906975e+00 8.75040368e+00 8.70196304e+00 8.65374689e+00 + 8.60575424e+00 8.55798414e+00 8.51043563e+00 8.46310776e+00 8.41599957e+00 + 8.36911012e+00 8.32243847e+00 8.27598368e+00 8.22974482e+00 8.18372096e+00 + 8.13791116e+00 8.09231451e+00 8.04693009e+00 8.00175699e+00 7.95679428e+00 + 7.91204108e+00 7.86749646e+00 7.82315954e+00 7.77902941e+00 7.73510518e+00 + 7.69138598e+00 7.64787090e+00 7.60455907e+00 7.56144961e+00 7.51854165e+00 + 7.47583431e+00 7.43332674e+00 7.39101806e+00 7.34890742e+00 7.30699397e+00 + 7.26527684e+00 7.22375519e+00 7.18242817e+00 7.14129495e+00 7.10035469e+00 + 7.05960654e+00 7.01904969e+00 6.97868329e+00 6.93850653e+00 6.89851859e+00 + 6.85871864e+00 6.81910588e+00 6.77967948e+00 6.74043866e+00 6.70138259e+00 + 6.66251049e+00 6.62382154e+00 6.58531497e+00 6.54698997e+00 6.50884577e+00 + 6.47088157e+00 6.43309659e+00 6.39549006e+00 6.35806121e+00 6.32080926e+00 + 6.28373344e+00 6.24683299e+00 6.21010714e+00 6.17355514e+00 6.13717624e+00 + 6.10096968e+00 6.06493471e+00 6.02907059e+00 5.99337657e+00 5.95785191e+00 + 5.92249588e+00 5.88730774e+00 5.85228676e+00 5.81743222e+00 5.78274340e+00 + 5.74821956e+00 5.71385999e+00 5.67966397e+00 5.64563080e+00 5.61175977e+00 + 5.57805016e+00 5.54450127e+00 5.51111241e+00 5.47788287e+00 5.44481196e+00 + 5.41189900e+00 5.37914328e+00 5.34654412e+00 5.31410085e+00 5.28181277e+00 + 5.24967922e+00 5.21769951e+00 5.18587298e+00 5.15419896e+00 5.12267678e+00 + 5.09130577e+00 5.06008528e+00 5.02901465e+00 4.99809322e+00 4.96732034e+00 + 4.93669537e+00 4.90621764e+00 4.87588653e+00 4.84570138e+00 4.81566156e+00 + 4.78576643e+00 4.75601536e+00 4.72640772e+00 4.69694288e+00 4.66762021e+00 + 4.63843909e+00 4.60939891e+00 4.58049903e+00 4.55173885e+00 4.52311776e+00 + 4.49463514e+00 4.46629038e+00 4.43808289e+00 4.41001205e+00 4.38207728e+00 + 4.35427796e+00 4.32661351e+00 4.29908334e+00 4.27168685e+00 4.24442345e+00 + 4.21729257e+00 4.19029361e+00 4.16342600e+00 4.13668917e+00 4.11008252e+00 + 4.08360550e+00 4.05725754e+00 4.03103805e+00 4.00494648e+00 3.97898227e+00 + 3.95314485e+00 3.92743367e+00 3.90184816e+00 3.87638778e+00 3.85105197e+00 + 3.82584019e+00 3.80075188e+00 3.77578651e+00 3.75094352e+00 3.72622238e+00 + 3.70162255e+00 3.67714350e+00 3.65278469e+00 3.62854560e+00 3.60442568e+00 + 3.58042442e+00 3.55654129e+00 3.53277577e+00 3.50912734e+00 3.48559548e+00 + 3.46217968e+00 3.43887941e+00 3.41569418e+00 3.39262347e+00 3.36966677e+00 + 3.34682358e+00 3.32409340e+00 3.30147572e+00 3.27897005e+00 3.25657589e+00 + 3.23429274e+00 3.21212012e+00 3.19005753e+00 3.16810449e+00 3.14626050e+00 + 3.12452509e+00 3.10289777e+00 3.08137807e+00 3.05996550e+00 3.03865959e+00 + 3.01745986e+00 2.99636585e+00 2.97537708e+00 2.95449308e+00 2.93371339e+00 + 2.91303755e+00 2.89246509e+00 2.87199555e+00 2.85162848e+00 2.83136341e+00 + 2.81119989e+00 2.79113748e+00 2.77117572e+00 2.75131416e+00 2.73155235e+00 + 2.71188986e+00 2.69232623e+00 2.67286103e+00 2.65349381e+00 2.63422415e+00 + 2.61505160e+00 2.59597572e+00 2.57699610e+00 2.55811229e+00 2.53932388e+00 + 2.52063043e+00 2.50203151e+00 2.48352671e+00 2.46511561e+00 2.44679779e+00 + 2.42857282e+00 2.41044029e+00 2.39239979e+00 2.37445091e+00 2.35659324e+00 + 2.33882636e+00 2.32114987e+00 2.30356337e+00 2.28606645e+00 2.26865871e+00 + 2.25133974e+00 2.23410916e+00 2.21696656e+00 2.19991156e+00 2.18294374e+00 + 2.16606273e+00 2.14926814e+00 2.13255957e+00 2.11593664e+00 2.09939896e+00 + 2.08294615e+00 2.06657783e+00 2.05029362e+00 2.03409313e+00 2.01797600e+00 + 2.00194185e+00 1.98599029e+00 1.97012097e+00 1.95433351e+00 1.93862754e+00 + 1.92300269e+00 1.90745860e+00 1.89199490e+00 1.87661123e+00 1.86130723e+00 + 1.84608254e+00 1.83093680e+00 1.81586965e+00 1.80088074e+00 1.78596972e+00 + 1.77113623e+00 1.75637992e+00 1.74170044e+00 1.72709745e+00 1.71257059e+00 + 1.69811953e+00 1.68374392e+00 1.66944342e+00 1.65521768e+00 1.64106637e+00 + 1.62698916e+00 1.61298570e+00 1.59905566e+00 1.58519871e+00 1.57141452e+00 + 1.55770275e+00 1.54406307e+00 1.53049517e+00 1.51699871e+00 1.50357336e+00 + 1.49021881e+00 1.47693473e+00 1.46372080e+00 1.45057671e+00 1.43750213e+00 + 1.42449675e+00 1.41156025e+00 1.39869231e+00 1.38589264e+00 1.37316091e+00 + 1.36049681e+00 1.34790004e+00 1.33537029e+00 1.32290725e+00 1.31051063e+00 + 1.29818010e+00 1.28591538e+00 1.27371616e+00 1.26158215e+00 1.24951304e+00 + 1.23750854e+00 1.22556835e+00 1.21369217e+00 1.20187973e+00 1.19013071e+00 + 1.17844484e+00 1.16682182e+00 1.15526137e+00 1.14376319e+00 1.13232701e+00 + 1.12095253e+00 1.10963948e+00 1.09838757e+00 1.08719652e+00 1.07606606e+00 + 1.06499590e+00 1.05398576e+00 1.04303538e+00 1.03214447e+00 1.02131277e+00 + 1.01053999e+00 9.99825872e-01 9.89170142e-01 9.78572531e-01 9.68032772e-01 + 9.57550597e-01 9.47125741e-01 9.36757940e-01 9.26446931e-01 9.16192450e-01 + 9.05994238e-01 8.95852034e-01 8.85765579e-01 8.75734617e-01 8.65758890e-01 + 8.55838142e-01 8.45972120e-01 8.36160571e-01 8.26403241e-01 8.16699880e-01 + 8.07050238e-01 7.97454067e-01 7.87911117e-01 7.78421143e-01 7.68983898e-01 + 7.59599138e-01 7.50266619e-01 7.40986099e-01 7.31757336e-01 7.22580090e-01 + 7.13454121e-01 7.04379191e-01 6.95355062e-01 6.86381499e-01 6.77458264e-01 + 6.68585126e-01 6.59761849e-01 6.50988201e-01 6.42263952e-01 6.33588871e-01 + 6.24962729e-01 6.16385297e-01 6.07856348e-01 5.99375655e-01 5.90942994e-01 + 5.82558139e-01 5.74220867e-01 5.65930957e-01 5.57688185e-01 5.49492333e-01 + 5.41343179e-01 5.33240506e-01 5.25184095e-01 5.17173731e-01 5.09209196e-01 + 5.01290276e-01 4.93416758e-01 4.85588427e-01 4.77805073e-01 4.70066483e-01 + 4.62372448e-01 4.54722758e-01 4.47117204e-01 4.39555579e-01 4.32037677e-01 + 4.24563291e-01 4.17132216e-01 4.09744249e-01 4.02399187e-01 3.95096827e-01 + 3.87836967e-01 3.80619408e-01 3.73443950e-01 3.66310393e-01 3.59218541e-01 + 3.52168196e-01 3.45159161e-01 3.38191243e-01 3.31264245e-01 3.24377974e-01 + 3.17532238e-01 3.10726845e-01 3.03961604e-01 2.97236323e-01 2.90550815e-01 + 2.83904889e-01 2.77298359e-01 2.70731037e-01 2.64202737e-01 2.57713274e-01 + 2.51262463e-01 2.44850121e-01 2.38476064e-01 2.32140110e-01 2.25842078e-01 + 2.19581787e-01 2.13359058e-01 2.07173711e-01 2.01025569e-01 1.94914453e-01 + 1.88840187e-01 1.82802595e-01 1.76801503e-01 1.70836735e-01 1.64908118e-01 + 1.59015479e-01 1.53158646e-01 1.47337448e-01 1.41551713e-01 1.35801273e-01 + 1.30085958e-01 1.24405600e-01 1.18760030e-01 1.13149083e-01 1.07572591e-01 + 1.02030390e-01 9.65223148e-02 9.10482010e-02 8.56078855e-02 8.02012058e-02 + 7.48280000e-02 6.94881069e-02 6.41813661e-02 5.89076178e-02 5.36667029e-02 + 4.84584631e-02 4.32827407e-02 3.81393787e-02 3.30282209e-02 2.79491117e-02 + 2.29018961e-02 1.78864198e-02 1.29025294e-02 7.95007189e-03 3.02889510e-03 + -1.86115254e-03 -6.72022191e-03 -1.15484632e-02 -1.63460261e-02 -2.11130593e-02 + -2.58497113e-02 -3.05561295e-02 -3.52324610e-02 -3.98788520e-02 -4.44954482e-02 + -4.90823946e-02 -5.36398356e-02 -5.81679150e-02 -6.26667758e-02 -6.71365606e-02 + -7.15774112e-02 -7.59894689e-02 -8.03728742e-02 -8.47277672e-02 -8.90542872e-02 + -9.33525729e-02 -9.76227626e-02 -1.01864994e-01 -1.06079403e-01 -1.10266128e-01 + -1.14425303e-01 -1.18557063e-01 -1.22661543e-01 -1.26738878e-01 -1.30789200e-01 + -1.34812642e-01 -1.38809337e-01 -1.42779415e-01 -1.46723008e-01 -1.50640247e-01 + -1.54531261e-01 -1.58396179e-01 -1.62235131e-01 -1.66048243e-01 -1.69835645e-01 + -1.73597463e-01 -1.77333822e-01 -1.81044851e-01 -1.84730672e-01 -1.88391412e-01 + -1.92027194e-01 -1.95638143e-01 -1.99224381e-01 -2.02786030e-01 -2.06323214e-01 + -2.09836053e-01 -2.13324668e-01 -2.16789180e-01 -2.20229708e-01 -2.23646372e-01 + -2.27039291e-01 -2.30408583e-01 -2.33754366e-01 -2.37076757e-01 -2.40375872e-01 + -2.43651829e-01 -2.46904742e-01 -2.50134726e-01 -2.53341897e-01 -2.56526369e-01 + -2.59688255e-01 -2.62827668e-01 -2.65944721e-01 -2.69039526e-01 -2.72112194e-01 + -2.75162837e-01 -2.78191566e-01 -2.81198490e-01 -2.84183720e-01 -2.87147363e-01 + -2.90089530e-01 -2.93010328e-01 -2.95909864e-01 -2.98788247e-01 -3.01645582e-01 + -3.04481977e-01 -3.07297536e-01 -3.10092366e-01 -3.12866570e-01 -3.15620254e-01 + -3.18353521e-01 -3.21066475e-01 -3.23759218e-01 -3.26431854e-01 -3.29084484e-01 + -3.31717210e-01 -3.34330133e-01 -3.36923354e-01 -3.39496972e-01 -3.42051089e-01 + -3.44585802e-01 -3.47101211e-01 -3.49597415e-01 -3.52074511e-01 -3.54532597e-01 + -3.56971771e-01 -3.59392128e-01 -3.61793765e-01 -3.64176779e-01 -3.66541263e-01 + -3.68887314e-01 -3.71215026e-01 -3.73524493e-01 -3.75815808e-01 -3.78089065e-01 + -3.80344357e-01 -3.82581777e-01 -3.84801415e-01 -3.87003365e-01 -3.89187716e-01 + -3.91354561e-01 -3.93503988e-01 -3.95636089e-01 -3.97750952e-01 -3.99848667e-01 + -4.01929323e-01 -4.03993008e-01 -4.06039810e-01 -4.08069816e-01 -4.10083114e-01 + -4.12079790e-01 -4.14059931e-01 -4.16023623e-01 -4.17970951e-01 -4.19902001e-01 + -4.21816857e-01 -4.23715604e-01 -4.25598325e-01 -4.27465106e-01 -4.29316028e-01 + -4.31151174e-01 -4.32970628e-01 -4.34774472e-01 -4.36562786e-01 -4.38335654e-01 + -4.40093155e-01 -4.41835370e-01 -4.43562380e-01 -4.45274265e-01 -4.46971104e-01 + -4.48652977e-01 -4.50319962e-01 -4.51972137e-01 -4.53609582e-01 -4.55232374e-01 + -4.56840589e-01 -4.58434307e-01 -4.60013602e-01 -4.61578551e-01 -4.63129231e-01 + -4.64665718e-01 -4.66188086e-01 -4.67696410e-01 -4.69190766e-01 -4.70671227e-01 + -4.72137867e-01 -4.73590761e-01 -4.75029981e-01 -4.76455601e-01 -4.77867693e-01 + -4.79266329e-01 -4.80651581e-01 -4.82023522e-01 -4.83382222e-01 -4.84727752e-01 + -4.86060183e-01 -4.87379586e-01 -4.88686030e-01 -4.89979585e-01 -4.91260320e-01 + -4.92528305e-01 -4.93783608e-01 -4.95026298e-01 -4.96256443e-01 -4.97474110e-01 + -4.98679367e-01 -4.99872282e-01 -5.01052921e-01 -5.02221351e-01 -5.03377637e-01 + -5.04521847e-01 -5.05654045e-01 -5.06774297e-01 -5.07882668e-01 -5.08979223e-01 + -5.10064026e-01 -5.11137142e-01 -5.12198633e-01 -5.13248565e-01 -5.14286999e-01 + -5.15314000e-01 -5.16329629e-01 -5.17333949e-01 -5.18327023e-01 -5.19308912e-01 + -5.20279677e-01 -5.21239380e-01 -5.22188082e-01 -5.23125844e-01 -5.24052725e-01 + -5.24968787e-01 -5.25874088e-01 -5.26768689e-01 -5.27652649e-01 -5.28526026e-01 + -5.29388880e-01 -5.30241269e-01 -5.31083251e-01 -5.31914885e-01 -5.32736227e-01 + -5.33547335e-01 -5.34348267e-01 -5.35139079e-01 -5.35919828e-01 -5.36690570e-01 + -5.37451361e-01 -5.38202257e-01 -5.38943313e-01 -5.39674586e-01 -5.40396130e-01 + -5.41107999e-01 -5.41810248e-01 -5.42502932e-01 -5.43186105e-01 -5.43859819e-01 + -5.44524130e-01 -5.45179090e-01 -5.45824751e-01 -5.46461168e-01 -5.47088392e-01 + -5.47706475e-01 -5.48315470e-01 -5.48915429e-01 -5.49506403e-01 -5.50088443e-01 + -5.50661600e-01 -5.51225926e-01 -5.51781470e-01 -5.52328283e-01 -5.52866416e-01 + -5.53395918e-01 -5.53916838e-01 -5.54429227e-01 -5.54933133e-01 -5.55428606e-01 + -5.55915693e-01 -5.56394444e-01 -5.56864906e-01 -5.57327129e-01 -5.57781159e-01 + -5.58227044e-01 -5.58664831e-01 -5.59094569e-01 -5.59516303e-01 -5.59930080e-01 + -5.60335947e-01 -5.60733949e-01 -5.61124134e-01 -5.61506547e-01 -5.61881233e-01 + -5.62248237e-01 -5.62607606e-01 -5.62959384e-01 -5.63303615e-01 -5.63640344e-01 + -5.63969616e-01 -5.64291475e-01 -5.64605964e-01 -5.64913127e-01 -5.65213008e-01 + -5.65505649e-01 -5.65791095e-01 -5.66069387e-01 -5.66340569e-01 -5.66604683e-01 + -5.66861772e-01 -5.67111876e-01 -5.67355039e-01 -5.67591301e-01 -5.67820705e-01 + -5.68043291e-01 -5.68259100e-01 -5.68468175e-01 -5.68670554e-01 -5.68866278e-01 + -5.69055389e-01 -5.69237926e-01 -5.69413928e-01 -5.69583436e-01 -5.69746489e-01 + -5.69903126e-01 -5.70053387e-01 -5.70197311e-01 -5.70334935e-01 -5.70466300e-01 + -5.70591443e-01 -5.70710402e-01 -5.70823215e-01 -5.70929921e-01 -5.71030557e-01 + -5.71125160e-01 -5.71213768e-01 -5.71296418e-01 -5.71373147e-01 -5.71443991e-01 + -5.71508988e-01 -5.71568173e-01 -5.71621583e-01 -5.71669253e-01 -5.71711221e-01 + -5.71747521e-01 -5.71778189e-01 -5.71803260e-01 -5.71822770e-01 -5.71836753e-01 + -5.71845245e-01 -5.71848280e-01 -5.71845893e-01 -5.71838118e-01 -5.71824988e-01 + -5.71806540e-01 -5.71782805e-01 -5.71753818e-01 -5.71719612e-01 -5.71680221e-01 + -5.71635678e-01 -5.71586016e-01 -5.71531267e-01 -5.71471465e-01 -5.71406642e-01 + -5.71336831e-01 -5.71262063e-01 -5.71182371e-01 -5.71097787e-01 -5.71008343e-01 + -5.70914069e-01 -5.70814998e-01 -5.70711161e-01 -5.70602589e-01 -5.70489313e-01 + -5.70371364e-01 -5.70248773e-01 -5.70121569e-01 -5.69989785e-01 -5.69853449e-01 + -5.69712592e-01 -5.69567244e-01 -5.69417434e-01 -5.69263193e-01 -5.69104550e-01 + -5.68941534e-01 -5.68774174e-01 -5.68602500e-01 -5.68426541e-01 -5.68246325e-01 + -5.68061880e-01 -5.67873236e-01 -5.67680421e-01 -5.67483463e-01 -5.67282390e-01 + -5.67077231e-01 -5.66868012e-01 -5.66654761e-01 -5.66437507e-01 -5.66216276e-01 + -5.65991097e-01 -5.65761995e-01 -5.65528997e-01 -5.65292132e-01 -5.65051425e-01 + -5.64806903e-01 -5.64558593e-01 -5.64306521e-01 -5.64050713e-01 -5.63791195e-01 + -5.63527993e-01 -5.63261133e-01 -5.62990640e-01 -5.62716541e-01 -5.62438860e-01 + -5.62157624e-01 -5.61872856e-01 -5.61584582e-01 -5.61292827e-01 -5.60997617e-01 + -5.60698974e-01 -5.60396925e-01 -5.60091493e-01 -5.59782703e-01 -5.59470579e-01 + -5.59155144e-01 -5.58836424e-01 -5.58514441e-01 -5.58189220e-01 -5.57860784e-01 + -5.57529156e-01 -5.57194360e-01 -5.56856420e-01 -5.56515357e-01 -5.56171195e-01 + -5.55823958e-01 -5.55473667e-01 -5.55120345e-01 -5.54764016e-01 -5.54404701e-01 + -5.54042422e-01 -5.53677202e-01 -5.53309063e-01 -5.52938027e-01 -5.52564116e-01 + -5.52187351e-01 -5.51807754e-01 -5.51425346e-01 -5.51040150e-01 -5.50652186e-01 + -5.50261475e-01 -5.49868039e-01 -5.49471898e-01 -5.49073073e-01 -5.48671586e-01 + -5.48267456e-01 -5.47860705e-01 -5.47451353e-01 -5.47039419e-01 -5.46624925e-01 + -5.46207890e-01 -5.45788335e-01 -5.45366279e-01 -5.44941743e-01 -5.44514745e-01 + -5.44085306e-01 -5.43653444e-01 -5.43219181e-01 -5.42782534e-01 -5.42343522e-01 + -5.41902166e-01 -5.41458484e-01 -5.41012495e-01 -5.40564218e-01 -5.40113671e-01 + -5.39660874e-01 -5.39205844e-01 -5.38748600e-01 -5.38289161e-01 -5.37827544e-01 + -5.37363768e-01 -5.36897851e-01 -5.36429810e-01 -5.35959665e-01 -5.35487431e-01 + -5.35013128e-01 -5.34536772e-01 -5.34058382e-01 -5.33577974e-01 -5.33095565e-01 + -5.32611174e-01 -5.32124817e-01 -5.31636511e-01 -5.31146273e-01 -5.30654120e-01 + -5.30160069e-01 -5.29664136e-01 -5.29166338e-01 -5.28666691e-01 -5.28165213e-01 + -5.27661918e-01 -5.27156824e-01 -5.26649946e-01 -5.26141301e-01 -5.25630905e-01 + -5.25118773e-01 -5.24604921e-01 -5.24089365e-01 -5.23572121e-01 -5.23053204e-01 + -5.22532629e-01 -5.22010413e-01 -5.21486570e-01 -5.20961115e-01 -5.20434064e-01 + -5.19905431e-01 -5.19375232e-01 -5.18843482e-01 -5.18310194e-01 -5.17775385e-01 + -5.17239069e-01 -5.16701260e-01 -5.16161972e-01 -5.15621221e-01 -5.15079020e-01 + -5.14535383e-01 -5.13990325e-01 -5.13443861e-01 -5.12896003e-01 -5.12346766e-01 + -5.11796163e-01 -5.11244210e-01 -5.10690918e-01 -5.10136302e-01 -5.09580375e-01 + -5.09023150e-01 -5.08464642e-01 -5.07904864e-01 -5.07343828e-01 -5.06781547e-01 + -5.06218036e-01 -5.05653306e-01 -5.05087372e-01 -5.04520244e-01 -5.03951937e-01 + -5.03382464e-01 -5.02811836e-01 -5.02240066e-01 -5.01667167e-01 -5.01093151e-01 + -5.00518030e-01 -4.99941817e-01 -4.99364524e-01 -4.98786163e-01 -4.98206745e-01 + -4.97626284e-01 -4.97044791e-01 -4.96462276e-01 -4.95878754e-01 -4.95294234e-01 + -4.94708728e-01 -4.94122249e-01 -4.93534807e-01 -4.92946414e-01 -4.92357080e-01 + -4.91766818e-01 -4.91175639e-01 -4.90583552e-01 -4.89990570e-01 -4.89396703e-01 + -4.88801963e-01 -4.88206359e-01 -4.87609902e-01 -4.87012603e-01 -4.86414473e-01 + -4.85815522e-01 -4.85215760e-01 -4.84615198e-01 -4.84013846e-01 -4.83411713e-01 + -4.82808810e-01 -4.82205147e-01 -4.81600734e-01 -4.80995580e-01 -4.80389695e-01 + -4.79783089e-01 -4.79175772e-01 -4.78567752e-01 -4.77959039e-01 -4.77349643e-01 + -4.76739573e-01 -4.76128837e-01 -4.75517444e-01 -4.74905405e-01 -4.74292727e-01 + -4.73679419e-01 -4.73065490e-01 -4.72450948e-01 -4.71835802e-01 -4.71220061e-01 + -4.70603732e-01 -4.69986823e-01 -4.69369343e-01 -4.68751300e-01 -4.68132701e-01 + -4.67513554e-01 -4.66893867e-01 -4.66273647e-01 -4.65652902e-01 -4.65031639e-01 + -4.64409865e-01 -4.63787588e-01 -4.63164813e-01 -4.62541548e-01 -4.61917800e-01 + -4.61293575e-01 -4.60668879e-01 -4.60043719e-01 -4.59418101e-01 -4.58792030e-01 + -4.58165514e-01 -4.57538556e-01 -4.56911164e-01 -4.56283341e-01 -4.55655094e-01 + -4.55026428e-01 -4.54397347e-01 -4.53767856e-01 -4.53137959e-01 -4.52507661e-01 + -4.51876967e-01 -4.51245879e-01 -4.50614402e-01 -4.49982539e-01 -4.49350293e-01 + -4.48717668e-01 -4.48084667e-01 -4.47451292e-01 -4.46817545e-01 -4.46183429e-01 + -4.45548945e-01 -4.44914096e-01 -4.44278882e-01 -4.43643305e-01 -4.43007366e-01 + -4.42371064e-01 -4.41734400e-01 -4.41097375e-01 -4.40459987e-01 -4.39822236e-01 + -4.39184120e-01 -4.38545639e-01 -4.37906790e-01 -4.37267571e-01 -4.36627979e-01 + -4.35988012e-01 -4.35347666e-01 -4.34706936e-01 -4.34065819e-01 -4.33424310e-01 + -4.32782403e-01 -4.32140093e-01 -4.31497373e-01 -4.30854237e-01 -4.30210676e-01 + -4.29566683e-01 -4.28922249e-01 -4.28277366e-01 -4.27632022e-01 -4.26986208e-01 + -4.26339913e-01 -4.25693124e-01 -4.25045828e-01 -4.24398014e-01 -4.23749665e-01 + -4.23100768e-01 -4.22451306e-01 -4.21801263e-01 -4.21150620e-01 -4.20499361e-01 + -4.19847464e-01 -4.19194909e-01 -4.18541676e-01 -4.17887740e-01 -4.17233079e-01 + -4.16577668e-01 -4.15921480e-01 -4.15264487e-01 -4.14606663e-01 -4.13947976e-01 + -4.13288394e-01 -4.12627887e-01 -4.11966418e-01 -4.11303953e-01 -4.10640454e-01 + -4.09975882e-01 -4.09310196e-01 -4.08643354e-01 -4.07975312e-01 -4.07306023e-01 + -4.06635440e-01 -4.05963512e-01 -4.05290187e-01 -4.04615410e-01 -4.03939126e-01 + -4.03261274e-01 -4.02581795e-01 -4.01900623e-01 -4.01217692e-01 -4.00532934e-01 + -3.99846276e-01 -3.99157643e-01 -3.98466959e-01 -3.97774141e-01 -3.97079107e-01 + -3.96381768e-01 -3.95682035e-01 -3.94979813e-01 -3.94275004e-01 -3.93567506e-01 + -3.92857215e-01 -3.92144021e-01 -3.91427810e-01 -3.90708464e-01 -3.89985860e-01 + -3.89259873e-01 -3.88530369e-01 -3.87797212e-01 -3.87060261e-01 -3.86319368e-01 + -3.85574381e-01 -3.84825141e-01 -3.84071485e-01 -3.83313243e-01 -3.82550239e-01 + -3.81782290e-01 -3.81009207e-01 -3.80230795e-01 -3.79446850e-01 -3.78657162e-01 + -3.77861514e-01 -3.77059680e-01 -3.76251427e-01 -3.75436513e-01 -3.74614689e-01 + -3.73785696e-01 -3.72949266e-01 -3.72105122e-01 -3.71252978e-01 -3.70392537e-01 + -3.69523494e-01 -3.68645532e-01 -3.67758323e-01 -3.66861529e-01 -3.65954801e-01 + -3.65037777e-01 -3.64110084e-01 -3.63171337e-01 -3.62221139e-01 -3.61259079e-01 + -3.60284733e-01 -3.59297664e-01 -3.58297420e-01 -3.57283538e-01 -3.56255536e-01 + -3.55212921e-01 -3.54155184e-01 -3.53081799e-01 -3.51992226e-01 -3.50885908e-01 + -3.49762272e-01 -3.48620730e-01 -3.47460674e-01 -3.46281482e-01 -3.45082512e-01 + -3.43863106e-01 -3.42622589e-01 -3.41360265e-01 -3.40075422e-01 -3.38767331e-01 + -3.37435241e-01 -3.36078386e-01 -3.34695979e-01 -3.33287216e-01 -3.31851274e-01 + -3.30387312e-01 -3.28894470e-01 -3.27371871e-01 -3.25818619e-01 -3.24233802e-01 + -3.22616489e-01 -3.20965736e-01 -3.19280578e-01 -3.17560039e-01 -3.15803127e-01 + -3.14008835e-01 -3.12176145e-01 -3.10304027e-01 -3.08391440e-01 -3.06437334e-01 + -3.04440652e-01 -3.02400330e-01 -3.00315300e-01 -2.98184493e-01 -2.96006839e-01 + -2.93781270e-01 -2.91506723e-01 -2.89182144e-01 -2.86806488e-01 -2.84378723e-01 + -2.81897836e-01 -2.79362834e-01 -2.76772748e-01 -2.74126639e-01 -2.71423602e-01 + -2.68662768e-01 -2.65843311e-01 -2.62964456e-01 -2.60025480e-01 -2.57025720e-01 + -2.53964578e-01 -2.50841531e-01 -2.47656133e-01 -2.44408025e-01 -2.41096940e-01 + -2.37722713e-01 -2.34285290e-01 -2.30784728e-01 -2.27221216e-01 -2.23595069e-01 + -2.19906751e-01 -2.16156870e-01 -2.12346197e-01 -2.08475670e-01 -2.04546403e-01 + -2.00559695e-01 -1.96517039e-01 -1.92420129e-01 -1.88270867e-01 -1.84071375e-01 + -1.79823996e-01 -1.75531303e-01 -1.71196106e-01 -1.66821454e-01 -1.62410640e-01 + -1.57967206e-01 -1.53494938e-01 -1.48997875e-01 -1.44480302e-01 -1.39946746e-01 + -1.35401977e-01 -1.30850997e-01 -1.26299032e-01 -1.21751524e-01 -1.17214115e-01 + -1.12692635e-01 -1.08193080e-01 -1.03721599e-01 -9.92844631e-02 -9.48880474e-02 + -9.05387997e-02 -8.62432123e-02 -8.20077888e-02 -7.78390103e-02 -7.37432981e-02 + -6.97269763e-02 -6.57962311e-02 -6.19570698e-02 -5.82152789e-02 -5.45763816e-02 + -5.10455950e-02 -4.76277880e-02 -4.43274408e-02 -4.11486044e-02 -3.80948645e-02 + -3.51693060e-02 -3.23744824e-02 -2.97123890e-02 -2.71844398e-02 -2.47914507e-02 + -2.25336279e-02 -2.04105624e-02 -1.84212308e-02 -1.65640035e-02 -1.48366591e-02 + -1.32364061e-02 -1.17599112e-02 -1.04033349e-02 -9.16237201e-03 -8.03229914e-03 + -7.00802647e-03 -6.08415391e-03 -5.25503063e-03 -4.51481676e-03 -3.85754635e-03 + -3.27719036e-03 -2.76771858e-03 -2.32315928e-03 -1.93765556e-03 -1.60551741e-03 + -1.32126846e-03 -1.07968684e-03 -8.75839483e-04 -7.05109467e-04 -5.63216214e-04 + -4.46228565e-04 -3.50570902e-04 -2.73022712e-04 -2.10712128e-04 -1.61104137e-04 + -1.21984250e-04 -9.14384753e-05 -6.78305122e-05 -4.97770498e-05 -3.61220304e-05 + -2.59106753e-05 -1.83639752e-05 -1.28542408e-05 -8.88218889e-06 -6.05591675e-06 + -4.07199229e-06 -2.69877730e-06 -1.76199872e-06 -1.13249903e-06 -7.16031265e-07 + -4.44916328e-07 -2.71351442e-07 -1.62145156e-07 -9.46547803e-08 -5.37131977e-08 + -2.93506097e-08 -1.51400925e-08 -7.02125004e-09 -2.48169531e-09 0.00000000e+00 + 4.65278880e+02 4.65278880e+02 4.65278880e+02 4.65278880e+02 4.65278880e+02 + 4.65278880e+02 4.65278880e+02 4.65278880e+02 4.65278880e+02 4.65278880e+02 + 4.65278880e+02 4.65278880e+02 4.65278880e+02 4.65278880e+02 4.65278880e+02 + 4.65278880e+02 4.65278880e+02 4.65278880e+02 4.65278880e+02 4.65278880e+02 + 4.65278880e+02 4.65278880e+02 4.65278880e+02 4.65278880e+02 4.65278880e+02 + 4.65278880e+02 4.65278880e+02 4.65278880e+02 4.65278880e+02 4.65278880e+02 + 4.65278880e+02 4.65278880e+02 4.65278880e+02 4.65278880e+02 4.65278880e+02 + 4.65278880e+02 4.65278880e+02 4.65278880e+02 4.65278880e+02 4.65278880e+02 + 4.65278880e+02 4.65278880e+02 4.65278880e+02 4.65278880e+02 4.65278880e+02 + 4.65278880e+02 4.65278880e+02 4.65278880e+02 4.65278880e+02 4.65278880e+02 + 4.63463739e+02 4.61019483e+02 4.58587846e+02 4.56168764e+02 4.53762172e+02 + 4.51368008e+02 4.48986207e+02 4.46616707e+02 4.44259445e+02 4.41914358e+02 + 4.39581384e+02 4.37260463e+02 4.34951531e+02 4.32654528e+02 4.30369393e+02 + 4.28096066e+02 4.25834486e+02 4.23584594e+02 4.21346329e+02 4.19119633e+02 + 4.16904447e+02 4.14700710e+02 4.12508367e+02 4.10327357e+02 4.08157624e+02 + 4.05999109e+02 4.03851756e+02 4.01715507e+02 3.99590306e+02 3.97476097e+02 + 3.95372823e+02 3.93280429e+02 3.91198858e+02 3.89128057e+02 3.87067969e+02 + 3.85018540e+02 3.82979716e+02 3.80951442e+02 3.78933665e+02 3.76926331e+02 + 3.74929387e+02 3.72942779e+02 3.70966455e+02 3.69000363e+02 3.67044450e+02 + 3.65098663e+02 3.63162953e+02 3.61237266e+02 3.59321552e+02 3.57415759e+02 + 3.55519838e+02 3.53633737e+02 3.51757407e+02 3.49890797e+02 3.48033859e+02 + 3.46186541e+02 3.44348796e+02 3.42520575e+02 3.40701828e+02 3.38892508e+02 + 3.37092565e+02 3.35301953e+02 3.33520624e+02 3.31748529e+02 3.29985623e+02 + 3.28231857e+02 3.26487185e+02 3.24751562e+02 3.23024939e+02 3.21307272e+02 + 3.19598515e+02 3.17898622e+02 3.16207547e+02 3.14525246e+02 3.12851674e+02 + 3.11186786e+02 3.09530538e+02 3.07882885e+02 3.06243784e+02 3.04613191e+02 + 3.02991062e+02 3.01377354e+02 2.99772024e+02 2.98175029e+02 2.96586327e+02 + 2.95005875e+02 2.93433630e+02 2.91869551e+02 2.90313596e+02 2.88765724e+02 + 2.87225893e+02 2.85694062e+02 2.84170189e+02 2.82654235e+02 2.81146159e+02 + 2.79645920e+02 2.78153479e+02 2.76668794e+02 2.75191828e+02 2.73722539e+02 + 2.72260890e+02 2.70806840e+02 2.69360351e+02 2.67921384e+02 2.66489901e+02 + 2.65065863e+02 2.63649232e+02 2.62239970e+02 2.60838040e+02 2.59443403e+02 + 2.58056023e+02 2.56675863e+02 2.55302885e+02 2.53937052e+02 2.52578329e+02 + 2.51226678e+02 2.49882063e+02 2.48544449e+02 2.47213799e+02 2.45890078e+02 + 2.44573250e+02 2.43263280e+02 2.41960132e+02 2.40663773e+02 2.39374166e+02 + 2.38091278e+02 2.36815073e+02 2.35545518e+02 2.34282579e+02 2.33026222e+02 + 2.31776412e+02 2.30533117e+02 2.29296302e+02 2.28065935e+02 2.26841983e+02 + 2.25624413e+02 2.24413191e+02 2.23208287e+02 2.22009666e+02 2.20817296e+02 + 2.19631147e+02 2.18451185e+02 2.17277380e+02 2.16109699e+02 2.14948111e+02 + 2.13792585e+02 2.12643089e+02 2.11499594e+02 2.10362067e+02 2.09230479e+02 + 2.08104798e+02 2.06984995e+02 2.05871039e+02 2.04762901e+02 2.03660550e+02 + 2.02563957e+02 2.01473092e+02 2.00387926e+02 1.99308430e+02 1.98234574e+02 + 1.97166329e+02 1.96103667e+02 1.95046559e+02 1.93994977e+02 1.92948891e+02 + 1.91908275e+02 1.90873099e+02 1.89843336e+02 1.88818958e+02 1.87799937e+02 + 1.86786246e+02 1.85777858e+02 1.84774744e+02 1.83776879e+02 1.82784235e+02 + 1.81796785e+02 1.80814503e+02 1.79837361e+02 1.78865335e+02 1.77898396e+02 + 1.76936520e+02 1.75979680e+02 1.75027850e+02 1.74081004e+02 1.73139117e+02 + 1.72202164e+02 1.71270119e+02 1.70342956e+02 1.69420651e+02 1.68503179e+02 + 1.67590514e+02 1.66682633e+02 1.65779509e+02 1.64881120e+02 1.63987441e+02 + 1.63098447e+02 1.62214114e+02 1.61334418e+02 1.60459336e+02 1.59588843e+02 + 1.58722917e+02 1.57861533e+02 1.57004668e+02 1.56152300e+02 1.55304404e+02 + 1.54460957e+02 1.53621938e+02 1.52787323e+02 1.51957089e+02 1.51131214e+02 + 1.50309675e+02 1.49492450e+02 1.48679518e+02 1.47870854e+02 1.47066439e+02 + 1.46266249e+02 1.45470264e+02 1.44678461e+02 1.43890819e+02 1.43107316e+02 + 1.42327932e+02 1.41552644e+02 1.40781432e+02 1.40014275e+02 1.39251152e+02 + 1.38492042e+02 1.37736924e+02 1.36985778e+02 1.36238583e+02 1.35495320e+02 + 1.34755967e+02 1.34020505e+02 1.33288913e+02 1.32561172e+02 1.31837261e+02 + 1.31117162e+02 1.30400853e+02 1.29688317e+02 1.28979533e+02 1.28274481e+02 + 1.27573143e+02 1.26875500e+02 1.26181532e+02 1.25491221e+02 1.24804547e+02 + 1.24121492e+02 1.23442037e+02 1.22766164e+02 1.22093854e+02 1.21425089e+02 + 1.20759850e+02 1.20098119e+02 1.19439878e+02 1.18785110e+02 1.18133795e+02 + 1.17485917e+02 1.16841457e+02 1.16200398e+02 1.15562723e+02 1.14928414e+02 + 1.14297452e+02 1.13669823e+02 1.13045507e+02 1.12424488e+02 1.11806748e+02 + 1.11192272e+02 1.10581042e+02 1.09973041e+02 1.09368252e+02 1.08766660e+02 + 1.08168246e+02 1.07572996e+02 1.06980893e+02 1.06391920e+02 1.05806061e+02 + 1.05223300e+02 1.04643621e+02 1.04067008e+02 1.03493446e+02 1.02922918e+02 + 1.02355409e+02 1.01790903e+02 1.01229385e+02 1.00670839e+02 1.00115250e+02 + 9.95626022e+01 9.90128809e+01 9.84660707e+01 9.79221566e+01 9.73811236e+01 + 9.68429569e+01 9.63076415e+01 9.57751627e+01 9.52455058e+01 9.47186562e+01 + 9.41945994e+01 9.36733209e+01 9.31548063e+01 9.26390414e+01 9.21260118e+01 + 9.16157035e+01 9.11081022e+01 9.06031940e+01 9.01009650e+01 8.96014012e+01 + 8.91044889e+01 8.86102143e+01 8.81185637e+01 8.76295236e+01 8.71430804e+01 + 8.66592206e+01 8.61779309e+01 8.56991979e+01 8.52230085e+01 8.47493493e+01 + 8.42782073e+01 8.38095694e+01 8.33434227e+01 8.28797542e+01 8.24185510e+01 + 8.19598004e+01 8.15034897e+01 8.10496062e+01 8.05981373e+01 8.01490705e+01 + 7.97023933e+01 7.92580933e+01 7.88161582e+01 7.83765757e+01 7.79393336e+01 + 7.75044198e+01 7.70718221e+01 7.66415285e+01 7.62135271e+01 7.57878060e+01 + 7.53643534e+01 7.49431573e+01 7.45242062e+01 7.41074884e+01 7.36929922e+01 + 7.32807062e+01 7.28706188e+01 7.24627187e+01 7.20569944e+01 7.16534347e+01 + 7.12520282e+01 7.08527639e+01 7.04556305e+01 7.00606171e+01 6.96677126e+01 + 6.92769059e+01 6.88881863e+01 6.85015428e+01 6.81169647e+01 6.77344412e+01 + 6.73539617e+01 6.69755155e+01 6.65990920e+01 6.62246807e+01 6.58522711e+01 + 6.54818529e+01 6.51134156e+01 6.47469490e+01 6.43824427e+01 6.40198867e+01 + 6.36592707e+01 6.33005847e+01 6.29438185e+01 6.25889623e+01 6.22360060e+01 + 6.18849398e+01 6.15357538e+01 6.11884382e+01 6.08429833e+01 6.04993794e+01 + 6.01576169e+01 5.98176861e+01 5.94795775e+01 5.91432817e+01 5.88087891e+01 + 5.84760904e+01 5.81451762e+01 5.78160373e+01 5.74886643e+01 5.71630481e+01 + 5.68391795e+01 5.65170493e+01 5.61966487e+01 5.58779684e+01 5.55609995e+01 + 5.52457331e+01 5.49321604e+01 5.46202725e+01 5.43100605e+01 5.40015159e+01 + 5.36946297e+01 5.33893935e+01 5.30857986e+01 5.27838363e+01 5.24834983e+01 + 5.21847760e+01 5.18876610e+01 5.15921448e+01 5.12982192e+01 5.10058759e+01 + 5.07151065e+01 5.04259028e+01 5.01382567e+01 4.98521601e+01 4.95676048e+01 + 4.92845828e+01 4.90030860e+01 4.87231065e+01 4.84446364e+01 4.81676678e+01 + 4.78921928e+01 4.76182037e+01 4.73456926e+01 4.70746518e+01 4.68050736e+01 + 4.65369504e+01 4.62702746e+01 4.60050386e+01 4.57412349e+01 4.54788559e+01 + 4.52178943e+01 4.49583426e+01 4.47001933e+01 4.44434393e+01 4.41880732e+01 + 4.39340877e+01 4.36814755e+01 4.34302296e+01 4.31803427e+01 4.29318077e+01 + 4.26846176e+01 4.24387652e+01 4.21942437e+01 4.19510460e+01 4.17091651e+01 + 4.14685943e+01 4.12293265e+01 4.09913551e+01 4.07546731e+01 4.05192739e+01 + 4.02851507e+01 4.00522968e+01 3.98207056e+01 3.95903704e+01 3.93612847e+01 + 3.91334419e+01 3.89068354e+01 3.86814589e+01 3.84573058e+01 3.82343697e+01 + 3.80126443e+01 3.77921231e+01 3.75727999e+01 3.73546684e+01 3.71377223e+01 + 3.69219554e+01 3.67073615e+01 3.64939344e+01 3.62816680e+01 3.60705563e+01 + 3.58605931e+01 3.56517724e+01 3.54440883e+01 3.52375346e+01 3.50321056e+01 + 3.48277953e+01 3.46245978e+01 3.44225072e+01 3.42215178e+01 3.40216237e+01 + 3.38228193e+01 3.36250987e+01 3.34284562e+01 3.32328862e+01 3.30383831e+01 + 3.28449412e+01 3.26525550e+01 3.24612189e+01 3.22709273e+01 3.20816748e+01 + 3.18934559e+01 3.17062652e+01 3.15200972e+01 3.13349465e+01 3.11508079e+01 + 3.09676759e+01 3.07855453e+01 3.06044108e+01 3.04242672e+01 3.02451092e+01 + 3.00669316e+01 2.98897292e+01 2.97134970e+01 2.95382298e+01 2.93639225e+01 + 2.91905701e+01 2.90181675e+01 2.88467097e+01 2.86761917e+01 2.85066087e+01 + 2.83379555e+01 2.81702274e+01 2.80034195e+01 2.78375268e+01 2.76725447e+01 + 2.75084681e+01 2.73452925e+01 2.71830130e+01 2.70216249e+01 2.68611234e+01 + 2.67015040e+01 2.65427619e+01 2.63848925e+01 2.62278912e+01 2.60717534e+01 + 2.59164746e+01 2.57620501e+01 2.56084756e+01 2.54557464e+01 2.53038582e+01 + 2.51528065e+01 2.50025868e+01 2.48531947e+01 2.47046260e+01 2.45568762e+01 + 2.44099409e+01 2.42638160e+01 2.41184970e+01 2.39739797e+01 2.38302600e+01 + 2.36873335e+01 2.35451960e+01 2.34038435e+01 2.32632716e+01 2.31234764e+01 + 2.29844536e+01 2.28461992e+01 2.27087091e+01 2.25719793e+01 2.24360057e+01 + 2.23007843e+01 2.21663111e+01 2.20325823e+01 2.18995937e+01 2.17673416e+01 + 2.16358219e+01 2.15050308e+01 2.13749645e+01 2.12456191e+01 2.11169907e+01 + 2.09890756e+01 2.08618700e+01 2.07353701e+01 2.06095721e+01 2.04844724e+01 + 2.03600673e+01 2.02363529e+01 2.01133257e+01 1.99909821e+01 1.98693183e+01 + 1.97483308e+01 1.96280160e+01 1.95083703e+01 1.93893901e+01 1.92710720e+01 + 1.91534123e+01 1.90364076e+01 1.89200544e+01 1.88043493e+01 1.86892888e+01 + 1.85748694e+01 1.84610877e+01 1.83479404e+01 1.82354241e+01 1.81235354e+01 + 1.80122710e+01 1.79016276e+01 1.77916017e+01 1.76821903e+01 1.75733899e+01 + 1.74651973e+01 1.73576093e+01 1.72506227e+01 1.71442343e+01 1.70384408e+01 + 1.69332391e+01 1.68286261e+01 1.67245986e+01 1.66211534e+01 1.65182875e+01 + 1.64159978e+01 1.63142812e+01 1.62131347e+01 1.61125551e+01 1.60125396e+01 + 1.59130850e+01 1.58141884e+01 1.57158468e+01 1.56180572e+01 1.55208167e+01 + 1.54241223e+01 1.53279712e+01 1.52323603e+01 1.51372870e+01 1.50427481e+01 + 1.49487410e+01 1.48552628e+01 1.47623106e+01 1.46698816e+01 1.45779730e+01 + 1.44865821e+01 1.43957060e+01 1.43053420e+01 1.42154874e+01 1.41261395e+01 + 1.40372954e+01 1.39489526e+01 1.38611084e+01 1.37737600e+01 1.36869048e+01 + 1.36005403e+01 1.35146636e+01 1.34292723e+01 1.33443637e+01 1.32599353e+01 + 1.31759844e+01 1.30925085e+01 1.30095051e+01 1.29269716e+01 1.28449055e+01 + 1.27633043e+01 1.26821655e+01 1.26014866e+01 1.25212652e+01 1.24414987e+01 + 1.23621848e+01 1.22833210e+01 1.22049049e+01 1.21269341e+01 1.20494062e+01 + 1.19723188e+01 1.18956695e+01 1.18194561e+01 1.17436760e+01 1.16683271e+01 + 1.15934070e+01 1.15189134e+01 1.14448440e+01 1.13711965e+01 1.12979687e+01 + 1.12251582e+01 1.11527629e+01 1.10807804e+01 1.10092087e+01 1.09380454e+01 + 1.08672883e+01 1.07969354e+01 1.07269843e+01 1.06574330e+01 1.05882792e+01 + 1.05195209e+01 1.04511559e+01 1.03831820e+01 1.03155972e+01 1.02483994e+01 + 1.01815865e+01 1.01151564e+01 1.00491069e+01 9.98343622e+00 9.91814213e+00 + 9.85322264e+00 9.78867573e+00 9.72449937e+00 9.66069158e+00 9.59725035e+00 + 9.53417371e+00 9.47145969e+00 9.40910632e+00 9.34711165e+00 9.28547375e+00 + 9.22419068e+00 9.16326052e+00 9.10268136e+00 9.04245131e+00 8.98256847e+00 + 8.92303096e+00 8.86383691e+00 8.80498446e+00 8.74647176e+00 8.68829697e+00 + 8.63045826e+00 8.57295380e+00 8.51578178e+00 8.45894041e+00 8.40242788e+00 + 8.34624242e+00 8.29038224e+00 8.23484558e+00 8.17963070e+00 8.12473583e+00 + 8.07015924e+00 8.01589921e+00 7.96195401e+00 7.90832194e+00 7.85500128e+00 + 7.80199036e+00 7.74928748e+00 7.69689098e+00 7.64479918e+00 7.59301042e+00 + 7.54152307e+00 7.49033547e+00 7.43944601e+00 7.38885304e+00 7.33855497e+00 + 7.28855019e+00 7.23883709e+00 7.18941409e+00 7.14027961e+00 7.09143208e+00 + 7.04286993e+00 6.99459161e+00 6.94659556e+00 6.89888026e+00 6.85144416e+00 + 6.80428575e+00 6.75740351e+00 6.71079593e+00 6.66446152e+00 6.61839878e+00 + 6.57260622e+00 6.52708238e+00 6.48182579e+00 6.43683498e+00 6.39210850e+00 + 6.34764490e+00 6.30344276e+00 6.25950063e+00 6.21581711e+00 6.17239077e+00 + 6.12922020e+00 6.08630401e+00 6.04364080e+00 6.00122919e+00 5.95906780e+00 + 5.91715525e+00 5.87549020e+00 5.83407128e+00 5.79289713e+00 5.75196643e+00 + 5.71127783e+00 5.67083001e+00 5.63062164e+00 5.59065142e+00 5.55091803e+00 + 5.51142018e+00 5.47215657e+00 5.43312591e+00 5.39432693e+00 5.35575836e+00 + 5.31741892e+00 5.27930736e+00 5.24142243e+00 5.20376288e+00 5.16632747e+00 + 5.12911496e+00 5.09212414e+00 5.05535378e+00 5.01880266e+00 4.98246959e+00 + 4.94635335e+00 4.91045277e+00 4.87476664e+00 4.83929378e+00 4.80403303e+00 + 4.76898320e+00 4.73414315e+00 4.69951171e+00 4.66508772e+00 4.63087006e+00 + 4.59685757e+00 4.56304912e+00 4.52944360e+00 4.49603987e+00 4.46283682e+00 + 4.42983335e+00 4.39702835e+00 4.36442072e+00 4.33200937e+00 4.29979323e+00 + 4.26777120e+00 4.23594221e+00 4.20430520e+00 4.17285910e+00 4.14160285e+00 + 4.11053541e+00 4.07965573e+00 4.04896277e+00 4.01845549e+00 3.98813286e+00 + 3.95799386e+00 3.92803748e+00 3.89826269e+00 3.86866850e+00 3.83925389e+00 + 3.81001788e+00 3.78095946e+00 3.75207766e+00 3.72337150e+00 3.69483999e+00 + 3.66648216e+00 3.63829706e+00 3.61028372e+00 3.58244118e+00 3.55476850e+00 + 3.52726473e+00 3.49992892e+00 3.47276015e+00 3.44575749e+00 3.41892000e+00 + 3.39224677e+00 3.36573689e+00 3.33938943e+00 3.31320351e+00 3.28717821e+00 + 3.26131264e+00 3.23560591e+00 3.21005713e+00 3.18466542e+00 3.15942990e+00 + 3.13434970e+00 3.10942396e+00 3.08465180e+00 3.06003238e+00 3.03556483e+00 + 3.01124831e+00 2.98708198e+00 2.96306498e+00 2.93919649e+00 2.91547568e+00 + 2.89190171e+00 2.86847377e+00 2.84519103e+00 2.82205269e+00 2.79905793e+00 + 2.77620595e+00 2.75349594e+00 2.73092712e+00 2.70849868e+00 2.68620984e+00 + 2.66405982e+00 2.64204784e+00 2.62017311e+00 2.59843488e+00 2.57683236e+00 + 2.55536481e+00 2.53403145e+00 2.51283154e+00 2.49176432e+00 2.47082905e+00 + 2.45002498e+00 2.42935138e+00 2.40880750e+00 2.38839262e+00 2.36810602e+00 + 2.34794696e+00 2.32791472e+00 2.30800860e+00 2.28822788e+00 2.26857186e+00 + 2.24903982e+00 2.22963107e+00 2.21034491e+00 2.19118065e+00 2.17213760e+00 + 2.15321507e+00 2.13441238e+00 2.11572886e+00 2.09716382e+00 2.07871661e+00 + 2.06038654e+00 2.04217296e+00 2.02407521e+00 2.00609263e+00 1.98822456e+00 + 1.97047037e+00 1.95282939e+00 1.93530099e+00 1.91788454e+00 1.90057938e+00 + 1.88338490e+00 1.86630046e+00 1.84932544e+00 1.83245921e+00 1.81570116e+00 + 1.79905067e+00 1.78250713e+00 1.76606992e+00 1.74973846e+00 1.73351212e+00 + 1.71739031e+00 1.70137244e+00 1.68545791e+00 1.66964614e+00 1.65393654e+00 + 1.63832852e+00 1.62282150e+00 1.60741492e+00 1.59210818e+00 1.57690073e+00 + 1.56179200e+00 1.54678141e+00 1.53186842e+00 1.51705246e+00 1.50233297e+00 + 1.48770940e+00 1.47318121e+00 1.45874785e+00 1.44440877e+00 1.43016343e+00 + 1.41601130e+00 1.40195184e+00 1.38798451e+00 1.37410880e+00 1.36032417e+00 + 1.34663009e+00 1.33302606e+00 1.31951155e+00 1.30608605e+00 1.29274904e+00 + 1.27950001e+00 1.26633846e+00 1.25326389e+00 1.24027580e+00 1.22737367e+00 + 1.21455703e+00 1.20182537e+00 1.18917821e+00 1.17661506e+00 1.16413543e+00 + 1.15173884e+00 1.13942481e+00 1.12719287e+00 1.11504254e+00 1.10297334e+00 + 1.09098481e+00 1.07907648e+00 1.06724789e+00 1.05549857e+00 1.04382807e+00 + 1.03223593e+00 1.02072169e+00 1.00928490e+00 9.97925112e-01 9.86641881e-01 + 9.75434761e-01 9.64303309e-01 9.53247087e-01 9.42265655e-01 9.31358580e-01 + 9.20525428e-01 9.09765770e-01 8.99079177e-01 8.88465224e-01 8.77923487e-01 + 8.67453546e-01 8.57054981e-01 8.46727377e-01 8.36470319e-01 8.26283395e-01 + 8.16166196e-01 8.06118314e-01 7.96139344e-01 7.86228882e-01 7.76386529e-01 + 7.66611885e-01 7.56904555e-01 7.47264143e-01 7.37690257e-01 7.28182509e-01 + 7.18740509e-01 7.09363872e-01 7.00052215e-01 6.90805156e-01 6.81622315e-01 + 6.72503315e-01 6.63447781e-01 6.54455339e-01 6.45525619e-01 6.36658251e-01 + 6.27852868e-01 6.19109104e-01 6.10426597e-01 6.01804986e-01 5.93243911e-01 + 5.84743015e-01 5.76301942e-01 5.67920340e-01 5.59597857e-01 5.51334144e-01 + 5.43128853e-01 5.34981638e-01 5.26892155e-01 5.18860064e-01 5.10885023e-01 + 5.02966695e-01 4.95104744e-01 4.87298834e-01 4.79548634e-01 4.71853813e-01 + 4.64214041e-01 4.56628992e-01 4.49098341e-01 4.41621763e-01 4.34198937e-01 + 4.26829543e-01 4.19513263e-01 4.12249780e-01 4.05038780e-01 3.97879949e-01 + 3.90772977e-01 3.83717553e-01 3.76713370e-01 3.69760122e-01 3.62857504e-01 + 3.56005214e-01 3.49202950e-01 3.42450412e-01 3.35747304e-01 3.29093328e-01 + 3.22488191e-01 3.15931599e-01 3.09423261e-01 3.02962888e-01 2.96550191e-01 + 2.90184883e-01 2.83866681e-01 2.77595300e-01 2.71370459e-01 2.65191877e-01 + 2.59059276e-01 2.52972379e-01 2.46930910e-01 2.40934595e-01 2.34983162e-01 + 2.29076339e-01 2.23213858e-01 2.17395449e-01 2.11620846e-01 2.05889785e-01 + 2.00202002e-01 1.94557234e-01 1.88955220e-01 1.83395703e-01 1.77878423e-01 + 1.72403125e-01 1.66969553e-01 1.61577453e-01 1.56226575e-01 1.50916667e-01 + 1.45647479e-01 1.40418764e-01 1.35230275e-01 1.30081768e-01 1.24972997e-01 + 1.19903721e-01 1.14873698e-01 1.09882689e-01 1.04930456e-01 1.00016760e-01 + 9.51413669e-02 9.03040415e-02 8.55045508e-02 8.07426628e-02 7.60181470e-02 + 7.13307740e-02 6.66803158e-02 6.20665457e-02 5.74892382e-02 5.29481691e-02 + 4.84431153e-02 4.39738552e-02 3.95401682e-02 3.51418352e-02 3.07786380e-02 + 2.64503598e-02 2.21567851e-02 1.78976994e-02 1.36728896e-02 9.48214365e-03 + 5.32525073e-03 1.20200121e-03 -2.88781336e-03 -6.94440028e-03 -1.09679657e-02 + -1.49587145e-02 -1.89168506e-02 -2.28425767e-02 -2.67360942e-02 -3.05976037e-02 + -3.44273043e-02 -3.82253943e-02 -4.19920708e-02 -4.57275295e-02 -4.94319655e-02 + -5.31055725e-02 -5.67485430e-02 -6.03610687e-02 -6.39433401e-02 -6.74955466e-02 + -7.10178766e-02 -7.45105174e-02 -7.79736551e-02 -8.14074751e-02 -8.48121614e-02 + -8.81878972e-02 -9.15348645e-02 -9.48532444e-02 -9.81432169e-02 -1.01404961e-01 + -1.04638655e-01 -1.07844475e-01 -1.11022598e-01 -1.14173199e-01 -1.17296451e-01 + -1.20392528e-01 -1.23461602e-01 -1.26503843e-01 -1.29519423e-01 -1.32508509e-01 + -1.35471271e-01 -1.38407875e-01 -1.41318488e-01 -1.44203275e-01 -1.47062401e-01 + -1.49896028e-01 -1.52704320e-01 -1.55487438e-01 -1.58245544e-01 -1.60978795e-01 + -1.63687353e-01 -1.66371373e-01 -1.69031015e-01 -1.71666433e-01 -1.74277784e-01 + -1.76865220e-01 -1.79428897e-01 -1.81968967e-01 -1.84485581e-01 -1.86978891e-01 + -1.89449046e-01 -1.91896196e-01 -1.94320490e-01 -1.96722074e-01 -1.99101095e-01 + -2.01457699e-01 -2.03792032e-01 -2.06104237e-01 -2.08394457e-01 -2.10662836e-01 + -2.12909515e-01 -2.15134635e-01 -2.17338336e-01 -2.19520757e-01 -2.21682038e-01 + -2.23822314e-01 -2.25941724e-01 -2.28040404e-01 -2.30118489e-01 -2.32176113e-01 + -2.34213411e-01 -2.36230515e-01 -2.38227558e-01 -2.40204671e-01 -2.42161985e-01 + -2.44099630e-01 -2.46017735e-01 -2.47916430e-01 -2.49795841e-01 -2.51656095e-01 + -2.53497320e-01 -2.55319640e-01 -2.57123180e-01 -2.58908065e-01 -2.60674419e-01 + -2.62422363e-01 -2.64152019e-01 -2.65863510e-01 -2.67556956e-01 -2.69232476e-01 + -2.70890190e-01 -2.72530216e-01 -2.74152673e-01 -2.75757677e-01 -2.77345345e-01 + -2.78915792e-01 -2.80469135e-01 -2.82005487e-01 -2.83524962e-01 -2.85027673e-01 + -2.86513733e-01 -2.87983254e-01 -2.89436347e-01 -2.90873122e-01 -2.92293689e-01 + -2.93698158e-01 -2.95086637e-01 -2.96459235e-01 -2.97816058e-01 -2.99157214e-01 + -3.00482808e-01 -3.01792946e-01 -3.03087733e-01 -3.04367274e-01 -3.05631671e-01 + -3.06881028e-01 -3.08115448e-01 -3.09335032e-01 -3.10539882e-01 -3.11730098e-01 + -3.12905781e-01 -3.14067030e-01 -3.15213944e-01 -3.16346621e-01 -3.17465159e-01 + -3.18569655e-01 -3.19660206e-01 -3.20736909e-01 -3.21799858e-01 -3.22849148e-01 + -3.23884874e-01 -3.24907130e-01 -3.25916009e-01 -3.26911604e-01 -3.27894007e-01 + -3.28863310e-01 -3.29819603e-01 -3.30762978e-01 -3.31693524e-01 -3.32611331e-01 + -3.33516488e-01 -3.34409084e-01 -3.35289206e-01 -3.36156941e-01 -3.37012378e-01 + -3.37855601e-01 -3.38686698e-01 -3.39505753e-01 -3.40312851e-01 -3.41108077e-01 + -3.41891514e-01 -3.42663247e-01 -3.43423357e-01 -3.44171927e-01 -3.44909040e-01 + -3.45634776e-01 -3.46349217e-01 -3.47052442e-01 -3.47744533e-01 -3.48425568e-01 + -3.49095627e-01 -3.49754788e-01 -3.50403129e-01 -3.51040727e-01 -3.51667661e-01 + -3.52284007e-01 -3.52889840e-01 -3.53485238e-01 -3.54070274e-01 -3.54645025e-01 + -3.55209564e-01 -3.55763965e-01 -3.56308303e-01 -3.56842650e-01 -3.57367079e-01 + -3.57881662e-01 -3.58386471e-01 -3.58881577e-01 -3.59367052e-01 -3.59842965e-01 + -3.60309388e-01 -3.60766390e-01 -3.61214039e-01 -3.61652405e-01 -3.62081557e-01 + -3.62501562e-01 -3.62912488e-01 -3.63314403e-01 -3.63707372e-01 -3.64091463e-01 + -3.64466741e-01 -3.64833273e-01 -3.65191122e-01 -3.65540355e-01 -3.65881036e-01 + -3.66213228e-01 -3.66536996e-01 -3.66852402e-01 -3.67159509e-01 -3.67458381e-01 + -3.67749078e-01 -3.68031664e-01 -3.68306198e-01 -3.68572743e-01 -3.68831359e-01 + -3.69082107e-01 -3.69325045e-01 -3.69560234e-01 -3.69787732e-01 -3.70007599e-01 + -3.70219894e-01 -3.70424673e-01 -3.70621996e-01 -3.70811918e-01 -3.70994499e-01 + -3.71169793e-01 -3.71337857e-01 -3.71498749e-01 -3.71652522e-01 -3.71799232e-01 + -3.71938935e-01 -3.72071685e-01 -3.72197537e-01 -3.72316543e-01 -3.72428759e-01 + -3.72534237e-01 -3.72633030e-01 -3.72725191e-01 -3.72810773e-01 -3.72889827e-01 + -3.72962404e-01 -3.73028557e-01 -3.73088337e-01 -3.73141794e-01 -3.73188978e-01 + -3.73229940e-01 -3.73264730e-01 -3.73293396e-01 -3.73315989e-01 -3.73332557e-01 + -3.73343148e-01 -3.73347812e-01 -3.73346595e-01 -3.73339546e-01 -3.73326712e-01 + -3.73308140e-01 -3.73283877e-01 -3.73253970e-01 -3.73218464e-01 -3.73177405e-01 + -3.73130840e-01 -3.73078813e-01 -3.73021370e-01 -3.72958555e-01 -3.72890413e-01 + -3.72816988e-01 -3.72738325e-01 -3.72654466e-01 -3.72565455e-01 -3.72471335e-01 + -3.72372149e-01 -3.72267940e-01 -3.72158750e-01 -3.72044622e-01 -3.71925595e-01 + -3.71801714e-01 -3.71673017e-01 -3.71539548e-01 -3.71401345e-01 -3.71258451e-01 + -3.71110904e-01 -3.70958745e-01 -3.70802014e-01 -3.70640750e-01 -3.70474993e-01 + -3.70304780e-01 -3.70130151e-01 -3.69951145e-01 -3.69767799e-01 -3.69580152e-01 + -3.69388241e-01 -3.69192104e-01 -3.68991778e-01 -3.68787299e-01 -3.68578706e-01 + -3.68366033e-01 -3.68149318e-01 -3.67928596e-01 -3.67703904e-01 -3.67475277e-01 + -3.67242750e-01 -3.67006358e-01 -3.66766136e-01 -3.66522120e-01 -3.66274343e-01 + -3.66022839e-01 -3.65767643e-01 -3.65508788e-01 -3.65246307e-01 -3.64980235e-01 + -3.64710605e-01 -3.64437448e-01 -3.64160798e-01 -3.63880687e-01 -3.63597148e-01 + -3.63310212e-01 -3.63019912e-01 -3.62726278e-01 -3.62429343e-01 -3.62129137e-01 + -3.61825691e-01 -3.61519036e-01 -3.61209204e-01 -3.60896223e-01 -3.60580124e-01 + -3.60260938e-01 -3.59938693e-01 -3.59613420e-01 -3.59285147e-01 -3.58953904e-01 + -3.58619720e-01 -3.58282624e-01 -3.57942644e-01 -3.57599807e-01 -3.57254144e-01 + -3.56905681e-01 -3.56554446e-01 -3.56200467e-01 -3.55843771e-01 -3.55484386e-01 + -3.55122338e-01 -3.54757654e-01 -3.54390361e-01 -3.54020485e-01 -3.53648052e-01 + -3.53273090e-01 -3.52895622e-01 -3.52515676e-01 -3.52133276e-01 -3.51748448e-01 + -3.51361217e-01 -3.50971609e-01 -3.50579647e-01 -3.50185356e-01 -3.49788762e-01 + -3.49389887e-01 -3.48988757e-01 -3.48585395e-01 -3.48179824e-01 -3.47772069e-01 + -3.47362152e-01 -3.46950097e-01 -3.46535928e-01 -3.46119665e-01 -3.45701334e-01 + -3.45280955e-01 -3.44858551e-01 -3.44434144e-01 -3.44007757e-01 -3.43579412e-01 + -3.43149128e-01 -3.42716930e-01 -3.42282836e-01 -3.41846870e-01 -3.41409051e-01 + -3.40969401e-01 -3.40527939e-01 -3.40084688e-01 -3.39639666e-01 -3.39192894e-01 + -3.38744393e-01 -3.38294181e-01 -3.37842278e-01 -3.37388705e-01 -3.36933480e-01 + -3.36476622e-01 -3.36018151e-01 -3.35558085e-01 -3.35096442e-01 -3.34633242e-01 + -3.34168503e-01 -3.33702243e-01 -3.33234480e-01 -3.32765231e-01 -3.32294515e-01 + -3.31822348e-01 -3.31348749e-01 -3.30873735e-01 -3.30397322e-01 -3.29919527e-01 + -3.29440368e-01 -3.28959860e-01 -3.28478021e-01 -3.27994865e-01 -3.27510410e-01 + -3.27024672e-01 -3.26537665e-01 -3.26049406e-01 -3.25559910e-01 -3.25069192e-01 + -3.24577267e-01 -3.24084151e-01 -3.23589857e-01 -3.23094401e-01 -3.22597798e-01 + -3.22100060e-01 -3.21601203e-01 -3.21101240e-01 -3.20600185e-01 -3.20098052e-01 + -3.19594854e-01 -3.19090604e-01 -3.18585316e-01 -3.18079002e-01 -3.17571675e-01 + -3.17063348e-01 -3.16554033e-01 -3.16043742e-01 -3.15532488e-01 -3.15020282e-01 + -3.14507136e-01 -3.13993062e-01 -3.13478070e-01 -3.12962173e-01 -3.12445381e-01 + -3.11927705e-01 -3.11409156e-01 -3.10889743e-01 -3.10369478e-01 -3.09848371e-01 + -3.09326431e-01 -3.08803668e-01 -3.08280091e-01 -3.07755711e-01 -3.07230536e-01 + -3.06704576e-01 -3.06177838e-01 -3.05650332e-01 -3.05122065e-01 -3.04593047e-01 + -3.04063285e-01 -3.03532787e-01 -3.03001561e-01 -3.02469613e-01 -3.01936952e-01 + -3.01403583e-01 -3.00869515e-01 -3.00334753e-01 -2.99799303e-01 -2.99263173e-01 + -2.98726367e-01 -2.98188891e-01 -2.97650751e-01 -2.97111953e-01 -2.96572500e-01 + -2.96032398e-01 -2.95491652e-01 -2.94950265e-01 -2.94408242e-01 -2.93865586e-01 + -2.93322302e-01 -2.92778392e-01 -2.92233859e-01 -2.91688707e-01 -2.91142937e-01 + -2.90596553e-01 -2.90049556e-01 -2.89501948e-01 -2.88953730e-01 -2.88404904e-01 + -2.87855471e-01 -2.87305431e-01 -2.86754785e-01 -2.86203532e-01 -2.85651673e-01 + -2.85099207e-01 -2.84546134e-01 -2.83992451e-01 -2.83438159e-01 -2.82883254e-01 + -2.82327736e-01 -2.81771601e-01 -2.81214847e-01 -2.80657471e-01 -2.80099470e-01 + -2.79540840e-01 -2.78981576e-01 -2.78421675e-01 -2.77861132e-01 -2.77299942e-01 + -2.76738098e-01 -2.76175596e-01 -2.75612428e-01 -2.75048590e-01 -2.74484072e-01 + -2.73918869e-01 -2.73352971e-01 -2.72786372e-01 -2.72219062e-01 -2.71651032e-01 + -2.71082273e-01 -2.70512775e-01 -2.69942527e-01 -2.69371519e-01 -2.68799739e-01 + -2.68227176e-01 -2.67653817e-01 -2.67079650e-01 -2.66504662e-01 -2.65928838e-01 + -2.65352166e-01 -2.64774629e-01 -2.64196213e-01 -2.63616903e-01 -2.63036681e-01 + -2.62455531e-01 -2.61873437e-01 -2.61290379e-01 -2.60706339e-01 -2.60121299e-01 + -2.59535239e-01 -2.58948138e-01 -2.58359975e-01 -2.57770730e-01 -2.57180380e-01 + -2.56588902e-01 -2.55996273e-01 -2.55402470e-01 -2.54807466e-01 -2.54211238e-01 + -2.53613758e-01 -2.53015001e-01 -2.52414938e-01 -2.51813542e-01 -2.51210784e-01 + -2.50606633e-01 -2.50001061e-01 -2.49394035e-01 -2.48785523e-01 -2.48175494e-01 + -2.47563913e-01 -2.46950746e-01 -2.46335958e-01 -2.45719514e-01 -2.45101375e-01 + -2.44481506e-01 -2.43859866e-01 -2.43236418e-01 -2.42611120e-01 -2.41983931e-01 + -2.41354809e-01 -2.40723712e-01 -2.40090595e-01 -2.39455414e-01 -2.38818122e-01 + -2.38178672e-01 -2.37537018e-01 -2.36893110e-01 -2.36246897e-01 -2.35598331e-01 + -2.34947357e-01 -2.34293925e-01 -2.33637979e-01 -2.32979464e-01 -2.32318325e-01 + -2.31654504e-01 -2.30987943e-01 -2.30318583e-01 -2.29646362e-01 -2.28971220e-01 + -2.28293093e-01 -2.27611917e-01 -2.26927628e-01 -2.26240159e-01 -2.25549442e-01 + -2.24855410e-01 -2.24157991e-01 -2.23457115e-01 -2.22752711e-01 -2.22044703e-01 + -2.21333018e-01 -2.20617580e-01 -2.19898312e-01 -2.19175135e-01 -2.18447970e-01 + -2.17716735e-01 -2.16981350e-01 -2.16241730e-01 -2.15497792e-01 -2.14749449e-01 + -2.13996614e-01 -2.13239200e-01 -2.12477117e-01 -2.11710274e-01 -2.10938580e-01 + -2.10161942e-01 -2.09380265e-01 -2.08593455e-01 -2.07801414e-01 -2.07004046e-01 + -2.06201251e-01 -2.05392930e-01 -2.04578982e-01 -2.03759305e-01 -2.02933795e-01 + -2.02102350e-01 -2.01264865e-01 -2.00421232e-01 -1.99571346e-01 -1.98715099e-01 + -1.97852383e-01 -1.96983088e-01 -1.96107105e-01 -1.95224322e-01 -1.94334629e-01 + -1.93437914e-01 -1.92534064e-01 -1.91622967e-01 -1.90704510e-01 -1.89778578e-01 + -1.88845059e-01 -1.87903839e-01 -1.86954803e-01 -1.85997837e-01 -1.85032828e-01 + -1.84059661e-01 -1.83078225e-01 -1.82088405e-01 -1.81090089e-01 -1.80083164e-01 + -1.79067521e-01 -1.78043049e-01 -1.77009638e-01 -1.75967181e-01 -1.74915569e-01 + -1.73854699e-01 -1.72784466e-01 -1.71704767e-01 -1.70615503e-01 -1.69516576e-01 + -1.68407889e-01 -1.67289349e-01 -1.66160865e-01 -1.65022349e-01 -1.63873717e-01 + -1.62714886e-01 -1.61545778e-01 -1.60366318e-01 -1.59176437e-01 -1.57976067e-01 + -1.56765147e-01 -1.55543618e-01 -1.54311430e-01 -1.53068533e-01 -1.51814888e-01 + -1.50550457e-01 -1.49275211e-01 -1.47989126e-01 -1.46692185e-01 -1.45384379e-01 + -1.44065704e-01 -1.42736166e-01 -1.41395777e-01 -1.40044559e-01 -1.38682540e-01 + -1.37309761e-01 -1.35926268e-01 -1.34532119e-01 -1.33127381e-01 -1.31712132e-01 + -1.30286461e-01 -1.28850467e-01 -1.27404261e-01 -1.25947965e-01 -1.24481714e-01 + -1.23005655e-01 -1.21519948e-01 -1.20024766e-01 -1.18520294e-01 -1.17006735e-01 + -1.15484301e-01 -1.13953221e-01 -1.12413739e-01 -1.10866114e-01 -1.09310620e-01 + -1.07747545e-01 -1.06177195e-01 -1.04599892e-01 -1.03015972e-01 -1.01425791e-01 + -9.98297178e-02 -9.82281413e-02 -9.66214653e-02 -9.50101113e-02 -9.33945177e-02 + -9.17751402e-02 -9.01524512e-02 -8.85269406e-02 -8.68991149e-02 -8.52694975e-02 + -8.36386287e-02 -8.20070652e-02 -8.03753796e-02 -7.87441609e-02 -7.71140134e-02 + -7.54855567e-02 -7.38594249e-02 -7.22362666e-02 -7.06167438e-02 -6.90015316e-02 + -6.73913175e-02 -6.57868005e-02 -6.41886904e-02 -6.25977069e-02 -6.10145787e-02 + -5.94400425e-02 -5.78748417e-02 -5.63197260e-02 -5.47754491e-02 -5.32427687e-02 + -5.17224440e-02 -5.02152354e-02 -4.87219023e-02 -4.72432019e-02 -4.57798880e-02 + -4.43327089e-02 -4.29024059e-02 -4.14897120e-02 -4.00953498e-02 -3.87200300e-02 + -3.73644495e-02 -3.60292898e-02 -3.47152149e-02 -3.34228699e-02 -3.21528790e-02 + -3.09058435e-02 -2.96823405e-02 -2.84829208e-02 -2.73081072e-02 -2.61583928e-02 + -2.50342396e-02 -2.39360766e-02 -2.28642984e-02 -2.18192640e-02 -2.08012951e-02 + -1.98106749e-02 -1.88476472e-02 -1.79124150e-02 -1.70051400e-02 -1.61259413e-02 + -1.52748953e-02 -1.44520347e-02 -1.36573486e-02 -1.28907819e-02 -1.21522356e-02 + -1.14415667e-02 -1.07585887e-02 -1.01030720e-02 -9.47474459e-03 -8.87329287e-03 + -8.29836274e-03 -7.74956073e-03 -7.22645543e-03 -6.72857898e-03 -6.25542881e-03 + -5.80646946e-03 -5.38113458e-03 -4.97882911e-03 -4.59893146e-03 -4.24079595e-03 + -3.90375522e-03 -3.58712281e-03 -3.29019579e-03 -3.01225738e-03 -2.75257971e-03 + -2.51042650e-03 -2.28505583e-03 -2.07572280e-03 -1.88168219e-03 -1.70219116e-03 + -1.53651170e-03 -1.38391314e-03 -1.24367451e-03 -1.11508676e-03 -9.97454879e-04 + -8.90099873e-04 -7.92360551e-04 -7.03595185e-04 -6.23182986e-04 -5.50525391e-04 + -4.85047182e-04 -4.26197410e-04 -3.73450139e-04 -3.26304997e-04 -2.84287557e-04 + -2.46949530e-04 -2.13868796e-04 -1.84649264e-04 -1.58920587e-04 -1.36337730e-04 + -1.16580404e-04 -9.93523900e-05 -8.43807493e-05 -7.14149460e-05 -6.02258921e-05 + -5.06049271e-05 -4.23627497e-05 -3.53283117e-05 -2.93476901e-05 -2.42829478e-05 + -2.00109953e-05 -1.64224645e-05 -1.34206037e-05 -1.09202024e-05 -8.84655474e-06 + -7.13446549e-06 -5.72730630e-06 -4.57612466e-06 -3.63880915e-06 -2.87931270e-06 + -2.26693489e-06 -1.77566315e-06 -1.38357233e-06 -1.07228097e-06 -8.26462211e-07 + -6.33407021e-07 -4.82636499e-07 -3.65560252e-07 -2.75177336e-07 -2.05816266e-07 + -1.52910556e-07 -1.12806264e-07 -8.25981543e-08 -5.99912045e-08 -4.31843728e-08 + -3.07737665e-08 -2.16725592e-08 -1.50452580e-08 -1.02541552e-08 -6.81604222e-09 + -4.36749115e-09 -2.63722754e-09 -1.42432372e-09 -5.81126127e-10 0.00000000e+00 + 1.49783707e+02 1.49783707e+02 1.49783707e+02 1.49783707e+02 1.49783707e+02 + 1.49783707e+02 1.49783707e+02 1.49783707e+02 1.49783707e+02 1.49783707e+02 + 1.49783707e+02 1.49783707e+02 1.49783707e+02 1.49783707e+02 1.49783707e+02 + 1.49783707e+02 1.49783707e+02 1.49783707e+02 1.49783707e+02 1.49783707e+02 + 1.49783707e+02 1.49783707e+02 1.49783707e+02 1.49783707e+02 1.49783707e+02 + 1.49783707e+02 1.49783707e+02 1.49783707e+02 1.49783707e+02 1.49783707e+02 + 1.49783707e+02 1.49783707e+02 1.49783707e+02 1.49783707e+02 1.49783707e+02 + 1.49783707e+02 1.49783707e+02 1.49783707e+02 1.49783707e+02 1.49783707e+02 + 1.49783707e+02 1.49783707e+02 1.49783707e+02 1.49179292e+02 1.48418948e+02 + 1.47662380e+02 1.46909571e+02 1.46160501e+02 1.45415152e+02 1.44673507e+02 + 1.43935545e+02 1.43201251e+02 1.42470604e+02 1.41743588e+02 1.41020184e+02 + 1.40300375e+02 1.39584143e+02 1.38871471e+02 1.38162340e+02 1.37456733e+02 + 1.36754634e+02 1.36056024e+02 1.35360887e+02 1.34669205e+02 1.33980961e+02 + 1.33296139e+02 1.32614721e+02 1.31936692e+02 1.31262033e+02 1.30590728e+02 + 1.29922762e+02 1.29258117e+02 1.28596777e+02 1.27938726e+02 1.27283948e+02 + 1.26632426e+02 1.25984144e+02 1.25339087e+02 1.24697239e+02 1.24058583e+02 + 1.23423104e+02 1.22790787e+02 1.22161615e+02 1.21535573e+02 1.20912647e+02 + 1.20292820e+02 1.19676076e+02 1.19062402e+02 1.18451782e+02 1.17844201e+02 + 1.17239643e+02 1.16638094e+02 1.16039540e+02 1.15443964e+02 1.14851353e+02 + 1.14261692e+02 1.13674967e+02 1.13091163e+02 1.12510265e+02 1.11932259e+02 + 1.11357132e+02 1.10784868e+02 1.10215454e+02 1.09648875e+02 1.09085118e+02 + 1.08524169e+02 1.07966014e+02 1.07410638e+02 1.06858029e+02 1.06308173e+02 + 1.05761056e+02 1.05216665e+02 1.04674986e+02 1.04136006e+02 1.03599711e+02 + 1.03066088e+02 1.02535125e+02 1.02006807e+02 1.01481123e+02 1.00958058e+02 + 1.00437601e+02 9.99197376e+01 9.94044556e+01 9.88917423e+01 9.83815849e+01 + 9.78739708e+01 9.73688876e+01 9.68663227e+01 9.63662637e+01 9.58686982e+01 + 9.53736140e+01 9.48809987e+01 9.43908403e+01 9.39031266e+01 9.34178455e+01 + 9.29349850e+01 9.24545333e+01 9.19764783e+01 9.15008083e+01 9.10275115e+01 + 9.05565762e+01 9.00879908e+01 8.96217436e+01 8.91578231e+01 8.86962179e+01 + 8.82369165e+01 8.77799075e+01 8.73251797e+01 8.68727217e+01 8.64225224e+01 + 8.59745706e+01 8.55288552e+01 8.50853653e+01 8.46440897e+01 8.42050177e+01 + 8.37681382e+01 8.33334405e+01 8.29009139e+01 8.24705475e+01 8.20423308e+01 + 8.16162531e+01 8.11923039e+01 8.07704726e+01 8.03507489e+01 7.99331223e+01 + 7.95175824e+01 7.91041189e+01 7.86927217e+01 7.82833805e+01 7.78760851e+01 + 7.74708255e+01 7.70675915e+01 7.66663733e+01 7.62671608e+01 7.58699442e+01 + 7.54747135e+01 7.50814591e+01 7.46901710e+01 7.43008397e+01 7.39134555e+01 + 7.35280086e+01 7.31444897e+01 7.27628891e+01 7.23831974e+01 7.20054051e+01 + 7.16295030e+01 7.12554815e+01 7.08833316e+01 7.05130438e+01 7.01446090e+01 + 6.97780181e+01 6.94132620e+01 6.90503316e+01 6.86892178e+01 6.83299117e+01 + 6.79724044e+01 6.76166870e+01 6.72627507e+01 6.69105866e+01 6.65601860e+01 + 6.62115401e+01 6.58646404e+01 6.55194782e+01 6.51760449e+01 6.48343319e+01 + 6.44943309e+01 6.41560332e+01 6.38194305e+01 6.34845144e+01 6.31512767e+01 + 6.28197089e+01 6.24898028e+01 6.21615503e+01 6.18349431e+01 6.15099732e+01 + 6.11866324e+01 6.08649127e+01 6.05448061e+01 6.02263045e+01 5.99094002e+01 + 5.95940851e+01 5.92803515e+01 5.89681914e+01 5.86575972e+01 5.83485611e+01 + 5.80410754e+01 5.77351324e+01 5.74307245e+01 5.71278441e+01 5.68264837e+01 + 5.65266357e+01 5.62282927e+01 5.59314473e+01 5.56360919e+01 5.53422194e+01 + 5.50498223e+01 5.47588933e+01 5.44694252e+01 5.41814107e+01 5.38948427e+01 + 5.36097141e+01 5.33260176e+01 5.30437463e+01 5.27628930e+01 5.24834508e+01 + 5.22054127e+01 5.19287717e+01 5.16535209e+01 5.13796535e+01 5.11071627e+01 + 5.08360415e+01 5.05662832e+01 5.02978812e+01 5.00308286e+01 4.97651188e+01 + 4.95007453e+01 4.92377012e+01 4.89759802e+01 4.87155755e+01 4.84564808e+01 + 4.81986896e+01 4.79421953e+01 4.76869917e+01 4.74330722e+01 4.71804306e+01 + 4.69290604e+01 4.66789555e+01 4.64301096e+01 4.61825164e+01 4.59361698e+01 + 4.56910635e+01 4.54471915e+01 4.52045476e+01 4.49631257e+01 4.47229199e+01 + 4.44839240e+01 4.42461321e+01 4.40095382e+01 4.37741365e+01 4.35399210e+01 + 4.33068858e+01 4.30750251e+01 4.28443330e+01 4.26148039e+01 4.23864319e+01 + 4.21592113e+01 4.19331365e+01 4.17082016e+01 4.14844012e+01 4.12617295e+01 + 4.10401810e+01 4.08197502e+01 4.06004314e+01 4.03822193e+01 4.01651082e+01 + 3.99490928e+01 3.97341677e+01 3.95203273e+01 3.93075664e+01 3.90958797e+01 + 3.88852617e+01 3.86757072e+01 3.84672110e+01 3.82597677e+01 3.80533723e+01 + 3.78480194e+01 3.76437039e+01 3.74404208e+01 3.72381648e+01 3.70369308e+01 + 3.68367139e+01 3.66375090e+01 3.64393110e+01 3.62421151e+01 3.60459161e+01 + 3.58507092e+01 3.56564895e+01 3.54632520e+01 3.52709919e+01 3.50797044e+01 + 3.48893846e+01 3.47000278e+01 3.45116291e+01 3.43241838e+01 3.41376873e+01 + 3.39521347e+01 3.37675214e+01 3.35838428e+01 3.34010942e+01 3.32192711e+01 + 3.30383687e+01 3.28583827e+01 3.26793083e+01 3.25011411e+01 3.23238767e+01 + 3.21475104e+01 3.19720380e+01 3.17974549e+01 3.16237567e+01 3.14509390e+01 + 3.12789976e+01 3.11079279e+01 3.09377258e+01 3.07683869e+01 3.05999069e+01 + 3.04322815e+01 3.02655066e+01 3.00995779e+01 2.99344912e+01 2.97702424e+01 + 2.96068272e+01 2.94442415e+01 2.92824813e+01 2.91215424e+01 2.89614208e+01 + 2.88021124e+01 2.86436131e+01 2.84859190e+01 2.83290261e+01 2.81729303e+01 + 2.80176277e+01 2.78631145e+01 2.77093866e+01 2.75564402e+01 2.74042714e+01 + 2.72528763e+01 2.71022511e+01 2.69523920e+01 2.68032952e+01 2.66549568e+01 + 2.65073732e+01 2.63605406e+01 2.62144552e+01 2.60691133e+01 2.59245113e+01 + 2.57806454e+01 2.56375121e+01 2.54951076e+01 2.53534285e+01 2.52124709e+01 + 2.50722315e+01 2.49327065e+01 2.47938925e+01 2.46557860e+01 2.45183833e+01 + 2.43816811e+01 2.42456758e+01 2.41103640e+01 2.39757422e+01 2.38418071e+01 + 2.37085551e+01 2.35759829e+01 2.34440871e+01 2.33128644e+01 2.31823115e+01 + 2.30524249e+01 2.29232013e+01 2.27946376e+01 2.26667304e+01 2.25394764e+01 + 2.24128724e+01 2.22869151e+01 2.21616014e+01 2.20369281e+01 2.19128919e+01 + 2.17894897e+01 2.16667184e+01 2.15445748e+01 2.14230557e+01 2.13021582e+01 + 2.11818790e+01 2.10622152e+01 2.09431636e+01 2.08247212e+01 2.07068850e+01 + 2.05896520e+01 2.04730192e+01 2.03569835e+01 2.02415420e+01 2.01266918e+01 + 2.00124300e+01 1.98987535e+01 1.97856594e+01 1.96731450e+01 1.95612073e+01 + 1.94498434e+01 1.93390504e+01 1.92288256e+01 1.91191661e+01 1.90100691e+01 + 1.89015317e+01 1.87935513e+01 1.86861250e+01 1.85792501e+01 1.84729238e+01 + 1.83671434e+01 1.82619062e+01 1.81572095e+01 1.80530505e+01 1.79494267e+01 + 1.78463353e+01 1.77437737e+01 1.76417392e+01 1.75402293e+01 1.74392413e+01 + 1.73387726e+01 1.72388207e+01 1.71393829e+01 1.70404567e+01 1.69420395e+01 + 1.68441289e+01 1.67467222e+01 1.66498171e+01 1.65534109e+01 1.64575012e+01 + 1.63620855e+01 1.62671614e+01 1.61727263e+01 1.60787780e+01 1.59853139e+01 + 1.58923316e+01 1.57998288e+01 1.57078030e+01 1.56162518e+01 1.55251730e+01 + 1.54345641e+01 1.53444228e+01 1.52547467e+01 1.51655336e+01 1.50767812e+01 + 1.49884871e+01 1.49006490e+01 1.48132647e+01 1.47263319e+01 1.46398484e+01 + 1.45538120e+01 1.44682203e+01 1.43830712e+01 1.42983624e+01 1.42140919e+01 + 1.41302573e+01 1.40468565e+01 1.39638874e+01 1.38813477e+01 1.37992354e+01 + 1.37175484e+01 1.36362844e+01 1.35554414e+01 1.34750172e+01 1.33950099e+01 + 1.33154172e+01 1.32362372e+01 1.31574678e+01 1.30791069e+01 1.30011525e+01 + 1.29236025e+01 1.28464550e+01 1.27697079e+01 1.26933592e+01 1.26174070e+01 + 1.25418492e+01 1.24666839e+01 1.23919091e+01 1.23175229e+01 1.22435233e+01 + 1.21699084e+01 1.20966763e+01 1.20238251e+01 1.19513528e+01 1.18792576e+01 + 1.18075376e+01 1.17361909e+01 1.16652156e+01 1.15946099e+01 1.15243720e+01 + 1.14544999e+01 1.13849919e+01 1.13158462e+01 1.12470609e+01 1.11786342e+01 + 1.11105644e+01 1.10428496e+01 1.09754881e+01 1.09084781e+01 1.08418179e+01 + 1.07755057e+01 1.07095397e+01 1.06439183e+01 1.05786397e+01 1.05137021e+01 + 1.04491040e+01 1.03848435e+01 1.03209190e+01 1.02573288e+01 1.01940713e+01 + 1.01311448e+01 1.00685475e+01 1.00062780e+01 9.94433443e+00 9.88271528e+00 + 9.82141891e+00 9.76044369e+00 9.69978801e+00 9.63945028e+00 9.57942890e+00 + 9.51972228e+00 9.46032886e+00 9.40124705e+00 9.34247531e+00 9.28401207e+00 + 9.22585579e+00 9.16800493e+00 9.11045796e+00 9.05321336e+00 8.99626961e+00 + 8.93962520e+00 8.88327864e+00 8.82722842e+00 8.77147307e+00 8.71601110e+00 + 8.66084104e+00 8.60596143e+00 8.55137081e+00 8.49706774e+00 8.44305077e+00 + 8.38931846e+00 8.33586938e+00 8.28270212e+00 8.22981527e+00 8.17720740e+00 + 8.12487713e+00 8.07282306e+00 8.02104381e+00 7.96953799e+00 7.91830423e+00 + 7.86734116e+00 7.81664743e+00 7.76622169e+00 7.71606259e+00 7.66616878e+00 + 7.61653894e+00 7.56717174e+00 7.51806586e+00 7.46921999e+00 7.42063283e+00 + 7.37230306e+00 7.32422941e+00 7.27641057e+00 7.22884528e+00 7.18153226e+00 + 7.13447023e+00 7.08765794e+00 7.04109413e+00 6.99477755e+00 6.94870697e+00 + 6.90288113e+00 6.85729882e+00 6.81195880e+00 6.76685986e+00 6.72200078e+00 + 6.67738036e+00 6.63299740e+00 6.58885070e+00 6.54493908e+00 6.50126134e+00 + 6.45781632e+00 6.41460284e+00 6.37161974e+00 6.32886585e+00 6.28634003e+00 + 6.24404112e+00 6.20196799e+00 6.16011949e+00 6.11849449e+00 6.07709187e+00 + 6.03591051e+00 5.99494929e+00 5.95420710e+00 5.91368284e+00 5.87337542e+00 + 5.83328374e+00 5.79340670e+00 5.75374324e+00 5.71429227e+00 5.67505272e+00 + 5.63602353e+00 5.59720364e+00 5.55859198e+00 5.52018752e+00 5.48198920e+00 + 5.44399598e+00 5.40620683e+00 5.36862073e+00 5.33123664e+00 5.29405355e+00 + 5.25707044e+00 5.22028630e+00 5.18370014e+00 5.14731094e+00 5.11111772e+00 + 5.07511948e+00 5.03931525e+00 5.00370403e+00 4.96828487e+00 4.93305677e+00 + 4.89801879e+00 4.86316997e+00 4.82850933e+00 4.79403594e+00 4.75974885e+00 + 4.72564712e+00 4.69172980e+00 4.65799598e+00 4.62444471e+00 4.59107508e+00 + 4.55788617e+00 4.52487706e+00 4.49204685e+00 4.45939462e+00 4.42691949e+00 + 4.39462055e+00 4.36249691e+00 4.33054769e+00 4.29877201e+00 4.26716897e+00 + 4.23573772e+00 4.20447738e+00 4.17338708e+00 4.14246597e+00 4.11171318e+00 + 4.08112787e+00 4.05070919e+00 4.02045629e+00 3.99036834e+00 3.96044449e+00 + 3.93068392e+00 3.90108579e+00 3.87164929e+00 3.84237360e+00 3.81325790e+00 + 3.78430138e+00 3.75550323e+00 3.72686265e+00 3.69837884e+00 3.67005100e+00 + 3.64187835e+00 3.61386009e+00 3.58599545e+00 3.55828364e+00 3.53072389e+00 + 3.50331543e+00 3.47605748e+00 3.44894929e+00 3.42199009e+00 3.39517912e+00 + 3.36851565e+00 3.34199890e+00 3.31562815e+00 3.28940264e+00 3.26332165e+00 + 3.23738442e+00 3.21159025e+00 3.18593839e+00 3.16042813e+00 3.13505874e+00 + 3.10982950e+00 3.08473972e+00 3.05978867e+00 3.03497565e+00 3.01029995e+00 + 2.98576089e+00 2.96135776e+00 2.93708988e+00 2.91295654e+00 2.88895708e+00 + 2.86509080e+00 2.84135704e+00 2.81775511e+00 2.79428434e+00 2.77094406e+00 + 2.74773362e+00 2.72465235e+00 2.70169958e+00 2.67887468e+00 2.65617697e+00 + 2.63360582e+00 2.61116059e+00 2.58884062e+00 2.56664528e+00 2.54457393e+00 + 2.52262595e+00 2.50080069e+00 2.47909755e+00 2.45751588e+00 2.43605508e+00 + 2.41471452e+00 2.39349360e+00 2.37239170e+00 2.35140821e+00 2.33054253e+00 + 2.30979405e+00 2.28916219e+00 2.26864633e+00 2.24824590e+00 2.22796030e+00 + 2.20778893e+00 2.18773123e+00 2.16778660e+00 2.14795448e+00 2.12823427e+00 + 2.10862542e+00 2.08912735e+00 2.06973950e+00 2.05046129e+00 2.03129218e+00 + 2.01223160e+00 1.99327899e+00 1.97443380e+00 1.95569549e+00 1.93706350e+00 + 1.91853730e+00 1.90011633e+00 1.88180006e+00 1.86358796e+00 1.84547948e+00 + 1.82747410e+00 1.80957130e+00 1.79177053e+00 1.77407128e+00 1.75647304e+00 + 1.73897527e+00 1.72157747e+00 1.70427912e+00 1.68707972e+00 1.66997874e+00 + 1.65297570e+00 1.63607008e+00 1.61926139e+00 1.60254913e+00 1.58593279e+00 + 1.56941190e+00 1.55298595e+00 1.53665447e+00 1.52041696e+00 1.50427294e+00 + 1.48822194e+00 1.47226347e+00 1.45639705e+00 1.44062222e+00 1.42493849e+00 + 1.40934542e+00 1.39384251e+00 1.37842932e+00 1.36310538e+00 1.34787023e+00 + 1.33272342e+00 1.31766448e+00 1.30269297e+00 1.28780843e+00 1.27301042e+00 + 1.25829849e+00 1.24367219e+00 1.22913109e+00 1.21467475e+00 1.20030272e+00 + 1.18601458e+00 1.17180988e+00 1.15768821e+00 1.14364913e+00 1.12969221e+00 + 1.11581703e+00 1.10202317e+00 1.08831021e+00 1.07467773e+00 1.06112531e+00 + 1.04765254e+00 1.03425901e+00 1.02094431e+00 1.00770803e+00 9.94549760e-01 + 9.81469105e-01 9.68465661e-01 9.55539027e-01 9.42688806e-01 9.29914602e-01 + 9.17216021e-01 9.04592672e-01 8.92044165e-01 8.79570112e-01 8.67170128e-01 + 8.54843828e-01 8.42590831e-01 8.30410756e-01 8.18303225e-01 8.06267861e-01 + 7.94304292e-01 7.82412143e-01 7.70591044e-01 7.58840626e-01 7.47160522e-01 + 7.35550368e-01 7.24009799e-01 7.12538455e-01 7.01135975e-01 6.89802001e-01 + 6.78536178e-01 6.67338150e-01 6.56207566e-01 6.45144075e-01 6.34147327e-01 + 6.23216975e-01 6.12352673e-01 6.01554078e-01 5.90820848e-01 5.80152642e-01 + 5.69549121e-01 5.59009948e-01 5.48534788e-01 5.38123307e-01 5.27775174e-01 + 5.17490057e-01 5.07267629e-01 4.97107561e-01 4.87009530e-01 4.76973210e-01 + 4.66998279e-01 4.57084418e-01 4.47231307e-01 4.37438629e-01 4.27706068e-01 + 4.18033309e-01 4.08420041e-01 3.98865952e-01 3.89370732e-01 3.79934074e-01 + 3.70555672e-01 3.61235220e-01 3.51972415e-01 3.42766955e-01 3.33618540e-01 + 3.24526871e-01 3.15491651e-01 3.06512584e-01 2.97589375e-01 2.88721732e-01 + 2.79909364e-01 2.71151979e-01 2.62449291e-01 2.53801012e-01 2.45206855e-01 + 2.36666538e-01 2.28179777e-01 2.19746291e-01 2.11365800e-01 2.03038026e-01 + 1.94762691e-01 1.86539519e-01 1.78368237e-01 1.70248571e-01 1.62180250e-01 + 1.54163003e-01 1.46196562e-01 1.38280659e-01 1.30415028e-01 1.22599404e-01 + 1.14833523e-01 1.07117123e-01 9.94499436e-02 9.18317249e-02 8.42622086e-02 + 7.67411378e-02 6.92682567e-02 6.18433109e-02 5.44660472e-02 4.71362139e-02 + 3.98535603e-02 3.26178371e-02 2.54287961e-02 1.82861905e-02 1.11897747e-02 + 4.13930434e-03 -2.86546373e-03 -9.82477145e-03 -1.67388595e-02 -2.36079675e-02 + -3.04323335e-02 -3.72121949e-02 -4.39477874e-02 -5.06393458e-02 -5.72871036e-02 + -6.38912932e-02 -7.04521458e-02 -7.69698915e-02 -8.34447591e-02 -8.98769763e-02 + -9.62667698e-02 -1.02614365e-01 -1.08919986e-01 -1.15183857e-01 -1.21406198e-01 + -1.27587232e-01 -1.33727178e-01 -1.39826254e-01 -1.45884679e-01 -1.51902669e-01 + -1.57880439e-01 -1.63818204e-01 -1.69716177e-01 -1.75574570e-01 -1.81393594e-01 + -1.87173460e-01 -1.92914376e-01 -1.98616551e-01 -2.04280191e-01 -2.09905502e-01 + -2.15492689e-01 -2.21041955e-01 -2.26553505e-01 -2.32027538e-01 -2.37464257e-01 + -2.42863861e-01 -2.48226548e-01 -2.53552516e-01 -2.58841962e-01 -2.64095082e-01 + -2.69312070e-01 -2.74493121e-01 -2.79638426e-01 -2.84748179e-01 -2.89822568e-01 + -2.94861786e-01 -2.99866020e-01 -3.04835458e-01 -3.09770287e-01 -3.14670694e-01 + -3.19536864e-01 -3.24368981e-01 -3.29167227e-01 -3.33931786e-01 -3.38662839e-01 + -3.43360567e-01 -3.48025148e-01 -3.52656762e-01 -3.57255587e-01 -3.61821799e-01 + -3.66355574e-01 -3.70857088e-01 -3.75326514e-01 -3.79764027e-01 -3.84169798e-01 + -3.88543999e-01 -3.92886801e-01 -3.97198374e-01 -4.01478887e-01 -4.05728507e-01 + -4.09947403e-01 -4.14135740e-01 -4.18293685e-01 -4.22421401e-01 -4.26519054e-01 + -4.30586805e-01 -4.34624818e-01 -4.38633254e-01 -4.42612274e-01 -4.46562036e-01 + -4.50482701e-01 -4.54374427e-01 -4.58237371e-01 -4.62071689e-01 -4.65877538e-01 + -4.69655072e-01 -4.73404446e-01 -4.77125814e-01 -4.80819327e-01 -4.84485138e-01 + -4.88123398e-01 -4.91734258e-01 -4.95317866e-01 -4.98874373e-01 -5.02403925e-01 + -5.05906671e-01 -5.09382757e-01 -5.12832329e-01 -5.16255532e-01 -5.19652510e-01 + -5.23023407e-01 -5.26368366e-01 -5.29687529e-01 -5.32981038e-01 -5.36249034e-01 + -5.39491656e-01 -5.42709043e-01 -5.45901336e-01 -5.49068670e-01 -5.52211184e-01 + -5.55329015e-01 -5.58422297e-01 -5.61491167e-01 -5.64535758e-01 -5.67556204e-01 + -5.70552639e-01 -5.73525195e-01 -5.76474004e-01 -5.79399196e-01 -5.82300903e-01 + -5.85179253e-01 -5.88034376e-01 -5.90866401e-01 -5.93675455e-01 -5.96461665e-01 + -5.99225158e-01 -6.01966060e-01 -6.04684495e-01 -6.07380589e-01 -6.10054465e-01 + -6.12706247e-01 -6.15336057e-01 -6.17944018e-01 -6.20530250e-01 -6.23094875e-01 + -6.25638012e-01 -6.28159782e-01 -6.30660303e-01 -6.33139693e-01 -6.35598071e-01 + -6.38035554e-01 -6.40452257e-01 -6.42848298e-01 -6.45223791e-01 -6.47578851e-01 + -6.49913592e-01 -6.52228129e-01 -6.54522573e-01 -6.56797038e-01 -6.59051635e-01 + -6.61286476e-01 -6.63501672e-01 -6.65697332e-01 -6.67873566e-01 -6.70030483e-01 + -6.72168192e-01 -6.74286801e-01 -6.76386416e-01 -6.78467146e-01 -6.80529096e-01 + -6.82572371e-01 -6.84597078e-01 -6.86603321e-01 -6.88591203e-01 -6.90560829e-01 + -6.92512302e-01 -6.94445723e-01 -6.96361196e-01 -6.98258822e-01 -7.00138701e-01 + -7.02000934e-01 -7.03845621e-01 -7.05672862e-01 -7.07482755e-01 -7.09275398e-01 + -7.11050891e-01 -7.12809329e-01 -7.14550810e-01 -7.16275431e-01 -7.17983287e-01 + -7.19674474e-01 -7.21349087e-01 -7.23007219e-01 -7.24648966e-01 -7.26274420e-01 + -7.27883675e-01 -7.29476822e-01 -7.31053955e-01 -7.32615164e-01 -7.34160541e-01 + -7.35690177e-01 -7.37204161e-01 -7.38702583e-01 -7.40185533e-01 -7.41653099e-01 + -7.43105369e-01 -7.44542432e-01 -7.45964375e-01 -7.47371285e-01 -7.48763248e-01 + -7.50140350e-01 -7.51502678e-01 -7.52850315e-01 -7.54183348e-01 -7.55501859e-01 + -7.56805934e-01 -7.58095656e-01 -7.59371107e-01 -7.60632370e-01 -7.61879527e-01 + -7.63112661e-01 -7.64331852e-01 -7.65537181e-01 -7.66728729e-01 -7.67906575e-01 + -7.69070800e-01 -7.70221483e-01 -7.71358701e-01 -7.72482535e-01 -7.73593062e-01 + -7.74690359e-01 -7.75774504e-01 -7.76845573e-01 -7.77903643e-01 -7.78948790e-01 + -7.79981089e-01 -7.81000616e-01 -7.82007445e-01 -7.83001652e-01 -7.83983309e-01 + -7.84952491e-01 -7.85909271e-01 -7.86853722e-01 -7.87785916e-01 -7.88705925e-01 + -7.89613822e-01 -7.90509678e-01 -7.91393563e-01 -7.92265549e-01 -7.93125705e-01 + -7.93974102e-01 -7.94810809e-01 -7.95635895e-01 -7.96449429e-01 -7.97251480e-01 + -7.98042116e-01 -7.98821405e-01 -7.99589413e-01 -8.00346208e-01 -8.01091857e-01 + -8.01826426e-01 -8.02549981e-01 -8.03262588e-01 -8.03964312e-01 -8.04655218e-01 + -8.05335370e-01 -8.06004834e-01 -8.06663672e-01 -8.07311949e-01 -8.07949728e-01 + -8.08577072e-01 -8.09194043e-01 -8.09800704e-01 -8.10397117e-01 -8.10983343e-01 + -8.11559444e-01 -8.12125480e-01 -8.12681513e-01 -8.13227603e-01 -8.13763809e-01 + -8.14290192e-01 -8.14806811e-01 -8.15313725e-01 -8.15810993e-01 -8.16298673e-01 + -8.16776824e-01 -8.17245503e-01 -8.17704767e-01 -8.18154675e-01 -8.18595283e-01 + -8.19026648e-01 -8.19448826e-01 -8.19861873e-01 -8.20265845e-01 -8.20660797e-01 + -8.21046784e-01 -8.21423862e-01 -8.21792085e-01 -8.22151507e-01 -8.22502182e-01 + -8.22844164e-01 -8.23177506e-01 -8.23502262e-01 -8.23818484e-01 -8.24126225e-01 + -8.24425537e-01 -8.24716472e-01 -8.24999082e-01 -8.25273418e-01 -8.25539531e-01 + -8.25797473e-01 -8.26047294e-01 -8.26289045e-01 -8.26522774e-01 -8.26748533e-01 + -8.26966371e-01 -8.27176336e-01 -8.27378479e-01 -8.27572848e-01 -8.27759490e-01 + -8.27938455e-01 -8.28109791e-01 -8.28273545e-01 -8.28429764e-01 -8.28578496e-01 + -8.28719788e-01 -8.28853686e-01 -8.28980236e-01 -8.29099486e-01 -8.29211480e-01 + -8.29316265e-01 -8.29413885e-01 -8.29504387e-01 -8.29587814e-01 -8.29664212e-01 + -8.29733626e-01 -8.29796098e-01 -8.29851673e-01 -8.29900395e-01 -8.29942307e-01 + -8.29977453e-01 -8.30005874e-01 -8.30027615e-01 -8.30042718e-01 -8.30051224e-01 + -8.30053177e-01 -8.30048616e-01 -8.30037585e-01 -8.30020125e-01 -8.29996276e-01 + -8.29966079e-01 -8.29929575e-01 -8.29886805e-01 -8.29837808e-01 -8.29782625e-01 + -8.29721295e-01 -8.29653858e-01 -8.29580352e-01 -8.29500818e-01 -8.29415294e-01 + -8.29323818e-01 -8.29226428e-01 -8.29123164e-01 -8.29014062e-01 -8.28899162e-01 + -8.28778499e-01 -8.28652111e-01 -8.28520036e-01 -8.28382311e-01 -8.28238971e-01 + -8.28090053e-01 -8.27935594e-01 -8.27775630e-01 -8.27610196e-01 -8.27439328e-01 + -8.27263061e-01 -8.27081431e-01 -8.26894472e-01 -8.26702219e-01 -8.26504707e-01 + -8.26301970e-01 -8.26094042e-01 -8.25880957e-01 -8.25662749e-01 -8.25439451e-01 + -8.25211097e-01 -8.24977719e-01 -8.24739351e-01 -8.24496025e-01 -8.24247774e-01 + -8.23994630e-01 -8.23736626e-01 -8.23473792e-01 -8.23206162e-01 -8.22933765e-01 + -8.22656635e-01 -8.22374801e-01 -8.22088295e-01 -8.21797147e-01 -8.21501388e-01 + -8.21201048e-01 -8.20896158e-01 -8.20586748e-01 -8.20272846e-01 -8.19954483e-01 + -8.19631689e-01 -8.19304491e-01 -8.18972920e-01 -8.18637004e-01 -8.18296771e-01 + -8.17952251e-01 -8.17603471e-01 -8.17250460e-01 -8.16893244e-01 -8.16531853e-01 + -8.16166313e-01 -8.15796652e-01 -8.15422896e-01 -8.15045073e-01 -8.14663210e-01 + -8.14277333e-01 -8.13887468e-01 -8.13493641e-01 -8.13095879e-01 -8.12694208e-01 + -8.12288652e-01 -8.11879238e-01 -8.11465990e-01 -8.11048934e-01 -8.10628095e-01 + -8.10203497e-01 -8.09775165e-01 -8.09343123e-01 -8.08907395e-01 -8.08468006e-01 + -8.08024978e-01 -8.07578336e-01 -8.07128104e-01 -8.06674303e-01 -8.06216958e-01 + -8.05756092e-01 -8.05291726e-01 -8.04823883e-01 -8.04352587e-01 -8.03877858e-01 + -8.03399719e-01 -8.02918192e-01 -8.02433298e-01 -8.01945059e-01 -8.01453496e-01 + -8.00958629e-01 -8.00460481e-01 -7.99959071e-01 -7.99454420e-01 -7.98946548e-01 + -7.98435475e-01 -7.97921223e-01 -7.97403809e-01 -7.96883254e-01 -7.96359577e-01 + -7.95832798e-01 -7.95302935e-01 -7.94770007e-01 -7.94234034e-01 -7.93695032e-01 + -7.93153022e-01 -7.92608020e-01 -7.92060045e-01 -7.91509115e-01 -7.90955247e-01 + -7.90398458e-01 -7.89838766e-01 -7.89276187e-01 -7.88710739e-01 -7.88142437e-01 + -7.87571300e-01 -7.86997342e-01 -7.86420579e-01 -7.85841029e-01 -7.85258705e-01 + -7.84673625e-01 -7.84085802e-01 -7.83495253e-01 -7.82901991e-01 -7.82306032e-01 + -7.81707391e-01 -7.81106081e-01 -7.80502117e-01 -7.79895513e-01 -7.79286281e-01 + -7.78674437e-01 -7.78059993e-01 -7.77442962e-01 -7.76823358e-01 -7.76201193e-01 + -7.75576479e-01 -7.74949229e-01 -7.74319455e-01 -7.73687169e-01 -7.73052383e-01 + -7.72415108e-01 -7.71775355e-01 -7.71133137e-01 -7.70488462e-01 -7.69841343e-01 + -7.69191789e-01 -7.68539812e-01 -7.67885420e-01 -7.67228624e-01 -7.66569433e-01 + -7.65907857e-01 -7.65243906e-01 -7.64577587e-01 -7.63908910e-01 -7.63237883e-01 + -7.62564514e-01 -7.61888813e-01 -7.61210785e-01 -7.60530440e-01 -7.59847785e-01 + -7.59162825e-01 -7.58475570e-01 -7.57786025e-01 -7.57094197e-01 -7.56400091e-01 + -7.55703715e-01 -7.55005074e-01 -7.54304173e-01 -7.53601018e-01 -7.52895613e-01 + -7.52187964e-01 -7.51478075e-01 -7.50765950e-01 -7.50051594e-01 -7.49335009e-01 + -7.48616201e-01 -7.47895172e-01 -7.47171925e-01 -7.46446463e-01 -7.45718788e-01 + -7.44988903e-01 -7.44256810e-01 -7.43522510e-01 -7.42786005e-01 -7.42047296e-01 + -7.41306385e-01 -7.40563271e-01 -7.39817955e-01 -7.39070437e-01 -7.38320717e-01 + -7.37568795e-01 -7.36814670e-01 -7.36058340e-01 -7.35299805e-01 -7.34539063e-01 + -7.33776111e-01 -7.33010948e-01 -7.32243571e-01 -7.31473978e-01 -7.30702165e-01 + -7.29928129e-01 -7.29151865e-01 -7.28373371e-01 -7.27592642e-01 -7.26809672e-01 + -7.26024458e-01 -7.25236993e-01 -7.24447272e-01 -7.23655289e-01 -7.22861038e-01 + -7.22064513e-01 -7.21265705e-01 -7.20464608e-01 -7.19661214e-01 -7.18855516e-01 + -7.18047504e-01 -7.17237171e-01 -7.16424507e-01 -7.15609502e-01 -7.14792147e-01 + -7.13972432e-01 -7.13150346e-01 -7.12325879e-01 -7.11499018e-01 -7.10669753e-01 + -7.09838072e-01 -7.09003962e-01 -7.08167410e-01 -7.07328403e-01 -7.06486927e-01 + -7.05642970e-01 -7.04796515e-01 -7.03947549e-01 -7.03096056e-01 -7.02242021e-01 + -7.01385428e-01 -7.00526259e-01 -6.99664500e-01 -6.98800131e-01 -6.97933136e-01 + -6.97063496e-01 -6.96191192e-01 -6.95316207e-01 -6.94438519e-01 -6.93558110e-01 + -6.92674959e-01 -6.91789044e-01 -6.90900346e-01 -6.90008841e-01 -6.89114509e-01 + -6.88217325e-01 -6.87317267e-01 -6.86414312e-01 -6.85508434e-01 -6.84599610e-01 + -6.83687814e-01 -6.82773021e-01 -6.81855205e-01 -6.80934338e-01 -6.80010394e-01 + -6.79083345e-01 -6.78153163e-01 -6.77219819e-01 -6.76283284e-01 -6.75343528e-01 + -6.74400521e-01 -6.73454232e-01 -6.72504629e-01 -6.71551681e-01 -6.70595355e-01 + -6.69635618e-01 -6.68672437e-01 -6.67705776e-01 -6.66735602e-01 -6.65761880e-01 + -6.64784572e-01 -6.63803643e-01 -6.62819056e-01 -6.61830772e-01 -6.60838754e-01 + -6.59842963e-01 -6.58843360e-01 -6.57839903e-01 -6.56832553e-01 -6.55821268e-01 + -6.54806006e-01 -6.53786725e-01 -6.52763382e-01 -6.51735932e-01 -6.50704331e-01 + -6.49668534e-01 -6.48628496e-01 -6.47584169e-01 -6.46535507e-01 -6.45482463e-01 + -6.44424987e-01 -6.43363031e-01 -6.42296546e-01 -6.41225480e-01 -6.40149782e-01 + -6.39069402e-01 -6.37984286e-01 -6.36894382e-01 -6.35799636e-01 -6.34699994e-01 + -6.33595399e-01 -6.32485797e-01 -6.31371131e-01 -6.30251345e-01 -6.29126378e-01 + -6.27996175e-01 -6.26860674e-01 -6.25719817e-01 -6.24573542e-01 -6.23421788e-01 + -6.22264492e-01 -6.21101593e-01 -6.19933027e-01 -6.18758729e-01 -6.17578634e-01 + -6.16392677e-01 -6.15200791e-01 -6.14002910e-01 -6.12798966e-01 -6.11588889e-01 + -6.10372612e-01 -6.09150063e-01 -6.07921173e-01 -6.06685870e-01 -6.05444083e-01 + -6.04195738e-01 -6.02940762e-01 -6.01679081e-01 -6.00410620e-01 -5.99135305e-01 + -5.97853058e-01 -5.96563803e-01 -5.95267462e-01 -5.93963958e-01 -5.92653212e-01 + -5.91335143e-01 -5.90009673e-01 -5.88676720e-01 -5.87336202e-01 -5.85988039e-01 + -5.84632147e-01 -5.83268443e-01 -5.81896843e-01 -5.80517264e-01 -5.79129619e-01 + -5.77733823e-01 -5.76329791e-01 -5.74917434e-01 -5.73496668e-01 -5.72067402e-01 + -5.70629551e-01 -5.69183023e-01 -5.67727731e-01 -5.66263585e-01 -5.64790494e-01 + -5.63308368e-01 -5.61817116e-01 -5.60316647e-01 -5.58806868e-01 -5.57287689e-01 + -5.55759015e-01 -5.54220755e-01 -5.52672816e-01 -5.51115104e-01 -5.49547525e-01 + -5.47969986e-01 -5.46382393e-01 -5.44784651e-01 -5.43176667e-01 -5.41558346e-01 + -5.39929592e-01 -5.38290313e-01 -5.36640412e-01 -5.34979796e-01 -5.33308370e-01 + -5.31626039e-01 -5.29932710e-01 -5.28228287e-01 -5.26512676e-01 -5.24785785e-01 + -5.23047519e-01 -5.21297785e-01 -5.19536490e-01 -5.17763541e-01 -5.15978846e-01 + -5.14182315e-01 -5.12373854e-01 -5.10553375e-01 -5.08720787e-01 -5.06876000e-01 + -5.05018926e-01 -5.03149478e-01 -5.01267568e-01 -4.99373110e-01 -4.97466019e-01 + -4.95546212e-01 -4.93613604e-01 -4.91668114e-01 -4.89709661e-01 -4.87738166e-01 + -4.85753551e-01 -4.83755738e-01 -4.81744652e-01 -4.79720220e-01 -4.77682369e-01 + -4.75631029e-01 -4.73566131e-01 -4.71487607e-01 -4.69395393e-01 -4.67289426e-01 + -4.65169644e-01 -4.63035989e-01 -4.60888403e-01 -4.58726833e-01 -4.56551227e-01 + -4.54361534e-01 -4.52157709e-01 -4.49939707e-01 -4.47707486e-01 -4.45461007e-01 + -4.43200236e-01 -4.40925140e-01 -4.38635688e-01 -4.36331855e-01 -4.34013618e-01 + -4.31680958e-01 -4.29333858e-01 -4.26972307e-01 -4.24596297e-01 -4.22205821e-01 + -4.19800882e-01 -4.17381480e-01 -4.14947626e-01 -4.12499330e-01 -4.10036609e-01 + -4.07559485e-01 -4.05067983e-01 -4.02562134e-01 -4.00041973e-01 -3.97507541e-01 + -3.94958883e-01 -3.92396051e-01 -3.89819100e-01 -3.87228093e-01 -3.84623096e-01 + -3.82004184e-01 -3.79371434e-01 -3.76724932e-01 -3.74064769e-01 -3.71391042e-01 + -3.68703855e-01 -3.66003318e-01 -3.63289546e-01 -3.60562665e-01 -3.57822803e-01 + -3.55070098e-01 -3.52304693e-01 -3.49526740e-01 -3.46736396e-01 -3.43933829e-01 + -3.41119210e-01 -3.38292721e-01 -3.35454550e-01 -3.32604893e-01 -3.29743954e-01 + -3.26871944e-01 -3.23989085e-01 -3.21095603e-01 -3.18191736e-01 -3.15277727e-01 + -3.12353830e-01 -3.09420306e-01 -3.06477424e-01 -3.03525464e-01 -3.00564711e-01 + -2.97595463e-01 -2.94618022e-01 -2.91632703e-01 -2.88639827e-01 -2.85639725e-01 + -2.82632736e-01 -2.79619209e-01 -2.76599501e-01 -2.73573978e-01 -2.70543015e-01 + -2.67506995e-01 -2.64466312e-01 -2.61421367e-01 -2.58372570e-01 -2.55320339e-01 + -2.52265102e-01 -2.49207296e-01 -2.46147364e-01 -2.43085759e-01 -2.40022943e-01 + -2.36959385e-01 -2.33895563e-01 -2.30831961e-01 -2.27769074e-01 -2.24707401e-01 + -2.21647452e-01 -2.18589741e-01 -2.15534793e-01 -2.12483136e-01 -2.09435307e-01 + -2.06391849e-01 -2.03353312e-01 -2.00320250e-01 -1.97293224e-01 -1.94272801e-01 + -1.91259553e-01 -1.88254056e-01 -1.85256891e-01 -1.82268644e-01 -1.79289904e-01 + -1.76321263e-01 -1.73363318e-01 -1.70416668e-01 -1.67481913e-01 -1.64559658e-01 + -1.61650506e-01 -1.58755065e-01 -1.55873940e-01 -1.53007739e-01 -1.50157068e-01 + -1.47322535e-01 -1.44504743e-01 -1.41704297e-01 -1.38921798e-01 -1.36157844e-01 + -1.33413031e-01 -1.30687950e-01 -1.27983190e-01 -1.25299332e-01 -1.22636955e-01 + -1.19996629e-01 -1.17378920e-01 -1.14784386e-01 -1.12213577e-01 -1.09667035e-01 + -1.07145293e-01 -1.04648876e-01 -1.02178298e-01 -9.97340616e-02 -9.73166605e-02 + -9.49265751e-02 -9.25642743e-02 -9.02302138e-02 -8.79248363e-02 -8.56485705e-02 + -8.34018305e-02 -8.11850158e-02 -7.89985101e-02 -7.68426811e-02 -7.47178803e-02 + -7.26244420e-02 -7.05626829e-02 -6.85329022e-02 -6.65353805e-02 -6.45703797e-02 + -6.26381426e-02 -6.07388924e-02 -5.88728324e-02 -5.70401460e-02 -5.52409958e-02 + -5.34755237e-02 -5.17438507e-02 -5.00460763e-02 -4.83822789e-02 -4.67525150e-02 + -4.51568196e-02 -4.35952056e-02 -4.20676644e-02 -4.05741649e-02 -3.91146547e-02 + -3.76890589e-02 -3.62972811e-02 -3.49392031e-02 -3.36146850e-02 -3.23235655e-02 + -3.10656621e-02 -2.98407714e-02 -2.86486689e-02 -2.74891102e-02 -2.63618306e-02 + -2.52665456e-02 -2.42029516e-02 -2.31707262e-02 -2.21695287e-02 -2.11990004e-02 + -2.02587655e-02 -1.93484316e-02 -1.84675899e-02 -1.76158165e-02 -1.67926724e-02 + -1.59977047e-02 -1.52304470e-02 -1.44904203e-02 -1.37771336e-02 -1.30900849e-02 + -1.24287617e-02 -1.17926418e-02 -1.11811947e-02 -1.05938815e-02 -1.00301566e-02 + -9.48946778e-03 -8.97125774e-03 -8.47496447e-03 -8.00002229e-03 -7.54586267e-03 + -7.11191505e-03 -6.69760771e-03 -6.30236856e-03 -5.92562598e-03 -5.56680964e-03 + -5.22535124e-03 -4.90068533e-03 -4.59225004e-03 -4.29948781e-03 -4.02184611e-03 + -3.75877813e-03 -3.50974341e-03 -3.27420852e-03 -3.05164762e-03 -2.84154304e-03 + -2.64338584e-03 -2.45667632e-03 -2.28092446e-03 -2.11565039e-03 -1.96038480e-03 + -1.81466930e-03 -1.67805673e-03 -1.55011152e-03 -1.43040988e-03 -1.31854010e-03 + -1.21410266e-03 -1.11671047e-03 -1.02598891e-03 -9.41575982e-04 -8.63122311e-04 + -7.90291195e-04 -7.22758579e-04 -6.60213014e-04 -6.02355579e-04 -5.48899783e-04 + -4.99571436e-04 -4.54108489e-04 -4.12260857e-04 -3.73790220e-04 -3.38469796e-04 + -3.06084100e-04 -2.76428684e-04 -2.49309860e-04 -2.24544412e-04 -2.01959290e-04 + -1.81391298e-04 -1.62686771e-04 -1.45701242e-04 -1.30299105e-04 -1.16353279e-04 + -1.03744855e-04 -9.23627580e-05 -8.21033971e-05 -7.28703214e-05 -6.45738783e-05 + -5.71308746e-05 -5.04642428e-05 -4.45027130e-05 -3.91804914e-05 -3.44369461e-05 + -3.02163020e-05 -2.64673434e-05 -2.31431269e-05 -2.02007038e-05 -1.76008533e-05 + -1.53078260e-05 -1.32890983e-05 -1.15151383e-05 -9.95918234e-06 -8.59702333e-06 + -7.40680967e-06 -6.36885574e-06 -5.46546311e-06 -4.68075258e-06 -4.00050669e-06 + -3.41202254e-06 -2.90397453e-06 -2.46628666e-06 -2.09001414e-06 -1.76723382e-06 + -1.49094306e-06 -1.25496673e-06 -1.05387178e-06 -8.82889028e-07 -7.37841824e-07 + -6.15081008e-07 -5.11425893e-07 -4.24110800e-07 -3.50736768e-07 -2.89228062e-07 + -2.37793102e-07 -1.94889468e-07 -1.59192641e-07 -1.29568160e-07 -1.05046889e-07 + -8.48031182e-08 -6.81352185e-08 -5.44486135e-08 -4.32408265e-08 -3.40883923e-08 + -2.66354353e-08 -2.05837314e-08 -1.56840870e-08 -1.17288835e-08 -8.54565102e-09 + -5.99154433e-09 -3.94861124e-09 -2.31975185e-09 -1.02527898e-09 0.00000000e+00 + 7.26720922e+00 7.26720922e+00 7.26720922e+00 7.26720922e+00 7.26720922e+00 + 7.26720922e+00 7.26720922e+00 7.26720922e+00 7.26720922e+00 7.26720922e+00 + 7.26720922e+00 7.26720922e+00 7.26720922e+00 7.26720922e+00 7.26720922e+00 + 7.26720922e+00 7.26720922e+00 7.26720922e+00 7.26720922e+00 7.26720922e+00 + 7.26720922e+00 7.26720922e+00 7.26720922e+00 7.26720922e+00 7.26720922e+00 + 7.26720922e+00 7.26720922e+00 7.26720922e+00 7.26720922e+00 7.26720922e+00 + 7.26720922e+00 7.26720922e+00 7.26720922e+00 7.26720922e+00 7.26720922e+00 + 7.26720922e+00 7.26720922e+00 7.26720922e+00 7.26720922e+00 7.26720922e+00 + 7.26720922e+00 7.26720922e+00 7.26720922e+00 7.26720922e+00 7.26720922e+00 + 7.26720922e+00 7.26720922e+00 7.26547462e+00 7.25551627e+00 7.24557157e+00 + 7.23564051e+00 7.22572305e+00 7.21581919e+00 7.20592890e+00 7.19605217e+00 + 7.18618898e+00 7.17633930e+00 7.16650313e+00 7.15668044e+00 7.14687121e+00 + 7.13707542e+00 7.12729307e+00 7.11752412e+00 7.10776856e+00 7.09802637e+00 + 7.08829753e+00 7.07858203e+00 7.06887985e+00 7.05919096e+00 7.04951536e+00 + 7.03985301e+00 7.03020391e+00 7.02056804e+00 7.01094537e+00 7.00133589e+00 + 6.99173958e+00 6.98215643e+00 6.97258641e+00 6.96302950e+00 6.95348570e+00 + 6.94395498e+00 6.93443732e+00 6.92493271e+00 6.91544112e+00 6.90596254e+00 + 6.89649696e+00 6.88704435e+00 6.87760469e+00 6.86817797e+00 6.85876418e+00 + 6.84936328e+00 6.83997528e+00 6.83060014e+00 6.82123785e+00 6.81188839e+00 + 6.80255174e+00 6.79322790e+00 6.78391683e+00 6.77461853e+00 6.76533297e+00 + 6.75606013e+00 6.74680001e+00 6.73755258e+00 6.72831782e+00 6.71909573e+00 + 6.70988627e+00 6.70068943e+00 6.69150520e+00 6.68233356e+00 6.67317449e+00 + 6.66402797e+00 6.65489399e+00 6.64577253e+00 6.63666357e+00 6.62756710e+00 + 6.61848310e+00 6.60941154e+00 6.60035242e+00 6.59130572e+00 6.58227141e+00 + 6.57324949e+00 6.56423994e+00 6.55524273e+00 6.54625785e+00 6.53728530e+00 + 6.52832503e+00 6.51937705e+00 6.51044134e+00 6.50151787e+00 6.49260663e+00 + 6.48370761e+00 6.47482078e+00 6.46594614e+00 6.45708366e+00 6.44823332e+00 + 6.43939512e+00 6.43056903e+00 6.42175504e+00 6.41295313e+00 6.40416328e+00 + 6.39538548e+00 6.38661971e+00 6.37786596e+00 6.36912420e+00 6.36039443e+00 + 6.35167662e+00 6.34297076e+00 6.33427684e+00 6.32559483e+00 6.31692472e+00 + 6.30826649e+00 6.29962013e+00 6.29098562e+00 6.28236295e+00 6.27375209e+00 + 6.26515304e+00 6.25656577e+00 6.24799028e+00 6.23942654e+00 6.23087453e+00 + 6.22233425e+00 6.21380567e+00 6.20528878e+00 6.19678357e+00 6.18829001e+00 + 6.17980810e+00 6.17133781e+00 6.16287913e+00 6.15443204e+00 6.14599654e+00 + 6.13757259e+00 6.12916019e+00 6.12075932e+00 6.11236997e+00 6.10399211e+00 + 6.09562574e+00 6.08727083e+00 6.07892738e+00 6.07059536e+00 6.06227476e+00 + 6.05396557e+00 6.04566776e+00 6.03738133e+00 6.02910626e+00 6.02084253e+00 + 6.01259012e+00 6.00434903e+00 5.99611923e+00 5.98790071e+00 5.97969346e+00 + 5.97149746e+00 5.96331269e+00 5.95513913e+00 5.94697679e+00 5.93882562e+00 + 5.93068563e+00 5.92255680e+00 5.91443911e+00 5.90633255e+00 5.89823710e+00 + 5.89015274e+00 5.88207946e+00 5.87401725e+00 5.86596609e+00 5.85792597e+00 + 5.84989686e+00 5.84187876e+00 5.83387165e+00 5.82587552e+00 5.81789034e+00 + 5.80991611e+00 5.80195281e+00 5.79400043e+00 5.78605894e+00 5.77812834e+00 + 5.77020861e+00 5.76229973e+00 5.75440170e+00 5.74651449e+00 5.73863809e+00 + 5.73077248e+00 5.72291766e+00 5.71507360e+00 5.70724030e+00 5.69941773e+00 + 5.69160588e+00 5.68380474e+00 5.67601429e+00 5.66823452e+00 5.66046542e+00 + 5.65270696e+00 5.64495913e+00 5.63722193e+00 5.62949533e+00 5.62177932e+00 + 5.61407389e+00 5.60637902e+00 5.59869469e+00 5.59102090e+00 5.58335763e+00 + 5.57570486e+00 5.56806258e+00 5.56043077e+00 5.55280942e+00 5.54519852e+00 + 5.53759805e+00 5.53000800e+00 5.52242836e+00 5.51485910e+00 5.50730021e+00 + 5.49975169e+00 5.49221351e+00 5.48468567e+00 5.47716814e+00 5.46966092e+00 + 5.46216398e+00 5.45467733e+00 5.44720093e+00 5.43973478e+00 5.43227887e+00 + 5.42483317e+00 5.41739768e+00 5.40997238e+00 5.40255726e+00 5.39515230e+00 + 5.38775749e+00 5.38037282e+00 5.37299827e+00 5.36563382e+00 5.35827947e+00 + 5.35093520e+00 5.34360100e+00 5.33627685e+00 5.32896274e+00 5.32165865e+00 + 5.31436457e+00 5.30708050e+00 5.29980640e+00 5.29254228e+00 5.28528811e+00 + 5.27804389e+00 5.27080959e+00 5.26358521e+00 5.25637073e+00 5.24916614e+00 + 5.24197143e+00 5.23478657e+00 5.22761157e+00 5.22044640e+00 5.21329105e+00 + 5.20614551e+00 5.19900976e+00 5.19188379e+00 5.18476759e+00 5.17766114e+00 + 5.17056443e+00 5.16347745e+00 5.15640019e+00 5.14933262e+00 5.14227474e+00 + 5.13522654e+00 5.12818799e+00 5.12115910e+00 5.11413983e+00 5.10713019e+00 + 5.10013016e+00 5.09313972e+00 5.08615886e+00 5.07918757e+00 5.07222583e+00 + 5.06527364e+00 5.05833097e+00 5.05139783e+00 5.04447418e+00 5.03756002e+00 + 5.03065535e+00 5.02376013e+00 5.01687437e+00 5.00999804e+00 5.00313114e+00 + 4.99627365e+00 4.98942556e+00 4.98258686e+00 4.97575753e+00 4.96893756e+00 + 4.96212693e+00 4.95532565e+00 4.94853368e+00 4.94175103e+00 4.93497767e+00 + 4.92821359e+00 4.92145879e+00 4.91471324e+00 4.90797694e+00 4.90124987e+00 + 4.89453203e+00 4.88782339e+00 4.88112394e+00 4.87443368e+00 4.86775259e+00 + 4.86108066e+00 4.85441787e+00 4.84776421e+00 4.84111967e+00 4.83448424e+00 + 4.82785791e+00 4.82124066e+00 4.81463247e+00 4.80803335e+00 4.80144327e+00 + 4.79486222e+00 4.78829019e+00 4.78172717e+00 4.77517315e+00 4.76862811e+00 + 4.76209204e+00 4.75556492e+00 4.74904676e+00 4.74253753e+00 4.73603722e+00 + 4.72954582e+00 4.72306332e+00 4.71658970e+00 4.71012495e+00 4.70366907e+00 + 4.69722204e+00 4.69078384e+00 4.68435446e+00 4.67793390e+00 4.67152214e+00 + 4.66511917e+00 4.65872497e+00 4.65233954e+00 4.64596286e+00 4.63959492e+00 + 4.63323571e+00 4.62688521e+00 4.62054342e+00 4.61421032e+00 4.60788590e+00 + 4.60157015e+00 4.59526306e+00 4.58896461e+00 4.58267479e+00 4.57639360e+00 + 4.57012101e+00 4.56385702e+00 4.55760162e+00 4.55135479e+00 4.54511652e+00 + 4.53888681e+00 4.53266563e+00 4.52645298e+00 4.52024884e+00 4.51405321e+00 + 4.50786607e+00 4.50168741e+00 4.49551722e+00 4.48935549e+00 4.48320220e+00 + 4.47705735e+00 4.47092091e+00 4.46479289e+00 4.45867327e+00 4.45256204e+00 + 4.44645918e+00 4.44036469e+00 4.43427855e+00 4.42820075e+00 4.42213128e+00 + 4.41607014e+00 4.41001730e+00 4.40397275e+00 4.39793649e+00 4.39190851e+00 + 4.38588878e+00 4.37987731e+00 4.37387408e+00 4.36787907e+00 4.36189229e+00 + 4.35591370e+00 4.34994332e+00 4.34398111e+00 4.33802708e+00 4.33208121e+00 + 4.32614349e+00 4.32021390e+00 4.31429245e+00 4.30837911e+00 4.30247387e+00 + 4.29657673e+00 4.29068768e+00 4.28480669e+00 4.27893376e+00 4.27306889e+00 + 4.26721205e+00 4.26136324e+00 4.25552245e+00 4.24968966e+00 4.24386487e+00 + 4.23804806e+00 4.23223922e+00 4.22643835e+00 4.22064543e+00 4.21486044e+00 + 4.20908339e+00 4.20331425e+00 4.19755302e+00 4.19179969e+00 4.18605425e+00 + 4.18031667e+00 4.17458697e+00 4.16886511e+00 4.16315110e+00 4.15744492e+00 + 4.15174656e+00 4.14605602e+00 4.14037327e+00 4.13469831e+00 4.12903113e+00 + 4.12337171e+00 4.11772006e+00 4.11207615e+00 4.10643997e+00 4.10081153e+00 + 4.09519079e+00 4.08957776e+00 4.08397242e+00 4.07837477e+00 4.07278479e+00 + 4.06720247e+00 4.06162780e+00 4.05606077e+00 4.05050137e+00 4.04494960e+00 + 4.03940543e+00 4.03386886e+00 4.02833988e+00 4.02281848e+00 4.01730465e+00 + 4.01179837e+00 4.00629964e+00 4.00080845e+00 3.99532478e+00 3.98984863e+00 + 3.98437999e+00 3.97891884e+00 3.97346517e+00 3.96801899e+00 3.96258026e+00 + 3.95714899e+00 3.95172517e+00 3.94630878e+00 3.94089981e+00 3.93549826e+00 + 3.93010411e+00 3.92471735e+00 3.91933798e+00 3.91396598e+00 3.90860134e+00 + 3.90324406e+00 3.89789412e+00 3.89255151e+00 3.88721623e+00 3.88188825e+00 + 3.87656759e+00 3.87125421e+00 3.86594811e+00 3.86064929e+00 3.85535773e+00 + 3.85007343e+00 3.84479637e+00 3.83952654e+00 3.83426393e+00 3.82900854e+00 + 3.82376035e+00 3.81851935e+00 3.81328554e+00 3.80805890e+00 3.80283942e+00 + 3.79762710e+00 3.79242192e+00 3.78722388e+00 3.78203296e+00 3.77684915e+00 + 3.77167245e+00 3.76650285e+00 3.76134033e+00 3.75618489e+00 3.75103652e+00 + 3.74589520e+00 3.74076093e+00 3.73563369e+00 3.73051348e+00 3.72540029e+00 + 3.72029411e+00 3.71519493e+00 3.71010274e+00 3.70501753e+00 3.69993928e+00 + 3.69486800e+00 3.68980367e+00 3.68474628e+00 3.67969582e+00 3.67465228e+00 + 3.66961566e+00 3.66458594e+00 3.65956311e+00 3.65454717e+00 3.64953810e+00 + 3.64453590e+00 3.63954056e+00 3.63455206e+00 3.62957040e+00 3.62459556e+00 + 3.61962755e+00 3.61466635e+00 3.60971194e+00 3.60476433e+00 3.59982349e+00 + 3.59488943e+00 3.58996214e+00 3.58504159e+00 3.58012779e+00 3.57522073e+00 + 3.57032039e+00 3.56542677e+00 3.56053985e+00 3.55565964e+00 3.55078611e+00 + 3.54591926e+00 3.54105908e+00 3.53620557e+00 3.53135871e+00 3.52651849e+00 + 3.52168490e+00 3.51685794e+00 3.51203759e+00 3.50722386e+00 3.50241672e+00 + 3.49761617e+00 3.49282220e+00 3.48803480e+00 3.48325396e+00 3.47847967e+00 + 3.47371193e+00 3.46895072e+00 3.46419604e+00 3.45944788e+00 3.45470622e+00 + 3.44997107e+00 3.44524240e+00 3.44052021e+00 3.43580450e+00 3.43109525e+00 + 3.42639246e+00 3.42169611e+00 3.41700620e+00 3.41232271e+00 3.40764565e+00 + 3.40297499e+00 3.39831074e+00 3.39365288e+00 3.38900141e+00 3.38435631e+00 + 3.37971758e+00 3.37508520e+00 3.37045918e+00 3.36583949e+00 3.36122614e+00 + 3.35661911e+00 3.35201840e+00 3.34742399e+00 3.34283587e+00 3.33825405e+00 + 3.33367851e+00 3.32910924e+00 3.32454623e+00 3.31998947e+00 3.31543897e+00 + 3.31089469e+00 3.30635665e+00 3.30182483e+00 3.29729922e+00 3.29277981e+00 + 3.28826659e+00 3.28375956e+00 3.27925871e+00 3.27476403e+00 3.27027551e+00 + 3.26579314e+00 3.26131692e+00 3.25684683e+00 3.25238286e+00 3.24792502e+00 + 3.24347329e+00 3.23902765e+00 3.23458811e+00 3.23015466e+00 3.22572728e+00 + 3.22130597e+00 3.21689072e+00 3.21248153e+00 3.20807837e+00 3.20368125e+00 + 3.19929016e+00 3.19490509e+00 3.19052602e+00 3.18615296e+00 3.18178590e+00 + 3.17742481e+00 3.17306971e+00 3.16872058e+00 3.16437740e+00 3.16004018e+00 + 3.15570891e+00 3.15138357e+00 3.14706416e+00 3.14275066e+00 3.13844309e+00 + 3.13414141e+00 3.12984563e+00 3.12555574e+00 3.12127173e+00 3.11699360e+00 + 3.11272132e+00 3.10845490e+00 3.10419433e+00 3.09993960e+00 3.09569070e+00 + 3.09144762e+00 3.08721036e+00 3.08297891e+00 3.07875326e+00 3.07453340e+00 + 3.07031932e+00 3.06611102e+00 3.06190849e+00 3.05771171e+00 3.05352069e+00 + 3.04933542e+00 3.04515588e+00 3.04098207e+00 3.03681398e+00 3.03265160e+00 + 3.02849493e+00 3.02434395e+00 3.02019867e+00 3.01605906e+00 3.01192513e+00 + 3.00779687e+00 3.00367426e+00 2.99955731e+00 2.99544600e+00 2.99134032e+00 + 2.98724027e+00 2.98314584e+00 2.97905702e+00 2.97497381e+00 2.97089619e+00 + 2.96682417e+00 2.96275772e+00 2.95869685e+00 2.95464154e+00 2.95059179e+00 + 2.94654759e+00 2.94250894e+00 2.93847582e+00 2.93444823e+00 2.93042616e+00 + 2.92640960e+00 2.92239855e+00 2.91839299e+00 2.91439293e+00 2.91039835e+00 + 2.90640924e+00 2.90242560e+00 2.89844742e+00 2.89447469e+00 2.89050741e+00 + 2.88654557e+00 2.88258916e+00 2.87863817e+00 2.87469259e+00 2.87075242e+00 + 2.86681766e+00 2.86288828e+00 2.85896429e+00 2.85504569e+00 2.85113245e+00 + 2.84722457e+00 2.84332205e+00 2.83942488e+00 2.83553306e+00 2.83164656e+00 + 2.82776540e+00 2.82388955e+00 2.82001901e+00 2.81615378e+00 2.81229385e+00 + 2.80843921e+00 2.80458985e+00 2.80074577e+00 2.79690696e+00 2.79307341e+00 + 2.78924511e+00 2.78542206e+00 2.78160425e+00 2.77779168e+00 2.77398432e+00 + 2.77018219e+00 2.76638527e+00 2.76259355e+00 2.75880703e+00 2.75502570e+00 + 2.75124956e+00 2.74747859e+00 2.74371278e+00 2.73995214e+00 2.73619666e+00 + 2.73244632e+00 2.72870112e+00 2.72496105e+00 2.72122611e+00 2.71749629e+00 + 2.71377158e+00 2.71005198e+00 2.70633748e+00 2.70262806e+00 2.69892374e+00 + 2.69522448e+00 2.69153030e+00 2.68784118e+00 2.68415712e+00 2.68047811e+00 + 2.67680414e+00 2.67313521e+00 2.66947130e+00 2.66581242e+00 2.66215855e+00 + 2.65850969e+00 2.65486584e+00 2.65122697e+00 2.64759309e+00 2.64396420e+00 + 2.64034028e+00 2.63672132e+00 2.63310733e+00 2.62949829e+00 2.62589419e+00 + 2.62229504e+00 2.61870082e+00 2.61511152e+00 2.61152715e+00 2.60794768e+00 + 2.60437313e+00 2.60080347e+00 2.59723871e+00 2.59367883e+00 2.59012383e+00 + 2.58657371e+00 2.58302845e+00 2.57948804e+00 2.57595250e+00 2.57242179e+00 + 2.56889593e+00 2.56537490e+00 2.56185870e+00 2.55834731e+00 2.55484074e+00 + 2.55133897e+00 2.54784201e+00 2.54434983e+00 2.54086245e+00 2.53737984e+00 + 2.53390201e+00 2.53042894e+00 2.52696064e+00 2.52349708e+00 2.52003828e+00 + 2.51658422e+00 2.51313489e+00 2.50969028e+00 2.50625040e+00 2.50281524e+00 + 2.49938478e+00 2.49595902e+00 2.49253796e+00 2.48912159e+00 2.48570990e+00 + 2.48230289e+00 2.47890055e+00 2.47550287e+00 2.47210985e+00 2.46872148e+00 + 2.46533775e+00 2.46195866e+00 2.45858420e+00 2.45521437e+00 2.45184916e+00 + 2.44848856e+00 2.44513256e+00 2.44178116e+00 2.43843436e+00 2.43509215e+00 + 2.43175451e+00 2.42842146e+00 2.42509297e+00 2.42176904e+00 2.41844967e+00 + 2.41513484e+00 2.41182456e+00 2.40851882e+00 2.40521761e+00 2.40192092e+00 + 2.39862876e+00 2.39534110e+00 2.39205795e+00 2.38877930e+00 2.38550515e+00 + 2.38223548e+00 2.37897029e+00 2.37570958e+00 2.37245334e+00 2.36920156e+00 + 2.36595424e+00 2.36271137e+00 2.35947295e+00 2.35623896e+00 2.35300940e+00 + 2.34978428e+00 2.34656357e+00 2.34334728e+00 2.34013539e+00 2.33692791e+00 + 2.33372482e+00 2.33052613e+00 2.32733182e+00 2.32414188e+00 2.32095632e+00 + 2.31777513e+00 2.31459830e+00 2.31142582e+00 2.30825768e+00 2.30509389e+00 + 2.30193444e+00 2.29877932e+00 2.29562852e+00 2.29248204e+00 2.28933988e+00 + 2.28620202e+00 2.28306846e+00 2.27993919e+00 2.27681422e+00 2.27369353e+00 + 2.27057711e+00 2.26746497e+00 2.26435709e+00 2.26125348e+00 2.25815411e+00 + 2.25505900e+00 2.25196812e+00 2.24888149e+00 2.24579908e+00 2.24272090e+00 + 2.23964694e+00 2.23657719e+00 2.23351165e+00 2.23045031e+00 2.22739317e+00 + 2.22434021e+00 2.22129145e+00 2.21824686e+00 2.21520644e+00 2.21217019e+00 + 2.20913810e+00 2.20611017e+00 2.20308639e+00 2.20006675e+00 2.19705125e+00 + 2.19403989e+00 2.19103265e+00 2.18802953e+00 2.18503053e+00 2.18203564e+00 + 2.17904486e+00 2.17605817e+00 2.17307558e+00 2.17009708e+00 2.16712266e+00 + 2.16415232e+00 2.16118604e+00 2.15822384e+00 2.15526569e+00 2.15231160e+00 + 2.14936155e+00 2.14641555e+00 2.14347359e+00 2.14053566e+00 2.13760176e+00 + 2.13467188e+00 2.13174601e+00 2.12882416e+00 2.12590631e+00 2.12299245e+00 + 2.12008260e+00 2.11717673e+00 2.11427484e+00 2.11137693e+00 2.10848300e+00 + 2.10559303e+00 2.10270702e+00 2.09982496e+00 2.09694686e+00 2.09407270e+00 + 2.09120248e+00 2.08833620e+00 2.08547384e+00 2.08261541e+00 2.07976090e+00 + 2.07691029e+00 2.07406360e+00 2.07122080e+00 2.06838191e+00 2.06554690e+00 + 2.06271578e+00 2.05988854e+00 2.05706518e+00 2.05424568e+00 2.05143005e+00 + 2.04861828e+00 2.04581036e+00 2.04300629e+00 2.04020607e+00 2.03740968e+00 + 2.03461713e+00 2.03182840e+00 2.02904350e+00 2.02626241e+00 2.02348513e+00 + 2.02071167e+00 2.01794200e+00 2.01517613e+00 2.01241405e+00 2.00965575e+00 + 2.00690124e+00 2.00415050e+00 2.00140353e+00 1.99866033e+00 1.99592089e+00 + 1.99318520e+00 1.99045326e+00 1.98772507e+00 1.98500061e+00 1.98227989e+00 + 1.97956290e+00 1.97684963e+00 1.97414009e+00 1.97143425e+00 1.96873213e+00 + 1.96603370e+00 1.96333898e+00 1.96064795e+00 1.95796061e+00 1.95527695e+00 + 1.95259697e+00 1.94992066e+00 1.94724803e+00 1.94457905e+00 1.94191373e+00 + 1.93925207e+00 1.93659405e+00 1.93393968e+00 1.93128895e+00 1.92864185e+00 + 1.92599837e+00 1.92335853e+00 1.92072229e+00 1.91808968e+00 1.91546067e+00 + 1.91283526e+00 1.91021345e+00 1.90759524e+00 1.90498061e+00 1.90236957e+00 + 1.89976211e+00 1.89715822e+00 1.89455790e+00 1.89196114e+00 1.88936795e+00 + 1.88677830e+00 1.88419221e+00 1.88160966e+00 1.87903066e+00 1.87645518e+00 + 1.87388324e+00 1.87131482e+00 1.86874992e+00 1.86618854e+00 1.86363067e+00 + 1.86107630e+00 1.85852544e+00 1.85597807e+00 1.85343419e+00 1.85089380e+00 + 1.84835689e+00 1.84582346e+00 1.84329350e+00 1.84076701e+00 1.83824398e+00 + 1.83572441e+00 1.83320830e+00 1.83069563e+00 1.82818641e+00 1.82568062e+00 + 1.82317827e+00 1.82067935e+00 1.81818386e+00 1.81569178e+00 1.81320312e+00 + 1.81071788e+00 1.80823603e+00 1.80575759e+00 1.80328255e+00 1.80081090e+00 + 1.79834264e+00 1.79587776e+00 1.79341626e+00 1.79095813e+00 1.78850337e+00 + 1.78605198e+00 1.78360395e+00 1.78115927e+00 1.77871794e+00 1.77627996e+00 + 1.77384532e+00 1.77141402e+00 1.76898605e+00 1.76656141e+00 1.76414009e+00 + 1.76172209e+00 1.75930740e+00 1.75689602e+00 1.75448795e+00 1.75208318e+00 + 1.74968171e+00 1.74728353e+00 1.74488863e+00 1.74249702e+00 1.74010868e+00 + 1.73772362e+00 1.73534183e+00 1.73296330e+00 1.73058803e+00 1.72821602e+00 + 1.72584726e+00 1.72348174e+00 1.72111947e+00 1.71876044e+00 1.71640463e+00 + 1.71405206e+00 1.71170272e+00 1.70935659e+00 1.70701368e+00 1.70467398e+00 + 1.70233748e+00 1.70000419e+00 1.69767410e+00 1.69534720e+00 1.69302349e+00 + 1.69070296e+00 1.68838562e+00 1.68607145e+00 1.68376046e+00 1.68145263e+00 + 1.67914796e+00 1.67684646e+00 1.67454810e+00 1.67225290e+00 1.66996085e+00 + 1.66767193e+00 1.66538615e+00 1.66310351e+00 1.66082399e+00 1.65854760e+00 + 1.65627433e+00 1.65400418e+00 1.65173713e+00 1.64947320e+00 1.64721236e+00 + 1.64495463e+00 1.64269999e+00 1.64044844e+00 1.63819998e+00 1.63595460e+00 + 1.63371229e+00 1.63147306e+00 1.62923690e+00 1.62700380e+00 1.62477377e+00 + 1.62254679e+00 1.62032286e+00 1.61810198e+00 1.61588415e+00 1.61366935e+00 + 1.61145759e+00 1.60924887e+00 1.60704317e+00 1.60484049e+00 1.60264083e+00 + 1.60044419e+00 1.59825056e+00 1.59605993e+00 1.59387231e+00 1.59168769e+00 + 1.58950606e+00 1.58732742e+00 1.58515176e+00 1.58297909e+00 1.58080940e+00 + 1.57864268e+00 1.57647893e+00 1.57431814e+00 1.57216032e+00 1.57000545e+00 + 1.56785354e+00 1.56570458e+00 1.56355856e+00 1.56141549e+00 1.55927535e+00 + 1.55713815e+00 1.55500387e+00 1.55287252e+00 1.55074409e+00 1.54861858e+00 + 1.54649598e+00 1.54437630e+00 1.54225951e+00 1.54014563e+00 1.53803465e+00 + 1.53592656e+00 1.53382135e+00 1.53171904e+00 1.52961960e+00 1.52752305e+00 + 1.52542936e+00 1.52333855e+00 1.52125060e+00 1.51916551e+00 1.51708329e+00 + 1.51500391e+00 1.51292739e+00 1.51085371e+00 1.50878287e+00 1.50671488e+00 + 1.50464971e+00 1.50258738e+00 1.50052788e+00 1.49847119e+00 1.49641733e+00 + 1.49436628e+00 1.49231804e+00 1.49027261e+00 1.48822999e+00 1.48619016e+00 + 1.48415313e+00 1.48211889e+00 1.48008744e+00 1.47805877e+00 1.47603289e+00 + 1.47400978e+00 1.47198944e+00 1.46997187e+00 1.46795707e+00 1.46594503e+00 + 1.46393575e+00 1.46192922e+00 1.45992544e+00 1.45792441e+00 1.45592612e+00 + 1.45393057e+00 1.45193776e+00 1.44994768e+00 1.44796032e+00 1.44597569e+00 + 1.44399378e+00 1.44201458e+00 1.44003810e+00 1.43806433e+00 1.43609326e+00 + 1.43412489e+00 1.43215923e+00 1.43019625e+00 1.42823597e+00 1.42627837e+00 + 1.42432346e+00 1.42237122e+00 1.42042167e+00 1.41847478e+00 1.41653056e+00 + 1.41458901e+00 1.41265012e+00 1.41071388e+00 1.40878030e+00 1.40684937e+00 + 1.40492109e+00 1.40299545e+00 1.40107245e+00 1.39915208e+00 1.39723435e+00 + 1.39531925e+00 1.39340677e+00 1.39149691e+00 1.38958967e+00 1.38768504e+00 + 1.38578302e+00 1.38388362e+00 1.38198681e+00 1.38009260e+00 1.37820099e+00 + 1.37631198e+00 1.37442555e+00 1.37254171e+00 1.37066045e+00 1.36878177e+00 + 1.36690566e+00 1.36503213e+00 1.36316116e+00 1.36129276e+00 1.35942691e+00 + 1.35756363e+00 1.35570290e+00 1.35384472e+00 1.35198909e+00 1.35013600e+00 + 1.34828545e+00 1.34643743e+00 1.34459195e+00 1.34274900e+00 1.34090858e+00 + 1.33907068e+00 1.33723529e+00 1.33540242e+00 1.33357207e+00 1.33174422e+00 + 1.32991888e+00 1.32809604e+00 1.32627570e+00 1.32445786e+00 1.32264250e+00 + 1.32082964e+00 1.31901925e+00 1.31721135e+00 1.31540593e+00 1.31360298e+00 + 1.31180251e+00 1.31000450e+00 1.30820896e+00 1.30641587e+00 1.30462525e+00 + 1.30283708e+00 1.30105136e+00 1.29926808e+00 1.29748726e+00 1.29570887e+00 + 1.29393292e+00 1.29215940e+00 1.29038832e+00 1.28861966e+00 1.28685343e+00 + 1.28508962e+00 1.28332822e+00 1.28156924e+00 1.27981267e+00 1.27805851e+00 + 1.27630675e+00 1.27455740e+00 1.27281044e+00 1.27106587e+00 1.26932370e+00 + 1.26758392e+00 1.26584651e+00 1.26411150e+00 1.26237885e+00 1.26064859e+00 + 1.25892069e+00 1.25719517e+00 1.25547201e+00 1.25375121e+00 1.25203276e+00 + 1.25031668e+00 1.24860295e+00 1.24689156e+00 1.24518252e+00 1.24347583e+00 + 1.24177147e+00 1.24006945e+00 1.23836976e+00 1.23667240e+00 1.23497737e+00 + 1.23328466e+00 1.23159427e+00 1.22990620e+00 1.22822044e+00 1.22653699e+00 + 1.22485585e+00 1.22317702e+00 1.22150048e+00 1.21982625e+00 1.21815430e+00 + 1.21648465e+00 1.21481729e+00 1.21315222e+00 1.21148942e+00 1.20982891e+00 + 1.20817067e+00 1.20651470e+00 1.20486100e+00 1.20320957e+00 1.20156041e+00 + 1.19991350e+00 1.19826885e+00 1.19662646e+00 1.19498631e+00 1.19334842e+00 + 1.19171277e+00 1.19007936e+00 1.18844819e+00 1.18681926e+00 1.18519255e+00 + 1.18356808e+00 1.18194584e+00 1.18032582e+00 1.17870801e+00 1.17709243e+00 + 1.17547906e+00 1.17386790e+00 1.17225895e+00 1.17065221e+00 1.16904767e+00 + 1.16744532e+00 1.16584518e+00 1.16424722e+00 1.16265146e+00 1.16105788e+00 + 1.15946649e+00 1.15787728e+00 1.15629025e+00 1.15470539e+00 1.15312271e+00 + 1.15154219e+00 1.14996384e+00 1.14838766e+00 1.14681363e+00 1.14524176e+00 + 1.14367205e+00 1.14210449e+00 1.14053907e+00 1.13897581e+00 1.13741468e+00 + 1.13585569e+00 1.13429885e+00 1.13274413e+00 1.13119155e+00 1.12964109e+00 + 1.12809276e+00 1.12654655e+00 1.12500246e+00 1.12346049e+00 1.12192063e+00 + 1.12038288e+00 1.11884724e+00 1.11731370e+00 1.11578227e+00 1.11425294e+00 + 1.11272570e+00 1.11120055e+00 1.10967749e+00 1.10815653e+00 1.10663764e+00 + 1.10512084e+00 1.10360612e+00 1.10209347e+00 1.10058290e+00 1.09907440e+00 + 1.09756796e+00 1.09606359e+00 1.09456129e+00 1.09306104e+00 1.09156284e+00 + 1.09006670e+00 1.08857262e+00 1.08708058e+00 1.08559058e+00 1.08410263e+00 + 1.08261671e+00 1.08113284e+00 1.07965099e+00 1.07817118e+00 1.07669340e+00 + 1.07521764e+00 1.07374390e+00 1.07227218e+00 1.07080249e+00 1.06933480e+00 + 1.06786913e+00 1.06640547e+00 1.06494381e+00 1.06348415e+00 1.06202650e+00 + 1.06057084e+00 1.05911718e+00 1.05766552e+00 1.05621584e+00 1.05476815e+00 + 1.05332244e+00 1.05187871e+00 1.05043697e+00 1.04899720e+00 1.04755940e+00 + 1.04612357e+00 1.04468971e+00 1.04325782e+00 1.04182789e+00 1.04039992e+00 + 1.03897391e+00 1.03754985e+00 1.03612774e+00 1.03470758e+00 1.03328937e+00 + 1.03187310e+00 1.03045878e+00 1.02904639e+00 1.02763594e+00 1.02622742e+00 + 1.02482083e+00 1.02341617e+00 1.02201344e+00 1.02061262e+00 1.01921373e+00 + 1.01781676e+00 1.01642170e+00 1.01502855e+00 1.01363731e+00 1.01224798e+00 + 1.01086055e+00 1.00947502e+00 1.00809140e+00 1.00670967e+00 1.00532983e+00 + 1.00395188e+00 1.00257583e+00 1.00120166e+00 9.99829370e-01 9.98458963e-01 + 9.97090435e-01 9.95723783e-01 9.94359004e-01 9.92996095e-01 9.91635054e-01 + 9.90275879e-01 9.88918567e-01 9.87563115e-01 9.86209521e-01 9.84857782e-01 + 9.83507896e-01 9.82159860e-01 9.80813671e-01 9.79469328e-01 9.78126827e-01 + 9.76786166e-01 9.75447343e-01 9.74110354e-01 9.72775198e-01 9.71441872e-01 + 9.70110374e-01 9.68780700e-01 9.67452849e-01 9.66126818e-01 9.64802604e-01 + 9.63480205e-01 9.62159618e-01 9.60840841e-01 9.59523872e-01 9.58208708e-01 + 9.56895346e-01 9.55583784e-01 9.54274020e-01 9.52966051e-01 9.51659874e-01 + 9.50355488e-01 9.49052889e-01 9.47752076e-01 9.46453045e-01 9.45155794e-01 + 9.43860322e-01 9.42566624e-01 9.41274700e-01 9.39984546e-01 9.38696161e-01 + 9.37409540e-01 9.36124684e-01 9.34841588e-01 9.33560250e-01 9.32280668e-01 + 9.31002840e-01 9.29726763e-01 9.28452435e-01 9.27179852e-01 9.25909014e-01 + 9.24639917e-01 9.23372560e-01 9.22106939e-01 9.20843052e-01 9.19580897e-01 + 9.18320471e-01 9.17061773e-01 9.15804799e-01 9.14549547e-01 9.13296016e-01 + 9.12044202e-01 9.10794103e-01 9.09545716e-01 9.08299041e-01 9.07054073e-01 + 9.05810811e-01 9.04569252e-01 9.03329394e-01 9.02091234e-01 9.00854771e-01 + 8.99620001e-01 8.98386923e-01 8.97155534e-01 8.95925831e-01 8.94697813e-01 + 8.93471477e-01 8.92246821e-01 8.91023842e-01 8.89802537e-01 8.88582905e-01 + 8.87364944e-01 8.86148650e-01 8.84934022e-01 8.83721057e-01 8.82509753e-01 + 8.81300107e-01 8.80092117e-01 8.78885781e-01 8.77681097e-01 8.76478061e-01 + 8.75276672e-01 8.74076928e-01 8.72878825e-01 8.71682362e-01 8.70487536e-01 + 8.69294345e-01 8.68102787e-01 8.66912859e-01 8.65724558e-01 8.64537884e-01 + 8.63352832e-01 8.62169400e-01 8.60987588e-01 8.59807391e-01 8.58628807e-01 + 8.57451835e-01 8.56276472e-01 8.55102714e-01 8.53930561e-01 8.52760010e-01 + 8.51591058e-01 8.50423702e-01 8.49257941e-01 8.48093771e-01 8.46931191e-01 + 8.45770199e-01 8.44610790e-01 8.43452964e-01 8.42296717e-01 8.41142048e-01 + 8.39988953e-01 8.38837431e-01 8.37687478e-01 8.36539092e-01 8.35392271e-01 + 8.34247012e-01 8.33103313e-01 8.31961170e-01 8.30820582e-01 8.29681546e-01 + 8.28544059e-01 8.27408118e-01 8.26273721e-01 8.25140866e-01 8.24009549e-01 + 8.22879768e-01 8.21751519e-01 8.20624802e-01 8.19499611e-01 8.18375946e-01 + 8.17253803e-01 8.16133178e-01 8.15014070e-01 8.13896475e-01 8.12780391e-01 + 8.11665814e-01 8.10552741e-01 8.09441170e-01 8.08331097e-01 8.07222519e-01 + 8.06115433e-01 8.05009836e-01 8.03905725e-01 8.02803096e-01 8.01701946e-01 + 8.00602272e-01 7.99504070e-01 7.98407337e-01 7.97312069e-01 7.96218263e-01 + 7.95125915e-01 7.94035021e-01 7.92945578e-01 7.91857581e-01 7.90771028e-01 + 7.89685913e-01 7.88602232e-01 7.87519983e-01 7.86439160e-01 7.85359759e-01 + 7.84281776e-01 7.83205206e-01 7.82130045e-01 7.81056287e-01 7.79983929e-01 + 7.78912966e-01 7.77843391e-01 7.76775201e-01 7.75708390e-01 7.74642952e-01 + 7.73578882e-01 7.72516175e-01 7.71454824e-01 7.70394824e-01 7.69336169e-01 + 7.68278852e-01 7.67222866e-01 7.66168206e-01 7.65114865e-01 7.64062835e-01 + 7.63012109e-01 7.61962680e-01 7.60914541e-01 7.59867683e-01 7.58822098e-01 + 7.57777779e-01 7.56734717e-01 7.55692902e-01 7.54652326e-01 7.53612980e-01 + 7.52574853e-01 7.51537937e-01 7.50502220e-01 7.49467692e-01 7.48434342e-01 + 7.47402159e-01 7.46371131e-01 7.45341247e-01 7.44312493e-01 7.43284857e-01 + 7.42258326e-01 7.41232886e-01 7.40208523e-01 7.39185222e-01 7.38162968e-01 + 7.37141745e-01 7.36121538e-01 7.35102329e-01 7.34084101e-01 7.33066837e-01 + 7.32050516e-01 7.31035122e-01 7.30020632e-01 7.29007028e-01 7.27994287e-01 + 7.26982387e-01 7.25971306e-01 7.24961020e-01 7.23951505e-01 7.22942734e-01 + 7.21934682e-01 7.20927321e-01 7.19920623e-01 7.18914559e-01 7.17909098e-01 + 7.16904209e-01 7.15899860e-01 7.14896016e-01 7.13892643e-01 7.12889703e-01 + 7.11887161e-01 7.10884976e-01 7.09883108e-01 7.08881516e-01 7.07880155e-01 + 7.06878980e-01 7.05877946e-01 7.04877003e-01 7.03876101e-01 7.02875188e-01 + 7.01874211e-01 7.00873112e-01 6.99871834e-01 6.98870317e-01 6.97868499e-01 + 6.96866313e-01 6.95863694e-01 6.94860571e-01 6.93856872e-01 6.92852523e-01 + 6.91847445e-01 6.90841558e-01 6.89834779e-01 6.88827020e-01 6.87818192e-01 + 6.86808201e-01 6.85796952e-01 6.84784343e-01 6.83770270e-01 6.82754627e-01 + 6.81737300e-01 6.80718175e-01 6.79697130e-01 6.78674042e-01 6.77648780e-01 + 6.76621212e-01 6.75591198e-01 6.74558594e-01 6.73523250e-01 6.72485013e-01 + 6.71443720e-01 6.70399207e-01 6.69351300e-01 6.68299821e-01 6.67244585e-01 + 6.66185399e-01 6.65122064e-01 6.64054373e-01 6.62982114e-01 6.61905065e-01 + 6.60822995e-01 6.59735668e-01 6.58642836e-01 6.57544244e-01 6.56439627e-01 + 6.55328713e-01 6.54211215e-01 6.53086841e-01 6.51955286e-01 6.50816235e-01 + 6.49669360e-01 6.48514324e-01 6.47350776e-01 6.46178354e-01 6.44996683e-01 + 6.43805374e-01 6.42604025e-01 6.41392220e-01 6.40169528e-01 6.38935504e-01 + 6.37689687e-01 6.36431601e-01 6.35160751e-01 6.33876629e-01 6.32578706e-01 + 6.31266438e-01 6.29939261e-01 6.28596592e-01 6.27237829e-01 6.25862351e-01 + 6.24469514e-01 6.23058654e-01 6.21629085e-01 6.20180101e-01 6.18710969e-01 + 6.17220935e-01 6.15709221e-01 6.14175024e-01 6.12617513e-01 6.11035836e-01 + 6.09429111e-01 6.07796429e-01 6.06136855e-01 6.04449424e-01 6.02733144e-01 + 6.00986991e-01 5.99209913e-01 5.97400828e-01 5.95558621e-01 5.93682146e-01 + 5.91770226e-01 5.89821652e-01 5.87835180e-01 5.85809535e-01 5.83743407e-01 + 5.81635454e-01 5.79484299e-01 5.77288531e-01 5.75046705e-01 5.72757343e-01 + 5.70418930e-01 5.68029921e-01 5.65588735e-01 5.63093758e-01 5.60543345e-01 + 5.57935816e-01 5.55269463e-01 5.52542545e-01 5.49753293e-01 5.46899910e-01 + 5.43980570e-01 5.40993427e-01 5.37936605e-01 5.34808213e-01 5.31606337e-01 + 5.28329048e-01 5.24974404e-01 5.21540450e-01 5.18025227e-01 5.14426771e-01 + 5.10743118e-01 5.06972310e-01 5.03112399e-01 4.99161450e-01 4.95117550e-01 + 4.90978812e-01 4.86743382e-01 4.82409446e-01 4.77975236e-01 4.73439039e-01 + 4.68799206e-01 4.64054160e-01 4.59202405e-01 4.54242535e-01 4.49173247e-01 + 4.43993352e-01 4.38701781e-01 4.33297606e-01 4.27780043e-01 4.22148472e-01 + 4.16402449e-01 4.10541717e-01 4.04566224e-01 3.98476134e-01 3.92271848e-01 + 3.85954012e-01 3.79523540e-01 3.72981624e-01 3.66329751e-01 3.59569723e-01 + 3.52703668e-01 3.45734056e-01 3.38663718e-01 3.31495853e-01 3.24234051e-01 + 3.16882299e-01 3.09444996e-01 3.01926963e-01 2.94333453e-01 2.86670156e-01 + 2.78943210e-01 2.71159201e-01 2.63325162e-01 2.55448579e-01 2.47537380e-01 + 2.39599931e-01 2.31645027e-01 2.23681875e-01 2.15720077e-01 2.07769608e-01 + 1.99840793e-01 1.91944274e-01 1.84090973e-01 1.76292060e-01 1.68558901e-01 + 1.60903017e-01 1.53336024e-01 1.45869584e-01 1.38515337e-01 1.31284838e-01 + 1.24189492e-01 1.17240477e-01 1.10448676e-01 1.03824595e-01 9.73782939e-02 + 9.11193025e-02 8.50565488e-02 7.91982826e-02 7.35520037e-02 6.81243941e-02 + 6.29212538e-02 5.79474436e-02 5.32068346e-02 4.87022656e-02 4.44355099e-02 + 4.04072521e-02 3.66170759e-02 3.30634633e-02 2.97438060e-02 2.66544291e-02 + 2.37906280e-02 2.11467162e-02 1.87160870e-02 1.64912847e-02 1.44640875e-02 + 1.26255995e-02 1.09663495e-02 9.47639731e-03 8.14544397e-03 6.96294412e-03 + 5.91821927e-03 5.00056914e-03 4.19937944e-03 3.50422377e-03 2.90495820e-03 + 2.39180651e-03 1.95543501e-03 1.58701559e-03 1.27827650e-03 1.02154025e-03 + 8.09748707e-04 6.36475675e-04 4.95927573e-04 3.82933206e-04 2.92923820e-04 + 2.21904822e-04 1.66420727e-04 1.23514936e-04 9.06859386e-05 6.58415198e-05 + 4.72523917e-05 3.35065418e-05 2.34653835e-05 1.62225835e-05 1.10662166e-05 + 7.44467847e-06 4.93658073e-06 3.22467124e-06 2.07366607e-06 1.31176054e-06 + 8.15498138e-07 4.97621665e-07 2.97504885e-07 1.73762522e-07 9.86548547e-08 + 5.39360246e-08 2.78365328e-08 1.29159488e-08 4.56757882e-09 0.00000000e+00 + 2.00759391e+01 2.00759391e+01 2.00759391e+01 2.00759391e+01 2.00759391e+01 + 2.00759391e+01 2.00759391e+01 2.00759391e+01 2.00759391e+01 2.00759391e+01 + 2.00759391e+01 2.00759391e+01 2.00759391e+01 2.00759391e+01 2.00759391e+01 + 2.00759391e+01 2.00759391e+01 2.00759391e+01 2.00759391e+01 2.00759391e+01 + 2.00759391e+01 2.00759391e+01 2.00759391e+01 2.00759391e+01 2.00759391e+01 + 2.00759391e+01 2.00759391e+01 2.00759391e+01 2.00759391e+01 2.00759391e+01 + 2.00759391e+01 2.00759391e+01 2.00759391e+01 2.00759391e+01 2.00759391e+01 + 2.00759391e+01 2.00759391e+01 2.00759391e+01 2.00759391e+01 2.00759391e+01 + 2.00759391e+01 2.00759391e+01 2.00759391e+01 2.00759391e+01 2.00759391e+01 + 2.00759391e+01 2.00759391e+01 2.00759391e+01 2.00759391e+01 2.00759391e+01 + 2.00440764e+01 2.00010572e+01 1.99581303e+01 1.99152956e+01 1.98725528e+01 + 1.98299017e+01 1.97873421e+01 1.97448739e+01 1.97024969e+01 1.96602108e+01 + 1.96180154e+01 1.95759107e+01 1.95338962e+01 1.94919720e+01 1.94501377e+01 + 1.94083933e+01 1.93667384e+01 1.93251729e+01 1.92836966e+01 1.92423094e+01 + 1.92010109e+01 1.91598011e+01 1.91186798e+01 1.90776467e+01 1.90367017e+01 + 1.89958445e+01 1.89550750e+01 1.89143931e+01 1.88737984e+01 1.88332909e+01 + 1.87928703e+01 1.87525365e+01 1.87122892e+01 1.86721283e+01 1.86320537e+01 + 1.85920650e+01 1.85521621e+01 1.85123449e+01 1.84726131e+01 1.84329667e+01 + 1.83934053e+01 1.83539288e+01 1.83145370e+01 1.82752298e+01 1.82360069e+01 + 1.81968683e+01 1.81578136e+01 1.81188427e+01 1.80799555e+01 1.80411518e+01 + 1.80024313e+01 1.79637939e+01 1.79252395e+01 1.78867678e+01 1.78483787e+01 + 1.78100719e+01 1.77718474e+01 1.77337049e+01 1.76956443e+01 1.76576654e+01 + 1.76197680e+01 1.75819519e+01 1.75442170e+01 1.75065630e+01 1.74689899e+01 + 1.74314974e+01 1.73940854e+01 1.73567537e+01 1.73195021e+01 1.72823305e+01 + 1.72452386e+01 1.72082263e+01 1.71712935e+01 1.71344400e+01 1.70976655e+01 + 1.70609700e+01 1.70243532e+01 1.69878150e+01 1.69513552e+01 1.69149737e+01 + 1.68786703e+01 1.68424448e+01 1.68062970e+01 1.67702268e+01 1.67342341e+01 + 1.66983185e+01 1.66624801e+01 1.66267186e+01 1.65910338e+01 1.65554256e+01 + 1.65198939e+01 1.64844384e+01 1.64490590e+01 1.64137555e+01 1.63785278e+01 + 1.63433757e+01 1.63082990e+01 1.62732977e+01 1.62383714e+01 1.62035201e+01 + 1.61687436e+01 1.61340418e+01 1.60994144e+01 1.60648614e+01 1.60303825e+01 + 1.59959776e+01 1.59616465e+01 1.59273891e+01 1.58932053e+01 1.58590948e+01 + 1.58250575e+01 1.57910933e+01 1.57572020e+01 1.57233834e+01 1.56896374e+01 + 1.56559638e+01 1.56223625e+01 1.55888333e+01 1.55553761e+01 1.55219907e+01 + 1.54886769e+01 1.54554346e+01 1.54222637e+01 1.53891640e+01 1.53561353e+01 + 1.53231775e+01 1.52902904e+01 1.52574739e+01 1.52247279e+01 1.51920521e+01 + 1.51594464e+01 1.51269108e+01 1.50944449e+01 1.50620488e+01 1.50297221e+01 + 1.49974649e+01 1.49652769e+01 1.49331579e+01 1.49011079e+01 1.48691267e+01 + 1.48372142e+01 1.48053701e+01 1.47735943e+01 1.47418868e+01 1.47102473e+01 + 1.46786757e+01 1.46471719e+01 1.46157357e+01 1.45843670e+01 1.45530656e+01 + 1.45218313e+01 1.44906641e+01 1.44595638e+01 1.44285303e+01 1.43975633e+01 + 1.43666628e+01 1.43358286e+01 1.43050607e+01 1.42743587e+01 1.42437226e+01 + 1.42131523e+01 1.41826476e+01 1.41522084e+01 1.41218345e+01 1.40915258e+01 + 1.40612821e+01 1.40311034e+01 1.40009894e+01 1.39709400e+01 1.39409552e+01 + 1.39110347e+01 1.38811784e+01 1.38513862e+01 1.38216579e+01 1.37919934e+01 + 1.37623926e+01 1.37328554e+01 1.37033815e+01 1.36739709e+01 1.36446234e+01 + 1.36153389e+01 1.35861172e+01 1.35569583e+01 1.35278619e+01 1.34988280e+01 + 1.34698564e+01 1.34409470e+01 1.34120996e+01 1.33833142e+01 1.33545905e+01 + 1.33259285e+01 1.32973280e+01 1.32687888e+01 1.32403110e+01 1.32118942e+01 + 1.31835384e+01 1.31552435e+01 1.31270093e+01 1.30988357e+01 1.30707226e+01 + 1.30426698e+01 1.30146773e+01 1.29867448e+01 1.29588722e+01 1.29310595e+01 + 1.29033065e+01 1.28756130e+01 1.28479790e+01 1.28204042e+01 1.27928887e+01 + 1.27654322e+01 1.27380346e+01 1.27106959e+01 1.26834158e+01 1.26561943e+01 + 1.26290312e+01 1.26019263e+01 1.25748797e+01 1.25478911e+01 1.25209604e+01 + 1.24940876e+01 1.24672724e+01 1.24405147e+01 1.24138145e+01 1.23871716e+01 + 1.23605859e+01 1.23340572e+01 1.23075855e+01 1.22811706e+01 1.22548124e+01 + 1.22285107e+01 1.22022655e+01 1.21760766e+01 1.21499440e+01 1.21238674e+01 + 1.20978468e+01 1.20718820e+01 1.20459730e+01 1.20201195e+01 1.19943216e+01 + 1.19685790e+01 1.19428917e+01 1.19172595e+01 1.18916823e+01 1.18661600e+01 + 1.18406925e+01 1.18152796e+01 1.17899213e+01 1.17646174e+01 1.17393678e+01 + 1.17141725e+01 1.16890311e+01 1.16639438e+01 1.16389103e+01 1.16139305e+01 + 1.15890043e+01 1.15641316e+01 1.15393124e+01 1.15145463e+01 1.14898335e+01 + 1.14651736e+01 1.14405667e+01 1.14160126e+01 1.13915112e+01 1.13670624e+01 + 1.13426661e+01 1.13183221e+01 1.12940304e+01 1.12697908e+01 1.12456032e+01 + 1.12214676e+01 1.11973837e+01 1.11733515e+01 1.11493710e+01 1.11254418e+01 + 1.11015641e+01 1.10777376e+01 1.10539622e+01 1.10302378e+01 1.10065644e+01 + 1.09829418e+01 1.09593698e+01 1.09358485e+01 1.09123777e+01 1.08889572e+01 + 1.08655870e+01 1.08422669e+01 1.08189969e+01 1.07957769e+01 1.07726066e+01 + 1.07494861e+01 1.07264153e+01 1.07033939e+01 1.06804219e+01 1.06574993e+01 + 1.06346258e+01 1.06118015e+01 1.05890261e+01 1.05662996e+01 1.05436219e+01 + 1.05209929e+01 1.04984124e+01 1.04758804e+01 1.04533967e+01 1.04309613e+01 + 1.04085741e+01 1.03862349e+01 1.03639436e+01 1.03417002e+01 1.03195045e+01 + 1.02973565e+01 1.02752560e+01 1.02532029e+01 1.02311972e+01 1.02092387e+01 + 1.01873273e+01 1.01654630e+01 1.01436455e+01 1.01218749e+01 1.01001511e+01 + 1.00784738e+01 1.00568431e+01 1.00352588e+01 1.00137208e+01 9.99222904e+00 + 9.97078341e+00 9.94938381e+00 9.92803014e+00 9.90672230e+00 9.88546019e+00 + 9.86424372e+00 9.84307278e+00 9.82194727e+00 9.80086711e+00 9.77983219e+00 + 9.75884242e+00 9.73789769e+00 9.71699792e+00 9.69614300e+00 9.67533284e+00 + 9.65456735e+00 9.63384642e+00 9.61316997e+00 9.59253789e+00 9.57195009e+00 + 9.55140648e+00 9.53090696e+00 9.51045144e+00 9.49003981e+00 9.46967200e+00 + 9.44934790e+00 9.42906742e+00 9.40883047e+00 9.38863695e+00 9.36848677e+00 + 9.34837984e+00 9.32831606e+00 9.30829535e+00 9.28831760e+00 9.26838273e+00 + 9.24849064e+00 9.22864125e+00 9.20883446e+00 9.18907018e+00 9.16934832e+00 + 9.14966878e+00 9.13003148e+00 9.11043633e+00 9.09088323e+00 9.07137210e+00 + 9.05190285e+00 9.03247538e+00 9.01308960e+00 8.99374544e+00 8.97444278e+00 + 8.95518156e+00 8.93596168e+00 8.91678304e+00 8.89764557e+00 8.87854917e+00 + 8.85949376e+00 8.84047925e+00 8.82150554e+00 8.80257256e+00 8.78368021e+00 + 8.76482840e+00 8.74601706e+00 8.72724609e+00 8.70851541e+00 8.68982493e+00 + 8.67117456e+00 8.65256422e+00 8.63399383e+00 8.61546328e+00 8.59697251e+00 + 8.57852143e+00 8.56010995e+00 8.54173798e+00 8.52340544e+00 8.50511224e+00 + 8.48685831e+00 8.46864356e+00 8.45046790e+00 8.43233125e+00 8.41423352e+00 + 8.39617463e+00 8.37815451e+00 8.36017306e+00 8.34223020e+00 8.32432585e+00 + 8.30645993e+00 8.28863235e+00 8.27084304e+00 8.25309190e+00 8.23537886e+00 + 8.21770384e+00 8.20006675e+00 8.18246752e+00 8.16490606e+00 8.14738229e+00 + 8.12989613e+00 8.11244750e+00 8.09503632e+00 8.07766250e+00 8.06032598e+00 + 8.04302666e+00 8.02576447e+00 8.00853933e+00 7.99135116e+00 7.97419988e+00 + 7.95708540e+00 7.94000767e+00 7.92296658e+00 7.90596207e+00 7.88899405e+00 + 7.87206245e+00 7.85516719e+00 7.83830819e+00 7.82148537e+00 7.80469866e+00 + 7.78794798e+00 7.77123325e+00 7.75455439e+00 7.73791133e+00 7.72130399e+00 + 7.70473229e+00 7.68819616e+00 7.67169552e+00 7.65523029e+00 7.63880040e+00 + 7.62240578e+00 7.60604634e+00 7.58972201e+00 7.57343271e+00 7.55717838e+00 + 7.54095894e+00 7.52477430e+00 7.50862440e+00 7.49250916e+00 7.47642851e+00 + 7.46038237e+00 7.44437067e+00 7.42839333e+00 7.41245029e+00 7.39654146e+00 + 7.38066678e+00 7.36482617e+00 7.34901955e+00 7.33324686e+00 7.31750803e+00 + 7.30180297e+00 7.28613161e+00 7.27049390e+00 7.25488974e+00 7.23931907e+00 + 7.22378183e+00 7.20827793e+00 7.19280730e+00 7.17736988e+00 7.16196559e+00 + 7.14659436e+00 7.13125612e+00 7.11595080e+00 7.10067833e+00 7.08543864e+00 + 7.07023165e+00 7.05505731e+00 7.03991553e+00 7.02480625e+00 7.00972939e+00 + 6.99468490e+00 6.97967269e+00 6.96469270e+00 6.94974487e+00 6.93482911e+00 + 6.91994537e+00 6.90509357e+00 6.89027365e+00 6.87548554e+00 6.86072916e+00 + 6.84600445e+00 6.83131135e+00 6.81664978e+00 6.80201968e+00 6.78742098e+00 + 6.77285361e+00 6.75831750e+00 6.74381260e+00 6.72933882e+00 6.71489611e+00 + 6.70048439e+00 6.68610361e+00 6.67175369e+00 6.65743457e+00 6.64314618e+00 + 6.62888845e+00 6.61466133e+00 6.60046474e+00 6.58629863e+00 6.57216291e+00 + 6.55805753e+00 6.54398243e+00 6.52993754e+00 6.51592279e+00 6.50193811e+00 + 6.48798346e+00 6.47405875e+00 6.46016392e+00 6.44629892e+00 6.43246368e+00 + 6.41865813e+00 6.40488221e+00 6.39113586e+00 6.37741901e+00 6.36373160e+00 + 6.35007356e+00 6.33644484e+00 6.32284537e+00 6.30927508e+00 6.29573393e+00 + 6.28222183e+00 6.26873873e+00 6.25528457e+00 6.24185929e+00 6.22846282e+00 + 6.21509511e+00 6.20175608e+00 6.18844568e+00 6.17516385e+00 6.16191053e+00 + 6.14868565e+00 6.13548915e+00 6.12232097e+00 6.10918106e+00 6.09606935e+00 + 6.08298578e+00 6.06993029e+00 6.05690282e+00 6.04390331e+00 6.03093170e+00 + 6.01798793e+00 6.00507194e+00 5.99218368e+00 5.97932307e+00 5.96649006e+00 + 5.95368460e+00 5.94090662e+00 5.92815607e+00 5.91543288e+00 5.90273699e+00 + 5.89006836e+00 5.87742692e+00 5.86481260e+00 5.85222536e+00 5.83966514e+00 + 5.82713187e+00 5.81462550e+00 5.80214598e+00 5.78969323e+00 5.77726722e+00 + 5.76486787e+00 5.75249513e+00 5.74014895e+00 5.72782927e+00 5.71553603e+00 + 5.70326917e+00 5.69102864e+00 5.67881438e+00 5.66662634e+00 5.65446445e+00 + 5.64232867e+00 5.63021893e+00 5.61813518e+00 5.60607737e+00 5.59404543e+00 + 5.58203932e+00 5.57005898e+00 5.55810435e+00 5.54617538e+00 5.53427201e+00 + 5.52239418e+00 5.51054185e+00 5.49871496e+00 5.48691345e+00 5.47513727e+00 + 5.46338636e+00 5.45166067e+00 5.43996015e+00 5.42828475e+00 5.41663440e+00 + 5.40500905e+00 5.39340865e+00 5.38183316e+00 5.37028250e+00 5.35875664e+00 + 5.34725551e+00 5.33577907e+00 5.32432726e+00 5.31290002e+00 5.30149731e+00 + 5.29011908e+00 5.27876526e+00 5.26743582e+00 5.25613069e+00 5.24484982e+00 + 5.23359316e+00 5.22236066e+00 5.21115227e+00 5.19996794e+00 5.18880761e+00 + 5.17767123e+00 5.16655876e+00 5.15547013e+00 5.14440530e+00 5.13336422e+00 + 5.12234684e+00 5.11135310e+00 5.10038296e+00 5.08943636e+00 5.07851326e+00 + 5.06761360e+00 5.05673733e+00 5.04588441e+00 5.03505478e+00 5.02424839e+00 + 5.01346520e+00 5.00270514e+00 4.99196819e+00 4.98125427e+00 4.97056335e+00 + 4.95989538e+00 4.94925030e+00 4.93862807e+00 4.92802863e+00 4.91745195e+00 + 4.90689796e+00 4.89636663e+00 4.88585790e+00 4.87537172e+00 4.86490805e+00 + 4.85446683e+00 4.84404803e+00 4.83365158e+00 4.82327745e+00 4.81292559e+00 + 4.80259594e+00 4.79228846e+00 4.78200311e+00 4.77173983e+00 4.76149857e+00 + 4.75127930e+00 4.74108196e+00 4.73090650e+00 4.72075289e+00 4.71062106e+00 + 4.70051099e+00 4.69042261e+00 4.68035588e+00 4.67031076e+00 4.66028719e+00 + 4.65028514e+00 4.64030456e+00 4.63034539e+00 4.62040761e+00 4.61049115e+00 + 4.60059597e+00 4.59072203e+00 4.58086928e+00 4.57103768e+00 4.56122718e+00 + 4.55143774e+00 4.54166930e+00 4.53192183e+00 4.52219528e+00 4.51248961e+00 + 4.50280477e+00 4.49314071e+00 4.48349739e+00 4.47387478e+00 4.46427281e+00 + 4.45469145e+00 4.44513066e+00 4.43559038e+00 4.42607058e+00 4.41657121e+00 + 4.40709223e+00 4.39763360e+00 4.38819526e+00 4.37877718e+00 4.36937932e+00 + 4.36000162e+00 4.35064406e+00 4.34130657e+00 4.33198913e+00 4.32269168e+00 + 4.31341419e+00 4.30415660e+00 4.29491889e+00 4.28570101e+00 4.27650290e+00 + 4.26732454e+00 4.25816588e+00 4.24902688e+00 4.23990748e+00 4.23080767e+00 + 4.22172738e+00 4.21266658e+00 4.20362522e+00 4.19460328e+00 4.18560069e+00 + 4.17661743e+00 4.16765344e+00 4.15870870e+00 4.14978315e+00 4.14087676e+00 + 4.13198948e+00 4.12312128e+00 4.11427211e+00 4.10544194e+00 4.09663071e+00 + 4.08783840e+00 4.07906495e+00 4.07031034e+00 4.06157452e+00 4.05285744e+00 + 4.04415907e+00 4.03547938e+00 4.02681831e+00 4.01817583e+00 4.00955190e+00 + 4.00094647e+00 3.99235952e+00 3.98379100e+00 3.97524086e+00 3.96670908e+00 + 3.95819561e+00 3.94970041e+00 3.94122344e+00 3.93276467e+00 3.92432405e+00 + 3.91590154e+00 3.90749711e+00 3.89911073e+00 3.89074234e+00 3.88239191e+00 + 3.87405940e+00 3.86574477e+00 3.85744799e+00 3.84916902e+00 3.84090782e+00 + 3.83266434e+00 3.82443856e+00 3.81623044e+00 3.80803993e+00 3.79986699e+00 + 3.79171160e+00 3.78357372e+00 3.77545330e+00 3.76735030e+00 3.75926470e+00 + 3.75119645e+00 3.74314552e+00 3.73511187e+00 3.72709545e+00 3.71909625e+00 + 3.71111421e+00 3.70314930e+00 3.69520149e+00 3.68727074e+00 3.67935701e+00 + 3.67146026e+00 3.66358046e+00 3.65571757e+00 3.64787156e+00 3.64004238e+00 + 3.63223001e+00 3.62443441e+00 3.61665554e+00 3.60889336e+00 3.60114785e+00 + 3.59341895e+00 3.58570665e+00 3.57801089e+00 3.57033166e+00 3.56266890e+00 + 3.55502259e+00 3.54739270e+00 3.53977917e+00 3.53218199e+00 3.52460112e+00 + 3.51703651e+00 3.50948814e+00 3.50195597e+00 3.49443996e+00 3.48694009e+00 + 3.47945631e+00 3.47198860e+00 3.46453691e+00 3.45710121e+00 3.44968148e+00 + 3.44227767e+00 3.43488974e+00 3.42751768e+00 3.42016144e+00 3.41282098e+00 + 3.40549628e+00 3.39818730e+00 3.39089401e+00 3.38361637e+00 3.37635435e+00 + 3.36910791e+00 3.36187703e+00 3.35466167e+00 3.34746179e+00 3.34027737e+00 + 3.33310836e+00 3.32595474e+00 3.31881648e+00 3.31169353e+00 3.30458587e+00 + 3.29749347e+00 3.29041629e+00 3.28335430e+00 3.27630746e+00 3.26927575e+00 + 3.26225913e+00 3.25525757e+00 3.24827104e+00 3.24129950e+00 3.23434292e+00 + 3.22740128e+00 3.22047453e+00 3.21356265e+00 3.20666561e+00 3.19978336e+00 + 3.19291589e+00 3.18606316e+00 3.17922513e+00 3.17240178e+00 3.16559307e+00 + 3.15879898e+00 3.15201947e+00 3.14525451e+00 3.13850407e+00 3.13176812e+00 + 3.12504662e+00 3.11833955e+00 3.11164687e+00 3.10496856e+00 3.09830458e+00 + 3.09165491e+00 3.08501950e+00 3.07839834e+00 3.07179139e+00 3.06519862e+00 + 3.05861999e+00 3.05205549e+00 3.04550508e+00 3.03896872e+00 3.03244639e+00 + 3.02593806e+00 3.01944370e+00 3.01296328e+00 3.00649677e+00 3.00004413e+00 + 2.99360535e+00 2.98718038e+00 2.98076920e+00 2.97437178e+00 2.96798810e+00 + 2.96161811e+00 2.95526179e+00 2.94891912e+00 2.94259006e+00 2.93627458e+00 + 2.92997266e+00 2.92368427e+00 2.91740937e+00 2.91114793e+00 2.90489994e+00 + 2.89866535e+00 2.89244415e+00 2.88623630e+00 2.88004177e+00 2.87386054e+00 + 2.86769257e+00 2.86153784e+00 2.85539632e+00 2.84926798e+00 2.84315279e+00 + 2.83705073e+00 2.83096177e+00 2.82488587e+00 2.81882302e+00 2.81277317e+00 + 2.80673631e+00 2.80071241e+00 2.79470143e+00 2.78870336e+00 2.78271816e+00 + 2.77674581e+00 2.77078627e+00 2.76483952e+00 2.75890554e+00 2.75298429e+00 + 2.74707575e+00 2.74117990e+00 2.73529669e+00 2.72942612e+00 2.72356814e+00 + 2.71772273e+00 2.71188987e+00 2.70606953e+00 2.70026168e+00 2.69446630e+00 + 2.68868335e+00 2.68291282e+00 2.67715467e+00 2.67140888e+00 2.66567542e+00 + 2.65995427e+00 2.65424539e+00 2.64854877e+00 2.64286437e+00 2.63719218e+00 + 2.63153215e+00 2.62588428e+00 2.62024853e+00 2.61462487e+00 2.60901328e+00 + 2.60341374e+00 2.59782621e+00 2.59225068e+00 2.58668711e+00 2.58113548e+00 + 2.57559577e+00 2.57006795e+00 2.56455199e+00 2.55904787e+00 2.55355557e+00 + 2.54807505e+00 2.54260629e+00 2.53714927e+00 2.53170396e+00 2.52627034e+00 + 2.52084839e+00 2.51543806e+00 2.51003935e+00 2.50465223e+00 2.49927667e+00 + 2.49391265e+00 2.48856013e+00 2.48321911e+00 2.47788955e+00 2.47257143e+00 + 2.46726472e+00 2.46196940e+00 2.45668545e+00 2.45141283e+00 2.44615154e+00 + 2.44090153e+00 2.43566279e+00 2.43043530e+00 2.42521903e+00 2.42001395e+00 + 2.41482004e+00 2.40963728e+00 2.40446564e+00 2.39930510e+00 2.39415564e+00 + 2.38901723e+00 2.38388985e+00 2.37877347e+00 2.37366808e+00 2.36857364e+00 + 2.36349013e+00 2.35841754e+00 2.35335583e+00 2.34830499e+00 2.34326498e+00 + 2.33823580e+00 2.33321740e+00 2.32820978e+00 2.32321291e+00 2.31822676e+00 + 2.31325131e+00 2.30828654e+00 2.30333242e+00 2.29838894e+00 2.29345607e+00 + 2.28853378e+00 2.28362206e+00 2.27872088e+00 2.27383022e+00 2.26895006e+00 + 2.26408037e+00 2.25922113e+00 2.25437232e+00 2.24953392e+00 2.24470590e+00 + 2.23988824e+00 2.23508093e+00 2.23028393e+00 2.22549722e+00 2.22072079e+00 + 2.21595462e+00 2.21119867e+00 2.20645292e+00 2.20171737e+00 2.19699197e+00 + 2.19227672e+00 2.18757159e+00 2.18287656e+00 2.17819160e+00 2.17351670e+00 + 2.16885183e+00 2.16419698e+00 2.15955211e+00 2.15491722e+00 2.15029227e+00 + 2.14567724e+00 2.14107213e+00 2.13647689e+00 2.13189152e+00 2.12731599e+00 + 2.12275028e+00 2.11819437e+00 2.11364823e+00 2.10911186e+00 2.10458522e+00 + 2.10006829e+00 2.09556106e+00 2.09106350e+00 2.08657560e+00 2.08209733e+00 + 2.07762867e+00 2.07316960e+00 2.06872010e+00 2.06428015e+00 2.05984973e+00 + 2.05542881e+00 2.05101739e+00 2.04661543e+00 2.04222293e+00 2.03783984e+00 + 2.03346617e+00 2.02910188e+00 2.02474696e+00 2.02040139e+00 2.01606514e+00 + 2.01173820e+00 2.00742055e+00 2.00311216e+00 1.99881302e+00 1.99452311e+00 + 1.99024240e+00 1.98597088e+00 1.98170853e+00 1.97745533e+00 1.97321125e+00 + 1.96897629e+00 1.96475041e+00 1.96053360e+00 1.95632584e+00 1.95212712e+00 + 1.94793740e+00 1.94375668e+00 1.93958493e+00 1.93542213e+00 1.93126827e+00 + 1.92712332e+00 1.92298727e+00 1.91886010e+00 1.91474178e+00 1.91063231e+00 + 1.90653165e+00 1.90243979e+00 1.89835672e+00 1.89428241e+00 1.89021684e+00 + 1.88616000e+00 1.88211187e+00 1.87807242e+00 1.87404164e+00 1.87001952e+00 + 1.86600602e+00 1.86200115e+00 1.85800486e+00 1.85401715e+00 1.85003801e+00 + 1.84606740e+00 1.84210531e+00 1.83815173e+00 1.83420663e+00 1.83027000e+00 + 1.82634182e+00 1.82242207e+00 1.81851073e+00 1.81460779e+00 1.81071322e+00 + 1.80682701e+00 1.80294915e+00 1.79907960e+00 1.79521836e+00 1.79136541e+00 + 1.78752073e+00 1.78368429e+00 1.77985610e+00 1.77603612e+00 1.77222433e+00 + 1.76842073e+00 1.76462529e+00 1.76083800e+00 1.75705883e+00 1.75328778e+00 + 1.74952482e+00 1.74576994e+00 1.74202311e+00 1.73828433e+00 1.73455357e+00 + 1.73083082e+00 1.72711606e+00 1.72340927e+00 1.71971043e+00 1.71601954e+00 + 1.71233656e+00 1.70866149e+00 1.70499431e+00 1.70133500e+00 1.69768354e+00 + 1.69403992e+00 1.69040412e+00 1.68677613e+00 1.68315592e+00 1.67954347e+00 + 1.67593879e+00 1.67234184e+00 1.66875260e+00 1.66517108e+00 1.66159723e+00 + 1.65803106e+00 1.65447255e+00 1.65092167e+00 1.64737841e+00 1.64384275e+00 + 1.64031469e+00 1.63679419e+00 1.63328125e+00 1.62977586e+00 1.62627798e+00 + 1.62278761e+00 1.61930474e+00 1.61582933e+00 1.61236139e+00 1.60890089e+00 + 1.60544782e+00 1.60200216e+00 1.59856389e+00 1.59513300e+00 1.59170948e+00 + 1.58829330e+00 1.58488446e+00 1.58148293e+00 1.57808870e+00 1.57470176e+00 + 1.57132209e+00 1.56794967e+00 1.56458448e+00 1.56122652e+00 1.55787577e+00 + 1.55453221e+00 1.55119582e+00 1.54786660e+00 1.54454452e+00 1.54122957e+00 + 1.53792173e+00 1.53462100e+00 1.53132735e+00 1.52804076e+00 1.52476123e+00 + 1.52148874e+00 1.51822328e+00 1.51496482e+00 1.51171335e+00 1.50846886e+00 + 1.50523134e+00 1.50200077e+00 1.49877712e+00 1.49556040e+00 1.49235058e+00 + 1.48914765e+00 1.48595159e+00 1.48276240e+00 1.47958005e+00 1.47640452e+00 + 1.47323582e+00 1.47007391e+00 1.46691879e+00 1.46377044e+00 1.46062885e+00 + 1.45749400e+00 1.45436588e+00 1.45124447e+00 1.44812976e+00 1.44502174e+00 + 1.44192039e+00 1.43882569e+00 1.43573763e+00 1.43265621e+00 1.42958139e+00 + 1.42651318e+00 1.42345155e+00 1.42039649e+00 1.41734799e+00 1.41430603e+00 + 1.41127059e+00 1.40824168e+00 1.40521926e+00 1.40220333e+00 1.39919388e+00 + 1.39619088e+00 1.39319433e+00 1.39020420e+00 1.38722050e+00 1.38424320e+00 + 1.38127229e+00 1.37830775e+00 1.37534958e+00 1.37239776e+00 1.36945227e+00 + 1.36651310e+00 1.36358024e+00 1.36065367e+00 1.35773339e+00 1.35481937e+00 + 1.35191161e+00 1.34901009e+00 1.34611479e+00 1.34322571e+00 1.34034283e+00 + 1.33746613e+00 1.33459561e+00 1.33173125e+00 1.32887304e+00 1.32602096e+00 + 1.32317500e+00 1.32033515e+00 1.31750140e+00 1.31467372e+00 1.31185212e+00 + 1.30903657e+00 1.30622706e+00 1.30342358e+00 1.30062612e+00 1.29783466e+00 + 1.29504919e+00 1.29226970e+00 1.28949618e+00 1.28672861e+00 1.28396697e+00 + 1.28121127e+00 1.27846147e+00 1.27571758e+00 1.27297958e+00 1.27024745e+00 + 1.26752119e+00 1.26480077e+00 1.26208620e+00 1.25937745e+00 1.25667451e+00 + 1.25397737e+00 1.25128603e+00 1.24860045e+00 1.24592064e+00 1.24324658e+00 + 1.24057826e+00 1.23791567e+00 1.23525878e+00 1.23260760e+00 1.22996211e+00 + 1.22732230e+00 1.22468815e+00 1.22205965e+00 1.21943680e+00 1.21681957e+00 + 1.21420796e+00 1.21160195e+00 1.20900153e+00 1.20640670e+00 1.20381743e+00 + 1.20123372e+00 1.19865555e+00 1.19608291e+00 1.19351580e+00 1.19095419e+00 + 1.18839808e+00 1.18584745e+00 1.18330230e+00 1.18076261e+00 1.17822836e+00 + 1.17569956e+00 1.17317618e+00 1.17065821e+00 1.16814565e+00 1.16563847e+00 + 1.16313668e+00 1.16064025e+00 1.15814918e+00 1.15566346e+00 1.15318306e+00 + 1.15070799e+00 1.14823823e+00 1.14577377e+00 1.14331459e+00 1.14086069e+00 + 1.13841205e+00 1.13596867e+00 1.13353053e+00 1.13109762e+00 1.12866992e+00 + 1.12624744e+00 1.12383015e+00 1.12141805e+00 1.11901112e+00 1.11660935e+00 + 1.11421273e+00 1.11182126e+00 1.10943491e+00 1.10705368e+00 1.10467756e+00 + 1.10230654e+00 1.09994060e+00 1.09757973e+00 1.09522393e+00 1.09287318e+00 + 1.09052747e+00 1.08818679e+00 1.08585113e+00 1.08352048e+00 1.08119483e+00 + 1.07887416e+00 1.07655847e+00 1.07424774e+00 1.07194197e+00 1.06964114e+00 + 1.06734525e+00 1.06505427e+00 1.06276821e+00 1.06048705e+00 1.05821077e+00 + 1.05593938e+00 1.05367285e+00 1.05141119e+00 1.04915437e+00 1.04690238e+00 + 1.04465523e+00 1.04241289e+00 1.04017535e+00 1.03794261e+00 1.03571465e+00 + 1.03349147e+00 1.03127304e+00 1.02905938e+00 1.02685045e+00 1.02464626e+00 + 1.02244678e+00 1.02025202e+00 1.01806196e+00 1.01587659e+00 1.01369590e+00 + 1.01151988e+00 1.00934851e+00 1.00718180e+00 1.00501973e+00 1.00286228e+00 + 1.00070946e+00 9.98561236e-01 9.96417615e-01 9.94278581e-01 9.92144125e-01 + 9.90014236e-01 9.87888904e-01 9.85768119e-01 9.83651871e-01 9.81540149e-01 + 9.79432944e-01 9.77330246e-01 9.75232044e-01 9.73138328e-01 9.71049088e-01 + 9.68964314e-01 9.66883996e-01 9.64808125e-01 9.62736689e-01 9.60669679e-01 + 9.58607085e-01 9.56548897e-01 9.54495105e-01 9.52445699e-01 9.50400669e-01 + 9.48360004e-01 9.46323696e-01 9.44291733e-01 9.42264107e-01 9.40240807e-01 + 9.38221822e-01 9.36207144e-01 9.34196763e-01 9.32190667e-01 9.30188848e-01 + 9.28191295e-01 9.26197999e-01 9.24208949e-01 9.22224136e-01 9.20243549e-01 + 9.18267179e-01 9.16295016e-01 9.14327050e-01 9.12363271e-01 9.10403669e-01 + 9.08448234e-01 9.06496956e-01 9.04549825e-01 9.02606832e-01 9.00667966e-01 + 8.98733217e-01 8.96802576e-01 8.94876032e-01 8.92953575e-01 8.91035196e-01 + 8.89120885e-01 8.87210631e-01 8.85304424e-01 8.83402255e-01 8.81504113e-01 + 8.79609989e-01 8.77719872e-01 8.75833752e-01 8.73951619e-01 8.72073464e-01 + 8.70199275e-01 8.68329043e-01 8.66462758e-01 8.64600409e-01 8.62741986e-01 + 8.60887479e-01 8.59036879e-01 8.57190173e-01 8.55347353e-01 8.53508408e-01 + 8.51673328e-01 8.49842102e-01 8.48014719e-01 8.46191170e-01 8.44371444e-01 + 8.42555531e-01 8.40743420e-01 8.38935100e-01 8.37130561e-01 8.35329792e-01 + 8.33532782e-01 8.31739522e-01 8.29950000e-01 8.28164205e-01 8.26382127e-01 + 8.24603754e-01 8.22829076e-01 8.21058082e-01 8.19290760e-01 8.17527101e-01 + 8.15767091e-01 8.14010722e-01 8.12257980e-01 8.10508856e-01 8.08763337e-01 + 8.07021412e-01 8.05283069e-01 8.03548298e-01 8.01817087e-01 8.00089423e-01 + 7.98365295e-01 7.96644692e-01 7.94927601e-01 7.93214010e-01 7.91503908e-01 + 7.89797282e-01 7.88094120e-01 7.86394410e-01 7.84698139e-01 7.83005295e-01 + 7.81315865e-01 7.79629836e-01 7.77947197e-01 7.76267933e-01 7.74592033e-01 + 7.72919482e-01 7.71250267e-01 7.69584376e-01 7.67921795e-01 7.66262510e-01 + 7.64606508e-01 7.62953775e-01 7.61304297e-01 7.59658059e-01 7.58015048e-01 + 7.56375250e-01 7.54738649e-01 7.53105231e-01 7.51474982e-01 7.49847887e-01 + 7.48223929e-01 7.46603095e-01 7.44985369e-01 7.43370735e-01 7.41759177e-01 + 7.40150680e-01 7.38545227e-01 7.36942802e-01 7.35343389e-01 7.33746970e-01 + 7.32153529e-01 7.30563049e-01 7.28975513e-01 7.27390903e-01 7.25809201e-01 + 7.24230389e-01 7.22654449e-01 7.21081363e-01 7.19511112e-01 7.17943676e-01 + 7.16379038e-01 7.14817176e-01 7.13258073e-01 7.11701707e-01 7.10148058e-01 + 7.08597106e-01 7.07048830e-01 7.05503209e-01 7.03960221e-01 7.02419845e-01 + 7.00882058e-01 6.99346838e-01 6.97814163e-01 6.96284009e-01 6.94756352e-01 + 6.93231170e-01 6.91708437e-01 6.90188130e-01 6.88670223e-01 6.87154691e-01 + 6.85641509e-01 6.84130649e-01 6.82622086e-01 6.81115793e-01 6.79611743e-01 + 6.78109907e-01 6.76610256e-01 6.75112764e-01 6.73617399e-01 6.72124133e-01 + 6.70632935e-01 6.69143774e-01 6.67656619e-01 6.66171439e-01 6.64688201e-01 + 6.63206872e-01 6.61727419e-01 6.60249807e-01 6.58774002e-01 6.57299969e-01 + 6.55827672e-01 6.54357074e-01 6.52888139e-01 6.51420829e-01 6.49955104e-01 + 6.48490927e-01 6.47028257e-01 6.45567053e-01 6.44107275e-01 6.42648880e-01 + 6.41191826e-01 6.39736069e-01 6.38281565e-01 6.36828269e-01 6.35376134e-01 + 6.33925114e-01 6.32475162e-01 6.31026228e-01 6.29578264e-01 6.28131219e-01 + 6.26685041e-01 6.25239679e-01 6.23795080e-01 6.22351189e-01 6.20907951e-01 + 6.19465310e-01 6.18023208e-01 6.16581589e-01 6.15140391e-01 6.13699555e-01 + 6.12259019e-01 6.10818721e-01 6.09378596e-01 6.07938579e-01 6.06498604e-01 + 6.05058604e-01 6.03618509e-01 6.02178250e-01 6.00737754e-01 5.99296950e-01 + 5.97855763e-01 5.96414118e-01 5.94971938e-01 5.93529144e-01 5.92085657e-01 + 5.90641395e-01 5.89196275e-01 5.87750214e-01 5.86303125e-01 5.84854920e-01 + 5.83405511e-01 5.81954807e-01 5.80502715e-01 5.79049141e-01 5.77593989e-01 + 5.76137162e-01 5.74678560e-01 5.73218082e-01 5.71755624e-01 5.70291081e-01 + 5.68824347e-01 5.67355312e-01 5.65883866e-01 5.64409896e-01 5.62933287e-01 + 5.61453921e-01 5.59971680e-01 5.58486443e-01 5.56998085e-01 5.55506482e-01 + 5.54011505e-01 5.52513025e-01 5.51010909e-01 5.49505022e-01 5.47995227e-01 + 5.46481386e-01 5.44963355e-01 5.43440991e-01 5.41914147e-01 5.40382673e-01 + 5.38846419e-01 5.37305229e-01 5.35758946e-01 5.34207411e-01 5.32650462e-01 + 5.31087934e-01 5.29519659e-01 5.27945467e-01 5.26365185e-01 5.24778637e-01 + 5.23185644e-01 5.21586025e-01 5.19979596e-01 5.18366169e-01 5.16745554e-01 + 5.15117559e-01 5.13481987e-01 5.11838640e-01 5.10187316e-01 5.08527810e-01 + 5.06859916e-01 5.05183421e-01 5.03498113e-01 5.01803775e-01 5.00100187e-01 + 4.98387128e-01 4.96664371e-01 4.94931688e-01 4.93188848e-01 4.91435617e-01 + 4.89671756e-01 4.87897027e-01 4.86111186e-01 4.84313987e-01 4.82505182e-01 + 4.80684518e-01 4.78851743e-01 4.77006599e-01 4.75148825e-01 4.73278161e-01 + 4.71394342e-01 4.69497099e-01 4.67586165e-01 4.65661265e-01 4.63722128e-01 + 4.61768475e-01 4.59800029e-01 4.57816510e-01 4.55817634e-01 4.53803118e-01 + 4.51772676e-01 4.49726022e-01 4.47662866e-01 4.45582919e-01 4.43485891e-01 + 4.41371488e-01 4.39239420e-01 4.37089394e-01 4.34921115e-01 4.32734292e-01 + 4.30528630e-01 4.28303837e-01 4.26059620e-01 4.23795689e-01 4.21511752e-01 + 4.19207520e-01 4.16882707e-01 4.14537026e-01 4.12170195e-01 4.09781933e-01 + 4.07371963e-01 4.04940009e-01 4.02485802e-01 4.00009075e-01 3.97509566e-01 + 3.94987017e-01 3.92441177e-01 3.89871799e-01 3.87278645e-01 3.84661480e-01 + 3.82020079e-01 3.79354224e-01 3.76663705e-01 3.73948321e-01 3.71207881e-01 + 3.68442203e-01 3.65651117e-01 3.62834463e-01 3.59992093e-01 3.57123872e-01 + 3.54229679e-01 3.51309405e-01 3.48362957e-01 3.45390258e-01 3.42391245e-01 + 3.39365874e-01 3.36314117e-01 3.33235967e-01 3.30131432e-01 3.27000544e-01 + 3.23843354e-01 3.20659935e-01 3.17450383e-01 3.14214817e-01 3.10953381e-01 + 3.07666242e-01 3.04353596e-01 3.01015664e-01 2.97652696e-01 2.94264969e-01 + 2.90852790e-01 2.87416499e-01 2.83956463e-01 2.80473085e-01 2.76966798e-01 + 2.73438070e-01 2.69887404e-01 2.66315338e-01 2.62722445e-01 2.59109338e-01 + 2.55476663e-01 2.51825108e-01 2.48155397e-01 2.44468296e-01 2.40764610e-01 + 2.37045183e-01 2.33310901e-01 2.29562691e-01 2.25801522e-01 2.22028404e-01 + 2.18244389e-01 2.14450570e-01 2.10648085e-01 2.06838110e-01 2.03021865e-01 + 1.99200609e-01 1.95375646e-01 1.91548315e-01 1.87719999e-01 1.83892119e-01 + 1.80066132e-01 1.76243534e-01 1.72425858e-01 1.68614668e-01 1.64811566e-01 + 1.61018182e-01 1.57236178e-01 1.53467243e-01 1.49713092e-01 1.45975466e-01 + 1.42256126e-01 1.38556852e-01 1.34879442e-01 1.31225705e-01 1.27597466e-01 + 1.23996551e-01 1.20424797e-01 1.16884039e-01 1.13376108e-01 1.09902834e-01 + 1.06466032e-01 1.03067507e-01 9.97090454e-02 9.63924113e-02 9.31193435e-02 + 8.98915508e-02 8.67107074e-02 8.35784489e-02 8.04963677e-02 7.74660087e-02 + 7.44888648e-02 7.15663729e-02 6.86999091e-02 6.58907847e-02 6.31402418e-02 + 6.04494498e-02 5.78195005e-02 5.52514054e-02 5.27460911e-02 5.03043967e-02 + 4.79270698e-02 4.56147642e-02 4.33680371e-02 4.11873461e-02 3.90730481e-02 + 3.70253965e-02 3.50445405e-02 3.31305238e-02 3.12832841e-02 2.95026522e-02 + 2.77883531e-02 2.61400057e-02 2.45571244e-02 2.30391200e-02 2.15853019e-02 + 2.01948803e-02 1.88669688e-02 1.76005877e-02 1.63946672e-02 1.52480519e-02 + 1.41595045e-02 1.31277111e-02 1.21512857e-02 1.12287758e-02 1.03586680e-02 + 9.53939392e-03 8.76933619e-03 8.04683477e-03 7.37019339e-03 6.73768606e-03 + 6.14756365e-03 5.59806047e-03 5.08740088e-03 4.61380575e-03 4.17549890e-03 + 3.77071328e-03 3.39769704e-03 3.05471932e-03 2.74007581e-03 2.45209391e-03 + 2.18913767e-03 1.94961227e-03 1.73196817e-03 1.53470479e-03 1.35637382e-03 + 1.19558204e-03 1.05099372e-03 9.21332559e-04 8.05383193e-04 7.01992213e-04 + 6.10068796e-04 5.28584903e-04 4.56575066e-04 3.93135809e-04 3.37424713e-04 + 2.88659146e-04 2.46114711e-04 2.09123417e-04 1.77071629e-04 1.49397813e-04 + 1.25590119e-04 1.05183840e-04 8.77587673e-05 7.29364877e-05 6.03776430e-05 + 4.97791872e-05 4.08716659e-05 3.34165405e-05 2.72035814e-05 2.20483479e-05 + 1.77897704e-05 1.42878490e-05 1.14214793e-05 9.08641104e-06 7.19334759e-06 + 5.66618684e-06 4.44040494e-06 3.46158128e-06 2.68406139e-06 2.06975312e-06 + 1.58705007e-06 1.20987538e-06 9.16838150e-07 6.90494318e-07 5.16703483e-07 + 3.84073119e-07 2.83481627e-07 2.07671932e-07 1.50907666e-07 1.08684371e-07 + 7.74887026e-08 5.45991257e-08 3.79221873e-08 2.58590381e-08 1.71974474e-08 + 1.10251239e-08 6.66069066e-09 3.59915934e-09 1.46921029e-09 0.00000000e+00 + 9.31535205e+00 9.31535205e+00 9.31535205e+00 9.31535205e+00 9.31535205e+00 + 9.31535205e+00 9.31535205e+00 9.31535205e+00 9.31535205e+00 9.31535205e+00 + 9.31535205e+00 9.31535205e+00 9.31535205e+00 9.31535205e+00 9.31535205e+00 + 9.31535205e+00 9.31535205e+00 9.31535205e+00 9.31535205e+00 9.31535205e+00 + 9.31535205e+00 9.31535205e+00 9.31535205e+00 9.31535205e+00 9.31535205e+00 + 9.31535205e+00 9.31535205e+00 9.31535205e+00 9.31535205e+00 9.31535205e+00 + 9.31535205e+00 9.31535205e+00 9.31535205e+00 9.31535205e+00 9.31535205e+00 + 9.31535205e+00 9.31535205e+00 9.31535205e+00 9.31535205e+00 9.31535205e+00 + 9.31535205e+00 9.31535205e+00 9.31535205e+00 9.30248929e+00 9.28626121e+00 + 9.27006144e+00 9.25388993e+00 9.23774663e+00 9.22163150e+00 9.20554447e+00 + 9.18948551e+00 9.17345456e+00 9.15745158e+00 9.14147652e+00 9.12552932e+00 + 9.10960995e+00 9.09371834e+00 9.07785446e+00 9.06201825e+00 9.04620967e+00 + 9.03042867e+00 9.01467520e+00 8.99894920e+00 8.98325065e+00 8.96757947e+00 + 8.95193564e+00 8.93631910e+00 8.92072979e+00 8.90516769e+00 8.88963273e+00 + 8.87412487e+00 8.85864407e+00 8.84319027e+00 8.82776344e+00 8.81236351e+00 + 8.79699045e+00 8.78164420e+00 8.76632473e+00 8.75103198e+00 8.73576591e+00 + 8.72052648e+00 8.70531362e+00 8.69012731e+00 8.67496749e+00 8.65983411e+00 + 8.64472713e+00 8.62964651e+00 8.61459220e+00 8.59956415e+00 8.58456231e+00 + 8.56958664e+00 8.55463710e+00 8.53971364e+00 8.52481622e+00 8.50994478e+00 + 8.49509928e+00 8.48027968e+00 8.46548594e+00 8.45071800e+00 8.43597582e+00 + 8.42125937e+00 8.40656858e+00 8.39190342e+00 8.37726385e+00 8.36264981e+00 + 8.34806127e+00 8.33349818e+00 8.31896049e+00 8.30444817e+00 8.28996116e+00 + 8.27549942e+00 8.26106291e+00 8.24665159e+00 8.23226540e+00 8.21790432e+00 + 8.20356828e+00 8.18925725e+00 8.17497119e+00 8.16071006e+00 8.14647380e+00 + 8.13226237e+00 8.11807574e+00 8.10391385e+00 8.08977667e+00 8.07566415e+00 + 8.06157626e+00 8.04751293e+00 8.03347414e+00 8.01945985e+00 8.00546999e+00 + 7.99150455e+00 7.97756347e+00 7.96364670e+00 7.94975422e+00 7.93588597e+00 + 7.92204191e+00 7.90822200e+00 7.89442621e+00 7.88065447e+00 7.86690677e+00 + 7.85318304e+00 7.83948326e+00 7.82580738e+00 7.81215535e+00 7.79852714e+00 + 7.78492270e+00 7.77134200e+00 7.75778499e+00 7.74425163e+00 7.73074187e+00 + 7.71725569e+00 7.70379303e+00 7.69035385e+00 7.67693812e+00 7.66354580e+00 + 7.65017684e+00 7.63683119e+00 7.62350883e+00 7.61020972e+00 7.59693380e+00 + 7.58368104e+00 7.57045140e+00 7.55724484e+00 7.54406131e+00 7.53090079e+00 + 7.51776322e+00 7.50464858e+00 7.49155681e+00 7.47848788e+00 7.46544175e+00 + 7.45241837e+00 7.43941772e+00 7.42643975e+00 7.41348441e+00 7.40055168e+00 + 7.38764150e+00 7.37475385e+00 7.36188868e+00 7.34904596e+00 7.33622564e+00 + 7.32342768e+00 7.31065205e+00 7.29789870e+00 7.28516761e+00 7.27245872e+00 + 7.25977200e+00 7.24710742e+00 7.23446493e+00 7.22184449e+00 7.20924607e+00 + 7.19666963e+00 7.18411512e+00 7.17158252e+00 7.15907178e+00 7.14658287e+00 + 7.13411574e+00 7.12167036e+00 7.10924669e+00 7.09684470e+00 7.08446434e+00 + 7.07210558e+00 7.05976837e+00 7.04745269e+00 7.03515850e+00 7.02288575e+00 + 7.01063441e+00 6.99840444e+00 6.98619581e+00 6.97400848e+00 6.96184240e+00 + 6.94969755e+00 6.93757389e+00 6.92547138e+00 6.91338997e+00 6.90132965e+00 + 6.88929036e+00 6.87727208e+00 6.86527476e+00 6.85329837e+00 6.84134288e+00 + 6.82940824e+00 6.81749442e+00 6.80560138e+00 6.79372909e+00 6.78187751e+00 + 6.77004661e+00 6.75823634e+00 6.74644668e+00 6.73467759e+00 6.72292902e+00 + 6.71120095e+00 6.69949335e+00 6.68780616e+00 6.67613936e+00 6.66449292e+00 + 6.65286679e+00 6.64126095e+00 6.62967535e+00 6.61810996e+00 6.60656474e+00 + 6.59503967e+00 6.58353471e+00 6.57204981e+00 6.56058495e+00 6.54914009e+00 + 6.53771519e+00 6.52631022e+00 6.51492516e+00 6.50355995e+00 6.49221457e+00 + 6.48088898e+00 6.46958314e+00 6.45829703e+00 6.44703061e+00 6.43578385e+00 + 6.42455670e+00 6.41334914e+00 6.40216113e+00 6.39099263e+00 6.37984362e+00 + 6.36871406e+00 6.35760392e+00 6.34651316e+00 6.33544174e+00 6.32438964e+00 + 6.31335682e+00 6.30234324e+00 6.29134888e+00 6.28037370e+00 6.26941766e+00 + 6.25848074e+00 6.24756290e+00 6.23666410e+00 6.22578431e+00 6.21492351e+00 + 6.20408165e+00 6.19325870e+00 6.18245464e+00 6.17166942e+00 6.16090302e+00 + 6.15015540e+00 6.13942652e+00 6.12871637e+00 6.11802490e+00 6.10735208e+00 + 6.09669787e+00 6.08606226e+00 6.07544520e+00 6.06484666e+00 6.05426660e+00 + 6.04370501e+00 6.03316184e+00 6.02263706e+00 6.01213064e+00 6.00164255e+00 + 5.99117276e+00 5.98072123e+00 5.97028794e+00 5.95987284e+00 5.94947592e+00 + 5.93909713e+00 5.92873644e+00 5.91839383e+00 5.90806927e+00 5.89776271e+00 + 5.88747414e+00 5.87720351e+00 5.86695080e+00 5.85671597e+00 5.84649900e+00 + 5.83629986e+00 5.82611850e+00 5.81595491e+00 5.80580905e+00 5.79568088e+00 + 5.78557039e+00 5.77547753e+00 5.76540228e+00 5.75534460e+00 5.74530447e+00 + 5.73528186e+00 5.72527673e+00 5.71528905e+00 5.70531880e+00 5.69536594e+00 + 5.68543044e+00 5.67551228e+00 5.66561142e+00 5.65572783e+00 5.64586148e+00 + 5.63601234e+00 5.62618038e+00 5.61636558e+00 5.60656790e+00 5.59678731e+00 + 5.58702378e+00 5.57727729e+00 5.56754779e+00 5.55783527e+00 5.54813970e+00 + 5.53846103e+00 5.52879926e+00 5.51915433e+00 5.50952623e+00 5.49991493e+00 + 5.49032040e+00 5.48074260e+00 5.47118151e+00 5.46163710e+00 5.45210934e+00 + 5.44259820e+00 5.43310365e+00 5.42362567e+00 5.41416422e+00 5.40471928e+00 + 5.39529081e+00 5.38587879e+00 5.37648319e+00 5.36710398e+00 5.35774113e+00 + 5.34839462e+00 5.33906441e+00 5.32975047e+00 5.32045279e+00 5.31117132e+00 + 5.30190605e+00 5.29265694e+00 5.28342396e+00 5.27420709e+00 5.26500630e+00 + 5.25582156e+00 5.24665284e+00 5.23750012e+00 5.22836337e+00 5.21924255e+00 + 5.21013764e+00 5.20104862e+00 5.19197545e+00 5.18291812e+00 5.17387658e+00 + 5.16485081e+00 5.15584079e+00 5.14684649e+00 5.13786788e+00 5.12890493e+00 + 5.11995762e+00 5.11102591e+00 5.10210979e+00 5.09320922e+00 5.08432418e+00 + 5.07545464e+00 5.06660057e+00 5.05776195e+00 5.04893874e+00 5.04013093e+00 + 5.03133848e+00 5.02256137e+00 5.01379957e+00 5.00505306e+00 4.99632181e+00 + 4.98760578e+00 4.97890496e+00 4.97021933e+00 4.96154884e+00 4.95289348e+00 + 4.94425321e+00 4.93562802e+00 4.92701788e+00 4.91842276e+00 4.90984263e+00 + 4.90127747e+00 4.89272725e+00 4.88419194e+00 4.87567153e+00 4.86716598e+00 + 4.85867527e+00 4.85019937e+00 4.84173825e+00 4.83329190e+00 4.82486028e+00 + 4.81644337e+00 4.80804114e+00 4.79965357e+00 4.79128063e+00 4.78292230e+00 + 4.77457855e+00 4.76624936e+00 4.75793469e+00 4.74963453e+00 4.74134885e+00 + 4.73307763e+00 4.72482083e+00 4.71657844e+00 4.70835042e+00 4.70013676e+00 + 4.69193743e+00 4.68375240e+00 4.67558165e+00 4.66742516e+00 4.65928289e+00 + 4.65115483e+00 4.64304095e+00 4.63494122e+00 4.62685562e+00 4.61878412e+00 + 4.61072671e+00 4.60268335e+00 4.59465403e+00 4.58663871e+00 4.57863737e+00 + 4.57065000e+00 4.56267655e+00 4.55471702e+00 4.54677137e+00 4.53883958e+00 + 4.53092163e+00 4.52301749e+00 4.51512714e+00 4.50725056e+00 4.49938771e+00 + 4.49153859e+00 4.48370315e+00 4.47588139e+00 4.46807327e+00 4.46027877e+00 + 4.45249786e+00 4.44473053e+00 4.43697676e+00 4.42923650e+00 4.42150975e+00 + 4.41379648e+00 4.40609667e+00 4.39841029e+00 4.39073731e+00 4.38307772e+00 + 4.37543150e+00 4.36779861e+00 4.36017904e+00 4.35257276e+00 4.34497975e+00 + 4.33739998e+00 4.32983344e+00 4.32228010e+00 4.31473993e+00 4.30721292e+00 + 4.29969904e+00 4.29219827e+00 4.28471058e+00 4.27723595e+00 4.26977437e+00 + 4.26232580e+00 4.25489022e+00 4.24746762e+00 4.24005796e+00 4.23266123e+00 + 4.22527741e+00 4.21790646e+00 4.21054837e+00 4.20320312e+00 4.19587069e+00 + 4.18855104e+00 4.18124416e+00 4.17395003e+00 4.16666863e+00 4.15939992e+00 + 4.15214390e+00 4.14490054e+00 4.13766981e+00 4.13045169e+00 4.12324617e+00 + 4.11605322e+00 4.10887281e+00 4.10170493e+00 4.09454956e+00 4.08740667e+00 + 4.08027623e+00 4.07315824e+00 4.06605267e+00 4.05895949e+00 4.05187868e+00 + 4.04481023e+00 4.03775410e+00 4.03071029e+00 4.02367877e+00 4.01665951e+00 + 4.00965249e+00 4.00265770e+00 3.99567511e+00 3.98870471e+00 3.98174646e+00 + 3.97480035e+00 3.96786636e+00 3.96094447e+00 3.95403465e+00 3.94713688e+00 + 3.94025115e+00 3.93337743e+00 3.92651570e+00 3.91966594e+00 3.91282813e+00 + 3.90600225e+00 3.89918827e+00 3.89238619e+00 3.88559597e+00 3.87881759e+00 + 3.87205104e+00 3.86529629e+00 3.85855333e+00 3.85182213e+00 3.84510267e+00 + 3.83839494e+00 3.83169891e+00 3.82501455e+00 3.81834186e+00 3.81168081e+00 + 3.80503138e+00 3.79839355e+00 3.79176730e+00 3.78515260e+00 3.77854945e+00 + 3.77195782e+00 3.76537768e+00 3.75880903e+00 3.75225183e+00 3.74570607e+00 + 3.73917173e+00 3.73264879e+00 3.72613723e+00 3.71963703e+00 3.71314817e+00 + 3.70667063e+00 3.70020438e+00 3.69374942e+00 3.68730572e+00 3.68087326e+00 + 3.67445202e+00 3.66804198e+00 3.66164313e+00 3.65525544e+00 3.64887889e+00 + 3.64251346e+00 3.63615914e+00 3.62981591e+00 3.62348374e+00 3.61716261e+00 + 3.61085252e+00 3.60455343e+00 3.59826533e+00 3.59198820e+00 3.58572202e+00 + 3.57946677e+00 3.57322243e+00 3.56698899e+00 3.56076642e+00 3.55455471e+00 + 3.54835383e+00 3.54216377e+00 3.53598451e+00 3.52981602e+00 3.52365830e+00 + 3.51751132e+00 3.51137507e+00 3.50524952e+00 3.49913465e+00 3.49303045e+00 + 3.48693690e+00 3.48085398e+00 3.47478168e+00 3.46871996e+00 3.46266882e+00 + 3.45662824e+00 3.45059819e+00 3.44457866e+00 3.43856964e+00 3.43257109e+00 + 3.42658302e+00 3.42060538e+00 3.41463818e+00 3.40868138e+00 3.40273498e+00 + 3.39679895e+00 3.39087327e+00 3.38495794e+00 3.37905292e+00 3.37315820e+00 + 3.36727377e+00 3.36139960e+00 3.35553568e+00 3.34968199e+00 3.34383851e+00 + 3.33800522e+00 3.33218211e+00 3.32636916e+00 3.32056635e+00 3.31477366e+00 + 3.30899108e+00 3.30321858e+00 3.29745616e+00 3.29170379e+00 3.28596145e+00 + 3.28022913e+00 3.27450681e+00 3.26879447e+00 3.26309210e+00 3.25739967e+00 + 3.25171718e+00 3.24604460e+00 3.24038191e+00 3.23472911e+00 3.22908616e+00 + 3.22345306e+00 3.21782978e+00 3.21221632e+00 3.20661265e+00 3.20101875e+00 + 3.19543461e+00 3.18986021e+00 3.18429554e+00 3.17874058e+00 3.17319530e+00 + 3.16765970e+00 3.16213376e+00 3.15661745e+00 3.15111077e+00 3.14561370e+00 + 3.14012621e+00 3.13464830e+00 3.12917994e+00 3.12372113e+00 3.11827183e+00 + 3.11283204e+00 3.10740175e+00 3.10198092e+00 3.09656955e+00 3.09116763e+00 + 3.08577512e+00 3.08039202e+00 3.07501832e+00 3.06965398e+00 3.06429901e+00 + 3.05895338e+00 3.05361707e+00 3.04829007e+00 3.04297237e+00 3.03766394e+00 + 3.03236477e+00 3.02707485e+00 3.02179415e+00 3.01652267e+00 3.01126038e+00 + 3.00600727e+00 3.00076333e+00 2.99552853e+00 2.99030287e+00 2.98508632e+00 + 2.97987888e+00 2.97468051e+00 2.96949122e+00 2.96431098e+00 2.95913977e+00 + 2.95397759e+00 2.94882441e+00 2.94368022e+00 2.93854501e+00 2.93341875e+00 + 2.92830144e+00 2.92319305e+00 2.91809358e+00 2.91300300e+00 2.90792130e+00 + 2.90284847e+00 2.89778448e+00 2.89272933e+00 2.88768300e+00 2.88264547e+00 + 2.87761673e+00 2.87259676e+00 2.86758555e+00 2.86258309e+00 2.85758934e+00 + 2.85260431e+00 2.84762798e+00 2.84266033e+00 2.83770134e+00 2.83275101e+00 + 2.82780931e+00 2.82287623e+00 2.81795175e+00 2.81303587e+00 2.80812856e+00 + 2.80322982e+00 2.79833962e+00 2.79345795e+00 2.78858479e+00 2.78372014e+00 + 2.77886397e+00 2.77401628e+00 2.76917704e+00 2.76434625e+00 2.75952388e+00 + 2.75470992e+00 2.74990436e+00 2.74510719e+00 2.74031838e+00 2.73553793e+00 + 2.73076582e+00 2.72600203e+00 2.72124655e+00 2.71649937e+00 2.71176047e+00 + 2.70702984e+00 2.70230745e+00 2.69759331e+00 2.69288739e+00 2.68818968e+00 + 2.68350017e+00 2.67881883e+00 2.67414567e+00 2.66948065e+00 2.66482378e+00 + 2.66017502e+00 2.65553438e+00 2.65090183e+00 2.64627737e+00 2.64166097e+00 + 2.63705262e+00 2.63245232e+00 2.62786003e+00 2.62327576e+00 2.61869949e+00 + 2.61413120e+00 2.60957088e+00 2.60501852e+00 2.60047409e+00 2.59593760e+00 + 2.59140902e+00 2.58688833e+00 2.58237554e+00 2.57787061e+00 2.57337355e+00 + 2.56888433e+00 2.56440294e+00 2.55992937e+00 2.55546361e+00 2.55100563e+00 + 2.54655543e+00 2.54211300e+00 2.53767831e+00 2.53325136e+00 2.52883214e+00 + 2.52442062e+00 2.52001680e+00 2.51562066e+00 2.51123219e+00 2.50685138e+00 + 2.50247820e+00 2.49811266e+00 2.49375473e+00 2.48940441e+00 2.48506167e+00 + 2.48072651e+00 2.47639892e+00 2.47207887e+00 2.46776636e+00 2.46346137e+00 + 2.45916389e+00 2.45487391e+00 2.45059141e+00 2.44631638e+00 2.44204881e+00 + 2.43778869e+00 2.43353599e+00 2.42929072e+00 2.42505285e+00 2.42082238e+00 + 2.41659928e+00 2.41238355e+00 2.40817518e+00 2.40397415e+00 2.39978044e+00 + 2.39559405e+00 2.39141497e+00 2.38724317e+00 2.38307866e+00 2.37892141e+00 + 2.37477141e+00 2.37062865e+00 2.36649311e+00 2.36236479e+00 2.35824368e+00 + 2.35412975e+00 2.35002300e+00 2.34592341e+00 2.34183098e+00 2.33774568e+00 + 2.33366751e+00 2.32959646e+00 2.32553250e+00 2.32147564e+00 2.31742585e+00 + 2.31338313e+00 2.30934746e+00 2.30531883e+00 2.30129723e+00 2.29728265e+00 + 2.29327507e+00 2.28927447e+00 2.28528086e+00 2.28129422e+00 2.27731453e+00 + 2.27334178e+00 2.26937596e+00 2.26541706e+00 2.26146507e+00 2.25751997e+00 + 2.25358176e+00 2.24965041e+00 2.24572592e+00 2.24180828e+00 2.23789747e+00 + 2.23399349e+00 2.23009631e+00 2.22620593e+00 2.22232235e+00 2.21844553e+00 + 2.21457548e+00 2.21071218e+00 2.20685562e+00 2.20300578e+00 2.19916267e+00 + 2.19532625e+00 2.19149653e+00 2.18767349e+00 2.18385712e+00 2.18004741e+00 + 2.17624434e+00 2.17244791e+00 2.16865810e+00 2.16487490e+00 2.16109831e+00 + 2.15732830e+00 2.15356486e+00 2.14980799e+00 2.14605768e+00 2.14231391e+00 + 2.13857667e+00 2.13484594e+00 2.13112173e+00 2.12740401e+00 2.12369278e+00 + 2.11998803e+00 2.11628973e+00 2.11259789e+00 2.10891249e+00 2.10523352e+00 + 2.10156096e+00 2.09789481e+00 2.09423506e+00 2.09058169e+00 2.08693470e+00 + 2.08329406e+00 2.07965978e+00 2.07603184e+00 2.07241023e+00 2.06879493e+00 + 2.06518594e+00 2.06158325e+00 2.05798684e+00 2.05439671e+00 2.05081284e+00 + 2.04723522e+00 2.04366384e+00 2.04009869e+00 2.03653976e+00 2.03298704e+00 + 2.02944052e+00 2.02590019e+00 2.02236603e+00 2.01883803e+00 2.01531619e+00 + 2.01180050e+00 2.00829094e+00 2.00478749e+00 2.00129017e+00 1.99779894e+00 + 1.99431380e+00 1.99083474e+00 1.98736176e+00 1.98389483e+00 1.98043394e+00 + 1.97697910e+00 1.97353028e+00 1.97008748e+00 1.96665069e+00 1.96321989e+00 + 1.95979507e+00 1.95637623e+00 1.95296335e+00 1.94955643e+00 1.94615545e+00 + 1.94276041e+00 1.93937128e+00 1.93598807e+00 1.93261076e+00 1.92923934e+00 + 1.92587381e+00 1.92251414e+00 1.91916034e+00 1.91581238e+00 1.91247027e+00 + 1.90913398e+00 1.90580352e+00 1.90247887e+00 1.89916001e+00 1.89584695e+00 + 1.89253966e+00 1.88923815e+00 1.88594239e+00 1.88265239e+00 1.87936812e+00 + 1.87608958e+00 1.87281676e+00 1.86954965e+00 1.86628824e+00 1.86303252e+00 + 1.85978248e+00 1.85653811e+00 1.85329940e+00 1.85006634e+00 1.84683892e+00 + 1.84361712e+00 1.84040095e+00 1.83719039e+00 1.83398543e+00 1.83078606e+00 + 1.82759227e+00 1.82440406e+00 1.82122140e+00 1.81804430e+00 1.81487274e+00 + 1.81170671e+00 1.80854620e+00 1.80539121e+00 1.80224172e+00 1.79909773e+00 + 1.79595922e+00 1.79282619e+00 1.78969862e+00 1.78657650e+00 1.78345984e+00 + 1.78034861e+00 1.77724280e+00 1.77414242e+00 1.77104744e+00 1.76795786e+00 + 1.76487368e+00 1.76179487e+00 1.75872143e+00 1.75565336e+00 1.75259063e+00 + 1.74953325e+00 1.74648120e+00 1.74343448e+00 1.74039307e+00 1.73735697e+00 + 1.73432616e+00 1.73130064e+00 1.72828040e+00 1.72526543e+00 1.72225571e+00 + 1.71925125e+00 1.71625203e+00 1.71325804e+00 1.71026927e+00 1.70728571e+00 + 1.70430736e+00 1.70133421e+00 1.69836624e+00 1.69540345e+00 1.69244583e+00 + 1.68949336e+00 1.68654605e+00 1.68360388e+00 1.68066684e+00 1.67773492e+00 + 1.67480812e+00 1.67188642e+00 1.66896982e+00 1.66605831e+00 1.66315188e+00 + 1.66025051e+00 1.65735421e+00 1.65446296e+00 1.65157675e+00 1.64869558e+00 + 1.64581943e+00 1.64294830e+00 1.64008218e+00 1.63722106e+00 1.63436493e+00 + 1.63151378e+00 1.62866760e+00 1.62582639e+00 1.62299013e+00 1.62015883e+00 + 1.61733246e+00 1.61451102e+00 1.61169450e+00 1.60888289e+00 1.60607619e+00 + 1.60327439e+00 1.60047747e+00 1.59768543e+00 1.59489826e+00 1.59211595e+00 + 1.58933850e+00 1.58656589e+00 1.58379812e+00 1.58103517e+00 1.57827704e+00 + 1.57552373e+00 1.57277521e+00 1.57003149e+00 1.56729256e+00 1.56455840e+00 + 1.56182902e+00 1.55910439e+00 1.55638451e+00 1.55366938e+00 1.55095899e+00 + 1.54825332e+00 1.54555237e+00 1.54285614e+00 1.54016460e+00 1.53747776e+00 + 1.53479561e+00 1.53211813e+00 1.52944532e+00 1.52677718e+00 1.52411369e+00 + 1.52145484e+00 1.51880063e+00 1.51615105e+00 1.51350609e+00 1.51086575e+00 + 1.50823001e+00 1.50559886e+00 1.50297231e+00 1.50035033e+00 1.49773293e+00 + 1.49512009e+00 1.49251181e+00 1.48990808e+00 1.48730889e+00 1.48471423e+00 + 1.48212410e+00 1.47953849e+00 1.47695738e+00 1.47438077e+00 1.47180866e+00 + 1.46924103e+00 1.46667789e+00 1.46411921e+00 1.46156499e+00 1.45901522e+00 + 1.45646991e+00 1.45392903e+00 1.45139258e+00 1.44886055e+00 1.44633294e+00 + 1.44380974e+00 1.44129094e+00 1.43877653e+00 1.43626650e+00 1.43376085e+00 + 1.43125957e+00 1.42876265e+00 1.42627008e+00 1.42378186e+00 1.42129798e+00 + 1.41881843e+00 1.41634320e+00 1.41387229e+00 1.41140568e+00 1.40894338e+00 + 1.40648536e+00 1.40403164e+00 1.40158219e+00 1.39913701e+00 1.39669609e+00 + 1.39425943e+00 1.39182702e+00 1.38939885e+00 1.38697491e+00 1.38455519e+00 + 1.38213970e+00 1.37972841e+00 1.37732133e+00 1.37491844e+00 1.37251974e+00 + 1.37012522e+00 1.36773488e+00 1.36534870e+00 1.36296668e+00 1.36058881e+00 + 1.35821509e+00 1.35584550e+00 1.35348004e+00 1.35111870e+00 1.34876148e+00 + 1.34640837e+00 1.34405936e+00 1.34171444e+00 1.33937361e+00 1.33703685e+00 + 1.33470417e+00 1.33237555e+00 1.33005099e+00 1.32773048e+00 1.32541401e+00 + 1.32310158e+00 1.32079318e+00 1.31848880e+00 1.31618843e+00 1.31389207e+00 + 1.31159971e+00 1.30931134e+00 1.30702696e+00 1.30474655e+00 1.30247012e+00 + 1.30019766e+00 1.29792915e+00 1.29566459e+00 1.29340397e+00 1.29114730e+00 + 1.28889455e+00 1.28664572e+00 1.28440081e+00 1.28215981e+00 1.27992271e+00 + 1.27768951e+00 1.27546019e+00 1.27323475e+00 1.27101319e+00 1.26879549e+00 + 1.26658166e+00 1.26437168e+00 1.26216554e+00 1.25996324e+00 1.25776478e+00 + 1.25557014e+00 1.25337932e+00 1.25119231e+00 1.24900911e+00 1.24682971e+00 + 1.24465410e+00 1.24248227e+00 1.24031422e+00 1.23814994e+00 1.23598942e+00 + 1.23383267e+00 1.23167966e+00 1.22953040e+00 1.22738487e+00 1.22524308e+00 + 1.22310501e+00 1.22097065e+00 1.21884001e+00 1.21671307e+00 1.21458982e+00 + 1.21247027e+00 1.21035440e+00 1.20824220e+00 1.20613368e+00 1.20402882e+00 + 1.20192762e+00 1.19983006e+00 1.19773615e+00 1.19564588e+00 1.19355924e+00 + 1.19147622e+00 1.18939681e+00 1.18732102e+00 1.18524883e+00 1.18318024e+00 + 1.18111524e+00 1.17905382e+00 1.17699598e+00 1.17494171e+00 1.17289100e+00 + 1.17084385e+00 1.16880025e+00 1.16676020e+00 1.16472368e+00 1.16269069e+00 + 1.16066123e+00 1.15863529e+00 1.15661286e+00 1.15459393e+00 1.15257850e+00 + 1.15056656e+00 1.14855811e+00 1.14655314e+00 1.14455164e+00 1.14255360e+00 + 1.14055902e+00 1.13856790e+00 1.13658022e+00 1.13459599e+00 1.13261518e+00 + 1.13063780e+00 1.12866385e+00 1.12669330e+00 1.12472616e+00 1.12276243e+00 + 1.12080209e+00 1.11884513e+00 1.11689156e+00 1.11494136e+00 1.11299453e+00 + 1.11105106e+00 1.10911094e+00 1.10717418e+00 1.10524076e+00 1.10331067e+00 + 1.10138391e+00 1.09946048e+00 1.09754036e+00 1.09562355e+00 1.09371004e+00 + 1.09179983e+00 1.08989291e+00 1.08798928e+00 1.08608892e+00 1.08419183e+00 + 1.08229801e+00 1.08040745e+00 1.07852014e+00 1.07663607e+00 1.07475524e+00 + 1.07287764e+00 1.07100327e+00 1.06913211e+00 1.06726417e+00 1.06539944e+00 + 1.06353790e+00 1.06167956e+00 1.05982440e+00 1.05797242e+00 1.05612362e+00 + 1.05427798e+00 1.05243550e+00 1.05059618e+00 1.04876000e+00 1.04692697e+00 + 1.04509706e+00 1.04327029e+00 1.04144663e+00 1.03962609e+00 1.03780866e+00 + 1.03599433e+00 1.03418309e+00 1.03237494e+00 1.03056987e+00 1.02876787e+00 + 1.02696894e+00 1.02517308e+00 1.02338026e+00 1.02159050e+00 1.01980377e+00 + 1.01802009e+00 1.01623942e+00 1.01446178e+00 1.01268715e+00 1.01091553e+00 + 1.00914691e+00 1.00738129e+00 1.00561865e+00 1.00385899e+00 1.00210230e+00 + 1.00034859e+00 9.98597826e-01 9.96850019e-01 9.95105158e-01 9.93363237e-01 + 9.91624247e-01 9.89888182e-01 9.88155036e-01 9.86424801e-01 9.84697470e-01 + 9.82973037e-01 9.81251494e-01 9.79532833e-01 9.77817050e-01 9.76104135e-01 + 9.74394082e-01 9.72686884e-01 9.70982534e-01 9.69281024e-01 9.67582348e-01 + 9.65886497e-01 9.64193466e-01 9.62503247e-01 9.60815831e-01 9.59131213e-01 + 9.57449385e-01 9.55770339e-01 9.54094068e-01 9.52420565e-01 9.50749822e-01 + 9.49081831e-01 9.47416586e-01 9.45754078e-01 9.44094301e-01 9.42437246e-01 + 9.40782906e-01 9.39131273e-01 9.37482340e-01 9.35836098e-01 9.34192541e-01 + 9.32551660e-01 9.30913448e-01 9.29277896e-01 9.27644997e-01 9.26014743e-01 + 9.24387126e-01 9.22762138e-01 9.21139771e-01 9.19520016e-01 9.17902866e-01 + 9.16288312e-01 9.14676347e-01 9.13066962e-01 9.11460149e-01 9.09855898e-01 + 9.08254203e-01 9.06655055e-01 9.05058445e-01 9.03464364e-01 9.01872805e-01 + 9.00283757e-01 8.98697214e-01 8.97113166e-01 8.95531604e-01 8.93952519e-01 + 8.92375903e-01 8.90801747e-01 8.89230041e-01 8.87660777e-01 8.86093946e-01 + 8.84529538e-01 8.82967544e-01 8.81407955e-01 8.79850762e-01 8.78295955e-01 + 8.76743525e-01 8.75193462e-01 8.73645756e-01 8.72100399e-01 8.70557380e-01 + 8.69016689e-01 8.67478317e-01 8.65942254e-01 8.64408489e-01 8.62877013e-01 + 8.61347816e-01 8.59820887e-01 8.58296216e-01 8.56773792e-01 8.55253606e-01 + 8.53735646e-01 8.52219903e-01 8.50706365e-01 8.49195021e-01 8.47685862e-01 + 8.46178875e-01 8.44674050e-01 8.43171375e-01 8.41670840e-01 8.40172434e-01 + 8.38676144e-01 8.37181959e-01 8.35689868e-01 8.34199860e-01 8.32711921e-01 + 8.31226041e-01 8.29742208e-01 8.28260409e-01 8.26780632e-01 8.25302865e-01 + 8.23827096e-01 8.22353311e-01 8.20881500e-01 8.19411648e-01 8.17943742e-01 + 8.16477771e-01 8.15013721e-01 8.13551579e-01 8.12091331e-01 8.10632964e-01 + 8.09176465e-01 8.07721819e-01 8.06269013e-01 8.04818034e-01 8.03368867e-01 + 8.01921497e-01 8.00475911e-01 7.99032095e-01 7.97590032e-01 7.96149710e-01 + 7.94711113e-01 7.93274225e-01 7.91839032e-01 7.90405519e-01 7.88973670e-01 + 7.87543469e-01 7.86114901e-01 7.84687949e-01 7.83262598e-01 7.81838832e-01 + 7.80416634e-01 7.78995987e-01 7.77576875e-01 7.76159281e-01 7.74743187e-01 + 7.73328577e-01 7.71915434e-01 7.70503739e-01 7.69093474e-01 7.67684623e-01 + 7.66277166e-01 7.64871086e-01 7.63466364e-01 7.62062981e-01 7.60660918e-01 + 7.59260157e-01 7.57860677e-01 7.56462460e-01 7.55065486e-01 7.53669734e-01 + 7.52275185e-01 7.50881819e-01 7.49489615e-01 7.48098551e-01 7.46708608e-01 + 7.45319764e-01 7.43931997e-01 7.42545287e-01 7.41159610e-01 7.39774945e-01 + 7.38391270e-01 7.37008562e-01 7.35626797e-01 7.34245954e-01 7.32866009e-01 + 7.31486938e-01 7.30108717e-01 7.28731322e-01 7.27354729e-01 7.25978913e-01 + 7.24603850e-01 7.23229514e-01 7.21855879e-01 7.20482921e-01 7.19110613e-01 + 7.17738929e-01 7.16367842e-01 7.14997325e-01 7.13627352e-01 7.12257895e-01 + 7.10888926e-01 7.09520417e-01 7.08152340e-01 7.06784667e-01 7.05417367e-01 + 7.04050413e-01 7.02683774e-01 7.01317421e-01 6.99951322e-01 6.98585449e-01 + 6.97219770e-01 6.95854253e-01 6.94488867e-01 6.93123580e-01 6.91758361e-01 + 6.90393175e-01 6.89027991e-01 6.87662775e-01 6.86297494e-01 6.84932112e-01 + 6.83566597e-01 6.82200913e-01 6.80835024e-01 6.79468897e-01 6.78102493e-01 + 6.76735778e-01 6.75368715e-01 6.74001266e-01 6.72633394e-01 6.71265061e-01 + 6.69896229e-01 6.68526859e-01 6.67156913e-01 6.65786349e-01 6.64415130e-01 + 6.63043213e-01 6.61670559e-01 6.60297127e-01 6.58922874e-01 6.57547758e-01 + 6.56171737e-01 6.54794769e-01 6.53416809e-01 6.52037814e-01 6.50657740e-01 + 6.49276541e-01 6.47894172e-01 6.46510589e-01 6.45125744e-01 6.43739591e-01 + 6.42352084e-01 6.40963173e-01 6.39572812e-01 6.38180952e-01 6.36787543e-01 + 6.35392537e-01 6.33995883e-01 6.32597530e-01 6.31197429e-01 6.29795527e-01 + 6.28391772e-01 6.26986112e-01 6.25578493e-01 6.24168864e-01 6.22757168e-01 + 6.21343352e-01 6.19927361e-01 6.18509139e-01 6.17088630e-01 6.15665778e-01 + 6.14240525e-01 6.12812814e-01 6.11382586e-01 6.09949783e-01 6.08514346e-01 + 6.07076214e-01 6.05635329e-01 6.04191627e-01 6.02745049e-01 6.01295533e-01 + 5.99843016e-01 5.98387434e-01 5.96928726e-01 5.95466826e-01 5.94001669e-01 + 5.92533192e-01 5.91061329e-01 5.89586012e-01 5.88107176e-01 5.86624753e-01 + 5.85138676e-01 5.83648877e-01 5.82155286e-01 5.80657834e-01 5.79156452e-01 + 5.77651069e-01 5.76141614e-01 5.74628017e-01 5.73110204e-01 5.71588105e-01 + 5.70061645e-01 5.68530753e-01 5.66995353e-01 5.65455372e-01 5.63910735e-01 + 5.62361367e-01 5.60807191e-01 5.59248133e-01 5.57684115e-01 5.56115060e-01 + 5.54540891e-01 5.52961531e-01 5.51376899e-01 5.49786919e-01 5.48191511e-01 + 5.46590595e-01 5.44984092e-01 5.43371922e-01 5.41754003e-01 5.40130255e-01 + 5.38500598e-01 5.36864948e-01 5.35223225e-01 5.33575346e-01 5.31921229e-01 + 5.30260792e-01 5.28593951e-01 5.26920623e-01 5.25240726e-01 5.23554175e-01 + 5.21860887e-01 5.20160779e-01 5.18453766e-01 5.16739764e-01 5.15018690e-01 + 5.13290458e-01 5.11554986e-01 5.09812188e-01 5.08061981e-01 5.06304281e-01 + 5.04539002e-01 5.02766062e-01 5.00985377e-01 4.99196862e-01 4.97400434e-01 + 4.95596010e-01 4.93783507e-01 4.91962842e-01 4.90133933e-01 4.88296696e-01 + 4.86451051e-01 4.84596916e-01 4.82734210e-01 4.80862853e-01 4.78982764e-01 + 4.77093865e-01 4.75196076e-01 4.73289320e-01 4.71373519e-01 4.69448596e-01 + 4.67514476e-01 4.65571083e-01 4.63618344e-01 4.61656185e-01 4.59684533e-01 + 4.57703319e-01 4.55712470e-01 4.53711920e-01 4.51701599e-01 4.49681441e-01 + 4.47651381e-01 4.45611356e-01 4.43561302e-01 4.41501158e-01 4.39430866e-01 + 4.37350368e-01 4.35259607e-01 4.33158529e-01 4.31047082e-01 4.28925214e-01 + 4.26792878e-01 4.24650026e-01 4.22496614e-01 4.20332600e-01 4.18157943e-01 + 4.15972606e-01 4.13776552e-01 4.11569750e-01 4.09352169e-01 4.07123781e-01 + 4.04884561e-01 4.02634487e-01 4.00373539e-01 3.98101701e-01 3.95818960e-01 + 3.93525306e-01 3.91220732e-01 3.88905233e-01 3.86578811e-01 3.84241469e-01 + 3.81893212e-01 3.79534053e-01 3.77164006e-01 3.74783088e-01 3.72391322e-01 + 3.69988735e-01 3.67575357e-01 3.65151223e-01 3.62716372e-01 3.60270847e-01 + 3.57814698e-01 3.55347977e-01 3.52870741e-01 3.50383054e-01 3.47884982e-01 + 3.45376598e-01 3.42857980e-01 3.40329210e-01 3.37790377e-01 3.35241576e-01 + 3.32682904e-01 3.30114466e-01 3.27536375e-01 3.24948745e-01 3.22351700e-01 + 3.19745367e-01 3.17129881e-01 3.14505384e-01 3.11872021e-01 3.09229947e-01 + 3.06579321e-01 3.03920309e-01 3.01253084e-01 2.98577826e-01 2.95894721e-01 + 2.93203963e-01 2.90505751e-01 2.87800293e-01 2.85087802e-01 2.82368500e-01 + 2.79642616e-01 2.76910384e-01 2.74172047e-01 2.71427856e-01 2.68678067e-01 + 2.65922946e-01 2.63162764e-01 2.60397802e-01 2.57628345e-01 2.54854688e-01 + 2.52077134e-01 2.49295990e-01 2.46511575e-01 2.43724211e-01 2.40934231e-01 + 2.38141974e-01 2.35347785e-01 2.32552018e-01 2.29755035e-01 2.26957202e-01 + 2.24158896e-01 2.21360498e-01 2.18562398e-01 2.15764992e-01 2.12968683e-01 + 2.10173881e-01 2.07381001e-01 2.04590467e-01 2.01802708e-01 1.99018159e-01 + 1.96237262e-01 1.93460463e-01 1.90688215e-01 1.87920978e-01 1.85159214e-01 + 1.82403393e-01 1.79653988e-01 1.76911478e-01 1.74176346e-01 1.71449078e-01 + 1.68730166e-01 1.66020105e-01 1.63319392e-01 1.60628529e-01 1.57948020e-01 + 1.55278370e-01 1.52620090e-01 1.49973688e-01 1.47339678e-01 1.44718571e-01 + 1.42110882e-01 1.39517125e-01 1.36937815e-01 1.34373464e-01 1.31824585e-01 + 1.29291692e-01 1.26775293e-01 1.24275896e-01 1.21794008e-01 1.19330131e-01 + 1.16884763e-01 1.14458401e-01 1.12051535e-01 1.09664652e-01 1.07298233e-01 + 1.04952752e-01 1.02628679e-01 1.00326477e-01 9.80465996e-02 9.57894954e-02 + 9.35556034e-02 9.13453541e-02 8.91591692e-02 8.69974604e-02 8.48606296e-02 + 8.27490678e-02 8.06631552e-02 7.86032603e-02 7.65697396e-02 7.45629372e-02 + 7.25831842e-02 7.06307984e-02 6.87060837e-02 6.68093301e-02 6.49408125e-02 + 6.31007911e-02 6.12895107e-02 5.95072002e-02 5.77540725e-02 5.60303240e-02 + 5.43361344e-02 5.26716661e-02 5.10370645e-02 4.94324572e-02 4.78579541e-02 + 4.63136469e-02 4.47996091e-02 4.33158961e-02 4.18625443e-02 4.04395719e-02 + 3.90469781e-02 3.76847434e-02 3.63528295e-02 3.50511794e-02 3.37797170e-02 + 3.25383477e-02 3.13269583e-02 3.01454169e-02 2.89935733e-02 2.78712591e-02 + 2.67782878e-02 2.57144551e-02 2.46795395e-02 2.36733018e-02 2.26954864e-02 + 2.17458207e-02 2.08240164e-02 1.99297691e-02 1.90627592e-02 1.82226524e-02 + 1.74090997e-02 1.66217387e-02 1.58601934e-02 1.51240750e-02 1.44129830e-02 + 1.37265047e-02 1.30642170e-02 1.24256863e-02 1.18104693e-02 1.12181139e-02 + 1.06481597e-02 1.01001386e-02 9.57357566e-03 9.06798994e-03 8.58289491e-03 + 8.11779939e-03 7.67220821e-03 7.24562293e-03 6.83754260e-03 6.44746449e-03 + 6.07488475e-03 5.71929920e-03 5.38020397e-03 5.05709623e-03 4.74947488e-03 + 4.45684120e-03 4.17869948e-03 3.91455770e-03 3.66392815e-03 3.42632795e-03 + 3.20127973e-03 2.98831211e-03 2.78696025e-03 2.59676634e-03 2.41728009e-03 + 2.24805918e-03 2.08866967e-03 1.93868637e-03 1.79769324e-03 1.66528371e-03 + 1.54106094e-03 1.42463814e-03 1.31563879e-03 1.21369684e-03 1.11845687e-03 + 1.02957427e-03 9.46715341e-04 8.69557372e-04 7.97788699e-04 7.31108735e-04 + 6.69227965e-04 6.11867923e-04 5.58761133e-04 5.09651031e-04 4.64291866e-04 + 4.22448569e-04 3.83896609e-04 3.48421824e-04 3.15820237e-04 2.85897853e-04 + 2.58470437e-04 2.33363282e-04 2.10410963e-04 1.89457075e-04 1.70353970e-04 + 1.52962472e-04 1.37151601e-04 1.22798276e-04 1.09787020e-04 9.80096661e-05 + 8.73650533e-05 7.77587264e-05 6.91026357e-05 6.13148375e-05 5.43191980e-05 + 4.80451002e-05 4.24271553e-05 3.74049201e-05 3.29226193e-05 2.89288760e-05 + 2.53764482e-05 2.22219741e-05 1.94257256e-05 1.69513701e-05 1.47657424e-05 + 1.28386246e-05 1.11425370e-05 9.65253704e-06 8.34602949e-06 7.20258529e-06 + 6.20377051e-06 5.33298481e-06 4.57530930e-06 3.91736368e-06 3.34717241e-06 + 2.85403968e-06 2.42843291e-06 2.06187442e-06 1.74684104e-06 1.47667131e-06 + 1.24547984e-06 1.04807854e-06 8.79904460e-07 7.36953603e-07 6.15720668e-07 + 5.13144134e-07 4.26556442e-07 3.53638890e-07 2.92380919e-07 2.41043461e-07 + 1.98126025e-07 1.62337233e-07 1.32568519e-07 1.07870701e-07 8.74331951e-08 + 7.05656042e-08 5.66814737e-08 4.52839905e-08 3.59534344e-08 2.83361988e-08 + 2.21352123e-08 1.71016087e-08 1.30275039e-08 9.73975193e-09 7.09456503e-09 + 4.97289096e-09 3.27645509e-09 1.92438159e-09 8.50318607e-10 0.00000000e+00 + 7.26720922e+00 7.26720922e+00 7.26720922e+00 7.26720922e+00 7.26720922e+00 + 7.26720922e+00 7.26720922e+00 7.26720922e+00 7.26720922e+00 7.26720922e+00 + 7.26720922e+00 7.26720922e+00 7.26720922e+00 7.26720922e+00 7.26720922e+00 + 7.26720922e+00 7.26720922e+00 7.26720922e+00 7.26720922e+00 7.26720922e+00 + 7.26720922e+00 7.26720922e+00 7.26720922e+00 7.26720922e+00 7.26720922e+00 + 7.26720922e+00 7.26720922e+00 7.26720922e+00 7.26720922e+00 7.26720922e+00 + 7.26720922e+00 7.26720922e+00 7.26720922e+00 7.26720922e+00 7.26720922e+00 + 7.26720922e+00 7.26720922e+00 7.26720922e+00 7.26720922e+00 7.26720922e+00 + 7.26720922e+00 7.26720922e+00 7.26720922e+00 7.26720922e+00 7.26720922e+00 + 7.26720922e+00 7.26720922e+00 7.26547462e+00 7.25551627e+00 7.24557157e+00 + 7.23564051e+00 7.22572305e+00 7.21581919e+00 7.20592890e+00 7.19605217e+00 + 7.18618898e+00 7.17633930e+00 7.16650313e+00 7.15668044e+00 7.14687121e+00 + 7.13707542e+00 7.12729307e+00 7.11752412e+00 7.10776856e+00 7.09802637e+00 + 7.08829753e+00 7.07858203e+00 7.06887985e+00 7.05919096e+00 7.04951536e+00 + 7.03985301e+00 7.03020391e+00 7.02056804e+00 7.01094537e+00 7.00133589e+00 + 6.99173958e+00 6.98215643e+00 6.97258641e+00 6.96302950e+00 6.95348570e+00 + 6.94395498e+00 6.93443732e+00 6.92493271e+00 6.91544112e+00 6.90596254e+00 + 6.89649696e+00 6.88704435e+00 6.87760469e+00 6.86817797e+00 6.85876418e+00 + 6.84936328e+00 6.83997528e+00 6.83060014e+00 6.82123785e+00 6.81188839e+00 + 6.80255174e+00 6.79322790e+00 6.78391683e+00 6.77461853e+00 6.76533297e+00 + 6.75606013e+00 6.74680001e+00 6.73755258e+00 6.72831782e+00 6.71909573e+00 + 6.70988627e+00 6.70068943e+00 6.69150520e+00 6.68233356e+00 6.67317449e+00 + 6.66402797e+00 6.65489399e+00 6.64577253e+00 6.63666357e+00 6.62756710e+00 + 6.61848310e+00 6.60941154e+00 6.60035242e+00 6.59130572e+00 6.58227141e+00 + 6.57324949e+00 6.56423994e+00 6.55524273e+00 6.54625785e+00 6.53728530e+00 + 6.52832503e+00 6.51937705e+00 6.51044134e+00 6.50151787e+00 6.49260663e+00 + 6.48370761e+00 6.47482078e+00 6.46594614e+00 6.45708366e+00 6.44823332e+00 + 6.43939512e+00 6.43056903e+00 6.42175504e+00 6.41295313e+00 6.40416328e+00 + 6.39538548e+00 6.38661971e+00 6.37786596e+00 6.36912420e+00 6.36039443e+00 + 6.35167662e+00 6.34297076e+00 6.33427684e+00 6.32559483e+00 6.31692472e+00 + 6.30826649e+00 6.29962013e+00 6.29098562e+00 6.28236295e+00 6.27375209e+00 + 6.26515304e+00 6.25656577e+00 6.24799028e+00 6.23942654e+00 6.23087453e+00 + 6.22233425e+00 6.21380567e+00 6.20528878e+00 6.19678357e+00 6.18829001e+00 + 6.17980810e+00 6.17133781e+00 6.16287913e+00 6.15443204e+00 6.14599654e+00 + 6.13757259e+00 6.12916019e+00 6.12075932e+00 6.11236997e+00 6.10399211e+00 + 6.09562574e+00 6.08727083e+00 6.07892738e+00 6.07059536e+00 6.06227476e+00 + 6.05396557e+00 6.04566776e+00 6.03738133e+00 6.02910626e+00 6.02084253e+00 + 6.01259012e+00 6.00434903e+00 5.99611923e+00 5.98790071e+00 5.97969346e+00 + 5.97149746e+00 5.96331269e+00 5.95513913e+00 5.94697679e+00 5.93882562e+00 + 5.93068563e+00 5.92255680e+00 5.91443911e+00 5.90633255e+00 5.89823710e+00 + 5.89015274e+00 5.88207946e+00 5.87401725e+00 5.86596609e+00 5.85792597e+00 + 5.84989686e+00 5.84187876e+00 5.83387165e+00 5.82587552e+00 5.81789034e+00 + 5.80991611e+00 5.80195281e+00 5.79400043e+00 5.78605894e+00 5.77812834e+00 + 5.77020861e+00 5.76229973e+00 5.75440170e+00 5.74651449e+00 5.73863809e+00 + 5.73077248e+00 5.72291766e+00 5.71507360e+00 5.70724030e+00 5.69941773e+00 + 5.69160588e+00 5.68380474e+00 5.67601429e+00 5.66823452e+00 5.66046542e+00 + 5.65270696e+00 5.64495913e+00 5.63722193e+00 5.62949533e+00 5.62177932e+00 + 5.61407389e+00 5.60637902e+00 5.59869469e+00 5.59102090e+00 5.58335763e+00 + 5.57570486e+00 5.56806258e+00 5.56043077e+00 5.55280942e+00 5.54519852e+00 + 5.53759805e+00 5.53000800e+00 5.52242836e+00 5.51485910e+00 5.50730021e+00 + 5.49975169e+00 5.49221351e+00 5.48468567e+00 5.47716814e+00 5.46966092e+00 + 5.46216398e+00 5.45467733e+00 5.44720093e+00 5.43973478e+00 5.43227887e+00 + 5.42483317e+00 5.41739768e+00 5.40997238e+00 5.40255726e+00 5.39515230e+00 + 5.38775749e+00 5.38037282e+00 5.37299827e+00 5.36563382e+00 5.35827947e+00 + 5.35093520e+00 5.34360100e+00 5.33627685e+00 5.32896274e+00 5.32165865e+00 + 5.31436457e+00 5.30708050e+00 5.29980640e+00 5.29254228e+00 5.28528811e+00 + 5.27804389e+00 5.27080959e+00 5.26358521e+00 5.25637073e+00 5.24916614e+00 + 5.24197143e+00 5.23478657e+00 5.22761157e+00 5.22044640e+00 5.21329105e+00 + 5.20614551e+00 5.19900976e+00 5.19188379e+00 5.18476759e+00 5.17766114e+00 + 5.17056443e+00 5.16347745e+00 5.15640019e+00 5.14933262e+00 5.14227474e+00 + 5.13522654e+00 5.12818799e+00 5.12115910e+00 5.11413983e+00 5.10713019e+00 + 5.10013016e+00 5.09313972e+00 5.08615886e+00 5.07918757e+00 5.07222583e+00 + 5.06527364e+00 5.05833097e+00 5.05139783e+00 5.04447418e+00 5.03756002e+00 + 5.03065535e+00 5.02376013e+00 5.01687437e+00 5.00999804e+00 5.00313114e+00 + 4.99627365e+00 4.98942556e+00 4.98258686e+00 4.97575753e+00 4.96893756e+00 + 4.96212693e+00 4.95532565e+00 4.94853368e+00 4.94175103e+00 4.93497767e+00 + 4.92821359e+00 4.92145879e+00 4.91471324e+00 4.90797694e+00 4.90124987e+00 + 4.89453203e+00 4.88782339e+00 4.88112394e+00 4.87443368e+00 4.86775259e+00 + 4.86108066e+00 4.85441787e+00 4.84776421e+00 4.84111967e+00 4.83448424e+00 + 4.82785791e+00 4.82124066e+00 4.81463247e+00 4.80803335e+00 4.80144327e+00 + 4.79486222e+00 4.78829019e+00 4.78172717e+00 4.77517315e+00 4.76862811e+00 + 4.76209204e+00 4.75556492e+00 4.74904676e+00 4.74253753e+00 4.73603722e+00 + 4.72954582e+00 4.72306332e+00 4.71658970e+00 4.71012495e+00 4.70366907e+00 + 4.69722204e+00 4.69078384e+00 4.68435446e+00 4.67793390e+00 4.67152214e+00 + 4.66511917e+00 4.65872497e+00 4.65233954e+00 4.64596286e+00 4.63959492e+00 + 4.63323571e+00 4.62688521e+00 4.62054342e+00 4.61421032e+00 4.60788590e+00 + 4.60157015e+00 4.59526306e+00 4.58896461e+00 4.58267479e+00 4.57639360e+00 + 4.57012101e+00 4.56385702e+00 4.55760162e+00 4.55135479e+00 4.54511652e+00 + 4.53888681e+00 4.53266563e+00 4.52645298e+00 4.52024884e+00 4.51405321e+00 + 4.50786607e+00 4.50168741e+00 4.49551722e+00 4.48935549e+00 4.48320220e+00 + 4.47705735e+00 4.47092091e+00 4.46479289e+00 4.45867327e+00 4.45256204e+00 + 4.44645918e+00 4.44036469e+00 4.43427855e+00 4.42820075e+00 4.42213128e+00 + 4.41607014e+00 4.41001730e+00 4.40397275e+00 4.39793649e+00 4.39190851e+00 + 4.38588878e+00 4.37987731e+00 4.37387408e+00 4.36787907e+00 4.36189229e+00 + 4.35591370e+00 4.34994332e+00 4.34398111e+00 4.33802708e+00 4.33208121e+00 + 4.32614349e+00 4.32021390e+00 4.31429245e+00 4.30837911e+00 4.30247387e+00 + 4.29657673e+00 4.29068768e+00 4.28480669e+00 4.27893376e+00 4.27306889e+00 + 4.26721205e+00 4.26136324e+00 4.25552245e+00 4.24968966e+00 4.24386487e+00 + 4.23804806e+00 4.23223922e+00 4.22643835e+00 4.22064543e+00 4.21486044e+00 + 4.20908339e+00 4.20331425e+00 4.19755302e+00 4.19179969e+00 4.18605425e+00 + 4.18031667e+00 4.17458697e+00 4.16886511e+00 4.16315110e+00 4.15744492e+00 + 4.15174656e+00 4.14605602e+00 4.14037327e+00 4.13469831e+00 4.12903113e+00 + 4.12337171e+00 4.11772006e+00 4.11207615e+00 4.10643997e+00 4.10081153e+00 + 4.09519079e+00 4.08957776e+00 4.08397242e+00 4.07837477e+00 4.07278479e+00 + 4.06720247e+00 4.06162780e+00 4.05606077e+00 4.05050137e+00 4.04494960e+00 + 4.03940543e+00 4.03386886e+00 4.02833988e+00 4.02281848e+00 4.01730465e+00 + 4.01179837e+00 4.00629964e+00 4.00080845e+00 3.99532478e+00 3.98984863e+00 + 3.98437999e+00 3.97891884e+00 3.97346517e+00 3.96801899e+00 3.96258026e+00 + 3.95714899e+00 3.95172517e+00 3.94630878e+00 3.94089981e+00 3.93549826e+00 + 3.93010411e+00 3.92471735e+00 3.91933798e+00 3.91396598e+00 3.90860134e+00 + 3.90324406e+00 3.89789412e+00 3.89255151e+00 3.88721623e+00 3.88188825e+00 + 3.87656759e+00 3.87125421e+00 3.86594811e+00 3.86064929e+00 3.85535773e+00 + 3.85007343e+00 3.84479637e+00 3.83952654e+00 3.83426393e+00 3.82900854e+00 + 3.82376035e+00 3.81851935e+00 3.81328554e+00 3.80805890e+00 3.80283942e+00 + 3.79762710e+00 3.79242192e+00 3.78722388e+00 3.78203296e+00 3.77684915e+00 + 3.77167245e+00 3.76650285e+00 3.76134033e+00 3.75618489e+00 3.75103652e+00 + 3.74589520e+00 3.74076093e+00 3.73563369e+00 3.73051348e+00 3.72540029e+00 + 3.72029411e+00 3.71519493e+00 3.71010274e+00 3.70501753e+00 3.69993928e+00 + 3.69486800e+00 3.68980367e+00 3.68474628e+00 3.67969582e+00 3.67465228e+00 + 3.66961566e+00 3.66458594e+00 3.65956311e+00 3.65454717e+00 3.64953810e+00 + 3.64453590e+00 3.63954056e+00 3.63455206e+00 3.62957040e+00 3.62459556e+00 + 3.61962755e+00 3.61466635e+00 3.60971194e+00 3.60476433e+00 3.59982349e+00 + 3.59488943e+00 3.58996214e+00 3.58504159e+00 3.58012779e+00 3.57522073e+00 + 3.57032039e+00 3.56542677e+00 3.56053985e+00 3.55565964e+00 3.55078611e+00 + 3.54591926e+00 3.54105908e+00 3.53620557e+00 3.53135871e+00 3.52651849e+00 + 3.52168490e+00 3.51685794e+00 3.51203759e+00 3.50722386e+00 3.50241672e+00 + 3.49761617e+00 3.49282220e+00 3.48803480e+00 3.48325396e+00 3.47847967e+00 + 3.47371193e+00 3.46895072e+00 3.46419604e+00 3.45944788e+00 3.45470622e+00 + 3.44997107e+00 3.44524240e+00 3.44052021e+00 3.43580450e+00 3.43109525e+00 + 3.42639246e+00 3.42169611e+00 3.41700620e+00 3.41232271e+00 3.40764565e+00 + 3.40297499e+00 3.39831074e+00 3.39365288e+00 3.38900141e+00 3.38435631e+00 + 3.37971758e+00 3.37508520e+00 3.37045918e+00 3.36583949e+00 3.36122614e+00 + 3.35661911e+00 3.35201840e+00 3.34742399e+00 3.34283587e+00 3.33825405e+00 + 3.33367851e+00 3.32910924e+00 3.32454623e+00 3.31998947e+00 3.31543897e+00 + 3.31089469e+00 3.30635665e+00 3.30182483e+00 3.29729922e+00 3.29277981e+00 + 3.28826659e+00 3.28375956e+00 3.27925871e+00 3.27476403e+00 3.27027551e+00 + 3.26579314e+00 3.26131692e+00 3.25684683e+00 3.25238286e+00 3.24792502e+00 + 3.24347329e+00 3.23902765e+00 3.23458811e+00 3.23015466e+00 3.22572728e+00 + 3.22130597e+00 3.21689072e+00 3.21248153e+00 3.20807837e+00 3.20368125e+00 + 3.19929016e+00 3.19490509e+00 3.19052602e+00 3.18615296e+00 3.18178590e+00 + 3.17742481e+00 3.17306971e+00 3.16872058e+00 3.16437740e+00 3.16004018e+00 + 3.15570891e+00 3.15138357e+00 3.14706416e+00 3.14275066e+00 3.13844309e+00 + 3.13414141e+00 3.12984563e+00 3.12555574e+00 3.12127173e+00 3.11699360e+00 + 3.11272132e+00 3.10845490e+00 3.10419433e+00 3.09993960e+00 3.09569070e+00 + 3.09144762e+00 3.08721036e+00 3.08297891e+00 3.07875326e+00 3.07453340e+00 + 3.07031932e+00 3.06611102e+00 3.06190849e+00 3.05771171e+00 3.05352069e+00 + 3.04933542e+00 3.04515588e+00 3.04098207e+00 3.03681398e+00 3.03265160e+00 + 3.02849493e+00 3.02434395e+00 3.02019867e+00 3.01605906e+00 3.01192513e+00 + 3.00779687e+00 3.00367426e+00 2.99955731e+00 2.99544600e+00 2.99134032e+00 + 2.98724027e+00 2.98314584e+00 2.97905702e+00 2.97497381e+00 2.97089619e+00 + 2.96682417e+00 2.96275772e+00 2.95869685e+00 2.95464154e+00 2.95059179e+00 + 2.94654759e+00 2.94250894e+00 2.93847582e+00 2.93444823e+00 2.93042616e+00 + 2.92640960e+00 2.92239855e+00 2.91839299e+00 2.91439293e+00 2.91039835e+00 + 2.90640924e+00 2.90242560e+00 2.89844742e+00 2.89447469e+00 2.89050741e+00 + 2.88654557e+00 2.88258916e+00 2.87863817e+00 2.87469259e+00 2.87075242e+00 + 2.86681766e+00 2.86288828e+00 2.85896429e+00 2.85504569e+00 2.85113245e+00 + 2.84722457e+00 2.84332205e+00 2.83942488e+00 2.83553306e+00 2.83164656e+00 + 2.82776540e+00 2.82388955e+00 2.82001901e+00 2.81615378e+00 2.81229385e+00 + 2.80843921e+00 2.80458985e+00 2.80074577e+00 2.79690696e+00 2.79307341e+00 + 2.78924511e+00 2.78542206e+00 2.78160425e+00 2.77779168e+00 2.77398432e+00 + 2.77018219e+00 2.76638527e+00 2.76259355e+00 2.75880703e+00 2.75502570e+00 + 2.75124956e+00 2.74747859e+00 2.74371278e+00 2.73995214e+00 2.73619666e+00 + 2.73244632e+00 2.72870112e+00 2.72496105e+00 2.72122611e+00 2.71749629e+00 + 2.71377158e+00 2.71005198e+00 2.70633748e+00 2.70262806e+00 2.69892374e+00 + 2.69522448e+00 2.69153030e+00 2.68784118e+00 2.68415712e+00 2.68047811e+00 + 2.67680414e+00 2.67313521e+00 2.66947130e+00 2.66581242e+00 2.66215855e+00 + 2.65850969e+00 2.65486584e+00 2.65122697e+00 2.64759309e+00 2.64396420e+00 + 2.64034028e+00 2.63672132e+00 2.63310733e+00 2.62949829e+00 2.62589419e+00 + 2.62229504e+00 2.61870082e+00 2.61511152e+00 2.61152715e+00 2.60794768e+00 + 2.60437313e+00 2.60080347e+00 2.59723871e+00 2.59367883e+00 2.59012383e+00 + 2.58657371e+00 2.58302845e+00 2.57948804e+00 2.57595250e+00 2.57242179e+00 + 2.56889593e+00 2.56537490e+00 2.56185870e+00 2.55834731e+00 2.55484074e+00 + 2.55133897e+00 2.54784201e+00 2.54434983e+00 2.54086245e+00 2.53737984e+00 + 2.53390201e+00 2.53042894e+00 2.52696064e+00 2.52349708e+00 2.52003828e+00 + 2.51658422e+00 2.51313489e+00 2.50969028e+00 2.50625040e+00 2.50281524e+00 + 2.49938478e+00 2.49595902e+00 2.49253796e+00 2.48912159e+00 2.48570990e+00 + 2.48230289e+00 2.47890055e+00 2.47550287e+00 2.47210985e+00 2.46872148e+00 + 2.46533775e+00 2.46195866e+00 2.45858420e+00 2.45521437e+00 2.45184916e+00 + 2.44848856e+00 2.44513256e+00 2.44178116e+00 2.43843436e+00 2.43509215e+00 + 2.43175451e+00 2.42842146e+00 2.42509297e+00 2.42176904e+00 2.41844967e+00 + 2.41513484e+00 2.41182456e+00 2.40851882e+00 2.40521761e+00 2.40192092e+00 + 2.39862876e+00 2.39534110e+00 2.39205795e+00 2.38877930e+00 2.38550515e+00 + 2.38223548e+00 2.37897029e+00 2.37570958e+00 2.37245334e+00 2.36920156e+00 + 2.36595424e+00 2.36271137e+00 2.35947295e+00 2.35623896e+00 2.35300940e+00 + 2.34978428e+00 2.34656357e+00 2.34334728e+00 2.34013539e+00 2.33692791e+00 + 2.33372482e+00 2.33052613e+00 2.32733182e+00 2.32414188e+00 2.32095632e+00 + 2.31777513e+00 2.31459830e+00 2.31142582e+00 2.30825768e+00 2.30509389e+00 + 2.30193444e+00 2.29877932e+00 2.29562852e+00 2.29248204e+00 2.28933988e+00 + 2.28620202e+00 2.28306846e+00 2.27993919e+00 2.27681422e+00 2.27369353e+00 + 2.27057711e+00 2.26746497e+00 2.26435709e+00 2.26125348e+00 2.25815411e+00 + 2.25505900e+00 2.25196812e+00 2.24888149e+00 2.24579908e+00 2.24272090e+00 + 2.23964694e+00 2.23657719e+00 2.23351165e+00 2.23045031e+00 2.22739317e+00 + 2.22434021e+00 2.22129145e+00 2.21824686e+00 2.21520644e+00 2.21217019e+00 + 2.20913810e+00 2.20611017e+00 2.20308639e+00 2.20006675e+00 2.19705125e+00 + 2.19403989e+00 2.19103265e+00 2.18802953e+00 2.18503053e+00 2.18203564e+00 + 2.17904486e+00 2.17605817e+00 2.17307558e+00 2.17009708e+00 2.16712266e+00 + 2.16415232e+00 2.16118604e+00 2.15822384e+00 2.15526569e+00 2.15231160e+00 + 2.14936155e+00 2.14641555e+00 2.14347359e+00 2.14053566e+00 2.13760176e+00 + 2.13467188e+00 2.13174601e+00 2.12882416e+00 2.12590631e+00 2.12299245e+00 + 2.12008260e+00 2.11717673e+00 2.11427484e+00 2.11137693e+00 2.10848300e+00 + 2.10559303e+00 2.10270702e+00 2.09982496e+00 2.09694686e+00 2.09407270e+00 + 2.09120248e+00 2.08833620e+00 2.08547384e+00 2.08261541e+00 2.07976090e+00 + 2.07691029e+00 2.07406360e+00 2.07122080e+00 2.06838191e+00 2.06554690e+00 + 2.06271578e+00 2.05988854e+00 2.05706518e+00 2.05424568e+00 2.05143005e+00 + 2.04861828e+00 2.04581036e+00 2.04300629e+00 2.04020607e+00 2.03740968e+00 + 2.03461713e+00 2.03182840e+00 2.02904350e+00 2.02626241e+00 2.02348513e+00 + 2.02071167e+00 2.01794200e+00 2.01517613e+00 2.01241405e+00 2.00965575e+00 + 2.00690124e+00 2.00415050e+00 2.00140353e+00 1.99866033e+00 1.99592089e+00 + 1.99318520e+00 1.99045326e+00 1.98772507e+00 1.98500061e+00 1.98227989e+00 + 1.97956290e+00 1.97684963e+00 1.97414009e+00 1.97143425e+00 1.96873213e+00 + 1.96603370e+00 1.96333898e+00 1.96064795e+00 1.95796061e+00 1.95527695e+00 + 1.95259697e+00 1.94992066e+00 1.94724803e+00 1.94457905e+00 1.94191373e+00 + 1.93925207e+00 1.93659405e+00 1.93393968e+00 1.93128895e+00 1.92864185e+00 + 1.92599837e+00 1.92335853e+00 1.92072229e+00 1.91808968e+00 1.91546067e+00 + 1.91283526e+00 1.91021345e+00 1.90759524e+00 1.90498061e+00 1.90236957e+00 + 1.89976211e+00 1.89715822e+00 1.89455790e+00 1.89196114e+00 1.88936795e+00 + 1.88677830e+00 1.88419221e+00 1.88160966e+00 1.87903066e+00 1.87645518e+00 + 1.87388324e+00 1.87131482e+00 1.86874992e+00 1.86618854e+00 1.86363067e+00 + 1.86107630e+00 1.85852544e+00 1.85597807e+00 1.85343419e+00 1.85089380e+00 + 1.84835689e+00 1.84582346e+00 1.84329350e+00 1.84076701e+00 1.83824398e+00 + 1.83572441e+00 1.83320830e+00 1.83069563e+00 1.82818641e+00 1.82568062e+00 + 1.82317827e+00 1.82067935e+00 1.81818386e+00 1.81569178e+00 1.81320312e+00 + 1.81071788e+00 1.80823603e+00 1.80575759e+00 1.80328255e+00 1.80081090e+00 + 1.79834264e+00 1.79587776e+00 1.79341626e+00 1.79095813e+00 1.78850337e+00 + 1.78605198e+00 1.78360395e+00 1.78115927e+00 1.77871794e+00 1.77627996e+00 + 1.77384532e+00 1.77141402e+00 1.76898605e+00 1.76656141e+00 1.76414009e+00 + 1.76172209e+00 1.75930740e+00 1.75689602e+00 1.75448795e+00 1.75208318e+00 + 1.74968171e+00 1.74728353e+00 1.74488863e+00 1.74249702e+00 1.74010868e+00 + 1.73772362e+00 1.73534183e+00 1.73296330e+00 1.73058803e+00 1.72821602e+00 + 1.72584726e+00 1.72348174e+00 1.72111947e+00 1.71876044e+00 1.71640463e+00 + 1.71405206e+00 1.71170272e+00 1.70935659e+00 1.70701368e+00 1.70467398e+00 + 1.70233748e+00 1.70000419e+00 1.69767410e+00 1.69534720e+00 1.69302349e+00 + 1.69070296e+00 1.68838562e+00 1.68607145e+00 1.68376046e+00 1.68145263e+00 + 1.67914796e+00 1.67684646e+00 1.67454810e+00 1.67225290e+00 1.66996085e+00 + 1.66767193e+00 1.66538615e+00 1.66310351e+00 1.66082399e+00 1.65854760e+00 + 1.65627433e+00 1.65400418e+00 1.65173713e+00 1.64947320e+00 1.64721236e+00 + 1.64495463e+00 1.64269999e+00 1.64044844e+00 1.63819998e+00 1.63595460e+00 + 1.63371229e+00 1.63147306e+00 1.62923690e+00 1.62700380e+00 1.62477377e+00 + 1.62254679e+00 1.62032286e+00 1.61810198e+00 1.61588415e+00 1.61366935e+00 + 1.61145759e+00 1.60924887e+00 1.60704317e+00 1.60484049e+00 1.60264083e+00 + 1.60044419e+00 1.59825056e+00 1.59605993e+00 1.59387231e+00 1.59168769e+00 + 1.58950606e+00 1.58732742e+00 1.58515176e+00 1.58297909e+00 1.58080940e+00 + 1.57864268e+00 1.57647893e+00 1.57431814e+00 1.57216032e+00 1.57000545e+00 + 1.56785354e+00 1.56570458e+00 1.56355856e+00 1.56141549e+00 1.55927535e+00 + 1.55713815e+00 1.55500387e+00 1.55287252e+00 1.55074409e+00 1.54861858e+00 + 1.54649598e+00 1.54437630e+00 1.54225951e+00 1.54014563e+00 1.53803465e+00 + 1.53592656e+00 1.53382135e+00 1.53171904e+00 1.52961960e+00 1.52752305e+00 + 1.52542936e+00 1.52333855e+00 1.52125060e+00 1.51916551e+00 1.51708329e+00 + 1.51500391e+00 1.51292739e+00 1.51085371e+00 1.50878287e+00 1.50671488e+00 + 1.50464971e+00 1.50258738e+00 1.50052788e+00 1.49847119e+00 1.49641733e+00 + 1.49436628e+00 1.49231804e+00 1.49027261e+00 1.48822999e+00 1.48619016e+00 + 1.48415313e+00 1.48211889e+00 1.48008744e+00 1.47805877e+00 1.47603289e+00 + 1.47400978e+00 1.47198944e+00 1.46997187e+00 1.46795707e+00 1.46594503e+00 + 1.46393575e+00 1.46192922e+00 1.45992544e+00 1.45792441e+00 1.45592612e+00 + 1.45393057e+00 1.45193776e+00 1.44994768e+00 1.44796032e+00 1.44597569e+00 + 1.44399378e+00 1.44201458e+00 1.44003810e+00 1.43806433e+00 1.43609326e+00 + 1.43412489e+00 1.43215923e+00 1.43019625e+00 1.42823597e+00 1.42627837e+00 + 1.42432346e+00 1.42237122e+00 1.42042167e+00 1.41847478e+00 1.41653056e+00 + 1.41458901e+00 1.41265012e+00 1.41071388e+00 1.40878030e+00 1.40684937e+00 + 1.40492109e+00 1.40299545e+00 1.40107245e+00 1.39915208e+00 1.39723435e+00 + 1.39531925e+00 1.39340677e+00 1.39149691e+00 1.38958967e+00 1.38768504e+00 + 1.38578302e+00 1.38388362e+00 1.38198681e+00 1.38009260e+00 1.37820099e+00 + 1.37631198e+00 1.37442555e+00 1.37254171e+00 1.37066045e+00 1.36878177e+00 + 1.36690566e+00 1.36503213e+00 1.36316116e+00 1.36129276e+00 1.35942691e+00 + 1.35756363e+00 1.35570290e+00 1.35384472e+00 1.35198909e+00 1.35013600e+00 + 1.34828545e+00 1.34643743e+00 1.34459195e+00 1.34274900e+00 1.34090858e+00 + 1.33907068e+00 1.33723529e+00 1.33540242e+00 1.33357207e+00 1.33174422e+00 + 1.32991888e+00 1.32809604e+00 1.32627570e+00 1.32445786e+00 1.32264250e+00 + 1.32082964e+00 1.31901925e+00 1.31721135e+00 1.31540593e+00 1.31360298e+00 + 1.31180251e+00 1.31000450e+00 1.30820896e+00 1.30641587e+00 1.30462525e+00 + 1.30283708e+00 1.30105136e+00 1.29926808e+00 1.29748726e+00 1.29570887e+00 + 1.29393292e+00 1.29215940e+00 1.29038832e+00 1.28861966e+00 1.28685343e+00 + 1.28508962e+00 1.28332822e+00 1.28156924e+00 1.27981267e+00 1.27805851e+00 + 1.27630675e+00 1.27455740e+00 1.27281044e+00 1.27106587e+00 1.26932370e+00 + 1.26758392e+00 1.26584651e+00 1.26411150e+00 1.26237885e+00 1.26064859e+00 + 1.25892069e+00 1.25719517e+00 1.25547201e+00 1.25375121e+00 1.25203276e+00 + 1.25031668e+00 1.24860295e+00 1.24689156e+00 1.24518252e+00 1.24347583e+00 + 1.24177147e+00 1.24006945e+00 1.23836976e+00 1.23667240e+00 1.23497737e+00 + 1.23328466e+00 1.23159427e+00 1.22990620e+00 1.22822044e+00 1.22653699e+00 + 1.22485585e+00 1.22317702e+00 1.22150048e+00 1.21982625e+00 1.21815430e+00 + 1.21648465e+00 1.21481729e+00 1.21315222e+00 1.21148942e+00 1.20982891e+00 + 1.20817067e+00 1.20651470e+00 1.20486100e+00 1.20320957e+00 1.20156041e+00 + 1.19991350e+00 1.19826885e+00 1.19662646e+00 1.19498631e+00 1.19334842e+00 + 1.19171277e+00 1.19007936e+00 1.18844819e+00 1.18681926e+00 1.18519255e+00 + 1.18356808e+00 1.18194584e+00 1.18032582e+00 1.17870801e+00 1.17709243e+00 + 1.17547906e+00 1.17386790e+00 1.17225895e+00 1.17065221e+00 1.16904767e+00 + 1.16744532e+00 1.16584518e+00 1.16424722e+00 1.16265146e+00 1.16105788e+00 + 1.15946649e+00 1.15787728e+00 1.15629025e+00 1.15470539e+00 1.15312271e+00 + 1.15154219e+00 1.14996384e+00 1.14838766e+00 1.14681363e+00 1.14524176e+00 + 1.14367205e+00 1.14210449e+00 1.14053907e+00 1.13897581e+00 1.13741468e+00 + 1.13585569e+00 1.13429885e+00 1.13274413e+00 1.13119155e+00 1.12964109e+00 + 1.12809276e+00 1.12654655e+00 1.12500246e+00 1.12346049e+00 1.12192063e+00 + 1.12038288e+00 1.11884724e+00 1.11731370e+00 1.11578227e+00 1.11425294e+00 + 1.11272570e+00 1.11120055e+00 1.10967749e+00 1.10815653e+00 1.10663764e+00 + 1.10512084e+00 1.10360612e+00 1.10209347e+00 1.10058290e+00 1.09907440e+00 + 1.09756796e+00 1.09606359e+00 1.09456129e+00 1.09306104e+00 1.09156284e+00 + 1.09006670e+00 1.08857262e+00 1.08708058e+00 1.08559058e+00 1.08410263e+00 + 1.08261671e+00 1.08113284e+00 1.07965099e+00 1.07817118e+00 1.07669340e+00 + 1.07521764e+00 1.07374390e+00 1.07227218e+00 1.07080249e+00 1.06933480e+00 + 1.06786913e+00 1.06640547e+00 1.06494381e+00 1.06348415e+00 1.06202650e+00 + 1.06057084e+00 1.05911718e+00 1.05766552e+00 1.05621584e+00 1.05476815e+00 + 1.05332244e+00 1.05187871e+00 1.05043697e+00 1.04899720e+00 1.04755940e+00 + 1.04612357e+00 1.04468971e+00 1.04325782e+00 1.04182789e+00 1.04039992e+00 + 1.03897391e+00 1.03754985e+00 1.03612774e+00 1.03470758e+00 1.03328937e+00 + 1.03187310e+00 1.03045878e+00 1.02904639e+00 1.02763594e+00 1.02622742e+00 + 1.02482083e+00 1.02341617e+00 1.02201344e+00 1.02061262e+00 1.01921373e+00 + 1.01781676e+00 1.01642170e+00 1.01502855e+00 1.01363731e+00 1.01224798e+00 + 1.01086055e+00 1.00947502e+00 1.00809140e+00 1.00670967e+00 1.00532983e+00 + 1.00395188e+00 1.00257583e+00 1.00120166e+00 9.99829370e-01 9.98458963e-01 + 9.97090435e-01 9.95723783e-01 9.94359004e-01 9.92996095e-01 9.91635054e-01 + 9.90275879e-01 9.88918567e-01 9.87563115e-01 9.86209521e-01 9.84857782e-01 + 9.83507896e-01 9.82159860e-01 9.80813671e-01 9.79469328e-01 9.78126827e-01 + 9.76786166e-01 9.75447343e-01 9.74110354e-01 9.72775198e-01 9.71441872e-01 + 9.70110374e-01 9.68780700e-01 9.67452849e-01 9.66126818e-01 9.64802604e-01 + 9.63480205e-01 9.62159618e-01 9.60840841e-01 9.59523872e-01 9.58208708e-01 + 9.56895346e-01 9.55583784e-01 9.54274020e-01 9.52966051e-01 9.51659874e-01 + 9.50355488e-01 9.49052889e-01 9.47752076e-01 9.46453045e-01 9.45155794e-01 + 9.43860322e-01 9.42566624e-01 9.41274700e-01 9.39984546e-01 9.38696161e-01 + 9.37409540e-01 9.36124684e-01 9.34841588e-01 9.33560250e-01 9.32280668e-01 + 9.31002840e-01 9.29726763e-01 9.28452435e-01 9.27179852e-01 9.25909014e-01 + 9.24639917e-01 9.23372560e-01 9.22106939e-01 9.20843052e-01 9.19580897e-01 + 9.18320471e-01 9.17061773e-01 9.15804799e-01 9.14549547e-01 9.13296016e-01 + 9.12044202e-01 9.10794103e-01 9.09545716e-01 9.08299041e-01 9.07054073e-01 + 9.05810811e-01 9.04569252e-01 9.03329394e-01 9.02091234e-01 9.00854771e-01 + 8.99620001e-01 8.98386923e-01 8.97155534e-01 8.95925831e-01 8.94697813e-01 + 8.93471477e-01 8.92246821e-01 8.91023842e-01 8.89802537e-01 8.88582905e-01 + 8.87364944e-01 8.86148650e-01 8.84934022e-01 8.83721057e-01 8.82509753e-01 + 8.81300107e-01 8.80092117e-01 8.78885781e-01 8.77681097e-01 8.76478061e-01 + 8.75276672e-01 8.74076928e-01 8.72878825e-01 8.71682362e-01 8.70487536e-01 + 8.69294345e-01 8.68102787e-01 8.66912859e-01 8.65724558e-01 8.64537884e-01 + 8.63352832e-01 8.62169400e-01 8.60987588e-01 8.59807391e-01 8.58628807e-01 + 8.57451835e-01 8.56276472e-01 8.55102714e-01 8.53930561e-01 8.52760010e-01 + 8.51591058e-01 8.50423702e-01 8.49257941e-01 8.48093771e-01 8.46931191e-01 + 8.45770199e-01 8.44610790e-01 8.43452964e-01 8.42296717e-01 8.41142048e-01 + 8.39988953e-01 8.38837431e-01 8.37687478e-01 8.36539092e-01 8.35392271e-01 + 8.34247012e-01 8.33103313e-01 8.31961170e-01 8.30820582e-01 8.29681546e-01 + 8.28544059e-01 8.27408118e-01 8.26273721e-01 8.25140866e-01 8.24009549e-01 + 8.22879768e-01 8.21751519e-01 8.20624802e-01 8.19499611e-01 8.18375946e-01 + 8.17253803e-01 8.16133178e-01 8.15014070e-01 8.13896475e-01 8.12780391e-01 + 8.11665814e-01 8.10552741e-01 8.09441170e-01 8.08331097e-01 8.07222519e-01 + 8.06115433e-01 8.05009836e-01 8.03905725e-01 8.02803096e-01 8.01701946e-01 + 8.00602272e-01 7.99504070e-01 7.98407337e-01 7.97312069e-01 7.96218263e-01 + 7.95125915e-01 7.94035021e-01 7.92945578e-01 7.91857581e-01 7.90771028e-01 + 7.89685913e-01 7.88602232e-01 7.87519983e-01 7.86439160e-01 7.85359759e-01 + 7.84281776e-01 7.83205206e-01 7.82130045e-01 7.81056287e-01 7.79983929e-01 + 7.78912966e-01 7.77843391e-01 7.76775201e-01 7.75708390e-01 7.74642952e-01 + 7.73578882e-01 7.72516175e-01 7.71454824e-01 7.70394824e-01 7.69336169e-01 + 7.68278852e-01 7.67222866e-01 7.66168206e-01 7.65114865e-01 7.64062835e-01 + 7.63012109e-01 7.61962680e-01 7.60914541e-01 7.59867683e-01 7.58822098e-01 + 7.57777779e-01 7.56734717e-01 7.55692902e-01 7.54652326e-01 7.53612980e-01 + 7.52574853e-01 7.51537937e-01 7.50502220e-01 7.49467692e-01 7.48434342e-01 + 7.47402159e-01 7.46371131e-01 7.45341247e-01 7.44312493e-01 7.43284857e-01 + 7.42258326e-01 7.41232886e-01 7.40208523e-01 7.39185222e-01 7.38162968e-01 + 7.37141745e-01 7.36121538e-01 7.35102329e-01 7.34084101e-01 7.33066837e-01 + 7.32050516e-01 7.31035122e-01 7.30020632e-01 7.29007028e-01 7.27994287e-01 + 7.26982387e-01 7.25971306e-01 7.24961020e-01 7.23951505e-01 7.22942734e-01 + 7.21934682e-01 7.20927321e-01 7.19920623e-01 7.18914559e-01 7.17909098e-01 + 7.16904209e-01 7.15899860e-01 7.14896016e-01 7.13892643e-01 7.12889703e-01 + 7.11887161e-01 7.10884976e-01 7.09883108e-01 7.08881516e-01 7.07880155e-01 + 7.06878980e-01 7.05877946e-01 7.04877003e-01 7.03876101e-01 7.02875188e-01 + 7.01874211e-01 7.00873112e-01 6.99871834e-01 6.98870317e-01 6.97868499e-01 + 6.96866313e-01 6.95863694e-01 6.94860571e-01 6.93856872e-01 6.92852523e-01 + 6.91847445e-01 6.90841558e-01 6.89834779e-01 6.88827020e-01 6.87818192e-01 + 6.86808201e-01 6.85796952e-01 6.84784343e-01 6.83770270e-01 6.82754627e-01 + 6.81737300e-01 6.80718175e-01 6.79697130e-01 6.78674042e-01 6.77648780e-01 + 6.76621212e-01 6.75591198e-01 6.74558594e-01 6.73523250e-01 6.72485013e-01 + 6.71443720e-01 6.70399207e-01 6.69351300e-01 6.68299821e-01 6.67244585e-01 + 6.66185399e-01 6.65122064e-01 6.64054373e-01 6.62982114e-01 6.61905065e-01 + 6.60822995e-01 6.59735668e-01 6.58642836e-01 6.57544244e-01 6.56439627e-01 + 6.55328713e-01 6.54211215e-01 6.53086841e-01 6.51955286e-01 6.50816235e-01 + 6.49669360e-01 6.48514324e-01 6.47350776e-01 6.46178354e-01 6.44996683e-01 + 6.43805374e-01 6.42604025e-01 6.41392220e-01 6.40169528e-01 6.38935504e-01 + 6.37689687e-01 6.36431601e-01 6.35160751e-01 6.33876629e-01 6.32578706e-01 + 6.31266438e-01 6.29939261e-01 6.28596592e-01 6.27237829e-01 6.25862351e-01 + 6.24469514e-01 6.23058654e-01 6.21629085e-01 6.20180101e-01 6.18710969e-01 + 6.17220935e-01 6.15709221e-01 6.14175024e-01 6.12617513e-01 6.11035836e-01 + 6.09429111e-01 6.07796429e-01 6.06136855e-01 6.04449424e-01 6.02733144e-01 + 6.00986991e-01 5.99209913e-01 5.97400828e-01 5.95558621e-01 5.93682146e-01 + 5.91770226e-01 5.89821652e-01 5.87835180e-01 5.85809535e-01 5.83743407e-01 + 5.81635454e-01 5.79484299e-01 5.77288531e-01 5.75046705e-01 5.72757343e-01 + 5.70418930e-01 5.68029921e-01 5.65588735e-01 5.63093758e-01 5.60543345e-01 + 5.57935816e-01 5.55269463e-01 5.52542545e-01 5.49753293e-01 5.46899910e-01 + 5.43980570e-01 5.40993427e-01 5.37936605e-01 5.34808213e-01 5.31606337e-01 + 5.28329048e-01 5.24974404e-01 5.21540450e-01 5.18025227e-01 5.14426771e-01 + 5.10743118e-01 5.06972310e-01 5.03112399e-01 4.99161450e-01 4.95117550e-01 + 4.90978812e-01 4.86743382e-01 4.82409446e-01 4.77975236e-01 4.73439039e-01 + 4.68799206e-01 4.64054160e-01 4.59202405e-01 4.54242535e-01 4.49173247e-01 + 4.43993352e-01 4.38701781e-01 4.33297606e-01 4.27780043e-01 4.22148472e-01 + 4.16402449e-01 4.10541717e-01 4.04566224e-01 3.98476134e-01 3.92271848e-01 + 3.85954012e-01 3.79523540e-01 3.72981624e-01 3.66329751e-01 3.59569723e-01 + 3.52703668e-01 3.45734056e-01 3.38663718e-01 3.31495853e-01 3.24234051e-01 + 3.16882299e-01 3.09444996e-01 3.01926963e-01 2.94333453e-01 2.86670156e-01 + 2.78943210e-01 2.71159201e-01 2.63325162e-01 2.55448579e-01 2.47537380e-01 + 2.39599931e-01 2.31645027e-01 2.23681875e-01 2.15720077e-01 2.07769608e-01 + 1.99840793e-01 1.91944274e-01 1.84090973e-01 1.76292060e-01 1.68558901e-01 + 1.60903017e-01 1.53336024e-01 1.45869584e-01 1.38515337e-01 1.31284838e-01 + 1.24189492e-01 1.17240477e-01 1.10448676e-01 1.03824595e-01 9.73782939e-02 + 9.11193025e-02 8.50565488e-02 7.91982826e-02 7.35520037e-02 6.81243941e-02 + 6.29212538e-02 5.79474436e-02 5.32068346e-02 4.87022656e-02 4.44355099e-02 + 4.04072521e-02 3.66170759e-02 3.30634633e-02 2.97438060e-02 2.66544291e-02 + 2.37906280e-02 2.11467162e-02 1.87160870e-02 1.64912847e-02 1.44640875e-02 + 1.26255995e-02 1.09663495e-02 9.47639731e-03 8.14544397e-03 6.96294412e-03 + 5.91821927e-03 5.00056914e-03 4.19937944e-03 3.50422377e-03 2.90495820e-03 + 2.39180651e-03 1.95543501e-03 1.58701559e-03 1.27827650e-03 1.02154025e-03 + 8.09748707e-04 6.36475675e-04 4.95927573e-04 3.82933206e-04 2.92923820e-04 + 2.21904822e-04 1.66420727e-04 1.23514936e-04 9.06859386e-05 6.58415198e-05 + 4.72523917e-05 3.35065418e-05 2.34653835e-05 1.62225835e-05 1.10662166e-05 + 7.44467847e-06 4.93658073e-06 3.22467124e-06 2.07366607e-06 1.31176054e-06 + 8.15498138e-07 4.97621665e-07 2.97504885e-07 1.73762522e-07 9.86548547e-08 + 5.39360246e-08 2.78365328e-08 1.29159488e-08 4.56757882e-09 0.00000000e+00 + 2.00759391e+01 2.00759391e+01 2.00759391e+01 2.00759391e+01 2.00759391e+01 + 2.00759391e+01 2.00759391e+01 2.00759391e+01 2.00759391e+01 2.00759391e+01 + 2.00759391e+01 2.00759391e+01 2.00759391e+01 2.00759391e+01 2.00759391e+01 + 2.00759391e+01 2.00759391e+01 2.00759391e+01 2.00759391e+01 2.00759391e+01 + 2.00759391e+01 2.00759391e+01 2.00759391e+01 2.00759391e+01 2.00759391e+01 + 2.00759391e+01 2.00759391e+01 2.00759391e+01 2.00759391e+01 2.00759391e+01 + 2.00759391e+01 2.00759391e+01 2.00759391e+01 2.00759391e+01 2.00759391e+01 + 2.00759391e+01 2.00759391e+01 2.00759391e+01 2.00759391e+01 2.00759391e+01 + 2.00759391e+01 2.00759391e+01 2.00759391e+01 2.00759391e+01 2.00759391e+01 + 2.00759391e+01 2.00759391e+01 2.00759391e+01 2.00759391e+01 2.00759391e+01 + 2.00440764e+01 2.00010572e+01 1.99581303e+01 1.99152956e+01 1.98725528e+01 + 1.98299017e+01 1.97873421e+01 1.97448739e+01 1.97024969e+01 1.96602108e+01 + 1.96180154e+01 1.95759107e+01 1.95338962e+01 1.94919720e+01 1.94501377e+01 + 1.94083933e+01 1.93667384e+01 1.93251729e+01 1.92836966e+01 1.92423094e+01 + 1.92010109e+01 1.91598011e+01 1.91186798e+01 1.90776467e+01 1.90367017e+01 + 1.89958445e+01 1.89550750e+01 1.89143931e+01 1.88737984e+01 1.88332909e+01 + 1.87928703e+01 1.87525365e+01 1.87122892e+01 1.86721283e+01 1.86320537e+01 + 1.85920650e+01 1.85521621e+01 1.85123449e+01 1.84726131e+01 1.84329667e+01 + 1.83934053e+01 1.83539288e+01 1.83145370e+01 1.82752298e+01 1.82360069e+01 + 1.81968683e+01 1.81578136e+01 1.81188427e+01 1.80799555e+01 1.80411518e+01 + 1.80024313e+01 1.79637939e+01 1.79252395e+01 1.78867678e+01 1.78483787e+01 + 1.78100719e+01 1.77718474e+01 1.77337049e+01 1.76956443e+01 1.76576654e+01 + 1.76197680e+01 1.75819519e+01 1.75442170e+01 1.75065630e+01 1.74689899e+01 + 1.74314974e+01 1.73940854e+01 1.73567537e+01 1.73195021e+01 1.72823305e+01 + 1.72452386e+01 1.72082263e+01 1.71712935e+01 1.71344400e+01 1.70976655e+01 + 1.70609700e+01 1.70243532e+01 1.69878150e+01 1.69513552e+01 1.69149737e+01 + 1.68786703e+01 1.68424448e+01 1.68062970e+01 1.67702268e+01 1.67342341e+01 + 1.66983185e+01 1.66624801e+01 1.66267186e+01 1.65910338e+01 1.65554256e+01 + 1.65198939e+01 1.64844384e+01 1.64490590e+01 1.64137555e+01 1.63785278e+01 + 1.63433757e+01 1.63082990e+01 1.62732977e+01 1.62383714e+01 1.62035201e+01 + 1.61687436e+01 1.61340418e+01 1.60994144e+01 1.60648614e+01 1.60303825e+01 + 1.59959776e+01 1.59616465e+01 1.59273891e+01 1.58932053e+01 1.58590948e+01 + 1.58250575e+01 1.57910933e+01 1.57572020e+01 1.57233834e+01 1.56896374e+01 + 1.56559638e+01 1.56223625e+01 1.55888333e+01 1.55553761e+01 1.55219907e+01 + 1.54886769e+01 1.54554346e+01 1.54222637e+01 1.53891640e+01 1.53561353e+01 + 1.53231775e+01 1.52902904e+01 1.52574739e+01 1.52247279e+01 1.51920521e+01 + 1.51594464e+01 1.51269108e+01 1.50944449e+01 1.50620488e+01 1.50297221e+01 + 1.49974649e+01 1.49652769e+01 1.49331579e+01 1.49011079e+01 1.48691267e+01 + 1.48372142e+01 1.48053701e+01 1.47735943e+01 1.47418868e+01 1.47102473e+01 + 1.46786757e+01 1.46471719e+01 1.46157357e+01 1.45843670e+01 1.45530656e+01 + 1.45218313e+01 1.44906641e+01 1.44595638e+01 1.44285303e+01 1.43975633e+01 + 1.43666628e+01 1.43358286e+01 1.43050607e+01 1.42743587e+01 1.42437226e+01 + 1.42131523e+01 1.41826476e+01 1.41522084e+01 1.41218345e+01 1.40915258e+01 + 1.40612821e+01 1.40311034e+01 1.40009894e+01 1.39709400e+01 1.39409552e+01 + 1.39110347e+01 1.38811784e+01 1.38513862e+01 1.38216579e+01 1.37919934e+01 + 1.37623926e+01 1.37328554e+01 1.37033815e+01 1.36739709e+01 1.36446234e+01 + 1.36153389e+01 1.35861172e+01 1.35569583e+01 1.35278619e+01 1.34988280e+01 + 1.34698564e+01 1.34409470e+01 1.34120996e+01 1.33833142e+01 1.33545905e+01 + 1.33259285e+01 1.32973280e+01 1.32687888e+01 1.32403110e+01 1.32118942e+01 + 1.31835384e+01 1.31552435e+01 1.31270093e+01 1.30988357e+01 1.30707226e+01 + 1.30426698e+01 1.30146773e+01 1.29867448e+01 1.29588722e+01 1.29310595e+01 + 1.29033065e+01 1.28756130e+01 1.28479790e+01 1.28204042e+01 1.27928887e+01 + 1.27654322e+01 1.27380346e+01 1.27106959e+01 1.26834158e+01 1.26561943e+01 + 1.26290312e+01 1.26019263e+01 1.25748797e+01 1.25478911e+01 1.25209604e+01 + 1.24940876e+01 1.24672724e+01 1.24405147e+01 1.24138145e+01 1.23871716e+01 + 1.23605859e+01 1.23340572e+01 1.23075855e+01 1.22811706e+01 1.22548124e+01 + 1.22285107e+01 1.22022655e+01 1.21760766e+01 1.21499440e+01 1.21238674e+01 + 1.20978468e+01 1.20718820e+01 1.20459730e+01 1.20201195e+01 1.19943216e+01 + 1.19685790e+01 1.19428917e+01 1.19172595e+01 1.18916823e+01 1.18661600e+01 + 1.18406925e+01 1.18152796e+01 1.17899213e+01 1.17646174e+01 1.17393678e+01 + 1.17141725e+01 1.16890311e+01 1.16639438e+01 1.16389103e+01 1.16139305e+01 + 1.15890043e+01 1.15641316e+01 1.15393124e+01 1.15145463e+01 1.14898335e+01 + 1.14651736e+01 1.14405667e+01 1.14160126e+01 1.13915112e+01 1.13670624e+01 + 1.13426661e+01 1.13183221e+01 1.12940304e+01 1.12697908e+01 1.12456032e+01 + 1.12214676e+01 1.11973837e+01 1.11733515e+01 1.11493710e+01 1.11254418e+01 + 1.11015641e+01 1.10777376e+01 1.10539622e+01 1.10302378e+01 1.10065644e+01 + 1.09829418e+01 1.09593698e+01 1.09358485e+01 1.09123777e+01 1.08889572e+01 + 1.08655870e+01 1.08422669e+01 1.08189969e+01 1.07957769e+01 1.07726066e+01 + 1.07494861e+01 1.07264153e+01 1.07033939e+01 1.06804219e+01 1.06574993e+01 + 1.06346258e+01 1.06118015e+01 1.05890261e+01 1.05662996e+01 1.05436219e+01 + 1.05209929e+01 1.04984124e+01 1.04758804e+01 1.04533967e+01 1.04309613e+01 + 1.04085741e+01 1.03862349e+01 1.03639436e+01 1.03417002e+01 1.03195045e+01 + 1.02973565e+01 1.02752560e+01 1.02532029e+01 1.02311972e+01 1.02092387e+01 + 1.01873273e+01 1.01654630e+01 1.01436455e+01 1.01218749e+01 1.01001511e+01 + 1.00784738e+01 1.00568431e+01 1.00352588e+01 1.00137208e+01 9.99222904e+00 + 9.97078341e+00 9.94938381e+00 9.92803014e+00 9.90672230e+00 9.88546019e+00 + 9.86424372e+00 9.84307278e+00 9.82194727e+00 9.80086711e+00 9.77983219e+00 + 9.75884242e+00 9.73789769e+00 9.71699792e+00 9.69614300e+00 9.67533284e+00 + 9.65456735e+00 9.63384642e+00 9.61316997e+00 9.59253789e+00 9.57195009e+00 + 9.55140648e+00 9.53090696e+00 9.51045144e+00 9.49003981e+00 9.46967200e+00 + 9.44934790e+00 9.42906742e+00 9.40883047e+00 9.38863695e+00 9.36848677e+00 + 9.34837984e+00 9.32831606e+00 9.30829535e+00 9.28831760e+00 9.26838273e+00 + 9.24849064e+00 9.22864125e+00 9.20883446e+00 9.18907018e+00 9.16934832e+00 + 9.14966878e+00 9.13003148e+00 9.11043633e+00 9.09088323e+00 9.07137210e+00 + 9.05190285e+00 9.03247538e+00 9.01308960e+00 8.99374544e+00 8.97444278e+00 + 8.95518156e+00 8.93596168e+00 8.91678304e+00 8.89764557e+00 8.87854917e+00 + 8.85949376e+00 8.84047925e+00 8.82150554e+00 8.80257256e+00 8.78368021e+00 + 8.76482840e+00 8.74601706e+00 8.72724609e+00 8.70851541e+00 8.68982493e+00 + 8.67117456e+00 8.65256422e+00 8.63399383e+00 8.61546328e+00 8.59697251e+00 + 8.57852143e+00 8.56010995e+00 8.54173798e+00 8.52340544e+00 8.50511224e+00 + 8.48685831e+00 8.46864356e+00 8.45046790e+00 8.43233125e+00 8.41423352e+00 + 8.39617463e+00 8.37815451e+00 8.36017306e+00 8.34223020e+00 8.32432585e+00 + 8.30645993e+00 8.28863235e+00 8.27084304e+00 8.25309190e+00 8.23537886e+00 + 8.21770384e+00 8.20006675e+00 8.18246752e+00 8.16490606e+00 8.14738229e+00 + 8.12989613e+00 8.11244750e+00 8.09503632e+00 8.07766250e+00 8.06032598e+00 + 8.04302666e+00 8.02576447e+00 8.00853933e+00 7.99135116e+00 7.97419988e+00 + 7.95708540e+00 7.94000767e+00 7.92296658e+00 7.90596207e+00 7.88899405e+00 + 7.87206245e+00 7.85516719e+00 7.83830819e+00 7.82148537e+00 7.80469866e+00 + 7.78794798e+00 7.77123325e+00 7.75455439e+00 7.73791133e+00 7.72130399e+00 + 7.70473229e+00 7.68819616e+00 7.67169552e+00 7.65523029e+00 7.63880040e+00 + 7.62240578e+00 7.60604634e+00 7.58972201e+00 7.57343271e+00 7.55717838e+00 + 7.54095894e+00 7.52477430e+00 7.50862440e+00 7.49250916e+00 7.47642851e+00 + 7.46038237e+00 7.44437067e+00 7.42839333e+00 7.41245029e+00 7.39654146e+00 + 7.38066678e+00 7.36482617e+00 7.34901955e+00 7.33324686e+00 7.31750803e+00 + 7.30180297e+00 7.28613161e+00 7.27049390e+00 7.25488974e+00 7.23931907e+00 + 7.22378183e+00 7.20827793e+00 7.19280730e+00 7.17736988e+00 7.16196559e+00 + 7.14659436e+00 7.13125612e+00 7.11595080e+00 7.10067833e+00 7.08543864e+00 + 7.07023165e+00 7.05505731e+00 7.03991553e+00 7.02480625e+00 7.00972939e+00 + 6.99468490e+00 6.97967269e+00 6.96469270e+00 6.94974487e+00 6.93482911e+00 + 6.91994537e+00 6.90509357e+00 6.89027365e+00 6.87548554e+00 6.86072916e+00 + 6.84600445e+00 6.83131135e+00 6.81664978e+00 6.80201968e+00 6.78742098e+00 + 6.77285361e+00 6.75831750e+00 6.74381260e+00 6.72933882e+00 6.71489611e+00 + 6.70048439e+00 6.68610361e+00 6.67175369e+00 6.65743457e+00 6.64314618e+00 + 6.62888845e+00 6.61466133e+00 6.60046474e+00 6.58629863e+00 6.57216291e+00 + 6.55805753e+00 6.54398243e+00 6.52993754e+00 6.51592279e+00 6.50193811e+00 + 6.48798346e+00 6.47405875e+00 6.46016392e+00 6.44629892e+00 6.43246368e+00 + 6.41865813e+00 6.40488221e+00 6.39113586e+00 6.37741901e+00 6.36373160e+00 + 6.35007356e+00 6.33644484e+00 6.32284537e+00 6.30927508e+00 6.29573393e+00 + 6.28222183e+00 6.26873873e+00 6.25528457e+00 6.24185929e+00 6.22846282e+00 + 6.21509511e+00 6.20175608e+00 6.18844568e+00 6.17516385e+00 6.16191053e+00 + 6.14868565e+00 6.13548915e+00 6.12232097e+00 6.10918106e+00 6.09606935e+00 + 6.08298578e+00 6.06993029e+00 6.05690282e+00 6.04390331e+00 6.03093170e+00 + 6.01798793e+00 6.00507194e+00 5.99218368e+00 5.97932307e+00 5.96649006e+00 + 5.95368460e+00 5.94090662e+00 5.92815607e+00 5.91543288e+00 5.90273699e+00 + 5.89006836e+00 5.87742692e+00 5.86481260e+00 5.85222536e+00 5.83966514e+00 + 5.82713187e+00 5.81462550e+00 5.80214598e+00 5.78969323e+00 5.77726722e+00 + 5.76486787e+00 5.75249513e+00 5.74014895e+00 5.72782927e+00 5.71553603e+00 + 5.70326917e+00 5.69102864e+00 5.67881438e+00 5.66662634e+00 5.65446445e+00 + 5.64232867e+00 5.63021893e+00 5.61813518e+00 5.60607737e+00 5.59404543e+00 + 5.58203932e+00 5.57005898e+00 5.55810435e+00 5.54617538e+00 5.53427201e+00 + 5.52239418e+00 5.51054185e+00 5.49871496e+00 5.48691345e+00 5.47513727e+00 + 5.46338636e+00 5.45166067e+00 5.43996015e+00 5.42828475e+00 5.41663440e+00 + 5.40500905e+00 5.39340865e+00 5.38183316e+00 5.37028250e+00 5.35875664e+00 + 5.34725551e+00 5.33577907e+00 5.32432726e+00 5.31290002e+00 5.30149731e+00 + 5.29011908e+00 5.27876526e+00 5.26743582e+00 5.25613069e+00 5.24484982e+00 + 5.23359316e+00 5.22236066e+00 5.21115227e+00 5.19996794e+00 5.18880761e+00 + 5.17767123e+00 5.16655876e+00 5.15547013e+00 5.14440530e+00 5.13336422e+00 + 5.12234684e+00 5.11135310e+00 5.10038296e+00 5.08943636e+00 5.07851326e+00 + 5.06761360e+00 5.05673733e+00 5.04588441e+00 5.03505478e+00 5.02424839e+00 + 5.01346520e+00 5.00270514e+00 4.99196819e+00 4.98125427e+00 4.97056335e+00 + 4.95989538e+00 4.94925030e+00 4.93862807e+00 4.92802863e+00 4.91745195e+00 + 4.90689796e+00 4.89636663e+00 4.88585790e+00 4.87537172e+00 4.86490805e+00 + 4.85446683e+00 4.84404803e+00 4.83365158e+00 4.82327745e+00 4.81292559e+00 + 4.80259594e+00 4.79228846e+00 4.78200311e+00 4.77173983e+00 4.76149857e+00 + 4.75127930e+00 4.74108196e+00 4.73090650e+00 4.72075289e+00 4.71062106e+00 + 4.70051099e+00 4.69042261e+00 4.68035588e+00 4.67031076e+00 4.66028719e+00 + 4.65028514e+00 4.64030456e+00 4.63034539e+00 4.62040761e+00 4.61049115e+00 + 4.60059597e+00 4.59072203e+00 4.58086928e+00 4.57103768e+00 4.56122718e+00 + 4.55143774e+00 4.54166930e+00 4.53192183e+00 4.52219528e+00 4.51248961e+00 + 4.50280477e+00 4.49314071e+00 4.48349739e+00 4.47387478e+00 4.46427281e+00 + 4.45469145e+00 4.44513066e+00 4.43559038e+00 4.42607058e+00 4.41657121e+00 + 4.40709223e+00 4.39763360e+00 4.38819526e+00 4.37877718e+00 4.36937932e+00 + 4.36000162e+00 4.35064406e+00 4.34130657e+00 4.33198913e+00 4.32269168e+00 + 4.31341419e+00 4.30415660e+00 4.29491889e+00 4.28570101e+00 4.27650290e+00 + 4.26732454e+00 4.25816588e+00 4.24902688e+00 4.23990748e+00 4.23080767e+00 + 4.22172738e+00 4.21266658e+00 4.20362522e+00 4.19460328e+00 4.18560069e+00 + 4.17661743e+00 4.16765344e+00 4.15870870e+00 4.14978315e+00 4.14087676e+00 + 4.13198948e+00 4.12312128e+00 4.11427211e+00 4.10544194e+00 4.09663071e+00 + 4.08783840e+00 4.07906495e+00 4.07031034e+00 4.06157452e+00 4.05285744e+00 + 4.04415907e+00 4.03547938e+00 4.02681831e+00 4.01817583e+00 4.00955190e+00 + 4.00094647e+00 3.99235952e+00 3.98379100e+00 3.97524086e+00 3.96670908e+00 + 3.95819561e+00 3.94970041e+00 3.94122344e+00 3.93276467e+00 3.92432405e+00 + 3.91590154e+00 3.90749711e+00 3.89911073e+00 3.89074234e+00 3.88239191e+00 + 3.87405940e+00 3.86574477e+00 3.85744799e+00 3.84916902e+00 3.84090782e+00 + 3.83266434e+00 3.82443856e+00 3.81623044e+00 3.80803993e+00 3.79986699e+00 + 3.79171160e+00 3.78357372e+00 3.77545330e+00 3.76735030e+00 3.75926470e+00 + 3.75119645e+00 3.74314552e+00 3.73511187e+00 3.72709545e+00 3.71909625e+00 + 3.71111421e+00 3.70314930e+00 3.69520149e+00 3.68727074e+00 3.67935701e+00 + 3.67146026e+00 3.66358046e+00 3.65571757e+00 3.64787156e+00 3.64004238e+00 + 3.63223001e+00 3.62443441e+00 3.61665554e+00 3.60889336e+00 3.60114785e+00 + 3.59341895e+00 3.58570665e+00 3.57801089e+00 3.57033166e+00 3.56266890e+00 + 3.55502259e+00 3.54739270e+00 3.53977917e+00 3.53218199e+00 3.52460112e+00 + 3.51703651e+00 3.50948814e+00 3.50195597e+00 3.49443996e+00 3.48694009e+00 + 3.47945631e+00 3.47198860e+00 3.46453691e+00 3.45710121e+00 3.44968148e+00 + 3.44227767e+00 3.43488974e+00 3.42751768e+00 3.42016144e+00 3.41282098e+00 + 3.40549628e+00 3.39818730e+00 3.39089401e+00 3.38361637e+00 3.37635435e+00 + 3.36910791e+00 3.36187703e+00 3.35466167e+00 3.34746179e+00 3.34027737e+00 + 3.33310836e+00 3.32595474e+00 3.31881648e+00 3.31169353e+00 3.30458587e+00 + 3.29749347e+00 3.29041629e+00 3.28335430e+00 3.27630746e+00 3.26927575e+00 + 3.26225913e+00 3.25525757e+00 3.24827104e+00 3.24129950e+00 3.23434292e+00 + 3.22740128e+00 3.22047453e+00 3.21356265e+00 3.20666561e+00 3.19978336e+00 + 3.19291589e+00 3.18606316e+00 3.17922513e+00 3.17240178e+00 3.16559307e+00 + 3.15879898e+00 3.15201947e+00 3.14525451e+00 3.13850407e+00 3.13176812e+00 + 3.12504662e+00 3.11833955e+00 3.11164687e+00 3.10496856e+00 3.09830458e+00 + 3.09165491e+00 3.08501950e+00 3.07839834e+00 3.07179139e+00 3.06519862e+00 + 3.05861999e+00 3.05205549e+00 3.04550508e+00 3.03896872e+00 3.03244639e+00 + 3.02593806e+00 3.01944370e+00 3.01296328e+00 3.00649677e+00 3.00004413e+00 + 2.99360535e+00 2.98718038e+00 2.98076920e+00 2.97437178e+00 2.96798810e+00 + 2.96161811e+00 2.95526179e+00 2.94891912e+00 2.94259006e+00 2.93627458e+00 + 2.92997266e+00 2.92368427e+00 2.91740937e+00 2.91114793e+00 2.90489994e+00 + 2.89866535e+00 2.89244415e+00 2.88623630e+00 2.88004177e+00 2.87386054e+00 + 2.86769257e+00 2.86153784e+00 2.85539632e+00 2.84926798e+00 2.84315279e+00 + 2.83705073e+00 2.83096177e+00 2.82488587e+00 2.81882302e+00 2.81277317e+00 + 2.80673631e+00 2.80071241e+00 2.79470143e+00 2.78870336e+00 2.78271816e+00 + 2.77674581e+00 2.77078627e+00 2.76483952e+00 2.75890554e+00 2.75298429e+00 + 2.74707575e+00 2.74117990e+00 2.73529669e+00 2.72942612e+00 2.72356814e+00 + 2.71772273e+00 2.71188987e+00 2.70606953e+00 2.70026168e+00 2.69446630e+00 + 2.68868335e+00 2.68291282e+00 2.67715467e+00 2.67140888e+00 2.66567542e+00 + 2.65995427e+00 2.65424539e+00 2.64854877e+00 2.64286437e+00 2.63719218e+00 + 2.63153215e+00 2.62588428e+00 2.62024853e+00 2.61462487e+00 2.60901328e+00 + 2.60341374e+00 2.59782621e+00 2.59225068e+00 2.58668711e+00 2.58113548e+00 + 2.57559577e+00 2.57006795e+00 2.56455199e+00 2.55904787e+00 2.55355557e+00 + 2.54807505e+00 2.54260629e+00 2.53714927e+00 2.53170396e+00 2.52627034e+00 + 2.52084839e+00 2.51543806e+00 2.51003935e+00 2.50465223e+00 2.49927667e+00 + 2.49391265e+00 2.48856013e+00 2.48321911e+00 2.47788955e+00 2.47257143e+00 + 2.46726472e+00 2.46196940e+00 2.45668545e+00 2.45141283e+00 2.44615154e+00 + 2.44090153e+00 2.43566279e+00 2.43043530e+00 2.42521903e+00 2.42001395e+00 + 2.41482004e+00 2.40963728e+00 2.40446564e+00 2.39930510e+00 2.39415564e+00 + 2.38901723e+00 2.38388985e+00 2.37877347e+00 2.37366808e+00 2.36857364e+00 + 2.36349013e+00 2.35841754e+00 2.35335583e+00 2.34830499e+00 2.34326498e+00 + 2.33823580e+00 2.33321740e+00 2.32820978e+00 2.32321291e+00 2.31822676e+00 + 2.31325131e+00 2.30828654e+00 2.30333242e+00 2.29838894e+00 2.29345607e+00 + 2.28853378e+00 2.28362206e+00 2.27872088e+00 2.27383022e+00 2.26895006e+00 + 2.26408037e+00 2.25922113e+00 2.25437232e+00 2.24953392e+00 2.24470590e+00 + 2.23988824e+00 2.23508093e+00 2.23028393e+00 2.22549722e+00 2.22072079e+00 + 2.21595462e+00 2.21119867e+00 2.20645292e+00 2.20171737e+00 2.19699197e+00 + 2.19227672e+00 2.18757159e+00 2.18287656e+00 2.17819160e+00 2.17351670e+00 + 2.16885183e+00 2.16419698e+00 2.15955211e+00 2.15491722e+00 2.15029227e+00 + 2.14567724e+00 2.14107213e+00 2.13647689e+00 2.13189152e+00 2.12731599e+00 + 2.12275028e+00 2.11819437e+00 2.11364823e+00 2.10911186e+00 2.10458522e+00 + 2.10006829e+00 2.09556106e+00 2.09106350e+00 2.08657560e+00 2.08209733e+00 + 2.07762867e+00 2.07316960e+00 2.06872010e+00 2.06428015e+00 2.05984973e+00 + 2.05542881e+00 2.05101739e+00 2.04661543e+00 2.04222293e+00 2.03783984e+00 + 2.03346617e+00 2.02910188e+00 2.02474696e+00 2.02040139e+00 2.01606514e+00 + 2.01173820e+00 2.00742055e+00 2.00311216e+00 1.99881302e+00 1.99452311e+00 + 1.99024240e+00 1.98597088e+00 1.98170853e+00 1.97745533e+00 1.97321125e+00 + 1.96897629e+00 1.96475041e+00 1.96053360e+00 1.95632584e+00 1.95212712e+00 + 1.94793740e+00 1.94375668e+00 1.93958493e+00 1.93542213e+00 1.93126827e+00 + 1.92712332e+00 1.92298727e+00 1.91886010e+00 1.91474178e+00 1.91063231e+00 + 1.90653165e+00 1.90243979e+00 1.89835672e+00 1.89428241e+00 1.89021684e+00 + 1.88616000e+00 1.88211187e+00 1.87807242e+00 1.87404164e+00 1.87001952e+00 + 1.86600602e+00 1.86200115e+00 1.85800486e+00 1.85401715e+00 1.85003801e+00 + 1.84606740e+00 1.84210531e+00 1.83815173e+00 1.83420663e+00 1.83027000e+00 + 1.82634182e+00 1.82242207e+00 1.81851073e+00 1.81460779e+00 1.81071322e+00 + 1.80682701e+00 1.80294915e+00 1.79907960e+00 1.79521836e+00 1.79136541e+00 + 1.78752073e+00 1.78368429e+00 1.77985610e+00 1.77603612e+00 1.77222433e+00 + 1.76842073e+00 1.76462529e+00 1.76083800e+00 1.75705883e+00 1.75328778e+00 + 1.74952482e+00 1.74576994e+00 1.74202311e+00 1.73828433e+00 1.73455357e+00 + 1.73083082e+00 1.72711606e+00 1.72340927e+00 1.71971043e+00 1.71601954e+00 + 1.71233656e+00 1.70866149e+00 1.70499431e+00 1.70133500e+00 1.69768354e+00 + 1.69403992e+00 1.69040412e+00 1.68677613e+00 1.68315592e+00 1.67954347e+00 + 1.67593879e+00 1.67234184e+00 1.66875260e+00 1.66517108e+00 1.66159723e+00 + 1.65803106e+00 1.65447255e+00 1.65092167e+00 1.64737841e+00 1.64384275e+00 + 1.64031469e+00 1.63679419e+00 1.63328125e+00 1.62977586e+00 1.62627798e+00 + 1.62278761e+00 1.61930474e+00 1.61582933e+00 1.61236139e+00 1.60890089e+00 + 1.60544782e+00 1.60200216e+00 1.59856389e+00 1.59513300e+00 1.59170948e+00 + 1.58829330e+00 1.58488446e+00 1.58148293e+00 1.57808870e+00 1.57470176e+00 + 1.57132209e+00 1.56794967e+00 1.56458448e+00 1.56122652e+00 1.55787577e+00 + 1.55453221e+00 1.55119582e+00 1.54786660e+00 1.54454452e+00 1.54122957e+00 + 1.53792173e+00 1.53462100e+00 1.53132735e+00 1.52804076e+00 1.52476123e+00 + 1.52148874e+00 1.51822328e+00 1.51496482e+00 1.51171335e+00 1.50846886e+00 + 1.50523134e+00 1.50200077e+00 1.49877712e+00 1.49556040e+00 1.49235058e+00 + 1.48914765e+00 1.48595159e+00 1.48276240e+00 1.47958005e+00 1.47640452e+00 + 1.47323582e+00 1.47007391e+00 1.46691879e+00 1.46377044e+00 1.46062885e+00 + 1.45749400e+00 1.45436588e+00 1.45124447e+00 1.44812976e+00 1.44502174e+00 + 1.44192039e+00 1.43882569e+00 1.43573763e+00 1.43265621e+00 1.42958139e+00 + 1.42651318e+00 1.42345155e+00 1.42039649e+00 1.41734799e+00 1.41430603e+00 + 1.41127059e+00 1.40824168e+00 1.40521926e+00 1.40220333e+00 1.39919388e+00 + 1.39619088e+00 1.39319433e+00 1.39020420e+00 1.38722050e+00 1.38424320e+00 + 1.38127229e+00 1.37830775e+00 1.37534958e+00 1.37239776e+00 1.36945227e+00 + 1.36651310e+00 1.36358024e+00 1.36065367e+00 1.35773339e+00 1.35481937e+00 + 1.35191161e+00 1.34901009e+00 1.34611479e+00 1.34322571e+00 1.34034283e+00 + 1.33746613e+00 1.33459561e+00 1.33173125e+00 1.32887304e+00 1.32602096e+00 + 1.32317500e+00 1.32033515e+00 1.31750140e+00 1.31467372e+00 1.31185212e+00 + 1.30903657e+00 1.30622706e+00 1.30342358e+00 1.30062612e+00 1.29783466e+00 + 1.29504919e+00 1.29226970e+00 1.28949618e+00 1.28672861e+00 1.28396697e+00 + 1.28121127e+00 1.27846147e+00 1.27571758e+00 1.27297958e+00 1.27024745e+00 + 1.26752119e+00 1.26480077e+00 1.26208620e+00 1.25937745e+00 1.25667451e+00 + 1.25397737e+00 1.25128603e+00 1.24860045e+00 1.24592064e+00 1.24324658e+00 + 1.24057826e+00 1.23791567e+00 1.23525878e+00 1.23260760e+00 1.22996211e+00 + 1.22732230e+00 1.22468815e+00 1.22205965e+00 1.21943680e+00 1.21681957e+00 + 1.21420796e+00 1.21160195e+00 1.20900153e+00 1.20640670e+00 1.20381743e+00 + 1.20123372e+00 1.19865555e+00 1.19608291e+00 1.19351580e+00 1.19095419e+00 + 1.18839808e+00 1.18584745e+00 1.18330230e+00 1.18076261e+00 1.17822836e+00 + 1.17569956e+00 1.17317618e+00 1.17065821e+00 1.16814565e+00 1.16563847e+00 + 1.16313668e+00 1.16064025e+00 1.15814918e+00 1.15566346e+00 1.15318306e+00 + 1.15070799e+00 1.14823823e+00 1.14577377e+00 1.14331459e+00 1.14086069e+00 + 1.13841205e+00 1.13596867e+00 1.13353053e+00 1.13109762e+00 1.12866992e+00 + 1.12624744e+00 1.12383015e+00 1.12141805e+00 1.11901112e+00 1.11660935e+00 + 1.11421273e+00 1.11182126e+00 1.10943491e+00 1.10705368e+00 1.10467756e+00 + 1.10230654e+00 1.09994060e+00 1.09757973e+00 1.09522393e+00 1.09287318e+00 + 1.09052747e+00 1.08818679e+00 1.08585113e+00 1.08352048e+00 1.08119483e+00 + 1.07887416e+00 1.07655847e+00 1.07424774e+00 1.07194197e+00 1.06964114e+00 + 1.06734525e+00 1.06505427e+00 1.06276821e+00 1.06048705e+00 1.05821077e+00 + 1.05593938e+00 1.05367285e+00 1.05141119e+00 1.04915437e+00 1.04690238e+00 + 1.04465523e+00 1.04241289e+00 1.04017535e+00 1.03794261e+00 1.03571465e+00 + 1.03349147e+00 1.03127304e+00 1.02905938e+00 1.02685045e+00 1.02464626e+00 + 1.02244678e+00 1.02025202e+00 1.01806196e+00 1.01587659e+00 1.01369590e+00 + 1.01151988e+00 1.00934851e+00 1.00718180e+00 1.00501973e+00 1.00286228e+00 + 1.00070946e+00 9.98561236e-01 9.96417615e-01 9.94278581e-01 9.92144125e-01 + 9.90014236e-01 9.87888904e-01 9.85768119e-01 9.83651871e-01 9.81540149e-01 + 9.79432944e-01 9.77330246e-01 9.75232044e-01 9.73138328e-01 9.71049088e-01 + 9.68964314e-01 9.66883996e-01 9.64808125e-01 9.62736689e-01 9.60669679e-01 + 9.58607085e-01 9.56548897e-01 9.54495105e-01 9.52445699e-01 9.50400669e-01 + 9.48360004e-01 9.46323696e-01 9.44291733e-01 9.42264107e-01 9.40240807e-01 + 9.38221822e-01 9.36207144e-01 9.34196763e-01 9.32190667e-01 9.30188848e-01 + 9.28191295e-01 9.26197999e-01 9.24208949e-01 9.22224136e-01 9.20243549e-01 + 9.18267179e-01 9.16295016e-01 9.14327050e-01 9.12363271e-01 9.10403669e-01 + 9.08448234e-01 9.06496956e-01 9.04549825e-01 9.02606832e-01 9.00667966e-01 + 8.98733217e-01 8.96802576e-01 8.94876032e-01 8.92953575e-01 8.91035196e-01 + 8.89120885e-01 8.87210631e-01 8.85304424e-01 8.83402255e-01 8.81504113e-01 + 8.79609989e-01 8.77719872e-01 8.75833752e-01 8.73951619e-01 8.72073464e-01 + 8.70199275e-01 8.68329043e-01 8.66462758e-01 8.64600409e-01 8.62741986e-01 + 8.60887479e-01 8.59036879e-01 8.57190173e-01 8.55347353e-01 8.53508408e-01 + 8.51673328e-01 8.49842102e-01 8.48014719e-01 8.46191170e-01 8.44371444e-01 + 8.42555531e-01 8.40743420e-01 8.38935100e-01 8.37130561e-01 8.35329792e-01 + 8.33532782e-01 8.31739522e-01 8.29950000e-01 8.28164205e-01 8.26382127e-01 + 8.24603754e-01 8.22829076e-01 8.21058082e-01 8.19290760e-01 8.17527101e-01 + 8.15767091e-01 8.14010722e-01 8.12257980e-01 8.10508856e-01 8.08763337e-01 + 8.07021412e-01 8.05283069e-01 8.03548298e-01 8.01817087e-01 8.00089423e-01 + 7.98365295e-01 7.96644692e-01 7.94927601e-01 7.93214010e-01 7.91503908e-01 + 7.89797282e-01 7.88094120e-01 7.86394410e-01 7.84698139e-01 7.83005295e-01 + 7.81315865e-01 7.79629836e-01 7.77947197e-01 7.76267933e-01 7.74592033e-01 + 7.72919482e-01 7.71250267e-01 7.69584376e-01 7.67921795e-01 7.66262510e-01 + 7.64606508e-01 7.62953775e-01 7.61304297e-01 7.59658059e-01 7.58015048e-01 + 7.56375250e-01 7.54738649e-01 7.53105231e-01 7.51474982e-01 7.49847887e-01 + 7.48223929e-01 7.46603095e-01 7.44985369e-01 7.43370735e-01 7.41759177e-01 + 7.40150680e-01 7.38545227e-01 7.36942802e-01 7.35343389e-01 7.33746970e-01 + 7.32153529e-01 7.30563049e-01 7.28975513e-01 7.27390903e-01 7.25809201e-01 + 7.24230389e-01 7.22654449e-01 7.21081363e-01 7.19511112e-01 7.17943676e-01 + 7.16379038e-01 7.14817176e-01 7.13258073e-01 7.11701707e-01 7.10148058e-01 + 7.08597106e-01 7.07048830e-01 7.05503209e-01 7.03960221e-01 7.02419845e-01 + 7.00882058e-01 6.99346838e-01 6.97814163e-01 6.96284009e-01 6.94756352e-01 + 6.93231170e-01 6.91708437e-01 6.90188130e-01 6.88670223e-01 6.87154691e-01 + 6.85641509e-01 6.84130649e-01 6.82622086e-01 6.81115793e-01 6.79611743e-01 + 6.78109907e-01 6.76610256e-01 6.75112764e-01 6.73617399e-01 6.72124133e-01 + 6.70632935e-01 6.69143774e-01 6.67656619e-01 6.66171439e-01 6.64688201e-01 + 6.63206872e-01 6.61727419e-01 6.60249807e-01 6.58774002e-01 6.57299969e-01 + 6.55827672e-01 6.54357074e-01 6.52888139e-01 6.51420829e-01 6.49955104e-01 + 6.48490927e-01 6.47028257e-01 6.45567053e-01 6.44107275e-01 6.42648880e-01 + 6.41191826e-01 6.39736069e-01 6.38281565e-01 6.36828269e-01 6.35376134e-01 + 6.33925114e-01 6.32475162e-01 6.31026228e-01 6.29578264e-01 6.28131219e-01 + 6.26685041e-01 6.25239679e-01 6.23795080e-01 6.22351189e-01 6.20907951e-01 + 6.19465310e-01 6.18023208e-01 6.16581589e-01 6.15140391e-01 6.13699555e-01 + 6.12259019e-01 6.10818721e-01 6.09378596e-01 6.07938579e-01 6.06498604e-01 + 6.05058604e-01 6.03618509e-01 6.02178250e-01 6.00737754e-01 5.99296950e-01 + 5.97855763e-01 5.96414118e-01 5.94971938e-01 5.93529144e-01 5.92085657e-01 + 5.90641395e-01 5.89196275e-01 5.87750214e-01 5.86303125e-01 5.84854920e-01 + 5.83405511e-01 5.81954807e-01 5.80502715e-01 5.79049141e-01 5.77593989e-01 + 5.76137162e-01 5.74678560e-01 5.73218082e-01 5.71755624e-01 5.70291081e-01 + 5.68824347e-01 5.67355312e-01 5.65883866e-01 5.64409896e-01 5.62933287e-01 + 5.61453921e-01 5.59971680e-01 5.58486443e-01 5.56998085e-01 5.55506482e-01 + 5.54011505e-01 5.52513025e-01 5.51010909e-01 5.49505022e-01 5.47995227e-01 + 5.46481386e-01 5.44963355e-01 5.43440991e-01 5.41914147e-01 5.40382673e-01 + 5.38846419e-01 5.37305229e-01 5.35758946e-01 5.34207411e-01 5.32650462e-01 + 5.31087934e-01 5.29519659e-01 5.27945467e-01 5.26365185e-01 5.24778637e-01 + 5.23185644e-01 5.21586025e-01 5.19979596e-01 5.18366169e-01 5.16745554e-01 + 5.15117559e-01 5.13481987e-01 5.11838640e-01 5.10187316e-01 5.08527810e-01 + 5.06859916e-01 5.05183421e-01 5.03498113e-01 5.01803775e-01 5.00100187e-01 + 4.98387128e-01 4.96664371e-01 4.94931688e-01 4.93188848e-01 4.91435617e-01 + 4.89671756e-01 4.87897027e-01 4.86111186e-01 4.84313987e-01 4.82505182e-01 + 4.80684518e-01 4.78851743e-01 4.77006599e-01 4.75148825e-01 4.73278161e-01 + 4.71394342e-01 4.69497099e-01 4.67586165e-01 4.65661265e-01 4.63722128e-01 + 4.61768475e-01 4.59800029e-01 4.57816510e-01 4.55817634e-01 4.53803118e-01 + 4.51772676e-01 4.49726022e-01 4.47662866e-01 4.45582919e-01 4.43485891e-01 + 4.41371488e-01 4.39239420e-01 4.37089394e-01 4.34921115e-01 4.32734292e-01 + 4.30528630e-01 4.28303837e-01 4.26059620e-01 4.23795689e-01 4.21511752e-01 + 4.19207520e-01 4.16882707e-01 4.14537026e-01 4.12170195e-01 4.09781933e-01 + 4.07371963e-01 4.04940009e-01 4.02485802e-01 4.00009075e-01 3.97509566e-01 + 3.94987017e-01 3.92441177e-01 3.89871799e-01 3.87278645e-01 3.84661480e-01 + 3.82020079e-01 3.79354224e-01 3.76663705e-01 3.73948321e-01 3.71207881e-01 + 3.68442203e-01 3.65651117e-01 3.62834463e-01 3.59992093e-01 3.57123872e-01 + 3.54229679e-01 3.51309405e-01 3.48362957e-01 3.45390258e-01 3.42391245e-01 + 3.39365874e-01 3.36314117e-01 3.33235967e-01 3.30131432e-01 3.27000544e-01 + 3.23843354e-01 3.20659935e-01 3.17450383e-01 3.14214817e-01 3.10953381e-01 + 3.07666242e-01 3.04353596e-01 3.01015664e-01 2.97652696e-01 2.94264969e-01 + 2.90852790e-01 2.87416499e-01 2.83956463e-01 2.80473085e-01 2.76966798e-01 + 2.73438070e-01 2.69887404e-01 2.66315338e-01 2.62722445e-01 2.59109338e-01 + 2.55476663e-01 2.51825108e-01 2.48155397e-01 2.44468296e-01 2.40764610e-01 + 2.37045183e-01 2.33310901e-01 2.29562691e-01 2.25801522e-01 2.22028404e-01 + 2.18244389e-01 2.14450570e-01 2.10648085e-01 2.06838110e-01 2.03021865e-01 + 1.99200609e-01 1.95375646e-01 1.91548315e-01 1.87719999e-01 1.83892119e-01 + 1.80066132e-01 1.76243534e-01 1.72425858e-01 1.68614668e-01 1.64811566e-01 + 1.61018182e-01 1.57236178e-01 1.53467243e-01 1.49713092e-01 1.45975466e-01 + 1.42256126e-01 1.38556852e-01 1.34879442e-01 1.31225705e-01 1.27597466e-01 + 1.23996551e-01 1.20424797e-01 1.16884039e-01 1.13376108e-01 1.09902834e-01 + 1.06466032e-01 1.03067507e-01 9.97090454e-02 9.63924113e-02 9.31193435e-02 + 8.98915508e-02 8.67107074e-02 8.35784489e-02 8.04963677e-02 7.74660087e-02 + 7.44888648e-02 7.15663729e-02 6.86999091e-02 6.58907847e-02 6.31402418e-02 + 6.04494498e-02 5.78195005e-02 5.52514054e-02 5.27460911e-02 5.03043967e-02 + 4.79270698e-02 4.56147642e-02 4.33680371e-02 4.11873461e-02 3.90730481e-02 + 3.70253965e-02 3.50445405e-02 3.31305238e-02 3.12832841e-02 2.95026522e-02 + 2.77883531e-02 2.61400057e-02 2.45571244e-02 2.30391200e-02 2.15853019e-02 + 2.01948803e-02 1.88669688e-02 1.76005877e-02 1.63946672e-02 1.52480519e-02 + 1.41595045e-02 1.31277111e-02 1.21512857e-02 1.12287758e-02 1.03586680e-02 + 9.53939392e-03 8.76933619e-03 8.04683477e-03 7.37019339e-03 6.73768606e-03 + 6.14756365e-03 5.59806047e-03 5.08740088e-03 4.61380575e-03 4.17549890e-03 + 3.77071328e-03 3.39769704e-03 3.05471932e-03 2.74007581e-03 2.45209391e-03 + 2.18913767e-03 1.94961227e-03 1.73196817e-03 1.53470479e-03 1.35637382e-03 + 1.19558204e-03 1.05099372e-03 9.21332559e-04 8.05383193e-04 7.01992213e-04 + 6.10068796e-04 5.28584903e-04 4.56575066e-04 3.93135809e-04 3.37424713e-04 + 2.88659146e-04 2.46114711e-04 2.09123417e-04 1.77071629e-04 1.49397813e-04 + 1.25590119e-04 1.05183840e-04 8.77587673e-05 7.29364877e-05 6.03776430e-05 + 4.97791872e-05 4.08716659e-05 3.34165405e-05 2.72035814e-05 2.20483479e-05 + 1.77897704e-05 1.42878490e-05 1.14214793e-05 9.08641104e-06 7.19334759e-06 + 5.66618684e-06 4.44040494e-06 3.46158128e-06 2.68406139e-06 2.06975312e-06 + 1.58705007e-06 1.20987538e-06 9.16838150e-07 6.90494318e-07 5.16703483e-07 + 3.84073119e-07 2.83481627e-07 2.07671932e-07 1.50907666e-07 1.08684371e-07 + 7.74887026e-08 5.45991257e-08 3.79221873e-08 2.58590381e-08 1.71974474e-08 + 1.10251239e-08 6.66069066e-09 3.59915934e-09 1.46921029e-09 0.00000000e+00 + 9.31535205e+00 9.31535205e+00 9.31535205e+00 9.31535205e+00 9.31535205e+00 + 9.31535205e+00 9.31535205e+00 9.31535205e+00 9.31535205e+00 9.31535205e+00 + 9.31535205e+00 9.31535205e+00 9.31535205e+00 9.31535205e+00 9.31535205e+00 + 9.31535205e+00 9.31535205e+00 9.31535205e+00 9.31535205e+00 9.31535205e+00 + 9.31535205e+00 9.31535205e+00 9.31535205e+00 9.31535205e+00 9.31535205e+00 + 9.31535205e+00 9.31535205e+00 9.31535205e+00 9.31535205e+00 9.31535205e+00 + 9.31535205e+00 9.31535205e+00 9.31535205e+00 9.31535205e+00 9.31535205e+00 + 9.31535205e+00 9.31535205e+00 9.31535205e+00 9.31535205e+00 9.31535205e+00 + 9.31535205e+00 9.31535205e+00 9.31535205e+00 9.30248929e+00 9.28626121e+00 + 9.27006144e+00 9.25388993e+00 9.23774663e+00 9.22163150e+00 9.20554447e+00 + 9.18948551e+00 9.17345456e+00 9.15745158e+00 9.14147652e+00 9.12552932e+00 + 9.10960995e+00 9.09371834e+00 9.07785446e+00 9.06201825e+00 9.04620967e+00 + 9.03042867e+00 9.01467520e+00 8.99894920e+00 8.98325065e+00 8.96757947e+00 + 8.95193564e+00 8.93631910e+00 8.92072979e+00 8.90516769e+00 8.88963273e+00 + 8.87412487e+00 8.85864407e+00 8.84319027e+00 8.82776344e+00 8.81236351e+00 + 8.79699045e+00 8.78164420e+00 8.76632473e+00 8.75103198e+00 8.73576591e+00 + 8.72052648e+00 8.70531362e+00 8.69012731e+00 8.67496749e+00 8.65983411e+00 + 8.64472713e+00 8.62964651e+00 8.61459220e+00 8.59956415e+00 8.58456231e+00 + 8.56958664e+00 8.55463710e+00 8.53971364e+00 8.52481622e+00 8.50994478e+00 + 8.49509928e+00 8.48027968e+00 8.46548594e+00 8.45071800e+00 8.43597582e+00 + 8.42125937e+00 8.40656858e+00 8.39190342e+00 8.37726385e+00 8.36264981e+00 + 8.34806127e+00 8.33349818e+00 8.31896049e+00 8.30444817e+00 8.28996116e+00 + 8.27549942e+00 8.26106291e+00 8.24665159e+00 8.23226540e+00 8.21790432e+00 + 8.20356828e+00 8.18925725e+00 8.17497119e+00 8.16071006e+00 8.14647380e+00 + 8.13226237e+00 8.11807574e+00 8.10391385e+00 8.08977667e+00 8.07566415e+00 + 8.06157626e+00 8.04751293e+00 8.03347414e+00 8.01945985e+00 8.00546999e+00 + 7.99150455e+00 7.97756347e+00 7.96364670e+00 7.94975422e+00 7.93588597e+00 + 7.92204191e+00 7.90822200e+00 7.89442621e+00 7.88065447e+00 7.86690677e+00 + 7.85318304e+00 7.83948326e+00 7.82580738e+00 7.81215535e+00 7.79852714e+00 + 7.78492270e+00 7.77134200e+00 7.75778499e+00 7.74425163e+00 7.73074187e+00 + 7.71725569e+00 7.70379303e+00 7.69035385e+00 7.67693812e+00 7.66354580e+00 + 7.65017684e+00 7.63683119e+00 7.62350883e+00 7.61020972e+00 7.59693380e+00 + 7.58368104e+00 7.57045140e+00 7.55724484e+00 7.54406131e+00 7.53090079e+00 + 7.51776322e+00 7.50464858e+00 7.49155681e+00 7.47848788e+00 7.46544175e+00 + 7.45241837e+00 7.43941772e+00 7.42643975e+00 7.41348441e+00 7.40055168e+00 + 7.38764150e+00 7.37475385e+00 7.36188868e+00 7.34904596e+00 7.33622564e+00 + 7.32342768e+00 7.31065205e+00 7.29789870e+00 7.28516761e+00 7.27245872e+00 + 7.25977200e+00 7.24710742e+00 7.23446493e+00 7.22184449e+00 7.20924607e+00 + 7.19666963e+00 7.18411512e+00 7.17158252e+00 7.15907178e+00 7.14658287e+00 + 7.13411574e+00 7.12167036e+00 7.10924669e+00 7.09684470e+00 7.08446434e+00 + 7.07210558e+00 7.05976837e+00 7.04745269e+00 7.03515850e+00 7.02288575e+00 + 7.01063441e+00 6.99840444e+00 6.98619581e+00 6.97400848e+00 6.96184240e+00 + 6.94969755e+00 6.93757389e+00 6.92547138e+00 6.91338997e+00 6.90132965e+00 + 6.88929036e+00 6.87727208e+00 6.86527476e+00 6.85329837e+00 6.84134288e+00 + 6.82940824e+00 6.81749442e+00 6.80560138e+00 6.79372909e+00 6.78187751e+00 + 6.77004661e+00 6.75823634e+00 6.74644668e+00 6.73467759e+00 6.72292902e+00 + 6.71120095e+00 6.69949335e+00 6.68780616e+00 6.67613936e+00 6.66449292e+00 + 6.65286679e+00 6.64126095e+00 6.62967535e+00 6.61810996e+00 6.60656474e+00 + 6.59503967e+00 6.58353471e+00 6.57204981e+00 6.56058495e+00 6.54914009e+00 + 6.53771519e+00 6.52631022e+00 6.51492516e+00 6.50355995e+00 6.49221457e+00 + 6.48088898e+00 6.46958314e+00 6.45829703e+00 6.44703061e+00 6.43578385e+00 + 6.42455670e+00 6.41334914e+00 6.40216113e+00 6.39099263e+00 6.37984362e+00 + 6.36871406e+00 6.35760392e+00 6.34651316e+00 6.33544174e+00 6.32438964e+00 + 6.31335682e+00 6.30234324e+00 6.29134888e+00 6.28037370e+00 6.26941766e+00 + 6.25848074e+00 6.24756290e+00 6.23666410e+00 6.22578431e+00 6.21492351e+00 + 6.20408165e+00 6.19325870e+00 6.18245464e+00 6.17166942e+00 6.16090302e+00 + 6.15015540e+00 6.13942652e+00 6.12871637e+00 6.11802490e+00 6.10735208e+00 + 6.09669787e+00 6.08606226e+00 6.07544520e+00 6.06484666e+00 6.05426660e+00 + 6.04370501e+00 6.03316184e+00 6.02263706e+00 6.01213064e+00 6.00164255e+00 + 5.99117276e+00 5.98072123e+00 5.97028794e+00 5.95987284e+00 5.94947592e+00 + 5.93909713e+00 5.92873644e+00 5.91839383e+00 5.90806927e+00 5.89776271e+00 + 5.88747414e+00 5.87720351e+00 5.86695080e+00 5.85671597e+00 5.84649900e+00 + 5.83629986e+00 5.82611850e+00 5.81595491e+00 5.80580905e+00 5.79568088e+00 + 5.78557039e+00 5.77547753e+00 5.76540228e+00 5.75534460e+00 5.74530447e+00 + 5.73528186e+00 5.72527673e+00 5.71528905e+00 5.70531880e+00 5.69536594e+00 + 5.68543044e+00 5.67551228e+00 5.66561142e+00 5.65572783e+00 5.64586148e+00 + 5.63601234e+00 5.62618038e+00 5.61636558e+00 5.60656790e+00 5.59678731e+00 + 5.58702378e+00 5.57727729e+00 5.56754779e+00 5.55783527e+00 5.54813970e+00 + 5.53846103e+00 5.52879926e+00 5.51915433e+00 5.50952623e+00 5.49991493e+00 + 5.49032040e+00 5.48074260e+00 5.47118151e+00 5.46163710e+00 5.45210934e+00 + 5.44259820e+00 5.43310365e+00 5.42362567e+00 5.41416422e+00 5.40471928e+00 + 5.39529081e+00 5.38587879e+00 5.37648319e+00 5.36710398e+00 5.35774113e+00 + 5.34839462e+00 5.33906441e+00 5.32975047e+00 5.32045279e+00 5.31117132e+00 + 5.30190605e+00 5.29265694e+00 5.28342396e+00 5.27420709e+00 5.26500630e+00 + 5.25582156e+00 5.24665284e+00 5.23750012e+00 5.22836337e+00 5.21924255e+00 + 5.21013764e+00 5.20104862e+00 5.19197545e+00 5.18291812e+00 5.17387658e+00 + 5.16485081e+00 5.15584079e+00 5.14684649e+00 5.13786788e+00 5.12890493e+00 + 5.11995762e+00 5.11102591e+00 5.10210979e+00 5.09320922e+00 5.08432418e+00 + 5.07545464e+00 5.06660057e+00 5.05776195e+00 5.04893874e+00 5.04013093e+00 + 5.03133848e+00 5.02256137e+00 5.01379957e+00 5.00505306e+00 4.99632181e+00 + 4.98760578e+00 4.97890496e+00 4.97021933e+00 4.96154884e+00 4.95289348e+00 + 4.94425321e+00 4.93562802e+00 4.92701788e+00 4.91842276e+00 4.90984263e+00 + 4.90127747e+00 4.89272725e+00 4.88419194e+00 4.87567153e+00 4.86716598e+00 + 4.85867527e+00 4.85019937e+00 4.84173825e+00 4.83329190e+00 4.82486028e+00 + 4.81644337e+00 4.80804114e+00 4.79965357e+00 4.79128063e+00 4.78292230e+00 + 4.77457855e+00 4.76624936e+00 4.75793469e+00 4.74963453e+00 4.74134885e+00 + 4.73307763e+00 4.72482083e+00 4.71657844e+00 4.70835042e+00 4.70013676e+00 + 4.69193743e+00 4.68375240e+00 4.67558165e+00 4.66742516e+00 4.65928289e+00 + 4.65115483e+00 4.64304095e+00 4.63494122e+00 4.62685562e+00 4.61878412e+00 + 4.61072671e+00 4.60268335e+00 4.59465403e+00 4.58663871e+00 4.57863737e+00 + 4.57065000e+00 4.56267655e+00 4.55471702e+00 4.54677137e+00 4.53883958e+00 + 4.53092163e+00 4.52301749e+00 4.51512714e+00 4.50725056e+00 4.49938771e+00 + 4.49153859e+00 4.48370315e+00 4.47588139e+00 4.46807327e+00 4.46027877e+00 + 4.45249786e+00 4.44473053e+00 4.43697676e+00 4.42923650e+00 4.42150975e+00 + 4.41379648e+00 4.40609667e+00 4.39841029e+00 4.39073731e+00 4.38307772e+00 + 4.37543150e+00 4.36779861e+00 4.36017904e+00 4.35257276e+00 4.34497975e+00 + 4.33739998e+00 4.32983344e+00 4.32228010e+00 4.31473993e+00 4.30721292e+00 + 4.29969904e+00 4.29219827e+00 4.28471058e+00 4.27723595e+00 4.26977437e+00 + 4.26232580e+00 4.25489022e+00 4.24746762e+00 4.24005796e+00 4.23266123e+00 + 4.22527741e+00 4.21790646e+00 4.21054837e+00 4.20320312e+00 4.19587069e+00 + 4.18855104e+00 4.18124416e+00 4.17395003e+00 4.16666863e+00 4.15939992e+00 + 4.15214390e+00 4.14490054e+00 4.13766981e+00 4.13045169e+00 4.12324617e+00 + 4.11605322e+00 4.10887281e+00 4.10170493e+00 4.09454956e+00 4.08740667e+00 + 4.08027623e+00 4.07315824e+00 4.06605267e+00 4.05895949e+00 4.05187868e+00 + 4.04481023e+00 4.03775410e+00 4.03071029e+00 4.02367877e+00 4.01665951e+00 + 4.00965249e+00 4.00265770e+00 3.99567511e+00 3.98870471e+00 3.98174646e+00 + 3.97480035e+00 3.96786636e+00 3.96094447e+00 3.95403465e+00 3.94713688e+00 + 3.94025115e+00 3.93337743e+00 3.92651570e+00 3.91966594e+00 3.91282813e+00 + 3.90600225e+00 3.89918827e+00 3.89238619e+00 3.88559597e+00 3.87881759e+00 + 3.87205104e+00 3.86529629e+00 3.85855333e+00 3.85182213e+00 3.84510267e+00 + 3.83839494e+00 3.83169891e+00 3.82501455e+00 3.81834186e+00 3.81168081e+00 + 3.80503138e+00 3.79839355e+00 3.79176730e+00 3.78515260e+00 3.77854945e+00 + 3.77195782e+00 3.76537768e+00 3.75880903e+00 3.75225183e+00 3.74570607e+00 + 3.73917173e+00 3.73264879e+00 3.72613723e+00 3.71963703e+00 3.71314817e+00 + 3.70667063e+00 3.70020438e+00 3.69374942e+00 3.68730572e+00 3.68087326e+00 + 3.67445202e+00 3.66804198e+00 3.66164313e+00 3.65525544e+00 3.64887889e+00 + 3.64251346e+00 3.63615914e+00 3.62981591e+00 3.62348374e+00 3.61716261e+00 + 3.61085252e+00 3.60455343e+00 3.59826533e+00 3.59198820e+00 3.58572202e+00 + 3.57946677e+00 3.57322243e+00 3.56698899e+00 3.56076642e+00 3.55455471e+00 + 3.54835383e+00 3.54216377e+00 3.53598451e+00 3.52981602e+00 3.52365830e+00 + 3.51751132e+00 3.51137507e+00 3.50524952e+00 3.49913465e+00 3.49303045e+00 + 3.48693690e+00 3.48085398e+00 3.47478168e+00 3.46871996e+00 3.46266882e+00 + 3.45662824e+00 3.45059819e+00 3.44457866e+00 3.43856964e+00 3.43257109e+00 + 3.42658302e+00 3.42060538e+00 3.41463818e+00 3.40868138e+00 3.40273498e+00 + 3.39679895e+00 3.39087327e+00 3.38495794e+00 3.37905292e+00 3.37315820e+00 + 3.36727377e+00 3.36139960e+00 3.35553568e+00 3.34968199e+00 3.34383851e+00 + 3.33800522e+00 3.33218211e+00 3.32636916e+00 3.32056635e+00 3.31477366e+00 + 3.30899108e+00 3.30321858e+00 3.29745616e+00 3.29170379e+00 3.28596145e+00 + 3.28022913e+00 3.27450681e+00 3.26879447e+00 3.26309210e+00 3.25739967e+00 + 3.25171718e+00 3.24604460e+00 3.24038191e+00 3.23472911e+00 3.22908616e+00 + 3.22345306e+00 3.21782978e+00 3.21221632e+00 3.20661265e+00 3.20101875e+00 + 3.19543461e+00 3.18986021e+00 3.18429554e+00 3.17874058e+00 3.17319530e+00 + 3.16765970e+00 3.16213376e+00 3.15661745e+00 3.15111077e+00 3.14561370e+00 + 3.14012621e+00 3.13464830e+00 3.12917994e+00 3.12372113e+00 3.11827183e+00 + 3.11283204e+00 3.10740175e+00 3.10198092e+00 3.09656955e+00 3.09116763e+00 + 3.08577512e+00 3.08039202e+00 3.07501832e+00 3.06965398e+00 3.06429901e+00 + 3.05895338e+00 3.05361707e+00 3.04829007e+00 3.04297237e+00 3.03766394e+00 + 3.03236477e+00 3.02707485e+00 3.02179415e+00 3.01652267e+00 3.01126038e+00 + 3.00600727e+00 3.00076333e+00 2.99552853e+00 2.99030287e+00 2.98508632e+00 + 2.97987888e+00 2.97468051e+00 2.96949122e+00 2.96431098e+00 2.95913977e+00 + 2.95397759e+00 2.94882441e+00 2.94368022e+00 2.93854501e+00 2.93341875e+00 + 2.92830144e+00 2.92319305e+00 2.91809358e+00 2.91300300e+00 2.90792130e+00 + 2.90284847e+00 2.89778448e+00 2.89272933e+00 2.88768300e+00 2.88264547e+00 + 2.87761673e+00 2.87259676e+00 2.86758555e+00 2.86258309e+00 2.85758934e+00 + 2.85260431e+00 2.84762798e+00 2.84266033e+00 2.83770134e+00 2.83275101e+00 + 2.82780931e+00 2.82287623e+00 2.81795175e+00 2.81303587e+00 2.80812856e+00 + 2.80322982e+00 2.79833962e+00 2.79345795e+00 2.78858479e+00 2.78372014e+00 + 2.77886397e+00 2.77401628e+00 2.76917704e+00 2.76434625e+00 2.75952388e+00 + 2.75470992e+00 2.74990436e+00 2.74510719e+00 2.74031838e+00 2.73553793e+00 + 2.73076582e+00 2.72600203e+00 2.72124655e+00 2.71649937e+00 2.71176047e+00 + 2.70702984e+00 2.70230745e+00 2.69759331e+00 2.69288739e+00 2.68818968e+00 + 2.68350017e+00 2.67881883e+00 2.67414567e+00 2.66948065e+00 2.66482378e+00 + 2.66017502e+00 2.65553438e+00 2.65090183e+00 2.64627737e+00 2.64166097e+00 + 2.63705262e+00 2.63245232e+00 2.62786003e+00 2.62327576e+00 2.61869949e+00 + 2.61413120e+00 2.60957088e+00 2.60501852e+00 2.60047409e+00 2.59593760e+00 + 2.59140902e+00 2.58688833e+00 2.58237554e+00 2.57787061e+00 2.57337355e+00 + 2.56888433e+00 2.56440294e+00 2.55992937e+00 2.55546361e+00 2.55100563e+00 + 2.54655543e+00 2.54211300e+00 2.53767831e+00 2.53325136e+00 2.52883214e+00 + 2.52442062e+00 2.52001680e+00 2.51562066e+00 2.51123219e+00 2.50685138e+00 + 2.50247820e+00 2.49811266e+00 2.49375473e+00 2.48940441e+00 2.48506167e+00 + 2.48072651e+00 2.47639892e+00 2.47207887e+00 2.46776636e+00 2.46346137e+00 + 2.45916389e+00 2.45487391e+00 2.45059141e+00 2.44631638e+00 2.44204881e+00 + 2.43778869e+00 2.43353599e+00 2.42929072e+00 2.42505285e+00 2.42082238e+00 + 2.41659928e+00 2.41238355e+00 2.40817518e+00 2.40397415e+00 2.39978044e+00 + 2.39559405e+00 2.39141497e+00 2.38724317e+00 2.38307866e+00 2.37892141e+00 + 2.37477141e+00 2.37062865e+00 2.36649311e+00 2.36236479e+00 2.35824368e+00 + 2.35412975e+00 2.35002300e+00 2.34592341e+00 2.34183098e+00 2.33774568e+00 + 2.33366751e+00 2.32959646e+00 2.32553250e+00 2.32147564e+00 2.31742585e+00 + 2.31338313e+00 2.30934746e+00 2.30531883e+00 2.30129723e+00 2.29728265e+00 + 2.29327507e+00 2.28927447e+00 2.28528086e+00 2.28129422e+00 2.27731453e+00 + 2.27334178e+00 2.26937596e+00 2.26541706e+00 2.26146507e+00 2.25751997e+00 + 2.25358176e+00 2.24965041e+00 2.24572592e+00 2.24180828e+00 2.23789747e+00 + 2.23399349e+00 2.23009631e+00 2.22620593e+00 2.22232235e+00 2.21844553e+00 + 2.21457548e+00 2.21071218e+00 2.20685562e+00 2.20300578e+00 2.19916267e+00 + 2.19532625e+00 2.19149653e+00 2.18767349e+00 2.18385712e+00 2.18004741e+00 + 2.17624434e+00 2.17244791e+00 2.16865810e+00 2.16487490e+00 2.16109831e+00 + 2.15732830e+00 2.15356486e+00 2.14980799e+00 2.14605768e+00 2.14231391e+00 + 2.13857667e+00 2.13484594e+00 2.13112173e+00 2.12740401e+00 2.12369278e+00 + 2.11998803e+00 2.11628973e+00 2.11259789e+00 2.10891249e+00 2.10523352e+00 + 2.10156096e+00 2.09789481e+00 2.09423506e+00 2.09058169e+00 2.08693470e+00 + 2.08329406e+00 2.07965978e+00 2.07603184e+00 2.07241023e+00 2.06879493e+00 + 2.06518594e+00 2.06158325e+00 2.05798684e+00 2.05439671e+00 2.05081284e+00 + 2.04723522e+00 2.04366384e+00 2.04009869e+00 2.03653976e+00 2.03298704e+00 + 2.02944052e+00 2.02590019e+00 2.02236603e+00 2.01883803e+00 2.01531619e+00 + 2.01180050e+00 2.00829094e+00 2.00478749e+00 2.00129017e+00 1.99779894e+00 + 1.99431380e+00 1.99083474e+00 1.98736176e+00 1.98389483e+00 1.98043394e+00 + 1.97697910e+00 1.97353028e+00 1.97008748e+00 1.96665069e+00 1.96321989e+00 + 1.95979507e+00 1.95637623e+00 1.95296335e+00 1.94955643e+00 1.94615545e+00 + 1.94276041e+00 1.93937128e+00 1.93598807e+00 1.93261076e+00 1.92923934e+00 + 1.92587381e+00 1.92251414e+00 1.91916034e+00 1.91581238e+00 1.91247027e+00 + 1.90913398e+00 1.90580352e+00 1.90247887e+00 1.89916001e+00 1.89584695e+00 + 1.89253966e+00 1.88923815e+00 1.88594239e+00 1.88265239e+00 1.87936812e+00 + 1.87608958e+00 1.87281676e+00 1.86954965e+00 1.86628824e+00 1.86303252e+00 + 1.85978248e+00 1.85653811e+00 1.85329940e+00 1.85006634e+00 1.84683892e+00 + 1.84361712e+00 1.84040095e+00 1.83719039e+00 1.83398543e+00 1.83078606e+00 + 1.82759227e+00 1.82440406e+00 1.82122140e+00 1.81804430e+00 1.81487274e+00 + 1.81170671e+00 1.80854620e+00 1.80539121e+00 1.80224172e+00 1.79909773e+00 + 1.79595922e+00 1.79282619e+00 1.78969862e+00 1.78657650e+00 1.78345984e+00 + 1.78034861e+00 1.77724280e+00 1.77414242e+00 1.77104744e+00 1.76795786e+00 + 1.76487368e+00 1.76179487e+00 1.75872143e+00 1.75565336e+00 1.75259063e+00 + 1.74953325e+00 1.74648120e+00 1.74343448e+00 1.74039307e+00 1.73735697e+00 + 1.73432616e+00 1.73130064e+00 1.72828040e+00 1.72526543e+00 1.72225571e+00 + 1.71925125e+00 1.71625203e+00 1.71325804e+00 1.71026927e+00 1.70728571e+00 + 1.70430736e+00 1.70133421e+00 1.69836624e+00 1.69540345e+00 1.69244583e+00 + 1.68949336e+00 1.68654605e+00 1.68360388e+00 1.68066684e+00 1.67773492e+00 + 1.67480812e+00 1.67188642e+00 1.66896982e+00 1.66605831e+00 1.66315188e+00 + 1.66025051e+00 1.65735421e+00 1.65446296e+00 1.65157675e+00 1.64869558e+00 + 1.64581943e+00 1.64294830e+00 1.64008218e+00 1.63722106e+00 1.63436493e+00 + 1.63151378e+00 1.62866760e+00 1.62582639e+00 1.62299013e+00 1.62015883e+00 + 1.61733246e+00 1.61451102e+00 1.61169450e+00 1.60888289e+00 1.60607619e+00 + 1.60327439e+00 1.60047747e+00 1.59768543e+00 1.59489826e+00 1.59211595e+00 + 1.58933850e+00 1.58656589e+00 1.58379812e+00 1.58103517e+00 1.57827704e+00 + 1.57552373e+00 1.57277521e+00 1.57003149e+00 1.56729256e+00 1.56455840e+00 + 1.56182902e+00 1.55910439e+00 1.55638451e+00 1.55366938e+00 1.55095899e+00 + 1.54825332e+00 1.54555237e+00 1.54285614e+00 1.54016460e+00 1.53747776e+00 + 1.53479561e+00 1.53211813e+00 1.52944532e+00 1.52677718e+00 1.52411369e+00 + 1.52145484e+00 1.51880063e+00 1.51615105e+00 1.51350609e+00 1.51086575e+00 + 1.50823001e+00 1.50559886e+00 1.50297231e+00 1.50035033e+00 1.49773293e+00 + 1.49512009e+00 1.49251181e+00 1.48990808e+00 1.48730889e+00 1.48471423e+00 + 1.48212410e+00 1.47953849e+00 1.47695738e+00 1.47438077e+00 1.47180866e+00 + 1.46924103e+00 1.46667789e+00 1.46411921e+00 1.46156499e+00 1.45901522e+00 + 1.45646991e+00 1.45392903e+00 1.45139258e+00 1.44886055e+00 1.44633294e+00 + 1.44380974e+00 1.44129094e+00 1.43877653e+00 1.43626650e+00 1.43376085e+00 + 1.43125957e+00 1.42876265e+00 1.42627008e+00 1.42378186e+00 1.42129798e+00 + 1.41881843e+00 1.41634320e+00 1.41387229e+00 1.41140568e+00 1.40894338e+00 + 1.40648536e+00 1.40403164e+00 1.40158219e+00 1.39913701e+00 1.39669609e+00 + 1.39425943e+00 1.39182702e+00 1.38939885e+00 1.38697491e+00 1.38455519e+00 + 1.38213970e+00 1.37972841e+00 1.37732133e+00 1.37491844e+00 1.37251974e+00 + 1.37012522e+00 1.36773488e+00 1.36534870e+00 1.36296668e+00 1.36058881e+00 + 1.35821509e+00 1.35584550e+00 1.35348004e+00 1.35111870e+00 1.34876148e+00 + 1.34640837e+00 1.34405936e+00 1.34171444e+00 1.33937361e+00 1.33703685e+00 + 1.33470417e+00 1.33237555e+00 1.33005099e+00 1.32773048e+00 1.32541401e+00 + 1.32310158e+00 1.32079318e+00 1.31848880e+00 1.31618843e+00 1.31389207e+00 + 1.31159971e+00 1.30931134e+00 1.30702696e+00 1.30474655e+00 1.30247012e+00 + 1.30019766e+00 1.29792915e+00 1.29566459e+00 1.29340397e+00 1.29114730e+00 + 1.28889455e+00 1.28664572e+00 1.28440081e+00 1.28215981e+00 1.27992271e+00 + 1.27768951e+00 1.27546019e+00 1.27323475e+00 1.27101319e+00 1.26879549e+00 + 1.26658166e+00 1.26437168e+00 1.26216554e+00 1.25996324e+00 1.25776478e+00 + 1.25557014e+00 1.25337932e+00 1.25119231e+00 1.24900911e+00 1.24682971e+00 + 1.24465410e+00 1.24248227e+00 1.24031422e+00 1.23814994e+00 1.23598942e+00 + 1.23383267e+00 1.23167966e+00 1.22953040e+00 1.22738487e+00 1.22524308e+00 + 1.22310501e+00 1.22097065e+00 1.21884001e+00 1.21671307e+00 1.21458982e+00 + 1.21247027e+00 1.21035440e+00 1.20824220e+00 1.20613368e+00 1.20402882e+00 + 1.20192762e+00 1.19983006e+00 1.19773615e+00 1.19564588e+00 1.19355924e+00 + 1.19147622e+00 1.18939681e+00 1.18732102e+00 1.18524883e+00 1.18318024e+00 + 1.18111524e+00 1.17905382e+00 1.17699598e+00 1.17494171e+00 1.17289100e+00 + 1.17084385e+00 1.16880025e+00 1.16676020e+00 1.16472368e+00 1.16269069e+00 + 1.16066123e+00 1.15863529e+00 1.15661286e+00 1.15459393e+00 1.15257850e+00 + 1.15056656e+00 1.14855811e+00 1.14655314e+00 1.14455164e+00 1.14255360e+00 + 1.14055902e+00 1.13856790e+00 1.13658022e+00 1.13459599e+00 1.13261518e+00 + 1.13063780e+00 1.12866385e+00 1.12669330e+00 1.12472616e+00 1.12276243e+00 + 1.12080209e+00 1.11884513e+00 1.11689156e+00 1.11494136e+00 1.11299453e+00 + 1.11105106e+00 1.10911094e+00 1.10717418e+00 1.10524076e+00 1.10331067e+00 + 1.10138391e+00 1.09946048e+00 1.09754036e+00 1.09562355e+00 1.09371004e+00 + 1.09179983e+00 1.08989291e+00 1.08798928e+00 1.08608892e+00 1.08419183e+00 + 1.08229801e+00 1.08040745e+00 1.07852014e+00 1.07663607e+00 1.07475524e+00 + 1.07287764e+00 1.07100327e+00 1.06913211e+00 1.06726417e+00 1.06539944e+00 + 1.06353790e+00 1.06167956e+00 1.05982440e+00 1.05797242e+00 1.05612362e+00 + 1.05427798e+00 1.05243550e+00 1.05059618e+00 1.04876000e+00 1.04692697e+00 + 1.04509706e+00 1.04327029e+00 1.04144663e+00 1.03962609e+00 1.03780866e+00 + 1.03599433e+00 1.03418309e+00 1.03237494e+00 1.03056987e+00 1.02876787e+00 + 1.02696894e+00 1.02517308e+00 1.02338026e+00 1.02159050e+00 1.01980377e+00 + 1.01802009e+00 1.01623942e+00 1.01446178e+00 1.01268715e+00 1.01091553e+00 + 1.00914691e+00 1.00738129e+00 1.00561865e+00 1.00385899e+00 1.00210230e+00 + 1.00034859e+00 9.98597826e-01 9.96850019e-01 9.95105158e-01 9.93363237e-01 + 9.91624247e-01 9.89888182e-01 9.88155036e-01 9.86424801e-01 9.84697470e-01 + 9.82973037e-01 9.81251494e-01 9.79532833e-01 9.77817050e-01 9.76104135e-01 + 9.74394082e-01 9.72686884e-01 9.70982534e-01 9.69281024e-01 9.67582348e-01 + 9.65886497e-01 9.64193466e-01 9.62503247e-01 9.60815831e-01 9.59131213e-01 + 9.57449385e-01 9.55770339e-01 9.54094068e-01 9.52420565e-01 9.50749822e-01 + 9.49081831e-01 9.47416586e-01 9.45754078e-01 9.44094301e-01 9.42437246e-01 + 9.40782906e-01 9.39131273e-01 9.37482340e-01 9.35836098e-01 9.34192541e-01 + 9.32551660e-01 9.30913448e-01 9.29277896e-01 9.27644997e-01 9.26014743e-01 + 9.24387126e-01 9.22762138e-01 9.21139771e-01 9.19520016e-01 9.17902866e-01 + 9.16288312e-01 9.14676347e-01 9.13066962e-01 9.11460149e-01 9.09855898e-01 + 9.08254203e-01 9.06655055e-01 9.05058445e-01 9.03464364e-01 9.01872805e-01 + 9.00283757e-01 8.98697214e-01 8.97113166e-01 8.95531604e-01 8.93952519e-01 + 8.92375903e-01 8.90801747e-01 8.89230041e-01 8.87660777e-01 8.86093946e-01 + 8.84529538e-01 8.82967544e-01 8.81407955e-01 8.79850762e-01 8.78295955e-01 + 8.76743525e-01 8.75193462e-01 8.73645756e-01 8.72100399e-01 8.70557380e-01 + 8.69016689e-01 8.67478317e-01 8.65942254e-01 8.64408489e-01 8.62877013e-01 + 8.61347816e-01 8.59820887e-01 8.58296216e-01 8.56773792e-01 8.55253606e-01 + 8.53735646e-01 8.52219903e-01 8.50706365e-01 8.49195021e-01 8.47685862e-01 + 8.46178875e-01 8.44674050e-01 8.43171375e-01 8.41670840e-01 8.40172434e-01 + 8.38676144e-01 8.37181959e-01 8.35689868e-01 8.34199860e-01 8.32711921e-01 + 8.31226041e-01 8.29742208e-01 8.28260409e-01 8.26780632e-01 8.25302865e-01 + 8.23827096e-01 8.22353311e-01 8.20881500e-01 8.19411648e-01 8.17943742e-01 + 8.16477771e-01 8.15013721e-01 8.13551579e-01 8.12091331e-01 8.10632964e-01 + 8.09176465e-01 8.07721819e-01 8.06269013e-01 8.04818034e-01 8.03368867e-01 + 8.01921497e-01 8.00475911e-01 7.99032095e-01 7.97590032e-01 7.96149710e-01 + 7.94711113e-01 7.93274225e-01 7.91839032e-01 7.90405519e-01 7.88973670e-01 + 7.87543469e-01 7.86114901e-01 7.84687949e-01 7.83262598e-01 7.81838832e-01 + 7.80416634e-01 7.78995987e-01 7.77576875e-01 7.76159281e-01 7.74743187e-01 + 7.73328577e-01 7.71915434e-01 7.70503739e-01 7.69093474e-01 7.67684623e-01 + 7.66277166e-01 7.64871086e-01 7.63466364e-01 7.62062981e-01 7.60660918e-01 + 7.59260157e-01 7.57860677e-01 7.56462460e-01 7.55065486e-01 7.53669734e-01 + 7.52275185e-01 7.50881819e-01 7.49489615e-01 7.48098551e-01 7.46708608e-01 + 7.45319764e-01 7.43931997e-01 7.42545287e-01 7.41159610e-01 7.39774945e-01 + 7.38391270e-01 7.37008562e-01 7.35626797e-01 7.34245954e-01 7.32866009e-01 + 7.31486938e-01 7.30108717e-01 7.28731322e-01 7.27354729e-01 7.25978913e-01 + 7.24603850e-01 7.23229514e-01 7.21855879e-01 7.20482921e-01 7.19110613e-01 + 7.17738929e-01 7.16367842e-01 7.14997325e-01 7.13627352e-01 7.12257895e-01 + 7.10888926e-01 7.09520417e-01 7.08152340e-01 7.06784667e-01 7.05417367e-01 + 7.04050413e-01 7.02683774e-01 7.01317421e-01 6.99951322e-01 6.98585449e-01 + 6.97219770e-01 6.95854253e-01 6.94488867e-01 6.93123580e-01 6.91758361e-01 + 6.90393175e-01 6.89027991e-01 6.87662775e-01 6.86297494e-01 6.84932112e-01 + 6.83566597e-01 6.82200913e-01 6.80835024e-01 6.79468897e-01 6.78102493e-01 + 6.76735778e-01 6.75368715e-01 6.74001266e-01 6.72633394e-01 6.71265061e-01 + 6.69896229e-01 6.68526859e-01 6.67156913e-01 6.65786349e-01 6.64415130e-01 + 6.63043213e-01 6.61670559e-01 6.60297127e-01 6.58922874e-01 6.57547758e-01 + 6.56171737e-01 6.54794769e-01 6.53416809e-01 6.52037814e-01 6.50657740e-01 + 6.49276541e-01 6.47894172e-01 6.46510589e-01 6.45125744e-01 6.43739591e-01 + 6.42352084e-01 6.40963173e-01 6.39572812e-01 6.38180952e-01 6.36787543e-01 + 6.35392537e-01 6.33995883e-01 6.32597530e-01 6.31197429e-01 6.29795527e-01 + 6.28391772e-01 6.26986112e-01 6.25578493e-01 6.24168864e-01 6.22757168e-01 + 6.21343352e-01 6.19927361e-01 6.18509139e-01 6.17088630e-01 6.15665778e-01 + 6.14240525e-01 6.12812814e-01 6.11382586e-01 6.09949783e-01 6.08514346e-01 + 6.07076214e-01 6.05635329e-01 6.04191627e-01 6.02745049e-01 6.01295533e-01 + 5.99843016e-01 5.98387434e-01 5.96928726e-01 5.95466826e-01 5.94001669e-01 + 5.92533192e-01 5.91061329e-01 5.89586012e-01 5.88107176e-01 5.86624753e-01 + 5.85138676e-01 5.83648877e-01 5.82155286e-01 5.80657834e-01 5.79156452e-01 + 5.77651069e-01 5.76141614e-01 5.74628017e-01 5.73110204e-01 5.71588105e-01 + 5.70061645e-01 5.68530753e-01 5.66995353e-01 5.65455372e-01 5.63910735e-01 + 5.62361367e-01 5.60807191e-01 5.59248133e-01 5.57684115e-01 5.56115060e-01 + 5.54540891e-01 5.52961531e-01 5.51376899e-01 5.49786919e-01 5.48191511e-01 + 5.46590595e-01 5.44984092e-01 5.43371922e-01 5.41754003e-01 5.40130255e-01 + 5.38500598e-01 5.36864948e-01 5.35223225e-01 5.33575346e-01 5.31921229e-01 + 5.30260792e-01 5.28593951e-01 5.26920623e-01 5.25240726e-01 5.23554175e-01 + 5.21860887e-01 5.20160779e-01 5.18453766e-01 5.16739764e-01 5.15018690e-01 + 5.13290458e-01 5.11554986e-01 5.09812188e-01 5.08061981e-01 5.06304281e-01 + 5.04539002e-01 5.02766062e-01 5.00985377e-01 4.99196862e-01 4.97400434e-01 + 4.95596010e-01 4.93783507e-01 4.91962842e-01 4.90133933e-01 4.88296696e-01 + 4.86451051e-01 4.84596916e-01 4.82734210e-01 4.80862853e-01 4.78982764e-01 + 4.77093865e-01 4.75196076e-01 4.73289320e-01 4.71373519e-01 4.69448596e-01 + 4.67514476e-01 4.65571083e-01 4.63618344e-01 4.61656185e-01 4.59684533e-01 + 4.57703319e-01 4.55712470e-01 4.53711920e-01 4.51701599e-01 4.49681441e-01 + 4.47651381e-01 4.45611356e-01 4.43561302e-01 4.41501158e-01 4.39430866e-01 + 4.37350368e-01 4.35259607e-01 4.33158529e-01 4.31047082e-01 4.28925214e-01 + 4.26792878e-01 4.24650026e-01 4.22496614e-01 4.20332600e-01 4.18157943e-01 + 4.15972606e-01 4.13776552e-01 4.11569750e-01 4.09352169e-01 4.07123781e-01 + 4.04884561e-01 4.02634487e-01 4.00373539e-01 3.98101701e-01 3.95818960e-01 + 3.93525306e-01 3.91220732e-01 3.88905233e-01 3.86578811e-01 3.84241469e-01 + 3.81893212e-01 3.79534053e-01 3.77164006e-01 3.74783088e-01 3.72391322e-01 + 3.69988735e-01 3.67575357e-01 3.65151223e-01 3.62716372e-01 3.60270847e-01 + 3.57814698e-01 3.55347977e-01 3.52870741e-01 3.50383054e-01 3.47884982e-01 + 3.45376598e-01 3.42857980e-01 3.40329210e-01 3.37790377e-01 3.35241576e-01 + 3.32682904e-01 3.30114466e-01 3.27536375e-01 3.24948745e-01 3.22351700e-01 + 3.19745367e-01 3.17129881e-01 3.14505384e-01 3.11872021e-01 3.09229947e-01 + 3.06579321e-01 3.03920309e-01 3.01253084e-01 2.98577826e-01 2.95894721e-01 + 2.93203963e-01 2.90505751e-01 2.87800293e-01 2.85087802e-01 2.82368500e-01 + 2.79642616e-01 2.76910384e-01 2.74172047e-01 2.71427856e-01 2.68678067e-01 + 2.65922946e-01 2.63162764e-01 2.60397802e-01 2.57628345e-01 2.54854688e-01 + 2.52077134e-01 2.49295990e-01 2.46511575e-01 2.43724211e-01 2.40934231e-01 + 2.38141974e-01 2.35347785e-01 2.32552018e-01 2.29755035e-01 2.26957202e-01 + 2.24158896e-01 2.21360498e-01 2.18562398e-01 2.15764992e-01 2.12968683e-01 + 2.10173881e-01 2.07381001e-01 2.04590467e-01 2.01802708e-01 1.99018159e-01 + 1.96237262e-01 1.93460463e-01 1.90688215e-01 1.87920978e-01 1.85159214e-01 + 1.82403393e-01 1.79653988e-01 1.76911478e-01 1.74176346e-01 1.71449078e-01 + 1.68730166e-01 1.66020105e-01 1.63319392e-01 1.60628529e-01 1.57948020e-01 + 1.55278370e-01 1.52620090e-01 1.49973688e-01 1.47339678e-01 1.44718571e-01 + 1.42110882e-01 1.39517125e-01 1.36937815e-01 1.34373464e-01 1.31824585e-01 + 1.29291692e-01 1.26775293e-01 1.24275896e-01 1.21794008e-01 1.19330131e-01 + 1.16884763e-01 1.14458401e-01 1.12051535e-01 1.09664652e-01 1.07298233e-01 + 1.04952752e-01 1.02628679e-01 1.00326477e-01 9.80465996e-02 9.57894954e-02 + 9.35556034e-02 9.13453541e-02 8.91591692e-02 8.69974604e-02 8.48606296e-02 + 8.27490678e-02 8.06631552e-02 7.86032603e-02 7.65697396e-02 7.45629372e-02 + 7.25831842e-02 7.06307984e-02 6.87060837e-02 6.68093301e-02 6.49408125e-02 + 6.31007911e-02 6.12895107e-02 5.95072002e-02 5.77540725e-02 5.60303240e-02 + 5.43361344e-02 5.26716661e-02 5.10370645e-02 4.94324572e-02 4.78579541e-02 + 4.63136469e-02 4.47996091e-02 4.33158961e-02 4.18625443e-02 4.04395719e-02 + 3.90469781e-02 3.76847434e-02 3.63528295e-02 3.50511794e-02 3.37797170e-02 + 3.25383477e-02 3.13269583e-02 3.01454169e-02 2.89935733e-02 2.78712591e-02 + 2.67782878e-02 2.57144551e-02 2.46795395e-02 2.36733018e-02 2.26954864e-02 + 2.17458207e-02 2.08240164e-02 1.99297691e-02 1.90627592e-02 1.82226524e-02 + 1.74090997e-02 1.66217387e-02 1.58601934e-02 1.51240750e-02 1.44129830e-02 + 1.37265047e-02 1.30642170e-02 1.24256863e-02 1.18104693e-02 1.12181139e-02 + 1.06481597e-02 1.01001386e-02 9.57357566e-03 9.06798994e-03 8.58289491e-03 + 8.11779939e-03 7.67220821e-03 7.24562293e-03 6.83754260e-03 6.44746449e-03 + 6.07488475e-03 5.71929920e-03 5.38020397e-03 5.05709623e-03 4.74947488e-03 + 4.45684120e-03 4.17869948e-03 3.91455770e-03 3.66392815e-03 3.42632795e-03 + 3.20127973e-03 2.98831211e-03 2.78696025e-03 2.59676634e-03 2.41728009e-03 + 2.24805918e-03 2.08866967e-03 1.93868637e-03 1.79769324e-03 1.66528371e-03 + 1.54106094e-03 1.42463814e-03 1.31563879e-03 1.21369684e-03 1.11845687e-03 + 1.02957427e-03 9.46715341e-04 8.69557372e-04 7.97788699e-04 7.31108735e-04 + 6.69227965e-04 6.11867923e-04 5.58761133e-04 5.09651031e-04 4.64291866e-04 + 4.22448569e-04 3.83896609e-04 3.48421824e-04 3.15820237e-04 2.85897853e-04 + 2.58470437e-04 2.33363282e-04 2.10410963e-04 1.89457075e-04 1.70353970e-04 + 1.52962472e-04 1.37151601e-04 1.22798276e-04 1.09787020e-04 9.80096661e-05 + 8.73650533e-05 7.77587264e-05 6.91026357e-05 6.13148375e-05 5.43191980e-05 + 4.80451002e-05 4.24271553e-05 3.74049201e-05 3.29226193e-05 2.89288760e-05 + 2.53764482e-05 2.22219741e-05 1.94257256e-05 1.69513701e-05 1.47657424e-05 + 1.28386246e-05 1.11425370e-05 9.65253704e-06 8.34602949e-06 7.20258529e-06 + 6.20377051e-06 5.33298481e-06 4.57530930e-06 3.91736368e-06 3.34717241e-06 + 2.85403968e-06 2.42843291e-06 2.06187442e-06 1.74684104e-06 1.47667131e-06 + 1.24547984e-06 1.04807854e-06 8.79904460e-07 7.36953603e-07 6.15720668e-07 + 5.13144134e-07 4.26556442e-07 3.53638890e-07 2.92380919e-07 2.41043461e-07 + 1.98126025e-07 1.62337233e-07 1.32568519e-07 1.07870701e-07 8.74331951e-08 + 7.05656042e-08 5.66814737e-08 4.52839905e-08 3.59534344e-08 2.83361988e-08 + 2.21352123e-08 1.71016087e-08 1.30275039e-08 9.73975193e-09 7.09456503e-09 + 4.97289096e-09 3.27645509e-09 1.92438159e-09 8.50318607e-10 0.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 + 4.53389467e-02 4.53327431e-02 4.53265031e-02 4.53202265e-02 4.53139129e-02 + 4.53075623e-02 4.53011743e-02 4.52947488e-02 4.52882855e-02 4.52817842e-02 + 4.52752446e-02 4.52686667e-02 4.52620500e-02 4.52553944e-02 4.52486996e-02 + 4.52419655e-02 4.52351917e-02 4.52283781e-02 4.52215244e-02 4.52146304e-02 + 4.52076958e-02 4.52007205e-02 4.51937041e-02 4.51866464e-02 4.51795473e-02 + 4.51724064e-02 4.51652235e-02 4.51579983e-02 4.51507307e-02 4.51434204e-02 + 4.51360671e-02 4.51286707e-02 4.51212307e-02 4.51137471e-02 4.51062196e-02 + 4.50986478e-02 4.50910316e-02 4.50833707e-02 4.50756649e-02 4.50679139e-02 + 4.50601174e-02 4.50522752e-02 4.50443871e-02 4.50364528e-02 4.50284720e-02 + 4.50204445e-02 4.50123701e-02 4.50042484e-02 4.49960792e-02 4.49878623e-02 + 4.49795973e-02 4.49712841e-02 4.49629224e-02 4.49545118e-02 4.49460523e-02 + 4.49375433e-02 4.49289849e-02 4.49203765e-02 4.49117180e-02 4.49030092e-02 + 4.48942497e-02 4.48854393e-02 4.48765777e-02 4.48676646e-02 4.48586999e-02 + 4.48496831e-02 4.48406140e-02 4.48314924e-02 4.48223180e-02 4.48130905e-02 + 4.48038096e-02 4.47944750e-02 4.47850866e-02 4.47756439e-02 4.47661468e-02 + 4.47565949e-02 4.47469880e-02 4.47373257e-02 4.47276079e-02 4.47178342e-02 + 4.47080043e-02 4.46981180e-02 4.46881749e-02 4.46781749e-02 4.46681175e-02 + 4.46580026e-02 4.46478297e-02 4.46375987e-02 4.46273093e-02 4.46169612e-02 + 4.46065540e-02 4.45960875e-02 4.45855613e-02 4.45749753e-02 4.45643291e-02 + 4.45536224e-02 4.45428550e-02 4.45320264e-02 4.45211365e-02 4.45101850e-02 + 4.44991714e-02 4.44880957e-02 4.44769573e-02 4.44657562e-02 4.44544918e-02 + 4.44431640e-02 4.44317725e-02 4.44203169e-02 4.44087970e-02 4.43972124e-02 + 4.43855629e-02 4.43738481e-02 4.43620678e-02 4.43502215e-02 4.43383091e-02 + 4.43263303e-02 4.43142846e-02 4.43021719e-02 4.42899917e-02 4.42777439e-02 + 4.42654280e-02 4.42530439e-02 4.42405911e-02 4.42280693e-02 4.42154783e-02 + 4.42028178e-02 4.41900873e-02 4.41772867e-02 4.41644156e-02 4.41514736e-02 + 4.41384606e-02 4.41253761e-02 4.41122198e-02 4.40989915e-02 4.40856908e-02 + 4.40723174e-02 4.40588709e-02 4.40453512e-02 4.40317577e-02 4.40180903e-02 + 4.40043486e-02 4.39905323e-02 4.39766411e-02 4.39626746e-02 4.39486326e-02 + 4.39345146e-02 4.39203205e-02 4.39060498e-02 4.38917023e-02 4.38772775e-02 + 4.38627753e-02 4.38481953e-02 4.38335371e-02 4.38188004e-02 4.38039850e-02 + 4.37890904e-02 4.37741163e-02 4.37590625e-02 4.37439286e-02 4.37287143e-02 + 4.37134192e-02 4.36980431e-02 4.36825855e-02 4.36670463e-02 4.36514249e-02 + 4.36357212e-02 4.36199347e-02 4.36040652e-02 4.35881124e-02 4.35720758e-02 + 4.35559552e-02 4.35397502e-02 4.35234605e-02 4.35070859e-02 4.34906258e-02 + 4.34740801e-02 4.34574484e-02 4.34407303e-02 4.34239256e-02 4.34070338e-02 + 4.33900547e-02 4.33729879e-02 4.33558331e-02 4.33385900e-02 4.33212582e-02 + 4.33038375e-02 4.32863273e-02 4.32687276e-02 4.32510378e-02 4.32332577e-02 + 4.32153869e-02 4.31974251e-02 4.31793720e-02 4.31612273e-02 4.31429905e-02 + 4.31246614e-02 4.31062396e-02 4.30877249e-02 4.30691168e-02 4.30504150e-02 + 4.30316193e-02 4.30127292e-02 4.29937444e-02 4.29746647e-02 4.29554896e-02 + 4.29362189e-02 4.29168521e-02 4.28973890e-02 4.28778293e-02 4.28581725e-02 + 4.28384184e-02 4.28185667e-02 4.27986170e-02 4.27785689e-02 4.27584221e-02 + 4.27381764e-02 4.27178313e-02 4.26973866e-02 4.26768419e-02 4.26561968e-02 + 4.26354511e-02 4.26146044e-02 4.25936564e-02 4.25726067e-02 4.25514551e-02 + 4.25302011e-02 4.25088445e-02 4.24873849e-02 4.24658221e-02 4.24441555e-02 + 4.24223851e-02 4.24005103e-02 4.23785309e-02 4.23564466e-02 4.23342569e-02 + 4.23119617e-02 4.22895605e-02 4.22670531e-02 4.22444391e-02 4.22217182e-02 + 4.21988901e-02 4.21759543e-02 4.21529107e-02 4.21297589e-02 4.21064986e-02 + 4.20831293e-02 4.20596509e-02 4.20360630e-02 4.20123653e-02 4.19885574e-02 + 4.19646390e-02 4.19406099e-02 4.19164696e-02 4.18922179e-02 4.18678544e-02 + 4.18433789e-02 4.18187910e-02 4.17940904e-02 4.17692767e-02 4.17443498e-02 + 4.17193091e-02 4.16941545e-02 4.16688856e-02 4.16435022e-02 4.16180038e-02 + 4.15923902e-02 4.15666610e-02 4.15408160e-02 4.15148549e-02 4.14887773e-02 + 4.14625829e-02 4.14362715e-02 4.14098427e-02 4.13832961e-02 4.13566316e-02 + 4.13298488e-02 4.13029474e-02 4.12759271e-02 4.12487876e-02 4.12215285e-02 + 4.11941497e-02 4.11666507e-02 4.11390314e-02 4.11112913e-02 4.10834303e-02 + 4.10554479e-02 4.10273440e-02 4.09991182e-02 4.09707702e-02 4.09422997e-02 + 4.09137065e-02 4.08849902e-02 4.08561507e-02 4.08271875e-02 4.07981003e-02 + 4.07688890e-02 4.07395533e-02 4.07100927e-02 4.06805072e-02 4.06507963e-02 + 4.06209598e-02 4.05909974e-02 4.05609089e-02 4.05306940e-02 4.05003523e-02 + 4.04698837e-02 4.04392878e-02 4.04085645e-02 4.03777133e-02 4.03467341e-02 + 4.03156265e-02 4.02843904e-02 4.02530254e-02 4.02215313e-02 4.01899078e-02 + 4.01581547e-02 4.01262717e-02 4.00942586e-02 4.00621150e-02 4.00298408e-02 + 3.99974357e-02 3.99648994e-02 3.99322317e-02 3.98994324e-02 3.98665011e-02 + 3.98334377e-02 3.98002419e-02 3.97669134e-02 3.97334521e-02 3.96998576e-02 + 3.96661298e-02 3.96322684e-02 3.95982732e-02 3.95641439e-02 3.95298803e-02 + 3.94954822e-02 3.94609494e-02 3.94262816e-02 3.93914786e-02 3.93565402e-02 + 3.93214662e-02 3.92862563e-02 3.92509103e-02 3.92154280e-02 3.91798093e-02 + 3.91440538e-02 3.91081615e-02 3.90721319e-02 3.90359651e-02 3.89996607e-02 + 3.89632186e-02 3.89266386e-02 3.88899204e-02 3.88530638e-02 3.88160688e-02 + 3.87789350e-02 3.87416623e-02 3.87042506e-02 3.86666995e-02 3.86290090e-02 + 3.85911788e-02 3.85532089e-02 3.85150989e-02 3.84768487e-02 3.84384581e-02 + 3.83999271e-02 3.83612553e-02 3.83224427e-02 3.82834891e-02 3.82443943e-02 + 3.82051581e-02 3.81657804e-02 3.81262611e-02 3.80865999e-02 3.80467968e-02 + 3.80068516e-02 3.79667641e-02 3.79265342e-02 3.78861617e-02 3.78456466e-02 + 3.78049886e-02 3.77641877e-02 3.77232437e-02 3.76821564e-02 3.76409259e-02 + 3.75995518e-02 3.75580342e-02 3.75163728e-02 3.74745676e-02 3.74326184e-02 + 3.73905252e-02 3.73482878e-02 3.73059062e-02 3.72633801e-02 3.72207096e-02 + 3.71778945e-02 3.71349347e-02 3.70918301e-02 3.70485807e-02 3.70051863e-02 + 3.69616469e-02 3.69179623e-02 3.68741326e-02 3.68301575e-02 3.67860371e-02 + 3.67417713e-02 3.66973599e-02 3.66528030e-02 3.66081005e-02 3.65632522e-02 + 3.65182582e-02 3.64731184e-02 3.64278328e-02 3.63824012e-02 3.63368237e-02 + 3.62911002e-02 3.62452306e-02 3.61992149e-02 3.61530532e-02 3.61067453e-02 + 3.60602912e-02 3.60136909e-02 3.59669443e-02 3.59200516e-02 3.58730125e-02 + 3.58258272e-02 3.57784956e-02 3.57310177e-02 3.56833935e-02 3.56356230e-02 + 3.55877062e-02 3.55396431e-02 3.54914338e-02 3.54430781e-02 3.53945762e-02 + 3.53459280e-02 3.52971336e-02 3.52481930e-02 3.51991062e-02 3.51498733e-02 + 3.51004943e-02 3.50509692e-02 3.50012980e-02 3.49514809e-02 3.49015179e-02 + 3.48514089e-02 3.48011541e-02 3.47507535e-02 3.47002072e-02 3.46495153e-02 + 3.45986777e-02 3.45476946e-02 3.44965661e-02 3.44452923e-02 3.43938731e-02 + 3.43423087e-02 3.42905992e-02 3.42387447e-02 3.41867453e-02 3.41346010e-02 + 3.40823120e-02 3.40298784e-02 3.39773003e-02 3.39245778e-02 3.38717110e-02 + 3.38187000e-02 3.37655450e-02 3.37122461e-02 3.36588033e-02 3.36052170e-02 + 3.35514871e-02 3.34976139e-02 3.34435974e-02 3.33894379e-02 3.33351355e-02 + 3.32806903e-02 3.32261025e-02 3.31713722e-02 3.31164997e-02 3.30614851e-02 + 3.30063285e-02 3.29510303e-02 3.28955904e-02 3.28400092e-02 3.27842868e-02 + 3.27284234e-02 3.26724192e-02 3.26162745e-02 3.25599893e-02 3.25035640e-02 + 3.24469987e-02 3.23902937e-02 3.23334492e-02 3.22764654e-02 3.22193425e-02 + 3.21620807e-02 3.21046804e-02 3.20471418e-02 3.19894650e-02 3.19316504e-02 + 3.18736982e-02 3.18156086e-02 3.17573819e-02 3.16990185e-02 3.16405184e-02 + 3.15818821e-02 3.15231098e-02 3.14642018e-02 3.14051584e-02 3.13459798e-02 + 3.12866664e-02 3.12272184e-02 3.11676362e-02 3.11079200e-02 3.10480702e-02 + 3.09880871e-02 3.09279709e-02 3.08677221e-02 3.08073410e-02 3.07468278e-02 + 3.06861830e-02 3.06254068e-02 3.05644996e-02 3.05034617e-02 3.04422935e-02 + 3.03809954e-02 3.03195677e-02 3.02580108e-02 3.01963250e-02 3.01345108e-02 + 3.00725684e-02 3.00104983e-02 2.99483009e-02 2.98859765e-02 2.98235255e-02 + 2.97609484e-02 2.96982456e-02 2.96354174e-02 2.95724642e-02 2.95093865e-02 + 2.94461848e-02 2.93828593e-02 2.93194106e-02 2.92558390e-02 2.91921451e-02 + 2.91283292e-02 2.90643919e-02 2.90003335e-02 2.89361544e-02 2.88718553e-02 + 2.88074364e-02 2.87428984e-02 2.86782416e-02 2.86134665e-02 2.85485737e-02 + 2.84835636e-02 2.84184366e-02 2.83531933e-02 2.82878342e-02 2.82223598e-02 + 2.81567706e-02 2.80910670e-02 2.80252497e-02 2.79593190e-02 2.78932756e-02 + 2.78271200e-02 2.77608527e-02 2.76944743e-02 2.76279852e-02 2.75613861e-02 + 2.74946774e-02 2.74278597e-02 2.73609337e-02 2.72938997e-02 2.72267585e-02 + 2.71595106e-02 2.70921565e-02 2.70246969e-02 2.69571323e-02 2.68894633e-02 + 2.68216905e-02 2.67538145e-02 2.66858359e-02 2.66177553e-02 2.65495734e-02 + 2.64812906e-02 2.64129077e-02 2.63444253e-02 2.62758439e-02 2.62071643e-02 + 2.61383871e-02 2.60695128e-02 2.60005422e-02 2.59314759e-02 2.58623146e-02 + 2.57930588e-02 2.57237094e-02 2.56542668e-02 2.55847319e-02 2.55151052e-02 + 2.54453875e-02 2.53755794e-02 2.53056817e-02 2.52356950e-02 2.51656200e-02 + 2.50954574e-02 2.50252079e-02 2.49548723e-02 2.48844512e-02 2.48139453e-02 + 2.47433555e-02 2.46726823e-02 2.46019266e-02 2.45310890e-02 2.44601704e-02 + 2.43891714e-02 2.43180928e-02 2.42469353e-02 2.41756998e-02 2.41043869e-02 + 2.40329974e-02 2.39615321e-02 2.38899918e-02 2.38183773e-02 2.37466892e-02 + 2.36749285e-02 2.36030958e-02 2.35311920e-02 2.34592179e-02 2.33871743e-02 + 2.33150620e-02 2.32428818e-02 2.31706345e-02 2.30983209e-02 2.30259418e-02 + 2.29534982e-02 2.28809907e-02 2.28084202e-02 2.27357877e-02 2.26630938e-02 + 2.25903395e-02 2.25175256e-02 2.24446529e-02 2.23717224e-02 2.22987349e-02 + 2.22256912e-02 2.21525922e-02 2.20794387e-02 2.20062318e-02 2.19329721e-02 + 2.18596607e-02 2.17862985e-02 2.17128862e-02 2.16394248e-02 2.15659152e-02 + 2.14923583e-02 2.14187550e-02 2.13451062e-02 2.12714129e-02 2.11976759e-02 + 2.11238962e-02 2.10500747e-02 2.09762124e-02 2.09023101e-02 2.08283688e-02 + 2.07543894e-02 2.06803729e-02 2.06063203e-02 2.05322324e-02 2.04581103e-02 + 2.03839549e-02 2.03097671e-02 2.02355480e-02 2.01612984e-02 2.00870195e-02 + 2.00127120e-02 1.99383771e-02 1.98640157e-02 1.97896288e-02 1.97152174e-02 + 1.96407825e-02 1.95663250e-02 1.94918460e-02 1.94173465e-02 1.93428275e-02 + 1.92682899e-02 1.91937349e-02 1.91191634e-02 1.90445765e-02 1.89699751e-02 + 1.88953603e-02 1.88207331e-02 1.87460946e-02 1.86714458e-02 1.85967877e-02 + 1.85221214e-02 1.84474479e-02 1.83727683e-02 1.82980836e-02 1.82233949e-02 + 1.81487032e-02 1.80740096e-02 1.79993152e-02 1.79246210e-02 1.78499281e-02 + 1.77752375e-02 1.77005504e-02 1.76258678e-02 1.75511908e-02 1.74765205e-02 + 1.74018580e-02 1.73272043e-02 1.72525605e-02 1.71779279e-02 1.71033073e-02 + 1.70287000e-02 1.69541070e-02 1.68795295e-02 1.68049686e-02 1.67304253e-02 + 1.66559008e-02 1.65813962e-02 1.65069126e-02 1.64324512e-02 1.63580130e-02 + 1.62835992e-02 1.62092109e-02 1.61348493e-02 1.60605154e-02 1.59862105e-02 + 1.59119355e-02 1.58376918e-02 1.57634804e-02 1.56893025e-02 1.56151592e-02 + 1.55410517e-02 1.54669811e-02 1.53929486e-02 1.53189553e-02 1.52450023e-02 + 1.51710909e-02 1.50972223e-02 1.50233975e-02 1.49496177e-02 1.48758841e-02 + 1.48021979e-02 1.47285602e-02 1.46549722e-02 1.45814351e-02 1.45079501e-02 + 1.44345183e-02 1.43611409e-02 1.42878191e-02 1.42145541e-02 1.41413471e-02 + 1.40681992e-02 1.39951117e-02 1.39220856e-02 1.38491223e-02 1.37762230e-02 + 1.37033887e-02 1.36306207e-02 1.35579202e-02 1.34852884e-02 1.34127265e-02 + 1.33402357e-02 1.32678172e-02 1.31954721e-02 1.31232018e-02 1.30510074e-02 + 1.29788901e-02 1.29068512e-02 1.28348917e-02 1.27630130e-02 1.26912163e-02 + 1.26195027e-02 1.25478735e-02 1.24763299e-02 1.24048731e-02 1.23335043e-02 + 1.22622247e-02 1.21910356e-02 1.21199382e-02 1.20489337e-02 1.19780233e-02 + 1.19072082e-02 1.18364896e-02 1.17658689e-02 1.16953471e-02 1.16249256e-02 + 1.15546055e-02 1.14843880e-02 1.14142745e-02 1.13442661e-02 1.12743640e-02 + 1.12045694e-02 1.11348837e-02 1.10653080e-02 1.09958435e-02 1.09264915e-02 + 1.08572532e-02 1.07881298e-02 1.07191225e-02 1.06502326e-02 1.05814614e-02 + 1.05128099e-02 1.04442795e-02 1.03758714e-02 1.03075868e-02 1.02394270e-02 + 1.01713931e-02 1.01034863e-02 1.00357080e-02 9.96805938e-03 9.90054159e-03 + 9.83315588e-03 9.76590349e-03 9.69878565e-03 9.63180356e-03 9.56495846e-03 + 9.49825158e-03 9.43168412e-03 9.36525732e-03 9.29897239e-03 9.23283056e-03 + 9.16683304e-03 9.10098106e-03 9.03527584e-03 8.96971858e-03 8.90431051e-03 + 8.83905284e-03 8.77394680e-03 8.70899358e-03 8.64419441e-03 8.57955050e-03 + 8.51506306e-03 8.45073329e-03 8.38656242e-03 8.32255164e-03 8.25870216e-03 + 8.19501519e-03 8.13149193e-03 8.06813358e-03 8.00494135e-03 7.94191644e-03 + 7.87906004e-03 7.81637336e-03 7.75385758e-03 7.69151390e-03 7.62934352e-03 + 7.56734762e-03 7.50552740e-03 7.44388405e-03 7.38241874e-03 7.32113267e-03 + 7.26002701e-03 7.19910295e-03 7.13836168e-03 7.07780435e-03 7.01743216e-03 + 6.95724627e-03 6.89724785e-03 6.83743808e-03 6.77781812e-03 6.71838914e-03 + 6.65915230e-03 6.60010876e-03 6.54125968e-03 6.48260622e-03 6.42414954e-03 + 6.36589077e-03 6.30783108e-03 6.24997161e-03 6.19231351e-03 6.13485792e-03 + 6.07760598e-03 6.02055882e-03 5.96371759e-03 5.90708341e-03 5.85065741e-03 + 5.79444073e-03 5.73843448e-03 5.68263980e-03 5.62705779e-03 5.57168957e-03 + 5.51653626e-03 5.46159897e-03 5.40687880e-03 5.35237687e-03 5.29809427e-03 + 5.24403210e-03 5.19019145e-03 5.13657343e-03 5.08317911e-03 5.03000960e-03 + 4.97706596e-03 4.92434928e-03 4.87186064e-03 4.81960110e-03 4.76757175e-03 + 4.71577365e-03 4.66420785e-03 4.61287543e-03 4.56177744e-03 4.51091492e-03 + 4.46028894e-03 4.40990054e-03 4.35975075e-03 4.30984062e-03 4.26017119e-03 + 4.21074348e-03 4.16155853e-03 4.11261735e-03 4.06392097e-03 4.01547041e-03 + 3.96726667e-03 3.91931077e-03 3.87160371e-03 3.82414649e-03 3.77694011e-03 + 3.72998556e-03 3.68328384e-03 3.63683592e-03 3.59064278e-03 3.54470541e-03 + 3.49902478e-03 3.45360184e-03 3.40843758e-03 3.36353294e-03 3.31888889e-03 + 3.27450637e-03 3.23038633e-03 3.18652971e-03 3.14293745e-03 3.09961049e-03 + 3.05654975e-03 3.01375616e-03 2.97123063e-03 2.92897409e-03 2.88698744e-03 + 2.84527159e-03 2.80382744e-03 2.76265588e-03 2.72175782e-03 2.68113413e-03 + 2.64078570e-03 2.60071340e-03 2.56091812e-03 2.52140071e-03 2.48216204e-03 + 2.44320296e-03 2.40452434e-03 2.36612702e-03 2.32801183e-03 2.29017962e-03 + 2.25263123e-03 2.21536748e-03 2.17838918e-03 2.14169717e-03 2.10529225e-03 + 2.06917522e-03 2.03334690e-03 1.99780807e-03 1.96255953e-03 1.92760207e-03 + 1.89293646e-03 1.85856348e-03 1.82448389e-03 1.79069847e-03 1.75720797e-03 + 1.72401315e-03 1.69111475e-03 1.65851352e-03 1.62621019e-03 1.59420549e-03 + 1.56250015e-03 1.53109488e-03 1.49999041e-03 1.46918745e-03 1.43868668e-03 + 1.40848882e-03 1.37859455e-03 1.34900456e-03 1.31971952e-03 1.29074012e-03 + 1.26206701e-03 1.23370087e-03 1.20564235e-03 1.17789209e-03 1.15045075e-03 + 1.12331895e-03 1.09649735e-03 1.06998655e-03 1.04378718e-03 1.01789986e-03 + 9.92325188e-04 9.67063773e-04 9.42116210e-04 9.17483089e-04 8.93164993e-04 + 8.69162499e-04 8.45476180e-04 8.22106600e-04 7.99054319e-04 7.76319888e-04 + 7.53903856e-04 7.31806761e-04 7.10029137e-04 6.88571513e-04 6.67434408e-04 + 6.46618339e-04 6.26123813e-04 6.05951333e-04 5.86101393e-04 5.66574484e-04 + 5.47371087e-04 5.28491680e-04 5.09936731e-04 4.91706704e-04 4.73802056e-04 + 4.56223237e-04 4.38970690e-04 4.22044853e-04 4.05446155e-04 3.89175022e-04 + 3.73231869e-04 3.57617108e-04 3.42331143e-04 3.27374371e-04 3.12747182e-04 + 2.98449961e-04 2.84483085e-04 2.70846924e-04 2.57541843e-04 2.44568198e-04 + 2.31926339e-04 2.19616611e-04 2.07639350e-04 1.95994886e-04 1.84683542e-04 + 1.73705635e-04 1.63061474e-04 1.52751363e-04 1.42775596e-04 1.33134463e-04 + 1.23828246e-04 1.14857221e-04 1.06221656e-04 9.79218126e-05 8.99579451e-05 + 8.23303015e-05 7.50391226e-05 6.80846422e-05 6.14670874e-05 5.51866780e-05 + 4.92436271e-05 4.36381409e-05 3.83704183e-05 3.34406516e-05 2.88490259e-05 + 2.45957193e-05 2.06809031e-05 1.71047413e-05 1.38673912e-05 1.09690028e-05 + 8.40971934e-06 6.18967683e-06 4.30900435e-06 2.76782395e-06 1.56625059e-06 + 7.04392234e-07 1.82349766e-07 2.17034037e-10 1.58080827e-07 6.56020874e-07 + 1.49410985e-06 2.67241335e-06 4.19098991e-06 6.04989101e-06 8.24916105e-06 + 1.07888373e-05 1.36689501e-05 1.68895226e-05 2.04505708e-05 2.43521039e-05 + 2.85941236e-05 3.31766250e-05 3.80995957e-05 4.33630165e-05 4.89668610e-05 + 5.49110958e-05 6.11956802e-05 6.78205668e-05 7.47857008e-05 8.20910205e-05 + 8.97364570e-05 9.77219344e-05 1.06047370e-04 1.14712673e-04 1.23717748e-04 + 1.33062489e-04 1.42746785e-04 1.52770519e-04 1.63133565e-04 1.73835790e-04 + 1.84877056e-04 1.96257216e-04 2.07976116e-04 2.20033596e-04 2.32429488e-04 + 2.45163619e-04 2.58235806e-04 2.71645861e-04 2.85393588e-04 2.99478785e-04 + 3.13901243e-04 3.28660745e-04 3.43757067e-04 3.59189980e-04 3.74959246e-04 + 3.91064620e-04 4.07505852e-04 4.24282683e-04 4.41394848e-04 4.58842075e-04 + 4.76624086e-04 4.94740595e-04 5.13191308e-04 5.31975927e-04 5.51094145e-04 + 5.70545649e-04 5.90330119e-04 6.10447228e-04 6.30896641e-04 6.51678020e-04 + 6.72791016e-04 6.94235275e-04 7.16010436e-04 7.38116133e-04 7.60551989e-04 + 7.83317625e-04 8.06412652e-04 8.29836676e-04 8.53589295e-04 8.77670102e-04 + 9.02078682e-04 9.26814614e-04 9.51877469e-04 9.77266814e-04 1.00298221e-03 + 1.02902320e-03 1.05538934e-03 1.08208017e-03 1.10909521e-03 1.13643400e-03 + 1.16409605e-03 1.19208087e-03 1.22038798e-03 1.24901688e-03 1.27796705e-03 + 1.30723798e-03 1.33682916e-03 1.36674006e-03 1.39697014e-03 1.42751887e-03 + 1.45838571e-03 1.48957010e-03 1.52107149e-03 1.55288931e-03 1.58502299e-03 + 1.61747195e-03 1.65023562e-03 1.68331340e-03 1.71670471e-03 1.75040893e-03 + 1.78442547e-03 1.81875370e-03 1.85339302e-03 1.88834278e-03 1.92360237e-03 + 1.95917115e-03 1.99504847e-03 2.03123368e-03 2.06772612e-03 2.10452514e-03 + 2.14163007e-03 2.17904023e-03 2.21675494e-03 2.25477353e-03 2.29309529e-03 + 2.33171954e-03 2.37064556e-03 2.40987266e-03 2.44940011e-03 2.48922720e-03 + 2.52935320e-03 2.56977738e-03 2.61049901e-03 2.65151733e-03 2.69283161e-03 + 2.73444108e-03 2.77634500e-03 2.81854259e-03 2.86103308e-03 2.90381571e-03 + 2.94688968e-03 2.99025421e-03 3.03390851e-03 3.07785179e-03 3.12208323e-03 + 3.16660203e-03 3.21140738e-03 3.25649846e-03 3.30187444e-03 3.34753450e-03 + 3.39347780e-03 3.43970351e-03 3.48621077e-03 3.53299874e-03 3.58006656e-03 + 3.62741337e-03 3.67503832e-03 3.72294052e-03 3.77111911e-03 3.81957320e-03 + 3.86830191e-03 3.91730435e-03 3.96657963e-03 4.01612685e-03 4.06594510e-03 + 4.11603347e-03 4.16639106e-03 4.21701694e-03 4.26791019e-03 4.31906988e-03 + 4.37049509e-03 4.42218487e-03 4.47413829e-03 4.52635439e-03 4.57883223e-03 + 4.63157086e-03 4.68456931e-03 4.73782663e-03 4.79134184e-03 4.84511397e-03 + 4.89914205e-03 4.95342510e-03 5.00796213e-03 5.06275215e-03 5.11779417e-03 + 5.17308719e-03 5.22863021e-03 5.28442223e-03 5.34046224e-03 5.39674921e-03 + 5.45328215e-03 5.51006002e-03 5.56708180e-03 5.62434646e-03 5.68185296e-03 + 5.73960028e-03 5.79758737e-03 5.85581318e-03 5.91427668e-03 5.97297680e-03 + 6.03191249e-03 6.09108270e-03 6.15048635e-03 6.21012239e-03 6.26998975e-03 + 6.33008735e-03 6.39041412e-03 6.45096897e-03 6.51175083e-03 6.57275861e-03 + 6.63399121e-03 6.69544755e-03 6.75712653e-03 6.81902705e-03 6.88114800e-03 + 6.94348829e-03 7.00604680e-03 7.06882243e-03 7.13181405e-03 7.19502055e-03 + 7.25844081e-03 7.32207370e-03 7.38591811e-03 7.44997289e-03 7.51423692e-03 + 7.57870906e-03 7.64338818e-03 7.70827314e-03 7.77336279e-03 7.83865598e-03 + 7.90415157e-03 7.96984842e-03 8.03574535e-03 8.10184123e-03 8.16813489e-03 + 8.23462517e-03 8.30131091e-03 8.36819094e-03 8.43526409e-03 8.50252920e-03 + 8.56998510e-03 8.63763060e-03 8.70546454e-03 8.77348574e-03 8.84169300e-03 + 8.91008516e-03 8.97866103e-03 9.04741942e-03 9.11635914e-03 9.18547900e-03 + 9.25477781e-03 9.32425437e-03 9.39390750e-03 9.46373598e-03 9.53373863e-03 + 9.60391424e-03 9.67426160e-03 9.74477953e-03 9.81546680e-03 9.88632220e-03 + 9.95734455e-03 1.00285326e-02 1.00998852e-02 1.01714010e-02 1.02430790e-02 + 1.03149178e-02 1.03869163e-02 1.04590732e-02 1.05313873e-02 1.06038573e-02 + 1.06764822e-02 1.07492606e-02 1.08221913e-02 1.08952731e-02 1.09685048e-02 + 1.10418851e-02 1.11154129e-02 1.11890868e-02 1.12629056e-02 1.13368682e-02 + 1.14109733e-02 1.14852196e-02 1.15596060e-02 1.16341311e-02 1.17087939e-02 + 1.17835929e-02 1.18585270e-02 1.19335950e-02 1.20087956e-02 1.20841275e-02 + 1.21595896e-02 1.22351806e-02 1.23108993e-02 1.23867443e-02 1.24627146e-02 + 1.25388088e-02 1.26150258e-02 1.26913641e-02 1.27678228e-02 1.28444004e-02 + 1.29210957e-02 1.29979076e-02 1.30748347e-02 1.31518759e-02 1.32290298e-02 + 1.33062953e-02 1.33836711e-02 1.34611560e-02 1.35387487e-02 1.36164479e-02 + 1.36942526e-02 1.37721613e-02 1.38501730e-02 1.39282862e-02 1.40064999e-02 + 1.40848127e-02 1.41632235e-02 1.42417309e-02 1.43203338e-02 1.43990309e-02 + 1.44778210e-02 1.45567029e-02 1.46356752e-02 1.47147369e-02 1.47938866e-02 + 1.48731231e-02 1.49524452e-02 1.50318517e-02 1.51113413e-02 1.51909129e-02 + 1.52705651e-02 1.53502967e-02 1.54301066e-02 1.55099935e-02 1.55899562e-02 + 1.56699935e-02 1.57501041e-02 1.58302868e-02 1.59105404e-02 1.59908637e-02 + 1.60712555e-02 1.61517145e-02 1.62322396e-02 1.63128295e-02 1.63934830e-02 + 1.64741990e-02 1.65549761e-02 1.66358133e-02 1.67167092e-02 1.67976627e-02 + 1.68786727e-02 1.69597378e-02 1.70408569e-02 1.71220288e-02 1.72032523e-02 + 1.72845263e-02 1.73658494e-02 1.74472205e-02 1.75286385e-02 1.76101022e-02 + 1.76916103e-02 1.77731617e-02 1.78547552e-02 1.79363896e-02 1.80180638e-02 + 1.80997765e-02 1.81815267e-02 1.82633131e-02 1.83451345e-02 1.84269898e-02 + 1.85088779e-02 1.85907975e-02 1.86727476e-02 1.87547269e-02 1.88367342e-02 + 1.89187685e-02 1.90008287e-02 1.90829134e-02 1.91650216e-02 1.92471522e-02 + 1.93293040e-02 1.94114759e-02 1.94936667e-02 1.95758753e-02 1.96581005e-02 + 1.97403413e-02 1.98225965e-02 1.99048650e-02 1.99871456e-02 2.00694373e-02 + 2.01517389e-02 2.02340493e-02 2.03163675e-02 2.03986922e-02 2.04810224e-02 + 2.05633570e-02 2.06456948e-02 2.07280349e-02 2.08103760e-02 2.08927172e-02 + 2.09750572e-02 2.10573951e-02 2.11397297e-02 2.12220600e-02 2.13043849e-02 + 2.13867032e-02 2.14690140e-02 2.15513162e-02 2.16336087e-02 2.17158904e-02 + 2.17981604e-02 2.18804174e-02 2.19626605e-02 2.20448887e-02 2.21271008e-02 + 2.22092959e-02 2.22914729e-02 2.23736307e-02 2.24557683e-02 2.25378848e-02 + 2.26199790e-02 2.27020500e-02 2.27840967e-02 2.28661181e-02 2.29481132e-02 + 2.30300810e-02 2.31120205e-02 2.31939306e-02 2.32758105e-02 2.33576590e-02 + 2.34394752e-02 2.35212581e-02 2.36030067e-02 2.36847200e-02 2.37663971e-02 + 2.38480370e-02 2.39296387e-02 2.40112012e-02 2.40927236e-02 2.41742049e-02 + 2.42556442e-02 2.43370404e-02 2.44183927e-02 2.44997002e-02 2.45809618e-02 + 2.46621766e-02 2.47433437e-02 2.48244622e-02 2.49055311e-02 2.49865495e-02 + 2.50675165e-02 2.51484312e-02 2.52292926e-02 2.53100999e-02 2.53908522e-02 + 2.54715485e-02 2.55521880e-02 2.56327697e-02 2.57132928e-02 2.57937564e-02 + 2.58741596e-02 2.59545015e-02 2.60347813e-02 2.61149981e-02 2.61951510e-02 + 2.62752391e-02 2.63552617e-02 2.64352178e-02 2.65151067e-02 2.65949274e-02 + 2.66746791e-02 2.67543610e-02 2.68339722e-02 2.69135120e-02 2.69929795e-02 + 2.70723738e-02 2.71516942e-02 2.72309399e-02 2.73101100e-02 2.73892038e-02 + 2.74682203e-02 2.75471590e-02 2.76260189e-02 2.77047992e-02 2.77834992e-02 + 2.78621182e-02 2.79406553e-02 2.80191097e-02 2.80974807e-02 2.81757676e-02 + 2.82539695e-02 2.83320858e-02 2.84101156e-02 2.84880583e-02 2.85659130e-02 + 2.86436791e-02 2.87213558e-02 2.87989425e-02 2.88764383e-02 2.89538425e-02 + 2.90311545e-02 2.91083735e-02 2.91854988e-02 2.92625297e-02 2.93394656e-02 + 2.94163057e-02 2.94930493e-02 2.95696958e-02 2.96462444e-02 2.97226946e-02 + 2.97990456e-02 2.98752967e-02 2.99514473e-02 3.00274968e-02 3.01034445e-02 + 3.01792897e-02 3.02550318e-02 3.03306701e-02 3.04062041e-02 3.04816331e-02 + 3.05569564e-02 3.06321734e-02 3.07072835e-02 3.07822862e-02 3.08571807e-02 + 3.09319665e-02 3.10066430e-02 3.10812096e-02 3.11556657e-02 3.12300107e-02 + 3.13042440e-02 3.13783650e-02 3.14523732e-02 3.15262680e-02 3.16000488e-02 + 3.16737152e-02 3.17472664e-02 3.18207019e-02 3.18940213e-02 3.19672240e-02 + 3.20403094e-02 3.21132769e-02 3.21861262e-02 3.22588565e-02 3.23314675e-02 + 3.24039586e-02 3.24763292e-02 3.25485790e-02 3.26207072e-02 3.26927136e-02 + 3.27645975e-02 3.28363586e-02 3.29079962e-02 3.29795099e-02 3.30508993e-02 + 3.31221638e-02 3.31933030e-02 3.32643164e-02 3.33352036e-02 3.34059641e-02 + 3.34765975e-02 3.35471032e-02 3.36174810e-02 3.36877302e-02 3.37578506e-02 + 3.38278416e-02 3.38977028e-02 3.39674339e-02 3.40370344e-02 3.41065038e-02 + 3.41758418e-02 3.42450480e-02 3.43141220e-02 3.43830633e-02 3.44518716e-02 + 3.45205465e-02 3.45890876e-02 3.46574946e-02 3.47257670e-02 3.47939045e-02 + 3.48619068e-02 3.49297734e-02 3.49975040e-02 3.50650982e-02 3.51325558e-02 + 3.51998763e-02 3.52670594e-02 3.53341048e-02 3.54010122e-02 3.54677812e-02 + 3.55344115e-02 3.56009027e-02 3.56672546e-02 3.57334669e-02 3.57995392e-02 + 3.58654713e-02 3.59312628e-02 3.59969135e-02 3.60624230e-02 3.61277911e-02 + 3.61930174e-02 3.62581018e-02 3.63230440e-02 3.63878435e-02 3.64525003e-02 + 3.65170141e-02 3.65813845e-02 3.66456113e-02 3.67096943e-02 3.67736333e-02 + 3.68374279e-02 3.69010780e-02 3.69645833e-02 3.70279436e-02 3.70911587e-02 + 3.71542283e-02 3.72171522e-02 3.72799303e-02 3.73425622e-02 3.74050478e-02 + 3.74673870e-02 3.75295794e-02 3.75916249e-02 3.76535233e-02 3.77152744e-02 + 3.77768781e-02 3.78383342e-02 3.78996424e-02 3.79608026e-02 3.80218147e-02 + 3.80826785e-02 3.81433938e-02 3.82039604e-02 3.82643783e-02 3.83246472e-02 + 3.83847671e-02 3.84447377e-02 3.85045590e-02 3.85642308e-02 3.86237529e-02 + 3.86831254e-02 3.87423479e-02 3.88014204e-02 3.88603429e-02 3.89191151e-02 + 3.89777370e-02 3.90362085e-02 3.90945294e-02 3.91526997e-02 3.92107193e-02 + 3.92685881e-02 3.93263060e-02 3.93838729e-02 3.94412887e-02 3.94985534e-02 + 3.95556669e-02 3.96126291e-02 3.96694400e-02 3.97260994e-02 3.97826074e-02 + 3.98389638e-02 3.98951687e-02 3.99512220e-02 4.00071236e-02 4.00628735e-02 + 4.01184716e-02 4.01739179e-02 4.02292125e-02 4.02843552e-02 4.03393460e-02 + 4.03941849e-02 4.04488719e-02 4.05034070e-02 4.05577901e-02 4.06120213e-02 + 4.06661006e-02 4.07200279e-02 4.07738032e-02 4.08274266e-02 4.08808980e-02 + 4.09342175e-02 4.09873851e-02 4.10404007e-02 4.10932645e-02 4.11459764e-02 + 4.11985365e-02 4.12509447e-02 4.13032012e-02 4.13553060e-02 4.14072590e-02 + 4.14590603e-02 4.15107101e-02 4.15622082e-02 4.16135549e-02 4.16647500e-02 + 4.17157938e-02 4.17666861e-02 4.18174272e-02 4.18680170e-02 4.19184557e-02 + 4.19687432e-02 4.20188797e-02 4.20688653e-02 4.21187000e-02 4.21683839e-02 + 4.22179171e-02 4.22672996e-02 4.23165316e-02 4.23656132e-02 4.24145444e-02 + 4.24633254e-02 4.25119562e-02 4.25604369e-02 4.26087677e-02 4.26569487e-02 + 4.27049799e-02 4.27528616e-02 4.28005937e-02 4.28481764e-02 4.28956098e-02 + 4.29428942e-02 4.29900295e-02 4.30370159e-02 4.30838535e-02 4.31305425e-02 + 4.31770831e-02 4.32234752e-02 4.32697192e-02 4.33158151e-02 4.33617631e-02 + 4.34075633e-02 4.34532158e-02 4.34987209e-02 4.35440787e-02 4.35892893e-02 + 4.36343529e-02 4.36792696e-02 4.37240396e-02 4.37686632e-02 4.38131404e-02 + 4.38574714e-02 4.39016564e-02 4.39456955e-02 4.39895890e-02 4.40333371e-02 + 4.40769398e-02 4.41203974e-02 4.41637101e-02 4.42068780e-02 4.42499014e-02 + 4.42927804e-02 4.43355152e-02 4.43781061e-02 4.44205532e-02 4.44628567e-02 + 4.45050168e-02 4.45470338e-02 4.45889078e-02 4.46306390e-02 4.46722277e-02 + 4.47136740e-02 4.47549782e-02 4.47961405e-02 4.48371610e-02 4.48780401e-02 + 4.49187780e-02 4.49593747e-02 4.49998307e-02 4.50401461e-02 4.50803211e-02 + 4.51203560e-02 4.51602509e-02 4.52000062e-02 4.52396221e-02 4.52790987e-02 + 4.53184364e-02 4.53576354e-02 4.53966958e-02 4.54356180e-02 4.54744022e-02 + 4.55130487e-02 4.55515576e-02 4.55899293e-02 4.56281640e-02 4.56662619e-02 + 4.57042233e-02 4.57420484e-02 4.57797375e-02 4.58172909e-02 4.58547089e-02 + 4.58919915e-02 4.59291393e-02 4.59661523e-02 4.60030309e-02 4.60397753e-02 + 4.60763859e-02 4.61128627e-02 4.61492063e-02 4.61854167e-02 4.62214943e-02 + 4.62574394e-02 4.62932522e-02 4.63289330e-02 4.63644821e-02 4.63998997e-02 + 4.64351862e-02 4.64703418e-02 4.65053668e-02 4.65402615e-02 4.65750261e-02 + 4.66096610e-02 4.66441665e-02 4.66785428e-02 4.67127902e-02 4.67469090e-02 + 4.67808995e-02 4.68147620e-02 4.68484968e-02 4.68821042e-02 4.69155844e-02 + 4.69489379e-02 4.69821647e-02 4.70152654e-02 4.70482401e-02 4.70810892e-02 + 4.71138129e-02 4.71464116e-02 4.71788856e-02 4.72112352e-02 4.72434606e-02 + 4.72755622e-02 4.73075403e-02 4.73393952e-02 4.73711272e-02 4.74027366e-02 + 4.74342238e-02 4.74655889e-02 4.74968325e-02 4.75279546e-02 4.75589558e-02 + 4.75898362e-02 4.76205962e-02 4.76512361e-02 4.76817562e-02 4.77121569e-02 + 4.77424384e-02 4.77726011e-02 4.78026453e-02 4.78325713e-02 4.78623795e-02 + 4.78920701e-02 4.79216434e-02 4.79510998e-02 4.79804397e-02 4.80096633e-02 + 4.80387709e-02 4.80677629e-02 4.80966396e-02 4.81254014e-02 4.81540485e-02 + 4.81825812e-02 4.82110000e-02 4.82393051e-02 4.82674968e-02 4.82955755e-02 + 4.83235416e-02 4.83513952e-02 4.83791368e-02 4.84067667e-02 4.84342853e-02 + 4.84616927e-02 4.84889895e-02 4.85161759e-02 4.85432521e-02 4.85702187e-02 + 4.85970759e-02 4.86238239e-02 4.86504633e-02 4.86769942e-02 4.87034171e-02 + 4.87297322e-02 4.87559399e-02 4.87820405e-02 4.88080344e-02 4.88339218e-02 + 4.88597032e-02 4.88853789e-02 4.89109491e-02 4.89364142e-02 4.89617746e-02 + 4.89870305e-02 4.90121824e-02 4.90372306e-02 4.90621753e-02 4.90870170e-02 + 4.91117559e-02 4.91363924e-02 4.91609268e-02 4.91853595e-02 4.92096908e-02 + 4.92339210e-02 4.92580505e-02 4.92820795e-02 4.93060086e-02 4.93298378e-02 + 4.93535677e-02 4.93771986e-02 4.94007307e-02 4.94241644e-02 4.94475000e-02 + 4.94707380e-02 4.94938785e-02 4.95169220e-02 4.95398688e-02 4.95627192e-02 + 4.95854735e-02 4.96081321e-02 4.96306954e-02 4.96531636e-02 4.96755370e-02 + 4.96978161e-02 4.97200012e-02 4.97420925e-02 4.97640905e-02 4.97859954e-02 + 4.98078076e-02 4.98295274e-02 4.98511552e-02 4.98726912e-02 4.98941359e-02 + 4.99154895e-02 4.99367524e-02 4.99579249e-02 4.99790073e-02 5.00000000e-02 + 0.00000000e+00 2.43488551e-08 9.70348995e-08 2.17517882e-07 3.85258271e-07 + 5.99717271e-07 8.60356837e-07 1.16663970e-06 1.51802935e-06 1.91399012e-06 + 2.35398713e-06 2.83748633e-06 3.36395454e-06 3.93285942e-06 4.54366955e-06 + 5.19585437e-06 5.88888425e-06 6.62223049e-06 7.39536534e-06 8.20776200e-06 + 9.05889466e-06 9.94823850e-06 1.08752697e-05 1.18394655e-05 1.28403042e-05 + 1.38772651e-05 1.49498285e-05 1.60574760e-05 1.71996902e-05 1.83759547e-05 + 1.95857545e-05 2.08285756e-05 2.21039051e-05 2.34112314e-05 2.47500441e-05 + 2.61198339e-05 2.75200930e-05 2.89503146e-05 3.04099932e-05 3.18986247e-05 + 3.34157062e-05 3.49607362e-05 3.65332143e-05 3.81326418e-05 3.97585210e-05 + 4.14103560e-05 4.30876518e-05 4.47899152e-05 4.65166542e-05 4.82673784e-05 + 5.00415988e-05 5.18388277e-05 5.36585791e-05 5.55003684e-05 5.73637126e-05 + 5.92481302e-05 6.11531411e-05 6.30782670e-05 6.50230311e-05 6.69869581e-05 + 6.89695743e-05 7.09704078e-05 7.29889882e-05 7.50248468e-05 7.70775165e-05 + 7.91465320e-05 8.12314297e-05 8.33317475e-05 8.54470252e-05 8.75768045e-05 + 8.97206285e-05 9.18780424e-05 9.40485929e-05 9.62318288e-05 9.84273005e-05 + 1.00634560e-04 1.02853162e-04 1.05082663e-04 1.07322619e-04 1.09572592e-04 + 1.11832142e-04 1.14100833e-04 1.16378232e-04 1.18663904e-04 1.20957421e-04 + 1.23258352e-04 1.25566272e-04 1.27880756e-04 1.30201382e-04 1.32527729e-04 + 1.34859378e-04 1.37195914e-04 1.39536921e-04 1.41881988e-04 1.44230704e-04 + 1.46582662e-04 1.48937455e-04 1.51294680e-04 1.53653936e-04 1.56014822e-04 + 1.58376942e-04 1.60739900e-04 1.63103305e-04 1.65466764e-04 1.67829891e-04 + 1.70192298e-04 1.72553602e-04 1.74913422e-04 1.77271378e-04 1.79627094e-04 + 1.81980193e-04 1.84330306e-04 1.86677060e-04 1.89020090e-04 1.91359029e-04 + 1.93693515e-04 1.96023187e-04 1.98347688e-04 2.00666661e-04 2.02979754e-04 + 2.05286615e-04 2.07586897e-04 2.09880254e-04 2.12166341e-04 2.14444820e-04 + 2.16715350e-04 2.18977597e-04 2.21231227e-04 2.23475910e-04 2.25711316e-04 + 2.27937121e-04 2.30153002e-04 2.32358637e-04 2.34553710e-04 2.36737905e-04 + 2.38910909e-04 2.41072412e-04 2.43222107e-04 2.45359690e-04 2.47484858e-04 + 2.49597311e-04 2.51696755e-04 2.53782893e-04 2.55855436e-04 2.57914094e-04 + 2.59958582e-04 2.61988617e-04 2.64003919e-04 2.66004209e-04 2.67989214e-04 + 2.69958661e-04 2.71912281e-04 2.73849808e-04 2.75770978e-04 2.77675531e-04 + 2.79563208e-04 2.81433755e-04 2.83286920e-04 2.85122453e-04 2.86940107e-04 + 2.88739640e-04 2.90520810e-04 2.92283380e-04 2.94027115e-04 2.95751782e-04 + 2.97457154e-04 2.99143004e-04 3.00809109e-04 3.02455248e-04 3.04081205e-04 + 3.05686765e-04 3.07271718e-04 3.08835854e-04 3.10378969e-04 3.11900861e-04 + 3.13401329e-04 3.14880179e-04 3.16337217e-04 3.17772253e-04 3.19185100e-04 + 3.20575574e-04 3.21943493e-04 3.23288681e-04 3.24610962e-04 3.25910165e-04 + 3.27186120e-04 3.28438664e-04 3.29667633e-04 3.30872868e-04 3.32054212e-04 + 3.33211514e-04 3.34344623e-04 3.35453392e-04 3.36537678e-04 3.37597341e-04 + 3.38632243e-04 3.39642250e-04 3.40627231e-04 3.41587060e-04 3.42521610e-04 + 3.43430761e-04 3.44314395e-04 3.45172397e-04 3.46004655e-04 3.46811061e-04 + 3.47591509e-04 3.48345899e-04 3.49074130e-04 3.49776107e-04 3.50451738e-04 + 3.51100935e-04 3.51723611e-04 3.52319684e-04 3.52889075e-04 3.53431707e-04 + 3.53947509e-04 3.54436410e-04 3.54898345e-04 3.55333251e-04 3.55741068e-04 + 3.56121740e-04 3.56475215e-04 3.56801442e-04 3.57100376e-04 3.57371973e-04 + 3.57616194e-04 3.57833003e-04 3.58022366e-04 3.58184254e-04 3.58318641e-04 + 3.58425503e-04 3.58504822e-04 3.58556580e-04 3.58580765e-04 3.58577366e-04 + 3.58546379e-04 3.58487800e-04 3.58401629e-04 3.58287871e-04 3.58146532e-04 + 3.57977623e-04 3.57781159e-04 3.57557155e-04 3.57305633e-04 3.57026618e-04 + 3.56720135e-04 3.56386217e-04 3.56024897e-04 3.55636213e-04 3.55220206e-04 + 3.54776920e-04 3.54306402e-04 3.53808705e-04 3.53283882e-04 3.52731991e-04 + 3.52153093e-04 3.51547253e-04 3.50914539e-04 3.50255023e-04 3.49568779e-04 + 3.48855885e-04 3.48116423e-04 3.47350478e-04 3.46558138e-04 3.45739494e-04 + 3.44894643e-04 3.44023683e-04 3.43126715e-04 3.42203844e-04 3.41255180e-04 + 3.40280834e-04 3.39280922e-04 3.38255563e-04 3.37204879e-04 3.36128995e-04 + 3.35028040e-04 3.33902147e-04 3.32751452e-04 3.31576093e-04 3.30376213e-04 + 3.29151958e-04 3.27903477e-04 3.26630923e-04 3.25334452e-04 3.24014222e-04 + 3.22670397e-04 3.21303142e-04 3.19912628e-04 3.18499026e-04 3.17062513e-04 + 3.15603268e-04 3.14121475e-04 3.12617318e-04 3.11090989e-04 3.09542678e-04 + 3.07972584e-04 3.06380904e-04 3.04767842e-04 3.03133605e-04 3.01478400e-04 + 2.99802442e-04 2.98105947e-04 2.96389132e-04 2.94652222e-04 2.92895443e-04 + 2.91119023e-04 2.89323194e-04 2.87508194e-04 2.85674261e-04 2.83821637e-04 + 2.81950568e-04 2.80061304e-04 2.78154095e-04 2.76229198e-04 2.74286872e-04 + 2.72327377e-04 2.70350981e-04 2.68357950e-04 2.66348556e-04 2.64323075e-04 + 2.62281784e-04 2.60224965e-04 2.58152902e-04 2.56065883e-04 2.53964199e-04 + 2.51848144e-04 2.49718015e-04 2.47574112e-04 2.45416740e-04 2.43246204e-04 + 2.41062815e-04 2.38866886e-04 2.36658733e-04 2.34438675e-04 2.32207035e-04 + 2.29964138e-04 2.27710313e-04 2.25445892e-04 2.23171209e-04 2.20886603e-04 + 2.18592414e-04 2.16288987e-04 2.13976669e-04 2.11655809e-04 2.09326762e-04 + 2.06989883e-04 2.04645532e-04 2.02294071e-04 1.99935866e-04 1.97571284e-04 + 1.95200698e-04 1.92824481e-04 1.90443011e-04 1.88056668e-04 1.85665835e-04 + 1.83270899e-04 1.80872249e-04 1.78470276e-04 1.76065376e-04 1.73657947e-04 + 1.71248388e-04 1.68837105e-04 1.66424504e-04 1.64010993e-04 1.61596986e-04 + 1.59182897e-04 1.56769145e-04 1.54356150e-04 1.51944336e-04 1.49534129e-04 + 1.47125959e-04 1.44720257e-04 1.42317459e-04 1.39918002e-04 1.37522326e-04 + 1.35130875e-04 1.32744094e-04 1.30362432e-04 1.27986339e-04 1.25616271e-04 + 1.23252683e-04 1.20896036e-04 1.18546790e-04 1.16205411e-04 1.13872366e-04 + 1.11548124e-04 1.09233158e-04 1.06927944e-04 1.04632960e-04 1.02348684e-04 + 1.00075601e-04 9.78141952e-05 9.55649553e-05 9.33283715e-05 9.11049369e-05 + 8.88951470e-05 8.66994998e-05 8.45184959e-05 8.23526381e-05 8.02024320e-05 + 7.80683853e-05 7.59510083e-05 7.38508139e-05 7.17683170e-05 6.97040351e-05 + 6.76584882e-05 6.56321985e-05 6.36256905e-05 6.16394911e-05 5.96741296e-05 + 5.77301375e-05 5.58080486e-05 5.39083991e-05 5.20317273e-05 5.01785738e-05 + 4.83494815e-05 4.65449954e-05 4.47656629e-05 4.30120334e-05 4.12846585e-05 + 3.95840921e-05 3.79108901e-05 3.62656107e-05 3.46488140e-05 3.30610623e-05 + 3.15029201e-05 2.99749539e-05 2.84777321e-05 2.70118254e-05 2.55778064e-05 + 2.41762497e-05 2.28077320e-05 2.14728317e-05 2.01721296e-05 1.89062081e-05 + 1.76756517e-05 1.64810468e-05 1.53229816e-05 1.42020464e-05 1.31188332e-05 + 1.20739359e-05 1.10679502e-05 1.01014737e-05 9.17510585e-06 8.28944774e-06 + 7.44510235e-06 6.64267440e-06 5.88277033e-06 5.16599834e-06 4.49296832e-06 + 3.86429185e-06 3.28058222e-06 2.74245435e-06 2.25052482e-06 1.80541184e-06 + 1.40773522e-06 1.05811638e-06 7.57178299e-07 5.05545545e-07 3.03844209e-07 + 1.52701918e-07 5.27478064e-08 4.61250386e-09 8.92811584e-09 6.63282070e-08 + 1.77447784e-07 3.42923278e-07 5.63392527e-07 8.39494760e-07 1.17187058e-06 + 1.56116194e-06 2.00801213e-06 2.51306577e-06 3.07696878e-06 3.70036834e-06 + 4.38391295e-06 5.12825230e-06 5.93403735e-06 6.80192027e-06 7.73255440e-06 + 8.72659429e-06 9.78469564e-06 1.09075153e-05 1.20957112e-05 1.33499424e-05 + 1.46708691e-05 1.60591526e-05 1.75154550e-05 1.90404398e-05 2.06347711e-05 + 2.22991145e-05 2.40341361e-05 2.58405033e-05 2.77188842e-05 2.96699480e-05 + 3.16943647e-05 3.37928053e-05 3.59659416e-05 3.82144461e-05 4.05389924e-05 + 4.29402547e-05 4.54189082e-05 4.79756288e-05 5.06110929e-05 5.33259781e-05 + 5.61209623e-05 5.89967243e-05 6.19539437e-05 6.49933005e-05 6.81154755e-05 + 7.13211502e-05 7.46110064e-05 7.79857269e-05 8.14459948e-05 8.49924937e-05 + 8.86259080e-05 9.23469224e-05 9.61562222e-05 1.00054493e-04 1.04042421e-04 + 1.08120693e-04 1.12289996e-04 1.16551018e-04 1.20904446e-04 1.25350968e-04 + 1.29891273e-04 1.34526050e-04 1.39255988e-04 1.44081776e-04 1.49004104e-04 + 1.54023663e-04 1.59141141e-04 1.64357231e-04 1.69672621e-04 1.75088004e-04 + 1.80604069e-04 1.86221509e-04 1.91941014e-04 1.97763274e-04 2.03688983e-04 + 2.09718831e-04 2.15853509e-04 2.22093709e-04 2.28440122e-04 2.34893440e-04 + 2.41454354e-04 2.48123555e-04 2.54901735e-04 2.61789585e-04 2.68787796e-04 + 2.75897058e-04 2.83118063e-04 2.90451500e-04 2.97898061e-04 3.05458435e-04 + 3.13133313e-04 3.20923384e-04 3.28829337e-04 3.36851861e-04 3.44991646e-04 + 3.53249380e-04 3.61625750e-04 3.70121445e-04 3.78737152e-04 3.87473558e-04 + 3.96331350e-04 4.05311213e-04 4.14413833e-04 4.23639896e-04 4.32990086e-04 + 4.42465087e-04 4.52065583e-04 4.61792257e-04 4.71645791e-04 4.81626868e-04 + 4.91736167e-04 5.01974371e-04 5.12342159e-04 5.22840211e-04 5.33469204e-04 + 5.44229818e-04 5.55122728e-04 5.66148612e-04 5.77308146e-04 5.88602003e-04 + 6.00030859e-04 6.11595386e-04 6.23296257e-04 6.35134144e-04 6.47109717e-04 + 6.59223646e-04 6.71476600e-04 6.83869248e-04 6.96402254e-04 7.09076287e-04 + 7.21892011e-04 7.34850090e-04 7.47951188e-04 7.61195965e-04 7.74585083e-04 + 7.88119202e-04 8.01798981e-04 8.15625077e-04 8.29598146e-04 8.43718845e-04 + 8.57987827e-04 8.72405745e-04 8.86973251e-04 9.01690996e-04 9.16559628e-04 + 9.31579797e-04 9.46752148e-04 9.62077327e-04 9.77555978e-04 9.93188745e-04 + 1.00897627e-03 1.02491919e-03 1.04101814e-03 1.05727377e-03 1.07368671e-03 + 1.09025759e-03 1.10698704e-03 1.12387570e-03 1.14092420e-03 1.15813317e-03 + 1.17550323e-03 1.19303501e-03 1.21072913e-03 1.22858621e-03 1.24660688e-03 + 1.26479176e-03 1.28314145e-03 1.30165659e-03 1.32033777e-03 1.33918562e-03 + 1.35820075e-03 1.37738376e-03 1.39673526e-03 1.41625586e-03 1.43594616e-03 + 1.45580676e-03 1.47583827e-03 1.49604128e-03 1.51641638e-03 1.53696418e-03 + 1.55768526e-03 1.57858022e-03 1.59964965e-03 1.62089413e-03 1.64231425e-03 + 1.66391059e-03 1.68568373e-03 1.70763425e-03 1.72976274e-03 1.75206976e-03 + 1.77455589e-03 1.79722169e-03 1.82006775e-03 1.84309462e-03 1.86630287e-03 + 1.88969307e-03 1.91326577e-03 1.93702154e-03 1.96096092e-03 1.98508448e-03 + 2.00939277e-03 2.03388633e-03 2.05856572e-03 2.08343148e-03 2.10848415e-03 + 2.13372427e-03 2.15915239e-03 2.18476904e-03 2.21057475e-03 2.23657006e-03 + 2.26275549e-03 2.28913158e-03 2.31569884e-03 2.34245780e-03 2.36940899e-03 + 2.39655291e-03 2.42389008e-03 2.45142102e-03 2.47914624e-03 2.50706624e-03 + 2.53518153e-03 2.56349261e-03 2.59199999e-03 2.62070415e-03 2.64960561e-03 + 2.67870484e-03 2.70800234e-03 2.73749860e-03 2.76719410e-03 2.79708933e-03 + 2.82718476e-03 2.85748088e-03 2.88797815e-03 2.91867705e-03 2.94957805e-03 + 2.98068162e-03 3.01198821e-03 3.04349830e-03 3.07521234e-03 3.10713078e-03 + 3.13925408e-03 3.17158269e-03 3.20411705e-03 3.23685762e-03 3.26980484e-03 + 3.30295913e-03 3.33632095e-03 3.36989071e-03 3.40366887e-03 3.43765583e-03 + 3.47185204e-03 3.50625790e-03 3.54087384e-03 3.57570028e-03 3.61073762e-03 + 3.64598629e-03 3.68144668e-03 3.71711921e-03 3.75300427e-03 3.78910226e-03 + 3.82541359e-03 3.86193864e-03 3.89867779e-03 3.93563145e-03 3.97279999e-03 + 4.01018380e-03 4.04778325e-03 4.08559871e-03 4.12363057e-03 4.16187918e-03 + 4.20034492e-03 4.23902814e-03 4.27792921e-03 4.31704848e-03 4.35638630e-03 + 4.39594303e-03 4.43571902e-03 4.47571460e-03 4.51593011e-03 4.55636591e-03 + 4.59702231e-03 4.63789965e-03 4.67899827e-03 4.72031847e-03 4.76186059e-03 + 4.80362495e-03 4.84561186e-03 4.88782162e-03 4.93025456e-03 4.97291097e-03 + 5.01579116e-03 5.05889543e-03 5.10222407e-03 5.14577738e-03 5.18955564e-03 + 5.23355914e-03 5.27778816e-03 5.32224299e-03 5.36692389e-03 5.41183115e-03 + 5.45696503e-03 5.50232579e-03 5.54791370e-03 5.59372902e-03 5.63977201e-03 + 5.68604291e-03 5.73254198e-03 5.77926946e-03 5.82622559e-03 5.87341062e-03 + 5.92082478e-03 5.96846830e-03 6.01634140e-03 6.06444433e-03 6.11277729e-03 + 6.16134051e-03 6.21013420e-03 6.25915857e-03 6.30841384e-03 6.35790020e-03 + 6.40761786e-03 6.45756701e-03 6.50774785e-03 6.55816058e-03 6.60880537e-03 + 6.65968241e-03 6.71079189e-03 6.76213398e-03 6.81370884e-03 6.86551667e-03 + 6.91755761e-03 6.96983183e-03 7.02233950e-03 7.07508076e-03 7.12805578e-03 + 7.18126469e-03 7.23470765e-03 7.28838479e-03 7.34229626e-03 7.39644219e-03 + 7.45082271e-03 7.50543795e-03 7.56028803e-03 7.61537307e-03 7.67069319e-03 + 7.72624851e-03 7.78203912e-03 7.83806515e-03 7.89432669e-03 7.95082384e-03 + 8.00755670e-03 8.06452535e-03 8.12172989e-03 8.17917041e-03 8.23684697e-03 + 8.29475967e-03 8.35290857e-03 8.41129374e-03 8.46991526e-03 8.52877318e-03 + 8.58786757e-03 8.64719848e-03 8.70676596e-03 8.76657006e-03 8.82661083e-03 + 8.88688830e-03 8.94740253e-03 9.00815353e-03 9.06914135e-03 9.13036600e-03 + 9.19182752e-03 9.25352592e-03 9.31546122e-03 9.37763343e-03 9.44004256e-03 + 9.50268862e-03 9.56557160e-03 9.62869151e-03 9.69204834e-03 9.75564209e-03 + 9.81947273e-03 9.88354026e-03 9.94784464e-03 1.00123859e-02 1.00771639e-02 + 1.01421787e-02 1.02074303e-02 1.02729186e-02 1.03386435e-02 1.04046051e-02 + 1.04708033e-02 1.05372379e-02 1.06039091e-02 1.06708166e-02 1.07379605e-02 + 1.08053407e-02 1.08729570e-02 1.09408095e-02 1.10088981e-02 1.10772226e-02 + 1.11457830e-02 1.12145793e-02 1.12836112e-02 1.13528787e-02 1.14223818e-02 + 1.14921203e-02 1.15620941e-02 1.16323030e-02 1.17027471e-02 1.17734261e-02 + 1.18443400e-02 1.19154886e-02 1.19868718e-02 1.20584894e-02 1.21303414e-02 + 1.22024276e-02 1.22747478e-02 1.23473019e-02 1.24200897e-02 1.24931112e-02 + 1.25663661e-02 1.26398543e-02 1.27135756e-02 1.27875299e-02 1.28617170e-02 + 1.29361367e-02 1.30107888e-02 1.30856731e-02 1.31607896e-02 1.32361379e-02 + 1.33117179e-02 1.33875294e-02 1.34635722e-02 1.35398461e-02 1.36163509e-02 + 1.36930863e-02 1.37700523e-02 1.38472485e-02 1.39246747e-02 1.40023308e-02 + 1.40802164e-02 1.41583314e-02 1.42366755e-02 1.43152485e-02 1.43940502e-02 + 1.44730803e-02 1.45523385e-02 1.46318247e-02 1.47115385e-02 1.47914797e-02 + 1.48716480e-02 1.49520432e-02 1.50326651e-02 1.51135133e-02 1.51945875e-02 + 1.52758876e-02 1.53574131e-02 1.54391639e-02 1.55211396e-02 1.56033400e-02 + 1.56857648e-02 1.57684136e-02 1.58512861e-02 1.59343821e-02 1.60177013e-02 + 1.61012433e-02 1.61850079e-02 1.62689946e-02 1.63532033e-02 1.64376335e-02 + 1.65222849e-02 1.66071573e-02 1.66922502e-02 1.67775634e-02 1.68630965e-02 + 1.69488492e-02 1.70348211e-02 1.71210118e-02 1.72074211e-02 1.72940485e-02 + 1.73808937e-02 1.74679564e-02 1.75552362e-02 1.76427326e-02 1.77304454e-02 + 1.78183742e-02 1.79065185e-02 1.79948781e-02 1.80834525e-02 1.81722413e-02 + 1.82612442e-02 1.83504607e-02 1.84398905e-02 1.85295331e-02 1.86193882e-02 + 1.87094554e-02 1.87997342e-02 1.88902243e-02 1.89809251e-02 1.90718364e-02 + 1.91629577e-02 1.92542885e-02 1.93458285e-02 1.94375771e-02 1.95295341e-02 + 1.96216989e-02 1.97140711e-02 1.98066502e-02 1.98994359e-02 1.99924277e-02 + 2.00856251e-02 2.01790276e-02 2.02726349e-02 2.03664465e-02 2.04604618e-02 + 2.05546805e-02 2.06491020e-02 2.07437260e-02 2.08385519e-02 2.09335792e-02 + 2.10288076e-02 2.11242364e-02 2.12198652e-02 2.13156936e-02 2.14117210e-02 + 2.15079470e-02 2.16043710e-02 2.17009926e-02 2.17978112e-02 2.18948264e-02 + 2.19920377e-02 2.20894445e-02 2.21870464e-02 2.22848427e-02 2.23828331e-02 + 2.24810170e-02 2.25793938e-02 2.26779631e-02 2.27767243e-02 2.28756769e-02 + 2.29748204e-02 2.30741542e-02 2.31736778e-02 2.32733907e-02 2.33732923e-02 + 2.34733820e-02 2.35736594e-02 2.36741238e-02 2.37747748e-02 2.38756118e-02 + 2.39766342e-02 2.40778414e-02 2.41792330e-02 2.42808082e-02 2.43825667e-02 + 2.44845078e-02 2.45866309e-02 2.46889354e-02 2.47914209e-02 2.48940867e-02 + 2.49969322e-02 2.50999568e-02 2.52031600e-02 2.53065412e-02 2.54100998e-02 + 2.55138352e-02 2.56177468e-02 2.57218340e-02 2.58260963e-02 2.59305329e-02 + 2.60351434e-02 2.61399271e-02 2.62448834e-02 2.63500117e-02 2.64553114e-02 + 2.65607818e-02 2.66664224e-02 2.67722326e-02 2.68782117e-02 2.69843591e-02 + 2.70906742e-02 2.71971563e-02 2.73038049e-02 2.74106192e-02 2.75175988e-02 + 2.76247429e-02 2.77320509e-02 2.78395221e-02 2.79471560e-02 2.80549519e-02 + 2.81629091e-02 2.82710270e-02 2.83793050e-02 2.84877423e-02 2.85963385e-02 + 2.87050927e-02 2.88140044e-02 2.89230729e-02 2.90322975e-02 2.91416776e-02 + 2.92512125e-02 2.93609016e-02 2.94707442e-02 2.95807396e-02 2.96908871e-02 + 2.98011861e-02 2.99116360e-02 3.00222360e-02 3.01329854e-02 3.02438837e-02 + 3.03549300e-02 3.04661238e-02 3.05774644e-02 3.06889510e-02 3.08005830e-02 + 3.09123597e-02 3.10242804e-02 3.11363445e-02 3.12485511e-02 3.13608997e-02 + 3.14733896e-02 3.15860200e-02 3.16987903e-02 3.18116997e-02 3.19247476e-02 + 3.20379332e-02 3.21512559e-02 3.22647149e-02 3.23783096e-02 3.24920392e-02 + 3.26059030e-02 3.27199004e-02 3.28340306e-02 3.29482928e-02 3.30626865e-02 + 3.31772108e-02 3.32918651e-02 3.34066486e-02 3.35215607e-02 3.36366005e-02 + 3.37517674e-02 3.38670607e-02 3.39824796e-02 3.40980234e-02 3.42136915e-02 + 3.43294829e-02 3.44453971e-02 3.45614333e-02 3.46775908e-02 3.47938688e-02 + 3.49102666e-02 3.50267835e-02 3.51434187e-02 3.52601716e-02 3.53770413e-02 + 3.54940271e-02 3.56111283e-02 3.57283442e-02 3.58456740e-02 3.59631170e-02 + 3.60806724e-02 3.61983395e-02 3.63161175e-02 3.64340058e-02 3.65520035e-02 + 3.66701099e-02 3.67883242e-02 3.69066458e-02 3.70250738e-02 3.71436076e-02 + 3.72622463e-02 3.73809892e-02 3.74998356e-02 3.76187846e-02 3.77378357e-02 + 3.78569879e-02 3.79762406e-02 3.80955929e-02 3.82150442e-02 3.83345937e-02 + 3.84542406e-02 3.85739841e-02 3.86938235e-02 3.88137581e-02 3.89337870e-02 + 3.90539096e-02 3.91741250e-02 3.92944326e-02 3.94148314e-02 3.95353208e-02 + 3.96559000e-02 3.97765683e-02 3.98973248e-02 4.00181689e-02 4.01390997e-02 + 4.02601165e-02 4.03812185e-02 4.05024049e-02 4.06236750e-02 4.07450281e-02 + 4.08664633e-02 4.09879798e-02 4.11095770e-02 4.12312540e-02 4.13530101e-02 + 4.14748445e-02 4.15967564e-02 4.17187451e-02 4.18408097e-02 4.19629496e-02 + 4.20851640e-02 4.22074520e-02 4.23298129e-02 4.24522460e-02 4.25747504e-02 + 4.26973254e-02 4.28199703e-02 4.29426842e-02 4.30654664e-02 4.31883161e-02 + 4.33112325e-02 4.34342149e-02 4.35572624e-02 4.36803744e-02 4.38035500e-02 + 4.39267885e-02 4.40500891e-02 4.41734511e-02 4.42968735e-02 4.44203558e-02 + 4.45438971e-02 4.46674966e-02 4.47911535e-02 4.49148672e-02 4.50386368e-02 + 4.51624615e-02 4.52863406e-02 4.54102733e-02 4.55342588e-02 4.56582964e-02 + 4.57823853e-02 4.59065247e-02 4.60307139e-02 4.61549520e-02 4.62792383e-02 + 4.64035721e-02 4.65279525e-02 4.66523788e-02 4.67768502e-02 4.69013660e-02 + 4.70259254e-02 4.71505276e-02 4.72751719e-02 4.73998574e-02 4.75245834e-02 + 4.76493492e-02 4.77741540e-02 4.78989970e-02 4.80238774e-02 4.81487945e-02 + 4.82737475e-02 4.83987357e-02 4.85237582e-02 4.86488144e-02 4.87739034e-02 + 4.88990245e-02 4.90241770e-02 4.91493600e-02 4.92745728e-02 4.93998147e-02 + 4.95250848e-02 4.96503825e-02 4.97757070e-02 4.99010574e-02 5.00264331e-02 + 5.01518333e-02 5.02772572e-02 5.04027041e-02 5.05281733e-02 5.06536638e-02 + 5.07791751e-02 5.09047064e-02 5.10302569e-02 5.11558258e-02 5.12814124e-02 + 5.14070160e-02 5.15326357e-02 5.16582709e-02 5.17839208e-02 5.19095847e-02 + 5.20352618e-02 5.21609513e-02 5.22866525e-02 5.24123647e-02 5.25380871e-02 + 5.26638190e-02 5.27895597e-02 5.29153083e-02 5.30410642e-02 5.31668266e-02 + 5.32925947e-02 5.34183680e-02 5.35441455e-02 5.36699265e-02 5.37957104e-02 + 5.39214964e-02 5.40472838e-02 5.41730717e-02 5.42988596e-02 5.44246466e-02 + 5.45504321e-02 5.46762153e-02 5.48019954e-02 5.49277718e-02 5.50535437e-02 + 5.51793104e-02 5.53050712e-02 5.54308254e-02 5.55565722e-02 5.56823109e-02 + 5.58080407e-02 5.59337611e-02 5.60594712e-02 5.61851704e-02 5.63108578e-02 + 5.64365329e-02 5.65621949e-02 5.66878431e-02 5.68134767e-02 5.69390952e-02 + 5.70646976e-02 5.71902835e-02 5.73158519e-02 5.74414024e-02 5.75669340e-02 + 5.76924462e-02 5.78179382e-02 5.79434094e-02 5.80688590e-02 5.81942863e-02 + 5.83196907e-02 5.84450715e-02 5.85704278e-02 5.86957592e-02 5.88210648e-02 + 5.89463440e-02 5.90715962e-02 5.91968205e-02 5.93220163e-02 5.94471830e-02 + 5.95723199e-02 5.96974262e-02 5.98225013e-02 5.99475445e-02 6.00725552e-02 + 6.01975327e-02 6.03224762e-02 6.04473851e-02 6.05722588e-02 6.06970966e-02 + 6.08218978e-02 6.09466617e-02 6.10713877e-02 6.11960751e-02 6.13207233e-02 + 6.14453315e-02 6.15698992e-02 6.16944256e-02 6.18189101e-02 6.19433521e-02 + 6.20677509e-02 6.21921059e-02 6.23164163e-02 6.24406816e-02 6.25649011e-02 + 6.26890741e-02 6.28132001e-02 6.29372783e-02 6.30613081e-02 6.31852889e-02 + 6.33092201e-02 6.34331010e-02 6.35569309e-02 6.36807093e-02 6.38044355e-02 + 6.39281089e-02 6.40517288e-02 6.41752947e-02 6.42988058e-02 6.44222616e-02 + 6.45456615e-02 6.46690048e-02 6.47922909e-02 6.49155192e-02 6.50386891e-02 + 6.51617999e-02 6.52848511e-02 6.54078420e-02 6.55307721e-02 6.56536406e-02 + 6.57764471e-02 6.58991910e-02 6.60218715e-02 6.61444881e-02 6.62670403e-02 + 6.63895274e-02 6.65119488e-02 6.66343039e-02 6.67565921e-02 6.68788129e-02 + 6.70009657e-02 6.71230499e-02 6.72450648e-02 6.73670099e-02 6.74888847e-02 + 6.76106885e-02 6.77324208e-02 6.78540809e-02 6.79756684e-02 6.80971826e-02 + 6.82186230e-02 6.83399891e-02 6.84612801e-02 6.85824957e-02 6.87036351e-02 + 6.88246979e-02 6.89456835e-02 6.90665913e-02 6.91874209e-02 6.93081715e-02 + 6.94288427e-02 6.95494340e-02 6.96699447e-02 6.97903744e-02 6.99107224e-02 + 7.00309883e-02 7.01511715e-02 7.02712715e-02 7.03912876e-02 7.05112195e-02 + 7.06310666e-02 7.07508283e-02 7.08705040e-02 7.09900934e-02 7.11095958e-02 + 7.12290107e-02 7.13483377e-02 7.14675761e-02 7.15867255e-02 7.17057853e-02 + 7.18247551e-02 7.19436343e-02 7.20624225e-02 7.21811190e-02 7.22997234e-02 + 7.24182353e-02 7.25366540e-02 7.26549791e-02 7.27732102e-02 7.28913466e-02 + 7.30093879e-02 7.31273337e-02 7.32451834e-02 7.33629365e-02 7.34805926e-02 + 7.35981511e-02 7.37156116e-02 7.38329737e-02 7.39502367e-02 7.40674004e-02 + 7.41844640e-02 7.43014273e-02 7.44182898e-02 7.45350509e-02 7.46517101e-02 + 7.47682672e-02 7.48847215e-02 7.50010726e-02 7.51173201e-02 7.52334634e-02 + 7.53495022e-02 7.54654360e-02 7.55812644e-02 7.56969868e-02 7.58126029e-02 + 7.59281122e-02 7.60435142e-02 7.61588086e-02 7.62739948e-02 7.63890725e-02 + 7.65040412e-02 7.66189005e-02 7.67336500e-02 7.68482891e-02 7.69628176e-02 + 7.70772349e-02 7.71915407e-02 7.73057346e-02 7.74198160e-02 7.75337846e-02 + 7.76476400e-02 7.77613818e-02 7.78750096e-02 7.79885229e-02 7.81019214e-02 + 7.82152046e-02 7.83283722e-02 7.84414237e-02 7.85543587e-02 7.86671770e-02 + 7.87798779e-02 7.88924613e-02 7.90049266e-02 7.91172736e-02 7.92295017e-02 + 7.93416107e-02 7.94536001e-02 7.95654696e-02 7.96772188e-02 7.97888473e-02 + 7.99003547e-02 8.00117407e-02 8.01230050e-02 8.02341470e-02 8.03451666e-02 + 8.04560632e-02 8.05668367e-02 8.06774865e-02 8.07880123e-02 8.08984138e-02 + 8.10086907e-02 8.11188426e-02 8.12288690e-02 8.13387698e-02 8.14485445e-02 + 8.15581929e-02 8.16677145e-02 8.17771090e-02 8.18863761e-02 8.19955155e-02 + 8.21045268e-02 8.22134097e-02 8.23221639e-02 8.24307890e-02 8.25392847e-02 + 8.26476508e-02 8.27558868e-02 8.28639925e-02 8.29719676e-02 8.30798116e-02 + 8.31875245e-02 8.32951057e-02 8.34025550e-02 8.35098722e-02 8.36170568e-02 + 8.37241087e-02 8.38310274e-02 8.39378128e-02 8.40444645e-02 8.41509822e-02 + 8.42573656e-02 8.43636145e-02 8.44697286e-02 8.45757075e-02 8.46815510e-02 + 8.47872588e-02 8.48928306e-02 8.49982662e-02 8.51035653e-02 8.52087276e-02 + 8.53137528e-02 8.54186407e-02 8.55233910e-02 8.56280034e-02 8.57324777e-02 + 8.58368136e-02 8.59410109e-02 8.60450693e-02 8.61489885e-02 8.62527683e-02 + 8.63564085e-02 8.64599088e-02 8.65632689e-02 8.66664887e-02 8.67695678e-02 + 8.68725060e-02 8.69753031e-02 8.70779589e-02 8.71804730e-02 8.72828454e-02 + 8.73850757e-02 8.74871638e-02 8.75891093e-02 8.76909121e-02 8.77925720e-02 + 8.78940887e-02 8.79954620e-02 8.80966917e-02 8.81977776e-02 8.82987195e-02 + 8.83995171e-02 8.85001703e-02 8.86006788e-02 8.87010425e-02 8.88012610e-02 + 8.89013344e-02 8.90012622e-02 8.91010444e-02 8.92006808e-02 8.93001711e-02 + 8.93995152e-02 8.94987128e-02 8.95977638e-02 8.96966680e-02 8.97954252e-02 + 8.98940353e-02 8.99924980e-02 9.00908132e-02 9.01889806e-02 9.02870002e-02 + 9.03848718e-02 9.04825951e-02 9.05801701e-02 9.06775965e-02 9.07748742e-02 + 9.08720029e-02 9.09689827e-02 9.10658132e-02 9.11624944e-02 9.12590261e-02 + 9.13554081e-02 9.14516403e-02 9.15477225e-02 9.16436547e-02 9.17394365e-02 + 9.18350679e-02 9.19305488e-02 9.20258790e-02 9.21210584e-02 9.22160868e-02 + 9.23109641e-02 9.24056902e-02 9.25002649e-02 9.25946881e-02 9.26889596e-02 + 9.27830795e-02 9.28770474e-02 9.29708634e-02 9.30645273e-02 9.31580389e-02 + 9.32513981e-02 9.33446049e-02 9.34376591e-02 9.35305607e-02 9.36233094e-02 + 9.37159052e-02 9.38083480e-02 9.39006377e-02 9.39927741e-02 9.40847572e-02 + 9.41765869e-02 9.42682631e-02 9.43597856e-02 9.44511545e-02 9.45423695e-02 + 9.46334306e-02 9.47243378e-02 9.48150908e-02 9.49056898e-02 9.49961344e-02 + 9.50864248e-02 9.51765607e-02 9.52665422e-02 9.53563691e-02 9.54460414e-02 + 9.55355589e-02 9.56249217e-02 9.57141296e-02 9.58031826e-02 9.58920806e-02 + 9.59808236e-02 9.60694114e-02 9.61578440e-02 9.62461215e-02 9.63342436e-02 + 9.64222103e-02 9.65100217e-02 9.65976776e-02 9.66851779e-02 9.67725227e-02 + 9.68597119e-02 9.69467454e-02 9.70336232e-02 9.71203453e-02 9.72069115e-02 + 9.72933219e-02 9.73795765e-02 9.74656751e-02 9.75516178e-02 9.76374044e-02 + 9.77230351e-02 9.78085097e-02 9.78938282e-02 9.79789907e-02 9.80639969e-02 + 9.81488471e-02 9.82335410e-02 9.83180787e-02 9.84024602e-02 9.84866854e-02 + 9.85707544e-02 9.86546671e-02 9.87384235e-02 9.88220236e-02 9.89054674e-02 + 9.89887548e-02 9.90718859e-02 9.91548606e-02 9.92376790e-02 9.93203411e-02 + 9.94028467e-02 9.94851960e-02 9.95673890e-02 9.96494256e-02 9.97313058e-02 + 9.98130297e-02 9.98945972e-02 9.99760084e-02 1.00057263e-01 1.00138362e-01 + 1.00219304e-01 1.00300090e-01 1.00380720e-01 1.00461193e-01 1.00541510e-01 + 1.00621671e-01 1.00701676e-01 1.00781524e-01 1.00861217e-01 1.00940753e-01 + 1.01020133e-01 1.01099357e-01 1.01178425e-01 1.01257337e-01 1.01336093e-01 + 1.01414693e-01 1.01493137e-01 1.01571425e-01 1.01649557e-01 1.01727534e-01 + 1.01805354e-01 1.01883019e-01 1.01960528e-01 1.02037882e-01 1.02115080e-01 + 1.02192122e-01 1.02269009e-01 1.02345741e-01 1.02422317e-01 1.02498737e-01 + 1.02575002e-01 1.02651112e-01 1.02727067e-01 1.02802867e-01 1.02878511e-01 + 1.02954001e-01 1.03029335e-01 1.03104515e-01 1.03179540e-01 1.03254410e-01 + 1.03329125e-01 1.03403685e-01 1.03478091e-01 1.03552343e-01 1.03626440e-01 + 1.03700382e-01 1.03774170e-01 1.03847804e-01 1.03921284e-01 1.03994610e-01 + 1.04067782e-01 1.04140799e-01 1.04213663e-01 1.04286373e-01 1.04358930e-01 + 1.04431332e-01 1.04503582e-01 1.04575677e-01 1.04647620e-01 1.04719409e-01 + 1.04791045e-01 1.04862528e-01 1.04933857e-01 1.05005034e-01 1.05076058e-01 + 1.05146930e-01 1.05217648e-01 1.05288214e-01 1.05358628e-01 1.05428889e-01 + 1.05498998e-01 1.05568955e-01 1.05638760e-01 1.05708413e-01 1.05777914e-01 + 1.05847263e-01 1.05916461e-01 1.05985507e-01 1.06054401e-01 1.06123145e-01 + 1.06191737e-01 1.06260178e-01 1.06328468e-01 1.06396607e-01 1.06464595e-01 + 1.06532433e-01 1.06600120e-01 1.06667657e-01 1.06735043e-01 1.06802280e-01 + 1.06869366e-01 1.06936302e-01 1.07003089e-01 1.07069725e-01 1.07136212e-01 + 1.07202550e-01 1.07268738e-01 1.07334777e-01 1.07400667e-01 1.07466408e-01 + 1.07532001e-01 1.07597444e-01 1.07662739e-01 1.07727885e-01 1.07792884e-01 + 1.07857734e-01 1.07922436e-01 1.07986990e-01 1.08051396e-01 1.08115655e-01 + 1.08179766e-01 1.08243729e-01 1.08307546e-01 1.08371215e-01 1.08434738e-01 + 1.08498114e-01 1.08561343e-01 1.08624425e-01 1.08687361e-01 1.08750151e-01 + 1.08812795e-01 1.08875293e-01 1.08937645e-01 1.08999851e-01 1.09061912e-01 + 1.09123828e-01 1.09185598e-01 1.09247224e-01 1.09308704e-01 1.09370040e-01 + 1.09431231e-01 1.09492278e-01 1.09553180e-01 1.09613938e-01 1.09674553e-01 + 1.09735023e-01 1.09795350e-01 1.09855533e-01 1.09915573e-01 1.09975470e-01 + 1.10035224e-01 1.10094835e-01 1.10154303e-01 1.10213628e-01 1.10272812e-01 + 1.10331853e-01 1.10390752e-01 1.10449509e-01 1.10508124e-01 1.10566598e-01 + 1.10624931e-01 1.10683122e-01 1.10741172e-01 1.10799082e-01 1.10856850e-01 + 1.10914478e-01 1.10971966e-01 1.11029314e-01 1.11086521e-01 1.11143589e-01 + 1.11200517e-01 1.11257305e-01 1.11313955e-01 1.11370465e-01 1.11426836e-01 + 1.11483068e-01 1.11539162e-01 1.11595117e-01 1.11650934e-01 1.11706612e-01 + 1.11762153e-01 1.11817557e-01 1.11872822e-01 1.11927951e-01 1.11982942e-01 + 1.12037796e-01 1.12092513e-01 1.12147094e-01 1.12201538e-01 1.12255846e-01 + 1.12310017e-01 1.12364053e-01 1.12417954e-01 1.12471718e-01 1.12525348e-01 + 1.12578842e-01 1.12632201e-01 1.12685425e-01 1.12738515e-01 1.12791471e-01 + 1.12844292e-01 1.12896979e-01 1.12949532e-01 1.13001952e-01 1.13054238e-01 + 1.13106391e-01 1.13158411e-01 1.13210299e-01 1.13262053e-01 1.13313675e-01 + 1.13365165e-01 1.13416522e-01 1.13467748e-01 1.13518842e-01 1.13569804e-01 + 1.13620635e-01 1.13671335e-01 1.13721904e-01 1.13772343e-01 1.13822651e-01 + 1.13872828e-01 1.13922876e-01 1.13972793e-01 1.14022581e-01 1.14072239e-01 + 1.14121768e-01 1.14171168e-01 1.14220439e-01 1.14269581e-01 1.14318594e-01 + 1.14367480e-01 1.14416237e-01 1.14464866e-01 1.14513368e-01 1.14561742e-01 + 1.14609988e-01 1.14658108e-01 1.14706101e-01 1.14753967e-01 1.14801706e-01 + 1.14849320e-01 1.14896807e-01 1.14944168e-01 1.14991404e-01 1.15038514e-01 + 1.15085499e-01 1.15132359e-01 1.15179094e-01 1.15225704e-01 1.15272190e-01 + 1.15318552e-01 1.15364790e-01 1.15410904e-01 1.15456894e-01 1.15502761e-01 + 1.15548505e-01 1.15594126e-01 1.15639624e-01 1.15685000e-01 1.15730253e-01 + 1.15775384e-01 1.15820394e-01 1.15865281e-01 1.15910047e-01 1.15954692e-01 + 1.15999216e-01 1.16043619e-01 1.16087901e-01 1.16132063e-01 1.16176105e-01 + 1.16220027e-01 1.16263828e-01 1.16307511e-01 1.16351074e-01 1.16394518e-01 + 1.16437842e-01 1.16481049e-01 1.16524136e-01 1.16567106e-01 1.16609957e-01 + 1.16652690e-01 1.16695306e-01 1.16737805e-01 1.16780186e-01 1.16822450e-01 + 1.16864597e-01 1.16906628e-01 1.16948543e-01 1.16990341e-01 1.17032023e-01 + 1.17073590e-01 1.17115041e-01 1.17156377e-01 1.17197598e-01 1.17238704e-01 + 1.17279696e-01 1.17320573e-01 1.17361336e-01 1.17401984e-01 1.17442520e-01 + 1.17482941e-01 1.17523249e-01 1.17563445e-01 1.17603527e-01 1.17643497e-01 + 1.17683354e-01 1.17723099e-01 1.17762732e-01 1.17802253e-01 1.17841662e-01 + 1.17880961e-01 1.17920148e-01 1.17959224e-01 1.17998189e-01 1.18037044e-01 + 0.00000000e+00 7.21069637e-07 2.87393769e-06 6.44313909e-06 1.14132704e-05 + 1.77689899e-05 2.54950175e-05 3.45761350e-05 4.49971859e-05 5.67430756e-05 + 6.97987714e-05 8.41493023e-05 9.97797595e-05 1.16675296e-04 1.34821127e-04 + 1.54202530e-04 1.74804843e-04 1.96613468e-04 2.19613868e-04 2.43791569e-04 + 2.69132158e-04 2.95621286e-04 3.23244664e-04 3.51988067e-04 3.81837331e-04 + 4.12778355e-04 4.44797101e-04 4.77879591e-04 5.12011912e-04 5.47180212e-04 + 5.83370701e-04 6.20569653e-04 6.58763402e-04 6.97938346e-04 7.38080946e-04 + 7.79177724e-04 8.21215265e-04 8.64180217e-04 9.08059290e-04 9.52839256e-04 + 9.98506949e-04 1.04504927e-03 1.09245317e-03 1.14070568e-03 1.18979389e-03 + 1.23970493e-03 1.29042603e-03 1.34194444e-03 1.39424752e-03 1.44732264e-03 + 1.50115728e-03 1.55573896e-03 1.61105526e-03 1.66709382e-03 1.72384237e-03 + 1.78128866e-03 1.83942054e-03 1.89822590e-03 1.95769270e-03 2.01780896e-03 + 2.07856277e-03 2.13994227e-03 2.20193567e-03 2.26453125e-03 2.32771733e-03 + 2.39148232e-03 2.45581467e-03 2.52070290e-03 2.58613560e-03 2.65210140e-03 + 2.71858902e-03 2.78558723e-03 2.85308485e-03 2.92107079e-03 2.98953399e-03 + 3.05846348e-03 3.12784833e-03 3.19767769e-03 3.26794076e-03 3.33862681e-03 + 3.40972516e-03 3.48122520e-03 3.55311639e-03 3.62538824e-03 3.69803032e-03 + 3.77103228e-03 3.84438380e-03 3.91807465e-03 3.99209466e-03 4.06643370e-03 + 4.14108172e-03 4.21602872e-03 4.29126479e-03 4.36678003e-03 4.44256466e-03 + 4.51860891e-03 4.59490310e-03 4.67143761e-03 4.74820286e-03 4.82518937e-03 + 4.90238769e-03 4.97978843e-03 5.05738227e-03 5.13515997e-03 5.21311231e-03 + 5.29123016e-03 5.36950445e-03 5.44792616e-03 5.52648633e-03 5.60517607e-03 + 5.68398655e-03 5.76290899e-03 5.84193467e-03 5.92105496e-03 6.00026124e-03 + 6.07954500e-03 6.15889775e-03 6.23831109e-03 6.31777667e-03 6.39728618e-03 + 6.47683141e-03 6.55640417e-03 6.63599636e-03 6.71559991e-03 6.79520684e-03 + 6.87480922e-03 6.95439916e-03 7.03396886e-03 7.11351055e-03 7.19301654e-03 + 7.27247919e-03 7.35189093e-03 7.43124423e-03 7.51053163e-03 7.58974574e-03 + 7.66887920e-03 7.74792473e-03 7.82687511e-03 7.90572317e-03 7.98446180e-03 + 8.06308394e-03 8.14158262e-03 8.21995088e-03 8.29818186e-03 8.37626873e-03 + 8.45420474e-03 8.53198318e-03 8.60959741e-03 8.68704084e-03 8.76430693e-03 + 8.84138922e-03 8.91828129e-03 8.99497678e-03 9.07146939e-03 9.14775287e-03 + 9.22382104e-03 9.29966777e-03 9.37528698e-03 9.45067266e-03 9.52581884e-03 + 9.60071962e-03 9.67536915e-03 9.74976163e-03 9.82389135e-03 9.89775260e-03 + 9.97133977e-03 1.00446473e-02 1.01176696e-02 1.01904014e-02 1.02628371e-02 + 1.03349714e-02 1.04067991e-02 1.04783149e-02 1.05495136e-02 1.06203901e-02 + 1.06909393e-02 1.07611563e-02 1.08310359e-02 1.09005734e-02 1.09697639e-02 + 1.10386026e-02 1.11070846e-02 1.11752055e-02 1.12429604e-02 1.13103449e-02 + 1.13773543e-02 1.14439842e-02 1.15102303e-02 1.15760880e-02 1.16415531e-02 + 1.17066214e-02 1.17712886e-02 1.18355505e-02 1.18994031e-02 1.19628422e-02 + 1.20258640e-02 1.20884644e-02 1.21506395e-02 1.22123856e-02 1.22736987e-02 + 1.23345752e-02 1.23950113e-02 1.24550035e-02 1.25145481e-02 1.25736416e-02 + 1.26322805e-02 1.26904613e-02 1.27481808e-02 1.28054355e-02 1.28622221e-02 + 1.29185375e-02 1.29743784e-02 1.30297417e-02 1.30846244e-02 1.31390233e-02 + 1.31929355e-02 1.32463581e-02 1.32992881e-02 1.33517228e-02 1.34036593e-02 + 1.34550949e-02 1.35060269e-02 1.35564527e-02 1.36063696e-02 1.36557752e-02 + 1.37046669e-02 1.37530423e-02 1.38008989e-02 1.38482344e-02 1.38950466e-02 + 1.39413330e-02 1.39870916e-02 1.40323202e-02 1.40770166e-02 1.41211787e-02 + 1.41648046e-02 1.42078922e-02 1.42504396e-02 1.42924450e-02 1.43339064e-02 + 1.43748221e-02 1.44151903e-02 1.44550094e-02 1.44942776e-02 1.45329934e-02 + 1.45711551e-02 1.46087613e-02 1.46458104e-02 1.46823011e-02 1.47182318e-02 + 1.47536014e-02 1.47884084e-02 1.48226516e-02 1.48563299e-02 1.48894419e-02 + 1.49219866e-02 1.49539629e-02 1.49853697e-02 1.50162061e-02 1.50464710e-02 + 1.50761636e-02 1.51052830e-02 1.51338283e-02 1.51617988e-02 1.51891936e-02 + 1.52160122e-02 1.52422538e-02 1.52679177e-02 1.52930035e-02 1.53175105e-02 + 1.53414383e-02 1.53647864e-02 1.53875543e-02 1.54097417e-02 1.54313483e-02 + 1.54523737e-02 1.54728176e-02 1.54926799e-02 1.55119603e-02 1.55306587e-02 + 1.55487751e-02 1.55663092e-02 1.55832611e-02 1.55996309e-02 1.56154184e-02 + 1.56306239e-02 1.56452475e-02 1.56592892e-02 1.56727493e-02 1.56856281e-02 + 1.56979258e-02 1.57096426e-02 1.57207790e-02 1.57313354e-02 1.57413121e-02 + 1.57507095e-02 1.57595283e-02 1.57677688e-02 1.57754317e-02 1.57825176e-02 + 1.57890270e-02 1.57949607e-02 1.58003193e-02 1.58051036e-02 1.58093144e-02 + 1.58129524e-02 1.58160185e-02 1.58185135e-02 1.58204384e-02 1.58217941e-02 + 1.58225815e-02 1.58228017e-02 1.58224557e-02 1.58215446e-02 1.58200695e-02 + 1.58180314e-02 1.58154316e-02 1.58122713e-02 1.58085517e-02 1.58042740e-02 + 1.57994396e-02 1.57940497e-02 1.57881058e-02 1.57816092e-02 1.57745612e-02 + 1.57669635e-02 1.57588174e-02 1.57501244e-02 1.57408862e-02 1.57311041e-02 + 1.57207799e-02 1.57099152e-02 1.56985116e-02 1.56865708e-02 1.56740944e-02 + 1.56610844e-02 1.56475423e-02 1.56334700e-02 1.56188694e-02 1.56037422e-02 + 1.55880904e-02 1.55719159e-02 1.55552205e-02 1.55380063e-02 1.55202751e-02 + 1.55020292e-02 1.54832704e-02 1.54640008e-02 1.54442226e-02 1.54239378e-02 + 1.54031486e-02 1.53818571e-02 1.53600655e-02 1.53377761e-02 1.53149911e-02 + 1.52917128e-02 1.52679433e-02 1.52436851e-02 1.52189406e-02 1.51937119e-02 + 1.51680016e-02 1.51418120e-02 1.51151455e-02 1.50880047e-02 1.50603920e-02 + 1.50323098e-02 1.50037607e-02 1.49747473e-02 1.49452721e-02 1.49153377e-02 + 1.48849466e-02 1.48541016e-02 1.48228052e-02 1.47910602e-02 1.47588692e-02 + 1.47262349e-02 1.46931601e-02 1.46596475e-02 1.46256998e-02 1.45913200e-02 + 1.45565107e-02 1.45212748e-02 1.44856151e-02 1.44495346e-02 1.44130360e-02 + 1.43761224e-02 1.43387965e-02 1.43010615e-02 1.42629201e-02 1.42243754e-02 + 1.41854304e-02 1.41460881e-02 1.41063514e-02 1.40662236e-02 1.40257075e-02 + 1.39848063e-02 1.39435230e-02 1.39018609e-02 1.38598229e-02 1.38174123e-02 + 1.37746322e-02 1.37314857e-02 1.36879760e-02 1.36441064e-02 1.35998801e-02 + 1.35553002e-02 1.35103700e-02 1.34650928e-02 1.34194718e-02 1.33735104e-02 + 1.33272118e-02 1.32805793e-02 1.32336162e-02 1.31863260e-02 1.31387118e-02 + 1.30907772e-02 1.30425254e-02 1.29939598e-02 1.29450839e-02 1.28959010e-02 + 1.28464146e-02 1.27966281e-02 1.27465449e-02 1.26961685e-02 1.26455023e-02 + 1.25945499e-02 1.25433146e-02 1.24918000e-02 1.24400097e-02 1.23879470e-02 + 1.23356156e-02 1.22830189e-02 1.22301605e-02 1.21770439e-02 1.21236728e-02 + 1.20700506e-02 1.20161810e-02 1.19620674e-02 1.19077136e-02 1.18531231e-02 + 1.17982995e-02 1.17432464e-02 1.16879675e-02 1.16324664e-02 1.15767466e-02 + 1.15208119e-02 1.14646658e-02 1.14083121e-02 1.13517544e-02 1.12949964e-02 + 1.12380417e-02 1.11808940e-02 1.11235569e-02 1.10660343e-02 1.10083296e-02 + 1.09504468e-02 1.08923894e-02 1.08341611e-02 1.07757657e-02 1.07172069e-02 + 1.06584883e-02 1.05996138e-02 1.05405870e-02 1.04814116e-02 1.04220914e-02 + 1.03626301e-02 1.03030315e-02 1.02432992e-02 1.01834370e-02 1.01234487e-02 + 1.00633380e-02 1.00031086e-02 9.94276435e-03 9.88230889e-03 9.82174601e-03 + 9.76107946e-03 9.70031298e-03 9.63945032e-03 9.57849524e-03 9.51745148e-03 + 9.45632281e-03 9.39511296e-03 9.33382569e-03 9.27246474e-03 9.21103388e-03 + 9.14953684e-03 9.08797738e-03 9.02635924e-03 8.96468616e-03 8.90296189e-03 + 8.84119018e-03 8.77937476e-03 8.71751937e-03 8.65562775e-03 8.59370363e-03 + 8.53175075e-03 8.46977283e-03 8.40777359e-03 8.34575677e-03 8.28372608e-03 + 8.22168524e-03 8.15963796e-03 8.09758795e-03 8.03553892e-03 7.97349457e-03 + 7.91145859e-03 7.84943468e-03 7.78742653e-03 7.72543782e-03 7.66347224e-03 + 7.60153345e-03 7.53962513e-03 7.47775093e-03 7.41591453e-03 7.35411956e-03 + 7.29236969e-03 7.23066854e-03 7.16901976e-03 7.10742698e-03 7.04589381e-03 + 6.98442388e-03 6.92302079e-03 6.86168815e-03 6.80042955e-03 6.73924858e-03 + 6.67814882e-03 6.61713385e-03 6.55620723e-03 6.49537252e-03 6.43463328e-03 + 6.37399304e-03 6.31345533e-03 6.25302370e-03 6.19270165e-03 6.13249269e-03 + 6.07240032e-03 6.01242804e-03 5.95257933e-03 5.89285766e-03 5.83326649e-03 + 5.77380928e-03 5.71448947e-03 5.65531051e-03 5.59627581e-03 5.53738879e-03 + 5.47865285e-03 5.42007139e-03 5.36164780e-03 5.30338545e-03 5.24528770e-03 + 5.18735790e-03 5.12959940e-03 5.07201552e-03 5.01460958e-03 4.95738490e-03 + 4.90034477e-03 4.84349247e-03 4.78683128e-03 4.73036445e-03 4.67409524e-03 + 4.61802688e-03 4.56216259e-03 4.50650560e-03 4.45105909e-03 4.39582627e-03 + 4.34081029e-03 4.28601432e-03 4.23144152e-03 4.17709501e-03 4.12297792e-03 + 4.06909335e-03 4.01544441e-03 3.96203417e-03 3.90886570e-03 3.85594206e-03 + 3.80326629e-03 3.75084141e-03 3.69867044e-03 3.64675637e-03 3.59510219e-03 + 3.54371086e-03 3.49258535e-03 3.44172859e-03 3.39114350e-03 3.34083300e-03 + 3.29079998e-03 3.24104732e-03 3.19157789e-03 3.14239453e-03 3.09350009e-03 + 3.04489737e-03 2.99658919e-03 2.94857832e-03 2.90086754e-03 2.85345962e-03 + 2.80635727e-03 2.75956324e-03 2.71308022e-03 2.66691091e-03 2.62105798e-03 + 2.57552409e-03 2.53031188e-03 2.48542398e-03 2.44086299e-03 2.39663151e-03 + 2.35273210e-03 2.30916734e-03 2.26593975e-03 2.22305186e-03 2.18050618e-03 + 2.13830519e-03 2.09645137e-03 2.05494716e-03 2.01379501e-03 1.97299733e-03 + 1.93255653e-03 1.89247498e-03 1.85275505e-03 1.81339909e-03 1.77440942e-03 + 1.73578836e-03 1.69753820e-03 1.65966122e-03 1.62215965e-03 1.58503576e-03 + 1.54829175e-03 1.51192982e-03 1.47595216e-03 1.44036093e-03 1.40515827e-03 + 1.37034631e-03 1.33592716e-03 1.30190290e-03 1.26827560e-03 1.23504731e-03 + 1.20222006e-03 1.16979586e-03 1.13777671e-03 1.10616457e-03 1.07496140e-03 + 1.04416914e-03 1.01378970e-03 9.83824969e-04 9.54276828e-04 9.25147131e-04 + 8.96437715e-04 8.68150396e-04 8.40286972e-04 8.12849218e-04 7.85838891e-04 + 7.59257730e-04 7.33107451e-04 7.07389751e-04 6.82106308e-04 6.57258779e-04 + 6.32848801e-04 6.08877990e-04 5.85347945e-04 5.62260240e-04 5.39616433e-04 + 5.17418060e-04 4.95666636e-04 4.74363657e-04 4.53510597e-04 4.33108912e-04 + 4.13160036e-04 3.93665382e-04 3.74626344e-04 3.56044295e-04 3.37920586e-04 + 3.20256549e-04 3.03053496e-04 2.86312717e-04 2.70035481e-04 2.54223038e-04 + 2.38876617e-04 2.23997425e-04 2.09586650e-04 1.95645457e-04 1.82174994e-04 + 1.69176383e-04 1.56650731e-04 1.44599120e-04 1.33022613e-04 1.21922252e-04 + 1.11299058e-04 1.01154031e-04 9.14881514e-05 8.23023770e-05 7.35976459e-05 + 6.53748752e-05 5.76349612e-05 5.03787793e-05 4.36071839e-05 3.73210090e-05 + 3.15210675e-05 2.62081515e-05 2.13830322e-05 1.70464604e-05 1.31991656e-05 + 9.84185676e-06 6.97522210e-06 4.59992895e-06 2.71662394e-06 1.32593293e-06 + 4.28461042e-07 2.47926797e-08 1.15491538e-07 7.01100617e-07 1.78214224e-06 + 3.35911808e-06 5.43250917e-06 8.00277591e-06 1.10703581e-05 1.46356750e-05 + 1.86991254e-05 2.32610873e-05 2.83219184e-05 3.38819559e-05 3.99415166e-05 + 4.65008967e-05 5.35603723e-05 6.11201988e-05 6.91806116e-05 7.77418256e-05 + 8.68040355e-05 9.63674158e-05 1.06432121e-04 1.16998284e-04 1.28066021e-04 + 1.39635424e-04 1.51706568e-04 1.64279507e-04 1.77354274e-04 1.90930884e-04 + 2.05009331e-04 2.19589589e-04 2.34671614e-04 2.50255339e-04 2.66340680e-04 + 2.82927533e-04 3.00015773e-04 3.17605258e-04 3.35695825e-04 3.54287290e-04 + 3.73379453e-04 3.92972092e-04 4.13064968e-04 4.33657820e-04 4.54750370e-04 + 4.76342321e-04 4.98433355e-04 5.21023138e-04 5.44111315e-04 5.67697513e-04 + 5.91781339e-04 6.16362383e-04 6.41440216e-04 6.67014390e-04 6.93084439e-04 + 7.19649877e-04 7.46710203e-04 7.74264894e-04 8.02313411e-04 8.30855196e-04 + 8.59889675e-04 8.89416252e-04 9.19434318e-04 9.49943242e-04 9.80942378e-04 + 1.01243106e-03 1.04440861e-03 1.07687432e-03 1.10982748e-03 1.14326736e-03 + 1.17719320e-03 1.21160423e-03 1.24649967e-03 1.28187871e-03 1.31774054e-03 + 1.35408432e-03 1.39090920e-03 1.42821430e-03 1.46599875e-03 1.50426163e-03 + 1.54300203e-03 1.58221902e-03 1.62191164e-03 1.66207893e-03 1.70271991e-03 + 1.74383357e-03 1.78541889e-03 1.82747486e-03 1.87000043e-03 1.91299453e-03 + 1.95645609e-03 2.00038401e-03 2.04477720e-03 2.08963453e-03 2.13495485e-03 + 2.18073704e-03 2.22697990e-03 2.27368228e-03 2.32084296e-03 2.36846075e-03 + 2.41653443e-03 2.46506274e-03 2.51404445e-03 2.56347828e-03 2.61336297e-03 + 2.66369722e-03 2.71447972e-03 2.76570915e-03 2.81738418e-03 2.86950348e-03 + 2.92206567e-03 2.97506939e-03 3.02851326e-03 3.08239588e-03 3.13671584e-03 + 3.19147173e-03 3.24666210e-03 3.30228551e-03 3.35834052e-03 3.41482564e-03 + 3.47173940e-03 3.52908031e-03 3.58684686e-03 3.64503754e-03 3.70365083e-03 + 3.76268518e-03 3.82213906e-03 3.88201090e-03 3.94229914e-03 4.00300220e-03 + 4.06411848e-03 4.12564639e-03 4.18758433e-03 4.24993067e-03 4.31268378e-03 + 4.37584203e-03 4.43940377e-03 4.50336734e-03 4.56773109e-03 4.63249332e-03 + 4.69765237e-03 4.76320654e-03 4.82915413e-03 4.89549343e-03 4.96222273e-03 + 5.02934030e-03 5.09684441e-03 5.16473332e-03 5.23300528e-03 5.30165854e-03 + 5.37069134e-03 5.44010191e-03 5.50988847e-03 5.58004924e-03 5.65058244e-03 + 5.72148626e-03 5.79275891e-03 5.86439858e-03 5.93640345e-03 6.00877172e-03 + 6.08150155e-03 6.15459112e-03 6.22803858e-03 6.30184211e-03 6.37599985e-03 + 6.45050997e-03 6.52537060e-03 6.60057988e-03 6.67613596e-03 6.75203698e-03 + 6.82828105e-03 6.90486631e-03 6.98179088e-03 7.05905289e-03 7.13665044e-03 + 7.21458166e-03 7.29284466e-03 7.37143754e-03 7.45035841e-03 7.52960538e-03 + 7.60917656e-03 7.68907003e-03 7.76928391e-03 7.84981629e-03 7.93066527e-03 + 8.01182895e-03 8.09330541e-03 8.17509277e-03 8.25718910e-03 8.33959250e-03 + 8.42230108e-03 8.50531292e-03 8.58862611e-03 8.67223876e-03 8.75614896e-03 + 8.84035481e-03 8.92485441e-03 9.00964584e-03 9.09472723e-03 9.18009666e-03 + 9.26575225e-03 9.35169210e-03 9.43791432e-03 9.52441702e-03 9.61119832e-03 + 9.69825633e-03 9.78558918e-03 9.87319498e-03 9.96107188e-03 1.00492180e-02 + 1.01376315e-02 1.02263104e-02 1.03152530e-02 1.04044574e-02 1.04939217e-02 + 1.05836441e-02 1.06736228e-02 1.07638559e-02 1.08543416e-02 1.09450781e-02 + 1.10360636e-02 1.11272962e-02 1.12187742e-02 1.13104958e-02 1.14024591e-02 + 1.14946625e-02 1.15871040e-02 1.16797821e-02 1.17726948e-02 1.18658405e-02 + 1.19592175e-02 1.20528239e-02 1.21466580e-02 1.22407183e-02 1.23350028e-02 + 1.24295100e-02 1.25242382e-02 1.26191856e-02 1.27143506e-02 1.28097316e-02 + 1.29053269e-02 1.30011349e-02 1.30971539e-02 1.31933823e-02 1.32898186e-02 + 1.33864611e-02 1.34833083e-02 1.35803585e-02 1.36776103e-02 1.37750621e-02 + 1.38727123e-02 1.39705595e-02 1.40686021e-02 1.41668387e-02 1.42652677e-02 + 1.43638877e-02 1.44626973e-02 1.45616950e-02 1.46608794e-02 1.47602491e-02 + 1.48598027e-02 1.49595389e-02 1.50594562e-02 1.51595533e-02 1.52598289e-02 + 1.53602817e-02 1.54609104e-02 1.55617136e-02 1.56626903e-02 1.57638390e-02 + 1.58651585e-02 1.59666478e-02 1.60683054e-02 1.61701304e-02 1.62721215e-02 + 1.63742776e-02 1.64765975e-02 1.65790802e-02 1.66817246e-02 1.67845297e-02 + 1.68874943e-02 1.69906174e-02 1.70938981e-02 1.71973354e-02 1.73009283e-02 + 1.74046758e-02 1.75085771e-02 1.76126313e-02 1.77168374e-02 1.78211946e-02 + 1.79257022e-02 1.80303592e-02 1.81351648e-02 1.82401184e-02 1.83452192e-02 + 1.84504664e-02 1.85558594e-02 1.86613974e-02 1.87670799e-02 1.88729063e-02 + 1.89788758e-02 1.90849880e-02 1.91912422e-02 1.92976381e-02 1.94041749e-02 + 1.95108524e-02 1.96176701e-02 1.97246274e-02 1.98317241e-02 1.99389597e-02 + 2.00463340e-02 2.01538465e-02 2.02614971e-02 2.03692854e-02 2.04772113e-02 + 2.05852745e-02 2.06934748e-02 2.08018121e-02 2.09102863e-02 2.10188973e-02 + 2.11276450e-02 2.12365294e-02 2.13455506e-02 2.14547084e-02 2.15640031e-02 + 2.16734346e-02 2.17830032e-02 2.18927089e-02 2.20025519e-02 2.21125325e-02 + 2.22226510e-02 2.23329075e-02 2.24433024e-02 2.25538360e-02 2.26645088e-02 + 2.27753211e-02 2.28862734e-02 2.29973661e-02 2.31085997e-02 2.32199749e-02 + 2.33314922e-02 2.34431522e-02 2.35549555e-02 2.36669028e-02 2.37789949e-02 + 2.38912325e-02 2.40036163e-02 2.41161473e-02 2.42288263e-02 2.43416541e-02 + 2.44546317e-02 2.45677602e-02 2.46810404e-02 2.47944734e-02 2.49080604e-02 + 2.50218024e-02 2.51357006e-02 2.52497562e-02 2.53639704e-02 2.54783445e-02 + 2.55928799e-02 2.57075779e-02 2.58224398e-02 2.59374671e-02 2.60526613e-02 + 2.61680239e-02 2.62835565e-02 2.63992605e-02 2.65151378e-02 2.66311899e-02 + 2.67474187e-02 2.68638257e-02 2.69804129e-02 2.70971821e-02 2.72141351e-02 + 2.73312740e-02 2.74486006e-02 2.75661170e-02 2.76838253e-02 2.78017276e-02 + 2.79198259e-02 2.80381226e-02 2.81566198e-02 2.82753198e-02 2.83942249e-02 + 2.85133376e-02 2.86326602e-02 2.87521952e-02 2.88719451e-02 2.89919124e-02 + 2.91120998e-02 2.92325099e-02 2.93531454e-02 2.94740090e-02 2.95951036e-02 + 2.97164319e-02 2.98379969e-02 2.99598014e-02 3.00818485e-02 3.02041411e-02 + 3.03266825e-02 3.04494756e-02 3.05725236e-02 3.06958298e-02 3.08193975e-02 + 3.09432300e-02 3.10673306e-02 3.11917028e-02 3.13163500e-02 3.14412758e-02 + 3.15664837e-02 3.16919774e-02 3.18177606e-02 3.19438369e-02 3.20702102e-02 + 3.21968843e-02 3.23238631e-02 3.24511504e-02 3.25787504e-02 3.27066671e-02 + 3.28349045e-02 3.29634668e-02 3.30923581e-02 3.32215829e-02 3.33511453e-02 + 3.34810498e-02 3.36113007e-02 3.37419026e-02 3.38728600e-02 3.40041774e-02 + 3.41358595e-02 3.42679109e-02 3.44003366e-02 3.45331412e-02 3.46663296e-02 + 3.47999067e-02 3.49338776e-02 3.50682472e-02 3.52030207e-02 3.53382032e-02 + 3.54737998e-02 3.56098160e-02 3.57462569e-02 3.58831280e-02 3.60204348e-02 + 3.61581826e-02 3.62963771e-02 3.64350239e-02 3.65741287e-02 3.67136971e-02 + 3.68537351e-02 3.69942484e-02 3.71352429e-02 3.72767247e-02 3.74186997e-02 + 3.75611742e-02 3.77041541e-02 3.78476458e-02 3.79916555e-02 3.81361895e-02 + 3.82812543e-02 3.84268564e-02 3.85730022e-02 3.87196983e-02 3.88669514e-02 + 3.90147683e-02 3.91631556e-02 3.93121202e-02 3.94616691e-02 3.96118091e-02 + 3.97625473e-02 3.99138909e-02 4.00658470e-02 4.02184227e-02 4.03716254e-02 + 4.05254624e-02 4.06799412e-02 4.08350692e-02 4.09908540e-02 4.11473032e-02 + 4.13044244e-02 4.14622254e-02 4.16207140e-02 4.17798981e-02 4.19397857e-02 + 4.21003846e-02 4.22617031e-02 4.24237492e-02 4.25865311e-02 4.27500572e-02 + 4.29143358e-02 4.30793752e-02 4.32451840e-02 4.34117706e-02 4.35791438e-02 + 4.37473122e-02 4.39162845e-02 4.40860696e-02 4.42566763e-02 4.44281136e-02 + 4.46003905e-02 4.47735162e-02 4.49474997e-02 4.51223503e-02 4.52980774e-02 + 4.54746902e-02 4.56521983e-02 4.58306111e-02 4.60099382e-02 4.61901893e-02 + 4.63713741e-02 4.65535024e-02 4.67365841e-02 4.69206290e-02 4.71056473e-02 + 4.72916489e-02 4.74786441e-02 4.76666430e-02 4.78556559e-02 4.80456933e-02 + 4.82367655e-02 4.84288831e-02 4.86220567e-02 4.88162968e-02 4.90116143e-02 + 4.92080199e-02 4.94055246e-02 4.96041392e-02 4.98038747e-02 5.00047424e-02 + 5.02067532e-02 5.04099186e-02 5.06142498e-02 5.08197581e-02 5.10264551e-02 + 5.12343523e-02 5.14434613e-02 5.16537938e-02 5.18653616e-02 5.20781765e-02 + 5.22922503e-02 5.25075952e-02 5.27242231e-02 5.29421462e-02 5.31613767e-02 + 5.33819268e-02 5.36038091e-02 5.38270358e-02 5.40516196e-02 5.42775730e-02 + 5.45049086e-02 5.47336392e-02 5.49637777e-02 5.51953370e-02 5.54283299e-02 + 5.56627696e-02 5.58986692e-02 5.61360419e-02 5.63749010e-02 5.66152598e-02 + 5.68571317e-02 5.71005304e-02 5.73454693e-02 5.75919622e-02 5.78400227e-02 + 5.80896648e-02 5.83409023e-02 5.85937492e-02 5.88482195e-02 5.91043274e-02 + 5.93620871e-02 5.96215130e-02 5.98826193e-02 6.01454205e-02 6.04099311e-02 + 6.06761659e-02 6.09441393e-02 6.12138663e-02 6.14853616e-02 6.17586402e-02 + 6.20337170e-02 6.23106073e-02 6.25893260e-02 6.28698885e-02 6.31523100e-02 + 6.34366061e-02 6.37227921e-02 6.40108836e-02 6.43008963e-02 6.45928458e-02 + 6.48867480e-02 6.51826187e-02 6.54804740e-02 6.57803298e-02 6.60822022e-02 + 6.63861076e-02 6.66920620e-02 6.70000820e-02 6.73101839e-02 6.76223842e-02 + 6.79366996e-02 6.82531468e-02 6.85717424e-02 6.88925034e-02 6.92154467e-02 + 6.95405892e-02 6.98679481e-02 7.01975405e-02 7.05293837e-02 7.08634950e-02 + 7.11998918e-02 7.15385916e-02 7.18796120e-02 7.22229706e-02 7.25686852e-02 + 7.29167735e-02 7.32672535e-02 7.36201432e-02 7.39754605e-02 7.43332238e-02 + 7.46934510e-02 7.50561607e-02 7.54213711e-02 7.57891008e-02 7.61593682e-02 + 7.65321920e-02 7.69075909e-02 7.72855838e-02 7.76661894e-02 7.80494268e-02 + 7.84353149e-02 7.88238730e-02 7.92151201e-02 7.96090757e-02 8.00057589e-02 + 8.04051894e-02 8.08073866e-02 8.12123701e-02 8.16201597e-02 8.20307750e-02 + 8.24442360e-02 8.28605626e-02 8.32797748e-02 8.37018927e-02 8.41269365e-02 + 8.45549265e-02 8.49858830e-02 8.54198264e-02 8.58567773e-02 8.62967562e-02 + 8.67397838e-02 8.71858809e-02 8.76350683e-02 8.80873669e-02 8.85427977e-02 + 8.90013819e-02 8.94631405e-02 8.99280948e-02 9.03962662e-02 9.08676760e-02 + 9.13423458e-02 9.18202971e-02 9.23015516e-02 9.27861310e-02 9.32740571e-02 + 9.37653518e-02 9.42600372e-02 9.47581352e-02 9.52596680e-02 9.57646578e-02 + 9.62731270e-02 9.67850979e-02 9.73005931e-02 9.78196349e-02 9.83422462e-02 + 9.88684495e-02 9.93982677e-02 9.99317237e-02 1.00468840e-01 1.01009641e-01 + 1.01554148e-01 1.02102385e-01 1.02654376e-01 1.03210143e-01 1.03769711e-01 + 1.04333102e-01 1.04900341e-01 1.05471450e-01 1.06046454e-01 1.06625377e-01 + 1.07208242e-01 1.07795073e-01 1.08385896e-01 1.08980733e-01 1.09579608e-01 + 1.10182548e-01 1.10789574e-01 1.11400713e-01 1.12015989e-01 1.12635426e-01 + 1.13259049e-01 1.13886884e-01 1.14518954e-01 1.15155284e-01 1.15795901e-01 + 1.16440828e-01 1.17090092e-01 1.17743717e-01 1.18401728e-01 1.19064152e-01 + 1.19731014e-01 1.20402338e-01 1.21078152e-01 1.21758481e-01 1.22443350e-01 + 1.23132785e-01 1.23826813e-01 1.24525459e-01 1.25228750e-01 1.25936712e-01 + 1.26649371e-01 1.27366754e-01 1.28088886e-01 1.28815795e-01 1.29547507e-01 + 1.30284049e-01 1.31025448e-01 1.31771730e-01 1.32522922e-01 1.33279051e-01 + 1.34040145e-01 1.34806231e-01 1.35577335e-01 1.36353485e-01 1.37134708e-01 + 1.37921033e-01 1.38712486e-01 1.39509094e-01 1.40310887e-01 1.41117891e-01 + 1.41930134e-01 1.42747644e-01 1.43570449e-01 1.44398578e-01 1.45232058e-01 + 1.46070917e-01 1.46915184e-01 1.47764888e-01 1.48620056e-01 1.49480717e-01 + 1.50346899e-01 1.51218632e-01 1.52095944e-01 1.52978863e-01 1.53867420e-01 + 1.54761642e-01 1.55661558e-01 1.56567199e-01 1.57478592e-01 1.58395767e-01 + 1.59318754e-01 1.60247581e-01 1.61182279e-01 1.62122877e-01 1.63069403e-01 + 1.64021889e-01 1.64980364e-01 1.65944857e-01 1.66915399e-01 1.67892019e-01 + 1.68874747e-01 1.69863614e-01 1.70858650e-01 1.71859884e-01 1.72867348e-01 + 1.73881072e-01 1.74901085e-01 1.75927419e-01 1.76960104e-01 1.77999170e-01 + 1.79044650e-01 1.80096572e-01 1.81154968e-01 1.82219870e-01 1.83291308e-01 + 1.84369312e-01 1.85453915e-01 1.86545148e-01 1.87643041e-01 1.88747626e-01 + 1.89858934e-01 1.90976997e-01 1.92101847e-01 1.93233514e-01 1.94372032e-01 + 1.95517430e-01 1.96669742e-01 1.97828999e-01 1.98995233e-01 2.00168475e-01 + 2.01348759e-01 2.02536116e-01 2.03730578e-01 2.04932178e-01 2.06140947e-01 + 2.07356919e-01 2.08580125e-01 2.09810599e-01 2.11048372e-01 2.12293478e-01 + 2.13545949e-01 2.14805817e-01 2.16073116e-01 2.17347879e-01 2.18630138e-01 + 2.19919927e-01 2.21217278e-01 2.22522225e-01 2.23834800e-01 2.25155038e-01 + 2.26482971e-01 2.27818633e-01 2.29162056e-01 2.30513276e-01 2.31872325e-01 + 2.33239236e-01 2.34614044e-01 2.35996782e-01 2.37387484e-01 2.38786184e-01 + 2.40192915e-01 2.41607712e-01 2.43030609e-01 2.44461640e-01 2.45900838e-01 + 2.47348238e-01 2.48803875e-01 2.50267782e-01 2.51739994e-01 2.53220545e-01 + 2.54709470e-01 2.56206803e-01 2.57712579e-01 2.59226833e-01 2.60749598e-01 + 2.62280911e-01 2.63820805e-01 2.65369316e-01 2.66926478e-01 2.68492326e-01 + 2.70066896e-01 2.71650222e-01 2.73242339e-01 2.74843284e-01 2.76453090e-01 + 2.78071793e-01 2.79699428e-01 2.81336031e-01 2.82981638e-01 2.84636282e-01 + 2.86300002e-01 2.87972830e-01 2.89654804e-01 2.91345959e-01 2.93046331e-01 + 2.94755955e-01 2.96474867e-01 2.98203103e-01 2.99940699e-01 3.01687691e-01 + 3.03444115e-01 3.05210007e-01 3.06985403e-01 3.08770338e-01 3.10564851e-01 + 3.12368975e-01 3.14182749e-01 3.16006207e-01 3.17839387e-01 3.19682324e-01 + 3.21535056e-01 3.23397619e-01 3.25270049e-01 3.27152383e-01 3.29044657e-01 + 3.30946908e-01 3.32859173e-01 3.34781489e-01 3.36713892e-01 3.38656419e-01 + 3.40609107e-01 3.42571993e-01 3.44545114e-01 3.46528507e-01 3.48522209e-01 + 3.50526256e-01 3.52540686e-01 3.54565537e-01 3.56600845e-01 3.58646647e-01 + 3.60702982e-01 3.62769885e-01 3.64847394e-01 3.66935548e-01 3.69034382e-01 + 3.71143935e-01 3.73264245e-01 3.75395347e-01 3.77537281e-01 3.79690084e-01 + 3.81853792e-01 3.84028445e-01 3.86214079e-01 3.88410732e-01 3.90618443e-01 + 3.92837248e-01 3.95067186e-01 3.97308294e-01 3.99560611e-01 4.01824174e-01 + 4.04099021e-01 4.06385190e-01 4.08682719e-01 4.10991646e-01 4.13312009e-01 + 4.15643846e-01 4.17987196e-01 4.20342096e-01 4.22708585e-01 4.25086701e-01 + 4.27476482e-01 4.29877965e-01 4.32291191e-01 4.34716196e-01 4.37153020e-01 + 4.39601699e-01 4.42062274e-01 4.44534782e-01 4.47019262e-01 4.49515752e-01 + 4.52024290e-01 4.54544915e-01 4.57077666e-01 4.59622582e-01 4.62179699e-01 + 4.64749058e-01 4.67330697e-01 4.69924655e-01 4.72530970e-01 4.75149680e-01 + 4.77780825e-01 4.80424443e-01 4.83080573e-01 4.85749254e-01 4.88430524e-01 + 4.91124422e-01 4.93830987e-01 4.96550258e-01 4.99282274e-01 5.02027073e-01 + 5.04784694e-01 5.07555177e-01 5.10338560e-01 5.13134881e-01 5.15944181e-01 + 5.18766498e-01 5.21601870e-01 5.24450337e-01 5.27311938e-01 5.30186712e-01 + 5.33074698e-01 5.35975934e-01 5.38890460e-01 5.41818315e-01 5.44759538e-01 + 5.47714168e-01 5.50682244e-01 5.53663805e-01 5.56658890e-01 5.59667539e-01 + 5.62689790e-01 5.65725682e-01 5.68775255e-01 5.71838548e-01 5.74915600e-01 + 5.78006450e-01 5.81111137e-01 5.84229700e-01 5.87362179e-01 5.90508613e-01 + 5.93669040e-01 5.96843501e-01 6.00032034e-01 6.03234678e-01 6.06451473e-01 + 6.09682457e-01 6.12927671e-01 6.16187152e-01 6.19460941e-01 6.22749077e-01 + 6.26051598e-01 6.29368545e-01 6.32699955e-01 6.36045869e-01 6.39406325e-01 + 6.42781363e-01 6.46171022e-01 6.49575341e-01 6.52994360e-01 6.56428116e-01 + 6.59876651e-01 6.63340002e-01 6.66818210e-01 6.70311312e-01 6.73819349e-01 + 6.77342360e-01 6.80880383e-01 6.84433457e-01 6.88001623e-01 6.91584919e-01 + 6.95183384e-01 6.98797058e-01 7.02425979e-01 7.06070186e-01 7.09729719e-01 + 7.13404617e-01 7.17094919e-01 7.20800663e-01 7.24521889e-01 7.28258637e-01 + 7.32010944e-01 7.35778850e-01 7.39562395e-01 7.43361616e-01 7.47176553e-01 + 7.51007246e-01 7.54853732e-01 7.58716051e-01 7.62594242e-01 7.66488343e-01 + 7.70398394e-01 7.74324434e-01 7.78266501e-01 7.82224634e-01 7.86198872e-01 + 7.90189253e-01 7.94195818e-01 7.98218604e-01 8.02257650e-01 8.06312994e-01 + 8.10384677e-01 8.14472736e-01 8.18577209e-01 8.22698137e-01 8.26835556e-01 + 8.30989506e-01 8.35160026e-01 8.39347154e-01 8.43550929e-01 8.47771388e-01 + 8.52008571e-01 8.56262517e-01 8.60533262e-01 8.64820847e-01 8.69125309e-01 + 8.73446687e-01 8.77785019e-01 8.82140343e-01 8.86512698e-01 8.90902122e-01 + 8.95308653e-01 8.99732330e-01 9.04173190e-01 9.08631272e-01 9.13106614e-01 + 9.17599253e-01 9.22109229e-01 9.26636579e-01 9.31181341e-01 9.35743553e-01 + 9.40323253e-01 9.44920479e-01 9.49535268e-01 9.54167659e-01 9.58817690e-01 + 9.63485397e-01 9.68170820e-01 9.72873995e-01 9.77594961e-01 9.82333754e-01 + 9.87090413e-01 9.91864975e-01 9.96657478e-01 1.00146796e+00 1.00629646e+00 + 1.01114300e+00 1.01600764e+00 1.02089041e+00 1.02579134e+00 1.03071048e+00 + 1.03564785e+00 1.04060350e+00 1.04557747e+00 1.05056978e+00 1.05558048e+00 + 1.06060961e+00 1.06565720e+00 1.07072329e+00 1.07580791e+00 1.08091111e+00 + 1.08603291e+00 1.09117337e+00 1.09633250e+00 1.10151035e+00 1.10670696e+00 + 1.11192236e+00 1.11715659e+00 1.12240969e+00 1.12768169e+00 1.13297263e+00 + 1.13828254e+00 1.14361146e+00 1.14895943e+00 1.15432648e+00 1.15971265e+00 + 1.16511798e+00 1.17054250e+00 1.17598625e+00 1.18144926e+00 1.18693156e+00 + 1.19243321e+00 1.19795422e+00 1.20349464e+00 1.20905451e+00 1.21463385e+00 + 1.22023271e+00 1.22585111e+00 1.23148910e+00 1.23714670e+00 1.24282397e+00 + 1.24852092e+00 1.25423760e+00 1.25997404e+00 1.26573027e+00 1.27150634e+00 + 1.27730227e+00 1.28311810e+00 1.28895387e+00 1.29480961e+00 1.30068535e+00 + 1.30658114e+00 1.31249699e+00 1.31843296e+00 1.32438907e+00 1.33036536e+00 + 1.33636186e+00 1.34237861e+00 1.34841563e+00 1.35447298e+00 1.36055067e+00 + 1.36664875e+00 1.37276724e+00 1.37890618e+00 1.38506561e+00 1.39124556e+00 + 1.39744606e+00 1.40366714e+00 1.40990885e+00 1.41617121e+00 1.42245426e+00 + 1.42875802e+00 1.43508254e+00 1.44142785e+00 1.44779398e+00 1.45418096e+00 + 1.46058882e+00 1.46701761e+00 1.47346735e+00 1.47993807e+00 1.48642981e+00 + 1.49294260e+00 1.49947647e+00 1.50603146e+00 1.51260760e+00 1.51920492e+00 + 1.52582344e+00 1.53246322e+00 1.53912427e+00 1.54580663e+00 1.55251033e+00 + 1.55923541e+00 1.56598189e+00 1.57274981e+00 1.57953919e+00 1.58635008e+00 + 1.59318250e+00 1.60003648e+00 1.60691205e+00 1.61380925e+00 1.62072811e+00 + 1.62766866e+00 1.63463093e+00 1.64161494e+00 1.64862074e+00 1.65564835e+00 + 1.66269781e+00 1.66976913e+00 1.67686237e+00 1.68397753e+00 1.69111467e+00 + 1.69827379e+00 1.70545495e+00 1.71265816e+00 1.71988345e+00 1.72713087e+00 + 1.73440042e+00 1.74169216e+00 1.74900610e+00 1.75634228e+00 1.76370072e+00 + 1.77108145e+00 1.77848451e+00 1.78590992e+00 1.79335772e+00 1.80082793e+00 + 1.80832057e+00 1.81583569e+00 1.82337331e+00 1.83093345e+00 1.83851615e+00 + 1.84612143e+00 1.85374933e+00 1.86139987e+00 1.86907308e+00 1.87676899e+00 + 1.88448762e+00 1.89222901e+00 1.89999318e+00 1.90778016e+00 1.91558998e+00 + 1.92342267e+00 1.93127825e+00 1.93915675e+00 1.94705820e+00 1.95498262e+00 + 1.96293005e+00 1.97090050e+00 1.97889402e+00 1.98691062e+00 1.99495033e+00 + 2.00301317e+00 2.01109918e+00 2.01920839e+00 2.02734080e+00 2.03549647e+00 + 2.04367540e+00 2.05187763e+00 2.06010318e+00 2.06835208e+00 2.07662435e+00 + 2.08492002e+00 2.09323912e+00 2.10158167e+00 2.10994769e+00 2.11833722e+00 + 2.12675027e+00 2.13518688e+00 2.14364706e+00 2.15213085e+00 2.16063826e+00 + 2.16916932e+00 2.17772406e+00 2.18630250e+00 2.19490466e+00 2.20353058e+00 + 2.21218027e+00 2.22085375e+00 2.22955106e+00 2.23827221e+00 2.24701724e+00 + 2.25578615e+00 2.26457899e+00 2.27339576e+00 2.28223650e+00 2.29110122e+00 + 2.29998996e+00 2.30890273e+00 2.31783955e+00 2.32680045e+00 2.33578546e+00 + 2.34479459e+00 2.35382786e+00 2.36288530e+00 2.37196694e+00 2.38107279e+00 + 7.75783058e-03 7.73296622e-03 7.70815966e-03 7.68341051e-03 7.65871836e-03 + 7.63408283e-03 7.60950351e-03 7.58498000e-03 7.56051190e-03 7.53609882e-03 + 7.51174036e-03 7.48743611e-03 7.46318569e-03 7.43898868e-03 7.41484469e-03 + 7.39075333e-03 7.36671420e-03 7.34272689e-03 7.31879101e-03 7.29490616e-03 + 7.27107195e-03 7.24728797e-03 7.22355383e-03 7.19986914e-03 7.17623349e-03 + 7.15264650e-03 7.12910776e-03 7.10561688e-03 7.08217347e-03 7.05877713e-03 + 7.03542747e-03 7.01212410e-03 6.98886663e-03 6.96565466e-03 6.94248780e-03 + 6.91936567e-03 6.89628787e-03 6.87325401e-03 6.85026372e-03 6.82731659e-03 + 6.80441225e-03 6.78155031e-03 6.75873038e-03 6.73595209e-03 6.71321505e-03 + 6.69051888e-03 6.66786319e-03 6.64524762e-03 6.62267177e-03 6.60013528e-03 + 6.57763777e-03 6.55517887e-03 6.53275819e-03 6.51037537e-03 6.48803005e-03 + 6.46572184e-03 6.44345038e-03 6.42121530e-03 6.39901625e-03 6.37685284e-03 + 6.35472473e-03 6.33263156e-03 6.31057295e-03 6.28854856e-03 6.26655802e-03 + 6.24460099e-03 6.22267711e-03 6.20078603e-03 6.17892740e-03 6.15710087e-03 + 6.13530609e-03 6.11354273e-03 6.09181044e-03 6.07010887e-03 6.04843770e-03 + 6.02679658e-03 6.00518518e-03 5.98360316e-03 5.96205020e-03 5.94052597e-03 + 5.91903013e-03 5.89756237e-03 5.87612237e-03 5.85470980e-03 5.83332434e-03 + 5.81196568e-03 5.79063351e-03 5.76932751e-03 5.74804738e-03 5.72679281e-03 + 5.70556349e-03 5.68435913e-03 5.66317942e-03 5.64202406e-03 5.62089277e-03 + 5.59978526e-03 5.57870122e-03 5.55764038e-03 5.53660245e-03 5.51558714e-03 + 5.49459419e-03 5.47362332e-03 5.45267424e-03 5.43174670e-03 5.41084042e-03 + 5.38995513e-03 5.36909059e-03 5.34824651e-03 5.32742266e-03 5.30661878e-03 + 5.28583461e-03 5.26506991e-03 5.24432443e-03 5.22359793e-03 5.20289018e-03 + 5.18220094e-03 5.16152997e-03 5.14087705e-03 5.12024195e-03 5.09962444e-03 + 5.07902432e-03 5.05844136e-03 5.03787534e-03 5.01732607e-03 4.99679333e-03 + 4.97627691e-03 4.95577663e-03 4.93529228e-03 4.91482367e-03 4.89437061e-03 + 4.87393292e-03 4.85351041e-03 4.83310291e-03 4.81271023e-03 4.79233221e-03 + 4.77196867e-03 4.75161946e-03 4.73128441e-03 4.71096337e-03 4.69065618e-03 + 4.67036269e-03 4.65008275e-03 4.62981623e-03 4.60956299e-03 4.58932288e-03 + 4.56909578e-03 4.54888156e-03 4.52868010e-03 4.50849128e-03 4.48831498e-03 + 4.46815110e-03 4.44799952e-03 4.42786013e-03 4.40773285e-03 4.38761758e-03 + 4.36751422e-03 4.34742268e-03 4.32734289e-03 4.30727476e-03 4.28721822e-03 + 4.26717320e-03 4.24713963e-03 4.22711745e-03 4.20710659e-03 4.18710701e-03 + 4.16711866e-03 4.14714149e-03 4.12717545e-03 4.10722051e-03 4.08727665e-03 + 4.06734382e-03 4.04742201e-03 4.02751119e-03 4.00761135e-03 3.98772248e-03 + 3.96784457e-03 3.94797762e-03 3.92812164e-03 3.90827662e-03 3.88844258e-03 + 3.86861953e-03 3.84880750e-03 3.82900651e-03 3.80921659e-03 3.78943777e-03 + 3.76967009e-03 3.74991360e-03 3.73016833e-03 3.71043435e-03 3.69071171e-03 + 3.67100046e-03 3.65130068e-03 3.63161244e-03 3.61193581e-03 3.59227087e-03 + 3.57261770e-03 3.55297640e-03 3.53334706e-03 3.51372978e-03 3.49412465e-03 + 3.47453180e-03 3.45495132e-03 3.43538334e-03 3.41582798e-03 3.39628537e-03 + 3.37675564e-03 3.35723892e-03 3.33773536e-03 3.31824510e-03 3.29876830e-03 + 3.27930510e-03 3.25985568e-03 3.24042019e-03 3.22099880e-03 3.20159169e-03 + 3.18219905e-03 3.16282105e-03 3.14345788e-03 3.12410974e-03 3.10477683e-03 + 3.08545935e-03 3.06615751e-03 3.04687152e-03 3.02760161e-03 3.00834799e-03 + 2.98911090e-03 2.96989056e-03 2.95068723e-03 2.93150113e-03 2.91233251e-03 + 2.89318164e-03 2.87404877e-03 2.85493415e-03 2.83583807e-03 2.81676078e-03 + 2.79770257e-03 2.77866372e-03 2.75964451e-03 2.74064524e-03 2.72166621e-03 + 2.70270771e-03 2.68377006e-03 2.66485356e-03 2.64595853e-03 2.62708529e-03 + 2.60823417e-03 2.58940549e-03 2.57059960e-03 2.55181683e-03 2.53305753e-03 + 2.51432206e-03 2.49561075e-03 2.47692398e-03 2.45826211e-03 2.43962550e-03 + 2.42101454e-03 2.40242960e-03 2.38387106e-03 2.36533932e-03 2.34683476e-03 + 2.32835779e-03 2.30990881e-03 2.29148822e-03 2.27309644e-03 2.25473389e-03 + 2.23640098e-03 2.21809814e-03 2.19982581e-03 2.18158442e-03 2.16337441e-03 + 2.14519622e-03 2.12705031e-03 2.10893713e-03 2.09085714e-03 2.07281081e-03 + 2.05479859e-03 2.03682097e-03 2.01887841e-03 2.00097142e-03 1.98310046e-03 + 1.96526603e-03 1.94746863e-03 1.92970876e-03 1.91198692e-03 1.89430361e-03 + 1.87665937e-03 1.85905469e-03 1.84149011e-03 1.82396614e-03 1.80648333e-03 + 1.78904221e-03 1.77164332e-03 1.75428719e-03 1.73697438e-03 1.71970545e-03 + 1.70248094e-03 1.68530143e-03 1.66816747e-03 1.65107964e-03 1.63403850e-03 + 1.61704464e-03 1.60009864e-03 1.58320109e-03 1.56635257e-03 1.54955368e-03 + 1.53280502e-03 1.51610719e-03 1.49946080e-03 1.48286646e-03 1.46632477e-03 + 1.44983637e-03 1.43340187e-03 1.41702190e-03 1.40069709e-03 1.38442807e-03 + 1.36821548e-03 1.35205996e-03 1.33596216e-03 1.31992272e-03 1.30394230e-03 + 1.28802156e-03 1.27216115e-03 1.25636174e-03 1.24062400e-03 1.22494858e-03 + 1.20933618e-03 1.19378747e-03 1.17830313e-03 1.16288384e-03 1.14753029e-03 + 1.13224317e-03 1.11702318e-03 1.10187102e-03 1.08678738e-03 1.07177298e-03 + 1.05682851e-03 1.04195470e-03 1.02715225e-03 1.01242188e-03 9.97764323e-04 + 9.83180288e-04 9.68670506e-04 9.54235708e-04 9.39876625e-04 9.25593994e-04 + 9.11388553e-04 8.97261043e-04 8.83212208e-04 8.69242796e-04 8.55353556e-04 + 8.41545241e-04 8.27818606e-04 8.14174409e-04 8.00613410e-04 7.87136373e-04 + 7.73744063e-04 7.60437247e-04 7.47216698e-04 7.34083188e-04 7.21037492e-04 + 7.08080389e-04 6.95212658e-04 6.82435082e-04 6.69748446e-04 6.57153537e-04 + 6.44651143e-04 6.32242057e-04 6.19927071e-04 6.07706982e-04 5.95582586e-04 + 5.83554683e-04 5.71624074e-04 5.59791564e-04 5.48057956e-04 5.36424058e-04 + 5.24890679e-04 5.13458629e-04 5.02128720e-04 4.90901767e-04 4.79778585e-04 + 4.68759991e-04 4.57846804e-04 4.47039843e-04 4.36339931e-04 4.25747890e-04 + 4.15264545e-04 4.04890722e-04 3.94627247e-04 3.84474948e-04 3.74434656e-04 + 3.64507200e-04 3.54693412e-04 3.44994126e-04 3.35410174e-04 3.25942392e-04 + 3.16591616e-04 3.07358681e-04 2.98244426e-04 2.89249688e-04 2.80375307e-04 + 2.71622122e-04 2.62990974e-04 2.54482704e-04 2.46098153e-04 2.37838164e-04 + 2.29703578e-04 2.21695241e-04 2.13813993e-04 2.06060681e-04 1.98436147e-04 + 1.90941236e-04 1.83576793e-04 1.76343663e-04 1.69242690e-04 1.62274720e-04 + 1.55440598e-04 1.48741168e-04 1.42177276e-04 1.35749766e-04 1.29459484e-04 + 1.23307274e-04 1.17293980e-04 1.11420445e-04 1.05687515e-04 1.00096032e-04 + 9.46468388e-05 8.93407780e-05 8.41786913e-05 7.91614202e-05 7.42898052e-05 + 6.95646864e-05 6.49869031e-05 6.05572937e-05 5.62766961e-05 5.21459470e-05 + 4.81658825e-05 4.43373376e-05 4.06611462e-05 3.71381414e-05 3.37691551e-05 + 3.05550180e-05 2.74965596e-05 2.45946084e-05 2.18499913e-05 1.92635340e-05 + 1.68360610e-05 1.45683951e-05 1.24613578e-05 1.05157689e-05 8.73244699e-06 + 7.11220867e-06 5.65586906e-06 4.36424154e-06 3.23813774e-06 2.27836748e-06 + 1.48573873e-06 8.61057567e-07 4.05128118e-07 1.18752518e-07 2.73086226e-09 + 5.78611603e-08 2.84939286e-07 6.84758934e-07 1.25811157e-06 2.00578638e-06 + 2.92857023e-06 4.02724762e-06 5.30260064e-06 6.75540890e-06 8.38644951e-06 + 1.01964970e-05 1.21863234e-05 1.43566979e-05 1.67083872e-05 1.92421552e-05 + 2.19587628e-05 2.48589684e-05 2.79435273e-05 3.12131920e-05 3.46687118e-05 + 3.83108334e-05 4.21402999e-05 4.61578518e-05 5.03642261e-05 5.47601568e-05 + 5.93463745e-05 6.41236066e-05 6.90925772e-05 7.42540069e-05 7.96086130e-05 + 8.51571092e-05 9.09002059e-05 9.68386096e-05 1.02973024e-04 1.09304147e-04 + 1.15832676e-04 1.22559303e-04 1.29484715e-04 1.36609598e-04 1.43934631e-04 + 1.51460492e-04 1.59187852e-04 1.67117382e-04 1.75249745e-04 1.83585602e-04 + 1.92125609e-04 2.00870420e-04 2.09820682e-04 2.18977038e-04 2.28340129e-04 + 2.37910590e-04 2.47689051e-04 2.57676139e-04 2.67872477e-04 2.78278681e-04 + 2.88895364e-04 2.99723136e-04 3.10762599e-04 3.22014353e-04 3.33478993e-04 + 3.45157108e-04 3.57049283e-04 3.69156098e-04 3.81478128e-04 3.94015944e-04 + 4.06770112e-04 4.19741192e-04 4.32929738e-04 4.46336303e-04 4.59961431e-04 + 4.73805662e-04 4.87869532e-04 5.02153570e-04 5.16658302e-04 5.31384246e-04 + 5.46331917e-04 5.61501823e-04 5.76894469e-04 5.92510351e-04 6.08349963e-04 + 6.24413792e-04 6.40702320e-04 6.57216021e-04 6.73955368e-04 6.90920825e-04 + 7.08112850e-04 7.25531898e-04 7.43178417e-04 7.61052849e-04 7.79155629e-04 + 7.97487189e-04 8.16047953e-04 8.34838340e-04 8.53858764e-04 8.73109630e-04 + 8.92591340e-04 9.12304290e-04 9.32248867e-04 9.52425456e-04 9.72834432e-04 + 9.93476168e-04 1.01435103e-03 1.03545937e-03 1.05680154e-03 1.07837790e-03 + 1.10018877e-03 1.12223450e-03 1.14451541e-03 1.16703183e-03 1.18978405e-03 + 1.21277241e-03 1.23599719e-03 1.25945869e-03 1.28315720e-03 1.30709300e-03 + 1.33126638e-03 1.35567759e-03 1.38032690e-03 1.40521457e-03 1.43034085e-03 + 1.45570597e-03 1.48131019e-03 1.50715372e-03 1.53323678e-03 1.55955961e-03 + 1.58612239e-03 1.61292535e-03 1.63996867e-03 1.66725254e-03 1.69477714e-03 + 1.72254266e-03 1.75054926e-03 1.77879709e-03 1.80728633e-03 1.83601711e-03 + 1.86498957e-03 1.89420386e-03 1.92366009e-03 1.95335839e-03 1.98329887e-03 + 2.01348164e-03 2.04390679e-03 2.07457442e-03 2.10548462e-03 2.13663746e-03 + 2.16803301e-03 2.19967134e-03 2.23155250e-03 2.26367655e-03 2.29604352e-03 + 2.32865346e-03 2.36150638e-03 2.39460232e-03 2.42794128e-03 2.46152328e-03 + 2.49534830e-03 2.52941636e-03 2.56372742e-03 2.59828147e-03 2.63307847e-03 + 2.66811840e-03 2.70340121e-03 2.73892685e-03 2.77469525e-03 2.81070636e-03 + 2.84696010e-03 2.88345639e-03 2.92019515e-03 2.95717627e-03 2.99439966e-03 + 3.03186521e-03 3.06957280e-03 3.10752231e-03 3.14571361e-03 3.18414655e-03 + 3.22282100e-03 3.26173679e-03 3.30089378e-03 3.34029178e-03 3.37993063e-03 + 3.41981015e-03 3.45993014e-03 3.50029041e-03 3.54089075e-03 3.58173095e-03 + 3.62281080e-03 3.66413006e-03 3.70568851e-03 3.74748589e-03 3.78952197e-03 + 3.83179649e-03 3.87430918e-03 3.91705978e-03 3.96004801e-03 4.00327358e-03 + 4.04673620e-03 4.09043558e-03 4.13437140e-03 4.17854335e-03 4.22295111e-03 + 4.26759435e-03 4.31247275e-03 4.35758594e-03 4.40293359e-03 4.44851534e-03 + 4.49433082e-03 4.54037966e-03 4.58666148e-03 4.63317590e-03 4.67992252e-03 + 4.72690094e-03 4.77411076e-03 4.82155156e-03 4.86922292e-03 4.91712441e-03 + 4.96525559e-03 5.01361603e-03 5.06220526e-03 5.11102284e-03 5.16006829e-03 + 5.20934116e-03 5.25884095e-03 5.30856719e-03 5.35851938e-03 5.40869703e-03 + 5.45909962e-03 5.50972664e-03 5.56057758e-03 5.61165191e-03 5.66294908e-03 + 5.71446857e-03 5.76620983e-03 5.81817229e-03 5.87035540e-03 5.92275860e-03 + 5.97538130e-03 6.02822292e-03 6.08128288e-03 6.13456058e-03 6.18805542e-03 + 6.24176680e-03 6.29569408e-03 6.34983667e-03 6.40419392e-03 6.45876520e-03 + 6.51354987e-03 6.56854729e-03 6.62375679e-03 6.67917772e-03 6.73480941e-03 + 6.79065119e-03 6.84670238e-03 6.90296228e-03 6.95943021e-03 7.01610547e-03 + 7.07298735e-03 7.13007514e-03 7.18736812e-03 7.24486557e-03 7.30256676e-03 + 7.36047095e-03 7.41857739e-03 7.47688535e-03 7.53539406e-03 7.59410276e-03 + 7.65301069e-03 7.71211707e-03 7.77142113e-03 7.83092207e-03 7.89061912e-03 + 7.95051146e-03 8.01059830e-03 8.07087884e-03 8.13135225e-03 8.19201772e-03 + 8.25287442e-03 8.31392151e-03 8.37515818e-03 8.43658356e-03 8.49819681e-03 + 8.55999708e-03 8.62198351e-03 8.68415524e-03 8.74651139e-03 8.80905109e-03 + 8.87177346e-03 8.93467761e-03 8.99776265e-03 9.06102768e-03 9.12447181e-03 + 9.18809412e-03 9.25189370e-03 9.31586964e-03 9.38002101e-03 9.44434688e-03 + 9.50884633e-03 9.57351841e-03 9.63836218e-03 9.70337670e-03 9.76856101e-03 + 9.83391415e-03 9.89943517e-03 9.96512309e-03 1.00309769e-02 1.00969958e-02 + 1.01631786e-02 1.02295244e-02 1.02960321e-02 1.03627010e-02 1.04295298e-02 + 1.04965176e-02 1.05636634e-02 1.06309662e-02 1.06984250e-02 1.07660387e-02 + 1.08338064e-02 1.09017270e-02 1.09697994e-02 1.10380226e-02 1.11063957e-02 + 1.11749175e-02 1.12435870e-02 1.13124031e-02 1.13813648e-02 1.14504710e-02 + 1.15197207e-02 1.15891128e-02 1.16586462e-02 1.17283198e-02 1.17981326e-02 + 1.18680835e-02 1.19381714e-02 1.20083952e-02 1.20787538e-02 1.21492461e-02 + 1.22198711e-02 1.22906275e-02 1.23615144e-02 1.24325305e-02 1.25036749e-02 + 1.25749463e-02 1.26463436e-02 1.27178658e-02 1.27895117e-02 1.28612802e-02 + 1.29331701e-02 1.30051803e-02 1.30773097e-02 1.31495572e-02 1.32219215e-02 + 1.32944016e-02 1.33669962e-02 1.34397044e-02 1.35125248e-02 1.35854564e-02 + 1.36584979e-02 1.37316483e-02 1.38049064e-02 1.38782709e-02 1.39517408e-02 + 1.40253149e-02 1.40989919e-02 1.41727708e-02 1.42466503e-02 1.43206293e-02 + 1.43947066e-02 1.44688810e-02 1.45431514e-02 1.46175164e-02 1.46919751e-02 + 1.47665261e-02 1.48411683e-02 1.49159005e-02 1.49907214e-02 1.50656300e-02 + 1.51406250e-02 1.52157052e-02 1.52908694e-02 1.53661164e-02 1.54414451e-02 + 1.55168541e-02 1.55923424e-02 1.56679086e-02 1.57435517e-02 1.58192703e-02 + 1.58950633e-02 1.59709295e-02 1.60468676e-02 1.61228765e-02 1.61989549e-02 + 1.62751017e-02 1.63513156e-02 1.64275953e-02 1.65039398e-02 1.65803477e-02 + 1.66568179e-02 1.67333491e-02 1.68099401e-02 1.68865898e-02 1.69632968e-02 + 1.70400600e-02 1.71168782e-02 1.71937501e-02 1.72706745e-02 1.73476503e-02 + 1.74246761e-02 1.75017508e-02 1.75788731e-02 1.76560418e-02 1.77332558e-02 + 1.78105138e-02 1.78878145e-02 1.79651568e-02 1.80425395e-02 1.81199613e-02 + 1.81974209e-02 1.82749173e-02 1.83524492e-02 1.84300153e-02 1.85076145e-02 + 1.85852456e-02 1.86629072e-02 1.87405983e-02 1.88183176e-02 1.88960639e-02 + 1.89738359e-02 1.90516326e-02 1.91294526e-02 1.92072948e-02 1.92851579e-02 + 1.93630408e-02 1.94409423e-02 1.95188611e-02 1.95967960e-02 1.96747459e-02 + 1.97527096e-02 1.98306858e-02 1.99086734e-02 1.99866711e-02 2.00646778e-02 + 2.01426923e-02 2.02207134e-02 2.02987399e-02 2.03767707e-02 2.04548044e-02 + 2.05328400e-02 2.06108763e-02 2.06889121e-02 2.07669463e-02 2.08449775e-02 + 2.09230048e-02 2.10010268e-02 2.10790425e-02 2.11570506e-02 2.12350500e-02 + 2.13130396e-02 2.13910182e-02 2.14689845e-02 2.15469376e-02 2.16248761e-02 + 2.17027990e-02 2.17807052e-02 2.18585934e-02 2.19364625e-02 2.20143114e-02 + 2.20921389e-02 2.21699439e-02 2.22477253e-02 2.23254820e-02 2.24032128e-02 + 2.24809165e-02 2.25585922e-02 2.26362385e-02 2.27138546e-02 2.27914391e-02 + 2.28689910e-02 2.29465093e-02 2.30239927e-02 2.31014402e-02 2.31788507e-02 + 2.32562232e-02 2.33335564e-02 2.34108493e-02 2.34881009e-02 2.35653100e-02 + 2.36424756e-02 2.37195966e-02 2.37966720e-02 2.38737005e-02 2.39506813e-02 + 2.40276132e-02 2.41044951e-02 2.41813261e-02 2.42581051e-02 2.43348309e-02 + 2.44115026e-02 2.44881192e-02 2.45646795e-02 2.46411826e-02 2.47176275e-02 + 2.47940130e-02 2.48703382e-02 2.49466021e-02 2.50228037e-02 2.50989418e-02 + 2.51750157e-02 2.52510241e-02 2.53269662e-02 2.54028410e-02 2.54786474e-02 + 2.55543844e-02 2.56300512e-02 2.57056467e-02 2.57811699e-02 2.58566198e-02 + 2.59319956e-02 2.60072962e-02 2.60825207e-02 2.61576682e-02 2.62327376e-02 + 2.63077281e-02 2.63826386e-02 2.64574684e-02 2.65322164e-02 2.66068817e-02 + 2.66814634e-02 2.67559606e-02 2.68303724e-02 2.69046978e-02 2.69789360e-02 + 2.70530861e-02 2.71271471e-02 2.72011182e-02 2.72749985e-02 2.73487872e-02 + 2.74224833e-02 2.74960859e-02 2.75695943e-02 2.76430075e-02 2.77163247e-02 + 2.77895451e-02 2.78626678e-02 2.79356919e-02 2.80086167e-02 2.80814412e-02 + 2.81541648e-02 2.82267864e-02 2.82993055e-02 2.83717210e-02 2.84440323e-02 + 2.85162385e-02 2.85883388e-02 2.86603324e-02 2.87322186e-02 2.88039966e-02 + 2.88756656e-02 2.89472248e-02 2.90186734e-02 2.90900108e-02 2.91612361e-02 + 2.92323486e-02 2.93033476e-02 2.93742322e-02 2.94450019e-02 2.95156558e-02 + 2.95861933e-02 2.96566136e-02 2.97269159e-02 2.97970997e-02 2.98671642e-02 + 2.99371087e-02 3.00069325e-02 3.00766349e-02 3.01462153e-02 3.02156729e-02 + 3.02850071e-02 3.03542173e-02 3.04233028e-02 3.04922629e-02 3.05610970e-02 + 3.06298044e-02 3.06983846e-02 3.07668368e-02 3.08351604e-02 3.09033549e-02 + 3.09714197e-02 3.10393540e-02 3.11071573e-02 3.11748290e-02 3.12423686e-02 + 3.13097754e-02 3.13770488e-02 3.14441883e-02 3.15111934e-02 3.15780633e-02 + 3.16447977e-02 3.17113958e-02 3.17778573e-02 3.18441815e-02 3.19103679e-02 + 3.19764160e-02 3.20423252e-02 3.21080951e-02 3.21737250e-02 3.22392146e-02 + 3.23045633e-02 3.23697706e-02 3.24348361e-02 3.24997591e-02 3.25645394e-02 + 3.26291763e-02 3.26936694e-02 3.27580183e-02 3.28222224e-02 3.28862814e-02 + 3.29501948e-02 3.30139622e-02 3.30775831e-02 3.31410570e-02 3.32043837e-02 + 3.32675626e-02 3.33305933e-02 3.33934755e-02 3.34562087e-02 3.35187925e-02 + 3.35812266e-02 3.36435106e-02 3.37056440e-02 3.37676266e-02 3.38294579e-02 + 3.38911376e-02 3.39526653e-02 3.40140407e-02 3.40752635e-02 3.41363332e-02 + 3.41972496e-02 3.42580124e-02 3.43186212e-02 3.43790756e-02 3.44393755e-02 + 3.44995205e-02 3.45595102e-02 3.46193444e-02 3.46790229e-02 3.47385452e-02 + 3.47979112e-02 3.48571206e-02 3.49161731e-02 3.49750684e-02 3.50338063e-02 + 3.50923866e-02 3.51508090e-02 3.52090732e-02 3.52671790e-02 3.53251263e-02 + 3.53829147e-02 3.54405441e-02 3.54980142e-02 3.55553249e-02 3.56124759e-02 + 3.56694670e-02 3.57262982e-02 3.57829691e-02 3.58394796e-02 3.58958295e-02 + 3.59520187e-02 3.60080469e-02 3.60639141e-02 3.61196201e-02 3.61751647e-02 + 3.62305479e-02 3.62857693e-02 3.63408291e-02 3.63957269e-02 3.64504627e-02 + 3.65050364e-02 3.65594478e-02 3.66136969e-02 3.66677836e-02 3.67217077e-02 + 3.67754692e-02 3.68290680e-02 3.68825040e-02 3.69357771e-02 3.69888874e-02 + 3.70418346e-02 3.70946188e-02 3.71472399e-02 3.71996978e-02 3.72519925e-02 + 3.73041241e-02 3.73560923e-02 3.74078973e-02 3.74595390e-02 3.75110173e-02 + 3.75623323e-02 3.76134840e-02 3.76644723e-02 3.77152973e-02 3.77659589e-02 + 3.78164572e-02 3.78667922e-02 3.79169639e-02 3.79669723e-02 3.80168175e-02 + 3.80664996e-02 3.81160184e-02 3.81653742e-02 3.82145669e-02 3.82635966e-02 + 3.83124633e-02 3.83611672e-02 3.84097083e-02 3.84580867e-02 3.85063023e-02 + 3.85543555e-02 3.86022461e-02 3.86499744e-02 3.86975403e-02 3.87449441e-02 + 3.87921858e-02 3.88392655e-02 3.88861833e-02 3.89329394e-02 3.89795339e-02 + 3.90259669e-02 3.90722385e-02 3.91183489e-02 3.91642983e-02 3.92100867e-02 + 3.92557143e-02 3.93011813e-02 3.93464879e-02 3.93916341e-02 3.94366202e-02 + 3.94814463e-02 3.95261127e-02 3.95706194e-02 3.96149667e-02 3.96591547e-02 + 3.97031837e-02 3.97470539e-02 3.97907654e-02 3.98343184e-02 3.98777132e-02 + 3.99209500e-02 3.99640290e-02 4.00069503e-02 4.00497143e-02 4.00923212e-02 + 4.01347712e-02 4.01770645e-02 4.02192013e-02 4.02611820e-02 4.03030067e-02 + 4.03446757e-02 4.03861893e-02 4.04275477e-02 4.04687512e-02 4.05098001e-02 + 4.05506945e-02 4.05914349e-02 4.06320214e-02 4.06724544e-02 4.07127341e-02 + 4.07528608e-02 4.07928348e-02 4.08326564e-02 4.08723259e-02 4.09118437e-02 + 4.09512099e-02 4.09904249e-02 4.10294891e-02 4.10684027e-02 4.11071660e-02 + 4.11457795e-02 4.11842433e-02 4.12225579e-02 4.12607235e-02 4.12987405e-02 + 4.13366093e-02 4.13743301e-02 4.14119033e-02 4.14493293e-02 4.14866084e-02 + 4.15237410e-02 4.15607274e-02 4.15975680e-02 4.16342631e-02 4.16708131e-02 + 4.17072184e-02 4.17434793e-02 4.17795963e-02 4.18155696e-02 4.18513997e-02 + 4.18870870e-02 4.19226318e-02 4.19580345e-02 4.19932955e-02 4.20284153e-02 + 4.20633941e-02 4.20982324e-02 4.21329307e-02 4.21674892e-02 4.22019085e-02 + 4.22361889e-02 4.22703308e-02 4.23043346e-02 4.23382008e-02 4.23719298e-02 + 4.24055220e-02 4.24389778e-02 4.24722977e-02 4.25054820e-02 4.25385312e-02 + 4.25714458e-02 4.26042261e-02 4.26368727e-02 4.26693859e-02 4.27017662e-02 + 4.27340140e-02 4.27661298e-02 4.27981141e-02 4.28299672e-02 4.28616896e-02 + 4.28932819e-02 4.29247444e-02 4.29560775e-02 4.29872819e-02 4.30183578e-02 + 4.30493059e-02 4.30801265e-02 4.31108201e-02 4.31413873e-02 4.31718284e-02 + 4.32021439e-02 4.32323343e-02 4.32624002e-02 4.32923419e-02 4.33221599e-02 + 4.33518548e-02 4.33814270e-02 4.34108770e-02 4.34402053e-02 4.34694124e-02 + 4.34984988e-02 4.35274649e-02 4.35563113e-02 4.35850384e-02 4.36136467e-02 + 4.36421369e-02 4.36705092e-02 4.36987643e-02 4.37269027e-02 4.37549248e-02 + 4.37828312e-02 4.38106223e-02 4.38382987e-02 4.38658609e-02 4.38933094e-02 + 4.39206447e-02 4.39478673e-02 4.39749777e-02 4.40019765e-02 4.40288641e-02 + 4.40556412e-02 4.40823081e-02 4.41088654e-02 4.41353137e-02 4.41616534e-02 + 4.41878851e-02 4.42140094e-02 4.42400266e-02 4.42659374e-02 4.42917423e-02 + 4.43174418e-02 4.43430364e-02 4.43685267e-02 4.43939132e-02 4.44191965e-02 + 4.44443770e-02 4.44694552e-02 4.44944318e-02 4.45193073e-02 4.45440821e-02 + 4.45687569e-02 4.45933322e-02 4.46178084e-02 4.46421862e-02 4.46664660e-02 + 4.46906485e-02 4.47147341e-02 4.47387234e-02 4.47626169e-02 4.47864152e-02 + 4.48101188e-02 4.48337283e-02 4.48572441e-02 4.48806669e-02 4.49039972e-02 + 4.49272354e-02 4.49503823e-02 4.49734382e-02 4.49964038e-02 4.50192796e-02 + 4.50420661e-02 4.50647640e-02 4.50873736e-02 4.51098956e-02 4.51323305e-02 + 4.51546789e-02 4.51769413e-02 4.51991182e-02 4.52212103e-02 4.52432180e-02 + 4.52651419e-02 4.52869825e-02 4.53087404e-02 4.53304161e-02 4.53520102e-02 + 4.53735232e-02 4.53949557e-02 4.54163082e-02 4.54375812e-02 4.54587753e-02 + 4.54798911e-02 4.55009291e-02 4.55218898e-02 4.55427738e-02 4.55635817e-02 + 4.55843139e-02 4.56049710e-02 4.56255536e-02 4.56460622e-02 4.56664973e-02 + 4.56868595e-02 4.57071494e-02 4.57273674e-02 4.57475141e-02 4.57675901e-02 + 4.57875959e-02 4.58075321e-02 4.58273991e-02 4.58471976e-02 4.58669280e-02 + 4.58865909e-02 4.59061869e-02 4.59257165e-02 4.59451801e-02 4.59645785e-02 + 4.59839120e-02 4.60031812e-02 4.60223867e-02 4.60415291e-02 4.60606087e-02 + 4.60796262e-02 4.60985821e-02 4.61174770e-02 4.61363113e-02 4.61550856e-02 + 4.61738005e-02 4.61924564e-02 4.62110539e-02 4.62295935e-02 4.62480757e-02 + 4.62665012e-02 4.62848703e-02 4.63031836e-02 4.63214417e-02 4.63396451e-02 + 4.63577942e-02 4.63758897e-02 4.63939320e-02 4.64119217e-02 4.64298592e-02 + 4.64477452e-02 4.64655800e-02 4.64833643e-02 4.65010985e-02 4.65187832e-02 + 4.65364189e-02 4.65540060e-02 4.65715452e-02 4.65890368e-02 4.66064815e-02 + 4.66238797e-02 4.66412319e-02 4.66585387e-02 4.66758005e-02 4.66930179e-02 + 4.67101913e-02 4.67273213e-02 4.67444084e-02 4.67614530e-02 4.67784556e-02 + 4.67954169e-02 4.68123371e-02 4.68292170e-02 4.68460568e-02 4.68628572e-02 + 4.68796187e-02 4.68963416e-02 4.69130266e-02 4.69296740e-02 4.69462844e-02 + 4.69628583e-02 4.69793962e-02 4.69958985e-02 4.70123657e-02 4.70287983e-02 + 4.70451968e-02 4.70615616e-02 4.70778933e-02 4.70941923e-02 4.71104590e-02 + 4.71266940e-02 4.71428977e-02 4.71590707e-02 4.71752133e-02 4.71913260e-02 + 4.72074093e-02 4.72234637e-02 4.72394895e-02 4.72554874e-02 4.72714577e-02 + 4.72874010e-02 4.73033175e-02 4.73192079e-02 4.73350726e-02 4.73509120e-02 + 4.73667265e-02 4.73825167e-02 4.73982829e-02 4.74140257e-02 4.74297454e-02 + 4.74454425e-02 4.74611175e-02 4.74767708e-02 4.74924027e-02 4.75080139e-02 + 4.75236046e-02 4.75391754e-02 4.75547266e-02 4.75702588e-02 4.75857722e-02 + 4.76012674e-02 4.76167448e-02 4.76322048e-02 4.76476478e-02 4.76630743e-02 + 4.76784846e-02 4.76938792e-02 4.77092586e-02 4.77246230e-02 4.77399730e-02 + 4.77553089e-02 4.77706311e-02 4.77859401e-02 4.78012363e-02 4.78165201e-02 + 4.78317918e-02 4.78470519e-02 4.78623007e-02 4.78775388e-02 4.78927664e-02 + 4.79079840e-02 4.79231919e-02 4.79383906e-02 4.79535804e-02 4.79687617e-02 + 4.79839349e-02 4.79991005e-02 4.80142587e-02 4.80294099e-02 4.80445546e-02 + 4.80596931e-02 4.80748258e-02 4.80899530e-02 4.81050752e-02 4.81201927e-02 + 4.81353058e-02 4.81504150e-02 4.81655206e-02 4.81806229e-02 4.81957224e-02 + 4.82108194e-02 4.82259141e-02 4.82410071e-02 4.82560987e-02 4.82711891e-02 + 4.82862788e-02 4.83013681e-02 4.83164573e-02 4.83315468e-02 4.83466369e-02 + 4.83617281e-02 4.83768205e-02 4.83919146e-02 4.84070107e-02 4.84221091e-02 + 4.84372101e-02 4.84523141e-02 4.84674214e-02 4.84825324e-02 4.84976473e-02 + 4.85127665e-02 4.85278903e-02 4.85430190e-02 4.85581530e-02 4.85732925e-02 + 4.85884379e-02 4.86035894e-02 4.86187475e-02 4.86339123e-02 4.86490843e-02 + 4.86642636e-02 4.86794506e-02 4.86946457e-02 4.87098490e-02 4.87250610e-02 + 4.87402818e-02 4.87555118e-02 4.87707513e-02 4.87860006e-02 4.88012599e-02 + 4.88165295e-02 4.88318098e-02 4.88471010e-02 4.88624033e-02 4.88777171e-02 + 4.88930427e-02 4.89083802e-02 4.89237301e-02 4.89390924e-02 4.89544676e-02 + 4.89698559e-02 4.89852575e-02 4.90006728e-02 4.90161019e-02 4.90315451e-02 + 4.90470027e-02 4.90624750e-02 4.90779621e-02 4.90934644e-02 4.91089821e-02 + 4.91245154e-02 4.91400646e-02 4.91556299e-02 4.91712116e-02 4.91868099e-02 + 4.92024251e-02 4.92180573e-02 4.92337069e-02 4.92493740e-02 4.92650589e-02 + 4.92807617e-02 4.92964829e-02 4.93122225e-02 4.93279807e-02 4.93437579e-02 + 4.93595542e-02 4.93753698e-02 4.93912050e-02 4.94070600e-02 4.94229349e-02 + 4.94388300e-02 4.94547455e-02 4.94706817e-02 4.94866386e-02 4.95026165e-02 + 4.95186157e-02 4.95346362e-02 4.95506784e-02 4.95667423e-02 4.95828283e-02 + 4.95989364e-02 4.96150669e-02 4.96312200e-02 4.96473958e-02 4.96635945e-02 + 4.96798164e-02 4.96960615e-02 4.97123302e-02 4.97286224e-02 4.97449385e-02 + 4.97612786e-02 4.97776428e-02 4.97940314e-02 4.98104445e-02 4.98268822e-02 + 4.98433448e-02 4.98598324e-02 4.98763451e-02 4.98928831e-02 4.99094466e-02 + 4.99260357e-02 4.99426506e-02 4.99592915e-02 4.99759584e-02 4.99926515e-02 + 5.00093710e-02 5.00261170e-02 5.00428897e-02 5.00596891e-02 5.00765155e-02 + 5.00933690e-02 5.01102496e-02 5.01271576e-02 5.01440931e-02 5.01610562e-02 + 5.01780470e-02 5.01950657e-02 5.02121123e-02 5.02291871e-02 5.02462901e-02 + 5.02634214e-02 5.02805812e-02 5.02977695e-02 5.03149866e-02 5.03322324e-02 + 5.03495072e-02 5.03668110e-02 5.03841439e-02 5.04015061e-02 5.04188976e-02 + 5.04363186e-02 5.04537691e-02 5.04712492e-02 5.04887591e-02 5.05062988e-02 + 5.05238684e-02 5.05414681e-02 5.05590979e-02 5.05767579e-02 5.05944482e-02 + 5.06121688e-02 5.06299199e-02 5.06477016e-02 5.06655138e-02 5.06833568e-02 + 5.07012306e-02 5.07191352e-02 5.07370707e-02 5.07550372e-02 5.07730348e-02 + 5.07910636e-02 5.08091236e-02 5.08272148e-02 5.08453374e-02 5.08634913e-02 + 5.08816768e-02 5.08998937e-02 5.09181423e-02 5.09364225e-02 5.09547343e-02 + 5.09730780e-02 5.09914534e-02 5.10098606e-02 5.10282998e-02 5.10467709e-02 + 5.10652740e-02 5.10838092e-02 5.11023764e-02 5.11209757e-02 5.11396072e-02 + 5.11582709e-02 5.11769668e-02 5.11956950e-02 5.12144555e-02 5.12332483e-02 + 5.12520735e-02 5.12709311e-02 5.12898211e-02 5.13087435e-02 5.13276985e-02 + 5.13466859e-02 5.13657058e-02 5.13847583e-02 5.14038433e-02 5.14229609e-02 + 5.14421111e-02 5.14612939e-02 5.14805093e-02 5.14997573e-02 5.15190380e-02 + 5.15383513e-02 5.15576973e-02 5.15770759e-02 5.15964872e-02 5.16159312e-02 + 5.16354078e-02 5.16549172e-02 5.16744591e-02 5.16940338e-02 5.17136411e-02 + 5.17332811e-02 5.17529537e-02 5.17726590e-02 5.17923969e-02 5.18121674e-02 + 5.18319706e-02 5.18518063e-02 5.18716747e-02 5.18915756e-02 5.19115090e-02 + 5.19314750e-02 5.19514735e-02 5.19715045e-02 5.19915680e-02 5.20116639e-02 + 5.20317923e-02 5.20519530e-02 5.20721462e-02 5.20923716e-02 5.21126294e-02 + 5.21329194e-02 5.21532417e-02 5.21735963e-02 5.21939830e-02 5.22144018e-02 + 5.22348528e-02 5.22553358e-02 5.22758508e-02 5.22963979e-02 5.23169769e-02 + 5.23375877e-02 5.23582305e-02 5.23789050e-02 5.23996114e-02 5.24203494e-02 + 5.24411191e-02 5.24619205e-02 5.24827534e-02 5.25036178e-02 5.25245136e-02 + 5.25454409e-02 5.25663995e-02 5.25873895e-02 5.26084106e-02 5.26294630e-02 + 5.26505464e-02 5.26716609e-02 5.26928064e-02 5.27139828e-02 5.27351901e-02 + 5.27564281e-02 5.27776969e-02 5.27989964e-02 5.28203265e-02 5.28416870e-02 + 5.28630781e-02 5.28844995e-02 5.29059512e-02 5.29274331e-02 5.29489452e-02 + 5.29704874e-02 5.29920595e-02 5.30136616e-02 5.30352936e-02 5.30569552e-02 + 5.30786466e-02 5.31003676e-02 5.31221181e-02 5.31438980e-02 5.31657073e-02 + 5.31875458e-02 5.32094135e-02 5.32313103e-02 5.32532361e-02 5.32751908e-02 + 5.32971743e-02 5.33191865e-02 5.33412273e-02 5.33632967e-02 5.33853945e-02 + 5.34075207e-02 5.34296751e-02 5.34518577e-02 5.34740683e-02 5.34963069e-02 + 5.35185733e-02 5.35408675e-02 5.35631893e-02 5.35855387e-02 5.36079155e-02 + 5.36303197e-02 5.36527511e-02 5.36752097e-02 5.36976952e-02 5.37202077e-02 + 5.37427470e-02 5.37653129e-02 5.37879055e-02 5.38105245e-02 5.38331699e-02 + 5.38558416e-02 5.38785394e-02 5.39012632e-02 5.39240130e-02 5.39467885e-02 + 5.39695897e-02 5.39924165e-02 5.40152687e-02 5.40381462e-02 5.40610490e-02 + 5.40839768e-02 5.41069296e-02 5.41299073e-02 5.41529097e-02 5.41759366e-02 + 5.41989881e-02 5.42220639e-02 5.42451639e-02 5.42682880e-02 5.42914361e-02 + 5.43146081e-02 5.43378038e-02 5.43610230e-02 5.43842658e-02 5.44075318e-02 + 5.44308211e-02 5.44541334e-02 5.44774687e-02 5.45008268e-02 5.45242076e-02 + 5.45476109e-02 5.45710366e-02 5.45944846e-02 5.46179548e-02 5.46414469e-02 + 5.46649609e-02 5.46884967e-02 5.47120540e-02 5.47356328e-02 5.47592329e-02 + 5.47828542e-02 5.48064965e-02 5.48301598e-02 5.48538438e-02 5.48775484e-02 + 5.49012734e-02 5.49250188e-02 5.49487844e-02 5.49725701e-02 5.49963756e-02 + 5.50202009e-02 5.50440459e-02 5.50679102e-02 5.50917939e-02 5.51156968e-02 + 5.51396187e-02 5.51635595e-02 5.51875190e-02 5.52114972e-02 5.52354937e-02 + 5.52595085e-02 5.52835415e-02 5.53075925e-02 5.53316613e-02 5.53557477e-02 + 5.53798517e-02 5.54039731e-02 5.54281118e-02 5.54522675e-02 5.54764401e-02 + 5.55006295e-02 5.55248356e-02 5.55490581e-02 5.55732969e-02 5.55975518e-02 + 5.56218228e-02 5.56461096e-02 5.56704121e-02 5.56947301e-02 5.57190635e-02 + 5.57434121e-02 5.57677758e-02 5.57921544e-02 5.58165477e-02 5.58409556e-02 + 5.58653780e-02 5.58898146e-02 5.59142653e-02 5.59387300e-02 5.59632085e-02 + 5.59877006e-02 5.60122062e-02 5.60367251e-02 5.60612571e-02 5.60858022e-02 + 5.61103600e-02 5.61349306e-02 5.61595136e-02 5.61841090e-02 5.62087165e-02 + 5.62333361e-02 5.62579675e-02 5.62826106e-02 5.63072653e-02 5.63319313e-02 + 5.63566085e-02 5.63812967e-02 5.64059958e-02 5.64307057e-02 5.64554260e-02 + 5.64801568e-02 5.65048977e-02 5.65296487e-02 5.65544096e-02 5.65791802e-02 + 5.66039604e-02 5.66287499e-02 5.66535486e-02 5.66783565e-02 5.67031732e-02 + 5.67279986e-02 5.67528326e-02 5.67776749e-02 5.68025255e-02 5.68273841e-02 + 5.68522507e-02 5.68771249e-02 5.69020067e-02 5.69268959e-02 5.69517923e-02 + 5.69766957e-02 5.70016060e-02 5.70265231e-02 5.70514466e-02 5.70763766e-02 + 5.71013128e-02 5.71262550e-02 5.71512031e-02 5.71761569e-02 5.72011162e-02 + 5.72260809e-02 5.72510508e-02 5.72760258e-02 5.73010056e-02 5.73259901e-02 + 0.00000000e+00 2.43488551e-08 9.70348995e-08 2.17517882e-07 3.85258271e-07 + 5.99717271e-07 8.60356837e-07 1.16663970e-06 1.51802935e-06 1.91399012e-06 + 2.35398713e-06 2.83748633e-06 3.36395454e-06 3.93285942e-06 4.54366955e-06 + 5.19585437e-06 5.88888425e-06 6.62223049e-06 7.39536534e-06 8.20776200e-06 + 9.05889466e-06 9.94823850e-06 1.08752697e-05 1.18394655e-05 1.28403042e-05 + 1.38772651e-05 1.49498285e-05 1.60574760e-05 1.71996902e-05 1.83759547e-05 + 1.95857545e-05 2.08285756e-05 2.21039051e-05 2.34112314e-05 2.47500441e-05 + 2.61198339e-05 2.75200930e-05 2.89503146e-05 3.04099932e-05 3.18986247e-05 + 3.34157062e-05 3.49607362e-05 3.65332143e-05 3.81326418e-05 3.97585210e-05 + 4.14103560e-05 4.30876518e-05 4.47899152e-05 4.65166542e-05 4.82673784e-05 + 5.00415988e-05 5.18388277e-05 5.36585791e-05 5.55003684e-05 5.73637126e-05 + 5.92481302e-05 6.11531411e-05 6.30782670e-05 6.50230311e-05 6.69869581e-05 + 6.89695743e-05 7.09704078e-05 7.29889882e-05 7.50248468e-05 7.70775165e-05 + 7.91465320e-05 8.12314297e-05 8.33317475e-05 8.54470252e-05 8.75768045e-05 + 8.97206285e-05 9.18780424e-05 9.40485929e-05 9.62318288e-05 9.84273005e-05 + 1.00634560e-04 1.02853162e-04 1.05082663e-04 1.07322619e-04 1.09572592e-04 + 1.11832142e-04 1.14100833e-04 1.16378232e-04 1.18663904e-04 1.20957421e-04 + 1.23258352e-04 1.25566272e-04 1.27880756e-04 1.30201382e-04 1.32527729e-04 + 1.34859378e-04 1.37195914e-04 1.39536921e-04 1.41881988e-04 1.44230704e-04 + 1.46582662e-04 1.48937455e-04 1.51294680e-04 1.53653936e-04 1.56014822e-04 + 1.58376942e-04 1.60739900e-04 1.63103305e-04 1.65466764e-04 1.67829891e-04 + 1.70192298e-04 1.72553602e-04 1.74913422e-04 1.77271378e-04 1.79627094e-04 + 1.81980193e-04 1.84330306e-04 1.86677060e-04 1.89020090e-04 1.91359029e-04 + 1.93693515e-04 1.96023187e-04 1.98347688e-04 2.00666661e-04 2.02979754e-04 + 2.05286615e-04 2.07586897e-04 2.09880254e-04 2.12166341e-04 2.14444820e-04 + 2.16715350e-04 2.18977597e-04 2.21231227e-04 2.23475910e-04 2.25711316e-04 + 2.27937121e-04 2.30153002e-04 2.32358637e-04 2.34553710e-04 2.36737905e-04 + 2.38910909e-04 2.41072412e-04 2.43222107e-04 2.45359690e-04 2.47484858e-04 + 2.49597311e-04 2.51696755e-04 2.53782893e-04 2.55855436e-04 2.57914094e-04 + 2.59958582e-04 2.61988617e-04 2.64003919e-04 2.66004209e-04 2.67989214e-04 + 2.69958661e-04 2.71912281e-04 2.73849808e-04 2.75770978e-04 2.77675531e-04 + 2.79563208e-04 2.81433755e-04 2.83286920e-04 2.85122453e-04 2.86940107e-04 + 2.88739640e-04 2.90520810e-04 2.92283380e-04 2.94027115e-04 2.95751782e-04 + 2.97457154e-04 2.99143004e-04 3.00809109e-04 3.02455248e-04 3.04081205e-04 + 3.05686765e-04 3.07271718e-04 3.08835854e-04 3.10378969e-04 3.11900861e-04 + 3.13401329e-04 3.14880179e-04 3.16337217e-04 3.17772253e-04 3.19185100e-04 + 3.20575574e-04 3.21943493e-04 3.23288681e-04 3.24610962e-04 3.25910165e-04 + 3.27186120e-04 3.28438664e-04 3.29667633e-04 3.30872868e-04 3.32054212e-04 + 3.33211514e-04 3.34344623e-04 3.35453392e-04 3.36537678e-04 3.37597341e-04 + 3.38632243e-04 3.39642250e-04 3.40627231e-04 3.41587060e-04 3.42521610e-04 + 3.43430761e-04 3.44314395e-04 3.45172397e-04 3.46004655e-04 3.46811061e-04 + 3.47591509e-04 3.48345899e-04 3.49074130e-04 3.49776107e-04 3.50451738e-04 + 3.51100935e-04 3.51723611e-04 3.52319684e-04 3.52889075e-04 3.53431707e-04 + 3.53947509e-04 3.54436410e-04 3.54898345e-04 3.55333251e-04 3.55741068e-04 + 3.56121740e-04 3.56475215e-04 3.56801442e-04 3.57100376e-04 3.57371973e-04 + 3.57616194e-04 3.57833003e-04 3.58022366e-04 3.58184254e-04 3.58318641e-04 + 3.58425503e-04 3.58504822e-04 3.58556580e-04 3.58580765e-04 3.58577366e-04 + 3.58546379e-04 3.58487800e-04 3.58401629e-04 3.58287871e-04 3.58146532e-04 + 3.57977623e-04 3.57781159e-04 3.57557155e-04 3.57305633e-04 3.57026618e-04 + 3.56720135e-04 3.56386217e-04 3.56024897e-04 3.55636213e-04 3.55220206e-04 + 3.54776920e-04 3.54306402e-04 3.53808705e-04 3.53283882e-04 3.52731991e-04 + 3.52153093e-04 3.51547253e-04 3.50914539e-04 3.50255023e-04 3.49568779e-04 + 3.48855885e-04 3.48116423e-04 3.47350478e-04 3.46558138e-04 3.45739494e-04 + 3.44894643e-04 3.44023683e-04 3.43126715e-04 3.42203844e-04 3.41255180e-04 + 3.40280834e-04 3.39280922e-04 3.38255563e-04 3.37204879e-04 3.36128995e-04 + 3.35028040e-04 3.33902147e-04 3.32751452e-04 3.31576093e-04 3.30376213e-04 + 3.29151958e-04 3.27903477e-04 3.26630923e-04 3.25334452e-04 3.24014222e-04 + 3.22670397e-04 3.21303142e-04 3.19912628e-04 3.18499026e-04 3.17062513e-04 + 3.15603268e-04 3.14121475e-04 3.12617318e-04 3.11090989e-04 3.09542678e-04 + 3.07972584e-04 3.06380904e-04 3.04767842e-04 3.03133605e-04 3.01478400e-04 + 2.99802442e-04 2.98105947e-04 2.96389132e-04 2.94652222e-04 2.92895443e-04 + 2.91119023e-04 2.89323194e-04 2.87508194e-04 2.85674261e-04 2.83821637e-04 + 2.81950568e-04 2.80061304e-04 2.78154095e-04 2.76229198e-04 2.74286872e-04 + 2.72327377e-04 2.70350981e-04 2.68357950e-04 2.66348556e-04 2.64323075e-04 + 2.62281784e-04 2.60224965e-04 2.58152902e-04 2.56065883e-04 2.53964199e-04 + 2.51848144e-04 2.49718015e-04 2.47574112e-04 2.45416740e-04 2.43246204e-04 + 2.41062815e-04 2.38866886e-04 2.36658733e-04 2.34438675e-04 2.32207035e-04 + 2.29964138e-04 2.27710313e-04 2.25445892e-04 2.23171209e-04 2.20886603e-04 + 2.18592414e-04 2.16288987e-04 2.13976669e-04 2.11655809e-04 2.09326762e-04 + 2.06989883e-04 2.04645532e-04 2.02294071e-04 1.99935866e-04 1.97571284e-04 + 1.95200698e-04 1.92824481e-04 1.90443011e-04 1.88056668e-04 1.85665835e-04 + 1.83270899e-04 1.80872249e-04 1.78470276e-04 1.76065376e-04 1.73657947e-04 + 1.71248388e-04 1.68837105e-04 1.66424504e-04 1.64010993e-04 1.61596986e-04 + 1.59182897e-04 1.56769145e-04 1.54356150e-04 1.51944336e-04 1.49534129e-04 + 1.47125959e-04 1.44720257e-04 1.42317459e-04 1.39918002e-04 1.37522326e-04 + 1.35130875e-04 1.32744094e-04 1.30362432e-04 1.27986339e-04 1.25616271e-04 + 1.23252683e-04 1.20896036e-04 1.18546790e-04 1.16205411e-04 1.13872366e-04 + 1.11548124e-04 1.09233158e-04 1.06927944e-04 1.04632960e-04 1.02348684e-04 + 1.00075601e-04 9.78141952e-05 9.55649553e-05 9.33283715e-05 9.11049369e-05 + 8.88951470e-05 8.66994998e-05 8.45184959e-05 8.23526381e-05 8.02024320e-05 + 7.80683853e-05 7.59510083e-05 7.38508139e-05 7.17683170e-05 6.97040351e-05 + 6.76584882e-05 6.56321985e-05 6.36256905e-05 6.16394911e-05 5.96741296e-05 + 5.77301375e-05 5.58080486e-05 5.39083991e-05 5.20317273e-05 5.01785738e-05 + 4.83494815e-05 4.65449954e-05 4.47656629e-05 4.30120334e-05 4.12846585e-05 + 3.95840921e-05 3.79108901e-05 3.62656107e-05 3.46488140e-05 3.30610623e-05 + 3.15029201e-05 2.99749539e-05 2.84777321e-05 2.70118254e-05 2.55778064e-05 + 2.41762497e-05 2.28077320e-05 2.14728317e-05 2.01721296e-05 1.89062081e-05 + 1.76756517e-05 1.64810468e-05 1.53229816e-05 1.42020464e-05 1.31188332e-05 + 1.20739359e-05 1.10679502e-05 1.01014737e-05 9.17510585e-06 8.28944774e-06 + 7.44510235e-06 6.64267440e-06 5.88277033e-06 5.16599834e-06 4.49296832e-06 + 3.86429185e-06 3.28058222e-06 2.74245435e-06 2.25052482e-06 1.80541184e-06 + 1.40773522e-06 1.05811638e-06 7.57178299e-07 5.05545545e-07 3.03844209e-07 + 1.52701918e-07 5.27478064e-08 4.61250386e-09 8.92811584e-09 6.63282070e-08 + 1.77447784e-07 3.42923278e-07 5.63392527e-07 8.39494760e-07 1.17187058e-06 + 1.56116194e-06 2.00801213e-06 2.51306577e-06 3.07696878e-06 3.70036834e-06 + 4.38391295e-06 5.12825230e-06 5.93403735e-06 6.80192027e-06 7.73255440e-06 + 8.72659429e-06 9.78469564e-06 1.09075153e-05 1.20957112e-05 1.33499424e-05 + 1.46708691e-05 1.60591526e-05 1.75154550e-05 1.90404398e-05 2.06347711e-05 + 2.22991145e-05 2.40341361e-05 2.58405033e-05 2.77188842e-05 2.96699480e-05 + 3.16943647e-05 3.37928053e-05 3.59659416e-05 3.82144461e-05 4.05389924e-05 + 4.29402547e-05 4.54189082e-05 4.79756288e-05 5.06110929e-05 5.33259781e-05 + 5.61209623e-05 5.89967243e-05 6.19539437e-05 6.49933005e-05 6.81154755e-05 + 7.13211502e-05 7.46110064e-05 7.79857269e-05 8.14459948e-05 8.49924937e-05 + 8.86259080e-05 9.23469224e-05 9.61562222e-05 1.00054493e-04 1.04042421e-04 + 1.08120693e-04 1.12289996e-04 1.16551018e-04 1.20904446e-04 1.25350968e-04 + 1.29891273e-04 1.34526050e-04 1.39255988e-04 1.44081776e-04 1.49004104e-04 + 1.54023663e-04 1.59141141e-04 1.64357231e-04 1.69672621e-04 1.75088004e-04 + 1.80604069e-04 1.86221509e-04 1.91941014e-04 1.97763274e-04 2.03688983e-04 + 2.09718831e-04 2.15853509e-04 2.22093709e-04 2.28440122e-04 2.34893440e-04 + 2.41454354e-04 2.48123555e-04 2.54901735e-04 2.61789585e-04 2.68787796e-04 + 2.75897058e-04 2.83118063e-04 2.90451500e-04 2.97898061e-04 3.05458435e-04 + 3.13133313e-04 3.20923384e-04 3.28829337e-04 3.36851861e-04 3.44991646e-04 + 3.53249380e-04 3.61625750e-04 3.70121445e-04 3.78737152e-04 3.87473558e-04 + 3.96331350e-04 4.05311213e-04 4.14413833e-04 4.23639896e-04 4.32990086e-04 + 4.42465087e-04 4.52065583e-04 4.61792257e-04 4.71645791e-04 4.81626868e-04 + 4.91736167e-04 5.01974371e-04 5.12342159e-04 5.22840211e-04 5.33469204e-04 + 5.44229818e-04 5.55122728e-04 5.66148612e-04 5.77308146e-04 5.88602003e-04 + 6.00030859e-04 6.11595386e-04 6.23296257e-04 6.35134144e-04 6.47109717e-04 + 6.59223646e-04 6.71476600e-04 6.83869248e-04 6.96402254e-04 7.09076287e-04 + 7.21892011e-04 7.34850090e-04 7.47951188e-04 7.61195965e-04 7.74585083e-04 + 7.88119202e-04 8.01798981e-04 8.15625077e-04 8.29598146e-04 8.43718845e-04 + 8.57987827e-04 8.72405745e-04 8.86973251e-04 9.01690996e-04 9.16559628e-04 + 9.31579797e-04 9.46752148e-04 9.62077327e-04 9.77555978e-04 9.93188745e-04 + 1.00897627e-03 1.02491919e-03 1.04101814e-03 1.05727377e-03 1.07368671e-03 + 1.09025759e-03 1.10698704e-03 1.12387570e-03 1.14092420e-03 1.15813317e-03 + 1.17550323e-03 1.19303501e-03 1.21072913e-03 1.22858621e-03 1.24660688e-03 + 1.26479176e-03 1.28314145e-03 1.30165659e-03 1.32033777e-03 1.33918562e-03 + 1.35820075e-03 1.37738376e-03 1.39673526e-03 1.41625586e-03 1.43594616e-03 + 1.45580676e-03 1.47583827e-03 1.49604128e-03 1.51641638e-03 1.53696418e-03 + 1.55768526e-03 1.57858022e-03 1.59964965e-03 1.62089413e-03 1.64231425e-03 + 1.66391059e-03 1.68568373e-03 1.70763425e-03 1.72976274e-03 1.75206976e-03 + 1.77455589e-03 1.79722169e-03 1.82006775e-03 1.84309462e-03 1.86630287e-03 + 1.88969307e-03 1.91326577e-03 1.93702154e-03 1.96096092e-03 1.98508448e-03 + 2.00939277e-03 2.03388633e-03 2.05856572e-03 2.08343148e-03 2.10848415e-03 + 2.13372427e-03 2.15915239e-03 2.18476904e-03 2.21057475e-03 2.23657006e-03 + 2.26275549e-03 2.28913158e-03 2.31569884e-03 2.34245780e-03 2.36940899e-03 + 2.39655291e-03 2.42389008e-03 2.45142102e-03 2.47914624e-03 2.50706624e-03 + 2.53518153e-03 2.56349261e-03 2.59199999e-03 2.62070415e-03 2.64960561e-03 + 2.67870484e-03 2.70800234e-03 2.73749860e-03 2.76719410e-03 2.79708933e-03 + 2.82718476e-03 2.85748088e-03 2.88797815e-03 2.91867705e-03 2.94957805e-03 + 2.98068162e-03 3.01198821e-03 3.04349830e-03 3.07521234e-03 3.10713078e-03 + 3.13925408e-03 3.17158269e-03 3.20411705e-03 3.23685762e-03 3.26980484e-03 + 3.30295913e-03 3.33632095e-03 3.36989071e-03 3.40366887e-03 3.43765583e-03 + 3.47185204e-03 3.50625790e-03 3.54087384e-03 3.57570028e-03 3.61073762e-03 + 3.64598629e-03 3.68144668e-03 3.71711921e-03 3.75300427e-03 3.78910226e-03 + 3.82541359e-03 3.86193864e-03 3.89867779e-03 3.93563145e-03 3.97279999e-03 + 4.01018380e-03 4.04778325e-03 4.08559871e-03 4.12363057e-03 4.16187918e-03 + 4.20034492e-03 4.23902814e-03 4.27792921e-03 4.31704848e-03 4.35638630e-03 + 4.39594303e-03 4.43571902e-03 4.47571460e-03 4.51593011e-03 4.55636591e-03 + 4.59702231e-03 4.63789965e-03 4.67899827e-03 4.72031847e-03 4.76186059e-03 + 4.80362495e-03 4.84561186e-03 4.88782162e-03 4.93025456e-03 4.97291097e-03 + 5.01579116e-03 5.05889543e-03 5.10222407e-03 5.14577738e-03 5.18955564e-03 + 5.23355914e-03 5.27778816e-03 5.32224299e-03 5.36692389e-03 5.41183115e-03 + 5.45696503e-03 5.50232579e-03 5.54791370e-03 5.59372902e-03 5.63977201e-03 + 5.68604291e-03 5.73254198e-03 5.77926946e-03 5.82622559e-03 5.87341062e-03 + 5.92082478e-03 5.96846830e-03 6.01634140e-03 6.06444433e-03 6.11277729e-03 + 6.16134051e-03 6.21013420e-03 6.25915857e-03 6.30841384e-03 6.35790020e-03 + 6.40761786e-03 6.45756701e-03 6.50774785e-03 6.55816058e-03 6.60880537e-03 + 6.65968241e-03 6.71079189e-03 6.76213398e-03 6.81370884e-03 6.86551667e-03 + 6.91755761e-03 6.96983183e-03 7.02233950e-03 7.07508076e-03 7.12805578e-03 + 7.18126469e-03 7.23470765e-03 7.28838479e-03 7.34229626e-03 7.39644219e-03 + 7.45082271e-03 7.50543795e-03 7.56028803e-03 7.61537307e-03 7.67069319e-03 + 7.72624851e-03 7.78203912e-03 7.83806515e-03 7.89432669e-03 7.95082384e-03 + 8.00755670e-03 8.06452535e-03 8.12172989e-03 8.17917041e-03 8.23684697e-03 + 8.29475967e-03 8.35290857e-03 8.41129374e-03 8.46991526e-03 8.52877318e-03 + 8.58786757e-03 8.64719848e-03 8.70676596e-03 8.76657006e-03 8.82661083e-03 + 8.88688830e-03 8.94740253e-03 9.00815353e-03 9.06914135e-03 9.13036600e-03 + 9.19182752e-03 9.25352592e-03 9.31546122e-03 9.37763343e-03 9.44004256e-03 + 9.50268862e-03 9.56557160e-03 9.62869151e-03 9.69204834e-03 9.75564209e-03 + 9.81947273e-03 9.88354026e-03 9.94784464e-03 1.00123859e-02 1.00771639e-02 + 1.01421787e-02 1.02074303e-02 1.02729186e-02 1.03386435e-02 1.04046051e-02 + 1.04708033e-02 1.05372379e-02 1.06039091e-02 1.06708166e-02 1.07379605e-02 + 1.08053407e-02 1.08729570e-02 1.09408095e-02 1.10088981e-02 1.10772226e-02 + 1.11457830e-02 1.12145793e-02 1.12836112e-02 1.13528787e-02 1.14223818e-02 + 1.14921203e-02 1.15620941e-02 1.16323030e-02 1.17027471e-02 1.17734261e-02 + 1.18443400e-02 1.19154886e-02 1.19868718e-02 1.20584894e-02 1.21303414e-02 + 1.22024276e-02 1.22747478e-02 1.23473019e-02 1.24200897e-02 1.24931112e-02 + 1.25663661e-02 1.26398543e-02 1.27135756e-02 1.27875299e-02 1.28617170e-02 + 1.29361367e-02 1.30107888e-02 1.30856731e-02 1.31607896e-02 1.32361379e-02 + 1.33117179e-02 1.33875294e-02 1.34635722e-02 1.35398461e-02 1.36163509e-02 + 1.36930863e-02 1.37700523e-02 1.38472485e-02 1.39246747e-02 1.40023308e-02 + 1.40802164e-02 1.41583314e-02 1.42366755e-02 1.43152485e-02 1.43940502e-02 + 1.44730803e-02 1.45523385e-02 1.46318247e-02 1.47115385e-02 1.47914797e-02 + 1.48716480e-02 1.49520432e-02 1.50326651e-02 1.51135133e-02 1.51945875e-02 + 1.52758876e-02 1.53574131e-02 1.54391639e-02 1.55211396e-02 1.56033400e-02 + 1.56857648e-02 1.57684136e-02 1.58512861e-02 1.59343821e-02 1.60177013e-02 + 1.61012433e-02 1.61850079e-02 1.62689946e-02 1.63532033e-02 1.64376335e-02 + 1.65222849e-02 1.66071573e-02 1.66922502e-02 1.67775634e-02 1.68630965e-02 + 1.69488492e-02 1.70348211e-02 1.71210118e-02 1.72074211e-02 1.72940485e-02 + 1.73808937e-02 1.74679564e-02 1.75552362e-02 1.76427326e-02 1.77304454e-02 + 1.78183742e-02 1.79065185e-02 1.79948781e-02 1.80834525e-02 1.81722413e-02 + 1.82612442e-02 1.83504607e-02 1.84398905e-02 1.85295331e-02 1.86193882e-02 + 1.87094554e-02 1.87997342e-02 1.88902243e-02 1.89809251e-02 1.90718364e-02 + 1.91629577e-02 1.92542885e-02 1.93458285e-02 1.94375771e-02 1.95295341e-02 + 1.96216989e-02 1.97140711e-02 1.98066502e-02 1.98994359e-02 1.99924277e-02 + 2.00856251e-02 2.01790276e-02 2.02726349e-02 2.03664465e-02 2.04604618e-02 + 2.05546805e-02 2.06491020e-02 2.07437260e-02 2.08385519e-02 2.09335792e-02 + 2.10288076e-02 2.11242364e-02 2.12198652e-02 2.13156936e-02 2.14117210e-02 + 2.15079470e-02 2.16043710e-02 2.17009926e-02 2.17978112e-02 2.18948264e-02 + 2.19920377e-02 2.20894445e-02 2.21870464e-02 2.22848427e-02 2.23828331e-02 + 2.24810170e-02 2.25793938e-02 2.26779631e-02 2.27767243e-02 2.28756769e-02 + 2.29748204e-02 2.30741542e-02 2.31736778e-02 2.32733907e-02 2.33732923e-02 + 2.34733820e-02 2.35736594e-02 2.36741238e-02 2.37747748e-02 2.38756118e-02 + 2.39766342e-02 2.40778414e-02 2.41792330e-02 2.42808082e-02 2.43825667e-02 + 2.44845078e-02 2.45866309e-02 2.46889354e-02 2.47914209e-02 2.48940867e-02 + 2.49969322e-02 2.50999568e-02 2.52031600e-02 2.53065412e-02 2.54100998e-02 + 2.55138352e-02 2.56177468e-02 2.57218340e-02 2.58260963e-02 2.59305329e-02 + 2.60351434e-02 2.61399271e-02 2.62448834e-02 2.63500117e-02 2.64553114e-02 + 2.65607818e-02 2.66664224e-02 2.67722326e-02 2.68782117e-02 2.69843591e-02 + 2.70906742e-02 2.71971563e-02 2.73038049e-02 2.74106192e-02 2.75175988e-02 + 2.76247429e-02 2.77320509e-02 2.78395221e-02 2.79471560e-02 2.80549519e-02 + 2.81629091e-02 2.82710270e-02 2.83793050e-02 2.84877423e-02 2.85963385e-02 + 2.87050927e-02 2.88140044e-02 2.89230729e-02 2.90322975e-02 2.91416776e-02 + 2.92512125e-02 2.93609016e-02 2.94707442e-02 2.95807396e-02 2.96908871e-02 + 2.98011861e-02 2.99116360e-02 3.00222360e-02 3.01329854e-02 3.02438837e-02 + 3.03549300e-02 3.04661238e-02 3.05774644e-02 3.06889510e-02 3.08005830e-02 + 3.09123597e-02 3.10242804e-02 3.11363445e-02 3.12485511e-02 3.13608997e-02 + 3.14733896e-02 3.15860200e-02 3.16987903e-02 3.18116997e-02 3.19247476e-02 + 3.20379332e-02 3.21512559e-02 3.22647149e-02 3.23783096e-02 3.24920392e-02 + 3.26059030e-02 3.27199004e-02 3.28340306e-02 3.29482928e-02 3.30626865e-02 + 3.31772108e-02 3.32918651e-02 3.34066486e-02 3.35215607e-02 3.36366005e-02 + 3.37517674e-02 3.38670607e-02 3.39824796e-02 3.40980234e-02 3.42136915e-02 + 3.43294829e-02 3.44453971e-02 3.45614333e-02 3.46775908e-02 3.47938688e-02 + 3.49102666e-02 3.50267835e-02 3.51434187e-02 3.52601716e-02 3.53770413e-02 + 3.54940271e-02 3.56111283e-02 3.57283442e-02 3.58456740e-02 3.59631170e-02 + 3.60806724e-02 3.61983395e-02 3.63161175e-02 3.64340058e-02 3.65520035e-02 + 3.66701099e-02 3.67883242e-02 3.69066458e-02 3.70250738e-02 3.71436076e-02 + 3.72622463e-02 3.73809892e-02 3.74998356e-02 3.76187846e-02 3.77378357e-02 + 3.78569879e-02 3.79762406e-02 3.80955929e-02 3.82150442e-02 3.83345937e-02 + 3.84542406e-02 3.85739841e-02 3.86938235e-02 3.88137581e-02 3.89337870e-02 + 3.90539096e-02 3.91741250e-02 3.92944326e-02 3.94148314e-02 3.95353208e-02 + 3.96559000e-02 3.97765683e-02 3.98973248e-02 4.00181689e-02 4.01390997e-02 + 4.02601165e-02 4.03812185e-02 4.05024049e-02 4.06236750e-02 4.07450281e-02 + 4.08664633e-02 4.09879798e-02 4.11095770e-02 4.12312540e-02 4.13530101e-02 + 4.14748445e-02 4.15967564e-02 4.17187451e-02 4.18408097e-02 4.19629496e-02 + 4.20851640e-02 4.22074520e-02 4.23298129e-02 4.24522460e-02 4.25747504e-02 + 4.26973254e-02 4.28199703e-02 4.29426842e-02 4.30654664e-02 4.31883161e-02 + 4.33112325e-02 4.34342149e-02 4.35572624e-02 4.36803744e-02 4.38035500e-02 + 4.39267885e-02 4.40500891e-02 4.41734511e-02 4.42968735e-02 4.44203558e-02 + 4.45438971e-02 4.46674966e-02 4.47911535e-02 4.49148672e-02 4.50386368e-02 + 4.51624615e-02 4.52863406e-02 4.54102733e-02 4.55342588e-02 4.56582964e-02 + 4.57823853e-02 4.59065247e-02 4.60307139e-02 4.61549520e-02 4.62792383e-02 + 4.64035721e-02 4.65279525e-02 4.66523788e-02 4.67768502e-02 4.69013660e-02 + 4.70259254e-02 4.71505276e-02 4.72751719e-02 4.73998574e-02 4.75245834e-02 + 4.76493492e-02 4.77741540e-02 4.78989970e-02 4.80238774e-02 4.81487945e-02 + 4.82737475e-02 4.83987357e-02 4.85237582e-02 4.86488144e-02 4.87739034e-02 + 4.88990245e-02 4.90241770e-02 4.91493600e-02 4.92745728e-02 4.93998147e-02 + 4.95250848e-02 4.96503825e-02 4.97757070e-02 4.99010574e-02 5.00264331e-02 + 5.01518333e-02 5.02772572e-02 5.04027041e-02 5.05281733e-02 5.06536638e-02 + 5.07791751e-02 5.09047064e-02 5.10302569e-02 5.11558258e-02 5.12814124e-02 + 5.14070160e-02 5.15326357e-02 5.16582709e-02 5.17839208e-02 5.19095847e-02 + 5.20352618e-02 5.21609513e-02 5.22866525e-02 5.24123647e-02 5.25380871e-02 + 5.26638190e-02 5.27895597e-02 5.29153083e-02 5.30410642e-02 5.31668266e-02 + 5.32925947e-02 5.34183680e-02 5.35441455e-02 5.36699265e-02 5.37957104e-02 + 5.39214964e-02 5.40472838e-02 5.41730717e-02 5.42988596e-02 5.44246466e-02 + 5.45504321e-02 5.46762153e-02 5.48019954e-02 5.49277718e-02 5.50535437e-02 + 5.51793104e-02 5.53050712e-02 5.54308254e-02 5.55565722e-02 5.56823109e-02 + 5.58080407e-02 5.59337611e-02 5.60594712e-02 5.61851704e-02 5.63108578e-02 + 5.64365329e-02 5.65621949e-02 5.66878431e-02 5.68134767e-02 5.69390952e-02 + 5.70646976e-02 5.71902835e-02 5.73158519e-02 5.74414024e-02 5.75669340e-02 + 5.76924462e-02 5.78179382e-02 5.79434094e-02 5.80688590e-02 5.81942863e-02 + 5.83196907e-02 5.84450715e-02 5.85704278e-02 5.86957592e-02 5.88210648e-02 + 5.89463440e-02 5.90715962e-02 5.91968205e-02 5.93220163e-02 5.94471830e-02 + 5.95723199e-02 5.96974262e-02 5.98225013e-02 5.99475445e-02 6.00725552e-02 + 6.01975327e-02 6.03224762e-02 6.04473851e-02 6.05722588e-02 6.06970966e-02 + 6.08218978e-02 6.09466617e-02 6.10713877e-02 6.11960751e-02 6.13207233e-02 + 6.14453315e-02 6.15698992e-02 6.16944256e-02 6.18189101e-02 6.19433521e-02 + 6.20677509e-02 6.21921059e-02 6.23164163e-02 6.24406816e-02 6.25649011e-02 + 6.26890741e-02 6.28132001e-02 6.29372783e-02 6.30613081e-02 6.31852889e-02 + 6.33092201e-02 6.34331010e-02 6.35569309e-02 6.36807093e-02 6.38044355e-02 + 6.39281089e-02 6.40517288e-02 6.41752947e-02 6.42988058e-02 6.44222616e-02 + 6.45456615e-02 6.46690048e-02 6.47922909e-02 6.49155192e-02 6.50386891e-02 + 6.51617999e-02 6.52848511e-02 6.54078420e-02 6.55307721e-02 6.56536406e-02 + 6.57764471e-02 6.58991910e-02 6.60218715e-02 6.61444881e-02 6.62670403e-02 + 6.63895274e-02 6.65119488e-02 6.66343039e-02 6.67565921e-02 6.68788129e-02 + 6.70009657e-02 6.71230499e-02 6.72450648e-02 6.73670099e-02 6.74888847e-02 + 6.76106885e-02 6.77324208e-02 6.78540809e-02 6.79756684e-02 6.80971826e-02 + 6.82186230e-02 6.83399891e-02 6.84612801e-02 6.85824957e-02 6.87036351e-02 + 6.88246979e-02 6.89456835e-02 6.90665913e-02 6.91874209e-02 6.93081715e-02 + 6.94288427e-02 6.95494340e-02 6.96699447e-02 6.97903744e-02 6.99107224e-02 + 7.00309883e-02 7.01511715e-02 7.02712715e-02 7.03912876e-02 7.05112195e-02 + 7.06310666e-02 7.07508283e-02 7.08705040e-02 7.09900934e-02 7.11095958e-02 + 7.12290107e-02 7.13483377e-02 7.14675761e-02 7.15867255e-02 7.17057853e-02 + 7.18247551e-02 7.19436343e-02 7.20624225e-02 7.21811190e-02 7.22997234e-02 + 7.24182353e-02 7.25366540e-02 7.26549791e-02 7.27732102e-02 7.28913466e-02 + 7.30093879e-02 7.31273337e-02 7.32451834e-02 7.33629365e-02 7.34805926e-02 + 7.35981511e-02 7.37156116e-02 7.38329737e-02 7.39502367e-02 7.40674004e-02 + 7.41844640e-02 7.43014273e-02 7.44182898e-02 7.45350509e-02 7.46517101e-02 + 7.47682672e-02 7.48847215e-02 7.50010726e-02 7.51173201e-02 7.52334634e-02 + 7.53495022e-02 7.54654360e-02 7.55812644e-02 7.56969868e-02 7.58126029e-02 + 7.59281122e-02 7.60435142e-02 7.61588086e-02 7.62739948e-02 7.63890725e-02 + 7.65040412e-02 7.66189005e-02 7.67336500e-02 7.68482891e-02 7.69628176e-02 + 7.70772349e-02 7.71915407e-02 7.73057346e-02 7.74198160e-02 7.75337846e-02 + 7.76476400e-02 7.77613818e-02 7.78750096e-02 7.79885229e-02 7.81019214e-02 + 7.82152046e-02 7.83283722e-02 7.84414237e-02 7.85543587e-02 7.86671770e-02 + 7.87798779e-02 7.88924613e-02 7.90049266e-02 7.91172736e-02 7.92295017e-02 + 7.93416107e-02 7.94536001e-02 7.95654696e-02 7.96772188e-02 7.97888473e-02 + 7.99003547e-02 8.00117407e-02 8.01230050e-02 8.02341470e-02 8.03451666e-02 + 8.04560632e-02 8.05668367e-02 8.06774865e-02 8.07880123e-02 8.08984138e-02 + 8.10086907e-02 8.11188426e-02 8.12288690e-02 8.13387698e-02 8.14485445e-02 + 8.15581929e-02 8.16677145e-02 8.17771090e-02 8.18863761e-02 8.19955155e-02 + 8.21045268e-02 8.22134097e-02 8.23221639e-02 8.24307890e-02 8.25392847e-02 + 8.26476508e-02 8.27558868e-02 8.28639925e-02 8.29719676e-02 8.30798116e-02 + 8.31875245e-02 8.32951057e-02 8.34025550e-02 8.35098722e-02 8.36170568e-02 + 8.37241087e-02 8.38310274e-02 8.39378128e-02 8.40444645e-02 8.41509822e-02 + 8.42573656e-02 8.43636145e-02 8.44697286e-02 8.45757075e-02 8.46815510e-02 + 8.47872588e-02 8.48928306e-02 8.49982662e-02 8.51035653e-02 8.52087276e-02 + 8.53137528e-02 8.54186407e-02 8.55233910e-02 8.56280034e-02 8.57324777e-02 + 8.58368136e-02 8.59410109e-02 8.60450693e-02 8.61489885e-02 8.62527683e-02 + 8.63564085e-02 8.64599088e-02 8.65632689e-02 8.66664887e-02 8.67695678e-02 + 8.68725060e-02 8.69753031e-02 8.70779589e-02 8.71804730e-02 8.72828454e-02 + 8.73850757e-02 8.74871638e-02 8.75891093e-02 8.76909121e-02 8.77925720e-02 + 8.78940887e-02 8.79954620e-02 8.80966917e-02 8.81977776e-02 8.82987195e-02 + 8.83995171e-02 8.85001703e-02 8.86006788e-02 8.87010425e-02 8.88012610e-02 + 8.89013344e-02 8.90012622e-02 8.91010444e-02 8.92006808e-02 8.93001711e-02 + 8.93995152e-02 8.94987128e-02 8.95977638e-02 8.96966680e-02 8.97954252e-02 + 8.98940353e-02 8.99924980e-02 9.00908132e-02 9.01889806e-02 9.02870002e-02 + 9.03848718e-02 9.04825951e-02 9.05801701e-02 9.06775965e-02 9.07748742e-02 + 9.08720029e-02 9.09689827e-02 9.10658132e-02 9.11624944e-02 9.12590261e-02 + 9.13554081e-02 9.14516403e-02 9.15477225e-02 9.16436547e-02 9.17394365e-02 + 9.18350679e-02 9.19305488e-02 9.20258790e-02 9.21210584e-02 9.22160868e-02 + 9.23109641e-02 9.24056902e-02 9.25002649e-02 9.25946881e-02 9.26889596e-02 + 9.27830795e-02 9.28770474e-02 9.29708634e-02 9.30645273e-02 9.31580389e-02 + 9.32513981e-02 9.33446049e-02 9.34376591e-02 9.35305607e-02 9.36233094e-02 + 9.37159052e-02 9.38083480e-02 9.39006377e-02 9.39927741e-02 9.40847572e-02 + 9.41765869e-02 9.42682631e-02 9.43597856e-02 9.44511545e-02 9.45423695e-02 + 9.46334306e-02 9.47243378e-02 9.48150908e-02 9.49056898e-02 9.49961344e-02 + 9.50864248e-02 9.51765607e-02 9.52665422e-02 9.53563691e-02 9.54460414e-02 + 9.55355589e-02 9.56249217e-02 9.57141296e-02 9.58031826e-02 9.58920806e-02 + 9.59808236e-02 9.60694114e-02 9.61578440e-02 9.62461215e-02 9.63342436e-02 + 9.64222103e-02 9.65100217e-02 9.65976776e-02 9.66851779e-02 9.67725227e-02 + 9.68597119e-02 9.69467454e-02 9.70336232e-02 9.71203453e-02 9.72069115e-02 + 9.72933219e-02 9.73795765e-02 9.74656751e-02 9.75516178e-02 9.76374044e-02 + 9.77230351e-02 9.78085097e-02 9.78938282e-02 9.79789907e-02 9.80639969e-02 + 9.81488471e-02 9.82335410e-02 9.83180787e-02 9.84024602e-02 9.84866854e-02 + 9.85707544e-02 9.86546671e-02 9.87384235e-02 9.88220236e-02 9.89054674e-02 + 9.89887548e-02 9.90718859e-02 9.91548606e-02 9.92376790e-02 9.93203411e-02 + 9.94028467e-02 9.94851960e-02 9.95673890e-02 9.96494256e-02 9.97313058e-02 + 9.98130297e-02 9.98945972e-02 9.99760084e-02 1.00057263e-01 1.00138362e-01 + 1.00219304e-01 1.00300090e-01 1.00380720e-01 1.00461193e-01 1.00541510e-01 + 1.00621671e-01 1.00701676e-01 1.00781524e-01 1.00861217e-01 1.00940753e-01 + 1.01020133e-01 1.01099357e-01 1.01178425e-01 1.01257337e-01 1.01336093e-01 + 1.01414693e-01 1.01493137e-01 1.01571425e-01 1.01649557e-01 1.01727534e-01 + 1.01805354e-01 1.01883019e-01 1.01960528e-01 1.02037882e-01 1.02115080e-01 + 1.02192122e-01 1.02269009e-01 1.02345741e-01 1.02422317e-01 1.02498737e-01 + 1.02575002e-01 1.02651112e-01 1.02727067e-01 1.02802867e-01 1.02878511e-01 + 1.02954001e-01 1.03029335e-01 1.03104515e-01 1.03179540e-01 1.03254410e-01 + 1.03329125e-01 1.03403685e-01 1.03478091e-01 1.03552343e-01 1.03626440e-01 + 1.03700382e-01 1.03774170e-01 1.03847804e-01 1.03921284e-01 1.03994610e-01 + 1.04067782e-01 1.04140799e-01 1.04213663e-01 1.04286373e-01 1.04358930e-01 + 1.04431332e-01 1.04503582e-01 1.04575677e-01 1.04647620e-01 1.04719409e-01 + 1.04791045e-01 1.04862528e-01 1.04933857e-01 1.05005034e-01 1.05076058e-01 + 1.05146930e-01 1.05217648e-01 1.05288214e-01 1.05358628e-01 1.05428889e-01 + 1.05498998e-01 1.05568955e-01 1.05638760e-01 1.05708413e-01 1.05777914e-01 + 1.05847263e-01 1.05916461e-01 1.05985507e-01 1.06054401e-01 1.06123145e-01 + 1.06191737e-01 1.06260178e-01 1.06328468e-01 1.06396607e-01 1.06464595e-01 + 1.06532433e-01 1.06600120e-01 1.06667657e-01 1.06735043e-01 1.06802280e-01 + 1.06869366e-01 1.06936302e-01 1.07003089e-01 1.07069725e-01 1.07136212e-01 + 1.07202550e-01 1.07268738e-01 1.07334777e-01 1.07400667e-01 1.07466408e-01 + 1.07532001e-01 1.07597444e-01 1.07662739e-01 1.07727885e-01 1.07792884e-01 + 1.07857734e-01 1.07922436e-01 1.07986990e-01 1.08051396e-01 1.08115655e-01 + 1.08179766e-01 1.08243729e-01 1.08307546e-01 1.08371215e-01 1.08434738e-01 + 1.08498114e-01 1.08561343e-01 1.08624425e-01 1.08687361e-01 1.08750151e-01 + 1.08812795e-01 1.08875293e-01 1.08937645e-01 1.08999851e-01 1.09061912e-01 + 1.09123828e-01 1.09185598e-01 1.09247224e-01 1.09308704e-01 1.09370040e-01 + 1.09431231e-01 1.09492278e-01 1.09553180e-01 1.09613938e-01 1.09674553e-01 + 1.09735023e-01 1.09795350e-01 1.09855533e-01 1.09915573e-01 1.09975470e-01 + 1.10035224e-01 1.10094835e-01 1.10154303e-01 1.10213628e-01 1.10272812e-01 + 1.10331853e-01 1.10390752e-01 1.10449509e-01 1.10508124e-01 1.10566598e-01 + 1.10624931e-01 1.10683122e-01 1.10741172e-01 1.10799082e-01 1.10856850e-01 + 1.10914478e-01 1.10971966e-01 1.11029314e-01 1.11086521e-01 1.11143589e-01 + 1.11200517e-01 1.11257305e-01 1.11313955e-01 1.11370465e-01 1.11426836e-01 + 1.11483068e-01 1.11539162e-01 1.11595117e-01 1.11650934e-01 1.11706612e-01 + 1.11762153e-01 1.11817557e-01 1.11872822e-01 1.11927951e-01 1.11982942e-01 + 1.12037796e-01 1.12092513e-01 1.12147094e-01 1.12201538e-01 1.12255846e-01 + 1.12310017e-01 1.12364053e-01 1.12417954e-01 1.12471718e-01 1.12525348e-01 + 1.12578842e-01 1.12632201e-01 1.12685425e-01 1.12738515e-01 1.12791471e-01 + 1.12844292e-01 1.12896979e-01 1.12949532e-01 1.13001952e-01 1.13054238e-01 + 1.13106391e-01 1.13158411e-01 1.13210299e-01 1.13262053e-01 1.13313675e-01 + 1.13365165e-01 1.13416522e-01 1.13467748e-01 1.13518842e-01 1.13569804e-01 + 1.13620635e-01 1.13671335e-01 1.13721904e-01 1.13772343e-01 1.13822651e-01 + 1.13872828e-01 1.13922876e-01 1.13972793e-01 1.14022581e-01 1.14072239e-01 + 1.14121768e-01 1.14171168e-01 1.14220439e-01 1.14269581e-01 1.14318594e-01 + 1.14367480e-01 1.14416237e-01 1.14464866e-01 1.14513368e-01 1.14561742e-01 + 1.14609988e-01 1.14658108e-01 1.14706101e-01 1.14753967e-01 1.14801706e-01 + 1.14849320e-01 1.14896807e-01 1.14944168e-01 1.14991404e-01 1.15038514e-01 + 1.15085499e-01 1.15132359e-01 1.15179094e-01 1.15225704e-01 1.15272190e-01 + 1.15318552e-01 1.15364790e-01 1.15410904e-01 1.15456894e-01 1.15502761e-01 + 1.15548505e-01 1.15594126e-01 1.15639624e-01 1.15685000e-01 1.15730253e-01 + 1.15775384e-01 1.15820394e-01 1.15865281e-01 1.15910047e-01 1.15954692e-01 + 1.15999216e-01 1.16043619e-01 1.16087901e-01 1.16132063e-01 1.16176105e-01 + 1.16220027e-01 1.16263828e-01 1.16307511e-01 1.16351074e-01 1.16394518e-01 + 1.16437842e-01 1.16481049e-01 1.16524136e-01 1.16567106e-01 1.16609957e-01 + 1.16652690e-01 1.16695306e-01 1.16737805e-01 1.16780186e-01 1.16822450e-01 + 1.16864597e-01 1.16906628e-01 1.16948543e-01 1.16990341e-01 1.17032023e-01 + 1.17073590e-01 1.17115041e-01 1.17156377e-01 1.17197598e-01 1.17238704e-01 + 1.17279696e-01 1.17320573e-01 1.17361336e-01 1.17401984e-01 1.17442520e-01 + 1.17482941e-01 1.17523249e-01 1.17563445e-01 1.17603527e-01 1.17643497e-01 + 1.17683354e-01 1.17723099e-01 1.17762732e-01 1.17802253e-01 1.17841662e-01 + 1.17880961e-01 1.17920148e-01 1.17959224e-01 1.17998189e-01 1.18037044e-01 + 0.00000000e+00 7.21069637e-07 2.87393769e-06 6.44313909e-06 1.14132704e-05 + 1.77689899e-05 2.54950175e-05 3.45761350e-05 4.49971859e-05 5.67430756e-05 + 6.97987714e-05 8.41493023e-05 9.97797595e-05 1.16675296e-04 1.34821127e-04 + 1.54202530e-04 1.74804843e-04 1.96613468e-04 2.19613868e-04 2.43791569e-04 + 2.69132158e-04 2.95621286e-04 3.23244664e-04 3.51988067e-04 3.81837331e-04 + 4.12778355e-04 4.44797101e-04 4.77879591e-04 5.12011912e-04 5.47180212e-04 + 5.83370701e-04 6.20569653e-04 6.58763402e-04 6.97938346e-04 7.38080946e-04 + 7.79177724e-04 8.21215265e-04 8.64180217e-04 9.08059290e-04 9.52839256e-04 + 9.98506949e-04 1.04504927e-03 1.09245317e-03 1.14070568e-03 1.18979389e-03 + 1.23970493e-03 1.29042603e-03 1.34194444e-03 1.39424752e-03 1.44732264e-03 + 1.50115728e-03 1.55573896e-03 1.61105526e-03 1.66709382e-03 1.72384237e-03 + 1.78128866e-03 1.83942054e-03 1.89822590e-03 1.95769270e-03 2.01780896e-03 + 2.07856277e-03 2.13994227e-03 2.20193567e-03 2.26453125e-03 2.32771733e-03 + 2.39148232e-03 2.45581467e-03 2.52070290e-03 2.58613560e-03 2.65210140e-03 + 2.71858902e-03 2.78558723e-03 2.85308485e-03 2.92107079e-03 2.98953399e-03 + 3.05846348e-03 3.12784833e-03 3.19767769e-03 3.26794076e-03 3.33862681e-03 + 3.40972516e-03 3.48122520e-03 3.55311639e-03 3.62538824e-03 3.69803032e-03 + 3.77103228e-03 3.84438380e-03 3.91807465e-03 3.99209466e-03 4.06643370e-03 + 4.14108172e-03 4.21602872e-03 4.29126479e-03 4.36678003e-03 4.44256466e-03 + 4.51860891e-03 4.59490310e-03 4.67143761e-03 4.74820286e-03 4.82518937e-03 + 4.90238769e-03 4.97978843e-03 5.05738227e-03 5.13515997e-03 5.21311231e-03 + 5.29123016e-03 5.36950445e-03 5.44792616e-03 5.52648633e-03 5.60517607e-03 + 5.68398655e-03 5.76290899e-03 5.84193467e-03 5.92105496e-03 6.00026124e-03 + 6.07954500e-03 6.15889775e-03 6.23831109e-03 6.31777667e-03 6.39728618e-03 + 6.47683141e-03 6.55640417e-03 6.63599636e-03 6.71559991e-03 6.79520684e-03 + 6.87480922e-03 6.95439916e-03 7.03396886e-03 7.11351055e-03 7.19301654e-03 + 7.27247919e-03 7.35189093e-03 7.43124423e-03 7.51053163e-03 7.58974574e-03 + 7.66887920e-03 7.74792473e-03 7.82687511e-03 7.90572317e-03 7.98446180e-03 + 8.06308394e-03 8.14158262e-03 8.21995088e-03 8.29818186e-03 8.37626873e-03 + 8.45420474e-03 8.53198318e-03 8.60959741e-03 8.68704084e-03 8.76430693e-03 + 8.84138922e-03 8.91828129e-03 8.99497678e-03 9.07146939e-03 9.14775287e-03 + 9.22382104e-03 9.29966777e-03 9.37528698e-03 9.45067266e-03 9.52581884e-03 + 9.60071962e-03 9.67536915e-03 9.74976163e-03 9.82389135e-03 9.89775260e-03 + 9.97133977e-03 1.00446473e-02 1.01176696e-02 1.01904014e-02 1.02628371e-02 + 1.03349714e-02 1.04067991e-02 1.04783149e-02 1.05495136e-02 1.06203901e-02 + 1.06909393e-02 1.07611563e-02 1.08310359e-02 1.09005734e-02 1.09697639e-02 + 1.10386026e-02 1.11070846e-02 1.11752055e-02 1.12429604e-02 1.13103449e-02 + 1.13773543e-02 1.14439842e-02 1.15102303e-02 1.15760880e-02 1.16415531e-02 + 1.17066214e-02 1.17712886e-02 1.18355505e-02 1.18994031e-02 1.19628422e-02 + 1.20258640e-02 1.20884644e-02 1.21506395e-02 1.22123856e-02 1.22736987e-02 + 1.23345752e-02 1.23950113e-02 1.24550035e-02 1.25145481e-02 1.25736416e-02 + 1.26322805e-02 1.26904613e-02 1.27481808e-02 1.28054355e-02 1.28622221e-02 + 1.29185375e-02 1.29743784e-02 1.30297417e-02 1.30846244e-02 1.31390233e-02 + 1.31929355e-02 1.32463581e-02 1.32992881e-02 1.33517228e-02 1.34036593e-02 + 1.34550949e-02 1.35060269e-02 1.35564527e-02 1.36063696e-02 1.36557752e-02 + 1.37046669e-02 1.37530423e-02 1.38008989e-02 1.38482344e-02 1.38950466e-02 + 1.39413330e-02 1.39870916e-02 1.40323202e-02 1.40770166e-02 1.41211787e-02 + 1.41648046e-02 1.42078922e-02 1.42504396e-02 1.42924450e-02 1.43339064e-02 + 1.43748221e-02 1.44151903e-02 1.44550094e-02 1.44942776e-02 1.45329934e-02 + 1.45711551e-02 1.46087613e-02 1.46458104e-02 1.46823011e-02 1.47182318e-02 + 1.47536014e-02 1.47884084e-02 1.48226516e-02 1.48563299e-02 1.48894419e-02 + 1.49219866e-02 1.49539629e-02 1.49853697e-02 1.50162061e-02 1.50464710e-02 + 1.50761636e-02 1.51052830e-02 1.51338283e-02 1.51617988e-02 1.51891936e-02 + 1.52160122e-02 1.52422538e-02 1.52679177e-02 1.52930035e-02 1.53175105e-02 + 1.53414383e-02 1.53647864e-02 1.53875543e-02 1.54097417e-02 1.54313483e-02 + 1.54523737e-02 1.54728176e-02 1.54926799e-02 1.55119603e-02 1.55306587e-02 + 1.55487751e-02 1.55663092e-02 1.55832611e-02 1.55996309e-02 1.56154184e-02 + 1.56306239e-02 1.56452475e-02 1.56592892e-02 1.56727493e-02 1.56856281e-02 + 1.56979258e-02 1.57096426e-02 1.57207790e-02 1.57313354e-02 1.57413121e-02 + 1.57507095e-02 1.57595283e-02 1.57677688e-02 1.57754317e-02 1.57825176e-02 + 1.57890270e-02 1.57949607e-02 1.58003193e-02 1.58051036e-02 1.58093144e-02 + 1.58129524e-02 1.58160185e-02 1.58185135e-02 1.58204384e-02 1.58217941e-02 + 1.58225815e-02 1.58228017e-02 1.58224557e-02 1.58215446e-02 1.58200695e-02 + 1.58180314e-02 1.58154316e-02 1.58122713e-02 1.58085517e-02 1.58042740e-02 + 1.57994396e-02 1.57940497e-02 1.57881058e-02 1.57816092e-02 1.57745612e-02 + 1.57669635e-02 1.57588174e-02 1.57501244e-02 1.57408862e-02 1.57311041e-02 + 1.57207799e-02 1.57099152e-02 1.56985116e-02 1.56865708e-02 1.56740944e-02 + 1.56610844e-02 1.56475423e-02 1.56334700e-02 1.56188694e-02 1.56037422e-02 + 1.55880904e-02 1.55719159e-02 1.55552205e-02 1.55380063e-02 1.55202751e-02 + 1.55020292e-02 1.54832704e-02 1.54640008e-02 1.54442226e-02 1.54239378e-02 + 1.54031486e-02 1.53818571e-02 1.53600655e-02 1.53377761e-02 1.53149911e-02 + 1.52917128e-02 1.52679433e-02 1.52436851e-02 1.52189406e-02 1.51937119e-02 + 1.51680016e-02 1.51418120e-02 1.51151455e-02 1.50880047e-02 1.50603920e-02 + 1.50323098e-02 1.50037607e-02 1.49747473e-02 1.49452721e-02 1.49153377e-02 + 1.48849466e-02 1.48541016e-02 1.48228052e-02 1.47910602e-02 1.47588692e-02 + 1.47262349e-02 1.46931601e-02 1.46596475e-02 1.46256998e-02 1.45913200e-02 + 1.45565107e-02 1.45212748e-02 1.44856151e-02 1.44495346e-02 1.44130360e-02 + 1.43761224e-02 1.43387965e-02 1.43010615e-02 1.42629201e-02 1.42243754e-02 + 1.41854304e-02 1.41460881e-02 1.41063514e-02 1.40662236e-02 1.40257075e-02 + 1.39848063e-02 1.39435230e-02 1.39018609e-02 1.38598229e-02 1.38174123e-02 + 1.37746322e-02 1.37314857e-02 1.36879760e-02 1.36441064e-02 1.35998801e-02 + 1.35553002e-02 1.35103700e-02 1.34650928e-02 1.34194718e-02 1.33735104e-02 + 1.33272118e-02 1.32805793e-02 1.32336162e-02 1.31863260e-02 1.31387118e-02 + 1.30907772e-02 1.30425254e-02 1.29939598e-02 1.29450839e-02 1.28959010e-02 + 1.28464146e-02 1.27966281e-02 1.27465449e-02 1.26961685e-02 1.26455023e-02 + 1.25945499e-02 1.25433146e-02 1.24918000e-02 1.24400097e-02 1.23879470e-02 + 1.23356156e-02 1.22830189e-02 1.22301605e-02 1.21770439e-02 1.21236728e-02 + 1.20700506e-02 1.20161810e-02 1.19620674e-02 1.19077136e-02 1.18531231e-02 + 1.17982995e-02 1.17432464e-02 1.16879675e-02 1.16324664e-02 1.15767466e-02 + 1.15208119e-02 1.14646658e-02 1.14083121e-02 1.13517544e-02 1.12949964e-02 + 1.12380417e-02 1.11808940e-02 1.11235569e-02 1.10660343e-02 1.10083296e-02 + 1.09504468e-02 1.08923894e-02 1.08341611e-02 1.07757657e-02 1.07172069e-02 + 1.06584883e-02 1.05996138e-02 1.05405870e-02 1.04814116e-02 1.04220914e-02 + 1.03626301e-02 1.03030315e-02 1.02432992e-02 1.01834370e-02 1.01234487e-02 + 1.00633380e-02 1.00031086e-02 9.94276435e-03 9.88230889e-03 9.82174601e-03 + 9.76107946e-03 9.70031298e-03 9.63945032e-03 9.57849524e-03 9.51745148e-03 + 9.45632281e-03 9.39511296e-03 9.33382569e-03 9.27246474e-03 9.21103388e-03 + 9.14953684e-03 9.08797738e-03 9.02635924e-03 8.96468616e-03 8.90296189e-03 + 8.84119018e-03 8.77937476e-03 8.71751937e-03 8.65562775e-03 8.59370363e-03 + 8.53175075e-03 8.46977283e-03 8.40777359e-03 8.34575677e-03 8.28372608e-03 + 8.22168524e-03 8.15963796e-03 8.09758795e-03 8.03553892e-03 7.97349457e-03 + 7.91145859e-03 7.84943468e-03 7.78742653e-03 7.72543782e-03 7.66347224e-03 + 7.60153345e-03 7.53962513e-03 7.47775093e-03 7.41591453e-03 7.35411956e-03 + 7.29236969e-03 7.23066854e-03 7.16901976e-03 7.10742698e-03 7.04589381e-03 + 6.98442388e-03 6.92302079e-03 6.86168815e-03 6.80042955e-03 6.73924858e-03 + 6.67814882e-03 6.61713385e-03 6.55620723e-03 6.49537252e-03 6.43463328e-03 + 6.37399304e-03 6.31345533e-03 6.25302370e-03 6.19270165e-03 6.13249269e-03 + 6.07240032e-03 6.01242804e-03 5.95257933e-03 5.89285766e-03 5.83326649e-03 + 5.77380928e-03 5.71448947e-03 5.65531051e-03 5.59627581e-03 5.53738879e-03 + 5.47865285e-03 5.42007139e-03 5.36164780e-03 5.30338545e-03 5.24528770e-03 + 5.18735790e-03 5.12959940e-03 5.07201552e-03 5.01460958e-03 4.95738490e-03 + 4.90034477e-03 4.84349247e-03 4.78683128e-03 4.73036445e-03 4.67409524e-03 + 4.61802688e-03 4.56216259e-03 4.50650560e-03 4.45105909e-03 4.39582627e-03 + 4.34081029e-03 4.28601432e-03 4.23144152e-03 4.17709501e-03 4.12297792e-03 + 4.06909335e-03 4.01544441e-03 3.96203417e-03 3.90886570e-03 3.85594206e-03 + 3.80326629e-03 3.75084141e-03 3.69867044e-03 3.64675637e-03 3.59510219e-03 + 3.54371086e-03 3.49258535e-03 3.44172859e-03 3.39114350e-03 3.34083300e-03 + 3.29079998e-03 3.24104732e-03 3.19157789e-03 3.14239453e-03 3.09350009e-03 + 3.04489737e-03 2.99658919e-03 2.94857832e-03 2.90086754e-03 2.85345962e-03 + 2.80635727e-03 2.75956324e-03 2.71308022e-03 2.66691091e-03 2.62105798e-03 + 2.57552409e-03 2.53031188e-03 2.48542398e-03 2.44086299e-03 2.39663151e-03 + 2.35273210e-03 2.30916734e-03 2.26593975e-03 2.22305186e-03 2.18050618e-03 + 2.13830519e-03 2.09645137e-03 2.05494716e-03 2.01379501e-03 1.97299733e-03 + 1.93255653e-03 1.89247498e-03 1.85275505e-03 1.81339909e-03 1.77440942e-03 + 1.73578836e-03 1.69753820e-03 1.65966122e-03 1.62215965e-03 1.58503576e-03 + 1.54829175e-03 1.51192982e-03 1.47595216e-03 1.44036093e-03 1.40515827e-03 + 1.37034631e-03 1.33592716e-03 1.30190290e-03 1.26827560e-03 1.23504731e-03 + 1.20222006e-03 1.16979586e-03 1.13777671e-03 1.10616457e-03 1.07496140e-03 + 1.04416914e-03 1.01378970e-03 9.83824969e-04 9.54276828e-04 9.25147131e-04 + 8.96437715e-04 8.68150396e-04 8.40286972e-04 8.12849218e-04 7.85838891e-04 + 7.59257730e-04 7.33107451e-04 7.07389751e-04 6.82106308e-04 6.57258779e-04 + 6.32848801e-04 6.08877990e-04 5.85347945e-04 5.62260240e-04 5.39616433e-04 + 5.17418060e-04 4.95666636e-04 4.74363657e-04 4.53510597e-04 4.33108912e-04 + 4.13160036e-04 3.93665382e-04 3.74626344e-04 3.56044295e-04 3.37920586e-04 + 3.20256549e-04 3.03053496e-04 2.86312717e-04 2.70035481e-04 2.54223038e-04 + 2.38876617e-04 2.23997425e-04 2.09586650e-04 1.95645457e-04 1.82174994e-04 + 1.69176383e-04 1.56650731e-04 1.44599120e-04 1.33022613e-04 1.21922252e-04 + 1.11299058e-04 1.01154031e-04 9.14881514e-05 8.23023770e-05 7.35976459e-05 + 6.53748752e-05 5.76349612e-05 5.03787793e-05 4.36071839e-05 3.73210090e-05 + 3.15210675e-05 2.62081515e-05 2.13830322e-05 1.70464604e-05 1.31991656e-05 + 9.84185676e-06 6.97522210e-06 4.59992895e-06 2.71662394e-06 1.32593293e-06 + 4.28461042e-07 2.47926797e-08 1.15491538e-07 7.01100617e-07 1.78214224e-06 + 3.35911808e-06 5.43250917e-06 8.00277591e-06 1.10703581e-05 1.46356750e-05 + 1.86991254e-05 2.32610873e-05 2.83219184e-05 3.38819559e-05 3.99415166e-05 + 4.65008967e-05 5.35603723e-05 6.11201988e-05 6.91806116e-05 7.77418256e-05 + 8.68040355e-05 9.63674158e-05 1.06432121e-04 1.16998284e-04 1.28066021e-04 + 1.39635424e-04 1.51706568e-04 1.64279507e-04 1.77354274e-04 1.90930884e-04 + 2.05009331e-04 2.19589589e-04 2.34671614e-04 2.50255339e-04 2.66340680e-04 + 2.82927533e-04 3.00015773e-04 3.17605258e-04 3.35695825e-04 3.54287290e-04 + 3.73379453e-04 3.92972092e-04 4.13064968e-04 4.33657820e-04 4.54750370e-04 + 4.76342321e-04 4.98433355e-04 5.21023138e-04 5.44111315e-04 5.67697513e-04 + 5.91781339e-04 6.16362383e-04 6.41440216e-04 6.67014390e-04 6.93084439e-04 + 7.19649877e-04 7.46710203e-04 7.74264894e-04 8.02313411e-04 8.30855196e-04 + 8.59889675e-04 8.89416252e-04 9.19434318e-04 9.49943242e-04 9.80942378e-04 + 1.01243106e-03 1.04440861e-03 1.07687432e-03 1.10982748e-03 1.14326736e-03 + 1.17719320e-03 1.21160423e-03 1.24649967e-03 1.28187871e-03 1.31774054e-03 + 1.35408432e-03 1.39090920e-03 1.42821430e-03 1.46599875e-03 1.50426163e-03 + 1.54300203e-03 1.58221902e-03 1.62191164e-03 1.66207893e-03 1.70271991e-03 + 1.74383357e-03 1.78541889e-03 1.82747486e-03 1.87000043e-03 1.91299453e-03 + 1.95645609e-03 2.00038401e-03 2.04477720e-03 2.08963453e-03 2.13495485e-03 + 2.18073704e-03 2.22697990e-03 2.27368228e-03 2.32084296e-03 2.36846075e-03 + 2.41653443e-03 2.46506274e-03 2.51404445e-03 2.56347828e-03 2.61336297e-03 + 2.66369722e-03 2.71447972e-03 2.76570915e-03 2.81738418e-03 2.86950348e-03 + 2.92206567e-03 2.97506939e-03 3.02851326e-03 3.08239588e-03 3.13671584e-03 + 3.19147173e-03 3.24666210e-03 3.30228551e-03 3.35834052e-03 3.41482564e-03 + 3.47173940e-03 3.52908031e-03 3.58684686e-03 3.64503754e-03 3.70365083e-03 + 3.76268518e-03 3.82213906e-03 3.88201090e-03 3.94229914e-03 4.00300220e-03 + 4.06411848e-03 4.12564639e-03 4.18758433e-03 4.24993067e-03 4.31268378e-03 + 4.37584203e-03 4.43940377e-03 4.50336734e-03 4.56773109e-03 4.63249332e-03 + 4.69765237e-03 4.76320654e-03 4.82915413e-03 4.89549343e-03 4.96222273e-03 + 5.02934030e-03 5.09684441e-03 5.16473332e-03 5.23300528e-03 5.30165854e-03 + 5.37069134e-03 5.44010191e-03 5.50988847e-03 5.58004924e-03 5.65058244e-03 + 5.72148626e-03 5.79275891e-03 5.86439858e-03 5.93640345e-03 6.00877172e-03 + 6.08150155e-03 6.15459112e-03 6.22803858e-03 6.30184211e-03 6.37599985e-03 + 6.45050997e-03 6.52537060e-03 6.60057988e-03 6.67613596e-03 6.75203698e-03 + 6.82828105e-03 6.90486631e-03 6.98179088e-03 7.05905289e-03 7.13665044e-03 + 7.21458166e-03 7.29284466e-03 7.37143754e-03 7.45035841e-03 7.52960538e-03 + 7.60917656e-03 7.68907003e-03 7.76928391e-03 7.84981629e-03 7.93066527e-03 + 8.01182895e-03 8.09330541e-03 8.17509277e-03 8.25718910e-03 8.33959250e-03 + 8.42230108e-03 8.50531292e-03 8.58862611e-03 8.67223876e-03 8.75614896e-03 + 8.84035481e-03 8.92485441e-03 9.00964584e-03 9.09472723e-03 9.18009666e-03 + 9.26575225e-03 9.35169210e-03 9.43791432e-03 9.52441702e-03 9.61119832e-03 + 9.69825633e-03 9.78558918e-03 9.87319498e-03 9.96107188e-03 1.00492180e-02 + 1.01376315e-02 1.02263104e-02 1.03152530e-02 1.04044574e-02 1.04939217e-02 + 1.05836441e-02 1.06736228e-02 1.07638559e-02 1.08543416e-02 1.09450781e-02 + 1.10360636e-02 1.11272962e-02 1.12187742e-02 1.13104958e-02 1.14024591e-02 + 1.14946625e-02 1.15871040e-02 1.16797821e-02 1.17726948e-02 1.18658405e-02 + 1.19592175e-02 1.20528239e-02 1.21466580e-02 1.22407183e-02 1.23350028e-02 + 1.24295100e-02 1.25242382e-02 1.26191856e-02 1.27143506e-02 1.28097316e-02 + 1.29053269e-02 1.30011349e-02 1.30971539e-02 1.31933823e-02 1.32898186e-02 + 1.33864611e-02 1.34833083e-02 1.35803585e-02 1.36776103e-02 1.37750621e-02 + 1.38727123e-02 1.39705595e-02 1.40686021e-02 1.41668387e-02 1.42652677e-02 + 1.43638877e-02 1.44626973e-02 1.45616950e-02 1.46608794e-02 1.47602491e-02 + 1.48598027e-02 1.49595389e-02 1.50594562e-02 1.51595533e-02 1.52598289e-02 + 1.53602817e-02 1.54609104e-02 1.55617136e-02 1.56626903e-02 1.57638390e-02 + 1.58651585e-02 1.59666478e-02 1.60683054e-02 1.61701304e-02 1.62721215e-02 + 1.63742776e-02 1.64765975e-02 1.65790802e-02 1.66817246e-02 1.67845297e-02 + 1.68874943e-02 1.69906174e-02 1.70938981e-02 1.71973354e-02 1.73009283e-02 + 1.74046758e-02 1.75085771e-02 1.76126313e-02 1.77168374e-02 1.78211946e-02 + 1.79257022e-02 1.80303592e-02 1.81351648e-02 1.82401184e-02 1.83452192e-02 + 1.84504664e-02 1.85558594e-02 1.86613974e-02 1.87670799e-02 1.88729063e-02 + 1.89788758e-02 1.90849880e-02 1.91912422e-02 1.92976381e-02 1.94041749e-02 + 1.95108524e-02 1.96176701e-02 1.97246274e-02 1.98317241e-02 1.99389597e-02 + 2.00463340e-02 2.01538465e-02 2.02614971e-02 2.03692854e-02 2.04772113e-02 + 2.05852745e-02 2.06934748e-02 2.08018121e-02 2.09102863e-02 2.10188973e-02 + 2.11276450e-02 2.12365294e-02 2.13455506e-02 2.14547084e-02 2.15640031e-02 + 2.16734346e-02 2.17830032e-02 2.18927089e-02 2.20025519e-02 2.21125325e-02 + 2.22226510e-02 2.23329075e-02 2.24433024e-02 2.25538360e-02 2.26645088e-02 + 2.27753211e-02 2.28862734e-02 2.29973661e-02 2.31085997e-02 2.32199749e-02 + 2.33314922e-02 2.34431522e-02 2.35549555e-02 2.36669028e-02 2.37789949e-02 + 2.38912325e-02 2.40036163e-02 2.41161473e-02 2.42288263e-02 2.43416541e-02 + 2.44546317e-02 2.45677602e-02 2.46810404e-02 2.47944734e-02 2.49080604e-02 + 2.50218024e-02 2.51357006e-02 2.52497562e-02 2.53639704e-02 2.54783445e-02 + 2.55928799e-02 2.57075779e-02 2.58224398e-02 2.59374671e-02 2.60526613e-02 + 2.61680239e-02 2.62835565e-02 2.63992605e-02 2.65151378e-02 2.66311899e-02 + 2.67474187e-02 2.68638257e-02 2.69804129e-02 2.70971821e-02 2.72141351e-02 + 2.73312740e-02 2.74486006e-02 2.75661170e-02 2.76838253e-02 2.78017276e-02 + 2.79198259e-02 2.80381226e-02 2.81566198e-02 2.82753198e-02 2.83942249e-02 + 2.85133376e-02 2.86326602e-02 2.87521952e-02 2.88719451e-02 2.89919124e-02 + 2.91120998e-02 2.92325099e-02 2.93531454e-02 2.94740090e-02 2.95951036e-02 + 2.97164319e-02 2.98379969e-02 2.99598014e-02 3.00818485e-02 3.02041411e-02 + 3.03266825e-02 3.04494756e-02 3.05725236e-02 3.06958298e-02 3.08193975e-02 + 3.09432300e-02 3.10673306e-02 3.11917028e-02 3.13163500e-02 3.14412758e-02 + 3.15664837e-02 3.16919774e-02 3.18177606e-02 3.19438369e-02 3.20702102e-02 + 3.21968843e-02 3.23238631e-02 3.24511504e-02 3.25787504e-02 3.27066671e-02 + 3.28349045e-02 3.29634668e-02 3.30923581e-02 3.32215829e-02 3.33511453e-02 + 3.34810498e-02 3.36113007e-02 3.37419026e-02 3.38728600e-02 3.40041774e-02 + 3.41358595e-02 3.42679109e-02 3.44003366e-02 3.45331412e-02 3.46663296e-02 + 3.47999067e-02 3.49338776e-02 3.50682472e-02 3.52030207e-02 3.53382032e-02 + 3.54737998e-02 3.56098160e-02 3.57462569e-02 3.58831280e-02 3.60204348e-02 + 3.61581826e-02 3.62963771e-02 3.64350239e-02 3.65741287e-02 3.67136971e-02 + 3.68537351e-02 3.69942484e-02 3.71352429e-02 3.72767247e-02 3.74186997e-02 + 3.75611742e-02 3.77041541e-02 3.78476458e-02 3.79916555e-02 3.81361895e-02 + 3.82812543e-02 3.84268564e-02 3.85730022e-02 3.87196983e-02 3.88669514e-02 + 3.90147683e-02 3.91631556e-02 3.93121202e-02 3.94616691e-02 3.96118091e-02 + 3.97625473e-02 3.99138909e-02 4.00658470e-02 4.02184227e-02 4.03716254e-02 + 4.05254624e-02 4.06799412e-02 4.08350692e-02 4.09908540e-02 4.11473032e-02 + 4.13044244e-02 4.14622254e-02 4.16207140e-02 4.17798981e-02 4.19397857e-02 + 4.21003846e-02 4.22617031e-02 4.24237492e-02 4.25865311e-02 4.27500572e-02 + 4.29143358e-02 4.30793752e-02 4.32451840e-02 4.34117706e-02 4.35791438e-02 + 4.37473122e-02 4.39162845e-02 4.40860696e-02 4.42566763e-02 4.44281136e-02 + 4.46003905e-02 4.47735162e-02 4.49474997e-02 4.51223503e-02 4.52980774e-02 + 4.54746902e-02 4.56521983e-02 4.58306111e-02 4.60099382e-02 4.61901893e-02 + 4.63713741e-02 4.65535024e-02 4.67365841e-02 4.69206290e-02 4.71056473e-02 + 4.72916489e-02 4.74786441e-02 4.76666430e-02 4.78556559e-02 4.80456933e-02 + 4.82367655e-02 4.84288831e-02 4.86220567e-02 4.88162968e-02 4.90116143e-02 + 4.92080199e-02 4.94055246e-02 4.96041392e-02 4.98038747e-02 5.00047424e-02 + 5.02067532e-02 5.04099186e-02 5.06142498e-02 5.08197581e-02 5.10264551e-02 + 5.12343523e-02 5.14434613e-02 5.16537938e-02 5.18653616e-02 5.20781765e-02 + 5.22922503e-02 5.25075952e-02 5.27242231e-02 5.29421462e-02 5.31613767e-02 + 5.33819268e-02 5.36038091e-02 5.38270358e-02 5.40516196e-02 5.42775730e-02 + 5.45049086e-02 5.47336392e-02 5.49637777e-02 5.51953370e-02 5.54283299e-02 + 5.56627696e-02 5.58986692e-02 5.61360419e-02 5.63749010e-02 5.66152598e-02 + 5.68571317e-02 5.71005304e-02 5.73454693e-02 5.75919622e-02 5.78400227e-02 + 5.80896648e-02 5.83409023e-02 5.85937492e-02 5.88482195e-02 5.91043274e-02 + 5.93620871e-02 5.96215130e-02 5.98826193e-02 6.01454205e-02 6.04099311e-02 + 6.06761659e-02 6.09441393e-02 6.12138663e-02 6.14853616e-02 6.17586402e-02 + 6.20337170e-02 6.23106073e-02 6.25893260e-02 6.28698885e-02 6.31523100e-02 + 6.34366061e-02 6.37227921e-02 6.40108836e-02 6.43008963e-02 6.45928458e-02 + 6.48867480e-02 6.51826187e-02 6.54804740e-02 6.57803298e-02 6.60822022e-02 + 6.63861076e-02 6.66920620e-02 6.70000820e-02 6.73101839e-02 6.76223842e-02 + 6.79366996e-02 6.82531468e-02 6.85717424e-02 6.88925034e-02 6.92154467e-02 + 6.95405892e-02 6.98679481e-02 7.01975405e-02 7.05293837e-02 7.08634950e-02 + 7.11998918e-02 7.15385916e-02 7.18796120e-02 7.22229706e-02 7.25686852e-02 + 7.29167735e-02 7.32672535e-02 7.36201432e-02 7.39754605e-02 7.43332238e-02 + 7.46934510e-02 7.50561607e-02 7.54213711e-02 7.57891008e-02 7.61593682e-02 + 7.65321920e-02 7.69075909e-02 7.72855838e-02 7.76661894e-02 7.80494268e-02 + 7.84353149e-02 7.88238730e-02 7.92151201e-02 7.96090757e-02 8.00057589e-02 + 8.04051894e-02 8.08073866e-02 8.12123701e-02 8.16201597e-02 8.20307750e-02 + 8.24442360e-02 8.28605626e-02 8.32797748e-02 8.37018927e-02 8.41269365e-02 + 8.45549265e-02 8.49858830e-02 8.54198264e-02 8.58567773e-02 8.62967562e-02 + 8.67397838e-02 8.71858809e-02 8.76350683e-02 8.80873669e-02 8.85427977e-02 + 8.90013819e-02 8.94631405e-02 8.99280948e-02 9.03962662e-02 9.08676760e-02 + 9.13423458e-02 9.18202971e-02 9.23015516e-02 9.27861310e-02 9.32740571e-02 + 9.37653518e-02 9.42600372e-02 9.47581352e-02 9.52596680e-02 9.57646578e-02 + 9.62731270e-02 9.67850979e-02 9.73005931e-02 9.78196349e-02 9.83422462e-02 + 9.88684495e-02 9.93982677e-02 9.99317237e-02 1.00468840e-01 1.01009641e-01 + 1.01554148e-01 1.02102385e-01 1.02654376e-01 1.03210143e-01 1.03769711e-01 + 1.04333102e-01 1.04900341e-01 1.05471450e-01 1.06046454e-01 1.06625377e-01 + 1.07208242e-01 1.07795073e-01 1.08385896e-01 1.08980733e-01 1.09579608e-01 + 1.10182548e-01 1.10789574e-01 1.11400713e-01 1.12015989e-01 1.12635426e-01 + 1.13259049e-01 1.13886884e-01 1.14518954e-01 1.15155284e-01 1.15795901e-01 + 1.16440828e-01 1.17090092e-01 1.17743717e-01 1.18401728e-01 1.19064152e-01 + 1.19731014e-01 1.20402338e-01 1.21078152e-01 1.21758481e-01 1.22443350e-01 + 1.23132785e-01 1.23826813e-01 1.24525459e-01 1.25228750e-01 1.25936712e-01 + 1.26649371e-01 1.27366754e-01 1.28088886e-01 1.28815795e-01 1.29547507e-01 + 1.30284049e-01 1.31025448e-01 1.31771730e-01 1.32522922e-01 1.33279051e-01 + 1.34040145e-01 1.34806231e-01 1.35577335e-01 1.36353485e-01 1.37134708e-01 + 1.37921033e-01 1.38712486e-01 1.39509094e-01 1.40310887e-01 1.41117891e-01 + 1.41930134e-01 1.42747644e-01 1.43570449e-01 1.44398578e-01 1.45232058e-01 + 1.46070917e-01 1.46915184e-01 1.47764888e-01 1.48620056e-01 1.49480717e-01 + 1.50346899e-01 1.51218632e-01 1.52095944e-01 1.52978863e-01 1.53867420e-01 + 1.54761642e-01 1.55661558e-01 1.56567199e-01 1.57478592e-01 1.58395767e-01 + 1.59318754e-01 1.60247581e-01 1.61182279e-01 1.62122877e-01 1.63069403e-01 + 1.64021889e-01 1.64980364e-01 1.65944857e-01 1.66915399e-01 1.67892019e-01 + 1.68874747e-01 1.69863614e-01 1.70858650e-01 1.71859884e-01 1.72867348e-01 + 1.73881072e-01 1.74901085e-01 1.75927419e-01 1.76960104e-01 1.77999170e-01 + 1.79044650e-01 1.80096572e-01 1.81154968e-01 1.82219870e-01 1.83291308e-01 + 1.84369312e-01 1.85453915e-01 1.86545148e-01 1.87643041e-01 1.88747626e-01 + 1.89858934e-01 1.90976997e-01 1.92101847e-01 1.93233514e-01 1.94372032e-01 + 1.95517430e-01 1.96669742e-01 1.97828999e-01 1.98995233e-01 2.00168475e-01 + 2.01348759e-01 2.02536116e-01 2.03730578e-01 2.04932178e-01 2.06140947e-01 + 2.07356919e-01 2.08580125e-01 2.09810599e-01 2.11048372e-01 2.12293478e-01 + 2.13545949e-01 2.14805817e-01 2.16073116e-01 2.17347879e-01 2.18630138e-01 + 2.19919927e-01 2.21217278e-01 2.22522225e-01 2.23834800e-01 2.25155038e-01 + 2.26482971e-01 2.27818633e-01 2.29162056e-01 2.30513276e-01 2.31872325e-01 + 2.33239236e-01 2.34614044e-01 2.35996782e-01 2.37387484e-01 2.38786184e-01 + 2.40192915e-01 2.41607712e-01 2.43030609e-01 2.44461640e-01 2.45900838e-01 + 2.47348238e-01 2.48803875e-01 2.50267782e-01 2.51739994e-01 2.53220545e-01 + 2.54709470e-01 2.56206803e-01 2.57712579e-01 2.59226833e-01 2.60749598e-01 + 2.62280911e-01 2.63820805e-01 2.65369316e-01 2.66926478e-01 2.68492326e-01 + 2.70066896e-01 2.71650222e-01 2.73242339e-01 2.74843284e-01 2.76453090e-01 + 2.78071793e-01 2.79699428e-01 2.81336031e-01 2.82981638e-01 2.84636282e-01 + 2.86300002e-01 2.87972830e-01 2.89654804e-01 2.91345959e-01 2.93046331e-01 + 2.94755955e-01 2.96474867e-01 2.98203103e-01 2.99940699e-01 3.01687691e-01 + 3.03444115e-01 3.05210007e-01 3.06985403e-01 3.08770338e-01 3.10564851e-01 + 3.12368975e-01 3.14182749e-01 3.16006207e-01 3.17839387e-01 3.19682324e-01 + 3.21535056e-01 3.23397619e-01 3.25270049e-01 3.27152383e-01 3.29044657e-01 + 3.30946908e-01 3.32859173e-01 3.34781489e-01 3.36713892e-01 3.38656419e-01 + 3.40609107e-01 3.42571993e-01 3.44545114e-01 3.46528507e-01 3.48522209e-01 + 3.50526256e-01 3.52540686e-01 3.54565537e-01 3.56600845e-01 3.58646647e-01 + 3.60702982e-01 3.62769885e-01 3.64847394e-01 3.66935548e-01 3.69034382e-01 + 3.71143935e-01 3.73264245e-01 3.75395347e-01 3.77537281e-01 3.79690084e-01 + 3.81853792e-01 3.84028445e-01 3.86214079e-01 3.88410732e-01 3.90618443e-01 + 3.92837248e-01 3.95067186e-01 3.97308294e-01 3.99560611e-01 4.01824174e-01 + 4.04099021e-01 4.06385190e-01 4.08682719e-01 4.10991646e-01 4.13312009e-01 + 4.15643846e-01 4.17987196e-01 4.20342096e-01 4.22708585e-01 4.25086701e-01 + 4.27476482e-01 4.29877965e-01 4.32291191e-01 4.34716196e-01 4.37153020e-01 + 4.39601699e-01 4.42062274e-01 4.44534782e-01 4.47019262e-01 4.49515752e-01 + 4.52024290e-01 4.54544915e-01 4.57077666e-01 4.59622582e-01 4.62179699e-01 + 4.64749058e-01 4.67330697e-01 4.69924655e-01 4.72530970e-01 4.75149680e-01 + 4.77780825e-01 4.80424443e-01 4.83080573e-01 4.85749254e-01 4.88430524e-01 + 4.91124422e-01 4.93830987e-01 4.96550258e-01 4.99282274e-01 5.02027073e-01 + 5.04784694e-01 5.07555177e-01 5.10338560e-01 5.13134881e-01 5.15944181e-01 + 5.18766498e-01 5.21601870e-01 5.24450337e-01 5.27311938e-01 5.30186712e-01 + 5.33074698e-01 5.35975934e-01 5.38890460e-01 5.41818315e-01 5.44759538e-01 + 5.47714168e-01 5.50682244e-01 5.53663805e-01 5.56658890e-01 5.59667539e-01 + 5.62689790e-01 5.65725682e-01 5.68775255e-01 5.71838548e-01 5.74915600e-01 + 5.78006450e-01 5.81111137e-01 5.84229700e-01 5.87362179e-01 5.90508613e-01 + 5.93669040e-01 5.96843501e-01 6.00032034e-01 6.03234678e-01 6.06451473e-01 + 6.09682457e-01 6.12927671e-01 6.16187152e-01 6.19460941e-01 6.22749077e-01 + 6.26051598e-01 6.29368545e-01 6.32699955e-01 6.36045869e-01 6.39406325e-01 + 6.42781363e-01 6.46171022e-01 6.49575341e-01 6.52994360e-01 6.56428116e-01 + 6.59876651e-01 6.63340002e-01 6.66818210e-01 6.70311312e-01 6.73819349e-01 + 6.77342360e-01 6.80880383e-01 6.84433457e-01 6.88001623e-01 6.91584919e-01 + 6.95183384e-01 6.98797058e-01 7.02425979e-01 7.06070186e-01 7.09729719e-01 + 7.13404617e-01 7.17094919e-01 7.20800663e-01 7.24521889e-01 7.28258637e-01 + 7.32010944e-01 7.35778850e-01 7.39562395e-01 7.43361616e-01 7.47176553e-01 + 7.51007246e-01 7.54853732e-01 7.58716051e-01 7.62594242e-01 7.66488343e-01 + 7.70398394e-01 7.74324434e-01 7.78266501e-01 7.82224634e-01 7.86198872e-01 + 7.90189253e-01 7.94195818e-01 7.98218604e-01 8.02257650e-01 8.06312994e-01 + 8.10384677e-01 8.14472736e-01 8.18577209e-01 8.22698137e-01 8.26835556e-01 + 8.30989506e-01 8.35160026e-01 8.39347154e-01 8.43550929e-01 8.47771388e-01 + 8.52008571e-01 8.56262517e-01 8.60533262e-01 8.64820847e-01 8.69125309e-01 + 8.73446687e-01 8.77785019e-01 8.82140343e-01 8.86512698e-01 8.90902122e-01 + 8.95308653e-01 8.99732330e-01 9.04173190e-01 9.08631272e-01 9.13106614e-01 + 9.17599253e-01 9.22109229e-01 9.26636579e-01 9.31181341e-01 9.35743553e-01 + 9.40323253e-01 9.44920479e-01 9.49535268e-01 9.54167659e-01 9.58817690e-01 + 9.63485397e-01 9.68170820e-01 9.72873995e-01 9.77594961e-01 9.82333754e-01 + 9.87090413e-01 9.91864975e-01 9.96657478e-01 1.00146796e+00 1.00629646e+00 + 1.01114300e+00 1.01600764e+00 1.02089041e+00 1.02579134e+00 1.03071048e+00 + 1.03564785e+00 1.04060350e+00 1.04557747e+00 1.05056978e+00 1.05558048e+00 + 1.06060961e+00 1.06565720e+00 1.07072329e+00 1.07580791e+00 1.08091111e+00 + 1.08603291e+00 1.09117337e+00 1.09633250e+00 1.10151035e+00 1.10670696e+00 + 1.11192236e+00 1.11715659e+00 1.12240969e+00 1.12768169e+00 1.13297263e+00 + 1.13828254e+00 1.14361146e+00 1.14895943e+00 1.15432648e+00 1.15971265e+00 + 1.16511798e+00 1.17054250e+00 1.17598625e+00 1.18144926e+00 1.18693156e+00 + 1.19243321e+00 1.19795422e+00 1.20349464e+00 1.20905451e+00 1.21463385e+00 + 1.22023271e+00 1.22585111e+00 1.23148910e+00 1.23714670e+00 1.24282397e+00 + 1.24852092e+00 1.25423760e+00 1.25997404e+00 1.26573027e+00 1.27150634e+00 + 1.27730227e+00 1.28311810e+00 1.28895387e+00 1.29480961e+00 1.30068535e+00 + 1.30658114e+00 1.31249699e+00 1.31843296e+00 1.32438907e+00 1.33036536e+00 + 1.33636186e+00 1.34237861e+00 1.34841563e+00 1.35447298e+00 1.36055067e+00 + 1.36664875e+00 1.37276724e+00 1.37890618e+00 1.38506561e+00 1.39124556e+00 + 1.39744606e+00 1.40366714e+00 1.40990885e+00 1.41617121e+00 1.42245426e+00 + 1.42875802e+00 1.43508254e+00 1.44142785e+00 1.44779398e+00 1.45418096e+00 + 1.46058882e+00 1.46701761e+00 1.47346735e+00 1.47993807e+00 1.48642981e+00 + 1.49294260e+00 1.49947647e+00 1.50603146e+00 1.51260760e+00 1.51920492e+00 + 1.52582344e+00 1.53246322e+00 1.53912427e+00 1.54580663e+00 1.55251033e+00 + 1.55923541e+00 1.56598189e+00 1.57274981e+00 1.57953919e+00 1.58635008e+00 + 1.59318250e+00 1.60003648e+00 1.60691205e+00 1.61380925e+00 1.62072811e+00 + 1.62766866e+00 1.63463093e+00 1.64161494e+00 1.64862074e+00 1.65564835e+00 + 1.66269781e+00 1.66976913e+00 1.67686237e+00 1.68397753e+00 1.69111467e+00 + 1.69827379e+00 1.70545495e+00 1.71265816e+00 1.71988345e+00 1.72713087e+00 + 1.73440042e+00 1.74169216e+00 1.74900610e+00 1.75634228e+00 1.76370072e+00 + 1.77108145e+00 1.77848451e+00 1.78590992e+00 1.79335772e+00 1.80082793e+00 + 1.80832057e+00 1.81583569e+00 1.82337331e+00 1.83093345e+00 1.83851615e+00 + 1.84612143e+00 1.85374933e+00 1.86139987e+00 1.86907308e+00 1.87676899e+00 + 1.88448762e+00 1.89222901e+00 1.89999318e+00 1.90778016e+00 1.91558998e+00 + 1.92342267e+00 1.93127825e+00 1.93915675e+00 1.94705820e+00 1.95498262e+00 + 1.96293005e+00 1.97090050e+00 1.97889402e+00 1.98691062e+00 1.99495033e+00 + 2.00301317e+00 2.01109918e+00 2.01920839e+00 2.02734080e+00 2.03549647e+00 + 2.04367540e+00 2.05187763e+00 2.06010318e+00 2.06835208e+00 2.07662435e+00 + 2.08492002e+00 2.09323912e+00 2.10158167e+00 2.10994769e+00 2.11833722e+00 + 2.12675027e+00 2.13518688e+00 2.14364706e+00 2.15213085e+00 2.16063826e+00 + 2.16916932e+00 2.17772406e+00 2.18630250e+00 2.19490466e+00 2.20353058e+00 + 2.21218027e+00 2.22085375e+00 2.22955106e+00 2.23827221e+00 2.24701724e+00 + 2.25578615e+00 2.26457899e+00 2.27339576e+00 2.28223650e+00 2.29110122e+00 + 2.29998996e+00 2.30890273e+00 2.31783955e+00 2.32680045e+00 2.33578546e+00 + 2.34479459e+00 2.35382786e+00 2.36288530e+00 2.37196694e+00 2.38107279e+00 + 7.75783058e-03 7.73296622e-03 7.70815966e-03 7.68341051e-03 7.65871836e-03 + 7.63408283e-03 7.60950351e-03 7.58498000e-03 7.56051190e-03 7.53609882e-03 + 7.51174036e-03 7.48743611e-03 7.46318569e-03 7.43898868e-03 7.41484469e-03 + 7.39075333e-03 7.36671420e-03 7.34272689e-03 7.31879101e-03 7.29490616e-03 + 7.27107195e-03 7.24728797e-03 7.22355383e-03 7.19986914e-03 7.17623349e-03 + 7.15264650e-03 7.12910776e-03 7.10561688e-03 7.08217347e-03 7.05877713e-03 + 7.03542747e-03 7.01212410e-03 6.98886663e-03 6.96565466e-03 6.94248780e-03 + 6.91936567e-03 6.89628787e-03 6.87325401e-03 6.85026372e-03 6.82731659e-03 + 6.80441225e-03 6.78155031e-03 6.75873038e-03 6.73595209e-03 6.71321505e-03 + 6.69051888e-03 6.66786319e-03 6.64524762e-03 6.62267177e-03 6.60013528e-03 + 6.57763777e-03 6.55517887e-03 6.53275819e-03 6.51037537e-03 6.48803005e-03 + 6.46572184e-03 6.44345038e-03 6.42121530e-03 6.39901625e-03 6.37685284e-03 + 6.35472473e-03 6.33263156e-03 6.31057295e-03 6.28854856e-03 6.26655802e-03 + 6.24460099e-03 6.22267711e-03 6.20078603e-03 6.17892740e-03 6.15710087e-03 + 6.13530609e-03 6.11354273e-03 6.09181044e-03 6.07010887e-03 6.04843770e-03 + 6.02679658e-03 6.00518518e-03 5.98360316e-03 5.96205020e-03 5.94052597e-03 + 5.91903013e-03 5.89756237e-03 5.87612237e-03 5.85470980e-03 5.83332434e-03 + 5.81196568e-03 5.79063351e-03 5.76932751e-03 5.74804738e-03 5.72679281e-03 + 5.70556349e-03 5.68435913e-03 5.66317942e-03 5.64202406e-03 5.62089277e-03 + 5.59978526e-03 5.57870122e-03 5.55764038e-03 5.53660245e-03 5.51558714e-03 + 5.49459419e-03 5.47362332e-03 5.45267424e-03 5.43174670e-03 5.41084042e-03 + 5.38995513e-03 5.36909059e-03 5.34824651e-03 5.32742266e-03 5.30661878e-03 + 5.28583461e-03 5.26506991e-03 5.24432443e-03 5.22359793e-03 5.20289018e-03 + 5.18220094e-03 5.16152997e-03 5.14087705e-03 5.12024195e-03 5.09962444e-03 + 5.07902432e-03 5.05844136e-03 5.03787534e-03 5.01732607e-03 4.99679333e-03 + 4.97627691e-03 4.95577663e-03 4.93529228e-03 4.91482367e-03 4.89437061e-03 + 4.87393292e-03 4.85351041e-03 4.83310291e-03 4.81271023e-03 4.79233221e-03 + 4.77196867e-03 4.75161946e-03 4.73128441e-03 4.71096337e-03 4.69065618e-03 + 4.67036269e-03 4.65008275e-03 4.62981623e-03 4.60956299e-03 4.58932288e-03 + 4.56909578e-03 4.54888156e-03 4.52868010e-03 4.50849128e-03 4.48831498e-03 + 4.46815110e-03 4.44799952e-03 4.42786013e-03 4.40773285e-03 4.38761758e-03 + 4.36751422e-03 4.34742268e-03 4.32734289e-03 4.30727476e-03 4.28721822e-03 + 4.26717320e-03 4.24713963e-03 4.22711745e-03 4.20710659e-03 4.18710701e-03 + 4.16711866e-03 4.14714149e-03 4.12717545e-03 4.10722051e-03 4.08727665e-03 + 4.06734382e-03 4.04742201e-03 4.02751119e-03 4.00761135e-03 3.98772248e-03 + 3.96784457e-03 3.94797762e-03 3.92812164e-03 3.90827662e-03 3.88844258e-03 + 3.86861953e-03 3.84880750e-03 3.82900651e-03 3.80921659e-03 3.78943777e-03 + 3.76967009e-03 3.74991360e-03 3.73016833e-03 3.71043435e-03 3.69071171e-03 + 3.67100046e-03 3.65130068e-03 3.63161244e-03 3.61193581e-03 3.59227087e-03 + 3.57261770e-03 3.55297640e-03 3.53334706e-03 3.51372978e-03 3.49412465e-03 + 3.47453180e-03 3.45495132e-03 3.43538334e-03 3.41582798e-03 3.39628537e-03 + 3.37675564e-03 3.35723892e-03 3.33773536e-03 3.31824510e-03 3.29876830e-03 + 3.27930510e-03 3.25985568e-03 3.24042019e-03 3.22099880e-03 3.20159169e-03 + 3.18219905e-03 3.16282105e-03 3.14345788e-03 3.12410974e-03 3.10477683e-03 + 3.08545935e-03 3.06615751e-03 3.04687152e-03 3.02760161e-03 3.00834799e-03 + 2.98911090e-03 2.96989056e-03 2.95068723e-03 2.93150113e-03 2.91233251e-03 + 2.89318164e-03 2.87404877e-03 2.85493415e-03 2.83583807e-03 2.81676078e-03 + 2.79770257e-03 2.77866372e-03 2.75964451e-03 2.74064524e-03 2.72166621e-03 + 2.70270771e-03 2.68377006e-03 2.66485356e-03 2.64595853e-03 2.62708529e-03 + 2.60823417e-03 2.58940549e-03 2.57059960e-03 2.55181683e-03 2.53305753e-03 + 2.51432206e-03 2.49561075e-03 2.47692398e-03 2.45826211e-03 2.43962550e-03 + 2.42101454e-03 2.40242960e-03 2.38387106e-03 2.36533932e-03 2.34683476e-03 + 2.32835779e-03 2.30990881e-03 2.29148822e-03 2.27309644e-03 2.25473389e-03 + 2.23640098e-03 2.21809814e-03 2.19982581e-03 2.18158442e-03 2.16337441e-03 + 2.14519622e-03 2.12705031e-03 2.10893713e-03 2.09085714e-03 2.07281081e-03 + 2.05479859e-03 2.03682097e-03 2.01887841e-03 2.00097142e-03 1.98310046e-03 + 1.96526603e-03 1.94746863e-03 1.92970876e-03 1.91198692e-03 1.89430361e-03 + 1.87665937e-03 1.85905469e-03 1.84149011e-03 1.82396614e-03 1.80648333e-03 + 1.78904221e-03 1.77164332e-03 1.75428719e-03 1.73697438e-03 1.71970545e-03 + 1.70248094e-03 1.68530143e-03 1.66816747e-03 1.65107964e-03 1.63403850e-03 + 1.61704464e-03 1.60009864e-03 1.58320109e-03 1.56635257e-03 1.54955368e-03 + 1.53280502e-03 1.51610719e-03 1.49946080e-03 1.48286646e-03 1.46632477e-03 + 1.44983637e-03 1.43340187e-03 1.41702190e-03 1.40069709e-03 1.38442807e-03 + 1.36821548e-03 1.35205996e-03 1.33596216e-03 1.31992272e-03 1.30394230e-03 + 1.28802156e-03 1.27216115e-03 1.25636174e-03 1.24062400e-03 1.22494858e-03 + 1.20933618e-03 1.19378747e-03 1.17830313e-03 1.16288384e-03 1.14753029e-03 + 1.13224317e-03 1.11702318e-03 1.10187102e-03 1.08678738e-03 1.07177298e-03 + 1.05682851e-03 1.04195470e-03 1.02715225e-03 1.01242188e-03 9.97764323e-04 + 9.83180288e-04 9.68670506e-04 9.54235708e-04 9.39876625e-04 9.25593994e-04 + 9.11388553e-04 8.97261043e-04 8.83212208e-04 8.69242796e-04 8.55353556e-04 + 8.41545241e-04 8.27818606e-04 8.14174409e-04 8.00613410e-04 7.87136373e-04 + 7.73744063e-04 7.60437247e-04 7.47216698e-04 7.34083188e-04 7.21037492e-04 + 7.08080389e-04 6.95212658e-04 6.82435082e-04 6.69748446e-04 6.57153537e-04 + 6.44651143e-04 6.32242057e-04 6.19927071e-04 6.07706982e-04 5.95582586e-04 + 5.83554683e-04 5.71624074e-04 5.59791564e-04 5.48057956e-04 5.36424058e-04 + 5.24890679e-04 5.13458629e-04 5.02128720e-04 4.90901767e-04 4.79778585e-04 + 4.68759991e-04 4.57846804e-04 4.47039843e-04 4.36339931e-04 4.25747890e-04 + 4.15264545e-04 4.04890722e-04 3.94627247e-04 3.84474948e-04 3.74434656e-04 + 3.64507200e-04 3.54693412e-04 3.44994126e-04 3.35410174e-04 3.25942392e-04 + 3.16591616e-04 3.07358681e-04 2.98244426e-04 2.89249688e-04 2.80375307e-04 + 2.71622122e-04 2.62990974e-04 2.54482704e-04 2.46098153e-04 2.37838164e-04 + 2.29703578e-04 2.21695241e-04 2.13813993e-04 2.06060681e-04 1.98436147e-04 + 1.90941236e-04 1.83576793e-04 1.76343663e-04 1.69242690e-04 1.62274720e-04 + 1.55440598e-04 1.48741168e-04 1.42177276e-04 1.35749766e-04 1.29459484e-04 + 1.23307274e-04 1.17293980e-04 1.11420445e-04 1.05687515e-04 1.00096032e-04 + 9.46468388e-05 8.93407780e-05 8.41786913e-05 7.91614202e-05 7.42898052e-05 + 6.95646864e-05 6.49869031e-05 6.05572937e-05 5.62766961e-05 5.21459470e-05 + 4.81658825e-05 4.43373376e-05 4.06611462e-05 3.71381414e-05 3.37691551e-05 + 3.05550180e-05 2.74965596e-05 2.45946084e-05 2.18499913e-05 1.92635340e-05 + 1.68360610e-05 1.45683951e-05 1.24613578e-05 1.05157689e-05 8.73244699e-06 + 7.11220867e-06 5.65586906e-06 4.36424154e-06 3.23813774e-06 2.27836748e-06 + 1.48573873e-06 8.61057567e-07 4.05128118e-07 1.18752518e-07 2.73086226e-09 + 5.78611603e-08 2.84939286e-07 6.84758934e-07 1.25811157e-06 2.00578638e-06 + 2.92857023e-06 4.02724762e-06 5.30260064e-06 6.75540890e-06 8.38644951e-06 + 1.01964970e-05 1.21863234e-05 1.43566979e-05 1.67083872e-05 1.92421552e-05 + 2.19587628e-05 2.48589684e-05 2.79435273e-05 3.12131920e-05 3.46687118e-05 + 3.83108334e-05 4.21402999e-05 4.61578518e-05 5.03642261e-05 5.47601568e-05 + 5.93463745e-05 6.41236066e-05 6.90925772e-05 7.42540069e-05 7.96086130e-05 + 8.51571092e-05 9.09002059e-05 9.68386096e-05 1.02973024e-04 1.09304147e-04 + 1.15832676e-04 1.22559303e-04 1.29484715e-04 1.36609598e-04 1.43934631e-04 + 1.51460492e-04 1.59187852e-04 1.67117382e-04 1.75249745e-04 1.83585602e-04 + 1.92125609e-04 2.00870420e-04 2.09820682e-04 2.18977038e-04 2.28340129e-04 + 2.37910590e-04 2.47689051e-04 2.57676139e-04 2.67872477e-04 2.78278681e-04 + 2.88895364e-04 2.99723136e-04 3.10762599e-04 3.22014353e-04 3.33478993e-04 + 3.45157108e-04 3.57049283e-04 3.69156098e-04 3.81478128e-04 3.94015944e-04 + 4.06770112e-04 4.19741192e-04 4.32929738e-04 4.46336303e-04 4.59961431e-04 + 4.73805662e-04 4.87869532e-04 5.02153570e-04 5.16658302e-04 5.31384246e-04 + 5.46331917e-04 5.61501823e-04 5.76894469e-04 5.92510351e-04 6.08349963e-04 + 6.24413792e-04 6.40702320e-04 6.57216021e-04 6.73955368e-04 6.90920825e-04 + 7.08112850e-04 7.25531898e-04 7.43178417e-04 7.61052849e-04 7.79155629e-04 + 7.97487189e-04 8.16047953e-04 8.34838340e-04 8.53858764e-04 8.73109630e-04 + 8.92591340e-04 9.12304290e-04 9.32248867e-04 9.52425456e-04 9.72834432e-04 + 9.93476168e-04 1.01435103e-03 1.03545937e-03 1.05680154e-03 1.07837790e-03 + 1.10018877e-03 1.12223450e-03 1.14451541e-03 1.16703183e-03 1.18978405e-03 + 1.21277241e-03 1.23599719e-03 1.25945869e-03 1.28315720e-03 1.30709300e-03 + 1.33126638e-03 1.35567759e-03 1.38032690e-03 1.40521457e-03 1.43034085e-03 + 1.45570597e-03 1.48131019e-03 1.50715372e-03 1.53323678e-03 1.55955961e-03 + 1.58612239e-03 1.61292535e-03 1.63996867e-03 1.66725254e-03 1.69477714e-03 + 1.72254266e-03 1.75054926e-03 1.77879709e-03 1.80728633e-03 1.83601711e-03 + 1.86498957e-03 1.89420386e-03 1.92366009e-03 1.95335839e-03 1.98329887e-03 + 2.01348164e-03 2.04390679e-03 2.07457442e-03 2.10548462e-03 2.13663746e-03 + 2.16803301e-03 2.19967134e-03 2.23155250e-03 2.26367655e-03 2.29604352e-03 + 2.32865346e-03 2.36150638e-03 2.39460232e-03 2.42794128e-03 2.46152328e-03 + 2.49534830e-03 2.52941636e-03 2.56372742e-03 2.59828147e-03 2.63307847e-03 + 2.66811840e-03 2.70340121e-03 2.73892685e-03 2.77469525e-03 2.81070636e-03 + 2.84696010e-03 2.88345639e-03 2.92019515e-03 2.95717627e-03 2.99439966e-03 + 3.03186521e-03 3.06957280e-03 3.10752231e-03 3.14571361e-03 3.18414655e-03 + 3.22282100e-03 3.26173679e-03 3.30089378e-03 3.34029178e-03 3.37993063e-03 + 3.41981015e-03 3.45993014e-03 3.50029041e-03 3.54089075e-03 3.58173095e-03 + 3.62281080e-03 3.66413006e-03 3.70568851e-03 3.74748589e-03 3.78952197e-03 + 3.83179649e-03 3.87430918e-03 3.91705978e-03 3.96004801e-03 4.00327358e-03 + 4.04673620e-03 4.09043558e-03 4.13437140e-03 4.17854335e-03 4.22295111e-03 + 4.26759435e-03 4.31247275e-03 4.35758594e-03 4.40293359e-03 4.44851534e-03 + 4.49433082e-03 4.54037966e-03 4.58666148e-03 4.63317590e-03 4.67992252e-03 + 4.72690094e-03 4.77411076e-03 4.82155156e-03 4.86922292e-03 4.91712441e-03 + 4.96525559e-03 5.01361603e-03 5.06220526e-03 5.11102284e-03 5.16006829e-03 + 5.20934116e-03 5.25884095e-03 5.30856719e-03 5.35851938e-03 5.40869703e-03 + 5.45909962e-03 5.50972664e-03 5.56057758e-03 5.61165191e-03 5.66294908e-03 + 5.71446857e-03 5.76620983e-03 5.81817229e-03 5.87035540e-03 5.92275860e-03 + 5.97538130e-03 6.02822292e-03 6.08128288e-03 6.13456058e-03 6.18805542e-03 + 6.24176680e-03 6.29569408e-03 6.34983667e-03 6.40419392e-03 6.45876520e-03 + 6.51354987e-03 6.56854729e-03 6.62375679e-03 6.67917772e-03 6.73480941e-03 + 6.79065119e-03 6.84670238e-03 6.90296228e-03 6.95943021e-03 7.01610547e-03 + 7.07298735e-03 7.13007514e-03 7.18736812e-03 7.24486557e-03 7.30256676e-03 + 7.36047095e-03 7.41857739e-03 7.47688535e-03 7.53539406e-03 7.59410276e-03 + 7.65301069e-03 7.71211707e-03 7.77142113e-03 7.83092207e-03 7.89061912e-03 + 7.95051146e-03 8.01059830e-03 8.07087884e-03 8.13135225e-03 8.19201772e-03 + 8.25287442e-03 8.31392151e-03 8.37515818e-03 8.43658356e-03 8.49819681e-03 + 8.55999708e-03 8.62198351e-03 8.68415524e-03 8.74651139e-03 8.80905109e-03 + 8.87177346e-03 8.93467761e-03 8.99776265e-03 9.06102768e-03 9.12447181e-03 + 9.18809412e-03 9.25189370e-03 9.31586964e-03 9.38002101e-03 9.44434688e-03 + 9.50884633e-03 9.57351841e-03 9.63836218e-03 9.70337670e-03 9.76856101e-03 + 9.83391415e-03 9.89943517e-03 9.96512309e-03 1.00309769e-02 1.00969958e-02 + 1.01631786e-02 1.02295244e-02 1.02960321e-02 1.03627010e-02 1.04295298e-02 + 1.04965176e-02 1.05636634e-02 1.06309662e-02 1.06984250e-02 1.07660387e-02 + 1.08338064e-02 1.09017270e-02 1.09697994e-02 1.10380226e-02 1.11063957e-02 + 1.11749175e-02 1.12435870e-02 1.13124031e-02 1.13813648e-02 1.14504710e-02 + 1.15197207e-02 1.15891128e-02 1.16586462e-02 1.17283198e-02 1.17981326e-02 + 1.18680835e-02 1.19381714e-02 1.20083952e-02 1.20787538e-02 1.21492461e-02 + 1.22198711e-02 1.22906275e-02 1.23615144e-02 1.24325305e-02 1.25036749e-02 + 1.25749463e-02 1.26463436e-02 1.27178658e-02 1.27895117e-02 1.28612802e-02 + 1.29331701e-02 1.30051803e-02 1.30773097e-02 1.31495572e-02 1.32219215e-02 + 1.32944016e-02 1.33669962e-02 1.34397044e-02 1.35125248e-02 1.35854564e-02 + 1.36584979e-02 1.37316483e-02 1.38049064e-02 1.38782709e-02 1.39517408e-02 + 1.40253149e-02 1.40989919e-02 1.41727708e-02 1.42466503e-02 1.43206293e-02 + 1.43947066e-02 1.44688810e-02 1.45431514e-02 1.46175164e-02 1.46919751e-02 + 1.47665261e-02 1.48411683e-02 1.49159005e-02 1.49907214e-02 1.50656300e-02 + 1.51406250e-02 1.52157052e-02 1.52908694e-02 1.53661164e-02 1.54414451e-02 + 1.55168541e-02 1.55923424e-02 1.56679086e-02 1.57435517e-02 1.58192703e-02 + 1.58950633e-02 1.59709295e-02 1.60468676e-02 1.61228765e-02 1.61989549e-02 + 1.62751017e-02 1.63513156e-02 1.64275953e-02 1.65039398e-02 1.65803477e-02 + 1.66568179e-02 1.67333491e-02 1.68099401e-02 1.68865898e-02 1.69632968e-02 + 1.70400600e-02 1.71168782e-02 1.71937501e-02 1.72706745e-02 1.73476503e-02 + 1.74246761e-02 1.75017508e-02 1.75788731e-02 1.76560418e-02 1.77332558e-02 + 1.78105138e-02 1.78878145e-02 1.79651568e-02 1.80425395e-02 1.81199613e-02 + 1.81974209e-02 1.82749173e-02 1.83524492e-02 1.84300153e-02 1.85076145e-02 + 1.85852456e-02 1.86629072e-02 1.87405983e-02 1.88183176e-02 1.88960639e-02 + 1.89738359e-02 1.90516326e-02 1.91294526e-02 1.92072948e-02 1.92851579e-02 + 1.93630408e-02 1.94409423e-02 1.95188611e-02 1.95967960e-02 1.96747459e-02 + 1.97527096e-02 1.98306858e-02 1.99086734e-02 1.99866711e-02 2.00646778e-02 + 2.01426923e-02 2.02207134e-02 2.02987399e-02 2.03767707e-02 2.04548044e-02 + 2.05328400e-02 2.06108763e-02 2.06889121e-02 2.07669463e-02 2.08449775e-02 + 2.09230048e-02 2.10010268e-02 2.10790425e-02 2.11570506e-02 2.12350500e-02 + 2.13130396e-02 2.13910182e-02 2.14689845e-02 2.15469376e-02 2.16248761e-02 + 2.17027990e-02 2.17807052e-02 2.18585934e-02 2.19364625e-02 2.20143114e-02 + 2.20921389e-02 2.21699439e-02 2.22477253e-02 2.23254820e-02 2.24032128e-02 + 2.24809165e-02 2.25585922e-02 2.26362385e-02 2.27138546e-02 2.27914391e-02 + 2.28689910e-02 2.29465093e-02 2.30239927e-02 2.31014402e-02 2.31788507e-02 + 2.32562232e-02 2.33335564e-02 2.34108493e-02 2.34881009e-02 2.35653100e-02 + 2.36424756e-02 2.37195966e-02 2.37966720e-02 2.38737005e-02 2.39506813e-02 + 2.40276132e-02 2.41044951e-02 2.41813261e-02 2.42581051e-02 2.43348309e-02 + 2.44115026e-02 2.44881192e-02 2.45646795e-02 2.46411826e-02 2.47176275e-02 + 2.47940130e-02 2.48703382e-02 2.49466021e-02 2.50228037e-02 2.50989418e-02 + 2.51750157e-02 2.52510241e-02 2.53269662e-02 2.54028410e-02 2.54786474e-02 + 2.55543844e-02 2.56300512e-02 2.57056467e-02 2.57811699e-02 2.58566198e-02 + 2.59319956e-02 2.60072962e-02 2.60825207e-02 2.61576682e-02 2.62327376e-02 + 2.63077281e-02 2.63826386e-02 2.64574684e-02 2.65322164e-02 2.66068817e-02 + 2.66814634e-02 2.67559606e-02 2.68303724e-02 2.69046978e-02 2.69789360e-02 + 2.70530861e-02 2.71271471e-02 2.72011182e-02 2.72749985e-02 2.73487872e-02 + 2.74224833e-02 2.74960859e-02 2.75695943e-02 2.76430075e-02 2.77163247e-02 + 2.77895451e-02 2.78626678e-02 2.79356919e-02 2.80086167e-02 2.80814412e-02 + 2.81541648e-02 2.82267864e-02 2.82993055e-02 2.83717210e-02 2.84440323e-02 + 2.85162385e-02 2.85883388e-02 2.86603324e-02 2.87322186e-02 2.88039966e-02 + 2.88756656e-02 2.89472248e-02 2.90186734e-02 2.90900108e-02 2.91612361e-02 + 2.92323486e-02 2.93033476e-02 2.93742322e-02 2.94450019e-02 2.95156558e-02 + 2.95861933e-02 2.96566136e-02 2.97269159e-02 2.97970997e-02 2.98671642e-02 + 2.99371087e-02 3.00069325e-02 3.00766349e-02 3.01462153e-02 3.02156729e-02 + 3.02850071e-02 3.03542173e-02 3.04233028e-02 3.04922629e-02 3.05610970e-02 + 3.06298044e-02 3.06983846e-02 3.07668368e-02 3.08351604e-02 3.09033549e-02 + 3.09714197e-02 3.10393540e-02 3.11071573e-02 3.11748290e-02 3.12423686e-02 + 3.13097754e-02 3.13770488e-02 3.14441883e-02 3.15111934e-02 3.15780633e-02 + 3.16447977e-02 3.17113958e-02 3.17778573e-02 3.18441815e-02 3.19103679e-02 + 3.19764160e-02 3.20423252e-02 3.21080951e-02 3.21737250e-02 3.22392146e-02 + 3.23045633e-02 3.23697706e-02 3.24348361e-02 3.24997591e-02 3.25645394e-02 + 3.26291763e-02 3.26936694e-02 3.27580183e-02 3.28222224e-02 3.28862814e-02 + 3.29501948e-02 3.30139622e-02 3.30775831e-02 3.31410570e-02 3.32043837e-02 + 3.32675626e-02 3.33305933e-02 3.33934755e-02 3.34562087e-02 3.35187925e-02 + 3.35812266e-02 3.36435106e-02 3.37056440e-02 3.37676266e-02 3.38294579e-02 + 3.38911376e-02 3.39526653e-02 3.40140407e-02 3.40752635e-02 3.41363332e-02 + 3.41972496e-02 3.42580124e-02 3.43186212e-02 3.43790756e-02 3.44393755e-02 + 3.44995205e-02 3.45595102e-02 3.46193444e-02 3.46790229e-02 3.47385452e-02 + 3.47979112e-02 3.48571206e-02 3.49161731e-02 3.49750684e-02 3.50338063e-02 + 3.50923866e-02 3.51508090e-02 3.52090732e-02 3.52671790e-02 3.53251263e-02 + 3.53829147e-02 3.54405441e-02 3.54980142e-02 3.55553249e-02 3.56124759e-02 + 3.56694670e-02 3.57262982e-02 3.57829691e-02 3.58394796e-02 3.58958295e-02 + 3.59520187e-02 3.60080469e-02 3.60639141e-02 3.61196201e-02 3.61751647e-02 + 3.62305479e-02 3.62857693e-02 3.63408291e-02 3.63957269e-02 3.64504627e-02 + 3.65050364e-02 3.65594478e-02 3.66136969e-02 3.66677836e-02 3.67217077e-02 + 3.67754692e-02 3.68290680e-02 3.68825040e-02 3.69357771e-02 3.69888874e-02 + 3.70418346e-02 3.70946188e-02 3.71472399e-02 3.71996978e-02 3.72519925e-02 + 3.73041241e-02 3.73560923e-02 3.74078973e-02 3.74595390e-02 3.75110173e-02 + 3.75623323e-02 3.76134840e-02 3.76644723e-02 3.77152973e-02 3.77659589e-02 + 3.78164572e-02 3.78667922e-02 3.79169639e-02 3.79669723e-02 3.80168175e-02 + 3.80664996e-02 3.81160184e-02 3.81653742e-02 3.82145669e-02 3.82635966e-02 + 3.83124633e-02 3.83611672e-02 3.84097083e-02 3.84580867e-02 3.85063023e-02 + 3.85543555e-02 3.86022461e-02 3.86499744e-02 3.86975403e-02 3.87449441e-02 + 3.87921858e-02 3.88392655e-02 3.88861833e-02 3.89329394e-02 3.89795339e-02 + 3.90259669e-02 3.90722385e-02 3.91183489e-02 3.91642983e-02 3.92100867e-02 + 3.92557143e-02 3.93011813e-02 3.93464879e-02 3.93916341e-02 3.94366202e-02 + 3.94814463e-02 3.95261127e-02 3.95706194e-02 3.96149667e-02 3.96591547e-02 + 3.97031837e-02 3.97470539e-02 3.97907654e-02 3.98343184e-02 3.98777132e-02 + 3.99209500e-02 3.99640290e-02 4.00069503e-02 4.00497143e-02 4.00923212e-02 + 4.01347712e-02 4.01770645e-02 4.02192013e-02 4.02611820e-02 4.03030067e-02 + 4.03446757e-02 4.03861893e-02 4.04275477e-02 4.04687512e-02 4.05098001e-02 + 4.05506945e-02 4.05914349e-02 4.06320214e-02 4.06724544e-02 4.07127341e-02 + 4.07528608e-02 4.07928348e-02 4.08326564e-02 4.08723259e-02 4.09118437e-02 + 4.09512099e-02 4.09904249e-02 4.10294891e-02 4.10684027e-02 4.11071660e-02 + 4.11457795e-02 4.11842433e-02 4.12225579e-02 4.12607235e-02 4.12987405e-02 + 4.13366093e-02 4.13743301e-02 4.14119033e-02 4.14493293e-02 4.14866084e-02 + 4.15237410e-02 4.15607274e-02 4.15975680e-02 4.16342631e-02 4.16708131e-02 + 4.17072184e-02 4.17434793e-02 4.17795963e-02 4.18155696e-02 4.18513997e-02 + 4.18870870e-02 4.19226318e-02 4.19580345e-02 4.19932955e-02 4.20284153e-02 + 4.20633941e-02 4.20982324e-02 4.21329307e-02 4.21674892e-02 4.22019085e-02 + 4.22361889e-02 4.22703308e-02 4.23043346e-02 4.23382008e-02 4.23719298e-02 + 4.24055220e-02 4.24389778e-02 4.24722977e-02 4.25054820e-02 4.25385312e-02 + 4.25714458e-02 4.26042261e-02 4.26368727e-02 4.26693859e-02 4.27017662e-02 + 4.27340140e-02 4.27661298e-02 4.27981141e-02 4.28299672e-02 4.28616896e-02 + 4.28932819e-02 4.29247444e-02 4.29560775e-02 4.29872819e-02 4.30183578e-02 + 4.30493059e-02 4.30801265e-02 4.31108201e-02 4.31413873e-02 4.31718284e-02 + 4.32021439e-02 4.32323343e-02 4.32624002e-02 4.32923419e-02 4.33221599e-02 + 4.33518548e-02 4.33814270e-02 4.34108770e-02 4.34402053e-02 4.34694124e-02 + 4.34984988e-02 4.35274649e-02 4.35563113e-02 4.35850384e-02 4.36136467e-02 + 4.36421369e-02 4.36705092e-02 4.36987643e-02 4.37269027e-02 4.37549248e-02 + 4.37828312e-02 4.38106223e-02 4.38382987e-02 4.38658609e-02 4.38933094e-02 + 4.39206447e-02 4.39478673e-02 4.39749777e-02 4.40019765e-02 4.40288641e-02 + 4.40556412e-02 4.40823081e-02 4.41088654e-02 4.41353137e-02 4.41616534e-02 + 4.41878851e-02 4.42140094e-02 4.42400266e-02 4.42659374e-02 4.42917423e-02 + 4.43174418e-02 4.43430364e-02 4.43685267e-02 4.43939132e-02 4.44191965e-02 + 4.44443770e-02 4.44694552e-02 4.44944318e-02 4.45193073e-02 4.45440821e-02 + 4.45687569e-02 4.45933322e-02 4.46178084e-02 4.46421862e-02 4.46664660e-02 + 4.46906485e-02 4.47147341e-02 4.47387234e-02 4.47626169e-02 4.47864152e-02 + 4.48101188e-02 4.48337283e-02 4.48572441e-02 4.48806669e-02 4.49039972e-02 + 4.49272354e-02 4.49503823e-02 4.49734382e-02 4.49964038e-02 4.50192796e-02 + 4.50420661e-02 4.50647640e-02 4.50873736e-02 4.51098956e-02 4.51323305e-02 + 4.51546789e-02 4.51769413e-02 4.51991182e-02 4.52212103e-02 4.52432180e-02 + 4.52651419e-02 4.52869825e-02 4.53087404e-02 4.53304161e-02 4.53520102e-02 + 4.53735232e-02 4.53949557e-02 4.54163082e-02 4.54375812e-02 4.54587753e-02 + 4.54798911e-02 4.55009291e-02 4.55218898e-02 4.55427738e-02 4.55635817e-02 + 4.55843139e-02 4.56049710e-02 4.56255536e-02 4.56460622e-02 4.56664973e-02 + 4.56868595e-02 4.57071494e-02 4.57273674e-02 4.57475141e-02 4.57675901e-02 + 4.57875959e-02 4.58075321e-02 4.58273991e-02 4.58471976e-02 4.58669280e-02 + 4.58865909e-02 4.59061869e-02 4.59257165e-02 4.59451801e-02 4.59645785e-02 + 4.59839120e-02 4.60031812e-02 4.60223867e-02 4.60415291e-02 4.60606087e-02 + 4.60796262e-02 4.60985821e-02 4.61174770e-02 4.61363113e-02 4.61550856e-02 + 4.61738005e-02 4.61924564e-02 4.62110539e-02 4.62295935e-02 4.62480757e-02 + 4.62665012e-02 4.62848703e-02 4.63031836e-02 4.63214417e-02 4.63396451e-02 + 4.63577942e-02 4.63758897e-02 4.63939320e-02 4.64119217e-02 4.64298592e-02 + 4.64477452e-02 4.64655800e-02 4.64833643e-02 4.65010985e-02 4.65187832e-02 + 4.65364189e-02 4.65540060e-02 4.65715452e-02 4.65890368e-02 4.66064815e-02 + 4.66238797e-02 4.66412319e-02 4.66585387e-02 4.66758005e-02 4.66930179e-02 + 4.67101913e-02 4.67273213e-02 4.67444084e-02 4.67614530e-02 4.67784556e-02 + 4.67954169e-02 4.68123371e-02 4.68292170e-02 4.68460568e-02 4.68628572e-02 + 4.68796187e-02 4.68963416e-02 4.69130266e-02 4.69296740e-02 4.69462844e-02 + 4.69628583e-02 4.69793962e-02 4.69958985e-02 4.70123657e-02 4.70287983e-02 + 4.70451968e-02 4.70615616e-02 4.70778933e-02 4.70941923e-02 4.71104590e-02 + 4.71266940e-02 4.71428977e-02 4.71590707e-02 4.71752133e-02 4.71913260e-02 + 4.72074093e-02 4.72234637e-02 4.72394895e-02 4.72554874e-02 4.72714577e-02 + 4.72874010e-02 4.73033175e-02 4.73192079e-02 4.73350726e-02 4.73509120e-02 + 4.73667265e-02 4.73825167e-02 4.73982829e-02 4.74140257e-02 4.74297454e-02 + 4.74454425e-02 4.74611175e-02 4.74767708e-02 4.74924027e-02 4.75080139e-02 + 4.75236046e-02 4.75391754e-02 4.75547266e-02 4.75702588e-02 4.75857722e-02 + 4.76012674e-02 4.76167448e-02 4.76322048e-02 4.76476478e-02 4.76630743e-02 + 4.76784846e-02 4.76938792e-02 4.77092586e-02 4.77246230e-02 4.77399730e-02 + 4.77553089e-02 4.77706311e-02 4.77859401e-02 4.78012363e-02 4.78165201e-02 + 4.78317918e-02 4.78470519e-02 4.78623007e-02 4.78775388e-02 4.78927664e-02 + 4.79079840e-02 4.79231919e-02 4.79383906e-02 4.79535804e-02 4.79687617e-02 + 4.79839349e-02 4.79991005e-02 4.80142587e-02 4.80294099e-02 4.80445546e-02 + 4.80596931e-02 4.80748258e-02 4.80899530e-02 4.81050752e-02 4.81201927e-02 + 4.81353058e-02 4.81504150e-02 4.81655206e-02 4.81806229e-02 4.81957224e-02 + 4.82108194e-02 4.82259141e-02 4.82410071e-02 4.82560987e-02 4.82711891e-02 + 4.82862788e-02 4.83013681e-02 4.83164573e-02 4.83315468e-02 4.83466369e-02 + 4.83617281e-02 4.83768205e-02 4.83919146e-02 4.84070107e-02 4.84221091e-02 + 4.84372101e-02 4.84523141e-02 4.84674214e-02 4.84825324e-02 4.84976473e-02 + 4.85127665e-02 4.85278903e-02 4.85430190e-02 4.85581530e-02 4.85732925e-02 + 4.85884379e-02 4.86035894e-02 4.86187475e-02 4.86339123e-02 4.86490843e-02 + 4.86642636e-02 4.86794506e-02 4.86946457e-02 4.87098490e-02 4.87250610e-02 + 4.87402818e-02 4.87555118e-02 4.87707513e-02 4.87860006e-02 4.88012599e-02 + 4.88165295e-02 4.88318098e-02 4.88471010e-02 4.88624033e-02 4.88777171e-02 + 4.88930427e-02 4.89083802e-02 4.89237301e-02 4.89390924e-02 4.89544676e-02 + 4.89698559e-02 4.89852575e-02 4.90006728e-02 4.90161019e-02 4.90315451e-02 + 4.90470027e-02 4.90624750e-02 4.90779621e-02 4.90934644e-02 4.91089821e-02 + 4.91245154e-02 4.91400646e-02 4.91556299e-02 4.91712116e-02 4.91868099e-02 + 4.92024251e-02 4.92180573e-02 4.92337069e-02 4.92493740e-02 4.92650589e-02 + 4.92807617e-02 4.92964829e-02 4.93122225e-02 4.93279807e-02 4.93437579e-02 + 4.93595542e-02 4.93753698e-02 4.93912050e-02 4.94070600e-02 4.94229349e-02 + 4.94388300e-02 4.94547455e-02 4.94706817e-02 4.94866386e-02 4.95026165e-02 + 4.95186157e-02 4.95346362e-02 4.95506784e-02 4.95667423e-02 4.95828283e-02 + 4.95989364e-02 4.96150669e-02 4.96312200e-02 4.96473958e-02 4.96635945e-02 + 4.96798164e-02 4.96960615e-02 4.97123302e-02 4.97286224e-02 4.97449385e-02 + 4.97612786e-02 4.97776428e-02 4.97940314e-02 4.98104445e-02 4.98268822e-02 + 4.98433448e-02 4.98598324e-02 4.98763451e-02 4.98928831e-02 4.99094466e-02 + 4.99260357e-02 4.99426506e-02 4.99592915e-02 4.99759584e-02 4.99926515e-02 + 5.00093710e-02 5.00261170e-02 5.00428897e-02 5.00596891e-02 5.00765155e-02 + 5.00933690e-02 5.01102496e-02 5.01271576e-02 5.01440931e-02 5.01610562e-02 + 5.01780470e-02 5.01950657e-02 5.02121123e-02 5.02291871e-02 5.02462901e-02 + 5.02634214e-02 5.02805812e-02 5.02977695e-02 5.03149866e-02 5.03322324e-02 + 5.03495072e-02 5.03668110e-02 5.03841439e-02 5.04015061e-02 5.04188976e-02 + 5.04363186e-02 5.04537691e-02 5.04712492e-02 5.04887591e-02 5.05062988e-02 + 5.05238684e-02 5.05414681e-02 5.05590979e-02 5.05767579e-02 5.05944482e-02 + 5.06121688e-02 5.06299199e-02 5.06477016e-02 5.06655138e-02 5.06833568e-02 + 5.07012306e-02 5.07191352e-02 5.07370707e-02 5.07550372e-02 5.07730348e-02 + 5.07910636e-02 5.08091236e-02 5.08272148e-02 5.08453374e-02 5.08634913e-02 + 5.08816768e-02 5.08998937e-02 5.09181423e-02 5.09364225e-02 5.09547343e-02 + 5.09730780e-02 5.09914534e-02 5.10098606e-02 5.10282998e-02 5.10467709e-02 + 5.10652740e-02 5.10838092e-02 5.11023764e-02 5.11209757e-02 5.11396072e-02 + 5.11582709e-02 5.11769668e-02 5.11956950e-02 5.12144555e-02 5.12332483e-02 + 5.12520735e-02 5.12709311e-02 5.12898211e-02 5.13087435e-02 5.13276985e-02 + 5.13466859e-02 5.13657058e-02 5.13847583e-02 5.14038433e-02 5.14229609e-02 + 5.14421111e-02 5.14612939e-02 5.14805093e-02 5.14997573e-02 5.15190380e-02 + 5.15383513e-02 5.15576973e-02 5.15770759e-02 5.15964872e-02 5.16159312e-02 + 5.16354078e-02 5.16549172e-02 5.16744591e-02 5.16940338e-02 5.17136411e-02 + 5.17332811e-02 5.17529537e-02 5.17726590e-02 5.17923969e-02 5.18121674e-02 + 5.18319706e-02 5.18518063e-02 5.18716747e-02 5.18915756e-02 5.19115090e-02 + 5.19314750e-02 5.19514735e-02 5.19715045e-02 5.19915680e-02 5.20116639e-02 + 5.20317923e-02 5.20519530e-02 5.20721462e-02 5.20923716e-02 5.21126294e-02 + 5.21329194e-02 5.21532417e-02 5.21735963e-02 5.21939830e-02 5.22144018e-02 + 5.22348528e-02 5.22553358e-02 5.22758508e-02 5.22963979e-02 5.23169769e-02 + 5.23375877e-02 5.23582305e-02 5.23789050e-02 5.23996114e-02 5.24203494e-02 + 5.24411191e-02 5.24619205e-02 5.24827534e-02 5.25036178e-02 5.25245136e-02 + 5.25454409e-02 5.25663995e-02 5.25873895e-02 5.26084106e-02 5.26294630e-02 + 5.26505464e-02 5.26716609e-02 5.26928064e-02 5.27139828e-02 5.27351901e-02 + 5.27564281e-02 5.27776969e-02 5.27989964e-02 5.28203265e-02 5.28416870e-02 + 5.28630781e-02 5.28844995e-02 5.29059512e-02 5.29274331e-02 5.29489452e-02 + 5.29704874e-02 5.29920595e-02 5.30136616e-02 5.30352936e-02 5.30569552e-02 + 5.30786466e-02 5.31003676e-02 5.31221181e-02 5.31438980e-02 5.31657073e-02 + 5.31875458e-02 5.32094135e-02 5.32313103e-02 5.32532361e-02 5.32751908e-02 + 5.32971743e-02 5.33191865e-02 5.33412273e-02 5.33632967e-02 5.33853945e-02 + 5.34075207e-02 5.34296751e-02 5.34518577e-02 5.34740683e-02 5.34963069e-02 + 5.35185733e-02 5.35408675e-02 5.35631893e-02 5.35855387e-02 5.36079155e-02 + 5.36303197e-02 5.36527511e-02 5.36752097e-02 5.36976952e-02 5.37202077e-02 + 5.37427470e-02 5.37653129e-02 5.37879055e-02 5.38105245e-02 5.38331699e-02 + 5.38558416e-02 5.38785394e-02 5.39012632e-02 5.39240130e-02 5.39467885e-02 + 5.39695897e-02 5.39924165e-02 5.40152687e-02 5.40381462e-02 5.40610490e-02 + 5.40839768e-02 5.41069296e-02 5.41299073e-02 5.41529097e-02 5.41759366e-02 + 5.41989881e-02 5.42220639e-02 5.42451639e-02 5.42682880e-02 5.42914361e-02 + 5.43146081e-02 5.43378038e-02 5.43610230e-02 5.43842658e-02 5.44075318e-02 + 5.44308211e-02 5.44541334e-02 5.44774687e-02 5.45008268e-02 5.45242076e-02 + 5.45476109e-02 5.45710366e-02 5.45944846e-02 5.46179548e-02 5.46414469e-02 + 5.46649609e-02 5.46884967e-02 5.47120540e-02 5.47356328e-02 5.47592329e-02 + 5.47828542e-02 5.48064965e-02 5.48301598e-02 5.48538438e-02 5.48775484e-02 + 5.49012734e-02 5.49250188e-02 5.49487844e-02 5.49725701e-02 5.49963756e-02 + 5.50202009e-02 5.50440459e-02 5.50679102e-02 5.50917939e-02 5.51156968e-02 + 5.51396187e-02 5.51635595e-02 5.51875190e-02 5.52114972e-02 5.52354937e-02 + 5.52595085e-02 5.52835415e-02 5.53075925e-02 5.53316613e-02 5.53557477e-02 + 5.53798517e-02 5.54039731e-02 5.54281118e-02 5.54522675e-02 5.54764401e-02 + 5.55006295e-02 5.55248356e-02 5.55490581e-02 5.55732969e-02 5.55975518e-02 + 5.56218228e-02 5.56461096e-02 5.56704121e-02 5.56947301e-02 5.57190635e-02 + 5.57434121e-02 5.57677758e-02 5.57921544e-02 5.58165477e-02 5.58409556e-02 + 5.58653780e-02 5.58898146e-02 5.59142653e-02 5.59387300e-02 5.59632085e-02 + 5.59877006e-02 5.60122062e-02 5.60367251e-02 5.60612571e-02 5.60858022e-02 + 5.61103600e-02 5.61349306e-02 5.61595136e-02 5.61841090e-02 5.62087165e-02 + 5.62333361e-02 5.62579675e-02 5.62826106e-02 5.63072653e-02 5.63319313e-02 + 5.63566085e-02 5.63812967e-02 5.64059958e-02 5.64307057e-02 5.64554260e-02 + 5.64801568e-02 5.65048977e-02 5.65296487e-02 5.65544096e-02 5.65791802e-02 + 5.66039604e-02 5.66287499e-02 5.66535486e-02 5.66783565e-02 5.67031732e-02 + 5.67279986e-02 5.67528326e-02 5.67776749e-02 5.68025255e-02 5.68273841e-02 + 5.68522507e-02 5.68771249e-02 5.69020067e-02 5.69268959e-02 5.69517923e-02 + 5.69766957e-02 5.70016060e-02 5.70265231e-02 5.70514466e-02 5.70763766e-02 + 5.71013128e-02 5.71262550e-02 5.71512031e-02 5.71761569e-02 5.72011162e-02 + 5.72260809e-02 5.72510508e-02 5.72760258e-02 5.73010056e-02 5.73259901e-02 + 1.00620653e-03 1.00255052e-03 9.99023948e-04 9.95625443e-04 9.92353626e-04 + 9.89207121e-04 9.86184556e-04 9.83284559e-04 9.80505761e-04 9.77846796e-04 + 9.75306299e-04 9.72882909e-04 9.70575266e-04 9.68382011e-04 9.66301792e-04 + 9.64333255e-04 9.62475050e-04 9.60725831e-04 9.59084254e-04 9.57548976e-04 + 9.56118659e-04 9.54791967e-04 9.53567567e-04 9.52444128e-04 9.51420323e-04 + 9.50494828e-04 9.49666323e-04 9.48933488e-04 9.48295009e-04 9.47749574e-04 + 9.47295876e-04 9.46932608e-04 9.46658469e-04 9.46472162e-04 9.46372390e-04 + 9.46357863e-04 9.46427293e-04 9.46579395e-04 9.46812890e-04 9.47126499e-04 + 9.47518951e-04 9.47988975e-04 9.48535306e-04 9.49156682e-04 9.49851846e-04 + 9.50619543e-04 9.51458524e-04 9.52367543e-04 9.53345359e-04 9.54390732e-04 + 9.55502431e-04 9.56679226e-04 9.57919892e-04 9.59223209e-04 9.60587959e-04 + 9.62012932e-04 9.63496920e-04 9.65038719e-04 9.66637132e-04 9.68290964e-04 + 9.69999026e-04 9.71760133e-04 9.73573106e-04 9.75436769e-04 9.77349952e-04 + 9.79311488e-04 9.81320218e-04 9.83374984e-04 9.85474636e-04 9.87618028e-04 + 9.89804019e-04 9.92031472e-04 9.94299257e-04 9.96606248e-04 9.98951323e-04 + 1.00133337e-03 1.00375127e-03 1.00620393e-03 1.00869024e-03 1.01120911e-03 + 1.01375946e-03 1.01634019e-03 1.01895022e-03 1.02158850e-03 1.02425394e-03 + 1.02694549e-03 1.02966209e-03 1.03240269e-03 1.03516625e-03 1.03795173e-03 + 1.04075808e-03 1.04358430e-03 1.04642934e-03 1.04929221e-03 1.05217188e-03 + 1.05506735e-03 1.05797763e-03 1.06090172e-03 1.06383864e-03 1.06678740e-03 + 1.06974703e-03 1.07271657e-03 1.07569504e-03 1.07868150e-03 1.08167499e-03 + 1.08467457e-03 1.08767930e-03 1.09068826e-03 1.09370050e-03 1.09671513e-03 + 1.09973122e-03 1.10274787e-03 1.10576417e-03 1.10877925e-03 1.11179220e-03 + 1.11480214e-03 1.11780821e-03 1.12080954e-03 1.12380526e-03 1.12679452e-03 + 1.12977647e-03 1.13275028e-03 1.13571510e-03 1.13867011e-03 1.14161449e-03 + 1.14454743e-03 1.14746810e-03 1.15037572e-03 1.15326950e-03 1.15614863e-03 + 1.15901234e-03 1.16185987e-03 1.16469043e-03 1.16750327e-03 1.17029764e-03 + 1.17307279e-03 1.17582798e-03 1.17856248e-03 1.18127556e-03 1.18396651e-03 + 1.18663461e-03 1.18927915e-03 1.19189945e-03 1.19449481e-03 1.19706454e-03 + 1.19960797e-03 1.20212444e-03 1.20461327e-03 1.20707382e-03 1.20950543e-03 + 1.21190746e-03 1.21427929e-03 1.21662028e-03 1.21892982e-03 1.22120730e-03 + 1.22345210e-03 1.22566363e-03 1.22784131e-03 1.22998454e-03 1.23209276e-03 + 1.23416539e-03 1.23620187e-03 1.23820166e-03 1.24016420e-03 1.24208895e-03 + 1.24397538e-03 1.24582297e-03 1.24763120e-03 1.24939956e-03 1.25112755e-03 + 1.25281468e-03 1.25446045e-03 1.25606438e-03 1.25762601e-03 1.25914486e-03 + 1.26062049e-03 1.26205243e-03 1.26344025e-03 1.26478351e-03 1.26608178e-03 + 1.26733464e-03 1.26854167e-03 1.26970248e-03 1.27081666e-03 1.27188382e-03 + 1.27290358e-03 1.27387557e-03 1.27479940e-03 1.27567473e-03 1.27650119e-03 + 1.27727845e-03 1.27800616e-03 1.27868399e-03 1.27931162e-03 1.27988873e-03 + 1.28041501e-03 1.28089017e-03 1.28131390e-03 1.28168592e-03 1.28200595e-03 + 1.28227372e-03 1.28248896e-03 1.28265143e-03 1.28276086e-03 1.28281702e-03 + 1.28281967e-03 1.28276859e-03 1.28266356e-03 1.28250436e-03 1.28229079e-03 + 1.28202265e-03 1.28169975e-03 1.28132192e-03 1.28088897e-03 1.28040073e-03 + 1.27985706e-03 1.27925778e-03 1.27860277e-03 1.27789188e-03 1.27712498e-03 + 1.27630194e-03 1.27542266e-03 1.27448701e-03 1.27349491e-03 1.27244625e-03 + 1.27134095e-03 1.27017894e-03 1.26896013e-03 1.26768446e-03 1.26635188e-03 + 1.26496233e-03 1.26351578e-03 1.26201218e-03 1.26045150e-03 1.25883373e-03 + 1.25715886e-03 1.25542686e-03 1.25363775e-03 1.25179153e-03 1.24988822e-03 + 1.24792783e-03 1.24591040e-03 1.24383596e-03 1.24170455e-03 1.23951622e-03 + 1.23727103e-03 1.23496905e-03 1.23261034e-03 1.23019498e-03 1.22772306e-03 + 1.22519466e-03 1.22260990e-03 1.21996886e-03 1.21727167e-03 1.21451845e-03 + 1.21170931e-03 1.20884440e-03 1.20592385e-03 1.20294782e-03 1.19991644e-03 + 1.19682989e-03 1.19368834e-03 1.19049194e-03 1.18724090e-03 1.18393538e-03 + 1.18057559e-03 1.17716173e-03 1.17369400e-03 1.17017262e-03 1.16659781e-03 + 1.16296979e-03 1.15928880e-03 1.15555508e-03 1.15176888e-03 1.14793044e-03 + 1.14404003e-03 1.14009791e-03 1.13610436e-03 1.13205965e-03 1.12796407e-03 + 1.12381791e-03 1.11962146e-03 1.11537504e-03 1.11107895e-03 1.10673350e-03 + 1.10233903e-03 1.09789585e-03 1.09340430e-03 1.08886473e-03 1.08427748e-03 + 1.07964290e-03 1.07496136e-03 1.07023321e-03 1.06545883e-03 1.06063860e-03 + 1.05577290e-03 1.05086212e-03 1.04590664e-03 1.04090688e-03 1.03586324e-03 + 1.03077613e-03 1.02564597e-03 1.02047319e-03 1.01525820e-03 1.01000145e-03 + 1.00470338e-03 9.99364439e-04 9.93985069e-04 9.88565732e-04 9.83106891e-04 + 9.77609014e-04 9.72072576e-04 9.66498055e-04 9.60885935e-04 9.55236707e-04 + 9.49550867e-04 9.43828914e-04 9.38071354e-04 9.32278699e-04 9.26451464e-04 + 9.20590172e-04 9.14695348e-04 9.08767525e-04 9.02807239e-04 8.96815032e-04 + 8.90791450e-04 8.84737045e-04 8.78652374e-04 8.72537999e-04 8.66394486e-04 + 8.60222405e-04 8.54022334e-04 8.47794853e-04 8.41540547e-04 8.35260007e-04 + 8.28953828e-04 8.22622608e-04 8.16266953e-04 8.09887470e-04 8.03484774e-04 + 7.97059481e-04 7.90612214e-04 7.84143599e-04 7.77654267e-04 7.71144854e-04 + 7.64615998e-04 7.58068344e-04 7.51502540e-04 7.44919239e-04 7.38319095e-04 + 7.31702770e-04 7.25070930e-04 7.18424241e-04 7.11763377e-04 7.05089015e-04 + 6.98401835e-04 6.91702521e-04 6.84991763e-04 6.78270252e-04 6.71538685e-04 + 6.64797760e-04 6.58048182e-04 6.51290658e-04 6.44525898e-04 6.37754617e-04 + 6.30977533e-04 6.24195368e-04 6.17408846e-04 6.10618696e-04 6.03825649e-04 + 5.97030442e-04 5.90233812e-04 5.83436502e-04 5.76639257e-04 5.69842825e-04 + 5.63047957e-04 5.56255409e-04 5.49465938e-04 5.42680306e-04 5.35899276e-04 + 5.29123615e-04 5.22354093e-04 5.15591483e-04 5.08836561e-04 5.02090105e-04 + 4.95352897e-04 4.88625721e-04 4.81909363e-04 4.75204614e-04 4.68512265e-04 + 4.61833112e-04 4.55167951e-04 4.48517583e-04 4.41882809e-04 4.35264436e-04 + 4.28663270e-04 4.22080121e-04 4.15515801e-04 4.08971125e-04 4.02446908e-04 + 3.95943970e-04 3.89463132e-04 3.83005216e-04 3.76571049e-04 3.70161457e-04 + 3.63777270e-04 3.57419319e-04 3.51088437e-04 3.44785461e-04 3.38511226e-04 + 3.32266571e-04 3.26052338e-04 3.19869369e-04 3.13718508e-04 3.07600601e-04 + 3.01516496e-04 2.95467041e-04 2.89453087e-04 2.83475487e-04 2.77535094e-04 + 2.71632764e-04 2.65769353e-04 2.59945718e-04 2.54162720e-04 2.48421219e-04 + 2.42722076e-04 2.37066155e-04 2.31454320e-04 2.25887436e-04 2.20366370e-04 + 2.14891990e-04 2.09465163e-04 2.04086760e-04 1.98757651e-04 1.93478708e-04 + 1.88250802e-04 1.83074808e-04 1.77951598e-04 1.72882048e-04 1.67867034e-04 + 1.62907431e-04 1.58004116e-04 1.53157967e-04 1.48369861e-04 1.43640677e-04 + 1.38971295e-04 1.34362593e-04 1.29815453e-04 1.25330753e-04 1.20909375e-04 + 1.16552200e-04 1.12260108e-04 1.08033983e-04 1.03874705e-04 9.97831561e-05 + 9.57602188e-05 9.18067751e-05 8.79237073e-05 8.41118977e-05 8.03722285e-05 + 7.67055819e-05 7.31128402e-05 6.95948854e-05 6.61525994e-05 6.27868638e-05 + 5.94985602e-05 5.62885699e-05 5.31577737e-05 5.01070524e-05 4.71372862e-05 + 4.42493550e-05 4.14441382e-05 3.87225148e-05 3.60853634e-05 3.35335619e-05 + 3.10679877e-05 2.86895177e-05 2.63990279e-05 2.41973939e-05 2.20854906e-05 + 2.00641919e-05 1.81343712e-05 1.62969011e-05 1.45526531e-05 1.29024982e-05 + 1.13473061e-05 9.88794601e-06 8.52528582e-06 7.26019257e-06 6.09353228e-06 + 5.02616987e-06 4.05896918e-06 3.19279295e-06 2.42850273e-06 1.76695890e-06 + 1.20902060e-06 7.55545761e-07 4.07390992e-07 1.65411606e-07 3.04615724e-08 + 3.39348389e-09 8.50585289e-08 2.76306460e-07 5.77985565e-07 9.90942636e-07 + 1.51602294e-06 2.15407018e-06 2.90592648e-06 3.77243237e-06 4.75442669e-06 + 5.85274664e-06 7.06822772e-06 8.40170368e-06 9.85400651e-06 1.14259664e-05 + 1.31184118e-05 1.49321693e-05 1.68680634e-05 1.89269170e-05 2.11095509e-05 + 2.34167840e-05 2.58494332e-05 2.84083134e-05 3.10942374e-05 3.39080161e-05 + 3.68504581e-05 3.99223700e-05 4.31245562e-05 4.64578189e-05 4.99229584e-05 + 5.35207723e-05 5.72520562e-05 6.11176036e-05 6.51182053e-05 6.92546501e-05 + 7.35277243e-05 7.79382119e-05 8.24868944e-05 8.71745510e-05 9.20019583e-05 + 9.69698906e-05 1.02079120e-04 1.07330414e-04 1.12724542e-04 1.18262266e-04 + 1.23944348e-04 1.29771547e-04 1.35744619e-04 1.41864318e-04 1.48131395e-04 + 1.54546598e-04 1.61110672e-04 1.67824360e-04 1.74688402e-04 1.81703535e-04 + 1.88870494e-04 1.96190010e-04 2.03662811e-04 2.11289624e-04 2.19071171e-04 + 2.27008173e-04 2.35101346e-04 2.43351404e-04 2.51759058e-04 2.60325017e-04 + 2.69049986e-04 2.77934666e-04 2.86979757e-04 2.96185954e-04 3.05553951e-04 + 3.15084436e-04 3.24778097e-04 3.34635617e-04 3.44657676e-04 3.54844951e-04 + 3.65198117e-04 3.75717843e-04 3.86404797e-04 3.97259643e-04 4.08283043e-04 + 4.19475653e-04 4.30838128e-04 4.42371119e-04 4.54075273e-04 4.65951236e-04 + 4.77999647e-04 4.90221144e-04 5.02616361e-04 5.15185930e-04 5.27930476e-04 + 5.40850625e-04 5.53946996e-04 5.67220207e-04 5.80670870e-04 5.94299595e-04 + 6.08106990e-04 6.22093656e-04 6.36260194e-04 6.50607198e-04 6.65135261e-04 + 6.79844972e-04 6.94736916e-04 7.09811673e-04 7.25069822e-04 7.40511938e-04 + 7.56138589e-04 7.71950344e-04 7.87947765e-04 8.04131412e-04 8.20501840e-04 + 8.37059603e-04 8.53805247e-04 8.70739319e-04 8.87862358e-04 9.05174902e-04 + 9.22677484e-04 9.40370635e-04 9.58254879e-04 9.76330739e-04 9.94598734e-04 + 1.01305938e-03 1.03171318e-03 1.05056065e-03 1.06960229e-03 1.08883860e-03 + 1.10827007e-03 1.12789720e-03 1.14772047e-03 1.16774037e-03 1.18795737e-03 + 1.20837196e-03 1.22898460e-03 1.24979577e-03 1.27080593e-03 1.29201553e-03 + 1.31342504e-03 1.33503491e-03 1.35684558e-03 1.37885750e-03 1.40107112e-03 + 1.42348686e-03 1.44610516e-03 1.46892646e-03 1.49195117e-03 1.51517972e-03 + 1.53861252e-03 1.56224999e-03 1.58609253e-03 1.61014056e-03 1.63439447e-03 + 1.65885465e-03 1.68352151e-03 1.70839543e-03 1.73347680e-03 1.75876600e-03 + 1.78426340e-03 1.80996937e-03 1.83588430e-03 1.86200854e-03 1.88834245e-03 + 1.91488639e-03 1.94164072e-03 1.96860578e-03 1.99578192e-03 2.02316948e-03 + 2.05076879e-03 2.07858019e-03 2.10660401e-03 2.13484057e-03 2.16329019e-03 + 2.19195320e-03 2.22082990e-03 2.24992060e-03 2.27922561e-03 2.30874522e-03 + 2.33847974e-03 2.36842945e-03 2.39859465e-03 2.42897563e-03 2.45957265e-03 + 2.49038600e-03 2.52141594e-03 2.55266276e-03 2.58412671e-03 2.61580805e-03 + 2.64770705e-03 2.67982394e-03 2.71215899e-03 2.74471243e-03 2.77748450e-03 + 2.81047545e-03 2.84368550e-03 2.87711489e-03 2.91076383e-03 2.94463255e-03 + 2.97872127e-03 3.01303019e-03 3.04755952e-03 3.08230948e-03 3.11728026e-03 + 3.15247205e-03 3.18788505e-03 3.22351945e-03 3.25937543e-03 3.29545318e-03 + 3.33175287e-03 3.36827467e-03 3.40501875e-03 3.44198528e-03 3.47917442e-03 + 3.51658632e-03 3.55422114e-03 3.59207903e-03 3.63016014e-03 3.66846460e-03 + 3.70699255e-03 3.74574412e-03 3.78471946e-03 3.82391867e-03 3.86334189e-03 + 3.90298923e-03 3.94286081e-03 3.98295674e-03 4.02327712e-03 4.06382206e-03 + 4.10459166e-03 4.14558600e-03 4.18680519e-03 4.22824932e-03 4.26991845e-03 + 4.31181268e-03 4.35393209e-03 4.39627673e-03 4.43884669e-03 4.48164203e-03 + 4.52466280e-03 4.56790908e-03 4.61138090e-03 4.65507832e-03 4.69900139e-03 + 4.74315015e-03 4.78752464e-03 4.83212489e-03 4.87695094e-03 4.92200281e-03 + 4.96728053e-03 5.01278412e-03 5.05851360e-03 5.10446898e-03 5.15065026e-03 + 5.19705746e-03 5.24369058e-03 5.29054962e-03 5.33763456e-03 5.38494542e-03 + 5.43248217e-03 5.48024479e-03 5.52823328e-03 5.57644760e-03 5.62488773e-03 + 5.67355365e-03 5.72244531e-03 5.77156269e-03 5.82090574e-03 5.87047443e-03 + 5.92026869e-03 5.97028849e-03 6.02053378e-03 6.07100448e-03 6.12170055e-03 + 6.17262192e-03 6.22376853e-03 6.27514030e-03 6.32673715e-03 6.37855902e-03 + 6.43060582e-03 6.48287747e-03 6.53537388e-03 6.58809496e-03 6.64104062e-03 + 6.69421076e-03 6.74760528e-03 6.80122408e-03 6.85506705e-03 6.90913408e-03 + 6.96342506e-03 7.01793987e-03 7.07267840e-03 7.12764051e-03 7.18282609e-03 + 7.23823501e-03 7.29386713e-03 7.34972232e-03 7.40580044e-03 7.46210136e-03 + 7.51862492e-03 7.57537097e-03 7.63233938e-03 7.68952998e-03 7.74694262e-03 + 7.80457714e-03 7.86243338e-03 7.92051116e-03 7.97881033e-03 8.03733072e-03 + 8.09607214e-03 8.15503442e-03 8.21421738e-03 8.27362084e-03 8.33324462e-03 + 8.39308851e-03 8.45315234e-03 8.51343590e-03 8.57393901e-03 8.63466145e-03 + 8.69560304e-03 8.75676355e-03 8.81814279e-03 8.87974054e-03 8.94155659e-03 + 9.00359072e-03 9.06584271e-03 9.12831235e-03 9.19099940e-03 9.25390364e-03 + 9.31702483e-03 9.38036276e-03 9.44391717e-03 9.50768784e-03 9.57167452e-03 + 9.63587697e-03 9.70029495e-03 9.76492820e-03 9.82977647e-03 9.89483952e-03 + 9.96011708e-03 1.00256089e-02 1.00913147e-02 1.01572343e-02 1.02233673e-02 + 1.02897135e-02 1.03562727e-02 1.04230445e-02 1.04900287e-02 1.05572250e-02 + 1.06246331e-02 1.06922528e-02 1.07600837e-02 1.08281256e-02 1.08963781e-02 + 1.09648411e-02 1.10335142e-02 1.11023970e-02 1.11714894e-02 1.12407909e-02 + 1.13103014e-02 1.13800204e-02 1.14499478e-02 1.15200831e-02 1.15904261e-02 + 1.16609764e-02 1.17317338e-02 1.18026978e-02 1.18738683e-02 1.19452449e-02 + 1.20168272e-02 1.20886149e-02 1.21606078e-02 1.22328054e-02 1.23052074e-02 + 1.23778136e-02 1.24506235e-02 1.25236368e-02 1.25968532e-02 1.26702724e-02 + 1.27438940e-02 1.28177176e-02 1.28917429e-02 1.29659696e-02 1.30403973e-02 + 1.31150256e-02 1.31898543e-02 1.32648829e-02 1.33401111e-02 1.34155385e-02 + 1.34911647e-02 1.35669895e-02 1.36430124e-02 1.37192330e-02 1.37956511e-02 + 1.38722662e-02 1.39490779e-02 1.40260859e-02 1.41032898e-02 1.41806892e-02 + 1.42582838e-02 1.43360731e-02 1.44140568e-02 1.44922346e-02 1.45706059e-02 + 1.46491705e-02 1.47279279e-02 1.48068777e-02 1.48860196e-02 1.49653532e-02 + 1.50448780e-02 1.51245937e-02 1.52044999e-02 1.52845962e-02 1.53648821e-02 + 1.54453573e-02 1.55260214e-02 1.56068740e-02 1.56879146e-02 1.57691428e-02 + 1.58505584e-02 1.59321607e-02 1.60139495e-02 1.60959243e-02 1.61780847e-02 + 1.62604303e-02 1.63429606e-02 1.64256753e-02 1.65085740e-02 1.65916561e-02 + 1.66749213e-02 1.67583692e-02 1.68419994e-02 1.69258114e-02 1.70098048e-02 + 1.70939791e-02 1.71783340e-02 1.72628690e-02 1.73475837e-02 1.74324776e-02 + 1.75175503e-02 1.76028015e-02 1.76882306e-02 1.77738372e-02 1.78596209e-02 + 1.79455812e-02 1.80317177e-02 1.81180300e-02 1.82045176e-02 1.82911801e-02 + 1.83780171e-02 1.84650280e-02 1.85522125e-02 1.86395701e-02 1.87271004e-02 + 1.88148029e-02 1.89026771e-02 1.89907227e-02 1.90789392e-02 1.91673260e-02 + 1.92558829e-02 1.93446092e-02 1.94335047e-02 1.95225687e-02 1.96118009e-02 + 1.97012008e-02 1.97907680e-02 1.98805019e-02 1.99704022e-02 2.00604684e-02 + 2.01507000e-02 2.02410965e-02 2.03316576e-02 2.04223827e-02 2.05132714e-02 + 2.06043232e-02 2.06955376e-02 2.07869143e-02 2.08784526e-02 2.09701523e-02 + 2.10620128e-02 2.11540335e-02 2.12462142e-02 2.13385543e-02 2.14310533e-02 + 2.15237108e-02 2.16165263e-02 2.17094993e-02 2.18026294e-02 2.18959161e-02 + 2.19893590e-02 2.20829575e-02 2.21767111e-02 2.22706196e-02 2.23646822e-02 + 2.24588986e-02 2.25532684e-02 2.26477909e-02 2.27424659e-02 2.28372927e-02 + 2.29322709e-02 2.30274000e-02 2.31226797e-02 2.32181093e-02 2.33136884e-02 + 2.34094166e-02 2.35052933e-02 2.36013181e-02 2.36974906e-02 2.37938101e-02 + 2.38902764e-02 2.39868888e-02 2.40836469e-02 2.41805503e-02 2.42775984e-02 + 2.43747907e-02 2.44721269e-02 2.45696064e-02 2.46672287e-02 2.47649934e-02 + 2.48629000e-02 2.49609479e-02 2.50591368e-02 2.51574662e-02 2.52559355e-02 + 2.53545443e-02 2.54532921e-02 2.55521784e-02 2.56512028e-02 2.57503647e-02 + 2.58496638e-02 2.59490994e-02 2.60486712e-02 2.61483786e-02 2.62482212e-02 + 2.63481985e-02 2.64483100e-02 2.65485552e-02 2.66489337e-02 2.67494450e-02 + 2.68500885e-02 2.69508639e-02 2.70517706e-02 2.71528081e-02 2.72539760e-02 + 2.73552738e-02 2.74567010e-02 2.75582572e-02 2.76599418e-02 2.77617544e-02 + 2.78636944e-02 2.79657615e-02 2.80679551e-02 2.81702748e-02 2.82727200e-02 + 2.83752904e-02 2.84779854e-02 2.85808045e-02 2.86837473e-02 2.87868132e-02 + 2.88900019e-02 2.89933128e-02 2.90967454e-02 2.92002993e-02 2.93039741e-02 + 2.94077691e-02 2.95116840e-02 2.96157182e-02 2.97198713e-02 2.98241429e-02 + 2.99285324e-02 3.00330393e-02 3.01376632e-02 3.02424037e-02 3.03472601e-02 + 3.04522321e-02 3.05573193e-02 3.06625210e-02 3.07678368e-02 3.08732664e-02 + 3.09788091e-02 3.10844645e-02 3.11902322e-02 3.12961116e-02 3.14021023e-02 + 3.15082039e-02 3.16144158e-02 3.17207376e-02 3.18271688e-02 3.19337090e-02 + 3.20403576e-02 3.21471143e-02 3.22539784e-02 3.23609496e-02 3.24680275e-02 + 3.25752114e-02 3.26825010e-02 3.27898958e-02 3.28973953e-02 3.30049991e-02 + 3.31127066e-02 3.32205175e-02 3.33284313e-02 3.34364474e-02 3.35445654e-02 + 3.36527849e-02 3.37611055e-02 3.38695265e-02 3.39780476e-02 3.40866684e-02 + 3.41953882e-02 3.43042068e-02 3.44131236e-02 3.45221381e-02 3.46312500e-02 + 3.47404586e-02 3.48497637e-02 3.49591647e-02 3.50686612e-02 3.51782526e-02 + 3.52879386e-02 3.53977187e-02 3.55075924e-02 3.56175594e-02 3.57276190e-02 + 3.58377709e-02 3.59480146e-02 3.60583497e-02 3.61687756e-02 3.62792920e-02 + 3.63898985e-02 3.65005944e-02 3.66113795e-02 3.67222532e-02 3.68332151e-02 + 3.69442647e-02 3.70554017e-02 3.71666254e-02 3.72779356e-02 3.73893317e-02 + 3.75008133e-02 3.76123800e-02 3.77240313e-02 3.78357668e-02 3.79475859e-02 + 3.80594883e-02 3.81714736e-02 3.82835413e-02 3.83956909e-02 3.85079219e-02 + 3.86202341e-02 3.87326269e-02 3.88450998e-02 3.89576525e-02 3.90702845e-02 + 3.91829953e-02 3.92957846e-02 3.94086518e-02 3.95215966e-02 3.96346185e-02 + 3.97477171e-02 3.98608919e-02 3.99741425e-02 4.00874685e-02 4.02008694e-02 + 4.03143448e-02 4.04278944e-02 4.05415175e-02 4.06552139e-02 4.07689830e-02 + 4.08828245e-02 4.09967379e-02 4.11107228e-02 4.12247788e-02 4.13389054e-02 + 4.14531022e-02 4.15673688e-02 4.16817048e-02 4.17961097e-02 4.19105831e-02 + 4.20251246e-02 4.21397338e-02 4.22544102e-02 4.23691534e-02 4.24839631e-02 + 4.25988387e-02 4.27137799e-02 4.28287862e-02 4.29438573e-02 4.30589926e-02 + 4.31741919e-02 4.32894546e-02 4.34047804e-02 4.35201689e-02 4.36356195e-02 + 4.37511320e-02 4.38667059e-02 4.39823408e-02 4.40980363e-02 4.42137919e-02 + 4.43296073e-02 4.44454821e-02 4.45614158e-02 4.46774080e-02 4.47934583e-02 + 4.49095664e-02 4.50257318e-02 4.51419541e-02 4.52582329e-02 4.53745678e-02 + 4.54909583e-02 4.56074042e-02 4.57239050e-02 4.58404602e-02 4.59570696e-02 + 4.60737326e-02 4.61904489e-02 4.63072181e-02 4.64240398e-02 4.65409135e-02 + 4.66578390e-02 4.67748158e-02 4.68918435e-02 4.70089216e-02 4.71260499e-02 + 4.72432280e-02 4.73604553e-02 4.74777316e-02 4.75950564e-02 4.77124294e-02 + 4.78298502e-02 4.79473183e-02 4.80648334e-02 4.81823951e-02 4.83000030e-02 + 4.84176567e-02 4.85353559e-02 4.86531001e-02 4.87708890e-02 4.88887222e-02 + 4.90065993e-02 4.91245199e-02 4.92424836e-02 4.93604901e-02 4.94785390e-02 + 4.95966298e-02 4.97147623e-02 4.98329360e-02 4.99511505e-02 5.00694056e-02 + 5.01877007e-02 5.03060356e-02 5.04244098e-02 5.05428230e-02 5.06612748e-02 + 5.07797649e-02 5.08982928e-02 5.10168582e-02 5.11354607e-02 5.12540999e-02 + 5.13727755e-02 5.14914872e-02 5.16102344e-02 5.17290170e-02 5.18478344e-02 + 5.19666864e-02 5.20855725e-02 5.22044925e-02 5.23234459e-02 5.24424324e-02 + 5.25614515e-02 5.26805031e-02 5.27995866e-02 5.29187018e-02 5.30378482e-02 + 5.31570255e-02 5.32762334e-02 5.33954715e-02 5.35147394e-02 5.36340368e-02 + 5.37533633e-02 5.38727185e-02 5.39921022e-02 5.41115139e-02 5.42309534e-02 + 5.43504201e-02 5.44699139e-02 5.45894343e-02 5.47089810e-02 5.48285537e-02 + 5.49481519e-02 5.50677754e-02 5.51874237e-02 5.53070967e-02 5.54267938e-02 + 5.55465147e-02 5.56662592e-02 5.57860268e-02 5.59058173e-02 5.60256302e-02 + 5.61454652e-02 5.62653221e-02 5.63852003e-02 5.65050997e-02 5.66250198e-02 + 5.67449604e-02 5.68649210e-02 5.69849014e-02 5.71049012e-02 5.72249200e-02 + 5.73449576e-02 5.74650136e-02 5.75850876e-02 5.77051793e-02 5.78252885e-02 + 5.79454147e-02 5.80655576e-02 5.81857169e-02 5.83058922e-02 5.84260833e-02 + 5.85462898e-02 5.86665113e-02 5.87867476e-02 5.89069982e-02 5.90272630e-02 + 5.91475415e-02 5.92678334e-02 5.93881384e-02 5.95084562e-02 5.96287864e-02 + 5.97491288e-02 5.98694830e-02 5.99898486e-02 6.01102254e-02 6.02306130e-02 + 6.03510111e-02 6.04714194e-02 6.05918376e-02 6.07122653e-02 6.08327023e-02 + 6.09531481e-02 6.10736026e-02 6.11940653e-02 6.13145360e-02 6.14350143e-02 + 6.15555000e-02 6.16759927e-02 6.17964921e-02 6.19169978e-02 6.20375096e-02 + 6.21580272e-02 6.22785503e-02 6.23990785e-02 6.25196115e-02 6.26401490e-02 + 6.27606907e-02 6.28812364e-02 6.30017856e-02 6.31223381e-02 6.32428936e-02 + 6.33634518e-02 6.34840123e-02 6.36045749e-02 6.37251392e-02 6.38457050e-02 + 6.39662719e-02 6.40868397e-02 6.42074080e-02 6.43279765e-02 6.44485450e-02 + 6.45691132e-02 6.46896806e-02 6.48102472e-02 6.49308124e-02 6.50513761e-02 + 6.51719379e-02 6.52924976e-02 6.54130548e-02 6.55336093e-02 6.56541608e-02 + 6.57747089e-02 6.58952534e-02 6.60157939e-02 6.61363302e-02 6.62568621e-02 + 6.63773891e-02 6.64979110e-02 6.66184276e-02 6.67389384e-02 6.68594433e-02 + 6.69799420e-02 6.71004341e-02 6.72209194e-02 6.73413975e-02 6.74618683e-02 + 6.75823313e-02 6.77027864e-02 6.78232332e-02 6.79436715e-02 6.80641009e-02 + 6.81845212e-02 6.83049321e-02 6.84253333e-02 6.85457246e-02 6.86661056e-02 + 6.87864761e-02 6.89068358e-02 6.90271844e-02 6.91475216e-02 6.92678471e-02 + 6.93881608e-02 6.95084622e-02 6.96287512e-02 6.97490274e-02 6.98692906e-02 + 6.99895404e-02 7.01097767e-02 7.02299991e-02 7.03502074e-02 7.04704012e-02 + 7.05905804e-02 7.07107447e-02 7.08308937e-02 7.09510272e-02 7.10711449e-02 + 7.11912466e-02 7.13113320e-02 7.14314009e-02 7.15514528e-02 7.16714877e-02 + 7.17915052e-02 7.19115050e-02 7.20314869e-02 7.21514506e-02 7.22713959e-02 + 7.23913224e-02 7.25112300e-02 7.26311183e-02 7.27509871e-02 7.28708362e-02 + 7.29906652e-02 7.31104739e-02 7.32302620e-02 7.33500294e-02 7.34697756e-02 + 7.35895005e-02 7.37092038e-02 7.38288853e-02 7.39485446e-02 7.40681816e-02 + 7.41877959e-02 7.43073873e-02 7.44269556e-02 7.45465004e-02 7.46660216e-02 + 7.47855189e-02 7.49049920e-02 7.50244407e-02 7.51438647e-02 7.52632638e-02 + 7.53826377e-02 7.55019862e-02 7.56213089e-02 7.57406057e-02 7.58598764e-02 + 7.59791205e-02 7.60983380e-02 7.62175286e-02 7.63366919e-02 7.64558278e-02 + 7.65749361e-02 7.66940164e-02 7.68130685e-02 7.69320921e-02 7.70510872e-02 + 7.71700532e-02 7.72889902e-02 7.74078977e-02 7.75267755e-02 7.76456235e-02 + 7.77644413e-02 7.78832287e-02 7.80019855e-02 7.81207115e-02 7.82394063e-02 + 7.83580698e-02 7.84767016e-02 7.85953017e-02 7.87138697e-02 7.88324054e-02 + 7.89509085e-02 7.90693788e-02 7.91878162e-02 7.93062202e-02 7.94245908e-02 + 7.95429276e-02 7.96612305e-02 7.97794992e-02 7.98977334e-02 8.00159329e-02 + 8.01340976e-02 8.02522271e-02 8.03703213e-02 8.04883798e-02 8.06064025e-02 + 8.07243891e-02 8.08423395e-02 8.09602533e-02 8.10781303e-02 8.11959704e-02 + 8.13137732e-02 8.14315386e-02 8.15492663e-02 8.16669562e-02 8.17846079e-02 + 8.19022212e-02 8.20197960e-02 8.21373319e-02 8.22548288e-02 8.23722865e-02 + 8.24897046e-02 8.26070831e-02 8.27244216e-02 8.28417200e-02 8.29589780e-02 + 8.30761954e-02 8.31933720e-02 8.33105075e-02 8.34276018e-02 8.35446546e-02 + 8.36616657e-02 8.37786349e-02 8.38955619e-02 8.40124465e-02 8.41292886e-02 + 8.42460879e-02 8.43628442e-02 8.44795572e-02 8.45962268e-02 8.47128528e-02 + 8.48294348e-02 8.49459728e-02 8.50624664e-02 8.51789156e-02 8.52953200e-02 + 8.54116794e-02 8.55279937e-02 8.56442626e-02 8.57604859e-02 8.58766634e-02 + 8.59927950e-02 8.61088803e-02 8.62249191e-02 8.63409114e-02 8.64568567e-02 + 8.65727551e-02 8.66886061e-02 8.68044097e-02 8.69201656e-02 8.70358736e-02 + 8.71515335e-02 8.72671452e-02 8.73827083e-02 8.74982227e-02 8.76136882e-02 + 8.77291045e-02 8.78444716e-02 8.79597891e-02 8.80750569e-02 8.81902747e-02 + 8.83054425e-02 8.84205598e-02 8.85356267e-02 8.86506428e-02 8.87656079e-02 + 8.88805219e-02 8.89953846e-02 8.91101958e-02 8.92249552e-02 8.93396626e-02 + 8.94543180e-02 8.95689210e-02 8.96834715e-02 8.97979692e-02 8.99124141e-02 + 9.00268058e-02 9.01411442e-02 9.02554291e-02 9.03696603e-02 9.04838376e-02 + 9.05979609e-02 9.07120298e-02 9.08260443e-02 9.09400041e-02 9.10539091e-02 + 9.11677590e-02 9.12815537e-02 9.13952929e-02 9.15089765e-02 9.16226044e-02 + 9.17361762e-02 9.18496918e-02 9.19631511e-02 9.20765538e-02 9.21898998e-02 + 9.23031888e-02 9.24164207e-02 9.25295953e-02 9.26427124e-02 9.27557719e-02 + 9.28687734e-02 9.29817170e-02 9.30946023e-02 9.32074292e-02 9.33201974e-02 + 9.34329069e-02 9.35455575e-02 9.36581489e-02 9.37706810e-02 9.38831536e-02 + 9.39955665e-02 9.41079195e-02 9.42202125e-02 9.43324453e-02 9.44446176e-02 + 9.45567294e-02 9.46687804e-02 9.47807705e-02 9.48926995e-02 9.50045672e-02 + 9.51163735e-02 9.52281181e-02 9.53398009e-02 9.54514217e-02 9.55629803e-02 + 9.56744766e-02 9.57859104e-02 9.58972815e-02 9.60085897e-02 9.61198350e-02 + 9.62310170e-02 9.63421357e-02 9.64531908e-02 9.65641822e-02 9.66751097e-02 + 9.67859732e-02 9.68967725e-02 9.70075073e-02 9.71181777e-02 9.72287832e-02 + 9.73393240e-02 9.74497996e-02 9.75602100e-02 9.76705551e-02 9.77808345e-02 + 9.78910483e-02 9.80011962e-02 9.81112780e-02 9.82212936e-02 9.83312429e-02 + 9.84411256e-02 9.85509416e-02 9.86606907e-02 9.87703728e-02 9.88799878e-02 + 9.89895353e-02 9.90990154e-02 9.92084278e-02 9.93177724e-02 9.94270490e-02 + 9.95362575e-02 9.96453976e-02 9.97544693e-02 9.98634724e-02 9.99724067e-02 + 1.00081272e-01 1.00190068e-01 1.00298795e-01 1.00407453e-01 1.00516041e-01 + 1.00624560e-01 1.00733008e-01 1.00841387e-01 1.00949695e-01 1.01057933e-01 + 1.01166101e-01 1.01274198e-01 1.01382224e-01 1.01490179e-01 1.01598063e-01 + 1.01705876e-01 1.01813618e-01 1.01921288e-01 1.02028886e-01 1.02136413e-01 + 1.02243867e-01 1.02351250e-01 1.02458560e-01 1.02565798e-01 1.02672963e-01 + 1.02780056e-01 1.02887076e-01 1.02994022e-01 1.03100896e-01 1.03207696e-01 + 1.03314423e-01 1.03421077e-01 1.03527656e-01 1.03634162e-01 1.03740594e-01 + 1.03846952e-01 1.03953235e-01 1.04059444e-01 1.04165579e-01 1.04271638e-01 + 1.04377623e-01 1.04483533e-01 1.04589368e-01 1.04695128e-01 1.04800812e-01 + 1.04906421e-01 1.05011954e-01 1.05117411e-01 1.05222793e-01 1.05328098e-01 + 1.05433327e-01 1.05538480e-01 1.05643557e-01 1.05748556e-01 1.05853479e-01 + 1.05958326e-01 1.06063095e-01 1.06167787e-01 1.06272402e-01 1.06376939e-01 + 1.06481399e-01 1.06585781e-01 1.06690086e-01 1.06794312e-01 1.06898461e-01 + 1.07002532e-01 1.07106524e-01 1.07210437e-01 1.07314273e-01 1.07418029e-01 + 1.07521707e-01 1.07625306e-01 1.07728825e-01 1.07832266e-01 1.07935627e-01 + 1.08038909e-01 1.08142112e-01 1.08245234e-01 1.08348277e-01 1.08451240e-01 + 1.08554123e-01 1.08656926e-01 1.08759649e-01 1.08862291e-01 1.08964853e-01 + 1.09067334e-01 1.09169734e-01 1.09272053e-01 1.09374292e-01 1.09476449e-01 + 1.09578525e-01 1.09680520e-01 1.09782434e-01 1.09884265e-01 1.09986016e-01 + 1.10087684e-01 1.10189270e-01 1.10290775e-01 1.10392197e-01 1.10493537e-01 + 1.10594795e-01 1.10695970e-01 1.10797062e-01 1.10898072e-01 1.10998999e-01 + 1.11099844e-01 1.11200605e-01 1.11301283e-01 1.11401878e-01 1.11502389e-01 + 1.11602817e-01 1.11703161e-01 1.11803422e-01 1.11903599e-01 1.12003692e-01 + 1.12103701e-01 1.12203626e-01 1.12303466e-01 1.12403223e-01 1.12502895e-01 + 1.12602482e-01 1.12701985e-01 1.12801403e-01 1.12900736e-01 1.12999985e-01 + 1.13099148e-01 1.13198226e-01 1.13297219e-01 1.13396126e-01 1.13494949e-01 + 1.13593685e-01 1.13692336e-01 1.13790901e-01 1.13889381e-01 1.13987774e-01 + 1.14086081e-01 1.14184303e-01 1.14282438e-01 1.14380486e-01 1.14478449e-01 + 1.14576325e-01 1.14674114e-01 1.14771816e-01 1.14869432e-01 1.14966961e-01 + 1.15064403e-01 1.15161757e-01 1.15259025e-01 1.15356205e-01 1.15453298e-01 + 1.15550304e-01 1.15647222e-01 1.15744052e-01 1.15840795e-01 1.15937450e-01 + 1.16034017e-01 1.16130496e-01 1.16226887e-01 1.16323190e-01 1.16419404e-01 + 1.16515531e-01 1.16611568e-01 1.16707518e-01 1.16803379e-01 1.16899151e-01 + 1.16994834e-01 1.17090429e-01 1.17185934e-01 1.17281351e-01 1.17376678e-01 + 1.17471917e-01 1.17567066e-01 1.17662125e-01 1.17757096e-01 1.17851977e-01 + 1.17946768e-01 1.18041470e-01 1.18136082e-01 1.18230604e-01 1.18325036e-01 + 1.18419378e-01 1.18513631e-01 1.18607793e-01 1.18701865e-01 1.18795846e-01 + 1.18889738e-01 1.18983538e-01 1.19077249e-01 1.19170869e-01 1.19264398e-01 + 1.19357836e-01 1.19451184e-01 1.19544441e-01 1.19637607e-01 1.19730681e-01 + 1.19823665e-01 1.19916558e-01 1.20009359e-01 1.20102069e-01 1.20194688e-01 + 1.20287215e-01 1.20379651e-01 1.20471995e-01 1.20564248e-01 1.20656409e-01 + 1.20748478e-01 1.20840455e-01 1.20932341e-01 1.21024134e-01 1.21115835e-01 + 1.21207445e-01 1.21298962e-01 1.21390386e-01 1.21481719e-01 1.21572959e-01 + 1.21664107e-01 1.21755162e-01 1.21846125e-01 1.21936995e-01 1.22027773e-01 + 1.22118458e-01 1.22209049e-01 1.22299549e-01 1.22389955e-01 1.22480268e-01 + 1.22570488e-01 1.22660615e-01 1.22750649e-01 1.22840590e-01 1.22930438e-01 + 1.23020192e-01 1.23109853e-01 1.23199420e-01 1.23288894e-01 1.23378274e-01 + 1.23467561e-01 1.23556754e-01 1.23645854e-01 1.23734859e-01 1.23823771e-01 + 1.23912589e-01 1.24001313e-01 1.24089943e-01 1.24178480e-01 1.24266922e-01 + 1.24355270e-01 1.24443523e-01 1.24531683e-01 1.24619748e-01 1.24707719e-01 + 1.24795596e-01 1.24883378e-01 1.24971066e-01 1.25058659e-01 1.25146158e-01 + 1.25233562e-01 1.25320871e-01 1.25408086e-01 1.25495206e-01 1.25582231e-01 + 1.25669162e-01 1.25755997e-01 1.25842738e-01 1.25929384e-01 1.26015934e-01 + 1.26102390e-01 1.26188751e-01 1.26275016e-01 1.26361186e-01 1.26447261e-01 + 1.26533241e-01 1.26619126e-01 1.26704915e-01 1.26790609e-01 1.26876207e-01 + 1.26961710e-01 1.27047118e-01 1.27132430e-01 1.27217646e-01 1.27302767e-01 + 1.27387793e-01 1.27472722e-01 1.27557556e-01 1.27642294e-01 1.27726937e-01 + 1.27811483e-01 1.27895934e-01 1.27980289e-01 1.28064548e-01 1.28148711e-01 + 1.28232778e-01 1.28316749e-01 1.28400624e-01 1.28484403e-01 1.28568086e-01 + 1.28651673e-01 1.28735164e-01 1.28818558e-01 1.28901857e-01 1.28985059e-01 + 1.29068164e-01 1.29151174e-01 1.29234087e-01 1.29316904e-01 1.29399624e-01 + 1.29482248e-01 1.29564776e-01 1.29647207e-01 1.29729542e-01 1.29811780e-01 + 1.29893922e-01 1.29975967e-01 1.30057915e-01 1.30139767e-01 1.30221522e-01 + 1.30303181e-01 1.30384743e-01 1.30466208e-01 1.30547577e-01 1.30628849e-01 + 1.30710024e-01 1.30791102e-01 1.30872084e-01 1.30952969e-01 1.31033756e-01 + 1.31114448e-01 1.31195042e-01 1.31275539e-01 1.31355939e-01 1.31436243e-01 + -1.00000000e-20 -1.11111111e+03 -2.22222222e+03 -3.33333333e+03 -4.44444444e+03 + -5.55555556e+03 -6.66666667e+03 -7.77777778e+03 -8.88888889e+03 -1.00000000e+04 + -1.00000000e-20 -1.11111111e+03 -2.22222222e+03 -3.33333333e+03 -4.44444444e+03 + -5.55555556e+03 -6.66666667e+03 -7.77777778e+03 -8.88888889e+03 -1.00000000e+04 + -1.00000000e-20 -1.11111111e+03 -2.22222222e+03 -3.33333333e+03 -4.44444444e+03 + -5.55555556e+03 -6.66666667e+03 -7.77777778e+03 -8.88888889e+03 -1.00000000e+04 diff --git a/potentials/ffield.comb b/potentials/ffield.comb index 0ff3c16835455c194d3c2298dec3b5f94558a446..9edc478afd663b1be5f1e063e03388465525efe2 100644 --- a/potentials/ffield.comb +++ b/potentials/ffield.comb @@ -19,13 +19,13 @@ # 27 entries for a system containing three elements A, B and C # These entries are in LAMMPS "metal" units # -Hf Hf Hf 1 0 1 0 1.011011 0.046511 0.959614 0.959614 55.9421 55.9421 3.85 0.20 2.069563 2.069563 707.53 707.53 0 0 0.008 0 0 0 1 1 1 1 -4 4 0.26152 -0.25918 -4 4 0.26152 -0.25918 0 3.139520d0 0 0.009410d0 0 0.679131 -3.92875 -3.92875 4.83958 4.83958 12 0 +Hf Hf Hf 1 0 1 0 1.011011 0.046511 0.959614 0.959614 55.9421 55.9421 3.85 0.20 2.069563 2.069563 707.53 707.53 0 0 0.008 0 0 0 1 1 1 1 -4 4 0.26152 -0.25918 -4 4 0.26152 -0.25918 0 3.139520 0 0.009410 0 0.679131 -3.92875 -3.92875 4.83958 4.83958 12 0 Ti Ti Ti 1 0 1 0 1.255016 0.089078 1.226342 1.226342 99.3916 99.3916 3.43 0.05 2.082408 2.082408 546.386 546.386 0 0 0.0084 0 0 0 1 1 1 1 -4 4 2.508854 -2.511416 -4 4 2.508854 -2.511416 0 2.46820415900968 0 0.151351003255176 0 0.873685 0.392632 0.392632 1.78349 1.78349 12 0 O O O 1 6.6 1 -0.229 1 2 2.68 2.68 260.893 260.893 2.8 0.2 5.36 5.36 3326.69 3326.69 0 0 0 0 0 0 1 1 1 1 -1.8349 5.5046 0.00148 -0.00112 -1.8349 5.5046 0.00148 -0.00112 5.63441383 7.689598017 4.51426991 1.330079082 0 2.243072 -3.922011 -3.922011 0.971086 0.971086 12 0 Cu Cu Cu 1 0 1 0 1 0.140835 1.681711 1.681711 146.987 146.987 3.0 0.05 2.794608 2.794608 952.693 952.693 0.077 0.0095 0 0 0 0 1 1 1 1 -6 2 0.1677645 -0.161007 -6 2 0.1677645 -0.161007 0 5.946437 0 0 0 0.454784 0.72571 0.72571 0.274649 0.274649 12 0 Si Si Si 3 100390 16.218 -0.59826 0.78734 1.0999E-06 1.7322 1.7322 471.18 471.18 2.90 0.10 2.4799 2.4799 1830.8 1830.8 0 0 0 0 0 0 1 1 1 1 -4 4 1.651725 -1.658949 -4 4 1.651725 -1.658949 0 3.625144859 0 0.087067714 0 0.772871 -0.499378 -0.499378 2.999911 2.999911 12 0 -Zr Zr Zr 1 0 1 0 1 0 0.929 0.929 39.9454 39.9454 3.8 0.31 1.857 1.857 382.6 382.6 0 0 0 0 0 0 1 1 1 1 -4 4 1.64 -1.5 -4 4 1.64 -1.5 0 3.139520d0 0 0.009410d0 0 0.679131 -3.92875 -3.92875 4.83958 4.83958 12 0 -U U U 1 0 1 0 4.346966 0.77617 0.832 0.832 162.6 162.6 3.9 0.15 1.835 1.835 795.6 795.6 0 0 0 0 0 0 1 1 1 1 -4 4 2 -2 -4 4 2 -2 0 3.139520d0 0 0.009410d0 0 0.679131 -3.92875 -3.92875 4.83958 4.83958 12 0 +Zr Zr Zr 1 0 1 0 1 0 0.929 0.929 39.9454 39.9454 3.8 0.31 1.857 1.857 382.6 382.6 0 0 0 0 0 0 1 1 1 1 -4 4 1.64 -1.5 -4 4 1.64 -1.5 0 3.139520 0 0.009410 0 0.679131 -3.92875 -3.92875 4.83958 4.83958 12 0 +U U U 1 0 1 0 4.346966 0.77617 0.832 0.832 162.6 162.6 3.9 0.15 1.835 1.835 795.6 795.6 0 0 0 0 0 0 1 1 1 1 -4 4 2 -2 -4 4 2 -2 0 3.139520 0 0.009410 0 0.679131 -3.92875 -3.92875 4.83958 4.83958 12 0 # Si O O 3 100390 16.218 -0.59826 0.78734 1.0999E-06 1.7322 2.68 471.18 260.893 2.80 0.25 2.4799 5.36 1830.8 3326.69 0 0 0 109.47 0.3122 0 1 1 1 1 -4 4 1.651725 -1.658949 -1.8349 5.5046 0.00148 -0.00112 0 3.625144859 0 0.087067714 0 0.772871 -0.499378 -3.922011 2.999911 0.971086 12 0 O Si Si 1 6.6 1 -0.229 1 2 2.68 1.7322 260.893 471.18 2.80 0.25 5.36 2.4799 3326.69 1830.8 0 0 0 143.73 2.6 0 1 1 1 1 -1.8349 5.5046 0.00148 -0.00112 -4 4 1.651725 -1.658949 5.63441383 7.689598017 4.51426991 1.330079082 0 2.243072 -3.922011 -0.499378 0.971086 2.999911 12 0 diff --git a/src/.gitignore b/src/.gitignore index fabd3b4e4b7260897e75a1b32c27439d0ba6b740..01d9a48e937c0eb3cced7a0461cf84bb96dacc58 100644 --- a/src/.gitignore +++ b/src/.gitignore @@ -37,6 +37,7 @@ /kokkos_type.h /kokkos_few.h /kokkos_base.h +/kokkos_base_fft.h /manifold*.cpp /manifold*.h @@ -84,6 +85,15 @@ /intel_preprocess.h /intel_simd.h +/atom_vec_sph.cpp +/atom_vec_sph.h +/compute_sph_*.cpp +/compute_sph_*.h +/fix_sph.cpp +/fix_sph.h +/fix_sph_stationary.cpp +/fix_sph_stationary.h + /atom_vec_edpd.cpp /atom_vec_edpd.h /atom_vec_mdpd.cpp @@ -247,8 +257,6 @@ /atom_vec_full_hars.h /atom_vec_granular.cpp /atom_vec_granular.h -/atom_vec_meso.cpp -/atom_vec_meso.h /atom_vec_molecular.cpp /atom_vec_molecular.h /atom_vec_peri.cpp @@ -385,6 +393,8 @@ /compute_temp_rotate.h /compute_ti.cpp /compute_ti.h +/compute_viscosity_cos.cpp +/compute_viscosity_cos.h /compute_voronoi_atom.cpp /compute_voronoi_atom.h /dihedral_charmm.cpp @@ -465,6 +475,8 @@ /fft3d.h /fft3d_wrap.cpp /fft3d_wrap.h +/fix_accelerate_cos.cpp +/fix_accelerate_cos.h /fix_adapt_fep.cpp /fix_adapt_fep.h /fix_addtorque.cpp @@ -635,6 +647,8 @@ /fix_poems.h /fix_pour.cpp /fix_pour.h +/fix_propel_self.cpp +/fix_propel_self.h /fix_qeq_comb.cpp /fix_qeq_comb.h /fix_qeq_reax.cpp @@ -838,6 +852,10 @@ /pair_coul_msm.h /pair_coul_shield.cpp /pair_coul_shield.h +/pair_coul_slater_cut.cpp +/pair_coul_slater_cut.h +/pair_coul_slater_long.cpp +/pair_coul_slater_long.h /pair_dipole_cut.cpp /pair_dipole_cut.h /pair_dipole_sf.cpp @@ -1101,6 +1119,8 @@ /fix_python_invoke.h /pair_python.cpp /pair_python.h +/reader_adios.cpp +/reader_adios.h /reader_molfile.cpp /reader_molfile.h /reaxc_allocate.cpp @@ -1325,6 +1345,8 @@ /pair_lennard_mdf.h /pair_lj_cut_coul_long_cs.cpp /pair_lj_cut_coul_long_cs.h +/pair_lj_class2_coul_long_cs.cpp +/pair_lj_class2_coul_long_cs.h /pair_lj_mdf.cpp /pair_lj_mdf.h /pair_mgpt.cpp diff --git a/src/CLASS2/bond_class2.cpp b/src/CLASS2/bond_class2.cpp index 0651db75fb035687fad1e43e9b794efc4c592129..7feec1a4b3b0f9e8c3c81f1ad79c5d057f0c5228 100644 --- a/src/CLASS2/bond_class2.cpp +++ b/src/CLASS2/bond_class2.cpp @@ -15,6 +15,7 @@ Contributing author: Eric Simon (Cray) ------------------------------------------------------------------------- */ +#include #include "bond_class2.h" #include #include @@ -220,3 +221,12 @@ double BondClass2::single(int type, double rsq, int /*i*/, int /*j*/, double &ff else fforce = 0.0; return (k2[type]*dr2 + k3[type]*dr3 + k4[type]*dr4); } + +/* ---------------------------------------------------------------------- */ + +void *BondClass2::extract(const char *str, int &dim) +{ + dim = 1; + if (strcmp(str,"r0")==0) return (void*) r0; + return NULL; +} diff --git a/src/CLASS2/bond_class2.h b/src/CLASS2/bond_class2.h index f0fcc6825ef896a5cb6409d6bfb19b576d9b9369..f83fecfce00eb583d3dff0a3bcb326d08b864dab 100644 --- a/src/CLASS2/bond_class2.h +++ b/src/CLASS2/bond_class2.h @@ -35,6 +35,7 @@ class BondClass2 : public Bond { virtual void read_restart(FILE *); void write_data(FILE *); double single(int, double, int, int, double &); + virtual void *extract(const char *, int &); protected: double *r0,*k2,*k3,*k4; diff --git a/src/CORESHELL/Install.sh b/src/CORESHELL/Install.sh index 93c8fe8132c2bcdc59252719e3d7d42766583d3d..f8b75d1f25080bcd1d253eda82b13a4220464311 100755 --- a/src/CORESHELL/Install.sh +++ b/src/CORESHELL/Install.sh @@ -41,6 +41,8 @@ action pair_coul_long_cs.cpp pair_coul_long.cpp action pair_coul_long_cs.h pair_coul_long.h action pair_lj_cut_coul_long_cs.cpp pair_lj_cut_coul_long.cpp action pair_lj_cut_coul_long_cs.h pair_lj_cut_coul_long.h +action pair_lj_class2_coul_long_cs.cpp pair_lj_class2_coul_long.cpp +action pair_lj_class2_coul_long_cs.h pair_lj_class2_coul_long.h action pair_born_coul_wolf_cs.cpp pair_born_coul_wolf.cpp action pair_born_coul_wolf_cs.h pair_born_coul_wolf.h diff --git a/src/CORESHELL/pair_lj_class2_coul_long_cs.cpp b/src/CORESHELL/pair_lj_class2_coul_long_cs.cpp new file mode 100644 index 0000000000000000000000000000000000000000..b99d03799a90ec9de3fcee25039b0eefcb7cd4c8 --- /dev/null +++ b/src/CORESHELL/pair_lj_class2_coul_long_cs.cpp @@ -0,0 +1,561 @@ +/* ---------------------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + http://lammps.sandia.gov, Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + Copyright (2003) Sandia Corporation. Under the terms of Contract + DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains + certain rights in this software. This software is distributed under + the GNU General Public License. + + See the README file in the top-level LAMMPS directory. +------------------------------------------------------------------------- */ + +#include "pair_lj_class2_coul_long_cs.h" +#include +#include "atom.h" +#include "force.h" +#include "neigh_list.h" + +using namespace LAMMPS_NS; + +#define EWALD_F 1.12837917 +#define EWALD_P 9.95473818e-1 +#define B0 -0.1335096380159268 +#define B1 -2.57839507e-1 +#define B2 -1.37203639e-1 +#define B3 -8.88822059e-3 +#define B4 -5.80844129e-3 +#define B5 1.14652755e-1 + +#define EPSILON 1.0e-20 +#define EPS_EWALD 1.0e-6 +#define EPS_EWALD_SQR 1.0e-12 + +/* ---------------------------------------------------------------------- */ + +PairLJClass2CoulLongCS::PairLJClass2CoulLongCS(LAMMPS *lmp) : PairLJClass2CoulLong(lmp) +{ + ewaldflag = pppmflag = 1; + respa_enable = 0; // TODO: r-RESPA handling is inconsistent and thus disabled until fixed + writedata = 1; + ftable = NULL; +} + +/* ---------------------------------------------------------------------- */ + +void PairLJClass2CoulLongCS::compute(int eflag, int vflag) +{ + int i,j,ii,jj,inum,jnum,itable,itype,jtype; + double qtmp,xtmp,ytmp,ztmp,delx,dely,delz,evdwl,ecoul,fpair; + double fraction,table; + double rsq,r,rinv,r2inv,r3inv,r6inv,forcecoul,forcelj; + double grij,expm2,prefactor,t,erfc,u; + double factor_coul,factor_lj; + int *ilist,*jlist,*numneigh,**firstneigh; + + evdwl = ecoul = 0.0; + ev_init(eflag,vflag); + + double **x = atom->x; + double **f = atom->f; + double *q = atom->q; + int *type = atom->type; + int nlocal = atom->nlocal; + double *special_coul = force->special_coul; + double *special_lj = force->special_lj; + int newton_pair = force->newton_pair; + double qqrd2e = force->qqrd2e; + + inum = list->inum; + ilist = list->ilist; + numneigh = list->numneigh; + firstneigh = list->firstneigh; + + // loop over neighbors of my atoms + + for (ii = 0; ii < inum; ii++) { + i = ilist[ii]; + qtmp = q[i]; + xtmp = x[i][0]; + ytmp = x[i][1]; + ztmp = x[i][2]; + itype = type[i]; + jlist = firstneigh[i]; + jnum = numneigh[i]; + + for (jj = 0; jj < jnum; jj++) { + j = jlist[jj]; + factor_lj = special_lj[sbmask(j)]; + factor_coul = special_coul[sbmask(j)]; + j &= NEIGHMASK; + + delx = xtmp - x[j][0]; + dely = ytmp - x[j][1]; + delz = ztmp - x[j][2]; + rsq = delx*delx + dely*dely + delz*delz; + jtype = type[j]; + + if (rsq < cutsq[itype][jtype]) { + rsq += EPSILON; // Add Epsilon for case: r = 0; Interaction must be removed by special bond; + r2inv = 1.0/rsq; + if (rsq < cut_coulsq) { + if (!ncoultablebits || rsq <= tabinnersq) { + r = sqrt(rsq); + prefactor = qqrd2e * qtmp*q[j]; + if (factor_coul < 1.0) { + // When bonded parts are being calculated a minimal distance (EPS_EWALD) + // has to be added to the prefactor and erfc in order to make the + // used approximation functions for the Ewald correction valid + grij = g_ewald * (r+EPS_EWALD); + expm2 = exp(-grij*grij); + t = 1.0 / (1.0 + EWALD_P*grij); + u = 1.0 - t; + erfc = t * (1.+u*(B0+u*(B1+u*(B2+u*(B3+u*(B4+u*B5)))))) * expm2; + prefactor /= (r+EPS_EWALD); + forcecoul = prefactor * (erfc + EWALD_F*grij*expm2 - (1.0-factor_coul)); + // Additionally r2inv needs to be accordingly modified since the later + // scaling of the overall force shall be consistent + r2inv = 1.0/(rsq + EPS_EWALD_SQR); + } else { + grij = g_ewald * r; + expm2 = exp(-grij*grij); + t = 1.0 / (1.0 + EWALD_P*grij); + u = 1.0 - t; + erfc = t * (1.+u*(B0+u*(B1+u*(B2+u*(B3+u*(B4+u*B5)))))) * expm2; + prefactor /= r; + forcecoul = prefactor * (erfc + EWALD_F*grij*expm2); + } + } else { + union_int_float_t rsq_lookup; + rsq_lookup.f = rsq; + itable = rsq_lookup.i & ncoulmask; + itable >>= ncoulshiftbits; + fraction = (rsq_lookup.f - rtable[itable]) * drtable[itable]; + table = ftable[itable] + fraction*dftable[itable]; + forcecoul = qtmp*q[j] * table; + if (factor_coul < 1.0) { + table = ctable[itable] + fraction*dctable[itable]; + prefactor = qtmp*q[j] * table; + forcecoul -= (1.0-factor_coul)*prefactor; + } + } + } else forcecoul = 0.0; + + if (rsq < cut_ljsq[itype][jtype]) { + rinv = sqrt(r2inv); + r3inv = r2inv*rinv; + r6inv = r3inv*r3inv; + forcelj = r6inv * (lj1[itype][jtype]*r3inv - lj2[itype][jtype]); + } else forcelj = 0.0; + + fpair = (forcecoul + factor_lj*forcelj) * r2inv; + + f[i][0] += delx*fpair; + f[i][1] += dely*fpair; + f[i][2] += delz*fpair; + if (newton_pair || j < nlocal) { + f[j][0] -= delx*fpair; + f[j][1] -= dely*fpair; + f[j][2] -= delz*fpair; + } + + if (eflag) { + if (rsq < cut_coulsq) { + if (!ncoultablebits || rsq <= tabinnersq) + ecoul = prefactor*erfc; + else { + table = etable[itable] + fraction*detable[itable]; + ecoul = qtmp*q[j] * table; + } + if (factor_coul < 1.0) ecoul -= (1.0-factor_coul)*prefactor; + } else ecoul = 0.0; + if (rsq < cut_ljsq[itype][jtype]) { + evdwl = r6inv*(lj3[itype][jtype]*r3inv-lj4[itype][jtype]) - + offset[itype][jtype]; + evdwl *= factor_lj; + } else evdwl = 0.0; + } + + if (evflag) ev_tally(i,j,nlocal,newton_pair, + evdwl,ecoul,fpair,delx,dely,delz); + } + } + } + + if (vflag_fdotr) virial_fdotr_compute(); +} + +/* ---------------------------------------------------------------------- */ + +void PairLJClass2CoulLongCS::compute_inner() +{ + int i,j,ii,jj,inum,jnum,itype,jtype; + double qtmp,xtmp,ytmp,ztmp,delx,dely,delz,fpair; + double rsq,rinv,r2inv,r3inv,r6inv,forcecoul,forcelj,factor_coul,factor_lj; + double rsw; + int *ilist,*jlist,*numneigh,**firstneigh; + + double **x = atom->x; + double **f = atom->f; + double *q = atom->q; + int *type = atom->type; + int nlocal = atom->nlocal; + double *special_coul = force->special_coul; + double *special_lj = force->special_lj; + int newton_pair = force->newton_pair; + double qqrd2e = force->qqrd2e; + + inum = list->inum_inner; + ilist = list->ilist_inner; + numneigh = list->numneigh_inner; + firstneigh = list->firstneigh_inner; + + double cut_out_on = cut_respa[0]; + double cut_out_off = cut_respa[1]; + + double cut_out_diff = cut_out_off - cut_out_on; + double cut_out_on_sq = cut_out_on*cut_out_on; + double cut_out_off_sq = cut_out_off*cut_out_off; + + // loop over neighbors of my atoms + + for (ii = 0; ii < inum; ii++) { + i = ilist[ii]; + qtmp = q[i]; + xtmp = x[i][0]; + ytmp = x[i][1]; + ztmp = x[i][2]; + itype = type[i]; + jlist = firstneigh[i]; + jnum = numneigh[i]; + + for (jj = 0; jj < jnum; jj++) { + j = jlist[jj]; + factor_lj = special_lj[sbmask(j)]; + factor_coul = special_coul[sbmask(j)]; + j &= NEIGHMASK; + + delx = xtmp - x[j][0]; + dely = ytmp - x[j][1]; + delz = ztmp - x[j][2]; + rsq = delx*delx + dely*dely + delz*delz; + + if (rsq < cut_out_off_sq) { + rsq += EPSILON; // Add Epsilon for case: r = 0; Interaction must be removed by special bond; + r2inv = 1.0/rsq; + forcecoul = qqrd2e * qtmp*q[j]*sqrt(r2inv); + if (factor_coul < 1.0) forcecoul -= (1.0-factor_coul)*forcecoul; + + jtype = type[j]; + if (rsq < cut_ljsq[itype][jtype]) { + rinv = sqrt(r2inv); + r3inv = r2inv*rinv; + r6inv = r3inv*r3inv; + forcelj = r6inv * (lj1[itype][jtype]*r3inv - lj2[itype][jtype]); + } else forcelj = 0.0; + + fpair = (forcecoul + factor_lj*forcelj) * r2inv; + if (rsq > cut_out_on_sq) { + rsw = (sqrt(rsq) - cut_out_on)/cut_out_diff; + fpair *= 1.0 + rsw*rsw*(2.0*rsw-3.0); + } + + f[i][0] += delx*fpair; + f[i][1] += dely*fpair; + f[i][2] += delz*fpair; + if (newton_pair || j < nlocal) { + f[j][0] -= delx*fpair; + f[j][1] -= dely*fpair; + f[j][2] -= delz*fpair; + } + } + } + } +} + +/* ---------------------------------------------------------------------- */ + +void PairLJClass2CoulLongCS::compute_middle() +{ + int i,j,ii,jj,inum,jnum,itype,jtype; + double qtmp,xtmp,ytmp,ztmp,delx,dely,delz,fpair; + double rsq,rinv,r2inv,r3inv,r6inv,forcecoul,forcelj,factor_coul,factor_lj; + double rsw; + int *ilist,*jlist,*numneigh,**firstneigh; + + double **x = atom->x; + double **f = atom->f; + double *q = atom->q; + int *type = atom->type; + int nlocal = atom->nlocal; + double *special_coul = force->special_coul; + double *special_lj = force->special_lj; + int newton_pair = force->newton_pair; + double qqrd2e = force->qqrd2e; + + inum = list->inum_middle; + ilist = list->ilist_middle; + numneigh = list->numneigh_middle; + firstneigh = list->firstneigh_middle; + + double cut_in_off = cut_respa[0]; + double cut_in_on = cut_respa[1]; + double cut_out_on = cut_respa[2]; + double cut_out_off = cut_respa[3]; + + double cut_in_diff = cut_in_on - cut_in_off; + double cut_out_diff = cut_out_off - cut_out_on; + double cut_in_off_sq = cut_in_off*cut_in_off; + double cut_in_on_sq = cut_in_on*cut_in_on; + double cut_out_on_sq = cut_out_on*cut_out_on; + double cut_out_off_sq = cut_out_off*cut_out_off; + + // loop over neighbors of my atoms + + for (ii = 0; ii < inum; ii++) { + i = ilist[ii]; + qtmp = q[i]; + xtmp = x[i][0]; + ytmp = x[i][1]; + ztmp = x[i][2]; + itype = type[i]; + jlist = firstneigh[i]; + jnum = numneigh[i]; + + for (jj = 0; jj < jnum; jj++) { + j = jlist[jj]; + factor_lj = special_lj[sbmask(j)]; + factor_coul = special_coul[sbmask(j)]; + j &= NEIGHMASK; + + delx = xtmp - x[j][0]; + dely = ytmp - x[j][1]; + delz = ztmp - x[j][2]; + rsq = delx*delx + dely*dely + delz*delz; + + if (rsq < cut_out_off_sq && rsq > cut_in_off_sq) { + r2inv = 1.0/rsq; + forcecoul = qqrd2e * qtmp*q[j]*sqrt(r2inv); + if (factor_coul < 1.0) forcecoul -= (1.0-factor_coul)*forcecoul; + + jtype = type[j]; + if (rsq < cut_ljsq[itype][jtype]) { + rinv = sqrt(r2inv); + r3inv = r2inv*rinv; + r6inv = r3inv*r3inv; + forcelj = r6inv * (lj1[itype][jtype]*r3inv - lj2[itype][jtype]); + } else forcelj = 0.0; + + fpair = (forcecoul + factor_lj*forcelj) * r2inv; + if (rsq < cut_in_on_sq) { + rsw = (sqrt(rsq) - cut_in_off)/cut_in_diff; + fpair *= rsw*rsw*(3.0 - 2.0*rsw); + } + if (rsq > cut_out_on_sq) { + rsw = (sqrt(rsq) - cut_out_on)/cut_out_diff; + fpair *= 1.0 + rsw*rsw*(2.0*rsw - 3.0); + } + + f[i][0] += delx*fpair; + f[i][1] += dely*fpair; + f[i][2] += delz*fpair; + if (newton_pair || j < nlocal) { + f[j][0] -= delx*fpair; + f[j][1] -= dely*fpair; + f[j][2] -= delz*fpair; + } + } + } + } +} + +/* ---------------------------------------------------------------------- */ + +void PairLJClass2CoulLongCS::compute_outer(int eflag, int vflag) +{ + int i,j,ii,jj,inum,jnum,itype,jtype,itable; + double qtmp,xtmp,ytmp,ztmp,delx,dely,delz,evdwl,ecoul,fpair; + double fraction,table; + double r,rinv,r2inv,r3inv,r6inv,forcecoul,forcelj,factor_coul,factor_lj; + double grij,expm2,prefactor,t,erfc,u; + double rsw; + int *ilist,*jlist,*numneigh,**firstneigh; + double rsq; + + evdwl = ecoul = 0.0; + ev_init(eflag,vflag); + + double **x = atom->x; + double **f = atom->f; + double *q = atom->q; + int *type = atom->type; + int nlocal = atom->nlocal; + double *special_coul = force->special_coul; + double *special_lj = force->special_lj; + int newton_pair = force->newton_pair; + double qqrd2e = force->qqrd2e; + + inum = list->inum; + ilist = list->ilist; + numneigh = list->numneigh; + firstneigh = list->firstneigh; + + double cut_in_off = cut_respa[2]; + double cut_in_on = cut_respa[3]; + + double cut_in_diff = cut_in_on - cut_in_off; + double cut_in_off_sq = cut_in_off*cut_in_off; + double cut_in_on_sq = cut_in_on*cut_in_on; + + // loop over neighbors of my atoms + + for (ii = 0; ii < inum; ii++) { + i = ilist[ii]; + qtmp = q[i]; + xtmp = x[i][0]; + ytmp = x[i][1]; + ztmp = x[i][2]; + itype = type[i]; + jlist = firstneigh[i]; + jnum = numneigh[i]; + + for (jj = 0; jj < jnum; jj++) { + j = jlist[jj]; + factor_lj = special_lj[sbmask(j)]; + factor_coul = special_coul[sbmask(j)]; + j &= NEIGHMASK; + + delx = xtmp - x[j][0]; + dely = ytmp - x[j][1]; + delz = ztmp - x[j][2]; + rsq = delx*delx + dely*dely + delz*delz; + jtype = type[j]; + + if (rsq < cutsq[itype][jtype]) { + r2inv = 1.0/rsq; + + if (rsq < cut_coulsq) { + if (!ncoultablebits || rsq <= tabinnersq) { + r = sqrt(rsq); + grij = g_ewald * r; + expm2 = exp(-grij*grij); + t = 1.0 / (1.0 + EWALD_P*grij); + u = 1. - t; + erfc = t * (1.+u*(B0+u*(B1+u*(B2+u*(B3+u*(B4+u*B5)))))) * expm2; + prefactor = qqrd2e * qtmp*q[j]/r; + forcecoul = prefactor * (erfc + EWALD_F*grij*expm2 - 1.0); + if (rsq > cut_in_off_sq) { + if (rsq < cut_in_on_sq) { + rsw = (r - cut_in_off)/cut_in_diff; + forcecoul += prefactor*rsw*rsw*(3.0 - 2.0*rsw); + if (factor_coul < 1.0) + forcecoul -= + (1.0-factor_coul)*prefactor*rsw*rsw*(3.0 - 2.0*rsw); + } else { + forcecoul += prefactor; + if (factor_coul < 1.0) + forcecoul -= (1.0-factor_coul)*prefactor; + } + } + } else { + union_int_float_t rsq_lookup; + rsq_lookup.f = rsq; + itable = rsq_lookup.i & ncoulmask; + itable >>= ncoulshiftbits; + fraction = (rsq_lookup.f - rtable[itable]) * drtable[itable]; + table = ftable[itable] + fraction*dftable[itable]; + forcecoul = qtmp*q[j] * table; + if (factor_coul < 1.0) { + table = ctable[itable] + fraction*dctable[itable]; + prefactor = qtmp*q[j] * table; + forcecoul -= (1.0-factor_coul)*prefactor; + } + } + } else forcecoul = 0.0; + + if (rsq < cut_ljsq[itype][jtype] && rsq > cut_in_off_sq) { + rinv = sqrt(r2inv); + r3inv = r2inv*rinv; + r6inv = r3inv*r3inv; + forcelj = r6inv * (lj1[itype][jtype]*r3inv - lj2[itype][jtype]); + if (rsq < cut_in_on_sq) { + rsw = (sqrt(rsq) - cut_in_off)/cut_in_diff; + forcelj *= rsw*rsw*(3.0 - 2.0*rsw); + } + } else forcelj = 0.0; + + fpair = (forcecoul + forcelj) * r2inv; + + f[i][0] += delx*fpair; + f[i][1] += dely*fpair; + f[i][2] += delz*fpair; + if (newton_pair || j < nlocal) { + f[j][0] -= delx*fpair; + f[j][1] -= dely*fpair; + f[j][2] -= delz*fpair; + } + + if (eflag) { + if (rsq < cut_coulsq) { + if (!ncoultablebits || rsq <= tabinnersq) { + ecoul = prefactor*erfc; + if (factor_coul < 1.0) ecoul -= (1.0-factor_coul)*prefactor; + } else { + table = etable[itable] + fraction*detable[itable]; + ecoul = qtmp*q[j] * table; + if (factor_coul < 1.0) { + table = ptable[itable] + fraction*dptable[itable]; + prefactor = qtmp*q[j] * table; + ecoul -= (1.0-factor_coul)*prefactor; + } + } + } else ecoul = 0.0; + + if (rsq < cut_ljsq[itype][jtype]) { + rinv = sqrt(r2inv); + r3inv = r2inv*rinv; + r6inv = r3inv*r3inv; + evdwl = r6inv*(lj3[itype][jtype]*r3inv-lj4[itype][jtype]) - + offset[itype][jtype]; + evdwl *= factor_lj; + } else evdwl = 0.0; + } + + if (vflag) { + if (rsq < cut_coulsq) { + if (!ncoultablebits || rsq <= tabinnersq) { + forcecoul = prefactor * (erfc + EWALD_F*grij*expm2); + if (factor_coul < 1.0) forcecoul -= (1.0-factor_coul)*prefactor; + } else { + table = vtable[itable] + fraction*dvtable[itable]; + forcecoul = qtmp*q[j] * table; + if (factor_coul < 1.0) { + table = ptable[itable] + fraction*dptable[itable]; + prefactor = qtmp*q[j] * table; + forcecoul -= (1.0-factor_coul)*prefactor; + } + } + } else forcecoul = 0.0; + + if (rsq <= cut_in_off_sq) { + rinv = sqrt(r2inv); + r3inv = r2inv*rinv; + r6inv = r3inv*r3inv; + forcelj = r6inv * (lj1[itype][jtype]*r3inv - lj2[itype][jtype]); + } else if (rsq <= cut_in_on_sq) { + rinv = sqrt(r2inv); + r3inv = r2inv*rinv; + r6inv = r3inv*r3inv; + forcelj = r6inv * (lj1[itype][jtype]*r3inv - lj2[itype][jtype]); + } + fpair = (forcecoul + factor_lj*forcelj) * r2inv; + } + + if (evflag) ev_tally(i,j,nlocal,newton_pair, + evdwl,ecoul,fpair,delx,dely,delz); + } + } + } +} + diff --git a/src/CORESHELL/pair_lj_class2_coul_long_cs.h b/src/CORESHELL/pair_lj_class2_coul_long_cs.h new file mode 100644 index 0000000000000000000000000000000000000000..b37685bda10d927595924d167cee859f5258958c --- /dev/null +++ b/src/CORESHELL/pair_lj_class2_coul_long_cs.h @@ -0,0 +1,67 @@ +/* -*- c++ -*- ---------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + http://lammps.sandia.gov, Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + Copyright (2003) Sandia Corporation. Under the terms of Contract + DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains + certain rights in this software. This software is distributed under + the GNU General Public License. + + See the README file in the top-level LAMMPS directory. +------------------------------------------------------------------------- */ + +#ifdef PAIR_CLASS + +PairStyle(lj/class2/coul/long/cs,PairLJClass2CoulLongCS) + +#else + +#ifndef LMP_PAIR_LJ_CLASS2_COUL_LONG_CS_H +#define LMP_PAIR_LJ_CLASS2_COUL_LONG_CS_H + +#include "pair_lj_class2_coul_long.h" + +namespace LAMMPS_NS { + +class PairLJClass2CoulLongCS : public PairLJClass2CoulLong { + + public: + PairLJClass2CoulLongCS(class LAMMPS *); + virtual void compute(int, int); + void compute_inner(); + void compute_middle(); + void compute_outer(int, int); +}; + +} + +#endif +#endif + +/* ERROR/WARNING messages: + +E: Illegal ... command + +Self-explanatory. Check the input script syntax and compare to the +documentation for the command. You can use -echo screen as a +command-line option when running LAMMPS to see the offending line. + +E: Incorrect args for pair coefficients + +Self-explanatory. Check the input script or data file. + +E: Pair style lj/class2/coul/long requires atom attribute q + +The atom style defined does not have this attribute. + +E: Pair style requires a KSpace style + +No kspace style is defined. + +E: Pair cutoff < Respa interior cutoff + +One or more pairwise cutoffs are too short to use with the specified +rRESPA cutoffs. + +*/ diff --git a/src/CORESHELL/pair_lj_cut_coul_long_cs.cpp b/src/CORESHELL/pair_lj_cut_coul_long_cs.cpp index 7ad544051afd6e22206bf48de8718fe1a73eb3cc..12d9088f267639fce383f806dd65992503bd7848 100644 --- a/src/CORESHELL/pair_lj_cut_coul_long_cs.cpp +++ b/src/CORESHELL/pair_lj_cut_coul_long_cs.cpp @@ -41,7 +41,7 @@ using namespace LAMMPS_NS; PairLJCutCoulLongCS::PairLJCutCoulLongCS(LAMMPS *lmp) : PairLJCutCoulLong(lmp) { ewaldflag = pppmflag = 1; - respa_enable = 1; + respa_enable = 0; // TODO: r-RESPA handling is inconsistent and thus disabled until fixed writedata = 1; ftable = NULL; qdist = 0.0; @@ -173,7 +173,6 @@ void PairLJCutCoulLongCS::compute(int eflag, int vflag) } if (factor_coul < 1.0) ecoul -= (1.0-factor_coul)*prefactor; } else ecoul = 0.0; - if (rsq < cut_ljsq[itype][jtype]) { evdwl = r6inv*(lj3[itype][jtype]*r6inv-lj4[itype][jtype]) - offset[itype][jtype]; @@ -433,7 +432,6 @@ void PairLJCutCoulLongCS::compute_outer(int eflag, int vflag) jtype = type[j]; if (rsq < cutsq[itype][jtype]) { - rsq += EPSILON; // Add Epsilon for case: r = 0; Interaction must be removed by special bond; r2inv = 1.0/rsq; if (rsq < cut_coulsq) { @@ -442,9 +440,8 @@ void PairLJCutCoulLongCS::compute_outer(int eflag, int vflag) grij = g_ewald * r; expm2 = exp(-grij*grij); t = 1.0 / (1.0 + EWALD_P*grij); - u = 1. - t; + u = 1. - t; erfc = t * (1.+u*(B0+u*(B1+u*(B2+u*(B3+u*(B4+u*B5)))))) * expm2; - //erfc = t * (A1+t*(A2+t*(A3+t*(A4+t*A5)))) * expm2; prefactor = qqrd2e * qtmp*q[j]/r; forcecoul = prefactor * (erfc + EWALD_F*grij*expm2 - 1.0); if (rsq > cut_in_off_sq) { @@ -543,7 +540,6 @@ void PairLJCutCoulLongCS::compute_outer(int eflag, int vflag) r6inv = r2inv*r2inv*r2inv; forcelj = r6inv * (lj1[itype][jtype]*r6inv - lj2[itype][jtype]); } - fpair = (forcecoul + factor_lj*forcelj) * r2inv; } diff --git a/src/DIPOLE/atom_vec_dipole.cpp b/src/DIPOLE/atom_vec_dipole.cpp index 0b6a27888f82a26bc808387d5d97db601a275227..b6895be3012fdfa58edc937fef4840d2fb695f9e 100644 --- a/src/DIPOLE/atom_vec_dipole.cpp +++ b/src/DIPOLE/atom_vec_dipole.cpp @@ -31,880 +31,47 @@ AtomVecDipole::AtomVecDipole(LAMMPS *lmp) : AtomVec(lmp) molecular = 0; mass_type = 1; - comm_x_only = 0; - comm_f_only = 1; - size_forward = 6; - size_reverse = 3; - size_border = 11; - size_velocity = 3; - size_data_atom = 9; - size_data_vel = 4; - xcol_data = 4; - atom->q_flag = atom->mu_flag = 1; -} - -/* ---------------------------------------------------------------------- - grow atom arrays - n = 0 grows arrays by a chunk - n > 0 allocates arrays to size n -------------------------------------------------------------------------- */ - -void AtomVecDipole::grow(int n) -{ - if (n == 0) grow_nmax(); - else nmax = n; - atom->nmax = nmax; - if (nmax < 0 || nmax > MAXSMALLINT) - error->one(FLERR,"Per-processor system is too big"); - - tag = memory->grow(atom->tag,nmax,"atom:tag"); - type = memory->grow(atom->type,nmax,"atom:type"); - mask = memory->grow(atom->mask,nmax,"atom:mask"); - image = memory->grow(atom->image,nmax,"atom:image"); - x = memory->grow(atom->x,nmax,3,"atom:x"); - v = memory->grow(atom->v,nmax,3,"atom:v"); - f = memory->grow(atom->f,nmax*comm->nthreads,3,"atom:f"); - - q = memory->grow(atom->q,nmax,"atom:q"); - mu = memory->grow(atom->mu,nmax,4,"atom:mu"); - - if (atom->nextra_grow) - for (int iextra = 0; iextra < atom->nextra_grow; iextra++) - modify->fix[atom->extra_grow[iextra]]->grow_arrays(nmax); -} - -/* ---------------------------------------------------------------------- - reset local array ptrs -------------------------------------------------------------------------- */ - -void AtomVecDipole::grow_reset() -{ - tag = atom->tag; type = atom->type; - mask = atom->mask; image = atom->image; - x = atom->x; v = atom->v; f = atom->f; - q = atom->q; mu = atom->mu; -} - -/* ---------------------------------------------------------------------- - copy atom I info to atom J -------------------------------------------------------------------------- */ - -void AtomVecDipole::copy(int i, int j, int delflag) -{ - tag[j] = tag[i]; - type[j] = type[i]; - mask[j] = mask[i]; - image[j] = image[i]; - x[j][0] = x[i][0]; - x[j][1] = x[i][1]; - x[j][2] = x[i][2]; - v[j][0] = v[i][0]; - v[j][1] = v[i][1]; - v[j][2] = v[i][2]; - - q[j] = q[i]; - mu[j][0] = mu[i][0]; - mu[j][1] = mu[i][1]; - mu[j][2] = mu[i][2]; - mu[j][3] = mu[i][3]; - - if (atom->nextra_grow) - for (int iextra = 0; iextra < atom->nextra_grow; iextra++) - modify->fix[atom->extra_grow[iextra]]->copy_arrays(i,j,delflag); -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecDipole::pack_comm(int n, int *list, double *buf, - int pbc_flag, int *pbc) -{ - int i,j,m; - double dx,dy,dz; - - m = 0; - if (pbc_flag == 0) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = x[j][0]; - buf[m++] = x[j][1]; - buf[m++] = x[j][2]; - buf[m++] = mu[j][0]; - buf[m++] = mu[j][1]; - buf[m++] = mu[j][2]; - } - } else { - if (domain->triclinic == 0) { - dx = pbc[0]*domain->xprd; - dy = pbc[1]*domain->yprd; - dz = pbc[2]*domain->zprd; - } else { - dx = pbc[0]*domain->xprd + pbc[5]*domain->xy + pbc[4]*domain->xz; - dy = pbc[1]*domain->yprd + pbc[3]*domain->yz; - dz = pbc[2]*domain->zprd; - } - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = x[j][0] + dx; - buf[m++] = x[j][1] + dy; - buf[m++] = x[j][2] + dz; - buf[m++] = mu[j][0]; - buf[m++] = mu[j][1]; - buf[m++] = mu[j][2]; - } - } - return m; -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecDipole::pack_comm_vel(int n, int *list, double *buf, - int pbc_flag, int *pbc) -{ - int i,j,m; - double dx,dy,dz,dvx,dvy,dvz; - - m = 0; - if (pbc_flag == 0) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = x[j][0]; - buf[m++] = x[j][1]; - buf[m++] = x[j][2]; - buf[m++] = mu[j][0]; - buf[m++] = mu[j][1]; - buf[m++] = mu[j][2]; - buf[m++] = v[j][0]; - buf[m++] = v[j][1]; - buf[m++] = v[j][2]; - } - } else { - if (domain->triclinic == 0) { - dx = pbc[0]*domain->xprd; - dy = pbc[1]*domain->yprd; - dz = pbc[2]*domain->zprd; - } else { - dx = pbc[0]*domain->xprd + pbc[5]*domain->xy + pbc[4]*domain->xz; - dy = pbc[1]*domain->yprd + pbc[3]*domain->yz; - dz = pbc[2]*domain->zprd; - } - if (!deform_vremap) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = x[j][0] + dx; - buf[m++] = x[j][1] + dy; - buf[m++] = x[j][2] + dz; - buf[m++] = mu[j][0]; - buf[m++] = mu[j][1]; - buf[m++] = mu[j][2]; - buf[m++] = v[j][0]; - buf[m++] = v[j][1]; - buf[m++] = v[j][2]; - } - } else { - dvx = pbc[0]*h_rate[0] + pbc[5]*h_rate[5] + pbc[4]*h_rate[4]; - dvy = pbc[1]*h_rate[1] + pbc[3]*h_rate[3]; - dvz = pbc[2]*h_rate[2]; - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = x[j][0] + dx; - buf[m++] = x[j][1] + dy; - buf[m++] = x[j][2] + dz; - buf[m++] = mu[j][0]; - buf[m++] = mu[j][1]; - buf[m++] = mu[j][2]; - if (mask[i] & deform_groupbit) { - buf[m++] = v[j][0] + dvx; - buf[m++] = v[j][1] + dvy; - buf[m++] = v[j][2] + dvz; - } else { - buf[m++] = v[j][0]; - buf[m++] = v[j][1]; - buf[m++] = v[j][2]; - } - } - } - } - return m; -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecDipole::pack_comm_hybrid(int n, int *list, double *buf) -{ - int i,j,m; - - m = 0; - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = mu[j][0]; - buf[m++] = mu[j][1]; - buf[m++] = mu[j][2]; - } - return m; -} - -/* ---------------------------------------------------------------------- */ - -void AtomVecDipole::unpack_comm(int n, int first, double *buf) -{ - int i,m,last; - - m = 0; - last = first + n; - for (i = first; i < last; i++) { - x[i][0] = buf[m++]; - x[i][1] = buf[m++]; - x[i][2] = buf[m++]; - mu[i][0] = buf[m++]; - mu[i][1] = buf[m++]; - mu[i][2] = buf[m++]; - } -} - -/* ---------------------------------------------------------------------- */ - -void AtomVecDipole::unpack_comm_vel(int n, int first, double *buf) -{ - int i,m,last; - - m = 0; - last = first + n; - for (i = first; i < last; i++) { - x[i][0] = buf[m++]; - x[i][1] = buf[m++]; - x[i][2] = buf[m++]; - mu[i][0] = buf[m++]; - mu[i][1] = buf[m++]; - mu[i][2] = buf[m++]; - v[i][0] = buf[m++]; - v[i][1] = buf[m++]; - v[i][2] = buf[m++]; - } -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecDipole::unpack_comm_hybrid(int n, int first, double *buf) -{ - int i,m,last; - - m = 0; - last = first + n; - for (i = first; i < last; i++) { - mu[i][0] = buf[m++]; - mu[i][1] = buf[m++]; - mu[i][2] = buf[m++]; - } - return m; -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecDipole::pack_reverse(int n, int first, double *buf) -{ - int i,m,last; - - m = 0; - last = first + n; - for (i = first; i < last; i++) { - buf[m++] = f[i][0]; - buf[m++] = f[i][1]; - buf[m++] = f[i][2]; - } - return m; -} - -/* ---------------------------------------------------------------------- */ - -void AtomVecDipole::unpack_reverse(int n, int *list, double *buf) -{ - int i,j,m; - - m = 0; - for (i = 0; i < n; i++) { - j = list[i]; - f[j][0] += buf[m++]; - f[j][1] += buf[m++]; - f[j][2] += buf[m++]; - } -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecDipole::pack_border(int n, int *list, double *buf, - int pbc_flag, int *pbc) -{ - int i,j,m; - double dx,dy,dz; - - m = 0; - if (pbc_flag == 0) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = x[j][0]; - buf[m++] = x[j][1]; - buf[m++] = x[j][2]; - buf[m++] = ubuf(tag[j]).d; - buf[m++] = ubuf(type[j]).d; - buf[m++] = ubuf(mask[j]).d; - buf[m++] = q[j]; - buf[m++] = mu[j][0]; - buf[m++] = mu[j][1]; - buf[m++] = mu[j][2]; - buf[m++] = mu[j][3]; - } - } else { - if (domain->triclinic == 0) { - dx = pbc[0]*domain->xprd; - dy = pbc[1]*domain->yprd; - dz = pbc[2]*domain->zprd; - } else { - dx = pbc[0]; - dy = pbc[1]; - dz = pbc[2]; - } - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = x[j][0] + dx; - buf[m++] = x[j][1] + dy; - buf[m++] = x[j][2] + dz; - buf[m++] = ubuf(tag[j]).d; - buf[m++] = ubuf(type[j]).d; - buf[m++] = ubuf(mask[j]).d; - buf[m++] = q[j]; - buf[m++] = mu[j][0]; - buf[m++] = mu[j][1]; - buf[m++] = mu[j][2]; - buf[m++] = mu[j][3]; - } - } - - if (atom->nextra_border) - for (int iextra = 0; iextra < atom->nextra_border; iextra++) - m += modify->fix[atom->extra_border[iextra]]->pack_border(n,list,&buf[m]); - - return m; -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecDipole::pack_border_vel(int n, int *list, double *buf, - int pbc_flag, int *pbc) -{ - int i,j,m; - double dx,dy,dz,dvx,dvy,dvz; - - m = 0; - if (pbc_flag == 0) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = x[j][0]; - buf[m++] = x[j][1]; - buf[m++] = x[j][2]; - buf[m++] = ubuf(tag[j]).d; - buf[m++] = ubuf(type[j]).d; - buf[m++] = ubuf(mask[j]).d; - buf[m++] = q[j]; - buf[m++] = mu[j][0]; - buf[m++] = mu[j][1]; - buf[m++] = mu[j][2]; - buf[m++] = mu[j][3]; - buf[m++] = v[j][0]; - buf[m++] = v[j][1]; - buf[m++] = v[j][2]; - } - } else { - if (domain->triclinic == 0) { - dx = pbc[0]*domain->xprd; - dy = pbc[1]*domain->yprd; - dz = pbc[2]*domain->zprd; - } else { - dx = pbc[0]; - dy = pbc[1]; - dz = pbc[2]; - } - if (!deform_vremap) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = x[j][0] + dx; - buf[m++] = x[j][1] + dy; - buf[m++] = x[j][2] + dz; - buf[m++] = ubuf(tag[j]).d; - buf[m++] = ubuf(type[j]).d; - buf[m++] = ubuf(mask[j]).d; - buf[m++] = q[j]; - buf[m++] = mu[j][0]; - buf[m++] = mu[j][1]; - buf[m++] = mu[j][2]; - buf[m++] = mu[j][3]; - buf[m++] = v[j][0]; - buf[m++] = v[j][1]; - buf[m++] = v[j][2]; - } - } else { - dvx = pbc[0]*h_rate[0] + pbc[5]*h_rate[5] + pbc[4]*h_rate[4]; - dvy = pbc[1]*h_rate[1] + pbc[3]*h_rate[3]; - dvz = pbc[2]*h_rate[2]; - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = x[j][0] + dx; - buf[m++] = x[j][1] + dy; - buf[m++] = x[j][2] + dz; - buf[m++] = ubuf(tag[j]).d; - buf[m++] = ubuf(type[j]).d; - buf[m++] = ubuf(mask[j]).d; - buf[m++] = q[j]; - buf[m++] = mu[j][0]; - buf[m++] = mu[j][1]; - buf[m++] = mu[j][2]; - buf[m++] = mu[j][3]; - if (mask[i] & deform_groupbit) { - buf[m++] = v[j][0] + dvx; - buf[m++] = v[j][1] + dvy; - buf[m++] = v[j][2] + dvz; - } else { - buf[m++] = v[j][0]; - buf[m++] = v[j][1]; - buf[m++] = v[j][2]; - } - } - } - } - - if (atom->nextra_border) - for (int iextra = 0; iextra < atom->nextra_border; iextra++) - m += modify->fix[atom->extra_border[iextra]]->pack_border(n,list,&buf[m]); - - return m; -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecDipole::pack_border_hybrid(int n, int *list, double *buf) -{ - int i,j,m; - - m = 0; - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = q[j]; - buf[m++] = mu[j][0]; - buf[m++] = mu[j][1]; - buf[m++] = mu[j][2]; - buf[m++] = mu[j][3]; - } - return m; -} - -/* ---------------------------------------------------------------------- */ - -void AtomVecDipole::unpack_border(int n, int first, double *buf) -{ - int i,m,last; - - m = 0; - last = first + n; - for (i = first; i < last; i++) { - if (i == nmax) grow(0); - x[i][0] = buf[m++]; - x[i][1] = buf[m++]; - x[i][2] = buf[m++]; - tag[i] = (tagint) ubuf(buf[m++]).i; - type[i] = (int) ubuf(buf[m++]).i; - mask[i] = (int) ubuf(buf[m++]).i; - q[i] = buf[m++]; - mu[i][0] = buf[m++]; - mu[i][1] = buf[m++]; - mu[i][2] = buf[m++]; - mu[i][3] = buf[m++]; - } - - if (atom->nextra_border) - for (int iextra = 0; iextra < atom->nextra_border; iextra++) - m += modify->fix[atom->extra_border[iextra]]-> - unpack_border(n,first,&buf[m]); -} - -/* ---------------------------------------------------------------------- */ - -void AtomVecDipole::unpack_border_vel(int n, int first, double *buf) -{ - int i,m,last; - - m = 0; - last = first + n; - for (i = first; i < last; i++) { - if (i == nmax) grow(0); - x[i][0] = buf[m++]; - x[i][1] = buf[m++]; - x[i][2] = buf[m++]; - tag[i] = (tagint) ubuf(buf[m++]).i; - type[i] = (int) ubuf(buf[m++]).i; - mask[i] = (int) ubuf(buf[m++]).i; - q[i] = buf[m++]; - mu[i][0] = buf[m++]; - mu[i][1] = buf[m++]; - mu[i][2] = buf[m++]; - mu[i][3] = buf[m++]; - v[i][0] = buf[m++]; - v[i][1] = buf[m++]; - v[i][2] = buf[m++]; - } - - if (atom->nextra_border) - for (int iextra = 0; iextra < atom->nextra_border; iextra++) - m += modify->fix[atom->extra_border[iextra]]-> - unpack_border(n,first,&buf[m]); -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecDipole::unpack_border_hybrid(int n, int first, double *buf) -{ - int i,m,last; - - m = 0; - last = first + n; - for (i = first; i < last; i++) { - q[i] = buf[m++]; - mu[i][0] = buf[m++]; - mu[i][1] = buf[m++]; - mu[i][2] = buf[m++]; - mu[i][3] = buf[m++]; - } - return m; -} - -/* ---------------------------------------------------------------------- - pack all atom quantities for shipping to another proc - xyz must be 1st 3 values, so that comm::exchange can test on them -------------------------------------------------------------------------- */ - -int AtomVecDipole::pack_exchange(int i, double *buf) -{ - int m = 1; - buf[m++] = x[i][0]; - buf[m++] = x[i][1]; - buf[m++] = x[i][2]; - buf[m++] = v[i][0]; - buf[m++] = v[i][1]; - buf[m++] = v[i][2]; - buf[m++] = ubuf(tag[i]).d; - buf[m++] = ubuf(type[i]).d; - buf[m++] = ubuf(mask[i]).d; - buf[m++] = ubuf(image[i]).d; - - buf[m++] = q[i]; - buf[m++] = mu[i][0]; - buf[m++] = mu[i][1]; - buf[m++] = mu[i][2]; - buf[m++] = mu[i][3]; - - if (atom->nextra_grow) - for (int iextra = 0; iextra < atom->nextra_grow; iextra++) - m += modify->fix[atom->extra_grow[iextra]]->pack_exchange(i,&buf[m]); - - buf[0] = m; - return m; -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecDipole::unpack_exchange(double *buf) -{ - int nlocal = atom->nlocal; - if (nlocal == nmax) grow(0); - - int m = 1; - x[nlocal][0] = buf[m++]; - x[nlocal][1] = buf[m++]; - x[nlocal][2] = buf[m++]; - v[nlocal][0] = buf[m++]; - v[nlocal][1] = buf[m++]; - v[nlocal][2] = buf[m++]; - tag[nlocal] = (tagint) ubuf(buf[m++]).i; - type[nlocal] = (int) ubuf(buf[m++]).i; - mask[nlocal] = (int) ubuf(buf[m++]).i; - image[nlocal] = (imageint) ubuf(buf[m++]).i; - q[nlocal] = buf[m++]; - mu[nlocal][0] = buf[m++]; - mu[nlocal][1] = buf[m++]; - mu[nlocal][2] = buf[m++]; - mu[nlocal][3] = buf[m++]; + // strings with peratom variables to include in each AtomVec method + // strings cannot contain fields in corresponding AtomVec default strings + // order of fields in a string does not matter + // except: fields_data_atom & fields_data_vel must match data file - if (atom->nextra_grow) - for (int iextra = 0; iextra < atom->nextra_grow; iextra++) - m += modify->fix[atom->extra_grow[iextra]]-> - unpack_exchange(nlocal,&buf[m]); + fields_grow = (char *) "q mu"; + fields_copy = (char *) "q mu"; + fields_comm = (char *) "mu3"; + fields_comm_vel = (char *) "mu3"; + fields_reverse = (char *) ""; + fields_border = (char *) "q mu"; + fields_border_vel = (char *) "q mu"; + fields_exchange = (char *) "q mu"; + fields_restart = (char *) "q mu"; + fields_create = (char *) "q mu"; + fields_data_atom = (char *) "id type q x mu3"; + fields_data_vel = (char *) "id v"; - atom->nlocal++; - return m; + setup_fields(); } /* ---------------------------------------------------------------------- - size of restart data for all atoms owned by this proc - include extra data stored by fixes + set local copies of all grow ptrs used by this class, except defaults + needed in replicate when 2 atom classes exist and it calls pack_restart() ------------------------------------------------------------------------- */ -int AtomVecDipole::size_restart() +void AtomVecDipole::grow_pointers() { - int i; - - int nlocal = atom->nlocal; - int n = 16 * nlocal; - - if (atom->nextra_restart) - for (int iextra = 0; iextra < atom->nextra_restart; iextra++) - for (i = 0; i < nlocal; i++) - n += modify->fix[atom->extra_restart[iextra]]->size_restart(i); - - return n; -} - -/* ---------------------------------------------------------------------- - pack atom I's data for restart file including extra quantities - xyz must be 1st 3 values, so that read_restart can test on them - molecular types may be negative, but write as positive -------------------------------------------------------------------------- */ - -int AtomVecDipole::pack_restart(int i, double *buf) -{ - int m = 1; - buf[m++] = x[i][0]; - buf[m++] = x[i][1]; - buf[m++] = x[i][2]; - buf[m++] = ubuf(tag[i]).d; - buf[m++] = ubuf(type[i]).d; - buf[m++] = ubuf(mask[i]).d; - buf[m++] = ubuf(image[i]).d; - buf[m++] = v[i][0]; - buf[m++] = v[i][1]; - buf[m++] = v[i][2]; - - buf[m++] = q[i]; - buf[m++] = mu[i][0]; - buf[m++] = mu[i][1]; - buf[m++] = mu[i][2]; - buf[m++] = mu[i][3]; - - if (atom->nextra_restart) - for (int iextra = 0; iextra < atom->nextra_restart; iextra++) - m += modify->fix[atom->extra_restart[iextra]]->pack_restart(i,&buf[m]); - - buf[0] = m; - return m; -} - -/* ---------------------------------------------------------------------- - unpack data for one atom from restart file including extra quantities -------------------------------------------------------------------------- */ - -int AtomVecDipole::unpack_restart(double *buf) -{ - int nlocal = atom->nlocal; - if (nlocal == nmax) { - grow(0); - if (atom->nextra_store) - memory->grow(atom->extra,nmax,atom->nextra_store,"atom:extra"); - } - - int m = 1; - x[nlocal][0] = buf[m++]; - x[nlocal][1] = buf[m++]; - x[nlocal][2] = buf[m++]; - tag[nlocal] = (tagint) ubuf(buf[m++]).i; - type[nlocal] = (int) ubuf(buf[m++]).i; - mask[nlocal] = (int) ubuf(buf[m++]).i; - image[nlocal] = (imageint) ubuf(buf[m++]).i; - v[nlocal][0] = buf[m++]; - v[nlocal][1] = buf[m++]; - v[nlocal][2] = buf[m++]; - - q[nlocal] = buf[m++]; - mu[nlocal][0] = buf[m++]; - mu[nlocal][1] = buf[m++]; - mu[nlocal][2] = buf[m++]; - mu[nlocal][3] = buf[m++]; - - double **extra = atom->extra; - if (atom->nextra_store) { - int size = static_cast (buf[0]) - m; - for (int i = 0; i < size; i++) extra[nlocal][i] = buf[m++]; - } - - atom->nlocal++; - return m; + mu = atom->mu; } /* ---------------------------------------------------------------------- - create one atom of itype at coord - set other values to defaults + modify what AtomVec::data_atom() just unpacked + or initialize other atom quantities ------------------------------------------------------------------------- */ -void AtomVecDipole::create_atom(int itype, double *coord) +void AtomVecDipole::data_atom_post(int ilocal) { - int nlocal = atom->nlocal; - if (nlocal == nmax) grow(0); - - tag[nlocal] = 0; - type[nlocal] = itype; - x[nlocal][0] = coord[0]; - x[nlocal][1] = coord[1]; - x[nlocal][2] = coord[2]; - mask[nlocal] = 1; - image[nlocal] = ((imageint) IMGMAX << IMG2BITS) | - ((imageint) IMGMAX << IMGBITS) | IMGMAX; - v[nlocal][0] = 0.0; - v[nlocal][1] = 0.0; - v[nlocal][2] = 0.0; - - q[nlocal] = 0.0; - mu[nlocal][0] = 0.0; - mu[nlocal][1] = 0.0; - mu[nlocal][2] = 0.0; - mu[nlocal][3] = 0.0; - - atom->nlocal++; -} - -/* ---------------------------------------------------------------------- - unpack one line from Atoms section of data file - initialize other atom quantities -------------------------------------------------------------------------- */ - -void AtomVecDipole::data_atom(double *coord, imageint imagetmp, char **values) -{ - int nlocal = atom->nlocal; - if (nlocal == nmax) grow(0); - - tag[nlocal] = utils::tnumeric(FLERR,values[0],true,lmp); - type[nlocal] = utils::inumeric(FLERR,values[1],true,lmp); - if (type[nlocal] <= 0 || type[nlocal] > atom->ntypes) - error->one(FLERR,"Invalid atom type in Atoms section of data file"); - - q[nlocal] = utils::numeric(FLERR,values[2],true,lmp); - - x[nlocal][0] = coord[0]; - x[nlocal][1] = coord[1]; - x[nlocal][2] = coord[2]; - - mu[nlocal][0] = utils::numeric(FLERR,values[6],true,lmp); - mu[nlocal][1] = utils::numeric(FLERR,values[7],true,lmp); - mu[nlocal][2] = utils::numeric(FLERR,values[8],true,lmp); - mu[nlocal][3] = sqrt(mu[nlocal][0]*mu[nlocal][0] + - mu[nlocal][1]*mu[nlocal][1] + - mu[nlocal][2]*mu[nlocal][2]); - - image[nlocal] = imagetmp; - - mask[nlocal] = 1; - v[nlocal][0] = 0.0; - v[nlocal][1] = 0.0; - v[nlocal][2] = 0.0; - - atom->nlocal++; -} - -/* ---------------------------------------------------------------------- - unpack hybrid quantities from one line in Atoms section of data file - initialize other atom quantities for this sub-style -------------------------------------------------------------------------- */ - -int AtomVecDipole::data_atom_hybrid(int nlocal, char **values) -{ - q[nlocal] = utils::numeric(FLERR,values[0],true,lmp); - mu[nlocal][0] = utils::numeric(FLERR,values[1],true,lmp); - mu[nlocal][1] = utils::numeric(FLERR,values[2],true,lmp); - mu[nlocal][2] = utils::numeric(FLERR,values[3],true,lmp); - mu[nlocal][3] = sqrt(mu[nlocal][0]*mu[nlocal][0] + - mu[nlocal][1]*mu[nlocal][1] + - mu[nlocal][2]*mu[nlocal][2]); - return 4; -} - -/* ---------------------------------------------------------------------- - pack atom info for data file including 3 image flags -------------------------------------------------------------------------- */ - -void AtomVecDipole::pack_data(double **buf) -{ - int nlocal = atom->nlocal; - for (int i = 0; i < nlocal; i++) { - buf[i][0] = ubuf(tag[i]).d; - buf[i][1] = ubuf(type[i]).d; - buf[i][2] = q[i]; - buf[i][3] = x[i][0]; - buf[i][4] = x[i][1]; - buf[i][5] = x[i][2]; - buf[i][6] = mu[i][0]; - buf[i][7] = mu[i][1]; - buf[i][8] = mu[i][2]; - buf[i][9] = ubuf((image[i] & IMGMASK) - IMGMAX).d; - buf[i][10] = ubuf((image[i] >> IMGBITS & IMGMASK) - IMGMAX).d; - buf[i][11] = ubuf((image[i] >> IMG2BITS) - IMGMAX).d; - } -} - -/* ---------------------------------------------------------------------- - pack hybrid atom info for data file -------------------------------------------------------------------------- */ - -int AtomVecDipole::pack_data_hybrid(int i, double *buf) -{ - buf[0] = q[i]; - buf[1] = mu[i][0]; - buf[2] = mu[i][1]; - buf[3] = mu[i][2]; - return 4; -} - -/* ---------------------------------------------------------------------- - write atom info to data file including 3 image flags -------------------------------------------------------------------------- */ - -void AtomVecDipole::write_data(FILE *fp, int n, double **buf) -{ - for (int i = 0; i < n; i++) - fprintf(fp,TAGINT_FORMAT \ - " %d %-1.16e %-1.16e %-1.16e %-1.16e %-1.16e %-1.16e " - "%-1.16e %d %d %d\n", - (tagint) ubuf(buf[i][0]).i,(int) ubuf(buf[i][1]).i, - buf[i][2],buf[i][3],buf[i][4], - buf[i][5],buf[i][6],buf[i][7],buf[i][8], - (int) ubuf(buf[i][9]).i,(int) ubuf(buf[i][10]).i, - (int) ubuf(buf[i][11]).i); -} - -/* ---------------------------------------------------------------------- - write hybrid atom info to data file -------------------------------------------------------------------------- */ - -int AtomVecDipole::write_data_hybrid(FILE *fp, double *buf) -{ - fprintf(fp," %-1.16e %-1.16e %-1.16e %-1.16e",buf[0],buf[1],buf[2],buf[3]); - return 4; -} - -/* ---------------------------------------------------------------------- - return # of bytes of allocated memory -------------------------------------------------------------------------- */ - -bigint AtomVecDipole::memory_usage() -{ - bigint bytes = 0; - - if (atom->memcheck("tag")) bytes += memory->usage(tag,nmax); - if (atom->memcheck("type")) bytes += memory->usage(type,nmax); - if (atom->memcheck("mask")) bytes += memory->usage(mask,nmax); - if (atom->memcheck("image")) bytes += memory->usage(image,nmax); - if (atom->memcheck("x")) bytes += memory->usage(x,nmax,3); - if (atom->memcheck("v")) bytes += memory->usage(v,nmax,3); - if (atom->memcheck("f")) bytes += memory->usage(f,nmax*comm->nthreads,3); - - if (atom->memcheck("q")) bytes += memory->usage(q,nmax); - if (atom->memcheck("mu")) bytes += memory->usage(mu,nmax,4); - - return bytes; + double *mu_one = mu[ilocal]; + mu_one[3] = + sqrt(mu_one[0]*mu_one[0] + mu_one[1]*mu_one[1] + mu_one[2]*mu_one[2]); } diff --git a/src/DIPOLE/atom_vec_dipole.h b/src/DIPOLE/atom_vec_dipole.h index c6ee23def1e5b346fe68e35e87ec262d1e061e5f..2030892a43d42116a7dd2ca8a30a4c8502e9842f 100644 --- a/src/DIPOLE/atom_vec_dipole.h +++ b/src/DIPOLE/atom_vec_dipole.h @@ -27,43 +27,12 @@ namespace LAMMPS_NS { class AtomVecDipole : public AtomVec { public: AtomVecDipole(class LAMMPS *); - void grow(int); - void grow_reset(); - void copy(int, int, int); - int pack_comm(int, int *, double *, int, int *); - int pack_comm_vel(int, int *, double *, int, int *); - int pack_comm_hybrid(int, int *, double *); - void unpack_comm(int, int, double *); - void unpack_comm_vel(int, int, double *); - int unpack_comm_hybrid(int, int, double *); - int pack_reverse(int, int, double *); - void unpack_reverse(int, int *, double *); - int pack_border(int, int *, double *, int, int *); - int pack_border_vel(int, int *, double *, int, int *); - int pack_border_hybrid(int, int *, double *); - void unpack_border(int, int, double *); - void unpack_border_vel(int, int, double *); - int unpack_border_hybrid(int, int, double *); - int pack_exchange(int, double *); - int unpack_exchange(double *); - int size_restart(); - int pack_restart(int, double *); - int unpack_restart(double *); - void create_atom(int, double *); - void data_atom(double *, imageint, char **); - int data_atom_hybrid(int, char **); - void pack_data(double **); - int pack_data_hybrid(int, double *); - void write_data(FILE *, int, double **); - int write_data_hybrid(FILE *, double *); - bigint memory_usage(); + + void grow_pointers(); + void data_atom_post(int); private: - tagint *tag; - int *type,*mask; - imageint *image; - double **x,**v,**f; - double *q,**mu; + double **mu; }; } @@ -73,13 +42,4 @@ class AtomVecDipole : public AtomVec { /* ERROR/WARNING messages: -E: Per-processor system is too big - -The number of owned atoms plus ghost atoms on a single -processor must fit in 32-bit integer. - -E: Invalid atom type in Atoms section of data file - -Atom types must range from 1 to specified # of types. - */ diff --git a/src/GPU/fix_gpu.cpp b/src/GPU/fix_gpu.cpp index cb2930a3ea9c54eff8b3c02b49086f776b326093..ecde8ea0939b3063493ea47aa5ea7886139564f4 100644 --- a/src/GPU/fix_gpu.cpp +++ b/src/GPU/fix_gpu.cpp @@ -225,12 +225,6 @@ void FixGPU::init() error->all(FLERR,"GPU package does not (yet) work with " "atom_style template"); - // neighbor list builds on the GPU with triclinic box is not yet supported - - if ((_gpu_mode == GPU_NEIGH || _gpu_mode == GPU_HYB_NEIGH) && - domain->triclinic) - error->all(FLERR,"Cannot use package gpu neigh yes with triclinic box"); - // give a warning if no pair style is defined if (!force->pair) diff --git a/src/GPU/pair_beck_gpu.cpp b/src/GPU/pair_beck_gpu.cpp index f4b73ba5a6b7755ca623cdf86dda8d9b940c92a1..28386f5fd5469d7ddccd5a5317e0d46c5a3d9cb6 100644 --- a/src/GPU/pair_beck_gpu.cpp +++ b/src/GPU/pair_beck_gpu.cpp @@ -94,10 +94,21 @@ void PairBeckGPU::compute(int eflag, int vflag) bool success = true; int *ilist, *numneigh, **firstneigh; if (gpu_mode != GPU_FORCE) { + double sublo[3],subhi[3]; + if (domain->triclinic == 0) { + sublo[0] = domain->sublo[0]; + sublo[1] = domain->sublo[1]; + sublo[2] = domain->sublo[2]; + subhi[0] = domain->subhi[0]; + subhi[1] = domain->subhi[1]; + subhi[2] = domain->subhi[2]; + } else { + domain->bbox(domain->sublo_lamda,domain->subhi_lamda,sublo,subhi); + } inum = atom->nlocal; firstneigh = beck_gpu_compute_n(neighbor->ago, inum, nall, - atom->x, atom->type, domain->sublo, - domain->subhi, atom->tag, atom->nspecial, + atom->x, atom->type, sublo, + subhi, atom->tag, atom->nspecial, atom->special, eflag, vflag, eflag_atom, vflag_atom, host_start, &ilist, &numneigh, cpu_time, success); diff --git a/src/GPU/pair_born_coul_long_cs_gpu.cpp b/src/GPU/pair_born_coul_long_cs_gpu.cpp index bab66e0351566eb6ac5c6a76fc6e3fc5be253df1..8bc99a3d4902e2f2e862cf89b0ff766e9e1ce2fa 100644 --- a/src/GPU/pair_born_coul_long_cs_gpu.cpp +++ b/src/GPU/pair_born_coul_long_cs_gpu.cpp @@ -116,9 +116,20 @@ void PairBornCoulLongCSGPU::compute(int eflag, int vflag) bool success = true; int *ilist, *numneigh, **firstneigh; if (gpu_mode != GPU_FORCE) { + double sublo[3],subhi[3]; + if (domain->triclinic == 0) { + sublo[0] = domain->sublo[0]; + sublo[1] = domain->sublo[1]; + sublo[2] = domain->sublo[2]; + subhi[0] = domain->subhi[0]; + subhi[1] = domain->subhi[1]; + subhi[2] = domain->subhi[2]; + } else { + domain->bbox(domain->sublo_lamda,domain->subhi_lamda,sublo,subhi); + } inum = atom->nlocal; firstneigh = bornclcs_gpu_compute_n(neighbor->ago, inum, nall, atom->x, - atom->type, domain->sublo, domain->subhi, + atom->type, sublo, subhi, atom->tag, atom->nspecial, atom->special, eflag, vflag, eflag_atom, vflag_atom, host_start, &ilist, &numneigh, cpu_time, diff --git a/src/GPU/pair_born_coul_long_gpu.cpp b/src/GPU/pair_born_coul_long_gpu.cpp index 1b548edab6c2b1cb797e5cebb56d47f0f33f21dd..5dd4c3421f8b8b5ee3b54ea80ea3f58741250d9d 100644 --- a/src/GPU/pair_born_coul_long_gpu.cpp +++ b/src/GPU/pair_born_coul_long_gpu.cpp @@ -111,9 +111,20 @@ void PairBornCoulLongGPU::compute(int eflag, int vflag) bool success = true; int *ilist, *numneigh, **firstneigh; if (gpu_mode != GPU_FORCE) { + double sublo[3],subhi[3]; + if (domain->triclinic == 0) { + sublo[0] = domain->sublo[0]; + sublo[1] = domain->sublo[1]; + sublo[2] = domain->sublo[2]; + subhi[0] = domain->subhi[0]; + subhi[1] = domain->subhi[1]; + subhi[2] = domain->subhi[2]; + } else { + domain->bbox(domain->sublo_lamda,domain->subhi_lamda,sublo,subhi); + } inum = atom->nlocal; firstneigh = borncl_gpu_compute_n(neighbor->ago, inum, nall, atom->x, - atom->type, domain->sublo, domain->subhi, + atom->type, sublo, subhi, atom->tag, atom->nspecial, atom->special, eflag, vflag, eflag_atom, vflag_atom, host_start, &ilist, &numneigh, cpu_time, diff --git a/src/GPU/pair_born_coul_wolf_cs_gpu.cpp b/src/GPU/pair_born_coul_wolf_cs_gpu.cpp index 4e488abc15290ea66c451d59297706f933ce2b4d..4ba28c25aa02dd793080af7e33bbb7510293c8f3 100644 --- a/src/GPU/pair_born_coul_wolf_cs_gpu.cpp +++ b/src/GPU/pair_born_coul_wolf_cs_gpu.cpp @@ -104,10 +104,21 @@ void PairBornCoulWolfCSGPU::compute(int eflag, int vflag) bool success = true; int *ilist, *numneigh, **firstneigh; if (gpu_mode != GPU_FORCE) { + double sublo[3],subhi[3]; + if (domain->triclinic == 0) { + sublo[0] = domain->sublo[0]; + sublo[1] = domain->sublo[1]; + sublo[2] = domain->sublo[2]; + subhi[0] = domain->subhi[0]; + subhi[1] = domain->subhi[1]; + subhi[2] = domain->subhi[2]; + } else { + domain->bbox(domain->sublo_lamda,domain->subhi_lamda,sublo,subhi); + } inum = atom->nlocal; firstneigh = borncwcs_gpu_compute_n(neighbor->ago, inum, nall, - atom->x, atom->type, domain->sublo, - domain->subhi, atom->tag, atom->nspecial, + atom->x, atom->type, sublo, + subhi, atom->tag, atom->nspecial, atom->special, eflag, vflag, eflag_atom, vflag_atom, host_start, &ilist, &numneigh, cpu_time, success, diff --git a/src/GPU/pair_born_coul_wolf_gpu.cpp b/src/GPU/pair_born_coul_wolf_gpu.cpp index c5243dc443625b659a835c7680934535951ee6c7..b5e0edea6d29ad2ad6400b5d420ba5facb20310e 100644 --- a/src/GPU/pair_born_coul_wolf_gpu.cpp +++ b/src/GPU/pair_born_coul_wolf_gpu.cpp @@ -102,10 +102,21 @@ void PairBornCoulWolfGPU::compute(int eflag, int vflag) bool success = true; int *ilist, *numneigh, **firstneigh; if (gpu_mode != GPU_FORCE) { + double sublo[3],subhi[3]; + if (domain->triclinic == 0) { + sublo[0] = domain->sublo[0]; + sublo[1] = domain->sublo[1]; + sublo[2] = domain->sublo[2]; + subhi[0] = domain->subhi[0]; + subhi[1] = domain->subhi[1]; + subhi[2] = domain->subhi[2]; + } else { + domain->bbox(domain->sublo_lamda,domain->subhi_lamda,sublo,subhi); + } inum = atom->nlocal; firstneigh = borncw_gpu_compute_n(neighbor->ago, inum, nall, - atom->x, atom->type, domain->sublo, - domain->subhi, atom->tag, atom->nspecial, + atom->x, atom->type, sublo, + subhi, atom->tag, atom->nspecial, atom->special, eflag, vflag, eflag_atom, vflag_atom, host_start, &ilist, &numneigh, cpu_time, success, diff --git a/src/GPU/pair_born_gpu.cpp b/src/GPU/pair_born_gpu.cpp index b71a296d6638d2c450dd47e3259c181e27aa75e6..a5e94389b6a1b9d740162a44bc57f46c6b92b2e5 100644 --- a/src/GPU/pair_born_gpu.cpp +++ b/src/GPU/pair_born_gpu.cpp @@ -97,10 +97,21 @@ void PairBornGPU::compute(int eflag, int vflag) bool success = true; int *ilist, *numneigh, **firstneigh; if (gpu_mode != GPU_FORCE) { + double sublo[3],subhi[3]; + if (domain->triclinic == 0) { + sublo[0] = domain->sublo[0]; + sublo[1] = domain->sublo[1]; + sublo[2] = domain->sublo[2]; + subhi[0] = domain->subhi[0]; + subhi[1] = domain->subhi[1]; + subhi[2] = domain->subhi[2]; + } else { + domain->bbox(domain->sublo_lamda,domain->subhi_lamda,sublo,subhi); + } inum = atom->nlocal; firstneigh = born_gpu_compute_n(neighbor->ago, inum, nall, - atom->x, atom->type, domain->sublo, - domain->subhi, atom->tag, atom->nspecial, + atom->x, atom->type, sublo, + subhi, atom->tag, atom->nspecial, atom->special, eflag, vflag, eflag_atom, vflag_atom, host_start, &ilist, &numneigh, cpu_time, success); diff --git a/src/GPU/pair_buck_coul_cut_gpu.cpp b/src/GPU/pair_buck_coul_cut_gpu.cpp index 5d27ee8c51cdf909d1e13bfb951d33b3a19f80bf..1a5479ea1d6ae2d0abecdc3abf0ad4085e0498eb 100644 --- a/src/GPU/pair_buck_coul_cut_gpu.cpp +++ b/src/GPU/pair_buck_coul_cut_gpu.cpp @@ -98,10 +98,21 @@ void PairBuckCoulCutGPU::compute(int eflag, int vflag) bool success = true; int *ilist, *numneigh, **firstneigh; if (gpu_mode != GPU_FORCE) { + double sublo[3],subhi[3]; + if (domain->triclinic == 0) { + sublo[0] = domain->sublo[0]; + sublo[1] = domain->sublo[1]; + sublo[2] = domain->sublo[2]; + subhi[0] = domain->subhi[0]; + subhi[1] = domain->subhi[1]; + subhi[2] = domain->subhi[2]; + } else { + domain->bbox(domain->sublo_lamda,domain->subhi_lamda,sublo,subhi); + } inum = atom->nlocal; firstneigh = buckc_gpu_compute_n(neighbor->ago, inum, nall, - atom->x, atom->type, domain->sublo, - domain->subhi, atom->tag, atom->nspecial, + atom->x, atom->type, sublo, + subhi, atom->tag, atom->nspecial, atom->special, eflag, vflag, eflag_atom, vflag_atom, host_start, &ilist, &numneigh, cpu_time, success, diff --git a/src/GPU/pair_buck_coul_long_gpu.cpp b/src/GPU/pair_buck_coul_long_gpu.cpp index 7e59562ebf07931a4ea3dcef19767f9ef2d5f767..221e178b57b6038b6857d5a52f201a3b3e11664c 100644 --- a/src/GPU/pair_buck_coul_long_gpu.cpp +++ b/src/GPU/pair_buck_coul_long_gpu.cpp @@ -107,9 +107,20 @@ void PairBuckCoulLongGPU::compute(int eflag, int vflag) bool success = true; int *ilist, *numneigh, **firstneigh; if (gpu_mode != GPU_FORCE) { + double sublo[3],subhi[3]; + if (domain->triclinic == 0) { + sublo[0] = domain->sublo[0]; + sublo[1] = domain->sublo[1]; + sublo[2] = domain->sublo[2]; + subhi[0] = domain->subhi[0]; + subhi[1] = domain->subhi[1]; + subhi[2] = domain->subhi[2]; + } else { + domain->bbox(domain->sublo_lamda,domain->subhi_lamda,sublo,subhi); + } inum = atom->nlocal; firstneigh = buckcl_gpu_compute_n(neighbor->ago, inum, nall, atom->x, - atom->type, domain->sublo, domain->subhi, + atom->type, sublo, subhi, atom->tag, atom->nspecial, atom->special, eflag, vflag, eflag_atom, vflag_atom, host_start, &ilist, &numneigh, cpu_time, diff --git a/src/GPU/pair_buck_gpu.cpp b/src/GPU/pair_buck_gpu.cpp index b4d5677d53f501ca7aa8ddc2bfe433ed52dc1e06..07107750e63c3c1d5d0ab7600ff3cc8e97e598c3 100644 --- a/src/GPU/pair_buck_gpu.cpp +++ b/src/GPU/pair_buck_gpu.cpp @@ -95,10 +95,21 @@ void PairBuckGPU::compute(int eflag, int vflag) bool success = true; int *ilist, *numneigh, **firstneigh; if (gpu_mode != GPU_FORCE) { + double sublo[3],subhi[3]; + if (domain->triclinic == 0) { + sublo[0] = domain->sublo[0]; + sublo[1] = domain->sublo[1]; + sublo[2] = domain->sublo[2]; + subhi[0] = domain->subhi[0]; + subhi[1] = domain->subhi[1]; + subhi[2] = domain->subhi[2]; + } else { + domain->bbox(domain->sublo_lamda,domain->subhi_lamda,sublo,subhi); + } inum = atom->nlocal; firstneigh = buck_gpu_compute_n(neighbor->ago, inum, nall, - atom->x, atom->type, domain->sublo, - domain->subhi, atom->tag, atom->nspecial, + atom->x, atom->type, sublo, + subhi, atom->tag, atom->nspecial, atom->special, eflag, vflag, eflag_atom, vflag_atom, host_start, &ilist, &numneigh, cpu_time, success); diff --git a/src/GPU/pair_colloid_gpu.cpp b/src/GPU/pair_colloid_gpu.cpp index 230adb3db037df417f5a50e604c960f1885060c2..a7cafbe75a05d51b09e2e950ed536fc9dfbf3d80 100644 --- a/src/GPU/pair_colloid_gpu.cpp +++ b/src/GPU/pair_colloid_gpu.cpp @@ -95,10 +95,21 @@ void PairColloidGPU::compute(int eflag, int vflag) bool success = true; int *ilist, *numneigh, **firstneigh; if (gpu_mode != GPU_FORCE) { + double sublo[3],subhi[3]; + if (domain->triclinic == 0) { + sublo[0] = domain->sublo[0]; + sublo[1] = domain->sublo[1]; + sublo[2] = domain->sublo[2]; + subhi[0] = domain->subhi[0]; + subhi[1] = domain->subhi[1]; + subhi[2] = domain->subhi[2]; + } else { + domain->bbox(domain->sublo_lamda,domain->subhi_lamda,sublo,subhi); + } inum = atom->nlocal; firstneigh = colloid_gpu_compute_n(neighbor->ago, inum, nall, - atom->x, atom->type, domain->sublo, - domain->subhi, atom->tag, atom->nspecial, + atom->x, atom->type, sublo, + subhi, atom->tag, atom->nspecial, atom->special, eflag, vflag, eflag_atom, vflag_atom, host_start, &ilist, &numneigh, cpu_time, success); diff --git a/src/GPU/pair_coul_cut_gpu.cpp b/src/GPU/pair_coul_cut_gpu.cpp index 0242c983436f4d42c0993be2254ac87dcd5dcfe7..bacbdbb1a026e894ede48d06ff51bc61ae0b9976 100644 --- a/src/GPU/pair_coul_cut_gpu.cpp +++ b/src/GPU/pair_coul_cut_gpu.cpp @@ -95,9 +95,20 @@ void PairCoulCutGPU::compute(int eflag, int vflag) bool success = true; int *ilist, *numneigh, **firstneigh; if (gpu_mode != GPU_FORCE) { + double sublo[3],subhi[3]; + if (domain->triclinic == 0) { + sublo[0] = domain->sublo[0]; + sublo[1] = domain->sublo[1]; + sublo[2] = domain->sublo[2]; + subhi[0] = domain->subhi[0]; + subhi[1] = domain->subhi[1]; + subhi[2] = domain->subhi[2]; + } else { + domain->bbox(domain->sublo_lamda,domain->subhi_lamda,sublo,subhi); + } inum = atom->nlocal; firstneigh = coul_gpu_compute_n(neighbor->ago, inum, nall, atom->x, - atom->type, domain->sublo, domain->subhi, + atom->type, sublo, subhi, atom->tag, atom->nspecial, atom->special, eflag, vflag, eflag_atom, vflag_atom, host_start, &ilist, &numneigh, cpu_time, diff --git a/src/GPU/pair_coul_debye_gpu.cpp b/src/GPU/pair_coul_debye_gpu.cpp index 198f7f5f67865eb9a3071b01eded1110a76e3dbf..96be67a1faa111cebec456d9ea1595c7a2dd0cd9 100644 --- a/src/GPU/pair_coul_debye_gpu.cpp +++ b/src/GPU/pair_coul_debye_gpu.cpp @@ -96,9 +96,20 @@ void PairCoulDebyeGPU::compute(int eflag, int vflag) bool success = true; int *ilist, *numneigh, **firstneigh; if (gpu_mode != GPU_FORCE) { + double sublo[3],subhi[3]; + if (domain->triclinic == 0) { + sublo[0] = domain->sublo[0]; + sublo[1] = domain->sublo[1]; + sublo[2] = domain->sublo[2]; + subhi[0] = domain->subhi[0]; + subhi[1] = domain->subhi[1]; + subhi[2] = domain->subhi[2]; + } else { + domain->bbox(domain->sublo_lamda,domain->subhi_lamda,sublo,subhi); + } inum = atom->nlocal; firstneigh = cdebye_gpu_compute_n(neighbor->ago, inum, nall, atom->x, - atom->type, domain->sublo, domain->subhi, + atom->type, sublo, subhi, atom->tag, atom->nspecial, atom->special, eflag, vflag, eflag_atom, vflag_atom, host_start, &ilist, &numneigh, cpu_time, diff --git a/src/GPU/pair_coul_dsf_gpu.cpp b/src/GPU/pair_coul_dsf_gpu.cpp index 67d025ff708d66818cf5792bf66ae53ab80b0a4e..244941c117cb1b3aa794406ddc83f3c47da96c70 100644 --- a/src/GPU/pair_coul_dsf_gpu.cpp +++ b/src/GPU/pair_coul_dsf_gpu.cpp @@ -107,9 +107,20 @@ void PairCoulDSFGPU::compute(int eflag, int vflag) bool success = true; int *ilist, *numneigh, **firstneigh; if (gpu_mode != GPU_FORCE) { + double sublo[3],subhi[3]; + if (domain->triclinic == 0) { + sublo[0] = domain->sublo[0]; + sublo[1] = domain->sublo[1]; + sublo[2] = domain->sublo[2]; + subhi[0] = domain->subhi[0]; + subhi[1] = domain->subhi[1]; + subhi[2] = domain->subhi[2]; + } else { + domain->bbox(domain->sublo_lamda,domain->subhi_lamda,sublo,subhi); + } inum = atom->nlocal; firstneigh = cdsf_gpu_compute_n(neighbor->ago, inum, nall, atom->x, - atom->type, domain->sublo, domain->subhi, + atom->type, sublo, subhi, atom->tag, atom->nspecial, atom->special, eflag, vflag, eflag_atom, vflag_atom, host_start, &ilist, &numneigh, cpu_time, diff --git a/src/GPU/pair_coul_long_cs_gpu.cpp b/src/GPU/pair_coul_long_cs_gpu.cpp index afd0d6cf5662b37bf4cb66271e28c7c6b59997a3..bcbf7216e2235476dccd02d22b180519a9f10c42 100644 --- a/src/GPU/pair_coul_long_cs_gpu.cpp +++ b/src/GPU/pair_coul_long_cs_gpu.cpp @@ -109,9 +109,20 @@ void PairCoulLongCSGPU::compute(int eflag, int vflag) bool success = true; int *ilist, *numneigh, **firstneigh; if (gpu_mode != GPU_FORCE) { + double sublo[3],subhi[3]; + if (domain->triclinic == 0) { + sublo[0] = domain->sublo[0]; + sublo[1] = domain->sublo[1]; + sublo[2] = domain->sublo[2]; + subhi[0] = domain->subhi[0]; + subhi[1] = domain->subhi[1]; + subhi[2] = domain->subhi[2]; + } else { + domain->bbox(domain->sublo_lamda,domain->subhi_lamda,sublo,subhi); + } inum = atom->nlocal; firstneigh = clcs_gpu_compute_n(neighbor->ago, inum, nall, atom->x, - atom->type, domain->sublo, domain->subhi, + atom->type, sublo, subhi, atom->tag, atom->nspecial, atom->special, eflag, vflag, eflag_atom, vflag_atom, host_start, &ilist, &numneigh, cpu_time, diff --git a/src/GPU/pair_coul_long_gpu.cpp b/src/GPU/pair_coul_long_gpu.cpp index 485e45ddc68939c6652c30eb69a3fac1520aa258..fcfb20f3cea076b1449da90a63aaec1fbf166d9b 100644 --- a/src/GPU/pair_coul_long_gpu.cpp +++ b/src/GPU/pair_coul_long_gpu.cpp @@ -104,9 +104,20 @@ void PairCoulLongGPU::compute(int eflag, int vflag) bool success = true; int *ilist, *numneigh, **firstneigh; if (gpu_mode != GPU_FORCE) { + double sublo[3],subhi[3]; + if (domain->triclinic == 0) { + sublo[0] = domain->sublo[0]; + sublo[1] = domain->sublo[1]; + sublo[2] = domain->sublo[2]; + subhi[0] = domain->subhi[0]; + subhi[1] = domain->subhi[1]; + subhi[2] = domain->subhi[2]; + } else { + domain->bbox(domain->sublo_lamda,domain->subhi_lamda,sublo,subhi); + } inum = atom->nlocal; firstneigh = cl_gpu_compute_n(neighbor->ago, inum, nall, atom->x, - atom->type, domain->sublo, domain->subhi, + atom->type, sublo, subhi, atom->tag, atom->nspecial, atom->special, eflag, vflag, eflag_atom, vflag_atom, host_start, &ilist, &numneigh, cpu_time, diff --git a/src/GPU/pair_dpd_gpu.cpp b/src/GPU/pair_dpd_gpu.cpp index 9e14164c57c837c7f80d89a8900f44184a2c2692..a2e20d016c8a3a2d0e94718839284cf08b118882 100644 --- a/src/GPU/pair_dpd_gpu.cpp +++ b/src/GPU/pair_dpd_gpu.cpp @@ -237,9 +237,20 @@ void PairDPDGPU::compute(int eflag, int vflag) bool success = true; int *ilist, *numneigh, **firstneigh; if (gpu_mode != GPU_FORCE) { + double sublo[3],subhi[3]; + if (domain->triclinic == 0) { + sublo[0] = domain->sublo[0]; + sublo[1] = domain->sublo[1]; + sublo[2] = domain->sublo[2]; + subhi[0] = domain->subhi[0]; + subhi[1] = domain->subhi[1]; + subhi[2] = domain->subhi[2]; + } else { + domain->bbox(domain->sublo_lamda,domain->subhi_lamda,sublo,subhi); + } inum = atom->nlocal; firstneigh = dpd_gpu_compute_n(neighbor->ago, inum, nall, atom->x, - atom->type, domain->sublo, domain->subhi, + atom->type, sublo, subhi, atom->tag, atom->nspecial, atom->special, eflag, vflag, eflag_atom, vflag_atom, host_start, &ilist, &numneigh, cpu_time, diff --git a/src/GPU/pair_dpd_tstat_gpu.cpp b/src/GPU/pair_dpd_tstat_gpu.cpp index 920eb8dd8a97a7f96c2936eb609eabba7d7a109b..991c6d900f5ff5f16cb865e2e1ee487224b879db 100644 --- a/src/GPU/pair_dpd_tstat_gpu.cpp +++ b/src/GPU/pair_dpd_tstat_gpu.cpp @@ -254,9 +254,20 @@ void PairDPDTstatGPU::compute(int eflag, int vflag) bool success = true; int *ilist, *numneigh, **firstneigh; if (gpu_mode != GPU_FORCE) { + double sublo[3],subhi[3]; + if (domain->triclinic == 0) { + sublo[0] = domain->sublo[0]; + sublo[1] = domain->sublo[1]; + sublo[2] = domain->sublo[2]; + subhi[0] = domain->subhi[0]; + subhi[1] = domain->subhi[1]; + subhi[2] = domain->subhi[2]; + } else { + domain->bbox(domain->sublo_lamda,domain->subhi_lamda,sublo,subhi); + } inum = atom->nlocal; firstneigh = dpd_gpu_compute_n(neighbor->ago, inum, nall, atom->x, - atom->type, domain->sublo, domain->subhi, + atom->type, sublo, subhi, atom->tag, atom->nspecial, atom->special, eflag, vflag, eflag_atom, vflag_atom, host_start, &ilist, &numneigh, cpu_time, diff --git a/src/GPU/pair_eam_alloy_gpu.cpp b/src/GPU/pair_eam_alloy_gpu.cpp index 8fa6e64c36043e4101bb2c094f5e13b1f47a9dbd..fcbc3c5d3c33010900d564d200482b2c4e66b994 100644 --- a/src/GPU/pair_eam_alloy_gpu.cpp +++ b/src/GPU/pair_eam_alloy_gpu.cpp @@ -31,11 +31,11 @@ #include "domain.h" #include "utils.h" #include "suffix.h" +#include "tokenizer.h" +#include "potential_file_reader.h" using namespace LAMMPS_NS; -#define MAXLINE 1024 - // External functions from cuda library for atom decomposition int eam_alloy_gpu_init(const int ntypes, double host_cutforcesq, @@ -106,9 +106,20 @@ void PairEAMAlloyGPU::compute(int eflag, int vflag) bool success = true; int *ilist, *numneigh, **firstneigh; if (gpu_mode != GPU_FORCE) { + double sublo[3],subhi[3]; + if (domain->triclinic == 0) { + sublo[0] = domain->sublo[0]; + sublo[1] = domain->sublo[1]; + sublo[2] = domain->sublo[2]; + subhi[0] = domain->subhi[0]; + subhi[1] = domain->subhi[1]; + subhi[2] = domain->subhi[2]; + } else { + domain->bbox(domain->sublo_lamda,domain->subhi_lamda,sublo,subhi); + } inum = atom->nlocal; firstneigh = eam_alloy_gpu_compute_n(neighbor->ago, inum, nall, atom->x, - atom->type, domain->sublo, domain->subhi, + atom->type, sublo, subhi, atom->tag, atom->nspecial, atom->special, eflag, vflag, eflag_atom, vflag_atom, host_start, &ilist, &numneigh, cpu_time, @@ -358,94 +369,112 @@ void PairEAMAlloyGPU::read_file(char *filename) { Setfl *file = setfl; - // open potential file + // read potential file + if(comm->me == 0) { + PotentialFileReader reader(lmp, filename, "EAM"); - int me = comm->me; - FILE *fptr; - char line[MAXLINE]; + try { + char * line = nullptr; - if (me == 0) { - fptr = fopen(filename,"r"); - if (fptr == NULL) { - char str[128]; - snprintf(str,128,"Cannot open EAM potential file %s",filename); - error->one(FLERR,str); - } - } + reader.skip_line(); + reader.skip_line(); + reader.skip_line(); - // read and broadcast header - // extract element names from nelements line + // extract element names from nelements line + line = reader.next_line(1); + ValueTokenizer values(line); + file->nelements = values.next_int(); - int n; - if (me == 0) { - utils::sfgets(FLERR,line,MAXLINE,fptr,filename,error); - utils::sfgets(FLERR,line,MAXLINE,fptr,filename,error); - utils::sfgets(FLERR,line,MAXLINE,fptr,filename,error); - utils::sfgets(FLERR,line,MAXLINE,fptr,filename,error); - n = strlen(line) + 1; - } - MPI_Bcast(&n,1,MPI_INT,0,world); - MPI_Bcast(line,n,MPI_CHAR,0,world); + if (values.count() != file->nelements + 1) + error->one(FLERR,"Incorrect element names in EAM potential file"); + + file->elements = new char*[file->nelements]; + for (int i = 0; i < file->nelements; i++) { + const std::string word = values.next_string(); + const int n = word.length() + 1; + file->elements[i] = new char[n]; + strcpy(file->elements[i], word.c_str()); + } - sscanf(line,"%d",&file->nelements); - int nwords = atom->count_words(line); - if (nwords != file->nelements + 1) - error->all(FLERR,"Incorrect element names in EAM potential file"); + // - char **words = new char*[file->nelements+1]; - nwords = 0; - strtok(line," \t\n\r\f"); - while ( (words[nwords++] = strtok(NULL," \t\n\r\f")) ) continue; + line = reader.next_line(5); + values = ValueTokenizer(line); + file->nrho = values.next_int(); + file->drho = values.next_double(); + file->nr = values.next_int(); + file->dr = values.next_double(); + file->cut = values.next_double(); - file->elements = new char*[file->nelements]; - for (int i = 0; i < file->nelements; i++) { - n = strlen(words[i]) + 1; - file->elements[i] = new char[n]; - strcpy(file->elements[i],words[i]); - } - delete [] words; + if ((file->nrho <= 0) || (file->nr <= 0) || (file->dr <= 0.0)) + error->one(FLERR,"Invalid EAM potential file"); - if (me == 0) { - utils::sfgets(FLERR,line,MAXLINE,fptr,filename,error); - sscanf(line,"%d %lg %d %lg %lg", - &file->nrho,&file->drho,&file->nr,&file->dr,&file->cut); - } + memory->create(file->mass, file->nelements, "pair:mass"); + memory->create(file->frho, file->nelements, file->nrho + 1, "pair:frho"); + memory->create(file->rhor, file->nelements, file->nr + 1, "pair:rhor"); + memory->create(file->z2r, file->nelements, file->nelements, file->nr + 1, "pair:z2r"); + + for (int i = 0; i < file->nelements; i++) { + line = reader.next_line(2); + values = ValueTokenizer(line); + values.next_int(); // ignore + file->mass[i] = values.next_double(); + + reader.next_dvector(file->nrho, &file->frho[i][1]); + reader.next_dvector(file->nr, &file->rhor[i][1]); + } - MPI_Bcast(&file->nrho,1,MPI_INT,0,world); - MPI_Bcast(&file->drho,1,MPI_DOUBLE,0,world); - MPI_Bcast(&file->nr,1,MPI_INT,0,world); - MPI_Bcast(&file->dr,1,MPI_DOUBLE,0,world); - MPI_Bcast(&file->cut,1,MPI_DOUBLE,0,world); - - file->mass = new double[file->nelements]; - memory->create(file->frho,file->nelements,file->nrho+1,"pair:frho"); - memory->create(file->rhor,file->nelements,file->nr+1,"pair:rhor"); - memory->create(file->z2r,file->nelements,file->nelements,file->nr+1, - "pair:z2r"); - - int i,j,tmp; - for (i = 0; i < file->nelements; i++) { - if (me == 0) { - utils::sfgets(FLERR,line,MAXLINE,fptr,filename,error); - sscanf(line,"%d %lg",&tmp,&file->mass[i]); + for (int i = 0; i < file->nelements; i++) { + for (int j = 0; j <= i; j++) { + reader.next_dvector(file->nr, &file->z2r[i][j][1]); + } + } + } catch (TokenizerException & e) { + error->one(FLERR, e.what()); } - MPI_Bcast(&file->mass[i],1,MPI_DOUBLE,0,world); + } - if (me == 0) grab(fptr,file->nrho,&file->frho[i][1]); - MPI_Bcast(&file->frho[i][1],file->nrho,MPI_DOUBLE,0,world); - if (me == 0) grab(fptr,file->nr,&file->rhor[i][1]); - MPI_Bcast(&file->rhor[i][1],file->nr,MPI_DOUBLE,0,world); + // broadcast potential information + MPI_Bcast(&file->nelements, 1, MPI_INT, 0, world); + + MPI_Bcast(&file->nrho, 1, MPI_INT, 0, world); + MPI_Bcast(&file->drho, 1, MPI_DOUBLE, 0, world); + MPI_Bcast(&file->nr, 1, MPI_INT, 0, world); + MPI_Bcast(&file->dr, 1, MPI_DOUBLE, 0, world); + MPI_Bcast(&file->cut, 1, MPI_DOUBLE, 0, world); + + // allocate memory on other procs + if (comm->me != 0) { + file->elements = new char*[file->nelements]; + for (int i = 0; i < file->nelements; i++) file->elements[i] = nullptr; + memory->create(file->mass, file->nelements, "pair:mass"); + memory->create(file->frho, file->nelements, file->nrho + 1, "pair:frho"); + memory->create(file->rhor, file->nelements, file->nr + 1, "pair:rhor"); + memory->create(file->z2r, file->nelements, file->nelements, file->nr + 1, "pair:z2r"); } - for (i = 0; i < file->nelements; i++) - for (j = 0; j <= i; j++) { - if (me == 0) grab(fptr,file->nr,&file->z2r[i][j][1]); - MPI_Bcast(&file->z2r[i][j][1],file->nr,MPI_DOUBLE,0,world); - } + // broadcast file->elements string array + for (int i = 0; i < file->nelements; i++) { + int n; + if (comm->me == 0) n = strlen(file->elements[i]) + 1; + MPI_Bcast(&n, 1, MPI_INT, 0, world); + if (comm->me != 0) file->elements[i] = new char[n]; + MPI_Bcast(file->elements[i], n, MPI_CHAR, 0, world); + } - // close the potential file + // broadcast file->mass, frho, rhor + for (int i = 0; i < file->nelements; i++) { + MPI_Bcast(&file->mass[i], 1, MPI_DOUBLE, 0, world); + MPI_Bcast(&file->frho[i][1], file->nrho, MPI_DOUBLE, 0, world); + MPI_Bcast(&file->rhor[i][1], file->nr, MPI_DOUBLE, 0, world); + } - if (me == 0) fclose(fptr); + // broadcast file->z2r + for (int i = 0; i < file->nelements; i++) { + for (int j = 0; j <= i; j++) { + MPI_Bcast(&file->z2r[i][j][1], file->nr, MPI_DOUBLE, 0, world); + } + } } /* ---------------------------------------------------------------------- diff --git a/src/GPU/pair_eam_fs_gpu.cpp b/src/GPU/pair_eam_fs_gpu.cpp index b04ec6d445bd9b44e64e90eb25a6a551025eae63..e674594498650aeaa1b65e59880b03893f2f29a7 100644 --- a/src/GPU/pair_eam_fs_gpu.cpp +++ b/src/GPU/pair_eam_fs_gpu.cpp @@ -30,11 +30,12 @@ #include "gpu_extra.h" #include "domain.h" #include "suffix.h" +#include "utils.h" +#include "tokenizer.h" +#include "potential_file_reader.h" using namespace LAMMPS_NS; -#define MAXLINE 1024 - // External functions from cuda library for atom decomposition int eam_fs_gpu_init(const int ntypes, double host_cutforcesq, @@ -105,9 +106,20 @@ void PairEAMFSGPU::compute(int eflag, int vflag) bool success = true; int *ilist, *numneigh, **firstneigh; if (gpu_mode != GPU_FORCE) { + double sublo[3],subhi[3]; + if (domain->triclinic == 0) { + sublo[0] = domain->sublo[0]; + sublo[1] = domain->sublo[1]; + sublo[2] = domain->sublo[2]; + subhi[0] = domain->subhi[0]; + subhi[1] = domain->subhi[1]; + subhi[2] = domain->subhi[2]; + } else { + domain->bbox(domain->sublo_lamda,domain->subhi_lamda,sublo,subhi); + } inum = atom->nlocal; firstneigh = eam_fs_gpu_compute_n(neighbor->ago, inum, nall, atom->x, - atom->type, domain->sublo, domain->subhi, + atom->type, sublo, subhi, atom->tag, atom->nspecial, atom->special, eflag, vflag, eflag_atom, vflag_atom, host_start, &ilist, &numneigh, cpu_time, @@ -357,99 +369,118 @@ void PairEAMFSGPU::read_file(char *filename) { Fs *file = fs; - // open potential file + // read potential file + if(comm->me == 0) { + PotentialFileReader reader(lmp, filename, "EAM"); - int me = comm->me; - FILE *fptr; - char line[MAXLINE]; + try { + char * line = nullptr; - if (me == 0) { - fptr = force->open_potential(filename); - if (fptr == NULL) { - char str[128]; - snprintf(str,128,"Cannot open EAM potential file %s",filename); - error->one(FLERR,str); - } - } + reader.skip_line(); + reader.skip_line(); + reader.skip_line(); - // read and broadcast header - // extract element names from nelements line + // extract element names from nelements line + line = reader.next_line(1); + ValueTokenizer values(line); + file->nelements = values.next_int(); - int n; - if (me == 0) { - fgets(line,MAXLINE,fptr); - fgets(line,MAXLINE,fptr); - fgets(line,MAXLINE,fptr); - fgets(line,MAXLINE,fptr); - n = strlen(line) + 1; - } - MPI_Bcast(&n,1,MPI_INT,0,world); - MPI_Bcast(line,n,MPI_CHAR,0,world); + if (values.count() != file->nelements + 1) + error->one(FLERR,"Incorrect element names in EAM potential file"); - sscanf(line,"%d",&file->nelements); - int nwords = atom->count_words(line); - if (nwords != file->nelements + 1) - error->all(FLERR,"Incorrect element names in EAM potential file"); + file->elements = new char*[file->nelements]; + for (int i = 0; i < file->nelements; i++) { + const std::string word = values.next_string(); + const int n = word.length() + 1; + file->elements[i] = new char[n]; + strcpy(file->elements[i], word.c_str()); + } - char **words = new char*[file->nelements+1]; - nwords = 0; - strtok(line," \t\n\r\f"); - while ((words[nwords++] = strtok(NULL," \t\n\r\f"))) continue; + // - file->elements = new char*[file->nelements]; - for (int i = 0; i < file->nelements; i++) { - n = strlen(words[i]) + 1; - file->elements[i] = new char[n]; - strcpy(file->elements[i],words[i]); + line = reader.next_line(5); + values = ValueTokenizer(line); + file->nrho = values.next_int(); + file->drho = values.next_double(); + file->nr = values.next_int(); + file->dr = values.next_double(); + file->cut = values.next_double(); + + if ((file->nrho <= 0) || (file->nr <= 0) || (file->dr <= 0.0)) + error->one(FLERR,"Invalid EAM potential file"); + + memory->create(file->mass, file->nelements, "pair:mass"); + memory->create(file->frho, file->nelements, file->nrho + 1, "pair:frho"); + memory->create(file->rhor, file->nelements, file->nelements, file->nr + 1, "pair:rhor"); + memory->create(file->z2r, file->nelements, file->nelements, file->nr + 1, "pair:z2r"); + + for (int i = 0; i < file->nelements; i++) { + line = reader.next_line(2); + values = ValueTokenizer(line); + values.next_int(); // ignore + file->mass[i] = values.next_double(); + + reader.next_dvector(file->nrho, &file->frho[i][1]); + + for (int j = 0; j < file->nelements; j++) { + reader.next_dvector(file->nr, &file->rhor[i][j][1]); + } + } + + for (int i = 0; i < file->nelements; i++) { + for (int j = 0; j <= i; j++) { + reader.next_dvector(file->nr, &file->z2r[i][j][1]); + } + } + } catch (TokenizerException & e) { + error->one(FLERR, e.what()); + } } - delete [] words; - if (me == 0) { - fgets(line,MAXLINE,fptr); - sscanf(line,"%d %lg %d %lg %lg", - &file->nrho,&file->drho,&file->nr,&file->dr,&file->cut); + // broadcast potential information + MPI_Bcast(&file->nelements, 1, MPI_INT, 0, world); + + MPI_Bcast(&file->nrho, 1, MPI_INT, 0, world); + MPI_Bcast(&file->drho, 1, MPI_DOUBLE, 0, world); + MPI_Bcast(&file->nr, 1, MPI_INT, 0, world); + MPI_Bcast(&file->dr, 1, MPI_DOUBLE, 0, world); + MPI_Bcast(&file->cut, 1, MPI_DOUBLE, 0, world); + + // allocate memory on other procs + if (comm->me != 0) { + file->elements = new char*[file->nelements]; + for (int i = 0; i < file->nelements; i++) file->elements[i] = nullptr; + memory->create(file->mass, file->nelements, "pair:mass"); + memory->create(file->frho, file->nelements, file->nrho + 1, "pair:frho"); + memory->create(file->rhor, file->nelements, file->nelements, file->nr + 1, "pair:rhor"); + memory->create(file->z2r, file->nelements, file->nelements, file->nr + 1, "pair:z2r"); } - MPI_Bcast(&file->nrho,1,MPI_INT,0,world); - MPI_Bcast(&file->drho,1,MPI_DOUBLE,0,world); - MPI_Bcast(&file->nr,1,MPI_INT,0,world); - MPI_Bcast(&file->dr,1,MPI_DOUBLE,0,world); - MPI_Bcast(&file->cut,1,MPI_DOUBLE,0,world); - - file->mass = new double[file->nelements]; - memory->create(file->frho,file->nelements,file->nrho+1, - "pair:frho"); - memory->create(file->rhor,file->nelements,file->nelements, - file->nr+1,"pair:rhor"); - memory->create(file->z2r,file->nelements,file->nelements, - file->nr+1,"pair:z2r"); - - int i,j,tmp; - for (i = 0; i < file->nelements; i++) { - if (me == 0) { - fgets(line,MAXLINE,fptr); - sscanf(line,"%d %lg",&tmp,&file->mass[i]); - } - MPI_Bcast(&file->mass[i],1,MPI_DOUBLE,0,world); + // broadcast file->elements string array + for (int i = 0; i < file->nelements; i++) { + int n; + if (comm->me == 0) n = strlen(file->elements[i]) + 1; + MPI_Bcast(&n, 1, MPI_INT, 0, world); + if (comm->me != 0) file->elements[i] = new char[n]; + MPI_Bcast(file->elements[i], n, MPI_CHAR, 0, world); + } - if (me == 0) grab(fptr,file->nrho,&file->frho[i][1]); - MPI_Bcast(&file->frho[i][1],file->nrho,MPI_DOUBLE,0,world); + // broadcast file->mass, frho, rhor + for (int i = 0; i < file->nelements; i++) { + MPI_Bcast(&file->mass[i], 1, MPI_DOUBLE, 0, world); + MPI_Bcast(&file->frho[i][1], file->nrho, MPI_DOUBLE, 0, world); - for (j = 0; j < file->nelements; j++) { - if (me == 0) grab(fptr,file->nr,&file->rhor[i][j][1]); - MPI_Bcast(&file->rhor[i][j][1],file->nr,MPI_DOUBLE,0,world); + for (int j = 0; j < file->nelements; j++) { + MPI_Bcast(&file->rhor[i][j][1], file->nr, MPI_DOUBLE, 0, world); } } - for (i = 0; i < file->nelements; i++) - for (j = 0; j <= i; j++) { - if (me == 0) grab(fptr,file->nr,&file->z2r[i][j][1]); - MPI_Bcast(&file->z2r[i][j][1],file->nr,MPI_DOUBLE,0,world); + // broadcast file->z2r + for (int i = 0; i < file->nelements; i++) { + for (int j = 0; j <= i; j++) { + MPI_Bcast(&file->z2r[i][j][1], file->nr, MPI_DOUBLE, 0, world); } - - // close the potential file - - if (me == 0) fclose(fptr); + } } /* ---------------------------------------------------------------------- diff --git a/src/GPU/pair_eam_gpu.cpp b/src/GPU/pair_eam_gpu.cpp index e1068677ffea11e7d89e193c20d1e4d0400ddda1..1aac379c35b3057a37d70478aadb6e3b006eb139 100644 --- a/src/GPU/pair_eam_gpu.cpp +++ b/src/GPU/pair_eam_gpu.cpp @@ -108,9 +108,20 @@ void PairEAMGPU::compute(int eflag, int vflag) bool success = true; int *ilist, *numneigh, **firstneigh; if (gpu_mode != GPU_FORCE) { + double sublo[3],subhi[3]; + if (domain->triclinic == 0) { + sublo[0] = domain->sublo[0]; + sublo[1] = domain->sublo[1]; + sublo[2] = domain->sublo[2]; + subhi[0] = domain->subhi[0]; + subhi[1] = domain->subhi[1]; + subhi[2] = domain->subhi[2]; + } else { + domain->bbox(domain->sublo_lamda,domain->subhi_lamda,sublo,subhi); + } inum = atom->nlocal; firstneigh = eam_gpu_compute_n(neighbor->ago, inum, nall, atom->x, - atom->type, domain->sublo, domain->subhi, + atom->type, sublo, subhi, atom->tag, atom->nspecial, atom->special, eflag, vflag, eflag_atom, vflag_atom, host_start, &ilist, &numneigh, cpu_time, diff --git a/src/GPU/pair_gauss_gpu.cpp b/src/GPU/pair_gauss_gpu.cpp index 17125f98750019d818f2a2572089e827e2412bc4..eb83d5af441ec2e20cb37b84250a26fdadfdcf3b 100644 --- a/src/GPU/pair_gauss_gpu.cpp +++ b/src/GPU/pair_gauss_gpu.cpp @@ -92,10 +92,21 @@ void PairGaussGPU::compute(int eflag, int vflag) bool success = true; int *ilist, *numneigh, **firstneigh; if (gpu_mode != GPU_FORCE) { + double sublo[3],subhi[3]; + if (domain->triclinic == 0) { + sublo[0] = domain->sublo[0]; + sublo[1] = domain->sublo[1]; + sublo[2] = domain->sublo[2]; + subhi[0] = domain->subhi[0]; + subhi[1] = domain->subhi[1]; + subhi[2] = domain->subhi[2]; + } else { + domain->bbox(domain->sublo_lamda,domain->subhi_lamda,sublo,subhi); + } inum = atom->nlocal; firstneigh = gauss_gpu_compute_n(neighbor->ago, inum, nall, - atom->x, atom->type, domain->sublo, - domain->subhi, atom->tag, atom->nspecial, + atom->x, atom->type, sublo, + subhi, atom->tag, atom->nspecial, atom->special, eflag, vflag, eflag_atom, vflag_atom, host_start, &ilist, &numneigh, cpu_time, success); diff --git a/src/GPU/pair_gayberne_gpu.cpp b/src/GPU/pair_gayberne_gpu.cpp index 445c74487f5b4aca3617638f0090676e886d4c48..83b24f87744a2b50bbf1bb9d3269a10a60c1a7e0 100644 --- a/src/GPU/pair_gayberne_gpu.cpp +++ b/src/GPU/pair_gayberne_gpu.cpp @@ -119,9 +119,20 @@ void PairGayBerneGPU::compute(int eflag, int vflag) } if (gpu_mode != GPU_FORCE) { + double sublo[3],subhi[3]; + if (domain->triclinic == 0) { + sublo[0] = domain->sublo[0]; + sublo[1] = domain->sublo[1]; + sublo[2] = domain->sublo[2]; + subhi[0] = domain->subhi[0]; + subhi[1] = domain->subhi[1]; + subhi[2] = domain->subhi[2]; + } else { + domain->bbox(domain->sublo_lamda,domain->subhi_lamda,sublo,subhi); + } inum = atom->nlocal; firstneigh = gb_gpu_compute_n(neighbor->ago, inum, nall, atom->x, - atom->type, domain->sublo, domain->subhi, + atom->type, sublo, subhi, atom->tag, atom->nspecial, atom->special, eflag, vflag, eflag_atom, vflag_atom, host_start, &ilist, &numneigh, cpu_time, diff --git a/src/GPU/pair_lj96_cut_gpu.cpp b/src/GPU/pair_lj96_cut_gpu.cpp index f6f9bd379bc5fd721c3ded6790116747f81724bd..7b0d45a43770ce812e620841a7360669c0094ce6 100644 --- a/src/GPU/pair_lj96_cut_gpu.cpp +++ b/src/GPU/pair_lj96_cut_gpu.cpp @@ -92,9 +92,20 @@ void PairLJ96CutGPU::compute(int eflag, int vflag) bool success = true; int *ilist, *numneigh, **firstneigh; if (gpu_mode != GPU_FORCE) { + double sublo[3],subhi[3]; + if (domain->triclinic == 0) { + sublo[0] = domain->sublo[0]; + sublo[1] = domain->sublo[1]; + sublo[2] = domain->sublo[2]; + subhi[0] = domain->subhi[0]; + subhi[1] = domain->subhi[1]; + subhi[2] = domain->subhi[2]; + } else { + domain->bbox(domain->sublo_lamda,domain->subhi_lamda,sublo,subhi); + } inum = atom->nlocal; firstneigh = lj96_gpu_compute_n(neighbor->ago, inum, nall, atom->x, - atom->type, domain->sublo, domain->subhi, + atom->type, sublo, subhi, atom->tag, atom->nspecial, atom->special, eflag, vflag, eflag_atom, vflag_atom, host_start, &ilist, &numneigh, cpu_time, diff --git a/src/GPU/pair_lj_charmm_coul_long_gpu.cpp b/src/GPU/pair_lj_charmm_coul_long_gpu.cpp index 6eda677928a330672c89c355c6d1b47b6fb85816..b08ad5e2329b3e77af5cdaefde0171126f5b864a 100644 --- a/src/GPU/pair_lj_charmm_coul_long_gpu.cpp +++ b/src/GPU/pair_lj_charmm_coul_long_gpu.cpp @@ -109,9 +109,20 @@ void PairLJCharmmCoulLongGPU::compute(int eflag, int vflag) bool success = true; int *ilist, *numneigh, **firstneigh; if (gpu_mode != GPU_FORCE) { + double sublo[3],subhi[3]; + if (domain->triclinic == 0) { + sublo[0] = domain->sublo[0]; + sublo[1] = domain->sublo[1]; + sublo[2] = domain->sublo[2]; + subhi[0] = domain->subhi[0]; + subhi[1] = domain->subhi[1]; + subhi[2] = domain->subhi[2]; + } else { + domain->bbox(domain->sublo_lamda,domain->subhi_lamda,sublo,subhi); + } inum = atom->nlocal; firstneigh = crml_gpu_compute_n(neighbor->ago, inum, nall, atom->x, - atom->type, domain->sublo, domain->subhi, + atom->type, sublo, subhi, atom->tag, atom->nspecial, atom->special, eflag, vflag, eflag_atom, vflag_atom, host_start, &ilist, &numneigh, cpu_time, diff --git a/src/GPU/pair_lj_class2_coul_long_gpu.cpp b/src/GPU/pair_lj_class2_coul_long_gpu.cpp index 96ba4e0a0922814f332449a61ee150145dde89f4..46ecaea9b8b69acc12b6118fe1cf3447d1c708e7 100644 --- a/src/GPU/pair_lj_class2_coul_long_gpu.cpp +++ b/src/GPU/pair_lj_class2_coul_long_gpu.cpp @@ -106,9 +106,20 @@ void PairLJClass2CoulLongGPU::compute(int eflag, int vflag) bool success = true; int *ilist, *numneigh, **firstneigh; if (gpu_mode != GPU_FORCE) { + double sublo[3],subhi[3]; + if (domain->triclinic == 0) { + sublo[0] = domain->sublo[0]; + sublo[1] = domain->sublo[1]; + sublo[2] = domain->sublo[2]; + subhi[0] = domain->subhi[0]; + subhi[1] = domain->subhi[1]; + subhi[2] = domain->subhi[2]; + } else { + domain->bbox(domain->sublo_lamda,domain->subhi_lamda,sublo,subhi); + } inum = atom->nlocal; firstneigh = c2cl_gpu_compute_n(neighbor->ago, inum, nall, atom->x, - atom->type, domain->sublo, domain->subhi, + atom->type, sublo, subhi, atom->tag, atom->nspecial, atom->special, eflag, vflag, eflag_atom, vflag_atom, host_start, &ilist, &numneigh, cpu_time, diff --git a/src/GPU/pair_lj_class2_gpu.cpp b/src/GPU/pair_lj_class2_gpu.cpp index 643e3ff090fb2e622dbc56f44a4d893bb305c5c9..a7ca661927c1757a4001f5d13c8b648677a3813d 100644 --- a/src/GPU/pair_lj_class2_gpu.cpp +++ b/src/GPU/pair_lj_class2_gpu.cpp @@ -91,9 +91,20 @@ void PairLJClass2GPU::compute(int eflag, int vflag) bool success = true; int *ilist, *numneigh, **firstneigh; if (gpu_mode != GPU_FORCE) { + double sublo[3],subhi[3]; + if (domain->triclinic == 0) { + sublo[0] = domain->sublo[0]; + sublo[1] = domain->sublo[1]; + sublo[2] = domain->sublo[2]; + subhi[0] = domain->subhi[0]; + subhi[1] = domain->subhi[1]; + subhi[2] = domain->subhi[2]; + } else { + domain->bbox(domain->sublo_lamda,domain->subhi_lamda,sublo,subhi); + } inum = atom->nlocal; firstneigh = lj96_gpu_compute_n(neighbor->ago, inum, nall, atom->x, - atom->type, domain->sublo, domain->subhi, + atom->type, sublo, subhi, atom->tag, atom->nspecial, atom->special, eflag, vflag, eflag_atom, vflag_atom, host_start, &ilist, &numneigh, cpu_time, diff --git a/src/GPU/pair_lj_cubic_gpu.cpp b/src/GPU/pair_lj_cubic_gpu.cpp index 64fd6119c3a47ca5d5685312e02a178c35e13c66..38f6e1f908ae7fe810c35cc6156c84f762cd63c1 100644 --- a/src/GPU/pair_lj_cubic_gpu.cpp +++ b/src/GPU/pair_lj_cubic_gpu.cpp @@ -96,10 +96,21 @@ void PairLJCubicGPU::compute(int eflag, int vflag) bool success = true; int *ilist, *numneigh, **firstneigh; if (gpu_mode != GPU_FORCE) { + double sublo[3],subhi[3]; + if (domain->triclinic == 0) { + sublo[0] = domain->sublo[0]; + sublo[1] = domain->sublo[1]; + sublo[2] = domain->sublo[2]; + subhi[0] = domain->subhi[0]; + subhi[1] = domain->subhi[1]; + subhi[2] = domain->subhi[2]; + } else { + domain->bbox(domain->sublo_lamda,domain->subhi_lamda,sublo,subhi); + } inum = atom->nlocal; firstneigh = ljcb_gpu_compute_n(neighbor->ago, inum, nall, - atom->x, atom->type, domain->sublo, - domain->subhi, atom->tag, atom->nspecial, + atom->x, atom->type, sublo, + subhi, atom->tag, atom->nspecial, atom->special, eflag, vflag, eflag_atom, vflag_atom, host_start, &ilist, &numneigh, cpu_time, success); diff --git a/src/GPU/pair_lj_cut_coul_cut_gpu.cpp b/src/GPU/pair_lj_cut_coul_cut_gpu.cpp index e52a971786e437a2081763dd6b108d591e0096d6..54f0e92bd50fd1cbd05d59aa34952251aa3a0673 100644 --- a/src/GPU/pair_lj_cut_coul_cut_gpu.cpp +++ b/src/GPU/pair_lj_cut_coul_cut_gpu.cpp @@ -97,9 +97,20 @@ void PairLJCutCoulCutGPU::compute(int eflag, int vflag) bool success = true; int *ilist, *numneigh, **firstneigh; if (gpu_mode != GPU_FORCE) { + double sublo[3],subhi[3]; + if (domain->triclinic == 0) { + sublo[0] = domain->sublo[0]; + sublo[1] = domain->sublo[1]; + sublo[2] = domain->sublo[2]; + subhi[0] = domain->subhi[0]; + subhi[1] = domain->subhi[1]; + subhi[2] = domain->subhi[2]; + } else { + domain->bbox(domain->sublo_lamda,domain->subhi_lamda,sublo,subhi); + } inum = atom->nlocal; firstneigh = ljc_gpu_compute_n(neighbor->ago, inum, nall, atom->x, - atom->type, domain->sublo, domain->subhi, + atom->type, sublo, subhi, atom->tag, atom->nspecial, atom->special, eflag, vflag, eflag_atom, vflag_atom, host_start, &ilist, &numneigh, cpu_time, diff --git a/src/GPU/pair_lj_cut_coul_debye_gpu.cpp b/src/GPU/pair_lj_cut_coul_debye_gpu.cpp index 4c8920450f92e961b421a7d76e073645a8f1732e..e7b1ac5002d72e1d66ae0690eff8f860543a82a2 100644 --- a/src/GPU/pair_lj_cut_coul_debye_gpu.cpp +++ b/src/GPU/pair_lj_cut_coul_debye_gpu.cpp @@ -99,9 +99,20 @@ void PairLJCutCoulDebyeGPU::compute(int eflag, int vflag) bool success = true; int *ilist, *numneigh, **firstneigh; if (gpu_mode != GPU_FORCE) { + double sublo[3],subhi[3]; + if (domain->triclinic == 0) { + sublo[0] = domain->sublo[0]; + sublo[1] = domain->sublo[1]; + sublo[2] = domain->sublo[2]; + subhi[0] = domain->subhi[0]; + subhi[1] = domain->subhi[1]; + subhi[2] = domain->subhi[2]; + } else { + domain->bbox(domain->sublo_lamda,domain->subhi_lamda,sublo,subhi); + } inum = atom->nlocal; firstneigh = ljcd_gpu_compute_n(neighbor->ago, inum, nall, atom->x, - atom->type, domain->sublo, domain->subhi, + atom->type, sublo, subhi, atom->tag, atom->nspecial, atom->special, eflag, vflag, eflag_atom, vflag_atom, host_start, &ilist, &numneigh, cpu_time, diff --git a/src/GPU/pair_lj_cut_coul_dsf_gpu.cpp b/src/GPU/pair_lj_cut_coul_dsf_gpu.cpp index acfbcd847e08e75b194f4cee3994737cc1ab56fa..5d1f4f70bef08121779d0f282760bf68101b9604 100644 --- a/src/GPU/pair_lj_cut_coul_dsf_gpu.cpp +++ b/src/GPU/pair_lj_cut_coul_dsf_gpu.cpp @@ -108,9 +108,20 @@ void PairLJCutCoulDSFGPU::compute(int eflag, int vflag) bool success = true; int *ilist, *numneigh, **firstneigh; if (gpu_mode != GPU_FORCE) { + double sublo[3],subhi[3]; + if (domain->triclinic == 0) { + sublo[0] = domain->sublo[0]; + sublo[1] = domain->sublo[1]; + sublo[2] = domain->sublo[2]; + subhi[0] = domain->subhi[0]; + subhi[1] = domain->subhi[1]; + subhi[2] = domain->subhi[2]; + } else { + domain->bbox(domain->sublo_lamda,domain->subhi_lamda,sublo,subhi); + } inum = atom->nlocal; firstneigh = ljd_gpu_compute_n(neighbor->ago, inum, nall, atom->x, - atom->type, domain->sublo, domain->subhi, + atom->type, sublo, subhi, atom->tag, atom->nspecial, atom->special, eflag, vflag, eflag_atom, vflag_atom, host_start, &ilist, &numneigh, cpu_time, diff --git a/src/GPU/pair_lj_cut_coul_long_gpu.cpp b/src/GPU/pair_lj_cut_coul_long_gpu.cpp index 24ce118c6d9a4a7cebbf35863397e34444345037..dff2ba28d47eca5a75b0c7583b6cdfbf5e9f2c25 100644 --- a/src/GPU/pair_lj_cut_coul_long_gpu.cpp +++ b/src/GPU/pair_lj_cut_coul_long_gpu.cpp @@ -109,9 +109,20 @@ void PairLJCutCoulLongGPU::compute(int eflag, int vflag) bool success = true; int *ilist, *numneigh, **firstneigh; if (gpu_mode != GPU_FORCE) { + double sublo[3],subhi[3]; + if (domain->triclinic == 0) { + sublo[0] = domain->sublo[0]; + sublo[1] = domain->sublo[1]; + sublo[2] = domain->sublo[2]; + subhi[0] = domain->subhi[0]; + subhi[1] = domain->subhi[1]; + subhi[2] = domain->subhi[2]; + } else { + domain->bbox(domain->sublo_lamda,domain->subhi_lamda,sublo,subhi); + } inum = atom->nlocal; firstneigh = ljcl_gpu_compute_n(neighbor->ago, inum, nall, atom->x, - atom->type, domain->sublo, domain->subhi, + atom->type, sublo, subhi, atom->tag, atom->nspecial, atom->special, eflag, vflag, eflag_atom, vflag_atom, host_start, &ilist, &numneigh, cpu_time, diff --git a/src/GPU/pair_lj_cut_coul_msm_gpu.cpp b/src/GPU/pair_lj_cut_coul_msm_gpu.cpp index 0e700f6fb296d89e44dd33514cd7b0f7ddf0342e..2f965d6476ac08c2e01bd3147e10aa9259523144 100644 --- a/src/GPU/pair_lj_cut_coul_msm_gpu.cpp +++ b/src/GPU/pair_lj_cut_coul_msm_gpu.cpp @@ -98,10 +98,21 @@ void PairLJCutCoulMSMGPU::compute(int eflag, int vflag) bool success = true; int *ilist, *numneigh, **firstneigh; if (gpu_mode != GPU_FORCE) { + double sublo[3],subhi[3]; + if (domain->triclinic == 0) { + sublo[0] = domain->sublo[0]; + sublo[1] = domain->sublo[1]; + sublo[2] = domain->sublo[2]; + subhi[0] = domain->subhi[0]; + subhi[1] = domain->subhi[1]; + subhi[2] = domain->subhi[2]; + } else { + domain->bbox(domain->sublo_lamda,domain->subhi_lamda,sublo,subhi); + } inum = atom->nlocal; firstneigh = ljcm_gpu_compute_n(neighbor->ago, inum, nall, - atom->x, atom->type, domain->sublo, - domain->subhi, atom->tag, atom->nspecial, + atom->x, atom->type, sublo, + subhi, atom->tag, atom->nspecial, atom->special, eflag, vflag, eflag_atom, vflag_atom, host_start, &ilist, &numneigh, cpu_time, success, diff --git a/src/GPU/pair_lj_cut_dipole_cut_gpu.cpp b/src/GPU/pair_lj_cut_dipole_cut_gpu.cpp index 6c53b022274531bf151ffcd6783ef6b97ebf76cc..43c2a1e9b7d02792e08f88790c984ac6dc1f23f4 100644 --- a/src/GPU/pair_lj_cut_dipole_cut_gpu.cpp +++ b/src/GPU/pair_lj_cut_dipole_cut_gpu.cpp @@ -99,9 +99,20 @@ void PairLJCutDipoleCutGPU::compute(int eflag, int vflag) bool success = true; int *ilist, *numneigh, **firstneigh; if (gpu_mode != GPU_FORCE) { + double sublo[3],subhi[3]; + if (domain->triclinic == 0) { + sublo[0] = domain->sublo[0]; + sublo[1] = domain->sublo[1]; + sublo[2] = domain->sublo[2]; + subhi[0] = domain->subhi[0]; + subhi[1] = domain->subhi[1]; + subhi[2] = domain->subhi[2]; + } else { + domain->bbox(domain->sublo_lamda,domain->subhi_lamda,sublo,subhi); + } inum = atom->nlocal; firstneigh = dpl_gpu_compute_n(neighbor->ago, inum, nall, atom->x, - atom->type, domain->sublo, domain->subhi, + atom->type, sublo, subhi, atom->tag, atom->nspecial, atom->special, eflag, vflag, eflag_atom, vflag_atom, host_start, &ilist, &numneigh, cpu_time, diff --git a/src/GPU/pair_lj_cut_dipole_long_gpu.cpp b/src/GPU/pair_lj_cut_dipole_long_gpu.cpp index 0535735820d1718a292dd4d18b361aad52c74492..9416ede51670c2662ad889838f5de240969567b8 100644 --- a/src/GPU/pair_lj_cut_dipole_long_gpu.cpp +++ b/src/GPU/pair_lj_cut_dipole_long_gpu.cpp @@ -110,9 +110,20 @@ void PairLJCutDipoleLongGPU::compute(int eflag, int vflag) bool success = true; int *ilist, *numneigh, **firstneigh; if (gpu_mode != GPU_FORCE) { + double sublo[3],subhi[3]; + if (domain->triclinic == 0) { + sublo[0] = domain->sublo[0]; + sublo[1] = domain->sublo[1]; + sublo[2] = domain->sublo[2]; + subhi[0] = domain->subhi[0]; + subhi[1] = domain->subhi[1]; + subhi[2] = domain->subhi[2]; + } else { + domain->bbox(domain->sublo_lamda,domain->subhi_lamda,sublo,subhi); + } inum = atom->nlocal; firstneigh = dplj_gpu_compute_n(neighbor->ago, inum, nall, atom->x, - atom->type, domain->sublo, domain->subhi, + atom->type, sublo, subhi, atom->tag, atom->nspecial, atom->special, eflag, vflag, eflag_atom, vflag_atom, host_start, &ilist, &numneigh, cpu_time, diff --git a/src/GPU/pair_lj_cut_gpu.cpp b/src/GPU/pair_lj_cut_gpu.cpp index c6f61a7e96717208e889d62eac97d09e47f342a1..27924361f228b3ca9a1c966c2398a7d7e7053aca 100644 --- a/src/GPU/pair_lj_cut_gpu.cpp +++ b/src/GPU/pair_lj_cut_gpu.cpp @@ -96,10 +96,21 @@ void PairLJCutGPU::compute(int eflag, int vflag) bool success = true; int *ilist, *numneigh, **firstneigh; if (gpu_mode != GPU_FORCE) { + double sublo[3],subhi[3]; + if (domain->triclinic == 0) { + sublo[0] = domain->sublo[0]; + sublo[1] = domain->sublo[1]; + sublo[2] = domain->sublo[2]; + subhi[0] = domain->subhi[0]; + subhi[1] = domain->subhi[1]; + subhi[2] = domain->subhi[2]; + } else { + domain->bbox(domain->sublo_lamda,domain->subhi_lamda,sublo,subhi); + } inum = atom->nlocal; firstneigh = ljl_gpu_compute_n(neighbor->ago, inum, nall, - atom->x, atom->type, domain->sublo, - domain->subhi, atom->tag, atom->nspecial, + atom->x, atom->type, sublo, + subhi, atom->tag, atom->nspecial, atom->special, eflag, vflag, eflag_atom, vflag_atom, host_start, &ilist, &numneigh, cpu_time, success); diff --git a/src/GPU/pair_lj_cut_tip4p_long_gpu.cpp b/src/GPU/pair_lj_cut_tip4p_long_gpu.cpp index a7875f15c4d43e6c37f0e5065654448cf3ca6412..c0304f19aed4528496f22dbfa54abfb980d3d106 100644 --- a/src/GPU/pair_lj_cut_tip4p_long_gpu.cpp +++ b/src/GPU/pair_lj_cut_tip4p_long_gpu.cpp @@ -119,10 +119,21 @@ void PairLJCutTIP4PLongGPU::compute(int eflag, int vflag) bool success = true; int *ilist, *numneigh, **firstneigh; if (gpu_mode != GPU_FORCE) { + double sublo[3],subhi[3]; + if (domain->triclinic == 0) { + sublo[0] = domain->sublo[0]; + sublo[1] = domain->sublo[1]; + sublo[2] = domain->sublo[2]; + subhi[0] = domain->subhi[0]; + subhi[1] = domain->subhi[1]; + subhi[2] = domain->subhi[2]; + } else { + domain->bbox(domain->sublo_lamda,domain->subhi_lamda,sublo,subhi); + } inum = atom->nlocal; firstneigh = ljtip4p_long_gpu_compute_n(neighbor->ago, inum, nall, - atom->x, atom->type, domain->sublo, - domain->subhi, + atom->x, atom->type, sublo, + subhi, atom->tag, atom->get_map_array(), atom->get_map_size(), atom->sametag, atom->get_max_same(), atom->nspecial, diff --git a/src/GPU/pair_lj_expand_coul_long_gpu.cpp b/src/GPU/pair_lj_expand_coul_long_gpu.cpp index a906f57707fb9b012b5d34391ac1703bd5ae8782..54eb4d47e6babe2232083933f388ec20b8cb4339 100644 --- a/src/GPU/pair_lj_expand_coul_long_gpu.cpp +++ b/src/GPU/pair_lj_expand_coul_long_gpu.cpp @@ -109,9 +109,20 @@ void PairLJExpandCoulLongGPU::compute(int eflag, int vflag) bool success = true; int *ilist, *numneigh, **firstneigh; if (gpu_mode != GPU_FORCE) { + double sublo[3],subhi[3]; + if (domain->triclinic == 0) { + sublo[0] = domain->sublo[0]; + sublo[1] = domain->sublo[1]; + sublo[2] = domain->sublo[2]; + subhi[0] = domain->subhi[0]; + subhi[1] = domain->subhi[1]; + subhi[2] = domain->subhi[2]; + } else { + domain->bbox(domain->sublo_lamda,domain->subhi_lamda,sublo,subhi); + } inum = atom->nlocal; firstneigh = ljecl_gpu_compute_n(neighbor->ago, inum, nall, atom->x, - atom->type, domain->sublo, domain->subhi, + atom->type, sublo, subhi, atom->tag, atom->nspecial, atom->special, eflag, vflag, eflag_atom, vflag_atom, host_start, &ilist, &numneigh, cpu_time, diff --git a/src/GPU/pair_lj_expand_gpu.cpp b/src/GPU/pair_lj_expand_gpu.cpp index db88e8dae8972bce00adc263b7e43a9d6aa381d2..32c35420a22cd64f17235cc3f28b3e96d5243b36 100644 --- a/src/GPU/pair_lj_expand_gpu.cpp +++ b/src/GPU/pair_lj_expand_gpu.cpp @@ -95,9 +95,20 @@ void PairLJExpandGPU::compute(int eflag, int vflag) bool success = true; int *ilist, *numneigh, **firstneigh; if (gpu_mode != GPU_FORCE) { + double sublo[3],subhi[3]; + if (domain->triclinic == 0) { + sublo[0] = domain->sublo[0]; + sublo[1] = domain->sublo[1]; + sublo[2] = domain->sublo[2]; + subhi[0] = domain->subhi[0]; + subhi[1] = domain->subhi[1]; + subhi[2] = domain->subhi[2]; + } else { + domain->bbox(domain->sublo_lamda,domain->subhi_lamda,sublo,subhi); + } inum = atom->nlocal; firstneigh = lje_gpu_compute_n(neighbor->ago, inum, nall, atom->x, - atom->type, domain->sublo, domain->subhi, + atom->type, sublo, subhi, atom->tag, atom->nspecial, atom->special, eflag, vflag, eflag_atom, vflag_atom, host_start, &ilist, &numneigh, cpu_time, diff --git a/src/GPU/pair_lj_gromacs_gpu.cpp b/src/GPU/pair_lj_gromacs_gpu.cpp index 6989d73d501deb00f59c880cefd5b9c3b8ce30e3..d7122cb5f3c6bf5821732c20851d0421f02df244 100644 --- a/src/GPU/pair_lj_gromacs_gpu.cpp +++ b/src/GPU/pair_lj_gromacs_gpu.cpp @@ -97,10 +97,21 @@ void PairLJGromacsGPU::compute(int eflag, int vflag) bool success = true; int *ilist, *numneigh, **firstneigh; if (gpu_mode != GPU_FORCE) { + double sublo[3],subhi[3]; + if (domain->triclinic == 0) { + sublo[0] = domain->sublo[0]; + sublo[1] = domain->sublo[1]; + sublo[2] = domain->sublo[2]; + subhi[0] = domain->subhi[0]; + subhi[1] = domain->subhi[1]; + subhi[2] = domain->subhi[2]; + } else { + domain->bbox(domain->sublo_lamda,domain->subhi_lamda,sublo,subhi); + } inum = atom->nlocal; firstneigh = ljgrm_gpu_compute_n(neighbor->ago, inum, nall, - atom->x, atom->type, domain->sublo, - domain->subhi, atom->tag, atom->nspecial, + atom->x, atom->type, sublo, + subhi, atom->tag, atom->nspecial, atom->special, eflag, vflag, eflag_atom, vflag_atom, host_start, &ilist, &numneigh, cpu_time, success); diff --git a/src/GPU/pair_lj_sdk_coul_long_gpu.cpp b/src/GPU/pair_lj_sdk_coul_long_gpu.cpp index 3bcaa78d46f4a4f84e0cb6e045ded6bf81a840f1..cd76bbd2e9cd87c184517ee4181f9b8f8bb22f8b 100644 --- a/src/GPU/pair_lj_sdk_coul_long_gpu.cpp +++ b/src/GPU/pair_lj_sdk_coul_long_gpu.cpp @@ -112,9 +112,20 @@ void PairLJSDKCoulLongGPU::compute(int eflag, int vflag) bool success = true; int *ilist, *numneigh, **firstneigh; if (gpu_mode != GPU_FORCE) { + double sublo[3],subhi[3]; + if (domain->triclinic == 0) { + sublo[0] = domain->sublo[0]; + sublo[1] = domain->sublo[1]; + sublo[2] = domain->sublo[2]; + subhi[0] = domain->subhi[0]; + subhi[1] = domain->subhi[1]; + subhi[2] = domain->subhi[2]; + } else { + domain->bbox(domain->sublo_lamda,domain->subhi_lamda,sublo,subhi); + } inum = atom->nlocal; firstneigh = sdkl_gpu_compute_n(neighbor->ago, inum, nall, atom->x, - atom->type, domain->sublo, domain->subhi, + atom->type, sublo, subhi, atom->tag, atom->nspecial, atom->special, eflag, vflag, eflag_atom, vflag_atom, host_start, &ilist, &numneigh, cpu_time, diff --git a/src/GPU/pair_lj_sdk_gpu.cpp b/src/GPU/pair_lj_sdk_gpu.cpp index c0a3e8ec39e857b8e736aefdeb52184290279292..5f07bdbb6c1334e23c0fa74f7f92f9404f7db2d2 100644 --- a/src/GPU/pair_lj_sdk_gpu.cpp +++ b/src/GPU/pair_lj_sdk_gpu.cpp @@ -97,9 +97,20 @@ void PairLJSDKGPU::compute(int eflag, int vflag) bool success = true; int *ilist, *numneigh, **firstneigh; if (gpu_mode != GPU_FORCE) { + double sublo[3],subhi[3]; + if (domain->triclinic == 0) { + sublo[0] = domain->sublo[0]; + sublo[1] = domain->sublo[1]; + sublo[2] = domain->sublo[2]; + subhi[0] = domain->subhi[0]; + subhi[1] = domain->subhi[1]; + subhi[2] = domain->subhi[2]; + } else { + domain->bbox(domain->sublo_lamda,domain->subhi_lamda,sublo,subhi); + } inum = atom->nlocal; firstneigh = sdk_gpu_compute_n(neighbor->ago, inum, nall, atom->x, - atom->type, domain->sublo, domain->subhi, + atom->type, sublo, subhi, atom->tag, atom->nspecial, atom->special, eflag, vflag, eflag_atom, vflag_atom, host_start, &ilist, &numneigh, cpu_time, diff --git a/src/GPU/pair_lj_sf_dipole_sf_gpu.cpp b/src/GPU/pair_lj_sf_dipole_sf_gpu.cpp index d001c282e2465b3dd9da9dfdecb25123b40146af..a9ddf81bf094371e54d8d36fbd73e35a21b03e6a 100644 --- a/src/GPU/pair_lj_sf_dipole_sf_gpu.cpp +++ b/src/GPU/pair_lj_sf_dipole_sf_gpu.cpp @@ -98,9 +98,20 @@ void PairLJSFDipoleSFGPU::compute(int eflag, int vflag) bool success = true; int *ilist, *numneigh, **firstneigh; if (gpu_mode != GPU_FORCE) { + double sublo[3],subhi[3]; + if (domain->triclinic == 0) { + sublo[0] = domain->sublo[0]; + sublo[1] = domain->sublo[1]; + sublo[2] = domain->sublo[2]; + subhi[0] = domain->subhi[0]; + subhi[1] = domain->subhi[1]; + subhi[2] = domain->subhi[2]; + } else { + domain->bbox(domain->sublo_lamda,domain->subhi_lamda,sublo,subhi); + } inum = atom->nlocal; firstneigh = dplsf_gpu_compute_n(neighbor->ago, inum, nall, atom->x, - atom->type, domain->sublo, domain->subhi, + atom->type, sublo, subhi, atom->tag, atom->nspecial, atom->special, eflag, vflag, eflag_atom, vflag_atom, host_start, &ilist, &numneigh, cpu_time, diff --git a/src/GPU/pair_mie_cut_gpu.cpp b/src/GPU/pair_mie_cut_gpu.cpp index 84cc903dee3f8a349db75a79bc155249a9c7d005..4db07ab79e53ed070b54584e1a4aa5679625e0c5 100644 --- a/src/GPU/pair_mie_cut_gpu.cpp +++ b/src/GPU/pair_mie_cut_gpu.cpp @@ -93,10 +93,21 @@ void PairMIECutGPU::compute(int eflag, int vflag) bool success = true; int *ilist, *numneigh, **firstneigh; if (gpu_mode != GPU_FORCE) { + double sublo[3],subhi[3]; + if (domain->triclinic == 0) { + sublo[0] = domain->sublo[0]; + sublo[1] = domain->sublo[1]; + sublo[2] = domain->sublo[2]; + subhi[0] = domain->subhi[0]; + subhi[1] = domain->subhi[1]; + subhi[2] = domain->subhi[2]; + } else { + domain->bbox(domain->sublo_lamda,domain->subhi_lamda,sublo,subhi); + } inum = atom->nlocal; firstneigh = mie_gpu_compute_n(neighbor->ago, inum, nall, - atom->x, atom->type, domain->sublo, - domain->subhi, atom->tag, atom->nspecial, + atom->x, atom->type, sublo, + subhi, atom->tag, atom->nspecial, atom->special, eflag, vflag, eflag_atom, vflag_atom, host_start, &ilist, &numneigh, cpu_time, success); diff --git a/src/GPU/pair_morse_gpu.cpp b/src/GPU/pair_morse_gpu.cpp index 5bcda54d852a2f5d7cd3b813516088998076cc6c..fc966f6533784054e30d6c7b28cd5b9ae5115a6e 100644 --- a/src/GPU/pair_morse_gpu.cpp +++ b/src/GPU/pair_morse_gpu.cpp @@ -91,10 +91,21 @@ void PairMorseGPU::compute(int eflag, int vflag) bool success = true; int *ilist, *numneigh, **firstneigh; if (gpu_mode != GPU_FORCE) { + double sublo[3],subhi[3]; + if (domain->triclinic == 0) { + sublo[0] = domain->sublo[0]; + sublo[1] = domain->sublo[1]; + sublo[2] = domain->sublo[2]; + subhi[0] = domain->subhi[0]; + subhi[1] = domain->subhi[1]; + subhi[2] = domain->subhi[2]; + } else { + domain->bbox(domain->sublo_lamda,domain->subhi_lamda,sublo,subhi); + } inum = atom->nlocal; firstneigh = mor_gpu_compute_n(neighbor->ago, inum, nall, - atom->x, atom->type, domain->sublo, - domain->subhi, atom->tag, atom->nspecial, + atom->x, atom->type, sublo, + subhi, atom->tag, atom->nspecial, atom->special, eflag, vflag, eflag_atom, vflag_atom, host_start, &ilist, &numneigh, cpu_time, success); diff --git a/src/GPU/pair_resquared_gpu.cpp b/src/GPU/pair_resquared_gpu.cpp index b03834d5d1c5ef8845f69ca96308a8ae8401a58d..0bcabb451c8920f3c6505359f49d60575e66788d 100644 --- a/src/GPU/pair_resquared_gpu.cpp +++ b/src/GPU/pair_resquared_gpu.cpp @@ -121,9 +121,20 @@ void PairRESquaredGPU::compute(int eflag, int vflag) } if (gpu_mode != GPU_FORCE) { + double sublo[3],subhi[3]; + if (domain->triclinic == 0) { + sublo[0] = domain->sublo[0]; + sublo[1] = domain->sublo[1]; + sublo[2] = domain->sublo[2]; + subhi[0] = domain->subhi[0]; + subhi[1] = domain->subhi[1]; + subhi[2] = domain->subhi[2]; + } else { + domain->bbox(domain->sublo_lamda,domain->subhi_lamda,sublo,subhi); + } inum = atom->nlocal; firstneigh = re_gpu_compute_n(neighbor->ago, inum, nall, atom->x, - atom->type, domain->sublo, domain->subhi, + atom->type, sublo, subhi, atom->tag, atom->nspecial, atom->special, eflag, vflag, eflag_atom, vflag_atom, host_start, &ilist, &numneigh, cpu_time, diff --git a/src/GPU/pair_soft_gpu.cpp b/src/GPU/pair_soft_gpu.cpp index 04efb1e96a22ef7af9fbe2cc52f753fa09c1f13b..48a4f689ff2a84e352ca2c856d857540b12950e8 100644 --- a/src/GPU/pair_soft_gpu.cpp +++ b/src/GPU/pair_soft_gpu.cpp @@ -96,10 +96,21 @@ void PairSoftGPU::compute(int eflag, int vflag) bool success = true; int *ilist, *numneigh, **firstneigh; if (gpu_mode != GPU_FORCE) { + double sublo[3],subhi[3]; + if (domain->triclinic == 0) { + sublo[0] = domain->sublo[0]; + sublo[1] = domain->sublo[1]; + sublo[2] = domain->sublo[2]; + subhi[0] = domain->subhi[0]; + subhi[1] = domain->subhi[1]; + subhi[2] = domain->subhi[2]; + } else { + domain->bbox(domain->sublo_lamda,domain->subhi_lamda,sublo,subhi); + } inum = atom->nlocal; firstneigh = soft_gpu_compute_n(neighbor->ago, inum, nall, - atom->x, atom->type, domain->sublo, - domain->subhi, atom->tag, atom->nspecial, + atom->x, atom->type, sublo, + subhi, atom->tag, atom->nspecial, atom->special, eflag, vflag, eflag_atom, vflag_atom, host_start, &ilist, &numneigh, cpu_time, success); diff --git a/src/GPU/pair_sw_gpu.cpp b/src/GPU/pair_sw_gpu.cpp index 8e75aff54537f5637d45392cebae8f583038e85a..4c4502828d56f171a76c24d5f437e6a5f7046a76 100644 --- a/src/GPU/pair_sw_gpu.cpp +++ b/src/GPU/pair_sw_gpu.cpp @@ -103,10 +103,21 @@ void PairSWGPU::compute(int eflag, int vflag) bool success = true; int *ilist, *numneigh, **firstneigh; if (gpu_mode != GPU_FORCE) { + double sublo[3],subhi[3]; + if (domain->triclinic == 0) { + sublo[0] = domain->sublo[0]; + sublo[1] = domain->sublo[1]; + sublo[2] = domain->sublo[2]; + subhi[0] = domain->subhi[0]; + subhi[1] = domain->subhi[1]; + subhi[2] = domain->subhi[2]; + } else { + domain->bbox(domain->sublo_lamda,domain->subhi_lamda,sublo,subhi); + } inum = atom->nlocal; firstneigh = sw_gpu_compute_n(neighbor->ago, inum, nall, - atom->x, atom->type, domain->sublo, - domain->subhi, atom->tag, atom->nspecial, + atom->x, atom->type, sublo, + subhi, atom->tag, atom->nspecial, atom->special, eflag, vflag, eflag_atom, vflag_atom, host_start, &ilist, &numneigh, cpu_time, success); diff --git a/src/GPU/pair_table_gpu.cpp b/src/GPU/pair_table_gpu.cpp index 563b070bda66bb88482dcf6a0756c39bf34bef7b..858a2107dc211d80152f26ff9190107ae6c4b2e2 100644 --- a/src/GPU/pair_table_gpu.cpp +++ b/src/GPU/pair_table_gpu.cpp @@ -99,9 +99,20 @@ void PairTableGPU::compute(int eflag, int vflag) bool success = true; int *ilist, *numneigh, **firstneigh; if (gpu_mode != GPU_FORCE) { + double sublo[3],subhi[3]; + if (domain->triclinic == 0) { + sublo[0] = domain->sublo[0]; + sublo[1] = domain->sublo[1]; + sublo[2] = domain->sublo[2]; + subhi[0] = domain->subhi[0]; + subhi[1] = domain->subhi[1]; + subhi[2] = domain->subhi[2]; + } else { + domain->bbox(domain->sublo_lamda,domain->subhi_lamda,sublo,subhi); + } inum = atom->nlocal; firstneigh = table_gpu_compute_n(neighbor->ago, inum, nall, atom->x, - atom->type, domain->sublo, domain->subhi, + atom->type, sublo, subhi, atom->tag, atom->nspecial, atom->special, eflag, vflag, eflag_atom, vflag_atom, host_start, &ilist, &numneigh, cpu_time, diff --git a/src/GPU/pair_tersoff_gpu.cpp b/src/GPU/pair_tersoff_gpu.cpp index 33bac49e5eaedda0540da8fd39bde0f58407bb29..d7b1ef5dd50c18c7ec7951e2fdbf8188dd79f9fd 100644 --- a/src/GPU/pair_tersoff_gpu.cpp +++ b/src/GPU/pair_tersoff_gpu.cpp @@ -107,10 +107,21 @@ void PairTersoffGPU::compute(int eflag, int vflag) bool success = true; int *ilist, *numneigh, **firstneigh; if (gpu_mode != GPU_FORCE) { + double sublo[3],subhi[3]; + if (domain->triclinic == 0) { + sublo[0] = domain->sublo[0]; + sublo[1] = domain->sublo[1]; + sublo[2] = domain->sublo[2]; + subhi[0] = domain->subhi[0]; + subhi[1] = domain->subhi[1]; + subhi[2] = domain->subhi[2]; + } else { + domain->bbox(domain->sublo_lamda,domain->subhi_lamda,sublo,subhi); + } inum = atom->nlocal; firstneigh = tersoff_gpu_compute_n(neighbor->ago, inum, nall, - atom->x, atom->type, domain->sublo, - domain->subhi, atom->tag, atom->nspecial, + atom->x, atom->type, sublo, + subhi, atom->tag, atom->nspecial, atom->special, eflag, vflag, eflag_atom, vflag_atom, host_start, &ilist, &numneigh, cpu_time, success); diff --git a/src/GPU/pair_tersoff_mod_gpu.cpp b/src/GPU/pair_tersoff_mod_gpu.cpp index ebcdf0f7dd7d9121f45f6c0d3e25f5566786a137..1b3504590284c98c7350f6203df4e8d7c21c70ce 100644 --- a/src/GPU/pair_tersoff_mod_gpu.cpp +++ b/src/GPU/pair_tersoff_mod_gpu.cpp @@ -100,10 +100,21 @@ void PairTersoffMODGPU::compute(int eflag, int vflag) bool success = true; int *ilist, *numneigh, **firstneigh; if (gpu_mode != GPU_FORCE) { + double sublo[3],subhi[3]; + if (domain->triclinic == 0) { + sublo[0] = domain->sublo[0]; + sublo[1] = domain->sublo[1]; + sublo[2] = domain->sublo[2]; + subhi[0] = domain->subhi[0]; + subhi[1] = domain->subhi[1]; + subhi[2] = domain->subhi[2]; + } else { + domain->bbox(domain->sublo_lamda,domain->subhi_lamda,sublo,subhi); + } inum = atom->nlocal; firstneigh = tersoff_mod_gpu_compute_n(neighbor->ago, inum, nall, - atom->x, atom->type, domain->sublo, - domain->subhi, atom->tag, atom->nspecial, + atom->x, atom->type, sublo, + subhi, atom->tag, atom->nspecial, atom->special, eflag, vflag, eflag_atom, vflag_atom, host_start, &ilist, &numneigh, cpu_time, success); diff --git a/src/GPU/pair_tersoff_zbl_gpu.cpp b/src/GPU/pair_tersoff_zbl_gpu.cpp index 09b5a7f8386c6cd0c32f7c9f7b468c599815c6d7..ae50552f149dcfb4cd0f1e1d2145e0339b2ce10e 100644 --- a/src/GPU/pair_tersoff_zbl_gpu.cpp +++ b/src/GPU/pair_tersoff_zbl_gpu.cpp @@ -108,10 +108,21 @@ void PairTersoffZBLGPU::compute(int eflag, int vflag) bool success = true; int *ilist, *numneigh, **firstneigh; if (gpu_mode != GPU_FORCE) { + double sublo[3],subhi[3]; + if (domain->triclinic == 0) { + sublo[0] = domain->sublo[0]; + sublo[1] = domain->sublo[1]; + sublo[2] = domain->sublo[2]; + subhi[0] = domain->subhi[0]; + subhi[1] = domain->subhi[1]; + subhi[2] = domain->subhi[2]; + } else { + domain->bbox(domain->sublo_lamda,domain->subhi_lamda,sublo,subhi); + } inum = atom->nlocal; firstneigh = tersoff_zbl_gpu_compute_n(neighbor->ago, inum, nall, - atom->x, atom->type, domain->sublo, - domain->subhi, atom->tag, atom->nspecial, + atom->x, atom->type, sublo, + subhi, atom->tag, atom->nspecial, atom->special, eflag, vflag, eflag_atom, vflag_atom, host_start, &ilist, &numneigh, cpu_time, success); diff --git a/src/GPU/pair_ufm_gpu.cpp b/src/GPU/pair_ufm_gpu.cpp index 49ed6289e1254fb1b9f607313d9f75c52f5d82d0..cea898b050a152342356a52a4cb86cb9c43598ae 100644 --- a/src/GPU/pair_ufm_gpu.cpp +++ b/src/GPU/pair_ufm_gpu.cpp @@ -98,10 +98,21 @@ void PairUFMGPU::compute(int eflag, int vflag) bool success = true; int *ilist, *numneigh, **firstneigh; if (gpu_mode != GPU_FORCE) { + double sublo[3],subhi[3]; + if (domain->triclinic == 0) { + sublo[0] = domain->sublo[0]; + sublo[1] = domain->sublo[1]; + sublo[2] = domain->sublo[2]; + subhi[0] = domain->subhi[0]; + subhi[1] = domain->subhi[1]; + subhi[2] = domain->subhi[2]; + } else { + domain->bbox(domain->sublo_lamda,domain->subhi_lamda,sublo,subhi); + } inum = atom->nlocal; firstneigh = ufml_gpu_compute_n(neighbor->ago, inum, nall, - atom->x, atom->type, domain->sublo, - domain->subhi, atom->tag, atom->nspecial, + atom->x, atom->type, sublo, + subhi, atom->tag, atom->nspecial, atom->special, eflag, vflag, eflag_atom, vflag_atom, host_start, &ilist, &numneigh, cpu_time, success); diff --git a/src/GPU/pair_vashishta_gpu.cpp b/src/GPU/pair_vashishta_gpu.cpp index 6f0d9384401569ec1d7dd0f4c46b3f52f1b6b02f..ccd277313016e82b2cc9bf9e5be4fa059bb1f721 100644 --- a/src/GPU/pair_vashishta_gpu.cpp +++ b/src/GPU/pair_vashishta_gpu.cpp @@ -104,10 +104,21 @@ void PairVashishtaGPU::compute(int eflag, int vflag) bool success = true; int *ilist, *numneigh, **firstneigh; if (gpu_mode != GPU_FORCE) { + double sublo[3],subhi[3]; + if (domain->triclinic == 0) { + sublo[0] = domain->sublo[0]; + sublo[1] = domain->sublo[1]; + sublo[2] = domain->sublo[2]; + subhi[0] = domain->subhi[0]; + subhi[1] = domain->subhi[1]; + subhi[2] = domain->subhi[2]; + } else { + domain->bbox(domain->sublo_lamda,domain->subhi_lamda,sublo,subhi); + } inum = atom->nlocal; firstneigh = vashishta_gpu_compute_n(neighbor->ago, inum, nall, - atom->x, atom->type, domain->sublo, - domain->subhi, atom->tag, atom->nspecial, + atom->x, atom->type, sublo, + subhi, atom->tag, atom->nspecial, atom->special, eflag, vflag, eflag_atom, vflag_atom, host_start, &ilist, &numneigh, cpu_time, success); diff --git a/src/GPU/pair_yukawa_colloid_gpu.cpp b/src/GPU/pair_yukawa_colloid_gpu.cpp index 7bbed7d89b42d47a4af0d03f0fbe24e8c53e3a62..c3439e3306b07b1f6a833895cf977802d547bd17 100644 --- a/src/GPU/pair_yukawa_colloid_gpu.cpp +++ b/src/GPU/pair_yukawa_colloid_gpu.cpp @@ -94,11 +94,22 @@ void PairYukawaColloidGPU::compute(int eflag, int vflag) bool success = true; int *ilist, *numneigh, **firstneigh; if (gpu_mode != GPU_FORCE) { + double sublo[3],subhi[3]; + if (domain->triclinic == 0) { + sublo[0] = domain->sublo[0]; + sublo[1] = domain->sublo[1]; + sublo[2] = domain->sublo[2]; + subhi[0] = domain->subhi[0]; + subhi[1] = domain->subhi[1]; + subhi[2] = domain->subhi[2]; + } else { + domain->bbox(domain->sublo_lamda,domain->subhi_lamda,sublo,subhi); + } inum = atom->nlocal; firstneigh = ykcolloid_gpu_compute_n(neighbor->ago, inum, nall, atom->x, atom->type, - domain->sublo, - domain->subhi, atom->tag, + sublo, + subhi, atom->tag, atom->nspecial, atom->special, eflag, vflag, eflag_atom, vflag_atom, host_start, &ilist, diff --git a/src/GPU/pair_yukawa_gpu.cpp b/src/GPU/pair_yukawa_gpu.cpp index 9d702daf2078636d9a2d120b58e01056b20b878b..b9b9d6e0a49751bacaab9f99466680fd3db04277 100644 --- a/src/GPU/pair_yukawa_gpu.cpp +++ b/src/GPU/pair_yukawa_gpu.cpp @@ -93,10 +93,21 @@ void PairYukawaGPU::compute(int eflag, int vflag) bool success = true; int *ilist, *numneigh, **firstneigh; if (gpu_mode != GPU_FORCE) { + double sublo[3],subhi[3]; + if (domain->triclinic == 0) { + sublo[0] = domain->sublo[0]; + sublo[1] = domain->sublo[1]; + sublo[2] = domain->sublo[2]; + subhi[0] = domain->subhi[0]; + subhi[1] = domain->subhi[1]; + subhi[2] = domain->subhi[2]; + } else { + domain->bbox(domain->sublo_lamda,domain->subhi_lamda,sublo,subhi); + } inum = atom->nlocal; firstneigh = yukawa_gpu_compute_n(neighbor->ago, inum, nall, - atom->x, atom->type, domain->sublo, - domain->subhi, atom->tag, atom->nspecial, + atom->x, atom->type, sublo, + subhi, atom->tag, atom->nspecial, atom->special, eflag, vflag, eflag_atom, vflag_atom, host_start, &ilist, &numneigh, cpu_time, success); diff --git a/src/GPU/pair_zbl_gpu.cpp b/src/GPU/pair_zbl_gpu.cpp index 23c3c077fa20799f91f000990e67a4c938360cde..d0cbfa1d7c30646c9ab769f491f4ebaa9090af9f 100644 --- a/src/GPU/pair_zbl_gpu.cpp +++ b/src/GPU/pair_zbl_gpu.cpp @@ -96,10 +96,21 @@ void PairZBLGPU::compute(int eflag, int vflag) bool success = true; int *ilist, *numneigh, **firstneigh; if (gpu_mode != GPU_FORCE) { + double sublo[3],subhi[3]; + if (domain->triclinic == 0) { + sublo[0] = domain->sublo[0]; + sublo[1] = domain->sublo[1]; + sublo[2] = domain->sublo[2]; + subhi[0] = domain->subhi[0]; + subhi[1] = domain->subhi[1]; + subhi[2] = domain->subhi[2]; + } else { + domain->bbox(domain->sublo_lamda,domain->subhi_lamda,sublo,subhi); + } inum = atom->nlocal; firstneigh = zbl_gpu_compute_n(neighbor->ago, inum, nall, - atom->x, atom->type, domain->sublo, - domain->subhi, atom->tag, atom->nspecial, + atom->x, atom->type, sublo, + subhi, atom->tag, atom->nspecial, atom->special, eflag, vflag, eflag_atom, vflag_atom, host_start, &ilist, &numneigh, cpu_time, success); diff --git a/src/GPU/pppm_gpu.cpp b/src/GPU/pppm_gpu.cpp index bbb270ff8e4380c5970f875ef40a9e27d8c3466a..7c58f6d406d66ba847904076dcf92ba5499df452 100644 --- a/src/GPU/pppm_gpu.cpp +++ b/src/GPU/pppm_gpu.cpp @@ -91,7 +91,6 @@ void PPPM_GPU_API(forces)(double **f); PPPMGPU::PPPMGPU(LAMMPS *lmp) : PPPM(lmp) { - triclinic_support = 0; density_brick_gpu = vd_brick = NULL; kspace_split = false; im_real_space = false; @@ -210,15 +209,17 @@ void PPPMGPU::compute(int eflag, int vflag) cg_peratom->setup(); } - bool success = true; - int flag=PPPM_GPU_API(spread)(nago, atom->nlocal, atom->nlocal + - atom->nghost, atom->x, atom->type, success, - atom->q, domain->boxlo, delxinv, delyinv, - delzinv); - if (!success) - error->one(FLERR,"Insufficient memory on accelerator"); - if (flag != 0) - error->one(FLERR,"Out of range atoms - cannot compute PPPM"); + if (triclinic == 0) { + bool success = true; + int flag=PPPM_GPU_API(spread)(nago, atom->nlocal, atom->nlocal + + atom->nghost, atom->x, atom->type, success, + atom->q, domain->boxlo, delxinv, delyinv, + delzinv); + if (!success) + error->one(FLERR,"Insufficient memory on accelerator"); + if (flag != 0) + error->one(FLERR,"Out of range atoms - cannot compute PPPM"); + } // convert atoms from box to lamda coords @@ -229,9 +230,10 @@ void PPPMGPU::compute(int eflag, int vflag) } // If need per-atom energies/virials, also do particle map on host - // concurrently with GPU calculations + // concurrently with GPU calculations, + // or if the box is triclinic, particle map is done on host - if (evflag_atom) { + if (evflag_atom || triclinic) { // extend size of per-atom arrays if necessary @@ -244,14 +246,24 @@ void PPPMGPU::compute(int eflag, int vflag) particle_map(); } + // if the box is triclinic, + // map my particle charge onto my local 3d density grid on the host + + if (triclinic) make_rho(); + double t3 = MPI_Wtime(); // all procs communicate density values from their ghost cells // to fully sum contribution in their 3d bricks // remap from 3d decomposition to FFT decomposition - cg->reverse_comm(this,REVERSE_RHO_GPU); - brick2fft_gpu(); + if (triclinic == 0) { + cg->reverse_comm(this,REVERSE_RHO_GPU); + brick2fft_gpu(); + } else { + cg->reverse_comm(this,REVERSE_RHO); + PPPM::brick2fft(); + } // compute potential gradient on my FFT grid and // portion of e_long on this proc's FFT grid @@ -279,7 +291,8 @@ void PPPMGPU::compute(int eflag, int vflag) // calculate the force on my particles FFT_SCALAR qscale = force->qqrd2e * scale; - PPPM_GPU_API(interp)(qscale); + if (triclinic == 0) PPPM_GPU_API(interp)(qscale); + else fieldforce(); // per-atom energy/virial // energy includes self-energy correction diff --git a/src/GRANULAR/fix_pour.cpp b/src/GRANULAR/fix_pour.cpp index 25806a1ac866b9ee9867449eb0ba958d6130893c..73b42b9653c0b35ba6f86907d29d70377d1a3e37 100644 --- a/src/GRANULAR/fix_pour.cpp +++ b/src/GRANULAR/fix_pour.cpp @@ -40,6 +40,7 @@ using namespace MathConst; enum{ATOM,MOLECULE}; enum{ONE,RANGE,POLY}; +enum{CONSTANT,EQUAL}; // same as FixGravity #define EPSILON 0.001 #define SMALL 1.0e-10 @@ -318,6 +319,10 @@ void FixPour::init() if (ifix == -1) error->all(FLERR,"No fix gravity defined for fix pour"); + int varflag = ((FixGravity *) modify->fix[ifix])->varflag; + if (varflag != CONSTANT) + error->all(FLERR,"Fix gravity for fix pour must be constant"); + double xgrav = ((FixGravity *) modify->fix[ifix])->xgrav; double ygrav = ((FixGravity *) modify->fix[ifix])->ygrav; double zgrav = ((FixGravity *) modify->fix[ifix])->zgrav; diff --git a/src/GRANULAR/fix_wall_gran.cpp b/src/GRANULAR/fix_wall_gran.cpp index c8eec53a1deae4fab25d38cfd24aed73ee39e292..e5ed1579ba3d58e2b1855735830af890b0dc9ad9 100644 --- a/src/GRANULAR/fix_wall_gran.cpp +++ b/src/GRANULAR/fix_wall_gran.cpp @@ -1134,15 +1134,15 @@ void FixWallGran::granular(double rsq, double dx, double dy, double dz, t2 = 8*dR*dR2*E*E*E; t3 = 4*dR2*E; sqrt1 = MAX(0, t0*(t1+2*t2)); // in case sqrt(0) < 0 due to precision issues - t4 = cbrt(t1+t2+THREEROOT3*M_PI*sqrt(sqrt1)); + t4 = cbrt(t1+t2+THREEROOT3*MY_PI*sqrt(sqrt1)); t5 = t3/t4 + t4/E; sqrt2 = MAX(0, 2*dR + t5); t6 = sqrt(sqrt2); - sqrt3 = MAX(0, 4*dR - t5 + SIXROOT6*coh*M_PI*R2/(E*t6)); + sqrt3 = MAX(0, 4*dR - t5 + SIXROOT6*coh*MY_PI*R2/(E*t6)); a = INVROOT6*(t6 + sqrt(sqrt3)); a2 = a*a; knfac = normal_coeffs[0]*a; - Fne = knfac*a2/Reff - TWOPI*a2*sqrt(4*coh*E/(M_PI*a)); + Fne = knfac*a2/Reff - TWOPI*a2*sqrt(4*coh*E/(MY_PI*a)); } else { knfac = E; //Hooke a = sqrt(dR); @@ -1192,11 +1192,11 @@ void FixWallGran::granular(double rsq, double dx, double dy, double dz, vrel = sqrt(vrel); if (normal_model == JKR) { - F_pulloff = 3*M_PI*coh*Reff; + F_pulloff = 3*MY_PI*coh*Reff; Fncrit = fabs(Fne + 2*F_pulloff); } else if (normal_model == DMT) { - F_pulloff = 4*M_PI*coh*Reff; + F_pulloff = 4*MY_PI*coh*Reff; Fncrit = fabs(Fne + 2*F_pulloff); } else{ @@ -1589,8 +1589,8 @@ double FixWallGran::pulloff_distance(double radius) double coh, E, a, dist; coh = normal_coeffs[3]; E = normal_coeffs[0]*THREEQUARTERS; - a = cbrt(9*M_PI*coh*radius/(4*E)); - dist = a*a/radius - 2*sqrt(M_PI*coh*a/E); + a = cbrt(9*MY_PI*coh*radius/(4*E)); + dist = a*a/radius - 2*sqrt(MY_PI*coh*a/E); return dist; } diff --git a/src/GRANULAR/pair_gran_hooke_history.cpp b/src/GRANULAR/pair_gran_hooke_history.cpp index de205dce913e92d5357bf395d1d305f8c9fc74cb..29ca53d361200d1b15a945a64121234f0858ccb6 100644 --- a/src/GRANULAR/pair_gran_hooke_history.cpp +++ b/src/GRANULAR/pair_gran_hooke_history.cpp @@ -24,6 +24,7 @@ #include "update.h" #include "modify.h" #include "fix.h" +#include "fix_dummy.h" #include "fix_neigh_history.h" #include "comm.h" #include "neighbor.h" @@ -43,7 +44,6 @@ PairGranHookeHistory::PairGranHookeHistory(LAMMPS *lmp) : Pair(lmp) no_virial_fdotr_compute = 1; history = 1; size_history = 3; - fix_history = NULL; single_extra = 10; svector = new double[10]; @@ -60,6 +60,19 @@ PairGranHookeHistory::PairGranHookeHistory(LAMMPS *lmp) : Pair(lmp) // keep default behavior of history[i][j] = -history[j][i] nondefault_history_transfer = 0; + + // create dummy fix as placeholder for FixNeighHistory + // this is so final order of Modify:fix will conform to input script + + fix_history = NULL; + + char **fixarg = new char*[3]; + fixarg[0] = (char *) "NEIGH_HISTORY_HH_DUMMY"; + fixarg[1] = (char *) "all"; + fixarg[2] = (char *) "DUMMY"; + modify->add_fix(3,fixarg,1); + delete [] fixarg; + fix_dummy = (FixDummy *) modify->fix[modify->nfix-1]; } /* ---------------------------------------------------------------------- */ @@ -69,7 +82,9 @@ PairGranHookeHistory::~PairGranHookeHistory() if (copymode) return; delete [] svector; - if (fix_history) modify->delete_fix("NEIGH_HISTORY"); + + if (!fix_history) modify->delete_fix("NEIGH_HISTORY_HH_DUMMY"); + else modify->delete_fix("NEIGH_HISTORY_HH"); if (allocated) { memory->destroy(setflag); @@ -412,19 +427,22 @@ void PairGranHookeHistory::init_style() dt = update->dt; - // if first init, create Fix needed for storing shear history + // if history is stored and first init, create Fix to store history + // it replaces FixDummy, created in the constructor + // this is so its order in the fix list is preserved if (history && fix_history == NULL) { char dnumstr[16]; sprintf(dnumstr,"%d",size_history); char **fixarg = new char*[4]; - fixarg[0] = (char *) "NEIGH_HISTORY"; + fixarg[0] = (char *) "NEIGH_HISTORY_HH"; fixarg[1] = (char *) "all"; fixarg[2] = (char *) "NEIGH_HISTORY"; fixarg[3] = dnumstr; - modify->add_fix(4,fixarg,1); + modify->replace_fix("NEIGH_HISTORY_HH_DUMMY",4,fixarg,1); delete [] fixarg; - fix_history = (FixNeighHistory *) modify->fix[modify->nfix-1]; + int ifix = modify->find_fix("NEIGH_HISTORY_HH"); + fix_history = (FixNeighHistory *) modify->fix[ifix]; fix_history->pair = this; } @@ -491,7 +509,7 @@ void PairGranHookeHistory::init_style() // set fix which stores history info if (history) { - int ifix = modify->find_fix("NEIGH_HISTORY"); + int ifix = modify->find_fix("NEIGH_HISTORY_HH"); if (ifix < 0) error->all(FLERR,"Could not find pair fix neigh history ID"); fix_history = (FixNeighHistory *) modify->fix[ifix]; } diff --git a/src/GRANULAR/pair_gran_hooke_history.h b/src/GRANULAR/pair_gran_hooke_history.h index 81f2d8fd4a72c11014dfb86e48251f936d1e5581..309af54ee6dcd75c65e059907ebbb825b5c1fd40 100644 --- a/src/GRANULAR/pair_gran_hooke_history.h +++ b/src/GRANULAR/pair_gran_hooke_history.h @@ -56,6 +56,7 @@ class PairGranHookeHistory : public Pair { int size_history; + class FixDummy *fix_dummy; class FixNeighHistory *fix_history; // storage of rigid body masses for use in granular interactions diff --git a/src/GRANULAR/pair_granular.cpp b/src/GRANULAR/pair_granular.cpp index 85eab1fb9efe51cc923fddcb2422cdb96fc74ba1..fef8ded5f7351e2c3037937b67caf04aae40c154 100644 --- a/src/GRANULAR/pair_granular.cpp +++ b/src/GRANULAR/pair_granular.cpp @@ -1,13 +1,14 @@ /* ---------------------------------------------------------------------- -http://lammps.sandia.gov, Sandia National Laboratories -Steve Plimpton, sjplimp@sandia.gov + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + http://lammps.sandia.gov, Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov -Copyright (2003) Sandia Corporation. Under the terms of Contract -DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains -certain rights in this software. This software is distributed under -the GNU General Public License. + Copyright (2003) Sandia Corporation. Under the terms of Contract + DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains + certain rights in this software. This software is distributed under + the GNU General Public License. -See the README file in the top-level LAMMPS directory. + See the README file in the top-level LAMMPS directory. ------------------------------------------------------------------------- */ /* ---------------------------------------------------------------------- @@ -25,6 +26,7 @@ See the README file in the top-level LAMMPS directory. #include "update.h" #include "modify.h" #include "fix.h" +#include "fix_dummy.h" #include "fix_neigh_history.h" #include "comm.h" #include "neighbor.h" @@ -62,7 +64,6 @@ PairGranular::PairGranular(LAMMPS *lmp) : Pair(lmp) { single_enable = 1; no_virial_fdotr_compute = 1; - fix_history = NULL; single_extra = 12; svector = new double[single_extra]; @@ -90,6 +91,19 @@ PairGranular::PairGranular(LAMMPS *lmp) : Pair(lmp) nondefault_history_transfer = 0; tangential_history_index = 0; roll_history_index = twist_history_index = 0; + + // create dummy fix as placeholder for FixNeighHistory + // this is so final order of Modify:fix will conform to input script + + fix_history = NULL; + + char **fixarg = new char*[3]; + fixarg[0] = (char *) "NEIGH_HISTORY_GRANULAR_DUMMY"; + fixarg[1] = (char *) "all"; + fixarg[2] = (char *) "DUMMY"; + modify->add_fix(3,fixarg,1); + delete [] fixarg; + fix_dummy = (FixDummy *) modify->fix[modify->nfix-1]; } /* ---------------------------------------------------------------------- */ @@ -97,7 +111,9 @@ PairGranular::PairGranular(LAMMPS *lmp) : Pair(lmp) PairGranular::~PairGranular() { delete [] svector; - if (fix_history) modify->delete_fix("NEIGH_HISTORY"); + + if (!fix_history) modify->delete_fix("NEIGH_HISTORY_GRANULAR_DUMMY"); + else modify->delete_fix("NEIGH_HISTORY_GRANULAR"); if (allocated) { memory->destroy(setflag); @@ -1021,20 +1037,22 @@ void PairGranular::init_style() dt = update->dt; - // if history is stored: - // if first init, create Fix needed for storing history + // if history is stored and first init, create Fix to store history + // it replaces FixDummy, created in the constructor + // this is so its order in the fix list is preserved if (use_history && fix_history == NULL) { char dnumstr[16]; sprintf(dnumstr,"%d",size_history); char **fixarg = new char*[4]; - fixarg[0] = (char *) "NEIGH_HISTORY"; + fixarg[0] = (char *) "NEIGH_HISTORY_GRANULAR"; fixarg[1] = (char *) "all"; fixarg[2] = (char *) "NEIGH_HISTORY"; fixarg[3] = dnumstr; - modify->add_fix(4,fixarg,1); + modify->replace_fix("NEIGH_HISTORY_GRANULAR_DUMMY",4,fixarg,1); delete [] fixarg; - fix_history = (FixNeighHistory *) modify->fix[modify->nfix-1]; + int ifix = modify->find_fix("NEIGH_HISTORY_GRANULAR"); + fix_history = (FixNeighHistory *) modify->fix[ifix]; fix_history->pair = this; } @@ -1104,7 +1122,7 @@ void PairGranular::init_style() // set fix which stores history info if (size_history > 0) { - int ifix = modify->find_fix("NEIGH_HISTORY"); + int ifix = modify->find_fix("NEIGH_HISTORY_GRANULAR"); if (ifix < 0) error->all(FLERR,"Could not find pair fix neigh history ID"); fix_history = (FixNeighHistory *) modify->fix[ifix]; } diff --git a/src/GRANULAR/pair_granular.h b/src/GRANULAR/pair_granular.h index d799acb7334e559d4b2495cd83d79699d2afc60e..e9ba629b49580f3edfe466cc4d9a19a96ce9a565 100644 --- a/src/GRANULAR/pair_granular.h +++ b/src/GRANULAR/pair_granular.h @@ -51,6 +51,7 @@ class PairGranular : public Pair { double *maxrad_dynamic,*maxrad_frozen; double **cut; + class FixDummy *fix_dummy; class FixNeighHistory *fix_history; // storage of rigid body masses for use in granular interactions @@ -111,4 +112,4 @@ Self-explanatory. Check the input script syntax and compare to the documentation for the command. You can use -echo screen as a command-line option when running LAMMPS to see the offending line. - */ +*/ diff --git a/src/KIM/kim_interactions.cpp b/src/KIM/kim_interactions.cpp index 7dbe5230339d20e732879dc99829c2beda7f45ee..d0aa0e3c4e170019ee9b039a79492f7247ec9c86 100644 --- a/src/KIM/kim_interactions.cpp +++ b/src/KIM/kim_interactions.cpp @@ -15,6 +15,7 @@ Contributing authors: Axel Kohlmeyer (Temple U), Ryan S. Elliott (UMN) Ellad B. Tadmor (UMN) + Ronald Miller (Carleton U) ------------------------------------------------------------------------- */ /* ---------------------------------------------------------------------- @@ -57,8 +58,10 @@ #include "kim_interactions.h" #include +#include #include #include +#include #include "error.h" #include "atom.h" #include "comm.h" @@ -80,6 +83,8 @@ extern "C" { using namespace LAMMPS_NS; +#define MAXLINE 1024 + /* ---------------------------------------------------------------------- */ void KimInteractions::command(int narg, char **arg) @@ -223,8 +228,27 @@ void KimInteractions::do_setup(int narg, char **arg) for (int j=0; j < sim_lines; ++j) { KIM_SimulatorModel_GetSimulatorFieldLine( simulatorModel,sim_model_idx,j,&sim_value); - input->one(sim_value); - } + char strbuf[MAXLINE]; + char * strword; + strcpy(strbuf,sim_value); + strword = strtok(strbuf," \t"); + if (0==strcmp(strword,"KIM_SET_TYPE_PARAMETERS")) { + // Notes regarding the KIM_SET_TYPE_PARAMETERS command + // * This is an INTERNAL command. + // * It is intended for use only by KIM Simulator Models. + // * It is not possible to use this command outside of the context + // of the kim_interactions command and KIM Simulator Models. + // * The command performs a transformation from symbolic + // string-based atom types to lammps numeric atom types for + // the pair_coeff and charge settings. + // * The command is not documented fully as it is expected to be + // temporary. Eventually it should be replaced by a more + // comprehensive symbolic types support in lammps. + KIM_SET_TYPE_PARAMETERS(sim_value); + } else { + input->one(sim_value); + } + } } } @@ -263,6 +287,96 @@ void KimInteractions::do_setup(int narg, char **arg) /* ---------------------------------------------------------------------- */ +void KimInteractions::KIM_SET_TYPE_PARAMETERS(char const *const input_line) const +{ + char strbuf[MAXLINE]; + strcpy(strbuf,input_line); + char *cmd, *key, *filename; + int nocomment; + cmd = strtok(strbuf," \t"); + key = strtok(NULL," \t"); + filename = strtok(NULL," \t"); + + FILE *fp; + fp = fopen(filename,"r"); + if (fp == NULL) { + error->one(FLERR,"Parameter file not found"); + } + + char *species1, *species2, *the_rest, *check; + std::vector species; + for (int i = 0; i < atom->ntypes; ++i) + { + char *str; + str = strtok(NULL," \t"); + if (str == NULL) + error->one(FLERR,"Incorrect args for KIM_SET_TYPE_PARAMETERS command"); + species.push_back(str); + } + + char line[MAXLINE],*ptr; + int n, eof = 0; + + while (1) { + if (comm->me == 0) { + ptr = fgets(line,MAXLINE,fp); + if (ptr == NULL) { + eof = 1; + fclose(fp); + } else n = strlen(line) + 1; + } + MPI_Bcast(&eof,1,MPI_INT,0,world); + if (eof) break; + MPI_Bcast(&n,1,MPI_INT,0,world); + MPI_Bcast(line,n,MPI_CHAR,0,world); + + ptr = line; + nocomment = line[0] != '#'; + + if(nocomment) { + if (strcmp(key,"pair") == 0) { + species1 = strtok(ptr," \t"); + species2 = strtok(NULL," \t"); + the_rest = strtok(NULL,"\n"); + + for (int type_a = 0; type_a < atom->ntypes; ++type_a) { + for (int type_b = type_a; type_b < atom->ntypes; ++type_b) { + if(((strcmp(species[type_a],species1) == 0) && + (strcmp(species[type_b],species2) == 0)) + || + ((strcmp(species[type_b],species1) == 0) && + (strcmp(species[type_a],species2) == 0)) + ) { + char pair_command[MAXLINE]; + sprintf(pair_command,"pair_coeff %i %i %s",type_a+1,type_b+1, + the_rest); + input->one(pair_command); + } + } + } + } + else if (strcmp(key,"charge") == 0) { + species1 = strtok(ptr," \t"); + the_rest = strtok(NULL,"\n"); + + for (int type_a = 0; type_a < atom->ntypes; ++type_a) { + if(strcmp(species[type_a],species1) == 0) { + char pair_command[MAXLINE]; + sprintf(pair_command,"set type %i charge %s",type_a+1,the_rest); + input->one(pair_command); + } + } + } + else{ + error->one(FLERR,"Unrecognized KEY for KIM_SET_TYPE_PARAMETERS command"); + } + } + } + fclose(fp); +} + +/* ---------------------------------------------------------------------- */ + int KimInteractions::species_to_atomic_no(std::string const species) const { if (species == "H") return 1; diff --git a/src/KIM/kim_interactions.h b/src/KIM/kim_interactions.h index 8172004d530bbcdab21c5a829d6b11f69b22e071..ffec48adab555c135e131ee7600413070bc75d39 100644 --- a/src/KIM/kim_interactions.h +++ b/src/KIM/kim_interactions.h @@ -15,6 +15,7 @@ Contributing authors: Axel Kohlmeyer (Temple U), Ryan S. Elliott (UMN) Ellad B. Tadmor (UMN) + Ronald Miller (Carleton U) ------------------------------------------------------------------------- */ /* ---------------------------------------------------------------------- @@ -76,6 +77,7 @@ class KimInteractions : protected Pointers { private: void do_setup(int, char **); int species_to_atomic_no(std::string const species) const; + void KIM_SET_TYPE_PARAMETERS(char const *const input_line) const; void kim_interactions_log_delimiter(std::string const begin_end) const; }; diff --git a/src/KIM/kim_property.cpp b/src/KIM/kim_property.cpp index d2f1d145c9aa22d590569d3f9153c5bde31ba417..4e63a25ffb3ca9e001e7adc74f51bdb0de7e7a6f 100644 --- a/src/KIM/kim_property.cpp +++ b/src/KIM/kim_property.cpp @@ -464,7 +464,8 @@ void kimProperty::command(int narg, char **arg) error->one(FLERR, "Error Python `kim_property_dump` function " "evaluation failed!"); } - } + } else + pValue = NULL; // Destroy the variable kim_str_cmd[1] = const_cast("delete"); diff --git a/src/KIM/pair_kim.cpp b/src/KIM/pair_kim.cpp index e54c76397f1c786380b9477eb0ca3f3414ffb3cf..8ff0ddf455ce289e1c92e2e04e83ceb565bb879d 100644 --- a/src/KIM/pair_kim.cpp +++ b/src/KIM/pair_kim.cpp @@ -926,7 +926,7 @@ void PairKIM::set_argument_pointers() kimerror = kimerror || KIM_ComputeArguments_SetArgumentPointerDouble( pargs,KIM_COMPUTE_ARGUMENT_NAME_partialEnergy, - reinterpret_cast(NULL)); + static_cast(NULL)); } } @@ -947,7 +947,7 @@ void PairKIM::set_argument_pointers() kimerror = kimerror || KIM_ComputeArguments_SetArgumentPointerDouble( pargs, KIM_COMPUTE_ARGUMENT_NAME_partialParticleEnergy, - reinterpret_cast(NULL)); + static_cast(NULL)); } else if (KIM_SupportStatus_NotEqual(kim_model_support_for_particleEnergy, KIM_SUPPORT_STATUS_notSupported)) { kimerror = kimerror || KIM_ComputeArguments_SetArgumentPointerDouble( @@ -960,7 +960,7 @@ void PairKIM::set_argument_pointers() kimerror = kimerror || KIM_ComputeArguments_SetArgumentPointerDouble( pargs, KIM_COMPUTE_ARGUMENT_NAME_partialForces, - reinterpret_cast(NULL)); + static_cast(NULL)); } else { kimerror = kimerror || KIM_ComputeArguments_SetArgumentPointerDouble( pargs, KIM_COMPUTE_ARGUMENT_NAME_partialForces, &(atom->f[0][0])); @@ -983,7 +983,7 @@ void PairKIM::set_argument_pointers() kimerror = kimerror || KIM_ComputeArguments_SetArgumentPointerDouble( pargs, KIM_COMPUTE_ARGUMENT_NAME_partialParticleVirial, - reinterpret_cast(NULL)); + static_cast(NULL)); } else if (KIM_SupportStatus_NotEqual(kim_model_support_for_particleVirial, KIM_SUPPORT_STATUS_notSupported)) { kimerror = kimerror || KIM_ComputeArguments_SetArgumentPointerDouble( diff --git a/src/KOKKOS/Install.sh b/src/KOKKOS/Install.sh index e0b1c928218c98ebe9c8a47a5b4a29e3ed462147..e9a8ff96c81345bb8346f8ba8fa4df0be3abd2b8 100755 --- a/src/KOKKOS/Install.sh +++ b/src/KOKKOS/Install.sh @@ -85,6 +85,10 @@ action comm_kokkos.cpp action comm_kokkos.h action comm_tiled_kokkos.cpp action comm_tiled_kokkos.h +action compute_coord_atom_kokkos.cpp +action compute_coord_atom_kokkos.h +action compute_orientorder_atom_kokkos.cpp +action compute_orientorder_atom_kokkos.h action compute_temp_kokkos.cpp action compute_temp_kokkos.h action dihedral_charmm_kokkos.cpp dihedral_charmm.cpp diff --git a/src/KOKKOS/angle_charmm_kokkos.cpp b/src/KOKKOS/angle_charmm_kokkos.cpp index 245aead73e01cf7ac51664d959f4f744474c3d16..8d7a4d23d6853652b45b7693c1d0cafb46be93d2 100644 --- a/src/KOKKOS/angle_charmm_kokkos.cpp +++ b/src/KOKKOS/angle_charmm_kokkos.cpp @@ -72,21 +72,21 @@ void AngleCharmmKokkos::compute(int eflag_in, int vflag_in) //if(k_eatom.extent(0)destroy_kokkos(k_eatom,eatom); memoryKK->create_kokkos(k_eatom,eatom,maxeatom,"improper:eatom"); - d_eatom = k_eatom.template view(); + d_eatom = k_eatom.template view(); //} } if (vflag_atom) { //if(k_vatom.extent(0)destroy_kokkos(k_vatom,vatom); memoryKK->create_kokkos(k_vatom,vatom,maxvatom,"improper:vatom"); - d_vatom = k_vatom.template view(); + d_vatom = k_vatom.template view(); //} } x = atomKK->k_x.view(); f = atomKK->k_f.view(); neighborKK->k_anglelist.template sync(); - anglelist = neighborKK->k_anglelist.view(); + anglelist = neighborKK->k_anglelist.view(); int nanglelist = neighborKK->nanglelist; nlocal = atom->nlocal; newton_bond = force->newton_bond; @@ -265,10 +265,10 @@ void AngleCharmmKokkos::coeff(int narg, char **arg) AngleCharmm::coeff(narg, arg); int n = atom->nangletypes; - Kokkos::DualView k_k("AngleCharmm::k",n+1); - Kokkos::DualView k_theta0("AngleCharmm::theta0",n+1); - Kokkos::DualView k_k_ub("AngleCharmm::k_ub",n+1); - Kokkos::DualView k_r_ub("AngleCharmm::r_ub",n+1); + typename AT::tdual_ffloat_1d k_k("AngleCharmm::k",n+1); + typename AT::tdual_ffloat_1d k_theta0("AngleCharmm::theta0",n+1); + typename AT::tdual_ffloat_1d k_k_ub("AngleCharmm::k_ub",n+1); + typename AT::tdual_ffloat_1d k_r_ub("AngleCharmm::r_ub",n+1); d_k = k_k.template view(); d_theta0 = k_theta0.template view(); @@ -303,10 +303,10 @@ void AngleCharmmKokkos::read_restart(FILE *fp) AngleCharmm::read_restart(fp); int n = atom->nangletypes; - Kokkos::DualView k_k("AngleCharmm::k",n+1); - Kokkos::DualView k_theta0("AngleCharmm::theta0",n+1); - Kokkos::DualView k_k_ub("AngleCharmm::k_ub",n+1); - Kokkos::DualView k_r_ub("AngleCharmm::r_ub",n+1); + typename AT::tdual_ffloat_1d k_k("AngleCharmm::k",n+1); + typename AT::tdual_ffloat_1d k_theta0("AngleCharmm::theta0",n+1); + typename AT::tdual_ffloat_1d k_k_ub("AngleCharmm::k_ub",n+1); + typename AT::tdual_ffloat_1d k_r_ub("AngleCharmm::r_ub",n+1); d_k = k_k.template view(); d_theta0 = k_theta0.template view(); diff --git a/src/KOKKOS/angle_charmm_kokkos.h b/src/KOKKOS/angle_charmm_kokkos.h index 865439b83a2ceaf8cfa313ea38af1a17cf675c94..c7f64d4c222fbe593be3550feb7bce03542369cc 100644 --- a/src/KOKKOS/angle_charmm_kokkos.h +++ b/src/KOKKOS/angle_charmm_kokkos.h @@ -63,11 +63,13 @@ class AngleCharmmKokkos : public AngleCharmm { typedef ArrayTypes AT; typename AT::t_x_array_randomread x; - typename Kokkos::View::value,Kokkos::MemoryTraits > f; + + typedef typename KKDevice::value KKDeviceType; + typename Kokkos::View > f; typename AT::t_int_2d anglelist; - Kokkos::DualView k_eatom; - Kokkos::DualView k_vatom; + Kokkos::DualView k_eatom; + Kokkos::DualView k_vatom; Kokkos::View::value,Kokkos::MemoryTraits > d_eatom; Kokkos::View::value,Kokkos::MemoryTraits > d_vatom; diff --git a/src/KOKKOS/atom_kokkos.cpp b/src/KOKKOS/atom_kokkos.cpp index 4637a9a21cc42bd3aec9872bf29d915cdf060d2c..49fdbb95bb81941bce18c7cf5d92a18136fab8ec 100644 --- a/src/KOKKOS/atom_kokkos.cpp +++ b/src/KOKKOS/atom_kokkos.cpp @@ -237,7 +237,7 @@ void AtomKokkos::grow(unsigned int mask){ sync(Device, mask); modified(Device, mask); memoryKK->grow_kokkos(k_special,special,nmax,maxspecial,"atom:special"); - avec->grow_reset(); + avec->grow_pointers(); sync(Host, mask); } } diff --git a/src/KOKKOS/atom_vec_angle_kokkos.cpp b/src/KOKKOS/atom_vec_angle_kokkos.cpp index 5b934e24342d98013d0e709df1d2eabf0a7e46ca..e9fee6d8f6a9d3a0a8bd07acf0d2913e2f0ef1a8 100644 --- a/src/KOKKOS/atom_vec_angle_kokkos.cpp +++ b/src/KOKKOS/atom_vec_angle_kokkos.cpp @@ -98,7 +98,7 @@ void AtomVecAngleKokkos::grow(int n) memoryKK->grow_kokkos(atomKK->k_angle_atom3,atomKK->angle_atom3,nmax,atomKK->angle_per_atom, "atom:angle_atom3"); - grow_reset(); + grow_pointers(); atomKK->sync(Host,ALL_MASK); if (atom->nextra_grow) @@ -110,7 +110,7 @@ void AtomVecAngleKokkos::grow(int n) reset local array ptrs ------------------------------------------------------------------------- */ -void AtomVecAngleKokkos::grow_reset() +void AtomVecAngleKokkos::grow_pointers() { tag = atomKK->tag; d_tag = atomKK->k_tag.d_view; diff --git a/src/KOKKOS/atom_vec_angle_kokkos.h b/src/KOKKOS/atom_vec_angle_kokkos.h index abdd48fce51e3181357a95f33ef988868661173b..4fc71725b0ab4c96c29ca8b1764733dc3c82b647 100644 --- a/src/KOKKOS/atom_vec_angle_kokkos.h +++ b/src/KOKKOS/atom_vec_angle_kokkos.h @@ -58,7 +58,7 @@ class AtomVecAngleKokkos : public AtomVecKokkos { int write_data_hybrid(FILE *, double *); bigint memory_usage(); - void grow_reset(); + void grow_pointers(); int pack_comm_kokkos(const int &n, const DAT::tdual_int_2d &k_sendlist, const int & iswap, const DAT::tdual_xfloat_2d &buf, diff --git a/src/KOKKOS/atom_vec_atomic_kokkos.cpp b/src/KOKKOS/atom_vec_atomic_kokkos.cpp index df30b50dd07d27c7c0b0745661d5cb52118b0b29..7a66dc753a88fac40b50415ece5a8059684f8fe7 100644 --- a/src/KOKKOS/atom_vec_atomic_kokkos.cpp +++ b/src/KOKKOS/atom_vec_atomic_kokkos.cpp @@ -74,7 +74,7 @@ void AtomVecAtomicKokkos::grow(int n) memoryKK->grow_kokkos(atomKK->k_v,atomKK->v,nmax,"atom:v"); memoryKK->grow_kokkos(atomKK->k_f,atomKK->f,nmax,"atom:f"); - grow_reset(); + grow_pointers(); atomKK->sync(Host,ALL_MASK); if (atom->nextra_grow) @@ -86,7 +86,7 @@ void AtomVecAtomicKokkos::grow(int n) reset local array ptrs ------------------------------------------------------------------------- */ -void AtomVecAtomicKokkos::grow_reset() +void AtomVecAtomicKokkos::grow_pointers() { tag = atomKK->tag; d_tag = atomKK->k_tag.d_view; diff --git a/src/KOKKOS/atom_vec_atomic_kokkos.h b/src/KOKKOS/atom_vec_atomic_kokkos.h index e4d2654e2cb14e6bcd95e812e6204d33ed0c6304..212132ef60d2454ea803aefaf0be3a121c090910 100644 --- a/src/KOKKOS/atom_vec_atomic_kokkos.h +++ b/src/KOKKOS/atom_vec_atomic_kokkos.h @@ -48,7 +48,7 @@ class AtomVecAtomicKokkos : public AtomVecKokkos { void write_data(FILE *, int, double **); bigint memory_usage(); - void grow_reset(); + void grow_pointers(); int pack_border_kokkos(int n, DAT::tdual_int_2d k_sendlist, DAT::tdual_xfloat_2d buf,int iswap, int pbc_flag, int *pbc, ExecutionSpace space); diff --git a/src/KOKKOS/atom_vec_bond_kokkos.cpp b/src/KOKKOS/atom_vec_bond_kokkos.cpp index b614d94bceaf286347a68fa82bcf3a8101b576cf..157f194125ed889c7a2b694dd00c846560b68e93 100644 --- a/src/KOKKOS/atom_vec_bond_kokkos.cpp +++ b/src/KOKKOS/atom_vec_bond_kokkos.cpp @@ -84,7 +84,7 @@ void AtomVecBondKokkos::grow(int n) memoryKK->grow_kokkos(atomKK->k_bond_type,atomKK->bond_type,nmax,atomKK->bond_per_atom,"atom:bond_type"); memoryKK->grow_kokkos(atomKK->k_bond_atom,atomKK->bond_atom,nmax,atomKK->bond_per_atom,"atom:bond_atom"); - grow_reset(); + grow_pointers(); atomKK->sync(Host,ALL_MASK); if (atom->nextra_grow) @@ -96,7 +96,7 @@ void AtomVecBondKokkos::grow(int n) reset local array ptrs ------------------------------------------------------------------------- */ -void AtomVecBondKokkos::grow_reset() +void AtomVecBondKokkos::grow_pointers() { tag = atomKK->tag; d_tag = atomKK->k_tag.d_view; diff --git a/src/KOKKOS/atom_vec_bond_kokkos.h b/src/KOKKOS/atom_vec_bond_kokkos.h index 7ec15450efc23c91d9ff897fe09a52e9046e1dd3..f38ade8f6474bf6c841d3a8a4a12bd8308203218 100644 --- a/src/KOKKOS/atom_vec_bond_kokkos.h +++ b/src/KOKKOS/atom_vec_bond_kokkos.h @@ -52,7 +52,7 @@ class AtomVecBondKokkos : public AtomVecKokkos { int write_data_hybrid(FILE *, double *); bigint memory_usage(); - void grow_reset(); + void grow_pointers(); int pack_border_kokkos(int n, DAT::tdual_int_2d k_sendlist, DAT::tdual_xfloat_2d buf,int iswap, int pbc_flag, int *pbc, ExecutionSpace space); diff --git a/src/KOKKOS/atom_vec_charge_kokkos.cpp b/src/KOKKOS/atom_vec_charge_kokkos.cpp index a9cee3aca864716aad2d1ed24b15310be80b1c5a..8f468b8e46ebd52b7d0b1a097061ae1c6b11c253 100644 --- a/src/KOKKOS/atom_vec_charge_kokkos.cpp +++ b/src/KOKKOS/atom_vec_charge_kokkos.cpp @@ -79,7 +79,7 @@ void AtomVecChargeKokkos::grow(int n) memoryKK->grow_kokkos(atomKK->k_q,atomKK->q,nmax,"atom:q"); - grow_reset(); + grow_pointers(); atomKK->sync(Host,ALL_MASK); if (atom->nextra_grow) @@ -91,7 +91,7 @@ void AtomVecChargeKokkos::grow(int n) reset local array ptrs ------------------------------------------------------------------------- */ -void AtomVecChargeKokkos::grow_reset() +void AtomVecChargeKokkos::grow_pointers() { tag = atomKK->tag; d_tag = atomKK->k_tag.d_view; diff --git a/src/KOKKOS/atom_vec_charge_kokkos.h b/src/KOKKOS/atom_vec_charge_kokkos.h index e9ff70bbe103c7c1df5d99387ee92a8530bcd79b..39d641b8441ba13d6debef47f78d7e80b8aed72d 100644 --- a/src/KOKKOS/atom_vec_charge_kokkos.h +++ b/src/KOKKOS/atom_vec_charge_kokkos.h @@ -53,7 +53,7 @@ class AtomVecChargeKokkos : public AtomVecKokkos { int write_data_hybrid(FILE *, double *); bigint memory_usage(); - void grow_reset(); + void grow_pointers(); int pack_border_kokkos(int n, DAT::tdual_int_2d k_sendlist, DAT::tdual_xfloat_2d buf,int iswap, int pbc_flag, int *pbc, ExecutionSpace space); diff --git a/src/KOKKOS/atom_vec_dpd_kokkos.cpp b/src/KOKKOS/atom_vec_dpd_kokkos.cpp index dfc122b1ef931a43a464ef244a4389a3184d24ab..5319744c22405304c6e44254d56aa40034faaf70 100644 --- a/src/KOKKOS/atom_vec_dpd_kokkos.cpp +++ b/src/KOKKOS/atom_vec_dpd_kokkos.cpp @@ -93,7 +93,7 @@ void AtomVecDPDKokkos::grow(int n) for (int iextra = 0; iextra < atom->nextra_grow; iextra++) modify->fix[atom->extra_grow[iextra]]->grow_arrays(nmax); - grow_reset(); + grow_pointers(); atomKK->sync(Host,ALL_MASK); } @@ -101,7 +101,7 @@ void AtomVecDPDKokkos::grow(int n) reset local array ptrs ------------------------------------------------------------------------- */ -void AtomVecDPDKokkos::grow_reset() +void AtomVecDPDKokkos::grow_pointers() { tag = atomKK->tag; d_tag = atomKK->k_tag.d_view; diff --git a/src/KOKKOS/atom_vec_dpd_kokkos.h b/src/KOKKOS/atom_vec_dpd_kokkos.h index cec1b82357eab95cf9a34595b5f398793cb69f4d..e969a28cb82f85ad04f7f4cc89be13c984a6c782 100644 --- a/src/KOKKOS/atom_vec_dpd_kokkos.h +++ b/src/KOKKOS/atom_vec_dpd_kokkos.h @@ -61,7 +61,7 @@ class AtomVecDPDKokkos : public AtomVecKokkos { int write_data_hybrid(FILE *, double *); bigint memory_usage(); - void grow_reset(); + void grow_pointers(); int pack_comm_kokkos(const int &n, const DAT::tdual_int_2d &k_sendlist, const int & iswap, const DAT::tdual_xfloat_2d &buf, diff --git a/src/KOKKOS/atom_vec_full_kokkos.cpp b/src/KOKKOS/atom_vec_full_kokkos.cpp index b5239867fb7af7c1ff247f045b7567ca1eae02ec..5d5833af07079545dcc960b42375fa62019124db 100644 --- a/src/KOKKOS/atom_vec_full_kokkos.cpp +++ b/src/KOKKOS/atom_vec_full_kokkos.cpp @@ -123,7 +123,7 @@ void AtomVecFullKokkos::grow(int n) memoryKK->grow_kokkos(atomKK->k_improper_atom4,atomKK->improper_atom4,nmax, atomKK->improper_per_atom,"atom:improper_atom4"); - grow_reset(); + grow_pointers(); atomKK->sync(Host,ALL_MASK); if (atom->nextra_grow) @@ -135,7 +135,7 @@ void AtomVecFullKokkos::grow(int n) reset local array ptrs ------------------------------------------------------------------------- */ -void AtomVecFullKokkos::grow_reset() +void AtomVecFullKokkos::grow_pointers() { tag = atomKK->tag; d_tag = atomKK->k_tag.d_view; diff --git a/src/KOKKOS/atom_vec_full_kokkos.h b/src/KOKKOS/atom_vec_full_kokkos.h index 33760a8b5fc88fcfab56e892f9c2848cd228043b..a2d4fa9cf4efc6d864ed618d6ff947e8452afdac 100644 --- a/src/KOKKOS/atom_vec_full_kokkos.h +++ b/src/KOKKOS/atom_vec_full_kokkos.h @@ -52,7 +52,7 @@ class AtomVecFullKokkos : public AtomVecKokkos { int write_data_hybrid(FILE *, double *); bigint memory_usage(); - void grow_reset(); + void grow_pointers(); int pack_border_kokkos(int n, DAT::tdual_int_2d k_sendlist, DAT::tdual_xfloat_2d buf,int iswap, int pbc_flag, int *pbc, ExecutionSpace space); diff --git a/src/KOKKOS/atom_vec_hybrid_kokkos.cpp b/src/KOKKOS/atom_vec_hybrid_kokkos.cpp index 40303051b27f18850dc10ecc734e7e3de48d56a4..8f8a0c8c00955403aa7c7a1add09222d04790d52 100644 --- a/src/KOKKOS/atom_vec_hybrid_kokkos.cpp +++ b/src/KOKKOS/atom_vec_hybrid_kokkos.cpp @@ -163,7 +163,7 @@ void AtomVecHybridKokkos::grow(int n) // for sub-styles, do this in case // multiple sub-style reallocs of same array occurred - grow_reset(); + grow_pointers(); if (atom->nextra_grow) for (int iextra = 0; iextra < atom->nextra_grow; iextra++) @@ -174,7 +174,7 @@ void AtomVecHybridKokkos::grow(int n) reset local array ptrs ------------------------------------------------------------------------- */ -void AtomVecHybridKokkos::grow_reset() +void AtomVecHybridKokkos::grow_pointers() { tag = atomKK->tag; d_tag = atomKK->k_tag.d_view; @@ -216,7 +216,7 @@ void AtomVecHybridKokkos::grow_reset() d_angmom = atomKK->k_angmom.d_view; h_angmom = atomKK->k_angmom.h_view; - for (int k = 0; k < nstyles; k++) styles[k]->grow_reset(); + for (int k = 0; k < nstyles; k++) styles[k]->grow_pointers(); } /* ---------------------------------------------------------------------- diff --git a/src/KOKKOS/atom_vec_hybrid_kokkos.h b/src/KOKKOS/atom_vec_hybrid_kokkos.h index 4cfb186b175d95f856895e3bf5da53fb2b6c302b..02f9044d735bd52ffa8a691f0ce468fc18e3e815 100644 --- a/src/KOKKOS/atom_vec_hybrid_kokkos.h +++ b/src/KOKKOS/atom_vec_hybrid_kokkos.h @@ -36,7 +36,7 @@ class AtomVecHybridKokkos : public AtomVecKokkos { void process_args(int, char **); void init(); void grow(int); - void grow_reset(); + void grow_pointers(); void copy(int, int, int); void clear_bonus(); void force_clear(int, size_t); diff --git a/src/KOKKOS/atom_vec_kokkos.cpp b/src/KOKKOS/atom_vec_kokkos.cpp index 7d5df175441aae6106b626c587808ff68f996493..b0fca4e316637cc67f8556ebd3edd2b13732bb8f 100644 --- a/src/KOKKOS/atom_vec_kokkos.cpp +++ b/src/KOKKOS/atom_vec_kokkos.cpp @@ -16,6 +16,7 @@ #include "comm_kokkos.h" #include "domain.h" #include "atom_masks.h" +#include "utils.h" using namespace LAMMPS_NS; @@ -992,3 +993,49 @@ void AtomVecKokkos::unpack_reverse(int n, int *list, double *buf) if(n > 0) modified(Host,F_MASK); } + +/* ---------------------------------------------------------------------- + * unpack one line from Velocities section of data file + * ------------------------------------------------------------------------- */ + +void AtomVecKokkos::data_vel(int m, char **values) +{ + double **v = atom->v; + v[m][0] = utils::numeric(FLERR,values[0],true,lmp); + v[m][1] = utils::numeric(FLERR,values[1],true,lmp); + v[m][2] = utils::numeric(FLERR,values[2],true,lmp); + + modified(Host,V_MASK); +} + +/* ---------------------------------------------------------------------- + * pack velocity info for data file + * ------------------------------------------------------------------------- */ + +void AtomVecKokkos::pack_vel(double **buf) +{ + double **v = atom->v; + tagint *tag = atom->tag; + int nlocal = atom->nlocal; + + sync(Host,V_MASK|TAG_MASK); + + for (int i = 0; i < nlocal; i++) { + buf[i][0] = ubuf(tag[i]).d; + buf[i][1] = v[i][0]; + buf[i][2] = v[i][1]; + buf[i][3] = v[i][2]; + } +} + +/* ---------------------------------------------------------------------- + * write velocity info to data file + * ------------------------------------------------------------------------- */ + +void AtomVecKokkos::write_vel(FILE *fp, int n, double **buf) +{ + for (int i = 0; i < n; i++) + fprintf(fp,TAGINT_FORMAT " %-1.16e %-1.16e %-1.16e\n", + (tagint) ubuf(buf[i][0]).i,buf[i][1],buf[i][2],buf[i][3]); +} + diff --git a/src/KOKKOS/atom_vec_kokkos.h b/src/KOKKOS/atom_vec_kokkos.h index 0474a2380aea57850d14d8cb211f3c2df5b257d1..b93fb42e753fe9dd20ac961bbc232a40fdca7c05 100644 --- a/src/KOKKOS/atom_vec_kokkos.h +++ b/src/KOKKOS/atom_vec_kokkos.h @@ -41,6 +41,9 @@ class AtomVecKokkos : public AtomVec { virtual void unpack_comm_vel(int, int, double *); virtual int pack_reverse(int, int, double *); virtual void unpack_reverse(int, int *, double *); + virtual void data_vel(int, char **); + virtual void pack_vel(double **); + virtual void write_vel(FILE *, int, double **); virtual void sync(ExecutionSpace space, unsigned int mask) = 0; virtual void modified(ExecutionSpace space, unsigned int mask) = 0; @@ -153,15 +156,7 @@ class AtomVecKokkos : public AtomVec { buffer = Kokkos::kokkos_realloc(buffer,src.span()); buffer_size = src.span(); } - return mirror_type( buffer , - src.extent(0) , - src.extent(1) , - src.extent(2) , - src.extent(3) , - src.extent(4) , - src.extent(5) , - src.extent(6) , - src.extent(7) ); + return mirror_type(buffer, src.d_view.layout()); } template @@ -179,15 +174,8 @@ class AtomVecKokkos : public AtomVec { buffer = Kokkos::kokkos_realloc(buffer,src.span()*sizeof(typename ViewType::value_type)); buffer_size = src.span(); } - mirror_type tmp_view( (typename ViewType::value_type*)buffer , - src.extent(0) , - src.extent(1) , - src.extent(2) , - src.extent(3) , - src.extent(4) , - src.extent(5) , - src.extent(6) , - src.extent(7) ); + mirror_type tmp_view((typename ViewType::value_type*)buffer, src.d_view.layout()); + if(space == Device) { Kokkos::deep_copy(LMPHostType(),tmp_view,src.h_view), Kokkos::deep_copy(LMPHostType(),src.d_view,tmp_view); diff --git a/src/KOKKOS/atom_vec_molecular_kokkos.cpp b/src/KOKKOS/atom_vec_molecular_kokkos.cpp index fec0183971346a72a0ca179263432eff7289b2b3..7832d6f9b0eb43dcbd907120f2b72ffaf414721d 100644 --- a/src/KOKKOS/atom_vec_molecular_kokkos.cpp +++ b/src/KOKKOS/atom_vec_molecular_kokkos.cpp @@ -121,7 +121,7 @@ void AtomVecMolecularKokkos::grow(int n) memoryKK->grow_kokkos(atomKK->k_improper_atom4,atomKK->improper_atom4,nmax, atomKK->improper_per_atom,"atom:improper_atom4"); - grow_reset(); + grow_pointers(); atomKK->sync(Host,ALL_MASK); if (atom->nextra_grow) @@ -133,7 +133,7 @@ void AtomVecMolecularKokkos::grow(int n) reset local array ptrs ------------------------------------------------------------------------- */ -void AtomVecMolecularKokkos::grow_reset() +void AtomVecMolecularKokkos::grow_pointers() { tag = atomKK->tag; d_tag = atomKK->k_tag.d_view; diff --git a/src/KOKKOS/atom_vec_molecular_kokkos.h b/src/KOKKOS/atom_vec_molecular_kokkos.h index 06444510e05f65361a28257b4e52ab3c82ddf5e2..cede4f42a80d649c0af398789c3cfe5987a27153 100644 --- a/src/KOKKOS/atom_vec_molecular_kokkos.h +++ b/src/KOKKOS/atom_vec_molecular_kokkos.h @@ -58,7 +58,7 @@ class AtomVecMolecularKokkos : public AtomVecKokkos { int write_data_hybrid(FILE *, double *); bigint memory_usage(); - void grow_reset(); + void grow_pointers(); int pack_comm_kokkos(const int &n, const DAT::tdual_int_2d &k_sendlist, const int & iswap, const DAT::tdual_xfloat_2d &buf, diff --git a/src/KOKKOS/atom_vec_sphere_kokkos.cpp b/src/KOKKOS/atom_vec_sphere_kokkos.cpp index 27a4bd0274a1cb338fa49679566daecfbfb6dba1..b1099d0fa6e4c5e61211f71dfda060e6bf627fff 100644 --- a/src/KOKKOS/atom_vec_sphere_kokkos.cpp +++ b/src/KOKKOS/atom_vec_sphere_kokkos.cpp @@ -119,7 +119,7 @@ void AtomVecSphereKokkos::grow(int n) for (int iextra = 0; iextra < atom->nextra_grow; iextra++) modify->fix[atom->extra_grow[iextra]]->grow_arrays(nmax); - grow_reset(); + grow_pointers(); atomKK->sync(Host,ALL_MASK); } @@ -127,7 +127,7 @@ void AtomVecSphereKokkos::grow(int n) reset local array ptrs ------------------------------------------------------------------------- */ -void AtomVecSphereKokkos::grow_reset() +void AtomVecSphereKokkos::grow_pointers() { tag = atomKK->tag; d_tag = atomKK->k_tag.d_view; diff --git a/src/KOKKOS/atom_vec_sphere_kokkos.h b/src/KOKKOS/atom_vec_sphere_kokkos.h index 28c8a3c8f6ef039b959855ee59306066bb15ea36..3f6d34e8b29f63e3d3852475374c4756dfafa4e1 100644 --- a/src/KOKKOS/atom_vec_sphere_kokkos.h +++ b/src/KOKKOS/atom_vec_sphere_kokkos.h @@ -33,7 +33,7 @@ class AtomVecSphereKokkos : public AtomVecKokkos { ~AtomVecSphereKokkos() {} void init(); void grow(int); - void grow_reset(); + void grow_pointers(); void copy(int, int, int); int pack_comm(int, int *, double *, int, int *); int pack_comm_vel(int, int *, double *, int, int *); diff --git a/src/KOKKOS/bond_harmonic_kokkos.cpp b/src/KOKKOS/bond_harmonic_kokkos.cpp index e0d75dcd9ace7749ebe5322579901524cd73e932..4e2a5aaa05b138963307657129b302acdbb6e50d 100644 --- a/src/KOKKOS/bond_harmonic_kokkos.cpp +++ b/src/KOKKOS/bond_harmonic_kokkos.cpp @@ -69,14 +69,14 @@ void BondHarmonicKokkos::compute(int eflag_in, int vflag_in) //if(k_eatom.extent(0)destroy_kokkos(k_eatom,eatom); memoryKK->create_kokkos(k_eatom,eatom,maxeatom,"improper:eatom"); - d_eatom = k_eatom.template view(); + d_eatom = k_eatom.template view(); //} } if (vflag_atom) { //if(k_vatom.extent(0)destroy_kokkos(k_vatom,vatom); memoryKK->create_kokkos(k_vatom,vatom,maxvatom,"improper:vatom"); - d_vatom = k_vatom.template view(); + d_vatom = k_vatom.template view(); //} } @@ -204,8 +204,8 @@ void BondHarmonicKokkos::coeff(int narg, char **arg) BondHarmonic::coeff(narg, arg); int n = atom->nbondtypes; - Kokkos::DualView k_k("BondHarmonic::k",n+1); - Kokkos::DualView k_r0("BondHarmonic::r0",n+1); + typename AT::tdual_ffloat_1d k_k("BondHarmonic::k",n+1); + typename AT::tdual_ffloat_1d k_r0("BondHarmonic::r0",n+1); d_k = k_k.template view(); d_r0 = k_r0.template view(); @@ -231,8 +231,8 @@ void BondHarmonicKokkos::read_restart(FILE *fp) BondHarmonic::read_restart(fp); int n = atom->nbondtypes; - Kokkos::DualView k_k("BondHarmonic::k",n+1); - Kokkos::DualView k_r0("BondHarmonic::r0",n+1); + typename AT::tdual_ffloat_1d k_k("BondHarmonic::k",n+1); + typename AT::tdual_ffloat_1d k_r0("BondHarmonic::r0",n+1); d_k = k_k.template view(); d_r0 = k_r0.template view(); diff --git a/src/KOKKOS/bond_harmonic_kokkos.h b/src/KOKKOS/bond_harmonic_kokkos.h index b5bee7e909f133056d947faf0b240347da1f4a4f..cf716ec843b8eabfd5dc78e2e240b715a2f86673 100644 --- a/src/KOKKOS/bond_harmonic_kokkos.h +++ b/src/KOKKOS/bond_harmonic_kokkos.h @@ -66,10 +66,11 @@ class BondHarmonicKokkos : public BondHarmonic { typename Kokkos::View::value,Kokkos::MemoryTraits > f; typename AT::t_int_2d bondlist; - Kokkos::DualView k_eatom; - Kokkos::DualView k_vatom; - Kokkos::View::value,Kokkos::MemoryTraits > d_eatom; - Kokkos::View::value,Kokkos::MemoryTraits > d_vatom; + typedef typename KKDevice::value KKDeviceType; + Kokkos::DualView k_eatom; + Kokkos::DualView k_vatom; + Kokkos::View > d_eatom; + Kokkos::View > d_vatom; int nlocal,newton_bond; int eflag,vflag; diff --git a/src/KOKKOS/compute_coord_atom_kokkos.cpp b/src/KOKKOS/compute_coord_atom_kokkos.cpp new file mode 100644 index 0000000000000000000000000000000000000000..d91bf5a82a1c36179a41f6e823997a69d70e1d13 --- /dev/null +++ b/src/KOKKOS/compute_coord_atom_kokkos.cpp @@ -0,0 +1,249 @@ +/* ---------------------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + http://lammps.sandia.gov, Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + Copyright (2003) Sandia Corporation. Under the terms of Contract + DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains + certain rights in this software. This software is distributed under + the GNU General Public License. + + See the README file in the top-level LAMMPS directory. +------------------------------------------------------------------------- */ + +#include "compute_coord_atom_kokkos.h" +#include +#include +#include "compute_orientorder_atom_kokkos.h" +#include "atom_kokkos.h" +#include "update.h" +#include "modify.h" +#include "neighbor_kokkos.h" +#include "neigh_list.h" +#include "neigh_request.h" +#include "force.h" +#include "pair.h" +#include "comm.h" +#include "group.h" +#include "memory_kokkos.h" +#include "error.h" +#include "atom_masks.h" + +using namespace LAMMPS_NS; + +#define INVOKED_PERATOM 8 + +/* ---------------------------------------------------------------------- */ + +template +ComputeCoordAtomKokkos::ComputeCoordAtomKokkos(LAMMPS *lmp, int narg, char **arg) : + ComputeCoordAtom(lmp, narg, arg) +{ + kokkosable = 1; + atomKK = (AtomKokkos *) atom; + execution_space = ExecutionSpaceFromDevice::space; + datamask_read = EMPTY_MASK; + datamask_modify = EMPTY_MASK; + + d_typelo = typename AT::t_int_1d("coord/atom:typelo",ncol); + d_typehi = typename AT::t_int_1d("coord/atom:typehi",ncol); + + auto h_typelo = Kokkos::create_mirror_view(d_typelo); + auto h_typehi = Kokkos::create_mirror_view(d_typehi); + + for (int i = 0; i < ncol; i++) { + h_typelo(i) = typelo[i]; + h_typehi(i) = typehi[i]; + } + + Kokkos::deep_copy(d_typelo,h_typelo); + Kokkos::deep_copy(d_typehi,h_typehi); +} + +/* ---------------------------------------------------------------------- */ + +template +ComputeCoordAtomKokkos::~ComputeCoordAtomKokkos() +{ + if (copymode) return; + + memoryKK->destroy_kokkos(k_cvec,cvec); + memoryKK->destroy_kokkos(k_carray,carray); +} + +/* ---------------------------------------------------------------------- */ + +template +void ComputeCoordAtomKokkos::init() +{ + ComputeCoordAtom::init(); + + // need an occasional full neighbor list + + // irequest = neigh request made by parent class + + int irequest = neighbor->nrequest - 1; + + neighbor->requests[irequest]-> + kokkos_host = std::is_same::value && + !std::is_same::value; + neighbor->requests[irequest]-> + kokkos_device = std::is_same::value; +} + +/* ---------------------------------------------------------------------- */ + +template +void ComputeCoordAtomKokkos::compute_peratom() +{ + invoked_peratom = update->ntimestep; + + // grow coordination array if necessary + + if (atom->nmax > nmax) { + if (ncol == 1) { + memoryKK->destroy_kokkos(k_cvec,cvec); + nmax = atom->nmax; + memoryKK->create_kokkos(k_cvec,cvec,nmax,"coord/atom:cvec"); + vector_atom = cvec; + d_cvec = k_cvec.template view(); + } else { + memoryKK->destroy_kokkos(k_carray,carray); + nmax = atom->nmax; + memoryKK->create_kokkos(k_carray,carray,nmax,ncol,"coord/atom:carray"); + array_atom = carray; + d_carray = k_carray.template view(); + } + } + + if (cstyle == ORIENT) { + if (!(c_orientorder->invoked_flag & INVOKED_PERATOM)) { + c_orientorder->compute_peratom(); + c_orientorder->invoked_flag |= INVOKED_PERATOM; + } + nqlist = c_orientorder->nqlist; + normv = c_orientorder->array_atom; + comm->forward_comm_compute(this); + + if (!c_orientorder->kokkosable) + error->all(FLERR,"Must use compute orientorder/atom/kk with compute coord/atom/kk"); + + if (c_orientorder->execution_space == Host) { + ComputeOrientOrderAtomKokkos* c_orientorder_kk; + c_orientorder_kk = (ComputeOrientOrderAtomKokkos*) c_orientorder; + c_orientorder_kk->k_qnarray.modify(); + c_orientorder_kk->k_qnarray.sync(); + d_normv = c_orientorder_kk->k_qnarray.view(); + } else { + ComputeOrientOrderAtomKokkos* c_orientorder_kk; + c_orientorder_kk = (ComputeOrientOrderAtomKokkos*) c_orientorder; + c_orientorder_kk->k_qnarray.modify(); + c_orientorder_kk->k_qnarray.sync(); + d_normv = c_orientorder_kk->k_qnarray.view(); + } + } + + // invoke full neighbor list (will copy or build if necessary) + + neighbor->build_one(list); + + inum = list->inum; + NeighListKokkos* k_list = static_cast*>(list); + d_numneigh = k_list->d_numneigh; + d_neighbors = k_list->d_neighbors; + d_ilist = k_list->d_ilist; + + // compute coordination number(s) for each atom in group + // use full neighbor list to count atoms less than cutoff + + atomKK->sync(execution_space,X_MASK|TYPE_MASK|MASK_MASK); + x = atomKK->k_x.view(); + type = atomKK->k_type.view(); + mask = atomKK->k_mask.view(); + + copymode = 1; + if (cstyle == CUTOFF) { + if (ncol == 1) { + typename Kokkos::RangePolicy > policy(0,inum); + Kokkos::parallel_for("ComputeCoordAtom",policy,*this); + } else { + typename Kokkos::RangePolicy > policy(0,inum); + Kokkos::parallel_for("ComputeCoordAtom",policy,*this); + } + } else if (cstyle == ORIENT) { + typename Kokkos::RangePolicy > policy(0,inum); + Kokkos::parallel_for("ComputeCoordAtom",policy,*this); + } + copymode = 0; + + if (ncol == 1 || cstyle == ORIENT) { + k_cvec.modify(); + k_cvec.sync(); + } else { + k_carray.modify(); + k_carray.sync(); + } + +} + +template +template +KOKKOS_INLINE_FUNCTION +void ComputeCoordAtomKokkos::operator()(TagComputeCoordAtom, const int &ii) const +{ + const int i = d_ilist[ii]; + if (NCOL == 1 || CSTYLE == ORIENT) + d_cvec(i) = 0.0; + else + for (int m = 0; m < ncol; m++) d_carray(i,m) = 0.0; + if (mask[i] & groupbit) { + const X_FLOAT xtmp = x(i,0); + const X_FLOAT ytmp = x(i,1); + const X_FLOAT ztmp = x(i,2); + const int jnum = d_numneigh[i]; + + int n = 0; + for (int jj = 0; jj < jnum; jj++) { + int j = d_neighbors(i,jj); + j &= NEIGHMASK; + + if (NCOL == 1) + if (!(mask[j] & jgroupbit)) continue; + + const int jtype = type[j]; + const F_FLOAT delx = x(j,0) - xtmp; + const F_FLOAT dely = x(j,1) - ytmp; + const F_FLOAT delz = x(j,2) - ztmp; + const F_FLOAT rsq = delx*delx + dely*dely + delz*delz; + if (rsq < cutsq) { + if (CSTYLE == CUTOFF) { + if (NCOL == 1) { + if (jtype >= d_typelo[0] && jtype <= d_typehi[0]) + n++; + } else { + for (int m = 0; m < ncol; m++) + if (jtype >= d_typelo[m] && jtype <= d_typehi[m]) + d_carray(i,m) += 1.0; + } + } else if (CSTYLE == ORIENT) { + double dot_product = 0.0; + for (int m=0; m < 2*(2*l+1); m++) { + dot_product += d_normv(i,nqlist+m)*d_normv(j,nqlist+m); + } + if (dot_product > threshold) n++; + } + } + } + + if (NCOL == 1 || CSTYLE == ORIENT) + d_cvec[i] = n; + } + +} + +namespace LAMMPS_NS { +template class ComputeCoordAtomKokkos; +#ifdef KOKKOS_ENABLE_CUDA +template class ComputeCoordAtomKokkos; +#endif +} diff --git a/src/KOKKOS/compute_coord_atom_kokkos.h b/src/KOKKOS/compute_coord_atom_kokkos.h new file mode 100644 index 0000000000000000000000000000000000000000..f292994a186171d5f799fb82575f53003a4a666e --- /dev/null +++ b/src/KOKKOS/compute_coord_atom_kokkos.h @@ -0,0 +1,78 @@ +/* -*- c++ -*- ---------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + http://lammps.sandia.gov, Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + Copyright (2003) Sandia Corporation. Under the terms of Contract + DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains + certain rights in this software. This software is distributed under + the GNU General Public License. + + See the README file in the top-level LAMMPS directory. +------------------------------------------------------------------------- */ + +#ifdef COMPUTE_CLASS + +ComputeStyle(coord/atom/kk,ComputeCoordAtomKokkos) +ComputeStyle(coord/atom/kk/device,ComputeCoordAtomKokkos) +ComputeStyle(coord/atom/kk/host,ComputeCoordAtomKokkos) + +#else + +#ifndef LMP_COMPUTE_COORD_ATOM_KOKKOS_H +#define LMP_COMPUTE_COORD_ATOM_KOKKOS_H + +#include "compute_coord_atom.h" +#include "kokkos_type.h" + +namespace LAMMPS_NS { + +template +struct TagComputeCoordAtom{}; + +template +class ComputeCoordAtomKokkos : public ComputeCoordAtom { + public: + typedef DeviceType device_type; + typedef ArrayTypes AT; + + ComputeCoordAtomKokkos(class LAMMPS *, int, char **); + virtual ~ComputeCoordAtomKokkos(); + void init(); + void compute_peratom(); + enum {NONE,CUTOFF,ORIENT}; + + template + KOKKOS_INLINE_FUNCTION + void operator()(TagComputeCoordAtom, const int&) const; + + private: + int inum; + + typename AT::t_x_array_randomread x; + typename ArrayTypes::t_int_1d_randomread type; + typename ArrayTypes::t_int_1d mask; + + typename AT::t_neighbors_2d d_neighbors; + typename AT::t_int_1d_randomread d_ilist; + typename AT::t_int_1d_randomread d_numneigh; + + typename AT::t_int_1d d_typelo; + typename AT::t_int_1d d_typehi; + + DAT::tdual_float_1d k_cvec; + typename AT::t_float_1d d_cvec; + DAT::tdual_float_2d k_carray; + typename AT::t_float_2d d_carray; + + typename AT::t_float_2d d_normv; +}; + +} + +#endif +#endif + +/* ERROR/WARNING messages: + +*/ diff --git a/src/KOKKOS/compute_orientorder_atom_kokkos.cpp b/src/KOKKOS/compute_orientorder_atom_kokkos.cpp new file mode 100644 index 0000000000000000000000000000000000000000..d00dc3e238218fce6a9b08a74c2fac7bab760125 --- /dev/null +++ b/src/KOKKOS/compute_orientorder_atom_kokkos.cpp @@ -0,0 +1,739 @@ +/* ---------------------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + http://lammps.sandia.gov, Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + Copyright (2003) Sandia Corporation. Under the terms of Contract + DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains + certain rights in this software. This software is distributed under + the GNU General Public License. + + See the README file in the top-level LAMMPS directory. +------------------------------------------------------------------------- */ + +/* ---------------------------------------------------------------------- + Contributing author: Stan Moore (SNL) +------------------------------------------------------------------------- */ + +#include "compute_orientorder_atom_kokkos.h" +#include +#include +#include +#include "atom_kokkos.h" +#include "update.h" +#include "modify.h" +#include "neighbor_kokkos.h" +#include "neigh_list.h" +#include "neigh_request.h" +#include "force.h" +#include "pair.h" +#include "comm.h" +#include "memory_kokkos.h" +#include "error.h" +#include "math_const.h" +#include "atom_masks.h" +#include "kokkos.h" + +using namespace LAMMPS_NS; +using namespace MathConst; +using namespace std; + +#ifdef DBL_EPSILON + #define MY_EPSILON (10.0*DBL_EPSILON) +#else + #define MY_EPSILON (10.0*2.220446049250313e-16) +#endif + +#define QEPSILON 1.0e-6 + +/* ---------------------------------------------------------------------- */ + +template +ComputeOrientOrderAtomKokkos::ComputeOrientOrderAtomKokkos(LAMMPS *lmp, int narg, char **arg) : + ComputeOrientOrderAtom(lmp, narg, arg) +{ + kokkosable = 1; + atomKK = (AtomKokkos *) atom; + execution_space = ExecutionSpaceFromDevice::space; + datamask_read = EMPTY_MASK; + datamask_modify = EMPTY_MASK; + + host_flag = (execution_space == Host); +} + +/* ---------------------------------------------------------------------- */ + +template +ComputeOrientOrderAtomKokkos::~ComputeOrientOrderAtomKokkos() +{ + if (copymode) return; + + memoryKK->destroy_kokkos(k_qnarray,qnarray); +} + +/* ---------------------------------------------------------------------- */ + +template +void ComputeOrientOrderAtomKokkos::init() +{ + ComputeOrientOrderAtom::init(); + + d_qlist = t_sna_1i("orientorder/atom:qlist",nqlist); + auto h_qlist = Kokkos::create_mirror_view(d_qlist); + for (int i = 0; i < nqlist; i++) + h_qlist(i) = qlist[i]; + Kokkos::deep_copy(d_qlist,h_qlist); + + // need an occasional full neighbor list + + // irequest = neigh request made by parent class + + int irequest = neighbor->nrequest - 1; + + neighbor->requests[irequest]-> + kokkos_host = std::is_same::value && + !std::is_same::value; + neighbor->requests[irequest]-> + kokkos_device = std::is_same::value; +} + +/* ---------------------------------------------------------------------- */ + +template +struct FindMaxNumNeighs { + typedef DeviceType device_type; + NeighListKokkos k_list; + + FindMaxNumNeighs(NeighListKokkos* nl): k_list(*nl) {} + ~FindMaxNumNeighs() {k_list.copymode = 1;} + + KOKKOS_INLINE_FUNCTION + void operator() (const int& ii, int& maxneigh) const { + const int i = k_list.d_ilist[ii]; + const int num_neighs = k_list.d_numneigh[i]; + if (maxneigh < num_neighs) maxneigh = num_neighs; + } +}; + +/* ---------------------------------------------------------------------- */ + +template +void ComputeOrientOrderAtomKokkos::compute_peratom() +{ + invoked_peratom = update->ntimestep; + + // invoke full neighbor list (will copy or build if necessary) + + neighbor->build_one(list); + + inum = list->inum; + NeighListKokkos* k_list = static_cast*>(list); + d_numneigh = k_list->d_numneigh; + d_neighbors = k_list->d_neighbors; + d_ilist = k_list->d_ilist; + + // grow order parameter array if necessary + + if (atom->nmax > nmax) { + memoryKK->destroy_kokkos(k_qnarray,qnarray); + nmax = atom->nmax; + memoryKK->create_kokkos(k_qnarray,qnarray,nmax,ncol,"orientorder/atom:qnarray"); + array_atom = qnarray; + d_qnarray = k_qnarray.template view(); + } + + chunk_size = MIN(chunksize,inum); // "chunksize" variable is set by user + chunk_offset = 0; + + if (chunk_size > d_ncount.extent(0)) { + d_qnm = t_sna_3c("orientorder/atom:qnm",chunk_size,nqlist,2*qmax+1); + d_ncount = t_sna_1i("orientorder/atom:ncount",chunk_size); + } + + copymode = 1; + + // insure distsq and nearest arrays are long enough + + maxneigh = 0; + Kokkos::parallel_reduce("ComputeOrientOrderAtomKokkos::find_max_neighs",inum, FindMaxNumNeighs(k_list), Kokkos::Max(maxneigh)); + + if (chunk_size > d_distsq.extent(0) || maxneigh > d_distsq.extent(1)) { + d_distsq = t_sna_2d_lr("orientorder/atom:distsq",chunk_size,maxneigh); + d_nearest = t_sna_2i_lr("orientorder/atom:nearest",chunk_size,maxneigh); + d_rlist = t_sna_3d_lr("orientorder/atom:rlist",chunk_size,maxneigh,3); + + d_distsq_um = d_distsq; + d_rlist_um = d_rlist; + d_nearest_um = d_nearest; + } + + // compute order parameter for each atom in group + // use full neighbor list to count atoms less than cutoff + + atomKK->sync(execution_space,X_MASK|MASK_MASK); + x = atomKK->k_x.view(); + mask = atomKK->k_mask.view(); + + Kokkos::deep_copy(d_qnm,{0.0,0.0}); + + int vector_length_default = 1; + int team_size_default = 1; + if (!host_flag) + team_size_default = 32;//max_neighs; + + while (chunk_offset < inum) { // chunk up loop to prevent running out of memory + + if (chunk_size > inum - chunk_offset) + chunk_size = inum - chunk_offset; + + //Neigh + { + int vector_length = vector_length_default; + int team_size = team_size_default; + check_team_size_for(chunk_size,team_size,vector_length); + typename Kokkos::TeamPolicy policy_neigh(chunk_size,team_size,vector_length); + Kokkos::parallel_for("ComputeOrientOrderAtomNeigh",policy_neigh,*this); + } + + //Select3 + typename Kokkos::RangePolicy policy_select3(0,chunk_size); + Kokkos::parallel_for("ComputeOrientOrderAtomSelect3",policy_select3,*this); + + //BOOP1 + { + int vector_length = vector_length_default; + int team_size = team_size_default; + check_team_size_for(chunk_size,team_size,vector_length); + typename Kokkos::TeamPolicy policy_boop1(((chunk_size+team_size-1)/team_size)*maxneigh,team_size,vector_length); + Kokkos::parallel_for("ComputeOrientOrderAtomBOOP1",policy_boop1,*this); + } + + //BOOP2 + typename Kokkos::RangePolicy policy_boop2(0,chunk_size); + Kokkos::parallel_for("ComputeOrientOrderAtomBOOP2",policy_boop2,*this); + + chunk_offset += chunk_size; + } // end while + + copymode = 0; + + k_qnarray.template modify(); + k_qnarray.template sync(); +} + +/* ---------------------------------------------------------------------- */ + +template +KOKKOS_INLINE_FUNCTION +void ComputeOrientOrderAtomKokkos::operator() (TagComputeOrientOrderAtomNeigh,const typename Kokkos::TeamPolicy::member_type& team) const +{ + const int ii = team.league_rank(); + const int i = d_ilist[ii + chunk_offset]; + if (mask[i] & groupbit) { + const X_FLOAT xtmp = x(i,0); + const X_FLOAT ytmp = x(i,1); + const X_FLOAT ztmp = x(i,2); + const int jnum = d_numneigh[i]; + + // loop over list of all neighbors within force cutoff + // distsq[] = distance sq to each + // rlist[] = distance vector to each + // nearest[] = atom indices of neighbors + + int ncount = 0; + Kokkos::parallel_reduce(Kokkos::TeamThreadRange(team,jnum), + [&] (const int jj, int& count) { + Kokkos::single(Kokkos::PerThread(team), [&] (){ + int j = d_neighbors(i,jj); + j &= NEIGHMASK; + const F_FLOAT delx = x(j,0) - xtmp; + const F_FLOAT dely = x(j,1) - ytmp; + const F_FLOAT delz = x(j,2) - ztmp; + const F_FLOAT rsq = delx*delx + dely*dely + delz*delz; + if (rsq < cutsq) + count++; + }); + },ncount); + + d_ncount(ii) = ncount; + + if (team.team_rank() == 0) + Kokkos::parallel_scan(Kokkos::ThreadVectorRange(team,jnum), + [&] (const int jj, int& offset, bool final) { + int j = d_neighbors(i,jj); + j &= NEIGHMASK; + const F_FLOAT delx = x(j,0) - xtmp; + const F_FLOAT dely = x(j,1) - ytmp; + const F_FLOAT delz = x(j,2) - ztmp; + const F_FLOAT rsq = delx*delx + dely*dely + delz*delz; + if (rsq < cutsq) { + if (final) { + d_distsq(ii,offset) = rsq; + d_rlist(ii,offset,0) = delx; + d_rlist(ii,offset,1) = dely; + d_rlist(ii,offset,2) = delz; + d_nearest(ii,offset) = j; + } + offset++; + } + }); + } +} + +template +KOKKOS_INLINE_FUNCTION +void ComputeOrientOrderAtomKokkos::operator() (TagComputeOrientOrderAtomSelect3,const int& ii) const { + + const int i = d_ilist[ii + chunk_offset]; + const int ncount = d_ncount(ii); + + // if not nnn neighbors, order parameter = 0; + + if ((ncount == 0) || (ncount < nnn)) { + for (int jj = 0; jj < ncol; jj++) + d_qnarray(i,jj) = 0.0; + return; + } + + // if nnn > 0, use only nearest nnn neighbors + + if (nnn > 0) { + select3(nnn, ncount, ii); + d_ncount(ii) = nnn; + } +} + +template +KOKKOS_INLINE_FUNCTION +void ComputeOrientOrderAtomKokkos::operator() (TagComputeOrientOrderAtomBOOP1,const typename Kokkos::TeamPolicy::member_type& team) const { + + // Extract the atom number + int ii = team.team_rank() + team.team_size() * (team.league_rank() % + ((chunk_size+team.team_size()-1)/team.team_size())); + if (ii >= chunk_size) return; + + // Extract the neighbor number + const int jj = team.league_rank() / ((chunk_size+team.team_size()-1)/team.team_size()); + const int ncount = d_ncount(ii); + if (jj >= ncount) return; + + // if not nnn neighbors, order parameter = 0; + + if ((ncount == 0) || (ncount < nnn)) + return; + + calc_boop1(ncount, ii, jj); +} + +template +KOKKOS_INLINE_FUNCTION +void ComputeOrientOrderAtomKokkos::operator() (TagComputeOrientOrderAtomBOOP2,const int& ii) const { + const int ncount = d_ncount(ii); + calc_boop2(ncount, ii); +} + + +/* ---------------------------------------------------------------------- + select3 routine from Numerical Recipes (slightly modified) + find k smallest values in array of length n + sort auxiliary arrays at same time +------------------------------------------------------------------------- */ + +// Use no-op do while to create single statement + +#define SWAP(view,i,j) do { \ + tmp = view(i); view(i) = view(j); view(j) = tmp; \ + } while(0) + +#define ISWAP(view,i,j) do { \ + itmp = view(i); view(i) = view(j); view(j) = itmp; \ + } while(0) + +#define SWAP3(view,i,j) do { \ + tmp = view(i,0); view(i,0) = view(j,0); view(j,0) = tmp; \ + tmp = view(i,1); view(i,1) = view(j,1); view(j,1) = tmp; \ + tmp = view(i,2); view(i,2) = view(j,2); view(j,2) = tmp; \ + } while(0) + +/* ---------------------------------------------------------------------- */ + +template +KOKKOS_INLINE_FUNCTION +void ComputeOrientOrderAtomKokkos::select3(int k, int n, int ii) const +{ + int i,ir,j,l,mid,ia,itmp; + double a,tmp,a3[3]; + + auto arr = Kokkos::subview(d_distsq_um, ii, Kokkos::ALL); + auto iarr = Kokkos::subview(d_nearest_um, ii, Kokkos::ALL); + auto arr3 = Kokkos::subview(d_rlist_um, ii, Kokkos::ALL, Kokkos::ALL); + + l = 0; + ir = n-1; + for (;;) { + if (ir <= l+1) { + if (ir == l+1 && arr[ir] < arr[l]) { + SWAP(arr,l,ir); + ISWAP(iarr,l,ir); + SWAP3(arr3,l,ir); + } + return; + } else { + mid=((l+ir+2) >> 1) - 1; + SWAP(arr,mid,l+1); + ISWAP(iarr,mid,l+1); + SWAP3(arr3,mid,l+1); + if (arr[l] > arr[ir]) { + SWAP(arr,l,ir); + ISWAP(iarr,l,ir); + SWAP3(arr3,l,ir); + } + if (arr[l+1] > arr[ir]) { + SWAP(arr,l+1,ir); + ISWAP(iarr,l+1,ir); + SWAP3(arr3,l+1,ir); + } + if (arr[l] > arr[l+1]) { + SWAP(arr,l,l+1); + ISWAP(iarr,l,l+1); + SWAP3(arr3,l,l+1); + } + i = l+1; + j = ir; + a = arr[l+1]; + ia = iarr[l+1]; + a3[0] = arr3(l+1,0); + a3[1] = arr3(l+1,1); + a3[2] = arr3(l+1,2); + for (;;) { + do i++; while (arr[i] < a); + do j--; while (arr[j] > a); + if (j < i) break; + SWAP(arr,i,j); + ISWAP(iarr,i,j); + SWAP3(arr3,i,j); + } + arr[l+1] = arr[j]; + arr[j] = a; + iarr[l+1] = iarr[j]; + iarr[j] = ia; + arr3(l+1,0) = arr3(j,0); + arr3(l+1,1) = arr3(j,1); + arr3(l+1,2) = arr3(j,2); + arr3(j,0) = a3[0]; + arr3(j,1) = a3[1]; + arr3(j,2) = a3[2]; + if (j+1 >= k) ir = j-1; + if (j+1 <= k) l = i; + } + } +} + +/* ---------------------------------------------------------------------- + calculate the bond orientational order parameters +------------------------------------------------------------------------- */ + +template +KOKKOS_INLINE_FUNCTION +void ComputeOrientOrderAtomKokkos::calc_boop1(int ncount, int ii, int ineigh) const +{ + const int i = d_ilist[ii + chunk_offset]; + + const double r0 = d_rlist(ii,ineigh,0); + const double r1 = d_rlist(ii,ineigh,1); + const double r2 = d_rlist(ii,ineigh,2); + const double rmag = sqrt(r0*r0 + r1*r1 + r2*r2); + if(rmag <= MY_EPSILON) { + return; + } + + const double costheta = r2 / rmag; + SNAcomplex expphi = {r0,r1}; + const double rxymag = sqrt(expphi.re*expphi.re+expphi.im*expphi.im); + if(rxymag <= MY_EPSILON) { + expphi.re = 1.0; + expphi.im = 0.0; + } else { + const double rxymaginv = 1.0/rxymag; + expphi.re *= rxymaginv; + expphi.im *= rxymaginv; + } + + for (int il = 0; il < nqlist; il++) { + const int l = d_qlist[il]; + + //d_qnm(ii,il,l).re += polar_prefactor(l, 0, costheta); + const double polar_pf = polar_prefactor(l, 0, costheta); + Kokkos::atomic_add(&(d_qnm(ii,il,l).re), polar_pf); + SNAcomplex expphim = {expphi.re,expphi.im}; + for(int m = 1; m <= +l; m++) { + const double prefactor = polar_prefactor(l, m, costheta); + SNAcomplex c = {prefactor * expphim.re, prefactor * expphim.im}; + //d_qnm(ii,il,m+l).re += c.re; + //d_qnm(ii,il,m+l).im += c.im; + Kokkos::atomic_add(&(d_qnm(ii,il,m+l).re), c.re); + Kokkos::atomic_add(&(d_qnm(ii,il,m+l).im), c.im); + if(m & 1) { + //d_qnm(ii,il,-m+l).re -= c.re; + //d_qnm(ii,il,-m+l).im += c.im; + Kokkos::atomic_add(&(d_qnm(ii,il,-m+l).re), -c.re); + Kokkos::atomic_add(&(d_qnm(ii,il,-m+l).im), c.im); + } else { + //d_qnm(ii,il,-m+l).re += c.re; + //d_qnm(ii,il,-m+l).im -= c.im; + Kokkos::atomic_add(&(d_qnm(ii,il,-m+l).re), c.re); + Kokkos::atomic_add(&(d_qnm(ii,il,-m+l).im), -c.im); + } + SNAcomplex tmp; + tmp.re = expphim.re*expphi.re - expphim.im*expphi.im; + tmp.im = expphim.re*expphi.im + expphim.im*expphi.re; + expphim.re = tmp.re; + expphim.im = tmp.im; + } + } +} + +/* ---------------------------------------------------------------------- + calculate the bond orientational order parameters +------------------------------------------------------------------------- */ + +template +KOKKOS_INLINE_FUNCTION +void ComputeOrientOrderAtomKokkos::calc_boop2(int ncount, int ii) const +{ + const int i = d_ilist[ii + chunk_offset]; + + // convert sums to averages + + double facn = 1.0 / ncount; + for (int il = 0; il < nqlist; il++) { + int l = d_qlist[il]; + for(int m = 0; m < 2*l+1; m++) { + d_qnm(ii,il,m).re *= facn; + d_qnm(ii,il,m).im *= facn; + } + } + + // calculate Q_l + // NOTE: optional W_l_hat and components of Q_qlcomp use these stored Q_l values + + int jj = 0; + for (int il = 0; il < nqlist; il++) { + int l = d_qlist[il]; + double qnormfac = sqrt(MY_4PI/(2*l+1)); + double qm_sum = 0.0; + for(int m = 0; m < 2*l+1; m++) + qm_sum += d_qnm(ii,il,m).re*d_qnm(ii,il,m).re + d_qnm(ii,il,m).im*d_qnm(ii,il,m).im; + d_qnarray(i,jj++) = qnormfac * sqrt(qm_sum); + } + + // calculate W_l + + if (wlflag) { + int idxcg_count = 0; + for (int il = 0; il < nqlist; il++) { + int l = d_qlist[il]; + double wlsum = 0.0; + for(int m1 = 0; m1 < 2*l+1; m1++) { + for(int m2 = MAX(0,l-m1); m2 < MIN(2*l+1,3*l-m1+1); m2++) { + int m = m1 + m2 - l; + SNAcomplex qm1qm2; + qm1qm2.re = d_qnm(ii,il,m1).re*d_qnm(ii,il,m2).re - d_qnm(ii,il,m1).im*d_qnm(ii,il,m2).im; + qm1qm2.im = d_qnm(ii,il,m1).re*d_qnm(ii,il,m2).im + d_qnm(ii,il,m1).im*d_qnm(ii,il,m2).re; + wlsum += (qm1qm2.re*d_qnm(ii,il,m).re + qm1qm2.im*d_qnm(ii,il,m).im)*d_cglist[idxcg_count]; + idxcg_count++; + } + } + d_qnarray(i,jj++) = wlsum/sqrt(2.0*l+1.0); + } + } + + // calculate W_l_hat + + if (wlhatflag) { + int idxcg_count = 0; + for (int il = 0; il < nqlist; il++) { + int l = d_qlist[il]; + double wlsum = 0.0; + for(int m1 = 0; m1 < 2*l+1; m1++) { + for(int m2 = MAX(0,l-m1); m2 < MIN(2*l+1,3*l-m1+1); m2++) { + const int m = m1 + m2 - l; + SNAcomplex qm1qm2; + qm1qm2.re = d_qnm(ii,il,m1).re*d_qnm(ii,il,m2).re - d_qnm(ii,il,m1).im*d_qnm(ii,il,m2).im; + qm1qm2.im = d_qnm(ii,il,m1).re*d_qnm(ii,il,m2).im + d_qnm(ii,il,m1).im*d_qnm(ii,il,m2).re; + wlsum += (qm1qm2.re*d_qnm(ii,il,m).re + qm1qm2.im*d_qnm(ii,il,m).im)*d_cglist[idxcg_count]; + idxcg_count++; + } + } + // Whats = [w/(q/np.sqrt(np.pi * 4 / (2 * l + 1)))**3 if abs(q) > 1.0e-6 else 0.0 for l,q,w in zip(range(1,max_l+1),Qs,Ws)] + if (d_qnarray(i,il) < QEPSILON) + d_qnarray(i,jj++) = 0.0; + else { + const double qnormfac = sqrt(MY_4PI/(2*l+1)); + const double qnfac = qnormfac/d_qnarray(i,il); + d_qnarray(i,jj++) = wlsum/sqrt(2.0*l+1.0)*(qnfac*qnfac*qnfac); + } + } + } + + // Calculate components of Q_l, for l=qlcomp + + if (qlcompflag) { + const int il = iqlcomp; + const int l = qlcomp; + if (d_qnarray(i,il) < QEPSILON) + for(int m = 0; m < 2*l+1; m++) { + d_qnarray(i,jj++) = 0.0; + d_qnarray(i,jj++) = 0.0; + } + else { + const double qnormfac = sqrt(MY_4PI/(2*l+1)); + const double qnfac = qnormfac/d_qnarray(i,il); + for(int m = 0; m < 2*l+1; m++) { + d_qnarray(i,jj++) = d_qnm(ii,il,m).re * qnfac; + d_qnarray(i,jj++) = d_qnm(ii,il,m).im * qnfac; + } + } + } + +} + +/* ---------------------------------------------------------------------- + polar prefactor for spherical harmonic Y_l^m, where + Y_l^m (theta, phi) = prefactor(l, m, cos(theta)) * exp(i*m*phi) +------------------------------------------------------------------------- */ + +template +KOKKOS_INLINE_FUNCTION +double ComputeOrientOrderAtomKokkos::polar_prefactor(int l, int m, double costheta) const +{ + const int mabs = abs(m); + + double prefactor = 1.0; + for (int i=l-mabs+1; i < l+mabs+1; ++i) + prefactor *= static_cast(i); + + prefactor = sqrt(static_cast(2*l+1)/(MY_4PI*prefactor)) + * associated_legendre(l,mabs,costheta); + + if ((m < 0) && (m % 2)) prefactor = -prefactor; + + return prefactor; +} + +/* ---------------------------------------------------------------------- + associated legendre polynomial +------------------------------------------------------------------------- */ + +template +KOKKOS_INLINE_FUNCTION +double ComputeOrientOrderAtomKokkos::associated_legendre(int l, int m, double x) const +{ + if (l < m) return 0.0; + + double p(1.0), pm1(0.0), pm2(0.0); + + if (m != 0) { + const double sqx = sqrt(1.0-x*x); + for (int i=1; i < m+1; ++i) + p *= static_cast(2*i-1) * sqx; + } + + for (int i=m+1; i < l+1; ++i) { + pm2 = pm1; + pm1 = p; + p = (static_cast(2*i-1)*x*pm1 + - static_cast(i+m-1)*pm2) / static_cast(i-m); + } + + return p; +} + +/* ---------------------------------------------------------------------- + assign Clebsch-Gordan coefficients + using the quasi-binomial formula VMK 8.2.1(3) + specialized for case j1=j2=j=l +------------------------------------------------------------------------- */ + +template +void ComputeOrientOrderAtomKokkos::init_clebsch_gordan() +{ + double sum,dcg,sfaccg, sfac1, sfac2; + int m, aa2, bb2, cc2; + int ifac, idxcg_count; + + idxcg_count = 0; + for (int il = 0; il < nqlist; il++) { + int l = qlist[il]; + for(int m1 = 0; m1 < 2*l+1; m1++) + for(int m2 = MAX(0,l-m1); m2 < MIN(2*l+1,3*l-m1+1); m2++) + idxcg_count++; + } + idxcg_max = idxcg_count; + d_cglist = t_sna_1d("orientorder/atom:d_cglist",idxcg_max); + auto h_cglist = Kokkos::create_mirror_view(d_cglist); + + idxcg_count = 0; + for (int il = 0; il < nqlist; il++) { + int l = qlist[il]; + for(int m1 = 0; m1 < 2*l+1; m1++) { + aa2 = m1 - l; + for(int m2 = MAX(0,l-m1); m2 < MIN(2*l+1,3*l-m1+1); m2++) { + bb2 = m2 - l; + m = aa2 + bb2 + l; + + sum = 0.0; + for (int z = MAX(0, MAX(-aa2, bb2)); + z <= MIN(l, MIN(l - aa2, l + bb2)); z++) { + ifac = z % 2 ? -1 : 1; + sum += ifac / + (factorial(z) * + factorial(l - z) * + factorial(l - aa2 - z) * + factorial(l + bb2 - z) * + factorial(aa2 + z) * + factorial(-bb2 + z)); + } + + cc2 = m - l; + sfaccg = sqrt(factorial(l + aa2) * + factorial(l - aa2) * + factorial(l + bb2) * + factorial(l - bb2) * + factorial(l + cc2) * + factorial(l - cc2) * + (2*l + 1)); + + sfac1 = factorial(3*l + 1); + sfac2 = factorial(l); + dcg = sqrt(sfac2*sfac2*sfac2 / sfac1); + + h_cglist[idxcg_count] = sum * dcg * sfaccg; + idxcg_count++; + } + } + } + Kokkos::deep_copy(d_cglist,h_cglist); +} + +/* ---------------------------------------------------------------------- + check max team size +------------------------------------------------------------------------- */ + +template +template +void ComputeOrientOrderAtomKokkos::check_team_size_for(int inum, int &team_size, int vector_length) { + int team_size_max; + + team_size_max = Kokkos::TeamPolicy(inum,Kokkos::AUTO).team_size_max(*this,Kokkos::ParallelForTag()); + + if(team_size*vector_length > team_size_max) + team_size = team_size_max/vector_length; +} + +namespace LAMMPS_NS { +template class ComputeOrientOrderAtomKokkos; +#ifdef KOKKOS_ENABLE_CUDA +template class ComputeOrientOrderAtomKokkos; +#endif +} diff --git a/src/KOKKOS/compute_orientorder_atom_kokkos.h b/src/KOKKOS/compute_orientorder_atom_kokkos.h new file mode 100644 index 0000000000000000000000000000000000000000..7d8005f89b42af0f028a43d5a002bd8a9466754d --- /dev/null +++ b/src/KOKKOS/compute_orientorder_atom_kokkos.h @@ -0,0 +1,140 @@ +/* -*- c++ -*- ---------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + http://lammps.sandia.gov, Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + Copyright (2003) Sandia Corporation. Under the terms of Contract + DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains + certain rights in this software. This software is distributed under + the GNU General Public License. + + See the README file in the top-level LAMMPS directory. +------------------------------------------------------------------------- */ + +#ifdef COMPUTE_CLASS + +ComputeStyle(orientorder/atom/kk,ComputeOrientOrderAtomKokkos) +ComputeStyle(orientorder/atom/kk/device,ComputeOrientOrderAtomKokkos) +ComputeStyle(orientorder/atom/kk/host,ComputeOrientOrderAtomKokkos) + +#else + +#ifndef LMP_COMPUTE_ORIENTORDER_ATOM_KOKKOS_H +#define LMP_COMPUTE_ORIENTORDER_ATOM_KOKKOS_H + +#include "compute_orientorder_atom.h" +#include "kokkos_type.h" + +namespace LAMMPS_NS { + +struct TagComputeOrientOrderAtomNeigh{}; +struct TagComputeOrientOrderAtomSelect3{}; +struct TagComputeOrientOrderAtomBOOP1{}; +struct TagComputeOrientOrderAtomBOOP2{}; + +template +class ComputeOrientOrderAtomKokkos : public ComputeOrientOrderAtom { + public: + typedef Kokkos::View t_sna_1i; + typedef Kokkos::View t_sna_1d; + typedef Kokkos::View > t_sna_1d_atomic; + typedef Kokkos::View t_sna_2i_lr; + typedef Kokkos::View > t_sna_2i_lr_um; + typedef Kokkos::View t_sna_2i; + typedef Kokkos::View t_sna_2d; + typedef Kokkos::View t_sna_2d_lr; + typedef Kokkos::DualView tdual_sna_2d_lr; + typedef Kokkos::View > t_sna_2d_lr_um; + typedef Kokkos::View t_sna_3d; + typedef Kokkos::View t_sna_3d_lr; + typedef Kokkos::View > t_sna_3d_lr_um; + typedef Kokkos::View t_sna_4d; + typedef Kokkos::View t_sna_3d3; + typedef Kokkos::View t_sna_5d; + + typedef Kokkos::View t_sna_1c; + typedef Kokkos::View > t_sna_1c_atomic; + typedef Kokkos::View t_sna_2c; + typedef Kokkos::View t_sna_2c_lr; + typedef Kokkos::View t_sna_3c; + typedef Kokkos::View t_sna_4c; + typedef Kokkos::View t_sna_3c3; + typedef Kokkos::View t_sna_5c; + + typedef DeviceType device_type; + typedef ArrayTypes AT; + typedef int value_type; + + ComputeOrientOrderAtomKokkos(class LAMMPS *, int, char **); + ~ComputeOrientOrderAtomKokkos(); + void init(); + void compute_peratom(); + t_sna_1i d_qlist; + + template + void check_team_size_for(int, int&, int); + + KOKKOS_INLINE_FUNCTION + void operator() (TagComputeOrientOrderAtomNeigh, const typename Kokkos::TeamPolicy::member_type& team) const; + + KOKKOS_INLINE_FUNCTION + void operator() (TagComputeOrientOrderAtomSelect3, const int& ii) const; + + KOKKOS_INLINE_FUNCTION + void operator() (TagComputeOrientOrderAtomBOOP1, const typename Kokkos::TeamPolicy::member_type& team) const; + + KOKKOS_INLINE_FUNCTION + void operator() (TagComputeOrientOrderAtomBOOP2, const int& ii) const; + + DAT::tdual_float_2d k_qnarray; + typename AT::t_float_2d d_qnarray; + + private: + int inum,chunk_size,chunk_offset; + int host_flag; + + typename AT::t_x_array_randomread x; + typename ArrayTypes::t_int_1d mask; + + typename AT::t_neighbors_2d d_neighbors; + typename AT::t_int_1d_randomread d_ilist; + typename AT::t_int_1d_randomread d_numneigh; + + t_sna_1i d_ncount; + t_sna_2d_lr d_distsq; + t_sna_2i_lr d_nearest; + t_sna_3d_lr d_rlist; + + t_sna_2d_lr_um d_distsq_um; + t_sna_2i_lr_um d_nearest_um; + t_sna_3d_lr_um d_rlist_um; + + t_sna_3c d_qnm; + + KOKKOS_INLINE_FUNCTION + void select3(int, int, int) const; + + KOKKOS_INLINE_FUNCTION + void calc_boop1(int, int, int) const; + + KOKKOS_INLINE_FUNCTION + void calc_boop2(int, int) const; + + KOKKOS_INLINE_FUNCTION + double polar_prefactor(int, int, double) const; + + KOKKOS_INLINE_FUNCTION + double associated_legendre(int, int, double) const; + + void init_clebsch_gordan(); + t_sna_1d d_cglist; // Clebsch-Gordan coeffs +}; + +} + +#endif +#endif + +/* ERROR/WARNING messages: + +*/ diff --git a/src/KOKKOS/compute_temp_kokkos.cpp b/src/KOKKOS/compute_temp_kokkos.cpp index a2fcf631259c94d3c30790b814a46980da7015ef..f5547d02002c57064b02807580ba80b393cb84a0 100644 --- a/src/KOKKOS/compute_temp_kokkos.cpp +++ b/src/KOKKOS/compute_temp_kokkos.cpp @@ -31,6 +31,7 @@ template ComputeTempKokkos::ComputeTempKokkos(LAMMPS *lmp, int narg, char **arg) : ComputeTemp(lmp, narg, arg) { + kokkosable = 1; atomKK = (AtomKokkos *) atom; execution_space = ExecutionSpaceFromDevice::space; diff --git a/src/KOKKOS/dihedral_charmm_kokkos.cpp b/src/KOKKOS/dihedral_charmm_kokkos.cpp index 06f25ee0a2d4be7e16f37c115bc66a23e5994dd7..64ab79c3053e8771d57ad864e5c809837ac61b62 100644 --- a/src/KOKKOS/dihedral_charmm_kokkos.cpp +++ b/src/KOKKOS/dihedral_charmm_kokkos.cpp @@ -28,6 +28,7 @@ #include "memory_kokkos.h" #include "error.h" #include "atom_masks.h" +#include "kokkos.h" using namespace LAMMPS_NS; using namespace MathConst; @@ -69,6 +70,9 @@ void DihedralCharmmKokkos::compute(int eflag_in, int vflag_in) eflag = eflag_in; vflag = vflag_in; + if (lmp->kokkos->neighflag == FULL) + error->all(FLERR,"Dihedral_style charmm/kk requires half neighbor list"); + ev_init(eflag,vflag,0); // insure pair->ev_tally() will use 1-4 virial contribution @@ -82,18 +86,18 @@ void DihedralCharmmKokkos::compute(int eflag_in, int vflag_in) //if(k_eatom.extent(0)destroy_kokkos(k_eatom,eatom); memoryKK->create_kokkos(k_eatom,eatom,maxeatom,"dihedral:eatom"); - d_eatom = k_eatom.template view(); - k_eatom_pair = Kokkos::DualView("dihedral:eatom_pair",maxeatom); - d_eatom_pair = k_eatom.template view(); + d_eatom = k_eatom.template view(); + k_eatom_pair = Kokkos::DualView("dihedral:eatom_pair",maxeatom); + d_eatom_pair = k_eatom_pair.template view(); //} } if (vflag_atom) { //if(k_vatom.extent(0)destroy_kokkos(k_vatom,vatom); memoryKK->create_kokkos(k_vatom,vatom,maxvatom,"dihedral:vatom"); - d_vatom = k_vatom.template view(); - k_vatom_pair = Kokkos::DualView("dihedral:vatom_pair",maxvatom); - d_vatom_pair = k_vatom.template view(); + d_vatom = k_vatom.template view(); + k_vatom_pair = Kokkos::DualView("dihedral:vatom_pair",maxvatom); + d_vatom_pair = k_vatom_pair.template view(); //} } @@ -424,12 +428,12 @@ void DihedralCharmmKokkos::coeff(int narg, char **arg) DihedralCharmm::coeff(narg, arg); int nd = atom->ndihedraltypes; - Kokkos::DualView k_k("DihedralCharmm::k",nd+1); - Kokkos::DualView k_multiplicity("DihedralCharmm::multiplicity",nd+1); - Kokkos::DualView k_shift("DihedralCharmm::shift",nd+1); - Kokkos::DualView k_cos_shift("DihedralCharmm::cos_shift",nd+1); - Kokkos::DualView k_sin_shift("DihedralCharmm::sin_shift",nd+1); - Kokkos::DualView k_weight("DihedralCharmm::weight",nd+1); + typename AT::tdual_ffloat_1d k_k("DihedralCharmm::k",nd+1); + typename AT::tdual_ffloat_1d k_multiplicity("DihedralCharmm::multiplicity",nd+1); + typename AT::tdual_ffloat_1d k_shift("DihedralCharmm::shift",nd+1); + typename AT::tdual_ffloat_1d k_cos_shift("DihedralCharmm::cos_shift",nd+1); + typename AT::tdual_ffloat_1d k_sin_shift("DihedralCharmm::sin_shift",nd+1); + typename AT::tdual_ffloat_1d k_weight("DihedralCharmm::weight",nd+1); d_k = k_k.template view(); d_multiplicity = k_multiplicity.template view(); @@ -473,10 +477,10 @@ void DihedralCharmmKokkos::init_style() DihedralCharmm::init_style(); int n = atom->ntypes; - Kokkos::DualView k_lj14_1("DihedralCharmm:lj14_1",n+1,n+1); - Kokkos::DualView k_lj14_2("DihedralCharmm:lj14_2",n+1,n+1); - Kokkos::DualView k_lj14_3("DihedralCharmm:lj14_3",n+1,n+1); - Kokkos::DualView k_lj14_4("DihedralCharmm:lj14_4",n+1,n+1); + DAT::tdual_ffloat_2d k_lj14_1("DihedralCharmm:lj14_1",n+1,n+1); + DAT::tdual_ffloat_2d k_lj14_2("DihedralCharmm:lj14_2",n+1,n+1); + DAT::tdual_ffloat_2d k_lj14_3("DihedralCharmm:lj14_3",n+1,n+1); + DAT::tdual_ffloat_2d k_lj14_4("DihedralCharmm:lj14_4",n+1,n+1); d_lj14_1 = k_lj14_1.template view(); d_lj14_2 = k_lj14_2.template view(); @@ -517,12 +521,12 @@ void DihedralCharmmKokkos::read_restart(FILE *fp) DihedralCharmm::read_restart(fp); int nd = atom->ndihedraltypes; - Kokkos::DualView k_k("DihedralCharmm::k",nd+1); - Kokkos::DualView k_multiplicity("DihedralCharmm::multiplicity",nd+1); - Kokkos::DualView k_shift("DihedralCharmm::shift",nd+1); - Kokkos::DualView k_cos_shift("DihedralCharmm::cos_shift",nd+1); - Kokkos::DualView k_sin_shift("DihedralCharmm::sin_shift",nd+1); - Kokkos::DualView k_weight("DihedralCharmm::weight",nd+1); + typename AT::tdual_ffloat_1d k_k("DihedralCharmm::k",nd+1); + typename AT::tdual_ffloat_1d k_multiplicity("DihedralCharmm::multiplicity",nd+1); + typename AT::tdual_ffloat_1d k_shift("DihedralCharmm::shift",nd+1); + typename AT::tdual_ffloat_1d k_cos_shift("DihedralCharmm::cos_shift",nd+1); + typename AT::tdual_ffloat_1d k_sin_shift("DihedralCharmm::sin_shift",nd+1); + typename AT::tdual_ffloat_1d k_weight("DihedralCharmm::weight",nd+1); d_k = k_k.template view(); d_multiplicity = k_multiplicity.template view(); diff --git a/src/KOKKOS/dihedral_charmm_kokkos.h b/src/KOKKOS/dihedral_charmm_kokkos.h index 21bb6fd2e12ee52372dfd1cb3dfb1abee257889d..828abd2be71b3c075c9c1953a5b5cc054a592e93 100644 --- a/src/KOKKOS/dihedral_charmm_kokkos.h +++ b/src/KOKKOS/dihedral_charmm_kokkos.h @@ -132,15 +132,16 @@ class DihedralCharmmKokkos : public DihedralCharmm { typename AT::t_f_array f; typename AT::t_int_2d dihedrallist; - Kokkos::DualView k_eatom; - Kokkos::DualView k_vatom; - Kokkos::View::value,Kokkos::MemoryTraits > d_eatom; - Kokkos::View::value,Kokkos::MemoryTraits > d_vatom; - - Kokkos::DualView k_eatom_pair; - Kokkos::DualView k_vatom_pair; - Kokkos::View::value,Kokkos::MemoryTraits > d_eatom_pair; - Kokkos::View::value,Kokkos::MemoryTraits > d_vatom_pair; + typedef typename KKDevice::value KKDeviceType; + Kokkos::DualView k_eatom; + Kokkos::DualView k_vatom; + Kokkos::View > d_eatom; + Kokkos::View > d_vatom; + + Kokkos::DualView k_eatom_pair; + Kokkos::DualView k_vatom_pair; + Kokkos::View > d_eatom_pair; + Kokkos::View > d_vatom_pair; int nlocal,newton_bond; int eflag,vflag; diff --git a/src/KOKKOS/fft3d_kokkos.cpp b/src/KOKKOS/fft3d_kokkos.cpp index fc88136e8cdebc01d8272dacbce1c5d1c9178d04..04dd343af62e182ea0346640200d44c2eb317fb7 100644 --- a/src/KOKKOS/fft3d_kokkos.cpp +++ b/src/KOKKOS/fft3d_kokkos.cpp @@ -38,7 +38,8 @@ FFT3dKokkos::FFT3dKokkos(LAMMPS *lmp, MPI_Comm comm, int nfast, int int in_klo, int in_khi, int out_ilo, int out_ihi, int out_jlo, int out_jhi, int out_klo, int out_khi, - int scaled, int permute, int *nbuf, int usecollective) : + int scaled, int permute, int *nbuf, int usecollective, + int usecuda_aware) : Pointers(lmp) { int nthreads = lmp->kokkos->nthreads; @@ -70,7 +71,7 @@ FFT3dKokkos::FFT3dKokkos(LAMMPS *lmp, MPI_Comm comm, int nfast, int plan = fft_3d_create_plan_kokkos(comm,nfast,nmid,nslow, in_ilo,in_ihi,in_jlo,in_jhi,in_klo,in_khi, out_ilo,out_ihi,out_jlo,out_jhi,out_klo,out_khi, - scaled,permute,nbuf,usecollective,nthreads); + scaled,permute,nbuf,usecollective,nthreads,usecuda_aware); if (plan == NULL) error->one(FLERR,"Could not create 3d FFT plan"); } @@ -368,6 +369,7 @@ void FFT3dKokkos::fft_3d_kokkos(typename FFT_AT::t_FFT_DATA_1d d_in, 2 = permute twice = slow->fast, fast->mid, mid->slow nbuf returns size of internal storage buffers used by FFT usecollective use collective MPI operations for remapping data + usecuda_aware use CUDA-Aware MPI or not ------------------------------------------------------------------------- */ template @@ -378,7 +380,7 @@ struct fft_plan_3d_kokkos* FFT3dKokkos::fft_3d_create_pl int out_ilo, int out_ihi, int out_jlo, int out_jhi, int out_klo, int out_khi, int scaled, int permute, int *nbuf, int usecollective, - int nthreads) + int nthreads, int usecuda_aware) { struct fft_plan_3d_kokkos *plan; int me,nprocs; @@ -435,7 +437,8 @@ struct fft_plan_3d_kokkos* FFT3dKokkos::fft_3d_create_pl plan->pre_plan = remapKK->remap_3d_create_plan_kokkos(comm,in_ilo,in_ihi,in_jlo,in_jhi,in_klo,in_khi, first_ilo,first_ihi,first_jlo,first_jhi, - first_klo,first_khi,2,0,0,FFT_PRECISION,0); + first_klo,first_khi,2,0,0,FFT_PRECISION, + usecollective,usecuda_aware); if (plan->pre_plan == NULL) return NULL; } @@ -460,7 +463,7 @@ struct fft_plan_3d_kokkos* FFT3dKokkos::fft_3d_create_pl first_klo,first_khi, second_ilo,second_ihi,second_jlo,second_jhi, second_klo,second_khi,2,1,0,FFT_PRECISION, - usecollective); + usecollective,usecuda_aware); if (plan->mid1_plan == NULL) return NULL; // 1d FFTs along mid axis @@ -500,7 +503,8 @@ struct fft_plan_3d_kokkos* FFT3dKokkos::fft_3d_create_pl second_jlo,second_jhi,second_klo,second_khi, second_ilo,second_ihi, third_jlo,third_jhi,third_klo,third_khi, - third_ilo,third_ihi,2,1,0,FFT_PRECISION,usecollective); + third_ilo,third_ihi,2,1,0,FFT_PRECISION, + usecollective,usecuda_aware); if (plan->mid2_plan == NULL) return NULL; // 1d FFTs along slow axis @@ -527,7 +531,8 @@ struct fft_plan_3d_kokkos* FFT3dKokkos::fft_3d_create_pl third_klo,third_khi,third_ilo,third_ihi, third_jlo,third_jhi, out_klo,out_khi,out_ilo,out_ihi, - out_jlo,out_jhi,2,(permute+1)%3,0,FFT_PRECISION,0); + out_jlo,out_jhi,2,(permute+1)%3,0,FFT_PRECISION, + usecollective,usecuda_aware); if (plan->post_plan == NULL) return NULL; } diff --git a/src/KOKKOS/fft3d_kokkos.h b/src/KOKKOS/fft3d_kokkos.h index ffdd2a38ce009b14c19def18ff9203f9cdba4853..192d2cb7dad04a0cf297cb0e107f4afd3065304e 100644 --- a/src/KOKKOS/fft3d_kokkos.h +++ b/src/KOKKOS/fft3d_kokkos.h @@ -77,7 +77,7 @@ class FFT3dKokkos : protected Pointers { FFT3dKokkos(class LAMMPS *, MPI_Comm, int,int,int,int,int,int,int,int,int,int,int,int,int,int,int, - int,int,int *,int); + int,int,int *,int,int); ~FFT3dKokkos(); void compute(typename FFT_AT::t_FFT_SCALAR_1d, typename FFT_AT::t_FFT_SCALAR_1d, int); void timing1d(typename FFT_AT::t_FFT_SCALAR_1d, int, int); @@ -95,7 +95,7 @@ class FFT3dKokkos : protected Pointers { struct fft_plan_3d_kokkos *fft_3d_create_plan_kokkos(MPI_Comm, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int, - int, int, int *, int, int); + int, int, int *, int, int, int); void fft_3d_destroy_plan_kokkos(struct fft_plan_3d_kokkos *); diff --git a/src/KOKKOS/fix_neigh_history_kokkos.cpp b/src/KOKKOS/fix_neigh_history_kokkos.cpp index 3cb927c06a748ede279e363e46ca07cafbf07a1b..8c33f6f2c3aa045c814777be5a834ece6df47a55 100644 --- a/src/KOKKOS/fix_neigh_history_kokkos.cpp +++ b/src/KOKKOS/fix_neigh_history_kokkos.cpp @@ -18,6 +18,7 @@ #include "neigh_list_kokkos.h" #include "pair_kokkos.h" #include "comm.h" +#include "modify.h" using namespace LAMMPS_NS; @@ -69,6 +70,17 @@ void FixNeighHistoryKokkos::init() { if (atomKK->tag_enable == 0) error->all(FLERR,"Neighbor history requires atoms have IDs"); + + // this fix must come before any fix which migrates atoms in its pre_exchange() + // b/c this fix's pre_exchange() creates per-atom data structure + // that data must be current for atom migration to carry it along + + for (int i = 0; i < modify->nfix; i++) { + if (modify->fix[i] == this) break; + if (modify->fix[i]->pre_exchange_migrate) + error->all(FLERR,"Fix neigh_history comes after a fix which " + "migrates atoms in pre_exchange"); + } } /* ---------------------------------------------------------------------- */ diff --git a/src/KOKKOS/fix_qeq_reax_kokkos.cpp b/src/KOKKOS/fix_qeq_reax_kokkos.cpp index a0f4f3ec28ac4df9dccd673de7d5675a9b4973c4..10d33ead459e22c4709a78b0b8cc89bdcb32e769 100644 --- a/src/KOKKOS/fix_qeq_reax_kokkos.cpp +++ b/src/KOKKOS/fix_qeq_reax_kokkos.cpp @@ -39,8 +39,6 @@ using namespace FixConst; #define SMALL 0.0001 #define EV_TO_KCAL_PER_MOL 14.4 -#define TEAMSIZE 128 - /* ---------------------------------------------------------------------- */ template @@ -726,7 +724,9 @@ void FixQEqReaxKokkos::cg_solve1() const int inum = list->inum; F_FLOAT tmp, sig_old, b_norm; - const int teamsize = TEAMSIZE; + int teamsize; + if (execution_space == Host) teamsize = 1; + else teamsize = 128; // sparse_matvec( &H, x, q ); FixQEqReaxKokkosSparse12Functor sparse12_functor(this); @@ -861,7 +861,9 @@ void FixQEqReaxKokkos::cg_solve2() const int inum = list->inum; F_FLOAT tmp, sig_old, b_norm; - const int teamsize = TEAMSIZE; + int teamsize; + if (execution_space == Host) teamsize = 1; + else teamsize = 128; // sparse_matvec( &H, x, q ); FixQEqReaxKokkosSparse32Functor sparse32_functor(this); diff --git a/src/KOKKOS/fix_rx_kokkos.cpp b/src/KOKKOS/fix_rx_kokkos.cpp index 9271cf1b884f14ab15a0ff6e16f67c2ad3638899..2ec3e3a77ce6c83dcdc2a0246fd3a0529363c3fa 100644 --- a/src/KOKKOS/fix_rx_kokkos.cpp +++ b/src/KOKKOS/fix_rx_kokkos.cpp @@ -27,6 +27,7 @@ #include "comm.h" #include "domain.h" #include "kokkos.h" +#include "utils.h" #include // DBL_EPSILON @@ -128,7 +129,7 @@ void FixRxKokkos::init() bool eos_flag = false; for (int i = 0; i < modify->nfix; i++) - if (strncmp(modify->fix[i]->style,"eos/table/rx",3) == 0) eos_flag = true; + if (utils::strmatch(modify->fix[i]->style,"^eos/table/rx")) eos_flag = true; if(!eos_flag) error->all(FLERR,"fix rx requires fix eos/table/rx to be specified"); if (update_kinetics_data) diff --git a/src/KOKKOS/improper_harmonic_kokkos.cpp b/src/KOKKOS/improper_harmonic_kokkos.cpp index 6a32e8af4786af595c42cb4438222649ea65986a..6f2969722aff7d04316f382cfc004b5f757be999 100644 --- a/src/KOKKOS/improper_harmonic_kokkos.cpp +++ b/src/KOKKOS/improper_harmonic_kokkos.cpp @@ -73,14 +73,14 @@ void ImproperHarmonicKokkos::compute(int eflag_in, int vflag_in) //if(k_eatom.extent(0)destroy_kokkos(k_eatom,eatom); memoryKK->create_kokkos(k_eatom,eatom,maxeatom,"improper:eatom"); - d_eatom = k_eatom.template view(); + d_eatom = k_eatom.template view(); //} } if (vflag_atom) { //if(k_vatom.extent(0)destroy_kokkos(k_vatom,vatom); memoryKK->create_kokkos(k_vatom,vatom,maxvatom,"improper:vatom"); - d_vatom = k_vatom.template view(); + d_vatom = k_vatom.template view(); //} } diff --git a/src/KOKKOS/improper_harmonic_kokkos.h b/src/KOKKOS/improper_harmonic_kokkos.h index fb44081928f194f149ae8c186d87d3c246b83cea..e143e65adf488a110667e1249a04d94d82e9b0eb 100644 --- a/src/KOKKOS/improper_harmonic_kokkos.h +++ b/src/KOKKOS/improper_harmonic_kokkos.h @@ -63,14 +63,15 @@ class ImproperHarmonicKokkos : public ImproperHarmonic { class NeighborKokkos *neighborKK; + typedef typename KKDevice::value KKDeviceType; typename AT::t_x_array_randomread x; - typename Kokkos::View::value,Kokkos::MemoryTraits > f; + typename Kokkos::View > f; typename AT::t_int_2d improperlist; - Kokkos::DualView k_eatom; - Kokkos::DualView k_vatom; - Kokkos::View::value,Kokkos::MemoryTraits > d_eatom; - Kokkos::View::value,Kokkos::MemoryTraits > d_vatom; + Kokkos::DualView k_eatom; + Kokkos::DualView k_vatom; + Kokkos::View > d_eatom; + Kokkos::View > d_vatom; int nlocal,newton_bond; int eflag,vflag; diff --git a/src/KOKKOS/kokkos.cpp b/src/KOKKOS/kokkos.cpp index 8f60f3526d353a40681178ef14d011d430a0567f..f54df5cb76e597d453450d395985454241579cbb 100644 --- a/src/KOKKOS/kokkos.cpp +++ b/src/KOKKOS/kokkos.cpp @@ -306,7 +306,7 @@ void KokkosLMP::accelerator(int narg, char **arg) neighflag = HALFTHREAD; else neighflag = HALF; - } else if (strcmp(arg[iarg+1],"n2") == 0) neighflag = N2; + } else error->all(FLERR,"Illegal package kokkos command"); if (!neighflag_qeq_set) neighflag_qeq = neighflag; iarg += 2; @@ -318,7 +318,7 @@ void KokkosLMP::accelerator(int narg, char **arg) neighflag_qeq = HALFTHREAD; else neighflag_qeq = HALF; - } else if (strcmp(arg[iarg+1],"n2") == 0) neighflag_qeq = N2; + } else error->all(FLERR,"Illegal package kokkos command"); neighflag_qeq_set = 1; iarg += 2; diff --git a/src/KOKKOS/kokkos_type.h b/src/KOKKOS/kokkos_type.h index b1d17b45c35aa3dce04d079b993fca9a4afdb6bf..796f4612a42f219640eb5e65bfa5b0bedc414b14 100644 --- a/src/KOKKOS/kokkos_type.h +++ b/src/KOKKOS/kokkos_type.h @@ -22,7 +22,7 @@ #include #include -enum{FULL=1u,HALFTHREAD=2u,HALF=4u,N2=8u}; +enum{FULL=1u,HALFTHREAD=2u,HALF=4u}; #if defined(KOKKOS_ENABLE_CXX11) #undef ISFINITE @@ -1029,6 +1029,59 @@ struct params_lj_coul { F_FLOAT cut_ljsq,cut_coulsq,lj1,lj2,lj3,lj4,offset; }; +// Pair SNAP + +typedef double SNAreal; + +//typedef struct { SNAreal re, im; } SNAcomplex; +template +struct alignas(2*sizeof(real)) SNAComplex +{ + real re,im; + + KOKKOS_FORCEINLINE_FUNCTION SNAComplex() = default; + + KOKKOS_FORCEINLINE_FUNCTION SNAComplex(real re) + : re(re), im(static_cast(0.)) { ; } + + KOKKOS_FORCEINLINE_FUNCTION SNAComplex(real re, real im) + : re(re), im(im) { ; } + + KOKKOS_FORCEINLINE_FUNCTION SNAComplex(const SNAComplex& other) + : re(other.re), im(other.im) { ; } + + KOKKOS_FORCEINLINE_FUNCTION SNAComplex& operator=(const SNAComplex& other) { + re = other.re; im = other.im; + return *this; + } + + KOKKOS_FORCEINLINE_FUNCTION SNAComplex(SNAComplex&& other) + : re(other.re), im(other.im) { ; } + + KOKKOS_FORCEINLINE_FUNCTION SNAComplex& operator=(SNAComplex&& other) { + re = other.re; im = other.im; + return *this; + } + + KOKKOS_FORCEINLINE_FUNCTION SNAComplex operator+(SNAComplex const& other) { + return SNAComplex(re + other.re, im + other.im); + } + + KOKKOS_FORCEINLINE_FUNCTION SNAComplex& operator+=(SNAComplex const& other) { + re += other.re; im += other.im; + return *this; + } + +}; + +template +KOKKOS_FORCEINLINE_FUNCTION SNAComplex operator*(const real& r, const SNAComplex& self) { + return SNAComplex(r*self.re, r*self.im); +} + +typedef SNAComplex SNAcomplex; + + #if defined(KOKKOS_ENABLE_CXX11) #undef ISFINITE #define ISFINITE(x) std::isfinite(x) diff --git a/src/KOKKOS/min_cg_kokkos.cpp b/src/KOKKOS/min_cg_kokkos.cpp index 47a4513bc0d7f32de4b62e7b2374c46dc1601b2c..23954705ef63b528fa32afcdd813c08b2b8072c0 100644 --- a/src/KOKKOS/min_cg_kokkos.cpp +++ b/src/KOKKOS/min_cg_kokkos.cpp @@ -19,6 +19,7 @@ #include "timer.h" #include "atom_kokkos.h" #include "atom_masks.h" +#include "error.h" #include "fix_minimize_kokkos.h" using namespace LAMMPS_NS; @@ -42,7 +43,7 @@ MinCGKokkos::MinCGKokkos(LAMMPS *lmp) : MinLineSearchKokkos(lmp) int MinCGKokkos::iterate(int maxiter) { int fail,ntimestep; - double beta,gg,dot[2],dotall[2]; + double beta,gg,dot[2],dotall[2],fdotf; fix_minimize_kk->k_vectors.sync(); fix_minimize_kk->k_vectors.modify(); @@ -111,7 +112,14 @@ int MinCGKokkos::iterate(int maxiter) dot[1] = sdot.d1; MPI_Allreduce(dot,dotall,2,MPI_DOUBLE,MPI_SUM,world); - if (dotall[0] < update->ftol*update->ftol) return FTOL; + fdotf = 0.0; + if (update->ftol > 0.0) { + if (normstyle == MAX) fdotf = fnorm_max(); // max force norm + else if (normstyle == INF) fdotf = fnorm_inf(); // infinite force norm + else if (normstyle == TWO) fdotf = dotall[0]; // same as fnorm_sqr(), Euclidean force 2-norm + else error->all(FLERR,"Illegal min_modify command"); + if (fdotf < update->ftol*update->ftol) return FTOL; + } // update new search direction h from new f = -Grad(x) and old g // this is Polak-Ribieri formulation diff --git a/src/KOKKOS/min_kokkos.cpp b/src/KOKKOS/min_kokkos.cpp index 79ddbbab84d9728fb203fed0f5e3eace064b6b87..e5f22411f60fb2f4affee20e0df3f49f80101eef 100644 --- a/src/KOKKOS/min_kokkos.cpp +++ b/src/KOKKOS/min_kokkos.cpp @@ -236,7 +236,7 @@ void MinKokkos::setup(int flag) einitial = ecurrent; fnorm2_init = sqrt(fnorm_sqr()); - fnorminf_init = fnorm_inf(); + fnorminf_init = sqrt(fnorm_inf()); } /* ---------------------------------------------------------------------- @@ -345,7 +345,7 @@ void MinKokkos::setup_minimal(int flag) einitial = ecurrent; fnorm2_init = sqrt(fnorm_sqr()); - fnorminf_init = fnorm_inf(); + fnorminf_init = sqrt(fnorm_inf()); } /* ---------------------------------------------------------------------- @@ -620,7 +620,7 @@ double MinKokkos::fnorm_inf() auto l_fvec = fvec; Kokkos::parallel_reduce(nvec, LAMMPS_LAMBDA(int i, double& local_norm_inf) { - local_norm_inf = MAX(fabs(l_fvec[i]),local_norm_inf); + local_norm_inf = MAX(l_fvec[i]*l_fvec[i],local_norm_inf); },Kokkos::Max(local_norm_inf)); } @@ -629,3 +629,28 @@ double MinKokkos::fnorm_inf() return norm_inf; } + +/* ---------------------------------------------------------------------- + compute and return ||force||_max (inf norm per-vector) +------------------------------------------------------------------------- */ + +double MinKokkos::fnorm_max() +{ + + double local_norm_max = 0.0; + { + // local variables for lambda capture + + auto l_fvec = fvec; + + Kokkos::parallel_reduce(nvec, LAMMPS_LAMBDA(int i, double& local_norm_max) { + double fdotf = l_fvec[i]*l_fvec[i]+l_fvec[i+1]*l_fvec[i+1]+l_fvec[i+2]*l_fvec[i+2]; + local_norm_max = MAX(fdotf,local_norm_max); + },Kokkos::Max(local_norm_max)); + } + + double norm_max = 0.0; + MPI_Allreduce(&local_norm_max,&norm_max,1,MPI_DOUBLE,MPI_MAX,world); + + return norm_max; +} diff --git a/src/KOKKOS/min_kokkos.h b/src/KOKKOS/min_kokkos.h index 49cd1d18492385800e330693bd64d2ded47139f4..da61d62d434e7be2c5b19c808f0dfb097b5e1671 100644 --- a/src/KOKKOS/min_kokkos.h +++ b/src/KOKKOS/min_kokkos.h @@ -29,6 +29,7 @@ class MinKokkos : public Min { void run(int); double fnorm_sqr(); double fnorm_inf(); + double fnorm_max(); virtual void init_style() {} virtual void setup_style() = 0; diff --git a/src/KOKKOS/neigh_list_kokkos.cpp b/src/KOKKOS/neigh_list_kokkos.cpp index 2b9c5ef6452fe5c4dbe08c6426fe8f95d98c57a6..afaf0dd1b87abdd4cd3dc17e49995321bb77a59b 100644 --- a/src/KOKKOS/neigh_list_kokkos.cpp +++ b/src/KOKKOS/neigh_list_kokkos.cpp @@ -19,20 +19,20 @@ using namespace LAMMPS_NS; /* ---------------------------------------------------------------------- */ -template -NeighListKokkos::NeighListKokkos(class LAMMPS *lmp):NeighList(lmp) +template +NeighListKokkos::NeighListKokkos(class LAMMPS *lmp):NeighList(lmp) { _stride = 1; maxneighs = 16; kokkos = 1; maxatoms = 0; - execution_space = ExecutionSpaceFromDevice::space; + execution_space = ExecutionSpaceFromDevice::space; }; /* ---------------------------------------------------------------------- */ -template -void NeighListKokkos::grow(int nmax) +template +void NeighListKokkos::grow(int nmax) { // skip if this list is already long enough to store nmax atoms // and maxneighs neighbors @@ -40,14 +40,12 @@ void NeighListKokkos::grow(int nmax) if (nmax <= maxatoms && d_neighbors.extent(1) >= maxneighs) return; maxatoms = nmax; - k_ilist = - DAT::tdual_int_1d("neighlist:ilist",maxatoms); - d_ilist = k_ilist.view(); - d_numneigh = - typename ArrayTypes::t_int_1d("neighlist:numneigh",maxatoms); - d_neighbors = - typename ArrayTypes::t_neighbors_2d("neighlist:neighbors", - maxatoms,maxneighs); + k_ilist = DAT::tdual_int_1d("neighlist:ilist",maxatoms); + d_ilist = k_ilist.view(); + k_numneigh = DAT::tdual_int_1d("neighlist:numneigh",maxatoms); + d_numneigh = k_numneigh.view(); + k_neighbors = DAT::tdual_neighbors_2d("neighlist:neighbors",maxatoms,maxneighs); + d_neighbors = k_neighbors.view(); } /* ---------------------------------------------------------------------- */ diff --git a/src/KOKKOS/neigh_list_kokkos.h b/src/KOKKOS/neigh_list_kokkos.h index 585422c54f3d51a4a0ea2cfbadaa2acdd4a0ec68..edd775f7f960b82082b7baabcf31082113d191e2 100644 --- a/src/KOKKOS/neigh_list_kokkos.h +++ b/src/KOKKOS/neigh_list_kokkos.h @@ -31,7 +31,7 @@ class AtomNeighbors num_neighs(_num_neighs), _firstneigh(firstneigh), _stride(stride) {}; KOKKOS_INLINE_FUNCTION int& operator()(const int &i) const { - return _firstneigh[i*_stride]; + return _firstneigh[(bigint) i*_stride]; } private: @@ -51,7 +51,7 @@ class AtomNeighborsConst _firstneigh(firstneigh), num_neighs(_num_neighs), _stride(stride) {}; KOKKOS_INLINE_FUNCTION const int& operator()(const int &i) const { - return _firstneigh[i*_stride]; + return _firstneigh[(bigint) i*_stride]; } private: @@ -59,7 +59,7 @@ class AtomNeighborsConst const int _stride; }; -template +template class NeighListKokkos: public NeighList { int _stride; @@ -67,10 +67,12 @@ public: int maxneighs; void grow(int nmax); - typename ArrayTypes::t_neighbors_2d d_neighbors; - typename DAT::tdual_int_1d k_ilist; // local indices of I atoms - typename ArrayTypes::t_int_1d d_ilist; - typename ArrayTypes::t_int_1d d_numneigh; // # of J neighs for each I + DAT::tdual_neighbors_2d k_neighbors; + typename ArrayTypes::t_neighbors_2d d_neighbors; + DAT::tdual_int_1d k_ilist; // local indices of I atoms + typename ArrayTypes::t_int_1d d_ilist; + DAT::tdual_int_1d k_numneigh; // # of J neighs for each I + typename ArrayTypes::t_int_1d d_numneigh; NeighListKokkos(class LAMMPS *lmp); @@ -82,8 +84,8 @@ public: KOKKOS_INLINE_FUNCTION static AtomNeighborsConst static_neighbors_const(int i, - typename ArrayTypes::t_neighbors_2d_const const& d_neighbors, - typename ArrayTypes::t_int_1d_const const& d_numneigh) { + typename ArrayTypes::t_neighbors_2d_const const& d_neighbors, + typename ArrayTypes::t_int_1d_const const& d_numneigh) { return AtomNeighborsConst(&d_neighbors(i,0),d_numneigh(i), &d_neighbors(i,1)-&d_neighbors(i,0)); } diff --git a/src/KOKKOS/npair_copy_kokkos.cpp b/src/KOKKOS/npair_copy_kokkos.cpp index 0ce0f4d3ff9cd797157bd25aa5c68dbea733e582..016d68400f3cbdac176e1794961975fdcee7bda1 100644 --- a/src/KOKKOS/npair_copy_kokkos.cpp +++ b/src/KOKKOS/npair_copy_kokkos.cpp @@ -13,6 +13,8 @@ #include "npair_copy_kokkos.h" #include "neigh_list_kokkos.h" +#include "my_page.h" +#include "error.h" using namespace LAMMPS_NS; @@ -30,6 +32,24 @@ void NPairCopyKokkos::build(NeighList *list) { NeighList *listcopy = list->listcopy; + if (list->kokkos) { + if (!listcopy->kokkos) + error->all(FLERR,"Cannot copy non-Kokkos neighbor list to Kokkos neighbor list"); + copy_to_kokkos(list); + } else { + if (!listcopy->kokkos) + error->all(FLERR,"Missing Kokkos neighbor list for copy"); + copy_to_cpu(list); + } +} + +/* ---------------------------------------------------------------------- */ + +template +void NPairCopyKokkos::copy_to_kokkos(NeighList *list) +{ + NeighList *listcopy = list->listcopy; + list->inum = listcopy->inum; list->gnum = listcopy->gnum; list->ilist = listcopy->ilist; @@ -44,6 +64,62 @@ void NPairCopyKokkos::build(NeighList *list) list_kk->d_neighbors = listcopy_kk->d_neighbors; } +/* ---------------------------------------------------------------------- */ + +template +void NPairCopyKokkos::copy_to_cpu(NeighList *list) +{ + NeighList *listcopy = list->listcopy; + NeighListKokkos* listcopy_kk = (NeighListKokkos*) listcopy; + + listcopy_kk->k_ilist.template sync(); + listcopy_kk->k_numneigh.template sync(); + listcopy_kk->k_neighbors.template sync(); + + int inum = listcopy->inum; + int gnum = listcopy->gnum; + int inum_all = inum; + if (list->ghost) inum_all += gnum; + auto h_ilist = listcopy_kk->k_ilist.h_view; + auto h_numneigh = listcopy_kk->k_numneigh.h_view; + auto h_neighbors = listcopy_kk->k_neighbors.h_view; + + list->inum = inum; + list->gnum = gnum; + auto ilist = list->ilist; + auto numneigh = list->numneigh; + + // Kokkos neighbor data is stored differently than regular CPU, + // must copy element by element + + int *neighptr; + int **firstneigh = list->firstneigh; + MyPage *ipage = list->ipage; + ipage->reset(); + + for (int ii = 0; ii < inum_all; ii++) { + neighptr = ipage->vget(); + + const int i = h_ilist[ii]; + ilist[ii] = i; + + // loop over Kokkos neighbor list + + const int jnum = h_numneigh[i]; + numneigh[i] = jnum; + + for (int jj = 0; jj < jnum; jj++) { + const int joriginal = h_neighbors(i,jj); + neighptr[jj] = joriginal; + } + + firstneigh[i] = neighptr; + ipage->vgot(jnum); + if (ipage->status()) + error->one(FLERR,"Neighbor list overflow, boost neigh_modify one"); + } +} + namespace LAMMPS_NS { template class NPairCopyKokkos; #ifdef KOKKOS_ENABLE_CUDA diff --git a/src/KOKKOS/npair_copy_kokkos.h b/src/KOKKOS/npair_copy_kokkos.h index 84eb10b204122d03ff612209b39070fff3cb1a8e..4bbb2749e55b953de6ac3635d6d29dc92a9275b9 100644 --- a/src/KOKKOS/npair_copy_kokkos.h +++ b/src/KOKKOS/npair_copy_kokkos.h @@ -36,6 +36,9 @@ class NPairCopyKokkos : public NPair { NPairCopyKokkos(class LAMMPS *); ~NPairCopyKokkos() {} void build(class NeighList *); + private: + void copy_to_kokkos(class NeighList *); + void copy_to_cpu(class NeighList *); }; } diff --git a/src/KOKKOS/npair_halffull_kokkos.cpp b/src/KOKKOS/npair_halffull_kokkos.cpp index cc8f663ef23fe37080eb88b284ecc0204f6b52c1..754a5ca0101a93fb8d3fdcafd4d107f8ed2859e9 100644 --- a/src/KOKKOS/npair_halffull_kokkos.cpp +++ b/src/KOKKOS/npair_halffull_kokkos.cpp @@ -68,12 +68,14 @@ void NPairHalffullKokkos::build(NeighList *list) copymode = 1; Kokkos::parallel_for(Kokkos::RangePolicy(0,inum_full),*this); + copymode = 0; list->inum = k_list_full->inum; list->gnum = k_list_full->gnum; - k_list->k_ilist.template modify(); - copymode = 0; + k_list->k_ilist.template modify(); + k_list->k_numneigh.template modify(); + k_list->k_neighbors.template modify(); } template diff --git a/src/KOKKOS/npair_kokkos.cpp b/src/KOKKOS/npair_kokkos.cpp index aa2a1fc5ff4fe08a3faddda5605fdaf43b8e6a64..0a2d05096c5a9b64456e4c6de46a1c1638d90f2c 100644 --- a/src/KOKKOS/npair_kokkos.cpp +++ b/src/KOKKOS/npair_kokkos.cpp @@ -55,6 +55,7 @@ void NPairKokkos::copy_neighbor_info() newton_pair = force->newton_pair; k_cutneighsq = neighborKK->k_cutneighsq; + k_cutneighsq.modify(); // exclusion info @@ -97,7 +98,7 @@ void NPairKokkos::copy_stencil_info() NPair::copy_stencil_info(); nstencil = ns->nstencil; - if (neighbor->last_setup_bins == update->ntimestep) { + if (ns->last_stencil == update->ntimestep) { // copy stencil to device as it may have changed int maxstencil = ns->get_maxstencil(); @@ -214,22 +215,29 @@ void NPairKokkos::build(NeighList *list_) #ifdef KOKKOS_ENABLE_CUDA #define BINS_PER_BLOCK 2 const int factor = atoms_per_bin<64?2:1; - Kokkos::TeamPolicy config((mbins+factor-1)/factor,atoms_per_bin*factor); #else const int factor = 1; #endif if (GHOST) { - NPairKokkosBuildFunctorGhost f(data,atoms_per_bin * 5 * sizeof(X_FLOAT) * factor); + NPairKokkosBuildFunctorGhost f(data); Kokkos::parallel_for(nall, f); } else { if (newton_pair) { if (SIZE) { NPairKokkosBuildFunctorSize f(data,atoms_per_bin * 5 * sizeof(X_FLOAT) * factor); #ifdef KOKKOS_ENABLE_CUDA - if (ExecutionSpaceFromDevice::space == Device) - Kokkos::parallel_for(config, f); - else + if (ExecutionSpaceFromDevice::space == Device) { + int team_size = atoms_per_bin*factor; + int team_size_max = Kokkos::TeamPolicy(team_size,Kokkos::AUTO).team_size_max(f,Kokkos::ParallelForTag()); + if (team_size <= team_size_max) { + Kokkos::TeamPolicy config((mbins+factor-1)/factor,team_size); + Kokkos::parallel_for(config, f); + } else { // fall back to flat method + f.sharedsize = 0; + Kokkos::parallel_for(nall, f); + } + } else Kokkos::parallel_for(nall, f); #else Kokkos::parallel_for(nall, f); @@ -237,9 +245,17 @@ void NPairKokkos::build(NeighList *list_) } else { NPairKokkosBuildFunctor f(data,atoms_per_bin * 5 * sizeof(X_FLOAT) * factor); #ifdef KOKKOS_ENABLE_CUDA - if (ExecutionSpaceFromDevice::space == Device) - Kokkos::parallel_for(config, f); - else + if (ExecutionSpaceFromDevice::space == Device) { + int team_size = atoms_per_bin*factor; + int team_size_max = Kokkos::TeamPolicy(team_size,Kokkos::AUTO).team_size_max(f,Kokkos::ParallelForTag()); + if (team_size <= team_size_max) { + Kokkos::TeamPolicy config((mbins+factor-1)/factor,team_size); + Kokkos::parallel_for(config, f); + } else { // fall back to flat method + f.sharedsize = 0; + Kokkos::parallel_for(nall, f); + } + } else Kokkos::parallel_for(nall, f); #else Kokkos::parallel_for(nall, f); @@ -249,9 +265,17 @@ void NPairKokkos::build(NeighList *list_) if (SIZE) { NPairKokkosBuildFunctorSize f(data,atoms_per_bin * 5 * sizeof(X_FLOAT) * factor); #ifdef KOKKOS_ENABLE_CUDA - if (ExecutionSpaceFromDevice::space == Device) - Kokkos::parallel_for(config, f); - else + if (ExecutionSpaceFromDevice::space == Device) { + int team_size = atoms_per_bin*factor; + int team_size_max = Kokkos::TeamPolicy(team_size,Kokkos::AUTO).team_size_max(f,Kokkos::ParallelForTag()); + if (team_size <= team_size_max) { + Kokkos::TeamPolicy config((mbins+factor-1)/factor,team_size); + Kokkos::parallel_for(config, f); + } else { // fall back to flat method + f.sharedsize = 0; + Kokkos::parallel_for(nall, f); + } + } else Kokkos::parallel_for(nall, f); #else Kokkos::parallel_for(nall, f); @@ -259,9 +283,17 @@ void NPairKokkos::build(NeighList *list_) } else { NPairKokkosBuildFunctor f(data,atoms_per_bin * 5 * sizeof(X_FLOAT) * factor); #ifdef KOKKOS_ENABLE_CUDA - if (ExecutionSpaceFromDevice::space == Device) - Kokkos::parallel_for(config, f); - else + if (ExecutionSpaceFromDevice::space == Device) { + int team_size = atoms_per_bin*factor; + int team_size_max = Kokkos::TeamPolicy(team_size,Kokkos::AUTO).team_size_max(f,Kokkos::ParallelForTag()); + if (team_size <= team_size_max) { + Kokkos::TeamPolicy config((mbins+factor-1)/factor,team_size); + Kokkos::parallel_for(config, f); + } else { // fall back to flat method + f.sharedsize = 0; + Kokkos::parallel_for(nall, f); + } + } else Kokkos::parallel_for(nall, f); #else Kokkos::parallel_for(nall, f); @@ -273,7 +305,8 @@ void NPairKokkos::build(NeighList *list_) if(data.h_resize()) { list->maxneighs = data.h_new_maxneighs() * 1.2; - list->d_neighbors = typename ArrayTypes::t_neighbors_2d("neighbors", list->d_neighbors.extent(0), list->maxneighs); + list->k_neighbors = DAT::tdual_neighbors_2d("neighbors", list->d_neighbors.extent(0), list->maxneighs); + list->d_neighbors = list->k_neighbors.template view(); data.neigh_list.d_neighbors = list->d_neighbors; data.neigh_list.maxneighs = list->maxneighs; } @@ -288,6 +321,8 @@ void NPairKokkos::build(NeighList *list_) } list->k_ilist.template modify(); + list->k_numneigh.template modify(); + list->k_neighbors.template modify(); } /* ---------------------------------------------------------------------- */ diff --git a/src/KOKKOS/npair_kokkos.h b/src/KOKKOS/npair_kokkos.h index 7650bf33507309aa97ef3bf64485141489a1f3d0..6ed1debf7c29abf649d85c05b2dc867e9785122c 100644 --- a/src/KOKKOS/npair_kokkos.h +++ b/src/KOKKOS/npair_kokkos.h @@ -379,11 +379,11 @@ struct NPairKokkosBuildFunctor { typedef DeviceType device_type; const NeighborKokkosExecute c; - const size_t sharedsize; + size_t sharedsize; NPairKokkosBuildFunctor(const NeighborKokkosExecute &_c, - const size_t _sharedsize):c(_c), - sharedsize(_sharedsize) {}; + size_t _sharedsize):c(_c), + sharedsize(_sharedsize) {} KOKKOS_INLINE_FUNCTION void operator() (const int & i) const { @@ -395,7 +395,7 @@ struct NPairKokkosBuildFunctor { void operator() (typename Kokkos::TeamPolicy::member_type dev) const { c.template build_ItemCuda(dev); } - size_t shmem_size(const int team_size) const { (void) team_size; return sharedsize; } + size_t team_shmem_size(const int team_size) const { (void) team_size; return sharedsize; } #endif }; @@ -404,11 +404,11 @@ struct NPairKokkosBuildFunctor { typedef LMPHostType device_type; const NeighborKokkosExecute c; - const size_t sharedsize; + size_t sharedsize; NPairKokkosBuildFunctor(const NeighborKokkosExecute &_c, - const size_t _sharedsize):c(_c), - sharedsize(_sharedsize) {}; + size_t _sharedsize):c(_c), + sharedsize(_sharedsize) {} KOKKOS_INLINE_FUNCTION void operator() (const int & i) const { @@ -423,11 +423,8 @@ struct NPairKokkosBuildFunctorGhost { typedef DeviceType device_type; const NeighborKokkosExecute c; - const size_t sharedsize; - NPairKokkosBuildFunctorGhost(const NeighborKokkosExecute &_c, - const size_t _sharedsize):c(_c), - sharedsize(_sharedsize) {}; + NPairKokkosBuildFunctorGhost(const NeighborKokkosExecute &_c):c(_c) {} KOKKOS_INLINE_FUNCTION void operator() (const int & i) const { @@ -440,10 +437,10 @@ struct NPairKokkosBuildFunctorSize { typedef DeviceType device_type; const NeighborKokkosExecute c; - const size_t sharedsize; + size_t sharedsize; NPairKokkosBuildFunctorSize(const NeighborKokkosExecute &_c, - const size_t _sharedsize): c(_c), sharedsize(_sharedsize) {}; + size_t _sharedsize): c(_c), sharedsize(_sharedsize) {} KOKKOS_INLINE_FUNCTION void operator() (const int & i) const { @@ -455,7 +452,7 @@ struct NPairKokkosBuildFunctorSize { void operator() (typename Kokkos::TeamPolicy::member_type dev) const { c.template build_ItemSizeCuda(dev); } - size_t shmem_size(const int team_size) const { (void) team_size; return sharedsize; } + size_t team_shmem_size(const int team_size) const { (void) team_size; return sharedsize; } #endif }; @@ -464,10 +461,10 @@ struct NPairKokkosBuildFunctorSize { typedef LMPHostType device_type; const NeighborKokkosExecute c; - const size_t sharedsize; + size_t sharedsize; NPairKokkosBuildFunctorSize(const NeighborKokkosExecute &_c, - const size_t _sharedsize): c(_c), sharedsize(_sharedsize) {}; + size_t _sharedsize): c(_c), sharedsize(_sharedsize) {} KOKKOS_INLINE_FUNCTION void operator() (const int & i) const { diff --git a/src/KOKKOS/npair_ssa_kokkos.cpp b/src/KOKKOS/npair_ssa_kokkos.cpp index f9708e5fe823fa38733d2542b7fb9be10bd0f918..b6d03e1445e0a2a3122f9332d7faff955ffe028d 100644 --- a/src/KOKKOS/npair_ssa_kokkos.cpp +++ b/src/KOKKOS/npair_ssa_kokkos.cpp @@ -519,6 +519,8 @@ fprintf(stdout, "Fina%03d %6d inum %6d gnum, total used %6d, allocated %6d\n" #endif list->k_ilist.template modify(); + list->k_numneigh.template modify(); + list->k_neighbors.template modify(); } diff --git a/src/KOKKOS/pair_buck_coul_cut_kokkos.cpp b/src/KOKKOS/pair_buck_coul_cut_kokkos.cpp index b28bbebbebf113ac0bb6e7ed489ac4dc74636612..46c5ee82cb9ec83d19aac41f1f4c705dc4b089f1 100644 --- a/src/KOKKOS/pair_buck_coul_cut_kokkos.cpp +++ b/src/KOKKOS/pair_buck_coul_cut_kokkos.cpp @@ -307,9 +307,6 @@ void PairBuckCoulCutKokkos::init_style() } else if (neighflag == HALF || neighflag == HALFTHREAD) { neighbor->requests[irequest]->full = 0; neighbor->requests[irequest]->half = 1; - } else if (neighflag == N2) { - neighbor->requests[irequest]->full = 0; - neighbor->requests[irequest]->half = 0; } else { error->all(FLERR,"Cannot use chosen neighbor list style with buck/coul/cut/kk"); } diff --git a/src/KOKKOS/pair_buck_kokkos.cpp b/src/KOKKOS/pair_buck_kokkos.cpp index 990c9e94a62642d987d636002b9ae2df3ad6a8cd..04ebd6608b65792f16458fc0a85efc7854c9d127 100644 --- a/src/KOKKOS/pair_buck_kokkos.cpp +++ b/src/KOKKOS/pair_buck_kokkos.cpp @@ -229,9 +229,6 @@ void PairBuckKokkos::init_style() } else if (neighflag == HALF || neighflag == HALFTHREAD) { neighbor->requests[irequest]->full = 0; neighbor->requests[irequest]->half = 1; - } else if (neighflag == N2) { - neighbor->requests[irequest]->full = 0; - neighbor->requests[irequest]->half = 0; } else { error->all(FLERR,"Cannot use chosen neighbor list style with buck/kk"); } diff --git a/src/KOKKOS/pair_buck_kokkos.h b/src/KOKKOS/pair_buck_kokkos.h index 2691f10929bafefac91fb80f5cfaa1f045c6f5aa..815b5b2deef6fbc0cc61da6331976df7c428ff1f 100644 --- a/src/KOKKOS/pair_buck_kokkos.h +++ b/src/KOKKOS/pair_buck_kokkos.h @@ -31,7 +31,7 @@ namespace LAMMPS_NS { template class PairBuckKokkos : public PairBuck { public: - enum {EnabledNeighFlags=FULL|HALFTHREAD|HALF|N2}; + enum {EnabledNeighFlags=FULL|HALFTHREAD|HALF}; enum {COUL_FLAG=0}; typedef DeviceType device_type; typedef ArrayTypes AT; @@ -98,15 +98,12 @@ class PairBuckKokkos : public PairBuck { friend class PairComputeFunctor; friend class PairComputeFunctor; friend class PairComputeFunctor; - friend class PairComputeFunctor; friend class PairComputeFunctor; friend class PairComputeFunctor; friend class PairComputeFunctor; - friend class PairComputeFunctor; friend EV_FLOAT pair_compute_neighlist(PairBuckKokkos*,NeighListKokkos*); friend EV_FLOAT pair_compute_neighlist(PairBuckKokkos*,NeighListKokkos*); friend EV_FLOAT pair_compute_neighlist(PairBuckKokkos*,NeighListKokkos*); - friend EV_FLOAT pair_compute_neighlist(PairBuckKokkos*,NeighListKokkos*); friend EV_FLOAT pair_compute(PairBuckKokkos*,NeighListKokkos*); friend void pair_virial_fdotr_compute(PairBuckKokkos*); }; diff --git a/src/KOKKOS/pair_coul_debye_kokkos.cpp b/src/KOKKOS/pair_coul_debye_kokkos.cpp index b212bdc53ab4c15ed18274ab921b6cb2d4bf75f6..a544a5fb8dc528ae1dc61852430b4c51d8e75d1e 100644 --- a/src/KOKKOS/pair_coul_debye_kokkos.cpp +++ b/src/KOKKOS/pair_coul_debye_kokkos.cpp @@ -276,9 +276,6 @@ void PairCoulDebyeKokkos::init_style() } else if (neighflag == HALF || neighflag == HALFTHREAD) { neighbor->requests[irequest]->full = 0; neighbor->requests[irequest]->half = 1; - } else if (neighflag == N2) { - neighbor->requests[irequest]->full = 0; - neighbor->requests[irequest]->half = 0; } else { error->all(FLERR,"Cannot use chosen neighbor list style with coul/debye/kk"); } diff --git a/src/KOKKOS/pair_eam_alloy_kokkos.cpp b/src/KOKKOS/pair_eam_alloy_kokkos.cpp index 1963722d866368893fdeb75b4dd55be7272a8c70..7f598f966db23cbfb10c2ebb62e354a8a03503d6 100644 --- a/src/KOKKOS/pair_eam_alloy_kokkos.cpp +++ b/src/KOKKOS/pair_eam_alloy_kokkos.cpp @@ -29,11 +29,12 @@ #include "memory_kokkos.h" #include "error.h" #include "atom_masks.h" +#include "utils.h" +#include "tokenizer.h" +#include "potential_file_reader.h" using namespace LAMMPS_NS; -#define MAXLINE 1024 - // Cannot use virtual inheritance on the GPU, so must duplicate code /* ---------------------------------------------------------------------- */ @@ -982,94 +983,112 @@ void PairEAMAlloyKokkos::read_file(char *filename) { Setfl *file = setfl; - // open potential file + // read potential file + if(comm->me == 0) { + PotentialFileReader reader(lmp, filename, "EAM"); - int me = comm->me; - FILE *fptr; - char line[MAXLINE]; + try { + char * line = nullptr; - if (me == 0) { - fptr = force->open_potential(filename); - if (fptr == NULL) { - char str[128]; - snprintf(str,128,"Cannot open EAM potential file %s",filename); - error->one(FLERR,str); - } - } + reader.skip_line(); + reader.skip_line(); + reader.skip_line(); - // read and broadcast header - // extract element names from nelements line + // extract element names from nelements line + line = reader.next_line(1); + ValueTokenizer values(line); + file->nelements = values.next_int(); - int n; - if (me == 0) { - fgets(line,MAXLINE,fptr); - fgets(line,MAXLINE,fptr); - fgets(line,MAXLINE,fptr); - fgets(line,MAXLINE,fptr); - n = strlen(line) + 1; - } - MPI_Bcast(&n,1,MPI_INT,0,world); - MPI_Bcast(line,n,MPI_CHAR,0,world); + if (values.count() != file->nelements + 1) + error->one(FLERR,"Incorrect element names in EAM potential file"); - sscanf(line,"%d",&file->nelements); - int nwords = atom->count_words(line); - if (nwords != file->nelements + 1) - error->all(FLERR,"Incorrect element names in EAM potential file"); + file->elements = new char*[file->nelements]; + for (int i = 0; i < file->nelements; i++) { + const std::string word = values.next_string(); + const int n = word.length() + 1; + file->elements[i] = new char[n]; + strcpy(file->elements[i], word.c_str()); + } - char **words = new char*[file->nelements+1]; - nwords = 0; - strtok(line," \t\n\r\f"); - while ((words[nwords++] = strtok(NULL," \t\n\r\f"))) continue; + // - file->elements = new char*[file->nelements]; - for (int i = 0; i < file->nelements; i++) { - n = strlen(words[i]) + 1; - file->elements[i] = new char[n]; - strcpy(file->elements[i],words[i]); - } - delete [] words; + line = reader.next_line(5); + values = ValueTokenizer(line); + file->nrho = values.next_int(); + file->drho = values.next_double(); + file->nr = values.next_int(); + file->dr = values.next_double(); + file->cut = values.next_double(); - if (me == 0) { - fgets(line,MAXLINE,fptr); - sscanf(line,"%d %lg %d %lg %lg", - &file->nrho,&file->drho,&file->nr,&file->dr,&file->cut); - } + if ((file->nrho <= 0) || (file->nr <= 0) || (file->dr <= 0.0)) + error->one(FLERR,"Invalid EAM potential file"); + + memory->create(file->mass, file->nelements, "pair:mass"); + memory->create(file->frho, file->nelements, file->nrho + 1, "pair:frho"); + memory->create(file->rhor, file->nelements, file->nr + 1, "pair:rhor"); + memory->create(file->z2r, file->nelements, file->nelements, file->nr + 1, "pair:z2r"); + + for (int i = 0; i < file->nelements; i++) { + line = reader.next_line(2); + values = ValueTokenizer(line); + values.next_int(); // ignore + file->mass[i] = values.next_double(); + + reader.next_dvector(file->nrho, &file->frho[i][1]); + reader.next_dvector(file->nr, &file->rhor[i][1]); + } - MPI_Bcast(&file->nrho,1,MPI_INT,0,world); - MPI_Bcast(&file->drho,1,MPI_DOUBLE,0,world); - MPI_Bcast(&file->nr,1,MPI_INT,0,world); - MPI_Bcast(&file->dr,1,MPI_DOUBLE,0,world); - MPI_Bcast(&file->cut,1,MPI_DOUBLE,0,world); - - file->mass = new double[file->nelements]; - memory->create(file->frho,file->nelements,file->nrho+1,"pair:frho"); - memory->create(file->rhor,file->nelements,file->nr+1,"pair:rhor"); - memory->create(file->z2r,file->nelements,file->nelements,file->nr+1, - "pair:z2r"); - - int i,j,tmp; - for (i = 0; i < file->nelements; i++) { - if (me == 0) { - fgets(line,MAXLINE,fptr); - sscanf(line,"%d %lg",&tmp,&file->mass[i]); + for (int i = 0; i < file->nelements; i++) { + for (int j = 0; j <= i; j++) { + reader.next_dvector(file->nr, &file->z2r[i][j][1]); + } + } + } catch (TokenizerException & e) { + error->one(FLERR, e.what()); } - MPI_Bcast(&file->mass[i],1,MPI_DOUBLE,0,world); + } - if (me == 0) grab(fptr,file->nrho,&file->frho[i][1]); - MPI_Bcast(&file->frho[i][1],file->nrho,MPI_DOUBLE,0,world); - if (me == 0) grab(fptr,file->nr,&file->rhor[i][1]); - MPI_Bcast(&file->rhor[i][1],file->nr,MPI_DOUBLE,0,world); + // broadcast potential information + MPI_Bcast(&file->nelements, 1, MPI_INT, 0, world); + + MPI_Bcast(&file->nrho, 1, MPI_INT, 0, world); + MPI_Bcast(&file->drho, 1, MPI_DOUBLE, 0, world); + MPI_Bcast(&file->nr, 1, MPI_INT, 0, world); + MPI_Bcast(&file->dr, 1, MPI_DOUBLE, 0, world); + MPI_Bcast(&file->cut, 1, MPI_DOUBLE, 0, world); + + // allocate memory on other procs + if (comm->me != 0) { + file->elements = new char*[file->nelements]; + for (int i = 0; i < file->nelements; i++) file->elements[i] = nullptr; + memory->create(file->mass, file->nelements, "pair:mass"); + memory->create(file->frho, file->nelements, file->nrho + 1, "pair:frho"); + memory->create(file->rhor, file->nelements, file->nr + 1, "pair:rhor"); + memory->create(file->z2r, file->nelements, file->nelements, file->nr + 1, "pair:z2r"); } - for (i = 0; i < file->nelements; i++) - for (j = 0; j <= i; j++) { - if (me == 0) grab(fptr,file->nr,&file->z2r[i][j][1]); - MPI_Bcast(&file->z2r[i][j][1],file->nr,MPI_DOUBLE,0,world); - } + // broadcast file->elements string array + for (int i = 0; i < file->nelements; i++) { + int n; + if (comm->me == 0) n = strlen(file->elements[i]) + 1; + MPI_Bcast(&n, 1, MPI_INT, 0, world); + if (comm->me != 0) file->elements[i] = new char[n]; + MPI_Bcast(file->elements[i], n, MPI_CHAR, 0, world); + } - // close the potential file + // broadcast file->mass, frho, rhor + for (int i = 0; i < file->nelements; i++) { + MPI_Bcast(&file->mass[i], 1, MPI_DOUBLE, 0, world); + MPI_Bcast(&file->frho[i][1], file->nrho, MPI_DOUBLE, 0, world); + MPI_Bcast(&file->rhor[i][1], file->nr, MPI_DOUBLE, 0, world); + } - if (me == 0) fclose(fptr); + // broadcast file->z2r + for (int i = 0; i < file->nelements; i++) { + for (int j = 0; j <= i; j++) { + MPI_Bcast(&file->z2r[i][j][1], file->nr, MPI_DOUBLE, 0, world); + } + } } /* ---------------------------------------------------------------------- diff --git a/src/KOKKOS/pair_eam_fs_kokkos.cpp b/src/KOKKOS/pair_eam_fs_kokkos.cpp index a33923887be58892c41344d56306d7fa8986f726..e532a4ec38134f02b433a461f5aeca5090d91dd7 100644 --- a/src/KOKKOS/pair_eam_fs_kokkos.cpp +++ b/src/KOKKOS/pair_eam_fs_kokkos.cpp @@ -29,11 +29,12 @@ #include "memory_kokkos.h" #include "error.h" #include "atom_masks.h" +#include "utils.h" +#include "tokenizer.h" +#include "potential_file_reader.h" using namespace LAMMPS_NS; -#define MAXLINE 1024 - // Cannot use virtual inheritance on the GPU, so must duplicate code /* ---------------------------------------------------------------------- */ @@ -982,99 +983,118 @@ void PairEAMFSKokkos::read_file(char *filename) { Fs *file = fs; - // open potential file + // read potential file + if(comm->me == 0) { + PotentialFileReader reader(lmp, filename, "EAM"); - int me = comm->me; - FILE *fptr; - char line[MAXLINE]; + try { + char * line = nullptr; - if (me == 0) { - fptr = force->open_potential(filename); - if (fptr == NULL) { - char str[128]; - snprintf(str,128,"Cannot open EAM potential file %s",filename); - error->one(FLERR,str); - } - } + reader.skip_line(); + reader.skip_line(); + reader.skip_line(); - // read and broadcast header - // extract element names from nelements line + // extract element names from nelements line + line = reader.next_line(1); + ValueTokenizer values(line); + file->nelements = values.next_int(); - int n; - if (me == 0) { - fgets(line,MAXLINE,fptr); - fgets(line,MAXLINE,fptr); - fgets(line,MAXLINE,fptr); - fgets(line,MAXLINE,fptr); - n = strlen(line) + 1; - } - MPI_Bcast(&n,1,MPI_INT,0,world); - MPI_Bcast(line,n,MPI_CHAR,0,world); + if (values.count() != file->nelements + 1) + error->one(FLERR,"Incorrect element names in EAM potential file"); - sscanf(line,"%d",&file->nelements); - int nwords = atom->count_words(line); - if (nwords != file->nelements + 1) - error->all(FLERR,"Incorrect element names in EAM potential file"); + file->elements = new char*[file->nelements]; + for (int i = 0; i < file->nelements; i++) { + const std::string word = values.next_string(); + const int n = word.length() + 1; + file->elements[i] = new char[n]; + strcpy(file->elements[i], word.c_str()); + } - char **words = new char*[file->nelements+1]; - nwords = 0; - strtok(line," \t\n\r\f"); - while ((words[nwords++] = strtok(NULL," \t\n\r\f"))) continue; + // - file->elements = new char*[file->nelements]; - for (int i = 0; i < file->nelements; i++) { - n = strlen(words[i]) + 1; - file->elements[i] = new char[n]; - strcpy(file->elements[i],words[i]); + line = reader.next_line(5); + values = ValueTokenizer(line); + file->nrho = values.next_int(); + file->drho = values.next_double(); + file->nr = values.next_int(); + file->dr = values.next_double(); + file->cut = values.next_double(); + + if ((file->nrho <= 0) || (file->nr <= 0) || (file->dr <= 0.0)) + error->one(FLERR,"Invalid EAM potential file"); + + memory->create(file->mass, file->nelements, "pair:mass"); + memory->create(file->frho, file->nelements, file->nrho + 1, "pair:frho"); + memory->create(file->rhor, file->nelements, file->nelements, file->nr + 1, "pair:rhor"); + memory->create(file->z2r, file->nelements, file->nelements, file->nr + 1, "pair:z2r"); + + for (int i = 0; i < file->nelements; i++) { + line = reader.next_line(2); + values = ValueTokenizer(line); + values.next_int(); // ignore + file->mass[i] = values.next_double(); + + reader.next_dvector(file->nrho, &file->frho[i][1]); + + for (int j = 0; j < file->nelements; j++) { + reader.next_dvector(file->nr, &file->rhor[i][j][1]); + } + } + + for (int i = 0; i < file->nelements; i++) { + for (int j = 0; j <= i; j++) { + reader.next_dvector(file->nr, &file->z2r[i][j][1]); + } + } + } catch (TokenizerException & e) { + error->one(FLERR, e.what()); + } } - delete [] words; - if (me == 0) { - fgets(line,MAXLINE,fptr); - sscanf(line,"%d %lg %d %lg %lg", - &file->nrho,&file->drho,&file->nr,&file->dr,&file->cut); + // broadcast potential information + MPI_Bcast(&file->nelements, 1, MPI_INT, 0, world); + + MPI_Bcast(&file->nrho, 1, MPI_INT, 0, world); + MPI_Bcast(&file->drho, 1, MPI_DOUBLE, 0, world); + MPI_Bcast(&file->nr, 1, MPI_INT, 0, world); + MPI_Bcast(&file->dr, 1, MPI_DOUBLE, 0, world); + MPI_Bcast(&file->cut, 1, MPI_DOUBLE, 0, world); + + // allocate memory on other procs + if (comm->me != 0) { + file->elements = new char*[file->nelements]; + for (int i = 0; i < file->nelements; i++) file->elements[i] = nullptr; + memory->create(file->mass, file->nelements, "pair:mass"); + memory->create(file->frho, file->nelements, file->nrho + 1, "pair:frho"); + memory->create(file->rhor, file->nelements, file->nelements, file->nr + 1, "pair:rhor"); + memory->create(file->z2r, file->nelements, file->nelements, file->nr + 1, "pair:z2r"); } - MPI_Bcast(&file->nrho,1,MPI_INT,0,world); - MPI_Bcast(&file->drho,1,MPI_DOUBLE,0,world); - MPI_Bcast(&file->nr,1,MPI_INT,0,world); - MPI_Bcast(&file->dr,1,MPI_DOUBLE,0,world); - MPI_Bcast(&file->cut,1,MPI_DOUBLE,0,world); - - file->mass = new double[file->nelements]; - memory->create(file->frho,file->nelements,file->nrho+1, - "pair:frho"); - memory->create(file->rhor,file->nelements,file->nelements, - file->nr+1,"pair:rhor"); - memory->create(file->z2r,file->nelements,file->nelements, - file->nr+1,"pair:z2r"); - - int i,j,tmp; - for (i = 0; i < file->nelements; i++) { - if (me == 0) { - fgets(line,MAXLINE,fptr); - sscanf(line,"%d %lg",&tmp,&file->mass[i]); - } - MPI_Bcast(&file->mass[i],1,MPI_DOUBLE,0,world); + // broadcast file->elements string array + for (int i = 0; i < file->nelements; i++) { + int n; + if (comm->me == 0) n = strlen(file->elements[i]) + 1; + MPI_Bcast(&n, 1, MPI_INT, 0, world); + if (comm->me != 0) file->elements[i] = new char[n]; + MPI_Bcast(file->elements[i], n, MPI_CHAR, 0, world); + } - if (me == 0) grab(fptr,file->nrho,&file->frho[i][1]); - MPI_Bcast(&file->frho[i][1],file->nrho,MPI_DOUBLE,0,world); + // broadcast file->mass, frho, rhor + for (int i = 0; i < file->nelements; i++) { + MPI_Bcast(&file->mass[i], 1, MPI_DOUBLE, 0, world); + MPI_Bcast(&file->frho[i][1], file->nrho, MPI_DOUBLE, 0, world); - for (j = 0; j < file->nelements; j++) { - if (me == 0) grab(fptr,file->nr,&file->rhor[i][j][1]); - MPI_Bcast(&file->rhor[i][j][1],file->nr,MPI_DOUBLE,0,world); + for (int j = 0; j < file->nelements; j++) { + MPI_Bcast(&file->rhor[i][j][1], file->nr, MPI_DOUBLE, 0, world); } } - for (i = 0; i < file->nelements; i++) - for (j = 0; j <= i; j++) { - if (me == 0) grab(fptr,file->nr,&file->z2r[i][j][1]); - MPI_Bcast(&file->z2r[i][j][1],file->nr,MPI_DOUBLE,0,world); + // broadcast file->z2r + for (int i = 0; i < file->nelements; i++) { + for (int j = 0; j <= i; j++) { + MPI_Bcast(&file->z2r[i][j][1], file->nr, MPI_DOUBLE, 0, world); } - - // close the potential file - - if (me == 0) fclose(fptr); + } } /* ---------------------------------------------------------------------- diff --git a/src/KOKKOS/pair_exp6_rx_kokkos.cpp b/src/KOKKOS/pair_exp6_rx_kokkos.cpp index a64df08127c604aa577f01451d7afd52fc0e1eea..8c98e32d5b6bc4d97d7aa8e96f303f949544777a 100644 --- a/src/KOKKOS/pair_exp6_rx_kokkos.cpp +++ b/src/KOKKOS/pair_exp6_rx_kokkos.cpp @@ -32,6 +32,7 @@ #include "neigh_request.h" #include "atom_kokkos.h" #include "kokkos.h" +#include "utils.h" #ifdef _OPENMP #include @@ -1752,7 +1753,7 @@ void PairExp6rxKokkos::read_file(char *file) // strip comment, skip line if blank if ((ptr = strchr(line,'#'))) *ptr = '\0'; - nwords = atom->count_words(line); + nwords = utils::count_words(line); if (nwords == 0) continue; // concatenate additional lines until have params_per_line words @@ -1771,7 +1772,7 @@ void PairExp6rxKokkos::read_file(char *file) MPI_Bcast(&n,1,MPI_INT,0,world); MPI_Bcast(line,n,MPI_CHAR,0,world); if ((ptr = strchr(line,'#'))) *ptr = '\0'; - nwords = atom->count_words(line); + nwords = utils::count_words(line); } if (nwords != params_per_line) diff --git a/src/KOKKOS/pair_gran_hooke_history_kokkos.cpp b/src/KOKKOS/pair_gran_hooke_history_kokkos.cpp index 1acfc0d6a68b17a3f348967b0de2f049d1e6f886..bc5eb30845d3907f844e047095ae72bdf9a7d72b 100644 --- a/src/KOKKOS/pair_gran_hooke_history_kokkos.cpp +++ b/src/KOKKOS/pair_gran_hooke_history_kokkos.cpp @@ -60,20 +60,25 @@ PairGranHookeHistoryKokkos::~PairGranHookeHistoryKokkos() template void PairGranHookeHistoryKokkos::init_style() { + // if history is stored and first init, create Fix to store history + // it replaces FixDummy, created in the constructor + // this is so its order in the fix list is preserved + if (history && fix_history == NULL) { char dnumstr[16]; sprintf(dnumstr,"%d",3); char **fixarg = new char*[4]; - fixarg[0] = (char *) "NEIGH_HISTORY"; + fixarg[0] = (char *) "NEIGH_HISTORY_HH"; fixarg[1] = (char *) "all"; if (execution_space == Device) fixarg[2] = (char *) "NEIGH_HISTORY/KK/DEVICE"; else fixarg[2] = (char *) "NEIGH_HISTORY/KK/HOST"; fixarg[3] = dnumstr; - modify->add_fix(4,fixarg,1); + modify->replace_fix("NEIGH_HISTORY_HH_DUMMY",4,fixarg,1); delete [] fixarg; - fix_history = (FixNeighHistory *) modify->fix[modify->nfix-1]; + int ifix = modify->find_fix("NEIGH_HISTORY_HH"); + fix_history = (FixNeighHistory *) modify->fix[ifix]; fix_history->pair = this; fix_historyKK = (FixNeighHistoryKokkos *)fix_history; } @@ -95,7 +100,7 @@ void PairGranHookeHistoryKokkos::init_style() neighbor->requests[irequest]->full = 0; neighbor->requests[irequest]->half = 1; } else { - error->all(FLERR,"Cannot use chosen neighbor list style with gran/hooke/history/kk"); + error->all(FLERR,"Must use half neighbor list with gran/hooke/history/kk"); } } diff --git a/src/KOKKOS/pair_kokkos.h b/src/KOKKOS/pair_kokkos.h index 54035c54ebc2ffcb54b95e70dd4f564a2440c362..c28c8581138fb96b0d5f8c31ef0994adf2cd88da 100644 --- a/src/KOKKOS/pair_kokkos.h +++ b/src/KOKKOS/pair_kokkos.h @@ -87,6 +87,8 @@ struct PairComputeFunctor { c(*c_ptr),list(*list_ptr) { // allocate duplicated memory f = c.f; + d_eatom = c.d_eatom; + d_vatom = c.d_vatom; dup_f = Kokkos::Experimental::create_scatter_view::value >(c.f); dup_eatom = Kokkos::Experimental::create_scatter_view::value >(c.d_eatom); dup_vatom = Kokkos::Experimental::create_scatter_view::value >(c.d_vatom); @@ -422,15 +424,15 @@ struct PairComputeFunctor { F_FLOAT evdwl = 0.0; if (c.eflag) { evdwl = factor_lj * c.template compute_evdwl(rsq,i,j,itype,jtype); - fev.evdwl += 0.5*evdwl; + fev_tmp.evdwl += 0.5*evdwl; } if (c.vflag_either) { - fev.v[0] += 0.5*delx*delx*fpair; - fev.v[1] += 0.5*dely*dely*fpair; - fev.v[2] += 0.5*delz*delz*fpair; - fev.v[3] += 0.5*delx*dely*fpair; - fev.v[4] += 0.5*delx*delz*fpair; - fev.v[5] += 0.5*dely*delz*fpair; + fev_tmp.v[0] += 0.5*delx*delx*fpair; + fev_tmp.v[1] += 0.5*dely*dely*fpair; + fev_tmp.v[2] += 0.5*delz*delz*fpair; + fev_tmp.v[3] += 0.5*delx*dely*fpair; + fev_tmp.v[4] += 0.5*delx*delz*fpair; + fev_tmp.v[5] += 0.5*dely*delz*fpair; } } },fev); @@ -479,8 +481,8 @@ struct PairComputeFunctor { const int inum = team.league_size(); const int atoms_per_team = team.team_size(); - int firstatom = team.league_rank()*atoms_per_team; - int lastatom = firstatom + atoms_per_team < inum ? firstatom + atoms_per_team : inum; + const int firstatom = team.league_rank()*atoms_per_team; + const int lastatom = firstatom + atoms_per_team < inum ? firstatom + atoms_per_team : inum; Kokkos::parallel_for(Kokkos::TeamThreadRange(team, firstatom, lastatom), [&] (const int &ii) { const int i = list.d_ilist[ii]; @@ -497,6 +499,7 @@ struct PairComputeFunctor { Kokkos::parallel_reduce(Kokkos::ThreadVectorRange(team,jnum), [&] (const int jj, FEV_FLOAT& fev_tmp) { + int j = neighbors_i(jj); const F_FLOAT factor_lj = c.special_lj[sbmask(j)]; const F_FLOAT factor_coul = c.special_coul[sbmask(j)]; @@ -516,29 +519,29 @@ struct PairComputeFunctor { if(rsq < (STACKPARAMS?c.m_cut_coulsq[itype][jtype]:c.d_cut_coulsq(itype,jtype))) fpair+=c.template compute_fcoul(rsq,i,j,itype,jtype,factor_coul,qtmp); - fev.f[0] += delx*fpair; - fev.f[1] += dely*fpair; - fev.f[2] += delz*fpair; + fev_tmp.f[0] += delx*fpair; + fev_tmp.f[1] += dely*fpair; + fev_tmp.f[2] += delz*fpair; F_FLOAT evdwl = 0.0; F_FLOAT ecoul = 0.0; if (c.eflag) { if(rsq < (STACKPARAMS?c.m_cut_ljsq[itype][jtype]:c.d_cut_ljsq(itype,jtype))) { evdwl = factor_lj * c.template compute_evdwl(rsq,i,j,itype,jtype); - ev.evdwl += 0.5*evdwl; + fev_tmp.evdwl += 0.5*evdwl; } if(rsq < (STACKPARAMS?c.m_cut_coulsq[itype][jtype]:c.d_cut_coulsq(itype,jtype))) { ecoul = c.template compute_ecoul(rsq,i,j,itype,jtype,factor_coul,qtmp); - ev.ecoul += 0.5*ecoul; + fev_tmp.ecoul += 0.5*ecoul; } } - if (c.vflag) { - fev.v[0] += 0.5*delx*delx*fpair; - fev.v[1] += 0.5*dely*dely*fpair; - fev.v[2] += 0.5*delz*delz*fpair; - fev.v[3] += 0.5*delx*dely*fpair; - fev.v[4] += 0.5*delx*delz*fpair; - fev.v[5] += 0.5*dely*delz*fpair; + if (c.vflag_either) { + fev_tmp.v[0] += 0.5*delx*delx*fpair; + fev_tmp.v[1] += 0.5*dely*dely*fpair; + fev_tmp.v[2] += 0.5*delz*delz*fpair; + fev_tmp.v[3] += 0.5*delx*dely*fpair; + fev_tmp.v[4] += 0.5*delx*delz*fpair; + fev_tmp.v[5] += 0.5*dely*delz*fpair; } } },fev); @@ -690,148 +693,6 @@ struct PairComputeFunctor { } }; -template -struct PairComputeFunctor { - typedef typename PairStyle::device_type device_type ; - typedef EV_FLOAT value_type; - - PairStyle c; - NeighListKokkos list; - - PairComputeFunctor(PairStyle* c_ptr, - NeighListKokkos* list_ptr): - c(*c_ptr),list(*list_ptr) {}; - ~PairComputeFunctor() {c.cleanup_copy();list.copymode = 1;}; - - KOKKOS_INLINE_FUNCTION int sbmask(const int& j) const { - return j >> SBBITS & 3; - } - - - void contribute() {} - - template - KOKKOS_FUNCTION - EV_FLOAT compute_item(const int& ii, - const NeighListKokkos &list, const NoCoulTag&) const { - (void) list; - EV_FLOAT ev; - const int i = ii;//list.d_ilist[ii]; - const X_FLOAT xtmp = c.x(i,0); - const X_FLOAT ytmp = c.x(i,1); - const X_FLOAT ztmp = c.x(i,2); - const int itype = c.type(i); - - //const AtomNeighborsConst neighbors_i = list.get_neighbors_const(i); - const int jnum = c.nall; - - F_FLOAT fxtmp = 0.0; - F_FLOAT fytmp = 0.0; - F_FLOAT fztmp = 0.0; - - for (int jj = 0; jj < jnum; jj++) { - int j = jj;//neighbors_i(jj); - if(i==j) continue; - const F_FLOAT factor_lj = c.special_lj[sbmask(j)]; - j &= NEIGHMASK; - const X_FLOAT delx = xtmp - c.x(j,0); - const X_FLOAT dely = ytmp - c.x(j,1); - const X_FLOAT delz = ztmp - c.x(j,2); - const int jtype = c.type(j); - const F_FLOAT rsq = delx*delx + dely*dely + delz*delz; - - if(rsq < (STACKPARAMS?c.m_cutsq[itype][jtype]:c.d_cutsq(itype,jtype))) { - - const F_FLOAT fpair = factor_lj*c.template compute_fpair(rsq,i,j,itype,jtype); - fxtmp += delx*fpair; - fytmp += dely*fpair; - fztmp += delz*fpair; - - if (EVFLAG) { - F_FLOAT evdwl = 0.0; - if (c.eflag) { - evdwl = 0.5* - factor_lj * c.template compute_evdwl(rsq,i,j,itype,jtype); - ev.evdwl += evdwl; - } - - if (c.vflag_either || c.eflag_atom) ev_tally(ev,i,j,evdwl,fpair,delx,dely,delz); - } - } - } - - c.f(i,0) += fxtmp; - c.f(i,1) += fytmp; - c.f(i,2) += fztmp; - - return ev; - } - - KOKKOS_INLINE_FUNCTION - void ev_tally(EV_FLOAT &ev, const int &i, const int &j, - const F_FLOAT &epair, const F_FLOAT &fpair, const F_FLOAT &delx, - const F_FLOAT &dely, const F_FLOAT &delz) const - { - const int EFLAG = c.eflag; - const int VFLAG = c.vflag_either; - - if (EFLAG) { - if (c.eflag_atom) { - const E_FLOAT epairhalf = 0.5 * epair; - if (i < c.nlocal) c.d_eatom[i] += epairhalf; - if (j < c.nlocal) c.d_eatom[j] += epairhalf; - } - } - - if (VFLAG) { - const E_FLOAT v0 = delx*delx*fpair; - const E_FLOAT v1 = dely*dely*fpair; - const E_FLOAT v2 = delz*delz*fpair; - const E_FLOAT v3 = delx*dely*fpair; - const E_FLOAT v4 = delx*delz*fpair; - const E_FLOAT v5 = dely*delz*fpair; - - if (c.vflag_global) { - ev.v[0] += 0.5*v0; - ev.v[1] += 0.5*v1; - ev.v[2] += 0.5*v2; - ev.v[3] += 0.5*v3; - ev.v[4] += 0.5*v4; - ev.v[5] += 0.5*v5; - } - - if (c.vflag_atom) { - if (i < c.nlocal) { - c.d_vatom(i,0) += 0.5*v0; - c.d_vatom(i,1) += 0.5*v1; - c.d_vatom(i,2) += 0.5*v2; - c.d_vatom(i,3) += 0.5*v3; - c.d_vatom(i,4) += 0.5*v4; - c.d_vatom(i,5) += 0.5*v5; - } - } - } - } - - KOKKOS_INLINE_FUNCTION - void operator()(const int i) const { - compute_item<0,0>(i,list,typename DoCoul::type()); - } - - KOKKOS_INLINE_FUNCTION - void operator()(const int i, value_type &energy_virial) const { - energy_virial += compute_item<1,0>(i,list,typename DoCoul::type()); - } - - KOKKOS_INLINE_FUNCTION - void operator()(const typename Kokkos::TeamPolicy<>::member_type& team) const - {} - - KOKKOS_INLINE_FUNCTION - void operator()(const typename Kokkos::TeamPolicy<>::member_type& team, value_type &energy_virial) const - {} - -}; // Filter out Neighflags which are not supported for PairStyle // The enable_if clause will invalidate the last parameter of the function, so that @@ -867,7 +728,7 @@ int GetTeamSize(FunctorStyle& functor, int inum, int reduce_flag, int team_size, return team_size; } -// Submit ParallelFor for NEIGHFLAG=HALF,HALFTHREAD,FULL,N2 +// Submit ParallelFor for NEIGHFLAG=HALF,HALFTHREAD,FULL template EV_FLOAT pair_compute_neighlist (PairStyle* fpair, typename std::enable_if<(NEIGHFLAG&PairStyle::EnabledNeighFlags) != 0, NeighListKokkos*>::type list) { EV_FLOAT ev; @@ -918,8 +779,6 @@ EV_FLOAT pair_compute (PairStyle* fpair, NeighListKokkos (fpair,list); } else if (fpair->neighflag == HALF) { ev = pair_compute_neighlist (fpair,list); - } else if (fpair->neighflag == N2) { - ev = pair_compute_neighlist (fpair,list); } return ev; } diff --git a/src/KOKKOS/pair_lj_class2_coul_cut_kokkos.cpp b/src/KOKKOS/pair_lj_class2_coul_cut_kokkos.cpp index 37485c77f0da2a787611b12ee8f1917739682427..b8c72d7b888f70ae319090c7a7c25ade3e1e179b 100644 --- a/src/KOKKOS/pair_lj_class2_coul_cut_kokkos.cpp +++ b/src/KOKKOS/pair_lj_class2_coul_cut_kokkos.cpp @@ -309,9 +309,6 @@ void PairLJClass2CoulCutKokkos::init_style() } else if (neighflag == HALF || neighflag == HALFTHREAD) { neighbor->requests[irequest]->full = 0; neighbor->requests[irequest]->half = 1; - } else if (neighflag == N2) { - neighbor->requests[irequest]->full = 0; - neighbor->requests[irequest]->half = 0; } else { error->all(FLERR,"Cannot use chosen neighbor list style with lj/class2/coul/cut/kk"); } diff --git a/src/KOKKOS/pair_lj_class2_kokkos.cpp b/src/KOKKOS/pair_lj_class2_kokkos.cpp index dd99ea9ab5580afadcc434f10b640bc10aabfbf5..5bac4c81400825b3119930eadbd4c7088d617dca 100644 --- a/src/KOKKOS/pair_lj_class2_kokkos.cpp +++ b/src/KOKKOS/pair_lj_class2_kokkos.cpp @@ -247,9 +247,6 @@ void PairLJClass2Kokkos::init_style() } else if (neighflag == HALF || neighflag == HALFTHREAD) { neighbor->requests[irequest]->full = 0; neighbor->requests[irequest]->half = 1; - } else if (neighflag == N2) { - neighbor->requests[irequest]->full = 0; - neighbor->requests[irequest]->half = 0; } else { error->all(FLERR,"Cannot use chosen neighbor list style with lj/class2/kk"); } diff --git a/src/KOKKOS/pair_lj_class2_kokkos.h b/src/KOKKOS/pair_lj_class2_kokkos.h index ae0676c8a598ee928e217ecced709c40bcdbff8c..4bfc44ee6f9cfc2670dd17c9ab540becc79368a7 100644 --- a/src/KOKKOS/pair_lj_class2_kokkos.h +++ b/src/KOKKOS/pair_lj_class2_kokkos.h @@ -31,7 +31,7 @@ namespace LAMMPS_NS { template class PairLJClass2Kokkos : public PairLJClass2 { public: - enum {EnabledNeighFlags=FULL|HALFTHREAD|HALF|N2}; + enum {EnabledNeighFlags=FULL|HALFTHREAD|HALF}; enum {COUL_FLAG=0}; typedef DeviceType device_type; typedef ArrayTypes AT; @@ -104,15 +104,12 @@ class PairLJClass2Kokkos : public PairLJClass2 { friend class PairComputeFunctor; friend class PairComputeFunctor; friend class PairComputeFunctor; - friend class PairComputeFunctor; friend class PairComputeFunctor; friend class PairComputeFunctor; friend class PairComputeFunctor; - friend class PairComputeFunctor; friend EV_FLOAT pair_compute_neighlist(PairLJClass2Kokkos*,NeighListKokkos*); friend EV_FLOAT pair_compute_neighlist(PairLJClass2Kokkos*,NeighListKokkos*); friend EV_FLOAT pair_compute_neighlist(PairLJClass2Kokkos*,NeighListKokkos*); - friend EV_FLOAT pair_compute_neighlist(PairLJClass2Kokkos*,NeighListKokkos*); friend EV_FLOAT pair_compute(PairLJClass2Kokkos*,NeighListKokkos*); friend void pair_virial_fdotr_compute(PairLJClass2Kokkos*); }; diff --git a/src/KOKKOS/pair_lj_cut_coul_cut_kokkos.cpp b/src/KOKKOS/pair_lj_cut_coul_cut_kokkos.cpp index 36fd960c981e6da358269b90d57c8259816bf4b1..e2b57e8df799428a4f21af828e0acbd3688fd828 100644 --- a/src/KOKKOS/pair_lj_cut_coul_cut_kokkos.cpp +++ b/src/KOKKOS/pair_lj_cut_coul_cut_kokkos.cpp @@ -300,9 +300,6 @@ void PairLJCutCoulCutKokkos::init_style() } else if (neighflag == HALF || neighflag == HALFTHREAD) { neighbor->requests[irequest]->full = 0; neighbor->requests[irequest]->half = 1; - } else if (neighflag == N2) { - neighbor->requests[irequest]->full = 0; - neighbor->requests[irequest]->half = 0; } else { error->all(FLERR,"Cannot use chosen neighbor list style with lj/cut/coul/cut/kk"); } diff --git a/src/KOKKOS/pair_lj_cut_coul_debye_kokkos.cpp b/src/KOKKOS/pair_lj_cut_coul_debye_kokkos.cpp index 3810a0140b528e5ae97b9b6a17b9f182bb6f2dc5..bc8369fd6514eca560e8c50551b74550e66b8146 100644 --- a/src/KOKKOS/pair_lj_cut_coul_debye_kokkos.cpp +++ b/src/KOKKOS/pair_lj_cut_coul_debye_kokkos.cpp @@ -329,9 +329,6 @@ void PairLJCutCoulDebyeKokkos::init_style() } else if (neighflag == HALF || neighflag == HALFTHREAD) { neighbor->requests[irequest]->full = 0; neighbor->requests[irequest]->half = 1; - } else if (neighflag == N2) { - neighbor->requests[irequest]->full = 0; - neighbor->requests[irequest]->half = 0; } else { error->all(FLERR,"Cannot use chosen neighbor list style with lj/cut/coul/debye/kk"); } diff --git a/src/KOKKOS/pair_lj_cut_coul_dsf_kokkos.cpp b/src/KOKKOS/pair_lj_cut_coul_dsf_kokkos.cpp index b8818b109815e05cd39482e3fa86a180bd5fb92f..feb6a5813658ca3046e294df14fe7750e7776016 100644 --- a/src/KOKKOS/pair_lj_cut_coul_dsf_kokkos.cpp +++ b/src/KOKKOS/pair_lj_cut_coul_dsf_kokkos.cpp @@ -322,9 +322,6 @@ void PairLJCutCoulDSFKokkos::init_style() } else if (neighflag == HALF || neighflag == HALFTHREAD) { neighbor->requests[irequest]->full = 0; neighbor->requests[irequest]->half = 1; - } else if (neighflag == N2) { - neighbor->requests[irequest]->full = 0; - neighbor->requests[irequest]->half = 0; } else { error->all(FLERR,"Cannot use chosen neighbor list style with lj/cut/coul/cut/kk"); } diff --git a/src/KOKKOS/pair_lj_cut_kokkos.cpp b/src/KOKKOS/pair_lj_cut_kokkos.cpp index a4b2e90e07026df2b0bead2b4d1411c6d7b36ce0..5eb0a5b91a371d2b1c715147526606b2e3222020 100644 --- a/src/KOKKOS/pair_lj_cut_kokkos.cpp +++ b/src/KOKKOS/pair_lj_cut_kokkos.cpp @@ -241,9 +241,6 @@ void PairLJCutKokkos::init_style() } else if (neighflag == HALF || neighflag == HALFTHREAD) { neighbor->requests[irequest]->full = 0; neighbor->requests[irequest]->half = 1; - } else if (neighflag == N2) { - neighbor->requests[irequest]->full = 0; - neighbor->requests[irequest]->half = 0; } else { error->all(FLERR,"Cannot use chosen neighbor list style with lj/cut/kk"); } diff --git a/src/KOKKOS/pair_lj_cut_kokkos.h b/src/KOKKOS/pair_lj_cut_kokkos.h index 7e2b8fd91a86fbb5d6aff9f23e32df3ea3a25e67..122aef5a1e489ec684201a624f8b3d8046104aee 100644 --- a/src/KOKKOS/pair_lj_cut_kokkos.h +++ b/src/KOKKOS/pair_lj_cut_kokkos.h @@ -31,7 +31,7 @@ namespace LAMMPS_NS { template class PairLJCutKokkos : public PairLJCut { public: - enum {EnabledNeighFlags=FULL|HALFTHREAD|HALF|N2}; + enum {EnabledNeighFlags=FULL|HALFTHREAD|HALF}; enum {COUL_FLAG=0}; typedef DeviceType device_type; typedef ArrayTypes AT; @@ -99,15 +99,12 @@ class PairLJCutKokkos : public PairLJCut { friend class PairComputeFunctor; friend class PairComputeFunctor; friend class PairComputeFunctor; - friend class PairComputeFunctor; friend class PairComputeFunctor; friend class PairComputeFunctor; friend class PairComputeFunctor; - friend class PairComputeFunctor; friend EV_FLOAT pair_compute_neighlist(PairLJCutKokkos*,NeighListKokkos*); friend EV_FLOAT pair_compute_neighlist(PairLJCutKokkos*,NeighListKokkos*); friend EV_FLOAT pair_compute_neighlist(PairLJCutKokkos*,NeighListKokkos*); - friend EV_FLOAT pair_compute_neighlist(PairLJCutKokkos*,NeighListKokkos*); friend EV_FLOAT pair_compute(PairLJCutKokkos*,NeighListKokkos*); friend void pair_virial_fdotr_compute(PairLJCutKokkos*); }; diff --git a/src/KOKKOS/pair_lj_expand_kokkos.cpp b/src/KOKKOS/pair_lj_expand_kokkos.cpp index 496a7a76accb3288fb12da5807aabd955e89dcae..0409eda40141ec716a44a891ab6dfc8ab6e88e1f 100644 --- a/src/KOKKOS/pair_lj_expand_kokkos.cpp +++ b/src/KOKKOS/pair_lj_expand_kokkos.cpp @@ -249,9 +249,6 @@ void PairLJExpandKokkos::init_style() } else if (neighflag == HALF || neighflag == HALFTHREAD) { neighbor->requests[irequest]->full = 0; neighbor->requests[irequest]->half = 1; - } else if (neighflag == N2) { - neighbor->requests[irequest]->full = 0; - neighbor->requests[irequest]->half = 0; } else { error->all(FLERR,"Cannot use chosen neighbor list style with lj/expand/kk"); } diff --git a/src/KOKKOS/pair_lj_expand_kokkos.h b/src/KOKKOS/pair_lj_expand_kokkos.h index 093031f7d71995a96c691b14097c2f3802c76237..bdd0bf5870222a81b5a2090b09f9a315f17c8d2d 100644 --- a/src/KOKKOS/pair_lj_expand_kokkos.h +++ b/src/KOKKOS/pair_lj_expand_kokkos.h @@ -31,7 +31,7 @@ namespace LAMMPS_NS { template class PairLJExpandKokkos : public PairLJExpand { public: - enum {EnabledNeighFlags=FULL|HALFTHREAD|HALF|N2}; + enum {EnabledNeighFlags=FULL|HALFTHREAD|HALF}; enum {COUL_FLAG=0}; typedef DeviceType device_type; typedef ArrayTypes AT; @@ -105,15 +105,12 @@ class PairLJExpandKokkos : public PairLJExpand { friend class PairComputeFunctor; friend class PairComputeFunctor; friend class PairComputeFunctor; - friend class PairComputeFunctor; friend class PairComputeFunctor; friend class PairComputeFunctor; friend class PairComputeFunctor; - friend class PairComputeFunctor; friend EV_FLOAT pair_compute_neighlist(PairLJExpandKokkos*,NeighListKokkos*); friend EV_FLOAT pair_compute_neighlist(PairLJExpandKokkos*,NeighListKokkos*); friend EV_FLOAT pair_compute_neighlist(PairLJExpandKokkos*,NeighListKokkos*); - friend EV_FLOAT pair_compute_neighlist(PairLJExpandKokkos*,NeighListKokkos*); friend EV_FLOAT pair_compute(PairLJExpandKokkos*,NeighListKokkos*); friend void pair_virial_fdotr_compute(PairLJExpandKokkos*); }; diff --git a/src/KOKKOS/pair_lj_sdk_kokkos.cpp b/src/KOKKOS/pair_lj_sdk_kokkos.cpp index 645f8a9159a13546fb32f6c4c21d934c2c2d1126..70d04385d0a7d7fd99dc8e6444141abc5260cfc5 100644 --- a/src/KOKKOS/pair_lj_sdk_kokkos.cpp +++ b/src/KOKKOS/pair_lj_sdk_kokkos.cpp @@ -279,9 +279,6 @@ void PairLJSDKKokkos::init_style() } else if (neighflag == HALF || neighflag == HALFTHREAD) { neighbor->requests[irequest]->full = 0; neighbor->requests[irequest]->half = 1; - } else if (neighflag == N2) { - neighbor->requests[irequest]->full = 0; - neighbor->requests[irequest]->half = 0; } else { error->all(FLERR,"Cannot use chosen neighbor list style with lj/sdk/kk"); } diff --git a/src/KOKKOS/pair_lj_sdk_kokkos.h b/src/KOKKOS/pair_lj_sdk_kokkos.h index f313c4342f994272ed2026bfce745052a0e76e48..db71dc46776c544a7e6adbd7a86c6820bd176173 100644 --- a/src/KOKKOS/pair_lj_sdk_kokkos.h +++ b/src/KOKKOS/pair_lj_sdk_kokkos.h @@ -31,7 +31,7 @@ namespace LAMMPS_NS { template class PairLJSDKKokkos : public PairLJSDK { public: - enum {EnabledNeighFlags=FULL|HALFTHREAD|HALF|N2}; + enum {EnabledNeighFlags=FULL|HALFTHREAD|HALF}; enum {COUL_FLAG=0}; typedef DeviceType device_type; typedef ArrayTypes AT; @@ -100,15 +100,12 @@ class PairLJSDKKokkos : public PairLJSDK { friend class PairComputeFunctor; friend class PairComputeFunctor; friend class PairComputeFunctor; - friend class PairComputeFunctor; friend class PairComputeFunctor; friend class PairComputeFunctor; friend class PairComputeFunctor; - friend class PairComputeFunctor; friend EV_FLOAT pair_compute_neighlist(PairLJSDKKokkos*,NeighListKokkos*); friend EV_FLOAT pair_compute_neighlist(PairLJSDKKokkos*,NeighListKokkos*); friend EV_FLOAT pair_compute_neighlist(PairLJSDKKokkos*,NeighListKokkos*); - friend EV_FLOAT pair_compute_neighlist(PairLJSDKKokkos*,NeighListKokkos*); friend EV_FLOAT pair_compute(PairLJSDKKokkos*,NeighListKokkos*); friend void pair_virial_fdotr_compute(PairLJSDKKokkos*); }; diff --git a/src/KOKKOS/pair_morse_kokkos.cpp b/src/KOKKOS/pair_morse_kokkos.cpp index 4e88c72518d24447c4b5698559765d3093d9c019..16d4d8a0a324004f49d103abf6007f429ed576e0 100644 --- a/src/KOKKOS/pair_morse_kokkos.cpp +++ b/src/KOKKOS/pair_morse_kokkos.cpp @@ -258,9 +258,6 @@ void PairMorseKokkos::init_style() } else if (neighflag == HALF || neighflag == HALFTHREAD) { neighbor->requests[irequest]->full = 0; neighbor->requests[irequest]->half = 1; - } else if (neighflag == N2) { - neighbor->requests[irequest]->full = 0; - neighbor->requests[irequest]->half = 0; } else { error->all(FLERR,"Cannot use chosen neighbor list style with morse/kk"); } diff --git a/src/KOKKOS/pair_morse_kokkos.h b/src/KOKKOS/pair_morse_kokkos.h index f9cce941a567b3ccf3185d438aa55d65a0c25334..ff3c5524373f0962c1938d6810bb8f6e68dc9cfe 100644 --- a/src/KOKKOS/pair_morse_kokkos.h +++ b/src/KOKKOS/pair_morse_kokkos.h @@ -31,7 +31,7 @@ namespace LAMMPS_NS { template class PairMorseKokkos : public PairMorse { public: - enum {EnabledNeighFlags=FULL|HALFTHREAD|HALF|N2}; + enum {EnabledNeighFlags=FULL|HALFTHREAD|HALF}; enum {COUL_FLAG=0}; typedef DeviceType device_type; PairMorseKokkos(class LAMMPS *); @@ -98,15 +98,12 @@ class PairMorseKokkos : public PairMorse { friend class PairComputeFunctor; friend class PairComputeFunctor; friend class PairComputeFunctor; - friend class PairComputeFunctor; friend class PairComputeFunctor; friend class PairComputeFunctor; friend class PairComputeFunctor; - friend class PairComputeFunctor; friend EV_FLOAT pair_compute_neighlist(PairMorseKokkos*,NeighListKokkos*); friend EV_FLOAT pair_compute_neighlist(PairMorseKokkos*,NeighListKokkos*); friend EV_FLOAT pair_compute_neighlist(PairMorseKokkos*,NeighListKokkos*); - friend EV_FLOAT pair_compute_neighlist(PairMorseKokkos*,NeighListKokkos*); friend EV_FLOAT pair_compute(PairMorseKokkos*,NeighListKokkos*); friend void pair_virial_fdotr_compute(PairMorseKokkos*); }; diff --git a/src/KOKKOS/pair_reaxc_kokkos.cpp b/src/KOKKOS/pair_reaxc_kokkos.cpp index bec3f2e655850ccca34d71d6908d1fc76f11a2c5..5326e926e5433a5ca583982ce58e40a1a465478c 100644 --- a/src/KOKKOS/pair_reaxc_kokkos.cpp +++ b/src/KOKKOS/pair_reaxc_kokkos.cpp @@ -152,16 +152,12 @@ void PairReaxCKokkos::init_style() neighbor->requests[irequest]-> kokkos_device = std::is_same::value; - if (neighflag == FULL) { - neighbor->requests[irequest]->full = 1; - neighbor->requests[irequest]->half = 0; - neighbor->requests[irequest]->ghost = 1; - } else if (neighflag == HALF || neighflag == HALFTHREAD) { + if (neighflag == HALF || neighflag == HALFTHREAD) { neighbor->requests[irequest]->full = 0; neighbor->requests[irequest]->half = 1; neighbor->requests[irequest]->ghost = 1; } else { - error->all(FLERR,"Cannot use chosen neighbor list style with reax/c/kk"); + error->all(FLERR,"Must use half neighbor list with pair style reax/c/kk"); } allocate(); @@ -665,8 +661,6 @@ void PairReaxCKokkos::compute(int eflag_in, int vflag_in) eflag = eflag_in; vflag = vflag_in; - if (neighflag == FULL) no_virial_fdotr_compute = 1; - ev_init(eflag,vflag); atomKK->sync(execution_space,datamask_read); @@ -743,11 +737,6 @@ void PairReaxCKokkos::compute(int eflag_in, int vflag_in) Kokkos::parallel_reduce(Kokkos::RangePolicy >(0,inum),*this,ev); else Kokkos::parallel_for(Kokkos::RangePolicy >(0,inum),*this); - } else if (neighflag == FULL) { - if (evflag) - Kokkos::parallel_reduce(Kokkos::RangePolicy >(0,inum),*this,ev); - else - Kokkos::parallel_for(Kokkos::RangePolicy >(0,inum),*this); } } else { if (neighflag == HALF) { @@ -760,11 +749,6 @@ void PairReaxCKokkos::compute(int eflag_in, int vflag_in) Kokkos::parallel_reduce(Kokkos::RangePolicy >(0,inum),*this,ev); else Kokkos::parallel_for(Kokkos::RangePolicy >(0,inum),*this); - } else if (neighflag == FULL) { - if (evflag) - Kokkos::parallel_reduce(Kokkos::RangePolicy >(0,inum),*this,ev); - else - Kokkos::parallel_for(Kokkos::RangePolicy >(0,inum),*this); } } ev_all += ev; @@ -809,8 +793,6 @@ void PairReaxCKokkos::compute(int eflag_in, int vflag_in) Kokkos::parallel_for(Kokkos::RangePolicy >(0,ignum),*this); else if (neighflag == HALFTHREAD) Kokkos::parallel_for(Kokkos::RangePolicy >(0,ignum),*this); - else //(neighflag == FULL) - Kokkos::parallel_for(Kokkos::RangePolicy(0,ignum),*this); k_resize_bo.modify(); k_resize_bo.sync(); @@ -853,11 +835,7 @@ void PairReaxCKokkos::compute(int eflag_in, int vflag_in) Kokkos::Experimental::contribute(d_total_bo, dup_total_bo); // needed in BondOrder1 // Bond order - if (neighflag == HALF) { - Kokkos::parallel_for(Kokkos::RangePolicy(0,ignum),*this); - } else if (neighflag == HALFTHREAD) { - Kokkos::parallel_for(Kokkos::RangePolicy(0,ignum),*this); - } + Kokkos::parallel_for(Kokkos::RangePolicy(0,ignum),*this); Kokkos::parallel_for(Kokkos::RangePolicy(0,ignum),*this); Kokkos::parallel_for(Kokkos::RangePolicy(0,ignum),*this); @@ -1044,14 +1022,14 @@ void PairReaxCKokkos::compute(int eflag_in, int vflag_in) // free duplicated memory if (need_dup) { dup_f = decltype(dup_f)(); + dup_eatom = decltype(dup_eatom)(); + dup_vatom = decltype(dup_vatom)(); dup_dDeltap_self = decltype(dup_dDeltap_self)(); dup_total_bo = decltype(dup_total_bo)(); dup_CdDelta = decltype(dup_CdDelta)(); //dup_Cdbo = decltype(dup_Cdbo)(); //dup_Cdbopi = decltype(dup_Cdbopi)(); //dup_Cdbopi2 = decltype(dup_Cdbopi2)(); - dup_eatom = decltype(dup_eatom)(); - dup_vatom = decltype(dup_vatom)(); } } @@ -1119,18 +1097,16 @@ void PairReaxCKokkos::operator()(PairReaxComputeLJCoulomb= nlocal) { - if (itag > jtag) { - if ((itag+jtag) % 2 == 0) continue; - } else if (itag < jtag) { - if ((itag+jtag) % 2 == 1) continue; - } else { - if (x(j,2) < ztmp) continue; - if (x(j,2) == ztmp && x(j,1) < ytmp) continue; - if (x(j,2) == ztmp && x(j,1) == ytmp && x(j,0) < xtmp) continue; - } + // skip half of the interactions + if (j >= nlocal) { + if (itag > jtag) { + if ((itag+jtag) % 2 == 0) continue; + } else if (itag < jtag) { + if ((itag+jtag) % 2 == 1) continue; + } else { + if (x(j,2) < ztmp) continue; + if (x(j,2) == ztmp && x(j,1) < ytmp) continue; + if (x(j,2) == ztmp && x(j,1) == ytmp && x(j,0) < xtmp) continue; } } @@ -1215,19 +1191,12 @@ void PairReaxCKokkos::operator()(PairReaxComputeLJCoulombtemplate ev_tally(ev,i,j,evdwl+ecoul,-ftotal,delx,dely,delz); } @@ -1276,18 +1245,16 @@ void PairReaxCKokkos::operator()(PairReaxComputeTabulatedLJCoulomb= nlocal) { - if (itag > jtag) { - if ((itag+jtag) % 2 == 0) continue; - } else if (itag < jtag) { - if ((itag+jtag) % 2 == 1) continue; - } else { - if (x(j,2) < ztmp) continue; - if (x(j,2) == ztmp && x(j,1) < ytmp) continue; - if (x(j,2) == ztmp && x(j,1) == ytmp && x(j,0) < xtmp) continue; - } + // skip half of the interactions + if (j >= nlocal) { + if (itag > jtag) { + if ((itag+jtag) % 2 == 0) continue; + } else if (itag < jtag) { + if ((itag+jtag) % 2 == 1) continue; + } else { + if (x(j,2) < ztmp) continue; + if (x(j,2) == ztmp && x(j,1) < ytmp) continue; + if (x(j,2) == ztmp && x(j,1) == ytmp && x(j,0) < xtmp) continue; } } @@ -1331,19 +1298,12 @@ void PairReaxCKokkos::operator()(PairReaxComputeTabulatedLJCoulombtemplate ev_tally(ev,i,j,evdwl+ecoul,-ftotal,delx,dely,delz); } @@ -1436,10 +1396,8 @@ KOKKOS_INLINE_FUNCTION void PairReaxCKokkos::operator()(PairReaxZero, const int &n) const { d_total_bo(n) = 0.0; d_CdDelta(n) = 0.0; - if (neighflag != FULL) { - d_bo_num(n) = 0.0; - d_hb_num(n) = 0.0; - } + d_bo_num(n) = 0.0; + d_hb_num(n) = 0.0; for (int j = 0; j < 3; j++) d_dDeltap_self(n,j) = 0.0; } @@ -1850,261 +1808,6 @@ void PairReaxCKokkos::operator()(PairReaxBondOrder1, const int &ii) /* ---------------------------------------------------------------------- */ -template -template -KOKKOS_INLINE_FUNCTION -void PairReaxCKokkos::operator()(PairReaxBuildListsHalf_LessAtomics, const int &ii) const { - - if (d_resize_bo() || d_resize_hb()) - return; - - const int i = d_ilist[ii]; - const X_FLOAT xtmp = x(i,0); - const X_FLOAT ytmp = x(i,1); - const X_FLOAT ztmp = x(i,2); - const int itype = type(i); - const tagint itag = tag(i); - const int jnum = d_numneigh[i]; - - F_FLOAT C12, C34, C56, BO_s, BO_pi, BO_pi2, BO, delij[3]; - - int j_index,i_index; - d_bo_first[i] = i*maxbo; - const int bo_first_i = d_bo_first[i]; - - int ihb = -1; - int jhb = -1; - - int hb_first_i; - if (cut_hbsq > 0.0) { - ihb = paramssing(itype).p_hbond; - if (ihb == 1) { - d_hb_first[i] = i*maxhb; - hb_first_i = d_hb_first[i]; - } - } - - for (int jj = 0; jj < jnum; jj++) { - int j = d_neighbors(i,jj); - j &= NEIGHMASK; - const tagint jtag = tag(j); - - d_bo_first[j] = j*maxbo; - d_hb_first[j] = j*maxhb; - const int jtype = type(j); - - delij[0] = x(j,0) - xtmp; - delij[1] = x(j,1) - ytmp; - delij[2] = x(j,2) - ztmp; - const F_FLOAT rsq = delij[0]*delij[0] + delij[1]*delij[1] + delij[2]*delij[2]; - - double cutoffsq; - if(i < nlocal) cutoffsq = MAX(cut_bosq,cut_hbsq); - else cutoffsq = cut_bosq; - if (rsq > cutoffsq) continue; - - // hbond list - if (i < nlocal && cut_hbsq > 0.0 && (ihb == 1 || ihb == 2) && rsq <= cut_hbsq) { - jhb = paramssing(jtype).p_hbond; - if (ihb == 1 && jhb == 2) { - if (NEIGHFLAG == HALF) { - j_index = hb_first_i + d_hb_num[i]; - d_hb_num[i]++; - } else { - j_index = hb_first_i + Kokkos::atomic_fetch_add(&d_hb_num[i],1); - } - - const int jj_index = j_index - hb_first_i; - - if (jj_index >= maxhb) { - d_resize_hb() = 1; - return; - } - - d_hb_list[j_index] = j; - } else if ( j < nlocal && ihb == 2 && jhb == 1) { - if (NEIGHFLAG == HALF) { - i_index = d_hb_first[j] + d_hb_num[j]; - d_hb_num[j]++; - } else { - i_index = d_hb_first[j] + Kokkos::atomic_fetch_add(&d_hb_num[j],1); - } - - const int ii_index = i_index - d_hb_first[j]; - - if (ii_index >= maxhb) { - d_resize_hb() = 1; - return; - } - - d_hb_list[i_index] = i; - } - } - - if (rsq > cut_bosq) continue; - - // bond_list - const F_FLOAT rij = sqrt(rsq); - const F_FLOAT p_bo1 = paramstwbp(itype,jtype).p_bo1; - const F_FLOAT p_bo2 = paramstwbp(itype,jtype).p_bo2; - const F_FLOAT p_bo3 = paramstwbp(itype,jtype).p_bo3; - const F_FLOAT p_bo4 = paramstwbp(itype,jtype).p_bo4; - const F_FLOAT p_bo5 = paramstwbp(itype,jtype).p_bo5; - const F_FLOAT p_bo6 = paramstwbp(itype,jtype).p_bo6; - const F_FLOAT r_s = paramstwbp(itype,jtype).r_s; - const F_FLOAT r_pi = paramstwbp(itype,jtype).r_pi; - const F_FLOAT r_pi2 = paramstwbp(itype,jtype).r_pi2; - - if (paramssing(itype).r_s > 0.0 && paramssing(jtype).r_s > 0.0) { - C12 = p_bo1*pow(rij/r_s,p_bo2); - BO_s = (1.0+bo_cut)*exp(C12); - } - else BO_s = C12 = 0.0; - - if (paramssing(itype).r_pi > 0.0 && paramssing(jtype).r_pi > 0.0) { - C34 = p_bo3*pow(rij/r_pi,p_bo4); - BO_pi = exp(C34); - } - else BO_pi = C34 = 0.0; - - if (paramssing(itype).r_pi2 > 0.0 && paramssing(jtype).r_pi2 > 0.0) { - C56 = p_bo5*pow(rij/r_pi2,p_bo6); - BO_pi2 = exp(C56); - } - else BO_pi2 = C56 = 0.0; - - BO = BO_s + BO_pi + BO_pi2; - if (BO < bo_cut) continue; - - if (NEIGHFLAG == HALF) { - j_index = bo_first_i + d_bo_num[i]; - i_index = d_bo_first[j] + d_bo_num[j]; - d_bo_num[i]++; - d_bo_num[j]++; - } else { - j_index = bo_first_i + Kokkos::atomic_fetch_add(&d_bo_num[i],1); - i_index = d_bo_first[j] + Kokkos::atomic_fetch_add(&d_bo_num[j],1); - } - - const int jj_index = j_index - bo_first_i; - const int ii_index = i_index - d_bo_first[j]; - - if (jj_index >= maxbo || ii_index >= maxbo) { - d_resize_bo() = 1; - return; - } - - d_bo_list[j_index] = j; - d_bo_list[i_index] = i; - } - -} - -/* ---------------------------------------------------------------------- */ - -template -KOKKOS_INLINE_FUNCTION -void PairReaxCKokkos::operator()(PairReaxBondOrder1_LessAtomics, const int &ii) const { - - F_FLOAT C12, C34, C56, BO_s, BO_pi, BO_pi2, BO, delij[3], dBOp_i[3], dln_BOp_pi_i[3], dln_BOp_pi2_i[3]; - - const int i = d_ilist[ii]; - const X_FLOAT xtmp = x(i,0); - const X_FLOAT ytmp = x(i,1); - const X_FLOAT ztmp = x(i,2); - const int itype = type(i); - - const int j_start = d_bo_first[i]; - const int j_end = j_start + d_bo_num[i]; - - F_FLOAT total_bo = 0.0; - - for (int jj = j_start; jj < j_end; jj++) { - int j = d_bo_list[jj]; - j &= NEIGHMASK; - delij[0] = x(j,0) - xtmp; - delij[1] = x(j,1) - ytmp; - delij[2] = x(j,2) - ztmp; - const F_FLOAT rsq = delij[0]*delij[0] + delij[1]*delij[1] + delij[2]*delij[2]; - const F_FLOAT rij = sqrt(rsq); - const int jtype = type(j); - const int j_index = jj - j_start; - - // calculate uncorrected BO and total bond order - - const F_FLOAT p_bo1 = paramstwbp(itype,jtype).p_bo1; - const F_FLOAT p_bo2 = paramstwbp(itype,jtype).p_bo2; - const F_FLOAT p_bo3 = paramstwbp(itype,jtype).p_bo3; - const F_FLOAT p_bo4 = paramstwbp(itype,jtype).p_bo4; - const F_FLOAT p_bo5 = paramstwbp(itype,jtype).p_bo5; - const F_FLOAT p_bo6 = paramstwbp(itype,jtype).p_bo6; - const F_FLOAT r_s = paramstwbp(itype,jtype).r_s; - const F_FLOAT r_pi = paramstwbp(itype,jtype).r_pi; - const F_FLOAT r_pi2 = paramstwbp(itype,jtype).r_pi2; - - if (paramssing(itype).r_s > 0.0 && paramssing(jtype).r_s > 0.0) { - C12 = p_bo1*pow(rij/r_s,p_bo2); - BO_s = (1.0+bo_cut)*exp(C12); - } - else BO_s = C12 = 0.0; - - if (paramssing(itype).r_pi > 0.0 && paramssing(jtype).r_pi > 0.0) { - C34 = p_bo3*pow(rij/r_pi,p_bo4); - BO_pi = exp(C34); - } - else BO_pi = C34 = 0.0; - - if (paramssing(itype).r_pi2 > 0.0 && paramssing(jtype).r_pi2 > 0.0) { - C56 = p_bo5*pow(rij/r_pi2,p_bo6); - BO_pi2 = exp(C56); - } - else BO_pi2 = C56 = 0.0; - - BO = BO_s + BO_pi + BO_pi2; - if (BO < bo_cut) continue; - - d_BO(i,j_index) = BO; - d_BO_s(i,j_index) = BO; - d_BO_pi(i,j_index) = BO_pi; - d_BO_pi2(i,j_index) = BO_pi2; - - F_FLOAT Cln_BOp_s = p_bo2 * C12 / rij / rij; - F_FLOAT Cln_BOp_pi = p_bo4 * C34 / rij / rij; - F_FLOAT Cln_BOp_pi2 = p_bo6 * C56 / rij / rij; - - if (nlocal == 0) - Cln_BOp_s = Cln_BOp_pi = Cln_BOp_pi2 = 0.0; - - for (int d = 0; d < 3; d++) dln_BOp_pi_i[d] = -(BO_pi*Cln_BOp_pi)*delij[d]; - for (int d = 0; d < 3; d++) dln_BOp_pi2_i[d] = -(BO_pi2*Cln_BOp_pi2)*delij[d]; - for (int d = 0; d < 3; d++) dBOp_i[d] = -(BO_s*Cln_BOp_s+BO_pi*Cln_BOp_pi+BO_pi2*Cln_BOp_pi2)*delij[d]; - for (int d = 0; d < 3; d++) d_dDeltap_self(i,d) += dBOp_i[d]; - - d_dln_BOp_pix(i,j_index) = dln_BOp_pi_i[0]; - d_dln_BOp_piy(i,j_index) = dln_BOp_pi_i[1]; - d_dln_BOp_piz(i,j_index) = dln_BOp_pi_i[2]; - - d_dln_BOp_pi2x(i,j_index) = dln_BOp_pi2_i[0]; - d_dln_BOp_pi2y(i,j_index) = dln_BOp_pi2_i[1]; - d_dln_BOp_pi2z(i,j_index) = dln_BOp_pi2_i[2]; - - d_dBOpx(i,j_index) = dBOp_i[0]; - d_dBOpy(i,j_index) = dBOp_i[1]; - d_dBOpz(i,j_index) = dBOp_i[2]; - - d_BO(i,j_index) -= bo_cut; - d_BO_s(i,j_index) -= bo_cut; - total_bo += d_BO(i,j_index); - } - d_total_bo[i] += total_bo; - - const F_FLOAT val_i = paramssing(itype).valency; - d_Deltap[i] = d_total_bo[i] - val_i; - d_Deltap_boc[i] = d_total_bo[i] - paramssing(itype).valency_val; -} - -/* ---------------------------------------------------------------------- */ - template KOKKOS_INLINE_FUNCTION void PairReaxCKokkos::operator()(PairReaxBondOrder2, const int &ii) const { @@ -3728,7 +3431,7 @@ void PairReaxCKokkos::ev_tally(EV_FLOAT_REAX &ev, const int &i, cons if (eflag_atom) { const E_FLOAT epairhalf = 0.5 * epair; a_eatom[i] += epairhalf; - if (NEIGHFLAG != FULL) a_eatom[j] += epairhalf; + a_eatom[j] += epairhalf; } if (VFLAG) { @@ -3740,21 +3443,12 @@ void PairReaxCKokkos::ev_tally(EV_FLOAT_REAX &ev, const int &i, cons const E_FLOAT v5 = dely*delz*fpair; if (vflag_global) { - if (NEIGHFLAG != FULL) { - ev.v[0] += v0; - ev.v[1] += v1; - ev.v[2] += v2; - ev.v[3] += v3; - ev.v[4] += v4; - ev.v[5] += v5; - } else { - ev.v[0] += 0.5*v0; - ev.v[1] += 0.5*v1; - ev.v[2] += 0.5*v2; - ev.v[3] += 0.5*v3; - ev.v[4] += 0.5*v4; - ev.v[5] += 0.5*v5; - } + ev.v[0] += v0; + ev.v[1] += v1; + ev.v[2] += v2; + ev.v[3] += v3; + ev.v[4] += v4; + ev.v[5] += v5; } if (vflag_atom) { @@ -3764,15 +3458,12 @@ void PairReaxCKokkos::ev_tally(EV_FLOAT_REAX &ev, const int &i, cons a_vatom(i,3) += 0.5*v3; a_vatom(i,4) += 0.5*v4; a_vatom(i,5) += 0.5*v5; - - if (NEIGHFLAG != FULL) { - a_vatom(j,0) += 0.5*v0; - a_vatom(j,1) += 0.5*v1; - a_vatom(j,2) += 0.5*v2; - a_vatom(j,3) += 0.5*v3; - a_vatom(j,4) += 0.5*v4; - a_vatom(j,5) += 0.5*v5; - } + a_vatom(j,0) += 0.5*v0; + a_vatom(j,1) += 0.5*v1; + a_vatom(j,2) += 0.5*v2; + a_vatom(j,3) += 0.5*v3; + a_vatom(j,4) += 0.5*v4; + a_vatom(j,5) += 0.5*v5; } } } diff --git a/src/KOKKOS/pair_reaxc_kokkos.h b/src/KOKKOS/pair_reaxc_kokkos.h index 93ca4468ecf25a472f2a316ce573e4a24a7999a6..24a56b7076a038e2c4b3df1dbb6bc05249e83ed5 100644 --- a/src/KOKKOS/pair_reaxc_kokkos.h +++ b/src/KOKKOS/pair_reaxc_kokkos.h @@ -64,9 +64,6 @@ struct PairReaxBuildListsFull{}; template struct PairReaxBuildListsHalf{}; -template -struct PairReaxBuildListsHalf_LessAtomics{}; - struct PairReaxZero{}; struct PairReaxZeroEAtom{}; @@ -75,8 +72,6 @@ struct PairReaxZeroVAtom{}; struct PairReaxBondOrder1{}; -struct PairReaxBondOrder1_LessAtomics{}; - struct PairReaxBondOrder2{}; struct PairReaxBondOrder3{}; @@ -164,10 +159,6 @@ class PairReaxCKokkos : public PairReaxC { KOKKOS_INLINE_FUNCTION void operator()(PairReaxBuildListsHalf, const int&) const; - template - KOKKOS_INLINE_FUNCTION - void operator()(PairReaxBuildListsHalf_LessAtomics, const int&) const; - KOKKOS_INLINE_FUNCTION void operator()(PairReaxZero, const int&) const; @@ -180,9 +171,6 @@ class PairReaxCKokkos : public PairReaxC { KOKKOS_INLINE_FUNCTION void operator()(PairReaxBondOrder1, const int&) const; - KOKKOS_INLINE_FUNCTION - void operator()(PairReaxBondOrder1_LessAtomics, const int&) const; - KOKKOS_INLINE_FUNCTION void operator()(PairReaxBondOrder2, const int&) const; @@ -437,7 +425,7 @@ class PairReaxCKokkos : public PairReaxC { typename AT::t_ffloat_2d_dl d_sum_ovun; typename AT::t_ffloat_2d_dl d_dBOpx, d_dBOpy, d_dBOpz; - int neighflag,newton_pair, maxnumneigh, maxhb, maxbo; + int neighflag, newton_pair, maxnumneigh, maxhb, maxbo; int nlocal,nall,eflag,vflag; F_FLOAT cut_nbsq, cut_hbsq, cut_bosq, bo_cut, thb_cut, thb_cutsq; F_FLOAT bo_cut_bond; diff --git a/src/KOKKOS/pair_snap_kokkos.h b/src/KOKKOS/pair_snap_kokkos.h index f5e5c63454797caa772411631102f01b6a490851..d6b028640da3c487bda2c9e71e3be9501ae3cae0 100644 --- a/src/KOKKOS/pair_snap_kokkos.h +++ b/src/KOKKOS/pair_snap_kokkos.h @@ -112,7 +112,7 @@ public: void operator() (TagPairSNAPComputeDeidrjCPU,const typename Kokkos::TeamPolicy::member_type& team) const; KOKKOS_INLINE_FUNCTION - void operator() (TagPairSNAPBeta,const typename Kokkos::TeamPolicy::member_type& team) const; + void operator() (TagPairSNAPBeta,const int& ii) const; template KOKKOS_INLINE_FUNCTION diff --git a/src/KOKKOS/pair_snap_kokkos_impl.h b/src/KOKKOS/pair_snap_kokkos_impl.h index e838b6a070a6ff58dcff72e8c0f7f900d828e6a9..ad1f8e9f57d3d8cbcb0f4ccdf6950360204ecf3d 100644 --- a/src/KOKKOS/pair_snap_kokkos_impl.h +++ b/src/KOKKOS/pair_snap_kokkos_impl.h @@ -284,13 +284,8 @@ void PairSNAPKokkos::compute(int eflag_in, int vflag_in) } //Compute beta = dE_i/dB_i for all i in list - { - int vector_length = vector_length_default; - int team_size = team_size_default; - check_team_size_for(chunk_size,team_size,vector_length); - typename Kokkos::TeamPolicy policy_beta(chunk_size,team_size,vector_length); - Kokkos::parallel_for("ComputeBeta",policy_beta,*this); - } + typename Kokkos::RangePolicy policy_beta(0,chunk_size); + Kokkos::parallel_for("ComputeBeta",policy_beta,*this); //ZeroYi { @@ -424,10 +419,8 @@ void PairSNAPKokkos::compute(int eflag_in, int vflag_in) template KOKKOS_INLINE_FUNCTION -void PairSNAPKokkos::operator() (TagPairSNAPBeta,const typename Kokkos::TeamPolicy::member_type& team) const { +void PairSNAPKokkos::operator() (TagPairSNAPBeta,const int& ii) const { - // TODO: use RangePolicy instead, or thread over ncoeff? - int ii = team.league_rank(); const int i = d_ilist[ii + chunk_offset]; const int itype = type[i]; const int ielem = d_map[itype]; diff --git a/src/KOKKOS/pair_table_kokkos.cpp b/src/KOKKOS/pair_table_kokkos.cpp index a86db70d4d542df0858fd9e17c793c5cd43f1924..b2aaaf1566d83f2ec8d17df6acf99cf2a0ae48ed 100644 --- a/src/KOKKOS/pair_table_kokkos.cpp +++ b/src/KOKKOS/pair_table_kokkos.cpp @@ -136,12 +136,6 @@ void PairTableKokkos::compute_style(int eflag_in, int vflag_in) if (eflag || vflag) Kokkos::parallel_reduce(list->inum,f,ev); else Kokkos::parallel_for(list->inum,f); f.contribute(); - } else if (neighflag == N2) { - PairComputeFunctor,N2,false,S_TableCompute > - f(this,(NeighListKokkos*) list); - if (eflag || vflag) Kokkos::parallel_reduce(list->inum,f,ev); - else Kokkos::parallel_for(list->inum,f); - f.contribute(); } } else { if (neighflag == FULL) { @@ -162,12 +156,6 @@ void PairTableKokkos::compute_style(int eflag_in, int vflag_in) if (eflag || vflag) Kokkos::parallel_reduce(list->inum,f,ev); else Kokkos::parallel_for(list->inum,f); f.contribute(); - } else if (neighflag == N2) { - PairComputeFunctor,N2,true,S_TableCompute > - f(this,(NeighListKokkos*) list); - if (eflag || vflag) Kokkos::parallel_reduce(list->inum,f,ev); - else Kokkos::parallel_for(list->inum,f); - f.contribute(); } } @@ -525,9 +513,6 @@ void PairTableKokkos::init_style() } else if (neighflag == HALF || neighflag == HALFTHREAD) { neighbor->requests[irequest]->full = 0; neighbor->requests[irequest]->half = 1; - } else if (neighflag == N2) { - neighbor->requests[irequest]->full = 0; - neighbor->requests[irequest]->half = 0; } else { error->all(FLERR,"Cannot use chosen neighbor list style with lj/cut/kk"); } diff --git a/src/KOKKOS/pair_table_kokkos.h b/src/KOKKOS/pair_table_kokkos.h index eede023d7e57c603ec72f93f5f2f3d4becb65fc1..2f84e6a61e4a1c31385db7e8419478d9e9a15b76 100644 --- a/src/KOKKOS/pair_table_kokkos.h +++ b/src/KOKKOS/pair_table_kokkos.h @@ -41,7 +41,7 @@ template class PairTableKokkos : public PairTable { public: - enum {EnabledNeighFlags=FULL|HALFTHREAD|HALF|N2}; + enum {EnabledNeighFlags=FULL|HALFTHREAD|HALF}; enum {COUL_FLAG=0}; typedef DeviceType device_type; typedef ArrayTypes AT; @@ -139,38 +139,30 @@ class PairTableKokkos : public PairTable { friend class PairComputeFunctor >; friend class PairComputeFunctor >; friend class PairComputeFunctor >; - friend class PairComputeFunctor >; friend class PairComputeFunctor >; friend class PairComputeFunctor >; friend class PairComputeFunctor >; - friend class PairComputeFunctor >; friend class PairComputeFunctor >; friend class PairComputeFunctor >; friend class PairComputeFunctor >; - friend class PairComputeFunctor >; friend class PairComputeFunctor >; friend class PairComputeFunctor >; friend class PairComputeFunctor >; - friend class PairComputeFunctor >; friend class PairComputeFunctor >; friend class PairComputeFunctor >; friend class PairComputeFunctor >; - friend class PairComputeFunctor >; friend class PairComputeFunctor >; friend class PairComputeFunctor >; friend class PairComputeFunctor >; - friend class PairComputeFunctor >; friend class PairComputeFunctor >; friend class PairComputeFunctor >; friend class PairComputeFunctor >; - friend class PairComputeFunctor >; friend class PairComputeFunctor >; friend class PairComputeFunctor >; friend class PairComputeFunctor >; - friend class PairComputeFunctor >; friend void pair_virial_fdotr_compute(PairTableKokkos*); }; diff --git a/src/KOKKOS/pair_table_rx_kokkos.cpp b/src/KOKKOS/pair_table_rx_kokkos.cpp index d65ea8bf1f6530e97a216796269ddcbc97cb9fdb..2b066d7633aa708de7e3078e5f74703fc425ee88 100644 --- a/src/KOKKOS/pair_table_rx_kokkos.cpp +++ b/src/KOKKOS/pair_table_rx_kokkos.cpp @@ -33,6 +33,7 @@ #include "kokkos_few.h" #include "kokkos.h" #include "modify.h" +#include "utils.h" #include using namespace LAMMPS_NS; @@ -664,8 +665,6 @@ void PairTableRXKokkos::compute_style(int eflag_in, int vflag_in) nspecies, isite1, isite2, fractionalWeighting, mixWtSite1old, mixWtSite2old, mixWtSite1, mixWtSite2); - if (neighflag == N2) error->all(FLERR,"pair table/rx/kk can't handle N2 yet\n"); - NeighListKokkos* l = dynamic_cast*>(list); @@ -1022,7 +1021,7 @@ void PairTableRXKokkos::coeff(int narg, char **arg) bool rx_flag = false; for (int i = 0; i < modify->nfix; i++) - if (strncmp(modify->fix[i]->style,"rx",2) == 0) rx_flag = true; + if (utils::strmatch(modify->fix[i]->style,"^rx")) rx_flag = true; if (!rx_flag) error->all(FLERR,"PairTableRX requires a fix rx command."); int ilo,ihi,jlo,jhi; @@ -1281,9 +1280,6 @@ void PairTableRXKokkos::init_style() } else if (neighflag == HALF || neighflag == HALFTHREAD) { neighbor->requests[irequest]->full = 0; neighbor->requests[irequest]->half = 1; - } else if (neighflag == N2) { - neighbor->requests[irequest]->full = 0; - neighbor->requests[irequest]->half = 0; } else { error->all(FLERR,"Cannot use chosen neighbor list style with lj/cut/kk"); } diff --git a/src/KOKKOS/pair_table_rx_kokkos.h b/src/KOKKOS/pair_table_rx_kokkos.h index 4230263dc97cb157f5b40fee98a5a0c5cb35c711..7aba307476ab55a174263ec7d29b276009f0a72d 100644 --- a/src/KOKKOS/pair_table_rx_kokkos.h +++ b/src/KOKKOS/pair_table_rx_kokkos.h @@ -30,7 +30,7 @@ namespace LAMMPS_NS { template class PairTableRXKokkos : public PairTable { public: - enum {EnabledNeighFlags=FULL|HALFTHREAD|HALF|N2}; + enum {EnabledNeighFlags=FULL|HALFTHREAD|HALF}; typedef DeviceType device_type; PairTableRXKokkos(class LAMMPS *); diff --git a/src/KOKKOS/pair_yukawa_kokkos.h b/src/KOKKOS/pair_yukawa_kokkos.h index 5f4e8236579ff6046fc07310df4be8a7f80301c8..f24298d41576d15797cceeaa32effc0b43e87655 100644 --- a/src/KOKKOS/pair_yukawa_kokkos.h +++ b/src/KOKKOS/pair_yukawa_kokkos.h @@ -103,19 +103,15 @@ class PairYukawaKokkos : public PairYukawa { friend class PairComputeFunctor; friend class PairComputeFunctor; friend class PairComputeFunctor; - friend class PairComputeFunctor; friend class PairComputeFunctor; friend class PairComputeFunctor; friend class PairComputeFunctor; - friend class PairComputeFunctor; friend EV_FLOAT pair_compute_neighlist( PairYukawaKokkos*,NeighListKokkos*); friend EV_FLOAT pair_compute_neighlist( PairYukawaKokkos*,NeighListKokkos*); friend EV_FLOAT pair_compute_neighlist( PairYukawaKokkos*,NeighListKokkos*); - friend EV_FLOAT pair_compute_neighlist( - PairYukawaKokkos*,NeighListKokkos*); friend EV_FLOAT pair_compute( PairYukawaKokkos*,NeighListKokkos*); friend void pair_virial_fdotr_compute(PairYukawaKokkos*); diff --git a/src/KOKKOS/pair_zbl_kokkos.cpp b/src/KOKKOS/pair_zbl_kokkos.cpp index fe34f58fa6f5c1333ae81dd0aede83d8c4085317..5e4ec398d9a41cf1e835bd678088712a9ae2c1b3 100644 --- a/src/KOKKOS/pair_zbl_kokkos.cpp +++ b/src/KOKKOS/pair_zbl_kokkos.cpp @@ -103,9 +103,6 @@ void PairZBLKokkos::init_style() } else if (neighflag == HALF || neighflag == HALFTHREAD) { neighbor->requests[irequest]->full = 0; neighbor->requests[irequest]->half = 1; - } else if (neighflag == N2) { - neighbor->requests[irequest]->full = 0; - neighbor->requests[irequest]->half = 0; } else { error->all(FLERR,"Cannot use chosen neighbor list style with lj/cut/kk"); } diff --git a/src/KOKKOS/pppm_kokkos.cpp b/src/KOKKOS/pppm_kokkos.cpp index 62d7ccc3cda9892495de4e0dff1418386ab999d4..68a72c9a53aff25ca35febe1f7650acc7d262fed 100644 --- a/src/KOKKOS/pppm_kokkos.cpp +++ b/src/KOKKOS/pppm_kokkos.cpp @@ -106,7 +106,7 @@ PPPMKokkos::PPPMKokkos(LAMMPS *lmp) : PPPM(lmp) // see JCP 109, pg 7698 for derivation of coefficients // higher order coefficients may be computed if needed - acons = typename Kokkos::DualView::t_host("pppm:acons"); + acons = typename Kokkos::DualView::t_host("pppm:acons"); acons(1,0) = 2.0 / 3.0; acons(2,0) = 1.0 / 50.0; acons(2,1) = 5.0 / 294.0; @@ -840,21 +840,23 @@ void PPPMKokkos::allocate() // 2nd FFT returns data in 3d brick decomposition // remap takes data from 3d brick to FFT decomposition + int collective_flag = 0; // not yet supported in Kokkos version + int cuda_aware_flag = lmp->kokkos->cuda_aware_flag; int tmp; fft1 = new FFT3dKokkos(lmp,world,nx_pppm,ny_pppm,nz_pppm, nxlo_fft,nxhi_fft,nylo_fft,nyhi_fft,nzlo_fft,nzhi_fft, nxlo_fft,nxhi_fft,nylo_fft,nyhi_fft,nzlo_fft,nzhi_fft, - 0,0,&tmp,collective_flag); + 0,0,&tmp,collective_flag,cuda_aware_flag); fft2 = new FFT3dKokkos(lmp,world,nx_pppm,ny_pppm,nz_pppm, nxlo_fft,nxhi_fft,nylo_fft,nyhi_fft,nzlo_fft,nzhi_fft, nxlo_in,nxhi_in,nylo_in,nyhi_in,nzlo_in,nzhi_in, - 0,0,&tmp,collective_flag); + 0,0,&tmp,collective_flag,cuda_aware_flag); remap = new RemapKokkos(lmp,world, nxlo_in,nxhi_in,nylo_in,nyhi_in,nzlo_in,nzhi_in, nxlo_fft,nxhi_fft,nylo_fft,nyhi_fft,nzlo_fft,nzhi_fft, - 1,0,0,FFT_PRECISION,collective_flag); + 1,0,0,FFT_PRECISION,collective_flag,cuda_aware_flag); // create ghost grid object for rho and electric field communication @@ -2581,7 +2583,7 @@ void PPPMKokkos::operator()(TagPPPM_fieldforce_peratom, const int &i ------------------------------------------------------------------------- */ template -void PPPMKokkos::pack_forward_kspace_kokkos(int flag, Kokkos::DualView &k_buf, int nlist, DAT::tdual_int_2d &k_list, int index) +void PPPMKokkos::pack_forward_kspace_kokkos(int flag, FFT_DAT::tdual_FFT_SCALAR_1d &k_buf, int nlist, DAT::tdual_int_2d &k_list, int index) { typename AT::t_int_2d_um d_list = k_list.view(); d_list_index = Kokkos::subview(d_list,index,Kokkos::ALL()); @@ -2637,7 +2639,7 @@ void PPPMKokkos::operator()(TagPPPM_pack_forward2, const int &i) con ------------------------------------------------------------------------- */ template -void PPPMKokkos::unpack_forward_kspace_kokkos(int flag, Kokkos::DualView &k_buf, int nlist, DAT::tdual_int_2d &k_list, int index) +void PPPMKokkos::unpack_forward_kspace_kokkos(int flag, FFT_DAT::tdual_FFT_SCALAR_1d &k_buf, int nlist, DAT::tdual_int_2d &k_list, int index) { typename AT::t_int_2d_um d_list = k_list.view(); d_list_index = Kokkos::subview(d_list,index,Kokkos::ALL()); @@ -2694,7 +2696,7 @@ void PPPMKokkos::operator()(TagPPPM_unpack_forward2, const int &i) c ------------------------------------------------------------------------- */ template -void PPPMKokkos::pack_reverse_kspace_kokkos(int flag, Kokkos::DualView &k_buf, int nlist, DAT::tdual_int_2d &k_list, int index) +void PPPMKokkos::pack_reverse_kspace_kokkos(int flag, FFT_DAT::tdual_FFT_SCALAR_1d &k_buf, int nlist, DAT::tdual_int_2d &k_list, int index) { typename AT::t_int_2d_um d_list = k_list.view(); d_list_index = Kokkos::subview(d_list,index,Kokkos::ALL()); @@ -2724,7 +2726,7 @@ void PPPMKokkos::operator()(TagPPPM_pack_reverse, const int &i) cons ------------------------------------------------------------------------- */ template -void PPPMKokkos::unpack_reverse_kspace_kokkos(int flag, Kokkos::DualView &k_buf, int nlist, DAT::tdual_int_2d &k_list, int index) +void PPPMKokkos::unpack_reverse_kspace_kokkos(int flag, FFT_DAT::tdual_FFT_SCALAR_1d &k_buf, int nlist, DAT::tdual_int_2d &k_list, int index) { typename AT::t_int_2d_um d_list = k_list.view(); d_list_index = Kokkos::subview(d_list,index,Kokkos::ALL()); diff --git a/src/KOKKOS/pppm_kokkos.h b/src/KOKKOS/pppm_kokkos.h index a07ed7d7c457df2d1a7126c8b8e1b7c9f53d7f2e..847a2f807f34ca2db9557f62b3a093e05bb78ade 100644 --- a/src/KOKKOS/pppm_kokkos.h +++ b/src/KOKKOS/pppm_kokkos.h @@ -403,10 +403,10 @@ class PPPMKokkos : public PPPM, public KokkosBaseFFT { // grid communication - void pack_forward_kspace_kokkos(int, Kokkos::DualView &, int, DAT::tdual_int_2d &, int); - void unpack_forward_kspace_kokkos(int, Kokkos::DualView &, int, DAT::tdual_int_2d &, int); - void pack_reverse_kspace_kokkos(int, Kokkos::DualView &, int, DAT::tdual_int_2d &, int); - void unpack_reverse_kspace_kokkos(int, Kokkos::DualView &, int, DAT::tdual_int_2d &, int); + void pack_forward_kspace_kokkos(int, FFT_DAT::tdual_FFT_SCALAR_1d &, int, DAT::tdual_int_2d &, int); + void unpack_forward_kspace_kokkos(int, FFT_DAT::tdual_FFT_SCALAR_1d &, int, DAT::tdual_int_2d &, int); + void pack_reverse_kspace_kokkos(int, FFT_DAT::tdual_FFT_SCALAR_1d &, int, DAT::tdual_int_2d &, int); + void unpack_reverse_kspace_kokkos(int, FFT_DAT::tdual_FFT_SCALAR_1d &, int, DAT::tdual_int_2d &, int); // triclinic diff --git a/src/KOKKOS/remap_kokkos.cpp b/src/KOKKOS/remap_kokkos.cpp index e94a4ddd9ff19283044409151f81a07c5e15ebca..604b438a89c727d2540ab7fd9bc694a6baf259ed 100644 --- a/src/KOKKOS/remap_kokkos.cpp +++ b/src/KOKKOS/remap_kokkos.cpp @@ -38,12 +38,14 @@ RemapKokkos::RemapKokkos(LAMMPS *lmp, MPI_Comm comm, int out_ilo, int out_ihi, int out_jlo, int out_jhi, int out_klo, int out_khi, int nqty, int permute, int memory, - int precision, int usecollective) : Pointers(lmp) + int precision, int usecollective, + int usecuda_aware) : Pointers(lmp) { plan = remap_3d_create_plan_kokkos(comm, in_ilo,in_ihi,in_jlo,in_jhi,in_klo,in_khi, out_ilo,out_ihi,out_jlo,out_jhi,out_klo,out_khi, - nqty,permute,memory,precision,usecollective); + nqty,permute,memory,precision,usecollective, + usecuda_aware); if (plan == NULL) error->one(FLERR,"Could not create 3d remap plan"); } @@ -119,20 +121,36 @@ void RemapKokkos::remap_3d_kokkos(typename FFT_AT::t_FFT_SCALAR_1d d // post all recvs into scratch space + FFT_SCALAR* v_scratch = d_scratch.data(); + if (!plan->usecuda_aware) { + plan->h_scratch = Kokkos::create_mirror_view(d_scratch); + v_scratch = plan->h_scratch.data(); + } + for (irecv = 0; irecv < plan->nrecv; irecv++) { - FFT_SCALAR* scratch = d_scratch.data() + plan->recv_bufloc[irecv]; + FFT_SCALAR* scratch = v_scratch + plan->recv_bufloc[irecv]; MPI_Irecv(scratch,plan->recv_size[irecv], MPI_FFT_SCALAR,plan->recv_proc[irecv],0, plan->comm,&plan->request[irecv]); } + FFT_SCALAR* v_sendbuf = plan->d_sendbuf.data(); + if (!plan->usecuda_aware) { + plan->h_sendbuf = Kokkos::create_mirror_view(plan->d_sendbuf); + v_sendbuf = plan->h_sendbuf.data(); + } + // send all messages to other procs for (isend = 0; isend < plan->nsend; isend++) { int in_offset = plan->send_offset[isend]; plan->pack(d_in,in_offset, plan->d_sendbuf,0,&plan->packplan[isend]); - MPI_Send(plan->d_sendbuf.data(),plan->send_size[isend],MPI_FFT_SCALAR, + + if (!plan->usecuda_aware) + Kokkos::deep_copy(plan->h_sendbuf,plan->d_sendbuf); + + MPI_Send(v_sendbuf,plan->send_size[isend],MPI_FFT_SCALAR, plan->send_proc[isend],0,plan->comm); } @@ -161,6 +179,9 @@ void RemapKokkos::remap_3d_kokkos(typename FFT_AT::t_FFT_SCALAR_1d d int scratch_offset = plan->recv_bufloc[irecv]; int out_offset = plan->recv_offset[irecv]; + if (!plan->usecuda_aware) + Kokkos::deep_copy(d_scratch,plan->h_scratch); + plan->unpack(d_scratch,scratch_offset, d_out,out_offset,&plan->unpackplan[irecv]); } @@ -189,6 +210,7 @@ void RemapKokkos::remap_3d_kokkos(typename FFT_AT::t_FFT_SCALAR_1d d 1 = single precision (4 bytes per datum) 2 = double precision (8 bytes per datum) usecollective whether to use collective MPI or point-to-point + usecuda_aware whether to use CUDA-Aware MPI or not ------------------------------------------------------------------------- */ template @@ -198,7 +220,8 @@ struct remap_plan_3d_kokkos* RemapKokkos::remap_3d_creat int in_klo, int in_khi, int out_ilo, int out_ihi, int out_jlo, int out_jhi, int out_klo, int out_khi, - int nqty, int permute, int memory, int precision, int usecollective) + int nqty, int permute, int memory, int precision, + int usecollective, int usecuda_aware) { struct remap_plan_3d_kokkos *plan; @@ -216,6 +239,7 @@ struct remap_plan_3d_kokkos* RemapKokkos::remap_3d_creat plan = new struct remap_plan_3d_kokkos; if (plan == NULL) return NULL; plan->usecollective = usecollective; + plan->usecuda_aware = usecuda_aware; // store parameters in local data structs diff --git a/src/KOKKOS/remap_kokkos.h b/src/KOKKOS/remap_kokkos.h index 9f1334be265e22798e818cfbc99b6e40c88f4f03..d6e4ab828ea6e6f1f981df439ff469f32f78d73f 100644 --- a/src/KOKKOS/remap_kokkos.h +++ b/src/KOKKOS/remap_kokkos.h @@ -28,7 +28,9 @@ struct remap_plan_3d_kokkos { typedef DeviceType device_type; typedef FFTArrayTypes FFT_AT; typename FFT_AT::t_FFT_SCALAR_1d d_sendbuf; // buffer for MPI sends + FFT_HAT::t_FFT_SCALAR_1d h_sendbuf; // host buffer for MPI sends typename FFT_AT::t_FFT_SCALAR_1d d_scratch; // scratch buffer for MPI recvs + FFT_HAT::t_FFT_SCALAR_1d h_scratch; // host scratch buffer for MPI recvs void (*pack)(typename FFT_AT::t_FFT_SCALAR_1d_um, int, typename FFT_AT::t_FFT_SCALAR_1d_um, int, struct pack_plan_3d *); // which pack function to use void (*unpack)(typename FFT_AT::t_FFT_SCALAR_1d_um, int, typename FFT_AT::t_FFT_SCALAR_1d_um, int, struct pack_plan_3d *); @@ -51,6 +53,7 @@ struct remap_plan_3d_kokkos { int usecollective; // use collective or point-to-point MPI int commringlen; // length of commringlist int *commringlist; // ranks on communication ring of this plan + int usecuda_aware; // use CUDA-Aware MPI or not }; template @@ -60,7 +63,7 @@ class RemapKokkos : protected Pointers { typedef FFTArrayTypes FFT_AT; RemapKokkos(class LAMMPS *); RemapKokkos(class LAMMPS *, MPI_Comm,int,int,int,int,int,int, - int,int,int,int,int,int,int,int,int,int,int); + int,int,int,int,int,int,int,int,int,int,int,int); ~RemapKokkos(); void perform(typename FFT_AT::t_FFT_SCALAR_1d, typename FFT_AT::t_FFT_SCALAR_1d, typename FFT_AT::t_FFT_SCALAR_1d); @@ -70,7 +73,7 @@ class RemapKokkos : protected Pointers { struct remap_plan_3d_kokkos *remap_3d_create_plan_kokkos(MPI_Comm, int, int, int, int, int, int, int, int, int, int, int, int, - int, int, int, int, int); + int, int, int, int, int, int); void remap_3d_destroy_plan_kokkos(struct remap_plan_3d_kokkos *); }; diff --git a/src/KOKKOS/sna_kokkos.h b/src/KOKKOS/sna_kokkos.h index b7162cf8d6ef301790d9294f8e1ccc6af5a5ad99..5a11182f457b9f5161ca1422059be29a91a12e65 100644 --- a/src/KOKKOS/sna_kokkos.h +++ b/src/KOKKOS/sna_kokkos.h @@ -25,64 +25,6 @@ namespace LAMMPS_NS { -typedef double SNAreal; - -//typedef struct { SNAreal re, im; } SNAcomplex; -template -struct alignas(2*sizeof(real)) SNAComplex -{ - real re,im; - - KOKKOS_FORCEINLINE_FUNCTION SNAComplex() = default; - - KOKKOS_FORCEINLINE_FUNCTION SNAComplex(real re) - : re(re), im(static_cast(0.)) { ; } - - KOKKOS_FORCEINLINE_FUNCTION SNAComplex(real re, real im) - : re(re), im(im) { ; } - - KOKKOS_FORCEINLINE_FUNCTION SNAComplex(const SNAComplex& other) - : re(other.re), im(other.im) { ; } - - KOKKOS_FORCEINLINE_FUNCTION SNAComplex& operator=(const SNAComplex& other) { - re = other.re; im = other.im; - return *this; - } - - KOKKOS_FORCEINLINE_FUNCTION SNAComplex(SNAComplex&& other) - : re(other.re), im(other.im) { ; } - - KOKKOS_FORCEINLINE_FUNCTION SNAComplex& operator=(SNAComplex&& other) { - re = other.re; im = other.im; - return *this; - } - - KOKKOS_FORCEINLINE_FUNCTION SNAComplex operator+(SNAComplex const& other) { - return SNAComplex(re + other.re, im + other.im); - } - - KOKKOS_FORCEINLINE_FUNCTION SNAComplex& operator+=(SNAComplex const& other) { - re += other.re; im += other.im; - return *this; - } - -}; - -template -KOKKOS_FORCEINLINE_FUNCTION SNAComplex operator*(const real& r, const SNAComplex& self) { - return SNAComplex(r*self.re, r*self.im); -} - -typedef SNAComplex SNAcomplex; - -//struct SNAKK_ZINDICES { -// int j1, j2, j, ma1min, ma2max, mb1min, mb2max, na, nb, jju; -//}; -// -//struct SNAKK_BINDICES { -// int j1, j2, j; -//}; - template class SNAKokkos { diff --git a/src/KSPACE/pair_buck_long_coul_long.cpp b/src/KSPACE/pair_buck_long_coul_long.cpp index 6c731b73b3ffa8fdc76f8296a2a5e1133fa2cc18..db01cb8509cc395f89cec36de65dc13d4291d28d 100644 --- a/src/KSPACE/pair_buck_long_coul_long.cpp +++ b/src/KSPACE/pair_buck_long_coul_long.cpp @@ -430,10 +430,17 @@ void PairBuckLongCoulLong::write_data(FILE *fp) void PairBuckLongCoulLong::write_data_all(FILE *fp) { - for (int i = 1; i <= atom->ntypes; i++) - for (int j = i; j <= atom->ntypes; j++) - fprintf(fp,"%d %d %g %g %g\n",i,j, - buck_a_read[i][j],buck_rho_read[i][j],buck_c_read[i][j]); + for (int i = 1; i <= atom->ntypes; i++) { + for (int j = i; j <= atom->ntypes; j++) { + if (ewald_order & (1<<6)) { + fprintf(fp,"%d %d %g %g\n",i,j, + buck_a_read[i][j],buck_rho_read[i][j]); + } else { + fprintf(fp,"%d %d %g %g %g\n",i,j, + buck_a_read[i][j],buck_rho_read[i][j],buck_c_read[i][j]); + } + } + } } /* ---------------------------------------------------------------------- diff --git a/src/KSPACE/pair_lj_charmmfsw_coul_long.cpp b/src/KSPACE/pair_lj_charmmfsw_coul_long.cpp index 0371ac42c52501117585d5b86699564bcfa0e8b5..36d8126eecaf3d810c0226a1d6a67a907de394a1 100644 --- a/src/KSPACE/pair_lj_charmmfsw_coul_long.cpp +++ b/src/KSPACE/pair_lj_charmmfsw_coul_long.cpp @@ -739,37 +739,18 @@ void PairLJCharmmfswCoulLong::init_style() int irequest; + int respa = 0; if (update->whichflag == 1 && strstr(update->integrate_style,"respa")) { - int respa = 0; if (((Respa *) update->integrate)->level_inner >= 0) respa = 1; if (((Respa *) update->integrate)->level_middle >= 0) respa = 2; + } - if (respa == 0) irequest = neighbor->request(this,instance_me); - else if (respa == 1) { - irequest = neighbor->request(this,instance_me); - neighbor->requests[irequest]->id = 1; - neighbor->requests[irequest]->half = 0; - neighbor->requests[irequest]->respainner = 1; - irequest = neighbor->request(this,instance_me); - neighbor->requests[irequest]->id = 3; - neighbor->requests[irequest]->half = 0; - neighbor->requests[irequest]->respaouter = 1; - } else { - irequest = neighbor->request(this,instance_me); - neighbor->requests[irequest]->id = 1; - neighbor->requests[irequest]->half = 0; - neighbor->requests[irequest]->respainner = 1; - irequest = neighbor->request(this,instance_me); - neighbor->requests[irequest]->id = 2; - neighbor->requests[irequest]->half = 0; - neighbor->requests[irequest]->respamiddle = 1; - irequest = neighbor->request(this,instance_me); - neighbor->requests[irequest]->id = 3; - neighbor->requests[irequest]->half = 0; - neighbor->requests[irequest]->respaouter = 1; - } - - } else irequest = neighbor->request(this,instance_me); + irequest = neighbor->request(this,instance_me); + if (respa >= 1) { + neighbor->requests[irequest]->respaouter = 1; + neighbor->requests[irequest]->respainner = 1; + } + if (respa == 2) neighbor->requests[irequest]->respamiddle = 1; // require cut_lj_inner < cut_lj diff --git a/src/KSPACE/pair_lj_long_coul_long.cpp b/src/KSPACE/pair_lj_long_coul_long.cpp index 94955d2d6dd5e2eb9c25a551cef2745c0adf556e..ce6b6f57a267c936181f79673af85ba97bb9d581 100644 --- a/src/KSPACE/pair_lj_long_coul_long.cpp +++ b/src/KSPACE/pair_lj_long_coul_long.cpp @@ -427,10 +427,17 @@ void PairLJLongCoulLong::write_data(FILE *fp) void PairLJLongCoulLong::write_data_all(FILE *fp) { - for (int i = 1; i <= atom->ntypes; i++) - for (int j = i; j <= atom->ntypes; j++) - fprintf(fp,"%d %d %g %g %g\n",i,j, - epsilon_read[i][j],sigma_read[i][j],cut_lj_read[i][j]); + for (int i = 1; i <= atom->ntypes; i++) { + for (int j = i; j <= atom->ntypes; j++) { + if (ewald_order & (1<<6)) { + fprintf(fp,"%d %d %g %g\n",i,j, + epsilon_read[i][j],sigma_read[i][j]); + } else { + fprintf(fp,"%d %d %g %g %g\n",i,j, + epsilon_read[i][j],sigma_read[i][j],cut_lj_read[i][j]); + } + } + } } /* ---------------------------------------------------------------------- diff --git a/src/MAKE/MACHINES/Makefile.aarch64_arm_openmpi_armpl b/src/MAKE/MACHINES/Makefile.aarch64_arm_openmpi_armpl index 9f29e9a87e6ef460bf7ee6473937d597a132f85f..ead00277c6ffe7a9bc6094b79c5f2858645666f2 100644 --- a/src/MAKE/MACHINES/Makefile.aarch64_arm_openmpi_armpl +++ b/src/MAKE/MACHINES/Makefile.aarch64_arm_openmpi_armpl @@ -1,4 +1,4 @@ -# g++_openmpi = OpenMPI with compiler set to GNU g++ +# aarch64_arm_openmpi_armpl = OpenMPI with compiler set to GNU g++ on 64-bit ARM SHELL = /bin/sh @@ -27,12 +27,12 @@ SHLIBFLAGS = -shared # if you change any -D setting, do full re-compile after "make clean" # LAMMPS ifdef settings -# see possible settings in Section 2.2 (step 4) of manual +# see possible settings in Section 3.5 of the manual LMP_INC = -DLAMMPS_GZIP # MPI library -# see discussion in Section 2.2 (step 5) of manual +# see discussion in Section 3.4 of the manual # MPI wrapper compiler/linker can provide this info # can point to dummy MPI library in src/STUBS as in Makefile.serial # use -D MPICH and OMPI settings in INC to avoid C++ lib conflicts @@ -45,7 +45,7 @@ MPI_PATH = MPI_LIB = # FFT library -# see discussion in Section 2.2 (step 6) of manaul +# see discussion in Section 3.5.2 of manual # can be left blank to use provided KISS FFT library # INC = -DFFT setting, e.g. -DFFT_FFTW, FFT compiler settings # PATH = path for FFT library @@ -56,22 +56,22 @@ FFT_PATH = -L$(ARMPL_LIBRARIES) FFT_LIB = -larmpl_lp64 # JPEG and/or PNG library -# see discussion in Section 2.2 (step 7) of manual +# see discussion in Section 3.5.4 of manual # only needed if -DLAMMPS_JPEG or -DLAMMPS_PNG listed with LMP_INC # INC = path(s) for jpeglib.h and/or png.h # PATH = path(s) for JPEG library and/or PNG library # LIB = name(s) of JPEG library and/or PNG library -JPG_INC = -JPG_PATH = -JPG_LIB = +JPG_INC = +JPG_PATH = +JPG_LIB = # --------------------------------------------------------------------- # build rules and dependencies # do not edit this section -include Makefile.package.settings -include Makefile.package +include Makefile.package.settings +include Makefile.package EXTRA_INC = $(LMP_INC) $(PKG_INC) $(MPI_INC) $(FFT_INC) $(JPG_INC) $(PKG_SYSINC) EXTRA_PATH = $(PKG_PATH) $(MPI_PATH) $(FFT_PATH) $(JPG_PATH) $(PKG_SYSPATH) @@ -86,28 +86,27 @@ vpath %.h .. # Link target -$(EXE): $(OBJ) $(EXTRA_LINK_DEPENDS) - $(LINK) $(LINKFLAGS) $(EXTRA_PATH) $(OBJ) $(EXTRA_LIB) $(LIB) -o $(EXE) - $(SIZE) $(EXE) +$(EXE): main.o $(LMPLIB) $(EXTRA_LINK_DEPENDS) + $(LINK) $(LINKFLAGS) main.o $(EXTRA_PATH) $(LMPLINK) $(EXTRA_LIB) $(LIB) -o $@ + $(SIZE) $@ # Library targets -lib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(ARCHIVE) $(ARFLAGS) $(EXE) $(OBJ) +$(ARLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + @rm -f ../$(ARLIB) + $(ARCHIVE) $(ARFLAGS) ../$(ARLIB) $(OBJ) + @rm -f $(ARLIB) + @ln -s ../$(ARLIB) $(ARLIB) -shlib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o $(EXE) \ - $(OBJ) $(EXTRA_LIB) $(LIB) +$(SHLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o ../$(SHLIB) \ + $(OBJ) $(EXTRA_LIB) $(LIB) + @rm -f $(SHLIB) + @ln -s ../$(SHLIB) $(SHLIB) # Compilation rules -%.o:%.cpp $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< - -%.d:%.cpp $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(EXTRA_INC) $(DEPFLAGS) $< > $@ - -%.o:%.cu $(EXTRA_CPP_DEPENDS) +%.o:%.cpp $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< # Individual dependencies diff --git a/src/MAKE/MACHINES/Makefile.aarch64_arm_serial_armpl b/src/MAKE/MACHINES/Makefile.aarch64_arm_serial_armpl index 6397118357600cef433ede9e762ff85c01c4125a..44c83ff1e07c9367cd0785a2c2a4a6e09a437969 100644 --- a/src/MAKE/MACHINES/Makefile.aarch64_arm_serial_armpl +++ b/src/MAKE/MACHINES/Makefile.aarch64_arm_serial_armpl @@ -1,4 +1,4 @@ -# arm_serial = Arm armclang compiler, no MPI +# aarch64_arm_serial_armpl = ARM 64-bit, armclang compiler, no MPI SHELL = /bin/sh @@ -26,12 +26,12 @@ SHLIBFLAGS = -shared # if you change any -D setting, do full re-compile after "make clean" # LAMMPS ifdef settings -# see possible settings in Section 2.2 (step 4) of manual +# see possible settings in Section 3.5 of the manual LMP_INC = -DLAMMPS_GZIP # MPI library -# see discussion in Section 2.2 (step 5) of manual +# see discussion in Section 3.4 of the manual # MPI wrapper compiler/linker can provide this info # can point to dummy MPI library in src/STUBS as in Makefile.serial # use -D MPICH and OMPI settings in INC to avoid C++ lib conflicts @@ -44,7 +44,7 @@ MPI_PATH = -L../STUBS MPI_LIB = -lmpi_stubs # FFT library -# see discussion in Section 2.2 (step 6) of manaul +# see discussion in Section 3.5.2 of manual # can be left blank to use provided KISS FFT library # INC = -DFFT setting, e.g. -DFFT_FFTW, FFT compiler settings # PATH = path for FFT library @@ -55,22 +55,22 @@ FFT_PATH = -L$(ARMPL_LIBRARIES) FFT_LIB = -larmpl_lp64 # JPEG and/or PNG library -# see discussion in Section 2.2 (step 7) of manual +# see discussion in Section 3.5.4 of manual # only needed if -DLAMMPS_JPEG or -DLAMMPS_PNG listed with LMP_INC # INC = path(s) for jpeglib.h and/or png.h # PATH = path(s) for JPEG library and/or PNG library # LIB = name(s) of JPEG library and/or PNG library -JPG_INC = -JPG_PATH = -JPG_LIB = +JPG_INC = +JPG_PATH = +JPG_LIB = # --------------------------------------------------------------------- # build rules and dependencies # do not edit this section -include Makefile.package.settings -include Makefile.package +include Makefile.package.settings +include Makefile.package EXTRA_INC = $(LMP_INC) $(PKG_INC) $(MPI_INC) $(FFT_INC) $(JPG_INC) $(PKG_SYSINC) EXTRA_PATH = $(PKG_PATH) $(MPI_PATH) $(FFT_PATH) $(JPG_PATH) $(PKG_SYSPATH) @@ -85,28 +85,27 @@ vpath %.h .. # Link target -$(EXE): $(OBJ) $(EXTRA_LINK_DEPENDS) - $(LINK) $(LINKFLAGS) $(EXTRA_PATH) $(OBJ) $(EXTRA_LIB) $(LIB) -o $(EXE) - $(SIZE) $(EXE) +$(EXE): main.o $(LMPLIB) $(EXTRA_LINK_DEPENDS) + $(LINK) $(LINKFLAGS) main.o $(EXTRA_PATH) $(LMPLINK) $(EXTRA_LIB) $(LIB) -o $@ + $(SIZE) $@ # Library targets -lib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(ARCHIVE) $(ARFLAGS) $(EXE) $(OBJ) +$(ARLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + @rm -f ../$(ARLIB) + $(ARCHIVE) $(ARFLAGS) ../$(ARLIB) $(OBJ) + @rm -f $(ARLIB) + @ln -s ../$(ARLIB) $(ARLIB) -shlib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o $(EXE) \ - $(OBJ) $(EXTRA_LIB) $(LIB) +$(SHLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o ../$(SHLIB) \ + $(OBJ) $(EXTRA_LIB) $(LIB) + @rm -f $(SHLIB) + @ln -s ../$(SHLIB) $(SHLIB) # Compilation rules -%.o:%.cpp $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< - -%.d:%.cpp $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(EXTRA_INC) $(DEPFLAGS) $< > $@ - -%.o:%.cu $(EXTRA_CPP_DEPENDS) +%.o:%.cpp $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< # Individual dependencies diff --git a/src/MAKE/MACHINES/Makefile.aarch64_g++_openmpi_armpl b/src/MAKE/MACHINES/Makefile.aarch64_g++_openmpi_armpl index 933c97cba4873a0636b2694bb12ad28a9a0b74a7..4174c9c5e7cd88c21525a0ad7a68f40c24faf865 100644 --- a/src/MAKE/MACHINES/Makefile.aarch64_g++_openmpi_armpl +++ b/src/MAKE/MACHINES/Makefile.aarch64_g++_openmpi_armpl @@ -1,4 +1,4 @@ -# g++_openmpi = OpenMPI with compiler set to GNU g++ +# aarch64_g++_openmpi_armpl = ARM 64-bit using OpenMPI with compiler set to GNU g++ SHELL = /bin/sh @@ -32,7 +32,7 @@ SHLIBFLAGS = -shared LMP_INC = -DLAMMPS_GZIP # MPI library -# see discussion in Section 2.2 (step 5) of manual +# see discussion in Section 3.4 of the manual # MPI wrapper compiler/linker can provide this info # can point to dummy MPI library in src/STUBS as in Makefile.serial # use -D MPICH and OMPI settings in INC to avoid C++ lib conflicts @@ -45,7 +45,7 @@ MPI_PATH = MPI_LIB = # FFT library -# see discussion in Section 2.2 (step 6) of manaul +# see discussion in Section 3.5.2 of manual # can be left blank to use provided KISS FFT library # INC = -DFFT setting, e.g. -DFFT_FFTW, FFT compiler settings # PATH = path for FFT library @@ -56,22 +56,22 @@ FFT_PATH = -L$(ARMPL_LIBRARIES) FFT_LIB = -larmpl_lp64 # JPEG and/or PNG library -# see discussion in Section 2.2 (step 7) of manual +# see discussion in Section 3.5.4 of manual # only needed if -DLAMMPS_JPEG or -DLAMMPS_PNG listed with LMP_INC # INC = path(s) for jpeglib.h and/or png.h # PATH = path(s) for JPEG library and/or PNG library # LIB = name(s) of JPEG library and/or PNG library -JPG_INC = -JPG_PATH = -JPG_LIB = +JPG_INC = +JPG_PATH = +JPG_LIB = # --------------------------------------------------------------------- # build rules and dependencies # do not edit this section -include Makefile.package.settings -include Makefile.package +include Makefile.package.settings +include Makefile.package EXTRA_INC = $(LMP_INC) $(PKG_INC) $(MPI_INC) $(FFT_INC) $(JPG_INC) $(PKG_SYSINC) EXTRA_PATH = $(PKG_PATH) $(MPI_PATH) $(FFT_PATH) $(JPG_PATH) $(PKG_SYSPATH) @@ -86,28 +86,27 @@ vpath %.h .. # Link target -$(EXE): $(OBJ) $(EXTRA_LINK_DEPENDS) - $(LINK) $(LINKFLAGS) $(EXTRA_PATH) $(OBJ) $(EXTRA_LIB) $(LIB) -o $(EXE) - $(SIZE) $(EXE) +$(EXE): main.o $(LMPLIB) $(EXTRA_LINK_DEPENDS) + $(LINK) $(LINKFLAGS) main.o $(EXTRA_PATH) $(LMPLINK) $(EXTRA_LIB) $(LIB) -o $@ + $(SIZE) $@ # Library targets -lib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(ARCHIVE) $(ARFLAGS) $(EXE) $(OBJ) +$(ARLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + @rm -f ../$(ARLIB) + $(ARCHIVE) $(ARFLAGS) ../$(ARLIB) $(OBJ) + @rm -f $(ARLIB) + @ln -s ../$(ARLIB) $(ARLIB) -shlib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o $(EXE) \ - $(OBJ) $(EXTRA_LIB) $(LIB) +$(SHLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o ../$(SHLIB) \ + $(OBJ) $(EXTRA_LIB) $(LIB) + @rm -f $(SHLIB) + @ln -s ../$(SHLIB) $(SHLIB) # Compilation rules -%.o:%.cpp $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< - -%.d:%.cpp $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(EXTRA_INC) $(DEPFLAGS) $< > $@ - -%.o:%.cu $(EXTRA_CPP_DEPENDS) +%.o:%.cpp $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< # Individual dependencies diff --git a/src/MAKE/MACHINES/Makefile.aarch64_g++_serial_armpl b/src/MAKE/MACHINES/Makefile.aarch64_g++_serial_armpl index e7f1a81f3b71723ee5adeb6f429f5897d35c2274..5cb6fa0cdea034b1f398f9b335227e2c3b3169cc 100644 --- a/src/MAKE/MACHINES/Makefile.aarch64_g++_serial_armpl +++ b/src/MAKE/MACHINES/Makefile.aarch64_g++_serial_armpl @@ -1,4 +1,4 @@ -# g++_serial = GNU g++ compiler, no MPI +# aarch64_g++_serial_armpl = ARM 64-bit GNU g++ compiler, no MPI SHELL = /bin/sh @@ -26,12 +26,12 @@ SHLIBFLAGS = -shared # if you change any -D setting, do full re-compile after "make clean" # LAMMPS ifdef settings -# see possible settings in Section 2.2 (step 4) of manual +# see possible settings in Section 3.5 of the manual LMP_INC = -DLAMMPS_GZIP # MPI library -# see discussion in Section 2.2 (step 5) of manual +# see discussion in Section 3.4 of the manual # MPI wrapper compiler/linker can provide this info # can point to dummy MPI library in src/STUBS as in Makefile.serial # use -D MPICH and OMPI settings in INC to avoid C++ lib conflicts @@ -44,7 +44,7 @@ MPI_PATH = -L../STUBS MPI_LIB = -lmpi_stubs # FFT library -# see discussion in Section 2.2 (step 6) of manaul +# see discussion in Section 3.5.2 of manual # can be left blank to use provided KISS FFT library # INC = -DFFT setting, e.g. -DFFT_FFTW, FFT compiler settings # PATH = path for FFT library @@ -55,22 +55,22 @@ FFT_PATH = -L$(ARMPL_LIBRARIES) FFT_LIB = -larmpl_lp64 # JPEG and/or PNG library -# see discussion in Section 2.2 (step 7) of manual +# see discussion in Section 3.5.4 of manual # only needed if -DLAMMPS_JPEG or -DLAMMPS_PNG listed with LMP_INC # INC = path(s) for jpeglib.h and/or png.h # PATH = path(s) for JPEG library and/or PNG library # LIB = name(s) of JPEG library and/or PNG library -JPG_INC = -JPG_PATH = -JPG_LIB = +JPG_INC = +JPG_PATH = +JPG_LIB = # --------------------------------------------------------------------- # build rules and dependencies # do not edit this section -include Makefile.package.settings -include Makefile.package +include Makefile.package.settings +include Makefile.package EXTRA_INC = $(LMP_INC) $(PKG_INC) $(MPI_INC) $(FFT_INC) $(JPG_INC) $(PKG_SYSINC) EXTRA_PATH = $(PKG_PATH) $(MPI_PATH) $(FFT_PATH) $(JPG_PATH) $(PKG_SYSPATH) @@ -85,28 +85,27 @@ vpath %.h .. # Link target -$(EXE): $(OBJ) $(EXTRA_LINK_DEPENDS) - $(LINK) $(LINKFLAGS) $(EXTRA_PATH) $(OBJ) $(EXTRA_LIB) $(LIB) -o $(EXE) - $(SIZE) $(EXE) +$(EXE): main.o $(LMPLIB) $(EXTRA_LINK_DEPENDS) + $(LINK) $(LINKFLAGS) main.o $(EXTRA_PATH) $(LMPLINK) $(EXTRA_LIB) $(LIB) -o $@ + $(SIZE) $@ # Library targets -lib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(ARCHIVE) $(ARFLAGS) $(EXE) $(OBJ) +$(ARLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + @rm -f ../$(ARLIB) + $(ARCHIVE) $(ARFLAGS) ../$(ARLIB) $(OBJ) + @rm -f $(ARLIB) + @ln -s ../$(ARLIB) $(ARLIB) -shlib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o $(EXE) \ - $(OBJ) $(EXTRA_LIB) $(LIB) +$(SHLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o ../$(SHLIB) \ + $(OBJ) $(EXTRA_LIB) $(LIB) + @rm -f $(SHLIB) + @ln -s ../$(SHLIB) $(SHLIB) # Compilation rules -%.o:%.cpp $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< - -%.d:%.cpp $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(EXTRA_INC) $(DEPFLAGS) $< > $@ - -%.o:%.cu $(EXTRA_CPP_DEPENDS) +%.o:%.cpp $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< # Individual dependencies diff --git a/src/MAKE/MACHINES/Makefile.astra_arm b/src/MAKE/MACHINES/Makefile.astra_arm index 3734208936fcdb6777896257015305506385dbc7..f64f4da8911bef283f37c86a13eac0d4110fc3f0 100644 --- a/src/MAKE/MACHINES/Makefile.astra_arm +++ b/src/MAKE/MACHINES/Makefile.astra_arm @@ -1,4 +1,4 @@ -# astra_arm - ThunderX2 ARM/OpenMPI Based, use Arm-PL for FFTW +# astra_arm = ThunderX2 ARM/OpenMPI Based, use Arm-PL for FFTW # need to load the following modules: # 1) arm-based developer pack @@ -25,12 +25,12 @@ SIZE = size # if you change any -D setting, do full re-compile after "make clean" # LAMMPS ifdef settings -# see possible settings in Section 2.2 (step 4) of manual +# see possible settings in Section 3.5 of the manual LMP_INC = -DLAMMPS_GZIP # MPI library -# see discussion in Section 2.2 (step 5) of manual +# see discussion in Section 3.4 of the manual # MPI wrapper compiler/linker can provide this info # can point to dummy MPI library in src/STUBS as in Makefile.serial # use -D MPICH and OMPI settings in INC to avoid C++ lib conflicts @@ -43,7 +43,7 @@ MPI_PATH = MPI_LIB = # FFT library -# see discussion in Section 2.2 (step 6) of manaul +# see discussion in Section 3.5.2 of manual # can be left blank to use provided KISS FFT library # INC = -DFFT setting, e.g. -DFFT_FFTW, FFT compiler settings # PATH = path for FFT library @@ -54,22 +54,22 @@ FFT_PATH = FFT_LIB = # JPEG and/or PNG library -# see discussion in Section 2.2 (step 7) of manual +# see discussion in Section 3.5.4 of manual # only needed if -DLAMMPS_JPEG or -DLAMMPS_PNG listed with LMP_INC # INC = path(s) for jpeglib.h and/or png.h # PATH = path(s) for JPEG library and/or PNG library # LIB = name(s) of JPEG library and/or PNG library -JPG_INC = -JPG_PATH = +JPG_INC = +JPG_PATH = JPG_LIB = # --------------------------------------------------------------------- # build rules and dependencies # do not edit this section -include Makefile.package.settings -include Makefile.package +include Makefile.package.settings +include Makefile.package EXTRA_INC = $(LMP_INC) $(PKG_INC) $(MPI_INC) $(FFT_INC) $(JPG_INC) $(PKG_SYSINC) EXTRA_PATH = $(PKG_PATH) $(MPI_PATH) $(FFT_PATH) $(JPG_PATH) $(PKG_SYSPATH) @@ -84,28 +84,27 @@ vpath %.h .. # Link target -$(EXE): $(OBJ) $(EXTRA_LINK_DEPENDS) - $(LINK) $(LINKFLAGS) $(EXTRA_PATH) $(OBJ) $(EXTRA_LIB) $(LIB) -o $(EXE) - $(SIZE) $(EXE) +$(EXE): main.o $(LMPLIB) $(EXTRA_LINK_DEPENDS) + $(LINK) $(LINKFLAGS) main.o $(EXTRA_PATH) $(LMPLINK) $(EXTRA_LIB) $(LIB) -o $@ + $(SIZE) $@ # Library targets -lib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(ARCHIVE) $(ARFLAGS) $(EXE) $(OBJ) +$(ARLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + @rm -f ../$(ARLIB) + $(ARCHIVE) $(ARFLAGS) ../$(ARLIB) $(OBJ) + @rm -f $(ARLIB) + @ln -s ../$(ARLIB) $(ARLIB) -shlib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o $(EXE) \ - $(OBJ) $(EXTRA_LIB) $(LIB) +$(SHLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o ../$(SHLIB) \ + $(OBJ) $(EXTRA_LIB) $(LIB) + @rm -f $(SHLIB) + @ln -s ../$(SHLIB) $(SHLIB) # Compilation rules -%.o:%.cpp $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< - -%.d:%.cpp $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(EXTRA_INC) $(DEPFLAGS) $< > $@ - -%.o:%.cu $(EXTRA_CPP_DEPENDS) +%.o:%.cpp $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< # Individual dependencies diff --git a/src/MAKE/MACHINES/Makefile.astra_gcc b/src/MAKE/MACHINES/Makefile.astra_gcc index 3ee43800fcec8213cecc4d7fd3388511494f539c..e67bf467c439480ad8848f04117116da957d5932 100644 --- a/src/MAKE/MACHINES/Makefile.astra_gcc +++ b/src/MAKE/MACHINES/Makefile.astra_gcc @@ -1,4 +1,4 @@ -# astra-gcc - ThunderX2 GCC/OpenMPI Based, FFTW +# astra_gcc = ThunderX2 GCC/OpenMPI Based, FFTW # need to load the following modules: # 1) arm-based developer pack @@ -25,12 +25,12 @@ SIZE = size # if you change any -D setting, do full re-compile after "make clean" # LAMMPS ifdef settings -# see possible settings in Section 2.2 (step 4) of manual +# see possible settings in Section 3.5 of the manual LMP_INC = -DLAMMPS_GZIP # MPI library -# see discussion in Section 2.2 (step 5) of manual +# see discussion in Section 3.4 of the manual # MPI wrapper compiler/linker can provide this info # can point to dummy MPI library in src/STUBS as in Makefile.serial # use -D MPICH and OMPI settings in INC to avoid C++ lib conflicts @@ -43,7 +43,7 @@ MPI_PATH = MPI_LIB = # FFT library -# see discussion in Section 2.2 (step 6) of manaul +# see discussion in Section 3.5.2 of manual # can be left blank to use provided KISS FFT library # INC = -DFFT setting, e.g. -DFFT_FFTW, FFT compiler settings # PATH = path for FFT library @@ -54,22 +54,22 @@ FFT_PATH = -I${FFTW_INC} FFT_LIB = -L${FFTW_LIB} -lfftw3 # JPEG and/or PNG library -# see discussion in Section 2.2 (step 7) of manual +# see discussion in Section 3.5.4 of manual # only needed if -DLAMMPS_JPEG or -DLAMMPS_PNG listed with LMP_INC # INC = path(s) for jpeglib.h and/or png.h # PATH = path(s) for JPEG library and/or PNG library # LIB = name(s) of JPEG library and/or PNG library -JPG_INC = -JPG_PATH = +JPG_INC = +JPG_PATH = JPG_LIB = # --------------------------------------------------------------------- # build rules and dependencies # do not edit this section -include Makefile.package.settings -include Makefile.package +include Makefile.package.settings +include Makefile.package EXTRA_INC = $(LMP_INC) $(PKG_INC) $(MPI_INC) $(FFT_INC) $(JPG_INC) $(PKG_SYSINC) EXTRA_PATH = $(PKG_PATH) $(MPI_PATH) $(FFT_PATH) $(JPG_PATH) $(PKG_SYSPATH) @@ -84,28 +84,27 @@ vpath %.h .. # Link target -$(EXE): $(OBJ) $(EXTRA_LINK_DEPENDS) - $(LINK) $(LINKFLAGS) $(EXTRA_PATH) $(OBJ) $(EXTRA_LIB) $(LIB) -o $(EXE) - $(SIZE) $(EXE) +$(EXE): main.o $(LMPLIB) $(EXTRA_LINK_DEPENDS) + $(LINK) $(LINKFLAGS) main.o $(EXTRA_PATH) $(LMPLINK) $(EXTRA_LIB) $(LIB) -o $@ + $(SIZE) $@ # Library targets -lib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(ARCHIVE) $(ARFLAGS) $(EXE) $(OBJ) +$(ARLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + @rm -f ../$(ARLIB) + $(ARCHIVE) $(ARFLAGS) ../$(ARLIB) $(OBJ) + @rm -f $(ARLIB) + @ln -s ../$(ARLIB) $(ARLIB) -shlib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o $(EXE) \ - $(OBJ) $(EXTRA_LIB) $(LIB) +$(SHLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o ../$(SHLIB) \ + $(OBJ) $(EXTRA_LIB) $(LIB) + @rm -f $(SHLIB) + @ln -s ../$(SHLIB) $(SHLIB) # Compilation rules -%.o:%.cpp $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< - -%.d:%.cpp $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(EXTRA_INC) $(DEPFLAGS) $< > $@ - -%.o:%.cu $(EXTRA_CPP_DEPENDS) +%.o:%.cpp $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< # Individual dependencies diff --git a/src/MAKE/MACHINES/Makefile.beacon b/src/MAKE/MACHINES/Makefile.beacon deleted file mode 100644 index 522d7b1859e6107e89d73110e4c56be1d45dd09d..0000000000000000000000000000000000000000 --- a/src/MAKE/MACHINES/Makefile.beacon +++ /dev/null @@ -1,121 +0,0 @@ -# linux = RedHat Linux box, Intel icc, MPICH2, FFTW - -SHELL = /bin/sh - -# --------------------------------------------------------------------- -# compiler/linker settings -# specify flags and libraries needed for your compiler - -CC = mpiicpc -openmp -DLMP_INTEL_OFFLOAD -DLAMMPS_MEMALIGN=64 -MIC_OPT = -offload-option,mic,compiler,"-fp-model fast=2 -mGLOB_default_function_attrs=\"gather_scatter_loop_unroll=4\"" -CCFLAGS = -O3 -xAVX -fno-alias -ansi-alias -restrict -override-limits $(MIC_OPT) -SHFLAGS = -fPIC -DEPFLAGS = -M - -LINK = mpiicpc -openmp -LINKFLAGS = -O3 -xAVX -LIB = -ltbbmalloc -SIZE = size - -ARCHIVE = ar -ARFLAGS = -rc -SHLIBFLAGS = -shared - -# --------------------------------------------------------------------- -# LAMMPS-specific settings, all OPTIONAL -# specify settings for LAMMPS features you will use -# if you change any -D setting, do full re-compile after "make clean" - -# LAMMPS ifdef settings -# see possible settings in Section 2.2 (step 4) of manual - -LMP_INC = -DLAMMPS_GZIP -DLAMMPS_JPEG - -# MPI library -# see discussion in Section 2.2 (step 5) of manual -# MPI wrapper compiler/linker can provide this info -# can point to dummy MPI library in src/STUBS as in Makefile.serial -# use -D MPICH and OMPI settings in INC to avoid C++ lib conflicts -# INC = path for mpi.h, MPI compiler settings -# PATH = path for MPI library -# LIB = name of MPI library - -MPI_INC = -DMPICH_SKIP_MPICXX -MPI_PATH = -MPI_LIB = - -# FFT library -# see discussion in Section 2.2 (step 6) of manaul -# can be left blank to use provided KISS FFT library -# INC = -DFFT setting, e.g. -DFFT_FFTW, FFT compiler settings -# PATH = path for FFT library -# LIB = name of FFT library - -FFT_INC = -DFFT_MKL -DFFT_SINGLE -I$(MKLROOT) -FFT_PATH = -FFT_LIB = -L$(MKLROOT) -lmkl_intel_ilp64 -lmkl_intel_thread -lmkl_core - -# JPEG and/or PNG library -# see discussion in Section 2.2 (step 7) of manual -# only needed if -DLAMMPS_JPEG or -DLAMMPS_PNG listed with LMP_INC -# INC = path(s) for jpeglib.h and/or png.h -# PATH = path(s) for JPEG library and/or PNG library -# LIB = name(s) of JPEG library and/or PNG library - -JPG_INC = -JPG_PATH = -JPG_LIB = -ljpeg - -# --------------------------------------------------------------------- -# build rules and dependencies -# do not edit this section - -include Makefile.package.settings -include Makefile.package - -EXTRA_INC = $(LMP_INC) $(PKG_INC) $(MPI_INC) $(FFT_INC) $(JPG_INC) $(PKG_SYSINC) -EXTRA_PATH = $(PKG_PATH) $(MPI_PATH) $(FFT_PATH) $(JPG_PATH) $(PKG_SYSPATH) -EXTRA_LIB = $(PKG_LIB) $(MPI_LIB) $(FFT_LIB) $(JPG_LIB) $(PKG_SYSLIB) -EXTRA_CPP_DEPENDS = $(PKG_CPP_DEPENDS) -EXTRA_LINK_DEPENDS = $(PKG_LINK_DEPENDS) - -# Path to src files - -vpath %.cpp .. -vpath %.h .. - -# Link target - -$(EXE): $(OBJ) $(EXTRA_LINK_DEPENDS) - $(LINK) $(LINKFLAGS) $(EXTRA_PATH) $(OBJ) $(EXTRA_LIB) $(LIB) -o $(EXE) - $(SIZE) $(EXE) - -# Library targets - -lib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(ARCHIVE) $(ARFLAGS) $(EXE) $(OBJ) - -shlib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o $(EXE) \ - $(OBJ) $(EXTRA_LIB) $(LIB) - -# Compilation rules - -%.o:%.cpp $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< - -%.d:%.cpp $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(EXTRA_INC) $(DEPFLAGS) $< > $@ - -%.o:%.cu $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< - -# Individual dependencies - -depend : fastdep.exe $(SRC) - @./fastdep.exe $(EXTRA_INC) -- $^ > .depend || exit 1 - -fastdep.exe: ../DEPEND/fastdep.c - cc -O -o $@ $< - -sinclude .depend diff --git a/src/MAKE/MACHINES/Makefile.bgl b/src/MAKE/MACHINES/Makefile.bgl index 4759cde1ff9cea5fe7cbf448784a5eff0408ccdc..170b18d173dc3c4176befbcf384118c054a5bf2b 100644 --- a/src/MAKE/MACHINES/Makefile.bgl +++ b/src/MAKE/MACHINES/Makefile.bgl @@ -32,12 +32,12 @@ SHLIBFLAGS = -shared # if you change any -D setting, do full re-compile after "make clean" # LAMMPS ifdef settings -# see possible settings in Section 2.2 (step 4) of manual +# see possible settings in Section 3.5 of the manual LMP_INC = -DLAMMPS_GZIP # MPI library -# see discussion in Section 2.2 (step 5) of manual +# see discussion in Section 3.4 of the manual # MPI wrapper compiler/linker can provide this info # can point to dummy MPI library in src/STUBS as in Makefile.serial # use -D MPICH and OMPI settings in INC to avoid C++ lib conflicts @@ -50,33 +50,33 @@ MPI_PATH = MPI_LIB = -lmpich.rts # FFT library -# see discussion in Section 2.2 (step 6) of manaul +# see discussion in Section 3.5.2 of manual # can be left blank to use provided KISS FFT library # INC = -DFFT setting, e.g. -DFFT_FFTW, FFT compiler settings # PATH = path for FFT library # LIB = name of FFT library -FFT_INC = -DFFT_FFTW2 -FFT_PATH = -FFT_LIB = -lfftw +FFT_INC = +FFT_PATH = +FFT_LIB = # JPEG and/or PNG library -# see discussion in Section 2.2 (step 7) of manual +# see discussion in Section 3.5.4 of manual # only needed if -DLAMMPS_JPEG or -DLAMMPS_PNG listed with LMP_INC # INC = path(s) for jpeglib.h and/or png.h # PATH = path(s) for JPEG library and/or PNG library # LIB = name(s) of JPEG library and/or PNG library -JPG_INC = -JPG_PATH = -JPG_LIB = +JPG_INC = +JPG_PATH = +JPG_LIB = # --------------------------------------------------------------------- # build rules and dependencies # do not edit this section -include Makefile.package.settings -include Makefile.package +include Makefile.package.settings +include Makefile.package EXTRA_INC = $(LMP_INC) $(PKG_INC) $(MPI_INC) $(FFT_INC) $(JPG_INC) $(PKG_SYSINC) EXTRA_PATH = $(PKG_PATH) $(MPI_PATH) $(FFT_PATH) $(JPG_PATH) $(PKG_SYSPATH) @@ -91,28 +91,27 @@ vpath %.h .. # Link target -$(EXE): $(OBJ) $(EXTRA_LINK_DEPENDS) - $(LINK) $(LINKFLAGS) $(EXTRA_PATH) $(OBJ) $(EXTRA_LIB) $(LIB) -o $(EXE) - $(SIZE) $(EXE) +$(EXE): main.o $(LMPLIB) $(EXTRA_LINK_DEPENDS) + $(LINK) $(LINKFLAGS) main.o $(EXTRA_PATH) $(LMPLINK) $(EXTRA_LIB) $(LIB) -o $@ + $(SIZE) $@ # Library targets -lib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(ARCHIVE) $(ARFLAGS) $(EXE) $(OBJ) +$(ARLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + @rm -f ../$(ARLIB) + $(ARCHIVE) $(ARFLAGS) ../$(ARLIB) $(OBJ) + @rm -f $(ARLIB) + @ln -s ../$(ARLIB) $(ARLIB) -shlib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o $(EXE) \ - $(OBJ) $(EXTRA_LIB) $(LIB) +$(SHLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o ../$(SHLIB) \ + $(OBJ) $(EXTRA_LIB) $(LIB) + @rm -f $(SHLIB) + @ln -s ../$(SHLIB) $(SHLIB) # Compilation rules -%.o:%.cpp $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< - -%.d:%.cpp $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(EXTRA_INC) $(DEPFLAGS) $< > $@ - -%.o:%.cu $(EXTRA_CPP_DEPENDS) +%.o:%.cpp $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< # Individual dependencies diff --git a/src/MAKE/MACHINES/Makefile.bgq b/src/MAKE/MACHINES/Makefile.bgq index c995f4110864666b832b5892b107bbf6c2cc469c..f0401e075869f78feca0b1348e79b2098c4d6d92 100644 --- a/src/MAKE/MACHINES/Makefile.bgq +++ b/src/MAKE/MACHINES/Makefile.bgq @@ -8,7 +8,7 @@ SHELL = /bin/bash # do not edit this section # select which compiler by editing Makefile.bgq.details -include ../MAKE/MACHINES/Makefile.bgq.details +include ../MAKE/MACHINES/bgq.make.details include Makefile.package.settings include Makefile.package @@ -26,28 +26,27 @@ vpath %.h .. # Link target -$(EXE): $(OBJ) $(EXTRA_LINK_DEPENDS) - $(LINK) $(LINKFLAGS) $(EXTRA_PATH) $(OBJ) $(EXTRA_LIB) $(LIB) -o $(EXE) - $(SIZE) $(EXE) +$(EXE): main.o $(LMPLIB) $(EXTRA_LINK_DEPENDS) + $(LINK) $(LINKFLAGS) main.o $(EXTRA_PATH) $(LMPLINK) $(EXTRA_LIB) $(LIB) -o $@ + $(SIZE) $@ # Library targets -lib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(ARCHIVE) $(ARFLAGS) $(EXE) $(OBJ) +$(ARLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + @rm -f ../$(ARLIB) + $(ARCHIVE) $(ARFLAGS) ../$(ARLIB) $(OBJ) + @rm -f $(ARLIB) + @ln -s ../$(ARLIB) $(ARLIB) -shlib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o $(EXE) \ - $(OBJ) $(EXTRA_LIB) $(LIB) +$(SHLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o ../$(SHLIB) \ + $(OBJ) $(EXTRA_LIB) $(LIB) + @rm -f $(SHLIB) + @ln -s ../$(SHLIB) $(SHLIB) # Compilation rules -%.o:%.cpp $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< - -%.d:%.cpp $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(EXTRA_INC) $(DEPFLAGS) $< > $@ - -%.o:%.cu $(EXTRA_CPP_DEPENDS) +%.o:%.cpp $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< # Individual dependencies diff --git a/src/MAKE/MACHINES/Makefile.chama b/src/MAKE/MACHINES/Makefile.chama index aab5bb3d22d6757e82cb4d329f28cf9123068639..ba6dceba5802e773f60975ae32aa37ee58c16a1e 100644 --- a/src/MAKE/MACHINES/Makefile.chama +++ b/src/MAKE/MACHINES/Makefile.chama @@ -1,4 +1,4 @@ -# chama - Intel SandyBridge, mpic++, openmpi, no FFTW +# chama = Intel SandyBridge, mpic++, openmpi, no FFTW # need to load the following modules: # 1) intel/12.1 @@ -26,12 +26,12 @@ SIZE = size # if you change any -D setting, do full re-compile after "make clean" # LAMMPS ifdef settings -# see possible settings in Section 2.2 (step 4) of manual +# see possible settings in Section 3.5 of the manual LMP_INC = -DLAMMPS_GZIP # MPI library -# see discussion in Section 2.2 (step 5) of manual +# see discussion in Section 3.4 of the manual # MPI wrapper compiler/linker can provide this info # can point to dummy MPI library in src/STUBS as in Makefile.serial # use -D MPICH and OMPI settings in INC to avoid C++ lib conflicts @@ -39,38 +39,38 @@ LMP_INC = -DLAMMPS_GZIP # PATH = path for MPI library # LIB = name of MPI library -MPI_INC = -MPI_PATH = +MPI_INC = -DMPICH_SKIP_MPICXX -DOMPI_SKIP_MPICXX=1 +MPI_PATH = MPI_LIB = # FFT library -# see discussion in Section 2.2 (step 6) of manaul +# see discussion in Section 3.5.2 of manual # can be left blank to use provided KISS FFT library # INC = -DFFT setting, e.g. -DFFT_FFTW, FFT compiler settings # PATH = path for FFT library # LIB = name of FFT library -#FFT_INC = -DFFT_FFTW2 -I${FFTW_INCLUDE} -#FFT_PATH = -L${FFTW_LIB} -#FFT_LIB = -lfftw +FFT_INC = +FFT_PATH = +FFT_LIB = # JPEG and/or PNG library -# see discussion in Section 2.2 (step 7) of manual +# see discussion in Section 3.5.4 of manual # only needed if -DLAMMPS_JPEG or -DLAMMPS_PNG listed with LMP_INC # INC = path(s) for jpeglib.h and/or png.h # PATH = path(s) for JPEG library and/or PNG library # LIB = name(s) of JPEG library and/or PNG library -JPG_INC = -JPG_PATH = +JPG_INC = +JPG_PATH = JPG_LIB = # --------------------------------------------------------------------- # build rules and dependencies # do not edit this section -include Makefile.package.settings -include Makefile.package +include Makefile.package.settings +include Makefile.package EXTRA_INC = $(LMP_INC) $(PKG_INC) $(MPI_INC) $(FFT_INC) $(JPG_INC) $(PKG_SYSINC) EXTRA_PATH = $(PKG_PATH) $(MPI_PATH) $(FFT_PATH) $(JPG_PATH) $(PKG_SYSPATH) @@ -85,28 +85,27 @@ vpath %.h .. # Link target -$(EXE): $(OBJ) $(EXTRA_LINK_DEPENDS) - $(LINK) $(LINKFLAGS) $(EXTRA_PATH) $(OBJ) $(EXTRA_LIB) $(LIB) -o $(EXE) - $(SIZE) $(EXE) +$(EXE): main.o $(LMPLIB) $(EXTRA_LINK_DEPENDS) + $(LINK) $(LINKFLAGS) main.o $(EXTRA_PATH) $(LMPLINK) $(EXTRA_LIB) $(LIB) -o $@ + $(SIZE) $@ # Library targets -lib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(ARCHIVE) $(ARFLAGS) $(EXE) $(OBJ) +$(ARLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + @rm -f ../$(ARLIB) + $(ARCHIVE) $(ARFLAGS) ../$(ARLIB) $(OBJ) + @rm -f $(ARLIB) + @ln -s ../$(ARLIB) $(ARLIB) -shlib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o $(EXE) \ - $(OBJ) $(EXTRA_LIB) $(LIB) +$(SHLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o ../$(SHLIB) \ + $(OBJ) $(EXTRA_LIB) $(LIB) + @rm -f $(SHLIB) + @ln -s ../$(SHLIB) $(SHLIB) # Compilation rules -%.o:%.cpp $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< - -%.d:%.cpp $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(EXTRA_INC) $(DEPFLAGS) $< > $@ - -%.o:%.cu $(EXTRA_CPP_DEPENDS) +%.o:%.cpp $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< # Individual dependencies diff --git a/src/MAKE/MACHINES/Makefile.cori2 b/src/MAKE/MACHINES/Makefile.cori2 index 45e1ab1f8a3aed152bd96ce567b858d0148eaee8..ca902617fd87cf3bd218f3d820bd24469c66e547 100644 --- a/src/MAKE/MACHINES/Makefile.cori2 +++ b/src/MAKE/MACHINES/Makefile.cori2 @@ -13,9 +13,9 @@ SHELL = /bin/sh # compiler/linker settings # specify flags and libraries needed for your compiler -CC = CC +CC = CC -std=c++11 OPTFLAGS = -xMIC-AVX512 -O2 -fp-model fast=2 -no-prec-div -qoverride-limits -CCFLAGS = -qopenmp -qno-offload -fno-alias -ansi-alias -restrict \ +CCFLAGS = -qopenmp -qno-offload -ansi-alias -restrict \ -DLMP_INTEL_USELRT -DLMP_USE_MKL_RNG -DLMP_INTEL_NO_TBB \ $(OPTFLAGS) SHFLAGS = -fPIC @@ -36,12 +36,12 @@ SHLIBFLAGS = -shared # if you change any -D setting, do full re-compile after "make clean" # LAMMPS ifdef settings -# see possible settings in Section 2.2 (step 4) of manual +# see possible settings in Section 3.5 of the manual LMP_INC = #-DLAMMPS_GZIP -DLAMMPS_JPEG # MPI library -# see discussion in Section 2.2 (step 5) of manual +# see discussion in Section 3.4 of the manual # MPI wrapper compiler/linker can provide this info # can point to dummy MPI library in src/STUBS as in Makefile.serial # use -D MPICH and OMPI settings in INC to avoid C++ lib conflicts @@ -50,11 +50,11 @@ LMP_INC = #-DLAMMPS_GZIP -DLAMMPS_JPEG # LIB = name of MPI library MPI_INC = -DMPICH_SKIP_MPICXX -DOMPI_SKIP_MPICXX=1 -MPI_PATH = +MPI_PATH = MPI_LIB = # FFT library -# see discussion in Section 2.2 (step 6) of manaul +# see discussion in Section 3.5.2 of manual # can be left blank to use provided KISS FFT library # INC = -DFFT setting, e.g. -DFFT_FFTW, FFT compiler settings # PATH = path for FFT library @@ -65,7 +65,7 @@ FFT_PATH = FFT_LIB = -lfftw3f # JPEG and/or PNG library -# see discussion in Section 2.2 (step 7) of manual +# see discussion in Section 3.5.4 of manual # only needed if -DLAMMPS_JPEG or -DLAMMPS_PNG listed with LMP_INC # INC = path(s) for jpeglib.h and/or png.h # PATH = path(s) for JPEG library and/or PNG library @@ -79,12 +79,14 @@ JPG_LIB = #-ljpeg # build rules and dependencies # do not edit this section -include Makefile.package.settings -include Makefile.package +include Makefile.package.settings +include Makefile.package EXTRA_INC = $(LMP_INC) $(PKG_INC) $(MPI_INC) $(FFT_INC) $(JPG_INC) $(PKG_SYSINC) EXTRA_PATH = $(PKG_PATH) $(MPI_PATH) $(FFT_PATH) $(JPG_PATH) $(PKG_SYSPATH) EXTRA_LIB = $(PKG_LIB) $(MPI_LIB) $(FFT_LIB) $(JPG_LIB) $(PKG_SYSLIB) +EXTRA_CPP_DEPENDS = $(PKG_CPP_DEPENDS) +EXTRA_LINK_DEPENDS = $(PKG_LINK_DEPENDS) # Path to src files @@ -93,30 +95,29 @@ vpath %.h .. # Link target -$(EXE): $(OBJ) - $(LINK) $(LINKFLAGS) $(EXTRA_PATH) $(OBJ) $(EXTRA_LIB) $(LIB) -o $(EXE) - $(SIZE) $(EXE) +$(EXE): main.o $(LMPLIB) $(EXTRA_LINK_DEPENDS) + $(LINK) $(LINKFLAGS) main.o $(EXTRA_PATH) $(LMPLINK) $(EXTRA_LIB) $(LIB) -o $@ + $(SIZE) $@ # Library targets -lib: $(OBJ) - $(ARCHIVE) $(ARFLAGS) $(EXE) $(OBJ) +$(ARLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + @rm -f ../$(ARLIB) + $(ARCHIVE) $(ARFLAGS) ../$(ARLIB) $(OBJ) + @rm -f $(ARLIB) + @ln -s ../$(ARLIB) $(ARLIB) -shlib: $(OBJ) - $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o $(EXE) \ - $(OBJ) $(EXTRA_LIB) $(LIB) +$(SHLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o ../$(SHLIB) \ + $(OBJ) $(EXTRA_LIB) $(LIB) + @rm -f $(SHLIB) + @ln -s ../$(SHLIB) $(SHLIB) # Compilation rules %.o:%.cpp $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< -%.d:%.cpp - $(CC) $(CCFLAGS) $(EXTRA_INC) $(DEPFLAGS) $< > $@ - -%.o:%.cu - $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< - # Individual dependencies depend : fastdep.exe $(SRC) diff --git a/src/MAKE/MACHINES/Makefile.cygwin b/src/MAKE/MACHINES/Makefile.cygwin index 53e94d975e37a7b763ed9b95e4e4701df9e31f50..4c47860a566b1883ee55e794c3c9c1e6d9c97aaa 100644 --- a/src/MAKE/MACHINES/Makefile.cygwin +++ b/src/MAKE/MACHINES/Makefile.cygwin @@ -26,12 +26,12 @@ SHLIBFLAGS = -shared # if you change any -D setting, do full re-compile after "make clean" # LAMMPS ifdef settings -# see possible settings in Section 2.2 (step 4) of manual +# see possible settings in Section 3.5 of the manual LMP_INC = -DLAMMPS_GZIP # MPI library -# see discussion in Section 2.2 (step 5) of manual +# see discussion in Section 3.4 of the manual # MPI wrapper compiler/linker can provide this info # can point to dummy MPI library in src/STUBS as in Makefile.serial # use -D MPICH and OMPI settings in INC to avoid C++ lib conflicts @@ -44,33 +44,33 @@ MPI_PATH = -L/cygdrive/c/cygwin/mpich2-1.0.4p1/lib MPI_LIB = -lmpich # FFT library -# see discussion in Section 2.2 (step 6) of manaul +# see discussion in Section 3.5.2 of manual # can be left blank to use provided KISS FFT library # INC = -DFFT setting, e.g. -DFFT_FFTW, FFT compiler settings # PATH = path for FFT library # LIB = name of FFT library -FFT_INC = -DFFT_FFTW2 -I/cygdrive/c/cygwin/usr/local/include -FFT_PATH = -L/cygdrive/c/cygwin/usr/local/lib -FFT_LIB = -lfftw +FFT_INC = +FFT_PATH = +FFT_LIB = # JPEG and/or PNG library -# see discussion in Section 2.2 (step 7) of manual +# see discussion in Section 3.5.4 of manual # only needed if -DLAMMPS_JPEG or -DLAMMPS_PNG listed with LMP_INC # INC = path(s) for jpeglib.h and/or png.h # PATH = path(s) for JPEG library and/or PNG library # LIB = name(s) of JPEG library and/or PNG library -JPG_INC = -JPG_PATH = -JPG_LIB = +JPG_INC = +JPG_PATH = +JPG_LIB = # --------------------------------------------------------------------- # build rules and dependencies # do not edit this section -include Makefile.package.settings -include Makefile.package +include Makefile.package.settings +include Makefile.package EXTRA_INC = $(LMP_INC) $(PKG_INC) $(MPI_INC) $(FFT_INC) $(JPG_INC) $(PKG_SYSINC) EXTRA_PATH = $(PKG_PATH) $(MPI_PATH) $(FFT_PATH) $(JPG_PATH) $(PKG_SYSPATH) @@ -85,28 +85,27 @@ vpath %.h .. # Link target -$(EXE): $(OBJ) $(EXTRA_LINK_DEPENDS) - $(LINK) $(LINKFLAGS) $(EXTRA_PATH) $(OBJ) $(EXTRA_LIB) $(LIB) -o $(EXE) - $(SIZE) $(EXE) +$(EXE): main.o $(LMPLIB) $(EXTRA_LINK_DEPENDS) + $(LINK) $(LINKFLAGS) main.o $(EXTRA_PATH) $(LMPLINK) $(EXTRA_LIB) $(LIB) -o $@ + $(SIZE) $@ # Library targets -lib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(ARCHIVE) $(ARFLAGS) $(EXE) $(OBJ) +$(ARLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + @rm -f ../$(ARLIB) + $(ARCHIVE) $(ARFLAGS) ../$(ARLIB) $(OBJ) + @rm -f $(ARLIB) + @ln -s ../$(ARLIB) $(ARLIB) -shlib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o $(EXE) \ - $(OBJ) $(EXTRA_LIB) $(LIB) +$(SHLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o ../$(SHLIB) \ + $(OBJ) $(EXTRA_LIB) $(LIB) + @rm -f $(SHLIB) + @ln -s ../$(SHLIB) $(SHLIB) # Compilation rules -%.o:%.cpp $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< - -%.d:%.cpp $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(EXTRA_INC) $(DEPFLAGS) $< > $@ - -%.o:%.cu $(EXTRA_CPP_DEPENDS) +%.o:%.cpp $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< # Individual dependencies diff --git a/src/MAKE/MACHINES/Makefile.glory b/src/MAKE/MACHINES/Makefile.glory index d856b1a07d8623eaf7281137f86707b3eb6cbdee..d21fe668ecc9f7355b0d5836c4d419b7f03b77e5 100644 --- a/src/MAKE/MACHINES/Makefile.glory +++ b/src/MAKE/MACHINES/Makefile.glory @@ -43,12 +43,12 @@ SHLIBFLAGS = -shared # if you change any -D setting, do full re-compile after "make clean" # LAMMPS ifdef settings -# see possible settings in Section 2.2 (step 4) of manual +# see possible settings in Section 3.5 of the manual LMP_INC = -DLAMMPS_GZIP # MPI library -# see discussion in Section 2.2 (step 5) of manual +# see discussion in Section 3.4 of the manual # MPI wrapper compiler/linker can provide this info # can point to dummy MPI library in src/STUBS as in Makefile.serial # use -D MPICH and OMPI settings in INC to avoid C++ lib conflicts @@ -61,33 +61,33 @@ MPI_PATH = MPI_LIB = # FFT library -# see discussion in Section 2.2 (step 6) of manaul +# see discussion in Section 3.5.2 of manual # can be left blank to use provided KISS FFT library # INC = -DFFT setting, e.g. -DFFT_FFTW, FFT compiler settings # PATH = path for FFT library # LIB = name of FFT library -FFT_INC = -DFFT_FFTW2 -I${FFTW_INCLUDE} -FFT_PATH = -L${FFTW_LIB} -FFT_LIB = -lfftw +FFT_INC = +FFT_PATH = +FFT_LIB = # JPEG and/or PNG library -# see discussion in Section 2.2 (step 7) of manual +# see discussion in Section 3.5.4 of manual # only needed if -DLAMMPS_JPEG or -DLAMMPS_PNG listed with LMP_INC # INC = path(s) for jpeglib.h and/or png.h # PATH = path(s) for JPEG library and/or PNG library # LIB = name(s) of JPEG library and/or PNG library -JPG_INC = -JPG_PATH = -JPG_LIB = +JPG_INC = +JPG_PATH = +JPG_LIB = # --------------------------------------------------------------------- # build rules and dependencies # do not edit this section -include Makefile.package.settings -include Makefile.package +include Makefile.package.settings +include Makefile.package EXTRA_INC = $(LMP_INC) $(PKG_INC) $(MPI_INC) $(FFT_INC) $(JPG_INC) $(PKG_SYSINC) EXTRA_PATH = $(PKG_PATH) $(MPI_PATH) $(FFT_PATH) $(JPG_PATH) $(PKG_SYSPATH) @@ -102,28 +102,27 @@ vpath %.h .. # Link target -$(EXE): $(OBJ) $(EXTRA_LINK_DEPENDS) - $(LINK) $(LINKFLAGS) $(EXTRA_PATH) $(OBJ) $(EXTRA_LIB) $(LIB) -o $(EXE) - $(SIZE) $(EXE) +$(EXE): main.o $(LMPLIB) $(EXTRA_LINK_DEPENDS) + $(LINK) $(LINKFLAGS) main.o $(EXTRA_PATH) $(LMPLINK) $(EXTRA_LIB) $(LIB) -o $@ + $(SIZE) $@ # Library targets -lib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(ARCHIVE) $(ARFLAGS) $(EXE) $(OBJ) +$(ARLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + @rm -f ../$(ARLIB) + $(ARCHIVE) $(ARFLAGS) ../$(ARLIB) $(OBJ) + @rm -f $(ARLIB) + @ln -s ../$(ARLIB) $(ARLIB) -shlib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o $(EXE) \ - $(OBJ) $(EXTRA_LIB) $(LIB) +$(SHLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o ../$(SHLIB) \ + $(OBJ) $(EXTRA_LIB) $(LIB) + @rm -f $(SHLIB) + @ln -s ../$(SHLIB) $(SHLIB) # Compilation rules -%.o:%.cpp $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< - -%.d:%.cpp $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(EXTRA_INC) $(DEPFLAGS) $< > $@ - -%.o:%.cu $(EXTRA_CPP_DEPENDS) +%.o:%.cpp $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< # Individual dependencies diff --git a/src/MAKE/MACHINES/Makefile.icex b/src/MAKE/MACHINES/Makefile.icex index ceeec488700d7760263103ebb51a18d081bb94f2..dc2019a8f44570b4a6caaf354988590977eba2a5 100644 --- a/src/MAKE/MACHINES/Makefile.icex +++ b/src/MAKE/MACHINES/Makefile.icex @@ -1,4 +1,4 @@ -# mpi = MPI with its default compiler +# icex = unknown 64-bit x86_64 machine SHELL = /bin/sh @@ -26,14 +26,14 @@ SHLIBFLAGS = -shared # if you change any -D setting, do full re-compile after "make clean" # LAMMPS ifdef settings -# see possible settings in Section 2.2 (step 4) of manual +# see possible settings in Section 3.5 of the manual LMP_INC = -DLAMMPS_GZIP #LMP_INC += -DLAMMPS_JPEG LMP_INC += -DLAMMPS_MEMALIGN=64 # MPI library -# see discussion in Section 2.2 (step 5) of manual +# see discussion in Section 3.4 of the manual # MPI wrapper compiler/linker can provide this info # can point to dummy MPI library in src/STUBS as in Makefile.serial # use -D MPICH and OMPI settings in INC to avoid C++ lib conflicts @@ -42,37 +42,37 @@ LMP_INC += -DLAMMPS_MEMALIGN=64 # LIB = name of MPI library MPI_INC = -DMPICH_SKIP_MPICXX -DOMPI_SKIP_MPICXX=1 -MPI_PATH = -MPI_LIB = +MPI_PATH = +MPI_LIB = # FFT library -# see discussion in Section 2.2 (step 6) of manual +# see discussion in Section 3.5.2 of manual # can be left blank to use provided KISS FFT library # INC = -DFFT setting, e.g. -DFFT_FFTW, FFT compiler settings # PATH = path for FFT library # LIB = name of FFT library -FFT_INC = -FFT_PATH = -FFT_LIB = +FFT_INC = +FFT_PATH = +FFT_LIB = # JPEG and/or PNG library -# see discussion in Section 2.2 (step 7) of manual +# see discussion in Section 3.5.4 of manual # only needed if -DLAMMPS_JPEG or -DLAMMPS_PNG listed with LMP_INC # INC = path(s) for jpeglib.h and/or png.h # PATH = path(s) for JPEG library and/or PNG library # LIB = name(s) of JPEG library and/or PNG library -JPG_INC = -JPG_PATH = -JPG_LIB = +JPG_INC = +JPG_PATH = +JPG_LIB = # --------------------------------------------------------------------- # build rules and dependencies # do not edit this section -include Makefile.package.settings -include Makefile.package +include Makefile.package.settings +include Makefile.package EXTRA_INC = $(LMP_INC) $(PKG_INC) $(MPI_INC) $(FFT_INC) $(JPG_INC) $(PKG_SYSINC) EXTRA_PATH = $(PKG_PATH) $(MPI_PATH) $(FFT_PATH) $(JPG_PATH) $(PKG_SYSPATH) @@ -87,18 +87,23 @@ vpath %.h .. # Link target -$(EXE): $(OBJ) $(EXTRA_LINK_DEPENDS) - $(LINK) $(LINKFLAGS) $(EXTRA_PATH) $(OBJ) $(EXTRA_LIB) $(LIB) -o $(EXE) - $(SIZE) $(EXE) +$(EXE): main.o $(LMPLIB) $(EXTRA_LINK_DEPENDS) + $(LINK) $(LINKFLAGS) main.o $(EXTRA_PATH) $(LMPLINK) $(EXTRA_LIB) $(LIB) -o $@ + $(SIZE) $@ # Library targets -lib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(ARCHIVE) $(ARFLAGS) $(EXE) $(OBJ) - -shlib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o $(EXE) \ - $(OBJ) $(EXTRA_LIB) $(LIB) +$(ARLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + @rm -f ../$(ARLIB) + $(ARCHIVE) $(ARFLAGS) ../$(ARLIB) $(OBJ) + @rm -f $(ARLIB) + @ln -s ../$(ARLIB) $(ARLIB) + +$(SHLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o ../$(SHLIB) \ + $(OBJ) $(EXTRA_LIB) $(LIB) + @rm -f $(SHLIB) + @ln -s ../$(SHLIB) $(SHLIB) # Compilation rules diff --git a/src/MAKE/MACHINES/Makefile.jaguar b/src/MAKE/MACHINES/Makefile.jaguar deleted file mode 100644 index 7f2ce560dfca2a913295de6865c4f9d3f4f9a970..0000000000000000000000000000000000000000 --- a/src/MAKE/MACHINES/Makefile.jaguar +++ /dev/null @@ -1,120 +0,0 @@ -# jaguar = ORNL Jaguar Cray XT5, CC, native MPICH, FFTW - -SHELL = /bin/sh - -# --------------------------------------------------------------------- -# compiler/linker settings -# specify flags and libraries needed for your compiler - -CXX = CC -CCFLAGS = -g -O -SHFLAGS = -fPIC -DEPFLAGS = -M - -LINK = $(CXX) -LINKFLAGS = -g -O -LIB = -SIZE = size - -ARCHIVE = ar -ARFLAGS = -rc -SHLIBFLAGS = -shared - -# --------------------------------------------------------------------- -# LAMMPS-specific settings, all OPTIONAL -# specify settings for LAMMPS features you will use -# if you change any -D setting, do full re-compile after "make clean" - -# LAMMPS ifdef settings -# see possible settings in Section 2.2 (step 4) of manual - -LMP_INC = -DLAMMPS_GZIP -DNODE_PARTITION - -# MPI library -# see discussion in Section 2.2 (step 5) of manual -# MPI wrapper compiler/linker can provide this info -# can point to dummy MPI library in src/STUBS as in Makefile.serial -# use -D MPICH and OMPI settings in INC to avoid C++ lib conflicts -# INC = path for mpi.h, MPI compiler settings -# PATH = path for MPI library -# LIB = name of MPI library - -MPI_INC = -DMPICH_SKIP_MPICXX -MPI_PATH = -MPI_LIB = -lmpich -lpthread - -# FFT library -# see discussion in Section 2.2 (step 6) of manaul -# can be left blank to use provided KISS FFT library -# INC = -DFFT setting, e.g. -DFFT_FFTW, FFT compiler settings -# PATH = path for FFT library -# LIB = name of FFT library - -FFT_INC = -DFFT_FFTW3 -I$(FFTW_INC) -FFT_PATH = -L$(FFTW_DIR) -FFT_LIB = -lfftw3 - -# JPEG and/or PNG library -# see discussion in Section 2.2 (step 7) of manual -# only needed if -DLAMMPS_JPEG or -DLAMMPS_PNG listed with LMP_INC -# INC = path(s) for jpeglib.h and/or png.h -# PATH = path(s) for JPEG library and/or PNG library -# LIB = name(s) of JPEG library and/or PNG library - -JPG_INC = -JPG_PATH = -JPG_LIB = - -# --------------------------------------------------------------------- -# build rules and dependencies -# do not edit this section - -include Makefile.package.settings -include Makefile.package - -EXTRA_INC = $(LMP_INC) $(PKG_INC) $(MPI_INC) $(FFT_INC) $(JPG_INC) $(PKG_SYSINC) -EXTRA_PATH = $(PKG_PATH) $(MPI_PATH) $(FFT_PATH) $(JPG_PATH) $(PKG_SYSPATH) -EXTRA_LIB = $(PKG_LIB) $(MPI_LIB) $(FFT_LIB) $(JPG_LIB) $(PKG_SYSLIB) -EXTRA_CPP_DEPENDS = $(PKG_CPP_DEPENDS) -EXTRA_LINK_DEPENDS = $(PKG_LINK_DEPENDS) - -# Path to src files - -vpath %.cpp .. -vpath %.h .. - -# Link target - -$(EXE): $(OBJ) $(EXTRA_LINK_DEPENDS) - $(LINK) $(LINKFLAGS) $(EXTRA_PATH) $(OBJ) $(EXTRA_LIB) $(LIB) -o $(EXE) - $(SIZE) $(EXE) - -# Library targets - -lib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(ARCHIVE) $(ARFLAGS) $(EXE) $(OBJ) - -shlib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o $(EXE) \ - $(OBJ) $(EXTRA_LIB) $(LIB) - -# Compilation rules - -%.o:%.cpp $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< - -%.d:%.cpp $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(EXTRA_INC) $(DEPFLAGS) $< > $@ - -%.o:%.cu $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< - -# Individual dependencies - -depend : fastdep.exe $(SRC) - @./fastdep.exe $(EXTRA_INC) -- $^ > .depend || exit 1 - -fastdep.exe: ../DEPEND/fastdep.c - cc -O -o $@ $< - -sinclude .depend diff --git a/src/MAKE/MACHINES/Makefile.mac b/src/MAKE/MACHINES/Makefile.mac index d38ec202db59a46624ff1fc6d7d050d92028ab75..67381fe622b2e1cdf6b1272c0df1e89f97406b90 100644 --- a/src/MAKE/MACHINES/Makefile.mac +++ b/src/MAKE/MACHINES/Makefile.mac @@ -1,4 +1,4 @@ -# mac = Apple PowerBook G4 laptop, c++, no MPI, FFTW 2.1.5 +# mac = Apple PowerBook G4 laptop, c++, no MPI SHELL = /bin/sh @@ -26,12 +26,12 @@ SHLIBFLAGS = -shared # if you change any -D setting, do full re-compile after "make clean" # LAMMPS ifdef settings -# see possible settings in Section 2.2 (step 4) of manual +# see possible settings in Section 3.5 of the manual LMP_INC = -DLAMMPS_GZIP # MPI library -# see discussion in Section 2.2 (step 5) of manual +# see discussion in Section 3.4 of the manual # MPI wrapper compiler/linker can provide this info # can point to dummy MPI library in src/STUBS as in Makefile.serial # use -D MPICH and OMPI settings in INC to avoid C++ lib conflicts @@ -44,33 +44,33 @@ MPI_PATH = -L../STUBS MPI_LIB = -lmpi_stubs # FFT library -# see discussion in Section 2.2 (step 6) of manaul +# see discussion in Section 3.5.2 of manual # can be left blank to use provided KISS FFT library # INC = -DFFT setting, e.g. -DFFT_FFTW, FFT compiler settings # PATH = path for FFT library # LIB = name of FFT library -FFT_INC = -DFFT_FFTW2 -FFT_PATH = -FFT_LIB = -lfftw +FFT_INC = +FFT_PATH = +FFT_LIB = # JPEG and/or PNG library -# see discussion in Section 2.2 (step 7) of manual +# see discussion in Section 3.5.4 of manual # only needed if -DLAMMPS_JPEG or -DLAMMPS_PNG listed with LMP_INC # INC = path(s) for jpeglib.h and/or png.h # PATH = path(s) for JPEG library and/or PNG library # LIB = name(s) of JPEG library and/or PNG library -JPG_INC = -JPG_PATH = -JPG_LIB = +JPG_INC = +JPG_PATH = +JPG_LIB = # --------------------------------------------------------------------- # build rules and dependencies # do not edit this section -include Makefile.package.settings -include Makefile.package +include Makefile.package.settings +include Makefile.package EXTRA_INC = $(LMP_INC) $(PKG_INC) $(MPI_INC) $(FFT_INC) $(JPG_INC) $(PKG_SYSINC) EXTRA_PATH = $(PKG_PATH) $(MPI_PATH) $(FFT_PATH) $(JPG_PATH) $(PKG_SYSPATH) @@ -85,28 +85,27 @@ vpath %.h .. # Link target -$(EXE): $(OBJ) $(EXTRA_LINK_DEPENDS) - $(LINK) $(LINKFLAGS) $(EXTRA_PATH) $(OBJ) $(EXTRA_LIB) $(LIB) -o $(EXE) - $(SIZE) $(EXE) +$(EXE): main.o $(LMPLIB) $(EXTRA_LINK_DEPENDS) + $(LINK) $(LINKFLAGS) main.o $(EXTRA_PATH) $(LMPLINK) $(EXTRA_LIB) $(LIB) -o $@ + $(SIZE) $@ # Library targets -lib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(ARCHIVE) $(ARFLAGS) $(EXE) $(OBJ) +$(ARLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + @rm -f ../$(ARLIB) + $(ARCHIVE) $(ARFLAGS) ../$(ARLIB) $(OBJ) + @rm -f $(ARLIB) + @ln -s ../$(ARLIB) $(ARLIB) -shlib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o $(EXE) \ - $(OBJ) $(EXTRA_LIB) $(LIB) +$(SHLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o ../$(SHLIB) \ + $(OBJ) $(EXTRA_LIB) $(LIB) + @rm -f $(SHLIB) + @ln -s ../$(SHLIB) $(SHLIB) # Compilation rules -%.o:%.cpp $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< - -%.d:%.cpp $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(EXTRA_INC) $(DEPFLAGS) $< > $@ - -%.o:%.cu $(EXTRA_CPP_DEPENDS) +%.o:%.cpp $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< # Individual dependencies diff --git a/src/MAKE/MACHINES/Makefile.mac_mpi b/src/MAKE/MACHINES/Makefile.mac_mpi index 3437de017bb78fc0a1d715ccb65e9c63c4a6593c..0b6b4b5ba230b437ca427a021cdd2487bc4ad54d 100644 --- a/src/MAKE/MACHINES/Makefile.mac_mpi +++ b/src/MAKE/MACHINES/Makefile.mac_mpi @@ -1,4 +1,4 @@ -# mac_mpi = Apple laptop, MacPorts Open MPI 1.4.3, gcc 4.8, fftw, jpeg +# mac_mpi = Apple laptop, MacPorts Open MPI 1.4.3, gcc 4.8, jpeg SHELL = /bin/sh @@ -27,12 +27,12 @@ SHLIBFLAGS = -shared # if you change any -D setting, do full re-compile after "make clean" # LAMMPS ifdef settings -# see possible settings in Section 2.2 (step 4) of manual +# see possible settings in Section 3.5 of the manual LMP_INC = -DLAMMPS_GZIP -DLAMMPS_JPEG # MPI library -# see discussion in Section 2.2 (step 5) of manual +# see discussion in Section 3.4 of the manual # MPI wrapper compiler/linker can provide this info # can point to dummy MPI library in src/STUBS as in Makefile.serial # use -D MPICH and OMPI settings in INC to avoid C++ lib conflicts @@ -51,14 +51,12 @@ MPI_LIB = # PATH = path for FFT library # LIB = name of FFT library -FFTW = /usr/local - -FFT_INC = -DFFT_FFTW2 -I${FFTW}/include -FFT_PATH = -L${FFTW}/lib -FFT_LIB = -lfftw +FFT_INC = +FFT_PATH = +FFT_LIB = # JPEG and/or PNG library -# see discussion in Section 2.2 (step 7) of manual +# see discussion in Section 3.5.4 of manual # only needed if -DLAMMPS_JPEG or -DLAMMPS_PNG listed with LMP_INC # INC = path(s) for jpeglib.h and/or png.h # PATH = path(s) for JPEG library and/or PNG library @@ -72,8 +70,8 @@ JPG_LIB = -ljpeg # build rules and dependencies # do not edit this section -include Makefile.package.settings -include Makefile.package +include Makefile.package.settings +include Makefile.package EXTRA_INC = $(LMP_INC) $(PKG_INC) $(MPI_INC) $(FFT_INC) $(JPG_INC) $(PKG_SYSINC) EXTRA_PATH = $(PKG_PATH) $(MPI_PATH) $(FFT_PATH) $(JPG_PATH) $(PKG_SYSPATH) @@ -88,28 +86,27 @@ vpath %.h .. # Link target -$(EXE): $(OBJ) $(EXTRA_LINK_DEPENDS) - $(LINK) $(LINKFLAGS) $(EXTRA_PATH) $(OBJ) $(EXTRA_LIB) $(LIB) -o $(EXE) - $(SIZE) $(EXE) +$(EXE): main.o $(LMPLIB) $(EXTRA_LINK_DEPENDS) + $(LINK) $(LINKFLAGS) main.o $(EXTRA_PATH) $(LMPLINK) $(EXTRA_LIB) $(LIB) -o $@ + $(SIZE) $@ # Library targets -lib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(ARCHIVE) $(ARFLAGS) $(EXE) $(OBJ) +$(ARLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + @rm -f ../$(ARLIB) + $(ARCHIVE) $(ARFLAGS) ../$(ARLIB) $(OBJ) + @rm -f $(ARLIB) + @ln -s ../$(ARLIB) $(ARLIB) -shlib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o $(EXE) \ - $(OBJ) $(EXTRA_LIB) $(LIB) +$(SHLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o ../$(SHLIB) \ + $(OBJ) $(EXTRA_LIB) $(LIB) + @rm -f $(SHLIB) + @ln -s ../$(SHLIB) $(SHLIB) # Compilation rules -%.o:%.cpp $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< - -%.d:%.cpp $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(EXTRA_INC) $(DEPFLAGS) $< > $@ - -%.o:%.cu $(EXTRA_CPP_DEPENDS) +%.o:%.cpp $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< # Individual dependencies diff --git a/src/MAKE/MACHINES/Makefile.mingw32-cross b/src/MAKE/MACHINES/Makefile.mingw32-cross index 405c370574c0357517a04c746e6557f8bc3cbf98..d1269668fd2dce74f295608c54ae59776d80136f 100644 --- a/src/MAKE/MACHINES/Makefile.mingw32-cross +++ b/src/MAKE/MACHINES/Makefile.mingw32-cross @@ -31,12 +31,12 @@ LIBOBJDIR = /Obj_mingw32 # if you change any -D setting, do full re-compile after "make clean" # LAMMPS ifdef settings -# see possible settings in Section 2.2 (step 4) of manual +# see possible settings in Section 3.5 of the manual LMP_INC = -DLAMMPS_SMALLSMALL -DLAMMPS_JPEG -DLAMMPS_PNG -DLAMMPS_XDR -DLAMMPS_GZIP -DLAMMPS_FFMPEG # MPI library -# see discussion in Section 2.2 (step 5) of manual +# see discussion in Section 3.4 of the manual # MPI wrapper compiler/linker can provide this info # can point to dummy MPI library in src/STUBS as in Makefile.serial # use -D MPICH and OMPI settings in INC to avoid C++ lib conflicts @@ -49,18 +49,18 @@ MPI_PATH = -L../STUBS MPI_LIB = -lmpi_mingw32 # FFT library -# see discussion in Section 2.2 (step 6) of manual +# see discussion in Section 3.5.2 of manual # can be left blank to use provided KISS FFT library # INC = -DFFT setting, e.g. -DFFT_FFTW, FFT compiler settings # PATH = path for FFT library # LIB = name of FFT library FFT_INC = -FFT_PATH = +FFT_PATH = FFT_LIB = # JPEG and/or PNG library -# see discussion in Section 2.2 (step 7) of manual +# see discussion in Section 3.5.4 of manual # only needed if -DLAMMPS_JPEG or -DLAMMPS_PNG listed with LMP_INC # INC = path(s) for jpeglib.h and/or png.h # PATH = path(s) for JPEG library and/or PNG library @@ -74,8 +74,8 @@ JPG_LIB = -ljpeg -lpng -lz # build rules and dependencies # do not edit this section -include Makefile.package.settings -include Makefile.package +include Makefile.package.settings +include Makefile.package EXTRA_INC = $(LMP_INC) $(PKG_INC) $(MPI_INC) $(FFT_INC) $(JPG_INC) $(PKG_SYSINC) EXTRA_PATH = $(PKG_PATH) $(MPI_PATH) $(FFT_PATH) $(JPG_PATH) $(PKG_SYSPATH) @@ -90,28 +90,27 @@ vpath %.h .. # Link target -$(EXE): $(OBJ) $(EXTRA_LINK_DEPENDS) - $(LINK) $(LINKFLAGS) $(EXTRA_PATH) $(OBJ) $(EXTRA_LIB) $(LIB) -o $(EXE) - $(SIZE) $(EXE) +$(EXE): main.o $(LMPLIB) $(EXTRA_LINK_DEPENDS) + $(LINK) $(LINKFLAGS) main.o $(EXTRA_PATH) $(LMPLINK) $(EXTRA_LIB) $(LIB) -o $@ + $(SIZE) $@ # Library targets -lib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(ARCHIVE) $(ARFLAGS) $(EXE) $(OBJ) +$(ARLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + @rm -f ../$(ARLIB) + $(ARCHIVE) $(ARFLAGS) ../$(ARLIB) $(OBJ) + @rm -f $(ARLIB) + @ln -s ../$(ARLIB) $(ARLIB) -shlib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o $(EXE) \ - $(OBJ) $(EXTRA_LIB) $(LIB) +$(SHLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o ../$(SHLIB) \ + $(OBJ) $(EXTRA_LIB) $(LIB) + @rm -f $(SHLIB) + @ln -s ../$(SHLIB) $(SHLIB) # Compilation rules -%.o:%.cpp $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< - -%.d:%.cpp $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(EXTRA_INC) $(DEPFLAGS) $< > $@ - -%.o:%.cu $(EXTRA_CPP_DEPENDS) +%.o:%.cpp $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< # Individual dependencies diff --git a/src/MAKE/MACHINES/Makefile.mingw32-cross-mpi b/src/MAKE/MACHINES/Makefile.mingw32-cross-mpi index ab54c6e7941403d7000935e3ff79ca720ff4b499..6b8e4bdee5bc1cac882822eef544fbf8d352d682 100644 --- a/src/MAKE/MACHINES/Makefile.mingw32-cross-mpi +++ b/src/MAKE/MACHINES/Makefile.mingw32-cross-mpi @@ -31,12 +31,12 @@ LIBOBJDIR = /Obj_mingw32-mpi # if you change any -D setting, do full re-compile after "make clean" # LAMMPS ifdef settings -# see possible settings in Section 2.2 (step 4) of manual +# see possible settings in Section 3.5 of the manual LMP_INC = -DLAMMPS_SMALLSMALL -DLAMMPS_JPEG -DLAMMPS_PNG -DLAMMPS_XDR -DLAMMPS_GZIP -DLAMMPS_FFMPEG # MPI library -# see discussion in Section 2.2 (step 5) of manual +# see discussion in Section 3.4 of the manual # MPI wrapper compiler/linker can provide this info # can point to dummy MPI library in src/STUBS as in Makefile.serial # use -D MPICH and OMPI settings in INC to avoid C++ lib conflicts @@ -49,18 +49,18 @@ MPI_PATH = -L../../tools/mingw-cross/mpich2-win32/lib MPI_LIB = -lmpi # FFT library -# see discussion in Section 2.2 (step 6) of manual +# see discussion in Section 3.5.2 of manual # can be left blank to use provided KISS FFT library # INC = -DFFT setting, e.g. -DFFT_FFTW, FFT compiler settings # PATH = path for FFT library # LIB = name of FFT library FFT_INC = -FFT_PATH = +FFT_PATH = FFT_LIB = # JPEG and/or PNG library -# see discussion in Section 2.2 (step 7) of manual +# see discussion in Section 3.5.4 of manual # only needed if -DLAMMPS_JPEG or -DLAMMPS_PNG listed with LMP_INC # INC = path(s) for jpeglib.h and/or png.h # PATH = path(s) for JPEG library and/or PNG library @@ -74,8 +74,8 @@ JPG_LIB = -ljpeg -lpng -lz # build rules and dependencies # do not edit this section -include Makefile.package.settings -include Makefile.package +include Makefile.package.settings +include Makefile.package EXTRA_INC = $(LMP_INC) $(PKG_INC) $(MPI_INC) $(FFT_INC) $(JPG_INC) $(PKG_SYSINC) EXTRA_PATH = $(PKG_PATH) $(MPI_PATH) $(FFT_PATH) $(JPG_PATH) $(PKG_SYSPATH) @@ -90,28 +90,27 @@ vpath %.h .. # Link target -$(EXE): $(OBJ) $(EXTRA_LINK_DEPENDS) - $(LINK) $(LINKFLAGS) $(EXTRA_PATH) $(OBJ) $(EXTRA_LIB) $(LIB) -o $(EXE) - $(SIZE) $(EXE) +$(EXE): main.o $(LMPLIB) $(EXTRA_LINK_DEPENDS) + $(LINK) $(LINKFLAGS) main.o $(EXTRA_PATH) $(LMPLINK) $(EXTRA_LIB) $(LIB) -o $@ + $(SIZE) $@ # Library targets -lib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(ARCHIVE) $(ARFLAGS) $(EXE) $(OBJ) +$(ARLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + @rm -f ../$(ARLIB) + $(ARCHIVE) $(ARFLAGS) ../$(ARLIB) $(OBJ) + @rm -f $(ARLIB) + @ln -s ../$(ARLIB) $(ARLIB) -shlib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o $(EXE) \ - $(OBJ) $(EXTRA_LIB) $(LIB) +$(SHLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o ../$(SHLIB) \ + $(OBJ) $(EXTRA_LIB) $(LIB) + @rm -f $(SHLIB) + @ln -s ../$(SHLIB) $(SHLIB) # Compilation rules -%.o:%.cpp $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< - -%.d:%.cpp $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(EXTRA_INC) $(DEPFLAGS) $< > $@ - -%.o:%.cu $(EXTRA_CPP_DEPENDS) +%.o:%.cpp $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< # Individual dependencies diff --git a/src/MAKE/MACHINES/Makefile.mingw64-cross b/src/MAKE/MACHINES/Makefile.mingw64-cross index 21403dc630eb02d44904d715d0ba2dcccce5d51d..bf3416de6a29d259f09e45ef616a0dbc68fd37dd 100644 --- a/src/MAKE/MACHINES/Makefile.mingw64-cross +++ b/src/MAKE/MACHINES/Makefile.mingw64-cross @@ -31,12 +31,12 @@ LIBOBJDIR = /Obj_mingw64 # if you change any -D setting, do full re-compile after "make clean" # LAMMPS ifdef settings -# see possible settings in Section 2.2 (step 4) of manual +# see possible settings in Section 3.5 of the manual LMP_INC = -DLAMMPS_SMALLBIG -DLAMMPS_JPEG -DLAMMPS_PNG -DLAMMPS_XDR -DLAMMPS_GZIP -DLAMMPS_FFMPEG # MPI library -# see discussion in Section 2.2 (step 5) of manual +# see discussion in Section 3.4 of the manual # MPI wrapper compiler/linker can provide this info # can point to dummy MPI library in src/STUBS as in Makefile.serial # use -D MPICH and OMPI settings in INC to avoid C++ lib conflicts @@ -49,7 +49,7 @@ MPI_PATH = -L../STUBS MPI_LIB = -lmpi_mingw64 # FFT library -# see discussion in Section 2.2 (step 6) of manual +# see discussion in Section 3.5.2 of manual # can be left blank to use provided KISS FFT library # INC = -DFFT setting, e.g. -DFFT_FFTW, FFT compiler settings # PATH = path for FFT library @@ -60,7 +60,7 @@ FFT_PATH = FFT_LIB = # JPEG and/or PNG library -# see discussion in Section 2.2 (step 7) of manual +# see discussion in Section 3.5.4 of manual # only needed if -DLAMMPS_JPEG or -DLAMMPS_PNG listed with LMP_INC # INC = path(s) for jpeglib.h and/or png.h # PATH = path(s) for JPEG library and/or PNG library @@ -74,8 +74,8 @@ JPG_LIB = -ljpeg -lpng -lz # build rules and dependencies # do not edit this section -include Makefile.package.settings -include Makefile.package +include Makefile.package.settings +include Makefile.package EXTRA_INC = $(LMP_INC) $(PKG_INC) $(MPI_INC) $(FFT_INC) $(JPG_INC) $(PKG_SYSINC) EXTRA_PATH = $(PKG_PATH) $(MPI_PATH) $(FFT_PATH) $(JPG_PATH) $(PKG_SYSPATH) @@ -90,28 +90,27 @@ vpath %.h .. # Link target -$(EXE): $(OBJ) $(EXTRA_LINK_DEPENDS) - $(LINK) $(LINKFLAGS) $(EXTRA_PATH) $(OBJ) $(EXTRA_LIB) $(LIB) -o $(EXE) - $(SIZE) $(EXE) +$(EXE): main.o $(LMPLIB) $(EXTRA_LINK_DEPENDS) + $(LINK) $(LINKFLAGS) main.o $(EXTRA_PATH) $(LMPLINK) $(EXTRA_LIB) $(LIB) -o $@ + $(SIZE) $@ # Library targets -lib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(ARCHIVE) $(ARFLAGS) $(EXE) $(OBJ) +$(ARLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + @rm -f ../$(ARLIB) + $(ARCHIVE) $(ARFLAGS) ../$(ARLIB) $(OBJ) + @rm -f $(ARLIB) + @ln -s ../$(ARLIB) $(ARLIB) -shlib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o $(EXE) \ - $(OBJ) $(EXTRA_LIB) $(LIB) +$(SHLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o ../$(SHLIB) \ + $(OBJ) $(EXTRA_LIB) $(LIB) + @rm -f $(SHLIB) + @ln -s ../$(SHLIB) $(SHLIB) # Compilation rules -%.o:%.cpp $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< - -%.d:%.cpp $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(EXTRA_INC) $(DEPFLAGS) $< > $@ - -%.o:%.cu $(EXTRA_CPP_DEPENDS) +%.o:%.cpp $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< # Individual dependencies diff --git a/src/MAKE/MACHINES/Makefile.mingw64-cross-mpi b/src/MAKE/MACHINES/Makefile.mingw64-cross-mpi index 084b51680ff5f1dd084d5d336bc55c45d1a2a5a2..7d80d2c4e179bc518e21933f9f764a32bf1d1326 100644 --- a/src/MAKE/MACHINES/Makefile.mingw64-cross-mpi +++ b/src/MAKE/MACHINES/Makefile.mingw64-cross-mpi @@ -31,12 +31,12 @@ LIBOBJDIR = /Obj_mingw64-mpi # if you change any -D setting, do full re-compile after "make clean" # LAMMPS ifdef settings -# see possible settings in Section 2.2 (step 4) of manual +# see possible settings in Section 3.5 of the manual LMP_INC = -DLAMMPS_SMALLBIG -DLAMMPS_JPEG -DLAMMPS_PNG -DLAMMPS_XDR -DLAMMPS_GZIP -DLAMMPS_FFMPEG # MPI library -# see discussion in Section 2.2 (step 5) of manual +# see discussion in Section 3.4 of the manual # MPI wrapper compiler/linker can provide this info # can point to dummy MPI library in src/STUBS as in Makefile.serial # use -D MPICH and OMPI settings in INC to avoid C++ lib conflicts @@ -49,18 +49,18 @@ MPI_PATH = -L../../tools/mingw-cross/mpich2-win64/lib MPI_LIB = -lmpi # FFT library -# see discussion in Section 2.2 (step 6) of manual +# see discussion in Section 3.5.2 of manual # can be left blank to use provided KISS FFT library # INC = -DFFT setting, e.g. -DFFT_FFTW, FFT compiler settings # PATH = path for FFT library # LIB = name of FFT library FFT_INC = -FFT_PATH = +FFT_PATH = FFT_LIB = # JPEG and/or PNG library -# see discussion in Section 2.2 (step 7) of manual +# see discussion in Section 3.5.4 of manual # only needed if -DLAMMPS_JPEG or -DLAMMPS_PNG listed with LMP_INC # INC = path(s) for jpeglib.h and/or png.h # PATH = path(s) for JPEG library and/or PNG library @@ -74,8 +74,8 @@ JPG_LIB = -ljpeg -lpng -lz # build rules and dependencies # do not edit this section -include Makefile.package.settings -include Makefile.package +include Makefile.package.settings +include Makefile.package EXTRA_INC = $(LMP_INC) $(PKG_INC) $(MPI_INC) $(FFT_INC) $(JPG_INC) $(PKG_SYSINC) EXTRA_PATH = $(PKG_PATH) $(MPI_PATH) $(FFT_PATH) $(JPG_PATH) $(PKG_SYSPATH) @@ -90,28 +90,27 @@ vpath %.h .. # Link target -$(EXE): $(OBJ) $(EXTRA_LINK_DEPENDS) - $(LINK) $(LINKFLAGS) $(EXTRA_PATH) $(OBJ) $(EXTRA_LIB) $(LIB) -o $(EXE) - $(SIZE) $(EXE) +$(EXE): main.o $(LMPLIB) $(EXTRA_LINK_DEPENDS) + $(LINK) $(LINKFLAGS) main.o $(EXTRA_PATH) $(LMPLINK) $(EXTRA_LIB) $(LIB) -o $@ + $(SIZE) $@ # Library targets -lib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(ARCHIVE) $(ARFLAGS) $(EXE) $(OBJ) +$(ARLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + @rm -f ../$(ARLIB) + $(ARCHIVE) $(ARFLAGS) ../$(ARLIB) $(OBJ) + @rm -f $(ARLIB) + @ln -s ../$(ARLIB) $(ARLIB) -shlib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o $(EXE) \ - $(OBJ) $(EXTRA_LIB) $(LIB) +$(SHLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o ../$(SHLIB) \ + $(OBJ) $(EXTRA_LIB) $(LIB) + @rm -f $(SHLIB) + @ln -s ../$(SHLIB) $(SHLIB) # Compilation rules -%.o:%.cpp $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< - -%.d:%.cpp $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(EXTRA_INC) $(DEPFLAGS) $< > $@ - -%.o:%.cu $(EXTRA_CPP_DEPENDS) +%.o:%.cpp $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< # Individual dependencies diff --git a/src/MAKE/MACHINES/Makefile.myrinet b/src/MAKE/MACHINES/Makefile.myrinet index 7cf09f30c78bfb78d15afe573c319dcd5ac0db3c..a74aee3eafcfcfa0053814b8d7173c4d25b87902 100644 --- a/src/MAKE/MACHINES/Makefile.myrinet +++ b/src/MAKE/MACHINES/Makefile.myrinet @@ -11,7 +11,7 @@ CCFLAGS = -O SHFLAGS = -fPIC DEPFLAGS = -M -LINK = G++ +LINK = g++ LINKFLAGS = -O LIB = SIZE = size @@ -26,12 +26,12 @@ SHLIBFLAGS = -shared # if you change any -D setting, do full re-compile after "make clean" # LAMMPS ifdef settings -# see possible settings in Section 2.2 (step 4) of manual +# see possible settings in Section 3.5 of the manual LMP_INC = -DLAMMPS_GZIP # MPI library -# see discussion in Section 2.2 (step 5) of manual +# see discussion in Section 3.4 of the manual # MPI wrapper compiler/linker can provide this info # can point to dummy MPI library in src/STUBS as in Makefile.serial # use -D MPICH and OMPI settings in INC to avoid C++ lib conflicts @@ -44,7 +44,7 @@ MPI_PATH = -L/opt/mpich-mx/lib -L/opt/mx/lib MPI_LIB = -lmpich -lmyriexpress # FFT library -# see discussion in Section 2.2 (step 6) of manaul +# see discussion in Section 3.5.2 of manual # can be left blank to use provided KISS FFT library # INC = -DFFT setting, e.g. -DFFT_FFTW, FFT compiler settings # PATH = path for FFT library @@ -55,22 +55,22 @@ FFT_PATH = FFT_LIB = # JPEG and/or PNG library -# see discussion in Section 2.2 (step 7) of manual +# see discussion in Section 3.5.4 of manual # only needed if -DLAMMPS_JPEG or -DLAMMPS_PNG listed with LMP_INC # INC = path(s) for jpeglib.h and/or png.h # PATH = path(s) for JPEG library and/or PNG library # LIB = name(s) of JPEG library and/or PNG library -JPG_INC = -JPG_PATH = -JPG_LIB = +JPG_INC = +JPG_PATH = +JPG_LIB = # --------------------------------------------------------------------- # build rules and dependencies # do not edit this section -include Makefile.package.settings -include Makefile.package +include Makefile.package.settings +include Makefile.package EXTRA_INC = $(LMP_INC) $(PKG_INC) $(MPI_INC) $(FFT_INC) $(JPG_INC) $(PKG_SYSINC) EXTRA_PATH = $(PKG_PATH) $(MPI_PATH) $(FFT_PATH) $(JPG_PATH) $(PKG_SYSPATH) @@ -85,28 +85,27 @@ vpath %.h .. # Link target -$(EXE): $(OBJ) $(EXTRA_LINK_DEPENDS) - $(LINK) $(LINKFLAGS) $(EXTRA_PATH) $(OBJ) $(EXTRA_LIB) $(LIB) -o $(EXE) - $(SIZE) $(EXE) +$(EXE): main.o $(LMPLIB) $(EXTRA_LINK_DEPENDS) + $(LINK) $(LINKFLAGS) main.o $(EXTRA_PATH) $(LMPLINK) $(EXTRA_LIB) $(LIB) -o $@ + $(SIZE) $@ # Library targets -lib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(ARCHIVE) $(ARFLAGS) $(EXE) $(OBJ) +$(ARLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + @rm -f ../$(ARLIB) + $(ARCHIVE) $(ARFLAGS) ../$(ARLIB) $(OBJ) + @rm -f $(ARLIB) + @ln -s ../$(ARLIB) $(ARLIB) -shlib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o $(EXE) \ - $(OBJ) $(EXTRA_LIB) $(LIB) +$(SHLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o ../$(SHLIB) \ + $(OBJ) $(EXTRA_LIB) $(LIB) + @rm -f $(SHLIB) + @ln -s ../$(SHLIB) $(SHLIB) # Compilation rules -%.o:%.cpp $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< - -%.d:%.cpp $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(EXTRA_INC) $(DEPFLAGS) $< > $@ - -%.o:%.cu $(EXTRA_CPP_DEPENDS) +%.o:%.cpp $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< # Individual dependencies diff --git a/src/MAKE/MACHINES/Makefile.power b/src/MAKE/MACHINES/Makefile.power index cbad7149df8b5f6daebb77657a8d326ee0dfdd00..1671fd6273fcf1d0cc495a41e5299fff0cfe2c16 100644 --- a/src/MAKE/MACHINES/Makefile.power +++ b/src/MAKE/MACHINES/Makefile.power @@ -27,12 +27,12 @@ SHLIBFLAGS = -shared # if you change any -D setting, do full re-compile after "make clean" # LAMMPS ifdef settings -# see possible settings in Section 2.2 (step 4) of manual +# see possible settings in Section 3.5 of the manual LMP_INC = -DLAMMPS_GZIP # MPI library -# see discussion in Section 2.2 (step 5) of manual +# see discussion in Section 3.4 of the manual # MPI wrapper compiler/linker can provide this info # can point to dummy MPI library in src/STUBS as in Makefile.serial # use -D MPICH and OMPI settings in INC to avoid C++ lib conflicts @@ -45,7 +45,7 @@ MPI_PATH = MPI_LIB = # FFT library -# see discussion in Section 2.2 (step 6) of manaul +# see discussion in Section 3.5.2 of manual # can be left blank to use provided KISS FFT library # INC = -DFFT setting, e.g. -DFFT_FFTW, FFT compiler settings # PATH = path for FFT library @@ -56,22 +56,22 @@ FFT_PATH = -L/scr/oppe/LAMMPS/fftw-2.1.5/lib FFT_LIB = -lfftw # JPEG and/or PNG library -# see discussion in Section 2.2 (step 7) of manual +# see discussion in Section 3.5.4 of manual # only needed if -DLAMMPS_JPEG or -DLAMMPS_PNG listed with LMP_INC # INC = path(s) for jpeglib.h and/or png.h # PATH = path(s) for JPEG library and/or PNG library # LIB = name(s) of JPEG library and/or PNG library -JPG_INC = -JPG_PATH = -JPG_LIB = +JPG_INC = +JPG_PATH = +JPG_LIB = # --------------------------------------------------------------------- # build rules and dependencies # do not edit this section -include Makefile.package.settings -include Makefile.package +include Makefile.package.settings +include Makefile.package EXTRA_INC = $(LMP_INC) $(PKG_INC) $(MPI_INC) $(FFT_INC) $(JPG_INC) $(PKG_SYSINC) EXTRA_PATH = $(PKG_PATH) $(MPI_PATH) $(FFT_PATH) $(JPG_PATH) $(PKG_SYSPATH) @@ -86,28 +86,27 @@ vpath %.h .. # Link target -$(EXE): $(OBJ) $(EXTRA_LINK_DEPENDS) - $(LINK) $(LINKFLAGS) $(EXTRA_PATH) $(OBJ) $(EXTRA_LIB) $(LIB) -o $(EXE) - $(SIZE) $(EXE) +$(EXE): main.o $(LMPLIB) $(EXTRA_LINK_DEPENDS) + $(LINK) $(LINKFLAGS) main.o $(EXTRA_PATH) $(LMPLINK) $(EXTRA_LIB) $(LIB) -o $@ + $(SIZE) $@ # Library targets -lib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(ARCHIVE) $(ARFLAGS) $(EXE) $(OBJ) +$(ARLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + @rm -f ../$(ARLIB) + $(ARCHIVE) $(ARFLAGS) ../$(ARLIB) $(OBJ) + @rm -f $(ARLIB) + @ln -s ../$(ARLIB) $(ARLIB) -shlib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o $(EXE) \ - $(OBJ) $(EXTRA_LIB) $(LIB) +$(SHLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o ../$(SHLIB) \ + $(OBJ) $(EXTRA_LIB) $(LIB) + @rm -f $(SHLIB) + @ln -s ../$(SHLIB) $(SHLIB) # Compilation rules -%.o:%.cpp $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< - -%.d:%.cpp $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(EXTRA_INC) $(DEPFLAGS) $< > $@ - -%.o:%.cu $(EXTRA_CPP_DEPENDS) +%.o:%.cpp $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< # Individual dependencies diff --git a/src/MAKE/MACHINES/Makefile.redsky b/src/MAKE/MACHINES/Makefile.redsky index 8e943bbb78b7499dc3f08bc039ab9002680efe2f..7f8456284e82c5db60d80ea0585bcbce4bc7fcfb 100644 --- a/src/MAKE/MACHINES/Makefile.redsky +++ b/src/MAKE/MACHINES/Makefile.redsky @@ -46,12 +46,12 @@ SHLIBFLAGS = -shared # if you change any -D setting, do full re-compile after "make clean" # LAMMPS ifdef settings -# see possible settings in Section 2.2 (step 4) of manual +# see possible settings in Section 3.5 of the manual LMP_INC = -DLAMMPS_GZIP # MPI library -# see discussion in Section 2.2 (step 5) of manual +# see discussion in Section 3.4 of the manual # MPI wrapper compiler/linker can provide this info # can point to dummy MPI library in src/STUBS as in Makefile.serial # use -D MPICH and OMPI settings in INC to avoid C++ lib conflicts @@ -64,33 +64,33 @@ MPI_PATH = MPI_LIB = # FFT library -# see discussion in Section 2.2 (step 6) of manaul +# see discussion in Section 3.5.2 of manual # can be left blank to use provided KISS FFT library # INC = -DFFT setting, e.g. -DFFT_FFTW, FFT compiler settings # PATH = path for FFT library # LIB = name of FFT library -#FFT_INC = -DFFT_FFTW2 -I${FFTW_INCLUDE} -#FFT_PATH = -L${FFTW_LIB} -#FFT_LIB = -lfftw +FFT_INC = +FFT_PATH = +FFT_LIB = # JPEG and/or PNG library -# see discussion in Section 2.2 (step 7) of manual +# see discussion in Section 3.5.4 of manual # only needed if -DLAMMPS_JPEG or -DLAMMPS_PNG listed with LMP_INC # INC = path(s) for jpeglib.h and/or png.h # PATH = path(s) for JPEG library and/or PNG library # LIB = name(s) of JPEG library and/or PNG library -JPG_INC = -JPG_PATH = -JPG_LIB = +JPG_INC = +JPG_PATH = +JPG_LIB = # --------------------------------------------------------------------- # build rules and dependencies # do not edit this section -include Makefile.package.settings -include Makefile.package +include Makefile.package.settings +include Makefile.package EXTRA_INC = $(LMP_INC) $(PKG_INC) $(MPI_INC) $(FFT_INC) $(JPG_INC) $(PKG_SYSINC) EXTRA_PATH = $(PKG_PATH) $(MPI_PATH) $(FFT_PATH) $(JPG_PATH) $(PKG_SYSPATH) @@ -105,28 +105,27 @@ vpath %.h .. # Link target -$(EXE): $(OBJ) $(EXTRA_LINK_DEPENDS) - $(LINK) $(LINKFLAGS) $(EXTRA_PATH) $(OBJ) $(EXTRA_LIB) $(LIB) -o $(EXE) - $(SIZE) $(EXE) +$(EXE): main.o $(LMPLIB) $(EXTRA_LINK_DEPENDS) + $(LINK) $(LINKFLAGS) main.o $(EXTRA_PATH) $(LMPLINK) $(EXTRA_LIB) $(LIB) -o $@ + $(SIZE) $@ # Library targets -lib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(ARCHIVE) $(ARFLAGS) $(EXE) $(OBJ) +$(ARLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + @rm -f ../$(ARLIB) + $(ARCHIVE) $(ARFLAGS) ../$(ARLIB) $(OBJ) + @rm -f $(ARLIB) + @ln -s ../$(ARLIB) $(ARLIB) -shlib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o $(EXE) \ - $(OBJ) $(EXTRA_LIB) $(LIB) +$(SHLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o ../$(SHLIB) \ + $(OBJ) $(EXTRA_LIB) $(LIB) + @rm -f $(SHLIB) + @ln -s ../$(SHLIB) $(SHLIB) # Compilation rules -%.o:%.cpp $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< - -%.d:%.cpp $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(EXTRA_INC) $(DEPFLAGS) $< > $@ - -%.o:%.cu $(EXTRA_CPP_DEPENDS) +%.o:%.cpp $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< # Individual dependencies diff --git a/src/MAKE/MACHINES/Makefile.stampede b/src/MAKE/MACHINES/Makefile.stampede deleted file mode 100644 index ecd0810d1deafa48f462666f65c83c83bf968a56..0000000000000000000000000000000000000000 --- a/src/MAKE/MACHINES/Makefile.stampede +++ /dev/null @@ -1,119 +0,0 @@ -# stampede = Intel Compiler, MKL FFT, Offload to Xeon Phi - -SHELL = /bin/sh - -# --------------------------------------------------------------------- -# compiler/linker settings -# specify flags and libraries needed for your compiler - -CC = mpicc -qopenmp -DLMP_INTEL_OFFLOAD -DLAMMPS_MEMALIGN=64 -MIC_OPT = -qoffload-option,mic,compiler,"-fp-model fast=2 -mGLOB_default_function_attrs=\"gather_scatter_loop_unroll=4\"" -CCFLAGS = -O3 -xhost -fp-model precise -restrict -qoverride-limits $(MIC_OPT) -SHFLAGS = -fPIC -DEPFLAGS = -M - -LINK = mpicc -qopenmp -LINKFLAGS = -O3 -xhost -LIB = -ltbbmalloc -SIZE = size - -ARCHIVE = ar -ARFLAGS = -rc -SHLIBFLAGS = -shared - -# --------------------------------------------------------------------- -# LAMMPS-specific settings, all OPTIONAL -# specify settings for LAMMPS features you will use -# if you change any -D setting, do full re-compile after "make clean" - -# LAMMPS ifdef settings -# see possible settings in Section 2.2 (step 4) of manual - -LMP_INC = -DLAMMPS_GZIP - -# MPI library -# see discussion in Section 2.2 (step 5) of manual -# MPI wrapper compiler/linker can provide this info -# can point to dummy MPI library in src/STUBS as in Makefile.serial -# use -D MPICH and OMPI settings in INC to avoid C++ lib conflicts -# INC = path for mpi.h, MPI compiler settings -# PATH = path for MPI library -# LIB = name of MPI library - -MPI_INC = -DMPICH_SKIP_MPICXX -MPI_PATH = -MPI_LIB = - -# FFT library -# see discussion in Section 2.2 (step 6) of manaul -# can be left blank to use provided KISS FFT library -# INC = -DFFT setting, e.g. -DFFT_FFTW, FFT compiler settings -# PATH = path for FFT library -# LIB = name of FFT library - -FFT_INC = -DFFT_MKL -I$(TACC_MKL_INC) -FFT_PATH = -FFT_LIB = -L$(TACC_MKL_LIB) -lmkl_intel_ilp64 -lmkl_intel_thread -lmkl_core - -# JPEG and/or PNG library -# see discussion in Section 2.2 (step 7) of manual -# only needed if -DLAMMPS_JPEG or -DLAMMPS_PNG listed with LMP_INC -# INC = path(s) for jpeglib.h and/or png.h -# PATH = path(s) for JPEG library and/or PNG library -# LIB = name(s) of JPEG library and/or PNG library - -JPG_INC = -JPG_PATH = -JPG_LIB = -ljpeg - -# --------------------------------------------------------------------- -# build rules and dependencies -# do not edit this section - -include Makefile.package.settings -include Makefile.package - -EXTRA_INC = $(LMP_INC) $(PKG_INC) $(MPI_INC) $(FFT_INC) $(JPG_INC) $(PKG_SYSINC) -EXTRA_PATH = $(PKG_PATH) $(MPI_PATH) $(FFT_PATH) $(JPG_PATH) $(PKG_SYSPATH) -EXTRA_LIB = $(PKG_LIB) $(MPI_LIB) $(FFT_LIB) $(JPG_LIB) $(PKG_SYSLIB) - -# Path to src files - -vpath %.cpp .. -vpath %.h .. - -# Link target - -$(EXE): $(OBJ) - $(LINK) $(LINKFLAGS) $(EXTRA_PATH) $(OBJ) $(EXTRA_LIB) $(LIB) -o $(EXE) - $(SIZE) $(EXE) - -# Library targets - -lib: $(OBJ) - $(ARCHIVE) $(ARFLAGS) $(EXE) $(OBJ) - -shlib: $(OBJ) - $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o $(EXE) \ - $(OBJ) $(EXTRA_LIB) $(LIB) - -# Compilation rules - -%.o:%.cpp - $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< - -%.d:%.cpp - $(CC) $(CCFLAGS) $(EXTRA_INC) $(DEPFLAGS) $< > $@ - -%.o:%.cu - $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< - -# Individual dependencies - -depend : fastdep.exe $(SRC) - @./fastdep.exe $(EXTRA_INC) -- $^ > .depend || exit 1 - -fastdep.exe: ../DEPEND/fastdep.c - cc -O -o $@ $< - -sinclude .depend diff --git a/src/MAKE/MACHINES/Makefile.storm b/src/MAKE/MACHINES/Makefile.storm index e5e379e5ce171d3a6cadcd4d16bd3b77f5982b22..55c92c9e9e1e0886fc548644460f49520869434d 100644 --- a/src/MAKE/MACHINES/Makefile.storm +++ b/src/MAKE/MACHINES/Makefile.storm @@ -27,12 +27,12 @@ SHLIBFLAGS = -shared # if you change any -D setting, do full re-compile after "make clean" # LAMMPS ifdef settings -# see possible settings in Section 2.2 (step 4) of manual +# see possible settings in Section 3.5 of the manual LMP_INC = -DLAMMPS_GZIP # MPI library -# see discussion in Section 2.2 (step 5) of manual +# see discussion in Section 3.4 of the manual # MPI wrapper compiler/linker can provide this info # can point to dummy MPI library in src/STUBS as in Makefile.serial # use -D MPICH and OMPI settings in INC to avoid C++ lib conflicts @@ -45,33 +45,33 @@ MPI_PATH = MPI_LIB = # FFT library -# see discussion in Section 2.2 (step 6) of manaul +# see discussion in Section 3.5.2 of manual # can be left blank to use provided KISS FFT library # INC = -DFFT setting, e.g. -DFFT_FFTW, FFT compiler settings # PATH = path for FFT library # LIB = name of FFT library -FFT_INC = -DFFT_FFTW2 -I/projects/fftw/fftw-2.1.5/include -FFT_PATH = -FFT_LIB = -lfftw +FFT_INC = +FFT_PATH = +FFT_LIB = # JPEG and/or PNG library -# see discussion in Section 2.2 (step 7) of manual +# see discussion in Section 3.5.4 of manual # only needed if -DLAMMPS_JPEG or -DLAMMPS_PNG listed with LMP_INC # INC = path(s) for jpeglib.h and/or png.h # PATH = path(s) for JPEG library and/or PNG library # LIB = name(s) of JPEG library and/or PNG library -JPG_INC = -JPG_PATH = -JPG_LIB = +JPG_INC = +JPG_PATH = +JPG_LIB = # --------------------------------------------------------------------- # build rules and dependencies # do not edit this section -include Makefile.package.settings -include Makefile.package +include Makefile.package.settings +include Makefile.package EXTRA_INC = $(LMP_INC) $(PKG_INC) $(MPI_INC) $(FFT_INC) $(JPG_INC) $(PKG_SYSINC) EXTRA_PATH = $(PKG_PATH) $(MPI_PATH) $(FFT_PATH) $(JPG_PATH) $(PKG_SYSPATH) @@ -86,28 +86,27 @@ vpath %.h .. # Link target -$(EXE): $(OBJ) $(EXTRA_LINK_DEPENDS) - $(LINK) $(LINKFLAGS) $(EXTRA_PATH) $(OBJ) $(EXTRA_LIB) $(LIB) -o $(EXE) - $(SIZE) $(EXE) +$(EXE): main.o $(LMPLIB) $(EXTRA_LINK_DEPENDS) + $(LINK) $(LINKFLAGS) main.o $(EXTRA_PATH) $(LMPLINK) $(EXTRA_LIB) $(LIB) -o $@ + $(SIZE) $@ # Library targets -lib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(ARCHIVE) $(ARFLAGS) $(EXE) $(OBJ) +$(ARLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + @rm -f ../$(ARLIB) + $(ARCHIVE) $(ARFLAGS) ../$(ARLIB) $(OBJ) + @rm -f $(ARLIB) + @ln -s ../$(ARLIB) $(ARLIB) -shlib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o $(EXE) \ - $(OBJ) $(EXTRA_LIB) $(LIB) +$(SHLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o ../$(SHLIB) \ + $(OBJ) $(EXTRA_LIB) $(LIB) + @rm -f $(SHLIB) + @ln -s ../$(SHLIB) $(SHLIB) # Compilation rules -%.o:%.cpp $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< - -%.d:%.cpp $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(EXTRA_INC) $(DEPFLAGS) $< > $@ - -%.o:%.cu $(EXTRA_CPP_DEPENDS) +%.o:%.cpp $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< # Individual dependencies diff --git a/src/MAKE/MACHINES/Makefile.lassen_kokkos b/src/MAKE/MACHINES/Makefile.summit_kokkos similarity index 71% rename from src/MAKE/MACHINES/Makefile.lassen_kokkos rename to src/MAKE/MACHINES/Makefile.summit_kokkos index 7484f25a4b0e448d857f791d1bdc8d0c5e082c41..95ee7e39a897c4f59b80df2bf9aa06f801c7081d 100644 --- a/src/MAKE/MACHINES/Makefile.lassen_kokkos +++ b/src/MAKE/MACHINES/Makefile.summit_kokkos @@ -1,4 +1,4 @@ -# lassen_kokkos = KOKKOS/CUDA, V100 GPU and Power9, IBM Spectrum MPI, nvcc compiler with gcc +# summit_kokkos = KOKKOS/CUDA, V100 GPU and Power9, IBM Spectrum MPI, nvcc compiler with gcc SHELL = /bin/sh @@ -7,8 +7,7 @@ SHELL = /bin/sh # specify flags and libraries needed for your compiler KOKKOS_ABSOLUTE_PATH = $(shell cd $(KOKKOS_PATH); pwd) -export MPICH_CXX = $(KOKKOS_ABSOLUTE_PATH)/bin/nvcc_wrapper -export OMPI_CXX = $(KOKKOS_ABSOLUTE_PATH)/bin/nvcc_wrapper + CC = $(KOKKOS_ABSOLUTE_PATH)/bin/nvcc_wrapper CCFLAGS = -g -O3 SHFLAGS = -fPIC @@ -31,12 +30,12 @@ KOKKOS_ARCH = Power9,Volta70 # if you change any -D setting, do full re-compile after "make clean" # LAMMPS ifdef settings -# see possible settings in Section 2.2 (step 4) of manual +# see possible settings in Section 3.5 of the manual LMP_INC = -DLAMMPS_GZIP # MPI library -# see discussion in Section 2.2 (step 5) of manual +# see discussion in Section 3.4 of the manual # MPI wrapper compiler/linker can provide this info # can point to dummy MPI library in src/STUBS as in Makefile.serial # use -D MPICH and OMPI settings in INC to avoid C++ lib conflicts @@ -52,7 +51,7 @@ MPI_PATH = MPI_LIB = -L${MY_MPI_PATH}../lib -lmpi_ibm # FFT library -# see discussion in Section 2.2 (step 6) of manaul +# see discussion in Section 3.5.2 of manual # can be left blank to use provided KISS FFT library # INC = -DFFT setting, e.g. -DFFT_FFTW, FFT compiler settings # PATH = path for FFT library @@ -63,22 +62,22 @@ FFT_PATH = FFT_LIB = -lcufft # JPEG and/or PNG library -# see discussion in Section 2.2 (step 7) of manual +# see discussion in Section 3.5.4 of manual # only needed if -DLAMMPS_JPEG or -DLAMMPS_PNG listed with LMP_INC # INC = path(s) for jpeglib.h and/or png.h # PATH = path(s) for JPEG library and/or PNG library # LIB = name(s) of JPEG library and/or PNG library -JPG_INC = -JPG_PATH = -JPG_LIB = +JPG_INC = +JPG_PATH = +JPG_LIB = # --------------------------------------------------------------------- # build rules and dependencies # do not edit this section -include Makefile.package.settings -include Makefile.package +include Makefile.package.settings +include Makefile.package EXTRA_INC = $(LMP_INC) $(PKG_INC) $(MPI_INC) $(FFT_INC) $(JPG_INC) $(PKG_SYSINC) EXTRA_PATH = $(PKG_PATH) $(MPI_PATH) $(FFT_PATH) $(JPG_PATH) $(PKG_SYSPATH) @@ -93,28 +92,27 @@ vpath %.h .. # Link target -$(EXE): $(OBJ) $(EXTRA_LINK_DEPENDS) - $(LINK) $(LINKFLAGS) $(EXTRA_PATH) $(OBJ) $(EXTRA_LIB) $(LIB) -o $(EXE) - $(SIZE) $(EXE) +$(EXE): main.o $(LMPLIB) $(EXTRA_LINK_DEPENDS) + $(LINK) $(LINKFLAGS) main.o $(EXTRA_PATH) $(LMPLINK) $(EXTRA_LIB) $(LIB) -o $@ + $(SIZE) $@ # Library targets -lib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(ARCHIVE) $(ARFLAGS) $(EXE) $(OBJ) +$(ARLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + @rm -f ../$(ARLIB) + $(ARCHIVE) $(ARFLAGS) ../$(ARLIB) $(OBJ) + @rm -f $(ARLIB) + @ln -s ../$(ARLIB) $(ARLIB) -shlib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o $(EXE) \ - $(OBJ) $(EXTRA_LIB) $(LIB) +$(SHLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o ../$(SHLIB) \ + $(OBJ) $(EXTRA_LIB) $(LIB) + @rm -f $(SHLIB) + @ln -s ../$(SHLIB) $(SHLIB) # Compilation rules -%.o:%.cpp $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< - -%.d:%.cpp $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(EXTRA_INC) $(DEPFLAGS) $< > $@ - -%.o:%.cu $(EXTRA_CPP_DEPENDS) +%.o:%.cpp $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< # Individual dependencies diff --git a/src/MAKE/MACHINES/Makefile.tacc b/src/MAKE/MACHINES/Makefile.tacc index f684c19ecfbbe63143e7ab1c303a5d87137396f4..5a6f7d6a275fbacc4ea679b471678581934fd996 100644 --- a/src/MAKE/MACHINES/Makefile.tacc +++ b/src/MAKE/MACHINES/Makefile.tacc @@ -26,12 +26,12 @@ SHLIBFLAGS = -shared # if you change any -D setting, do full re-compile after "make clean" # LAMMPS ifdef settings -# see possible settings in Section 2.2 (step 4) of manual +# see possible settings in Section 3.5 of the manual LMP_INC = -DLAMMPS_GZIP # MPI library -# see discussion in Section 2.2 (step 5) of manual +# see discussion in Section 3.4 of the manual # MPI wrapper compiler/linker can provide this info # can point to dummy MPI library in src/STUBS as in Makefile.serial # use -D MPICH and OMPI settings in INC to avoid C++ lib conflicts @@ -44,36 +44,33 @@ MPI_PATH = MPI_LIB = -lmpich -lpthread # FFT library -# see discussion in Section 2.2 (step 6) of manaul +# see discussion in Section 3.5.2 of manual # can be left blank to use provided KISS FFT library # INC = -DFFT setting, e.g. -DFFT_FFTW, FFT compiler settings # PATH = path for FFT library # LIB = name of FFT library -FFTW_INC = ${TACC_FFTW2_INC} -FFTW_LIB = ${TACC_FFTW2_LIB} - -FFT_INC = -DFFT_FFTW2 -I${FFTW_INC} -FFT_PATH = -L${FFTW_LIB} -FFT_LIB = ${FFTW_LIB}/libfftw.a +FFT_INC = +FFT_PATH = +FFT_LIB = # JPEG and/or PNG library -# see discussion in Section 2.2 (step 7) of manual +# see discussion in Section 3.5.4 of manual # only needed if -DLAMMPS_JPEG or -DLAMMPS_PNG listed with LMP_INC # INC = path(s) for jpeglib.h and/or png.h # PATH = path(s) for JPEG library and/or PNG library # LIB = name(s) of JPEG library and/or PNG library -JPG_INC = -JPG_PATH = -JPG_LIB = +JPG_INC = +JPG_PATH = +JPG_LIB = # --------------------------------------------------------------------- # build rules and dependencies # do not edit this section -include Makefile.package.settings -include Makefile.package +include Makefile.package.settings +include Makefile.package EXTRA_INC = $(LMP_INC) $(PKG_INC) $(MPI_INC) $(FFT_INC) $(JPG_INC) $(PKG_SYSINC) EXTRA_PATH = $(PKG_PATH) $(MPI_PATH) $(FFT_PATH) $(JPG_PATH) $(PKG_SYSPATH) @@ -88,28 +85,27 @@ vpath %.h .. # Link target -$(EXE): $(OBJ) $(EXTRA_LINK_DEPENDS) - $(LINK) $(LINKFLAGS) $(EXTRA_PATH) $(OBJ) $(EXTRA_LIB) $(LIB) -o $(EXE) - $(SIZE) $(EXE) +$(EXE): main.o $(LMPLIB) $(EXTRA_LINK_DEPENDS) + $(LINK) $(LINKFLAGS) main.o $(EXTRA_PATH) $(LMPLINK) $(EXTRA_LIB) $(LIB) -o $@ + $(SIZE) $@ # Library targets -lib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(ARCHIVE) $(ARFLAGS) $(EXE) $(OBJ) +$(ARLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + @rm -f ../$(ARLIB) + $(ARCHIVE) $(ARFLAGS) ../$(ARLIB) $(OBJ) + @rm -f $(ARLIB) + @ln -s ../$(ARLIB) $(ARLIB) -shlib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o $(EXE) \ - $(OBJ) $(EXTRA_LIB) $(LIB) +$(SHLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o ../$(SHLIB) \ + $(OBJ) $(EXTRA_LIB) $(LIB) + @rm -f $(SHLIB) + @ln -s ../$(SHLIB) $(SHLIB) # Compilation rules -%.o:%.cpp $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< - -%.d:%.cpp $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(EXTRA_INC) $(DEPFLAGS) $< > $@ - -%.o:%.cu $(EXTRA_CPP_DEPENDS) +%.o:%.cpp $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< # Individual dependencies diff --git a/src/MAKE/MACHINES/Makefile.theta b/src/MAKE/MACHINES/Makefile.theta index 663f2120204b3c2144c1ffac32e68d9bbdaa1e29..62e125152d27155d0f804cf3c389bac464013d91 100644 --- a/src/MAKE/MACHINES/Makefile.theta +++ b/src/MAKE/MACHINES/Makefile.theta @@ -9,8 +9,8 @@ SHELL = /bin/sh CC = CC -mkl OPTFLAGS = -xMIC-AVX512 -O3 -fp-model fast=2 -no-prec-div -qoverride-limits -CCFLAGS = -g -qopenmp -DLAMMPS_MEMALIGN=64 -qno-offload \ - -fno-alias -ansi-alias -restrict $(OPTFLAGS) +CCFLAGS = -g -qopenmp -qno-offload -ansi-alias -restrict \ + -DLMP_INTEL_USELRT -DLMP_USE_MKL_RNG $(OPTFLAGS) CCFLAGS += -std=c++11 SHFLAGS = -fPIC DEPFLAGS = -M @@ -30,12 +30,12 @@ SHLIBFLAGS = -shared # if you change any -D setting, do full re-compile after "make clean" # LAMMPS ifdef settings -# see possible settings in Section 2.2 (step 4) of manual +# see possible settings in Section 3.5 of the manual LMP_INC = -DLAMMPS_GZIP #-DLAMMPS_JPEG # MPI library -# see discussion in Section 2.2 (step 5) of manual +# see discussion in Section 3.4 of the manual # MPI wrapper compiler/linker can provide this info # can point to dummy MPI library in src/STUBS as in Makefile.serial # use -D MPICH and OMPI settings in INC to avoid C++ lib conflicts @@ -48,7 +48,7 @@ MPI_PATH = MPI_LIB = # FFT library -# see discussion in Section 2.2 (step 6) of manaul +# see discussion in Section 3.5.2 of manual # can be left blank to use provided KISS FFT library # INC = -DFFT setting, e.g. -DFFT_FFTW, FFT compiler settings # PATH = path for FFT library @@ -60,7 +60,7 @@ FFT_LIB = -L$(MKLROOT)/lib/intel64/ -Wl,--start-group -lmkl_intel_ilp64 \ -lmkl_intel_thread -lmkl_core -Wl,--end-group # JPEG and/or PNG library -# see discussion in Section 2.2 (step 7) of manual +# see discussion in Section 3.5.4 of manual # only needed if -DLAMMPS_JPEG or -DLAMMPS_PNG listed with LMP_INC # INC = path(s) for jpeglib.h and/or png.h # PATH = path(s) for JPEG library and/or PNG library @@ -80,6 +80,8 @@ include Makefile.package EXTRA_INC = $(LMP_INC) $(PKG_INC) $(MPI_INC) $(FFT_INC) $(JPG_INC) $(PKG_SYSINC) EXTRA_PATH = $(PKG_PATH) $(MPI_PATH) $(FFT_PATH) $(JPG_PATH) $(PKG_SYSPATH) EXTRA_LIB = $(PKG_LIB) $(MPI_LIB) $(FFT_LIB) $(JPG_LIB) $(PKG_SYSLIB) +EXTRA_CPP_DEPENDS = $(PKG_CPP_DEPENDS) +EXTRA_LINK_DEPENDS = $(PKG_LINK_DEPENDS) # Path to src files @@ -88,30 +90,29 @@ vpath %.h .. # Link target -$(EXE): $(OBJ) - $(LINK) $(LINKFLAGS) $(EXTRA_PATH) $(OBJ) $(EXTRA_LIB) $(LIB) -o $(EXE) - $(SIZE) $(EXE) +$(EXE): main.o $(LMPLIB) $(EXTRA_LINK_DEPENDS) + $(LINK) $(LINKFLAGS) main.o $(EXTRA_PATH) $(LMPLINK) $(EXTRA_LIB) $(LIB) -o $@ + $(SIZE) $@ # Library targets -lib: $(OBJ) - $(ARCHIVE) $(ARFLAGS) $(EXE) $(OBJ) +$(ARLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + @rm -f ../$(ARLIB) + $(ARCHIVE) $(ARFLAGS) ../$(ARLIB) $(OBJ) + @rm -f $(ARLIB) + @ln -s ../$(ARLIB) $(ARLIB) -shlib: $(OBJ) - $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o $(EXE) \ - $(OBJ) $(EXTRA_LIB) $(LIB) +$(SHLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o ../$(SHLIB) \ + $(OBJ) $(EXTRA_LIB) $(LIB) + @rm -f $(SHLIB) + @ln -s ../$(SHLIB) $(SHLIB) # Compilation rules %.o:%.cpp $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< -%.d:%.cpp - $(CC) $(CCFLAGS) $(EXTRA_INC) $(DEPFLAGS) $< > $@ - -%.o:%.cu - $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< - # Individual dependencies depend : fastdep.exe $(SRC) diff --git a/src/MAKE/MACHINES/Makefile.ubuntu b/src/MAKE/MACHINES/Makefile.ubuntu index f274780f8e1763166265e53195a42d1bd4f215de..6c419ffdfa6294bdd163c634efc271de26a0b0e9 100644 --- a/src/MAKE/MACHINES/Makefile.ubuntu +++ b/src/MAKE/MACHINES/Makefile.ubuntu @@ -30,12 +30,12 @@ SHLIBFLAGS = -shared # if you change any -D setting, do full re-compile after "make clean" # LAMMPS ifdef settings -# see possible settings in Section 2.2 (step 4) of manual +# see possible settings in Section 3.5 of the manual LMP_INC = -DLAMMPS_GZIP -DLAMMPS_JPEG -DLAMMPS_PNG -DLAMMPS_FFMPEG # MPI library -# see discussion in Section 2.2 (step 5) of manual +# see discussion in Section 3.4 of the manual # MPI wrapper compiler/linker can provide this info # can point to dummy MPI library in src/STUBS as in Makefile.serial # use -D MPICH and OMPI settings in INC to avoid C++ lib conflicts @@ -48,7 +48,7 @@ MPI_PATH = MPI_LIB = # FFT library -# see discussion in Section 2.2 (step 6) of manaul +# see discussion in Section 3.5.2 of manual # can be left blank to use provided KISS FFT library # INC = -DFFT setting, e.g. -DFFT_FFTW, FFT compiler settings # PATH = path for FFT library @@ -59,7 +59,7 @@ FFT_PATH = FFT_LIB = -lfftw3 # JPEG and/or PNG library -# see discussion in Section 2.2 (step 7) of manual +# see discussion in Section 3.5.4 of manual # only needed if -DLAMMPS_JPEG or -DLAMMPS_PNG listed with LMP_INC # INC = path(s) for jpeglib.h and/or png.h # PATH = path(s) for JPEG library and/or PNG library @@ -73,8 +73,8 @@ JPG_LIB = -ljpeg -lpng # build rules and dependencies # do not edit this section -include Makefile.package.settings -include Makefile.package +include Makefile.package.settings +include Makefile.package EXTRA_INC = $(LMP_INC) $(PKG_INC) $(MPI_INC) $(FFT_INC) $(JPG_INC) $(PKG_SYSINC) EXTRA_PATH = $(PKG_PATH) $(MPI_PATH) $(FFT_PATH) $(JPG_PATH) $(PKG_SYSPATH) @@ -89,28 +89,27 @@ vpath %.h .. # Link target -$(EXE): $(OBJ) $(EXTRA_LINK_DEPENDS) - $(LINK) $(LINKFLAGS) $(EXTRA_PATH) $(OBJ) $(EXTRA_LIB) $(LIB) -o $(EXE) - $(SIZE) $(EXE) +$(EXE): main.o $(LMPLIB) $(EXTRA_LINK_DEPENDS) + $(LINK) $(LINKFLAGS) main.o $(EXTRA_PATH) $(LMPLINK) $(EXTRA_LIB) $(LIB) -o $@ + $(SIZE) $@ # Library targets -lib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(ARCHIVE) $(ARFLAGS) $(EXE) $(OBJ) +$(ARLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + @rm -f ../$(ARLIB) + $(ARCHIVE) $(ARFLAGS) ../$(ARLIB) $(OBJ) + @rm -f $(ARLIB) + @ln -s ../$(ARLIB) $(ARLIB) -shlib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o $(EXE) \ - $(OBJ) $(EXTRA_LIB) $(LIB) +$(SHLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o ../$(SHLIB) \ + $(OBJ) $(EXTRA_LIB) $(LIB) + @rm -f $(SHLIB) + @ln -s ../$(SHLIB) $(SHLIB) # Compilation rules -%.o:%.cpp $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< - -%.d:%.cpp $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(EXTRA_INC) $(DEPFLAGS) $< > $@ - -%.o:%.cu $(EXTRA_CPP_DEPENDS) +%.o:%.cpp $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< # Individual dependencies diff --git a/src/MAKE/MACHINES/Makefile.ubuntu_simple b/src/MAKE/MACHINES/Makefile.ubuntu_simple index d4ac53a145abe33d29ce5ce4be8ff7e626b3f238..98897f964f42d21a6bc9452adea47858d85af8ff 100644 --- a/src/MAKE/MACHINES/Makefile.ubuntu_simple +++ b/src/MAKE/MACHINES/Makefile.ubuntu_simple @@ -29,12 +29,12 @@ SHLIBFLAGS = -shared # if you change any -D setting, do full re-compile after "make clean" # LAMMPS ifdef settings -# see possible settings in Section 2.2 (step 4) of manual +# see possible settings in Section 3.5 of the manual LMP_INC = -DLAMMPS_GZIP # MPI library -# see discussion in Section 2.2 (step 5) of manual +# see discussion in Section 3.4 of the manual # MPI wrapper compiler/linker can provide this info # can point to dummy MPI library in src/STUBS as in Makefile.serial # use -D MPICH and OMPI settings in INC to avoid C++ lib conflicts @@ -42,38 +42,38 @@ LMP_INC = -DLAMMPS_GZIP # PATH = path for MPI library # LIB = name of MPI library -MPI_INC = -MPI_PATH = +MPI_INC = -DMPICH_SKIP_MPICXX -DOMPI_SKIP_MPICXX=1 +MPI_PATH = MPI_LIB = # FFT library -# see discussion in Section 2.2 (step 6) of manaul +# see discussion in Section 3.5.2 of manual # can be left blank to use provided KISS FFT library # INC = -DFFT setting, e.g. -DFFT_FFTW, FFT compiler settings # PATH = path for FFT library # LIB = name of FFT library FFT_INC = -FFT_PATH = +FFT_PATH = FFT_LIB = # JPEG and/or PNG library -# see discussion in Section 2.2 (step 7) of manual +# see discussion in Section 3.5.4 of manual # only needed if -DLAMMPS_JPEG or -DLAMMPS_PNG listed with LMP_INC # INC = path(s) for jpeglib.h and/or png.h # PATH = path(s) for JPEG library and/or PNG library # LIB = name(s) of JPEG library and/or PNG library -JPG_INC = -JPG_PATH = +JPG_INC = +JPG_PATH = JPG_LIB = # --------------------------------------------------------------------- # build rules and dependencies # do not edit this section -include Makefile.package.settings -include Makefile.package +include Makefile.package.settings +include Makefile.package EXTRA_INC = $(LMP_INC) $(PKG_INC) $(MPI_INC) $(FFT_INC) $(JPG_INC) $(PKG_SYSINC) EXTRA_PATH = $(PKG_PATH) $(MPI_PATH) $(FFT_PATH) $(JPG_PATH) $(PKG_SYSPATH) @@ -88,28 +88,27 @@ vpath %.h .. # Link target -$(EXE): $(OBJ) $(EXTRA_LINK_DEPENDS) - $(LINK) $(LINKFLAGS) $(EXTRA_PATH) $(OBJ) $(EXTRA_LIB) $(LIB) -o $(EXE) - $(SIZE) $(EXE) +$(EXE): main.o $(LMPLIB) $(EXTRA_LINK_DEPENDS) + $(LINK) $(LINKFLAGS) main.o $(EXTRA_PATH) $(LMPLINK) $(EXTRA_LIB) $(LIB) -o $@ + $(SIZE) $@ # Library targets -lib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(ARCHIVE) $(ARFLAGS) $(EXE) $(OBJ) +$(ARLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + @rm -f ../$(ARLIB) + $(ARCHIVE) $(ARFLAGS) ../$(ARLIB) $(OBJ) + @rm -f $(ARLIB) + @ln -s ../$(ARLIB) $(ARLIB) -shlib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o $(EXE) \ - $(OBJ) $(EXTRA_LIB) $(LIB) +$(SHLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o ../$(SHLIB) \ + $(OBJ) $(EXTRA_LIB) $(LIB) + @rm -f $(SHLIB) + @ln -s ../$(SHLIB) $(SHLIB) # Compilation rules -%.o:%.cpp $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< - -%.d:%.cpp $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(EXTRA_INC) $(DEPFLAGS) $< > $@ - -%.o:%.cu $(EXTRA_CPP_DEPENDS) +%.o:%.cpp $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< # Individual dependencies diff --git a/src/MAKE/MACHINES/Makefile.white b/src/MAKE/MACHINES/Makefile.white index 42daf850f32dea89728dddd0504709eba1b112f5..ff2103008cb11bc74ef8941c7f2029a3b666dd60 100644 --- a/src/MAKE/MACHINES/Makefile.white +++ b/src/MAKE/MACHINES/Makefile.white @@ -1,4 +1,4 @@ -# kokkos_cuda = KOKKOS/CUDA package, OpenMPI with nvcc compiler, Kepler GPU +# white = KOKKOS/CUDA package, OpenMPI with nvcc compiler, Pascal GPU, Power8 CPU SHELL = /bin/sh @@ -30,12 +30,12 @@ KOKKOS_ARCH = Pascal60,Power8 # if you change any -D setting, do full re-compile after "make clean" # LAMMPS ifdef settings -# see possible settings in Section 2.2 (step 4) of manual +# see possible settings in Section 3.5 of the manual LMP_INC = -DLAMMPS_GZIP # MPI library -# see discussion in Section 2.2 (step 5) of manual +# see discussion in Section 3.4 of the manual # MPI wrapper compiler/linker can provide this info # can point to dummy MPI library in src/STUBS as in Makefile.serial # use -D MPICH and OMPI settings in INC to avoid C++ lib conflicts @@ -48,33 +48,33 @@ MPI_PATH = MPI_LIB = # FFT library -# see discussion in Section 2.2 (step 6) of manaul +# see discussion in Section 3.5.2 of manual # can be left blank to use provided KISS FFT library # INC = -DFFT setting, e.g. -DFFT_FFTW, FFT compiler settings # PATH = path for FFT library # LIB = name of FFT library -FFT_INC = -FFT_PATH = -FFT_LIB = +FFT_INC = +FFT_PATH = +FFT_LIB = # JPEG and/or PNG library -# see discussion in Section 2.2 (step 7) of manual +# see discussion in Section 3.5.4 of manual # only needed if -DLAMMPS_JPEG or -DLAMMPS_PNG listed with LMP_INC # INC = path(s) for jpeglib.h and/or png.h # PATH = path(s) for JPEG library and/or PNG library # LIB = name(s) of JPEG library and/or PNG library -JPG_INC = -JPG_PATH = -JPG_LIB = +JPG_INC = +JPG_PATH = +JPG_LIB = # --------------------------------------------------------------------- # build rules and dependencies # do not edit this section -include Makefile.package.settings -include Makefile.package +include Makefile.package.settings +include Makefile.package EXTRA_INC = $(LMP_INC) $(PKG_INC) $(MPI_INC) $(FFT_INC) $(JPG_INC) $(PKG_SYSINC) EXTRA_PATH = $(PKG_PATH) $(MPI_PATH) $(FFT_PATH) $(JPG_PATH) $(PKG_SYSPATH) @@ -89,28 +89,27 @@ vpath %.h .. # Link target -$(EXE): $(OBJ) $(EXTRA_LINK_DEPENDS) - $(LINK) $(LINKFLAGS) $(EXTRA_PATH) $(OBJ) $(EXTRA_LIB) $(LIB) -o $(EXE) - $(SIZE) $(EXE) +$(EXE): main.o $(LMPLIB) $(EXTRA_LINK_DEPENDS) + $(LINK) $(LINKFLAGS) main.o $(EXTRA_PATH) $(LMPLINK) $(EXTRA_LIB) $(LIB) -o $@ + $(SIZE) $@ # Library targets -lib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(ARCHIVE) $(ARFLAGS) $(EXE) $(OBJ) +$(ARLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + @rm -f ../$(ARLIB) + $(ARCHIVE) $(ARFLAGS) ../$(ARLIB) $(OBJ) + @rm -f $(ARLIB) + @ln -s ../$(ARLIB) $(ARLIB) -shlib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o $(EXE) \ - $(OBJ) $(EXTRA_LIB) $(LIB) +$(SHLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o ../$(SHLIB) \ + $(OBJ) $(EXTRA_LIB) $(LIB) + @rm -f $(SHLIB) + @ln -s ../$(SHLIB) $(SHLIB) # Compilation rules -%.o:%.cpp $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< - -%.d:%.cpp $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(EXTRA_INC) $(DEPFLAGS) $< > $@ - -%.o:%.cu $(EXTRA_CPP_DEPENDS) +%.o:%.cpp $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< # Individual dependencies diff --git a/src/MAKE/MACHINES/Makefile.xe6 b/src/MAKE/MACHINES/Makefile.xe6 index 6b8b9595bf287ad6c7159ab8e50d3757226ddd39..a6db78a05330c38a030611bdeea6a1d93ad4b82f 100644 --- a/src/MAKE/MACHINES/Makefile.xe6 +++ b/src/MAKE/MACHINES/Makefile.xe6 @@ -27,12 +27,12 @@ SHLIBFLAGS = -shared # if you change any -D setting, do full re-compile after "make clean" # LAMMPS ifdef settings -# see possible settings in Section 2.2 (step 4) of manual +# see possible settings in Section 3.5 of the manual LMP_INC = -DLAMMPS_GZIP # MPI library -# see discussion in Section 2.2 (step 5) of manual +# see discussion in Section 3.4 of the manual # MPI wrapper compiler/linker can provide this info # can point to dummy MPI library in src/STUBS as in Makefile.serial # use -D MPICH and OMPI settings in INC to avoid C++ lib conflicts @@ -45,33 +45,33 @@ MPI_PATH = MPI_LIB = # FFT library -# see discussion in Section 2.2 (step 6) of manaul +# see discussion in Section 3.5.2 of manual # can be left blank to use provided KISS FFT library # INC = -DFFT setting, e.g. -DFFT_FFTW, FFT compiler settings # PATH = path for FFT library # LIB = name of FFT library -FFT_INC = -DFFT_FFTW2 -FFT_PATH = -FFT_LIB = -lfftw +FFT_INC = +FFT_PATH = +FFT_LIB = # JPEG and/or PNG library -# see discussion in Section 2.2 (step 7) of manual +# see discussion in Section 3.5.4 of manual # only needed if -DLAMMPS_JPEG or -DLAMMPS_PNG listed with LMP_INC # INC = path(s) for jpeglib.h and/or png.h # PATH = path(s) for JPEG library and/or PNG library # LIB = name(s) of JPEG library and/or PNG library -JPG_INC = -JPG_PATH = -JPG_LIB = +JPG_INC = +JPG_PATH = +JPG_LIB = # --------------------------------------------------------------------- # build rules and dependencies # do not edit this section -include Makefile.package.settings -include Makefile.package +include Makefile.package.settings +include Makefile.package EXTRA_INC = $(LMP_INC) $(PKG_INC) $(MPI_INC) $(FFT_INC) $(JPG_INC) $(PKG_SYSINC) EXTRA_PATH = $(PKG_PATH) $(MPI_PATH) $(FFT_PATH) $(JPG_PATH) $(PKG_SYSPATH) @@ -86,28 +86,27 @@ vpath %.h .. # Link target -$(EXE): $(OBJ) $(EXTRA_LINK_DEPENDS) - $(LINK) $(LINKFLAGS) $(EXTRA_PATH) $(OBJ) $(EXTRA_LIB) $(LIB) -o $(EXE) - $(SIZE) $(EXE) +$(EXE): main.o $(LMPLIB) $(EXTRA_LINK_DEPENDS) + $(LINK) $(LINKFLAGS) main.o $(EXTRA_PATH) $(LMPLINK) $(EXTRA_LIB) $(LIB) -o $@ + $(SIZE) $@ # Library targets -lib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(ARCHIVE) $(ARFLAGS) $(EXE) $(OBJ) +$(ARLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + @rm -f ../$(ARLIB) + $(ARCHIVE) $(ARFLAGS) ../$(ARLIB) $(OBJ) + @rm -f $(ARLIB) + @ln -s ../$(ARLIB) $(ARLIB) -shlib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o $(EXE) \ - $(OBJ) $(EXTRA_LIB) $(LIB) +$(SHLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o ../$(SHLIB) \ + $(OBJ) $(EXTRA_LIB) $(LIB) + @rm -f $(SHLIB) + @ln -s ../$(SHLIB) $(SHLIB) # Compilation rules -%.o:%.cpp $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< - -%.d:%.cpp $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(EXTRA_INC) $(DEPFLAGS) $< > $@ - -%.o:%.cu $(EXTRA_CPP_DEPENDS) +%.o:%.cpp $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< # Individual dependencies diff --git a/src/MAKE/MACHINES/Makefile.xt3 b/src/MAKE/MACHINES/Makefile.xt3 index 615bad3611d3bb073547c20b49aeeb2c0910e460..a6ffe94dddc5598d321789e1529222be89c5c73c 100644 --- a/src/MAKE/MACHINES/Makefile.xt3 +++ b/src/MAKE/MACHINES/Makefile.xt3 @@ -28,12 +28,12 @@ SHLIBFLAGS = -shared # if you change any -D setting, do full re-compile after "make clean" # LAMMPS ifdef settings -# see possible settings in Section 2.2 (step 4) of manual +# see possible settings in Section 3.5 of the manual LMP_INC = -DLAMMPS_GZIP -DLAMMPS_XDR # MPI library -# see discussion in Section 2.2 (step 5) of manual +# see discussion in Section 3.4 of the manual # MPI wrapper compiler/linker can provide this info # can point to dummy MPI library in src/STUBS as in Makefile.serial # use -D MPICH and OMPI settings in INC to avoid C++ lib conflicts @@ -46,33 +46,33 @@ MPI_PATH = MPI_LIB = -lmpich -lpthread # FFT library -# see discussion in Section 2.2 (step 6) of manaul +# see discussion in Section 3.5.2 of manual # can be left blank to use provided KISS FFT library # INC = -DFFT setting, e.g. -DFFT_FFTW, FFT compiler settings # PATH = path for FFT library # LIB = name of FFT library -FFT_INC = -DFFT_FFTW2 -I$(FFTW_INC) -FFT_PATH = -L$(FFTW_LIB) -FFT_LIB = -ldfftw +FFT_INC = +FFT_PATH = +FFT_LIB = # JPEG and/or PNG library -# see discussion in Section 2.2 (step 7) of manual +# see discussion in Section 3.5.4 of manual # only needed if -DLAMMPS_JPEG or -DLAMMPS_PNG listed with LMP_INC # INC = path(s) for jpeglib.h and/or png.h # PATH = path(s) for JPEG library and/or PNG library # LIB = name(s) of JPEG library and/or PNG library -JPG_INC = -JPG_PATH = -JPG_LIB = +JPG_INC = +JPG_PATH = +JPG_LIB = # --------------------------------------------------------------------- # build rules and dependencies # do not edit this section -include Makefile.package.settings -include Makefile.package +include Makefile.package.settings +include Makefile.package EXTRA_INC = $(LMP_INC) $(PKG_INC) $(MPI_INC) $(FFT_INC) $(JPG_INC) $(PKG_SYSINC) EXTRA_PATH = $(PKG_PATH) $(MPI_PATH) $(FFT_PATH) $(JPG_PATH) $(PKG_SYSPATH) @@ -87,28 +87,27 @@ vpath %.h .. # Link target -$(EXE): $(OBJ) $(EXTRA_LINK_DEPENDS) - $(LINK) $(LINKFLAGS) $(EXTRA_PATH) $(OBJ) $(EXTRA_LIB) $(LIB) -o $(EXE) - $(SIZE) $(EXE) +$(EXE): main.o $(LMPLIB) $(EXTRA_LINK_DEPENDS) + $(LINK) $(LINKFLAGS) main.o $(EXTRA_PATH) $(LMPLINK) $(EXTRA_LIB) $(LIB) -o $@ + $(SIZE) $@ # Library targets -lib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(ARCHIVE) $(ARFLAGS) $(EXE) $(OBJ) +$(ARLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + @rm -f ../$(ARLIB) + $(ARCHIVE) $(ARFLAGS) ../$(ARLIB) $(OBJ) + @rm -f $(ARLIB) + @ln -s ../$(ARLIB) $(ARLIB) -shlib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o $(EXE) \ - $(OBJ) $(EXTRA_LIB) $(LIB) +$(SHLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o ../$(SHLIB) \ + $(OBJ) $(EXTRA_LIB) $(LIB) + @rm -f $(SHLIB) + @ln -s ../$(SHLIB) $(SHLIB) # Compilation rules -%.o:%.cpp $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< - -%.d:%.cpp $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(EXTRA_INC) $(DEPFLAGS) $< > $@ - -%.o:%.cu $(EXTRA_CPP_DEPENDS) +%.o:%.cpp $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< # Individual dependencies diff --git a/src/MAKE/MACHINES/Makefile.xt5 b/src/MAKE/MACHINES/Makefile.xt5 index 2552a7060a419cd697a7d8f0399c1b576e35625c..1a85e40333fcd4b04ae643eabc198f34ced8e3d0 100644 --- a/src/MAKE/MACHINES/Makefile.xt5 +++ b/src/MAKE/MACHINES/Makefile.xt5 @@ -27,12 +27,12 @@ SHLIBFLAGS = -shared # if you change any -D setting, do full re-compile after "make clean" # LAMMPS ifdef settings -# see possible settings in Section 2.2 (step 4) of manual +# see possible settings in Section 3.5 of the manual LMP_INC = -DLAMMPS_GZIP # MPI library -# see discussion in Section 2.2 (step 5) of manual +# see discussion in Section 3.4 of the manual # MPI wrapper compiler/linker can provide this info # can point to dummy MPI library in src/STUBS as in Makefile.serial # use -D MPICH and OMPI settings in INC to avoid C++ lib conflicts @@ -45,33 +45,33 @@ MPI_PATH = MPI_LIB = # FFT library -# see discussion in Section 2.2 (step 6) of manaul +# see discussion in Section 3.5.2 of manual # can be left blank to use provided KISS FFT library # INC = -DFFT setting, e.g. -DFFT_FFTW, FFT compiler settings # PATH = path for FFT library # LIB = name of FFT library -FFT_INC = -DFFT_FFTW2 -I/home/sjplimp/fftw/fftw -FFT_PATH = -L/home/sjplimp/fftw/fftw/.libs -FFT_LIB = -lfftw +FFT_INC = +FFT_PATH = +FFT_LIB = # JPEG and/or PNG library -# see discussion in Section 2.2 (step 7) of manual +# see discussion in Section 3.5.4 of manual # only needed if -DLAMMPS_JPEG or -DLAMMPS_PNG listed with LMP_INC # INC = path(s) for jpeglib.h and/or png.h # PATH = path(s) for JPEG library and/or PNG library # LIB = name(s) of JPEG library and/or PNG library -JPG_INC = -JPG_PATH = -JPG_LIB = +JPG_INC = +JPG_PATH = +JPG_LIB = # --------------------------------------------------------------------- # build rules and dependencies # do not edit this section -include Makefile.package.settings -include Makefile.package +include Makefile.package.settings +include Makefile.package EXTRA_INC = $(LMP_INC) $(PKG_INC) $(MPI_INC) $(FFT_INC) $(JPG_INC) $(PKG_SYSINC) EXTRA_PATH = $(PKG_PATH) $(MPI_PATH) $(FFT_PATH) $(JPG_PATH) $(PKG_SYSPATH) @@ -86,28 +86,27 @@ vpath %.h .. # Link target -$(EXE): $(OBJ) $(EXTRA_LINK_DEPENDS) - $(LINK) $(LINKFLAGS) $(EXTRA_PATH) $(OBJ) $(EXTRA_LIB) $(LIB) -o $(EXE) - $(SIZE) $(EXE) +$(EXE): main.o $(LMPLIB) $(EXTRA_LINK_DEPENDS) + $(LINK) $(LINKFLAGS) main.o $(EXTRA_PATH) $(LMPLINK) $(EXTRA_LIB) $(LIB) -o $@ + $(SIZE) $@ # Library targets -lib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(ARCHIVE) $(ARFLAGS) $(EXE) $(OBJ) +$(ARLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + @rm -f ../$(ARLIB) + $(ARCHIVE) $(ARFLAGS) ../$(ARLIB) $(OBJ) + @rm -f $(ARLIB) + @ln -s ../$(ARLIB) $(ARLIB) -shlib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o $(EXE) \ - $(OBJ) $(EXTRA_LIB) $(LIB) +$(SHLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o ../$(SHLIB) \ + $(OBJ) $(EXTRA_LIB) $(LIB) + @rm -f $(SHLIB) + @ln -s ../$(SHLIB) $(SHLIB) # Compilation rules -%.o:%.cpp $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< - -%.d:%.cpp $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(EXTRA_INC) $(DEPFLAGS) $< > $@ - -%.o:%.cu $(EXTRA_CPP_DEPENDS) +%.o:%.cpp $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< # Individual dependencies diff --git a/src/MAKE/MACHINES/Makefile.bgq.details b/src/MAKE/MACHINES/bgq.make.details similarity index 93% rename from src/MAKE/MACHINES/Makefile.bgq.details rename to src/MAKE/MACHINES/bgq.make.details index be20b4388010aa03a08501811e4b464101fdcffd..0febd69d267760e3068f8e027a4d110b12233b9e 100644 --- a/src/MAKE/MACHINES/Makefile.bgq.details +++ b/src/MAKE/MACHINES/bgq.make.details @@ -74,12 +74,12 @@ SHLIBFLAGS = # if you change any -D setting, do full re-compile after "make clean" # LAMMPS ifdef settings -# see possible settings in Section 2.2 (step 4) of manual +# see possible settings in Section 3.5 of the manual LMP_INC = -DLAMMPS_GZIP # MPI library -# see discussion in Section 2.2 (step 5) of manual +# see discussion in Section 3.4 of the manual # MPI wrapper compiler/linker can provide this info # can point to dummy MPI library in src/STUBS as in Makefile.serial # use -D MPICH and OMPI settings in INC to avoid C++ lib conflicts @@ -95,7 +95,7 @@ MPI_INC += -DMPICH_SKIP_MPICXX MPI_LIB += #/home/jhammond/OSPRI/branches/marpn/wrap/libmpiarbrpn.a # FFT library -# see discussion in Section 2.2 (step 6) of manaul +# see discussion in Section 3.5.2 of manual # can be left blank to use provided KISS FFT library # INC = -DFFT setting, e.g. -DFFT_FFTW, FFT compiler settings # PATH = path for FFT library @@ -106,15 +106,15 @@ FFT_PATH = #/soft/libraries/alcf/current/xl/FFTW2 FFT_LIB = -L/soft/libraries/alcf/current/xl/FFTW2/lib -ldfftw # JPEG and/or PNG library -# see discussion in Section 2.2 (step 7) of manual +# see discussion in Section 3.5.4 of manual # only needed if -DLAMMPS_JPEG or -DLAMMPS_PNG listed with LMP_INC # INC = path(s) for jpeglib.h and/or png.h # PATH = path(s) for JPEG library and/or PNG library # LIB = name(s) of JPEG library and/or PNG library -JPG_INC = -JPG_PATH = -JPG_LIB = +JPG_INC = +JPG_PATH = +JPG_LIB = depend : fastdep.exe $(SRC) @./fastdep.exe $(EXTRA_INC) -- $^ > .depend || exit 1 diff --git a/src/MAKE/MINE/.gitignore b/src/MAKE/MINE/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..9c45e661e860f30769c92ef34dfbf8952704f38f --- /dev/null +++ b/src/MAKE/MINE/.gitignore @@ -0,0 +1 @@ +/Makefile.* diff --git a/src/MAKE/Makefile.mpi b/src/MAKE/Makefile.mpi index 3be2e20f95516efde10794c82628ad637517f5f6..31aee94b85e3bd0ac6c9b98508ddbbdb260a4e4a 100644 --- a/src/MAKE/Makefile.mpi +++ b/src/MAKE/Makefile.mpi @@ -40,37 +40,37 @@ LMP_INC = -DLAMMPS_GZIP -DLAMMPS_MEMALIGN=64 # -DLAMMPS_CXX98 # LIB = name of MPI library MPI_INC = -DMPICH_SKIP_MPICXX -DOMPI_SKIP_MPICXX=1 -MPI_PATH = -MPI_LIB = +MPI_PATH = +MPI_LIB = # FFT library -# see discussion in Section 2.2 (step 6) of manual +# see discussion in Section 3.5.2 of manual # can be left blank to use provided KISS FFT library # INC = -DFFT setting, e.g. -DFFT_FFTW, FFT compiler settings # PATH = path for FFT library # LIB = name of FFT library -FFT_INC = -FFT_PATH = -FFT_LIB = +FFT_INC = +FFT_PATH = +FFT_LIB = # JPEG and/or PNG library -# see discussion in Section 2.2 (step 7) of manual +# see discussion in Section 3.5.4 of manual # only needed if -DLAMMPS_JPEG or -DLAMMPS_PNG listed with LMP_INC # INC = path(s) for jpeglib.h and/or png.h # PATH = path(s) for JPEG library and/or PNG library # LIB = name(s) of JPEG library and/or PNG library -JPG_INC = -JPG_PATH = -JPG_LIB = +JPG_INC = +JPG_PATH = +JPG_LIB = # --------------------------------------------------------------------- # build rules and dependencies # do not edit this section -include Makefile.package.settings -include Makefile.package +include Makefile.package.settings +include Makefile.package EXTRA_INC = $(LMP_INC) $(PKG_INC) $(MPI_INC) $(FFT_INC) $(JPG_INC) $(PKG_SYSINC) EXTRA_PATH = $(PKG_PATH) $(MPI_PATH) $(FFT_PATH) $(JPG_PATH) $(PKG_SYSPATH) @@ -85,18 +85,23 @@ vpath %.h .. # Link target -$(EXE): $(OBJ) $(EXTRA_LINK_DEPENDS) - $(LINK) $(LINKFLAGS) $(EXTRA_PATH) $(OBJ) $(EXTRA_LIB) $(LIB) -o $(EXE) - $(SIZE) $(EXE) +$(EXE): main.o $(LMPLIB) $(EXTRA_LINK_DEPENDS) + $(LINK) $(LINKFLAGS) main.o $(EXTRA_PATH) $(LMPLINK) $(EXTRA_LIB) $(LIB) -o $@ + $(SIZE) $@ # Library targets -lib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(ARCHIVE) $(ARFLAGS) $(EXE) $(OBJ) - -shlib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o $(EXE) \ - $(OBJ) $(EXTRA_LIB) $(LIB) +$(ARLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + @rm -f ../$(ARLIB) + $(ARCHIVE) $(ARFLAGS) ../$(ARLIB) $(OBJ) + @rm -f $(ARLIB) + @ln -s ../$(ARLIB) $(ARLIB) + +$(SHLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o ../$(SHLIB) \ + $(OBJ) $(EXTRA_LIB) $(LIB) + @rm -f $(SHLIB) + @ln -s ../$(SHLIB) $(SHLIB) # Compilation rules diff --git a/src/MAKE/Makefile.serial b/src/MAKE/Makefile.serial index 86ddd0505399443f110bd39632a0cc4f260d091b..a0b2959c4b6d6bc2f4faaba9be95adde504e438d 100644 --- a/src/MAKE/Makefile.serial +++ b/src/MAKE/Makefile.serial @@ -44,7 +44,7 @@ MPI_PATH = -L../STUBS MPI_LIB = -lmpi_stubs # FFT library -# see discussion in Section 2.2 (step 6) of manual +# see discussion in Section 3.5.2 of manual # can be left blank to use provided KISS FFT library # INC = -DFFT setting, e.g. -DFFT_FFTW, FFT compiler settings # PATH = path for FFT library @@ -55,7 +55,7 @@ FFT_PATH = FFT_LIB = # JPEG and/or PNG library -# see discussion in Section 2.2 (step 7) of manual +# see discussion in Section 3.5.4 of manual # only needed if -DLAMMPS_JPEG or -DLAMMPS_PNG listed with LMP_INC # INC = path(s) for jpeglib.h and/or png.h # PATH = path(s) for JPEG library and/or PNG library @@ -69,8 +69,8 @@ JPG_LIB = # build rules and dependencies # do not edit this section -include Makefile.package.settings -include Makefile.package +include Makefile.package.settings +include Makefile.package EXTRA_INC = $(LMP_INC) $(PKG_INC) $(MPI_INC) $(FFT_INC) $(JPG_INC) $(PKG_SYSINC) EXTRA_PATH = $(PKG_PATH) $(MPI_PATH) $(FFT_PATH) $(JPG_PATH) $(PKG_SYSPATH) @@ -85,18 +85,23 @@ vpath %.h .. # Link target -$(EXE): $(OBJ) $(EXTRA_LINK_DEPENDS) - $(LINK) $(LINKFLAGS) $(EXTRA_PATH) $(OBJ) $(EXTRA_LIB) $(LIB) -o $(EXE) - $(SIZE) $(EXE) +$(EXE): main.o $(LMPLIB) $(EXTRA_LINK_DEPENDS) + $(LINK) $(LINKFLAGS) main.o $(EXTRA_PATH) $(LMPLINK) $(EXTRA_LIB) $(LIB) -o $@ + $(SIZE) $@ # Library targets -lib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(ARCHIVE) $(ARFLAGS) $(EXE) $(OBJ) - -shlib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o $(EXE) \ - $(OBJ) $(EXTRA_LIB) $(LIB) +$(ARLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + @rm -f ../$(ARLIB) + $(ARCHIVE) $(ARFLAGS) ../$(ARLIB) $(OBJ) + @rm -f $(ARLIB) + @ln -s ../$(ARLIB) $(ARLIB) + +$(SHLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o ../$(SHLIB) \ + $(OBJ) $(EXTRA_LIB) $(LIB) + @rm -f $(SHLIB) + @ln -s ../$(SHLIB) $(SHLIB) # Compilation rules diff --git a/src/MAKE/OPTIONS/Makefile.big b/src/MAKE/OPTIONS/Makefile.big index 59de28cad7276bc24dd982b186199a92163f723d..bdc093c6ae53fd301593814efd5de86b2afbcde6 100644 --- a/src/MAKE/OPTIONS/Makefile.big +++ b/src/MAKE/OPTIONS/Makefile.big @@ -26,12 +26,12 @@ SHLIBFLAGS = -shared # if you change any -D setting, do full re-compile after "make clean" # LAMMPS ifdef settings -# see possible settings in Section 2.2 (step 4) of manual +# see possible settings in Section 3.5 of the manual LMP_INC = -DLAMMPS_GZIP -DLAMMPS_BIGBIG # MPI library -# see discussion in Section 2.2 (step 5) of manual +# see discussion in Section 3.4 of the manual # MPI wrapper compiler/linker can provide this info # can point to dummy MPI library in src/STUBS as in Makefile.serial # use -D MPICH and OMPI settings in INC to avoid C++ lib conflicts @@ -40,37 +40,37 @@ LMP_INC = -DLAMMPS_GZIP -DLAMMPS_BIGBIG # LIB = name of MPI library MPI_INC = -DMPICH_SKIP_MPICXX -DOMPI_SKIP_MPICXX=1 -MPI_PATH = -MPI_LIB = +MPI_PATH = +MPI_LIB = # FFT library -# see discussion in Section 2.2 (step 6) of manual +# see discussion in Section 3.5.2 of manual # can be left blank to use provided KISS FFT library # INC = -DFFT setting, e.g. -DFFT_FFTW, FFT compiler settings # PATH = path for FFT library # LIB = name of FFT library -FFT_INC = -FFT_PATH = -FFT_LIB = +FFT_INC = +FFT_PATH = +FFT_LIB = # JPEG and/or PNG library -# see discussion in Section 2.2 (step 7) of manual +# see discussion in Section 3.5.4 of manual # only needed if -DLAMMPS_JPEG or -DLAMMPS_PNG listed with LMP_INC # INC = path(s) for jpeglib.h and/or png.h # PATH = path(s) for JPEG library and/or PNG library # LIB = name(s) of JPEG library and/or PNG library -JPG_INC = -JPG_PATH = -JPG_LIB = +JPG_INC = +JPG_PATH = +JPG_LIB = # --------------------------------------------------------------------- # build rules and dependencies # do not edit this section -include Makefile.package.settings -include Makefile.package +include Makefile.package.settings +include Makefile.package EXTRA_INC = $(LMP_INC) $(PKG_INC) $(MPI_INC) $(FFT_INC) $(JPG_INC) $(PKG_SYSINC) EXTRA_PATH = $(PKG_PATH) $(MPI_PATH) $(FFT_PATH) $(JPG_PATH) $(PKG_SYSPATH) @@ -85,28 +85,27 @@ vpath %.h .. # Link target -$(EXE): $(OBJ) $(EXTRA_LINK_DEPENDS) - $(LINK) $(LINKFLAGS) $(EXTRA_PATH) $(OBJ) $(EXTRA_LIB) $(LIB) -o $(EXE) - $(SIZE) $(EXE) +$(EXE): main.o $(LMPLIB) $(EXTRA_LINK_DEPENDS) + $(LINK) $(LINKFLAGS) main.o $(EXTRA_PATH) $(LMPLINK) $(EXTRA_LIB) $(LIB) -o $@ + $(SIZE) $@ # Library targets -lib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(ARCHIVE) $(ARFLAGS) $(EXE) $(OBJ) +$(ARLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + @rm -f ../$(ARLIB) + $(ARCHIVE) $(ARFLAGS) ../$(ARLIB) $(OBJ) + @rm -f $(ARLIB) + @ln -s ../$(ARLIB) $(ARLIB) -shlib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o $(EXE) \ - $(OBJ) $(EXTRA_LIB) $(LIB) +$(SHLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o ../$(SHLIB) \ + $(OBJ) $(EXTRA_LIB) $(LIB) + @rm -f $(SHLIB) + @ln -s ../$(SHLIB) $(SHLIB) # Compilation rules -%.o:%.cpp $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< - -%.d:%.cpp $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(EXTRA_INC) $(DEPFLAGS) $< > $@ - -%.o:%.cu $(EXTRA_CPP_DEPENDS) +%.o:%.cpp $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< # Individual dependencies diff --git a/src/MAKE/OPTIONS/Makefile.fftw b/src/MAKE/OPTIONS/Makefile.fftw index 75c3a1b92c689192944d51a68b0c58d80577c964..dd539fb5dc022397aaa674bafee4734fed661470 100644 --- a/src/MAKE/OPTIONS/Makefile.fftw +++ b/src/MAKE/OPTIONS/Makefile.fftw @@ -26,12 +26,12 @@ SHLIBFLAGS = -shared # if you change any -D setting, do full re-compile after "make clean" # LAMMPS ifdef settings -# see possible settings in Section 2.2 (step 4) of manual +# see possible settings in Section 3.5 of the manual LMP_INC = -DLAMMPS_GZIP # MPI library -# see discussion in Section 2.2 (step 5) of manual +# see discussion in Section 3.4 of the manual # MPI wrapper compiler/linker can provide this info # can point to dummy MPI library in src/STUBS as in Makefile.serial # use -D MPICH and OMPI settings in INC to avoid C++ lib conflicts @@ -40,11 +40,11 @@ LMP_INC = -DLAMMPS_GZIP # LIB = name of MPI library MPI_INC = -DMPICH_SKIP_MPICXX -DOMPI_SKIP_MPICXX=1 -MPI_PATH = -MPI_LIB = +MPI_PATH = +MPI_LIB = # FFT library -# see discussion in Section 2.2 (step 6) of manual +# see discussion in Section 3.5.2 of manual # can be left blank to use provided KISS FFT library # INC = -DFFT setting, e.g. -DFFT_FFTW, FFT compiler settings # PATH = path for FFT library @@ -55,22 +55,22 @@ FFT_PATH = -L/usr/local/lib FFT_LIB = -lfftw3 # JPEG and/or PNG library -# see discussion in Section 2.2 (step 7) of manual +# see discussion in Section 3.5.4 of manual # only needed if -DLAMMPS_JPEG or -DLAMMPS_PNG listed with LMP_INC # INC = path(s) for jpeglib.h and/or png.h # PATH = path(s) for JPEG library and/or PNG library # LIB = name(s) of JPEG library and/or PNG library -JPG_INC = -JPG_PATH = -JPG_LIB = +JPG_INC = +JPG_PATH = +JPG_LIB = # --------------------------------------------------------------------- # build rules and dependencies # do not edit this section -include Makefile.package.settings -include Makefile.package +include Makefile.package.settings +include Makefile.package EXTRA_INC = $(LMP_INC) $(PKG_INC) $(MPI_INC) $(FFT_INC) $(JPG_INC) $(PKG_SYSINC) EXTRA_PATH = $(PKG_PATH) $(MPI_PATH) $(FFT_PATH) $(JPG_PATH) $(PKG_SYSPATH) @@ -85,28 +85,27 @@ vpath %.h .. # Link target -$(EXE): $(OBJ) $(EXTRA_LINK_DEPENDS) - $(LINK) $(LINKFLAGS) $(EXTRA_PATH) $(OBJ) $(EXTRA_LIB) $(LIB) -o $(EXE) - $(SIZE) $(EXE) +$(EXE): main.o $(LMPLIB) $(EXTRA_LINK_DEPENDS) + $(LINK) $(LINKFLAGS) main.o $(EXTRA_PATH) $(LMPLINK) $(EXTRA_LIB) $(LIB) -o $@ + $(SIZE) $@ # Library targets -lib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(ARCHIVE) $(ARFLAGS) $(EXE) $(OBJ) +$(ARLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + @rm -f ../$(ARLIB) + $(ARCHIVE) $(ARFLAGS) ../$(ARLIB) $(OBJ) + @rm -f $(ARLIB) + @ln -s ../$(ARLIB) $(ARLIB) -shlib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o $(EXE) \ - $(OBJ) $(EXTRA_LIB) $(LIB) +$(SHLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o ../$(SHLIB) \ + $(OBJ) $(EXTRA_LIB) $(LIB) + @rm -f $(SHLIB) + @ln -s ../$(SHLIB) $(SHLIB) # Compilation rules -%.o:%.cpp $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< - -%.d:%.cpp $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(EXTRA_INC) $(DEPFLAGS) $< > $@ - -%.o:%.cu $(EXTRA_CPP_DEPENDS) +%.o:%.cpp $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< # Individual dependencies diff --git a/src/MAKE/OPTIONS/Makefile.g++_mpich b/src/MAKE/OPTIONS/Makefile.g++_mpich index 83b63b9def73df69c7621bb096901056c4891b83..4ea855cfeb51ff067c180d63ef4b3f9e3be0c730 100644 --- a/src/MAKE/OPTIONS/Makefile.g++_mpich +++ b/src/MAKE/OPTIONS/Makefile.g++_mpich @@ -26,12 +26,12 @@ SHLIBFLAGS = -shared # if you change any -D setting, do full re-compile after "make clean" # LAMMPS ifdef settings -# see possible settings in Section 2.2 (step 4) of manual +# see possible settings in Section 3.5 of the manual LMP_INC = -DLAMMPS_GZIP # MPI library -# see discussion in Section 2.2 (step 5) of manual +# see discussion in Section 3.4 of the manual # MPI wrapper compiler/linker can provide this info # can point to dummy MPI library in src/STUBS as in Makefile.serial # use -D MPICH and OMPI settings in INC to avoid C++ lib conflicts @@ -40,37 +40,37 @@ LMP_INC = -DLAMMPS_GZIP # LIB = name of MPI library MPI_INC = -DMPICH_SKIP_MPICXX -DOMPI_SKIP_MPICXX=1 -MPI_PATH = -MPI_LIB = +MPI_PATH = +MPI_LIB = # FFT library -# see discussion in Section 2.2 (step 6) of manaul +# see discussion in Section 3.5.2 of manual # can be left blank to use provided KISS FFT library # INC = -DFFT setting, e.g. -DFFT_FFTW, FFT compiler settings # PATH = path for FFT library # LIB = name of FFT library -FFT_INC = -FFT_PATH = -FFT_LIB = +FFT_INC = +FFT_PATH = +FFT_LIB = # JPEG and/or PNG library -# see discussion in Section 2.2 (step 7) of manual +# see discussion in Section 3.5.4 of manual # only needed if -DLAMMPS_JPEG or -DLAMMPS_PNG listed with LMP_INC # INC = path(s) for jpeglib.h and/or png.h # PATH = path(s) for JPEG library and/or PNG library # LIB = name(s) of JPEG library and/or PNG library -JPG_INC = -JPG_PATH = -JPG_LIB = +JPG_INC = +JPG_PATH = +JPG_LIB = # --------------------------------------------------------------------- # build rules and dependencies # do not edit this section -include Makefile.package.settings -include Makefile.package +include Makefile.package.settings +include Makefile.package EXTRA_INC = $(LMP_INC) $(PKG_INC) $(MPI_INC) $(FFT_INC) $(JPG_INC) $(PKG_SYSINC) EXTRA_PATH = $(PKG_PATH) $(MPI_PATH) $(FFT_PATH) $(JPG_PATH) $(PKG_SYSPATH) @@ -85,28 +85,27 @@ vpath %.h .. # Link target -$(EXE): $(OBJ) $(EXTRA_LINK_DEPENDS) - $(LINK) $(LINKFLAGS) $(EXTRA_PATH) $(OBJ) $(EXTRA_LIB) $(LIB) -o $(EXE) - $(SIZE) $(EXE) +$(EXE): main.o $(LMPLIB) $(EXTRA_LINK_DEPENDS) + $(LINK) $(LINKFLAGS) main.o $(EXTRA_PATH) $(LMPLINK) $(EXTRA_LIB) $(LIB) -o $@ + $(SIZE) $@ # Library targets -lib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(ARCHIVE) $(ARFLAGS) $(EXE) $(OBJ) +$(ARLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + @rm -f ../$(ARLIB) + $(ARCHIVE) $(ARFLAGS) ../$(ARLIB) $(OBJ) + @rm -f $(ARLIB) + @ln -s ../$(ARLIB) $(ARLIB) -shlib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o $(EXE) \ - $(OBJ) $(EXTRA_LIB) $(LIB) +$(SHLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o ../$(SHLIB) \ + $(OBJ) $(EXTRA_LIB) $(LIB) + @rm -f $(SHLIB) + @ln -s ../$(SHLIB) $(SHLIB) # Compilation rules -%.o:%.cpp $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< - -%.d:%.cpp $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(EXTRA_INC) $(DEPFLAGS) $< > $@ - -%.o:%.cu $(EXTRA_CPP_DEPENDS) +%.o:%.cpp $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< # Individual dependencies diff --git a/src/MAKE/OPTIONS/Makefile.g++_mpich_link b/src/MAKE/OPTIONS/Makefile.g++_mpich_link index aadbf30853a629173b54133368fb1a1cec0f717f..7b92a3e77abe840606645a9ac92e579af788cc4a 100644 --- a/src/MAKE/OPTIONS/Makefile.g++_mpich_link +++ b/src/MAKE/OPTIONS/Makefile.g++_mpich_link @@ -26,12 +26,12 @@ SHLIBFLAGS = -shared # if you change any -D setting, do full re-compile after "make clean" # LAMMPS ifdef settings -# see possible settings in Section 2.2 (step 4) of manual +# see possible settings in Section 3.5 of the manual LMP_INC = -DLAMMPS_GZIP # MPI library -# see discussion in Section 2.2 (step 5) of manual +# see discussion in Section 3.4 of the manual # MPI wrapper compiler/linker can provide this info # can point to dummy MPI library in src/STUBS as in Makefile.serial # use -D MPICH and OMPI settings in INC to avoid C++ lib conflicts @@ -44,33 +44,33 @@ MPI_PATH = -L/usr/local/lib MPI_LIB = -lmpich -lmpl -lpthread # FFT library -# see discussion in Section 2.2 (step 6) of manaul +# see discussion in Section 3.5.2 of manual # can be left blank to use provided KISS FFT library # INC = -DFFT setting, e.g. -DFFT_FFTW, FFT compiler settings # PATH = path for FFT library # LIB = name of FFT library -FFT_INC = -FFT_PATH = -FFT_LIB = +FFT_INC = +FFT_PATH = +FFT_LIB = # JPEG and/or PNG library -# see discussion in Section 2.2 (step 7) of manual +# see discussion in Section 3.5.4 of manual # only needed if -DLAMMPS_JPEG or -DLAMMPS_PNG listed with LMP_INC # INC = path(s) for jpeglib.h and/or png.h # PATH = path(s) for JPEG library and/or PNG library # LIB = name(s) of JPEG library and/or PNG library -JPG_INC = -JPG_PATH = -JPG_LIB = +JPG_INC = +JPG_PATH = +JPG_LIB = # --------------------------------------------------------------------- # build rules and dependencies # do not edit this section -include Makefile.package.settings -include Makefile.package +include Makefile.package.settings +include Makefile.package EXTRA_INC = $(LMP_INC) $(PKG_INC) $(MPI_INC) $(FFT_INC) $(JPG_INC) $(PKG_SYSINC) EXTRA_PATH = $(PKG_PATH) $(MPI_PATH) $(FFT_PATH) $(JPG_PATH) $(PKG_SYSPATH) @@ -85,28 +85,27 @@ vpath %.h .. # Link target -$(EXE): $(OBJ) $(EXTRA_LINK_DEPENDS) - $(LINK) $(LINKFLAGS) $(EXTRA_PATH) $(OBJ) $(EXTRA_LIB) $(LIB) -o $(EXE) - $(SIZE) $(EXE) +$(EXE): main.o $(LMPLIB) $(EXTRA_LINK_DEPENDS) + $(LINK) $(LINKFLAGS) main.o $(EXTRA_PATH) $(LMPLINK) $(EXTRA_LIB) $(LIB) -o $@ + $(SIZE) $@ # Library targets -lib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(ARCHIVE) $(ARFLAGS) $(EXE) $(OBJ) +$(ARLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + @rm -f ../$(ARLIB) + $(ARCHIVE) $(ARFLAGS) ../$(ARLIB) $(OBJ) + @rm -f $(ARLIB) + @ln -s ../$(ARLIB) $(ARLIB) -shlib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o $(EXE) \ - $(OBJ) $(EXTRA_LIB) $(LIB) +$(SHLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o ../$(SHLIB) \ + $(OBJ) $(EXTRA_LIB) $(LIB) + @rm -f $(SHLIB) + @ln -s ../$(SHLIB) $(SHLIB) # Compilation rules -%.o:%.cpp $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< - -%.d:%.cpp $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(EXTRA_INC) $(DEPFLAGS) $< > $@ - -%.o:%.cu $(EXTRA_CPP_DEPENDS) +%.o:%.cpp $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< # Individual dependencies diff --git a/src/MAKE/OPTIONS/Makefile.g++_openmpi b/src/MAKE/OPTIONS/Makefile.g++_openmpi index 835bb5d02402590e1642f206d9bf305065d03f29..548994f832c3e7b8028f5a2265b4d9a9a1a66ffa 100644 --- a/src/MAKE/OPTIONS/Makefile.g++_openmpi +++ b/src/MAKE/OPTIONS/Makefile.g++_openmpi @@ -27,12 +27,12 @@ SHLIBFLAGS = -shared # if you change any -D setting, do full re-compile after "make clean" # LAMMPS ifdef settings -# see possible settings in Section 2.2 (step 4) of manual +# see possible settings in Section 3.5 of the manual LMP_INC = -DLAMMPS_GZIP # MPI library -# see discussion in Section 2.2 (step 5) of manual +# see discussion in Section 3.4 of the manual # MPI wrapper compiler/linker can provide this info # can point to dummy MPI library in src/STUBS as in Makefile.serial # use -D MPICH and OMPI settings in INC to avoid C++ lib conflicts @@ -41,37 +41,37 @@ LMP_INC = -DLAMMPS_GZIP # LIB = name of MPI library MPI_INC = -DMPICH_SKIP_MPICXX -DOMPI_SKIP_MPICXX=1 -MPI_PATH = -MPI_LIB = +MPI_PATH = +MPI_LIB = # FFT library -# see discussion in Section 2.2 (step 6) of manaul +# see discussion in Section 3.5.2 of manual # can be left blank to use provided KISS FFT library # INC = -DFFT setting, e.g. -DFFT_FFTW, FFT compiler settings # PATH = path for FFT library # LIB = name of FFT library -FFT_INC = -FFT_PATH = -FFT_LIB = +FFT_INC = +FFT_PATH = +FFT_LIB = # JPEG and/or PNG library -# see discussion in Section 2.2 (step 7) of manual +# see discussion in Section 3.5.4 of manual # only needed if -DLAMMPS_JPEG or -DLAMMPS_PNG listed with LMP_INC # INC = path(s) for jpeglib.h and/or png.h # PATH = path(s) for JPEG library and/or PNG library # LIB = name(s) of JPEG library and/or PNG library -JPG_INC = -JPG_PATH = -JPG_LIB = +JPG_INC = +JPG_PATH = +JPG_LIB = # --------------------------------------------------------------------- # build rules and dependencies # do not edit this section -include Makefile.package.settings -include Makefile.package +include Makefile.package.settings +include Makefile.package EXTRA_INC = $(LMP_INC) $(PKG_INC) $(MPI_INC) $(FFT_INC) $(JPG_INC) $(PKG_SYSINC) EXTRA_PATH = $(PKG_PATH) $(MPI_PATH) $(FFT_PATH) $(JPG_PATH) $(PKG_SYSPATH) @@ -86,28 +86,27 @@ vpath %.h .. # Link target -$(EXE): $(OBJ) $(EXTRA_LINK_DEPENDS) - $(LINK) $(LINKFLAGS) $(EXTRA_PATH) $(OBJ) $(EXTRA_LIB) $(LIB) -o $(EXE) - $(SIZE) $(EXE) +$(EXE): main.o $(LMPLIB) $(EXTRA_LINK_DEPENDS) + $(LINK) $(LINKFLAGS) main.o $(EXTRA_PATH) $(LMPLINK) $(EXTRA_LIB) $(LIB) -o $@ + $(SIZE) $@ # Library targets -lib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(ARCHIVE) $(ARFLAGS) $(EXE) $(OBJ) +$(ARLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + @rm -f ../$(ARLIB) + $(ARCHIVE) $(ARFLAGS) ../$(ARLIB) $(OBJ) + @rm -f $(ARLIB) + @ln -s ../$(ARLIB) $(ARLIB) -shlib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o $(EXE) \ - $(OBJ) $(EXTRA_LIB) $(LIB) +$(SHLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o ../$(SHLIB) \ + $(OBJ) $(EXTRA_LIB) $(LIB) + @rm -f $(SHLIB) + @ln -s ../$(SHLIB) $(SHLIB) # Compilation rules -%.o:%.cpp $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< - -%.d:%.cpp $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(EXTRA_INC) $(DEPFLAGS) $< > $@ - -%.o:%.cu $(EXTRA_CPP_DEPENDS) +%.o:%.cpp $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< # Individual dependencies diff --git a/src/MAKE/OPTIONS/Makefile.g++_openmpi_link b/src/MAKE/OPTIONS/Makefile.g++_openmpi_link index f3f565430de4124a4b6a524872a5c675f3b5e5f2..6fc71fe2a54ee2183284c35c09ea7f91635ba115 100644 --- a/src/MAKE/OPTIONS/Makefile.g++_openmpi_link +++ b/src/MAKE/OPTIONS/Makefile.g++_openmpi_link @@ -26,12 +26,12 @@ SHLIBFLAGS = -shared # if you change any -D setting, do full re-compile after "make clean" # LAMMPS ifdef settings -# see possible settings in Section 2.2 (step 4) of manual +# see possible settings in Section 3.5 of the manual LMP_INC = -DLAMMPS_GZIP # MPI library -# see discussion in Section 2.2 (step 5) of manual +# see discussion in Section 3.4 of the manual # MPI wrapper compiler/linker can provide this info # can point to dummy MPI library in src/STUBS as in Makefile.serial # use -D MPICH and OMPI settings in INC to avoid C++ lib conflicts @@ -44,33 +44,33 @@ MPI_PATH = -L/usr/local/lib MPI_LIB = -lmpi -lmpi_cxx # FFT library -# see discussion in Section 2.2 (step 6) of manaul +# see discussion in Section 3.5.2 of manual # can be left blank to use provided KISS FFT library # INC = -DFFT setting, e.g. -DFFT_FFTW, FFT compiler settings # PATH = path for FFT library # LIB = name of FFT library -FFT_INC = -FFT_PATH = -FFT_LIB = +FFT_INC = +FFT_PATH = +FFT_LIB = # JPEG and/or PNG library -# see discussion in Section 2.2 (step 7) of manual +# see discussion in Section 3.5.4 of manual # only needed if -DLAMMPS_JPEG or -DLAMMPS_PNG listed with LMP_INC # INC = path(s) for jpeglib.h and/or png.h # PATH = path(s) for JPEG library and/or PNG library # LIB = name(s) of JPEG library and/or PNG library -JPG_INC = -JPG_PATH = -JPG_LIB = +JPG_INC = +JPG_PATH = +JPG_LIB = # --------------------------------------------------------------------- # build rules and dependencies # do not edit this section -include Makefile.package.settings -include Makefile.package +include Makefile.package.settings +include Makefile.package EXTRA_INC = $(LMP_INC) $(PKG_INC) $(MPI_INC) $(FFT_INC) $(JPG_INC) $(PKG_SYSINC) EXTRA_PATH = $(PKG_PATH) $(MPI_PATH) $(FFT_PATH) $(JPG_PATH) $(PKG_SYSPATH) @@ -85,28 +85,27 @@ vpath %.h .. # Link target -$(EXE): $(OBJ) $(EXTRA_LINK_DEPENDS) - $(LINK) $(LINKFLAGS) $(EXTRA_PATH) $(OBJ) $(EXTRA_LIB) $(LIB) -o $(EXE) - $(SIZE) $(EXE) +$(EXE): main.o $(LMPLIB) $(EXTRA_LINK_DEPENDS) + $(LINK) $(LINKFLAGS) main.o $(EXTRA_PATH) $(LMPLINK) $(EXTRA_LIB) $(LIB) -o $@ + $(SIZE) $@ # Library targets -lib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(ARCHIVE) $(ARFLAGS) $(EXE) $(OBJ) +$(ARLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + @rm -f ../$(ARLIB) + $(ARCHIVE) $(ARFLAGS) ../$(ARLIB) $(OBJ) + @rm -f $(ARLIB) + @ln -s ../$(ARLIB) $(ARLIB) -shlib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o $(EXE) \ - $(OBJ) $(EXTRA_LIB) $(LIB) +$(SHLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o ../$(SHLIB) \ + $(OBJ) $(EXTRA_LIB) $(LIB) + @rm -f $(SHLIB) + @ln -s ../$(SHLIB) $(SHLIB) # Compilation rules -%.o:%.cpp $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< - -%.d:%.cpp $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(EXTRA_INC) $(DEPFLAGS) $< > $@ - -%.o:%.cu $(EXTRA_CPP_DEPENDS) +%.o:%.cpp $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< # Individual dependencies diff --git a/src/MAKE/OPTIONS/Makefile.g++_serial b/src/MAKE/OPTIONS/Makefile.g++_serial index a01e4cae93b87c6103628d0642a62e30a2dc378e..65de6a2c2cb5735f19a10d4ca77f45f563ce01de 100644 --- a/src/MAKE/OPTIONS/Makefile.g++_serial +++ b/src/MAKE/OPTIONS/Makefile.g++_serial @@ -26,12 +26,12 @@ SHLIBFLAGS = -shared # if you change any -D setting, do full re-compile after "make clean" # LAMMPS ifdef settings -# see possible settings in Section 2.2 (step 4) of manual +# see possible settings in Section 3.5 of the manual LMP_INC = -DLAMMPS_GZIP # MPI library -# see discussion in Section 2.2 (step 5) of manual +# see discussion in Section 3.4 of the manual # MPI wrapper compiler/linker can provide this info # can point to dummy MPI library in src/STUBS as in Makefile.serial # use -D MPICH and OMPI settings in INC to avoid C++ lib conflicts @@ -44,33 +44,33 @@ MPI_PATH = -L../STUBS MPI_LIB = -lmpi_stubs # FFT library -# see discussion in Section 2.2 (step 6) of manaul +# see discussion in Section 3.5.2 of manual # can be left blank to use provided KISS FFT library # INC = -DFFT setting, e.g. -DFFT_FFTW, FFT compiler settings # PATH = path for FFT library # LIB = name of FFT library -FFT_INC = -FFT_PATH = -FFT_LIB = +FFT_INC = +FFT_PATH = +FFT_LIB = # JPEG and/or PNG library -# see discussion in Section 2.2 (step 7) of manual +# see discussion in Section 3.5.4 of manual # only needed if -DLAMMPS_JPEG or -DLAMMPS_PNG listed with LMP_INC # INC = path(s) for jpeglib.h and/or png.h # PATH = path(s) for JPEG library and/or PNG library # LIB = name(s) of JPEG library and/or PNG library -JPG_INC = -JPG_PATH = -JPG_LIB = +JPG_INC = +JPG_PATH = +JPG_LIB = # --------------------------------------------------------------------- # build rules and dependencies # do not edit this section -include Makefile.package.settings -include Makefile.package +include Makefile.package.settings +include Makefile.package EXTRA_INC = $(LMP_INC) $(PKG_INC) $(MPI_INC) $(FFT_INC) $(JPG_INC) $(PKG_SYSINC) EXTRA_PATH = $(PKG_PATH) $(MPI_PATH) $(FFT_PATH) $(JPG_PATH) $(PKG_SYSPATH) @@ -85,28 +85,27 @@ vpath %.h .. # Link target -$(EXE): $(OBJ) $(EXTRA_LINK_DEPENDS) - $(LINK) $(LINKFLAGS) $(EXTRA_PATH) $(OBJ) $(EXTRA_LIB) $(LIB) -o $(EXE) - $(SIZE) $(EXE) +$(EXE): main.o $(LMPLIB) $(EXTRA_LINK_DEPENDS) + $(LINK) $(LINKFLAGS) main.o $(EXTRA_PATH) $(LMPLINK) $(EXTRA_LIB) $(LIB) -o $@ + $(SIZE) $@ # Library targets -lib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(ARCHIVE) $(ARFLAGS) $(EXE) $(OBJ) +$(ARLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + @rm -f ../$(ARLIB) + $(ARCHIVE) $(ARFLAGS) ../$(ARLIB) $(OBJ) + @rm -f $(ARLIB) + @ln -s ../$(ARLIB) $(ARLIB) -shlib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o $(EXE) \ - $(OBJ) $(EXTRA_LIB) $(LIB) +$(SHLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o ../$(SHLIB) \ + $(OBJ) $(EXTRA_LIB) $(LIB) + @rm -f $(SHLIB) + @ln -s ../$(SHLIB) $(SHLIB) # Compilation rules -%.o:%.cpp $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< - -%.d:%.cpp $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(EXTRA_INC) $(DEPFLAGS) $< > $@ - -%.o:%.cu $(EXTRA_CPP_DEPENDS) +%.o:%.cpp $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< # Individual dependencies diff --git a/src/MAKE/OPTIONS/Makefile.gpu b/src/MAKE/OPTIONS/Makefile.gpu index e822161c55e92efd9413eb154a1544bcf5e999aa..26c98c120d34c521546b03e5d322acec9b7978b0 100644 --- a/src/MAKE/OPTIONS/Makefile.gpu +++ b/src/MAKE/OPTIONS/Makefile.gpu @@ -26,12 +26,12 @@ SHLIBFLAGS = -shared # if you change any -D setting, do full re-compile after "make clean" # LAMMPS ifdef settings -# see possible settings in Section 2.2 (step 4) of manual +# see possible settings in Section 3.5 of the manual LMP_INC = -DLAMMPS_GZIP # MPI library -# see discussion in Section 2.2 (step 5) of manual +# see discussion in Section 3.4 of the manual # MPI wrapper compiler/linker can provide this info # can point to dummy MPI library in src/STUBS as in Makefile.serial # use -D MPICH and OMPI settings in INC to avoid C++ lib conflicts @@ -40,37 +40,37 @@ LMP_INC = -DLAMMPS_GZIP # LIB = name of MPI library MPI_INC = -DMPICH_SKIP_MPICXX -DOMPI_SKIP_MPICXX=1 -MPI_PATH = -MPI_LIB = +MPI_PATH = +MPI_LIB = # FFT library -# see discussion in Section 2.2 (step 6) of manual +# see discussion in Section 3.5.2 of manual # can be left blank to use provided KISS FFT library # INC = -DFFT setting, e.g. -DFFT_FFTW, FFT compiler settings # PATH = path for FFT library # LIB = name of FFT library -FFT_INC = -FFT_PATH = -FFT_LIB = +FFT_INC = +FFT_PATH = +FFT_LIB = # JPEG and/or PNG library -# see discussion in Section 2.2 (step 7) of manual +# see discussion in Section 3.5.4 of manual # only needed if -DLAMMPS_JPEG or -DLAMMPS_PNG listed with LMP_INC # INC = path(s) for jpeglib.h and/or png.h # PATH = path(s) for JPEG library and/or PNG library # LIB = name(s) of JPEG library and/or PNG library -JPG_INC = -JPG_PATH = -JPG_LIB = +JPG_INC = +JPG_PATH = +JPG_LIB = # --------------------------------------------------------------------- # build rules and dependencies # do not edit this section -include Makefile.package.settings -include Makefile.package +include Makefile.package.settings +include Makefile.package EXTRA_INC = $(LMP_INC) $(PKG_INC) $(MPI_INC) $(FFT_INC) $(JPG_INC) $(PKG_SYSINC) EXTRA_PATH = $(PKG_PATH) $(MPI_PATH) $(FFT_PATH) $(JPG_PATH) $(PKG_SYSPATH) @@ -85,28 +85,27 @@ vpath %.h .. # Link target -$(EXE): $(OBJ) $(EXTRA_LINK_DEPENDS) - $(LINK) $(LINKFLAGS) $(EXTRA_PATH) $(OBJ) $(EXTRA_LIB) $(LIB) -o $(EXE) - $(SIZE) $(EXE) +$(EXE): main.o $(LMPLIB) $(EXTRA_LINK_DEPENDS) + $(LINK) $(LINKFLAGS) main.o $(EXTRA_PATH) $(LMPLINK) $(EXTRA_LIB) $(LIB) -o $@ + $(SIZE) $@ # Library targets -lib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(ARCHIVE) $(ARFLAGS) $(EXE) $(OBJ) +$(ARLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + @rm -f ../$(ARLIB) + $(ARCHIVE) $(ARFLAGS) ../$(ARLIB) $(OBJ) + @rm -f $(ARLIB) + @ln -s ../$(ARLIB) $(ARLIB) -shlib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o $(EXE) \ - $(OBJ) $(EXTRA_LIB) $(LIB) +$(SHLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o ../$(SHLIB) \ + $(OBJ) $(EXTRA_LIB) $(LIB) + @rm -f $(SHLIB) + @ln -s ../$(SHLIB) $(SHLIB) # Compilation rules -%.o:%.cpp $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< - -%.d:%.cpp $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(EXTRA_INC) $(DEPFLAGS) $< > $@ - -%.o:%.cu $(EXTRA_CPP_DEPENDS) +%.o:%.cpp $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< # Individual dependencies diff --git a/src/MAKE/MACHINES/Makefile.serial b/src/MAKE/OPTIONS/Makefile.hip similarity index 64% rename from src/MAKE/MACHINES/Makefile.serial rename to src/MAKE/OPTIONS/Makefile.hip index 0c4515dcd1113e1dc2fd93acb5a1233c2ef7ade2..8be9e7260f227a56d3343743da963a8f2311538c 100644 --- a/src/MAKE/MACHINES/Makefile.serial +++ b/src/MAKE/OPTIONS/Makefile.hip @@ -1,4 +1,4 @@ -# serial = RedHat Linux box, g++4, no MPI, no FFTs +# hip = MPI with HIP(clang) SHELL = /bin/sh @@ -6,14 +6,15 @@ SHELL = /bin/sh # compiler/linker settings # specify flags and libraries needed for your compiler -CC = g++ -CCFLAGS = -O +CC = mpicxx +CCFLAGS = -g -O3 SHFLAGS = -fPIC DEPFLAGS = -M -LINK = g++ -LINKFLAGS = -O -LIB = +HIP_PATH ?= $(wildcard /opt/rocm/hip) +LINK = $(HIP_PATH)/bin/hipcc +LINKFLAGS = -g -O3 $(shell mpicxx --showme:link) +LIB = SIZE = size ARCHIVE = ar @@ -26,12 +27,12 @@ SHLIBFLAGS = -shared # if you change any -D setting, do full re-compile after "make clean" # LAMMPS ifdef settings -# see possible settings in Section 2.2 (step 4) of manual +# see possible settings in Section 3.5 of the manual -LMP_INC = -DLAMMPS_GZIP +LMP_INC = -DLAMMPS_GZIP -DLAMMPS_MEMALIGN=64 # MPI library -# see discussion in Section 2.2 (step 5) of manual +# see discussion in Section 3.4 of the manual # MPI wrapper compiler/linker can provide this info # can point to dummy MPI library in src/STUBS as in Makefile.serial # use -D MPICH and OMPI settings in INC to avoid C++ lib conflicts @@ -39,31 +40,31 @@ LMP_INC = -DLAMMPS_GZIP # PATH = path for MPI library # LIB = name of MPI library -MPI_INC = -I../STUBS -MPI_PATH = -L../STUBS -MPI_LIB = -lmpi_stubs +MPI_INC = -DMPICH_SKIP_MPICXX -DOMPI_SKIP_MPICXX=1 +MPI_PATH = +MPI_LIB = # FFT library -# see discussion in Section 2.2 (step 6) of manaul +# see discussion in Section 3.5.2 of manual # can be left blank to use provided KISS FFT library # INC = -DFFT setting, e.g. -DFFT_FFTW, FFT compiler settings # PATH = path for FFT library # LIB = name of FFT library FFT_INC = -FFT_PATH = +FFT_PATH = FFT_LIB = # JPEG and/or PNG library -# see discussion in Section 2.2 (step 7) of manual +# see discussion in Section 3.5.4 of manual # only needed if -DLAMMPS_JPEG or -DLAMMPS_PNG listed with LMP_INC # INC = path(s) for jpeglib.h and/or png.h # PATH = path(s) for JPEG library and/or PNG library # LIB = name(s) of JPEG library and/or PNG library -JPG_INC = -JPG_PATH = -JPG_LIB = +JPG_INC = +JPG_PATH = +JPG_LIB = # --------------------------------------------------------------------- # build rules and dependencies @@ -72,6 +73,11 @@ JPG_LIB = include Makefile.package.settings include Makefile.package +ifeq (nvcc,${HIP_PLATFORM}) + # fix nvcc can't handle -pthread flag + LINKFLAGS := $(subst -pthread,-Xcompiler -pthread,$(LINKFLAGS)) +endif + EXTRA_INC = $(LMP_INC) $(PKG_INC) $(MPI_INC) $(FFT_INC) $(JPG_INC) $(PKG_SYSINC) EXTRA_PATH = $(PKG_PATH) $(MPI_PATH) $(FFT_PATH) $(JPG_PATH) $(PKG_SYSPATH) EXTRA_LIB = $(PKG_LIB) $(MPI_LIB) $(FFT_LIB) $(JPG_LIB) $(PKG_SYSLIB) @@ -85,28 +91,27 @@ vpath %.h .. # Link target -$(EXE): $(OBJ) $(EXTRA_LINK_DEPENDS) - $(LINK) $(LINKFLAGS) $(EXTRA_PATH) $(OBJ) $(EXTRA_LIB) $(LIB) -o $(EXE) - $(SIZE) $(EXE) +$(EXE): main.o $(LMPLIB) $(EXTRA_LINK_DEPENDS) + $(LINK) $(LINKFLAGS) main.o $(EXTRA_PATH) $(LMPLINK) $(EXTRA_LIB) $(LIB) -o $@ + $(SIZE) $@ # Library targets -lib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(ARCHIVE) $(ARFLAGS) $(EXE) $(OBJ) +$(ARLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + @rm -f ../$(ARLIB) + $(ARCHIVE) $(ARFLAGS) ../$(ARLIB) $(OBJ) + @rm -f $(ARLIB) + @ln -s ../$(ARLIB) $(ARLIB) -shlib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o $(EXE) \ - $(OBJ) $(EXTRA_LIB) $(LIB) +$(SHLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o ../$(SHLIB) \ + $(OBJ) $(EXTRA_LIB) $(LIB) + @rm -f $(SHLIB) + @ln -s ../$(SHLIB) $(SHLIB) # Compilation rules -%.o:%.cpp $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< - -%.d:%.cpp $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(EXTRA_INC) $(DEPFLAGS) $< > $@ - -%.o:%.cu $(EXTRA_CPP_DEPENDS) +%.o:%.cpp $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< # Individual dependencies diff --git a/src/MAKE/OPTIONS/Makefile.icc_mpich b/src/MAKE/OPTIONS/Makefile.icc_mpich index e59066562a58eb1bb7103105b68fef664b06817b..cf76506da5edbf0076782b0e6228e36095801dcf 100644 --- a/src/MAKE/OPTIONS/Makefile.icc_mpich +++ b/src/MAKE/OPTIONS/Makefile.icc_mpich @@ -26,12 +26,12 @@ SHLIBFLAGS = -shared # if you change any -D setting, do full re-compile after "make clean" # LAMMPS ifdef settings -# see possible settings in Section 2.2 (step 4) of manual +# see possible settings in Section 3.5 of the manual LMP_INC = -DLAMMPS_GZIP # MPI library -# see discussion in Section 2.2 (step 5) of manual +# see discussion in Section 3.4 of the manual # MPI wrapper compiler/linker can provide this info # can point to dummy MPI library in src/STUBS as in Makefile.serial # use -D MPICH and OMPI settings in INC to avoid C++ lib conflicts @@ -40,37 +40,37 @@ LMP_INC = -DLAMMPS_GZIP # LIB = name of MPI library MPI_INC = -DMPICH_SKIP_MPICXX -DOMPI_SKIP_MPICXX=1 -MPI_PATH = -MPI_LIB = +MPI_PATH = +MPI_LIB = # FFT library -# see discussion in Section 2.2 (step 6) of manaul +# see discussion in Section 3.5.2 of manual # can be left blank to use provided KISS FFT library # INC = -DFFT setting, e.g. -DFFT_FFTW, FFT compiler settings # PATH = path for FFT library # LIB = name of FFT library -FFT_INC = -FFT_PATH = -FFT_LIB = +FFT_INC = +FFT_PATH = +FFT_LIB = # JPEG and/or PNG library -# see discussion in Section 2.2 (step 7) of manual +# see discussion in Section 3.5.4 of manual # only needed if -DLAMMPS_JPEG or -DLAMMPS_PNG listed with LMP_INC # INC = path(s) for jpeglib.h and/or png.h # PATH = path(s) for JPEG library and/or PNG library # LIB = name(s) of JPEG library and/or PNG library -JPG_INC = -JPG_PATH = -JPG_LIB = +JPG_INC = +JPG_PATH = +JPG_LIB = # --------------------------------------------------------------------- # build rules and dependencies # do not edit this section -include Makefile.package.settings -include Makefile.package +include Makefile.package.settings +include Makefile.package EXTRA_INC = $(LMP_INC) $(PKG_INC) $(MPI_INC) $(FFT_INC) $(JPG_INC) $(PKG_SYSINC) EXTRA_PATH = $(PKG_PATH) $(MPI_PATH) $(FFT_PATH) $(JPG_PATH) $(PKG_SYSPATH) @@ -85,28 +85,27 @@ vpath %.h .. # Link target -$(EXE): $(OBJ) $(EXTRA_LINK_DEPENDS) - $(LINK) $(LINKFLAGS) $(EXTRA_PATH) $(OBJ) $(EXTRA_LIB) $(LIB) -o $(EXE) - $(SIZE) $(EXE) +$(EXE): main.o $(LMPLIB) $(EXTRA_LINK_DEPENDS) + $(LINK) $(LINKFLAGS) main.o $(EXTRA_PATH) $(LMPLINK) $(EXTRA_LIB) $(LIB) -o $@ + $(SIZE) $@ # Library targets -lib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(ARCHIVE) $(ARFLAGS) $(EXE) $(OBJ) +$(ARLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + @rm -f ../$(ARLIB) + $(ARCHIVE) $(ARFLAGS) ../$(ARLIB) $(OBJ) + @rm -f $(ARLIB) + @ln -s ../$(ARLIB) $(ARLIB) -shlib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o $(EXE) \ - $(OBJ) $(EXTRA_LIB) $(LIB) +$(SHLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o ../$(SHLIB) \ + $(OBJ) $(EXTRA_LIB) $(LIB) + @rm -f $(SHLIB) + @ln -s ../$(SHLIB) $(SHLIB) # Compilation rules -%.o:%.cpp $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< - -%.d:%.cpp $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(EXTRA_INC) $(DEPFLAGS) $< > $@ - -%.o:%.cu $(EXTRA_CPP_DEPENDS) +%.o:%.cpp $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< # Individual dependencies diff --git a/src/MAKE/OPTIONS/Makefile.icc_mpich_link b/src/MAKE/OPTIONS/Makefile.icc_mpich_link index 0e9e530f88f1189aed44723134e09319c1a40190..3994968430c298d7f8c728eeed9c7cc48ff2e0a0 100644 --- a/src/MAKE/OPTIONS/Makefile.icc_mpich_link +++ b/src/MAKE/OPTIONS/Makefile.icc_mpich_link @@ -26,12 +26,12 @@ SHLIBFLAGS = -shared # if you change any -D setting, do full re-compile after "make clean" # LAMMPS ifdef settings -# see possible settings in Section 2.2 (step 4) of manual +# see possible settings in Section 3.5 of the manual LMP_INC = -DLAMMPS_GZIP # MPI library -# see discussion in Section 2.2 (step 5) of manual +# see discussion in Section 3.4 of the manual # MPI wrapper compiler/linker can provide this info # can point to dummy MPI library in src/STUBS as in Makefile.serial # use -D MPICH and OMPI settings in INC to avoid C++ lib conflicts @@ -44,33 +44,33 @@ MPI_PATH = -L/usr/local/lib MPI_LIB = -lmpich -lmpl -lpthread # FFT library -# see discussion in Section 2.2 (step 6) of manaul +# see discussion in Section 3.5.2 of manual # can be left blank to use provided KISS FFT library # INC = -DFFT setting, e.g. -DFFT_FFTW, FFT compiler settings # PATH = path for FFT library # LIB = name of FFT library -FFT_INC = -FFT_PATH = -FFT_LIB = +FFT_INC = +FFT_PATH = +FFT_LIB = # JPEG and/or PNG library -# see discussion in Section 2.2 (step 7) of manual +# see discussion in Section 3.5.4 of manual # only needed if -DLAMMPS_JPEG or -DLAMMPS_PNG listed with LMP_INC # INC = path(s) for jpeglib.h and/or png.h # PATH = path(s) for JPEG library and/or PNG library # LIB = name(s) of JPEG library and/or PNG library -JPG_INC = -JPG_PATH = -JPG_LIB = +JPG_INC = +JPG_PATH = +JPG_LIB = # --------------------------------------------------------------------- # build rules and dependencies # do not edit this section -include Makefile.package.settings -include Makefile.package +include Makefile.package.settings +include Makefile.package EXTRA_INC = $(LMP_INC) $(PKG_INC) $(MPI_INC) $(FFT_INC) $(JPG_INC) $(PKG_SYSINC) EXTRA_PATH = $(PKG_PATH) $(MPI_PATH) $(FFT_PATH) $(JPG_PATH) $(PKG_SYSPATH) @@ -85,28 +85,27 @@ vpath %.h .. # Link target -$(EXE): $(OBJ) $(EXTRA_LINK_DEPENDS) - $(LINK) $(LINKFLAGS) $(EXTRA_PATH) $(OBJ) $(EXTRA_LIB) $(LIB) -o $(EXE) - $(SIZE) $(EXE) +$(EXE): main.o $(LMPLIB) $(EXTRA_LINK_DEPENDS) + $(LINK) $(LINKFLAGS) main.o $(EXTRA_PATH) $(LMPLINK) $(EXTRA_LIB) $(LIB) -o $@ + $(SIZE) $@ # Library targets -lib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(ARCHIVE) $(ARFLAGS) $(EXE) $(OBJ) +$(ARLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + @rm -f ../$(ARLIB) + $(ARCHIVE) $(ARFLAGS) ../$(ARLIB) $(OBJ) + @rm -f $(ARLIB) + @ln -s ../$(ARLIB) $(ARLIB) -shlib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o $(EXE) \ - $(OBJ) $(EXTRA_LIB) $(LIB) +$(SHLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o ../$(SHLIB) \ + $(OBJ) $(EXTRA_LIB) $(LIB) + @rm -f $(SHLIB) + @ln -s ../$(SHLIB) $(SHLIB) # Compilation rules -%.o:%.cpp $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< - -%.d:%.cpp $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(EXTRA_INC) $(DEPFLAGS) $< > $@ - -%.o:%.cu $(EXTRA_CPP_DEPENDS) +%.o:%.cpp $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< # Individual dependencies diff --git a/src/MAKE/OPTIONS/Makefile.icc_openmpi b/src/MAKE/OPTIONS/Makefile.icc_openmpi index 19a917e9287f11e88ef28d05e8e6357ea9994082..72e3d4409392571a63ff54c979c00cb871b5e15b 100644 --- a/src/MAKE/OPTIONS/Makefile.icc_openmpi +++ b/src/MAKE/OPTIONS/Makefile.icc_openmpi @@ -27,12 +27,12 @@ SHLIBFLAGS = -shared # if you change any -D setting, do full re-compile after "make clean" # LAMMPS ifdef settings -# see possible settings in Section 2.2 (step 4) of manual +# see possible settings in Section 3.5 of the manual LMP_INC = -DLAMMPS_GZIP # MPI library -# see discussion in Section 2.2 (step 5) of manual +# see discussion in Section 3.4 of the manual # MPI wrapper compiler/linker can provide this info # can point to dummy MPI library in src/STUBS as in Makefile.serial # use -D MPICH and OMPI settings in INC to avoid C++ lib conflicts @@ -41,37 +41,37 @@ LMP_INC = -DLAMMPS_GZIP # LIB = name of MPI library MPI_INC = -DMPICH_SKIP_MPICXX -DOMPI_SKIP_MPICXX=1 -MPI_PATH = -MPI_LIB = +MPI_PATH = +MPI_LIB = # FFT library -# see discussion in Section 2.2 (step 6) of manaul +# see discussion in Section 3.5.2 of manual # can be left blank to use provided KISS FFT library # INC = -DFFT setting, e.g. -DFFT_FFTW, FFT compiler settings # PATH = path for FFT library # LIB = name of FFT library -FFT_INC = -FFT_PATH = -FFT_LIB = +FFT_INC = +FFT_PATH = +FFT_LIB = # JPEG and/or PNG library -# see discussion in Section 2.2 (step 7) of manual +# see discussion in Section 3.5.4 of manual # only needed if -DLAMMPS_JPEG or -DLAMMPS_PNG listed with LMP_INC # INC = path(s) for jpeglib.h and/or png.h # PATH = path(s) for JPEG library and/or PNG library # LIB = name(s) of JPEG library and/or PNG library -JPG_INC = -JPG_PATH = -JPG_LIB = +JPG_INC = +JPG_PATH = +JPG_LIB = # --------------------------------------------------------------------- # build rules and dependencies # do not edit this section -include Makefile.package.settings -include Makefile.package +include Makefile.package.settings +include Makefile.package EXTRA_INC = $(LMP_INC) $(PKG_INC) $(MPI_INC) $(FFT_INC) $(JPG_INC) $(PKG_SYSINC) EXTRA_PATH = $(PKG_PATH) $(MPI_PATH) $(FFT_PATH) $(JPG_PATH) $(PKG_SYSPATH) @@ -86,28 +86,27 @@ vpath %.h .. # Link target -$(EXE): $(OBJ) $(EXTRA_LINK_DEPENDS) - $(LINK) $(LINKFLAGS) $(EXTRA_PATH) $(OBJ) $(EXTRA_LIB) $(LIB) -o $(EXE) - $(SIZE) $(EXE) +$(EXE): main.o $(LMPLIB) $(EXTRA_LINK_DEPENDS) + $(LINK) $(LINKFLAGS) main.o $(EXTRA_PATH) $(LMPLINK) $(EXTRA_LIB) $(LIB) -o $@ + $(SIZE) $@ # Library targets -lib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(ARCHIVE) $(ARFLAGS) $(EXE) $(OBJ) +$(ARLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + @rm -f ../$(ARLIB) + $(ARCHIVE) $(ARFLAGS) ../$(ARLIB) $(OBJ) + @rm -f $(ARLIB) + @ln -s ../$(ARLIB) $(ARLIB) -shlib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o $(EXE) \ - $(OBJ) $(EXTRA_LIB) $(LIB) +$(SHLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o ../$(SHLIB) \ + $(OBJ) $(EXTRA_LIB) $(LIB) + @rm -f $(SHLIB) + @ln -s ../$(SHLIB) $(SHLIB) # Compilation rules -%.o:%.cpp $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< - -%.d:%.cpp $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(EXTRA_INC) $(DEPFLAGS) $< > $@ - -%.o:%.cu $(EXTRA_CPP_DEPENDS) +%.o:%.cpp $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< # Individual dependencies diff --git a/src/MAKE/OPTIONS/Makefile.icc_openmpi_link b/src/MAKE/OPTIONS/Makefile.icc_openmpi_link index 5e991c6b90da2810c899d74682d126ac78a86cd8..e44486aeb501cdcf5957e60864f80765b1ece0d6 100644 --- a/src/MAKE/OPTIONS/Makefile.icc_openmpi_link +++ b/src/MAKE/OPTIONS/Makefile.icc_openmpi_link @@ -26,12 +26,12 @@ SHLIBFLAGS = -shared # if you change any -D setting, do full re-compile after "make clean" # LAMMPS ifdef settings -# see possible settings in Section 2.2 (step 4) of manual +# see possible settings in Section 3.5 of the manual LMP_INC = -DLAMMPS_GZIP # MPI library -# see discussion in Section 2.2 (step 5) of manual +# see discussion in Section 3.4 of the manual # MPI wrapper compiler/linker can provide this info # can point to dummy MPI library in src/STUBS as in Makefile.serial # use -D MPICH and OMPI settings in INC to avoid C++ lib conflicts @@ -44,33 +44,33 @@ MPI_PATH = -L/usr/local/lib MPI_LIB = -lmpi -lmpi_cxx # FFT library -# see discussion in Section 2.2 (step 6) of manaul +# see discussion in Section 3.5.2 of manual # can be left blank to use provided KISS FFT library # INC = -DFFT setting, e.g. -DFFT_FFTW, FFT compiler settings # PATH = path for FFT library # LIB = name of FFT library -FFT_INC = -FFT_PATH = -FFT_LIB = +FFT_INC = +FFT_PATH = +FFT_LIB = # JPEG and/or PNG library -# see discussion in Section 2.2 (step 7) of manual +# see discussion in Section 3.5.4 of manual # only needed if -DLAMMPS_JPEG or -DLAMMPS_PNG listed with LMP_INC # INC = path(s) for jpeglib.h and/or png.h # PATH = path(s) for JPEG library and/or PNG library # LIB = name(s) of JPEG library and/or PNG library -JPG_INC = -JPG_PATH = -JPG_LIB = +JPG_INC = +JPG_PATH = +JPG_LIB = # --------------------------------------------------------------------- # build rules and dependencies # do not edit this section -include Makefile.package.settings -include Makefile.package +include Makefile.package.settings +include Makefile.package EXTRA_INC = $(LMP_INC) $(PKG_INC) $(MPI_INC) $(FFT_INC) $(JPG_INC) $(PKG_SYSINC) EXTRA_PATH = $(PKG_PATH) $(MPI_PATH) $(FFT_PATH) $(JPG_PATH) $(PKG_SYSPATH) @@ -85,28 +85,27 @@ vpath %.h .. # Link target -$(EXE): $(OBJ) $(EXTRA_LINK_DEPENDS) - $(LINK) $(LINKFLAGS) $(EXTRA_PATH) $(OBJ) $(EXTRA_LIB) $(LIB) -o $(EXE) - $(SIZE) $(EXE) +$(EXE): main.o $(LMPLIB) $(EXTRA_LINK_DEPENDS) + $(LINK) $(LINKFLAGS) main.o $(EXTRA_PATH) $(LMPLINK) $(EXTRA_LIB) $(LIB) -o $@ + $(SIZE) $@ # Library targets -lib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(ARCHIVE) $(ARFLAGS) $(EXE) $(OBJ) +$(ARLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + @rm -f ../$(ARLIB) + $(ARCHIVE) $(ARFLAGS) ../$(ARLIB) $(OBJ) + @rm -f $(ARLIB) + @ln -s ../$(ARLIB) $(ARLIB) -shlib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o $(EXE) \ - $(OBJ) $(EXTRA_LIB) $(LIB) +$(SHLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o ../$(SHLIB) \ + $(OBJ) $(EXTRA_LIB) $(LIB) + @rm -f $(SHLIB) + @ln -s ../$(SHLIB) $(SHLIB) # Compilation rules -%.o:%.cpp $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< - -%.d:%.cpp $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(EXTRA_INC) $(DEPFLAGS) $< > $@ - -%.o:%.cu $(EXTRA_CPP_DEPENDS) +%.o:%.cpp $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< # Individual dependencies diff --git a/src/MAKE/OPTIONS/Makefile.icc_serial b/src/MAKE/OPTIONS/Makefile.icc_serial index 34bf091932d36fd35defa6535b568bfe1c3841f7..a81c73c718de7e66b9c08725cc931587a059ec9a 100644 --- a/src/MAKE/OPTIONS/Makefile.icc_serial +++ b/src/MAKE/OPTIONS/Makefile.icc_serial @@ -26,12 +26,12 @@ SHLIBFLAGS = -shared # if you change any -D setting, do full re-compile after "make clean" # LAMMPS ifdef settings -# see possible settings in Section 2.2 (step 4) of manual +# see possible settings in Section 3.5 of the manual LMP_INC = -DLAMMPS_GZIP # MPI library -# see discussion in Section 2.2 (step 5) of manual +# see discussion in Section 3.4 of the manual # MPI wrapper compiler/linker can provide this info # can point to dummy MPI library in src/STUBS as in Makefile.serial # use -D MPICH and OMPI settings in INC to avoid C++ lib conflicts @@ -44,33 +44,33 @@ MPI_PATH = -L../STUBS MPI_LIB = -lmpi_stubs # FFT library -# see discussion in Section 2.2 (step 6) of manaul +# see discussion in Section 3.5.2 of manual # can be left blank to use provided KISS FFT library # INC = -DFFT setting, e.g. -DFFT_FFTW, FFT compiler settings # PATH = path for FFT library # LIB = name of FFT library -FFT_INC = -FFT_PATH = -FFT_LIB = +FFT_INC = +FFT_PATH = +FFT_LIB = # JPEG and/or PNG library -# see discussion in Section 2.2 (step 7) of manual +# see discussion in Section 3.5.4 of manual # only needed if -DLAMMPS_JPEG or -DLAMMPS_PNG listed with LMP_INC # INC = path(s) for jpeglib.h and/or png.h # PATH = path(s) for JPEG library and/or PNG library # LIB = name(s) of JPEG library and/or PNG library -JPG_INC = -JPG_PATH = -JPG_LIB = +JPG_INC = +JPG_PATH = +JPG_LIB = # --------------------------------------------------------------------- # build rules and dependencies # do not edit this section -include Makefile.package.settings -include Makefile.package +include Makefile.package.settings +include Makefile.package EXTRA_INC = $(LMP_INC) $(PKG_INC) $(MPI_INC) $(FFT_INC) $(JPG_INC) $(PKG_SYSINC) EXTRA_PATH = $(PKG_PATH) $(MPI_PATH) $(FFT_PATH) $(JPG_PATH) $(PKG_SYSPATH) @@ -85,28 +85,27 @@ vpath %.h .. # Link target -$(EXE): $(OBJ) $(EXTRA_LINK_DEPENDS) - $(LINK) $(LINKFLAGS) $(EXTRA_PATH) $(OBJ) $(EXTRA_LIB) $(LIB) -o $(EXE) - $(SIZE) $(EXE) +$(EXE): main.o $(LMPLIB) $(EXTRA_LINK_DEPENDS) + $(LINK) $(LINKFLAGS) main.o $(EXTRA_PATH) $(LMPLINK) $(EXTRA_LIB) $(LIB) -o $@ + $(SIZE) $@ # Library targets -lib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(ARCHIVE) $(ARFLAGS) $(EXE) $(OBJ) +$(ARLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + @rm -f ../$(ARLIB) + $(ARCHIVE) $(ARFLAGS) ../$(ARLIB) $(OBJ) + @rm -f $(ARLIB) + @ln -s ../$(ARLIB) $(ARLIB) -shlib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o $(EXE) \ - $(OBJ) $(EXTRA_LIB) $(LIB) +$(SHLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o ../$(SHLIB) \ + $(OBJ) $(EXTRA_LIB) $(LIB) + @rm -f $(SHLIB) + @ln -s ../$(SHLIB) $(SHLIB) # Compilation rules -%.o:%.cpp $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< - -%.d:%.cpp $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(EXTRA_INC) $(DEPFLAGS) $< > $@ - -%.o:%.cu $(EXTRA_CPP_DEPENDS) +%.o:%.cpp $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< # Individual dependencies diff --git a/src/MAKE/OPTIONS/Makefile.intel_coprocessor b/src/MAKE/OPTIONS/Makefile.intel_coprocessor index 44f5c99f709a2bf83ce2704012f0dd6ca66ef18f..b11256baa1bbcce9538c150f21b1b28fd5de53c4 100644 --- a/src/MAKE/OPTIONS/Makefile.intel_coprocessor +++ b/src/MAKE/OPTIONS/Makefile.intel_coprocessor @@ -1,4 +1,4 @@ -# intel_phi = USER-INTEL package with Phi offload support, Intel MPI, MKL FFT +# intel_coprocessor = USER-INTEL package with Phi offload support, Intel MPI, MKL FFT SHELL = /bin/sh @@ -8,15 +8,17 @@ SHELL = /bin/sh CC = mpiicpc -std=c++11 MIC_OPT = -qoffload-option,mic,compiler,"-fp-model fast=2 -mGLOB_default_function_attrs=\"gather_scatter_loop_unroll=4\"" -CCFLAGS = -g -O3 -qopenmp -DLMP_INTEL_OFFLOAD -DLAMMPS_MEMALIGN=64 \ - -xHost -fno-alias -ansi-alias -restrict -DLMP_INTEL_USELRT \ - -qoverride-limits $(MIC_OPT) -DLMP_USE_MKL_RNG +OPTFLAGS = -xHost -O2 -fp-model fast=2 -no-prec-div -qoverride-limits \ + -qopt-zmm-usage=high $(MIC_OPT) +CCFLAGS = -qopenmp -qoffload -ansi-alias -restrict \ + -DLMP_INTEL_USELRT -DLMP_USE_MKL_RNG -DLMP_INTEL_OFFLOAD \ + $(OPTFLAGS) -I$(MKLROOT)/include SHFLAGS = -fPIC DEPFLAGS = -M LINK = mpiicpc -std=c++11 -LINKFLAGS = -g -O3 -xHost -qopenmp -qoffload -LIB = -ltbbmalloc +LINKFLAGS = -O2 -xHost -qopenmp -qoffload -L$(MKLROOT)/lib/intel64/ +LIB = -ltbbmalloc -lmkl_intel_ilp64 -lmkl_sequential -lmkl_core SIZE = size ARCHIVE = ar @@ -29,12 +31,12 @@ SHLIBFLAGS = -shared # if you change any -D setting, do full re-compile after "make clean" # LAMMPS ifdef settings -# see possible settings in Section 2.2 (step 4) of manual +# see possible settings in Section 3.5 of the manual -LMP_INC = -DLAMMPS_GZIP -DLAMMPS_JPEG +LMP_INC = -DLAMMPS_GZIP # MPI library -# see discussion in Section 2.2 (step 5) of manual +# see discussion in Section 3.4 of the manual # MPI wrapper compiler/linker can provide this info # can point to dummy MPI library in src/STUBS as in Makefile.serial # use -D MPICH and OMPI settings in INC to avoid C++ lib conflicts @@ -43,11 +45,11 @@ LMP_INC = -DLAMMPS_GZIP -DLAMMPS_JPEG # LIB = name of MPI library MPI_INC = -DMPICH_SKIP_MPICXX -DOMPI_SKIP_MPICXX=1 -MPI_PATH = +MPI_PATH = MPI_LIB = # FFT library -# see discussion in Section 2.2 (step 6) of manaul +# see discussion in Section 3.5.2 of manual # can be left blank to use provided KISS FFT library # INC = -DFFT setting, e.g. -DFFT_FFTW, FFT compiler settings # PATH = path for FFT library @@ -55,10 +57,10 @@ MPI_LIB = FFT_INC = -DFFT_MKL -DFFT_SINGLE FFT_PATH = -FFT_LIB = -L$(MKLROOT)/lib/intel64/ -lmkl_intel_ilp64 -lmkl_sequential -lmkl_core +FFT_LIB = # JPEG and/or PNG library -# see discussion in Section 2.2 (step 7) of manual +# see discussion in Section 3.5.4 of manual # only needed if -DLAMMPS_JPEG or -DLAMMPS_PNG listed with LMP_INC # INC = path(s) for jpeglib.h and/or png.h # PATH = path(s) for JPEG library and/or PNG library @@ -66,14 +68,14 @@ FFT_LIB = -L$(MKLROOT)/lib/intel64/ -lmkl_intel_ilp64 -lmkl_sequential -lmkl_cor JPG_INC = JPG_PATH = -JPG_LIB = -ljpeg +JPG_LIB = # --------------------------------------------------------------------- # build rules and dependencies # do not edit this section -include Makefile.package.settings -include Makefile.package +include Makefile.package.settings +include Makefile.package EXTRA_INC = $(LMP_INC) $(PKG_INC) $(MPI_INC) $(FFT_INC) $(JPG_INC) $(PKG_SYSINC) EXTRA_PATH = $(PKG_PATH) $(MPI_PATH) $(FFT_PATH) $(JPG_PATH) $(PKG_SYSPATH) @@ -88,28 +90,27 @@ vpath %.h .. # Link target -$(EXE): $(OBJ) $(EXTRA_LINK_DEPENDS) - $(LINK) $(LINKFLAGS) $(EXTRA_PATH) $(OBJ) $(EXTRA_LIB) $(LIB) -o $(EXE) - $(SIZE) $(EXE) +$(EXE): main.o $(LMPLIB) $(EXTRA_LINK_DEPENDS) + $(LINK) $(LINKFLAGS) main.o $(EXTRA_PATH) $(LMPLINK) $(EXTRA_LIB) $(LIB) -o $@ + $(SIZE) $@ # Library targets -lib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(ARCHIVE) $(ARFLAGS) $(EXE) $(OBJ) +$(ARLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + @rm -f ../$(ARLIB) + $(ARCHIVE) $(ARFLAGS) ../$(ARLIB) $(OBJ) + @rm -f $(ARLIB) + @ln -s ../$(ARLIB) $(ARLIB) -shlib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o $(EXE) \ - $(OBJ) $(EXTRA_LIB) $(LIB) +$(SHLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o ../$(SHLIB) \ + $(OBJ) $(EXTRA_LIB) $(LIB) + @rm -f $(SHLIB) + @ln -s ../$(SHLIB) $(SHLIB) # Compilation rules -%.o:%.cpp $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< - -%.d:%.cpp $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(EXTRA_INC) $(DEPFLAGS) $< > $@ - -%.o:%.cu $(EXTRA_CPP_DEPENDS) +%.o:%.cpp $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< # Individual dependencies diff --git a/src/MAKE/OPTIONS/Makefile.intel_cpu b/src/MAKE/OPTIONS/Makefile.intel_cpu deleted file mode 100644 index f52b4f30292e7350f309e5a0ae11bd7ac624bdb7..0000000000000000000000000000000000000000 --- a/src/MAKE/OPTIONS/Makefile.intel_cpu +++ /dev/null @@ -1,124 +0,0 @@ -# intel_cpu_intelmpi = USER-INTEL package, Intel MPI, MKL FFT - -SHELL = /bin/sh - -# --------------------------------------------------------------------- -# compiler/linker settings -# specify flags and libraries needed for your compiler - -CC = mpiicpc -std=c++11 -OPTFLAGS = -xHost -O2 -fp-model fast=2 -no-prec-div -qoverride-limits \ - -qopt-zmm-usage=high -CCFLAGS = -qopenmp -qno-offload -ansi-alias -restrict \ - -DLMP_INTEL_USELRT -DLMP_USE_MKL_RNG $(OPTFLAGS) \ - -I$(MKLROOT)/include -SHFLAGS = -fPIC -DEPFLAGS = -M - -LINK = mpiicpc -std=c++11 -LINKFLAGS = -qopenmp $(OPTFLAGS) -L$(MKLROOT)/lib/intel64/ -LIB = -ltbbmalloc -lmkl_intel_ilp64 -lmkl_sequential -lmkl_core -SIZE = size - -ARCHIVE = ar -ARFLAGS = -rc -SHLIBFLAGS = -shared - -# --------------------------------------------------------------------- -# LAMMPS-specific settings, all OPTIONAL -# specify settings for LAMMPS features you will use -# if you change any -D setting, do full re-compile after "make clean" - -# LAMMPS ifdef settings -# see possible settings in Section 2.2 (step 4) of manual - -LMP_INC = -DLAMMPS_GZIP -DLAMMPS_JPEG - -# MPI library -# see discussion in Section 2.2 (step 5) of manual -# MPI wrapper compiler/linker can provide this info -# can point to dummy MPI library in src/STUBS as in Makefile.serial -# use -D MPICH and OMPI settings in INC to avoid C++ lib conflicts -# INC = path for mpi.h, MPI compiler settings -# PATH = path for MPI library -# LIB = name of MPI library - -MPI_INC = -DMPICH_SKIP_MPICXX -DOMPI_SKIP_MPICXX=1 -MPI_PATH = -MPI_LIB = - -# FFT library -# see discussion in Section 2.2 (step 6) of manaul -# can be left blank to use provided KISS FFT library -# INC = -DFFT setting, e.g. -DFFT_FFTW, FFT compiler settings -# PATH = path for FFT library -# LIB = name of FFT library - -FFT_INC = -DFFT_MKL -DFFT_SINGLE -FFT_PATH = -FFT_LIB = - -# JPEG and/or PNG library -# see discussion in Section 2.2 (step 7) of manual -# only needed if -DLAMMPS_JPEG or -DLAMMPS_PNG listed with LMP_INC -# INC = path(s) for jpeglib.h and/or png.h -# PATH = path(s) for JPEG library and/or PNG library -# LIB = name(s) of JPEG library and/or PNG library - -JPG_INC = -JPG_PATH = -JPG_LIB = -ljpeg - -# --------------------------------------------------------------------- -# build rules and dependencies -# do not edit this section - -include Makefile.package.settings -include Makefile.package - -EXTRA_INC = $(LMP_INC) $(PKG_INC) $(MPI_INC) $(FFT_INC) $(JPG_INC) $(PKG_SYSINC) -EXTRA_PATH = $(PKG_PATH) $(MPI_PATH) $(FFT_PATH) $(JPG_PATH) $(PKG_SYSPATH) -EXTRA_LIB = $(PKG_LIB) $(MPI_LIB) $(FFT_LIB) $(JPG_LIB) $(PKG_SYSLIB) -EXTRA_CPP_DEPENDS = $(PKG_CPP_DEPENDS) -EXTRA_LINK_DEPENDS = $(PKG_LINK_DEPENDS) - -# Path to src files - -vpath %.cpp .. -vpath %.h .. - -# Link target - -$(EXE): $(OBJ) $(EXTRA_LINK_DEPENDS) - $(LINK) $(LINKFLAGS) $(EXTRA_PATH) $(OBJ) $(EXTRA_LIB) $(LIB) -o $(EXE) - $(SIZE) $(EXE) - -# Library targets - -lib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(ARCHIVE) $(ARFLAGS) $(EXE) $(OBJ) - -shlib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o $(EXE) \ - $(OBJ) $(EXTRA_LIB) $(LIB) - -# Compilation rules - -%.o:%.cpp $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< - -%.d:%.cpp $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(EXTRA_INC) $(DEPFLAGS) $< > $@ - -%.o:%.cu $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< - -# Individual dependencies - -depend : fastdep.exe $(SRC) - @./fastdep.exe $(EXTRA_INC) -- $^ > .depend || exit 1 - -fastdep.exe: ../DEPEND/fastdep.c - cc -O -o $@ $< - -sinclude .depend diff --git a/src/MAKE/OPTIONS/Makefile.intel_cpu_intelmpi b/src/MAKE/OPTIONS/Makefile.intel_cpu_intelmpi index 07d720a5920e2e130ed22978e019b22c6692f7c7..4adc427d91cc6f61dd50636d4881714d6eec2101 100644 --- a/src/MAKE/OPTIONS/Makefile.intel_cpu_intelmpi +++ b/src/MAKE/OPTIONS/Makefile.intel_cpu_intelmpi @@ -30,12 +30,12 @@ SHLIBFLAGS = -shared # if you change any -D setting, do full re-compile after "make clean" # LAMMPS ifdef settings -# see possible settings in Section 2.2 (step 4) of manual +# see possible settings in Section 3.5 of the manual LMP_INC = -DLAMMPS_GZIP # MPI library -# see discussion in Section 2.2 (step 5) of manual +# see discussion in Section 3.4 of the manual # MPI wrapper compiler/linker can provide this info # can point to dummy MPI library in src/STUBS as in Makefile.serial # use -D MPICH and OMPI settings in INC to avoid C++ lib conflicts @@ -48,7 +48,7 @@ MPI_PATH = MPI_LIB = # FFT library -# see discussion in Section 2.2 (step 6) of manaul +# see discussion in Section 3.5.2 of manual # can be left blank to use provided KISS FFT library # INC = -DFFT setting, e.g. -DFFT_FFTW, FFT compiler settings # PATH = path for FFT library @@ -59,22 +59,22 @@ FFT_PATH = FFT_LIB = # JPEG and/or PNG library -# see discussion in Section 2.2 (step 7) of manual +# see discussion in Section 3.5.4 of manual # only needed if -DLAMMPS_JPEG or -DLAMMPS_PNG listed with LMP_INC # INC = path(s) for jpeglib.h and/or png.h # PATH = path(s) for JPEG library and/or PNG library # LIB = name(s) of JPEG library and/or PNG library -JPG_INC = -JPG_PATH = -JPG_LIB = +JPG_INC = +JPG_PATH = +JPG_LIB = # --------------------------------------------------------------------- # build rules and dependencies # do not edit this section -include Makefile.package.settings -include Makefile.package +include Makefile.package.settings +include Makefile.package EXTRA_INC = $(LMP_INC) $(PKG_INC) $(MPI_INC) $(FFT_INC) $(JPG_INC) $(PKG_SYSINC) EXTRA_PATH = $(PKG_PATH) $(MPI_PATH) $(FFT_PATH) $(JPG_PATH) $(PKG_SYSPATH) @@ -89,28 +89,27 @@ vpath %.h .. # Link target -$(EXE): $(OBJ) $(EXTRA_LINK_DEPENDS) - $(LINK) $(LINKFLAGS) $(EXTRA_PATH) $(OBJ) $(EXTRA_LIB) $(LIB) -o $(EXE) - $(SIZE) $(EXE) +$(EXE): main.o $(LMPLIB) $(EXTRA_LINK_DEPENDS) + $(LINK) $(LINKFLAGS) main.o $(EXTRA_PATH) $(LMPLINK) $(EXTRA_LIB) $(LIB) -o $@ + $(SIZE) $@ # Library targets -lib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(ARCHIVE) $(ARFLAGS) $(EXE) $(OBJ) +$(ARLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + @rm -f ../$(ARLIB) + $(ARCHIVE) $(ARFLAGS) ../$(ARLIB) $(OBJ) + @rm -f $(ARLIB) + @ln -s ../$(ARLIB) $(ARLIB) -shlib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o $(EXE) \ - $(OBJ) $(EXTRA_LIB) $(LIB) +$(SHLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o ../$(SHLIB) \ + $(OBJ) $(EXTRA_LIB) $(LIB) + @rm -f $(SHLIB) + @ln -s ../$(SHLIB) $(SHLIB) # Compilation rules -%.o:%.cpp $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< - -%.d:%.cpp $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(EXTRA_INC) $(DEPFLAGS) $< > $@ - -%.o:%.cu $(EXTRA_CPP_DEPENDS) +%.o:%.cpp $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< # Individual dependencies diff --git a/src/MAKE/OPTIONS/Makefile.intel_cpu_mpich b/src/MAKE/OPTIONS/Makefile.intel_cpu_mpich index 51cf975e5c31de822544e0e8a2ae7a5a7d3da8ea..762899722ccd88d88257868ab946ef8b197590d8 100644 --- a/src/MAKE/OPTIONS/Makefile.intel_cpu_mpich +++ b/src/MAKE/OPTIONS/Makefile.intel_cpu_mpich @@ -30,12 +30,12 @@ SHLIBFLAGS = -shared # if you change any -D setting, do full re-compile after "make clean" # LAMMPS ifdef settings -# see possible settings in Section 2.2 (step 4) of manual +# see possible settings in Section 3.5 of the manual LMP_INC = -DLAMMPS_GZIP # MPI library -# see discussion in Section 2.2 (step 5) of manual +# see discussion in Section 3.4 of the manual # MPI wrapper compiler/linker can provide this info # can point to dummy MPI library in src/STUBS as in Makefile.serial # use -D MPICH and OMPI settings in INC to avoid C++ lib conflicts @@ -48,7 +48,7 @@ MPI_PATH = -L/usr/local/lib MPI_LIB = -lmpich -lmpl -lpthread # FFT library -# see discussion in Section 2.2 (step 6) of manaul +# see discussion in Section 3.5.2 of manual # can be left blank to use provided KISS FFT library # INC = -DFFT setting, e.g. -DFFT_FFTW, FFT compiler settings # PATH = path for FFT library @@ -73,8 +73,8 @@ JPG_LIB = # build rules and dependencies # do not edit this section -include Makefile.package.settings -include Makefile.package +include Makefile.package.settings +include Makefile.package EXTRA_INC = $(LMP_INC) $(PKG_INC) $(MPI_INC) $(FFT_INC) $(JPG_INC) $(PKG_SYSINC) EXTRA_PATH = $(PKG_PATH) $(MPI_PATH) $(FFT_PATH) $(JPG_PATH) $(PKG_SYSPATH) @@ -89,28 +89,27 @@ vpath %.h .. # Link target -$(EXE): $(OBJ) $(EXTRA_LINK_DEPENDS) - $(LINK) $(LINKFLAGS) $(EXTRA_PATH) $(OBJ) $(EXTRA_LIB) $(LIB) -o $(EXE) - $(SIZE) $(EXE) +$(EXE): main.o $(LMPLIB) $(EXTRA_LINK_DEPENDS) + $(LINK) $(LINKFLAGS) main.o $(EXTRA_PATH) $(LMPLINK) $(EXTRA_LIB) $(LIB) -o $@ + $(SIZE) $@ # Library targets -lib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(ARCHIVE) $(ARFLAGS) $(EXE) $(OBJ) +$(ARLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + @rm -f ../$(ARLIB) + $(ARCHIVE) $(ARFLAGS) ../$(ARLIB) $(OBJ) + @rm -f $(ARLIB) + @ln -s ../$(ARLIB) $(ARLIB) -shlib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o $(EXE) \ - $(OBJ) $(EXTRA_LIB) $(LIB) +$(SHLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o ../$(SHLIB) \ + $(OBJ) $(EXTRA_LIB) $(LIB) + @rm -f $(SHLIB) + @ln -s ../$(SHLIB) $(SHLIB) # Compilation rules -%.o:%.cpp $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< - -%.d:%.cpp $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(EXTRA_INC) $(DEPFLAGS) $< > $@ - -%.o:%.cu $(EXTRA_CPP_DEPENDS) +%.o:%.cpp $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< # Individual dependencies diff --git a/src/MAKE/OPTIONS/Makefile.intel_cpu_openmpi b/src/MAKE/OPTIONS/Makefile.intel_cpu_openmpi index 342637a460f37ec650c6075a7adc8e1f1a08f6cf..9adb5b1af213ae4d3bb1d319d7325f673a8c7a6d 100644 --- a/src/MAKE/OPTIONS/Makefile.intel_cpu_openmpi +++ b/src/MAKE/OPTIONS/Makefile.intel_cpu_openmpi @@ -31,12 +31,12 @@ SHLIBFLAGS = -shared # if you change any -D setting, do full re-compile after "make clean" # LAMMPS ifdef settings -# see possible settings in Section 2.2 (step 4) of manual +# see possible settings in Section 3.5 of the manual LMP_INC = -DLAMMPS_GZIP # MPI library -# see discussion in Section 2.2 (step 5) of manual +# see discussion in Section 3.4 of the manual # MPI wrapper compiler/linker can provide this info # can point to dummy MPI library in src/STUBS as in Makefile.serial # use -D MPICH and OMPI settings in INC to avoid C++ lib conflicts @@ -49,7 +49,7 @@ MPI_PATH = MPI_LIB = # FFT library -# see discussion in Section 2.2 (step 6) of manaul +# see discussion in Section 3.5.2 of manual # can be left blank to use provided KISS FFT library # INC = -DFFT setting, e.g. -DFFT_FFTW, FFT compiler settings # PATH = path for FFT library @@ -60,22 +60,22 @@ FFT_PATH = FFT_LIB = # JPEG and/or PNG library -# see discussion in Section 2.2 (step 7) of manual +# see discussion in Section 3.5.4 of manual # only needed if -DLAMMPS_JPEG or -DLAMMPS_PNG listed with LMP_INC # INC = path(s) for jpeglib.h and/or png.h # PATH = path(s) for JPEG library and/or PNG library # LIB = name(s) of JPEG library and/or PNG library -JPG_INC = -JPG_PATH = -JPG_LIB = +JPG_INC = +JPG_PATH = +JPG_LIB = # --------------------------------------------------------------------- # build rules and dependencies # do not edit this section -include Makefile.package.settings -include Makefile.package +include Makefile.package.settings +include Makefile.package EXTRA_INC = $(LMP_INC) $(PKG_INC) $(MPI_INC) $(FFT_INC) $(JPG_INC) $(PKG_SYSINC) EXTRA_PATH = $(PKG_PATH) $(MPI_PATH) $(FFT_PATH) $(JPG_PATH) $(PKG_SYSPATH) @@ -90,28 +90,27 @@ vpath %.h .. # Link target -$(EXE): $(OBJ) $(EXTRA_LINK_DEPENDS) - $(LINK) $(LINKFLAGS) $(EXTRA_PATH) $(OBJ) $(EXTRA_LIB) $(LIB) -o $(EXE) - $(SIZE) $(EXE) +$(EXE): main.o $(LMPLIB) $(EXTRA_LINK_DEPENDS) + $(LINK) $(LINKFLAGS) main.o $(EXTRA_PATH) $(LMPLINK) $(EXTRA_LIB) $(LIB) -o $@ + $(SIZE) $@ # Library targets -lib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(ARCHIVE) $(ARFLAGS) $(EXE) $(OBJ) +$(ARLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + @rm -f ../$(ARLIB) + $(ARCHIVE) $(ARFLAGS) ../$(ARLIB) $(OBJ) + @rm -f $(ARLIB) + @ln -s ../$(ARLIB) $(ARLIB) -shlib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o $(EXE) \ - $(OBJ) $(EXTRA_LIB) $(LIB) +$(SHLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o ../$(SHLIB) \ + $(OBJ) $(EXTRA_LIB) $(LIB) + @rm -f $(SHLIB) + @ln -s ../$(SHLIB) $(SHLIB) # Compilation rules -%.o:%.cpp $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< - -%.d:%.cpp $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(EXTRA_INC) $(DEPFLAGS) $< > $@ - -%.o:%.cu $(EXTRA_CPP_DEPENDS) +%.o:%.cpp $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< # Individual dependencies diff --git a/src/MAKE/OPTIONS/Makefile.jpeg b/src/MAKE/OPTIONS/Makefile.jpeg index f74a2eb1f776bb429044c04f5fd5a9be3022b354..e8f1f3e96a01d569c6993ef6d8ae6b88c0471203 100644 --- a/src/MAKE/OPTIONS/Makefile.jpeg +++ b/src/MAKE/OPTIONS/Makefile.jpeg @@ -26,12 +26,12 @@ SHLIBFLAGS = -shared # if you change any -D setting, do full re-compile after "make clean" # LAMMPS ifdef settings -# see possible settings in Section 2.2 (step 4) of manual +# see possible settings in Section 3.5 of the manual LMP_INC = -DLAMMPS_GZIP -DLAMMPS_JPEG # MPI library -# see discussion in Section 2.2 (step 5) of manual +# see discussion in Section 3.4 of the manual # MPI wrapper compiler/linker can provide this info # can point to dummy MPI library in src/STUBS as in Makefile.serial # use -D MPICH and OMPI settings in INC to avoid C++ lib conflicts @@ -40,22 +40,22 @@ LMP_INC = -DLAMMPS_GZIP -DLAMMPS_JPEG # LIB = name of MPI library MPI_INC = -DMPICH_SKIP_MPICXX -DOMPI_SKIP_MPICXX=1 -MPI_PATH = -MPI_LIB = +MPI_PATH = +MPI_LIB = # FFT library -# see discussion in Section 2.2 (step 6) of manual +# see discussion in Section 3.5.2 of manual # can be left blank to use provided KISS FFT library # INC = -DFFT setting, e.g. -DFFT_FFTW, FFT compiler settings # PATH = path for FFT library # LIB = name of FFT library -FFT_INC = -FFT_PATH = -FFT_LIB = +FFT_INC = +FFT_PATH = +FFT_LIB = # JPEG and/or PNG library -# see discussion in Section 2.2 (step 7) of manual +# see discussion in Section 3.5.4 of manual # only needed if -DLAMMPS_JPEG or -DLAMMPS_PNG listed with LMP_INC # INC = path(s) for jpeglib.h and/or png.h # PATH = path(s) for JPEG library and/or PNG library @@ -69,8 +69,8 @@ JPG_LIB = -ljpeg # build rules and dependencies # do not edit this section -include Makefile.package.settings -include Makefile.package +include Makefile.package.settings +include Makefile.package EXTRA_INC = $(LMP_INC) $(PKG_INC) $(MPI_INC) $(FFT_INC) $(JPG_INC) $(PKG_SYSINC) EXTRA_PATH = $(PKG_PATH) $(MPI_PATH) $(FFT_PATH) $(JPG_PATH) $(PKG_SYSPATH) @@ -85,28 +85,27 @@ vpath %.h .. # Link target -$(EXE): $(OBJ) $(EXTRA_LINK_DEPENDS) - $(LINK) $(LINKFLAGS) $(EXTRA_PATH) $(OBJ) $(EXTRA_LIB) $(LIB) -o $(EXE) - $(SIZE) $(EXE) +$(EXE): main.o $(LMPLIB) $(EXTRA_LINK_DEPENDS) + $(LINK) $(LINKFLAGS) main.o $(EXTRA_PATH) $(LMPLINK) $(EXTRA_LIB) $(LIB) -o $@ + $(SIZE) $@ # Library targets -lib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(ARCHIVE) $(ARFLAGS) $(EXE) $(OBJ) +$(ARLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + @rm -f ../$(ARLIB) + $(ARCHIVE) $(ARFLAGS) ../$(ARLIB) $(OBJ) + @rm -f $(ARLIB) + @ln -s ../$(ARLIB) $(ARLIB) -shlib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o $(EXE) \ - $(OBJ) $(EXTRA_LIB) $(LIB) +$(SHLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o ../$(SHLIB) \ + $(OBJ) $(EXTRA_LIB) $(LIB) + @rm -f $(SHLIB) + @ln -s ../$(SHLIB) $(SHLIB) # Compilation rules -%.o:%.cpp $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< - -%.d:%.cpp $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(EXTRA_INC) $(DEPFLAGS) $< > $@ - -%.o:%.cu $(EXTRA_CPP_DEPENDS) +%.o:%.cpp $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< # Individual dependencies diff --git a/src/MAKE/OPTIONS/Makefile.knl b/src/MAKE/OPTIONS/Makefile.knl index ab1b756a676124b3e720caed28b3570f1f3ce081..091fd7558f2a40578fe267111b4aa322c0800d61 100644 --- a/src/MAKE/OPTIONS/Makefile.knl +++ b/src/MAKE/OPTIONS/Makefile.knl @@ -29,12 +29,12 @@ SHLIBFLAGS = -shared # if you change any -D setting, do full re-compile after "make clean" # LAMMPS ifdef settings -# see possible settings in Section 2.2 (step 4) of manual +# see possible settings in Section 3.5 of the manual LMP_INC = -DLAMMPS_GZIP -DLAMMPS_JPEG # MPI library -# see discussion in Section 2.2 (step 5) of manual +# see discussion in Section 3.4 of the manual # MPI wrapper compiler/linker can provide this info # can point to dummy MPI library in src/STUBS as in Makefile.serial # use -D MPICH and OMPI settings in INC to avoid C++ lib conflicts @@ -43,11 +43,11 @@ LMP_INC = -DLAMMPS_GZIP -DLAMMPS_JPEG # LIB = name of MPI library MPI_INC = -DMPICH_SKIP_MPICXX -DOMPI_SKIP_MPICXX=1 -MPI_PATH = +MPI_PATH = MPI_LIB = # FFT library -# see discussion in Section 2.2 (step 6) of manaul +# see discussion in Section 3.5.2 of manual # can be left blank to use provided KISS FFT library # INC = -DFFT setting, e.g. -DFFT_FFTW, FFT compiler settings # PATH = path for FFT library @@ -58,7 +58,7 @@ FFT_PATH = FFT_LIB = # JPEG and/or PNG library -# see discussion in Section 2.2 (step 7) of manual +# see discussion in Section 3.5.4 of manual # only needed if -DLAMMPS_JPEG or -DLAMMPS_PNG listed with LMP_INC # INC = path(s) for jpeglib.h and/or png.h # PATH = path(s) for JPEG library and/or PNG library @@ -72,12 +72,14 @@ JPG_LIB = -ljpeg # build rules and dependencies # do not edit this section -include Makefile.package.settings -include Makefile.package +include Makefile.package.settings +include Makefile.package EXTRA_INC = $(LMP_INC) $(PKG_INC) $(MPI_INC) $(FFT_INC) $(JPG_INC) $(PKG_SYSINC) EXTRA_PATH = $(PKG_PATH) $(MPI_PATH) $(FFT_PATH) $(JPG_PATH) $(PKG_SYSPATH) EXTRA_LIB = $(PKG_LIB) $(MPI_LIB) $(FFT_LIB) $(JPG_LIB) $(PKG_SYSLIB) +EXTRA_CPP_DEPENDS = $(PKG_CPP_DEPENDS) +EXTRA_LINK_DEPENDS = $(PKG_LINK_DEPENDS) # Path to src files @@ -86,30 +88,29 @@ vpath %.h .. # Link target -$(EXE): $(OBJ) - $(LINK) $(LINKFLAGS) $(EXTRA_PATH) $(OBJ) $(EXTRA_LIB) $(LIB) -o $(EXE) - $(SIZE) $(EXE) +$(EXE): main.o $(LMPLIB) $(EXTRA_LINK_DEPENDS) + $(LINK) $(LINKFLAGS) main.o $(EXTRA_PATH) $(LMPLINK) $(EXTRA_LIB) $(LIB) -o $@ + $(SIZE) $@ # Library targets -lib: $(OBJ) - $(ARCHIVE) $(ARFLAGS) $(EXE) $(OBJ) +$(ARLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + @rm -f ../$(ARLIB) + $(ARCHIVE) $(ARFLAGS) ../$(ARLIB) $(OBJ) + @rm -f $(ARLIB) + @ln -s ../$(ARLIB) $(ARLIB) -shlib: $(OBJ) - $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o $(EXE) \ - $(OBJ) $(EXTRA_LIB) $(LIB) +$(SHLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o ../$(SHLIB) \ + $(OBJ) $(EXTRA_LIB) $(LIB) + @rm -f $(SHLIB) + @ln -s ../$(SHLIB) $(SHLIB) # Compilation rules %.o:%.cpp $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< -%.d:%.cpp - $(CC) $(CCFLAGS) $(EXTRA_INC) $(DEPFLAGS) $< > $@ - -%.o:%.cu - $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< - # Individual dependencies depend : fastdep.exe $(SRC) diff --git a/src/MAKE/OPTIONS/Makefile.kokkos_cuda_mpi b/src/MAKE/OPTIONS/Makefile.kokkos_cuda_mpi index ba34bc25eb7147e8e77d3d258c5821e5c7d7c2e9..3971cc6c06993061aec23cbab026768a79fcdad2 100644 --- a/src/MAKE/OPTIONS/Makefile.kokkos_cuda_mpi +++ b/src/MAKE/OPTIONS/Makefile.kokkos_cuda_mpi @@ -31,7 +31,7 @@ KOKKOS_ARCH = Kepler35 # if you change any -D setting, do full re-compile after "make clean" # LAMMPS ifdef settings -# see possible settings in Section 2.2 (step 4) of manual +# see possible settings in Section 3.5 of the manual LMP_INC = -DLAMMPS_GZIP @@ -45,11 +45,11 @@ LMP_INC = -DLAMMPS_GZIP # LIB = name of MPI library MPI_INC = -DMPICH_SKIP_MPICXX -DOMPI_SKIP_MPICXX=1 -MPI_PATH = -MPI_LIB = +MPI_PATH = +MPI_LIB = # FFT library -# see discussion in Section 2.2 (step 6) of manaul +# see discussion in Section 3.5.2 of manual # can be left blank to use provided KISS FFT library # INC = -DFFT setting, e.g. -DFFT_FFTW, FFT compiler settings # PATH = path for FFT library @@ -60,22 +60,22 @@ FFT_PATH = FFT_LIB = -lcufft # JPEG and/or PNG library -# see discussion in Section 2.2 (step 7) of manual +# see discussion in Section 3.5.4 of manual # only needed if -DLAMMPS_JPEG or -DLAMMPS_PNG listed with LMP_INC # INC = path(s) for jpeglib.h and/or png.h # PATH = path(s) for JPEG library and/or PNG library # LIB = name(s) of JPEG library and/or PNG library -JPG_INC = -JPG_PATH = -JPG_LIB = +JPG_INC = +JPG_PATH = +JPG_LIB = # --------------------------------------------------------------------- # build rules and dependencies # do not edit this section -include Makefile.package.settings -include Makefile.package +include Makefile.package.settings +include Makefile.package EXTRA_INC = $(LMP_INC) $(PKG_INC) $(MPI_INC) $(FFT_INC) $(JPG_INC) $(PKG_SYSINC) EXTRA_PATH = $(PKG_PATH) $(MPI_PATH) $(FFT_PATH) $(JPG_PATH) $(PKG_SYSPATH) @@ -90,28 +90,27 @@ vpath %.h .. # Link target -$(EXE): $(OBJ) $(EXTRA_LINK_DEPENDS) - $(LINK) $(LINKFLAGS) $(EXTRA_PATH) $(OBJ) $(EXTRA_LIB) $(LIB) -o $(EXE) - $(SIZE) $(EXE) +$(EXE): main.o $(LMPLIB) $(EXTRA_LINK_DEPENDS) + $(LINK) $(LINKFLAGS) main.o $(EXTRA_PATH) $(LMPLINK) $(EXTRA_LIB) $(LIB) -o $@ + $(SIZE) $@ # Library targets -lib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(ARCHIVE) $(ARFLAGS) $(EXE) $(OBJ) +$(ARLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + @rm -f ../$(ARLIB) + $(ARCHIVE) $(ARFLAGS) ../$(ARLIB) $(OBJ) + @rm -f $(ARLIB) + @ln -s ../$(ARLIB) $(ARLIB) -shlib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o $(EXE) \ - $(OBJ) $(EXTRA_LIB) $(LIB) +$(SHLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o ../$(SHLIB) \ + $(OBJ) $(EXTRA_LIB) $(LIB) + @rm -f $(SHLIB) + @ln -s ../$(SHLIB) $(SHLIB) # Compilation rules -%.o:%.cpp $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< - -%.d:%.cpp $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(EXTRA_INC) $(DEPFLAGS) $< > $@ - -%.o:%.cu $(EXTRA_CPP_DEPENDS) +%.o:%.cpp $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< # Individual dependencies diff --git a/src/MAKE/OPTIONS/Makefile.kokkos_mpi_only b/src/MAKE/OPTIONS/Makefile.kokkos_mpi_only index 7aea2f366ac28cc8e5fa7e94b72a0783d93efccf..0b2e42487f8daab80f8e34d15d9ac51491bee982 100644 --- a/src/MAKE/OPTIONS/Makefile.kokkos_mpi_only +++ b/src/MAKE/OPTIONS/Makefile.kokkos_mpi_only @@ -27,12 +27,12 @@ KOKKOS_DEVICES = Serial # if you change any -D setting, do full re-compile after "make clean" # LAMMPS ifdef settings -# see possible settings in Section 2.2 (step 4) of manual +# see possible settings in Section 3.5 of the manual LMP_INC = -DLAMMPS_GZIP # MPI library -# see discussion in Section 2.2 (step 5) of manual +# see discussion in Section 3.4 of the manual # MPI wrapper compiler/linker can provide this info # can point to dummy MPI library in src/STUBS as in Makefile.serial # use -D MPICH and OMPI settings in INC to avoid C++ lib conflicts @@ -41,37 +41,37 @@ LMP_INC = -DLAMMPS_GZIP # LIB = name of MPI library MPI_INC = -DMPICH_SKIP_MPICXX -DOMPI_SKIP_MPICXX=1 -MPI_PATH = -MPI_LIB = +MPI_PATH = +MPI_LIB = # FFT library -# see discussion in Section 2.2 (step 6) of manual +# see discussion in Section 3.5.2 of manual # can be left blank to use provided KISS FFT library # INC = -DFFT setting, e.g. -DFFT_FFTW, FFT compiler settings # PATH = path for FFT library # LIB = name of FFT library -FFT_INC = -FFT_PATH = -FFT_LIB = +FFT_INC = +FFT_PATH = +FFT_LIB = # JPEG and/or PNG library -# see discussion in Section 2.2 (step 7) of manual +# see discussion in Section 3.5.4 of manual # only needed if -DLAMMPS_JPEG or -DLAMMPS_PNG listed with LMP_INC # INC = path(s) for jpeglib.h and/or png.h # PATH = path(s) for JPEG library and/or PNG library # LIB = name(s) of JPEG library and/or PNG library -JPG_INC = -JPG_PATH = -JPG_LIB = +JPG_INC = +JPG_PATH = +JPG_LIB = # --------------------------------------------------------------------- # build rules and dependencies # do not edit this section -include Makefile.package.settings -include Makefile.package +include Makefile.package.settings +include Makefile.package EXTRA_INC = $(LMP_INC) $(PKG_INC) $(MPI_INC) $(FFT_INC) $(JPG_INC) $(PKG_SYSINC) EXTRA_PATH = $(PKG_PATH) $(MPI_PATH) $(FFT_PATH) $(JPG_PATH) $(PKG_SYSPATH) @@ -86,28 +86,27 @@ vpath %.h .. # Link target -$(EXE): $(OBJ) $(EXTRA_LINK_DEPENDS) - $(LINK) $(LINKFLAGS) $(EXTRA_PATH) $(OBJ) $(EXTRA_LIB) $(LIB) -o $(EXE) - $(SIZE) $(EXE) +$(EXE): main.o $(LMPLIB) $(EXTRA_LINK_DEPENDS) + $(LINK) $(LINKFLAGS) main.o $(EXTRA_PATH) $(LMPLINK) $(EXTRA_LIB) $(LIB) -o $@ + $(SIZE) $@ # Library targets -lib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(ARCHIVE) $(ARFLAGS) $(EXE) $(OBJ) +$(ARLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + @rm -f ../$(ARLIB) + $(ARCHIVE) $(ARFLAGS) ../$(ARLIB) $(OBJ) + @rm -f $(ARLIB) + @ln -s ../$(ARLIB) $(ARLIB) -shlib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o $(EXE) \ - $(OBJ) $(EXTRA_LIB) $(LIB) +$(SHLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o ../$(SHLIB) \ + $(OBJ) $(EXTRA_LIB) $(LIB) + @rm -f $(SHLIB) + @ln -s ../$(SHLIB) $(SHLIB) # Compilation rules -%.o:%.cpp $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< - -%.d:%.cpp $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(EXTRA_INC) $(DEPFLAGS) $< > $@ - -%.o:%.cu $(EXTRA_CPP_DEPENDS) +%.o:%.cpp $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< # Individual dependencies diff --git a/src/MAKE/OPTIONS/Makefile.kokkos_omp b/src/MAKE/OPTIONS/Makefile.kokkos_omp index d0e12796c05d191b2754aab5984eb6f4f377a620..3e8f7ba6348824740d773d7f670bce97818f44f1 100644 --- a/src/MAKE/OPTIONS/Makefile.kokkos_omp +++ b/src/MAKE/OPTIONS/Makefile.kokkos_omp @@ -27,12 +27,12 @@ KOKKOS_DEVICES = OpenMP # if you change any -D setting, do full re-compile after "make clean" # LAMMPS ifdef settings -# see possible settings in Section 2.2 (step 4) of manual +# see possible settings in Section 3.5 of the manual LMP_INC = -DLAMMPS_GZIP # MPI library -# see discussion in Section 2.2 (step 5) of manual +# see discussion in Section 3.4 of the manual # MPI wrapper compiler/linker can provide this info # can point to dummy MPI library in src/STUBS as in Makefile.serial # use -D MPICH and OMPI settings in INC to avoid C++ lib conflicts @@ -41,37 +41,37 @@ LMP_INC = -DLAMMPS_GZIP # LIB = name of MPI library MPI_INC = -DMPICH_SKIP_MPICXX -DOMPI_SKIP_MPICXX=1 -MPI_PATH = -MPI_LIB = +MPI_PATH = +MPI_LIB = # FFT library -# see discussion in Section 2.2 (step 6) of manual +# see discussion in Section 3.5.2 of manual # can be left blank to use provided KISS FFT library # INC = -DFFT setting, e.g. -DFFT_FFTW, FFT compiler settings # PATH = path for FFT library # LIB = name of FFT library -FFT_INC = -FFT_PATH = -FFT_LIB = +FFT_INC = +FFT_PATH = +FFT_LIB = # JPEG and/or PNG library -# see discussion in Section 2.2 (step 7) of manual +# see discussion in Section 3.5.4 of manual # only needed if -DLAMMPS_JPEG or -DLAMMPS_PNG listed with LMP_INC # INC = path(s) for jpeglib.h and/or png.h # PATH = path(s) for JPEG library and/or PNG library # LIB = name(s) of JPEG library and/or PNG library -JPG_INC = -JPG_PATH = -JPG_LIB = +JPG_INC = +JPG_PATH = +JPG_LIB = # --------------------------------------------------------------------- # build rules and dependencies # do not edit this section -include Makefile.package.settings -include Makefile.package +include Makefile.package.settings +include Makefile.package EXTRA_INC = $(LMP_INC) $(PKG_INC) $(MPI_INC) $(FFT_INC) $(JPG_INC) $(PKG_SYSINC) EXTRA_PATH = $(PKG_PATH) $(MPI_PATH) $(FFT_PATH) $(JPG_PATH) $(PKG_SYSPATH) @@ -86,28 +86,27 @@ vpath %.h .. # Link target -$(EXE): $(OBJ) $(EXTRA_LINK_DEPENDS) - $(LINK) $(LINKFLAGS) $(EXTRA_PATH) $(OBJ) $(EXTRA_LIB) $(LIB) -o $(EXE) - $(SIZE) $(EXE) +$(EXE): main.o $(LMPLIB) $(EXTRA_LINK_DEPENDS) + $(LINK) $(LINKFLAGS) main.o $(EXTRA_PATH) $(LMPLINK) $(EXTRA_LIB) $(LIB) -o $@ + $(SIZE) $@ # Library targets -lib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(ARCHIVE) $(ARFLAGS) $(EXE) $(OBJ) +$(ARLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + @rm -f ../$(ARLIB) + $(ARCHIVE) $(ARFLAGS) ../$(ARLIB) $(OBJ) + @rm -f $(ARLIB) + @ln -s ../$(ARLIB) $(ARLIB) -shlib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o $(EXE) \ - $(OBJ) $(EXTRA_LIB) $(LIB) +$(SHLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o ../$(SHLIB) \ + $(OBJ) $(EXTRA_LIB) $(LIB) + @rm -f $(SHLIB) + @ln -s ../$(SHLIB) $(SHLIB) # Compilation rules -%.o:%.cpp $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< - -%.d:%.cpp $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(EXTRA_INC) $(DEPFLAGS) $< > $@ - -%.o:%.cu $(EXTRA_CPP_DEPENDS) +%.o:%.cpp $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< # Individual dependencies diff --git a/src/MAKE/OPTIONS/Makefile.kokkos_phi b/src/MAKE/OPTIONS/Makefile.kokkos_phi index 7dc0bb091ac59f65ece63e7f685307ce354c64f0..0e2bec0a5ad9c967a10c5efe090cec5d4bfd803d 100644 --- a/src/MAKE/OPTIONS/Makefile.kokkos_phi +++ b/src/MAKE/OPTIONS/Makefile.kokkos_phi @@ -28,12 +28,12 @@ KOKKOS_ARCH = KNL # if you change any -D setting, do full re-compile after "make clean" # LAMMPS ifdef settings -# see possible settings in Section 2.2 (step 4) of manual +# see possible settings in Section 3.5 of the manual LMP_INC = -DLAMMPS_GZIP # MPI library -# see discussion in Section 2.2 (step 5) of manual +# see discussion in Section 3.4 of the manual # MPI wrapper compiler/linker can provide this info # can point to dummy MPI library in src/STUBS as in Makefile.serial # use -D MPICH and OMPI settings in INC to avoid C++ lib conflicts @@ -42,37 +42,37 @@ LMP_INC = -DLAMMPS_GZIP # LIB = name of MPI library MPI_INC = -DMPICH_SKIP_MPICXX -DOMPI_SKIP_MPICXX=1 -MPI_PATH = -MPI_LIB = +MPI_PATH = +MPI_LIB = # FFT library -# see discussion in Section 2.2 (step 6) of manual +# see discussion in Section 3.5.2 of manual # can be left blank to use provided KISS FFT library # INC = -DFFT setting, e.g. -DFFT_FFTW, FFT compiler settings # PATH = path for FFT library # LIB = name of FFT library -FFT_INC = -FFT_PATH = -FFT_LIB = +FFT_INC = +FFT_PATH = +FFT_LIB = # JPEG and/or PNG library -# see discussion in Section 2.2 (step 7) of manual +# see discussion in Section 3.5.4 of manual # only needed if -DLAMMPS_JPEG or -DLAMMPS_PNG listed with LMP_INC # INC = path(s) for jpeglib.h and/or png.h # PATH = path(s) for JPEG library and/or PNG library # LIB = name(s) of JPEG library and/or PNG library -JPG_INC = -JPG_PATH = -JPG_LIB = +JPG_INC = +JPG_PATH = +JPG_LIB = # --------------------------------------------------------------------- # build rules and dependencies # do not edit this section -include Makefile.package.settings -include Makefile.package +include Makefile.package.settings +include Makefile.package EXTRA_INC = $(LMP_INC) $(PKG_INC) $(MPI_INC) $(FFT_INC) $(JPG_INC) $(PKG_SYSINC) EXTRA_PATH = $(PKG_PATH) $(MPI_PATH) $(FFT_PATH) $(JPG_PATH) $(PKG_SYSPATH) @@ -87,39 +87,35 @@ vpath %.h .. # Link target -$(EXE): $(OBJ) $(EXTRA_LINK_DEPENDS) - $(LINK) $(LINKFLAGS) $(EXTRA_PATH) $(OBJ) $(EXTRA_LIB) $(LIB) -o $(EXE) - $(SIZE) $(EXE) +$(EXE): main.o $(LMPLIB) $(EXTRA_LINK_DEPENDS) + $(LINK) $(LINKFLAGS) main.o $(EXTRA_PATH) $(LMPLINK) $(EXTRA_LIB) $(LIB) -o $@ + $(SIZE) $@ # Library targets -lib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(ARCHIVE) $(ARFLAGS) $(EXE) $(OBJ) +$(ARLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + @rm -f ../$(ARLIB) + $(ARCHIVE) $(ARFLAGS) ../$(ARLIB) $(OBJ) + @rm -f $(ARLIB) + @ln -s ../$(ARLIB) $(ARLIB) -shlib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o $(EXE) \ - $(OBJ) $(EXTRA_LIB) $(LIB) +$(SHLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o ../$(SHLIB) \ + $(OBJ) $(EXTRA_LIB) $(LIB) + @rm -f $(SHLIB) + @ln -s ../$(SHLIB) $(SHLIB) # Compilation rules -%.o:%.cpp $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< - -%.d:%.cpp $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(EXTRA_INC) $(DEPFLAGS) $< > $@ - -%.o:%.cu $(EXTRA_CPP_DEPENDS) +%.o:%.cpp $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< # Individual dependencies -#depend : fastdep.exe $(SRC) -# @./fastdep.exe $(EXTRA_INC) -- $^ > .depend || exit 1 - -#fastdep.exe: ../DEPEND/fastdep.c -# cc -O -o $@ $< +depend : fastdep.exe $(SRC) + @./fastdep.exe $(EXTRA_INC) -- $^ > .depend || exit 1 -#sinclude .depend +fastdep.exe: ../DEPEND/fastdep.c + cc -O -o $@ $< -DEPENDS = $(OBJ:.o=.d) -sinclude $(DEPENDS) \ No newline at end of file +sinclude .depend diff --git a/src/MAKE/OPTIONS/Makefile.mgptfast b/src/MAKE/OPTIONS/Makefile.mgptfast index ed27993706df861373bb0ff1ab081e8a23f5c542..dc8682c3a60909e6810cd638218a0a9614fea284 100644 --- a/src/MAKE/OPTIONS/Makefile.mgptfast +++ b/src/MAKE/OPTIONS/Makefile.mgptfast @@ -26,12 +26,12 @@ SHLIBFLAGS = -shared # if you change any -D setting, do full re-compile after "make clean" # LAMMPS ifdef settings -# see possible settings in Section 2.2 (step 4) of manual +# see possible settings in Section 3.5 of the manual LMP_INC = -DLAMMPS_GZIP # MPI library -# see discussion in Section 2.2 (step 5) of manual +# see discussion in Section 3.4 of the manual # MPI wrapper compiler/linker can provide this info # can point to dummy MPI library in src/STUBS as in Makefile.serial # use -D MPICH and OMPI settings in INC to avoid C++ lib conflicts @@ -40,37 +40,37 @@ LMP_INC = -DLAMMPS_GZIP # LIB = name of MPI library MPI_INC = -DMPICH_SKIP_MPICXX -DOMPI_SKIP_MPICXX=1 -MPI_PATH = -MPI_LIB = +MPI_PATH = +MPI_LIB = # FFT library -# see discussion in Section 2.2 (step 6) of manual +# see discussion in Section 3.5.2 of manual # can be left blank to use provided KISS FFT library # INC = -DFFT setting, e.g. -DFFT_FFTW, FFT compiler settings # PATH = path for FFT library # LIB = name of FFT library -FFT_INC = -FFT_PATH = -FFT_LIB = +FFT_INC = +FFT_PATH = +FFT_LIB = # JPEG and/or PNG library -# see discussion in Section 2.2 (step 7) of manual +# see discussion in Section 3.5.4 of manual # only needed if -DLAMMPS_JPEG or -DLAMMPS_PNG listed with LMP_INC # INC = path(s) for jpeglib.h and/or png.h # PATH = path(s) for JPEG library and/or PNG library # LIB = name(s) of JPEG library and/or PNG library -JPG_INC = -JPG_PATH = -JPG_LIB = +JPG_INC = +JPG_PATH = +JPG_LIB = # --------------------------------------------------------------------- # build rules and dependencies # do not edit this section -include Makefile.package.settings -include Makefile.package +include Makefile.package.settings +include Makefile.package EXTRA_INC = $(LMP_INC) $(PKG_INC) $(MPI_INC) $(FFT_INC) $(JPG_INC) $(PKG_SYSINC) EXTRA_PATH = $(PKG_PATH) $(MPI_PATH) $(FFT_PATH) $(JPG_PATH) $(PKG_SYSPATH) @@ -85,28 +85,27 @@ vpath %.h .. # Link target -$(EXE): $(OBJ) $(EXTRA_LINK_DEPENDS) - $(LINK) $(LINKFLAGS) $(EXTRA_PATH) $(OBJ) $(EXTRA_LIB) $(LIB) -o $(EXE) - $(SIZE) $(EXE) +$(EXE): main.o $(LMPLIB) $(EXTRA_LINK_DEPENDS) + $(LINK) $(LINKFLAGS) main.o $(EXTRA_PATH) $(LMPLINK) $(EXTRA_LIB) $(LIB) -o $@ + $(SIZE) $@ # Library targets -lib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(ARCHIVE) $(ARFLAGS) $(EXE) $(OBJ) +$(ARLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + @rm -f ../$(ARLIB) + $(ARCHIVE) $(ARFLAGS) ../$(ARLIB) $(OBJ) + @rm -f $(ARLIB) + @ln -s ../$(ARLIB) $(ARLIB) -shlib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o $(EXE) \ - $(OBJ) $(EXTRA_LIB) $(LIB) +$(SHLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o ../$(SHLIB) \ + $(OBJ) $(EXTRA_LIB) $(LIB) + @rm -f $(SHLIB) + @ln -s ../$(SHLIB) $(SHLIB) # Compilation rules -%.o:%.cpp $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< - -%.d:%.cpp $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(EXTRA_INC) $(DEPFLAGS) $< > $@ - -%.o:%.cu $(EXTRA_CPP_DEPENDS) +%.o:%.cpp $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< # Individual dependencies diff --git a/src/MAKE/OPTIONS/Makefile.omp b/src/MAKE/OPTIONS/Makefile.omp index fd485d541695bc10470223b30eed8487d938139b..a6b45f7a310fdaa873bac001a2958de91256d796 100644 --- a/src/MAKE/OPTIONS/Makefile.omp +++ b/src/MAKE/OPTIONS/Makefile.omp @@ -26,12 +26,12 @@ SHLIBFLAGS = -shared # if you change any -D setting, do full re-compile after "make clean" # LAMMPS ifdef settings -# see possible settings in Section 2.2 (step 4) of manual +# see possible settings in Section 3.5 of the manual LMP_INC = -DLAMMPS_GZIP # MPI library -# see discussion in Section 2.2 (step 5) of manual +# see discussion in Section 3.4 of the manual # MPI wrapper compiler/linker can provide this info # can point to dummy MPI library in src/STUBS as in Makefile.serial # use -D MPICH and OMPI settings in INC to avoid C++ lib conflicts @@ -40,37 +40,37 @@ LMP_INC = -DLAMMPS_GZIP # LIB = name of MPI library MPI_INC = -DMPICH_SKIP_MPICXX -DOMPI_SKIP_MPICXX=1 -MPI_PATH = -MPI_LIB = +MPI_PATH = +MPI_LIB = # FFT library -# see discussion in Section 2.2 (step 6) of manual +# see discussion in Section 3.5.2 of manual # can be left blank to use provided KISS FFT library # INC = -DFFT setting, e.g. -DFFT_FFTW, FFT compiler settings # PATH = path for FFT library # LIB = name of FFT library -FFT_INC = -FFT_PATH = -FFT_LIB = +FFT_INC = +FFT_PATH = +FFT_LIB = # JPEG and/or PNG library -# see discussion in Section 2.2 (step 7) of manual +# see discussion in Section 3.5.4 of manual # only needed if -DLAMMPS_JPEG or -DLAMMPS_PNG listed with LMP_INC # INC = path(s) for jpeglib.h and/or png.h # PATH = path(s) for JPEG library and/or PNG library # LIB = name(s) of JPEG library and/or PNG library -JPG_INC = -JPG_PATH = -JPG_LIB = +JPG_INC = +JPG_PATH = +JPG_LIB = # --------------------------------------------------------------------- # build rules and dependencies # do not edit this section -include Makefile.package.settings -include Makefile.package +include Makefile.package.settings +include Makefile.package EXTRA_INC = $(LMP_INC) $(PKG_INC) $(MPI_INC) $(FFT_INC) $(JPG_INC) $(PKG_SYSINC) EXTRA_PATH = $(PKG_PATH) $(MPI_PATH) $(FFT_PATH) $(JPG_PATH) $(PKG_SYSPATH) @@ -85,28 +85,27 @@ vpath %.h .. # Link target -$(EXE): $(OBJ) $(EXTRA_LINK_DEPENDS) - $(LINK) $(LINKFLAGS) $(EXTRA_PATH) $(OBJ) $(EXTRA_LIB) $(LIB) -o $(EXE) - $(SIZE) $(EXE) +$(EXE): main.o $(LMPLIB) $(EXTRA_LINK_DEPENDS) + $(LINK) $(LINKFLAGS) main.o $(EXTRA_PATH) $(LMPLINK) $(EXTRA_LIB) $(LIB) -o $@ + $(SIZE) $@ # Library targets -lib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(ARCHIVE) $(ARFLAGS) $(EXE) $(OBJ) +$(ARLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + @rm -f ../$(ARLIB) + $(ARCHIVE) $(ARFLAGS) ../$(ARLIB) $(OBJ) + @rm -f $(ARLIB) + @ln -s ../$(ARLIB) $(ARLIB) -shlib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o $(EXE) \ - $(OBJ) $(EXTRA_LIB) $(LIB) +$(SHLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o ../$(SHLIB) \ + $(OBJ) $(EXTRA_LIB) $(LIB) + @rm -f $(SHLIB) + @ln -s ../$(SHLIB) $(SHLIB) # Compilation rules -%.o:%.cpp $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< - -%.d:%.cpp $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(EXTRA_INC) $(DEPFLAGS) $< > $@ - -%.o:%.cu $(EXTRA_CPP_DEPENDS) +%.o:%.cpp $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< # Individual dependencies diff --git a/src/MAKE/OPTIONS/Makefile.opt b/src/MAKE/OPTIONS/Makefile.opt index 29903565dc70d8d1901429c447cf7167a7a0d83e..8919e6e1d90c73402cb39eae83a532a7efecadfb 100644 --- a/src/MAKE/OPTIONS/Makefile.opt +++ b/src/MAKE/OPTIONS/Makefile.opt @@ -26,12 +26,12 @@ SHLIBFLAGS = -shared # if you change any -D setting, do full re-compile after "make clean" # LAMMPS ifdef settings -# see possible settings in Section 2.2 (step 4) of manual +# see possible settings in Section 3.5 of the manual LMP_INC = -DLAMMPS_GZIP # MPI library -# see discussion in Section 2.2 (step 5) of manual +# see discussion in Section 3.4 of the manual # MPI wrapper compiler/linker can provide this info # can point to dummy MPI library in src/STUBS as in Makefile.serial # use -D MPICH and OMPI settings in INC to avoid C++ lib conflicts @@ -40,37 +40,37 @@ LMP_INC = -DLAMMPS_GZIP # LIB = name of MPI library MPI_INC = -DMPICH_SKIP_MPICXX -DOMPI_SKIP_MPICXX=1 -MPI_PATH = -MPI_LIB = +MPI_PATH = +MPI_LIB = # FFT library -# see discussion in Section 2.2 (step 6) of manual +# see discussion in Section 3.5.2 of manual # can be left blank to use provided KISS FFT library # INC = -DFFT setting, e.g. -DFFT_FFTW, FFT compiler settings # PATH = path for FFT library # LIB = name of FFT library -FFT_INC = -FFT_PATH = -FFT_LIB = +FFT_INC = +FFT_PATH = +FFT_LIB = # JPEG and/or PNG library -# see discussion in Section 2.2 (step 7) of manual +# see discussion in Section 3.5.4 of manual # only needed if -DLAMMPS_JPEG or -DLAMMPS_PNG listed with LMP_INC # INC = path(s) for jpeglib.h and/or png.h # PATH = path(s) for JPEG library and/or PNG library # LIB = name(s) of JPEG library and/or PNG library -JPG_INC = -JPG_PATH = -JPG_LIB = +JPG_INC = +JPG_PATH = +JPG_LIB = # --------------------------------------------------------------------- # build rules and dependencies # do not edit this section -include Makefile.package.settings -include Makefile.package +include Makefile.package.settings +include Makefile.package EXTRA_INC = $(LMP_INC) $(PKG_INC) $(MPI_INC) $(FFT_INC) $(JPG_INC) $(PKG_SYSINC) EXTRA_PATH = $(PKG_PATH) $(MPI_PATH) $(FFT_PATH) $(JPG_PATH) $(PKG_SYSPATH) @@ -85,28 +85,27 @@ vpath %.h .. # Link target -$(EXE): $(OBJ) $(EXTRA_LINK_DEPENDS) - $(LINK) $(LINKFLAGS) $(EXTRA_PATH) $(OBJ) $(EXTRA_LIB) $(LIB) -o $(EXE) - $(SIZE) $(EXE) +$(EXE): main.o $(LMPLIB) $(EXTRA_LINK_DEPENDS) + $(LINK) $(LINKFLAGS) main.o $(EXTRA_PATH) $(LMPLINK) $(EXTRA_LIB) $(LIB) -o $@ + $(SIZE) $@ # Library targets -lib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(ARCHIVE) $(ARFLAGS) $(EXE) $(OBJ) +$(ARLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + @rm -f ../$(ARLIB) + $(ARCHIVE) $(ARFLAGS) ../$(ARLIB) $(OBJ) + @rm -f $(ARLIB) + @ln -s ../$(ARLIB) $(ARLIB) -shlib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o $(EXE) \ - $(OBJ) $(EXTRA_LIB) $(LIB) +$(SHLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o ../$(SHLIB) \ + $(OBJ) $(EXTRA_LIB) $(LIB) + @rm -f $(SHLIB) + @ln -s ../$(SHLIB) $(SHLIB) # Compilation rules -%.o:%.cpp $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< - -%.d:%.cpp $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(EXTRA_INC) $(DEPFLAGS) $< > $@ - -%.o:%.cu $(EXTRA_CPP_DEPENDS) +%.o:%.cpp $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< # Individual dependencies diff --git a/src/MAKE/OPTIONS/Makefile.pgi_mpich_link b/src/MAKE/OPTIONS/Makefile.pgi_mpich_link index 444a2ffc12ca80f53c6784a6ec118f0ec6f5c015..daa8a791661e418dd54f38a5e46eeda1babde395 100644 --- a/src/MAKE/OPTIONS/Makefile.pgi_mpich_link +++ b/src/MAKE/OPTIONS/Makefile.pgi_mpich_link @@ -26,12 +26,12 @@ SHLIBFLAGS = -shared # if you change any -D setting, do full re-compile after "make clean" # LAMMPS ifdef settings -# see possible settings in Section 2.2 (step 4) of manual +# see possible settings in Section 3.5 of the manual LMP_INC = -DLAMMPS_GZIP # MPI library -# see discussion in Section 2.2 (step 5) of manual +# see discussion in Section 3.4 of the manual # MPI wrapper compiler/linker can provide this info # can point to dummy MPI library in src/STUBS as in Makefile.serial # use -D MPICH and OMPI settings in INC to avoid C++ lib conflicts @@ -44,33 +44,33 @@ MPI_PATH = -L/usr/local/mpich-1.2.6/pg/lib MPI_LIB = -lmpich # FFT library -# see discussion in Section 2.2 (step 6) of manaul +# see discussion in Section 3.5.2 of manual # can be left blank to use provided KISS FFT library # INC = -DFFT setting, e.g. -DFFT_FFTW, FFT compiler settings # PATH = path for FFT library # LIB = name of FFT library -FFT_INC = -FFT_PATH = -FFT_LIB = +FFT_INC = +FFT_PATH = +FFT_LIB = # JPEG and/or PNG library -# see discussion in Section 2.2 (step 7) of manual +# see discussion in Section 3.5.4 of manual # only needed if -DLAMMPS_JPEG or -DLAMMPS_PNG listed with LMP_INC # INC = path(s) for jpeglib.h and/or png.h # PATH = path(s) for JPEG library and/or PNG library # LIB = name(s) of JPEG library and/or PNG library -JPG_INC = -JPG_PATH = -JPG_LIB = +JPG_INC = +JPG_PATH = +JPG_LIB = # --------------------------------------------------------------------- # build rules and dependencies # do not edit this section -include Makefile.package.settings -include Makefile.package +include Makefile.package.settings +include Makefile.package EXTRA_INC = $(LMP_INC) $(PKG_INC) $(MPI_INC) $(FFT_INC) $(JPG_INC) $(PKG_SYSINC) EXTRA_PATH = $(PKG_PATH) $(MPI_PATH) $(FFT_PATH) $(JPG_PATH) $(PKG_SYSPATH) @@ -85,28 +85,27 @@ vpath %.h .. # Link target -$(EXE): $(OBJ) $(EXTRA_LINK_DEPENDS) - $(LINK) $(LINKFLAGS) $(EXTRA_PATH) $(OBJ) $(EXTRA_LIB) $(LIB) -o $(EXE) - $(SIZE) $(EXE) +$(EXE): main.o $(LMPLIB) $(EXTRA_LINK_DEPENDS) + $(LINK) $(LINKFLAGS) main.o $(EXTRA_PATH) $(LMPLINK) $(EXTRA_LIB) $(LIB) -o $@ + $(SIZE) $@ # Library targets -lib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(ARCHIVE) $(ARFLAGS) $(EXE) $(OBJ) +$(ARLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + @rm -f ../$(ARLIB) + $(ARCHIVE) $(ARFLAGS) ../$(ARLIB) $(OBJ) + @rm -f $(ARLIB) + @ln -s ../$(ARLIB) $(ARLIB) -shlib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o $(EXE) \ - $(OBJ) $(EXTRA_LIB) $(LIB) +$(SHLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o ../$(SHLIB) \ + $(OBJ) $(EXTRA_LIB) $(LIB) + @rm -f $(SHLIB) + @ln -s ../$(SHLIB) $(SHLIB) # Compilation rules -%.o:%.cpp $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< - -%.d:%.cpp $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(EXTRA_INC) $(DEPFLAGS) $< > $@ - -%.o:%.cu $(EXTRA_CPP_DEPENDS) +%.o:%.cpp $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< # Individual dependencies diff --git a/src/MAKE/OPTIONS/Makefile.png b/src/MAKE/OPTIONS/Makefile.png index 34b54dfb9370a1b358e3091f38d2ee56dd048c5f..9fd7b9b79c82989304f325c4e35f2471ea344bbb 100644 --- a/src/MAKE/OPTIONS/Makefile.png +++ b/src/MAKE/OPTIONS/Makefile.png @@ -26,12 +26,12 @@ SHLIBFLAGS = -shared # if you change any -D setting, do full re-compile after "make clean" # LAMMPS ifdef settings -# see possible settings in Section 2.2 (step 4) of manual +# see possible settings in Section 3.5 of the manual LMP_INC = -DLAMMPS_GZIP -DLAMMPS_PNG # MPI library -# see discussion in Section 2.2 (step 5) of manual +# see discussion in Section 3.4 of the manual # MPI wrapper compiler/linker can provide this info # can point to dummy MPI library in src/STUBS as in Makefile.serial # use -D MPICH and OMPI settings in INC to avoid C++ lib conflicts @@ -40,11 +40,11 @@ LMP_INC = -DLAMMPS_GZIP -DLAMMPS_PNG # LIB = name of MPI library MPI_INC = -DMPICH_SKIP_MPICXX -DOMPI_SKIP_MPICXX=1 -MPI_PATH = -MPI_LIB = +MPI_PATH = +MPI_LIB = # FFT library -# see discussion in Section 2.2 (step 6) of manual +# see discussion in Section 3.5.2 of manual # can be left blank to use provided KISS FFT library # INC = -DFFT setting, e.g. -DFFT_FFTW, FFT compiler settings # PATH = path for FFT library @@ -55,7 +55,7 @@ FFT_PATH = FFT_LIB = # JPEG and/or PNG library -# see discussion in Section 2.2 (step 7) of manual +# see discussion in Section 3.5.4 of manual # only needed if -DLAMMPS_JPEG or -DLAMMPS_PNG listed with LMP_INC # INC = path(s) for jpeglib.h and/or png.h # PATH = path(s) for JPEG library and/or PNG library @@ -69,8 +69,8 @@ JPG_LIB = -lpng # build rules and dependencies # do not edit this section -include Makefile.package.settings -include Makefile.package +include Makefile.package.settings +include Makefile.package EXTRA_INC = $(LMP_INC) $(PKG_INC) $(MPI_INC) $(FFT_INC) $(JPG_INC) $(PKG_SYSINC) EXTRA_PATH = $(PKG_PATH) $(MPI_PATH) $(FFT_PATH) $(JPG_PATH) $(PKG_SYSPATH) @@ -85,28 +85,27 @@ vpath %.h .. # Link target -$(EXE): $(OBJ) $(EXTRA_LINK_DEPENDS) - $(LINK) $(LINKFLAGS) $(EXTRA_PATH) $(OBJ) $(EXTRA_LIB) $(LIB) -o $(EXE) - $(SIZE) $(EXE) +$(EXE): main.o $(LMPLIB) $(EXTRA_LINK_DEPENDS) + $(LINK) $(LINKFLAGS) main.o $(EXTRA_PATH) $(LMPLINK) $(EXTRA_LIB) $(LIB) -o $@ + $(SIZE) $@ # Library targets -lib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(ARCHIVE) $(ARFLAGS) $(EXE) $(OBJ) +$(ARLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + @rm -f ../$(ARLIB) + $(ARCHIVE) $(ARFLAGS) ../$(ARLIB) $(OBJ) + @rm -f $(ARLIB) + @ln -s ../$(ARLIB) $(ARLIB) -shlib: $(OBJ) $(EXTRA_LINK_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o $(EXE) \ - $(OBJ) $(EXTRA_LIB) $(LIB) +$(SHLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o ../$(SHLIB) \ + $(OBJ) $(EXTRA_LIB) $(LIB) + @rm -f $(SHLIB) + @ln -s ../$(SHLIB) $(SHLIB) # Compilation rules -%.o:%.cpp $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< - -%.d:%.cpp $(EXTRA_CPP_DEPENDS) - $(CC) $(CCFLAGS) $(EXTRA_INC) $(DEPFLAGS) $< > $@ - -%.o:%.cu $(EXTRA_CPP_DEPENDS) +%.o:%.cpp $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< # Individual dependencies diff --git a/src/MANYBODY/pair_adp.cpp b/src/MANYBODY/pair_adp.cpp index e730466fcb6a4c3688a206c08d9d591b3309d33f..2a64839e98475da41493a34f5bd3b7e4e75792e8 100644 --- a/src/MANYBODY/pair_adp.cpp +++ b/src/MANYBODY/pair_adp.cpp @@ -29,11 +29,11 @@ #include "memory.h" #include "error.h" #include "utils.h" +#include "tokenizer.h" +#include "potential_file_reader.h" using namespace LAMMPS_NS; -#define MAXLINE 1024 - /* ---------------------------------------------------------------------- */ PairADP::PairADP(LAMMPS *lmp) : Pair(lmp) @@ -96,7 +96,7 @@ PairADP::~PairADP() if (setfl) { for (int i = 0; i < setfl->nelements; i++) delete [] setfl->elements[i]; delete [] setfl->elements; - delete [] setfl->mass; + memory->destroy(setfl->mass); memory->destroy(setfl->frho); memory->destroy(setfl->rhor); memory->destroy(setfl->z2r); @@ -453,7 +453,7 @@ void PairADP::coeff(int narg, char **arg) if (setfl) { for (i = 0; i < setfl->nelements; i++) delete [] setfl->elements[i]; delete [] setfl->elements; - delete [] setfl->mass; + memory->destroy(setfl->mass); memory->destroy(setfl->frho); memory->destroy(setfl->rhor); memory->destroy(setfl->z2r); @@ -541,110 +541,130 @@ void PairADP::read_file(char *filename) { Setfl *file = setfl; - // open potential file + // read potential file + if(comm->me == 0) { + PotentialFileReader reader(lmp, filename, "ADP"); - int me = comm->me; - FILE *fp; - char line[MAXLINE]; + try { + char * line = nullptr; - if (me == 0) { - fp = force->open_potential(filename); - if (fp == NULL) { - char str[128]; - snprintf(str,128,"Cannot open ADP potential file %s",filename); - error->one(FLERR,str); - } - } + reader.skip_line(); + reader.skip_line(); + reader.skip_line(); - // read and broadcast header - // extract element names from nelements line + // extract element names from nelements line + line = reader.next_line(1); + ValueTokenizer values(line); + file->nelements = values.next_int(); - int n; - if (me == 0) { - utils::sfgets(FLERR,line,MAXLINE,fp,filename,error); - utils::sfgets(FLERR,line,MAXLINE,fp,filename,error); - utils::sfgets(FLERR,line,MAXLINE,fp,filename,error); - utils::sfgets(FLERR,line,MAXLINE,fp,filename,error); - n = strlen(line) + 1; - } - MPI_Bcast(&n,1,MPI_INT,0,world); - MPI_Bcast(line,n,MPI_CHAR,0,world); + if (values.count() != file->nelements + 1) + error->one(FLERR,"Incorrect element names in ADP potential file"); + + file->elements = new char*[file->nelements]; + for (int i = 0; i < file->nelements; i++) { + const std::string word = values.next_string(); + const int n = word.length() + 1; + file->elements[i] = new char[n]; + strcpy(file->elements[i], word.c_str()); + } - sscanf(line,"%d",&file->nelements); - int nwords = atom->count_words(line); - if (nwords != file->nelements + 1) - error->all(FLERR,"Incorrect element names in ADP potential file"); + // + + line = reader.next_line(5); + values = ValueTokenizer(line); + file->nrho = values.next_int(); + file->drho = values.next_double(); + file->nr = values.next_int(); + file->dr = values.next_double(); + file->cut = values.next_double(); + + if ((file->nrho <= 0) || (file->nr <= 0) || (file->dr <= 0.0)) + error->one(FLERR,"Invalid EAM potential file"); + + memory->create(file->mass, file->nelements, "pair:mass"); + memory->create(file->frho, file->nelements, file->nrho + 1, "pair:frho"); + memory->create(file->rhor, file->nelements, file->nr + 1, "pair:rhor"); + memory->create(file->z2r, file->nelements, file->nelements, file->nr + 1, "pair:z2r"); + memory->create(file->u2r, file->nelements, file->nelements, file->nr + 1, "pair:u2r"); + memory->create(file->w2r, file->nelements, file->nelements, file->nr + 1, "pair:w2r"); + + for (int i = 0; i < file->nelements; i++) { + line = reader.next_line(2); + values = ValueTokenizer(line); + values.next_int(); // ignore + file->mass[i] = values.next_double(); + + reader.next_dvector(file->nrho, &file->frho[i][1]); + reader.next_dvector(file->nr, &file->rhor[i][1]); + } - char **words = new char*[file->nelements+1]; - nwords = 0; - strtok(line," \t\n\r\f"); - while ((words[nwords++] = strtok(NULL," \t\n\r\f"))) continue; + for (int i = 0; i < file->nelements; i++) { + for (int j = 0; j <= i; j++) { + reader.next_dvector(file->nr, &file->z2r[i][j][1]); + } + } - file->elements = new char*[file->nelements]; - for (int i = 0; i < file->nelements; i++) { - n = strlen(words[i]) + 1; - file->elements[i] = new char[n]; - strcpy(file->elements[i],words[i]); + for (int i = 0; i < file->nelements; i++) { + for (int j = 0; j <= i; j++) { + reader.next_dvector(file->nr, &file->u2r[i][j][1]); + } + } + + for (int i = 0; i < file->nelements; i++) { + for (int j = 0; j <= i; j++) { + reader.next_dvector(file->nr, &file->w2r[i][j][1]); + } + } + } catch (TokenizerException & e) { + error->one(FLERR, e.what()); + } } - delete [] words; - if (me == 0) { - utils::sfgets(FLERR,line,MAXLINE,fp,filename,error); - sscanf(line,"%d %lg %d %lg %lg", - &file->nrho,&file->drho,&file->nr,&file->dr,&file->cut); + // broadcast potential information + MPI_Bcast(&file->nelements, 1, MPI_INT, 0, world); + + MPI_Bcast(&file->nrho, 1, MPI_INT, 0, world); + MPI_Bcast(&file->drho, 1, MPI_DOUBLE, 0, world); + MPI_Bcast(&file->nr, 1, MPI_INT, 0, world); + MPI_Bcast(&file->dr, 1, MPI_DOUBLE, 0, world); + MPI_Bcast(&file->cut, 1, MPI_DOUBLE, 0, world); + + // allocate memory on other procs + if (comm->me != 0) { + file->elements = new char*[file->nelements]; + for (int i = 0; i < file->nelements; i++) file->elements[i] = nullptr; + memory->create(file->mass, file->nelements, "pair:mass"); + memory->create(file->frho, file->nelements, file->nrho + 1, "pair:frho"); + memory->create(file->rhor, file->nelements, file->nr + 1, "pair:rhor"); + memory->create(file->z2r, file->nelements, file->nelements, file->nr + 1, "pair:z2r"); + memory->create(file->u2r, file->nelements, file->nelements, file->nr + 1, "pair:u2r"); + memory->create(file->w2r, file->nelements, file->nelements, file->nr + 1, "pair:w2r"); } - MPI_Bcast(&file->nrho,1,MPI_INT,0,world); - MPI_Bcast(&file->drho,1,MPI_DOUBLE,0,world); - MPI_Bcast(&file->nr,1,MPI_INT,0,world); - MPI_Bcast(&file->dr,1,MPI_DOUBLE,0,world); - MPI_Bcast(&file->cut,1,MPI_DOUBLE,0,world); - - file->mass = new double[file->nelements]; - memory->create(file->frho,file->nelements,file->nrho+1,"pair:frho"); - memory->create(file->rhor,file->nelements,file->nr+1,"pair:rhor"); - memory->create(file->z2r,file->nelements,file->nelements,file->nr+1, - "pair:z2r"); - memory->create(file->u2r,file->nelements,file->nelements,file->nr+1, - "pair:u2r"); - memory->create(file->w2r,file->nelements,file->nelements,file->nr+1, - "pair:w2r"); - - int i,j,tmp; - for (i = 0; i < file->nelements; i++) { - if (me == 0) { - utils::sfgets(FLERR,line,MAXLINE,fp,filename,error); - sscanf(line,"%d %lg",&tmp,&file->mass[i]); - } - MPI_Bcast(&file->mass[i],1,MPI_DOUBLE,0,world); + // broadcast file->elements string array + for (int i = 0; i < file->nelements; i++) { + int n; + if (comm->me == 0) n = strlen(file->elements[i]) + 1; + MPI_Bcast(&n, 1, MPI_INT, 0, world); + if (comm->me != 0) file->elements[i] = new char[n]; + MPI_Bcast(file->elements[i], n, MPI_CHAR, 0, world); + } - if (me == 0) grab(fp,filename,file->nrho,&file->frho[i][1]); + // broadcast file->mass, frho, rhor + for (int i = 0; i < file->nelements; i++) { + MPI_Bcast(&file->mass[i],1,MPI_DOUBLE,0,world); MPI_Bcast(&file->frho[i][1],file->nrho,MPI_DOUBLE,0,world); - if (me == 0) grab(fp,filename,file->nr,&file->rhor[i][1]); MPI_Bcast(&file->rhor[i][1],file->nr,MPI_DOUBLE,0,world); } - for (i = 0; i < file->nelements; i++) - for (j = 0; j <= i; j++) { - if (me == 0) grab(fp,filename,file->nr,&file->z2r[i][j][1]); + // broadcast file->z2r, u2r, w2r + for (int i = 0; i < file->nelements; i++) { + for (int j = 0; j <= i; j++) { MPI_Bcast(&file->z2r[i][j][1],file->nr,MPI_DOUBLE,0,world); - } - - for (i = 0; i < file->nelements; i++) - for (j = 0; j <= i; j++) { - if (me == 0) grab(fp,filename,file->nr,&file->u2r[i][j][1]); MPI_Bcast(&file->u2r[i][j][1],file->nr,MPI_DOUBLE,0,world); - } - - for (i = 0; i < file->nelements; i++) - for (j = 0; j <= i; j++) { - if (me == 0) grab(fp,filename,file->nr,&file->w2r[i][j][1]); MPI_Bcast(&file->w2r[i][j][1],file->nr,MPI_DOUBLE,0,world); } - - // close the potential file - - if (me == 0) fclose(fp); + } } /* ---------------------------------------------------------------------- @@ -912,26 +932,6 @@ void PairADP::interpolate(int n, double delta, double *f, double **spline) } } -/* ---------------------------------------------------------------------- - grab n values from file fp and put them in list - values can be several to a line - only called by proc 0 -------------------------------------------------------------------------- */ - -void PairADP::grab(FILE *fp, char *filename, int n, double *list) -{ - char *ptr; - char line[MAXLINE]; - - int i = 0; - while (i < n) { - utils::sfgets(FLERR,line,MAXLINE,fp,filename,error); - ptr = strtok(line," \t\n\r\f"); - if (ptr) list[i++] = atof(ptr); - while ((ptr = strtok(NULL," \t\n\r\f"))) list[i++] = atof(ptr); - } -} - /* ---------------------------------------------------------------------- */ int PairADP::pack_forward_comm(int n, int *list, double *buf, diff --git a/src/MANYBODY/pair_adp.h b/src/MANYBODY/pair_adp.h index 360e910c2a71304c3e0fd41939efb1d374338734..65596113ba31c110ba141c9f0eb011b5af0543b4 100644 --- a/src/MANYBODY/pair_adp.h +++ b/src/MANYBODY/pair_adp.h @@ -82,7 +82,6 @@ class PairADP : public Pair { void allocate(); void array2spline(); void interpolate(int, double, double *, double **); - void grab(FILE *, char *, int, double *); void read_file(char *); void file2array(); diff --git a/src/MANYBODY/pair_bop.cpp b/src/MANYBODY/pair_bop.cpp index 10ab1d7080eb8be5e41a28f4721531444623a2f3..4b5f4c7d178d145be0ea630977c24b7b7f2b3e50 100644 --- a/src/MANYBODY/pair_bop.cpp +++ b/src/MANYBODY/pair_bop.cpp @@ -1035,145 +1035,6 @@ void PairBOP::gneigh() /* ---------------------------------------------------------------------- */ -void PairBOP::theta() -{ - int i,j,ii,jj,kk; - int itype,jtype,i12; - int temp_ij,temp_ik,temp_ijk; - int n,nlocal,nall,ks; - int nlisti; - int *ilist; - int *iilist; - int **firstneigh; - double rj2,rk2,rsq,ps; - double rj1k1,rj2k2; - double **x = atom->x; - int *type = atom->type; - - nlocal = atom->nlocal; - nall = nlocal+atom->nghost; - ilist = list->ilist; - firstneigh = list->firstneigh; - if(update_list!=0) - memory_theta_grow(); - else - memory_theta_create(); - for (ii = 0; ii < nall; ii++) { - if(ii=npairs) { - error->one(FLERR,"Too many atom pairs for pair bop"); - } - disij[0][temp_ij]=x[j][0]-x[i][0]; - disij[1][temp_ij]=x[j][1]-x[i][1]; - disij[2][temp_ij]=x[j][2]-x[i][2]; - rsq=disij[0][temp_ij]*disij[0][temp_ij] - +disij[1][temp_ij]*disij[1][temp_ij] - +disij[2][temp_ij]*disij[2][temp_ij]; - rij[temp_ij]=sqrt(rsq); - if(rij[temp_ij]<=rcut[i12]) - neigh_flag[temp_ij]=1; - else - neigh_flag[temp_ij]=0; - if(rij[temp_ij]<=rcut3[i12]) - neigh_flag3[temp_ij]=1; - else - neigh_flag3[temp_ij]=0; - ps=rij[temp_ij]*rdr[i12]+1.0; - ks=(int)ps; - if(nr-11.0) - ps=1.0; - betaS[temp_ij]=((pBetaS3[i12][ks-1]*ps+pBetaS2[i12][ks-1])*ps+pBetaS1[i12][ks-1])*ps+pBetaS[i12][ks-1]; - dBetaS[temp_ij]=(pBetaS6[i12][ks-1]*ps+pBetaS5[i12][ks-1])*ps - +pBetaS4[i12][ks-1]; - betaP[temp_ij]=((pBetaP3[i12][ks-1]*ps+pBetaP2[i12][ks-1])*ps - +pBetaP1[i12][ks-1])*ps+pBetaP[i12][ks-1]; - dBetaP[temp_ij]=(pBetaP6[i12][ks-1]*ps+pBetaP5[i12][ks-1])*ps - +pBetaP4[i12][ks-1]; - repul[temp_ij]=((pRepul3[i12][ks-1]*ps+pRepul2[i12][ks-1])*ps - +pRepul1[i12][ks-1])*ps+pRepul[i12][ks-1]; - dRepul[temp_ij]=(pRepul6[i12][ks-1]*ps+pRepul5[i12][ks-1])*ps - +pRepul4[i12][ks-1]; - } - } - for (ii = 0; ii < nall; ii++) { - n=0; - if(ii=cos_total) { - error->one(FLERR,"Too many atom triplets for pair bop"); - } - temp_ik=BOP_index[i]+kk; - temp_ijk=cos_index[i]+n; - if(temp_ijk>=cos_total) { - error->one(FLERR,"Too many atom triplets for pair bop"); - } - rk2=rij[temp_ik]*rij[temp_ik]; - rj1k1=rij[temp_ij]*rij[temp_ik]; - rj2k2=rj1k1*rj1k1; - if(temp_ijk>=cos_total) { - error->one(FLERR,"Too many atom triplets for pair bop"); - } - cosAng[temp_ijk]=(disij[0][temp_ij]*disij[0][temp_ik]+disij[1][temp_ij] - *disij[1][temp_ik]+disij[2][temp_ij]*disij[2][temp_ik])/rj1k1; - dcAng[temp_ijk][0][0]=(disij[0][temp_ik]*rj1k1-cosAng[temp_ijk] - *disij[0][temp_ij]*rk2)/(rj2k2); - dcAng[temp_ijk][1][0]=(disij[1][temp_ik]*rj1k1-cosAng[temp_ijk] - *disij[1][temp_ij]*rk2)/(rj2k2); - dcAng[temp_ijk][2][0]=(disij[2][temp_ik]*rj1k1-cosAng[temp_ijk] - *disij[2][temp_ij]*rk2)/(rj2k2); - dcAng[temp_ijk][0][1]=(disij[0][temp_ij]*rj1k1-cosAng[temp_ijk] - *disij[0][temp_ik]*rj2)/(rj2k2); - dcAng[temp_ijk][1][1]=(disij[1][temp_ij]*rj1k1-cosAng[temp_ijk] - *disij[1][temp_ik]*rj2)/(rj2k2); - dcAng[temp_ijk][2][1]=(disij[2][temp_ij]*rj1k1-cosAng[temp_ijk] - *disij[2][temp_ik]*rj2)/(rj2k2); - n++; - } - } - } -} - -/* ---------------------------------------------------------------------- */ - -void PairBOP::theta_mod() -{ - if(update_list!=0) - memory_theta_grow(); - else - memory_theta_create(); -} - -/* ---------------------------------------------------------------------- */ - /* The formulation differs slightly to avoid negative square roots in the calculation of Sigma^(1/2) of (a) Eq. 6 and (b) Eq. 11 */ @@ -5556,26 +5417,6 @@ void _noopt PairBOP::read_table(char *filename) } } -/* ---------------------------------------------------------------------- */ - -double PairBOP::cutoff(double rp,double vrcut,int mode,double r) -{ - double tmp,tmp_beta,tmp_alpha,cut_store; - - if(mode==1) { - tmp=(rsmall-rbig)*(r-rp)/(vrcut-rp)+rbig; - cut_store=(erfc(tmp)-erfc(rsmall))/(erfc(rbig)-erfc(rsmall)); - } - else { - tmp_beta=log(log(rbig)/log(rsmall))/log(rp/vrcut); - tmp_alpha=-log(rbig)/pow(rp,tmp_beta); - cut_store=(exp(-tmp_alpha*pow(r,tmp_beta))-exp(-tmp_alpha*pow(vrcut - ,tmp_beta)))/(exp(-tmp_alpha*pow(rp,tmp_beta))-exp(-tmp_alpha - *pow(vrcut,tmp_beta))); - } - return(cut_store); -} - /* ---------------------------------------------------------------------- memory usage of local atom-based arrays ------------------------------------------------------------------------- */ diff --git a/src/MANYBODY/pair_bop.h b/src/MANYBODY/pair_bop.h index ea8da2844e8cf4011e8894dae6d021038af93185..6c4b255d25d86a23f38237f9c7af728e079095e3 100644 --- a/src/MANYBODY/pair_bop.h +++ b/src/MANYBODY/pair_bop.h @@ -199,14 +199,11 @@ class PairBOP : public Pair { void setPrepul(); void setSign(); void gneigh(); - void theta(); - void theta_mod(); double sigmaBo(int, int); double PiBo(int, int); void memory_theta_create(); void memory_theta_destroy(); void memory_theta_grow(); - double cutoff(double, double, int, double); void read_table(char *); void allocate(); diff --git a/src/MANYBODY/pair_comb.cpp b/src/MANYBODY/pair_comb.cpp index 2fc4caec7b303bae8de37cfefdd57764f13fe96d..e2e5e3cefd67a5dd4ecdd10a2a9fea8610752fb5 100644 --- a/src/MANYBODY/pair_comb.cpp +++ b/src/MANYBODY/pair_comb.cpp @@ -34,11 +34,13 @@ #include "math_const.h" #include "memory.h" #include "error.h" +#include "utils.h" +#include "tokenizer.h" +#include "potential_file_reader.h" using namespace LAMMPS_NS; using namespace MathConst; -#define MAXLINE 1024 #define DELTA 4 #define PGDELTA 1 #define MAXNEIGH 24 @@ -580,192 +582,148 @@ double PairComb::init_one(int i, int j) void PairComb::read_file(char *file) { - int params_per_line = 49; - char **words = new char*[params_per_line+1]; - memory->sfree(params); - params = NULL; + params = nullptr; nparams = 0; maxparam = 0; // open file on proc 0 - - FILE *fp; if (comm->me == 0) { - fp = force->open_potential(file); - if (fp == NULL) { - char str[128]; - snprintf(str,128,"Cannot open COMB potential file %s",file); - error->one(FLERR,str); - } - } - - // read each line out of file, skipping blank lines or leading '#' - // store line of params if all 3 element tags are in element list - - int n,nwords,ielement,jelement,kelement; - char line[MAXLINE],*ptr; - int eof = 0; + PotentialFileReader reader(lmp, file, "COMB"); + char * line; + + while((line = reader.next_line(NPARAMS_PER_LINE))) { + try { + ValueTokenizer values(line," \t\n\r\f"); + + std::string iname = values.next_string(); + std::string jname = values.next_string(); + std::string kname = values.next_string(); + + // ielement,jelement,kelement = 1st args + // if all 3 args are in element list, then parse this line + // else skip to next line + int ielement, jelement, kelement; + + for (ielement = 0; ielement < nelements; ielement++) + if (iname == elements[ielement]) break; + if (ielement == nelements) continue; + for (jelement = 0; jelement < nelements; jelement++) + if (jname == elements[jelement]) break; + if (jelement == nelements) continue; + for (kelement = 0; kelement < nelements; kelement++) + if (kname == elements[kelement]) break; + if (kelement == nelements) continue; + + // load up parameter settings and error check their values + + if (nparams == maxparam) { + maxparam += DELTA; + params = (Param *) memory->srealloc(params,maxparam*sizeof(Param), + "pair:params"); + } - while (1) { - if (comm->me == 0) { - ptr = fgets(line,MAXLINE,fp); - if (ptr == NULL) { - eof = 1; - fclose(fp); - } else n = strlen(line) + 1; - } - MPI_Bcast(&eof,1,MPI_INT,0,world); - if (eof) break; - MPI_Bcast(&n,1,MPI_INT,0,world); - MPI_Bcast(line,n,MPI_CHAR,0,world); - - // strip comment, skip line if blank - - if ((ptr = strchr(line,'#'))) *ptr = '\0'; - nwords = atom->count_words(line); - if (nwords == 0) continue; - - // concatenate additional lines until have params_per_line words - - while (nwords < params_per_line) { - n = strlen(line); - if (comm->me == 0) { - ptr = fgets(&line[n],MAXLINE-n,fp); - if (ptr == NULL) { - eof = 1; - fclose(fp); - } else n = strlen(line) + 1; + params[nparams].ielement = ielement; + params[nparams].jelement = jelement; + params[nparams].kelement = kelement; + params[nparams].powerm = values.next_double(); + params[nparams].c = values.next_double(); + params[nparams].d = values.next_double(); + params[nparams].h = values.next_double(); + params[nparams].powern = values.next_double(); + params[nparams].beta = values.next_double(); + params[nparams].lam21 = values.next_double(); + params[nparams].lam22 = values.next_double(); + params[nparams].bigb1 = values.next_double(); + params[nparams].bigb2 = values.next_double(); + params[nparams].bigr = values.next_double(); + params[nparams].bigd = values.next_double(); + params[nparams].lam11 = values.next_double(); + params[nparams].lam12 = values.next_double(); + params[nparams].biga1 = values.next_double(); + params[nparams].biga2 = values.next_double(); + params[nparams].plp1 = values.next_double(); + params[nparams].plp3 = values.next_double(); + params[nparams].plp6 = values.next_double(); + params[nparams].a123 = values.next_double(); + params[nparams].aconf = values.next_double(); + params[nparams].addrep = values.next_double(); + params[nparams].romigb = values.next_double(); + params[nparams].romigc = values.next_double(); + params[nparams].romigd = values.next_double(); + params[nparams].romiga = values.next_double(); + params[nparams].QL1 = values.next_double(); + params[nparams].QU1 = values.next_double(); + params[nparams].DL1 = values.next_double(); + params[nparams].DU1 = values.next_double(); + params[nparams].QL2 = values.next_double(); + params[nparams].QU2 = values.next_double(); + params[nparams].DL2 = values.next_double(); + params[nparams].DU2 = values.next_double(); + params[nparams].chi = values.next_double(); + params[nparams].dj = values.next_double(); + params[nparams].dk = values.next_double(); + params[nparams].dl = values.next_double(); + params[nparams].dm = values.next_double(); + params[nparams].esm1 = values.next_double(); + params[nparams].cmn1 = values.next_double(); + params[nparams].cml1 = values.next_double(); + params[nparams].cmn2 = values.next_double(); + params[nparams].cml2 = values.next_double(); + params[nparams].coulcut = values.next_double(); + params[nparams].hfocor = values.next_double(); + } catch (TokenizerException & e) { + error->one(FLERR, e.what()); } - MPI_Bcast(&eof,1,MPI_INT,0,world); - if (eof) break; - MPI_Bcast(&n,1,MPI_INT,0,world); - MPI_Bcast(line,n,MPI_CHAR,0,world); - if ((ptr = strchr(line,'#'))) *ptr = '\0'; - nwords = atom->count_words(line); - } - - if (nwords != params_per_line) - error->all(FLERR,"Incorrect format in COMB potential file"); - - // words = ptrs to all words in line - - nwords = 0; - words[nwords++] = strtok(line," \t\n\r\f"); - while ((words[nwords++] = strtok(NULL," \t\n\r\f"))) continue; - - // ielement,jelement,kelement = 1st args - // if all 3 args are in element list, then parse this line - // else skip to next line - for (ielement = 0; ielement < nelements; ielement++) - if (strcmp(words[0],elements[ielement]) == 0) break; - if (ielement == nelements) continue; - for (jelement = 0; jelement < nelements; jelement++) - if (strcmp(words[1],elements[jelement]) == 0) break; - if (jelement == nelements) continue; - for (kelement = 0; kelement < nelements; kelement++) - if (strcmp(words[2],elements[kelement]) == 0) break; - if (kelement == nelements) continue; - - // load up parameter settings and error check their values - - if (nparams == maxparam) { - maxparam += DELTA; - params = (Param *) memory->srealloc(params,maxparam*sizeof(Param), - "pair:params"); + params[nparams].powermint = int(params[nparams].powerm); + + // parameter sanity checks + + if (params[nparams].lam11 < 0.0 || params[nparams].lam12 < 0.0 || + params[nparams].c < 0.0 || params[nparams].d < 0.0 || + params[nparams].powern < 0.0 || params[nparams].beta < 0.0 || + params[nparams].lam21 < 0.0 || params[nparams].lam22 < 0.0 || + params[nparams].bigb1< 0.0 || params[nparams].bigb2< 0.0 || + params[nparams].biga1< 0.0 || params[nparams].biga2< 0.0 || + params[nparams].bigr < 0.0 || params[nparams].bigd < 0.0 || + params[nparams].bigd > params[nparams].bigr || + params[nparams].powerm - params[nparams].powermint != 0.0 || + (params[nparams].powermint != 3 && params[nparams].powermint != 1) || + params[nparams].plp1 < 0.0 || params[nparams].plp3 < 0.0 || + params[nparams].plp6 < 0.0 || + params[nparams].a123 > 360.0 || params[nparams].aconf < 0.0 || + params[nparams].addrep < 0.0 || params[nparams].romigb < 0.0 || + params[nparams].romigc < 0.0 || params[nparams].romigd < 0.0 || + params[nparams].romiga < 0.0 || + params[nparams].QL1 > 0.0 || params[nparams].QU1 < 0.0 || + params[nparams].DL1 < 0.0 || params[nparams].DU1 > 0.0 || + params[nparams].QL2 > 0.0 || params[nparams].QU2 < 0.0 || + params[nparams].DL2 < 0.0 || params[nparams].DU2 > 0.0 || + params[nparams].chi < 0.0 || + // params[nparams].dj < 0.0 || params[nparams].dk < 0.0 || + // params[nparams].dl < 0.0 || params[nparams].dm < 0.0 || + params[nparams].esm1 < 0.0) + error->one(FLERR,"Illegal COMB parameter"); + + if (params[nparams].lam11 < params[nparams].lam21 || + params[nparams].lam12 < params[nparams].lam22 || + params[nparams].biga1< params[nparams].bigb1 || + params[nparams].biga2< params[nparams].bigb2) + error->one(FLERR,"Illegal COMB parameter"); + + nparams++; } + } + + MPI_Bcast(&nparams, 1, MPI_INT, 0, world); + MPI_Bcast(&maxparam, 1, MPI_INT, 0, world); - params[nparams].ielement = ielement; - params[nparams].jelement = jelement; - params[nparams].kelement = kelement; - params[nparams].powerm = atof(words[3]); - params[nparams].c = atof(words[4]); - params[nparams].d = atof(words[5]); - params[nparams].h = atof(words[6]); - params[nparams].powern = atof(words[7]); - params[nparams].beta = atof(words[8]); - params[nparams].lam21 = atof(words[9]); - params[nparams].lam22 = atof(words[10]); - params[nparams].bigb1 = atof(words[11]); - params[nparams].bigb2 = atof(words[12]); - params[nparams].bigr = atof(words[13]); - params[nparams].bigd = atof(words[14]); - params[nparams].lam11 = atof(words[15]); - params[nparams].lam12 = atof(words[16]); - params[nparams].biga1 = atof(words[17]); - params[nparams].biga2 = atof(words[18]); - params[nparams].plp1 = atof(words[19]); - params[nparams].plp3 = atof(words[20]); - params[nparams].plp6 = atof(words[21]); - params[nparams].a123 = atof(words[22]); - params[nparams].aconf= atof(words[23]); - params[nparams].addrep = atof(words[24]); - params[nparams].romigb = atof(words[25]); - params[nparams].romigc = atof(words[26]); - params[nparams].romigd = atof(words[27]); - params[nparams].romiga = atof(words[28]); - params[nparams].QL1 = atof(words[29]); - params[nparams].QU1 = atof(words[30]); - params[nparams].DL1 = atof(words[31]); - params[nparams].DU1 = atof(words[32]); - params[nparams].QL2 = atof(words[33]); - params[nparams].QU2 = atof(words[34]); - params[nparams].DL2 = atof(words[35]); - params[nparams].DU2 = atof(words[36]); - params[nparams].chi = atof(words[37]); - params[nparams].dj = atof(words[38]); - params[nparams].dk = atof(words[39]); - params[nparams].dl = atof(words[40]); - params[nparams].dm = atof(words[41]); - params[nparams].esm1 = atof(words[42]); - params[nparams].cmn1 = atof(words[43]); - params[nparams].cml1 = atof(words[44]); - params[nparams].cmn2 = atof(words[45]); - params[nparams].cml2 = atof(words[46]); - params[nparams].coulcut = atof(words[47]); - params[nparams].hfocor = atof(words[48]); - - params[nparams].powermint = int(params[nparams].powerm); - - // parameter sanity checks - - if (params[nparams].lam11 < 0.0 || params[nparams].lam12 < 0.0 || - params[nparams].c < 0.0 || params[nparams].d < 0.0 || - params[nparams].powern < 0.0 || params[nparams].beta < 0.0 || - params[nparams].lam21 < 0.0 || params[nparams].lam22 < 0.0 || - params[nparams].bigb1< 0.0 || params[nparams].bigb2< 0.0 || - params[nparams].biga1< 0.0 || params[nparams].biga2< 0.0 || - params[nparams].bigr < 0.0 || params[nparams].bigd < 0.0 || - params[nparams].bigd > params[nparams].bigr || - params[nparams].powerm - params[nparams].powermint != 0.0 || - (params[nparams].powermint != 3 && params[nparams].powermint != 1) || - params[nparams].plp1 < 0.0 || params[nparams].plp3 < 0.0 || - params[nparams].plp6 < 0.0 || - params[nparams].a123 > 360.0 || params[nparams].aconf < 0.0 || - params[nparams].addrep < 0.0 || params[nparams].romigb < 0.0 || - params[nparams].romigc < 0.0 || params[nparams].romigd < 0.0 || - params[nparams].romiga < 0.0 || - params[nparams].QL1 > 0.0 || params[nparams].QU1 < 0.0 || - params[nparams].DL1 < 0.0 || params[nparams].DU1 > 0.0 || - params[nparams].QL2 > 0.0 || params[nparams].QU2 < 0.0 || - params[nparams].DL2 < 0.0 || params[nparams].DU2 > 0.0 || - params[nparams].chi < 0.0 || -// params[nparams].dj < 0.0 || params[nparams].dk < 0.0 || -// params[nparams].dl < 0.0 || params[nparams].dm < 0.0 || - params[nparams].esm1 < 0.0) - error->all(FLERR,"Illegal COMB parameter"); - - if (params[nparams].lam11 < params[nparams].lam21 || - params[nparams].lam12 < params[nparams].lam22 || - params[nparams].biga1< params[nparams].bigb1 || - params[nparams].biga2< params[nparams].bigb2) - error->all(FLERR,"Illegal COMB parameter"); - - nparams++; + if(comm->me != 0) { + params = (Param *) memory->srealloc(params,maxparam*sizeof(Param), "pair:params"); } - delete [] words; + MPI_Bcast(params, maxparam*sizeof(Param), MPI_BYTE, 0, world); } /* ---------------------------------------------------------------------- */ diff --git a/src/MANYBODY/pair_comb.h b/src/MANYBODY/pair_comb.h index 19788dfab17190a6a028df2e59d1ea6602e7ecd2..7a3d279033bbf71733618df271d49e1f1455e2a7 100644 --- a/src/MANYBODY/pair_comb.h +++ b/src/MANYBODY/pair_comb.h @@ -38,6 +38,8 @@ class PairComb : public Pair { virtual double yasu_char(double *, int &); double enegtot; + static const int NPARAMS_PER_LINE = 49; + protected: struct Param { double lam11,lam12,lam21,lam22; diff --git a/src/MANYBODY/pair_comb3.cpp b/src/MANYBODY/pair_comb3.cpp index bf66ea550a0f7b6c1dbae04837632c68cb70e0b9..8a010df55df23d3340ae024477485e2b1bacc501 100644 --- a/src/MANYBODY/pair_comb3.cpp +++ b/src/MANYBODY/pair_comb3.cpp @@ -34,11 +34,12 @@ #include "memory.h" #include "error.h" #include "utils.h" +#include "tokenizer.h" +#include "potential_file_reader.h" using namespace LAMMPS_NS; using namespace MathConst; -#define MAXLINE 1024 #define DELTA 4 #define PGDELTA 1 #define MAXNEIGH 24 @@ -312,220 +313,211 @@ double PairComb3::init_one(int i, int j) void PairComb3::read_lib() { const unsigned int MAXLIB = 1024; - int i,j,k,l,nwords,m; + int i,j,k,l,m; int ii,jj,kk,ll,mm,iii; char s[MAXLIB]; - char **words = new char*[80]; - // open libraray file on proc 0 + // open library file on proc 0 if (comm->me == 0) { const char filename[] = "lib.comb3"; FILE *fp = force->open_potential(filename); if (fp == NULL) error->one(FLERR,"Cannot open COMB3 lib.comb3 file"); - // read and store at the same time - utils::sfgets(FLERR,s,MAXLIB,fp,filename,error); - utils::sfgets(FLERR,s,MAXLIB,fp,filename,error); - nwords = 0; - words[nwords++] = strtok(s," \t\n\r\f"); - while ((words[nwords++] = strtok(NULL," \t\n\r\f")))continue; - ccutoff[0] = atof(words[0]); - ccutoff[1] = atof(words[1]); - ccutoff[2] = atof(words[2]); - ccutoff[3] = atof(words[3]); - ccutoff[4] = atof(words[4]); - ccutoff[5] = atof(words[5]); - - utils::sfgets(FLERR,s,MAXLIB,fp,filename,error); - nwords = 0; - words[nwords++] = strtok(s," \t\n\r\f"); - while ((words[nwords++] = strtok(NULL," \t\n\r\f")))continue; - ch_a[0] = atof(words[0]); - ch_a[1] = atof(words[1]); - ch_a[2] = atof(words[2]); - ch_a[3] = atof(words[3]); - ch_a[4] = atof(words[4]); - ch_a[5] = atof(words[5]); - ch_a[6] = atof(words[6]); - - utils::sfgets(FLERR,s,MAXLIB,fp,filename,error); - nwords = 0; - words[nwords++] = strtok(s," \t\n\r\f"); - while ((words[nwords++] = strtok(NULL," \t\n\r\f")))continue; - nsplpcn = atoi(words[0]); - nsplrad = atoi(words[1]); - nspltor = atoi(words[2]); - - utils::sfgets(FLERR,s,MAXLIB,fp,filename,error); - nwords = 0; - words[nwords++] = strtok(s," \t\n\r\f"); - while ((words[nwords++] = strtok(NULL," \t\n\r\f")))continue; - maxx = atoi(words[0]); - maxy = atoi(words[1]); - maxz = atoi(words[2]); - - utils::sfgets(FLERR,s,MAXLIB,fp,filename,error); - nwords = 0; - words[nwords++] = strtok(s," \t\n\r\f"); - while ((words[nwords++] = strtok(NULL," \t\n\r\f")))continue; - maxxc = atoi(words[0]); - maxyc = atoi(words[1]); - maxconj = atoi(words[2]); - - for (l=0; lone(FLERR, e.what()); + } } k = 0; @@ -584,211 +576,163 @@ void PairComb3::read_lib() MPI_Bcast(&iin2[0][0],32,MPI_INT,0,world); MPI_Bcast(&iin3[0][0],192,MPI_INT,0,world); - delete [] words; } /* ---------------------------------------------------------------------- */ void PairComb3::read_file(char *file) { - int params_per_line = 74; - char **words = new char*[params_per_line+1]; - - if (params) delete [] params; - params = NULL; + memory->sfree(params); + params = nullptr; nparams = 0; + maxparam = 0; // open file on proc 0 - - FILE *fp; if (comm->me == 0) { - fp = force->open_potential(file); - if (fp == NULL) { - char str[128]; - snprintf(str,128,"Cannot open COMB3 potential file %s",file); - error->one(FLERR,str); - } - } - - // read each line out of file, skipping blank lines or leading '#' - // store line of params if all 3 element tags are in element list - - int n,nwords,ielement,jelement,kelement; - char line[MAXLINE],*ptr; - int eof = 0; - nwords=0; - while (1) { - if (comm->me == 0) { - ptr = fgets(line,MAXLINE,fp); - if (ptr == NULL) { - eof = 1; - fclose(fp); - } else n = strlen(line) + 1; - } - MPI_Bcast(&eof,1,MPI_INT,0,world); - if (eof) break; - MPI_Bcast(&n,1,MPI_INT,0,world); - MPI_Bcast(line,n,MPI_CHAR,0,world); - - // strip comment, skip line if blank - - if ((ptr = strchr(line,'#'))) *ptr = '\0'; - - nwords = atom->count_words(line); - if (nwords == 0) continue; - - // concatenate additional lines until have params_per_line words - - while (nwords < params_per_line) { - n = strlen(line); + PotentialFileReader reader(lmp, file, "COMB3"); + char * line; + + while((line = reader.next_line(NPARAMS_PER_LINE))) { + try { + ValueTokenizer values(line, " \t\n\r\f"); + + std::string iname = values.next_string(); + std::string jname = values.next_string(); + std::string kname = values.next_string(); + + // ielement,jelement,kelement = 1st args + // if all 3 args are in element list, then parse this line + // else skip to next line + int ielement, jelement, kelement; + + for (ielement = 0; ielement < nelements; ielement++) + if (iname == elements[ielement]) break; + if (ielement == nelements) continue; + for (jelement = 0; jelement < nelements; jelement++) + if (jname == elements[jelement]) break; + if (jelement == nelements) continue; + for (kelement = 0; kelement < nelements; kelement++) + if (kname == elements[kelement]) break; + if (kelement == nelements) continue; + + // load up parameter settings and error check their values + + if (nparams == maxparam) { + maxparam += DELTA; + params = (Param *) memory->srealloc(params,maxparam*sizeof(Param), + "pair:params"); + } - if (comm->me == 0) { - ptr = fgets(&line[n],MAXLINE-n,fp); - if (ptr == NULL) { - eof = 1; - fclose(fp); - } else n = strlen(line) + 1; + params[nparams].ielement = ielement; + params[nparams].jelement = jelement; + params[nparams].kelement = kelement; + params[nparams].ielementgp = values.next_int(); + params[nparams].jelementgp = values.next_int(); + params[nparams].kelementgp = values.next_int(); + params[nparams].ang_flag = values.next_int(); + params[nparams].pcn_flag = values.next_int(); + params[nparams].rad_flag = values.next_int(); + params[nparams].tor_flag = values.next_int(); + params[nparams].vdwflag = values.next_double(); + params[nparams].powerm = values.next_double(); + params[nparams].veps = values.next_double(); + params[nparams].vsig = values.next_double(); + params[nparams].paaa = values.next_double(); + params[nparams].pbbb = values.next_double(); + params[nparams].lami = values.next_double(); + params[nparams].alfi = values.next_double(); + params[nparams].powern = values.next_double(); + params[nparams].QL = values.next_double(); + params[nparams].QU = values.next_double(); + params[nparams].DL = values.next_double(); + params[nparams].DU = values.next_double(); + params[nparams].qmin = values.next_double(); + params[nparams].qmax = values.next_double(); + params[nparams].chi = values.next_double(); + params[nparams].dj = values.next_double(); + params[nparams].dk = values.next_double(); + params[nparams].dl = values.next_double(); + params[nparams].esm = values.next_double(); + params[nparams].cmn1 = values.next_double(); + params[nparams].cmn2 = values.next_double(); + params[nparams].pcmn1 = values.next_double(); + params[nparams].pcmn2 = values.next_double(); + params[nparams].coulcut = values.next_double(); + params[nparams].polz = values.next_double(); + params[nparams].curl = values.next_double(); + params[nparams].curlcut1 = values.next_double(); + params[nparams].curlcut2 = values.next_double(); + params[nparams].curl0 = values.next_double(); + params[nparams].alpha1 = values.next_double(); + params[nparams].bigB1 = values.next_double(); + params[nparams].alpha2 = values.next_double(); + params[nparams].bigB2 = values.next_double(); + params[nparams].alpha3 = values.next_double(); + params[nparams].bigB3 = values.next_double(); + params[nparams].lambda = values.next_double(); + params[nparams].bigA = values.next_double(); + params[nparams].beta = values.next_double(); + params[nparams].bigr = values.next_double(); + params[nparams].bigd = values.next_double(); + params[nparams].pcos6 = values.next_double(); + params[nparams].pcos5 = values.next_double(); + params[nparams].pcos4 = values.next_double(); + params[nparams].pcos3 = values.next_double(); + params[nparams].pcos2 = values.next_double(); + params[nparams].pcos1 = values.next_double(); + params[nparams].pcos0 = values.next_double(); + params[nparams].pcna = values.next_double(); + params[nparams].pcnb = values.next_double(); + params[nparams].pcnc = values.next_double(); + params[nparams].pcnd = values.next_double(); + params[nparams].p6p0 = values.next_double(); + params[nparams].p6p1 = values.next_double(); + params[nparams].p6p2 = values.next_double(); + params[nparams].p6p3 = values.next_double(); + params[nparams].p6p4 = values.next_double(); + params[nparams].p6p5 = values.next_double(); + params[nparams].p6p6 = values.next_double(); + params[nparams].ptork1 = values.next_double(); + params[nparams].ptork2 = values.next_double(); + params[nparams].addrepr = values.next_double(); + params[nparams].addrep = values.next_double(); + params[nparams].pcross = values.next_double(); + params[nparams].powermint = int(params[nparams].powerm); + } catch (TokenizerException & e) { + error->one(FLERR, e.what()); } - MPI_Bcast(&eof,1,MPI_INT,0,world); - if (eof) break; - MPI_Bcast(&n,1,MPI_INT,0,world); - MPI_Bcast(line,n,MPI_CHAR,0,world); - if ((ptr = strchr(line,'#'))) *ptr = '\0'; - nwords = atom->count_words(line); - } - if (nwords != params_per_line){ - error->all(FLERR,"Incorrect format in COMB3 potential file"); -} - // words = ptrs to all words in line - nwords = 0; - words[nwords++] = strtok(line," \t\n\r\f"); - while ((nwords <= params_per_line) - && (words[nwords++] = strtok(NULL," \t\n\r\f"))) { - continue; + // parameter sanity checks + + if (params[nparams].lambda < 0.0 || params[nparams].powern < 0.0 || + params[nparams].beta < 0.0 || params[nparams].alpha1 < 0.0 || + params[nparams].bigB1< 0.0 || params[nparams].bigA< 0.0 || + params[nparams].bigB2< 0.0 || params[nparams].alpha2 <0.0 || + params[nparams].bigB3< 0.0 || params[nparams].alpha3 <0.0 || + params[nparams].bigr < 0.0 || params[nparams].bigd < 0.0 || + params[nparams].bigd > params[nparams].bigr || + params[nparams].powerm - params[nparams].powermint != 0.0 || + params[nparams].addrepr < 0.0 || params[nparams].powermint < 1.0 || + params[nparams].QL > 0.0 || params[nparams].QU < 0.0 || + params[nparams].DL < 0.0 || params[nparams].DU > 0.0 || + params[nparams].pcross < 0.0 || + params[nparams].esm < 0.0 || params[nparams].veps < 0.0 || + params[nparams].vsig < 0.0 || params[nparams].vdwflag < 0.0 + ) + error->one(FLERR,"Illegal COMB3 parameter"); + + nparams++; } + } - // ielement,jelement,kelement = 1st args - // if all 3 args are in element list, then parse this line - // else skip to next line - - for (ielement = 0; ielement < nelements; ielement++) - if (strcmp(words[0],elements[ielement]) == 0) break; - if (ielement == nelements) continue; - for (jelement = 0; jelement < nelements; jelement++) - if (strcmp(words[1],elements[jelement]) == 0) break; - if (jelement == nelements) continue; - for (kelement = 0; kelement < nelements; kelement++) - if (strcmp(words[2],elements[kelement]) == 0) break; - if (kelement == nelements) continue; - - // load up parameter settings and error check their values - - if (nparams == maxparam) { - maxparam += DELTA; - params = (Param *) memory->srealloc(params,maxparam*sizeof(Param), - "pair:params"); - } + MPI_Bcast(&nparams, 1, MPI_INT, 0, world); + MPI_Bcast(&maxparam, 1, MPI_INT, 0, world); + + if(comm->me != 0) { + params = (Param *) memory->srealloc(params,maxparam*sizeof(Param), "pair:params"); + } - params[nparams].ielement = ielement; - params[nparams].jelement = jelement; - params[nparams].kelement = kelement; - params[nparams].ielementgp = atoi(words[3]); - params[nparams].jelementgp = atoi(words[4]); - params[nparams].kelementgp = atoi(words[5]); - params[nparams].ang_flag = atoi(words[6]); - params[nparams].pcn_flag = atoi(words[7]); - params[nparams].rad_flag = atoi(words[8]); - params[nparams].tor_flag = atoi(words[9]); - params[nparams].vdwflag = atof(words[10]); - params[nparams].powerm = atof(words[11]); - params[nparams].veps = atof(words[12]); - params[nparams].vsig = atof(words[13]); - params[nparams].paaa = atof(words[14]); - params[nparams].pbbb = atof(words[15]); - params[nparams].lami = atof(words[16]); - params[nparams].alfi = atof(words[17]); - params[nparams].powern = atof(words[18]); - params[nparams].QL = atof(words[19]); - params[nparams].QU = atof(words[20]); - params[nparams].DL = atof(words[21]); - params[nparams].DU = atof(words[22]); - params[nparams].qmin = atof(words[23]); - params[nparams].qmax = atof(words[24]); - params[nparams].chi = atof(words[25]); - params[nparams].dj = atof(words[26]); - params[nparams].dk = atof(words[27]); - params[nparams].dl = atof(words[28]); - params[nparams].esm = atof(words[29]); - params[nparams].cmn1 = atof(words[30]); - params[nparams].cmn2 = atof(words[31]); - params[nparams].pcmn1 = atof(words[32]); - params[nparams].pcmn2 = atof(words[33]); - params[nparams].coulcut = atof(words[34]); - params[nparams].polz = atof(words[35]); - params[nparams].curl = atof(words[36]); - params[nparams].curlcut1 = atof(words[37]); - params[nparams].curlcut2 = atof(words[38]); - params[nparams].curl0 = atof(words[39]); - params[nparams].alpha1 = atof(words[40]); - params[nparams].bigB1 = atof(words[41]); - params[nparams].alpha2 = atof(words[42]); - params[nparams].bigB2 = atof(words[43]); - params[nparams].alpha3 = atof(words[44]); - params[nparams].bigB3 = atof(words[45]); - params[nparams].lambda = atof(words[46]); - params[nparams].bigA = atof(words[47]); - params[nparams].beta = atof(words[48]); - params[nparams].bigr = atof(words[49]); - params[nparams].bigd = atof(words[50]); - params[nparams].pcos6 = atof(words[51]); - params[nparams].pcos5 = atof(words[52]); - params[nparams].pcos4 = atof(words[53]); - params[nparams].pcos3 = atof(words[54]); - params[nparams].pcos2 = atof(words[55]); - params[nparams].pcos1 = atof(words[56]); - params[nparams].pcos0 = atof(words[57]); - params[nparams].pcna = atof(words[58]); - params[nparams].pcnb = atof(words[59]); - params[nparams].pcnc = atof(words[60]); - params[nparams].pcnd = atof(words[61]); - params[nparams].p6p0 = atof(words[62]); - params[nparams].p6p1 = atof(words[63]); - params[nparams].p6p2 = atof(words[64]); - params[nparams].p6p3 = atof(words[65]); - params[nparams].p6p4 = atof(words[66]); - params[nparams].p6p5 = atof(words[67]); - params[nparams].p6p6 = atof(words[68]); - params[nparams].ptork1=atof(words[69]); - params[nparams].ptork2=atof(words[70]); - params[nparams].addrepr=atof(words[71]); - params[nparams].addrep=atof(words[72]); - params[nparams].pcross = atof(words[73]); - params[nparams].powermint = int(params[nparams].powerm); - - // parameter sanity checks - - if (params[nparams].lambda < 0.0 || params[nparams].powern < 0.0 || - params[nparams].beta < 0.0 || params[nparams].alpha1 < 0.0 || - params[nparams].bigB1< 0.0 || params[nparams].bigA< 0.0 || - params[nparams].bigB2< 0.0 || params[nparams].alpha2 <0.0 || - params[nparams].bigB3< 0.0 || params[nparams].alpha3 <0.0 || - params[nparams].bigr < 0.0 || params[nparams].bigd < 0.0 || - params[nparams].bigd > params[nparams].bigr || - params[nparams].powerm - params[nparams].powermint != 0.0 || - params[nparams].addrepr < 0.0 || params[nparams].powermint < 1.0 || - params[nparams].QL > 0.0 || params[nparams].QU < 0.0 || - params[nparams].DL < 0.0 || params[nparams].DU > 0.0 || - params[nparams].pcross < 0.0 || - params[nparams].esm < 0.0 || params[nparams].veps < 0.0 || - params[nparams].vsig < 0.0 || params[nparams].vdwflag < 0.0 - ) - error->all(FLERR,"Illegal COMB3 parameter"); - - nparams++; - } - - delete [] words; + MPI_Bcast(params, maxparam*sizeof(Param), MPI_BYTE, 0, world); } /* ---------------------------------------------------------------------- */ diff --git a/src/MANYBODY/pair_comb3.h b/src/MANYBODY/pair_comb3.h index 210f84313961c9fd09f1764f96fb22114306af9e..567859127bc02babd1aae836f97831b10aee2529 100644 --- a/src/MANYBODY/pair_comb3.h +++ b/src/MANYBODY/pair_comb3.h @@ -37,8 +37,10 @@ class PairComb3 : public Pair { virtual double combqeq(double *, int &); double enegtot; - // general potential parameters + static const int NPARAMS_PER_LINE = 74; + protected: + // general potential parameters struct Param { int ielement,jelement,kelement,powermint; int ielementgp,jelementgp,kelementgp; //element group diff --git a/src/MANYBODY/pair_eam.cpp b/src/MANYBODY/pair_eam.cpp index a1bc6e1eb46e084c77d142430346046d63401407..0013a3271d6f5966370dff9fabe3620e90b3eeb0 100644 --- a/src/MANYBODY/pair_eam.cpp +++ b/src/MANYBODY/pair_eam.cpp @@ -29,6 +29,8 @@ #include "error.h" #include "update.h" #include "utils.h" +#include "tokenizer.h" +#include "potential_file_reader.h" using namespace LAMMPS_NS; @@ -462,54 +464,59 @@ void PairEAM::read_file(char *filename) { Funcfl *file = &funcfl[nfuncfl-1]; - int me = comm->me; - FILE *fptr; - char line[MAXLINE]; + // read potential file + if(comm->me == 0) { + PotentialFileReader reader(lmp, filename, "EAM"); - if (me == 0) { - fptr = force->open_potential(filename); - if (fptr == NULL) { - char str[128]; - snprintf(str,128,"Cannot open EAM potential file %s",filename); - error->one(FLERR,str); - } - } + try { + char * line = nullptr; - int tmp,nwords; - if (me == 0) { - utils::sfgets(FLERR,line,MAXLINE,fptr,filename,error); - utils::sfgets(FLERR,line,MAXLINE,fptr,filename,error); - sscanf(line,"%d %lg",&tmp,&file->mass); - utils::sfgets(FLERR,line,MAXLINE,fptr,filename,error); - nwords = sscanf(line,"%d %lg %d %lg %lg", - &file->nrho,&file->drho,&file->nr,&file->dr,&file->cut); - } + reader.skip_line(); - MPI_Bcast(&nwords,1,MPI_INT,0,world); - MPI_Bcast(&file->mass,1,MPI_DOUBLE,0,world); - MPI_Bcast(&file->nrho,1,MPI_INT,0,world); - MPI_Bcast(&file->drho,1,MPI_DOUBLE,0,world); - MPI_Bcast(&file->nr,1,MPI_INT,0,world); - MPI_Bcast(&file->dr,1,MPI_DOUBLE,0,world); - MPI_Bcast(&file->cut,1,MPI_DOUBLE,0,world); + line = reader.next_line(2); + ValueTokenizer values(line); + values.next_int(); // ignore + file->mass = values.next_double(); - if ((nwords != 5) || (file->nrho <= 0) || (file->nr <= 0) || (file->dr <= 0.0)) - error->all(FLERR,"Invalid EAM potential file"); + line = reader.next_line(5); + values = ValueTokenizer(line); + file->nrho = values.next_int(); + file->drho = values.next_double(); + file->nr = values.next_int(); + file->dr = values.next_double(); + file->cut = values.next_double(); - memory->create(file->frho,(file->nrho+1),"pair:frho"); - memory->create(file->rhor,(file->nr+1),"pair:rhor"); - memory->create(file->zr,(file->nr+1),"pair:zr"); + if ((file->nrho <= 0) || (file->nr <= 0) || (file->dr <= 0.0)) + error->one(FLERR,"Invalid EAM potential file"); - if (me == 0) grab(fptr,file->nrho,&file->frho[1]); - MPI_Bcast(&file->frho[1],file->nrho,MPI_DOUBLE,0,world); + memory->create(file->frho, (file->nrho+1), "pair:frho"); + memory->create(file->rhor, (file->nr+1), "pair:rhor"); + memory->create(file->zr, (file->nr+1), "pair:zr"); - if (me == 0) grab(fptr,file->nr,&file->zr[1]); - MPI_Bcast(&file->zr[1],file->nr,MPI_DOUBLE,0,world); + reader.next_dvector(file->nrho, &file->frho[1]); + reader.next_dvector(file->nr, &file->zr[1]); + reader.next_dvector(file->nr, &file->rhor[1]); + } catch (TokenizerException & e) { + error->one(FLERR, e.what()); + } + } - if (me == 0) grab(fptr,file->nr,&file->rhor[1]); - MPI_Bcast(&file->rhor[1],file->nr,MPI_DOUBLE,0,world); + MPI_Bcast(&file->mass, 1, MPI_DOUBLE, 0, world); + MPI_Bcast(&file->nrho, 1, MPI_INT, 0, world); + MPI_Bcast(&file->drho, 1, MPI_DOUBLE, 0, world); + MPI_Bcast(&file->nr, 1, MPI_INT, 0, world); + MPI_Bcast(&file->dr, 1, MPI_DOUBLE, 0, world); + MPI_Bcast(&file->cut, 1, MPI_DOUBLE, 0, world); + + if(comm->me != 0) { + memory->create(file->frho, (file->nrho+1), "pair:frho"); + memory->create(file->rhor, (file->nr+1), "pair:rhor"); + memory->create(file->zr, (file->nr+1), "pair:zr"); + } - if (me == 0) fclose(fptr); + MPI_Bcast(&file->frho[1], file->nrho, MPI_DOUBLE, 0, world); + MPI_Bcast(&file->zr[1], file->nr, MPI_DOUBLE, 0, world); + MPI_Bcast(&file->rhor[1], file->nr, MPI_DOUBLE, 0, world); } /* ---------------------------------------------------------------------- @@ -782,26 +789,6 @@ void PairEAM::interpolate(int n, double delta, double *f, double **spline) } } -/* ---------------------------------------------------------------------- - grab n values from file fp and put them in list - values can be several to a line - only called by proc 0 -------------------------------------------------------------------------- */ - -void PairEAM::grab(FILE *fptr, int n, double *list) -{ - char *ptr; - char line[MAXLINE]; - - int i = 0; - while (i < n) { - utils::sfgets(FLERR,line,MAXLINE,fptr,NULL,error); - ptr = strtok(line," \t\n\r\f"); - if (ptr) list[i++] = atof(ptr); - while ((ptr = strtok(NULL," \t\n\r\f"))) list[i++] = atof(ptr); - } -} - /* ---------------------------------------------------------------------- */ double PairEAM::single(int i, int j, int itype, int jtype, diff --git a/src/MANYBODY/pair_eam.h b/src/MANYBODY/pair_eam.h index d98dba1e66863201d206fa8ed85ad81c5b9bec85..ed525a471c2b535559354d87c178d9c4057cb590 100644 --- a/src/MANYBODY/pair_eam.h +++ b/src/MANYBODY/pair_eam.h @@ -107,7 +107,6 @@ class PairEAM : public Pair { virtual void allocate(); virtual void array2spline(); void interpolate(int, double, double *, double **); - void grab(FILE *, int, double *); virtual void read_file(char *); virtual void file2array(); diff --git a/src/MANYBODY/pair_eam_alloy.cpp b/src/MANYBODY/pair_eam_alloy.cpp index a9622f9e075de0eacd0c3e3f5555a30911dbe727..65ed9b7d2f63893b8641305d995decc3401d3660 100644 --- a/src/MANYBODY/pair_eam_alloy.cpp +++ b/src/MANYBODY/pair_eam_alloy.cpp @@ -24,11 +24,11 @@ #include "memory.h" #include "error.h" #include "utils.h" +#include "tokenizer.h" +#include "potential_file_reader.h" using namespace LAMMPS_NS; -#define MAXLINE 1024 - /* ---------------------------------------------------------------------- */ PairEAMAlloy::PairEAMAlloy(LAMMPS *lmp) : PairEAM(lmp) @@ -61,7 +61,7 @@ void PairEAMAlloy::coeff(int narg, char **arg) if (setfl) { for (i = 0; i < setfl->nelements; i++) delete [] setfl->elements[i]; delete [] setfl->elements; - delete [] setfl->mass; + memory->destroy(setfl->mass); memory->destroy(setfl->frho); memory->destroy(setfl->rhor); memory->destroy(setfl->z2r); @@ -117,98 +117,112 @@ void PairEAMAlloy::read_file(char *filename) { Setfl *file = setfl; - // open potential file + // read potential file + if(comm->me == 0) { + PotentialFileReader reader(lmp, filename, "EAM"); - int me = comm->me; - FILE *fptr; - char line[MAXLINE]; + try { + char * line = nullptr; - if (me == 0) { - fptr = force->open_potential(filename); - if (fptr == NULL) { - char str[128]; - snprintf(str,128,"Cannot open EAM potential file %s",filename); - error->one(FLERR,str); - } - } + reader.skip_line(); + reader.skip_line(); + reader.skip_line(); - // read and broadcast header - // extract element names from nelements line + // extract element names from nelements line + line = reader.next_line(1); + ValueTokenizer values(line); + file->nelements = values.next_int(); - int n; - if (me == 0) { - utils::sfgets(FLERR,line,MAXLINE,fptr,filename,error); - utils::sfgets(FLERR,line,MAXLINE,fptr,filename,error); - utils::sfgets(FLERR,line,MAXLINE,fptr,filename,error); - utils::sfgets(FLERR,line,MAXLINE,fptr,filename,error); - n = strlen(line) + 1; - } - MPI_Bcast(&n,1,MPI_INT,0,world); - MPI_Bcast(line,n,MPI_CHAR,0,world); + if (values.count() != file->nelements + 1) + error->one(FLERR,"Incorrect element names in EAM potential file"); - sscanf(line,"%d",&file->nelements); - int nwords = atom->count_words(line); - if (nwords != file->nelements + 1) - error->all(FLERR,"Incorrect element names in EAM potential file"); + file->elements = new char*[file->nelements]; + for (int i = 0; i < file->nelements; i++) { + const std::string word = values.next_string(); + const int n = word.length() + 1; + file->elements[i] = new char[n]; + strcpy(file->elements[i], word.c_str()); + } - char **words = new char*[file->nelements+1]; - nwords = 0; - strtok(line," \t\n\r\f"); - while ((words[nwords++] = strtok(NULL," \t\n\r\f"))) continue; + // - file->elements = new char*[file->nelements]; - for (int i = 0; i < file->nelements; i++) { - n = strlen(words[i]) + 1; - file->elements[i] = new char[n]; - strcpy(file->elements[i],words[i]); - } - delete [] words; + line = reader.next_line(5); + values = ValueTokenizer(line); + file->nrho = values.next_int(); + file->drho = values.next_double(); + file->nr = values.next_int(); + file->dr = values.next_double(); + file->cut = values.next_double(); - if (me == 0) { - utils::sfgets(FLERR,line,MAXLINE,fptr,filename,error); - nwords = sscanf(line,"%d %lg %d %lg %lg", - &file->nrho,&file->drho,&file->nr,&file->dr,&file->cut); - } + if ((file->nrho <= 0) || (file->nr <= 0) || (file->dr <= 0.0)) + error->one(FLERR,"Invalid EAM potential file"); + + memory->create(file->mass, file->nelements, "pair:mass"); + memory->create(file->frho, file->nelements, file->nrho + 1, "pair:frho"); + memory->create(file->rhor, file->nelements, file->nr + 1, "pair:rhor"); + memory->create(file->z2r, file->nelements, file->nelements, file->nr + 1, "pair:z2r"); + + for (int i = 0; i < file->nelements; i++) { + line = reader.next_line(2); + values = ValueTokenizer(line); + values.next_int(); // ignore + file->mass[i] = values.next_double(); + + reader.next_dvector(file->nrho, &file->frho[i][1]); + reader.next_dvector(file->nr, &file->rhor[i][1]); + } - MPI_Bcast(&nwords,1,MPI_INT,0,world); - MPI_Bcast(&file->nrho,1,MPI_INT,0,world); - MPI_Bcast(&file->drho,1,MPI_DOUBLE,0,world); - MPI_Bcast(&file->nr,1,MPI_INT,0,world); - MPI_Bcast(&file->dr,1,MPI_DOUBLE,0,world); - MPI_Bcast(&file->cut,1,MPI_DOUBLE,0,world); - - if ((nwords != 5) || (file->nrho <= 0) || (file->nr <= 0) || (file->dr <= 0.0)) - error->all(FLERR,"Invalid EAM potential file"); - - file->mass = new double[file->nelements]; - memory->create(file->frho,file->nelements,file->nrho+1,"pair:frho"); - memory->create(file->rhor,file->nelements,file->nr+1,"pair:rhor"); - memory->create(file->z2r,file->nelements,file->nelements,file->nr+1, - "pair:z2r"); - - int i,j,tmp; - for (i = 0; i < file->nelements; i++) { - if (me == 0) { - utils::sfgets(FLERR,line,MAXLINE,fptr,filename,error); - sscanf(line,"%d %lg",&tmp,&file->mass[i]); + for (int i = 0; i < file->nelements; i++) { + for (int j = 0; j <= i; j++) { + reader.next_dvector(file->nr, &file->z2r[i][j][1]); + } + } + } catch (TokenizerException & e) { + error->one(FLERR, e.what()); } - MPI_Bcast(&file->mass[i],1,MPI_DOUBLE,0,world); + } - if (me == 0) grab(fptr,file->nrho,&file->frho[i][1]); - MPI_Bcast(&file->frho[i][1],file->nrho,MPI_DOUBLE,0,world); - if (me == 0) grab(fptr,file->nr,&file->rhor[i][1]); - MPI_Bcast(&file->rhor[i][1],file->nr,MPI_DOUBLE,0,world); + // broadcast potential information + MPI_Bcast(&file->nelements, 1, MPI_INT, 0, world); + + MPI_Bcast(&file->nrho, 1, MPI_INT, 0, world); + MPI_Bcast(&file->drho, 1, MPI_DOUBLE, 0, world); + MPI_Bcast(&file->nr, 1, MPI_INT, 0, world); + MPI_Bcast(&file->dr, 1, MPI_DOUBLE, 0, world); + MPI_Bcast(&file->cut, 1, MPI_DOUBLE, 0, world); + + // allocate memory on other procs + if (comm->me != 0) { + file->elements = new char*[file->nelements]; + for (int i = 0; i < file->nelements; i++) file->elements[i] = nullptr; + memory->create(file->mass, file->nelements, "pair:mass"); + memory->create(file->frho, file->nelements, file->nrho + 1, "pair:frho"); + memory->create(file->rhor, file->nelements, file->nr + 1, "pair:rhor"); + memory->create(file->z2r, file->nelements, file->nelements, file->nr + 1, "pair:z2r"); } - for (i = 0; i < file->nelements; i++) - for (j = 0; j <= i; j++) { - if (me == 0) grab(fptr,file->nr,&file->z2r[i][j][1]); - MPI_Bcast(&file->z2r[i][j][1],file->nr,MPI_DOUBLE,0,world); - } + // broadcast file->elements string array + for (int i = 0; i < file->nelements; i++) { + int n; + if (comm->me == 0) n = strlen(file->elements[i]) + 1; + MPI_Bcast(&n, 1, MPI_INT, 0, world); + if (comm->me != 0) file->elements[i] = new char[n]; + MPI_Bcast(file->elements[i], n, MPI_CHAR, 0, world); + } - // close the potential file + // broadcast file->mass, frho, rhor + for (int i = 0; i < file->nelements; i++) { + MPI_Bcast(&file->mass[i], 1, MPI_DOUBLE, 0, world); + MPI_Bcast(&file->frho[i][1], file->nrho, MPI_DOUBLE, 0, world); + MPI_Bcast(&file->rhor[i][1], file->nr, MPI_DOUBLE, 0, world); + } - if (me == 0) fclose(fptr); + // broadcast file->z2r + for (int i = 0; i < file->nelements; i++) { + for (int j = 0; j <= i; j++) { + MPI_Bcast(&file->z2r[i][j][1], file->nr, MPI_DOUBLE, 0, world); + } + } } /* ---------------------------------------------------------------------- diff --git a/src/MANYBODY/pair_eam_cd.cpp b/src/MANYBODY/pair_eam_cd.cpp index 28004eae7f653842fa318604019c9489cbc29e48..099ffd77cda452d565a639726ab63a70e8fe2733 100644 --- a/src/MANYBODY/pair_eam_cd.cpp +++ b/src/MANYBODY/pair_eam_cd.cpp @@ -28,6 +28,7 @@ #include "neigh_list.h" #include "memory.h" #include "error.h" +#include "tokenizer.h" using namespace LAMMPS_NS; @@ -512,16 +513,20 @@ void PairEAMCD::read_h_coeff(char *filename) while(fgets(nextline, MAXLINE, fptr) != NULL) { strcpy(line, nextline); } - char* ptr = strtok(line, " \t\n\r\f"); - int degree = atoi(ptr); + + ValueTokenizer values(line, " \t\n\r\f"); + int degree = values.next_int(); nhcoeff = degree+1; + + if (values.count() != nhcoeff + 1 || nhcoeff < 1) + error->one(FLERR, "Failed to read h(x) function coefficients in EAM file."); + hcoeff = new double[nhcoeff]; + int i = 0; - while((ptr = strtok(NULL," \t\n\r\f")) != NULL && i < nhcoeff) { - hcoeff[i++] = atof(ptr); + while(values.has_next()) { + hcoeff[i++] = values.next_double(); } - if (i != nhcoeff || nhcoeff < 1) - error->one(FLERR,"Failed to read h(x) function coefficients from EAM file."); // Close the potential file. diff --git a/src/MANYBODY/pair_eam_fs.cpp b/src/MANYBODY/pair_eam_fs.cpp index c91e7b5298b9bba1dc76632390b053b173ef06bb..fe4fa9526800d144f30f78aad035f9aa3f632572 100644 --- a/src/MANYBODY/pair_eam_fs.cpp +++ b/src/MANYBODY/pair_eam_fs.cpp @@ -24,11 +24,11 @@ #include "memory.h" #include "error.h" #include "utils.h" +#include "tokenizer.h" +#include "potential_file_reader.h" using namespace LAMMPS_NS; -#define MAXLINE 1024 - /* ---------------------------------------------------------------------- */ PairEAMFS::PairEAMFS(LAMMPS *lmp) : PairEAM(lmp) @@ -61,7 +61,7 @@ void PairEAMFS::coeff(int narg, char **arg) if (fs) { for (i = 0; i < fs->nelements; i++) delete [] fs->elements[i]; delete [] fs->elements; - delete [] fs->mass; + memory->destroy(fs->mass); memory->destroy(fs->frho); memory->destroy(fs->rhor); memory->destroy(fs->z2r); @@ -117,103 +117,118 @@ void PairEAMFS::read_file(char *filename) { Fs *file = fs; - // open potential file + // read potential file + if(comm->me == 0) { + PotentialFileReader reader(lmp, filename, "EAM"); - int me = comm->me; - FILE *fptr; - char line[MAXLINE]; + try { + char * line = nullptr; - if (me == 0) { - fptr = force->open_potential(filename); - if (fptr == NULL) { - char str[128]; - snprintf(str,128,"Cannot open EAM potential file %s",filename); - error->one(FLERR,str); - } - } + reader.skip_line(); + reader.skip_line(); + reader.skip_line(); - // read and broadcast header - // extract element names from nelements line + // extract element names from nelements line + line = reader.next_line(1); + ValueTokenizer values(line); + file->nelements = values.next_int(); - int n; - if (me == 0) { - utils::sfgets(FLERR,line,MAXLINE,fptr,filename,error); - utils::sfgets(FLERR,line,MAXLINE,fptr,filename,error); - utils::sfgets(FLERR,line,MAXLINE,fptr,filename,error); - utils::sfgets(FLERR,line,MAXLINE,fptr,filename,error); - n = strlen(line) + 1; - } - MPI_Bcast(&n,1,MPI_INT,0,world); - MPI_Bcast(line,n,MPI_CHAR,0,world); + if (values.count() != file->nelements + 1) + error->one(FLERR,"Incorrect element names in EAM potential file"); - sscanf(line,"%d",&file->nelements); - int nwords = atom->count_words(line); - if (nwords != file->nelements + 1) - error->all(FLERR,"Incorrect element names in EAM potential file"); + file->elements = new char*[file->nelements]; + for (int i = 0; i < file->nelements; i++) { + const std::string word = values.next_string(); + const int n = word.length() + 1; + file->elements[i] = new char[n]; + strcpy(file->elements[i], word.c_str()); + } - char **words = new char*[file->nelements+1]; - nwords = 0; - strtok(line," \t\n\r\f"); - while ((words[nwords++] = strtok(NULL," \t\n\r\f"))) continue; + // - file->elements = new char*[file->nelements]; - for (int i = 0; i < file->nelements; i++) { - n = strlen(words[i]) + 1; - file->elements[i] = new char[n]; - strcpy(file->elements[i],words[i]); + line = reader.next_line(5); + values = ValueTokenizer(line); + file->nrho = values.next_int(); + file->drho = values.next_double(); + file->nr = values.next_int(); + file->dr = values.next_double(); + file->cut = values.next_double(); + + if ((file->nrho <= 0) || (file->nr <= 0) || (file->dr <= 0.0)) + error->one(FLERR,"Invalid EAM potential file"); + + memory->create(file->mass, file->nelements, "pair:mass"); + memory->create(file->frho, file->nelements, file->nrho + 1, "pair:frho"); + memory->create(file->rhor, file->nelements, file->nelements, file->nr + 1, "pair:rhor"); + memory->create(file->z2r, file->nelements, file->nelements, file->nr + 1, "pair:z2r"); + + for (int i = 0; i < file->nelements; i++) { + line = reader.next_line(2); + values = ValueTokenizer(line); + values.next_int(); // ignore + file->mass[i] = values.next_double(); + + reader.next_dvector(file->nrho, &file->frho[i][1]); + + for (int j = 0; j < file->nelements; j++) { + reader.next_dvector(file->nr, &file->rhor[i][j][1]); + } + } + + for (int i = 0; i < file->nelements; i++) { + for (int j = 0; j <= i; j++) { + reader.next_dvector(file->nr, &file->z2r[i][j][1]); + } + } + } catch (TokenizerException & e) { + error->one(FLERR, e.what()); + } } - delete [] words; - if (me == 0) { - utils::sfgets(FLERR,line,MAXLINE,fptr,filename,error); - nwords = sscanf(line,"%d %lg %d %lg %lg", - &file->nrho,&file->drho,&file->nr,&file->dr,&file->cut); + // broadcast potential information + MPI_Bcast(&file->nelements, 1, MPI_INT, 0, world); + + MPI_Bcast(&file->nrho, 1, MPI_INT, 0, world); + MPI_Bcast(&file->drho, 1, MPI_DOUBLE, 0, world); + MPI_Bcast(&file->nr, 1, MPI_INT, 0, world); + MPI_Bcast(&file->dr, 1, MPI_DOUBLE, 0, world); + MPI_Bcast(&file->cut, 1, MPI_DOUBLE, 0, world); + + // allocate memory on other procs + if (comm->me != 0) { + file->elements = new char*[file->nelements]; + for (int i = 0; i < file->nelements; i++) file->elements[i] = nullptr; + memory->create(file->mass, file->nelements, "pair:mass"); + memory->create(file->frho, file->nelements, file->nrho + 1, "pair:frho"); + memory->create(file->rhor, file->nelements, file->nelements, file->nr + 1, "pair:rhor"); + memory->create(file->z2r, file->nelements, file->nelements, file->nr + 1, "pair:z2r"); } - MPI_Bcast(&nwords,1,MPI_INT,0,world); - MPI_Bcast(&file->nrho,1,MPI_INT,0,world); - MPI_Bcast(&file->drho,1,MPI_DOUBLE,0,world); - MPI_Bcast(&file->nr,1,MPI_INT,0,world); - MPI_Bcast(&file->dr,1,MPI_DOUBLE,0,world); - MPI_Bcast(&file->cut,1,MPI_DOUBLE,0,world); - - if ((nwords != 5) || (file->nrho <= 0) || (file->nr <= 0) || (file->dr <= 0.0)) - error->all(FLERR,"Invalid EAM potential file"); - - file->mass = new double[file->nelements]; - memory->create(file->frho,file->nelements,file->nrho+1, - "pair:frho"); - memory->create(file->rhor,file->nelements,file->nelements, - file->nr+1,"pair:rhor"); - memory->create(file->z2r,file->nelements,file->nelements, - file->nr+1,"pair:z2r"); - - int i,j,tmp; - for (i = 0; i < file->nelements; i++) { - if (me == 0) { - utils::sfgets(FLERR,line,MAXLINE,fptr,filename,error); - sscanf(line,"%d %lg",&tmp,&file->mass[i]); - } - MPI_Bcast(&file->mass[i],1,MPI_DOUBLE,0,world); + // broadcast file->elements string array + for (int i = 0; i < file->nelements; i++) { + int n; + if (comm->me == 0) n = strlen(file->elements[i]) + 1; + MPI_Bcast(&n, 1, MPI_INT, 0, world); + if (comm->me != 0) file->elements[i] = new char[n]; + MPI_Bcast(file->elements[i], n, MPI_CHAR, 0, world); + } - if (me == 0) grab(fptr,file->nrho,&file->frho[i][1]); - MPI_Bcast(&file->frho[i][1],file->nrho,MPI_DOUBLE,0,world); + // broadcast file->mass, frho, rhor + for (int i = 0; i < file->nelements; i++) { + MPI_Bcast(&file->mass[i], 1, MPI_DOUBLE, 0, world); + MPI_Bcast(&file->frho[i][1], file->nrho, MPI_DOUBLE, 0, world); - for (j = 0; j < file->nelements; j++) { - if (me == 0) grab(fptr,file->nr,&file->rhor[i][j][1]); - MPI_Bcast(&file->rhor[i][j][1],file->nr,MPI_DOUBLE,0,world); + for (int j = 0; j < file->nelements; j++) { + MPI_Bcast(&file->rhor[i][j][1], file->nr, MPI_DOUBLE, 0, world); } } - for (i = 0; i < file->nelements; i++) - for (j = 0; j <= i; j++) { - if (me == 0) grab(fptr,file->nr,&file->z2r[i][j][1]); - MPI_Bcast(&file->z2r[i][j][1],file->nr,MPI_DOUBLE,0,world); + // broadcast file->z2r + for (int i = 0; i < file->nelements; i++) { + for (int j = 0; j <= i; j++) { + MPI_Bcast(&file->z2r[i][j][1], file->nr, MPI_DOUBLE, 0, world); } - - // close the potential file - - if (me == 0) fclose(fptr); + } } /* ---------------------------------------------------------------------- diff --git a/src/MANYBODY/pair_eim.cpp b/src/MANYBODY/pair_eim.cpp index dc1c7fa01993d3332a48c6647edefc690c15decc..6b668eeade9c85c37cda89767072c6e2b0d6a8b3 100644 --- a/src/MANYBODY/pair_eim.cpp +++ b/src/MANYBODY/pair_eim.cpp @@ -27,11 +27,11 @@ #include "memory.h" #include "error.h" #include "utils.h" +#include "tokenizer.h" +#include "potential_file_reader.h" using namespace LAMMPS_NS; -#define MAXLINE 1024 - /* ---------------------------------------------------------------------- */ PairEIM::PairEIM(LAMMPS *lmp) : Pair(lmp) @@ -451,20 +451,6 @@ double PairEIM::init_one(int i, int j) void PairEIM::read_file(char *filename) { - // open potential file - - int me = comm->me; - FILE *fptr; - - if (me == 0) { - fptr = force->open_potential(filename); - if (fptr == NULL) { - char str[128]; - snprintf(str,128,"Cannot open EIM potential file %s",filename); - error->one(FLERR,str); - } - } - int npair = nelements*(nelements+1)/2; setfl->ielement = new int[nelements]; setfl->mass = new double[nelements]; @@ -488,52 +474,55 @@ void PairEIM::read_file(char *filename) setfl->rs = new double[npair]; setfl->tp = new int[npair]; - if (me == 0) - if (!grabglobal(fptr)) - error->one(FLERR,"Could not grab global entry from EIM potential file"); - MPI_Bcast(&setfl->division,1,MPI_DOUBLE,0,world); - MPI_Bcast(&setfl->rbig,1,MPI_DOUBLE,0,world); - MPI_Bcast(&setfl->rsmall,1,MPI_DOUBLE,0,world); + // read potential file + if( comm->me == 0) { + EIMPotentialFileReader reader(lmp, filename); - for (int i = 0; i < nelements; i++) { - if (me == 0) - if (!grabsingle(fptr,i)) - error->one(FLERR,"Could not grab element entry from EIM potential file"); - MPI_Bcast(&setfl->ielement[i],1,MPI_INT,0,world); - MPI_Bcast(&setfl->mass[i],1,MPI_DOUBLE,0,world); - MPI_Bcast(&setfl->negativity[i],1,MPI_DOUBLE,0,world); - MPI_Bcast(&setfl->ra[i],1,MPI_DOUBLE,0,world); - MPI_Bcast(&setfl->ri[i],1,MPI_DOUBLE,0,world); - MPI_Bcast(&setfl->Ec[i],1,MPI_DOUBLE,0,world); - MPI_Bcast(&setfl->q0[i],1,MPI_DOUBLE,0,world); - } + reader.get_global(setfl); - for (int i = 0; i < nelements; i++) { - for (int j = i; j < nelements; j++) { - int ij; - if (i == j) ij = i; - else if (i < j) ij = nelements*(i+1) - (i+1)*(i+2)/2 + j; - else ij = nelements*(j+1) - (j+1)*(j+2)/2 + i; - if (me == 0) - if (grabpair(fptr,i,j) == 0) - error->one(FLERR,"Could not grab pair entry from EIM potential file"); - MPI_Bcast(&setfl->rcutphiA[ij],1,MPI_DOUBLE,0,world); - MPI_Bcast(&setfl->rcutphiR[ij],1,MPI_DOUBLE,0,world); - MPI_Bcast(&setfl->Eb[ij],1,MPI_DOUBLE,0,world); - MPI_Bcast(&setfl->r0[ij],1,MPI_DOUBLE,0,world); - MPI_Bcast(&setfl->alpha[ij],1,MPI_DOUBLE,0,world); - MPI_Bcast(&setfl->beta[ij],1,MPI_DOUBLE,0,world); - MPI_Bcast(&setfl->rcutq[ij],1,MPI_DOUBLE,0,world); - MPI_Bcast(&setfl->Asigma[ij],1,MPI_DOUBLE,0,world); - MPI_Bcast(&setfl->rq[ij],1,MPI_DOUBLE,0,world); - MPI_Bcast(&setfl->rcutsigma[ij],1,MPI_DOUBLE,0,world); - MPI_Bcast(&setfl->Ac[ij],1,MPI_DOUBLE,0,world); - MPI_Bcast(&setfl->zeta[ij],1,MPI_DOUBLE,0,world); - MPI_Bcast(&setfl->rs[ij],1,MPI_DOUBLE,0,world); - MPI_Bcast(&setfl->tp[ij],1,MPI_INT,0,world); + for (int i = 0; i < nelements; i++) { + reader.get_element(setfl, i, elements[i]); + } + + for (int i = 0; i < nelements; i++) { + for (int j = i; j < nelements; j++) { + int ij; + if (i == j) ij = i; + else if (i < j) ij = nelements*(i+1) - (i+1)*(i+2)/2 + j; + else ij = nelements*(j+1) - (j+1)*(j+2)/2 + i; + reader.get_pair(setfl, ij, elements[i], elements[j]); + } } } + // broadcast potential information to other procs + MPI_Bcast(&setfl->division, 1, MPI_DOUBLE, 0, world); + MPI_Bcast(&setfl->rbig, 1, MPI_DOUBLE, 0, world); + MPI_Bcast(&setfl->rsmall, 1, MPI_DOUBLE, 0, world); + + MPI_Bcast(setfl->ielement, nelements, MPI_INT, 0, world); + MPI_Bcast(setfl->mass, nelements, MPI_DOUBLE, 0, world); + MPI_Bcast(setfl->negativity, nelements, MPI_DOUBLE, 0, world); + MPI_Bcast(setfl->ra, nelements, MPI_DOUBLE, 0, world); + MPI_Bcast(setfl->ri, nelements, MPI_DOUBLE, 0, world); + MPI_Bcast(setfl->Ec, nelements, MPI_DOUBLE, 0, world); + MPI_Bcast(setfl->q0, nelements, MPI_DOUBLE, 0, world); + + MPI_Bcast(setfl->rcutphiA, npair, MPI_DOUBLE, 0, world); + MPI_Bcast(setfl->rcutphiR, npair, MPI_DOUBLE, 0, world); + MPI_Bcast(setfl->Eb, npair, MPI_DOUBLE, 0, world); + MPI_Bcast(setfl->r0, npair, MPI_DOUBLE, 0, world); + MPI_Bcast(setfl->alpha, npair, MPI_DOUBLE, 0, world); + MPI_Bcast(setfl->beta, npair, MPI_DOUBLE, 0, world); + MPI_Bcast(setfl->rcutq, npair, MPI_DOUBLE, 0, world); + MPI_Bcast(setfl->Asigma, npair, MPI_DOUBLE, 0, world); + MPI_Bcast(setfl->rq, npair, MPI_DOUBLE, 0, world); + MPI_Bcast(setfl->rcutsigma, npair, MPI_DOUBLE, 0, world); + MPI_Bcast(setfl->Ac, npair, MPI_DOUBLE, 0, world); + MPI_Bcast(setfl->zeta, npair, MPI_DOUBLE, 0, world); + MPI_Bcast(setfl->rs, npair, MPI_DOUBLE, 0, world); + MPI_Bcast(setfl->tp, npair, MPI_INT, 0, world); + setfl->nr = 5000; setfl->cut = 0.0; for (int i = 0; i < npair; i++) { @@ -602,10 +591,6 @@ void PairEIM::read_file(char *filename) } } } - - // close the potential file - - if (me == 0) fclose(fptr); } /* ---------------------------------------------------------------------- @@ -879,114 +864,6 @@ void PairEIM::interpolate(int n, double delta, double *f, } } -/* ---------------------------------------------------------------------- - grab global line from file and store info in setfl - return 0 if error -------------------------------------------------------------------------- */ - -int PairEIM::grabglobal(FILE *fptr) -{ - char line[MAXLINE]; - - char *pch = NULL, *data = NULL; - while (pch == NULL) { - if (fgets(line,MAXLINE,fptr) == NULL) break; - pch = strstr(line,"global"); - if (pch != NULL) { - data = strtok (line," \t\n\r\f"); - data = strtok (NULL,"?"); - sscanf(data,"%lg %lg %lg",&setfl->division,&setfl->rbig,&setfl->rsmall); - } - } - if (pch == NULL) return 0; - return 1; -} - -/* ---------------------------------------------------------------------- - grab elemental line from file and store info in setfl - return 0 if error -------------------------------------------------------------------------- */ - -int PairEIM::grabsingle(FILE *fptr, int i) -{ - char line[MAXLINE]; - - rewind(fptr); - - char *pch1 = NULL, *pch2 = NULL, *data = NULL; - while (pch1 == NULL || pch2 == NULL) { - if (fgets(line,MAXLINE,fptr) == NULL) break; - pch1 = strtok (line," \t\n\r\f"); - pch1 = strstr(pch1,"element:"); - if (pch1 != NULL) { - pch2 = strtok(NULL, " \t\n\r\f"); - if (pch2 != NULL) { - data = strtok (NULL, "?"); - if (strcmp(pch2,elements[i]) == 0) { - sscanf(data,"%d %lg %lg %lg %lg %lg %lg",&setfl->ielement[i], - &setfl->mass[i],&setfl->negativity[i],&setfl->ra[i], - &setfl->ri[i],&setfl->Ec[i],&setfl->q0[i]); - } else pch2 = NULL; - } - } - } - if (pch1 == NULL || pch2 == NULL) return 0; - return 1; -} - -/* ---------------------------------------------------------------------- - grab pair line from file and store info in setfl - return 0 if error -------------------------------------------------------------------------- */ - -int PairEIM::grabpair(FILE *fptr, int i, int j) -{ - char line[MAXLINE]; - - rewind(fptr); - - int ij; - if (i == j) ij = i; - else if (i < j) ij = nelements*(i+1) - (i+1)*(i+2)/2 + j; - else ij = nelements*(j+1) - (j+1)*(j+2)/2 + i; - - char *pch1 = NULL, *pch2 = NULL, *pch3 = NULL, *data = NULL; - while (pch1 == NULL || pch2 == NULL || pch3 == NULL) { - if (fgets(line,MAXLINE,fptr) == NULL) break; - pch1 = strtok (line," \t\n\r\f"); - pch1 = strstr(pch1,"pair:"); - if (pch1 != NULL) { - pch2 = strtok (NULL, " \t\n\r\f"); - if (pch2 != NULL) pch3 = strtok (NULL, " \t\n\r\f"); - if (pch3 != NULL) data = strtok (NULL, "?"); - if ((pch2 != NULL) && (pch3 != NULL)) { - if ((strcmp(pch2,elements[i]) == 0 && - strcmp(pch3,elements[j]) == 0) || - (strcmp(pch2,elements[j]) == 0 && - strcmp(pch3,elements[i]) == 0)) { - sscanf(data,"%lg %lg %lg %lg %lg", - &setfl->rcutphiA[ij],&setfl->rcutphiR[ij], - &setfl->Eb[ij],&setfl->r0[ij],&setfl->alpha[ij]); - utils::sfgets(FLERR,line,MAXLINE,fptr,NULL,error); - sscanf(line,"%lg %lg %lg %lg %lg", - &setfl->beta[ij],&setfl->rcutq[ij],&setfl->Asigma[ij], - &setfl->rq[ij],&setfl->rcutsigma[ij]); - utils::sfgets(FLERR,line,MAXLINE,fptr,NULL,error); - sscanf(line,"%lg %lg %lg %d", - &setfl->Ac[ij],&setfl->zeta[ij],&setfl->rs[ij], - &setfl->tp[ij]); - } else { - pch1 = NULL; - pch2 = NULL; - pch3 = NULL; - } - } - } - } - if (pch1 == NULL || pch2 == NULL || pch3 == NULL) return 0; - return 1; -} - /* ---------------------------------------------------------------------- cutoff function ------------------------------------------------------------------------- */ @@ -1171,3 +1048,221 @@ double PairEIM::memory_usage() bytes += 2 * nmax * sizeof(double); return bytes; } + +EIMPotentialFileReader::EIMPotentialFileReader(LAMMPS * lmp, const std::string & filename) : + Pointers(lmp), filename(filename) +{ + if (comm->me != 0) { + error->one(FLERR, "EIMPotentialFileReader should only be called by proc 0!"); + } + + FILE * fp = force->open_potential(filename.c_str()); + + if (fp == NULL) { + char str[128]; + snprintf(str, 128, "cannot open EIM potential file %s", filename.c_str()); + error->one(FLERR, str); + } + + parse(fp); + + fclose(fp); +} + +std::pair EIMPotentialFileReader::get_pair(const std::string & a, const std::string & b) { + if (a < b) { + return std::make_pair(a, b); + } + return std::make_pair(b, a); +} + +char * EIMPotentialFileReader::next_line(FILE * fp) { + // concatenate lines if they end with '&' + // strip comments after '#' + int n = 0; + int nwords = 0; + bool concat = false; + + char *ptr = fgets(line, MAXLINE, fp); + + if (ptr == nullptr) { + // EOF + return nullptr; + } + + // strip comment + if ((ptr = strchr(line, '#'))) *ptr = '\0'; + + // strip ampersand + if ((ptr = strrchr(line, '&'))) { + concat = true; + *ptr = '\0'; + } + + nwords = utils::count_words(line); + + if (nwords > 0) { + n = strlen(line); + } + + while(n == 0 || concat) { + char *ptr = fgets(&line[n], MAXLINE - n, fp); + + if (ptr == nullptr) { + // EOF + return line; + } + + // strip comment + if ((ptr = strchr(line, '#'))) *ptr = '\0'; + + // strip ampersand + if ((ptr = strrchr(line, '&'))) { + concat = true; + *ptr = '\0'; + } else { + concat = false; + } + + nwords = utils::count_words(line); + + // skip line if blank + if (nwords > 0) { + n = strlen(line); + } + } + + return line; +} + +void EIMPotentialFileReader::parse(FILE * fp) +{ + char * line = nullptr; + bool found_global = false; + + while((line = next_line(fp))) { + ValueTokenizer values(line, " \t\r\n\f"); + std::string type = values.next_string(); + + if (type == "global:") { + if (values.count() != 4) { + error->one(FLERR, "Invalid global line in EIM potential file"); + } + + division = values.next_double(); + rbig = values.next_double(); + rsmall = values.next_double(); + + found_global = true; + } else if (type == "element:") { + if (values.count() != 9) { + error->one(FLERR, "Invalid element line in EIM potential file"); + } + + std::string name = values.next_string(); + + ElementData data; + data.ielement = values.next_int(); + data.mass = values.next_double(); + data.negativity = values.next_double(); + data.ra = values.next_double(); + data.ri = values.next_double(); + data.Ec = values.next_double(); + data.q0 = values.next_double(); + + if (elements.find(name) == elements.end()) { + elements[name] = data; + } else { + error->one(FLERR, "Duplicate pair line in EIM potential file"); + } + + } else if (type == "pair:") { + if (values.count() != 17) { + error->one(FLERR, "Invalid element line in EIM potential file"); + } + + std::string elementA = values.next_string(); + std::string elementB = values.next_string(); + + PairData data; + data.rcutphiA = values.next_double(); + data.rcutphiR = values.next_double(); + data.Eb = values.next_double(); + data.r0 = values.next_double(); + data.alpha = values.next_double(); + data.beta = values.next_double(); + data.rcutq = values.next_double(); + data.Asigma = values.next_double(); + data.rq = values.next_double(); + data.rcutsigma = values.next_double(); + data.Ac = values.next_double(); + data.zeta = values.next_double(); + data.rs = values.next_double(); + + // should be next_int, but since existing potential files have 1.0000e+00 format + // we're doing this instead to keep compatibility + data.tp = (int)values.next_double(); + + auto p = get_pair(elementA, elementB); + + if (pairs.find(p) == pairs.end()) { + pairs[p] = data; + } else { + error->one(FLERR, "Duplicate pair line in EIM potential file"); + } + } + } + + if (!found_global) { + error->one(FLERR, "Missing global line in EIM potential file"); + } +} + +void EIMPotentialFileReader::get_global(PairEIM::Setfl * setfl) { + setfl->division = division; + setfl->rbig = rbig; + setfl->rsmall = rsmall; +} + +void EIMPotentialFileReader::get_element(PairEIM::Setfl * setfl, int i, const std::string & name) { + if (elements.find(name) == elements.end()) { + char str[128]; + snprintf(str, 128, "Element %s not defined in EIM potential file", name.c_str()); + error->one(FLERR, str); + } + + ElementData & data = elements[name]; + setfl->ielement[i] = data.ielement; + setfl->mass[i] = data.mass; + setfl->negativity[i] = data.negativity; + setfl->ra[i] = data.ra; + setfl->ri[i] = data.ri; + setfl->Ec[i] = data.Ec; + setfl->q0[i] = data.q0; +} + +void EIMPotentialFileReader::get_pair(PairEIM::Setfl * setfl, int ij, const std::string & elemA, const std::string & elemB) { + auto p = get_pair(elemA, elemB); + + if (pairs.find(p) == pairs.end()) { + char str[128]; + snprintf(str, 128, "Pair (%s, %s) not defined in EIM potential file", elemA.c_str(), elemB.c_str()); + error->one(FLERR, str); + } + + PairData & data = pairs[p]; + setfl->rcutphiA[ij] = data.rcutphiA; + setfl->rcutphiR[ij] = data.rcutphiR; + setfl->Eb[ij] = data.Eb; + setfl->r0[ij] = data.r0; + setfl->alpha[ij] = data.alpha; + setfl->beta[ij] = data.beta; + setfl->rcutq[ij] = data.rcutq; + setfl->Asigma[ij] = data.Asigma; + setfl->rq[ij] = data.rq; + setfl->rcutsigma[ij] = data.rcutsigma; + setfl->Ac[ij] = data.Ac; + setfl->zeta[ij] = data.zeta; + setfl->rs[ij] = data.rs; + setfl->tp[ij] = data.tp; +} diff --git a/src/MANYBODY/pair_eim.h b/src/MANYBODY/pair_eim.h index f9fb2d5a773f67572708fbac35afced0ec418dd0..986db52453f0456888317b4d9c753fd24366ac1f 100644 --- a/src/MANYBODY/pair_eim.h +++ b/src/MANYBODY/pair_eim.h @@ -21,6 +21,8 @@ PairStyle(eim,PairEIM) #define LMP_PAIR_EIM_H #include "pair.h" +#include +#include namespace LAMMPS_NS { @@ -40,16 +42,6 @@ class PairEIM : public Pair { void unpack_reverse_comm(int, int *, double *); double memory_usage(); - protected: - double **cutforcesq,cutmax; - int nmax; - double *rho,*fp; - int rhofp; - int *map; // which element each atom type maps to - - int nelements; // # of elements to read from potential file - char **elements; // element names - struct Setfl { double division,rbig,rsmall; int nr; @@ -62,6 +54,17 @@ class PairEIM : public Pair { double ***Fij,***Gij,***phiij; double **cuts; }; + + protected: + double **cutforcesq,cutmax; + int nmax; + double *rho,*fp; + int rhofp; + int *map; // which element each atom type maps to + + int nelements; // # of elements to read from potential file + char **elements; // element names + Setfl *setfl; // potentials as array data @@ -80,9 +83,6 @@ class PairEIM : public Pair { void allocate(); void array2spline(); void interpolate(int, double, double *, double **, double); - int grabglobal(FILE *); - int grabsingle(FILE *, int); - int grabpair(FILE *, int, int); double funccutoff(double, double, double); double funcphi(int, int, double); @@ -94,6 +94,59 @@ class PairEIM : public Pair { void file2array(); }; +class EIMPotentialFileReader : protected Pointers { + std::string filename; + static const int MAXLINE = 1024; + char line[MAXLINE]; + + void parse(FILE * fp); + char * next_line(FILE * fp); + std::pair get_pair(const std::string & a, const std::string & b); + +public: + EIMPotentialFileReader(class LAMMPS* lmp, const std::string & filename); + + void get_global(PairEIM::Setfl * setfl); + void get_element(PairEIM::Setfl * setfl, int i, const std::string & name); + void get_pair(PairEIM::Setfl * setfl, int ij, const std::string & elemA, const std::string & elemB); + +private: + // potential parameters + double division; + double rbig; + double rsmall; + + struct ElementData { + int ielement; + double mass; + double negativity; + double ra; + double ri; + double Ec; + double q0; + }; + + struct PairData { + double rcutphiA; + double rcutphiR; + double Eb; + double r0; + double alpha; + double beta; + double rcutq; + double Asigma; + double rq; + double rcutsigma; + double Ac; + double zeta; + double rs; + int tp; + }; + + std::map elements; + std::map, PairData> pairs; +}; + } #endif diff --git a/src/MANYBODY/pair_gw.cpp b/src/MANYBODY/pair_gw.cpp index 667311812ba743a35fcc18fe0ae825a6148f728a..ba6ceac3b27877bbab59eaac05f3237c3ac868b1 100644 --- a/src/MANYBODY/pair_gw.cpp +++ b/src/MANYBODY/pair_gw.cpp @@ -29,13 +29,15 @@ #include "comm.h" #include "memory.h" #include "error.h" +#include "utils.h" +#include "tokenizer.h" +#include "potential_file_reader.h" #include "math_const.h" using namespace LAMMPS_NS; using namespace MathConst; -#define MAXLINE 1024 #define DELTA 4 /* ---------------------------------------------------------------------- */ @@ -366,138 +368,93 @@ double PairGW::init_one(int i, int j) void PairGW::read_file(char *file) { - int params_per_line = 17; - char **words = new char*[params_per_line+1]; - memory->sfree(params); params = NULL; nparams = maxparam = 0; // open file on proc 0 - FILE *fp; if (comm->me == 0) { - fp = force->open_potential(file); - if (fp == NULL) { - char str[128]; - snprintf(str,128,"Cannot open GW potential file %s",file); - error->one(FLERR,str); - } - } - - // read each line out of file, skipping blank lines or leading '#' - // store line of params if all 3 element tags are in element list - - int n,nwords,ielement,jelement,kelement; - char line[MAXLINE],*ptr; - int eof = 0; + PotentialFileReader reader(lmp, file, "GW"); + char * line; + + while((line = reader.next_line(NPARAMS_PER_LINE))) { + try { + ValueTokenizer values(line, " \t\n\r\f"); + + std::string iname = values.next_string(); + std::string jname = values.next_string(); + std::string kname = values.next_string(); + + // ielement,jelement,kelement = 1st args + // if all 3 args are in element list, then parse this line + // else skip to next entry in file + int ielement, jelement, kelement; + + for (ielement = 0; ielement < nelements; ielement++) + if (iname == elements[ielement]) break; + if (ielement == nelements) continue; + for (jelement = 0; jelement < nelements; jelement++) + if (jname == elements[jelement]) break; + if (jelement == nelements) continue; + for (kelement = 0; kelement < nelements; kelement++) + if (kname == elements[kelement]) break; + if (kelement == nelements) continue; + + // load up parameter settings and error check their values + + if (nparams == maxparam) { + maxparam += DELTA; + params = (Param *) memory->srealloc(params,maxparam*sizeof(Param), + "pair:params"); + } - while (1) { - if (comm->me == 0) { - ptr = fgets(line,MAXLINE,fp); - if (ptr == NULL) { - eof = 1; - fclose(fp); - } else n = strlen(line) + 1; - } - MPI_Bcast(&eof,1,MPI_INT,0,world); - if (eof) break; - MPI_Bcast(&n,1,MPI_INT,0,world); - MPI_Bcast(line,n,MPI_CHAR,0,world); - - // strip comment, skip line if blank - - if ((ptr = strchr(line,'#'))) *ptr = '\0'; - nwords = atom->count_words(line); - if (nwords == 0) continue; - - // concatenate additional lines until have params_per_line words - - while (nwords < params_per_line) { - n = strlen(line); - if (comm->me == 0) { - ptr = fgets(&line[n],MAXLINE-n,fp); - if (ptr == NULL) { - eof = 1; - fclose(fp); - } else n = strlen(line) + 1; + params[nparams].ielement = ielement; + params[nparams].jelement = jelement; + params[nparams].kelement = kelement; + params[nparams].powerm = values.next_double(); + params[nparams].gamma = values.next_double(); + params[nparams].lam3 = values.next_double(); + params[nparams].c = values.next_double(); + params[nparams].d = values.next_double(); + params[nparams].h = values.next_double(); + params[nparams].powern = values.next_double(); + params[nparams].beta = values.next_double(); + params[nparams].lam2 = values.next_double(); + params[nparams].bigb = values.next_double(); + params[nparams].bigr = values.next_double(); + params[nparams].bigd = values.next_double(); + params[nparams].lam1 = values.next_double(); + params[nparams].biga = values.next_double(); + params[nparams].powermint = int(params[nparams].powerm); + } catch (TokenizerException & e) { + error->one(FLERR, e.what()); } - MPI_Bcast(&eof,1,MPI_INT,0,world); - if (eof) break; - MPI_Bcast(&n,1,MPI_INT,0,world); - MPI_Bcast(line,n,MPI_CHAR,0,world); - if ((ptr = strchr(line,'#'))) *ptr = '\0'; - nwords = atom->count_words(line); - } - if (nwords != params_per_line) - error->all(FLERR,"Incorrect format in GW potential file"); - - // words = ptrs to all words in line - - nwords = 0; - words[nwords++] = strtok(line," \t\n\r\f"); - while ((words[nwords++] = strtok(NULL," \t\n\r\f"))) continue; - - // ielement,jelement,kelement = 1st args - // if all 3 args are in element list, then parse this line - // else skip to next line - - for (ielement = 0; ielement < nelements; ielement++) - if (strcmp(words[0],elements[ielement]) == 0) break; - if (ielement == nelements) continue; - for (jelement = 0; jelement < nelements; jelement++) - if (strcmp(words[1],elements[jelement]) == 0) break; - if (jelement == nelements) continue; - for (kelement = 0; kelement < nelements; kelement++) - if (strcmp(words[2],elements[kelement]) == 0) break; - if (kelement == nelements) continue; - - // load up parameter settings and error check their values - - if (nparams == maxparam) { - maxparam += DELTA; - params = (Param *) memory->srealloc(params,maxparam*sizeof(Param), - "pair:params"); + // currently only allow m exponent of 1 or 3 + if (params[nparams].c < 0.0 || params[nparams].d < 0.0 || + params[nparams].powern < 0.0 || params[nparams].beta < 0.0 || + params[nparams].lam2 < 0.0 || params[nparams].bigb < 0.0 || + params[nparams].bigr < 0.0 ||params[nparams].bigd < 0.0 || + params[nparams].bigd > params[nparams].bigr || + params[nparams].lam1 < 0.0 || params[nparams].biga < 0.0 || + params[nparams].powerm - params[nparams].powermint != 0.0 || + (params[nparams].powermint != 3 && params[nparams].powermint != 1) || + params[nparams].gamma < 0.0) + error->one(FLERR,"Illegal GW parameter"); + + nparams++; } + } + + MPI_Bcast(&nparams, 1, MPI_INT, 0, world); + MPI_Bcast(&maxparam, 1, MPI_INT, 0, world); - params[nparams].ielement = ielement; - params[nparams].jelement = jelement; - params[nparams].kelement = kelement; - params[nparams].powerm = atof(words[3]); - params[nparams].gamma = atof(words[4]); - params[nparams].lam3 = atof(words[5]); - params[nparams].c = atof(words[6]); - params[nparams].d = atof(words[7]); - params[nparams].h = atof(words[8]); - params[nparams].powern = atof(words[9]); - params[nparams].beta = atof(words[10]); - params[nparams].lam2 = atof(words[11]); - params[nparams].bigb = atof(words[12]); - params[nparams].bigr = atof(words[13]); - params[nparams].bigd = atof(words[14]); - params[nparams].lam1 = atof(words[15]); - params[nparams].biga = atof(words[16]); - - // currently only allow m exponent of 1 or 3 - - params[nparams].powermint = int(params[nparams].powerm); - - if (params[nparams].c < 0.0 || params[nparams].d < 0.0 || - params[nparams].powern < 0.0 || params[nparams].beta < 0.0 || - params[nparams].lam2 < 0.0 || params[nparams].bigb < 0.0 || - params[nparams].bigr < 0.0 ||params[nparams].bigd < 0.0 || - params[nparams].bigd > params[nparams].bigr || - params[nparams].lam1 < 0.0 || params[nparams].biga < 0.0 || - params[nparams].powerm - params[nparams].powermint != 0.0 || - (params[nparams].powermint != 3 && params[nparams].powermint != 1) || - params[nparams].gamma < 0.0) - error->all(FLERR,"Illegal GW parameter"); - - nparams++; + if(comm->me != 0) { + params = (Param *) memory->srealloc(params,maxparam*sizeof(Param), "pair:params"); } - delete [] words; + MPI_Bcast(params, maxparam*sizeof(Param), MPI_BYTE, 0, world); } /* ---------------------------------------------------------------------- */ diff --git a/src/MANYBODY/pair_gw.h b/src/MANYBODY/pair_gw.h index ae15b7d275d5ec9df7007c857daa84118c9fd244..77ff5c0399f9d304ca748c8e30ad0ac16797727b 100644 --- a/src/MANYBODY/pair_gw.h +++ b/src/MANYBODY/pair_gw.h @@ -34,6 +34,8 @@ class PairGW : public Pair { void init_style(); double init_one(int, int); + static const int NPARAMS_PER_LINE = 17; + protected: struct Param { double lam1,lam2,lam3; diff --git a/src/MANYBODY/pair_gw_zbl.cpp b/src/MANYBODY/pair_gw_zbl.cpp index d39bf53b993d9cdc7739ed956ab51fda64131d79..f6eafb4fac9a0cd8fe69b083287b704734a48c77 100644 --- a/src/MANYBODY/pair_gw_zbl.cpp +++ b/src/MANYBODY/pair_gw_zbl.cpp @@ -27,6 +27,9 @@ #include "comm.h" #include "memory.h" #include "error.h" +#include "utils.h" +#include "tokenizer.h" +#include "potential_file_reader.h" #include "math_const.h" using namespace LAMMPS_NS; @@ -60,146 +63,101 @@ PairGWZBL::PairGWZBL(LAMMPS *lmp) : PairGW(lmp) void PairGWZBL::read_file(char *file) { - int params_per_line = 21; - char **words = new char*[params_per_line+1]; - memory->sfree(params); params = NULL; nparams = maxparam = 0; // open file on proc 0 - FILE *fp; if (comm->me == 0) { - fp = force->open_potential(file); - if (fp == NULL) { - char str[128]; - snprintf(str,128,"Cannot open GW potential file %s",file); - error->one(FLERR,str); - } - } - - // read each line out of file, skipping blank lines or leading '#' - // store line of params if all 3 element tags are in element list - - int n,nwords,ielement,jelement,kelement; - char line[MAXLINE],*ptr; - int eof = 0; - - while (1) { - if (comm->me == 0) { - ptr = fgets(line,MAXLINE,fp); - if (ptr == NULL) { - eof = 1; - fclose(fp); - } else n = strlen(line) + 1; - } - MPI_Bcast(&eof,1,MPI_INT,0,world); - if (eof) break; - MPI_Bcast(&n,1,MPI_INT,0,world); - MPI_Bcast(line,n,MPI_CHAR,0,world); - - // strip comment, skip line if blank - - if ((ptr = strchr(line,'#'))) *ptr = '\0'; - nwords = atom->count_words(line); - if (nwords == 0) continue; - - // concatenate additional lines until have params_per_line words - - while (nwords < params_per_line) { - n = strlen(line); - if (comm->me == 0) { - ptr = fgets(&line[n],MAXLINE-n,fp); - if (ptr == NULL) { - eof = 1; - fclose(fp); - } else n = strlen(line) + 1; + PotentialFileReader reader(lmp, file, "GW/ZBL"); + char * line; + + while((line = reader.next_line(NPARAMS_PER_LINE))) { + try { + ValueTokenizer values(line, " \t\n\r\f"); + + std::string iname = values.next_string(); + std::string jname = values.next_string(); + std::string kname = values.next_string(); + + // ielement,jelement,kelement = 1st args + // if all 3 args are in element list, then parse this line + // else skip to next entry in file + int ielement, jelement, kelement; + + for (ielement = 0; ielement < nelements; ielement++) + if (iname == elements[ielement]) break; + if (ielement == nelements) continue; + for (jelement = 0; jelement < nelements; jelement++) + if (jname == elements[jelement]) break; + if (jelement == nelements) continue; + for (kelement = 0; kelement < nelements; kelement++) + if (kname == elements[kelement]) break; + if (kelement == nelements) continue; + + // load up parameter settings and error check their values + + if (nparams == maxparam) { + maxparam += DELTA; + params = (Param *) memory->srealloc(params,maxparam*sizeof(Param), + "pair:params"); + } + + params[nparams].ielement = ielement; + params[nparams].jelement = jelement; + params[nparams].kelement = kelement; + params[nparams].powerm = values.next_double(); + params[nparams].gamma = values.next_double(); + params[nparams].lam3 = values.next_double(); + params[nparams].c = values.next_double(); + params[nparams].d = values.next_double(); + params[nparams].h = values.next_double(); + params[nparams].powern = values.next_double(); + params[nparams].beta = values.next_double(); + params[nparams].lam2 = values.next_double(); + params[nparams].bigb = values.next_double(); + params[nparams].bigr = values.next_double(); + params[nparams].bigd = values.next_double(); + params[nparams].lam1 = values.next_double(); + params[nparams].biga = values.next_double(); + params[nparams].Z_i = values.next_double(); + params[nparams].Z_j = values.next_double(); + params[nparams].ZBLcut = values.next_double(); + params[nparams].ZBLexpscale = values.next_double(); + params[nparams].powermint = int(params[nparams].powerm); + } catch (TokenizerException & e) { + error->one(FLERR, e.what()); } - MPI_Bcast(&eof,1,MPI_INT,0,world); - if (eof) break; - MPI_Bcast(&n,1,MPI_INT,0,world); - MPI_Bcast(line,n,MPI_CHAR,0,world); - if ((ptr = strchr(line,'#'))) *ptr = '\0'; - nwords = atom->count_words(line); - } - if (nwords != params_per_line) - error->all(FLERR,"Incorrect format in GW potential file"); - - // words = ptrs to all words in line - - nwords = 0; - words[nwords++] = strtok(line," \t\n\r\f"); - while ((words[nwords++] = strtok(NULL," \t\n\r\f"))) continue; - - // ielement,jelement,kelement = 1st args - // if all 3 args are in element list, then parse this line - // else skip to next line - - for (ielement = 0; ielement < nelements; ielement++) - if (strcmp(words[0],elements[ielement]) == 0) break; - if (ielement == nelements) continue; - for (jelement = 0; jelement < nelements; jelement++) - if (strcmp(words[1],elements[jelement]) == 0) break; - if (jelement == nelements) continue; - for (kelement = 0; kelement < nelements; kelement++) - if (strcmp(words[2],elements[kelement]) == 0) break; - if (kelement == nelements) continue; - - // load up parameter settings and error check their values - - if (nparams == maxparam) { - maxparam += DELTA; - params = (Param *) memory->srealloc(params,maxparam*sizeof(Param), - "pair:params"); + // currently only allow m exponent of 1 or 3 + if ( + params[nparams].lam3 < 0.0 || params[nparams].c < 0.0 || + params[nparams].d < 0.0 || params[nparams].powern < 0.0 || + params[nparams].beta < 0.0 || params[nparams].lam2 < 0.0 || + params[nparams].bigb < 0.0 || params[nparams].bigr < 0.0 || + params[nparams].bigd < 0.0 || + params[nparams].bigd > params[nparams].bigr || + params[nparams].lam3 < 0.0 || params[nparams].biga < 0.0 || + params[nparams].powerm - params[nparams].powermint != 0.0 || + (params[nparams].powermint != 3 && params[nparams].powermint != 1) || + params[nparams].gamma < 0.0 || + params[nparams].Z_i < 1.0 || params[nparams].Z_j < 1.0 || + params[nparams].ZBLcut < 0.0 || params[nparams].ZBLexpscale < 0.0) + error->one(FLERR,"Illegal GW parameter"); + + nparams++; } + } + + MPI_Bcast(&nparams, 1, MPI_INT, 0, world); + MPI_Bcast(&maxparam, 1, MPI_INT, 0, world); - params[nparams].ielement = ielement; - params[nparams].jelement = jelement; - params[nparams].kelement = kelement; - params[nparams].powerm = atof(words[3]); - params[nparams].gamma = atof(words[4]); - params[nparams].lam3 = atof(words[5]); - params[nparams].c = atof(words[6]); - params[nparams].d = atof(words[7]); - params[nparams].h = atof(words[8]); - params[nparams].powern = atof(words[9]); - params[nparams].beta = atof(words[10]); - params[nparams].lam2 = atof(words[11]); - params[nparams].bigb = atof(words[12]); - params[nparams].bigr = atof(words[13]); - params[nparams].bigd = atof(words[14]); - params[nparams].lam1 = atof(words[15]); - params[nparams].biga = atof(words[16]); - params[nparams].Z_i = atof(words[17]); - params[nparams].Z_j = atof(words[18]); - params[nparams].ZBLcut = atof(words[19]); - params[nparams].ZBLexpscale = atof(words[20]); - - // currently only allow m exponent of 1 or 3 - - params[nparams].powermint = int(params[nparams].powerm); - - if ( - params[nparams].lam3 < 0.0 || params[nparams].c < 0.0 || - params[nparams].d < 0.0 || params[nparams].powern < 0.0 || - params[nparams].beta < 0.0 || params[nparams].lam2 < 0.0 || - params[nparams].bigb < 0.0 || params[nparams].bigr < 0.0 || - params[nparams].bigd < 0.0 || - params[nparams].bigd > params[nparams].bigr || - params[nparams].lam3 < 0.0 || params[nparams].biga < 0.0 || - params[nparams].powerm - params[nparams].powermint != 0.0 || - (params[nparams].powermint != 3 && params[nparams].powermint != 1) || - params[nparams].gamma < 0.0 || - params[nparams].Z_i < 1.0 || params[nparams].Z_j < 1.0 || - params[nparams].ZBLcut < 0.0 || params[nparams].ZBLexpscale < 0.0) - error->all(FLERR,"Illegal GW parameter"); - - nparams++; + if(comm->me != 0) { + params = (Param *) memory->srealloc(params,maxparam*sizeof(Param), "pair:params"); } - delete [] words; + MPI_Bcast(params, maxparam*sizeof(Param), MPI_BYTE, 0, world); } /* ---------------------------------------------------------------------- */ diff --git a/src/MANYBODY/pair_gw_zbl.h b/src/MANYBODY/pair_gw_zbl.h index 62b3f9a43f3b7cbeb5e09eecc6f39c87ca0f9745..95129c4eb8a63fb2c68e4092563216402c26e236 100644 --- a/src/MANYBODY/pair_gw_zbl.h +++ b/src/MANYBODY/pair_gw_zbl.h @@ -29,6 +29,8 @@ class PairGWZBL : public PairGW { PairGWZBL(class LAMMPS *); ~PairGWZBL() {} + static const int NPARAMS_PER_LINE = 21; + private: double global_a_0; // Bohr radius for Coulomb repulsion double global_epsilon_0; // permittivity of vacuum for Coulomb repulsion diff --git a/src/MANYBODY/pair_nb3b_harmonic.cpp b/src/MANYBODY/pair_nb3b_harmonic.cpp index 92456790cc7b71b9ab73b811a51dd82c5249e619..a7be1ef2d4e56f6a3c8698df70ae8dc2c06ed522 100644 --- a/src/MANYBODY/pair_nb3b_harmonic.cpp +++ b/src/MANYBODY/pair_nb3b_harmonic.cpp @@ -29,10 +29,12 @@ #include "neigh_list.h" #include "memory.h" #include "error.h" +#include "utils.h" +#include "tokenizer.h" +#include "potential_file_reader.h" using namespace LAMMPS_NS; -#define MAXLINE 1024 #define DELTA 4 #define SMALL 0.001 #define PI 3.141592653589793238462643383279 @@ -282,117 +284,73 @@ double PairNb3bHarmonic::init_one(int i, int j) void PairNb3bHarmonic::read_file(char *file) { - int params_per_line = 6; - char **words = new char*[params_per_line+1]; - memory->sfree(params); - params = NULL; + params = nullptr; nparams = maxparam = 0; // open file on proc 0 - FILE *fp = NULL; if (comm->me == 0) { - fp = force->open_potential(file); - if (fp == NULL) { - char str[128]; - snprintf(str,128,"Cannot open nb3b/harmonic potential file %s",file); - error->one(FLERR,str); - } - } + PotentialFileReader reader(lmp, file, "nb3b/harmonic"); + char * line; + + while((line = reader.next_line(NPARAMS_PER_LINE))) { + try { + ValueTokenizer values(line, " \t\n\r\f"); + + std::string iname = values.next_string(); + std::string jname = values.next_string(); + std::string kname = values.next_string(); + + // ielement,jelement,kelement = 1st args + // if all 3 args are in element list, then parse this line + // else skip to next entry in file + int ielement, jelement, kelement; + + for (ielement = 0; ielement < nelements; ielement++) + if (iname == elements[ielement]) break; + if (ielement == nelements) continue; + for (jelement = 0; jelement < nelements; jelement++) + if (jname == elements[jelement]) break; + if (jelement == nelements) continue; + for (kelement = 0; kelement < nelements; kelement++) + if (kname == elements[kelement]) break; + if (kelement == nelements) continue; + + // load up parameter settings and error check their values + + if (nparams == maxparam) { + maxparam += DELTA; + params = (Param *) memory->srealloc(params,maxparam*sizeof(Param), + "pair:params"); + } - // read each set of params from potential file - // one set of params can span multiple lines - // store params if all 3 element tags are in element list - - int n,nwords,ielement,jelement,kelement; - char line[MAXLINE],*ptr; - int eof = 0; - - while (1) { - if (comm->me == 0) { - ptr = fgets(line,MAXLINE,fp); - if (ptr == NULL) { - eof = 1; - fclose(fp); - } else n = strlen(line) + 1; - } - MPI_Bcast(&eof,1,MPI_INT,0,world); - if (eof) break; - MPI_Bcast(&n,1,MPI_INT,0,world); - MPI_Bcast(line,n,MPI_CHAR,0,world); - - // strip comment, skip line if blank - - if ((ptr = strchr(line,'#'))) *ptr = '\0'; - nwords = atom->count_words(line); - if (nwords == 0) continue; - - // concatenate additional lines until have params_per_line words - - while (nwords < params_per_line) { - n = strlen(line); - if (comm->me == 0) { - ptr = fgets(&line[n],MAXLINE-n,fp); - if (ptr == NULL) { - eof = 1; - fclose(fp); - } else n = strlen(line) + 1; + params[nparams].ielement = ielement; + params[nparams].jelement = jelement; + params[nparams].kelement = kelement; + params[nparams].k_theta = values.next_double(); + params[nparams].theta0 = values.next_double(); + params[nparams].cutoff = values.next_double(); + } catch (TokenizerException & e) { + error->one(FLERR, e.what()); } - MPI_Bcast(&eof,1,MPI_INT,0,world); - if (eof) break; - MPI_Bcast(&n,1,MPI_INT,0,world); - MPI_Bcast(line,n,MPI_CHAR,0,world); - if ((ptr = strchr(line,'#'))) *ptr = '\0'; - nwords = atom->count_words(line); - } - if (nwords != params_per_line) - error->all(FLERR,"Incorrect format in nb3b/harmonic potential file"); + if (params[nparams].k_theta < 0.0 || params[nparams].theta0 < 0.0 || + params[nparams].cutoff < 0.0) + error->one(FLERR,"Illegal nb3b/harmonic parameter"); - // words = ptrs to all words in line - - nwords = 0; - words[nwords++] = strtok(line," \t\n\r\f"); - while ((words[nwords++] = strtok(NULL," \t\n\r\f"))) continue; - - // ielement,jelement,kelement = 1st args - // if all 3 args are in element list, then parse this line - // else skip to next entry in file - - for (ielement = 0; ielement < nelements; ielement++) - if (strcmp(words[0],elements[ielement]) == 0) break; - if (ielement == nelements) continue; - for (jelement = 0; jelement < nelements; jelement++) - if (strcmp(words[1],elements[jelement]) == 0) break; - if (jelement == nelements) continue; - for (kelement = 0; kelement < nelements; kelement++) - if (strcmp(words[2],elements[kelement]) == 0) break; - if (kelement == nelements) continue; - - // load up parameter settings and error check their values - - if (nparams == maxparam) { - maxparam += DELTA; - params = (Param *) memory->srealloc(params,maxparam*sizeof(Param), - "pair:params"); + nparams++; } + } - params[nparams].ielement = ielement; - params[nparams].jelement = jelement; - params[nparams].kelement = kelement; - params[nparams].k_theta = atof(words[3]); - params[nparams].theta0 = atof(words[4]); - params[nparams].cutoff = atof(words[5]); - - if (params[nparams].k_theta < 0.0 || params[nparams].theta0 < 0.0 || - params[nparams].cutoff < 0.0) - error->all(FLERR,"Illegal nb3b/harmonic parameter"); + MPI_Bcast(&nparams, 1, MPI_INT, 0, world); + MPI_Bcast(&maxparam, 1, MPI_INT, 0, world); - nparams++; + if(comm->me != 0) { + params = (Param *) memory->srealloc(params,maxparam*sizeof(Param), "pair:params"); } - delete [] words; + MPI_Bcast(params, maxparam*sizeof(Param), MPI_BYTE, 0, world); } /* ---------------------------------------------------------------------- */ diff --git a/src/MANYBODY/pair_nb3b_harmonic.h b/src/MANYBODY/pair_nb3b_harmonic.h index 75a378e35ba9555df301a4ed3e8f3a1448b9cf00..0267b6d0e2dd5680d7ec35f934996b90cf446a4b 100644 --- a/src/MANYBODY/pair_nb3b_harmonic.h +++ b/src/MANYBODY/pair_nb3b_harmonic.h @@ -34,6 +34,8 @@ class PairNb3bHarmonic : public Pair { double init_one(int, int); void init_style(); + static const int NPARAMS_PER_LINE = 6; + protected: struct Param { double k_theta, theta0, cutoff; diff --git a/src/MANYBODY/pair_polymorphic.cpp b/src/MANYBODY/pair_polymorphic.cpp index 8db4d63d4cf684dc5a6bd0a4947595d7f56b13da..8a4a169e8570c1c74afc77d3069bd6ff34e454bd 100644 --- a/src/MANYBODY/pair_polymorphic.cpp +++ b/src/MANYBODY/pair_polymorphic.cpp @@ -30,6 +30,8 @@ #include "memory.h" #include "error.h" #include "utils.h" +#include "tokenizer.h" +#include "potential_file_reader.h" using namespace LAMMPS_NS; @@ -46,6 +48,7 @@ PairPolymorphic::PairPolymorphic(LAMMPS *lmp) : Pair(lmp) nelements = 0; elements = NULL; + match = NULL; pairParameters = NULL; tripletParameters = NULL; elem2param = NULL; @@ -168,7 +171,7 @@ void PairPolymorphic::compute(int eflag, int vflag) firstneighW1 = new int[neighsize]; } - if (eta) { + if (eta == 1) { iparam_ii = elem2param[itype][itype]; PairParameters & p = pairParameters[iparam_ii]; emb = (p.F)->get_vmax(); @@ -193,7 +196,7 @@ void PairPolymorphic::compute(int eflag, int vflag) PairParameters & p = pairParameters[iparam_ij]; // do not include the neighbor if get_vmax() <= epsilon because the function is near zero - if (eta) { + if (eta == 1) { if (emb > epsilon) { iparam_jj = elem2param[jtype][jtype]; PairParameters & q = pairParameters[iparam_jj]; @@ -255,7 +258,7 @@ void PairPolymorphic::compute(int eflag, int vflag) evdwl,0.0,fpair,delx,dely,delz); } - if (eta) { + if (eta == 1) { if (emb > epsilon) { @@ -356,7 +359,7 @@ void PairPolymorphic::compute(int eflag, int vflag) PairParameters & q = pairParameters[iparam_ik]; (q.W)->value(r2,wfac,1,fpair,0); - (q.P)->value(r1-(p.xi)*r2,pfac,1,fpair,0); + (trip.P)->value(r1-(p.xi)*r2,pfac,1,fpair,0); (trip.G)->value(costheta,gfac,1,fpair,0); zeta_ij += wfac*pfac*gfac; @@ -397,7 +400,7 @@ void PairPolymorphic::compute(int eflag, int vflag) iparam_ik = elem2param[itype][ktype]; PairParameters & q = pairParameters[iparam_ik]; - attractive(&q,&trip,prefactor,r1,r2,delr1,delr2,fi,fj,fk); + attractive(&p,&q,&trip,prefactor,r1,r2,delr1,delr2,fi,fj,fk); f[i][0] += fi[0]; f[i][1] += fi[1]; @@ -561,116 +564,101 @@ double PairPolymorphic::init_one(int i, int j) void PairPolymorphic::read_file(char *file) { - char line[MAXLINE],*ptr; - int n; + PotentialFileReader * reader = nullptr; - // open file on proc 0 - FILE *fp=NULL; + // read potential if (comm->me == 0) { - fp = force->open_potential(file); - if (fp == NULL) { - char str[128]; - snprintf(str,128,"Cannot open polymorphic potential file %s",file); - error->one(FLERR,str); - } - // move past comments to first data line - utils::sfgets(FLERR,line,MAXLINE,fp,file,error); - while (line == strchr(line,'#')) utils::sfgets(FLERR,line,MAXLINE,fp,file,error); - n = strlen(line) + 1; - } - MPI_Bcast(&n,1,MPI_INT,0,world); - MPI_Bcast(line,n,MPI_CHAR,0,world); - ptr = strtok(line," \t\n\r\f"); // 1st line, 1st token - int ntypes = atoi(ptr); - if (ntypes != nelements) - error->all(FLERR,"Incorrect number of elements in potential file"); - match = new int[nelements]; - ptr = strtok(NULL," \t\n\r\f"); // 1st line, 2nd token - eta = (atoi(ptr)>0) ? true:false; - - // map the elements in the potential file to LAMMPS atom types - for (int i = 0; i < nelements; i++) { - if (comm->me == 0) { - utils::sfgets(FLERR,line,MAXLINE,fp,file,error); - n = strlen(line) + 1; - } - MPI_Bcast(&n,1,MPI_INT,0,world); - MPI_Bcast(line,n,MPI_CHAR,0,world); - ptr = strtok(line," \t\n\r\f"); // 1st token - ptr = strtok(NULL," \t\n\r\f"); // 2st token - ptr = strtok(NULL," \t\n\r\f"); // 3st token - int j; - for (j = 0; j < nelements; j++) { - if (strcmp(ptr,elements[j]) == 0) break; - } - if (j == nelements) - error->all(FLERR,"Element not defined in potential file"); - match[i] = j; - } - // sizes - if (comm->me == 0) { - utils::sfgets(FLERR,line,MAXLINE,fp,file,error); - n = strlen(line) + 1; - } - - // Note: the format of this line has changed between the - // 2015-06-06 and 2015-12-09 versions of the pair style. - - MPI_Bcast(&n,1,MPI_INT,0,world); - MPI_Bcast(line,n,MPI_CHAR,0,world); - nr = ng = nx = 0; - ptr = strtok(line," \t\n\r\f"); // 1st token - if (ptr) nr = atoi(ptr); - ptr = strtok(NULL," \t\n\r\f"); // 2nd token - if (ptr) ng = atoi(ptr); - ptr = strtok(NULL," \t\n\r\f"); // 3rd token - if (ptr) nx = atoi(ptr); - ptr = strtok(NULL," \t\n\r\f"); // 4th token - if (ptr) maxX = atof(ptr); - if (ptr == NULL) - error->all(FLERR,"Potential file incompatible with this pair style version"); - if ((ng == 0) || (nr == 0) || (nx == 0)) - error->all(FLERR,"Error reading potential file header"); - - npair = nelements*(nelements+1)/2; - ntriple = nelements*nelements*nelements; - pairParameters = (PairParameters*) - memory->srealloc(pairParameters,npair*sizeof(PairParameters), - "pair:pairParameters"); - tripletParameters = (TripletParameters*) - memory->srealloc(tripletParameters,ntriple*sizeof(TripletParameters), - "pair:tripletParameters"); - - // cutoffs - for (int i = 0; i < npair; i++) { - PairParameters & p = pairParameters[i]; - if (comm->me == 0) { - utils::sfgets(FLERR,line,MAXLINE,fp,file,error); - n = strlen(line) + 1; + try { + reader = new PotentialFileReader(lmp, file, "polymorphic"); + + char * line = reader->next_line(2); + ValueTokenizer values(line); + + int ntypes = values.next_int(); + + if (ntypes != nelements) + error->one(FLERR,"Incorrect number of elements in potential file"); + + eta = values.next_int(); + + // map the elements in the potential file to LAMMPS atom types + match = new int[nelements]; + + for (int i = 0; i < nelements; i++) { + line = reader->next_line(3); + values = ValueTokenizer(line); + values.next_double(); // atomic number + values.next_double(); // atomic mass + std::string name = values.next_string(); + + int j; + for (j = 0; j < nelements; j++) { + if (name == elements[j]) break; + } + if (j == nelements) error->one(FLERR,"Element not defined in potential file"); + match[i] = j; + } + + // sizes + // Note: the format of this line has changed between the + // 2015-06-06 and 2015-12-09 versions of the pair style. + line = reader->next_line(4); + try { + values = ValueTokenizer(line); + nr = ng = nx = 0; + nr = values.next_int(); + ng = values.next_int(); + nx = values.next_int(); + maxX = values.next_double(); + + if ((ng == 0) || (nr == 0) || (nx == 0)) + error->one(FLERR,"Error reading potential file header"); + } catch (TokenizerException & e) { + error->one(FLERR,"Potential file incompatible with this pair style version"); + } + + // cutoffs + npair = nelements*(nelements+1)/2; + ntriple = nelements*nelements*nelements; + pairParameters = (PairParameters*) memory->srealloc(pairParameters,npair*sizeof(PairParameters), "pair:pairParameters"); + tripletParameters = (TripletParameters*) memory->srealloc(tripletParameters,ntriple*sizeof(TripletParameters), "pair:tripletParameters"); + + for (int i = 0; i < npair; i++) { + PairParameters & p = pairParameters[i]; + line = reader->next_line(2); + values = ValueTokenizer(line); + p.cut = values.next_double(); + p.cutsq = p.cut*p.cut; + p.xi = values.next_double(); + } + } catch (TokenizerException & e) { + error->one(FLERR, e.what()); } - MPI_Bcast(&n,1,MPI_INT,0,world); - MPI_Bcast(line,n,MPI_CHAR,0,world); - ptr = strtok(line," \t\n\r\f"); // 1st token - p.cut = atof(ptr); - p.cutsq = p.cut*p.cut; - ptr = strtok(NULL," \t\n\r\f"); // 2nd token - p.xi = (atoi(ptr)>0) ? true:false; } - // set cutmax to max of all params - cutmax = 0.0; - for (int i = 0; i < npair; i++) { - PairParameters & p = pairParameters[i]; - if (p.cut > cutmax) cutmax = p.cut; + MPI_Bcast(&nr, 1, MPI_INT, 0, world); + MPI_Bcast(&ng, 1, MPI_INT, 0, world); + MPI_Bcast(&nx, 1, MPI_INT, 0, world); + MPI_Bcast(&maxX, 1, MPI_DOUBLE, 0, world); + + MPI_Bcast(&npair, 1, MPI_INT, 0, world); + MPI_Bcast(&ntriple, 1, MPI_INT, 0, world); + + if(comm->me != 0) { + match = new int[nelements]; + pairParameters = (PairParameters*) memory->srealloc(pairParameters,npair*sizeof(PairParameters), "pair:pairParameters"); + tripletParameters = (TripletParameters*) memory->srealloc(tripletParameters,ntriple*sizeof(TripletParameters), "pair:tripletParameters"); } - cutmaxsq = cutmax*cutmax; + + MPI_Bcast(match, nelements, MPI_INT, 0, world); + MPI_Bcast(pairParameters, npair*sizeof(PairParameters), MPI_BYTE, 0, world); // start reading tabular functions double * singletable = new double[nr]; for (int i = 0; i < npair; i++) { // U PairParameters & p = pairParameters[i]; if (comm->me == 0) { - grab(fp,nr,singletable); + reader->next_dvector(nr, singletable); } MPI_Bcast(singletable,nr,MPI_DOUBLE,0,world); p.U = new tabularFunction(nr,0.0,p.cut); @@ -679,7 +667,7 @@ void PairPolymorphic::read_file(char *file) for (int i = 0; i < npair; i++) { // V PairParameters & p = pairParameters[i]; if (comm->me == 0) { - grab(fp,nr,singletable); + reader->next_dvector(nr, singletable); } MPI_Bcast(singletable,nr,MPI_DOUBLE,0,world); p.V = new tabularFunction(nr,0.0,p.cut); @@ -688,27 +676,66 @@ void PairPolymorphic::read_file(char *file) for (int i = 0; i < npair; i++) { // W PairParameters & p = pairParameters[i]; if (comm->me == 0) { - grab(fp,nr,singletable); + reader->next_dvector(nr, singletable); } MPI_Bcast(singletable,nr,MPI_DOUBLE,0,world); p.W = new tabularFunction(nr,0.0,p.cut); (p.W)->set_values(nr,0.0,p.cut,singletable,epsilon); } - for (int i = 0; i < npair; i++) { // P + + cutmax = 0.0; + for (int i = 0; i < npair; i++) { PairParameters & p = pairParameters[i]; - if (comm->me == 0) { - grab(fp,nr,singletable); + if (p.cut > cutmax) cutmax = p.cut; + } + cutmaxsq = cutmax*cutmax; + + if (eta != 3) { + for (int j = 0; j < nelements; j++) { // P + if (comm->me == 0) { + reader->next_dvector(nr, singletable); + } + MPI_Bcast(singletable,nr,MPI_DOUBLE,0,world); + for (int i = 0; i < nelements; i++) { + TripletParameters & p = tripletParameters[i*nelements*nelements+j*nelements+j]; + p.P = new tabularFunction(nr,-cutmax,cutmax); + (p.P)->set_values(nr,-cutmax,cutmax,singletable,epsilon); + } + } + for (int j = 0; j < nelements-1; j++) { // P + for (int k = j+1; k < nelements; k++) { + if (comm->me == 0) { + reader->next_dvector(nr, singletable); + } + MPI_Bcast(singletable,nr,MPI_DOUBLE,0,world); + for (int i = 0; i < nelements; i++) { + TripletParameters & p = tripletParameters[i*nelements*nelements+j*nelements+k]; + p.P = new tabularFunction(nr,-cutmax,cutmax); + (p.P)->set_values(nr,-cutmax,cutmax,singletable,epsilon); + TripletParameters & q = tripletParameters[i*nelements*nelements+k*nelements+j]; + q.P = new tabularFunction(nr,-cutmax,cutmax); + (q.P)->set_values(nr,-cutmax,cutmax,singletable,epsilon); + } + } + } + } + if (eta == 3) { + for (int i = 0; i < ntriple; i++) { // P + TripletParameters & p = tripletParameters[i]; + if (comm->me == 0) { + reader->next_dvector(nr, singletable); + } + MPI_Bcast(singletable,nr,MPI_DOUBLE,0,world); + p.P = new tabularFunction(nr,-cutmax,cutmax); + (p.P)->set_values(nr,-cutmax,cutmax,singletable,epsilon); } - MPI_Bcast(singletable,nr,MPI_DOUBLE,0,world); - p.P = new tabularFunction(nr,-cutmax,cutmax); - (p.P)->set_values(nr,-cutmax,cutmax,singletable,epsilon); } delete[] singletable; singletable = new double[ng]; for (int i = 0; i < ntriple; i++) { // G TripletParameters & p = tripletParameters[i]; if (comm->me == 0) { - grab(fp,ng,singletable); + reader->next_dvector(ng, singletable); } MPI_Bcast(singletable,ng,MPI_DOUBLE,0,world); p.G = new tabularFunction(ng,-1.0,1.0); @@ -719,7 +746,7 @@ void PairPolymorphic::read_file(char *file) for (int i = 0; i < npair; i++) { // F PairParameters & p = pairParameters[i]; if (comm->me == 0) { - grab(fp,nx,singletable); + reader->next_dvector(nx, singletable); } MPI_Bcast(singletable,nx,MPI_DOUBLE,0,world); p.F = new tabularFunction(nx,0.0,maxX); @@ -727,9 +754,25 @@ void PairPolymorphic::read_file(char *file) } delete[] singletable; if (comm->me == 0) { - fclose(fp); + delete reader; } + // recalculate cutoffs of all params + for (int i = 0; i < npair; i++) { + PairParameters & p = pairParameters[i]; + p.cut = (p.U)->get_xmax(); + if (p.cut < (p.V)->get_xmax()) p.cut = (p.V)->get_xmax(); + if (p.cut < (p.W)->get_xmax()) p.cut = (p.W)->get_xmax(); + p.cutsq = p.cut*p.cut; + } + + // set cutmax to max of all params + cutmax = 0.0; + for (int i = 0; i < npair; i++) { + PairParameters & p = pairParameters[i]; + if (cutmax < p.cut) cutmax = p.cut; + } + cutmaxsq = cutmax*cutmax; } /* ---------------------------------------------------------------------- */ @@ -771,15 +814,16 @@ void PairPolymorphic::setup_params() // for debugging, call write_tables() to check the tabular functions // if (comm->me == 0) { // write_tables(51); -// errorX->all(FLERR,"Test potential tables"); // } +// error->all(FLERR,"Test potential tables"); } /* ---------------------------------------------------------------------- attractive term ------------------------------------------------------------------------- */ -void PairPolymorphic::attractive(PairParameters *p, TripletParameters *trip, +void PairPolymorphic::attractive(PairParameters *p, PairParameters *q, + TripletParameters *trip, double prefactor, double rij, double rik, double *delrij, double *delrik, double *fi, double *fj, double *fk) @@ -793,7 +837,7 @@ void PairPolymorphic::attractive(PairParameters *p, TripletParameters *trip, rikinv = 1.0/rik; vec3_scale(rikinv,delrik,rik_hat); - ters_zetaterm_d(prefactor,rij_hat,rij,rik_hat,rik,fi,fj,fk,p,trip); + ters_zetaterm_d(prefactor,rij_hat,rij,rik_hat,rik,fi,fj,fk,p,q,trip); } /* ---------------------------------------------------------------------- */ @@ -802,46 +846,39 @@ void PairPolymorphic::ters_zetaterm_d(double prefactor, double *rij_hat, double rij, double *rik_hat, double rik, double *dri, double *drj, double *drk, - PairParameters *p, TripletParameters *trip) + PairParameters *p, PairParameters *q, + TripletParameters *trip) { double gijk,gijk_d,ex_delr,ex_delr_d,fc,dfc,cos_theta; double dcosdri[3],dcosdrj[3],dcosdrk[3]; cos_theta = vec3_dot(rij_hat,rik_hat); - (p->W)->value(rik,fc,1,dfc,1); - (p->P)->value(rij-(p->xi)*rik,ex_delr,1,ex_delr_d,1); + (q->W)->value(rik,fc,1,dfc,1); + (trip->P)->value(rij-(p->xi)*rik,ex_delr,1,ex_delr_d,1); (trip->G)->value(cos_theta,gijk,1,gijk_d,1); costheta_d(rij_hat,rij,rik_hat,rik,dcosdri,dcosdrj,dcosdrk); // compute the derivative wrt Ri - // dri = -dfc*gijk*ex_delr*rik_hat; - // dri += fc*gijk_d*ex_delr*dcosdri; - // dri += fc*gijk*ex_delr_d*(rik_hat - rij_hat); vec3_scale(-dfc*gijk*ex_delr,rik_hat,dri); vec3_scaleadd(fc*gijk_d*ex_delr,dcosdri,dri,dri); - vec3_scaleadd(fc*gijk*ex_delr_d,rik_hat,dri,dri); + vec3_scaleadd(fc*gijk*ex_delr_d*(p->xi),rik_hat,dri,dri); vec3_scaleadd(-fc*gijk*ex_delr_d,rij_hat,dri,dri); vec3_scale(prefactor,dri,dri); // compute the derivative wrt Rj - // drj = fc*gijk_d*ex_delr*dcosdrj; - // drj += fc*gijk*ex_delr_d*rij_hat; vec3_scale(fc*gijk_d*ex_delr,dcosdrj,drj); vec3_scaleadd(fc*gijk*ex_delr_d,rij_hat,drj,drj); vec3_scale(prefactor,drj,drj); // compute the derivative wrt Rk - // drk = dfc*gijk*ex_delr*rik_hat; - // drk += fc*gijk_d*ex_delr*dcosdrk; - // drk += -fc*gijk*ex_delr_d*rik_hat; vec3_scale(dfc*gijk*ex_delr,rik_hat,drk); vec3_scaleadd(fc*gijk_d*ex_delr,dcosdrk,drk,drk); - vec3_scaleadd(-fc*gijk*ex_delr_d,rik_hat,drk,drk); + vec3_scaleadd(-fc*gijk*ex_delr_d*(p->xi),rik_hat,drk,drk); vec3_scale(prefactor,drk,drk); } @@ -863,27 +900,6 @@ void PairPolymorphic::costheta_d(double *rij_hat, double rij, vec3_scale(-1.0,dri,dri); } -/* ---------------------------------------------------------------------- - * grab n values from file fp and put them in list - * values can be several to a line - * only called by proc 0 - * ------------------------------------------------------------------------- */ - -void PairPolymorphic::grab(FILE *fp, int n, double *list) -{ - char *ptr; - char line[MAXLINE]; - - int i = 0; - while (i < n) { - utils::sfgets(FLERR,line,MAXLINE,fp,NULL,error); - ptr = strtok(line," \t\n\r\f"); - list[i++] = atof(ptr); - while ((ptr = strtok(NULL," \t\n\r\f"))) - list[i++] = atof(ptr); - } -} - /* ---------------------------------------------------------------------- */ void PairPolymorphic::write_tables(int npts) @@ -919,26 +935,29 @@ void PairPolymorphic::write_tables(int npts) } for (int i = 0; i < nelements; i++) { for (int j = 0; j < nelements; j++) { + for (int k = 0; k < nelements; k++) { strcpy(line,elements[i]); strcat(line,elements[j]); + strcat(line,elements[k]); strcat(line,"_P"); strcat(line,tag); fp = fopen(line, "w"); - int iparam_ij = elem2param[i][j]; - PairParameters & pair = pairParameters[iparam_ij]; + int iparam_ij = elem3param[i][j][k]; + TripletParameters & pair = tripletParameters[iparam_ij]; xmin = (pair.P)->get_xmin(); xmax = (pair.P)->get_xmax(); double xl = xmax - xmin; xmin = xmin - 0.5*xl; xmax = xmax + 0.5*xl; - for (int k = 0; k < npts; k++) { - x = xmin + (xmax-xmin) * k / (npts-1); + for (int n = 0; n < npts; n++) { + x = xmin + (xmax-xmin) * n / (npts-1); (pair.P)->value(x, pf, 1, pfp, 1); fprintf(fp,"%12.4f %12.4f %12.4f \n",x,pf,pfp); } fclose(fp); } } + } for (int i = 0; i < nelements; i++) { for (int j = 0; j < nelements; j++) { for (int k = 0; k < nelements; k++) { diff --git a/src/MANYBODY/pair_polymorphic.h b/src/MANYBODY/pair_polymorphic.h index e7c3cd0d26d9596c34e81d11579d4e0fc5dfedfb..b4ff169b76aa4c78c6422eaace697151ec7c7fda 100644 --- a/src/MANYBODY/pair_polymorphic.h +++ b/src/MANYBODY/pair_polymorphic.h @@ -104,32 +104,59 @@ class PairPolymorphic : public Pair { } void set_values(int n, double x1, double x2, double * values, double epsilon) { - int i0; - i0 = n-1; + int shrink = 1; + int ilo,ihi; + double vlo,vhi; + ilo = 0; + ihi = n-1; + for (int i = 0; i < n; i++) { + if (fabs(values[i]) <= epsilon) { + ilo = i; + } else { + break; + } + } + for (int i = n-1; i >= 0; i--) { + if (fabs(values[i]) <= epsilon) { + ihi = i; + } else { + break; + } + } + if (ihi < ilo) ihi = ilo; + vlo = values[ilo]; + vhi = values[ilo]; + for (int i = ilo; i <= ihi; i++) { + if (vlo > values[i]) vlo = values[i]; + if (vhi < values[i]) vhi = values[i]; + } + // shrink (remove near zero points) reduces cutoff radius, and therefore computational cost // do not shrink when x2 < 1.1 (angular function) or x2 > 20.0 (non-radial function) - if (x2 >= 1.1 && x2 <= 20.0) { - for (int i = n-1; i >= 0; i--) { - if (fabs(values[i]) > epsilon) { - i0 = i; - break; - } - } + if (x2 < 1.1 || x2 > 20.0) { + shrink = 0; } // do not shrink when when list is abnormally small - if (i0 < 10/n) { - i0 = n-1; - } else if (i0 < n-1) { - values[i0] = 0.0; - i0 = i0 + 1; - values[i0] = 0.0; + if (ihi - ilo < 50) { + shrink = 0; } - xmin = x1; - xmax = x1 + (x2-x1)/(n -1)*i0; +// shrink if it is a constant + if (vhi - vlo <= epsilon) { +// shrink = 1; + } + + if (shrink == 0) { + ilo = 0; + ihi = n-1; + } + xmin = x1 + (x2-x1)/(n -1)*ilo; + xmax = xmin + (x2-x1)/(n -1)*(ihi-ilo); xmaxsq = xmax*xmax; - n = i0+1; + n = ihi - ilo + 1; resize(n); - memcpy(ys,values,n*sizeof(double)); + for (int i = ilo; i <= ihi; i++) { + ys[i-ilo] = values[i]; + } initialize(); } void value(double x, double &y, int ny, double &y1, int ny1) @@ -228,32 +255,32 @@ class PairPolymorphic : public Pair { struct PairParameters { double cut; double cutsq; - bool xi; // "indicator" + double xi; class tabularFunction * U; class tabularFunction * V; class tabularFunction * W; - class tabularFunction * P; class tabularFunction * F; PairParameters() { cut = 0.0; cutsq = 0.0; - xi = true; + xi = 1.0; U = NULL; V = NULL; W = NULL; - P = NULL; F = NULL; }; }; struct TripletParameters { + class tabularFunction * P; class tabularFunction * G; TripletParameters() { + P = NULL; G = NULL; }; }; double epsilon; - bool eta; // global indicator + int eta; int nx,nr,ng; // table sizes double maxX; @@ -277,17 +304,18 @@ class PairPolymorphic : public Pair { int *match; void allocate(); - void grab(FILE *, int, double *); virtual void read_file(char *); void setup_params(); void write_tables(int); - void attractive(PairParameters *, TripletParameters *, double, double, - double, double *, double *, double *, double *, double *); + void attractive(PairParameters *, PairParameters *, TripletParameters *, + double, double, double, double *, double *, double *, + double *, double *); void ters_zetaterm_d(double, double *, double, double *, double, double *, - double *, double *, PairParameters *, TripletParameters *); + double *, double *, PairParameters *, PairParameters *, + TripletParameters *); void costheta_d(double *, double, double *, double, double *, double *, double *); diff --git a/src/MANYBODY/pair_sw.cpp b/src/MANYBODY/pair_sw.cpp index f1d1a6fa9f5713ee9186f37baee49d8aee56c799..5956431b4ef1508b0d63163d275a29c4917d321f 100644 --- a/src/MANYBODY/pair_sw.cpp +++ b/src/MANYBODY/pair_sw.cpp @@ -28,10 +28,12 @@ #include "neighbor.h" #include "neigh_list.h" #include "neigh_request.h" +#include "utils.h" +#include "tokenizer.h" +#include "potential_file_reader.h" using namespace LAMMPS_NS; -#define MAXLINE 1024 #define DELTA 4 /* ---------------------------------------------------------------------- */ @@ -346,128 +348,84 @@ double PairSW::init_one(int i, int j) void PairSW::read_file(char *file) { - int params_per_line = 14; - char **words = new char*[params_per_line+1]; - memory->sfree(params); - params = NULL; + params = nullptr; nparams = maxparam = 0; // open file on proc 0 - FILE *fp; if (comm->me == 0) { - fp = force->open_potential(file); - if (fp == NULL) { - char str[128]; - snprintf(str,128,"Cannot open Stillinger-Weber potential file %s",file); - error->one(FLERR,str); - } - } + PotentialFileReader reader(lmp, file, "Stillinger-Weber"); + char * line; + + while((line = reader.next_line(NPARAMS_PER_LINE))) { + try { + ValueTokenizer values(line, " \t\n\r\f"); + + std::string iname = values.next_string(); + std::string jname = values.next_string(); + std::string kname = values.next_string(); + + // ielement,jelement,kelement = 1st args + // if all 3 args are in element list, then parse this line + // else skip to next entry in file + int ielement, jelement, kelement; + + for (ielement = 0; ielement < nelements; ielement++) + if (iname == elements[ielement]) break; + if (ielement == nelements) continue; + for (jelement = 0; jelement < nelements; jelement++) + if (jname == elements[jelement]) break; + if (jelement == nelements) continue; + for (kelement = 0; kelement < nelements; kelement++) + if (kname == elements[kelement]) break; + if (kelement == nelements) continue; + + // load up parameter settings and error check their values + + if (nparams == maxparam) { + maxparam += DELTA; + params = (Param *) memory->srealloc(params,maxparam*sizeof(Param), + "pair:params"); + } - // read each set of params from potential file - // one set of params can span multiple lines - // store params if all 3 element tags are in element list - - int n,nwords,ielement,jelement,kelement; - char line[MAXLINE],*ptr; - int eof = 0; - - while (1) { - if (comm->me == 0) { - ptr = fgets(line,MAXLINE,fp); - if (ptr == NULL) { - eof = 1; - fclose(fp); - } else n = strlen(line) + 1; - } - MPI_Bcast(&eof,1,MPI_INT,0,world); - if (eof) break; - MPI_Bcast(&n,1,MPI_INT,0,world); - MPI_Bcast(line,n,MPI_CHAR,0,world); - - // strip comment, skip line if blank - - if ((ptr = strchr(line,'#'))) *ptr = '\0'; - nwords = atom->count_words(line); - if (nwords == 0) continue; - - // concatenate additional lines until have params_per_line words - - while (nwords < params_per_line) { - n = strlen(line); - if (comm->me == 0) { - ptr = fgets(&line[n],MAXLINE-n,fp); - if (ptr == NULL) { - eof = 1; - fclose(fp); - } else n = strlen(line) + 1; + params[nparams].ielement = ielement; + params[nparams].jelement = jelement; + params[nparams].kelement = kelement; + params[nparams].epsilon = values.next_double(); + params[nparams].sigma = values.next_double(); + params[nparams].littlea = values.next_double(); + params[nparams].lambda = values.next_double(); + params[nparams].gamma = values.next_double(); + params[nparams].costheta = values.next_double(); + params[nparams].biga = values.next_double(); + params[nparams].bigb = values.next_double(); + params[nparams].powerp = values.next_double(); + params[nparams].powerq = values.next_double(); + params[nparams].tol = values.next_double(); + } catch (TokenizerException & e) { + error->one(FLERR, e.what()); } - MPI_Bcast(&eof,1,MPI_INT,0,world); - if (eof) break; - MPI_Bcast(&n,1,MPI_INT,0,world); - MPI_Bcast(line,n,MPI_CHAR,0,world); - if ((ptr = strchr(line,'#'))) *ptr = '\0'; - nwords = atom->count_words(line); - } - if (nwords != params_per_line) - error->all(FLERR,"Incorrect format in Stillinger-Weber potential file"); + if (params[nparams].epsilon < 0.0 || params[nparams].sigma < 0.0 || + params[nparams].littlea < 0.0 || params[nparams].lambda < 0.0 || + params[nparams].gamma < 0.0 || params[nparams].biga < 0.0 || + params[nparams].bigb < 0.0 || params[nparams].powerp < 0.0 || + params[nparams].powerq < 0.0 || params[nparams].tol < 0.0) + error->one(FLERR,"Illegal Stillinger-Weber parameter"); - // words = ptrs to all words in line - - nwords = 0; - words[nwords++] = strtok(line," \t\n\r\f"); - while ((words[nwords++] = strtok(NULL," \t\n\r\f"))) continue; - - // ielement,jelement,kelement = 1st args - // if all 3 args are in element list, then parse this line - // else skip to next entry in file - - for (ielement = 0; ielement < nelements; ielement++) - if (strcmp(words[0],elements[ielement]) == 0) break; - if (ielement == nelements) continue; - for (jelement = 0; jelement < nelements; jelement++) - if (strcmp(words[1],elements[jelement]) == 0) break; - if (jelement == nelements) continue; - for (kelement = 0; kelement < nelements; kelement++) - if (strcmp(words[2],elements[kelement]) == 0) break; - if (kelement == nelements) continue; - - // load up parameter settings and error check their values - - if (nparams == maxparam) { - maxparam += DELTA; - params = (Param *) memory->srealloc(params,maxparam*sizeof(Param), - "pair:params"); + nparams++; } + } + + MPI_Bcast(&nparams, 1, MPI_INT, 0, world); + MPI_Bcast(&maxparam, 1, MPI_INT, 0, world); - params[nparams].ielement = ielement; - params[nparams].jelement = jelement; - params[nparams].kelement = kelement; - params[nparams].epsilon = atof(words[3]); - params[nparams].sigma = atof(words[4]); - params[nparams].littlea = atof(words[5]); - params[nparams].lambda = atof(words[6]); - params[nparams].gamma = atof(words[7]); - params[nparams].costheta = atof(words[8]); - params[nparams].biga = atof(words[9]); - params[nparams].bigb = atof(words[10]); - params[nparams].powerp = atof(words[11]); - params[nparams].powerq = atof(words[12]); - params[nparams].tol = atof(words[13]); - - if (params[nparams].epsilon < 0.0 || params[nparams].sigma < 0.0 || - params[nparams].littlea < 0.0 || params[nparams].lambda < 0.0 || - params[nparams].gamma < 0.0 || params[nparams].biga < 0.0 || - params[nparams].bigb < 0.0 || params[nparams].powerp < 0.0 || - params[nparams].powerq < 0.0 || params[nparams].tol < 0.0) - error->all(FLERR,"Illegal Stillinger-Weber parameter"); - - nparams++; + if(comm->me != 0) { + params = (Param *) memory->srealloc(params,maxparam*sizeof(Param), "pair:params"); } - delete [] words; + MPI_Bcast(params, maxparam*sizeof(Param), MPI_BYTE, 0, world); } /* ---------------------------------------------------------------------- */ diff --git a/src/MANYBODY/pair_sw.h b/src/MANYBODY/pair_sw.h index 8d921a26e81a6cdbf20ce0b16af59ac603b5b2e8..b3ecebe3b9044cd4206ef10665db675ef2c1be01 100644 --- a/src/MANYBODY/pair_sw.h +++ b/src/MANYBODY/pair_sw.h @@ -34,6 +34,9 @@ class PairSW : public Pair { virtual double init_one(int, int); virtual void init_style(); + static const int NPARAMS_PER_LINE = 14; + + protected: struct Param { double epsilon,sigma; double littlea,lambda,gamma,costheta; @@ -46,7 +49,6 @@ class PairSW : public Pair { int ielement,jelement,kelement; }; - protected: double cutmax; // max cutoff for all elements int nelements; // # of unique elements char **elements; // names of unique elements diff --git a/src/MANYBODY/pair_tersoff.cpp b/src/MANYBODY/pair_tersoff.cpp index 5f53760e717717a3d694658a62dbc70d7aa48d82..f5a3fa7e8e1881053992af05055baf3e06e5ce84 100644 --- a/src/MANYBODY/pair_tersoff.cpp +++ b/src/MANYBODY/pair_tersoff.cpp @@ -28,6 +28,9 @@ #include "comm.h" #include "memory.h" #include "error.h" +#include "utils.h" +#include "tokenizer.h" +#include "potential_file_reader.h" #include "math_const.h" #include "math_special.h" @@ -36,7 +39,6 @@ using namespace LAMMPS_NS; using namespace MathConst; using namespace MathSpecial; -#define MAXLINE 1024 #define DELTA 4 /* ---------------------------------------------------------------------- */ @@ -391,144 +393,100 @@ double PairTersoff::init_one(int i, int j) void PairTersoff::read_file(char *file) { - int params_per_line = 17; - char **words = new char*[params_per_line+1]; - memory->sfree(params); - params = NULL; + params = nullptr; nparams = maxparam = 0; // open file on proc 0 - FILE *fp; if (comm->me == 0) { - fp = force->open_potential(file); - if (fp == NULL) { - char str[128]; - snprintf(str,128,"Cannot open Tersoff potential file %s",file); - error->one(FLERR,str); - } - } - - // read each line out of file, skipping blank lines or leading '#' - // store line of params if all 3 element tags are in element list - - int n,nwords,ielement,jelement,kelement; - char line[MAXLINE],*ptr; - int eof = 0; + PotentialFileReader reader(lmp, file, "Tersoff"); + char * line; + + while((line = reader.next_line(NPARAMS_PER_LINE))) { + try { + ValueTokenizer values(line, " \t\n\r\f"); + + std::string iname = values.next_string(); + std::string jname = values.next_string(); + std::string kname = values.next_string(); + + // ielement,jelement,kelement = 1st args + // if all 3 args are in element list, then parse this line + // else skip to next entry in file + int ielement, jelement, kelement; + + for (ielement = 0; ielement < nelements; ielement++) + if (iname == elements[ielement]) break; + if (ielement == nelements) continue; + for (jelement = 0; jelement < nelements; jelement++) + if (jname == elements[jelement]) break; + if (jelement == nelements) continue; + for (kelement = 0; kelement < nelements; kelement++) + if (kname == elements[kelement]) break; + if (kelement == nelements) continue; + + + // load up parameter settings and error check their values + + if (nparams == maxparam) { + maxparam += DELTA; + params = (Param *) memory->srealloc(params,maxparam*sizeof(Param), + "pair:params"); + } - while (1) { - if (comm->me == 0) { - ptr = fgets(line,MAXLINE,fp); - if (ptr == NULL) { - eof = 1; - fclose(fp); - } else n = strlen(line) + 1; - } - MPI_Bcast(&eof,1,MPI_INT,0,world); - if (eof) break; - MPI_Bcast(&n,1,MPI_INT,0,world); - MPI_Bcast(line,n,MPI_CHAR,0,world); - - // strip comment, skip line if blank - - if ((ptr = strchr(line,'#'))) *ptr = '\0'; - nwords = atom->count_words(line); - if (nwords == 0) continue; - - // concatenate additional lines until have params_per_line words - - while (nwords < params_per_line) { - n = strlen(line); - if (comm->me == 0) { - ptr = fgets(&line[n],MAXLINE-n,fp); - if (ptr == NULL) { - eof = 1; - fclose(fp); - } else n = strlen(line) + 1; + params[nparams].ielement = ielement; + params[nparams].jelement = jelement; + params[nparams].kelement = kelement; + params[nparams].powerm = values.next_double(); + params[nparams].gamma = values.next_double(); + params[nparams].lam3 = values.next_double(); + params[nparams].c = values.next_double(); + params[nparams].d = values.next_double(); + params[nparams].h = values.next_double(); + params[nparams].powern = values.next_double(); + params[nparams].beta = values.next_double(); + params[nparams].lam2 = values.next_double(); + params[nparams].bigb = values.next_double(); + params[nparams].bigr = values.next_double(); + params[nparams].bigd = values.next_double(); + params[nparams].lam1 = values.next_double(); + params[nparams].biga = values.next_double(); + params[nparams].powermint = int(params[nparams].powerm); + } catch (TokenizerException & e) { + error->one(FLERR, e.what()); } - MPI_Bcast(&eof,1,MPI_INT,0,world); - if (eof) break; - MPI_Bcast(&n,1,MPI_INT,0,world); - MPI_Bcast(line,n,MPI_CHAR,0,world); - if ((ptr = strchr(line,'#'))) *ptr = '\0'; - nwords = atom->count_words(line); - } - if (nwords != params_per_line) - error->all(FLERR,"Incorrect format in Tersoff potential file"); - - // words = ptrs to all words in line - - nwords = 0; - words[nwords++] = strtok(line," \t\n\r\f"); - while ((words[nwords++] = strtok(NULL," \t\n\r\f"))) continue; - - // ielement,jelement,kelement = 1st args - // if all 3 args are in element list, then parse this line - // else skip to next line - - for (ielement = 0; ielement < nelements; ielement++) - if (strcmp(words[0],elements[ielement]) == 0) break; - if (ielement == nelements) continue; - for (jelement = 0; jelement < nelements; jelement++) - if (strcmp(words[1],elements[jelement]) == 0) break; - if (jelement == nelements) continue; - for (kelement = 0; kelement < nelements; kelement++) - if (strcmp(words[2],elements[kelement]) == 0) break; - if (kelement == nelements) continue; - - // load up parameter settings and error check their values - - if (nparams == maxparam) { - maxparam += DELTA; - params = (Param *) memory->srealloc(params,maxparam*sizeof(Param), - "pair:params"); + // currently only allow m exponent of 1 or 3 + if (params[nparams].c < 0.0 || + params[nparams].d < 0.0 || + params[nparams].powern < 0.0 || + params[nparams].beta < 0.0 || + params[nparams].lam2 < 0.0 || + params[nparams].bigb < 0.0 || + params[nparams].bigr < 0.0 || + params[nparams].bigd < 0.0 || + params[nparams].bigd > params[nparams].bigr || + params[nparams].lam1 < 0.0 || + params[nparams].biga < 0.0 || + params[nparams].powerm - params[nparams].powermint != 0.0 || + (params[nparams].powermint != 3 && + params[nparams].powermint != 1) || + params[nparams].gamma < 0.0) + error->one(FLERR,"Illegal Tersoff parameter"); + + nparams++; } + } + + MPI_Bcast(&nparams, 1, MPI_INT, 0, world); + MPI_Bcast(&maxparam, 1, MPI_INT, 0, world); - params[nparams].ielement = ielement; - params[nparams].jelement = jelement; - params[nparams].kelement = kelement; - params[nparams].powerm = atof(words[3]); - params[nparams].gamma = atof(words[4]); - params[nparams].lam3 = atof(words[5]); - params[nparams].c = atof(words[6]); - params[nparams].d = atof(words[7]); - params[nparams].h = atof(words[8]); - params[nparams].powern = atof(words[9]); - params[nparams].beta = atof(words[10]); - params[nparams].lam2 = atof(words[11]); - params[nparams].bigb = atof(words[12]); - params[nparams].bigr = atof(words[13]); - params[nparams].bigd = atof(words[14]); - params[nparams].lam1 = atof(words[15]); - params[nparams].biga = atof(words[16]); - - // currently only allow m exponent of 1 or 3 - - params[nparams].powermint = int(params[nparams].powerm); - - if (params[nparams].c < 0.0 || - params[nparams].d < 0.0 || - params[nparams].powern < 0.0 || - params[nparams].beta < 0.0 || - params[nparams].lam2 < 0.0 || - params[nparams].bigb < 0.0 || - params[nparams].bigr < 0.0 || - params[nparams].bigd < 0.0 || - params[nparams].bigd > params[nparams].bigr || - params[nparams].lam1 < 0.0 || - params[nparams].biga < 0.0 || - params[nparams].powerm - params[nparams].powermint != 0.0 || - (params[nparams].powermint != 3 && - params[nparams].powermint != 1) || - params[nparams].gamma < 0.0) - error->all(FLERR,"Illegal Tersoff parameter"); - - nparams++; + if(comm->me != 0) { + params = (Param *) memory->srealloc(params,maxparam*sizeof(Param), "pair:params"); } - delete [] words; + MPI_Bcast(params, maxparam*sizeof(Param), MPI_BYTE, 0, world); } /* ---------------------------------------------------------------------- */ diff --git a/src/MANYBODY/pair_tersoff.h b/src/MANYBODY/pair_tersoff.h index 83ac73d5b86e7438f6c7c7b904399bb7b5854b70..8ebbc8354411752b866ad405a407fed199c3f758 100644 --- a/src/MANYBODY/pair_tersoff.h +++ b/src/MANYBODY/pair_tersoff.h @@ -34,7 +34,10 @@ class PairTersoff : public Pair { virtual void init_style(); double init_one(int, int); + static const int NPARAMS_PER_LINE = 17; + protected: + struct Param { double lam1,lam2,lam3; double c,d,h; diff --git a/src/MANYBODY/pair_tersoff_mod.cpp b/src/MANYBODY/pair_tersoff_mod.cpp index 9d4bdb7fd08d60ef4622840e7623c94c816bd33f..1998928aa57723e35b2f56676e8cc34ddd88f4ab 100644 --- a/src/MANYBODY/pair_tersoff_mod.cpp +++ b/src/MANYBODY/pair_tersoff_mod.cpp @@ -28,12 +28,14 @@ #include "math_special.h" #include "memory.h" #include "error.h" +#include "utils.h" +#include "tokenizer.h" +#include "potential_file_reader.h" using namespace LAMMPS_NS; using namespace MathConst; using namespace MathSpecial; -#define MAXLINE 1024 #define DELTA 4 /* ---------------------------------------------------------------------- */ @@ -44,145 +46,101 @@ PairTersoffMOD::PairTersoffMOD(LAMMPS *lmp) : PairTersoff(lmp) {} void PairTersoffMOD::read_file(char *file) { - int params_per_line = 20; - char **words = new char*[params_per_line+1]; - memory->sfree(params); - params = NULL; + params = nullptr; nparams = maxparam = 0; // open file on proc 0 - FILE *fp; if (comm->me == 0) { - fp = force->open_potential(file); - if (fp == NULL) { - char str[128]; - snprintf(str,128,"Cannot open Tersoff potential file %s",file); - error->one(FLERR,str); - } - } - - // read each line out of file, skipping blank lines or leading '#' - // store line of params if all 3 element tags are in element list - - int n,nwords,ielement,jelement,kelement; - char line[MAXLINE],*ptr; - int eof = 0; + PotentialFileReader reader(lmp, file, "Tersoff"); + char * line; + + while((line = reader.next_line(NPARAMS_PER_LINE))) { + try { + ValueTokenizer values(line, " \t\n\r\f"); + + std::string iname = values.next_string(); + std::string jname = values.next_string(); + std::string kname = values.next_string(); + + // ielement,jelement,kelement = 1st args + // if all 3 args are in element list, then parse this line + // else skip to next entry in file + int ielement, jelement, kelement; + + for (ielement = 0; ielement < nelements; ielement++) + if (iname == elements[ielement]) break; + if (ielement == nelements) continue; + for (jelement = 0; jelement < nelements; jelement++) + if (jname == elements[jelement]) break; + if (jelement == nelements) continue; + for (kelement = 0; kelement < nelements; kelement++) + if (kname == elements[kelement]) break; + if (kelement == nelements) continue; + + + // load up parameter settings and error check their values + + if (nparams == maxparam) { + maxparam += DELTA; + params = (Param *) memory->srealloc(params,maxparam*sizeof(Param), + "pair:params"); + } - while (1) { - if (comm->me == 0) { - ptr = fgets(line,MAXLINE,fp); - if (ptr == NULL) { - eof = 1; - fclose(fp); - } else n = strlen(line) + 1; - } - MPI_Bcast(&eof,1,MPI_INT,0,world); - if (eof) break; - MPI_Bcast(&n,1,MPI_INT,0,world); - MPI_Bcast(line,n,MPI_CHAR,0,world); - - // strip comment, skip line if blank - - if ((ptr = strchr(line,'#'))) *ptr = '\0'; - nwords = atom->count_words(line); - if (nwords == 0) continue; - - // concatenate additional lines until have params_per_line words - - while (nwords < params_per_line) { - n = strlen(line); - if (comm->me == 0) { - ptr = fgets(&line[n],MAXLINE-n,fp); - if (ptr == NULL) { - eof = 1; - fclose(fp); - } else n = strlen(line) + 1; + params[nparams].ielement = ielement; + params[nparams].jelement = jelement; + params[nparams].kelement = kelement; + params[nparams].powerm = values.next_double(); + params[nparams].lam3 = values.next_double(); + params[nparams].h = values.next_double(); + params[nparams].powern = values.next_double(); + params[nparams].beta = values.next_double(); + params[nparams].lam2 = values.next_double(); + params[nparams].bigb = values.next_double(); + params[nparams].bigr = values.next_double(); + params[nparams].bigd = values.next_double(); + params[nparams].lam1 = values.next_double(); + params[nparams].biga = values.next_double(); + params[nparams].powern_del = values.next_double(); + params[nparams].c1 = values.next_double(); + params[nparams].c2 = values.next_double(); + params[nparams].c3 = values.next_double(); + params[nparams].c4 = values.next_double(); + params[nparams].c5 = values.next_double(); + params[nparams].powermint = int(params[nparams].powerm); + } catch (TokenizerException & e) { + error->one(FLERR, e.what()); } - MPI_Bcast(&eof,1,MPI_INT,0,world); - if (eof) break; - MPI_Bcast(&n,1,MPI_INT,0,world); - MPI_Bcast(line,n,MPI_CHAR,0,world); - if ((ptr = strchr(line,'#'))) *ptr = '\0'; - nwords = atom->count_words(line); - } - if (nwords != params_per_line) - error->all(FLERR,"Incorrect format in Tersoff potential file"); - - // words = ptrs to all words in line - - nwords = 0; - words[nwords++] = strtok(line," \t\n\r\f"); - while ((words[nwords++] = strtok(NULL," \t\n\r\f"))) continue; - - // ielement,jelement,kelement = 1st args - // if all 3 args are in element list, then parse this line - // else skip to next line - - for (ielement = 0; ielement < nelements; ielement++) - if (strcmp(words[0],elements[ielement]) == 0) break; - if (ielement == nelements) continue; - for (jelement = 0; jelement < nelements; jelement++) - if (strcmp(words[1],elements[jelement]) == 0) break; - if (jelement == nelements) continue; - for (kelement = 0; kelement < nelements; kelement++) - if (strcmp(words[2],elements[kelement]) == 0) break; - if (kelement == nelements) continue; - - // load up parameter settings and error check their values - - if (nparams == maxparam) { - maxparam += DELTA; - params = (Param *) memory->srealloc(params,maxparam*sizeof(Param), - "pair:params"); + // currently only allow m exponent of 1 or 3 + if (params[nparams].powern < 0.0 || + params[nparams].beta < 0.0 || + params[nparams].lam2 < 0.0 || + params[nparams].bigb < 0.0 || + params[nparams].bigr < 0.0 || + params[nparams].bigd < 0.0 || + params[nparams].bigd > params[nparams].bigr || + params[nparams].lam1 < 0.0 || + params[nparams].biga < 0.0 || + params[nparams].powerm - params[nparams].powermint != 0.0 || + (params[nparams].powermint != 3 && + params[nparams].powermint != 1) + ) + error->one(FLERR,"Illegal Tersoff parameter"); + + nparams++; } + } + + MPI_Bcast(&nparams, 1, MPI_INT, 0, world); + MPI_Bcast(&maxparam, 1, MPI_INT, 0, world); - params[nparams].ielement = ielement; - params[nparams].jelement = jelement; - params[nparams].kelement = kelement; - params[nparams].powerm = atof(words[3]); - params[nparams].lam3 = atof(words[4]); - params[nparams].h = atof(words[5]); - params[nparams].powern = atof(words[6]); - params[nparams].beta = atof(words[7]); - params[nparams].lam2 = atof(words[8]); - params[nparams].bigb = atof(words[9]); - params[nparams].bigr = atof(words[10]); - params[nparams].bigd = atof(words[11]); - params[nparams].lam1 = atof(words[12]); - params[nparams].biga = atof(words[13]); - params[nparams].powern_del = atof(words[14]); - params[nparams].c1 = atof(words[15]); - params[nparams].c2 = atof(words[16]); - params[nparams].c3 = atof(words[17]); - params[nparams].c4 = atof(words[18]); - params[nparams].c5 = atof(words[19]); - - // currently only allow m exponent of 1 or 3 - - params[nparams].powermint = int(params[nparams].powerm); - - if (params[nparams].powern < 0.0 || - params[nparams].beta < 0.0 || - params[nparams].lam2 < 0.0 || - params[nparams].bigb < 0.0 || - params[nparams].bigr < 0.0 || - params[nparams].bigd < 0.0 || - params[nparams].bigd > params[nparams].bigr || - params[nparams].lam1 < 0.0 || - params[nparams].biga < 0.0 || - params[nparams].powerm - params[nparams].powermint != 0.0 || - (params[nparams].powermint != 3 && - params[nparams].powermint != 1) - ) - error->all(FLERR,"Illegal Tersoff parameter"); - - nparams++; + if(comm->me != 0) { + params = (Param *) memory->srealloc(params,maxparam*sizeof(Param), "pair:params"); } - delete [] words; + MPI_Bcast(params, maxparam*sizeof(Param), MPI_BYTE, 0, world); } /* ---------------------------------------------------------------------- */ diff --git a/src/MANYBODY/pair_tersoff_mod.h b/src/MANYBODY/pair_tersoff_mod.h index 162603bc5ca42d16fe513e949b609583d74c83bd..2cdbae951831be86ba4372fac9842c4ec8223aea 100644 --- a/src/MANYBODY/pair_tersoff_mod.h +++ b/src/MANYBODY/pair_tersoff_mod.h @@ -30,6 +30,8 @@ class PairTersoffMOD : public PairTersoff { PairTersoffMOD(class LAMMPS *); ~PairTersoffMOD() {} + static const int NPARAMS_PER_LINE = 20; + protected: virtual void read_file(char *); virtual void setup_params(); diff --git a/src/MANYBODY/pair_tersoff_mod_c.cpp b/src/MANYBODY/pair_tersoff_mod_c.cpp index 6c2c4f4e7a1600bf5bc5dbe1a645b4d4a118130c..2ccd31bad2aa33fcafdbd6f971edaf0d9956df20 100644 --- a/src/MANYBODY/pair_tersoff_mod_c.cpp +++ b/src/MANYBODY/pair_tersoff_mod_c.cpp @@ -25,157 +25,115 @@ #include "comm.h" #include "memory.h" #include "error.h" +#include "utils.h" +#include "tokenizer.h" +#include "potential_file_reader.h" using namespace LAMMPS_NS; -#define MAXLINE 1024 #define DELTA 4 /* ---------------------------------------------------------------------- */ void PairTersoffMODC::read_file(char *file) { - int params_per_line = 21; - char **words = new char*[params_per_line+1]; - memory->sfree(params); - params = NULL; + params = nullptr; nparams = maxparam = 0; // open file on proc 0 - FILE *fp; if (comm->me == 0) { - fp = force->open_potential(file); - if (fp == NULL) { - char str[128]; - snprintf(str,128,"Cannot open Tersoff potential file %s",file); - error->one(FLERR,str); - } - } - - // read each line out of file, skipping blank lines or leading '#' - // store line of params if all 3 element tags are in element list - - int n,nwords,ielement,jelement,kelement; - char line[MAXLINE],*ptr; - int eof = 0; - - while (1) { - if (comm->me == 0) { - ptr = fgets(line,MAXLINE,fp); - if (ptr == NULL) { - eof = 1; - fclose(fp); - } else n = strlen(line) + 1; - } - MPI_Bcast(&eof,1,MPI_INT,0,world); - if (eof) break; - MPI_Bcast(&n,1,MPI_INT,0,world); - MPI_Bcast(line,n,MPI_CHAR,0,world); - - // strip comment, skip line if blank - - if ((ptr = strchr(line,'#'))) *ptr = '\0'; - nwords = atom->count_words(line); - if (nwords == 0) continue; - - // concatenate additional lines until have params_per_line words - - while (nwords < params_per_line) { - n = strlen(line); - if (comm->me == 0) { - ptr = fgets(&line[n],MAXLINE-n,fp); - if (ptr == NULL) { - eof = 1; - fclose(fp); - } else n = strlen(line) + 1; + PotentialFileReader reader(lmp, file, "Tersoff"); + char * line; + + while((line = reader.next_line(NPARAMS_PER_LINE))) { + try { + ValueTokenizer values(line, " \t\n\r\f"); + + std::string iname = values.next_string(); + std::string jname = values.next_string(); + std::string kname = values.next_string(); + + // ielement,jelement,kelement = 1st args + // if all 3 args are in element list, then parse this line + // else skip to next entry in file + int ielement, jelement, kelement; + + for (ielement = 0; ielement < nelements; ielement++) + if (iname == elements[ielement]) break; + if (ielement == nelements) continue; + for (jelement = 0; jelement < nelements; jelement++) + if (jname == elements[jelement]) break; + if (jelement == nelements) continue; + for (kelement = 0; kelement < nelements; kelement++) + if (kname == elements[kelement]) break; + if (kelement == nelements) continue; + + + // load up parameter settings and error check their values + + if (nparams == maxparam) { + maxparam += DELTA; + params = (Param *) memory->srealloc(params,maxparam*sizeof(Param), + "pair:params"); + } + + params[nparams].ielement = ielement; + params[nparams].jelement = jelement; + params[nparams].kelement = kelement; + params[nparams].powerm = values.next_double(); + params[nparams].lam3 = values.next_double(); + params[nparams].h = values.next_double(); + params[nparams].powern = values.next_double(); + params[nparams].beta = values.next_double(); + params[nparams].lam2 = values.next_double(); + params[nparams].bigb = values.next_double(); + params[nparams].bigr = values.next_double(); + params[nparams].bigd = values.next_double(); + params[nparams].lam1 = values.next_double(); + params[nparams].biga = values.next_double(); + params[nparams].powern_del = values.next_double(); + params[nparams].c1 = values.next_double(); + params[nparams].c2 = values.next_double(); + params[nparams].c3 = values.next_double(); + params[nparams].c4 = values.next_double(); + params[nparams].c5 = values.next_double(); + params[nparams].c0 = values.next_double(); + params[nparams].powermint = int(params[nparams].powerm); + } catch (TokenizerException & e) { + error->one(FLERR, e.what()); } - MPI_Bcast(&eof,1,MPI_INT,0,world); - if (eof) break; - MPI_Bcast(&n,1,MPI_INT,0,world); - MPI_Bcast(line,n,MPI_CHAR,0,world); - if ((ptr = strchr(line,'#'))) *ptr = '\0'; - nwords = atom->count_words(line); - } - if (nwords != params_per_line) - error->all(FLERR,"Incorrect format in Tersoff potential file"); - - // words = ptrs to all words in line - - nwords = 0; - words[nwords++] = strtok(line," \t\n\r\f"); - while ((words[nwords++] = strtok(NULL," \t\n\r\f"))) continue; - - // ielement,jelement,kelement = 1st args - // if all 3 args are in element list, then parse this line - // else skip to next line - - for (ielement = 0; ielement < nelements; ielement++) - if (strcmp(words[0],elements[ielement]) == 0) break; - if (ielement == nelements) continue; - for (jelement = 0; jelement < nelements; jelement++) - if (strcmp(words[1],elements[jelement]) == 0) break; - if (jelement == nelements) continue; - for (kelement = 0; kelement < nelements; kelement++) - if (strcmp(words[2],elements[kelement]) == 0) break; - if (kelement == nelements) continue; - - // load up parameter settings and error check their values - - if (nparams == maxparam) { - maxparam += DELTA; - params = (Param *) memory->srealloc(params,maxparam*sizeof(Param), - "pair:params"); + // currently only allow m exponent of 1 or 3 + if ( + params[nparams].powern < 0.0 || + params[nparams].beta < 0.0 || + params[nparams].lam2 < 0.0 || + params[nparams].bigb < 0.0 || + params[nparams].bigr < 0.0 || + params[nparams].bigd < 0.0 || + params[nparams].bigd > params[nparams].bigr || + params[nparams].lam1 < 0.0 || + params[nparams].biga < 0.0 || + params[nparams].powerm - params[nparams].powermint != 0.0 || + (params[nparams].powermint != 3 && + params[nparams].powermint != 1) + ) + error->one(FLERR,"Illegal Tersoff parameter"); + + nparams++; } + } + + MPI_Bcast(&nparams, 1, MPI_INT, 0, world); + MPI_Bcast(&maxparam, 1, MPI_INT, 0, world); - params[nparams].ielement = ielement; - params[nparams].jelement = jelement; - params[nparams].kelement = kelement; - params[nparams].powerm = atof(words[3]); - params[nparams].lam3 = atof(words[4]); - params[nparams].h = atof(words[5]); - params[nparams].powern = atof(words[6]); - params[nparams].beta = atof(words[7]); - params[nparams].lam2 = atof(words[8]); - params[nparams].bigb = atof(words[9]); - params[nparams].bigr = atof(words[10]); - params[nparams].bigd = atof(words[11]); - params[nparams].lam1 = atof(words[12]); - params[nparams].biga = atof(words[13]); - params[nparams].powern_del = atof(words[14]); - params[nparams].c1 = atof(words[15]); - params[nparams].c2 = atof(words[16]); - params[nparams].c3 = atof(words[17]); - params[nparams].c4 = atof(words[18]); - params[nparams].c5 = atof(words[19]); - params[nparams].c0 = atof(words[20]); - - // currently only allow m exponent of 1 or 3 - - params[nparams].powermint = int(params[nparams].powerm); - - if ( - params[nparams].powern < 0.0 || - params[nparams].beta < 0.0 || - params[nparams].lam2 < 0.0 || - params[nparams].bigb < 0.0 || - params[nparams].bigr < 0.0 || - params[nparams].bigd < 0.0 || - params[nparams].bigd > params[nparams].bigr || - params[nparams].lam1 < 0.0 || - params[nparams].biga < 0.0 || - params[nparams].powerm - params[nparams].powermint != 0.0 || - (params[nparams].powermint != 3 && - params[nparams].powermint != 1) - ) - error->all(FLERR,"Illegal Tersoff parameter"); - - nparams++; + if(comm->me != 0) { + params = (Param *) memory->srealloc(params,maxparam*sizeof(Param), "pair:params"); } - delete [] words; + MPI_Bcast(params, maxparam*sizeof(Param), MPI_BYTE, 0, world); } /* ---------------------------------------------------------------------- */ diff --git a/src/MANYBODY/pair_tersoff_mod_c.h b/src/MANYBODY/pair_tersoff_mod_c.h index e7e32a0a668633d5bb3b067a4a762cfc8aa2a1e1..bad5f988bebf39b7aa12c3cc61535e3c77b66421 100644 --- a/src/MANYBODY/pair_tersoff_mod_c.h +++ b/src/MANYBODY/pair_tersoff_mod_c.h @@ -29,6 +29,8 @@ class PairTersoffMODC : public PairTersoffMOD { PairTersoffMODC(class LAMMPS *lmp) : PairTersoffMOD(lmp) {}; ~PairTersoffMODC() {} + static const int NPARAMS_PER_LINE = 21; + protected: void read_file(char *); void repulsive(Param *, double, double &, int, double &); diff --git a/src/MANYBODY/pair_tersoff_zbl.cpp b/src/MANYBODY/pair_tersoff_zbl.cpp index d5e3fb1b0f6dac551ee8a6538a5c1791ba14fc7f..5cdeb3daff16518857a7f7a1a54f9641eac9493c 100644 --- a/src/MANYBODY/pair_tersoff_zbl.cpp +++ b/src/MANYBODY/pair_tersoff_zbl.cpp @@ -29,12 +29,14 @@ #include "error.h" #include "math_const.h" #include "math_special.h" +#include "utils.h" +#include "tokenizer.h" +#include "potential_file_reader.h" using namespace LAMMPS_NS; using namespace MathConst; using namespace MathSpecial; -#define MAXLINE 1024 #define DELTA 4 /* ---------------------------------------------------------------------- */ @@ -62,152 +64,108 @@ PairTersoffZBL::PairTersoffZBL(LAMMPS *lmp) : PairTersoff(lmp) void PairTersoffZBL::read_file(char *file) { - int params_per_line = 21; - char **words = new char*[params_per_line+1]; - memory->sfree(params); - params = NULL; + params = nullptr; nparams = maxparam = 0; // open file on proc 0 - FILE *fp; if (comm->me == 0) { - fp = force->open_potential(file); - if (fp == NULL) { - char str[128]; - snprintf(str,128,"Cannot open Tersoff potential file %s",file); - error->one(FLERR,str); - } - } - - // read each line out of file, skipping blank lines or leading '#' - // store line of params if all 3 element tags are in element list - - int n,nwords,ielement,jelement,kelement; - char line[MAXLINE],*ptr; - int eof = 0; - - while (1) { - if (comm->me == 0) { - ptr = fgets(line,MAXLINE,fp); - if (ptr == NULL) { - eof = 1; - fclose(fp); - } else n = strlen(line) + 1; - } - MPI_Bcast(&eof,1,MPI_INT,0,world); - if (eof) break; - MPI_Bcast(&n,1,MPI_INT,0,world); - MPI_Bcast(line,n,MPI_CHAR,0,world); - - // strip comment, skip line if blank - - if ((ptr = strchr(line,'#'))) *ptr = '\0'; - nwords = atom->count_words(line); - if (nwords == 0) continue; - - // concatenate additional lines until have params_per_line words - - while (nwords < params_per_line) { - n = strlen(line); - if (comm->me == 0) { - ptr = fgets(&line[n],MAXLINE-n,fp); - if (ptr == NULL) { - eof = 1; - fclose(fp); - } else n = strlen(line) + 1; + PotentialFileReader reader(lmp, file, "Tersoff"); + char * line; + + while((line = reader.next_line(NPARAMS_PER_LINE))) { + try { + ValueTokenizer values(line, " \t\n\r\f"); + + std::string iname = values.next_string(); + std::string jname = values.next_string(); + std::string kname = values.next_string(); + + // ielement,jelement,kelement = 1st args + // if all 3 args are in element list, then parse this line + // else skip to next entry in file + int ielement, jelement, kelement; + + for (ielement = 0; ielement < nelements; ielement++) + if (iname == elements[ielement]) break; + if (ielement == nelements) continue; + for (jelement = 0; jelement < nelements; jelement++) + if (jname == elements[jelement]) break; + if (jelement == nelements) continue; + for (kelement = 0; kelement < nelements; kelement++) + if (kname == elements[kelement]) break; + if (kelement == nelements) continue; + + + // load up parameter settings and error check their values + + if (nparams == maxparam) { + maxparam += DELTA; + params = (Param *) memory->srealloc(params,maxparam*sizeof(Param), + "pair:params"); + } + + params[nparams].ielement = ielement; + params[nparams].jelement = jelement; + params[nparams].kelement = kelement; + params[nparams].powerm = values.next_double(); + params[nparams].gamma = values.next_double(); + params[nparams].lam3 = values.next_double(); + params[nparams].c = values.next_double(); + params[nparams].d = values.next_double(); + params[nparams].h = values.next_double(); + params[nparams].powern = values.next_double(); + params[nparams].beta = values.next_double(); + params[nparams].lam2 = values.next_double(); + params[nparams].bigb = values.next_double(); + params[nparams].bigr = values.next_double(); + params[nparams].bigd = values.next_double(); + params[nparams].lam1 = values.next_double(); + params[nparams].biga = values.next_double(); + params[nparams].Z_i = values.next_double(); + params[nparams].Z_j = values.next_double(); + params[nparams].ZBLcut = values.next_double(); + params[nparams].ZBLexpscale = values.next_double(); + params[nparams].powermint = int(params[nparams].powerm); + } catch (TokenizerException & e) { + error->one(FLERR, e.what()); } - MPI_Bcast(&eof,1,MPI_INT,0,world); - if (eof) break; - MPI_Bcast(&n,1,MPI_INT,0,world); - MPI_Bcast(line,n,MPI_CHAR,0,world); - if ((ptr = strchr(line,'#'))) *ptr = '\0'; - nwords = atom->count_words(line); - } - if (nwords != params_per_line) - error->all(FLERR,"Incorrect format in Tersoff potential file"); - - // words = ptrs to all words in line - - nwords = 0; - words[nwords++] = strtok(line," \t\n\r\f"); - while ((words[nwords++] = strtok(NULL," \t\n\r\f"))) continue; - - // ielement,jelement,kelement = 1st args - // if all 3 args are in element list, then parse this line - // else skip to next line - - for (ielement = 0; ielement < nelements; ielement++) - if (strcmp(words[0],elements[ielement]) == 0) break; - if (ielement == nelements) continue; - for (jelement = 0; jelement < nelements; jelement++) - if (strcmp(words[1],elements[jelement]) == 0) break; - if (jelement == nelements) continue; - for (kelement = 0; kelement < nelements; kelement++) - if (strcmp(words[2],elements[kelement]) == 0) break; - if (kelement == nelements) continue; - - // load up parameter settings and error check their values - - if (nparams == maxparam) { - maxparam += DELTA; - params = (Param *) memory->srealloc(params,maxparam*sizeof(Param), - "pair:params"); + // currently only allow m exponent of 1 or 3 + if (params[nparams].c < 0.0 || + params[nparams].d < 0.0 || + params[nparams].powern < 0.0 || + params[nparams].beta < 0.0 || + params[nparams].lam2 < 0.0 || + params[nparams].bigb < 0.0 || + params[nparams].bigr < 0.0 || + params[nparams].bigd < 0.0 || + params[nparams].bigd > params[nparams].bigr || + params[nparams].lam1 < 0.0 || + params[nparams].biga < 0.0 || + params[nparams].powerm - params[nparams].powermint != 0.0 || + (params[nparams].powermint != 3 && + params[nparams].powermint != 1) || + params[nparams].gamma < 0.0 || + params[nparams].Z_i < 1.0 || + params[nparams].Z_j < 1.0 || + params[nparams].ZBLcut < 0.0 || + params[nparams].ZBLexpscale < 0.0) + error->one(FLERR,"Illegal Tersoff parameter"); + + nparams++; } + } + + MPI_Bcast(&nparams, 1, MPI_INT, 0, world); + MPI_Bcast(&maxparam, 1, MPI_INT, 0, world); - params[nparams].ielement = ielement; - params[nparams].jelement = jelement; - params[nparams].kelement = kelement; - params[nparams].powerm = atof(words[3]); - params[nparams].gamma = atof(words[4]); - params[nparams].lam3 = atof(words[5]); - params[nparams].c = atof(words[6]); - params[nparams].d = atof(words[7]); - params[nparams].h = atof(words[8]); - params[nparams].powern = atof(words[9]); - params[nparams].beta = atof(words[10]); - params[nparams].lam2 = atof(words[11]); - params[nparams].bigb = atof(words[12]); - params[nparams].bigr = atof(words[13]); - params[nparams].bigd = atof(words[14]); - params[nparams].lam1 = atof(words[15]); - params[nparams].biga = atof(words[16]); - params[nparams].Z_i = atof(words[17]); - params[nparams].Z_j = atof(words[18]); - params[nparams].ZBLcut = atof(words[19]); - params[nparams].ZBLexpscale = atof(words[20]); - - // currently only allow m exponent of 1 or 3 - - params[nparams].powermint = int(params[nparams].powerm); - - if (params[nparams].c < 0.0 || - params[nparams].d < 0.0 || - params[nparams].powern < 0.0 || - params[nparams].beta < 0.0 || - params[nparams].lam2 < 0.0 || - params[nparams].bigb < 0.0 || - params[nparams].bigr < 0.0 || - params[nparams].bigd < 0.0 || - params[nparams].bigd > params[nparams].bigr || - params[nparams].lam1 < 0.0 || - params[nparams].biga < 0.0 || - params[nparams].powerm - params[nparams].powermint != 0.0 || - (params[nparams].powermint != 3 && - params[nparams].powermint != 1) || - params[nparams].gamma < 0.0 || - params[nparams].Z_i < 1.0 || - params[nparams].Z_j < 1.0 || - params[nparams].ZBLcut < 0.0 || - params[nparams].ZBLexpscale < 0.0) - error->all(FLERR,"Illegal Tersoff parameter"); - - nparams++; + if(comm->me != 0) { + params = (Param *) memory->srealloc(params,maxparam*sizeof(Param), "pair:params"); } - delete [] words; + MPI_Bcast(params, maxparam*sizeof(Param), MPI_BYTE, 0, world); } /* ---------------------------------------------------------------------- */ diff --git a/src/MANYBODY/pair_tersoff_zbl.h b/src/MANYBODY/pair_tersoff_zbl.h index 34bec05195acc6fcd4307e160b5428ed51c7c68d..be3f496b6248c6b0bd8d853fbdd80c4f13ee565f 100644 --- a/src/MANYBODY/pair_tersoff_zbl.h +++ b/src/MANYBODY/pair_tersoff_zbl.h @@ -29,6 +29,8 @@ class PairTersoffZBL : public PairTersoff { PairTersoffZBL(class LAMMPS *); ~PairTersoffZBL() {} + static const int NPARAMS_PER_LINE = 21; + protected: double global_a_0; // Bohr radius for Coulomb repulsion double global_epsilon_0; // permittivity of vacuum for Coulomb repulsion diff --git a/src/MANYBODY/pair_vashishta.cpp b/src/MANYBODY/pair_vashishta.cpp index 13b44c58a4cd0a297060bc88b8dba32694143d9e..68196e3a6a24c1c9d86b1a4947d3b7b605de61cd 100644 --- a/src/MANYBODY/pair_vashishta.cpp +++ b/src/MANYBODY/pair_vashishta.cpp @@ -29,10 +29,12 @@ #include "neighbor.h" #include "neigh_list.h" #include "neigh_request.h" +#include "utils.h" +#include "tokenizer.h" +#include "potential_file_reader.h" using namespace LAMMPS_NS; -#define MAXLINE 1024 #define DELTA 4 /* ---------------------------------------------------------------------- */ @@ -352,132 +354,88 @@ double PairVashishta::init_one(int i, int j) void PairVashishta::read_file(char *file) { - int params_per_line = 17; - char **words = new char*[params_per_line+1]; - memory->sfree(params); - params = NULL; + params = nullptr; nparams = maxparam = 0; // open file on proc 0 - FILE *fp; if (comm->me == 0) { - fp = force->open_potential(file); - if (fp == NULL) { - char str[128]; - snprintf(str,128,"Cannot open Vashishta potential file %s",file); - error->one(FLERR,str); - } - } + PotentialFileReader reader(lmp, file, "Vashishta"); + char * line; + + while((line = reader.next_line(NPARAMS_PER_LINE))) { + try { + ValueTokenizer values(line, " \t\n\r\f"); + + std::string iname = values.next_string(); + std::string jname = values.next_string(); + std::string kname = values.next_string(); + + // ielement,jelement,kelement = 1st args + // if all 3 args are in element list, then parse this line + // else skip to next entry in file + int ielement, jelement, kelement; + + for (ielement = 0; ielement < nelements; ielement++) + if (iname == elements[ielement]) break; + if (ielement == nelements) continue; + for (jelement = 0; jelement < nelements; jelement++) + if (jname == elements[jelement]) break; + if (jelement == nelements) continue; + for (kelement = 0; kelement < nelements; kelement++) + if (kname == elements[kelement]) break; + if (kelement == nelements) continue; + + // load up parameter settings and error check their values + + if (nparams == maxparam) { + maxparam += DELTA; + params = (Param *) memory->srealloc(params,maxparam*sizeof(Param), + "pair:params"); + } - // read each set of params from potential file - // one set of params can span multiple lines - // store params if all 3 element tags are in element list - - int n,nwords,ielement,jelement,kelement; - char line[MAXLINE],*ptr; - int eof = 0; - - while (1) { - if (comm->me == 0) { - ptr = fgets(line,MAXLINE,fp); - if (ptr == NULL) { - eof = 1; - fclose(fp); - } else n = strlen(line) + 1; - } - MPI_Bcast(&eof,1,MPI_INT,0,world); - if (eof) break; - MPI_Bcast(&n,1,MPI_INT,0,world); - MPI_Bcast(line,n,MPI_CHAR,0,world); - - // strip comment, skip line if blank - - if ((ptr = strchr(line,'#'))) *ptr = '\0'; - nwords = atom->count_words(line); - if (nwords == 0) continue; - - // concatenate additional lines until have params_per_line words - - while (nwords < params_per_line) { - n = strlen(line); - if (comm->me == 0) { - ptr = fgets(&line[n],MAXLINE-n,fp); - if (ptr == NULL) { - eof = 1; - fclose(fp); - } else n = strlen(line) + 1; + params[nparams].ielement = ielement; + params[nparams].jelement = jelement; + params[nparams].kelement = kelement; + params[nparams].bigh = values.next_double(); + params[nparams].eta = values.next_double(); + params[nparams].zi = values.next_double(); + params[nparams].zj = values.next_double(); + params[nparams].lambda1 = values.next_double(); + params[nparams].bigd = values.next_double(); + params[nparams].lambda4 = values.next_double(); + params[nparams].bigw = values.next_double(); + params[nparams].cut = values.next_double(); + params[nparams].bigb = values.next_double(); + params[nparams].gamma = values.next_double(); + params[nparams].r0 = values.next_double(); + params[nparams].bigc = values.next_double(); + params[nparams].costheta = values.next_double(); + } catch (TokenizerException & e) { + error->one(FLERR, e.what()); } - MPI_Bcast(&eof,1,MPI_INT,0,world); - if (eof) break; - MPI_Bcast(&n,1,MPI_INT,0,world); - MPI_Bcast(line,n,MPI_CHAR,0,world); - if ((ptr = strchr(line,'#'))) *ptr = '\0'; - nwords = atom->count_words(line); - } - if (nwords != params_per_line) - error->all(FLERR,"Incorrect format in Vashishta potential file"); + if (params[nparams].bigb < 0.0 || params[nparams].gamma < 0.0 || + params[nparams].r0 < 0.0 || params[nparams].bigc < 0.0 || + params[nparams].bigh < 0.0 || params[nparams].eta < 0.0 || + params[nparams].lambda1 < 0.0 || params[nparams].bigd < 0.0 || + params[nparams].lambda4 < 0.0 || params[nparams].bigw < 0.0 || + params[nparams].cut < 0.0) + error->one(FLERR,"Illegal Vashishta parameter"); - // words = ptrs to all words in line - - nwords = 0; - words[nwords++] = strtok(line," \t\n\r\f"); - while ((words[nwords++] = strtok(NULL," \t\n\r\f"))) continue; - - // ielement,jelement,kelement = 1st args - // if all 3 args are in element list, then parse this line - // else skip to next entry in file - - for (ielement = 0; ielement < nelements; ielement++) - if (strcmp(words[0],elements[ielement]) == 0) break; - if (ielement == nelements) continue; - for (jelement = 0; jelement < nelements; jelement++) - if (strcmp(words[1],elements[jelement]) == 0) break; - if (jelement == nelements) continue; - for (kelement = 0; kelement < nelements; kelement++) - if (strcmp(words[2],elements[kelement]) == 0) break; - if (kelement == nelements) continue; - - // load up parameter settings and error check their values - - if (nparams == maxparam) { - maxparam += DELTA; - params = (Param *) memory->srealloc(params,maxparam*sizeof(Param), - "pair:params"); + nparams++; } + } + + MPI_Bcast(&nparams, 1, MPI_INT, 0, world); + MPI_Bcast(&maxparam, 1, MPI_INT, 0, world); - params[nparams].ielement = ielement; - params[nparams].jelement = jelement; - params[nparams].kelement = kelement; - params[nparams].bigh = atof(words[3]); - params[nparams].eta = atof(words[4]); - params[nparams].zi = atof(words[5]); - params[nparams].zj = atof(words[6]); - params[nparams].lambda1 = atof(words[7]); - params[nparams].bigd = atof(words[8]); - params[nparams].lambda4 = atof(words[9]); - params[nparams].bigw = atof(words[10]); - params[nparams].cut = atof(words[11]); - params[nparams].bigb = atof(words[12]); - params[nparams].gamma = atof(words[13]); - params[nparams].r0 = atof(words[14]); - params[nparams].bigc = atof(words[15]); - params[nparams].costheta = atof(words[16]); - - if (params[nparams].bigb < 0.0 || params[nparams].gamma < 0.0 || - params[nparams].r0 < 0.0 || params[nparams].bigc < 0.0 || - params[nparams].bigh < 0.0 || params[nparams].eta < 0.0 || - params[nparams].lambda1 < 0.0 || params[nparams].bigd < 0.0 || - params[nparams].lambda4 < 0.0 || params[nparams].bigw < 0.0 || - params[nparams].cut < 0.0) - error->all(FLERR,"Illegal Vashishta parameter"); - - nparams++; + if(comm->me != 0) { + params = (Param *) memory->srealloc(params,maxparam*sizeof(Param), "pair:params"); } - delete [] words; + MPI_Bcast(params, maxparam*sizeof(Param), MPI_BYTE, 0, world); } /* ---------------------------------------------------------------------- */ diff --git a/src/MANYBODY/pair_vashishta.h b/src/MANYBODY/pair_vashishta.h index 5ec47cf92de86a89cf49874e45093368809b887f..bd250d328a39d8fe336eb97e184f208fb1a6658d 100644 --- a/src/MANYBODY/pair_vashishta.h +++ b/src/MANYBODY/pair_vashishta.h @@ -34,6 +34,8 @@ class PairVashishta : public Pair { double init_one(int, int); void init_style(); + static const int NPARAMS_PER_LINE = 17; + struct Param { double bigb,gamma,r0,bigc,costheta; double bigh,eta,zi,zj; diff --git a/src/MISC/xdr_compat.h b/src/MISC/xdr_compat.h index 5dfa01e0e81a180a2f07609dbfc54db7f1b5a10a..60cae1662e1c52758abd5f86e31186bdae8f9502 100644 --- a/src/MISC/xdr_compat.h +++ b/src/MISC/xdr_compat.h @@ -59,7 +59,7 @@ extern "C" { typedef int bool_t; -#if defined(__MINGW32__) || defined(__APPLE__) +#if defined(__MINGW32__) || defined(__APPLE__) || defined(__FreeBSD__) || defined(__DragonFly__) || defined(__OpenBSD__) || defined(__NetBSD__) typedef char * caddr_t; typedef unsigned int u_int; #endif diff --git a/src/MOLECULE/angle_cosine_periodic.cpp b/src/MOLECULE/angle_cosine_periodic.cpp index 95f299683eb6b91d9e995e757a1f90a2b5dee037..b305ece7dd2984fb933c6f47afe5d6ae1e804960 100644 --- a/src/MOLECULE/angle_cosine_periodic.cpp +++ b/src/MOLECULE/angle_cosine_periodic.cpp @@ -295,5 +295,5 @@ double AngleCosinePeriodic::single(int type, int i1, int i2, int i3) if (c < -1.0) c = -1.0; c = cos(acos(c)*multiplicity[type]); - return k[type]*(1.0-b[type]*powsign(multiplicity[type])*c); + return 2.0*k[type]*(1.0-b[type]*powsign(multiplicity[type])*c); } diff --git a/src/MOLECULE/atom_vec_angle.cpp b/src/MOLECULE/atom_vec_angle.cpp index 4eba471b8f1bdb13fe841ebd93f14db6e875c1db..1e00a73617a66ae1fe48b2d4f70743d4a55f6cb9 100644 --- a/src/MOLECULE/atom_vec_angle.cpp +++ b/src/MOLECULE/atom_vec_angle.cpp @@ -13,13 +13,6 @@ #include "atom_vec_angle.h" #include "atom.h" -#include "comm.h" -#include "domain.h" -#include "modify.h" -#include "fix.h" -#include "memory.h" -#include "error.h" -#include "utils.h" using namespace LAMMPS_NS; @@ -31,895 +24,142 @@ AtomVecAngle::AtomVecAngle(LAMMPS *lmp) : AtomVec(lmp) bonds_allow = angles_allow = 1; mass_type = 1; - comm_x_only = comm_f_only = 1; - size_forward = 3; - size_reverse = 3; - size_border = 7; - size_velocity = 3; - size_data_atom = 6; - size_data_vel = 4; - xcol_data = 4; - atom->molecule_flag = 1; -} - -/* ---------------------------------------------------------------------- - grow atom arrays - n = 0 grows arrays by a chunk - n > 0 allocates arrays to size n -------------------------------------------------------------------------- */ - -void AtomVecAngle::grow(int n) -{ - if (n == 0) grow_nmax(); - else nmax = n; - atom->nmax = nmax; - if (nmax < 0 || nmax > MAXSMALLINT) - error->one(FLERR,"Per-processor system is too big"); - - tag = memory->grow(atom->tag,nmax,"atom:tag"); - type = memory->grow(atom->type,nmax,"atom:type"); - mask = memory->grow(atom->mask,nmax,"atom:mask"); - image = memory->grow(atom->image,nmax,"atom:image"); - x = memory->grow(atom->x,nmax,3,"atom:x"); - v = memory->grow(atom->v,nmax,3,"atom:v"); - f = memory->grow(atom->f,nmax*comm->nthreads,3,"atom:f"); - - molecule = memory->grow(atom->molecule,nmax,"atom:molecule"); - - nspecial = memory->grow(atom->nspecial,nmax,3,"atom:nspecial"); - special = memory->grow(atom->special,nmax,atom->maxspecial,"atom:special"); - - num_bond = memory->grow(atom->num_bond,nmax,"atom:num_bond"); - bond_type = memory->grow(atom->bond_type,nmax,atom->bond_per_atom, - "atom:bond_type"); - bond_atom = memory->grow(atom->bond_atom,nmax,atom->bond_per_atom, - "atom:bond_atom"); - - num_angle = memory->grow(atom->num_angle,nmax,"atom:num_angle"); - angle_type = memory->grow(atom->angle_type,nmax,atom->angle_per_atom, - "atom:angle_type"); - angle_atom1 = memory->grow(atom->angle_atom1,nmax,atom->angle_per_atom, - "atom:angle_atom1"); - angle_atom2 = memory->grow(atom->angle_atom2,nmax,atom->angle_per_atom, - "atom:angle_atom2"); - angle_atom3 = memory->grow(atom->angle_atom3,nmax,atom->angle_per_atom, - "atom:angle_atom3"); - - if (atom->nextra_grow) - for (int iextra = 0; iextra < atom->nextra_grow; iextra++) - modify->fix[atom->extra_grow[iextra]]->grow_arrays(nmax); -} - -/* ---------------------------------------------------------------------- - reset local array ptrs -------------------------------------------------------------------------- */ - -void AtomVecAngle::grow_reset() -{ - tag = atom->tag; type = atom->type; - mask = atom->mask; image = atom->image; - x = atom->x; v = atom->v; f = atom->f; - molecule = atom->molecule; - nspecial = atom->nspecial; special = atom->special; - num_bond = atom->num_bond; bond_type = atom->bond_type; - bond_atom = atom->bond_atom; - num_angle = atom->num_angle; angle_type = atom->angle_type; - angle_atom1 = atom->angle_atom1; angle_atom2 = atom->angle_atom2; - angle_atom3 = atom->angle_atom3; -} - -/* ---------------------------------------------------------------------- - copy atom I info to atom J -------------------------------------------------------------------------- */ - -void AtomVecAngle::copy(int i, int j, int delflag) -{ - int k; - - tag[j] = tag[i]; - type[j] = type[i]; - mask[j] = mask[i]; - image[j] = image[i]; - x[j][0] = x[i][0]; - x[j][1] = x[i][1]; - x[j][2] = x[i][2]; - v[j][0] = v[i][0]; - v[j][1] = v[i][1]; - v[j][2] = v[i][2]; - - molecule[j] = molecule[i]; - - num_bond[j] = num_bond[i]; - for (k = 0; k < num_bond[j]; k++) { - bond_type[j][k] = bond_type[i][k]; - bond_atom[j][k] = bond_atom[i][k]; - } - - num_angle[j] = num_angle[i]; - for (k = 0; k < num_angle[j]; k++) { - angle_type[j][k] = angle_type[i][k]; - angle_atom1[j][k] = angle_atom1[i][k]; - angle_atom2[j][k] = angle_atom2[i][k]; - angle_atom3[j][k] = angle_atom3[i][k]; - } - - nspecial[j][0] = nspecial[i][0]; - nspecial[j][1] = nspecial[i][1]; - nspecial[j][2] = nspecial[i][2]; - for (k = 0; k < nspecial[j][2]; k++) special[j][k] = special[i][k]; - - if (atom->nextra_grow) - for (int iextra = 0; iextra < atom->nextra_grow; iextra++) - modify->fix[atom->extra_grow[iextra]]->copy_arrays(i,j,delflag); -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecAngle::pack_comm(int n, int *list, double *buf, - int pbc_flag, int *pbc) -{ - int i,j,m; - double dx,dy,dz; - - m = 0; - if (pbc_flag == 0) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = x[j][0]; - buf[m++] = x[j][1]; - buf[m++] = x[j][2]; - } - } else { - if (domain->triclinic == 0) { - dx = pbc[0]*domain->xprd; - dy = pbc[1]*domain->yprd; - dz = pbc[2]*domain->zprd; - } else { - dx = pbc[0]*domain->xprd + pbc[5]*domain->xy + pbc[4]*domain->xz; - dy = pbc[1]*domain->yprd + pbc[3]*domain->yz; - dz = pbc[2]*domain->zprd; - } - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = x[j][0] + dx; - buf[m++] = x[j][1] + dy; - buf[m++] = x[j][2] + dz; - } - } - return m; -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecAngle::pack_comm_vel(int n, int *list, double *buf, - int pbc_flag, int *pbc) -{ - int i,j,m; - double dx,dy,dz,dvx,dvy,dvz; - - m = 0; - if (pbc_flag == 0) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = x[j][0]; - buf[m++] = x[j][1]; - buf[m++] = x[j][2]; - buf[m++] = v[j][0]; - buf[m++] = v[j][1]; - buf[m++] = v[j][2]; - } - } else { - if (domain->triclinic == 0) { - dx = pbc[0]*domain->xprd; - dy = pbc[1]*domain->yprd; - dz = pbc[2]*domain->zprd; - } else { - dx = pbc[0]*domain->xprd + pbc[5]*domain->xy + pbc[4]*domain->xz; - dy = pbc[1]*domain->yprd + pbc[3]*domain->yz; - dz = pbc[2]*domain->zprd; - } - if (!deform_vremap) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = x[j][0] + dx; - buf[m++] = x[j][1] + dy; - buf[m++] = x[j][2] + dz; - buf[m++] = v[j][0]; - buf[m++] = v[j][1]; - buf[m++] = v[j][2]; - } - } else { - dvx = pbc[0]*h_rate[0] + pbc[5]*h_rate[5] + pbc[4]*h_rate[4]; - dvy = pbc[1]*h_rate[1] + pbc[3]*h_rate[3]; - dvz = pbc[2]*h_rate[2]; - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = x[j][0] + dx; - buf[m++] = x[j][1] + dy; - buf[m++] = x[j][2] + dz; - if (mask[i] & deform_groupbit) { - buf[m++] = v[j][0] + dvx; - buf[m++] = v[j][1] + dvy; - buf[m++] = v[j][2] + dvz; - } else { - buf[m++] = v[j][0]; - buf[m++] = v[j][1]; - buf[m++] = v[j][2]; - } - } - } - } - return m; -} - -/* ---------------------------------------------------------------------- */ - -void AtomVecAngle::unpack_comm(int n, int first, double *buf) -{ - int i,m,last; - - m = 0; - last = first + n; - for (i = first; i < last; i++) { - x[i][0] = buf[m++]; - x[i][1] = buf[m++]; - x[i][2] = buf[m++]; - } -} - -/* ---------------------------------------------------------------------- */ -void AtomVecAngle::unpack_comm_vel(int n, int first, double *buf) -{ - int i,m,last; - - m = 0; - last = first + n; - for (i = first; i < last; i++) { - x[i][0] = buf[m++]; - x[i][1] = buf[m++]; - x[i][2] = buf[m++]; - v[i][0] = buf[m++]; - v[i][1] = buf[m++]; - v[i][2] = buf[m++]; - } + // strings with peratom variables to include in each AtomVec method + // strings cannot contain fields in corresponding AtomVec default strings + // order of fields in a string does not matter + // except: fields_data_atom & fields_data_vel must match data file + + fields_grow = (char *) + "molecule num_bond bond_type bond_atom " + "num_angle angle_type angle_atom1 angle_atom2 angle_atom3 nspecial special"; + fields_copy = (char *) + "molecule num_bond bond_type bond_atom " + "num_angle angle_type angle_atom1 angle_atom2 angle_atom3 nspecial special"; + fields_comm = (char *) ""; + fields_comm_vel = (char *) ""; + fields_reverse = (char *) ""; + fields_border = (char *) "molecule"; + fields_border_vel = (char *) "molecule"; + fields_exchange = (char *) + "molecule num_bond bond_type bond_atom " + "num_angle angle_type angle_atom1 angle_atom2 angle_atom3 nspecial special"; + fields_restart = (char *) + "molecule num_bond bond_type bond_atom " + "num_angle angle_type angle_atom1 angle_atom2 angle_atom3"; + fields_create = (char *) "molecule num_bond num_angle nspecial"; + fields_data_atom = (char *) "id molecule type x"; + fields_data_vel = (char *) "id v"; + + setup_fields(); + + bond_per_atom = angle_per_atom = 0; + bond_negative = angle_negative = NULL; } /* ---------------------------------------------------------------------- */ -int AtomVecAngle::pack_reverse(int n, int first, double *buf) +AtomVecAngle::~AtomVecAngle() { - int i,m,last; - - m = 0; - last = first + n; - for (i = first; i < last; i++) { - buf[m++] = f[i][0]; - buf[m++] = f[i][1]; - buf[m++] = f[i][2]; - } - return m; -} - -/* ---------------------------------------------------------------------- */ - -void AtomVecAngle::unpack_reverse(int n, int *list, double *buf) -{ - int i,j,m; - - m = 0; - for (i = 0; i < n; i++) { - j = list[i]; - f[j][0] += buf[m++]; - f[j][1] += buf[m++]; - f[j][2] += buf[m++]; - } -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecAngle::pack_border(int n, int *list, double *buf, - int pbc_flag, int *pbc) -{ - int i,j,m; - double dx,dy,dz; - - m = 0; - if (pbc_flag == 0) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = x[j][0]; - buf[m++] = x[j][1]; - buf[m++] = x[j][2]; - buf[m++] = ubuf(tag[j]).d; - buf[m++] = ubuf(type[j]).d; - buf[m++] = ubuf(mask[j]).d; - buf[m++] = ubuf(molecule[j]).d; - } - } else { - if (domain->triclinic == 0) { - dx = pbc[0]*domain->xprd; - dy = pbc[1]*domain->yprd; - dz = pbc[2]*domain->zprd; - } else { - dx = pbc[0]; - dy = pbc[1]; - dz = pbc[2]; - } - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = x[j][0] + dx; - buf[m++] = x[j][1] + dy; - buf[m++] = x[j][2] + dz; - buf[m++] = ubuf(tag[j]).d; - buf[m++] = ubuf(type[j]).d; - buf[m++] = ubuf(mask[j]).d; - buf[m++] = ubuf(molecule[j]).d; - } - } - - if (atom->nextra_border) - for (int iextra = 0; iextra < atom->nextra_border; iextra++) - m += modify->fix[atom->extra_border[iextra]]->pack_border(n,list,&buf[m]); - - return m; -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecAngle::pack_border_vel(int n, int *list, double *buf, - int pbc_flag, int *pbc) -{ - int i,j,m; - double dx,dy,dz,dvx,dvy,dvz; - - m = 0; - if (pbc_flag == 0) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = x[j][0]; - buf[m++] = x[j][1]; - buf[m++] = x[j][2]; - buf[m++] = ubuf(tag[j]).d; - buf[m++] = ubuf(type[j]).d; - buf[m++] = ubuf(mask[j]).d; - buf[m++] = ubuf(molecule[j]).d; - buf[m++] = v[j][0]; - buf[m++] = v[j][1]; - buf[m++] = v[j][2]; - } - } else { - if (domain->triclinic == 0) { - dx = pbc[0]*domain->xprd; - dy = pbc[1]*domain->yprd; - dz = pbc[2]*domain->zprd; - } else { - dx = pbc[0]; - dy = pbc[1]; - dz = pbc[2]; - } - if (!deform_vremap) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = x[j][0] + dx; - buf[m++] = x[j][1] + dy; - buf[m++] = x[j][2] + dz; - buf[m++] = ubuf(tag[j]).d; - buf[m++] = ubuf(type[j]).d; - buf[m++] = ubuf(mask[j]).d; - buf[m++] = ubuf(molecule[j]).d; - buf[m++] = v[j][0]; - buf[m++] = v[j][1]; - buf[m++] = v[j][2]; - } - } else { - dvx = pbc[0]*h_rate[0] + pbc[5]*h_rate[5] + pbc[4]*h_rate[4]; - dvy = pbc[1]*h_rate[1] + pbc[3]*h_rate[3]; - dvz = pbc[2]*h_rate[2]; - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = x[j][0] + dx; - buf[m++] = x[j][1] + dy; - buf[m++] = x[j][2] + dz; - buf[m++] = ubuf(tag[j]).d; - buf[m++] = ubuf(type[j]).d; - buf[m++] = ubuf(mask[j]).d; - buf[m++] = ubuf(molecule[j]).d; - if (mask[i] & deform_groupbit) { - buf[m++] = v[j][0] + dvx; - buf[m++] = v[j][1] + dvy; - buf[m++] = v[j][2] + dvz; - } else { - buf[m++] = v[j][0]; - buf[m++] = v[j][1]; - buf[m++] = v[j][2]; - } - } - } - } - - if (atom->nextra_border) - for (int iextra = 0; iextra < atom->nextra_border; iextra++) - m += modify->fix[atom->extra_border[iextra]]->pack_border(n,list,&buf[m]); - - return m; -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecAngle::pack_border_hybrid(int n, int *list, double *buf) -{ - int i,j,m; - - m = 0; - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = ubuf(molecule[j]).d; - } - return m; -} - -/* ---------------------------------------------------------------------- */ - -void AtomVecAngle::unpack_border(int n, int first, double *buf) -{ - int i,m,last; - - m = 0; - last = first + n; - for (i = first; i < last; i++) { - if (i == nmax) grow(0); - x[i][0] = buf[m++]; - x[i][1] = buf[m++]; - x[i][2] = buf[m++]; - tag[i] = (tagint) ubuf(buf[m++]).i; - type[i] = (int) ubuf(buf[m++]).i; - mask[i] = (int) ubuf(buf[m++]).i; - molecule[i] = (tagint) ubuf(buf[m++]).i; - } - - if (atom->nextra_border) - for (int iextra = 0; iextra < atom->nextra_border; iextra++) - m += modify->fix[atom->extra_border[iextra]]-> - unpack_border(n,first,&buf[m]); -} - -/* ---------------------------------------------------------------------- */ - -void AtomVecAngle::unpack_border_vel(int n, int first, double *buf) -{ - int i,m,last; - - m = 0; - last = first + n; - for (i = first; i < last; i++) { - if (i == nmax) grow(0); - x[i][0] = buf[m++]; - x[i][1] = buf[m++]; - x[i][2] = buf[m++]; - tag[i] = (tagint) ubuf(buf[m++]).i; - type[i] = (int) ubuf(buf[m++]).i; - mask[i] = (int) ubuf(buf[m++]).i; - molecule[i] = (tagint) ubuf(buf[m++]).i; - v[i][0] = buf[m++]; - v[i][1] = buf[m++]; - v[i][2] = buf[m++]; - } - - if (atom->nextra_border) - for (int iextra = 0; iextra < atom->nextra_border; iextra++) - m += modify->fix[atom->extra_border[iextra]]-> - unpack_border(n,first,&buf[m]); -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecAngle::unpack_border_hybrid(int n, int first, double *buf) -{ - int i,m,last; - - m = 0; - last = first + n; - for (i = first; i < last; i++) - molecule[i] = (tagint) ubuf(buf[m++]).i; - return m; + delete [] bond_negative; + delete [] angle_negative; } /* ---------------------------------------------------------------------- - pack data for atom I for sending to another proc - xyz must be 1st 3 values, so comm::exchange() can test on them + set local copies of all grow ptrs used by this class, except defaults + needed in replicate when 2 atom classes exist and it calls pack_restart() ------------------------------------------------------------------------- */ -int AtomVecAngle::pack_exchange(int i, double *buf) +void AtomVecAngle::grow_pointers() { - int k; - - int m = 1; - buf[m++] = x[i][0]; - buf[m++] = x[i][1]; - buf[m++] = x[i][2]; - buf[m++] = v[i][0]; - buf[m++] = v[i][1]; - buf[m++] = v[i][2]; - buf[m++] = ubuf(tag[i]).d; - buf[m++] = ubuf(type[i]).d; - buf[m++] = ubuf(mask[i]).d; - buf[m++] = ubuf(image[i]).d; - - buf[m++] = ubuf(molecule[i]).d; - - buf[m++] = ubuf(num_bond[i]).d; - for (k = 0; k < num_bond[i]; k++) { - buf[m++] = ubuf(bond_type[i][k]).d; - buf[m++] = ubuf(bond_atom[i][k]).d; - } - - buf[m++] = ubuf(num_angle[i]).d; - for (k = 0; k < num_angle[i]; k++) { - buf[m++] = ubuf(angle_type[i][k]).d; - buf[m++] = ubuf(angle_atom1[i][k]).d; - buf[m++] = ubuf(angle_atom2[i][k]).d; - buf[m++] = ubuf(angle_atom3[i][k]).d; - } - - buf[m++] = ubuf(nspecial[i][0]).d; - buf[m++] = ubuf(nspecial[i][1]).d; - buf[m++] = ubuf(nspecial[i][2]).d; - for (k = 0; k < nspecial[i][2]; k++) buf[m++] = ubuf(special[i][k]).d; - - if (atom->nextra_grow) - for (int iextra = 0; iextra < atom->nextra_grow; iextra++) - m += modify->fix[atom->extra_grow[iextra]]->pack_exchange(i,&buf[m]); - - buf[0] = m; - return m; -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecAngle::unpack_exchange(double *buf) -{ - int k; - - int nlocal = atom->nlocal; - if (nlocal == nmax) grow(0); - - int m = 1; - x[nlocal][0] = buf[m++]; - x[nlocal][1] = buf[m++]; - x[nlocal][2] = buf[m++]; - v[nlocal][0] = buf[m++]; - v[nlocal][1] = buf[m++]; - v[nlocal][2] = buf[m++]; - tag[nlocal] = (tagint) ubuf(buf[m++]).i; - type[nlocal] = (int) ubuf(buf[m++]).i; - mask[nlocal] = (int) ubuf(buf[m++]).i; - image[nlocal] = (imageint) ubuf(buf[m++]).i; - - molecule[nlocal] = (tagint) ubuf(buf[m++]).i; - - num_bond[nlocal] = (int) ubuf(buf[m++]).i; - for (k = 0; k < num_bond[nlocal]; k++) { - bond_type[nlocal][k] = (int) ubuf(buf[m++]).i; - bond_atom[nlocal][k] = (tagint) ubuf(buf[m++]).i; - } - - num_angle[nlocal] = (int) ubuf(buf[m++]).i; - for (k = 0; k < num_angle[nlocal]; k++) { - angle_type[nlocal][k] = (int) ubuf(buf[m++]).i; - angle_atom1[nlocal][k] = (tagint) ubuf(buf[m++]).i; - angle_atom2[nlocal][k] = (tagint) ubuf(buf[m++]).i; - angle_atom3[nlocal][k] = (tagint) ubuf(buf[m++]).i; - } - - nspecial[nlocal][0] = (int) ubuf(buf[m++]).i; - nspecial[nlocal][1] = (int) ubuf(buf[m++]).i; - nspecial[nlocal][2] = (int) ubuf(buf[m++]).i; - for (k = 0; k < nspecial[nlocal][2]; k++) - special[nlocal][k] = (tagint) ubuf(buf[m++]).i; - - if (atom->nextra_grow) - for (int iextra = 0; iextra < atom->nextra_grow; iextra++) - m += modify->fix[atom->extra_grow[iextra]]-> - unpack_exchange(nlocal,&buf[m]); - - atom->nlocal++; - return m; -} - -/* ---------------------------------------------------------------------- - size of restart data for all atoms owned by this proc - include extra data stored by fixes -------------------------------------------------------------------------- */ - -int AtomVecAngle::size_restart() -{ - int i; - - int nlocal = atom->nlocal; - int n = 0; - for (i = 0; i < nlocal; i++) - n += 14 + 2*num_bond[i] + 4*num_angle[i]; - - if (atom->nextra_restart) - for (int iextra = 0; iextra < atom->nextra_restart; iextra++) - for (i = 0; i < nlocal; i++) - n += modify->fix[atom->extra_restart[iextra]]->size_restart(i); - - return n; + num_bond = atom->num_bond; + bond_type = atom->bond_type; + num_angle = atom->num_angle; + angle_type = atom->angle_type; + nspecial = atom->nspecial; } /* ---------------------------------------------------------------------- - pack atom I's data for restart file including extra quantities - xyz must be 1st 3 values, so that read_restart can test on them - molecular types may be negative, but write as positive + modify values for AtomVec::pack_restart() to pack ------------------------------------------------------------------------- */ -int AtomVecAngle::pack_restart(int i, double *buf) +void AtomVecAngle::pack_restart_pre(int ilocal) { - int k; - - int m = 1; - buf[m++] = x[i][0]; - buf[m++] = x[i][1]; - buf[m++] = x[i][2]; - buf[m++] = ubuf(tag[i]).d; - buf[m++] = ubuf(type[i]).d; - buf[m++] = ubuf(mask[i]).d; - buf[m++] = ubuf(image[i]).d; - buf[m++] = v[i][0]; - buf[m++] = v[i][1]; - buf[m++] = v[i][2]; + // insure negative vectors are needed length - buf[m++] = ubuf(molecule[i]).d; - - buf[m++] = ubuf(num_bond[i]).d; - for (k = 0; k < num_bond[i]; k++) { - buf[m++] = ubuf(MAX(bond_type[i][k],-bond_type[i][k])).d; - buf[m++] = ubuf(bond_atom[i][k]).d; + if (bond_per_atom < atom->bond_per_atom) { + delete [] bond_negative; + bond_per_atom = atom->bond_per_atom; + bond_negative = new int[bond_per_atom]; } - - buf[m++] = ubuf(num_angle[i]).d; - for (k = 0; k < num_angle[i]; k++) { - buf[m++] = ubuf(MAX(angle_type[i][k],-angle_type[i][k])).d; - buf[m++] = ubuf(angle_atom1[i][k]).d; - buf[m++] = ubuf(angle_atom2[i][k]).d; - buf[m++] = ubuf(angle_atom3[i][k]).d; + if (angle_per_atom < atom->angle_per_atom) { + delete [] angle_negative; + angle_per_atom = atom->angle_per_atom; + angle_negative = new int[angle_per_atom]; } - if (atom->nextra_restart) - for (int iextra = 0; iextra < atom->nextra_restart; iextra++) - m += modify->fix[atom->extra_restart[iextra]]->pack_restart(i,&buf[m]); - - buf[0] = m; - return m; -} - -/* ---------------------------------------------------------------------- - unpack data for one atom from restart file including extra quantities -------------------------------------------------------------------------- */ - -int AtomVecAngle::unpack_restart(double *buf) -{ - int k; + // flip any negative types to positive and flag which ones - int nlocal = atom->nlocal; - if (nlocal == nmax) { - grow(0); - if (atom->nextra_store) - memory->grow(atom->extra,nmax,atom->nextra_store,"atom:extra"); + int any_bond_negative = 0; + for (int m = 0; m < num_bond[ilocal]; m++) { + if (bond_type[ilocal][m] < 0) { + bond_negative[m] = 1; + bond_type[ilocal][m] = -bond_type[ilocal][m]; + any_bond_negative = 1; + } else bond_negative[m] = 0; } - int m = 1; - x[nlocal][0] = buf[m++]; - x[nlocal][1] = buf[m++]; - x[nlocal][2] = buf[m++]; - tag[nlocal] = (tagint) ubuf(buf[m++]).i; - type[nlocal] = (int) ubuf(buf[m++]).i; - mask[nlocal] = (int) ubuf(buf[m++]).i; - image[nlocal] = (imageint) ubuf(buf[m++]).i; - v[nlocal][0] = buf[m++]; - v[nlocal][1] = buf[m++]; - v[nlocal][2] = buf[m++]; - - molecule[nlocal] = (tagint) ubuf(buf[m++]).i; - - num_bond[nlocal] = (int) ubuf(buf[m++]).i; - for (k = 0; k < num_bond[nlocal]; k++) { - bond_type[nlocal][k] = (int) ubuf(buf[m++]).i; - bond_atom[nlocal][k] = (tagint) ubuf(buf[m++]).i; - } - - num_angle[nlocal] = (int) ubuf(buf[m++]).i; - for (k = 0; k < num_angle[nlocal]; k++) { - angle_type[nlocal][k] = (int) ubuf(buf[m++]).i; - angle_atom1[nlocal][k] = (tagint) ubuf(buf[m++]).i; - angle_atom2[nlocal][k] = (tagint) ubuf(buf[m++]).i; - angle_atom3[nlocal][k] = (tagint) ubuf(buf[m++]).i; - } - - nspecial[nlocal][0] = nspecial[nlocal][1] = nspecial[nlocal][2] = 0; - - double **extra = atom->extra; - if (atom->nextra_store) { - int size = static_cast (buf[0]) - m; - for (int i = 0; i < size; i++) extra[nlocal][i] = buf[m++]; + int any_angle_negative = 0; + for (int m = 0; m < num_angle[ilocal]; m++) { + if (angle_type[ilocal][m] < 0) { + angle_negative[m] = 1; + angle_type[ilocal][m] = -angle_type[ilocal][m]; + any_angle_negative = 1; + } else angle_negative[m] = 0; } - - atom->nlocal++; - return m; -} - -/* ---------------------------------------------------------------------- - create one atom of itype at coord - set other values to defaults -------------------------------------------------------------------------- */ - -void AtomVecAngle::create_atom(int itype, double *coord) -{ - int nlocal = atom->nlocal; - if (nlocal == nmax) grow(0); - - tag[nlocal] = 0; - type[nlocal] = itype; - x[nlocal][0] = coord[0]; - x[nlocal][1] = coord[1]; - x[nlocal][2] = coord[2]; - mask[nlocal] = 1; - image[nlocal] = ((imageint) IMGMAX << IMG2BITS) | - ((imageint) IMGMAX << IMGBITS) | IMGMAX; - v[nlocal][0] = 0.0; - v[nlocal][1] = 0.0; - v[nlocal][2] = 0.0; - - molecule[nlocal] = 0; - num_bond[nlocal] = 0; - num_angle[nlocal] = 0; - nspecial[nlocal][0] = nspecial[nlocal][1] = nspecial[nlocal][2] = 0; - - atom->nlocal++; -} - -/* ---------------------------------------------------------------------- - unpack one line from Atoms section of data file - initialize other atom quantities -------------------------------------------------------------------------- */ - -void AtomVecAngle::data_atom(double *coord, imageint imagetmp, char **values) -{ - int nlocal = atom->nlocal; - if (nlocal == nmax) grow(0); - - tag[nlocal] = utils::tnumeric(FLERR,values[0],true,lmp); - molecule[nlocal] = utils::tnumeric(FLERR,values[1],true,lmp); - type[nlocal] = utils::inumeric(FLERR,values[2],true,lmp); - if (type[nlocal] <= 0 || type[nlocal] > atom->ntypes) - error->one(FLERR,"Invalid atom type in Atoms section of data file"); - - x[nlocal][0] = coord[0]; - x[nlocal][1] = coord[1]; - x[nlocal][2] = coord[2]; - - image[nlocal] = imagetmp; - - mask[nlocal] = 1; - v[nlocal][0] = 0.0; - v[nlocal][1] = 0.0; - v[nlocal][2] = 0.0; - num_bond[nlocal] = 0; - num_angle[nlocal] = 0; - - atom->nlocal++; } /* ---------------------------------------------------------------------- - unpack hybrid quantities from one line in Atoms section of data file - initialize other atom quantities for this sub-style + unmodify values packed by AtomVec::pack_restart() ------------------------------------------------------------------------- */ -int AtomVecAngle::data_atom_hybrid(int nlocal, char **values) +void AtomVecAngle::pack_restart_post(int ilocal) { - molecule[nlocal] = utils::tnumeric(FLERR,values[0],true,lmp); + // restore the flagged types to their negative values - num_bond[nlocal] = 0; - num_angle[nlocal] = 0; - - return 1; -} - -/* ---------------------------------------------------------------------- - pack atom info for data file including 3 image flags -------------------------------------------------------------------------- */ - -void AtomVecAngle::pack_data(double **buf) -{ - int nlocal = atom->nlocal; - for (int i = 0; i < nlocal; i++) { - buf[i][0] = ubuf(tag[i]).d; - buf[i][1] = ubuf(molecule[i]).d; - buf[i][2] = ubuf(type[i]).d; - buf[i][3] = x[i][0]; - buf[i][4] = x[i][1]; - buf[i][5] = x[i][2]; - buf[i][6] = ubuf((image[i] & IMGMASK) - IMGMAX).d; - buf[i][7] = ubuf((image[i] >> IMGBITS & IMGMASK) - IMGMAX).d; - buf[i][8] = ubuf((image[i] >> IMG2BITS) - IMGMAX).d; + if (any_bond_negative) { + for (int m = 0; m < num_bond[ilocal]; m++) + if (bond_negative[m]) bond_type[ilocal][m] = -bond_type[ilocal][m]; } -} - -/* ---------------------------------------------------------------------- - pack hybrid atom info for data file -------------------------------------------------------------------------- */ -int AtomVecAngle::pack_data_hybrid(int i, double *buf) -{ - buf[0] = ubuf(molecule[i]).d; - return 1; -} - -/* ---------------------------------------------------------------------- - write atom info to data file including 3 image flags -------------------------------------------------------------------------- */ - -void AtomVecAngle::write_data(FILE *fp, int n, double **buf) -{ - for (int i = 0; i < n; i++) - fprintf(fp,TAGINT_FORMAT " " TAGINT_FORMAT - " %d %-1.16e %-1.16e %-1.16e %d %d %d\n", - (tagint) ubuf(buf[i][0]).i,(tagint) ubuf(buf[i][1]).i, - (int) ubuf(buf[i][2]).i, - buf[i][3],buf[i][4],buf[i][5], - (int) ubuf(buf[i][6]).i,(int) ubuf(buf[i][7]).i, - (int) ubuf(buf[i][8]).i); + if (any_angle_negative) { + for (int m = 0; m < num_angle[ilocal]; m++) + if (angle_negative[m]) angle_type[ilocal][m] = -angle_type[ilocal][m]; + } } /* ---------------------------------------------------------------------- - write hybrid atom info to data file + initialize other atom quantities after AtomVec::unpack_restart() ------------------------------------------------------------------------- */ -int AtomVecAngle::write_data_hybrid(FILE *fp, double *buf) +void AtomVecAngle::unpack_restart_init(int ilocal) { - fprintf(fp," " TAGINT_FORMAT,(tagint) ubuf(buf[0]).i); - return 1; + nspecial[ilocal][0] = 0; + nspecial[ilocal][1] = 0; + nspecial[ilocal][2] = 0; } /* ---------------------------------------------------------------------- - return # of bytes of allocated memory + modify what AtomVec::data_atom() just unpacked + or initialize other atom quantities ------------------------------------------------------------------------- */ -bigint AtomVecAngle::memory_usage() +void AtomVecAngle::data_atom_post(int ilocal) { - bigint bytes = 0; - - if (atom->memcheck("tag")) bytes += memory->usage(tag,nmax); - if (atom->memcheck("type")) bytes += memory->usage(type,nmax); - if (atom->memcheck("mask")) bytes += memory->usage(mask,nmax); - if (atom->memcheck("image")) bytes += memory->usage(image,nmax); - if (atom->memcheck("x")) bytes += memory->usage(x,nmax,3); - if (atom->memcheck("v")) bytes += memory->usage(v,nmax,3); - if (atom->memcheck("f")) bytes += memory->usage(f,nmax*comm->nthreads,3); - - if (atom->memcheck("molecule")) bytes += memory->usage(molecule,nmax); - if (atom->memcheck("nspecial")) bytes += memory->usage(nspecial,nmax,3); - if (atom->memcheck("special")) - bytes += memory->usage(special,nmax,atom->maxspecial); - - if (atom->memcheck("num_bond")) bytes += memory->usage(num_bond,nmax); - if (atom->memcheck("bond_type")) - bytes += memory->usage(bond_type,nmax,atom->bond_per_atom); - if (atom->memcheck("bond_atom")) - bytes += memory->usage(bond_atom,nmax,atom->bond_per_atom); - - if (atom->memcheck("num_angle")) bytes += memory->usage(num_angle,nmax); - if (atom->memcheck("angle_type")) - bytes += memory->usage(angle_type,nmax,atom->angle_per_atom); - if (atom->memcheck("angle_atom1")) - bytes += memory->usage(angle_atom1,nmax,atom->angle_per_atom); - if (atom->memcheck("angle_atom2")) - bytes += memory->usage(angle_atom2,nmax,atom->angle_per_atom); - if (atom->memcheck("angle_atom3")) - bytes += memory->usage(angle_atom3,nmax,atom->angle_per_atom); - - return bytes; + num_bond[ilocal] = 0; + num_angle[ilocal] = 0; + nspecial[ilocal][0] = 0; + nspecial[ilocal][1] = 0; + nspecial[ilocal][2] = 0; } diff --git a/src/MOLECULE/atom_vec_angle.h b/src/MOLECULE/atom_vec_angle.h index 9030cce0d84665e29b473f6ffda7418af4b8e26b..0ce0b4baabc09baae2897f6b11fb495d78f8ef89 100644 --- a/src/MOLECULE/atom_vec_angle.h +++ b/src/MOLECULE/atom_vec_angle.h @@ -27,50 +27,22 @@ namespace LAMMPS_NS { class AtomVecAngle : public AtomVec { public: AtomVecAngle(class LAMMPS *); - virtual ~AtomVecAngle() {} - void grow(int); - void grow_reset(); - void copy(int, int, int); - virtual int pack_comm(int, int *, double *, int, int *); - virtual int pack_comm_vel(int, int *, double *, int, int *); - virtual void unpack_comm(int, int, double *); - virtual void unpack_comm_vel(int, int, double *); - int pack_reverse(int, int, double *); - void unpack_reverse(int, int *, double *); - virtual int pack_border(int, int *, double *, int, int *); - virtual int pack_border_vel(int, int *, double *, int, int *); - int pack_border_hybrid(int, int *, double *); - virtual void unpack_border(int, int, double *); - virtual void unpack_border_vel(int, int, double *); - int unpack_border_hybrid(int, int, double *); - virtual int pack_exchange(int, double *); - virtual int unpack_exchange(double *); - int size_restart(); - int pack_restart(int, double *); - int unpack_restart(double *); - void create_atom(int, double *); - void data_atom(double *, imageint, char **); - int data_atom_hybrid(int, char **); - void pack_data(double **); - int pack_data_hybrid(int, double *); - void write_data(FILE *, int, double **); - int write_data_hybrid(FILE *, double *); - bigint memory_usage(); - - protected: - tagint *tag; - int *type,*mask; - imageint *image; - double **x,**v,**f; - tagint *molecule; + ~AtomVecAngle(); + + void grow_pointers(); + void pack_restart_pre(int); + void pack_restart_post(int); + void unpack_restart_init(int); + void data_atom_post(int); + + private: + int *num_bond,*num_angle; + int **bond_type,**angle_type; int **nspecial; - tagint **special; - int *num_bond; - int **bond_type; - tagint **bond_atom; - int *num_angle; - int **angle_type; - tagint **angle_atom1,**angle_atom2,**angle_atom3; + + int any_bond_negative,any_angle_negative; + int bond_per_atom,angle_per_atom; + int *bond_negative,*angle_negative; }; } @@ -80,13 +52,4 @@ class AtomVecAngle : public AtomVec { /* ERROR/WARNING messages: -E: Per-processor system is too big - -The number of owned atoms plus ghost atoms on a single -processor must fit in 32-bit integer. - -E: Invalid atom type in Atoms section of data file - -Atom types must range from 1 to specified # of types. - */ diff --git a/src/MOLECULE/atom_vec_bond.cpp b/src/MOLECULE/atom_vec_bond.cpp index 0bcd614f94b4e5e7fd9822223af9538e86ee5d07..2fa445c8ee8fbc08750152b27470fe74fb765e01 100644 --- a/src/MOLECULE/atom_vec_bond.cpp +++ b/src/MOLECULE/atom_vec_bond.cpp @@ -13,13 +13,6 @@ #include "atom_vec_bond.h" #include "atom.h" -#include "comm.h" -#include "domain.h" -#include "modify.h" -#include "fix.h" -#include "memory.h" -#include "error.h" -#include "utils.h" using namespace LAMMPS_NS; @@ -31,829 +24,114 @@ AtomVecBond::AtomVecBond(LAMMPS *lmp) : AtomVec(lmp) bonds_allow = 1; mass_type = 1; - comm_x_only = comm_f_only = 1; - size_forward = 3; - size_reverse = 3; - size_border = 7; - size_velocity = 3; - size_data_atom = 6; - size_data_vel = 4; - xcol_data = 4; - atom->molecule_flag = 1; -} - -/* ---------------------------------------------------------------------- - grow atom arrays - n = 0 grows arrays by a chunk - n > 0 allocates arrays to size n -------------------------------------------------------------------------- */ - -void AtomVecBond::grow(int n) -{ - if (n == 0) grow_nmax(); - else nmax = n; - atom->nmax = nmax; - if (nmax < 0 || nmax > MAXSMALLINT) - error->one(FLERR,"Per-processor system is too big"); - - tag = memory->grow(atom->tag,nmax,"atom:tag"); - type = memory->grow(atom->type,nmax,"atom:type"); - mask = memory->grow(atom->mask,nmax,"atom:mask"); - image = memory->grow(atom->image,nmax,"atom:image"); - x = memory->grow(atom->x,nmax,3,"atom:x"); - v = memory->grow(atom->v,nmax,3,"atom:v"); - f = memory->grow(atom->f,nmax*comm->nthreads,3,"atom:f"); - - molecule = memory->grow(atom->molecule,nmax,"atom:molecule"); - - nspecial = memory->grow(atom->nspecial,nmax,3,"atom:nspecial"); - special = memory->grow(atom->special,nmax,atom->maxspecial,"atom:special"); - - num_bond = memory->grow(atom->num_bond,nmax,"atom:num_bond"); - bond_type = memory->grow(atom->bond_type,nmax,atom->bond_per_atom, - "atom:bond_type"); - bond_atom = memory->grow(atom->bond_atom,nmax,atom->bond_per_atom, - "atom:bond_atom"); - - if (atom->nextra_grow) - for (int iextra = 0; iextra < atom->nextra_grow; iextra++) - modify->fix[atom->extra_grow[iextra]]->grow_arrays(nmax); -} - -/* ---------------------------------------------------------------------- - reset local array ptrs -------------------------------------------------------------------------- */ - -void AtomVecBond::grow_reset() -{ - tag = atom->tag; type = atom->type; - mask = atom->mask; image = atom->image; - x = atom->x; v = atom->v; f = atom->f; - molecule = atom->molecule; - nspecial = atom->nspecial; special = atom->special; - num_bond = atom->num_bond; bond_type = atom->bond_type; - bond_atom = atom->bond_atom; -} - -/* ---------------------------------------------------------------------- - copy atom I info to atom J -------------------------------------------------------------------------- */ - -void AtomVecBond::copy(int i, int j, int delflag) -{ - int k; - - tag[j] = tag[i]; - type[j] = type[i]; - mask[j] = mask[i]; - image[j] = image[i]; - x[j][0] = x[i][0]; - x[j][1] = x[i][1]; - x[j][2] = x[i][2]; - v[j][0] = v[i][0]; - v[j][1] = v[i][1]; - v[j][2] = v[i][2]; - - molecule[j] = molecule[i]; - - num_bond[j] = num_bond[i]; - for (k = 0; k < num_bond[j]; k++) { - bond_type[j][k] = bond_type[i][k]; - bond_atom[j][k] = bond_atom[i][k]; - } - - nspecial[j][0] = nspecial[i][0]; - nspecial[j][1] = nspecial[i][1]; - nspecial[j][2] = nspecial[i][2]; - for (k = 0; k < nspecial[j][2]; k++) special[j][k] = special[i][k]; - - if (atom->nextra_grow) - for (int iextra = 0; iextra < atom->nextra_grow; iextra++) - modify->fix[atom->extra_grow[iextra]]->copy_arrays(i,j,delflag); -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecBond::pack_comm(int n, int *list, double *buf, - int pbc_flag, int *pbc) -{ - int i,j,m; - double dx,dy,dz; - - m = 0; - if (pbc_flag == 0) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = x[j][0]; - buf[m++] = x[j][1]; - buf[m++] = x[j][2]; - } - } else { - if (domain->triclinic == 0) { - dx = pbc[0]*domain->xprd; - dy = pbc[1]*domain->yprd; - dz = pbc[2]*domain->zprd; - } else { - dx = pbc[0]*domain->xprd + pbc[5]*domain->xy + pbc[4]*domain->xz; - dy = pbc[1]*domain->yprd + pbc[3]*domain->yz; - dz = pbc[2]*domain->zprd; - } - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = x[j][0] + dx; - buf[m++] = x[j][1] + dy; - buf[m++] = x[j][2] + dz; - } - } - return m; -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecBond::pack_comm_vel(int n, int *list, double *buf, - int pbc_flag, int *pbc) -{ - int i,j,m; - double dx,dy,dz,dvx,dvy,dvz; - - m = 0; - if (pbc_flag == 0) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = x[j][0]; - buf[m++] = x[j][1]; - buf[m++] = x[j][2]; - buf[m++] = v[j][0]; - buf[m++] = v[j][1]; - buf[m++] = v[j][2]; - } - } else { - if (domain->triclinic == 0) { - dx = pbc[0]*domain->xprd; - dy = pbc[1]*domain->yprd; - dz = pbc[2]*domain->zprd; - } else { - dx = pbc[0]*domain->xprd + pbc[5]*domain->xy + pbc[4]*domain->xz; - dy = pbc[1]*domain->yprd + pbc[3]*domain->yz; - dz = pbc[2]*domain->zprd; - } - if (!deform_vremap) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = x[j][0] + dx; - buf[m++] = x[j][1] + dy; - buf[m++] = x[j][2] + dz; - buf[m++] = v[j][0]; - buf[m++] = v[j][1]; - buf[m++] = v[j][2]; - } - } else { - dvx = pbc[0]*h_rate[0] + pbc[5]*h_rate[5] + pbc[4]*h_rate[4]; - dvy = pbc[1]*h_rate[1] + pbc[3]*h_rate[3]; - dvz = pbc[2]*h_rate[2]; - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = x[j][0] + dx; - buf[m++] = x[j][1] + dy; - buf[m++] = x[j][2] + dz; - if (mask[i] & deform_groupbit) { - buf[m++] = v[j][0] + dvx; - buf[m++] = v[j][1] + dvy; - buf[m++] = v[j][2] + dvz; - } else { - buf[m++] = v[j][0]; - buf[m++] = v[j][1]; - buf[m++] = v[j][2]; - } - } - } - } - return m; -} - -/* ---------------------------------------------------------------------- */ - -void AtomVecBond::unpack_comm(int n, int first, double *buf) -{ - int i,m,last; - - m = 0; - last = first + n; - for (i = first; i < last; i++) { - x[i][0] = buf[m++]; - x[i][1] = buf[m++]; - x[i][2] = buf[m++]; - } -} - -/* ---------------------------------------------------------------------- */ - -void AtomVecBond::unpack_comm_vel(int n, int first, double *buf) -{ - int i,m,last; - - m = 0; - last = first + n; - for (i = first; i < last; i++) { - x[i][0] = buf[m++]; - x[i][1] = buf[m++]; - x[i][2] = buf[m++]; - v[i][0] = buf[m++]; - v[i][1] = buf[m++]; - v[i][2] = buf[m++]; - } -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecBond::pack_reverse(int n, int first, double *buf) -{ - int i,m,last; - - m = 0; - last = first + n; - for (i = first; i < last; i++) { - buf[m++] = f[i][0]; - buf[m++] = f[i][1]; - buf[m++] = f[i][2]; - } - return m; -} - -/* ---------------------------------------------------------------------- */ - -void AtomVecBond::unpack_reverse(int n, int *list, double *buf) -{ - int i,j,m; - - m = 0; - for (i = 0; i < n; i++) { - j = list[i]; - f[j][0] += buf[m++]; - f[j][1] += buf[m++]; - f[j][2] += buf[m++]; - } -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecBond::pack_border(int n, int *list, double *buf, - int pbc_flag, int *pbc) -{ - int i,j,m; - double dx,dy,dz; - - m = 0; - if (pbc_flag == 0) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = x[j][0]; - buf[m++] = x[j][1]; - buf[m++] = x[j][2]; - buf[m++] = ubuf(tag[j]).d; - buf[m++] = ubuf(type[j]).d; - buf[m++] = ubuf(mask[j]).d; - buf[m++] = ubuf(molecule[j]).d; - } - } else { - if (domain->triclinic == 0) { - dx = pbc[0]*domain->xprd; - dy = pbc[1]*domain->yprd; - dz = pbc[2]*domain->zprd; - } else { - dx = pbc[0]; - dy = pbc[1]; - dz = pbc[2]; - } - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = x[j][0] + dx; - buf[m++] = x[j][1] + dy; - buf[m++] = x[j][2] + dz; - buf[m++] = ubuf(tag[j]).d; - buf[m++] = ubuf(type[j]).d; - buf[m++] = ubuf(mask[j]).d; - buf[m++] = ubuf(molecule[j]).d; - } - } - - if (atom->nextra_border) - for (int iextra = 0; iextra < atom->nextra_border; iextra++) - m += modify->fix[atom->extra_border[iextra]]->pack_border(n,list,&buf[m]); - - return m; -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecBond::pack_border_vel(int n, int *list, double *buf, - int pbc_flag, int *pbc) -{ - int i,j,m; - double dx,dy,dz,dvx,dvy,dvz; - - m = 0; - if (pbc_flag == 0) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = x[j][0]; - buf[m++] = x[j][1]; - buf[m++] = x[j][2]; - buf[m++] = ubuf(tag[j]).d; - buf[m++] = ubuf(type[j]).d; - buf[m++] = ubuf(mask[j]).d; - buf[m++] = ubuf(molecule[j]).d; - buf[m++] = v[j][0]; - buf[m++] = v[j][1]; - buf[m++] = v[j][2]; - } - } else { - if (domain->triclinic == 0) { - dx = pbc[0]*domain->xprd; - dy = pbc[1]*domain->yprd; - dz = pbc[2]*domain->zprd; - } else { - dx = pbc[0]; - dy = pbc[1]; - dz = pbc[2]; - } - if (!deform_vremap) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = x[j][0] + dx; - buf[m++] = x[j][1] + dy; - buf[m++] = x[j][2] + dz; - buf[m++] = ubuf(tag[j]).d; - buf[m++] = ubuf(type[j]).d; - buf[m++] = ubuf(mask[j]).d; - buf[m++] = ubuf(molecule[j]).d; - buf[m++] = v[j][0]; - buf[m++] = v[j][1]; - buf[m++] = v[j][2]; - } - } else { - dvx = pbc[0]*h_rate[0] + pbc[5]*h_rate[5] + pbc[4]*h_rate[4]; - dvy = pbc[1]*h_rate[1] + pbc[3]*h_rate[3]; - dvz = pbc[2]*h_rate[2]; - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = x[j][0] + dx; - buf[m++] = x[j][1] + dy; - buf[m++] = x[j][2] + dz; - buf[m++] = ubuf(tag[j]).d; - buf[m++] = ubuf(type[j]).d; - buf[m++] = ubuf(mask[j]).d; - buf[m++] = ubuf(molecule[j]).d; - if (mask[i] & deform_groupbit) { - buf[m++] = v[j][0] + dvx; - buf[m++] = v[j][1] + dvy; - buf[m++] = v[j][2] + dvz; - } else { - buf[m++] = v[j][0]; - buf[m++] = v[j][1]; - buf[m++] = v[j][2]; - } - } - } - } - - if (atom->nextra_border) - for (int iextra = 0; iextra < atom->nextra_border; iextra++) - m += modify->fix[atom->extra_border[iextra]]->pack_border(n,list,&buf[m]); - - return m; -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecBond::pack_border_hybrid(int n, int *list, double *buf) -{ - int i,j,m; - - m = 0; - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = ubuf(molecule[j]).d; - } - return m; -} - -/* ---------------------------------------------------------------------- */ - -void AtomVecBond::unpack_border(int n, int first, double *buf) -{ - int i,m,last; - - m = 0; - last = first + n; - for (i = first; i < last; i++) { - if (i == nmax) grow(0); - x[i][0] = buf[m++]; - x[i][1] = buf[m++]; - x[i][2] = buf[m++]; - tag[i] = (tagint) ubuf(buf[m++]).i; - type[i] = (int) ubuf(buf[m++]).i; - mask[i] = (int) ubuf(buf[m++]).i; - molecule[i] = (tagint) ubuf(buf[m++]).i; - } - if (atom->nextra_border) - for (int iextra = 0; iextra < atom->nextra_border; iextra++) - m += modify->fix[atom->extra_border[iextra]]-> - unpack_border(n,first,&buf[m]); + // strings with peratom variables to include in each AtomVec method + // strings cannot contain fields in corresponding AtomVec default strings + // order of fields in a string does not matter + // except: fields_data_atom & fields_data_vel must match data file + + fields_grow = (char *) + "molecule num_bond bond_type bond_atom nspecial special"; + fields_copy = (char *) + "molecule num_bond bond_type bond_atom nspecial special"; + fields_comm = (char *) ""; + fields_comm_vel = (char *) ""; + fields_reverse = (char *) ""; + fields_border = (char *) "molecule"; + fields_border_vel = (char *) "molecule"; + fields_exchange = (char *) + "molecule num_bond bond_type bond_atom nspecial special"; + fields_restart = (char *) "molecule num_bond bond_type bond_atom"; + fields_create = (char *) "molecule num_bond nspecial"; + fields_data_atom = (char *) "id molecule type x"; + fields_data_vel = (char *) "id v"; + + setup_fields(); + + bond_per_atom = 0; + bond_negative = NULL; } /* ---------------------------------------------------------------------- */ -void AtomVecBond::unpack_border_vel(int n, int first, double *buf) +AtomVecBond::~AtomVecBond() { - int i,m,last; - - m = 0; - last = first + n; - for (i = first; i < last; i++) { - if (i == nmax) grow(0); - x[i][0] = buf[m++]; - x[i][1] = buf[m++]; - x[i][2] = buf[m++]; - tag[i] = (tagint) ubuf(buf[m++]).i; - type[i] = (int) ubuf(buf[m++]).i; - mask[i] = (int) ubuf(buf[m++]).i; - molecule[i] = (tagint) ubuf(buf[m++]).i; - v[i][0] = buf[m++]; - v[i][1] = buf[m++]; - v[i][2] = buf[m++]; - } - - if (atom->nextra_border) - for (int iextra = 0; iextra < atom->nextra_border; iextra++) - m += modify->fix[atom->extra_border[iextra]]-> - unpack_border(n,first,&buf[m]); -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecBond::unpack_border_hybrid(int n, int first, double *buf) -{ - int i,m,last; - - m = 0; - last = first + n; - for (i = first; i < last; i++) - molecule[i] = (tagint) ubuf(buf[m++]).i; - return m; + delete [] bond_negative; } /* ---------------------------------------------------------------------- - pack data for atom I for sending to another proc - xyz must be 1st 3 values, so comm::exchange() can test on them + set local copies of all grow ptrs used by this class, except defaults + needed in replicate when 2 atom classes exist and it calls pack_restart() ------------------------------------------------------------------------- */ -int AtomVecBond::pack_exchange(int i, double *buf) +void AtomVecBond::grow_pointers() { - int k; - - int m = 1; - buf[m++] = x[i][0]; - buf[m++] = x[i][1]; - buf[m++] = x[i][2]; - buf[m++] = v[i][0]; - buf[m++] = v[i][1]; - buf[m++] = v[i][2]; - buf[m++] = ubuf(tag[i]).d; - buf[m++] = ubuf(type[i]).d; - buf[m++] = ubuf(mask[i]).d; - buf[m++] = ubuf(image[i]).d; - - buf[m++] = ubuf(molecule[i]).d; - - buf[m++] = ubuf(num_bond[i]).d; - for (k = 0; k < num_bond[i]; k++) { - buf[m++] = ubuf(bond_type[i][k]).d; - buf[m++] = ubuf(bond_atom[i][k]).d; - } - - buf[m++] = ubuf(nspecial[i][0]).d; - buf[m++] = ubuf(nspecial[i][1]).d; - buf[m++] = ubuf(nspecial[i][2]).d; - for (k = 0; k < nspecial[i][2]; k++) buf[m++] = ubuf(special[i][k]).d; - - if (atom->nextra_grow) - for (int iextra = 0; iextra < atom->nextra_grow; iextra++) - m += modify->fix[atom->extra_grow[iextra]]->pack_exchange(i,&buf[m]); - - buf[0] = m; - return m; -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecBond::unpack_exchange(double *buf) -{ - int k; - - int nlocal = atom->nlocal; - if (nlocal == nmax) grow(0); - - int m = 1; - x[nlocal][0] = buf[m++]; - x[nlocal][1] = buf[m++]; - x[nlocal][2] = buf[m++]; - v[nlocal][0] = buf[m++]; - v[nlocal][1] = buf[m++]; - v[nlocal][2] = buf[m++]; - tag[nlocal] = (tagint) ubuf(buf[m++]).i; - type[nlocal] = (int) ubuf(buf[m++]).i; - mask[nlocal] = (int) ubuf(buf[m++]).i; - image[nlocal] = (imageint) ubuf(buf[m++]).i; - - molecule[nlocal] = (tagint) ubuf(buf[m++]).i; - - num_bond[nlocal] = (int) ubuf(buf[m++]).i; - for (k = 0; k < num_bond[nlocal]; k++) { - bond_type[nlocal][k] = (int) ubuf(buf[m++]).i; - bond_atom[nlocal][k] = (tagint) ubuf(buf[m++]).i; - } - - nspecial[nlocal][0] = (int) ubuf(buf[m++]).i; - nspecial[nlocal][1] = (int) ubuf(buf[m++]).i; - nspecial[nlocal][2] = (int) ubuf(buf[m++]).i; - for (k = 0; k < nspecial[nlocal][2]; k++) - special[nlocal][k] = (tagint) ubuf(buf[m++]).i; - - if (atom->nextra_grow) - for (int iextra = 0; iextra < atom->nextra_grow; iextra++) - m += modify->fix[atom->extra_grow[iextra]]-> - unpack_exchange(nlocal,&buf[m]); - - atom->nlocal++; - return m; + num_bond = atom->num_bond; + bond_type = atom->bond_type; + nspecial = atom->nspecial; } /* ---------------------------------------------------------------------- - size of restart data for all atoms owned by this proc - include extra data stored by fixes + modify values for AtomVec::pack_restart() to pack ------------------------------------------------------------------------- */ -int AtomVecBond::size_restart() +void AtomVecBond::pack_restart_pre(int ilocal) { - int i; - - int nlocal = atom->nlocal; - int n = 0; - for (i = 0; i < nlocal; i++) - n += 13 + 2*num_bond[i]; - - if (atom->nextra_restart) - for (int iextra = 0; iextra < atom->nextra_restart; iextra++) - for (i = 0; i < nlocal; i++) - n += modify->fix[atom->extra_restart[iextra]]->size_restart(i); - - return n; -} - -/* ---------------------------------------------------------------------- - pack atom I's data for restart file including extra quantities - xyz must be 1st 3 values, so that read_restart can test on them - molecular types may be negative, but write as positive -------------------------------------------------------------------------- */ + // insure bond_negative vector is needed length -int AtomVecBond::pack_restart(int i, double *buf) -{ - int k; - - int m = 1; - buf[m++] = x[i][0]; - buf[m++] = x[i][1]; - buf[m++] = x[i][2]; - buf[m++] = ubuf(tag[i]).d; - buf[m++] = ubuf(type[i]).d; - buf[m++] = ubuf(mask[i]).d; - buf[m++] = ubuf(image[i]).d; - buf[m++] = v[i][0]; - buf[m++] = v[i][1]; - buf[m++] = v[i][2]; - - buf[m++] = ubuf(molecule[i]).d; - - buf[m++] = ubuf(num_bond[i]).d; - for (k = 0; k < num_bond[i]; k++) { - buf[m++] = ubuf(MAX(bond_type[i][k],-bond_type[i][k])).d; - buf[m++] = ubuf(bond_atom[i][k]).d; + if (bond_per_atom < atom->bond_per_atom) { + delete [] bond_negative; + bond_per_atom = atom->bond_per_atom; + bond_negative = new int[bond_per_atom]; } - if (atom->nextra_restart) - for (int iextra = 0; iextra < atom->nextra_restart; iextra++) - m += modify->fix[atom->extra_restart[iextra]]->pack_restart(i,&buf[m]); - - buf[0] = m; - return m; -} - -/* ---------------------------------------------------------------------- - unpack data for one atom from restart file including extra quantities -------------------------------------------------------------------------- */ - -int AtomVecBond::unpack_restart(double *buf) -{ - int k; + // flip any negative types to positive and flag which ones - int nlocal = atom->nlocal; - if (nlocal == nmax) { - grow(0); - if (atom->nextra_store) - memory->grow(atom->extra,nmax,atom->nextra_store,"atom:extra"); + any_bond_negative = 0; + for (int m = 0; m < num_bond[ilocal]; m++) { + if (bond_type[ilocal][m] < 0) { + bond_negative[m] = 1; + bond_type[ilocal][m] = -bond_type[ilocal][m]; + any_bond_negative = 1; + } else bond_negative[m] = 0; } - - int m = 1; - x[nlocal][0] = buf[m++]; - x[nlocal][1] = buf[m++]; - x[nlocal][2] = buf[m++]; - tag[nlocal] = (tagint) ubuf(buf[m++]).i; - type[nlocal] = (int) ubuf(buf[m++]).i; - mask[nlocal] = (int) ubuf(buf[m++]).i; - image[nlocal] = (imageint) ubuf(buf[m++]).i; - v[nlocal][0] = buf[m++]; - v[nlocal][1] = buf[m++]; - v[nlocal][2] = buf[m++]; - - molecule[nlocal] = (tagint) ubuf(buf[m++]).i; - - num_bond[nlocal] = (int) ubuf(buf[m++]).i; - for (k = 0; k < num_bond[nlocal]; k++) { - bond_type[nlocal][k] = (int) ubuf(buf[m++]).i; - bond_atom[nlocal][k] = (tagint) ubuf(buf[m++]).i; - } - - nspecial[nlocal][0] = nspecial[nlocal][1] = nspecial[nlocal][2] = 0; - - double **extra = atom->extra; - if (atom->nextra_store) { - int size = static_cast (buf[0]) - m; - for (int i = 0; i < size; i++) extra[nlocal][i] = buf[m++]; - } - - atom->nlocal++; - return m; -} - -/* ---------------------------------------------------------------------- - create one atom of itype at coord - set other values to defaults -------------------------------------------------------------------------- */ - -void AtomVecBond::create_atom(int itype, double *coord) -{ - int nlocal = atom->nlocal; - if (nlocal == nmax) grow(0); - - tag[nlocal] = 0; - type[nlocal] = itype; - x[nlocal][0] = coord[0]; - x[nlocal][1] = coord[1]; - x[nlocal][2] = coord[2]; - mask[nlocal] = 1; - image[nlocal] = ((imageint) IMGMAX << IMG2BITS) | - ((imageint) IMGMAX << IMGBITS) | IMGMAX; - v[nlocal][0] = 0.0; - v[nlocal][1] = 0.0; - v[nlocal][2] = 0.0; - - molecule[nlocal] = 0; - num_bond[nlocal] = 0; - nspecial[nlocal][0] = nspecial[nlocal][1] = nspecial[nlocal][2] = 0; - - atom->nlocal++; -} - -/* ---------------------------------------------------------------------- - unpack one line from Atoms section of data file - initialize other atom quantities -------------------------------------------------------------------------- */ - -void AtomVecBond::data_atom(double *coord, imageint imagetmp, char **values) -{ - int nlocal = atom->nlocal; - if (nlocal == nmax) grow(0); - - tag[nlocal] = utils::tnumeric(FLERR,values[0],true,lmp); - molecule[nlocal] = utils::tnumeric(FLERR,values[1],true,lmp); - type[nlocal] = utils::inumeric(FLERR,values[2],true,lmp); - if (type[nlocal] <= 0 || type[nlocal] > atom->ntypes) - error->one(FLERR,"Invalid atom type in Atoms section of data file"); - - x[nlocal][0] = coord[0]; - x[nlocal][1] = coord[1]; - x[nlocal][2] = coord[2]; - - image[nlocal] = imagetmp; - - mask[nlocal] = 1; - v[nlocal][0] = 0.0; - v[nlocal][1] = 0.0; - v[nlocal][2] = 0.0; - num_bond[nlocal] = 0; - - atom->nlocal++; } /* ---------------------------------------------------------------------- - unpack hybrid quantities from one line in Atoms section of data file - initialize other atom quantities for this sub-style + unmodify values packed by AtomVec::pack_restart() ------------------------------------------------------------------------- */ -int AtomVecBond::data_atom_hybrid(int nlocal, char **values) +void AtomVecBond::pack_restart_post(int ilocal) { - molecule[nlocal] = utils::tnumeric(FLERR,values[0],true,lmp); + // restore the flagged types to their negative values - num_bond[nlocal] = 0; - - return 1; -} - -/* ---------------------------------------------------------------------- - pack atom info for data file including 3 image flags -------------------------------------------------------------------------- */ - -void AtomVecBond::pack_data(double **buf) -{ - int nlocal = atom->nlocal; - for (int i = 0; i < nlocal; i++) { - buf[i][0] = ubuf(tag[i]).d; - buf[i][1] = ubuf(molecule[i]).d; - buf[i][2] = ubuf(type[i]).d; - buf[i][3] = x[i][0]; - buf[i][4] = x[i][1]; - buf[i][5] = x[i][2]; - buf[i][6] = ubuf((image[i] & IMGMASK) - IMGMAX).d; - buf[i][7] = ubuf((image[i] >> IMGBITS & IMGMASK) - IMGMAX).d; - buf[i][8] = ubuf((image[i] >> IMG2BITS) - IMGMAX).d; + if (any_bond_negative) { + for (int m = 0; m < num_bond[ilocal]; m++) + if (bond_negative[m]) bond_type[ilocal][m] = -bond_type[ilocal][m]; } } /* ---------------------------------------------------------------------- - pack hybrid atom info for data file + initialize other atom quantities after AtomVec::unpack_restart() ------------------------------------------------------------------------- */ -int AtomVecBond::pack_data_hybrid(int i, double *buf) +void AtomVecBond::unpack_restart_init(int ilocal) { - buf[0] = ubuf(molecule[i]).d; - return 1; + nspecial[ilocal][0] = 0; + nspecial[ilocal][1] = 0; + nspecial[ilocal][2] = 0; } /* ---------------------------------------------------------------------- - write atom info to data file including 3 image flags + modify what AtomVec::data_atom() just unpacked + or initialize other atom quantities ------------------------------------------------------------------------- */ -void AtomVecBond::write_data(FILE *fp, int n, double **buf) +void AtomVecBond::data_atom_post(int ilocal) { - for (int i = 0; i < n; i++) - fprintf(fp,TAGINT_FORMAT " " TAGINT_FORMAT - " %d %-1.16e %-1.16e %-1.16e %d %d %d\n", - (tagint) ubuf(buf[i][0]).i,(tagint) ubuf(buf[i][1]).i, - (int) ubuf(buf[i][2]).i, - buf[i][3],buf[i][4],buf[i][5], - (int) ubuf(buf[i][6]).i,(int) ubuf(buf[i][7]).i, - (int) ubuf(buf[i][8]).i); -} - -/* ---------------------------------------------------------------------- - write hybrid atom info to data file -------------------------------------------------------------------------- */ - -int AtomVecBond::write_data_hybrid(FILE *fp, double *buf) -{ - fprintf(fp," " TAGINT_FORMAT,(tagint) ubuf(buf[0]).i); - return 1; -} - -/* ---------------------------------------------------------------------- - return # of bytes of allocated memory -------------------------------------------------------------------------- */ - -bigint AtomVecBond::memory_usage() -{ - bigint bytes = 0; - - if (atom->memcheck("tag")) bytes += memory->usage(tag,nmax); - if (atom->memcheck("type")) bytes += memory->usage(type,nmax); - if (atom->memcheck("mask")) bytes += memory->usage(mask,nmax); - if (atom->memcheck("image")) bytes += memory->usage(image,nmax); - if (atom->memcheck("x")) bytes += memory->usage(x,nmax,3); - if (atom->memcheck("v")) bytes += memory->usage(v,nmax,3); - if (atom->memcheck("f")) bytes += memory->usage(f,nmax*comm->nthreads,3); - - if (atom->memcheck("molecule")) bytes += memory->usage(molecule,nmax); - if (atom->memcheck("nspecial")) bytes += memory->usage(nspecial,nmax,3); - if (atom->memcheck("special")) - bytes += memory->usage(special,nmax,atom->maxspecial); - - if (atom->memcheck("num_bond")) bytes += memory->usage(num_bond,nmax); - if (atom->memcheck("bond_type")) - bytes += memory->usage(bond_type,nmax,atom->bond_per_atom); - if (atom->memcheck("bond_atom")) - bytes += memory->usage(bond_atom,nmax,atom->bond_per_atom); - - return bytes; + num_bond[ilocal] = 0; + nspecial[ilocal][0] = 0; + nspecial[ilocal][1] = 0; + nspecial[ilocal][2] = 0; } diff --git a/src/MOLECULE/atom_vec_bond.h b/src/MOLECULE/atom_vec_bond.h index d7370d465959e567eda47404b57e696c3a0f0c75..403167ac1195d3e0ddbc60b195ac4633bdce9e75 100644 --- a/src/MOLECULE/atom_vec_bond.h +++ b/src/MOLECULE/atom_vec_bond.h @@ -27,46 +27,22 @@ namespace LAMMPS_NS { class AtomVecBond : public AtomVec { public: AtomVecBond(class LAMMPS *); - void grow(int); - void grow_reset(); - void copy(int, int, int); - int pack_comm(int, int *, double *, int, int *); - int pack_comm_vel(int, int *, double *, int, int *); - void unpack_comm(int, int, double *); - void unpack_comm_vel(int, int, double *); - int pack_reverse(int, int, double *); - void unpack_reverse(int, int *, double *); - int pack_border(int, int *, double *, int, int *); - int pack_border_vel(int, int *, double *, int, int *); - int pack_border_hybrid(int, int *, double *); - void unpack_border(int, int, double *); - void unpack_border_vel(int, int, double *); - int unpack_border_hybrid(int, int, double *); - int pack_exchange(int, double *); - int unpack_exchange(double *); - int size_restart(); - int pack_restart(int, double *); - int unpack_restart(double *); - void create_atom(int, double *); - void data_atom(double *, imageint, char **); - int data_atom_hybrid(int, char **); - void pack_data(double **); - int pack_data_hybrid(int, double *); - void write_data(FILE *, int, double **); - int write_data_hybrid(FILE *, double *); - bigint memory_usage(); + ~AtomVecBond(); + + void grow_pointers(); + void pack_restart_pre(int); + void pack_restart_post(int); + void unpack_restart_init(int); + void data_atom_post(int); private: - tagint *tag; - int *type,*mask; - imageint *image; - double **x,**v,**f; - tagint *molecule; - int **nspecial; - tagint **special; int *num_bond; int **bond_type; - tagint **bond_atom; + int **nspecial; + + int any_bond_negative; + int bond_per_atom; + int *bond_negative; }; } @@ -76,13 +52,4 @@ class AtomVecBond : public AtomVec { /* ERROR/WARNING messages: -E: Per-processor system is too big - -The number of owned atoms plus ghost atoms on a single -processor must fit in 32-bit integer. - -E: Invalid atom type in Atoms section of data file - -Atom types must range from 1 to specified # of types. - */ diff --git a/src/MOLECULE/atom_vec_full.cpp b/src/MOLECULE/atom_vec_full.cpp index 76c60ba1219db6318d756e87a5a7eb9f49ec69a7..866cf796c92f8f1b723cdfa74230b5a9eb185b5f 100644 --- a/src/MOLECULE/atom_vec_full.cpp +++ b/src/MOLECULE/atom_vec_full.cpp @@ -13,13 +13,6 @@ #include "atom_vec_full.h" #include "atom.h" -#include "comm.h" -#include "domain.h" -#include "modify.h" -#include "fix.h" -#include "memory.h" -#include "error.h" -#include "utils.h" using namespace LAMMPS_NS; @@ -31,1078 +24,210 @@ AtomVecFull::AtomVecFull(LAMMPS *lmp) : AtomVec(lmp) bonds_allow = angles_allow = dihedrals_allow = impropers_allow = 1; mass_type = 1; - comm_x_only = comm_f_only = 1; - size_forward = 3; - size_reverse = 3; - size_border = 8; - size_velocity = 3; - size_data_atom = 7; - size_data_vel = 4; - xcol_data = 5; - atom->molecule_flag = atom->q_flag = 1; -} - -/* ---------------------------------------------------------------------- - grow atom arrays - n = 0 grows arrays by a chunk - n > 0 allocates arrays to size n -------------------------------------------------------------------------- */ - -void AtomVecFull::grow(int n) -{ - if (n == 0) grow_nmax(); - else nmax = n; - atom->nmax = nmax; - if (nmax < 0 || nmax > MAXSMALLINT) - error->one(FLERR,"Per-processor system is too big"); - - tag = memory->grow(atom->tag,nmax,"atom:tag"); - type = memory->grow(atom->type,nmax,"atom:type"); - mask = memory->grow(atom->mask,nmax,"atom:mask"); - image = memory->grow(atom->image,nmax,"atom:image"); - x = memory->grow(atom->x,nmax,3,"atom:x"); - v = memory->grow(atom->v,nmax,3,"atom:v"); - f = memory->grow(atom->f,nmax*comm->nthreads,3,"atom:f"); - q = memory->grow(atom->q,nmax,"atom:q"); - molecule = memory->grow(atom->molecule,nmax,"atom:molecule"); - - nspecial = memory->grow(atom->nspecial,nmax,3,"atom:nspecial"); - special = memory->grow(atom->special,nmax,atom->maxspecial,"atom:special"); - - num_bond = memory->grow(atom->num_bond,nmax,"atom:num_bond"); - bond_type = memory->grow(atom->bond_type,nmax,atom->bond_per_atom, - "atom:bond_type"); - bond_atom = memory->grow(atom->bond_atom,nmax,atom->bond_per_atom, - "atom:bond_atom"); - - num_angle = memory->grow(atom->num_angle,nmax,"atom:num_angle"); - angle_type = memory->grow(atom->angle_type,nmax,atom->angle_per_atom, - "atom:angle_type"); - angle_atom1 = memory->grow(atom->angle_atom1,nmax,atom->angle_per_atom, - "atom:angle_atom1"); - angle_atom2 = memory->grow(atom->angle_atom2,nmax,atom->angle_per_atom, - "atom:angle_atom2"); - angle_atom3 = memory->grow(atom->angle_atom3,nmax,atom->angle_per_atom, - "atom:angle_atom3"); - - num_dihedral = memory->grow(atom->num_dihedral,nmax,"atom:num_dihedral"); - dihedral_type = memory->grow(atom->dihedral_type,nmax, - atom->dihedral_per_atom,"atom:dihedral_type"); - dihedral_atom1 = - memory->grow(atom->dihedral_atom1,nmax,atom->dihedral_per_atom, - "atom:dihedral_atom1"); - dihedral_atom2 = - memory->grow(atom->dihedral_atom2,nmax,atom->dihedral_per_atom, - "atom:dihedral_atom2"); - dihedral_atom3 = - memory->grow(atom->dihedral_atom3,nmax,atom->dihedral_per_atom, - "atom:dihedral_atom3"); - dihedral_atom4 = - memory->grow(atom->dihedral_atom4,nmax,atom->dihedral_per_atom, - "atom:dihedral_atom4"); - - num_improper = memory->grow(atom->num_improper,nmax,"atom:num_improper"); - improper_type = - memory->grow(atom->improper_type,nmax,atom->improper_per_atom, - "atom:improper_type"); - improper_atom1 = - memory->grow(atom->improper_atom1,nmax,atom->improper_per_atom, - "atom:improper_atom1"); - improper_atom2 = - memory->grow(atom->improper_atom2,nmax,atom->improper_per_atom, - "atom:improper_atom2"); - improper_atom3 = - memory->grow(atom->improper_atom3,nmax,atom->improper_per_atom, - "atom:improper_atom3"); - improper_atom4 = - memory->grow(atom->improper_atom4,nmax,atom->improper_per_atom, - "atom:improper_atom4"); - - if (atom->nextra_grow) - for (int iextra = 0; iextra < atom->nextra_grow; iextra++) - modify->fix[atom->extra_grow[iextra]]->grow_arrays(nmax); + // strings with peratom variables to include in each AtomVec method + // strings cannot contain fields in corresponding AtomVec default strings + // order of fields in a string does not matter + // except: fields_data_atom & fields_data_vel must match data file + + fields_grow = (char *) + "q molecule num_bond bond_type bond_atom " + "num_angle angle_type angle_atom1 angle_atom2 angle_atom3 " + "num_dihedral dihedral_type dihedral_atom1 dihedral_atom2 " + "dihedral_atom3 dihedral_atom4 " + "num_improper improper_type improper_atom1 improper_atom2 " + "improper_atom3 improper_atom4 " + "nspecial special"; + fields_copy = (char *) + "q molecule num_bond bond_type bond_atom " + "num_angle angle_type angle_atom1 angle_atom2 angle_atom3 " + "num_dihedral dihedral_type dihedral_atom1 dihedral_atom2 " + "dihedral_atom3 dihedral_atom4 " + "num_improper improper_type improper_atom1 improper_atom2 " + "improper_atom3 improper_atom4 " + "nspecial special"; + fields_comm = (char *) ""; + fields_comm_vel = (char *) ""; + fields_reverse = (char *) ""; + fields_border = (char *) "q molecule"; + fields_border_vel = (char *) "q molecule"; + fields_exchange = (char *) + "q molecule num_bond bond_type bond_atom " + "num_angle angle_type angle_atom1 angle_atom2 angle_atom3 " + "num_dihedral dihedral_type dihedral_atom1 dihedral_atom2 " + "dihedral_atom3 dihedral_atom4 " + "num_improper improper_type improper_atom1 improper_atom2 " + "improper_atom3 improper_atom4 " + "nspecial special"; + fields_restart = (char *) + "q molecule num_bond bond_type bond_atom " + "num_angle angle_type angle_atom1 angle_atom2 angle_atom3 " + "num_dihedral dihedral_type dihedral_atom1 dihedral_atom2 " + "dihedral_atom3 dihedral_atom4 " + "num_improper improper_type improper_atom1 improper_atom2 " + "improper_atom3 improper_atom4"; + fields_create = (char *) + "q molecule num_bond num_angle num_dihedral num_improper nspecial"; + fields_data_atom = (char *) "id molecule type q x"; + fields_data_vel = (char *) "id v"; + + setup_fields(); + + bond_per_atom = angle_per_atom = dihedral_per_atom = improper_per_atom = 0; + bond_negative = angle_negative = dihedral_negative = improper_negative = NULL; } -/* ---------------------------------------------------------------------- - reset local array ptrs -------------------------------------------------------------------------- */ +/* ---------------------------------------------------------------------- */ -void AtomVecFull::grow_reset() +AtomVecFull::~AtomVecFull() { - tag = atom->tag; type = atom->type; - mask = atom->mask; image = atom->image; - x = atom->x; v = atom->v; f = atom->f; - q = atom->q; molecule = atom->molecule; - nspecial = atom->nspecial; special = atom->special; - num_bond = atom->num_bond; bond_type = atom->bond_type; - bond_atom = atom->bond_atom; - num_angle = atom->num_angle; angle_type = atom->angle_type; - angle_atom1 = atom->angle_atom1; angle_atom2 = atom->angle_atom2; - angle_atom3 = atom->angle_atom3; - num_dihedral = atom->num_dihedral; dihedral_type = atom->dihedral_type; - dihedral_atom1 = atom->dihedral_atom1; dihedral_atom2 = atom->dihedral_atom2; - dihedral_atom3 = atom->dihedral_atom3; dihedral_atom4 = atom->dihedral_atom4; - num_improper = atom->num_improper; improper_type = atom->improper_type; - improper_atom1 = atom->improper_atom1; improper_atom2 = atom->improper_atom2; - improper_atom3 = atom->improper_atom3; improper_atom4 = atom->improper_atom4; + delete [] bond_negative; + delete [] angle_negative; + delete [] dihedral_negative; + delete [] improper_negative; } /* ---------------------------------------------------------------------- - copy atom I info to atom J + set local copies of all grow ptrs used by this class, except defaults + needed in replicate when 2 atom classes exist and it calls pack_restart() ------------------------------------------------------------------------- */ -void AtomVecFull::copy(int i, int j, int delflag) -{ - int k; - - tag[j] = tag[i]; - type[j] = type[i]; - mask[j] = mask[i]; - image[j] = image[i]; - x[j][0] = x[i][0]; - x[j][1] = x[i][1]; - x[j][2] = x[i][2]; - v[j][0] = v[i][0]; - v[j][1] = v[i][1]; - v[j][2] = v[i][2]; - - q[j] = q[i]; - molecule[j] = molecule[i]; - - num_bond[j] = num_bond[i]; - for (k = 0; k < num_bond[j]; k++) { - bond_type[j][k] = bond_type[i][k]; - bond_atom[j][k] = bond_atom[i][k]; - } - - num_angle[j] = num_angle[i]; - for (k = 0; k < num_angle[j]; k++) { - angle_type[j][k] = angle_type[i][k]; - angle_atom1[j][k] = angle_atom1[i][k]; - angle_atom2[j][k] = angle_atom2[i][k]; - angle_atom3[j][k] = angle_atom3[i][k]; - } - - num_dihedral[j] = num_dihedral[i]; - for (k = 0; k < num_dihedral[j]; k++) { - dihedral_type[j][k] = dihedral_type[i][k]; - dihedral_atom1[j][k] = dihedral_atom1[i][k]; - dihedral_atom2[j][k] = dihedral_atom2[i][k]; - dihedral_atom3[j][k] = dihedral_atom3[i][k]; - dihedral_atom4[j][k] = dihedral_atom4[i][k]; - } - - num_improper[j] = num_improper[i]; - for (k = 0; k < num_improper[j]; k++) { - improper_type[j][k] = improper_type[i][k]; - improper_atom1[j][k] = improper_atom1[i][k]; - improper_atom2[j][k] = improper_atom2[i][k]; - improper_atom3[j][k] = improper_atom3[i][k]; - improper_atom4[j][k] = improper_atom4[i][k]; - } - - nspecial[j][0] = nspecial[i][0]; - nspecial[j][1] = nspecial[i][1]; - nspecial[j][2] = nspecial[i][2]; - for (k = 0; k < nspecial[j][2]; k++) special[j][k] = special[i][k]; - - if (atom->nextra_grow) - for (int iextra = 0; iextra < atom->nextra_grow; iextra++) - modify->fix[atom->extra_grow[iextra]]->copy_arrays(i,j,delflag); -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecFull::pack_comm(int n, int *list, double *buf, - int pbc_flag, int *pbc) -{ - int i,j,m; - double dx,dy,dz; - - m = 0; - if (pbc_flag == 0) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = x[j][0]; - buf[m++] = x[j][1]; - buf[m++] = x[j][2]; - } - } else { - if (domain->triclinic == 0) { - dx = pbc[0]*domain->xprd; - dy = pbc[1]*domain->yprd; - dz = pbc[2]*domain->zprd; - } else { - dx = pbc[0]*domain->xprd + pbc[5]*domain->xy + pbc[4]*domain->xz; - dy = pbc[1]*domain->yprd + pbc[3]*domain->yz; - dz = pbc[2]*domain->zprd; - } - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = x[j][0] + dx; - buf[m++] = x[j][1] + dy; - buf[m++] = x[j][2] + dz; - } - } - return m; -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecFull::pack_comm_vel(int n, int *list, double *buf, - int pbc_flag, int *pbc) -{ - int i,j,m; - double dx,dy,dz,dvx,dvy,dvz; - - m = 0; - if (pbc_flag == 0) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = x[j][0]; - buf[m++] = x[j][1]; - buf[m++] = x[j][2]; - buf[m++] = v[j][0]; - buf[m++] = v[j][1]; - buf[m++] = v[j][2]; - } - } else { - if (domain->triclinic == 0) { - dx = pbc[0]*domain->xprd; - dy = pbc[1]*domain->yprd; - dz = pbc[2]*domain->zprd; - } else { - dx = pbc[0]*domain->xprd + pbc[5]*domain->xy + pbc[4]*domain->xz; - dy = pbc[1]*domain->yprd + pbc[3]*domain->yz; - dz = pbc[2]*domain->zprd; - } - if (!deform_vremap) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = x[j][0] + dx; - buf[m++] = x[j][1] + dy; - buf[m++] = x[j][2] + dz; - buf[m++] = v[j][0]; - buf[m++] = v[j][1]; - buf[m++] = v[j][2]; - } - } else { - dvx = pbc[0]*h_rate[0] + pbc[5]*h_rate[5] + pbc[4]*h_rate[4]; - dvy = pbc[1]*h_rate[1] + pbc[3]*h_rate[3]; - dvz = pbc[2]*h_rate[2]; - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = x[j][0] + dx; - buf[m++] = x[j][1] + dy; - buf[m++] = x[j][2] + dz; - if (mask[i] & deform_groupbit) { - buf[m++] = v[j][0] + dvx; - buf[m++] = v[j][1] + dvy; - buf[m++] = v[j][2] + dvz; - } else { - buf[m++] = v[j][0]; - buf[m++] = v[j][1]; - buf[m++] = v[j][2]; - } - } - } - } - return m; -} - -/* ---------------------------------------------------------------------- */ - -void AtomVecFull::unpack_comm(int n, int first, double *buf) -{ - int i,m,last; - - m = 0; - last = first + n; - for (i = first; i < last; i++) { - x[i][0] = buf[m++]; - x[i][1] = buf[m++]; - x[i][2] = buf[m++]; - } -} - -/* ---------------------------------------------------------------------- */ - -void AtomVecFull::unpack_comm_vel(int n, int first, double *buf) -{ - int i,m,last; - - m = 0; - last = first + n; - for (i = first; i < last; i++) { - x[i][0] = buf[m++]; - x[i][1] = buf[m++]; - x[i][2] = buf[m++]; - v[i][0] = buf[m++]; - v[i][1] = buf[m++]; - v[i][2] = buf[m++]; - } -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecFull::pack_reverse(int n, int first, double *buf) +void AtomVecFull::grow_pointers() { - int i,m,last; - - m = 0; - last = first + n; - for (i = first; i < last; i++) { - buf[m++] = f[i][0]; - buf[m++] = f[i][1]; - buf[m++] = f[i][2]; - } - return m; -} - -/* ---------------------------------------------------------------------- */ - -void AtomVecFull::unpack_reverse(int n, int *list, double *buf) -{ - int i,j,m; - - m = 0; - for (i = 0; i < n; i++) { - j = list[i]; - f[j][0] += buf[m++]; - f[j][1] += buf[m++]; - f[j][2] += buf[m++]; - } -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecFull::pack_border(int n, int *list, double *buf, - int pbc_flag, int *pbc) -{ - int i,j,m; - double dx,dy,dz; - - m = 0; - if (pbc_flag == 0) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = x[j][0]; - buf[m++] = x[j][1]; - buf[m++] = x[j][2]; - buf[m++] = ubuf(tag[j]).d; - buf[m++] = ubuf(type[j]).d; - buf[m++] = ubuf(mask[j]).d; - buf[m++] = q[j]; - buf[m++] = ubuf(molecule[j]).d; - } - } else { - if (domain->triclinic == 0) { - dx = pbc[0]*domain->xprd; - dy = pbc[1]*domain->yprd; - dz = pbc[2]*domain->zprd; - } else { - dx = pbc[0]; - dy = pbc[1]; - dz = pbc[2]; - } - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = x[j][0] + dx; - buf[m++] = x[j][1] + dy; - buf[m++] = x[j][2] + dz; - buf[m++] = ubuf(tag[j]).d; - buf[m++] = ubuf(type[j]).d; - buf[m++] = ubuf(mask[j]).d; - buf[m++] = q[j]; - buf[m++] = ubuf(molecule[j]).d; - } - } - - if (atom->nextra_border) - for (int iextra = 0; iextra < atom->nextra_border; iextra++) - m += modify->fix[atom->extra_border[iextra]]->pack_border(n,list,&buf[m]); - - return m; -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecFull::pack_border_vel(int n, int *list, double *buf, - int pbc_flag, int *pbc) -{ - int i,j,m; - double dx,dy,dz,dvx,dvy,dvz; - - m = 0; - if (pbc_flag == 0) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = x[j][0]; - buf[m++] = x[j][1]; - buf[m++] = x[j][2]; - buf[m++] = ubuf(tag[j]).d; - buf[m++] = ubuf(type[j]).d; - buf[m++] = ubuf(mask[j]).d; - buf[m++] = q[j]; - buf[m++] = ubuf(molecule[j]).d; - buf[m++] = v[j][0]; - buf[m++] = v[j][1]; - buf[m++] = v[j][2]; - } - } else { - if (domain->triclinic == 0) { - dx = pbc[0]*domain->xprd; - dy = pbc[1]*domain->yprd; - dz = pbc[2]*domain->zprd; - } else { - dx = pbc[0]; - dy = pbc[1]; - dz = pbc[2]; - } - if (!deform_vremap) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = x[j][0] + dx; - buf[m++] = x[j][1] + dy; - buf[m++] = x[j][2] + dz; - buf[m++] = ubuf(tag[j]).d; - buf[m++] = ubuf(type[j]).d; - buf[m++] = ubuf(mask[j]).d; - buf[m++] = q[j]; - buf[m++] = ubuf(molecule[j]).d; - buf[m++] = v[j][0]; - buf[m++] = v[j][1]; - buf[m++] = v[j][2]; - } - } else { - dvx = pbc[0]*h_rate[0] + pbc[5]*h_rate[5] + pbc[4]*h_rate[4]; - dvy = pbc[1]*h_rate[1] + pbc[3]*h_rate[3]; - dvz = pbc[2]*h_rate[2]; - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = x[j][0] + dx; - buf[m++] = x[j][1] + dy; - buf[m++] = x[j][2] + dz; - buf[m++] = ubuf(tag[j]).d; - buf[m++] = ubuf(type[j]).d; - buf[m++] = ubuf(mask[j]).d; - buf[m++] = q[j]; - buf[m++] = ubuf(molecule[j]).d; - if (mask[i] & deform_groupbit) { - buf[m++] = v[j][0] + dvx; - buf[m++] = v[j][1] + dvy; - buf[m++] = v[j][2] + dvz; - } else { - buf[m++] = v[j][0]; - buf[m++] = v[j][1]; - buf[m++] = v[j][2]; - } - } - } - } - - if (atom->nextra_border) - for (int iextra = 0; iextra < atom->nextra_border; iextra++) - m += modify->fix[atom->extra_border[iextra]]->pack_border(n,list,&buf[m]); - - return m; -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecFull::pack_border_hybrid(int n, int *list, double *buf) -{ - int i,j,m; - - m = 0; - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = q[j]; - buf[m++] = ubuf(molecule[j]).d; - } - return m; -} - -/* ---------------------------------------------------------------------- */ - -void AtomVecFull::unpack_border(int n, int first, double *buf) -{ - int i,m,last; - - m = 0; - last = first + n; - for (i = first; i < last; i++) { - if (i == nmax) grow(0); - x[i][0] = buf[m++]; - x[i][1] = buf[m++]; - x[i][2] = buf[m++]; - tag[i] = (tagint) ubuf(buf[m++]).i; - type[i] = (int) ubuf(buf[m++]).i; - mask[i] = (int) ubuf(buf[m++]).i; - q[i] = buf[m++]; - molecule[i] = (tagint) ubuf(buf[m++]).i; - } - - if (atom->nextra_border) - for (int iextra = 0; iextra < atom->nextra_border; iextra++) - m += modify->fix[atom->extra_border[iextra]]-> - unpack_border(n,first,&buf[m]); -} - -/* ---------------------------------------------------------------------- */ - -void AtomVecFull::unpack_border_vel(int n, int first, double *buf) -{ - int i,m,last; - - m = 0; - last = first + n; - for (i = first; i < last; i++) { - if (i == nmax) grow(0); - x[i][0] = buf[m++]; - x[i][1] = buf[m++]; - x[i][2] = buf[m++]; - tag[i] = (tagint) ubuf(buf[m++]).i; - type[i] = (int) ubuf(buf[m++]).i; - mask[i] = (int) ubuf(buf[m++]).i; - q[i] = buf[m++]; - molecule[i] = (tagint) ubuf(buf[m++]).i; - v[i][0] = buf[m++]; - v[i][1] = buf[m++]; - v[i][2] = buf[m++]; - } - - if (atom->nextra_border) - for (int iextra = 0; iextra < atom->nextra_border; iextra++) - m += modify->fix[atom->extra_border[iextra]]-> - unpack_border(n,first,&buf[m]); -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecFull::unpack_border_hybrid(int n, int first, double *buf) -{ - int i,m,last; - - m = 0; - last = first + n; - for (i = first; i < last; i++) { - q[i] = buf[m++]; - molecule[i] = (tagint) ubuf(buf[m++]).i; - } - return m; + num_bond = atom->num_bond; + bond_type = atom->bond_type; + num_angle = atom->num_angle; + angle_type = atom->angle_type; + num_dihedral = atom->num_dihedral; + dihedral_type = atom->dihedral_type; + num_improper = atom->num_improper; + improper_type = atom->improper_type; + nspecial = atom->nspecial; } /* ---------------------------------------------------------------------- - pack data for atom I for sending to another proc - xyz must be 1st 3 values, so comm::exchange() can test on them + modify values for AtomVec::pack_restart() to pack ------------------------------------------------------------------------- */ -int AtomVecFull::pack_exchange(int i, double *buf) +void AtomVecFull::pack_restart_pre(int ilocal) { - int k; - - int m = 1; - buf[m++] = x[i][0]; - buf[m++] = x[i][1]; - buf[m++] = x[i][2]; - buf[m++] = v[i][0]; - buf[m++] = v[i][1]; - buf[m++] = v[i][2]; - buf[m++] = ubuf(tag[i]).d; - buf[m++] = ubuf(type[i]).d; - buf[m++] = ubuf(mask[i]).d; - buf[m++] = ubuf(image[i]).d; + // insure negative vectors are needed length - buf[m++] = q[i]; - buf[m++] = ubuf(molecule[i]).d; - - buf[m++] = ubuf(num_bond[i]).d; - for (k = 0; k < num_bond[i]; k++) { - buf[m++] = ubuf(bond_type[i][k]).d; - buf[m++] = ubuf(bond_atom[i][k]).d; + if (bond_per_atom < atom->bond_per_atom) { + delete [] bond_negative; + bond_per_atom = atom->bond_per_atom; + bond_negative = new int[bond_per_atom]; } - - buf[m++] = ubuf(num_angle[i]).d; - for (k = 0; k < num_angle[i]; k++) { - buf[m++] = ubuf(angle_type[i][k]).d; - buf[m++] = ubuf(angle_atom1[i][k]).d; - buf[m++] = ubuf(angle_atom2[i][k]).d; - buf[m++] = ubuf(angle_atom3[i][k]).d; + if (angle_per_atom < atom->angle_per_atom) { + delete [] angle_negative; + angle_per_atom = atom->angle_per_atom; + angle_negative = new int[angle_per_atom]; } - - buf[m++] = ubuf(num_dihedral[i]).d; - for (k = 0; k < num_dihedral[i]; k++) { - buf[m++] = ubuf(dihedral_type[i][k]).d; - buf[m++] = ubuf(dihedral_atom1[i][k]).d; - buf[m++] = ubuf(dihedral_atom2[i][k]).d; - buf[m++] = ubuf(dihedral_atom3[i][k]).d; - buf[m++] = ubuf(dihedral_atom4[i][k]).d; + if (dihedral_per_atom < atom->dihedral_per_atom) { + delete [] dihedral_negative; + dihedral_per_atom = atom->dihedral_per_atom; + dihedral_negative = new int[dihedral_per_atom]; } - - buf[m++] = ubuf(num_improper[i]).d; - for (k = 0; k < num_improper[i]; k++) { - buf[m++] = ubuf(improper_type[i][k]).d; - buf[m++] = ubuf(improper_atom1[i][k]).d; - buf[m++] = ubuf(improper_atom2[i][k]).d; - buf[m++] = ubuf(improper_atom3[i][k]).d; - buf[m++] = ubuf(improper_atom4[i][k]).d; + if (improper_per_atom < atom->improper_per_atom) { + delete [] improper_negative; + improper_per_atom = atom->improper_per_atom; + improper_negative = new int[improper_per_atom]; } - buf[m++] = ubuf(nspecial[i][0]).d; - buf[m++] = ubuf(nspecial[i][1]).d; - buf[m++] = ubuf(nspecial[i][2]).d; - for (k = 0; k < nspecial[i][2]; k++) buf[m++] = ubuf(special[i][k]).d; - - if (atom->nextra_grow) - for (int iextra = 0; iextra < atom->nextra_grow; iextra++) - m += modify->fix[atom->extra_grow[iextra]]->pack_exchange(i,&buf[m]); - - buf[0] = m; - return m; -} - -/* ---------------------------------------------------------------------- */ + // flip any negative types to positive and flag which ones -int AtomVecFull::unpack_exchange(double *buf) -{ - int k; - - int nlocal = atom->nlocal; - if (nlocal == nmax) grow(0); - - int m = 1; - x[nlocal][0] = buf[m++]; - x[nlocal][1] = buf[m++]; - x[nlocal][2] = buf[m++]; - v[nlocal][0] = buf[m++]; - v[nlocal][1] = buf[m++]; - v[nlocal][2] = buf[m++]; - tag[nlocal] = (tagint) ubuf(buf[m++]).i; - type[nlocal] = (int) ubuf(buf[m++]).i; - mask[nlocal] = (int) ubuf(buf[m++]).i; - image[nlocal] = (imageint) ubuf(buf[m++]).i; - - q[nlocal] = buf[m++]; - molecule[nlocal] = (tagint) ubuf(buf[m++]).i; - - num_bond[nlocal] = (int) ubuf(buf[m++]).i; - for (k = 0; k < num_bond[nlocal]; k++) { - bond_type[nlocal][k] = (int) ubuf(buf[m++]).i; - bond_atom[nlocal][k] = (tagint) ubuf(buf[m++]).i; + any_bond_negative = 0; + for (int m = 0; m < num_bond[ilocal]; m++) { + if (bond_type[ilocal][m] < 0) { + bond_negative[m] = 1; + bond_type[ilocal][m] = -bond_type[ilocal][m]; + any_bond_negative = 1; + } else bond_negative[m] = 0; } - num_angle[nlocal] = (int) ubuf(buf[m++]).i; - for (k = 0; k < num_angle[nlocal]; k++) { - angle_type[nlocal][k] = (int) ubuf(buf[m++]).i; - angle_atom1[nlocal][k] = (tagint) ubuf(buf[m++]).i; - angle_atom2[nlocal][k] = (tagint) ubuf(buf[m++]).i; - angle_atom3[nlocal][k] = (tagint) ubuf(buf[m++]).i; + any_angle_negative = 0; + for (int m = 0; m < num_angle[ilocal]; m++) { + if (angle_type[ilocal][m] < 0) { + angle_negative[m] = 1; + angle_type[ilocal][m] = -angle_type[ilocal][m]; + any_angle_negative = 1; + } else angle_negative[m] = 0; } - num_dihedral[nlocal] = (int) ubuf(buf[m++]).i; - for (k = 0; k < num_dihedral[nlocal]; k++) { - dihedral_type[nlocal][k] = (int) ubuf(buf[m++]).i; - dihedral_atom1[nlocal][k] = (tagint) ubuf(buf[m++]).i; - dihedral_atom2[nlocal][k] = (tagint) ubuf(buf[m++]).i; - dihedral_atom3[nlocal][k] = (tagint) ubuf(buf[m++]).i; - dihedral_atom4[nlocal][k] = (tagint) ubuf(buf[m++]).i; + any_dihedral_negative = 0; + for (int m = 0; m < num_dihedral[ilocal]; m++) { + if (dihedral_type[ilocal][m] < 0) { + dihedral_negative[m] = 1; + dihedral_type[ilocal][m] = -dihedral_type[ilocal][m]; + any_dihedral_negative = 1; + } else dihedral_negative[m] = 0; } - num_improper[nlocal] = (int) ubuf(buf[m++]).i; - for (k = 0; k < num_improper[nlocal]; k++) { - improper_type[nlocal][k] = (int) ubuf(buf[m++]).i; - improper_atom1[nlocal][k] = (tagint) ubuf(buf[m++]).i; - improper_atom2[nlocal][k] = (tagint) ubuf(buf[m++]).i; - improper_atom3[nlocal][k] = (tagint) ubuf(buf[m++]).i; - improper_atom4[nlocal][k] = (tagint) ubuf(buf[m++]).i; + any_improper_negative = 0; + for (int m = 0; m < num_improper[ilocal]; m++) { + if (improper_type[ilocal][m] < 0) { + improper_negative[m] = 1; + improper_type[ilocal][m] = -improper_type[ilocal][m]; + any_improper_negative = 1; + } else improper_negative[m] = 0; } - - nspecial[nlocal][0] = (int) ubuf(buf[m++]).i; - nspecial[nlocal][1] = (int) ubuf(buf[m++]).i; - nspecial[nlocal][2] = (int) ubuf(buf[m++]).i; - for (k = 0; k < nspecial[nlocal][2]; k++) - special[nlocal][k] = (tagint) ubuf(buf[m++]).i; - - if (atom->nextra_grow) - for (int iextra = 0; iextra < atom->nextra_grow; iextra++) - m += modify->fix[atom->extra_grow[iextra]]-> - unpack_exchange(nlocal,&buf[m]); - - atom->nlocal++; - return m; } /* ---------------------------------------------------------------------- - size of restart data for all atoms owned by this proc - include extra data stored by fixes + unmodify values packed by AtomVec::pack_restart() ------------------------------------------------------------------------- */ -int AtomVecFull::size_restart() +void AtomVecFull::pack_restart_post(int ilocal) { - int i; - - int nlocal = atom->nlocal; - int n = 0; - for (i = 0; i < nlocal; i++) - n += 17 + 2*num_bond[i] + 4*num_angle[i] + - 5*num_dihedral[i] + 5*num_improper[i]; + // restore the flagged types to their negative values - if (atom->nextra_restart) - for (int iextra = 0; iextra < atom->nextra_restart; iextra++) - for (i = 0; i < nlocal; i++) - n += modify->fix[atom->extra_restart[iextra]]->size_restart(i); - - return n; -} - -/* ---------------------------------------------------------------------- - pack atom I's data for restart file including extra quantities - xyz must be 1st 3 values, so that read_restart can test on them - molecular types may be negative, but write as positive -------------------------------------------------------------------------- */ - -int AtomVecFull::pack_restart(int i, double *buf) -{ - int k; - - int m = 1; - buf[m++] = x[i][0]; - buf[m++] = x[i][1]; - buf[m++] = x[i][2]; - buf[m++] = ubuf(tag[i]).d; - buf[m++] = ubuf(type[i]).d; - buf[m++] = ubuf(mask[i]).d; - buf[m++] = ubuf(image[i]).d; - buf[m++] = v[i][0]; - buf[m++] = v[i][1]; - buf[m++] = v[i][2]; - - buf[m++] = q[i]; - buf[m++] = ubuf(molecule[i]).d; - - buf[m++] = ubuf(num_bond[i]).d; - for (k = 0; k < num_bond[i]; k++) { - buf[m++] = ubuf(MAX(bond_type[i][k],-bond_type[i][k])).d; - buf[m++] = ubuf(bond_atom[i][k]).d; + if (any_bond_negative) { + for (int m = 0; m < num_bond[ilocal]; m++) + if (bond_negative[m]) bond_type[ilocal][m] = -bond_type[ilocal][m]; } - buf[m++] = ubuf(num_angle[i]).d; - for (k = 0; k < num_angle[i]; k++) { - buf[m++] = ubuf(MAX(angle_type[i][k],-angle_type[i][k])).d; - buf[m++] = ubuf(angle_atom1[i][k]).d; - buf[m++] = ubuf(angle_atom2[i][k]).d; - buf[m++] = ubuf(angle_atom3[i][k]).d; + if (any_angle_negative) { + for (int m = 0; m < num_angle[ilocal]; m++) + if (angle_negative[m]) angle_type[ilocal][m] = -angle_type[ilocal][m]; } - buf[m++] = ubuf(num_dihedral[i]).d; - for (k = 0; k < num_dihedral[i]; k++) { - buf[m++] = ubuf(MAX(dihedral_type[i][k],-dihedral_type[i][k])).d; - buf[m++] = ubuf(dihedral_atom1[i][k]).d; - buf[m++] = ubuf(dihedral_atom2[i][k]).d; - buf[m++] = ubuf(dihedral_atom3[i][k]).d; - buf[m++] = ubuf(dihedral_atom4[i][k]).d; + if (any_dihedral_negative) { + for (int m = 0; m < num_dihedral[ilocal]; m++) + if (dihedral_negative[m]) + dihedral_type[ilocal][m] = -dihedral_type[ilocal][m]; } - buf[m++] = ubuf(num_improper[i]).d; - for (k = 0; k < num_improper[i]; k++) { - buf[m++] = ubuf(MAX(improper_type[i][k],-improper_type[i][k])).d; - buf[m++] = ubuf(improper_atom1[i][k]).d; - buf[m++] = ubuf(improper_atom2[i][k]).d; - buf[m++] = ubuf(improper_atom3[i][k]).d; - buf[m++] = ubuf(improper_atom4[i][k]).d; + if (any_improper_negative) { + for (int m = 0; m < num_improper[ilocal]; m++) + if (improper_negative[m]) + improper_type[ilocal][m] = -improper_type[ilocal][m]; } - - if (atom->nextra_restart) - for (int iextra = 0; iextra < atom->nextra_restart; iextra++) - m += modify->fix[atom->extra_restart[iextra]]->pack_restart(i,&buf[m]); - - buf[0] = m; - return m; } /* ---------------------------------------------------------------------- - unpack data for one atom from restart file including extra quantities + initialize other atom quantities after AtomVec::unpack_restart() ------------------------------------------------------------------------- */ -int AtomVecFull::unpack_restart(double *buf) +void AtomVecFull::unpack_restart_init(int ilocal) { - int k; - - int nlocal = atom->nlocal; - if (nlocal == nmax) { - grow(0); - if (atom->nextra_store) - memory->grow(atom->extra,nmax,atom->nextra_store,"atom:extra"); - } - - int m = 1; - x[nlocal][0] = buf[m++]; - x[nlocal][1] = buf[m++]; - x[nlocal][2] = buf[m++]; - tag[nlocal] = (tagint) ubuf(buf[m++]).i; - type[nlocal] = (int) ubuf(buf[m++]).i; - mask[nlocal] = (int) ubuf(buf[m++]).i; - image[nlocal] = (imageint) ubuf(buf[m++]).i; - v[nlocal][0] = buf[m++]; - v[nlocal][1] = buf[m++]; - v[nlocal][2] = buf[m++]; - - q[nlocal] = buf[m++]; - molecule[nlocal] = (tagint) ubuf(buf[m++]).i; - - num_bond[nlocal] = (int) ubuf(buf[m++]).i; - for (k = 0; k < num_bond[nlocal]; k++) { - bond_type[nlocal][k] = (int) ubuf(buf[m++]).i; - bond_atom[nlocal][k] = (tagint) ubuf(buf[m++]).i; - } - - num_angle[nlocal] = (int) ubuf(buf[m++]).i; - for (k = 0; k < num_angle[nlocal]; k++) { - angle_type[nlocal][k] = (int) ubuf(buf[m++]).i; - angle_atom1[nlocal][k] = (tagint) ubuf(buf[m++]).i; - angle_atom2[nlocal][k] = (tagint) ubuf(buf[m++]).i; - angle_atom3[nlocal][k] = (tagint) ubuf(buf[m++]).i; - } - - num_dihedral[nlocal] = (int) ubuf(buf[m++]).i; - for (k = 0; k < num_dihedral[nlocal]; k++) { - dihedral_type[nlocal][k] = (int) ubuf(buf[m++]).i; - dihedral_atom1[nlocal][k] = (tagint) ubuf(buf[m++]).i; - dihedral_atom2[nlocal][k] = (tagint) ubuf(buf[m++]).i; - dihedral_atom3[nlocal][k] = (tagint) ubuf(buf[m++]).i; - dihedral_atom4[nlocal][k] = (tagint) ubuf(buf[m++]).i; - } - - num_improper[nlocal] = (int) ubuf(buf[m++]).i; - for (k = 0; k < num_improper[nlocal]; k++) { - improper_type[nlocal][k] = (int) ubuf(buf[m++]).i; - improper_atom1[nlocal][k] = (tagint) ubuf(buf[m++]).i; - improper_atom2[nlocal][k] = (tagint) ubuf(buf[m++]).i; - improper_atom3[nlocal][k] = (tagint) ubuf(buf[m++]).i; - improper_atom4[nlocal][k] = (tagint) ubuf(buf[m++]).i; - } - - nspecial[nlocal][0] = nspecial[nlocal][1] = nspecial[nlocal][2] = 0; - - double **extra = atom->extra; - if (atom->nextra_store) { - int size = static_cast (buf[0]) - m; - for (int i = 0; i < size; i++) extra[nlocal][i] = buf[m++]; - } - - atom->nlocal++; - return m; + nspecial[ilocal][0] = 0; + nspecial[ilocal][1] = 0; + nspecial[ilocal][2] = 0; } /* ---------------------------------------------------------------------- - create one atom of itype at coord - set other values to defaults + modify what AtomVec::data_atom() just unpacked + or initialize other atom quantities ------------------------------------------------------------------------- */ -void AtomVecFull::create_atom(int itype, double *coord) +void AtomVecFull::data_atom_post(int ilocal) { - int nlocal = atom->nlocal; - if (nlocal == nmax) grow(0); - - tag[nlocal] = 0; - type[nlocal] = itype; - x[nlocal][0] = coord[0]; - x[nlocal][1] = coord[1]; - x[nlocal][2] = coord[2]; - mask[nlocal] = 1; - image[nlocal] = ((imageint) IMGMAX << IMG2BITS) | - ((imageint) IMGMAX << IMGBITS) | IMGMAX; - v[nlocal][0] = 0.0; - v[nlocal][1] = 0.0; - v[nlocal][2] = 0.0; - - q[nlocal] = 0.0; - molecule[nlocal] = 0; - num_bond[nlocal] = 0; - num_angle[nlocal] = 0; - num_dihedral[nlocal] = 0; - num_improper[nlocal] = 0; - nspecial[nlocal][0] = nspecial[nlocal][1] = nspecial[nlocal][2] = 0; - - atom->nlocal++; -} - -/* ---------------------------------------------------------------------- - unpack one line from Atoms section of data file - initialize other atom quantities -------------------------------------------------------------------------- */ - -void AtomVecFull::data_atom(double *coord, imageint imagetmp, char **values) -{ - int nlocal = atom->nlocal; - if (nlocal == nmax) grow(0); - - tag[nlocal] = utils::tnumeric(FLERR,values[0],true,lmp); - molecule[nlocal] = utils::tnumeric(FLERR,values[1],true,lmp); - type[nlocal] = utils::inumeric(FLERR,values[2],true,lmp); - if (type[nlocal] <= 0 || type[nlocal] > atom->ntypes) - error->one(FLERR,"Invalid atom type in Atoms section of data file"); - - q[nlocal] = utils::numeric(FLERR,values[3],true,lmp); - - x[nlocal][0] = coord[0]; - x[nlocal][1] = coord[1]; - x[nlocal][2] = coord[2]; - - image[nlocal] = imagetmp; - - mask[nlocal] = 1; - v[nlocal][0] = 0.0; - v[nlocal][1] = 0.0; - v[nlocal][2] = 0.0; - num_bond[nlocal] = 0; - num_angle[nlocal] = 0; - num_dihedral[nlocal] = 0; - num_improper[nlocal] = 0; - - atom->nlocal++; -} - -/* ---------------------------------------------------------------------- - unpack hybrid quantities from one line in Atoms section of data file - initialize other atom quantities for this sub-style -------------------------------------------------------------------------- */ - -int AtomVecFull::data_atom_hybrid(int nlocal, char **values) -{ - molecule[nlocal] = utils::tnumeric(FLERR,values[0],true,lmp); - q[nlocal] = utils::numeric(FLERR,values[1],true,lmp); - - num_bond[nlocal] = 0; - num_angle[nlocal] = 0; - num_dihedral[nlocal] = 0; - num_improper[nlocal] = 0; - - return 2; -} - -/* ---------------------------------------------------------------------- - pack atom info for data file including 3 image flags -------------------------------------------------------------------------- */ - -void AtomVecFull::pack_data(double **buf) -{ - int nlocal = atom->nlocal; - for (int i = 0; i < nlocal; i++) { - buf[i][0] = ubuf(tag[i]).d; - buf[i][1] = ubuf(molecule[i]).d; - buf[i][2] = ubuf(type[i]).d; - buf[i][3] = q[i]; - buf[i][4] = x[i][0]; - buf[i][5] = x[i][1]; - buf[i][6] = x[i][2]; - buf[i][7] = ubuf((image[i] & IMGMASK) - IMGMAX).d; - buf[i][8] = ubuf((image[i] >> IMGBITS & IMGMASK) - IMGMAX).d; - buf[i][9] = ubuf((image[i] >> IMG2BITS) - IMGMAX).d; - } -} - -/* ---------------------------------------------------------------------- - pack hybrid atom info for data file -------------------------------------------------------------------------- */ - -int AtomVecFull::pack_data_hybrid(int i, double *buf) -{ - buf[0] = ubuf(molecule[i]).d; - buf[1] = q[i]; - return 2; -} - -/* ---------------------------------------------------------------------- - write atom info to data file including 3 image flags -------------------------------------------------------------------------- */ - -void AtomVecFull::write_data(FILE *fp, int n, double **buf) -{ - for (int i = 0; i < n; i++) - fprintf(fp,TAGINT_FORMAT " " TAGINT_FORMAT - " %d %-1.16e %-1.16e %-1.16e %-1.16e %d %d %d\n", - (tagint) ubuf(buf[i][0]).i,(tagint) ubuf(buf[i][1]).i, - (int) ubuf(buf[i][2]).i, - buf[i][3],buf[i][4],buf[i][5],buf[i][6], - (int) ubuf(buf[i][7]).i,(int) ubuf(buf[i][8]).i, - (int) ubuf(buf[i][9]).i); -} - -/* ---------------------------------------------------------------------- - write hybrid atom info to data file -------------------------------------------------------------------------- */ - -int AtomVecFull::write_data_hybrid(FILE *fp, double *buf) -{ - fprintf(fp," " TAGINT_FORMAT " %-1.16e",(tagint) ubuf(buf[0]).i,buf[1]); - return 2; -} - -/* ---------------------------------------------------------------------- - return # of bytes of allocated memory -------------------------------------------------------------------------- */ - -bigint AtomVecFull::memory_usage() -{ - bigint bytes = 0; - - if (atom->memcheck("tag")) bytes += memory->usage(tag,nmax); - if (atom->memcheck("type")) bytes += memory->usage(type,nmax); - if (atom->memcheck("mask")) bytes += memory->usage(mask,nmax); - if (atom->memcheck("image")) bytes += memory->usage(image,nmax); - if (atom->memcheck("x")) bytes += memory->usage(x,nmax,3); - if (atom->memcheck("v")) bytes += memory->usage(v,nmax,3); - if (atom->memcheck("f")) bytes += memory->usage(f,nmax*comm->nthreads,3); - - if (atom->memcheck("q")) bytes += memory->usage(q,nmax); - if (atom->memcheck("molecule")) bytes += memory->usage(molecule,nmax); - if (atom->memcheck("nspecial")) bytes += memory->usage(nspecial,nmax,3); - if (atom->memcheck("special")) - bytes += memory->usage(special,nmax,atom->maxspecial); - - if (atom->memcheck("num_bond")) bytes += memory->usage(num_bond,nmax); - if (atom->memcheck("bond_type")) - bytes += memory->usage(bond_type,nmax,atom->bond_per_atom); - if (atom->memcheck("bond_atom")) - bytes += memory->usage(bond_atom,nmax,atom->bond_per_atom); - - if (atom->memcheck("num_angle")) bytes += memory->usage(num_angle,nmax); - if (atom->memcheck("angle_type")) - bytes += memory->usage(angle_type,nmax,atom->angle_per_atom); - if (atom->memcheck("angle_atom1")) - bytes += memory->usage(angle_atom1,nmax,atom->angle_per_atom); - if (atom->memcheck("angle_atom2")) - bytes += memory->usage(angle_atom2,nmax,atom->angle_per_atom); - if (atom->memcheck("angle_atom3")) - bytes += memory->usage(angle_atom3,nmax,atom->angle_per_atom); - - if (atom->memcheck("num_dihedral")) bytes += memory->usage(num_dihedral,nmax); - if (atom->memcheck("dihedral_type")) - bytes += memory->usage(dihedral_type,nmax,atom->dihedral_per_atom); - if (atom->memcheck("dihedral_atom1")) - bytes += memory->usage(dihedral_atom1,nmax,atom->dihedral_per_atom); - if (atom->memcheck("dihedral_atom2")) - bytes += memory->usage(dihedral_atom2,nmax,atom->dihedral_per_atom); - if (atom->memcheck("dihedral_atom3")) - bytes += memory->usage(dihedral_atom3,nmax,atom->dihedral_per_atom); - if (atom->memcheck("dihedral_atom4")) - bytes += memory->usage(dihedral_atom4,nmax,atom->dihedral_per_atom); - - if (atom->memcheck("num_improper")) bytes += memory->usage(num_improper,nmax); - if (atom->memcheck("improper_type")) - bytes += memory->usage(improper_type,nmax,atom->improper_per_atom); - if (atom->memcheck("improper_atom1")) - bytes += memory->usage(improper_atom1,nmax,atom->improper_per_atom); - if (atom->memcheck("improper_atom2")) - bytes += memory->usage(improper_atom2,nmax,atom->improper_per_atom); - if (atom->memcheck("improper_atom3")) - bytes += memory->usage(improper_atom3,nmax,atom->improper_per_atom); - if (atom->memcheck("improper_atom4")) - bytes += memory->usage(improper_atom4,nmax,atom->improper_per_atom); - - return bytes; + num_bond[ilocal] = 0; + num_angle[ilocal] = 0; + num_dihedral[ilocal] = 0; + num_improper[ilocal] = 0; + nspecial[ilocal][0] = 0; + nspecial[ilocal][1] = 0; + nspecial[ilocal][2] = 0; } diff --git a/src/MOLECULE/atom_vec_full.h b/src/MOLECULE/atom_vec_full.h index abaf570b173dbf63f44fa489e35e2dfb1fc4d458..1abd3351d35f3727643b564ba905c82ad4f1d241 100644 --- a/src/MOLECULE/atom_vec_full.h +++ b/src/MOLECULE/atom_vec_full.h @@ -27,57 +27,23 @@ namespace LAMMPS_NS { class AtomVecFull : public AtomVec { public: AtomVecFull(class LAMMPS *); - virtual ~AtomVecFull() {} - void grow(int); - void grow_reset(); - void copy(int, int, int); - virtual int pack_comm(int, int *, double *, int, int *); - virtual int pack_comm_vel(int, int *, double *, int, int *); - virtual void unpack_comm(int, int, double *); - virtual void unpack_comm_vel(int, int, double *); - int pack_reverse(int, int, double *); - void unpack_reverse(int, int *, double *); - virtual int pack_border(int, int *, double *, int, int *); - virtual int pack_border_vel(int, int *, double *, int, int *); - int pack_border_hybrid(int, int *, double *); - virtual void unpack_border(int, int, double *); - virtual void unpack_border_vel(int, int, double *); - int unpack_border_hybrid(int, int, double *); - virtual int pack_exchange(int, double *); - virtual int unpack_exchange(double *); - int size_restart(); - int pack_restart(int, double *); - int unpack_restart(double *); - void create_atom(int, double *); - void data_atom(double *, imageint, char **); - int data_atom_hybrid(int, char **); - void pack_data(double **); - int pack_data_hybrid(int, double *); - void write_data(FILE *, int, double **); - int write_data_hybrid(FILE *, double *); - bigint memory_usage(); - - protected: - tagint *tag; - int *type,*mask; - imageint *image; - double **x,**v,**f; - double *q; - tagint *molecule; + ~AtomVecFull(); + + void grow_pointers(); + void pack_restart_pre(int); + void pack_restart_post(int); + void unpack_restart_init(int); + void data_atom_post(int); + + private: + int *num_bond,*num_angle,*num_dihedral,*num_improper; + int **bond_type,**angle_type,**dihedral_type,**improper_type; int **nspecial; - tagint **special; - int *num_bond; - int **bond_type; - tagint **bond_atom; - int *num_angle; - int **angle_type; - tagint **angle_atom1,**angle_atom2,**angle_atom3; - int *num_dihedral; - int **dihedral_type; - tagint **dihedral_atom1,**dihedral_atom2,**dihedral_atom3,**dihedral_atom4; - int *num_improper; - int **improper_type; - tagint **improper_atom1,**improper_atom2,**improper_atom3,**improper_atom4; + + int any_bond_negative,any_angle_negative, + any_dihedral_negative,any_improper_negative; + int bond_per_atom,angle_per_atom,dihedral_per_atom,improper_per_atom; + int *bond_negative,*angle_negative,*dihedral_negative,*improper_negative; }; } @@ -87,13 +53,4 @@ class AtomVecFull : public AtomVec { /* ERROR/WARNING messages: -E: Per-processor system is too big - -The number of owned atoms plus ghost atoms on a single -processor must fit in 32-bit integer. - -E: Invalid atom type in Atoms section of data file - -Atom types must range from 1 to specified # of types. - */ diff --git a/src/MOLECULE/atom_vec_molecular.cpp b/src/MOLECULE/atom_vec_molecular.cpp index 73cec704566560c0a13774280f4f6734e313ed86..e90bec51084796be5b89c9cc5706872dce613d55 100644 --- a/src/MOLECULE/atom_vec_molecular.cpp +++ b/src/MOLECULE/atom_vec_molecular.cpp @@ -13,13 +13,6 @@ #include "atom_vec_molecular.h" #include "atom.h" -#include "comm.h" -#include "domain.h" -#include "modify.h" -#include "fix.h" -#include "memory.h" -#include "error.h" -#include "utils.h" using namespace LAMMPS_NS; @@ -31,1056 +24,210 @@ AtomVecMolecular::AtomVecMolecular(LAMMPS *lmp) : AtomVec(lmp) bonds_allow = angles_allow = dihedrals_allow = impropers_allow = 1; mass_type = 1; - comm_x_only = comm_f_only = 1; - size_forward = 3; - size_reverse = 3; - size_border = 7; - size_velocity = 3; - size_data_atom = 6; - size_data_vel = 4; - xcol_data = 4; - atom->molecule_flag = 1; -} - -/* ---------------------------------------------------------------------- - grow atom arrays - n = 0 grows arrays by a chunk - n > 0 allocates arrays to size n -------------------------------------------------------------------------- */ - -void AtomVecMolecular::grow(int n) -{ - if (n == 0) grow_nmax(); - else nmax = n; - atom->nmax = nmax; - if (nmax < 0 || nmax > MAXSMALLINT) - error->one(FLERR,"Per-processor system is too big"); - - tag = memory->grow(atom->tag,nmax,"atom:tag"); - type = memory->grow(atom->type,nmax,"atom:type"); - mask = memory->grow(atom->mask,nmax,"atom:mask"); - image = memory->grow(atom->image,nmax,"atom:image"); - x = memory->grow(atom->x,nmax,3,"atom:x"); - v = memory->grow(atom->v,nmax,3,"atom:v"); - f = memory->grow(atom->f,nmax*comm->nthreads,3,"atom:f"); - molecule = memory->grow(atom->molecule,nmax,"atom:molecule"); - - nspecial = memory->grow(atom->nspecial,nmax,3,"atom:nspecial"); - special = memory->grow(atom->special,nmax,atom->maxspecial,"atom:special"); - - num_bond = memory->grow(atom->num_bond,nmax,"atom:num_bond"); - bond_type = memory->grow(atom->bond_type,nmax,atom->bond_per_atom, - "atom:bond_type"); - bond_atom = memory->grow(atom->bond_atom,nmax,atom->bond_per_atom, - "atom:bond_atom"); - - num_angle = memory->grow(atom->num_angle,nmax,"atom:num_angle"); - angle_type = memory->grow(atom->angle_type,nmax,atom->angle_per_atom, - "atom:angle_type"); - angle_atom1 = memory->grow(atom->angle_atom1,nmax,atom->angle_per_atom, - "atom:angle_atom1"); - angle_atom2 = memory->grow(atom->angle_atom2,nmax,atom->angle_per_atom, - "atom:angle_atom2"); - angle_atom3 = memory->grow(atom->angle_atom3,nmax,atom->angle_per_atom, - "atom:angle_atom3"); - - num_dihedral = memory->grow(atom->num_dihedral,nmax,"atom:num_dihedral"); - dihedral_type = memory->grow(atom->dihedral_type,nmax, - atom->dihedral_per_atom,"atom:dihedral_type"); - dihedral_atom1 = - memory->grow(atom->dihedral_atom1,nmax,atom->dihedral_per_atom, - "atom:dihedral_atom1"); - dihedral_atom2 = - memory->grow(atom->dihedral_atom2,nmax,atom->dihedral_per_atom, - "atom:dihedral_atom2"); - dihedral_atom3 = - memory->grow(atom->dihedral_atom3,nmax,atom->dihedral_per_atom, - "atom:dihedral_atom3"); - dihedral_atom4 = - memory->grow(atom->dihedral_atom4,nmax,atom->dihedral_per_atom, - "atom:dihedral_atom4"); - - num_improper = memory->grow(atom->num_improper,nmax,"atom:num_improper"); - improper_type = - memory->grow(atom->improper_type,nmax,atom->improper_per_atom, - "atom:improper_type"); - improper_atom1 = - memory->grow(atom->improper_atom1,nmax,atom->improper_per_atom, - "atom:improper_atom1"); - improper_atom2 = - memory->grow(atom->improper_atom2,nmax,atom->improper_per_atom, - "atom:improper_atom2"); - improper_atom3 = - memory->grow(atom->improper_atom3,nmax,atom->improper_per_atom, - "atom:improper_atom3"); - improper_atom4 = - memory->grow(atom->improper_atom4,nmax,atom->improper_per_atom, - "atom:improper_atom4"); - - if (atom->nextra_grow) - for (int iextra = 0; iextra < atom->nextra_grow; iextra++) - modify->fix[atom->extra_grow[iextra]]->grow_arrays(nmax); + // strings with peratom variables to include in each AtomVec method + // strings cannot contain fields in corresponding AtomVec default strings + // order of fields in a string does not matter + // except: fields_data_atom & fields_data_vel must match data file + + fields_grow = (char *) + "molecule num_bond bond_type bond_atom " + "num_angle angle_type angle_atom1 angle_atom2 angle_atom3 " + "num_dihedral dihedral_type dihedral_atom1 dihedral_atom2 " + "dihedral_atom3 dihedral_atom4 " + "num_improper improper_type improper_atom1 improper_atom2 " + "improper_atom3 improper_atom4 " + "nspecial special"; + fields_copy = (char *) + "molecule num_bond bond_type bond_atom " + "num_angle angle_type angle_atom1 angle_atom2 angle_atom3 " + "num_dihedral dihedral_type dihedral_atom1 dihedral_atom2 " + "dihedral_atom3 dihedral_atom4 " + "num_improper improper_type improper_atom1 improper_atom2 " + "improper_atom3 improper_atom4 " + "nspecial special"; + fields_comm = (char *) ""; + fields_comm_vel = (char *) ""; + fields_reverse = (char *) ""; + fields_border = (char *) "molecule"; + fields_border_vel = (char *) "molecule"; + fields_exchange = (char *) + "molecule num_bond bond_type bond_atom " + "num_angle angle_type angle_atom1 angle_atom2 angle_atom3 " + "num_dihedral dihedral_type dihedral_atom1 dihedral_atom2 " + "dihedral_atom3 dihedral_atom4 " + "num_improper improper_type improper_atom1 improper_atom2 " + "improper_atom3 improper_atom4 " + "nspecial special"; + fields_restart = (char *) + "molecule num_bond bond_type bond_atom " + "num_angle angle_type angle_atom1 angle_atom2 angle_atom3 " + "num_dihedral dihedral_type dihedral_atom1 dihedral_atom2 " + "dihedral_atom3 dihedral_atom4 " + "num_improper improper_type improper_atom1 improper_atom2 " + "improper_atom3 improper_atom4"; + fields_create = (char *) + "molecule num_bond num_angle num_dihedral num_improper nspecial"; + fields_data_atom = (char *) "id molecule type x"; + fields_data_vel = (char *) "id v"; + + setup_fields(); + + bond_per_atom = angle_per_atom = dihedral_per_atom = improper_per_atom = 0; + bond_negative = angle_negative = dihedral_negative = improper_negative = NULL; } -/* ---------------------------------------------------------------------- - reset local array ptrs -------------------------------------------------------------------------- */ +/* ---------------------------------------------------------------------- */ -void AtomVecMolecular::grow_reset() +AtomVecMolecular::~AtomVecMolecular() { - tag = atom->tag; type = atom->type; - mask = atom->mask; image = atom->image; - x = atom->x; v = atom->v; f = atom->f; - molecule = atom->molecule; - nspecial = atom->nspecial; special = atom->special; - num_bond = atom->num_bond; bond_type = atom->bond_type; - bond_atom = atom->bond_atom; - num_angle = atom->num_angle; angle_type = atom->angle_type; - angle_atom1 = atom->angle_atom1; angle_atom2 = atom->angle_atom2; - angle_atom3 = atom->angle_atom3; - num_dihedral = atom->num_dihedral; dihedral_type = atom->dihedral_type; - dihedral_atom1 = atom->dihedral_atom1; dihedral_atom2 = atom->dihedral_atom2; - dihedral_atom3 = atom->dihedral_atom3; dihedral_atom4 = atom->dihedral_atom4; - num_improper = atom->num_improper; improper_type = atom->improper_type; - improper_atom1 = atom->improper_atom1; improper_atom2 = atom->improper_atom2; - improper_atom3 = atom->improper_atom3; improper_atom4 = atom->improper_atom4; + delete [] bond_negative; + delete [] angle_negative; + delete [] dihedral_negative; + delete [] improper_negative; } /* ---------------------------------------------------------------------- - copy atom I info to atom J + set local copies of all grow ptrs used by this class, except defaults + needed in replicate when 2 atom classes exist and it calls pack_restart() ------------------------------------------------------------------------- */ -void AtomVecMolecular::copy(int i, int j, int delflag) +void AtomVecMolecular::grow_pointers() { - int k; - - tag[j] = tag[i]; - type[j] = type[i]; - mask[j] = mask[i]; - image[j] = image[i]; - x[j][0] = x[i][0]; - x[j][1] = x[i][1]; - x[j][2] = x[i][2]; - v[j][0] = v[i][0]; - v[j][1] = v[i][1]; - v[j][2] = v[i][2]; - - molecule[j] = molecule[i]; - - num_bond[j] = num_bond[i]; - for (k = 0; k < num_bond[j]; k++) { - bond_type[j][k] = bond_type[i][k]; - bond_atom[j][k] = bond_atom[i][k]; - } - - num_angle[j] = num_angle[i]; - for (k = 0; k < num_angle[j]; k++) { - angle_type[j][k] = angle_type[i][k]; - angle_atom1[j][k] = angle_atom1[i][k]; - angle_atom2[j][k] = angle_atom2[i][k]; - angle_atom3[j][k] = angle_atom3[i][k]; - } - - num_dihedral[j] = num_dihedral[i]; - for (k = 0; k < num_dihedral[j]; k++) { - dihedral_type[j][k] = dihedral_type[i][k]; - dihedral_atom1[j][k] = dihedral_atom1[i][k]; - dihedral_atom2[j][k] = dihedral_atom2[i][k]; - dihedral_atom3[j][k] = dihedral_atom3[i][k]; - dihedral_atom4[j][k] = dihedral_atom4[i][k]; - } - - num_improper[j] = num_improper[i]; - for (k = 0; k < num_improper[j]; k++) { - improper_type[j][k] = improper_type[i][k]; - improper_atom1[j][k] = improper_atom1[i][k]; - improper_atom2[j][k] = improper_atom2[i][k]; - improper_atom3[j][k] = improper_atom3[i][k]; - improper_atom4[j][k] = improper_atom4[i][k]; - } - - nspecial[j][0] = nspecial[i][0]; - nspecial[j][1] = nspecial[i][1]; - nspecial[j][2] = nspecial[i][2]; - for (k = 0; k < nspecial[j][2]; k++) special[j][k] = special[i][k]; - - if (atom->nextra_grow) - for (int iextra = 0; iextra < atom->nextra_grow; iextra++) - modify->fix[atom->extra_grow[iextra]]->copy_arrays(i,j,delflag); -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecMolecular::pack_comm(int n, int *list, double *buf, - int pbc_flag, int *pbc) -{ - int i,j,m; - double dx,dy,dz; - - m = 0; - if (pbc_flag == 0) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = x[j][0]; - buf[m++] = x[j][1]; - buf[m++] = x[j][2]; - } - } else { - if (domain->triclinic == 0) { - dx = pbc[0]*domain->xprd; - dy = pbc[1]*domain->yprd; - dz = pbc[2]*domain->zprd; - } else { - dx = pbc[0]*domain->xprd + pbc[5]*domain->xy + pbc[4]*domain->xz; - dy = pbc[1]*domain->yprd + pbc[3]*domain->yz; - dz = pbc[2]*domain->zprd; - } - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = x[j][0] + dx; - buf[m++] = x[j][1] + dy; - buf[m++] = x[j][2] + dz; - } - } - return m; -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecMolecular::pack_comm_vel(int n, int *list, double *buf, - int pbc_flag, int *pbc) -{ - int i,j,m; - double dx,dy,dz,dvx,dvy,dvz; - - m = 0; - if (pbc_flag == 0) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = x[j][0]; - buf[m++] = x[j][1]; - buf[m++] = x[j][2]; - buf[m++] = v[j][0]; - buf[m++] = v[j][1]; - buf[m++] = v[j][2]; - } - } else { - if (domain->triclinic == 0) { - dx = pbc[0]*domain->xprd; - dy = pbc[1]*domain->yprd; - dz = pbc[2]*domain->zprd; - } else { - dx = pbc[0]*domain->xprd + pbc[5]*domain->xy + pbc[4]*domain->xz; - dy = pbc[1]*domain->yprd + pbc[3]*domain->yz; - dz = pbc[2]*domain->zprd; - } - if (!deform_vremap) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = x[j][0] + dx; - buf[m++] = x[j][1] + dy; - buf[m++] = x[j][2] + dz; - buf[m++] = v[j][0]; - buf[m++] = v[j][1]; - buf[m++] = v[j][2]; - } - } else { - dvx = pbc[0]*h_rate[0] + pbc[5]*h_rate[5] + pbc[4]*h_rate[4]; - dvy = pbc[1]*h_rate[1] + pbc[3]*h_rate[3]; - dvz = pbc[2]*h_rate[2]; - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = x[j][0] + dx; - buf[m++] = x[j][1] + dy; - buf[m++] = x[j][2] + dz; - if (mask[i] & deform_groupbit) { - buf[m++] = v[j][0] + dvx; - buf[m++] = v[j][1] + dvy; - buf[m++] = v[j][2] + dvz; - } else { - buf[m++] = v[j][0]; - buf[m++] = v[j][1]; - buf[m++] = v[j][2]; - } - } - } - } - return m; -} - -/* ---------------------------------------------------------------------- */ - -void AtomVecMolecular::unpack_comm(int n, int first, double *buf) -{ - int i,m,last; - - m = 0; - last = first + n; - for (i = first; i < last; i++) { - x[i][0] = buf[m++]; - x[i][1] = buf[m++]; - x[i][2] = buf[m++]; - } -} - -/* ---------------------------------------------------------------------- */ - -void AtomVecMolecular::unpack_comm_vel(int n, int first, double *buf) -{ - int i,m,last; - - m = 0; - last = first + n; - for (i = first; i < last; i++) { - x[i][0] = buf[m++]; - x[i][1] = buf[m++]; - x[i][2] = buf[m++]; - v[i][0] = buf[m++]; - v[i][1] = buf[m++]; - v[i][2] = buf[m++]; - } -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecMolecular::pack_reverse(int n, int first, double *buf) -{ - int i,m,last; - - m = 0; - last = first + n; - for (i = first; i < last; i++) { - buf[m++] = f[i][0]; - buf[m++] = f[i][1]; - buf[m++] = f[i][2]; - } - return m; -} - -/* ---------------------------------------------------------------------- */ - -void AtomVecMolecular::unpack_reverse(int n, int *list, double *buf) -{ - int i,j,m; - - m = 0; - for (i = 0; i < n; i++) { - j = list[i]; - f[j][0] += buf[m++]; - f[j][1] += buf[m++]; - f[j][2] += buf[m++]; - } -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecMolecular::pack_border(int n, int *list, double *buf, - int pbc_flag, int *pbc) -{ - int i,j,m; - double dx,dy,dz; - - m = 0; - if (pbc_flag == 0) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = x[j][0]; - buf[m++] = x[j][1]; - buf[m++] = x[j][2]; - buf[m++] = ubuf(tag[j]).d; - buf[m++] = ubuf(type[j]).d; - buf[m++] = ubuf(mask[j]).d; - buf[m++] = ubuf(molecule[j]).d; - } - } else { - if (domain->triclinic == 0) { - dx = pbc[0]*domain->xprd; - dy = pbc[1]*domain->yprd; - dz = pbc[2]*domain->zprd; - } else { - dx = pbc[0]; - dy = pbc[1]; - dz = pbc[2]; - } - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = x[j][0] + dx; - buf[m++] = x[j][1] + dy; - buf[m++] = x[j][2] + dz; - buf[m++] = ubuf(tag[j]).d; - buf[m++] = ubuf(type[j]).d; - buf[m++] = ubuf(mask[j]).d; - buf[m++] = ubuf(molecule[j]).d; - } - } - - if (atom->nextra_border) - for (int iextra = 0; iextra < atom->nextra_border; iextra++) - m += modify->fix[atom->extra_border[iextra]]->pack_border(n,list,&buf[m]); - - return m; -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecMolecular::pack_border_vel(int n, int *list, double *buf, - int pbc_flag, int *pbc) -{ - int i,j,m; - double dx,dy,dz,dvx,dvy,dvz; - - m = 0; - if (pbc_flag == 0) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = x[j][0]; - buf[m++] = x[j][1]; - buf[m++] = x[j][2]; - buf[m++] = ubuf(tag[j]).d; - buf[m++] = ubuf(type[j]).d; - buf[m++] = ubuf(mask[j]).d; - buf[m++] = ubuf(molecule[j]).d; - buf[m++] = v[j][0]; - buf[m++] = v[j][1]; - buf[m++] = v[j][2]; - } - } else { - if (domain->triclinic == 0) { - dx = pbc[0]*domain->xprd; - dy = pbc[1]*domain->yprd; - dz = pbc[2]*domain->zprd; - } else { - dx = pbc[0]; - dy = pbc[1]; - dz = pbc[2]; - } - if (!deform_vremap) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = x[j][0] + dx; - buf[m++] = x[j][1] + dy; - buf[m++] = x[j][2] + dz; - buf[m++] = ubuf(tag[j]).d; - buf[m++] = ubuf(type[j]).d; - buf[m++] = ubuf(mask[j]).d; - buf[m++] = ubuf(molecule[j]).d; - buf[m++] = v[j][0]; - buf[m++] = v[j][1]; - buf[m++] = v[j][2]; - } - } else { - dvx = pbc[0]*h_rate[0] + pbc[5]*h_rate[5] + pbc[4]*h_rate[4]; - dvy = pbc[1]*h_rate[1] + pbc[3]*h_rate[3]; - dvz = pbc[2]*h_rate[2]; - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = x[j][0] + dx; - buf[m++] = x[j][1] + dy; - buf[m++] = x[j][2] + dz; - buf[m++] = ubuf(tag[j]).d; - buf[m++] = ubuf(type[j]).d; - buf[m++] = ubuf(mask[j]).d; - buf[m++] = ubuf(molecule[j]).d; - if (mask[i] & deform_groupbit) { - buf[m++] = v[j][0] + dvx; - buf[m++] = v[j][1] + dvy; - buf[m++] = v[j][2] + dvz; - } else { - buf[m++] = v[j][0]; - buf[m++] = v[j][1]; - buf[m++] = v[j][2]; - } - } - } - } - - if (atom->nextra_border) - for (int iextra = 0; iextra < atom->nextra_border; iextra++) - m += modify->fix[atom->extra_border[iextra]]->pack_border(n,list,&buf[m]); - - return m; -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecMolecular::pack_border_hybrid(int n, int *list, double *buf) -{ - int i,j,m; - - m = 0; - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = ubuf(molecule[j]).d; - } - return m; -} - -/* ---------------------------------------------------------------------- */ - -void AtomVecMolecular::unpack_border(int n, int first, double *buf) -{ - int i,m,last; - - m = 0; - last = first + n; - for (i = first; i < last; i++) { - if (i == nmax) grow(0); - x[i][0] = buf[m++]; - x[i][1] = buf[m++]; - x[i][2] = buf[m++]; - tag[i] = (tagint) ubuf(buf[m++]).i; - type[i] = (int) ubuf(buf[m++]).i; - mask[i] = (int) ubuf(buf[m++]).i; - molecule[i] = (tagint) ubuf(buf[m++]).i; - } - - if (atom->nextra_border) - for (int iextra = 0; iextra < atom->nextra_border; iextra++) - m += modify->fix[atom->extra_border[iextra]]-> - unpack_border(n,first,&buf[m]); -} - -/* ---------------------------------------------------------------------- */ - -void AtomVecMolecular::unpack_border_vel(int n, int first, double *buf) -{ - int i,m,last; - - m = 0; - last = first + n; - for (i = first; i < last; i++) { - if (i == nmax) grow(0); - x[i][0] = buf[m++]; - x[i][1] = buf[m++]; - x[i][2] = buf[m++]; - tag[i] = (tagint) ubuf(buf[m++]).i; - type[i] = (int) ubuf(buf[m++]).i; - mask[i] = (int) ubuf(buf[m++]).i; - molecule[i] = (tagint) ubuf(buf[m++]).i; - v[i][0] = buf[m++]; - v[i][1] = buf[m++]; - v[i][2] = buf[m++]; - } - - if (atom->nextra_border) - for (int iextra = 0; iextra < atom->nextra_border; iextra++) - m += modify->fix[atom->extra_border[iextra]]-> - unpack_border(n,first,&buf[m]); -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecMolecular::unpack_border_hybrid(int n, int first, double *buf) -{ - int i,m,last; - - m = 0; - last = first + n; - for (i = first; i < last; i++) - molecule[i] = (tagint) ubuf(buf[m++]).i; - return m; + num_bond = atom->num_bond; + bond_type = atom->bond_type; + num_angle = atom->num_angle; + angle_type = atom->angle_type; + num_dihedral = atom->num_dihedral; + dihedral_type = atom->dihedral_type; + num_improper = atom->num_improper; + improper_type = atom->improper_type; + nspecial = atom->nspecial; } /* ---------------------------------------------------------------------- - pack data for atom I for sending to another proc - xyz must be 1st 3 values, so comm::exchange() can test on them + modify values for AtomVec::pack_restart() to pack ------------------------------------------------------------------------- */ -int AtomVecMolecular::pack_exchange(int i, double *buf) -{ - int k; - - int m = 1; - buf[m++] = x[i][0]; - buf[m++] = x[i][1]; - buf[m++] = x[i][2]; - buf[m++] = v[i][0]; - buf[m++] = v[i][1]; - buf[m++] = v[i][2]; - buf[m++] = ubuf(tag[i]).d; - buf[m++] = ubuf(type[i]).d; - buf[m++] = ubuf(mask[i]).d; - buf[m++] = ubuf(image[i]).d; - - buf[m++] = ubuf(molecule[i]).d; - - buf[m++] = ubuf(num_bond[i]).d; - for (k = 0; k < num_bond[i]; k++) { - buf[m++] = ubuf(bond_type[i][k]).d; - buf[m++] = ubuf(bond_atom[i][k]).d; - } - - buf[m++] = ubuf(num_angle[i]).d; - for (k = 0; k < num_angle[i]; k++) { - buf[m++] = ubuf(angle_type[i][k]).d; - buf[m++] = ubuf(angle_atom1[i][k]).d; - buf[m++] = ubuf(angle_atom2[i][k]).d; - buf[m++] = ubuf(angle_atom3[i][k]).d; - } - - buf[m++] = ubuf(num_dihedral[i]).d; - for (k = 0; k < num_dihedral[i]; k++) { - buf[m++] = ubuf(dihedral_type[i][k]).d; - buf[m++] = ubuf(dihedral_atom1[i][k]).d; - buf[m++] = ubuf(dihedral_atom2[i][k]).d; - buf[m++] = ubuf(dihedral_atom3[i][k]).d; - buf[m++] = ubuf(dihedral_atom4[i][k]).d; - } - - buf[m++] = ubuf(num_improper[i]).d; - for (k = 0; k < num_improper[i]; k++) { - buf[m++] = ubuf(improper_type[i][k]).d; - buf[m++] = ubuf(improper_atom1[i][k]).d; - buf[m++] = ubuf(improper_atom2[i][k]).d; - buf[m++] = ubuf(improper_atom3[i][k]).d; - buf[m++] = ubuf(improper_atom4[i][k]).d; - } - - buf[m++] = ubuf(nspecial[i][0]).d; - buf[m++] = ubuf(nspecial[i][1]).d; - buf[m++] = ubuf(nspecial[i][2]).d; - for (k = 0; k < nspecial[i][2]; k++) buf[m++] = ubuf(special[i][k]).d; - - if (atom->nextra_grow) - for (int iextra = 0; iextra < atom->nextra_grow; iextra++) - m += modify->fix[atom->extra_grow[iextra]]->pack_exchange(i,&buf[m]); - - buf[0] = m; - return m; -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecMolecular::unpack_exchange(double *buf) +void AtomVecMolecular::pack_restart_pre(int ilocal) { - int k; - - int nlocal = atom->nlocal; - if (nlocal == nmax) grow(0); - - int m = 1; - x[nlocal][0] = buf[m++]; - x[nlocal][1] = buf[m++]; - x[nlocal][2] = buf[m++]; - v[nlocal][0] = buf[m++]; - v[nlocal][1] = buf[m++]; - v[nlocal][2] = buf[m++]; - tag[nlocal] = (tagint) ubuf(buf[m++]).i; - type[nlocal] = (int) ubuf(buf[m++]).i; - mask[nlocal] = (int) ubuf(buf[m++]).i; - image[nlocal] = (imageint) ubuf(buf[m++]).i; + // insure negative vectors are needed length - molecule[nlocal] = (tagint) ubuf(buf[m++]).i; - - num_bond[nlocal] = (int) ubuf(buf[m++]).i; - for (k = 0; k < num_bond[nlocal]; k++) { - bond_type[nlocal][k] = (int) ubuf(buf[m++]).i; - bond_atom[nlocal][k] = (tagint) ubuf(buf[m++]).i; + if (bond_per_atom < atom->bond_per_atom) { + delete [] bond_negative; + bond_per_atom = atom->bond_per_atom; + bond_negative = new int[bond_per_atom]; } - - num_angle[nlocal] = (int) ubuf(buf[m++]).i; - for (k = 0; k < num_angle[nlocal]; k++) { - angle_type[nlocal][k] = (int) ubuf(buf[m++]).i; - angle_atom1[nlocal][k] = (tagint) ubuf(buf[m++]).i; - angle_atom2[nlocal][k] = (tagint) ubuf(buf[m++]).i; - angle_atom3[nlocal][k] = (tagint) ubuf(buf[m++]).i; + if (angle_per_atom < atom->angle_per_atom) { + delete [] angle_negative; + angle_per_atom = atom->angle_per_atom; + angle_negative = new int[angle_per_atom]; } - - num_dihedral[nlocal] = (int) ubuf(buf[m++]).i; - for (k = 0; k < num_dihedral[nlocal]; k++) { - dihedral_type[nlocal][k] = (int) ubuf(buf[m++]).i; - dihedral_atom1[nlocal][k] = (tagint) ubuf(buf[m++]).i; - dihedral_atom2[nlocal][k] = (tagint) ubuf(buf[m++]).i; - dihedral_atom3[nlocal][k] = (tagint) ubuf(buf[m++]).i; - dihedral_atom4[nlocal][k] = (tagint) ubuf(buf[m++]).i; + if (dihedral_per_atom < atom->dihedral_per_atom) { + delete [] dihedral_negative; + dihedral_per_atom = atom->dihedral_per_atom; + dihedral_negative = new int[dihedral_per_atom]; } - - num_improper[nlocal] = (int) ubuf(buf[m++]).i; - for (k = 0; k < num_improper[nlocal]; k++) { - improper_type[nlocal][k] = (int) ubuf(buf[m++]).i; - improper_atom1[nlocal][k] = (tagint) ubuf(buf[m++]).i; - improper_atom2[nlocal][k] = (tagint) ubuf(buf[m++]).i; - improper_atom3[nlocal][k] = (tagint) ubuf(buf[m++]).i; - improper_atom4[nlocal][k] = (tagint) ubuf(buf[m++]).i; + if (improper_per_atom < atom->improper_per_atom) { + delete [] improper_negative; + improper_per_atom = atom->improper_per_atom; + improper_negative = new int[improper_per_atom]; } - nspecial[nlocal][0] = (int) ubuf(buf[m++]).i; - nspecial[nlocal][1] = (int) ubuf(buf[m++]).i; - nspecial[nlocal][2] = (int) ubuf(buf[m++]).i; - for (k = 0; k < nspecial[nlocal][2]; k++) - special[nlocal][k] = (int) ubuf(buf[m++]).i; - - if (atom->nextra_grow) - for (int iextra = 0; iextra < atom->nextra_grow; iextra++) - m += modify->fix[atom->extra_grow[iextra]]-> - unpack_exchange(nlocal,&buf[m]); - - atom->nlocal++; - return m; -} - -/* ---------------------------------------------------------------------- - size of restart data for all atoms owned by this proc - include extra data stored by fixes -------------------------------------------------------------------------- */ - -int AtomVecMolecular::size_restart() -{ - int i; - - int nlocal = atom->nlocal; - int n = 0; - for (i = 0; i < nlocal; i++) - n += 16 + 2*num_bond[i] + 4*num_angle[i] + - 5*num_dihedral[i] + 5*num_improper[i]; - - if (atom->nextra_restart) - for (int iextra = 0; iextra < atom->nextra_restart; iextra++) - for (i = 0; i < nlocal; i++) - n += modify->fix[atom->extra_restart[iextra]]->size_restart(i); - - return n; -} - -/* ---------------------------------------------------------------------- - pack atom I's data for restart file including extra quantities - xyz must be 1st 3 values, so that read_restart can test on them - molecular types may be negative, but write as positive -------------------------------------------------------------------------- */ - -int AtomVecMolecular::pack_restart(int i, double *buf) -{ - int k; + // flip any negative types to positive and flag which ones - int m = 1; - buf[m++] = x[i][0]; - buf[m++] = x[i][1]; - buf[m++] = x[i][2]; - buf[m++] = ubuf(tag[i]).d; - buf[m++] = ubuf(type[i]).d; - buf[m++] = ubuf(mask[i]).d; - buf[m++] = ubuf(image[i]).d; - buf[m++] = v[i][0]; - buf[m++] = v[i][1]; - buf[m++] = v[i][2]; - - buf[m++] = ubuf(molecule[i]).d; - - buf[m++] = ubuf(num_bond[i]).d; - for (k = 0; k < num_bond[i]; k++) { - buf[m++] = ubuf(MAX(bond_type[i][k],-bond_type[i][k])).d; - buf[m++] = ubuf(bond_atom[i][k]).d; + any_bond_negative = 0; + for (int m = 0; m < num_bond[ilocal]; m++) { + if (bond_type[ilocal][m] < 0) { + bond_negative[m] = 1; + bond_type[ilocal][m] = -bond_type[ilocal][m]; + any_bond_negative = 1; + } else bond_negative[m] = 0; } - buf[m++] = ubuf(num_angle[i]).d; - for (k = 0; k < num_angle[i]; k++) { - buf[m++] = ubuf(MAX(angle_type[i][k],-angle_type[i][k])).d; - buf[m++] = ubuf(angle_atom1[i][k]).d; - buf[m++] = ubuf(angle_atom2[i][k]).d; - buf[m++] = ubuf(angle_atom3[i][k]).d; + any_angle_negative = 0; + for (int m = 0; m < num_angle[ilocal]; m++) { + if (angle_type[ilocal][m] < 0) { + angle_negative[m] = 1; + angle_type[ilocal][m] = -angle_type[ilocal][m]; + any_angle_negative = 1; + } else angle_negative[m] = 0; } - buf[m++] = ubuf(num_dihedral[i]).d; - for (k = 0; k < num_dihedral[i]; k++) { - buf[m++] = ubuf(MAX(dihedral_type[i][k],-dihedral_type[i][k])).d; - buf[m++] = ubuf(dihedral_atom1[i][k]).d; - buf[m++] = ubuf(dihedral_atom2[i][k]).d; - buf[m++] = ubuf(dihedral_atom3[i][k]).d; - buf[m++] = ubuf(dihedral_atom4[i][k]).d; + any_dihedral_negative = 0; + for (int m = 0; m < num_dihedral[ilocal]; m++) { + if (dihedral_type[ilocal][m] < 0) { + dihedral_negative[m] = 1; + dihedral_type[ilocal][m] = -dihedral_type[ilocal][m]; + any_dihedral_negative = 1; + } else dihedral_negative[m] = 0; } - buf[m++] = ubuf(num_improper[i]).d; - for (k = 0; k < num_improper[i]; k++) { - buf[m++] = ubuf(MAX(improper_type[i][k],-improper_type[i][k])).d; - buf[m++] = ubuf(improper_atom1[i][k]).d; - buf[m++] = ubuf(improper_atom2[i][k]).d; - buf[m++] = ubuf(improper_atom3[i][k]).d; - buf[m++] = ubuf(improper_atom4[i][k]).d; + any_improper_negative = 0; + for (int m = 0; m < num_improper[ilocal]; m++) { + if (improper_type[ilocal][m] < 0) { + improper_negative[m] = 1; + improper_type[ilocal][m] = -improper_type[ilocal][m]; + any_improper_negative = 1; + } else improper_negative[m] = 0; } - - if (atom->nextra_restart) - for (int iextra = 0; iextra < atom->nextra_restart; iextra++) - m += modify->fix[atom->extra_restart[iextra]]->pack_restart(i,&buf[m]); - - buf[0] = m; - return m; } /* ---------------------------------------------------------------------- - unpack data for one atom from restart file including extra quantities + unmodify values packed by AtomVec::pack_restart() ------------------------------------------------------------------------- */ -int AtomVecMolecular::unpack_restart(double *buf) +void AtomVecMolecular::pack_restart_post(int ilocal) { - int k; - - int nlocal = atom->nlocal; - if (nlocal == nmax) { - grow(0); - if (atom->nextra_store) - memory->grow(atom->extra,nmax,atom->nextra_store,"atom:extra"); - } - - int m = 1; - x[nlocal][0] = buf[m++]; - x[nlocal][1] = buf[m++]; - x[nlocal][2] = buf[m++]; - tag[nlocal] = (tagint) ubuf(buf[m++]).i; - type[nlocal] = (int) ubuf(buf[m++]).i; - mask[nlocal] = (int) ubuf(buf[m++]).i; - image[nlocal] = (imageint) ubuf(buf[m++]).i; - v[nlocal][0] = buf[m++]; - v[nlocal][1] = buf[m++]; - v[nlocal][2] = buf[m++]; - - molecule[nlocal] = (tagint) ubuf(buf[m++]).i; - - num_bond[nlocal] = (int) ubuf(buf[m++]).i; - for (k = 0; k < num_bond[nlocal]; k++) { - bond_type[nlocal][k] = (int) ubuf(buf[m++]).i; - bond_atom[nlocal][k] = (tagint) ubuf(buf[m++]).i; - } + // restore the flagged types to their negative values - num_angle[nlocal] = (int) ubuf(buf[m++]).i; - for (k = 0; k < num_angle[nlocal]; k++) { - angle_type[nlocal][k] = (int) ubuf(buf[m++]).i; - angle_atom1[nlocal][k] = (tagint) ubuf(buf[m++]).i; - angle_atom2[nlocal][k] = (tagint) ubuf(buf[m++]).i; - angle_atom3[nlocal][k] = (tagint) ubuf(buf[m++]).i; + if (any_bond_negative) { + for (int m = 0; m < num_bond[ilocal]; m++) + if (bond_negative[m]) bond_type[ilocal][m] = -bond_type[ilocal][m]; } - num_dihedral[nlocal] = (int) ubuf(buf[m++]).i; - for (k = 0; k < num_dihedral[nlocal]; k++) { - dihedral_type[nlocal][k] = (int) ubuf(buf[m++]).i; - dihedral_atom1[nlocal][k] = (tagint) ubuf(buf[m++]).i; - dihedral_atom2[nlocal][k] = (tagint) ubuf(buf[m++]).i; - dihedral_atom3[nlocal][k] = (tagint) ubuf(buf[m++]).i; - dihedral_atom4[nlocal][k] = (tagint) ubuf(buf[m++]).i; + if (any_angle_negative) { + for (int m = 0; m < num_angle[ilocal]; m++) + if (angle_negative[m]) angle_type[ilocal][m] = -angle_type[ilocal][m]; } - num_improper[nlocal] = (int) ubuf(buf[m++]).i; - for (k = 0; k < num_improper[nlocal]; k++) { - improper_type[nlocal][k] = (int) ubuf(buf[m++]).i; - improper_atom1[nlocal][k] = (tagint) ubuf(buf[m++]).i; - improper_atom2[nlocal][k] = (tagint) ubuf(buf[m++]).i; - improper_atom3[nlocal][k] = (tagint) ubuf(buf[m++]).i; - improper_atom4[nlocal][k] = (tagint) ubuf(buf[m++]).i; + if (any_dihedral_negative) { + for (int m = 0; m < num_dihedral[ilocal]; m++) + if (dihedral_negative[m]) + dihedral_type[ilocal][m] = -dihedral_type[ilocal][m]; } - nspecial[nlocal][0] = nspecial[nlocal][1] = nspecial[nlocal][2] = 0; - - double **extra = atom->extra; - if (atom->nextra_store) { - int size = static_cast (buf[0]) - m; - for (int i = 0; i < size; i++) extra[nlocal][i] = buf[m++]; - } - - atom->nlocal++; - return m; -} - -/* ---------------------------------------------------------------------- - create one atom of itype at coord - set other values to defaults -------------------------------------------------------------------------- */ - -void AtomVecMolecular::create_atom(int itype, double *coord) -{ - int nlocal = atom->nlocal; - if (nlocal == nmax) grow(0); - - tag[nlocal] = 0; - type[nlocal] = itype; - x[nlocal][0] = coord[0]; - x[nlocal][1] = coord[1]; - x[nlocal][2] = coord[2]; - mask[nlocal] = 1; - image[nlocal] = ((imageint) IMGMAX << IMG2BITS) | - ((imageint) IMGMAX << IMGBITS) | IMGMAX; - v[nlocal][0] = 0.0; - v[nlocal][1] = 0.0; - v[nlocal][2] = 0.0; - - molecule[nlocal] = 0; - num_bond[nlocal] = 0; - num_angle[nlocal] = 0; - num_dihedral[nlocal] = 0; - num_improper[nlocal] = 0; - nspecial[nlocal][0] = nspecial[nlocal][1] = nspecial[nlocal][2] = 0; - - atom->nlocal++; -} - -/* ---------------------------------------------------------------------- - unpack one line from Atoms section of data file - initialize other atom quantities -------------------------------------------------------------------------- */ - -void AtomVecMolecular::data_atom(double *coord, imageint imagetmp, - char **values) -{ - int nlocal = atom->nlocal; - if (nlocal == nmax) grow(0); - - tag[nlocal] = utils::tnumeric(FLERR,values[0],true,lmp); - molecule[nlocal] = utils::tnumeric(FLERR,values[1],true,lmp); - type[nlocal] = utils::inumeric(FLERR,values[2],true,lmp); - if (type[nlocal] <= 0 || type[nlocal] > atom->ntypes) - error->one(FLERR,"Invalid atom type in Atoms section of data file"); - - x[nlocal][0] = coord[0]; - x[nlocal][1] = coord[1]; - x[nlocal][2] = coord[2]; - - image[nlocal] = imagetmp; - - mask[nlocal] = 1; - v[nlocal][0] = 0.0; - v[nlocal][1] = 0.0; - v[nlocal][2] = 0.0; - num_bond[nlocal] = 0; - num_angle[nlocal] = 0; - num_dihedral[nlocal] = 0; - num_improper[nlocal] = 0; - - atom->nlocal++; -} - -/* ---------------------------------------------------------------------- - unpack hybrid quantities from one line in Atoms section of data file - initialize other atom quantities for this sub-style -------------------------------------------------------------------------- */ - -int AtomVecMolecular::data_atom_hybrid(int nlocal, char **values) -{ - molecule[nlocal] = utils::tnumeric(FLERR,values[0],true,lmp); - - num_bond[nlocal] = 0; - num_angle[nlocal] = 0; - num_dihedral[nlocal] = 0; - num_improper[nlocal] = 0; - - return 1; -} - -/* ---------------------------------------------------------------------- - pack atom info for data file including 3 image flags -------------------------------------------------------------------------- */ - -void AtomVecMolecular::pack_data(double **buf) -{ - int nlocal = atom->nlocal; - for (int i = 0; i < nlocal; i++) { - buf[i][0] = ubuf(tag[i]).d; - buf[i][1] = ubuf(molecule[i]).d; - buf[i][2] = ubuf(type[i]).d; - buf[i][3] = x[i][0]; - buf[i][4] = x[i][1]; - buf[i][5] = x[i][2]; - buf[i][6] = ubuf((image[i] & IMGMASK) - IMGMAX).d; - buf[i][7] = ubuf((image[i] >> IMGBITS & IMGMASK) - IMGMAX).d; - buf[i][8] = ubuf((image[i] >> IMG2BITS) - IMGMAX).d; + if (any_improper_negative) { + for (int m = 0; m < num_improper[ilocal]; m++) + if (improper_negative[m]) + improper_type[ilocal][m] = -improper_type[ilocal][m]; } } /* ---------------------------------------------------------------------- - pack hybrid atom info for data file -------------------------------------------------------------------------- */ - -int AtomVecMolecular::pack_data_hybrid(int i, double *buf) -{ - buf[0] = ubuf(molecule[i]).d; - return 1; -} - -/* ---------------------------------------------------------------------- - write atom info to data file including 3 image flags -------------------------------------------------------------------------- */ - -void AtomVecMolecular::write_data(FILE *fp, int n, double **buf) -{ - for (int i = 0; i < n; i++) - fprintf(fp,TAGINT_FORMAT " " TAGINT_FORMAT - " %d %-1.16e %-1.16e %-1.16e %d %d %d\n", - (tagint) ubuf(buf[i][0]).i,(tagint) ubuf(buf[i][1]).i, - (int) ubuf(buf[i][2]).i, - buf[i][3],buf[i][4],buf[i][5], - (int) ubuf(buf[i][6]).i,(int) ubuf(buf[i][7]).i, - (int) ubuf(buf[i][8]).i); -} - -/* ---------------------------------------------------------------------- - write hybrid atom info to data file + initialize other atom quantities after AtomVec::unpack_restart() ------------------------------------------------------------------------- */ -int AtomVecMolecular::write_data_hybrid(FILE *fp, double *buf) +void AtomVecMolecular::unpack_restart_init(int ilocal) { - fprintf(fp," " TAGINT_FORMAT,(tagint) ubuf(buf[0]).i); - return 1; + nspecial[ilocal][0] = 0; + nspecial[ilocal][1] = 0; + nspecial[ilocal][2] = 0; } /* ---------------------------------------------------------------------- - return # of bytes of allocated memory + modify what AtomVec::data_atom() just unpacked + or initialize other atom quantities ------------------------------------------------------------------------- */ -bigint AtomVecMolecular::memory_usage() +void AtomVecMolecular::data_atom_post(int ilocal) { - bigint bytes = 0; - - if (atom->memcheck("tag")) bytes += memory->usage(tag,nmax); - if (atom->memcheck("type")) bytes += memory->usage(type,nmax); - if (atom->memcheck("mask")) bytes += memory->usage(mask,nmax); - if (atom->memcheck("image")) bytes += memory->usage(image,nmax); - if (atom->memcheck("x")) bytes += memory->usage(x,nmax,3); - if (atom->memcheck("v")) bytes += memory->usage(v,nmax,3); - if (atom->memcheck("f")) bytes += memory->usage(f,nmax*comm->nthreads,3); - - if (atom->memcheck("molecule")) bytes += memory->usage(molecule,nmax); - if (atom->memcheck("nspecial")) bytes += memory->usage(nspecial,nmax,3); - if (atom->memcheck("special")) - bytes += memory->usage(special,nmax,atom->maxspecial); - - if (atom->memcheck("num_bond")) bytes += memory->usage(num_bond,nmax); - if (atom->memcheck("bond_type")) - bytes += memory->usage(bond_type,nmax,atom->bond_per_atom); - if (atom->memcheck("bond_atom")) - bytes += memory->usage(bond_atom,nmax,atom->bond_per_atom); - - if (atom->memcheck("num_angle")) bytes += memory->usage(num_angle,nmax); - if (atom->memcheck("angle_type")) - bytes += memory->usage(angle_type,nmax,atom->angle_per_atom); - if (atom->memcheck("angle_atom1")) - bytes += memory->usage(angle_atom1,nmax,atom->angle_per_atom); - if (atom->memcheck("angle_atom2")) - bytes += memory->usage(angle_atom2,nmax,atom->angle_per_atom); - if (atom->memcheck("angle_atom3")) - bytes += memory->usage(angle_atom3,nmax,atom->angle_per_atom); - - if (atom->memcheck("num_dihedral")) bytes += memory->usage(num_dihedral,nmax); - if (atom->memcheck("dihedral_type")) - bytes += memory->usage(dihedral_type,nmax,atom->dihedral_per_atom); - if (atom->memcheck("dihedral_atom1")) - bytes += memory->usage(dihedral_atom1,nmax,atom->dihedral_per_atom); - if (atom->memcheck("dihedral_atom2")) - bytes += memory->usage(dihedral_atom2,nmax,atom->dihedral_per_atom); - if (atom->memcheck("dihedral_atom3")) - bytes += memory->usage(dihedral_atom3,nmax,atom->dihedral_per_atom); - if (atom->memcheck("dihedral_atom4")) - bytes += memory->usage(dihedral_atom4,nmax,atom->dihedral_per_atom); - - if (atom->memcheck("num_improper")) bytes += memory->usage(num_improper,nmax); - if (atom->memcheck("improper_type")) - bytes += memory->usage(improper_type,nmax,atom->improper_per_atom); - if (atom->memcheck("improper_atom1")) - bytes += memory->usage(improper_atom1,nmax,atom->improper_per_atom); - if (atom->memcheck("improper_atom2")) - bytes += memory->usage(improper_atom2,nmax,atom->improper_per_atom); - if (atom->memcheck("improper_atom3")) - bytes += memory->usage(improper_atom3,nmax,atom->improper_per_atom); - if (atom->memcheck("improper_atom4")) - bytes += memory->usage(improper_atom4,nmax,atom->improper_per_atom); - - return bytes; + num_bond[ilocal] = 0; + num_angle[ilocal] = 0; + num_dihedral[ilocal] = 0; + num_improper[ilocal] = 0; + nspecial[ilocal][0] = 0; + nspecial[ilocal][1] = 0; + nspecial[ilocal][2] = 0; } diff --git a/src/MOLECULE/atom_vec_molecular.h b/src/MOLECULE/atom_vec_molecular.h index 19104c398763200757fd4528db5b5099104876d0..bcfa13d9d36df6e7d96f15a4276dbf02500fada3 100644 --- a/src/MOLECULE/atom_vec_molecular.h +++ b/src/MOLECULE/atom_vec_molecular.h @@ -27,55 +27,23 @@ namespace LAMMPS_NS { class AtomVecMolecular : public AtomVec { public: AtomVecMolecular(class LAMMPS *); - void grow(int); - void grow_reset(); - void copy(int, int, int); - int pack_comm(int, int *, double *, int, int *); - int pack_comm_vel(int, int *, double *, int, int *); - void unpack_comm(int, int, double *); - void unpack_comm_vel(int, int, double *); - int pack_reverse(int, int, double *); - void unpack_reverse(int, int *, double *); - int pack_border(int, int *, double *, int, int *); - int pack_border_vel(int, int *, double *, int, int *); - int pack_border_hybrid(int, int *, double *); - void unpack_border(int, int, double *); - void unpack_border_vel(int, int, double *); - int unpack_border_hybrid(int, int, double *); - int pack_exchange(int, double *); - int unpack_exchange(double *); - int size_restart(); - int pack_restart(int, double *); - int unpack_restart(double *); - void create_atom(int, double *); - void data_atom(double *, imageint, char **); - int data_atom_hybrid(int, char **); - void pack_data(double **); - int pack_data_hybrid(int, double *); - void write_data(FILE *, int, double **); - int write_data_hybrid(FILE *, double *); - bigint memory_usage(); + ~AtomVecMolecular(); + + void grow_pointers(); + void pack_restart_pre(int); + void pack_restart_post(int); + void unpack_restart_init(int); + void data_atom_post(int); private: - tagint *tag; - int *type,*mask; - imageint *image; - double **x,**v,**f; - tagint *molecule; + int *num_bond,*num_angle,*num_dihedral,*num_improper; + int **bond_type,**angle_type,**dihedral_type,**improper_type; int **nspecial; - tagint **special; - int *num_bond; - int **bond_type; - tagint **bond_atom; - int *num_angle; - int **angle_type; - tagint **angle_atom1,**angle_atom2,**angle_atom3; - int *num_dihedral; - int **dihedral_type; - tagint **dihedral_atom1,**dihedral_atom2,**dihedral_atom3,**dihedral_atom4; - int *num_improper; - int **improper_type; - tagint **improper_atom1,**improper_atom2,**improper_atom3,**improper_atom4; + + int any_bond_negative,any_angle_negative, + any_dihedral_negative,any_improper_negative; + int bond_per_atom,angle_per_atom,dihedral_per_atom,improper_per_atom; + int *bond_negative,*angle_negative,*dihedral_negative,*improper_negative; }; } @@ -85,13 +53,4 @@ class AtomVecMolecular : public AtomVec { /* ERROR/WARNING messages: -E: Per-processor system is too big - -The number of owned atoms plus ghost atoms on a single -processor must fit in 32-bit integer. - -E: Invalid atom type in Atoms section of data file - -Atom types must range from 1 to specified # of types. - */ diff --git a/src/MOLECULE/atom_vec_template.cpp b/src/MOLECULE/atom_vec_template.cpp index c9ccfc6d2b0fa93a3b48fabbb710149c53f3b376..97d4c865baca9947ae8332a3491e1d8b4a99d742 100644 --- a/src/MOLECULE/atom_vec_template.cpp +++ b/src/MOLECULE/atom_vec_template.cpp @@ -31,16 +31,27 @@ AtomVecTemplate::AtomVecTemplate(LAMMPS *lmp) : AtomVec(lmp) molecular = 2; mass_type = 1; - comm_x_only = comm_f_only = 1; - size_forward = 3; - size_reverse = 3; - size_border = 9; - size_velocity = 3; - size_data_atom = 8; - size_data_vel = 4; - xcol_data = 6; - atom->molecule_flag = 1; + + // strings with peratom variables to include in each AtomVec method + // strings cannot contain fields in corresponding AtomVec default strings + // order of fields in the string does not matter + // except fields_data_atom and fields_data_vel which must match data file + + fields_grow = (char *) "molecule molindex molatom"; + fields_copy = (char *) "molecule molindex molatom"; + fields_comm = (char *) ""; + fields_comm_vel = (char *) ""; + fields_reverse = (char *) ""; + fields_border = (char *) "molecule molindex molatom"; + fields_border_vel = (char *) "molecule molindex molatom"; + fields_exchange = (char *) "molecule molindex molatom"; + fields_restart = (char *) "molecule molindex molatom"; + fields_create = (char *) "molecule molindex molatom"; + fields_data_atom = (char *) "id molecule molindex molatom type x"; + fields_data_vel = (char *) ""; + + setup_fields(); } /* ---------------------------------------------------------------------- @@ -86,785 +97,38 @@ void AtomVecTemplate::process_args(int narg, char **arg) } /* ---------------------------------------------------------------------- - grow atom arrays - n = 0 grows arrays by a chunk - n > 0 allocates arrays to size n -------------------------------------------------------------------------- */ - -void AtomVecTemplate::grow(int n) -{ - if (n == 0) grow_nmax(); - else nmax = n; - atom->nmax = nmax; - if (nmax < 0 || nmax > MAXSMALLINT) - error->one(FLERR,"Per-processor system is too big"); - - tag = memory->grow(atom->tag,nmax,"atom:tag"); - type = memory->grow(atom->type,nmax,"atom:type"); - mask = memory->grow(atom->mask,nmax,"atom:mask"); - image = memory->grow(atom->image,nmax,"atom:image"); - x = memory->grow(atom->x,nmax,3,"atom:x"); - v = memory->grow(atom->v,nmax,3,"atom:v"); - f = memory->grow(atom->f,nmax*comm->nthreads,3,"atom:f"); - - molecule = memory->grow(atom->molecule,nmax,"atom:molecule"); - molindex = memory->grow(atom->molindex,nmax,"atom:molindex"); - molatom = memory->grow(atom->molatom,nmax,"atom:molatom"); - - if (atom->nextra_grow) - for (int iextra = 0; iextra < atom->nextra_grow; iextra++) - modify->fix[atom->extra_grow[iextra]]->grow_arrays(nmax); -} - -/* ---------------------------------------------------------------------- - reset local array ptrs + set local copies of all grow ptrs used by this class, except defaults + needed in replicate when 2 atom classes exist and it calls pack_restart() ------------------------------------------------------------------------- */ -void AtomVecTemplate::grow_reset() +void AtomVecTemplate::grow_pointers() { - tag = atom->tag; type = atom->type; - mask = atom->mask; image = atom->image; - x = atom->x; v = atom->v; f = atom->f; - molecule = atom->molecule; - molindex = atom->molindex; molatom = atom->molatom; + molindex = atom->molindex; + molatom = atom->molatom; } /* ---------------------------------------------------------------------- - copy atom I info to atom J + initialize non-zero atom quantities ------------------------------------------------------------------------- */ -void AtomVecTemplate::copy(int i, int j, int delflag) -{ - tag[j] = tag[i]; - type[j] = type[i]; - mask[j] = mask[i]; - image[j] = image[i]; - x[j][0] = x[i][0]; - x[j][1] = x[i][1]; - x[j][2] = x[i][2]; - v[j][0] = v[i][0]; - v[j][1] = v[i][1]; - v[j][2] = v[i][2]; - - molecule[j] = molecule[i]; - molindex[j] = molindex[i]; - molatom[j] = molatom[i]; - - if (atom->nextra_grow) - for (int iextra = 0; iextra < atom->nextra_grow; iextra++) - modify->fix[atom->extra_grow[iextra]]->copy_arrays(i,j,delflag); -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecTemplate::pack_comm(int n, int *list, double *buf, - int pbc_flag, int *pbc) -{ - int i,j,m; - double dx,dy,dz; - - m = 0; - if (pbc_flag == 0) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = x[j][0]; - buf[m++] = x[j][1]; - buf[m++] = x[j][2]; - } - } else { - if (domain->triclinic == 0) { - dx = pbc[0]*domain->xprd; - dy = pbc[1]*domain->yprd; - dz = pbc[2]*domain->zprd; - } else { - dx = pbc[0]*domain->xprd + pbc[5]*domain->xy + pbc[4]*domain->xz; - dy = pbc[1]*domain->yprd + pbc[3]*domain->yz; - dz = pbc[2]*domain->zprd; - } - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = x[j][0] + dx; - buf[m++] = x[j][1] + dy; - buf[m++] = x[j][2] + dz; - } - } - return m; -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecTemplate::pack_comm_vel(int n, int *list, double *buf, - int pbc_flag, int *pbc) +void AtomVecTemplate::create_atom_post(int ilocal) { - int i,j,m; - double dx,dy,dz,dvx,dvy,dvz; - - m = 0; - if (pbc_flag == 0) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = x[j][0]; - buf[m++] = x[j][1]; - buf[m++] = x[j][2]; - buf[m++] = v[j][0]; - buf[m++] = v[j][1]; - buf[m++] = v[j][2]; - } - } else { - if (domain->triclinic == 0) { - dx = pbc[0]*domain->xprd; - dy = pbc[1]*domain->yprd; - dz = pbc[2]*domain->zprd; - } else { - dx = pbc[0]*domain->xprd + pbc[5]*domain->xy + pbc[4]*domain->xz; - dy = pbc[1]*domain->yprd + pbc[3]*domain->yz; - dz = pbc[2]*domain->zprd; - } - if (!deform_vremap) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = x[j][0] + dx; - buf[m++] = x[j][1] + dy; - buf[m++] = x[j][2] + dz; - buf[m++] = v[j][0]; - buf[m++] = v[j][1]; - buf[m++] = v[j][2]; - } - } else { - dvx = pbc[0]*h_rate[0] + pbc[5]*h_rate[5] + pbc[4]*h_rate[4]; - dvy = pbc[1]*h_rate[1] + pbc[3]*h_rate[3]; - dvz = pbc[2]*h_rate[2]; - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = x[j][0] + dx; - buf[m++] = x[j][1] + dy; - buf[m++] = x[j][2] + dz; - if (mask[i] & deform_groupbit) { - buf[m++] = v[j][0] + dvx; - buf[m++] = v[j][1] + dvy; - buf[m++] = v[j][2] + dvz; - } else { - buf[m++] = v[j][0]; - buf[m++] = v[j][1]; - buf[m++] = v[j][2]; - } - } - } - } - return m; -} - -/* ---------------------------------------------------------------------- */ - -void AtomVecTemplate::unpack_comm(int n, int first, double *buf) -{ - int i,m,last; - - m = 0; - last = first + n; - for (i = first; i < last; i++) { - x[i][0] = buf[m++]; - x[i][1] = buf[m++]; - x[i][2] = buf[m++]; - } -} - -/* ---------------------------------------------------------------------- */ - -void AtomVecTemplate::unpack_comm_vel(int n, int first, double *buf) -{ - int i,m,last; - - m = 0; - last = first + n; - for (i = first; i < last; i++) { - x[i][0] = buf[m++]; - x[i][1] = buf[m++]; - x[i][2] = buf[m++]; - v[i][0] = buf[m++]; - v[i][1] = buf[m++]; - v[i][2] = buf[m++]; - } -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecTemplate::pack_reverse(int n, int first, double *buf) -{ - int i,m,last; - - m = 0; - last = first + n; - for (i = first; i < last; i++) { - buf[m++] = f[i][0]; - buf[m++] = f[i][1]; - buf[m++] = f[i][2]; - } - return m; -} - -/* ---------------------------------------------------------------------- */ - -void AtomVecTemplate::unpack_reverse(int n, int *list, double *buf) -{ - int i,j,m; - - m = 0; - for (i = 0; i < n; i++) { - j = list[i]; - f[j][0] += buf[m++]; - f[j][1] += buf[m++]; - f[j][2] += buf[m++]; - } -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecTemplate::pack_border(int n, int *list, double *buf, - int pbc_flag, int *pbc) -{ - int i,j,m; - double dx,dy,dz; - - m = 0; - if (pbc_flag == 0) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = x[j][0]; - buf[m++] = x[j][1]; - buf[m++] = x[j][2]; - buf[m++] = ubuf(tag[j]).d; - buf[m++] = ubuf(type[j]).d; - buf[m++] = ubuf(mask[j]).d; - buf[m++] = ubuf(molecule[j]).d; - buf[m++] = ubuf(molindex[j]).d; - buf[m++] = ubuf(molatom[j]).d; - } - } else { - if (domain->triclinic == 0) { - dx = pbc[0]*domain->xprd; - dy = pbc[1]*domain->yprd; - dz = pbc[2]*domain->zprd; - } else { - dx = pbc[0]; - dy = pbc[1]; - dz = pbc[2]; - } - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = x[j][0] + dx; - buf[m++] = x[j][1] + dy; - buf[m++] = x[j][2] + dz; - buf[m++] = ubuf(tag[j]).d; - buf[m++] = ubuf(type[j]).d; - buf[m++] = ubuf(mask[j]).d; - buf[m++] = ubuf(molecule[j]).d; - buf[m++] = ubuf(molindex[j]).d; - buf[m++] = ubuf(molatom[j]).d; - } - } - - if (atom->nextra_border) - for (int iextra = 0; iextra < atom->nextra_border; iextra++) - m += modify->fix[atom->extra_border[iextra]]->pack_border(n,list,&buf[m]); - - return m; -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecTemplate::pack_border_vel(int n, int *list, double *buf, - int pbc_flag, int *pbc) -{ - int i,j,m; - double dx,dy,dz,dvx,dvy,dvz; - - m = 0; - if (pbc_flag == 0) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = x[j][0]; - buf[m++] = x[j][1]; - buf[m++] = x[j][2]; - buf[m++] = ubuf(tag[j]).d; - buf[m++] = ubuf(type[j]).d; - buf[m++] = ubuf(mask[j]).d; - buf[m++] = ubuf(molecule[j]).d; - buf[m++] = ubuf(molindex[j]).d; - buf[m++] = ubuf(molatom[j]).d; - buf[m++] = v[j][0]; - buf[m++] = v[j][1]; - buf[m++] = v[j][2]; - } - } else { - if (domain->triclinic == 0) { - dx = pbc[0]*domain->xprd; - dy = pbc[1]*domain->yprd; - dz = pbc[2]*domain->zprd; - } else { - dx = pbc[0]; - dy = pbc[1]; - dz = pbc[2]; - } - if (!deform_vremap) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = x[j][0] + dx; - buf[m++] = x[j][1] + dy; - buf[m++] = x[j][2] + dz; - buf[m++] = ubuf(tag[j]).d; - buf[m++] = ubuf(type[j]).d; - buf[m++] = ubuf(mask[j]).d; - buf[m++] = ubuf(molecule[j]).d; - buf[m++] = ubuf(molindex[j]).d; - buf[m++] = ubuf(molatom[j]).d; - buf[m++] = v[j][0]; - buf[m++] = v[j][1]; - buf[m++] = v[j][2]; - } - } else { - dvx = pbc[0]*h_rate[0] + pbc[5]*h_rate[5] + pbc[4]*h_rate[4]; - dvy = pbc[1]*h_rate[1] + pbc[3]*h_rate[3]; - dvz = pbc[2]*h_rate[2]; - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = x[j][0] + dx; - buf[m++] = x[j][1] + dy; - buf[m++] = x[j][2] + dz; - buf[m++] = ubuf(tag[j]).d; - buf[m++] = ubuf(type[j]).d; - buf[m++] = ubuf(mask[j]).d; - buf[m++] = ubuf(molecule[j]).d; - buf[m++] = ubuf(molindex[j]).d; - buf[m++] = ubuf(molatom[j]).d; - if (mask[i] & deform_groupbit) { - buf[m++] = v[j][0] + dvx; - buf[m++] = v[j][1] + dvy; - buf[m++] = v[j][2] + dvz; - } else { - buf[m++] = v[j][0]; - buf[m++] = v[j][1]; - buf[m++] = v[j][2]; - } - } - } - } - - if (atom->nextra_border) - for (int iextra = 0; iextra < atom->nextra_border; iextra++) - m += modify->fix[atom->extra_border[iextra]]->pack_border(n,list,&buf[m]); - - return m; -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecTemplate::pack_border_hybrid(int n, int *list, double *buf) -{ - int i,j,m; - - m = 0; - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = ubuf(molecule[j]).d; - buf[m++] = ubuf(molindex[j]).d; - buf[m++] = ubuf(molatom[j]).d; - } - return m; -} - -/* ---------------------------------------------------------------------- */ - -void AtomVecTemplate::unpack_border(int n, int first, double *buf) -{ - int i,m,last; - - m = 0; - last = first + n; - for (i = first; i < last; i++) { - if (i == nmax) grow(0); - x[i][0] = buf[m++]; - x[i][1] = buf[m++]; - x[i][2] = buf[m++]; - tag[i] = (tagint) ubuf(buf[m++]).i; - type[i] = (int) ubuf(buf[m++]).i; - mask[i] = (int) ubuf(buf[m++]).i; - molecule[i] = (tagint) ubuf(buf[m++]).i; - molindex[i] = (int) ubuf(buf[m++]).i; - molatom[i] = (int) ubuf(buf[m++]).i; - } - - if (atom->nextra_border) - for (int iextra = 0; iextra < atom->nextra_border; iextra++) - m += modify->fix[atom->extra_border[iextra]]-> - unpack_border(n,first,&buf[m]); -} - -/* ---------------------------------------------------------------------- */ - -void AtomVecTemplate::unpack_border_vel(int n, int first, double *buf) -{ - int i,m,last; - - m = 0; - last = first + n; - for (i = first; i < last; i++) { - if (i == nmax) grow(0); - x[i][0] = buf[m++]; - x[i][1] = buf[m++]; - x[i][2] = buf[m++]; - tag[i] = (tagint) ubuf(buf[m++]).i; - type[i] = (int) ubuf(buf[m++]).i; - mask[i] = (int) ubuf(buf[m++]).i; - molecule[i] = (tagint) ubuf(buf[m++]).i; - molindex[i] = (int) ubuf(buf[m++]).i; - molatom[i] = (int) ubuf(buf[m++]).i; - v[i][0] = buf[m++]; - v[i][1] = buf[m++]; - v[i][2] = buf[m++]; - } - - if (atom->nextra_border) - for (int iextra = 0; iextra < atom->nextra_border; iextra++) - m += modify->fix[atom->extra_border[iextra]]-> - unpack_border(n,first,&buf[m]); -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecTemplate::unpack_border_hybrid(int n, int first, double *buf) -{ - int i,m,last; - - m = 0; - last = first + n; - for (i = first; i < last; i++) { - molecule[i] = (tagint) ubuf(buf[m++]).i; - molindex[i] = (int) ubuf(buf[m++]).i; - molatom[i] = (int) ubuf(buf[m++]).i; - } - return m; + molindex[ilocal] = -1; + molatom[ilocal] = -1; } /* ---------------------------------------------------------------------- - pack data for atom I for sending to another proc - xyz must be 1st 3 values, so comm::exchange() can test on them + modify what AtomVec::data_atom() just unpacked + or initialize other atom quantities ------------------------------------------------------------------------- */ -int AtomVecTemplate::pack_exchange(int i, double *buf) +void AtomVecTemplate::data_atom_post(int ilocal) { - int m = 1; - buf[m++] = x[i][0]; - buf[m++] = x[i][1]; - buf[m++] = x[i][2]; - buf[m++] = v[i][0]; - buf[m++] = v[i][1]; - buf[m++] = v[i][2]; - buf[m++] = ubuf(tag[i]).d; - buf[m++] = ubuf(type[i]).d; - buf[m++] = ubuf(mask[i]).d; - buf[m++] = ubuf(image[i]).d; + int molindex_one = molindex[ilocal]; + int molatom_one = molatom[ilocal]; - buf[m++] = ubuf(molecule[i]).d; - buf[m++] = ubuf(molindex[i]).d; - buf[m++] = ubuf(molatom[i]).d; - - if (atom->nextra_grow) - for (int iextra = 0; iextra < atom->nextra_grow; iextra++) - m += modify->fix[atom->extra_grow[iextra]]->pack_exchange(i,&buf[m]); - - buf[0] = m; - return m; -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecTemplate::unpack_exchange(double *buf) -{ - int nlocal = atom->nlocal; - if (nlocal == nmax) grow(0); - - int m = 1; - x[nlocal][0] = buf[m++]; - x[nlocal][1] = buf[m++]; - x[nlocal][2] = buf[m++]; - v[nlocal][0] = buf[m++]; - v[nlocal][1] = buf[m++]; - v[nlocal][2] = buf[m++]; - tag[nlocal] = (tagint) ubuf(buf[m++]).i; - type[nlocal] = (int) ubuf(buf[m++]).i; - mask[nlocal] = (int) ubuf(buf[m++]).i; - image[nlocal] = (imageint) ubuf(buf[m++]).i; - - molecule[nlocal] = (tagint) ubuf(buf[m++]).i; - molindex[nlocal] = (int) ubuf(buf[m++]).i; - molatom[nlocal] = (int) ubuf(buf[m++]).i; - - if (atom->nextra_grow) - for (int iextra = 0; iextra < atom->nextra_grow; iextra++) - m += modify->fix[atom->extra_grow[iextra]]-> - unpack_exchange(nlocal,&buf[m]); - - atom->nlocal++; - return m; -} - -/* ---------------------------------------------------------------------- - size of restart data for all atoms owned by this proc - include extra data stored by fixes -------------------------------------------------------------------------- */ - -int AtomVecTemplate::size_restart() -{ - int i; - - int nlocal = atom->nlocal; - int n = 14 * nlocal; - - if (atom->nextra_restart) - for (int iextra = 0; iextra < atom->nextra_restart; iextra++) - for (i = 0; i < nlocal; i++) - n += modify->fix[atom->extra_restart[iextra]]->size_restart(i); - - return n; -} - -/* ---------------------------------------------------------------------- - pack atom I's data for restart file including extra quantities - xyz must be 1st 3 values, so that read_restart can test on them - molecular types may be negative, but write as positive -------------------------------------------------------------------------- */ - -int AtomVecTemplate::pack_restart(int i, double *buf) -{ - int m = 1; - buf[m++] = x[i][0]; - buf[m++] = x[i][1]; - buf[m++] = x[i][2]; - buf[m++] = ubuf(tag[i]).d; - buf[m++] = ubuf(type[i]).d; - buf[m++] = ubuf(mask[i]).d; - buf[m++] = ubuf(image[i]).d; - buf[m++] = v[i][0]; - buf[m++] = v[i][1]; - buf[m++] = v[i][2]; - - buf[m++] = ubuf(molecule[i]).d; - buf[m++] = ubuf(molindex[i]).d; - buf[m++] = ubuf(molatom[i]).d; - - if (atom->nextra_restart) - for (int iextra = 0; iextra < atom->nextra_restart; iextra++) - m += modify->fix[atom->extra_restart[iextra]]->pack_restart(i,&buf[m]); - - buf[0] = m; - return m; -} - -/* ---------------------------------------------------------------------- - unpack data for one atom from restart file including extra quantities -------------------------------------------------------------------------- */ - -int AtomVecTemplate::unpack_restart(double *buf) -{ - int nlocal = atom->nlocal; - if (nlocal == nmax) { - grow(0); - if (atom->nextra_store) - memory->grow(atom->extra,nmax,atom->nextra_store,"atom:extra"); - } - - int m = 1; - x[nlocal][0] = buf[m++]; - x[nlocal][1] = buf[m++]; - x[nlocal][2] = buf[m++]; - tag[nlocal] = (tagint) ubuf(buf[m++]).i; - type[nlocal] = (int) ubuf(buf[m++]).i; - mask[nlocal] = (int) ubuf(buf[m++]).i; - image[nlocal] = (imageint) ubuf(buf[m++]).i; - v[nlocal][0] = buf[m++]; - v[nlocal][1] = buf[m++]; - v[nlocal][2] = buf[m++]; - - molecule[nlocal] = (tagint) ubuf(buf[m++]).i; - molindex[nlocal] = (int) ubuf(buf[m++]).i; - molatom[nlocal] = (int) ubuf(buf[m++]).i; - - double **extra = atom->extra; - if (atom->nextra_store) { - int size = static_cast (buf[0]) - m; - for (int i = 0; i < size; i++) extra[nlocal][i] = buf[m++]; - } - - atom->nlocal++; - return m; -} - -/* ---------------------------------------------------------------------- - create one atom of itype at coord - set other values to defaults -------------------------------------------------------------------------- */ - -void AtomVecTemplate::create_atom(int itype, double *coord) -{ - int nlocal = atom->nlocal; - if (nlocal == nmax) grow(0); - - tag[nlocal] = 0; - type[nlocal] = itype; - x[nlocal][0] = coord[0]; - x[nlocal][1] = coord[1]; - x[nlocal][2] = coord[2]; - mask[nlocal] = 1; - image[nlocal] = ((imageint) IMGMAX << IMG2BITS) | - ((imageint) IMGMAX << IMGBITS) | IMGMAX; - v[nlocal][0] = 0.0; - v[nlocal][1] = 0.0; - v[nlocal][2] = 0.0; - - molecule[nlocal] = 0; - molindex[nlocal] = -1; - molatom[nlocal] = -1; - - atom->nlocal++; -} - -/* ---------------------------------------------------------------------- - unpack one line from Atoms section of data file - initialize other atom quantities -------------------------------------------------------------------------- */ - -void AtomVecTemplate::data_atom(double *coord, imageint imagetmp, char **values) -{ - int nlocal = atom->nlocal; - if (nlocal == nmax) grow(0); - - tag[nlocal] = utils::tnumeric(FLERR,values[0],true,lmp); - if (tag[nlocal] <= 0) - error->one(FLERR,"Invalid atom ID in Atoms section of data file"); - - molecule[nlocal] = utils::tnumeric(FLERR,values[1],true,lmp); - molindex[nlocal] = utils::inumeric(FLERR,values[2],true,lmp) - 1; - molatom[nlocal] = utils::inumeric(FLERR,values[3],true,lmp) - 1; - - if (molindex[nlocal] < 0 || molindex[nlocal] >= nset) + if (molindex_one < 0 || molindex_one >= nset) error->one(FLERR,"Invalid template index in Atoms section of data file"); - if (molatom[nlocal] < 0 || - molatom[nlocal] >= onemols[molindex[nlocal]]->natoms) + if (molatom_one < 0 || molatom_one >= onemols[molindex_one]->natoms) error->one(FLERR,"Invalid template atom in Atoms section of data file"); - - type[nlocal] = utils::inumeric(FLERR,values[4],true,lmp); - if (type[nlocal] <= 0 || type[nlocal] > atom->ntypes) - error->one(FLERR,"Invalid atom type in Atoms section of data file"); - - x[nlocal][0] = coord[0]; - x[nlocal][1] = coord[1]; - x[nlocal][2] = coord[2]; - - image[nlocal] = imagetmp; - - mask[nlocal] = 1; - v[nlocal][0] = 0.0; - v[nlocal][1] = 0.0; - v[nlocal][2] = 0.0; - - atom->nlocal++; -} - -/* ---------------------------------------------------------------------- - unpack hybrid quantities from one line in Atoms section of data file - initialize other atom quantities for this sub-style -------------------------------------------------------------------------- */ - -int AtomVecTemplate::data_atom_hybrid(int nlocal, char **values) -{ - molecule[nlocal] = utils::tnumeric(FLERR,values[0],true,lmp); - molindex[nlocal] = utils::inumeric(FLERR,values[1],true,lmp) - 1; - molatom[nlocal] = utils::inumeric(FLERR,values[2],true,lmp) - 1; - return 3; -} - -/* ---------------------------------------------------------------------- - pack atom info for data file including 3 image flags -------------------------------------------------------------------------- */ - -void AtomVecTemplate::pack_data(double **buf) -{ - int nlocal = atom->nlocal; - for (int i = 0; i < nlocal; i++) { - buf[i][0] = ubuf(tag[i]).d; - buf[i][1] = ubuf(molecule[i]).d; - buf[i][2] = ubuf(molindex[i]+1).d; - buf[i][3] = ubuf(molatom[i]+1).d; - buf[i][4] = ubuf(type[i]).d; - buf[i][5] = x[i][0]; - buf[i][6] = x[i][1]; - buf[i][7] = x[i][2]; - buf[i][8] = ubuf((image[i] & IMGMASK) - IMGMAX).d; - buf[i][9] = ubuf((image[i] >> IMGBITS & IMGMASK) - IMGMAX).d; - buf[i][10] = ubuf((image[i] >> IMG2BITS) - IMGMAX).d; - } -} - -/* ---------------------------------------------------------------------- - pack hybrid atom info for data file -------------------------------------------------------------------------- */ - -int AtomVecTemplate::pack_data_hybrid(int i, double *buf) -{ - buf[0] = ubuf(molecule[i]).d; - buf[1] = ubuf(molindex[i]+1).d; - buf[2] = ubuf(molatom[i]+1).d; - return 3; -} - -/* ---------------------------------------------------------------------- - write atom info to data file including 3 image flags -------------------------------------------------------------------------- */ - -void AtomVecTemplate::write_data(FILE *fp, int n, double **buf) -{ - for (int i = 0; i < n; i++) - fprintf(fp,TAGINT_FORMAT " " TAGINT_FORMAT - " %d %d %d %-1.16e %-1.16e %-1.16e %d %d %d\n", - (tagint) ubuf(buf[i][0]).i,(tagint) ubuf(buf[i][1]).i, - (int) ubuf(buf[i][2]).i,(int) ubuf(buf[i][3]).i, - (int) ubuf(buf[i][4]).i, - buf[i][5],buf[i][6],buf[i][7], - (int) ubuf(buf[i][8]).i,(int) ubuf(buf[i][9]).i, - (int) ubuf(buf[i][10]).i); -} - -/* ---------------------------------------------------------------------- - write hybrid atom info to data file -------------------------------------------------------------------------- */ - -int AtomVecTemplate::write_data_hybrid(FILE *fp, double *buf) -{ - fprintf(fp," " TAGINT_FORMAT " %d %d", - (tagint) ubuf(buf[0]).i,(int) ubuf(buf[1]).i,(int) ubuf(buf[2]).i); - return 3; -} - -/* ---------------------------------------------------------------------- - return # of bytes of allocated memory -------------------------------------------------------------------------- */ - -bigint AtomVecTemplate::memory_usage() -{ - bigint bytes = 0; - - if (atom->memcheck("tag")) bytes += memory->usage(tag,nmax); - if (atom->memcheck("type")) bytes += memory->usage(type,nmax); - if (atom->memcheck("mask")) bytes += memory->usage(mask,nmax); - if (atom->memcheck("image")) bytes += memory->usage(image,nmax); - if (atom->memcheck("x")) bytes += memory->usage(x,nmax,3); - if (atom->memcheck("v")) bytes += memory->usage(v,nmax,3); - if (atom->memcheck("f")) bytes += memory->usage(f,nmax*comm->nthreads,3); - - if (atom->memcheck("molecule")) bytes += memory->usage(molecule,nmax); - if (atom->memcheck("molindex")) bytes += memory->usage(molindex,nmax); - if (atom->memcheck("molatom")) bytes += memory->usage(molatom,nmax); - - return bytes; } diff --git a/src/MOLECULE/atom_vec_template.h b/src/MOLECULE/atom_vec_template.h index eee7fa9723ef5d9eb56430563edac15158320db4..3bf2ec62736a5a4d306257c897b62f2175b96a7d 100644 --- a/src/MOLECULE/atom_vec_template.h +++ b/src/MOLECULE/atom_vec_template.h @@ -27,43 +27,13 @@ namespace LAMMPS_NS { class AtomVecTemplate : public AtomVec { public: AtomVecTemplate(class LAMMPS *); - virtual ~AtomVecTemplate() {} + + void grow_pointers(); void process_args(int, char **); - void grow(int); - void grow_reset(); - void copy(int, int, int); - virtual int pack_comm(int, int *, double *, int, int *); - virtual int pack_comm_vel(int, int *, double *, int, int *); - virtual void unpack_comm(int, int, double *); - virtual void unpack_comm_vel(int, int, double *); - int pack_reverse(int, int, double *); - void unpack_reverse(int, int *, double *); - virtual int pack_border(int, int *, double *, int, int *); - virtual int pack_border_vel(int, int *, double *, int, int *); - int pack_border_hybrid(int, int *, double *); - virtual void unpack_border(int, int, double *); - virtual void unpack_border_vel(int, int, double *); - int unpack_border_hybrid(int, int, double *); - virtual int pack_exchange(int, double *); - virtual int unpack_exchange(double *); - int size_restart(); - int pack_restart(int, double *); - int unpack_restart(double *); - void create_atom(int, double *); - void data_atom(double *, tagint, char **); - int data_atom_hybrid(int, char **); - void pack_data(double **); - int pack_data_hybrid(int, double *); - void write_data(FILE *, int, double **); - int write_data_hybrid(FILE *, double *); - bigint memory_usage(); - - protected: - tagint *tag; - int *type,*mask; - tagint *image; - double **x,**v,**f; - tagint *molecule; + void create_atom_post(int); + void data_atom_post(int); + + private: int *molindex,*molatom; }; @@ -88,15 +58,6 @@ E: Atom style template molecule must have atom types The defined molecule(s) does not specify atom types. -E: Per-processor system is too big - -The number of owned atoms plus ghost atoms on a single -processor must fit in 32-bit integer. - -E: Invalid atom ID in Atoms section of data file - -Atom IDs must be positive integers. - E: Invalid template index in Atoms section of data file The template indices must be between 1 to N, where N is the number of @@ -107,8 +68,4 @@ E: Invalid template atom in Atoms section of data file The atom indices must be between 1 to N, where N is the number of atoms in the template molecule the atom belongs to. -E: Invalid atom type in Atoms section of data file - -Atom types must range from 1 to specified # of types. - */ diff --git a/src/MOLECULE/bond_fene.cpp b/src/MOLECULE/bond_fene.cpp index b8e197a3444b33ab79689c686c76d624084d3f68..91c08774786b38cc8166b12f2db1834accbda8e3 100644 --- a/src/MOLECULE/bond_fene.cpp +++ b/src/MOLECULE/bond_fene.cpp @@ -14,6 +14,7 @@ #include "bond_fene.h" #include #include +#include #include "atom.h" #include "neighbor.h" #include "comm.h" @@ -272,3 +273,13 @@ double BondFENE::single(int type, double rsq, int /*i*/, int /*j*/, return eng; } + +/* ---------------------------------------------------------------------- */ + +void *BondFENE::extract(const char *str, int &dim) +{ + dim = 1; + if (strcmp(str,"kappa")==0) return (void*) k; + if (strcmp(str,"r0")==0) return (void*) r0; + return NULL; +} diff --git a/src/MOLECULE/bond_fene.h b/src/MOLECULE/bond_fene.h index 1963e3ca2286a642e63001330dfe895d7aef066e..78ce1698708d2c0f68d38bbedeefe48243296fcb 100644 --- a/src/MOLECULE/bond_fene.h +++ b/src/MOLECULE/bond_fene.h @@ -36,6 +36,7 @@ class BondFENE : public Bond { void read_restart(FILE *); void write_data(FILE *); double single(int, double, int, int, double &); + virtual void *extract(const char *, int &); protected: double TWO_1_3; diff --git a/src/MOLECULE/bond_gromos.cpp b/src/MOLECULE/bond_gromos.cpp index 6732cc4457f53966a02cbc2ffdd4433385a88152..27447d72986c3593a4a233fb90f72be3860ba4b5 100644 --- a/src/MOLECULE/bond_gromos.cpp +++ b/src/MOLECULE/bond_gromos.cpp @@ -189,7 +189,7 @@ void BondGromos::write_data(FILE *fp) /* ---------------------------------------------------------------------- */ double BondGromos::single(int type, double rsq, int /*i*/, int /*j*/, - double &fforce) + double &fforce) { double dr = rsq - r0[type]*r0[type]; fforce = -4.0*k[type] * dr; @@ -199,7 +199,7 @@ double BondGromos::single(int type, double rsq, int /*i*/, int /*j*/, /* ---------------------------------------------------------------------- Return ptr to internal members upon request. ------------------------------------------------------------------------ */ -void *BondGromos::extract( char *str, int &dim ) +void *BondGromos::extract(const char *str, int &dim) { dim = 1; if (strcmp(str,"kappa")==0) return (void*) k; diff --git a/src/MOLECULE/bond_gromos.h b/src/MOLECULE/bond_gromos.h index 966b914437bf9f4dfb36d0dc94fac73f375f440d..95ecf8db107e84972ef66b6004ae097fa9f9d671 100644 --- a/src/MOLECULE/bond_gromos.h +++ b/src/MOLECULE/bond_gromos.h @@ -35,7 +35,7 @@ class BondGromos : public Bond { void read_restart(FILE *); void write_data(FILE *); double single(int, double, int, int, double &); - virtual void *extract(char *, int &); + virtual void *extract(const char *, int &); protected: double *k,*r0; diff --git a/src/MOLECULE/bond_harmonic.cpp b/src/MOLECULE/bond_harmonic.cpp index 569c92f99dfe9b00c4663815b940de2e9214da7d..5ea60cda4636baee95309f94b1443329c04613ae 100644 --- a/src/MOLECULE/bond_harmonic.cpp +++ b/src/MOLECULE/bond_harmonic.cpp @@ -190,7 +190,7 @@ void BondHarmonic::write_data(FILE *fp) /* ---------------------------------------------------------------------- */ double BondHarmonic::single(int type, double rsq, int /*i*/, int /*j*/, - double &fforce) + double &fforce) { double r = sqrt(rsq); double dr = r - r0[type]; @@ -203,7 +203,7 @@ double BondHarmonic::single(int type, double rsq, int /*i*/, int /*j*/, /* ---------------------------------------------------------------------- Return ptr to internal members upon request. ------------------------------------------------------------------------ */ -void *BondHarmonic::extract( char *str, int &dim ) +void *BondHarmonic::extract(const char *str, int &dim) { dim = 1; if (strcmp(str,"kappa")==0) return (void*) k; diff --git a/src/MOLECULE/bond_harmonic.h b/src/MOLECULE/bond_harmonic.h index 576e63629bbb4cb727f0356179832cf4341c2f99..39b4f68af54a44b6e3e74a30ce5c5e85c1951adc 100644 --- a/src/MOLECULE/bond_harmonic.h +++ b/src/MOLECULE/bond_harmonic.h @@ -35,7 +35,7 @@ class BondHarmonic : public Bond { virtual void read_restart(FILE *); void write_data(FILE *); double single(int, double, int, int, double &); - virtual void *extract(char *, int &); + virtual void *extract(const char *, int &); protected: double *k,*r0; diff --git a/src/MOLECULE/bond_morse.cpp b/src/MOLECULE/bond_morse.cpp index 249f92928f384ec34df3640e8b21ad002a0338ac..c644d2be1c537267df4e216780d40a5cbbb0bdfa 100644 --- a/src/MOLECULE/bond_morse.cpp +++ b/src/MOLECULE/bond_morse.cpp @@ -18,6 +18,7 @@ #include "bond_morse.h" #include #include +#include #include "atom.h" #include "neighbor.h" #include "comm.h" @@ -205,3 +206,12 @@ double BondMorse::single(int type, double rsq, int /*i*/, int /*j*/, if (r > 0.0) fforce = -2.0*d0[type]*alpha[type]*(1-ralpha)*ralpha/r; return d0[type]*(1-ralpha)*(1-ralpha); } + +/* ---------------------------------------------------------------------- */ + +void *BondMorse::extract(const char *str, int &dim) +{ + dim = 1; + if (strcmp(str,"r0")==0) return (void*) r0; + return NULL; +} diff --git a/src/MOLECULE/bond_morse.h b/src/MOLECULE/bond_morse.h index 030a94a8da964c764d72d80167933076aeb362e2..6d7ec8f8aa529a3aff88d4c5d647619ff8fd68e6 100644 --- a/src/MOLECULE/bond_morse.h +++ b/src/MOLECULE/bond_morse.h @@ -35,6 +35,7 @@ class BondMorse : public Bond { void read_restart(FILE *); void write_data(FILE *); double single(int, double, int, int, double &); + virtual void *extract(const char *, int &); protected: double *d0,*alpha,*r0; diff --git a/src/MOLECULE/bond_nonlinear.cpp b/src/MOLECULE/bond_nonlinear.cpp index ee943ad28f0495702f54b99f0261aee038798c97..1451fa29c28eb75fd6ec0e7d8e72baf2d1f32142 100644 --- a/src/MOLECULE/bond_nonlinear.cpp +++ b/src/MOLECULE/bond_nonlinear.cpp @@ -14,6 +14,7 @@ #include "bond_nonlinear.h" #include #include +#include #include "atom.h" #include "neighbor.h" #include "comm.h" @@ -202,3 +203,13 @@ double BondNonlinear::single(int type, double rsq, int /*i*/, int /*j*/, fforce = -epsilon[type]/r * 2.0*dr*lamdasq/denomsq; return epsilon[type] * drsq / denom; } + +/* ---------------------------------------------------------------------- */ + +void *BondNonlinear::extract(const char *str, int &dim) +{ + dim = 1; + if (strcmp(str,"epsilon")==0) return (void*) epsilon; + if (strcmp(str,"r0")==0) return (void*) r0; + return NULL; +} diff --git a/src/MOLECULE/bond_nonlinear.h b/src/MOLECULE/bond_nonlinear.h index 7782b937784869bc62b4a674d64bf0a847ce1906..29191698d347dddd775c0da8ef735a53bb2a34ea 100644 --- a/src/MOLECULE/bond_nonlinear.h +++ b/src/MOLECULE/bond_nonlinear.h @@ -35,6 +35,7 @@ class BondNonlinear : public Bond { void read_restart(FILE *); void write_data(FILE *); double single(int, double, int, int, double &); + virtual void *extract(const char *, int &); protected: double *epsilon,*r0,*lamda; diff --git a/src/MOLECULE/bond_table.cpp b/src/MOLECULE/bond_table.cpp index 20e4e311c8aaac8d1ae568a38f4968593a7e84a7..74678a71594dbd2e84cc2055063cf79644957d43 100644 --- a/src/MOLECULE/bond_table.cpp +++ b/src/MOLECULE/bond_table.cpp @@ -639,42 +639,3 @@ void BondTable::uf_lookup(int type, double x, double &u, double &f) tb->deltasq6; } } - -/* ---------------------------------------------------------------------- - calculate potential u at distance x - insure x is between bond min/max -------------------------------------------------------------------------- */ - -void BondTable::u_lookup(int type, double x, double &u) -{ - if (!std::isfinite(x)) { - error->one(FLERR,"Illegal bond in bond style table"); - } - - double fraction,a,b; - char estr[128]; - const Table *tb = &tables[tabindex[type]]; - const int itable = static_cast ((x - tb->lo) * tb->invdelta); - if (itable < 0) { - sprintf(estr,"Bond length < table inner cutoff: " - "type %d length %g",type,x); - error->one(FLERR,estr); - } else if (itable >= tablength) { - sprintf(estr,"Bond length > table outer cutoff: " - "type %d length %g",type,x); - error->one(FLERR,estr); - } - - if (tabstyle == LINEAR) { - fraction = (x - tb->r[itable]) * tb->invdelta; - u = tb->e[itable] + fraction*tb->de[itable]; - } else if (tabstyle == SPLINE) { - fraction = (x - tb->r[itable]) * tb->invdelta; - - b = (x - tb->r[itable]) * tb->invdelta; - a = 1.0 - b; - u = a * tb->e[itable] + b * tb->e[itable+1] + - ((a*a*a-a)*tb->e2[itable] + (b*b*b-b)*tb->e2[itable+1]) * - tb->deltasq6; - } -} diff --git a/src/MOLECULE/fix_cmap.cpp b/src/MOLECULE/fix_cmap.cpp index fb0a550898c52b02e1300cb09d4f8b3f91ef5b38..a1b4d23b0595bc18f55344a070e40cb4ea27cc3b 100644 --- a/src/MOLECULE/fix_cmap.cpp +++ b/src/MOLECULE/fix_cmap.cpp @@ -41,6 +41,7 @@ #include "math_const.h" #include "memory.h" #include "error.h" +#include "utils.h" using namespace LAMMPS_NS; using namespace FixConst; @@ -1066,7 +1067,7 @@ void FixCMAP::read_data_section(char *keyword, int n, char *buf, next = strchr(buf,'\n'); *next = '\0'; - int nwords = atom->count_words(buf); + int nwords = utils::count_words(utils::trim_comment(buf)); *next = '\n'; if (nwords != 7) { diff --git a/src/MPIIO/dump_atom_mpiio.cpp b/src/MPIIO/dump_atom_mpiio.cpp index 2b663554cc09621efd1524f4fad4994584d3ace3..d59ed7bde876628a92ddc4bc7ccdaf756bcb9139 100644 --- a/src/MPIIO/dump_atom_mpiio.cpp +++ b/src/MPIIO/dump_atom_mpiio.cpp @@ -15,6 +15,7 @@ Contributing author: Paul Coffman (IBM) ------------------------------------------------------------------------- */ +#include "omp_compat.h" #include "dump_atom_mpiio.h" #include #include @@ -587,7 +588,7 @@ int DumpAtomMPIIO::convert_image_omp(int n, double *mybuf) mpifh_buffer_line_per_thread[i] = (char *) malloc(DUMP_BUF_CHUNK_SIZE * sizeof(char)); mpifh_buffer_line_per_thread[i][0] = '\0'; -#pragma omp parallel default(none) shared(bufOffset, bufRange, bufLength, mpifhStringCountPerThread, mpifh_buffer_line_per_thread, mybuf) +#pragma omp parallel LMP_DEFAULT_NONE LMP_SHARED(bufOffset, bufRange, bufLength, mpifhStringCountPerThread, mpifh_buffer_line_per_thread, mybuf) { int tid = omp_get_thread_num(); int m=0; @@ -677,7 +678,7 @@ int DumpAtomMPIIO::convert_noimage_omp(int n, double *mybuf) mpifh_buffer_line_per_thread[i] = (char *) malloc(DUMP_BUF_CHUNK_SIZE * sizeof(char)); mpifh_buffer_line_per_thread[i][0] = '\0'; -#pragma omp parallel default(none) shared(bufOffset, bufRange, bufLength, mpifhStringCountPerThread, mpifh_buffer_line_per_thread, mybuf) +#pragma omp parallel LMP_DEFAULT_NONE LMP_SHARED(bufOffset, bufRange, bufLength, mpifhStringCountPerThread, mpifh_buffer_line_per_thread, mybuf) { int tid = omp_get_thread_num(); int m=0; diff --git a/src/MPIIO/dump_cfg_mpiio.cpp b/src/MPIIO/dump_cfg_mpiio.cpp index 31848b550c253cd9a350e794a78c349477b6e0cb..18368db3308d2c42922b03e2cac9f7bc06aca47c 100644 --- a/src/MPIIO/dump_cfg_mpiio.cpp +++ b/src/MPIIO/dump_cfg_mpiio.cpp @@ -15,6 +15,7 @@ Contributing author: Paul Coffman (IBM) ------------------------------------------------------------------------- */ +#include "omp_compat.h" #include "dump_cfg_mpiio.h" #include #include @@ -365,7 +366,7 @@ int DumpCFGMPIIO::convert_string_omp(int n, double *mybuf) mpifh_buffer_line_per_thread[i] = (char *) malloc(DUMP_BUF_CHUNK_SIZE * sizeof(char)); mpifh_buffer_line_per_thread[i][0] = '\0'; -#pragma omp parallel default(none) shared(bufOffset, bufRange, bufLength, mpifhStringCountPerThread, mpifh_buffer_line_per_thread, mybuf) +#pragma omp parallel LMP_DEFAULT_NONE LMP_SHARED(bufOffset, bufRange, bufLength, mpifhStringCountPerThread, mpifh_buffer_line_per_thread, mybuf) { int tid = omp_get_thread_num(); int m=0; diff --git a/src/MPIIO/dump_custom_mpiio.cpp b/src/MPIIO/dump_custom_mpiio.cpp index dca5833c5b885d65deb78eaf9ba93eb8ff35a746..526021d8950a7b61534fef5801015e6cc132aadb 100644 --- a/src/MPIIO/dump_custom_mpiio.cpp +++ b/src/MPIIO/dump_custom_mpiio.cpp @@ -15,6 +15,7 @@ Contributing author: Paul Coffman (IBM) ------------------------------------------------------------------------- */ +#include "omp_compat.h" #include "dump_custom_mpiio.h" #include #include @@ -612,7 +613,7 @@ int DumpCustomMPIIO::convert_string_omp(int n, double *mybuf) mpifh_buffer_line_per_thread[i] = (char *) malloc(DUMP_BUF_CHUNK_SIZE * sizeof(char)); mpifh_buffer_line_per_thread[i][0] = '\0'; -#pragma omp parallel default(none) shared(bufOffset, bufRange, bufLength, mpifhStringCountPerThread, mpifh_buffer_line_per_thread, mybuf) +#pragma omp parallel LMP_DEFAULT_NONE LMP_SHARED(bufOffset, bufRange, bufLength, mpifhStringCountPerThread, mpifh_buffer_line_per_thread, mybuf) { int tid = omp_get_thread_num(); int m=0; diff --git a/src/MPIIO/dump_xyz_mpiio.cpp b/src/MPIIO/dump_xyz_mpiio.cpp index f5caab3a9c56560795c949e7a6debe97be071e20..a1e4f21a79c4caeafa40fbdd687eb42bdeaef576 100644 --- a/src/MPIIO/dump_xyz_mpiio.cpp +++ b/src/MPIIO/dump_xyz_mpiio.cpp @@ -15,6 +15,7 @@ Contributing author: Paul Coffman (IBM) ------------------------------------------------------------------------- */ +#include "omp_compat.h" #include "dump_xyz_mpiio.h" #include #include @@ -350,7 +351,7 @@ int DumpXYZMPIIO::convert_string_omp(int n, double *mybuf) mpifh_buffer_line_per_thread[i] = (char *) malloc(DUMP_BUF_CHUNK_SIZE * sizeof(char)); mpifh_buffer_line_per_thread[i][0] = '\0'; -#pragma omp parallel default(none) shared(bufOffset, bufRange, bufLength, mpifhStringCountPerThread, mpifh_buffer_line_per_thread, mybuf) +#pragma omp parallel LMP_DEFAULT_NONE LMP_SHARED(bufOffset, bufRange, bufLength, mpifhStringCountPerThread, mpifh_buffer_line_per_thread, mybuf) { int tid = omp_get_thread_num(); int m=0; diff --git a/src/Makefile b/src/Makefile index bce5089500d5c0e8b3303bdede6562fb1f5f68a1..a78068e0922d1ca42c20668e0fd26ea71a9eaf06 100644 --- a/src/Makefile +++ b/src/Makefile @@ -7,38 +7,31 @@ PYTHON = python # Definitions -ROOT = lmp -EXE = lmp_$@ +ROOT = lmp +EXE = lmp_$@ ARLIB = liblammps_$@.a -SHLIB = liblammps_$@.so +SHLIB = liblammps_$@.so ARLINK = liblammps.a SHLINK = liblammps.so TMPNAME= tmp_$@_name +LMPLINK=$(shell echo $(ARLIB) | sed -e 's,lib\([+0-9a-z_-]\+\)\.a$$,-L. -l\1,') OBJDIR = Obj_$@ OBJSHDIR = Obj_shared_$@ -SRC = $(wildcard *.cpp) -INC = $(filter-out lmpinstalledpkgs.h lmpgitversion.h,$(wildcard *.h)) -OBJ = $(SRC:.cpp=.o) +SRC = $(wildcard *.cpp) +INC = $(filter-out lmpinstalledpkgs.h lmpgitversion.h,$(wildcard *.h)) +OBJ = $(SRC:.cpp=.o) SRCLIB = $(filter-out main.cpp,$(SRC)) OBJLIB = $(filter-out main.o,$(OBJ)) -# Command-line options for mode: exe (default), shexe, lib, shlib +# Command-line options for mode: static (default), shared, or print -mode = exe +mode = static objdir = $(OBJDIR) -ifeq ($(mode),shexe) -objdir = $(OBJSHDIR) -endif - -ifeq ($(mode),lib) -objdir = $(OBJDIR) -endif - -ifeq ($(mode),shlib) +ifeq ($(mode),shared) objdir = $(OBJSHDIR) endif @@ -124,12 +117,10 @@ help: @echo 'make lib-package args="..." download/build/install a package library' @echo 'make purge purge obsolete copies of source files' @echo '' - @echo 'make machine build LAMMPS for machine' - @echo 'make mode=lib machine build LAMMPS as static lib for machine' - @echo 'make mode=shlib machine build LAMMPS as shared lib for machine' - @echo 'make mode=shexe machine build LAMMPS as shared exe for machine' - @echo 'make makelist create Makefile.list used by old makes' - @echo 'make -f Makefile.list machine build LAMMPS for machine (old)' + @echo 'make machine build LAMMPS for machine with static library' + @echo 'make mode=static machine same as above' + @echo 'make mode=shared machine build LAMMPS for machine with shared library' + @echo 'make mode=print machine print compiler/linker flags' @echo '' @echo 'machine is one of these from src/MAKE:' @echo '' @@ -191,11 +182,9 @@ gitversion: mv ${TMPNAME}.lmpgitversion lmpgitversion.h || rm ${TMPNAME}.lmpgitversion ; \ else mv ${TMPNAME}.lmpgitversion lmpgitversion.h ; fi -# Build LAMMPS in one of 4 modes -# exe = exe with static compile in Obj_machine (default) -# shexe = exe with shared compile in Obj_shared_machine -# lib = static lib in Obj_machine -# shlib = shared lib in Obj_shared_machine +# Build LAMMPS in one of 2 modes +# static = static compile in Obj_machine (default) +# shared = shared compile in Obj_shared_machine .DEFAULT: @if [ $@ = "serial" ]; \ @@ -223,34 +212,39 @@ gitversion: @cp Makefile.package Makefile.package.settings $(objdir) @cd $(objdir); rm -f .depend; \ $(MAKE) $(MFLAGS) "SRC = $(SRC)" "INC = $(INC)" depend || : -ifeq ($(mode),exe) - @cd $(objdir); \ - $(MAKE) $(MFLAGS) "OBJ = $(OBJ)" "INC = $(INC)" "SHFLAGS =" \ - "EXE = ../$(EXE)" ../$(EXE) -endif -ifeq ($(mode),shexe) - @cd $(objdir); \ - $(MAKE) $(MFLAGS) "OBJ = $(OBJ)" "INC = $(INC)" \ - "EXE = ../$(EXE)" ../$(EXE) -endif -ifeq ($(mode),lib) + @rm -f $(ARLINK) $(SHLINK) $(EXE) +ifeq ($(mode),static) @cd $(objdir); \ $(MAKE) $(MFLAGS) "OBJ = $(OBJLIB)" "INC = $(INC)" "SHFLAGS =" \ - "EXE = ../$(ARLIB)" lib - @rm -f $(ARLINK) + "LMPLIB = $(ARLIB)" "ARLIB = $(ARLIB)" "SHLIB = $(SHLIB)" \ + "LMPLINK = $(LMPLINK)" "EXE = ../$(EXE)" ../$(EXE) @ln -s $(ARLIB) $(ARLINK) endif -ifeq ($(mode),shlib) +ifeq ($(mode),shared) @cd $(objdir); \ $(MAKE) $(MFLAGS) "OBJ = $(OBJLIB)" "INC = $(INC)" \ - "EXE = ../$(SHLIB)" shlib - @rm -f $(SHLINK) + "LMPLIB = $(SHLIB)" "ARLIB = $(ARLIB)" "SHLIB = $(SHLIB)" \ + "LMPLINK = $(LMPLINK)" "EXE = ../$(EXE)" ../$(EXE) @ln -s $(SHLIB) $(SHLINK) endif +# backward compatibility +ifeq ($(mode),exe) + $(MAKE) $(MFLAGS) mode=static $@ +endif +ifeq ($(mode),lib) + $(MAKE) $(MFLAGS) mode=static $@ +endif +ifeq ($(mode),shexe) + $(MAKE) $(MFLAGS) mode=shared $@ +endif +ifeq ($(mode),shlib) + $(MAKE) $(MFLAGS) mode=shared $@ +endif + ifeq ($(mode),print) @cd $(objdir); \ $(MAKE) $(MFLAGS) "OBJ = $(OBJLIB)" "INC = $(INC)" \ - "EXE = ../$(SHLIB)" -f ../Makefile.print + "EXE = ../$(ARLIB)" -f ../Makefile.print endif # Remove machine-specific object files @@ -267,12 +261,6 @@ clean-%: then cd STUBS; $(MAKE) clean; cd ..; fi rm -rf Obj_$(@:clean-%=%) Obj_shared_$(@:clean-%=%) -# Create Makefile.list - -makelist: - @$(SHELL) Make.sh style - @$(SHELL) Make.sh Makefile.list - # Make MPI STUBS library mpi-stubs: diff --git a/src/Makefile.print b/src/Makefile.print index 8398eb258919bfb159c1e42a8b92d9bfd99de515..d6e49760610d821ebc1de161cb482dc99b020b7e 100644 --- a/src/Makefile.print +++ b/src/Makefile.print @@ -6,6 +6,7 @@ include Makefile # get location of the LAMMPS tree LMPDIR=$(shell echo $${PWD} | sed -e 's,/src/Obj_[+0-9a-z_-]\+$$,,') +LMPLIB=$(shell echo $(EXE) | sed -e 's,\.\./lib\([+0-9a-z_-]\+\)\.a$$,-L${LMPDIR}/src -l\1,') do-print: @echo '# LAMMPS source tree is in:' $(LMPDIR) @@ -18,5 +19,5 @@ do-print: @echo '# Linking: ' @echo LDFLAGS=$(LINKFLAGS) @echo '# Libraries: ' - @echo LDLIBS=$(EXTRA_PATH) $(EXTRA_LIB) $(LIB) | sed -e s,-L\\.\\./\\.\\./,-L${LMPDIR}/,g -e s,-L\\.\\./,-L${LMPDIR}/src/,g -e s,$(HOME),\\$$\\{HOME\\},g + @echo LDLIBS=$(LMPLIB) $(EXTRA_PATH) $(EXTRA_LIB) $(LIB) | sed -e s,-L\\.\\./\\.\\./,-L${LMPDIR}/,g -e s,-L\\.\\./,-L${LMPDIR}/src/,g -e s,$(HOME),\\$$\\{HOME\\},g diff --git a/src/PERI/atom_vec_peri.cpp b/src/PERI/atom_vec_peri.cpp index 3e3312bf01000aa7f9a1a887ed5a6e960f4265c2..5ce74575ba479c6821caa96d1a4f2710c802ec2a 100644 --- a/src/PERI/atom_vec_peri.cpp +++ b/src/PERI/atom_vec_peri.cpp @@ -19,14 +19,9 @@ #include #include #include "atom.h" -#include "comm.h" -#include "domain.h" -#include "modify.h" -#include "fix.h" #include "citeme.h" #include "memory.h" #include "error.h" -#include "utils.h" using namespace LAMMPS_NS; @@ -49,859 +44,72 @@ AtomVecPeri::AtomVecPeri(LAMMPS *lmp) : AtomVec(lmp) molecular = 0; - comm_x_only = 0; - comm_f_only = 1; - size_forward = 4; - size_reverse = 3; - size_border = 12; - size_velocity = 3; - size_data_atom = 7; - size_data_vel = 4; - xcol_data = 5; - + atom->rmass_flag = 1; atom->peri_flag = 1; - atom->vfrac_flag = atom->rmass_flag = 1; -} - -/* ---------------------------------------------------------------------- - grow atom arrays - n = 0 grows arrays by a chunk - n > 0 allocates arrays to size n -------------------------------------------------------------------------- */ - -void AtomVecPeri::grow(int n) -{ - if (n == 0) grow_nmax(); - else nmax = n; - atom->nmax = nmax; - if (nmax < 0 || nmax > MAXSMALLINT) - error->one(FLERR,"Per-processor system is too big"); - - tag = memory->grow(atom->tag,nmax,"atom:tag"); - type = memory->grow(atom->type,nmax,"atom:type"); - mask = memory->grow(atom->mask,nmax,"atom:mask"); - image = memory->grow(atom->image,nmax,"atom:image"); - x = memory->grow(atom->x,nmax,3,"atom:x"); - v = memory->grow(atom->v,nmax,3,"atom:v"); - f = memory->grow(atom->f,nmax*comm->nthreads,3,"atom:f"); - - vfrac = memory->grow(atom->vfrac,nmax,"atom:vfrac"); - rmass = memory->grow(atom->rmass,nmax,"atom:rmass"); - s0 = memory->grow(atom->s0,nmax,"atom:s0"); - x0 = memory->grow(atom->x0,nmax,3,"atom:x0"); - - if (atom->nextra_grow) - for (int iextra = 0; iextra < atom->nextra_grow; iextra++) - modify->fix[atom->extra_grow[iextra]]->grow_arrays(nmax); -} - -/* ---------------------------------------------------------------------- - reset local array ptrs -------------------------------------------------------------------------- */ - -void AtomVecPeri::grow_reset() -{ - tag = atom->tag; type = atom->type; - mask = atom->mask; image = atom->image; - x = atom->x; v = atom->v; f = atom->f; - vfrac = atom->vfrac; rmass = atom->rmass; - s0 = atom->s0; x0 = atom->x0; -} - -/* ---------------------------------------------------------------------- - copy atom I info to atom J -------------------------------------------------------------------------- */ - -void AtomVecPeri::copy(int i, int j, int delflag) -{ - tag[j] = tag[i]; - type[j] = type[i]; - mask[j] = mask[i]; - image[j] = image[i]; - x[j][0] = x[i][0]; - x[j][1] = x[i][1]; - x[j][2] = x[i][2]; - v[j][0] = v[i][0]; - v[j][1] = v[i][1]; - v[j][2] = v[i][2]; - - vfrac[j] = vfrac[i]; - rmass[j] = rmass[i]; - s0[j] = s0[i]; - x0[j][0] = x0[i][0]; - x0[j][1] = x0[i][1]; - x0[j][2] = x0[i][2]; - - if (atom->nextra_grow) - for (int iextra = 0; iextra < atom->nextra_grow; iextra++) - modify->fix[atom->extra_grow[iextra]]->copy_arrays(i,j,delflag); -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecPeri::pack_comm(int n, int *list, double *buf, - int pbc_flag, int *pbc) - -{ - int i,j,m; - double dx,dy,dz; - - m = 0; - if (pbc_flag == 0) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = x[j][0]; - buf[m++] = x[j][1]; - buf[m++] = x[j][2]; - buf[m++] = s0[j]; - } - } else { - if (domain->triclinic == 0) { - dx = pbc[0]*domain->xprd; - dy = pbc[1]*domain->yprd; - dz = pbc[2]*domain->zprd; - } else { - dx = pbc[0]*domain->xprd + pbc[5]*domain->xy + pbc[4]*domain->xz; - dy = pbc[1]*domain->yprd + pbc[3]*domain->yz; - dz = pbc[2]*domain->zprd; - } - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = x[j][0] + dx; - buf[m++] = x[j][1] + dy; - buf[m++] = x[j][2] + dz; - buf[m++] = s0[j]; - } - } - return m; -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecPeri::pack_comm_vel(int n, int *list, double *buf, - int pbc_flag, int *pbc) - -{ - int i,j,m; - double dx,dy,dz,dvx,dvy,dvz; - - m = 0; - if (pbc_flag == 0) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = x[j][0]; - buf[m++] = x[j][1]; - buf[m++] = x[j][2]; - buf[m++] = s0[j]; - buf[m++] = v[j][0]; - buf[m++] = v[j][1]; - buf[m++] = v[j][2]; - } - } else { - if (domain->triclinic == 0) { - dx = pbc[0]*domain->xprd; - dy = pbc[1]*domain->yprd; - dz = pbc[2]*domain->zprd; - } else { - dx = pbc[0]*domain->xprd + pbc[5]*domain->xy + pbc[4]*domain->xz; - dy = pbc[1]*domain->yprd + pbc[3]*domain->yz; - dz = pbc[2]*domain->zprd; - } - if (!deform_vremap) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = x[j][0] + dx; - buf[m++] = x[j][1] + dy; - buf[m++] = x[j][2] + dz; - buf[m++] = s0[j]; - buf[m++] = v[j][0]; - buf[m++] = v[j][1]; - buf[m++] = v[j][2]; - } - } else { - dvx = pbc[0]*h_rate[0] + pbc[5]*h_rate[5] + pbc[4]*h_rate[4]; - dvy = pbc[1]*h_rate[1] + pbc[3]*h_rate[3]; - dvz = pbc[2]*h_rate[2]; - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = x[j][0] + dx; - buf[m++] = x[j][1] + dy; - buf[m++] = x[j][2] + dz; - buf[m++] = s0[j]; - if (mask[i] & deform_groupbit) { - buf[m++] = v[j][0] + dvx; - buf[m++] = v[j][1] + dvy; - buf[m++] = v[j][2] + dvz; - } else { - buf[m++] = v[j][0]; - buf[m++] = v[j][1]; - buf[m++] = v[j][2]; - } - } - } - } - return m; -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecPeri::pack_comm_hybrid(int n, int *list, double *buf) -{ - int i,j,m; - - m = 0; - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = s0[j]; - } - return m; -} - -/* ---------------------------------------------------------------------- */ - -void AtomVecPeri::unpack_comm(int n, int first, double *buf) -{ - int i,m,last; - - m = 0; - last = first + n; - for (i = first; i < last; i++) { - x[i][0] = buf[m++]; - x[i][1] = buf[m++]; - x[i][2] = buf[m++]; - s0[i] = buf[m++]; - } -} - -/* ---------------------------------------------------------------------- */ - -void AtomVecPeri::unpack_comm_vel(int n, int first, double *buf) -{ - int i,m,last; - - m = 0; - last = first + n; - for (i = first; i < last; i++) { - x[i][0] = buf[m++]; - x[i][1] = buf[m++]; - x[i][2] = buf[m++]; - s0[i] = buf[m++]; - v[i][0] = buf[m++]; - v[i][1] = buf[m++]; - v[i][2] = buf[m++]; - } -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecPeri::unpack_comm_hybrid(int n, int first, double *buf) -{ - int i,m,last; - - m = 0; - last = first + n; - for (i = first; i < last; i++) - s0[i] = buf[m++]; - return m; -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecPeri::pack_reverse(int n, int first, double *buf) -{ - int i,m,last; - - m = 0; - last = first + n; - for (i = first; i < last; i++) { - buf[m++] = f[i][0]; - buf[m++] = f[i][1]; - buf[m++] = f[i][2]; - } - return m; -} - -/* ---------------------------------------------------------------------- */ - -void AtomVecPeri::unpack_reverse(int n, int *list, double *buf) -{ - int i,j,m; - - m = 0; - for (i = 0; i < n; i++) { - j = list[i]; - f[j][0] += buf[m++]; - f[j][1] += buf[m++]; - f[j][2] += buf[m++]; - } -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecPeri::pack_border(int n, int *list, double *buf, - int pbc_flag, int *pbc) -{ - int i,j,m; - double dx,dy,dz; - - m = 0; - if (pbc_flag == 0) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = x[j][0]; - buf[m++] = x[j][1]; - buf[m++] = x[j][2]; - buf[m++] = ubuf(tag[j]).d; - buf[m++] = ubuf(type[j]).d; - buf[m++] = ubuf(mask[j]).d; - buf[m++] = vfrac[j]; - buf[m++] = rmass[j]; - buf[m++] = s0[j]; - buf[m++] = x0[j][0]; - buf[m++] = x0[j][1]; - buf[m++] = x0[j][2]; - } - } else { - if (domain->triclinic == 0) { - dx = pbc[0]*domain->xprd; - dy = pbc[1]*domain->yprd; - dz = pbc[2]*domain->zprd; - } else { - dx = pbc[0]; - dy = pbc[1]; - dz = pbc[2]; - } - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = x[j][0] + dx; - buf[m++] = x[j][1] + dy; - buf[m++] = x[j][2] + dz; - buf[m++] = ubuf(tag[j]).d; - buf[m++] = ubuf(type[j]).d; - buf[m++] = ubuf(mask[j]).d; - buf[m++] = vfrac[j]; - buf[m++] = rmass[j]; - buf[m++] = s0[j]; - buf[m++] = x0[j][0]; - buf[m++] = x0[j][1]; - buf[m++] = x0[j][2]; - } - } - - if (atom->nextra_border) - for (int iextra = 0; iextra < atom->nextra_border; iextra++) - m += modify->fix[atom->extra_border[iextra]]->pack_border(n,list,&buf[m]); - - return m; -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecPeri::pack_border_vel(int n, int *list, double *buf, - int pbc_flag, int *pbc) -{ - int i,j,m; - double dx,dy,dz,dvx,dvy,dvz; - - m = 0; - if (pbc_flag == 0) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = x[j][0]; - buf[m++] = x[j][1]; - buf[m++] = x[j][2]; - buf[m++] = ubuf(tag[j]).d; - buf[m++] = ubuf(type[j]).d; - buf[m++] = ubuf(mask[j]).d; - buf[m++] = vfrac[j]; - buf[m++] = rmass[j]; - buf[m++] = s0[j]; - buf[m++] = x0[j][0]; - buf[m++] = x0[j][1]; - buf[m++] = x0[j][2]; - buf[m++] = v[j][0]; - buf[m++] = v[j][1]; - buf[m++] = v[j][2]; - } - } else { - if (domain->triclinic == 0) { - dx = pbc[0]*domain->xprd; - dy = pbc[1]*domain->yprd; - dz = pbc[2]*domain->zprd; - } else { - dx = pbc[0]; - dy = pbc[1]; - dz = pbc[2]; - } - if (!deform_vremap) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = x[j][0] + dx; - buf[m++] = x[j][1] + dy; - buf[m++] = x[j][2] + dz; - buf[m++] = ubuf(tag[j]).d; - buf[m++] = ubuf(type[j]).d; - buf[m++] = ubuf(mask[j]).d; - buf[m++] = vfrac[j]; - buf[m++] = rmass[j]; - buf[m++] = s0[j]; - buf[m++] = x0[j][0]; - buf[m++] = x0[j][1]; - buf[m++] = x0[j][2]; - buf[m++] = v[j][0]; - buf[m++] = v[j][1]; - buf[m++] = v[j][2]; - } - } else { - dvx = pbc[0]*h_rate[0] + pbc[5]*h_rate[5] + pbc[4]*h_rate[4]; - dvy = pbc[1]*h_rate[1] + pbc[3]*h_rate[3]; - dvz = pbc[2]*h_rate[2]; - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = x[j][0] + dx; - buf[m++] = x[j][1] + dy; - buf[m++] = x[j][2] + dz; - buf[m++] = ubuf(tag[j]).d; - buf[m++] = ubuf(type[j]).d; - buf[m++] = ubuf(mask[j]).d; - buf[m++] = vfrac[j]; - buf[m++] = rmass[j]; - buf[m++] = s0[j]; - buf[m++] = x0[j][0]; - buf[m++] = x0[j][1]; - buf[m++] = x0[j][2]; - if (mask[i] & deform_groupbit) { - buf[m++] = v[j][0] + dvx; - buf[m++] = v[j][1] + dvy; - buf[m++] = v[j][2] + dvz; - } else { - buf[m++] = v[j][0]; - buf[m++] = v[j][1]; - buf[m++] = v[j][2]; - } - } - } - } - - if (atom->nextra_border) - for (int iextra = 0; iextra < atom->nextra_border; iextra++) - m += modify->fix[atom->extra_border[iextra]]->pack_border(n,list,&buf[m]); - - return m; -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecPeri::pack_border_hybrid(int n, int *list, double *buf) -{ - int i,j,m; - - m = 0; - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = vfrac[j]; - buf[m++] = rmass[j]; - buf[m++] = s0[j]; - buf[m++] = x0[j][0]; - buf[m++] = x0[j][1]; - buf[m++] = x0[j][2]; - } - return m; -} + atom->vfrac_flag = 1; -/* ---------------------------------------------------------------------- */ - -void AtomVecPeri::unpack_border(int n, int first, double *buf) -{ - int i,m,last; - - m = 0; - last = first + n; - for (i = first; i < last; i++) { - if (i == nmax) grow(0); - x[i][0] = buf[m++]; - x[i][1] = buf[m++]; - x[i][2] = buf[m++]; - tag[i] = (tagint) ubuf(buf[m++]).i; - type[i] = (int) ubuf(buf[m++]).i; - mask[i] = (int) ubuf(buf[m++]).i; - vfrac[i] = buf[m++]; - rmass[i] = buf[m++]; - s0[i] = buf[m++]; - x0[i][0] = buf[m++]; - x0[i][1] = buf[m++]; - x0[i][2] = buf[m++]; - } - - if (atom->nextra_border) - for (int iextra = 0; iextra < atom->nextra_border; iextra++) - m += modify->fix[atom->extra_border[iextra]]-> - unpack_border(n,first,&buf[m]); -} - -/* ---------------------------------------------------------------------- */ - -void AtomVecPeri::unpack_border_vel(int n, int first, double *buf) -{ - int i,m,last; - - m = 0; - last = first + n; - for (i = first; i < last; i++) { - if (i == nmax) grow(0); - x[i][0] = buf[m++]; - x[i][1] = buf[m++]; - x[i][2] = buf[m++]; - tag[i] = (tagint) ubuf(buf[m++]).i; - type[i] = (int) ubuf(buf[m++]).i; - mask[i] = (int) ubuf(buf[m++]).i; - vfrac[i] = buf[m++]; - rmass[i] = buf[m++]; - s0[i] = buf[m++]; - x0[i][0] = buf[m++]; - x0[i][1] = buf[m++]; - x0[i][2] = buf[m++]; - v[i][0] = buf[m++]; - v[i][1] = buf[m++]; - v[i][2] = buf[m++]; - } - - if (atom->nextra_border) - for (int iextra = 0; iextra < atom->nextra_border; iextra++) - m += modify->fix[atom->extra_border[iextra]]-> - unpack_border(n,first,&buf[m]); -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecPeri::unpack_border_hybrid(int n, int first, double *buf) -{ - int i,m,last; - - m = 0; - last = first + n; - for (i = first; i < last; i++) { - vfrac[i] = buf[m++]; - rmass[i] = buf[m++]; - s0[i] = buf[m++]; - x0[i][0] = buf[m++]; - x0[i][1] = buf[m++]; - x0[i][2] = buf[m++]; - } - return m; -} - -/* ---------------------------------------------------------------------- - pack data for atom I for sending to another proc - xyz must be 1st 3 values, so comm::exchange() can test on them -------------------------------------------------------------------------- */ - -int AtomVecPeri::pack_exchange(int i, double *buf) -{ - int m = 1; - buf[m++] = x[i][0]; - buf[m++] = x[i][1]; - buf[m++] = x[i][2]; - buf[m++] = v[i][0]; - buf[m++] = v[i][1]; - buf[m++] = v[i][2]; - buf[m++] = ubuf(tag[i]).d; - buf[m++] = ubuf(type[i]).d; - buf[m++] = ubuf(mask[i]).d; - buf[m++] = ubuf(image[i]).d; - - buf[m++] = vfrac[i]; - buf[m++] = rmass[i]; - buf[m++] = s0[i]; - buf[m++] = x0[i][0]; - buf[m++] = x0[i][1]; - buf[m++] = x0[i][2]; - - if (atom->nextra_grow) - for (int iextra = 0; iextra < atom->nextra_grow; iextra++) - m += modify->fix[atom->extra_grow[iextra]]->pack_exchange(i,&buf[m]); - - buf[0] = m; - return m; -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecPeri::unpack_exchange(double *buf) -{ - int nlocal = atom->nlocal; - if (nlocal == nmax) grow(0); - - int m = 1; - x[nlocal][0] = buf[m++]; - x[nlocal][1] = buf[m++]; - x[nlocal][2] = buf[m++]; - v[nlocal][0] = buf[m++]; - v[nlocal][1] = buf[m++]; - v[nlocal][2] = buf[m++]; - tag[nlocal] = (tagint) ubuf(buf[m++]).i; - type[nlocal] = (int) ubuf(buf[m++]).i; - mask[nlocal] = (int) ubuf(buf[m++]).i; - image[nlocal] = (imageint) ubuf(buf[m++]).i; - - vfrac[nlocal] = buf[m++]; - rmass[nlocal] = buf[m++]; - s0[nlocal] = buf[m++]; - x0[nlocal][0] = buf[m++]; - x0[nlocal][1] = buf[m++]; - x0[nlocal][2] = buf[m++]; + // strings with peratom variables to include in each AtomVec method + // strings cannot contain fields in corresponding AtomVec default strings + // order of fields in a string does not matter + // except: fields_data_atom & fields_data_vel must match data file - if (atom->nextra_grow) - for (int iextra = 0; iextra < atom->nextra_grow; iextra++) - m += modify->fix[atom->extra_grow[iextra]]-> - unpack_exchange(nlocal,&buf[m]); + fields_grow = (char *) "rmass vfrac s0 x0"; + fields_copy = (char *) "rmass vfrac s0 x0"; + fields_comm = (char *) "s0"; + fields_comm_vel = (char *) "s0"; + fields_reverse = (char *) ""; + fields_border = (char *) "rmass vfrac s0 x0"; + fields_border_vel = (char *) "rmass vfrac s0 x0"; + fields_exchange = (char *) "rmass vfrac s0 x0"; + fields_restart = (char *) "rmass vfrac s0 x0"; + fields_create = (char *) "rmass vfrac s0 x0"; + fields_data_atom = (char *) "id type vfrac rmass x"; + fields_data_vel = (char *) "id v"; - atom->nlocal++; - return m; + setup_fields(); } - /* ---------------------------------------------------------------------- - size of restart data for all atoms owned by this proc - include extra data stored by fixes + set local copies of all grow ptrs used by this class, except defaults + needed in replicate when 2 atom classes exist and it calls pack_restart() ------------------------------------------------------------------------- */ -int AtomVecPeri::size_restart() +void AtomVecPeri::grow_pointers() { - int i; - - int nlocal = atom->nlocal; - int n = 17 * nlocal; - - if (atom->nextra_restart) - for (int iextra = 0; iextra < atom->nextra_restart; iextra++) - for (i = 0; i < nlocal; i++) - n += modify->fix[atom->extra_restart[iextra]]->size_restart(i); - - return n; + rmass = atom->rmass; + vfrac = atom->vfrac; + s0 = atom->s0; + x0 = atom->x0; } /* ---------------------------------------------------------------------- - pack atom I's data for restart file including extra quantities - xyz must be 1st 3 values, so that read_restart can test on them - molecular types may be negative, but write as positive + initialize non-zero atom quantities ------------------------------------------------------------------------- */ -int AtomVecPeri::pack_restart(int i, double *buf) +void AtomVecPeri::create_atom_post(int ilocal) { - int m = 1; - buf[m++] = x[i][0]; - buf[m++] = x[i][1]; - buf[m++] = x[i][2]; - buf[m++] = ubuf(tag[i]).d; - buf[m++] = ubuf(type[i]).d; - buf[m++] = ubuf(mask[i]).d; - buf[m++] = ubuf(image[i]).d; - buf[m++] = v[i][0]; - buf[m++] = v[i][1]; - buf[m++] = v[i][2]; - - buf[m++] = vfrac[i]; - buf[m++] = rmass[i]; - buf[m++] = s0[i]; - buf[m++] = x0[i][0]; - buf[m++] = x0[i][1]; - buf[m++] = x0[i][2]; - - if (atom->nextra_restart) - for (int iextra = 0; iextra < atom->nextra_restart; iextra++) - m += modify->fix[atom->extra_restart[iextra]]->pack_restart(i,&buf[m]); - - buf[0] = m; - return m; + vfrac[ilocal] = 1.0; + rmass[ilocal] = 1.0; + s0[ilocal] = DBL_MAX; + x0[ilocal][0] = x[ilocal][0]; + x0[ilocal][1] = x[ilocal][1]; + x0[ilocal][2] = x[ilocal][2]; } /* ---------------------------------------------------------------------- - unpack data for one atom from restart file including extra quantities + modify what AtomVec::data_atom() just unpacked + or initialize other atom quantities ------------------------------------------------------------------------- */ -int AtomVecPeri::unpack_restart(double *buf) +void AtomVecPeri::data_atom_post(int ilocal) { - int nlocal = atom->nlocal; - if (nlocal == nmax) { - grow(0); - if (atom->nextra_store) - memory->grow(atom->extra,nmax,atom->nextra_store,"atom:extra"); - } - - int m = 1; - x[nlocal][0] = buf[m++]; - x[nlocal][1] = buf[m++]; - x[nlocal][2] = buf[m++]; - tag[nlocal] = (tagint) ubuf(buf[m++]).i; - type[nlocal] = (int) ubuf(buf[m++]).i; - mask[nlocal] = (int) ubuf(buf[m++]).i; - image[nlocal] = (imageint) ubuf(buf[m++]).i; - v[nlocal][0] = buf[m++]; - v[nlocal][1] = buf[m++]; - v[nlocal][2] = buf[m++]; + s0[ilocal] = DBL_MAX; + x0[ilocal][0] = x[ilocal][0]; + x0[ilocal][1] = x[ilocal][1]; + x0[ilocal][2] = x[ilocal][2]; - vfrac[nlocal] = buf[m++]; - rmass[nlocal] = buf[m++]; - s0[nlocal] = buf[m++]; - x0[nlocal][0] = buf[m++]; - x0[nlocal][1] = buf[m++]; - x0[nlocal][2] = buf[m++]; - - double **extra = atom->extra; - if (atom->nextra_store) { - int size = static_cast (buf[0]) - m; - for (int i = 0; i < size; i++) extra[nlocal][i] = buf[m++]; - } - - atom->nlocal++; - return m; -} - -/* ---------------------------------------------------------------------- - create one atom of itype at coord - set other values to defaults -------------------------------------------------------------------------- */ - -void AtomVecPeri::create_atom(int itype, double *coord) -{ - int nlocal = atom->nlocal; - if (nlocal == nmax) grow(0); - - tag[nlocal] = 0; - type[nlocal] = itype; - x[nlocal][0] = coord[0]; - x[nlocal][1] = coord[1]; - x[nlocal][2] = coord[2]; - mask[nlocal] = 1; - image[nlocal] = ((imageint) IMGMAX << IMG2BITS) | - ((imageint) IMGMAX << IMGBITS) | IMGMAX; - v[nlocal][0] = 0.0; - v[nlocal][1] = 0.0; - v[nlocal][2] = 0.0; - - vfrac[nlocal] = 1.0; - rmass[nlocal] = 1.0; - s0[nlocal] = DBL_MAX; - x0[nlocal][0] = coord[0]; - x0[nlocal][1] = coord[1]; - x0[nlocal][2] = coord[2]; - - atom->nlocal++; -} - -/* ---------------------------------------------------------------------- - unpack one line from Atoms section of data file - initialize other atom quantities -------------------------------------------------------------------------- */ - -void AtomVecPeri::data_atom(double *coord, imageint imagetmp, char **values) -{ - int nlocal = atom->nlocal; - if (nlocal == nmax) grow(0); - - tag[nlocal] = utils::tnumeric(FLERR,values[0],true,lmp); - type[nlocal] = utils::inumeric(FLERR,values[1],true,lmp); - if (type[nlocal] <= 0 || type[nlocal] > atom->ntypes) - error->one(FLERR,"Invalid atom type in Atoms section of data file"); - - vfrac[nlocal] = utils::numeric(FLERR,values[2],true,lmp); - rmass[nlocal] = utils::numeric(FLERR,values[3],true,lmp); - if (rmass[nlocal] <= 0.0) error->one(FLERR,"Invalid mass value"); - - x[nlocal][0] = coord[0]; - x[nlocal][1] = coord[1]; - x[nlocal][2] = coord[2]; - - image[nlocal] = imagetmp; - - mask[nlocal] = 1; - v[nlocal][0] = 0.0; - v[nlocal][1] = 0.0; - v[nlocal][2] = 0.0; - - s0[nlocal] = DBL_MAX; - x0[nlocal][0] = coord[0]; - x0[nlocal][1] = coord[1]; - x0[nlocal][2] = coord[2]; - - atom->nlocal++; -} - -/* ---------------------------------------------------------------------- - unpack hybrid quantities from one line in Atoms section of data file - initialize other atom quantities for this sub-style -------------------------------------------------------------------------- */ - -int AtomVecPeri::data_atom_hybrid(int nlocal, char **values) -{ - vfrac[nlocal] = utils::numeric(FLERR,values[0],true,lmp); - rmass[nlocal] = utils::numeric(FLERR,values[1],true,lmp); - if (rmass[nlocal] <= 0.0) error->one(FLERR,"Invalid mass value"); - - s0[nlocal] = DBL_MAX; - x0[nlocal][0] = x[nlocal][0]; - x0[nlocal][1] = x[nlocal][1]; - x0[nlocal][2] = x[nlocal][2]; - - return 2; -} - -/* ---------------------------------------------------------------------- - pack atom info for data file including 3 image flags -------------------------------------------------------------------------- */ - -void AtomVecPeri::pack_data(double **buf) -{ - int nlocal = atom->nlocal; - for (int i = 0; i < nlocal; i++) { - buf[i][0] = ubuf(tag[i]).d; - buf[i][1] = ubuf(type[i]).d; - buf[i][2] = vfrac[i]; - buf[i][3] = rmass[i]; - buf[i][4] = x[i][0]; - buf[i][5] = x[i][1]; - buf[i][6] = x[i][2]; - buf[i][7] = ubuf((image[i] & IMGMASK) - IMGMAX).d; - buf[i][8] = ubuf((image[i] >> IMGBITS & IMGMASK) - IMGMAX).d; - buf[i][9] = ubuf((image[i] >> IMG2BITS) - IMGMAX).d; - } -} - -/* ---------------------------------------------------------------------- - pack hybrid atom info for data file -------------------------------------------------------------------------- */ - -int AtomVecPeri::pack_data_hybrid(int i, double *buf) -{ - buf[0] = vfrac[i]; - buf[1] = rmass[i]; - return 2; -} - -/* ---------------------------------------------------------------------- - write atom info to data file including 3 image flags -------------------------------------------------------------------------- */ - -void AtomVecPeri::write_data(FILE *fp, int n, double **buf) -{ - for (int i = 0; i < n; i++) - fprintf(fp,TAGINT_FORMAT - " %d %-1.16e %-1.16e %-1.16e %-1.16e %-1.16e %d %d %d\n", - (tagint) ubuf(buf[i][0]).i,(int) ubuf(buf[i][1]).i, - buf[i][2],buf[i][3],buf[i][4],buf[i][5],buf[i][6], - (int) ubuf(buf[i][7]).i,(int) ubuf(buf[i][8]).i, - (int) ubuf(buf[i][9]).i); -} - -/* ---------------------------------------------------------------------- - write hybrid atom info to data file -------------------------------------------------------------------------- */ - -int AtomVecPeri::write_data_hybrid(FILE *fp, double *buf) -{ - fprintf(fp," %-1.16e %-1.16e",buf[0],buf[1]); - return 2; + if (rmass[ilocal] <= 0.0) + error->one(FLERR,"Invalid mass in Atoms section of data file"); } /* ---------------------------------------------------------------------- @@ -942,27 +150,3 @@ void AtomVecPeri::pack_property_atom(int index, double *buf, } } } - -/* ---------------------------------------------------------------------- - return # of bytes of allocated memory -------------------------------------------------------------------------- */ - -bigint AtomVecPeri::memory_usage() -{ - bigint bytes = 0; - - if (atom->memcheck("tag")) bytes += memory->usage(tag,nmax); - if (atom->memcheck("type")) bytes += memory->usage(type,nmax); - if (atom->memcheck("mask")) bytes += memory->usage(mask,nmax); - if (atom->memcheck("image")) bytes += memory->usage(image,nmax); - if (atom->memcheck("x")) bytes += memory->usage(x,nmax,3); - if (atom->memcheck("v")) bytes += memory->usage(v,nmax,3); - if (atom->memcheck("f")) bytes += memory->usage(f,nmax*comm->nthreads,3); - - if (atom->memcheck("vfrac")) bytes += memory->usage(vfrac,nmax); - if (atom->memcheck("rmass")) bytes += memory->usage(rmass,nmax); - if (atom->memcheck("s0")) bytes += memory->usage(s0,nmax); - if (atom->memcheck("x0")) bytes += memory->usage(x0,nmax,3); - - return bytes; -} diff --git a/src/PERI/atom_vec_peri.h b/src/PERI/atom_vec_peri.h index 0fc30d6dc2a760820c05e0cc1683087e11fb4d89..5739ea55c1978c861a62ebb0c33f9914214d8204 100644 --- a/src/PERI/atom_vec_peri.h +++ b/src/PERI/atom_vec_peri.h @@ -27,45 +27,17 @@ namespace LAMMPS_NS { class AtomVecPeri : public AtomVec { public: AtomVecPeri(class LAMMPS *); - void grow(int); - void grow_reset(); - void copy(int, int, int); - int pack_comm(int, int *, double *, int, int *); - int pack_comm_vel(int, int *, double *, int, int *); - int pack_comm_hybrid(int, int *, double *); - void unpack_comm(int, int, double *); - void unpack_comm_vel(int, int, double *); - int unpack_comm_hybrid(int, int, double *); - int pack_reverse(int, int, double *); - void unpack_reverse(int, int *, double *); - int pack_border(int, int *, double *, int, int *); - int pack_border_vel(int, int *, double *, int, int *); - int pack_border_hybrid(int, int *, double *); - void unpack_border(int, int, double *); - void unpack_border_vel(int, int, double *); - int unpack_border_hybrid(int, int, double *); - int pack_exchange(int, double *); - int unpack_exchange(double *); - int size_restart(); - int pack_restart(int, double *); - int unpack_restart(double *); - void create_atom(int, double *); - void data_atom(double *, imageint, char **); - int data_atom_hybrid(int, char **); - void pack_data(double **); - int pack_data_hybrid(int, double *); - void write_data(FILE *, int, double **); - int write_data_hybrid(FILE *, double *); + + void grow_pointers(); + void create_atom_post(int); + void data_atom_post(int); int property_atom(char *); void pack_property_atom(int, double *, int, int); - bigint memory_usage(); private: - tagint *tag; - int *type,*mask; - imageint *image; - double **x,**v,**f; - double *vfrac,*rmass,*s0,**x0; + double *rmass,*vfrac,*s0; + double **x0; + }; } @@ -75,17 +47,4 @@ class AtomVecPeri : public AtomVec { /* ERROR/WARNING messages: -E: Per-processor system is too big - -The number of owned atoms plus ghost atoms on a single -processor must fit in 32-bit integer. - -E: Invalid atom type in Atoms section of data file - -Atom types must range from 1 to specified # of types. - -E: Invalid mass value - -Self-explanatory. - */ diff --git a/src/PERI/pair_peri_eps.cpp b/src/PERI/pair_peri_eps.cpp index cd2ab3a2d0f41c6f8b85310d4c7500e349885b9e..ff79320fc3de6cc9848beab1b9fa8510bfba9ee2 100644 --- a/src/PERI/pair_peri_eps.cpp +++ b/src/PERI/pair_peri_eps.cpp @@ -30,10 +30,12 @@ #include "neighbor.h" #include "neigh_list.h" #include "memory.h" +#include "math_const.h" #include "error.h" #include "utils.h" using namespace LAMMPS_NS; +using namespace MathConst; /* ---------------------------------------------------------------------- */ @@ -272,7 +274,7 @@ void PairPeriEPS::compute(int eflag, int vflag) double horizon = cut[itype][itype]; double tdnorm = compute_DeviatoricForceStateNorm(i); double pointwiseYieldvalue = 25.0 * yieldStress * - yieldStress / 8 / M_PI / pow(horizon,5); + yieldStress / 8 / MY_PI / pow(horizon,5); double fsurf = (tdnorm * tdnorm)/2 - pointwiseYieldvalue; diff --git a/src/Package.sh b/src/Package.sh index 72e8761e21efa1cf3f97446f44791a7f4de6413b..f776a02e4830e07ddd1161e2994b66f34bcd59a9 100755 --- a/src/Package.sh +++ b/src/Package.sh @@ -91,7 +91,7 @@ elif (test $2 = "diff") then echo "************************************************" echo "diff -u $1/$file src/$file " echo "************************************************" - diff -u $file ../$file + diff -u $file ../$file fi done fi diff --git a/src/Purge.list b/src/Purge.list index 634c38c58da16cdce5d627964860dda62ad0396f..ebe1a9c4841d7217f02a9ccbe8f5f4c2334614c1 100644 --- a/src/Purge.list +++ b/src/Purge.list @@ -49,6 +49,19 @@ packages_ntopo.h # other auto-generated files lmpinstalledpkgs.h lmpgitversion.h +# renamed on 8 May 2020 +fix_meso.cpp +fix_meso.h +fix_meso_stationary.cpp +fix_meso_stationary.h +atom_vec_meso.cpp +atom_vec_meso.h +compute_meso_e_atom.cpp +compute_meso_e_atom.h +compute_meso_rho_atom.cpp +compute_meso_rho_atom.h +compute_meso_t_atom.cpp +compute_meso_t_atom.h # removed on 15 March 2019 fix_wall_gran_omp.h fix_wall_gran_omp.cpp diff --git a/src/QEQ/fix_qeq.cpp b/src/QEQ/fix_qeq.cpp index 84ba33e28acfb9ebfacb15b6a7c14425439b39a2..63fa3caefef19beeacc5a450262c091fb79d38f6 100644 --- a/src/QEQ/fix_qeq.cpp +++ b/src/QEQ/fix_qeq.cpp @@ -27,6 +27,7 @@ #include "force.h" #include "memory.h" #include "error.h" +#include "utils.h" using namespace LAMMPS_NS; using namespace FixConst; @@ -738,7 +739,7 @@ void FixQEq::read_file(char *file) // strip comment, skip line if blank if ((ptr = strchr(line,'#'))) *ptr = '\0'; - nwords = atom->count_words(line); + nwords = utils::count_words(line); if (nwords == 0) continue; // must have 6 parameters per line. diff --git a/src/REPLICA/neb.cpp b/src/REPLICA/neb.cpp index dafc0c087585bb45b25f1f2423fe3516b0046824..5a1f942815c0857e8c4c0494c358cfcb97088599 100644 --- a/src/REPLICA/neb.cpp +++ b/src/REPLICA/neb.cpp @@ -33,6 +33,7 @@ #include "error.h" #include "force.h" #include "math_const.h" +#include "utils.h" using namespace LAMMPS_NS; using namespace MathConst; @@ -447,7 +448,7 @@ void NEB::readfile(char *file, int flag) buf = buffer; next = strchr(buf,'\n'); *next = '\0'; - int nwords = atom->count_words(buf); + int nwords = utils::count_words(utils::trim_comment(buf)); *next = '\n'; if (nwords != ATTRIBUTE_PERLINE) diff --git a/src/RIGID/fix_rigid.cpp b/src/RIGID/fix_rigid.cpp index d77bf988a6788c596194672e97496a9a2e8ad1df..28a348e58ba17de6398936faad60dd21e3d6ffec 100644 --- a/src/RIGID/fix_rigid.cpp +++ b/src/RIGID/fix_rigid.cpp @@ -35,6 +35,7 @@ #include "memory.h" #include "error.h" #include "rigid_const.h" +#include "utils.h" using namespace LAMMPS_NS; using namespace FixConst; @@ -2330,7 +2331,7 @@ void FixRigid::readfile(int which, double *vec, buf = buffer; next = strchr(buf,'\n'); *next = '\0'; - int nwords = atom->count_words(buf); + int nwords = utils::count_words(utils::trim_comment(buf)); *next = '\n'; if (nwords != ATTRIBUTE_PERBODY) diff --git a/src/RIGID/fix_rigid_nh.cpp b/src/RIGID/fix_rigid_nh.cpp index 6ffb997ffa7dbb5a56b4c96bd401cb7fca5d41f3..1df7f345327cb2be2c974e8a21c3b36c37134f84 100644 --- a/src/RIGID/fix_rigid_nh.cpp +++ b/src/RIGID/fix_rigid_nh.cpp @@ -106,6 +106,10 @@ FixRigidNH::FixRigidNH(LAMMPS *lmp, int narg, char **arg) : p_period[0] != p_period[2])) error->all(FLERR,"Invalid fix rigid npt/nph command pressure settings"); + if (p_flag[0]) box_change |= BOX_CHANGE_X; + if (p_flag[1]) box_change |= BOX_CHANGE_Y; + if (p_flag[2]) box_change |= BOX_CHANGE_Z; + if ((tstat_flag && t_period <= 0.0) || (p_flag[0] && p_period[0] <= 0.0) || (p_flag[1] && p_period[1] <= 0.0) || diff --git a/src/RIGID/fix_rigid_nh_small.cpp b/src/RIGID/fix_rigid_nh_small.cpp index 136796ce1802f3c9a2695e1e2d2f69fe2aa308d4..5b75640549a74222612277489256f0140f5dedf4 100644 --- a/src/RIGID/fix_rigid_nh_small.cpp +++ b/src/RIGID/fix_rigid_nh_small.cpp @@ -120,6 +120,10 @@ FixRigidNHSmall::FixRigidNHSmall(LAMMPS *lmp, int narg, char **arg) : p_period[0] != p_period[2])) error->all(FLERR,"Invalid fix rigid/small npt/nph command pressure settings"); + if (p_flag[0]) box_change |= BOX_CHANGE_X; + if (p_flag[1]) box_change |= BOX_CHANGE_Y; + if (p_flag[2]) box_change |= BOX_CHANGE_Z; + if ((tstat_flag && t_period <= 0.0) || (p_flag[0] && p_period[0] <= 0.0) || (p_flag[1] && p_period[1] <= 0.0) || diff --git a/src/RIGID/fix_rigid_nph.cpp b/src/RIGID/fix_rigid_nph.cpp index 706e08ec123c5364b5b7633ab1ddd9966afb2ced..5c3b5390aaf307c866fb6d86bcd1ffdf5eff5412 100644 --- a/src/RIGID/fix_rigid_nph.cpp +++ b/src/RIGID/fix_rigid_nph.cpp @@ -33,7 +33,6 @@ FixRigidNPH::FixRigidNPH(LAMMPS *lmp, int narg, char **arg) : scalar_flag = 1; restart_global = 1; - box_change_size = 1; extscalar = 1; // error checks diff --git a/src/RIGID/fix_rigid_nph_small.cpp b/src/RIGID/fix_rigid_nph_small.cpp index 32ac58220dbe8a81a594ea3d9e56516d14626fbe..7769ced8072572e80823208a8c10911a1d3a929f 100644 --- a/src/RIGID/fix_rigid_nph_small.cpp +++ b/src/RIGID/fix_rigid_nph_small.cpp @@ -33,7 +33,6 @@ FixRigidNPHSmall::FixRigidNPHSmall(LAMMPS *lmp, int narg, char **arg) : scalar_flag = 1; restart_global = 1; - box_change_size = 1; extscalar = 1; // error checks diff --git a/src/RIGID/fix_rigid_npt.cpp b/src/RIGID/fix_rigid_npt.cpp index 1f19fb4ec7d8226a803101fcabd5d62c908acde0..5f3fde669ca986b27565e5f2f78e066c21aacaff 100644 --- a/src/RIGID/fix_rigid_npt.cpp +++ b/src/RIGID/fix_rigid_npt.cpp @@ -33,7 +33,6 @@ FixRigidNPT::FixRigidNPT(LAMMPS *lmp, int narg, char **arg) : scalar_flag = 1; restart_global = 1; - box_change_size = 1; extscalar = 1; // error checks diff --git a/src/RIGID/fix_rigid_npt_small.cpp b/src/RIGID/fix_rigid_npt_small.cpp index e8924be79fe8edca6d610905c0e43843c482fa1e..d3bd5b8f571f568b9d1409eac9d6a00119975f7c 100644 --- a/src/RIGID/fix_rigid_npt_small.cpp +++ b/src/RIGID/fix_rigid_npt_small.cpp @@ -33,7 +33,6 @@ FixRigidNPTSmall::FixRigidNPTSmall(LAMMPS *lmp, int narg, char **arg) : scalar_flag = 1; restart_global = 1; - box_change_size = 1; extscalar = 1; // error checks diff --git a/src/RIGID/fix_rigid_small.cpp b/src/RIGID/fix_rigid_small.cpp index 9974a7f888acad12c8ee08ce58d7484f87446f3d..89fa3add4b3f3f334444ec71b7ab2adac50b2784 100644 --- a/src/RIGID/fix_rigid_small.cpp +++ b/src/RIGID/fix_rigid_small.cpp @@ -39,6 +39,7 @@ #include "memory.h" #include "error.h" #include "rigid_const.h" +#include "utils.h" #include @@ -2488,7 +2489,7 @@ void FixRigidSmall::readfile(int which, double **array, int *inbody) buf = buffer; next = strchr(buf,'\n'); *next = '\0'; - int nwords = atom->count_words(buf); + int nwords = utils::count_words(buf); *next = '\n'; if (nwords != ATTRIBUTE_PERBODY) diff --git a/src/SHOCK/fix_append_atoms.cpp b/src/SHOCK/fix_append_atoms.cpp index 5e85b390766fff17ec47e2725ee241aebcf29833..1a6b128cd5e5fd8b9047dc682aa1ddb545d14748 100644 --- a/src/SHOCK/fix_append_atoms.cpp +++ b/src/SHOCK/fix_append_atoms.cpp @@ -40,7 +40,6 @@ FixAppendAtoms::FixAppendAtoms(LAMMPS *lmp, int narg, char **arg) : { force_reneighbor = 1; next_reneighbor = -1; - box_change_size = 1; time_depend = 1; if (narg < 4) error->all(FLERR,"Illegal fix append/atoms command"); @@ -75,35 +74,41 @@ FixAppendAtoms::FixAppendAtoms(LAMMPS *lmp, int narg, char **arg) : if (strcmp(arg[iarg],"xlo") == 0) { error->all(FLERR,"Only zhi currently implemented for fix append/atoms"); xloflag = 1; + box_change |= BOX_CHANGE_X; iarg++; if (domain->boundary[0][0] != 3) error->all(FLERR,"Append boundary must be shrink/minimum"); } else if (strcmp(arg[iarg],"xhi") == 0) { error->all(FLERR,"Only zhi currently implemented for fix append/atoms"); xhiflag = 1; + box_change |= BOX_CHANGE_X; iarg++; if (domain->boundary[0][1] != 3) error->all(FLERR,"Append boundary must be shrink/minimum"); } else if (strcmp(arg[iarg],"ylo") == 0) { error->all(FLERR,"Only zhi currently implemented for fix append/atoms"); yloflag = 1; + box_change |= BOX_CHANGE_Y; iarg++; if (domain->boundary[1][0] != 3) error->all(FLERR,"Append boundary must be shrink/minimum"); } else if (strcmp(arg[iarg],"yhi") == 0) { error->all(FLERR,"Only zhi currently implemented for fix append/atoms"); yhiflag = 1; + box_change |= BOX_CHANGE_Y; iarg++; if (domain->boundary[1][1] != 3) error->all(FLERR,"Append boundary must be shrink/minimum"); } else if (strcmp(arg[iarg],"zlo") == 0) { error->all(FLERR,"Only zhi currently implemented for fix append/atoms"); zloflag = 1; + box_change |= BOX_CHANGE_Z; iarg++; if (domain->boundary[2][0] != 3) error->all(FLERR,"Append boundary must be shrink/minimum"); } else if (strcmp(arg[iarg],"zhi") == 0) { zhiflag = 1; + box_change |= BOX_CHANGE_Z; iarg++; if (domain->boundary[2][1] != 3) error->all(FLERR,"Append boundary must be shrink/minimum"); diff --git a/src/SHOCK/fix_msst.cpp b/src/SHOCK/fix_msst.cpp index 2e9f7518242def8dbe8a870c5d277fc8a4ffbcef..67b2a7fb0fb6abbb3184a5545bfaec667c91626b 100644 --- a/src/SHOCK/fix_msst.cpp +++ b/src/SHOCK/fix_msst.cpp @@ -46,7 +46,6 @@ FixMSST::FixMSST(LAMMPS *lmp, int narg, char **arg) : if (narg < 4) error->all(FLERR,"Illegal fix msst command"); restart_global = 1; - box_change_size = 1; time_integrate = 1; scalar_flag = 1; vector_flag = 1; @@ -78,10 +77,16 @@ FixMSST::FixMSST(LAMMPS *lmp, int narg, char **arg) : dftb = 0; beta = 0.0; - if (strcmp(arg[3],"x") == 0) direction = 0; - else if (strcmp(arg[3],"y") == 0) direction = 1; - else if (strcmp(arg[3],"z") == 0) direction = 2; - else error->all(FLERR,"Illegal fix msst command"); + if (strcmp(arg[3],"x") == 0) { + direction = 0; + box_change |= BOX_CHANGE_X; + } else if (strcmp(arg[3],"y") == 0) { + direction = 1; + box_change |= BOX_CHANGE_Y; + } else if (strcmp(arg[3],"z") == 0) { + direction = 2; + box_change |= BOX_CHANGE_Z; + } else error->all(FLERR,"Illegal fix msst command"); velocity = force->numeric(FLERR,arg[4]); if (velocity < 0) error->all(FLERR,"Illegal fix msst command"); diff --git a/src/SNAP/compute_snap.cpp b/src/SNAP/compute_snap.cpp index e96eae53d63dabbb505d1d6d173b84d63c889275..91182580ed20c73505ea81289f1da3376f9db72b 100644 --- a/src/SNAP/compute_snap.cpp +++ b/src/SNAP/compute_snap.cpp @@ -33,7 +33,8 @@ enum{SCALAR,VECTOR,ARRAY}; ComputeSnap::ComputeSnap(LAMMPS *lmp, int narg, char **arg) : Compute(lmp, narg, arg), cutsq(NULL), list(NULL), snap(NULL), - radelem(NULL), wjelem(NULL), snap_peratom(NULL), snapall(NULL) + snapall(NULL), snap_peratom(NULL), radelem(NULL), wjelem(NULL), + snaptr(NULL) { array_flag = 1; @@ -41,9 +42,6 @@ ComputeSnap::ComputeSnap(LAMMPS *lmp, int narg, char **arg) : double rfac0, rmin0; int twojmax, switchflag, bzeroflag; - radelem = NULL; - wjelem = NULL; - int ntypes = atom->ntypes; int nargmin = 6+2*ntypes; @@ -444,7 +442,6 @@ void ComputeSnap::compute_array() const int typeoffset_local = ndims_peratom*nperdim*itype; const int typeoffset_global = nperdim*itype; for (int icoeff = 0; icoeff < nperdim; icoeff++) { - int irow = 1; for (int i = 0; i < ntotal; i++) { double *snadi = snap_peratom[i]+typeoffset_local; int iglobal = atom->tag[i]; diff --git a/src/SNAP/pair_snap.cpp b/src/SNAP/pair_snap.cpp index c61af493ab47c65fb6a261d4a74e547ab9565d6f..7f7d3fe9f5d63b5ee618e557ba8ec819880b8196 100644 --- a/src/SNAP/pair_snap.cpp +++ b/src/SNAP/pair_snap.cpp @@ -25,6 +25,7 @@ #include "sna.h" #include "memory.h" #include "error.h" +#include "utils.h" using namespace LAMMPS_NS; @@ -548,7 +549,7 @@ void PairSNAP::read_files(char *coefffilename, char *paramfilename) // strip comment, skip line if blank if ((ptr = strchr(line,'#'))) *ptr = '\0'; - nwords = atom->count_words(line); + nwords = utils::count_words(line); } if (nwords != 2) error->all(FLERR,"Incorrect format in SNAP coefficient file"); @@ -589,7 +590,7 @@ void PairSNAP::read_files(char *coefffilename, char *paramfilename) MPI_Bcast(&n,1,MPI_INT,0,world); MPI_Bcast(line,n,MPI_CHAR,0,world); - nwords = atom->count_words(line); + nwords = utils::count_words(line); if (nwords != 3) error->all(FLERR,"Incorrect format in SNAP coefficient file"); @@ -631,7 +632,7 @@ void PairSNAP::read_files(char *coefffilename, char *paramfilename) MPI_Bcast(&n,1,MPI_INT,0,world); MPI_Bcast(line,n,MPI_CHAR,0,world); - nwords = atom->count_words(line); + nwords = utils::count_words(line); if (nwords != 1) error->all(FLERR,"Incorrect format in SNAP coefficient file"); @@ -691,7 +692,7 @@ void PairSNAP::read_files(char *coefffilename, char *paramfilename) // strip comment, skip line if blank if ((ptr = strchr(line,'#'))) *ptr = '\0'; - nwords = atom->count_words(line); + nwords = utils::count_words(line); if (nwords == 0) continue; if (nwords != 2) diff --git a/src/SPIN/atom_vec_spin.cpp b/src/SPIN/atom_vec_spin.cpp index 28c52bb39d9ce2489a14d5f8700d47708321641e..ef0a79a8d3c913f8b4c07eac423c3d7d2944367a 100644 --- a/src/SPIN/atom_vec_spin.cpp +++ b/src/SPIN/atom_vec_spin.cpp @@ -27,13 +27,6 @@ #include #include #include "atom.h" -#include "comm.h" -#include "domain.h" -#include "error.h" -#include "fix.h" -#include "memory.h" -#include "modify.h" -#include "utils.h" using namespace LAMMPS_NS; @@ -45,918 +38,65 @@ AtomVecSpin::AtomVecSpin(LAMMPS *lmp) : AtomVec(lmp) mass_type = 1; forceclearflag = 1; - comm_x_only = 0; - comm_f_only = 0; - size_forward = 7; - size_reverse = 9; - size_border = 10; - size_velocity = 3; - size_data_atom = 9; - size_data_vel = 4; - xcol_data = 4; - atom->sp_flag = 1; -} - -/* ---------------------------------------------------------------------- - grow atom arrays - n = 0 grows arrays by a chunk - n > 0 allocates arrays to size n -------------------------------------------------------------------------- */ - -void AtomVecSpin::grow(int n) -{ - if (n == 0) grow_nmax(); - else nmax = n; - atom->nmax = nmax; - if (nmax < 0 || nmax > MAXSMALLINT) - error->one(FLERR,"Per-processor system is too big"); - tag = memory->grow(atom->tag,nmax,"atom:tag"); - type = memory->grow(atom->type,nmax,"atom:type"); - mask = memory->grow(atom->mask,nmax,"atom:mask"); - image = memory->grow(atom->image,nmax,"atom:image"); + // strings with peratom variables to include in each AtomVec method + // strings cannot contain fields in corresponding AtomVec default strings + // order of fields in a string does not matter + // except: fields_data_atom & fields_data_vel must match data file - // allocating mech. quantities + fields_grow = (char *) "sp fm fm_long"; + fields_copy = (char *) "sp"; + fields_comm = (char *) "sp"; + fields_comm_vel = (char *) "sp"; + fields_reverse = (char *) "fm fm_long"; + fields_border = (char *) "sp"; + fields_border_vel = (char *) "sp"; + fields_exchange = (char *) "sp"; + fields_restart = (char *) "sp"; + fields_create = (char *) "sp"; + fields_data_atom = (char *) "id type x sp"; + fields_data_vel = (char *) "id v"; - x = memory->grow(atom->x,nmax,3,"atom:x"); - v = memory->grow(atom->v,nmax,3,"atom:v"); - f = memory->grow(atom->f,nmax*comm->nthreads,3,"atom:f"); - - // allocating mag. quantities - - sp = memory->grow(atom->sp,nmax,4,"atom:sp"); - fm = memory->grow(atom->fm,nmax*comm->nthreads,3,"atom:fm"); - fm_long = memory->grow(atom->fm_long,nmax*comm->nthreads,3,"atom:fm_long"); - - if (atom->nextra_grow) - for (int iextra = 0; iextra < atom->nextra_grow; iextra++) - modify->fix[atom->extra_grow[iextra]]->grow_arrays(nmax); + setup_fields(); } /* ---------------------------------------------------------------------- - reset local array ptrs + set local copies of all grow ptrs used by this class, except defaults + needed in replicate when 2 atom classes exist and it calls pack_restart() ------------------------------------------------------------------------- */ -void AtomVecSpin::grow_reset() +void AtomVecSpin::grow_pointers() { - tag = atom->tag; type = atom->type; - mask = atom->mask; image = atom->image; - x = atom->x; v = atom->v; f = atom->f; - sp = atom->sp; fm = atom->fm; fm_long = atom->fm_long; + sp = atom->sp; + fm = atom->fm; + fm_long = atom->fm_long; } /* ---------------------------------------------------------------------- - copy atom I info to atom J + clear extra forces starting at atom N + nbytes = # of bytes to clear for a per-atom vector + include f b/c this is invoked from within SPIN pair styles ------------------------------------------------------------------------- */ -void AtomVecSpin::copy(int i, int j, int delflag) -{ - tag[j] = tag[i]; - type[j] = type[i]; - mask[j] = mask[i]; - image[j] = image[i]; - x[j][0] = x[i][0]; - x[j][1] = x[i][1]; - x[j][2] = x[i][2]; - v[j][0] = v[i][0]; - v[j][1] = v[i][1]; - v[j][2] = v[i][2]; - - sp[j][0] = sp[i][0]; - sp[j][1] = sp[i][1]; - sp[j][2] = sp[i][2]; - sp[j][3] = sp[i][3]; - - if (atom->nextra_grow) - for (int iextra = 0; iextra < atom->nextra_grow; iextra++) - modify->fix[atom->extra_grow[iextra]]->copy_arrays(i,j,delflag); -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecSpin::pack_comm(int n, int *list, double *buf, - int pbc_flag, int *pbc) -{ - int i,j,m; - double dx,dy,dz; - - m = 0; - if (pbc_flag == 0) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = x[j][0]; - buf[m++] = x[j][1]; - buf[m++] = x[j][2]; - buf[m++] = sp[j][0]; - buf[m++] = sp[j][1]; - buf[m++] = sp[j][2]; - buf[m++] = sp[j][3]; - } - } else { - if (domain->triclinic == 0) { - dx = pbc[0]*domain->xprd; - dy = pbc[1]*domain->yprd; - dz = pbc[2]*domain->zprd; - } else { - dx = pbc[0]*domain->xprd + pbc[5]*domain->xy + pbc[4]*domain->xz; - dy = pbc[1]*domain->yprd + pbc[3]*domain->yz; - dz = pbc[2]*domain->zprd; - } - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = x[j][0] + dx; - buf[m++] = x[j][1] + dy; - buf[m++] = x[j][2] + dz; - buf[m++] = sp[j][0]; - buf[m++] = sp[j][1]; - buf[m++] = sp[j][2]; - buf[m++] = sp[j][3]; - } - } - return m; -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecSpin::pack_comm_vel(int n, int *list, double *buf, - int pbc_flag, int *pbc) +void AtomVecSpin::force_clear(int n, size_t nbytes) { - int i,j,m; - double dx,dy,dz,dvx,dvy,dvz; - - m = 0; - if (pbc_flag == 0) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = x[j][0]; - buf[m++] = x[j][1]; - buf[m++] = x[j][2]; - buf[m++] = sp[j][0]; - buf[m++] = sp[j][1]; - buf[m++] = sp[j][2]; - buf[m++] = sp[j][3]; - buf[m++] = v[j][0]; - buf[m++] = v[j][1]; - buf[m++] = v[j][2]; - } - } else { - if (domain->triclinic == 0) { - dx = pbc[0]*domain->xprd; - dy = pbc[1]*domain->yprd; - dz = pbc[2]*domain->zprd; - } else { - dx = pbc[0]*domain->xprd + pbc[5]*domain->xy + pbc[4]*domain->xz; - dy = pbc[1]*domain->yprd + pbc[3]*domain->yz; - dz = pbc[2]*domain->zprd; - } - if (!deform_vremap) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = x[j][0] + dx; - buf[m++] = x[j][1] + dy; - buf[m++] = x[j][2] + dz; - buf[m++] = sp[j][0]; - buf[m++] = sp[j][1]; - buf[m++] = sp[j][2]; - buf[m++] = sp[j][3]; - buf[m++] = v[j][0]; - buf[m++] = v[j][1]; - buf[m++] = v[j][2]; - } - } else { - dvx = pbc[0]*h_rate[0] + pbc[5]*h_rate[5] + pbc[4]*h_rate[4]; - dvy = pbc[1]*h_rate[1] + pbc[3]*h_rate[3]; - dvz = pbc[2]*h_rate[2]; - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = x[j][0] + dx; - buf[m++] = x[j][1] + dy; - buf[m++] = x[j][2] + dz; - buf[m++] = sp[j][0]; - buf[m++] = sp[j][1]; - buf[m++] = sp[j][2]; - buf[m++] = sp[j][3]; - if (mask[i] & deform_groupbit) { - buf[m++] = v[j][0] + dvx; - buf[m++] = v[j][1] + dvy; - buf[m++] = v[j][2] + dvz; - } else { - buf[m++] = v[j][0]; - buf[m++] = v[j][1]; - buf[m++] = v[j][2]; - } - } - } - } - return m; -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecSpin::pack_comm_hybrid(int n, int *list, double *buf) -{ - int i,j,m; - - m = 0; - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = sp[j][3]; - buf[m++] = sp[j][0]; - buf[m++] = sp[j][1]; - buf[m++] = sp[j][2]; - } - return m; -} - -/* ---------------------------------------------------------------------- */ - -void AtomVecSpin::unpack_comm(int n, int first, double *buf) -{ - int i,m,last; - - m = 0; - last = first + n; - for (i = first; i < last; i++) { - x[i][0] = buf[m++]; - x[i][1] = buf[m++]; - x[i][2] = buf[m++]; - sp[i][0] = buf[m++]; - sp[i][1] = buf[m++]; - sp[i][2] = buf[m++]; - sp[i][3] = buf[m++]; - } -} - -/* ---------------------------------------------------------------------- */ - -void AtomVecSpin::unpack_comm_vel(int n, int first, double *buf) -{ - int i,m,last; - - m = 0; - last = first + n; - for (i = first; i < last; i++) { - x[i][0] = buf[m++]; - x[i][1] = buf[m++]; - x[i][2] = buf[m++]; - sp[i][0] = buf[m++]; - sp[i][1] = buf[m++]; - sp[i][2] = buf[m++]; - sp[i][3] = buf[m++]; - v[i][0] = buf[m++]; - v[i][1] = buf[m++]; - v[i][2] = buf[m++]; - } -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecSpin::unpack_comm_hybrid(int n, int first, double *buf) -{ - int i,m,last; - - m = 0; - last = first + n; - for (i = first; i < last; i++) { - sp[i][3] = buf[m++]; - sp[i][0] = buf[m++]; - sp[i][1] = buf[m++]; - sp[i][2] = buf[m++]; - } - return m; -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecSpin::pack_reverse(int n, int first, double *buf) -{ - int i,m,last; - m = 0; - last = first + n; - for (i = first; i < last; i++) { - buf[m++] = f[i][0]; - buf[m++] = f[i][1]; - buf[m++] = f[i][2]; - buf[m++] = fm[i][0]; - buf[m++] = fm[i][1]; - buf[m++] = fm[i][2]; - buf[m++] = fm_long[i][0]; - buf[m++] = fm_long[i][1]; - buf[m++] = fm_long[i][2]; - } - - return m; -} - -/* ---------------------------------------------------------------------- */ - -void AtomVecSpin::unpack_reverse(int n, int *list, double *buf) -{ - int i,j,m; - m = 0; - for (i = 0; i < n; i++) { - j = list[i]; - f[j][0] += buf[m++]; - f[j][1] += buf[m++]; - f[j][2] += buf[m++]; - fm[j][0] += buf[m++]; - fm[j][1] += buf[m++]; - fm[j][2] += buf[m++]; - fm_long[j][0] += buf[m++]; - fm_long[j][1] += buf[m++]; - fm_long[j][2] += buf[m++]; - } -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecSpin::pack_border(int n, int *list, double *buf, - int pbc_flag, int *pbc) -{ - int i,j,m; - double dx,dy,dz; - - m = 0; - if (pbc_flag == 0) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = x[j][0]; - buf[m++] = x[j][1]; - buf[m++] = x[j][2]; - buf[m++] = ubuf(tag[j]).d; - buf[m++] = ubuf(type[j]).d; - buf[m++] = ubuf(mask[j]).d; - buf[m++] = sp[j][0]; - buf[m++] = sp[j][1]; - buf[m++] = sp[j][2]; - buf[m++] = sp[j][3]; - } - } else { - if (domain->triclinic == 0) { - dx = pbc[0]*domain->xprd; - dy = pbc[1]*domain->yprd; - dz = pbc[2]*domain->zprd; - } else { - dx = pbc[0]; - dy = pbc[1]; - dz = pbc[2]; - } - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = x[j][0] + dx; - buf[m++] = x[j][1] + dy; - buf[m++] = x[j][2] + dz; - buf[m++] = ubuf(tag[j]).d; - buf[m++] = ubuf(type[j]).d; - buf[m++] = ubuf(mask[j]).d; - buf[m++] = sp[j][0]; - buf[m++] = sp[j][1]; - buf[m++] = sp[j][2]; - buf[m++] = sp[j][3]; - } - } - - if (atom->nextra_border) - for (int iextra = 0; iextra < atom->nextra_border; iextra++) - m += modify->fix[atom->extra_border[iextra]]->pack_border(n,list,&buf[m]); - - return m; -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecSpin::pack_border_vel(int n, int *list, double *buf, - int pbc_flag, int *pbc) -{ - int i,j,m; - double dx,dy,dz,dvx,dvy,dvz; - - m = 0; - if (pbc_flag == 0) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = x[j][0]; - buf[m++] = x[j][1]; - buf[m++] = x[j][2]; - buf[m++] = ubuf(tag[j]).d; - buf[m++] = ubuf(type[j]).d; - buf[m++] = ubuf(mask[j]).d; - buf[m++] = sp[j][0]; - buf[m++] = sp[j][1]; - buf[m++] = sp[j][2]; - buf[m++] = sp[j][3]; - buf[m++] = v[j][0]; - buf[m++] = v[j][1]; - buf[m++] = v[j][2]; - } - } else { - if (domain->triclinic == 0) { - dx = pbc[0]*domain->xprd; - dy = pbc[1]*domain->yprd; - dz = pbc[2]*domain->zprd; - } else { - dx = pbc[0]; - dy = pbc[1]; - dz = pbc[2]; - } - if (!deform_vremap) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = x[j][0] + dx; - buf[m++] = x[j][1] + dy; - buf[m++] = x[j][2] + dz; - buf[m++] = ubuf(tag[j]).d; - buf[m++] = ubuf(type[j]).d; - buf[m++] = ubuf(mask[j]).d; - buf[m++] = sp[j][0]; - buf[m++] = sp[j][1]; - buf[m++] = sp[j][2]; - buf[m++] = sp[j][3]; - buf[m++] = v[j][0]; - buf[m++] = v[j][1]; - buf[m++] = v[j][2]; - } - } else { - dvx = pbc[0]*h_rate[0] + pbc[5]*h_rate[5] + pbc[4]*h_rate[4]; - dvy = pbc[1]*h_rate[1] + pbc[3]*h_rate[3]; - dvz = pbc[2]*h_rate[2]; - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = x[j][0] + dx; - buf[m++] = x[j][1] + dy; - buf[m++] = x[j][2] + dz; - buf[m++] = ubuf(tag[j]).d; - buf[m++] = ubuf(type[j]).d; - buf[m++] = ubuf(mask[j]).d; - buf[m++] = sp[j][0]; - buf[m++] = sp[j][1]; - buf[m++] = sp[j][2]; - buf[m++] = sp[j][3]; - if (mask[i] & deform_groupbit) { - buf[m++] = v[j][0] + dvx; - buf[m++] = v[j][1] + dvy; - buf[m++] = v[j][2] + dvz; - } else { - buf[m++] = v[j][0]; - buf[m++] = v[j][1]; - buf[m++] = v[j][2]; - } - } - } - } - - if (atom->nextra_border) - for (int iextra = 0; iextra < atom->nextra_border; iextra++) - m += modify->fix[atom->extra_border[iextra]]->pack_border(n,list,&buf[m]); - - return m; -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecSpin::pack_border_hybrid(int n, int *list, double *buf) -{ - int i,j,m; - - m = 0; - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = sp[j][3]; - buf[m++] = sp[j][0]; - buf[m++] = sp[j][1]; - buf[m++] = sp[j][2]; - } - - return m; -} - -/* ---------------------------------------------------------------------- */ - -void AtomVecSpin::unpack_border(int n, int first, double *buf) -{ - int i,m,last; - - m = 0; - last = first + n; - for (i = first; i < last; i++) { - if (i == nmax) grow(0); - x[i][0] = buf[m++]; - x[i][1] = buf[m++]; - x[i][2] = buf[m++]; - tag[i] = (tagint) ubuf(buf[m++]).i; - type[i] = (int) ubuf(buf[m++]).i; - mask[i] = (int) ubuf(buf[m++]).i; - sp[i][0] = buf[m++]; - sp[i][1] = buf[m++]; - sp[i][2] = buf[m++]; - sp[i][3] = buf[m++]; - } - - if (atom->nextra_border) - for (int iextra = 0; iextra < atom->nextra_border; iextra++) - m += modify->fix[atom->extra_border[iextra]]-> - unpack_border(n,first,&buf[m]); - -} - -/* ---------------------------------------------------------------------- */ - -void AtomVecSpin::unpack_border_vel(int n, int first, double *buf) -{ - int i,m,last; - - m = 0; - last = first + n; - for (i = first; i < last; i++) { - if (i == nmax) grow(0); - x[i][0] = buf[m++]; - x[i][1] = buf[m++]; - x[i][2] = buf[m++]; - tag[i] = (tagint) ubuf(buf[m++]).i; - type[i] = (int) ubuf(buf[m++]).i; - mask[i] = (int) ubuf(buf[m++]).i; - sp[i][0] = buf[m++]; - sp[i][1] = buf[m++]; - sp[i][2] = buf[m++]; - sp[i][3] = buf[m++]; - v[i][0] = buf[m++]; - v[i][1] = buf[m++]; - v[i][2] = buf[m++]; - } - - if (atom->nextra_border) - for (int iextra = 0; iextra < atom->nextra_border; iextra++) - m += modify->fix[atom->extra_border[iextra]]-> - unpack_border(n,first,&buf[m]); - -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecSpin::unpack_border_hybrid(int n, int first, double *buf) -{ - int i,m,last; - - m = 0; - last = first + n; - for (i = first; i < last; i++) { - sp[i][3] = buf[m++]; - sp[i][0] = buf[m++]; - sp[i][1] = buf[m++]; - sp[i][2] = buf[m++]; - } - - return m; + memset(&f[n][0],0,3*nbytes); + memset(&fm[n][0],0,3*nbytes); + memset(&fm_long[n][0],0,3*nbytes); } /* ---------------------------------------------------------------------- - pack all atom quantities for shipping to another proc - xyz must be 1st 3 values, so that comm::exchange can test on them + modify what AtomVec::data_atom() just unpacked + or initialize other atom quantities ------------------------------------------------------------------------- */ -int AtomVecSpin::pack_exchange(int i, double *buf) +void AtomVecSpin::data_atom_post(int ilocal) { - int m = 1; - buf[m++] = x[i][0]; - buf[m++] = x[i][1]; - buf[m++] = x[i][2]; - buf[m++] = v[i][0]; - buf[m++] = v[i][1]; - buf[m++] = v[i][2]; - buf[m++] = ubuf(tag[i]).d; - buf[m++] = ubuf(type[i]).d; - buf[m++] = ubuf(mask[i]).d; - buf[m++] = ubuf(image[i]).d; - - buf[m++] = sp[i][0]; - buf[m++] = sp[i][1]; - buf[m++] = sp[i][2]; - buf[m++] = sp[i][3]; - - if (atom->nextra_grow) - for (int iextra = 0; iextra < atom->nextra_grow; iextra++) - m += modify->fix[atom->extra_grow[iextra]]->pack_exchange(i,&buf[m]); - - buf[0] = m; - return m; + double *sp_one = sp[ilocal]; + double norm = + 1.0/sqrt(sp_one[0]*sp_one[0] + sp_one[1]*sp_one[1] + sp_one[2]*sp_one[2]); + sp_one[0] *= norm; + sp_one[1] *= norm; + sp_one[2] *= norm; } - -/* ---------------------------------------------------------------------- */ - -int AtomVecSpin::unpack_exchange(double *buf) -{ - int nlocal = atom->nlocal; - if (nlocal == nmax) grow(0); - - int m = 1; - x[nlocal][0] = buf[m++]; - x[nlocal][1] = buf[m++]; - x[nlocal][2] = buf[m++]; - v[nlocal][0] = buf[m++]; - v[nlocal][1] = buf[m++]; - v[nlocal][2] = buf[m++]; - tag[nlocal] = (tagint) ubuf(buf[m++]).i; - type[nlocal] = (int) ubuf(buf[m++]).i; - mask[nlocal] = (int) ubuf(buf[m++]).i; - image[nlocal] = (imageint) ubuf(buf[m++]).i; - - sp[nlocal][0] = buf[m++]; - sp[nlocal][1] = buf[m++]; - sp[nlocal][2] = buf[m++]; - sp[nlocal][3] = buf[m++]; - - if (atom->nextra_grow) - for (int iextra = 0; iextra < atom->nextra_grow; iextra++) - m += modify->fix[atom->extra_grow[iextra]]-> - unpack_exchange(nlocal,&buf[m]); - - atom->nlocal++; - - return m; -} - -/* ---------------------------------------------------------------------- - size of restart data for all atoms owned by this proc - include extra data stored by fixes -------------------------------------------------------------------------- */ - -int AtomVecSpin::size_restart() -{ - int i; - - int nlocal = atom->nlocal; - int n = 15 * nlocal; - - if (atom->nextra_restart) - for (int iextra = 0; iextra < atom->nextra_restart; iextra++) - for (i = 0; i < nlocal; i++) - n += modify->fix[atom->extra_restart[iextra]]->size_restart(i); - - return n; -} - -/* ---------------------------------------------------------------------- - pack atom I's data for restart file including extra quantities - xyz must be 1st 3 values, so that read_restart can test on them - molecular types may be negative, but write as positive -------------------------------------------------------------------------- */ - -int AtomVecSpin::pack_restart(int i, double *buf) -{ - int m = 1; - - buf[m++] = x[i][0]; - buf[m++] = x[i][1]; - buf[m++] = x[i][2]; - buf[m++] = ubuf(tag[i]).d; - buf[m++] = ubuf(type[i]).d; - buf[m++] = ubuf(mask[i]).d; - buf[m++] = ubuf(image[i]).d; - buf[m++] = v[i][0]; - buf[m++] = v[i][1]; - buf[m++] = v[i][2]; - - buf[m++] = sp[i][0]; - buf[m++] = sp[i][1]; - buf[m++] = sp[i][2]; - buf[m++] = sp[i][3]; - - if (atom->nextra_restart) - for (int iextra = 0; iextra < atom->nextra_restart; iextra++) - m += modify->fix[atom->extra_restart[iextra]]->pack_restart(i,&buf[m]); - - buf[0] = m; - return m; -} - -/* ---------------------------------------------------------------------- - unpack data for one atom from restart file including extra quantities -------------------------------------------------------------------------- */ - -int AtomVecSpin::unpack_restart(double *buf) -{ - int nlocal = atom->nlocal; - if (nlocal == nmax) { - grow(0); - if (atom->nextra_store) - memory->grow(atom->extra,nmax,atom->nextra_store,"atom:extra"); - } - - int m = 1; - x[nlocal][0] = buf[m++]; - x[nlocal][1] = buf[m++]; - x[nlocal][2] = buf[m++]; - tag[nlocal] = (tagint) ubuf(buf[m++]).i; - type[nlocal] = (int) ubuf(buf[m++]).i; - mask[nlocal] = (int) ubuf(buf[m++]).i; - image[nlocal] = (imageint) ubuf(buf[m++]).i; - v[nlocal][0] = buf[m++]; - v[nlocal][1] = buf[m++]; - v[nlocal][2] = buf[m++]; - - sp[nlocal][0] = buf[m++]; - sp[nlocal][1] = buf[m++]; - sp[nlocal][2] = buf[m++]; - sp[nlocal][3] = buf[m++]; - - double **extra = atom->extra; - if (atom->nextra_store) { - int size = static_cast (buf[0]) - m; - for (int i = 0; i < size; i++) extra[nlocal][i] = buf[m++]; - } - - atom->nlocal++; - return m; -} - -/* ---------------------------------------------------------------------- - create one atom of itype at coord - set other values to defaults -------------------------------------------------------------------------- */ - -void AtomVecSpin::create_atom(int itype, double *coord) -{ - - int nlocal = atom->nlocal; - if (nlocal == nmax) grow(0); - - tag[nlocal] = 0; - type[nlocal] = itype; - x[nlocal][0] = coord[0]; - x[nlocal][1] = coord[1]; - x[nlocal][2] = coord[2]; - mask[nlocal] = 1; - image[nlocal] = ((imageint) IMGMAX << IMG2BITS) | - ((imageint) IMGMAX << IMGBITS) | IMGMAX; - v[nlocal][0] = 0.0; - v[nlocal][1] = 0.0; - v[nlocal][2] = 0.0; - - sp[nlocal][0] = 0.0; - sp[nlocal][1] = 0.0; - sp[nlocal][2] = 0.0; - sp[nlocal][3] = 0.0; - - atom->nlocal++; -} - -/* ---------------------------------------------------------------------- - unpack one line from Atoms section of data file - initialize other atom quantities -------------------------------------------------------------------------- */ - -void AtomVecSpin::data_atom(double *coord, imageint imagetmp, char **values) -{ - int nlocal = atom->nlocal; - if (nlocal == nmax) grow(0); - - tag[nlocal] = utils::tnumeric(FLERR,values[0],true,lmp); - type[nlocal] = utils::inumeric(FLERR,values[1],true,lmp); - if (type[nlocal] <= 0 || type[nlocal] > atom->ntypes) - error->one(FLERR,"Invalid atom type in Atoms section of data file"); - - x[nlocal][0] = coord[0]; - x[nlocal][1] = coord[1]; - x[nlocal][2] = coord[2]; - - sp[nlocal][3] = utils::numeric(FLERR,values[2],true,lmp); - sp[nlocal][0] = utils::numeric(FLERR,values[6],true,lmp); - sp[nlocal][1] = utils::numeric(FLERR,values[7],true,lmp); - sp[nlocal][2] = utils::numeric(FLERR,values[8],true,lmp); - double inorm = 1.0/sqrt(sp[nlocal][0]*sp[nlocal][0] + - sp[nlocal][1]*sp[nlocal][1] + - sp[nlocal][2]*sp[nlocal][2]); - sp[nlocal][0] *= inorm; - sp[nlocal][1] *= inorm; - sp[nlocal][2] *= inorm; - - image[nlocal] = imagetmp; - - mask[nlocal] = 1; - v[nlocal][0] = 0.0; - v[nlocal][1] = 0.0; - v[nlocal][2] = 0.0; - - atom->nlocal++; -} - -/* ---------------------------------------------------------------------- - unpack hybrid quantities from one line in Atoms section of data file - initialize other atom quantities for this sub-style -------------------------------------------------------------------------- */ - -int AtomVecSpin::data_atom_hybrid(int nlocal, char **values) -{ - sp[nlocal][3] = utils::numeric(FLERR,values[0],true,lmp); - sp[nlocal][0] = utils::numeric(FLERR,values[1],true,lmp); - sp[nlocal][1] = utils::numeric(FLERR,values[2],true,lmp); - sp[nlocal][2] = utils::numeric(FLERR,values[3],true,lmp); - double inorm = 1.0/sqrt(sp[nlocal][0]*sp[nlocal][0] + - sp[nlocal][1]*sp[nlocal][1] + - sp[nlocal][2]*sp[nlocal][2]); - sp[nlocal][0] *= inorm; - sp[nlocal][1] *= inorm; - sp[nlocal][2] *= inorm; - - return 4; -} - -/* ---------------------------------------------------------------------- - pack atom info for data file including 3 image flags -------------------------------------------------------------------------- */ - -void AtomVecSpin::pack_data(double **buf) -{ - int nlocal = atom->nlocal; - for (int i = 0; i < nlocal; i++) { - buf[i][0] = ubuf(tag[i]).d; - buf[i][1] = ubuf(type[i]).d; - buf[i][2] = sp[i][3]; - buf[i][3] = x[i][0]; - buf[i][4] = x[i][1]; - buf[i][5] = x[i][2]; - buf[i][6] = sp[i][0]; - buf[i][7] = sp[i][1]; - buf[i][8] = sp[i][2]; - buf[i][9] = ubuf((image[i] & IMGMASK) - IMGMAX).d; - buf[i][10] = ubuf((image[i] >> IMGBITS & IMGMASK) - IMGMAX).d; - buf[i][11] = ubuf((image[i] >> IMG2BITS) - IMGMAX).d; - } -} - -/* ---------------------------------------------------------------------- - pack hybrid atom info for data file -------------------------------------------------------------------------- */ - -int AtomVecSpin::pack_data_hybrid(int i, double *buf) -{ - buf[0] = sp[i][3]; - buf[1] = sp[i][0]; - buf[2] = sp[i][1]; - buf[3] = sp[i][2]; - return 4; -} - -/* ---------------------------------------------------------------------- - write atom info to data file including 3 image flags -------------------------------------------------------------------------- */ - -void AtomVecSpin::write_data(FILE *fp, int n, double **buf) -{ - for (int i = 0; i < n; i++) - fprintf(fp,TAGINT_FORMAT \ - " %d %-1.16e %-1.16e %-1.16e %-1.16e %-1.16e %-1.16e " - "%-1.16e %d %d %d\n", - (tagint) ubuf(buf[i][0]).i,(int) ubuf(buf[i][1]).i, - buf[i][2],buf[i][3],buf[i][4], - buf[i][5],buf[i][6],buf[i][7],buf[i][8], - (int) ubuf(buf[i][9]).i,(int) ubuf(buf[i][10]).i, - (int) ubuf(buf[i][11]).i); -} - -/* ---------------------------------------------------------------------- - write hybrid atom info to data file -------------------------------------------------------------------------- */ - -int AtomVecSpin::write_data_hybrid(FILE *fp, double *buf) -{ - fprintf(fp," %-1.16e %-1.16e %-1.16e %-1.16e",buf[0],buf[1],buf[2],buf[3]); - return 4; -} - -/* ---------------------------------------------------------------------- - return # of bytes of allocated memory -------------------------------------------------------------------------- */ - -bigint AtomVecSpin::memory_usage() -{ - bigint bytes = 0; - - if (atom->memcheck("tag")) bytes += memory->usage(tag,nmax); - if (atom->memcheck("type")) bytes += memory->usage(type,nmax); - if (atom->memcheck("mask")) bytes += memory->usage(mask,nmax); - if (atom->memcheck("image")) bytes += memory->usage(image,nmax); - if (atom->memcheck("x")) bytes += memory->usage(x,nmax,3); - if (atom->memcheck("v")) bytes += memory->usage(v,nmax,3); - if (atom->memcheck("f")) bytes += memory->usage(f,nmax*comm->nthreads,3); - - if (atom->memcheck("sp")) bytes += memory->usage(sp,nmax,4); - if (atom->memcheck("fm")) bytes += memory->usage(fm,nmax*comm->nthreads,3); - if (atom->memcheck("fm_long")) bytes += memory->usage(fm_long,nmax*comm->nthreads,3); - - return bytes; -} - -/* ---------------------------------------------------------------------- - clear all forces (mech and mag) -------------------------------------------------------------------------- */ - -void AtomVecSpin::force_clear(int /*n*/, size_t nbytes) -{ - memset(&atom->f[0][0],0,3*nbytes); - memset(&atom->fm[0][0],0,3*nbytes); - memset(&atom->fm_long[0][0],0,3*nbytes); -} - - diff --git a/src/SPIN/atom_vec_spin.h b/src/SPIN/atom_vec_spin.h index 6ce2c9dc7d03ef09e3330ff24859cdc5dcf8a75d..f24791605d742c214639c97d92f0ea0575cb8434 100644 --- a/src/SPIN/atom_vec_spin.h +++ b/src/SPIN/atom_vec_spin.h @@ -27,53 +27,13 @@ namespace LAMMPS_NS { class AtomVecSpin : public AtomVec { public: AtomVecSpin(class LAMMPS *); - void grow(int); - void grow_reset(); - void copy(int, int, int); - int pack_comm(int, int *, double *, int, int *); - int pack_comm_vel(int, int *, double *, int, int *); - int pack_comm_hybrid(int, int *, double *); - void unpack_comm(int, int, double *); - void unpack_comm_vel(int, int, double *); - int unpack_comm_hybrid(int, int, double *); - int pack_reverse(int, int, double *); - void unpack_reverse(int, int *, double *); - int pack_border(int, int *, double *, int, int *); - int pack_border_vel(int, int *, double *, int, int *); - int pack_border_hybrid(int, int *, double *); - void unpack_border(int, int, double *); - void unpack_border_vel(int, int, double *); - int unpack_border_hybrid(int, int, double *); - int pack_exchange(int, double *); - int unpack_exchange(double *); - int size_restart(); - int pack_restart(int, double *); - int unpack_restart(double *); - void create_atom(int, double *); - void data_atom(double *, imageint, char **); - int data_atom_hybrid(int, char **); - void pack_data(double **); - int pack_data_hybrid(int, double *); - void write_data(FILE *, int, double **); - int write_data_hybrid(FILE *, double *); - bigint memory_usage(); - - // clear magnetic and mechanic forces + void grow_pointers(); void force_clear(int, size_t); - + void data_atom_post(int); private: - tagint *tag; - int *type,*mask; - imageint *image; - double **x,**v,**f; // lattice quantities - - // spin quantities - double **sp; // sp[i][0-2] direction of the spin i - // sp[i][3] atomic magnetic moment of the spin i - double **fm; // fm[i][0-2] direction of magnetic precession - double **fm_long; // storage of long-range spin prec. components + double **sp,**fm,**fm_long; }; } @@ -83,13 +43,4 @@ class AtomVecSpin : public AtomVec { /* ERROR/WARNING messages: -E: Per-processor system is too big - -The number of owned atoms plus ghost atoms on a single -processor must fit in 32-bit integer. - -E: Invalid atom type in Atoms section of data file - -Atom types must range from 1 to specified # of types. - */ diff --git a/src/SPIN/compute_spin.cpp b/src/SPIN/compute_spin.cpp index 7ee2b5bcfc34dd4cd6b369ecdefbe64701bbdee2..94eff27f5357e08e541be9aeeae989bd26f41aec 100644 --- a/src/SPIN/compute_spin.cpp +++ b/src/SPIN/compute_spin.cpp @@ -24,11 +24,15 @@ #include "compute_spin.h" #include #include +#include #include "atom.h" #include "error.h" +#include "fix_precession_spin.h" #include "force.h" #include "math_const.h" #include "memory.h" +#include "modify.h" +#include "pair_spin.h" #include "update.h" using namespace LAMMPS_NS; @@ -37,7 +41,7 @@ using namespace MathConst; /* ---------------------------------------------------------------------- */ ComputeSpin::ComputeSpin(LAMMPS *lmp, int narg, char **arg) : - Compute(lmp, narg, arg) + Compute(lmp, narg, arg), pair(NULL), spin_pairs(NULL) { if ((narg != 3) && (narg != 4)) error->all(FLERR,"Illegal compute compute/spin command"); @@ -45,6 +49,12 @@ ComputeSpin::ComputeSpin(LAMMPS *lmp, int narg, char **arg) : size_vector = 6; extvector = 0; + // initialize the magnetic interaction flags + + pair_spin_flag = 0; + long_spin_flag = 0; + precession_spin_flag = 0; + init(); allocate(); @@ -56,6 +66,7 @@ ComputeSpin::ComputeSpin(LAMMPS *lmp, int narg, char **arg) : ComputeSpin::~ComputeSpin() { memory->destroy(vector); + delete [] spin_pairs; } /* ---------------------------------------------------------------------- */ @@ -64,6 +75,70 @@ void ComputeSpin::init() { hbar = force->hplanck/MY_2PI; kb = force->boltz; + npairs = npairspin = 0; + precession_spin_flag = 0; + + // set ptrs on Pair/Spin styles + + // loop 1: obtain # of Pairs, and # of Pair/Spin styles + + if (force->pair_match("spin",0,0)) { // only one Pair/Spin style + pair = force->pair_match("spin",0,0); + npairs = pair->instance_total; + npairspin = 1; + } else if (force->pair_match("spin",0,1)) { // more than one Pair/Spin style + pair = force->pair_match("spin",0,1); + npairs = pair->instance_total; + for (int i = 0; ipair_match("spin",0,i)) { + npairspin ++; + } + } + } + + // init length of vector of ptrs to Pair/Spin styles + + if (npairspin > 0) { + spin_pairs = new PairSpin*[npairspin]; + } + + // loop 2: fill vector with ptrs to Pair/Spin styles + + int count = 0; + if (npairspin == 1) { + count = 1; + spin_pairs[0] = (PairSpin *) force->pair_match("spin",0,0); + } else if (npairspin > 1) { + for (int i = 0; ipair_match("spin",0,i)) { + spin_pairs[count] = (PairSpin *) force->pair_match("spin",0,i); + count++; + } + } + } + + if (count != npairspin) + error->all(FLERR,"Incorrect number of spin pairs"); + + // set pair/spin and long/spin flags + + if (npairspin >= 1) pair_spin_flag = 1; + + for (int i = 0; ipair_match("spin/long",0,i)) { + long_spin_flag = 1; + } + } + + // ptrs FixPrecessionSpin classes + + int iforce; + for (iforce = 0; iforce < modify->nfix; iforce++) { + if (strstr(modify->fix[iforce]->style,"precession/spin")) { + precession_spin_flag = 1; + lockprecessionspin = (FixPrecessionSpin *) modify->fix[iforce]; + } + } } /* ---------------------------------------------------------------------- */ @@ -104,7 +179,21 @@ void ComputeSpin::compute_vector() mag[0] += sp[i][0]; mag[1] += sp[i][1]; mag[2] += sp[i][2]; - magenergy -= (sp[i][0]*fm[i][0] + sp[i][1]*fm[i][1] + sp[i][2]*fm[i][2]); + + // update magnetic precession energies + + if (precession_spin_flag) { + magenergy += lockprecessionspin->emag[i]; + } + + // update magnetic pair interactions + + if (pair_spin_flag) { + for (int k = 0; k < npairspin; k++) { + magenergy += spin_pairs[k]->emag[i]; + } + } + tx = sp[i][1]*fm[i][2]-sp[i][2]*fm[i][1]; ty = sp[i][2]*fm[i][0]-sp[i][0]*fm[i][2]; tz = sp[i][0]*fm[i][1]-sp[i][1]*fm[i][0]; @@ -134,7 +223,7 @@ void ComputeSpin::compute_vector() vector[1] = magtot[1]; vector[2] = magtot[2]; vector[3] = magtot[3]; - vector[4] = magenergytot*hbar; + vector[4] = magenergytot; vector[5] = spintemperature; } diff --git a/src/SPIN/compute_spin.h b/src/SPIN/compute_spin.h index c5d55b84cb17ba69bc4902111a88c188a0123fe4..d98a61bb393b43b9d4c6fd042c09eab4744a7dfe 100644 --- a/src/SPIN/compute_spin.h +++ b/src/SPIN/compute_spin.h @@ -32,8 +32,22 @@ class ComputeSpin : public Compute { void compute_vector(); private: + int pair_spin_flag; // magnetic pair flags + int long_spin_flag; // magnetic long-range flag + int precession_spin_flag; // magnetic precession flags + double kb,hbar; + // pointers to magnetic fixes + + class FixPrecessionSpin *lockprecessionspin; + + // pointers to magnetic pair styles + + int npairs, npairspin; // # of pairs, and # of spin pairs + class Pair *pair; + class PairSpin **spin_pairs; // vector of spin pairs + void allocate(); }; diff --git a/src/SPIN/fix_precession_spin.cpp b/src/SPIN/fix_precession_spin.cpp index 2d55de33ea3cc936ac8831da37f5fa7fe3b06cdd..b788d27d05bfbf077c206b63a71b34b05f2540d0 100644 --- a/src/SPIN/fix_precession_spin.cpp +++ b/src/SPIN/fix_precession_spin.cpp @@ -30,6 +30,7 @@ #include "force.h" #include "input.h" #include "math_const.h" +#include "memory.h" #include "modify.h" #include "respa.h" #include "update.h" @@ -43,7 +44,7 @@ enum{CONSTANT,EQUAL}; /* ---------------------------------------------------------------------- */ -FixPrecessionSpin::FixPrecessionSpin(LAMMPS *lmp, int narg, char **arg) : Fix(lmp, narg, arg) +FixPrecessionSpin::FixPrecessionSpin(LAMMPS *lmp, int narg, char **arg) : Fix(lmp, narg, arg), emag(NULL) { if (narg < 7) error->all(FLERR,"Illegal precession/spin command"); @@ -154,6 +155,7 @@ FixPrecessionSpin::FixPrecessionSpin(LAMMPS *lmp, int narg, char **arg) : Fix(lm FixPrecessionSpin::~FixPrecessionSpin() { delete [] magstr; + memory->destroy(emag); } /* ---------------------------------------------------------------------- */ @@ -197,6 +199,15 @@ void FixPrecessionSpin::init() error->all(FLERR,"Illegal precession/spin command"); } + // check that fix precession/spin is only declared once + + int iprec = 0; + for (int iforce = 0; iforce < modify->nfix; iforce++) + if (strstr(modify->fix[iforce]->style,"precession/spin")) iprec++; + if (iprec > 1) + error->all(FLERR,"precession/spin command can only be declared once"); + + varflag = CONSTANT; if (magfieldstyle != CONSTANT) varflag = EQUAL; @@ -204,6 +215,10 @@ void FixPrecessionSpin::init() if (varflag == CONSTANT) set_magneticprecession(); + // init. size of energy stacking lists + + nlocal_max = atom->nlocal; + memory->grow(emag,nlocal_max,"pair/spin:emag"); } /* ---------------------------------------------------------------------- */ @@ -243,21 +258,30 @@ void FixPrecessionSpin::post_force(int /* vflag */) double **fm = atom->fm; double **sp = atom->sp; const int nlocal = atom->nlocal; - double spi[3], fmi[3], epreci; + double spi[4], fmi[3], epreci; + + // checking size of emag + + if (nlocal_max < nlocal) { // grow emag lists if necessary + nlocal_max = nlocal; + memory->grow(emag,nlocal_max,"pair/spin:emag"); + } eflag = 0; eprec = 0.0; for (int i = 0; i < nlocal; i++) { + emag[i] = 0.0; if (mask[i] & groupbit) { epreci = 0.0; spi[0] = sp[i][0]; spi[1] = sp[i][1]; spi[2] = sp[i][2]; + spi[3] = sp[i][3]; fmi[0] = fmi[1] = fmi[2] = 0.0; if (zeeman_flag) { // compute Zeeman interaction compute_zeeman(i,fmi); - epreci -= hbar*(spi[0]*fmi[0] + spi[1]*fmi[1] + spi[2]*fmi[2]); + epreci -= compute_zeeman_energy(spi); } if (aniso_flag) { // compute magnetic anisotropy @@ -270,6 +294,7 @@ void FixPrecessionSpin::post_force(int /* vflag */) epreci -= compute_cubic_energy(spi); } + emag[i] += epreci; eprec += epreci; fm[i][0] += fmi[0]; fm[i][1] += fmi[1]; @@ -302,6 +327,16 @@ void FixPrecessionSpin::compute_zeeman(int i, double fmi[3]) /* ---------------------------------------------------------------------- */ +double FixPrecessionSpin::compute_zeeman_energy(double spi[4]) +{ + double energy = 0.0; + double scalar = nhx*spi[0]+nhy*spi[1]+nhz*spi[2]; + energy = hbar*H_field*spi[3]*scalar; + return energy; +} + +/* ---------------------------------------------------------------------- */ + void FixPrecessionSpin::compute_anisotropy(double spi[3], double fmi[3]) { double scalar = nax*spi[0] + nay*spi[1] + naz*spi[2]; diff --git a/src/SPIN/fix_precession_spin.h b/src/SPIN/fix_precession_spin.h index 6ece653ca70cb62ab289f07d5b0371f4926c8dc1..9c3c616077a938ef1232ed037281e6948e0603ae 100644 --- a/src/SPIN/fix_precession_spin.h +++ b/src/SPIN/fix_precession_spin.h @@ -41,7 +41,11 @@ class FixPrecessionSpin : public Fix { int zeeman_flag, aniso_flag, cubic_flag; void compute_single_precession(int, double *, double *); + + // zeeman calculations + void compute_zeeman(int, double *); + double compute_zeeman_energy(double *); // uniaxial aniso calculations @@ -53,6 +57,11 @@ class FixPrecessionSpin : public Fix { void compute_cubic(double *, double *); double compute_cubic_energy(double *); + // storing magnetic energies + + int nlocal_max; // max nlocal (for list size) + double *emag; // energy list + protected: int style; // style of the magnetic precession diff --git a/src/SPIN/neb_spin.cpp b/src/SPIN/neb_spin.cpp index 075850d1afb82e0c566d641834f140b90f8aca99..5d58a22567f9e967cb425cdc8d5ce663729d8616 100644 --- a/src/SPIN/neb_spin.cpp +++ b/src/SPIN/neb_spin.cpp @@ -441,7 +441,7 @@ void NEBSpin::readfile(char *file, int flag) buf = buffer; next = strchr(buf,'\n'); *next = '\0'; - int nwords = atom->count_words(buf); + int nwords = utils::count_words(buf); *next = '\n'; if (nwords != ATTRIBUTE_PERLINE) diff --git a/src/SPIN/pair_spin.cpp b/src/SPIN/pair_spin.cpp index f167e3455c329d6c6801e1d076df6e292efaeb35..b0965d12711ae1e1b8c5feee845fce8e957005a8 100644 --- a/src/SPIN/pair_spin.cpp +++ b/src/SPIN/pair_spin.cpp @@ -29,6 +29,7 @@ #include "fix.h" #include "force.h" #include "math_const.h" +#include "memory.h" #include "modify.h" #include "neighbor.h" #include "neigh_request.h" @@ -41,7 +42,7 @@ using namespace MathConst; /* ---------------------------------------------------------------------- */ -PairSpin::PairSpin(LAMMPS *lmp) : Pair(lmp) +PairSpin::PairSpin(LAMMPS *lmp) : Pair(lmp), emag(NULL) { hbar = force->hplanck/MY_2PI; single_enable = 0; @@ -86,6 +87,11 @@ void PairSpin::init_style() if (!have_fix && (comm->me == 0)) error->warning(FLERR,"Using spin pair style without nve/spin or neb/spin"); + // check if newton pair is on + + if ((force->newton_pair == 0) && (comm->me == 0)) + error->all(FLERR,"Pair style spin requires newton pair on"); + // need a full neighbor list int irequest = neighbor->request(this,instance_me); @@ -98,4 +104,8 @@ void PairSpin::init_style() if (ifix >=0) lattice_flag = ((FixNVESpin *) modify->fix[ifix])->lattice_flag; + // init. size of energy stacking lists + + nlocal_max = atom->nlocal; + memory->grow(emag,nlocal_max,"pair/spin:emag"); } diff --git a/src/SPIN/pair_spin.h b/src/SPIN/pair_spin.h index 34f12d8d59a2ff9dd70cc45546131368cf95877c..8bbb27ed0639f0f563ec56ad1f17526c057fa3dc 100644 --- a/src/SPIN/pair_spin.h +++ b/src/SPIN/pair_spin.h @@ -32,6 +32,11 @@ friend class FixNVESpin; virtual void compute(int, int) {} virtual void compute_single_pair(int, double *) {} + // storing magnetic energies + + int nlocal_max; // max nlocal (for list size) + double *emag; // energy list + protected: double hbar; // Planck constant (eV.ps.rad-1) int lattice_flag; // flag for mech force computation diff --git a/src/SPIN/pair_spin_dipole_cut.cpp b/src/SPIN/pair_spin_dipole_cut.cpp index a7372b480db9a50a151e5a28d88e5af166997189..cdae3c0babbaf438a3f5d1c28b8c0caddbe2f69e 100644 --- a/src/SPIN/pair_spin_dipole_cut.cpp +++ b/src/SPIN/pair_spin_dipole_cut.cpp @@ -64,6 +64,7 @@ PairSpinDipoleCut::~PairSpinDipoleCut() memory->destroy(setflag); memory->destroy(cut_spin_long); memory->destroy(cutsq); + memory->destroy(emag); } } @@ -185,6 +186,13 @@ void PairSpinDipoleCut::compute(int eflag, int vflag) numneigh = list->numneigh; firstneigh = list->firstneigh; + // checking size of emag + + if (nlocal_max < nlocal) { // grow emag lists if necessary + nlocal_max = nlocal; + memory->grow(emag,nlocal_max,"pair/spin:emag"); + } + // computation of the exchange interaction // loop over atoms and their neighbors @@ -199,6 +207,7 @@ void PairSpinDipoleCut::compute(int eflag, int vflag) spi[1] = sp[i][1]; spi[2] = sp[i][2]; spi[3] = sp[i][3]; + emag[i] = 0.0; itype = type[i]; for (jj = 0; jj < jnum; jj++) { @@ -243,16 +252,11 @@ void PairSpinDipoleCut::compute(int eflag, int vflag) fm[i][1] += fmi[1]; fm[i][2] += fmi[2]; - if (newton_pair || j < nlocal) { - f[j][0] -= fi[0]; - f[j][1] -= fi[1]; - f[j][2] -= fi[2]; - } - if (eflag) { if (rsq <= local_cut2) { evdwl -= (spi[0]*fmi[0] + spi[1]*fmi[1] + spi[2]*fmi[2]); evdwl *= 0.5*hbar; + emag[i] += evdwl; } } else evdwl = 0.0; diff --git a/src/SPIN/pair_spin_dipole_long.cpp b/src/SPIN/pair_spin_dipole_long.cpp index 124522a9b9410d8be9bf401acf40830652bec78e..aeb916cfae1e08f18fa9ea5f7ddef9f2632fee5c 100644 --- a/src/SPIN/pair_spin_dipole_long.cpp +++ b/src/SPIN/pair_spin_dipole_long.cpp @@ -69,6 +69,7 @@ PairSpinDipoleLong::~PairSpinDipoleLong() memory->destroy(setflag); memory->destroy(cut_spin_long); memory->destroy(cutsq); + memory->destroy(emag); } } @@ -212,6 +213,13 @@ void PairSpinDipoleLong::compute(int eflag, int vflag) numneigh = list->numneigh; firstneigh = list->firstneigh; + // checking size of emag + + if (nlocal_max < nlocal) { // grow emag lists if necessary + nlocal_max = nlocal; + memory->grow(emag,nlocal_max,"pair/spin:emag"); + } + pre1 = 2.0 * g_ewald / MY_PIS; pre2 = 4.0 * pow(g_ewald,3.0) / MY_PIS; pre3 = 8.0 * pow(g_ewald,5.0) / MY_PIS; @@ -221,16 +229,18 @@ void PairSpinDipoleLong::compute(int eflag, int vflag) for (ii = 0; ii < inum; ii++) { i = ilist[ii]; + itype = type[i]; + + jlist = firstneigh[i]; + jnum = numneigh[i]; xi[0] = x[i][0]; xi[1] = x[i][1]; xi[2] = x[i][2]; - jlist = firstneigh[i]; - jnum = numneigh[i]; spi[0] = sp[i][0]; spi[1] = sp[i][1]; spi[2] = sp[i][2]; spi[3] = sp[i][3]; - itype = type[i]; + emag[i] = 0.0; for (jj = 0; jj < jnum; jj++) { j = jlist[jj]; @@ -286,17 +296,11 @@ void PairSpinDipoleLong::compute(int eflag, int vflag) fm[i][1] += fmi[1]; fm[i][2] += fmi[2]; - if (newton_pair || j < nlocal) { - f[j][0] -= fi[0]; - f[j][1] -= fi[1]; - f[j][2] -= fi[2]; - } - if (eflag) { if (rsq <= local_cut2) { - evdwl -= spi[0]*fmi[0] + spi[1]*fmi[1] + - spi[2]*fmi[2]; + evdwl -= (spi[0]*fmi[0] + spi[1]*fmi[1] + spi[2]*fmi[2]); evdwl *= 0.5*hbar; + emag[i] += evdwl; } } else evdwl = 0.0; diff --git a/src/SPIN/pair_spin_dmi.cpp b/src/SPIN/pair_spin_dmi.cpp index 04c2dc408dd83d040c54b138e946695558b66e0c..c6b0564463a815738f52395f6c350508bf75dd18 100644 --- a/src/SPIN/pair_spin_dmi.cpp +++ b/src/SPIN/pair_spin_dmi.cpp @@ -53,6 +53,7 @@ PairSpinDmi::~PairSpinDmi() memory->destroy(vmech_dmy); memory->destroy(vmech_dmz); memory->destroy(cutsq); + memory->destroy(emag); } } @@ -191,6 +192,13 @@ void PairSpinDmi::compute(int eflag, int vflag) numneigh = list->numneigh; firstneigh = list->firstneigh; + // checking size of emag + + if (nlocal_max < nlocal) { // grow emag lists if necessary + nlocal_max = nlocal; + memory->grow(emag,nlocal_max,"pair/spin:emag"); + } + // dmi computation // loop over all atoms @@ -206,7 +214,7 @@ void PairSpinDmi::compute(int eflag, int vflag) spi[0] = sp[i][0]; spi[1] = sp[i][1]; spi[2] = sp[i][2]; - + emag[i] = 0.0; // loop on neighbors @@ -251,15 +259,10 @@ void PairSpinDmi::compute(int eflag, int vflag) fm[i][1] += fmi[1]; fm[i][2] += fmi[2]; - if (newton_pair || j < nlocal) { - f[j][0] -= fi[0]; - f[j][1] -= fi[1]; - f[j][2] -= fi[2]; - } - if (eflag) { evdwl -= (spi[0]*fmi[0] + spi[1]*fmi[1] + spi[2]*fmi[2]); evdwl *= 0.5*hbar; + emag[i] += evdwl; } else evdwl = 0.0; if (evflag) ev_tally_xyz(i,j,nlocal,newton_pair, diff --git a/src/SPIN/pair_spin_exchange.cpp b/src/SPIN/pair_spin_exchange.cpp index 6eacb04ee3cb8cb79b6cbc4e5a91239c469ce681..5c5d5cb1a4a206e2383685ac533147c2c79574d1 100644 --- a/src/SPIN/pair_spin_exchange.cpp +++ b/src/SPIN/pair_spin_exchange.cpp @@ -50,6 +50,7 @@ PairSpinExchange::~PairSpinExchange() memory->destroy(J2); memory->destroy(J3); memory->destroy(cutsq); // to be implemented + memory->destroy(emag); } } @@ -176,6 +177,13 @@ void PairSpinExchange::compute(int eflag, int vflag) numneigh = list->numneigh; firstneigh = list->firstneigh; + // checking size of emag + + if (nlocal_max < nlocal) { // grow emag lists if necessary + nlocal_max = nlocal; + memory->grow(emag,nlocal_max,"pair/spin:emag"); + } + // computation of the exchange interaction // loop over atoms and their neighbors @@ -191,6 +199,7 @@ void PairSpinExchange::compute(int eflag, int vflag) spi[0] = sp[i][0]; spi[1] = sp[i][1]; spi[2] = sp[i][2]; + emag[i] = 0.0; // loop on neighbors @@ -234,16 +243,10 @@ void PairSpinExchange::compute(int eflag, int vflag) fm[i][1] += fmi[1]; fm[i][2] += fmi[2]; - if (newton_pair || j < nlocal) { - f[j][0] -= fi[0]; - f[j][1] -= fi[1]; - f[j][2] -= fi[2]; - } - if (eflag) { evdwl -= (spi[0]*fmi[0] + spi[1]*fmi[1] + spi[2]*fmi[2]); evdwl *= 0.5*hbar; - // evdwl *= hbar; + emag[i] += evdwl; } else evdwl = 0.0; if (evflag) ev_tally_xyz(i,j,nlocal,newton_pair, @@ -385,6 +388,29 @@ void PairSpinExchange::compute_exchange_mech(int i, int j, double rsq, double ei fi[2] -= Jex_mech*eij[2]; } +/* ---------------------------------------------------------------------- + compute energy of spin pair i and j +------------------------------------------------------------------------- */ + +// double PairSpinExchange::compute_energy(int i, int j, double rsq, double spi[3], double spj[3]) +// { +// int *type = atom->type; +// int itype, jtype; +// double Jex, ra; +// double energy = 0.0; +// itype = type[i]; +// jtype = type[j]; +// +// Jex = J1_mech[itype][jtype]; +// ra = rsq/J3[itype][jtype]/J3[itype][jtype]; +// Jex = 4.0*Jex*ra; +// Jex *= (1.0-J2[itype][jtype]*ra); +// Jex *= exp(-ra); +// +// energy = Jex*(spi[0]*spj[0]+spi[1]*spj[1]+spi[2]*spj[2]); +// return energy; +// } + /* ---------------------------------------------------------------------- allocate all arrays ------------------------------------------------------------------------- */ diff --git a/src/SPIN/pair_spin_exchange.h b/src/SPIN/pair_spin_exchange.h index 19eafeb5ca7d6ec27e8bbdc0efcafb689f772b76..4e9e6bfac80e2d53c9106386004966c296d17695 100644 --- a/src/SPIN/pair_spin_exchange.h +++ b/src/SPIN/pair_spin_exchange.h @@ -39,6 +39,8 @@ class PairSpinExchange : public PairSpin { void compute_exchange(int, int, double, double *, double *); void compute_exchange_mech(int, int, double, double *, double *, double *, double *); + // double compute_energy(int , int , double , double *, double *); + void write_restart(FILE *); void read_restart(FILE *); void write_restart_settings(FILE *); diff --git a/src/SPIN/pair_spin_magelec.cpp b/src/SPIN/pair_spin_magelec.cpp index fabad4ae4d79ce51bec0a689a1a8b63875a14193..741305fbf47fbf1fc7c983dbdf85cae249834a2d 100644 --- a/src/SPIN/pair_spin_magelec.cpp +++ b/src/SPIN/pair_spin_magelec.cpp @@ -51,6 +51,7 @@ PairSpinMagelec::~PairSpinMagelec() memory->destroy(v_mey); memory->destroy(v_mez); memory->destroy(cutsq); // to be deteled + memory->destroy(emag); } } @@ -185,6 +186,13 @@ void PairSpinMagelec::compute(int eflag, int vflag) numneigh = list->numneigh; firstneigh = list->firstneigh; + // checking size of emag + + if (nlocal_max < nlocal) { // grow emag lists if necessary + nlocal_max = nlocal; + memory->grow(emag,nlocal_max,"pair/spin:emag"); + } + // magneto-electric computation // loop over atoms and their neighbors @@ -200,6 +208,7 @@ void PairSpinMagelec::compute(int eflag, int vflag) spi[0] = sp[i][0]; spi[1] = sp[i][1]; spi[2] = sp[i][2]; + emag[i] = 0.0; // loop on neighbors @@ -243,15 +252,10 @@ void PairSpinMagelec::compute(int eflag, int vflag) fm[i][1] += fmi[1]; fm[i][2] += fmi[2]; - if (newton_pair || j < nlocal) { - f[j][0] -= fi[0]; - f[j][1] -= fi[1]; - f[j][2] -= fi[2]; - } - if (eflag) { evdwl -= (spi[0]*fmi[0] + spi[1]*fmi[1] + spi[2]*fmi[2]); evdwl *= 0.5*hbar; + emag[i] += evdwl; } else evdwl = 0.0; if (evflag) ev_tally_xyz(i,j,nlocal,newton_pair, diff --git a/src/SPIN/pair_spin_neel.cpp b/src/SPIN/pair_spin_neel.cpp index 4a5d453de2f65b01f49aa0cf3e14e224642a2da6..4fd8ecc2152f32e0c27787d6b6f694fd3e08b19b 100644 --- a/src/SPIN/pair_spin_neel.cpp +++ b/src/SPIN/pair_spin_neel.cpp @@ -54,6 +54,7 @@ PairSpinNeel::~PairSpinNeel() memory->destroy(q2); memory->destroy(q3); memory->destroy(cutsq); // to be deleted + memory->destroy(emag); } } @@ -190,6 +191,13 @@ void PairSpinNeel::compute(int eflag, int vflag) numneigh = list->numneigh; firstneigh = list->firstneigh; + // checking size of emag + + if (nlocal_max < nlocal) { // grow emag lists if necessary + nlocal_max = nlocal; + memory->grow(emag,nlocal_max,"pair/spin:emag"); + } + // computation of the neel interaction // loop over atoms and their neighbors @@ -205,6 +213,7 @@ void PairSpinNeel::compute(int eflag, int vflag) spi[0] = sp[i][0]; spi[1] = sp[i][1]; spi[2] = sp[i][2]; + emag[i] = 0.0; // loop on neighbors @@ -252,15 +261,10 @@ void PairSpinNeel::compute(int eflag, int vflag) fm[i][1] += fmi[1]; fm[i][2] += fmi[2]; - if (newton_pair || j < nlocal) { - f[j][0] -= fi[0]; - f[j][1] -= fi[1]; - f[j][2] -= fi[2]; - } - if (eflag) { - evdwl = (spi[0]*fmi[0] + spi[1]*fmi[1] + spi[2]*fmi[2]); + evdwl = compute_neel_energy(i,j,rsq,eij,spi,spj); evdwl *= 0.5*hbar; + emag[i] += evdwl; } else evdwl = 0.0; if (evflag) ev_tally_xyz(i,j,nlocal,newton_pair, @@ -365,65 +369,69 @@ void PairSpinNeel::compute_single_pair(int ii, double fmi[3]) /* ---------------------------------------------------------------------- */ -void PairSpinNeel::compute_neel(int i, int j, double rsq, double eij[3], double fmi[3], double spi[3], double spj[3]) +void PairSpinNeel::compute_neel(int i, int j, double rsq, double eij[3], double fmi[3], double spi[3], double spj[3]) { int *type = atom->type; int itype, jtype; itype = type[i]; jtype = type[j]; - double gij, q1ij, q2ij, ra; + double qr,gr,g1r,q1r,q2r,ra; double pdx, pdy, pdz; double pq1x, pq1y, pq1z; double pq2x, pq2y, pq2z; + double eij_si,eij_sj,si_sj,eij_si_2,eij_sj_3,coeff1; - // pseudo-dipolar component + // compute Neel's functions ra = rsq/g3[itype][jtype]/g3[itype][jtype]; - gij = 4.0*g1[itype][jtype]*ra; - gij *= (1.0-g2[itype][jtype]*ra); - gij *= exp(-ra); + gr = 4.0*g1[itype][jtype]*ra; + gr *= (1.0-g2[itype][jtype]*ra); + gr *= exp(-ra); - double scalar_eij_si = eij[0]*spi[0] + eij[1]*spi[1] + eij[2]*spi[2]; - double scalar_eij_sj = eij[0]*spj[0] + eij[1]*spj[1] + eij[2]*spj[2]; - double scalar_si_sj = spi[0]*spj[0] + spi[1]*spj[1] + spi[2]*spj[2]; + ra = rsq/q3[itype][jtype]/q3[itype][jtype]; + qr = 4.0*q1[itype][jtype]*ra; + qr *= (1.0-q2[itype][jtype]*ra); + qr *= exp(-ra); - double gij_eij_sj = gij*scalar_eij_sj; - double gij_3 = gij/3.0; - pdx = gij_eij_sj*eij[0] - gij_3*spj[0]; - pdy = gij_eij_sj*eij[1] - gij_3*spj[1]; - pdz = gij_eij_sj*eij[2] - gij_3*spj[2]; + g1r = (gr + 12.0*qr/35.0); + q1r = 9.0*qr/5.0; + q2r = -2.0*qr/5.0; - // pseudo-quadrupolar component + // pseudo-dipolar component - ra = rsq/q3[itype][jtype]/q3[itype][jtype]; - q1ij = 4.0*q1[itype][jtype]*ra; - q1ij *= (1.0-q2[itype][jtype]*ra); - q1ij *= exp(-ra); - q2ij = (-2.0*q1ij/9.0); + eij_si = eij[0]*spi[0] + eij[1]*spi[1] + eij[2]*spi[2]; + eij_sj = eij[0]*spj[0] + eij[1]*spj[1] + eij[2]*spj[2]; + si_sj = spi[0]*spj[0] + spi[1]*spj[1] + spi[2]*spj[2]; - double scalar_eij_si_2 = scalar_eij_si*scalar_eij_si; - pq1x = -(scalar_eij_si_2*scalar_eij_si_2 - scalar_si_sj/3.0)*spj[0]/3.0; - pq1y = -(scalar_eij_si_2*scalar_eij_si_2 - scalar_si_sj/3.0)*spj[1]/3.0; - pq1z = -(scalar_eij_si_2*scalar_eij_si_2 - scalar_si_sj/3.0)*spj[2]/3.0; + pdx = g1r*(eij_sj*eij[0] - spj[0]/3.0); + pdy = g1r*(eij_sj*eij[1] - spj[1]/3.0); + pdz = g1r*(eij_sj*eij[2] - spj[2]/3.0); - double pqt1 = (scalar_eij_sj*scalar_eij_sj-scalar_si_sj/3.0); - pq1x += pqt1*(2.0*scalar_eij_si*eij[0] - spj[0]/3.0); - pq1y += pqt1*(2.0*scalar_eij_si*eij[1] - spj[1]/3.0); - pq1z += pqt1*(2.0*scalar_eij_si*eij[2] - spj[2]/3.0); + // pseudo-quadrupolar components - pq1x *= q1ij; - pq1y *= q1ij; - pq1z *= q1ij; + eij_si_2 = eij_si*eij_si; + pq1x = -(eij_si_2 - si_sj/3.0)*spj[0]/3.0; + pq1y = -(eij_si_2 - si_sj/3.0)*spj[1]/3.0; + pq1z = -(eij_si_2 - si_sj/3.0)*spj[2]/3.0; - double scalar_eij_sj_3 = scalar_eij_sj*scalar_eij_sj*scalar_eij_sj; - pq2x = 3.0*scalar_eij_si_2*scalar_eij_sj*eij[0] + scalar_eij_sj_3*eij[0]; - pq2y = 3.0*scalar_eij_si_2*scalar_eij_sj*eij[1] + scalar_eij_sj_3*eij[1]; - pq2z = 3.0*scalar_eij_si_2*scalar_eij_sj*eij[2] + scalar_eij_sj_3*eij[2]; + coeff1 = (eij_sj*eij_sj-si_sj/3.0); + pq1x += coeff1*(2.0*eij_si*eij[0] - spj[0]/3.0); + pq1y += coeff1*(2.0*eij_si*eij[1] - spj[1]/3.0); + pq1z += coeff1*(2.0*eij_si*eij[2] - spj[2]/3.0); + + pq1x *= q1r; + pq1y *= q1r; + pq1z *= q1r; - pq2x *= q2ij; - pq2y *= q2ij; - pq2z *= q2ij; + eij_sj_3 = eij_sj*eij_sj*eij_sj; + pq2x = 3.0*eij_si_2*eij_sj*eij[0] + eij_sj_3*eij[0]; + pq2y = 3.0*eij_si_2*eij_sj*eij[1] + eij_sj_3*eij[1]; + pq2z = 3.0*eij_si_2*eij_sj*eij[2] + eij_sj_3*eij[2]; + + pq2x *= q2r; + pq2y *= q2r; + pq2z *= q2r; // adding three contributions @@ -563,6 +571,50 @@ void PairSpinNeel::compute_neel_mech(int i, int j, double rsq, double eij[3], do fi[2] = pdz + pq1z + pq2z; } +/* ---------------------------------------------------------------------- */ + +double PairSpinNeel::compute_neel_energy(int i, int j, double rsq, double eij[3], double spi[3], double spj[3]) +{ + int *type = atom->type; + int itype, jtype; + itype = type[i]; + jtype = type[j]; + + double qr,gr,g1r,q1r,q2r,ra; + double epd,epq1,epq2; + double eij_si,eij_sj,si_sj; + double eij_si_2,eij_sj_2,eij_si_3,eij_sj_3; + + // compute Neel's functions + + ra = rsq/g3[itype][jtype]/g3[itype][jtype]; + gr = 4.0*g1[itype][jtype]*ra; + gr *= (1.0-g2[itype][jtype]*ra); + gr *= exp(-ra); + + ra = rsq/q3[itype][jtype]/q3[itype][jtype]; + qr = 4.0*q1[itype][jtype]*ra; + qr *= (1.0-q2[itype][jtype]*ra); + qr *= exp(-ra); + + g1r = (gr + 12.0*qr/35.0); + q1r = 9.0*qr/5.0; + q2r = -2.0*qr/5.0; + + eij_si = eij[0]*spi[0] + eij[1]*spi[1] + eij[2]*spi[2]; + eij_sj = eij[0]*spj[0] + eij[1]*spj[1] + eij[2]*spj[2]; + si_sj = spi[0]*spj[0] + spi[1]*spj[1] + spi[2]*spj[2]; + epd = g1r*(eij_si*eij_sj-si_sj/3.0); + eij_si_2 = eij_si*eij_si; + eij_sj_2 = eij_sj*eij_sj; + epq1 = q1r*(eij_si_2-si_sj/3.0)*(eij_sj_2-si_sj/3.0); + eij_si_3 = eij_si*eij_si_2; + eij_sj_3 = eij_sj*eij_sj_2; + epq2 = q2r*(eij_si*eij_sj_3+eij_sj*eij_si_3); + + return (epd+epq1+epq2); +} + /* ---------------------------------------------------------------------- allocate all arrays ------------------------------------------------------------------------- */ diff --git a/src/SPIN/pair_spin_neel.h b/src/SPIN/pair_spin_neel.h index 5261a7f7466ccf831f2872ecda958ab37bee0452..a39cf839c9318fe198aa97bad05f9e4a34bbf614 100644 --- a/src/SPIN/pair_spin_neel.h +++ b/src/SPIN/pair_spin_neel.h @@ -38,6 +38,7 @@ class PairSpinNeel : public PairSpin { void compute_neel(int, int, double, double *, double *, double *, double *); void compute_neel_mech(int, int, double, double *, double *, double *, double *); + double compute_neel_energy(int, int, double, double *, double *, double *); void write_restart(FILE *); void read_restart(FILE *); diff --git a/src/SRD/fix_srd.cpp b/src/SRD/fix_srd.cpp index c57975ad4c7dbc0e0dd8d17ea2fd3f3e488470ef..8f15128399da4fad5c27ef155a876218329d8f56 100644 --- a/src/SRD/fix_srd.cpp +++ b/src/SRD/fix_srd.cpp @@ -375,13 +375,16 @@ void FixSRD::init() change_size = change_shape = deformflag = 0; if (domain->nonperiodic == 2) change_size = 1; + + Fix **fixes = modify->fix; for (int i = 0; i < modify->nfix; i++) { - if (modify->fix[i]->box_change_size) change_size = 1; - if (modify->fix[i]->box_change_shape) change_shape = 1; - if (strcmp(modify->fix[i]->style,"deform") == 0) { + if (fixes[i]->box_change & BOX_CHANGE_SIZE) change_size = 1; + if (fixes[i]->box_change & BOX_CHANGE_SHAPE) change_shape = 1; + if (strcmp(fixes[i]->style,"deform") == 0) { deformflag = 1; FixDeform *deform = (FixDeform *) modify->fix[i]; - if (deform->box_change_shape && deform->remapflag != Domain::V_REMAP) + if ((deform->box_change & BOX_CHANGE_SHAPE) + && deform->remapflag != Domain::V_REMAP) error->all(FLERR,"Using fix srd with inconsistent " "fix deform remap option"); } diff --git a/src/STUBS/mpi.c b/src/STUBS/mpi.c index a5a00f86a5aac41b7e74151c658115ea9cd7728a..38fbbac3afe298da9cfa50151a70be5467adae6c 100644 --- a/src/STUBS/mpi.c +++ b/src/STUBS/mpi.c @@ -353,7 +353,7 @@ int MPI_Get_count(MPI_Status *status, MPI_Datatype datatype, int *count) int MPI_Comm_split(MPI_Comm comm, int color, int key, MPI_Comm *comm_out) { - *comm_out = comm; + *comm_out = comm+1; return 0; } @@ -361,7 +361,7 @@ int MPI_Comm_split(MPI_Comm comm, int color, int key, MPI_Comm *comm_out) int MPI_Comm_dup(MPI_Comm comm, MPI_Comm *comm_out) { - *comm_out = comm; + *comm_out = comm+1; return 0; } @@ -377,7 +377,7 @@ MPI_Fint MPI_Comm_c2f(MPI_Comm comm) { return comm; }; MPI_Comm MPI_Comm_f2c(MPI_Fint comm) { return comm; }; -//* ---------------------------------------------------------------------- */ +/* ---------------------------------------------------------------------- */ int MPI_Comm_group(MPI_Comm comm, MPI_Group *group) { diff --git a/src/USER-AWPMD/atom_vec_wavepacket.cpp b/src/USER-AWPMD/atom_vec_wavepacket.cpp index bce334a7b340aab4d054bc6debc0213c2bb2779c..0d11e983ad1fba606ed42b44f8a346abe0b0e193 100644 --- a/src/USER-AWPMD/atom_vec_wavepacket.cpp +++ b/src/USER-AWPMD/atom_vec_wavepacket.cpp @@ -18,13 +18,7 @@ #include "atom_vec_wavepacket.h" #include #include "atom.h" -#include "comm.h" -#include "domain.h" -#include "modify.h" -#include "fix.h" -#include "memory.h" #include "error.h" -#include "utils.h" using namespace LAMMPS_NS; @@ -32,1079 +26,83 @@ using namespace LAMMPS_NS; AtomVecWavepacket::AtomVecWavepacket(LAMMPS *lmp) : AtomVec(lmp) { - comm_x_only = comm_f_only = 0; - mass_type = 1; molecular = 0; forceclearflag = 1; - size_forward = 4; // coords[3]+radius[1] - size_reverse = 10; // force[3]+erforce[1]+ervelforce[1]+vforce[3]+csforce[2] - size_border = 10; // coords[3]+tag[1]+type[1]+mask[1]+q[1]+spin[1]+eradius[1]+etag[1] - size_velocity = 6; // +velocities[3]+ ervel[1]+cs[2] - size_data_atom = 11; // for input file: 1-tag 2-type 3-q 4-spin 5-eradius 6-etag 7-cs_re 8-cs_im 9-x 10-y 11-z - size_data_vel = 5; // for input file: vx vy vz ervel - xcol_data = 9; // starting column for x data - atom->wavepacket_flag = 1; - atom->electron_flag = 1; // compatible with eff + + atom->electron_flag = 1; // compatible with eff atom->q_flag = atom->spin_flag = atom->eradius_flag = atom->ervel_flag = atom->erforce_flag = 1; + atom->cs_flag = atom->csforce_flag = + atom->vforce_flag = atom->ervelforce_flag = atom->etag_flag = 1; - atom->cs_flag = atom->csforce_flag = atom->vforce_flag = atom->ervelforce_flag = atom->etag_flag = 1; -} - -/* ---------------------------------------------------------------------- - grow atom-electron arrays - n = 0 grows arrays by a chunk - n > 0 allocates arrays to size n -------------------------------------------------------------------------- */ - -void AtomVecWavepacket::grow(int n) -{ - if (n == 0) grow_nmax(); - else nmax = n; - atom->nmax = nmax; - - tag = memory->grow(atom->tag,nmax,"atom:tag"); - type = memory->grow(atom->type,nmax,"atom:type"); - mask = memory->grow(atom->mask,nmax,"atom:mask"); - image = memory->grow(atom->image,nmax,"atom:image"); - x = memory->grow(atom->x,nmax,3,"atom:x"); - v = memory->grow(atom->v,nmax,3,"atom:v"); - f = memory->grow(atom->f,nmax*comm->nthreads,3,"atom:f"); + // strings with peratom variables to include in each AtomVec method + // strings cannot contain fields in corresponding AtomVec default strings + // order of fields in a string does not matter + // except: fields_data_atom & fields_data_vel must match data file - q = memory->grow(atom->q,nmax,"atom:q"); - spin = memory->grow(atom->spin,nmax,"atom:spin"); - eradius = memory->grow(atom->eradius,nmax,"atom:eradius"); - ervel = memory->grow(atom->ervel,nmax,"atom:ervel"); - erforce = memory->grow(atom->erforce,nmax*comm->nthreads,"atom:erforce"); + fields_grow = (char *) + "q spin eradius ervel erforce cs csforce " + "vforce ervelforce etag"; + fields_copy = (char *) "q spin eradius ervel cs etag"; + fields_comm = (char *) "eradius"; + fields_comm_vel = (char *) "eradius ervel cs"; + fields_reverse = (char *) "erforce ervelforce vforce csforce"; + fields_border = (char *) "q spin eradius etag"; + fields_border_vel = (char *) "q spin eradius etag ervel cs"; + fields_exchange = (char *) "q spin eradius ervel etag cs"; + fields_restart = (char *) "q spin eradius ervel etag cs"; + fields_create = (char *) "q spin eradius ervel etag cs"; + fields_data_atom = (char *) "id type q spin eradius etag cs x"; + fields_data_vel = (char *) "id v ervel"; - cs = memory->grow(atom->cs,2*nmax,"atom:cs"); - csforce = memory->grow(atom->csforce,2*nmax,"atom:csforce"); - vforce = memory->grow(atom->vforce,3*nmax,"atom:vforce"); - ervelforce = memory->grow(atom->ervelforce,nmax,"atom:ervelforce"); - etag = memory->grow(atom->etag,nmax,"atom:etag"); - - if (atom->nextra_grow) - for (int iextra = 0; iextra < atom->nextra_grow; iextra++) - modify->fix[atom->extra_grow[iextra]]->grow_arrays(nmax); + setup_fields(); } /* ---------------------------------------------------------------------- - reset local array ptrs + set local copies of all grow ptrs used by this class, except defaults + needed in replicate when 2 atom classes exist and it calls pack_restart() ------------------------------------------------------------------------- */ -void AtomVecWavepacket::grow_reset() +void AtomVecWavepacket::grow_pointers() { - tag = atom->tag; type = atom->type; - mask = atom->mask; image = atom->image; - x = atom->x; v = atom->v; f = atom->f; q = atom->q; - eradius = atom->eradius; ervel = atom->ervel; erforce = atom->erforce; - - cs = atom->cs; - csforce = atom->csforce; - vforce = atom->vforce; - ervelforce = atom->ervelforce; - etag = atom->etag; + spin = atom->spin; + eradius = atom->eradius; + ervel = atom->ervel; + erforce = atom->erforce; } /* ---------------------------------------------------------------------- - copy atom I info to atom J + clear extra forces starting at atom N + nbytes = # of bytes to clear for a per-atom vector ------------------------------------------------------------------------- */ -void AtomVecWavepacket::copy(int i, int j, int delflag) -{ - tag[j] = tag[i]; - type[j] = type[i]; - mask[j] = mask[i]; - image[j] = image[i]; - x[j][0] = x[i][0]; - x[j][1] = x[i][1]; - x[j][2] = x[i][2]; - v[j][0] = v[i][0]; - v[j][1] = v[i][1]; - v[j][2] = v[i][2]; - - q[j] = q[i]; - spin[j] = spin[i]; - eradius[j] = eradius[i]; - ervel[j] = ervel[i]; - - cs[2*j] = cs[2*i]; - cs[2*j+1] = cs[2*i+1]; - etag[j] = etag[i]; - - - if (atom->nextra_grow) - for (int iextra = 0; iextra < atom->nextra_grow; iextra++) - modify->fix[atom->extra_grow[iextra]]->copy_arrays(i,j,delflag); -} - -/* ---------------------------------------------------------------------- */ - void AtomVecWavepacket::force_clear(int n, size_t nbytes) { memset(&erforce[n],0,nbytes); } -/* ---------------------------------------------------------------------- */ -// this will be used as partial pack for unsplit Hartree packets (v, ervel not regarded as separate variables) - -int AtomVecWavepacket::pack_comm(int n, int *list, double *buf, - int pbc_flag, int *pbc) -{ - int i,j,m; - double dx,dy,dz; - - m = 0; - if (pbc_flag == 0) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = x[j][0]; - buf[m++] = x[j][1]; - buf[m++] = x[j][2]; - buf[m++] = eradius[j]; - } - } else { - if (domain->triclinic == 0) { - dx = pbc[0]*domain->xprd; - dy = pbc[1]*domain->yprd; - dz = pbc[2]*domain->zprd; - } else { - dx = pbc[0]*domain->xprd + pbc[5]*domain->xy + pbc[4]*domain->xz; - dy = pbc[1]*domain->yprd + pbc[3]*domain->yz; - dz = pbc[2]*domain->zprd; - } - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = x[j][0] + dx; - buf[m++] = x[j][1] + dy; - buf[m++] = x[j][2] + dz; - buf[m++] = eradius[j]; - } - } - return m; -} - -/* ---------------------------------------------------------------------- */ -// this is a complete pack of all 'position' variables of AWPMD - -int AtomVecWavepacket::pack_comm_vel(int n, int *list, double *buf, - int pbc_flag, int *pbc) -{ - int i,j,m; - double dx,dy,dz,dvx,dvy,dvz; - - m = 0; - if (pbc_flag == 0) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = x[j][0]; - buf[m++] = x[j][1]; - buf[m++] = x[j][2]; - buf[m++] = eradius[j]; - buf[m++] = v[j][0]; - buf[m++] = v[j][1]; - buf[m++] = v[j][2]; - - buf[m++] = ervel[j]; - buf[m++] = cs[2*j]; - buf[m++] = cs[2*j+1]; - } - } else { - if (domain->triclinic == 0) { - dx = pbc[0]*domain->xprd; - dy = pbc[1]*domain->yprd; - dz = pbc[2]*domain->zprd; - } else { - dx = pbc[0]*domain->xprd + pbc[5]*domain->xy + pbc[4]*domain->xz; - dy = pbc[1]*domain->yprd + pbc[3]*domain->yz; - dz = pbc[2]*domain->zprd; - } - if (!deform_vremap) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = x[j][0] + dx; - buf[m++] = x[j][1] + dy; - buf[m++] = x[j][2] + dz; - buf[m++] = eradius[j]; - buf[m++] = v[j][0]; - buf[m++] = v[j][1]; - buf[m++] = v[j][2]; - - buf[m++] = ervel[j]; - buf[m++] = cs[2*j]; - buf[m++] = cs[2*j+1]; - } - } else { - dvx = pbc[0]*h_rate[0] + pbc[5]*h_rate[5] + pbc[4]*h_rate[4]; - dvy = pbc[1]*h_rate[1] + pbc[3]*h_rate[3]; - dvz = pbc[2]*h_rate[2]; - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = x[j][0] + dx; - buf[m++] = x[j][1] + dy; - buf[m++] = x[j][2] + dz; - buf[m++] = eradius[j]; - if (mask[i] & deform_groupbit) { - buf[m++] = v[j][0] + dvx; - buf[m++] = v[j][1] + dvy; - buf[m++] = v[j][2] + dvz; - } else { - buf[m++] = v[j][0]; - buf[m++] = v[j][1]; - buf[m++] = v[j][2]; - } - buf[m++] = ervel[j]; - buf[m++] = cs[2*j]; - buf[m++] = cs[2*j+1]; - } - } - } - return m; -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecWavepacket::pack_comm_hybrid(int n, int *list, double *buf) -{ - int i,j,m; - - m = 0; - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = eradius[j]; - buf[m++] = ervel[j]; - buf[m++] = cs[2*j]; - buf[m++] = cs[2*j+1]; - } - return m; -} - -/* ---------------------------------------------------------------------- */ - -void AtomVecWavepacket::unpack_comm(int n, int first, double *buf) -{ - int i,m,last; - - m = 0; - last = first + n; - for (i = first; i < last; i++) { - x[i][0] = buf[m++]; - x[i][1] = buf[m++]; - x[i][2] = buf[m++]; - eradius[i] = buf[m++]; - } -} - -/* ---------------------------------------------------------------------- */ - -void AtomVecWavepacket::unpack_comm_vel(int n, int first, double *buf) -{ - int i,m,last; - - m = 0; - last = first + n; - for (i = first; i < last; i++) { - x[i][0] = buf[m++]; - x[i][1] = buf[m++]; - x[i][2] = buf[m++]; - eradius[i] = buf[m++]; - v[i][0] = buf[m++]; - v[i][1] = buf[m++]; - v[i][2] = buf[m++]; - - ervel[i] = buf[m++]; - cs[2*i] = buf[m++]; - cs[2*i+1] = buf[m++]; - } -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecWavepacket::unpack_comm_hybrid(int n, int first, double *buf) -{ - int i,m,last; - - m = 0; - last = first + n; - for (i = first; i < last; i++){ - eradius[i] = buf[m++]; - ervel[i] = buf[m++]; - cs[2*i] = buf[m++]; - cs[2*i+1] = buf[m++]; - } - return m; -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecWavepacket::pack_reverse(int n, int first, double *buf) -{ - int i,m,last; - - m = 0; - last = first + n; - for (i = first; i < last; i++) { //10 - buf[m++] = f[i][0]; - buf[m++] = f[i][1]; - buf[m++] = f[i][2]; - buf[m++] = erforce[i]; - - buf[m++] = ervelforce[i]; - buf[m++] = vforce[3*i]; - buf[m++] = vforce[3*i+1]; - buf[m++] = vforce[3*i+2]; - buf[m++] = csforce[2*i]; - buf[m++] = csforce[2*i+1]; - } - return m; -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecWavepacket::pack_reverse_hybrid(int n, int first, double *buf) -{ - int i,m,last; - - m = 0; - last = first + n; - for (i = first; i < last; i++){ - buf[m++] = erforce[i]; - - buf[m++] = ervelforce[i]; - buf[m++] = vforce[3*i]; - buf[m++] = vforce[3*i+1]; - buf[m++] = vforce[3*i+2]; - buf[m++] = csforce[2*i]; - buf[m++] = csforce[2*i+1]; - } - return m; -} - -/* ---------------------------------------------------------------------- */ - -void AtomVecWavepacket::unpack_reverse(int n, int *list, double *buf) -{ - int i,j,m; - - m = 0; - for (i = 0; i < n; i++) { - j = list[i]; - f[j][0] += buf[m++]; - f[j][1] += buf[m++]; - f[j][2] += buf[m++]; - erforce[j] += buf[m++]; - - ervelforce[j] += buf[m++]; - vforce[3*j] += buf[m++]; - vforce[3*j+1] += buf[m++]; - vforce[3*j+2] += buf[m++]; - csforce[2*j] += buf[m++]; - csforce[2*j+1] += buf[m++]; - } -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecWavepacket::unpack_reverse_hybrid(int n, int *list, double *buf) -{ - int i,j,m; - - m = 0; - for (i = 0; i < n; i++) { - j = list[i]; - erforce[j] += buf[m++]; - - ervelforce[j] += buf[m++]; - vforce[3*j] += buf[m++]; - vforce[3*j+1] += buf[m++]; - vforce[3*j+2] += buf[m++]; - csforce[2*j] += buf[m++]; - csforce[2*j+1] += buf[m++]; - } - return m; -} - -/* ---------------------------------------------------------------------- */ -// will be used for Hartree unsplit version (the etag is added however) -int AtomVecWavepacket::pack_border(int n, int *list, double *buf, - int pbc_flag, int *pbc) -{ - int i,j,m; - double dx,dy,dz; - - m = 0; - if (pbc_flag == 0) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = x[j][0]; - buf[m++] = x[j][1]; - buf[m++] = x[j][2]; - buf[m++] = ubuf(tag[j]).d; - buf[m++] = ubuf(type[j]).d; - buf[m++] = ubuf(mask[j]).d; - buf[m++] = q[j]; - buf[m++] = ubuf(spin[j]).d; - buf[m++] = eradius[j]; - buf[m++] = ubuf(etag[j]).d; - } - } else { - if (domain->triclinic == 0) { - dx = pbc[0]*domain->xprd; - dy = pbc[1]*domain->yprd; - dz = pbc[2]*domain->zprd; - } else { - dx = pbc[0]; - dy = pbc[1]; - dz = pbc[2]; - } - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = x[j][0] + dx; - buf[m++] = x[j][1] + dy; - buf[m++] = x[j][2] + dz; - buf[m++] = ubuf(tag[j]).d; - buf[m++] = ubuf(type[j]).d; - buf[m++] = ubuf(mask[j]).d; - buf[m++] = q[j]; - buf[m++] = ubuf(spin[j]).d; - buf[m++] = eradius[j]; - buf[m++] = ubuf(etag[j]).d; - } - } - - if (atom->nextra_border) - for (int iextra = 0; iextra < atom->nextra_border; iextra++) - m += modify->fix[atom->extra_border[iextra]]->pack_border(n,list,&buf[m]); - - return m; -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecWavepacket::pack_border_vel(int n, int *list, double *buf, - int pbc_flag, int *pbc) -{ - int i,j,m; - double dx,dy,dz,dvx,dvy,dvz; - - m = 0; - if (pbc_flag == 0) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = x[j][0]; - buf[m++] = x[j][1]; - buf[m++] = x[j][2]; - buf[m++] = ubuf(tag[j]).d; - buf[m++] = ubuf(type[j]).d; - buf[m++] = ubuf(mask[j]).d; - buf[m++] = q[j]; - buf[m++] = ubuf(spin[j]).d; - buf[m++] = eradius[j]; - buf[m++] = ubuf(etag[j]).d; - - buf[m++] = v[j][0]; - buf[m++] = v[j][1]; - buf[m++] = v[j][2]; - - buf[m++] = ervel[j]; - buf[m++] = cs[2*j]; - buf[m++] = cs[2*j+1]; - } - } else { - if (domain->triclinic == 0) { - dx = pbc[0]*domain->xprd; - dy = pbc[1]*domain->yprd; - dz = pbc[2]*domain->zprd; - } else { - dx = pbc[0]; - dy = pbc[1]; - dz = pbc[2]; - } - if (domain->triclinic == 0) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = x[j][0] + dx; - buf[m++] = x[j][1] + dy; - buf[m++] = x[j][2] + dz; - buf[m++] = ubuf(tag[j]).d; - buf[m++] = ubuf(type[j]).d; - buf[m++] = ubuf(mask[j]).d; - buf[m++] = q[j]; - buf[m++] = ubuf(spin[j]).d; - buf[m++] = eradius[j]; - buf[m++] = ubuf(etag[j]).d; - - buf[m++] = v[j][0]; - buf[m++] = v[j][1]; - buf[m++] = v[j][2]; - - - buf[m++] = ervel[j]; - buf[m++] = cs[2*j]; - buf[m++] = cs[2*j+1]; - } - } else { - dvx = pbc[0]*h_rate[0] + pbc[5]*h_rate[5] + pbc[4]*h_rate[4]; - dvy = pbc[1]*h_rate[1] + pbc[3]*h_rate[3]; - dvz = pbc[2]*h_rate[2]; - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = x[j][0] + dx; - buf[m++] = x[j][1] + dy; - buf[m++] = x[j][2] + dz; - buf[m++] = ubuf(tag[j]).d; - buf[m++] = ubuf(type[j]).d; - buf[m++] = ubuf(mask[j]).d; - buf[m++] = q[j]; - buf[m++] = ubuf(spin[j]).d; - buf[m++] = eradius[j]; - buf[m++] = ubuf(etag[j]).d; - - if (mask[i] & deform_groupbit) { - buf[m++] = v[j][0] + dvx; - buf[m++] = v[j][1] + dvy; - buf[m++] = v[j][2] + dvz; - } else { - buf[m++] = v[j][0]; - buf[m++] = v[j][1]; - buf[m++] = v[j][2]; - } - - buf[m++] = ervel[j]; - buf[m++] = cs[2*j]; - buf[m++] = cs[2*j+1]; - } - } - } - - if (atom->nextra_border) - for (int iextra = 0; iextra < atom->nextra_border; iextra++) - m += modify->fix[atom->extra_border[iextra]]->pack_border(n,list,&buf[m]); - - return m; -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecWavepacket::pack_border_hybrid(int n, int *list, double *buf) -{ - int i,j,m; - - m = 0; - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = q[j]; - buf[m++] = ubuf(spin[j]).d; - buf[m++] = eradius[j]; - - buf[m++] = ubuf(etag[j]).d; - buf[m++] = ervel[j]; - buf[m++] = cs[2*j]; - buf[m++] = cs[2*j+1]; - } - return m; -} - -/* ---------------------------------------------------------------------- */ - -void AtomVecWavepacket::unpack_border(int n, int first, double *buf) -{ - int i,m,last; - - m = 0; - last = first + n; - for (i = first; i < last; i++) { - if (i == nmax) grow(0); - x[i][0] = buf[m++]; - x[i][1] = buf[m++]; - x[i][2] = buf[m++]; - tag[i] = (tagint) ubuf(buf[m++]).i; - type[i] = (int) ubuf(buf[m++]).i; - mask[i] = (int) ubuf(buf[m++]).i; - q[i] = buf[m++]; - spin[i] = (int) ubuf(buf[m++]).i; - eradius[i] = buf[m++]; - etag[i] = (int) ubuf(buf[m++]).i; - } - - if (atom->nextra_border) - for (int iextra = 0; iextra < atom->nextra_border; iextra++) - m += modify->fix[atom->extra_border[iextra]]-> - unpack_border(n,first,&buf[m]); -} - -/* ---------------------------------------------------------------------- */ - -void AtomVecWavepacket::unpack_border_vel(int n, int first, double *buf) -{ - int i,m,last; - - m = 0; - last = first + n; - for (i = first; i < last; i++) { - if (i == nmax) grow(0); - x[i][0] = buf[m++]; - x[i][1] = buf[m++]; - x[i][2] = buf[m++]; - tag[i] = (tagint) ubuf(buf[m++]).i; - type[i] = (int) ubuf(buf[m++]).i; - mask[i] = (int) ubuf(buf[m++]).i; - q[i] = buf[m++]; - spin[i] = (int) ubuf(buf[m++]).i; - eradius[i] = buf[m++]; - etag[i] = (int) ubuf(buf[m++]).i; - v[i][0] = buf[m++]; - v[i][1] = buf[m++]; - v[i][2] = buf[m++]; - ervel[i] = buf[m++]; - cs[2*i] = buf[m++]; - cs[2*i+1] = buf[m++]; - } - - if (atom->nextra_border) - for (int iextra = 0; iextra < atom->nextra_border; iextra++) - m += modify->fix[atom->extra_border[iextra]]-> - unpack_border(n,first,&buf[m]); -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecWavepacket::unpack_border_hybrid(int n, int first, double *buf) -{ - int i,m,last; - - m = 0; - last = first + n; - for (i = first; i < last; i++) { - q[i] = buf[m++]; - spin[i] = (int) ubuf(buf[m++]).i; - eradius[i] = buf[m++]; - etag[i] = (int) ubuf(buf[m++]).i; - ervel[i] = buf[m++]; - cs[2*i] = buf[m++]; - cs[2*i+1] = buf[m++]; - } - return m; -} - -/* ---------------------------------------------------------------------- - pack data for atom I for sending to another proc - xyz must be 1st 3 values, so comm::exchange() can test on them -------------------------------------------------------------------------- */ - -int AtomVecWavepacket::pack_exchange(int i, double *buf) -{ - int m = 1; - buf[m++] = x[i][0]; - buf[m++] = x[i][1]; - buf[m++] = x[i][2]; - buf[m++] = v[i][0]; - buf[m++] = v[i][1]; - buf[m++] = v[i][2]; - buf[m++] = ubuf(tag[i]).d; - buf[m++] = ubuf(type[i]).d; - buf[m++] = ubuf(mask[i]).d; - buf[m++] = ubuf(image[i]).d; - - buf[m++] = q[i]; - buf[m++] = ubuf(spin[i]).d; - buf[m++] = eradius[i]; - buf[m++] = ervel[i]; - - buf[m++] = ubuf(etag[i]).d; - buf[m++] = cs[2*i]; - buf[m++] = cs[2*i+1]; - - if (atom->nextra_grow) - for (int iextra = 0; iextra < atom->nextra_grow; iextra++) - m += modify->fix[atom->extra_grow[iextra]]->pack_exchange(i,&buf[m]); - - buf[0] = m; - return m; -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecWavepacket::unpack_exchange(double *buf) -{ - int nlocal = atom->nlocal; - if (nlocal == nmax) grow(0); - - int m = 1; - x[nlocal][0] = buf[m++]; - x[nlocal][1] = buf[m++]; - x[nlocal][2] = buf[m++]; - v[nlocal][0] = buf[m++]; - v[nlocal][1] = buf[m++]; - v[nlocal][2] = buf[m++]; - tag[nlocal] = (tagint) ubuf(buf[m++]).i; - type[nlocal] = (int) ubuf(buf[m++]).i; - mask[nlocal] = (int) ubuf(buf[m++]).i; - image[nlocal] = (imageint) ubuf(buf[m++]).i; - - q[nlocal] = buf[m++]; - spin[nlocal] = (int) ubuf(buf[m++]).i; - eradius[nlocal] = buf[m++]; - ervel[nlocal] = buf[m++]; - - etag[nlocal] = (int) ubuf(buf[m++]).i; - cs[2*nlocal] = buf[m++]; - cs[2*nlocal+1] = buf[m++]; - - if (atom->nextra_grow) - for (int iextra = 0; iextra < atom->nextra_grow; iextra++) - m += modify->fix[atom->extra_grow[iextra]]-> - unpack_exchange(nlocal,&buf[m]); - - atom->nlocal++; - return m; -} - -/* ---------------------------------------------------------------------- - size of restart data for all atoms owned by this proc - include extra data stored by fixes -------------------------------------------------------------------------- */ - -int AtomVecWavepacket::size_restart() -{ - int i; - - int nlocal = atom->nlocal; - int n = 18 * nlocal; // Associated with pack_restart - - if (atom->nextra_restart) - for (int iextra = 0; iextra < atom->nextra_restart; iextra++) - for (i = 0; i < nlocal; i++) - n += modify->fix[atom->extra_restart[iextra]]->size_restart(i); - - return n; -} - -/* ---------------------------------------------------------------------- - pack atom I's data for restart file including extra quantities - xyz must be 1st 3 values, so that read_restart can test on them - molecular types may be negative, but write as positive -------------------------------------------------------------------------- */ - -int AtomVecWavepacket::pack_restart(int i, double *buf) -{ - int m = 1; - buf[m++] = x[i][0]; - buf[m++] = x[i][1]; - buf[m++] = x[i][2]; - buf[m++] = ubuf(tag[i]).d; - buf[m++] = ubuf(type[i]).d; - buf[m++] = ubuf(mask[i]).d; - buf[m++] = ubuf(image[i]).d; - buf[m++] = v[i][0]; - buf[m++] = v[i][1]; - buf[m++] = v[i][2]; - - buf[m++] = q[i]; - buf[m++] = ubuf(spin[i]).d; - buf[m++] = eradius[i]; - buf[m++] = ervel[i]; - - buf[m++] = ubuf(etag[i]).d; - buf[m++] = cs[2*i]; - buf[m++] = cs[2*i+1]; - - if (atom->nextra_restart) - for (int iextra = 0; iextra < atom->nextra_restart; iextra++) - m += modify->fix[atom->extra_restart[iextra]]->pack_restart(i,&buf[m]); - - buf[0] = m; - return m; -} - -/* ---------------------------------------------------------------------- - unpack data for one atom from restart file including extra quantities -------------------------------------------------------------------------- */ - -int AtomVecWavepacket::unpack_restart(double *buf) -{ - int nlocal = atom->nlocal; - if (nlocal == nmax) { - grow(0); - if (atom->nextra_store) - memory->grow(atom->extra,nmax,atom->nextra_store,"atom:extra"); - } - - int m = 1; - x[nlocal][0] = buf[m++]; - x[nlocal][1] = buf[m++]; - x[nlocal][2] = buf[m++]; - tag[nlocal] = (tagint) ubuf(buf[m++]).i; - type[nlocal] = (int) ubuf(buf[m++]).i; - mask[nlocal] = (int) ubuf(buf[m++]).i; - image[nlocal] = (imageint) ubuf(buf[m++]).i; - v[nlocal][0] = buf[m++]; - v[nlocal][1] = buf[m++]; - v[nlocal][2] = buf[m++]; - - q[nlocal] = buf[m++]; - spin[nlocal] = (int) ubuf(buf[m++]).i; - eradius[nlocal] = buf[m++]; - ervel[nlocal] = buf[m++]; - - etag[nlocal] = (int) ubuf(buf[m++]).i; - cs[2*nlocal] = buf[m++]; - cs[2*nlocal+1] = buf[m++]; - - double **extra = atom->extra; - if (atom->nextra_store) { - int size = static_cast (buf[0]) - m; - for (int i = 0; i < size; i++) extra[nlocal][i] = buf[m++]; - } - - atom->nlocal++; - return m; -} - /* ---------------------------------------------------------------------- - create one atom of itype at coord - set other values to defaults - AWPMD: creates a proton + initialize non-zero atom quantities + make each atom a proton ------------------------------------------------------------------------- */ -void AtomVecWavepacket::create_atom(int itype, double *coord) +void AtomVecWavepacket::create_atom_post(int ilocal) { - int nlocal = atom->nlocal; - if (nlocal == nmax) grow(0); - - tag[nlocal] = 0; - type[nlocal] = itype; - x[nlocal][0] = coord[0]; - x[nlocal][1] = coord[1]; - x[nlocal][2] = coord[2]; - mask[nlocal] = 1; - image[nlocal] = ((imageint) IMGMAX << IMG2BITS) | - ((imageint) IMGMAX << IMGBITS) | IMGMAX; - v[nlocal][0] = 0.0; - v[nlocal][1] = 0.0; - v[nlocal][2] = 0.0; - - q[nlocal] = 1.; - spin[nlocal] = 0; - eradius[nlocal] = 0.0; - ervel[nlocal] = 0.0; - - etag[nlocal] = 0; - cs[2*nlocal] = 0.; - cs[2*nlocal+1] = 0.; - - atom->nlocal++; + q[ilocal] = 1.0; } /* ---------------------------------------------------------------------- - unpack one line from Atoms section of data file - initialize other atom quantities - AWPMD: 0-tag 1-type 2-q 3-spin 4-eradius 5-etag 6-cs_re 7-cs_im + modify what AtomVec::data_atom() just unpacked + or initialize other atom quantities ------------------------------------------------------------------------- */ -void AtomVecWavepacket::data_atom(double *coord, imageint imagetmp, - char **values) +void AtomVecWavepacket::data_atom_post(int ilocal) { - int nlocal = atom->nlocal; - - if (nlocal == nmax) grow(0); - - tag[nlocal] = utils::tnumeric(FLERR,values[0],true,lmp); - type[nlocal] = utils::inumeric(FLERR,values[1],true,lmp); - if (type[nlocal] <= 0 || type[nlocal] > atom->ntypes) - error->one(FLERR,"Invalid atom type in Atoms section of data file"); - - q[nlocal] = utils::numeric(FLERR,values[2],true,lmp); - spin[nlocal] = utils::inumeric(FLERR,values[3],true,lmp); - eradius[nlocal] = utils::numeric(FLERR,values[4],true,lmp); - if (eradius[nlocal] < 0.0) - error->one(FLERR,"Invalid eradius in Atoms section of data file"); - - etag[nlocal] = utils::inumeric(FLERR,values[5],true,lmp); - cs[2*nlocal] = utils::numeric(FLERR,values[6],true,lmp); - cs[2*nlocal+1] = utils::numeric(FLERR,values[7],true,lmp); - - x[nlocal][0] = coord[0]; - x[nlocal][1] = coord[1]; - x[nlocal][2] = coord[2]; - - image[nlocal] = imagetmp; - - mask[nlocal] = 1; - v[nlocal][0] = 0.0; - v[nlocal][1] = 0.0; - v[nlocal][2] = 0.0; - ervel[nlocal] = 0.0; - - atom->nlocal++; -} - -/* ---------------------------------------------------------------------- - unpack hybrid quantities from one line in Atoms section of data file - initialize other atom quantities for this sub-style -------------------------------------------------------------------------- */ - -int AtomVecWavepacket::data_atom_hybrid(int nlocal, char **values) -{ - q[nlocal] = utils::numeric(FLERR,values[0],true,lmp); - spin[nlocal] = utils::inumeric(FLERR,values[1],true,lmp); - eradius[nlocal] = utils::numeric(FLERR,values[2],true,lmp); - if (eradius[nlocal] < 0.0) - error->one(FLERR,"Invalid eradius in Atoms section of data file"); - - etag[nlocal] = utils::inumeric(FLERR,values[3],true,lmp); - cs[2*nlocal] = utils::inumeric(FLERR,values[4],true,lmp); - cs[2*nlocal+1] = utils::numeric(FLERR,values[5],true,lmp); - - v[nlocal][0] = 0.0; - v[nlocal][1] = 0.0; - v[nlocal][2] = 0.0; - ervel[nlocal] = 0.0; - - return 3; -} - -/* ---------------------------------------------------------------------- - unpack one line from Velocities section of data file -------------------------------------------------------------------------- */ - -void AtomVecWavepacket::data_vel(int m, char **values) -{ - v[m][0] = utils::numeric(FLERR,values[0],true,lmp); - v[m][1] = utils::numeric(FLERR,values[1],true,lmp); - v[m][2] = utils::numeric(FLERR,values[2],true,lmp); - ervel[m] = utils::numeric(FLERR,values[3],true,lmp); -} - -/* ---------------------------------------------------------------------- - unpack hybrid quantities from one line in Velocities section of data file -------------------------------------------------------------------------- */ - -int AtomVecWavepacket::data_vel_hybrid(int m, char **values) -{ - ervel[m] = utils::numeric(FLERR,values[0],true,lmp); - return 1; -} - -/* ---------------------------------------------------------------------- - pack atom info for data file including 3 image flags -------------------------------------------------------------------------- */ - -void AtomVecWavepacket::pack_data(double **buf) -{ - int nlocal = atom->nlocal; - for (int i = 0; i < nlocal; i++) { - buf[i][0] = ubuf(tag[i]).d; - buf[i][1] = ubuf(type[i]).d; - buf[i][2] = q[i]; - buf[i][3] = ubuf(spin[i]).d; - buf[i][4] = eradius[i]; - buf[i][5] = ubuf(etag[i]).d; - buf[i][6] = cs[2*i]; - buf[i][7] = cs[2*i+1]; - buf[i][8] = x[i][0]; - buf[i][9] = x[i][1]; - buf[i][10] = x[i][2]; - buf[i][11] = ubuf((image[i] & IMGMASK) - IMGMAX).d; - buf[i][12] = ubuf((image[i] >> IMGBITS & IMGMASK) - IMGMAX).d; - buf[i][13] = ubuf((image[i] >> IMG2BITS) - IMGMAX).d; - } -} - -/* ---------------------------------------------------------------------- - pack hybrid atom info for data file -------------------------------------------------------------------------- */ - -int AtomVecWavepacket::pack_data_hybrid(int i, double *buf) -{ - buf[0] = q[i]; - buf[1] = ubuf(spin[i]).d; - buf[2] = eradius[i]; - buf[3] = ubuf(etag[i]).d; - buf[4] = cs[2*i]; - buf[5] = cs[2*i+1]; - return 6; -} - -/* ---------------------------------------------------------------------- - write atom info to data file including 3 image flags -------------------------------------------------------------------------- */ - -void AtomVecWavepacket::write_data(FILE *fp, int n, double **buf) -{ - for (int i = 0; i < n; i++) - fprintf(fp,TAGINT_FORMAT - " %d %-1.16e %d %-1.16e %d %-1.16e %-1.16e %-1.16e " - "%-1.16e %-1.16e %d %d %d\n", - (tagint) ubuf(buf[i][0]).i,(int) ubuf(buf[i][1]).i, - buf[i][2],(int) ubuf(buf[i][3]).i,buf[i][4], - (int) ubuf(buf[i][5]).i,buf[i][6],buf[i][8], - buf[i][8],buf[i][9],buf[i][10], - (int) ubuf(buf[i][11]).i,(int) ubuf(buf[i][12]).i, - (int) ubuf(buf[i][13]).i); -} - -/* ---------------------------------------------------------------------- - write hybrid atom info to data file -------------------------------------------------------------------------- */ - -int AtomVecWavepacket::write_data_hybrid(FILE *fp, double *buf) -{ - fprintf(fp," %-1.16e %d %-1.16e %d %-1.16e %-1.16e", - buf[0],(int) ubuf(buf[1]).i,buf[2],(int) ubuf(buf[3]).i, - buf[4],buf[5]); - return 6; -} - -/* ---------------------------------------------------------------------- - pack velocity info for data file -------------------------------------------------------------------------- */ - -void AtomVecWavepacket::pack_vel(double **buf) -{ - int nlocal = atom->nlocal; - for (int i = 0; i < nlocal; i++) { - buf[i][0] = ubuf(tag[i]).d; - buf[i][1] = v[i][0]; - buf[i][2] = v[i][1]; - buf[i][3] = v[i][2]; - buf[i][4] = ervel[i]; - } -} - -/* ---------------------------------------------------------------------- - pack hybrid velocity info for data file -------------------------------------------------------------------------- */ - -int AtomVecWavepacket::pack_vel_hybrid(int i, double *buf) -{ - buf[0] = ervel[i]; - return 1; -} - -/* ---------------------------------------------------------------------- - write velocity info to data file -------------------------------------------------------------------------- */ - -void AtomVecWavepacket::write_vel(FILE *fp, int n, double **buf) -{ - for (int i = 0; i < n; i++) - fprintf(fp,TAGINT_FORMAT " %-1.16e %-1.16e %-1.16e %-1.16e\n", - (tagint) ubuf(buf[i][0]).i,buf[i][1],buf[i][2],buf[i][3],buf[i][4]); -} - -/* ---------------------------------------------------------------------- - write hybrid velocity info to data file -------------------------------------------------------------------------- */ - -int AtomVecWavepacket::write_vel_hybrid(FILE *fp, double *buf) -{ - fprintf(fp," %-1.16e",buf[0]); - return 1; + ervel[ilocal] = 0.0; } /* ---------------------------------------------------------------------- @@ -1129,10 +127,9 @@ int AtomVecWavepacket::property_atom(char *name) void AtomVecWavepacket::pack_property_atom(int index, double *buf, int nvalues, int groupbit) { - int *mask = atom->mask; int nlocal = atom->nlocal; - int n = 0; + int n = 0; if (index == 0) { for (int i = 0; i < nlocal; i++) { if (mask[i] & groupbit) buf[n] = spin[i]; @@ -1159,35 +156,3 @@ void AtomVecWavepacket::pack_property_atom(int index, double *buf, } } } - -/* ---------------------------------------------------------------------- - return # of bytes of allocated memory -------------------------------------------------------------------------- */ - -bigint AtomVecWavepacket::memory_usage() -{ - bigint bytes = 0; - - if (atom->memcheck("tag")) bytes += memory->usage(tag,nmax); - if (atom->memcheck("type")) bytes += memory->usage(type,nmax); - if (atom->memcheck("mask")) bytes += memory->usage(mask,nmax); - if (atom->memcheck("image")) bytes += memory->usage(image,nmax); - if (atom->memcheck("x")) bytes += memory->usage(x,nmax,3); - if (atom->memcheck("v")) bytes += memory->usage(v,nmax,3); - if (atom->memcheck("f")) bytes += memory->usage(f,nmax*comm->nthreads,3); - - if (atom->memcheck("q")) bytes += memory->usage(q,nmax); - if (atom->memcheck("spin")) bytes += memory->usage(spin,nmax); - if (atom->memcheck("eradius")) bytes += memory->usage(eradius,nmax); - if (atom->memcheck("ervel")) bytes += memory->usage(ervel,nmax); - if (atom->memcheck("erforce")) - bytes += memory->usage(erforce,nmax*comm->nthreads); - - if (atom->memcheck("ervelforce")) bytes += memory->usage(ervelforce,nmax); - if (atom->memcheck("cs")) bytes += memory->usage(cs,2*nmax); - if (atom->memcheck("csforce")) bytes += memory->usage(csforce,2*nmax); - if (atom->memcheck("vforce")) bytes += memory->usage(vforce,3*nmax); - if (atom->memcheck("etag")) bytes += memory->usage(etag,nmax); - - return bytes; -} diff --git a/src/USER-AWPMD/atom_vec_wavepacket.h b/src/USER-AWPMD/atom_vec_wavepacket.h index d1a0c7c7f28c9c2907d302249d6cc9dd2395ce8f..123414eeb7db9e1280106ae1d10446dec9c4eb00 100644 --- a/src/USER-AWPMD/atom_vec_wavepacket.h +++ b/src/USER-AWPMD/atom_vec_wavepacket.h @@ -11,11 +11,6 @@ See the README file in the top-level LAMMPS directory. ------------------------------------------------------------------------- */ -/* ---------------------------------------------------------------------- - Contributing author: Ilya Valuev (JIHT RAS) -------------------------------------------------------------------------- */ - - #ifdef ATOM_CLASS AtomStyle(wavepacket,AtomVecWavepacket) @@ -32,77 +27,17 @@ namespace LAMMPS_NS { class AtomVecWavepacket : public AtomVec { public: AtomVecWavepacket(class LAMMPS *); - ~AtomVecWavepacket() {} - void grow(int); - void grow_reset(); - void copy(int, int, int); + + void grow_pointers(); void force_clear(int, size_t); - int pack_comm(int, int *, double *, int, int *); - int pack_comm_vel(int, int *, double *, int, int *); - int pack_comm_hybrid(int, int *, double *); - void unpack_comm(int, int, double *); - void unpack_comm_vel(int, int, double *); - int unpack_comm_hybrid(int, int, double *); - int pack_reverse(int, int, double *); - int pack_reverse_hybrid(int, int, double *); - void unpack_reverse(int, int *, double *); - int unpack_reverse_hybrid(int, int *, double *); - int pack_border(int, int *, double *, int, int *); - int pack_border_vel(int, int *, double *, int, int *); - int pack_border_hybrid(int, int *, double *); - void unpack_border(int, int, double *); - void unpack_border_vel(int, int, double *); - int unpack_border_hybrid(int, int, double *); - int pack_exchange(int, double *); - int unpack_exchange(double *); - int size_restart(); - int pack_restart(int, double *); - int unpack_restart(double *); - void create_atom(int, double *); - void data_atom(double *, imageint, char **); - int data_atom_hybrid(int, char **); - void data_vel(int, char **); - int data_vel_hybrid(int, char **); - void pack_data(double **); - int pack_data_hybrid(int, double *); - void write_data(FILE *, int, double **); - int write_data_hybrid(FILE *, double *); - void pack_vel(double **); - int pack_vel_hybrid(int, double *); - void write_vel(FILE *, int, double **); - int write_vel_hybrid(FILE *, double *); + void create_atom_post(int); + void data_atom_post(int); int property_atom(char *); void pack_property_atom(int, double *, int, int); - bigint memory_usage(); - -private: - tagint *tag; - int *type,*mask; - imageint *image; - double **x,**v,**f; - ///\en spin: -1 or 1 for electron, 0 for ion (compatible with eff) + private: int *spin; - ///\en charge: must be specified in the corresponding units (-1 for electron in real units, eff compatible) - double *q; - ///\en width of the wavepacket (compatible with eff) - double *eradius; - ///\en width velocity for the wavepacket (compatible with eff) - double *ervel; - ///\en (generalized) force on width (compatible with eff) - double *erforce; - - // AWPMD- specific: - ///\en electron tag: must be the same for the WPs belonging to the same electron - int *etag; - ///\en wavepacket split coefficients: cre, cim, size is 2*N - double *cs; - ///\en force on wavepacket split coefficients: re, im, size is 2*N - double *csforce; - ///\en (generalized) force on velocity, size is 3*N - double *vforce; - ///\en (generalized) force on radius velocity, size is N - double *ervelforce; + double *q,*eradius,*ervel,*erforce; }; } diff --git a/src/USER-AWPMD/fix_nve_awpmd.cpp b/src/USER-AWPMD/fix_nve_awpmd.cpp index b4a1cbf72a715077de53727737fdb145d3887f01..2aa2e7680b2aff32a909b6f31bbfdd0c24a886ed 100644 --- a/src/USER-AWPMD/fix_nve_awpmd.cpp +++ b/src/USER-AWPMD/fix_nve_awpmd.cpp @@ -74,8 +74,6 @@ void FixNVEAwpmd::init() void FixNVEAwpmd::initial_integrate(int /* vflag */) { - - // update v,vr and x,radius of atoms in group double **x = atom->x; @@ -84,7 +82,7 @@ void FixNVEAwpmd::initial_integrate(int /* vflag */) double *ervel = atom->ervel; double **f = atom->f; double *erforce = atom->erforce; - double *vforce=atom->vforce; + double **vforce=atom->vforce; double *ervelforce=atom->ervelforce; double *mass = atom->mass; @@ -101,7 +99,7 @@ void FixNVEAwpmd::initial_integrate(int /* vflag */) double dtfm = dtf / mass[type[i]]; double dtfmr=dtfm; for(int j=0;j<3;j++){ - x[i][j] += dtv*vforce[3*i+j]; + x[i][j] += dtv*vforce[i][j]; v[i][j] += dtfm*f[i][j]; } eradius[i]+= dtv*ervelforce[i]; diff --git a/src/USER-AWPMD/pair_awpmd_cut.cpp b/src/USER-AWPMD/pair_awpmd_cut.cpp index 092327c367bfa07830110fa291c17255a891fffa..e382a1cb9c6d768a457d859504aeba9016cef7df 100644 --- a/src/USER-AWPMD/pair_awpmd_cut.cpp +++ b/src/USER-AWPMD/pair_awpmd_cut.cpp @@ -259,7 +259,7 @@ void PairAWPMDCut::compute(int eflag, int vflag) Vector_3 xx=Vector_3(x[i][0],x[i][1],x[i][2]); Vector_3 rv=m*Vector_3(v[i][0],v[i][1],v[i][2]); double pv=ermscale*m*atom->ervel[i]; - Vector_2 cc=Vector_2(atom->cs[2*i],atom->cs[2*i+1]); + Vector_2 cc=Vector_2(atom->cs[i][0],atom->cs[i][1]); gmap[i]=wpmd->add_split(xx,rv,atom->eradius[i],pv,cc,1.,atom->q[i],itag[i] : -atom->tag[i]); // resetting for the case constraints were applied v[i][0]=rv[0]/m; @@ -284,7 +284,7 @@ void PairAWPMDCut::compute(int eflag, int vflag) } else { // electron int iel=gmap[i]; int s=spin[i] >0 ? 0 : 1; - wpmd->get_wp_force(s,iel,(Vector_3 *)f[i],(Vector_3 *)(atom->vforce+3*i),atom->erforce+i,atom->ervelforce+i,(Vector_2 *)(atom->csforce+2*i)); + wpmd->get_wp_force(s,iel,(Vector_3 *)f[i],(Vector_3 *)(atom->vforce[i]),atom->erforce+i,atom->ervelforce+i,(Vector_2 *)(atom->csforce[i])); } } @@ -671,11 +671,11 @@ void PairAWPMDCut::min_xf_get(int /* ignore */) double *eradius = atom->eradius; double *erforce = atom->erforce; double **v=atom->v; - double *vforce=atom->vforce; + double **vforce=atom->vforce; double *ervel=atom->ervel; double *ervelforce=atom->ervelforce; - double *cs=atom->cs; - double *csforce=atom->csforce; + double **cs=atom->cs; + double **csforce=atom->csforce; int *spin = atom->spin; int nlocal = atom->nlocal; @@ -686,14 +686,14 @@ void PairAWPMDCut::min_xf_get(int /* ignore */) min_varforce[7*i] = eradius[i]*erforce[i]; for(int j=0;j<3;j++){ min_var[7*i+1+3*j] = v[i][j]; - min_varforce[7*i+1+3*j] = vforce[3*i+j]; + min_varforce[7*i+1+3*j] = vforce[i][j]; } min_var[7*i+4] = ervel[i]; min_varforce[7*i+4] = ervelforce[i]; - min_var[7*i+5] = cs[2*i]; - min_varforce[7*i+5] = csforce[2*i]; - min_var[7*i+6] = cs[2*i+1]; - min_varforce[7*i+6] = csforce[2*i+1]; + min_var[7*i+5] = cs[i][0]; + min_varforce[7*i+5] = csforce[i][0]; + min_var[7*i+6] = cs[i][1]; + min_varforce[7*i+6] = csforce[i][1]; } else { for(int j=0;j<7;j++) @@ -710,7 +710,7 @@ void PairAWPMDCut::min_x_set(int /* ignore */) double *eradius = atom->eradius; double **v=atom->v; double *ervel=atom->ervel; - double *cs=atom->cs; + double **cs=atom->cs; int *spin = atom->spin; int nlocal = atom->nlocal; @@ -721,8 +721,8 @@ void PairAWPMDCut::min_x_set(int /* ignore */) for(int j=0;j<3;j++) v[i][j]=min_var[7*i+1+3*j]; ervel[i]=min_var[7*i+4]; - cs[2*i]=min_var[7*i+5]; - cs[2*i+1]=min_var[7*i+6]; + cs[i][0]=min_var[7*i+5]; + cs[i][1]=min_var[7*i+6]; } } } diff --git a/src/USER-BOCS/fix_bocs.cpp b/src/USER-BOCS/fix_bocs.cpp index adce231bf1521f9cc866d898d734bfa1a203121e..7c2f75a8ce0dbd5c4c341667052c7df62774b1a6 100644 --- a/src/USER-BOCS/fix_bocs.cpp +++ b/src/USER-BOCS/fix_bocs.cpp @@ -292,8 +292,12 @@ FixBocs::FixBocs(LAMMPS *lmp, int narg, char **arg) : if (p_flag[i]) pstat_flag = 1; if (pstat_flag) { - if (p_flag[0] || p_flag[1] || p_flag[2]) box_change_size = 1; - if (p_flag[3] || p_flag[4] || p_flag[5]) box_change_shape = 1; + if (p_flag[0]) box_change |= BOX_CHANGE_X; + if (p_flag[1]) box_change |= BOX_CHANGE_Y; + if (p_flag[2]) box_change |= BOX_CHANGE_Z; + if (p_flag[3]) box_change |= BOX_CHANGE_YZ; + if (p_flag[4]) box_change |= BOX_CHANGE_XZ; + if (p_flag[5]) box_change |= BOX_CHANGE_XY; no_change_box = 1; if (allremap == 0) restart_pbc = 1; @@ -302,10 +306,10 @@ FixBocs::FixBocs(LAMMPS *lmp, int narg, char **arg) : // pre_exchange only required if flips can occur due to shape changes if (flipflag && (p_flag[3] || p_flag[4] || p_flag[5])) - pre_exchange_flag = 1; + pre_exchange_flag = pre_exchange_migrate = 1; if (flipflag && (domain->yz != 0.0 || domain->xz != 0.0 || domain->xy != 0.0)) - pre_exchange_flag = 1; + pre_exchange_flag = pre_exchange_migrate = 1; } // convert input periods to frequencies diff --git a/src/USER-CGDNA/bond_oxdna_fene.cpp b/src/USER-CGDNA/bond_oxdna_fene.cpp index 834b53a5c7b6a3822fd5417189d74e59e555afc1..be59858e667ae9ff463e594d4837342356e81039 100644 --- a/src/USER-CGDNA/bond_oxdna_fene.cpp +++ b/src/USER-CGDNA/bond_oxdna_fene.cpp @@ -221,7 +221,7 @@ void BondOxdnaFene::compute(int eflag, int vflag) TAGINT_FORMAT " " TAGINT_FORMAT " %g", update->ntimestep,atom->tag[a],atom->tag[b],r); error->warning(FLERR,str,0); - if (rlogarg <= -8.0) error->one(FLERR,"Bad FENE bond"); + rlogarg = 0.1; } fbond = -k[type]*rr0/rlogarg/Deltasq/r; @@ -421,7 +421,7 @@ double BondOxdnaFene::single(int type, double rsq, int /*i*/, int /*j*/, sprintf(str,"FENE bond too long: " BIGINT_FORMAT " %g", update->ntimestep,sqrt(rsq)); error->warning(FLERR,str,0); - if (rlogarg <= -8.0) error->one(FLERR,"Bad FENE bond"); + rlogarg = 0.1; } double eng = -0.5 * k[type]*log(rlogarg); diff --git a/src/USER-CGDNA/pair_oxrna2_xstk.cpp b/src/USER-CGDNA/pair_oxrna2_xstk.cpp index f5207c53e74427772599af372fbefd9255ce5f75..73a73c1ea0a1e12ebe40002741ab40c0d7bee45f 100644 --- a/src/USER-CGDNA/pair_oxrna2_xstk.cpp +++ b/src/USER-CGDNA/pair_oxrna2_xstk.cpp @@ -112,7 +112,6 @@ void PairOxrna2Xstk::compute(int eflag, int vflag) double theta1,t1dir[3],cost1; double theta2,t2dir[3],cost2; double theta3,t3dir[3],cost3; - double theta4,theta4p,t4dir[3],cost4; double theta7,theta7p,t7dir[3],cost7; double theta8,theta8p,t8dir[3],cost8; diff --git a/src/USER-DIFFRACTION/compute_saed.cpp b/src/USER-DIFFRACTION/compute_saed.cpp index 7b5b2f4f5b9900b485fbaf02e2e11efecd9eb5b8..5dd47b28bd4c86618a32de0847f39c637f2db1df 100644 --- a/src/USER-DIFFRACTION/compute_saed.cpp +++ b/src/USER-DIFFRACTION/compute_saed.cpp @@ -15,6 +15,7 @@ Contributing authors: Shawn Coleman & Douglas Spearot (Arkansas) ------------------------------------------------------------------------- */ +#include "omp_compat.h" #include "compute_saed.h" #include #include @@ -418,7 +419,7 @@ void ComputeSAED::compute_vector() double frac = 0.1; #if defined(_OPENMP) -#pragma omp parallel default(none) shared(offset,ASFSAED,typelocal,xlocal,Fvec,m,frac) +#pragma omp parallel LMP_DEFAULT_NONE LMP_SHARED(offset,ASFSAED,typelocal,xlocal,Fvec,m,frac) #endif { double *f = new double[ntypes]; // atomic structure factor by type diff --git a/src/USER-DIFFRACTION/compute_xrd.cpp b/src/USER-DIFFRACTION/compute_xrd.cpp index 7f69449282b04cadd7181bb2c393ed43edc6fc91..e75546b5483a5fdfa83bbb67f18db401fbe46efb 100644 --- a/src/USER-DIFFRACTION/compute_xrd.cpp +++ b/src/USER-DIFFRACTION/compute_xrd.cpp @@ -16,6 +16,7 @@ Updated: 06/17/2015-2 ------------------------------------------------------------------------- */ +#include "omp_compat.h" #include "compute_xrd.h" #include #include @@ -353,7 +354,7 @@ void ComputeXRD::compute_array() double frac = 0.1; #if defined(_OPENMP) -#pragma omp parallel default(none) shared(typelocal,xlocal,Fvec,m,frac,ASFXRD) +#pragma omp parallel LMP_DEFAULT_NONE LMP_SHARED(typelocal,xlocal,Fvec,m,frac,ASFXRD) #endif { double *f = new double[ntypes]; // atomic structure factor by type diff --git a/src/USER-DIFFRACTION/compute_xrd_consts.h b/src/USER-DIFFRACTION/compute_xrd_consts.h index 582cecae014902f5f874b2500658f21aadb52baf..aeaddf7daa2eb24847112300cce46da3203f34c7 100644 --- a/src/USER-DIFFRACTION/compute_xrd_consts.h +++ b/src/USER-DIFFRACTION/compute_xrd_consts.h @@ -18,12 +18,12 @@ The paramaters for analytical approximation of the atomic scattering factors used for x-ray diffraction are gathered from the resources: -Brown P J, Fox A G, Maslen E N, O’Keefe M A and Willis B T M 2004 Intensity +Brown P J, Fox A G, Maslen E N, O'Keefe M A and Willis B T M 2004 Intensity of diffraction intensities International Tables for Crystallography Volume C: Mathematical, Physical, and Chemical Tables ed E Prince (Norwell, MA: Kluwer Academic Publishers) pp 55495 -Fox A G, O’Keefe M A and Tabbernor M A 1989 Relativistic Hartree Fock +Fox A G, O'Keefe M A and Tabbernor M A 1989 Relativistic Hartree Fock x-ray and electron atomic scattering factors at high angles Acta Crystallogr. A 45 78693 */ diff --git a/src/USER-DPD/atom_vec_dpd.cpp b/src/USER-DPD/atom_vec_dpd.cpp index d1768d473ef50be5306038fc824cf1182a3fddae..34efd9bc2b3fb2fb71bec02654f10448c0ea1451 100644 --- a/src/USER-DPD/atom_vec_dpd.cpp +++ b/src/USER-DPD/atom_vec_dpd.cpp @@ -17,13 +17,7 @@ #include "atom_vec_dpd.h" #include "atom.h" -#include "comm.h" -#include "domain.h" -#include "modify.h" -#include "fix.h" -#include "memory.h" #include "error.h" -#include "utils.h" using namespace LAMMPS_NS; @@ -34,64 +28,37 @@ AtomVecDPD::AtomVecDPD(LAMMPS *lmp) : AtomVec(lmp) molecular = 0; mass_type = 1; - comm_x_only = comm_f_only = 0; // we communicate not only x forward but also dpdTheta - size_forward = 7; // 3 + dpdTheta + uCond + uMech + uChem - size_reverse = 3; // 3 - size_border = 12; // 6 + dpdTheta + uCond + uMech + uChem + uCG + uCGnew - size_velocity = 3; - size_data_atom = 6; // we read id + type + dpdTheta + x + y + z - size_data_vel = 4; - xcol_data = 4; // 1=id 2=type 3=dpdTheta 4=x - atom->rho_flag = 1; atom->dpd_flag = 1; -} - -/* ---------------------------------------------------------------------- - grow atom arrays - n = 0 grows arrays by a chunk - n > 0 allocates arrays to size n -------------------------------------------------------------------------- */ - -void AtomVecDPD::grow(int n) -{ - if (n == 0) grow_nmax(); - else nmax = n; - atom->nmax = nmax; - if (nmax < 0) - error->one(FLERR,"Per-processor system is too big"); - tag = memory->grow(atom->tag,nmax,"atom:tag"); - type = memory->grow(atom->type,nmax,"atom:type"); - mask = memory->grow(atom->mask,nmax,"atom:mask"); - image = memory->grow(atom->image,nmax,"atom:image"); - x = memory->grow(atom->x,nmax,3,"atom:x"); - v = memory->grow(atom->v,nmax,3,"atom:v"); - f = memory->grow(atom->f,nmax*comm->nthreads,3,"atom:f"); + // strings with peratom variables to include in each AtomVec method + // strings cannot contain fields in corresponding AtomVec default strings + // order of fields in a string does not matter + // except: fields_data_atom & fields_data_vel must match data file - rho = memory->grow(atom->rho, nmax, "atom:rho"); - dpdTheta = memory->grow(atom->dpdTheta, nmax, "atom:dpdTheta"); - uCond = memory->grow(atom->uCond,nmax,"atom:uCond"); - uMech = memory->grow(atom->uMech,nmax,"atom:uMech"); - uChem = memory->grow(atom->uChem,nmax,"atom:uChem"); - uCG = memory->grow(atom->uCG,nmax,"atom:uCG"); - uCGnew = memory->grow(atom->uCGnew,nmax,"atom:uCGnew"); - duChem = memory->grow(atom->duChem,nmax,"atom:duChem"); + fields_grow = (char *) "rho dpdTheta uCond uMech uChem uCG uCGnew duChem"; + fields_copy = (char *) "dpdTheta uCond uMech uChem uCG uCGnew"; + fields_comm = (char *) "dpdTheta uCond uMech uChem"; + fields_comm_vel = (char *) "dpdTheta uCond uMech uChem"; + fields_reverse = (char *) ""; + fields_border = (char *) "dpdTheta uCond uMech uChem uCG uCGnew"; + fields_border_vel = (char *) "dpdTheta uCond uMech uChem uCG uCGnew"; + fields_exchange = (char *) "dpdTheta uCond uMech uChem uCG uCGnew"; + fields_restart = (char *) "dpdTheta uCond uMech uChem"; + fields_create = (char *) "rho dpdTheta uCond uMech uChem uCG uCGnew duChem"; + fields_data_atom = (char *) "id type dpdTheta x"; + fields_data_vel = (char *) "id v"; - if (atom->nextra_grow) - for (int iextra = 0; iextra < atom->nextra_grow; iextra++) - modify->fix[atom->extra_grow[iextra]]->grow_arrays(nmax); + setup_fields(); } /* ---------------------------------------------------------------------- - reset local array ptrs + set local copies of all grow ptrs used by this class, except defaults + needed in replicate when 2 atom classes exist and it calls pack_restart() ------------------------------------------------------------------------- */ -void AtomVecDPD::grow_reset() +void AtomVecDPD::grow_pointers() { - tag = atom->tag; type = atom->type; - mask = atom->mask; image = atom->image; - x = atom->x; v = atom->v; f = atom->f; rho = atom->rho; dpdTheta = atom->dpdTheta; uCond = atom->uCond; @@ -99,839 +66,33 @@ void AtomVecDPD::grow_reset() uChem = atom->uChem; uCG = atom->uCG; uCGnew = atom->uCGnew; - duChem = atom->duChem; } /* ---------------------------------------------------------------------- - copy atom I info to atom J + initialize other atom quantities after AtomVec::unpack_restart() ------------------------------------------------------------------------- */ -void AtomVecDPD::copy(int i, int j, int delflag) +void AtomVecDPD::unpack_restart_init(int ilocal) { - tag[j] = tag[i]; - type[j] = type[i]; - mask[j] = mask[i]; - image[j] = image[i]; - x[j][0] = x[i][0]; - x[j][1] = x[i][1]; - x[j][2] = x[i][2]; - v[j][0] = v[i][0]; - v[j][1] = v[i][1]; - v[j][2] = v[i][2]; - dpdTheta[j] = dpdTheta[i]; - uCond[j] = uCond[i]; - uMech[j] = uMech[i]; - uChem[j] = uChem[i]; - uCG[j] = uCG[i]; - uCGnew[j] = uCGnew[i]; - - if (atom->nextra_grow) - for (int iextra = 0; iextra < atom->nextra_grow; iextra++) - modify->fix[atom->extra_grow[iextra]]->copy_arrays(i,j,delflag); -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecDPD::pack_comm(int n, int *list, double *buf, - int pbc_flag, int *pbc) -{ - int i,j,m; - double dx,dy,dz; - - m = 0; - if (pbc_flag == 0) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = x[j][0]; - buf[m++] = x[j][1]; - buf[m++] = x[j][2]; - buf[m++] = dpdTheta[j]; - buf[m++] = uCond[j]; - buf[m++] = uMech[j]; - buf[m++] = uChem[j]; - } - } else { - if (domain->triclinic == 0) { - dx = pbc[0]*domain->xprd; - dy = pbc[1]*domain->yprd; - dz = pbc[2]*domain->zprd; - } else { - dx = pbc[0]*domain->xprd + pbc[5]*domain->xy + pbc[4]*domain->xz; - dy = pbc[1]*domain->yprd + pbc[3]*domain->yz; - dz = pbc[2]*domain->zprd; - } - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = x[j][0] + dx; - buf[m++] = x[j][1] + dy; - buf[m++] = x[j][2] + dz; - buf[m++] = dpdTheta[j]; - buf[m++] = uCond[j]; - buf[m++] = uMech[j]; - buf[m++] = uChem[j]; - } - } - return m; -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecDPD::pack_comm_vel(int n, int *list, double *buf, - int pbc_flag, int *pbc) -{ - int i,j,m; - double dx,dy,dz,dvx,dvy,dvz; - - m = 0; - if (pbc_flag == 0) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = x[j][0]; - buf[m++] = x[j][1]; - buf[m++] = x[j][2]; - buf[m++] = v[j][0]; - buf[m++] = v[j][1]; - buf[m++] = v[j][2]; - buf[m++] = dpdTheta[j]; - buf[m++] = uCond[j]; - buf[m++] = uMech[j]; - buf[m++] = uChem[j]; - } - } else { - if (domain->triclinic == 0) { - dx = pbc[0]*domain->xprd; - dy = pbc[1]*domain->yprd; - dz = pbc[2]*domain->zprd; - } else { - dx = pbc[0]*domain->xprd + pbc[5]*domain->xy + pbc[4]*domain->xz; - dy = pbc[1]*domain->yprd + pbc[3]*domain->yz; - dz = pbc[2]*domain->zprd; - } - if (!deform_vremap) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = x[j][0] + dx; - buf[m++] = x[j][1] + dy; - buf[m++] = x[j][2] + dz; - buf[m++] = v[j][0]; - buf[m++] = v[j][1]; - buf[m++] = v[j][2]; - buf[m++] = dpdTheta[j]; - buf[m++] = uCond[j]; - buf[m++] = uMech[j]; - buf[m++] = uChem[j]; - } - } else { - dvx = pbc[0]*h_rate[0] + pbc[5]*h_rate[5] + pbc[4]*h_rate[4]; - dvy = pbc[1]*h_rate[1] + pbc[3]*h_rate[3]; - dvz = pbc[2]*h_rate[2]; - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = x[j][0] + dx; - buf[m++] = x[j][1] + dy; - buf[m++] = x[j][2] + dz; - if (mask[i] & deform_groupbit) { - buf[m++] = v[j][0] + dvx; - buf[m++] = v[j][1] + dvy; - buf[m++] = v[j][2] + dvz; - } else { - buf[m++] = v[j][0]; - buf[m++] = v[j][1]; - buf[m++] = v[j][2]; - } - buf[m++] = dpdTheta[j]; - buf[m++] = uCond[j]; - buf[m++] = uMech[j]; - buf[m++] = uChem[j]; - } - } - } - return m; -} - -/* ---------------------------------------------------------------------- */ - -void AtomVecDPD::unpack_comm(int n, int first, double *buf) -{ - int i,m,last; - - m = 0; - last = first + n; - for (i = first; i < last; i++) { - x[i][0] = buf[m++]; - x[i][1] = buf[m++]; - x[i][2] = buf[m++]; - dpdTheta[i] = buf[m++]; - uCond[i] = buf[m++]; - uMech[i] = buf[m++]; - uChem[i] = buf[m++]; - } -} - -/* ---------------------------------------------------------------------- */ - -void AtomVecDPD::unpack_comm_vel(int n, int first, double *buf) -{ - int i,m,last; - - m = 0; - last = first + n; - for (i = first; i < last; i++) { - x[i][0] = buf[m++]; - x[i][1] = buf[m++]; - x[i][2] = buf[m++]; - v[i][0] = buf[m++]; - v[i][1] = buf[m++]; - v[i][2] = buf[m++]; - dpdTheta[i] = buf[m++]; - uCond[i] = buf[m++]; - uMech[i] = buf[m++]; - uChem[i] = buf[m++]; - } -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecDPD::pack_reverse(int n, int first, double *buf) -{ - int i,m,last; - - m = 0; - last = first + n; - for (i = first; i < last; i++) { - buf[m++] = f[i][0]; - buf[m++] = f[i][1]; - buf[m++] = f[i][2]; - } - return m; -} - -/* ---------------------------------------------------------------------- */ - -void AtomVecDPD::unpack_reverse(int n, int *list, double *buf) -{ - int i,j,m; - - m = 0; - for (i = 0; i < n; i++) { - j = list[i]; - f[j][0] += buf[m++]; - f[j][1] += buf[m++]; - f[j][2] += buf[m++]; - } -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecDPD::pack_border(int n, int *list, double *buf, - int pbc_flag, int *pbc) -{ - int i,j,m; - double dx,dy,dz; - - m = 0; - if (pbc_flag == 0) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = x[j][0]; - buf[m++] = x[j][1]; - buf[m++] = x[j][2]; - buf[m++] = ubuf(tag[j]).d; - buf[m++] = ubuf(type[j]).d; - buf[m++] = ubuf(mask[j]).d; - buf[m++] = dpdTheta[j]; - buf[m++] = uCond[j]; - buf[m++] = uMech[j]; - buf[m++] = uChem[j]; - buf[m++] = uCG[j]; - buf[m++] = uCGnew[j]; - } - } else { - if (domain->triclinic == 0) { - dx = pbc[0]*domain->xprd; - dy = pbc[1]*domain->yprd; - dz = pbc[2]*domain->zprd; - } else { - dx = pbc[0]; - dy = pbc[1]; - dz = pbc[2]; - } - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = x[j][0] + dx; - buf[m++] = x[j][1] + dy; - buf[m++] = x[j][2] + dz; - buf[m++] = ubuf(tag[j]).d; - buf[m++] = ubuf(type[j]).d; - buf[m++] = ubuf(mask[j]).d; - buf[m++] = dpdTheta[j]; - buf[m++] = uCond[j]; - buf[m++] = uMech[j]; - buf[m++] = uChem[j]; - buf[m++] = uCG[j]; - buf[m++] = uCGnew[j]; - } - } - - if (atom->nextra_border) - for (int iextra = 0; iextra < atom->nextra_border; iextra++) - m += modify->fix[atom->extra_border[iextra]]->pack_border(n,list,&buf[m]); - - return m; -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecDPD::pack_border_vel(int n, int *list, double *buf, - int pbc_flag, int *pbc) -{ - int i,j,m; - double dx,dy,dz,dvx,dvy,dvz; - - m = 0; - if (pbc_flag == 0) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = x[j][0]; - buf[m++] = x[j][1]; - buf[m++] = x[j][2]; - buf[m++] = ubuf(tag[j]).d; - buf[m++] = ubuf(type[j]).d; - buf[m++] = ubuf(mask[j]).d; - buf[m++] = v[j][0]; - buf[m++] = v[j][1]; - buf[m++] = v[j][2]; - buf[m++] = dpdTheta[j]; - buf[m++] = uCond[j]; - buf[m++] = uMech[j]; - buf[m++] = uChem[j]; - buf[m++] = uCG[j]; - buf[m++] = uCGnew[j]; - } - } else { - if (domain->triclinic == 0) { - dx = pbc[0]*domain->xprd; - dy = pbc[1]*domain->yprd; - dz = pbc[2]*domain->zprd; - } else { - dx = pbc[0]; - dy = pbc[1]; - dz = pbc[2]; - } - if (!deform_vremap) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = x[j][0] + dx; - buf[m++] = x[j][1] + dy; - buf[m++] = x[j][2] + dz; - buf[m++] = ubuf(tag[j]).d; - buf[m++] = ubuf(type[j]).d; - buf[m++] = ubuf(mask[j]).d; - buf[m++] = v[j][0]; - buf[m++] = v[j][1]; - buf[m++] = v[j][2]; - buf[m++] = dpdTheta[j]; - buf[m++] = uCond[j]; - buf[m++] = uMech[j]; - buf[m++] = uChem[j]; - buf[m++] = uCG[j]; - buf[m++] = uCGnew[j]; - } - } else { - dvx = pbc[0]*h_rate[0] + pbc[5]*h_rate[5] + pbc[4]*h_rate[4]; - dvy = pbc[1]*h_rate[1] + pbc[3]*h_rate[3]; - dvz = pbc[2]*h_rate[2]; - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = x[j][0] + dx; - buf[m++] = x[j][1] + dy; - buf[m++] = x[j][2] + dz; - buf[m++] = ubuf(tag[j]).d; - buf[m++] = ubuf(type[j]).d; - buf[m++] = ubuf(mask[j]).d; - if (mask[i] & deform_groupbit) { - buf[m++] = v[j][0] + dvx; - buf[m++] = v[j][1] + dvy; - buf[m++] = v[j][2] + dvz; - } else { - buf[m++] = v[j][0]; - buf[m++] = v[j][1]; - buf[m++] = v[j][2]; - } - buf[m++] = dpdTheta[j]; - buf[m++] = uCond[j]; - buf[m++] = uMech[j]; - buf[m++] = uChem[j]; - buf[m++] = uCG[j]; - buf[m++] = uCGnew[j]; - } - } - } - - if (atom->nextra_border) - for (int iextra = 0; iextra < atom->nextra_border; iextra++) - m += modify->fix[atom->extra_border[iextra]]->pack_border(n,list,&buf[m]); - - return m; -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecDPD::pack_comm_hybrid(int n, int *list, double *buf) -{ - int i,j,m; - - m = 0; - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = dpdTheta[j]; - buf[m++] = uCond[j]; - buf[m++] = uMech[j]; - buf[m++] = uChem[j]; - } - return m; -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecDPD::pack_border_hybrid(int n, int *list, double *buf) -{ - int i,j,m; - - m = 0; - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = dpdTheta[j]; - buf[m++] = uCond[j]; - buf[m++] = uMech[j]; - buf[m++] = uChem[j]; - buf[m++] = uCG[j]; - buf[m++] = uCGnew[j]; - } - return m; -} - -/* ---------------------------------------------------------------------- */ - -void AtomVecDPD::unpack_border(int n, int first, double *buf) -{ - int i,m,last; - - m = 0; - last = first + n; - for (i = first; i < last; i++) { - if (i == nmax) grow(0); - x[i][0] = buf[m++]; - x[i][1] = buf[m++]; - x[i][2] = buf[m++]; - tag[i] = (tagint) ubuf(buf[m++]).i; - type[i] = (int) ubuf(buf[m++]).i; - mask[i] = (int) ubuf(buf[m++]).i; - dpdTheta[i] = buf[m++]; - uCond[i] = buf[m++]; - uMech[i] = buf[m++]; - uChem[i] = buf[m++]; - uCG[i] = buf[m++]; - uCGnew[i] = buf[m++]; - } - - if (atom->nextra_border) - for (int iextra = 0; iextra < atom->nextra_border; iextra++) - m += modify->fix[atom->extra_border[iextra]]-> - unpack_border(n,first,&buf[m]); -} - -/* ---------------------------------------------------------------------- */ - -void AtomVecDPD::unpack_border_vel(int n, int first, double *buf) -{ - int i,m,last; - - m = 0; - last = first + n; - for (i = first; i < last; i++) { - if (i == nmax) grow(0); - x[i][0] = buf[m++]; - x[i][1] = buf[m++]; - x[i][2] = buf[m++]; - tag[i] = (tagint) ubuf(buf[m++]).i; - type[i] = (int) ubuf(buf[m++]).i; - mask[i] = (int) ubuf(buf[m++]).i; - v[i][0] = buf[m++]; - v[i][1] = buf[m++]; - v[i][2] = buf[m++]; - dpdTheta[i] = buf[m++]; - uCond[i] = buf[m++]; - uMech[i] = buf[m++]; - uChem[i] = buf[m++]; - uCG[i] = buf[m++]; - uCGnew[i] = buf[m++]; - } - - if (atom->nextra_border) - for (int iextra = 0; iextra < atom->nextra_border; iextra++) - m += modify->fix[atom->extra_border[iextra]]-> - unpack_border(n,first,&buf[m]); -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecDPD::unpack_comm_hybrid(int n, int first, double *buf) -{ - int i,m,last; - - m = 0; - last = first + n; - for (i = first; i < last; i++) { - dpdTheta[i] = buf[m++]; - uCond[i] = buf[m++]; - uMech[i] = buf[m++]; - uChem[i] = buf[m++]; - } - return m; -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecDPD::unpack_border_hybrid(int n, int first, double *buf) -{ - int i,m,last; - - m = 0; - last = first + n; - for (i = first; i < last; i++) { - dpdTheta[i] = buf[m++]; - uCond[i] = buf[m++]; - uMech[i] = buf[m++]; - uChem[i] = buf[m++]; - uCG[i] = buf[m++]; - uCGnew[i] = buf[m++]; - } - return m; -} - -/* ---------------------------------------------------------------------- - pack data for atom I for sending to another proc - xyz must be 1st 3 values, so comm::exchange() can test on them -------------------------------------------------------------------------- */ - -int AtomVecDPD::pack_exchange(int i, double *buf) -{ - int m = 1; - buf[m++] = x[i][0]; - buf[m++] = x[i][1]; - buf[m++] = x[i][2]; - buf[m++] = v[i][0]; - buf[m++] = v[i][1]; - buf[m++] = v[i][2]; - buf[m++] = ubuf(tag[i]).d; - buf[m++] = ubuf(type[i]).d; - buf[m++] = ubuf(mask[i]).d; - buf[m++] = ubuf(image[i]).d; - buf[m++] = dpdTheta[i]; - buf[m++] = uCond[i]; - buf[m++] = uMech[i]; - buf[m++] = uChem[i]; - buf[m++] = uCG[i]; - buf[m++] = uCGnew[i]; - - if (atom->nextra_grow) - for (int iextra = 0; iextra < atom->nextra_grow; iextra++) - m += modify->fix[atom->extra_grow[iextra]]->pack_exchange(i,&buf[m]); - - buf[0] = m; - return m; -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecDPD::unpack_exchange(double *buf) -{ - int nlocal = atom->nlocal; - if (nlocal == nmax) grow(0); - - int m = 1; - x[nlocal][0] = buf[m++]; - x[nlocal][1] = buf[m++]; - x[nlocal][2] = buf[m++]; - v[nlocal][0] = buf[m++]; - v[nlocal][1] = buf[m++]; - v[nlocal][2] = buf[m++]; - tag[nlocal] = (tagint) ubuf(buf[m++]).i; - type[nlocal] = (int) ubuf(buf[m++]).i; - mask[nlocal] = (int) ubuf(buf[m++]).i; - image[nlocal] = (imageint) ubuf(buf[m++]).i; - dpdTheta[nlocal] = buf[m++]; - uCond[nlocal] = buf[m++]; - uMech[nlocal] = buf[m++]; - uChem[nlocal] = buf[m++]; - uCG[nlocal] = buf[m++]; - uCGnew[nlocal] = buf[m++]; - - if (atom->nextra_grow) - for (int iextra = 0; iextra < atom->nextra_grow; iextra++) - m += modify->fix[atom->extra_grow[iextra]]-> - unpack_exchange(nlocal,&buf[m]); - - atom->nlocal++; - return m; -} - -/* ---------------------------------------------------------------------- - size of restart data for all atoms owned by this proc - include extra data stored by fixes -------------------------------------------------------------------------- */ - -int AtomVecDPD::size_restart() -{ - int i; - - int nlocal = atom->nlocal; - int n = 15 * nlocal; // 11 + dpdTheta + uCond + uMech + uChem - - if (atom->nextra_restart) - for (int iextra = 0; iextra < atom->nextra_restart; iextra++) - for (i = 0; i < nlocal; i++) - n += modify->fix[atom->extra_restart[iextra]]->size_restart(i); - - return n; -} - -/* ---------------------------------------------------------------------- - pack atom I's data for restart file including extra quantities - xyz must be 1st 3 values, so that read_restart can test on them - molecular types may be negative, but write as positive -------------------------------------------------------------------------- */ - -int AtomVecDPD::pack_restart(int i, double *buf) -{ - int m = 1; - buf[m++] = x[i][0]; - buf[m++] = x[i][1]; - buf[m++] = x[i][2]; - buf[m++] = ubuf(tag[i]).d; - buf[m++] = ubuf(type[i]).d; - buf[m++] = ubuf(mask[i]).d; - buf[m++] = ubuf(image[i]).d; - buf[m++] = v[i][0]; - buf[m++] = v[i][1]; - buf[m++] = v[i][2]; - buf[m++] = dpdTheta[i]; - buf[m++] = uCond[i]; - buf[m++] = uMech[i]; - buf[m++] = uChem[i]; - - if (atom->nextra_restart) - for (int iextra = 0; iextra < atom->nextra_restart; iextra++) - m += modify->fix[atom->extra_restart[iextra]]->pack_restart(i,&buf[m]); - - buf[0] = m; - return m; -} - -/* ---------------------------------------------------------------------- - unpack data for one atom from restart file including extra quantities -------------------------------------------------------------------------- */ - -int AtomVecDPD::unpack_restart(double *buf) -{ - int nlocal = atom->nlocal; - if (nlocal == nmax) { - grow(0); - if (atom->nextra_store) - memory->grow(atom->extra,nmax,atom->nextra_store,"atom:extra"); - } - - int m = 1; - x[nlocal][0] = buf[m++]; - x[nlocal][1] = buf[m++]; - x[nlocal][2] = buf[m++]; - tag[nlocal] = (tagint) ubuf(buf[m++]).i; - type[nlocal] = (int) ubuf(buf[m++]).i; - mask[nlocal] = (int) ubuf(buf[m++]).i; - image[nlocal] = (imageint) ubuf(buf[m++]).i; - v[nlocal][0] = buf[m++]; - v[nlocal][1] = buf[m++]; - v[nlocal][2] = buf[m++]; - dpdTheta[nlocal] = buf[m++]; - uCond[nlocal] = buf[m++]; - uMech[nlocal] = buf[m++]; - uChem[nlocal] = buf[m++]; - uCG[nlocal] = 0.0; - uCGnew[nlocal] = 0.0; - - double **extra = atom->extra; - if (atom->nextra_store) { - int size = static_cast (buf[0]) - m; - for (int i = 0; i < size; i++) extra[nlocal][i] = buf[m++]; - } - - atom->nlocal++; - return m; -} - -/* ---------------------------------------------------------------------- - create one atom of itype at coord - set other values to defaults -------------------------------------------------------------------------- */ - -void AtomVecDPD::create_atom(int itype, double *coord) -{ - int nlocal = atom->nlocal; - if (nlocal == nmax) grow(0); - - tag[nlocal] = 0; - type[nlocal] = itype; - x[nlocal][0] = coord[0]; - x[nlocal][1] = coord[1]; - x[nlocal][2] = coord[2]; - mask[nlocal] = 1; - image[nlocal] = ((imageint) IMGMAX << IMG2BITS) | - ((imageint) IMGMAX << IMGBITS) | IMGMAX; - v[nlocal][0] = 0.0; - v[nlocal][1] = 0.0; - v[nlocal][2] = 0.0; - rho[nlocal] = 0.0; - dpdTheta[nlocal] = 0.0; - uCond[nlocal] = 0.0; - uMech[nlocal] = 0.0; - uChem[nlocal] = 0.0; - uCG[nlocal] = 0.0; - uCGnew[nlocal] = 0.0; - duChem[nlocal] = 0.0; - - atom->nlocal++; -} - -/* ---------------------------------------------------------------------- - unpack one line from Atoms section of data file - initialize other atom quantities -------------------------------------------------------------------------- */ - -void AtomVecDPD::data_atom(double *coord, tagint imagetmp, char **values) -{ - int nlocal = atom->nlocal; - if (nlocal == nmax) grow(0); - - tag[nlocal] = utils::tnumeric(FLERR,values[0],true,lmp); - type[nlocal] = utils::inumeric(FLERR,values[1],true,lmp); - if (type[nlocal] <= 0 || type[nlocal] > atom->ntypes) - error->one(FLERR,"Invalid atom type in Atoms section of data file"); - - dpdTheta[nlocal] = utils::numeric(FLERR,values[2],true,lmp); - if (dpdTheta[nlocal] <= 0) - error->one(FLERR,"Internal temperature in Atoms section of date file must be > zero"); - - x[nlocal][0] = coord[0]; - x[nlocal][1] = coord[1]; - x[nlocal][2] = coord[2]; - - image[nlocal] = imagetmp; - - mask[nlocal] = 1; - v[nlocal][0] = 0.0; - v[nlocal][1] = 0.0; - v[nlocal][2] = 0.0; - - rho[nlocal] = 0.0; - uCond[nlocal] = 0.0; - uMech[nlocal] = 0.0; - uChem[nlocal] = 0.0; - uCG[nlocal] = 0.0; - uCGnew[nlocal] = 0.0; - - atom->nlocal++; -} - -/* ---------------------------------------------------------------------- - unpack hybrid quantities from one line in Atoms section of data file - initialize other atom quantities for this sub-style -------------------------------------------------------------------------- */ - -int AtomVecDPD::data_atom_hybrid(int nlocal, char **values) -{ - dpdTheta[nlocal] = utils::numeric(FLERR,values[0],true,lmp); - - return 1; -} - -/* ---------------------------------------------------------------------- - pack atom info for data file including 3 image flags -------------------------------------------------------------------------- */ - -void AtomVecDPD::pack_data(double **buf) -{ - int nlocal = atom->nlocal; - for (int i = 0; i < nlocal; i++) { - buf[i][0] = ubuf(tag[i]).d; - buf[i][1] = ubuf(type[i]).d; - buf[i][2] = dpdTheta[i]; - buf[i][3] = x[i][0]; - buf[i][4] = x[i][1]; - buf[i][5] = x[i][2]; - buf[i][6] = ubuf((image[i] & IMGMASK) - IMGMAX).d; - buf[i][7] = ubuf((image[i] >> IMGBITS & IMGMASK) - IMGMAX).d; - buf[i][8] = ubuf((image[i] >> IMG2BITS) - IMGMAX).d; - } -} - -/* ---------------------------------------------------------------------- - pack hybrid atom info for data file -------------------------------------------------------------------------- */ - -int AtomVecDPD::pack_data_hybrid(int i, double *buf) -{ - buf[0] = dpdTheta[i]; - return 1; -} - -/* ---------------------------------------------------------------------- - write atom info to data file including 3 image flags -------------------------------------------------------------------------- */ - -void AtomVecDPD::write_data(FILE *fp, int n, double **buf) -{ - for (int i = 0; i < n; i++) - fprintf(fp,TAGINT_FORMAT " %d %-1.16e %-1.16e %-1.16e %-1.16e %d %d %d\n", - (tagint) ubuf(buf[i][0]).i,(int) ubuf(buf[i][1]).i, - buf[i][2],buf[i][3],buf[i][4],buf[i][5], - (int) ubuf(buf[i][6]).i,(int) ubuf(buf[i][7]).i, - (int) ubuf(buf[i][8]).i); -} - -/* ---------------------------------------------------------------------- - write hybrid atom info to data file -------------------------------------------------------------------------- */ - -int AtomVecDPD::write_data_hybrid(FILE *fp, double *buf) -{ - fprintf(fp," %-1.16e",buf[0]); - return 1; + uCG[ilocal] = 0.0; + uCGnew[ilocal] = 0.0; } /* ---------------------------------------------------------------------- - return # of bytes of allocated memory + modify what AtomVec::data_atom() just unpacked + or initialize other atom quantities ------------------------------------------------------------------------- */ -bigint AtomVecDPD::memory_usage() +void AtomVecDPD::data_atom_post(int ilocal) { - bigint bytes = 0; - - if (atom->memcheck("tag")) bytes += memory->usage(tag,nmax); - if (atom->memcheck("type")) bytes += memory->usage(type,nmax); - if (atom->memcheck("mask")) bytes += memory->usage(mask,nmax); - if (atom->memcheck("image")) bytes += memory->usage(image,nmax); - if (atom->memcheck("x")) bytes += memory->usage(x,nmax,3); - if (atom->memcheck("v")) bytes += memory->usage(v,nmax,3); - if (atom->memcheck("f")) bytes += memory->usage(f,nmax*comm->nthreads,3); - if (atom->memcheck("rho")) bytes += memory->usage(rho,nmax); - if (atom->memcheck("dpdTheta")) bytes += memory->usage(dpdTheta,nmax); - if (atom->memcheck("uCond")) bytes += memory->usage(uCond,nmax); - if (atom->memcheck("uMech")) bytes += memory->usage(uMech,nmax); - if (atom->memcheck("uChem")) bytes += memory->usage(uChem,nmax); - if (atom->memcheck("uCG")) bytes += memory->usage(uCG,nmax); - if (atom->memcheck("uCGnew")) bytes += memory->usage(uCGnew,nmax); - if (atom->memcheck("duChem")) bytes += memory->usage(duChem,nmax); + rho[ilocal] = 0.0; + uCond[ilocal] = 0.0; + uMech[ilocal] = 0.0; + uChem[ilocal] = 0.0; + uCG[ilocal] = 0.0; + uCGnew[ilocal] = 0.0; - return bytes; + if (dpdTheta[ilocal] <= 0) + error->one(FLERR,"Internal temperature in Atoms section of date file " + "must be > zero"); } diff --git a/src/USER-DPD/atom_vec_dpd.h b/src/USER-DPD/atom_vec_dpd.h index 234d2ccce75fb59a46a31ebd0752a4132e731a24..61abc658b89d4a7943f73d55de4c4ad92aab2666 100644 --- a/src/USER-DPD/atom_vec_dpd.h +++ b/src/USER-DPD/atom_vec_dpd.h @@ -27,46 +27,15 @@ namespace LAMMPS_NS { class AtomVecDPD : public AtomVec { public: AtomVecDPD(class LAMMPS *); - virtual ~AtomVecDPD() {} - void grow(int); - void grow_reset(); - void copy(int, int, int); - virtual int pack_comm(int, int *, double *, int, int *); - virtual int pack_comm_vel(int, int *, double *, int, int *); - int pack_comm_hybrid(int, int *, double *); - virtual void unpack_comm(int, int, double *); - virtual void unpack_comm_vel(int, int, double *); - int unpack_comm_hybrid(int, int, double *); - int pack_reverse(int, int, double *); - void unpack_reverse(int, int *, double *); - virtual int pack_border(int, int *, double *, int, int *); - virtual int pack_border_vel(int, int *, double *, int, int *); - int pack_border_hybrid(int, int *, double *); - virtual void unpack_border(int, int, double *); - virtual void unpack_border_vel(int, int, double *); - int unpack_border_hybrid(int, int, double *); - virtual int pack_exchange(int, double *); - virtual int unpack_exchange(double *); - int size_restart(); - int pack_restart(int, double *); - int unpack_restart(double *); - void create_atom(int, double *); - void data_atom(double *, imageint, char **); - int data_atom_hybrid(int, char **); - void pack_data(double **); - int pack_data_hybrid(int, double *); - void write_data(FILE *, int, double **); - int write_data_hybrid(FILE *, double *); - bigint memory_usage(); - double *uCond,*uMech,*uChem,*uCG,*uCGnew,*rho,*dpdTheta; - double *duChem; - - protected: - tagint *tag; - int *type,*mask; - imageint *image; - double **x,**v,**f; + void grow_pointers(); + void unpack_restart_init(int); + void data_atom_post(int); + +private: + double *rho,*dpdTheta; + double *uCond,*uMech,*uChem; + double *uCG,*uCGnew; }; } @@ -76,15 +45,6 @@ class AtomVecDPD : public AtomVec { /* ERROR/WARNING messages: -E: Per-processor system is too big - -The number of owned atoms plus ghost atoms on a single -processor must fit in 32-bit integer. - -E: Invalid atom type in Atoms section of data file - -Atom types must range from 1 to specified # of types. - E: Internal temperature in Atoms section of data file must be > zero All internal temperatures must be > zero diff --git a/src/USER-DPD/fix_eos_table_rx.cpp b/src/USER-DPD/fix_eos_table_rx.cpp index 152b58dbb743260b69ec57c89ffdaa41921cd2b8..d9641f2aab0b64c59944ddeee8dde0f16461dd26 100644 --- a/src/USER-DPD/fix_eos_table_rx.cpp +++ b/src/USER-DPD/fix_eos_table_rx.cpp @@ -51,7 +51,7 @@ FixEOStableRX::FixEOStableRX(LAMMPS *lmp, int narg, char **arg) : rx_flag = false; nspecies = 1; for (int i = 0; i < modify->nfix; i++) - if (strncmp(modify->fix[i]->style,"rx",2) == 0){ + if (utils::strmatch(modify->fix[i]->style,"^rx")) { rx_flag = true; nspecies = atom->nspecies_dpd; if(nspecies==0) error->all(FLERR,"There are no rx species specified."); @@ -337,7 +337,7 @@ void FixEOStableRX::read_file(char *file) // strip comment, skip line if blank if ((ptr = strchr(line,'#'))) *ptr = '\0'; - nwords = atom->count_words(line); + nwords = utils::count_words(line); if (nwords == 0) continue; // concatenate additional lines until have params_per_line words @@ -356,7 +356,7 @@ void FixEOStableRX::read_file(char *file) MPI_Bcast(&n,1,MPI_INT,0,world); MPI_Bcast(line,n,MPI_CHAR,0,world); if ((ptr = strchr(line,'#'))) *ptr = '\0'; - nwords = atom->count_words(line); + nwords = utils::count_words(line); } if (nwords != min_params_per_line && nwords != max_params_per_line) @@ -475,7 +475,7 @@ void FixEOStableRX::read_table(Table *tb, Table *tb2, char *file, char *keyword) for (int i = 0; i < ninputs; i++) { utils::sfgets(FLERR,line,MAXLINE,fp,file,error); - nwords = atom->count_words(line); + nwords = utils::count_words(utils::trim_comment(line)); if(nwords != nspecies+2){ printf("nwords=%d nspecies=%d\n",nwords,nspecies); error->all(FLERR,"Illegal fix eos/table/rx command"); diff --git a/src/USER-DPD/fix_rx.cpp b/src/USER-DPD/fix_rx.cpp index 03e8ae49a4718eff0aef7b977c361da82f112a10..07e56d9db8ce77bc626522c5ece981949e779828 100644 --- a/src/USER-DPD/fix_rx.cpp +++ b/src/USER-DPD/fix_rx.cpp @@ -31,6 +31,7 @@ #include "neigh_request.h" #include "math_special.h" #include "pair_dpd_fdt_energy.h" +#include "utils.h" #include // std::vector<> #include // std::max @@ -255,10 +256,6 @@ void FixRX::post_constructor() int nUniqueSpecies = 0; bool match; - for (int i = 0; i < modify->nfix; i++) - if (strncmp(modify->fix[i]->style,"property/atom",13) == 0) - error->all(FLERR,"fix rx cannot be combined with fix property/atom"); - char **tmpspecies = new char*[maxspecies]; int tmpmaxstrlen = 0; for(int jj=0; jj < maxspecies; jj++) @@ -300,7 +297,7 @@ void FixRX::post_constructor() // strip comment, skip line if blank if ((ptr = strchr(line,'#'))) *ptr = '\0'; - nwords = atom->count_words(line); + nwords = utils::count_words(line); if (nwords == 0) continue; // words = ptrs to all words in line @@ -888,7 +885,7 @@ void FixRX::read_file(char *file) // strip comment, skip line if blank if ((ptr = strchr(line,'#'))) *ptr = '\0'; - nwords = atom->count_words(line); + nwords = utils::count_words(line); if (nwords == 0) continue; nreactions++; @@ -942,7 +939,7 @@ void FixRX::read_file(char *file) // strip comment, skip line if blank if ((ptr = strchr(line,'#'))) *ptr = '\0'; - nwords = atom->count_words(line); + nwords = utils::count_words(line); if (nwords == 0) continue; // words = ptrs to all words in line diff --git a/src/USER-DPD/fix_shardlow.cpp b/src/USER-DPD/fix_shardlow.cpp index b0efeb634d207238e5737fedcc1eb28e0ed98b54..18c86976ac266363ab9479b1c25f48b5b625dacf 100644 --- a/src/USER-DPD/fix_shardlow.cpp +++ b/src/USER-DPD/fix_shardlow.cpp @@ -54,6 +54,7 @@ #include "pair_dpd_fdt_energy.h" #include "npair_half_bin_newton_ssa.h" #include "citeme.h" +#include "utils.h" using namespace LAMMPS_NS; using namespace FixConst; @@ -155,12 +156,13 @@ void FixShardlow::setup(int /*vflag*/) bool fixShardlow = false; for (int i = 0; i < modify->nfix; i++) - if (strncmp(modify->fix[i]->style,"nvt",3) == 0 || strncmp(modify->fix[i]->style,"npt",3) == 0) - error->all(FLERR,"Cannot use constant temperature integration routines with DPD."); + if (strstr(modify->fix[i]->style,"nvt") || strstr(modify->fix[i]->style,"npt") || + strstr(modify->fix[i]->style,"gle") || strstr(modify->fix[i]->style,"gld")) + error->all(FLERR,"Cannot use constant temperature integration routines with USER-DPD."); for (int i = 0; i < modify->nfix; i++){ - if (strncmp(modify->fix[i]->style,"shardlow",3) == 0) fixShardlow = true; - if (strncmp(modify->fix[i]->style,"nve",3) == 0 || (strncmp(modify->fix[i]->style,"nph",3) == 0)){ + if (utils::strmatch(modify->fix[i]->style,"^shardlow")) fixShardlow = true; + if (utils::strmatch(modify->fix[i]->style,"^nve") || utils::strmatch(modify->fix[i]->style,"^nph")){ if(fixShardlow) break; else error->all(FLERR,"The deterministic integrator must follow fix shardlow in the input file."); } diff --git a/src/USER-DPD/pair_dpd_fdt.cpp b/src/USER-DPD/pair_dpd_fdt.cpp index 5b62972d1bf14d927021dc7be6c507439f28e0be..14bbe0b784d50790861685f8fc49719492554ac1 100644 --- a/src/USER-DPD/pair_dpd_fdt.cpp +++ b/src/USER-DPD/pair_dpd_fdt.cpp @@ -316,7 +316,7 @@ void PairDPDfdt::init_style() splitFDT_flag = false; neighbor->request(this,instance_me); for (int i = 0; i < modify->nfix; i++) - if (strncmp(modify->fix[i]->style,"shardlow", 8) == 0){ + if (utils::strmatch(modify->fix[i]->style,"^shardlow")) { splitFDT_flag = true; } diff --git a/src/USER-DPD/pair_dpd_fdt_energy.cpp b/src/USER-DPD/pair_dpd_fdt_energy.cpp index 5ea8d2e9e1e00b6a3a442cbd48b9be913b89413f..455af2f48195c43a86d52b8e58e53637aa25926c 100644 --- a/src/USER-DPD/pair_dpd_fdt_energy.cpp +++ b/src/USER-DPD/pair_dpd_fdt_energy.cpp @@ -409,7 +409,7 @@ void PairDPDfdtEnergy::init_style() splitFDT_flag = false; neighbor->request(this,instance_me); for (int i = 0; i < modify->nfix; i++) - if (strncmp(modify->fix[i]->style,"shardlow", 8) == 0){ + if (utils::strmatch(modify->fix[i]->style,"^shardlow")) { splitFDT_flag = true; } @@ -420,8 +420,8 @@ void PairDPDfdtEnergy::init_style() bool eos_flag = false; for (int i = 0; i < modify->nfix; i++) - if (strncmp(modify->fix[i]->style,"eos",3) == 0) eos_flag = true; - if(!eos_flag) error->all(FLERR,"pair_style dpd/fdt/energy requires an EOS to be specified"); + if (utils::strmatch(modify->fix[i]->style,"^eos")) eos_flag = true; + if(!eos_flag) error->all(FLERR,"pair_style dpd/fdt/energy requires an EOS fix to be specified"); } /* ---------------------------------------------------------------------- diff --git a/src/USER-DPD/pair_exp6_rx.cpp b/src/USER-DPD/pair_exp6_rx.cpp index 5e23113feb0d24d05be5031aea4ec235a81cff81..f13f9113267b8bc8e2a81ec59a250564ffd0a20f 100644 --- a/src/USER-DPD/pair_exp6_rx.cpp +++ b/src/USER-DPD/pair_exp6_rx.cpp @@ -582,7 +582,7 @@ void PairExp6rx::coeff(int narg, char **arg) bool rx_flag = false; for (int i = 0; i < modify->nfix; i++) - if (strncmp(modify->fix[i]->style,"rx",2) == 0) rx_flag = true; + if (utils::strmatch(modify->fix[i]->style,"^rx")) rx_flag = true; if (!rx_flag) error->all(FLERR,"PairExp6rx requires a fix rx command."); if (!allocated) allocate(); @@ -756,7 +756,7 @@ void PairExp6rx::read_file(char *file) // strip comment, skip line if blank if ((ptr = strchr(line,'#'))) *ptr = '\0'; - nwords = atom->count_words(line); + nwords = utils::count_words(line); if (nwords == 0) continue; // concatenate additional lines until have params_per_line words @@ -775,7 +775,7 @@ void PairExp6rx::read_file(char *file) MPI_Bcast(&n,1,MPI_INT,0,world); MPI_Bcast(line,n,MPI_CHAR,0,world); if ((ptr = strchr(line,'#'))) *ptr = '\0'; - nwords = atom->count_words(line); + nwords = utils::count_words(line); } if (nwords != params_per_line) @@ -865,7 +865,7 @@ void PairExp6rx::read_file2(char *file) // strip comment, skip line if blank if ((ptr = strchr(line,'#'))) *ptr = '\0'; - nwords = atom->count_words(line); + nwords = utils::count_words(line); if (nwords == 0) continue; // concatenate additional lines until have params_per_line words @@ -884,7 +884,7 @@ void PairExp6rx::read_file2(char *file) MPI_Bcast(&n,1,MPI_INT,0,world); MPI_Bcast(line,n,MPI_CHAR,0,world); if ((ptr = strchr(line,'#'))) *ptr = '\0'; - nwords = atom->count_words(line); + nwords = utils::count_words(line); } if (nwords != params_per_line) diff --git a/src/USER-DPD/pair_multi_lucy_rx.cpp b/src/USER-DPD/pair_multi_lucy_rx.cpp index 36ca7e0321e517196b46cde024c4ec1372758985..79df11a038dde8c0a6f19b73cea4ca57e2244304 100644 --- a/src/USER-DPD/pair_multi_lucy_rx.cpp +++ b/src/USER-DPD/pair_multi_lucy_rx.cpp @@ -368,7 +368,7 @@ void PairMultiLucyRX::coeff(int narg, char **arg) bool rx_flag = false; for (int i = 0; i < modify->nfix; i++) - if (strncmp(modify->fix[i]->style,"rx",2) == 0) rx_flag = true; + if (utils::strmatch(modify->fix[i]->style,"^rx")) rx_flag = true; if (!rx_flag) error->all(FLERR,"PairMultiLucyRX requires a fix rx command."); if (!allocated) allocate(); diff --git a/src/USER-DPD/pair_table_rx.cpp b/src/USER-DPD/pair_table_rx.cpp index e767f93367073bacf2e5f9e909eba12e9893ffb4..cf64c17c5ebc64da35a587f374f2976a20d0c132 100644 --- a/src/USER-DPD/pair_table_rx.cpp +++ b/src/USER-DPD/pair_table_rx.cpp @@ -26,6 +26,7 @@ #include "error.h" #include "modify.h" #include "fix.h" +#include "utils.h" using namespace LAMMPS_NS; @@ -303,8 +304,8 @@ void PairTableRX::coeff(int narg, char **arg) bool rx_flag = false; for (int i = 0; i < modify->nfix; i++) - if (strncmp(modify->fix[i]->style,"rx",2) == 0) rx_flag = true; - if (!rx_flag) error->all(FLERR,"PairTableRX requires a fix rx command."); + if (utils::strmatch(modify->fix[i]->style,"^rx")) rx_flag = true; + if (!rx_flag) error->all(FLERR,"Pair style table/rx requires a fix rx command."); int ilo,ihi,jlo,jhi; force->bounds(FLERR,arg[0],atom->ntypes,ilo,ihi); diff --git a/src/USER-EFF/atom_vec_electron.cpp b/src/USER-EFF/atom_vec_electron.cpp index 552a89c04aaf74b36c7a858946d04d411a06e97e..0912fb0498ace947cd997b1cc256f475cf8c3a6a 100644 --- a/src/USER-EFF/atom_vec_electron.cpp +++ b/src/USER-EFF/atom_vec_electron.cpp @@ -18,14 +18,8 @@ #include "atom_vec_electron.h" #include #include "atom.h" -#include "comm.h" -#include "domain.h" -#include "modify.h" -#include "fix.h" #include "citeme.h" -#include "memory.h" #include "error.h" -#include "utils.h" using namespace LAMMPS_NS; @@ -46,929 +40,76 @@ AtomVecElectron::AtomVecElectron(LAMMPS *lmp) : AtomVec(lmp) { if (lmp->citeme) lmp->citeme->add(cite_user_eff_package); - comm_x_only = comm_f_only = 0; - mass_type = 1; molecular = 0; forceclearflag = 1; - size_forward = 4; - size_reverse = 4; - size_border = 9; - size_velocity = 3; - size_data_atom = 8; - size_data_vel = 5; - xcol_data = 6; - - atom->ecp_flag = 0; - atom->electron_flag = 1; atom->q_flag = atom->spin_flag = atom->eradius_flag = atom->ervel_flag = atom->erforce_flag = 1; -} - -/* ---------------------------------------------------------------------- - grow atom-electron arrays - n = 0 grows arrays by a chunk - n > 0 allocates arrays to size n -------------------------------------------------------------------------- */ - -void AtomVecElectron::grow(int n) -{ - if (n == 0) grow_nmax(); - else nmax = n; - atom->nmax = nmax; - tag = memory->grow(atom->tag,nmax,"atom:tag"); - type = memory->grow(atom->type,nmax,"atom:type"); - mask = memory->grow(atom->mask,nmax,"atom:mask"); - image = memory->grow(atom->image,nmax,"atom:image"); - x = memory->grow(atom->x,nmax,3,"atom:x"); - v = memory->grow(atom->v,nmax,3,"atom:v"); - f = memory->grow(atom->f,nmax*comm->nthreads,3,"atom:f"); + // strings with peratom variables to include in each AtomVec method + // strings cannot contain fields in corresponding AtomVec default strings + // order of fields in a string does not matter + // except: fields_data_atom & fields_data_vel must match data file - q = memory->grow(atom->q,nmax,"atom:q"); - spin = memory->grow(atom->spin,nmax,"atom:spin"); - eradius = memory->grow(atom->eradius,nmax,"atom:eradius"); - ervel = memory->grow(atom->ervel,nmax,"atom:ervel"); - erforce = memory->grow(atom->erforce,nmax*comm->nthreads,"atom:erforce"); + fields_grow = (char *) "q spin eradius ervel erforce"; + fields_copy = (char *) "q spin eradius ervel"; + fields_comm = (char *) "eradius"; + fields_comm_vel = (char *) "eradius"; + fields_reverse = (char *) "erforce"; + fields_border = (char *) "q spin eradius"; + fields_border_vel = (char *) "q spin eradius"; + fields_exchange = (char *) "q spin eradius ervel"; + fields_restart = (char *) "q spin eradius ervel"; + fields_create = (char *) "q spin eradius ervel"; + fields_data_atom = (char *) "id type q spin eradius x"; + fields_data_vel = (char *) "id v ervel"; - if (atom->nextra_grow) - for (int iextra = 0; iextra < atom->nextra_grow; iextra++) - modify->fix[atom->extra_grow[iextra]]->grow_arrays(nmax); + setup_fields(); } /* ---------------------------------------------------------------------- - reset local array ptrs + set local copies of all grow ptrs used by this class, except defaults + needed in replicate when 2 atom classes exist and it calls pack_restart() ------------------------------------------------------------------------- */ -void AtomVecElectron::grow_reset() +void AtomVecElectron::grow_pointers() { - tag = atom->tag; type = atom->type; - mask = atom->mask; image = atom->image; - x = atom->x; v = atom->v; f = atom->f; - q = atom->q; - eradius = atom->eradius; ervel = atom->ervel; erforce = atom->erforce; + spin = atom->spin; + eradius = atom->eradius; + ervel = atom->ervel; + erforce = atom->erforce; } /* ---------------------------------------------------------------------- - copy atom I info to atom J + clear extra forces starting at atom N + nbytes = # of bytes to clear for a per-atom vector ------------------------------------------------------------------------- */ -void AtomVecElectron::copy(int i, int j, int delflag) -{ - tag[j] = tag[i]; - type[j] = type[i]; - mask[j] = mask[i]; - image[j] = image[i]; - x[j][0] = x[i][0]; - x[j][1] = x[i][1]; - x[j][2] = x[i][2]; - v[j][0] = v[i][0]; - v[j][1] = v[i][1]; - v[j][2] = v[i][2]; - - q[j] = q[i]; - spin[j] = spin[i]; - eradius[j] = eradius[i]; - ervel[j] = ervel[i]; - - if (atom->nextra_grow) - for (int iextra = 0; iextra < atom->nextra_grow; iextra++) - modify->fix[atom->extra_grow[iextra]]->copy_arrays(i,j,delflag); -} - -/* ---------------------------------------------------------------------- */ - void AtomVecElectron::force_clear(int n, size_t nbytes) { memset(&erforce[n],0,nbytes); } -/* ---------------------------------------------------------------------- */ - -int AtomVecElectron::pack_comm(int n, int *list, double *buf, - int pbc_flag, int *pbc) -{ - int i,j,m; - double dx,dy,dz; - - m = 0; - if (pbc_flag == 0) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = x[j][0]; - buf[m++] = x[j][1]; - buf[m++] = x[j][2]; - buf[m++] = eradius[j]; - } - } else { - if (domain->triclinic == 0) { - dx = pbc[0]*domain->xprd; - dy = pbc[1]*domain->yprd; - dz = pbc[2]*domain->zprd; - } else { - dx = pbc[0]*domain->xprd + pbc[5]*domain->xy + pbc[4]*domain->xz; - dy = pbc[1]*domain->yprd + pbc[3]*domain->yz; - dz = pbc[2]*domain->zprd; - } - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = x[j][0] + dx; - buf[m++] = x[j][1] + dy; - buf[m++] = x[j][2] + dz; - buf[m++] = eradius[j]; - } - } - return m; -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecElectron::pack_comm_vel(int n, int *list, double *buf, - int pbc_flag, int *pbc) -{ - int i,j,m; - double dx,dy,dz,dvx,dvy,dvz; - - m = 0; - if (pbc_flag == 0) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = x[j][0]; - buf[m++] = x[j][1]; - buf[m++] = x[j][2]; - buf[m++] = eradius[j]; - buf[m++] = v[j][0]; - buf[m++] = v[j][1]; - buf[m++] = v[j][2]; - } - } else { - if (domain->triclinic == 0) { - dx = pbc[0]*domain->xprd; - dy = pbc[1]*domain->yprd; - dz = pbc[2]*domain->zprd; - } else { - dx = pbc[0]*domain->xprd + pbc[5]*domain->xy + pbc[4]*domain->xz; - dy = pbc[1]*domain->yprd + pbc[3]*domain->yz; - dz = pbc[2]*domain->zprd; - } - if (!deform_vremap) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = x[j][0] + dx; - buf[m++] = x[j][1] + dy; - buf[m++] = x[j][2] + dz; - buf[m++] = eradius[j]; - buf[m++] = v[j][0]; - buf[m++] = v[j][1]; - buf[m++] = v[j][2]; - } - } else { - dvx = pbc[0]*h_rate[0] + pbc[5]*h_rate[5] + pbc[4]*h_rate[4]; - dvy = pbc[1]*h_rate[1] + pbc[3]*h_rate[3]; - dvz = pbc[2]*h_rate[2]; - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = x[j][0] + dx; - buf[m++] = x[j][1] + dy; - buf[m++] = x[j][2] + dz; - buf[m++] = eradius[j]; - if (mask[i] & deform_groupbit) { - buf[m++] = v[j][0] + dvx; - buf[m++] = v[j][1] + dvy; - buf[m++] = v[j][2] + dvz; - } else { - buf[m++] = v[j][0]; - buf[m++] = v[j][1]; - buf[m++] = v[j][2]; - } - } - } - } - return m; -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecElectron::pack_comm_hybrid(int n, int *list, double *buf) -{ - int i,j,m; - - m = 0; - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = eradius[j]; - } - return m; -} - -/* ---------------------------------------------------------------------- */ - -void AtomVecElectron::unpack_comm(int n, int first, double *buf) -{ - int i,m,last; - - m = 0; - last = first + n; - for (i = first; i < last; i++) { - x[i][0] = buf[m++]; - x[i][1] = buf[m++]; - x[i][2] = buf[m++]; - eradius[i] = buf[m++]; - } -} - -/* ---------------------------------------------------------------------- */ - -void AtomVecElectron::unpack_comm_vel(int n, int first, double *buf) -{ - int i,m,last; - - m = 0; - last = first + n; - for (i = first; i < last; i++) { - x[i][0] = buf[m++]; - x[i][1] = buf[m++]; - x[i][2] = buf[m++]; - eradius[i] = buf[m++]; - v[i][0] = buf[m++]; - v[i][1] = buf[m++]; - v[i][2] = buf[m++]; - } -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecElectron::unpack_comm_hybrid(int n, int first, double *buf) -{ - int i,m,last; - - m = 0; - last = first + n; - for (i = first; i < last; i++) - eradius[i] = buf[m++]; - return m; -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecElectron::pack_reverse(int n, int first, double *buf) -{ - int i,m,last; - - m = 0; - last = first + n; - for (i = first; i < last; i++) { - buf[m++] = f[i][0]; - buf[m++] = f[i][1]; - buf[m++] = f[i][2]; - buf[m++] = erforce[i]; - } - return m; -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecElectron::pack_reverse_hybrid(int n, int first, double *buf) -{ - int i,m,last; - - m = 0; - last = first + n; - for (i = first; i < last; i++) - buf[m++] = erforce[i]; - return m; -} - -/* ---------------------------------------------------------------------- */ - -void AtomVecElectron::unpack_reverse(int n, int *list, double *buf) -{ - int i,j,m; - - m = 0; - for (i = 0; i < n; i++) { - j = list[i]; - f[j][0] += buf[m++]; - f[j][1] += buf[m++]; - f[j][2] += buf[m++]; - erforce[j] += buf[m++]; - } -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecElectron::unpack_reverse_hybrid(int n, int *list, double *buf) -{ - int i,j,m; - - m = 0; - for (i = 0; i < n; i++) { - j = list[i]; - erforce[j] += buf[m++]; - } - return m; -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecElectron::pack_border(int n, int *list, double *buf, - int pbc_flag, int *pbc) -{ - int i,j,m; - double dx,dy,dz; - - m = 0; - if (pbc_flag == 0) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = x[j][0]; - buf[m++] = x[j][1]; - buf[m++] = x[j][2]; - buf[m++] = ubuf(tag[j]).d; - buf[m++] = ubuf(type[j]).d; - buf[m++] = ubuf(mask[j]).d; - buf[m++] = q[j]; - buf[m++] = ubuf(spin[j]).d; - buf[m++] = eradius[j]; - } - } else { - if (domain->triclinic == 0) { - dx = pbc[0]*domain->xprd; - dy = pbc[1]*domain->yprd; - dz = pbc[2]*domain->zprd; - } else { - dx = pbc[0]; - dy = pbc[1]; - dz = pbc[2]; - } - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = x[j][0] + dx; - buf[m++] = x[j][1] + dy; - buf[m++] = x[j][2] + dz; - buf[m++] = ubuf(tag[j]).d; - buf[m++] = ubuf(type[j]).d; - buf[m++] = ubuf(mask[j]).d; - buf[m++] = q[j]; - buf[m++] = ubuf(spin[j]).d; - buf[m++] = eradius[j]; - } - } - - if (atom->nextra_border) - for (int iextra = 0; iextra < atom->nextra_border; iextra++) - m += modify->fix[atom->extra_border[iextra]]->pack_border(n,list,&buf[m]); - - return m; -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecElectron::pack_border_vel(int n, int *list, double *buf, - int pbc_flag, int *pbc) -{ - int i,j,m; - double dx,dy,dz,dvx,dvy,dvz; - - m = 0; - if (pbc_flag == 0) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = x[j][0]; - buf[m++] = x[j][1]; - buf[m++] = x[j][2]; - buf[m++] = ubuf(tag[j]).d; - buf[m++] = ubuf(type[j]).d; - buf[m++] = ubuf(mask[j]).d; - buf[m++] = q[j]; - buf[m++] = ubuf(spin[j]).d; - buf[m++] = eradius[j]; - buf[m++] = v[j][0]; - buf[m++] = v[j][1]; - buf[m++] = v[j][2]; - } - } else { - if (domain->triclinic == 0) { - dx = pbc[0]*domain->xprd; - dy = pbc[1]*domain->yprd; - dz = pbc[2]*domain->zprd; - } else { - dx = pbc[0]; - dy = pbc[1]; - dz = pbc[2]; - } - if (domain->triclinic == 0) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = x[j][0] + dx; - buf[m++] = x[j][1] + dy; - buf[m++] = x[j][2] + dz; - buf[m++] = ubuf(tag[j]).d; - buf[m++] = ubuf(type[j]).d; - buf[m++] = ubuf(mask[j]).d; - buf[m++] = q[j]; - buf[m++] = ubuf(spin[j]).d; - buf[m++] = eradius[j]; - buf[m++] = v[j][0]; - buf[m++] = v[j][1]; - buf[m++] = v[j][2]; - } - } else { - dvx = pbc[0]*h_rate[0] + pbc[5]*h_rate[5] + pbc[4]*h_rate[4]; - dvy = pbc[1]*h_rate[1] + pbc[3]*h_rate[3]; - dvz = pbc[2]*h_rate[2]; - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = x[j][0] + dx; - buf[m++] = x[j][1] + dy; - buf[m++] = x[j][2] + dz; - buf[m++] = ubuf(tag[j]).d; - buf[m++] = ubuf(type[j]).d; - buf[m++] = ubuf(mask[j]).d; - buf[m++] = q[j]; - buf[m++] = ubuf(spin[j]).d; - buf[m++] = eradius[j]; - if (mask[i] & deform_groupbit) { - buf[m++] = v[j][0] + dvx; - buf[m++] = v[j][1] + dvy; - buf[m++] = v[j][2] + dvz; - } else { - buf[m++] = v[j][0]; - buf[m++] = v[j][1]; - buf[m++] = v[j][2]; - } - } - } - } - - if (atom->nextra_border) - for (int iextra = 0; iextra < atom->nextra_border; iextra++) - m += modify->fix[atom->extra_border[iextra]]->pack_border(n,list,&buf[m]); - - return m; -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecElectron::pack_border_hybrid(int n, int *list, double *buf) -{ - int i,j,m; - - m = 0; - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = q[j]; - buf[m++] = ubuf(spin[j]).d; - buf[m++] = eradius[j]; - } - return m; -} - -/* ---------------------------------------------------------------------- */ - -void AtomVecElectron::unpack_border(int n, int first, double *buf) -{ - int i,m,last; - - m = 0; - last = first + n; - for (i = first; i < last; i++) { - if (i == nmax) grow(0); - x[i][0] = buf[m++]; - x[i][1] = buf[m++]; - x[i][2] = buf[m++]; - tag[i] = (tagint) ubuf(buf[m++]).i; - type[i] = (int) ubuf(buf[m++]).i; - mask[i] = (int) ubuf(buf[m++]).i; - q[i] = buf[m++]; - spin[i] = (int) ubuf(buf[m++]).i; - eradius[i] = buf[m++]; - } - - if (atom->nextra_border) - for (int iextra = 0; iextra < atom->nextra_border; iextra++) - m += modify->fix[atom->extra_border[iextra]]-> - unpack_border(n,first,&buf[m]); -} - -/* ---------------------------------------------------------------------- */ - -void AtomVecElectron::unpack_border_vel(int n, int first, double *buf) -{ - int i,m,last; - - m = 0; - last = first + n; - for (i = first; i < last; i++) { - if (i == nmax) grow(0); - x[i][0] = buf[m++]; - x[i][1] = buf[m++]; - x[i][2] = buf[m++]; - tag[i] = (tagint) ubuf(buf[m++]).i; - type[i] = (int) ubuf(buf[m++]).i; - mask[i] = (int) ubuf(buf[m++]).i; - q[i] = buf[m++]; - spin[i] = (int) ubuf(buf[m++]).i; - eradius[i] = buf[m++]; - v[i][0] = buf[m++]; - v[i][1] = buf[m++]; - v[i][2] = buf[m++]; - } - - if (atom->nextra_border) - for (int iextra = 0; iextra < atom->nextra_border; iextra++) - m += modify->fix[atom->extra_border[iextra]]-> - unpack_border(n,first,&buf[m]); -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecElectron::unpack_border_hybrid(int n, int first, double *buf) -{ - int i,m,last; - - m = 0; - last = first + n; - for (i = first; i < last; i++) { - q[i] = buf[m++]; - spin[i] = (int) ubuf(buf[m++]).i; - eradius[i] = buf[m++]; - } - return m; -} - /* ---------------------------------------------------------------------- - pack data for atom I for sending to another proc - xyz must be 1st 3 values, so comm::exchange() can test on them + initialize non-zero atom quantities ------------------------------------------------------------------------- */ -int AtomVecElectron::pack_exchange(int i, double *buf) +void AtomVecElectron::create_atom_post(int ilocal) { - int m = 1; - buf[m++] = x[i][0]; - buf[m++] = x[i][1]; - buf[m++] = x[i][2]; - buf[m++] = v[i][0]; - buf[m++] = v[i][1]; - buf[m++] = v[i][2]; - buf[m++] = ubuf(tag[i]).d; - buf[m++] = ubuf(type[i]).d; - buf[m++] = ubuf(mask[i]).d; - buf[m++] = ubuf(image[i]).d; - buf[m++] = q[i]; - buf[m++] = ubuf(spin[i]).d; - buf[m++] = eradius[i]; - buf[m++] = ervel[i]; - - if (atom->nextra_grow) - for (int iextra = 0; iextra < atom->nextra_grow; iextra++) - m += modify->fix[atom->extra_grow[iextra]]->pack_exchange(i,&buf[m]); - - buf[0] = m; - return m; -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecElectron::unpack_exchange(double *buf) -{ - int nlocal = atom->nlocal; - if (nlocal == nmax) grow(0); - - int m = 1; - x[nlocal][0] = buf[m++]; - x[nlocal][1] = buf[m++]; - x[nlocal][2] = buf[m++]; - v[nlocal][0] = buf[m++]; - v[nlocal][1] = buf[m++]; - v[nlocal][2] = buf[m++]; - tag[nlocal] = (tagint) ubuf(buf[m++]).i; - type[nlocal] = (int) ubuf(buf[m++]).i; - mask[nlocal] = (int) ubuf(buf[m++]).i; - image[nlocal] = (imageint) ubuf(buf[m++]).i; - q[nlocal] = buf[m++]; - spin[nlocal] = (int) ubuf(buf[m++]).i; - eradius[nlocal] = buf[m++]; - ervel[nlocal] = buf[m++]; - - if (atom->nextra_grow) - for (int iextra = 0; iextra < atom->nextra_grow; iextra++) - m += modify->fix[atom->extra_grow[iextra]]-> - unpack_exchange(nlocal,&buf[m]); - - atom->nlocal++; - return m; -} - -/* ---------------------------------------------------------------------- - size of restart data for all atoms owned by this proc - include extra data stored by fixes -------------------------------------------------------------------------- */ - -int AtomVecElectron::size_restart() -{ - int i; - - int nlocal = atom->nlocal; - int n = 15 * nlocal; // Associated with pack_restart - - if (atom->nextra_restart) - for (int iextra = 0; iextra < atom->nextra_restart; iextra++) - for (i = 0; i < nlocal; i++) - n += modify->fix[atom->extra_restart[iextra]]->size_restart(i); - - return n; -} - -/* ---------------------------------------------------------------------- - pack atom I's data for restart file including extra quantities - xyz must be 1st 3 values, so that read_restart can test on them - molecular types may be negative, but write as positive -------------------------------------------------------------------------- */ - -int AtomVecElectron::pack_restart(int i, double *buf) -{ - int m = 1; - buf[m++] = x[i][0]; - buf[m++] = x[i][1]; - buf[m++] = x[i][2]; - buf[m++] = ubuf(tag[i]).d; - buf[m++] = ubuf(type[i]).d; - buf[m++] = ubuf(mask[i]).d; - buf[m++] = ubuf(image[i]).d; - buf[m++] = v[i][0]; - buf[m++] = v[i][1]; - buf[m++] = v[i][2]; - - buf[m++] = q[i]; - buf[m++] = ubuf(spin[i]).d; - buf[m++] = eradius[i]; - buf[m++] = ervel[i]; - - if (atom->nextra_restart) - for (int iextra = 0; iextra < atom->nextra_restart; iextra++) - m += modify->fix[atom->extra_restart[iextra]]->pack_restart(i,&buf[m]); - - buf[0] = m; - return m; -} - -/* ---------------------------------------------------------------------- - unpack data for one atom from restart file including extra quantities -------------------------------------------------------------------------- */ - -int AtomVecElectron::unpack_restart(double *buf) -{ - int nlocal = atom->nlocal; - if (nlocal == nmax) { - grow(0); - if (atom->nextra_store) - memory->grow(atom->extra,nmax,atom->nextra_store,"atom:extra"); - } - - int m = 1; - x[nlocal][0] = buf[m++]; - x[nlocal][1] = buf[m++]; - x[nlocal][2] = buf[m++]; - tag[nlocal] = (tagint) ubuf(buf[m++]).i; - type[nlocal] = (int) ubuf(buf[m++]).i; - mask[nlocal] = (int) ubuf(buf[m++]).i; - image[nlocal] = (imageint) ubuf(buf[m++]).i; - v[nlocal][0] = buf[m++]; - v[nlocal][1] = buf[m++]; - v[nlocal][2] = buf[m++]; - - q[nlocal] = buf[m++]; - spin[nlocal] = (int) ubuf(buf[m++]).i; - eradius[nlocal] = buf[m++]; - ervel[nlocal] = buf[m++]; - - double **extra = atom->extra; - if (atom->nextra_store) { - int size = static_cast (buf[0]) - m; - for (int i = 0; i < size; i++) extra[nlocal][i] = buf[m++]; - } - - atom->nlocal++; - return m; -} - -/* ---------------------------------------------------------------------- - create one atom of itype at coord - set other values to defaults -------------------------------------------------------------------------- */ - -void AtomVecElectron::create_atom(int itype, double *coord) -{ - int nlocal = atom->nlocal; - if (nlocal == nmax) grow(0); - - tag[nlocal] = 0; - type[nlocal] = itype; - x[nlocal][0] = coord[0]; - x[nlocal][1] = coord[1]; - x[nlocal][2] = coord[2]; - mask[nlocal] = 1; - image[nlocal] = ((imageint) IMGMAX << IMG2BITS) | - ((imageint) IMGMAX << IMGBITS) | IMGMAX; - v[nlocal][0] = 0.0; - v[nlocal][1] = 0.0; - v[nlocal][2] = 0.0; - - q[nlocal] = 0.0; - spin[nlocal] = 1; - eradius[nlocal] = 1.0; - ervel[nlocal] = 0.0; - - atom->nlocal++; -} - -/* ---------------------------------------------------------------------- - unpack one line from Atoms section of data file - initialize other atom quantities -------------------------------------------------------------------------- */ - -void AtomVecElectron::data_atom(double *coord, imageint imagetmp, char **values) -{ - int nlocal = atom->nlocal; - - if (nlocal == nmax) grow(0); - - tag[nlocal] = utils::tnumeric(FLERR,values[0],true,lmp); - type[nlocal] = utils::inumeric(FLERR,values[1],true,lmp); - if (type[nlocal] <= 0 || type[nlocal] > atom->ntypes) - error->one(FLERR,"Invalid atom type in Atoms section of data file"); - - q[nlocal] = utils::numeric(FLERR,values[2],true,lmp); - spin[nlocal] = utils::inumeric(FLERR,values[3],true,lmp); - if (spin[nlocal] == 3) atom->ecp_flag = 1; - - eradius[nlocal] = utils::numeric(FLERR,values[4],true,lmp); - - x[nlocal][0] = coord[0]; - x[nlocal][1] = coord[1]; - x[nlocal][2] = coord[2]; - - image[nlocal] = imagetmp; - - mask[nlocal] = 1; - v[nlocal][0] = 0.0; - v[nlocal][1] = 0.0; - v[nlocal][2] = 0.0; - ervel[nlocal] = 0.0; - - atom->nlocal++; + spin[ilocal] = 1; + eradius[ilocal] = 1.0; } /* ---------------------------------------------------------------------- - unpack hybrid quantities from one line in Atoms section of data file - initialize other atom quantities for this sub-style + modify what AtomVec::data_atom() just unpacked + or initialize other atom quantities ------------------------------------------------------------------------- */ -int AtomVecElectron::data_atom_hybrid(int nlocal, char **values) +void AtomVecElectron::data_atom_post(int ilocal) { - q[nlocal] = utils::numeric(FLERR,values[0],true,lmp); - spin[nlocal] = utils::inumeric(FLERR,values[1],true,lmp); - eradius[nlocal] = utils::numeric(FLERR,values[2],true,lmp); - if (eradius[nlocal] < 0.0) - error->one(FLERR,"Invalid eradius in Atoms section of data file"); - - v[nlocal][0] = 0.0; - v[nlocal][1] = 0.0; - v[nlocal][2] = 0.0; - ervel[nlocal] = 0.0; - - return 3; -} - -/* ---------------------------------------------------------------------- - unpack one line from Velocities section of data file -------------------------------------------------------------------------- */ - -void AtomVecElectron::data_vel(int m, char **values) -{ - v[m][0] = utils::numeric(FLERR,values[0],true,lmp); - v[m][1] = utils::numeric(FLERR,values[1],true,lmp); - v[m][2] = utils::numeric(FLERR,values[2],true,lmp); - ervel[m] = utils::numeric(FLERR,values[3],true,lmp); -} - -/* ---------------------------------------------------------------------- - unpack hybrid quantities from one line in Velocities section of data file -------------------------------------------------------------------------- */ - -int AtomVecElectron::data_vel_hybrid(int m, char **values) -{ - ervel[m] = utils::numeric(FLERR,values[0],true,lmp); - return 1; -} - -/* ---------------------------------------------------------------------- - pack atom info for data file including 3 image flags -------------------------------------------------------------------------- */ - -void AtomVecElectron::pack_data(double **buf) -{ - int nlocal = atom->nlocal; - for (int i = 0; i < nlocal; i++) { - buf[i][0] = ubuf(tag[i]).d; - buf[i][1] = ubuf(type[i]).d; - buf[i][2] = q[i]; - buf[i][3] = ubuf(spin[i]).d; - buf[i][4] = eradius[i]; - buf[i][5] = x[i][0]; - buf[i][6] = x[i][1]; - buf[i][7] = x[i][2]; - buf[i][8] = ubuf((image[i] & IMGMASK) - IMGMAX).d; - buf[i][9] = ubuf((image[i] >> IMGBITS & IMGMASK) - IMGMAX).d; - buf[i][10] = ubuf((image[i] >> IMG2BITS) - IMGMAX).d; - } -} - -/* ---------------------------------------------------------------------- - pack hybrid atom info for data file -------------------------------------------------------------------------- */ - -int AtomVecElectron::pack_data_hybrid(int i, double *buf) -{ - buf[0] = q[i]; - buf[1] = ubuf(spin[i]).d; - buf[2] = eradius[i]; - return 3; -} - -/* ---------------------------------------------------------------------- - write atom info to data file including 3 image flags -------------------------------------------------------------------------- */ - -void AtomVecElectron::write_data(FILE *fp, int n, double **buf) -{ - for (int i = 0; i < n; i++) - fprintf(fp,TAGINT_FORMAT - " %d %-1.16e %d %-1.16e %-1.16e %-1.16e %-1.16e %d %d %d\n", - (tagint) ubuf(buf[i][0]).i,(int) ubuf(buf[i][1]).i,buf[i][2], - (int) ubuf(buf[i][3]).i,buf[i][4],buf[i][5],buf[i][6],buf[i][7], - (int) ubuf(buf[i][8]).i,(int) ubuf(buf[i][9]).i, - (int) ubuf(buf[i][10]).i); -} - -/* ---------------------------------------------------------------------- - write hybrid atom info to data file -------------------------------------------------------------------------- */ - -int AtomVecElectron::write_data_hybrid(FILE *fp, double *buf) -{ - fprintf(fp," %-1.16e %d %-1.16e",buf[0],(int) ubuf(buf[1]).i,buf[2]); - return 3; -} - -/* ---------------------------------------------------------------------- - pack velocity info for data file -------------------------------------------------------------------------- */ - -void AtomVecElectron::pack_vel(double **buf) -{ - int nlocal = atom->nlocal; - for (int i = 0; i < nlocal; i++) { - buf[i][0] = ubuf(tag[i]).d; - buf[i][1] = v[i][0]; - buf[i][2] = v[i][1]; - buf[i][3] = v[i][2]; - buf[i][4] = ervel[i]; - } -} - -/* ---------------------------------------------------------------------- - pack velocity info for data file -------------------------------------------------------------------------- */ - -int AtomVecElectron::pack_vel_hybrid(int i, double *buf) -{ - buf[0] = ervel[i]; - return 1; -} - -/* ---------------------------------------------------------------------- - write hybrid velocity info to data file -------------------------------------------------------------------------- */ - -void AtomVecElectron::write_vel(FILE *fp, int n, double **buf) -{ - for (int i = 0; i < n; i++) - fprintf(fp,TAGINT_FORMAT " %-1.16e %-1.16e %-1.16e %-1.16e\n", - (tagint) ubuf(buf[i][0]).i,buf[i][1],buf[i][2],buf[i][3],buf[i][4]); -} - -/* ---------------------------------------------------------------------- - write hybrid velocity info to data file -------------------------------------------------------------------------- */ - -int AtomVecElectron::write_vel_hybrid(FILE *fp, double *buf) -{ - fprintf(fp," %-1.16e",buf[0]); - return 1; + ervel[ilocal] = 0.0; } /* ---------------------------------------------------------------------- @@ -1023,29 +164,3 @@ void AtomVecElectron::pack_property_atom(int index, double *buf, } } } - -/* ---------------------------------------------------------------------- - return # of bytes of allocated memory -------------------------------------------------------------------------- */ - -bigint AtomVecElectron::memory_usage() -{ - bigint bytes = 0; - - if (atom->memcheck("tag")) bytes += memory->usage(tag,nmax); - if (atom->memcheck("type")) bytes += memory->usage(type,nmax); - if (atom->memcheck("mask")) bytes += memory->usage(mask,nmax); - if (atom->memcheck("image")) bytes += memory->usage(image,nmax); - if (atom->memcheck("x")) bytes += memory->usage(x,nmax,3); - if (atom->memcheck("v")) bytes += memory->usage(v,nmax,3); - if (atom->memcheck("f")) bytes += memory->usage(f,nmax*comm->nthreads,3); - - if (atom->memcheck("q")) bytes += memory->usage(q,nmax); - if (atom->memcheck("spin")) bytes += memory->usage(spin,nmax); - if (atom->memcheck("eradius")) bytes += memory->usage(eradius,nmax); - if (atom->memcheck("ervel")) bytes += memory->usage(ervel,nmax); - if (atom->memcheck("erforce")) - bytes += memory->usage(erforce,nmax*comm->nthreads); - - return bytes; -} diff --git a/src/USER-EFF/atom_vec_electron.h b/src/USER-EFF/atom_vec_electron.h index 6e79775c3d59b8ce6b89d328243ad74a8ffc6611..9175ca52f788897efc0ff28d6b32c8dad21a4487 100644 --- a/src/USER-EFF/atom_vec_electron.h +++ b/src/USER-EFF/atom_vec_electron.h @@ -27,56 +27,17 @@ namespace LAMMPS_NS { class AtomVecElectron : public AtomVec { public: AtomVecElectron(class LAMMPS *); - ~AtomVecElectron() {} - void grow(int); - void grow_reset(); - void copy(int, int, int); + + void grow_pointers(); void force_clear(int, size_t); - int pack_comm(int, int *, double *, int, int *); - int pack_comm_vel(int, int *, double *, int, int *); - int pack_comm_hybrid(int, int *, double *); - void unpack_comm(int, int, double *); - void unpack_comm_vel(int, int, double *); - int unpack_comm_hybrid(int, int, double *); - int pack_reverse(int, int, double *); - int pack_reverse_hybrid(int, int, double *); - void unpack_reverse(int, int *, double *); - int unpack_reverse_hybrid(int, int *, double *); - int pack_border(int, int *, double *, int, int *); - int pack_border_vel(int, int *, double *, int, int *); - int pack_border_hybrid(int, int *, double *); - void unpack_border(int, int, double *); - void unpack_border_vel(int, int, double *); - int unpack_border_hybrid(int, int, double *); - int pack_exchange(int, double *); - int unpack_exchange(double *); - int size_restart(); - int pack_restart(int, double *); - int unpack_restart(double *); - void create_atom(int, double *); - void data_atom(double *, imageint, char **); - int data_atom_hybrid(int, char **); - void data_vel(int, char **); - int data_vel_hybrid(int, char **); - void pack_data(double **); - int pack_data_hybrid(int, double *); - void write_data(FILE *, int, double **); - int write_data_hybrid(FILE *, double *); - void pack_vel(double **); - int pack_vel_hybrid(int, double *); - void write_vel(FILE *, int, double **); - int write_vel_hybrid(FILE *, double *); + void create_atom_post(int); + void data_atom_post(int); int property_atom(char *); void pack_property_atom(int, double *, int, int); - bigint memory_usage(); - private: - tagint *tag; - int *type,*mask; - imageint *image; - double **x,**v,**f; +private: int *spin; - double *q,*eradius,*ervel,*erforce; + double *eradius,*ervel,*erforce; }; } diff --git a/src/USER-EFF/pair_eff_cut.cpp b/src/USER-EFF/pair_eff_cut.cpp index e7aed14030acfc4a44a8a33a76213efbf487d30a..f9333f4becba6649fa8209a0fd477b3a0ee4c476 100644 --- a/src/USER-EFF/pair_eff_cut.cpp +++ b/src/USER-EFF/pair_eff_cut.cpp @@ -801,7 +801,7 @@ void PairEffCut::settings(int narg, char **arg) int atype; int iarg = 1; - int ecp_found = 0; + ecp_found = 0; while (iarg < narg) { if (strcmp(arg[iarg],"limit/eradius") == 0) { @@ -821,17 +821,15 @@ void PairEffCut::settings(int narg, char **arg) else if (strcmp(arg[iarg+1],"O") == 0) ecp_type[atype] = 8; else if (strcmp(arg[iarg+1],"Al") == 0) ecp_type[atype] = 13; else if (strcmp(arg[iarg+1],"Si") == 0) ecp_type[atype] = 14; - else error->all(FLERR, "Note: there are no default parameters for this atom ECP\n"); + else error->all(FLERR, "No default parameters for this atom ECP\n"); iarg += 2; ecp_found = 1; } - } + } else error->all(FLERR,"Illegal pair style command"); } - if (!ecp_found && atom->ecp_flag) - error->all(FLERR,"Need to specify ECP type on pair_style command"); - // Need to introduce 2 new constants w/out changing update.cpp + if (force->qqr2e==332.06371) { // i.e. Real units chosen h2e = 627.509; // hartree->kcal/mol hhmss2e = 175.72044219620075; // hartree->kcal/mol * (Bohr->Angstrom)^2 @@ -872,9 +870,24 @@ void PairEffCut::init_style() if (update->whichflag == 1) { if (force->qqr2e == 332.06371 && update->dt == 1.0) - error->all(FLERR,"You must lower the default real units timestep for pEFF "); + error->all(FLERR,"Must lower the default real units timestep for pEFF "); } + // check if any atom's spin = 3 and ECP type was not set + + int *spin = atom->spin; + int nlocal = atom->nlocal; + + int flag = 0; + for (int i = 0; i < nlocal; i++) + if (spin[i] == 3) flag = 1; + + int flagall; + MPI_Allreduce(&flag,&flagall,1,MPI_INT,MPI_SUM,world); + + if (flagall && !ecp_found) + error->all(FLERR,"Need to specify ECP type on pair_style command"); + // need a half neigh list and optionally a granular history neigh list neighbor->request(this,instance_me); diff --git a/src/USER-EFF/pair_eff_cut.h b/src/USER-EFF/pair_eff_cut.h index 63dabe5db86c34d74a5923aca3319258fcdde77b..bd04344373c0bfdf6a13d2e2076c9452f778113b 100644 --- a/src/USER-EFF/pair_eff_cut.h +++ b/src/USER-EFF/pair_eff_cut.h @@ -46,10 +46,12 @@ class PairEffCut : public Pair { private: int limit_eradius_flag, pressure_with_evirials_flag; + int ecp_found; double cut_global; double **cut; int ecp_type[100]; - double PAULI_CORE_A[100], PAULI_CORE_B[100], PAULI_CORE_C[100], PAULI_CORE_D[100], PAULI_CORE_E[100]; + double PAULI_CORE_A[100],PAULI_CORE_B[100],PAULI_CORE_C[100]; + double PAULI_CORE_D[100],PAULI_CORE_E[100]; double hhmss2e, h2e; int nmax; diff --git a/src/USER-INTEL/angle_charmm_intel.cpp b/src/USER-INTEL/angle_charmm_intel.cpp index 43de50e7fa79ba99f4aea2910be7f78f85fea339..9275e82f1c98528d1f02efb9aa52d92e27d1400f 100644 --- a/src/USER-INTEL/angle_charmm_intel.cpp +++ b/src/USER-INTEL/angle_charmm_intel.cpp @@ -15,6 +15,7 @@ Contributing author: W. Michael Brown (Intel) ------------------------------------------------------------------------- */ +#include "omp_compat.h" #include #include #include "angle_charmm_intel.h" @@ -134,7 +135,7 @@ void AngleCharmmIntel::eval(const int vflag, } #if defined(_OPENMP) - #pragma omp parallel default(none) \ + #pragma omp parallel LMP_DEFAULT_NONE \ shared(f_start,f_stride,fc) \ reduction(+:oeangle,ov0,ov1,ov2,ov3,ov4,ov5) #endif diff --git a/src/USER-INTEL/angle_harmonic_intel.cpp b/src/USER-INTEL/angle_harmonic_intel.cpp index d073e7bc56997d9ab0334f1fd35709b290cd0de4..49a71038dafcba324da350dcdffcd7247b50e08d 100644 --- a/src/USER-INTEL/angle_harmonic_intel.cpp +++ b/src/USER-INTEL/angle_harmonic_intel.cpp @@ -15,6 +15,7 @@ Contributing author: W. Michael Brown (Intel) ------------------------------------------------------------------------- */ +#include "omp_compat.h" #include #include #include "angle_harmonic_intel.h" @@ -134,7 +135,7 @@ void AngleHarmonicIntel::eval(const int vflag, } #if defined(_OPENMP) - #pragma omp parallel default(none) \ + #pragma omp parallel LMP_DEFAULT_NONE \ shared(f_start,f_stride,fc) \ reduction(+:oeangle,ov0,ov1,ov2,ov3,ov4,ov5) #endif diff --git a/src/USER-INTEL/bond_fene_intel.cpp b/src/USER-INTEL/bond_fene_intel.cpp index 6578706a9be9ff4aa7f30972655aff4fb645d240..5c58e7bf10f08b5a03a6f9d4176fa1841a066d85 100644 --- a/src/USER-INTEL/bond_fene_intel.cpp +++ b/src/USER-INTEL/bond_fene_intel.cpp @@ -15,6 +15,7 @@ Contributing author: Stan Moore (Sandia) ------------------------------------------------------------------------- */ +#include "omp_compat.h" #include #include #include "bond_fene_intel.h" @@ -127,7 +128,7 @@ void BondFENEIntel::eval(const int vflag, } #if defined(_OPENMP) - #pragma omp parallel default(none) \ + #pragma omp parallel LMP_DEFAULT_NONE \ shared(f_start,f_stride,fc) \ reduction(+:oebond,ov0,ov1,ov2,ov3,ov4,ov5) #endif diff --git a/src/USER-INTEL/bond_harmonic_intel.cpp b/src/USER-INTEL/bond_harmonic_intel.cpp index 55dda9fa15cf0a9712b8270bd7a9e3eb97400b58..8bf0a82218562f9148d18f77addbbc86e6e76d14 100644 --- a/src/USER-INTEL/bond_harmonic_intel.cpp +++ b/src/USER-INTEL/bond_harmonic_intel.cpp @@ -15,6 +15,7 @@ Contributing author: W. Michael Brown (Intel) ------------------------------------------------------------------------- */ +#include "omp_compat.h" #include #include #include "bond_harmonic_intel.h" @@ -127,7 +128,7 @@ void BondHarmonicIntel::eval(const int vflag, } #if defined(_OPENMP) - #pragma omp parallel default(none) \ + #pragma omp parallel LMP_DEFAULT_NONE \ shared(f_start,f_stride,fc) \ reduction(+:oebond,ov0,ov1,ov2,ov3,ov4,ov5) #endif diff --git a/src/USER-INTEL/dihedral_charmm_intel.cpp b/src/USER-INTEL/dihedral_charmm_intel.cpp index 2ea4eb6d218db74d0ee54b8a2e3e065f2569e5b8..61fc1dfbd548a77d1baffbca8f4bba19216db5ea 100644 --- a/src/USER-INTEL/dihedral_charmm_intel.cpp +++ b/src/USER-INTEL/dihedral_charmm_intel.cpp @@ -15,6 +15,7 @@ Contributing author: W. Michael Brown (Intel) ------------------------------------------------------------------------- */ +#include "omp_compat.h" #include #include #include "dihedral_charmm_intel.h" @@ -148,7 +149,7 @@ void DihedralCharmmIntel::eval(const int vflag, } #if defined(_OPENMP) - #pragma omp parallel default(none) \ + #pragma omp parallel LMP_DEFAULT_NONE \ shared(f_start,f_stride,fc) \ reduction(+:oevdwl,oecoul,oedihedral,ov0,ov1,ov2,ov3,ov4,ov5, \ opv0,opv1,opv2,opv3,opv4,opv5) @@ -522,7 +523,7 @@ void DihedralCharmmIntel::eval(const int vflag, } #if defined(_OPENMP) - #pragma omp parallel default(none) \ + #pragma omp parallel LMP_DEFAULT_NONE \ shared(f_start,f_stride,fc) \ reduction(+:oevdwl,oecoul,oedihedral,ov0,ov1,ov2,ov3,ov4,ov5, \ opv0,opv1,opv2,opv3,opv4,opv5) diff --git a/src/USER-INTEL/dihedral_fourier_intel.cpp b/src/USER-INTEL/dihedral_fourier_intel.cpp index 8c4a2ce921dc9564c661cd448587b4728498e2c1..fb8051474e64453ce8fa7e2257468a0902eec9dc 100644 --- a/src/USER-INTEL/dihedral_fourier_intel.cpp +++ b/src/USER-INTEL/dihedral_fourier_intel.cpp @@ -15,6 +15,7 @@ Contributing author: W. Michael Brown (Intel) ------------------------------------------------------------------------- */ +#include "omp_compat.h" #include #include #include "dihedral_fourier_intel.h" @@ -127,7 +128,7 @@ void DihedralFourierIntel::eval(const int vflag, } #if defined(_OPENMP) - #pragma omp parallel default(none) \ + #pragma omp parallel LMP_DEFAULT_NONE \ shared(f_start,f_stride,fc) \ reduction(+:oedihedral,ov0,ov1,ov2,ov3,ov4,ov5) #endif diff --git a/src/USER-INTEL/dihedral_harmonic_intel.cpp b/src/USER-INTEL/dihedral_harmonic_intel.cpp index 60655f2618bc73e7702b2dceccd50368b896b2fb..f6c4ea0fdeb7425095c839a7590c8a6b0489f40e 100644 --- a/src/USER-INTEL/dihedral_harmonic_intel.cpp +++ b/src/USER-INTEL/dihedral_harmonic_intel.cpp @@ -15,6 +15,7 @@ Contributing author: W. Michael Brown (Intel) ------------------------------------------------------------------------- */ +#include "omp_compat.h" #include #include #include "dihedral_harmonic_intel.h" @@ -127,7 +128,7 @@ void DihedralHarmonicIntel::eval(const int vflag, } #if defined(_OPENMP) - #pragma omp parallel default(none) \ + #pragma omp parallel LMP_DEFAULT_NONE \ shared(f_start,f_stride,fc) \ reduction(+:oedihedral,ov0,ov1,ov2,ov3,ov4,ov5) #endif diff --git a/src/USER-INTEL/dihedral_opls_intel.cpp b/src/USER-INTEL/dihedral_opls_intel.cpp index 5b580cd7d9dfc76bf80ad6b141537a14fb674a27..79a8874a722c044061c87f9283188eb2ac3dc979 100644 --- a/src/USER-INTEL/dihedral_opls_intel.cpp +++ b/src/USER-INTEL/dihedral_opls_intel.cpp @@ -15,6 +15,7 @@ Contributing author: W. Michael Brown (Intel) ------------------------------------------------------------------------- */ +#include "omp_compat.h" #include #include #include "dihedral_opls_intel.h" @@ -131,7 +132,7 @@ void DihedralOPLSIntel::eval(const int vflag, } #if defined(_OPENMP) - #pragma omp parallel default(none) \ + #pragma omp parallel LMP_DEFAULT_NONE \ shared(f_start,f_stride,fc) \ reduction(+:oedihedral,ov0,ov1,ov2,ov3,ov4,ov5) #endif diff --git a/src/USER-INTEL/fix_intel.cpp b/src/USER-INTEL/fix_intel.cpp index 5ecae79b3018bf9cbfd3fb3f9b4f81e6c13df639..c62a6a432a8347dfd3ed627ee3e05b017fad68d0 100644 --- a/src/USER-INTEL/fix_intel.cpp +++ b/src/USER-INTEL/fix_intel.cpp @@ -16,6 +16,7 @@ Anupama Kurpad (Intel) - Host Affinitization ------------------------------------------------------------------------- */ +#include "omp_compat.h" #include "fix_intel.h" #include "comm.h" #include "error.h" @@ -220,7 +221,7 @@ FixIntel::FixIntel(LAMMPS *lmp, int narg, char **arg) : Fix(lmp, narg, arg) comm->nthreads = nomp; } else { int nthreads; - #pragma omp parallel default(none) shared(nthreads) + #pragma omp parallel LMP_DEFAULT_NONE LMP_SHARED(nthreads) nthreads = omp_get_num_threads(); comm->nthreads = nthreads; } diff --git a/src/USER-INTEL/improper_cvff_intel.cpp b/src/USER-INTEL/improper_cvff_intel.cpp index f198e47d5cdcae3bf2e71b857e2658afaa6d2ff9..4562c63cdbe9e3c69bb793cdbb851e9c00a5b412 100644 --- a/src/USER-INTEL/improper_cvff_intel.cpp +++ b/src/USER-INTEL/improper_cvff_intel.cpp @@ -15,6 +15,7 @@ Contributing author: W. Michael Brown (Intel) ------------------------------------------------------------------------- */ +#include "omp_compat.h" #include #include #include @@ -138,7 +139,7 @@ void ImproperCvffIntel::eval(const int vflag, } #if defined(_OPENMP) - #pragma omp parallel default(none) \ + #pragma omp parallel LMP_DEFAULT_NONE \ shared(f_start,f_stride,fc) \ reduction(+:oeimproper,ov0,ov1,ov2,ov3,ov4,ov5) #endif diff --git a/src/USER-INTEL/improper_harmonic_intel.cpp b/src/USER-INTEL/improper_harmonic_intel.cpp index d638e6a66eb7c681d6c2817879ba851f4007f3df..fc5cf08c529666e24adb587dbecf16046bb334b9 100644 --- a/src/USER-INTEL/improper_harmonic_intel.cpp +++ b/src/USER-INTEL/improper_harmonic_intel.cpp @@ -15,6 +15,7 @@ Contributing author: W. Michael Brown (Intel) ------------------------------------------------------------------------- */ +#include "omp_compat.h" #include #include #include @@ -139,7 +140,7 @@ void ImproperHarmonicIntel::eval(const int vflag, } #if defined(_OPENMP) - #pragma omp parallel default(none) \ + #pragma omp parallel LMP_DEFAULT_NONE \ shared(f_start,f_stride,fc) \ reduction(+:oeimproper,ov0,ov1,ov2,ov3,ov4,ov5) #endif diff --git a/src/USER-INTEL/npair_intel.cpp b/src/USER-INTEL/npair_intel.cpp index 4256e03b3cb78840ade4422a2cec676fb4d4fe3c..f7a233efc9791f88dad47180fd893af20068a42f 100644 --- a/src/USER-INTEL/npair_intel.cpp +++ b/src/USER-INTEL/npair_intel.cpp @@ -15,6 +15,7 @@ Contributing author: W. Michael Brown (Intel) ------------------------------------------------------------------------- */ +#include "omp_compat.h" #include "comm.h" #include "domain.h" #include "timer.h" @@ -263,7 +264,7 @@ void NPairIntel::bin_newton(const int offload, NeighList *list, } #if defined(_OPENMP) - #pragma omp parallel default(none) \ + #pragma omp parallel LMP_DEFAULT_NONE \ shared(overflow, nstencilp, binstart, binend) #endif { diff --git a/src/USER-INTEL/pair_airebo_intel.cpp b/src/USER-INTEL/pair_airebo_intel.cpp index e6e8503bb0a577fe794c443f9816d9d39e93df0f..c1e4a5374a2205e23b905479df0625a9b95b721e 100644 --- a/src/USER-INTEL/pair_airebo_intel.cpp +++ b/src/USER-INTEL/pair_airebo_intel.cpp @@ -49,8 +49,10 @@ #include "kspace.h" #include "modify.h" #include "suffix.h" +#include "math_const.h" using namespace LAMMPS_NS; +using namespace MathConst; #ifdef __INTEL_OFFLOAD #pragma offload_attribute(push, target(mic)) @@ -637,8 +639,6 @@ namespace overloaded { compared to original code. ---------------------------------------------------------------------- */ -#define M_PI 3.14159265358979323846 /* pi */ - #define CARBON 0 #define HYDROGEN 1 #define TOL 1.0e-9 @@ -662,8 +662,8 @@ inline flt_t Sp(flt_t r, flt_t lo, flt_t hi, flt_t * del) { if (del) *del = 0; return 0; } else { - t *= static_cast(M_PI); - if (del) *del = static_cast(-0.5 * M_PI) + t *= static_cast(MY_PI); + if (del) *del = static_cast(-0.5 * MY_PI) * overloaded::sin(t) / (hi - lo); return static_cast(0.5) * (1 + overloaded::cos(t)); } @@ -2248,7 +2248,7 @@ static fvec aut_Sp_deriv(fvec r, fvec lo, fvec hi, fvec * d) { fvec c_1 = fvec::set1(1); fvec c_0_5 = fvec::set1(0.5); fvec c_m0_5 = fvec::set1(-0.5); - fvec c_PI = fvec::set1(M_PI); + fvec c_PI = fvec::set1(MY_PI); bvec m_lo = fvec::cmple(r, lo); bvec m_hi = fvec::cmpnlt(r, hi); // nlt == ge bvec m_tr = bvec::kandn(m_lo, ~ m_hi); @@ -2273,7 +2273,7 @@ static fvec aut_Sp_deriv(fvec r, fvec lo, fvec hi, fvec * d) { static fvec aut_mask_Sp(bvec mask, fvec r, fvec lo, fvec hi) { fvec c_1 = fvec::set1(1); fvec c_0_5 = fvec::set1(0.5); - fvec c_PI = fvec::set1(M_PI); + fvec c_PI = fvec::set1(MY_PI); bvec m_lo = fvec::mask_cmple(mask, r, lo); bvec m_hi = fvec::mask_cmpnlt(mask, r, hi); // nlt == ge bvec m_tr = bvec::kandn(m_lo, bvec::kandn(m_hi, mask)); diff --git a/src/USER-INTEL/pair_eam_alloy_intel.cpp b/src/USER-INTEL/pair_eam_alloy_intel.cpp index da8a180fff2dc1a36f1b5b64ae554a124285dfbe..4a7a8b801d7f6b3e82103a35cdc2ca5146116115 100644 --- a/src/USER-INTEL/pair_eam_alloy_intel.cpp +++ b/src/USER-INTEL/pair_eam_alloy_intel.cpp @@ -24,11 +24,12 @@ #include "force.h" #include "memory.h" #include "error.h" +#include "utils.h" +#include "tokenizer.h" +#include "potential_file_reader.h" using namespace LAMMPS_NS; -#define MAXLINE 1024 - /* ---------------------------------------------------------------------- */ PairEAMAlloyIntel::PairEAMAlloyIntel(LAMMPS *lmp) : PairEAMIntel(lmp) @@ -116,94 +117,112 @@ void PairEAMAlloyIntel::read_file(char *filename) { Setfl *file = setfl; - // open potential file + // read potential file + if(comm->me == 0) { + PotentialFileReader reader(lmp, filename, "EAM"); - int me = comm->me; - FILE *fptr; - char line[MAXLINE]; + try { + char * line = nullptr; - if (me == 0) { - fptr = force->open_potential(filename); - if (fptr == NULL) { - char str[128]; - snprintf(str,128,"Cannot open EAM potential file %s",filename); - error->one(FLERR,str); - } - } + reader.skip_line(); + reader.skip_line(); + reader.skip_line(); - // read and broadcast header - // extract element names from nelements line + // extract element names from nelements line + line = reader.next_line(1); + ValueTokenizer values(line); + file->nelements = values.next_int(); - int n; - if (me == 0) { - fgets(line,MAXLINE,fptr); - fgets(line,MAXLINE,fptr); - fgets(line,MAXLINE,fptr); - fgets(line,MAXLINE,fptr); - n = strlen(line) + 1; - } - MPI_Bcast(&n,1,MPI_INT,0,world); - MPI_Bcast(line,n,MPI_CHAR,0,world); + if (values.count() != file->nelements + 1) + error->one(FLERR,"Incorrect element names in EAM potential file"); - sscanf(line,"%d",&file->nelements); - int nwords = atom->count_words(line); - if (nwords != file->nelements + 1) - error->all(FLERR,"Incorrect element names in EAM potential file"); + file->elements = new char*[file->nelements]; + for (int i = 0; i < file->nelements; i++) { + const std::string word = values.next_string(); + const int n = word.length() + 1; + file->elements[i] = new char[n]; + strcpy(file->elements[i], word.c_str()); + } - char **words = new char*[file->nelements+1]; - nwords = 0; - strtok(line," \t\n\r\f"); - while ((words[nwords++] = strtok(NULL," \t\n\r\f"))) continue; + // - file->elements = new char*[file->nelements]; - for (int i = 0; i < file->nelements; i++) { - n = strlen(words[i]) + 1; - file->elements[i] = new char[n]; - strcpy(file->elements[i],words[i]); - } - delete [] words; + line = reader.next_line(5); + values = ValueTokenizer(line); + file->nrho = values.next_int(); + file->drho = values.next_double(); + file->nr = values.next_int(); + file->dr = values.next_double(); + file->cut = values.next_double(); - if (me == 0) { - fgets(line,MAXLINE,fptr); - sscanf(line,"%d %lg %d %lg %lg", - &file->nrho,&file->drho,&file->nr,&file->dr,&file->cut); - } + if ((file->nrho <= 0) || (file->nr <= 0) || (file->dr <= 0.0)) + error->one(FLERR,"Invalid EAM potential file"); + + memory->create(file->mass, file->nelements, "pair:mass"); + memory->create(file->frho, file->nelements, file->nrho + 1, "pair:frho"); + memory->create(file->rhor, file->nelements, file->nr + 1, "pair:rhor"); + memory->create(file->z2r, file->nelements, file->nelements, file->nr + 1, "pair:z2r"); + + for (int i = 0; i < file->nelements; i++) { + line = reader.next_line(2); + values = ValueTokenizer(line); + values.next_int(); // ignore + file->mass[i] = values.next_double(); + + reader.next_dvector(file->nrho, &file->frho[i][1]); + reader.next_dvector(file->nr, &file->rhor[i][1]); + } - MPI_Bcast(&file->nrho,1,MPI_INT,0,world); - MPI_Bcast(&file->drho,1,MPI_DOUBLE,0,world); - MPI_Bcast(&file->nr,1,MPI_INT,0,world); - MPI_Bcast(&file->dr,1,MPI_DOUBLE,0,world); - MPI_Bcast(&file->cut,1,MPI_DOUBLE,0,world); - - file->mass = new double[file->nelements]; - memory->create(file->frho,file->nelements,file->nrho+1,"pair:frho"); - memory->create(file->rhor,file->nelements,file->nr+1,"pair:rhor"); - memory->create(file->z2r,file->nelements,file->nelements,file->nr+1, - "pair:z2r"); - - int i,j,tmp; - for (i = 0; i < file->nelements; i++) { - if (me == 0) { - fgets(line,MAXLINE,fptr); - sscanf(line,"%d %lg",&tmp,&file->mass[i]); + for (int i = 0; i < file->nelements; i++) { + for (int j = 0; j <= i; j++) { + reader.next_dvector(file->nr, &file->z2r[i][j][1]); + } + } + } catch (TokenizerException & e) { + error->one(FLERR, e.what()); } - MPI_Bcast(&file->mass[i],1,MPI_DOUBLE,0,world); + } - if (me == 0) grab(fptr,file->nrho,&file->frho[i][1]); - MPI_Bcast(&file->frho[i][1],file->nrho,MPI_DOUBLE,0,world); - if (me == 0) grab(fptr,file->nr,&file->rhor[i][1]); - MPI_Bcast(&file->rhor[i][1],file->nr,MPI_DOUBLE,0,world); + // broadcast potential information + MPI_Bcast(&file->nelements, 1, MPI_INT, 0, world); + + MPI_Bcast(&file->nrho, 1, MPI_INT, 0, world); + MPI_Bcast(&file->drho, 1, MPI_DOUBLE, 0, world); + MPI_Bcast(&file->nr, 1, MPI_INT, 0, world); + MPI_Bcast(&file->dr, 1, MPI_DOUBLE, 0, world); + MPI_Bcast(&file->cut, 1, MPI_DOUBLE, 0, world); + + // allocate memory on other procs + if (comm->me != 0) { + file->elements = new char*[file->nelements]; + for (int i = 0; i < file->nelements; i++) file->elements[i] = nullptr; + memory->create(file->mass, file->nelements, "pair:mass"); + memory->create(file->frho, file->nelements, file->nrho + 1, "pair:frho"); + memory->create(file->rhor, file->nelements, file->nr + 1, "pair:rhor"); + memory->create(file->z2r, file->nelements, file->nelements, file->nr + 1, "pair:z2r"); } - for (i = 0; i < file->nelements; i++) - for (j = 0; j <= i; j++) { - if (me == 0) grab(fptr,file->nr,&file->z2r[i][j][1]); - MPI_Bcast(&file->z2r[i][j][1],file->nr,MPI_DOUBLE,0,world); - } + // broadcast file->elements string array + for (int i = 0; i < file->nelements; i++) { + int n; + if (comm->me == 0) n = strlen(file->elements[i]) + 1; + MPI_Bcast(&n, 1, MPI_INT, 0, world); + if (comm->me != 0) file->elements[i] = new char[n]; + MPI_Bcast(file->elements[i], n, MPI_CHAR, 0, world); + } - // close the potential file + // broadcast file->mass, frho, rhor + for (int i = 0; i < file->nelements; i++) { + MPI_Bcast(&file->mass[i], 1, MPI_DOUBLE, 0, world); + MPI_Bcast(&file->frho[i][1], file->nrho, MPI_DOUBLE, 0, world); + MPI_Bcast(&file->rhor[i][1], file->nr, MPI_DOUBLE, 0, world); + } - if (me == 0) fclose(fptr); + // broadcast file->z2r + for (int i = 0; i < file->nelements; i++) { + for (int j = 0; j <= i; j++) { + MPI_Bcast(&file->z2r[i][j][1], file->nr, MPI_DOUBLE, 0, world); + } + } } /* ---------------------------------------------------------------------- diff --git a/src/USER-INTEL/pair_eam_fs_intel.cpp b/src/USER-INTEL/pair_eam_fs_intel.cpp index 043f77db3efc1e1f7199993465b784f25b574f8a..0d4cb5e3ae4fb61cdf691a78d23502fb921d651f 100644 --- a/src/USER-INTEL/pair_eam_fs_intel.cpp +++ b/src/USER-INTEL/pair_eam_fs_intel.cpp @@ -24,11 +24,12 @@ #include "force.h" #include "memory.h" #include "error.h" +#include "utils.h" +#include "tokenizer.h" +#include "potential_file_reader.h" using namespace LAMMPS_NS; -#define MAXLINE 1024 - /* ---------------------------------------------------------------------- */ PairEAMFSIntel::PairEAMFSIntel(LAMMPS *lmp) : PairEAMIntel(lmp) @@ -116,99 +117,118 @@ void PairEAMFSIntel::read_file(char *filename) { Fs *file = fs; - // open potential file + // read potential file + if(comm->me == 0) { + PotentialFileReader reader(lmp, filename, "EAM"); - int me = comm->me; - FILE *fptr; - char line[MAXLINE]; + try { + char * line = nullptr; - if (me == 0) { - fptr = force->open_potential(filename); - if (fptr == NULL) { - char str[128]; - snprintf(str,128,"Cannot open EAM potential file %s",filename); - error->one(FLERR,str); - } - } + reader.skip_line(); + reader.skip_line(); + reader.skip_line(); - // read and broadcast header - // extract element names from nelements line + // extract element names from nelements line + line = reader.next_line(1); + ValueTokenizer values(line); + file->nelements = values.next_int(); - int n; - if (me == 0) { - fgets(line,MAXLINE,fptr); - fgets(line,MAXLINE,fptr); - fgets(line,MAXLINE,fptr); - fgets(line,MAXLINE,fptr); - n = strlen(line) + 1; - } - MPI_Bcast(&n,1,MPI_INT,0,world); - MPI_Bcast(line,n,MPI_CHAR,0,world); + if (values.count() != file->nelements + 1) + error->one(FLERR,"Incorrect element names in EAM potential file"); - sscanf(line,"%d",&file->nelements); - int nwords = atom->count_words(line); - if (nwords != file->nelements + 1) - error->all(FLERR,"Incorrect element names in EAM potential file"); + file->elements = new char*[file->nelements]; + for (int i = 0; i < file->nelements; i++) { + const std::string word = values.next_string(); + const int n = word.length() + 1; + file->elements[i] = new char[n]; + strcpy(file->elements[i], word.c_str()); + } - char **words = new char*[file->nelements+1]; - nwords = 0; - strtok(line," \t\n\r\f"); - while ((words[nwords++] = strtok(NULL," \t\n\r\f"))) continue; + // - file->elements = new char*[file->nelements]; - for (int i = 0; i < file->nelements; i++) { - n = strlen(words[i]) + 1; - file->elements[i] = new char[n]; - strcpy(file->elements[i],words[i]); + line = reader.next_line(5); + values = ValueTokenizer(line); + file->nrho = values.next_int(); + file->drho = values.next_double(); + file->nr = values.next_int(); + file->dr = values.next_double(); + file->cut = values.next_double(); + + if ((file->nrho <= 0) || (file->nr <= 0) || (file->dr <= 0.0)) + error->one(FLERR,"Invalid EAM potential file"); + + memory->create(file->mass, file->nelements, "pair:mass"); + memory->create(file->frho, file->nelements, file->nrho + 1, "pair:frho"); + memory->create(file->rhor, file->nelements, file->nelements, file->nr + 1, "pair:rhor"); + memory->create(file->z2r, file->nelements, file->nelements, file->nr + 1, "pair:z2r"); + + for (int i = 0; i < file->nelements; i++) { + line = reader.next_line(2); + values = ValueTokenizer(line); + values.next_int(); // ignore + file->mass[i] = values.next_double(); + + reader.next_dvector(file->nrho, &file->frho[i][1]); + + for (int j = 0; j < file->nelements; j++) { + reader.next_dvector(file->nr, &file->rhor[i][j][1]); + } + } + + for (int i = 0; i < file->nelements; i++) { + for (int j = 0; j <= i; j++) { + reader.next_dvector(file->nr, &file->z2r[i][j][1]); + } + } + } catch (TokenizerException & e) { + error->one(FLERR, e.what()); + } } - delete [] words; - if (me == 0) { - fgets(line,MAXLINE,fptr); - sscanf(line,"%d %lg %d %lg %lg", - &file->nrho,&file->drho,&file->nr,&file->dr,&file->cut); + // broadcast potential information + MPI_Bcast(&file->nelements, 1, MPI_INT, 0, world); + + MPI_Bcast(&file->nrho, 1, MPI_INT, 0, world); + MPI_Bcast(&file->drho, 1, MPI_DOUBLE, 0, world); + MPI_Bcast(&file->nr, 1, MPI_INT, 0, world); + MPI_Bcast(&file->dr, 1, MPI_DOUBLE, 0, world); + MPI_Bcast(&file->cut, 1, MPI_DOUBLE, 0, world); + + // allocate memory on other procs + if (comm->me != 0) { + file->elements = new char*[file->nelements]; + for (int i = 0; i < file->nelements; i++) file->elements[i] = nullptr; + memory->create(file->mass, file->nelements, "pair:mass"); + memory->create(file->frho, file->nelements, file->nrho + 1, "pair:frho"); + memory->create(file->rhor, file->nelements, file->nelements, file->nr + 1, "pair:rhor"); + memory->create(file->z2r, file->nelements, file->nelements, file->nr + 1, "pair:z2r"); } - MPI_Bcast(&file->nrho,1,MPI_INT,0,world); - MPI_Bcast(&file->drho,1,MPI_DOUBLE,0,world); - MPI_Bcast(&file->nr,1,MPI_INT,0,world); - MPI_Bcast(&file->dr,1,MPI_DOUBLE,0,world); - MPI_Bcast(&file->cut,1,MPI_DOUBLE,0,world); - - file->mass = new double[file->nelements]; - memory->create(file->frho,file->nelements,file->nrho+1, - "pair:frho"); - memory->create(file->rhor,file->nelements,file->nelements, - file->nr+1,"pair:rhor"); - memory->create(file->z2r,file->nelements,file->nelements, - file->nr+1,"pair:z2r"); - - int i,j,tmp; - for (i = 0; i < file->nelements; i++) { - if (me == 0) { - fgets(line,MAXLINE,fptr); - sscanf(line,"%d %lg",&tmp,&file->mass[i]); - } - MPI_Bcast(&file->mass[i],1,MPI_DOUBLE,0,world); + // broadcast file->elements string array + for (int i = 0; i < file->nelements; i++) { + int n; + if (comm->me == 0) n = strlen(file->elements[i]) + 1; + MPI_Bcast(&n, 1, MPI_INT, 0, world); + if (comm->me != 0) file->elements[i] = new char[n]; + MPI_Bcast(file->elements[i], n, MPI_CHAR, 0, world); + } - if (me == 0) grab(fptr,file->nrho,&file->frho[i][1]); - MPI_Bcast(&file->frho[i][1],file->nrho,MPI_DOUBLE,0,world); + // broadcast file->mass, frho, rhor + for (int i = 0; i < file->nelements; i++) { + MPI_Bcast(&file->mass[i], 1, MPI_DOUBLE, 0, world); + MPI_Bcast(&file->frho[i][1], file->nrho, MPI_DOUBLE, 0, world); - for (j = 0; j < file->nelements; j++) { - if (me == 0) grab(fptr,file->nr,&file->rhor[i][j][1]); - MPI_Bcast(&file->rhor[i][j][1],file->nr,MPI_DOUBLE,0,world); + for (int j = 0; j < file->nelements; j++) { + MPI_Bcast(&file->rhor[i][j][1], file->nr, MPI_DOUBLE, 0, world); } } - for (i = 0; i < file->nelements; i++) - for (j = 0; j <= i; j++) { - if (me == 0) grab(fptr,file->nr,&file->z2r[i][j][1]); - MPI_Bcast(&file->z2r[i][j][1],file->nr,MPI_DOUBLE,0,world); + // broadcast file->z2r + for (int i = 0; i < file->nelements; i++) { + for (int j = 0; j <= i; j++) { + MPI_Bcast(&file->z2r[i][j][1], file->nr, MPI_DOUBLE, 0, world); } - - // close the potential file - - if (me == 0) fclose(fptr); + } } /* ---------------------------------------------------------------------- diff --git a/src/USER-INTEL/pair_eam_intel.cpp b/src/USER-INTEL/pair_eam_intel.cpp index 984823f07ec9393dc2e91dbe31a74e4b81753af4..994f0d3910123f26ad03b512b44e9e2c0af245c3 100644 --- a/src/USER-INTEL/pair_eam_intel.cpp +++ b/src/USER-INTEL/pair_eam_intel.cpp @@ -711,6 +711,8 @@ void PairEAMIntel::pack_force_const(ForceConst &fc, if (type2rhor[i][j] >= 0) { const int joff = ioff + j * fc.rhor_jstride(); for (int k = 0; k < nr + 1; k++) { + if ((type2rhor[j][i] < 0) || (type2rhor[i][j] < 0)) + continue; if (type2rhor[j][i] != type2rhor[i][j]) _onetype = 0; else if (_onetype < 0) diff --git a/src/USER-INTEL/pppm_disp_intel.cpp b/src/USER-INTEL/pppm_disp_intel.cpp index fd1302da98358dc33c8cb3e4fe4f68485c168918..75fdc3b1df6fdb6570b9b73fdac6454835441cb0 100644 --- a/src/USER-INTEL/pppm_disp_intel.cpp +++ b/src/USER-INTEL/pppm_disp_intel.cpp @@ -15,6 +15,7 @@ Contributing authors: William McDoniel (RWTH Aachen University) ------------------------------------------------------------------------- */ +#include "omp_compat.h" #include #include #include @@ -729,7 +730,7 @@ void PPPMDispIntel::particle_map(double delx, double dely, double delz, int flag = 0; #if defined(_OPENMP) - #pragma omp parallel default(none) \ + #pragma omp parallel LMP_DEFAULT_NONE \ shared(nlocal, nthr, delx, dely, delz, sft, p2g, nup, nlow, nxlo,\ nylo, nzlo, nxhi, nyhi, nzhi) reduction(+:flag) if(!_use_lrt) #endif @@ -803,7 +804,7 @@ void PPPMDispIntel::make_rho_c(IntelBuffers * /*buffers*/) int nthr = comm->nthreads; #if defined(_OPENMP) - #pragma omp parallel default(none) \ + #pragma omp parallel LMP_DEFAULT_NONE \ shared(nthr, nlocal, global_density) if(!_use_lrt) #endif { @@ -909,7 +910,7 @@ void PPPMDispIntel::make_rho_c(IntelBuffers * /*buffers*/) // reduce all the perthread_densities into global_density #if defined(_OPENMP) - #pragma omp parallel default(none) \ + #pragma omp parallel LMP_DEFAULT_NONE \ shared(nthr, global_density) if(!_use_lrt) #endif { @@ -951,7 +952,7 @@ void PPPMDispIntel::make_rho_g(IntelBuffers * /*buffers*/) int nthr = comm->nthreads; #if defined(_OPENMP) - #pragma omp parallel default(none) \ + #pragma omp parallel LMP_DEFAULT_NONE \ shared(nthr, nlocal, global_density) if(!_use_lrt) #endif { @@ -1059,7 +1060,7 @@ void PPPMDispIntel::make_rho_g(IntelBuffers * /*buffers*/) // reduce all the perthread_densities into global_density #if defined(_OPENMP) - #pragma omp parallel default(none) \ + #pragma omp parallel LMP_DEFAULT_NONE \ shared(nthr, global_density) if(!_use_lrt) #endif { @@ -1234,7 +1235,7 @@ void PPPMDispIntel::make_rho_none(IntelBuffers * /*buffers*/) int nthr = comm->nthreads; #if defined(_OPENMP) - #pragma omp parallel default(none) \ + #pragma omp parallel LMP_DEFAULT_NONE \ shared(nthr, nlocal, global_density) if(!_use_lrt) #endif { @@ -1343,7 +1344,7 @@ void PPPMDispIntel::make_rho_none(IntelBuffers * /*buffers*/) // reduce all the perthread_densities into global_density #if defined(_OPENMP) - #pragma omp parallel default(none) \ + #pragma omp parallel LMP_DEFAULT_NONE \ shared(nthr, global_density) if(!_use_lrt) #endif { @@ -1386,7 +1387,7 @@ void PPPMDispIntel::fieldforce_c_ik(IntelBuffers * /*buffers*/) #if defined(_OPENMP) - #pragma omp parallel default(none) \ + #pragma omp parallel LMP_DEFAULT_NONE \ shared(nlocal, nthr) if(!_use_lrt) #endif { @@ -1536,7 +1537,7 @@ void PPPMDispIntel::fieldforce_c_ad(IntelBuffers * /*buffers*/) FFT_SCALAR * _noalias const particle_ekz = this->particle_ekz; #if defined(_OPENMP) - #pragma omp parallel default(none) \ + #pragma omp parallel LMP_DEFAULT_NONE \ shared(nlocal, nthr) if(!_use_lrt) #endif { @@ -1734,7 +1735,7 @@ void PPPMDispIntel::fieldforce_g_ik(IntelBuffers * /*buffers*/) #if defined(_OPENMP) - #pragma omp parallel default(none) \ + #pragma omp parallel LMP_DEFAULT_NONE \ shared(nlocal, nthr) if(!_use_lrt) #endif { @@ -1881,7 +1882,7 @@ void PPPMDispIntel::fieldforce_g_ad(IntelBuffers * /*buffers*/) FFT_SCALAR * _noalias const particle_ekz = this->particle_ekz; #if defined(_OPENMP) - #pragma omp parallel default(none) \ + #pragma omp parallel LMP_DEFAULT_NONE \ shared(nlocal, nthr) if(!_use_lrt) #endif { @@ -2078,7 +2079,7 @@ void PPPMDispIntel::fieldforce_a_ik(IntelBuffers * /*buffers*/) #if defined(_OPENMP) - #pragma omp parallel default(none) \ + #pragma omp parallel LMP_DEFAULT_NONE \ shared(nlocal, nthr) if(!_use_lrt) #endif { @@ -2312,7 +2313,7 @@ void PPPMDispIntel::fieldforce_a_ad(IntelBuffers * /*buffers*/) FFT_SCALAR * _noalias const particle_ekz6 = this->particle_ekz6; #if defined(_OPENMP) - #pragma omp parallel default(none) \ + #pragma omp parallel LMP_DEFAULT_NONE \ shared(nlocal, nthr) if(!_use_lrt) #endif { @@ -2603,7 +2604,7 @@ void PPPMDispIntel::fieldforce_none_ik(IntelBuffers * /*buffers*/) #if defined(_OPENMP) - #pragma omp parallel default(none) \ + #pragma omp parallel LMP_DEFAULT_NONE \ shared(nlocal, nthr) if(!_use_lrt) #endif { @@ -2762,7 +2763,7 @@ void PPPMDispIntel::fieldforce_none_ad(IntelBuffers * /*buffers*/) int nthr = comm->nthreads; #if defined(_OPENMP) - #pragma omp parallel default(none) \ + #pragma omp parallel LMP_DEFAULT_NONE \ shared(nlocal, nthr) if(!_use_lrt) #endif { diff --git a/src/USER-INTEL/pppm_intel.cpp b/src/USER-INTEL/pppm_intel.cpp index e3bf779cc1a00140d37b1519da229577526c207c..d643da96b2b1901e59514bedac3d3f8377c2484b 100644 --- a/src/USER-INTEL/pppm_intel.cpp +++ b/src/USER-INTEL/pppm_intel.cpp @@ -18,6 +18,7 @@ W. Michael Brown (Intel) ------------------------------------------------------------------------- */ +#include "omp_compat.h" #include #include #include @@ -372,7 +373,7 @@ void PPPMIntel::particle_map(IntelBuffers *buffers) error->one(FLERR,"Non-numeric box dimensions - simulation unstable"); #if defined(_OPENMP) - #pragma omp parallel default(none) \ + #pragma omp parallel LMP_DEFAULT_NONE \ shared(nlocal, nthr) reduction(+:flag) if(!_use_lrt) #endif { @@ -446,7 +447,7 @@ void PPPMIntel::make_rho(IntelBuffers *buffers) nthr = comm->nthreads; #if defined(_OPENMP) - #pragma omp parallel default(none) \ + #pragma omp parallel LMP_DEFAULT_NONE \ shared(nthr, nlocal, global_density) if(!_use_lrt) #endif { @@ -549,7 +550,7 @@ void PPPMIntel::make_rho(IntelBuffers *buffers) // reduce all the perthread_densities into global_density if (nthr > 1) { #if defined(_OPENMP) - #pragma omp parallel default(none) \ + #pragma omp parallel LMP_DEFAULT_NONE \ shared(nthr, global_density) if(!_use_lrt) #endif { @@ -598,7 +599,7 @@ void PPPMIntel::fieldforce_ik(IntelBuffers *buffers) } #if defined(_OPENMP) - #pragma omp parallel default(none) \ + #pragma omp parallel LMP_DEFAULT_NONE \ shared(nlocal, nthr) if(!_use_lrt) #endif { @@ -749,7 +750,7 @@ void PPPMIntel::fieldforce_ad(IntelBuffers *buffers) } #if defined(_OPENMP) - #pragma omp parallel default(none) \ + #pragma omp parallel LMP_DEFAULT_NONE \ shared(nlocal, nthr) if(!_use_lrt) #endif { diff --git a/src/USER-INTEL/verlet_lrt_intel.cpp b/src/USER-INTEL/verlet_lrt_intel.cpp index bd143c4c94f4b791fd04b45a62bdf4e9dfd71577..4efed0d3374b2db9383bf19c40c3636f2244cd38 100644 --- a/src/USER-INTEL/verlet_lrt_intel.cpp +++ b/src/USER-INTEL/verlet_lrt_intel.cpp @@ -102,7 +102,7 @@ void VerletLRTIntel::setup(int flag) } #if defined(_LMP_INTEL_LRT_PTHREAD) - #if defined(__linux) + #if defined(__linux__) if (comm->me == 0) { cpu_set_t cpuset; sched_getaffinity(0, sizeof(cpuset), &cpuset); diff --git a/src/USER-MEAMC/meam_setup_global.cpp b/src/USER-MEAMC/meam_setup_global.cpp index ac5718914c30dd03960e8bb693ce25b3682b96d9..60264b87cb2c82b14cc9f229206b82a2d3f9f5ee 100644 --- a/src/USER-MEAMC/meam_setup_global.cpp +++ b/src/USER-MEAMC/meam_setup_global.cpp @@ -67,8 +67,15 @@ MEAM::meam_setup_global(int nelt, lattice_t* lat, int* ielement, double* /*atwt* case DIA3: this->re_meam[i][i] = tmplat[i] * sqrt(3.0) / 4.0; break; - //default: - // error + case B1: + case B2: + case C11: + case L12: + // do nothing + break; + default: + ; + // error } } diff --git a/src/USER-MEAMC/pair_meamc.cpp b/src/USER-MEAMC/pair_meamc.cpp index 3e87c6b28414bffa68b1e2d8332e6079bb5d5bad..6cd8ec6136c82a81cde41aee3cb5748ac95650ff 100644 --- a/src/USER-MEAMC/pair_meamc.cpp +++ b/src/USER-MEAMC/pair_meamc.cpp @@ -28,6 +28,7 @@ #include "neigh_request.h" #include "memory.h" #include "error.h" +#include "utils.h" using namespace LAMMPS_NS; @@ -383,7 +384,7 @@ void PairMEAMC::read_files(char *globalfile, char *userfile) // strip comment, skip line if blank if ((ptr = strchr(line,'#'))) *ptr = '\0'; - int nwords = atom->count_words(line); + int nwords = utils::count_words(line); if (nwords == 0) continue; // concatenate additional lines until have params_per_line words @@ -396,7 +397,7 @@ void PairMEAMC::read_files(char *globalfile, char *userfile) break; } if ((ptr = strchr(line,'#'))) *ptr = '\0'; - nwords = atom->count_words(line); + nwords = utils::count_words(line); } if (nwords != params_per_line) @@ -455,7 +456,7 @@ void PairMEAMC::read_files(char *globalfile, char *userfile) nset++; } - + // error if didn't find all elements in file if (nset != nelements) { @@ -537,7 +538,7 @@ void PairMEAMC::read_files(char *globalfile, char *userfile) // read settings // pass them one at a time to MEAM package // match strings to list of corresponding ints - + int maxparams = 6; char **params = new char*[maxparams]; while (1) { @@ -561,10 +562,10 @@ void PairMEAMC::read_files(char *globalfile, char *userfile) // strip comment, skip line if blank if ((ptr = strchr(line,'#'))) *ptr = '\0'; - if (atom->count_words(line) == 0) continue; + if (utils::count_words(line) == 0) continue; // params = ptrs to all fields in line - + int nparams = 0; params[nparams++] = strtok(line,"=(), '\t\n\r\f"); while (nparams < maxparams && @@ -576,7 +577,7 @@ void PairMEAMC::read_files(char *globalfile, char *userfile) if (strcmp(params[0],keywords[which]) == 0) break; if (which == nkeywords) ERRFMT(error->all, "Keyword %s in MEAM parameter file not recognized", params[0]); - + nindex = nparams - 2; for (int i = 0; i < nindex; i++) index[i] = atoi(params[i+1]) - 1; @@ -595,16 +596,15 @@ void PairMEAMC::read_files(char *globalfile, char *userfile) int errorflag = 0; meam_inst->meam_setup_param(which,value,nindex,index,&errorflag); if (errorflag) { - char str[128]; - snprintf(str,80,"Error in MEAM parameter file: keyword %s",params[0]); - switch(errorflag) { - case 1: strcat(str, " is out of range (please report a bug)"); break; - case 2: strcat(str, " expected more indices"); break; - case 3: strcat(str, " has out of range element index"); break; - } + const char *descr[] = { "has an unknown error", + "is out of range (please report a bug)", + "expected more indices", + "has out of range element index"}; + char str[256]; + if ((errorflag < 0) || (errorflag > 3)) errorflag = 0; + snprintf(str,256,"Error in MEAM parameter file: keyword %s %s",params[0],descr[errorflag]); error->all(FLERR,str); } - } delete [] params; } diff --git a/src/USER-MESODPD/atom_vec_edpd.cpp b/src/USER-MESODPD/atom_vec_edpd.cpp index edc7a3433190bf5b35e2baef669becad07684aa6..d08a626fad6e6ccf3e62e3661b9e0bc668e0669b 100644 --- a/src/USER-MESODPD/atom_vec_edpd.cpp +++ b/src/USER-MESODPD/atom_vec_edpd.cpp @@ -10,6 +10,7 @@ See the README file in the top-level LAMMPS directory. ------------------------------------------------------------------------- */ + #include "atom_vec_edpd.h" #include #include "atom.h" @@ -28,817 +29,89 @@ using namespace LAMMPS_NS; AtomVecEDPD::AtomVecEDPD(LAMMPS *lmp) : AtomVec(lmp) { - if(strcmp(update->unit_style,"lj") != 0) - error->all(FLERR,"Atom style edpd requires lj units"); - molecular = 0; mass_type = 1; forceclearflag = 1; - comm_x_only = comm_f_only = 0; - comm->ghost_velocity = 1; - - size_forward = 3 + 5; // edpd_temp + vest[4] - size_reverse = 3 + 1; // edpd_flux - size_border = 6 + 6; // edpd_temp + edpd_cv + vest[4] - size_velocity = 3; - size_data_atom = 5 + 2; // we read id + type + edpd_temp + edpd_cv + xyz[3] - size_data_vel = 4; - xcol_data = 5; - atom->edpd_flag = 1; atom->vest_flag = 1; -} - -/* ---------------------------------------------------------------------- - grow atom arrays - n = 0 grows arrays by a chunk - n > 0 allocates arrays to size n -------------------------------------------------------------------------- */ - -void AtomVecEDPD::grow(int n) -{ - if (n == 0) grow_nmax(); - else nmax = n; - atom->nmax = nmax; - if (nmax < 0 || nmax > MAXSMALLINT) - error->one(FLERR,"Per-processor system is too big"); - - tag = memory->grow(atom->tag,nmax,"atom:tag"); - type = memory->grow(atom->type,nmax,"atom:type"); - mask = memory->grow(atom->mask,nmax,"atom:mask"); - image = memory->grow(atom->image,nmax,"atom:image"); - x = memory->grow(atom->x,nmax,3,"atom:x"); - v = memory->grow(atom->v,nmax,3,"atom:v"); - f = memory->grow(atom->f,nmax*comm->nthreads,3,"atom:f"); - edpd_cv= memory->grow(atom->edpd_cv, nmax, "atom:edpd_cv"); - edpd_temp = memory->grow(atom->edpd_temp, nmax, "atom:edpd_temp"); - edpd_flux = memory->grow(atom->edpd_flux, nmax*comm->nthreads,"atom:edpd_flux"); - vest = memory->grow(atom->vest, nmax, 4, "atom:vest"); - - if (atom->nextra_grow) - for (int iextra = 0; iextra < atom->nextra_grow; iextra++) - modify->fix[atom->extra_grow[iextra]]->grow_arrays(nmax); -} - -/* ---------------------------------------------------------------------- - reset local array ptrs -------------------------------------------------------------------------- */ - -void AtomVecEDPD::grow_reset() -{ - tag = atom->tag; type = atom->type; - mask = atom->mask; image = atom->image; - x = atom->x; v = atom->v; f = atom->f; - edpd_cv = atom->cv; edpd_temp = atom->edpd_temp; edpd_flux = atom->edpd_flux; - vest = atom->vest; -} - -/* ---------------------------------------------------------------------- - copy atom I info to atom J -------------------------------------------------------------------------- */ - -void AtomVecEDPD::copy(int i, int j, int delflag) -{ - tag[j] = tag[i]; - type[j] = type[i]; - mask[j] = mask[i]; - image[j] = image[i]; - x[j][0] = x[i][0]; - x[j][1] = x[i][1]; - x[j][2] = x[i][2]; - v[j][0] = v[i][0]; - v[j][1] = v[i][1]; - v[j][2] = v[i][2]; - - edpd_temp[j] = edpd_temp[i]; - edpd_flux[j] = edpd_flux[i]; - edpd_cv[j] = edpd_cv[i]; - vest[j][0] = vest[i][0]; - vest[j][1] = vest[i][1]; - vest[j][2] = vest[i][2]; - vest[j][3] = vest[i][3]; - - if (atom->nextra_grow) - for (int iextra = 0; iextra < atom->nextra_grow; iextra++) - modify->fix[atom->extra_grow[iextra]]->copy_arrays(i,j,delflag); -} - - -void AtomVecEDPD::force_clear(int n, size_t nbytes) -{ - memset(&edpd_flux[n],0,nbytes); -} + // strings with peratom variables to include in each AtomVec method + // strings cannot contain fields in corresponding AtomVec default strings + // order of fields in a string does not matter + // except: fields_data_atom & fields_data_vel must match data file -/* ---------------------------------------------------------------------- */ - -int AtomVecEDPD::pack_comm(int n, int *list, double *buf, - int pbc_flag, int *pbc) -{ - int i,j,m; - double dx,dy,dz; + fields_grow = (char *) "edpd_cv edpd_temp edpd_flux vest vest_temp"; + fields_copy = (char *) "edpd_cv edpd_temp edpd_flux vest vest_temp"; + fields_comm = (char *) "edpd_temp vest vest_temp"; + fields_comm_vel = (char *) "edpd_temp vest vest_temp"; + fields_reverse = (char *) "edpd_flux"; + fields_border = (char *) "edpd_cv edpd_temp vest vest_temp"; + fields_border_vel = (char *) "edpd_cv edpd_temp vest vest_temp"; + fields_exchange = (char *) "edpd_cv edpd_temp vest vest_temp"; + fields_restart = (char * ) "edpd_cv edpd_temp vest vest_temp"; + fields_create = (char *) "edpd_cv edpd_temp edpd_flux vest vest_temp"; + fields_data_atom = (char *) "id type edpd_temp edpd_cv x"; + fields_data_vel = (char *) "id v"; - m = 0; - if (pbc_flag == 0) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = x[j][0]; - buf[m++] = x[j][1]; - buf[m++] = x[j][2]; - buf[m++] = edpd_temp[j]; - buf[m++] = vest[j][0]; - buf[m++] = vest[j][1]; - buf[m++] = vest[j][2]; - buf[m++] = vest[j][3]; - } - } else { - if (domain->triclinic == 0) { - dx = pbc[0]*domain->xprd; - dy = pbc[1]*domain->yprd; - dz = pbc[2]*domain->zprd; - } else { - dx = pbc[0]*domain->xprd + pbc[5]*domain->xy + pbc[4]*domain->xz; - dy = pbc[1]*domain->yprd + pbc[3]*domain->yz; - dz = pbc[2]*domain->zprd; - } - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = x[j][0] + dx; - buf[m++] = x[j][1] + dy; - buf[m++] = x[j][2] + dz; - buf[m++] = edpd_temp[j]; - buf[m++] = vest[j][0]; - buf[m++] = vest[j][1]; - buf[m++] = vest[j][2]; - buf[m++] = vest[j][3]; - } - } - return m; + setup_fields(); } /* ---------------------------------------------------------------------- */ -int AtomVecEDPD::pack_comm_vel(int n, int *list, double *buf, - int pbc_flag, int *pbc) +void AtomVecEDPD::init() { - int i,j,m; - double dx,dy,dz,dvx,dvy,dvz; - - m = 0; - if (pbc_flag == 0) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = x[j][0]; - buf[m++] = x[j][1]; - buf[m++] = x[j][2]; - buf[m++] = v[j][0]; - buf[m++] = v[j][1]; - buf[m++] = v[j][2]; - buf[m++] = edpd_temp[j]; - buf[m++] = vest[j][0]; - buf[m++] = vest[j][1]; - buf[m++] = vest[j][2]; - buf[m++] = vest[j][3]; - } - } else { - if (domain->triclinic == 0) { - dx = pbc[0]*domain->xprd; - dy = pbc[1]*domain->yprd; - dz = pbc[2]*domain->zprd; - } else { - dx = pbc[0]*domain->xprd + pbc[5]*domain->xy + pbc[4]*domain->xz; - dy = pbc[1]*domain->yprd + pbc[3]*domain->yz; - dz = pbc[2]*domain->zprd; - } - if (!deform_vremap) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = x[j][0] + dx; - buf[m++] = x[j][1] + dy; - buf[m++] = x[j][2] + dz; - buf[m++] = v[j][0]; - buf[m++] = v[j][1]; - buf[m++] = v[j][2]; - buf[m++] = edpd_temp[j]; - buf[m++] = vest[j][0]; - buf[m++] = vest[j][1]; - buf[m++] = vest[j][2]; - buf[m++] = vest[j][3]; - } - } else { - dvx = pbc[0]*h_rate[0] + pbc[5]*h_rate[5] + pbc[4]*h_rate[4]; - dvy = pbc[1]*h_rate[1] + pbc[3]*h_rate[3]; - dvz = pbc[2]*h_rate[2]; - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = x[j][0] + dx; - buf[m++] = x[j][1] + dy; - buf[m++] = x[j][2] + dz; - if (mask[i] & deform_groupbit) { - buf[m++] = v[j][0] + dvx; - buf[m++] = v[j][1] + dvy; - buf[m++] = v[j][2] + dvz; - } else { - buf[m++] = v[j][0]; - buf[m++] = v[j][1]; - buf[m++] = v[j][2]; - } - buf[m++] = edpd_temp[j]; - buf[m++] = vest[j][0]; - buf[m++] = vest[j][1]; - buf[m++] = vest[j][2]; - buf[m++] = vest[j][3]; - } - } - } - return m; -} + AtomVec::init(); -/* ---------------------------------------------------------------------- */ - -void AtomVecEDPD::unpack_comm(int n, int first, double *buf) -{ - int i,m,last; - - m = 0; - last = first + n; - for (i = first; i < last; i++) { - x[i][0] = buf[m++]; - x[i][1] = buf[m++]; - x[i][2] = buf[m++]; - edpd_temp[i] = buf[m++]; - vest[i][0] = buf[m++]; - vest[i][1] = buf[m++]; - vest[i][2] = buf[m++]; - vest[i][3] = buf[m++]; - } -} - -/* ---------------------------------------------------------------------- */ - -void AtomVecEDPD::unpack_comm_vel(int n, int first, double *buf) -{ - int i,m,last; - - m = 0; - last = first + n; - for (i = first; i < last; i++) { - x[i][0] = buf[m++]; - x[i][1] = buf[m++]; - x[i][2] = buf[m++]; - v[i][0] = buf[m++]; - v[i][1] = buf[m++]; - v[i][2] = buf[m++]; - edpd_temp[i] = buf[m++]; - vest[i][0] = buf[m++]; - vest[i][1] = buf[m++]; - vest[i][2] = buf[m++]; - vest[i][3] = buf[m++]; - } -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecEDPD::pack_reverse(int n, int first, double *buf) -{ - int i,m,last; - - m = 0; - last = first + n; - for (i = first; i < last; i++) { - buf[m++] = f[i][0]; - buf[m++] = f[i][1]; - buf[m++] = f[i][2]; - buf[m++] = edpd_flux[i]; - } - return m; -} - -/* ---------------------------------------------------------------------- */ - -void AtomVecEDPD::unpack_reverse(int n, int *list, double *buf) -{ - int i,j,m; - - m = 0; - for (i = 0; i < n; i++) { - j = list[i]; - f[j][0] += buf[m++]; - f[j][1] += buf[m++]; - f[j][2] += buf[m++]; - edpd_flux[j] += buf[m++]; - } -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecEDPD::pack_border(int n, int *list, double *buf, - int pbc_flag, int *pbc) -{ - int i,j,m; - double dx,dy,dz; - - m = 0; - if (pbc_flag == 0) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = x[j][0]; - buf[m++] = x[j][1]; - buf[m++] = x[j][2]; - buf[m++] = ubuf(tag[j]).d; - buf[m++] = ubuf(type[j]).d; - buf[m++] = ubuf(mask[j]).d; - buf[m++] = edpd_temp[j]; - buf[m++] = edpd_cv[j]; - buf[m++] = vest[j][0]; - buf[m++] = vest[j][1]; - buf[m++] = vest[j][2]; - buf[m++] = vest[j][3]; - } - } else { - if (domain->triclinic == 0) { - dx = pbc[0]*domain->xprd; - dy = pbc[1]*domain->yprd; - dz = pbc[2]*domain->zprd; - } else { - dx = pbc[0]; - dy = pbc[1]; - dz = pbc[2]; - } - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = x[j][0] + dx; - buf[m++] = x[j][1] + dy; - buf[m++] = x[j][2] + dz; - buf[m++] = ubuf(tag[j]).d; - buf[m++] = ubuf(type[j]).d; - buf[m++] = ubuf(mask[j]).d; - buf[m++] = edpd_temp[j]; - buf[m++] = edpd_cv[j]; - buf[m++] = vest[j][0]; - buf[m++] = vest[j][1]; - buf[m++] = vest[j][2]; - buf[m++] = vest[j][3]; - } - } - - if (atom->nextra_border) - for (int iextra = 0; iextra < atom->nextra_border; iextra++) - m += modify->fix[atom->extra_border[iextra]]->pack_border(n,list,&buf[m]); - - return m; -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecEDPD::pack_border_vel(int n, int *list, double *buf, - int pbc_flag, int *pbc) -{ - int i,j,m; - double dx,dy,dz,dvx,dvy,dvz; - - m = 0; - if (pbc_flag == 0) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = x[j][0]; - buf[m++] = x[j][1]; - buf[m++] = x[j][2]; - buf[m++] = ubuf(tag[j]).d; - buf[m++] = ubuf(type[j]).d; - buf[m++] = ubuf(mask[j]).d; - buf[m++] = edpd_temp[j]; - buf[m++] = edpd_cv[j]; - buf[m++] = v[j][0]; - buf[m++] = v[j][1]; - buf[m++] = v[j][2]; - buf[m++] = vest[j][0]; - buf[m++] = vest[j][1]; - buf[m++] = vest[j][2]; - buf[m++] = vest[j][3]; - } - } else { - if (domain->triclinic == 0) { - dx = pbc[0]*domain->xprd; - dy = pbc[1]*domain->yprd; - dz = pbc[2]*domain->zprd; - } else { - dx = pbc[0]; - dy = pbc[1]; - dz = pbc[2]; - } - if (!deform_vremap) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = x[j][0] + dx; - buf[m++] = x[j][1] + dy; - buf[m++] = x[j][2] + dz; - buf[m++] = ubuf(tag[j]).d; - buf[m++] = ubuf(type[j]).d; - buf[m++] = ubuf(mask[j]).d; - buf[m++] = edpd_temp[j]; - buf[m++] = edpd_cv[j]; - buf[m++] = v[j][0]; - buf[m++] = v[j][1]; - buf[m++] = v[j][2]; - buf[m++] = vest[j][0]; - buf[m++] = vest[j][1]; - buf[m++] = vest[j][2]; - buf[m++] = vest[j][3]; - } - } else { - dvx = pbc[0]*h_rate[0] + pbc[5]*h_rate[5] + pbc[4]*h_rate[4]; - dvy = pbc[1]*h_rate[1] + pbc[3]*h_rate[3]; - dvz = pbc[2]*h_rate[2]; - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = x[j][0] + dx; - buf[m++] = x[j][1] + dy; - buf[m++] = x[j][2] + dz; - buf[m++] = ubuf(tag[j]).d; - buf[m++] = ubuf(type[j]).d; - buf[m++] = ubuf(mask[j]).d; - buf[m++] = edpd_temp[j]; - buf[m++] = edpd_cv[j]; - if (mask[i] & deform_groupbit) { - buf[m++] = v[j][0] + dvx; - buf[m++] = v[j][1] + dvy; - buf[m++] = v[j][2] + dvz; - buf[m++] = vest[j][0] + dvx; - buf[m++] = vest[j][1] + dvy; - buf[m++] = vest[j][2] + dvz; - buf[m++] = vest[j][3]; - } else { - buf[m++] = v[j][0]; - buf[m++] = v[j][1]; - buf[m++] = v[j][2]; - buf[m++] = vest[j][0]; - buf[m++] = vest[j][1]; - buf[m++] = vest[j][2]; - buf[m++] = vest[j][3]; - } - } - } - } - - if (atom->nextra_border) - for (int iextra = 0; iextra < atom->nextra_border; iextra++) - m += modify->fix[atom->extra_border[iextra]]->pack_border(n,list,&buf[m]); - - return m; -} - -/* ---------------------------------------------------------------------- */ - -void AtomVecEDPD::unpack_border(int n, int first, double *buf) -{ - int i,m,last; - - m = 0; - last = first + n; - for (i = first; i < last; i++) { - if (i == nmax) grow(0); - x[i][0] = buf[m++]; - x[i][1] = buf[m++]; - x[i][2] = buf[m++]; - tag[i] = (tagint) ubuf(buf[m++]).i; - type[i] = (int) ubuf(buf[m++]).i; - mask[i] = (int) ubuf(buf[m++]).i; - edpd_temp[i] = buf[m++]; - edpd_cv[i] = buf[m++]; - vest[i][0] = buf[m++]; - vest[i][1] = buf[m++]; - vest[i][2] = buf[m++]; - vest[i][3] = buf[m++]; - } - - if (atom->nextra_border) - for (int iextra = 0; iextra < atom->nextra_border; iextra++) - m += modify->fix[atom->extra_border[iextra]]-> - unpack_border(n,first,&buf[m]); -} - -/* ---------------------------------------------------------------------- */ - -void AtomVecEDPD::unpack_border_vel(int n, int first, double *buf) -{ - int i,m,last; - - m = 0; - last = first + n; - for (i = first; i < last; i++) { - if (i == nmax) grow(0); - x[i][0] = buf[m++]; - x[i][1] = buf[m++]; - x[i][2] = buf[m++]; - tag[i] = (tagint) ubuf(buf[m++]).i; - type[i] = (int) ubuf(buf[m++]).i; - mask[i] = (int) ubuf(buf[m++]).i; - edpd_temp[i] = buf[m++]; - edpd_cv[i] = buf[m++]; - v[i][0] = buf[m++]; - v[i][1] = buf[m++]; - v[i][2] = buf[m++]; - vest[i][0] = buf[m++]; - vest[i][1] = buf[m++]; - vest[i][2] = buf[m++]; - vest[i][3] = buf[m++]; - } - - if (atom->nextra_border) - for (int iextra = 0; iextra < atom->nextra_border; iextra++) - m += modify->fix[atom->extra_border[iextra]]-> - unpack_border(n,first,&buf[m]); -} - -/* ---------------------------------------------------------------------- - pack data for atom I for sending to another proc - xyz must be 1st 3 values, so comm::exchange() can test on them -------------------------------------------------------------------------- */ - -int AtomVecEDPD::pack_exchange(int i, double *buf) -{ - int m = 1; - buf[m++] = x[i][0]; - buf[m++] = x[i][1]; - buf[m++] = x[i][2]; - buf[m++] = v[i][0]; - buf[m++] = v[i][1]; - buf[m++] = v[i][2]; - buf[m++] = ubuf(tag[i]).d; - buf[m++] = ubuf(type[i]).d; - buf[m++] = ubuf(mask[i]).d; - buf[m++] = ubuf(image[i]).d; - buf[m++] = edpd_temp[i]; - buf[m++] = edpd_cv[i]; - buf[m++] = vest[i][0]; - buf[m++] = vest[i][1]; - buf[m++] = vest[i][2]; - buf[m++] = vest[i][3]; - - if (atom->nextra_grow) - for (int iextra = 0; iextra < atom->nextra_grow; iextra++) - m += modify->fix[atom->extra_grow[iextra]]->pack_exchange(i,&buf[m]); - - buf[0] = m; - return m; -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecEDPD::unpack_exchange(double *buf) -{ - int nlocal = atom->nlocal; - if (nlocal == nmax) grow(0); - - int m = 1; - x[nlocal][0] = buf[m++]; - x[nlocal][1] = buf[m++]; - x[nlocal][2] = buf[m++]; - v[nlocal][0] = buf[m++]; - v[nlocal][1] = buf[m++]; - v[nlocal][2] = buf[m++]; - tag[nlocal] = (tagint) ubuf(buf[m++]).i; - type[nlocal] = (int) ubuf(buf[m++]).i; - mask[nlocal] = (int) ubuf(buf[m++]).i; - image[nlocal] = (imageint) ubuf(buf[m++]).i; - edpd_temp[nlocal] = buf[m++]; - edpd_cv[nlocal] = buf[m++]; - vest[nlocal][0] = buf[m++]; - vest[nlocal][1] = buf[m++]; - vest[nlocal][2] = buf[m++]; - vest[nlocal][3] = buf[m++]; - - if (atom->nextra_grow) - for (int iextra = 0; iextra < atom->nextra_grow; iextra++) - m += modify->fix[atom->extra_grow[iextra]]-> - unpack_exchange(nlocal,&buf[m]); - - atom->nlocal++; - return m; -} - -/* ---------------------------------------------------------------------- - size of restart data for all atoms owned by this proc - include extra data stored by fixes -------------------------------------------------------------------------- */ - -int AtomVecEDPD::size_restart() -{ - int i; - - int nlocal = atom->nlocal; - int n = (11 + 6) * nlocal; // 11 + edpd_temp + edpd_cv + vest[4] - - if (atom->nextra_restart) - for (int iextra = 0; iextra < atom->nextra_restart; iextra++) - for (i = 0; i < nlocal; i++) - n += modify->fix[atom->extra_restart[iextra]]->size_restart(i); - - return n; -} - -/* ---------------------------------------------------------------------- - pack atom I's data for restart file including extra quantities - xyz must be 1st 3 values, so that read_restart can test on them - molecular types may be negative, but write as positive -------------------------------------------------------------------------- */ - -int AtomVecEDPD::pack_restart(int i, double *buf) -{ - int m = 1; - buf[m++] = x[i][0]; - buf[m++] = x[i][1]; - buf[m++] = x[i][2]; - buf[m++] = ubuf(tag[i]).d; - buf[m++] = ubuf(type[i]).d; - buf[m++] = ubuf(mask[i]).d; - buf[m++] = ubuf(image[i]).d; - buf[m++] = v[i][0]; - buf[m++] = v[i][1]; - buf[m++] = v[i][2]; - buf[m++] = edpd_temp[i]; - buf[m++] = edpd_cv[i]; - buf[m++] = vest[i][0]; - buf[m++] = vest[i][1]; - buf[m++] = vest[i][2]; - buf[m++] = vest[i][3]; - - if (atom->nextra_restart) - for (int iextra = 0; iextra < atom->nextra_restart; iextra++) - m += modify->fix[atom->extra_restart[iextra]]->pack_restart(i,&buf[m]); - - buf[0] = m; - return m; -} - -/* ---------------------------------------------------------------------- - unpack data for one atom from restart file including extra quantities -------------------------------------------------------------------------- */ - -int AtomVecEDPD::unpack_restart(double *buf) -{ - int nlocal = atom->nlocal; - if (nlocal == nmax) { - grow(0); - if (atom->nextra_store) - memory->grow(atom->extra,nmax,atom->nextra_store,"atom:extra"); - } - - int m = 1; - x[nlocal][0] = buf[m++]; - x[nlocal][1] = buf[m++]; - x[nlocal][2] = buf[m++]; - tag[nlocal] = (tagint) ubuf(buf[m++]).i; - type[nlocal] = (int) ubuf(buf[m++]).i; - mask[nlocal] = (int) ubuf(buf[m++]).i; - image[nlocal] = (imageint) ubuf(buf[m++]).i; - v[nlocal][0] = buf[m++]; - v[nlocal][1] = buf[m++]; - v[nlocal][2] = buf[m++]; - - edpd_temp[nlocal] = buf[m++]; - edpd_cv[nlocal]= buf[m++]; - vest[nlocal][0] = buf[m++]; - vest[nlocal][1] = buf[m++]; - vest[nlocal][2] = buf[m++]; - vest[nlocal][3] = buf[m++]; - - double **extra = atom->extra; - if (atom->nextra_store) { - int size = static_cast (buf[0]) - m; - for (int i = 0; i < size; i++) extra[nlocal][i] = buf[m++]; - } - - atom->nlocal++; - return m; -} - -/* ---------------------------------------------------------------------- - create one atom of itype at coord - set other values to defaults -------------------------------------------------------------------------- */ - -void AtomVecEDPD::create_atom(int itype, double *coord) -{ - int nlocal = atom->nlocal; - if (nlocal == nmax) grow(0); - - tag[nlocal] = 0; - type[nlocal] = itype; - x[nlocal][0] = coord[0]; - x[nlocal][1] = coord[1]; - x[nlocal][2] = coord[2]; - mask[nlocal] = 1; - image[nlocal] = ((imageint) IMGMAX << IMG2BITS) | - ((imageint) IMGMAX << IMGBITS) | IMGMAX; - v[nlocal][0] = 0.0; - v[nlocal][1] = 0.0; - v[nlocal][2] = 0.0; - - edpd_temp[nlocal] = 1.0; - edpd_flux[nlocal] = 0.0; - edpd_cv[nlocal]= 1.0E5; - vest[nlocal][0] = 0.0; - vest[nlocal][1] = 0.0; - vest[nlocal][2] = 0.0; - vest[nlocal][3] = edpd_temp[nlocal]; - - atom->nlocal++; + if (strcmp(update->unit_style,"lj") != 0) + error->all(FLERR,"Atom style edpd requires lj units"); } /* ---------------------------------------------------------------------- - unpack one line from Atoms section of data file - initialize other atom quantities + set local copies of all grow ptrs used by this class, except defaults + needed in replicate when 2 atom classes exist and it calls pack_restart() ------------------------------------------------------------------------- */ -void AtomVecEDPD::data_atom(double *coord, imageint imagetmp, char **values) +void AtomVecEDPD::grow_pointers() { - int nlocal = atom->nlocal; - if (nlocal == nmax) grow(0); - - tag[nlocal] = utils::tnumeric(FLERR,values[0],true,lmp); - type[nlocal] = utils::inumeric(FLERR,values[1],true,lmp); - if (type[nlocal] <= 0 || type[nlocal] > atom->ntypes) - error->one(FLERR,"Invalid atom type in Atoms section of data file"); - - edpd_temp[nlocal] = utils::numeric(FLERR,values[2],true,lmp); - edpd_cv[nlocal] = utils::numeric(FLERR,values[3],true,lmp); - - x[nlocal][0] = coord[0]; - x[nlocal][1] = coord[1]; - x[nlocal][2] = coord[2]; - - image[nlocal] = imagetmp; - - mask[nlocal] = 1; - v[nlocal][0] = 0.0; - v[nlocal][1] = 0.0; - v[nlocal][2] = 0.0; - - vest[nlocal][0] = 0.0; - vest[nlocal][1] = 0.0; - vest[nlocal][2] = 0.0; - vest[nlocal][3] = edpd_temp[nlocal]; - edpd_flux[nlocal] = 0.0; - - atom->nlocal++; + edpd_cv = atom->edpd_cv; + edpd_temp = atom->edpd_temp; + edpd_flux = atom->edpd_flux; + vest = atom->vest; + vest_temp = atom->vest_temp; } /* ---------------------------------------------------------------------- - pack atom info for data file including 3 image flags + clear extra forces starting at atom N + nbytes = # of bytes to clear for a per-atom vector ------------------------------------------------------------------------- */ -void AtomVecEDPD::pack_data(double **buf) +void AtomVecEDPD::force_clear(int n, size_t nbytes) { - int nlocal = atom->nlocal; - for (int i = 0; i < nlocal; i++) { - buf[i][0] = ubuf(tag[i]).d; - buf[i][1] = ubuf(type[i]).d; - buf[i][2] = edpd_temp[i]; - buf[i][3] = edpd_cv[i]; - buf[i][4] = x[i][0]; - buf[i][5] = x[i][1]; - buf[i][6] = x[i][2]; - buf[i][7] = ubuf((image[i] & IMGMASK) - IMGMAX).d; - buf[i][8] = ubuf((image[i] >> IMGBITS & IMGMASK) - IMGMAX).d; - buf[i][9] = ubuf((image[i] >> IMG2BITS) - IMGMAX).d; - } + memset(&edpd_flux[n],0,nbytes); } /* ---------------------------------------------------------------------- - write atom info to data file including 3 image flags + initialize non-zero atom quantities ------------------------------------------------------------------------- */ -void AtomVecEDPD::write_data(FILE *fp, int n, double **buf) +void AtomVecEDPD::create_atom_post(int ilocal) { - for (int i = 0; i < n; i++) - fprintf(fp,TAGINT_FORMAT " %d %-1.16e %-1.16e %-1.16e %-1.16e %-1.16e %d %d %d\n", - (tagint) ubuf(buf[i][0]).i,(int) ubuf(buf[i][1]).i, - buf[i][2],buf[i][3],buf[i][4],buf[i][5],buf[i][6], - (int) ubuf(buf[i][7]).i,(int) ubuf(buf[i][8]).i,(int) ubuf(buf[i][9]).i); + edpd_temp[ilocal] = 1.0; + edpd_cv[ilocal]= 1.0e5; + vest_temp[ilocal] = edpd_temp[ilocal]; } /* ---------------------------------------------------------------------- - return # of bytes of allocated memory + modify what AtomVec::data_atom() just unpacked + or initialize other atom quantities ------------------------------------------------------------------------- */ -bigint AtomVecEDPD::memory_usage() +void AtomVecEDPD::data_atom_post(int ilocal) { - bigint bytes = 0; - - if (atom->memcheck("tag")) bytes += memory->usage(tag,nmax); - if (atom->memcheck("type")) bytes += memory->usage(type,nmax); - if (atom->memcheck("mask")) bytes += memory->usage(mask,nmax); - if (atom->memcheck("image")) bytes += memory->usage(image,nmax); - if (atom->memcheck("x")) bytes += memory->usage(x,nmax,3); - if (atom->memcheck("v")) bytes += memory->usage(v,nmax,3); - if (atom->memcheck("f")) bytes += memory->usage(f,nmax*comm->nthreads,3); - if (atom->memcheck("edpd_temp")) bytes += memory->usage(edpd_temp,nmax); - if (atom->memcheck("edpd_flux")) bytes += memory->usage(edpd_flux,nmax*comm->nthreads); - if (atom->memcheck("edpd_cv")) bytes += memory->usage(edpd_cv,nmax); - if (atom->memcheck("vest")) bytes += memory->usage(vest,nmax,4); - - return bytes; + edpd_flux[ilocal] = 0.0; + vest[ilocal][0] = 0.0; + vest[ilocal][1] = 0.0; + vest[ilocal][2] = 0.0; + vest_temp[ilocal] = edpd_temp[ilocal]; } diff --git a/src/USER-MESODPD/atom_vec_edpd.h b/src/USER-MESODPD/atom_vec_edpd.h index 36a4cae97b172ee99cf9c81ae6d30081e190bc92..a69c44a035e8b4cd86b3ac82e16701acf04e5838 100644 --- a/src/USER-MESODPD/atom_vec_edpd.h +++ b/src/USER-MESODPD/atom_vec_edpd.h @@ -27,39 +27,17 @@ namespace LAMMPS_NS { class AtomVecEDPD : public AtomVec { public: AtomVecEDPD(class LAMMPS *); - virtual ~AtomVecEDPD() {} - void grow(int); - void grow_reset(); - void copy(int, int, int); + void init(); + + void grow_pointers(); void force_clear(int, size_t); - virtual int pack_comm(int, int *, double *, int, int *); - virtual int pack_comm_vel(int, int *, double *, int, int *); - virtual void unpack_comm(int, int, double *); - virtual void unpack_comm_vel(int, int, double *); - int pack_reverse(int, int, double *); - void unpack_reverse(int, int *, double *); - virtual int pack_border(int, int *, double *, int, int *); - virtual int pack_border_vel(int, int *, double *, int, int *); - virtual void unpack_border(int, int, double *); - virtual void unpack_border_vel(int, int, double *); - virtual int pack_exchange(int, double *); - virtual int unpack_exchange(double *); - int size_restart(); - int pack_restart(int, double *); - int unpack_restart(double *); - void create_atom(int, double *); - void data_atom(double *, imageint, char **); - void pack_data(double **); - void write_data(FILE *, int, double **); - bigint memory_usage(); + void create_atom_post(int); + void data_atom_post(int); - protected: - tagint *tag; - int *type,*mask; - imageint *image; - double **x,**v,**f; - double **vest; // store intermediate velocity for using mvv integrator - double *edpd_temp,*edpd_flux,*edpd_cv; // temperature, heat flux, and heat capacity + private: + double *edpd_cv,*edpd_temp,*edpd_flux; + double **vest; + double *vest_temp; }; } diff --git a/src/USER-MESODPD/atom_vec_mdpd.cpp b/src/USER-MESODPD/atom_vec_mdpd.cpp index 4c9db36645028e4ab224b359e636430f396c2539..0acaaf6253a197155d34da50d7e1018280b8e13b 100644 --- a/src/USER-MESODPD/atom_vec_mdpd.cpp +++ b/src/USER-MESODPD/atom_vec_mdpd.cpp @@ -14,14 +14,8 @@ #include "atom_vec_mdpd.h" #include #include "atom.h" -#include "comm.h" -#include "domain.h" -#include "modify.h" -#include "fix.h" #include "update.h" -#include "memory.h" #include "error.h" -#include "utils.h" using namespace LAMMPS_NS; @@ -29,865 +23,77 @@ using namespace LAMMPS_NS; AtomVecMDPD::AtomVecMDPD(LAMMPS *lmp) : AtomVec(lmp) { - if(strcmp(update->unit_style,"lj") != 0) - error->all(FLERR,"Atom style mdpd requires lj units"); - molecular = 0; mass_type = 1; forceclearflag = 1; - comm_x_only = comm_f_only = 0; - comm->ghost_velocity = 1; - - size_forward = 3 + 4; // 3 + rho + vest[3], that means we may only communicate 4 in hybrid - size_reverse = 3 + 1; // 3 + drho - size_border = 6 + 4; // 6 + rho + vest[3] - size_velocity = 3; - size_data_atom = 6; - size_data_vel = 4; - xcol_data = 4; - atom->rho_flag = 1; atom->vest_flag = 1; -} - -/* ---------------------------------------------------------------------- - grow atom arrays - n = 0 grows arrays by a chunk - n > 0 allocates arrays to size n - ------------------------------------------------------------------------- */ - -void AtomVecMDPD::grow(int n) -{ - if (n == 0) grow_nmax(); - else nmax = n; - atom->nmax = nmax; - if (nmax < 0 || nmax > MAXSMALLINT) - error->one(FLERR,"Per-processor system is too big"); - - tag = memory->grow(atom->tag, nmax, "atom:tag"); - type = memory->grow(atom->type, nmax, "atom:type"); - mask = memory->grow(atom->mask, nmax, "atom:mask"); - image = memory->grow(atom->image, nmax, "atom:image"); - x = memory->grow(atom->x, nmax, 3, "atom:x"); - v = memory->grow(atom->v, nmax, 3, "atom:v"); - f = memory->grow(atom->f, nmax*comm->nthreads, 3, "atom:f"); - - rho = memory->grow(atom->rho, nmax, "atom:rho"); - drho = memory->grow(atom->drho, nmax*comm->nthreads, "atom:drho"); - vest = memory->grow(atom->vest, nmax, 3, "atom:vest"); - - if (atom->nextra_grow) - for (int iextra = 0; iextra < atom->nextra_grow; iextra++) - modify->fix[atom->extra_grow[iextra]]->grow_arrays(nmax); -} - -/* ---------------------------------------------------------------------- - reset local array ptrs - ------------------------------------------------------------------------- */ - -void AtomVecMDPD::grow_reset() { - tag = atom->tag; - type = atom->type; - mask = atom->mask; - image = atom->image; - x = atom->x; - v = atom->v; - f = atom->f; - rho = atom->rho; - drho = atom->drho; - vest = atom->vest; -} - -/* ---------------------------------------------------------------------- */ - -void AtomVecMDPD::copy(int i, int j, int delflag) { - //printf("in AtomVecMDPD::copy\n"); - tag[j] = tag[i]; - type[j] = type[i]; - mask[j] = mask[i]; - image[j] = image[i]; - x[j][0] = x[i][0]; - x[j][1] = x[i][1]; - x[j][2] = x[i][2]; - v[j][0] = v[i][0]; - v[j][1] = v[i][1]; - v[j][2] = v[i][2]; - - rho[j] = rho[i]; - drho[j] = drho[i]; - vest[j][0] = vest[i][0]; - vest[j][1] = vest[i][1]; - vest[j][2] = vest[i][2]; - - if (atom->nextra_grow) - for (int iextra = 0; iextra < atom->nextra_grow; iextra++) - modify->fix[atom->extra_grow[iextra]]->copy_arrays(i, j,delflag); -} - -/* ---------------------------------------------------------------------- */ - -void AtomVecMDPD::force_clear(int n, size_t nbytes) -{ - memset(&drho[n],0,nbytes); -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecMDPD::pack_comm_hybrid(int n, int *list, double *buf) { - //printf("in AtomVecMDPD::pack_comm_hybrid\n"); - int i, j, m; - - m = 0; - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = rho[j]; - buf[m++] = vest[j][0]; - buf[m++] = vest[j][1]; - buf[m++] = vest[j][2]; - } - return m; -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecMDPD::unpack_comm_hybrid(int n, int first, double *buf) { - //printf("in AtomVecMDPD::unpack_comm_hybrid\n"); - int i, m, last; - - m = 0; - last = first + n; - for (i = first; i < last; i++) { - rho[i] = buf[m++]; - vest[i][0] = buf[m++]; - vest[i][1] = buf[m++]; - vest[i][2] = buf[m++]; - } - return m; -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecMDPD::pack_border_hybrid(int n, int *list, double *buf) { - //printf("in AtomVecMDPD::pack_border_hybrid\n"); - int i, j, m; - - m = 0; - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = rho[j]; - buf[m++] = vest[j][0]; - buf[m++] = vest[j][1]; - buf[m++] = vest[j][2]; - } - return m; -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecMDPD::unpack_border_hybrid(int n, int first, double *buf) { - //printf("in AtomVecMDPD::unpack_border_hybrid\n"); - int i, m, last; - - m = 0; - last = first + n; - for (i = first; i < last; i++) { - rho[i] = buf[m++]; - vest[i][0] = buf[m++]; - vest[i][1] = buf[m++]; - vest[i][2] = buf[m++]; - } - return m; -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecMDPD::pack_reverse_hybrid(int n, int first, double *buf) { - //printf("in AtomVecMDPD::pack_reverse_hybrid\n"); - int i, m, last; - - m = 0; - last = first + n; - for (i = first; i < last; i++) { - buf[m++] = drho[i]; - } - return m; -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecMDPD::unpack_reverse_hybrid(int n, int *list, double *buf) { - //printf("in AtomVecMDPD::unpack_reverse_hybrid\n"); - int i, j, m; - - m = 0; - for (i = 0; i < n; i++) { - j = list[i]; - drho[j] += buf[m++]; - } - return m; -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecMDPD::pack_comm(int n, int *list, double *buf, int pbc_flag, - int *pbc) { - //printf("in AtomVecMDPD::pack_comm\n"); - int i, j, m; - double dx, dy, dz; - - m = 0; - if (pbc_flag == 0) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = x[j][0]; - buf[m++] = x[j][1]; - buf[m++] = x[j][2]; - buf[m++] = rho[j]; - buf[m++] = vest[j][0]; - buf[m++] = vest[j][1]; - buf[m++] = vest[j][2]; - } - } else { - if (domain->triclinic == 0) { - dx = pbc[0] * domain->xprd; - dy = pbc[1] * domain->yprd; - dz = pbc[2] * domain->zprd; - } else { - dx = pbc[0] * domain->xprd + pbc[5] * domain->xy + pbc[4] * domain->xz; - dy = pbc[1] * domain->yprd + pbc[3] * domain->yz; - dz = pbc[2] * domain->zprd; - } - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = x[j][0] + dx; - buf[m++] = x[j][1] + dy; - buf[m++] = x[j][2] + dz; - buf[m++] = rho[j]; - buf[m++] = vest[j][0]; - buf[m++] = vest[j][1]; - buf[m++] = vest[j][2]; - } - } - return m; -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecMDPD::pack_comm_vel(int n, int *list, double *buf, int pbc_flag, - int *pbc) { - //printf("in AtomVecMDPD::pack_comm_vel\n"); - int i, j, m; - double dx, dy, dz; - - m = 0; - if (pbc_flag == 0) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = x[j][0]; - buf[m++] = x[j][1]; - buf[m++] = x[j][2]; - buf[m++] = v[j][0]; - buf[m++] = v[j][1]; - buf[m++] = v[j][2]; - buf[m++] = rho[j]; - buf[m++] = vest[j][0]; - buf[m++] = vest[j][1]; - buf[m++] = vest[j][2]; - } - } else { - if (domain->triclinic == 0) { - dx = pbc[0] * domain->xprd; - dy = pbc[1] * domain->yprd; - dz = pbc[2] * domain->zprd; - } else { - dx = pbc[0] * domain->xprd + pbc[5] * domain->xy + pbc[4] * domain->xz; - dy = pbc[1] * domain->yprd + pbc[3] * domain->yz; - dz = pbc[2] * domain->zprd; - } - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = x[j][0] + dx; - buf[m++] = x[j][1] + dy; - buf[m++] = x[j][2] + dz; - buf[m++] = v[j][0]; - buf[m++] = v[j][1]; - buf[m++] = v[j][2]; - buf[m++] = rho[j]; - buf[m++] = vest[j][0]; - buf[m++] = vest[j][1]; - buf[m++] = vest[j][2]; - } - } - return m; -} - -/* ---------------------------------------------------------------------- */ - -void AtomVecMDPD::unpack_comm(int n, int first, double *buf) { - //printf("in AtomVecMDPD::unpack_comm\n"); - int i, m, last; - - m = 0; - last = first + n; - for (i = first; i < last; i++) { - x[i][0] = buf[m++]; - x[i][1] = buf[m++]; - x[i][2] = buf[m++]; - rho[i] = buf[m++]; - vest[i][0] = buf[m++]; - vest[i][1] = buf[m++]; - vest[i][2] = buf[m++]; - } -} - -/* ---------------------------------------------------------------------- */ - -void AtomVecMDPD::unpack_comm_vel(int n, int first, double *buf) { - //printf("in AtomVecMDPD::unpack_comm_vel\n"); - int i, m, last; - - m = 0; - last = first + n; - for (i = first; i < last; i++) { - x[i][0] = buf[m++]; - x[i][1] = buf[m++]; - x[i][2] = buf[m++]; - v[i][0] = buf[m++]; - v[i][1] = buf[m++]; - v[i][2] = buf[m++]; - rho[i] = buf[m++]; - vest[i][0] = buf[m++]; - vest[i][1] = buf[m++]; - vest[i][2] = buf[m++]; - } -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecMDPD::pack_reverse(int n, int first, double *buf) { - //printf("in AtomVecMDPD::pack_reverse\n"); - int i, m, last; - - m = 0; - last = first + n; - for (i = first; i < last; i++) { - buf[m++] = f[i][0]; - buf[m++] = f[i][1]; - buf[m++] = f[i][2]; - buf[m++] = drho[i]; - } - return m; -} - -/* ---------------------------------------------------------------------- */ - -void AtomVecMDPD::unpack_reverse(int n, int *list, double *buf) { - //printf("in AtomVecMDPD::unpack_reverse\n"); - int i, j, m; - - m = 0; - for (i = 0; i < n; i++) { - j = list[i]; - f[j][0] += buf[m++]; - f[j][1] += buf[m++]; - f[j][2] += buf[m++]; - drho[j] += buf[m++]; - } -} -/* ---------------------------------------------------------------------- */ - -int AtomVecMDPD::pack_border(int n, int *list, double *buf, int pbc_flag, - int *pbc) { - //printf("in AtomVecMDPD::pack_border\n"); - int i, j, m; - double dx, dy, dz; - - m = 0; - if (pbc_flag == 0) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = x[j][0]; - buf[m++] = x[j][1]; - buf[m++] = x[j][2]; - buf[m++] = ubuf(tag[j]).d; - buf[m++] = ubuf(type[j]).d; - buf[m++] = ubuf(mask[j]).d; - buf[m++] = rho[j]; - buf[m++] = vest[j][0]; - buf[m++] = vest[j][1]; - buf[m++] = vest[j][2]; - } - } else { - if (domain->triclinic == 0) { - dx = pbc[0] * domain->xprd; - dy = pbc[1] * domain->yprd; - dz = pbc[2] * domain->zprd; - } else { - dx = pbc[0]; - dy = pbc[1]; - dz = pbc[2]; - } - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = x[j][0] + dx; - buf[m++] = x[j][1] + dy; - buf[m++] = x[j][2] + dz; - buf[m++] = ubuf(tag[j]).d; - buf[m++] = ubuf(type[j]).d; - buf[m++] = ubuf(mask[j]).d; - buf[m++] = rho[j]; - buf[m++] = vest[j][0]; - buf[m++] = vest[j][1]; - buf[m++] = vest[j][2]; - } - } + // strings with peratom variables to include in each AtomVec method + // strings cannot contain fields in corresponding AtomVec default strings + // order of fields in a string does not matter + // except: fields_data_atom & fields_data_vel must match data file - if (atom->nextra_border) - for (int iextra = 0; iextra < atom->nextra_border; iextra++) - m += modify->fix[atom->extra_border[iextra]]->pack_border(n,list,&buf[m]); + fields_grow = (char *) "rho drho vest"; + fields_copy = (char *) "rho drho vest"; + fields_comm = (char *) "rho vest"; + fields_comm_vel = (char *) "rho vest"; + fields_reverse = (char *) "drho"; + fields_border = (char *) "rho vest"; + fields_border_vel = (char *) "rho vest"; + fields_exchange = (char *) "rho vest"; + fields_restart = (char * ) "rho vest"; + fields_create = (char *) "rho drho vest"; + fields_data_atom = (char *) "id type rho x"; + fields_data_vel = (char *) "id v"; - return m; + setup_fields(); } /* ---------------------------------------------------------------------- */ -int AtomVecMDPD::pack_border_vel(int n, int *list, double *buf, int pbc_flag, - int *pbc) +void AtomVecMDPD::init() { - int i,j,m; - double dx,dy,dz,dvx,dvy,dvz; - - m = 0; - if (pbc_flag == 0) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = x[j][0]; - buf[m++] = x[j][1]; - buf[m++] = x[j][2]; - buf[m++] = ubuf(tag[j]).d; - buf[m++] = ubuf(type[j]).d; - buf[m++] = ubuf(mask[j]).d; - buf[m++] = v[j][0]; - buf[m++] = v[j][1]; - buf[m++] = v[j][2]; - buf[m++] = rho[j]; - buf[m++] = vest[j][0]; - buf[m++] = vest[j][1]; - buf[m++] = vest[j][2]; - } - } else { - if (domain->triclinic == 0) { - dx = pbc[0] * domain->xprd; - dy = pbc[1] * domain->yprd; - dz = pbc[2] * domain->zprd; - } else { - dx = pbc[0]; - dy = pbc[1]; - dz = pbc[2]; - } - if (!deform_vremap) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = x[j][0] + dx; - buf[m++] = x[j][1] + dy; - buf[m++] = x[j][2] + dz; - buf[m++] = ubuf(tag[j]).d; - buf[m++] = ubuf(type[j]).d; - buf[m++] = ubuf(mask[j]).d; - buf[m++] = v[j][0]; - buf[m++] = v[j][1]; - buf[m++] = v[j][2]; - buf[m++] = rho[j]; - buf[m++] = vest[j][0]; - buf[m++] = vest[j][1]; - buf[m++] = vest[j][2]; - } - } else { - dvx = pbc[0] * h_rate[0] + pbc[5] * h_rate[5] + pbc[4] * h_rate[4]; - dvy = pbc[1] * h_rate[1] + pbc[3] * h_rate[3]; - dvz = pbc[2] * h_rate[2]; - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = x[j][0] + dx; - buf[m++] = x[j][1] + dy; - buf[m++] = x[j][2] + dz; - buf[m++] = ubuf(tag[j]).d; - buf[m++] = ubuf(type[j]).d; - buf[m++] = ubuf(mask[j]).d; - if (mask[i] & deform_groupbit) { - buf[m++] = v[j][0] + dvx; - buf[m++] = v[j][1] + dvy; - buf[m++] = v[j][2] + dvz; - buf[m++] = rho[j]; - buf[m++] = vest[j][0] + dvx; - buf[m++] = vest[j][1] + dvy; - buf[m++] = vest[j][2] + dvz; - } else { - buf[m++] = v[j][0]; - buf[m++] = v[j][1]; - buf[m++] = v[j][2]; - buf[m++] = rho[j]; - buf[m++] = vest[j][0]; - buf[m++] = vest[j][1]; - buf[m++] = vest[j][2]; - } - } - } - } - - if (atom->nextra_border) - for (int iextra = 0; iextra < atom->nextra_border; iextra++) - m += modify->fix[atom->extra_border[iextra]]->pack_border(n,list,&buf[m]); - - return m; -} - -/* ---------------------------------------------------------------------- */ - -void AtomVecMDPD::unpack_border(int n, int first, double *buf) { - //printf("in AtomVecMDPD::unpack_border\n"); - int i, m, last; - - m = 0; - last = first + n; - for (i = first; i < last; i++) { - if (i == nmax) - grow(0); - x[i][0] = buf[m++]; - x[i][1] = buf[m++]; - x[i][2] = buf[m++]; - tag[i] = (tagint) ubuf(buf[m++]).i; - type[i] = (int) ubuf(buf[m++]).i; - mask[i] = (int) ubuf(buf[m++]).i; - rho[i] = buf[m++]; - vest[i][0] = buf[m++]; - vest[i][1] = buf[m++]; - vest[i][2] = buf[m++]; - } - - if (atom->nextra_border) - for (int iextra = 0; iextra < atom->nextra_border; iextra++) - m += modify->fix[atom->extra_border[iextra]]-> - unpack_border(n,first,&buf[m]); -} - -/* ---------------------------------------------------------------------- */ - -void AtomVecMDPD::unpack_border_vel(int n, int first, double *buf) { - //printf("in AtomVecMDPD::unpack_border_vel\n"); - int i, m, last; - - m = 0; - last = first + n; - for (i = first; i < last; i++) { - if (i == nmax) - grow(0); - x[i][0] = buf[m++]; - x[i][1] = buf[m++]; - x[i][2] = buf[m++]; - tag[i] = (tagint) ubuf(buf[m++]).i; - type[i] = (int) ubuf(buf[m++]).i; - mask[i] = (int) ubuf(buf[m++]).i; - v[i][0] = buf[m++]; - v[i][1] = buf[m++]; - v[i][2] = buf[m++]; - rho[i] = buf[m++]; - vest[i][0] = buf[m++]; - vest[i][1] = buf[m++]; - vest[i][2] = buf[m++]; - } - - if (atom->nextra_border) - for (int iextra = 0; iextra < atom->nextra_border; iextra++) - m += modify->fix[atom->extra_border[iextra]]-> - unpack_border(n,first,&buf[m]); -} - -/* ---------------------------------------------------------------------- - pack data for atom I for sending to another proc - xyz must be 1st 3 values, so comm::exchange() can test on them - ------------------------------------------------------------------------- */ - -int AtomVecMDPD::pack_exchange(int i, double *buf) { - //printf("in AtomVecMDPD::pack_exchange\n"); - int m = 1; - buf[m++] = x[i][0]; - buf[m++] = x[i][1]; - buf[m++] = x[i][2]; - buf[m++] = v[i][0]; - buf[m++] = v[i][1]; - buf[m++] = v[i][2]; - buf[m++] = ubuf(tag[i]).d; - buf[m++] = ubuf(type[i]).d; - buf[m++] = ubuf(mask[i]).d; - buf[m++] = ubuf(image[i]).d; - buf[m++] = rho[i]; - buf[m++] = vest[i][0]; - buf[m++] = vest[i][1]; - buf[m++] = vest[i][2]; - - if (atom->nextra_grow) - for (int iextra = 0; iextra < atom->nextra_grow; iextra++) - m += modify->fix[atom->extra_grow[iextra]]->pack_exchange(i, &buf[m]); - - buf[0] = m; - return m; -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecMDPD::unpack_exchange(double *buf) { - //printf("in AtomVecMDPD::unpack_exchange\n"); - int nlocal = atom->nlocal; - if (nlocal == nmax) - grow(0); - - int m = 1; - x[nlocal][0] = buf[m++]; - x[nlocal][1] = buf[m++]; - x[nlocal][2] = buf[m++]; - v[nlocal][0] = buf[m++]; - v[nlocal][1] = buf[m++]; - v[nlocal][2] = buf[m++]; - tag[nlocal] = (tagint) ubuf(buf[m++]).i; - type[nlocal] = (int) ubuf(buf[m++]).i; - mask[nlocal] = (int) ubuf(buf[m++]).i; - image[nlocal] = (imageint) ubuf(buf[m++]).i; - rho[nlocal] = buf[m++]; - vest[nlocal][0] = buf[m++]; - vest[nlocal][1] = buf[m++]; - vest[nlocal][2] = buf[m++]; - - if (atom->nextra_grow) - for (int iextra = 0; iextra < atom->nextra_grow; iextra++) - m += modify->fix[atom->extra_grow[iextra]]-> unpack_exchange(nlocal, - &buf[m]); - - atom->nlocal++; - return m; -} - -/* ---------------------------------------------------------------------- - size of restart data for all atoms owned by this proc - include extra data stored by fixes - ------------------------------------------------------------------------- */ - -int AtomVecMDPD::size_restart() { - int i; - - int nlocal = atom->nlocal; - int n = 15 * nlocal; // 11 + rho + vest[3] - - if (atom->nextra_restart) - for (int iextra = 0; iextra < atom->nextra_restart; iextra++) - for (i = 0; i < nlocal; i++) - n += modify->fix[atom->extra_restart[iextra]]->size_restart(i); + AtomVec::init(); - return n; -} - -/* ---------------------------------------------------------------------- - pack atom I's data for restart file including extra quantities - xyz must be 1st 3 values, so that read_restart can test on them - molecular types may be negative, but write as positive - ------------------------------------------------------------------------- */ - -int AtomVecMDPD::pack_restart(int i, double *buf) { - int m = 1; - buf[m++] = x[i][0]; - buf[m++] = x[i][1]; - buf[m++] = x[i][2]; - buf[m++] = ubuf(tag[i]).d; - buf[m++] = ubuf(type[i]).d; - buf[m++] = ubuf(mask[i]).d; - buf[m++] = ubuf(image[i]).d; - buf[m++] = v[i][0]; - buf[m++] = v[i][1]; - buf[m++] = v[i][2]; - buf[m++] = rho[i]; - buf[m++] = vest[i][0]; - buf[m++] = vest[i][1]; - buf[m++] = vest[i][2]; - - if (atom->nextra_restart) - for (int iextra = 0; iextra < atom->nextra_restart; iextra++) - m += modify->fix[atom->extra_restart[iextra]]->pack_restart(i, &buf[m]); - - buf[0] = m; - return m; -} - -/* ---------------------------------------------------------------------- - unpack data for one atom from restart file including extra quantities - ------------------------------------------------------------------------- */ - -int AtomVecMDPD::unpack_restart(double *buf) { - int nlocal = atom->nlocal; - if (nlocal == nmax) { - grow(0); - if (atom->nextra_store) - memory->grow(atom->extra, nmax, atom->nextra_store, "atom:extra"); - } - - int m = 1; - x[nlocal][0] = buf[m++]; - x[nlocal][1] = buf[m++]; - x[nlocal][2] = buf[m++]; - tag[nlocal] = (tagint) ubuf(buf[m++]).i; - type[nlocal] = (int) ubuf(buf[m++]).i; - mask[nlocal] = (int) ubuf(buf[m++]).i; - image[nlocal] = (imageint) ubuf(buf[m++]).i; - v[nlocal][0] = buf[m++]; - v[nlocal][1] = buf[m++]; - v[nlocal][2] = buf[m++]; - rho[nlocal] = buf[m++]; - vest[nlocal][0] = buf[m++]; - vest[nlocal][1] = buf[m++]; - vest[nlocal][2] = buf[m++]; - - double **extra = atom->extra; - if (atom->nextra_store) { - int size = static_cast (buf[0]) - m; - for (int i = 0; i < size; i++) - extra[nlocal][i] = buf[m++]; - } - - atom->nlocal++; - return m; -} - -/* ---------------------------------------------------------------------- - create one atom of itype at coord - set other values to defaults - ------------------------------------------------------------------------- */ - -void AtomVecMDPD::create_atom(int itype, double *coord) { - int nlocal = atom->nlocal; - if (nlocal == nmax) - grow(0); - - tag[nlocal] = 0; - type[nlocal] = itype; - x[nlocal][0] = coord[0]; - x[nlocal][1] = coord[1]; - x[nlocal][2] = coord[2]; - mask[nlocal] = 1; - image[nlocal] = ((imageint) IMGMAX << IMG2BITS) | - ((imageint) IMGMAX << IMGBITS) | IMGMAX; - v[nlocal][0] = 0.0; - v[nlocal][1] = 0.0; - v[nlocal][2] = 0.0; - rho[nlocal] = 0.0; - vest[nlocal][0] = 0.0; - vest[nlocal][1] = 0.0; - vest[nlocal][2] = 0.0; - drho[nlocal] = 0.0; - - atom->nlocal++; -} - -/* ---------------------------------------------------------------------- - unpack one line from Atoms section of data file - initialize other atom quantities - ------------------------------------------------------------------------- */ - -void AtomVecMDPD::data_atom(double *coord, imageint imagetmp, char **values) { - int nlocal = atom->nlocal; - if (nlocal == nmax) grow(0); - - tag[nlocal] = utils::tnumeric(FLERR,values[0],true,lmp); - type[nlocal] = utils::inumeric(FLERR,values[1],true,lmp); - if (type[nlocal] <= 0 || type[nlocal] > atom->ntypes) - error->one(FLERR,"Invalid atom type in Atoms section of data file"); - - x[nlocal][0] = coord[0]; - x[nlocal][1] = coord[1]; - x[nlocal][2] = coord[2]; - - image[nlocal] = imagetmp; - - mask[nlocal] = 1; - v[nlocal][0] = 0.0; - v[nlocal][1] = 0.0; - v[nlocal][2] = 0.0; - - vest[nlocal][0] = 0.0; - vest[nlocal][1] = 0.0; - vest[nlocal][2] = 0.0; - - rho[nlocal] = utils::numeric(FLERR,values[2],true,lmp); - drho[nlocal] = 0.0; - - atom->nlocal++; -} - -/* ---------------------------------------------------------------------- - unpack hybrid quantities from one line in Atoms section of data file - initialize other atom quantities for this sub-style - ------------------------------------------------------------------------- */ - -int AtomVecMDPD::data_atom_hybrid(int nlocal, char **values) -{ - rho[nlocal] = utils::numeric(FLERR,values[0],true,lmp); - return 3; -} - -/* ---------------------------------------------------------------------- - pack atom info for data file including 3 image flags -------------------------------------------------------------------------- */ - -void AtomVecMDPD::pack_data(double **buf) -{ - int nlocal = atom->nlocal; - for (int i = 0; i < nlocal; i++) { - buf[i][0] = ubuf(tag[i]).d; - buf[i][1] = ubuf(type[i]).d; - buf[i][2] = rho[i]; - buf[i][3] = x[i][0]; - buf[i][4] = x[i][1]; - buf[i][5] = x[i][2]; - buf[i][6] = ubuf((image[i] & IMGMASK) - IMGMAX).d; - buf[i][7] = ubuf((image[i] >> IMGBITS & IMGMASK) - IMGMAX).d; - buf[i][8] = ubuf((image[i] >> IMG2BITS) - IMGMAX).d; - } + if (strcmp(update->unit_style,"lj") != 0) + error->all(FLERR,"Atom style mdpd requires lj units"); } /* ---------------------------------------------------------------------- - pack hybrid atom info for data file + set local copies of all grow ptrs used by this class, except defaults + needed in replicate when 2 atom classes exist and it calls pack_restart() ------------------------------------------------------------------------- */ -int AtomVecMDPD::pack_data_hybrid(int i, double *buf) +void AtomVecMDPD::grow_pointers() { - buf[0] = rho[i]; - return 3; + rho = atom->rho; + drho = atom->drho; + vest = atom->vest; } /* ---------------------------------------------------------------------- - write atom info to data file including 3 image flags + clear extra forces starting at atom N + nbytes = # of bytes to clear for a per-atom vector ------------------------------------------------------------------------- */ -void AtomVecMDPD::write_data(FILE *fp, int n, double **buf) +void AtomVecMDPD::force_clear(int n, size_t nbytes) { - for (int i = 0; i < n; i++) - fprintf(fp,TAGINT_FORMAT - " %d %-1.16e %-1.16e %-1.16e %-1.16e " - "%d %d %d\n", - (tagint) ubuf(buf[i][0]).i,(int) ubuf(buf[i][1]).i, - buf[i][2],buf[i][3],buf[i][4],buf[i][5], - (int) ubuf(buf[i][6]).i,(int) ubuf(buf[i][7]).i, - (int) ubuf(buf[i][8]).i); + memset(&drho[n],0,nbytes); } /* ---------------------------------------------------------------------- - write hybrid atom info to data file + modify what AtomVec::data_atom() just unpacked + or initialize other atom quantities ------------------------------------------------------------------------- */ -int AtomVecMDPD::write_data_hybrid(FILE *fp, double *buf) +void AtomVecMDPD::data_atom_post(int ilocal) { - fprintf(fp," %-1.16e",buf[0]); - return 3; + drho[ilocal] = 0.0; + vest[ilocal][0] = 0.0; + vest[ilocal][1] = 0.0; + vest[ilocal][2] = 0.0; } /* ---------------------------------------------------------------------- @@ -912,8 +118,8 @@ void AtomVecMDPD::pack_property_atom(int index, double *buf, { int *mask = atom->mask; int nlocal = atom->nlocal; - int n = 0; + int n = 0; if (index == 0) { for (int i = 0; i < nlocal; i++) { if (mask[i] & groupbit) buf[n] = rho[i]; @@ -928,24 +134,3 @@ void AtomVecMDPD::pack_property_atom(int index, double *buf, } } } - -/* ---------------------------------------------------------------------- - return # of bytes of allocated memory - ------------------------------------------------------------------------- */ - -bigint AtomVecMDPD::memory_usage() { - bigint bytes = 0; - - if (atom->memcheck("tag")) bytes += memory->usage(tag, nmax); - if (atom->memcheck("type")) bytes += memory->usage(type, nmax); - if (atom->memcheck("mask")) bytes += memory->usage(mask, nmax); - if (atom->memcheck("image")) bytes += memory->usage(image, nmax); - if (atom->memcheck("x")) bytes += memory->usage(x, nmax, 3); - if (atom->memcheck("v")) bytes += memory->usage(v, nmax, 3); - if (atom->memcheck("f")) bytes += memory->usage(f, nmax*comm->nthreads, 3); - if (atom->memcheck("rho")) bytes += memory->usage(rho, nmax); - if (atom->memcheck("drho")) bytes += memory->usage(drho, nmax*comm->nthreads); - if (atom->memcheck("vest")) bytes += memory->usage(vest, nmax, 3); - - return bytes; -} diff --git a/src/USER-MESODPD/atom_vec_mdpd.h b/src/USER-MESODPD/atom_vec_mdpd.h index 9e9ffcdcf2b88621802cc418cefa124735a90b99..55f5e9bb2dc0f2d72866e81688d115a0b3df0251 100644 --- a/src/USER-MESODPD/atom_vec_mdpd.h +++ b/src/USER-MESODPD/atom_vec_mdpd.h @@ -27,50 +27,17 @@ namespace LAMMPS_NS { class AtomVecMDPD : public AtomVec { public: AtomVecMDPD(class LAMMPS *); - ~AtomVecMDPD() {} - void grow(int); - void grow_reset(); - void copy(int, int, int); + void init(); + + void grow_pointers(); void force_clear(int, size_t); - int pack_comm(int, int *, double *, int, int *); - int pack_comm_vel(int, int *, double *, int, int *); - void unpack_comm(int, int, double *); - void unpack_comm_vel(int, int, double *); - int pack_reverse(int, int, double *); - void unpack_reverse(int, int *, double *); - int pack_comm_hybrid(int, int *, double *); - int unpack_comm_hybrid(int, int, double *); - int pack_border_hybrid(int, int *, double *); - int unpack_border_hybrid(int, int, double *); - int pack_reverse_hybrid(int, int, double *); - int unpack_reverse_hybrid(int, int *, double *); - int pack_border(int, int *, double *, int, int *); - int pack_border_vel(int, int *, double *, int, int *); - void unpack_border(int, int, double *); - void unpack_border_vel(int, int, double *); - int pack_exchange(int, double *); - int unpack_exchange(double *); - int size_restart(); - int pack_restart(int, double *); - int unpack_restart(double *); - void create_atom(int, double *); - void data_atom(double *, imageint, char **); - int data_atom_hybrid(int, char **); - void pack_data(double **); - int pack_data_hybrid(int, double *); - void write_data(FILE *, int, double **); - int write_data_hybrid(FILE *, double *); + void data_atom_post(int); int property_atom(char *); void pack_property_atom(int, double *, int, int); - bigint memory_usage(); private: - tagint *tag; - int *type,*mask; - imageint *image; - double **x,**v,**f; - double *rho, *drho; - double **vest; // estimated velocity during force computation + double *rho,*drho; + double **vest; }; } diff --git a/src/USER-MESODPD/atom_vec_tdpd.cpp b/src/USER-MESODPD/atom_vec_tdpd.cpp index 74ac47066b297c8994401cb976778a6ca9d2ae6d..f50fe168d6e0dc8548d669dfcd5b1825c70e7163 100644 --- a/src/USER-MESODPD/atom_vec_tdpd.cpp +++ b/src/USER-MESODPD/atom_vec_tdpd.cpp @@ -14,12 +14,7 @@ #include "atom_vec_tdpd.h" #include #include "atom.h" -#include "comm.h" -#include "domain.h" -#include "modify.h" -#include "fix.h" #include "update.h" -#include "memory.h" #include "error.h" #include "utils.h" @@ -29,29 +24,30 @@ using namespace LAMMPS_NS; AtomVecTDPD::AtomVecTDPD(LAMMPS *lmp) : AtomVec(lmp) { - if(strcmp(update->unit_style,"lj") != 0) - error->all(FLERR,"Atom style edpd requires lj units"); - molecular = 0; mass_type = 1; forceclearflag = 1; - comm_x_only = comm_f_only = 0; - comm->ghost_velocity = 1; - - cc_species = 0; // for now, reset in process_args() - - size_forward = 3 + cc_species + 3; //vest[3] - size_reverse = 3 + cc_species; - size_border = 6 + cc_species + 3; //vest[3] - size_velocity = 3; - // for data_atom, we read id + type + xyz[3] + cc[i] where i=1,cc_species - size_data_atom = 5 + cc_species; - size_data_vel = 4; - xcol_data = 3; - atom->tdpd_flag = 1; atom->vest_flag = 1; + + // strings with peratom variables to include in each AtomVec method + // strings cannot contain fields in corresponding AtomVec default strings + // order of fields in a string does not matter + // except: fields_data_atom & fields_data_vel must match data file + + fields_grow = (char *) "cc cc_flux vest"; + fields_copy = (char *) "cc vest"; + fields_comm = (char *) "cc vest"; + fields_comm_vel = (char *) "cc vest"; + fields_reverse = (char *) "cc_flux"; + fields_border = (char *) "cc vest"; + fields_border_vel = (char *) "cc vest"; + fields_exchange = (char *) "cc vest"; + fields_restart = (char * ) "cc vest"; + fields_create = (char *) "cc vest"; + fields_data_atom = (char *) "id type x cc"; + fields_data_vel = (char *) "id v"; } /* ---------------------------------------------------------------------- @@ -66,812 +62,54 @@ void AtomVecTDPD::process_args(int narg, char **arg) atom->cc_species = utils::inumeric(FLERR,arg[0],false,lmp); cc_species = atom->cc_species; - // reset sizes that depend on cc_species - - size_forward = 3 + cc_species + 3; - size_reverse = 3 + cc_species; - size_border = 6 + cc_species + 3; - size_data_atom = 5 + cc_species; -} - -/* ---------------------------------------------------------------------- - grow atom arrays - n = 0 grows arrays by a chunk - n > 0 allocates arrays to size n -------------------------------------------------------------------------- */ - -void AtomVecTDPD::grow(int n) -{ - if (n == 0) grow_nmax(); - else nmax = n; - atom->nmax = nmax; - if (nmax < 0 || nmax > MAXSMALLINT) - error->one(FLERR,"Per-processor system is too big"); - - tag = memory->grow(atom->tag,nmax,"atom:tag"); - type = memory->grow(atom->type,nmax,"atom:type"); - mask = memory->grow(atom->mask,nmax,"atom:mask"); - image = memory->grow(atom->image,nmax,"atom:image"); - x = memory->grow(atom->x,nmax,3,"atom:x"); - v = memory->grow(atom->v,nmax,3,"atom:v"); - f = memory->grow(atom->f,nmax*comm->nthreads,3,"atom:f"); - cc = memory->grow(atom->cc,nmax*comm->nthreads,cc_species,"atom:cc"); - cc_flux = memory->grow(atom->cc_flux,nmax*comm->nthreads,cc_species, - "atom:cc_flux"); - vest = memory->grow(atom->vest, nmax, 3, "atom:vest"); - - if (atom->nextra_grow) - for (int iextra = 0; iextra < atom->nextra_grow; iextra++) - modify->fix[atom->extra_grow[iextra]]->grow_arrays(nmax); -} - -/* ---------------------------------------------------------------------- - reset local array ptrs -------------------------------------------------------------------------- */ - -void AtomVecTDPD::grow_reset() -{ - tag = atom->tag; type = atom->type; - mask = atom->mask; image = atom->image; - x = atom->x; v = atom->v; f = atom->f; - cc = atom->cc; cc_flux = atom->cc_flux; - vest = atom->vest; -} - -/* ---------------------------------------------------------------------- - copy atom I info to atom J -------------------------------------------------------------------------- */ - -void AtomVecTDPD::copy(int i, int j, int delflag) -{ - tag[j] = tag[i]; - type[j] = type[i]; - mask[j] = mask[i]; - image[j] = image[i]; - x[j][0] = x[i][0]; - x[j][1] = x[i][1]; - x[j][2] = x[i][2]; - v[j][0] = v[i][0]; - v[j][1] = v[i][1]; - v[j][2] = v[i][2]; - - for(int k = 0; k < cc_species; k++) - cc[j][k] = cc[i][k]; - - vest[j][0] = vest[i][0]; - vest[j][1] = vest[i][1]; - vest[j][2] = vest[i][2]; - - if (atom->nextra_grow) - for (int iextra = 0; iextra < atom->nextra_grow; iextra++) - modify->fix[atom->extra_grow[iextra]]->copy_arrays(i,j,delflag); -} - - -void AtomVecTDPD::force_clear(int n, size_t nbytes) -{ - memset(&cc_flux[n][0],0,cc_species*nbytes); -} - - -/* ---------------------------------------------------------------------- */ - -int AtomVecTDPD::pack_comm(int n, int *list, double *buf, - int pbc_flag, int *pbc) -{ - int i,j,k,m; - double dx,dy,dz; - - m = 0; - if (pbc_flag == 0) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = x[j][0]; - buf[m++] = x[j][1]; - buf[m++] = x[j][2]; - - for(k = 0; k < cc_species; k++) - buf[m++] = cc[j][k]; - - buf[m++] = vest[j][0]; - buf[m++] = vest[j][1]; - buf[m++] = vest[j][2]; - } - } else { - if (domain->triclinic == 0) { - dx = pbc[0]*domain->xprd; - dy = pbc[1]*domain->yprd; - dz = pbc[2]*domain->zprd; - } else { - dx = pbc[0]*domain->xprd + pbc[5]*domain->xy + pbc[4]*domain->xz; - dy = pbc[1]*domain->yprd + pbc[3]*domain->yz; - dz = pbc[2]*domain->zprd; - } - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = x[j][0] + dx; - buf[m++] = x[j][1] + dy; - buf[m++] = x[j][2] + dz; - - for(k = 0; k < cc_species; k++) - buf[m++] = cc[j][k]; - - buf[m++] = vest[j][0]; - buf[m++] = vest[j][1]; - buf[m++] = vest[j][2]; - } - } - return m; -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecTDPD::pack_comm_vel(int n, int *list, double *buf, - int pbc_flag, int *pbc) -{ - int i,j,k,m; - double dx,dy,dz,dvx,dvy,dvz; - - m = 0; - if (pbc_flag == 0) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = x[j][0]; - buf[m++] = x[j][1]; - buf[m++] = x[j][2]; - buf[m++] = v[j][0]; - buf[m++] = v[j][1]; - buf[m++] = v[j][2]; - - for(k = 0; k < cc_species; k++) - buf[m++] = cc[j][k]; - - buf[m++] = vest[j][0]; - buf[m++] = vest[j][1]; - buf[m++] = vest[j][2]; - } - } else { - if (domain->triclinic == 0) { - dx = pbc[0]*domain->xprd; - dy = pbc[1]*domain->yprd; - dz = pbc[2]*domain->zprd; - } else { - dx = pbc[0]*domain->xprd + pbc[5]*domain->xy + pbc[4]*domain->xz; - dy = pbc[1]*domain->yprd + pbc[3]*domain->yz; - dz = pbc[2]*domain->zprd; - } - if (!deform_vremap) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = x[j][0] + dx; - buf[m++] = x[j][1] + dy; - buf[m++] = x[j][2] + dz; - buf[m++] = v[j][0]; - buf[m++] = v[j][1]; - buf[m++] = v[j][2]; - - for(k = 0; k < cc_species; k++) - buf[m++] = cc[j][k]; - - buf[m++] = vest[j][0]; - buf[m++] = vest[j][1]; - buf[m++] = vest[j][2]; - } - } else { - dvx = pbc[0]*h_rate[0] + pbc[5]*h_rate[5] + pbc[4]*h_rate[4]; - dvy = pbc[1]*h_rate[1] + pbc[3]*h_rate[3]; - dvz = pbc[2]*h_rate[2]; - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = x[j][0] + dx; - buf[m++] = x[j][1] + dy; - buf[m++] = x[j][2] + dz; - if (mask[i] & deform_groupbit) { - buf[m++] = v[j][0] + dvx; - buf[m++] = v[j][1] + dvy; - buf[m++] = v[j][2] + dvz; - } else { - buf[m++] = v[j][0]; - buf[m++] = v[j][1]; - buf[m++] = v[j][2]; - } - for(k = 0; k < cc_species; k++) - buf[m++] = cc[j][k]; - - buf[m++] = vest[j][0]; - buf[m++] = vest[j][1]; - buf[m++] = vest[j][2]; - } - } - } - return m; -} - -/* ---------------------------------------------------------------------- */ - -void AtomVecTDPD::unpack_comm(int n, int first, double *buf) -{ - int i,m,last; - - m = 0; - last = first + n; - for (i = first; i < last; i++) { - x[i][0] = buf[m++]; - x[i][1] = buf[m++]; - x[i][2] = buf[m++]; - - for(int k = 0; k < cc_species; k++) - cc[i][k] = buf[m++]; - - vest[i][0] = buf[m++]; - vest[i][1] = buf[m++]; - vest[i][2] = buf[m++]; - } -} - -/* ---------------------------------------------------------------------- */ - -void AtomVecTDPD::unpack_comm_vel(int n, int first, double *buf) -{ - int i,m,last; + atom->add_peratom_change_columns("cc",cc_species); + atom->add_peratom_change_columns("cc_flux",cc_species); - m = 0; - last = first + n; - for (i = first; i < last; i++) { - x[i][0] = buf[m++]; - x[i][1] = buf[m++]; - x[i][2] = buf[m++]; - v[i][0] = buf[m++]; - v[i][1] = buf[m++]; - v[i][2] = buf[m++]; - for(int k = 0; k < cc_species; k++) - cc[i][k] = buf[m++]; + // delay setting up of fields until now - vest[i][0] = buf[m++]; - vest[i][1] = buf[m++]; - vest[i][2] = buf[m++]; - } + setup_fields(); } /* ---------------------------------------------------------------------- */ -int AtomVecTDPD::pack_reverse(int n, int first, double *buf) +void AtomVecTDPD::init() { - int i,m,last; + AtomVec::init(); - m = 0; - last = first + n; - for (i = first; i < last; i++) { - buf[m++] = f[i][0]; - buf[m++] = f[i][1]; - buf[m++] = f[i][2]; - for(int k = 0; k < cc_species; k++) - buf[m++] = cc_flux[i][k]; - } - return m; -} - -/* ---------------------------------------------------------------------- */ - -void AtomVecTDPD::unpack_reverse(int n, int *list, double *buf) -{ - int i,j,m; - - m = 0; - for (i = 0; i < n; i++) { - j = list[i]; - f[j][0] += buf[m++]; - f[j][1] += buf[m++]; - f[j][2] += buf[m++]; - for(int k = 0; k < cc_species; k++) - cc_flux[j][k] += buf[m++]; - } -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecTDPD::pack_border(int n, int *list, double *buf, - int pbc_flag, int *pbc) -{ - int i,j,m; - double dx,dy,dz; - - m = 0; - if (pbc_flag == 0) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = x[j][0]; - buf[m++] = x[j][1]; - buf[m++] = x[j][2]; - buf[m++] = ubuf(tag[j]).d; - buf[m++] = ubuf(type[j]).d; - buf[m++] = ubuf(mask[j]).d; - for(int k = 0; k < cc_species; k++) - buf[m++] = cc[j][k]; - - buf[m++] = vest[j][0]; - buf[m++] = vest[j][1]; - buf[m++] = vest[j][2]; - } - } else { - if (domain->triclinic == 0) { - dx = pbc[0]*domain->xprd; - dy = pbc[1]*domain->yprd; - dz = pbc[2]*domain->zprd; - } else { - dx = pbc[0]; - dy = pbc[1]; - dz = pbc[2]; - } - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = x[j][0] + dx; - buf[m++] = x[j][1] + dy; - buf[m++] = x[j][2] + dz; - buf[m++] = ubuf(tag[j]).d; - buf[m++] = ubuf(type[j]).d; - buf[m++] = ubuf(mask[j]).d; - for(int k = 0; k < cc_species; k++) - buf[m++] = cc[j][k]; - - buf[m++] = vest[j][0]; - buf[m++] = vest[j][1]; - buf[m++] = vest[j][2]; - } - } - - if (atom->nextra_border) - for (int iextra = 0; iextra < atom->nextra_border; iextra++) - m += modify->fix[atom->extra_border[iextra]]->pack_border(n,list,&buf[m]); - - return m; -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecTDPD::pack_border_vel(int n, int *list, double *buf, - int pbc_flag, int *pbc) -{ - int i,j,m; - double dx,dy,dz,dvx,dvy,dvz; - - m = 0; - if (pbc_flag == 0) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = x[j][0]; - buf[m++] = x[j][1]; - buf[m++] = x[j][2]; - buf[m++] = ubuf(tag[j]).d; - buf[m++] = ubuf(type[j]).d; - buf[m++] = ubuf(mask[j]).d; - buf[m++] = v[j][0]; - buf[m++] = v[j][1]; - buf[m++] = v[j][2]; - for(int k = 0; k < cc_species; k++) - buf[m++] = cc[j][k]; - - buf[m++] = vest[j][0]; - buf[m++] = vest[j][1]; - buf[m++] = vest[j][2]; - } - } else { - if (domain->triclinic == 0) { - dx = pbc[0]*domain->xprd; - dy = pbc[1]*domain->yprd; - dz = pbc[2]*domain->zprd; - } else { - dx = pbc[0]; - dy = pbc[1]; - dz = pbc[2]; - } - if (!deform_vremap) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = x[j][0] + dx; - buf[m++] = x[j][1] + dy; - buf[m++] = x[j][2] + dz; - buf[m++] = ubuf(tag[j]).d; - buf[m++] = ubuf(type[j]).d; - buf[m++] = ubuf(mask[j]).d; - buf[m++] = v[j][0]; - buf[m++] = v[j][1]; - buf[m++] = v[j][2]; - for(int k = 0; k < cc_species; k++) - buf[m++] = cc[j][k]; - - buf[m++] = vest[j][0]; - buf[m++] = vest[j][1]; - buf[m++] = vest[j][2]; - } - } else { - dvx = pbc[0]*h_rate[0] + pbc[5]*h_rate[5] + pbc[4]*h_rate[4]; - dvy = pbc[1]*h_rate[1] + pbc[3]*h_rate[3]; - dvz = pbc[2]*h_rate[2]; - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = x[j][0] + dx; - buf[m++] = x[j][1] + dy; - buf[m++] = x[j][2] + dz; - buf[m++] = ubuf(tag[j]).d; - buf[m++] = ubuf(type[j]).d; - buf[m++] = ubuf(mask[j]).d; - if (mask[i] & deform_groupbit) { - buf[m++] = v[j][0] + dvx; - buf[m++] = v[j][1] + dvy; - buf[m++] = v[j][2] + dvz; - } else { - buf[m++] = v[j][0]; - buf[m++] = v[j][1]; - buf[m++] = v[j][2]; - } - for(int k = 0; k < cc_species; k++) - buf[m++] = cc[j][k]; - - buf[m++] = vest[j][0]; - buf[m++] = vest[j][1]; - buf[m++] = vest[j][2]; - } - } - } - - if (atom->nextra_border) - for (int iextra = 0; iextra < atom->nextra_border; iextra++) - m += modify->fix[atom->extra_border[iextra]]->pack_border(n,list,&buf[m]); - - return m; -} - -/* ---------------------------------------------------------------------- */ - -void AtomVecTDPD::unpack_border(int n, int first, double *buf) -{ - int i,m,last; - - m = 0; - last = first + n; - for (i = first; i < last; i++) { - if (i == nmax) grow(0); - x[i][0] = buf[m++]; - x[i][1] = buf[m++]; - x[i][2] = buf[m++]; - tag[i] = (tagint) ubuf(buf[m++]).i; - type[i] = (int) ubuf(buf[m++]).i; - mask[i] = (int) ubuf(buf[m++]).i; - for(int k = 0; k < cc_species; k++) - cc[i][k] = buf[m++]; - - vest[i][0] = buf[m++]; - vest[i][1] = buf[m++]; - vest[i][2] = buf[m++]; - } - - if (atom->nextra_border) - for (int iextra = 0; iextra < atom->nextra_border; iextra++) - m += modify->fix[atom->extra_border[iextra]]-> - unpack_border(n,first,&buf[m]); -} - -/* ---------------------------------------------------------------------- */ - -void AtomVecTDPD::unpack_border_vel(int n, int first, double *buf) -{ - int i,m,last; - - m = 0; - last = first + n; - for (i = first; i < last; i++) { - if (i == nmax) grow(0); - x[i][0] = buf[m++]; - x[i][1] = buf[m++]; - x[i][2] = buf[m++]; - tag[i] = (tagint) ubuf(buf[m++]).i; - type[i] = (int) ubuf(buf[m++]).i; - mask[i] = (int) ubuf(buf[m++]).i; - v[i][0] = buf[m++]; - v[i][1] = buf[m++]; - v[i][2] = buf[m++]; - for(int k = 0; k < cc_species; k++) - cc[i][k] = buf[m++]; - - vest[i][0] = buf[m++]; - vest[i][1] = buf[m++]; - vest[i][2] = buf[m++]; - } - - if (atom->nextra_border) - for (int iextra = 0; iextra < atom->nextra_border; iextra++) - m += modify->fix[atom->extra_border[iextra]]-> - unpack_border(n,first,&buf[m]); -} - -/* ---------------------------------------------------------------------- - pack data for atom I for sending to another proc - xyz must be 1st 3 values, so comm::exchange() can test on them -------------------------------------------------------------------------- */ - -int AtomVecTDPD::pack_exchange(int i, double *buf) -{ - int m = 1; - buf[m++] = x[i][0]; - buf[m++] = x[i][1]; - buf[m++] = x[i][2]; - buf[m++] = v[i][0]; - buf[m++] = v[i][1]; - buf[m++] = v[i][2]; - buf[m++] = ubuf(tag[i]).d; - buf[m++] = ubuf(type[i]).d; - buf[m++] = ubuf(mask[i]).d; - buf[m++] = ubuf(image[i]).d; - for(int k = 0; k < cc_species; k++) - buf[m++] = cc[i][k]; - - buf[m++] = vest[i][0]; - buf[m++] = vest[i][1]; - buf[m++] = vest[i][2]; - - if (atom->nextra_grow) - for (int iextra = 0; iextra < atom->nextra_grow; iextra++) - m += modify->fix[atom->extra_grow[iextra]]->pack_exchange(i,&buf[m]); - - buf[0] = m; - return m; -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecTDPD::unpack_exchange(double *buf) -{ - int nlocal = atom->nlocal; - if (nlocal == nmax) grow(0); - - int m = 1; - x[nlocal][0] = buf[m++]; - x[nlocal][1] = buf[m++]; - x[nlocal][2] = buf[m++]; - v[nlocal][0] = buf[m++]; - v[nlocal][1] = buf[m++]; - v[nlocal][2] = buf[m++]; - tag[nlocal] = (tagint) ubuf(buf[m++]).i; - type[nlocal] = (int) ubuf(buf[m++]).i; - mask[nlocal] = (int) ubuf(buf[m++]).i; - image[nlocal] = (imageint) ubuf(buf[m++]).i; - for(int k = 0; k < cc_species; k++) - cc[nlocal][k] = buf[m++]; - - vest[nlocal][0] = buf[m++]; - vest[nlocal][1] = buf[m++]; - vest[nlocal][2] = buf[m++]; - - if (atom->nextra_grow) - for (int iextra = 0; iextra < atom->nextra_grow; iextra++) - m += modify->fix[atom->extra_grow[iextra]]-> - unpack_exchange(nlocal,&buf[m]); - - atom->nlocal++; - return m; -} - -/* ---------------------------------------------------------------------- - size of restart data for all atoms owned by this proc - include extra data stored by fixes -------------------------------------------------------------------------- */ - -int AtomVecTDPD::size_restart() -{ - int i; - - int nlocal = atom->nlocal; - int n = (11 + cc_species + 3) * nlocal; // 11 + cc[i] + vest[3] - - if (atom->nextra_restart) - for (int iextra = 0; iextra < atom->nextra_restart; iextra++) - for (i = 0; i < nlocal; i++) - n += modify->fix[atom->extra_restart[iextra]]->size_restart(i); - - return n; + if (strcmp(update->unit_style,"lj") != 0) + error->all(FLERR,"Atom style tdpd requires lj units"); } /* ---------------------------------------------------------------------- - pack atom I's data for restart file including extra quantities - xyz must be 1st 3 values, so that read_restart can test on them - molecular types may be negative, but write as positive + set local copies of all grow ptrs used by this class, except defaults + needed in replicate when 2 atom classes exist and it calls pack_restart() ------------------------------------------------------------------------- */ -int AtomVecTDPD::pack_restart(int i, double *buf) +void AtomVecTDPD::grow_pointers() { - int m = 1; - buf[m++] = x[i][0]; - buf[m++] = x[i][1]; - buf[m++] = x[i][2]; - buf[m++] = ubuf(tag[i]).d; - buf[m++] = ubuf(type[i]).d; - buf[m++] = ubuf(mask[i]).d; - buf[m++] = ubuf(image[i]).d; - buf[m++] = v[i][0]; - buf[m++] = v[i][1]; - buf[m++] = v[i][2]; - for(int k = 0; k < cc_species; k++) - buf[m++] = cc[i][k]; - - buf[m++] = vest[i][0]; - buf[m++] = vest[i][1]; - buf[m++] = vest[i][2]; - - if (atom->nextra_restart) - for (int iextra = 0; iextra < atom->nextra_restart; iextra++) - m += modify->fix[atom->extra_restart[iextra]]->pack_restart(i,&buf[m]); - - buf[0] = m; - return m; -} - -/* ---------------------------------------------------------------------- - unpack data for one atom from restart file including extra quantities -------------------------------------------------------------------------- */ - -int AtomVecTDPD::unpack_restart(double *buf) -{ - int nlocal = atom->nlocal; - if (nlocal == nmax) { - grow(0); - if (atom->nextra_store) - memory->grow(atom->extra,nmax,atom->nextra_store,"atom:extra"); - } - - int m = 1; - x[nlocal][0] = buf[m++]; - x[nlocal][1] = buf[m++]; - x[nlocal][2] = buf[m++]; - tag[nlocal] = (tagint) ubuf(buf[m++]).i; - type[nlocal] = (int) ubuf(buf[m++]).i; - mask[nlocal] = (int) ubuf(buf[m++]).i; - image[nlocal] = (imageint) ubuf(buf[m++]).i; - v[nlocal][0] = buf[m++]; - v[nlocal][1] = buf[m++]; - v[nlocal][2] = buf[m++]; - for(int k = 0; k < cc_species; k++) - cc[nlocal][k] = buf[m++]; - - vest[nlocal][0] = buf[m++]; - vest[nlocal][1] = buf[m++]; - vest[nlocal][2] = buf[m++]; - - double **extra = atom->extra; - if (atom->nextra_store) { - int size = static_cast (buf[0]) - m; - for (int i = 0; i < size; i++) extra[nlocal][i] = buf[m++]; - } - - atom->nlocal++; - return m; -} - -/* ---------------------------------------------------------------------- - create one atom of itype at coord - set other values to defaults -------------------------------------------------------------------------- */ - -void AtomVecTDPD::create_atom(int itype, double *coord) -{ - int nlocal = atom->nlocal; - if (nlocal == nmax) grow(0); - - tag[nlocal] = 0; - type[nlocal] = itype; - x[nlocal][0] = coord[0]; - x[nlocal][1] = coord[1]; - x[nlocal][2] = coord[2]; - mask[nlocal] = 1; - image[nlocal] = ((imageint) IMGMAX << IMG2BITS) | - ((imageint) IMGMAX << IMGBITS) | IMGMAX; - v[nlocal][0] = 0.0; - v[nlocal][1] = 0.0; - v[nlocal][2] = 0.0; - - for(int k = 0; k < cc_species; k++) - cc[nlocal][k] = 0.0; - - vest[nlocal][0] = 0.0; - vest[nlocal][1] = 0.0; - vest[nlocal][2] = 0.0; - - atom->nlocal++; -} - -/* ---------------------------------------------------------------------- - unpack one line from Atoms section of data file - initialize other atom quantities -------------------------------------------------------------------------- */ - -void AtomVecTDPD::data_atom(double *coord, imageint imagetmp, char **values) -{ - int nlocal = atom->nlocal; - if (nlocal == nmax) grow(0); - - tag[nlocal] = utils::tnumeric(FLERR,values[0],true,lmp); - type[nlocal] = utils::inumeric(FLERR,values[1],true,lmp); - if (type[nlocal] <= 0 || type[nlocal] > atom->ntypes) - error->one(FLERR,"Invalid atom type in Atoms section of data file"); - - x[nlocal][0] = coord[0]; - x[nlocal][1] = coord[1]; - x[nlocal][2] = coord[2]; - - for(int k = 0; k < cc_species; k++) - cc[nlocal][k] = utils::numeric(FLERR,values[5+k],true,lmp); - - image[nlocal] = imagetmp; - - mask[nlocal] = 1; - v[nlocal][0] = 0.0; - v[nlocal][1] = 0.0; - v[nlocal][2] = 0.0; - - vest[nlocal][0] = 0.0; - vest[nlocal][1] = 0.0; - vest[nlocal][2] = 0.0; - - atom->nlocal++; + cc_flux = atom->cc_flux; + vest = atom->vest; } -/* ---------------------------------------------------------------------- - pack atom info for data file including 3 image flags -------------------------------------------------------------------------- */ - -void AtomVecTDPD::pack_data(double **buf) -{ - int nlocal = atom->nlocal; - for (int i = 0; i < nlocal; i++) { - buf[i][0] = ubuf(tag[i]).d; - buf[i][1] = ubuf(type[i]).d; - buf[i][2] = x[i][0]; - buf[i][3] = x[i][1]; - buf[i][4] = x[i][2]; - buf[i][5] = ubuf((image[i] & IMGMASK) - IMGMAX).d; - buf[i][6] = ubuf((image[i] >> IMGBITS & IMGMASK) - IMGMAX).d; - buf[i][7] = ubuf((image[i] >> IMG2BITS) - IMGMAX).d; - for(int k = 0; k < cc_species; k++) - buf[i][8+k] = cc[i][k]; - } -} /* ---------------------------------------------------------------------- - write atom info to data file including 3 image flags + clear extra forces starting at atom N + nbytes = # of bytes to clear for a per-atom vector ------------------------------------------------------------------------- */ -void AtomVecTDPD::write_data(FILE *fp, int n, double **buf) +void AtomVecTDPD::force_clear(int n, size_t nbytes) { - for (int i = 0; i < n; i++){ - fprintf(fp,TAGINT_FORMAT " %d %-1.16e %-1.16e %-1.16e %d %d %d", - (tagint) ubuf(buf[i][0]).i,(int) ubuf(buf[i][1]).i, - buf[i][2],buf[i][3],buf[i][4], - (int) ubuf(buf[i][5]).i,(int) ubuf(buf[i][6]).i, - (int) ubuf(buf[i][7]).i); - for(int k = 0; k < cc_species; k++) - fprintf(fp," %-1.16e",buf[i][8+k]); - fprintf(fp,"\n"); - } + memset(&cc_flux[n][0],0,cc_species*nbytes); } /* ---------------------------------------------------------------------- - return # of bytes of allocated memory + modify what AtomVec::data_atom() just unpacked + or initialize other atom quantities ------------------------------------------------------------------------- */ -bigint AtomVecTDPD::memory_usage() +void AtomVecTDPD::data_atom_post(int ilocal) { - bigint bytes = 0; - - if (atom->memcheck("tag")) bytes += memory->usage(tag,nmax); - if (atom->memcheck("type")) bytes += memory->usage(type,nmax); - if (atom->memcheck("mask")) bytes += memory->usage(mask,nmax); - if (atom->memcheck("image")) bytes += memory->usage(image,nmax); - if (atom->memcheck("x")) bytes += memory->usage(x,nmax,3); - if (atom->memcheck("v")) bytes += memory->usage(v,nmax,3); - if (atom->memcheck("f")) bytes += memory->usage(f,nmax*comm->nthreads,3); - if (atom->memcheck("cc")) bytes += memory->usage(cc,nmax*comm->nthreads,cc_species); - if (atom->memcheck("cc_flux")) bytes += memory->usage(cc_flux,nmax*comm->nthreads,cc_species); - if (atom->memcheck("vest")) bytes += memory->usage(vest, nmax); - - return bytes; + atom->vest[ilocal][0] = 0.0; + atom->vest[ilocal][1] = 0.0; + atom->vest[ilocal][2] = 0.0; } diff --git a/src/USER-MESODPD/atom_vec_tdpd.h b/src/USER-MESODPD/atom_vec_tdpd.h index 86e9ae4bb81931fefa851320a817fc5d6f89f347..971696cc5c6e8a1a6d5c2d3490d638471a14e717 100644 --- a/src/USER-MESODPD/atom_vec_tdpd.h +++ b/src/USER-MESODPD/atom_vec_tdpd.h @@ -27,40 +27,17 @@ namespace LAMMPS_NS { class AtomVecTDPD : public AtomVec { public: AtomVecTDPD(class LAMMPS *); - virtual ~AtomVecTDPD() {} void process_args(int, char **); - void grow(int); - void grow_reset(); - void copy(int, int, int); + void init(); + + void grow_pointers(); void force_clear(int, size_t); - virtual int pack_comm(int, int *, double *, int, int *); - virtual int pack_comm_vel(int, int *, double *, int, int *); - virtual void unpack_comm(int, int, double *); - virtual void unpack_comm_vel(int, int, double *); - int pack_reverse(int, int, double *); - void unpack_reverse(int, int *, double *); - virtual int pack_border(int, int *, double *, int, int *); - virtual int pack_border_vel(int, int *, double *, int, int *); - virtual void unpack_border(int, int, double *); - virtual void unpack_border_vel(int, int, double *); - virtual int pack_exchange(int, double *); - virtual int unpack_exchange(double *); - int size_restart(); - int pack_restart(int, double *); - int unpack_restart(double *); - void create_atom(int, double *); - void data_atom(double *, imageint, char **); - void pack_data(double **); - void write_data(FILE *, int, double **); - bigint memory_usage(); + void data_atom_post(int); protected: - tagint *tag; - int *type,*mask; - imageint *image; - double **x,**v,**f; - double **vest; // store intermediate velocity for using mvv integrator - double **cc,**cc_flux; + double **cc_flux; + double **vest; + int cc_species; }; diff --git a/src/USER-MESODPD/fix_mvv_edpd.cpp b/src/USER-MESODPD/fix_mvv_edpd.cpp index bd9cd9cc2a33ff922f8fa92fbb5c490f306aae02..3294d8d6821cbd082a0fc9e55dc78b957ab43cb0 100644 --- a/src/USER-MESODPD/fix_mvv_edpd.cpp +++ b/src/USER-MESODPD/fix_mvv_edpd.cpp @@ -88,6 +88,7 @@ void FixMvvEDPD::initial_integrate(int /*vflag*/) double *edpd_flux = atom->edpd_flux; double *edpd_cv = atom->edpd_cv; double **vest = atom->vest; + double *vest_temp = atom->vest_temp; double *rmass = atom->rmass; double *mass = atom->mass; int *type = atom->type; @@ -105,7 +106,7 @@ void FixMvvEDPD::initial_integrate(int /*vflag*/) vest[i][0] = v[i][0] + dtfm * f[i][0]; vest[i][1] = v[i][1] + dtfm * f[i][1]; vest[i][2] = v[i][2] + dtfm * f[i][2]; - vest[i][3] = edpd_temp[i] + dtT * edpd_flux[i]; + vest_temp[i] = edpd_temp[i] + dtT * edpd_flux[i]; x[i][0] += dtv * vest[i][0]; x[i][1] += dtv * vest[i][1]; @@ -131,6 +132,7 @@ void FixMvvEDPD::final_integrate() double *edpd_flux = atom->edpd_flux; double *edpd_cv = atom->edpd_cv; double **vest = atom->vest; + double *vest_temp = atom->vest_temp; double *rmass = atom->rmass; double *mass = atom->mass; int *type = atom->type; @@ -148,7 +150,7 @@ void FixMvvEDPD::final_integrate() v[i][0] = vest[i][0] + dtfm * f[i][0]; v[i][1] = vest[i][1] + dtfm * f[i][1]; v[i][2] = vest[i][2] + dtfm * f[i][2]; - edpd_temp[i] = vest[i][3] + dtT * edpd_flux[i]; + edpd_temp[i] = vest_temp[i] + dtT * edpd_flux[i]; } } diff --git a/src/USER-MISC/README b/src/USER-MISC/README index 91d630e56089442a065d08cabd9afcaef783254b..27b6efb5185d33a1d29e7c318a0cfa6b760f8425 100644 --- a/src/USER-MISC/README +++ b/src/USER-MISC/README @@ -38,6 +38,7 @@ compute momentum, Rupert Nash (University of Edinburgh), r.nash at epcc.ed.ac.uk compute stress/mop, Romain Vermorel (U Pau) & Laurent Joly (U Lyon), romain.vermorel at univ-pau.fr & ljoly.ulyon at gmail.com, 5 Sep 18 compute stress/mop/profile, Romain Vermorel (U Pau) & Laurent Joly (U Lyon), romain.vermorel at univ-pau.fr & ljoly.ulyon at gmail.com, 5 Sep 18 compute temp/rotate, Laurent Joly (U Lyon), ljoly.ulyon at gmail.com, 8 Aug 11 +compute viscosity/cos, Zheng Gong (ENS de Lyon), z.gong@outlook.com, 24 Apr 20 compute PRESSURE/GREM, David Stelter, dstelter@bu.edu, 22 Nov 16 dihedral_style cosine/shift/exp, Carsten Svaneborg, science at zqex.dk, 8 Aug 11 dihedral_style fourier, Loukas Peristeras, loukas.peristeras at scienomics.com, 27 Oct 12 @@ -46,6 +47,7 @@ dihedral_style quadratic, Loukas Peristeras, loukas.peristeras at scienomics.com dihedral_style spherical, Andrew Jewett, jewett.aij@gmail.com, 15 Jul 16 dihedral_style table, Andrew Jewett, jewett.aij@gmail.com, 10 Jan 12 dihedral_style table/cut, Mike Salerno, ksalerno@pha.jhu.edu, 11 May 18 +fix accelerate/cos, Zheng Gong (ENS de Lyon), z.gong@outlook.com, 24 Apr 20 fix addtorque, Laurent Joly (U Lyon), ljoly.ulyon at gmail.com, 8 Aug 11 fix ave/correlate/long, Jorge Ramirez (UPM Madrid), jorge.ramirez at upm.es, 21 Oct 2015 fix electron/stopping, Konstantin Avchaciov, k.avchachov at gmail.com, 26 Feb 2019 diff --git a/src/USER-MISC/compute_viscosity_cos.cpp b/src/USER-MISC/compute_viscosity_cos.cpp new file mode 100644 index 0000000000000000000000000000000000000000..7311f991ccdbfe737ba1e19424e2d73e4a520fb5 --- /dev/null +++ b/src/USER-MISC/compute_viscosity_cos.cpp @@ -0,0 +1,293 @@ +/* ---------------------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + http://lammps.sandia.gov, Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + Copyright (2003) Sandia Corporation. Under the terms of Contract + DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains + certain rights in this software. This software is distributed under + the GNU General Public License. + + See the README file in the top-level LAMMPS directory. +------------------------------------------------------------------------- */ + +/* ---------------------------------------------------------------------- + Contributing author: Zheng GONG (ENS de Lyon, z.gong@outlook.com) +------------------------------------------------------------------------- */ + +#include +#include "compute_viscosity_cos.h" +#include "atom.h" +#include "update.h" +#include "force.h" +#include "domain.h" +#include "comm.h" +#include "group.h" +#include "error.h" +#include "math_const.h" + +using namespace LAMMPS_NS; +using namespace MathConst; + +/* ---------------------------------------------------------------------- */ + +ComputeViscosityCos::ComputeViscosityCos(LAMMPS *lmp, int narg, char **arg) : + Compute(lmp, narg, arg) { + if (narg != 3) error->all(FLERR, "Illegal compute viscosity/cos command"); + + scalar_flag = vector_flag = 1; + size_vector = 7; + extscalar = 0; + extvector = -1; + extlist = new int[7]{1,1,1,1,1,1,0}; + tempflag = 1; + tempbias = 1; + + maxbias = 0; + vbiasall = NULL; + + vector = new double[7]; +} + +/* ---------------------------------------------------------------------- */ + +ComputeViscosityCos::~ComputeViscosityCos() { + if (!copymode) + delete[] vector; +} + +/* ---------------------------------------------------------------------- */ + +void ComputeViscosityCos::setup() { + dynamic = 0; + if (dynamic_user || group->dynamic[igroup]) dynamic = 1; + dof_compute(); +} + +/* ---------------------------------------------------------------------- */ + +void ComputeViscosityCos::dof_compute() { + adjust_dof_fix(); + natoms_temp = group->count(igroup); + dof = domain->dimension * natoms_temp; + dof -= extra_dof + fix_dof; + if (dof > 0.0) tfactor = force->mvv2e / (dof * force->boltz); + else tfactor = 0.0; +} + +/* ---------------------------------------------------------------------- */ +void ComputeViscosityCos::calc_V() { + double zlo = domain->boxlo[2]; + double zhi = domain->boxhi[2]; + + double **x = atom->x; + double **v = atom->v; + double *mass = atom->mass; + double *rmass = atom->rmass; + int *type = atom->type; + int *mask = atom->mask; + int nlocal = atom->nlocal; + + double massone; + + double V_m[2]; + double V_m_local[2] = {0, 0}; + + for (int i = 0; i < nlocal; i++) + if (mask[i] & groupbit) { + if (rmass) massone = rmass[i]; + else massone = mass[type[i]]; + + V_m_local[0] += + 2 * massone * v[i][0] * cos(MY_2PI * (x[i][2] - zlo) / (zhi - zlo)); + V_m_local[1] += massone; + } + + MPI_Allreduce(V_m_local, V_m, 2, MPI_DOUBLE, MPI_SUM, world); + V = V_m[0] / V_m[1]; +} + +/* ---------------------------------------------------------------------- */ + +double ComputeViscosityCos::compute_scalar() { + invoked_scalar = update->ntimestep; + + double zlo = domain->boxlo[2]; + double zhi = domain->boxhi[2]; + + double **x = atom->x; + double **v = atom->v; + double *mass = atom->mass; + double *rmass = atom->rmass; + int *type = atom->type; + int *mask = atom->mask; + int nlocal = atom->nlocal; + + double t = 0.0; + double vx_acc; + double massone; + + calc_V(); + + for (int i = 0; i < nlocal; i++) + if (mask[i] & groupbit) { + if (rmass) massone = rmass[i]; + else massone = mass[type[i]]; + + vx_acc = V * cos(MY_2PI * (x[i][2] - zlo) / (zhi - zlo)); + t += ((v[i][0] - vx_acc) * (v[i][0] - vx_acc) + v[i][1] * v[i][1] + + v[i][2] * v[i][2]) * massone; + } + + MPI_Allreduce(&t, &scalar, 1, MPI_DOUBLE, MPI_SUM, world); + if (dynamic) dof_compute(); + if (dof < 0.0 && natoms_temp > 0.0) + error->all(FLERR, "Temperature compute degrees of freedom < 0"); + scalar *= tfactor; + return scalar; +} + +/* ---------------------------------------------------------------------- */ + +void ComputeViscosityCos::compute_vector() { + int i; + + invoked_vector = update->ntimestep; + + double zlo = domain->boxlo[2]; + double zhi = domain->boxhi[2]; + + double **x = atom->x; + double **v = atom->v; + double *mass = atom->mass; + double *rmass = atom->rmass; + int *type = atom->type; + int *mask = atom->mask; + int nlocal = atom->nlocal; + + double vx_acc; + + double massone, t[6]; + for (i = 0; i < 6; i++) t[i] = 0.0; + + for (i = 0; i < nlocal; i++) + if (mask[i] & groupbit) { + if (rmass) massone = rmass[i]; + else massone = mass[type[i]]; + + vx_acc = V * cos(MY_2PI * (x[i][2] - zlo) / (zhi - zlo)); + t[0] += massone * (v[i][0] - vx_acc) * (v[i][0] - vx_acc); + t[1] += massone * v[i][1] * v[i][1]; + t[2] += massone * v[i][2] * v[i][2]; + t[3] += massone * (v[i][0] - vx_acc) * v[i][1]; + t[4] += massone * (v[i][0] - vx_acc) * v[i][2]; + t[5] += massone * v[i][1] * v[i][2]; + } + + MPI_Allreduce(t, vector, 6, MPI_DOUBLE, MPI_SUM, world); + for (i = 0; i < 6; i++) vector[i] *= force->mvv2e; + vector[6] = V; +} + + +/* ---------------------------------------------------------------------- + remove velocity bias from atom I to leave thermal velocity +------------------------------------------------------------------------- */ + +void ComputeViscosityCos::remove_bias(int i, double *v) { + + double zlo = domain->boxlo[2]; + double zhi = domain->boxhi[2]; + + double **x = atom->x; + + vbias[0] = V * cos(MY_2PI * (x[i][2] - zlo) / (zhi - zlo)); + vbias[1] = 0; + vbias[2] = 0; + v[0] -= vbias[0]; +// v[1] -= vbias[1]; +// v[2] -= vbias[2]; +} + +/* ---------------------------------------------------------------------- + remove velocity bias from atom I to leave thermal velocity +------------------------------------------------------------------------- */ + +void ComputeViscosityCos::remove_bias_thr(int i, double *v, double *b) { + double zlo = domain->boxlo[2]; + double zhi = domain->boxhi[2]; + + double **x = atom->x; + + b[0] = V * cos(MY_2PI * (x[i][2] - zlo) / (zhi - zlo)); + b[1] = 0; + b[2] = 0; + v[0] -= b[0]; +// v[1] -= b[1]; +// v[2] -= b[2]; +} + +/* ---------------------------------------------------------------------- + remove velocity bias from all atoms to leave thermal velocity +------------------------------------------------------------------------- */ + +void ComputeViscosityCos::remove_bias_all() { + double zlo = domain->boxlo[2]; + double zhi = domain->boxhi[2]; + + double **x = atom->x; + double **v = atom->v; + int *mask = atom->mask; + int nlocal = atom->nlocal; + + for (int i = 0; i < nlocal; i++) + if (mask[i] & groupbit) { + vbiasall[i][0] = V * cos(MY_2PI * (x[i][2] - zlo) / (zhi - zlo)); + vbiasall[i][1] = 0; + vbiasall[i][2] = 0; + v[i][0] -= vbiasall[i][0]; +// v[i][1] -= vbiasall[i][1]; +// v[i][2] -= vbiasall[i][2]; + } +} + +/* ---------------------------------------------------------------------- + add back in velocity bias to atom I removed by remove_bias() + assume remove_bias() was previously called +------------------------------------------------------------------------- */ + +void ComputeViscosityCos::restore_bias(int /* i */, double *v) { + v[0] += vbias[0]; + v[1] += vbias[1]; + v[2] += vbias[2]; +} + +/* ---------------------------------------------------------------------- + add back in velocity bias to atom I removed by remove_bias_thr() + assume remove_bias_thr() was previously called with the same buffer b +------------------------------------------------------------------------- */ + +void ComputeViscosityCos::restore_bias_thr(int /* i */, double *v, double *b) { + v[0] += b[0]; + v[1] += b[1]; + v[2] += b[2]; +} + +/* ---------------------------------------------------------------------- + add back in velocity bias to all atoms removed by remove_bias_all() + assume remove_bias_all() was previously called +------------------------------------------------------------------------- */ + +void ComputeViscosityCos::restore_bias_all() { + double **v = atom->v; + int *mask = atom->mask; + int nlocal = atom->nlocal; + + for (int i = 0; i < nlocal; i++) + if (mask[i] & groupbit) { + v[i][0] += vbiasall[i][0]; + v[i][1] += vbiasall[i][1]; + v[i][2] += vbiasall[i][2]; + } +} + diff --git a/src/USER-MISC/compute_viscosity_cos.h b/src/USER-MISC/compute_viscosity_cos.h new file mode 100644 index 0000000000000000000000000000000000000000..7bc27a9541b844286003d075bab28a545754327b --- /dev/null +++ b/src/USER-MISC/compute_viscosity_cos.h @@ -0,0 +1,73 @@ +/* -*- c++ -*- ---------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + http://lammps.sandia.gov, Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + Copyright (2003) Sandia Corporation. Under the terms of Contract + DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains + certain rights in this software. This software is distributed under + the GNU General Public License. + + See the README file in the top-level LAMMPS directory. +------------------------------------------------------------------------- */ + +/* ---------------------------------------------------------------------- + Contributing author: Zheng GONG (ENS de Lyon, z.gong@outlook.com) +------------------------------------------------------------------------- */ + +#ifdef COMPUTE_CLASS + +ComputeStyle(viscosity/cos,ComputeViscosityCos) + +#else + +#ifndef LMP_COMPUTE_VISCOSITY_COS_H +#define LMP_COMPUTE_VISCOSITY_COS_H + +#include "compute.h" + +namespace LAMMPS_NS { + +class ComputeViscosityCos : public Compute { + public: + ComputeViscosityCos(class LAMMPS *, int, char **); + virtual ~ComputeViscosityCos(); + void init() {} + void setup(); + virtual double compute_scalar(); + virtual void compute_vector(); + + void remove_bias(int, double *); + void remove_bias_thr(int, double *, double *); + void remove_bias_all(); + void restore_bias(int, double *); + void restore_bias_thr(int, double *, double *); + void restore_bias_all(); + + protected: + double tfactor; + double V; + + void dof_compute(); + void calc_V(); +}; + +} + +#endif +#endif + +/* ERROR/WARNING messages: + +E: Illegal ... command + +Self-explanatory. Check the input script syntax and compare to the +documentation for the command. You can use -echo screen as a +command-line option when running LAMMPS to see the offending line. + +E: Temperature compute degrees of freedom < 0 + +This should not happen if you are calculating the temperature +on a valid set of atoms. + +*/ diff --git a/src/USER-MISC/dihedral_nharmonic.cpp b/src/USER-MISC/dihedral_nharmonic.cpp index 56254a5c03251c54dfcc22cd12568b37682be369..81010a040e954fb27613d2f9a2d0d2096881bf4c 100644 --- a/src/USER-MISC/dihedral_nharmonic.cpp +++ b/src/USER-MISC/dihedral_nharmonic.cpp @@ -47,7 +47,7 @@ DihedralNHarmonic::~DihedralNHarmonic() if (allocated) { memory->destroy(setflag); for (int i = 1; i <= atom->ndihedraltypes; i++) - delete [] a[i]; + if ( a[i] ) delete [] a[i]; delete [] a; delete [] nterms; } @@ -261,8 +261,9 @@ void DihedralNHarmonic::allocate() allocated = 1; int n = atom->ndihedraltypes; - memory->create(nterms,n+1,"dihedral:nt"); - a = new double * [n+1]; + nterms = new int[n+1]; + a = new double *[n+1]; + for (int i = 1; i <= n; i++) a[i] = 0; memory->create(setflag,n+1,"dihedral:setflag"); for (int i = 1; i <= n; i++) setflag[i] = 0; diff --git a/src/USER-MISC/fix_accelerate_cos.cpp b/src/USER-MISC/fix_accelerate_cos.cpp new file mode 100644 index 0000000000000000000000000000000000000000..88e33023fd4dc9682f8aca4ec0f71d2622f8915c --- /dev/null +++ b/src/USER-MISC/fix_accelerate_cos.cpp @@ -0,0 +1,85 @@ +/* ---------------------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + http://lammps.sandia.gov, Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + Copyright (2003) Sandia Corporation. Under the terms of Contract + DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains + certain rights in this software. This software is distributed under + the GNU General Public License. + + See the README file in the top-level LAMMPS directory. +------------------------------------------------------------------------- */ + +/* ---------------------------------------------------------------------- + Contributing author: Zheng GONG (ENS de Lyon, z.gong@outlook.com) +------------------------------------------------------------------------- */ + +#include "fix_accelerate_cos.h" +#include "atom.h" +#include "update.h" +#include "modify.h" +#include "domain.h" +#include "region.h" +#include "respa.h" +#include "input.h" +#include "variable.h" +#include "memory.h" +#include "error.h" +#include "force.h" +#include "math_const.h" + +using namespace LAMMPS_NS; +using namespace FixConst; + +/* ---------------------------------------------------------------------- */ + +FixAccelerateCos::FixAccelerateCos(LAMMPS *lmp, int narg, char **arg) : + Fix(lmp, narg, arg) { + if (narg < 4) error->all(FLERR, "Illegal fix accelerate/cos command"); + acceleration = force->numeric(FLERR, arg[3]); + if (domain->dimension == 2) + error->all(FLERR,"Fix accelerate/cos cannot be used with 2d systems"); +} + +/* ---------------------------------------------------------------------- */ + +int FixAccelerateCos::setmask() { + int mask = 0; + mask |= POST_FORCE; + return mask; +} + +/* ---------------------------------------------------------------------- */ + +void FixAccelerateCos::setup(int vflag) { + post_force(vflag); +} + +/* ---------------------------------------------------------------------- */ + +void FixAccelerateCos::post_force(int /* vflag */) { + double **x = atom->x; + double **f = atom->f; + int *type = atom->type; + double *mass = atom->mass; + double *rmass = atom->rmass; + int *mask = atom->mask; + int nlocal = atom->nlocal; + + double massone, force_x, acc_x; + double zlo = domain->boxlo[2]; + double zhi = domain->boxhi[2]; + + for (int i = 0; i < nlocal; i++) + if (mask[i] & groupbit) { + if (rmass) massone = rmass[i]; + else massone = mass[type[i]]; + + acc_x = acceleration * + cos(MathConst::MY_2PI * (x[i][2] - zlo) / (zhi - zlo)); + force_x = acc_x * massone * force->mvv2e; + + f[i][0] += force_x; + } +} diff --git a/src/USER-MISC/fix_accelerate_cos.h b/src/USER-MISC/fix_accelerate_cos.h new file mode 100644 index 0000000000000000000000000000000000000000..e1e6c9f1b9663898eef3a4f87989417e923e1fb8 --- /dev/null +++ b/src/USER-MISC/fix_accelerate_cos.h @@ -0,0 +1,61 @@ +/* -*- c++ -*- ---------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + http://lammps.sandia.gov, Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + Copyright (2003) Sandia Corporation. Under the terms of Contract + DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains + certain rights in this software. This software is distributed under + the GNU General Public License. + + See the README file in the top-level LAMMPS directory. +------------------------------------------------------------------------- */ + +/* ---------------------------------------------------------------------- + Contributing author: Zheng GONG (ENS de Lyon, z.gong@outlook.com) +------------------------------------------------------------------------- */ + +#ifdef FIX_CLASS + +FixStyle(accelerate/cos,FixAccelerateCos) + +#else + +#ifndef LMP_FIX_ACCELERATE_COS_H +#define LMP_FIX_ACCELERATE_COS_H + +#include "fix.h" + +namespace LAMMPS_NS { + +class FixAccelerateCos: public Fix { + public: + FixAccelerateCos(class LAMMPS *, int, char **); + virtual ~FixAccelerateCos() {}; + int setmask(); + virtual void init() {}; + void setup(int); + virtual void post_force(int); + + protected: + double acceleration; +}; + +} + +#endif +#endif + +/* ERROR/WARNING messages: + +E: Illegal ... command + +Self-explanatory. Check the input script syntax and compare to the +documentation for the command. You can use -echo screen as a +command-line option when running LAMMPS to see the offending line. + +E: Fix accelerate/cos cannot be used with 2d systems + +Self-explanatory. + +*/ diff --git a/src/USER-MISC/fix_ave_correlate_long.cpp b/src/USER-MISC/fix_ave_correlate_long.cpp index 3a28e47cda0077797f1a38c886cbcae4b955dc5c..4d548d585a3baefbc87cab263aa17b5954102b25 100644 --- a/src/USER-MISC/fix_ave_correlate_long.cpp +++ b/src/USER-MISC/fix_ave_correlate_long.cpp @@ -495,7 +495,7 @@ void FixAveCorrelateLong::end_of_step() if(overwrite) fseek(fp,filepos,SEEK_SET); fprintf(fp,"# Timestep: " BIGINT_FORMAT "\n", ntimestep); for (unsigned int i=0;idt); + fprintf(fp, "%lg ", t[i]*update->dt*nevery); for (int j=0;jcount_words(line); + nwords = utils::count_words(line); if (nwords == 0) continue; ptr = strtok(line," \t\n\r\f"); @@ -323,7 +324,7 @@ FixGLE::FixGLE(LAMMPS *lmp, int narg, char **arg) : if ((ptr = strchr(line,'#'))) *ptr = '\0'; - nwords = atom->count_words(line); + nwords = utils::count_words(line); if (nwords == 0) continue; ptr = strtok(line," \t\n\r\f"); diff --git a/src/USER-MISC/fix_imd.cpp b/src/USER-MISC/fix_imd.cpp index 10aaa285a540c76cb76a5b128e157a636d0341bf..266142b52919bb59c22ce772afc4f80629c3801f 100644 --- a/src/USER-MISC/fix_imd.cpp +++ b/src/USER-MISC/fix_imd.cpp @@ -1237,7 +1237,7 @@ void *imdsock_accept(void * v) { #elif defined(SOCKLEN_T) SOCKLEN_T len; #define _SOCKLEN_TYPE SOCKLEN_T -#elif defined(_POSIX_SOURCE) || (defined(__APPLE__) && defined(__MACH__)) || defined(__linux) +#elif defined(_POSIX_SOURCE) || (defined(__APPLE__) && defined(__MACH__)) || defined(__linux__) || defined(__FreeBSD__) || defined(__DragonFly__) || defined(__OpenBSD__) || defined(__NetBSD__) socklen_t len; #define _SOCKLEN_TYPE socklen_t #else diff --git a/src/USER-MISC/fix_npt_cauchy.cpp b/src/USER-MISC/fix_npt_cauchy.cpp index 1b0deb5ae3f66f0eaa67ab79643ef52ab2d39749..7a4a34bd00200b603cceefe3d5baa60fe742b49f 100644 --- a/src/USER-MISC/fix_npt_cauchy.cpp +++ b/src/USER-MISC/fix_npt_cauchy.cpp @@ -492,8 +492,12 @@ FixNPTCauchy::FixNPTCauchy(LAMMPS *lmp, int narg, char **arg) : if (p_flag[i]) pstat_flag = 1; if (pstat_flag) { - if (p_flag[0] || p_flag[1] || p_flag[2]) box_change_size = 1; - if (p_flag[3] || p_flag[4] || p_flag[5]) box_change_shape = 1; + if (p_flag[0]) box_change |= BOX_CHANGE_X; + if (p_flag[1]) box_change |= BOX_CHANGE_Y; + if (p_flag[2]) box_change |= BOX_CHANGE_Z; + if (p_flag[3]) box_change |= BOX_CHANGE_YZ; + if (p_flag[4]) box_change |= BOX_CHANGE_XZ; + if (p_flag[5]) box_change |= BOX_CHANGE_XY; no_change_box = 1; if (allremap == 0) restart_pbc = 1; diff --git a/src/USER-MISC/fix_pimd.cpp b/src/USER-MISC/fix_pimd.cpp index 73e1ff434cfe8f8c1fc0e2d222d6fc5d823b4b36..c73f802362e408fb4aee0c2fa7efe4a17d85b017 100644 --- a/src/USER-MISC/fix_pimd.cpp +++ b/src/USER-MISC/fix_pimd.cpp @@ -32,11 +32,13 @@ #include "atom.h" #include "domain.h" #include "update.h" +#include "math_const.h" #include "memory.h" #include "error.h" using namespace LAMMPS_NS; using namespace FixConst; +using namespace MathConst; enum{PIMD,NMPIMD,CMD}; @@ -165,7 +167,7 @@ void FixPIMD::init() const double Boltzmann = 1.3806488E-23; // SI unit: J/K const double Plank = 6.6260755E-34; // SI unit: m^2 kg / s - double hbar = Plank / ( 2.0 * M_PI ) * sp; + double hbar = Plank / ( 2.0 * MY_PI ) * sp; double beta = 1.0 / ( Boltzmann * input.nh_temp); // - P / ( beta^2 * hbar^2) SI unit: s^-2 @@ -181,7 +183,7 @@ void FixPIMD::init() const double Boltzmann = force->boltz; const double Plank = force->hplanck; - double hbar = Plank / ( 2.0 * M_PI ); + double hbar = Plank / ( 2.0 * MY_PI ); double beta = 1.0 / (Boltzmann * nhc_temp); double _fbond = 1.0 * np / (beta*beta*hbar*hbar) ; @@ -429,7 +431,7 @@ void FixPIMD::nmpimd_init() for(int i=2; i<=np/2; i++) { - lam[2*i-3] = lam[2*i-2] = 2.0 * np * (1.0 - 1.0 *cos(2.0*M_PI*(i-1)/np)); + lam[2*i-3] = lam[2*i-2] = 2.0 * np * (1.0 - 1.0 *cos(2.0*MY_PI*(i-1)/np)); } // Set up eigenvectors for non-degenerated modes @@ -444,8 +446,8 @@ void FixPIMD::nmpimd_init() for(int i=0; i<(np-1)/2; i++) for(int j=0; jinumeric(FLERR,inArgv[4]); n[2] = force->inumeric(FLERR,inArgv[5]); - mK[0] = n[0]*(2*M_PI / (domain->boxhi[0] - domain->boxlo[0])); - mK[1] = n[1]*(2*M_PI / (domain->boxhi[1] - domain->boxlo[1])); - mK[2] = n[2]*(2*M_PI / (domain->boxhi[2] - domain->boxlo[2])); + mK[0] = n[0]*(2*MY_PI / (domain->boxhi[0] - domain->boxlo[0])); + mK[1] = n[1]*(2*MY_PI / (domain->boxhi[1] - domain->boxlo[1])); + mK[2] = n[2]*(2*MY_PI / (domain->boxhi[2] - domain->boxlo[2])); mKappa = force->numeric(FLERR,inArgv[6]); mRhoK0 = force->numeric(FLERR,inArgv[7]); diff --git a/src/USER-MISC/fix_srp.cpp b/src/USER-MISC/fix_srp.cpp index c0db252db483786e55e8462818e1966e36694d7f..2a96555fd798458dcf4fa787963ddd66af0f479c 100644 --- a/src/USER-MISC/fix_srp.cpp +++ b/src/USER-MISC/fix_srp.cpp @@ -22,6 +22,7 @@ #include "atom.h" #include "force.h" #include "domain.h" +#include "modify.h" #include "comm.h" #include "memory.h" #include "error.h" @@ -112,19 +113,21 @@ void FixSRP::init() if ((bptype < 1) || (bptype > atom->ntypes)) error->all(FLERR,"Illegal bond particle type"); - // fix SRP should be the first fix running at the PRE_EXCHANGE step. - // Otherwise it might conflict with, e.g. fix deform + // this fix must come before any fix which migrates atoms in its pre_exchange() + // b/c this fix's pre_exchange() creates per-atom data structure + // that data must be current for atom migration to carry it along - if (modify->n_pre_exchange > 1) { - char *first = modify->fix[modify->list_pre_exchange[0]]->id; - if ((comm->me == 0) && (strcmp(id,first) != 0)) - error->warning(FLERR,"Internal fix for pair srp defined too late." - " May lead to incorrect behavior."); + for (int i = 0; i < modify->nfix; i++) { + if (modify->fix[i] == this) break; + if (modify->fix[i]->pre_exchange_migrate) + error->all(FLERR,"Fix SRP comes after a fix which " + "migrates atoms in pre_exchange"); } // setup neigh exclusions for diff atom types // bond particles do not interact with other types // type bptype only interacts with itself + char* arg1[4]; arg1[0] = (char *) "exclude"; arg1[1] = (char *) "type"; diff --git a/src/USER-MISC/pair_agni.cpp b/src/USER-MISC/pair_agni.cpp index a03e24ed35449e0c402450e641f88bf369eb1e74..4941f2c7b3eaa84ce030bba393d9ba1a1efc590e 100644 --- a/src/USER-MISC/pair_agni.cpp +++ b/src/USER-MISC/pair_agni.cpp @@ -31,6 +31,7 @@ #include "citeme.h" #include "math_special.h" #include "math_const.h" +#include "utils.h" using namespace LAMMPS_NS; using namespace MathSpecial; @@ -387,7 +388,7 @@ void PairAGNI::read_file(char *file) // strip comment, skip line if blank if ((ptr = strchr(line,'#'))) *ptr = '\0'; - nwords = atom->count_words(line); + nwords = utils::count_words(line); if (nwords == 0) continue; if (nwords > MAXWORD) diff --git a/src/USER-MISC/pair_drip.cpp b/src/USER-MISC/pair_drip.cpp index 020216f50336dfb97f8e8aeb47efa58d9f1c3ae9..e6b0e5acc6bc59ab2c73eb48cca2ae8eb6916104 100644 --- a/src/USER-MISC/pair_drip.cpp +++ b/src/USER-MISC/pair_drip.cpp @@ -33,6 +33,7 @@ #include "neigh_request.h" #include "memory.h" #include "error.h" +#include "utils.h" using namespace LAMMPS_NS; @@ -116,8 +117,8 @@ void PairDRIP::allocate() void PairDRIP::settings(int narg, char ** /* arg */) { if (narg != 0) error->all(FLERR,"Illegal pair_style command"); - if (strcmp(force->pair_style,"hybrid/overlay")!=0) - error->all(FLERR,"ERROR: requires hybrid/overlay pair_style"); + if (!utils::strmatch(force->pair_style,"^hybrid/overlay")) + error->all(FLERR,"Pair style drip must be used as sub-style with hybrid/overlay"); } /* ---------------------------------------------------------------------- @@ -253,7 +254,7 @@ void PairDRIP::read_file(char *filename) // strip comment, skip line if blank if ((ptr = strchr(line,'#'))) *ptr = '\0'; - nwords = atom->count_words(line); + nwords = utils::count_words(line); if (nwords == 0) continue; // concatenate additional lines until have params_per_line words @@ -272,7 +273,7 @@ void PairDRIP::read_file(char *filename) MPI_Bcast(&n,1,MPI_INT,0,world); MPI_Bcast(line,n,MPI_CHAR,0,world); if ((ptr = strchr(line,'#'))) *ptr = '\0'; - nwords = atom->count_words(line); + nwords = utils::count_words(line); } if (nwords != params_per_line) diff --git a/src/USER-MISC/pair_edip.cpp b/src/USER-MISC/pair_edip.cpp index 8dee4a606b3002efa3ecf6ebed5609cc8321f0e0..d873a04c39e6802425abbd677b26a5e49cca80f5 100644 --- a/src/USER-MISC/pair_edip.cpp +++ b/src/USER-MISC/pair_edip.cpp @@ -35,6 +35,7 @@ #include "comm.h" #include "memory.h" #include "error.h" +#include "utils.h" using namespace LAMMPS_NS; @@ -905,7 +906,7 @@ void PairEDIP::read_file(char *file) // strip comment, skip line if blank if ((ptr = strchr(line,'#'))) *ptr = '\0'; - nwords = atom->count_words(line); + nwords = utils::count_words(line); if (nwords == 0) continue; // concatenate additional lines until have params_per_line words @@ -924,7 +925,7 @@ void PairEDIP::read_file(char *file) MPI_Bcast(&n,1,MPI_INT,0,world); MPI_Bcast(line,n,MPI_CHAR,0,world); if ((ptr = strchr(line,'#'))) *ptr = '\0'; - nwords = atom->count_words(line); + nwords = utils::count_words(line); } if (nwords != params_per_line) diff --git a/src/USER-MISC/pair_edip_multi.cpp b/src/USER-MISC/pair_edip_multi.cpp index 9f953610de618957ea0ebfdba59e2087f4f00007..cfda5c1a7c44491d312362b02e8814cb787e6263 100644 --- a/src/USER-MISC/pair_edip_multi.cpp +++ b/src/USER-MISC/pair_edip_multi.cpp @@ -31,6 +31,7 @@ #include "memory.h" #include "error.h" #include "citeme.h" +#include "utils.h" using namespace LAMMPS_NS; @@ -671,7 +672,7 @@ void PairEDIPMulti::read_file(char *file) // strip comment, skip line if blank if ((ptr = strchr(line,'#'))) *ptr = '\0'; - nwords = atom->count_words(line); + nwords = utils::count_words(line); if (nwords == 0) continue; // concatenate additional lines until have params_per_line words @@ -690,7 +691,7 @@ void PairEDIPMulti::read_file(char *file) MPI_Bcast(&n,1,MPI_INT,0,world); MPI_Bcast(line,n,MPI_CHAR,0,world); if ((ptr = strchr(line,'#'))) *ptr = '\0'; - nwords = atom->count_words(line); + nwords = utils::count_words(line); } if (nwords != params_per_line) diff --git a/src/USER-MISC/pair_extep.cpp b/src/USER-MISC/pair_extep.cpp index 62ef24da85981b65508eb883ae64562db6c8b2f4..2036df7addc1cb07c2d01d005b9840ceaff3f168 100644 --- a/src/USER-MISC/pair_extep.cpp +++ b/src/USER-MISC/pair_extep.cpp @@ -30,6 +30,7 @@ #include "comm.h" #include "memory.h" #include "error.h" +#include "utils.h" #include "math_const.h" @@ -619,7 +620,7 @@ void PairExTeP::read_file(char *file) // strip comment, skip line if blank if ((ptr = strchr(line,'#'))) *ptr = '\0'; - nwords = atom->count_words(line); + nwords = utils::count_words(line); if (nwords == 0) continue; // concatenate additional lines until have params_per_line words @@ -638,7 +639,7 @@ void PairExTeP::read_file(char *file) MPI_Bcast(&n,1,MPI_INT,0,world); MPI_Bcast(line,n,MPI_CHAR,0,world); if ((ptr = strchr(line,'#'))) *ptr = '\0'; - nwords = atom->count_words(line); + nwords = utils::count_words(line); } if (nwords != params_per_line) @@ -744,7 +745,7 @@ void PairExTeP::read_file(char *file) // strip comment, skip line if blank if ((ptr = strchr(line,'#'))) *ptr = '\0'; - nwords = atom->count_words(line); + nwords = utils::count_words(line); if (nwords == 0) continue; // words = ptrs to all words in line diff --git a/src/USER-MISC/pair_ilp_graphene_hbn.cpp b/src/USER-MISC/pair_ilp_graphene_hbn.cpp index cf77f7e1ee4701e398f4a7b55df1afa7ee36eb63..32689307c0591450d429802e19f269b14a70a655 100644 --- a/src/USER-MISC/pair_ilp_graphene_hbn.cpp +++ b/src/USER-MISC/pair_ilp_graphene_hbn.cpp @@ -34,6 +34,7 @@ #include "my_page.h" #include "memory.h" #include "error.h" +#include "utils.h" using namespace LAMMPS_NS; @@ -286,7 +287,7 @@ void PairILPGrapheneHBN::read_file(char *filename) // strip comment, skip line if blank if ((ptr = strchr(line,'#'))) *ptr = '\0'; - nwords = atom->count_words(line); + nwords = utils::count_words(line); if (nwords == 0) continue; // concatenate additional lines until have params_per_line words @@ -305,7 +306,7 @@ void PairILPGrapheneHBN::read_file(char *filename) MPI_Bcast(&n,1,MPI_INT,0,world); MPI_Bcast(line,n,MPI_CHAR,0,world); if ((ptr = strchr(line,'#'))) *ptr = '\0'; - nwords = atom->count_words(line); + nwords = utils::count_words(line); } if (nwords != params_per_line) diff --git a/src/USER-MISC/pair_kolmogorov_crespi_full.cpp b/src/USER-MISC/pair_kolmogorov_crespi_full.cpp index 3f624fc78574410b8c22d5135579759aa78d1b8d..f5f2a6ca016ac70044b5bb653982887eac80d208 100644 --- a/src/USER-MISC/pair_kolmogorov_crespi_full.cpp +++ b/src/USER-MISC/pair_kolmogorov_crespi_full.cpp @@ -34,6 +34,7 @@ #include "my_page.h" #include "memory.h" #include "error.h" +#include "utils.h" using namespace LAMMPS_NS; @@ -287,7 +288,7 @@ void PairKolmogorovCrespiFull::read_file(char *filename) // strip comment, skip line if blank if ((ptr = strchr(line,'#'))) *ptr = '\0'; - nwords = atom->count_words(line); + nwords = utils::count_words(line); if (nwords == 0) continue; // concatenate additional lines until have params_per_line words @@ -306,7 +307,7 @@ void PairKolmogorovCrespiFull::read_file(char *filename) MPI_Bcast(&n,1,MPI_INT,0,world); MPI_Bcast(line,n,MPI_CHAR,0,world); if ((ptr = strchr(line,'#'))) *ptr = '\0'; - nwords = atom->count_words(line); + nwords = utils::count_words(line); } if (nwords != params_per_line) diff --git a/src/USER-MISC/pair_kolmogorov_crespi_z.cpp b/src/USER-MISC/pair_kolmogorov_crespi_z.cpp index 61c326ac879c9164320cb631b3b98412aa28f841..07f0a766e41a88d5c567c5c22594452c76c66a9e 100644 --- a/src/USER-MISC/pair_kolmogorov_crespi_z.cpp +++ b/src/USER-MISC/pair_kolmogorov_crespi_z.cpp @@ -32,6 +32,7 @@ #include "neigh_list.h" #include "memory.h" #include "error.h" +#include "utils.h" using namespace LAMMPS_NS; @@ -345,7 +346,7 @@ void PairKolmogorovCrespiZ::read_file(char *filename) // strip comment, skip line if blank if ((ptr = strchr(line,'#'))) *ptr = '\0'; - nwords = atom->count_words(line); + nwords = utils::count_words(line); if (nwords == 0) continue; // concatenate additional lines until have params_per_line words @@ -364,7 +365,7 @@ void PairKolmogorovCrespiZ::read_file(char *filename) MPI_Bcast(&n,1,MPI_INT,0,world); MPI_Bcast(line,n,MPI_CHAR,0,world); if ((ptr = strchr(line,'#'))) *ptr = '\0'; - nwords = atom->count_words(line); + nwords = utils::count_words(line); } if (nwords != params_per_line) diff --git a/src/USER-MISC/pair_lebedeva_z.cpp b/src/USER-MISC/pair_lebedeva_z.cpp index 8930042cef76b15ac18cc2e86a004e0413c6e702..f6464153e5ecde3eacc003b5b56430e4eb1feb8e 100644 --- a/src/USER-MISC/pair_lebedeva_z.cpp +++ b/src/USER-MISC/pair_lebedeva_z.cpp @@ -33,6 +33,7 @@ #include "neigh_list.h" #include "memory.h" #include "error.h" +#include "utils.h" using namespace LAMMPS_NS; @@ -341,7 +342,7 @@ void PairLebedevaZ::read_file(char *filename) // strip comment, skip line if blank if ((ptr = strchr(line,'#'))) *ptr = '\0'; - nwords = atom->count_words(line); + nwords = utils::count_words(line); if (nwords == 0) continue; // concatenate additional lines until have params_per_line words @@ -360,7 +361,7 @@ void PairLebedevaZ::read_file(char *filename) MPI_Bcast(&n,1,MPI_INT,0,world); MPI_Bcast(line,n,MPI_CHAR,0,world); if ((ptr = strchr(line,'#'))) *ptr = '\0'; - nwords = atom->count_words(line); + nwords = utils::count_words(line); } if (nwords != params_per_line) diff --git a/src/USER-MISC/pair_meam_spline.cpp b/src/USER-MISC/pair_meam_spline.cpp index 27deff9a6ec3ee780af13751d6834587b4d1e500..2b47b3dea666c4f8cb30ef76bfff915c7f703bb5 100644 --- a/src/USER-MISC/pair_meam_spline.cpp +++ b/src/USER-MISC/pair_meam_spline.cpp @@ -717,6 +717,7 @@ void PairMEAMSpline::SplineFunction::prepareSpline(Error* error) Y2[i] /= h*6.0; #endif } + inv_h = (1/h); xmax_shifted = xmax - xmin; } @@ -732,6 +733,7 @@ void PairMEAMSpline::SplineFunction::communicate(MPI_Comm& world, int me) MPI_Bcast(&isGridSpline, 1, MPI_INT, 0, world); MPI_Bcast(&h, 1, MPI_DOUBLE, 0, world); MPI_Bcast(&hsq, 1, MPI_DOUBLE, 0, world); + MPI_Bcast(&inv_h, 1, MPI_DOUBLE, 0, world); if(me != 0) { X = new double[N]; Xs = new double[N]; diff --git a/src/USER-MISC/pair_meam_spline.h b/src/USER-MISC/pair_meam_spline.h index 7b5ff3bf6d62c99a9d96c89fee31a774cd5c9c66..2e6e7e00f3be10d5a561bff977adeccd2eadbcc6 100644 --- a/src/USER-MISC/pair_meam_spline.h +++ b/src/USER-MISC/pair_meam_spline.h @@ -142,7 +142,7 @@ protected: ((a*a*a - a) * Y2[klo] + (b*b*b - b) * Y2[khi])*(h*h)/6.0; #else // For a spline with regular grid, we directly calculate the interval X is in. - int klo = (int)(x / h); + int klo = (int)(x*inv_h); int khi = klo + 1; double a = Xs[khi] - x; double b = h - a; @@ -186,7 +186,7 @@ protected: (b*b*b - b) * Y2[khi]) * (h*h) / 6.0; #else // For a spline with regular grid, we directly calculate the interval X is in. - int klo = (int)(x / h); + int klo = (int)(x*inv_h); int khi = klo + 1; double a = Xs[khi] - x; double b = h - a; @@ -224,6 +224,7 @@ protected: int isGridSpline;// Indicates that all spline knots are on a regular grid. double h; // The distance between knots if this is a grid spline with equidistant knots. double hsq; // The squared distance between knots if this is a grid spline with equidistant knots. + double inv_h; // (1/h), used to avoid numerical errors in binnning for grid spline with equidistant knots. double xmax_shifted; // The end of the spline interval after it has been shifted to begin at X=0. }; diff --git a/src/USER-MISC/pair_meam_sw_spline.cpp b/src/USER-MISC/pair_meam_sw_spline.cpp index 73d6c81004392ae042cf84df6e5a168d5f3cf88a..8d33a6f04fc9af14e5cdbaaa39215224a90f5691 100644 --- a/src/USER-MISC/pair_meam_sw_spline.cpp +++ b/src/USER-MISC/pair_meam_sw_spline.cpp @@ -674,6 +674,7 @@ void PairMEAMSWSpline::SplineFunction::prepareSpline(Error* error) Y2[i] /= h*6.0; #endif } + inv_h = 1/h; xmax_shifted = xmax - xmin; } @@ -689,6 +690,7 @@ void PairMEAMSWSpline::SplineFunction::communicate(MPI_Comm& world, int me) MPI_Bcast(&isGridSpline, 1, MPI_INT, 0, world); MPI_Bcast(&h, 1, MPI_DOUBLE, 0, world); MPI_Bcast(&hsq, 1, MPI_DOUBLE, 0, world); + MPI_Bcast(&inv_h, 1, MPI_DOUBLE, 0, world); if(me != 0) { X = new double[N]; Xs = new double[N]; diff --git a/src/USER-MISC/pair_meam_sw_spline.h b/src/USER-MISC/pair_meam_sw_spline.h index 9398619b638eb542160cd97f16f273fa0aba610d..b4480050db19c62da8ff2ceb36d305bd44caa0b0 100644 --- a/src/USER-MISC/pair_meam_sw_spline.h +++ b/src/USER-MISC/pair_meam_sw_spline.h @@ -130,7 +130,7 @@ protected: #else // For a spline with grid points, we can directly calculate the interval X is in. // - int klo = (int)(x / h); + int klo = (int)(x*inv_h); if ( klo > N - 2 ) klo = N - 2; int khi = klo + 1; double a = Xs[khi] - x; @@ -170,7 +170,7 @@ protected: return a * Y[klo] + b * Y[khi] + ((a*a*a - a) * Y2[klo] + (b*b*b - b) * Y2[khi]) * (h*h) / 6.0; #else // For a spline with grid points, we can directly calculate the interval X is in. - int klo = (int)(x / h); + int klo = (int)(x*inv_h); if ( klo > N - 2 ) klo = N - 2; int khi = klo + 1; double a = Xs[khi] - x; @@ -207,6 +207,7 @@ protected: int isGridSpline; // Indicates that all spline knots are on a regular grid. double h; // The distance between knots if this is a grid spline with equidistant knots. double hsq; // The squared distance between knots if this is a grid spline with equidistant knots. + double inv_h; // (1/h), used to avoid numerical errors in binnning for grid spline with equidistant knots. double xmax_shifted; // The end of the spline interval after it has been shifted to begin at X=0. }; diff --git a/src/USER-MISC/pair_srp.cpp b/src/USER-MISC/pair_srp.cpp index 606fdc9fc54b18b8c09119a877300ac4da99c96a..d0e73b265d5340a36d672fa9be7cf8c001de0d7d 100644 --- a/src/USER-MISC/pair_srp.cpp +++ b/src/USER-MISC/pair_srp.cpp @@ -79,13 +79,18 @@ PairSRP::PairSRP(LAMMPS *lmp) : Pair(lmp) segment = NULL; // generate unique fix-id for this pair style instance + fix_id = strdup("XX_FIX_SRP"); fix_id[0] = '0' + srp_instance / 10; fix_id[1] = '0' + srp_instance % 10; ++srp_instance; - // create fix SRP instance here, as it has to - // be executed before all other fixes + // create fix SRP instance here + // similar to granular pair styles with history, + // this should be early enough that FixSRP::pre_exchange() + // will be invoked before other fixes that migrate atoms + // this is checked for in FixSRP + char **fixarg = new char*[3]; fixarg[0] = fix_id; fixarg[1] = (char *) "all"; @@ -143,7 +148,6 @@ PairSRP::~PairSRP() ------------------------------------------------------------------------- */ void PairSRP::compute(int eflag, int vflag) - { // setup energy and virial ev_init(eflag, vflag); @@ -458,6 +462,7 @@ void PairSRP::init_style() error->all(FLERR,"PairSRP: Pair srp requires newton pair on"); // verify that fix SRP is still defined and has not been changed. + int ifix = modify->find_fix(fix_id); if (f_srp != (FixSRP *)modify->fix[ifix]) error->all(FLERR,"Fix SRP has been changed unexpectedly"); @@ -471,6 +476,7 @@ void PairSRP::init_style() // bonds of this type will be represented by bond particles // if bond type is 0, then all bonds have bond particles // btype = bond type + char c0[20]; char* arg0[2]; sprintf(c0, "%d", btype); @@ -506,7 +512,6 @@ void PairSRP::init_style() double PairSRP::init_one(int i, int j) { - if (setflag[i][j] == 0) error->all(FLERR,"PairSRP: All pair coeffs are not set"); cut[j][i] = cut[i][j]; diff --git a/src/USER-MISC/pair_tersoff_table.cpp b/src/USER-MISC/pair_tersoff_table.cpp index 5c4f60f354382a8bd313c3bab71c6863c0de100a..57c897bdfcc559d868045b47c24a64071d36f82f 100644 --- a/src/USER-MISC/pair_tersoff_table.cpp +++ b/src/USER-MISC/pair_tersoff_table.cpp @@ -32,6 +32,7 @@ #include "force.h" #include "comm.h" #include "memory.h" +#include "utils.h" #include "error.h" @@ -873,7 +874,7 @@ void PairTersoffTable::read_file(char *file) // strip comment, skip line if blank if ((ptr = strchr(line,'#'))) *ptr = '\0'; - nwords = atom->count_words(line); + nwords = utils::count_words(line); if (nwords == 0) continue; // concatenate additional lines until have params_per_line words @@ -892,7 +893,7 @@ void PairTersoffTable::read_file(char *file) MPI_Bcast(&n,1,MPI_INT,0,world); MPI_Bcast(line,n,MPI_CHAR,0,world); if ((ptr = strchr(line,'#'))) *ptr = '\0'; - nwords = atom->count_words(line); + nwords = utils::count_words(line); } if (nwords != params_per_line) diff --git a/src/USER-OMP/README b/src/USER-OMP/README index 46f63f646be3f7c8b326586d2a5a8a3c1415698a..0aef853bca84c64c4635f1f8da9677abf33ae015 100644 --- a/src/USER-OMP/README +++ b/src/USER-OMP/README @@ -9,11 +9,3 @@ doc/Section_accelerate.html, sub-section 5.2 The person who created this package is Axel Kohlmeyer at Temple U (akohlmey at gmail.com). Contact him directly if you have questions. --------------------------- - -This directory also contains a shell script: - -hack_openmp_for_pgi.sh - -which will convert OpenMP directives in src files -into a form compatible with the PGI compiler. diff --git a/src/USER-OMP/angle_charmm_omp.cpp b/src/USER-OMP/angle_charmm_omp.cpp index 116c937788a5d7b1288e11dae3a8c73cebbec063..6933afdcd9217760341f271ac202534f63293404 100644 --- a/src/USER-OMP/angle_charmm_omp.cpp +++ b/src/USER-OMP/angle_charmm_omp.cpp @@ -15,6 +15,7 @@ Contributing author: Axel Kohlmeyer (Temple U) ------------------------------------------------------------------------- */ +#include "omp_compat.h" #include "angle_charmm_omp.h" #include #include "atom.h" @@ -47,7 +48,7 @@ void AngleCharmmOMP::compute(int eflag, int vflag) const int inum = neighbor->nanglelist; #if defined(_OPENMP) -#pragma omp parallel default(none) shared(eflag,vflag) +#pragma omp parallel LMP_DEFAULT_NONE LMP_SHARED(eflag,vflag) #endif { int ifrom, ito, tid; diff --git a/src/USER-OMP/angle_class2_omp.cpp b/src/USER-OMP/angle_class2_omp.cpp index 9aab1d73b3805be228c35f0a998ebef8c9b37cbf..09ee59d5af6abc86c1d6f92dfdb2538c49dd04f1 100644 --- a/src/USER-OMP/angle_class2_omp.cpp +++ b/src/USER-OMP/angle_class2_omp.cpp @@ -15,6 +15,7 @@ Contributing author: Axel Kohlmeyer (Temple U) ------------------------------------------------------------------------- */ +#include "omp_compat.h" #include "angle_class2_omp.h" #include #include "atom.h" @@ -47,7 +48,7 @@ void AngleClass2OMP::compute(int eflag, int vflag) const int inum = neighbor->nanglelist; #if defined(_OPENMP) -#pragma omp parallel default(none) shared(eflag,vflag) +#pragma omp parallel LMP_DEFAULT_NONE LMP_SHARED(eflag,vflag) #endif { int ifrom, ito, tid; diff --git a/src/USER-OMP/angle_cosine_delta_omp.cpp b/src/USER-OMP/angle_cosine_delta_omp.cpp index 44326c124e83c64d4d363ba0c61181bd2055d8b9..ca5afe1449c00adf753caa21b46adb923ac681ee 100644 --- a/src/USER-OMP/angle_cosine_delta_omp.cpp +++ b/src/USER-OMP/angle_cosine_delta_omp.cpp @@ -15,6 +15,7 @@ Contributing author: Axel Kohlmeyer (Temple U) ------------------------------------------------------------------------- */ +#include "omp_compat.h" #include "angle_cosine_delta_omp.h" #include #include "atom.h" @@ -47,7 +48,7 @@ void AngleCosineDeltaOMP::compute(int eflag, int vflag) const int inum = neighbor->nanglelist; #if defined(_OPENMP) -#pragma omp parallel default(none) shared(eflag,vflag) +#pragma omp parallel LMP_DEFAULT_NONE LMP_SHARED(eflag,vflag) #endif { int ifrom, ito, tid; diff --git a/src/USER-OMP/angle_cosine_omp.cpp b/src/USER-OMP/angle_cosine_omp.cpp index 3bfa2aa39c429343ea0ab828a5d572ed0d17cf45..48fdd9ba60aaf10f72875aa5582fca4faf139e02 100644 --- a/src/USER-OMP/angle_cosine_omp.cpp +++ b/src/USER-OMP/angle_cosine_omp.cpp @@ -15,6 +15,7 @@ Contributing author: Axel Kohlmeyer (Temple U) ------------------------------------------------------------------------- */ +#include "omp_compat.h" #include "angle_cosine_omp.h" #include #include "atom.h" @@ -47,7 +48,7 @@ void AngleCosineOMP::compute(int eflag, int vflag) const int inum = neighbor->nanglelist; #if defined(_OPENMP) -#pragma omp parallel default(none) shared(eflag,vflag) +#pragma omp parallel LMP_DEFAULT_NONE LMP_SHARED(eflag,vflag) #endif { int ifrom, ito, tid; diff --git a/src/USER-OMP/angle_cosine_periodic_omp.cpp b/src/USER-OMP/angle_cosine_periodic_omp.cpp index 700179119ccfcfaf301f1222565c43306a3b837e..a0e45fe1314591b46431cb6b4b286c0b9e46f904 100644 --- a/src/USER-OMP/angle_cosine_periodic_omp.cpp +++ b/src/USER-OMP/angle_cosine_periodic_omp.cpp @@ -15,6 +15,7 @@ Contributing author: Axel Kohlmeyer (Temple U) ------------------------------------------------------------------------- */ +#include "omp_compat.h" #include "angle_cosine_periodic_omp.h" #include #include "atom.h" @@ -49,7 +50,7 @@ void AngleCosinePeriodicOMP::compute(int eflag, int vflag) const int inum = neighbor->nanglelist; #if defined(_OPENMP) -#pragma omp parallel default(none) shared(eflag,vflag) +#pragma omp parallel LMP_DEFAULT_NONE LMP_SHARED(eflag,vflag) #endif { int ifrom, ito, tid; diff --git a/src/USER-OMP/angle_cosine_shift_exp_omp.cpp b/src/USER-OMP/angle_cosine_shift_exp_omp.cpp index 1e37688425ddb017f92d44fb7f2e02371cd9b754..21019336b3e90e096cd8f41317be9255faebd395 100644 --- a/src/USER-OMP/angle_cosine_shift_exp_omp.cpp +++ b/src/USER-OMP/angle_cosine_shift_exp_omp.cpp @@ -15,6 +15,7 @@ Contributing author: Axel Kohlmeyer (Temple U) ------------------------------------------------------------------------- */ +#include "omp_compat.h" #include "angle_cosine_shift_exp_omp.h" #include #include "atom.h" @@ -47,7 +48,7 @@ void AngleCosineShiftExpOMP::compute(int eflag, int vflag) const int inum = neighbor->nanglelist; #if defined(_OPENMP) -#pragma omp parallel default(none) shared(eflag,vflag) +#pragma omp parallel LMP_DEFAULT_NONE LMP_SHARED(eflag,vflag) #endif { int ifrom, ito, tid; diff --git a/src/USER-OMP/angle_cosine_shift_omp.cpp b/src/USER-OMP/angle_cosine_shift_omp.cpp index 35b409edf1b019b3d099724766fc71eac85249de..1e6d712b628e718365c352c817be486da6b2ad8d 100644 --- a/src/USER-OMP/angle_cosine_shift_omp.cpp +++ b/src/USER-OMP/angle_cosine_shift_omp.cpp @@ -15,6 +15,7 @@ Contributing author: Axel Kohlmeyer (Temple U) ------------------------------------------------------------------------- */ +#include "omp_compat.h" #include "angle_cosine_shift_omp.h" #include #include "atom.h" @@ -47,7 +48,7 @@ void AngleCosineShiftOMP::compute(int eflag, int vflag) const int inum = neighbor->nanglelist; #if defined(_OPENMP) -#pragma omp parallel default(none) shared(eflag,vflag) +#pragma omp parallel LMP_DEFAULT_NONE LMP_SHARED(eflag,vflag) #endif { int ifrom, ito, tid; diff --git a/src/USER-OMP/angle_cosine_squared_omp.cpp b/src/USER-OMP/angle_cosine_squared_omp.cpp index 9da5a0fce30ad7cdbf2f96b96808c4f3b2d37aca..6df1e028a039c04a8c5fbfc94264a31cbf36f660 100644 --- a/src/USER-OMP/angle_cosine_squared_omp.cpp +++ b/src/USER-OMP/angle_cosine_squared_omp.cpp @@ -15,6 +15,7 @@ Contributing author: Axel Kohlmeyer (Temple U) ------------------------------------------------------------------------- */ +#include "omp_compat.h" #include "angle_cosine_squared_omp.h" #include #include "atom.h" @@ -47,7 +48,7 @@ void AngleCosineSquaredOMP::compute(int eflag, int vflag) const int inum = neighbor->nanglelist; #if defined(_OPENMP) -#pragma omp parallel default(none) shared(eflag,vflag) +#pragma omp parallel LMP_DEFAULT_NONE LMP_SHARED(eflag,vflag) #endif { int ifrom, ito, tid; diff --git a/src/USER-OMP/angle_dipole_omp.cpp b/src/USER-OMP/angle_dipole_omp.cpp index 33ec216f6a84963229fdbc857b583cac1c1bcf90..26d8a7817e13ae326794350b67f6f8949dcbc84f 100644 --- a/src/USER-OMP/angle_dipole_omp.cpp +++ b/src/USER-OMP/angle_dipole_omp.cpp @@ -15,6 +15,7 @@ Contributing author: Axel Kohlmeyer (Temple U) ------------------------------------------------------------------------- */ +#include "omp_compat.h" #include "angle_dipole_omp.h" #include #include "atom.h" @@ -51,7 +52,7 @@ void AngleDipoleOMP::compute(int eflag, int vflag) const int inum = neighbor->nanglelist; #if defined(_OPENMP) -#pragma omp parallel default(none) shared(eflag,vflag) +#pragma omp parallel LMP_DEFAULT_NONE LMP_SHARED(eflag,vflag) #endif { int ifrom, ito, tid; diff --git a/src/USER-OMP/angle_fourier_omp.cpp b/src/USER-OMP/angle_fourier_omp.cpp index 64ff99e6c6bce753cd593c9f0b9d606b27a3ae0b..b6ddea3ff9ac3100ee8947ef6b40e458112c6f0d 100644 --- a/src/USER-OMP/angle_fourier_omp.cpp +++ b/src/USER-OMP/angle_fourier_omp.cpp @@ -15,6 +15,7 @@ Contributing author: Axel Kohlmeyer (Temple U) ------------------------------------------------------------------------- */ +#include "omp_compat.h" #include "angle_fourier_omp.h" #include #include "atom.h" @@ -47,7 +48,7 @@ void AngleFourierOMP::compute(int eflag, int vflag) const int inum = neighbor->nanglelist; #if defined(_OPENMP) -#pragma omp parallel default(none) shared(eflag,vflag) +#pragma omp parallel LMP_DEFAULT_NONE LMP_SHARED(eflag,vflag) #endif { int ifrom, ito, tid; diff --git a/src/USER-OMP/angle_fourier_simple_omp.cpp b/src/USER-OMP/angle_fourier_simple_omp.cpp index 2ae8c5561d8a512e9e7e1e1628b32011830e42dc..992acf7c99fd58c7ddff8a88c223c7755d8ac3dc 100644 --- a/src/USER-OMP/angle_fourier_simple_omp.cpp +++ b/src/USER-OMP/angle_fourier_simple_omp.cpp @@ -15,6 +15,7 @@ Contributing author: Axel Kohlmeyer (Temple U) ------------------------------------------------------------------------- */ +#include "omp_compat.h" #include "angle_fourier_simple_omp.h" #include #include "atom.h" @@ -47,7 +48,7 @@ void AngleFourierSimpleOMP::compute(int eflag, int vflag) const int inum = neighbor->nanglelist; #if defined(_OPENMP) -#pragma omp parallel default(none) shared(eflag,vflag) +#pragma omp parallel LMP_DEFAULT_NONE LMP_SHARED(eflag,vflag) #endif { int ifrom, ito, tid; diff --git a/src/USER-OMP/angle_harmonic_omp.cpp b/src/USER-OMP/angle_harmonic_omp.cpp index 66c06023967186a776f11129abccc912429fa6dc..0cfc6f95af2740535723dbde84ff6456b90cdb60 100644 --- a/src/USER-OMP/angle_harmonic_omp.cpp +++ b/src/USER-OMP/angle_harmonic_omp.cpp @@ -15,6 +15,7 @@ Contributing author: Axel Kohlmeyer (Temple U) ------------------------------------------------------------------------- */ +#include "omp_compat.h" #include "angle_harmonic_omp.h" #include #include "atom.h" @@ -47,7 +48,7 @@ void AngleHarmonicOMP::compute(int eflag, int vflag) const int inum = neighbor->nanglelist; #if defined(_OPENMP) -#pragma omp parallel default(none) shared(eflag,vflag) +#pragma omp parallel LMP_DEFAULT_NONE LMP_SHARED(eflag,vflag) #endif { int ifrom, ito, tid; diff --git a/src/USER-OMP/angle_quartic_omp.cpp b/src/USER-OMP/angle_quartic_omp.cpp index 903b0e42251263276a6ff0f634070a6a4d30cd12..a774edb8c46740145a55ee18b5964e29db935501 100644 --- a/src/USER-OMP/angle_quartic_omp.cpp +++ b/src/USER-OMP/angle_quartic_omp.cpp @@ -15,6 +15,7 @@ Contributing author: Axel Kohlmeyer (Temple U) ------------------------------------------------------------------------- */ +#include "omp_compat.h" #include "angle_quartic_omp.h" #include #include "atom.h" @@ -47,7 +48,7 @@ void AngleQuarticOMP::compute(int eflag, int vflag) const int inum = neighbor->nanglelist; #if defined(_OPENMP) -#pragma omp parallel default(none) shared(eflag,vflag) +#pragma omp parallel LMP_DEFAULT_NONE LMP_SHARED(eflag,vflag) #endif { int ifrom, ito, tid; diff --git a/src/USER-OMP/angle_sdk_omp.cpp b/src/USER-OMP/angle_sdk_omp.cpp index 3c8ee9cde851f2f07b7fb6fd698cad60756b4b46..e0bc021f1b1bee68a01c00392069e29b97bc3e54 100644 --- a/src/USER-OMP/angle_sdk_omp.cpp +++ b/src/USER-OMP/angle_sdk_omp.cpp @@ -15,6 +15,7 @@ Contributing author: Axel Kohlmeyer (Temple U) ------------------------------------------------------------------------- */ +#include "omp_compat.h" #include "angle_sdk_omp.h" #include #include "atom.h" @@ -49,7 +50,7 @@ void AngleSDKOMP::compute(int eflag, int vflag) const int inum = neighbor->nanglelist; #if defined(_OPENMP) -#pragma omp parallel default(none) shared(eflag,vflag) +#pragma omp parallel LMP_DEFAULT_NONE LMP_SHARED(eflag,vflag) #endif { int ifrom, ito, tid; diff --git a/src/USER-OMP/angle_table_omp.cpp b/src/USER-OMP/angle_table_omp.cpp index de36d099802dc6db76bd3992bc29bfbcefded4a4..1af60f85f651545591c0151185204d3f4a7d6b6e 100644 --- a/src/USER-OMP/angle_table_omp.cpp +++ b/src/USER-OMP/angle_table_omp.cpp @@ -15,6 +15,7 @@ Contributing author: Axel Kohlmeyer (Temple U) ------------------------------------------------------------------------- */ +#include "omp_compat.h" #include "angle_table_omp.h" #include #include "atom.h" @@ -47,7 +48,7 @@ void AngleTableOMP::compute(int eflag, int vflag) const int inum = neighbor->nanglelist; #if defined(_OPENMP) -#pragma omp parallel default(none) shared(eflag,vflag) +#pragma omp parallel LMP_DEFAULT_NONE LMP_SHARED(eflag,vflag) #endif { int ifrom, ito, tid; diff --git a/src/USER-OMP/bond_class2_omp.cpp b/src/USER-OMP/bond_class2_omp.cpp index 9da50d1aa010c8819b8992c44e3baf35a087f30c..06edf46024be4f96f6a46501c2069c2cf1b80754 100644 --- a/src/USER-OMP/bond_class2_omp.cpp +++ b/src/USER-OMP/bond_class2_omp.cpp @@ -15,6 +15,7 @@ Contributing author: Axel Kohlmeyer (Temple U) ------------------------------------------------------------------------- */ +#include "omp_compat.h" #include "bond_class2_omp.h" #include "atom.h" #include "comm.h" @@ -47,7 +48,7 @@ void BondClass2OMP::compute(int eflag, int vflag) const int inum = neighbor->nbondlist; #if defined(_OPENMP) -#pragma omp parallel default(none) shared(eflag,vflag) +#pragma omp parallel LMP_DEFAULT_NONE LMP_SHARED(eflag,vflag) #endif { int ifrom, ito, tid; diff --git a/src/USER-OMP/bond_fene_expand_omp.cpp b/src/USER-OMP/bond_fene_expand_omp.cpp index a937cb6c34f6ed24780efd25973fd88a660940ff..5f3dd48841bee142df9faba768e1e9dbaf73b40a 100644 --- a/src/USER-OMP/bond_fene_expand_omp.cpp +++ b/src/USER-OMP/bond_fene_expand_omp.cpp @@ -15,6 +15,7 @@ Contributing author: Axel Kohlmeyer (Temple U) ------------------------------------------------------------------------- */ +#include "omp_compat.h" #include "bond_fene_expand_omp.h" #include "atom.h" #include "comm.h" @@ -48,7 +49,7 @@ void BondFENEExpandOMP::compute(int eflag, int vflag) const int inum = neighbor->nbondlist; #if defined(_OPENMP) -#pragma omp parallel default(none) shared(eflag,vflag) +#pragma omp parallel LMP_DEFAULT_NONE LMP_SHARED(eflag,vflag) #endif { int ifrom, ito, tid; diff --git a/src/USER-OMP/bond_fene_omp.cpp b/src/USER-OMP/bond_fene_omp.cpp index 3c653fedae5366b30f69344871c663e4ed0591f0..ebf5afdc57e91bab9615cb66779659a9e66830b8 100644 --- a/src/USER-OMP/bond_fene_omp.cpp +++ b/src/USER-OMP/bond_fene_omp.cpp @@ -15,6 +15,7 @@ Contributing author: Axel Kohlmeyer (Temple U) ------------------------------------------------------------------------- */ +#include "omp_compat.h" #include "bond_fene_omp.h" #include "atom.h" #include "comm.h" @@ -48,7 +49,7 @@ void BondFENEOMP::compute(int eflag, int vflag) const int inum = neighbor->nbondlist; #if defined(_OPENMP) -#pragma omp parallel default(none) shared(eflag,vflag) +#pragma omp parallel LMP_DEFAULT_NONE LMP_SHARED(eflag,vflag) #endif { int ifrom, ito, tid; diff --git a/src/USER-OMP/bond_gromos_omp.cpp b/src/USER-OMP/bond_gromos_omp.cpp index cedd5f96b7e45d520db6b464945eca172201938c..d4d2d256019f6386b81fbc52c30358f5120ea6fd 100644 --- a/src/USER-OMP/bond_gromos_omp.cpp +++ b/src/USER-OMP/bond_gromos_omp.cpp @@ -15,6 +15,7 @@ Contributing author: Axel Kohlmeyer (Temple U) ------------------------------------------------------------------------- */ +#include "omp_compat.h" #include "bond_gromos_omp.h" #include "atom.h" #include "comm.h" @@ -44,7 +45,7 @@ void BondGromosOMP::compute(int eflag, int vflag) const int inum = neighbor->nbondlist; #if defined(_OPENMP) -#pragma omp parallel default(none) shared(eflag,vflag) +#pragma omp parallel LMP_DEFAULT_NONE LMP_SHARED(eflag,vflag) #endif { int ifrom, ito, tid; @@ -102,7 +103,7 @@ void BondGromosOMP::eval(int nfrom, int nto, ThrData * const thr) fbond = -4.0 * kdr; - if (EFLAG) ebond = kdr; + if (EFLAG) ebond = kdr*dr; // apply force to each of 2 atoms diff --git a/src/USER-OMP/bond_harmonic_omp.cpp b/src/USER-OMP/bond_harmonic_omp.cpp index 4144f02a39361ff039bfa70770bff3ef56bdd44b..9160ee70232e1f20a53fb3753ab1e621ecba4bf6 100644 --- a/src/USER-OMP/bond_harmonic_omp.cpp +++ b/src/USER-OMP/bond_harmonic_omp.cpp @@ -15,6 +15,7 @@ Contributing author: Axel Kohlmeyer (Temple U) ------------------------------------------------------------------------- */ +#include "omp_compat.h" #include "bond_harmonic_omp.h" #include "atom.h" #include "comm.h" @@ -46,7 +47,7 @@ void BondHarmonicOMP::compute(int eflag, int vflag) const int inum = neighbor->nbondlist; #if defined(_OPENMP) -#pragma omp parallel default(none) shared(eflag,vflag) +#pragma omp parallel LMP_DEFAULT_NONE LMP_SHARED(eflag,vflag) #endif { int ifrom, ito, tid; diff --git a/src/USER-OMP/bond_harmonic_shift_cut_omp.cpp b/src/USER-OMP/bond_harmonic_shift_cut_omp.cpp index 10e4cdcd1c623e53b0caebb82c1b474e77b6037f..7a6c616e4ae1f7ba5e215c9266ee780ccb322ed0 100644 --- a/src/USER-OMP/bond_harmonic_shift_cut_omp.cpp +++ b/src/USER-OMP/bond_harmonic_shift_cut_omp.cpp @@ -15,6 +15,7 @@ Contributing author: Axel Kohlmeyer (Temple U) ------------------------------------------------------------------------- */ +#include "omp_compat.h" #include "bond_harmonic_shift_cut_omp.h" #include "atom.h" #include "comm.h" @@ -46,7 +47,7 @@ void BondHarmonicShiftCutOMP::compute(int eflag, int vflag) const int inum = neighbor->nbondlist; #if defined(_OPENMP) -#pragma omp parallel default(none) shared(eflag,vflag) +#pragma omp parallel LMP_DEFAULT_NONE LMP_SHARED(eflag,vflag) #endif { int ifrom, ito, tid; diff --git a/src/USER-OMP/bond_harmonic_shift_omp.cpp b/src/USER-OMP/bond_harmonic_shift_omp.cpp index a0a7750890ebd06a042b1ef6c1b9676da0fe9539..19f0a08510f57c7cb41caee1e400a31739a5b19f 100644 --- a/src/USER-OMP/bond_harmonic_shift_omp.cpp +++ b/src/USER-OMP/bond_harmonic_shift_omp.cpp @@ -15,6 +15,7 @@ Contributing author: Axel Kohlmeyer (Temple U) ------------------------------------------------------------------------- */ +#include "omp_compat.h" #include "bond_harmonic_shift_omp.h" #include "atom.h" #include "comm.h" @@ -46,7 +47,7 @@ void BondHarmonicShiftOMP::compute(int eflag, int vflag) const int inum = neighbor->nbondlist; #if defined(_OPENMP) -#pragma omp parallel default(none) shared(eflag,vflag) +#pragma omp parallel LMP_DEFAULT_NONE LMP_SHARED(eflag,vflag) #endif { int ifrom, ito, tid; diff --git a/src/USER-OMP/bond_morse_omp.cpp b/src/USER-OMP/bond_morse_omp.cpp index 32361cb5de8945f8727817abace5d3faefe47e74..90318c8faf7939819a3ada85108d5e312a4e5ee1 100644 --- a/src/USER-OMP/bond_morse_omp.cpp +++ b/src/USER-OMP/bond_morse_omp.cpp @@ -15,6 +15,7 @@ Contributing author: Axel Kohlmeyer (Temple U) ------------------------------------------------------------------------- */ +#include "omp_compat.h" #include "bond_morse_omp.h" #include "atom.h" #include "comm.h" @@ -46,7 +47,7 @@ void BondMorseOMP::compute(int eflag, int vflag) const int inum = neighbor->nbondlist; #if defined(_OPENMP) -#pragma omp parallel default(none) shared(eflag,vflag) +#pragma omp parallel LMP_DEFAULT_NONE LMP_SHARED(eflag,vflag) #endif { int ifrom, ito, tid; diff --git a/src/USER-OMP/bond_nonlinear_omp.cpp b/src/USER-OMP/bond_nonlinear_omp.cpp index f21772435f9144fef797a1483aa55972d211fa2b..809950f2b7e294d0624c8b9835db9ae58c753b40 100644 --- a/src/USER-OMP/bond_nonlinear_omp.cpp +++ b/src/USER-OMP/bond_nonlinear_omp.cpp @@ -15,6 +15,7 @@ Contributing author: Axel Kohlmeyer (Temple U) ------------------------------------------------------------------------- */ +#include "omp_compat.h" #include "bond_nonlinear_omp.h" #include "atom.h" #include "comm.h" @@ -46,7 +47,7 @@ void BondNonlinearOMP::compute(int eflag, int vflag) const int inum = neighbor->nbondlist; #if defined(_OPENMP) -#pragma omp parallel default(none) shared(eflag,vflag) +#pragma omp parallel LMP_DEFAULT_NONE LMP_SHARED(eflag,vflag) #endif { int ifrom, ito, tid; diff --git a/src/USER-OMP/bond_quartic_omp.cpp b/src/USER-OMP/bond_quartic_omp.cpp index 46ee4ab96b0f89023bfff327401ee21cc7ce924e..0efaa10e3711d7c7d50d8e664b781c90d86383f3 100644 --- a/src/USER-OMP/bond_quartic_omp.cpp +++ b/src/USER-OMP/bond_quartic_omp.cpp @@ -15,6 +15,7 @@ Contributing author: Axel Kohlmeyer (Temple U) ------------------------------------------------------------------------- */ +#include "omp_compat.h" #include "bond_quartic_omp.h" #include "atom.h" #include "comm.h" @@ -52,7 +53,7 @@ void BondQuarticOMP::compute(int eflag, int vflag) const int inum = neighbor->nbondlist; #if defined(_OPENMP) -#pragma omp parallel default(none) shared(eflag,vflag) +#pragma omp parallel LMP_DEFAULT_NONE LMP_SHARED(eflag,vflag) #endif { int ifrom, ito, tid; diff --git a/src/USER-OMP/bond_table_omp.cpp b/src/USER-OMP/bond_table_omp.cpp index db1599fbcc48e4b0a215e9197a45dfae64f15b1b..f503bcab2622a813d2779f39047461f479b85fd6 100644 --- a/src/USER-OMP/bond_table_omp.cpp +++ b/src/USER-OMP/bond_table_omp.cpp @@ -15,6 +15,7 @@ Contributing author: Axel Kohlmeyer (Temple U) ------------------------------------------------------------------------- */ +#include "omp_compat.h" #include "bond_table_omp.h" #include "atom.h" #include "comm.h" @@ -46,7 +47,7 @@ void BondTableOMP::compute(int eflag, int vflag) const int inum = neighbor->nbondlist; #if defined(_OPENMP) -#pragma omp parallel default(none) shared(eflag,vflag) +#pragma omp parallel LMP_DEFAULT_NONE LMP_SHARED(eflag,vflag) #endif { int ifrom, ito, tid; diff --git a/src/USER-OMP/dihedral_charmm_omp.cpp b/src/USER-OMP/dihedral_charmm_omp.cpp index 242a0a1d86e9eb388096ca5a7de2c46c8cd701cd..afd3071434c3929f028c449bdb77e387abe831cc 100644 --- a/src/USER-OMP/dihedral_charmm_omp.cpp +++ b/src/USER-OMP/dihedral_charmm_omp.cpp @@ -15,6 +15,7 @@ Contributing author: Axel Kohlmeyer (Temple U) ------------------------------------------------------------------------- */ +#include "omp_compat.h" #include "dihedral_charmm_omp.h" #include #include "atom.h" @@ -56,7 +57,7 @@ void DihedralCharmmOMP::compute(int eflag, int vflag) const int inum = neighbor->ndihedrallist; #if defined(_OPENMP) -#pragma omp parallel default(none) shared(eflag,vflag) +#pragma omp parallel LMP_DEFAULT_NONE LMP_SHARED(eflag,vflag) #endif { int ifrom, ito, tid; diff --git a/src/USER-OMP/dihedral_class2_omp.cpp b/src/USER-OMP/dihedral_class2_omp.cpp index 215677612b6d801f1d6ddcea936eb51fb3963c43..49b8659e2facd64714fb83ecb184c5c09a0f6a86 100644 --- a/src/USER-OMP/dihedral_class2_omp.cpp +++ b/src/USER-OMP/dihedral_class2_omp.cpp @@ -15,6 +15,7 @@ Contributing author: Axel Kohlmeyer (Temple U) ------------------------------------------------------------------------- */ +#include "omp_compat.h" #include #include "dihedral_class2_omp.h" #include "atom.h" @@ -50,7 +51,7 @@ void DihedralClass2OMP::compute(int eflag, int vflag) const int inum = neighbor->ndihedrallist; #if defined(_OPENMP) -#pragma omp parallel default(none) shared(eflag,vflag) +#pragma omp parallel LMP_DEFAULT_NONE LMP_SHARED(eflag,vflag) #endif { int ifrom, ito, tid; diff --git a/src/USER-OMP/dihedral_cosine_shift_exp_omp.cpp b/src/USER-OMP/dihedral_cosine_shift_exp_omp.cpp index f42121f8a9bcfea2e95319330b49e1724108634b..cea22adf1b4c3185fa3ab09ef93c1fe6379d8209 100644 --- a/src/USER-OMP/dihedral_cosine_shift_exp_omp.cpp +++ b/src/USER-OMP/dihedral_cosine_shift_exp_omp.cpp @@ -15,6 +15,7 @@ Contributing author: Axel Kohlmeyer (Temple U) ------------------------------------------------------------------------- */ +#include "omp_compat.h" #include #include "dihedral_cosine_shift_exp_omp.h" #include "atom.h" @@ -50,7 +51,7 @@ void DihedralCosineShiftExpOMP::compute(int eflag, int vflag) const int inum = neighbor->ndihedrallist; #if defined(_OPENMP) -#pragma omp parallel default(none) shared(eflag,vflag) +#pragma omp parallel LMP_DEFAULT_NONE LMP_SHARED(eflag,vflag) #endif { int ifrom, ito, tid; diff --git a/src/USER-OMP/dihedral_fourier_omp.cpp b/src/USER-OMP/dihedral_fourier_omp.cpp index cd12b3630eabb8c0a0917de904f797c46719d063..756931774a01733b1eb263f2be7421602e625b59 100644 --- a/src/USER-OMP/dihedral_fourier_omp.cpp +++ b/src/USER-OMP/dihedral_fourier_omp.cpp @@ -15,6 +15,7 @@ Contributing author: Axel Kohlmeyer (Temple U) ------------------------------------------------------------------------- */ +#include "omp_compat.h" #include "dihedral_fourier_omp.h" #include #include "atom.h" @@ -49,7 +50,7 @@ void DihedralFourierOMP::compute(int eflag, int vflag) const int inum = neighbor->ndihedrallist; #if defined(_OPENMP) -#pragma omp parallel default(none) shared(eflag,vflag) +#pragma omp parallel LMP_DEFAULT_NONE LMP_SHARED(eflag,vflag) #endif { int ifrom, ito, tid; diff --git a/src/USER-OMP/dihedral_harmonic_omp.cpp b/src/USER-OMP/dihedral_harmonic_omp.cpp index c3adb113e24f52fe70fef77865660d5daacdc240..d1f511954e0ecd5d702a782b8938f6739b5afa7c 100644 --- a/src/USER-OMP/dihedral_harmonic_omp.cpp +++ b/src/USER-OMP/dihedral_harmonic_omp.cpp @@ -15,6 +15,7 @@ Contributing author: Axel Kohlmeyer (Temple U) ------------------------------------------------------------------------- */ +#include "omp_compat.h" #include #include "dihedral_harmonic_omp.h" #include "atom.h" @@ -50,7 +51,7 @@ void DihedralHarmonicOMP::compute(int eflag, int vflag) const int inum = neighbor->ndihedrallist; #if defined(_OPENMP) -#pragma omp parallel default(none) shared(eflag,vflag) +#pragma omp parallel LMP_DEFAULT_NONE LMP_SHARED(eflag,vflag) #endif { int ifrom, ito, tid; diff --git a/src/USER-OMP/dihedral_helix_omp.cpp b/src/USER-OMP/dihedral_helix_omp.cpp index b38ff2739a82edde1f67fa36e3a86afee59d9f70..5289fc2c6288f604cfe33cf42c5069ae8741c18c 100644 --- a/src/USER-OMP/dihedral_helix_omp.cpp +++ b/src/USER-OMP/dihedral_helix_omp.cpp @@ -15,6 +15,7 @@ Contributing author: Axel Kohlmeyer (Temple U) ------------------------------------------------------------------------- */ +#include "omp_compat.h" #include #include "dihedral_helix_omp.h" #include "atom.h" @@ -53,7 +54,7 @@ void DihedralHelixOMP::compute(int eflag, int vflag) const int inum = neighbor->ndihedrallist; #if defined(_OPENMP) -#pragma omp parallel default(none) shared(eflag,vflag) +#pragma omp parallel LMP_DEFAULT_NONE LMP_SHARED(eflag,vflag) #endif { int ifrom, ito, tid; diff --git a/src/USER-OMP/dihedral_multi_harmonic_omp.cpp b/src/USER-OMP/dihedral_multi_harmonic_omp.cpp index 7b79a637223269267ce1453d679957b6b30536b9..edf8a20899d7482051c59edc40a3afdefb8c1f04 100644 --- a/src/USER-OMP/dihedral_multi_harmonic_omp.cpp +++ b/src/USER-OMP/dihedral_multi_harmonic_omp.cpp @@ -15,6 +15,7 @@ Contributing author: Axel Kohlmeyer (Temple U) ------------------------------------------------------------------------- */ +#include "omp_compat.h" #include #include "dihedral_multi_harmonic_omp.h" #include "atom.h" @@ -50,7 +51,7 @@ void DihedralMultiHarmonicOMP::compute(int eflag, int vflag) const int inum = neighbor->ndihedrallist; #if defined(_OPENMP) -#pragma omp parallel default(none) shared(eflag,vflag) +#pragma omp parallel LMP_DEFAULT_NONE LMP_SHARED(eflag,vflag) #endif { int ifrom, ito, tid; diff --git a/src/USER-OMP/dihedral_nharmonic_omp.cpp b/src/USER-OMP/dihedral_nharmonic_omp.cpp index f3d8471c95ec3598407c10142ce8a8eec0ce22b9..bf51a0171377e0fe61250766bf297aa5402efad1 100644 --- a/src/USER-OMP/dihedral_nharmonic_omp.cpp +++ b/src/USER-OMP/dihedral_nharmonic_omp.cpp @@ -15,6 +15,7 @@ Contributing author: Axel Kohlmeyer (Temple U) ------------------------------------------------------------------------- */ +#include "omp_compat.h" #include #include "dihedral_nharmonic_omp.h" #include "atom.h" @@ -50,7 +51,7 @@ void DihedralNHarmonicOMP::compute(int eflag, int vflag) const int inum = neighbor->ndihedrallist; #if defined(_OPENMP) -#pragma omp parallel default(none) shared(eflag,vflag) +#pragma omp parallel LMP_DEFAULT_NONE LMP_SHARED(eflag,vflag) #endif { int ifrom, ito, tid; diff --git a/src/USER-OMP/dihedral_opls_omp.cpp b/src/USER-OMP/dihedral_opls_omp.cpp index 24cc4cd064e4a9ffc5827e154f26ca3cf1ea7be6..8814d3f3f04e41ff14e943fd4c63a5b1bc9bf810 100644 --- a/src/USER-OMP/dihedral_opls_omp.cpp +++ b/src/USER-OMP/dihedral_opls_omp.cpp @@ -15,6 +15,7 @@ Contributing author: Axel Kohlmeyer (Temple U) ------------------------------------------------------------------------- */ +#include "omp_compat.h" #include #include "dihedral_opls_omp.h" #include "atom.h" @@ -51,7 +52,7 @@ void DihedralOPLSOMP::compute(int eflag, int vflag) const int inum = neighbor->ndihedrallist; #if defined(_OPENMP) -#pragma omp parallel default(none) shared(eflag,vflag) +#pragma omp parallel LMP_DEFAULT_NONE LMP_SHARED(eflag,vflag) #endif { int ifrom, ito, tid; diff --git a/src/USER-OMP/dihedral_quadratic_omp.cpp b/src/USER-OMP/dihedral_quadratic_omp.cpp index 6f82c1e6b00551726e85419a00a4bc4c8aa030b1..e61c5f0d85cc4cf39df1180863d9f471f479e37c 100644 --- a/src/USER-OMP/dihedral_quadratic_omp.cpp +++ b/src/USER-OMP/dihedral_quadratic_omp.cpp @@ -15,6 +15,7 @@ Contributing author: Axel Kohlmeyer (Temple U) ------------------------------------------------------------------------- */ +#include "omp_compat.h" #include #include "dihedral_quadratic_omp.h" #include "atom.h" @@ -51,7 +52,7 @@ void DihedralQuadraticOMP::compute(int eflag, int vflag) const int inum = neighbor->ndihedrallist; #if defined(_OPENMP) -#pragma omp parallel default(none) shared(eflag,vflag) +#pragma omp parallel LMP_DEFAULT_NONE LMP_SHARED(eflag,vflag) #endif { int ifrom, ito, tid; diff --git a/src/USER-OMP/dihedral_table_omp.cpp b/src/USER-OMP/dihedral_table_omp.cpp index a760fc609425bac1a0200338665297a50c65fca6..bf5332a1c1adac2b4ccac62818010626b7262630 100644 --- a/src/USER-OMP/dihedral_table_omp.cpp +++ b/src/USER-OMP/dihedral_table_omp.cpp @@ -15,6 +15,7 @@ Contributing author: Axel Kohlmeyer (Temple U) ------------------------------------------------------------------------- */ +#include "omp_compat.h" #include "dihedral_table_omp.h" #include #include "atom.h" @@ -113,7 +114,7 @@ void DihedralTableOMP::compute(int eflag, int vflag) const int inum = neighbor->ndihedrallist; #if defined(_OPENMP) -#pragma omp parallel default(none) shared(eflag,vflag) +#pragma omp parallel LMP_DEFAULT_NONE LMP_SHARED(eflag,vflag) #endif { int ifrom, ito, tid; diff --git a/src/USER-OMP/domain_omp.cpp b/src/USER-OMP/domain_omp.cpp index 18d2a587ca87cfc26df9e342321aa3617ef8e4ae..dfd3d3590fd2e7a050f9b9e38e08764317a3f373 100644 --- a/src/USER-OMP/domain_omp.cpp +++ b/src/USER-OMP/domain_omp.cpp @@ -15,6 +15,7 @@ Contributing author : Axel Kohlmeyer (Temple U) ------------------------------------------------------------------------- */ +#include "omp_compat.h" #include "accelerator_omp.h" #include "atom.h" @@ -45,7 +46,7 @@ void DomainOMP::pbc() const int nlocal = atom->nlocal; #if defined(_OPENMP) -#pragma omp parallel for default(none) schedule(static) +#pragma omp parallel for LMP_DEFAULT_NONE schedule(static) #endif for (int i = 0; i < nlocal; i++) { imageint idim,otherdims; @@ -143,7 +144,7 @@ void DomainOMP::lamda2x(int n) const int num = n; #if defined(_OPENMP) -#pragma omp parallel for default(none) schedule(static) +#pragma omp parallel for LMP_DEFAULT_NONE schedule(static) #endif for (int i = 0; i < num; i++) { x[i].x = h[0]*x[i].x + h[5]*x[i].y + h[4]*x[i].z + boxlo[0]; @@ -163,7 +164,7 @@ void DomainOMP::x2lamda(int n) const int num = n; #if defined(_OPENMP) -#pragma omp parallel for default(none) schedule(static) +#pragma omp parallel for LMP_DEFAULT_NONE schedule(static) #endif for (int i = 0; i < num; i++) { double delta0 = x[i].x - boxlo[0]; diff --git a/src/USER-OMP/ewald_omp.cpp b/src/USER-OMP/ewald_omp.cpp index a539394f69deb91d19171293a1992ec3f380bdbc..fd776e46a6d3f33d66da81a1d18b486cb608c015 100644 --- a/src/USER-OMP/ewald_omp.cpp +++ b/src/USER-OMP/ewald_omp.cpp @@ -15,6 +15,7 @@ Contributing authors: Roy Pollock (LLNL), Paul Crozier (SNL) ------------------------------------------------------------------------- */ +#include "omp_compat.h" #include "ewald_omp.h" #include #include @@ -104,7 +105,7 @@ void EwaldOMP::compute(int eflag, int vflag) v0=v1=v2=v3=v4=v5=0.0; #if defined(_OPENMP) -#pragma omp parallel default(none) shared(eflag,vflag) reduction(+:eng_tmp,v0,v1,v2,v3,v4,v5) +#pragma omp parallel LMP_DEFAULT_NONE LMP_SHARED(eflag,vflag) reduction(+:eng_tmp,v0,v1,v2,v3,v4,v5) #endif { @@ -234,7 +235,7 @@ void EwaldOMP::eik_dot_r() const int nthreads = comm->nthreads; #if defined(_OPENMP) -#pragma omp parallel default(none) +#pragma omp parallel LMP_DEFAULT_NONE #endif { int i,ifrom,ito,k,l,m,n,ic,tid; diff --git a/src/USER-OMP/fix_gravity_omp.cpp b/src/USER-OMP/fix_gravity_omp.cpp index 5bc1085f34c7f6ccaf139545eb3728ffb7d0a074..830fa0c4eb45a3ce04717f22ebe610263e0db5e4 100644 --- a/src/USER-OMP/fix_gravity_omp.cpp +++ b/src/USER-OMP/fix_gravity_omp.cpp @@ -15,6 +15,7 @@ Contributing author: Axel Kohlmeyer (Temple U) ------------------------------------------------------------------------- */ +#include "omp_compat.h" #include "fix_gravity_omp.h" #include "atom.h" #include "update.h" @@ -69,7 +70,7 @@ void FixGravityOMP::post_force(int /* vflag */) if (rmass) { #if defined(_OPENMP) -#pragma omp parallel for default(none) reduction(-:grav) +#pragma omp parallel for LMP_DEFAULT_NONE reduction(-:grav) #endif for (int i = 0; i < nlocal; i++) if (mask[i] & groupbit) { @@ -81,7 +82,7 @@ void FixGravityOMP::post_force(int /* vflag */) } } else { #if defined(_OPENMP) -#pragma omp parallel for default(none) reduction(-:grav) +#pragma omp parallel for LMP_DEFAULT_NONE reduction(-:grav) #endif for (int i = 0; i < nlocal; i++) if (mask[i] & groupbit) { diff --git a/src/USER-OMP/fix_neigh_history_omp.cpp b/src/USER-OMP/fix_neigh_history_omp.cpp index 22d3fa944c961b05494e725ad1b4cb32b95d6532..7acded0ab255c7c47d3da638d96913f1d123cab8 100644 --- a/src/USER-OMP/fix_neigh_history_omp.cpp +++ b/src/USER-OMP/fix_neigh_history_omp.cpp @@ -11,6 +11,7 @@ See the README file in the top-level LAMMPS directory. ------------------------------------------------------------------------- */ +#include "omp_compat.h" #include "fix_neigh_history_omp.h" #include #include "my_page.h" @@ -73,7 +74,7 @@ void FixNeighHistoryOMP::pre_exchange_onesided() maxpartner = 0; #if defined(_OPENMP) -#pragma omp parallel default(none) +#pragma omp parallel LMP_DEFAULT_NONE #endif { @@ -199,7 +200,7 @@ void FixNeighHistoryOMP::pre_exchange_newton() for (int i = 0; i < nall_neigh; i++) npartner[i] = 0; #if defined(_OPENMP) -#pragma omp parallel default(none) +#pragma omp parallel LMP_DEFAULT_NONE #endif { @@ -373,7 +374,7 @@ void FixNeighHistoryOMP::pre_exchange_no_newton() maxpartner = 0; #if defined(_OPENMP) -#pragma omp parallel default(none) +#pragma omp parallel LMP_DEFAULT_NONE #endif { @@ -525,7 +526,7 @@ void FixNeighHistoryOMP::post_neighbor() #if defined(_OPENMP) -#pragma omp parallel default(none) +#pragma omp parallel LMP_DEFAULT_NONE #endif { diff --git a/src/USER-OMP/fix_nh_asphere_omp.cpp b/src/USER-OMP/fix_nh_asphere_omp.cpp index 185eab5f47c756b152344318aa1521d19573e215..9c7317bebd192a5fcf41b6d7db21ec11fecae857 100644 --- a/src/USER-OMP/fix_nh_asphere_omp.cpp +++ b/src/USER-OMP/fix_nh_asphere_omp.cpp @@ -15,6 +15,7 @@ Contributing author: Axel Kohlmeyer (Temple U) ------------------------------------------------------------------------- */ +#include "omp_compat.h" #include #include #include @@ -82,7 +83,7 @@ void FixNHAsphereOMP::nve_v() // merged with FixNHOMP instead of calling it for the COM update. #if defined(_OPENMP) -#pragma omp parallel for default(none) schedule(static) +#pragma omp parallel for LMP_DEFAULT_NONE schedule(static) #endif for (int i = 0; i < nlocal; i++) { if (mask[i] & groupbit) { @@ -122,7 +123,7 @@ void FixNHAsphereOMP::nve_x() // principal moments of inertia #if defined(_OPENMP) -#pragma omp parallel for default(none) schedule(static) +#pragma omp parallel for LMP_DEFAULT_NONE schedule(static) #endif for (int i = 0; i < nlocal; i++) if (mask[i] & groupbit) { @@ -163,7 +164,7 @@ void FixNHAsphereOMP::nh_v_temp() if (which == NOBIAS) { #if defined(_OPENMP) -#pragma omp parallel for default(none) schedule(static) +#pragma omp parallel for LMP_DEFAULT_NONE schedule(static) #endif for (int i = 0; i < nlocal; i++) { if (mask[i] & groupbit) { @@ -177,7 +178,7 @@ void FixNHAsphereOMP::nh_v_temp() } } else if (which == BIAS) { #if defined(_OPENMP) -#pragma omp parallel for default(none) schedule(static) +#pragma omp parallel for LMP_DEFAULT_NONE schedule(static) #endif for (int i = 0; i < nlocal; i++) { double buf[3]; diff --git a/src/USER-OMP/fix_nh_omp.cpp b/src/USER-OMP/fix_nh_omp.cpp index d584bcd11f0c73740d01ad1c5fb8a6f5ac746885..b30169b2dc6d252513f290c0f05b9cc94319c815 100644 --- a/src/USER-OMP/fix_nh_omp.cpp +++ b/src/USER-OMP/fix_nh_omp.cpp @@ -15,6 +15,7 @@ Contributing authors: Axel Kohlmeyer (Temple U) ------------------------------------------------------------------------- */ +#include "omp_compat.h" #include "fix_nh_omp.h" #include #include "atom.h" @@ -57,7 +58,7 @@ void FixNHOMP::remap() if (allremap) domain->x2lamda(nlocal); else { #if defined (_OPENMP) -#pragma omp parallel for default(none) schedule(static) +#pragma omp parallel for LMP_DEFAULT_NONE schedule(static) #endif for (int i = 0; i < nlocal; i++) if (mask[i] & dilate_group_bit) @@ -207,7 +208,7 @@ void FixNHOMP::remap() if (allremap) domain->lamda2x(nlocal); else { #if defined (_OPENMP) -#pragma omp parallel for default(none) schedule(static) +#pragma omp parallel for LMP_DEFAULT_NONE schedule(static) #endif for (int i = 0; i < nlocal; i++) if (mask[i] & dilate_group_bit) @@ -235,7 +236,7 @@ void FixNHOMP::nh_v_press() if (which == NOBIAS) { #if defined(_OPENMP) -#pragma omp parallel for default(none) schedule(static) +#pragma omp parallel for LMP_DEFAULT_NONE schedule(static) #endif for (int i = 0; i < nlocal; i++) { if (mask[i] & groupbit) { @@ -253,7 +254,7 @@ void FixNHOMP::nh_v_press() } } else if (which == BIAS) { #if defined(_OPENMP) -#pragma omp parallel for default(none) schedule(static) +#pragma omp parallel for LMP_DEFAULT_NONE schedule(static) #endif for (int i = 0; i < nlocal; i++) { double buf[3]; @@ -289,7 +290,7 @@ void FixNHOMP::nve_v() if (atom->rmass) { const double * _noalias const rmass = atom->rmass; #if defined(_OPENMP) -#pragma omp parallel for default(none) schedule(static) +#pragma omp parallel for LMP_DEFAULT_NONE schedule(static) #endif for (int i = 0; i < nlocal; i++) { if (mask[i] & groupbit) { @@ -303,7 +304,7 @@ void FixNHOMP::nve_v() const double *_noalias const mass = atom->mass; const int * _noalias const type = atom->type; #if defined(_OPENMP) -#pragma omp parallel for default(none) schedule(static) +#pragma omp parallel for LMP_DEFAULT_NONE schedule(static) #endif for (int i = 0; i < nlocal; i++) { if (mask[i] & groupbit) { @@ -330,7 +331,7 @@ void FixNHOMP::nve_x() // x update by full step only for atoms in group #if defined(_OPENMP) -#pragma omp parallel for default(none) schedule(static) +#pragma omp parallel for LMP_DEFAULT_NONE schedule(static) #endif for (int i = 0; i < nlocal; i++) { if (mask[i] & groupbit) { @@ -352,7 +353,7 @@ void FixNHOMP::nh_v_temp() if (which == NOBIAS) { #if defined(_OPENMP) -#pragma omp parallel for default(none) schedule(static) +#pragma omp parallel for LMP_DEFAULT_NONE schedule(static) #endif for (int i = 0; i < nlocal; i++) { if (mask[i] & groupbit) { @@ -363,7 +364,7 @@ void FixNHOMP::nh_v_temp() } } else if (which == BIAS) { #if defined(_OPENMP) -#pragma omp parallel for default(none) schedule(static) +#pragma omp parallel for LMP_DEFAULT_NONE schedule(static) #endif for (int i = 0; i < nlocal; i++) { double buf[3]; diff --git a/src/USER-OMP/fix_nh_sphere_omp.cpp b/src/USER-OMP/fix_nh_sphere_omp.cpp index 0048ae7ff746bcad79398469810154266807273c..dd9a8addf41f9a8c70baa32fef3d0d82b530f849 100644 --- a/src/USER-OMP/fix_nh_sphere_omp.cpp +++ b/src/USER-OMP/fix_nh_sphere_omp.cpp @@ -15,6 +15,7 @@ Contributing author: Axel Kohlmeyer (Temple U) ------------------------------------------------------------------------- */ +#include "omp_compat.h" #include "fix_nh_sphere_omp.h" #include "atom.h" #include "compute.h" @@ -85,7 +86,7 @@ void FixNHSphereOMP::nve_v() // 4 cases depending on radius vs shape and rmass vs mass #if defined(_OPENMP) -#pragma omp parallel for default(none) schedule(static) +#pragma omp parallel for LMP_DEFAULT_NONE schedule(static) #endif for (int i = 0; i < nlocal; i++) { if (mask[i] & groupbit) { @@ -115,7 +116,7 @@ void FixNHSphereOMP::nh_v_temp() if (which == NOBIAS) { #if defined(_OPENMP) -#pragma omp parallel for default(none) schedule(static) +#pragma omp parallel for LMP_DEFAULT_NONE schedule(static) #endif for (int i = 0; i < nlocal; i++) { if (mask[i] & groupbit) { @@ -129,7 +130,7 @@ void FixNHSphereOMP::nh_v_temp() } } else if (which == BIAS) { #if defined(_OPENMP) -#pragma omp parallel for default(none) schedule(static) +#pragma omp parallel for LMP_DEFAULT_NONE schedule(static) #endif for (int i = 0; i < nlocal; i++) { double buf[3]; diff --git a/src/USER-OMP/fix_nve_omp.cpp b/src/USER-OMP/fix_nve_omp.cpp index f693c2fa20cc019df2a375ebf7ae324bf836091c..13c1dfb642375b9403c3a21d86c0332a08d7647a 100644 --- a/src/USER-OMP/fix_nve_omp.cpp +++ b/src/USER-OMP/fix_nve_omp.cpp @@ -11,6 +11,7 @@ See the README file in the top-level LAMMPS directory. ------------------------------------------------------------------------- */ +#include "omp_compat.h" #include "fix_nve_omp.h" #include "atom.h" @@ -41,7 +42,7 @@ void FixNVEOMP::initial_integrate(int /* vflag */) if (atom->rmass) { const double * const rmass = atom->rmass; #if defined (_OPENMP) -#pragma omp parallel for default(none) schedule(static) +#pragma omp parallel for LMP_DEFAULT_NONE schedule(static) #endif for (int i = 0; i < nlocal; i++) if (mask[i] & groupbit) { @@ -58,7 +59,7 @@ void FixNVEOMP::initial_integrate(int /* vflag */) const double * const mass = atom->mass; const int * const type = atom->type; #if defined (_OPENMP) -#pragma omp parallel for default(none) schedule(static) +#pragma omp parallel for LMP_DEFAULT_NONE schedule(static) #endif for (int i = 0; i < nlocal; i++) if (mask[i] & groupbit) { @@ -87,7 +88,7 @@ void FixNVEOMP::final_integrate() if (atom->rmass) { const double * const rmass = atom->rmass; #if defined (_OPENMP) -#pragma omp parallel for default(none) schedule(static) +#pragma omp parallel for LMP_DEFAULT_NONE schedule(static) #endif for (int i = 0; i < nlocal; i++) if (mask[i] & groupbit) { @@ -101,7 +102,7 @@ void FixNVEOMP::final_integrate() const double * const mass = atom->mass; const int * const type = atom->type; #if defined (_OPENMP) -#pragma omp parallel for default(none) schedule(static) +#pragma omp parallel for LMP_DEFAULT_NONE schedule(static) #endif for (int i = 0; i < nlocal; i++) if (mask[i] & groupbit) { diff --git a/src/USER-OMP/fix_nve_sphere_omp.cpp b/src/USER-OMP/fix_nve_sphere_omp.cpp index bc7be4019ca79d87eff405780f88953f03b45481..4a1bd4dfda9e90727e168ad196c9fbbf3560c9b6 100644 --- a/src/USER-OMP/fix_nve_sphere_omp.cpp +++ b/src/USER-OMP/fix_nve_sphere_omp.cpp @@ -11,6 +11,7 @@ See the README file in the top-level LAMMPS directory. ------------------------------------------------------------------------- */ +#include "omp_compat.h" #include "fix_nve_sphere_omp.h" #include #include "atom.h" @@ -49,7 +50,7 @@ void FixNVESphereOMP::initial_integrate(int /* vflag */) // update v,x,omega for all particles // d_omega/dt = torque / inertia #if defined(_OPENMP) -#pragma omp parallel for default(none) +#pragma omp parallel for LMP_DEFAULT_NONE #endif for (int i = 0; i < nlocal; i++) { if (mask[i] & groupbit) { @@ -76,7 +77,7 @@ void FixNVESphereOMP::initial_integrate(int /* vflag */) double * const * const mu = atom->mu; if (dlm == NODLM) { #if defined(_OPENMP) -#pragma omp parallel for default(none) +#pragma omp parallel for LMP_DEFAULT_NONE #endif for (int i = 0; i < nlocal; i++) { double g0,g1,g2,msq,scale; @@ -95,7 +96,7 @@ void FixNVESphereOMP::initial_integrate(int /* vflag */) } } else { #if defined(_OPENMP) -#pragma omp parallel for default(none) +#pragma omp parallel for LMP_DEFAULT_NONE #endif // Integrate orientation following Dullweber-Leimkuhler-Maclachlan scheme for (int i = 0; i < nlocal; i++) { @@ -223,7 +224,7 @@ void FixNVESphereOMP::final_integrate() // d_omega/dt = torque / inertia #if defined(_OPENMP) -#pragma omp parallel for default(none) +#pragma omp parallel for LMP_DEFAULT_NONE #endif for (int i = 0; i < nlocal; i++) if (mask[i] & groupbit) { diff --git a/src/USER-OMP/fix_nvt_sllod_omp.cpp b/src/USER-OMP/fix_nvt_sllod_omp.cpp index 9b3b5154157e6b2cc55f59c2942973ef4f1eb3f9..0d23d6c03fa0ca50b7fce04b92b838d10d09fc20 100644 --- a/src/USER-OMP/fix_nvt_sllod_omp.cpp +++ b/src/USER-OMP/fix_nvt_sllod_omp.cpp @@ -15,6 +15,7 @@ Contributing author: Axel Kohlmeyer (Temple U) ------------------------------------------------------------------------- */ +#include "omp_compat.h" #include "fix_nvt_sllod_omp.h" #include #include "math_extra.h" @@ -114,7 +115,7 @@ void FixNVTSllodOMP::nh_v_temp() MathExtra::multiply_shape_shape(domain->h_rate,domain->h_inv,h_two); #if defined(_OPENMP) -#pragma omp parallel for default(none) shared(h_two) schedule(static) +#pragma omp parallel for LMP_DEFAULT_NONE LMP_SHARED(h_two) schedule(static) #endif for (int i = 0; i < nlocal; i++) { double vdelu0,vdelu1,vdelu2,buf[3]; diff --git a/src/USER-OMP/fix_omp.cpp b/src/USER-OMP/fix_omp.cpp index 1fca1e739bb24e0f8767044e5d736f42c92e2a75..51e65d24ed54c6d204cbfe67251933ba8458ba91 100644 --- a/src/USER-OMP/fix_omp.cpp +++ b/src/USER-OMP/fix_omp.cpp @@ -16,6 +16,7 @@ OpenMP based threading support for LAMMPS ------------------------------------------------------------------------- */ +#include "omp_compat.h" #include "atom.h" #include "comm.h" #include "error.h" @@ -62,7 +63,8 @@ static int get_tid() FixOMP::FixOMP(LAMMPS *lmp, int narg, char **arg) : Fix(lmp, narg, arg), thr(NULL), last_omp_style(NULL), last_pair_hybrid(NULL), - _nthr(-1), _neighbor(true), _mixed(false), _reduced(true) + _nthr(-1), _neighbor(true), _mixed(false), _reduced(true), + _pair_compute_flag(false), _kspace_compute_flag(false) { if (narg < 4) error->all(FLERR,"Illegal package omp command"); @@ -70,7 +72,7 @@ FixOMP::FixOMP(LAMMPS *lmp, int narg, char **arg) if (narg > 3) { #if defined(_OPENMP) if (strcmp(arg[3],"0") == 0) -#pragma omp parallel default(none) shared(nthreads) +#pragma omp parallel LMP_DEFAULT_NONE LMP_SHARED(nthreads) nthreads = omp_get_num_threads(); else nthreads = force->inumeric(FLERR,arg[3]); @@ -134,7 +136,7 @@ FixOMP::FixOMP(LAMMPS *lmp, int narg, char **arg) thr = new ThrData *[nthreads]; _nthr = nthreads; #if defined(_OPENMP) -#pragma omp parallel default(none) shared(lmp) +#pragma omp parallel LMP_DEFAULT_NONE LMP_SHARED(lmp) #endif { const int tid = get_tid(); @@ -186,7 +188,7 @@ void FixOMP::init() thr = new ThrData *[nthreads]; _nthr = nthreads; #if defined(_OPENMP) -#pragma omp parallel default(none) +#pragma omp parallel LMP_DEFAULT_NONE #endif { const int tid = get_tid(); @@ -206,6 +208,11 @@ void FixOMP::init() && (strstr(update->integrate_style,"respa/omp") == NULL)) error->all(FLERR,"Need to use respa/omp for r-RESPA with /omp styles"); + if (force->pair && force->pair->compute_flag) _pair_compute_flag = true; + else _pair_compute_flag = false; + if (force->kspace && force->kspace->compute_flag) _kspace_compute_flag = true; + else _kspace_compute_flag = false; + int check_hybrid, kspace_split; last_pair_hybrid = NULL; last_omp_style = NULL; @@ -253,7 +260,7 @@ void FixOMP::init() } \ } - if (kspace_split <= 0) { + if (_pair_compute_flag && (kspace_split <= 0)) { CheckStyleForOMP(pair); CheckHybridForOMP(pair,Pair); if (check_hybrid) { @@ -274,7 +281,7 @@ void FixOMP::init() CheckHybridForOMP(improper,Improper); } - if (kspace_split >= 0) { + if (_kspace_compute_flag && (kspace_split >= 0)) { CheckStyleForOMP(kspace); } @@ -346,16 +353,16 @@ void FixOMP::pre_force(int) double **f = atom->f; double **torque = atom->torque; double *erforce = atom->erforce; - double *de = atom->de; + double *desph = atom->desph; double *drho = atom->drho; #if defined(_OPENMP) -#pragma omp parallel default(none) shared(f,torque,erforce,de,drho) +#pragma omp parallel LMP_DEFAULT_NONE LMP_SHARED(f,torque,erforce,desph,drho) #endif { const int tid = get_tid(); thr[tid]->check_tid(tid); - thr[tid]->init_force(nall,f,torque,erforce,de,drho); + thr[tid]->init_force(nall,f,torque,erforce,desph,drho); } // end of omp parallel region _reduced = false; diff --git a/src/USER-OMP/fix_omp.h b/src/USER-OMP/fix_omp.h index 55e042dd52f8d452c373353616efa59ef6976988..3020a927fd46f93f8ed7356d4192487e759a01ff 100644 --- a/src/USER-OMP/fix_omp.h +++ b/src/USER-OMP/fix_omp.h @@ -70,6 +70,8 @@ class FixOMP : public Fix { bool _neighbor; // en/disable threads for neighbor list construction bool _mixed; // whether to prefer mixed precision compute kernels bool _reduced; // whether forces have been reduced for this step + bool _pair_compute_flag; // whether pair_compute is called + bool _kspace_compute_flag; // whether kspace_compute is called void set_neighbor_omp(); }; diff --git a/src/USER-OMP/fix_rigid_nh_omp.cpp b/src/USER-OMP/fix_rigid_nh_omp.cpp index da512cb428b70e136985fbc4d68ec9934714ee46..63084fcc9ef023f38f844b71d3c2b2efdd913514 100644 --- a/src/USER-OMP/fix_rigid_nh_omp.cpp +++ b/src/USER-OMP/fix_rigid_nh_omp.cpp @@ -15,6 +15,7 @@ Contributing author: Axel Kohlmeyer (Temple U) ------------------------------------------------------------------------- */ +#include "omp_compat.h" #include "fix_rigid_nh_omp.h" #include #include @@ -89,7 +90,7 @@ void FixRigidNHOMP::initial_integrate(int vflag) double akt=0.0, akr=0.0; #if defined(_OPENMP) -#pragma omp parallel for default(none) shared(scale_r,scale_t,scale_v) schedule(static) reduction(+:akt,akr) +#pragma omp parallel for LMP_DEFAULT_NONE LMP_SHARED(scale_r,scale_t,scale_v) schedule(static) reduction(+:akt,akr) #endif for (int ibody = 0; ibody < nbody; ibody++) { double mbody[3],tbody[3],fquat[4]; @@ -250,7 +251,7 @@ void FixRigidNHOMP::compute_forces_and_torques() int i; #if defined(_OPENMP) -#pragma omp parallel for default(none) private(i) reduction(+:s0,s1,s2,s3,s4,s5) +#pragma omp parallel for LMP_DEFAULT_NONE private(i) reduction(+:s0,s1,s2,s3,s4,s5) #endif for (i = 0; i < nlocal; i++) { const int ibody = body[i]; @@ -289,7 +290,7 @@ void FixRigidNHOMP::compute_forces_and_torques() int i; #if defined(_OPENMP) -#pragma omp parallel for default(none) private(i) shared(ib) reduction(+:s0,s1,s2,s3,s4,s5) +#pragma omp parallel for LMP_DEFAULT_NONE private(i) LMP_SHARED(ib) reduction(+:s0,s1,s2,s3,s4,s5) #endif for (i = 0; i < nlocal; i++) { const int ibody = body[i]; @@ -330,7 +331,7 @@ void FixRigidNHOMP::compute_forces_and_torques() memset(&sum[0][0],0,6*nbody*sizeof(double)); #if defined(_OPENMP) -#pragma omp parallel default(none) +#pragma omp parallel LMP_DEFAULT_NONE #endif { #if defined(_OPENMP) @@ -373,7 +374,7 @@ void FixRigidNHOMP::compute_forces_and_torques() MPI_Allreduce(sum[0],all[0],6*nbody,MPI_DOUBLE,MPI_SUM,world); #if defined(_OPENMP) -#pragma omp parallel for default(none) private(ibody) schedule(static) +#pragma omp parallel for LMP_DEFAULT_NONE private(ibody) schedule(static) #endif for (ibody = 0; ibody < nbody; ibody++) { fcm[ibody][0] = all[ibody][0] + langextra[ibody][0]; @@ -388,7 +389,7 @@ void FixRigidNHOMP::compute_forces_and_torques() if (id_gravity) { #if defined(_OPENMP) -#pragma omp parallel for default(none) private(ibody) schedule(static) +#pragma omp parallel for LMP_DEFAULT_NONE private(ibody) schedule(static) #endif for (ibody = 0; ibody < nbody; ibody++) { fcm[ibody][0] += gvec[0]*masstotal[ibody]; @@ -433,7 +434,7 @@ void FixRigidNHOMP::final_integrate() const double dtf2 = dtf * 2.0; #if defined(_OPENMP) -#pragma omp parallel for default(none) shared(scale_t,scale_r) schedule(static) reduction(+:akt,akr) +#pragma omp parallel for LMP_DEFAULT_NONE LMP_SHARED(scale_t,scale_r) schedule(static) reduction(+:akt,akr) #endif for (int ibody = 0; ibody < nbody; ibody++) { double mbody[3],tbody[3],fquat[4]; @@ -554,7 +555,7 @@ void FixRigidNHOMP::remap() if (allremap) domain->x2lamda(nlocal); else { #if defined (_OPENMP) -#pragma omp parallel for default(none) schedule(static) +#pragma omp parallel for LMP_DEFAULT_NONE schedule(static) #endif for (int i = 0; i < nlocal; i++) if (mask[i] & dilate_group_bit) @@ -586,7 +587,7 @@ void FixRigidNHOMP::remap() if (allremap) domain->lamda2x(nlocal); else { #if defined (_OPENMP) -#pragma omp parallel for default(none) schedule(static) +#pragma omp parallel for LMP_DEFAULT_NONE schedule(static) #endif for (int i = 0; i < nlocal; i++) if (mask[i] & dilate_group_bit) @@ -631,7 +632,7 @@ void FixRigidNHOMP::set_xv_thr() int i; #if defined(_OPENMP) -#pragma omp parallel for default(none) private(i) reduction(+:v0,v1,v2,v3,v4,v5) +#pragma omp parallel for LMP_DEFAULT_NONE private(i) reduction(+:v0,v1,v2,v3,v4,v5) #endif for (i = 0; i < nlocal; i++) { const int ibody = body[i]; @@ -832,7 +833,7 @@ void FixRigidNHOMP::set_v_thr() int i; #if defined(_OPENMP) -#pragma omp parallel for default(none) private(i) reduction(+:v0,v1,v2,v3,v4,v5) +#pragma omp parallel for LMP_DEFAULT_NONE private(i) reduction(+:v0,v1,v2,v3,v4,v5) #endif for (i = 0; i < nlocal; i++) { const int ibody = body[i]; diff --git a/src/USER-OMP/fix_rigid_nph_omp.cpp b/src/USER-OMP/fix_rigid_nph_omp.cpp index 31d53868c8155f68af26e4b22014c98ccb0a7ffc..ff192341e49da5a7863e257d0142cfd50377f36f 100644 --- a/src/USER-OMP/fix_rigid_nph_omp.cpp +++ b/src/USER-OMP/fix_rigid_nph_omp.cpp @@ -33,7 +33,6 @@ FixRigidNPHOMP::FixRigidNPHOMP(LAMMPS *lmp, int narg, char **arg) : scalar_flag = 1; restart_global = 1; - box_change_size = 1; extscalar = 1; // error checks diff --git a/src/USER-OMP/fix_rigid_npt_omp.cpp b/src/USER-OMP/fix_rigid_npt_omp.cpp index 1e7c139d522aef83ffbf55c791915a79edea9937..6da51e6220949745fa260ee180cbc7a127b557b1 100644 --- a/src/USER-OMP/fix_rigid_npt_omp.cpp +++ b/src/USER-OMP/fix_rigid_npt_omp.cpp @@ -33,7 +33,6 @@ FixRigidNPTOMP::FixRigidNPTOMP(LAMMPS *lmp, int narg, char **arg) : scalar_flag = 1; restart_global = 1; - box_change_size = 1; extscalar = 1; // error checks diff --git a/src/USER-OMP/fix_rigid_omp.cpp b/src/USER-OMP/fix_rigid_omp.cpp index 770361d557bc4d4bc2683b29f0a3f2bf0be23e37..9f78f6dc260c687d19d163d1d76c168f01c1a28d 100644 --- a/src/USER-OMP/fix_rigid_omp.cpp +++ b/src/USER-OMP/fix_rigid_omp.cpp @@ -15,6 +15,7 @@ Contributing author: Axel Kohlmeyer (Temple U) ------------------------------------------------------------------------- */ +#include "omp_compat.h" #include "fix_rigid_omp.h" #include #include @@ -47,7 +48,7 @@ typedef struct { double x,y,z; } dbl3_t; void FixRigidOMP::initial_integrate(int vflag) { #if defined(_OPENMP) -#pragma omp parallel for default(none) schedule(static) +#pragma omp parallel for LMP_DEFAULT_NONE schedule(static) #endif for (int ibody = 0; ibody < nbody; ibody++) { @@ -120,7 +121,7 @@ void FixRigidOMP::compute_forces_and_torques() double s0=0.0,s1=0.0,s2=0.0,s3=0.0,s4=0.0,s5=0.0; #if defined(_OPENMP) -#pragma omp parallel for default(none) reduction(+:s0,s1,s2,s3,s4,s5) +#pragma omp parallel for LMP_DEFAULT_NONE reduction(+:s0,s1,s2,s3,s4,s5) #endif for (int i = 0; i < nlocal; i++) { const int ibody = body[i]; @@ -158,7 +159,7 @@ void FixRigidOMP::compute_forces_and_torques() double s0=0.0,s1=0.0,s2=0.0,s3=0.0,s4=0.0,s5=0.0; #if defined(_OPENMP) -#pragma omp parallel for default(none) shared(ib) reduction(+:s0,s1,s2,s3,s4,s5) +#pragma omp parallel for LMP_DEFAULT_NONE LMP_SHARED(ib) reduction(+:s0,s1,s2,s3,s4,s5) #endif for (int i = 0; i < nlocal; i++) { const int ibody = body[i]; @@ -199,7 +200,7 @@ void FixRigidOMP::compute_forces_and_torques() memset(&sum[0][0],0,6*nbody*sizeof(double)); #if defined(_OPENMP) -#pragma omp parallel default(none) +#pragma omp parallel LMP_DEFAULT_NONE #endif { #if defined(_OPENMP) @@ -246,7 +247,7 @@ void FixRigidOMP::compute_forces_and_torques() // fflag,tflag = 0 for some dimensions in 2d #if defined(_OPENMP) -#pragma omp parallel for default(none) schedule(static) +#pragma omp parallel for LMP_DEFAULT_NONE schedule(static) #endif for (int ibody = 0; ibody < nbody; ibody++) { fcm[ibody][0] = all[ibody][0] + langextra[ibody][0]; @@ -261,7 +262,7 @@ void FixRigidOMP::compute_forces_and_torques() if (id_gravity) { #if defined(_OPENMP) -#pragma omp parallel for default(none) schedule(static) +#pragma omp parallel for LMP_DEFAULT_NONE schedule(static) #endif for (int ibody = 0; ibody < nbody; ibody++) { fcm[ibody][0] += gvec[0]*masstotal[ibody]; @@ -280,7 +281,7 @@ void FixRigidOMP::final_integrate() // update vcm and angmom #if defined(_OPENMP) -#pragma omp parallel for default(none) schedule(static) +#pragma omp parallel for LMP_DEFAULT_NONE schedule(static) #endif for (int ibody = 0; ibody < nbody; ibody++) { @@ -346,7 +347,7 @@ void FixRigidOMP::set_xv_thr() const int nlocal = atom->nlocal; #if defined(_OPENMP) -#pragma omp parallel for default(none) reduction(+:v0,v1,v2,v3,v4,v5) +#pragma omp parallel for LMP_DEFAULT_NONE reduction(+:v0,v1,v2,v3,v4,v5) #endif for (int i = 0; i < nlocal; i++) { const int ibody = body[i]; @@ -546,7 +547,7 @@ void FixRigidOMP::set_v_thr() const int nlocal = atom->nlocal; #if defined(_OPENMP) -#pragma omp parallel for default(none) reduction(+:v0,v1,v2,v3,v4,v5) +#pragma omp parallel for LMP_DEFAULT_NONE reduction(+:v0,v1,v2,v3,v4,v5) #endif for (int i = 0; i < nlocal; i++) { const int ibody = body[i]; diff --git a/src/USER-OMP/fix_rigid_small_omp.cpp b/src/USER-OMP/fix_rigid_small_omp.cpp index fc6b6fa57a358a693640d229a858a2c3539b4006..227b0e1f8a9a0f1c40a79aa3300f181f16d93d29 100644 --- a/src/USER-OMP/fix_rigid_small_omp.cpp +++ b/src/USER-OMP/fix_rigid_small_omp.cpp @@ -15,6 +15,7 @@ Contributing author: Axel Kohlmeyer (Temple U) ------------------------------------------------------------------------- */ +#include "omp_compat.h" #include "fix_rigid_small_omp.h" #include #include "atom.h" @@ -46,7 +47,7 @@ void FixRigidSmallOMP::initial_integrate(int vflag) { #if defined(_OPENMP) -#pragma omp parallel for default(none) schedule(static) +#pragma omp parallel for LMP_DEFAULT_NONE schedule(static) #endif for (int ibody = 0; ibody < nlocal_body; ibody++) { @@ -117,7 +118,7 @@ void FixRigidSmallOMP::compute_forces_and_torques() const int nthreads=comm->nthreads; #if defined(_OPENMP) -#pragma omp parallel for default(none) schedule(static) +#pragma omp parallel for LMP_DEFAULT_NONE schedule(static) #endif for (int ibody = 0; ibody < nlocal_body+nghost_body; ibody++) { double * _noalias const fcm = body[ibody].fcm; @@ -132,7 +133,7 @@ void FixRigidSmallOMP::compute_forces_and_torques() // and then each thread only processes some bodies. #if defined(_OPENMP) -#pragma omp parallel default(none) +#pragma omp parallel LMP_DEFAULT_NONE #endif { #if defined(_OPENMP) @@ -183,7 +184,7 @@ void FixRigidSmallOMP::compute_forces_and_torques() if (langflag) { #if defined(_OPENMP) -#pragma omp parallel for default(none) schedule(static) +#pragma omp parallel for LMP_DEFAULT_NONE schedule(static) #endif for (int ibody = 0; ibody < nlocal_body; ibody++) { double * _noalias const fcm = body[ibody].fcm; @@ -201,7 +202,7 @@ void FixRigidSmallOMP::compute_forces_and_torques() if (id_gravity) { #if defined(_OPENMP) -#pragma omp parallel for default(none) schedule(static) +#pragma omp parallel for LMP_DEFAULT_NONE schedule(static) #endif for (int ibody = 0; ibody < nbody; ibody++) { double * _noalias const fcm = body[ibody].fcm; @@ -222,7 +223,7 @@ void FixRigidSmallOMP::final_integrate() // update vcm and angmom, recompute omega #if defined(_OPENMP) -#pragma omp parallel for default(none) schedule(static) +#pragma omp parallel for LMP_DEFAULT_NONE schedule(static) #endif for (int ibody = 0; ibody < nlocal_body; ibody++) { Body &b = body[ibody]; @@ -294,7 +295,7 @@ void FixRigidSmallOMP::set_xv_thr() const int nlocal = atom->nlocal; #if defined(_OPENMP) -#pragma omp parallel for default(none) reduction(+:v0,v1,v2,v3,v4,v5) +#pragma omp parallel for LMP_DEFAULT_NONE reduction(+:v0,v1,v2,v3,v4,v5) #endif for (int i = 0; i < nlocal; i++) { const int ibody = atom2body[i]; @@ -489,7 +490,7 @@ void FixRigidSmallOMP::set_v_thr() const int nlocal = atom->nlocal; #if defined(_OPENMP) -#pragma omp parallel for default(none) reduction(+:v0,v1,v2,v3,v4,v5) +#pragma omp parallel for LMP_DEFAULT_NONE reduction(+:v0,v1,v2,v3,v4,v5) #endif for (int i = 0; i < nlocal; i++) { const int ibody = atom2body[i]; diff --git a/src/USER-OMP/hack_openmp_for_pgi_gcc9.sh b/src/USER-OMP/hack_openmp_for_pgi_gcc9.sh deleted file mode 100755 index 6f9f30cedd2d185e6f06289aad45eabdb5756d80..0000000000000000000000000000000000000000 --- a/src/USER-OMP/hack_openmp_for_pgi_gcc9.sh +++ /dev/null @@ -1,12 +0,0 @@ -#!/bin/sh - -# convert default(none) directives for OpenMP pragmas to default(shared) and remove shared() directive -# this allows compiling OpenMP pragmas in LAMMPS with compilers that don't support default(none) properly -# or require backward incompatible OpenMP 4 and OpenMP 5 semantics - -for f in *.h *.cpp -do \ - sed -e '/#pragma omp/s/^\(.*default\)(none)\(.*\)$/\1(shared)\2/' \ - -e '/#pragma omp/s/shared([a-z0-9,_]\+)//' \ - -i.bak $f -done diff --git a/src/USER-OMP/improper_class2_omp.cpp b/src/USER-OMP/improper_class2_omp.cpp index 32c7406adaa4879e960c2fa67683ac5cb7d0d254..8927980951443a29167349f1b7aa4ca3a9e631b6 100644 --- a/src/USER-OMP/improper_class2_omp.cpp +++ b/src/USER-OMP/improper_class2_omp.cpp @@ -15,6 +15,7 @@ Contributing author: Axel Kohlmeyer (Temple U) ------------------------------------------------------------------------- */ +#include "omp_compat.h" #include #include "improper_class2_omp.h" #include "atom.h" @@ -50,7 +51,7 @@ void ImproperClass2OMP::compute(int eflag, int vflag) const int inum = neighbor->nimproperlist; #if defined(_OPENMP) -#pragma omp parallel default(none) shared(eflag,vflag) +#pragma omp parallel LMP_DEFAULT_NONE LMP_SHARED(eflag,vflag) #endif { int ifrom, ito, tid; diff --git a/src/USER-OMP/improper_cossq_omp.cpp b/src/USER-OMP/improper_cossq_omp.cpp index 230f13eac76680cc011e6fd55b8f4229a59a7e2c..72d76e8c42190cf54ead303aa64af4d51f284713 100644 --- a/src/USER-OMP/improper_cossq_omp.cpp +++ b/src/USER-OMP/improper_cossq_omp.cpp @@ -15,6 +15,7 @@ Contributing author: Axel Kohlmeyer (Temple U) ------------------------------------------------------------------------- */ +#include "omp_compat.h" #include #include "improper_cossq_omp.h" #include "atom.h" @@ -50,7 +51,7 @@ void ImproperCossqOMP::compute(int eflag, int vflag) const int inum = neighbor->nimproperlist; #if defined(_OPENMP) -#pragma omp parallel default(none) shared(eflag,vflag) +#pragma omp parallel LMP_DEFAULT_NONE LMP_SHARED(eflag,vflag) #endif { int ifrom, ito, tid; diff --git a/src/USER-OMP/improper_cvff_omp.cpp b/src/USER-OMP/improper_cvff_omp.cpp index f5ff5907757e7aa27e8e85967bc9a22f0e411bf3..e9ff4bfc73e0a23fd694641689761188170238c5 100644 --- a/src/USER-OMP/improper_cvff_omp.cpp +++ b/src/USER-OMP/improper_cvff_omp.cpp @@ -15,6 +15,7 @@ Contributing author: Axel Kohlmeyer (Temple U) ------------------------------------------------------------------------- */ +#include "omp_compat.h" #include #include "improper_cvff_omp.h" #include "atom.h" @@ -50,7 +51,7 @@ void ImproperCvffOMP::compute(int eflag, int vflag) const int inum = neighbor->nimproperlist; #if defined(_OPENMP) -#pragma omp parallel default(none) shared(eflag,vflag) +#pragma omp parallel LMP_DEFAULT_NONE LMP_SHARED(eflag,vflag) #endif { int ifrom, ito, tid; diff --git a/src/USER-OMP/improper_fourier_omp.cpp b/src/USER-OMP/improper_fourier_omp.cpp index 4e83c025d06bb3fce97dbd50a744b2378de5d1fb..0671bdc375335ab6b2478438a94e813634106cee 100644 --- a/src/USER-OMP/improper_fourier_omp.cpp +++ b/src/USER-OMP/improper_fourier_omp.cpp @@ -15,6 +15,7 @@ Contributing author: Axel Kohlmeyer (Temple U) ------------------------------------------------------------------------- */ +#include "omp_compat.h" #include #include "improper_fourier_omp.h" #include "atom.h" @@ -50,7 +51,7 @@ void ImproperFourierOMP::compute(int eflag, int vflag) const int inum = neighbor->nimproperlist; #if defined(_OPENMP) -#pragma omp parallel default(none) shared(eflag,vflag) +#pragma omp parallel LMP_DEFAULT_NONE LMP_SHARED(eflag,vflag) #endif { int ifrom, ito, tid; diff --git a/src/USER-OMP/improper_harmonic_omp.cpp b/src/USER-OMP/improper_harmonic_omp.cpp index f2f19557d9501f688326061f317a5c15dc1f39de..8bef42bf23bce154e9acf3af9a13d6af8ee4382c 100644 --- a/src/USER-OMP/improper_harmonic_omp.cpp +++ b/src/USER-OMP/improper_harmonic_omp.cpp @@ -15,6 +15,7 @@ Contributing author: Axel Kohlmeyer (Temple U) ------------------------------------------------------------------------- */ +#include "omp_compat.h" #include #include "improper_harmonic_omp.h" #include "atom.h" @@ -50,7 +51,7 @@ void ImproperHarmonicOMP::compute(int eflag, int vflag) const int inum = neighbor->nimproperlist; #if defined(_OPENMP) -#pragma omp parallel default(none) shared(eflag,vflag) +#pragma omp parallel LMP_DEFAULT_NONE LMP_SHARED(eflag,vflag) #endif { int ifrom, ito, tid; diff --git a/src/USER-OMP/improper_ring_omp.cpp b/src/USER-OMP/improper_ring_omp.cpp index 1d0cc6cc46a813d014be9b0b6a15d5bdc4c20660..4ba67aab700787be50722f3aaff6d94123e71708 100644 --- a/src/USER-OMP/improper_ring_omp.cpp +++ b/src/USER-OMP/improper_ring_omp.cpp @@ -15,6 +15,7 @@ Contributing author: Axel Kohlmeyer (Temple U) ------------------------------------------------------------------------- */ +#include "omp_compat.h" #include "improper_ring_omp.h" #include #include "atom.h" @@ -50,7 +51,7 @@ void ImproperRingOMP::compute(int eflag, int vflag) const int inum = neighbor->nimproperlist; #if defined(_OPENMP) -#pragma omp parallel default(none) shared(eflag,vflag) +#pragma omp parallel LMP_DEFAULT_NONE LMP_SHARED(eflag,vflag) #endif { int ifrom, ito, tid; diff --git a/src/USER-OMP/improper_umbrella_omp.cpp b/src/USER-OMP/improper_umbrella_omp.cpp index 4cea8a4b633439bc67e9087bfa4c6f4e8c9f58ef..bf466afb19a8f8ff554a9bb9e888bc6abf717222 100644 --- a/src/USER-OMP/improper_umbrella_omp.cpp +++ b/src/USER-OMP/improper_umbrella_omp.cpp @@ -15,6 +15,7 @@ Contributing author: Axel Kohlmeyer (Temple U) ------------------------------------------------------------------------- */ +#include "omp_compat.h" #include #include "improper_umbrella_omp.h" #include "atom.h" @@ -50,7 +51,7 @@ void ImproperUmbrellaOMP::compute(int eflag, int vflag) const int inum = neighbor->nimproperlist; #if defined(_OPENMP) -#pragma omp parallel default(none) shared(eflag,vflag) +#pragma omp parallel LMP_DEFAULT_NONE LMP_SHARED(eflag,vflag) #endif { int ifrom, ito, tid; diff --git a/src/USER-OMP/msm_cg_omp.cpp b/src/USER-OMP/msm_cg_omp.cpp index 7ca01dbd6a2305a691c88003c2bf8202aeb26d9d..16db4857d6d8a427c25fb5fb7e0c6e5e0aea51a3 100644 --- a/src/USER-OMP/msm_cg_omp.cpp +++ b/src/USER-OMP/msm_cg_omp.cpp @@ -16,6 +16,7 @@ Original MSM class by: Paul Crozier, Stan Moore, Stephen Bond, (all SNL) ------------------------------------------------------------------------- */ +#include "omp_compat.h" #include "msm_cg_omp.h" #include #include @@ -310,7 +311,7 @@ void MSMCGOMP::compute(int eflag, int vflag) } #if defined(_OPENMP) -#pragma omp parallel default(none) shared(eflag,vflag) +#pragma omp parallel LMP_DEFAULT_NONE LMP_SHARED(eflag,vflag) #endif { #if defined(_OPENMP) diff --git a/src/USER-OMP/msm_omp.cpp b/src/USER-OMP/msm_omp.cpp index 81f84e8f6f8ce1d992698b10fe07c4c3b98c3ddb..26892267253c735e9f49bae854f97ee85c6c55fa 100644 --- a/src/USER-OMP/msm_omp.cpp +++ b/src/USER-OMP/msm_omp.cpp @@ -15,6 +15,7 @@ Contributing authors: Axel Kohlmeyer (Temple U), Stan Moore (SNL) ------------------------------------------------------------------------- */ +#include "omp_compat.h" #include "msm_omp.h" #include #include "comm.h" @@ -52,7 +53,7 @@ void MSMOMP::compute(int eflag, int vflag) MSM::compute(eflag,vflag); #if defined(_OPENMP) -#pragma omp parallel default(none) shared(eflag,vflag) +#pragma omp parallel LMP_DEFAULT_NONE LMP_SHARED(eflag,vflag) #endif { #if defined(_OPENMP) @@ -158,7 +159,7 @@ void MSMOMP::direct_eval(const int nn) const int n=nn; #if defined(_OPENMP) -#pragma omp parallel default(none) reduction(+:v0,v1,v2,v3,v4,v5,emsm) +#pragma omp parallel LMP_DEFAULT_NONE reduction(+:v0,v1,v2,v3,v4,v5,emsm) #endif { double esum,v0sum,v1sum,v2sum,v3sum,v4sum,v5sum; diff --git a/src/USER-OMP/npair_full_bin_atomonly_omp.cpp b/src/USER-OMP/npair_full_bin_atomonly_omp.cpp index 3bda2e4c5a822982f7c08425cfe39f6e165cf0ae..226b2dcf6d58851fe7c3f18b04637a48d1973e49 100644 --- a/src/USER-OMP/npair_full_bin_atomonly_omp.cpp +++ b/src/USER-OMP/npair_full_bin_atomonly_omp.cpp @@ -11,6 +11,7 @@ See the README file in the top-level LAMMPS directory. ------------------------------------------------------------------------- */ +#include "omp_compat.h" #include "npair_full_bin_atomonly_omp.h" #include "npair_omp.h" #include "neigh_list.h" @@ -36,7 +37,7 @@ void NPairFullBinAtomonlyOmp::build(NeighList *list) NPAIR_OMP_INIT; #if defined(_OPENMP) -#pragma omp parallel default(none) shared(list) +#pragma omp parallel LMP_DEFAULT_NONE LMP_SHARED(list) #endif NPAIR_OMP_SETUP(nlocal); diff --git a/src/USER-OMP/npair_full_bin_ghost_omp.cpp b/src/USER-OMP/npair_full_bin_ghost_omp.cpp index b0b0070df59e9a03478f2326ef6e28fdf3141e29..e9297538d98e63223096818b84d31e49d5341de1 100644 --- a/src/USER-OMP/npair_full_bin_ghost_omp.cpp +++ b/src/USER-OMP/npair_full_bin_ghost_omp.cpp @@ -11,6 +11,7 @@ See the README file in the top-level LAMMPS directory. ------------------------------------------------------------------------- */ +#include "omp_compat.h" #include "npair_full_bin_ghost_omp.h" #include "npair_omp.h" #include "neigh_list.h" @@ -42,7 +43,7 @@ void NPairFullBinGhostOmp::build(NeighList *list) NPAIR_OMP_INIT; #if defined(_OPENMP) -#pragma omp parallel default(none) shared(list) +#pragma omp parallel LMP_DEFAULT_NONE LMP_SHARED(list) #endif NPAIR_OMP_SETUP(nall); diff --git a/src/USER-OMP/npair_full_bin_omp.cpp b/src/USER-OMP/npair_full_bin_omp.cpp index d3e30b49324c9379e291f4cb78e1320e46c748f1..35835cae1da603337d257ed1700b1ffc581051e5 100644 --- a/src/USER-OMP/npair_full_bin_omp.cpp +++ b/src/USER-OMP/npair_full_bin_omp.cpp @@ -11,6 +11,7 @@ See the README file in the top-level LAMMPS directory. ------------------------------------------------------------------------- */ +#include "omp_compat.h" #include "npair_full_bin_omp.h" #include "npair_omp.h" #include "neigh_list.h" @@ -40,7 +41,7 @@ void NPairFullBinOmp::build(NeighList *list) NPAIR_OMP_INIT; #if defined(_OPENMP) -#pragma omp parallel default(none) shared(list) +#pragma omp parallel LMP_DEFAULT_NONE LMP_SHARED(list) #endif NPAIR_OMP_SETUP(nlocal); diff --git a/src/USER-OMP/npair_full_multi_omp.cpp b/src/USER-OMP/npair_full_multi_omp.cpp index 707db2edcfc0fa4cd4bed94283a748071f98fbdf..b4b0ea3033ca2afa0113ca67b5c0f1f394eaf693 100644 --- a/src/USER-OMP/npair_full_multi_omp.cpp +++ b/src/USER-OMP/npair_full_multi_omp.cpp @@ -11,6 +11,7 @@ See the README file in the top-level LAMMPS directory. ------------------------------------------------------------------------- */ +#include "omp_compat.h" #include "npair_full_multi_omp.h" #include "npair_omp.h" #include "neigh_list.h" @@ -41,7 +42,7 @@ void NPairFullMultiOmp::build(NeighList *list) NPAIR_OMP_INIT; #if defined(_OPENMP) -#pragma omp parallel default(none) shared(list) +#pragma omp parallel LMP_DEFAULT_NONE LMP_SHARED(list) #endif NPAIR_OMP_SETUP(nlocal); diff --git a/src/USER-OMP/npair_full_nsq_ghost_omp.cpp b/src/USER-OMP/npair_full_nsq_ghost_omp.cpp index 527df58fd66ba60414758bdc7ebfbbabb6a31c4b..8b940f3724d3c7e80eb796b5f95e0c6c6a382b15 100644 --- a/src/USER-OMP/npair_full_nsq_ghost_omp.cpp +++ b/src/USER-OMP/npair_full_nsq_ghost_omp.cpp @@ -11,6 +11,7 @@ See the README file in the top-level LAMMPS directory. ------------------------------------------------------------------------- */ +#include "omp_compat.h" #include "npair_full_nsq_ghost_omp.h" #include "npair_omp.h" #include "neigh_list.h" @@ -42,7 +43,7 @@ void NPairFullNsqGhostOmp::build(NeighList *list) NPAIR_OMP_INIT; #if defined(_OPENMP) -#pragma omp parallel default(none) shared(list) +#pragma omp parallel LMP_DEFAULT_NONE LMP_SHARED(list) #endif NPAIR_OMP_SETUP(nall); diff --git a/src/USER-OMP/npair_full_nsq_omp.cpp b/src/USER-OMP/npair_full_nsq_omp.cpp index 2719f5dc2c075d9051c5dcac7f63b90b36681dfd..95c5caa148cd775b40a1324746d68e13118b907d 100644 --- a/src/USER-OMP/npair_full_nsq_omp.cpp +++ b/src/USER-OMP/npair_full_nsq_omp.cpp @@ -11,6 +11,7 @@ See the README file in the top-level LAMMPS directory. ------------------------------------------------------------------------- */ +#include "omp_compat.h" #include "npair_full_nsq_omp.h" #include "npair_omp.h" #include "neigh_list.h" @@ -42,7 +43,7 @@ void NPairFullNsqOmp::build(NeighList *list) NPAIR_OMP_INIT; #if defined(_OPENMP) -#pragma omp parallel default(none) shared(list) +#pragma omp parallel LMP_DEFAULT_NONE LMP_SHARED(list) #endif NPAIR_OMP_SETUP(nlocal); diff --git a/src/USER-OMP/npair_half_bin_atomonly_newton_omp.cpp b/src/USER-OMP/npair_half_bin_atomonly_newton_omp.cpp index a69779d96d6c86a7bbcb4cb10ca4bca26ba26c27..230d10a267e347abd41bd76ea4f5898ec960273d 100644 --- a/src/USER-OMP/npair_half_bin_atomonly_newton_omp.cpp +++ b/src/USER-OMP/npair_half_bin_atomonly_newton_omp.cpp @@ -11,6 +11,7 @@ See the README file in the top-level LAMMPS directory. ------------------------------------------------------------------------- */ +#include "omp_compat.h" #include "npair_half_bin_atomonly_newton_omp.h" #include "npair_omp.h" #include "neigh_list.h" @@ -37,7 +38,7 @@ void NPairHalfBinAtomonlyNewtonOmp::build(NeighList *list) NPAIR_OMP_INIT; #if defined(_OPENMP) -#pragma omp parallel default(none) shared(list) +#pragma omp parallel LMP_DEFAULT_NONE LMP_SHARED(list) #endif NPAIR_OMP_SETUP(nlocal); diff --git a/src/USER-OMP/npair_half_bin_newtoff_ghost_omp.cpp b/src/USER-OMP/npair_half_bin_newtoff_ghost_omp.cpp index 5f8ffdab29ac4ee23aa0986383bda518e42b71da..33fa4ed68565c17c48a6dacd07d5d3ab57c14fef 100644 --- a/src/USER-OMP/npair_half_bin_newtoff_ghost_omp.cpp +++ b/src/USER-OMP/npair_half_bin_newtoff_ghost_omp.cpp @@ -11,6 +11,7 @@ See the README file in the top-level LAMMPS directory. ------------------------------------------------------------------------- */ +#include "omp_compat.h" #include "npair_half_bin_newtoff_ghost_omp.h" #include "npair_omp.h" #include "neigh_list.h" @@ -46,7 +47,7 @@ void NPairHalfBinNewtoffGhostOmp::build(NeighList *list) NPAIR_OMP_INIT; #if defined(_OPENMP) -#pragma omp parallel default(none) shared(list) +#pragma omp parallel LMP_DEFAULT_NONE LMP_SHARED(list) #endif NPAIR_OMP_SETUP(nall); diff --git a/src/USER-OMP/npair_half_bin_newtoff_omp.cpp b/src/USER-OMP/npair_half_bin_newtoff_omp.cpp index 35807645cfe622f5d10dc5a7441e11839231464d..8e756d507268cd2274e87fc64282acf5425d3cab 100644 --- a/src/USER-OMP/npair_half_bin_newtoff_omp.cpp +++ b/src/USER-OMP/npair_half_bin_newtoff_omp.cpp @@ -11,6 +11,7 @@ See the README file in the top-level LAMMPS directory. ------------------------------------------------------------------------- */ +#include "omp_compat.h" #include "npair_half_bin_newtoff_omp.h" #include "npair_omp.h" #include "neigh_list.h" @@ -42,7 +43,7 @@ void NPairHalfBinNewtoffOmp::build(NeighList *list) NPAIR_OMP_INIT; #if defined(_OPENMP) -#pragma omp parallel default(none) shared(list) +#pragma omp parallel LMP_DEFAULT_NONE LMP_SHARED(list) #endif NPAIR_OMP_SETUP(nlocal); diff --git a/src/USER-OMP/npair_half_bin_newton_omp.cpp b/src/USER-OMP/npair_half_bin_newton_omp.cpp index 2700d6863bfd47be498f29207eead212946f4d5b..e27a58de46ccad5127c31c445603361ea326aa77 100644 --- a/src/USER-OMP/npair_half_bin_newton_omp.cpp +++ b/src/USER-OMP/npair_half_bin_newton_omp.cpp @@ -11,6 +11,7 @@ See the README file in the top-level LAMMPS directory. ------------------------------------------------------------------------- */ +#include "omp_compat.h" #include "npair_half_bin_newton_omp.h" #include "npair_omp.h" #include "neigh_list.h" @@ -41,7 +42,7 @@ void NPairHalfBinNewtonOmp::build(NeighList *list) NPAIR_OMP_INIT; #if defined(_OPENMP) -#pragma omp parallel default(none) shared(list) +#pragma omp parallel LMP_DEFAULT_NONE LMP_SHARED(list) #endif NPAIR_OMP_SETUP(nlocal); diff --git a/src/USER-OMP/npair_half_bin_newton_tri_omp.cpp b/src/USER-OMP/npair_half_bin_newton_tri_omp.cpp index d94845898c2b7442b2926f7b9283c69bcfc5c7ae..f88df4aed451c85261223f0e409919160dc7b4dc 100644 --- a/src/USER-OMP/npair_half_bin_newton_tri_omp.cpp +++ b/src/USER-OMP/npair_half_bin_newton_tri_omp.cpp @@ -11,6 +11,7 @@ See the README file in the top-level LAMMPS directory. ------------------------------------------------------------------------- */ +#include "omp_compat.h" #include "npair_half_bin_newton_tri_omp.h" #include "npair_omp.h" #include "neigh_list.h" @@ -41,7 +42,7 @@ void NPairHalfBinNewtonTriOmp::build(NeighList *list) NPAIR_OMP_INIT; #if defined(_OPENMP) -#pragma omp parallel default(none) shared(list) +#pragma omp parallel LMP_DEFAULT_NONE LMP_SHARED(list) #endif NPAIR_OMP_SETUP(nlocal); diff --git a/src/USER-OMP/npair_half_multi_newtoff_omp.cpp b/src/USER-OMP/npair_half_multi_newtoff_omp.cpp index c06737dc1cb753f4110ceb08f88e7f88ae418935..586809c174cdc92bb625b87fe60f0eaaf406c58a 100644 --- a/src/USER-OMP/npair_half_multi_newtoff_omp.cpp +++ b/src/USER-OMP/npair_half_multi_newtoff_omp.cpp @@ -11,6 +11,7 @@ See the README file in the top-level LAMMPS directory. ------------------------------------------------------------------------- */ +#include "omp_compat.h" #include "npair_half_multi_newtoff_omp.h" #include "npair_omp.h" #include "neigh_list.h" @@ -43,7 +44,7 @@ void NPairHalfMultiNewtoffOmp::build(NeighList *list) NPAIR_OMP_INIT; #if defined(_OPENMP) -#pragma omp parallel default(none) shared(list) +#pragma omp parallel LMP_DEFAULT_NONE LMP_SHARED(list) #endif NPAIR_OMP_SETUP(nlocal); diff --git a/src/USER-OMP/npair_half_multi_newton_omp.cpp b/src/USER-OMP/npair_half_multi_newton_omp.cpp index 50df756be4857f3e8be95935deb31ec77cf85e76..9b8fc78f0981d3912fa08453df9894382799b713 100644 --- a/src/USER-OMP/npair_half_multi_newton_omp.cpp +++ b/src/USER-OMP/npair_half_multi_newton_omp.cpp @@ -11,6 +11,7 @@ See the README file in the top-level LAMMPS directory. ------------------------------------------------------------------------- */ +#include "omp_compat.h" #include "npair_half_multi_newton_omp.h" #include "npair_omp.h" #include "neigh_list.h" @@ -42,7 +43,7 @@ void NPairHalfMultiNewtonOmp::build(NeighList *list) NPAIR_OMP_INIT; #if defined(_OPENMP) -#pragma omp parallel default(none) shared(list) +#pragma omp parallel LMP_DEFAULT_NONE LMP_SHARED(list) #endif NPAIR_OMP_SETUP(nlocal); diff --git a/src/USER-OMP/npair_half_multi_newton_tri_omp.cpp b/src/USER-OMP/npair_half_multi_newton_tri_omp.cpp index 8b78b311dd917f38298b4bd0efe2809483ac7882..fec687d0759b2516ec9b5390423223732cbfc1b4 100644 --- a/src/USER-OMP/npair_half_multi_newton_tri_omp.cpp +++ b/src/USER-OMP/npair_half_multi_newton_tri_omp.cpp @@ -11,6 +11,7 @@ See the README file in the top-level LAMMPS directory. ------------------------------------------------------------------------- */ +#include "omp_compat.h" #include "npair_half_multi_newton_tri_omp.h" #include "npair_omp.h" #include "neigh_list.h" @@ -43,7 +44,7 @@ void NPairHalfMultiNewtonTriOmp::build(NeighList *list) NPAIR_OMP_INIT; #if defined(_OPENMP) -#pragma omp parallel default(none) shared(list) +#pragma omp parallel LMP_DEFAULT_NONE LMP_SHARED(list) #endif NPAIR_OMP_SETUP(nlocal); diff --git a/src/USER-OMP/npair_half_nsq_newtoff_ghost_omp.cpp b/src/USER-OMP/npair_half_nsq_newtoff_ghost_omp.cpp index f0eb211425361736c144546d1d74e24f32311abc..316c63d541afa84b40716f8d75bdea076dfa0f3d 100644 --- a/src/USER-OMP/npair_half_nsq_newtoff_ghost_omp.cpp +++ b/src/USER-OMP/npair_half_nsq_newtoff_ghost_omp.cpp @@ -11,6 +11,7 @@ See the README file in the top-level LAMMPS directory. ------------------------------------------------------------------------- */ +#include "omp_compat.h" #include "npair_half_nsq_newtoff_ghost_omp.h" #include "npair_omp.h" #include "neigh_list.h" @@ -47,7 +48,7 @@ void NPairHalfNsqNewtoffGhostOmp::build(NeighList *list) NPAIR_OMP_INIT; #if defined(_OPENMP) -#pragma omp parallel default(none) shared(list) +#pragma omp parallel LMP_DEFAULT_NONE LMP_SHARED(list) #endif NPAIR_OMP_SETUP(nall); diff --git a/src/USER-OMP/npair_half_nsq_newtoff_omp.cpp b/src/USER-OMP/npair_half_nsq_newtoff_omp.cpp index 55b9f9e51260b4d8f22a3a3a4449bc396659e405..c937b5bc68904c99dbd0993f75091bed530b854d 100644 --- a/src/USER-OMP/npair_half_nsq_newtoff_omp.cpp +++ b/src/USER-OMP/npair_half_nsq_newtoff_omp.cpp @@ -11,6 +11,7 @@ See the README file in the top-level LAMMPS directory. ------------------------------------------------------------------------- */ +#include "omp_compat.h" #include "npair_half_nsq_newtoff_omp.h" #include "npair_omp.h" #include "neigh_list.h" @@ -44,7 +45,7 @@ void NPairHalfNsqNewtoffOmp::build(NeighList *list) NPAIR_OMP_INIT; #if defined(_OPENMP) -#pragma omp parallel default(none) shared(list) +#pragma omp parallel LMP_DEFAULT_NONE LMP_SHARED(list) #endif NPAIR_OMP_SETUP(nlocal); diff --git a/src/USER-OMP/npair_half_nsq_newton_omp.cpp b/src/USER-OMP/npair_half_nsq_newton_omp.cpp index 223da622e86d09b71f8bc7b614c998e94be33d0f..6baab97aa0c3e9dccf8f0831e0fde4b50e538fe2 100644 --- a/src/USER-OMP/npair_half_nsq_newton_omp.cpp +++ b/src/USER-OMP/npair_half_nsq_newton_omp.cpp @@ -11,6 +11,7 @@ See the README file in the top-level LAMMPS directory. ------------------------------------------------------------------------- */ +#include "omp_compat.h" #include "npair_half_nsq_newton_omp.h" #include "npair_omp.h" #include "neigh_list.h" @@ -43,7 +44,7 @@ void NPairHalfNsqNewtonOmp::build(NeighList *list) NPAIR_OMP_INIT; #if defined(_OPENMP) -#pragma omp parallel default(none) shared(list) +#pragma omp parallel LMP_DEFAULT_NONE LMP_SHARED(list) #endif NPAIR_OMP_SETUP(nlocal); diff --git a/src/USER-OMP/npair_half_respa_bin_newtoff_omp.cpp b/src/USER-OMP/npair_half_respa_bin_newtoff_omp.cpp index 9bb4d277fe02249ef08711522778571dae4f7485..c8dc37f978290f9ccd6d11724c1c7d720a7e4a9f 100644 --- a/src/USER-OMP/npair_half_respa_bin_newtoff_omp.cpp +++ b/src/USER-OMP/npair_half_respa_bin_newtoff_omp.cpp @@ -11,6 +11,7 @@ See the README file in the top-level LAMMPS directory. ------------------------------------------------------------------------- */ +#include "omp_compat.h" #include "npair_half_respa_bin_newtoff_omp.h" #include "npair_omp.h" #include "neigh_list.h" @@ -47,7 +48,7 @@ void NPairHalfRespaBinNewtoffOmp::build(NeighList *list) const int respamiddle = list->respamiddle; #if defined(_OPENMP) -#pragma omp parallel default(none) shared(list) +#pragma omp parallel LMP_DEFAULT_NONE LMP_SHARED(list) #endif NPAIR_OMP_SETUP(nlocal); diff --git a/src/USER-OMP/npair_half_respa_bin_newton_omp.cpp b/src/USER-OMP/npair_half_respa_bin_newton_omp.cpp index 9ed0ae482dab3ac8d1ed009bacd88c5e33364616..98732a62eab9820d4009f0f6ec5721da135c389c 100644 --- a/src/USER-OMP/npair_half_respa_bin_newton_omp.cpp +++ b/src/USER-OMP/npair_half_respa_bin_newton_omp.cpp @@ -11,6 +11,7 @@ See the README file in the top-level LAMMPS directory. ------------------------------------------------------------------------- */ +#include "omp_compat.h" #include "npair_half_respa_bin_newton_omp.h" #include "npair_omp.h" #include "neigh_list.h" @@ -46,7 +47,7 @@ void NPairHalfRespaBinNewtonOmp::build(NeighList *list) const int respamiddle = list->respamiddle; #if defined(_OPENMP) -#pragma omp parallel default(none) shared(list) +#pragma omp parallel LMP_DEFAULT_NONE LMP_SHARED(list) #endif NPAIR_OMP_SETUP(nlocal); diff --git a/src/USER-OMP/npair_half_respa_bin_newton_tri_omp.cpp b/src/USER-OMP/npair_half_respa_bin_newton_tri_omp.cpp index cd036849400e3cac72314419b93d67ae71ace78e..65315a29055ce45d96362d51b70d0400fd38ddf0 100644 --- a/src/USER-OMP/npair_half_respa_bin_newton_tri_omp.cpp +++ b/src/USER-OMP/npair_half_respa_bin_newton_tri_omp.cpp @@ -11,6 +11,7 @@ See the README file in the top-level LAMMPS directory. ------------------------------------------------------------------------- */ +#include "omp_compat.h" #include "npair_half_respa_bin_newton_tri_omp.h" #include "npair_omp.h" #include "neigh_list.h" @@ -46,7 +47,7 @@ void NPairHalfRespaBinNewtonTriOmp::build(NeighList *list) const int respamiddle = list->respamiddle; #if defined(_OPENMP) -#pragma omp parallel default(none) shared(list) +#pragma omp parallel LMP_DEFAULT_NONE LMP_SHARED(list) #endif NPAIR_OMP_SETUP(nlocal); diff --git a/src/USER-OMP/npair_half_respa_nsq_newtoff_omp.cpp b/src/USER-OMP/npair_half_respa_nsq_newtoff_omp.cpp index b1e7467ec7ded49c4a5c56f063849e5c43235580..45d81069fc58db0f5db0510d9b90b42471b209f3 100644 --- a/src/USER-OMP/npair_half_respa_nsq_newtoff_omp.cpp +++ b/src/USER-OMP/npair_half_respa_nsq_newtoff_omp.cpp @@ -11,6 +11,7 @@ See the README file in the top-level LAMMPS directory. ------------------------------------------------------------------------- */ +#include "omp_compat.h" #include "npair_half_respa_nsq_newtoff_omp.h" #include "npair_omp.h" #include "neigh_list.h" @@ -48,7 +49,7 @@ void NPairHalfRespaNsqNewtoffOmp::build(NeighList *list) const int respamiddle = list->respamiddle; #if defined(_OPENMP) -#pragma omp parallel default(none) shared(list) +#pragma omp parallel LMP_DEFAULT_NONE LMP_SHARED(list) #endif NPAIR_OMP_SETUP(nlocal); diff --git a/src/USER-OMP/npair_half_respa_nsq_newton_omp.cpp b/src/USER-OMP/npair_half_respa_nsq_newton_omp.cpp index c22965895da5b35e192e146c6a3a4a0d491feb55..1237ce7858221b4b0c44cb0cebeccaef51a76d06 100644 --- a/src/USER-OMP/npair_half_respa_nsq_newton_omp.cpp +++ b/src/USER-OMP/npair_half_respa_nsq_newton_omp.cpp @@ -11,6 +11,7 @@ See the README file in the top-level LAMMPS directory. ------------------------------------------------------------------------- */ +#include "omp_compat.h" #include "npair_half_respa_nsq_newton_omp.h" #include "npair_omp.h" #include "neigh_list.h" @@ -49,7 +50,7 @@ void NPairHalfRespaNsqNewtonOmp::build(NeighList *list) const int respamiddle = list->respamiddle; #if defined(_OPENMP) -#pragma omp parallel default(none) shared(list) +#pragma omp parallel LMP_DEFAULT_NONE LMP_SHARED(list) #endif NPAIR_OMP_SETUP(nlocal); diff --git a/src/USER-OMP/npair_half_size_bin_newtoff_omp.cpp b/src/USER-OMP/npair_half_size_bin_newtoff_omp.cpp index 1b437482c4ae3a8b7731553e8e1d37d1aaf15de5..c979c1384def18a8afc0542ab4afddc72bae65d4 100644 --- a/src/USER-OMP/npair_half_size_bin_newtoff_omp.cpp +++ b/src/USER-OMP/npair_half_size_bin_newtoff_omp.cpp @@ -11,6 +11,7 @@ See the README file in the top-level LAMMPS directory. ------------------------------------------------------------------------- */ +#include "omp_compat.h" #include "npair_half_size_bin_newtoff_omp.h" #include "npair_omp.h" #include "neigh_list.h" @@ -43,7 +44,7 @@ void NPairHalfSizeBinNewtoffOmp::build(NeighList *list) NPAIR_OMP_INIT; #if defined(_OPENMP) -#pragma omp parallel default(none) shared(list) +#pragma omp parallel LMP_DEFAULT_NONE LMP_SHARED(list) #endif NPAIR_OMP_SETUP(nlocal); diff --git a/src/USER-OMP/npair_half_size_bin_newton_omp.cpp b/src/USER-OMP/npair_half_size_bin_newton_omp.cpp index 8e0581d4ce184f4258e31c5f91078f7e6ec65af9..c83cf77e50d1af8bf0a4eed3c1bf90ed3eebe037 100644 --- a/src/USER-OMP/npair_half_size_bin_newton_omp.cpp +++ b/src/USER-OMP/npair_half_size_bin_newton_omp.cpp @@ -11,6 +11,7 @@ See the README file in the top-level LAMMPS directory. ------------------------------------------------------------------------- */ +#include "omp_compat.h" #include "npair_half_size_bin_newton_omp.h" #include "npair_omp.h" #include "neigh_list.h" @@ -42,7 +43,7 @@ void NPairHalfSizeBinNewtonOmp::build(NeighList *list) NPAIR_OMP_INIT; #if defined(_OPENMP) -#pragma omp parallel default(none) shared(list) +#pragma omp parallel LMP_DEFAULT_NONE LMP_SHARED(list) #endif NPAIR_OMP_SETUP(nlocal); diff --git a/src/USER-OMP/npair_half_size_bin_newton_tri_omp.cpp b/src/USER-OMP/npair_half_size_bin_newton_tri_omp.cpp index 38a2c0d61ffe1bdb36f191861cf39df82f48d703..a615b11d937290a20b2cd153d666eafab7a3def2 100644 --- a/src/USER-OMP/npair_half_size_bin_newton_tri_omp.cpp +++ b/src/USER-OMP/npair_half_size_bin_newton_tri_omp.cpp @@ -11,6 +11,7 @@ See the README file in the top-level LAMMPS directory. ------------------------------------------------------------------------- */ +#include "omp_compat.h" #include "npair_half_size_bin_newton_tri_omp.h" #include "npair_omp.h" #include "neigh_list.h" @@ -41,7 +42,7 @@ void NPairHalfSizeBinNewtonTriOmp::build(NeighList *list) NPAIR_OMP_INIT; #if defined(_OPENMP) -#pragma omp parallel default(none) shared(list) +#pragma omp parallel LMP_DEFAULT_NONE LMP_SHARED(list) #endif NPAIR_OMP_SETUP(nlocal); diff --git a/src/USER-OMP/npair_half_size_nsq_newtoff_omp.cpp b/src/USER-OMP/npair_half_size_nsq_newtoff_omp.cpp index d1505e1b2ef6f8d4f4cefe57850099c3a2192500..f42cc3e9bf3fe9737e215555cd61375d55951fbb 100644 --- a/src/USER-OMP/npair_half_size_nsq_newtoff_omp.cpp +++ b/src/USER-OMP/npair_half_size_nsq_newtoff_omp.cpp @@ -11,6 +11,7 @@ See the README file in the top-level LAMMPS directory. ------------------------------------------------------------------------- */ +#include "omp_compat.h" #include "npair_half_size_nsq_newtoff_omp.h" #include "npair_omp.h" #include "neigh_list.h" @@ -45,7 +46,7 @@ void NPairHalfSizeNsqNewtoffOmp::build(NeighList *list) NPAIR_OMP_INIT; #if defined(_OPENMP) -#pragma omp parallel default(none) shared(list) +#pragma omp parallel LMP_DEFAULT_NONE LMP_SHARED(list) #endif NPAIR_OMP_SETUP(nlocal); diff --git a/src/USER-OMP/npair_half_size_nsq_newton_omp.cpp b/src/USER-OMP/npair_half_size_nsq_newton_omp.cpp index 9027b0728d7d9e35c3b56cfea08b303db218abd0..10d7d26b3d19d0b80002e93db26081fb987004ed 100644 --- a/src/USER-OMP/npair_half_size_nsq_newton_omp.cpp +++ b/src/USER-OMP/npair_half_size_nsq_newton_omp.cpp @@ -11,6 +11,7 @@ See the README file in the top-level LAMMPS directory. ------------------------------------------------------------------------- */ +#include "omp_compat.h" #include "npair_half_size_nsq_newton_omp.h" #include "npair_omp.h" #include "neigh_list.h" @@ -46,7 +47,7 @@ void NPairHalfSizeNsqNewtonOmp::build(NeighList *list) NPAIR_OMP_INIT; #if defined(_OPENMP) -#pragma omp parallel default(none) shared(list) +#pragma omp parallel LMP_DEFAULT_NONE LMP_SHARED(list) #endif NPAIR_OMP_SETUP(nlocal); diff --git a/src/USER-OMP/npair_halffull_newtoff_omp.cpp b/src/USER-OMP/npair_halffull_newtoff_omp.cpp index 7d2fe4f109e3d49d8f4daeef88788c621ee76cec..7ad015707699f93999cd9d565f55e5151fdf5bec 100644 --- a/src/USER-OMP/npair_halffull_newtoff_omp.cpp +++ b/src/USER-OMP/npair_halffull_newtoff_omp.cpp @@ -11,6 +11,7 @@ See the README file in the top-level LAMMPS directory. ------------------------------------------------------------------------- */ +#include "omp_compat.h" #include "npair_halffull_newtoff_omp.h" #include "npair_omp.h" #include "neigh_list.h" @@ -38,7 +39,7 @@ void NPairHalffullNewtoffOmp::build(NeighList *list) NPAIR_OMP_INIT; #if defined(_OPENMP) -#pragma omp parallel default(none) shared(list) +#pragma omp parallel LMP_DEFAULT_NONE LMP_SHARED(list) #endif NPAIR_OMP_SETUP(inum_full); diff --git a/src/USER-OMP/npair_halffull_newton_omp.cpp b/src/USER-OMP/npair_halffull_newton_omp.cpp index 3fcc8c2e9868a293dd99a2d68ab9b3560fccd1d5..9e248ee60991166f7beb36ac32e2718012e2781b 100644 --- a/src/USER-OMP/npair_halffull_newton_omp.cpp +++ b/src/USER-OMP/npair_halffull_newton_omp.cpp @@ -11,6 +11,7 @@ See the README file in the top-level LAMMPS directory. ------------------------------------------------------------------------- */ +#include "omp_compat.h" #include "npair_halffull_newton_omp.h" #include "npair_omp.h" #include "neigh_list.h" @@ -38,7 +39,7 @@ void NPairHalffullNewtonOmp::build(NeighList *list) NPAIR_OMP_INIT; #if defined(_OPENMP) -#pragma omp parallel default(none) shared(list) +#pragma omp parallel LMP_DEFAULT_NONE LMP_SHARED(list) #endif NPAIR_OMP_SETUP(inum_full); diff --git a/src/USER-OMP/pair_adp_omp.cpp b/src/USER-OMP/pair_adp_omp.cpp index 0a48de453e107cf36da11165596e27f7c38df3c6..63a539c93c7ac3806ec9e4da80c031ff7290af3c 100644 --- a/src/USER-OMP/pair_adp_omp.cpp +++ b/src/USER-OMP/pair_adp_omp.cpp @@ -12,6 +12,7 @@ Contributing author: Axel Kohlmeyer (Temple U) ------------------------------------------------------------------------- */ +#include "omp_compat.h" #include #include @@ -62,7 +63,7 @@ void PairADPOMP::compute(int eflag, int vflag) } #if defined(_OPENMP) -#pragma omp parallel default(none) shared(eflag,vflag) +#pragma omp parallel LMP_DEFAULT_NONE LMP_SHARED(eflag,vflag) #endif { int ifrom, ito, tid; diff --git a/src/USER-OMP/pair_agni_omp.cpp b/src/USER-OMP/pair_agni_omp.cpp index 1580256e35ba290f62e1ceccb87da5c235f157b0..b61bf52e4ee8009471d902a56e2f6a58aa7e1f3e 100644 --- a/src/USER-OMP/pair_agni_omp.cpp +++ b/src/USER-OMP/pair_agni_omp.cpp @@ -12,6 +12,7 @@ Contributing author: Axel Kohlmeyer (Temple U) ------------------------------------------------------------------------- */ +#include "omp_compat.h" #include #include #include // requires C++-11 @@ -49,7 +50,7 @@ void PairAGNIOMP::compute(int eflag, int vflag) const int inum = list->inum; #if defined(_OPENMP) -#pragma omp parallel default(none) shared(eflag,vflag) +#pragma omp parallel LMP_DEFAULT_NONE LMP_SHARED(eflag,vflag) #endif { int ifrom, ito, tid; diff --git a/src/USER-OMP/pair_airebo_omp.cpp b/src/USER-OMP/pair_airebo_omp.cpp index aedf5056a6d8f59819969c669a1b253cdaf3a0aa..25d6c35174f0282730457f8bea3a1d964bf6c210 100644 --- a/src/USER-OMP/pair_airebo_omp.cpp +++ b/src/USER-OMP/pair_airebo_omp.cpp @@ -12,6 +12,7 @@ Contributing author: Axel Kohlmeyer (Temple U) ------------------------------------------------------------------------- */ +#include "omp_compat.h" #include #include "pair_airebo_omp.h" #include "atom.h" @@ -58,7 +59,7 @@ void PairAIREBOOMP::compute(int eflag, int vflag) const int inum = list->inum; #if defined(_OPENMP) -#pragma omp parallel default(none) shared(eflag,vflag) reduction(+:pv0,pv1,pv2) +#pragma omp parallel LMP_DEFAULT_NONE LMP_SHARED(eflag,vflag) reduction(+:pv0,pv1,pv2) #endif { int ifrom, ito, tid; @@ -104,7 +105,7 @@ void PairAIREBOOMP::REBO_neigh_thr() } #if defined(_OPENMP) -#pragma omp parallel default(none) +#pragma omp parallel LMP_DEFAULT_NONE #endif { int i,j,ii,jj,n,jnum,itype,jtype; diff --git a/src/USER-OMP/pair_beck_omp.cpp b/src/USER-OMP/pair_beck_omp.cpp index 72e41f074c268dee42139978d9ef80916370a4f2..48e6f9b0fe11dee89687fa0346bd9b5568dedcbd 100644 --- a/src/USER-OMP/pair_beck_omp.cpp +++ b/src/USER-OMP/pair_beck_omp.cpp @@ -12,6 +12,7 @@ Contributing author: Axel Kohlmeyer (Temple U) ------------------------------------------------------------------------- */ +#include "omp_compat.h" #include "pair_beck_omp.h" #include #include "atom.h" @@ -45,7 +46,7 @@ void PairBeckOMP::compute(int eflag, int vflag) const int inum = list->inum; #if defined(_OPENMP) -#pragma omp parallel default(none) shared(eflag,vflag) +#pragma omp parallel LMP_DEFAULT_NONE LMP_SHARED(eflag,vflag) #endif { int ifrom, ito, tid; diff --git a/src/USER-OMP/pair_born_coul_long_omp.cpp b/src/USER-OMP/pair_born_coul_long_omp.cpp index f7e3fced46104bfebe3bd2de6cf5cdf2a0604961..7f92ab6734b60470b3bf327bfbc8af9497c8f17f 100644 --- a/src/USER-OMP/pair_born_coul_long_omp.cpp +++ b/src/USER-OMP/pair_born_coul_long_omp.cpp @@ -12,6 +12,7 @@ Contributing author: Axel Kohlmeyer (Temple U) ------------------------------------------------------------------------- */ +#include "omp_compat.h" #include #include "pair_born_coul_long_omp.h" #include "atom.h" @@ -51,7 +52,7 @@ void PairBornCoulLongOMP::compute(int eflag, int vflag) const int inum = list->inum; #if defined(_OPENMP) -#pragma omp parallel default(none) shared(eflag,vflag) +#pragma omp parallel LMP_DEFAULT_NONE LMP_SHARED(eflag,vflag) #endif { int ifrom, ito, tid; diff --git a/src/USER-OMP/pair_born_coul_msm_omp.cpp b/src/USER-OMP/pair_born_coul_msm_omp.cpp index b057cbc7069eb6e33edccc823f169808450b0c6b..eec17658597179e267d7532564b760da6bfc1aa1 100644 --- a/src/USER-OMP/pair_born_coul_msm_omp.cpp +++ b/src/USER-OMP/pair_born_coul_msm_omp.cpp @@ -12,6 +12,7 @@ Contributing author: Axel Kohlmeyer (Temple U) ------------------------------------------------------------------------- */ +#include "omp_compat.h" #include #include "pair_born_coul_msm_omp.h" #include "atom.h" @@ -48,7 +49,7 @@ void PairBornCoulMSMOMP::compute(int eflag, int vflag) const int inum = list->inum; #if defined(_OPENMP) -#pragma omp parallel default(none) shared(eflag,vflag) +#pragma omp parallel LMP_DEFAULT_NONE LMP_SHARED(eflag,vflag) #endif { int ifrom, ito, tid; diff --git a/src/USER-OMP/pair_born_coul_wolf_omp.cpp b/src/USER-OMP/pair_born_coul_wolf_omp.cpp index bac38ae43a9d677d0914cd30e9c6604891ebb824..ffa069ec4e62b87d0912f5b89da55c84684cc102 100644 --- a/src/USER-OMP/pair_born_coul_wolf_omp.cpp +++ b/src/USER-OMP/pair_born_coul_wolf_omp.cpp @@ -12,6 +12,7 @@ Contributing author: Axel Kohlmeyer (Temple U) ------------------------------------------------------------------------- */ +#include "omp_compat.h" #include "pair_born_coul_wolf_omp.h" #include #include "atom.h" @@ -45,7 +46,7 @@ void PairBornCoulWolfOMP::compute(int eflag, int vflag) const int inum = list->inum; #if defined(_OPENMP) -#pragma omp parallel default(none) shared(eflag,vflag) +#pragma omp parallel LMP_DEFAULT_NONE LMP_SHARED(eflag,vflag) #endif { int ifrom, ito, tid; diff --git a/src/USER-OMP/pair_born_omp.cpp b/src/USER-OMP/pair_born_omp.cpp index 6cacd5625b85a408ed31b7d6c20675e32b426dff..aaac28d07cc7a00c6d5f6db8e16d8b71216debb0 100644 --- a/src/USER-OMP/pair_born_omp.cpp +++ b/src/USER-OMP/pair_born_omp.cpp @@ -12,6 +12,7 @@ Contributing author: Axel Kohlmeyer (Temple U) ------------------------------------------------------------------------- */ +#include "omp_compat.h" #include "pair_born_omp.h" #include #include "atom.h" @@ -43,7 +44,7 @@ void PairBornOMP::compute(int eflag, int vflag) const int inum = list->inum; #if defined(_OPENMP) -#pragma omp parallel default(none) shared(eflag,vflag) +#pragma omp parallel LMP_DEFAULT_NONE LMP_SHARED(eflag,vflag) #endif { int ifrom, ito, tid; diff --git a/src/USER-OMP/pair_brownian_omp.cpp b/src/USER-OMP/pair_brownian_omp.cpp index 907a447332f223e5b79afd6e8edb06a6c6b45733..ca28fa14bb4c32a396d46582eab9651b59079711 100644 --- a/src/USER-OMP/pair_brownian_omp.cpp +++ b/src/USER-OMP/pair_brownian_omp.cpp @@ -12,6 +12,7 @@ Contributing author: Axel Kohlmeyer (Temple U) ------------------------------------------------------------------------- */ +#include "omp_compat.h" #include "pair_brownian_omp.h" #include #include "atom.h" @@ -135,7 +136,7 @@ void PairBrownianOMP::compute(int eflag, int vflag) } #if defined(_OPENMP) -#pragma omp parallel default(none) shared(eflag,vflag) +#pragma omp parallel LMP_DEFAULT_NONE LMP_SHARED(eflag,vflag) #endif { int ifrom, ito, tid; diff --git a/src/USER-OMP/pair_brownian_poly_omp.cpp b/src/USER-OMP/pair_brownian_poly_omp.cpp index f6f5f269a5d923c89655d139230effe0395ac0f7..939bc223eb6642457c403a2254b239e2c217dbb1 100644 --- a/src/USER-OMP/pair_brownian_poly_omp.cpp +++ b/src/USER-OMP/pair_brownian_poly_omp.cpp @@ -12,6 +12,7 @@ Contributing author: Axel Kohlmeyer (Temple U) ------------------------------------------------------------------------- */ +#include "omp_compat.h" #include "pair_brownian_poly_omp.h" #include #include "atom.h" @@ -135,7 +136,7 @@ void PairBrownianPolyOMP::compute(int eflag, int vflag) } #if defined(_OPENMP) -#pragma omp parallel default(none) shared(eflag,vflag) +#pragma omp parallel LMP_DEFAULT_NONE LMP_SHARED(eflag,vflag) #endif { int ifrom, ito, tid; diff --git a/src/USER-OMP/pair_buck_coul_cut_omp.cpp b/src/USER-OMP/pair_buck_coul_cut_omp.cpp index c9ccb124470591edfc3f72174a2e960edc71900a..2cff0d749d88315712673b4e7e7daafd5b1890f4 100644 --- a/src/USER-OMP/pair_buck_coul_cut_omp.cpp +++ b/src/USER-OMP/pair_buck_coul_cut_omp.cpp @@ -12,6 +12,7 @@ Contributing author: Axel Kohlmeyer (Temple U) ------------------------------------------------------------------------- */ +#include "omp_compat.h" #include #include "pair_buck_coul_cut_omp.h" #include "atom.h" @@ -43,7 +44,7 @@ void PairBuckCoulCutOMP::compute(int eflag, int vflag) const int inum = list->inum; #if defined(_OPENMP) -#pragma omp parallel default(none) shared(eflag,vflag) +#pragma omp parallel LMP_DEFAULT_NONE LMP_SHARED(eflag,vflag) #endif { int ifrom, ito, tid; diff --git a/src/USER-OMP/pair_buck_coul_long_omp.cpp b/src/USER-OMP/pair_buck_coul_long_omp.cpp index 09291578954079f01b1112781303b0105e6dc19a..759a8b2118437294a6b2d625904ceedebe413488 100644 --- a/src/USER-OMP/pair_buck_coul_long_omp.cpp +++ b/src/USER-OMP/pair_buck_coul_long_omp.cpp @@ -12,6 +12,7 @@ Contributing author: Axel Kohlmeyer (Temple U) ------------------------------------------------------------------------- */ +#include "omp_compat.h" #include #include "pair_buck_coul_long_omp.h" #include "atom.h" @@ -51,7 +52,7 @@ void PairBuckCoulLongOMP::compute(int eflag, int vflag) const int inum = list->inum; #if defined(_OPENMP) -#pragma omp parallel default(none) shared(eflag,vflag) +#pragma omp parallel LMP_DEFAULT_NONE LMP_SHARED(eflag,vflag) #endif { int ifrom, ito, tid; diff --git a/src/USER-OMP/pair_buck_coul_msm_omp.cpp b/src/USER-OMP/pair_buck_coul_msm_omp.cpp index a4d322890acc047f5581badfc8fba92e2df44bef..b26243b19afe6ad311f3a32edb700b92261078c1 100644 --- a/src/USER-OMP/pair_buck_coul_msm_omp.cpp +++ b/src/USER-OMP/pair_buck_coul_msm_omp.cpp @@ -12,6 +12,7 @@ Contributing author: Axel Kohlmeyer (Temple U) ------------------------------------------------------------------------- */ +#include "omp_compat.h" #include #include "pair_buck_coul_msm_omp.h" #include "atom.h" @@ -48,7 +49,7 @@ void PairBuckCoulMSMOMP::compute(int eflag, int vflag) const int inum = list->inum; #if defined(_OPENMP) -#pragma omp parallel default(none) shared(eflag,vflag) +#pragma omp parallel LMP_DEFAULT_NONE LMP_SHARED(eflag,vflag) #endif { int ifrom, ito, tid; diff --git a/src/USER-OMP/pair_buck_long_coul_long_omp.cpp b/src/USER-OMP/pair_buck_long_coul_long_omp.cpp index d30e8949b31168a4e89dc89efbb47ce6a3d7793b..a2e34b9a1bfa401b0952cf2c8362fc7a689a4c84 100644 --- a/src/USER-OMP/pair_buck_long_coul_long_omp.cpp +++ b/src/USER-OMP/pair_buck_long_coul_long_omp.cpp @@ -12,6 +12,7 @@ ------------------------------------------------------------------------- */ +#include "omp_compat.h" #include #include "math_vector.h" #include "pair_buck_long_coul_long_omp.h" @@ -56,7 +57,7 @@ void PairBuckLongCoulLongOMP::compute(int eflag, int vflag) const int inum = list->inum; #if defined(_OPENMP) -#pragma omp parallel default(none) shared(eflag,vflag) +#pragma omp parallel LMP_DEFAULT_NONE LMP_SHARED(eflag,vflag) #endif { int ifrom, ito, tid; @@ -320,7 +321,7 @@ void PairBuckLongCoulLongOMP::compute_inner() const int nthreads = comm->nthreads; const int inum = list->inum_inner; #if defined(_OPENMP) -#pragma omp parallel default(none) +#pragma omp parallel LMP_DEFAULT_NONE #endif { int ifrom, ito, tid; @@ -345,7 +346,7 @@ void PairBuckLongCoulLongOMP::compute_middle() const int inum = list->inum_middle; #if defined(_OPENMP) -#pragma omp parallel default(none) +#pragma omp parallel LMP_DEFAULT_NONE #endif { int ifrom, ito, tid; @@ -375,7 +376,7 @@ void PairBuckLongCoulLongOMP::compute_outer(int eflag, int vflag) const int inum = list->inum; #if defined(_OPENMP) -#pragma omp parallel default(none) shared(eflag,vflag) +#pragma omp parallel LMP_DEFAULT_NONE LMP_SHARED(eflag,vflag) #endif { int ifrom, ito, tid; diff --git a/src/USER-OMP/pair_buck_omp.cpp b/src/USER-OMP/pair_buck_omp.cpp index 563133e1cd5e26bd266ee7659bf5ed824eecd368..fc85d79c81efabff1cf752df9afe086319c8d046 100644 --- a/src/USER-OMP/pair_buck_omp.cpp +++ b/src/USER-OMP/pair_buck_omp.cpp @@ -12,6 +12,7 @@ Contributing author: Axel Kohlmeyer (Temple U) ------------------------------------------------------------------------- */ +#include "omp_compat.h" #include "pair_buck_omp.h" #include #include "atom.h" @@ -43,7 +44,7 @@ void PairBuckOMP::compute(int eflag, int vflag) const int inum = list->inum; #if defined(_OPENMP) -#pragma omp parallel default(none) shared(eflag,vflag) +#pragma omp parallel LMP_DEFAULT_NONE LMP_SHARED(eflag,vflag) #endif { int ifrom, ito, tid; diff --git a/src/USER-OMP/pair_colloid_omp.cpp b/src/USER-OMP/pair_colloid_omp.cpp index 0fc4b1bdf2e40e53dc48b2b90ee01c239d3bdcb4..cce588f51694eaf33fc118b31d24efa84fe3df09 100644 --- a/src/USER-OMP/pair_colloid_omp.cpp +++ b/src/USER-OMP/pair_colloid_omp.cpp @@ -12,6 +12,7 @@ Contributing author: Axel Kohlmeyer (Temple U) ------------------------------------------------------------------------- */ +#include "omp_compat.h" #include #include "pair_colloid_omp.h" #include "atom.h" @@ -46,7 +47,7 @@ void PairColloidOMP::compute(int eflag, int vflag) const int inum = list->inum; #if defined(_OPENMP) -#pragma omp parallel default(none) shared(eflag,vflag) +#pragma omp parallel LMP_DEFAULT_NONE LMP_SHARED(eflag,vflag) #endif { int ifrom, ito, tid; diff --git a/src/USER-OMP/pair_comb_omp.cpp b/src/USER-OMP/pair_comb_omp.cpp index 4b5f0ea6c7d006b9735f6ab611156c207aa8824b..8912cbc2432d35140c4d4791f054c308384b8548 100644 --- a/src/USER-OMP/pair_comb_omp.cpp +++ b/src/USER-OMP/pair_comb_omp.cpp @@ -12,6 +12,7 @@ Contributing author: Axel Kohlmeyer (Temple U) ------------------------------------------------------------------------- */ +#include "omp_compat.h" #include #include "pair_comb_omp.h" #include "atom.h" @@ -52,7 +53,7 @@ void PairCombOMP::compute(int eflag, int vflag) Short_neigh_thr(); #if defined(_OPENMP) -#pragma omp parallel default(none) shared(eflag,vflag) +#pragma omp parallel LMP_DEFAULT_NONE LMP_SHARED(eflag,vflag) #endif { int ifrom, ito, tid; @@ -411,7 +412,7 @@ double PairCombOMP::yasu_char(double *qf_fix, int &igroup) // loop over full neighbor list of my atoms #if defined(_OPENMP) -#pragma omp parallel for private(ii) default(none) shared(potal,fac11e) +#pragma omp parallel for private(ii) LMP_DEFAULT_NONE LMP_SHARED(potal,fac11e) #endif for (ii = 0; ii < inum; ii ++) { double fqi,fqj,fqij,fqji,fqjj,delr1[3]; @@ -564,7 +565,7 @@ void PairCombOMP::Short_neigh_thr() const int nthreads = comm->nthreads; #if defined(_OPENMP) -#pragma omp parallel default(none) +#pragma omp parallel LMP_DEFAULT_NONE #endif { int nj,*neighptrj; diff --git a/src/USER-OMP/pair_coul_cut_omp.cpp b/src/USER-OMP/pair_coul_cut_omp.cpp index ce858666cbe1f4faae6c945106e2b35ae9e30090..69eb9ac0f3a99d582f72081ea8032962145c6675 100644 --- a/src/USER-OMP/pair_coul_cut_omp.cpp +++ b/src/USER-OMP/pair_coul_cut_omp.cpp @@ -12,6 +12,7 @@ Contributing author: Axel Kohlmeyer (Temple U) ------------------------------------------------------------------------- */ +#include "omp_compat.h" #include "pair_coul_cut_omp.h" #include #include "atom.h" @@ -43,7 +44,7 @@ void PairCoulCutOMP::compute(int eflag, int vflag) const int inum = list->inum; #if defined(_OPENMP) -#pragma omp parallel default(none) shared(eflag,vflag) +#pragma omp parallel LMP_DEFAULT_NONE LMP_SHARED(eflag,vflag) #endif { int ifrom, ito, tid; diff --git a/src/USER-OMP/pair_coul_cut_soft_omp.cpp b/src/USER-OMP/pair_coul_cut_soft_omp.cpp index 7b6ed22f0cb0d7f72b22f242eff9c0330c6e18ab..89222903ec8d7bf89cfad2f23abcd1d31a13c0dc 100644 --- a/src/USER-OMP/pair_coul_cut_soft_omp.cpp +++ b/src/USER-OMP/pair_coul_cut_soft_omp.cpp @@ -12,6 +12,7 @@ Contributing author: Axel Kohlmeyer (Temple U) ------------------------------------------------------------------------- */ +#include "omp_compat.h" #include #include "pair_coul_cut_soft_omp.h" #include "atom.h" @@ -43,7 +44,7 @@ void PairCoulCutSoftOMP::compute(int eflag, int vflag) const int inum = list->inum; #if defined(_OPENMP) -#pragma omp parallel default(none) shared(eflag,vflag) +#pragma omp parallel LMP_DEFAULT_NONE LMP_SHARED(eflag,vflag) #endif { int ifrom, ito, tid; diff --git a/src/USER-OMP/pair_coul_debye_omp.cpp b/src/USER-OMP/pair_coul_debye_omp.cpp index 270770ee5df8b0c2a5be3efe8ec4fa74f576c8b2..c22f7340c4f1602f8d21a13d680672ad815bba2b 100644 --- a/src/USER-OMP/pair_coul_debye_omp.cpp +++ b/src/USER-OMP/pair_coul_debye_omp.cpp @@ -12,6 +12,7 @@ Contributing author: Axel Kohlmeyer (Temple U) ------------------------------------------------------------------------- */ +#include "omp_compat.h" #include "pair_coul_debye_omp.h" #include #include "atom.h" @@ -43,7 +44,7 @@ void PairCoulDebyeOMP::compute(int eflag, int vflag) const int inum = list->inum; #if defined(_OPENMP) -#pragma omp parallel default(none) shared(eflag,vflag) +#pragma omp parallel LMP_DEFAULT_NONE LMP_SHARED(eflag,vflag) #endif { int ifrom, ito, tid; diff --git a/src/USER-OMP/pair_coul_diel_omp.cpp b/src/USER-OMP/pair_coul_diel_omp.cpp index 67e09690dea22a67b320ca79dc258844cbf6b543..656cdc9421f6b71dfd9684fbb5ac647700223f97 100644 --- a/src/USER-OMP/pair_coul_diel_omp.cpp +++ b/src/USER-OMP/pair_coul_diel_omp.cpp @@ -12,6 +12,7 @@ Contributing author: Axel Kohlmeyer (Temple U) ------------------------------------------------------------------------- */ +#include "omp_compat.h" #include #include "pair_coul_diel_omp.h" #include "atom.h" @@ -43,7 +44,7 @@ void PairCoulDielOMP::compute(int eflag, int vflag) const int inum = list->inum; #if defined(_OPENMP) -#pragma omp parallel default(none) shared(eflag,vflag) +#pragma omp parallel LMP_DEFAULT_NONE LMP_SHARED(eflag,vflag) #endif { int ifrom, ito, tid; diff --git a/src/USER-OMP/pair_coul_dsf_omp.cpp b/src/USER-OMP/pair_coul_dsf_omp.cpp index 40e285e7c88e832082b09e9210b6b59af3f3fc64..ddcc8dbeb08d423636efa38adca8bccaa4cda3cb 100644 --- a/src/USER-OMP/pair_coul_dsf_omp.cpp +++ b/src/USER-OMP/pair_coul_dsf_omp.cpp @@ -12,6 +12,7 @@ Contributing author: Axel Kohlmeyer (Temple U) ------------------------------------------------------------------------- */ +#include "omp_compat.h" #include "pair_coul_dsf_omp.h" #include #include "atom.h" @@ -52,7 +53,7 @@ void PairCoulDSFOMP::compute(int eflag, int vflag) const int inum = list->inum; #if defined(_OPENMP) -#pragma omp parallel default(none) shared(eflag,vflag) +#pragma omp parallel LMP_DEFAULT_NONE LMP_SHARED(eflag,vflag) #endif { int ifrom, ito, tid; diff --git a/src/USER-OMP/pair_coul_long_omp.cpp b/src/USER-OMP/pair_coul_long_omp.cpp index b135ffa7e6b5d3b5d944923ac74f42837300f715..6c9b9d034d0f22caf1de10c277bdae4d5daa8fde 100644 --- a/src/USER-OMP/pair_coul_long_omp.cpp +++ b/src/USER-OMP/pair_coul_long_omp.cpp @@ -12,6 +12,7 @@ Contributing author: Axel Kohlmeyer (Temple U) ------------------------------------------------------------------------- */ +#include "omp_compat.h" #include #include "pair_coul_long_omp.h" #include "atom.h" @@ -52,7 +53,7 @@ void PairCoulLongOMP::compute(int eflag, int vflag) const int inum = list->inum; #if defined(_OPENMP) -#pragma omp parallel default(none) shared(eflag,vflag) +#pragma omp parallel LMP_DEFAULT_NONE LMP_SHARED(eflag,vflag) #endif { int ifrom, ito, tid; diff --git a/src/USER-OMP/pair_coul_long_soft_omp.cpp b/src/USER-OMP/pair_coul_long_soft_omp.cpp index 891123b8b3f5381796e0af709cfa4a5ad670ebb6..ff3267fb38cd44927cf94f351b14fe32640ec82f 100644 --- a/src/USER-OMP/pair_coul_long_soft_omp.cpp +++ b/src/USER-OMP/pair_coul_long_soft_omp.cpp @@ -12,6 +12,7 @@ Contributing author: Axel Kohlmeyer (Temple U) ------------------------------------------------------------------------- */ +#include "omp_compat.h" #include #include "pair_coul_long_soft_omp.h" #include "atom.h" @@ -51,7 +52,7 @@ void PairCoulLongSoftOMP::compute(int eflag, int vflag) const int inum = list->inum; #if defined(_OPENMP) -#pragma omp parallel default(none) shared(eflag,vflag) +#pragma omp parallel LMP_DEFAULT_NONE LMP_SHARED(eflag,vflag) #endif { int ifrom, ito, tid; diff --git a/src/USER-OMP/pair_coul_msm_omp.cpp b/src/USER-OMP/pair_coul_msm_omp.cpp index 9417df7ac6f18443eef10ab53cc7f828eed0d898..32a657e2867d5e56c44ae8deb2cb4d88f7249086 100644 --- a/src/USER-OMP/pair_coul_msm_omp.cpp +++ b/src/USER-OMP/pair_coul_msm_omp.cpp @@ -12,6 +12,7 @@ Contributing author: Axel Kohlmeyer (Temple U) ------------------------------------------------------------------------- */ +#include "omp_compat.h" #include #include "pair_coul_msm_omp.h" #include "atom.h" @@ -49,7 +50,7 @@ void PairCoulMSMOMP::compute(int eflag, int vflag) const int inum = list->inum; #if defined(_OPENMP) -#pragma omp parallel default(none) shared(eflag,vflag) +#pragma omp parallel LMP_DEFAULT_NONE LMP_SHARED(eflag,vflag) #endif { int ifrom, ito, tid; diff --git a/src/USER-OMP/pair_coul_wolf_omp.cpp b/src/USER-OMP/pair_coul_wolf_omp.cpp index 9163eff0861209efb6c24156fba7dc0f66491458..d0f6fdb1255ad72dee20593a2b66afd4c57ab811 100644 --- a/src/USER-OMP/pair_coul_wolf_omp.cpp +++ b/src/USER-OMP/pair_coul_wolf_omp.cpp @@ -12,6 +12,7 @@ Contributing author: Axel Kohlmeyer (Temple U) ------------------------------------------------------------------------- */ +#include "omp_compat.h" #include "pair_coul_wolf_omp.h" #include #include "atom.h" @@ -45,7 +46,7 @@ void PairCoulWolfOMP::compute(int eflag, int vflag) const int inum = list->inum; #if defined(_OPENMP) -#pragma omp parallel default(none) shared(eflag,vflag) +#pragma omp parallel LMP_DEFAULT_NONE LMP_SHARED(eflag,vflag) #endif { int ifrom, ito, tid; diff --git a/src/USER-OMP/pair_dpd_omp.cpp b/src/USER-OMP/pair_dpd_omp.cpp index 7c265b2b7bd7e10a0fc3e53603bc6252af2406b6..f3a1c29a707068463b01d5476d72f44103a37d69 100644 --- a/src/USER-OMP/pair_dpd_omp.cpp +++ b/src/USER-OMP/pair_dpd_omp.cpp @@ -12,6 +12,7 @@ Contributing author: Axel Kohlmeyer (Temple U) ------------------------------------------------------------------------- */ +#include "omp_compat.h" #include "pair_dpd_omp.h" #include #include "atom.h" @@ -80,7 +81,7 @@ void PairDPDOMP::compute(int eflag, int vflag) } #if defined(_OPENMP) -#pragma omp parallel default(none) shared(eflag,vflag) +#pragma omp parallel LMP_DEFAULT_NONE LMP_SHARED(eflag,vflag) #endif { int ifrom, ito, tid; diff --git a/src/USER-OMP/pair_dpd_tstat_omp.cpp b/src/USER-OMP/pair_dpd_tstat_omp.cpp index 076e27a299a18d1de3534686792746970c9fa066..06e80274bd9797968267a64b89cc0672fc89b40e 100644 --- a/src/USER-OMP/pair_dpd_tstat_omp.cpp +++ b/src/USER-OMP/pair_dpd_tstat_omp.cpp @@ -12,6 +12,7 @@ Contributing author: Axel Kohlmeyer (Temple U) ------------------------------------------------------------------------- */ +#include "omp_compat.h" #include #include "pair_dpd_tstat_omp.h" #include "atom.h" @@ -79,7 +80,7 @@ void PairDPDTstatOMP::compute(int eflag, int vflag) random_thr[0] = random; } #if defined(_OPENMP) -#pragma omp parallel default(none) shared(eflag,vflag) +#pragma omp parallel LMP_DEFAULT_NONE LMP_SHARED(eflag,vflag) #endif { int ifrom, ito, tid; diff --git a/src/USER-OMP/pair_eam_alloy_omp.cpp b/src/USER-OMP/pair_eam_alloy_omp.cpp index d36574713f81cbcf6d55b747f23c4d735e07600f..2f6b4919f192447c57da0d0b8ace453b7c90f2ae 100644 --- a/src/USER-OMP/pair_eam_alloy_omp.cpp +++ b/src/USER-OMP/pair_eam_alloy_omp.cpp @@ -25,11 +25,11 @@ #include "memory.h" #include "error.h" #include "utils.h" +#include "tokenizer.h" +#include "potential_file_reader.h" using namespace LAMMPS_NS; -#define MAXLINE 1024 - /* ---------------------------------------------------------------------- */ PairEAMAlloyOMP::PairEAMAlloyOMP(LAMMPS *lmp) : PairEAMOMP(lmp) @@ -117,94 +117,112 @@ void PairEAMAlloyOMP::read_file(char *filename) { Setfl *file = setfl; - // open potential file + // read potential file + if(comm->me == 0) { + PotentialFileReader reader(PairEAM::lmp, filename, "EAM"); - int me = comm->me; - FILE *fptr; - char line[MAXLINE]; + try { + char * line = nullptr; - if (me == 0) { - fptr = force->open_potential(filename); - if (fptr == NULL) { - char str[128]; - snprintf(str,128,"Cannot open EAM potential file %s",filename); - error->one(FLERR,str); - } - } + reader.skip_line(); + reader.skip_line(); + reader.skip_line(); - // read and broadcast header - // extract element names from nelements line + // extract element names from nelements line + line = reader.next_line(1); + ValueTokenizer values(line); + file->nelements = values.next_int(); - int n; - if (me == 0) { - utils::sfgets(FLERR,line,MAXLINE,fptr,filename,error); - utils::sfgets(FLERR,line,MAXLINE,fptr,filename,error); - utils::sfgets(FLERR,line,MAXLINE,fptr,filename,error); - utils::sfgets(FLERR,line,MAXLINE,fptr,filename,error); - n = strlen(line) + 1; - } - MPI_Bcast(&n,1,MPI_INT,0,world); - MPI_Bcast(line,n,MPI_CHAR,0,world); + if (values.count() != file->nelements + 1) + error->one(FLERR,"Incorrect element names in EAM potential file"); - sscanf(line,"%d",&file->nelements); - int nwords = atom->count_words(line); - if (nwords != file->nelements + 1) - error->all(FLERR,"Incorrect element names in EAM potential file"); + file->elements = new char*[file->nelements]; + for (int i = 0; i < file->nelements; i++) { + const std::string word = values.next_string(); + const int n = word.length() + 1; + file->elements[i] = new char[n]; + strcpy(file->elements[i], word.c_str()); + } - char **words = new char*[file->nelements+1]; - nwords = 0; - strtok(line," \t\n\r\f"); - while ((words[nwords++] = strtok(NULL," \t\n\r\f"))) continue; + // - file->elements = new char*[file->nelements]; - for (int i = 0; i < file->nelements; i++) { - n = strlen(words[i]) + 1; - file->elements[i] = new char[n]; - strcpy(file->elements[i],words[i]); - } - delete [] words; + line = reader.next_line(5); + values = ValueTokenizer(line); + file->nrho = values.next_int(); + file->drho = values.next_double(); + file->nr = values.next_int(); + file->dr = values.next_double(); + file->cut = values.next_double(); - if (me == 0) { - utils::sfgets(FLERR,line,MAXLINE,fptr,filename,error); - sscanf(line,"%d %lg %d %lg %lg", - &file->nrho,&file->drho,&file->nr,&file->dr,&file->cut); - } + if ((file->nrho <= 0) || (file->nr <= 0) || (file->dr <= 0.0)) + error->one(FLERR,"Invalid EAM potential file"); + + memory->create(file->mass, file->nelements, "pair:mass"); + memory->create(file->frho, file->nelements, file->nrho + 1, "pair:frho"); + memory->create(file->rhor, file->nelements, file->nr + 1, "pair:rhor"); + memory->create(file->z2r, file->nelements, file->nelements, file->nr + 1, "pair:z2r"); + + for (int i = 0; i < file->nelements; i++) { + line = reader.next_line(2); + values = ValueTokenizer(line); + values.next_int(); // ignore + file->mass[i] = values.next_double(); + + reader.next_dvector(file->nrho, &file->frho[i][1]); + reader.next_dvector(file->nr, &file->rhor[i][1]); + } - MPI_Bcast(&file->nrho,1,MPI_INT,0,world); - MPI_Bcast(&file->drho,1,MPI_DOUBLE,0,world); - MPI_Bcast(&file->nr,1,MPI_INT,0,world); - MPI_Bcast(&file->dr,1,MPI_DOUBLE,0,world); - MPI_Bcast(&file->cut,1,MPI_DOUBLE,0,world); - - file->mass = new double[file->nelements]; - memory->create(file->frho,file->nelements,file->nrho+1,"pair:frho"); - memory->create(file->rhor,file->nelements,file->nr+1,"pair:rhor"); - memory->create(file->z2r,file->nelements,file->nelements,file->nr+1, - "pair:z2r"); - - int i,j,tmp; - for (i = 0; i < file->nelements; i++) { - if (me == 0) { - utils::sfgets(FLERR,line,MAXLINE,fptr,filename,error); - sscanf(line,"%d %lg",&tmp,&file->mass[i]); + for (int i = 0; i < file->nelements; i++) { + for (int j = 0; j <= i; j++) { + reader.next_dvector(file->nr, &file->z2r[i][j][1]); + } + } + } catch (TokenizerException & e) { + error->one(FLERR, e.what()); } - MPI_Bcast(&file->mass[i],1,MPI_DOUBLE,0,world); + } - if (me == 0) grab(fptr,file->nrho,&file->frho[i][1]); - MPI_Bcast(&file->frho[i][1],file->nrho,MPI_DOUBLE,0,world); - if (me == 0) grab(fptr,file->nr,&file->rhor[i][1]); - MPI_Bcast(&file->rhor[i][1],file->nr,MPI_DOUBLE,0,world); + // broadcast potential information + MPI_Bcast(&file->nelements, 1, MPI_INT, 0, world); + + MPI_Bcast(&file->nrho, 1, MPI_INT, 0, world); + MPI_Bcast(&file->drho, 1, MPI_DOUBLE, 0, world); + MPI_Bcast(&file->nr, 1, MPI_INT, 0, world); + MPI_Bcast(&file->dr, 1, MPI_DOUBLE, 0, world); + MPI_Bcast(&file->cut, 1, MPI_DOUBLE, 0, world); + + // allocate memory on other procs + if (comm->me != 0) { + file->elements = new char*[file->nelements]; + for (int i = 0; i < file->nelements; i++) file->elements[i] = nullptr; + memory->create(file->mass, file->nelements, "pair:mass"); + memory->create(file->frho, file->nelements, file->nrho + 1, "pair:frho"); + memory->create(file->rhor, file->nelements, file->nr + 1, "pair:rhor"); + memory->create(file->z2r, file->nelements, file->nelements, file->nr + 1, "pair:z2r"); } - for (i = 0; i < file->nelements; i++) - for (j = 0; j <= i; j++) { - if (me == 0) grab(fptr,file->nr,&file->z2r[i][j][1]); - MPI_Bcast(&file->z2r[i][j][1],file->nr,MPI_DOUBLE,0,world); - } + // broadcast file->elements string array + for (int i = 0; i < file->nelements; i++) { + int n; + if (comm->me == 0) n = strlen(file->elements[i]) + 1; + MPI_Bcast(&n, 1, MPI_INT, 0, world); + if (comm->me != 0) file->elements[i] = new char[n]; + MPI_Bcast(file->elements[i], n, MPI_CHAR, 0, world); + } - // close the potential file + // broadcast file->mass, frho, rhor + for (int i = 0; i < file->nelements; i++) { + MPI_Bcast(&file->mass[i], 1, MPI_DOUBLE, 0, world); + MPI_Bcast(&file->frho[i][1], file->nrho, MPI_DOUBLE, 0, world); + MPI_Bcast(&file->rhor[i][1], file->nr, MPI_DOUBLE, 0, world); + } - if (me == 0) fclose(fptr); + // broadcast file->z2r + for (int i = 0; i < file->nelements; i++) { + for (int j = 0; j <= i; j++) { + MPI_Bcast(&file->z2r[i][j][1], file->nr, MPI_DOUBLE, 0, world); + } + } } /* ---------------------------------------------------------------------- diff --git a/src/USER-OMP/pair_eam_cd_omp.cpp b/src/USER-OMP/pair_eam_cd_omp.cpp deleted file mode 100644 index 1d945e06a877e2eefa9d2d1a0f04b9a44f8e6b5c..0000000000000000000000000000000000000000 --- a/src/USER-OMP/pair_eam_cd_omp.cpp +++ /dev/null @@ -1,541 +0,0 @@ -/* ---------------------------------------------------------------------- - LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator - http://lammps.sandia.gov, Sandia National Laboratories - Steve Plimpton, sjplimp@sandia.gov - - This software is distributed under the GNU General Public License. - - See the README file in the top-level LAMMPS directory. -------------------------------------------------------------------------- */ - -/* ---------------------------------------------------------------------- - Contributing author: Axel Kohlmeyer (Temple U) -------------------------------------------------------------------------- */ - -#include -#include - -#include "pair_eam_cd_omp.h" -#include "atom.h" -#include "comm.h" -#include "error.h" -#include "force.h" -#include "memory.h" -#include "neighbor.h" -#include "neigh_list.h" - -#include "suffix.h" -using namespace LAMMPS_NS; - -// This is for debugging purposes. The ASSERT() macro is used in the code to check -// if everything runs as expected. Change this to #if 0 if you don't need the checking. -#if 0 - #define ASSERT(cond) ((!(cond)) ? my_failure(error,__FILE__,__LINE__) : my_noop()) - - inline void my_noop() {} - inline void my_failure(Error* error, const char* file, int line) { - char str[1024]; - sprintf(str,"Assertion failure: File %s, line %i", file, line); - error->one(FLERR,str); - } -#else - #define ASSERT(cond) -#endif - -/* ---------------------------------------------------------------------- */ - -PairEAMCDOMP::PairEAMCDOMP(LAMMPS *lmp, int _cdeamVersion) : - PairEAM(lmp), PairEAMCD(lmp,_cdeamVersion), ThrOMP(lmp, THR_PAIR) -{ - suffix_flag |= Suffix::OMP; - respa_enable = 0; -} - -/* ---------------------------------------------------------------------- */ - -void PairEAMCDOMP::compute(int eflag, int vflag) -{ - ev_init(eflag,vflag); - - const int nall = atom->nlocal + atom->nghost; - const int nthreads = comm->nthreads; - const int inum = list->inum; - - // grow energy and fp arrays if necessary - // need to be atom->nmax in length - - if (atom->nmax > nmax) { - memory->destroy(rho); - memory->destroy(rhoB); - memory->destroy(D_values); - memory->destroy(fp); - nmax = atom->nmax; - memory->create(rho,nthreads*nmax,"pair:rho"); - memory->create(rhoB,nthreads*nmax,"pair:mu"); - memory->create(D_values,nthreads*nmax,"pair:D_values"); - memory->create(fp,nmax,"pair:fp"); - } - -#if defined(_OPENMP) -#pragma omp parallel default(none) shared(eflag,vflag) -#endif - { - int ifrom, ito, tid; - - loop_setup_thr(ifrom, ito, tid, inum, nthreads); - ThrData *thr = fix->get_thr(tid); - thr->timer(Timer::START); - ev_setup_thr(eflag, vflag, nall, eatom, vatom, NULL, thr); - - if (force->newton_pair) - thr->init_cdeam(nall, rho, rhoB, D_values); - else - thr->init_cdeam(atom->nlocal, rho, rhoB, D_values); - - switch (cdeamVersion) { - - case 1: - - if (evflag) { - if (eflag) { - if (force->newton_pair) eval<1,1,1,1>(ifrom, ito, thr); - else eval<1,1,0,1>(ifrom, ito, thr); - } else { - if (force->newton_pair) eval<1,0,1,1>(ifrom, ito, thr); - else eval<1,0,0,1>(ifrom, ito, thr); - } - } else { - if (force->newton_pair) eval<0,0,1,1>(ifrom, ito, thr); - else eval<0,0,0,1>(ifrom, ito, thr); - } - break; - - case 2: - - if (evflag) { - if (eflag) { - if (force->newton_pair) eval<1,1,1,2>(ifrom, ito, thr); - else eval<1,1,0,2>(ifrom, ito, thr); - } else { - if (force->newton_pair) eval<1,0,1,2>(ifrom, ito, thr); - else eval<1,0,0,2>(ifrom, ito, thr); - } - } else { - if (force->newton_pair) eval<0,0,1,2>(ifrom, ito, thr); - else eval<0,0,0,2>(ifrom, ito, thr); - } - break; - - default: - { -#if defined(_OPENMP) -#pragma omp master -#endif - error->all(FLERR,"unsupported eam/cd pair style variant"); - } - } - - thr->timer(Timer::PAIR); - reduce_thr(this, eflag, vflag, thr); - } // end of omp parallel region -} - -template -void PairEAMCDOMP::eval(int iifrom, int iito, ThrData * const thr) -{ - int i,j,ii,jj,jnum,itype,jtype; - double xtmp,ytmp,ztmp,delx,dely,delz,evdwl,fpair; - double rsq,rhoip,rhojp,recip,phi; - int *ilist,*jlist,*numneigh,**firstneigh; - - evdwl = 0.0; - - const dbl3_t * _noalias const x = (dbl3_t *) atom->x[0]; - dbl3_t * _noalias const f = (dbl3_t *) thr->get_f()[0]; - double * const rho_t = thr->get_rho(); - double * const rhoB_t = thr->get_rhoB(); - double * const D_values_t = thr->get_D_values(); - const int tid = thr->get_tid(); - const int nthreads = comm->nthreads; - - const int * _noalias const type = atom->type; - const int nlocal = atom->nlocal; - const int nall = nlocal + atom->nghost; - - double fxtmp,fytmp,fztmp; - - ilist = list->ilist; - numneigh = list->numneigh; - firstneigh = list->firstneigh; - - // Stage I - - // Compute rho and rhoB at each local atom site. - // Additionally calculate the D_i values here if we are using the one-site formulation. - // For the two-site formulation we have to calculate the D values in an extra loop (Stage II). - - for (ii = iifrom; ii < iito; ii++) { - i = ilist[ii]; - xtmp = x[i].x; - ytmp = x[i].y; - ztmp = x[i].z; - itype = type[i]; - jlist = firstneigh[i]; - jnum = numneigh[i]; - - for (jj = 0; jj < jnum; jj++) { - j = jlist[jj]; - j &= NEIGHMASK; - - delx = xtmp - x[j].x; - dely = ytmp - x[j].y; - delz = ztmp - x[j].z; - rsq = delx*delx + dely*dely + delz*delz; - - if(rsq < cutforcesq) { - jtype = type[j]; - double r = sqrt(rsq); - const EAMTableIndex index = radiusToTableIndex(r); - double localrho = RhoOfR(index, jtype, itype); - rho_t[i] += localrho; - if(jtype == speciesB) rhoB_t[i] += localrho; - if(NEWTON_PAIR || j < nlocal) { - localrho = RhoOfR(index, itype, jtype); - rho_t[j] += localrho; - if(itype == speciesB) rhoB_t[j] += localrho; - } - - if(CDEAMVERSION == 1 && itype != jtype) { - // Note: if the i-j interaction is not concentration dependent (because either - // i or j are not species A or B) then its contribution to D_i and D_j should - // be ignored. - // This if-clause is only required for a ternary. - if((itype == speciesA && jtype == speciesB) - || (jtype == speciesA && itype == speciesB)) { - double Phi_AB = PhiOfR(index, itype, jtype, 1.0 / r); - D_values_t[i] += Phi_AB; - if(NEWTON_PAIR || j < nlocal) - D_values_t[j] += Phi_AB; - } - } - } - } - } - - // wait until all threads are done with computation - sync_threads(); - - // communicate and sum densities - - if (NEWTON_PAIR) { - // reduce per thread density - thr->timer(Timer::PAIR); - data_reduce_thr(rho, nall, nthreads, 1, tid); - data_reduce_thr(rhoB, nall, nthreads, 1, tid); - if (CDEAMVERSION==1) - data_reduce_thr(D_values, nall, nthreads, 1, tid); - - // wait until reduction is complete - sync_threads(); - -#if defined(_OPENMP) -#pragma omp master -#endif - { communicationStage = 1; - comm->reverse_comm_pair(this); } - - // wait until master thread is done with communication - sync_threads(); - - } else { - // reduce per thread density - thr->timer(Timer::PAIR); - data_reduce_thr(rho, nlocal, nthreads, 1, tid); - data_reduce_thr(rhoB, nlocal, nthreads, 1, tid); - if (CDEAMVERSION==1) - data_reduce_thr(D_values, nlocal, nthreads, 1, tid); - - // wait until reduction is complete - sync_threads(); - } - - // fp = derivative of embedding energy at each atom - // phi = embedding energy at each atom - - for (ii = iifrom; ii < iito; ii++) { - i = ilist[ii]; - EAMTableIndex index = rhoToTableIndex(rho[i]); - fp[i] = FPrimeOfRho(index, type[i]); - if(EFLAG) { - phi = FofRho(index, type[i]); - e_tally_thr(this, i, i, nlocal, NEWTON_PAIR, phi, 0.0, thr); - } - } - - // wait until all theads are done with computation - sync_threads(); - - // Communicate derivative of embedding function and densities - // and D_values (this for one-site formulation only). -#if defined(_OPENMP) -#pragma omp master -#endif - { communicationStage = 2; - comm->forward_comm_pair(this); } - - // wait until master thread is done with communication - sync_threads(); - - - // The electron densities may not drop to zero because then the concentration would no longer be defined. - // But the concentration is not needed anyway if there is no interaction with another atom, which is the case - // if the electron density is exactly zero. That's why the following lines have been commented out. - // - //for(i = 0; i < nlocal + atom->nghost; i++) { - // if(rho[i] == 0 && (type[i] == speciesA || type[i] == speciesB)) - // error->one(FLERR,"CD-EAM potential routine: Detected atom with zero electron density."); - //} - - // Stage II - // This is only required for the original two-site formulation of the CD-EAM potential. - - if(CDEAMVERSION == 2) { - // Compute intermediate value D_i for each atom. - for (ii = iifrom; ii < iito; ii++) { - i = ilist[ii]; - xtmp = x[i].x; - ytmp = x[i].y; - ztmp = x[i].z; - itype = type[i]; - jlist = firstneigh[i]; - jnum = numneigh[i]; - - // This code line is required for ternary alloys. - if(itype != speciesA && itype != speciesB) continue; - - double x_i = rhoB[i] / rho[i]; // Concentration at atom i. - - for(jj = 0; jj < jnum; jj++) { - j = jlist[jj]; - j &= NEIGHMASK; - jtype = type[j]; - if(itype == jtype) continue; - - // This code line is required for ternary alloys. - if(jtype != speciesA && jtype != speciesB) continue; - - delx = xtmp - x[j].x; - dely = ytmp - x[j].y; - delz = ztmp - x[j].z; - rsq = delx*delx + dely*dely + delz*delz; - - if(rsq < cutforcesq) { - double r = sqrt(rsq); - const EAMTableIndex index = radiusToTableIndex(r); - - // The concentration independent part of the cross pair potential. - double Phi_AB = PhiOfR(index, itype, jtype, 1.0 / r); - - // Average concentration of two sites - double x_ij = 0.5 * (x_i + rhoB[j]/rho[j]); - - // Calculate derivative of h(x_ij) polynomial function. - double h_prime = evalHprime(x_ij); - - D_values_t[i] += h_prime * Phi_AB / (2.0 * rho[i] * rho[i]); - if(NEWTON_PAIR || j < nlocal) - D_values_t[j] += h_prime * Phi_AB / (2.0 * rho[j] * rho[j]); - } - } - } - - if (NEWTON_PAIR) { - thr->timer(Timer::PAIR); - data_reduce_thr(D_values, nall, nthreads, 1, tid); - - // wait until reduction is complete - sync_threads(); - -#if defined(_OPENMP) -#pragma omp master -#endif - { communicationStage = 3; - comm->reverse_comm_pair(this); } - - // wait until master thread is done with communication - sync_threads(); - - } else { - thr->timer(Timer::PAIR); - data_reduce_thr(D_values, nlocal, nthreads, 1, tid); - - // wait until reduction is complete - sync_threads(); - } - -#if defined(_OPENMP) -#pragma omp master -#endif - { communicationStage = 4; - comm->forward_comm_pair(this); } - - // wait until master thread is done with communication - sync_threads(); - } - - // Stage III - - // Compute force acting on each atom. - for (ii = iifrom; ii < iito; ii++) { - i = ilist[ii]; - xtmp = x[i].x; - ytmp = x[i].y; - ztmp = x[i].z; - itype = type[i]; - fxtmp = fytmp = fztmp = 0.0; - - jlist = firstneigh[i]; - jnum = numneigh[i]; - - // Concentration at site i - double x_i = -1.0; // The value -1 indicates: no concentration dependence for all interactions of atom i. - // It will be replaced by the concentration at site i if atom i is either A or B. - - double D_i, h_prime_i; - - // This if-clause is only required for ternary alloys. - if((itype == speciesA || itype == speciesB) && rho[i] != 0.0) { - - // Compute local concentration at site i. - x_i = rhoB[i]/rho[i]; - ASSERT(x_i >= 0 && x_i<=1.0); - - if(CDEAMVERSION == 1) { - // Calculate derivative of h(x_i) polynomial function. - h_prime_i = evalHprime(x_i); - D_i = D_values[i] * h_prime_i / (2.0 * rho[i] * rho[i]); - } else if(CDEAMVERSION == 2) { - D_i = D_values[i]; - } else { - ASSERT(false); - } - } - - for(jj = 0; jj < jnum; jj++) { - j = jlist[jj]; - j &= NEIGHMASK; - - delx = xtmp - x[j].x; - dely = ytmp - x[j].y; - delz = ztmp - x[j].z; - rsq = delx*delx + dely*dely + delz*delz; - - if(rsq < cutforcesq) { - jtype = type[j]; - double r = sqrt(rsq); - const EAMTableIndex index = radiusToTableIndex(r); - - // rhoip = derivative of (density at atom j due to atom i) - // rhojp = derivative of (density at atom i due to atom j) - // psip needs both fp[i] and fp[j] terms since r_ij appears in two - // terms of embed eng: Fi(sum rho_ij) and Fj(sum rho_ji) - // hence embed' = Fi(sum rho_ij) rhojp + Fj(sum rho_ji) rhoip - rhoip = RhoPrimeOfR(index, itype, jtype); - rhojp = RhoPrimeOfR(index, jtype, itype); - fpair = fp[i]*rhojp + fp[j]*rhoip; - recip = 1.0/r; - - double x_j = -1; // The value -1 indicates: no concentration dependence for this i-j pair - // because atom j is not of species A nor B. - - // This code line is required for ternary alloy. - if(jtype == speciesA || jtype == speciesB) { - ASSERT(rho[i] != 0.0); - ASSERT(rho[j] != 0.0); - - // Compute local concentration at site j. - x_j = rhoB[j]/rho[j]; - ASSERT(x_j >= 0 && x_j<=1.0); - - double D_j; - if(CDEAMVERSION == 1) { - // Calculate derivative of h(x_j) polynomial function. - double h_prime_j = evalHprime(x_j); - D_j = D_values[j] * h_prime_j / (2.0 * rho[j] * rho[j]); - } else if(CDEAMVERSION == 2) { - D_j = D_values[j]; - } else { - ASSERT(false); - } - double t2 = -rhoB[j]; - if(itype == speciesB) t2 += rho[j]; - fpair += D_j * rhoip * t2; - } - - // This if-clause is only required for a ternary alloy. - // Actually we don't need it at all because D_i should be zero anyway if - // atom i has no concentration dependent interactions (because it is not species A or B). - if(x_i != -1.0) { - double t1 = -rhoB[i]; - if(jtype == speciesB) t1 += rho[i]; - fpair += D_i * rhojp * t1; - } - - double phip; - double phi = PhiOfR(index, itype, jtype, recip, phip); - if(itype == jtype || x_i == -1.0 || x_j == -1.0) { - // Case of no concentration dependence. - fpair += phip; - } else { - // We have a concentration dependence for the i-j interaction. - double h; - if(CDEAMVERSION == 1) { - // Calculate h(x_i) polynomial function. - double h_i = evalH(x_i); - // Calculate h(x_j) polynomial function. - double h_j = evalH(x_j); - h = 0.5 * (h_i + h_j); - } else if(CDEAMVERSION == 2) { - // Average concentration. - double x_ij = 0.5 * (x_i + x_j); - // Calculate h(x_ij) polynomial function. - h = evalH(x_ij); - } else { - ASSERT(false); - } - fpair += h * phip; - phi *= h; - } - - // Divide by r_ij and negate to get forces from gradient. - fpair /= -r; - - fxtmp += delx*fpair; - fytmp += dely*fpair; - fztmp += delz*fpair; - if(NEWTON_PAIR || j < nlocal) { - f[j].x -= delx*fpair; - f[j].y -= dely*fpair; - f[j].z -= delz*fpair; - } - - if(EFLAG) evdwl = phi; - if(EVFLAG) ev_tally_thr(this,i,j,nlocal,NEWTON_PAIR,evdwl,0.0, - fpair,delx,dely,delz,thr); - } - } - f[i].x += fxtmp; - f[i].y += fytmp; - f[i].z += fztmp; - } -} - -/* ---------------------------------------------------------------------- */ - -double PairEAMCDOMP::memory_usage() -{ - double bytes = memory_usage_thr(); - bytes += PairEAMCD::memory_usage(); - - return bytes; -} diff --git a/src/USER-OMP/pair_eam_cd_omp.h b/src/USER-OMP/pair_eam_cd_omp.h deleted file mode 100644 index d46a5383f5bc612799da71b27f15d0fd9afb911c..0000000000000000000000000000000000000000 --- a/src/USER-OMP/pair_eam_cd_omp.h +++ /dev/null @@ -1,65 +0,0 @@ -/* -*- c++ -*- ---------------------------------------------------------- - LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator - http://lammps.sandia.gov, Sandia National Laboratories - Steve Plimpton, sjplimp@sandia.gov - - Copyright (2003) Sandia Corporation. Under the terms of Contract - DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains - certain rights in this software. This software is distributed under - the GNU General Public License. - - See the README file in the top-level LAMMPS directory. -------------------------------------------------------------------------- */ - -/* ---------------------------------------------------------------------- - Contributing author: Axel Kohlmeyer (Temple U) -------------------------------------------------------------------------- */ - -#ifdef PAIR_CLASS - -PairStyle(eam/cd/omp,PairEAMCD_OneSiteOMP) -PairStyle(eam/cd/old/omp,PairEAMCD_TwoSiteOMP) - -#else - -#ifndef LMP_PAIR_EAM_CD_OMP_H -#define LMP_PAIR_EAM_CD_OMP_H - -#include "pair_eam_cd.h" -#include "thr_omp.h" - -namespace LAMMPS_NS { - -class PairEAMCDOMP : public PairEAMCD, public ThrOMP { - - public: - PairEAMCDOMP(class LAMMPS *, int); - - virtual void compute(int, int); - virtual double memory_usage(); - - private: - template - void eval(int iifrom, int iito, ThrData * const thr); -}; - - /// The one-site concentration formulation of CD-EAM. - class PairEAMCD_OneSiteOMP : public PairEAMCDOMP - { - public: - /// Constructor. - PairEAMCD_OneSiteOMP(class LAMMPS* lmp) : PairEAM(lmp), PairEAMCDOMP(lmp, 1) {} - }; - - /// The two-site concentration formulation of CD-EAM. - class PairEAMCD_TwoSiteOMP : public PairEAMCDOMP - { - public: - /// Constructor. - PairEAMCD_TwoSiteOMP(class LAMMPS* lmp) : PairEAM(lmp), PairEAMCDOMP(lmp, 2) {} - }; - -} - -#endif -#endif diff --git a/src/USER-OMP/pair_eam_fs_omp.cpp b/src/USER-OMP/pair_eam_fs_omp.cpp index d1014c5a1446589f84efd3830beff0fcd054875d..e16f28cd31744729456f1dceb86270ebebf48296 100644 --- a/src/USER-OMP/pair_eam_fs_omp.cpp +++ b/src/USER-OMP/pair_eam_fs_omp.cpp @@ -25,11 +25,11 @@ #include "memory.h" #include "error.h" #include "utils.h" +#include "tokenizer.h" +#include "potential_file_reader.h" using namespace LAMMPS_NS; -#define MAXLINE 1024 - /* ---------------------------------------------------------------------- */ PairEAMFSOMP::PairEAMFSOMP(LAMMPS *lmp) : PairEAMOMP(lmp) @@ -117,99 +117,118 @@ void PairEAMFSOMP::read_file(char *filename) { Fs *file = fs; - // open potential file + // read potential file + if(comm->me == 0) { + PotentialFileReader reader(PairEAM::lmp, filename, "EAM"); - int me = comm->me; - FILE *fptr; - char line[MAXLINE]; + try { + char * line = nullptr; - if (me == 0) { - fptr = force->open_potential(filename); - if (fptr == NULL) { - char str[128]; - snprintf(str,128,"Cannot open EAM potential file %s",filename); - error->one(FLERR,str); - } - } + reader.skip_line(); + reader.skip_line(); + reader.skip_line(); - // read and broadcast header - // extract element names from nelements line + // extract element names from nelements line + line = reader.next_line(1); + ValueTokenizer values(line); + file->nelements = values.next_int(); - int n; - if (me == 0) { - utils::sfgets(FLERR,line,MAXLINE,fptr,filename,error); - utils::sfgets(FLERR,line,MAXLINE,fptr,filename,error); - utils::sfgets(FLERR,line,MAXLINE,fptr,filename,error); - utils::sfgets(FLERR,line,MAXLINE,fptr,filename,error); - n = strlen(line) + 1; - } - MPI_Bcast(&n,1,MPI_INT,0,world); - MPI_Bcast(line,n,MPI_CHAR,0,world); + if (values.count() != file->nelements + 1) + error->one(FLERR,"Incorrect element names in EAM potential file"); - sscanf(line,"%d",&file->nelements); - int nwords = atom->count_words(line); - if (nwords != file->nelements + 1) - error->all(FLERR,"Incorrect element names in EAM potential file"); + file->elements = new char*[file->nelements]; + for (int i = 0; i < file->nelements; i++) { + const std::string word = values.next_string(); + const int n = word.length() + 1; + file->elements[i] = new char[n]; + strcpy(file->elements[i], word.c_str()); + } - char **words = new char*[file->nelements+1]; - nwords = 0; - strtok(line," \t\n\r\f"); - while ((words[nwords++] = strtok(NULL," \t\n\r\f"))) continue; + // - file->elements = new char*[file->nelements]; - for (int i = 0; i < file->nelements; i++) { - n = strlen(words[i]) + 1; - file->elements[i] = new char[n]; - strcpy(file->elements[i],words[i]); + line = reader.next_line(5); + values = ValueTokenizer(line); + file->nrho = values.next_int(); + file->drho = values.next_double(); + file->nr = values.next_int(); + file->dr = values.next_double(); + file->cut = values.next_double(); + + if ((file->nrho <= 0) || (file->nr <= 0) || (file->dr <= 0.0)) + error->one(FLERR,"Invalid EAM potential file"); + + memory->create(file->mass, file->nelements, "pair:mass"); + memory->create(file->frho, file->nelements, file->nrho + 1, "pair:frho"); + memory->create(file->rhor, file->nelements, file->nelements, file->nr + 1, "pair:rhor"); + memory->create(file->z2r, file->nelements, file->nelements, file->nr + 1, "pair:z2r"); + + for (int i = 0; i < file->nelements; i++) { + line = reader.next_line(2); + values = ValueTokenizer(line); + values.next_int(); // ignore + file->mass[i] = values.next_double(); + + reader.next_dvector(file->nrho, &file->frho[i][1]); + + for (int j = 0; j < file->nelements; j++) { + reader.next_dvector(file->nr, &file->rhor[i][j][1]); + } + } + + for (int i = 0; i < file->nelements; i++) { + for (int j = 0; j <= i; j++) { + reader.next_dvector(file->nr, &file->z2r[i][j][1]); + } + } + } catch (TokenizerException & e) { + error->one(FLERR, e.what()); + } } - delete [] words; - if (me == 0) { - utils::sfgets(FLERR,line,MAXLINE,fptr,filename,error); - sscanf(line,"%d %lg %d %lg %lg", - &file->nrho,&file->drho,&file->nr,&file->dr,&file->cut); + // broadcast potential information + MPI_Bcast(&file->nelements, 1, MPI_INT, 0, world); + + MPI_Bcast(&file->nrho, 1, MPI_INT, 0, world); + MPI_Bcast(&file->drho, 1, MPI_DOUBLE, 0, world); + MPI_Bcast(&file->nr, 1, MPI_INT, 0, world); + MPI_Bcast(&file->dr, 1, MPI_DOUBLE, 0, world); + MPI_Bcast(&file->cut, 1, MPI_DOUBLE, 0, world); + + // allocate memory on other procs + if (comm->me != 0) { + file->elements = new char*[file->nelements]; + for (int i = 0; i < file->nelements; i++) file->elements[i] = nullptr; + memory->create(file->mass, file->nelements, "pair:mass"); + memory->create(file->frho, file->nelements, file->nrho + 1, "pair:frho"); + memory->create(file->rhor, file->nelements, file->nelements, file->nr + 1, "pair:rhor"); + memory->create(file->z2r, file->nelements, file->nelements, file->nr + 1, "pair:z2r"); } - MPI_Bcast(&file->nrho,1,MPI_INT,0,world); - MPI_Bcast(&file->drho,1,MPI_DOUBLE,0,world); - MPI_Bcast(&file->nr,1,MPI_INT,0,world); - MPI_Bcast(&file->dr,1,MPI_DOUBLE,0,world); - MPI_Bcast(&file->cut,1,MPI_DOUBLE,0,world); - - file->mass = new double[file->nelements]; - memory->create(file->frho,file->nelements,file->nrho+1, - "pair:frho"); - memory->create(file->rhor,file->nelements,file->nelements, - file->nr+1,"pair:rhor"); - memory->create(file->z2r,file->nelements,file->nelements, - file->nr+1,"pair:z2r"); - - int i,j,tmp; - for (i = 0; i < file->nelements; i++) { - if (me == 0) { - utils::sfgets(FLERR,line,MAXLINE,fptr,filename,error); - sscanf(line,"%d %lg",&tmp,&file->mass[i]); - } - MPI_Bcast(&file->mass[i],1,MPI_DOUBLE,0,world); + // broadcast file->elements string array + for (int i = 0; i < file->nelements; i++) { + int n; + if (comm->me == 0) n = strlen(file->elements[i]) + 1; + MPI_Bcast(&n, 1, MPI_INT, 0, world); + if (comm->me != 0) file->elements[i] = new char[n]; + MPI_Bcast(file->elements[i], n, MPI_CHAR, 0, world); + } - if (me == 0) grab(fptr,file->nrho,&file->frho[i][1]); - MPI_Bcast(&file->frho[i][1],file->nrho,MPI_DOUBLE,0,world); + // broadcast file->mass, frho, rhor + for (int i = 0; i < file->nelements; i++) { + MPI_Bcast(&file->mass[i], 1, MPI_DOUBLE, 0, world); + MPI_Bcast(&file->frho[i][1], file->nrho, MPI_DOUBLE, 0, world); - for (j = 0; j < file->nelements; j++) { - if (me == 0) grab(fptr,file->nr,&file->rhor[i][j][1]); - MPI_Bcast(&file->rhor[i][j][1],file->nr,MPI_DOUBLE,0,world); + for (int j = 0; j < file->nelements; j++) { + MPI_Bcast(&file->rhor[i][j][1], file->nr, MPI_DOUBLE, 0, world); } } - for (i = 0; i < file->nelements; i++) - for (j = 0; j <= i; j++) { - if (me == 0) grab(fptr,file->nr,&file->z2r[i][j][1]); - MPI_Bcast(&file->z2r[i][j][1],file->nr,MPI_DOUBLE,0,world); + // broadcast file->z2r + for (int i = 0; i < file->nelements; i++) { + for (int j = 0; j <= i; j++) { + MPI_Bcast(&file->z2r[i][j][1], file->nr, MPI_DOUBLE, 0, world); } - - // close the potential file - - if (me == 0) fclose(fptr); + } } /* ---------------------------------------------------------------------- diff --git a/src/USER-OMP/pair_eam_omp.cpp b/src/USER-OMP/pair_eam_omp.cpp index 899323a680cc767b0efdf01f12936ca2836f3c80..60ae65def562e3587428288a05de1d27694493b1 100644 --- a/src/USER-OMP/pair_eam_omp.cpp +++ b/src/USER-OMP/pair_eam_omp.cpp @@ -12,6 +12,7 @@ Contributing author: Axel Kohlmeyer (Temple U) ------------------------------------------------------------------------- */ +#include "omp_compat.h" #include #include @@ -59,7 +60,7 @@ void PairEAMOMP::compute(int eflag, int vflag) } #if defined(_OPENMP) -#pragma omp parallel default(none) shared(eflag,vflag) +#pragma omp parallel LMP_DEFAULT_NONE LMP_SHARED(eflag,vflag) #endif { int ifrom, ito, tid; diff --git a/src/USER-OMP/pair_edip_omp.cpp b/src/USER-OMP/pair_edip_omp.cpp index d1fa4c1c7a311c5249d29e223a26c6bfae4824c8..efba1971533a866152db85934e923059d6a9eed2 100644 --- a/src/USER-OMP/pair_edip_omp.cpp +++ b/src/USER-OMP/pair_edip_omp.cpp @@ -12,6 +12,7 @@ Contributing author: Axel Kohlmeyer (Temple U) ------------------------------------------------------------------------- */ +#include "omp_compat.h" #include #include "pair_edip_omp.h" #include "atom.h" @@ -50,7 +51,7 @@ void PairEDIPOMP::compute(int eflag, int vflag) const int inum = list->inum; #if defined(_OPENMP) -#pragma omp parallel default(none) shared(eflag,vflag) +#pragma omp parallel LMP_DEFAULT_NONE LMP_SHARED(eflag,vflag) #endif { int ifrom, ito, tid; diff --git a/src/USER-OMP/pair_eim_omp.cpp b/src/USER-OMP/pair_eim_omp.cpp index dd590b75e2c983f291d6495794b4cc88e0e1df4b..02b765a956a5113ce39598a8952ccacff4e981e7 100644 --- a/src/USER-OMP/pair_eim_omp.cpp +++ b/src/USER-OMP/pair_eim_omp.cpp @@ -12,6 +12,7 @@ Contributing author: Axel Kohlmeyer (Temple U) ------------------------------------------------------------------------- */ +#include "omp_compat.h" #include #include @@ -57,7 +58,7 @@ void PairEIMOMP::compute(int eflag, int vflag) } #if defined(_OPENMP) -#pragma omp parallel default(none) shared(eflag,vflag) +#pragma omp parallel LMP_DEFAULT_NONE LMP_SHARED(eflag,vflag) #endif { int ifrom, ito, tid; diff --git a/src/USER-OMP/pair_gauss_cut_omp.cpp b/src/USER-OMP/pair_gauss_cut_omp.cpp index e14a85fc95d70d221330a79aa24ebdd924fe28e8..6d5344701d914a3bd2928da9b29053118ea759eb 100644 --- a/src/USER-OMP/pair_gauss_cut_omp.cpp +++ b/src/USER-OMP/pair_gauss_cut_omp.cpp @@ -12,6 +12,7 @@ Contributing author: Axel Kohlmeyer (Temple U) ------------------------------------------------------------------------- */ +#include "omp_compat.h" #include #include "pair_gauss_cut_omp.h" #include "atom.h" @@ -43,7 +44,7 @@ void PairGaussCutOMP::compute(int eflag, int vflag) const int inum = list->inum; #if defined(_OPENMP) -#pragma omp parallel default(none) shared(eflag,vflag) +#pragma omp parallel LMP_DEFAULT_NONE LMP_SHARED(eflag,vflag) #endif { int ifrom, ito, tid; diff --git a/src/USER-OMP/pair_gauss_omp.cpp b/src/USER-OMP/pair_gauss_omp.cpp index de212c921377f19e4195449d7000b33c352c0b3c..106d520fa182e69c994aaae3679863075b75803d 100644 --- a/src/USER-OMP/pair_gauss_omp.cpp +++ b/src/USER-OMP/pair_gauss_omp.cpp @@ -12,6 +12,7 @@ Contributing author: Axel Kohlmeyer (Temple U) ------------------------------------------------------------------------- */ +#include "omp_compat.h" #include #include "pair_gauss_omp.h" #include "atom.h" @@ -45,7 +46,7 @@ void PairGaussOMP::compute(int eflag, int vflag) double occ = 0.0; #if defined(_OPENMP) -#pragma omp parallel default(none) shared(eflag,vflag) reduction(+:occ) +#pragma omp parallel LMP_DEFAULT_NONE LMP_SHARED(eflag,vflag) reduction(+:occ) #endif { int ifrom, ito, tid; diff --git a/src/USER-OMP/pair_gayberne_omp.cpp b/src/USER-OMP/pair_gayberne_omp.cpp index a58c16eafc1e54ed908acca923bce8ae09f412d7..f0fd60a3096353f55906b3a241787a632c6d3328 100644 --- a/src/USER-OMP/pair_gayberne_omp.cpp +++ b/src/USER-OMP/pair_gayberne_omp.cpp @@ -12,6 +12,7 @@ Contributing author: Axel Kohlmeyer (Temple U) ------------------------------------------------------------------------- */ +#include "omp_compat.h" #include #include "pair_gayberne_omp.h" #include "math_extra.h" @@ -45,7 +46,7 @@ void PairGayBerneOMP::compute(int eflag, int vflag) const int inum = list->inum; #if defined(_OPENMP) -#pragma omp parallel default(none) shared(eflag,vflag) +#pragma omp parallel LMP_DEFAULT_NONE LMP_SHARED(eflag,vflag) #endif { int ifrom, ito, tid; diff --git a/src/USER-OMP/pair_gran_hertz_history_omp.cpp b/src/USER-OMP/pair_gran_hertz_history_omp.cpp index 1e3d86a1a5987d4aafe020901bb7096741662f49..9ad84afb920650667ea1e8b16f6bb873aee916be 100644 --- a/src/USER-OMP/pair_gran_hertz_history_omp.cpp +++ b/src/USER-OMP/pair_gran_hertz_history_omp.cpp @@ -12,6 +12,7 @@ Contributing author: Axel Kohlmeyer (Temple U) ------------------------------------------------------------------------- */ +#include "omp_compat.h" #include #include "pair_gran_hertz_history_omp.h" #include "fix_neigh_history.h" @@ -69,7 +70,7 @@ void PairGranHertzHistoryOMP::compute(int eflag, int vflag) } #if defined(_OPENMP) -#pragma omp parallel default(none) shared(eflag,vflag) +#pragma omp parallel LMP_DEFAULT_NONE LMP_SHARED(eflag,vflag) #endif { int ifrom, ito, tid; diff --git a/src/USER-OMP/pair_gran_hooke_history_omp.cpp b/src/USER-OMP/pair_gran_hooke_history_omp.cpp index d0e44cc430b771f321718b1cc7fba6262805e695..3e519fc0d01c44ba068300280419294e8974e1a3 100644 --- a/src/USER-OMP/pair_gran_hooke_history_omp.cpp +++ b/src/USER-OMP/pair_gran_hooke_history_omp.cpp @@ -12,6 +12,7 @@ Contributing author: Axel Kohlmeyer (Temple U) ------------------------------------------------------------------------- */ +#include "omp_compat.h" #include #include #include "pair_gran_hooke_history_omp.h" @@ -70,7 +71,7 @@ void PairGranHookeHistoryOMP::compute(int eflag, int vflag) const int inum = list->inum; #if defined(_OPENMP) -#pragma omp parallel default(none) shared(eflag,vflag) +#pragma omp parallel LMP_DEFAULT_NONE LMP_SHARED(eflag,vflag) #endif { int ifrom, ito, tid; diff --git a/src/USER-OMP/pair_gran_hooke_omp.cpp b/src/USER-OMP/pair_gran_hooke_omp.cpp index 33296e22fa4528fff0eeee949bc2680448c13014..8de959a91dae94109ff340ca3a5f61e5174f70b8 100644 --- a/src/USER-OMP/pair_gran_hooke_omp.cpp +++ b/src/USER-OMP/pair_gran_hooke_omp.cpp @@ -12,6 +12,7 @@ Contributing author: Axel Kohlmeyer (Temple U) ------------------------------------------------------------------------- */ +#include "omp_compat.h" #include #include "pair_gran_hooke_omp.h" #include "atom.h" @@ -65,7 +66,7 @@ void PairGranHookeOMP::compute(int eflag, int vflag) } #if defined(_OPENMP) -#pragma omp parallel default(none) shared(eflag,vflag) +#pragma omp parallel LMP_DEFAULT_NONE LMP_SHARED(eflag,vflag) #endif { int ifrom, ito, tid; diff --git a/src/USER-OMP/pair_hbond_dreiding_lj_omp.cpp b/src/USER-OMP/pair_hbond_dreiding_lj_omp.cpp index 77cc60e4377738bf6655c594f34b7daf5e6ad666..bb8bbcc98458f9e8e50a82e63c5ae6003382a50d 100644 --- a/src/USER-OMP/pair_hbond_dreiding_lj_omp.cpp +++ b/src/USER-OMP/pair_hbond_dreiding_lj_omp.cpp @@ -12,6 +12,7 @@ Contributing author: Axel Kohlmeyer (Temple U) ------------------------------------------------------------------------- */ +#include "omp_compat.h" #include #include "pair_hbond_dreiding_lj_omp.h" #include "atom.h" @@ -74,7 +75,7 @@ void PairHbondDreidingLJOMP::compute(int eflag, int vflag) } #if defined(_OPENMP) -#pragma omp parallel default(none) shared(eflag,vflag) +#pragma omp parallel LMP_DEFAULT_NONE LMP_SHARED(eflag,vflag) #endif { int ifrom, ito, tid; diff --git a/src/USER-OMP/pair_hbond_dreiding_morse_omp.cpp b/src/USER-OMP/pair_hbond_dreiding_morse_omp.cpp index 47b2818be83138846a738063c1ab5f763823f280..4ad3a8f057013904f3d5bf1e5fd51f2298427a5e 100644 --- a/src/USER-OMP/pair_hbond_dreiding_morse_omp.cpp +++ b/src/USER-OMP/pair_hbond_dreiding_morse_omp.cpp @@ -12,6 +12,7 @@ Contributing author: Axel Kohlmeyer (Temple U) ------------------------------------------------------------------------- */ +#include "omp_compat.h" #include #include "pair_hbond_dreiding_morse_omp.h" #include "atom.h" @@ -74,7 +75,7 @@ void PairHbondDreidingMorseOMP::compute(int eflag, int vflag) } #if defined(_OPENMP) -#pragma omp parallel default(none) shared(eflag,vflag) +#pragma omp parallel LMP_DEFAULT_NONE LMP_SHARED(eflag,vflag) #endif { int ifrom, ito, tid; diff --git a/src/USER-OMP/pair_lj96_cut_omp.cpp b/src/USER-OMP/pair_lj96_cut_omp.cpp index b48946b3f90dce41430c7e3c11a647fd2d87217f..adf0aac9b20c4555a6b13165a0e699d801c1fcb4 100644 --- a/src/USER-OMP/pair_lj96_cut_omp.cpp +++ b/src/USER-OMP/pair_lj96_cut_omp.cpp @@ -12,6 +12,7 @@ Contributing author: Axel Kohlmeyer (Temple U) ------------------------------------------------------------------------- */ +#include "omp_compat.h" #include #include "pair_lj96_cut_omp.h" #include "atom.h" @@ -44,7 +45,7 @@ void PairLJ96CutOMP::compute(int eflag, int vflag) const int inum = list->inum; #if defined(_OPENMP) -#pragma omp parallel default(none) shared(eflag,vflag) +#pragma omp parallel LMP_DEFAULT_NONE LMP_SHARED(eflag,vflag) #endif { int ifrom, ito, tid; diff --git a/src/USER-OMP/pair_lj_charmm_coul_charmm_implicit_omp.cpp b/src/USER-OMP/pair_lj_charmm_coul_charmm_implicit_omp.cpp index 10a253de6c9ded9f3628da37e722606ef029f61a..f357fd9068b17b9038f4995913dc9b70edfb39a0 100644 --- a/src/USER-OMP/pair_lj_charmm_coul_charmm_implicit_omp.cpp +++ b/src/USER-OMP/pair_lj_charmm_coul_charmm_implicit_omp.cpp @@ -12,6 +12,7 @@ Contributing author: Axel Kohlmeyer (Temple U) ------------------------------------------------------------------------- */ +#include "omp_compat.h" #include #include "pair_lj_charmm_coul_charmm_implicit_omp.h" #include "atom.h" @@ -43,7 +44,7 @@ void PairLJCharmmCoulCharmmImplicitOMP::compute(int eflag, int vflag) const int inum = list->inum; #if defined(_OPENMP) -#pragma omp parallel default(none) shared(eflag,vflag) +#pragma omp parallel LMP_DEFAULT_NONE LMP_SHARED(eflag,vflag) #endif { int ifrom, ito, tid; @@ -124,7 +125,6 @@ void PairLJCharmmCoulCharmmImplicitOMP::eval(int iifrom, int iito, ThrData * con dely = ytmp - x[j].y; delz = ztmp - x[j].z; rsq = delx*delx + dely*dely + delz*delz; - jtype = type[j]; if (rsq < cut_bothsq) { r2inv = 1.0/rsq; @@ -136,7 +136,7 @@ void PairLJCharmmCoulCharmmImplicitOMP::eval(int iifrom, int iito, ThrData * con (cut_coulsq + 2.0*rsq - 3.0*cut_coul_innersq) * invdenom_coul; switch2 = 12.0*rsq * (cut_coulsq-rsq) * (rsq-cut_coul_innersq) * invdenom_coul; - forcecoul *= switch1 + switch2; + forcecoul *= switch1 + 0.5*switch2; } forcecoul *= factor_coul; } else forcecoul = 0.0; diff --git a/src/USER-OMP/pair_lj_charmm_coul_charmm_omp.cpp b/src/USER-OMP/pair_lj_charmm_coul_charmm_omp.cpp index c4c5a9650ee511c464b48e57cf8f8803ddb3c2d5..55227e2e100921711479906d69a84aa1737d35d1 100644 --- a/src/USER-OMP/pair_lj_charmm_coul_charmm_omp.cpp +++ b/src/USER-OMP/pair_lj_charmm_coul_charmm_omp.cpp @@ -12,6 +12,7 @@ Contributing author: Axel Kohlmeyer (Temple U) ------------------------------------------------------------------------- */ +#include "omp_compat.h" #include #include "pair_lj_charmm_coul_charmm_omp.h" #include "atom.h" @@ -43,7 +44,7 @@ void PairLJCharmmCoulCharmmOMP::compute(int eflag, int vflag) const int inum = list->inum; #if defined(_OPENMP) -#pragma omp parallel default(none) shared(eflag,vflag) +#pragma omp parallel LMP_DEFAULT_NONE LMP_SHARED(eflag,vflag) #endif { int ifrom, ito, tid; diff --git a/src/USER-OMP/pair_lj_charmm_coul_long_omp.cpp b/src/USER-OMP/pair_lj_charmm_coul_long_omp.cpp index 949ea3ded75dbd0856010c94b81e4a9c4641c115..437bd183ed5c948fedaaa581e3cb2dc91203bf4a 100644 --- a/src/USER-OMP/pair_lj_charmm_coul_long_omp.cpp +++ b/src/USER-OMP/pair_lj_charmm_coul_long_omp.cpp @@ -12,6 +12,7 @@ Contributing author: Axel Kohlmeyer (Temple U) ------------------------------------------------------------------------- */ +#include "omp_compat.h" #include #include "pair_lj_charmm_coul_long_omp.h" #include "atom.h" @@ -44,7 +45,7 @@ void PairLJCharmmCoulLongOMP::compute(int eflag, int vflag) const int inum = list->inum; #if defined(_OPENMP) -#pragma omp parallel default(none) shared(eflag,vflag) +#pragma omp parallel LMP_DEFAULT_NONE LMP_SHARED(eflag,vflag) #endif { int ifrom, ito, tid; diff --git a/src/USER-OMP/pair_lj_charmm_coul_long_soft_omp.cpp b/src/USER-OMP/pair_lj_charmm_coul_long_soft_omp.cpp index 2a41b0690b60a4588904d0b9aa7e2f4692985dca..b32f108098d6cad14ed1581d88b948514c7e2a66 100644 --- a/src/USER-OMP/pair_lj_charmm_coul_long_soft_omp.cpp +++ b/src/USER-OMP/pair_lj_charmm_coul_long_soft_omp.cpp @@ -12,6 +12,7 @@ Contributing author: Axel Kohlmeyer (Temple U) ------------------------------------------------------------------------- */ +#include "omp_compat.h" #include #include "pair_lj_charmm_coul_long_soft_omp.h" #include "atom.h" @@ -44,7 +45,7 @@ void PairLJCharmmCoulLongSoftOMP::compute(int eflag, int vflag) const int inum = list->inum; #if defined(_OPENMP) -#pragma omp parallel default(none) shared(eflag,vflag) +#pragma omp parallel LMP_DEFAULT_NONE LMP_SHARED(eflag,vflag) #endif { int ifrom, ito, tid; diff --git a/src/USER-OMP/pair_lj_charmm_coul_msm_omp.cpp b/src/USER-OMP/pair_lj_charmm_coul_msm_omp.cpp index cecd27bfdc1e1ba90d50d2ddfd640aed4cb773b4..0000e63cda7e1dc17e5decc48d3bae17fe4688b3 100644 --- a/src/USER-OMP/pair_lj_charmm_coul_msm_omp.cpp +++ b/src/USER-OMP/pair_lj_charmm_coul_msm_omp.cpp @@ -12,6 +12,7 @@ Contributing author: Axel Kohlmeyer (Temple U) ------------------------------------------------------------------------- */ +#include "omp_compat.h" #include #include "pair_lj_charmm_coul_msm_omp.h" #include "atom.h" @@ -49,7 +50,7 @@ void PairLJCharmmCoulMSMOMP::compute(int eflag, int vflag) const int inum = list->inum; #if defined(_OPENMP) -#pragma omp parallel default(none) shared(eflag,vflag) +#pragma omp parallel LMP_DEFAULT_NONE LMP_SHARED(eflag,vflag) #endif { int ifrom, ito, tid; @@ -136,7 +137,7 @@ void PairLJCharmmCoulMSMOMP::eval(int iifrom, int iito, ThrData * const thr) const double prefactor = qqrd2e * qtmp*q[j]/r; const double egamma = 1.0 - (r/cut_coul)*force->kspace->gamma(r/cut_coul); const double fgamma = 1.0 + (rsq/cut_coulsq)*force->kspace->dgamma(r/cut_coul); - forcecoul = prefactor * (fgamma - 1.0); + forcecoul = prefactor * fgamma; if (EFLAG) ecoul = prefactor*egamma; if (sbindex) { diff --git a/src/USER-OMP/pair_lj_class2_coul_cut_omp.cpp b/src/USER-OMP/pair_lj_class2_coul_cut_omp.cpp index 9e4dc08fd551121249296b979621fdadfebfc91f..59a6841c9ef6e3acdbaf858cbe67b274fc07ad18 100644 --- a/src/USER-OMP/pair_lj_class2_coul_cut_omp.cpp +++ b/src/USER-OMP/pair_lj_class2_coul_cut_omp.cpp @@ -12,6 +12,7 @@ Contributing author: Axel Kohlmeyer (Temple U) ------------------------------------------------------------------------- */ +#include "omp_compat.h" #include #include "pair_lj_class2_coul_cut_omp.h" #include "atom.h" @@ -43,7 +44,7 @@ void PairLJClass2CoulCutOMP::compute(int eflag, int vflag) const int inum = list->inum; #if defined(_OPENMP) -#pragma omp parallel default(none) shared(eflag,vflag) +#pragma omp parallel LMP_DEFAULT_NONE LMP_SHARED(eflag,vflag) #endif { int ifrom, ito, tid; diff --git a/src/USER-OMP/pair_lj_class2_coul_long_omp.cpp b/src/USER-OMP/pair_lj_class2_coul_long_omp.cpp index 4fd371e2eb686d2b8e3bdda654fde4150afd5c39..480e2adae011e56cc29ff5db469969243131607b 100644 --- a/src/USER-OMP/pair_lj_class2_coul_long_omp.cpp +++ b/src/USER-OMP/pair_lj_class2_coul_long_omp.cpp @@ -12,6 +12,7 @@ Contributing author: Axel Kohlmeyer (Temple U) ------------------------------------------------------------------------- */ +#include "omp_compat.h" #include #include "pair_lj_class2_coul_long_omp.h" #include "atom.h" @@ -38,6 +39,7 @@ PairLJClass2CoulLongOMP::PairLJClass2CoulLongOMP(LAMMPS *lmp) : { suffix_flag |= Suffix::OMP; respa_enable = 0; + cut_respa = NULL; } /* ---------------------------------------------------------------------- */ @@ -51,7 +53,7 @@ void PairLJClass2CoulLongOMP::compute(int eflag, int vflag) const int inum = list->inum; #if defined(_OPENMP) -#pragma omp parallel default(none) shared(eflag,vflag) +#pragma omp parallel LMP_DEFAULT_NONE LMP_SHARED(eflag,vflag) #endif { int ifrom, ito, tid; @@ -84,8 +86,9 @@ void PairLJClass2CoulLongOMP::compute(int eflag, int vflag) template void PairLJClass2CoulLongOMP::eval(int iifrom, int iito, ThrData * const thr) { - int i,j,ii,jj,jnum,itype,jtype; + int i,j,ii,jj,jnum,itype,jtype,itable; double qtmp,xtmp,ytmp,ztmp,delx,dely,delz,evdwl,ecoul,fpair; + double fraction,table; double r,rsq,rinv,r2inv,r3inv,r6inv,forcecoul,forcelj,factor_coul,factor_lj; double grij,expm2,prefactor,t,erfc; int *ilist,*jlist,*numneigh,**firstneigh; @@ -136,14 +139,29 @@ void PairLJClass2CoulLongOMP::eval(int iifrom, int iito, ThrData * const thr) r2inv = 1.0/rsq; if (rsq < cut_coulsq) { - r = sqrt(rsq); - grij = g_ewald * r; - expm2 = exp(-grij*grij); - t = 1.0 / (1.0 + EWALD_P*grij); - erfc = t * (A1+t*(A2+t*(A3+t*(A4+t*A5)))) * expm2; - prefactor = qqrd2e * qtmp*q[j]/r; - forcecoul = prefactor * (erfc + EWALD_F*grij*expm2); - if (factor_coul < 1.0) forcecoul -= (1.0-factor_coul)*prefactor; + if (!ncoultablebits || rsq <= tabinnersq) { + r = sqrt(rsq); + grij = g_ewald * r; + expm2 = exp(-grij*grij); + t = 1.0 / (1.0 + EWALD_P*grij); + erfc = t * (A1+t*(A2+t*(A3+t*(A4+t*A5)))) * expm2; + prefactor = qqrd2e * qtmp*q[j]/r; + forcecoul = prefactor * (erfc + EWALD_F*grij*expm2); + if (factor_coul < 1.0) forcecoul -= (1.0-factor_coul)*prefactor; + } else { + union_int_float_t rsq_lookup; + rsq_lookup.f = rsq; + itable = rsq_lookup.i & ncoulmask; + itable >>= ncoulshiftbits; + fraction = (rsq_lookup.f - rtable[itable]) * drtable[itable]; + table = ftable[itable] + fraction*dftable[itable]; + forcecoul = qtmp*q[j] * table; + if (factor_coul < 1.0) { + table = ctable[itable] + fraction*dctable[itable]; + prefactor = qtmp*q[j] * table; + forcecoul -= (1.0-factor_coul)*prefactor; + } + } } else forcecoul = 0.0; if (rsq < cut_ljsq[itype][jtype]) { @@ -167,7 +185,12 @@ void PairLJClass2CoulLongOMP::eval(int iifrom, int iito, ThrData * const thr) if (EFLAG) { if (rsq < cut_coulsq) { - ecoul = prefactor*erfc; + if (!ncoultablebits || rsq <= tabinnersq) + ecoul = prefactor*erfc; + else { + table = etable[itable] + fraction*detable[itable]; + ecoul = qtmp*q[j] * table; + } if (factor_coul < 1.0) ecoul -= (1.0-factor_coul)*prefactor; } else ecoul = 0.0; diff --git a/src/USER-OMP/pair_lj_class2_omp.cpp b/src/USER-OMP/pair_lj_class2_omp.cpp index fa9b6ae703c813a99ffa67e500d6a25bb808fb86..2b91e10cfa9a86002c7ef4b2de5df109cd107366 100644 --- a/src/USER-OMP/pair_lj_class2_omp.cpp +++ b/src/USER-OMP/pair_lj_class2_omp.cpp @@ -12,6 +12,7 @@ Contributing author: Axel Kohlmeyer (Temple U) ------------------------------------------------------------------------- */ +#include "omp_compat.h" #include #include "pair_lj_class2_omp.h" #include "atom.h" @@ -43,7 +44,7 @@ void PairLJClass2OMP::compute(int eflag, int vflag) const int inum = list->inum; #if defined(_OPENMP) -#pragma omp parallel default(none) shared(eflag,vflag) +#pragma omp parallel LMP_DEFAULT_NONE LMP_SHARED(eflag,vflag) #endif { int ifrom, ito, tid; diff --git a/src/USER-OMP/pair_lj_cubic_omp.cpp b/src/USER-OMP/pair_lj_cubic_omp.cpp index 3fe6fab5de9607fe49737760b2aa95f117432386..778c25393d37f1cf8c9b599aa1e487164d3c6cd6 100644 --- a/src/USER-OMP/pair_lj_cubic_omp.cpp +++ b/src/USER-OMP/pair_lj_cubic_omp.cpp @@ -12,6 +12,7 @@ Contributing author: Axel Kohlmeyer (Temple U) ------------------------------------------------------------------------- */ +#include "omp_compat.h" #include #include "pair_lj_cubic_omp.h" #include "atom.h" @@ -44,7 +45,7 @@ void PairLJCubicOMP::compute(int eflag, int vflag) const int inum = list->inum; #if defined(_OPENMP) -#pragma omp parallel default(none) shared(eflag,vflag) +#pragma omp parallel LMP_DEFAULT_NONE LMP_SHARED(eflag,vflag) #endif { int ifrom, ito, tid; diff --git a/src/USER-OMP/pair_lj_cut_coul_cut_omp.cpp b/src/USER-OMP/pair_lj_cut_coul_cut_omp.cpp index 6c0a3706f7d7682d0d704cd931b8a9a40ad7161f..d560b803f1650dec75b2967292b314b7238392d2 100644 --- a/src/USER-OMP/pair_lj_cut_coul_cut_omp.cpp +++ b/src/USER-OMP/pair_lj_cut_coul_cut_omp.cpp @@ -12,6 +12,7 @@ Contributing author: Axel Kohlmeyer (Temple U) ------------------------------------------------------------------------- */ +#include "omp_compat.h" #include #include "pair_lj_cut_coul_cut_omp.h" #include "atom.h" @@ -43,7 +44,7 @@ void PairLJCutCoulCutOMP::compute(int eflag, int vflag) const int inum = list->inum; #if defined(_OPENMP) -#pragma omp parallel default(none) shared(eflag,vflag) +#pragma omp parallel LMP_DEFAULT_NONE LMP_SHARED(eflag,vflag) #endif { int ifrom, ito, tid; diff --git a/src/USER-OMP/pair_lj_cut_coul_cut_soft_omp.cpp b/src/USER-OMP/pair_lj_cut_coul_cut_soft_omp.cpp index 742565d19c19af6803a38ffec3710e18fc30de93..1c88600e7a6970e4782ad8df6ba70264898510f1 100644 --- a/src/USER-OMP/pair_lj_cut_coul_cut_soft_omp.cpp +++ b/src/USER-OMP/pair_lj_cut_coul_cut_soft_omp.cpp @@ -12,6 +12,7 @@ Contributing author: Axel Kohlmeyer (Temple U) ------------------------------------------------------------------------- */ +#include "omp_compat.h" #include #include "pair_lj_cut_coul_cut_soft_omp.h" #include "atom.h" @@ -43,7 +44,7 @@ void PairLJCutCoulCutSoftOMP::compute(int eflag, int vflag) const int inum = list->inum; #if defined(_OPENMP) -#pragma omp parallel default(none) shared(eflag,vflag) +#pragma omp parallel LMP_DEFAULT_NONE LMP_SHARED(eflag,vflag) #endif { int ifrom, ito, tid; diff --git a/src/USER-OMP/pair_lj_cut_coul_debye_omp.cpp b/src/USER-OMP/pair_lj_cut_coul_debye_omp.cpp index 413758cc4add64a015cabb4d51b297d76a2e7ecd..79754e704b2c8e3b15b584883a12f3b45fc48f01 100644 --- a/src/USER-OMP/pair_lj_cut_coul_debye_omp.cpp +++ b/src/USER-OMP/pair_lj_cut_coul_debye_omp.cpp @@ -12,6 +12,7 @@ Contributing author: Axel Kohlmeyer (Temple U) ------------------------------------------------------------------------- */ +#include "omp_compat.h" #include #include "pair_lj_cut_coul_debye_omp.h" #include "atom.h" @@ -43,7 +44,7 @@ void PairLJCutCoulDebyeOMP::compute(int eflag, int vflag) const int inum = list->inum; #if defined(_OPENMP) -#pragma omp parallel default(none) shared(eflag,vflag) +#pragma omp parallel LMP_DEFAULT_NONE LMP_SHARED(eflag,vflag) #endif { int ifrom, ito, tid; diff --git a/src/USER-OMP/pair_lj_cut_coul_dsf_omp.cpp b/src/USER-OMP/pair_lj_cut_coul_dsf_omp.cpp index 3295ede1326c279264bfe1e7584d12af6323763a..ec69a1a1ca92d332c11b2f3989d2084b63aa8f58 100644 --- a/src/USER-OMP/pair_lj_cut_coul_dsf_omp.cpp +++ b/src/USER-OMP/pair_lj_cut_coul_dsf_omp.cpp @@ -12,6 +12,7 @@ Contributing author: Axel Kohlmeyer (Temple U) ------------------------------------------------------------------------- */ +#include "omp_compat.h" #include #include "pair_lj_cut_coul_dsf_omp.h" #include "atom.h" @@ -53,7 +54,7 @@ void PairLJCutCoulDSFOMP::compute(int eflag, int vflag) const int inum = list->inum; #if defined(_OPENMP) -#pragma omp parallel default(none) shared(eflag,vflag) +#pragma omp parallel LMP_DEFAULT_NONE LMP_SHARED(eflag,vflag) #endif { int ifrom, ito, tid; diff --git a/src/USER-OMP/pair_lj_cut_coul_long_omp.cpp b/src/USER-OMP/pair_lj_cut_coul_long_omp.cpp index d32ec58607ed4a922ccbd8418d4dc61f51acb556..618986389c799f1ed6ad1011a256212b8894b8ae 100644 --- a/src/USER-OMP/pair_lj_cut_coul_long_omp.cpp +++ b/src/USER-OMP/pair_lj_cut_coul_long_omp.cpp @@ -12,6 +12,7 @@ Contributing author: Axel Kohlmeyer (Temple U) ------------------------------------------------------------------------- */ +#include "omp_compat.h" #include #include "pair_lj_cut_coul_long_omp.h" #include "atom.h" @@ -52,7 +53,7 @@ void PairLJCutCoulLongOMP::compute(int eflag, int vflag) const int inum = list->inum; #if defined(_OPENMP) -#pragma omp parallel default(none) shared(eflag,vflag) +#pragma omp parallel LMP_DEFAULT_NONE LMP_SHARED(eflag,vflag) #endif { int ifrom, ito, tid; diff --git a/src/USER-OMP/pair_lj_cut_coul_long_soft_omp.cpp b/src/USER-OMP/pair_lj_cut_coul_long_soft_omp.cpp index d1f97941f542b2ccd949a41dc91ba5dde9e42a97..ce84ba01c3baf76d44d914b9723a45ee959baeec 100644 --- a/src/USER-OMP/pair_lj_cut_coul_long_soft_omp.cpp +++ b/src/USER-OMP/pair_lj_cut_coul_long_soft_omp.cpp @@ -12,6 +12,7 @@ Contributing author: Axel Kohlmeyer (Temple U) ------------------------------------------------------------------------- */ +#include "omp_compat.h" #include #include "pair_lj_cut_coul_long_soft_omp.h" #include "atom.h" @@ -52,7 +53,7 @@ void PairLJCutCoulLongSoftOMP::compute(int eflag, int vflag) const int inum = list->inum; #if defined(_OPENMP) -#pragma omp parallel default(none) shared(eflag,vflag) +#pragma omp parallel LMP_DEFAULT_NONE LMP_SHARED(eflag,vflag) #endif { int ifrom, ito, tid; diff --git a/src/USER-OMP/pair_lj_cut_coul_msm_omp.cpp b/src/USER-OMP/pair_lj_cut_coul_msm_omp.cpp index 9c48e03a130dc612cfdaf3436624722567953064..58e5cee0c21857d98d18dc9363eb4d1586d27a8d 100644 --- a/src/USER-OMP/pair_lj_cut_coul_msm_omp.cpp +++ b/src/USER-OMP/pair_lj_cut_coul_msm_omp.cpp @@ -12,6 +12,7 @@ Contributing author: Axel Kohlmeyer (Temple U) ------------------------------------------------------------------------- */ +#include "omp_compat.h" #include #include "pair_lj_cut_coul_msm_omp.h" #include "atom.h" @@ -49,7 +50,7 @@ void PairLJCutCoulMSMOMP::compute(int eflag, int vflag) const int inum = list->inum; #if defined(_OPENMP) -#pragma omp parallel default(none) shared(eflag,vflag) +#pragma omp parallel LMP_DEFAULT_NONE LMP_SHARED(eflag,vflag) #endif { int ifrom, ito, tid; diff --git a/src/USER-OMP/pair_lj_cut_coul_wolf_omp.cpp b/src/USER-OMP/pair_lj_cut_coul_wolf_omp.cpp index 09403b893c8f3113bd139c18fd8ee9a61ef0e676..4111c5b22c122e34cf9e99fac9669f1cbfe561fc 100644 --- a/src/USER-OMP/pair_lj_cut_coul_wolf_omp.cpp +++ b/src/USER-OMP/pair_lj_cut_coul_wolf_omp.cpp @@ -12,6 +12,7 @@ Contributing author: Axel Kohlmeyer (Temple U) ------------------------------------------------------------------------- */ +#include "omp_compat.h" #include #include "pair_lj_cut_coul_wolf_omp.h" #include "atom.h" @@ -45,7 +46,7 @@ void PairLJCutCoulWolfOMP::compute(int eflag, int vflag) const int inum = list->inum; #if defined(_OPENMP) -#pragma omp parallel default(none) shared(eflag,vflag) +#pragma omp parallel LMP_DEFAULT_NONE LMP_SHARED(eflag,vflag) #endif { int ifrom, ito, tid; diff --git a/src/USER-OMP/pair_lj_cut_dipole_cut_omp.cpp b/src/USER-OMP/pair_lj_cut_dipole_cut_omp.cpp index c259b006c5958e451330b7c3a640357ed6d38209..7d5d25c39bf622f119fdbcf4aff16e2b85c9c1d4 100644 --- a/src/USER-OMP/pair_lj_cut_dipole_cut_omp.cpp +++ b/src/USER-OMP/pair_lj_cut_dipole_cut_omp.cpp @@ -12,6 +12,7 @@ Contributing author: Axel Kohlmeyer (Temple U) ------------------------------------------------------------------------- */ +#include "omp_compat.h" #include #include "pair_lj_cut_dipole_cut_omp.h" #include "atom.h" @@ -43,7 +44,7 @@ void PairLJCutDipoleCutOMP::compute(int eflag, int vflag) const int inum = list->inum; #if defined(_OPENMP) -#pragma omp parallel default(none) shared(eflag,vflag) +#pragma omp parallel LMP_DEFAULT_NONE LMP_SHARED(eflag,vflag) #endif { int ifrom, ito, tid; diff --git a/src/USER-OMP/pair_lj_cut_omp.cpp b/src/USER-OMP/pair_lj_cut_omp.cpp index f8670b7c2849ea701f3ce7b721078b93cd53fdfd..3e7e92de21aed2e6fc0685698d5c05b5a7536885 100644 --- a/src/USER-OMP/pair_lj_cut_omp.cpp +++ b/src/USER-OMP/pair_lj_cut_omp.cpp @@ -12,6 +12,7 @@ Contributing author: Axel Kohlmeyer (Temple U) ------------------------------------------------------------------------- */ +#include "omp_compat.h" #include #include "pair_lj_cut_omp.h" #include "atom.h" @@ -44,7 +45,7 @@ void PairLJCutOMP::compute(int eflag, int vflag) const int inum = list->inum; #if defined(_OPENMP) -#pragma omp parallel default(none) shared(eflag,vflag) +#pragma omp parallel LMP_DEFAULT_NONE LMP_SHARED(eflag,vflag) #endif { int ifrom, ito, tid; diff --git a/src/USER-OMP/pair_lj_cut_soft_omp.cpp b/src/USER-OMP/pair_lj_cut_soft_omp.cpp index 988af13938b7f144d1ea2a0188c915ec5334872f..5064c4705e8de478160ee43c031e3565a606a5ed 100644 --- a/src/USER-OMP/pair_lj_cut_soft_omp.cpp +++ b/src/USER-OMP/pair_lj_cut_soft_omp.cpp @@ -12,6 +12,7 @@ Contributing author: Axel Kohlmeyer (Temple U) ------------------------------------------------------------------------- */ +#include "omp_compat.h" #include #include "pair_lj_cut_soft_omp.h" #include "atom.h" @@ -44,7 +45,7 @@ void PairLJCutSoftOMP::compute(int eflag, int vflag) const int inum = list->inum; #if defined(_OPENMP) -#pragma omp parallel default(none) shared(eflag,vflag) +#pragma omp parallel LMP_DEFAULT_NONE LMP_SHARED(eflag,vflag) #endif { int ifrom, ito, tid; diff --git a/src/USER-OMP/pair_lj_cut_thole_long_omp.cpp b/src/USER-OMP/pair_lj_cut_thole_long_omp.cpp index a8f2d2a0819b60d0b082460e6301b501b284a3dd..72a7d5f16a293b9b12b75a131c42fc572a74fd5b 100644 --- a/src/USER-OMP/pair_lj_cut_thole_long_omp.cpp +++ b/src/USER-OMP/pair_lj_cut_thole_long_omp.cpp @@ -15,6 +15,7 @@ Contributing author: Paul Crozier (SNL) ------------------------------------------------------------------------- */ +#include "omp_compat.h" #include "pair_lj_cut_thole_long_omp.h" #include #include @@ -70,7 +71,7 @@ void PairLJCutTholeLongOMP::compute(int eflag, int vflag) const int inum = list->inum; #if defined(_OPENMP) -#pragma omp parallel default(none) shared(eflag,vflag) +#pragma omp parallel LMP_DEFAULT_NONE LMP_SHARED(eflag,vflag) #endif { int ifrom, ito, tid; diff --git a/src/USER-OMP/pair_lj_cut_tip4p_cut_omp.cpp b/src/USER-OMP/pair_lj_cut_tip4p_cut_omp.cpp index 40cfcb6bc2ff5f9e94eb385e6363ec2804485d96..2d1b8288220a4f4dea5f292281da40eb0ec2acc7 100644 --- a/src/USER-OMP/pair_lj_cut_tip4p_cut_omp.cpp +++ b/src/USER-OMP/pair_lj_cut_tip4p_cut_omp.cpp @@ -12,6 +12,7 @@ Contributing author: Axel Kohlmeyer (Temple U) ------------------------------------------------------------------------- */ +#include "omp_compat.h" #include #include "pair_lj_cut_tip4p_cut_omp.h" #include "atom.h" @@ -93,7 +94,7 @@ void PairLJCutTIP4PCutOMP::compute(int eflag, int vflag) const int inum = list->inum; #if defined(_OPENMP) -#pragma omp parallel default(none) shared(eflag,vflag) +#pragma omp parallel LMP_DEFAULT_NONE LMP_SHARED(eflag,vflag) #endif { int ifrom, ito, tid; diff --git a/src/USER-OMP/pair_lj_cut_tip4p_long_omp.cpp b/src/USER-OMP/pair_lj_cut_tip4p_long_omp.cpp index d51382c0f1e15d22e26df6fabbebe86b3363f49b..a60f9d6a5729339bef69e7b3fd470debb46faad4 100644 --- a/src/USER-OMP/pair_lj_cut_tip4p_long_omp.cpp +++ b/src/USER-OMP/pair_lj_cut_tip4p_long_omp.cpp @@ -12,6 +12,7 @@ Contributing author: Axel Kohlmeyer (Temple U) ------------------------------------------------------------------------- */ +#include "omp_compat.h" #include "pair_lj_cut_tip4p_long_omp.h" #include #include "atom.h" @@ -93,7 +94,7 @@ void PairLJCutTIP4PLongOMP::compute(int eflag, int vflag) const int inum = list->inum; #if defined(_OPENMP) -#pragma omp parallel default(none) shared(eflag,vflag) +#pragma omp parallel LMP_DEFAULT_NONE LMP_SHARED(eflag,vflag) #endif { int ifrom, ito, tid; diff --git a/src/USER-OMP/pair_lj_cut_tip4p_long_soft_omp.cpp b/src/USER-OMP/pair_lj_cut_tip4p_long_soft_omp.cpp index 350bea884d73b4cc2adc15976e6b530a96bb3a4a..f4a75b9af8f53e5542857a788686518e448391f1 100644 --- a/src/USER-OMP/pair_lj_cut_tip4p_long_soft_omp.cpp +++ b/src/USER-OMP/pair_lj_cut_tip4p_long_soft_omp.cpp @@ -12,6 +12,7 @@ Contributing author: Axel Kohlmeyer (Temple U) ------------------------------------------------------------------------- */ +#include "omp_compat.h" #include #include "pair_lj_cut_tip4p_long_soft_omp.h" #include "atom.h" @@ -93,7 +94,7 @@ void PairLJCutTIP4PLongSoftOMP::compute(int eflag, int vflag) const int inum = list->inum; #if defined(_OPENMP) -#pragma omp parallel default(none) shared(eflag,vflag) +#pragma omp parallel LMP_DEFAULT_NONE LMP_SHARED(eflag,vflag) #endif { int ifrom, ito, tid; diff --git a/src/USER-OMP/pair_lj_expand_omp.cpp b/src/USER-OMP/pair_lj_expand_omp.cpp index d3d1da263c29ad3b80e322bedc4b38a48f08bc05..70b5e436fa40655e1ab1617cb34fda64d04e66ef 100644 --- a/src/USER-OMP/pair_lj_expand_omp.cpp +++ b/src/USER-OMP/pair_lj_expand_omp.cpp @@ -12,6 +12,7 @@ Contributing author: Axel Kohlmeyer (Temple U) ------------------------------------------------------------------------- */ +#include "omp_compat.h" #include #include "pair_lj_expand_omp.h" #include "atom.h" @@ -43,7 +44,7 @@ void PairLJExpandOMP::compute(int eflag, int vflag) const int inum = list->inum; #if defined(_OPENMP) -#pragma omp parallel default(none) shared(eflag,vflag) +#pragma omp parallel LMP_DEFAULT_NONE LMP_SHARED(eflag,vflag) #endif { int ifrom, ito, tid; diff --git a/src/USER-OMP/pair_lj_gromacs_coul_gromacs_omp.cpp b/src/USER-OMP/pair_lj_gromacs_coul_gromacs_omp.cpp index 2fe7c39afe05568b62bdf1c63052816612f19145..0f0a8de2ff9872cc4a6a630a69eabd9c4fee0eb0 100644 --- a/src/USER-OMP/pair_lj_gromacs_coul_gromacs_omp.cpp +++ b/src/USER-OMP/pair_lj_gromacs_coul_gromacs_omp.cpp @@ -12,6 +12,7 @@ Contributing author: Axel Kohlmeyer (Temple U) ------------------------------------------------------------------------- */ +#include "omp_compat.h" #include #include "pair_lj_gromacs_coul_gromacs_omp.h" #include "atom.h" @@ -43,7 +44,7 @@ void PairLJGromacsCoulGromacsOMP::compute(int eflag, int vflag) const int inum = list->inum; #if defined(_OPENMP) -#pragma omp parallel default(none) shared(eflag,vflag) +#pragma omp parallel LMP_DEFAULT_NONE LMP_SHARED(eflag,vflag) #endif { int ifrom, ito, tid; diff --git a/src/USER-OMP/pair_lj_gromacs_omp.cpp b/src/USER-OMP/pair_lj_gromacs_omp.cpp index 4a4e68ec6e2b59739432aeeb5d23e2cac905ca81..ea2c9e8f557ac0111f4d33f1b6df1e33385bd376 100644 --- a/src/USER-OMP/pair_lj_gromacs_omp.cpp +++ b/src/USER-OMP/pair_lj_gromacs_omp.cpp @@ -12,6 +12,7 @@ Contributing author: Axel Kohlmeyer (Temple U) ------------------------------------------------------------------------- */ +#include "omp_compat.h" #include #include "pair_lj_gromacs_omp.h" #include "atom.h" @@ -43,7 +44,7 @@ void PairLJGromacsOMP::compute(int eflag, int vflag) const int inum = list->inum; #if defined(_OPENMP) -#pragma omp parallel default(none) shared(eflag,vflag) +#pragma omp parallel LMP_DEFAULT_NONE LMP_SHARED(eflag,vflag) #endif { int ifrom, ito, tid; diff --git a/src/USER-OMP/pair_lj_long_coul_long_omp.cpp b/src/USER-OMP/pair_lj_long_coul_long_omp.cpp index 7286771c26dbef6fcd4d38ec3aab91a32ae04181..e74f48712969557f5aa0d067de387db8352d13a5 100644 --- a/src/USER-OMP/pair_lj_long_coul_long_omp.cpp +++ b/src/USER-OMP/pair_lj_long_coul_long_omp.cpp @@ -12,6 +12,7 @@ Contributing author: Axel Kohlmeyer (Temple U) ------------------------------------------------------------------------- */ +#include "omp_compat.h" #include #include "pair_lj_long_coul_long_omp.h" #include "atom.h" @@ -56,7 +57,7 @@ void PairLJLongCoulLongOMP::compute(int eflag, int vflag) const int inum = list->inum; #if defined(_OPENMP) -#pragma omp parallel default(none) shared(eflag,vflag) +#pragma omp parallel LMP_DEFAULT_NONE LMP_SHARED(eflag,vflag) #endif { int ifrom, ito, tid; @@ -318,7 +319,7 @@ void PairLJLongCoulLongOMP::compute_inner() const int nthreads = comm->nthreads; const int inum = list->inum_inner; #if defined(_OPENMP) -#pragma omp parallel default(none) +#pragma omp parallel LMP_DEFAULT_NONE #endif { int ifrom, ito, tid; @@ -343,7 +344,7 @@ void PairLJLongCoulLongOMP::compute_middle() const int inum = list->inum_middle; #if defined(_OPENMP) -#pragma omp parallel default(none) +#pragma omp parallel LMP_DEFAULT_NONE #endif { int ifrom, ito, tid; @@ -373,7 +374,7 @@ void PairLJLongCoulLongOMP::compute_outer(int eflag, int vflag) const int inum = list->inum; #if defined(_OPENMP) -#pragma omp parallel default(none) shared(eflag,vflag) +#pragma omp parallel LMP_DEFAULT_NONE LMP_SHARED(eflag,vflag) #endif { int ifrom, ito, tid; diff --git a/src/USER-OMP/pair_lj_long_tip4p_long_omp.cpp b/src/USER-OMP/pair_lj_long_tip4p_long_omp.cpp index d8eedc6c0bc16bba79d2412f8b99aeaa6b8c1762..9c8de110d7563dfc6173503343234120ca8984fa 100644 --- a/src/USER-OMP/pair_lj_long_tip4p_long_omp.cpp +++ b/src/USER-OMP/pair_lj_long_tip4p_long_omp.cpp @@ -12,6 +12,7 @@ Contributing author: Axel Kohlmeyer (Temple U) ------------------------------------------------------------------------- */ +#include "omp_compat.h" #include #include "pair_lj_long_tip4p_long_omp.h" #include "atom.h" @@ -96,7 +97,7 @@ void PairLJLongTIP4PLongOMP::compute(int eflag, int vflag) const int inum = list->inum; #if defined(_OPENMP) -#pragma omp parallel default(none) shared(eflag,vflag) +#pragma omp parallel LMP_DEFAULT_NONE LMP_SHARED(eflag,vflag) #endif { int ifrom, ito, tid; @@ -379,7 +380,7 @@ void PairLJLongTIP4PLongOMP::compute_inner() const int nthreads = comm->nthreads; const int inum = list->inum_inner; #if defined(_OPENMP) -#pragma omp parallel default(none) +#pragma omp parallel LMP_DEFAULT_NONE #endif { int ifrom, ito, tid; @@ -404,7 +405,7 @@ void PairLJLongTIP4PLongOMP::compute_middle() const int inum = list->inum_middle; #if defined(_OPENMP) -#pragma omp parallel default(none) +#pragma omp parallel LMP_DEFAULT_NONE #endif { int ifrom, ito, tid; @@ -458,7 +459,7 @@ void PairLJLongTIP4PLongOMP::compute_outer(int eflag, int vflag) const int inum = list->inum; #if defined(_OPENMP) -#pragma omp parallel default(none) shared(eflag,vflag) +#pragma omp parallel LMP_DEFAULT_NONE LMP_SHARED(eflag,vflag) #endif { int ifrom, ito, tid; diff --git a/src/USER-OMP/pair_lj_sdk_coul_long_omp.cpp b/src/USER-OMP/pair_lj_sdk_coul_long_omp.cpp index 15fea32f531b69be53b7443f7442e8402240a4d7..4ad082cde189e2f944ee9b10dc598e38db6ad21d 100644 --- a/src/USER-OMP/pair_lj_sdk_coul_long_omp.cpp +++ b/src/USER-OMP/pair_lj_sdk_coul_long_omp.cpp @@ -12,6 +12,7 @@ Contributing author: Axel Kohlmeyer (Temple U) ------------------------------------------------------------------------- */ +#include "omp_compat.h" #include #include "pair_lj_sdk_coul_long_omp.h" #include "atom.h" @@ -45,7 +46,7 @@ void PairLJSDKCoulLongOMP::compute(int eflag, int vflag) const int inum = list->inum; #if defined(_OPENMP) -#pragma omp parallel default(none) shared(eflag,vflag) +#pragma omp parallel LMP_DEFAULT_NONE LMP_SHARED(eflag,vflag) #endif { int ifrom, ito, tid; diff --git a/src/USER-OMP/pair_lj_sdk_coul_msm_omp.cpp b/src/USER-OMP/pair_lj_sdk_coul_msm_omp.cpp index 3326034da8223061c9b097f2a3a610a5becbc7ef..4871356b184611c0750be2c29612f0ed46f0e8b9 100644 --- a/src/USER-OMP/pair_lj_sdk_coul_msm_omp.cpp +++ b/src/USER-OMP/pair_lj_sdk_coul_msm_omp.cpp @@ -13,6 +13,7 @@ This style is a simplified re-implementation of the CG/CMM pair style ------------------------------------------------------------------------- */ +#include "omp_compat.h" #include #include "pair_lj_sdk_coul_msm_omp.h" #include "atom.h" @@ -51,7 +52,7 @@ void PairLJSDKCoulMSMOMP::compute(int eflag, int vflag) const int inum = list->inum; #if defined(_OPENMP) -#pragma omp parallel default(none) shared(eflag,vflag) +#pragma omp parallel LMP_DEFAULT_NONE LMP_SHARED(eflag,vflag) #endif { int ifrom, ito, tid; diff --git a/src/USER-OMP/pair_lj_sdk_omp.cpp b/src/USER-OMP/pair_lj_sdk_omp.cpp index 9ba90a29370f9155f294f28ea56c915292ecc9e8..9f0671c61c29b02f4c2807c5a85cd205afd5a8c4 100644 --- a/src/USER-OMP/pair_lj_sdk_omp.cpp +++ b/src/USER-OMP/pair_lj_sdk_omp.cpp @@ -13,6 +13,7 @@ This style is a simplified re-implementation of the CG/CMM pair style ------------------------------------------------------------------------- */ +#include "omp_compat.h" #include #include "pair_lj_sdk_omp.h" #include "atom.h" @@ -47,7 +48,7 @@ void PairLJSDKOMP::compute(int eflag, int vflag) const int inum = list->inum; #if defined(_OPENMP) -#pragma omp parallel default(none) shared(eflag,vflag) +#pragma omp parallel LMP_DEFAULT_NONE LMP_SHARED(eflag,vflag) #endif { int ifrom, ito, tid; diff --git a/src/USER-OMP/pair_lj_sf_dipole_sf_omp.cpp b/src/USER-OMP/pair_lj_sf_dipole_sf_omp.cpp index ca08f817dce4d8e28a788ee82ad866156b8cb969..1adaf939531c8cb95ef5f6b6ec1b8b44225ca319 100644 --- a/src/USER-OMP/pair_lj_sf_dipole_sf_omp.cpp +++ b/src/USER-OMP/pair_lj_sf_dipole_sf_omp.cpp @@ -12,6 +12,7 @@ Contributing author: Axel Kohlmeyer (Temple U) ------------------------------------------------------------------------- */ +#include "omp_compat.h" #include #include "pair_lj_sf_dipole_sf_omp.h" #include "atom.h" @@ -43,7 +44,7 @@ void PairLJSFDipoleSFOMP::compute(int eflag, int vflag) const int inum = list->inum; #if defined(_OPENMP) -#pragma omp parallel default(none) shared(eflag,vflag) +#pragma omp parallel LMP_DEFAULT_NONE LMP_SHARED(eflag,vflag) #endif { int ifrom, ito, tid; diff --git a/src/USER-OMP/pair_lj_smooth_linear_omp.cpp b/src/USER-OMP/pair_lj_smooth_linear_omp.cpp index 0b29a8fc303714b59544ad9415a42269ce8a893b..497c2c3a4365b06d84aea4b1cb648b6c68f9f913 100644 --- a/src/USER-OMP/pair_lj_smooth_linear_omp.cpp +++ b/src/USER-OMP/pair_lj_smooth_linear_omp.cpp @@ -12,6 +12,7 @@ Contributing author: Axel Kohlmeyer (Temple U) ------------------------------------------------------------------------- */ +#include "omp_compat.h" #include #include "pair_lj_smooth_linear_omp.h" #include "atom.h" @@ -43,7 +44,7 @@ void PairLJSmoothLinearOMP::compute(int eflag, int vflag) const int inum = list->inum; #if defined(_OPENMP) -#pragma omp parallel default(none) shared(eflag,vflag) +#pragma omp parallel LMP_DEFAULT_NONE LMP_SHARED(eflag,vflag) #endif { int ifrom, ito, tid; diff --git a/src/USER-OMP/pair_lj_smooth_omp.cpp b/src/USER-OMP/pair_lj_smooth_omp.cpp index fe3d64cbf6b4e35a69e155fe471ec666ae9ba0db..bdb9b3141e0940336bf1dde727d3efd8fb23e02f 100644 --- a/src/USER-OMP/pair_lj_smooth_omp.cpp +++ b/src/USER-OMP/pair_lj_smooth_omp.cpp @@ -12,6 +12,7 @@ Contributing author: Axel Kohlmeyer (Temple U) ------------------------------------------------------------------------- */ +#include "omp_compat.h" #include #include "pair_lj_smooth_omp.h" #include "atom.h" @@ -43,7 +44,7 @@ void PairLJSmoothOMP::compute(int eflag, int vflag) const int inum = list->inum; #if defined(_OPENMP) -#pragma omp parallel default(none) shared(eflag,vflag) +#pragma omp parallel LMP_DEFAULT_NONE LMP_SHARED(eflag,vflag) #endif { int ifrom, ito, tid; diff --git a/src/USER-OMP/pair_lubricate_omp.cpp b/src/USER-OMP/pair_lubricate_omp.cpp index dc6be0b96a055aec2c9a70b356083bbff3f8c8fb..9db42395870645edf1e6fa836e0337ac69fc70b1 100644 --- a/src/USER-OMP/pair_lubricate_omp.cpp +++ b/src/USER-OMP/pair_lubricate_omp.cpp @@ -12,6 +12,7 @@ Contributing author: Axel Kohlmeyer (Temple U) ------------------------------------------------------------------------- */ +#include "omp_compat.h" #include #include "pair_lubricate_omp.h" #include "atom.h" @@ -109,7 +110,7 @@ void PairLubricateOMP::compute(int eflag, int vflag) #if defined(_OPENMP) -#pragma omp parallel default(none) shared(eflag,vflag) +#pragma omp parallel LMP_DEFAULT_NONE LMP_SHARED(eflag,vflag) #endif { int ifrom, ito, tid; diff --git a/src/USER-OMP/pair_lubricate_poly_omp.cpp b/src/USER-OMP/pair_lubricate_poly_omp.cpp index 648b10b11400f224141d128db5e78b855e691cfc..dc143a316027c45fe299419a1aa887b99e319415 100644 --- a/src/USER-OMP/pair_lubricate_poly_omp.cpp +++ b/src/USER-OMP/pair_lubricate_poly_omp.cpp @@ -12,6 +12,7 @@ Contributing author: Axel Kohlmeyer (Temple U) ------------------------------------------------------------------------- */ +#include "omp_compat.h" #include "pair_lubricate_poly_omp.h" #include #include "atom.h" @@ -106,7 +107,7 @@ void PairLubricatePolyOMP::compute(int eflag, int vflag) #if defined(_OPENMP) -#pragma omp parallel default(none) shared(eflag,vflag) +#pragma omp parallel LMP_DEFAULT_NONE LMP_SHARED(eflag,vflag) #endif { int ifrom, ito, tid; diff --git a/src/USER-OMP/pair_meam_spline_omp.cpp b/src/USER-OMP/pair_meam_spline_omp.cpp index f4aff698815d59355116e319f6499a29be9815d5..19fb09dd7b5ea992921ccde3f410be3783404a63 100644 --- a/src/USER-OMP/pair_meam_spline_omp.cpp +++ b/src/USER-OMP/pair_meam_spline_omp.cpp @@ -12,6 +12,7 @@ Contributing author: Axel Kohlmeyer (Temple U) ------------------------------------------------------------------------- */ +#include "omp_compat.h" #include #include @@ -57,7 +58,7 @@ void PairMEAMSplineOMP::compute(int eflag, int vflag) } #if defined(_OPENMP) -#pragma omp parallel default(none) shared(eflag,vflag) +#pragma omp parallel LMP_DEFAULT_NONE LMP_SHARED(eflag,vflag) #endif { int ifrom, ito, tid; diff --git a/src/USER-OMP/pair_morse_omp.cpp b/src/USER-OMP/pair_morse_omp.cpp index c77196d1c5eb8528ee3aa3ec60d445250e08af0d..1f566dbd42acd20af4bcb1d628150c1ef8c4408a 100644 --- a/src/USER-OMP/pair_morse_omp.cpp +++ b/src/USER-OMP/pair_morse_omp.cpp @@ -12,6 +12,7 @@ Contributing author: Axel Kohlmeyer (Temple U) ------------------------------------------------------------------------- */ +#include "omp_compat.h" #include #include "pair_morse_omp.h" #include "atom.h" @@ -43,7 +44,7 @@ void PairMorseOMP::compute(int eflag, int vflag) const int inum = list->inum; #if defined(_OPENMP) -#pragma omp parallel default(none) shared(eflag,vflag) +#pragma omp parallel LMP_DEFAULT_NONE LMP_SHARED(eflag,vflag) #endif { int ifrom, ito, tid; diff --git a/src/USER-OMP/pair_morse_smooth_linear_omp.cpp b/src/USER-OMP/pair_morse_smooth_linear_omp.cpp index e30a774bf25133d8c61dbe1fdfb694f1159f3972..ac73344c67e0000c62fe5279db9727e112d76053 100644 --- a/src/USER-OMP/pair_morse_smooth_linear_omp.cpp +++ b/src/USER-OMP/pair_morse_smooth_linear_omp.cpp @@ -13,6 +13,7 @@ Most code borrowed from pair_morse_omp.cpp ------------------------------------------------------------------------- */ +#include "omp_compat.h" #include #include "pair_morse_smooth_linear_omp.h" #include "atom.h" @@ -47,7 +48,7 @@ void PairMorseSmoothLinearOMP::compute(int eflag, int vflag) const int inum = list->inum; #if defined(_OPENMP) -#pragma omp parallel default(none) shared(eflag,vflag) +#pragma omp parallel LMP_DEFAULT_NONE LMP_SHARED(eflag,vflag) #endif { int ifrom, ito, tid; diff --git a/src/USER-OMP/pair_nm_cut_coul_cut_omp.cpp b/src/USER-OMP/pair_nm_cut_coul_cut_omp.cpp index 7ffd189a5b294d5a10f13e9c5b5264b351f86fb9..4326434450b091148521e150252df0215ebacb65 100644 --- a/src/USER-OMP/pair_nm_cut_coul_cut_omp.cpp +++ b/src/USER-OMP/pair_nm_cut_coul_cut_omp.cpp @@ -12,6 +12,7 @@ Contributing author: Axel Kohlmeyer (Temple U) ------------------------------------------------------------------------- */ +#include "omp_compat.h" #include #include "pair_nm_cut_coul_cut_omp.h" #include "atom.h" @@ -43,7 +44,7 @@ void PairNMCutCoulCutOMP::compute(int eflag, int vflag) const int inum = list->inum; #if defined(_OPENMP) -#pragma omp parallel default(none) shared(eflag,vflag) +#pragma omp parallel LMP_DEFAULT_NONE LMP_SHARED(eflag,vflag) #endif { int ifrom, ito, tid; diff --git a/src/USER-OMP/pair_nm_cut_coul_long_omp.cpp b/src/USER-OMP/pair_nm_cut_coul_long_omp.cpp index 0a0a861b6f16a99263248f3da290a3ac17066122..970b383f7e7de84272fcdb14e55c64af367c02d9 100644 --- a/src/USER-OMP/pair_nm_cut_coul_long_omp.cpp +++ b/src/USER-OMP/pair_nm_cut_coul_long_omp.cpp @@ -12,6 +12,7 @@ Contributing author: Axel Kohlmeyer (Temple U) ------------------------------------------------------------------------- */ +#include "omp_compat.h" #include #include "pair_nm_cut_coul_long_omp.h" #include "atom.h" @@ -51,7 +52,7 @@ void PairNMCutCoulLongOMP::compute(int eflag, int vflag) const int inum = list->inum; #if defined(_OPENMP) -#pragma omp parallel default(none) shared(eflag,vflag) +#pragma omp parallel LMP_DEFAULT_NONE LMP_SHARED(eflag,vflag) #endif { int ifrom, ito, tid; diff --git a/src/USER-OMP/pair_nm_cut_omp.cpp b/src/USER-OMP/pair_nm_cut_omp.cpp index cb74eed3f136b18d8270057726d589ef8a5c0935..ef68071b68d4e324946c8928b235ecd9a24443c9 100644 --- a/src/USER-OMP/pair_nm_cut_omp.cpp +++ b/src/USER-OMP/pair_nm_cut_omp.cpp @@ -12,6 +12,7 @@ Contributing author: Axel Kohlmeyer (Temple U) ------------------------------------------------------------------------- */ +#include "omp_compat.h" #include #include "pair_nm_cut_omp.h" #include "atom.h" @@ -43,7 +44,7 @@ void PairNMCutOMP::compute(int eflag, int vflag) const int inum = list->inum; #if defined(_OPENMP) -#pragma omp parallel default(none) shared(eflag,vflag) +#pragma omp parallel LMP_DEFAULT_NONE LMP_SHARED(eflag,vflag) #endif { int ifrom, ito, tid; diff --git a/src/USER-OMP/pair_peri_lps_omp.cpp b/src/USER-OMP/pair_peri_lps_omp.cpp index 3ea41321a7afa264f64b297516bb1d87bae5b237..cf29b5cab85994a35270d7522dc75ff2addaae83 100644 --- a/src/USER-OMP/pair_peri_lps_omp.cpp +++ b/src/USER-OMP/pair_peri_lps_omp.cpp @@ -12,6 +12,7 @@ Contributing author: Axel Kohlmeyer (Temple U) ------------------------------------------------------------------------- */ +#include "omp_compat.h" #include #include #include "pair_peri_lps_omp.h" @@ -62,7 +63,7 @@ void PairPeriLPSOMP::compute(int eflag, int vflag) } #if defined(_OPENMP) -#pragma omp parallel default(none) shared(eflag,vflag) +#pragma omp parallel LMP_DEFAULT_NONE LMP_SHARED(eflag,vflag) #endif { int ifrom, ito, tid; diff --git a/src/USER-OMP/pair_peri_pmb_omp.cpp b/src/USER-OMP/pair_peri_pmb_omp.cpp index 95e50df50d5fa7fdc7f4ff5479f7efa1e94065a5..1990b46fe59407cf8c411375d2e489584268e053 100644 --- a/src/USER-OMP/pair_peri_pmb_omp.cpp +++ b/src/USER-OMP/pair_peri_pmb_omp.cpp @@ -12,6 +12,7 @@ Contributing author: Axel Kohlmeyer (Temple U) ------------------------------------------------------------------------- */ +#include "omp_compat.h" #include #include #include "pair_peri_pmb_omp.h" @@ -58,7 +59,7 @@ void PairPeriPMBOMP::compute(int eflag, int vflag) } #if defined(_OPENMP) -#pragma omp parallel default(none) shared(eflag,vflag) +#pragma omp parallel LMP_DEFAULT_NONE LMP_SHARED(eflag,vflag) #endif { int ifrom, ito, tid; diff --git a/src/USER-OMP/pair_reaxc_omp.cpp b/src/USER-OMP/pair_reaxc_omp.cpp index 8743fb8e4aa77a489cff9c282a6474a37b409d2e..73b1373fad4a8c580e9bbb1f132a7fdaa22a43c7 100644 --- a/src/USER-OMP/pair_reaxc_omp.cpp +++ b/src/USER-OMP/pair_reaxc_omp.cpp @@ -508,7 +508,7 @@ int PairReaxCOMP::estimate_reax_lists() num_nbrs += numneigh[i]; } - int new_estimate = MAX (num_nbrs, mincap*MIN_NBRS); + int new_estimate = MAX(num_nbrs, mincap*REAX_MIN_NBRS); return new_estimate; } diff --git a/src/USER-OMP/pair_resquared_omp.cpp b/src/USER-OMP/pair_resquared_omp.cpp index 65f1c7289f2432c19fc9541e7900df10889276f1..557d212531b77e24907a772c3e8db586543641a4 100644 --- a/src/USER-OMP/pair_resquared_omp.cpp +++ b/src/USER-OMP/pair_resquared_omp.cpp @@ -12,6 +12,7 @@ Contributing author: Axel Kohlmeyer (Temple U) ------------------------------------------------------------------------- */ +#include "omp_compat.h" #include #include "pair_resquared_omp.h" #include "math_extra.h" @@ -45,7 +46,7 @@ void PairRESquaredOMP::compute(int eflag, int vflag) const int inum = list->inum; #if defined(_OPENMP) -#pragma omp parallel default(none) shared(eflag,vflag) +#pragma omp parallel LMP_DEFAULT_NONE LMP_SHARED(eflag,vflag) #endif { int ifrom, ito, tid; diff --git a/src/USER-OMP/pair_soft_omp.cpp b/src/USER-OMP/pair_soft_omp.cpp index 7de94a2cd1deabf13381d5eff0c4f34936dc7e3c..85425974cccdaacf66dcbed7377ea98b3076edce 100644 --- a/src/USER-OMP/pair_soft_omp.cpp +++ b/src/USER-OMP/pair_soft_omp.cpp @@ -12,6 +12,7 @@ Contributing author: Axel Kohlmeyer (Temple U) ------------------------------------------------------------------------- */ +#include "omp_compat.h" #include #include "pair_soft_omp.h" #include "atom.h" @@ -47,7 +48,7 @@ void PairSoftOMP::compute(int eflag, int vflag) const int inum = list->inum; #if defined(_OPENMP) -#pragma omp parallel default(none) shared(eflag,vflag) +#pragma omp parallel LMP_DEFAULT_NONE LMP_SHARED(eflag,vflag) #endif { int ifrom, ito, tid; diff --git a/src/USER-OMP/pair_sw_omp.cpp b/src/USER-OMP/pair_sw_omp.cpp index 9812cf06ba287ccaa900b86270bc3abb14472992..ebe501ff8e359eb3b8ff10fb9d2786a5f269c189 100644 --- a/src/USER-OMP/pair_sw_omp.cpp +++ b/src/USER-OMP/pair_sw_omp.cpp @@ -12,6 +12,7 @@ Contributing author: Axel Kohlmeyer (Temple U) ------------------------------------------------------------------------- */ +#include "omp_compat.h" #include #include "pair_sw_omp.h" #include "atom.h" @@ -44,7 +45,7 @@ void PairSWOMP::compute(int eflag, int vflag) const int inum = list->inum; #if defined(_OPENMP) -#pragma omp parallel default(none) shared(eflag,vflag) +#pragma omp parallel LMP_DEFAULT_NONE LMP_SHARED(eflag,vflag) #endif { int ifrom, ito, tid; diff --git a/src/USER-OMP/pair_table_omp.cpp b/src/USER-OMP/pair_table_omp.cpp index bf18d53d2eaf823a14601711881204be9f55e0bb..2546bfdc9a6ea9446b8442fd3c76831c03355c57 100644 --- a/src/USER-OMP/pair_table_omp.cpp +++ b/src/USER-OMP/pair_table_omp.cpp @@ -12,6 +12,7 @@ Contributing author: Axel Kohlmeyer (Temple U) ------------------------------------------------------------------------- */ +#include "omp_compat.h" #include #include "pair_table_omp.h" #include "atom.h" @@ -44,7 +45,7 @@ void PairTableOMP::compute(int eflag, int vflag) const int inum = list->inum; #if defined(_OPENMP) -#pragma omp parallel default(none) shared(eflag,vflag) +#pragma omp parallel LMP_DEFAULT_NONE LMP_SHARED(eflag,vflag) #endif { int ifrom, ito, tid; diff --git a/src/USER-OMP/pair_tersoff_mod_c_omp.cpp b/src/USER-OMP/pair_tersoff_mod_c_omp.cpp index 6b6b130c65bd64bebaf8b00bfec46fb5982c2a09..5e1e6b1b0e973482db8c994294be5536422fa391 100644 --- a/src/USER-OMP/pair_tersoff_mod_c_omp.cpp +++ b/src/USER-OMP/pair_tersoff_mod_c_omp.cpp @@ -12,6 +12,7 @@ Contributing author: Axel Kohlmeyer (Temple U) ------------------------------------------------------------------------- */ +#include "omp_compat.h" #include #include "pair_tersoff_mod_c_omp.h" #include "atom.h" @@ -43,7 +44,7 @@ void PairTersoffMODCOMP::compute(int eflag, int vflag) const int inum = list->inum; #if defined(_OPENMP) -#pragma omp parallel default(none) shared(eflag,vflag) +#pragma omp parallel LMP_DEFAULT_NONE LMP_SHARED(eflag,vflag) #endif { int ifrom, ito, tid; diff --git a/src/USER-OMP/pair_tersoff_mod_omp.cpp b/src/USER-OMP/pair_tersoff_mod_omp.cpp index 634676ee4987554a5f2996a119a24c8c8e149bf1..aa90b883751c575bebffc0ab4338ebc8895a4def 100644 --- a/src/USER-OMP/pair_tersoff_mod_omp.cpp +++ b/src/USER-OMP/pair_tersoff_mod_omp.cpp @@ -12,6 +12,7 @@ Contributing author: Axel Kohlmeyer (Temple U) ------------------------------------------------------------------------- */ +#include "omp_compat.h" #include #include "pair_tersoff_mod_omp.h" #include "atom.h" @@ -43,7 +44,7 @@ void PairTersoffMODOMP::compute(int eflag, int vflag) const int inum = list->inum; #if defined(_OPENMP) -#pragma omp parallel default(none) shared(eflag,vflag) +#pragma omp parallel LMP_DEFAULT_NONE LMP_SHARED(eflag,vflag) #endif { int ifrom, ito, tid; diff --git a/src/USER-OMP/pair_tersoff_omp.cpp b/src/USER-OMP/pair_tersoff_omp.cpp index 9735ccaa1ff7e97e975525022aaa2a117c8392e6..34dbfb73b6d92176d2ed8edc5fba572a99d73983 100644 --- a/src/USER-OMP/pair_tersoff_omp.cpp +++ b/src/USER-OMP/pair_tersoff_omp.cpp @@ -12,6 +12,7 @@ Contributing author: Axel Kohlmeyer (Temple U) ------------------------------------------------------------------------- */ +#include "omp_compat.h" #include #include "pair_tersoff_omp.h" #include "atom.h" @@ -44,7 +45,7 @@ void PairTersoffOMP::compute(int eflag, int vflag) const int inum = list->inum; #if defined(_OPENMP) -#pragma omp parallel default(none) shared(eflag,vflag) +#pragma omp parallel LMP_DEFAULT_NONE LMP_SHARED(eflag,vflag) #endif { int ifrom, ito, tid; diff --git a/src/USER-OMP/pair_tersoff_table_omp.cpp b/src/USER-OMP/pair_tersoff_table_omp.cpp index fa9512bf717569a62dbe82446f69a7d227aaa134..a0a7f4c810e0e7ee6d5cc35efbd028b9d45302a5 100644 --- a/src/USER-OMP/pair_tersoff_table_omp.cpp +++ b/src/USER-OMP/pair_tersoff_table_omp.cpp @@ -12,6 +12,7 @@ Contributing author: Axel Kohlmeyer (Temple U) ------------------------------------------------------------------------- */ +#include "omp_compat.h" #include #include "pair_tersoff_table_omp.h" #include "atom.h" @@ -68,7 +69,7 @@ void PairTersoffTableOMP::compute(int eflag, int vflag) const int inum = list->inum; #if defined(_OPENMP) -#pragma omp parallel default(none) shared(eflag,vflag) +#pragma omp parallel LMP_DEFAULT_NONE LMP_SHARED(eflag,vflag) #endif { int ifrom, ito, tid; diff --git a/src/USER-OMP/pair_tersoff_zbl_omp.cpp b/src/USER-OMP/pair_tersoff_zbl_omp.cpp index 096a42b1a8da87ac396e8ceb991af1dd858af07f..0e9bc5c24abc85f62d49c248225b01bbdff8f1c2 100644 --- a/src/USER-OMP/pair_tersoff_zbl_omp.cpp +++ b/src/USER-OMP/pair_tersoff_zbl_omp.cpp @@ -30,6 +30,7 @@ #include "comm.h" #include "memory.h" #include "error.h" +#include "utils.h" #include "math_const.h" #include "math_special.h" @@ -88,7 +89,7 @@ void PairTersoffZBLOMP::read_file(char *file) memory->sfree(params); params = NULL; - nparams = 0; + nparams = maxparam = 0; // open file on proc 0 @@ -125,7 +126,7 @@ void PairTersoffZBLOMP::read_file(char *file) // strip comment, skip line if blank if ((ptr = strchr(line,'#'))) *ptr = '\0'; - nwords = atom->count_words(line); + nwords = utils::count_words(line); if (nwords == 0) continue; // concatenate additional lines until have params_per_line words @@ -144,7 +145,7 @@ void PairTersoffZBLOMP::read_file(char *file) MPI_Bcast(&n,1,MPI_INT,0,world); MPI_Bcast(line,n,MPI_CHAR,0,world); if ((ptr = strchr(line,'#'))) *ptr = '\0'; - nwords = atom->count_words(line); + nwords = utils::count_words(line); } if (nwords != params_per_line) @@ -204,8 +205,7 @@ void PairTersoffZBLOMP::read_file(char *file) params[nparams].powermint = int(params[nparams].powerm); - if ( - params[nparams].c < 0.0 || + if (params[nparams].c < 0.0 || params[nparams].d < 0.0 || params[nparams].powern < 0.0 || params[nparams].beta < 0.0 || @@ -214,6 +214,7 @@ void PairTersoffZBLOMP::read_file(char *file) params[nparams].bigr < 0.0 || params[nparams].bigd < 0.0 || params[nparams].bigd > params[nparams].bigr || + params[nparams].lam1 < 0.0 || params[nparams].biga < 0.0 || params[nparams].powerm - params[nparams].powermint != 0.0 || (params[nparams].powermint != 3 && @@ -287,8 +288,8 @@ void PairTersoffZBLOMP::repulsive(Param *param, double rsq, double &fforce, 0.9423*0.5099*exp(-0.9423*r_ov_a) - 0.4029*0.2802*exp(-0.4029*r_ov_a) - 0.2016*0.02817*exp(-0.2016*r_ov_a)); - double fforce_ZBL = premult*-rsq* phi + premult/r*dphi; - double eng_ZBL = premult/r*phi; + double fforce_ZBL = premult*-phi/rsq + premult*dphi/r; + double eng_ZBL = premult*(1.0/r)*phi; // combine two parts with smoothing by Fermi-like function diff --git a/src/USER-OMP/pair_tip4p_cut_omp.cpp b/src/USER-OMP/pair_tip4p_cut_omp.cpp index c8584b4fe3cb6382e64b05ef9ffe1afd631b75c9..5b983d3db5df1a74f53b8e1ccf330e17f5ce27ff 100644 --- a/src/USER-OMP/pair_tip4p_cut_omp.cpp +++ b/src/USER-OMP/pair_tip4p_cut_omp.cpp @@ -12,6 +12,7 @@ Contributing author: Axel Kohlmeyer (Temple U) ------------------------------------------------------------------------- */ +#include "omp_compat.h" #include #include "pair_tip4p_cut_omp.h" #include "atom.h" @@ -92,7 +93,7 @@ void PairTIP4PCutOMP::compute(int eflag, int vflag) const int inum = list->inum; #if defined(_OPENMP) -#pragma omp parallel default(none) shared(eflag,vflag) +#pragma omp parallel LMP_DEFAULT_NONE LMP_SHARED(eflag,vflag) #endif { int ifrom, ito, tid; diff --git a/src/USER-OMP/pair_tip4p_long_omp.cpp b/src/USER-OMP/pair_tip4p_long_omp.cpp index 89c3c17684a590f34ead6ae0bd4dc055bc0d809f..86bebdbeffb82986a25a2d2c6e3aeb2f72397b6d 100644 --- a/src/USER-OMP/pair_tip4p_long_omp.cpp +++ b/src/USER-OMP/pair_tip4p_long_omp.cpp @@ -12,6 +12,7 @@ Contributing author: Axel Kohlmeyer (Temple U) ------------------------------------------------------------------------- */ +#include "omp_compat.h" #include #include "pair_tip4p_long_omp.h" #include "atom.h" @@ -93,7 +94,7 @@ void PairTIP4PLongOMP::compute(int eflag, int vflag) const int inum = list->inum; #if defined(_OPENMP) -#pragma omp parallel default(none) shared(eflag,vflag) +#pragma omp parallel LMP_DEFAULT_NONE LMP_SHARED(eflag,vflag) #endif { int ifrom, ito, tid; diff --git a/src/USER-OMP/pair_tip4p_long_soft_omp.cpp b/src/USER-OMP/pair_tip4p_long_soft_omp.cpp index 88da3d02a88dd030ae72e7cbb621962152a3da5e..26e0420955ef7736bad51289847628086108787e 100644 --- a/src/USER-OMP/pair_tip4p_long_soft_omp.cpp +++ b/src/USER-OMP/pair_tip4p_long_soft_omp.cpp @@ -12,6 +12,7 @@ Contributing author: Axel Kohlmeyer (Temple U) ------------------------------------------------------------------------- */ +#include "omp_compat.h" #include #include "pair_tip4p_long_soft_omp.h" #include "atom.h" @@ -93,7 +94,7 @@ void PairTIP4PLongSoftOMP::compute(int eflag, int vflag) const int inum = list->inum; #if defined(_OPENMP) -#pragma omp parallel default(none) shared(eflag,vflag) +#pragma omp parallel LMP_DEFAULT_NONE LMP_SHARED(eflag,vflag) #endif { int ifrom, ito, tid; diff --git a/src/USER-OMP/pair_ufm_omp.cpp b/src/USER-OMP/pair_ufm_omp.cpp index 23e76186c08f3fca4383a7c4564baddb0f0bebd1..605d6dd2c6c6f81e4d82751a6f2b36128ee0396a 100644 --- a/src/USER-OMP/pair_ufm_omp.cpp +++ b/src/USER-OMP/pair_ufm_omp.cpp @@ -14,6 +14,7 @@ Maurice de Koning (Unicamp/Brazil) - dekoning@ifi.unicamp.br ------------------------------------------------------------------------- */ +#include "omp_compat.h" #include #include "pair_ufm_omp.h" #include "atom.h" @@ -45,7 +46,7 @@ void PairUFMOMP::compute(int eflag, int vflag) const int inum = list->inum; #if defined(_OPENMP) -#pragma omp parallel default(none) shared(eflag,vflag) +#pragma omp parallel LMP_DEFAULT_NONE LMP_SHARED(eflag,vflag) #endif { int ifrom, ito, tid; diff --git a/src/USER-OMP/pair_vashishta_omp.cpp b/src/USER-OMP/pair_vashishta_omp.cpp index a218ddf3edb7850893b2f6b7b4115fe3974cc76d..425a06c296d0aa8bec1c65bc4be061349d0c89d6 100644 --- a/src/USER-OMP/pair_vashishta_omp.cpp +++ b/src/USER-OMP/pair_vashishta_omp.cpp @@ -12,6 +12,7 @@ Contributing author: Axel Kohlmeyer (Temple U) ------------------------------------------------------------------------- */ +#include "omp_compat.h" #include #include "pair_vashishta_omp.h" #include "atom.h" @@ -44,7 +45,7 @@ void PairVashishtaOMP::compute(int eflag, int vflag) const int inum = list->inum; #if defined(_OPENMP) -#pragma omp parallel default(none) shared(eflag,vflag) +#pragma omp parallel LMP_DEFAULT_NONE LMP_SHARED(eflag,vflag) #endif { int ifrom, ito, tid; diff --git a/src/USER-OMP/pair_vashishta_table_omp.cpp b/src/USER-OMP/pair_vashishta_table_omp.cpp index 0986128bf6916ed4df5d72ee9553c1b54deb78de..36c86a89953cd6f7adb97c14853c9602db949ea3 100644 --- a/src/USER-OMP/pair_vashishta_table_omp.cpp +++ b/src/USER-OMP/pair_vashishta_table_omp.cpp @@ -12,6 +12,7 @@ Contributing author: Axel Kohlmeyer (Temple U) ------------------------------------------------------------------------- */ +#include "omp_compat.h" #include #include "pair_vashishta_table_omp.h" #include "atom.h" @@ -44,7 +45,7 @@ void PairVashishtaTableOMP::compute(int eflag, int vflag) const int inum = list->inum; #if defined(_OPENMP) -#pragma omp parallel default(none) shared(eflag,vflag) +#pragma omp parallel LMP_DEFAULT_NONE LMP_SHARED(eflag,vflag) #endif { int ifrom, ito, tid; diff --git a/src/USER-OMP/pair_yukawa_colloid_omp.cpp b/src/USER-OMP/pair_yukawa_colloid_omp.cpp index 9b8428c64843725b4b85ec139557921ff40d071d..e6ac3fa9fbe5f77ba1b1cca37a6d6071a14f7dd3 100644 --- a/src/USER-OMP/pair_yukawa_colloid_omp.cpp +++ b/src/USER-OMP/pair_yukawa_colloid_omp.cpp @@ -12,6 +12,7 @@ Contributing author: Axel Kohlmeyer (Temple U) ------------------------------------------------------------------------- */ +#include "omp_compat.h" #include #include "pair_yukawa_colloid_omp.h" #include "atom.h" @@ -43,7 +44,7 @@ void PairYukawaColloidOMP::compute(int eflag, int vflag) const int inum = list->inum; #if defined(_OPENMP) -#pragma omp parallel default(none) shared(eflag,vflag) +#pragma omp parallel LMP_DEFAULT_NONE LMP_SHARED(eflag,vflag) #endif { int ifrom, ito, tid; diff --git a/src/USER-OMP/pair_yukawa_omp.cpp b/src/USER-OMP/pair_yukawa_omp.cpp index 20d557e60579a8ce0f5c04cd84853a9756635ebc..f222876cb528f35447dc4697aae9622436318460 100644 --- a/src/USER-OMP/pair_yukawa_omp.cpp +++ b/src/USER-OMP/pair_yukawa_omp.cpp @@ -12,6 +12,7 @@ Contributing author: Axel Kohlmeyer (Temple U) ------------------------------------------------------------------------- */ +#include "omp_compat.h" #include #include "pair_yukawa_omp.h" #include "atom.h" @@ -43,7 +44,7 @@ void PairYukawaOMP::compute(int eflag, int vflag) const int inum = list->inum; #if defined(_OPENMP) -#pragma omp parallel default(none) shared(eflag,vflag) +#pragma omp parallel LMP_DEFAULT_NONE LMP_SHARED(eflag,vflag) #endif { int ifrom, ito, tid; diff --git a/src/USER-OMP/pair_zbl_omp.cpp b/src/USER-OMP/pair_zbl_omp.cpp index 3a300ce477837cec62315f6823b68594fab4bfd6..284ebbf09c6f9c04f760e8d13d807a2ddeca8ff8 100644 --- a/src/USER-OMP/pair_zbl_omp.cpp +++ b/src/USER-OMP/pair_zbl_omp.cpp @@ -12,6 +12,7 @@ Contributing author: Axel Kohlmeyer (Temple U) ------------------------------------------------------------------------- */ +#include "omp_compat.h" #include #include "pair_zbl_omp.h" #include "atom.h" @@ -44,7 +45,7 @@ void PairZBLOMP::compute(int eflag, int vflag) const int inum = list->inum; #if defined(_OPENMP) -#pragma omp parallel default(none) shared(eflag,vflag) +#pragma omp parallel LMP_DEFAULT_NONE LMP_SHARED(eflag,vflag) #endif { int ifrom, ito, tid; diff --git a/src/USER-OMP/pppm_cg_omp.cpp b/src/USER-OMP/pppm_cg_omp.cpp index f9967bf52a6fc24887a481ea328bd95dba6a87bd..31098d2675c6a6ac79886f6e3f2952de85a8979f 100644 --- a/src/USER-OMP/pppm_cg_omp.cpp +++ b/src/USER-OMP/pppm_cg_omp.cpp @@ -15,6 +15,7 @@ Contributing author: Axel Kohlmeyer (Temple U) ------------------------------------------------------------------------- */ +#include "omp_compat.h" #include "pppm_cg_omp.h" #include #include @@ -59,7 +60,7 @@ PPPMCGOMP::PPPMCGOMP(LAMMPS *lmp) : PPPMCG(lmp), ThrOMP(lmp, THR_KSPACE) PPPMCGOMP::~PPPMCGOMP() { #if defined(_OPENMP) -#pragma omp parallel default(none) +#pragma omp parallel LMP_DEFAULT_NONE #endif { #if defined(_OPENMP) @@ -81,7 +82,7 @@ void PPPMCGOMP::allocate() PPPMCG::allocate(); #if defined(_OPENMP) -#pragma omp parallel default(none) +#pragma omp parallel LMP_DEFAULT_NONE #endif { #if defined(_OPENMP) @@ -122,7 +123,7 @@ void PPPMCGOMP::compute_gf_ik() const int twoorder = 2*order; #if defined(_OPENMP) -#pragma omp parallel default(none) +#pragma omp parallel LMP_DEFAULT_NONE #endif { double snx,sny,snz; @@ -216,7 +217,7 @@ void PPPMCGOMP::compute_gf_ad() double sf0=0.0,sf1=0.0,sf2=0.0,sf3=0.0,sf4=0.0,sf5=0.0; #if defined(_OPENMP) -#pragma omp parallel default(none) reduction(+:sf0,sf1,sf2,sf3,sf4,sf5) +#pragma omp parallel LMP_DEFAULT_NONE reduction(+:sf0,sf1,sf2,sf3,sf4,sf5) #endif { double snx,sny,snz,sqk; @@ -314,7 +315,7 @@ void PPPMCGOMP::compute(int eflag, int vflag) PPPMCG::compute(eflag,vflag); #if defined(_OPENMP) -#pragma omp parallel default(none) shared(eflag,vflag) +#pragma omp parallel LMP_DEFAULT_NONE LMP_SHARED(eflag,vflag) #endif { #if defined(_OPENMP) @@ -351,7 +352,7 @@ void PPPMCGOMP::make_rho() const int iy = nyhi_out - nylo_out + 1; #if defined(_OPENMP) -#pragma omp parallel default(none) +#pragma omp parallel LMP_DEFAULT_NONE #endif { const double * _noalias const q = atom->q; @@ -443,7 +444,7 @@ void PPPMCGOMP::fieldforce_ik() const int nthreads = comm->nthreads; #if defined(_OPENMP) -#pragma omp parallel default(none) +#pragma omp parallel LMP_DEFAULT_NONE #endif { FFT_SCALAR dx,dy,dz,x0,y0,z0,ekx,eky,ekz; @@ -524,7 +525,7 @@ void PPPMCGOMP::fieldforce_ad() const int nthreads = comm->nthreads; #if defined(_OPENMP) -#pragma omp parallel default(none) +#pragma omp parallel LMP_DEFAULT_NONE #endif { int i,ifrom,ito,tid,l,m,n,nx,ny,nz,mx,my,mz; @@ -617,7 +618,7 @@ void PPPMCGOMP::fieldforce_peratom() const int nthreads = comm->nthreads; #if defined(_OPENMP) -#pragma omp parallel default(none) +#pragma omp parallel LMP_DEFAULT_NONE #endif { FFT_SCALAR dx,dy,dz,x0,y0,z0; diff --git a/src/USER-OMP/pppm_disp_omp.cpp b/src/USER-OMP/pppm_disp_omp.cpp index 6b2c180a3fe8fabd56a7088b6805bfb6208fb5c6..aad77cffc72ff014cfe7fd40545f8a543a033303 100644 --- a/src/USER-OMP/pppm_disp_omp.cpp +++ b/src/USER-OMP/pppm_disp_omp.cpp @@ -16,6 +16,7 @@ Rolf Isele-Holder (RWTH Aachen University) ------------------------------------------------------------------------- */ +#include "omp_compat.h" #include "pppm_disp_omp.h" #include #include @@ -59,7 +60,7 @@ PPPMDispOMP::PPPMDispOMP(LAMMPS *lmp) : PPPMDisp(lmp), ThrOMP(lmp, THR_KSPACE) PPPMDispOMP::~PPPMDispOMP() { #if defined(_OPENMP) -#pragma omp parallel default(none) +#pragma omp parallel LMP_DEFAULT_NONE #endif { #if defined(_OPENMP) @@ -87,7 +88,7 @@ void PPPMDispOMP::allocate() PPPMDisp::allocate(); #if defined(_OPENMP) -#pragma omp parallel default(none) +#pragma omp parallel LMP_DEFAULT_NONE #endif { #if defined(_OPENMP) @@ -114,7 +115,7 @@ void PPPMDispOMP::allocate() void PPPMDispOMP::compute_gf() { #if defined(_OPENMP) -#pragma omp parallel default(none) +#pragma omp parallel LMP_DEFAULT_NONE #endif { @@ -204,7 +205,7 @@ void PPPMDispOMP::compute_gf() void PPPMDispOMP::compute_gf_6() { #if defined(_OPENMP) -#pragma omp parallel default(none) +#pragma omp parallel LMP_DEFAULT_NONE #endif { double *prd; @@ -311,7 +312,7 @@ void PPPMDispOMP::compute(int eflag, int vflag) PPPMDisp::compute(eflag,vflag); #if defined(_OPENMP) -#pragma omp parallel default(none) shared(eflag,vflag) +#pragma omp parallel LMP_DEFAULT_NONE LMP_SHARED(eflag,vflag) #endif { #if defined(_OPENMP) @@ -366,7 +367,7 @@ void PPPMDispOMP::particle_map(double dxinv, double dyinv, int flag = 0; #if defined(_OPENMP) -#pragma omp parallel for default(none) reduction(+:flag) schedule(static) +#pragma omp parallel for LMP_DEFAULT_NONE reduction(+:flag) schedule(static) #endif for (int i = 0; i < nlocal; i++) { @@ -419,7 +420,7 @@ void PPPMDispOMP::make_rho_c() const int iy = nyhi_out - nylo_out + 1; #if defined(_OPENMP) -#pragma omp parallel default(none) +#pragma omp parallel LMP_DEFAULT_NONE #endif { const double * _noalias const q = atom->q; @@ -509,7 +510,7 @@ void PPPMDispOMP::make_rho_g() const int iy = nyhi_out_6 - nylo_out_6 + 1; #if defined(_OPENMP) -#pragma omp parallel default(none) +#pragma omp parallel LMP_DEFAULT_NONE #endif { const dbl3_t * _noalias const x = (dbl3_t *) atom->x[0]; @@ -613,7 +614,7 @@ void PPPMDispOMP::make_rho_a() const int iy = nyhi_out_6 - nylo_out_6 + 1; #if defined(_OPENMP) -#pragma omp parallel default(none) +#pragma omp parallel LMP_DEFAULT_NONE #endif { const dbl3_t * _noalias const x = (dbl3_t *) atom->x[0]; @@ -723,7 +724,7 @@ void PPPMDispOMP::fieldforce_c_ik() #if defined(_OPENMP) const int nthreads = comm->nthreads; -#pragma omp parallel default(none) +#pragma omp parallel LMP_DEFAULT_NONE #endif { #if defined(_OPENMP) @@ -828,7 +829,7 @@ void PPPMDispOMP::fieldforce_c_ad() #if defined(_OPENMP) const int nthreads = comm->nthreads; -#pragma omp parallel default(none) +#pragma omp parallel LMP_DEFAULT_NONE #endif { #if defined(_OPENMP) @@ -935,7 +936,7 @@ void PPPMDispOMP::fieldforce_c_peratom() #if defined(_OPENMP) const int nthreads = comm->nthreads; -#pragma omp parallel default(none) +#pragma omp parallel LMP_DEFAULT_NONE #endif { #if defined(_OPENMP) @@ -1034,7 +1035,7 @@ void PPPMDispOMP::fieldforce_g_ik() #if defined(_OPENMP) const int nthreads = comm->nthreads; -#pragma omp parallel default(none) +#pragma omp parallel LMP_DEFAULT_NONE #endif { #if defined(_OPENMP) @@ -1138,7 +1139,7 @@ void PPPMDispOMP::fieldforce_g_ad() #if defined(_OPENMP) const int nthreads = comm->nthreads; -#pragma omp parallel default(none) +#pragma omp parallel LMP_DEFAULT_NONE #endif { #if defined(_OPENMP) @@ -1248,7 +1249,7 @@ void PPPMDispOMP::fieldforce_g_peratom() #if defined(_OPENMP) const int nthreads = comm->nthreads; -#pragma omp parallel default(none) +#pragma omp parallel LMP_DEFAULT_NONE #endif { #if defined(_OPENMP) @@ -1350,7 +1351,7 @@ void PPPMDispOMP::fieldforce_a_ik() #if defined(_OPENMP) const int nthreads = comm->nthreads; -#pragma omp parallel default(none) +#pragma omp parallel LMP_DEFAULT_NONE #endif { #if defined(_OPENMP) @@ -1486,7 +1487,7 @@ void PPPMDispOMP::fieldforce_a_ad() #if defined(_OPENMP) const int nthreads = comm->nthreads; -#pragma omp parallel default(none) +#pragma omp parallel LMP_DEFAULT_NONE #endif { #if defined(_OPENMP) @@ -1663,7 +1664,7 @@ void PPPMDispOMP::fieldforce_a_peratom() #if defined(_OPENMP) const int nthreads = comm->nthreads; -#pragma omp parallel default(none) +#pragma omp parallel LMP_DEFAULT_NONE #endif { #if defined(_OPENMP) diff --git a/src/USER-OMP/pppm_disp_tip4p_omp.cpp b/src/USER-OMP/pppm_disp_tip4p_omp.cpp index ec294cd56d76206cd1b654e5a3b42ff1d1b2f1f7..7da4257e07106bcd2831c2e2d3407f2b1ccf6ff9 100644 --- a/src/USER-OMP/pppm_disp_tip4p_omp.cpp +++ b/src/USER-OMP/pppm_disp_tip4p_omp.cpp @@ -15,6 +15,7 @@ Contributing author: Axel Kohlmeyer (Temple U) ------------------------------------------------------------------------- */ +#include "omp_compat.h" #include "pppm_disp_tip4p_omp.h" #include #include @@ -56,7 +57,7 @@ PPPMDispTIP4POMP::~PPPMDispTIP4POMP() { #if defined(_OPENMP) -#pragma omp parallel default(none) +#pragma omp parallel LMP_DEFAULT_NONE #endif { #if defined(_OPENMP) @@ -84,7 +85,7 @@ void PPPMDispTIP4POMP::allocate() PPPMDispTIP4P::allocate(); #if defined(_OPENMP) -#pragma omp parallel default(none) +#pragma omp parallel LMP_DEFAULT_NONE #endif { #if defined(_OPENMP) @@ -111,7 +112,7 @@ void PPPMDispTIP4POMP::allocate() void PPPMDispTIP4POMP::compute_gf() { #if defined(_OPENMP) -#pragma omp parallel default(none) +#pragma omp parallel LMP_DEFAULT_NONE #endif { @@ -198,7 +199,7 @@ void PPPMDispTIP4POMP::compute_gf() void PPPMDispTIP4POMP::compute_gf_6() { #if defined(_OPENMP) -#pragma omp parallel default(none) +#pragma omp parallel LMP_DEFAULT_NONE #endif { double *prd; @@ -302,7 +303,7 @@ void PPPMDispTIP4POMP::compute(int eflag, int vflag) PPPMDispTIP4P::compute(eflag,vflag); #if defined(_OPENMP) -#pragma omp parallel default(none) shared(eflag,vflag) +#pragma omp parallel LMP_DEFAULT_NONE LMP_SHARED(eflag,vflag) #endif { #if defined(_OPENMP) @@ -358,7 +359,7 @@ void PPPMDispTIP4POMP::particle_map_c(double dxinv, double dyinv, int flag = 0; #if defined(_OPENMP) -#pragma omp parallel for default(none) reduction(+:flag) schedule(static) +#pragma omp parallel for LMP_DEFAULT_NONE reduction(+:flag) schedule(static) #endif for (int i = 0; i < nlocal; i++) { dbl3_t xM; @@ -434,7 +435,7 @@ void PPPMDispTIP4POMP::particle_map(double dxinv, double dyinv, int flag = 0; #if defined(_OPENMP) -#pragma omp parallel for default(none) reduction(+:flag) schedule(static) +#pragma omp parallel for LMP_DEFAULT_NONE reduction(+:flag) schedule(static) #endif for (int i = 0; i < nlocal; i++) { @@ -487,7 +488,7 @@ void PPPMDispTIP4POMP::make_rho_c() const int iy = nyhi_out - nylo_out + 1; #if defined(_OPENMP) -#pragma omp parallel default(none) +#pragma omp parallel LMP_DEFAULT_NONE #endif { const double * _noalias const q = atom->q; @@ -582,7 +583,7 @@ void PPPMDispTIP4POMP::make_rho_g() const int iy = nyhi_out_6 - nylo_out_6 + 1; #if defined(_OPENMP) -#pragma omp parallel default(none) +#pragma omp parallel LMP_DEFAULT_NONE #endif { const dbl3_t * _noalias const x = (dbl3_t *) atom->x[0]; @@ -684,7 +685,7 @@ void PPPMDispTIP4POMP::make_rho_a() const int iy = nyhi_out_6 - nylo_out_6 + 1; #if defined(_OPENMP) -#pragma omp parallel default(none) +#pragma omp parallel LMP_DEFAULT_NONE #endif { const dbl3_t * _noalias const x = (dbl3_t *) atom->x[0]; @@ -795,7 +796,7 @@ void PPPMDispTIP4POMP::fieldforce_c_ik() const double boxloz = boxlo[2]; #if defined(_OPENMP) -#pragma omp parallel default(none) +#pragma omp parallel LMP_DEFAULT_NONE #endif { dbl3_t xM; @@ -903,7 +904,7 @@ void PPPMDispTIP4POMP::fieldforce_c_ad() const double boxloz = boxlo[2]; #if defined(_OPENMP) -#pragma omp parallel default(none) +#pragma omp parallel LMP_DEFAULT_NONE #endif { double s1,s2,s3,sf; @@ -1018,7 +1019,7 @@ void PPPMDispTIP4POMP::fieldforce_g_ik() const double * const * const x = atom->x; #if defined(_OPENMP) -#pragma omp parallel default(none) +#pragma omp parallel LMP_DEFAULT_NONE #endif { #if defined(_OPENMP) @@ -1119,7 +1120,7 @@ void PPPMDispTIP4POMP::fieldforce_g_ad() const double hz_inv = nz_pppm_6/zprd_slab; #if defined(_OPENMP) -#pragma omp parallel default(none) +#pragma omp parallel LMP_DEFAULT_NONE #endif { #if defined(_OPENMP) @@ -1226,7 +1227,7 @@ void PPPMDispTIP4POMP::fieldforce_g_peratom() const double * const * const x = atom->x; #if defined(_OPENMP) -#pragma omp parallel default(none) +#pragma omp parallel LMP_DEFAULT_NONE #endif { #if defined(_OPENMP) @@ -1325,7 +1326,7 @@ void PPPMDispTIP4POMP::fieldforce_a_ik() const double * const * const x = atom->x; #if defined(_OPENMP) -#pragma omp parallel default(none) +#pragma omp parallel LMP_DEFAULT_NONE #endif { #if defined(_OPENMP) @@ -1458,7 +1459,7 @@ void PPPMDispTIP4POMP::fieldforce_a_ad() const double hz_inv = nz_pppm_6/zprd_slab; #if defined(_OPENMP) -#pragma omp parallel default(none) +#pragma omp parallel LMP_DEFAULT_NONE #endif { #if defined(_OPENMP) @@ -1632,7 +1633,7 @@ void PPPMDispTIP4POMP::fieldforce_a_peratom() const double * const * const x = atom->x; #if defined(_OPENMP) -#pragma omp parallel default(none) +#pragma omp parallel LMP_DEFAULT_NONE #endif { #if defined(_OPENMP) diff --git a/src/USER-OMP/pppm_omp.cpp b/src/USER-OMP/pppm_omp.cpp index b9b39826ffd56d47ee6eac646056d6353f11b0c4..e3e46f4de07fc2c342975fef97b9215f3e55f85b 100644 --- a/src/USER-OMP/pppm_omp.cpp +++ b/src/USER-OMP/pppm_omp.cpp @@ -15,6 +15,7 @@ Contributing author: Axel Kohlmeyer (Temple U) ------------------------------------------------------------------------- */ +#include "omp_compat.h" #include "pppm_omp.h" #include #include @@ -61,7 +62,7 @@ void PPPMOMP::allocate() PPPM::allocate(); #if defined(_OPENMP) -#pragma omp parallel default(none) +#pragma omp parallel LMP_DEFAULT_NONE #endif { #if defined(_OPENMP) @@ -81,7 +82,7 @@ void PPPMOMP::allocate() PPPMOMP::~PPPMOMP() { #if defined(_OPENMP) -#pragma omp parallel default(none) +#pragma omp parallel LMP_DEFAULT_NONE #endif { #if defined(_OPENMP) @@ -122,7 +123,7 @@ void PPPMOMP::compute_gf_ik() const int twoorder = 2*order; #if defined(_OPENMP) -#pragma omp parallel default(none) +#pragma omp parallel LMP_DEFAULT_NONE #endif { double snx,sny,snz; @@ -216,7 +217,7 @@ void PPPMOMP::compute_gf_ad() double sf0=0.0,sf1=0.0,sf2=0.0,sf3=0.0,sf4=0.0,sf5=0.0; #if defined(_OPENMP) -#pragma omp parallel default(none) reduction(+:sf0,sf1,sf2,sf3,sf4,sf5) +#pragma omp parallel LMP_DEFAULT_NONE reduction(+:sf0,sf1,sf2,sf3,sf4,sf5) #endif { double snx,sny,snz,sqk; @@ -314,7 +315,7 @@ void PPPMOMP::compute(int eflag, int vflag) PPPM::compute(eflag,vflag); #if defined(_OPENMP) -#pragma omp parallel default(none) shared(eflag,vflag) +#pragma omp parallel LMP_DEFAULT_NONE LMP_SHARED(eflag,vflag) #endif { #if defined(_OPENMP) @@ -352,7 +353,7 @@ void PPPMOMP::make_rho() const int iy = nyhi_out - nylo_out + 1; #if defined(_OPENMP) -#pragma omp parallel default(none) +#pragma omp parallel LMP_DEFAULT_NONE #endif { const double * _noalias const q = atom->q; @@ -449,7 +450,7 @@ void PPPMOMP::fieldforce_ik() const double boxloz = boxlo[2]; #if defined(_OPENMP) -#pragma omp parallel default(none) +#pragma omp parallel LMP_DEFAULT_NONE #endif { FFT_SCALAR x0,y0,z0,ekx,eky,ekz; @@ -534,7 +535,7 @@ void PPPMOMP::fieldforce_ad() const double boxloz = boxlo[2]; #if defined(_OPENMP) -#pragma omp parallel default(none) +#pragma omp parallel LMP_DEFAULT_NONE #endif { double s1,s2,s3,sf; @@ -627,7 +628,7 @@ void PPPMOMP::fieldforce_peratom() const double * _noalias const q = atom->q; #if defined(_OPENMP) -#pragma omp parallel default(none) +#pragma omp parallel LMP_DEFAULT_NONE #endif { FFT_SCALAR dx,dy,dz,x0,y0,z0; diff --git a/src/USER-OMP/pppm_tip4p_omp.cpp b/src/USER-OMP/pppm_tip4p_omp.cpp index 359b5dcc8d56f51b9daf50439a34b14f48302fc3..6b3316943e086018d8e2a59b212e52c1f233bd70 100644 --- a/src/USER-OMP/pppm_tip4p_omp.cpp +++ b/src/USER-OMP/pppm_tip4p_omp.cpp @@ -15,6 +15,7 @@ Contributing author: Axel Kohlmeyer (Temple U) ------------------------------------------------------------------------- */ +#include "omp_compat.h" #include "pppm_tip4p_omp.h" #include #include @@ -61,7 +62,7 @@ PPPMTIP4POMP::PPPMTIP4POMP(LAMMPS *lmp) : PPPMTIP4POMP::~PPPMTIP4POMP() { #if defined(_OPENMP) -#pragma omp parallel default(none) +#pragma omp parallel LMP_DEFAULT_NONE #endif { #if defined(_OPENMP) @@ -83,7 +84,7 @@ void PPPMTIP4POMP::allocate() PPPMTIP4P::allocate(); #if defined(_OPENMP) -#pragma omp parallel default(none) +#pragma omp parallel LMP_DEFAULT_NONE #endif { #if defined(_OPENMP) @@ -124,7 +125,7 @@ void PPPMTIP4POMP::compute_gf_ik() const int twoorder = 2*order; #if defined(_OPENMP) -#pragma omp parallel default(none) +#pragma omp parallel LMP_DEFAULT_NONE #endif { double snx,sny,snz; @@ -218,7 +219,7 @@ void PPPMTIP4POMP::compute_gf_ad() double sf0=0.0,sf1=0.0,sf2=0.0,sf3=0.0,sf4=0.0,sf5=0.0; #if defined(_OPENMP) -#pragma omp parallel default(none) reduction(+:sf0,sf1,sf2,sf3,sf4,sf5) +#pragma omp parallel LMP_DEFAULT_NONE reduction(+:sf0,sf1,sf2,sf3,sf4,sf5) #endif { double snx,sny,snz,sqk; @@ -316,7 +317,7 @@ void PPPMTIP4POMP::compute(int eflag, int vflag) PPPMTIP4P::compute(eflag,vflag); #if defined(_OPENMP) -#pragma omp parallel default(none) shared(eflag,vflag) +#pragma omp parallel LMP_DEFAULT_NONE LMP_SHARED(eflag,vflag) #endif { #if defined(_OPENMP) @@ -355,7 +356,7 @@ void PPPMTIP4POMP::particle_map() int flag = 0; #if defined(_OPENMP) -#pragma omp parallel for default(none) reduction(+:flag) schedule(static) +#pragma omp parallel for LMP_DEFAULT_NONE reduction(+:flag) schedule(static) #endif for (int i = 0; i < nlocal; i++) { dbl3_t xM; @@ -416,7 +417,7 @@ void PPPMTIP4POMP::make_rho() const int iy = nyhi_out - nylo_out + 1; #if defined(_OPENMP) -#pragma omp parallel default(none) +#pragma omp parallel LMP_DEFAULT_NONE #endif { const double * _noalias const q = atom->q; @@ -521,7 +522,7 @@ void PPPMTIP4POMP::fieldforce_ik() const double boxloz = boxlo[2]; #if defined(_OPENMP) -#pragma omp parallel default(none) +#pragma omp parallel LMP_DEFAULT_NONE #endif { dbl3_t xM; @@ -632,7 +633,7 @@ void PPPMTIP4POMP::fieldforce_ad() const double boxloz = boxlo[2]; #if defined(_OPENMP) -#pragma omp parallel default(none) +#pragma omp parallel LMP_DEFAULT_NONE #endif { double s1,s2,s3,sf; diff --git a/src/USER-OMP/reaxc_forces_omp.cpp b/src/USER-OMP/reaxc_forces_omp.cpp index e48a5c11d42a20b1734b1ffa030562a974918e72..ee4670fe59bbe637a4d89ba02c14944b4a602bb1 100644 --- a/src/USER-OMP/reaxc_forces_omp.cpp +++ b/src/USER-OMP/reaxc_forces_omp.cpp @@ -26,6 +26,7 @@ . ----------------------------------------------------------------------*/ +#include "omp_compat.h" #include "reaxc_forces_omp.h" #include #include @@ -146,7 +147,7 @@ void Compute_Total_ForceOMP( reax_system *system, control_params *control, reax_list *bonds = (*lists) + BONDS; #if defined(_OPENMP) -#pragma omp parallel default(shared) //default(none) +#pragma omp parallel default(shared) //LMP_DEFAULT_NONE #endif { int i, j, k, pj, pk, start_j, end_j; @@ -309,7 +310,7 @@ void Validate_ListsOMP(reax_system *system, storage * /*workspace*/, reax_list * Hindex = system->my_atoms[i].Hindex; if (Hindex > -1) { system->my_atoms[i].num_hbonds = - (int)(MAX( Num_Entries(Hindex, hbonds)*saferzone, MIN_HBONDS )); + (int)(MAX(Num_Entries(Hindex,hbonds)*saferzone,system->minhbonds)); if (Hindex < numH-1) comp = Start_Index(Hindex+1, hbonds); diff --git a/src/USER-OMP/reaxc_hydrogen_bonds_omp.cpp b/src/USER-OMP/reaxc_hydrogen_bonds_omp.cpp index d06966a92d8e62ba535585d7f216440b2efefbda..22d9df7702ca427508b15d2262ac67be36d0afbd 100644 --- a/src/USER-OMP/reaxc_hydrogen_bonds_omp.cpp +++ b/src/USER-OMP/reaxc_hydrogen_bonds_omp.cpp @@ -26,6 +26,7 @@ . ----------------------------------------------------------------------*/ +#include "omp_compat.h" #include "reaxc_hydrogen_bonds_omp.h" #include #include @@ -57,7 +58,7 @@ void Hydrogen_BondsOMP( reax_system *system, control_params *control, const int nthreads = control->nthreads; #if defined(_OPENMP) -#pragma omp parallel default(shared) //default(none) +#pragma omp parallel default(shared) //LMP_DEFAULT_NONE #endif { int i, j, k, pi, pk; diff --git a/src/USER-OMP/reaxc_init_md_omp.cpp b/src/USER-OMP/reaxc_init_md_omp.cpp index 66f1acf91c9a8e118d61e2f5b540ef69cf046152..4ef214bf4720b917e139e46aa1d02ccd769d10ac 100644 --- a/src/USER-OMP/reaxc_init_md_omp.cpp +++ b/src/USER-OMP/reaxc_init_md_omp.cpp @@ -68,7 +68,7 @@ int Init_ListsOMP(reax_system *system, control_params *control, system->my_atoms[i].num_hbonds = hb_top[i]; total_hbonds += hb_top[i]; } - total_hbonds = (int)(MAX( total_hbonds*saferzone, mincap*MIN_HBONDS )); + total_hbonds = (int)(MAX(total_hbonds*saferzone,mincap*system->minhbonds)); if( !Make_List( system->Hcap, total_hbonds, TYP_HBOND, *lists+HBONDS ) ) { diff --git a/src/USER-OMP/respa_omp.cpp b/src/USER-OMP/respa_omp.cpp index 5add419253a2763a00461111604411166f235665..b5e5293aa42dd871ca69252283c3d32e717d651f 100644 --- a/src/USER-OMP/respa_omp.cpp +++ b/src/USER-OMP/respa_omp.cpp @@ -15,6 +15,7 @@ Contributing authors: Mark Stevens (SNL), Paul Crozier (SNL) ------------------------------------------------------------------------- */ +#include "omp_compat.h" #include "respa_omp.h" #include "neighbor.h" #include "comm.h" @@ -146,7 +147,7 @@ void RespaOMP::setup(int flag) const int nall = atom->nlocal + atom->nghost; const int nthreads = comm->nthreads; #if defined(_OPENMP) -#pragma omp parallel default(none) +#pragma omp parallel LMP_DEFAULT_NONE #endif { #if defined(_OPENMP) @@ -241,7 +242,7 @@ void RespaOMP::setup_minimal(int flag) const int nall = atom->nlocal + atom->nghost; const int nthreads = comm->nthreads; #if defined(_OPENMP) -#pragma omp parallel default(none) +#pragma omp parallel LMP_DEFAULT_NONE #endif { #if defined(_OPENMP) @@ -394,7 +395,7 @@ void RespaOMP::recurse(int ilevel) const int nall = atom->nlocal + atom->nghost; const int nthreads = comm->nthreads; #if defined(_OPENMP) -#pragma omp parallel default(none) +#pragma omp parallel LMP_DEFAULT_NONE #endif { #if defined(_OPENMP) diff --git a/src/USER-QTB/fix_qbmsst.cpp b/src/USER-QTB/fix_qbmsst.cpp index abbf1701b84865fd6240ca56211b518817a4e87b..5ac611b13eeae128542ac0dfe37048da2812eb4d 100644 --- a/src/USER-QTB/fix_qbmsst.cpp +++ b/src/USER-QTB/fix_qbmsst.cpp @@ -32,10 +32,12 @@ #include "memory.h" #include "error.h" #include "kspace.h" +#include "math_const.h" #include "utils.h" using namespace LAMMPS_NS; using namespace FixConst; +using namespace MathConst; /* ---------------------------------------------------------------------- read parameters @@ -45,13 +47,16 @@ FixQBMSST::FixQBMSST(LAMMPS *lmp, int narg, char **arg) : { if (narg < 5) error->all(FLERR,"Illegal fix qbmsst command"); - if ( strcmp(arg[3],"x") == 0 ) + if ( strcmp(arg[3],"x") == 0 ) { direction = 0; - else if ( strcmp(arg[3],"y") == 0 ) + box_change |= BOX_CHANGE_X; + } else if ( strcmp(arg[3],"y") == 0 ) { direction = 1; - else if ( strcmp(arg[3],"z") == 0 ) + box_change |= BOX_CHANGE_Y; + } else if ( strcmp(arg[3],"z") == 0 ) { direction = 2; - else { + box_change |= BOX_CHANGE_Z; + } else { error->all(FLERR,"Illegal fix qbmsst command"); } velocity = atof(arg[4]); @@ -64,7 +69,6 @@ FixQBMSST::FixQBMSST(LAMMPS *lmp, int narg, char **arg) : extvector = 0; nevery = 1; restart_global = 1; - box_change_size = 1; time_integrate = 1; scalar_flag = 1; vector_flag = 1; @@ -538,7 +542,7 @@ void FixQBMSST::initial_integrate(int /*vflag*/) } else { double energy_k= force->hplanck * fabs(f_k); omega_H[k]=sqrt( energy_k * (0.5+1.0/( exp(energy_k/(force->boltz * t_current)) - 1.0 )) ); - omega_H[k]*=alpha*sin((k-N_f)*M_PI/(2*alpha*N_f))/sin((k-N_f)*M_PI/(2*N_f)); + omega_H[k]*=alpha*sin((k-N_f)*MY_PI/(2*alpha*N_f))/sin((k-N_f)*MY_PI/(2*N_f)); } } @@ -547,7 +551,7 @@ void FixQBMSST::initial_integrate(int /*vflag*/) time_H[n] = 0; double t_n=(n-N_f); for (int k = 0; k < 2*N_f; k++) { - double omega_k=(k-N_f)*M_PI/N_f; + double omega_k=(k-N_f)*MY_PI/N_f; time_H[n] += omega_H[k]*(cos(omega_k*t_n)); } time_H[n]/=(2.0*N_f); diff --git a/src/USER-QTB/fix_qtb.cpp b/src/USER-QTB/fix_qtb.cpp index 593ca310068ac9d83471b3fd5738b8bdcbc7e7d1..fa15385859d92467b168f526816a25f02b99e91a 100644 --- a/src/USER-QTB/fix_qtb.cpp +++ b/src/USER-QTB/fix_qtb.cpp @@ -29,11 +29,13 @@ #include "respa.h" #include "comm.h" #include "random_mars.h" +#include "math_const.h" #include "memory.h" #include "error.h" using namespace LAMMPS_NS; using namespace FixConst; +using namespace MathConst; /* ---------------------------------------------------------------------- read parameters @@ -195,7 +197,7 @@ void FixQTB::init() } else { double energy_k= force->hplanck * fabs(f_k); omega_H[k]=sqrt( energy_k * (0.5+1.0/( exp(energy_k/(force->boltz * t_target)) - 1.0 )) ); - omega_H[k]*=alpha*sin((k-N_f)*M_PI/(2*alpha*N_f))/sin((k-N_f)*M_PI/(2*N_f)); + omega_H[k]*=alpha*sin((k-N_f)*MY_PI/(2*alpha*N_f))/sin((k-N_f)*MY_PI/(2*N_f)); } } @@ -204,7 +206,7 @@ void FixQTB::init() time_H[n] = 0; double t_n=(n-N_f); for (int k = 0; k < 2*N_f; k++) { - double omega_k=(k-N_f)*M_PI/N_f; + double omega_k=(k-N_f)*MY_PI/N_f; time_H[n] += omega_H[k]*(cos(omega_k*t_n)); } time_H[n]/=(2.0*N_f); diff --git a/src/USER-REACTION/README b/src/USER-REACTION/README index f099ace10302790e2a8426c58d58a2dc739d25f2..ed2e760e64cefe5f8096fb2fe35d402e6c0501bc 100644 --- a/src/USER-REACTION/README +++ b/src/USER-REACTION/README @@ -1,4 +1,4 @@ -This package implements the DisARMMD protocol (disarmmd.org) as +This package implements the REACTER protocol (reacter.org) as "fix bond/react." This fix allows for complex topology changes during a running MD simulation, when using classical force fields. Topology changes are defined in pre- and post-reaction molecule @@ -6,7 +6,7 @@ templates and can include creation and deletion of bonds, angles, dihedrals, impropers, atom types, bond types, angle types, dihedral types, improper types, and/or atomic charges. -The DisARMMD protocol is a method for modeling chemical reactions in +The REACTER protocol is a method for modeling chemical reactions in classical molecular dynamics simulations. It was developed to build physically-realistic initial configurations for amorphous or crosslinked materials. Any number of competing or reversible reaction @@ -15,9 +15,9 @@ advanced options currently available include reaction constraints (e.g. angle and Arrhenius constraints), deletion of reaction byproducts or other small molecules, and chiral-sensitive reactions. -The DisARMMD methodology is detailed in: +The REACTER methodology is detailed in: Gissinger et al., Polymer 128, 211-217 (2017) https://doi.org/10.1016/j.polymer.2017.09.038 -This package was created by Jacob Gissinger (info@disarmmd.org), +This package was created by Jacob Gissinger (jrgiss05@gmail.com), while at the NASA Langley Research Center. diff --git a/src/USER-REACTION/fix_bond_react.cpp b/src/USER-REACTION/fix_bond_react.cpp index 44e2bd172eba0db5a30b8f93021c2278a104931e..6ba5d1ce49e156b3a5f4f3e43c1f1ffa49c0157c 100644 --- a/src/USER-REACTION/fix_bond_react.cpp +++ b/src/USER-REACTION/fix_bond_react.cpp @@ -39,6 +39,8 @@ Contributing Author: Jacob Gissinger (jacob.gissinger@colorado.edu) #include "math_extra.h" #include "memory.h" #include "error.h" +#include "input.h" +#include "variable.h" #include @@ -60,7 +62,8 @@ static const char cite_fix_bond_react[] = #define BIG 1.0e20 #define DELTA 16 #define MAXGUESS 20 // max # of guesses allowed by superimpose algorithm -#define MAXCONARGS 10 // max # of arguments for any type of constraint + rxnID +#define MAXCONARGS 14 // max # of arguments for any type of constraint + rxnID +#define NUMVARVALS 4 // max # of keyword values that have variables as input // various statuses of superimpose algorithm: // ACCEPT: site successfully matched to pre-reacted template @@ -74,6 +77,9 @@ enum{ACCEPT,REJECT,PROCEED,CONTINUE,GUESSFAIL,RESTORE}; // types of available reaction constraints enum{DISTANCE,ANGLE,DIHEDRAL,ARRHENIUS}; +// keyword values that accept variables as input +enum{NEVERY,RMIN,RMAX,PROB}; + /* ---------------------------------------------------------------------- */ FixBondReact::FixBondReact(LAMMPS *lmp, int narg, char **arg) : @@ -178,6 +184,8 @@ FixBondReact::FixBondReact(LAMMPS *lmp, int narg, char **arg) : memory->create(stabilize_steps_flag,nreacts,"bond/react:stabilize_steps_flag"); memory->create(update_edges_flag,nreacts,"bond/react:update_edges_flag"); memory->create(constraints,1,MAXCONARGS,"bond/react:constraints"); + memory->create(var_flag,NUMVARVALS,nreacts,"bond/react:var_flag"); + memory->create(var_id,NUMVARVALS,nreacts,"bond/react:var_id"); memory->create(iatomtype,nreacts,"bond/react:iatomtype"); memory->create(jatomtype,nreacts,"bond/react:jatomtype"); memory->create(ibonding,nreacts,"bond/react:ibonding"); @@ -201,6 +209,10 @@ FixBondReact::FixBondReact(LAMMPS *lmp, int narg, char **arg) : local_rxn_count[i] = 0; ghostly_rxn_count[i] = 0; reaction_count_total[i] = 0; + for (int j = 0; j < NUMVARVALS; j++) { + var_flag[j][i] = 0; + var_id[j][i] = 0; + } } char **files; @@ -221,19 +233,65 @@ FixBondReact::FixBondReact(LAMMPS *lmp, int narg, char **arg) : if (igroup == -1) error->all(FLERR,"Could not find fix group ID"); groupbits[rxn] = group->bitmask[igroup]; - nevery[rxn] = force->inumeric(FLERR,arg[iarg++]); - if (nevery[rxn] <= 0) error->all(FLERR,"Illegal fix bond/react command: " - "'Nevery' must be a positive integer"); + if (strncmp(arg[iarg],"v_",2) == 0) { + n = strlen(&arg[iarg][2]) + 1; + char *str = new char[n]; + strcpy(str,&arg[iarg][2]); + var_id[NEVERY][rxn] = input->variable->find(str); + if (var_id[NEVERY][rxn] < 0) + error->all(FLERR,"Bond/react: Variable name does not exist"); + if (!input->variable->equalstyle(var_id[NEVERY][rxn])) + error->all(FLERR,"Bond/react: Variable is not equal-style"); + var_flag[NEVERY][rxn] = 1; + delete [] str; + } else { + nevery[rxn] = force->inumeric(FLERR,arg[iarg]); + if (nevery[rxn] <= 0) error->all(FLERR,"Illegal fix bond/react command: " + "'Nevery' must be a positive integer"); + } + iarg++; - double cutoff = force->numeric(FLERR,arg[iarg++]); - if (cutoff < 0.0) error->all(FLERR,"Illegal fix bond/react command: " - "'Rmin' cannot be negative"); - cutsq[rxn][0] = cutoff*cutoff; + if (strncmp(arg[iarg],"v_",2) == 0) { + n = strlen(&arg[iarg][2]) + 1; + char *str = new char[n]; + strcpy(str,&arg[iarg][2]); + var_id[RMIN][rxn] = input->variable->find(str); + if (var_id[RMIN][rxn] < 0) + error->all(FLERR,"Bond/react: Variable name does not exist"); + if (!input->variable->equalstyle(var_id[RMIN][rxn])) + error->all(FLERR,"Bond/react: Variable is not equal-style"); + double cutoff = input->variable->compute_equal(var_id[RMIN][rxn]); + cutsq[rxn][0] = cutoff*cutoff; + var_flag[RMIN][rxn] = 1; + delete [] str; + } else { + double cutoff = force->numeric(FLERR,arg[iarg]); + if (cutoff < 0.0) error->all(FLERR,"Illegal fix bond/react command: " + "'Rmin' cannot be negative"); + cutsq[rxn][0] = cutoff*cutoff; + } + iarg++; - cutoff = force->numeric(FLERR,arg[iarg++]); - if (cutoff < 0.0) error->all(FLERR,"Illegal fix bond/react command:" - "'Rmax' cannot be negative"); - cutsq[rxn][1] = cutoff*cutoff; + if (strncmp(arg[iarg],"v_",2) == 0) { + n = strlen(&arg[iarg][2]) + 1; + char *str = new char[n]; + strcpy(str,&arg[iarg][2]); + var_id[RMAX][rxn] = input->variable->find(str); + if (var_id[RMAX][rxn] < 0) + error->all(FLERR,"Bond/react: Variable name does not exist"); + if (!input->variable->equalstyle(var_id[RMAX][rxn])) + error->all(FLERR,"Bond/react: Variable is not equal-style"); + double cutoff = input->variable->compute_equal(var_id[RMAX][rxn]); + cutsq[rxn][1] = cutoff*cutoff; + var_flag[RMAX][rxn] = 1; + delete [] str; + } else { + double cutoff = force->numeric(FLERR,arg[iarg]); + if (cutoff < 0.0) error->all(FLERR,"Illegal fix bond/react command:" + "'Rmax' cannot be negative"); + cutsq[rxn][1] = cutoff*cutoff; + } + iarg++; unreacted_mol[rxn] = atom->find_molecule(arg[iarg++]); if (unreacted_mol[rxn] == -1) error->all(FLERR,"Unreacted molecule template ID for " @@ -251,7 +309,23 @@ FixBondReact::FixBondReact(LAMMPS *lmp, int narg, char **arg) : if (strcmp(arg[iarg],"prob") == 0) { if (iarg+3 > narg) error->all(FLERR,"Illegal fix bond/react command: " "'prob' keyword has too few arguments"); - fraction[rxn] = force->numeric(FLERR,arg[iarg+1]); + // check if probability is a variable + if (strncmp(arg[iarg+1],"v_",2) == 0) { + int n = strlen(&arg[iarg+1][2]) + 1; + char *str = new char[n]; + strcpy(str,&arg[iarg+1][2]); + var_id[PROB][rxn] = input->variable->find(str); + if (var_id[PROB][rxn] < 0) + error->all(FLERR,"Bond/react: Variable name does not exist"); + if (!input->variable->equalstyle(var_id[PROB][rxn])) + error->all(FLERR,"Bond/react: Variable is not equal-style"); + fraction[rxn] = input->variable->compute_equal(var_id[PROB][rxn]); + var_flag[PROB][rxn] = 1; + delete [] str; + } else { + // otherwise probability should be a number + fraction[rxn] = force->numeric(FLERR,arg[iarg+1]); + } seed[rxn] = force->inumeric(FLERR,arg[iarg+2]); if (fraction[rxn] < 0.0 || fraction[rxn] > 1.0) error->all(FLERR,"Illegal fix bond/react command: " @@ -260,12 +334,12 @@ FixBondReact::FixBondReact(LAMMPS *lmp, int narg, char **arg) : "probability seed must be positive"); iarg += 3; } else if (strcmp(arg[iarg],"max_rxn") == 0) { - if (iarg+2 > narg) error->all(FLERR,"Illegal fix bond/react command: " - "'max_rxn' has too few arguments"); - max_rxn[rxn] = force->inumeric(FLERR,arg[iarg+1]); - if (max_rxn[rxn] < 0) error->all(FLERR,"Illegal fix bond/react command: " - "'max_rxn' cannot be negative"); - iarg += 2; + if (iarg+2 > narg) error->all(FLERR,"Illegal fix bond/react command: " + "'max_rxn' has too few arguments"); + max_rxn[rxn] = force->inumeric(FLERR,arg[iarg+1]); + if (max_rxn[rxn] < 0) error->all(FLERR,"Illegal fix bond/react command: " + "'max_rxn' cannot be negative"); + iarg += 2; } else if (strcmp(arg[iarg],"stabilize_steps") == 0) { if (stabilization_flag == 0) error->all(FLERR,"Stabilize_steps keyword " "used without stabilization keyword"); @@ -447,6 +521,8 @@ FixBondReact::~FixBondReact() memory->destroy(nlocalskips); memory->destroy(nghostlyskips); memory->destroy(limit_duration); + memory->destroy(var_flag); + memory->destroy(var_id); memory->destroy(stabilize_steps_flag); memory->destroy(update_edges_flag); @@ -628,36 +704,36 @@ void FixBondReact::post_constructor() i_statted_tags[i] = 1; } } else { - // sleeping code, for future capabilities - custom_exclude_flag = 1; - // first we have to find correct fix group reference - int n = strlen("GROUP_") + strlen(exclude_group) + 1; - char *fix_group = new char[n]; - strcpy(fix_group,"GROUP_"); - strcat(fix_group,exclude_group); - int ifix = modify->find_fix(fix_group); - Fix *fix = modify->fix[ifix]; - delete [] fix_group; - - // this returns names of corresponding property - int unused; - char * idprop; - idprop = (char *) fix->extract("property",unused); - if (idprop == NULL) - error->all(FLERR,"Exclude group must be a per-atom property group"); - - len = strlen(idprop) + 1; - statted_id = new char[len]; - strcpy(statted_id,idprop); - - // initialize per-atom statted_tags to 1 - // need to correct for smooth restarts - //int flag; - //int index = atom->find_custom(statted_id,flag); - //int *i_statted_tags = atom->ivector[index]; - //for (int i = 0; i < atom->nlocal; i++) - // i_statted_tags[i] = 1; - } + // sleeping code, for future capabilities + custom_exclude_flag = 1; + // first we have to find correct fix group reference + int n = strlen("GROUP_") + strlen(exclude_group) + 1; + char *fix_group = new char[n]; + strcpy(fix_group,"GROUP_"); + strcat(fix_group,exclude_group); + int ifix = modify->find_fix(fix_group); + Fix *fix = modify->fix[ifix]; + delete [] fix_group; + + // this returns names of corresponding property + int unused; + char * idprop; + idprop = (char *) fix->extract("property",unused); + if (idprop == NULL) + error->all(FLERR,"Exclude group must be a per-atom property group"); + + len = strlen(idprop) + 1; + statted_id = new char[len]; + strcpy(statted_id,idprop); + + // initialize per-atom statted_tags to 1 + // need to correct for smooth restarts + //int flag; + //int index = atom->find_custom(statted_id,flag); + //int *i_statted_tags = atom->ivector[index]; + //for (int i = 0; i < atom->nlocal; i++) + // i_statted_tags[i] = 1; + } // let's create a new nve/limit fix to limit newly reacted atoms @@ -720,6 +796,11 @@ void FixBondReact::post_integrate() // check if any reactions could occur on this timestep int nevery_check = 1; for (int i = 0; i < nreacts; i++) { + if (var_flag[NEVERY][i]) + nevery[i] = ceil(input->variable->compute_equal(var_id[NEVERY][i])); + if (nevery[i] <= 0) + error->all(FLERR,"Illegal fix bond/react command: " + "'Nevery' must be a positive integer"); if (!(update->ntimestep % nevery[i])) { nevery_check = 0; break; @@ -824,13 +905,17 @@ void FixBondReact::post_integrate() comm->reverse_comm_fix(this); } + // update reaction probability + if (var_flag[PROB][rxnID]) + fraction[rxnID] = input->variable->compute_equal(var_id[PROB][rxnID]); + // each atom now knows its winning partner // for prob check, generate random value for each atom with a bond partner // forward comm of partner and random value, so ghosts have it if (fraction[rxnID] < 1.0) { for (int i = 0; i < nlocal; i++) - if (partner[i]) probability[i] = random[rxnID]->uniform(); + if (partner[i]) probability[i] = random[rxnID]->uniform(); } commflag = 2; @@ -1003,6 +1088,14 @@ void FixBondReact::far_partner() domain->minimum_image(delx,dely,delz); // ghost location fix rsq = delx*delx + dely*dely + delz*delz; + if (var_flag[RMIN][rxnID]) { + double cutoff = input->variable->compute_equal(var_id[RMIN][rxnID]); + cutsq[rxnID][0] = cutoff*cutoff; + } + if (var_flag[RMAX][rxnID]) { + double cutoff = input->variable->compute_equal(var_id[RMAX][rxnID]); + cutsq[rxnID][1] = cutoff*cutoff; + } if (rsq >= cutsq[rxnID][1] || rsq <= cutsq[rxnID][0]) { continue; } @@ -1058,6 +1151,15 @@ void FixBondReact::close_partner() delz = x[i1][2] - x[i2][2]; domain->minimum_image(delx,dely,delz); // ghost location fix rsq = delx*delx + dely*dely + delz*delz; + + if (var_flag[RMIN][rxnID]) { + double cutoff = input->variable->compute_equal(var_id[RMIN][rxnID]); + cutsq[rxnID][0] = cutoff*cutoff; + } + if (var_flag[RMAX][rxnID]) { + double cutoff = input->variable->compute_equal(var_id[RMAX][rxnID]); + cutsq[rxnID][1] = cutoff*cutoff; + } if (rsq >= cutsq[rxnID][1] || rsq <= cutsq[rxnID][0]) continue; if (closeneigh[rxnID] == 0) { @@ -1654,7 +1756,7 @@ evaluate constraints: return 0 if any aren't satisfied int FixBondReact::check_constraints() { - tagint atom1,atom2,atom3,atom4; + double x1[3],x2[3],x3[3],x4[3]; double delx,dely,delz,rsq; double delx1,dely1,delz1,delx2,dely2,delz2; double rsq1,rsq2,r1,r2,c,t,prrhob; @@ -1664,36 +1766,37 @@ int FixBondReact::check_constraints() double s,phi; int ANDgate; + tagint atom1,atom2; double **x = atom->x; for (int i = 0; i < nconstraints; i++) { if (constraints[i][0] == rxnID) { if (constraints[i][1] == DISTANCE) { - atom1 = atom->map(glove[(int) constraints[i][2]-1][1]); - atom2 = atom->map(glove[(int) constraints[i][3]-1][1]); - delx = x[atom1][0] - x[atom2][0]; - dely = x[atom1][1] - x[atom2][1]; - delz = x[atom1][2] - x[atom2][2]; + get_IDcoords((int) constraints[i][2], (int) constraints[i][3], x1); + get_IDcoords((int) constraints[i][4], (int) constraints[i][5], x2); + delx = x1[0] - x2[0]; + dely = x1[1] - x2[1]; + delz = x1[2] - x2[2]; domain->minimum_image(delx,dely,delz); // ghost location fix rsq = delx*delx + dely*dely + delz*delz; - if (rsq < constraints[i][4] || rsq > constraints[i][5]) return 0; + if (rsq < constraints[i][6] || rsq > constraints[i][7]) return 0; } else if (constraints[i][1] == ANGLE) { - atom1 = atom->map(glove[(int) constraints[i][2]-1][1]); - atom2 = atom->map(glove[(int) constraints[i][3]-1][1]); - atom3 = atom->map(glove[(int) constraints[i][4]-1][1]); + get_IDcoords((int) constraints[i][2], (int) constraints[i][3], x1); + get_IDcoords((int) constraints[i][4], (int) constraints[i][5], x2); + get_IDcoords((int) constraints[i][6], (int) constraints[i][7], x3); // 1st bond - delx1 = x[atom1][0] - x[atom2][0]; - dely1 = x[atom1][1] - x[atom2][1]; - delz1 = x[atom1][2] - x[atom2][2]; + delx1 = x1[0] - x2[0]; + dely1 = x1[1] - x2[1]; + delz1 = x1[2] - x2[2]; domain->minimum_image(delx1,dely1,delz1); // ghost location fix rsq1 = delx1*delx1 + dely1*dely1 + delz1*delz1; r1 = sqrt(rsq1); // 2nd bond - delx2 = x[atom3][0] - x[atom2][0]; - dely2 = x[atom3][1] - x[atom2][1]; - delz2 = x[atom3][2] - x[atom2][2]; + delx2 = x3[0] - x2[0]; + dely2 = x3[1] - x2[1]; + delz2 = x3[2] - x2[2]; domain->minimum_image(delx2,dely2,delz2); // ghost location fix rsq2 = delx2*delx2 + dely2*dely2 + delz2*delz2; r2 = sqrt(rsq2); @@ -1703,22 +1806,22 @@ int FixBondReact::check_constraints() c /= r1*r2; if (c > 1.0) c = 1.0; if (c < -1.0) c = -1.0; - if (acos(c) < constraints[i][5] || acos(c) > constraints[i][6]) return 0; + if (acos(c) < constraints[i][8] || acos(c) > constraints[i][9]) return 0; } else if (constraints[i][1] == DIHEDRAL) { // phi calculation from dihedral style harmonic - atom1 = atom->map(glove[(int) constraints[i][2]-1][1]); - atom2 = atom->map(glove[(int) constraints[i][3]-1][1]); - atom3 = atom->map(glove[(int) constraints[i][4]-1][1]); - atom4 = atom->map(glove[(int) constraints[i][5]-1][1]); - - vb1x = x[atom1][0] - x[atom2][0]; - vb1y = x[atom1][1] - x[atom2][1]; - vb1z = x[atom1][2] - x[atom2][2]; + get_IDcoords((int) constraints[i][2], (int) constraints[i][3], x1); + get_IDcoords((int) constraints[i][4], (int) constraints[i][5], x2); + get_IDcoords((int) constraints[i][6], (int) constraints[i][7], x3); + get_IDcoords((int) constraints[i][8], (int) constraints[i][9], x4); + + vb1x = x1[0] - x2[0]; + vb1y = x1[1] - x2[1]; + vb1z = x1[2] - x2[2]; domain->minimum_image(vb1x,vb1y,vb1z); - vb2x = x[atom3][0] - x[atom2][0]; - vb2y = x[atom3][1] - x[atom2][1]; - vb2z = x[atom3][2] - x[atom2][2]; + vb2x = x3[0] - x2[0]; + vb2y = x3[1] - x2[1]; + vb2z = x3[2] - x2[2]; domain->minimum_image(vb2x,vb2y,vb2z); vb2xm = -vb2x; @@ -1726,9 +1829,9 @@ int FixBondReact::check_constraints() vb2zm = -vb2z; domain->minimum_image(vb2xm,vb2ym,vb2zm); - vb3x = x[atom4][0] - x[atom3][0]; - vb3y = x[atom4][1] - x[atom3][1]; - vb3z = x[atom4][2] - x[atom3][2]; + vb3x = x4[0] - x3[0]; + vb3y = x4[1] - x3[1]; + vb3z = x4[2] - x3[2]; domain->minimum_image(vb3x,vb3y,vb3z); ax = vb1y*vb2zm - vb1z*vb2ym; @@ -1756,21 +1859,21 @@ int FixBondReact::check_constraints() phi = atan2(s,c); ANDgate = 0; - if (constraints[i][6] < constraints[i][7]) { - if (phi > constraints[i][6] && phi < constraints[i][7]) ANDgate = 1; + if (constraints[i][10] < constraints[i][11]) { + if (phi > constraints[i][10] && phi < constraints[i][11]) ANDgate = 1; } else { - if (phi > constraints[i][6] || phi < constraints[i][7]) ANDgate = 1; + if (phi > constraints[i][10] || phi < constraints[i][11]) ANDgate = 1; } - if (constraints[i][8] < constraints[i][9]) { - if (phi > constraints[i][8] && phi < constraints[i][9]) ANDgate = 1; + if (constraints[i][12] < constraints[i][13]) { + if (phi > constraints[i][12] && phi < constraints[i][13]) ANDgate = 1; } else { - if (phi > constraints[i][8] || phi < constraints[i][9]) ANDgate = 1; + if (phi > constraints[i][12] || phi < constraints[i][13]) ANDgate = 1; } if (ANDgate != 1) return 0; } else if (constraints[i][1] == ARRHENIUS) { t = get_temperature(); prrhob = constraints[i][3]*pow(t,constraints[i][4])* - exp(-constraints[i][5]/(force->boltz*t)); + exp(-constraints[i][5]/(force->boltz*t)); if (prrhob < rrhandom[(int) constraints[i][2]]->uniform()) return 0; } } @@ -1802,6 +1905,42 @@ int FixBondReact::check_constraints() return 1; } +/* ---------------------------------------------------------------------- +return pre-reaction atom or fragment location +fragment: given pre-reacted molID (onemol) and fragID, + return geometric center (of mapped simulation atoms) +------------------------------------------------------------------------- */ + +void FixBondReact::get_IDcoords(int mode, int myID, double *center) +{ + double **x = atom->x; + if (mode == 1) { + int iatom = atom->map(glove[myID-1][1]); + for (int i = 0; i < 3; i++) + center[i] = x[iatom][i]; + } else { + int iref = -1; // choose first atom as reference + int iatom; + int nfragatoms = 0; + for (int i = 0; i < 3; i++) + center[i] = 0; + + for (int i = 0; i < onemol->natoms; i++) { + if (onemol->fragmentmask[myID][i]) { + if (iref == -1) + iref = atom->map(glove[i][1]); + iatom = atom->map(glove[i][1]); + iatom = domain->closest_image(iref,iatom); + for (int j = 0; j < 3; j++) + center[j] += x[iatom][j]; + nfragatoms++; + } + } + for (int i = 0; i < 3; i++) + center[i] /= nfragatoms; + } +} + /* ---------------------------------------------------------------------- compute local temperature: average over all atoms in reaction template ------------------------------------------------------------------------- */ @@ -1822,13 +1961,13 @@ double FixBondReact::get_temperature() for (i = 0; i < onemol->natoms; i++) { ilocal = atom->map(glove[i][1]); t += (v[ilocal][0]*v[ilocal][0] + v[ilocal][1]*v[ilocal][1] + - v[ilocal][2]*v[ilocal][2]) * rmass[ilocal]; + v[ilocal][2]*v[ilocal][2]) * rmass[ilocal]; } } else { for (i = 0; i < onemol->natoms; i++) { ilocal = atom->map(glove[i][1]); t += (v[ilocal][0]*v[ilocal][0] + v[ilocal][1]*v[ilocal][1] + - v[ilocal][2]*v[ilocal][2]) * mass[type[ilocal]]; + v[ilocal][2]*v[ilocal][2]) * mass[type[ilocal]]; } } @@ -1857,7 +1996,7 @@ int FixBondReact::get_chirality(double four_coords[12]) for (int i = 0; i < 3; i++) { mean3[i] = (four_coords[i] + four_coords[i+3] + - four_coords[i+6])/3; + four_coords[i+6])/3; vec4[i] = four_coords[i+9] - mean3[i]; } @@ -2005,7 +2144,7 @@ void FixBondReact::find_landlocked_atoms(int myrxn) int ii = reverse_equiv[i][1][myrxn] - 1; for (int j = 0; j < twomol_nxspecial[ii][0]; j++) { if (delete_atoms[equivalences[twomol_xspecial[ii][j]-1][1][myrxn]-1][myrxn] == 0) { - error->all(FLERR,"Bond/react: A deleted atom cannot remain bonded to an atom that is not deleted"); + error->all(FLERR,"Bond/react: A deleted atom cannot remain bonded to an atom that is not deleted"); } } } @@ -2292,19 +2431,19 @@ void FixBondReact::glove_ghostcheck() // 'ghosts of another' indication taken from comm->sendlist int ghostly = 0; - #if !defined(MPI_STUBS) - if (comm->style == 0) { - for (int i = 0; i < onemol->natoms; i++) { - int ilocal = atom->map(glove[i][1]); - if (ilocal >= atom->nlocal || localsendlist[ilocal] == 1) { - ghostly = 1; - break; - } +#if !defined(MPI_STUBS) + if (comm->style == 0) { + for (int i = 0; i < onemol->natoms; i++) { + int ilocal = atom->map(glove[i][1]); + if (ilocal >= atom->nlocal || localsendlist[ilocal] == 1) { + ghostly = 1; + break; } - } else { - ghostly = 1; } - #endif + } else { + ghostly = 1; + } +#endif if (ghostly == 1) { ghostly_mega_glove[0][ghostly_num_mega] = rxnID; @@ -2378,12 +2517,12 @@ void FixBondReact::ghost_glovecast() // let's send to root, dedup, then broadcast if (me == 0) { MPI_Gatherv(MPI_IN_PLACE, ghostly_num_mega, column, // Note: some values ignored for MPI_IN_PLACE - &(global_mega_glove[0][0]), allncols, allstarts, - column, 0, world); + &(global_mega_glove[0][0]), allncols, allstarts, + column, 0, world); } else { MPI_Gatherv(&(global_mega_glove[0][start]), ghostly_num_mega, column, - &(global_mega_glove[0][0]), allncols, allstarts, - column, 0, world); + &(global_mega_glove[0][0]), allncols, allstarts, + column, 0, world); } if (me == 0) dedup_mega_gloves(1); // global_mega_glove mode @@ -2990,7 +3129,7 @@ void FixBondReact::read(int myrxn) sscanf(line,"%d",&nequivalent); if (nequivalent != onemol->natoms) error->one(FLERR,"Bond/react: Number of equivalences in map file must " - "equal number of atoms in reaction templates"); + "equal number of atoms in reaction templates"); } else if (strstr(line,"customIDs")) sscanf(line,"%d",&ncustom); else if (strstr(line,"deleteIDs")) sscanf(line,"%d",&ndelete); @@ -3153,48 +3292,43 @@ void FixBondReact::ChiralCenters(char *line, int myrxn) void FixBondReact::Constraints(char *line, int myrxn) { double tmp[MAXCONARGS]; - int n = strlen("distance") + 1; - char *constraint_type = new char[n]; + char **strargs; + memory->create(strargs,MAXCONARGS,MAXLINE,"bond/react:strargs"); + char *constraint_type = new char[MAXLINE]; for (int i = 0; i < nconstr; i++) { readline(line); sscanf(line,"%s",constraint_type); constraints[nconstraints][0] = myrxn; if (strcmp(constraint_type,"distance") == 0) { constraints[nconstraints][1] = DISTANCE; - sscanf(line,"%*s %lg %lg %lg %lg",&tmp[0],&tmp[1],&tmp[2],&tmp[3]); - if (tmp[0] > onemol->natoms || tmp[1] > onemol->natoms) - error->one(FLERR,"Bond/react: Invalid template atom ID in map file"); - constraints[nconstraints][2] = tmp[0]; - constraints[nconstraints][3] = tmp[1]; - constraints[nconstraints][4] = tmp[2]*tmp[2]; // using square of distance - constraints[nconstraints][5] = tmp[3]*tmp[3]; + sscanf(line,"%*s %s %s %lg %lg",strargs[0],strargs[1],&tmp[0],&tmp[1]); + readID(strargs[0], nconstraints, 2, 3); + readID(strargs[1], nconstraints, 4, 5); + // cutoffs + constraints[nconstraints][6] = tmp[0]*tmp[0]; // using square of distance + constraints[nconstraints][7] = tmp[1]*tmp[1]; } else if (strcmp(constraint_type,"angle") == 0) { constraints[nconstraints][1] = ANGLE; - sscanf(line,"%*s %lg %lg %lg %lg %lg",&tmp[0],&tmp[1],&tmp[2],&tmp[3],&tmp[4]); - if (tmp[0] > onemol->natoms || tmp[1] > onemol->natoms || tmp[2] > onemol->natoms) - error->one(FLERR,"Bond/react: Invalid template atom ID in map file"); - constraints[nconstraints][2] = tmp[0]; - constraints[nconstraints][3] = tmp[1]; - constraints[nconstraints][4] = tmp[2]; - constraints[nconstraints][5] = tmp[3]/180.0 * MY_PI; - constraints[nconstraints][6] = tmp[4]/180.0 * MY_PI; + sscanf(line,"%*s %s %s %s %lg %lg",strargs[0],strargs[1],strargs[2],&tmp[0],&tmp[1]); + readID(strargs[0], nconstraints, 2, 3); + readID(strargs[1], nconstraints, 4, 5); + readID(strargs[2], nconstraints, 6, 7); + constraints[nconstraints][8] = tmp[0]/180.0 * MY_PI; + constraints[nconstraints][9] = tmp[1]/180.0 * MY_PI; } else if (strcmp(constraint_type,"dihedral") == 0) { constraints[nconstraints][1] = DIHEDRAL; - tmp[6] = 181.0; // impossible range - tmp[7] = 182.0; - sscanf(line,"%*s %lg %lg %lg %lg %lg %lg %lg %lg",&tmp[0],&tmp[1], - &tmp[2],&tmp[3],&tmp[4],&tmp[5],&tmp[6],&tmp[7]); - if (tmp[0] > onemol->natoms || tmp[1] > onemol->natoms || - tmp[2] > onemol->natoms || tmp[3] > onemol->natoms) - error->one(FLERR,"Bond/react: Invalid template atom ID in map file"); - constraints[nconstraints][2] = tmp[0]; - constraints[nconstraints][3] = tmp[1]; - constraints[nconstraints][4] = tmp[2]; - constraints[nconstraints][5] = tmp[3]; - constraints[nconstraints][6] = tmp[4]/180.0 * MY_PI; - constraints[nconstraints][7] = tmp[5]/180.0 * MY_PI; - constraints[nconstraints][8] = tmp[6]/180.0 * MY_PI; - constraints[nconstraints][9] = tmp[7]/180.0 * MY_PI; + tmp[2] = 181.0; // impossible range + tmp[3] = 182.0; + sscanf(line,"%*s %s %s %s %s %lg %lg %lg %lg",strargs[0],strargs[1], + strargs[2],strargs[3],&tmp[0],&tmp[1],&tmp[2],&tmp[3]); + readID(strargs[0], nconstraints, 2, 3); + readID(strargs[1], nconstraints, 4, 5); + readID(strargs[2], nconstraints, 6, 7); + readID(strargs[3], nconstraints, 8, 9); + constraints[nconstraints][10] = tmp[0]/180.0 * MY_PI; + constraints[nconstraints][11] = tmp[1]/180.0 * MY_PI; + constraints[nconstraints][12] = tmp[2]/180.0 * MY_PI; + constraints[nconstraints][13] = tmp[3]/180.0 * MY_PI; } else if (strcmp(constraint_type,"arrhenius") == 0) { constraints[nconstraints][1] = ARRHENIUS; constraints[nconstraints][2] = narrhenius++; @@ -3208,6 +3342,27 @@ void FixBondReact::Constraints(char *line, int myrxn) nconstraints++; } delete [] constraint_type; + memory->destroy(strargs); +} + +/* ---------------------------------------------------------------------- +if ID starts with character, assume it is a pre-reaction molecule fragment ID +otherwise, it is a pre-reaction atom ID +---------------------------------------------------------------------- */ + +void FixBondReact::readID(char *strarg, int iconstr, int mode, int myID) +{ + if (isalpha(strarg[0])) { + constraints[iconstr][mode] = 0; // fragment vs. atom ID flag + int ifragment = onemol->findfragment(strarg); + if (ifragment < 0) error->one(FLERR,"Bond/react: Molecule fragment does not exist"); + constraints[iconstr][myID] = ifragment; + } else { + constraints[iconstr][mode] = 1; // fragment vs. atom ID flag + int iatom = atoi(strarg); + if (iatom > onemol->natoms) error->one(FLERR,"Bond/react: Invalid template atom ID in map file"); + constraints[iconstr][myID] = iatom; + } } void FixBondReact::open(char *file) @@ -3411,16 +3566,17 @@ void FixBondReact::unpack_reverse_comm(int n, int *list, double *buf) if (commflag != 1) { for (i = 0; i < n; i++) { j = list[i]; - if (closeneigh[rxnID] != 0) + if (closeneigh[rxnID] != 0) { if (buf[m+1] < distsq[j][1]) { - partner[j] = (tagint) ubuf(buf[m++]).i; + partner[j] = (tagint) ubuf(buf[m++]).i; distsq[j][1] = buf[m++]; } else m += 2; - else + } else { if (buf[m+1] > distsq[j][0]) { partner[j] = (tagint) ubuf(buf[m++]).i; distsq[j][0] = buf[m++]; } else m += 2; + } } } } @@ -3478,9 +3634,9 @@ double FixBondReact::memory_usage() void FixBondReact::print_bb() { - +#if 0 //fix bond/create cargo code. eg nbonds needs to be added - /* + for (int i = 0; i < atom->nlocal; i++) { // printf("TAG " TAGINT_FORMAT ": %d nbonds: ",atom->tag[i],atom->num_bond[i]); for (int j = 0; j < atom->num_bond[i]; j++) { @@ -3513,9 +3669,9 @@ for (int i = 0; i < atom->nlocal; i++) { // printf("TAG " TAGINT_FORMAT ": %d %d %d nspecial: ",atom->tag[i], atom->nspecial[i][0],atom->nspecial[i][1],atom->nspecial[i][2]); for (int j = 0; j < atom->nspecial[i][2]; j++) { - // printf(" " TAGINT_FORMAT,atom->special[i][j]); + printf(" " TAGINT_FORMAT,atom->special[i][j]); } // printf("\n"); } -*/ +#endif } diff --git a/src/USER-REACTION/fix_bond_react.h b/src/USER-REACTION/fix_bond_react.h index 84cb9401f8881cec402946f60af63b7b1cb3a789..e8a4253ce7c7aa6fba4cbaa0a1de1ef77464cbb8 100644 --- a/src/USER-REACTION/fix_bond_react.h +++ b/src/USER-REACTION/fix_bond_react.h @@ -67,6 +67,7 @@ class FixBondReact : public Fix { int nconstraints; int narrhenius; double **constraints; + int **var_flag,**var_id; // for keyword values with variable inputs int status; int *groupbits; @@ -146,12 +147,13 @@ class FixBondReact : public Fix { int glove_counter; // used to determine when to terminate Superimpose Algorithm void read(int); - void EdgeIDs(char *,int); - void Equivalences(char *,int); - void CustomEdges(char *,int); - void DeleteAtoms(char *,int); - void ChiralCenters(char *,int); - void Constraints(char *,int); + void EdgeIDs(char *, int); + void Equivalences(char *, int); + void CustomEdges(char *, int); + void DeleteAtoms(char *, int); + void ChiralCenters(char *, int); + void Constraints(char *, int); + void readID(char *, int, int, int); void make_a_guess (); void neighbor_loop(); @@ -160,6 +162,7 @@ class FixBondReact : public Fix { void inner_crosscheck_loop(); void ring_check(); int check_constraints(); + void get_IDcoords(int, int, double *); double get_temperature(); int get_chirality(double[12]); // get handedness given an ordered set of coordinates @@ -279,4 +282,16 @@ The number of bonds, angles etc per-atom created by a reaction exceeds the system setting. See the read_data or create_box command for how to specify this value. +E: Bond/react: Variable name does not exist + +Self-explanatory. + +E: Bond/react: Variable is not equal-style + +Self-explanatory. + +E: Bond/react: Molecule fragment does not exist + +Self-explanatory. + */ diff --git a/src/USER-REAXC/fix_qeq_reax.cpp b/src/USER-REAXC/fix_qeq_reax.cpp index 924b6806de08fe9691ccc5801f1994c9160910e4..e3b9903cbf3364cf4d248b6b79973711b034853b 100644 --- a/src/USER-REAXC/fix_qeq_reax.cpp +++ b/src/USER-REAXC/fix_qeq_reax.cpp @@ -43,11 +43,8 @@ using namespace LAMMPS_NS; using namespace FixConst; #define EV_TO_KCAL_PER_MOL 14.4 -//#define DANGER_ZONE 0.95 -//#define LOOSE_ZONE 0.7 #define SQR(x) ((x)*(x)) #define CUBE(x) ((x)*(x)*(x)) -#define MIN_NBRS 100 static const char cite_fix_qeq_reax[] = "fix qeq/reax command:\n\n" @@ -300,8 +297,8 @@ void FixQEqReax::allocate_matrix() mincap = reaxc->system->mincap; safezone = reaxc->system->safezone; } else { - mincap = MIN_CAP; - safezone = SAFE_ZONE; + mincap = REAX_MIN_CAP; + safezone = REAX_SAFE_ZONE; } n = atom->nlocal; @@ -324,7 +321,7 @@ void FixQEqReax::allocate_matrix() i = ilist[ii]; m += numneigh[i]; } - m_cap = MAX( (int)(m * safezone), mincap * MIN_NBRS); + m_cap = MAX( (int)(m * safezone), mincap * REAX_MIN_NBRS); H.n = n_cap; H.m = m_cap; diff --git a/src/USER-REAXC/pair_reaxc.cpp b/src/USER-REAXC/pair_reaxc.cpp index 28f9a193c4660f9908317e7728dee310dff28d25..4cd8046b7cf726c3b957a3f9ab7250d8c6944d14 100644 --- a/src/USER-REAXC/pair_reaxc.cpp +++ b/src/USER-REAXC/pair_reaxc.cpp @@ -244,9 +244,10 @@ void PairReaxC::settings(int narg, char **arg) qeqflag = 1; control->lgflag = 0; control->enobondsflag = 1; - system->mincap = MIN_CAP; - system->safezone = SAFE_ZONE; - system->saferzone = SAFER_ZONE; + system->mincap = REAX_MIN_CAP; + system->minhbonds = REAX_MIN_HBONDS; + system->safezone = REAX_SAFE_ZONE; + system->saferzone = REAX_SAFER_ZONE; // process optional keywords @@ -265,7 +266,7 @@ void PairReaxC::settings(int narg, char **arg) else if (strcmp(arg[iarg+1],"no") == 0) control->enobondsflag = 0; else error->all(FLERR,"Illegal pair_style reax/c command"); iarg += 2; - } else if (strcmp(arg[iarg],"lgvdw") == 0) { + } else if (strcmp(arg[iarg],"lgvdw") == 0) { if (iarg+2 > narg) error->all(FLERR,"Illegal pair_style reax/c command"); if (strcmp(arg[iarg+1],"yes") == 0) control->lgflag = 1; else if (strcmp(arg[iarg+1],"no") == 0) control->lgflag = 0; @@ -284,6 +285,12 @@ void PairReaxC::settings(int narg, char **arg) if (system->mincap < 0) error->all(FLERR,"Illegal pair_style reax/c mincap command"); iarg += 2; + } else if (strcmp(arg[iarg],"minhbonds") == 0) { + if (iarg+2 > narg) error->all(FLERR,"Illegal pair_style reax/c command"); + system->minhbonds = force->inumeric(FLERR,arg[iarg+1]); + if (system->minhbonds < 0) + error->all(FLERR,"Illegal pair_style reax/c minhbonds command"); + iarg += 2; } else error->all(FLERR,"Illegal pair_style reax/c command"); } @@ -712,7 +719,7 @@ int PairReaxC::estimate_reax_lists() free( marked ); - return static_cast (MAX( num_nbrs*safezone, mincap*MIN_NBRS )); + return static_cast (MAX(num_nbrs*safezone, mincap*REAX_MIN_NBRS)); } /* ---------------------------------------------------------------------- */ diff --git a/src/USER-REAXC/reaxc_allocate.cpp b/src/USER-REAXC/reaxc_allocate.cpp index 6303db5619da816b796db4dd26cfd6aa819c4782..f0b0e822993f4ed85de7cf1b75bbf1226375b502 100644 --- a/src/USER-REAXC/reaxc_allocate.cpp +++ b/src/USER-REAXC/reaxc_allocate.cpp @@ -340,7 +340,7 @@ static int Reallocate_HBonds_List( reax_system *system, reax_list *hbonds ) if ((system->my_atoms[i].Hindex) >= 0) { total_hbonds += system->my_atoms[i].num_hbonds; } - total_hbonds = (int)(MAX( total_hbonds*saferzone, mincap*MIN_HBONDS )); + total_hbonds = (int)(MAX(total_hbonds*saferzone, mincap*system->minhbonds)); Delete_List( hbonds); if (!Make_List( system->Hcap, total_hbonds, TYP_HBOND, hbonds )) { @@ -456,7 +456,7 @@ void ReAllocate( reax_system *system, control_params *control, } newsize = static_cast - (MAX( realloc->num_far*safezone, mincap*MIN_NBRS )); + (MAX( realloc->num_far*safezone, mincap*REAX_MIN_NBRS)); Reallocate_Neighbor_List( far_nbrs, system->total_cap, newsize); realloc->num_far = 0; diff --git a/src/USER-REAXC/reaxc_defs.h b/src/USER-REAXC/reaxc_defs.h index 101b554fb23fe5247c7256dd4622f0974596339f..3ead22842ac83816639b3ca2ee54732647cdd98d 100644 --- a/src/USER-REAXC/reaxc_defs.h +++ b/src/USER-REAXC/reaxc_defs.h @@ -75,37 +75,32 @@ #define MAX_TOKENS 1024 #define MAX_TOKEN_LEN 1024 -#define MAX_ATOM_ID 100000 -#define MAX_RESTRICT 15 -#define MAX_MOLECULE_SIZE 20 -#define MAX_ATOM_TYPES 25 - #define NUM_INTRS 10 #define ALMOST_ZERO 1e-10 #define NEG_INF -1e10 #define NO_BOND 1e-3 // 0.001 #define HB_THRESHOLD 1e-2 // 0.01 -#define MIN_CAP 50 -#define MIN_NBRS 100 -#define MIN_HENTRIES 100 -#define MAX_BONDS 30 -#define MIN_BONDS 25 -#define MIN_HBONDS 25 -#define MIN_3BODIES 1000 -#define MIN_GCELL_POPL 50 -#define MIN_SEND 100 -#define SAFE_ZONE 1.2 -#define SAFER_ZONE 1.4 -#define DANGER_ZONE 0.90 -#define LOOSE_ZONE 0.75 -#define MAX_3BODY_PARAM 5 -#define MAX_4BODY_PARAM 5 - -#define MAX_dV 1.01 -#define MIN_dV 0.99 -#define MAX_dT 4.00 -#define MIN_dT 0.00 +#define REAX_MIN_CAP 50 +#define REAX_MIN_NBRS 100 +#define MIN_HENTRIES 100 +#define MAX_BONDS 30 +#define MIN_BONDS 25 +#define REAX_MIN_HBONDS 25 +#define MIN_3BODIES 1000 +#define MIN_GCELL_POPL 50 +#define MIN_SEND 100 +#define REAX_SAFE_ZONE 1.2 +#define REAX_SAFER_ZONE 1.4 +#define DANGER_ZONE 0.90 +#define LOOSE_ZONE 0.75 +#define MAX_3BODY_PARAM 5 +#define MAX_4BODY_PARAM 5 + +#define MAX_dV 1.01 +#define MIN_dV 0.99 +#define MAX_dT 4.00 +#define MIN_dT 0.00 #define MASTER_NODE 0 #define MAX_NBRS 6 //27 diff --git a/src/USER-REAXC/reaxc_forces.cpp b/src/USER-REAXC/reaxc_forces.cpp index 6cd627f05dca93eec0123a13b1cfda5076ba0400..91f1ed55f41062b655fa0cbaa93e79f3dcdc68a4 100644 --- a/src/USER-REAXC/reaxc_forces.cpp +++ b/src/USER-REAXC/reaxc_forces.cpp @@ -152,7 +152,7 @@ void Validate_Lists( reax_system *system, storage * /*workspace*/, reax_list **l Hindex = system->my_atoms[i].Hindex; if (Hindex > -1) { system->my_atoms[i].num_hbonds = - (int)(MAX( Num_Entries(Hindex, hbonds)*saferzone, MIN_HBONDS )); + (int)(MAX(Num_Entries(Hindex, hbonds)*saferzone, system->minhbonds)); //if( Num_Entries(i, hbonds) >= //(Start_Index(i+1,hbonds)-Start_Index(i,hbonds))*0.90/*DANGER_ZONE*/){ @@ -423,7 +423,7 @@ void Estimate_Storages( reax_system *system, control_params *control, *Htop = (int)(MAX( *Htop * safezone, mincap * MIN_HENTRIES )); for( i = 0; i < system->n; ++i ) - hb_top[i] = (int)(MAX( hb_top[i] * saferzone, MIN_HBONDS )); + hb_top[i] = (int)(MAX(hb_top[i] * saferzone, system->minhbonds)); for( i = 0; i < system->N; ++i ) { *num_3body += SQR(bond_top[i]); diff --git a/src/USER-REAXC/reaxc_init_md.cpp b/src/USER-REAXC/reaxc_init_md.cpp index 966ad78c34b70c953baaf832edc4e91f98842a31..73210ef029d875a2f742d96e9305dda24b5a2598 100644 --- a/src/USER-REAXC/reaxc_init_md.cpp +++ b/src/USER-REAXC/reaxc_init_md.cpp @@ -179,7 +179,7 @@ int Init_Lists( reax_system *system, control_params *control, system->my_atoms[i].num_hbonds = hb_top[i]; total_hbonds += hb_top[i]; } - total_hbonds = (int)(MAX( total_hbonds*saferzone, mincap*MIN_HBONDS )); + total_hbonds = (int)(MAX(total_hbonds*saferzone,mincap*system->minhbonds)); if( !Make_List( system->Hcap, total_hbonds, TYP_HBOND, *lists+HBONDS ) ) { diff --git a/src/USER-REAXC/reaxc_lookup.cpp b/src/USER-REAXC/reaxc_lookup.cpp index 622483fdc9ad4ea43d05504ab6ff6741be669ccf..562cbe995f0da2422f0201a1ba0c1564e45422fc 100644 --- a/src/USER-REAXC/reaxc_lookup.cpp +++ b/src/USER-REAXC/reaxc_lookup.cpp @@ -27,7 +27,6 @@ #include "reaxc_lookup.h" #include #include -#include "reaxc_defs.h" #include "reaxc_nonbonded.h" #include "reaxc_tool_box.h" @@ -153,7 +152,7 @@ int Init_Lookup_Tables( reax_system *system, control_params *control, { int i, j, r; int num_atom_types; - int existing_types[MAX_ATOM_TYPES], aggregated[MAX_ATOM_TYPES]; + int existing_types[REAX_MAX_ATOM_TYPES], aggregated[REAX_MAX_ATOM_TYPES]; double dr; double *h, *fh, *fvdw, *fele, *fCEvd, *fCEclmb; double v0_vdw, v0_ele, vlast_vdw, vlast_ele; @@ -186,12 +185,12 @@ int Init_Lookup_Tables( reax_system *system, control_params *control, LR[i] = (LR_lookup_table*) scalloc(system->error_ptr, num_atom_types, sizeof(LR_lookup_table), "lookup:LR[i]"); - for( i = 0; i < MAX_ATOM_TYPES; ++i ) + for( i = 0; i < REAX_MAX_ATOM_TYPES; ++i ) existing_types[i] = 0; for( i = 0; i < system->n; ++i ) existing_types[ system->my_atoms[i].type ] = 1; - MPI_Allreduce( existing_types, aggregated, MAX_ATOM_TYPES, + MPI_Allreduce( existing_types, aggregated, REAX_MAX_ATOM_TYPES, MPI_INT, MPI_SUM, mpi_data->world ); for( i = 0; i < num_atom_types; ++i ) { diff --git a/src/USER-REAXC/reaxc_traj.cpp b/src/USER-REAXC/reaxc_traj.cpp index fb493feae52c1f1671468b4a43469ac6108a096f..717bf741e74cda1994a386249ca07203eecab181 100644 --- a/src/USER-REAXC/reaxc_traj.cpp +++ b/src/USER-REAXC/reaxc_traj.cpp @@ -39,11 +39,11 @@ int Reallocate_Output_Buffer( LAMMPS_NS::Error *error_ptr, output_controls *out_ if (out_control->buffer_len > 0) free( out_control->buffer ); - out_control->buffer_len = (int)(req_space*SAFE_ZONE); + out_control->buffer_len = (int)(req_space*REAX_SAFE_ZONE); out_control->buffer = (char*) malloc(out_control->buffer_len*sizeof(char)); if (out_control->buffer == NULL) { char errmsg[256]; - snprintf(errmsg, 256, "Insufficient memory for required buffer size %d", (int) (req_space*SAFE_ZONE)); + snprintf(errmsg, 256, "Insufficient memory for required buffer size %d", (int) (req_space*REAX_SAFE_ZONE)); error_ptr->one(FLERR,errmsg); } diff --git a/src/USER-REAXC/reaxc_types.h b/src/USER-REAXC/reaxc_types.h index 319c37392789af4a7b1b1698d1c934d8e2972022..f038f00bb07559bbf4a9dfaab3bad1205e5b4a17 100644 --- a/src/USER-REAXC/reaxc_types.h +++ b/src/USER-REAXC/reaxc_types.h @@ -409,7 +409,7 @@ struct _reax_system class LAMMPS_NS::Error *error_ptr; class LAMMPS_NS::Pair *pair_ptr; int my_bonds; - int mincap; + int mincap,minhbonds; double safezone, saferzone; _LR_lookup_table **LR; diff --git a/src/USER-SDPD/fix_meso_move.cpp b/src/USER-SDPD/fix_meso_move.cpp index 176cd8b8954a1973487d8e606f849b483abb73b6..0406b6f0a3584db6360f171b72f92f8e2723536a 100644 --- a/src/USER-SDPD/fix_meso_move.cpp +++ b/src/USER-SDPD/fix_meso_move.cpp @@ -46,7 +46,7 @@ FixMesoMove::FixMesoMove (LAMMPS *lmp, int narg, char **arg) : xvarstr(NULL), yvarstr(NULL), zvarstr(NULL), vxvarstr(NULL), vyvarstr(NULL), vzvarstr(NULL), xoriginal(NULL), displace(NULL), velocity(NULL) { - if ((atom->e_flag != 1) || (atom->rho_flag != 1)) + if ((atom->esph_flag != 1) || (atom->rho_flag != 1)) error->all(FLERR, "fix meso/move command requires atom_style with both energy and density"); @@ -393,8 +393,8 @@ void FixMesoMove::initial_integrate (int /*vflag*/) { double **vest = atom->vest; double *rho = atom->rho; double *drho = atom->drho; - double *e = atom->e; - double *de = atom->de; + double *esph = atom->esph; + double *desph = atom->desph; double **f = atom->f; double *rmass = atom->rmass; double *mass = atom->mass; @@ -415,7 +415,7 @@ void FixMesoMove::initial_integrate (int /*vflag*/) { xold[1] = x[i][1]; xold[2] = x[i][2]; - e[i] += dtf * de[i]; // half-step update of particle internal energy + esph[i] += dtf * desph[i]; // half-step update of particle internal energy rho[i] += dtf * drho[i]; // ... and density if (vxflag) { @@ -467,7 +467,7 @@ void FixMesoMove::initial_integrate (int /*vflag*/) { xold[1] = x[i][1]; xold[2] = x[i][2]; - e[i] += dtf * de[i]; // half-step update of particle internal energy + esph[i] += dtf * desph[i]; // half-step update of particle internal energy rho[i] += dtf * drho[i]; // ... and density if (axflag) { @@ -535,7 +535,7 @@ void FixMesoMove::initial_integrate (int /*vflag*/) { xold[1] = x[i][1]; xold[2] = x[i][2]; - e[i] += dtf * de[i]; // half-step update of particle internal energy + esph[i] += dtf * desph[i]; // half-step update of particle internal energy rho[i] += dtf * drho[i]; // ... and density d[0] = xoriginal[i][0] - point[0]; @@ -757,8 +757,8 @@ void FixMesoMove::final_integrate () { double **v = atom->v; double **f = atom->f; - double *e = atom->e; - double *de = atom->de; + double *esph = atom->esph; + double *desph = atom->desph; double *rho = atom->rho; double *drho = atom->drho; double *rmass = atom->rmass; @@ -773,7 +773,7 @@ void FixMesoMove::final_integrate () { for (int i = 0; i < nlocal; i++) { if (mask[i] & groupbit) { - e[i] += dtf * de[i]; + esph[i] += dtf * desph[i]; rho[i] += dtf * drho[i]; if (xflag) { diff --git a/src/USER-SDPD/fix_rigid_meso.cpp b/src/USER-SDPD/fix_rigid_meso.cpp index e93c543e726b72e9b543b76522a063a2f58fcb9e..01dd2bb99b22c216c17485885e7e21af5949a3bd 100644 --- a/src/USER-SDPD/fix_rigid_meso.cpp +++ b/src/USER-SDPD/fix_rigid_meso.cpp @@ -43,7 +43,7 @@ FixRigidMeso::FixRigidMeso (LAMMPS *lmp, int narg, char **arg) : FixRigid (lmp, narg, arg) { scalar_flag = 0; size_array_cols = 28; - if ((atom->e_flag != 1) || (atom->rho_flag != 1)) + if ((atom->esph_flag != 1) || (atom->rho_flag != 1)) error->all (FLERR, "fix rigid/meso command requires atom_style with" " both energy and density"); @@ -247,8 +247,8 @@ void FixRigidMeso::set_xv () { double **v = atom->v; double **vest = atom->vest; double **f = atom->f; - double *e = atom->e; - double *de = atom->de; + double *esph = atom->esph; + double *desph = atom->desph; double *rho = atom->rho; double *drho = atom->drho; double *rmass = atom->rmass; @@ -272,7 +272,7 @@ void FixRigidMeso::set_xv () { if (body[i] < 0) continue; // half-step update of particle internal energy and density - e[i] += dtf * de[i]; + esph[i] += dtf * desph[i]; rho[i] += dtf * drho[i]; ibody = body[i]; @@ -377,8 +377,8 @@ void FixRigidMeso::set_v () { double **x = atom->x; double **v = atom->v; double **f = atom->f; - double *e = atom->e; - double *de = atom->de; + double *esph = atom->esph; + double *desph = atom->desph; double *rho = atom->rho; double *drho = atom->drho; double *rmass = atom->rmass; @@ -401,7 +401,7 @@ void FixRigidMeso::set_v () { if (body[i] < 0) continue; // half-step update of particle internal energy and density - e[i] += dtf * de[i]; + esph[i] += dtf * desph[i]; rho[i] += dtf * drho[i]; const int ibody = body[i]; diff --git a/src/USER-SMD/atom_vec_smd.cpp b/src/USER-SMD/atom_vec_smd.cpp index ef14eacdc212a0bfabc568f3e4b5f1f52e1a395a..670783a3d7dfe8c462418523478f204c79f5ac79 100644 --- a/src/USER-SMD/atom_vec_smd.cpp +++ b/src/USER-SMD/atom_vec_smd.cpp @@ -25,13 +25,7 @@ #include "atom_vec_smd.h" #include #include "atom.h" -#include "comm.h" -#include "domain.h" -#include "modify.h" -#include "fix.h" -#include "memory.h" #include "error.h" -#include "utils.h" using namespace LAMMPS_NS; @@ -40,1247 +34,157 @@ using namespace LAMMPS_NS; /* ---------------------------------------------------------------------- */ -AtomVecSMD::AtomVecSMD(LAMMPS *lmp) : - AtomVec(lmp) { - molecular = 0; +AtomVecSMD::AtomVecSMD(LAMMPS *lmp) : AtomVec(lmp) +{ + molecular = 0; + mass_type = 1; + forceclearflag = 1; + + atom->smd_flag = 1; + + atom->radius_flag = 1; + atom->rmass_flag = 1; + atom->vfrac_flag = 1; + atom->contact_radius_flag = 1; + atom->molecule_flag = 1; + atom->smd_data_9_flag = 1; + atom->esph_flag = 1; + atom->vest_flag = 1; + atom->smd_stress_flag = 1; + atom->eff_plastic_strain_flag = 1; + atom->x0_flag = 1; + atom->damage_flag = 1; + atom->eff_plastic_strain_rate_flag = 1; + + // strings with peratom variables to include in each AtomVec method + // strings cannot contain fields in corresponding AtomVec default strings + // order of fields in a string does not matter + // except: fields_data_atom & fields_data_vel must match data file + + fields_grow = (char *) + "esph desph vfrac rmass x0 radius contact_radius molecule " + "smd_data_9 vest smd_stress " + "eff_plastic_strain eff_plastic_strain_rate damage"; + fields_copy = (char *) + "esph vfrac rmass x0 radius contact_radius molecule " + "eff_plastic_strain eff_plastic_strain_rate vest " + "smd_data_9 smd_stress damage"; + fields_comm = (char *) "radius vfrac vest esph"; + fields_comm_vel = (char *) "radius vfrac vest esph"; + fields_reverse = (char *) "desph"; + fields_border = (char *) + "x0 molecule radius rmass vfrac contact_radius esph " + "eff_plastic_strain smd_data_9 smd_stress"; + fields_border_vel = (char *) + "x0 molecule radius rmass vfrac contact_radius esph " + "eff_plastic_strain smd_data_9 smd_stress vest"; + fields_exchange = (char *) + "x0 molecule radius rmass vfrac contact_radius esph " + "eff_plastic_strain eff_plastic_strain_rate smd_data_9 smd_stress " + "vest damage"; + fields_restart = (char *) + "x0 molecule radius rmass vfrac contact_radius esph " + "eff_plastic_strain eff_plastic_strain_rate smd_data_9 smd_stress " + "vest damage"; + fields_create = (char *) + "x0 vest vfrac rmass radius contact_radius molecule esph " + "eff_plastic_strain eff_plastic_strain_rate smd_data_9 smd_stress damage"; + fields_data_atom = (char *) + "id type molecule vfrac rmass radius contact_radius x0 x"; + fields_data_vel = (char *) "id v"; + + // set these array sizes based on defines + + atom->add_peratom_change_columns("smd_data_9",NMAT_FULL); + atom->add_peratom_change_columns("smd_stress",NMAT_SYMM); + + setup_fields(); +} + +/* ---------------------------------------------------------------------- + set local copies of all grow ptrs used by this class, except defaults + needed in replicate when 2 atom classes exist and it calls pack_restart() +------------------------------------------------------------------------- */ + +void AtomVecSMD::grow_pointers() +{ + esph = atom->esph; + desph = atom->desph; + vfrac = atom->vfrac; + rmass = atom->rmass; + x0 = atom->x0; + radius = atom->radius; + contact_radius = atom->contact_radius; + molecule = atom->molecule; + smd_data_9 = atom->smd_data_9; + vest = atom->vest; + smd_stress = atom->smd_stress; + eff_plastic_strain = atom->eff_plastic_strain; + eff_plastic_strain_rate = atom->eff_plastic_strain_rate; + damage = atom->damage; +} + +/* ---------------------------------------------------------------------- + clear extra forces starting at atom N + nbytes = # of bytes to clear for a per-atom vector + NOTE: does f need to be re-cleared? +------------------------------------------------------------------------- */ + +void AtomVecSMD::force_clear(int n, size_t nbytes) +{ + memset(&desph[n],0,nbytes); + memset(&f[n][0],0,3*nbytes); +} + +/* ---------------------------------------------------------------------- + initialize non-zero atom quantities +------------------------------------------------------------------------- */ + +void AtomVecSMD::create_atom_post(int ilocal) +{ + x0[ilocal][0] = x[ilocal][0]; + x0[ilocal][1] = x[ilocal][1]; + x0[ilocal][2] = x[ilocal][2]; + + vfrac[ilocal] = 1.0; + rmass[ilocal] = 1.0; + radius[ilocal] = 0.5; + contact_radius[ilocal] = 0.5; + molecule[ilocal] = 1; + + smd_data_9[ilocal][0] = 1.0; // xx + smd_data_9[ilocal][4] = 1.0; // yy + smd_data_9[ilocal][8] = 1.0; // zz +} + +/* ---------------------------------------------------------------------- + modify what AtomVec::data_atom() just unpacked + or initialize other atom quantities +------------------------------------------------------------------------- */ + +void AtomVecSMD::data_atom_post(int ilocal) +{ + esph[ilocal] = 0.0; + x0[ilocal][0] = x[ilocal][0]; + x0[ilocal][1] = x[ilocal][1]; + x0[ilocal][2] = x[ilocal][2]; + + vest[ilocal][0] = 0.0; + vest[ilocal][1] = 0.0; + vest[ilocal][2] = 0.0; + + damage[ilocal] = 0.0; + + eff_plastic_strain[ilocal] = 0.0; + eff_plastic_strain_rate[ilocal] = 0.0; - comm_x_only = 0; - comm_f_only = 0; - size_forward = 6; // variables that are changed by time integration - size_reverse = 4; // f[3] + de - size_border = 31; - size_velocity = 6; // v + vest - size_data_atom = 13; // 7 + 3 x0 + 3 x - size_data_vel = 4; - xcol_data = 11; + for (int k = 0; k < NMAT_FULL; k++) + smd_data_9[ilocal][k] = 0.0; - atom->radius_flag = 1; - atom->rmass_flag = 1; - atom->vfrac_flag = 1; - atom->contact_radius_flag = 1; - atom->molecule_flag = 1; - atom->smd_data_9_flag = 1; - atom->e_flag = 1; - atom->vest_flag = 1; - atom->smd_stress_flag = 1; - atom->eff_plastic_strain_flag = 1; - atom->x0_flag = 1; - atom->damage_flag = 1; - atom->eff_plastic_strain_rate_flag = 1; + for (int k = 0; k < NMAT_SYMM; k++) + smd_stress[ilocal][k] = 0.0; - forceclearflag = 1; - - atom->smd_flag = 1; -} - -/* ---------------------------------------------------------------------- */ - -void AtomVecSMD::init() { - AtomVec::init(); - - // do nothing here -} - -/* ---------------------------------------------------------------------- - grow atom arrays - n = 0 grows arrays by a chunk - n > 0 allocates arrays to size n - ------------------------------------------------------------------------- */ - -void AtomVecSMD::grow(int n) { - if (n == 0) - grow_nmax(); - else - nmax = n; - atom->nmax = nmax; - if (nmax < 0 || nmax > MAXSMALLINT) - error->one(FLERR, "Per-processor system is too big"); - - //printf("in grow, nmax is now %d\n", nmax); - - tag = memory->grow(atom->tag, nmax, "atom:tag"); - type = memory->grow(atom->type, nmax, "atom:type"); - mask = memory->grow(atom->mask, nmax, "atom:mask"); - image = memory->grow(atom->image, nmax, "atom:image"); - x = memory->grow(atom->x, nmax, 3, "atom:x"); - v = memory->grow(atom->v, nmax, 3, "atom:v"); - - f = memory->grow(atom->f, nmax * comm->nthreads, 3, "atom:f"); - de = memory->grow(atom->de, nmax * comm->nthreads, "atom:de"); - - vfrac = memory->grow(atom->vfrac, nmax, "atom:vfrac"); - rmass = memory->grow(atom->rmass, nmax, "atom:rmass"); - x0 = memory->grow(atom->x0, nmax, 3, "atom:x0"); - radius = memory->grow(atom->radius, nmax, "atom:radius"); - contact_radius = memory->grow(atom->contact_radius, nmax, "atom:contact_radius"); - molecule = memory->grow(atom->molecule, nmax, "atom:molecule"); - smd_data_9 = memory->grow(atom->smd_data_9, nmax, NMAT_FULL, "atom:defgrad_old"); - e = memory->grow(atom->e, nmax, "atom:e"); - vest = memory->grow(atom->vest, nmax, 3, "atom:vest"); - tlsph_stress = memory->grow(atom->smd_stress, nmax, NMAT_SYMM, "atom:tlsph_stress"); - eff_plastic_strain = memory->grow(atom->eff_plastic_strain, nmax, "atom:eff_plastic_strain"); - eff_plastic_strain_rate = memory->grow(atom->eff_plastic_strain_rate, nmax, "atom:eff_plastic_strain_rate"); - damage = memory->grow(atom->damage, nmax, "atom:damage"); - - if (atom->nextra_grow) - for (int iextra = 0; iextra < atom->nextra_grow; iextra++) - modify->fix[atom->extra_grow[iextra]]->grow_arrays(nmax); -} - -/* ---------------------------------------------------------------------- - reset local array ptrs - ------------------------------------------------------------------------- */ - -void AtomVecSMD::grow_reset() { - tag = atom->tag; - type = atom->type; - mask = atom->mask; - image = atom->image; - x = atom->x; - v = atom->v; - f = atom->f; - radius = atom->radius; - rmass = atom->rmass; - - vfrac = atom->vfrac; - x0 = atom->x0; - contact_radius = atom->contact_radius; - molecule = atom->molecule; - smd_data_9 = atom->smd_data_9; - e = atom->e; - de = atom->de; - tlsph_stress = atom->smd_stress; - eff_plastic_strain = atom->eff_plastic_strain; - eff_plastic_strain_rate = atom->eff_plastic_strain_rate; - damage = atom->damage; - vest = atom->vest; -} - -/* ---------------------------------------------------------------------- - copy atom I info to atom J - ------------------------------------------------------------------------- */ - -void AtomVecSMD::copy(int i, int j, int delflag) { - tag[j] = tag[i]; - type[j] = type[i]; - mask[j] = mask[i]; - image[j] = image[i]; - x[j][0] = x[i][0]; - x[j][1] = x[i][1]; - x[j][2] = x[i][2]; - v[j][0] = v[i][0]; - v[j][1] = v[i][1]; - v[j][2] = v[i][2]; - - vfrac[j] = vfrac[i]; - rmass[j] = rmass[i]; - x0[j][0] = x0[i][0]; - x0[j][1] = x0[i][1]; - x0[j][2] = x0[i][2]; - radius[j] = radius[i]; - contact_radius[j] = contact_radius[i]; - molecule[j] = molecule[i]; - e[j] = e[i]; - eff_plastic_strain[j] = eff_plastic_strain[i]; - eff_plastic_strain_rate[j] = eff_plastic_strain_rate[i]; - vest[j][0] = vest[i][0]; - vest[j][1] = vest[i][1]; - vest[j][2] = vest[i][2]; - - for (int k = 0; k < NMAT_FULL; k++) { - smd_data_9[j][k] = smd_data_9[i][k]; - } - - for (int k = 0; k < NMAT_SYMM; k++) { - tlsph_stress[j][k] = tlsph_stress[i][k]; - } - - damage[j] = damage[i]; - - if (atom->nextra_grow) - for (int iextra = 0; iextra < atom->nextra_grow; iextra++) - modify->fix[atom->extra_grow[iextra]]->copy_arrays(i, j, delflag); -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecSMD::pack_comm(int /*n*/, int * /*list*/, double * /*buf*/, int /*pbc_flag*/, int * /*pbc*/) { - error->one(FLERR, "atom vec tlsph can only be used with ghost velocities turned on"); - return -1; -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecSMD::pack_comm_vel(int n, int *list, double *buf, int pbc_flag, int *pbc) { - // communicate quantities to ghosts, which are changed by time-integration AND are required on ghost atoms. - - //no need to pack stress or defgrad information here, as these quantities are not required for ghost atoms. - // Inside pair_style tlsph, these quantities are computed and communicated to ghosts. - - // no need to communicate x0 here, as it is not changed by time integration - // if x0 is changed when the ref config is updated, this communication is performed in the fix_integrate/tlsph - // similarly, rmass could be removed here. - // radius should be communicated here for future time-integration of the radius with ulsph (not implemented yet) - int i, j, m; - double dx, dy, dz, dvx, dvy, dvz; - - m = 0; - if (pbc_flag == 0) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = x[j][0]; - buf[m++] = x[j][1]; - buf[m++] = x[j][2]; //3 - buf[m++] = radius[j]; - buf[m++] = vfrac[j]; // 5 - buf[m++] = v[j][0]; - buf[m++] = v[j][1]; - buf[m++] = v[j][2]; // 8 - - buf[m++] = vest[j][0]; - buf[m++] = vest[j][1]; - buf[m++] = vest[j][2]; // 11 - buf[m++] = e[j]; // 12 - - } - } else { - if (domain->triclinic == 0) { - dx = pbc[0] * domain->xprd; - dy = pbc[1] * domain->yprd; - dz = pbc[2] * domain->zprd; - } else { - dx = pbc[0] * domain->xprd + pbc[5] * domain->xy + pbc[4] * domain->xz; - dy = pbc[1] * domain->yprd + pbc[3] * domain->yz; - dz = pbc[2] * domain->zprd; - } - if (!deform_vremap) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = x[j][0] + dx; - buf[m++] = x[j][1] + dy; - buf[m++] = x[j][2] + dz; - buf[m++] = radius[j]; - buf[m++] = vfrac[j]; - buf[m++] = v[j][0]; - buf[m++] = v[j][1]; - buf[m++] = v[j][2]; // 8 - - buf[m++] = vest[j][0]; - buf[m++] = vest[j][1]; - buf[m++] = vest[j][2]; // 11 - buf[m++] = e[j]; // 12 - - } - } else { - dvx = pbc[0] * h_rate[0] + pbc[5] * h_rate[5] + pbc[4] * h_rate[4]; - dvy = pbc[1] * h_rate[1] + pbc[3] * h_rate[3]; - dvz = pbc[2] * h_rate[2]; -// printf("\ndvx = %f, dvy=%f, dvz=%f\n", dvx, dvy, dvz); -// printf("dx = %f, dy=%f, dz=%f\n", dx, dy, dz); - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = x[j][0] + dx; - buf[m++] = x[j][1] + dy; - buf[m++] = x[j][2] + dz; - buf[m++] = radius[j]; - buf[m++] = vfrac[j]; - if (mask[i] & deform_groupbit) { - buf[m++] = v[j][0] + dvx; - buf[m++] = v[j][1] + dvy; - buf[m++] = v[j][2] + dvz; - buf[m++] = vest[j][0] + dvx; - buf[m++] = vest[j][1] + dvy; - buf[m++] = vest[j][2] + dvz; - } else { - buf[m++] = v[j][0]; - buf[m++] = v[j][1]; - buf[m++] = v[j][2]; // 8 - buf[m++] = vest[j][0]; - buf[m++] = vest[j][1]; - buf[m++] = vest[j][2]; // 11 - } - - buf[m++] = e[j]; // 12 - - } - } - } - - return m; -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecSMD::pack_comm_hybrid(int n, int *list, double *buf) { - int i, j, m; - - m = 0; - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = radius[j]; - buf[m++] = vfrac[j]; - buf[m++] = vest[j][0]; - buf[m++] = vest[j][1]; - buf[m++] = vest[j][2]; - buf[m++] = e[j]; - } - return m; -} - -/* ---------------------------------------------------------------------- */ - -void AtomVecSMD::unpack_comm(int /*n*/, int /*first*/, double * /*buf*/) { - error->one(FLERR, "atom vec tlsph can only be used with ghost velocities turned on"); -} - -/* ---------------------------------------------------------------------- */ - -void AtomVecSMD::unpack_comm_vel(int n, int first, double *buf) { - int i, m, last; - - m = 0; - last = first + n; - for (i = first; i < last; i++) { - x[i][0] = buf[m++]; - x[i][1] = buf[m++]; - x[i][2] = buf[m++]; //3 - radius[i] = buf[m++]; - vfrac[i] = buf[m++]; // 5 - v[i][0] = buf[m++]; - v[i][1] = buf[m++]; - v[i][2] = buf[m++]; // 8 - - vest[i][0] = buf[m++]; - vest[i][1] = buf[m++]; - vest[i][2] = buf[m++]; // 11 - e[i] = buf[m++]; - - } -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecSMD::unpack_comm_hybrid(int n, int first, double *buf) { - int i, m, last; - - m = 0; - last = first + n; - for (i = first; i < last; i++) { - radius[i] = buf[m++]; - vfrac[i] = buf[m++]; - vest[i][0] = buf[m++]; - vest[i][1] = buf[m++]; - vest[i][2] = buf[m++]; - e[i] = buf[m++]; - } - return m; -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecSMD::pack_reverse(int n, int first, double *buf) { - int i, m, last; - - printf("in pack_reverse\n"); - - m = 0; - last = first + n; - for (i = first; i < last; i++) { - buf[m++] = f[i][0]; - buf[m++] = f[i][1]; - buf[m++] = f[i][2]; - buf[m++] = de[i]; - } - return m; -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecSMD::pack_reverse_hybrid(int n, int first, double *buf) { - int i, m, last; - - m = 0; - last = first + n; - for (i = first; i < last; i++) { - buf[m++] = de[i]; - } - return m; -} - -/* ---------------------------------------------------------------------- */ - -void AtomVecSMD::unpack_reverse(int n, int *list, double *buf) { - int i, j, m; - - m = 0; - for (i = 0; i < n; i++) { - j = list[i]; - f[j][0] += buf[m++]; - f[j][1] += buf[m++]; - f[j][2] += buf[m++]; - de[j] += buf[m++]; - } -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecSMD::unpack_reverse_hybrid(int n, int *list, double *buf) { - int i, j, m; - - m = 0; - for (i = 0; i < n; i++) { - j = list[i]; - de[j] += buf[m++]; - } - return m; -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecSMD::pack_border(int /*n*/, int * /*list*/, double * /*buf*/, int /*pbc_flag*/, int * /*pbc*/) { - error->one(FLERR, "atom vec tlsph can only be used with ghost velocities turned on"); - return -1; -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecSMD::pack_border_vel(int n, int *list, double *buf, int pbc_flag, int *pbc) { - int i, j, m; - double dx, dy, dz, dvx, dvy, dvz; - - //printf("AtomVecSMD::pack_border_vel\n"); - - m = 0; - if (pbc_flag == 0) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = x[j][0]; - buf[m++] = x[j][1]; - buf[m++] = x[j][2]; // 3 - buf[m++] = x0[j][0]; - buf[m++] = x0[j][1]; - buf[m++] = x0[j][2]; // 6 - buf[m++] = ubuf(tag[j]).d; - buf[m++] = ubuf(type[j]).d; - buf[m++] = ubuf(mask[j]).d; - buf[m++] = ubuf(molecule[j]).d; // 10 - buf[m++] = radius[j]; - buf[m++] = rmass[j]; - buf[m++] = vfrac[j]; - buf[m++] = contact_radius[j]; - buf[m++] = e[j]; - buf[m++] = eff_plastic_strain[j]; // 16 - - for (int k = 0; k < NMAT_FULL; k++) { - buf[m++] = smd_data_9[j][k]; - } // 25 - - for (int k = 0; k < NMAT_SYMM; k++) { - buf[m++] = tlsph_stress[j][k]; - } // 31 - - buf[m++] = v[j][0]; - buf[m++] = v[j][1]; - buf[m++] = v[j][2]; // 34 - buf[m++] = vest[j][0]; - buf[m++] = vest[j][1]; - buf[m++] = vest[j][2]; // 37 - } - } else { - - if (domain->triclinic == 0) { - dx = pbc[0] * domain->xprd; - dy = pbc[1] * domain->yprd; - dz = pbc[2] * domain->zprd; - } else { - dx = pbc[0]; - dy = pbc[1]; - dz = pbc[2]; - } - if (!deform_vremap) { - //printf("dx = %f\n", dx); - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = x[j][0] + dx; - buf[m++] = x[j][1] + dy; - buf[m++] = x[j][2] + dz; // 3 - buf[m++] = x0[j][0]; // this is correct - buf[m++] = x0[j][1]; - buf[m++] = x0[j][2]; // 6 - buf[m++] = ubuf(tag[j]).d; - buf[m++] = ubuf(type[j]).d; - buf[m++] = ubuf(mask[j]).d; - buf[m++] = ubuf(molecule[j]).d; // 10 - buf[m++] = radius[j]; - buf[m++] = rmass[j]; - buf[m++] = vfrac[j]; - buf[m++] = contact_radius[j]; - buf[m++] = e[j]; - buf[m++] = eff_plastic_strain[j]; // 17 - - for (int k = 0; k < NMAT_FULL; k++) { - buf[m++] = smd_data_9[j][k]; - } // 26 - - for (int k = 0; k < NMAT_SYMM; k++) { - buf[m++] = tlsph_stress[j][k]; - } // 32 - - buf[m++] = v[j][0]; - buf[m++] = v[j][1]; - buf[m++] = v[j][2]; // 35 - buf[m++] = vest[j][0]; - buf[m++] = vest[j][1]; - buf[m++] = vest[j][2]; // 38 - - } - } else { - dvx = pbc[0] * h_rate[0] + pbc[5] * h_rate[5] + pbc[4] * h_rate[4]; - dvy = pbc[1] * h_rate[1] + pbc[3] * h_rate[3]; - dvz = pbc[2] * h_rate[2]; -// printf("\ndvx = %f, dvy=%f, dvz=%f\n", dvx, dvy, dvz); -// printf("dx = %f, dy=%f, dz=%f\n", dx, dy, dz); - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = x[j][0] + dx; - buf[m++] = x[j][1] + dy; - buf[m++] = x[j][2] + dz; // 3 - buf[m++] = x0[j][0]; - buf[m++] = x0[j][1]; - buf[m++] = x0[j][2]; // 6 - buf[m++] = ubuf(tag[j]).d; - buf[m++] = ubuf(type[j]).d; - buf[m++] = ubuf(mask[j]).d; - buf[m++] = ubuf(molecule[j]).d; // 10 - buf[m++] = radius[j]; - buf[m++] = rmass[j]; - buf[m++] = vfrac[j]; - buf[m++] = contact_radius[j]; - buf[m++] = e[j]; - buf[m++] = eff_plastic_strain[j]; // 16 - - for (int k = 0; k < NMAT_FULL; k++) { - buf[m++] = smd_data_9[j][k]; - } // 25 - - for (int k = 0; k < NMAT_SYMM; k++) { - buf[m++] = tlsph_stress[j][k]; - } // 31 - - if (mask[i] & deform_groupbit) { - buf[m++] = v[j][0] + dvx; - buf[m++] = v[j][1] + dvy; - buf[m++] = v[j][2] + dvz; // 34 - buf[m++] = vest[j][0] + dvx; - buf[m++] = vest[j][1] + dvy; - buf[m++] = vest[j][2] + dvz; // 37 - - } else { - buf[m++] = v[j][0]; - buf[m++] = v[j][1]; - buf[m++] = v[j][2]; // 34 - buf[m++] = vest[j][0]; - buf[m++] = vest[j][1]; - buf[m++] = vest[j][2]; // 37 - } - - } - } - } - - if (atom->nextra_border) - for (int iextra = 0; iextra < atom->nextra_border; iextra++) - m += modify->fix[atom->extra_border[iextra]]->pack_border(n, list, &buf[m]); - - return m; -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecSMD::pack_border_hybrid(int n, int *list, double *buf) { - int i, j, m; - - m = 0; - for (i = 0; i < n; i++) { - j = list[i]; - - buf[m++] = x0[j][0]; - buf[m++] = x0[j][1]; - buf[m++] = x0[j][2]; // 3 - buf[m++] = ubuf(molecule[j]).d; // 4 - buf[m++] = radius[j]; - buf[m++] = rmass[j]; - buf[m++] = vfrac[j]; - buf[m++] = contact_radius[j]; - buf[m++] = e[j]; - buf[m++] = eff_plastic_strain[j]; // 11 - - for (int k = 0; k < NMAT_FULL; k++) { - buf[m++] = smd_data_9[j][k]; - } // 20 - - for (int k = 0; k < NMAT_SYMM; k++) { - buf[m++] = tlsph_stress[j][k]; - } // 26 - - } - return m; -} - -/* ---------------------------------------------------------------------- */ - -void AtomVecSMD::unpack_border(int /*n*/, int /*first*/, double * /*buf*/) { - error->one(FLERR, "atom vec tlsph can only be used with ghost velocities turned on"); -} - -/* ---------------------------------------------------------------------- */ - -void AtomVecSMD::unpack_border_vel(int n, int first, double *buf) { - int i, m, last; - - m = 0; - last = first + n; - for (i = first; i < last; i++) { - if (i == nmax) - grow(0); - x[i][0] = buf[m++]; - x[i][1] = buf[m++]; - x[i][2] = buf[m++]; // 3 - x0[i][0] = buf[m++]; - x0[i][1] = buf[m++]; - x0[i][2] = buf[m++]; // 6 - tag[i] = (tagint) ubuf(buf[m++]).i; - type[i] = (int) ubuf(buf[m++]).i; - mask[i] = (int) ubuf(buf[m++]).i; - molecule[i] = (tagint) ubuf(buf[m++]).i; // 10 - - radius[i] = buf[m++]; - rmass[i] = buf[m++]; - vfrac[i] = buf[m++]; - contact_radius[i] = buf[m++]; - e[i] = buf[m++]; - eff_plastic_strain[i] = buf[m++]; // 16 - - for (int k = 0; k < NMAT_FULL; k++) { - smd_data_9[i][k] = buf[m++]; - } // 25 - - for (int k = 0; k < NMAT_SYMM; k++) { - tlsph_stress[i][k] = buf[m++]; - } // 31 - - v[i][0] = buf[m++]; - v[i][1] = buf[m++]; - v[i][2] = buf[m++]; // 34 - vest[i][0] = buf[m++]; - vest[i][1] = buf[m++]; - vest[i][2] = buf[m++]; // 37 - } - - if (atom->nextra_border) - for (int iextra = 0; iextra < atom->nextra_border; iextra++) - m += modify->fix[atom->extra_border[iextra]]->unpack_border(n, first, &buf[m]); -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecSMD::unpack_border_hybrid(int n, int first, double *buf) { - int i, m, last; - - m = 0; - last = first + n; - for (i = first; i < last; i++) { - x0[i][0] = buf[m++]; - x0[i][1] = buf[m++]; - x0[i][2] = buf[m++]; // 3 - molecule[i] = (tagint) ubuf(buf[m++]).i; // 4 - radius[i] = buf[m++]; - rmass[i] = buf[m++]; - vfrac[i] = buf[m++]; - contact_radius[i] = buf[m++]; - e[i] = buf[m++]; - eff_plastic_strain[i] = buf[m++]; // 11 - - for (int k = 0; k < NMAT_FULL; k++) { - smd_data_9[i][k] = buf[m++]; - } // 20 - - for (int k = 0; k < NMAT_SYMM; k++) { - tlsph_stress[i][k] = buf[m++]; - } // 26 - } - return m; -} - -/* ---------------------------------------------------------------------- - pack data for atom I for sending to another proc - xyz must be 1st 3 values, so comm::exchange() can test on them - ------------------------------------------------------------------------- */ - -int AtomVecSMD::pack_exchange(int i, double *buf) { - int m = 1; - - //printf("in AtomVecSMD::pack_exchange tag %d\n", tag[i]); - - buf[m++] = x[i][0]; - buf[m++] = x[i][1]; - buf[m++] = x[i][2]; // 3 - buf[m++] = x0[i][0]; - buf[m++] = x0[i][1]; - buf[m++] = x0[i][2]; // 6 - buf[m++] = ubuf(tag[i]).d; - buf[m++] = ubuf(type[i]).d; - buf[m++] = ubuf(mask[i]).d; - buf[m++] = ubuf(image[i]).d; - buf[m++] = ubuf(molecule[i]).d; // 11 - buf[m++] = radius[i]; - buf[m++] = rmass[i]; - buf[m++] = vfrac[i]; - buf[m++] = contact_radius[i]; - buf[m++] = e[i]; - buf[m++] = eff_plastic_strain[i]; // 18 - buf[m++] = eff_plastic_strain_rate[i]; // 19 - - for (int k = 0; k < NMAT_FULL; k++) { - buf[m++] = smd_data_9[i][k]; - } // 27 - - for (int k = 0; k < NMAT_SYMM; k++) { - buf[m++] = tlsph_stress[i][k]; - } // 33 - - buf[m++] = v[i][0]; - buf[m++] = v[i][1]; - buf[m++] = v[i][2]; // 36 - buf[m++] = vest[i][0]; - buf[m++] = vest[i][1]; - buf[m++] = vest[i][2]; // 39 - - buf[m++] = damage[i]; - - if (atom->nextra_grow) - for (int iextra = 0; iextra < atom->nextra_grow; iextra++) - m += modify->fix[atom->extra_grow[iextra]]->pack_exchange(i, &buf[m]); - - buf[0] = m; - return m; -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecSMD::unpack_exchange(double *buf) { - int nlocal = atom->nlocal; - if (nlocal == nmax) - grow(0); - - int m = 1; - - x[nlocal][0] = buf[m++]; - x[nlocal][1] = buf[m++]; - x[nlocal][2] = buf[m++]; // 3 - x0[nlocal][0] = buf[m++]; - x0[nlocal][1] = buf[m++]; - x0[nlocal][2] = buf[m++]; // 6 - tag[nlocal] = (tagint) ubuf(buf[m++]).i; - type[nlocal] = (int) ubuf(buf[m++]).i; - mask[nlocal] = (int) ubuf(buf[m++]).i; - image[nlocal] = (imageint) ubuf(buf[m++]).i; - molecule[nlocal] = (tagint) ubuf(buf[m++]).i; // 11 - - radius[nlocal] = buf[m++]; - rmass[nlocal] = buf[m++]; - vfrac[nlocal] = buf[m++]; - contact_radius[nlocal] = buf[m++]; - e[nlocal] = buf[m++]; - eff_plastic_strain[nlocal] = buf[m++]; // 18 - eff_plastic_strain_rate[nlocal] = buf[m++]; // 19 - - for (int k = 0; k < NMAT_FULL; k++) { - smd_data_9[nlocal][k] = buf[m++]; - } // 27 - - for (int k = 0; k < NMAT_SYMM; k++) { - tlsph_stress[nlocal][k] = buf[m++]; - } // 33 - - v[nlocal][0] = buf[m++]; - v[nlocal][1] = buf[m++]; - v[nlocal][2] = buf[m++]; // 36 - vest[nlocal][0] = buf[m++]; - vest[nlocal][1] = buf[m++]; - vest[nlocal][2] = buf[m++]; // 39 - - damage[nlocal] = buf[m++]; //40 - - if (atom->nextra_grow) - for (int iextra = 0; iextra < atom->nextra_grow; iextra++) - m += modify->fix[atom->extra_grow[iextra]]->unpack_exchange(nlocal, &buf[m]); - - atom->nlocal++; - return m; -} - -/* ---------------------------------------------------------------------- - size of restart data for all atoms owned by this proc - include extra data stored by fixes - ------------------------------------------------------------------------- */ - -int AtomVecSMD::size_restart() { - int i; - - int nlocal = atom->nlocal; - int n = 43 * nlocal; // count pack_restart + 1 (size of buffer) - - if (atom->nextra_restart) - for (int iextra = 0; iextra < atom->nextra_restart; iextra++) - for (i = 0; i < nlocal; i++) - n += modify->fix[atom->extra_restart[iextra]]->size_restart(i); - - return n; -} - -/* ---------------------------------------------------------------------- - pack atom I's data for restart file including extra quantities - xyz must be 1st 3 values, so that read_restart can test on them - molecular types may be negative, but write as positive - ------------------------------------------------------------------------- */ -int AtomVecSMD::pack_restart(int i, double *buf) { - int m = 1; // 1 - - buf[m++] = x[i][0]; - buf[m++] = x[i][1]; - buf[m++] = x[i][2]; // 4 - buf[m++] = x0[i][0]; - buf[m++] = x0[i][1]; - buf[m++] = x0[i][2]; // 7 - buf[m++] = ubuf(tag[i]).d; - buf[m++] = ubuf(type[i]).d; - buf[m++] = ubuf(mask[i]).d; // 10 - buf[m++] = ubuf(image[i]).d; - buf[m++] = ubuf(molecule[i]).d; - buf[m++] = radius[i]; - buf[m++] = rmass[i]; - buf[m++] = vfrac[i]; // 15 - buf[m++] = contact_radius[i]; - buf[m++] = e[i]; - buf[m++] = eff_plastic_strain[i]; - buf[m++] = eff_plastic_strain_rate[i]; // 19 - - for (int k = 0; k < NMAT_FULL; k++) { - buf[m++] = smd_data_9[i][k]; - } // 28 - - for (int k = 0; k < NMAT_SYMM; k++) { - buf[m++] = tlsph_stress[i][k]; - } // 34 - - buf[m++] = v[i][0]; - buf[m++] = v[i][1]; - buf[m++] = v[i][2]; // 37 - buf[m++] = vest[i][0]; - buf[m++] = vest[i][1]; - buf[m++] = vest[i][2]; // 40 - - buf[m++] = damage[i]; // 41 - - if (atom->nextra_restart) - for (int iextra = 0; iextra < atom->nextra_restart; iextra++) - m += modify->fix[atom->extra_restart[iextra]]->pack_restart(i, &buf[m]); - - buf[0] = m; - return m; -} - -/* ---------------------------------------------------------------------- - unpack data for one atom from restart file including extra quantities - ------------------------------------------------------------------------- */ - -int AtomVecSMD::unpack_restart(double *buf) { - int nlocal = atom->nlocal; - if (nlocal == nmax) { - grow(0); - if (atom->nextra_store) - memory->grow(atom->extra, nmax, atom->nextra_store, "atom:extra"); - } - - int m = 1; - - x[nlocal][0] = buf[m++]; - x[nlocal][1] = buf[m++]; - x[nlocal][2] = buf[m++]; // 3 - x0[nlocal][0] = buf[m++]; - x0[nlocal][1] = buf[m++]; - x0[nlocal][2] = buf[m++]; // 6 - tag[nlocal] = (tagint) ubuf(buf[m++]).i; - type[nlocal] = (int) ubuf(buf[m++]).i; - mask[nlocal] = (int) ubuf(buf[m++]).i; - image[nlocal] = (imageint) ubuf(buf[m++]).i; - molecule[nlocal] = (tagint) ubuf(buf[m++]).i; // 11 - - radius[nlocal] = buf[m++]; - rmass[nlocal] = buf[m++]; - vfrac[nlocal] = buf[m++]; //14 - contact_radius[nlocal] = buf[m++]; //15 - e[nlocal] = buf[m++]; - eff_plastic_strain[nlocal] = buf[m++]; // 18 - eff_plastic_strain_rate[nlocal] = buf[m++]; // 29 - - for (int k = 0; k < NMAT_FULL; k++) { - smd_data_9[nlocal][k] = buf[m++]; - } // 28 - - for (int k = 0; k < NMAT_SYMM; k++) { - tlsph_stress[nlocal][k] = buf[m++]; - } // 34 - - v[nlocal][0] = buf[m++]; - v[nlocal][1] = buf[m++]; - v[nlocal][2] = buf[m++]; // 37 - vest[nlocal][0] = buf[m++]; - vest[nlocal][1] = buf[m++]; - vest[nlocal][2] = buf[m++]; // 40 - - damage[nlocal] = buf[m++]; //41 - - //printf("nlocal in restart is %d\n", nlocal); - - double **extra = atom->extra; - if (atom->nextra_store) { - int size = static_cast(buf[0]) - m; - for (int i = 0; i < size; i++) - extra[nlocal][i] = buf[m++]; - } - - atom->nlocal++; - - //printf("returning m=%d in unpack_restart\n", m); - - return m; -} - -/* ---------------------------------------------------------------------- - create one atom of itype at coord - set other values to defaults - ------------------------------------------------------------------------- */ - -void AtomVecSMD::create_atom(int itype, double *coord) { - int nlocal = atom->nlocal; - if (nlocal == nmax) { - printf("nlocal = %d, nmax = %d, calling grow\n", nlocal, nmax); - grow(0); - printf("... finished growing\n"); - } - - tag[nlocal] = 0; - type[nlocal] = itype; - x[nlocal][0] = coord[0]; - x[nlocal][1] = coord[1]; - x[nlocal][2] = coord[2]; - x0[nlocal][0] = coord[0]; - x0[nlocal][1] = coord[1]; - x0[nlocal][2] = coord[2]; - mask[nlocal] = 1; - image[nlocal] = ((imageint) IMGMAX << IMG2BITS) | ((imageint) IMGMAX << IMGBITS) | IMGMAX; - v[nlocal][0] = 0.0; - v[nlocal][1] = 0.0; - v[nlocal][2] = 0.0; - vest[nlocal][0] = 0.0; - vest[nlocal][1] = 0.0; - vest[nlocal][2] = 0.0; - - vfrac[nlocal] = 1.0; - rmass[nlocal] = 1.0; - radius[nlocal] = 0.5; - contact_radius[nlocal] = 0.5; - molecule[nlocal] = 1; - e[nlocal] = 0.0; - eff_plastic_strain[nlocal] = 0.0; - eff_plastic_strain_rate[nlocal] = 0.0; - - for (int k = 0; k < NMAT_FULL; k++) { - smd_data_9[nlocal][k] = 0.0; - } - smd_data_9[nlocal][0] = 1.0; // xx - smd_data_9[nlocal][4] = 1.0; // yy - smd_data_9[nlocal][8] = 1.0; // zz - - for (int k = 0; k < NMAT_SYMM; k++) { - tlsph_stress[nlocal][k] = 0.0; - } - - damage[nlocal] = 0.0; - - atom->nlocal++; -} - -/* ---------------------------------------------------------------------- - unpack one line from Atoms section of data file - initialize other atom quantities - ------------------------------------------------------------------------- */ - -void AtomVecSMD::data_atom(double *coord, imageint imagetmp, char **values) { - int nlocal = atom->nlocal; - if (nlocal == nmax) - grow(0); - - tag[nlocal] = utils::tnumeric(FLERR,values[0],true,lmp); - - type[nlocal] = utils::inumeric(FLERR,values[1],true,lmp); - if (type[nlocal] <= 0 || type[nlocal] > atom->ntypes) - error->one(FLERR, "Invalid atom type in Atoms section of data file"); - - molecule[nlocal] = utils::tnumeric(FLERR,values[2],true,lmp); - if (molecule[nlocal] <= 0) - error->one(FLERR, "Invalid molecule in Atoms section of data file"); - - vfrac[nlocal] = utils::numeric(FLERR,values[3],true,lmp); - if (vfrac[nlocal] < 0.0) - error->one(FLERR, "Invalid volume in Atoms section of data file"); - - rmass[nlocal] = utils::numeric(FLERR,values[4],true,lmp); - if (rmass[nlocal] == 0.0) - error->one(FLERR, "Invalid mass in Atoms section of data file"); - - radius[nlocal] = utils::numeric(FLERR,values[5],true,lmp); - if (radius[nlocal] < 0.0) - error->one(FLERR, "Invalid radius in Atoms section of data file"); - - contact_radius[nlocal] = utils::numeric(FLERR,values[6],true,lmp); - if (contact_radius[nlocal] < 0.0) - error->one(FLERR, "Invalid contact radius in Atoms section of data file"); - - e[nlocal] = 0.0; - - x0[nlocal][0] = utils::numeric(FLERR,values[7],true,lmp); - x0[nlocal][1] = utils::numeric(FLERR,values[8],true,lmp); - x0[nlocal][2] = utils::numeric(FLERR,values[9],true,lmp); - - x[nlocal][0] = coord[0]; - x[nlocal][1] = coord[1]; - x[nlocal][2] = coord[2]; - - image[nlocal] = imagetmp; - - mask[nlocal] = 1; - v[nlocal][0] = 0.0; - v[nlocal][1] = 0.0; - v[nlocal][2] = 0.0; - vest[nlocal][0] = 0.0; - vest[nlocal][1] = 0.0; - vest[nlocal][2] = 0.0; - - damage[nlocal] = 0.0; - - eff_plastic_strain[nlocal] = 0.0; - eff_plastic_strain_rate[nlocal] = 0.0; - - for (int k = 0; k < NMAT_FULL; k++) { - smd_data_9[nlocal][k] = 0.0; - } - - for (int k = 0; k < NMAT_SYMM; k++) { - tlsph_stress[nlocal][k] = 0.0; - } - - smd_data_9[nlocal][0] = 1.0; // xx - smd_data_9[nlocal][4] = 1.0; // yy - smd_data_9[nlocal][8] = 1.0; // zz - - atom->nlocal++; -} - -/* ---------------------------------------------------------------------- - unpack hybrid quantities from one line in Atoms section of data file - initialize other atom quantities for this sub-style - ------------------------------------------------------------------------- */ - -int AtomVecSMD::data_atom_hybrid(int /*nlocal*/, char **/*values*/) { - error->one(FLERR, "hybrid atom style functionality not yet implemented for atom style smd"); - return -1; -} - -/* ---------------------------------------------------------------------- - unpack one line from Velocities section of data file - ------------------------------------------------------------------------- */ - -void AtomVecSMD::data_vel(int m, char **values) { - v[m][0] = utils::numeric(FLERR,values[0],true,lmp); - v[m][1] = utils::numeric(FLERR,values[1],true,lmp); - v[m][2] = utils::numeric(FLERR,values[2],true,lmp); - vest[m][0] = utils::numeric(FLERR,values[0],true,lmp); - vest[m][1] = utils::numeric(FLERR,values[1],true,lmp); - vest[m][2] = utils::numeric(FLERR,values[2],true,lmp); -} - -/* ---------------------------------------------------------------------- - unpack hybrid quantities from one line in Velocities section of data file - ------------------------------------------------------------------------- */ - -int AtomVecSMD::data_vel_hybrid(int /*m*/, char **/*values*/) { - error->one(FLERR, "hybrid atom style functionality not yet implemented for atom style smd"); - return 0; -} - -/* ---------------------------------------------------------------------- - pack atom info for data file including 3 image flags - ------------------------------------------------------------------------- */ - -void AtomVecSMD::pack_data(double **buf) { - int nlocal = atom->nlocal; - for (int i = 0; i < nlocal; i++) { - buf[i][0] = ubuf(tag[i]).d; - buf[i][1] = ubuf(type[i]).d; - buf[i][2] = ubuf(molecule[i]).d; - buf[i][3] = vfrac[i]; - buf[i][4] = rmass[i]; - buf[i][5] = radius[i]; - buf[i][6] = contact_radius[i]; - - buf[i][7] = x[i][0]; - buf[i][8] = x[i][1]; - buf[i][9] = x[i][2]; - - buf[i][10] = x0[i][0]; - buf[i][11] = x0[i][1]; - buf[i][12] = x0[i][2]; - - buf[i][13] = ubuf((image[i] & IMGMASK) - IMGMAX).d; - buf[i][14] = ubuf((image[i] >> IMGBITS & IMGMASK) - IMGMAX).d; - buf[i][15] = ubuf((image[i] >> IMG2BITS) - IMGMAX).d; - } -} - -/* ---------------------------------------------------------------------- - pack hybrid atom info for data file - ------------------------------------------------------------------------- */ - -int AtomVecSMD::pack_data_hybrid(int /*i*/, double * /*buf*/) { - error->one(FLERR, "hybrid atom style functionality not yet implemented for atom style smd"); - return -1; -} - -/* ---------------------------------------------------------------------- - write atom info to data file including 3 image flags - ------------------------------------------------------------------------- */ - -void AtomVecSMD::write_data(FILE *fp, int n, double **buf) { - for (int i = 0; i < n; i++) - fprintf(fp, - TAGINT_FORMAT - " %d %d %-1.16e %-1.16e %-1.16e %-1.16e %-1.16e %-1.16e %-1.16e %-1.16e %-1.16e %-1.16e\n", (tagint) ubuf(buf[i][0]).i, - (int) ubuf(buf[i][1]).i, (int) ubuf(buf[i][2]).i, buf[i][3], buf[i][4], buf[i][5], buf[i][6], buf[i][7], buf[i][8], - buf[i][9], buf[i][10], buf[i][11], buf[i][12]); -} - -/* ---------------------------------------------------------------------- - write hybrid atom info to data file - ------------------------------------------------------------------------- */ - -int AtomVecSMD::write_data_hybrid(FILE * /*fp*/, double * /*buf*/) { - error->one(FLERR, "hybrid atom style functionality not yet implemented for atom style smd"); - return -1; -} - -/* ---------------------------------------------------------------------- - pack velocity info for data file - ------------------------------------------------------------------------- */ - -void AtomVecSMD::pack_vel(double **buf) { - int nlocal = atom->nlocal; - for (int i = 0; i < nlocal; i++) { - buf[i][0] = ubuf(tag[i]).d; - buf[i][1] = v[i][0]; - buf[i][2] = v[i][1]; - buf[i][3] = v[i][2]; - } -} - -/* ---------------------------------------------------------------------- - pack hybrid velocity info for data file - ------------------------------------------------------------------------- */ - -int AtomVecSMD::pack_vel_hybrid(int /*i*/, double * /*buf*/) { - error->one(FLERR, "hybrid atom style functionality not yet implemented for atom style smd"); - return 0; -} - -/* ---------------------------------------------------------------------- - write velocity info to data file - ------------------------------------------------------------------------- */ - -void AtomVecSMD::write_vel(FILE *fp, int n, double **buf) { - for (int i = 0; i < n; i++) - fprintf(fp, TAGINT_FORMAT - " %-1.16e %-1.16e %-1.16e\n", (tagint) ubuf(buf[i][0]).i, buf[i][1], buf[i][2], buf[i][3]); -} - -/* ---------------------------------------------------------------------- - write hybrid velocity info to data file - ------------------------------------------------------------------------- */ - -int AtomVecSMD::write_vel_hybrid(FILE * /*fp*/, double * /*buf*/) { - error->one(FLERR, "hybrid atom style functionality not yet implemented for atom style smd"); - return 3; -} - -/* ---------------------------------------------------------------------- - return # of bytes of allocated memory - ------------------------------------------------------------------------- */ - -bigint AtomVecSMD::memory_usage() { - bigint bytes = 0; - - if (atom->memcheck("tag")) - bytes += memory->usage(tag, nmax); - if (atom->memcheck("type")) - bytes += memory->usage(type, nmax); - if (atom->memcheck("molecule")) - bytes += memory->usage(molecule, nmax); - if (atom->memcheck("mask")) - bytes += memory->usage(mask, nmax); - if (atom->memcheck("image")) - bytes += memory->usage(image, nmax); - if (atom->memcheck("x")) - bytes += memory->usage(x, nmax, 3); - if (atom->memcheck("v")) - bytes += memory->usage(v, nmax, 3); - if (atom->memcheck("vest")) - bytes += memory->usage(vest, nmax, 3); - if (atom->memcheck("f")) - bytes += memory->usage(f, nmax * comm->nthreads, 3); - - if (atom->memcheck("radius")) - bytes += memory->usage(radius, nmax); - if (atom->memcheck("contact_radius")) - bytes += memory->usage(contact_radius, nmax); - if (atom->memcheck("vfrac")) - bytes += memory->usage(vfrac, nmax); - if (atom->memcheck("rmass")) - bytes += memory->usage(rmass, nmax); - if (atom->memcheck("eff_plastic_strain")) - bytes += memory->usage(eff_plastic_strain, nmax); - if (atom->memcheck("eff_plastic_strain_rate")) - bytes += memory->usage(eff_plastic_strain_rate, nmax); - if (atom->memcheck("e")) - bytes += memory->usage(e, nmax); - if (atom->memcheck("de")) - bytes += memory->usage(de, nmax); - - if (atom->memcheck("smd_data_9")) - bytes += memory->usage(smd_data_9, nmax, NMAT_FULL); - if (atom->memcheck("tlsph_stress")) - bytes += memory->usage(tlsph_stress, nmax, NMAT_SYMM); - - if (atom->memcheck("damage")) - bytes += memory->usage(damage, nmax); - - return bytes; -} - -/* ---------------------------------------------------------------------- */ - -void AtomVecSMD::force_clear(int n, size_t nbytes) { - //printf("clearing force on atom %d", n); - memset(&de[n], 0, nbytes); - memset(&f[0][0], 0, 3 * nbytes); + smd_data_9[ilocal][0] = 1.0; // xx + smd_data_9[ilocal][4] = 1.0; // yy + smd_data_9[ilocal][8] = 1.0; // zz } diff --git a/src/USER-SMD/atom_vec_smd.h b/src/USER-SMD/atom_vec_smd.h index 34fdfc1f76fbb7ce3ffb9265a979a009eaf7d5ca..055ad795c42168ac4eb51de9532f40c42b9a1b3c 100644 --- a/src/USER-SMD/atom_vec_smd.h +++ b/src/USER-SMD/atom_vec_smd.h @@ -9,7 +9,6 @@ * * ----------------------------------------------------------------------- */ - /* ---------------------------------------------------------------------- LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator http://lammps.sandia.gov, Sandia National Laboratories @@ -39,63 +38,17 @@ namespace LAMMPS_NS { class AtomVecSMD : public AtomVec { public: AtomVecSMD(class LAMMPS *); - ~AtomVecSMD() {} - void init(); - void grow(int); - void grow_reset(); - void copy(int, int, int); + + void grow_pointers(); void force_clear(int, size_t); - int pack_comm(int, int *, double *, int, int *); - int pack_comm_vel(int, int *, double *, int, int *); - int pack_comm_hybrid(int, int *, double *); - void unpack_comm(int, int, double *); - void unpack_comm_vel(int, int, double *); - int unpack_comm_hybrid(int, int, double *); - int pack_reverse(int, int, double *); - int pack_reverse_hybrid(int, int, double *); - void unpack_reverse(int, int *, double *); - int unpack_reverse_hybrid(int, int *, double *); - int pack_border(int, int *, double *, int, int *); - int pack_border_vel(int, int *, double *, int, int *); - int pack_border_hybrid(int, int *, double *); - void unpack_border(int, int, double *); - void unpack_border_vel(int, int, double *); - int unpack_border_hybrid(int, int, double *); - int pack_exchange(int, double *); - int unpack_exchange(double *); - int size_restart(); - int pack_restart(int, double *); - int unpack_restart(double *); - void create_atom(int, double *); - void data_atom(double *, imageint, char **); - int data_atom_hybrid(int, char **); - void data_vel(int, char **); - int data_vel_hybrid(int, char **); - void pack_data(double **); - int pack_data_hybrid(int, double *); - void write_data(FILE *, int, double **); - int write_data_hybrid(FILE *, double *); - void pack_vel(double **); - int pack_vel_hybrid(int, double *); - void write_vel(FILE *, int, double **); - int write_vel_hybrid(FILE *, double *); - bigint memory_usage(); + void create_atom_post(int); + void data_atom_post(int); private: - tagint *tag; - int *type,*mask; - imageint *image; - double **x,**v,**f; - double *radius,*rmass; - tagint *molecule; - double *vfrac,**x0,*contact_radius, **smd_data_9, *e, *de, **vest; - double **tlsph_stress; - double *eff_plastic_strain; - double *damage; - double *eff_plastic_strain_rate; - - + double *esph,*desph,*vfrac,*rmass,*radius,*contact_radius; + double *eff_plastic_strain,*eff_plastic_strain_rate,*damage; + double **x0,**smd_data_9,**smd_stress,**vest; }; } diff --git a/src/USER-SMD/compute_smd_internal_energy.cpp b/src/USER-SMD/compute_smd_internal_energy.cpp index f88da8bc33411950599dd276507aa540d1bb88a7..90ddb748399627a0dc52a3cd56ff019b57b1612e 100644 --- a/src/USER-SMD/compute_smd_internal_energy.cpp +++ b/src/USER-SMD/compute_smd_internal_energy.cpp @@ -40,7 +40,7 @@ ComputeSMDInternalEnergy::ComputeSMDInternalEnergy(LAMMPS *lmp, int narg, char * Compute(lmp, narg, arg) { if (narg != 3) error->all(FLERR,"Illegal compute smd/internal_energy command"); - if (atom->e_flag != 1) error->all(FLERR,"compute smd/internal_energy command requires atom_style with internal_energy (e.g. smd)"); + if (atom->esph_flag != 1) error->all(FLERR,"compute smd/internal_energy command requires atom_style with internal_energy (e.g. smd)"); peratom_flag = 1; size_peratom_cols = 0; @@ -83,13 +83,13 @@ void ComputeSMDInternalEnergy::compute_peratom() vector_atom = internal_energy_vector; } - double *e = atom->e; + double *esph = atom->esph; int *mask = atom->mask; int nlocal = atom->nlocal; for (int i = 0; i < nlocal; i++) { if (mask[i] & groupbit) { - internal_energy_vector[i] = e[i]; + internal_energy_vector[i] = esph[i]; } else { internal_energy_vector[i] = 0.0; diff --git a/src/USER-SMD/fix_smd_integrate_tlsph.cpp b/src/USER-SMD/fix_smd_integrate_tlsph.cpp index 8464bed60909067cb7ae620fa672bff62f59190f..ed039d39d4d6acb11d6b872b96495d720a974147 100644 --- a/src/USER-SMD/fix_smd_integrate_tlsph.cpp +++ b/src/USER-SMD/fix_smd_integrate_tlsph.cpp @@ -203,8 +203,8 @@ void FixSMDIntegrateTlsph::final_integrate() { double **v = atom->v; double **f = atom->f; - double *e = atom->e; - double *de = atom->de; + double *esph = atom->esph; + double *desph = atom->desph; double *rmass = atom->rmass; int *mask = atom->mask; int nlocal = atom->nlocal; @@ -231,7 +231,7 @@ void FixSMDIntegrateTlsph::final_integrate() { } } - e[i] += dtv * de[i]; + esph[i] += dtv * desph[i]; } } } diff --git a/src/USER-SMD/fix_smd_integrate_ulsph.cpp b/src/USER-SMD/fix_smd_integrate_ulsph.cpp index 0f0d224f95c3ad0e2b883e3d97a11d179726efd3..4978416e668109a415a2bbcff5b0ec7495333583 100644 --- a/src/USER-SMD/fix_smd_integrate_ulsph.cpp +++ b/src/USER-SMD/fix_smd_integrate_ulsph.cpp @@ -42,7 +42,7 @@ using namespace FixConst; FixSMDIntegrateUlsph::FixSMDIntegrateUlsph(LAMMPS *lmp, int narg, char **arg) : Fix(lmp, narg, arg) { - if ((atom->e_flag != 1) || (atom->vfrac_flag != 1)) + if ((atom->esph_flag != 1) || (atom->vfrac_flag != 1)) error->all(FLERR, "fix smd/integrate_ulsph command requires atom_style with both energy and volume"); if (narg < 3) @@ -239,8 +239,8 @@ void FixSMDIntegrateUlsph::initial_integrate(int /*vflag*/) { void FixSMDIntegrateUlsph::final_integrate() { double **v = atom->v; double **f = atom->f; - double *e = atom->e; - double *de = atom->de; + double *esph = atom->esph; + double *desph = atom->desph; double *vfrac = atom->vfrac; double *radius = atom->radius; double *contact_radius = atom->contact_radius; @@ -286,7 +286,7 @@ void FixSMDIntegrateUlsph::final_integrate() { } } - e[i] += dtf * de[i]; + esph[i] += dtf * desph[i]; if (adjust_radius_flag) { if (nn[i] < min_nn) { diff --git a/src/USER-SMD/pair_smd_tlsph.cpp b/src/USER-SMD/pair_smd_tlsph.cpp index cad9923054d36cb787f1ba366c2a5cad68d10221..c932086a3279193adaa96f6fc268c862519e94fb 100644 --- a/src/USER-SMD/pair_smd_tlsph.cpp +++ b/src/USER-SMD/pair_smd_tlsph.cpp @@ -418,7 +418,7 @@ void PairTlsph::ComputeForces(int eflag, int vflag) { double **x0 = atom->x0; double **f = atom->f; double *vfrac = atom->vfrac; - double *de = atom->de; + double *desph = atom->desph; double *rmass = atom->rmass; double *radius = atom->radius; double *damage = atom->damage; @@ -592,7 +592,7 @@ void PairTlsph::ComputeForces(int eflag, int vflag) { f[i][0] += sumForces(0); f[i][1] += sumForces(1); f[i][2] += sumForces(2); - de[i] += deltaE; + desph[i] += deltaE; // tally atomistic stress tensor if (evflag) { @@ -703,7 +703,7 @@ void PairTlsph::AssembleStress() { double *damage = atom->damage; double *rmass = atom->rmass; double *vfrac = atom->vfrac; - double *e = atom->e; + double *esph = atom->esph; double pInitial, d_iso, pFinal, p_rate, plastic_strain_increment; int i, itype; int nlocal = atom->nlocal; @@ -745,7 +745,7 @@ void PairTlsph::AssembleStress() { d_iso = D[i].trace(); // volumetric part of stretch rate d_dev = Deviator(D[i]); // deviatoric part of stretch rate strain = 0.5 * (Fincr[i].transpose() * Fincr[i] - eye); - mass_specific_energy = e[i] / rmass[i]; // energy per unit mass + mass_specific_energy = esph[i] / rmass[i]; // energy per unit mass rho = rmass[i] / (detF[i] * vfrac[i]); vol_specific_energy = mass_specific_energy * rho; // energy per current volume @@ -2034,12 +2034,12 @@ void PairTlsph::ComputeStressDeviator(const int i, const Matrix3d sigmaInitial_d int *type = atom->type; double *rmass = atom->rmass; //double *vfrac = atom->vfrac; - double *e = atom->e; + double *esph = atom->esph; double dt = update->dt; double yieldStress; int itype; - double mass_specific_energy = e[i] / rmass[i]; // energy per unit mass + double mass_specific_energy = esph[i] / rmass[i]; // energy per unit mass plastic_strain_increment = 0.0; itype = type[i]; diff --git a/src/USER-SMD/pair_smd_ulsph.cpp b/src/USER-SMD/pair_smd_ulsph.cpp index b53eb779de6dd1dc8ba38ec88554581d41736aee..8c8da7b2bc842dbf7a6e5cba7f9459bac0e24a1f 100644 --- a/src/USER-SMD/pair_smd_ulsph.cpp +++ b/src/USER-SMD/pair_smd_ulsph.cpp @@ -357,7 +357,7 @@ void PairULSPH::compute(int eflag, int vflag) { double **vint = atom->v; // Velocity-Verlet algorithm velocities double **f = atom->f; double *vfrac = atom->vfrac; - double *de = atom->de; + double *desph = atom->desph; double *rmass = atom->rmass; double *radius = atom->radius; double *contact_radius = atom->contact_radius; @@ -586,7 +586,7 @@ void PairULSPH::compute(int eflag, int vflag) { f[i][0] += sumForces(0); f[i][1] += sumForces(1); f[i][2] += sumForces(2); - de[i] += deltaE; + desph[i] += deltaE; // accumulate smooth velocities shepardWeight[i] += jvol * wf; @@ -597,7 +597,7 @@ void PairULSPH::compute(int eflag, int vflag) { f[j][0] -= sumForces(0); f[j][1] -= sumForces(1); f[j][2] -= sumForces(2); - de[j] += deltaE; + desph[j] += deltaE; shepardWeight[j] += ivol * wf; smoothVel[j] -= ivol * wf * dvint; @@ -639,7 +639,7 @@ void PairULSPH::AssembleStressTensor() { double *rmass = atom->rmass; double *eff_plastic_strain = atom->eff_plastic_strain; double **tlsph_stress = atom->smd_stress; - double *e = atom->e; + double *esph = atom->esph; int *type = atom->type; int i, itype; int nlocal = atom->nlocal; @@ -686,7 +686,7 @@ void PairULSPH::AssembleStressTensor() { break; case EOS_PERFECT_GAS: - PerfectGasEOS(Lookup[EOS_PERFECT_GAS_GAMMA][itype], vol, rmass[i], e[i], newPressure, c0[i]); + PerfectGasEOS(Lookup[EOS_PERFECT_GAS_GAMMA][itype], vol, rmass[i], esph[i], newPressure, c0[i]); break; case EOS_LINEAR: newPressure = Lookup[BULK_MODULUS][itype] * (rho / Lookup[REFERENCE_DENSITY][itype] - 1.0); diff --git a/src/USER-SPH/atom_vec_meso.cpp b/src/USER-SPH/atom_vec_meso.cpp deleted file mode 100644 index cd7c2251ab031726afa92f98cc14c9e52416a2f0..0000000000000000000000000000000000000000 --- a/src/USER-SPH/atom_vec_meso.cpp +++ /dev/null @@ -1,1047 +0,0 @@ -/* ---------------------------------------------------------------------- - LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator - http://lammps.sandia.gov, Sandia National Laboratories - Steve Plimpton, sjplimp@sandia.gov - - Copyright (2003) Sandia Corporation. Under the terms of Contract - DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains - certain rights in this software. This software is distributed under - the GNU General Public License. - - See the README file in the top-level LAMMPS directory. - ------------------------------------------------------------------------- */ - -#include "atom_vec_meso.h" -#include -#include "atom.h" -#include "comm.h" -#include "domain.h" -#include "modify.h" -#include "fix.h" -#include "memory.h" -#include "error.h" -#include "utils.h" - -using namespace LAMMPS_NS; - -/* ---------------------------------------------------------------------- */ - -AtomVecMeso::AtomVecMeso(LAMMPS *lmp) : AtomVec(lmp) -{ - molecular = 0; - mass_type = 1; - forceclearflag = 1; - - comm_x_only = 0; // we communicate not only x forward but also vest ... - comm_f_only = 0; // we also communicate de and drho in reverse direction - size_forward = 8; // 3 + rho + e + vest[3], that means we may only communicate 5 in hybrid - size_reverse = 5; // 3 + drho + de - size_border = 12; // 6 + rho + e + vest[3] + cv - size_velocity = 3; - size_data_atom = 8; - size_data_vel = 4; - xcol_data = 6; - - atom->e_flag = 1; - atom->rho_flag = 1; - atom->cv_flag = 1; - atom->vest_flag = 1; -} - -/* ---------------------------------------------------------------------- - grow atom arrays - n = 0 grows arrays by a chunk - n > 0 allocates arrays to size n - ------------------------------------------------------------------------- */ - -void AtomVecMeso::grow(int n) -{ - if (n == 0) grow_nmax(); - else nmax = n; - atom->nmax = nmax; - if (nmax < 0 || nmax > MAXSMALLINT) - error->one(FLERR,"Per-processor system is too big"); - - tag = memory->grow(atom->tag, nmax, "atom:tag"); - type = memory->grow(atom->type, nmax, "atom:type"); - mask = memory->grow(atom->mask, nmax, "atom:mask"); - image = memory->grow(atom->image, nmax, "atom:image"); - x = memory->grow(atom->x, nmax, 3, "atom:x"); - v = memory->grow(atom->v, nmax, 3, "atom:v"); - f = memory->grow(atom->f, nmax*comm->nthreads, 3, "atom:f"); - - rho = memory->grow(atom->rho, nmax, "atom:rho"); - drho = memory->grow(atom->drho, nmax*comm->nthreads, "atom:drho"); - e = memory->grow(atom->e, nmax, "atom:e"); - de = memory->grow(atom->de, nmax*comm->nthreads, "atom:de"); - vest = memory->grow(atom->vest, nmax, 3, "atom:vest"); - cv = memory->grow(atom->cv, nmax, "atom:cv"); - - if (atom->nextra_grow) - for (int iextra = 0; iextra < atom->nextra_grow; iextra++) - modify->fix[atom->extra_grow[iextra]]->grow_arrays(nmax); -} - -/* ---------------------------------------------------------------------- - reset local array ptrs - ------------------------------------------------------------------------- */ - -void AtomVecMeso::grow_reset() { - tag = atom->tag; - type = atom->type; - mask = atom->mask; - image = atom->image; - x = atom->x; - v = atom->v; - f = atom->f; - rho = atom->rho; - drho = atom->drho; - e = atom->e; - de = atom->de; - vest = atom->vest; - cv = atom->cv; -} - -/* ---------------------------------------------------------------------- */ - -void AtomVecMeso::copy(int i, int j, int delflag) { - //printf("in AtomVecMeso::copy\n"); - tag[j] = tag[i]; - type[j] = type[i]; - mask[j] = mask[i]; - image[j] = image[i]; - x[j][0] = x[i][0]; - x[j][1] = x[i][1]; - x[j][2] = x[i][2]; - v[j][0] = v[i][0]; - v[j][1] = v[i][1]; - v[j][2] = v[i][2]; - - rho[j] = rho[i]; - drho[j] = drho[i]; - e[j] = e[i]; - de[j] = de[i]; - cv[j] = cv[i]; - vest[j][0] = vest[i][0]; - vest[j][1] = vest[i][1]; - vest[j][2] = vest[i][2]; - - if (atom->nextra_grow) - for (int iextra = 0; iextra < atom->nextra_grow; iextra++) - modify->fix[atom->extra_grow[iextra]]->copy_arrays(i, j,delflag); -} - -/* ---------------------------------------------------------------------- */ - -void AtomVecMeso::force_clear(int n, size_t nbytes) -{ - memset(&de[n],0,nbytes); - memset(&drho[n],0,nbytes); -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecMeso::pack_comm_hybrid(int n, int *list, double *buf) { - //printf("in AtomVecMeso::pack_comm_hybrid\n"); - int i, j, m; - - m = 0; - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = rho[j]; - buf[m++] = e[j]; - buf[m++] = vest[j][0]; - buf[m++] = vest[j][1]; - buf[m++] = vest[j][2]; - } - return m; -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecMeso::unpack_comm_hybrid(int n, int first, double *buf) { - //printf("in AtomVecMeso::unpack_comm_hybrid\n"); - int i, m, last; - - m = 0; - last = first + n; - for (i = first; i < last; i++) { - rho[i] = buf[m++]; - e[i] = buf[m++]; - vest[i][0] = buf[m++]; - vest[i][1] = buf[m++]; - vest[i][2] = buf[m++]; - } - return m; -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecMeso::pack_border_hybrid(int n, int *list, double *buf) { - //printf("in AtomVecMeso::pack_border_hybrid\n"); - int i, j, m; - - m = 0; - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = rho[j]; - buf[m++] = e[j]; - buf[m++] = vest[j][0]; - buf[m++] = vest[j][1]; - buf[m++] = vest[j][2]; - } - return m; -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecMeso::unpack_border_hybrid(int n, int first, double *buf) { - //printf("in AtomVecMeso::unpack_border_hybrid\n"); - int i, m, last; - - m = 0; - last = first + n; - for (i = first; i < last; i++) { - rho[i] = buf[m++]; - e[i] = buf[m++]; - vest[i][0] = buf[m++]; - vest[i][1] = buf[m++]; - vest[i][2] = buf[m++]; - } - return m; -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecMeso::pack_reverse_hybrid(int n, int first, double *buf) { - //printf("in AtomVecMeso::pack_reverse_hybrid\n"); - int i, m, last; - - m = 0; - last = first + n; - for (i = first; i < last; i++) { - buf[m++] = drho[i]; - buf[m++] = de[i]; - } - return m; -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecMeso::unpack_reverse_hybrid(int n, int *list, double *buf) { - //printf("in AtomVecMeso::unpack_reverse_hybrid\n"); - int i, j, m; - - m = 0; - for (i = 0; i < n; i++) { - j = list[i]; - drho[j] += buf[m++]; - de[j] += buf[m++]; - } - return m; -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecMeso::pack_comm(int n, int *list, double *buf, int pbc_flag, - int *pbc) { - //printf("in AtomVecMeso::pack_comm\n"); - int i, j, m; - double dx, dy, dz; - - m = 0; - if (pbc_flag == 0) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = x[j][0]; - buf[m++] = x[j][1]; - buf[m++] = x[j][2]; - buf[m++] = rho[j]; - buf[m++] = e[j]; - buf[m++] = vest[j][0]; - buf[m++] = vest[j][1]; - buf[m++] = vest[j][2]; - } - } else { - if (domain->triclinic == 0) { - dx = pbc[0] * domain->xprd; - dy = pbc[1] * domain->yprd; - dz = pbc[2] * domain->zprd; - } else { - dx = pbc[0] * domain->xprd + pbc[5] * domain->xy + pbc[4] * domain->xz; - dy = pbc[1] * domain->yprd + pbc[3] * domain->yz; - dz = pbc[2] * domain->zprd; - } - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = x[j][0] + dx; - buf[m++] = x[j][1] + dy; - buf[m++] = x[j][2] + dz; - buf[m++] = rho[j]; - buf[m++] = e[j]; - buf[m++] = vest[j][0]; - buf[m++] = vest[j][1]; - buf[m++] = vest[j][2]; - } - } - return m; -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecMeso::pack_comm_vel(int n, int *list, double *buf, int pbc_flag, - int *pbc) { - //printf("in AtomVecMeso::pack_comm_vel\n"); - int i, j, m; - double dx, dy, dz; - - m = 0; - if (pbc_flag == 0) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = x[j][0]; - buf[m++] = x[j][1]; - buf[m++] = x[j][2]; - buf[m++] = v[j][0]; - buf[m++] = v[j][1]; - buf[m++] = v[j][2]; - buf[m++] = rho[j]; - buf[m++] = e[j]; - buf[m++] = vest[j][0]; - buf[m++] = vest[j][1]; - buf[m++] = vest[j][2]; - } - } else { - if (domain->triclinic == 0) { - dx = pbc[0] * domain->xprd; - dy = pbc[1] * domain->yprd; - dz = pbc[2] * domain->zprd; - } else { - dx = pbc[0] * domain->xprd + pbc[5] * domain->xy + pbc[4] * domain->xz; - dy = pbc[1] * domain->yprd + pbc[3] * domain->yz; - dz = pbc[2] * domain->zprd; - } - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = x[j][0] + dx; - buf[m++] = x[j][1] + dy; - buf[m++] = x[j][2] + dz; - buf[m++] = v[j][0]; - buf[m++] = v[j][1]; - buf[m++] = v[j][2]; - buf[m++] = rho[j]; - buf[m++] = e[j]; - buf[m++] = vest[j][0]; - buf[m++] = vest[j][1]; - buf[m++] = vest[j][2]; - } - } - return m; -} - -/* ---------------------------------------------------------------------- */ - -void AtomVecMeso::unpack_comm(int n, int first, double *buf) { - //printf("in AtomVecMeso::unpack_comm\n"); - int i, m, last; - - m = 0; - last = first + n; - for (i = first; i < last; i++) { - x[i][0] = buf[m++]; - x[i][1] = buf[m++]; - x[i][2] = buf[m++]; - rho[i] = buf[m++]; - e[i] = buf[m++]; - vest[i][0] = buf[m++]; - vest[i][1] = buf[m++]; - vest[i][2] = buf[m++]; - } -} - -/* ---------------------------------------------------------------------- */ - -void AtomVecMeso::unpack_comm_vel(int n, int first, double *buf) { - //printf("in AtomVecMeso::unpack_comm_vel\n"); - int i, m, last; - - m = 0; - last = first + n; - for (i = first; i < last; i++) { - x[i][0] = buf[m++]; - x[i][1] = buf[m++]; - x[i][2] = buf[m++]; - v[i][0] = buf[m++]; - v[i][1] = buf[m++]; - v[i][2] = buf[m++]; - rho[i] = buf[m++]; - e[i] = buf[m++]; - vest[i][0] = buf[m++]; - vest[i][1] = buf[m++]; - vest[i][2] = buf[m++]; - } -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecMeso::pack_reverse(int n, int first, double *buf) { - //printf("in AtomVecMeso::pack_reverse\n"); - int i, m, last; - - m = 0; - last = first + n; - for (i = first; i < last; i++) { - buf[m++] = f[i][0]; - buf[m++] = f[i][1]; - buf[m++] = f[i][2]; - buf[m++] = drho[i]; - buf[m++] = de[i]; - } - return m; -} - -/* ---------------------------------------------------------------------- */ - -void AtomVecMeso::unpack_reverse(int n, int *list, double *buf) { - //printf("in AtomVecMeso::unpack_reverse\n"); - int i, j, m; - - m = 0; - for (i = 0; i < n; i++) { - j = list[i]; - f[j][0] += buf[m++]; - f[j][1] += buf[m++]; - f[j][2] += buf[m++]; - drho[j] += buf[m++]; - de[j] += buf[m++]; - } -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecMeso::pack_border(int n, int *list, double *buf, int pbc_flag, - int *pbc) { - //printf("in AtomVecMeso::pack_border\n"); - int i, j, m; - double dx, dy, dz; - - m = 0; - if (pbc_flag == 0) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = x[j][0]; - buf[m++] = x[j][1]; - buf[m++] = x[j][2]; - buf[m++] = ubuf(tag[j]).d; - buf[m++] = ubuf(type[j]).d; - buf[m++] = ubuf(mask[j]).d; - buf[m++] = rho[j]; - buf[m++] = e[j]; - buf[m++] = cv[j]; - buf[m++] = vest[j][0]; - buf[m++] = vest[j][1]; - buf[m++] = vest[j][2]; - } - } else { - if (domain->triclinic == 0) { - dx = pbc[0] * domain->xprd; - dy = pbc[1] * domain->yprd; - dz = pbc[2] * domain->zprd; - } else { - dx = pbc[0]; - dy = pbc[1]; - dz = pbc[2]; - } - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = x[j][0] + dx; - buf[m++] = x[j][1] + dy; - buf[m++] = x[j][2] + dz; - buf[m++] = ubuf(tag[j]).d; - buf[m++] = ubuf(type[j]).d; - buf[m++] = ubuf(mask[j]).d; - buf[m++] = rho[j]; - buf[m++] = e[j]; - buf[m++] = cv[j]; - buf[m++] = vest[j][0]; - buf[m++] = vest[j][1]; - buf[m++] = vest[j][2]; - } - } - - if (atom->nextra_border) - for (int iextra = 0; iextra < atom->nextra_border; iextra++) - m += modify->fix[atom->extra_border[iextra]]->pack_border(n,list,&buf[m]); - - return m; -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecMeso::pack_border_vel(int n, int *list, double *buf, int pbc_flag, - int *pbc) -{ - int i,j,m; - double dx,dy,dz,dvx,dvy,dvz; - - m = 0; - if (pbc_flag == 0) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = x[j][0]; - buf[m++] = x[j][1]; - buf[m++] = x[j][2]; - buf[m++] = ubuf(tag[j]).d; - buf[m++] = ubuf(type[j]).d; - buf[m++] = ubuf(mask[j]).d; - buf[m++] = v[j][0]; - buf[m++] = v[j][1]; - buf[m++] = v[j][2]; - buf[m++] = rho[j]; - buf[m++] = e[j]; - buf[m++] = cv[j]; - buf[m++] = vest[j][0]; - buf[m++] = vest[j][1]; - buf[m++] = vest[j][2]; - } - } else { - if (domain->triclinic == 0) { - dx = pbc[0] * domain->xprd; - dy = pbc[1] * domain->yprd; - dz = pbc[2] * domain->zprd; - } else { - dx = pbc[0]; - dy = pbc[1]; - dz = pbc[2]; - } - if (!deform_vremap) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = x[j][0] + dx; - buf[m++] = x[j][1] + dy; - buf[m++] = x[j][2] + dz; - buf[m++] = ubuf(tag[j]).d; - buf[m++] = ubuf(type[j]).d; - buf[m++] = ubuf(mask[j]).d; - buf[m++] = v[j][0]; - buf[m++] = v[j][1]; - buf[m++] = v[j][2]; - buf[m++] = rho[j]; - buf[m++] = e[j]; - buf[m++] = cv[j]; - buf[m++] = vest[j][0]; - buf[m++] = vest[j][1]; - buf[m++] = vest[j][2]; - } - } else { - dvx = pbc[0] * h_rate[0] + pbc[5] * h_rate[5] + pbc[4] * h_rate[4]; - dvy = pbc[1] * h_rate[1] + pbc[3] * h_rate[3]; - dvz = pbc[2] * h_rate[2]; - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = x[j][0] + dx; - buf[m++] = x[j][1] + dy; - buf[m++] = x[j][2] + dz; - buf[m++] = ubuf(tag[j]).d; - buf[m++] = ubuf(type[j]).d; - buf[m++] = ubuf(mask[j]).d; - if (mask[i] & deform_groupbit) { - buf[m++] = v[j][0] + dvx; - buf[m++] = v[j][1] + dvy; - buf[m++] = v[j][2] + dvz; - buf[m++] = vest[j][0] + dvx; - buf[m++] = vest[j][1] + dvy; - buf[m++] = vest[j][2] + dvz; - } else { - buf[m++] = v[j][0]; - buf[m++] = v[j][1]; - buf[m++] = v[j][2]; - buf[m++] = vest[j][0]; - buf[m++] = vest[j][1]; - buf[m++] = vest[j][2]; - } - buf[m++] = rho[j]; - buf[m++] = e[j]; - buf[m++] = cv[j]; - } - } - } - - if (atom->nextra_border) - for (int iextra = 0; iextra < atom->nextra_border; iextra++) - m += modify->fix[atom->extra_border[iextra]]->pack_border(n,list,&buf[m]); - - return m; -} - -/* ---------------------------------------------------------------------- */ - -void AtomVecMeso::unpack_border(int n, int first, double *buf) { - //printf("in AtomVecMeso::unpack_border\n"); - int i, m, last; - - m = 0; - last = first + n; - for (i = first; i < last; i++) { - if (i == nmax) - grow(0); - x[i][0] = buf[m++]; - x[i][1] = buf[m++]; - x[i][2] = buf[m++]; - tag[i] = (tagint) ubuf(buf[m++]).i; - type[i] = (int) ubuf(buf[m++]).i; - mask[i] = (int) ubuf(buf[m++]).i; - rho[i] = buf[m++]; - e[i] = buf[m++]; - cv[i] = buf[m++]; - vest[i][0] = buf[m++]; - vest[i][1] = buf[m++]; - vest[i][2] = buf[m++]; - } - - if (atom->nextra_border) - for (int iextra = 0; iextra < atom->nextra_border; iextra++) - m += modify->fix[atom->extra_border[iextra]]-> - unpack_border(n,first,&buf[m]); -} - -/* ---------------------------------------------------------------------- */ - -void AtomVecMeso::unpack_border_vel(int n, int first, double *buf) { - //printf("in AtomVecMeso::unpack_border_vel\n"); - int i, m, last; - - m = 0; - last = first + n; - for (i = first; i < last; i++) { - if (i == nmax) - grow(0); - x[i][0] = buf[m++]; - x[i][1] = buf[m++]; - x[i][2] = buf[m++]; - tag[i] = (tagint) ubuf(buf[m++]).i; - type[i] = (int) ubuf(buf[m++]).i; - mask[i] = (int) ubuf(buf[m++]).i; - v[i][0] = buf[m++]; - v[i][1] = buf[m++]; - v[i][2] = buf[m++]; - vest[i][0] = buf[m++]; - vest[i][1] = buf[m++]; - vest[i][2] = buf[m++]; - rho[i] = buf[m++]; - e[i] = buf[m++]; - cv[i] = buf[m++]; - } - - if (atom->nextra_border) - for (int iextra = 0; iextra < atom->nextra_border; iextra++) - m += modify->fix[atom->extra_border[iextra]]-> - unpack_border(n,first,&buf[m]); -} - -/* ---------------------------------------------------------------------- - pack data for atom I for sending to another proc - xyz must be 1st 3 values, so comm::exchange() can test on them - ------------------------------------------------------------------------- */ - -int AtomVecMeso::pack_exchange(int i, double *buf) { - //printf("in AtomVecMeso::pack_exchange\n"); - int m = 1; - buf[m++] = x[i][0]; - buf[m++] = x[i][1]; - buf[m++] = x[i][2]; - buf[m++] = v[i][0]; - buf[m++] = v[i][1]; - buf[m++] = v[i][2]; - buf[m++] = ubuf(tag[i]).d; - buf[m++] = ubuf(type[i]).d; - buf[m++] = ubuf(mask[i]).d; - buf[m++] = ubuf(image[i]).d; - buf[m++] = rho[i]; - buf[m++] = e[i]; - buf[m++] = cv[i]; - buf[m++] = vest[i][0]; - buf[m++] = vest[i][1]; - buf[m++] = vest[i][2]; - - if (atom->nextra_grow) - for (int iextra = 0; iextra < atom->nextra_grow; iextra++) - m += modify->fix[atom->extra_grow[iextra]]->pack_exchange(i, &buf[m]); - - buf[0] = m; - return m; -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecMeso::unpack_exchange(double *buf) { - //printf("in AtomVecMeso::unpack_exchange\n"); - int nlocal = atom->nlocal; - if (nlocal == nmax) - grow(0); - - int m = 1; - x[nlocal][0] = buf[m++]; - x[nlocal][1] = buf[m++]; - x[nlocal][2] = buf[m++]; - v[nlocal][0] = buf[m++]; - v[nlocal][1] = buf[m++]; - v[nlocal][2] = buf[m++]; - tag[nlocal] = (tagint) ubuf(buf[m++]).i; - type[nlocal] = (int) ubuf(buf[m++]).i; - mask[nlocal] = (int) ubuf(buf[m++]).i; - image[nlocal] = (imageint) ubuf(buf[m++]).i; - rho[nlocal] = buf[m++]; - e[nlocal] = buf[m++]; - cv[nlocal] = buf[m++]; - vest[nlocal][0] = buf[m++]; - vest[nlocal][1] = buf[m++]; - vest[nlocal][2] = buf[m++]; - - if (atom->nextra_grow) - for (int iextra = 0; iextra < atom->nextra_grow; iextra++) - m += modify->fix[atom->extra_grow[iextra]]-> unpack_exchange(nlocal, - &buf[m]); - - atom->nlocal++; - return m; -} - -/* ---------------------------------------------------------------------- - size of restart data for all atoms owned by this proc - include extra data stored by fixes - ------------------------------------------------------------------------- */ - -int AtomVecMeso::size_restart() { - int i; - - int nlocal = atom->nlocal; - int n = 17 * nlocal; // 11 + rho + e + cv + vest[3] - - if (atom->nextra_restart) - for (int iextra = 0; iextra < atom->nextra_restart; iextra++) - for (i = 0; i < nlocal; i++) - n += modify->fix[atom->extra_restart[iextra]]->size_restart(i); - - return n; -} - -/* ---------------------------------------------------------------------- - pack atom I's data for restart file including extra quantities - xyz must be 1st 3 values, so that read_restart can test on them - molecular types may be negative, but write as positive - ------------------------------------------------------------------------- */ - -int AtomVecMeso::pack_restart(int i, double *buf) { - int m = 1; - buf[m++] = x[i][0]; - buf[m++] = x[i][1]; - buf[m++] = x[i][2]; - buf[m++] = ubuf(tag[i]).d; - buf[m++] = ubuf(type[i]).d; - buf[m++] = ubuf(mask[i]).d; - buf[m++] = ubuf(image[i]).d; - buf[m++] = v[i][0]; - buf[m++] = v[i][1]; - buf[m++] = v[i][2]; - buf[m++] = rho[i]; - buf[m++] = e[i]; - buf[m++] = cv[i]; - buf[m++] = vest[i][0]; - buf[m++] = vest[i][1]; - buf[m++] = vest[i][2]; - - if (atom->nextra_restart) - for (int iextra = 0; iextra < atom->nextra_restart; iextra++) - m += modify->fix[atom->extra_restart[iextra]]->pack_restart(i, &buf[m]); - - buf[0] = m; - return m; -} - -/* ---------------------------------------------------------------------- - unpack data for one atom from restart file including extra quantities - ------------------------------------------------------------------------- */ - -int AtomVecMeso::unpack_restart(double *buf) { - int nlocal = atom->nlocal; - if (nlocal == nmax) { - grow(0); - if (atom->nextra_store) - memory->grow(atom->extra, nmax, atom->nextra_store, "atom:extra"); - } - - int m = 1; - x[nlocal][0] = buf[m++]; - x[nlocal][1] = buf[m++]; - x[nlocal][2] = buf[m++]; - tag[nlocal] = (tagint) ubuf(buf[m++]).i; - type[nlocal] = (int) ubuf(buf[m++]).i; - mask[nlocal] = (int) ubuf(buf[m++]).i; - image[nlocal] = (imageint) ubuf(buf[m++]).i; - v[nlocal][0] = buf[m++]; - v[nlocal][1] = buf[m++]; - v[nlocal][2] = buf[m++]; - rho[nlocal] = buf[m++]; - e[nlocal] = buf[m++]; - cv[nlocal] = buf[m++]; - vest[nlocal][0] = buf[m++]; - vest[nlocal][1] = buf[m++]; - vest[nlocal][2] = buf[m++]; - - double **extra = atom->extra; - if (atom->nextra_store) { - int size = static_cast (buf[0]) - m; - for (int i = 0; i < size; i++) - extra[nlocal][i] = buf[m++]; - } - - atom->nlocal++; - return m; -} - -/* ---------------------------------------------------------------------- - create one atom of itype at coord - set other values to defaults - ------------------------------------------------------------------------- */ - -void AtomVecMeso::create_atom(int itype, double *coord) { - int nlocal = atom->nlocal; - if (nlocal == nmax) - grow(0); - - tag[nlocal] = 0; - type[nlocal] = itype; - x[nlocal][0] = coord[0]; - x[nlocal][1] = coord[1]; - x[nlocal][2] = coord[2]; - mask[nlocal] = 1; - image[nlocal] = ((imageint) IMGMAX << IMG2BITS) | - ((imageint) IMGMAX << IMGBITS) | IMGMAX; - v[nlocal][0] = 0.0; - v[nlocal][1] = 0.0; - v[nlocal][2] = 0.0; - rho[nlocal] = 0.0; - e[nlocal] = 0.0; - cv[nlocal] = 1.0; - vest[nlocal][0] = 0.0; - vest[nlocal][1] = 0.0; - vest[nlocal][2] = 0.0; - de[nlocal] = 0.0; - drho[nlocal] = 0.0; - - atom->nlocal++; -} - -/* ---------------------------------------------------------------------- - unpack one line from Atoms section of data file - initialize other atom quantities - ------------------------------------------------------------------------- */ - -void AtomVecMeso::data_atom(double *coord, imageint imagetmp, char **values) { - int nlocal = atom->nlocal; - if (nlocal == nmax) grow(0); - - tag[nlocal] = utils::tnumeric(FLERR,values[0],true,lmp); - type[nlocal] = utils::inumeric(FLERR,values[1],true,lmp); - if (type[nlocal] <= 0 || type[nlocal] > atom->ntypes) - error->one(FLERR,"Invalid atom type in Atoms section of data file"); - - rho[nlocal] = utils::numeric(FLERR,values[2],true,lmp); - e[nlocal] = utils::numeric(FLERR,values[3],true,lmp); - cv[nlocal] = utils::numeric(FLERR,values[4],true,lmp); - - x[nlocal][0] = coord[0]; - x[nlocal][1] = coord[1]; - x[nlocal][2] = coord[2]; - - //printf("rho=%f, e=%f, cv=%f, x=%f\n", rho[nlocal], e[nlocal], cv[nlocal], x[nlocal][0]); - - image[nlocal] = imagetmp; - - mask[nlocal] = 1; - v[nlocal][0] = 0.0; - v[nlocal][1] = 0.0; - v[nlocal][2] = 0.0; - - vest[nlocal][0] = 0.0; - vest[nlocal][1] = 0.0; - vest[nlocal][2] = 0.0; - - de[nlocal] = 0.0; - drho[nlocal] = 0.0; - - atom->nlocal++; -} - -/* ---------------------------------------------------------------------- - unpack hybrid quantities from one line in Atoms section of data file - initialize other atom quantities for this sub-style - ------------------------------------------------------------------------- */ - -int AtomVecMeso::data_atom_hybrid(int nlocal, char **values) { - - rho[nlocal] = utils::numeric(FLERR,values[0],true,lmp); - e[nlocal] = utils::numeric(FLERR,values[1],true,lmp); - cv[nlocal] = utils::numeric(FLERR,values[2],true,lmp); - - return 3; -} - -/* ---------------------------------------------------------------------- - pack atom info for data file including 3 image flags -------------------------------------------------------------------------- */ - -void AtomVecMeso::pack_data(double **buf) -{ - int nlocal = atom->nlocal; - for (int i = 0; i < nlocal; i++) { - buf[i][0] = ubuf(tag[i]).d; - buf[i][1] = ubuf(type[i]).d; - buf[i][2] = rho[i]; - buf[i][3] = e[i]; - buf[i][4] = cv[i]; - buf[i][5] = x[i][0]; - buf[i][6] = x[i][1]; - buf[i][7] = x[i][2]; - buf[i][8] = ubuf((image[i] & IMGMASK) - IMGMAX).d; - buf[i][9] = ubuf((image[i] >> IMGBITS & IMGMASK) - IMGMAX).d; - buf[i][10] = ubuf((image[i] >> IMG2BITS) - IMGMAX).d; - } -} - -/* ---------------------------------------------------------------------- - pack hybrid atom info for data file -------------------------------------------------------------------------- */ - -int AtomVecMeso::pack_data_hybrid(int i, double *buf) -{ - buf[0] = rho[i]; - buf[1] = e[i]; - buf[2] = cv[i]; - return 3; -} - -/* ---------------------------------------------------------------------- - write atom info to data file including 3 image flags -------------------------------------------------------------------------- */ - -void AtomVecMeso::write_data(FILE *fp, int n, double **buf) -{ - for (int i = 0; i < n; i++) - fprintf(fp,TAGINT_FORMAT - " %d %-1.16e %-1.16e %-1.16e %-1.16e %-1.16e %-1.16e " - "%d %d %d\n", - (tagint) ubuf(buf[i][0]).i,(int) ubuf(buf[i][1]).i, - buf[i][2],buf[i][3],buf[i][4], - buf[i][5],buf[i][6],buf[i][7], - (int) ubuf(buf[i][8]).i,(int) ubuf(buf[i][9]).i, - (int) ubuf(buf[i][10]).i); -} - -/* ---------------------------------------------------------------------- - write hybrid atom info to data file -------------------------------------------------------------------------- */ - -int AtomVecMeso::write_data_hybrid(FILE *fp, double *buf) -{ - fprintf(fp," %-1.16e %-1.16e %-1.16e",buf[0],buf[1],buf[2]); - return 3; -} - -/* ---------------------------------------------------------------------- - assign an index to named atom property and return index - return -1 if name is unknown to this atom style -------------------------------------------------------------------------- */ - -int AtomVecMeso::property_atom(char *name) -{ - if (strcmp(name,"rho") == 0) return 0; - if (strcmp(name,"drho") == 0) return 1; - if (strcmp(name,"e") == 0) return 2; - if (strcmp(name,"de") == 0) return 3; - if (strcmp(name,"cv") == 0) return 4; - return -1; -} - -/* ---------------------------------------------------------------------- - pack per-atom data into buf for ComputePropertyAtom - index maps to data specific to this atom style -------------------------------------------------------------------------- */ - -void AtomVecMeso::pack_property_atom(int index, double *buf, - int nvalues, int groupbit) -{ - int *mask = atom->mask; - int nlocal = atom->nlocal; - int n = 0; - - if (index == 0) { - for (int i = 0; i < nlocal; i++) { - if (mask[i] & groupbit) buf[n] = rho[i]; - else buf[n] = 0.0; - n += nvalues; - } - } else if (index == 1) { - for (int i = 0; i < nlocal; i++) { - if (mask[i] & groupbit) buf[n] = drho[i]; - else buf[n] = 0.0; - n += nvalues; - } - } else if (index == 2) { - for (int i = 0; i < nlocal; i++) { - if (mask[i] & groupbit) buf[n] = e[i]; - else buf[n] = 0.0; - n += nvalues; - } - } else if (index == 3) { - for (int i = 0; i < nlocal; i++) { - if (mask[i] & groupbit) buf[n] = de[i]; - else buf[n] = 0.0; - n += nvalues; - } - } else if (index == 4) { - for (int i = 0; i < nlocal; i++) { - if (mask[i] & groupbit) buf[n] = cv[i]; - else buf[n] = 0.0; - n += nvalues; - } - } -} - -/* ---------------------------------------------------------------------- - return # of bytes of allocated memory - ------------------------------------------------------------------------- */ - -bigint AtomVecMeso::memory_usage() { - bigint bytes = 0; - - if (atom->memcheck("tag")) - bytes += memory->usage(tag, nmax); - if (atom->memcheck("type")) - bytes += memory->usage(type, nmax); - if (atom->memcheck("mask")) - bytes += memory->usage(mask, nmax); - if (atom->memcheck("image")) - bytes += memory->usage(image, nmax); - if (atom->memcheck("x")) - bytes += memory->usage(x, nmax, 3); - if (atom->memcheck("v")) - bytes += memory->usage(v, nmax, 3); - if (atom->memcheck("f")) - bytes += memory->usage(f, nmax*comm->nthreads, 3); - if (atom->memcheck("rho")) - bytes += memory->usage(rho, nmax); - if (atom->memcheck("drho")) - bytes += memory->usage(drho, nmax*comm->nthreads); - if (atom->memcheck("e")) - bytes += memory->usage(e, nmax); - if (atom->memcheck("de")) - bytes += memory->usage(de, nmax*comm->nthreads); - if (atom->memcheck("cv")) - bytes += memory->usage(cv, nmax); - if (atom->memcheck("vest")) - bytes += memory->usage(vest, nmax); - - return bytes; -} diff --git a/src/USER-SPH/atom_vec_meso.h b/src/USER-SPH/atom_vec_meso.h deleted file mode 100644 index da68222e296081119348ff843f6467d264bc2429..0000000000000000000000000000000000000000 --- a/src/USER-SPH/atom_vec_meso.h +++ /dev/null @@ -1,79 +0,0 @@ -/* -*- c++ -*- ---------------------------------------------------------- - LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator - http://lammps.sandia.gov, Sandia National Laboratories - Steve Plimpton, sjplimp@sandia.gov - - Copyright (2003) Sandia Corporation. Under the terms of Contract - DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains - certain rights in this software. This software is distributed under - the GNU General Public License. - - See the README file in the top-level LAMMPS directory. -------------------------------------------------------------------------- */ - -#ifdef ATOM_CLASS - -AtomStyle(meso,AtomVecMeso) - -#else - -#ifndef LMP_ATOM_VEC_MESO_H -#define LMP_ATOM_VEC_MESO_H - -#include "atom_vec.h" - -namespace LAMMPS_NS { - -class AtomVecMeso : public AtomVec { - public: - AtomVecMeso(class LAMMPS *); - ~AtomVecMeso() {} - void grow(int); - void grow_reset(); - void copy(int, int, int); - void force_clear(int, size_t); - int pack_comm(int, int *, double *, int, int *); - int pack_comm_vel(int, int *, double *, int, int *); - void unpack_comm(int, int, double *); - void unpack_comm_vel(int, int, double *); - int pack_reverse(int, int, double *); - void unpack_reverse(int, int *, double *); - int pack_comm_hybrid(int, int *, double *); - int unpack_comm_hybrid(int, int, double *); - int pack_border_hybrid(int, int *, double *); - int unpack_border_hybrid(int, int, double *); - int pack_reverse_hybrid(int, int, double *); - int unpack_reverse_hybrid(int, int *, double *); - int pack_border(int, int *, double *, int, int *); - int pack_border_vel(int, int *, double *, int, int *); - void unpack_border(int, int, double *); - void unpack_border_vel(int, int, double *); - int pack_exchange(int, double *); - int unpack_exchange(double *); - int size_restart(); - int pack_restart(int, double *); - int unpack_restart(double *); - void create_atom(int, double *); - void data_atom(double *, imageint, char **); - int data_atom_hybrid(int, char **); - void pack_data(double **); - int pack_data_hybrid(int, double *); - void write_data(FILE *, int, double **); - int write_data_hybrid(FILE *, double *); - int property_atom(char *); - void pack_property_atom(int, double *, int, int); - bigint memory_usage(); - - private: - tagint *tag; - int *type,*mask; - imageint *image; - double **x,**v,**f; - double *rho, *drho, *e, *de, *cv; - double **vest; // estimated velocity during force computation -}; - -} - -#endif -#endif diff --git a/src/USER-SPH/atom_vec_sph.cpp b/src/USER-SPH/atom_vec_sph.cpp new file mode 100644 index 0000000000000000000000000000000000000000..84a60e44f76bec2e94ceceaedff000474a9b4448 --- /dev/null +++ b/src/USER-SPH/atom_vec_sph.cpp @@ -0,0 +1,162 @@ +/* ---------------------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + http://lammps.sandia.gov, Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + Copyright (2003) Sandia Corporation. Under the terms of Contract + DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains + certain rights in this software. This software is distributed under + the GNU General Public License. + + See the README file in the top-level LAMMPS directory. + ------------------------------------------------------------------------- */ + +#include "atom_vec_sph.h" +#include +#include "atom.h" +#include "error.h" + +using namespace LAMMPS_NS; + +/* ---------------------------------------------------------------------- */ + +AtomVecSPH::AtomVecSPH(LAMMPS *lmp) : AtomVec(lmp) +{ + molecular = 0; + mass_type = 1; + forceclearflag = 1; + + atom->esph_flag = 1; + atom->rho_flag = 1; + atom->cv_flag = 1; + atom->vest_flag = 1; + + // strings with peratom variables to include in each AtomVec method + // strings cannot contain fields in corresponding AtomVec default strings + // order of fields in a string does not matter + // except: fields_data_atom & fields_data_vel must match data file + + fields_grow = (char *) "rho drho esph desph cv vest"; + fields_copy = (char *) "rho drho esph desph cv vest"; + fields_comm = (char *) "rho esph vest"; + fields_comm_vel = (char *) "rho esph vest"; + fields_reverse = (char *) "drho desph"; + fields_border = (char *) "rho esph cv vest"; + fields_border_vel = (char *) "rho esph cv vest"; + fields_exchange = (char *) "rho esph cv vest"; + fields_restart = (char * ) "rho esph cv vest"; + fields_create = (char *) "rho esph cv vest de drho"; + fields_data_atom = (char *) "id type rho esph cv x"; + fields_data_vel = (char *) "id v"; + + setup_fields(); +} + +/* ---------------------------------------------------------------------- + set local copies of all grow ptrs used by this class, except defaults + needed in replicate when 2 atom classes exist and it calls pack_restart() +------------------------------------------------------------------------- */ + +void AtomVecSPH::grow_pointers() +{ + rho = atom->rho; + drho = atom->drho; + esph = atom->esph; + desph = atom->desph; + cv = atom->cv; + vest = atom->vest; +} + +/* ---------------------------------------------------------------------- + clear extra forces starting at atom N + nbytes = # of bytes to clear for a per-atom vector +------------------------------------------------------------------------- */ + +void AtomVecSPH::force_clear(int n, size_t nbytes) +{ + memset(&desph[n],0,nbytes); + memset(&drho[n],0,nbytes); +} + +/* ---------------------------------------------------------------------- + initialize non-zero atom quantities +------------------------------------------------------------------------- */ + +void AtomVecSPH::create_atom_post(int ilocal) +{ + cv[ilocal] = 1.0; +} + +/* ---------------------------------------------------------------------- + modify what AtomVec::data_atom() just unpacked + or initialize other atom quantities +------------------------------------------------------------------------- */ + +void AtomVecSPH::data_atom_post(int ilocal) +{ + vest[ilocal][0] = 0.0; + vest[ilocal][1] = 0.0; + vest[ilocal][2] = 0.0; + desph[ilocal] = 0.0; + drho[ilocal] = 0.0; +} + +/* ---------------------------------------------------------------------- + assign an index to named atom property and return index + return -1 if name is unknown to this atom style +------------------------------------------------------------------------- */ + +int AtomVecSPH::property_atom(char *name) +{ + if (strcmp(name,"rho") == 0) return 0; + if (strcmp(name,"drho") == 0) return 1; + if (strcmp(name,"esph") == 0) return 2; + if (strcmp(name,"desph") == 0) return 3; + if (strcmp(name,"cv") == 0) return 4; + return -1; +} + +/* ---------------------------------------------------------------------- + pack per-atom data into buf for ComputePropertyAtom + index maps to data specific to this atom style +------------------------------------------------------------------------- */ + +void AtomVecSPH::pack_property_atom(int index, double *buf, + int nvalues, int groupbit) +{ + int *mask = atom->mask; + int nlocal = atom->nlocal; + int n = 0; + + if (index == 0) { + for (int i = 0; i < nlocal; i++) { + if (mask[i] & groupbit) buf[n] = rho[i]; + else buf[n] = 0.0; + n += nvalues; + } + } else if (index == 1) { + for (int i = 0; i < nlocal; i++) { + if (mask[i] & groupbit) buf[n] = drho[i]; + else buf[n] = 0.0; + n += nvalues; + } + } else if (index == 2) { + for (int i = 0; i < nlocal; i++) { + if (mask[i] & groupbit) buf[n] = esph[i]; + else buf[n] = 0.0; + n += nvalues; + } + } else if (index == 3) { + for (int i = 0; i < nlocal; i++) { + if (mask[i] & groupbit) buf[n] = desph[i]; + else buf[n] = 0.0; + n += nvalues; + } + } else if (index == 4) { + for (int i = 0; i < nlocal; i++) { + if (mask[i] & groupbit) buf[n] = cv[i]; + else buf[n] = 0.0; + n += nvalues; + } + } +} diff --git a/src/USER-SPH/atom_vec_sph.h b/src/USER-SPH/atom_vec_sph.h new file mode 100644 index 0000000000000000000000000000000000000000..634c3c72f5cd728585bfd8dce9b366e3f11436b3 --- /dev/null +++ b/src/USER-SPH/atom_vec_sph.h @@ -0,0 +1,46 @@ +/* -*- c++ -*- ---------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + http://lammps.sandia.gov, Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + Copyright (2003) Sandia Corporation. Under the terms of Contract + DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains + certain rights in this software. This software is distributed under + the GNU General Public License. + + See the README file in the top-level LAMMPS directory. +------------------------------------------------------------------------- */ + +#ifdef ATOM_CLASS + +AtomStyle(sph,AtomVecSPH) + +#else + +#ifndef LMP_ATOM_VEC_SPH_H +#define LMP_ATOM_VEC_SPH_H + +#include "atom_vec.h" + +namespace LAMMPS_NS { + +class AtomVecSPH : public AtomVec { + public: + AtomVecSPH(class LAMMPS *); + + void grow_pointers(); + void force_clear(int, size_t); + void create_atom_post(int); + void data_atom_post(int); + int property_atom(char *); + void pack_property_atom(int, double *, int, int); + + private: + double *rho,*drho,*esph,*desph,*cv; + double **vest; +}; + +} + +#endif +#endif diff --git a/src/USER-SPH/compute_meso_e_atom.cpp b/src/USER-SPH/compute_sph_e_atom.cpp similarity index 80% rename from src/USER-SPH/compute_meso_e_atom.cpp rename to src/USER-SPH/compute_sph_e_atom.cpp index c56243e5ed7c8be217b0e4c1d4220b27e37d2222..8869dae5f7cb247bf8777f79b4bf9b32d619d64c 100644 --- a/src/USER-SPH/compute_meso_e_atom.cpp +++ b/src/USER-SPH/compute_sph_e_atom.cpp @@ -11,7 +11,7 @@ See the README file in the top-level LAMMPS directory. ------------------------------------------------------------------------- */ -#include "compute_meso_e_atom.h" +#include "compute_sph_e_atom.h" #include #include "atom.h" #include "update.h" @@ -24,11 +24,13 @@ using namespace LAMMPS_NS; /* ---------------------------------------------------------------------- */ -ComputeMesoEAtom::ComputeMesoEAtom(LAMMPS *lmp, int narg, char **arg) : +ComputeSPHEAtom::ComputeSPHEAtom(LAMMPS *lmp, int narg, char **arg) : Compute(lmp, narg, arg) { - if (narg != 3) error->all(FLERR,"Number of arguments for compute meso/e/atom command != 3"); - if (atom->e_flag != 1) error->all(FLERR,"compute meso/e/atom command requires atom_style with energy (e.g. meso)"); + if (narg != 3) + error->all(FLERR,"Number of arguments for compute sph/e/atom command != 3"); + if (atom->esph_flag != 1) + error->all(FLERR,"Compute sph/e/atom command requires atom_style sph)"); peratom_flag = 1; size_peratom_cols = 0; @@ -39,14 +41,14 @@ ComputeMesoEAtom::ComputeMesoEAtom(LAMMPS *lmp, int narg, char **arg) : /* ---------------------------------------------------------------------- */ -ComputeMesoEAtom::~ComputeMesoEAtom() +ComputeSPHEAtom::~ComputeSPHEAtom() { memory->sfree(evector); } /* ---------------------------------------------------------------------- */ -void ComputeMesoEAtom::init() +void ComputeSPHEAtom::init() { int count = 0; @@ -58,7 +60,7 @@ void ComputeMesoEAtom::init() /* ---------------------------------------------------------------------- */ -void ComputeMesoEAtom::compute_peratom() +void ComputeSPHEAtom::compute_peratom() { invoked_peratom = update->ntimestep; @@ -71,13 +73,13 @@ void ComputeMesoEAtom::compute_peratom() vector_atom = evector; } - double *e = atom->e; + double *esph = atom->esph; int *mask = atom->mask; int nlocal = atom->nlocal; for (int i = 0; i < nlocal; i++) { if (mask[i] & groupbit) { - evector[i] = e[i]; + evector[i] = esph[i]; } else { evector[i] = 0.0; @@ -89,7 +91,7 @@ void ComputeMesoEAtom::compute_peratom() memory usage of local atom-based array ------------------------------------------------------------------------- */ -double ComputeMesoEAtom::memory_usage() +double ComputeSPHEAtom::memory_usage() { double bytes = nmax * sizeof(double); return bytes; diff --git a/src/USER-SPH/compute_meso_e_atom.h b/src/USER-SPH/compute_sph_e_atom.h similarity index 78% rename from src/USER-SPH/compute_meso_e_atom.h rename to src/USER-SPH/compute_sph_e_atom.h index 3cdbfa7aa88deae16c6f8189b56be2b61c0c79d5..370fab148bb6778bab2393d53a25439a11a1629a 100644 --- a/src/USER-SPH/compute_meso_e_atom.h +++ b/src/USER-SPH/compute_sph_e_atom.h @@ -13,21 +13,21 @@ #ifdef COMPUTE_CLASS -ComputeStyle(meso/e/atom,ComputeMesoEAtom) +ComputeStyle(sph/e/atom,ComputeSPHEAtom) #else -#ifndef LMP_COMPUTE_MESO_E_ATOM_H -#define LMP_COMPUTE_MESO_E_ATOM_H +#ifndef LMP_COMPUTE_SPH_E_ATOM_H +#define LMP_COMPUTE_SPH_E_ATOM_H #include "compute.h" namespace LAMMPS_NS { -class ComputeMesoEAtom : public Compute { +class ComputeSPHEAtom : public Compute { public: - ComputeMesoEAtom(class LAMMPS *, int, char **); - ~ComputeMesoEAtom(); + ComputeSPHEAtom(class LAMMPS *, int, char **); + ~ComputeSPHEAtom(); void init(); void compute_peratom(); double memory_usage(); diff --git a/src/USER-SPH/compute_meso_rho_atom.cpp b/src/USER-SPH/compute_sph_rho_atom.cpp similarity index 83% rename from src/USER-SPH/compute_meso_rho_atom.cpp rename to src/USER-SPH/compute_sph_rho_atom.cpp index b2fbd2d70a9d818033e21dfaf27ff604e927e0a3..1d6d03811ce816895e1a4341fad41c9aef9df1cf 100644 --- a/src/USER-SPH/compute_meso_rho_atom.cpp +++ b/src/USER-SPH/compute_sph_rho_atom.cpp @@ -11,7 +11,7 @@ See the README file in the top-level LAMMPS directory. ------------------------------------------------------------------------- */ -#include "compute_meso_rho_atom.h" +#include "compute_sph_rho_atom.h" #include #include "atom.h" #include "update.h" @@ -24,11 +24,12 @@ using namespace LAMMPS_NS; /* ---------------------------------------------------------------------- */ -ComputeMesoRhoAtom::ComputeMesoRhoAtom(LAMMPS *lmp, int narg, char **arg) : +ComputeSPHRhoAtom::ComputeSPHRhoAtom(LAMMPS *lmp, int narg, char **arg) : Compute(lmp, narg, arg) { - if (narg != 3) error->all(FLERR,"Illegal compute meso/rho/atom command"); - if (atom->rho_flag != 1) error->all(FLERR,"compute meso/rho/atom command requires atom_style with density (e.g. meso)"); + if (narg != 3) error->all(FLERR,"Illegal compute sph/rho/atom command"); + if (atom->rho_flag != 1) + error->all(FLERR,"Compute sph/rho/atom command requires atom_style sph"); peratom_flag = 1; size_peratom_cols = 0; @@ -39,14 +40,14 @@ ComputeMesoRhoAtom::ComputeMesoRhoAtom(LAMMPS *lmp, int narg, char **arg) : /* ---------------------------------------------------------------------- */ -ComputeMesoRhoAtom::~ComputeMesoRhoAtom() +ComputeSPHRhoAtom::~ComputeSPHRhoAtom() { memory->sfree(rhoVector); } /* ---------------------------------------------------------------------- */ -void ComputeMesoRhoAtom::init() +void ComputeSPHRhoAtom::init() { int count = 0; @@ -58,7 +59,7 @@ void ComputeMesoRhoAtom::init() /* ---------------------------------------------------------------------- */ -void ComputeMesoRhoAtom::compute_peratom() +void ComputeSPHRhoAtom::compute_peratom() { invoked_peratom = update->ntimestep; @@ -91,7 +92,7 @@ void ComputeMesoRhoAtom::compute_peratom() memory usage of local atom-based array ------------------------------------------------------------------------- */ -double ComputeMesoRhoAtom::memory_usage() +double ComputeSPHRhoAtom::memory_usage() { double bytes = nmax * sizeof(double); return bytes; diff --git a/src/USER-SPH/compute_meso_rho_atom.h b/src/USER-SPH/compute_sph_rho_atom.h similarity index 77% rename from src/USER-SPH/compute_meso_rho_atom.h rename to src/USER-SPH/compute_sph_rho_atom.h index ec4942ef92240a786b266186c1ca42ffed2e9ddc..bd38f41199b709c57b4985c8fee3c9e2164d0ee1 100644 --- a/src/USER-SPH/compute_meso_rho_atom.h +++ b/src/USER-SPH/compute_sph_rho_atom.h @@ -13,21 +13,21 @@ #ifdef COMPUTE_CLASS -ComputeStyle(meso/rho/atom,ComputeMesoRhoAtom) +ComputeStyle(sph/rho/atom,ComputeSPHRhoAtom) #else -#ifndef LMP_COMPUTE_MESO_RHO_ATOM_H -#define LMP_COMPUTE_MESO_RHO_ATOM_H +#ifndef LMP_COMPUTE_MESO_SPH_ATOM_H +#define LMP_COMPUTE_MESO_SPH_ATOM_H #include "compute.h" namespace LAMMPS_NS { -class ComputeMesoRhoAtom : public Compute { +class ComputeSPHRhoAtom : public Compute { public: - ComputeMesoRhoAtom(class LAMMPS *, int, char **); - ~ComputeMesoRhoAtom(); + ComputeSPHRhoAtom(class LAMMPS *, int, char **); + ~ComputeSPHRhoAtom(); void init(); void compute_peratom(); double memory_usage(); diff --git a/src/USER-SPH/compute_meso_t_atom.cpp b/src/USER-SPH/compute_sph_t_atom.cpp similarity index 79% rename from src/USER-SPH/compute_meso_t_atom.cpp rename to src/USER-SPH/compute_sph_t_atom.cpp index bab96468dd9dc7afb8fb72342f1850d94b325c95..063af700260bf8e1a20202d55b828c2da46c1ee0 100644 --- a/src/USER-SPH/compute_meso_t_atom.cpp +++ b/src/USER-SPH/compute_sph_t_atom.cpp @@ -11,7 +11,7 @@ See the README file in the top-level LAMMPS directory. ------------------------------------------------------------------------- */ -#include "compute_meso_t_atom.h" +#include "compute_sph_t_atom.h" #include #include "atom.h" #include "update.h" @@ -24,12 +24,13 @@ using namespace LAMMPS_NS; /* ---------------------------------------------------------------------- */ -ComputeMesoTAtom::ComputeMesoTAtom(LAMMPS *lmp, int narg, char **arg) : +ComputeSPHTAtom::ComputeSPHTAtom(LAMMPS *lmp, int narg, char **arg) : Compute(lmp, narg, arg) { - if (narg != 3) error->all(FLERR,"Number of arguments for compute meso/t/atom command != 3"); - if ((atom->e_flag != 1) || (atom->cv_flag != 1)) - error->all(FLERR,"Compute meso/t/atom command requires atom_style with both energy and heat capacity (e.g. meso)"); + if (narg != 3) + error->all(FLERR,"Number of arguments for compute sph/t/atom command != 3"); + if ((atom->esph_flag != 1) || (atom->cv_flag != 1)) + error->all(FLERR,"Compute sph/t/atom command requires atom_style sph"); peratom_flag = 1; size_peratom_cols = 0; @@ -40,14 +41,14 @@ ComputeMesoTAtom::ComputeMesoTAtom(LAMMPS *lmp, int narg, char **arg) : /* ---------------------------------------------------------------------- */ -ComputeMesoTAtom::~ComputeMesoTAtom() +ComputeSPHTAtom::~ComputeSPHTAtom() { memory->sfree(tvector); } /* ---------------------------------------------------------------------- */ -void ComputeMesoTAtom::init() +void ComputeSPHTAtom::init() { int count = 0; @@ -59,7 +60,7 @@ void ComputeMesoTAtom::init() /* ---------------------------------------------------------------------- */ -void ComputeMesoTAtom::compute_peratom() +void ComputeSPHTAtom::compute_peratom() { invoked_peratom = update->ntimestep; @@ -72,7 +73,7 @@ void ComputeMesoTAtom::compute_peratom() vector_atom = tvector; } - double *e = atom->e; + double *esph = atom->esph; double *cv = atom->cv; int *mask = atom->mask; int nlocal = atom->nlocal; @@ -80,7 +81,7 @@ void ComputeMesoTAtom::compute_peratom() for (int i = 0; i < nlocal; i++) { if (mask[i] & groupbit) { if (cv[i] > 0.0) { - tvector[i] = e[i] / cv[i]; + tvector[i] = esph[i] / cv[i]; } } else { @@ -93,7 +94,7 @@ void ComputeMesoTAtom::compute_peratom() memory usage of local atom-based array ------------------------------------------------------------------------- */ -double ComputeMesoTAtom::memory_usage() +double ComputeSPHTAtom::memory_usage() { double bytes = nmax * sizeof(double); return bytes; diff --git a/src/USER-SPH/compute_meso_t_atom.h b/src/USER-SPH/compute_sph_t_atom.h similarity index 78% rename from src/USER-SPH/compute_meso_t_atom.h rename to src/USER-SPH/compute_sph_t_atom.h index 9e4b2537120be04d3d6a2b993159c82f903dfdf8..b3bf93a0ebc43d1c2d6f3ef328ce6882951bccf2 100644 --- a/src/USER-SPH/compute_meso_t_atom.h +++ b/src/USER-SPH/compute_sph_t_atom.h @@ -13,21 +13,21 @@ #ifdef COMPUTE_CLASS -ComputeStyle(meso/t/atom,ComputeMesoTAtom) +ComputeStyle(sph/t/atom,ComputeSPHTAtom) #else -#ifndef LMP_COMPUTE_MESO_T_ATOM_H -#define LMP_COMPUTE_MESO_T_ATOM_H +#ifndef LMP_COMPUTE_SPH_T_ATOM_H +#define LMP_COMPUTE_SPH_T_ATOM_H #include "compute.h" namespace LAMMPS_NS { -class ComputeMesoTAtom : public Compute { +class ComputeSPHTAtom : public Compute { public: - ComputeMesoTAtom(class LAMMPS *, int, char **); - ~ComputeMesoTAtom(); + ComputeSPHTAtom(class LAMMPS *, int, char **); + ~ComputeSPHTAtom(); void init(); void compute_peratom(); double memory_usage(); diff --git a/src/USER-SPH/fix_meso.cpp b/src/USER-SPH/fix_sph.cpp similarity index 84% rename from src/USER-SPH/fix_meso.cpp rename to src/USER-SPH/fix_sph.cpp index 4f4e532291aac29f36bd81494e57c581414ae9f9..843edc8e9204ef5b2722a79e09860048dea4706a 100644 --- a/src/USER-SPH/fix_meso.cpp +++ b/src/USER-SPH/fix_sph.cpp @@ -11,7 +11,7 @@ See the README file in the top-level LAMMPS directory. ------------------------------------------------------------------------- */ -#include "fix_meso.h" +#include "fix_sph.h" #include "atom.h" #include "force.h" #include "update.h" @@ -22,22 +22,22 @@ using namespace FixConst; /* ---------------------------------------------------------------------- */ -FixMeso::FixMeso(LAMMPS *lmp, int narg, char **arg) : +FixSPH::FixSPH(LAMMPS *lmp, int narg, char **arg) : Fix(lmp, narg, arg) { - if ((atom->e_flag != 1) || (atom->rho_flag != 1)) + if ((atom->esph_flag != 1) || (atom->rho_flag != 1)) error->all(FLERR, - "fix meso command requires atom_style with both energy and density"); + "Fix sph command requires atom_style with both energy and density"); if (narg != 3) - error->all(FLERR,"Illegal number of arguments for fix meso command"); + error->all(FLERR,"Illegal number of arguments for fix sph command"); time_integrate = 1; } /* ---------------------------------------------------------------------- */ -int FixMeso::setmask() { +int FixSPH::setmask() { int mask = 0; mask |= INITIAL_INTEGRATE; mask |= FINAL_INTEGRATE; @@ -47,12 +47,12 @@ int FixMeso::setmask() { /* ---------------------------------------------------------------------- */ -void FixMeso::init() { +void FixSPH::init() { dtv = update->dt; dtf = 0.5 * update->dt * force->ftm2v; } -void FixMeso::setup_pre_force(int /*vflag*/) +void FixSPH::setup_pre_force(int /*vflag*/) { // set vest equal to v double **v = atom->v; @@ -75,7 +75,7 @@ void FixMeso::setup_pre_force(int /*vflag*/) allow for both per-type and per-atom mass ------------------------------------------------------------------------- */ -void FixMeso::initial_integrate(int /*vflag*/) { +void FixSPH::initial_integrate(int /*vflag*/) { // update v and x and rho and e of atoms in group double **x = atom->x; @@ -84,8 +84,8 @@ void FixMeso::initial_integrate(int /*vflag*/) { double **vest = atom->vest; double *rho = atom->rho; double *drho = atom->drho; - double *e = atom->e; - double *de = atom->de; + double *esph = atom->esph; + double *desph = atom->desph; double *mass = atom->mass; double *rmass = atom->rmass; int rmass_flag = atom->rmass_flag; @@ -107,7 +107,7 @@ void FixMeso::initial_integrate(int /*vflag*/) { dtfm = dtf / mass[type[i]]; } - e[i] += dtf * de[i]; // half-step update of particle internal energy + esph[i] += dtf * desph[i]; // half-step update of particle internal energy rho[i] += dtf * drho[i]; // ... and density // extrapolate velocity for use with velocity-dependent potentials, e.g. SPH @@ -128,14 +128,14 @@ void FixMeso::initial_integrate(int /*vflag*/) { /* ---------------------------------------------------------------------- */ -void FixMeso::final_integrate() { +void FixSPH::final_integrate() { // update v, rho, and e of atoms in group double **v = atom->v; double **f = atom->f; - double *e = atom->e; - double *de = atom->de; + double *esph = atom->esph; + double *desph = atom->desph; double *rho = atom->rho; double *drho = atom->drho; int *type = atom->type; @@ -160,7 +160,7 @@ void FixMeso::final_integrate() { v[i][1] += dtfm * f[i][1]; v[i][2] += dtfm * f[i][2]; - e[i] += dtf * de[i]; + esph[i] += dtf * desph[i]; rho[i] += dtf * drho[i]; } } @@ -168,7 +168,7 @@ void FixMeso::final_integrate() { /* ---------------------------------------------------------------------- */ -void FixMeso::reset_dt() { +void FixSPH::reset_dt() { dtv = update->dt; dtf = 0.5 * update->dt * force->ftm2v; } diff --git a/src/USER-SPH/fix_meso.h b/src/USER-SPH/fix_sph.h similarity index 88% rename from src/USER-SPH/fix_meso.h rename to src/USER-SPH/fix_sph.h index 3eebb0f77449daa5996b8d7722249fbcf13cd28a..0a43997508050c6a634f6b22ba905f51a39f5dec 100644 --- a/src/USER-SPH/fix_meso.h +++ b/src/USER-SPH/fix_sph.h @@ -13,20 +13,20 @@ #ifdef FIX_CLASS -FixStyle(meso,FixMeso) +FixStyle(sph,FixSPH) #else -#ifndef LMP_FIX_MESO_H -#define LMP_FIX_MESO_H +#ifndef LMP_FIX_SPH_H +#define LMP_FIX_SPH_H #include "fix.h" namespace LAMMPS_NS { -class FixMeso : public Fix { +class FixSPH : public Fix { public: - FixMeso(class LAMMPS *, int, char **); + FixSPH(class LAMMPS *, int, char **); int setmask(); virtual void init(); virtual void setup_pre_force(int); diff --git a/src/USER-SPH/fix_meso_stationary.cpp b/src/USER-SPH/fix_sph_stationary.cpp similarity index 74% rename from src/USER-SPH/fix_meso_stationary.cpp rename to src/USER-SPH/fix_sph_stationary.cpp index b7f0675ef8b6bcdd8c467c2301fd97108b61b966..56ac71f2c595e9305d949a689e7f819ca08b4391 100644 --- a/src/USER-SPH/fix_meso_stationary.cpp +++ b/src/USER-SPH/fix_sph_stationary.cpp @@ -11,7 +11,7 @@ See the README file in the top-level LAMMPS directory. ------------------------------------------------------------------------- */ -#include "fix_meso_stationary.h" +#include "fix_sph_stationary.h" #include "atom.h" #include "force.h" #include "update.h" @@ -22,22 +22,22 @@ using namespace FixConst; /* ---------------------------------------------------------------------- */ -FixMesoStationary::FixMesoStationary(LAMMPS *lmp, int narg, char **arg) : +FixSPHStationary::FixSPHStationary(LAMMPS *lmp, int narg, char **arg) : Fix(lmp, narg, arg) { - if ((atom->e_flag != 1) || (atom->rho_flag != 1)) + if ((atom->esph_flag != 1) || (atom->rho_flag != 1)) error->all(FLERR, - "fix meso/stationary command requires atom_style with both energy and density, e.g. meso"); + "Fix sph/stationary command requires atom_style with both energy and density, e.g. meso"); if (narg != 3) - error->all(FLERR,"Illegal number of arguments for fix meso/stationary command"); + error->all(FLERR,"Illegal number of arguments for fix sph/stationary command"); time_integrate = 0; } /* ---------------------------------------------------------------------- */ -int FixMesoStationary::setmask() { +int FixSPHStationary::setmask() { int mask = 0; mask |= INITIAL_INTEGRATE; mask |= FINAL_INTEGRATE; @@ -46,7 +46,7 @@ int FixMesoStationary::setmask() { /* ---------------------------------------------------------------------- */ -void FixMesoStationary::init() { +void FixSPHStationary::init() { dtv = update->dt; dtf = 0.5 * update->dt * force->ftm2v; } @@ -55,12 +55,12 @@ void FixMesoStationary::init() { allow for both per-type and per-atom mass ------------------------------------------------------------------------- */ -void FixMesoStationary::initial_integrate(int /*vflag*/) { +void FixSPHStationary::initial_integrate(int /*vflag*/) { double *rho = atom->rho; double *drho = atom->drho; - double *e = atom->e; - double *de = atom->de; + double *esph = atom->esph; + double *desph = atom->desph; int *mask = atom->mask; int nlocal = atom->nlocal; @@ -71,7 +71,7 @@ void FixMesoStationary::initial_integrate(int /*vflag*/) { for (i = 0; i < nlocal; i++) { if (mask[i] & groupbit) { - e[i] += dtf * de[i]; // half-step update of particle internal energy + esph[i] += dtf * desph[i]; // half-step update of particle internal energy rho[i] += dtf * drho[i]; // ... and density } } @@ -79,10 +79,10 @@ void FixMesoStationary::initial_integrate(int /*vflag*/) { /* ---------------------------------------------------------------------- */ -void FixMesoStationary::final_integrate() { +void FixSPHStationary::final_integrate() { - double *e = atom->e; - double *de = atom->de; + double *esph = atom->esph; + double *desph = atom->desph; double *rho = atom->rho; double *drho = atom->drho; int *mask = atom->mask; @@ -92,7 +92,7 @@ void FixMesoStationary::final_integrate() { for (int i = 0; i < nlocal; i++) { if (mask[i] & groupbit) { - e[i] += dtf * de[i]; + esph[i] += dtf * desph[i]; rho[i] += dtf * drho[i]; } } @@ -100,7 +100,7 @@ void FixMesoStationary::final_integrate() { /* ---------------------------------------------------------------------- */ -void FixMesoStationary::reset_dt() { +void FixSPHStationary::reset_dt() { dtv = update->dt; dtf = 0.5 * update->dt * force->ftm2v; } diff --git a/src/USER-SPH/fix_meso_stationary.h b/src/USER-SPH/fix_sph_stationary.h similarity index 83% rename from src/USER-SPH/fix_meso_stationary.h rename to src/USER-SPH/fix_sph_stationary.h index 326c13dcd3c54b50027697f5916b0d3197193606..f2bb6c39f25b0c5afb944693e4900a854afa08af 100644 --- a/src/USER-SPH/fix_meso_stationary.h +++ b/src/USER-SPH/fix_sph_stationary.h @@ -13,20 +13,20 @@ #ifdef FIX_CLASS -FixStyle(meso/stationary,FixMesoStationary) +FixStyle(sph/stationary,FixSPHStationary) #else -#ifndef LMP_FIX_MESO_STATIONARY_H -#define LMP_FIX_MESO_STATIONARY_H +#ifndef LMP_FIX_SPH_STATIONARY_H +#define LMP_FIX_SPH_STATIONARY_H #include "fix.h" namespace LAMMPS_NS { -class FixMesoStationary : public Fix { +class FixSPHStationary : public Fix { public: - FixMesoStationary(class LAMMPS *, int, char **); + FixSPHStationary(class LAMMPS *, int, char **); int setmask(); virtual void init(); virtual void initial_integrate(int); diff --git a/src/USER-SPH/pair_sph_heatconduction.cpp b/src/USER-SPH/pair_sph_heatconduction.cpp index cff90090151eba9295b033518a44b1e359d4623a..ebd2cef684f01805d322eb27a950a54e65a32bbc 100644 --- a/src/USER-SPH/pair_sph_heatconduction.cpp +++ b/src/USER-SPH/pair_sph_heatconduction.cpp @@ -53,8 +53,8 @@ void PairSPHHeatConduction::compute(int eflag, int vflag) { ev_init(eflag, vflag); double **x = atom->x; - double *e = atom->e; - double *de = atom->de; + double *esph = atom->esph; + double *desph = atom->desph; double *mass = atom->mass; double *rho = atom->rho; int *type = atom->type; @@ -116,11 +116,11 @@ void PairSPHHeatConduction::compute(int eflag, int vflag) { deltaE = 2.0 * imass * jmass / (imass+jmass); deltaE *= (rho[i] + rho[j]) / (rho[i] * rho[j]); - deltaE *= D * (e[i] - e[j]) * wfd; + deltaE *= D * (esph[i] - esph[j]) * wfd; - de[i] += deltaE; + desph[i] += deltaE; if (newton_pair || j < nlocal) { - de[j] -= deltaE; + desph[j] -= deltaE; } } diff --git a/src/USER-SPH/pair_sph_idealgas.cpp b/src/USER-SPH/pair_sph_idealgas.cpp index f206bf68f561a642e273a0c41880632dda581beb..1f6b63e1992fbb45873a9844e6ad6f8975c294d2 100644 --- a/src/USER-SPH/pair_sph_idealgas.cpp +++ b/src/USER-SPH/pair_sph_idealgas.cpp @@ -58,8 +58,8 @@ void PairSPHIdealGas::compute(int eflag, int vflag) { double **f = atom->f; double *rho = atom->rho; double *mass = atom->mass; - double *de = atom->de; - double *e = atom->e; + double *desph = atom->desph; + double *esph = atom->esph; double *drho = atom->drho; int *type = atom->type; int nlocal = atom->nlocal; @@ -86,8 +86,8 @@ void PairSPHIdealGas::compute(int eflag, int vflag) { imass = mass[itype]; - fi = 0.4 * e[i] / imass / rho[i]; // ideal gas EOS; this expression is fi = pressure / rho^2 - ci = sqrt(0.4*e[i]/imass); // speed of sound with heat capacity ratio gamma=1.4 + fi = 0.4 * esph[i] / imass / rho[i]; // ideal gas EOS; this expression is fi = pressure / rho^2 + ci = sqrt(0.4*esph[i]/imass); // speed of sound with heat capacity ratio gamma=1.4 for (jj = 0; jj < jnum; jj++) { j = jlist[jj]; @@ -119,7 +119,7 @@ void PairSPHIdealGas::compute(int eflag, int vflag) { wfd = -19.098593171027440292e0 * wfd * wfd * ihsq * ihsq * ihsq; } - fj = 0.4 * e[j] / jmass / rho[j]; + fj = 0.4 * esph[j] / jmass / rho[j]; // dot product of velocity delta and distance vector delVdotDelR = delx * (vxtmp - v[j][0]) + dely * (vytmp - v[j][1]) @@ -127,7 +127,7 @@ void PairSPHIdealGas::compute(int eflag, int vflag) { // artificial viscosity (Monaghan 1992) if (delVdotDelR < 0.) { - cj = sqrt(0.4*e[j]/jmass); + cj = sqrt(0.4*esph[j]/jmass); mu = h * delVdotDelR / (rsq + 0.01 * h * h); fvisc = -viscosity[itype][jtype] * (ci + cj) * mu / (rho[i] + rho[j]); } else { @@ -146,13 +146,13 @@ void PairSPHIdealGas::compute(int eflag, int vflag) { drho[i] += jmass * delVdotDelR * wfd; // change in thermal energy - de[i] += deltaE; + desph[i] += deltaE; if (newton_pair || j < nlocal) { f[j][0] -= delx * fpair; f[j][1] -= dely * fpair; f[j][2] -= delz * fpair; - de[j] += deltaE; + desph[j] += deltaE; drho[j] += imass * delVdotDelR * wfd; } diff --git a/src/USER-SPH/pair_sph_lj.cpp b/src/USER-SPH/pair_sph_lj.cpp index 3173e2a47d56f05cb802c6165f93b14d1d2bc97d..ae42c413e74ad8e3b8d5d9b80a09871c8fe693cc 100644 --- a/src/USER-SPH/pair_sph_lj.cpp +++ b/src/USER-SPH/pair_sph_lj.cpp @@ -58,8 +58,8 @@ void PairSPHLJ::compute(int eflag, int vflag) { double **f = atom->f; double *rho = atom->rho; double *mass = atom->mass; - double *de = atom->de; - double *e = atom->e; + double *desph = atom->desph; + double *esph = atom->esph; double *cv = atom->cv; double *drho = atom->drho; int *type = atom->type; @@ -88,7 +88,7 @@ void PairSPHLJ::compute(int eflag, int vflag) { imass = mass[itype]; // compute pressure of particle i with LJ EOS - LJEOS2(rho[i], e[i], cv[i], &fi, &ci); + LJEOS2(rho[i], esph[i], cv[i], &fi, &ci); fi /= (rho[i] * rho[i]); //printf("fi = %f\n", fi); @@ -124,7 +124,7 @@ void PairSPHLJ::compute(int eflag, int vflag) { } // function call to LJ EOS - LJEOS2(rho[j], e[j], cv[j], &fj, &cj); + LJEOS2(rho[j], esph[j], cv[j], &fj, &cj); fj /= (rho[j] * rho[j]); // apply long-range correction to model a LJ fluid with cutoff @@ -157,13 +157,13 @@ void PairSPHLJ::compute(int eflag, int vflag) { drho[i] += jmass * delVdotDelR * wfd; // change in thermal energy - de[i] += deltaE; + desph[i] += deltaE; if (newton_pair || j < nlocal) { f[j][0] -= delx * fpair; f[j][1] -= dely * fpair; f[j][2] -= delz * fpair; - de[j] += deltaE; + desph[j] += deltaE; drho[j] += imass * delVdotDelR * wfd; } diff --git a/src/USER-SPH/pair_sph_taitwater.cpp b/src/USER-SPH/pair_sph_taitwater.cpp index f2a34d4edd65ed4e5397eeaa82d8fb6f9cc23e3c..79d9ac77420e329675f7c8fb7a412bca9c39dabc 100644 --- a/src/USER-SPH/pair_sph_taitwater.cpp +++ b/src/USER-SPH/pair_sph_taitwater.cpp @@ -64,7 +64,7 @@ void PairSPHTaitwater::compute(int eflag, int vflag) { double **f = atom->f; double *rho = atom->rho; double *mass = atom->mass; - double *de = atom->de; + double *desph = atom->desph; double *drho = atom->drho; int *type = atom->type; int nlocal = atom->nlocal; @@ -176,13 +176,13 @@ void PairSPHTaitwater::compute(int eflag, int vflag) { drho[i] += jmass * delVdotDelR * wfd; // change in thermal energy - de[i] += deltaE; + desph[i] += deltaE; if (newton_pair || j < nlocal) { f[j][0] -= delx * fpair; f[j][1] -= dely * fpair; f[j][2] -= delz * fpair; - de[j] += deltaE; + desph[j] += deltaE; drho[j] += imass * delVdotDelR * wfd; } diff --git a/src/USER-SPH/pair_sph_taitwater_morris.cpp b/src/USER-SPH/pair_sph_taitwater_morris.cpp index 9ca03e3476c746618f544d52985ca4d7b7907352..862d2a805336f20d55b62544660aed22e8711aad 100644 --- a/src/USER-SPH/pair_sph_taitwater_morris.cpp +++ b/src/USER-SPH/pair_sph_taitwater_morris.cpp @@ -64,7 +64,7 @@ void PairSPHTaitwaterMorris::compute(int eflag, int vflag) { double **f = atom->f; double *rho = atom->rho; double *mass = atom->mass; - double *de = atom->de; + double *desph = atom->desph; double *drho = atom->drho; int *type = atom->type; int nlocal = atom->nlocal; @@ -177,13 +177,13 @@ void PairSPHTaitwaterMorris::compute(int eflag, int vflag) { drho[i] += jmass * delVdotDelR * wfd; // change in thermal energy - de[i] += deltaE; + desph[i] += deltaE; if (newton_pair || j < nlocal) { f[j][0] -= delx * fpair + velx * fvisc; f[j][1] -= dely * fpair + vely * fvisc; f[j][2] -= delz * fpair + velz * fvisc; - de[j] += deltaE; + desph[j] += deltaE; drho[j] += imass * delVdotDelR * wfd; } diff --git a/src/USER-UEF/fix_nh_uef.cpp b/src/USER-UEF/fix_nh_uef.cpp index a3a2dc476c1b6253b4da9c4e44318e2ed1c5eb15..80866bbd56f8cb7b787065e55ca6193c985f609e 100644 --- a/src/USER-UEF/fix_nh_uef.cpp +++ b/src/USER-UEF/fix_nh_uef.cpp @@ -163,7 +163,7 @@ FixNHUef::FixNHUef(LAMMPS *lmp, int narg, char **arg) : // flag that I change the box here (in case of nvt) - box_change_shape = 1; + box_change |= BOX_CHANGE_SHAPE; // initialize the UEFBox class which computes the box at each step @@ -244,7 +244,7 @@ void FixNHUef::init() for (int i=0; i < modify->nfix; i++) { if (strcmp(modify->fix[i]->id,id) != 0) - if (modify->fix[i]->box_change_shape != 0) + if ((modify->fix[i]->box_change & BOX_CHANGE_SHAPE) != 0) error->all(FLERR,"Can't use another fix which changes box shape with fix/nvt/npt/uef"); } diff --git a/src/atom.cpp b/src/atom.cpp index f2ee14291a306bb07a8517997b898e0e691b663c..134def74a394f779dfe3cc31794cd3e8025ceaae 100644 --- a/src/atom.cpp +++ b/src/atom.cpp @@ -44,9 +44,11 @@ using namespace LAMMPS_NS; using namespace MathConst; #define DELTA 1 -#define DELTA_MEMSTR 1024 +#define DELTA_PERATOM 64 #define EPSILON 1.0e-6 +enum{DOUBLE,INT,BIGINT}; + /* ---------------------------------------------------------------------- */ Atom::Atom(LAMMPS *lmp) : Pointers(lmp) @@ -66,58 +68,34 @@ Atom::Atom(LAMMPS *lmp) : Pointers(lmp) binhead = NULL; next = permute = NULL; - // initialize atom arrays - // customize by adding new array + // data structure with info on per-atom vectors/arrays + + nperatom = maxperatom = 0; + peratom = NULL; + + // -------------------------------------------------------------------- + // 1st customization section: customize by adding new per-atom variables tag = NULL; type = mask = NULL; image = NULL; x = v = f = NULL; - molecule = NULL; - molindex = molatom = NULL; + // charged and dipolar particles + q = NULL; mu = NULL; + + // finite-size particles + omega = angmom = torque = NULL; radius = rmass = NULL; ellipsoid = line = tri = body = NULL; - vfrac = s0 = NULL; - x0 = NULL; - - spin = NULL; - eradius = ervel = erforce = NULL; - cs = csforce = vforce = ervelforce = NULL; - etag = NULL; - - rho = drho = e = de = cv = NULL; - vest = NULL; - - // SPIN package - - sp = fm = fm_long = NULL; - - // USER-DPD - - uCond = uMech = uChem = uCG = uCGnew = NULL; - duChem = NULL; - dpdTheta = NULL; - - // USER-MESO + // molecular systems - cc = cc_flux = NULL; - edpd_temp = edpd_flux = edpd_cv = NULL; - - // USER-SMD - - contact_radius = NULL; - smd_data_9 = NULL; - smd_stress = NULL; - eff_plastic_strain = NULL; - eff_plastic_strain_rate = NULL; - damage = NULL; - - // molecular info + molecule = NULL; + molindex = molatom = NULL; bond_per_atom = extra_bond_per_atom = 0; num_bond = NULL; @@ -143,6 +121,50 @@ Atom::Atom(LAMMPS *lmp) : Pointers(lmp) nspecial = NULL; special = NULL; + // PERI package + + vfrac = s0 = NULL; + x0 = NULL; + + // SPIN package + + sp = fm = fm_long = NULL; + + // USER-EFF and USER-AWPMD packages + + spin = NULL; + eradius = ervel = erforce = NULL; + ervelforce = NULL; + cs = csforce = vforce = NULL; + etag = NULL; + + // USER-DPD package + + uCond = uMech = uChem = uCG = uCGnew = NULL; + duChem = dpdTheta = NULL; + + // USER-MESO package + + cc = cc_flux = NULL; + edpd_temp = edpd_flux = edpd_cv = NULL; + + // USER-SMD package + + contact_radius = NULL; + smd_data_9 = NULL; + smd_stress = NULL; + eff_plastic_strain = NULL; + eff_plastic_strain_rate = NULL; + damage = NULL; + + // USER-SPH package + + rho = drho = esph = desph = cv = NULL; + vest = NULL; + + // end of customization section + // -------------------------------------------------------------------- + // user-defined molecules nmolecule = 0; @@ -156,44 +178,12 @@ Atom::Atom(LAMMPS *lmp) : Pointers(lmp) iname = dname = NULL; // initialize atom style and array existence flags - // customize by adding new flag - sphere_flag = peri_flag = electron_flag = 0; - wavepacket_flag = sph_flag = 0; + set_atomflag_defaults(); - molecule_flag = 0; - q_flag = mu_flag = 0; - omega_flag = torque_flag = angmom_flag = 0; - radius_flag = rmass_flag = 0; - ellipsoid_flag = line_flag = tri_flag = body_flag = 0; + // initialize peratom data structure - // magnetic flags - - sp_flag = 0; - - vfrac_flag = 0; - spin_flag = eradius_flag = ervel_flag = erforce_flag = ervelforce_flag = 0; - cs_flag = csforce_flag = vforce_flag = etag_flag = 0; - - // USER-SPH, USER-MESO, and USER-DPD flags - - rho_flag = e_flag = cv_flag = vest_flag = 0; - dpd_flag = edpd_flag = tdpd_flag = 0; - - // USER-SMD - - smd_flag = 0; - contact_radius_flag = 0; - smd_data_9_flag = 0; - smd_stress_flag = 0; - x0_flag = 0; - eff_plastic_strain_flag = 0; - eff_plastic_strain_rate_flag = 0; - damage_flag = 0; - - // Peridynamic scale factor - - pdscale = 1.0; + peratom_create(); // ntype-length arrays @@ -247,8 +237,15 @@ Atom::~Atom() memory->destroy(next); memory->destroy(permute); + // delete peratom data struct + + for (int i = 0; i < nperatom; i++) + delete [] peratom[i].name; + memory->sfree(peratom); + + // -------------------------------------------------------------------- + // 2nd customization section: customize by adding new per-atom variables // delete atom arrays - // customize by adding new array memory->destroy(tag); memory->destroy(type); @@ -294,8 +291,8 @@ Atom::~Atom() memory->destroy(rho); memory->destroy(drho); - memory->destroy(e); - memory->destroy(de); + memory->destroy(esph); + memory->destroy(desph); memory->destroy(cv); memory->destroy(vest); @@ -347,6 +344,9 @@ Atom::~Atom() memory->destroy(improper_atom3); memory->destroy(improper_atom4); + // end of customization section + // -------------------------------------------------------------------- + // delete custom atom arrays for (int i = 0; i < nivector; i++) { @@ -405,6 +405,277 @@ void Atom::settings(Atom *old) } } +/* ---------------------------------------------------------------------- + one-time creation of peratom data structure +------------------------------------------------------------------------- */ + +void Atom::peratom_create() +{ + for (int i = 0; i < nperatom; i++) + delete [] peratom[i].name; + memory->sfree(peratom); + + peratom = NULL; + nperatom = maxperatom = 0; + + // -------------------------------------------------------------------- + // 3rd customization section: add peratom variables here, order does not matter + // register tagint & imageint variables as INT or BIGINT + + int tagintsize = INT; + if (sizeof(tagint) == 8) tagintsize = BIGINT; + int imageintsize = INT; + if (sizeof(imageint) == 8) imageintsize = BIGINT; + + add_peratom("id",&tag,tagintsize,0); + add_peratom("type",&type,INT,0); + add_peratom("mask",&mask,INT,0); + add_peratom("image",&image,imageintsize,0); + + add_peratom("x",&x,DOUBLE,3); + add_peratom("v",&v,DOUBLE,3); + add_peratom("f",&f,DOUBLE,3,1); // set per-thread flag + + add_peratom("rmass",&rmass,DOUBLE,0); + add_peratom("q",&q,DOUBLE,0); + add_peratom("mu",&mu,DOUBLE,4); + add_peratom("mu3",&mu,DOUBLE,3); // just first 3 values of mu[4] + + // finite size particles + + add_peratom("radius",&radius,DOUBLE,0); + add_peratom("omega",&omega,DOUBLE,3); + add_peratom("torque",&torque,DOUBLE,3,1); // set per-thread flag + add_peratom("angmom",&angmom,DOUBLE,3); + + add_peratom("ellipsoid",&ellipsoid,INT,0); + add_peratom("line",&line,INT,0); + add_peratom("tri",&tri,INT,0); + add_peratom("body",&body,INT,0); + + // MOLECULE package + + add_peratom("molecule",&molecule,tagintsize,0); + add_peratom("molindex",&molindex,INT,0); + add_peratom("molatom",&molatom,INT,0); + + add_peratom("nspecial",&nspecial,INT,3); + add_peratom_vary("special",&special,tagintsize,&maxspecial,&nspecial,3); + + add_peratom("num_bond",&num_bond,INT,0); + add_peratom_vary("bond_type",&bond_type,INT,&bond_per_atom,&num_bond); + add_peratom_vary("bond_atom",&bond_atom,tagintsize,&bond_per_atom,&num_bond); + + add_peratom("num_angle",&num_angle,INT,0); + add_peratom_vary("angle_type",&angle_type,INT,&angle_per_atom,&num_angle); + add_peratom_vary("angle_atom1",&angle_atom1,tagintsize, + &angle_per_atom,&num_angle); + add_peratom_vary("angle_atom2",&angle_atom2,tagintsize, + &angle_per_atom,&num_angle); + add_peratom_vary("angle_atom3",&angle_atom3,tagintsize, + &angle_per_atom,&num_angle); + + add_peratom("num_dihedral",&num_dihedral,INT,0); + add_peratom_vary("dihedral_type",&dihedral_type,INT, + &dihedral_per_atom,&num_dihedral); + add_peratom_vary("dihedral_atom1",&dihedral_atom1,tagintsize, + &dihedral_per_atom,&num_dihedral); + add_peratom_vary("dihedral_atom2",&dihedral_atom2,tagintsize, + &dihedral_per_atom,&num_dihedral); + add_peratom_vary("dihedral_atom3",&dihedral_atom3,tagintsize, + &dihedral_per_atom,&num_dihedral); + add_peratom_vary("dihedral_atom4",&dihedral_atom4,tagintsize, + &dihedral_per_atom,&num_dihedral); + + add_peratom("num_improper",&num_improper,INT,0); + add_peratom_vary("improper_type",&improper_type,INT, + &improper_per_atom,&num_improper); + add_peratom_vary("improper_atom1",&improper_atom1,tagintsize, + &improper_per_atom,&num_improper); + add_peratom_vary("improper_atom2",&improper_atom2,tagintsize, + &improper_per_atom,&num_improper); + add_peratom_vary("improper_atom3",&improper_atom3,tagintsize, + &improper_per_atom,&num_improper); + add_peratom_vary("improper_atom4",&improper_atom4,tagintsize, + &improper_per_atom,&num_improper); + + // PERI package + + add_peratom("vfrac",&vfrac,DOUBLE,0); + add_peratom("s0",&s0,DOUBLE,0); + add_peratom("x0",&x0,DOUBLE,3); + + // SPIN package + + add_peratom("sp",&sp,DOUBLE,4); + add_peratom("fm",&fm,DOUBLE,3,1); + add_peratom("fm_long",&fm_long,DOUBLE,3,1); + + // USER-EFF package + + add_peratom("spin",&spin,INT,0); + add_peratom("eradius",&eradius,DOUBLE,0); + add_peratom("ervel",&ervel,DOUBLE,0); + add_peratom("erforce",&erforce,DOUBLE,0,1); // set per-thread flag + + // USER-AWPMD package + + add_peratom("cs",&cs,DOUBLE,2); + add_peratom("csforce",&csforce,DOUBLE,2); + add_peratom("vforce",&vforce,DOUBLE,3); + add_peratom("ervelforce",&ervelforce,DOUBLE,0); + add_peratom("etag",&etag,INT,0); + + // USER-DPD package + + add_peratom("dpdTheta",&dpdTheta,DOUBLE,0); + add_peratom("uCond",&uCond,DOUBLE,0); + add_peratom("uMech",&uMech,DOUBLE,0); + add_peratom("uChem",&uChem,DOUBLE,0); + add_peratom("uCG",&uCG,DOUBLE,0); + add_peratom("uCGnew",&uCGnew,DOUBLE,0); + add_peratom("duChem",&duChem,DOUBLE,0); + + // USER-MESO package + + add_peratom("edpd_cv",&edpd_cv,DOUBLE,0); + add_peratom("edpd_temp",&edpd_temp,DOUBLE,0); + add_peratom("vest_temp",&vest_temp,DOUBLE,0); + add_peratom("edpd_flux",&edpd_flux,DOUBLE,0,1); // set per-thread flag + add_peratom("cc",&cc,DOUBLE,1); + add_peratom("cc_flux",&cc_flux,DOUBLE,1,1); // set per-thread flag + + // USER-SPH package + + add_peratom("rho",&rho,DOUBLE,0); + add_peratom("drho",&drho,DOUBLE,0,1); // set per-thread flag + add_peratom("esph",&esph,DOUBLE,0); + add_peratom("desph",&desph,DOUBLE,0,1); // set per-thread flag + add_peratom("vest",&vest,DOUBLE,3); + add_peratom("cv",&cv,DOUBLE,0); + + // USER-SMD package + + add_peratom("contact_radius",&contact_radius,DOUBLE,0); + add_peratom("smd_data_9",&smd_data_9,DOUBLE,1); + add_peratom("smd_stress",&smd_stress,DOUBLE,1); + add_peratom("eff_plastic_strain",&eff_plastic_strain,DOUBLE,0); + add_peratom("eff_plastic_strain_rate",&eff_plastic_strain_rate,DOUBLE,0); + add_peratom("damage",&damage,DOUBLE,0); + + // end of customization section + // -------------------------------------------------------------------- +} + +/* ---------------------------------------------------------------------- + add info for a single per-atom vector/array to PerAtom data struct + cols = 0: per-atom vector + cols = N: static per-atom array with N columns + use add_peratom_vary() when column count varies per atom +------------------------------------------------------------------------- */ + +void Atom::add_peratom(const char *name, void *address, + int datatype, int cols, int threadflag) +{ + if (nperatom == maxperatom) { + maxperatom += DELTA_PERATOM; + peratom = (PerAtom *) + memory->srealloc(peratom,maxperatom*sizeof(PerAtom),"atom:peratom"); + } + + int n = strlen(name) + 1; + peratom[nperatom].name = new char[n]; + strcpy(peratom[nperatom].name,name); + peratom[nperatom].address = address; + peratom[nperatom].datatype = datatype; + peratom[nperatom].cols = cols; + peratom[nperatom].threadflag = threadflag; + peratom[nperatom].address_length = NULL; + + nperatom++; +} + +/* ---------------------------------------------------------------------- + change the column count of an existing peratom array entry + allows atom_style to specify column count as an argument + see atom_style tdpd as an example +------------------------------------------------------------------------- */ + +void Atom::add_peratom_change_columns(const char *name, int cols) +{ + for (int i = 0; i < nperatom; i++) { + if (strcmp(name,peratom[i].name) == 0) { + peratom[i].cols = cols; + return; + } + } + error->all(FLERR,"Could not find name of peratom array for column change"); +} + +/* ---------------------------------------------------------------------- + add info for a single per-atom array to PerAtom data struct + cols = address of int variable with max columns per atom + for collength = 0: + length = address of peratom vector with column count per atom + e.g. num_bond + for collength = N: + length = address of peratom array with column count per atom + collength = index of column (1 to N) in peratom array with count + e.g. nspecial +------------------------------------------------------------------------- */ + +void Atom::add_peratom_vary(const char *name, void *address, + int datatype, int *cols, void *length, int collength) +{ + if (nperatom == maxperatom) { + maxperatom += DELTA_PERATOM; + peratom = (PerAtom *) + memory->srealloc(peratom,maxperatom*sizeof(PerAtom),"atom:peratom"); + } + + int n = strlen(name) + 1; + peratom[nperatom].name = new char[n]; + strcpy(peratom[nperatom].name,name); + peratom[nperatom].address = address; + peratom[nperatom].datatype = datatype; + peratom[nperatom].cols = -1; + peratom[nperatom].threadflag = 0; + peratom[nperatom].address_maxcols = cols; + peratom[nperatom].address_length = length; + peratom[nperatom].collength = collength; + + nperatom++; +} + +/* ---------------------------------------------------------------------- + add info for a single per-atom array to PerAtom data struct +------------------------------------------------------------------------- */ + +void Atom::set_atomflag_defaults() +{ + // -------------------------------------------------------------------- + // 4th customization section: customize by adding new flag + // identical list as 2nd customization in atom.h + + sphere_flag = ellipsoid_flag = line_flag = tri_flag = body_flag = 0; + peri_flag = electron_flag = 0; + wavepacket_flag = sph_flag = 0; + molecule_flag = molindex_flag = molatom_flag = 0; + q_flag = mu_flag = 0; + rmass_flag = radius_flag = omega_flag = torque_flag = angmom_flag = 0; + vfrac_flag = spin_flag = eradius_flag = ervel_flag = erforce_flag = 0; + cs_flag = csforce_flag = vforce_flag = ervelforce_flag = etag_flag = 0; + rho_flag = esph_flag = cv_flag = vest_flag = 0; + dpd_flag = edpd_flag = tdpd_flag = 0; + sp_flag = 0; + x0_flag = 0; + smd_flag = damage_flag = 0; + contact_radius_flag = smd_data_9_flag = smd_stress_flag = 0; + eff_plastic_strain_flag = eff_plastic_strain_rate_flag = 0; + + pdscale = 1.0; +} + /* ---------------------------------------------------------------------- create an AtomVec style called from lammps.cpp, input script, restart file, replicate @@ -419,26 +690,8 @@ void Atom::create_avec(const char *style, int narg, char **arg, int trysuffix) // unset atom style and array existence flags // may have been set by old avec - // customize by adding new flag - - sphere_flag = peri_flag = electron_flag = 0; - wavepacket_flag = sph_flag = 0; - - molecule_flag = 0; - q_flag = mu_flag = 0; - omega_flag = torque_flag = angmom_flag = 0; - radius_flag = rmass_flag = 0; - ellipsoid_flag = line_flag = tri_flag = body_flag = 0; - - // magnetic flags - - sp_flag = 0; - - vfrac_flag = 0; - spin_flag = eradius_flag = ervel_flag = erforce_flag = ervelforce_flag = 0; - cs_flag = csforce_flag = vforce_flag = etag_flag = 0; - rho_flag = e_flag = cv_flag = vest_flag = 0; + set_atomflag_defaults(); // create instance of AtomVec // use grow() to initialize atom-based arrays to length 1 @@ -522,6 +775,7 @@ AtomVec *Atom::avec_creator(LAMMPS *lmp) return new T(lmp); } + /* ---------------------------------------------------------------------- */ void Atom::init() @@ -777,56 +1031,6 @@ void Atom::bonus_check() "atoms with enabled body flags"); } -/* ---------------------------------------------------------------------- - count and return words in a single line - make copy of line before using strtok so as not to change line - trim anything from '#' onward -------------------------------------------------------------------------- */ - -int Atom::count_words(const char *line) -{ - int n = strlen(line) + 1; - char *copy; - memory->create(copy,n,"atom:copy"); - strcpy(copy,line); - - char *ptr; - if ((ptr = strchr(copy,'#'))) *ptr = '\0'; - - if (strtok(copy," \t\n\r\f") == NULL) { - memory->destroy(copy); - return 0; - } - n = 1; - while (strtok(NULL," \t\n\r\f")) n++; - - memory->destroy(copy); - return n; -} - -/* ---------------------------------------------------------------------- - count and return words in a single line using provided copy buf - make copy of line before using strtok so as not to change line - trim anything from '#' onward -------------------------------------------------------------------------- */ - -int Atom::count_words(const char *line, char *copy) -{ - strcpy(copy,line); - - char *ptr; - if ((ptr = strchr(copy,'#'))) *ptr = '\0'; - - if (strtok(copy," \t\n\r\f") == NULL) { - memory->destroy(copy); - return 0; - } - int n = 1; - while (strtok(NULL," \t\n\r\f")) n++; - - return n; -} - /* ---------------------------------------------------------------------- deallocate molecular topology arrays done before realloc with (possibly) new 2nd dimension set to @@ -885,7 +1089,7 @@ void Atom::data_atoms(int n, char *buf, tagint id_offset, tagint mol_offset, next = strchr(buf,'\n'); *next = '\0'; - int nwords = count_words(buf); + int nwords = utils::count_words(buf); *next = '\n'; if (nwords != avec->size_data_atom && nwords != avec->size_data_atom + 3) @@ -1035,7 +1239,7 @@ void Atom::data_vels(int n, char *buf, tagint id_offset) next = strchr(buf,'\n'); *next = '\0'; - int nwords = count_words(buf); + int nwords = utils::count_words(buf); *next = '\n'; if (nwords != avec->size_data_vel) @@ -1387,7 +1591,7 @@ void Atom::data_bonus(int n, char *buf, AtomVec *avec_bonus, tagint id_offset) next = strchr(buf,'\n'); *next = '\0'; - int nwords = count_words(buf); + int nwords = utils::count_words(buf); *next = '\n'; if (nwords != avec_bonus->size_data_bonus) @@ -1428,8 +1632,7 @@ void Atom::data_bonus(int n, char *buf, AtomVec *avec_bonus, tagint id_offset) call style-specific routine to parse line ------------------------------------------------------------------------- */ -void Atom::data_bodies(int n, char *buf, AtomVecBody *avec_body, - tagint id_offset) +void Atom::data_bodies(int n, char *buf, AtomVec *avec_body, tagint id_offset) { int j,m,nvalues,tagdata,ninteger,ndouble; @@ -2235,11 +2438,13 @@ void Atom::remove_custom(int flag, int index) /* ---------------------------------------------------------------------- return a pointer to a named internal variable if don't recognize name, return NULL - customize by adding names ------------------------------------------------------------------------- */ void *Atom::extract(char *name) { + // -------------------------------------------------------------------- + // 5th customization section: customize by adding new variable name + if (strcmp(name,"mass") == 0) return (void *) mass; if (strcmp(name,"id") == 0) return (void *) tag; @@ -2277,8 +2482,8 @@ void *Atom::extract(char *name) if (strcmp(name,"rho") == 0) return (void *) rho; if (strcmp(name,"drho") == 0) return (void *) drho; - if (strcmp(name,"e") == 0) return (void *) e; - if (strcmp(name,"de") == 0) return (void *) de; + if (strcmp(name,"esph") == 0) return (void *) esph; + if (strcmp(name,"desph") == 0) return (void *) desph; if (strcmp(name,"cv") == 0) return (void *) cv; if (strcmp(name,"vest") == 0) return (void *) vest; @@ -2294,6 +2499,9 @@ void *Atom::extract(char *name) if (strcmp(name,"dpdTheta") == 0) return (void *) dpdTheta; if (strcmp(name,"edpd_temp") == 0) return (void *) edpd_temp; + // end of customization section + // -------------------------------------------------------------------- + return NULL; } @@ -2305,11 +2513,7 @@ void *Atom::extract(char *name) bigint Atom::memory_usage() { - memlength = DELTA_MEMSTR; - memory->create(memstr,memlength,"atom:memstr"); - memstr[0] = '\0'; bigint bytes = avec->memory_usage(); - memory->destroy(memstr); bytes += max_same*sizeof(int); if (map_style == 1) @@ -2326,30 +2530,3 @@ bigint Atom::memory_usage() return bytes; } -/* ---------------------------------------------------------------------- - accumulate per-atom vec names in memstr, padded by spaces - return 1 if padded str is not already in memlist, else 0 -------------------------------------------------------------------------- */ - -int Atom::memcheck(const char *str) -{ - int n = strlen(str) + 3; - char *padded = new char[n]; - strcpy(padded," "); - strcat(padded,str); - strcat(padded," "); - - if (strstr(memstr,padded)) { - delete [] padded; - return 0; - } - - if ((int)strlen(memstr) + n >= memlength) { - memlength += DELTA_MEMSTR; - memory->grow(memstr,memlength,"atom:memstr"); - } - - strcat(memstr,padded); - delete [] padded; - return 1; -} diff --git a/src/atom.h b/src/atom.h index 4c640f3252e8f3a69b9d12cda9e781df623a778d..b94189e6e16889b453dffc7d50066e8d89c83b50 100644 --- a/src/atom.h +++ b/src/atom.h @@ -39,6 +39,8 @@ class Atom : protected Pointers { bigint ntris; // number of triangles bigint nbodies; // number of bodies + // system properties + bigint nbonds,nangles,ndihedrals,nimpropers; int ntypes,nbondtypes,nangletypes,ndihedraltypes,nimpropertypes; int bond_per_atom,angle_per_atom,dihedral_per_atom,improper_per_atom; @@ -49,53 +51,67 @@ class Atom : protected Pointers { int nfirst; // # of atoms in first group on this proc char *firstgroupname; // group-ID to store first, NULL if unset - // per-atom arrays - // customize by adding new array + // -------------------------------------------------------------------- + // 1st customization section: customize by adding new per-atom variable + // per-atom vectors and arrays tagint *tag; int *type,*mask; imageint *image; double **x,**v,**f; - tagint *molecule; - int *molindex,*molatom; + // charged and dipolar particles + double *rmass; double *q,**mu; + + // finite-size particles + + double *radius; double **omega,**angmom,**torque; - double *radius,*rmass; int *ellipsoid,*line,*tri,*body; - // SPIN package + // molecular systems + + tagint *molecule; + int *molindex,*molatom; + + int **nspecial; // 0,1,2 = cumulative # of 1-2,1-3,1-4 neighs + tagint **special; // IDs of 1-2,1-3,1-4 neighs of each atom + int maxspecial; // special[nlocal][maxspecial] + + int *num_bond; + int **bond_type; + tagint **bond_atom; + + int *num_angle; + int **angle_type; + tagint **angle_atom1,**angle_atom2,**angle_atom3; + + int *num_dihedral; + int **dihedral_type; + tagint **dihedral_atom1,**dihedral_atom2,**dihedral_atom3,**dihedral_atom4; - double **sp; - double **fm; - double **fm_long; + int *num_improper; + int **improper_type; + tagint **improper_atom1,**improper_atom2,**improper_atom3,**improper_atom4; // PERI package double *vfrac,*s0; double **x0; - // USER-EFF and USER-AWPMD packages - - int *spin; - double *eradius,*ervel,*erforce,*ervelforce; - double *cs,*csforce,*vforce; - int *etag; + // SPIN package - // USER-SPH package + double **sp,**fm,**fm_long; - double *rho,*drho,*e,*de,*cv; - double **vest; + // USER_EFF and USER-AWPMD packages - // USER-SMD package - - double *contact_radius; - double **smd_data_9; - double **smd_stress; - double *eff_plastic_strain; - double *eff_plastic_strain_rate; - double *damage; + int *spin; + double *eradius,*ervel,*erforce; + double *ervelforce; + double **cs,**csforce,**vforce; + int *etag; // USER-DPD package @@ -106,46 +122,37 @@ class Atom : protected Pointers { // USER-MESO package - double **cc, **cc_flux; // cc = chemical concentration + double **cc,**cc_flux; // cc = chemical concentration double *edpd_temp,*edpd_flux; // temperature and heat flux + double *vest_temp; double *edpd_cv; // heat capacity int cc_species; - // molecular info - - int **nspecial; // 0,1,2 = cumulative # of 1-2,1-3,1-4 neighs - tagint **special; // IDs of 1-2,1-3,1-4 neighs of each atom - int maxspecial; // special[nlocal][maxspecial] - - int *num_bond; - int **bond_type; - tagint **bond_atom; - - int *num_angle; - int **angle_type; - tagint **angle_atom1,**angle_atom2,**angle_atom3; + // USER-SMD package - int *num_dihedral; - int **dihedral_type; - tagint **dihedral_atom1,**dihedral_atom2,**dihedral_atom3,**dihedral_atom4; + double *contact_radius; + double **smd_data_9; + double **smd_stress; + double *eff_plastic_strain; + double *eff_plastic_strain_rate; + double *damage; - int *num_improper; - int **improper_type; - tagint **improper_atom1,**improper_atom2,**improper_atom3,**improper_atom4; + // USER-SPH package - // custom arrays used by fix property/atom + double *rho,*drho,*esph,*desph,*cv; + double **vest; - int **ivector; - double **dvector; - char **iname,**dname; - int nivector,ndvector; + // end of customization section + // -------------------------------------------------------------------- - // atom style and per-atom array existence flags - // customize by adding new flag + // -------------------------------------------------------------------- + // 2nd customization section: customize by adding new flags + // identical list as Atom::set_atomflag_defaults() + // most are existence flags for per-atom vectors and arrays + // 1 if variable is used, 0 if not int sphere_flag,ellipsoid_flag,line_flag,tri_flag,body_flag; int peri_flag,electron_flag; - int ecp_flag; int wavepacket_flag,sph_flag; int molecule_flag,molindex_flag,molatom_flag; @@ -153,28 +160,50 @@ class Atom : protected Pointers { int rmass_flag,radius_flag,omega_flag,torque_flag,angmom_flag; int vfrac_flag,spin_flag,eradius_flag,ervel_flag,erforce_flag; int cs_flag,csforce_flag,vforce_flag,ervelforce_flag,etag_flag; - int rho_flag,e_flag,cv_flag,vest_flag; + int rho_flag,esph_flag,cv_flag,vest_flag; int dpd_flag,edpd_flag,tdpd_flag; - //USER-SPIN package + // SPIN package int sp_flag; // USER-SMD package - int smd_flag; - int contact_radius_flag; - int smd_data_9_flag; - int smd_stress_flag; int x0_flag; - int eff_plastic_strain_flag; - int eff_plastic_strain_rate_flag; - int damage_flag; + int smd_flag,damage_flag; + int contact_radius_flag,smd_data_9_flag,smd_stress_flag; + int eff_plastic_strain_flag,eff_plastic_strain_rate_flag; // Peridynamics scale factor, used by dump cfg double pdscale; + // end of customization section + // -------------------------------------------------------------------- + + // per-atom data struct describing all per-atom vectors/arrays + + struct PerAtom { + char *name; + void *address; + void *address_length; + int *address_maxcols; + int datatype; + int cols; + int collength; + int threadflag; + }; + + PerAtom *peratom; + int nperatom,maxperatom; + + // custom arrays used by fix property/atom + + int **ivector; + double **dvector; + char **iname,**dname; + int nivector,ndvector; + // molecule templates // each template can be a set of consecutive molecules // each with same ID (stored in molecules) @@ -221,14 +250,21 @@ class Atom : protected Pointers { typedef std::map AtomVecCreatorMap; AtomVecCreatorMap *avec_map; + // -------------------------------------------------------------------- // functions Atom(class LAMMPS *); ~Atom(); void settings(class Atom *); + void peratom_create(); + void add_peratom(const char *, void *, int, int, int threadflag=0); + void add_peratom_change_columns(const char *, int); + void add_peratom_vary(const char *, void *, int, int *, + void *, int collength=0); void create_avec(const char *, int, char **, int); virtual class AtomVec *new_avec(const char *, int, int &); + void init(); void setup(); @@ -241,8 +277,6 @@ class Atom : protected Pointers { void bonus_check(); int parse_data(const char *); - int count_words(const char *); - int count_words(const char *, char *); void deallocate_topology(); @@ -253,7 +287,7 @@ class Atom : protected Pointers { void data_dihedrals(int, char *, int *, tagint, int); void data_impropers(int, char *, int *, tagint, int); void data_bonus(int, char *, class AtomVec *, tagint); - void data_bodies(int, char *, class AtomVecBody *, tagint); + void data_bodies(int, char *, class AtomVec *, tagint); void data_fix_compute_variable(int, int); virtual void allocate_type_arrays(); @@ -290,8 +324,10 @@ class Atom : protected Pointers { inline int get_max_same() {return max_same;}; inline int get_map_maxarray() {return map_maxarray+1;}; + // NOTE: placeholder method until KOKKOS/AtomVec is refactored + int memcheck(const char *) {return 1;} + bigint memory_usage(); - int memcheck(const char *); // functions for global to local ID mapping // map lookup function inlined for efficiency @@ -344,9 +380,7 @@ class Atom : protected Pointers { double bininvx,bininvy,bininvz; // inverse actual bin sizes double bboxlo[3],bboxhi[3]; // bounding box of my sub-domain - int memlength; // allocated size of memstr - char *memstr; // string of array names already counted - + void set_atomflag_defaults(); void setup_sort_bins(); int next_prime(int); diff --git a/src/atom_vec.cpp b/src/atom_vec.cpp index c4dd53ad18705b924111bea4ff1f3b67f2727cfa..fc9c3646cfd1dc18a1c004cfec212230a4d78ba1 100644 --- a/src/atom_vec.cpp +++ b/src/atom_vec.cpp @@ -12,128 +12,1918 @@ ------------------------------------------------------------------------- */ #include "atom_vec.h" +#include #include #include "atom.h" -#include "force.h" +#include "comm.h" #include "domain.h" +#include "force.h" +#include "modify.h" +#include "fix.h" +#include "math_const.h" +#include "memory.h" #include "error.h" #include "utils.h" +#include "tokenizer.h" + +using namespace LAMMPS_NS; +using namespace MathConst; + +#define DELTA 16384 +#define DELTA_BONUS 8192 + +enum{DOUBLE,INT,BIGINT}; + +/* ---------------------------------------------------------------------- */ + +AtomVec::AtomVec(LAMMPS *lmp) : Pointers(lmp) +{ + nmax = 0; + + molecular = 0; + bonds_allow = angles_allow = dihedrals_allow = impropers_allow = 0; + mass_type = dipole_type = 0; + forceclearflag = 0; + maxexchange = 0; + bonus_flag = 0; + size_forward_bonus = size_border_bonus = 0; + + kokkosable = 0; + + nargcopy = 0; + argcopy = NULL; + + threads = NULL; + + // peratom variables auto-included in corresponding child style fields string + // these fields cannot be specified in the fields string + + default_grow = "id type mask image x v f"; + default_copy = "id type mask image x v"; + default_comm = "x"; + default_comm_vel = "x v"; + default_reverse = "f"; + default_border = "id type mask x"; + default_border_vel = "id type mask x v"; + default_exchange = "id type mask image x v"; + default_restart = "id type mask image x v"; + default_create = "id type mask image x v"; + default_data_atom = ""; + default_data_vel = ""; + + // initializations + + init_method(&mgrow); + init_method(&mcopy); + init_method(&mcomm); + init_method(&mcomm_vel); + init_method(&mreverse); + init_method(&mborder); + init_method(&mborder_vel); + init_method(&mexchange); + init_method(&mrestart); + init_method(&mcreate); + init_method(&mdata_atom); + init_method(&mdata_vel); +} + +/* ---------------------------------------------------------------------- */ + +AtomVec::~AtomVec() +{ + for (int i = 0; i < nargcopy; i++) delete [] argcopy[i]; + delete [] argcopy; + + destroy_method(&mgrow); + destroy_method(&mcopy); + destroy_method(&mcomm); + destroy_method(&mcomm_vel); + destroy_method(&mreverse); + destroy_method(&mborder); + destroy_method(&mborder_vel); + destroy_method(&mexchange); + destroy_method(&mrestart); + destroy_method(&mcreate); + destroy_method(&mdata_atom); + destroy_method(&mdata_vel); + + delete [] threads; +} + +/* ---------------------------------------------------------------------- + make copy of args for use by restart & replicate +------------------------------------------------------------------------- */ + +void AtomVec::store_args(int narg, char **arg) +{ + nargcopy = narg; + argcopy = new char*[nargcopy]; + for (int i = 0; i < nargcopy; i++) { + int n = strlen(arg[i]) + 1; + argcopy[i] = new char[n]; + strcpy(argcopy[i],arg[i]); + } +} + +/* ---------------------------------------------------------------------- + no additional args by default +------------------------------------------------------------------------- */ + +void AtomVec::process_args(int narg, char ** /*arg*/) +{ + if (narg) error->all(FLERR,"Invalid atom_style command"); +} + +/* ---------------------------------------------------------------------- + pull settings from Domain needed for pack_comm_vel and pack_border_vel + child classes may override this method, but should also invoke it +------------------------------------------------------------------------- */ + +void AtomVec::init() +{ + deform_vremap = domain->deform_vremap; + deform_groupbit = domain->deform_groupbit; + h_rate = domain->h_rate; + + if (lmp->kokkos != NULL && !kokkosable) + error->all(FLERR,"KOKKOS package requires a kokkos enabled atom_style"); +} + +/* ---------------------------------------------------------------------- + roundup N so it is a multiple of DELTA + error if N exceeds 32-bit int, since will be used as arg to grow() +------------------------------------------------------------------------- */ + +bigint AtomVec::roundup(bigint n) +{ + if (n % DELTA) n = n/DELTA * DELTA + DELTA; + if (n > MAXSMALLINT) + error->one(FLERR,"Too many atoms created on one or more procs"); + return n; +} + +/* ---------------------------------------------------------------------- + grow nmax so it is a multiple of DELTA +------------------------------------------------------------------------- */ + +void AtomVec::grow_nmax() +{ + nmax = nmax/DELTA * DELTA; + nmax += DELTA; +} + +/* ---------------------------------------------------------------------- + grow nmax_bonus so it is a multiple of DELTA_BONUS +------------------------------------------------------------------------- */ + +int AtomVec::grow_nmax_bonus(int nmax_bonus) +{ + nmax_bonus = nmax_bonus/DELTA_BONUS * DELTA_BONUS; + nmax_bonus += DELTA_BONUS; + return nmax_bonus; +} + +/* ---------------------------------------------------------------------- + grow atom arrays + n = 0 grows arrays by a chunk + n > 0 allocates arrays to size n +------------------------------------------------------------------------- */ + +void AtomVec::grow(int n) +{ + int datatype,cols,maxcols; + void *pdata; + + if (n == 0) grow_nmax(); + else nmax = n; + atom->nmax = nmax; + if (nmax < 0 || nmax > MAXSMALLINT) + error->one(FLERR,"Per-processor system is too big"); + + tag = memory->grow(atom->tag,nmax,"atom:tag"); + type = memory->grow(atom->type,nmax,"atom:type"); + mask = memory->grow(atom->mask,nmax,"atom:mask"); + image = memory->grow(atom->image,nmax,"atom:image"); + x = memory->grow(atom->x,nmax,3,"atom:x"); + v = memory->grow(atom->v,nmax,3,"atom:v"); + f = memory->grow(atom->f,nmax*comm->nthreads,3,"atom:f"); + + for (int i = 0; i < ngrow; i++) { + pdata = mgrow.pdata[i]; + datatype = mgrow.datatype[i]; + cols = mgrow.cols[i]; + const int nthreads = threads[i] ? comm->nthreads : 1; + if (datatype == DOUBLE) { + if (cols == 0) + memory->grow(*((double **) pdata),nmax*nthreads,"atom:dvec"); + else if (cols > 0) + memory->grow(*((double ***) pdata),nmax*nthreads,cols,"atom:darray"); + else { + maxcols = *(mgrow.maxcols[i]); + memory->grow(*((double ***) pdata),nmax*nthreads,maxcols,"atom:darray"); + } + } else if (datatype == INT) { + if (cols == 0) + memory->grow(*((int **) pdata),nmax*nthreads,"atom:ivec"); + else if (cols > 0) + memory->grow(*((int ***) pdata),nmax*nthreads,cols,"atom:iarray"); + else { + maxcols = *(mgrow.maxcols[i]); + memory->grow(*((int ***) pdata),nmax*nthreads,maxcols,"atom:iarray"); + } + } else if (datatype == BIGINT) { + if (cols == 0) + memory->grow(*((bigint **) pdata),nmax*nthreads,"atom:bvec"); + else if (cols > 0) + memory->grow(*((bigint ***) pdata),nmax*nthreads,cols,"atom:barray"); + else { + maxcols = *(mgrow.maxcols[i]); + memory->grow(*((int ***) pdata),nmax*nthreads,maxcols,"atom:barray"); + } + } + } + + for (int iextra = 0; iextra < atom->nextra_grow; iextra++) + modify->fix[atom->extra_grow[iextra]]->grow_arrays(nmax); + + grow_pointers(); +} + +/* ---------------------------------------------------------------------- + copy atom I info to atom J +------------------------------------------------------------------------- */ + +void AtomVec::copy(int i, int j, int delflag) +{ + int m,n,datatype,cols,collength,ncols; + void *pdata,*plength; + + tag[j] = tag[i]; + type[j] = type[i]; + mask[j] = mask[i]; + image[j] = image[i]; + x[j][0] = x[i][0]; + x[j][1] = x[i][1]; + x[j][2] = x[i][2]; + v[j][0] = v[i][0]; + v[j][1] = v[i][1]; + v[j][2] = v[i][2]; + + if (ncopy) { + for (n = 0; n < ncopy; n++) { + pdata = mcopy.pdata[n]; + datatype = mcopy.datatype[n]; + cols = mcopy.cols[n]; + if (datatype == DOUBLE) { + if (cols == 0) { + double *vec = *((double **) pdata); + vec[j] = vec[i]; + } else if (cols > 0) { + double **array = *((double ***) pdata); + for (m = 0; m < cols; m++) + array[j][m] = array[i][m]; + } else { + double **array = *((double ***) pdata); + collength = mcopy.collength[n]; + plength = mcopy.plength[n]; + if (collength) ncols = (*((int ***) plength))[i][collength-1]; + else ncols = (*((int **) plength))[i]; + for (m = 0; m < ncols; m++) + array[j][m] = array[i][m]; + } + } else if (datatype == INT) { + if (cols == 0) { + int *vec = *((int **) pdata); + vec[j] = vec[i]; + } else if (cols > 0) { + int **array = *((int ***) pdata); + for (m = 0; m < cols; m++) + array[j][m] = array[i][m]; + } else { + int **array = *((int ***) pdata); + collength = mcopy.collength[n]; + plength = mcopy.plength[n]; + if (collength) ncols = (*((int ***) plength))[i][collength-1]; + else ncols = (*((int **) plength))[i]; + for (m = 0; m < ncols; m++) + array[j][m] = array[i][m]; + } + } else if (datatype == BIGINT) { + if (cols == 0) { + bigint *vec = *((bigint **) pdata); + vec[j] = vec[i]; + } else if (cols > 0) { + bigint **array = *((bigint ***) pdata); + for (m = 0; m < cols; m++) + array[j][m] = array[i][m]; + } else { + bigint **array = *((bigint ***) pdata); + collength = mcopy.collength[n]; + plength = mcopy.plength[n]; + if (collength) ncols = (*((int ***) plength))[i][collength-1]; + else ncols = (*((int **) plength))[i]; + for (m = 0; m < ncols; m++) + array[j][m] = array[i][m]; + } + } + } + } + + if (bonus_flag) copy_bonus(i,j,delflag); + + if (atom->nextra_grow) + for (int iextra = 0; iextra < atom->nextra_grow; iextra++) + modify->fix[atom->extra_grow[iextra]]->copy_arrays(i,j,delflag); +} + +/* ---------------------------------------------------------------------- */ + +int AtomVec::pack_comm(int n, int *list, double *buf, + int pbc_flag, int *pbc) +{ + int i,j,m,mm,nn,datatype,cols; + double dx,dy,dz; + void *pdata; + + m = 0; + if (pbc_flag == 0) { + for (i = 0; i < n; i++) { + j = list[i]; + buf[m++] = x[j][0]; + buf[m++] = x[j][1]; + buf[m++] = x[j][2]; + } + } else { + if (domain->triclinic == 0) { + dx = pbc[0]*domain->xprd; + dy = pbc[1]*domain->yprd; + dz = pbc[2]*domain->zprd; + } else { + dx = pbc[0]*domain->xprd + pbc[5]*domain->xy + pbc[4]*domain->xz; + dy = pbc[1]*domain->yprd + pbc[3]*domain->yz; + dz = pbc[2]*domain->zprd; + } + for (i = 0; i < n; i++) { + j = list[i]; + buf[m++] = x[j][0] + dx; + buf[m++] = x[j][1] + dy; + buf[m++] = x[j][2] + dz; + } + } + + if (ncomm) { + for (nn = 0; nn < ncomm; nn++) { + pdata = mcomm.pdata[nn]; + datatype = mcomm.datatype[nn]; + cols = mcomm.cols[nn]; + if (datatype == DOUBLE) { + if (cols == 0) { + double *vec = *((double **) pdata); + for (i = 0; i < n; i++) { + j = list[i]; + buf[m++] = vec[j]; + } + } else { + double **array = *((double ***) pdata); + for (i = 0; i < n; i++) { + j = list[i]; + for (mm = 0; mm < cols; mm++) + buf[m++] = array[j][mm]; + } + } + } else if (datatype == INT) { + if (cols == 0) { + int *vec = *((int **) pdata); + for (i = 0; i < n; i++) { + j = list[i]; + buf[m++] = ubuf(vec[j]).d; + } + } else { + int **array = *((int ***) pdata); + for (i = 0; i < n; i++) { + j = list[i]; + for (mm = 0; mm < cols; mm++) + buf[m++] = ubuf(array[j][mm]).d; + } + } + } else if (datatype == BIGINT) { + if (cols == 0) { + bigint *vec = *((bigint **) pdata); + for (i = 0; i < n; i++) { + j = list[i]; + buf[m++] = ubuf(vec[j]).d; + } + } else { + bigint **array = *((bigint ***) pdata); + for (i = 0; i < n; i++) { + j = list[i]; + for (mm = 0; mm < cols; mm++) + buf[m++] = ubuf(array[j][mm]).d; + } + } + } + } + } + + if (bonus_flag) m += pack_comm_bonus(n,list,&buf[m]); + + return m; +} + +/* ---------------------------------------------------------------------- */ + +int AtomVec::pack_comm_vel(int n, int *list, double *buf, + int pbc_flag, int *pbc) +{ + int i,j,m,mm,nn,datatype,cols; + double dx,dy,dz,dvx,dvy,dvz; + void *pdata; + + m = 0; + if (pbc_flag == 0) { + for (i = 0; i < n; i++) { + j = list[i]; + buf[m++] = x[j][0]; + buf[m++] = x[j][1]; + buf[m++] = x[j][2]; + buf[m++] = v[j][0]; + buf[m++] = v[j][1]; + buf[m++] = v[j][2]; + } + } else { + if (domain->triclinic == 0) { + dx = pbc[0]*domain->xprd; + dy = pbc[1]*domain->yprd; + dz = pbc[2]*domain->zprd; + } else { + dx = pbc[0]*domain->xprd + pbc[5]*domain->xy + pbc[4]*domain->xz; + dy = pbc[1]*domain->yprd + pbc[3]*domain->yz; + dz = pbc[2]*domain->zprd; + } + if (!deform_vremap) { + for (i = 0; i < n; i++) { + j = list[i]; + buf[m++] = x[j][0] + dx; + buf[m++] = x[j][1] + dy; + buf[m++] = x[j][2] + dz; + buf[m++] = v[j][0]; + buf[m++] = v[j][1]; + buf[m++] = v[j][2]; + } + } else { + dvx = pbc[0]*h_rate[0] + pbc[5]*h_rate[5] + pbc[4]*h_rate[4]; + dvy = pbc[1]*h_rate[1] + pbc[3]*h_rate[3]; + dvz = pbc[2]*h_rate[2]; + for (i = 0; i < n; i++) { + j = list[i]; + buf[m++] = x[j][0] + dx; + buf[m++] = x[j][1] + dy; + buf[m++] = x[j][2] + dz; + if (mask[i] & deform_groupbit) { + buf[m++] = v[j][0] + dvx; + buf[m++] = v[j][1] + dvy; + buf[m++] = v[j][2] + dvz; + } else { + buf[m++] = v[j][0]; + buf[m++] = v[j][1]; + buf[m++] = v[j][2]; + } + } + } + } + + if (ncomm_vel) { + for (nn = 0; nn < ncomm_vel; nn++) { + pdata = mcomm_vel.pdata[nn]; + datatype = mcomm_vel.datatype[nn]; + cols = mcomm_vel.cols[nn]; + if (datatype == DOUBLE) { + if (cols == 0) { + double *vec = *((double **) pdata); + for (i = 0; i < n; i++) { + j = list[i]; + buf[m++] = vec[j]; + } + } else { + double **array = *((double ***) pdata); + for (i = 0; i < n; i++) { + j = list[i]; + for (mm = 0; mm < cols; mm++) + buf[m++] = array[j][mm]; + } + } + } else if (datatype == INT) { + if (cols == 0) { + int *vec = *((int **) pdata); + for (i = 0; i < n; i++) { + j = list[i]; + buf[m++] = ubuf(vec[j]).d; + } + } else { + int **array = *((int ***) pdata); + for (i = 0; i < n; i++) { + j = list[i]; + for (mm = 0; mm < cols; mm++) + buf[m++] = ubuf(array[j][mm]).d; + } + } + } else if (datatype == BIGINT) { + if (cols == 0) { + bigint *vec = *((bigint **) pdata); + for (i = 0; i < n; i++) { + j = list[i]; + buf[m++] = ubuf(vec[j]).d; + } + } else { + bigint **array = *((bigint ***) pdata); + for (i = 0; i < n; i++) { + j = list[i]; + for (mm = 0; mm < cols; mm++) + buf[m++] = ubuf(array[j][mm]).d; + } + } + } + } + } + + if (bonus_flag) m += pack_comm_bonus(n,list,&buf[m]); + + return m; +} + +/* ---------------------------------------------------------------------- */ + +void AtomVec::unpack_comm(int n, int first, double *buf) +{ + int i,m,last,mm,nn,datatype,cols; + void *pdata; + + m = 0; + last = first + n; + for (i = first; i < last; i++) { + x[i][0] = buf[m++]; + x[i][1] = buf[m++]; + x[i][2] = buf[m++]; + } + + if (ncomm) { + for (nn = 0; nn < ncomm; nn++) { + pdata = mcomm.pdata[nn]; + datatype = mcomm.datatype[nn]; + cols = mcomm.cols[nn]; + if (datatype == DOUBLE) { + if (cols == 0) { + double *vec = *((double **) pdata); + for (i = first; i < last; i++) + vec[i] = buf[m++]; + } else { + double **array = *((double ***) pdata); + for (i = first; i < last; i++) + for (mm = 0; mm < cols; mm++) + array[i][mm] = buf[m++]; + } + } else if (datatype == INT) { + if (cols == 0) { + int *vec = *((int **) pdata); + for (i = first; i < last; i++) + vec[i] = ubuf(buf[m++]).i; + } else { + int **array = *((int ***) pdata); + for (i = first; i < last; i++) + for (mm = 0; mm < cols; mm++) + array[i][mm] = (int) ubuf(buf[m++]).i; + } + } else if (datatype == BIGINT) { + if (cols == 0) { + bigint *vec = *((bigint **) pdata); + for (i = first; i < last; i++) + vec[i] = (bigint) ubuf(buf[m++]).i; + } else { + bigint **array = *((bigint ***) pdata); + for (i = first; i < last; i++) + for (mm = 0; mm < cols; mm++) + array[i][mm] = (bigint) ubuf(buf[m++]).i; + } + } + } + } + + if (bonus_flag) unpack_comm_bonus(n,first,&buf[m]); +} + +/* ---------------------------------------------------------------------- */ + +void AtomVec::unpack_comm_vel(int n, int first, double *buf) +{ + int i,m,last,mm,nn,datatype,cols; + void *pdata; + + m = 0; + last = first + n; + for (i = first; i < last; i++) { + x[i][0] = buf[m++]; + x[i][1] = buf[m++]; + x[i][2] = buf[m++]; + v[i][0] = buf[m++]; + v[i][1] = buf[m++]; + v[i][2] = buf[m++]; + } + + if (ncomm_vel) { + for (nn = 0; nn < ncomm_vel; nn++) { + pdata = mcomm_vel.pdata[nn]; + datatype = mcomm_vel.datatype[nn]; + cols = mcomm_vel.cols[nn]; + if (datatype == DOUBLE) { + if (cols == 0) { + double *vec = *((double **) pdata); + for (i = first; i < last; i++) + vec[i] = buf[m++]; + } else { + double **array = *((double ***) pdata); + for (i = first; i < last; i++) + for (mm = 0; mm < cols; mm++) + array[i][mm] = buf[m++]; + } + } else if (datatype == INT) { + if (cols == 0) { + int *vec = *((int **) pdata); + for (i = first; i < last; i++) + vec[i] = ubuf(buf[m++]).i; + } else { + int **array = *((int ***) pdata); + for (i = first; i < last; i++) + for (mm = 0; mm < cols; mm++) + array[i][mm] = (int) ubuf(buf[m++]).i; + } + } else if (datatype == BIGINT) { + if (cols == 0) { + bigint *vec = *((bigint **) pdata); + for (i = first; i < last; i++) + vec[i] = (bigint) ubuf(buf[m++]).i; + } else { + bigint **array = *((bigint ***) pdata); + for (i = first; i < last; i++) + for (mm = 0; mm < cols; mm++) + array[i][mm] = (bigint) ubuf(buf[m++]).i; + } + } + } + } + + if (bonus_flag) unpack_comm_bonus(n,first,&buf[m]); +} + +/* ---------------------------------------------------------------------- */ + +int AtomVec::pack_reverse(int n, int first, double *buf) +{ + int i,m,last,mm,nn,datatype,cols; + void *pdata; + + m = 0; + last = first + n; + for (i = first; i < last; i++) { + buf[m++] = f[i][0]; + buf[m++] = f[i][1]; + buf[m++] = f[i][2]; + } + + if (nreverse) { + for (nn = 0; nn < nreverse; nn++) { + pdata = mreverse.pdata[nn]; + datatype = mreverse.datatype[nn]; + cols = mreverse.cols[nn]; + if (datatype == DOUBLE) { + if (cols == 0) { + double *vec = *((double **) pdata); + for (i = first; i < last; i++) { + buf[m++] = vec[i]; + } + } else { + double **array = *((double ***) pdata); + for (i = first; i < last; i++) { + for (mm = 0; mm < cols; mm++) + buf[m++] = array[i][mm]; + } + } + } else if (datatype == INT) { + if (cols == 0) { + int *vec = *((int **) pdata); + for (i = first; i < last; i++) { + buf[m++] = ubuf(vec[i]).d; + } + } else { + int **array = *((int ***) pdata); + for (i = first; i < last; i++) { + for (mm = 0; mm < cols; mm++) + buf[m++] = ubuf(array[i][mm]).d; + } + } + } else if (datatype == BIGINT) { + if (cols == 0) { + bigint *vec = *((bigint **) pdata); + for (i = first; i < last; i++) { + buf[m++] = ubuf(vec[i]).d; + } + } else { + bigint **array = *((bigint ***) pdata); + for (i = first; i < last; i++) { + for (mm = 0; mm < cols; mm++) + buf[m++] = ubuf(array[i][mm]).d; + } + } + } + } + } + + return m; +} + +/* ---------------------------------------------------------------------- */ + +void AtomVec::unpack_reverse(int n, int *list, double *buf) +{ + int i,j,m,mm,nn,datatype,cols; + void *pdata; + + m = 0; + for (i = 0; i < n; i++) { + j = list[i]; + f[j][0] += buf[m++]; + f[j][1] += buf[m++]; + f[j][2] += buf[m++]; + } + + if (nreverse) { + for (nn = 0; nn < nreverse; nn++) { + pdata = mreverse.pdata[nn]; + datatype = mreverse.datatype[nn]; + cols = mreverse.cols[nn]; + if (datatype == DOUBLE) { + if (cols == 0) { + double *vec = *((double **) pdata); + for (i = 0; i < n; i++) { + j = list[i]; + vec[j] += buf[m++]; + } + } else { + double **array = *((double ***) pdata); + for (i = 0; i < n; i++) { + j = list[i]; + for (mm = 0; mm < cols; mm++) + array[j][mm] += buf[m++]; + } + } + } else if (datatype == INT) { + if (cols == 0) { + int *vec = *((int **) pdata); + for (i = 0; i < n; i++) { + j = list[i]; + vec[j] += buf[m++]; + } + } else { + int **array = *((int ***) pdata); + for (i = 0; i < n; i++) { + j = list[i]; + for (mm = 0; mm < cols; mm++) + array[j][mm] += buf[m++]; + } + } + } else if (datatype == BIGINT) { + if (cols == 0) { + bigint *vec = *((bigint **) pdata); + for (i = 0; i < n; i++) { + j = list[i]; + vec[j] += buf[m++]; + } + } else { + bigint **array = *((bigint ***) pdata); + for (i = 0; i < n; i++) { + j = list[i]; + for (mm = 0; mm < cols; mm++) + array[j][mm] += buf[m++]; + } + } + } + } + } +} + +/* ---------------------------------------------------------------------- */ + +int AtomVec::pack_border(int n, int *list, double *buf, int pbc_flag, int *pbc) +{ + int i,j,m,mm,nn,datatype,cols; + double dx,dy,dz; + void *pdata; + + m = 0; + if (pbc_flag == 0) { + for (i = 0; i < n; i++) { + j = list[i]; + buf[m++] = x[j][0]; + buf[m++] = x[j][1]; + buf[m++] = x[j][2]; + buf[m++] = ubuf(tag[j]).d; + buf[m++] = ubuf(type[j]).d; + buf[m++] = ubuf(mask[j]).d; + } + } else { + if (domain->triclinic == 0) { + dx = pbc[0]*domain->xprd; + dy = pbc[1]*domain->yprd; + dz = pbc[2]*domain->zprd; + } else { + dx = pbc[0]; + dy = pbc[1]; + dz = pbc[2]; + } + for (i = 0; i < n; i++) { + j = list[i]; + buf[m++] = x[j][0] + dx; + buf[m++] = x[j][1] + dy; + buf[m++] = x[j][2] + dz; + buf[m++] = ubuf(tag[j]).d; + buf[m++] = ubuf(type[j]).d; + buf[m++] = ubuf(mask[j]).d; + } + } + + if (nborder) { + for (nn = 0; nn < nborder; nn++) { + pdata = mborder.pdata[nn]; + datatype = mborder.datatype[nn]; + cols = mborder.cols[nn]; + if (datatype == DOUBLE) { + if (cols == 0) { + double *vec = *((double **) pdata); + for (i = 0; i < n; i++) { + j = list[i]; + buf[m++] = vec[j]; + } + } else { + double **array = *((double ***) pdata); + for (i = 0; i < n; i++) { + j = list[i]; + for (mm = 0; mm < cols; mm++) + buf[m++] = array[j][mm]; + } + } + } else if (datatype == INT) { + if (cols == 0) { + int *vec = *((int **) pdata); + for (i = 0; i < n; i++) { + j = list[i]; + buf[m++] = ubuf(vec[j]).d; + } + } else { + int **array = *((int ***) pdata); + for (i = 0; i < n; i++) { + j = list[i]; + for (mm = 0; mm < cols; mm++) + buf[m++] = ubuf(array[j][mm]).d; + } + } + } else if (datatype == BIGINT) { + if (cols == 0) { + bigint *vec = *((bigint **) pdata); + for (i = 0; i < n; i++) { + j = list[i]; + buf[m++] = ubuf(vec[j]).d; + } + } else { + bigint **array = *((bigint ***) pdata); + for (i = 0; i < n; i++) { + j = list[i]; + for (mm = 0; mm < cols; mm++) + buf[m++] = ubuf(array[j][mm]).d; + } + } + } + } + } + + if (bonus_flag) m += pack_border_bonus(n,list,&buf[m]); + + if (atom->nextra_border) + for (int iextra = 0; iextra < atom->nextra_border; iextra++) + m += modify->fix[atom->extra_border[iextra]]->pack_border(n,list,&buf[m]); + + return m; +} + +/* ---------------------------------------------------------------------- */ + +int AtomVec::pack_border_vel(int n, int *list, double *buf, + int pbc_flag, int *pbc) +{ + int i,j,m,mm,nn,datatype,cols; + double dx,dy,dz,dvx,dvy,dvz; + void *pdata; + + m = 0; + if (pbc_flag == 0) { + for (i = 0; i < n; i++) { + j = list[i]; + buf[m++] = x[j][0]; + buf[m++] = x[j][1]; + buf[m++] = x[j][2]; + buf[m++] = ubuf(tag[j]).d; + buf[m++] = ubuf(type[j]).d; + buf[m++] = ubuf(mask[j]).d; + buf[m++] = v[j][0]; + buf[m++] = v[j][1]; + buf[m++] = v[j][2]; + } + } else { + if (domain->triclinic == 0) { + dx = pbc[0]*domain->xprd; + dy = pbc[1]*domain->yprd; + dz = pbc[2]*domain->zprd; + } else { + dx = pbc[0]; + dy = pbc[1]; + dz = pbc[2]; + } + if (!deform_vremap) { + for (i = 0; i < n; i++) { + j = list[i]; + buf[m++] = x[j][0] + dx; + buf[m++] = x[j][1] + dy; + buf[m++] = x[j][2] + dz; + buf[m++] = ubuf(tag[j]).d; + buf[m++] = ubuf(type[j]).d; + buf[m++] = ubuf(mask[j]).d; + buf[m++] = v[j][0]; + buf[m++] = v[j][1]; + buf[m++] = v[j][2]; + } + } else { + dvx = pbc[0]*h_rate[0] + pbc[5]*h_rate[5] + pbc[4]*h_rate[4]; + dvy = pbc[1]*h_rate[1] + pbc[3]*h_rate[3]; + dvz = pbc[2]*h_rate[2]; + for (i = 0; i < n; i++) { + j = list[i]; + buf[m++] = x[j][0] + dx; + buf[m++] = x[j][1] + dy; + buf[m++] = x[j][2] + dz; + buf[m++] = ubuf(tag[j]).d; + buf[m++] = ubuf(type[j]).d; + buf[m++] = ubuf(mask[j]).d; + if (mask[i] & deform_groupbit) { + buf[m++] = v[j][0] + dvx; + buf[m++] = v[j][1] + dvy; + buf[m++] = v[j][2] + dvz; + } else { + buf[m++] = v[j][0]; + buf[m++] = v[j][1]; + buf[m++] = v[j][2]; + } + } + } + } + + if (nborder_vel) { + for (nn = 0; nn < nborder_vel; nn++) { + pdata = mborder_vel.pdata[nn]; + datatype = mborder_vel.datatype[nn]; + cols = mborder_vel.cols[nn]; + if (datatype == DOUBLE) { + if (cols == 0) { + double *vec = *((double **) pdata); + for (i = 0; i < n; i++) { + j = list[i]; + buf[m++] = vec[j]; + } + } else { + double **array = *((double ***) pdata); + for (i = 0; i < n; i++) { + j = list[i]; + for (mm = 0; mm < cols; mm++) + buf[m++] = array[j][mm]; + } + } + } else if (datatype == INT) { + if (cols == 0) { + int *vec = *((int **) pdata); + for (i = 0; i < n; i++) { + j = list[i]; + buf[m++] = ubuf(vec[j]).d; + } + } else { + int **array = *((int ***) pdata); + for (i = 0; i < n; i++) { + j = list[i]; + for (mm = 0; mm < cols; mm++) + buf[m++] = ubuf(array[j][mm]).d; + } + } + } else if (datatype == BIGINT) { + if (cols == 0) { + bigint *vec = *((bigint **) pdata); + for (i = 0; i < n; i++) { + j = list[i]; + buf[m++] = ubuf(vec[j]).d; + } + } else { + bigint **array = *((bigint ***) pdata); + for (i = 0; i < n; i++) { + j = list[i]; + for (mm = 0; mm < cols; mm++) + buf[m++] = ubuf(array[j][mm]).d; + } + } + } + } + } + + if (bonus_flag) m += pack_border_bonus(n,list,&buf[m]); + + if (atom->nextra_border) + for (int iextra = 0; iextra < atom->nextra_border; iextra++) + m += modify->fix[atom->extra_border[iextra]]->pack_border(n,list,&buf[m]); + + return m; +} + +/* ---------------------------------------------------------------------- */ + +void AtomVec::unpack_border(int n, int first, double *buf) +{ + int i,m,last,mm,nn,datatype,cols; + void *pdata; + + m = 0; + last = first + n; + for (i = first; i < last; i++) { + if (i == nmax) grow(0); + x[i][0] = buf[m++]; + x[i][1] = buf[m++]; + x[i][2] = buf[m++]; + tag[i] = (tagint) ubuf(buf[m++]).i; + type[i] = (int) ubuf(buf[m++]).i; + mask[i] = (int) ubuf(buf[m++]).i; + } + + if (nborder) { + for (nn = 0; nn < nborder; nn++) { + pdata = mborder.pdata[nn]; + datatype = mborder.datatype[nn]; + cols = mborder.cols[nn]; + if (datatype == DOUBLE) { + if (cols == 0) { + double *vec = *((double **) pdata); + for (i = first; i < last; i++) + vec[i] = buf[m++]; + } else { + double **array = *((double ***) pdata); + for (i = first; i < last; i++) + for (mm = 0; mm < cols; mm++) + array[i][mm] = buf[m++]; + } + } else if (datatype == INT) { + if (cols == 0) { + int *vec = *((int **) pdata); + for (i = first; i < last; i++) + vec[i] = ubuf(buf[m++]).i; + } else { + int **array = *((int ***) pdata); + for (i = first; i < last; i++) + for (mm = 0; mm < cols; mm++) + array[i][mm] = (int) ubuf(buf[m++]).i; + } + } else if (datatype == BIGINT) { + if (cols == 0) { + bigint *vec = *((bigint **) pdata); + for (i = first; i < last; i++) + vec[i] = (bigint) ubuf(buf[m++]).i; + } else { + bigint **array = *((bigint ***) pdata); + for (i = first; i < last; i++) + for (mm = 0; mm < cols; mm++) + array[i][mm] = (bigint) ubuf(buf[m++]).i; + } + } + } + } + + if (bonus_flag) m += unpack_border_bonus(n,first,&buf[m]); + + if (atom->nextra_border) + for (int iextra = 0; iextra < atom->nextra_border; iextra++) + m += modify->fix[atom->extra_border[iextra]]-> + unpack_border(n,first,&buf[m]); +} + +/* ---------------------------------------------------------------------- */ + +void AtomVec::unpack_border_vel(int n, int first, double *buf) +{ + int i,m,last,mm,nn,datatype,cols; + void *pdata; + + m = 0; + last = first + n; + for (i = first; i < last; i++) { + if (i == nmax) grow(0); + x[i][0] = buf[m++]; + x[i][1] = buf[m++]; + x[i][2] = buf[m++]; + tag[i] = (tagint) ubuf(buf[m++]).i; + type[i] = (int) ubuf(buf[m++]).i; + mask[i] = (int) ubuf(buf[m++]).i; + v[i][0] = buf[m++]; + v[i][1] = buf[m++]; + v[i][2] = buf[m++]; + } + + if (nborder_vel) { + for (nn = 0; nn < nborder_vel; nn++) { + pdata = mborder_vel.pdata[nn]; + datatype = mborder_vel.datatype[nn]; + cols = mborder_vel.cols[nn]; + if (datatype == DOUBLE) { + if (cols == 0) { + double *vec = *((double **) pdata); + for (i = first; i < last; i++) + vec[i] = buf[m++]; + } else { + double **array = *((double ***) pdata); + for (i = first; i < last; i++) + for (mm = 0; mm < cols; mm++) + array[i][mm] = buf[m++]; + } + } else if (datatype == INT) { + if (cols == 0) { + int *vec = *((int **) pdata); + for (i = first; i < last; i++) + vec[i] = ubuf(buf[m++]).i; + } else { + int **array = *((int ***) pdata); + for (i = first; i < last; i++) + for (mm = 0; mm < cols; mm++) + array[i][mm] = (int) ubuf(buf[m++]).i; + } + } else if (datatype == BIGINT) { + if (cols == 0) { + bigint *vec = *((bigint **) pdata); + for (i = first; i < last; i++) + vec[i] = (bigint) ubuf(buf[m++]).i; + } else { + bigint **array = *((bigint ***) pdata); + for (i = first; i < last; i++) + for (mm = 0; mm < cols; mm++) + array[i][mm] = (bigint) ubuf(buf[m++]).i; + } + } + } + } + + if (bonus_flag) m += unpack_border_bonus(n,first,&buf[m]); + + if (atom->nextra_border) + for (int iextra = 0; iextra < atom->nextra_border; iextra++) + m += modify->fix[atom->extra_border[iextra]]-> + unpack_border(n,first,&buf[m]); +} + +/* ---------------------------------------------------------------------- + pack data for atom I for sending to another proc + xyz must be 1st 3 values, so comm::exchange() can test on them +------------------------------------------------------------------------- */ + +int AtomVec::pack_exchange(int i, double *buf) +{ + int mm,nn,datatype,cols,collength,ncols; + void *pdata,*plength; + + int m = 1; + buf[m++] = x[i][0]; + buf[m++] = x[i][1]; + buf[m++] = x[i][2]; + buf[m++] = v[i][0]; + buf[m++] = v[i][1]; + buf[m++] = v[i][2]; + buf[m++] = ubuf(tag[i]).d; + buf[m++] = ubuf(type[i]).d; + buf[m++] = ubuf(mask[i]).d; + buf[m++] = ubuf(image[i]).d; + + if (nexchange) { + for (nn = 0; nn < nexchange; nn++) { + pdata = mexchange.pdata[nn]; + datatype = mexchange.datatype[nn]; + cols = mexchange.cols[nn]; + if (datatype == DOUBLE) { + if (cols == 0) { + double *vec = *((double **) pdata); + buf[m++] = vec[i]; + } else if (cols > 0) { + double **array = *((double ***) pdata); + for (mm = 0; mm < cols; mm++) + buf[m++] = array[i][mm]; + } else { + double **array = *((double ***) pdata); + collength = mexchange.collength[nn]; + plength = mexchange.plength[nn]; + if (collength) ncols = (*((int ***) plength))[i][collength-1]; + else ncols = (*((int **) plength))[i]; + for (mm = 0; mm < ncols; mm++) + buf[m++] = array[i][mm]; + } + } if (datatype == INT) { + if (cols == 0) { + int *vec = *((int **) pdata); + buf[m++] = ubuf(vec[i]).d; + } else if (cols > 0) { + int **array = *((int ***) pdata); + for (mm = 0; mm < cols; mm++) + buf[m++] = ubuf(array[i][mm]).d; + } else { + int **array = *((int ***) pdata); + collength = mexchange.collength[nn]; + plength = mexchange.plength[nn]; + if (collength) ncols = (*((int ***) plength))[i][collength-1]; + else ncols = (*((int **) plength))[i]; + for (mm = 0; mm < ncols; mm++) + buf[m++] = ubuf(array[i][mm]).d; + } + } if (datatype == BIGINT) { + if (cols == 0) { + bigint *vec = *((bigint **) pdata); + buf[m++] = ubuf(vec[i]).d; + } else if (cols > 0) { + bigint **array = *((bigint ***) pdata); + for (mm = 0; mm < cols; mm++) + buf[m++] = ubuf(array[i][mm]).d; + } else { + bigint **array = *((bigint ***) pdata); + collength = mexchange.collength[nn]; + plength = mexchange.plength[nn]; + if (collength) ncols = (*((int ***) plength))[i][collength-1]; + else ncols = (*((int **) plength))[i]; + for (mm = 0; mm < ncols; mm++) + buf[m++] = ubuf(array[i][mm]).d; + } + } + } + } + + if (bonus_flag) m += pack_exchange_bonus(i,&buf[m]); + + if (atom->nextra_grow) + for (int iextra = 0; iextra < atom->nextra_grow; iextra++) + m += modify->fix[atom->extra_grow[iextra]]->pack_exchange(i,&buf[m]); + + buf[0] = m; + return m; +} + +/* ---------------------------------------------------------------------- */ + +int AtomVec::unpack_exchange(double *buf) +{ + int mm,nn,datatype,cols,collength,ncols; + void *pdata,*plength; + + int nlocal = atom->nlocal; + if (nlocal == nmax) grow(0); + + int m = 1; + x[nlocal][0] = buf[m++]; + x[nlocal][1] = buf[m++]; + x[nlocal][2] = buf[m++]; + v[nlocal][0] = buf[m++]; + v[nlocal][1] = buf[m++]; + v[nlocal][2] = buf[m++]; + tag[nlocal] = (tagint) ubuf(buf[m++]).i; + type[nlocal] = (int) ubuf(buf[m++]).i; + mask[nlocal] = (int) ubuf(buf[m++]).i; + image[nlocal] = (imageint) ubuf(buf[m++]).i; + + if (nexchange) { + for (nn = 0; nn < nexchange; nn++) { + pdata = mexchange.pdata[nn]; + datatype = mexchange.datatype[nn]; + cols = mexchange.cols[nn]; + if (datatype == DOUBLE) { + if (cols == 0) { + double *vec = *((double **) pdata); + vec[nlocal] = buf[m++]; + } else if (cols > 0) { + double **array = *((double ***) pdata); + for (mm = 0; mm < cols; mm++) + array[nlocal][mm] = buf[m++]; + } else { + double **array = *((double ***) pdata); + collength = mexchange.collength[nn]; + plength = mexchange.plength[nn]; + if (collength) ncols = (*((int ***) plength))[nlocal][collength-1]; + else ncols = (*((int **) plength))[nlocal]; + for (mm = 0; mm < ncols; mm++) + array[nlocal][mm] = buf[m++]; + } + } else if (datatype == INT) { + if (cols == 0) { + int *vec = *((int **) pdata); + vec[nlocal] = ubuf(buf[m++]).i; + } else if (cols > 0) { + int **array = *((int ***) pdata); + for (mm = 0; mm < cols; mm++) + array[nlocal][mm] = (int) ubuf(buf[m++]).i; + } else { + int **array = *((int ***) pdata); + collength = mexchange.collength[nn]; + plength = mexchange.plength[nn]; + if (collength) ncols = (*((int ***) plength))[nlocal][collength-1]; + else ncols = (*((int **) plength))[nlocal]; + for (mm = 0; mm < ncols; mm++) + array[nlocal][mm] = (int) ubuf(buf[m++]).i; + } + } else if (datatype == BIGINT) { + if (cols == 0) { + bigint *vec = *((bigint **) pdata); + vec[nlocal] = (bigint) ubuf(buf[m++]).i; + } else if (cols > 0) { + bigint **array = *((bigint ***) pdata); + for (mm = 0; mm < cols; mm++) + array[nlocal][mm] = (bigint) ubuf(buf[m++]).i; + } else { + bigint **array = *((bigint ***) pdata); + collength = mexchange.collength[nn]; + plength = mexchange.plength[nn]; + if (collength) ncols = (*((int ***) plength))[nlocal][collength-1]; + else ncols = (*((int **) plength))[nlocal]; + for (mm = 0; mm < ncols; mm++) + array[nlocal][mm] = (bigint) ubuf(buf[m++]).i; + } + } + } + } -#include "comm.h" + if (bonus_flag) m += unpack_exchange_bonus(nlocal,&buf[m]); -using namespace LAMMPS_NS; + if (atom->nextra_grow) + for (int iextra = 0; iextra < atom->nextra_grow; iextra++) + m += modify->fix[atom->extra_grow[iextra]]-> + unpack_exchange(nlocal,&buf[m]); -#define DELTA 16384 -#define DELTA_BONUS 8192 + atom->nlocal++; + return m; +} -/* ---------------------------------------------------------------------- */ +/* ---------------------------------------------------------------------- + size of restart data for all atoms owned by this proc + include extra data stored by fixes +------------------------------------------------------------------------- */ -AtomVec::AtomVec(LAMMPS *lmp) : Pointers(lmp) +int AtomVec::size_restart() { - nmax = 0; - bonds_allow = angles_allow = dihedrals_allow = impropers_allow = 0; - mass_type = dipole_type = 0; - forceclearflag = 0; - size_data_bonus = 0; - maxexchange = 0; - molecular = 0; + int i,nn,cols,collength,ncols; + void *plength; - kokkosable = 0; + // NOTE: need to worry about overflow of returned int N - nargcopy = 0; - argcopy = NULL; -} + int nlocal = atom->nlocal; -/* ---------------------------------------------------------------------- */ + // 11 = length storage + id,type,mask,image,x,v -AtomVec::~AtomVec() -{ - for (int i = 0; i < nargcopy; i++) delete [] argcopy[i]; - delete [] argcopy; + int n = 11 * nlocal; + + if (nrestart) { + for (nn = 0; nn < nrestart; nn++) { + cols = mrestart.cols[nn]; + if (cols == 0) n += nlocal; + else if (cols > 0) n += cols*nlocal; + else { + collength = mrestart.collength[nn]; + plength = mrestart.plength[nn]; + for (i = 0; i < nlocal; i++) { + if (collength) ncols = (*((int ***) plength))[i][collength-1]; + else ncols = (*((int **) plength))[i]; + n += ncols; + } + } + } + } + + if (bonus_flag) n += size_restart_bonus(); + + if (atom->nextra_restart) + for (int iextra = 0; iextra < atom->nextra_restart; iextra++) + for (i = 0; i < nlocal; i++) + n += modify->fix[atom->extra_restart[iextra]]->size_restart(i); + + return n; } /* ---------------------------------------------------------------------- - make copy of args for use by restart & replicate + pack atom I's data for restart file including extra quantities + xyz must be 1st 3 values, so that read_restart can test on them + molecular types may be negative, but write as positive ------------------------------------------------------------------------- */ -void AtomVec::store_args(int narg, char **arg) +int AtomVec::pack_restart(int i, double *buf) { - nargcopy = narg; - argcopy = new char*[nargcopy]; - for (int i = 0; i < nargcopy; i++) { - int n = strlen(arg[i]) + 1; - argcopy[i] = new char[n]; - strcpy(argcopy[i],arg[i]); + int mm,nn,datatype,cols,collength,ncols; + void *pdata,*plength; + + // if needed, change values before packing + + pack_restart_pre(i); + + int m = 1; + buf[m++] = x[i][0]; + buf[m++] = x[i][1]; + buf[m++] = x[i][2]; + buf[m++] = ubuf(tag[i]).d; + buf[m++] = ubuf(type[i]).d; + buf[m++] = ubuf(mask[i]).d; + buf[m++] = ubuf(image[i]).d; + buf[m++] = v[i][0]; + buf[m++] = v[i][1]; + buf[m++] = v[i][2]; + + for (nn = 0; nn < nrestart; nn++) { + pdata = mrestart.pdata[nn]; + datatype = mrestart.datatype[nn]; + cols = mrestart.cols[nn]; + if (datatype == DOUBLE) { + if (cols == 0) { + double *vec = *((double **) pdata); + buf[m++] = vec[i]; + } else if (cols > 0) { + double **array = *((double ***) pdata); + for (mm = 0; mm < cols; mm++) + buf[m++] = array[i][mm]; + } else { + double **array = *((double ***) pdata); + collength = mexchange.collength[nn]; + plength = mexchange.plength[nn]; + if (collength) ncols = (*((int ***) plength))[i][collength-1]; + else ncols = (*((int **) plength))[i]; + for (mm = 0; mm < ncols; mm++) + buf[m++] = array[i][mm]; + } + } else if (datatype == INT) { + if (cols == 0) { + int *vec = *((int **) pdata); + buf[m++] = ubuf(vec[i]).d; + } else if (cols > 0) { + int **array = *((int ***) pdata); + for (mm = 0; mm < cols; mm++) + buf[m++] = ubuf(array[i][mm]).d; + } else { + int **array = *((int ***) pdata); + collength = mexchange.collength[nn]; + plength = mexchange.plength[nn]; + if (collength) ncols = (*((int ***) plength))[i][collength-1]; + else ncols = (*((int **) plength))[i]; + for (mm = 0; mm < ncols; mm++) + buf[m++] = ubuf(array[i][mm]).d; + } + } else if (datatype == BIGINT) { + if (cols == 0) { + bigint *vec = *((bigint **) pdata); + buf[m++] = ubuf(vec[i]).d; + } else if (cols > 0) { + bigint **array = *((bigint ***) pdata); + for (mm = 0; mm < cols; mm++) + buf[m++] = ubuf(array[i][mm]).d; + } else { + bigint **array = *((bigint ***) pdata); + collength = mexchange.collength[nn]; + plength = mexchange.plength[nn]; + if (collength) ncols = (*((int ***) plength))[i][collength-1]; + else ncols = (*((int **) plength))[i]; + for (mm = 0; mm < ncols; mm++) + buf[m++] = ubuf(array[i][mm]).d; + } + } } + + if (bonus_flag) m += pack_restart_bonus(i,&buf[m]); + + // if needed, restore values after packing + + pack_restart_post(i); + + // invoke fixes which store peratom restart info + + for (int iextra = 0; iextra < atom->nextra_restart; iextra++) + m += modify->fix[atom->extra_restart[iextra]]->pack_restart(i,&buf[m]); + + buf[0] = m; + return m; } /* ---------------------------------------------------------------------- - no additional args by default + unpack data for one atom from restart file including extra quantities ------------------------------------------------------------------------- */ -void AtomVec::process_args(int narg, char ** /*arg*/) +int AtomVec::unpack_restart(double *buf) { - if (narg) error->all(FLERR,"Invalid atom_style command"); + int mm,nn,datatype,cols,collength,ncols; + void *pdata,*plength; + + int nlocal = atom->nlocal; + if (nlocal == nmax) { + grow(0); + if (atom->nextra_store) + memory->grow(atom->extra,nmax,atom->nextra_store,"atom:extra"); + } + + int m = 1; + x[nlocal][0] = buf[m++]; + x[nlocal][1] = buf[m++]; + x[nlocal][2] = buf[m++]; + tag[nlocal] = (tagint) ubuf(buf[m++]).i; + type[nlocal] = (int) ubuf(buf[m++]).i; + mask[nlocal] = (int) ubuf(buf[m++]).i; + image[nlocal] = (imageint) ubuf(buf[m++]).i; + v[nlocal][0] = buf[m++]; + v[nlocal][1] = buf[m++]; + v[nlocal][2] = buf[m++]; + + for (nn = 0; nn < nrestart; nn++) { + pdata = mrestart.pdata[nn]; + datatype = mrestart.datatype[nn]; + cols = mrestart.cols[nn]; + if (datatype == DOUBLE) { + if (cols == 0) { + double *vec = *((double **) pdata); + vec[nlocal] = buf[m++]; + } else if (cols > 0) { + double **array = *((double ***) pdata); + for (mm = 0; mm < cols; mm++) + array[nlocal][mm] = buf[m++]; + } else { + double **array = *((double ***) pdata); + collength = mexchange.collength[nn]; + plength = mexchange.plength[nn]; + if (collength) ncols = (*((int ***) plength))[nlocal][collength-1]; + else ncols = (*((int **) plength))[nlocal]; + for (mm = 0; mm < ncols; mm++) + array[nlocal][mm] = buf[m++]; + } + } else if (datatype == INT) { + if (cols == 0) { + int *vec = *((int **) pdata); + vec[nlocal] = ubuf(buf[m++]).i; + } else if (cols > 0) { + int **array = *((int ***) pdata); + for (mm = 0; mm < cols; mm++) + array[nlocal][mm] = (int) ubuf(buf[m++]).i; + } else { + int **array = *((int ***) pdata); + collength = mexchange.collength[nn]; + plength = mexchange.plength[nn]; + if (collength) ncols = (*((int ***) plength))[nlocal][collength-1]; + else ncols = (*((int **) plength))[nlocal]; + for (mm = 0; mm < ncols; mm++) + array[nlocal][mm] = (int) ubuf(buf[m++]).i; + } + } else if (datatype == BIGINT) { + if (cols == 0) { + bigint *vec = *((bigint **) pdata); + vec[nlocal] = (bigint) ubuf(buf[m++]).i; + } else if (cols > 0) { + bigint **array = *((bigint ***) pdata); + for (mm = 0; mm < cols; mm++) + array[nlocal][mm] = (bigint) ubuf(buf[m++]).i; + } else { + int **array = *((int ***) pdata); + collength = mexchange.collength[nn]; + plength = mexchange.plength[nn]; + if (collength) ncols = (*((int ***) plength))[nlocal][collength-1]; + else ncols = (*((int **) plength))[nlocal]; + for (mm = 0; mm < ncols; mm++) + array[nlocal][mm] = (bigint) ubuf(buf[m++]).i; + } + } + } + + if (bonus_flag) m += unpack_restart_bonus(nlocal,&buf[m]); + + // if needed, initialize other peratom values + + unpack_restart_init(nlocal); + + // store extra restart info which fixes can unpack when instantiated + + double **extra = atom->extra; + if (atom->nextra_store) { + int size = static_cast (buf[0]) - m; + for (int i = 0; i < size; i++) extra[nlocal][i] = buf[m++]; + } + + atom->nlocal++; + return m; } /* ---------------------------------------------------------------------- - copy of velocity remap settings from Domain + create one atom of itype at coord + set other values to defaults ------------------------------------------------------------------------- */ -void AtomVec::init() +void AtomVec::create_atom(int itype, double *coord) { - deform_vremap = domain->deform_vremap; - deform_groupbit = domain->deform_groupbit; - h_rate = domain->h_rate; + int m,n,datatype,cols; + void *pdata; - if (lmp->kokkos != NULL && !kokkosable) - error->all(FLERR,"KOKKOS package requires a kokkos enabled atom_style"); + int nlocal = atom->nlocal; + if (nlocal == nmax) grow(0); + + tag[nlocal] = 0; + type[nlocal] = itype; + x[nlocal][0] = coord[0]; + x[nlocal][1] = coord[1]; + x[nlocal][2] = coord[2]; + mask[nlocal] = 1; + image[nlocal] = ((imageint) IMGMAX << IMG2BITS) | + ((imageint) IMGMAX << IMGBITS) | IMGMAX; + v[nlocal][0] = 0.0; + v[nlocal][1] = 0.0; + v[nlocal][2] = 0.0; + + // initialization additional fields + + for (n = 0; n < ncreate; n++) { + pdata = mcreate.pdata[n]; + datatype = mcreate.datatype[n]; + cols = mcreate.cols[n]; + if (datatype == DOUBLE) { + if (cols == 0) { + double *vec = *((double **) pdata); + vec[nlocal] = 0.0; + } else { + double **array = *((double ***) pdata); + for (m = 0; m < cols; m++) + array[nlocal][m] = 0.0; + } + } else if (datatype == INT) { + if (cols == 0) { + int *vec = *((int **) pdata); + vec[nlocal] = 0; + } else { + int **array = *((int ***) pdata); + for (m = 0; m < cols; m++) + array[nlocal][m] = 0; + } + } else if (datatype == BIGINT) { + if (cols == 0) { + bigint *vec = *((bigint **) pdata); + vec[nlocal] = 0; + } else { + bigint **array = *((bigint ***) pdata); + for (m = 0; m < cols; m++) + array[nlocal][m] = 0; + } + } + } + + // if needed, initialize non-zero peratom values + + create_atom_post(nlocal); + + atom->nlocal++; } /* ---------------------------------------------------------------------- - grow nmax so it is a multiple of DELTA + unpack one line from Atoms section of data file + initialize other peratom quantities ------------------------------------------------------------------------- */ -void AtomVec::grow_nmax() +void AtomVec::data_atom(double *coord, imageint imagetmp, char **values) { - nmax = nmax/DELTA * DELTA; - nmax += DELTA; + int m,n,datatype,cols; + void *pdata; + + int nlocal = atom->nlocal; + if (nlocal == nmax) grow(0); + + x[nlocal][0] = coord[0]; + x[nlocal][1] = coord[1]; + x[nlocal][2] = coord[2]; + mask[nlocal] = 1; + image[nlocal] = imagetmp; + v[nlocal][0] = 0.0; + v[nlocal][1] = 0.0; + v[nlocal][2] = 0.0; + + int ivalue = 0; + for (n = 0; n < ndata_atom; n++) { + pdata = mdata_atom.pdata[n]; + datatype = mdata_atom.datatype[n]; + cols = mdata_atom.cols[n]; + if (datatype == DOUBLE) { + if (cols == 0) { + double *vec = *((double **) pdata); + vec[nlocal] = utils::numeric(FLERR,values[ivalue++],true,lmp); + } else { + double **array = *((double ***) pdata); + if (array == atom->x) { // x was already set by coord arg + ivalue += cols; + continue; + } + for (m = 0; m < cols; m++) + array[nlocal][m] = utils::numeric(FLERR,values[ivalue++],true,lmp); + } + } else if (datatype == INT) { + if (cols == 0) { + int *vec = *((int **) pdata); + vec[nlocal] = utils::inumeric(FLERR,values[ivalue++],true,lmp); + } else { + int **array = *((int ***) pdata); + for (m = 0; m < cols; m++) + array[nlocal][m] = utils::inumeric(FLERR,values[ivalue++],true,lmp); + } + } else if (datatype == BIGINT) { + if (cols == 0) { + bigint *vec = *((bigint **) pdata); + vec[nlocal] = utils::bnumeric(FLERR,values[ivalue++],true,lmp); + } else { + bigint **array = *((bigint ***) pdata); + for (m = 0; m < cols; m++) + array[nlocal][m] = utils::bnumeric(FLERR,values[ivalue++],true,lmp); + } + } + } + + // error checks applicable to all styles + + if (tag[nlocal] <= 0) + error->one(FLERR,"Invalid atom ID in Atoms section of data file"); + if (type[nlocal] <= 0 || type[nlocal] > atom->ntypes) + error->one(FLERR,"Invalid atom type in Atoms section of data file"); + + // if needed, modify unpacked values or initialize other peratom values + + data_atom_post(nlocal); + + atom->nlocal++; } /* ---------------------------------------------------------------------- - grow nmax_bonus so it is a multiple of DELTA_BONUS + pack atom info for data file including 3 image flags ------------------------------------------------------------------------- */ -int AtomVec::grow_nmax_bonus(int nmax_bonus) +void AtomVec::pack_data(double **buf) { - nmax_bonus = nmax_bonus/DELTA_BONUS * DELTA_BONUS; - nmax_bonus += DELTA_BONUS; - return nmax_bonus; + int i,j,m,n,datatype,cols; + void *pdata; + + int nlocal = atom->nlocal; + + for (i = 0; i < nlocal; i++) { + + // if needed, change values before packing + + pack_data_pre(i); + + j = 0; + for (n = 0; n < ndata_atom; n++) { + pdata = mdata_atom.pdata[n]; + datatype = mdata_atom.datatype[n]; + cols = mdata_atom.cols[n]; + if (datatype == DOUBLE) { + if (cols == 0) { + double *vec = *((double **) pdata); + buf[i][j++] = vec[i]; + } else { + double **array = *((double ***) pdata); + for (m = 0; m < cols; m++) + buf[i][j++] = array[i][m]; + } + } else if (datatype == INT) { + if (cols == 0) { + int *vec = *((int **) pdata); + buf[i][j++] = ubuf(vec[i]).d; + } else { + int **array = *((int ***) pdata); + for (m = 0; m < cols; m++) + buf[i][j++] = ubuf(array[i][m]).d; + } + } else if (datatype == BIGINT) { + if (cols == 0) { + bigint *vec = *((bigint **) pdata); + buf[i][j++] = ubuf(vec[i]).d; + } else { + bigint **array = *((bigint ***) pdata); + for (m = 0; m < cols; m++) + buf[i][j++] = ubuf(array[i][m]).d; + } + } + } + + buf[i][j++] = ubuf((image[i] & IMGMASK) - IMGMAX).d; + buf[i][j++] = ubuf((image[i] >> IMGBITS & IMGMASK) - IMGMAX).d; + buf[i][j++] = ubuf((image[i] >> IMG2BITS) - IMGMAX).d; + + // if needed, restore values after packing + + pack_data_post(i); + } } /* ---------------------------------------------------------------------- - roundup N so it is a multiple of DELTA - error if N exceeds 32-bit int, since will be used as arg to grow() + write atom info to data file + id is first field, 3 image flags are final fields ------------------------------------------------------------------------- */ -bigint AtomVec::roundup(bigint n) +void AtomVec::write_data(FILE *fp, int n, double **buf) { - if (n % DELTA) n = n/DELTA * DELTA + DELTA; - if (n > MAXSMALLINT) - error->one(FLERR,"Too many atoms created on one or more procs"); - return n; + int i,j,m,nn,datatype,cols; + + for (i = 0; i < n; i++) { + fprintf(fp,TAGINT_FORMAT,(tagint) ubuf(buf[i][0]).i); + + j = 1; + for (nn = 1; nn < ndata_atom; nn++) { + datatype = mdata_atom.datatype[nn]; + cols = mdata_atom.cols[nn]; + if (datatype == DOUBLE) { + if (cols == 0) { + fprintf(fp," %-1.16e",buf[i][j++]); + } else { + for (m = 0; m < cols; m++) + fprintf(fp," %-1.16e",buf[i][j++]); + } + } else if (datatype == INT) { + if (cols == 0) { + fprintf(fp," %d",(int) ubuf(buf[i][j++]).i); + } else { + for (m = 0; m < cols; m++) + fprintf(fp," %d",(int) ubuf(buf[i][j++]).i); + } + } else if (datatype == BIGINT) { + if (cols == 0) { + fprintf(fp," " BIGINT_FORMAT,(bigint) ubuf(buf[i][j++]).i); + } else { + for (m = 0; m < cols; m++) + fprintf(fp," " BIGINT_FORMAT,(bigint) ubuf(buf[i][j++]).i); + } + } + } + + fprintf(fp," %d %d %d\n", + (int) ubuf(buf[i][j]).i, + (int) ubuf(buf[i][j+1]).i, + (int) ubuf(buf[i][j+2]).i); + } } /* ---------------------------------------------------------------------- unpack one line from Velocities section of data file ------------------------------------------------------------------------- */ -void AtomVec::data_vel(int m, char **values) +void AtomVec::data_vel(int ilocal, char **values) { + int m,n,datatype,cols; + void *pdata; + double **v = atom->v; - v[m][0] = utils::numeric(FLERR,values[0],true,lmp); - v[m][1] = utils::numeric(FLERR,values[1],true,lmp); - v[m][2] = utils::numeric(FLERR,values[2],true,lmp); + v[ilocal][0] = utils::numeric(FLERR,values[0],true,lmp); + v[ilocal][1] = utils::numeric(FLERR,values[1],true,lmp); + v[ilocal][2] = utils::numeric(FLERR,values[2],true,lmp); + + if (ndata_vel > 2) { + int ivalue = 3; + for (n = 2; n < ndata_vel; n++) { + pdata = mdata_vel.pdata[n]; + datatype = mdata_vel.datatype[n]; + cols = mdata_vel.cols[n]; + if (datatype == DOUBLE) { + if (cols == 0) { + double *vec = *((double **) pdata); + vec[ilocal] = utils::numeric(FLERR,values[ivalue++],true,lmp); + } else { + double **array = *((double ***) pdata); + for (m = 0; m < cols; m++) + array[ilocal][m] = utils::numeric(FLERR,values[ivalue++],true,lmp); + } + } else if (datatype == INT) { + if (cols == 0) { + int *vec = *((int **) pdata); + vec[ilocal] = utils::inumeric(FLERR,values[ivalue++],true,lmp); + } else { + int **array = *((int ***) pdata); + for (m = 0; m < cols; m++) + array[ilocal][m] = utils::inumeric(FLERR,values[ivalue++],true,lmp); + } + } else if (datatype == BIGINT) { + if (cols == 0) { + bigint *vec = *((bigint **) pdata); + vec[ilocal] = utils::bnumeric(FLERR,values[ivalue++],true,lmp); + } else { + bigint **array = *((bigint ***) pdata); + for (m = 0; m < cols; m++) + array[ilocal][m] = utils::bnumeric(FLERR,values[ivalue++],true,lmp); + } + } + } + } } /* ---------------------------------------------------------------------- @@ -142,27 +1932,90 @@ void AtomVec::data_vel(int m, char **values) void AtomVec::pack_vel(double **buf) { - double **v = atom->v; - tagint *tag = atom->tag; + int i,j,m,n,datatype,cols; + void *pdata; + int nlocal = atom->nlocal; - for (int i = 0; i < nlocal; i++) { - buf[i][0] = ubuf(tag[i]).d; - buf[i][1] = v[i][0]; - buf[i][2] = v[i][1]; - buf[i][3] = v[i][2]; + for (i = 0; i < nlocal; i++) { + j = 0; + for (n = 0; n < ndata_vel; n++) { + pdata = mdata_vel.pdata[n]; + datatype = mdata_vel.datatype[n]; + cols = mdata_vel.cols[n]; + if (datatype == DOUBLE) { + if (cols == 0) { + double *vec = *((double **) pdata); + buf[i][j++] = vec[i]; + } else { + double **array = *((double ***) pdata); + for (m = 0; m < cols; m++) + buf[i][j++] = array[i][m]; + } + } else if (datatype == INT) { + if (cols == 0) { + int *vec = *((int **) pdata); + buf[i][j++] = ubuf(vec[i]).d; + } else { + int **array = *((int ***) pdata); + for (m = 0; m < cols; m++) + buf[i][j++] = ubuf(array[i][m]).d; + } + } else if (datatype == BIGINT) { + if (cols == 0) { + bigint *vec = *((bigint **) pdata); + buf[i][j++] = ubuf(vec[i]).d; + } else { + bigint **array = *((bigint ***) pdata); + for (m = 0; m < cols; m++) + buf[i][j++] = ubuf(array[i][m]).d; + } + } + } } } /* ---------------------------------------------------------------------- write velocity info to data file + id and velocity vector are first 4 fields ------------------------------------------------------------------------- */ void AtomVec::write_vel(FILE *fp, int n, double **buf) { - for (int i = 0; i < n; i++) - fprintf(fp,TAGINT_FORMAT " %-1.16e %-1.16e %-1.16e\n", - (tagint) ubuf(buf[i][0]).i,buf[i][1],buf[i][2],buf[i][3]); + int i,j,m,nn,datatype,cols; + + for (i = 0; i < n; i++) { + fprintf(fp,TAGINT_FORMAT,(tagint) ubuf(buf[i][0]).i); + + j = 1; + for (nn = 1; nn < ndata_vel; nn++) { + datatype = mdata_vel.datatype[nn]; + cols = mdata_vel.cols[nn]; + if (datatype == DOUBLE) { + if (cols == 0) { + fprintf(fp," %-1.16e",buf[i][j++]); + } else { + for (m = 0; m < cols; m++) + fprintf(fp," %-1.16e",buf[i][j++]); + } + } else if (datatype == INT) { + if (cols == 0) { + fprintf(fp," %d",(int) ubuf(buf[i][j++]).i); + } else { + for (m = 0; m < cols; m++) + fprintf(fp," %d",(int) ubuf(buf[i][j++]).i); + } + } else if (datatype == BIGINT) { + if (cols == 0) { + fprintf(fp," " BIGINT_FORMAT,(bigint) ubuf(buf[i][j++]).i); + } else { + for (m = 0; m < cols; m++) + fprintf(fp," " BIGINT_FORMAT,(bigint) ubuf(buf[i][j++]).i); + } + } + } + fprintf(fp,"\n"); + } } /* ---------------------------------------------------------------------- @@ -411,3 +2264,295 @@ void AtomVec::write_improper(FILE *fp, int n, tagint **buf, int index) index++; } } + +/* ---------------------------------------------------------------------- + return # of bytes of allocated memory +------------------------------------------------------------------------- */ + +bigint AtomVec::memory_usage() +{ + int datatype,cols,maxcols; + void *pdata; + + bigint bytes = 0; + + bytes += memory->usage(tag,nmax); + bytes += memory->usage(type,nmax); + bytes += memory->usage(mask,nmax); + bytes += memory->usage(image,nmax); + bytes += memory->usage(x,nmax,3); + bytes += memory->usage(v,nmax,3); + bytes += memory->usage(f,nmax*comm->nthreads,3); + + for (int i = 0; i < ngrow; i++) { + pdata = mgrow.pdata[i]; + datatype = mgrow.datatype[i]; + cols = mgrow.cols[i]; + const int nthreads = threads[i] ? comm->nthreads : 1; + if (datatype == DOUBLE) { + if (cols == 0) { + bytes += memory->usage(*((double **) pdata),nmax*nthreads); + } else if (cols > 0) { + bytes += memory->usage(*((double ***) pdata),nmax*nthreads,cols); + } else { + maxcols = *(mgrow.maxcols[i]); + bytes += memory->usage(*((double ***) pdata),nmax*nthreads,maxcols); + } + } else if (datatype == INT) { + if (cols == 0) { + bytes += memory->usage(*((int **) pdata),nmax*nthreads); + } else if (cols > 0) { + bytes += memory->usage(*((int ***) pdata),nmax*nthreads,cols); + } else { + maxcols = *(mgrow.maxcols[i]); + bytes += memory->usage(*((int ***) pdata),nmax*nthreads,maxcols); + } + } else if (datatype == BIGINT) { + if (cols == 0) { + bytes += memory->usage(*((bigint **) pdata),nmax*nthreads); + } else if (cols > 0) { + bytes += memory->usage(*((bigint ***) pdata),nmax*nthreads,cols); + } else { + maxcols = *(mgrow.maxcols[i]); + bytes += memory->usage(*((bigint ***) pdata),nmax*nthreads,maxcols); + } + } + } + + if (bonus_flag) bytes += memory_usage_bonus(); + + return bytes; +} + +// ---------------------------------------------------------------------- +// internal methods +// ---------------------------------------------------------------------- + +/* ---------------------------------------------------------------------- + process field strings to initialize data structs for all other methods +------------------------------------------------------------------------- */ + +void AtomVec::setup_fields() +{ + int n,cols; + + if (strstr(fields_data_atom,"id ") != fields_data_atom) + error->all(FLERR,"Atom style fields_data_atom must have id as first field"); + if (strstr(fields_data_vel,"id v") != fields_data_vel) + error->all(FLERR,"Atom style fields_data_vel must have " + "'id v' as first fields"); + + // process field strings + // return # of fields and matching index into atom->peratom (in Method struct) + + ngrow = process_fields(fields_grow,default_grow,&mgrow); + ncopy = process_fields(fields_copy,default_copy,&mcopy); + ncomm = process_fields(fields_comm,default_comm,&mcomm); + ncomm_vel = process_fields(fields_comm_vel,default_comm_vel,&mcomm_vel); + nreverse = process_fields(fields_reverse,default_reverse,&mreverse); + nborder = process_fields(fields_border,default_border,&mborder); + nborder_vel = process_fields(fields_border_vel,default_border_vel,&mborder_vel); + nexchange = process_fields(fields_exchange,default_exchange,&mexchange); + nrestart = process_fields(fields_restart,default_restart,&mrestart); + ncreate = process_fields(fields_create,default_create,&mcreate); + ndata_atom = process_fields(fields_data_atom,default_data_atom,&mdata_atom); + ndata_vel = process_fields(fields_data_vel,default_data_vel,&mdata_vel); + + // populate field-based data struct for each method to use + + create_method(ngrow,&mgrow); + create_method(ncopy,&mcopy); + create_method(ncomm,&mcomm); + create_method(ncomm_vel,&mcomm_vel); + create_method(nreverse,&mreverse); + create_method(nborder,&mborder); + create_method(nborder_vel,&mborder_vel); + create_method(nexchange,&mexchange); + create_method(nrestart,&mrestart); + create_method(ncreate,&mcreate); + create_method(ndata_atom,&mdata_atom); + create_method(ndata_vel,&mdata_vel); + + // create threads data struct for grow and memory_usage to use + + threads = new bool[ngrow]; + for (int i = 0; i < ngrow; i++) { + Atom::PerAtom *field = &atom->peratom[mgrow.index[i]]; + threads[i] = (field->threadflag) ? true : false; + } + + // set style-specific sizes + + comm_x_only = 1; + if (ncomm) comm_x_only = 0; + if (bonus_flag && size_forward_bonus) comm_x_only = 0; + + if (nreverse == 0) comm_f_only = 1; + else comm_f_only = 0; + + size_forward = 3; + for (n = 0; n < ncomm; n++) { + cols = mcomm.cols[n]; + if (cols == 0) size_forward++; + else size_forward += cols; + } + if (bonus_flag) size_forward += size_forward_bonus; + + size_reverse = 3; + for (n = 0; n < nreverse; n++) { + cols = mreverse.cols[n]; + if (cols == 0) size_reverse++; + else size_reverse += cols; + } + + size_border = 6; + for (n = 0; n < nborder; n++) { + cols = mborder.cols[n]; + if (cols == 0) size_border++; + else size_border += cols; + } + if (bonus_flag) size_border += size_border_bonus; + + size_velocity = 3; + for (n = 0; n < ncomm_vel; n++) { + cols = mcomm_vel.cols[n]; + if (cols == 0) size_velocity++; + else size_velocity += cols; + } + + size_data_atom = 0; + for (n = 0; n < ndata_atom; n++) { + cols = mdata_atom.cols[n]; + if (strcmp(atom->peratom[mdata_atom.index[n]].name,"x") == 0) + xcol_data = size_data_atom + 1; + if (cols == 0) size_data_atom++; + else size_data_atom += cols; + } + + size_data_vel = 0; + for (n = 0; n < ndata_vel; n++) { + cols = mdata_vel.cols[n]; + if (cols == 0) size_data_vel++; + else size_data_vel += cols; + } +} + +/* ---------------------------------------------------------------------- + process a single field string +------------------------------------------------------------------------- */ + +int AtomVec::process_fields(char *str, const char *default_str, Method *method) +{ + if (str == NULL) { + method->index = NULL; + return 0; + } + + // tokenize words in both strings + Tokenizer words(str, " "); + Tokenizer def_words(default_str, " "); + + int nfield = words.count(); + int ndef = def_words.count(); + + // process fields one by one, add to index vector + + Atom::PerAtom *peratom = atom->peratom; + int nperatom = atom->nperatom; + + int *index = new int[nfield]; + int match; + + for (int i = 0; i < nfield; i++) { + const char * field = words[i].c_str(); + + // find field in master Atom::peratom list + + for (match = 0; match < nperatom; match++) + if (strcmp(field, peratom[match].name) == 0) break; + if (match == nperatom) { + char str[128]; + sprintf(str,"Peratom field %s not recognized", field); + error->all(FLERR,str); + } + index[i] = match; + + // error if field appears multiple times + + for (match = 0; match < i; match++) + if (index[i] == index[match]) { + char str[128]; + sprintf(str,"Peratom field %s is repeated", field); + error->all(FLERR,str); + } + + // error if field is in default str + + for (match = 0; match < ndef; match++) + if (strcmp(field, def_words[match].c_str()) == 0) { + char str[128]; + sprintf(str,"Peratom field %s is a default", field); + error->all(FLERR,str); + } + + } + + method->index = index; + return nfield; +} + +/* ---------------------------------------------------------------------- + create a method data structs for processing fields +------------------------------------------------------------------------- */ + +void AtomVec::create_method(int nfield, Method *method) +{ + method->pdata = new void*[nfield]; + method->datatype = new int[nfield]; + method->cols = new int[nfield]; + method->maxcols = new int*[nfield]; + method->collength = new int[nfield]; + method->plength = new void*[nfield]; + + for (int i = 0; i < nfield; i++) { + Atom::PerAtom *field = &atom->peratom[method->index[i]]; + method->pdata[i] = (void *) field->address; + method->datatype[i] = field->datatype; + method->cols[i] = field->cols; + if (method->cols[i] < 0) { + method->maxcols[i] = field->address_maxcols; + method->collength[i] = field->collength; + method->plength[i] = field->address_length; + } + } +} + +/* ---------------------------------------------------------------------- + free memory in a method data structs +------------------------------------------------------------------------- */ + +void AtomVec::init_method(Method *method) +{ + method->pdata = NULL; + method->datatype = NULL; + method->cols = NULL; + method->maxcols = NULL; + method->collength = NULL; + method->plength = NULL; + method->index = NULL; +} + +/* ---------------------------------------------------------------------- + free memory in a method data structs +------------------------------------------------------------------------- */ + +void AtomVec::destroy_method(Method *method) +{ + delete [] method->pdata; + delete [] method->datatype; + delete [] method->cols; + delete [] method->maxcols; + delete [] method->collength; + delete [] method->plength; + delete [] method->index; +} diff --git a/src/atom_vec.h b/src/atom_vec.h index db4139204a6b404db73daf9a8a3922082bcc26b2..eaff9b888ae4bd3c972b7fcbad93d65e9e4a3326 100644 --- a/src/atom_vec.h +++ b/src/atom_vec.h @@ -36,11 +36,16 @@ class AtomVec : protected Pointers { int size_velocity; // # of velocity based quantities int size_data_atom; // number of values in Atom line int size_data_vel; // number of values in Velocity line - int size_data_bonus; // number of values in Bonus line int xcol_data; // column (1-N) where x is in Atom line int maxexchange; // max size of exchanged atom // only needs to be set if size > BUFEXTRA + int bonus_flag; // 1 if stores bonus data + int size_forward_bonus; // # in forward bonus comm + int size_border_bonus; // # in border bonus comm + int size_restart_bonus_one; // # in restart bonus comm + int size_data_bonus; // number of values in Bonus line + class Molecule **onemols; // list of molecules for style template int nset; // # of molecules in list @@ -49,82 +54,161 @@ class AtomVec : protected Pointers { int nargcopy; // copy of command-line args for atom_style command char **argcopy; // used when AtomVec is realloced (restart,replicate) + // additional list of peratom fields operated on by different methods + // set or created by child styles + + char *fields_grow,*fields_copy; + char *fields_comm,*fields_comm_vel,*fields_reverse; + char *fields_border,*fields_border_vel; + char *fields_exchange,*fields_restart; + char *fields_create,*fields_data_atom,*fields_data_vel; + + // methods + AtomVec(class LAMMPS *); virtual ~AtomVec(); + void store_args(int, char **); virtual void process_args(int, char **); virtual void init(); - virtual void grow(int) = 0; - virtual void grow_reset() = 0; - bigint roundup(bigint); - virtual void copy(int, int, int) = 0; - virtual void clear_bonus() {} virtual void force_clear(int, size_t) {} + virtual bigint roundup(bigint); - virtual int pack_comm(int, int *, double *, int, int *) = 0; - virtual int pack_comm_vel(int, int *, double *, int, int *) = 0; - virtual int pack_comm_hybrid(int, int *, double *) {return 0;} - virtual void unpack_comm(int, int, double *) = 0; - virtual void unpack_comm_vel(int, int, double *) = 0; - virtual int unpack_comm_hybrid(int, int, double *) {return 0;} + virtual void grow(int); + virtual void grow_pointers() {} + virtual void copy(int, int, int); - virtual int pack_reverse(int, int, double *) = 0; - virtual int pack_reverse_hybrid(int, int, double *) {return 0;} - virtual void unpack_reverse(int, int *, double *) = 0; - virtual int unpack_reverse_hybrid(int, int *, double *) {return 0;} + virtual void copy_bonus(int, int, int) {} + virtual void clear_bonus() {} - virtual int pack_border(int, int *, double *, int, int *) = 0; - virtual int pack_border_vel(int, int *, double *, int, int *) = 0; - virtual int pack_border_hybrid(int, int *, double *) {return 0;} - virtual void unpack_border(int, int, double *) = 0; - virtual void unpack_border_vel(int, int, double *) = 0; - virtual int unpack_border_hybrid(int, int, double *) {return 0;} + virtual int pack_comm(int, int *, double *, int, int *); + virtual int pack_comm_vel(int, int *, double *, int, int *); + virtual void unpack_comm(int, int, double *); + virtual void unpack_comm_vel(int, int, double *); + + virtual int pack_comm_bonus(int, int *, double *) {return 0;} + virtual void unpack_comm_bonus(int, int, double *) {} + + virtual int pack_reverse(int, int, double *); + virtual void unpack_reverse(int, int *, double *); + + virtual int pack_border(int, int *, double *, int, int *); + virtual int pack_border_vel(int, int *, double *, int, int *); + virtual void unpack_border(int, int, double *); + virtual void unpack_border_vel(int, int, double *); + + virtual int pack_border_bonus(int, int *, double *) {return 0;} + virtual int unpack_border_bonus(int, int, double *) {return 0;} + + virtual int pack_exchange(int, double *); + virtual int unpack_exchange(double *); + + virtual int pack_exchange_bonus(int, double *) {return 0;} + virtual int unpack_exchange_bonus(int, double *) {return 0;} - virtual int pack_exchange(int, double *) = 0; - virtual int unpack_exchange(double *) = 0; + virtual int size_restart(); + virtual int pack_restart(int, double *); + virtual int unpack_restart(double *); - virtual int size_restart() = 0; - virtual int pack_restart(int, double *) = 0; - virtual int unpack_restart(double *) = 0; + virtual void pack_restart_pre(int) {} + virtual void pack_restart_post(int) {} + virtual void unpack_restart_init(int) {} - virtual void create_atom(int, double *) = 0; + virtual int size_restart_bonus() {return 0;} + virtual int pack_restart_bonus(int, double *) {return 0;} + virtual int unpack_restart_bonus(int, double *) {return 0;} - virtual void data_atom(double *, imageint, char **) = 0; + virtual void create_atom(int, double *); + virtual void create_atom_post(int) {} + + virtual void data_atom(double *, imageint, char **); + virtual void data_atom_post(int) {} virtual void data_atom_bonus(int, char **) {} - virtual int data_atom_hybrid(int, char **) {return 0;} - virtual void data_vel(int, char **); - virtual int data_vel_hybrid(int, char **) {return 0;} + virtual void data_body(int, int, int, int *, double *) {} - virtual void pack_data(double **) = 0; - virtual int pack_data_hybrid(int, double *) {return 0;} - virtual void write_data(FILE *, int, double **) = 0; - virtual int write_data_hybrid(FILE *, double *) {return 0;} + virtual void pack_data(double **); + virtual void write_data(FILE *, int, double **); + virtual void pack_data_pre(int) {} + virtual void pack_data_post(int) {} + + virtual void data_vel(int, char **); virtual void pack_vel(double **); - virtual int pack_vel_hybrid(int, double *) {return 0;} virtual void write_vel(FILE *, int, double **); - virtual int write_vel_hybrid(FILE *, double *) {return 0;} - int pack_bond(tagint **); - void write_bond(FILE *, int, tagint **, int); - int pack_angle(tagint **); - void write_angle(FILE *, int, tagint **, int); - int pack_dihedral(tagint **); - void write_dihedral(FILE *, int, tagint **, int); - int pack_improper(tagint **); - void write_improper(FILE *, int, tagint **, int); + virtual int pack_bond(tagint **); + virtual void write_bond(FILE *, int, tagint **, int); + virtual int pack_angle(tagint **); + virtual void write_angle(FILE *, int, tagint **, int); + virtual int pack_dihedral(tagint **); + virtual void write_dihedral(FILE *, int, tagint **, int); + virtual int pack_improper(tagint **); + virtual void write_improper(FILE *, int, tagint **, int); virtual int property_atom(char *) {return -1;} virtual void pack_property_atom(int, double *, int, int) {} - virtual bigint memory_usage() = 0; + virtual bigint memory_usage(); + virtual bigint memory_usage_bonus() {return 0;} + + // old hybrid functions, needed by Kokkos package + + virtual int pack_comm_hybrid(int, int *, double *) {return 0;} + virtual int unpack_comm_hybrid(int, int, double *) {return 0;} + virtual int pack_reverse_hybrid(int, int, double *) {return 0;} + virtual int unpack_reverse_hybrid(int, int *, double *) {return 0;} + virtual int pack_border_hybrid(int, int *, double *) {return 0;} + virtual int unpack_border_hybrid(int, int, double *) {return 0;} + virtual int data_atom_hybrid(int, char **) {return 0;} + virtual int data_vel_hybrid(int, char **) {return 0;} + virtual int pack_data_hybrid(int, double *) {return 0;} + virtual int write_data_hybrid(FILE *, double *) {return 0;} + virtual int pack_vel_hybrid(int, double *) {return 0;} + virtual int write_vel_hybrid(FILE *, double *) {return 0;} protected: - int nmax; // local copy of atom->nmax - int deform_vremap; // local copy of domain properties + int nmax; // local copy of atom->nmax + int deform_vremap; // local copy of domain properties int deform_groupbit; double *h_rate; + tagint *tag; // peratom fields common to all styles + int *type,*mask; + imageint *image; + double **x,**v,**f; + + // standard list of peratom fields always operated on by different methods + // common to all styles, so not listed in field strings + + const char *default_grow,*default_copy; + const char *default_comm,*default_comm_vel,*default_reverse; + const char *default_border,*default_border_vel; + const char *default_exchange,*default_restart; + const char *default_create,*default_data_atom,*default_data_vel; + + struct Method { + void **pdata; + int *datatype; + int *cols; + int **maxcols; + int *collength; + void **plength; + int *index; + }; + + Method mgrow,mcopy; + Method mcomm,mcomm_vel,mreverse,mborder,mborder_vel,mexchange,mrestart; + Method mcreate,mdata_atom,mdata_vel; + + int ngrow,ncopy; + int ncomm,ncomm_vel,nreverse,nborder,nborder_vel,nexchange,nrestart; + int ncreate,ndata_atom,ndata_vel; + + // thread info for fields that are duplicated over threads + // used by fields in grow() and memory_usage() + + bool *threads; + // union data struct for packing 32-bit and 64-bit ints into double bufs // this avoids aliasing issues by having 2 pointers (double,int) // to same buf memory @@ -144,8 +228,15 @@ class AtomVec : protected Pointers { ubuf(int arg) : i(arg) {} }; + // local methods + void grow_nmax(); int grow_nmax_bonus(int); + void setup_fields(); + int process_fields(char *, const char *, Method *); + void create_method(int, Method *); + void init_method(Method *); + void destroy_method(Method *); }; } @@ -162,4 +253,13 @@ E: KOKKOS package requires a kokkos enabled atom_style Self-explanatory. +E: Per-processor system is too big + +The number of owned atoms plus ghost atoms on a single +processor must fit in 32-bit integer. + +E: Invalid atom type in Atoms section of data file + +Atom types must range from 1 to specified # of types. + */ diff --git a/src/atom_vec_atomic.cpp b/src/atom_vec_atomic.cpp index 25a28f16686a7ae634e55ad8bded40c00efc9114..eb8dfc1b7e39c66962c74a1cbac425709147ad50 100644 --- a/src/atom_vec_atomic.cpp +++ b/src/atom_vec_atomic.cpp @@ -12,14 +12,6 @@ ------------------------------------------------------------------------- */ #include "atom_vec_atomic.h" -#include "atom.h" -#include "comm.h" -#include "domain.h" -#include "modify.h" -#include "fix.h" -#include "memory.h" -#include "error.h" -#include "utils.h" using namespace LAMMPS_NS; @@ -30,654 +22,23 @@ AtomVecAtomic::AtomVecAtomic(LAMMPS *lmp) : AtomVec(lmp) molecular = 0; mass_type = 1; - comm_x_only = comm_f_only = 1; - size_forward = 3; - size_reverse = 3; - size_border = 6; - size_velocity = 3; - size_data_atom = 5; - size_data_vel = 4; - xcol_data = 3; -} - -/* ---------------------------------------------------------------------- - grow atom arrays - n = 0 grows arrays by a chunk - n > 0 allocates arrays to size n -------------------------------------------------------------------------- */ - -void AtomVecAtomic::grow(int n) -{ - if (n == 0) grow_nmax(); - else nmax = n; - atom->nmax = nmax; - if (nmax < 0 || nmax > MAXSMALLINT) - error->one(FLERR,"Per-processor system is too big"); - - tag = memory->grow(atom->tag,nmax,"atom:tag"); - type = memory->grow(atom->type,nmax,"atom:type"); - mask = memory->grow(atom->mask,nmax,"atom:mask"); - image = memory->grow(atom->image,nmax,"atom:image"); - x = memory->grow(atom->x,nmax,3,"atom:x"); - v = memory->grow(atom->v,nmax,3,"atom:v"); - f = memory->grow(atom->f,nmax*comm->nthreads,3,"atom:f"); - - if (atom->nextra_grow) - for (int iextra = 0; iextra < atom->nextra_grow; iextra++) - modify->fix[atom->extra_grow[iextra]]->grow_arrays(nmax); -} - -/* ---------------------------------------------------------------------- - reset local array ptrs -------------------------------------------------------------------------- */ - -void AtomVecAtomic::grow_reset() -{ - tag = atom->tag; type = atom->type; - mask = atom->mask; image = atom->image; - x = atom->x; v = atom->v; f = atom->f; -} - -/* ---------------------------------------------------------------------- - copy atom I info to atom J -------------------------------------------------------------------------- */ - -void AtomVecAtomic::copy(int i, int j, int delflag) -{ - tag[j] = tag[i]; - type[j] = type[i]; - mask[j] = mask[i]; - image[j] = image[i]; - x[j][0] = x[i][0]; - x[j][1] = x[i][1]; - x[j][2] = x[i][2]; - v[j][0] = v[i][0]; - v[j][1] = v[i][1]; - v[j][2] = v[i][2]; - - if (atom->nextra_grow) - for (int iextra = 0; iextra < atom->nextra_grow; iextra++) - modify->fix[atom->extra_grow[iextra]]->copy_arrays(i,j,delflag); -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecAtomic::pack_comm(int n, int *list, double *buf, - int pbc_flag, int *pbc) -{ - int i,j,m; - double dx,dy,dz; - - m = 0; - if (pbc_flag == 0) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = x[j][0]; - buf[m++] = x[j][1]; - buf[m++] = x[j][2]; - } - } else { - if (domain->triclinic == 0) { - dx = pbc[0]*domain->xprd; - dy = pbc[1]*domain->yprd; - dz = pbc[2]*domain->zprd; - } else { - dx = pbc[0]*domain->xprd + pbc[5]*domain->xy + pbc[4]*domain->xz; - dy = pbc[1]*domain->yprd + pbc[3]*domain->yz; - dz = pbc[2]*domain->zprd; - } - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = x[j][0] + dx; - buf[m++] = x[j][1] + dy; - buf[m++] = x[j][2] + dz; - } - } - return m; -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecAtomic::pack_comm_vel(int n, int *list, double *buf, - int pbc_flag, int *pbc) -{ - int i,j,m; - double dx,dy,dz,dvx,dvy,dvz; - - m = 0; - if (pbc_flag == 0) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = x[j][0]; - buf[m++] = x[j][1]; - buf[m++] = x[j][2]; - buf[m++] = v[j][0]; - buf[m++] = v[j][1]; - buf[m++] = v[j][2]; - } - } else { - if (domain->triclinic == 0) { - dx = pbc[0]*domain->xprd; - dy = pbc[1]*domain->yprd; - dz = pbc[2]*domain->zprd; - } else { - dx = pbc[0]*domain->xprd + pbc[5]*domain->xy + pbc[4]*domain->xz; - dy = pbc[1]*domain->yprd + pbc[3]*domain->yz; - dz = pbc[2]*domain->zprd; - } - if (!deform_vremap) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = x[j][0] + dx; - buf[m++] = x[j][1] + dy; - buf[m++] = x[j][2] + dz; - buf[m++] = v[j][0]; - buf[m++] = v[j][1]; - buf[m++] = v[j][2]; - } - } else { - dvx = pbc[0]*h_rate[0] + pbc[5]*h_rate[5] + pbc[4]*h_rate[4]; - dvy = pbc[1]*h_rate[1] + pbc[3]*h_rate[3]; - dvz = pbc[2]*h_rate[2]; - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = x[j][0] + dx; - buf[m++] = x[j][1] + dy; - buf[m++] = x[j][2] + dz; - if (mask[i] & deform_groupbit) { - buf[m++] = v[j][0] + dvx; - buf[m++] = v[j][1] + dvy; - buf[m++] = v[j][2] + dvz; - } else { - buf[m++] = v[j][0]; - buf[m++] = v[j][1]; - buf[m++] = v[j][2]; - } - } - } - } - return m; -} - -/* ---------------------------------------------------------------------- */ - -void AtomVecAtomic::unpack_comm(int n, int first, double *buf) -{ - int i,m,last; - - m = 0; - last = first + n; - for (i = first; i < last; i++) { - x[i][0] = buf[m++]; - x[i][1] = buf[m++]; - x[i][2] = buf[m++]; - } -} - -/* ---------------------------------------------------------------------- */ - -void AtomVecAtomic::unpack_comm_vel(int n, int first, double *buf) -{ - int i,m,last; - - m = 0; - last = first + n; - for (i = first; i < last; i++) { - x[i][0] = buf[m++]; - x[i][1] = buf[m++]; - x[i][2] = buf[m++]; - v[i][0] = buf[m++]; - v[i][1] = buf[m++]; - v[i][2] = buf[m++]; - } -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecAtomic::pack_reverse(int n, int first, double *buf) -{ - int i,m,last; - - m = 0; - last = first + n; - for (i = first; i < last; i++) { - buf[m++] = f[i][0]; - buf[m++] = f[i][1]; - buf[m++] = f[i][2]; - } - return m; -} - -/* ---------------------------------------------------------------------- */ - -void AtomVecAtomic::unpack_reverse(int n, int *list, double *buf) -{ - int i,j,m; - - m = 0; - for (i = 0; i < n; i++) { - j = list[i]; - f[j][0] += buf[m++]; - f[j][1] += buf[m++]; - f[j][2] += buf[m++]; - } -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecAtomic::pack_border(int n, int *list, double *buf, - int pbc_flag, int *pbc) -{ - int i,j,m; - double dx,dy,dz; - - m = 0; - if (pbc_flag == 0) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = x[j][0]; - buf[m++] = x[j][1]; - buf[m++] = x[j][2]; - buf[m++] = ubuf(tag[j]).d; - buf[m++] = ubuf(type[j]).d; - buf[m++] = ubuf(mask[j]).d; - } - } else { - if (domain->triclinic == 0) { - dx = pbc[0]*domain->xprd; - dy = pbc[1]*domain->yprd; - dz = pbc[2]*domain->zprd; - } else { - dx = pbc[0]; - dy = pbc[1]; - dz = pbc[2]; - } - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = x[j][0] + dx; - buf[m++] = x[j][1] + dy; - buf[m++] = x[j][2] + dz; - buf[m++] = ubuf(tag[j]).d; - buf[m++] = ubuf(type[j]).d; - buf[m++] = ubuf(mask[j]).d; - } - } - - if (atom->nextra_border) - for (int iextra = 0; iextra < atom->nextra_border; iextra++) - m += modify->fix[atom->extra_border[iextra]]->pack_border(n,list,&buf[m]); - - return m; -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecAtomic::pack_border_vel(int n, int *list, double *buf, - int pbc_flag, int *pbc) -{ - int i,j,m; - double dx,dy,dz,dvx,dvy,dvz; - - m = 0; - if (pbc_flag == 0) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = x[j][0]; - buf[m++] = x[j][1]; - buf[m++] = x[j][2]; - buf[m++] = ubuf(tag[j]).d; - buf[m++] = ubuf(type[j]).d; - buf[m++] = ubuf(mask[j]).d; - buf[m++] = v[j][0]; - buf[m++] = v[j][1]; - buf[m++] = v[j][2]; - } - } else { - if (domain->triclinic == 0) { - dx = pbc[0]*domain->xprd; - dy = pbc[1]*domain->yprd; - dz = pbc[2]*domain->zprd; - } else { - dx = pbc[0]; - dy = pbc[1]; - dz = pbc[2]; - } - if (!deform_vremap) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = x[j][0] + dx; - buf[m++] = x[j][1] + dy; - buf[m++] = x[j][2] + dz; - buf[m++] = ubuf(tag[j]).d; - buf[m++] = ubuf(type[j]).d; - buf[m++] = ubuf(mask[j]).d; - buf[m++] = v[j][0]; - buf[m++] = v[j][1]; - buf[m++] = v[j][2]; - } - } else { - dvx = pbc[0]*h_rate[0] + pbc[5]*h_rate[5] + pbc[4]*h_rate[4]; - dvy = pbc[1]*h_rate[1] + pbc[3]*h_rate[3]; - dvz = pbc[2]*h_rate[2]; - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = x[j][0] + dx; - buf[m++] = x[j][1] + dy; - buf[m++] = x[j][2] + dz; - buf[m++] = ubuf(tag[j]).d; - buf[m++] = ubuf(type[j]).d; - buf[m++] = ubuf(mask[j]).d; - if (mask[i] & deform_groupbit) { - buf[m++] = v[j][0] + dvx; - buf[m++] = v[j][1] + dvy; - buf[m++] = v[j][2] + dvz; - } else { - buf[m++] = v[j][0]; - buf[m++] = v[j][1]; - buf[m++] = v[j][2]; - } - } - } - } - - if (atom->nextra_border) - for (int iextra = 0; iextra < atom->nextra_border; iextra++) - m += modify->fix[atom->extra_border[iextra]]->pack_border(n,list,&buf[m]); - - return m; -} - -/* ---------------------------------------------------------------------- */ - -void AtomVecAtomic::unpack_border(int n, int first, double *buf) -{ - int i,m,last; - - m = 0; - last = first + n; - for (i = first; i < last; i++) { - if (i == nmax) grow(0); - x[i][0] = buf[m++]; - x[i][1] = buf[m++]; - x[i][2] = buf[m++]; - tag[i] = (tagint) ubuf(buf[m++]).i; - type[i] = (int) ubuf(buf[m++]).i; - mask[i] = (int) ubuf(buf[m++]).i; - } - - if (atom->nextra_border) - for (int iextra = 0; iextra < atom->nextra_border; iextra++) - m += modify->fix[atom->extra_border[iextra]]-> - unpack_border(n,first,&buf[m]); -} - -/* ---------------------------------------------------------------------- */ - -void AtomVecAtomic::unpack_border_vel(int n, int first, double *buf) -{ - int i,m,last; - - m = 0; - last = first + n; - for (i = first; i < last; i++) { - if (i == nmax) grow(0); - x[i][0] = buf[m++]; - x[i][1] = buf[m++]; - x[i][2] = buf[m++]; - tag[i] = (tagint) ubuf(buf[m++]).i; - type[i] = (int) ubuf(buf[m++]).i; - mask[i] = (int) ubuf(buf[m++]).i; - v[i][0] = buf[m++]; - v[i][1] = buf[m++]; - v[i][2] = buf[m++]; - } - - if (atom->nextra_border) - for (int iextra = 0; iextra < atom->nextra_border; iextra++) - m += modify->fix[atom->extra_border[iextra]]-> - unpack_border(n,first,&buf[m]); -} - -/* ---------------------------------------------------------------------- - pack data for atom I for sending to another proc - xyz must be 1st 3 values, so comm::exchange() can test on them -------------------------------------------------------------------------- */ - -int AtomVecAtomic::pack_exchange(int i, double *buf) -{ - int m = 1; - buf[m++] = x[i][0]; - buf[m++] = x[i][1]; - buf[m++] = x[i][2]; - buf[m++] = v[i][0]; - buf[m++] = v[i][1]; - buf[m++] = v[i][2]; - buf[m++] = ubuf(tag[i]).d; - buf[m++] = ubuf(type[i]).d; - buf[m++] = ubuf(mask[i]).d; - buf[m++] = ubuf(image[i]).d; - - if (atom->nextra_grow) - for (int iextra = 0; iextra < atom->nextra_grow; iextra++) - m += modify->fix[atom->extra_grow[iextra]]->pack_exchange(i,&buf[m]); - - buf[0] = m; - return m; -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecAtomic::unpack_exchange(double *buf) -{ - int nlocal = atom->nlocal; - if (nlocal == nmax) grow(0); - - int m = 1; - x[nlocal][0] = buf[m++]; - x[nlocal][1] = buf[m++]; - x[nlocal][2] = buf[m++]; - v[nlocal][0] = buf[m++]; - v[nlocal][1] = buf[m++]; - v[nlocal][2] = buf[m++]; - tag[nlocal] = (tagint) ubuf(buf[m++]).i; - type[nlocal] = (int) ubuf(buf[m++]).i; - mask[nlocal] = (int) ubuf(buf[m++]).i; - image[nlocal] = (imageint) ubuf(buf[m++]).i; - - if (atom->nextra_grow) - for (int iextra = 0; iextra < atom->nextra_grow; iextra++) - m += modify->fix[atom->extra_grow[iextra]]-> - unpack_exchange(nlocal,&buf[m]); - - atom->nlocal++; - return m; -} - -/* ---------------------------------------------------------------------- - size of restart data for all atoms owned by this proc - include extra data stored by fixes -------------------------------------------------------------------------- */ - -int AtomVecAtomic::size_restart() -{ - int i; - - int nlocal = atom->nlocal; - int n = 11 * nlocal; - - if (atom->nextra_restart) - for (int iextra = 0; iextra < atom->nextra_restart; iextra++) - for (i = 0; i < nlocal; i++) - n += modify->fix[atom->extra_restart[iextra]]->size_restart(i); - - return n; -} - -/* ---------------------------------------------------------------------- - pack atom I's data for restart file including extra quantities - xyz must be 1st 3 values, so that read_restart can test on them - molecular types may be negative, but write as positive -------------------------------------------------------------------------- */ - -int AtomVecAtomic::pack_restart(int i, double *buf) -{ - int m = 1; - buf[m++] = x[i][0]; - buf[m++] = x[i][1]; - buf[m++] = x[i][2]; - buf[m++] = ubuf(tag[i]).d; - buf[m++] = ubuf(type[i]).d; - buf[m++] = ubuf(mask[i]).d; - buf[m++] = ubuf(image[i]).d; - buf[m++] = v[i][0]; - buf[m++] = v[i][1]; - buf[m++] = v[i][2]; - - if (atom->nextra_restart) - for (int iextra = 0; iextra < atom->nextra_restart; iextra++) - m += modify->fix[atom->extra_restart[iextra]]->pack_restart(i,&buf[m]); - - buf[0] = m; - return m; -} - -/* ---------------------------------------------------------------------- - unpack data for one atom from restart file including extra quantities -------------------------------------------------------------------------- */ - -int AtomVecAtomic::unpack_restart(double *buf) -{ - int nlocal = atom->nlocal; - if (nlocal == nmax) { - grow(0); - if (atom->nextra_store) - memory->grow(atom->extra,nmax,atom->nextra_store,"atom:extra"); - } - - int m = 1; - x[nlocal][0] = buf[m++]; - x[nlocal][1] = buf[m++]; - x[nlocal][2] = buf[m++]; - tag[nlocal] = (tagint) ubuf(buf[m++]).i; - type[nlocal] = (int) ubuf(buf[m++]).i; - mask[nlocal] = (int) ubuf(buf[m++]).i; - image[nlocal] = (imageint) ubuf(buf[m++]).i; - v[nlocal][0] = buf[m++]; - v[nlocal][1] = buf[m++]; - v[nlocal][2] = buf[m++]; - - double **extra = atom->extra; - if (atom->nextra_store) { - int size = static_cast (buf[0]) - m; - for (int i = 0; i < size; i++) extra[nlocal][i] = buf[m++]; - } - - atom->nlocal++; - return m; -} - -/* ---------------------------------------------------------------------- - create one atom of itype at coord - set other values to defaults -------------------------------------------------------------------------- */ - -void AtomVecAtomic::create_atom(int itype, double *coord) -{ - int nlocal = atom->nlocal; - if (nlocal == nmax) grow(0); - - tag[nlocal] = 0; - type[nlocal] = itype; - x[nlocal][0] = coord[0]; - x[nlocal][1] = coord[1]; - x[nlocal][2] = coord[2]; - mask[nlocal] = 1; - image[nlocal] = ((imageint) IMGMAX << IMG2BITS) | - ((imageint) IMGMAX << IMGBITS) | IMGMAX; - v[nlocal][0] = 0.0; - v[nlocal][1] = 0.0; - v[nlocal][2] = 0.0; - - atom->nlocal++; -} - -/* ---------------------------------------------------------------------- - unpack one line from Atoms section of data file - initialize other atom quantities -------------------------------------------------------------------------- */ - -void AtomVecAtomic::data_atom(double *coord, imageint imagetmp, char **values) -{ - int nlocal = atom->nlocal; - if (nlocal == nmax) grow(0); - - tag[nlocal] = utils::tnumeric(FLERR,values[0],true,lmp); - type[nlocal] = utils::inumeric(FLERR,values[1],true,lmp); - if (type[nlocal] <= 0 || type[nlocal] > atom->ntypes) - error->one(FLERR,"Invalid atom type in Atoms section of data file"); - - x[nlocal][0] = coord[0]; - x[nlocal][1] = coord[1]; - x[nlocal][2] = coord[2]; - - image[nlocal] = imagetmp; - - mask[nlocal] = 1; - v[nlocal][0] = 0.0; - v[nlocal][1] = 0.0; - v[nlocal][2] = 0.0; - - atom->nlocal++; -} - -/* ---------------------------------------------------------------------- - pack atom info for data file including 3 image flags -------------------------------------------------------------------------- */ - -void AtomVecAtomic::pack_data(double **buf) -{ - int nlocal = atom->nlocal; - for (int i = 0; i < nlocal; i++) { - buf[i][0] = ubuf(tag[i]).d; - buf[i][1] = ubuf(type[i]).d; - buf[i][2] = x[i][0]; - buf[i][3] = x[i][1]; - buf[i][4] = x[i][2]; - buf[i][5] = ubuf((image[i] & IMGMASK) - IMGMAX).d; - buf[i][6] = ubuf((image[i] >> IMGBITS & IMGMASK) - IMGMAX).d; - buf[i][7] = ubuf((image[i] >> IMG2BITS) - IMGMAX).d; - } -} - -/* ---------------------------------------------------------------------- - write atom info to data file including 3 image flags -------------------------------------------------------------------------- */ - -void AtomVecAtomic::write_data(FILE *fp, int n, double **buf) -{ - for (int i = 0; i < n; i++) - fprintf(fp,TAGINT_FORMAT " %d %-1.16e %-1.16e %-1.16e %d %d %d\n", - (tagint) ubuf(buf[i][0]).i,(int) ubuf(buf[i][1]).i, - buf[i][2],buf[i][3],buf[i][4], - (int) ubuf(buf[i][5]).i,(int) ubuf(buf[i][6]).i, - (int) ubuf(buf[i][7]).i); -} - -/* ---------------------------------------------------------------------- - return # of bytes of allocated memory -------------------------------------------------------------------------- */ - -bigint AtomVecAtomic::memory_usage() -{ - bigint bytes = 0; - - if (atom->memcheck("tag")) bytes += memory->usage(tag,nmax); - if (atom->memcheck("type")) bytes += memory->usage(type,nmax); - if (atom->memcheck("mask")) bytes += memory->usage(mask,nmax); - if (atom->memcheck("image")) bytes += memory->usage(image,nmax); - if (atom->memcheck("x")) bytes += memory->usage(x,nmax,3); - if (atom->memcheck("v")) bytes += memory->usage(v,nmax,3); - if (atom->memcheck("f")) bytes += memory->usage(f,nmax*comm->nthreads,3); - - return bytes; + // strings with peratom variables to include in each AtomVec method + // strings cannot contain fields in corresponding AtomVec default strings + // order of fields in a string does not matter + // except: fields_data_atom & fields_data_vel must match data file + + fields_grow = (char *) ""; + fields_copy = (char *) ""; + fields_comm = (char *) ""; + fields_comm_vel = (char *) ""; + fields_reverse = (char *) ""; + fields_border = (char *) ""; + fields_border_vel = (char *) ""; + fields_exchange = (char *) ""; + fields_restart = (char *) ""; + fields_create = (char *) ""; + fields_data_atom = (char *) "id type x"; + fields_data_vel = (char *) "id v"; + + setup_fields(); } diff --git a/src/atom_vec_atomic.h b/src/atom_vec_atomic.h index afcede89b13becff1d9a84d195e60dd0304ff52b..3caf1a5a9452d6a973b6772e3ba6212734e32b5e 100644 --- a/src/atom_vec_atomic.h +++ b/src/atom_vec_atomic.h @@ -27,36 +27,7 @@ namespace LAMMPS_NS { class AtomVecAtomic : public AtomVec { public: AtomVecAtomic(class LAMMPS *); - virtual ~AtomVecAtomic() {} - void grow(int); - void grow_reset(); - void copy(int, int, int); - virtual int pack_comm(int, int *, double *, int, int *); - virtual int pack_comm_vel(int, int *, double *, int, int *); - virtual void unpack_comm(int, int, double *); - virtual void unpack_comm_vel(int, int, double *); - int pack_reverse(int, int, double *); - void unpack_reverse(int, int *, double *); - virtual int pack_border(int, int *, double *, int, int *); - virtual int pack_border_vel(int, int *, double *, int, int *); - virtual void unpack_border(int, int, double *); - virtual void unpack_border_vel(int, int, double *); - virtual int pack_exchange(int, double *); - virtual int unpack_exchange(double *); - int size_restart(); - int pack_restart(int, double *); - int unpack_restart(double *); - void create_atom(int, double *); - void data_atom(double *, imageint, char **); - void pack_data(double **); - void write_data(FILE *, int, double **); - bigint memory_usage(); - - protected: - tagint *tag; - int *type,*mask; - imageint *image; - double **x,**v,**f; + ~AtomVecAtomic() {} }; } @@ -66,13 +37,4 @@ class AtomVecAtomic : public AtomVec { /* ERROR/WARNING messages: -E: Per-processor system is too big - -The number of owned atoms plus ghost atoms on a single -processor must fit in 32-bit integer. - -E: Invalid atom type in Atoms section of data file - -Atom types must range from 1 to specified # of types. - */ diff --git a/src/atom_vec_body.cpp b/src/atom_vec_body.cpp index 5e83946078d4d161873b090ab097fa40b2f61f9f..89fe1681cb7d2547edd6f65f4c0898d6aa1b7815 100644 --- a/src/atom_vec_body.cpp +++ b/src/atom_vec_body.cpp @@ -18,7 +18,6 @@ #include "style_body.h" #include "body.h" #include "atom.h" -#include "comm.h" #include "domain.h" #include "modify.h" #include "fix.h" @@ -33,17 +32,17 @@ using namespace LAMMPS_NS; AtomVecBody::AtomVecBody(LAMMPS *lmp) : AtomVec(lmp) { molecular = 0; + bonus_flag = 1; - // size_forward and size_border set in settings(), via Body class + // first 3 sizes do not include values from body itself + // 1st,2nd body counts are added in process_args() via body style + // 3rd body count is added in size_restart_bonus() + // size_data_bonus is not used by Atom class for body style - comm_x_only = comm_f_only = 0; - size_forward = 0; - size_reverse = 6; - size_border = 0; - size_velocity = 6; - size_data_atom = 7; - size_data_vel = 7; - xcol_data = 5; + size_forward_bonus = 4; + size_border_bonus = 10; + size_restart_bonus_one = 10; + size_data_bonus = 0; atom->body_flag = 1; atom->rmass_flag = 1; @@ -58,6 +57,24 @@ AtomVecBody::AtomVecBody(LAMMPS *lmp) : AtomVec(lmp) if (sizeof(double) == sizeof(int)) intdoubleratio = 1; else if (sizeof(double) == 2*sizeof(int)) intdoubleratio = 2; else error->all(FLERR,"Internal error in atom_style body"); + + // strings with peratom variables to include in each AtomVec method + // strings cannot contain fields in corresponding AtomVec default strings + // order of fields in a string does not matter + // except: fields_data_atom & fields_data_vel must match data file + + fields_grow = (char *) "radius rmass angmom torque body"; + fields_copy = (char *) "radius rmass angmom"; + fields_comm = (char *) ""; + fields_comm_vel = (char *) "angmom"; + fields_reverse = (char *) "torque"; + fields_border = (char *) "radius rmass"; + fields_border_vel = (char *) "radius rmass angmom"; + fields_exchange = (char *) "radius rmass angmom"; + fields_restart = (char *) "radius rmass angmom"; + fields_create = (char *) "radius rmass angmom body"; + fields_data_atom = (char *) "id type body rmass x"; + fields_data_vel = (char *) "id v angmom"; } /* ---------------------------------------------------------------------- */ @@ -83,6 +100,7 @@ AtomVecBody::~AtomVecBody() void AtomVecBody::process_args(int narg, char **arg) { // suppress unused parameter warning dependent on style_body.h + (void)(arg); if (narg < 1) error->all(FLERR,"Invalid atom_style body command"); @@ -96,65 +114,34 @@ void AtomVecBody::process_args(int narg, char **arg) #undef BodyStyle #undef BODY_CLASS - else error->all(FLERR,utils::check_packages_for_style("body",arg[0],lmp).c_str()); + else error->all(FLERR,utils:: + check_packages_for_style("body",arg[0],lmp).c_str()); bptr->avec = this; icp = bptr->icp; dcp = bptr->dcp; - // max size of forward/border comm - // 7,16 are packed in pack_comm/pack_border + // max size of forward/border and exchange comm // bptr values = max number of additional ivalues/dvalues from Body class - size_forward = 7 + bptr->size_forward; - size_border = 18 + bptr->size_border; -} - -/* ---------------------------------------------------------------------- - grow atom arrays - n = 0 grows arrays by a chunk - n > 0 allocates arrays to size n -------------------------------------------------------------------------- */ - -void AtomVecBody::grow(int n) -{ - if (n == 0) grow_nmax(); - else nmax = n; - atom->nmax = nmax; - if (nmax < 0 || nmax > MAXSMALLINT) - error->one(FLERR,"Per-processor system is too big"); - - tag = memory->grow(atom->tag,nmax,"atom:tag"); - type = memory->grow(atom->type,nmax,"atom:type"); - mask = memory->grow(atom->mask,nmax,"atom:mask"); - image = memory->grow(atom->image,nmax,"atom:image"); - x = memory->grow(atom->x,nmax,3,"atom:x"); - v = memory->grow(atom->v,nmax,3,"atom:v"); - f = memory->grow(atom->f,nmax*comm->nthreads,3,"atom:f"); - - radius = memory->grow(atom->radius,nmax,"atom:radius"); - rmass = memory->grow(atom->rmass,nmax,"atom:rmass"); - angmom = memory->grow(atom->angmom,nmax,3,"atom:angmom"); - torque = memory->grow(atom->torque,nmax*comm->nthreads,3,"atom:torque"); - body = memory->grow(atom->body,nmax,"atom:body"); + size_forward_bonus += bptr->size_forward; + size_border_bonus += bptr->size_border; + maxexchange = bptr->maxexchange; - if (atom->nextra_grow) - for (int iextra = 0; iextra < atom->nextra_grow; iextra++) - modify->fix[atom->extra_grow[iextra]]->grow_arrays(nmax); + setup_fields(); } /* ---------------------------------------------------------------------- - reset local array ptrs + set local copies of all grow ptrs used by this class, except defaults + needed in replicate when 2 atom classes exist and it calls pack_restart() ------------------------------------------------------------------------- */ -void AtomVecBody::grow_reset() +void AtomVecBody::grow_pointers() { - tag = atom->tag; type = atom->type; - mask = atom->mask; image = atom->image; - x = atom->x; v = atom->v; f = atom->f; - radius = atom->radius; rmass = atom->rmass; - angmom = atom->angmom; torque = atom->torque; body = atom->body; + rmass = atom->rmass; + radius = atom->radius; + angmom = atom->angmom; } /* ---------------------------------------------------------------------- @@ -176,32 +163,15 @@ void AtomVecBody::grow_bonus() if delflag and atom J has bonus data, then delete it ------------------------------------------------------------------------- */ -void AtomVecBody::copy(int i, int j, int delflag) +void AtomVecBody::copy_bonus(int i, int j, int delflag) { - tag[j] = tag[i]; - type[j] = type[i]; - mask[j] = mask[i]; - image[j] = image[i]; - x[j][0] = x[i][0]; - x[j][1] = x[i][1]; - x[j][2] = x[i][2]; - v[j][0] = v[i][0]; - v[j][1] = v[i][1]; - v[j][2] = v[i][2]; - - radius[j] = radius[i]; - rmass[j] = rmass[i]; - angmom[j][0] = angmom[i][0]; - angmom[j][1] = angmom[i][1]; - angmom[j][2] = angmom[i][2]; - // if deleting atom J via delflag and J has bonus data, then delete it if (delflag && body[j] >= 0) { int k = body[j]; icp->put(bonus[k].iindex); dcp->put(bonus[k].dindex); - copy_bonus(nlocal_bonus-1,k); + copy_bonus_all(nlocal_bonus-1,k); nlocal_bonus--; } @@ -210,10 +180,6 @@ void AtomVecBody::copy(int i, int j, int delflag) if (body[i] >= 0 && i != j) bonus[body[i]].ilocal = j; body[j] = body[i]; - - if (atom->nextra_grow) - for (int iextra = 0; iextra < atom->nextra_grow; iextra++) - modify->fix[atom->extra_grow[iextra]]->copy_arrays(i,j,delflag); } /* ---------------------------------------------------------------------- @@ -221,7 +187,7 @@ void AtomVecBody::copy(int i, int j, int delflag) also reset body that points to I to now point to J ------------------------------------------------------------------------- */ -void AtomVecBody::copy_bonus(int i, int j) +void AtomVecBody::copy_bonus_all(int i, int j) { body[bonus[i].ilocal] = j; memcpy(&bonus[j],&bonus[i],sizeof(Bonus)); @@ -240,163 +206,15 @@ void AtomVecBody::clear_bonus() dcp->put(bonus[i].dindex); } nghost_bonus = 0; -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecBody::pack_comm(int n, int *list, double *buf, - int pbc_flag, int *pbc) -{ - int i,j,m; - double dx,dy,dz; - double *quat; - - m = 0; - if (pbc_flag == 0) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = x[j][0]; - buf[m++] = x[j][1]; - buf[m++] = x[j][2]; - if (body[j] >= 0) { - quat = bonus[body[j]].quat; - buf[m++] = quat[0]; - buf[m++] = quat[1]; - buf[m++] = quat[2]; - buf[m++] = quat[3]; - m += bptr->pack_comm_body(&bonus[body[j]],&buf[m]); - } - } - } else { - if (domain->triclinic == 0) { - dx = pbc[0]*domain->xprd; - dy = pbc[1]*domain->yprd; - dz = pbc[2]*domain->zprd; - } else { - dx = pbc[0]*domain->xprd + pbc[5]*domain->xy + pbc[4]*domain->xz; - dy = pbc[1]*domain->yprd + pbc[3]*domain->yz; - dz = pbc[2]*domain->zprd; - } - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = x[j][0] + dx; - buf[m++] = x[j][1] + dy; - buf[m++] = x[j][2] + dz; - if (body[j] >= 0) { - quat = bonus[body[j]].quat; - buf[m++] = quat[0]; - buf[m++] = quat[1]; - buf[m++] = quat[2]; - buf[m++] = quat[3]; - m += bptr->pack_comm_body(&bonus[body[j]],&buf[m]); - } - } - } - - return m; -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecBody::pack_comm_vel(int n, int *list, double *buf, - int pbc_flag, int *pbc) -{ - int i,j,m; - double dx,dy,dz,dvx,dvy,dvz; - double *quat; - - m = 0; - if (pbc_flag == 0) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = x[j][0]; - buf[m++] = x[j][1]; - buf[m++] = x[j][2]; - if (body[j] >= 0) { - quat = bonus[body[j]].quat; - buf[m++] = quat[0]; - buf[m++] = quat[1]; - buf[m++] = quat[2]; - buf[m++] = quat[3]; - m += bptr->pack_comm_body(&bonus[body[j]],&buf[m]); - } - buf[m++] = v[j][0]; - buf[m++] = v[j][1]; - buf[m++] = v[j][2]; - buf[m++] = angmom[j][0]; - buf[m++] = angmom[j][1]; - buf[m++] = angmom[j][2]; - } - } else { - if (domain->triclinic == 0) { - dx = pbc[0]*domain->xprd; - dy = pbc[1]*domain->yprd; - dz = pbc[2]*domain->zprd; - } else { - dx = pbc[0]*domain->xprd + pbc[5]*domain->xy + pbc[4]*domain->xz; - dy = pbc[1]*domain->yprd + pbc[3]*domain->yz; - dz = pbc[2]*domain->zprd; - } - if (!deform_vremap) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = x[j][0] + dx; - buf[m++] = x[j][1] + dy; - buf[m++] = x[j][2] + dz; - if (body[j] >= 0) { - quat = bonus[body[j]].quat; - buf[m++] = quat[0]; - buf[m++] = quat[1]; - buf[m++] = quat[2]; - buf[m++] = quat[3]; - m += bptr->pack_comm_body(&bonus[body[j]],&buf[m]); - } - buf[m++] = v[j][0]; - buf[m++] = v[j][1]; - buf[m++] = v[j][2]; - buf[m++] = angmom[j][0]; - buf[m++] = angmom[j][1]; - buf[m++] = angmom[j][2]; - } - } else { - dvx = pbc[0]*h_rate[0] + pbc[5]*h_rate[5] + pbc[4]*h_rate[4]; - dvy = pbc[1]*h_rate[1] + pbc[3]*h_rate[3]; - dvz = pbc[2]*h_rate[2]; - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = x[j][0] + dx; - buf[m++] = x[j][1] + dy; - buf[m++] = x[j][2] + dz; - if (body[j] >= 0) { - quat = bonus[body[j]].quat; - buf[m++] = quat[0]; - buf[m++] = quat[1]; - buf[m++] = quat[2]; - buf[m++] = quat[3]; - m += bptr->pack_comm_body(&bonus[body[j]],&buf[m]); - } - if (mask[i] & deform_groupbit) { - buf[m++] = v[j][0] + dvx; - buf[m++] = v[j][1] + dvy; - buf[m++] = v[j][2] + dvz; - } else { - buf[m++] = v[j][0]; - buf[m++] = v[j][1]; - buf[m++] = v[j][2]; - } - buf[m++] = angmom[j][0]; - buf[m++] = angmom[j][1]; - buf[m++] = angmom[j][2]; - } - } - } - return m; + if (atom->nextra_grow) + for (int iextra = 0; iextra < atom->nextra_grow; iextra++) + modify->fix[atom->extra_grow[iextra]]->clear_bonus(); } /* ---------------------------------------------------------------------- */ -int AtomVecBody::pack_comm_hybrid(int n, int *list, double *buf) +int AtomVecBody::pack_comm_bonus(int n, int *list, double *buf) { int i,j,m; double *quat; @@ -413,36 +231,13 @@ int AtomVecBody::pack_comm_hybrid(int n, int *list, double *buf) m += bptr->pack_comm_body(&bonus[body[j]],&buf[m]); } } - return m; -} - -/* ---------------------------------------------------------------------- */ - -void AtomVecBody::unpack_comm(int n, int first, double *buf) -{ - int i,m,last; - double *quat; - m = 0; - last = first + n; - for (i = first; i < last; i++) { - x[i][0] = buf[m++]; - x[i][1] = buf[m++]; - x[i][2] = buf[m++]; - if (body[i] >= 0) { - quat = bonus[body[i]].quat; - quat[0] = buf[m++]; - quat[1] = buf[m++]; - quat[2] = buf[m++]; - quat[3] = buf[m++]; - m += bptr->unpack_comm_body(&bonus[body[i]],&buf[m]); - } - } + return m; } /* ---------------------------------------------------------------------- */ -void AtomVecBody::unpack_comm_vel(int n, int first, double *buf) +void AtomVecBody::unpack_comm_bonus(int n, int first, double *buf) { int i,m,last; double *quat; @@ -450,36 +245,6 @@ void AtomVecBody::unpack_comm_vel(int n, int first, double *buf) m = 0; last = first + n; for (i = first; i < last; i++) { - x[i][0] = buf[m++]; - x[i][1] = buf[m++]; - x[i][2] = buf[m++]; - if (body[i] >= 0) { - quat = bonus[body[i]].quat; - quat[0] = buf[m++]; - quat[1] = buf[m++]; - quat[2] = buf[m++]; - quat[3] = buf[m++]; - m += bptr->unpack_comm_body(&bonus[body[i]],&buf[m]); - } - v[i][0] = buf[m++]; - v[i][1] = buf[m++]; - v[i][2] = buf[m++]; - angmom[i][0] = buf[m++]; - angmom[i][1] = buf[m++]; - angmom[i][2] = buf[m++]; - } -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecBody::unpack_comm_hybrid(int n, int first, double *buf) -{ - int i,m,last; - double *quat; - - m = 0; - last = first + n; - for (i = first; i < last; i++) if (body[i] >= 0) { quat = bonus[body[i]].quat; quat[0] = buf[m++]; @@ -488,304 +253,12 @@ int AtomVecBody::unpack_comm_hybrid(int n, int first, double *buf) quat[3] = buf[m++]; m += bptr->unpack_comm_body(&bonus[body[i]],&buf[m]); } - return m; -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecBody::pack_reverse(int n, int first, double *buf) -{ - int i,m,last; - - m = 0; - last = first + n; - for (i = first; i < last; i++) { - buf[m++] = f[i][0]; - buf[m++] = f[i][1]; - buf[m++] = f[i][2]; - buf[m++] = torque[i][0]; - buf[m++] = torque[i][1]; - buf[m++] = torque[i][2]; - } - return m; -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecBody::pack_reverse_hybrid(int n, int first, double *buf) -{ - int i,m,last; - - m = 0; - last = first + n; - for (i = first; i < last; i++) { - buf[m++] = torque[i][0]; - buf[m++] = torque[i][1]; - buf[m++] = torque[i][2]; - } - return m; -} - -/* ---------------------------------------------------------------------- */ - -void AtomVecBody::unpack_reverse(int n, int *list, double *buf) -{ - int i,j,m; - - m = 0; - for (i = 0; i < n; i++) { - j = list[i]; - f[j][0] += buf[m++]; - f[j][1] += buf[m++]; - f[j][2] += buf[m++]; - torque[j][0] += buf[m++]; - torque[j][1] += buf[m++]; - torque[j][2] += buf[m++]; - } -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecBody::unpack_reverse_hybrid(int n, int *list, double *buf) -{ - int i,j,m; - - m = 0; - for (i = 0; i < n; i++) { - j = list[i]; - torque[j][0] += buf[m++]; - torque[j][1] += buf[m++]; - torque[j][2] += buf[m++]; - } - return m; -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecBody::pack_border(int n, int *list, double *buf, - int pbc_flag, int *pbc) -{ - int i,j,m; - double dx,dy,dz; - double *quat,*inertia; - - m = 0; - if (pbc_flag == 0) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = x[j][0]; - buf[m++] = x[j][1]; - buf[m++] = x[j][2]; - buf[m++] = ubuf(tag[j]).d; - buf[m++] = ubuf(type[j]).d; - buf[m++] = ubuf(mask[j]).d; - buf[m++] = radius[j]; - buf[m++] = rmass[j]; - if (body[j] < 0) buf[m++] = ubuf(0).d; - else { - buf[m++] = ubuf(1).d; - quat = bonus[body[j]].quat; - inertia = bonus[body[j]].inertia; - buf[m++] = quat[0]; - buf[m++] = quat[1]; - buf[m++] = quat[2]; - buf[m++] = quat[3]; - buf[m++] = inertia[0]; - buf[m++] = inertia[1]; - buf[m++] = inertia[2]; - buf[m++] = ubuf(bonus[body[j]].ninteger).d; - buf[m++] = ubuf(bonus[body[j]].ndouble).d; - m += bptr->pack_border_body(&bonus[body[j]],&buf[m]); - } - } - } else { - if (domain->triclinic == 0) { - dx = pbc[0]*domain->xprd; - dy = pbc[1]*domain->yprd; - dz = pbc[2]*domain->zprd; - } else { - dx = pbc[0]; - dy = pbc[1]; - dz = pbc[2]; - } - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = x[j][0] + dx; - buf[m++] = x[j][1] + dy; - buf[m++] = x[j][2] + dz; - buf[m++] = ubuf(tag[j]).d; - buf[m++] = ubuf(type[j]).d; - buf[m++] = ubuf(mask[j]).d; - buf[m++] = radius[j]; - buf[m++] = rmass[j]; - if (body[j] < 0) buf[m++] = ubuf(0).d; - else { - buf[m++] = ubuf(1).d; - quat = bonus[body[j]].quat; - inertia = bonus[body[j]].inertia; - buf[m++] = quat[0]; - buf[m++] = quat[1]; - buf[m++] = quat[2]; - buf[m++] = quat[3]; - buf[m++] = inertia[0]; - buf[m++] = inertia[1]; - buf[m++] = inertia[2]; - buf[m++] = ubuf(bonus[body[j]].ninteger).d; - buf[m++] = ubuf(bonus[body[j]].ndouble).d; - m += bptr->pack_border_body(&bonus[body[j]],&buf[m]); - } - } } - - if (atom->nextra_border) - for (int iextra = 0; iextra < atom->nextra_border; iextra++) - m += modify->fix[atom->extra_border[iextra]]->pack_border(n,list,&buf[m]); - - return m; } /* ---------------------------------------------------------------------- */ -int AtomVecBody::pack_border_vel(int n, int *list, double *buf, - int pbc_flag, int *pbc) -{ - int i,j,m; - double dx,dy,dz,dvx,dvy,dvz; - double *quat,*inertia; - - m = 0; - if (pbc_flag == 0) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = x[j][0]; - buf[m++] = x[j][1]; - buf[m++] = x[j][2]; - buf[m++] = ubuf(tag[j]).d; - buf[m++] = ubuf(type[j]).d; - buf[m++] = ubuf(mask[j]).d; - buf[m++] = radius[j]; - buf[m++] = rmass[j]; - if (body[j] < 0) buf[m++] = ubuf(0).d; - else { - buf[m++] = ubuf(1).d; - quat = bonus[body[j]].quat; - inertia = bonus[body[j]].inertia; - buf[m++] = quat[0]; - buf[m++] = quat[1]; - buf[m++] = quat[2]; - buf[m++] = quat[3]; - buf[m++] = inertia[0]; - buf[m++] = inertia[1]; - buf[m++] = inertia[2]; - buf[m++] = ubuf(bonus[body[j]].ninteger).d; - buf[m++] = ubuf(bonus[body[j]].ndouble).d; - m += bptr->pack_border_body(&bonus[body[j]],&buf[m]); - } - buf[m++] = v[j][0]; - buf[m++] = v[j][1]; - buf[m++] = v[j][2]; - buf[m++] = angmom[j][0]; - buf[m++] = angmom[j][1]; - buf[m++] = angmom[j][2]; - } - } else { - if (domain->triclinic == 0) { - dx = pbc[0]*domain->xprd; - dy = pbc[1]*domain->yprd; - dz = pbc[2]*domain->zprd; - } else { - dx = pbc[0]; - dy = pbc[1]; - dz = pbc[2]; - } - if (!deform_vremap) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = x[j][0] + dx; - buf[m++] = x[j][1] + dy; - buf[m++] = x[j][2] + dz; - buf[m++] = ubuf(tag[j]).d; - buf[m++] = ubuf(type[j]).d; - buf[m++] = ubuf(mask[j]).d; - buf[m++] = radius[j]; - buf[m++] = rmass[j]; - if (body[j] < 0) buf[m++] = ubuf(0).d; - else { - buf[m++] = ubuf(1).d; - quat = bonus[body[j]].quat; - inertia = bonus[body[j]].inertia; - buf[m++] = quat[0]; - buf[m++] = quat[1]; - buf[m++] = quat[2]; - buf[m++] = quat[3]; - buf[m++] = inertia[0]; - buf[m++] = inertia[1]; - buf[m++] = inertia[2]; - buf[m++] = ubuf(bonus[body[j]].ninteger).d; - buf[m++] = ubuf(bonus[body[j]].ndouble).d; - m += bptr->pack_border_body(&bonus[body[j]],&buf[m]); - } - buf[m++] = v[j][0]; - buf[m++] = v[j][1]; - buf[m++] = v[j][2]; - buf[m++] = angmom[j][0]; - buf[m++] = angmom[j][1]; - buf[m++] = angmom[j][2]; - } - } else { - dvx = pbc[0]*h_rate[0] + pbc[5]*h_rate[5] + pbc[4]*h_rate[4]; - dvy = pbc[1]*h_rate[1] + pbc[3]*h_rate[3]; - dvz = pbc[2]*h_rate[2]; - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = x[j][0] + dx; - buf[m++] = x[j][1] + dy; - buf[m++] = x[j][2] + dz; - buf[m++] = ubuf(tag[j]).d; - buf[m++] = ubuf(type[j]).d; - buf[m++] = ubuf(mask[j]).d; - if (body[j] < 0) buf[m++] = ubuf(0).d; - else { - buf[m++] = ubuf(1).d; - quat = bonus[body[j]].quat; - inertia = bonus[body[j]].inertia; - buf[m++] = quat[0]; - buf[m++] = quat[1]; - buf[m++] = quat[2]; - buf[m++] = quat[3]; - buf[m++] = inertia[0]; - buf[m++] = inertia[1]; - buf[m++] = inertia[2]; - buf[m++] = ubuf(bonus[body[j]].ninteger).d; - buf[m++] = ubuf(bonus[body[j]].ndouble).d; - m += bptr->pack_border_body(&bonus[body[j]],&buf[m]); - } - if (mask[i] & deform_groupbit) { - buf[m++] = v[j][0] + dvx; - buf[m++] = v[j][1] + dvy; - buf[m++] = v[j][2] + dvz; - } else { - buf[m++] = v[j][0]; - buf[m++] = v[j][1]; - buf[m++] = v[j][2]; - } - buf[m++] = angmom[j][0]; - buf[m++] = angmom[j][1]; - buf[m++] = angmom[j][2]; - } - } - } - - if (atom->nextra_border) - for (int iextra = 0; iextra < atom->nextra_border; iextra++) - m += modify->fix[atom->extra_border[iextra]]->pack_border(n,list,&buf[m]); - - return m; -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecBody::pack_border_hybrid(int n, int *list, double *buf) +int AtomVecBody::pack_border_bonus(int n, int *list, double *buf) { int i,j,m; double *quat,*inertia; @@ -793,8 +266,6 @@ int AtomVecBody::pack_border_hybrid(int n, int *list, double *buf) m = 0; for (i = 0; i < n; i++) { j = list[i]; - buf[m++] = radius[j]; - buf[m++] = rmass[j]; if (body[j] < 0) buf[m++] = ubuf(0).d; else { buf[m++] = ubuf(1).d; @@ -812,63 +283,13 @@ int AtomVecBody::pack_border_hybrid(int n, int *list, double *buf) m += bptr->pack_border_body(&bonus[body[j]],&buf[m]); } } - return m; -} -/* ---------------------------------------------------------------------- */ - -void AtomVecBody::unpack_border(int n, int first, double *buf) -{ - int i,j,m,last; - double *quat,*inertia; - - m = 0; - last = first + n; - for (i = first; i < last; i++) { - if (i == nmax) grow(0); - x[i][0] = buf[m++]; - x[i][1] = buf[m++]; - x[i][2] = buf[m++]; - tag[i] = (tagint) ubuf(buf[m++]).i; - type[i] = (int) ubuf(buf[m++]).i; - mask[i] = (int) ubuf(buf[m++]).i; - radius[i] = buf[m++]; - rmass[i] = buf[m++]; - body[i] = (int) ubuf(buf[m++]).i; - if (body[i] == 0) body[i] = -1; - else { - j = nlocal_bonus + nghost_bonus; - if (j == nmax_bonus) grow_bonus(); - quat = bonus[j].quat; - inertia = bonus[j].inertia; - quat[0] = buf[m++]; - quat[1] = buf[m++]; - quat[2] = buf[m++]; - quat[3] = buf[m++]; - inertia[0] = buf[m++]; - inertia[1] = buf[m++]; - inertia[2] = buf[m++]; - bonus[j].ninteger = (int) ubuf(buf[m++]).i; - bonus[j].ndouble = (int) ubuf(buf[m++]).i; - // corresponding put() calls are in clear_bonus() - bonus[j].ivalue = icp->get(bonus[j].ninteger,bonus[j].iindex); - bonus[j].dvalue = dcp->get(bonus[j].ndouble,bonus[j].dindex); - m += bptr->unpack_border_body(&bonus[j],&buf[m]); - bonus[j].ilocal = i; - body[i] = j; - nghost_bonus++; - } - } - - if (atom->nextra_border) - for (int iextra = 0; iextra < atom->nextra_border; iextra++) - m += modify->fix[atom->extra_border[iextra]]-> - unpack_border(n,first,&buf[m]); + return m; } /* ---------------------------------------------------------------------- */ -void AtomVecBody::unpack_border_vel(int n, int first, double *buf) +int AtomVecBody::unpack_border_bonus(int n, int first, double *buf) { int i,j,m,last; double *quat,*inertia; @@ -876,15 +297,6 @@ void AtomVecBody::unpack_border_vel(int n, int first, double *buf) m = 0; last = first + n; for (i = first; i < last; i++) { - if (i == nmax) grow(0); - x[i][0] = buf[m++]; - x[i][1] = buf[m++]; - x[i][2] = buf[m++]; - tag[i] = (tagint) ubuf(buf[m++]).i; - type[i] = (int) ubuf(buf[m++]).i; - mask[i] = (int) ubuf(buf[m++]).i; - radius[i] = buf[m++]; - rmass[i] = buf[m++]; body[i] = (int) ubuf(buf[m++]).i; if (body[i] == 0) body[i] = -1; else { @@ -909,57 +321,8 @@ void AtomVecBody::unpack_border_vel(int n, int first, double *buf) body[i] = j; nghost_bonus++; } - v[i][0] = buf[m++]; - v[i][1] = buf[m++]; - v[i][2] = buf[m++]; - angmom[i][0] = buf[m++]; - angmom[i][1] = buf[m++]; - angmom[i][2] = buf[m++]; } - if (atom->nextra_border) - for (int iextra = 0; iextra < atom->nextra_border; iextra++) - m += modify->fix[atom->extra_border[iextra]]-> - unpack_border(n,first,&buf[m]); -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecBody::unpack_border_hybrid(int n, int first, double *buf) -{ - int i,j,m,last; - double *quat,*inertia; - - m = 0; - last = first + n; - for (i = first; i < last; i++) { - radius[i] = buf[m++]; - rmass[i] = buf[m++]; - body[i] = (int) ubuf(buf[m++]).i; - if (body[i] == 0) body[i] = -1; - else { - j = nlocal_bonus + nghost_bonus; - if (j == nmax_bonus) grow_bonus(); - quat = bonus[j].quat; - inertia = bonus[j].inertia; - quat[0] = buf[m++]; - quat[1] = buf[m++]; - quat[2] = buf[m++]; - quat[3] = buf[m++]; - inertia[0] = buf[m++]; - inertia[1] = buf[m++]; - inertia[2] = buf[m++]; - bonus[j].ninteger = (int) ubuf(buf[m++]).i; - bonus[j].ndouble = (int) ubuf(buf[m++]).i; - // corresponding put() calls are in clear_bonus() - bonus[j].ivalue = icp->get(bonus[j].ninteger,bonus[j].iindex); - bonus[j].dvalue = dcp->get(bonus[j].ndouble,bonus[j].dindex); - m += bptr->unpack_border_body(&bonus[j],&buf[m]); - bonus[j].ilocal = i; - body[i] = j; - nghost_bonus++; - } - } return m; } @@ -968,24 +331,9 @@ int AtomVecBody::unpack_border_hybrid(int n, int first, double *buf) xyz must be 1st 3 values, so comm::exchange() can test on them ------------------------------------------------------------------------- */ -int AtomVecBody::pack_exchange(int i, double *buf) +int AtomVecBody::pack_exchange_bonus(int i, double *buf) { - int m = 1; - buf[m++] = x[i][0]; - buf[m++] = x[i][1]; - buf[m++] = x[i][2]; - buf[m++] = v[i][0]; - buf[m++] = v[i][1]; - buf[m++] = v[i][2]; - buf[m++] = ubuf(tag[i]).d; - buf[m++] = ubuf(type[i]).d; - buf[m++] = ubuf(mask[i]).d; - buf[m++] = ubuf(image[i]).d; - buf[m++] = radius[i]; - buf[m++] = rmass[i]; - buf[m++] = angmom[i][0]; - buf[m++] = angmom[i][1]; - buf[m++] = angmom[i][2]; + int m = 0; if (body[i] < 0) buf[m++] = ubuf(0).d; else { @@ -1009,40 +357,17 @@ int AtomVecBody::pack_exchange(int i, double *buf) m += bonus[j].ndouble; } - if (atom->nextra_grow) - for (int iextra = 0; iextra < atom->nextra_grow; iextra++) - m += modify->fix[atom->extra_grow[iextra]]->pack_exchange(i,&buf[m]); - - buf[0] = m; return m; } /* ---------------------------------------------------------------------- */ -int AtomVecBody::unpack_exchange(double *buf) +int AtomVecBody::unpack_exchange_bonus(int ilocal, double *buf) { - int nlocal = atom->nlocal; - if (nlocal == nmax) grow(0); - - int m = 1; - x[nlocal][0] = buf[m++]; - x[nlocal][1] = buf[m++]; - x[nlocal][2] = buf[m++]; - v[nlocal][0] = buf[m++]; - v[nlocal][1] = buf[m++]; - v[nlocal][2] = buf[m++]; - tag[nlocal] = (tagint) ubuf(buf[m++]).i; - type[nlocal] = (int) ubuf(buf[m++]).i; - mask[nlocal] = (int) ubuf(buf[m++]).i; - image[nlocal] = (imageint) ubuf(buf[m++]).i; - radius[nlocal] = buf[m++]; - rmass[nlocal] = buf[m++]; - angmom[nlocal][0] = buf[m++]; - angmom[nlocal][1] = buf[m++]; - angmom[nlocal][2] = buf[m++]; - - body[nlocal] = (int) ubuf(buf[m++]).i; - if (body[nlocal] == 0) body[nlocal] = -1; + int m = 0; + + body[ilocal] = (int) ubuf(buf[m++]).i; + if (body[ilocal] == 0) body[ilocal] = -1; else { if (nlocal_bonus == nmax_bonus) grow_bonus(); double *quat = bonus[nlocal_bonus].quat; @@ -1069,42 +394,31 @@ int AtomVecBody::unpack_exchange(double *buf) bonus[nlocal_bonus].ndouble*sizeof(double)); m += bonus[nlocal_bonus].ndouble; - bonus[nlocal_bonus].ilocal = nlocal; - body[nlocal] = nlocal_bonus++; + bonus[nlocal_bonus].ilocal = ilocal; + body[ilocal] = nlocal_bonus++; } - if (atom->nextra_grow) - for (int iextra = 0; iextra < atom->nextra_grow; iextra++) - m += modify->fix[atom->extra_grow[iextra]]-> - unpack_exchange(nlocal,&buf[m]); - - atom->nlocal++; return m; } /* ---------------------------------------------------------------------- - size of restart data for all atoms owned by this proc - include extra data stored by fixes + unpack data for one atom from restart file including bonus data ------------------------------------------------------------------------- */ -int AtomVecBody::size_restart() +int AtomVecBody::size_restart_bonus() { int i; int n = 0; int nlocal = atom->nlocal; - for (i = 0; i < nlocal; i++) + for (i = 0; i < nlocal; i++) { if (body[i] >= 0) { - n += 26; + n += size_restart_bonus_one; if (intdoubleratio == 1) n += bonus[body[i]].ninteger; else n += (bonus[body[i]].ninteger+1)/2; n += bonus[body[i]].ndouble; - } else n += 17; - - if (atom->nextra_restart) - for (int iextra = 0; iextra < atom->nextra_restart; iextra++) - for (i = 0; i < nlocal; i++) - n += modify->fix[atom->extra_restart[iextra]]->size_restart(i); + } else n++; + } return n; } @@ -1115,25 +429,9 @@ int AtomVecBody::size_restart() molecular types may be negative, but write as positive ------------------------------------------------------------------------- */ -int AtomVecBody::pack_restart(int i, double *buf) +int AtomVecBody::pack_restart_bonus(int i, double *buf) { - int m = 1; - buf[m++] = x[i][0]; - buf[m++] = x[i][1]; - buf[m++] = x[i][2]; - buf[m++] = ubuf(tag[i]).d; - buf[m++] = ubuf(type[i]).d; - buf[m++] = ubuf(mask[i]).d; - buf[m++] = ubuf(image[i]).d; - buf[m++] = v[i][0]; - buf[m++] = v[i][1]; - buf[m++] = v[i][2]; - - buf[m++] = radius[i]; - buf[m++] = rmass[i]; - buf[m++] = angmom[i][0]; - buf[m++] = angmom[i][1]; - buf[m++] = angmom[i][2]; + int m = 0; if (body[i] < 0) buf[m++] = ubuf(0).d; else { @@ -1157,47 +455,19 @@ int AtomVecBody::pack_restart(int i, double *buf) m += bonus[j].ndouble; } - if (atom->nextra_restart) - for (int iextra = 0; iextra < atom->nextra_restart; iextra++) - m += modify->fix[atom->extra_restart[iextra]]->pack_restart(i,&buf[m]); - - buf[0] = m; return m; } /* ---------------------------------------------------------------------- - unpack data for one atom from restart file including extra quantities + unpack data for one atom from restart file including bonus data ------------------------------------------------------------------------- */ -int AtomVecBody::unpack_restart(double *buf) +int AtomVecBody::unpack_restart_bonus(int ilocal, double *buf) { - int nlocal = atom->nlocal; - if (nlocal == nmax) { - grow(0); - if (atom->nextra_store) - memory->grow(atom->extra,nmax,atom->nextra_store,"atom:extra"); - } + int m = 0; - int m = 1; - x[nlocal][0] = buf[m++]; - x[nlocal][1] = buf[m++]; - x[nlocal][2] = buf[m++]; - tag[nlocal] = (tagint) ubuf(buf[m++]).i; - type[nlocal] = (int) ubuf(buf[m++]).i; - mask[nlocal] = (int) ubuf(buf[m++]).i; - image[nlocal] = (imageint) ubuf(buf[m++]).i; - v[nlocal][0] = buf[m++]; - v[nlocal][1] = buf[m++]; - v[nlocal][2] = buf[m++]; - - radius[nlocal] = buf[m++]; - rmass[nlocal] = buf[m++]; - angmom[nlocal][0] = buf[m++]; - angmom[nlocal][1] = buf[m++]; - angmom[nlocal][2] = buf[m++]; - - body[nlocal] = (int) ubuf(buf[m++]).i; - if (body[nlocal] == 0) body[nlocal] = -1; + body[ilocal] = (int) ubuf(buf[m++]).i; + if (body[ilocal] == 0) body[ilocal] = -1; else { if (nlocal_bonus == nmax_bonus) grow_bonus(); double *quat = bonus[nlocal_bonus].quat; @@ -1222,17 +492,10 @@ int AtomVecBody::unpack_restart(double *buf) memcpy(bonus[nlocal_bonus].dvalue,&buf[m], bonus[nlocal_bonus].ndouble*sizeof(double)); m += bonus[nlocal_bonus].ndouble; - bonus[nlocal_bonus].ilocal = nlocal; - body[nlocal] = nlocal_bonus++; - } - - double **extra = atom->extra; - if (atom->nextra_store) { - int size = static_cast (buf[0]) - m; - for (int i = 0; i < size; i++) extra[nlocal][i] = buf[m++]; + bonus[nlocal_bonus].ilocal = ilocal; + body[ilocal] = nlocal_bonus++; } - atom->nlocal++; return m; } @@ -1241,92 +504,33 @@ int AtomVecBody::unpack_restart(double *buf) set other values to defaults ------------------------------------------------------------------------- */ -void AtomVecBody::create_atom(int itype, double *coord) +void AtomVecBody::create_atom_post(int ilocal) { - int nlocal = atom->nlocal; - if (nlocal == nmax) grow(0); - - tag[nlocal] = 0; - type[nlocal] = itype; - x[nlocal][0] = coord[0]; - x[nlocal][1] = coord[1]; - x[nlocal][2] = coord[2]; - mask[nlocal] = 1; - image[nlocal] = ((imageint) IMGMAX << IMG2BITS) | - ((imageint) IMGMAX << IMGBITS) | IMGMAX; - v[nlocal][0] = 0.0; - v[nlocal][1] = 0.0; - v[nlocal][2] = 0.0; - - radius[nlocal] = 0.5; - rmass[nlocal] = 1.0; - angmom[nlocal][0] = 0.0; - angmom[nlocal][1] = 0.0; - angmom[nlocal][2] = 0.0; - body[nlocal] = -1; - - atom->nlocal++; + radius[ilocal] = 0.5; + rmass[ilocal] = 1.0; + body[ilocal] = -1; } /* ---------------------------------------------------------------------- - unpack one line from Atoms section of data file - initialize other atom quantities + modify what AtomVec::data_atom() just unpacked + or initialize other atom quantities ------------------------------------------------------------------------- */ -void AtomVecBody::data_atom(double *coord, imageint imagetmp, char **values) +void AtomVecBody::data_atom_post(int ilocal) { - int nlocal = atom->nlocal; - if (nlocal == nmax) grow(0); + body_flag = body[ilocal]; + if (body_flag == 0) body_flag = -1; + else if (body_flag == 1) body_flag = 0; + else error->one(FLERR,"Invalid body flag in Atoms section of data file"); + body[ilocal] = body_flag; - tag[nlocal] = utils::tnumeric(FLERR,values[0],true,lmp); - type[nlocal] = utils::inumeric(FLERR,values[1],true,lmp); - if (type[nlocal] <= 0 || type[nlocal] > atom->ntypes) - error->one(FLERR,"Invalid atom type in Atoms section of data file"); - - body[nlocal] = utils::inumeric(FLERR,values[2],true,lmp); - if (body[nlocal] == 0) body[nlocal] = -1; - else if (body[nlocal] == 1) body[nlocal] = 0; - else error->one(FLERR,"Invalid bodyflag in Atoms section of data file"); - - rmass[nlocal] = utils::numeric(FLERR,values[3],true,lmp); - if (rmass[nlocal] <= 0.0) - error->one(FLERR,"Invalid density in Atoms section of data file"); - - x[nlocal][0] = coord[0]; - x[nlocal][1] = coord[1]; - x[nlocal][2] = coord[2]; - - image[nlocal] = imagetmp; - - mask[nlocal] = 1; - v[nlocal][0] = 0.0; - v[nlocal][1] = 0.0; - v[nlocal][2] = 0.0; - angmom[nlocal][0] = 0.0; - angmom[nlocal][1] = 0.0; - angmom[nlocal][2] = 0.0; - radius[nlocal] = 0.5; - - atom->nlocal++; -} - -/* ---------------------------------------------------------------------- - unpack hybrid quantities from one line in Atoms section of data file - initialize other atom quantities for this sub-style -------------------------------------------------------------------------- */ - -int AtomVecBody::data_atom_hybrid(int nlocal, char **values) -{ - body[nlocal] = utils::inumeric(FLERR,values[0],true,lmp); - if (body[nlocal] == 0) body[nlocal] = -1; - else if (body[nlocal] == 1) body[nlocal] = 0; - else error->one(FLERR,"Invalid atom type in Atoms section of data file"); - - rmass[nlocal] = utils::numeric(FLERR,values[1],true,lmp); - if (rmass[nlocal] <= 0.0) + if (rmass[ilocal] <= 0.0) error->one(FLERR,"Invalid density in Atoms section of data file"); - return 2; + radius[ilocal] = 0.5; + angmom[ilocal][0] = 0.0; + angmom[ilocal][1] = 0.0; + angmom[ilocal][2] = 0.0; } /* ---------------------------------------------------------------------- @@ -1336,7 +540,8 @@ int AtomVecBody::data_atom_hybrid(int nlocal, char **values) void AtomVecBody::data_body(int m, int ninteger, int ndouble, int *ivalues, double *dvalues) { - if (body[m]) error->one(FLERR,"Assigning body parameters to non-body atom"); + if (body[m]) + error->one(FLERR,"Assigning body parameters to non-body atom"); if (nlocal_bonus == nmax_bonus) grow_bonus(); bonus[nlocal_bonus].ilocal = m; bptr->data_body(nlocal_bonus,ninteger,ndouble,ivalues,dvalues); @@ -1344,140 +549,43 @@ void AtomVecBody::data_body(int m, int ninteger, int ndouble, } /* ---------------------------------------------------------------------- - unpack one tri from Velocities section of data file -------------------------------------------------------------------------- */ - -void AtomVecBody::data_vel(int m, char **values) -{ - v[m][0] = utils::numeric(FLERR,values[0],true,lmp); - v[m][1] = utils::numeric(FLERR,values[1],true,lmp); - v[m][2] = utils::numeric(FLERR,values[2],true,lmp); - angmom[m][0] = utils::numeric(FLERR,values[3],true,lmp); - angmom[m][1] = utils::numeric(FLERR,values[4],true,lmp); - angmom[m][2] = utils::numeric(FLERR,values[5],true,lmp); -} - -/* ---------------------------------------------------------------------- - unpack hybrid quantities from one body in Velocities section of data file + return # of bytes of allocated memory ------------------------------------------------------------------------- */ -int AtomVecBody::data_vel_hybrid(int m, char **values) +bigint AtomVecBody::memory_usage_bonus() { - angmom[m][0] = utils::numeric(FLERR,values[0],true,lmp); - angmom[m][1] = utils::numeric(FLERR,values[1],true,lmp); - angmom[m][2] = utils::numeric(FLERR,values[2],true,lmp); - return 3; -} - -/* ---------------------------------------------------------------------- - pack atom info for data file including 3 image flags -------------------------------------------------------------------------- */ + bigint bytes = 0; + bytes += nmax_bonus*sizeof(Bonus); + bytes += icp->size + dcp->size; -void AtomVecBody::pack_data(double **buf) -{ - int nlocal = atom->nlocal; - for (int i = 0; i < nlocal; i++) { - buf[i][0] = ubuf(tag[i]).d; - buf[i][1] = ubuf(type[i]).d; - if (body[i] < 0) buf[i][2] = ubuf(0).d; - else buf[i][2] = ubuf(1).d; - buf[i][3] = rmass[i]; - buf[i][4] = x[i][0]; - buf[i][5] = x[i][1]; - buf[i][6] = x[i][2]; - buf[i][7] = ubuf((image[i] & IMGMASK) - IMGMAX).d; - buf[i][8] = ubuf((image[i] >> IMGBITS & IMGMASK) - IMGMAX).d; - buf[i][9] = ubuf((image[i] >> IMG2BITS) - IMGMAX).d; + int nall = nlocal_bonus + nghost_bonus; + for (int i = 0; i < nall; i++) { + bytes += bonus[i].ninteger * sizeof(int); + bytes += bonus[i].ndouble * sizeof(double); } -} - -/* ---------------------------------------------------------------------- - pack hybrid atom info for data file -------------------------------------------------------------------------- */ -int AtomVecBody::pack_data_hybrid(int i, double *buf) -{ - if (body[i] < 0) buf[0] = ubuf(0).d; - else buf[0] = ubuf(1).d; - buf[1] = rmass[i]; - return 2; -} - -/* ---------------------------------------------------------------------- - write atom info to data file including 3 image flags -------------------------------------------------------------------------- */ - -void AtomVecBody::write_data(FILE *fp, int n, double **buf) -{ - for (int i = 0; i < n; i++) - fprintf(fp,TAGINT_FORMAT " %d %d %g %g %g %g %d %d %d\n", - (tagint) ubuf(buf[i][0]).i,(int) ubuf(buf[i][1]).i, - (int) ubuf(buf[i][2]).i, - buf[i][3],buf[i][4],buf[i][5],buf[i][6], - (int) ubuf(buf[i][7]).i,(int) ubuf(buf[i][8]).i, - (int) ubuf(buf[i][9]).i); -} - -/* ---------------------------------------------------------------------- - write hybrid atom info to data file -------------------------------------------------------------------------- */ - -int AtomVecBody::write_data_hybrid(FILE *fp, double *buf) -{ - fprintf(fp," %d %g",(int) ubuf(buf[0]).i,buf[1]); - return 2; -} - -/* ---------------------------------------------------------------------- - pack velocity info for data file -------------------------------------------------------------------------- */ - -void AtomVecBody::pack_vel(double **buf) -{ - int nlocal = atom->nlocal; - for (int i = 0; i < nlocal; i++) { - buf[i][0] = ubuf(tag[i]).d; - buf[i][1] = v[i][0]; - buf[i][2] = v[i][1]; - buf[i][3] = v[i][2]; - buf[i][4] = angmom[i][0]; - buf[i][5] = angmom[i][1]; - buf[i][6] = angmom[i][2]; - } + return bytes; } /* ---------------------------------------------------------------------- - pack hybrid velocity info for data file + modify values for AtomVec::pack_data() to pack ------------------------------------------------------------------------- */ -int AtomVecBody::pack_vel_hybrid(int i, double *buf) +void AtomVecBody::pack_data_pre(int ilocal) { - buf[0] = angmom[i][0]; - buf[1] = angmom[i][1]; - buf[2] = angmom[i][2]; - return 3; -} - -/* ---------------------------------------------------------------------- - write velocity info to data file -------------------------------------------------------------------------- */ + body_flag = body[ilocal]; -void AtomVecBody::write_vel(FILE *fp, int n, double **buf) -{ - for (int i = 0; i < n; i++) - fprintf(fp,TAGINT_FORMAT " %g %g %g %g %g %g\n", - (tagint) ubuf(buf[i][0]).i,buf[i][1],buf[i][2],buf[i][3], - buf[i][4],buf[i][5],buf[i][6]); + if (body_flag < 0) body[ilocal] = 0; + else body[ilocal] = 1; } /* ---------------------------------------------------------------------- - write hybrid velocity info to data file + unmodify values packed by AtomVec::pack_data() ------------------------------------------------------------------------- */ -int AtomVecBody::write_vel_hybrid(FILE *fp, double *buf) +void AtomVecBody::pack_data_post(int ilocal) { - fprintf(fp," %g %g %g",buf[0],buf[1],buf[2]); - return 3; + body[ilocal] = body_flag; } /* ---------------------------------------------------------------------- @@ -1503,41 +611,6 @@ void AtomVecBody::set_quat(int m, double *quat_external) quat[2] = quat_external[2]; quat[3] = quat_external[3]; } -/* ---------------------------------------------------------------------- - return # of bytes of allocated memory -------------------------------------------------------------------------- */ - -bigint AtomVecBody::memory_usage() -{ - bigint bytes = 0; - - if (atom->memcheck("tag")) bytes += memory->usage(tag,nmax); - if (atom->memcheck("type")) bytes += memory->usage(type,nmax); - if (atom->memcheck("mask")) bytes += memory->usage(mask,nmax); - if (atom->memcheck("image")) bytes += memory->usage(image,nmax); - if (atom->memcheck("x")) bytes += memory->usage(x,nmax,3); - if (atom->memcheck("v")) bytes += memory->usage(v,nmax,3); - if (atom->memcheck("f")) bytes += memory->usage(f,nmax*comm->nthreads,3); - - if (atom->memcheck("radius")) bytes += memory->usage(radius,nmax); - if (atom->memcheck("rmass")) bytes += memory->usage(rmass,nmax); - if (atom->memcheck("angmom")) bytes += memory->usage(angmom,nmax,3); - if (atom->memcheck("torque")) bytes += - memory->usage(torque,nmax*comm->nthreads,3); - if (atom->memcheck("body")) bytes += memory->usage(body,nmax); - - bytes += nmax_bonus*sizeof(Bonus); - bytes += icp->size + dcp->size; - - int nall = nlocal_bonus + nghost_bonus; - for (int i = 0; i < nall; i++) { - bytes += bonus[i].ninteger * sizeof(int); - bytes += bonus[i].ndouble * sizeof(double); - } - - return bytes; -} - /* ---------------------------------------------------------------------- debug method for sanity checking of own/bonus data pointers ------------------------------------------------------------------------- */ @@ -1546,15 +619,15 @@ bigint AtomVecBody::memory_usage() void AtomVecBody::check(int flag) { for (int i = 0; i < atom->nlocal; i++) { - if (atom->body[i] >= 0 && atom->body[i] >= nlocal_bonus) { + if (body[i] >= 0 && body[i] >= nlocal_bonus) { printf("Proc %d, step %ld, flag %d\n",comm->me,update->ntimestep,flag); errorx->one(FLERR,"BAD AAA"); } } for (int i = atom->nlocal; i < atom->nlocal+atom->nghost; i++) { - if (atom->body[i] >= 0 && - (atom->body[i] < nlocal_bonus || - atom->body[i] >= nlocal_bonus+nghost_bonus)) { + if (body[i] >= 0 && + (body[i] < nlocal_bonus || + body[i] >= nlocal_bonus+nghost_bonus)) { printf("Proc %d, step %ld, flag %d\n",comm->me,update->ntimestep,flag); errorx->one(FLERR,"BAD BBB"); } @@ -1566,7 +639,7 @@ void AtomVecBody::check(int flag) } } for (int i = 0; i < nlocal_bonus; i++) { - if (atom->body[bonus[i].ilocal] != i) { + if (body[bonus[i].ilocal] != i) { printf("Proc %d, step %ld, flag %d\n",comm->me,update->ntimestep,flag); errorx->one(FLERR,"BAD DDD"); } @@ -1579,7 +652,7 @@ void AtomVecBody::check(int flag) } } for (int i = nlocal_bonus; i < nlocal_bonus+nghost_bonus; i++) { - if (atom->body[bonus[i].ilocal] != i) { + if (body[bonus[i].ilocal] != i) { printf("Proc %d, step %ld, flag %d\n",comm->me,update->ntimestep,flag); errorx->one(FLERR,"BAD FFF"); } diff --git a/src/atom_vec_body.h b/src/atom_vec_body.h index 38309648fb94744e8e0089f952aaa031a3d90ce5..a47cfb3b541161d28ee2f2c5f8f36533ed497a81 100644 --- a/src/atom_vec_body.h +++ b/src/atom_vec_body.h @@ -42,49 +42,26 @@ class AtomVecBody : public AtomVec { AtomVecBody(class LAMMPS *); ~AtomVecBody(); void process_args(int, char **); - void grow(int); - void grow_reset(); - void copy(int, int, int); - int pack_comm(int, int *, double *, int, int *); - int pack_comm_vel(int, int *, double *, int, int *); - int pack_comm_hybrid(int, int *, double *); - void unpack_comm(int, int, double *); - void unpack_comm_vel(int, int, double *); - int unpack_comm_hybrid(int, int, double *); - int pack_reverse(int, int, double *); - int pack_reverse_hybrid(int, int, double *); - void unpack_reverse(int, int *, double *); - int unpack_reverse_hybrid(int, int *, double *); - int pack_border(int, int *, double *, int, int *); - int pack_border_vel(int, int *, double *, int, int *); - int pack_border_hybrid(int, int *, double *); - void unpack_border(int, int, double *); - void unpack_border_vel(int, int, double *); - int unpack_border_hybrid(int, int, double *); - int pack_exchange(int, double *); - int unpack_exchange(double *); - int size_restart(); - int pack_restart(int, double *); - int unpack_restart(double *); - void create_atom(int, double *); - void data_atom(double *, imageint, char **); - int data_atom_hybrid(int, char **); - void data_vel(int, char **); - int data_vel_hybrid(int, char **); - void pack_data(double **); - int pack_data_hybrid(int, double *); - void write_data(FILE *, int, double **); - int write_data_hybrid(FILE *, double *); - void pack_vel(double **); - int pack_vel_hybrid(int, double *); - void write_vel(FILE *, int, double **); - int write_vel_hybrid(FILE *, double *); - bigint memory_usage(); - - // manipulate Bonus data structure for extra atom info + void grow_pointers(); + void copy_bonus(int, int, int); void clear_bonus(); + int pack_comm_bonus(int, int *, double *); + void unpack_comm_bonus(int, int, double *); + int pack_border_bonus(int, int *, double *); + int unpack_border_bonus(int, int, double *); + int pack_exchange_bonus(int, double *); + int unpack_exchange_bonus(int, double *); + int size_restart_bonus(); + int pack_restart_bonus(int, double *); + int unpack_restart_bonus(int, double *); void data_body(int, int, int, int *, double *); + bigint memory_usage_bonus(); + + void create_atom_post(int); + void data_atom_post(int); + void pack_data_pre(int); + void pack_data_post(int); // methods used by other classes to query/set body info @@ -94,23 +71,20 @@ class AtomVecBody : public AtomVec { int nlocal_bonus; private: - tagint *tag; - int *type,*mask; - imageint *image; - double **x,**v,**f; - double *radius; - double *rmass; - double **angmom,**torque; int *body; + double *rmass,*radius; + double **angmom; int nghost_bonus,nmax_bonus; - int intdoubleratio; // sizeof(double) / sizeof(int) + int intdoubleratio; // sizeof(double) / sizeof(int) + int body_flag; MyPoolChunk *icp; MyPoolChunk *dcp; void grow_bonus(); - void copy_bonus(int, int); + void copy_bonus_all(int, int); + // check(int); }; } diff --git a/src/atom_vec_charge.cpp b/src/atom_vec_charge.cpp index 9f35d16ff0b7f9b0b35506a560f7ee9fa556936b..5957ef52153078aeec8d7ea06f7239f12959fec8 100644 --- a/src/atom_vec_charge.cpp +++ b/src/atom_vec_charge.cpp @@ -13,13 +13,6 @@ #include "atom_vec_charge.h" #include "atom.h" -#include "comm.h" -#include "domain.h" -#include "modify.h" -#include "fix.h" -#include "memory.h" -#include "error.h" -#include "utils.h" using namespace LAMMPS_NS; @@ -30,742 +23,25 @@ AtomVecCharge::AtomVecCharge(LAMMPS *lmp) : AtomVec(lmp) molecular = 0; mass_type = 1; - comm_x_only = comm_f_only = 1; - size_forward = 3; - size_reverse = 3; - size_border = 7; - size_velocity = 3; - size_data_atom = 6; - size_data_vel = 4; - xcol_data = 4; - atom->q_flag = 1; -} - -/* ---------------------------------------------------------------------- - grow atom arrays - n = 0 grows arrays by a chunk - n > 0 allocates arrays to size n -------------------------------------------------------------------------- */ - -void AtomVecCharge::grow(int n) -{ - if (n == 0) grow_nmax(); - else nmax = n; - atom->nmax = nmax; - if (nmax < 0 || nmax > MAXSMALLINT) - error->one(FLERR,"Per-processor system is too big"); - - tag = memory->grow(atom->tag,nmax,"atom:tag"); - type = memory->grow(atom->type,nmax,"atom:type"); - mask = memory->grow(atom->mask,nmax,"atom:mask"); - image = memory->grow(atom->image,nmax,"atom:image"); - x = memory->grow(atom->x,nmax,3,"atom:x"); - v = memory->grow(atom->v,nmax,3,"atom:v"); - f = memory->grow(atom->f,nmax*comm->nthreads,3,"atom:f"); - - q = memory->grow(atom->q,nmax,"atom:q"); - - if (atom->nextra_grow) - for (int iextra = 0; iextra < atom->nextra_grow; iextra++) - modify->fix[atom->extra_grow[iextra]]->grow_arrays(nmax); -} - -/* ---------------------------------------------------------------------- - reset local array ptrs -------------------------------------------------------------------------- */ - -void AtomVecCharge::grow_reset() -{ - tag = atom->tag; type = atom->type; - mask = atom->mask; image = atom->image; - x = atom->x; v = atom->v; f = atom->f; - q = atom->q; -} - -/* ---------------------------------------------------------------------- - copy atom I info to atom J -------------------------------------------------------------------------- */ - -void AtomVecCharge::copy(int i, int j, int delflag) -{ - tag[j] = tag[i]; - type[j] = type[i]; - mask[j] = mask[i]; - image[j] = image[i]; - x[j][0] = x[i][0]; - x[j][1] = x[i][1]; - x[j][2] = x[i][2]; - v[j][0] = v[i][0]; - v[j][1] = v[i][1]; - v[j][2] = v[i][2]; - - q[j] = q[i]; - - if (atom->nextra_grow) - for (int iextra = 0; iextra < atom->nextra_grow; iextra++) - modify->fix[atom->extra_grow[iextra]]->copy_arrays(i,j,delflag); -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecCharge::pack_comm(int n, int *list, double *buf, - int pbc_flag, int *pbc) -{ - int i,j,m; - double dx,dy,dz; - - m = 0; - if (pbc_flag == 0) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = x[j][0]; - buf[m++] = x[j][1]; - buf[m++] = x[j][2]; - } - } else { - if (domain->triclinic == 0) { - dx = pbc[0]*domain->xprd; - dy = pbc[1]*domain->yprd; - dz = pbc[2]*domain->zprd; - } else { - dx = pbc[0]*domain->xprd + pbc[5]*domain->xy + pbc[4]*domain->xz; - dy = pbc[1]*domain->yprd + pbc[3]*domain->yz; - dz = pbc[2]*domain->zprd; - } - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = x[j][0] + dx; - buf[m++] = x[j][1] + dy; - buf[m++] = x[j][2] + dz; - } - } - return m; -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecCharge::pack_comm_vel(int n, int *list, double *buf, - int pbc_flag, int *pbc) -{ - int i,j,m; - double dx,dy,dz,dvx,dvy,dvz; - - m = 0; - if (pbc_flag == 0) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = x[j][0]; - buf[m++] = x[j][1]; - buf[m++] = x[j][2]; - buf[m++] = v[j][0]; - buf[m++] = v[j][1]; - buf[m++] = v[j][2]; - } - } else { - if (domain->triclinic == 0) { - dx = pbc[0]*domain->xprd; - dy = pbc[1]*domain->yprd; - dz = pbc[2]*domain->zprd; - } else { - dx = pbc[0]*domain->xprd + pbc[5]*domain->xy + pbc[4]*domain->xz; - dy = pbc[1]*domain->yprd + pbc[3]*domain->yz; - dz = pbc[2]*domain->zprd; - } - if (!deform_vremap) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = x[j][0] + dx; - buf[m++] = x[j][1] + dy; - buf[m++] = x[j][2] + dz; - buf[m++] = v[j][0]; - buf[m++] = v[j][1]; - buf[m++] = v[j][2]; - } - } else { - dvx = pbc[0]*h_rate[0] + pbc[5]*h_rate[5] + pbc[4]*h_rate[4]; - dvy = pbc[1]*h_rate[1] + pbc[3]*h_rate[3]; - dvz = pbc[2]*h_rate[2]; - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = x[j][0] + dx; - buf[m++] = x[j][1] + dy; - buf[m++] = x[j][2] + dz; - if (mask[i] & deform_groupbit) { - buf[m++] = v[j][0] + dvx; - buf[m++] = v[j][1] + dvy; - buf[m++] = v[j][2] + dvz; - } else { - buf[m++] = v[j][0]; - buf[m++] = v[j][1]; - buf[m++] = v[j][2]; - } - } - } - } - return m; -} - -/* ---------------------------------------------------------------------- */ - -void AtomVecCharge::unpack_comm(int n, int first, double *buf) -{ - int i,m,last; - - m = 0; - last = first + n; - for (i = first; i < last; i++) { - x[i][0] = buf[m++]; - x[i][1] = buf[m++]; - x[i][2] = buf[m++]; - } -} - -/* ---------------------------------------------------------------------- */ - -void AtomVecCharge::unpack_comm_vel(int n, int first, double *buf) -{ - int i,m,last; - - m = 0; - last = first + n; - for (i = first; i < last; i++) { - x[i][0] = buf[m++]; - x[i][1] = buf[m++]; - x[i][2] = buf[m++]; - v[i][0] = buf[m++]; - v[i][1] = buf[m++]; - v[i][2] = buf[m++]; - } -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecCharge::pack_reverse(int n, int first, double *buf) -{ - int i,m,last; - - m = 0; - last = first + n; - for (i = first; i < last; i++) { - buf[m++] = f[i][0]; - buf[m++] = f[i][1]; - buf[m++] = f[i][2]; - } - return m; -} - -/* ---------------------------------------------------------------------- */ - -void AtomVecCharge::unpack_reverse(int n, int *list, double *buf) -{ - int i,j,m; - - m = 0; - for (i = 0; i < n; i++) { - j = list[i]; - f[j][0] += buf[m++]; - f[j][1] += buf[m++]; - f[j][2] += buf[m++]; - } -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecCharge::pack_border(int n, int *list, double *buf, - int pbc_flag, int *pbc) -{ - int i,j,m; - double dx,dy,dz; - - m = 0; - if (pbc_flag == 0) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = x[j][0]; - buf[m++] = x[j][1]; - buf[m++] = x[j][2]; - buf[m++] = ubuf(tag[j]).d; - buf[m++] = ubuf(type[j]).d; - buf[m++] = ubuf(mask[j]).d; - buf[m++] = q[j]; - } - } else { - if (domain->triclinic == 0) { - dx = pbc[0]*domain->xprd; - dy = pbc[1]*domain->yprd; - dz = pbc[2]*domain->zprd; - } else { - dx = pbc[0]; - dy = pbc[1]; - dz = pbc[2]; - } - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = x[j][0] + dx; - buf[m++] = x[j][1] + dy; - buf[m++] = x[j][2] + dz; - buf[m++] = ubuf(tag[j]).d; - buf[m++] = ubuf(type[j]).d; - buf[m++] = ubuf(mask[j]).d; - buf[m++] = q[j]; - } - } - - if (atom->nextra_border) - for (int iextra = 0; iextra < atom->nextra_border; iextra++) - m += modify->fix[atom->extra_border[iextra]]->pack_border(n,list,&buf[m]); - - return m; -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecCharge::pack_border_vel(int n, int *list, double *buf, - int pbc_flag, int *pbc) -{ - int i,j,m; - double dx,dy,dz,dvx,dvy,dvz; - - m = 0; - if (pbc_flag == 0) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = x[j][0]; - buf[m++] = x[j][1]; - buf[m++] = x[j][2]; - buf[m++] = ubuf(tag[j]).d; - buf[m++] = ubuf(type[j]).d; - buf[m++] = ubuf(mask[j]).d; - buf[m++] = q[j]; - buf[m++] = v[j][0]; - buf[m++] = v[j][1]; - buf[m++] = v[j][2]; - } - } else { - if (domain->triclinic == 0) { - dx = pbc[0]*domain->xprd; - dy = pbc[1]*domain->yprd; - dz = pbc[2]*domain->zprd; - } else { - dx = pbc[0]; - dy = pbc[1]; - dz = pbc[2]; - } - if (!deform_vremap) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = x[j][0] + dx; - buf[m++] = x[j][1] + dy; - buf[m++] = x[j][2] + dz; - buf[m++] = ubuf(tag[j]).d; - buf[m++] = ubuf(type[j]).d; - buf[m++] = ubuf(mask[j]).d; - buf[m++] = q[j]; - buf[m++] = v[j][0]; - buf[m++] = v[j][1]; - buf[m++] = v[j][2]; - } - } else { - dvx = pbc[0]*h_rate[0] + pbc[5]*h_rate[5] + pbc[4]*h_rate[4]; - dvy = pbc[1]*h_rate[1] + pbc[3]*h_rate[3]; - dvz = pbc[2]*h_rate[2]; - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = x[j][0] + dx; - buf[m++] = x[j][1] + dy; - buf[m++] = x[j][2] + dz; - buf[m++] = ubuf(tag[j]).d; - buf[m++] = ubuf(type[j]).d; - buf[m++] = ubuf(mask[j]).d; - buf[m++] = q[j]; - if (mask[i] & deform_groupbit) { - buf[m++] = v[j][0] + dvx; - buf[m++] = v[j][1] + dvy; - buf[m++] = v[j][2] + dvz; - } else { - buf[m++] = v[j][0]; - buf[m++] = v[j][1]; - buf[m++] = v[j][2]; - } - } - } - } - - if (atom->nextra_border) - for (int iextra = 0; iextra < atom->nextra_border; iextra++) - m += modify->fix[atom->extra_border[iextra]]->pack_border(n,list,&buf[m]); - - return m; -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecCharge::pack_border_hybrid(int n, int *list, double *buf) -{ - int i,j,m; - - m = 0; - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = q[j]; - } - return m; -} - -/* ---------------------------------------------------------------------- */ - -void AtomVecCharge::unpack_border(int n, int first, double *buf) -{ - int i,m,last; - - m = 0; - last = first + n; - for (i = first; i < last; i++) { - if (i == nmax) grow(0); - x[i][0] = buf[m++]; - x[i][1] = buf[m++]; - x[i][2] = buf[m++]; - tag[i] = (tagint) ubuf(buf[m++]).i; - type[i] = (int) ubuf(buf[m++]).i; - mask[i] = (int) ubuf(buf[m++]).i; - q[i] = buf[m++]; - } - - if (atom->nextra_border) - for (int iextra = 0; iextra < atom->nextra_border; iextra++) - m += modify->fix[atom->extra_border[iextra]]-> - unpack_border(n,first,&buf[m]); -} - -/* ---------------------------------------------------------------------- */ - -void AtomVecCharge::unpack_border_vel(int n, int first, double *buf) -{ - int i,m,last; - - m = 0; - last = first + n; - for (i = first; i < last; i++) { - if (i == nmax) grow(0); - x[i][0] = buf[m++]; - x[i][1] = buf[m++]; - x[i][2] = buf[m++]; - tag[i] = (tagint) ubuf(buf[m++]).i; - type[i] = (int) ubuf(buf[m++]).i; - mask[i] = (int) ubuf(buf[m++]).i; - q[i] = buf[m++]; - v[i][0] = buf[m++]; - v[i][1] = buf[m++]; - v[i][2] = buf[m++]; - } - - if (atom->nextra_border) - for (int iextra = 0; iextra < atom->nextra_border; iextra++) - m += modify->fix[atom->extra_border[iextra]]-> - unpack_border(n,first,&buf[m]); -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecCharge::unpack_border_hybrid(int n, int first, double *buf) -{ - int i,m,last; - - m = 0; - last = first + n; - for (i = first; i < last; i++) - q[i] = buf[m++]; - return m; -} - -/* ---------------------------------------------------------------------- - pack data for atom I for sending to another proc - xyz must be 1st 3 values, so comm::exchange() can test on them -------------------------------------------------------------------------- */ - -int AtomVecCharge::pack_exchange(int i, double *buf) -{ - int m = 1; - buf[m++] = x[i][0]; - buf[m++] = x[i][1]; - buf[m++] = x[i][2]; - buf[m++] = v[i][0]; - buf[m++] = v[i][1]; - buf[m++] = v[i][2]; - buf[m++] = ubuf(tag[i]).d; - buf[m++] = ubuf(type[i]).d; - buf[m++] = ubuf(mask[i]).d; - buf[m++] = ubuf(image[i]).d; - - buf[m++] = q[i]; - - if (atom->nextra_grow) - for (int iextra = 0; iextra < atom->nextra_grow; iextra++) - m += modify->fix[atom->extra_grow[iextra]]->pack_exchange(i,&buf[m]); - - buf[0] = m; - return m; -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecCharge::unpack_exchange(double *buf) -{ - int nlocal = atom->nlocal; - if (nlocal == nmax) grow(0); - - int m = 1; - x[nlocal][0] = buf[m++]; - x[nlocal][1] = buf[m++]; - x[nlocal][2] = buf[m++]; - v[nlocal][0] = buf[m++]; - v[nlocal][1] = buf[m++]; - v[nlocal][2] = buf[m++]; - tag[nlocal] = (tagint) ubuf(buf[m++]).i; - type[nlocal] = (int) ubuf(buf[m++]).i; - mask[nlocal] = (int) ubuf(buf[m++]).i; - image[nlocal] = (imageint) ubuf(buf[m++]).i; - - q[nlocal] = buf[m++]; - - if (atom->nextra_grow) - for (int iextra = 0; iextra < atom->nextra_grow; iextra++) - m += modify->fix[atom->extra_grow[iextra]]-> - unpack_exchange(nlocal,&buf[m]); - - atom->nlocal++; - return m; -} - -/* ---------------------------------------------------------------------- - size of restart data for all atoms owned by this proc - include extra data stored by fixes -------------------------------------------------------------------------- */ - -int AtomVecCharge::size_restart() -{ - int i; - - int nlocal = atom->nlocal; - int n = 12 * nlocal; - - if (atom->nextra_restart) - for (int iextra = 0; iextra < atom->nextra_restart; iextra++) - for (i = 0; i < nlocal; i++) - n += modify->fix[atom->extra_restart[iextra]]->size_restart(i); - - return n; -} - -/* ---------------------------------------------------------------------- - pack atom I's data for restart file including extra quantities - xyz must be 1st 3 values, so that read_restart can test on them - molecular types may be negative, but write as positive -------------------------------------------------------------------------- */ - -int AtomVecCharge::pack_restart(int i, double *buf) -{ - int m = 1; - buf[m++] = x[i][0]; - buf[m++] = x[i][1]; - buf[m++] = x[i][2]; - buf[m++] = ubuf(tag[i]).d; - buf[m++] = ubuf(type[i]).d; - buf[m++] = ubuf(mask[i]).d; - buf[m++] = ubuf(image[i]).d; - buf[m++] = v[i][0]; - buf[m++] = v[i][1]; - buf[m++] = v[i][2]; - - buf[m++] = q[i]; - - if (atom->nextra_restart) - for (int iextra = 0; iextra < atom->nextra_restart; iextra++) - m += modify->fix[atom->extra_restart[iextra]]->pack_restart(i,&buf[m]); - - buf[0] = m; - return m; -} - -/* ---------------------------------------------------------------------- - unpack data for one atom from restart file including extra quantities -------------------------------------------------------------------------- */ - -int AtomVecCharge::unpack_restart(double *buf) -{ - int nlocal = atom->nlocal; - if (nlocal == nmax) { - grow(0); - if (atom->nextra_store) - memory->grow(atom->extra,nmax,atom->nextra_store,"atom:extra"); - } - - int m = 1; - x[nlocal][0] = buf[m++]; - x[nlocal][1] = buf[m++]; - x[nlocal][2] = buf[m++]; - tag[nlocal] = (tagint) ubuf(buf[m++]).i; - type[nlocal] = (int) ubuf(buf[m++]).i; - mask[nlocal] = (int) ubuf(buf[m++]).i; - image[nlocal] = (imageint) ubuf(buf[m++]).i; - v[nlocal][0] = buf[m++]; - v[nlocal][1] = buf[m++]; - v[nlocal][2] = buf[m++]; - - q[nlocal] = buf[m++]; - - double **extra = atom->extra; - if (atom->nextra_store) { - int size = static_cast (buf[0]) - m; - for (int i = 0; i < size; i++) extra[nlocal][i] = buf[m++]; - } - - atom->nlocal++; - return m; -} - -/* ---------------------------------------------------------------------- - create one atom of itype at coord - set other values to defaults -------------------------------------------------------------------------- */ - -void AtomVecCharge::create_atom(int itype, double *coord) -{ - int nlocal = atom->nlocal; - if (nlocal == nmax) grow(0); - - tag[nlocal] = 0; - type[nlocal] = itype; - x[nlocal][0] = coord[0]; - x[nlocal][1] = coord[1]; - x[nlocal][2] = coord[2]; - mask[nlocal] = 1; - image[nlocal] = ((imageint) IMGMAX << IMG2BITS) | - ((imageint) IMGMAX << IMGBITS) | IMGMAX; - v[nlocal][0] = 0.0; - v[nlocal][1] = 0.0; - v[nlocal][2] = 0.0; - - q[nlocal] = 0.0; - - atom->nlocal++; -} - -/* ---------------------------------------------------------------------- - unpack one line from Atoms section of data file - initialize other atom quantities -------------------------------------------------------------------------- */ - -void AtomVecCharge::data_atom(double *coord, imageint imagetmp, char **values) -{ - int nlocal = atom->nlocal; - if (nlocal == nmax) grow(0); - - tag[nlocal] = utils::tnumeric(FLERR,values[0],true,lmp); - type[nlocal] = utils::inumeric(FLERR,values[1],true,lmp); - if (type[nlocal] <= 0 || type[nlocal] > atom->ntypes) - error->one(FLERR,"Invalid atom type in Atoms section of data file"); - - q[nlocal] = utils::numeric(FLERR,values[2],true,lmp); - - x[nlocal][0] = coord[0]; - x[nlocal][1] = coord[1]; - x[nlocal][2] = coord[2]; - - image[nlocal] = imagetmp; - - mask[nlocal] = 1; - v[nlocal][0] = 0.0; - v[nlocal][1] = 0.0; - v[nlocal][2] = 0.0; - - atom->nlocal++; -} - -/* ---------------------------------------------------------------------- - unpack hybrid quantities from one line in Atoms section of data file - initialize other atom quantities for this sub-style -------------------------------------------------------------------------- */ - -int AtomVecCharge::data_atom_hybrid(int nlocal, char **values) -{ - q[nlocal] = utils::numeric(FLERR,values[0],true,lmp); - - return 1; -} - -/* ---------------------------------------------------------------------- - pack atom info for data file including 3 image flags -------------------------------------------------------------------------- */ - -void AtomVecCharge::pack_data(double **buf) -{ - int nlocal = atom->nlocal; - for (int i = 0; i < nlocal; i++) { - buf[i][0] = ubuf(tag[i]).d; - buf[i][1] = ubuf(type[i]).d; - buf[i][2] = q[i]; - buf[i][3] = x[i][0]; - buf[i][4] = x[i][1]; - buf[i][5] = x[i][2]; - buf[i][6] = ubuf((image[i] & IMGMASK) - IMGMAX).d; - buf[i][7] = ubuf((image[i] >> IMGBITS & IMGMASK) - IMGMAX).d; - buf[i][8] = ubuf((image[i] >> IMG2BITS) - IMGMAX).d; - } -} - -/* ---------------------------------------------------------------------- - pack hybrid atom info for data file -------------------------------------------------------------------------- */ - -int AtomVecCharge::pack_data_hybrid(int i, double *buf) -{ - buf[0] = q[i]; - return 1; -} - -/* ---------------------------------------------------------------------- - write atom info to data file including 3 image flags -------------------------------------------------------------------------- */ - -void AtomVecCharge::write_data(FILE *fp, int n, double **buf) -{ - for (int i = 0; i < n; i++) - fprintf(fp,TAGINT_FORMAT " %d %-1.16e %-1.16e %-1.16e %-1.16e %d %d %d\n", - (tagint) ubuf(buf[i][0]).i,(int) ubuf(buf[i][1]).i, - buf[i][2],buf[i][3],buf[i][4],buf[i][5], - (int) ubuf(buf[i][6]).i,(int) ubuf(buf[i][7]).i, - (int) ubuf(buf[i][8]).i); -} - -/* ---------------------------------------------------------------------- - write hybrid atom info to data file -------------------------------------------------------------------------- */ - -int AtomVecCharge::write_data_hybrid(FILE *fp, double *buf) -{ - fprintf(fp," %-1.16e",buf[0]); - return 1; -} - -/* ---------------------------------------------------------------------- - return # of bytes of allocated memory -------------------------------------------------------------------------- */ - -bigint AtomVecCharge::memory_usage() -{ - bigint bytes = 0; - - if (atom->memcheck("tag")) bytes += memory->usage(tag,nmax); - if (atom->memcheck("type")) bytes += memory->usage(type,nmax); - if (atom->memcheck("mask")) bytes += memory->usage(mask,nmax); - if (atom->memcheck("image")) bytes += memory->usage(image,nmax); - if (atom->memcheck("x")) bytes += memory->usage(x,nmax,3); - if (atom->memcheck("v")) bytes += memory->usage(v,nmax,3); - if (atom->memcheck("f")) bytes += memory->usage(f,nmax*comm->nthreads,3); - - if (atom->memcheck("q")) bytes += memory->usage(q,nmax); - return bytes; + // strings with peratom variables to include in each AtomVec method + // strings cannot contain fields in corresponding AtomVec default strings + // order of fields in a string does not matter + // except: fields_data_atom & fields_data_vel must match data file + + fields_grow = (char *) "q"; + fields_copy = (char *) "q"; + fields_comm = (char *) ""; + fields_comm_vel = (char *) ""; + fields_reverse = (char *) ""; + fields_border = (char *) "q"; + fields_border_vel = (char *) "q"; + fields_exchange = (char *) "q"; + fields_restart = (char *) "q"; + fields_create = (char *) "q"; + fields_data_atom = (char *) "id type q x"; + fields_data_vel = (char *) "id v"; + + setup_fields(); } diff --git a/src/atom_vec_charge.h b/src/atom_vec_charge.h index 10f1d8d14144571d5878d081ccfccaf5ffc42b72..d52b4a068aca46e35f3f144fab79bb8bf3086fb1 100644 --- a/src/atom_vec_charge.h +++ b/src/atom_vec_charge.h @@ -27,42 +27,6 @@ namespace LAMMPS_NS { class AtomVecCharge : public AtomVec { public: AtomVecCharge(class LAMMPS *); - virtual ~AtomVecCharge() {} - void grow(int); - void grow_reset(); - void copy(int, int, int); - virtual int pack_comm(int, int *, double *, int, int *); - virtual int pack_comm_vel(int, int *, double *, int, int *); - virtual void unpack_comm(int, int, double *); - virtual void unpack_comm_vel(int, int, double *); - int pack_reverse(int, int, double *); - void unpack_reverse(int, int *, double *); - virtual int pack_border(int, int *, double *, int, int *); - virtual int pack_border_vel(int, int *, double *, int, int *); - int pack_border_hybrid(int, int *, double *); - virtual void unpack_border(int, int, double *); - virtual void unpack_border_vel(int, int, double *); - int unpack_border_hybrid(int, int, double *); - virtual int pack_exchange(int, double *); - virtual int unpack_exchange(double *); - int size_restart(); - int pack_restart(int, double *); - int unpack_restart(double *); - void create_atom(int, double *); - void data_atom(double *, imageint, char **); - int data_atom_hybrid(int, char **); - void pack_data(double **); - int pack_data_hybrid(int, double *); - void write_data(FILE *, int, double **); - int write_data_hybrid(FILE *, double *); - bigint memory_usage(); - - protected: - tagint *tag; - int *type,*mask; - imageint *image; - double **x,**v,**f; - double *q; }; } @@ -72,13 +36,4 @@ class AtomVecCharge : public AtomVec { /* ERROR/WARNING messages: -E: Per-processor system is too big - -The number of owned atoms plus ghost atoms on a single -processor must fit in 32-bit integer. - -E: Invalid atom type in Atoms section of data file - -Atom types must range from 1 to specified # of types. - */ diff --git a/src/atom_vec_ellipsoid.cpp b/src/atom_vec_ellipsoid.cpp index 5565b82a100e72825f18136d2249e709b5a35756..a0cded549f32241f7b8383bb12a63769426cf15b 100644 --- a/src/atom_vec_ellipsoid.cpp +++ b/src/atom_vec_ellipsoid.cpp @@ -19,8 +19,6 @@ #include #include "math_extra.h" #include "atom.h" -#include "comm.h" -#include "domain.h" #include "modify.h" #include "fix.h" #include "math_const.h" @@ -36,22 +34,38 @@ using namespace MathConst; AtomVecEllipsoid::AtomVecEllipsoid(LAMMPS *lmp) : AtomVec(lmp) { molecular = 0; + bonus_flag = 1; - comm_x_only = comm_f_only = 0; - size_forward = 7; - size_reverse = 6; - size_border = 15; - size_velocity = 6; - size_data_atom = 7; - size_data_vel = 7; + size_forward_bonus = 4; + size_border_bonus = 8; + size_restart_bonus_one = 8; size_data_bonus = 8; - xcol_data = 5; atom->ellipsoid_flag = 1; atom->rmass_flag = atom->angmom_flag = atom->torque_flag = 1; nlocal_bonus = nghost_bonus = nmax_bonus = 0; bonus = NULL; + + // strings with peratom variables to include in each AtomVec method + // strings cannot contain fields in corresponding AtomVec default strings + // order of fields in a string does not matter + // except: fields_data_atom & fields_data_vel must match data file + + fields_grow = (char *) "rmass angmom torque ellipsoid"; + fields_copy = (char *) "rmass angmom"; + fields_comm = (char *) ""; + fields_comm_vel = (char *) "angmom"; + fields_reverse = (char *) "torque"; + fields_border = (char *) "rmass"; + fields_border_vel = (char *) "rmass angmom"; + fields_exchange = (char *) "rmass angmom"; + fields_restart = (char *) "rmass angmom"; + fields_create = (char *) "rmass angmom ellipsoid"; + fields_data_atom = (char *) "id type ellipsoid rmass x"; + fields_data_vel = (char *) "id v angmom"; + + setup_fields(); } /* ---------------------------------------------------------------------- */ @@ -62,48 +76,15 @@ AtomVecEllipsoid::~AtomVecEllipsoid() } /* ---------------------------------------------------------------------- - grow atom arrays - n = 0 grows arrays by a chunk - n > 0 allocates arrays to size n -------------------------------------------------------------------------- */ - -void AtomVecEllipsoid::grow(int n) -{ - if (n == 0) grow_nmax(); - else nmax = n; - atom->nmax = nmax; - if (nmax < 0 || nmax > MAXSMALLINT) - error->one(FLERR,"Per-processor system is too big"); - - tag = memory->grow(atom->tag,nmax,"atom:tag"); - type = memory->grow(atom->type,nmax,"atom:type"); - mask = memory->grow(atom->mask,nmax,"atom:mask"); - image = memory->grow(atom->image,nmax,"atom:image"); - x = memory->grow(atom->x,nmax,3,"atom:x"); - v = memory->grow(atom->v,nmax,3,"atom:v"); - f = memory->grow(atom->f,nmax*comm->nthreads,3,"atom:f"); - - rmass = memory->grow(atom->rmass,nmax,"atom:rmass"); - angmom = memory->grow(atom->angmom,nmax,3,"atom:angmom"); - torque = memory->grow(atom->torque,nmax*comm->nthreads,3,"atom:torque"); - ellipsoid = memory->grow(atom->ellipsoid,nmax,"atom:ellipsoid"); - - if (atom->nextra_grow) - for (int iextra = 0; iextra < atom->nextra_grow; iextra++) - modify->fix[atom->extra_grow[iextra]]->grow_arrays(nmax); -} - -/* ---------------------------------------------------------------------- - reset local array ptrs + set local copies of all grow ptrs used by this class, except defaults + needed in replicate when 2 atom classes exist and it calls pack_restart() ------------------------------------------------------------------------- */ -void AtomVecEllipsoid::grow_reset() +void AtomVecEllipsoid::grow_pointers() { - tag = atom->tag; type = atom->type; - mask = atom->mask; image = atom->image; - x = atom->x; v = atom->v; f = atom->f; - rmass = atom->rmass; angmom = atom->angmom; torque = atom->torque; ellipsoid = atom->ellipsoid; + rmass = atom->rmass; + angmom = atom->angmom; } /* ---------------------------------------------------------------------- @@ -121,31 +102,15 @@ void AtomVecEllipsoid::grow_bonus() } /* ---------------------------------------------------------------------- - copy atom I info to atom J + copy atom I bonus info to atom J ------------------------------------------------------------------------- */ -void AtomVecEllipsoid::copy(int i, int j, int delflag) +void AtomVecEllipsoid::copy_bonus(int i, int j, int delflag) { - tag[j] = tag[i]; - type[j] = type[i]; - mask[j] = mask[i]; - image[j] = image[i]; - x[j][0] = x[i][0]; - x[j][1] = x[i][1]; - x[j][2] = x[i][2]; - v[j][0] = v[i][0]; - v[j][1] = v[i][1]; - v[j][2] = v[i][2]; - - rmass[j] = rmass[i]; - angmom[j][0] = angmom[i][0]; - angmom[j][1] = angmom[i][1]; - angmom[j][2] = angmom[i][2]; - // if deleting atom J via delflag and J has bonus data, then delete it if (delflag && ellipsoid[j] >= 0) { - copy_bonus(nlocal_bonus-1,ellipsoid[j]); + copy_bonus_all(nlocal_bonus-1,ellipsoid[j]); nlocal_bonus--; } @@ -154,10 +119,6 @@ void AtomVecEllipsoid::copy(int i, int j, int delflag) if (ellipsoid[i] >= 0 && i != j) bonus[ellipsoid[i]].ilocal = j; ellipsoid[j] = ellipsoid[i]; - - if (atom->nextra_grow) - for (int iextra = 0; iextra < atom->nextra_grow; iextra++) - modify->fix[atom->extra_grow[iextra]]->copy_arrays(i,j,delflag); } /* ---------------------------------------------------------------------- @@ -165,7 +126,7 @@ void AtomVecEllipsoid::copy(int i, int j, int delflag) also reset ellipsoid that points to I to now point to J ------------------------------------------------------------------------- */ -void AtomVecEllipsoid::copy_bonus(int i, int j) +void AtomVecEllipsoid::copy_bonus_all(int i, int j) { ellipsoid[bonus[i].ilocal] = j; memcpy(&bonus[j],&bonus[i],sizeof(Bonus)); @@ -179,191 +140,15 @@ void AtomVecEllipsoid::copy_bonus(int i, int j) void AtomVecEllipsoid::clear_bonus() { nghost_bonus = 0; -} - -/* ---------------------------------------------------------------------- - set shape values in bonus data for particle I - oriented aligned with xyz axes - this may create or delete entry in bonus data -------------------------------------------------------------------------- */ - -void AtomVecEllipsoid::set_shape(int i, - double shapex, double shapey, double shapez) -{ - if (ellipsoid[i] < 0) { - if (shapex == 0.0 && shapey == 0.0 && shapez == 0.0) return; - if (nlocal_bonus == nmax_bonus) grow_bonus(); - double *shape = bonus[nlocal_bonus].shape; - double *quat = bonus[nlocal_bonus].quat; - shape[0] = shapex; - shape[1] = shapey; - shape[2] = shapez; - quat[0] = 1.0; - quat[1] = 0.0; - quat[2] = 0.0; - quat[3] = 0.0; - bonus[nlocal_bonus].ilocal = i; - ellipsoid[i] = nlocal_bonus++; - } else if (shapex == 0.0 && shapey == 0.0 && shapez == 0.0) { - copy_bonus(nlocal_bonus-1,ellipsoid[i]); - nlocal_bonus--; - ellipsoid[i] = -1; - } else { - double *shape = bonus[ellipsoid[i]].shape; - shape[0] = shapex; - shape[1] = shapey; - shape[2] = shapez; - } -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecEllipsoid::pack_comm(int n, int *list, double *buf, - int pbc_flag, int *pbc) -{ - int i,j,m; - double dx,dy,dz; - double *quat; - - m = 0; - if (pbc_flag == 0) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = x[j][0]; - buf[m++] = x[j][1]; - buf[m++] = x[j][2]; - if (ellipsoid[j] >= 0) { - quat = bonus[ellipsoid[j]].quat; - buf[m++] = quat[0]; - buf[m++] = quat[1]; - buf[m++] = quat[2]; - buf[m++] = quat[3]; - } - } - } else { - if (domain->triclinic == 0) { - dx = pbc[0]*domain->xprd; - dy = pbc[1]*domain->yprd; - dz = pbc[2]*domain->zprd; - } else { - dx = pbc[0]*domain->xprd + pbc[5]*domain->xy + pbc[4]*domain->xz; - dy = pbc[1]*domain->yprd + pbc[3]*domain->yz; - dz = pbc[2]*domain->zprd; - } - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = x[j][0] + dx; - buf[m++] = x[j][1] + dy; - buf[m++] = x[j][2] + dz; - if (ellipsoid[j] >= 0) { - quat = bonus[ellipsoid[j]].quat; - buf[m++] = quat[0]; - buf[m++] = quat[1]; - buf[m++] = quat[2]; - buf[m++] = quat[3]; - } - } - } - return m; -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecEllipsoid::pack_comm_vel(int n, int *list, double *buf, - int pbc_flag, int *pbc) -{ - int i,j,m; - double dx,dy,dz,dvx,dvy,dvz; - double *quat; - m = 0; - if (pbc_flag == 0) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = x[j][0]; - buf[m++] = x[j][1]; - buf[m++] = x[j][2]; - if (ellipsoid[j] >= 0) { - quat = bonus[ellipsoid[j]].quat; - buf[m++] = quat[0]; - buf[m++] = quat[1]; - buf[m++] = quat[2]; - buf[m++] = quat[3]; - } - buf[m++] = v[j][0]; - buf[m++] = v[j][1]; - buf[m++] = v[j][2]; - buf[m++] = angmom[j][0]; - buf[m++] = angmom[j][1]; - buf[m++] = angmom[j][2]; - } - } else { - if (domain->triclinic == 0) { - dx = pbc[0]*domain->xprd; - dy = pbc[1]*domain->yprd; - dz = pbc[2]*domain->zprd; - } else { - dx = pbc[0]*domain->xprd + pbc[5]*domain->xy + pbc[4]*domain->xz; - dy = pbc[1]*domain->yprd + pbc[3]*domain->yz; - dz = pbc[2]*domain->zprd; - } - if (!deform_vremap) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = x[j][0] + dx; - buf[m++] = x[j][1] + dy; - buf[m++] = x[j][2] + dz; - if (ellipsoid[j] >= 0) { - quat = bonus[ellipsoid[j]].quat; - buf[m++] = quat[0]; - buf[m++] = quat[1]; - buf[m++] = quat[2]; - buf[m++] = quat[3]; - } - buf[m++] = v[j][0]; - buf[m++] = v[j][1]; - buf[m++] = v[j][2]; - buf[m++] = angmom[j][0]; - buf[m++] = angmom[j][1]; - buf[m++] = angmom[j][2]; - } - } else { - dvx = pbc[0]*h_rate[0] + pbc[5]*h_rate[5] + pbc[4]*h_rate[4]; - dvy = pbc[1]*h_rate[1] + pbc[3]*h_rate[3]; - dvz = pbc[2]*h_rate[2]; - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = x[j][0] + dx; - buf[m++] = x[j][1] + dy; - buf[m++] = x[j][2] + dz; - if (ellipsoid[j] >= 0) { - quat = bonus[ellipsoid[j]].quat; - buf[m++] = quat[0]; - buf[m++] = quat[1]; - buf[m++] = quat[2]; - buf[m++] = quat[3]; - } - if (mask[i] & deform_groupbit) { - buf[m++] = v[j][0] + dvx; - buf[m++] = v[j][1] + dvy; - buf[m++] = v[j][2] + dvz; - } else { - buf[m++] = v[j][0]; - buf[m++] = v[j][1]; - buf[m++] = v[j][2]; - } - buf[m++] = angmom[j][0]; - buf[m++] = angmom[j][1]; - buf[m++] = angmom[j][2]; - } - } - } - return m; + if (atom->nextra_grow) + for (int iextra = 0; iextra < atom->nextra_grow; iextra++) + modify->fix[atom->extra_grow[iextra]]->clear_bonus(); } /* ---------------------------------------------------------------------- */ -int AtomVecEllipsoid::pack_comm_hybrid(int n, int *list, double *buf) +int AtomVecEllipsoid::pack_comm_bonus(int n, int *list, double *buf) { int i,j,m; double *quat; @@ -379,64 +164,13 @@ int AtomVecEllipsoid::pack_comm_hybrid(int n, int *list, double *buf) buf[m++] = quat[3]; } } - return m; -} - -/* ---------------------------------------------------------------------- */ - -void AtomVecEllipsoid::unpack_comm(int n, int first, double *buf) -{ - int i,m,last; - double *quat; - - m = 0; - last = first + n; - for (i = first; i < last; i++) { - x[i][0] = buf[m++]; - x[i][1] = buf[m++]; - x[i][2] = buf[m++]; - if (ellipsoid[i] >= 0) { - quat = bonus[ellipsoid[i]].quat; - quat[0] = buf[m++]; - quat[1] = buf[m++]; - quat[2] = buf[m++]; - quat[3] = buf[m++]; - } - } -} - -/* ---------------------------------------------------------------------- */ - -void AtomVecEllipsoid::unpack_comm_vel(int n, int first, double *buf) -{ - int i,m,last; - double *quat; - m = 0; - last = first + n; - for (i = first; i < last; i++) { - x[i][0] = buf[m++]; - x[i][1] = buf[m++]; - x[i][2] = buf[m++]; - if (ellipsoid[i] >= 0) { - quat = bonus[ellipsoid[i]].quat; - quat[0] = buf[m++]; - quat[1] = buf[m++]; - quat[2] = buf[m++]; - quat[3] = buf[m++]; - } - v[i][0] = buf[m++]; - v[i][1] = buf[m++]; - v[i][2] = buf[m++]; - angmom[i][0] = buf[m++]; - angmom[i][1] = buf[m++]; - angmom[i][2] = buf[m++]; - } + return m; } /* ---------------------------------------------------------------------- */ -int AtomVecEllipsoid::unpack_comm_hybrid(int n, int first, double *buf) +void AtomVecEllipsoid::unpack_comm_bonus(int n, int first, double *buf) { int i,m,last; double *quat; @@ -452,286 +186,11 @@ int AtomVecEllipsoid::unpack_comm_hybrid(int n, int first, double *buf) quat[3] = buf[m++]; } } - return m; -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecEllipsoid::pack_reverse(int n, int first, double *buf) -{ - int i,m,last; - - m = 0; - last = first + n; - for (i = first; i < last; i++) { - buf[m++] = f[i][0]; - buf[m++] = f[i][1]; - buf[m++] = f[i][2]; - buf[m++] = torque[i][0]; - buf[m++] = torque[i][1]; - buf[m++] = torque[i][2]; - } - return m; -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecEllipsoid::pack_reverse_hybrid(int n, int first, double *buf) -{ - int i,m,last; - - m = 0; - last = first + n; - for (i = first; i < last; i++) { - buf[m++] = torque[i][0]; - buf[m++] = torque[i][1]; - buf[m++] = torque[i][2]; - } - return m; -} - -/* ---------------------------------------------------------------------- */ - -void AtomVecEllipsoid::unpack_reverse(int n, int *list, double *buf) -{ - int i,j,m; - - m = 0; - for (i = 0; i < n; i++) { - j = list[i]; - f[j][0] += buf[m++]; - f[j][1] += buf[m++]; - f[j][2] += buf[m++]; - torque[j][0] += buf[m++]; - torque[j][1] += buf[m++]; - torque[j][2] += buf[m++]; - } -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecEllipsoid::unpack_reverse_hybrid(int n, int *list, double *buf) -{ - int i,j,m; - - m = 0; - for (i = 0; i < n; i++) { - j = list[i]; - torque[j][0] += buf[m++]; - torque[j][1] += buf[m++]; - torque[j][2] += buf[m++]; - } - return m; -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecEllipsoid::pack_border(int n, int *list, double *buf, - int pbc_flag, int *pbc) -{ - int i,j,m; - double dx,dy,dz; - double *shape,*quat; - - m = 0; - if (pbc_flag == 0) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = x[j][0]; - buf[m++] = x[j][1]; - buf[m++] = x[j][2]; - buf[m++] = ubuf(tag[j]).d; - buf[m++] = ubuf(type[j]).d; - buf[m++] = ubuf(mask[j]).d; - buf[m++] = rmass[j]; - if (ellipsoid[j] < 0) buf[m++] = ubuf(0).d; - else { - buf[m++] = ubuf(1).d; - shape = bonus[ellipsoid[j]].shape; - quat = bonus[ellipsoid[j]].quat; - buf[m++] = shape[0]; - buf[m++] = shape[1]; - buf[m++] = shape[2]; - buf[m++] = quat[0]; - buf[m++] = quat[1]; - buf[m++] = quat[2]; - buf[m++] = quat[3]; - } - } - } else { - if (domain->triclinic == 0) { - dx = pbc[0]*domain->xprd; - dy = pbc[1]*domain->yprd; - dz = pbc[2]*domain->zprd; - } else { - dx = pbc[0]; - dy = pbc[1]; - dz = pbc[2]; - } - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = x[j][0] + dx; - buf[m++] = x[j][1] + dy; - buf[m++] = x[j][2] + dz; - buf[m++] = ubuf(tag[j]).d; - buf[m++] = ubuf(type[j]).d; - buf[m++] = ubuf(mask[j]).d; - buf[m++] = rmass[j]; - if (ellipsoid[j] < 0) buf[m++] = ubuf(0).d; - else { - buf[m++] = ubuf(1).d; - shape = bonus[ellipsoid[j]].shape; - quat = bonus[ellipsoid[j]].quat; - buf[m++] = shape[0]; - buf[m++] = shape[1]; - buf[m++] = shape[2]; - buf[m++] = quat[0]; - buf[m++] = quat[1]; - buf[m++] = quat[2]; - buf[m++] = quat[3]; - } - } - } - - if (atom->nextra_border) - for (int iextra = 0; iextra < atom->nextra_border; iextra++) - m += modify->fix[atom->extra_border[iextra]]->pack_border(n,list,&buf[m]); - - return m; -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecEllipsoid::pack_border_vel(int n, int *list, double *buf, - int pbc_flag, int *pbc) -{ - int i,j,m; - double dx,dy,dz,dvx,dvy,dvz; - double *shape,*quat; - - m = 0; - if (pbc_flag == 0) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = x[j][0]; - buf[m++] = x[j][1]; - buf[m++] = x[j][2]; - buf[m++] = ubuf(tag[j]).d; - buf[m++] = ubuf(type[j]).d; - buf[m++] = ubuf(mask[j]).d; - buf[m++] = rmass[j]; - if (ellipsoid[j] < 0) buf[m++] = ubuf(0).d; - else { - buf[m++] = ubuf(1).d; - shape = bonus[ellipsoid[j]].shape; - quat = bonus[ellipsoid[j]].quat; - buf[m++] = shape[0]; - buf[m++] = shape[1]; - buf[m++] = shape[2]; - buf[m++] = quat[0]; - buf[m++] = quat[1]; - buf[m++] = quat[2]; - buf[m++] = quat[3]; - } - buf[m++] = v[j][0]; - buf[m++] = v[j][1]; - buf[m++] = v[j][2]; - buf[m++] = angmom[j][0]; - buf[m++] = angmom[j][1]; - buf[m++] = angmom[j][2]; - } - } else { - if (domain->triclinic == 0) { - dx = pbc[0]*domain->xprd; - dy = pbc[1]*domain->yprd; - dz = pbc[2]*domain->zprd; - } else { - dx = pbc[0]; - dy = pbc[1]; - dz = pbc[2]; - } - if (!deform_vremap) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = x[j][0] + dx; - buf[m++] = x[j][1] + dy; - buf[m++] = x[j][2] + dz; - buf[m++] = ubuf(tag[j]).d; - buf[m++] = ubuf(type[j]).d; - buf[m++] = ubuf(mask[j]).d; - buf[m++] = rmass[j]; - if (ellipsoid[j] < 0) buf[m++] = ubuf(0).d; - else { - buf[m++] = ubuf(1).d; - shape = bonus[ellipsoid[j]].shape; - quat = bonus[ellipsoid[j]].quat; - buf[m++] = shape[0]; - buf[m++] = shape[1]; - buf[m++] = shape[2]; - buf[m++] = quat[0]; - buf[m++] = quat[1]; - buf[m++] = quat[2]; - buf[m++] = quat[3]; - } - buf[m++] = v[j][0]; - buf[m++] = v[j][1]; - buf[m++] = v[j][2]; - buf[m++] = angmom[j][0]; - buf[m++] = angmom[j][1]; - buf[m++] = angmom[j][2]; - } - } else { - dvx = pbc[0]*h_rate[0] + pbc[5]*h_rate[5] + pbc[4]*h_rate[4]; - dvy = pbc[1]*h_rate[1] + pbc[3]*h_rate[3]; - dvz = pbc[2]*h_rate[2]; - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = x[j][0] + dx; - buf[m++] = x[j][1] + dy; - buf[m++] = x[j][2] + dz; - buf[m++] = ubuf(tag[j]).d; - buf[m++] = ubuf(type[j]).d; - buf[m++] = ubuf(mask[j]).d; - buf[m++] = rmass[j]; - if (ellipsoid[j] < 0) buf[m++] = ubuf(0).d; - else { - buf[m++] = ubuf(1).d; - shape = bonus[ellipsoid[j]].shape; - quat = bonus[ellipsoid[j]].quat; - buf[m++] = shape[0]; - buf[m++] = shape[1]; - buf[m++] = shape[2]; - buf[m++] = quat[0]; - buf[m++] = quat[1]; - buf[m++] = quat[2]; - buf[m++] = quat[3]; - } - if (mask[i] & deform_groupbit) { - buf[m++] = v[j][0] + dvx; - buf[m++] = v[j][1] + dvy; - buf[m++] = v[j][2] + dvz; - } else { - buf[m++] = v[j][0]; - buf[m++] = v[j][1]; - buf[m++] = v[j][2]; - } - buf[m++] = angmom[j][0]; - buf[m++] = angmom[j][1]; - buf[m++] = angmom[j][2]; - } - } - } - - if (atom->nextra_border) - for (int iextra = 0; iextra < atom->nextra_border; iextra++) - m += modify->fix[atom->extra_border[iextra]]->pack_border(n,list,&buf[m]); - - return m; } /* ---------------------------------------------------------------------- */ -int AtomVecEllipsoid::pack_border_hybrid(int n, int *list, double *buf) +int AtomVecEllipsoid::pack_border_bonus(int n, int *list, double *buf) { int i,j,m; double *shape,*quat; @@ -739,7 +198,6 @@ int AtomVecEllipsoid::pack_border_hybrid(int n, int *list, double *buf) m = 0; for (i = 0; i < n; i++) { j = list[i]; - buf[m++] = rmass[j]; if (ellipsoid[j] < 0) buf[m++] = ubuf(0).d; else { buf[m++] = ubuf(1).d; @@ -754,56 +212,13 @@ int AtomVecEllipsoid::pack_border_hybrid(int n, int *list, double *buf) buf[m++] = quat[3]; } } - return m; -} - -/* ---------------------------------------------------------------------- */ - -void AtomVecEllipsoid::unpack_border(int n, int first, double *buf) -{ - int i,j,m,last; - double *shape,*quat; - - m = 0; - last = first + n; - for (i = first; i < last; i++) { - if (i == nmax) grow(0); - x[i][0] = buf[m++]; - x[i][1] = buf[m++]; - x[i][2] = buf[m++]; - tag[i] = (tagint) ubuf(buf[m++]).i; - type[i] = (int) ubuf(buf[m++]).i; - mask[i] = (int) ubuf(buf[m++]).i; - rmass[i] = buf[m++]; - ellipsoid[i] = (int) ubuf(buf[m++]).i; - if (ellipsoid[i] == 0) ellipsoid[i] = -1; - else { - j = nlocal_bonus + nghost_bonus; - if (j == nmax_bonus) grow_bonus(); - shape = bonus[j].shape; - quat = bonus[j].quat; - shape[0] = buf[m++]; - shape[1] = buf[m++]; - shape[2] = buf[m++]; - quat[0] = buf[m++]; - quat[1] = buf[m++]; - quat[2] = buf[m++]; - quat[3] = buf[m++]; - bonus[j].ilocal = i; - ellipsoid[i] = j; - nghost_bonus++; - } - } - if (atom->nextra_border) - for (int iextra = 0; iextra < atom->nextra_border; iextra++) - m += modify->fix[atom->extra_border[iextra]]-> - unpack_border(n,first,&buf[m]); + return m; } /* ---------------------------------------------------------------------- */ -void AtomVecEllipsoid::unpack_border_vel(int n, int first, double *buf) +int AtomVecEllipsoid::unpack_border_bonus(int n, int first, double *buf) { int i,j,m,last; double *shape,*quat; @@ -811,14 +226,6 @@ void AtomVecEllipsoid::unpack_border_vel(int n, int first, double *buf) m = 0; last = first + n; for (i = first; i < last; i++) { - if (i == nmax) grow(0); - x[i][0] = buf[m++]; - x[i][1] = buf[m++]; - x[i][2] = buf[m++]; - tag[i] = (tagint) ubuf(buf[m++]).i; - type[i] = (int) ubuf(buf[m++]).i; - mask[i] = (int) ubuf(buf[m++]).i; - rmass[i] = buf[m++]; ellipsoid[i] = (int) ubuf(buf[m++]).i; if (ellipsoid[i] == 0) ellipsoid[i] = -1; else { @@ -837,50 +244,8 @@ void AtomVecEllipsoid::unpack_border_vel(int n, int first, double *buf) ellipsoid[i] = j; nghost_bonus++; } - v[i][0] = buf[m++]; - v[i][1] = buf[m++]; - v[i][2] = buf[m++]; - angmom[i][0] = buf[m++]; - angmom[i][1] = buf[m++]; - angmom[i][2] = buf[m++]; } - if (atom->nextra_border) - for (int iextra = 0; iextra < atom->nextra_border; iextra++) - m += modify->fix[atom->extra_border[iextra]]-> - unpack_border(n,first,&buf[m]); -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecEllipsoid::unpack_border_hybrid(int n, int first, double *buf) -{ - int i,j,m,last; - double *shape,*quat; - - m = 0; - last = first + n; - for (i = first; i < last; i++) { - rmass[i] = buf[m++]; - ellipsoid[i] = (int) ubuf(buf[m++]).i; - if (ellipsoid[i] == 0) ellipsoid[i] = -1; - else { - j = nlocal_bonus + nghost_bonus; - if (j == nmax_bonus) grow_bonus(); - shape = bonus[j].shape; - quat = bonus[j].quat; - shape[0] = buf[m++]; - shape[1] = buf[m++]; - shape[2] = buf[m++]; - quat[0] = buf[m++]; - quat[1] = buf[m++]; - quat[2] = buf[m++]; - quat[3] = buf[m++]; - bonus[j].ilocal = i; - ellipsoid[i] = j; - nghost_bonus++; - } - } return m; } @@ -889,24 +254,9 @@ int AtomVecEllipsoid::unpack_border_hybrid(int n, int first, double *buf) xyz must be 1st 3 values, so comm::exchange() can test on them ------------------------------------------------------------------------- */ -int AtomVecEllipsoid::pack_exchange(int i, double *buf) +int AtomVecEllipsoid::pack_exchange_bonus(int i, double *buf) { - int m = 1; - buf[m++] = x[i][0]; - buf[m++] = x[i][1]; - buf[m++] = x[i][2]; - buf[m++] = v[i][0]; - buf[m++] = v[i][1]; - buf[m++] = v[i][2]; - buf[m++] = ubuf(tag[i]).d; - buf[m++] = ubuf(type[i]).d; - buf[m++] = ubuf(mask[i]).d; - buf[m++] = ubuf(image[i]).d; - - buf[m++] = rmass[i]; - buf[m++] = angmom[i][0]; - buf[m++] = angmom[i][1]; - buf[m++] = angmom[i][2]; + int m = 0; if (ellipsoid[i] < 0) buf[m++] = ubuf(0).d; else { @@ -923,40 +273,17 @@ int AtomVecEllipsoid::pack_exchange(int i, double *buf) buf[m++] = quat[3]; } - if (atom->nextra_grow) - for (int iextra = 0; iextra < atom->nextra_grow; iextra++) - m += modify->fix[atom->extra_grow[iextra]]->pack_exchange(i,&buf[m]); - - buf[0] = m; return m; } /* ---------------------------------------------------------------------- */ -int AtomVecEllipsoid::unpack_exchange(double *buf) +int AtomVecEllipsoid::unpack_exchange_bonus(int ilocal, double *buf) { - int nlocal = atom->nlocal; - if (nlocal == nmax) grow(0); - - int m = 1; - x[nlocal][0] = buf[m++]; - x[nlocal][1] = buf[m++]; - x[nlocal][2] = buf[m++]; - v[nlocal][0] = buf[m++]; - v[nlocal][1] = buf[m++]; - v[nlocal][2] = buf[m++]; - tag[nlocal] = (tagint) ubuf(buf[m++]).i; - type[nlocal] = (int) ubuf(buf[m++]).i; - mask[nlocal] = (int) ubuf(buf[m++]).i; - image[nlocal] = (imageint) ubuf(buf[m++]).i; - - rmass[nlocal] = buf[m++]; - angmom[nlocal][0] = buf[m++]; - angmom[nlocal][1] = buf[m++]; - angmom[nlocal][2] = buf[m++]; - - ellipsoid[nlocal] = (int) ubuf(buf[m++]).i; - if (ellipsoid[nlocal] == 0) ellipsoid[nlocal] = -1; + int m = 0; + + ellipsoid[ilocal] = (int) ubuf(buf[m++]).i; + if (ellipsoid[ilocal] == 0) ellipsoid[ilocal] = -1; else { if (nlocal_bonus == nmax_bonus) grow_bonus(); double *shape = bonus[nlocal_bonus].shape; @@ -968,16 +295,10 @@ int AtomVecEllipsoid::unpack_exchange(double *buf) quat[1] = buf[m++]; quat[2] = buf[m++]; quat[3] = buf[m++]; - bonus[nlocal_bonus].ilocal = nlocal; - ellipsoid[nlocal] = nlocal_bonus++; + bonus[nlocal_bonus].ilocal = ilocal; + ellipsoid[ilocal] = nlocal_bonus++; } - if (atom->nextra_grow) - for (int iextra = 0; iextra < atom->nextra_grow; iextra++) - m += modify->fix[atom->extra_grow[iextra]]-> - unpack_exchange(nlocal,&buf[m]); - - atom->nlocal++; return m; } @@ -986,20 +307,16 @@ int AtomVecEllipsoid::unpack_exchange(double *buf) include extra data stored by fixes ------------------------------------------------------------------------- */ -int AtomVecEllipsoid::size_restart() +int AtomVecEllipsoid::size_restart_bonus() { int i; int n = 0; int nlocal = atom->nlocal; - for (i = 0; i < nlocal; i++) - if (ellipsoid[i] >= 0) n += 23; - else n += 16; - - if (atom->nextra_restart) - for (int iextra = 0; iextra < atom->nextra_restart; iextra++) - for (i = 0; i < nlocal; i++) - n += modify->fix[atom->extra_restart[iextra]]->size_restart(i); + for (i = 0; i < nlocal; i++) { + if (ellipsoid[i] >= 0) n += size_restart_bonus_one; + else n++; + } return n; } @@ -1010,24 +327,9 @@ int AtomVecEllipsoid::size_restart() molecular types may be negative, but write as positive ------------------------------------------------------------------------- */ -int AtomVecEllipsoid::pack_restart(int i, double *buf) +int AtomVecEllipsoid::pack_restart_bonus(int i, double *buf) { - int m = 1; - buf[m++] = x[i][0]; - buf[m++] = x[i][1]; - buf[m++] = x[i][2]; - buf[m++] = ubuf(tag[i]).d; - buf[m++] = ubuf(type[i]).d; - buf[m++] = ubuf(mask[i]).d; - buf[m++] = ubuf(image[i]).d; - buf[m++] = v[i][0]; - buf[m++] = v[i][1]; - buf[m++] = v[i][2]; - - buf[m++] = rmass[i]; - buf[m++] = angmom[i][0]; - buf[m++] = angmom[i][1]; - buf[m++] = angmom[i][2]; + int m = 0; if (ellipsoid[i] < 0) buf[m++] = ubuf(0).d; else { @@ -1042,11 +344,6 @@ int AtomVecEllipsoid::pack_restart(int i, double *buf) buf[m++] = bonus[j].quat[3]; } - if (atom->nextra_restart) - for (int iextra = 0; iextra < atom->nextra_restart; iextra++) - m += modify->fix[atom->extra_restart[iextra]]->pack_restart(i,&buf[m]); - - buf[0] = m; return m; } @@ -1054,34 +351,12 @@ int AtomVecEllipsoid::pack_restart(int i, double *buf) unpack data for one atom from restart file including bonus data ------------------------------------------------------------------------- */ -int AtomVecEllipsoid::unpack_restart(double *buf) +int AtomVecEllipsoid::unpack_restart_bonus(int ilocal, double *buf) { - int nlocal = atom->nlocal; - if (nlocal == nmax) { - grow(0); - if (atom->nextra_store) - memory->grow(atom->extra,nmax,atom->nextra_store,"atom:extra"); - } + int m = 0; - int m = 1; - x[nlocal][0] = buf[m++]; - x[nlocal][1] = buf[m++]; - x[nlocal][2] = buf[m++]; - tag[nlocal] = (tagint) ubuf(buf[m++]).i; - type[nlocal] = (int) ubuf(buf[m++]).i; - mask[nlocal] = (int) ubuf(buf[m++]).i; - image[nlocal] = (imageint) ubuf(buf[m++]).i; - v[nlocal][0] = buf[m++]; - v[nlocal][1] = buf[m++]; - v[nlocal][2] = buf[m++]; - - rmass[nlocal] = buf[m++]; - angmom[nlocal][0] = buf[m++]; - angmom[nlocal][1] = buf[m++]; - angmom[nlocal][2] = buf[m++]; - - ellipsoid[nlocal] = (int) ubuf(buf[m++]).i; - if (ellipsoid[nlocal] == 0) ellipsoid[nlocal] = -1; + ellipsoid[ilocal] = (int) ubuf(buf[m++]).i; + if (ellipsoid[ilocal] == 0) ellipsoid[ilocal] = -1; else { if (nlocal_bonus == nmax_bonus) grow_bonus(); double *shape = bonus[nlocal_bonus].shape; @@ -1093,112 +368,13 @@ int AtomVecEllipsoid::unpack_restart(double *buf) quat[1] = buf[m++]; quat[2] = buf[m++]; quat[3] = buf[m++]; - bonus[nlocal_bonus].ilocal = nlocal; - ellipsoid[nlocal] = nlocal_bonus++; - } - - double **extra = atom->extra; - if (atom->nextra_store) { - int size = static_cast (buf[0]) - m; - for (int i = 0; i < size; i++) extra[nlocal][i] = buf[m++]; + bonus[nlocal_bonus].ilocal = ilocal; + ellipsoid[ilocal] = nlocal_bonus++; } - atom->nlocal++; return m; } -/* ---------------------------------------------------------------------- - create one atom of itype at coord - set other values to defaults -------------------------------------------------------------------------- */ - -void AtomVecEllipsoid::create_atom(int itype, double *coord) -{ - int nlocal = atom->nlocal; - if (nlocal == nmax) grow(0); - - tag[nlocal] = 0; - type[nlocal] = itype; - x[nlocal][0] = coord[0]; - x[nlocal][1] = coord[1]; - x[nlocal][2] = coord[2]; - mask[nlocal] = 1; - image[nlocal] = ((imageint) IMGMAX << IMG2BITS) | - ((imageint) IMGMAX << IMGBITS) | IMGMAX; - v[nlocal][0] = 0.0; - v[nlocal][1] = 0.0; - v[nlocal][2] = 0.0; - - rmass[nlocal] = 1.0; - angmom[nlocal][0] = 0.0; - angmom[nlocal][1] = 0.0; - angmom[nlocal][2] = 0.0; - ellipsoid[nlocal] = -1; - - atom->nlocal++; -} - -/* ---------------------------------------------------------------------- - unpack one line from Atoms section of data file - initialize other atom quantities -------------------------------------------------------------------------- */ - -void AtomVecEllipsoid::data_atom(double *coord, imageint imagetmp, - char **values) -{ - int nlocal = atom->nlocal; - if (nlocal == nmax) grow(0); - - tag[nlocal] = utils::tnumeric(FLERR,values[0],true,lmp); - type[nlocal] = utils::inumeric(FLERR,values[1],true,lmp); - if (type[nlocal] <= 0 || type[nlocal] > atom->ntypes) - error->one(FLERR,"Invalid atom type in Atoms section of data file"); - - ellipsoid[nlocal] = utils::inumeric(FLERR,values[2],true,lmp); - if (ellipsoid[nlocal] == 0) ellipsoid[nlocal] = -1; - else if (ellipsoid[nlocal] == 1) ellipsoid[nlocal] = 0; - else error->one(FLERR,"Invalid ellipsoidflag in Atoms section of data file"); - - rmass[nlocal] = utils::numeric(FLERR,values[3],true,lmp); - if (rmass[nlocal] <= 0.0) - error->one(FLERR,"Invalid density in Atoms section of data file"); - - x[nlocal][0] = coord[0]; - x[nlocal][1] = coord[1]; - x[nlocal][2] = coord[2]; - - image[nlocal] = imagetmp; - - mask[nlocal] = 1; - v[nlocal][0] = 0.0; - v[nlocal][1] = 0.0; - v[nlocal][2] = 0.0; - angmom[nlocal][0] = 0.0; - angmom[nlocal][1] = 0.0; - angmom[nlocal][2] = 0.0; - - atom->nlocal++; -} - -/* ---------------------------------------------------------------------- - unpack hybrid quantities from one line in Atoms section of data file - initialize other atom quantities for this sub-style -------------------------------------------------------------------------- */ - -int AtomVecEllipsoid::data_atom_hybrid(int nlocal, char **values) -{ - ellipsoid[nlocal] = utils::inumeric(FLERR,values[0],true,lmp); - if (ellipsoid[nlocal] == 0) ellipsoid[nlocal] = -1; - else if (ellipsoid[nlocal] == 1) ellipsoid[nlocal] = 0; - else error->one(FLERR,"Invalid atom type in Atoms section of data file"); - - rmass[nlocal] = utils::numeric(FLERR,values[1],true,lmp); - if (rmass[nlocal] <= 0.0) - error->one(FLERR,"Invalid density in Atoms section of data file"); - - return 2; -} - /* ---------------------------------------------------------------------- unpack one line from Ellipsoids section of data file ------------------------------------------------------------------------- */ @@ -1234,177 +410,108 @@ void AtomVecEllipsoid::data_atom_bonus(int m, char **values) } /* ---------------------------------------------------------------------- - unpack one line from Velocities section of data file + return # of bytes of allocated bonus memory ------------------------------------------------------------------------- */ -void AtomVecEllipsoid::data_vel(int m, char **values) +bigint AtomVecEllipsoid::memory_usage_bonus() { - v[m][0] = utils::numeric(FLERR,values[0],true,lmp); - v[m][1] = utils::numeric(FLERR,values[1],true,lmp); - v[m][2] = utils::numeric(FLERR,values[2],true,lmp); - angmom[m][0] = utils::numeric(FLERR,values[3],true,lmp); - angmom[m][1] = utils::numeric(FLERR,values[4],true,lmp); - angmom[m][2] = utils::numeric(FLERR,values[5],true,lmp); + bigint bytes = 0; + bytes += nmax_bonus*sizeof(Bonus); + return bytes; } /* ---------------------------------------------------------------------- - unpack hybrid quantities from one line in Velocities section of data file + initialize non-zero atom quantities ------------------------------------------------------------------------- */ -int AtomVecEllipsoid::data_vel_hybrid(int m, char **values) +void AtomVecEllipsoid::create_atom_post(int ilocal) { - angmom[m][0] = utils::numeric(FLERR,values[0],true,lmp); - angmom[m][1] = utils::numeric(FLERR,values[1],true,lmp); - angmom[m][2] = utils::numeric(FLERR,values[2],true,lmp); - return 3; + rmass[ilocal] = 1.0; + ellipsoid[ilocal] = -1; } /* ---------------------------------------------------------------------- - pack atom info for data file including 3 image flags + modify what AtomVec::data_atom() just unpacked + or initialize other atom quantities ------------------------------------------------------------------------- */ -void AtomVecEllipsoid::pack_data(double **buf) +void AtomVecEllipsoid::data_atom_post(int ilocal) { - double *shape; - - int nlocal = atom->nlocal; - for (int i = 0; i < nlocal; i++) { - buf[i][0] = ubuf(tag[i]).d; - buf[i][1] = ubuf(type[i]).d; - if (ellipsoid[i] < 0) buf[i][2] = ubuf(0).d; - else buf[i][2] = ubuf(1).d; - if (ellipsoid[i] < 0) buf[i][3] = rmass[i]; - else { - shape = bonus[ellipsoid[i]].shape; - buf[i][3] = rmass[i] / (4.0*MY_PI/3.0 * shape[0]*shape[1]*shape[2]); - } - buf[i][4] = x[i][0]; - buf[i][5] = x[i][1]; - buf[i][6] = x[i][2]; - buf[i][7] = ubuf((image[i] & IMGMASK) - IMGMAX).d; - buf[i][8] = ubuf((image[i] >> IMGBITS & IMGMASK) - IMGMAX).d; - buf[i][9] = ubuf((image[i] >> IMG2BITS) - IMGMAX).d; - } -} + ellipsoid_flag = ellipsoid[ilocal]; + if (ellipsoid_flag == 0) ellipsoid_flag = -1; + else if (ellipsoid_flag == 1) ellipsoid_flag = 0; + else error->one(FLERR,"Invalid ellipsoid flag in Atoms section of data file"); + ellipsoid[ilocal] = ellipsoid_flag; -/* ---------------------------------------------------------------------- - pack hybrid atom info for data file -------------------------------------------------------------------------- */ + if (rmass[ilocal] <= 0.0) + error->one(FLERR,"Invalid density in Atoms section of data file"); -int AtomVecEllipsoid::pack_data_hybrid(int i, double *buf) -{ - if (ellipsoid[i] < 0) buf[0] = ubuf(0).d; - else buf[0] = ubuf(1).d; - if (ellipsoid[i] < 0) buf[1] = rmass[i]; - else { - double *shape = bonus[ellipsoid[i]].shape; - buf[1] = rmass[i] / (4.0*MY_PI/3.0 * shape[0]*shape[1]*shape[2]); - } - return 2; + angmom[ilocal][0] = 0.0; + angmom[ilocal][1] = 0.0; + angmom[ilocal][2] = 0.0; } /* ---------------------------------------------------------------------- - write atom info to data file including 3 image flags + modify values for AtomVec::pack_data() to pack ------------------------------------------------------------------------- */ -void AtomVecEllipsoid::write_data(FILE *fp, int n, double **buf) +void AtomVecEllipsoid::pack_data_pre(int ilocal) { - for (int i = 0; i < n; i++) - fprintf(fp,TAGINT_FORMAT - " %d %d %-1.16e %-1.16e %-1.16e %-1.16e %d %d %d\n", - (tagint) ubuf(buf[i][0]).i,(int) ubuf(buf[i][1]).i, - (int) ubuf(buf[i][2]).i, - buf[i][3],buf[i][4],buf[i][5],buf[i][6], - (int) ubuf(buf[i][7]).i,(int) ubuf(buf[i][8]).i, - (int) ubuf(buf[i][9]).i); -} - -/* ---------------------------------------------------------------------- - write hybrid atom info to data file -------------------------------------------------------------------------- */ + double *shape; -int AtomVecEllipsoid::write_data_hybrid(FILE *fp, double *buf) -{ - fprintf(fp," %d %-1.16e",(int) ubuf(buf[0]).i,buf[1]); - return 2; -} + ellipsoid_flag = atom->ellipsoid[ilocal]; + rmass_one = atom->rmass[ilocal]; -/* ---------------------------------------------------------------------- - pack velocity info for data file -------------------------------------------------------------------------- */ + if (ellipsoid_flag < 0) ellipsoid[ilocal] = 0; + else ellipsoid[ilocal] = 1; -void AtomVecEllipsoid::pack_vel(double **buf) -{ - int nlocal = atom->nlocal; - for (int i = 0; i < nlocal; i++) { - buf[i][0] = ubuf(tag[i]).d; - buf[i][1] = v[i][0]; - buf[i][2] = v[i][1]; - buf[i][3] = v[i][2]; - buf[i][4] = angmom[i][0]; - buf[i][5] = angmom[i][1]; - buf[i][6] = angmom[i][2]; + if (ellipsoid_flag >= 0) { + shape = bonus[ellipsoid_flag].shape; + rmass[ilocal] /= 4.0*MY_PI/3.0 * shape[0]*shape[1]*shape[2]; } } /* ---------------------------------------------------------------------- - pack hybrid velocity info for data file -------------------------------------------------------------------------- */ - -int AtomVecEllipsoid::pack_vel_hybrid(int i, double *buf) -{ - buf[0] = angmom[i][0]; - buf[1] = angmom[i][1]; - buf[2] = angmom[i][2]; - return 3; -} - -/* ---------------------------------------------------------------------- - write velocity info to data file -------------------------------------------------------------------------- */ - -void AtomVecEllipsoid::write_vel(FILE *fp, int n, double **buf) -{ - for (int i = 0; i < n; i++) - fprintf(fp,TAGINT_FORMAT - " %-1.16e %-1.16e %-1.16e %-1.16e %-1.16e %-1.16e\n", - (tagint) ubuf(buf[i][0]).i,buf[i][1],buf[i][2],buf[i][3], - buf[i][4],buf[i][5],buf[i][6]); -} - -/* ---------------------------------------------------------------------- - write hybrid velocity info to data file + unmodify values packed by AtomVec::pack_data() ------------------------------------------------------------------------- */ -int AtomVecEllipsoid::write_vel_hybrid(FILE *fp, double *buf) +void AtomVecEllipsoid::pack_data_post(int ilocal) { - fprintf(fp," %-1.16e %-1.16e %-1.16e",buf[0],buf[1],buf[2]); - return 3; + ellipsoid[ilocal] = ellipsoid_flag; + rmass[ilocal] = rmass_one; } /* ---------------------------------------------------------------------- - return # of bytes of allocated memory + set shape values in bonus data for particle I + oriented aligned with xyz axes + this may create or delete entry in bonus data ------------------------------------------------------------------------- */ -bigint AtomVecEllipsoid::memory_usage() +void AtomVecEllipsoid:: +set_shape(int i, double shapex, double shapey, double shapez) { - bigint bytes = 0; - - if (atom->memcheck("tag")) bytes += memory->usage(tag,nmax); - if (atom->memcheck("type")) bytes += memory->usage(type,nmax); - if (atom->memcheck("mask")) bytes += memory->usage(mask,nmax); - if (atom->memcheck("image")) bytes += memory->usage(image,nmax); - if (atom->memcheck("x")) bytes += memory->usage(x,nmax,3); - if (atom->memcheck("v")) bytes += memory->usage(v,nmax,3); - if (atom->memcheck("f")) bytes += memory->usage(f,nmax*comm->nthreads,3); - - if (atom->memcheck("rmass")) bytes += memory->usage(rmass,nmax); - if (atom->memcheck("angmom")) bytes += memory->usage(angmom,nmax,3); - if (atom->memcheck("torque")) - bytes += memory->usage(torque,nmax*comm->nthreads,3); - if (atom->memcheck("ellipsoid")) bytes += memory->usage(ellipsoid,nmax); - - bytes += nmax_bonus*sizeof(Bonus); - - return bytes; + if (ellipsoid[i] < 0) { + if (shapex == 0.0 && shapey == 0.0 && shapez == 0.0) return; + if (nlocal_bonus == nmax_bonus) grow_bonus(); + double *shape = bonus[nlocal_bonus].shape; + double *quat = bonus[nlocal_bonus].quat; + shape[0] = shapex; + shape[1] = shapey; + shape[2] = shapez; + quat[0] = 1.0; + quat[1] = 0.0; + quat[2] = 0.0; + quat[3] = 0.0; + bonus[nlocal_bonus].ilocal = i; + ellipsoid[i] = nlocal_bonus++; + } else if (shapex == 0.0 && shapey == 0.0 && shapez == 0.0) { + copy_bonus_all(nlocal_bonus-1,ellipsoid[i]); + nlocal_bonus--; + ellipsoid[i] = -1; + } else { + double *shape = bonus[ellipsoid[i]].shape; + shape[0] = shapex; + shape[1] = shapey; + shape[2] = shapez; + } } diff --git a/src/atom_vec_ellipsoid.h b/src/atom_vec_ellipsoid.h index d71859624e85d300e4d9025b6ee6deb3c2550f4e..4f63112ff793e4473c477d8d2dfead0792b4c9a8 100644 --- a/src/atom_vec_ellipsoid.h +++ b/src/atom_vec_ellipsoid.h @@ -35,49 +35,26 @@ class AtomVecEllipsoid : public AtomVec { AtomVecEllipsoid(class LAMMPS *); ~AtomVecEllipsoid(); - void grow(int); - void grow_reset(); - void copy(int, int, int); - int pack_comm(int, int *, double *, int, int *); - int pack_comm_vel(int, int *, double *, int, int *); - int pack_comm_hybrid(int, int *, double *); - void unpack_comm(int, int, double *); - void unpack_comm_vel(int, int, double *); - int unpack_comm_hybrid(int, int, double *); - int pack_reverse(int, int, double *); - int pack_reverse_hybrid(int, int, double *); - void unpack_reverse(int, int *, double *); - int unpack_reverse_hybrid(int, int *, double *); - int pack_border(int, int *, double *, int, int *); - int pack_border_vel(int, int *, double *, int, int *); - int pack_border_hybrid(int, int *, double *); - void unpack_border(int, int, double *); - void unpack_border_vel(int, int, double *); - int unpack_border_hybrid(int, int, double *); - int pack_exchange(int, double *); - int unpack_exchange(double *); - int size_restart(); - int pack_restart(int, double *); - int unpack_restart(double *); - void create_atom(int, double *); - void data_atom(double *, imageint, char **); - int data_atom_hybrid(int, char **); - void data_vel(int, char **); - int data_vel_hybrid(int, char **); - void pack_data(double **); - int pack_data_hybrid(int, double *); - void write_data(FILE *, int, double **); - int write_data_hybrid(FILE *, double *); - void pack_vel(double **); - int pack_vel_hybrid(int, double *); - void write_vel(FILE *, int, double **); - int write_vel_hybrid(FILE *, double *); - bigint memory_usage(); - - // manipulate Bonus data structure for extra atom info + void grow_pointers(); + void copy_bonus(int, int, int); void clear_bonus(); + int pack_comm_bonus(int, int *, double *); + void unpack_comm_bonus(int, int, double *); + int pack_border_bonus(int, int *, double *); + int unpack_border_bonus(int, int, double *); + int pack_exchange_bonus(int, double *); + int unpack_exchange_bonus(int, double *); + int size_restart_bonus(); + int pack_restart_bonus(int, double *); + int unpack_restart_bonus(int, double *); void data_atom_bonus(int, char **); + bigint memory_usage_bonus(); + + void create_atom_post(int); + void data_atom_post(int); + void pack_data_pre(int); + void pack_data_post(int); // unique to AtomVecEllipsoid @@ -86,18 +63,16 @@ class AtomVecEllipsoid : public AtomVec { int nlocal_bonus; private: - tagint *tag; - int *type,*mask; - imageint *image; - double **x,**v,**f; - double *rmass; - double **angmom,**torque; int *ellipsoid; + double *rmass; + double **angmom; int nghost_bonus,nmax_bonus; + int ellipsoid_flag; + double rmass_one; void grow_bonus(); - void copy_bonus(int, int); + void copy_bonus_all(int, int); }; } diff --git a/src/atom_vec_hybrid.cpp b/src/atom_vec_hybrid.cpp index 4ca0dfbba5274e4b5911c74e32f11eda3a930769..7e599863c02ede82237febf252211a9260045e45 100644 --- a/src/atom_vec_hybrid.cpp +++ b/src/atom_vec_hybrid.cpp @@ -14,18 +14,39 @@ #include "atom_vec_hybrid.h" #include #include "atom.h" -#include "domain.h" -#include "modify.h" -#include "fix.h" +#include "comm.h" #include "memory.h" #include "error.h" -#include "utils.h" +#include "tokenizer.h" using namespace LAMMPS_NS; +#define NFIELDSTRINGS 12 // # of field strings + /* ---------------------------------------------------------------------- */ -AtomVecHybrid::AtomVecHybrid(LAMMPS *lmp) : AtomVec(lmp) {} +AtomVecHybrid::AtomVecHybrid(LAMMPS *lmp) : AtomVec(lmp) +{ + nstyles = 0; + styles = NULL; + keywords = NULL; + fieldstrings = NULL; + + bonus_flag = 0; + nstyles_bonus = 0; + styles_bonus = NULL; + + // these strings will be concatenated from sub-style strings + // fields_data_atom & fields_data_vel start with fields common to all styles + + fields_grow = fields_copy = fields_comm = fields_comm_vel = (char *) ""; + fields_reverse = fields_border = fields_border_vel = (char *) ""; + fields_exchange = fields_restart = fields_create = (char *) ""; + fields_data_atom = (char *) "id type x"; + fields_data_vel = (char *) "id v"; + + fields_allocated = 0; +} /* ---------------------------------------------------------------------- */ @@ -35,6 +56,27 @@ AtomVecHybrid::~AtomVecHybrid() delete [] styles; for (int k = 0; k < nstyles; k++) delete [] keywords[k]; delete [] keywords; + + for (int k = 0; k < nstyles_bonus; k++) delete styles_bonus[k]; + delete [] styles_bonus; + + if (!fields_allocated) return; + + delete [] fields_grow; + delete [] fields_copy; + delete [] fields_comm; + delete [] fields_comm_vel; + delete [] fields_reverse; + delete [] fields_border; + delete [] fields_border_vel; + delete [] fields_exchange; + delete [] fields_restart; + delete [] fields_create; + delete [] fields_data_atom; + delete [] fields_data_vel; + + for (int k = 0; k < nstyles; k++) delete [] fieldstrings[k].fstr; + delete [] fieldstrings; } /* ---------------------------------------------------------------------- @@ -43,7 +85,7 @@ AtomVecHybrid::~AtomVecHybrid() void AtomVecHybrid::process_args(int narg, char **arg) { - // build list of all known atom styles + // create list of all known atom styles build_styles(); @@ -76,30 +118,17 @@ void AtomVecHybrid::process_args(int narg, char **arg) nstyles++; } - // free allstyles created by build_styles() - - for (int i = 0; i < nallstyles; i++) delete [] allstyles[i]; - delete [] allstyles; - // hybrid settings are MAX or MIN of sub-style settings - // hybrid sizes are minimal values plus extra values for each sub-style + // check for both mass_type = 0 and 1, so can warn molecular = 0; - comm_x_only = comm_f_only = 1; - - size_forward = 3; - size_reverse = 3; - size_border = 6; - size_data_atom = 5; - size_data_vel = 4; - xcol_data = 3; maxexchange = 0; for (int k = 0; k < nstyles; k++) { if ((styles[k]->molecular == 1 && molecular == 2) || (styles[k]->molecular == 2 && molecular == 1)) - error->all(FLERR,"Cannot mix molecular and molecule template " - "atom styles"); + error->all(FLERR, + "Cannot mix molecular and molecule template atom styles"); molecular = MAX(molecular,styles[k]->molecular); bonds_allow = MAX(bonds_allow,styles[k]->bonds_allow); @@ -109,101 +138,128 @@ void AtomVecHybrid::process_args(int narg, char **arg) mass_type = MAX(mass_type,styles[k]->mass_type); dipole_type = MAX(dipole_type,styles[k]->dipole_type); forceclearflag = MAX(forceclearflag,styles[k]->forceclearflag); + maxexchange += styles[k]->maxexchange; if (styles[k]->molecular == 2) onemols = styles[k]->onemols; + } - comm_x_only = MIN(comm_x_only,styles[k]->comm_x_only); - comm_f_only = MIN(comm_f_only,styles[k]->comm_f_only); - size_forward += styles[k]->size_forward - 3; - size_reverse += styles[k]->size_reverse - 3; - size_border += styles[k]->size_border - 6; - size_data_atom += styles[k]->size_data_atom - 5; - size_data_vel += styles[k]->size_data_vel - 4; + // issue a warning if both per-type mass and per-atom rmass are defined - maxexchange += styles[k]->maxexchange; + int mass_pertype = 0; + int mass_peratom = 0; + + for (int k = 0; k < nstyles; k++) { + if (styles[k]->mass_type == 0) mass_peratom = 1; + if (styles[k]->mass_type == 1) mass_pertype = 1; } - size_velocity = 3; - if (atom->omega_flag) size_velocity += 3; - if (atom->angmom_flag) size_velocity += 3; -} + if (mass_pertype && mass_peratom && comm->me == 0) + error->warning(FLERR, + "Atom_style hybrid defines both pertype and peratom masses " + "- both must be set, only peratom masses will be used"); -/* ---------------------------------------------------------------------- */ + // free allstyles created by build_styles() -void AtomVecHybrid::init() -{ - AtomVec::init(); - for (int k = 0; k < nstyles; k++) styles[k]->init(); -} + for (int i = 0; i < nallstyles; i++) delete [] allstyles[i]; + delete [] allstyles; -/* ---------------------------------------------------------------------- - grow atom arrays - n = 0 grows arrays by a chunk - n > 0 allocates arrays to size n -------------------------------------------------------------------------- */ + // set field strings from all substyles -void AtomVecHybrid::grow(int n) -{ - if (n == 0) grow_nmax(); - else nmax = n; - atom->nmax = nmax; - if (nmax < 0 || nmax > MAXSMALLINT) - error->one(FLERR,"Per-processor system is too big"); + fieldstrings = new FieldStrings[nstyles]; - // sub-styles perform all reallocation - // turn off nextra_grow so hybrid can do that once below + for (int k = 0; k < nstyles; k++) { + fieldstrings[k].fstr = new char*[NFIELDSTRINGS]; + fieldstrings[k].fstr[0] = styles[k]->fields_grow; + fieldstrings[k].fstr[1] = styles[k]->fields_copy; + fieldstrings[k].fstr[2] = styles[k]->fields_comm; + fieldstrings[k].fstr[3] = styles[k]->fields_comm_vel; + fieldstrings[k].fstr[4] = styles[k]->fields_reverse; + fieldstrings[k].fstr[5] = styles[k]->fields_border; + fieldstrings[k].fstr[6] = styles[k]->fields_border_vel; + fieldstrings[k].fstr[7] = styles[k]->fields_exchange; + fieldstrings[k].fstr[8] = styles[k]->fields_restart; + fieldstrings[k].fstr[9] = styles[k]->fields_create; + fieldstrings[k].fstr[10] = styles[k]->fields_data_atom; + fieldstrings[k].fstr[11] = styles[k]->fields_data_vel; + } - int tmp = atom->nextra_grow; - atom->nextra_grow = 0; - for (int k = 0; k < nstyles; k++) styles[k]->grow(nmax); - atom->nextra_grow = tmp; + // merge field strings from all sub-styles + // save concat_grow to check for duplicates of special-case fields + + char *concat_grow;; + char *null = NULL; + + fields_grow = merge_fields(0,fields_grow,1,concat_grow); + fields_copy = merge_fields(1,fields_copy,0,null); + fields_comm = merge_fields(2,fields_comm,0,null); + fields_comm_vel = merge_fields(3,fields_comm_vel,0,null); + fields_reverse = merge_fields(4,fields_reverse,0,null); + fields_border = merge_fields(5,fields_border,0,null); + fields_border_vel = merge_fields(6,fields_border_vel,0,null); + fields_exchange = merge_fields(7,fields_exchange,0,null); + fields_restart = merge_fields(8,fields_restart,0,null); + fields_create = merge_fields(9,fields_create,0,null); + fields_data_atom = merge_fields(10,fields_data_atom,0,null); + fields_data_vel = merge_fields(11,fields_data_vel,0,null); + + fields_allocated = 1; + + // check concat_grow for multiple special-case fields + // may cause issues with style-specific create_atom() and data_atom() methods + // issue warnings if appear in multiple sub-styles + + const char *dupfield[] = {"radius","rmass"}; + int ndupfield = 2; + char *ptr; + + for (int idup = 0; idup < ndupfield; idup++) { + char *dup = (char *) dupfield[idup]; + ptr = strstr(concat_grow,dup); + if (ptr && strstr(ptr+1,dup)) { + char str[128]; + sprintf(str,"Peratom %s is in multiple sub-styles - " + "must be used consistently",dup); + if (comm->me == 0) error->warning(FLERR,str); + } + } - // insure hybrid local ptrs and sub-style ptrs are up to date - // for sub-styles, do this in case - // multiple sub-style reallocs of same array occurred + delete [] concat_grow; - grow_reset(); + // set bonus_flag if any substyle has bonus data + // set nstyles_bonus & styles_bonus - if (atom->nextra_grow) - for (int iextra = 0; iextra < atom->nextra_grow; iextra++) - modify->fix[atom->extra_grow[iextra]]->grow_arrays(nmax); -} - -/* ---------------------------------------------------------------------- - reset local array ptrs -------------------------------------------------------------------------- */ + nstyles_bonus = 0; + for (int k = 0; k < nstyles; k++) + if (styles[k]->bonus_flag) nstyles_bonus++; + + if (nstyles_bonus) { + bonus_flag = 1; + styles_bonus = new AtomVec*[nstyles_bonus]; + nstyles_bonus = 0; + for (int k = 0; k < nstyles; k++) { + if (styles[k]->bonus_flag) + styles_bonus[nstyles_bonus++] = styles[k]; + } + } -void AtomVecHybrid::grow_reset() -{ - tag = atom->tag; type = atom->type; - mask = atom->mask; image = atom->image; - x = atom->x; v = atom->v; f = atom->f; - omega = atom->omega; angmom = atom->angmom; + // parent AtomVec can now operate on merged fields - for (int k = 0; k < nstyles; k++) styles[k]->grow_reset(); + setup_fields(); } -/* ---------------------------------------------------------------------- - copy atom I info to atom J for all sub-styles -------------------------------------------------------------------------- */ +/* ---------------------------------------------------------------------- */ -void AtomVecHybrid::copy(int i, int j, int delflag) +void AtomVecHybrid::init() { - int tmp = atom->nextra_grow; - atom->nextra_grow = 0; - for (int k = 0; k < nstyles; k++) styles[k]->copy(i,j,delflag); - atom->nextra_grow = tmp; - - if (atom->nextra_grow) - for (int iextra = 0; iextra < atom->nextra_grow; iextra++) - modify->fix[atom->extra_grow[iextra]]->copy_arrays(i,j,delflag); + AtomVec::init(); + for (int k = 0; k < nstyles; k++) styles[k]->init(); } /* ---------------------------------------------------------------------- */ -void AtomVecHybrid::clear_bonus() +void AtomVecHybrid::grow_pointers() { - for (int k = 0; k < nstyles; k++) styles[k]->clear_bonus(); + for (int k = 0; k < nstyles; k++) styles[k]->grow_pointers(); } /* ---------------------------------------------------------------------- */ @@ -214,825 +270,284 @@ void AtomVecHybrid::force_clear(int n, size_t nbytes) if (styles[k]->forceclearflag) styles[k]->force_clear(n,nbytes); } -/* ---------------------------------------------------------------------- */ +/* ---------------------------------------------------------------------- + modify values for AtomVec::pack_restart() to pack +------------------------------------------------------------------------- */ -int AtomVecHybrid::pack_comm(int n, int *list, double *buf, - int pbc_flag, int *pbc) +void AtomVecHybrid::pack_restart_pre(int ilocal) { - int i,j,k,m; - double dx,dy,dz; - - m = 0; - if (pbc_flag == 0) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = x[j][0]; - buf[m++] = x[j][1]; - buf[m++] = x[j][2]; - } - } else { - if (domain->triclinic == 0) { - dx = pbc[0]*domain->xprd; - dy = pbc[1]*domain->yprd; - dz = pbc[2]*domain->zprd; - } else { - dx = pbc[0]*domain->xprd + pbc[5]*domain->xy + pbc[4]*domain->xz; - dy = pbc[1]*domain->yprd + pbc[3]*domain->yz; - dz = pbc[2]*domain->zprd; - } - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = x[j][0] + dx; - buf[m++] = x[j][1] + dy; - buf[m++] = x[j][2] + dz; - } - } - - // pack sub-style contributions as contiguous chunks - - for (k = 0; k < nstyles; k++) - m += styles[k]->pack_comm_hybrid(n,list,&buf[m]); - - return m; + for (int k = 0; k < nstyles; k++) + styles[k]->pack_restart_pre(ilocal); } -/* ---------------------------------------------------------------------- */ +/* ---------------------------------------------------------------------- + unmodify values packed by AtomVec::pack_restart() +------------------------------------------------------------------------- */ -int AtomVecHybrid::pack_comm_vel(int n, int *list, double *buf, - int pbc_flag, int *pbc) +void AtomVecHybrid::pack_restart_post(int ilocal) { - int i,j,k,m; - double dx,dy,dz,dvx,dvy,dvz; - int omega_flag = atom->omega_flag; - int angmom_flag = atom->angmom_flag; - - m = 0; - if (pbc_flag == 0) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = x[j][0]; - buf[m++] = x[j][1]; - buf[m++] = x[j][2]; - buf[m++] = v[j][0]; - buf[m++] = v[j][1]; - buf[m++] = v[j][2]; - if (omega_flag) { - buf[m++] = omega[j][0]; - buf[m++] = omega[j][1]; - buf[m++] = omega[j][2]; - } - if (angmom_flag) { - buf[m++] = angmom[j][0]; - buf[m++] = angmom[j][1]; - buf[m++] = angmom[j][2]; - } - } - } else { - if (domain->triclinic == 0) { - dx = pbc[0]*domain->xprd; - dy = pbc[1]*domain->yprd; - dz = pbc[2]*domain->zprd; - } else { - dx = pbc[0]*domain->xprd + pbc[5]*domain->xy + pbc[4]*domain->xz; - dy = pbc[1]*domain->yprd + pbc[3]*domain->yz; - dz = pbc[2]*domain->zprd; - } - if (!deform_vremap) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = x[j][0] + dx; - buf[m++] = x[j][1] + dy; - buf[m++] = x[j][2] + dz; - buf[m++] = v[j][0]; - buf[m++] = v[j][1]; - buf[m++] = v[j][2]; - if (omega_flag) { - buf[m++] = omega[j][0]; - buf[m++] = omega[j][1]; - buf[m++] = omega[j][2]; - } - if (angmom_flag) { - buf[m++] = angmom[j][0]; - buf[m++] = angmom[j][1]; - buf[m++] = angmom[j][2]; - } - } - } else { - dvx = pbc[0]*h_rate[0] + pbc[5]*h_rate[5] + pbc[4]*h_rate[4]; - dvy = pbc[1]*h_rate[1] + pbc[3]*h_rate[3]; - dvz = pbc[2]*h_rate[2]; - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = x[j][0] + dx; - buf[m++] = x[j][1] + dy; - buf[m++] = x[j][2] + dz; - if (mask[i] & deform_groupbit) { - buf[m++] = v[j][0] + dvx; - buf[m++] = v[j][1] + dvy; - buf[m++] = v[j][2] + dvz; - } else { - buf[m++] = v[j][0]; - buf[m++] = v[j][1]; - buf[m++] = v[j][2]; - } - if (omega_flag) { - buf[m++] = omega[j][0]; - buf[m++] = omega[j][1]; - buf[m++] = omega[j][2]; - } - if (angmom_flag) { - buf[m++] = angmom[j][0]; - buf[m++] = angmom[j][1]; - buf[m++] = angmom[j][2]; - } - } - } - } - - // pack sub-style contributions as contiguous chunks + for (int k = 0; k < nstyles; k++) + styles[k]->pack_restart_post(ilocal); +} - for (k = 0; k < nstyles; k++) - m += styles[k]->pack_comm_hybrid(n,list,&buf[m]); +/* ---------------------------------------------------------------------- + initialize other atom quantities after AtomVec::unpack_restart() +------------------------------------------------------------------------- */ - return m; +void AtomVecHybrid::unpack_restart_init(int ilocal) +{ + for (int k = 0; k < nstyles; k++) + styles[k]->unpack_restart_init(ilocal); } -/* ---------------------------------------------------------------------- */ +/* ---------------------------------------------------------------------- + initialize non-zero atom quantities +------------------------------------------------------------------------- */ -void AtomVecHybrid::unpack_comm(int n, int first, double *buf) +void AtomVecHybrid::create_atom_post(int ilocal) { - int i,k,m,last; - - m = 0; - last = first + n; - for (i = first; i < last; i++) { - x[i][0] = buf[m++]; - x[i][1] = buf[m++]; - x[i][2] = buf[m++]; - } + for (int k = 0; k < nstyles; k++) + styles[k]->create_atom_post(ilocal); +} - // unpack sub-style contributions as contiguous chunks +/* ---------------------------------------------------------------------- + modify what AtomVec::data_atom() just unpacked + or initialize other atom quantities +------------------------------------------------------------------------- */ - for (k = 0; k < nstyles; k++) - m += styles[k]->unpack_comm_hybrid(n,first,&buf[m]); +void AtomVecHybrid::data_atom_post(int ilocal) +{ + for (int k = 0; k < nstyles; k++) + styles[k]->data_atom_post(ilocal); } -/* ---------------------------------------------------------------------- */ +/* ---------------------------------------------------------------------- + modify values for AtomVec::pack_data() to pack +------------------------------------------------------------------------- */ -void AtomVecHybrid::unpack_comm_vel(int n, int first, double *buf) +void AtomVecHybrid::pack_data_pre(int ilocal) { - int i,k,m,last; - int omega_flag = atom->omega_flag; - int angmom_flag = atom->angmom_flag; - - m = 0; - last = first + n; - for (i = first; i < last; i++) { - x[i][0] = buf[m++]; - x[i][1] = buf[m++]; - x[i][2] = buf[m++]; - v[i][0] = buf[m++]; - v[i][1] = buf[m++]; - v[i][2] = buf[m++]; - if (omega_flag) { - omega[i][0] = buf[m++]; - omega[i][1] = buf[m++]; - omega[i][2] = buf[m++]; - } - if (angmom_flag) { - angmom[i][0] = buf[m++]; - angmom[i][1] = buf[m++]; - angmom[i][2] = buf[m++]; - } - } + for (int k = 0; k < nstyles; k++) + styles[k]->pack_data_pre(ilocal); +} - // unpack sub-style contributions as contiguous chunks +/* ---------------------------------------------------------------------- + unmodify values packed by AtomVec::pack_data() +------------------------------------------------------------------------- */ - for (k = 0; k < nstyles; k++) - m += styles[k]->unpack_comm_hybrid(n,first,&buf[m]); +void AtomVecHybrid::pack_data_post(int ilocal) +{ + for (int k = 0; k < nstyles; k++) + styles[k]->pack_data_post(ilocal); } /* ---------------------------------------------------------------------- */ -int AtomVecHybrid::pack_reverse(int n, int first, double *buf) +void AtomVecHybrid::copy_bonus(int i, int j, int delflag) { - int i,k,m,last; - - m = 0; - last = first + n; - for (i = first; i < last; i++) { - buf[m++] = f[i][0]; - buf[m++] = f[i][1]; - buf[m++] = f[i][2]; - } - - // pack sub-style contributions as contiguous chunks - - for (k = 0; k < nstyles; k++) - m += styles[k]->pack_reverse_hybrid(n,first,&buf[m]); - - return m; + for (int k = 0; k < nstyles_bonus; k++) + styles_bonus[k]->copy_bonus(i,j,delflag); } /* ---------------------------------------------------------------------- */ -void AtomVecHybrid::unpack_reverse(int n, int *list, double *buf) +void AtomVecHybrid::clear_bonus() { - int i,j,k,m; - - m = 0; - for (i = 0; i < n; i++) { - j = list[i]; - f[j][0] += buf[m++]; - f[j][1] += buf[m++]; - f[j][2] += buf[m++]; - } - - // unpack sub-style contributions as contiguous chunks - - for (k = 0; k < nstyles; k++) - m += styles[k]->unpack_reverse_hybrid(n,list,&buf[m]); + for (int k = 0; k < nstyles_bonus; k++) + styles_bonus[k]->clear_bonus(); } /* ---------------------------------------------------------------------- */ -int AtomVecHybrid::pack_border(int n, int *list, double *buf, - int pbc_flag, int *pbc) +int AtomVecHybrid::pack_comm_bonus(int n, int *list, double *buf) { - int i,j,k,m; - double dx,dy,dz; - - m = 0; - if (pbc_flag == 0) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = x[j][0]; - buf[m++] = x[j][1]; - buf[m++] = x[j][2]; - buf[m++] = ubuf(tag[j]).d; - buf[m++] = ubuf(type[j]).d; - buf[m++] = ubuf(mask[j]).d; - } - } else { - if (domain->triclinic == 0) { - dx = pbc[0]*domain->xprd; - dy = pbc[1]*domain->yprd; - dz = pbc[2]*domain->zprd; - } else { - dx = pbc[0]; - dy = pbc[1]; - dz = pbc[2]; - } - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = x[j][0] + dx; - buf[m++] = x[j][1] + dy; - buf[m++] = x[j][2] + dz; - buf[m++] = ubuf(tag[j]).d; - buf[m++] = ubuf(type[j]).d; - buf[m++] = ubuf(mask[j]).d; - } - } - - // pack sub-style contributions as contiguous chunks - - for (k = 0; k < nstyles; k++) - m += styles[k]->pack_border_hybrid(n,list,&buf[m]); - - if (atom->nextra_border) - for (int iextra = 0; iextra < atom->nextra_border; iextra++) - m += modify->fix[atom->extra_border[iextra]]->pack_border(n,list,&buf[m]); - + int m = 0; + for (int k = 0; k < nstyles_bonus; k++) + m += styles_bonus[k]->pack_comm_bonus(n,list,buf); return m; } /* ---------------------------------------------------------------------- */ -int AtomVecHybrid::pack_border_vel(int n, int *list, double *buf, - int pbc_flag, int *pbc) +void AtomVecHybrid::unpack_comm_bonus(int n, int first, double *buf) { - int i,j,k,m; - double dx,dy,dz,dvx,dvy,dvz; - int omega_flag = atom->omega_flag; - int angmom_flag = atom->angmom_flag; - - m = 0; - if (pbc_flag == 0) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = x[j][0]; - buf[m++] = x[j][1]; - buf[m++] = x[j][2]; - buf[m++] = ubuf(tag[j]).d; - buf[m++] = ubuf(type[j]).d; - buf[m++] = ubuf(mask[j]).d; - buf[m++] = v[j][0]; - buf[m++] = v[j][1]; - buf[m++] = v[j][2]; - if (omega_flag) { - buf[m++] = omega[j][0]; - buf[m++] = omega[j][1]; - buf[m++] = omega[j][2]; - } - if (angmom_flag) { - buf[m++] = angmom[j][0]; - buf[m++] = angmom[j][1]; - buf[m++] = angmom[j][2]; - } - } - } else { - if (domain->triclinic == 0) { - dx = pbc[0]*domain->xprd; - dy = pbc[1]*domain->yprd; - dz = pbc[2]*domain->zprd; - } else { - dx = pbc[0]; - dy = pbc[1]; - dz = pbc[2]; - } - if (!deform_vremap) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = x[j][0] + dx; - buf[m++] = x[j][1] + dy; - buf[m++] = x[j][2] + dz; - buf[m++] = ubuf(tag[j]).d; - buf[m++] = ubuf(type[j]).d; - buf[m++] = ubuf(mask[j]).d; - buf[m++] = v[j][0]; - buf[m++] = v[j][1]; - buf[m++] = v[j][2]; - if (omega_flag) { - buf[m++] = omega[j][0]; - buf[m++] = omega[j][1]; - buf[m++] = omega[j][2]; - } - if (angmom_flag) { - buf[m++] = angmom[j][0]; - buf[m++] = angmom[j][1]; - buf[m++] = angmom[j][2]; - } - } - } else { - dvx = pbc[0]*h_rate[0] + pbc[5]*h_rate[5] + pbc[4]*h_rate[4]; - dvy = pbc[1]*h_rate[1] + pbc[3]*h_rate[3]; - dvz = pbc[2]*h_rate[2]; - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = x[j][0] + dx; - buf[m++] = x[j][1] + dy; - buf[m++] = x[j][2] + dz; - buf[m++] = ubuf(tag[j]).d; - buf[m++] = ubuf(type[j]).d; - buf[m++] = ubuf(mask[j]).d; - if (mask[i] & deform_groupbit) { - buf[m++] = v[j][0] + dvx; - buf[m++] = v[j][1] + dvy; - buf[m++] = v[j][2] + dvz; - } else { - buf[m++] = v[j][0]; - buf[m++] = v[j][1]; - buf[m++] = v[j][2]; - } - if (omega_flag) { - buf[m++] = omega[j][0]; - buf[m++] = omega[j][1]; - buf[m++] = omega[j][2]; - } - if (angmom_flag) { - buf[m++] = angmom[j][0]; - buf[m++] = angmom[j][1]; - buf[m++] = angmom[j][2]; - } - } - } - } - - // pack sub-style contributions as contiguous chunks - - for (k = 0; k < nstyles; k++) - m += styles[k]->pack_border_hybrid(n,list,&buf[m]); - - if (atom->nextra_border) - for (int iextra = 0; iextra < atom->nextra_border; iextra++) - m += modify->fix[atom->extra_border[iextra]]->pack_border(n,list,&buf[m]); - - return m; + for (int k = 0; k < nstyles_bonus; k++) + styles_bonus[k]->unpack_comm_bonus(n,first,buf); } /* ---------------------------------------------------------------------- */ -void AtomVecHybrid::unpack_border(int n, int first, double *buf) +int AtomVecHybrid::pack_border_bonus(int n, int *list, double *buf) { - int i,k,m,last; - - m = 0; - last = first + n; - for (i = first; i < last; i++) { - if (i == nmax) grow(0); - x[i][0] = buf[m++]; - x[i][1] = buf[m++]; - x[i][2] = buf[m++]; - tag[i] = (tagint) ubuf(buf[m++]).i; - type[i] = (int) ubuf(buf[m++]).i; - mask[i] = (int) ubuf(buf[m++]).i; - } - - // unpack sub-style contributions as contiguous chunks - - for (k = 0; k < nstyles; k++) - m += styles[k]->unpack_border_hybrid(n,first,&buf[m]); - - if (atom->nextra_border) - for (int iextra = 0; iextra < atom->nextra_border; iextra++) - m += modify->fix[atom->extra_border[iextra]]-> - unpack_border(n,first,&buf[m]); + int m = 0; + for (int k = 0; k < nstyles_bonus; k++) + m += styles_bonus[k]->pack_border_bonus(n,list,buf); + return m; } /* ---------------------------------------------------------------------- */ -void AtomVecHybrid::unpack_border_vel(int n, int first, double *buf) +int AtomVecHybrid::unpack_border_bonus(int n, int first, double *buf) { - int i,k,m,last; - int omega_flag = atom->omega_flag; - int angmom_flag = atom->angmom_flag; - - m = 0; - last = first + n; - for (i = first; i < last; i++) { - if (i == nmax) grow(0); - x[i][0] = buf[m++]; - x[i][1] = buf[m++]; - x[i][2] = buf[m++]; - tag[i] = (tagint) ubuf(buf[m++]).i; - type[i] = (int) ubuf(buf[m++]).i; - mask[i] = (int) ubuf(buf[m++]).i; - v[i][0] = buf[m++]; - v[i][1] = buf[m++]; - v[i][2] = buf[m++]; - if (omega_flag) { - omega[i][0] = buf[m++]; - omega[i][1] = buf[m++]; - omega[i][2] = buf[m++]; - } - if (angmom_flag) { - angmom[i][0] = buf[m++]; - angmom[i][1] = buf[m++]; - angmom[i][2] = buf[m++]; - } - } - - // unpack sub-style contributions as contiguous chunks - - for (k = 0; k < nstyles; k++) - m += styles[k]->unpack_border_hybrid(n,first,&buf[m]); - - if (atom->nextra_border) - for (int iextra = 0; iextra < atom->nextra_border; iextra++) - m += modify->fix[atom->extra_border[iextra]]-> - unpack_border(n,first,&buf[m]); + int m = 0; + for (int k = 0; k < nstyles_bonus; k++) + m += styles_bonus[k]->unpack_border_bonus(n,first,buf); + return m; } -/* ---------------------------------------------------------------------- - pack data for atom I for sending to another proc - pack each sub-style one after the other -------------------------------------------------------------------------- */ +/* ---------------------------------------------------------------------- */ -int AtomVecHybrid::pack_exchange(int i, double *buf) +int AtomVecHybrid::pack_exchange_bonus(int i, double *buf) { - int k,m; - - int tmp = atom->nextra_grow; - atom->nextra_grow = 0; - - m = 0; - for (k = 0; k < nstyles; k++) - m += styles[k]->pack_exchange(i,&buf[m]); - - atom->nextra_grow = tmp; - - if (atom->nextra_grow) - for (int iextra = 0; iextra < atom->nextra_grow; iextra++) - m += modify->fix[atom->extra_grow[iextra]]->pack_exchange(i,&buf[m]); - - buf[0] = m; + int m = 0; + for (int k = 0; k < nstyles_bonus; k++) + m += styles_bonus[k]->pack_exchange_bonus(i,buf); return m; } -/* ---------------------------------------------------------------------- - unpack data for single atom received from another proc - unpack each sub-style one after the other - grow() occurs here so arrays for all sub-styles are grown -------------------------------------------------------------------------- */ +/* ---------------------------------------------------------------------- */ -int AtomVecHybrid::unpack_exchange(double *buf) +int AtomVecHybrid::unpack_exchange_bonus(int ilocal, double *buf) { - int k,m; - - int nlocal = atom->nlocal; - if (nlocal == nmax) grow(0); - - int tmp = atom->nextra_grow; - atom->nextra_grow = 0; - - m = 0; - for (k = 0; k < nstyles; k++) { - m += styles[k]->unpack_exchange(&buf[m]); - atom->nlocal--; - } - - atom->nextra_grow = tmp; - - if (atom->nextra_grow) - for (int iextra = 0; iextra < atom->nextra_grow; iextra++) - m += modify->fix[atom->extra_grow[iextra]]-> - unpack_exchange(nlocal,&buf[m]); - - atom->nlocal++; + int m = 0; + for (int k = 0; k < nstyles_bonus; k++) + m += styles_bonus[k]->unpack_exchange_bonus(ilocal,buf); return m; } -/* ---------------------------------------------------------------------- - size of restart data for all atoms owned by this proc - include extra data stored by fixes -------------------------------------------------------------------------- */ +/* ---------------------------------------------------------------------- */ -int AtomVecHybrid::size_restart() +int AtomVecHybrid::size_restart_bonus() { - int tmp = atom->nextra_restart; - atom->nextra_restart = 0; - int n = 0; - for (int k = 0; k < nstyles; k++) - n += styles[k]->size_restart(); - - atom->nextra_restart = tmp; - - int nlocal = atom->nlocal; - if (atom->nextra_restart) - for (int iextra = 0; iextra < atom->nextra_restart; iextra++) - for (int i = 0; i < nlocal; i++) - n += modify->fix[atom->extra_restart[iextra]]->size_restart(i); - + for (int k = 0; k < nstyles_bonus; k++) + n += styles_bonus[k]->size_restart_bonus(); return n; } -/* ---------------------------------------------------------------------- - pack atom I's data for restart file including extra quantities - xyz must be 1st 3 values, so that read_restart can test on them - pack each sub-style one after the other -------------------------------------------------------------------------- */ +/* ---------------------------------------------------------------------- */ -int AtomVecHybrid::pack_restart(int i, double *buf) +int AtomVecHybrid::pack_restart_bonus(int i, double *buf) { - int tmp = atom->nextra_restart; - atom->nextra_restart = 0; - int m = 0; - for (int k = 0; k < nstyles; k++) - m += styles[k]->pack_restart(i,&buf[m]); - - atom->nextra_restart = tmp; - - if (atom->nextra_restart) - for (int iextra = 0; iextra < atom->nextra_restart; iextra++) - m += modify->fix[atom->extra_restart[iextra]]->pack_restart(i,&buf[m]); - - buf[0] = m; + for (int k = 0; k < nstyles_bonus; k++) + m += styles_bonus[k]->pack_restart_bonus(i,buf); return m; } -/* ---------------------------------------------------------------------- - unpack data for one atom from restart file including extra quantities - unpack each sub-style one after the other - grow() occurs here so arrays for all sub-styles are grown -------------------------------------------------------------------------- */ +/* ---------------------------------------------------------------------- */ -int AtomVecHybrid::unpack_restart(double *buf) +int AtomVecHybrid::unpack_restart_bonus(int ilocal, double *buf) { - int nlocal = atom->nlocal; - if (nlocal == nmax) { - grow(0); - if (atom->nextra_store) - memory->grow(atom->extra,nmax,atom->nextra_store,"atom:extra"); - } - - int tmp = atom->nextra_store; - atom->nextra_store = 0; - int m = 0; - for (int k = 0; k < nstyles; k++) { - m += styles[k]->unpack_restart(&buf[m]); - atom->nlocal--; - } - atom->nextra_store = tmp; - - double **extra = atom->extra; - if (atom->nextra_store) { - int size = static_cast (buf[0]) - m; - for (int i = 0; i < size; i++) extra[nlocal][i] = buf[m++]; - } - - atom->nlocal++; + for (int k = 0; k < nstyles_bonus; k++) + m += styles_bonus[k]->unpack_restart_bonus(ilocal,buf); return m; } -/* ---------------------------------------------------------------------- - create one atom of itype at coord - create each sub-style one after the other - grow() occurs here so arrays for all sub-styles are grown -------------------------------------------------------------------------- */ +/* ---------------------------------------------------------------------- */ -void AtomVecHybrid::create_atom(int itype, double *coord) +bigint AtomVecHybrid::memory_usage_bonus() { - int nlocal = atom->nlocal; - if (nlocal == nmax) grow(0); - - for (int k = 0; k < nstyles; k++) { - styles[k]->create_atom(itype,coord); - atom->nlocal--; - } - atom->nlocal++; + bigint bytes = 0; + for (int k = 0; k < nstyles_bonus; k++) + bytes += styles_bonus[k]->memory_usage_bonus(); + return bytes; } /* ---------------------------------------------------------------------- - unpack one line from Atoms section of data file - grow() occurs here so arrays for all sub-styles are grown + assign an index to named atom property and return index + returned value encodes which sub-style and index returned by sub-style + return -1 if name is unknown to any sub-styles ------------------------------------------------------------------------- */ -void AtomVecHybrid::data_atom(double *coord, imageint imagetmp, char **values) +int AtomVecHybrid::property_atom(char *name) { - int nlocal = atom->nlocal; - if (nlocal == nmax) grow(0); - - tag[nlocal] = utils::tnumeric(FLERR,values[0],true,lmp); - type[nlocal] = utils::inumeric(FLERR,values[1],true,lmp); - if (type[nlocal] <= 0 || type[nlocal] > atom->ntypes) - error->one(FLERR,"Invalid atom type in Atoms section of data file"); - - x[nlocal][0] = coord[0]; - x[nlocal][1] = coord[1]; - x[nlocal][2] = coord[2]; - - image[nlocal] = imagetmp; - mask[nlocal] = 1; - - v[nlocal][0] = 0.0; - v[nlocal][1] = 0.0; - v[nlocal][2] = 0.0; - if (atom->omega_flag) { - omega[nlocal][0] = 0.0; - omega[nlocal][1] = 0.0; - omega[nlocal][2] = 0.0; - } - if (atom->angmom_flag) { - angmom[nlocal][0] = 0.0; - angmom[nlocal][1] = 0.0; - angmom[nlocal][2] = 0.0; + for (int k = 0; k < nstyles; k++) { + int index = styles[k]->property_atom(name); + if (index >= 0) return index*nstyles + k; } - - // each sub-style parses sub-style specific values - - int m = 5; - for (int k = 0; k < nstyles; k++) - m += styles[k]->data_atom_hybrid(nlocal,&values[m]); - - atom->nlocal++; + return -1; } /* ---------------------------------------------------------------------- - unpack one line from Velocities section of data file + pack per-atom data into buf for ComputePropertyAtom + index maps to data specific to this atom style ------------------------------------------------------------------------- */ -void AtomVecHybrid::data_vel(int m, char **values) +void AtomVecHybrid::pack_property_atom(int multiindex, double *buf, + int nvalues, int groupbit) { - v[m][0] = utils::numeric(FLERR,values[0],true,lmp); - v[m][1] = utils::numeric(FLERR,values[1],true,lmp); - v[m][2] = utils::numeric(FLERR,values[2],true,lmp); - - // each sub-style parses sub-style specific values - - int n = 3; - for (int k = 0; k < nstyles; k++) - n += styles[k]->data_vel_hybrid(m,&values[n]); + int k = multiindex % nstyles; + int index = multiindex/nstyles; + styles[k]->pack_property_atom(index,buf,nvalues,groupbit); } -/* ---------------------------------------------------------------------- - pack atom info for data file including 3 image flags -------------------------------------------------------------------------- */ - -void AtomVecHybrid::pack_data(double **buf) -{ - int k,m; - - int nlocal = atom->nlocal; - for (int i = 0; i < nlocal; i++) { - buf[i][0] = ubuf(tag[i]).d; - buf[i][1] = ubuf(type[i]).d; - buf[i][2] = x[i][0]; - buf[i][3] = x[i][1]; - buf[i][4] = x[i][2]; - - m = 5; - for (k = 0; k < nstyles; k++) - m += styles[k]->pack_data_hybrid(i,&buf[i][m]); - - buf[i][m] = ubuf((image[i] & IMGMASK) - IMGMAX).d; - buf[i][m+1] = ubuf((image[i] >> IMGBITS & IMGMASK) - IMGMAX).d; - buf[i][m+2] = ubuf((image[i] >> IMG2BITS) - IMGMAX).d; - } -} +// ---------------------------------------------------------------------- +// internal methods +// ---------------------------------------------------------------------- /* ---------------------------------------------------------------------- - write atom info to data file including 3 image flags + merge fields and remove duplicate fields + concat = root + Inum fields string from all substyles + return dedup = concat with duplicate fields removed + if concat_flag set, also return concat (w/ duplicates) + so caller can check for problematic fields, call will free it ------------------------------------------------------------------------- */ -void AtomVecHybrid::write_data(FILE *fp, int n, double **buf) +char *AtomVecHybrid::merge_fields(int inum, char *root, + int concat_flag, char *&concat_str) { - int k,m; + // create concatenated string of length size from root + all substyles - for (int i = 0; i < n; i++) { - fprintf(fp,TAGINT_FORMAT " %d %-1.16e %-1.16e %-1.16e", - (tagint) ubuf(buf[i][0]).i,(int) ubuf(buf[i][1]).i, - buf[i][2],buf[i][3],buf[i][4]); + int size = strlen(root) + 1; + for (int k = 0; k < nstyles; k++) + size += strlen(fieldstrings[k].fstr[inum]) + 1; - m = 5; - for (k = 0; k < nstyles; k++) - m += styles[k]->write_data_hybrid(fp,&buf[i][m]); + char *concat = new char[size]; + strcpy(concat,root); - fprintf(fp," %d %d %d\n", - (int) ubuf(buf[i][m]).i,(int) ubuf(buf[i][m+1]).i, - (int) ubuf(buf[i][m+2]).i); + for (int k = 0; k < nstyles; k++) { + if (strlen(concat)) strcat(concat," "); + strcat(concat,fieldstrings[k].fstr[inum]); } -} -/* ---------------------------------------------------------------------- - pack velocity info for data file -------------------------------------------------------------------------- */ + // identify unique words in concatenated string -void AtomVecHybrid::pack_vel(double **buf) -{ - int k,m; - - int nlocal = atom->nlocal; - for (int i = 0; i < nlocal; i++) { - buf[i][0] = ubuf(tag[i]).d; - buf[i][1] = v[i][0]; - buf[i][2] = v[i][1]; - buf[i][3] = v[i][2]; - - m = 4; - for (k = 0; k < nstyles; k++) - m += styles[k]->pack_vel_hybrid(i,&buf[i][m]); - } -} + Tokenizer words(concat, " "); + int nwords = words.count(); -/* ---------------------------------------------------------------------- - write velocity info to data file -------------------------------------------------------------------------- */ + int *unique = new int[nwords]; -void AtomVecHybrid::write_vel(FILE *fp, int n, double **buf) -{ - int k,m; + for (int i = 0; i < nwords; i++) { + unique[i] = 1; + for (int j = 0; j < i; j++) + if (words[i] == words[j]) unique[i] = 0; + } - for (int i = 0; i < n; i++) { - fprintf(fp,TAGINT_FORMAT " %g %g %g", - (tagint) ubuf(buf[i][0]).i,buf[i][1],buf[i][2],buf[i][3]); + // construct a new deduped string - m = 4; - for (k = 0; k < nstyles; k++) - m += styles[k]->write_vel_hybrid(fp,&buf[i][m]); + char *dedup = new char[size]; + dedup[0] = '\0'; - fprintf(fp,"\n"); + for (int i = 0; i < nwords; i++) { + if (!unique[i]) continue; + strcat(dedup,words[i].c_str()); + if (i < nwords-1) strcat(dedup," "); } -} -/* ---------------------------------------------------------------------- - assign an index to named atom property and return index - returned value encodes which sub-style and index returned by sub-style - return -1 if name is unknown to any sub-styles -------------------------------------------------------------------------- */ + // clean up or return concat -int AtomVecHybrid::property_atom(char *name) -{ - for (int k = 0; k < nstyles; k++) { - int index = styles[k]->property_atom(name); - if (index >= 0) return index*nstyles + k; - } - return -1; -} + if (concat_flag) concat_str = concat; + else delete [] concat; -/* ---------------------------------------------------------------------- - pack per-atom data into buf for ComputePropertyAtom - index maps to data specific to this atom style -------------------------------------------------------------------------- */ + // clean up -void AtomVecHybrid::pack_property_atom(int multiindex, double *buf, - int nvalues, int groupbit) -{ - int k = multiindex % nstyles; - int index = multiindex/nstyles; - styles[k]->pack_property_atom(index,buf,nvalues,groupbit); + delete [] unique; + + // return final concatenated, deduped string + + return dedup; } /* ---------------------------------------------------------------------- @@ -1073,14 +588,3 @@ int AtomVecHybrid::known_style(char *str) if (strcmp(str,allstyles[i]) == 0) return 1; return 0; } - -/* ---------------------------------------------------------------------- - return # of bytes of allocated memory -------------------------------------------------------------------------- */ - -bigint AtomVecHybrid::memory_usage() -{ - bigint bytes = 0; - for (int k = 0; k < nstyles; k++) bytes += styles[k]->memory_usage(); - return bytes; -} diff --git a/src/atom_vec_hybrid.h b/src/atom_vec_hybrid.h index 8129baccba4682ed2134f4edd79be99a886bde7f..69b0aab7b7c69d61918a1dee1457ae3fcad77fb0 100644 --- a/src/atom_vec_hybrid.h +++ b/src/atom_vec_hybrid.h @@ -34,48 +34,47 @@ class AtomVecHybrid : public AtomVec { ~AtomVecHybrid(); void process_args(int, char **); void init(); - void grow(int); - void grow_reset(); - void copy(int, int, int); - void clear_bonus(); + + void grow_pointers(); void force_clear(int, size_t); - int pack_comm(int, int *, double *, int, int *); - int pack_comm_vel(int, int *, double *, int, int *); - void unpack_comm(int, int, double *); - void unpack_comm_vel(int, int, double *); - int pack_reverse(int, int, double *); - void unpack_reverse(int, int *, double *); - int pack_border(int, int *, double *, int, int *); - int pack_border_vel(int, int *, double *, int, int *); - void unpack_border(int, int, double *); - void unpack_border_vel(int, int, double *); - int pack_exchange(int, double *); - int unpack_exchange(double *); - int size_restart(); - int pack_restart(int, double *); - int unpack_restart(double *); - void create_atom(int, double *); - void data_atom(double *, imageint, char **); - int data_atom_hybrid(int, char **) {return 0;} - void data_vel(int, char **); - void pack_data(double **); - void write_data(FILE *, int, double **); - void pack_vel(double **); - void write_vel(FILE *, int, double **); + void copy_bonus(int, int, int); + void clear_bonus(); + int pack_comm_bonus(int, int *, double *); + void unpack_comm_bonus(int, int, double *); + int pack_border_bonus(int, int *, double *); + int unpack_border_bonus(int, int, double *); + int pack_exchange_bonus(int, double *); + int unpack_exchange_bonus(int, double *); + int size_restart_bonus(); + int pack_restart_bonus(int, double *); + int unpack_restart_bonus(int, double *); + bigint memory_usage_bonus(); + + void pack_restart_pre(int); + void pack_restart_post(int); + void unpack_restart_init(int); + void create_atom_post(int); + void data_atom_post(int); + void pack_data_pre(int); + void pack_data_post(int); + int property_atom(char *); void pack_property_atom(int, double *, int, int); - bigint memory_usage(); private: - tagint *tag; - int *type,*mask; - imageint *image; - double **x,**v,**f; - double **omega,**angmom; - int nallstyles; char **allstyles; + int fields_allocated; + + struct FieldStrings { + char **fstr; + }; + FieldStrings *fieldstrings; + + int nstyles_bonus; + class AtomVec **styles_bonus; + char *merge_fields(int, char *, int, char *&); void build_styles(); int known_style(char *); }; diff --git a/src/atom_vec_line.cpp b/src/atom_vec_line.cpp index 695ced13fd74588e60aafb3027f8e59611f4dd96..88d02161d502f8e84f299e88adbc6be2661f57de 100644 --- a/src/atom_vec_line.cpp +++ b/src/atom_vec_line.cpp @@ -15,7 +15,6 @@ #include #include #include "atom.h" -#include "comm.h" #include "domain.h" #include "modify.h" #include "fix.h" @@ -34,16 +33,12 @@ using namespace MathConst; AtomVecLine::AtomVecLine(LAMMPS *lmp) : AtomVec(lmp) { molecular = 0; + bonus_flag = 1; - comm_x_only = comm_f_only = 0; - size_forward = 4; - size_reverse = 6; - size_border = 12; - size_velocity = 6; - size_data_atom = 8; - size_data_vel = 7; + size_forward_bonus = 1; + size_border_bonus = 3; + size_restart_bonus_one = 3; size_data_bonus = 5; - xcol_data = 6; atom->line_flag = 1; atom->molecule_flag = atom->rmass_flag = 1; @@ -52,6 +47,26 @@ AtomVecLine::AtomVecLine(LAMMPS *lmp) : AtomVec(lmp) nlocal_bonus = nghost_bonus = nmax_bonus = 0; bonus = NULL; + + // strings with peratom variables to include in each AtomVec method + // strings cannot contain fields in corresponding AtomVec default strings + // order of fields in a string does not matter + // except: fields_data_atom & fields_data_vel must match data file + + fields_grow = (char *) "molecule radius rmass omega torque line"; + fields_copy = (char *) "molecule radius rmass omega"; + fields_comm = (char *) ""; + fields_comm_vel = (char *) "omega"; + fields_reverse = (char *) "torque"; + fields_border = (char *) "molecule radius rmass"; + fields_border_vel = (char *) "molecule radius rmass omega"; + fields_exchange = (char *) "molecule radius rmass omega"; + fields_restart = (char *) "molecule radius rmass omega"; + fields_create = (char *) "molecule radius rmass omega line"; + fields_data_atom = (char *) "id molecule type line rmass x"; + fields_data_vel = (char *) "id v omega"; + + setup_fields(); } /* ---------------------------------------------------------------------- */ @@ -72,51 +87,16 @@ void AtomVecLine::init() } /* ---------------------------------------------------------------------- - grow atom arrays - n = 0 grows arrays by a chunk - n > 0 allocates arrays to size n + set local copies of all grow ptrs used by this class, except defaults + needed in replicate when 2 atom classes exist and it calls pack_restart() ------------------------------------------------------------------------- */ -void AtomVecLine::grow(int n) +void AtomVecLine::grow_pointers() { - if (n == 0) grow_nmax(); - else nmax = n; - atom->nmax = nmax; - if (nmax < 0 || nmax > MAXSMALLINT) - error->one(FLERR,"Per-processor system is too big"); - - tag = memory->grow(atom->tag,nmax,"atom:tag"); - type = memory->grow(atom->type,nmax,"atom:type"); - mask = memory->grow(atom->mask,nmax,"atom:mask"); - image = memory->grow(atom->image,nmax,"atom:image"); - x = memory->grow(atom->x,nmax,3,"atom:x"); - v = memory->grow(atom->v,nmax,3,"atom:v"); - f = memory->grow(atom->f,nmax*comm->nthreads,3,"atom:f"); - - molecule = memory->grow(atom->molecule,nmax,"atom:molecule"); - rmass = memory->grow(atom->rmass,nmax,"atom:rmass"); - radius = memory->grow(atom->radius,nmax,"atom:radius"); - omega = memory->grow(atom->omega,nmax,3,"atom:omega"); - torque = memory->grow(atom->torque,nmax*comm->nthreads,3,"atom:torque"); - line = memory->grow(atom->line,nmax,"atom:line"); - - if (atom->nextra_grow) - for (int iextra = 0; iextra < atom->nextra_grow; iextra++) - modify->fix[atom->extra_grow[iextra]]->grow_arrays(nmax); -} - -/* ---------------------------------------------------------------------- - reset local array ptrs -------------------------------------------------------------------------- */ - -void AtomVecLine::grow_reset() -{ - tag = atom->tag; type = atom->type; - mask = atom->mask; image = atom->image; - x = atom->x; v = atom->v; f = atom->f; - molecule = atom->molecule; rmass = atom->rmass; - radius = atom->radius; omega = atom->omega; torque = atom->torque; line = atom->line; + radius = atom->radius; + rmass = atom->rmass; + omega = atom->omega; } /* ---------------------------------------------------------------------- @@ -137,30 +117,12 @@ void AtomVecLine::grow_bonus() copy atom I info to atom J ------------------------------------------------------------------------- */ -void AtomVecLine::copy(int i, int j, int delflag) +void AtomVecLine::copy_bonus(int i, int j, int delflag) { - tag[j] = tag[i]; - type[j] = type[i]; - mask[j] = mask[i]; - image[j] = image[i]; - x[j][0] = x[i][0]; - x[j][1] = x[i][1]; - x[j][2] = x[i][2]; - v[j][0] = v[i][0]; - v[j][1] = v[i][1]; - v[j][2] = v[i][2]; - - molecule[j] = molecule[i]; - rmass[j] = rmass[i]; - radius[j] = radius[i]; - omega[j][0] = omega[i][0]; - omega[j][1] = omega[i][1]; - omega[j][2] = omega[i][2]; - // if deleting atom J via delflag and J has bonus data, then delete it if (delflag && line[j] >= 0) { - copy_bonus(nlocal_bonus-1,line[j]); + copy_bonus_all(nlocal_bonus-1,line[j]); nlocal_bonus--; } @@ -169,10 +131,6 @@ void AtomVecLine::copy(int i, int j, int delflag) if (line[i] >= 0 && i != j) bonus[line[i]].ilocal = j; line[j] = line[i]; - - if (atom->nextra_grow) - for (int iextra = 0; iextra < atom->nextra_grow; iextra++) - modify->fix[atom->extra_grow[iextra]]->copy_arrays(i,j,delflag); } /* ---------------------------------------------------------------------- @@ -180,7 +138,7 @@ void AtomVecLine::copy(int i, int j, int delflag) also reset line that points to I to now point to J ------------------------------------------------------------------------- */ -void AtomVecLine::copy_bonus(int i, int j) +void AtomVecLine::copy_bonus_all(int i, int j) { line[bonus[i].ilocal] = j; memcpy(&bonus[j],&bonus[i],sizeof(Bonus)); @@ -200,152 +158,9 @@ void AtomVecLine::clear_bonus() modify->fix[atom->extra_grow[iextra]]->clear_bonus(); } -/* ---------------------------------------------------------------------- - set length value in bonus data for particle I - oriented along x axis - this may create or delete entry in bonus data -------------------------------------------------------------------------- */ - -void AtomVecLine::set_length(int i, double value) -{ - if (line[i] < 0) { - if (value == 0.0) return; - if (nlocal_bonus == nmax_bonus) grow_bonus(); - bonus[nlocal_bonus].length = value; - bonus[nlocal_bonus].theta = 0.0; - bonus[nlocal_bonus].ilocal = i; - line[i] = nlocal_bonus++; - } else if (value == 0.0) { - copy_bonus(nlocal_bonus-1,line[i]); - nlocal_bonus--; - line[i] = -1; - } else bonus[line[i]].length = value; - - // also set radius = half of length - // unless value = 0.0, then set diameter = 1.0 - - radius[i] = 0.5 * value; - if (value == 0.0) radius[i] = 0.5; -} - /* ---------------------------------------------------------------------- */ -int AtomVecLine::pack_comm(int n, int *list, double *buf, - int pbc_flag, int *pbc) -{ - int i,j,m; - double dx,dy,dz; - - m = 0; - if (pbc_flag == 0) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = x[j][0]; - buf[m++] = x[j][1]; - buf[m++] = x[j][2]; - if (line[j] >= 0) buf[m++] = bonus[line[j]].theta; - } - } else { - if (domain->triclinic == 0) { - dx = pbc[0]*domain->xprd; - dy = pbc[1]*domain->yprd; - dz = pbc[2]*domain->zprd; - } else { - dx = pbc[0]*domain->xprd + pbc[5]*domain->xy + pbc[4]*domain->xz; - dy = pbc[1]*domain->yprd + pbc[3]*domain->yz; - dz = pbc[2]*domain->zprd; - } - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = x[j][0] + dx; - buf[m++] = x[j][1] + dy; - buf[m++] = x[j][2] + dz; - if (line[j] >= 0) buf[m++] = bonus[line[j]].theta; - } - } - - return m; -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecLine::pack_comm_vel(int n, int *list, double *buf, - int pbc_flag, int *pbc) -{ - int i,j,m; - double dx,dy,dz,dvx,dvy,dvz; - - m = 0; - if (pbc_flag == 0) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = x[j][0]; - buf[m++] = x[j][1]; - buf[m++] = x[j][2]; - if (line[j] >= 0) buf[m++] = bonus[line[j]].theta; - buf[m++] = v[j][0]; - buf[m++] = v[j][1]; - buf[m++] = v[j][2]; - buf[m++] = omega[j][0]; - buf[m++] = omega[j][1]; - buf[m++] = omega[j][2]; - } - } else { - if (domain->triclinic == 0) { - dx = pbc[0]*domain->xprd; - dy = pbc[1]*domain->yprd; - dz = pbc[2]*domain->zprd; - } else { - dx = pbc[0]*domain->xprd + pbc[5]*domain->xy + pbc[4]*domain->xz; - dy = pbc[1]*domain->yprd + pbc[3]*domain->yz; - dz = pbc[2]*domain->zprd; - } - if (!deform_vremap) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = x[j][0] + dx; - buf[m++] = x[j][1] + dy; - buf[m++] = x[j][2] + dz; - if (line[j] >= 0) buf[m++] = bonus[line[j]].theta; - buf[m++] = v[j][0]; - buf[m++] = v[j][1]; - buf[m++] = v[j][2]; - buf[m++] = omega[j][0]; - buf[m++] = omega[j][1]; - buf[m++] = omega[j][2]; - } - } else { - dvx = pbc[0]*h_rate[0] + pbc[5]*h_rate[5] + pbc[4]*h_rate[4]; - dvy = pbc[1]*h_rate[1] + pbc[3]*h_rate[3]; - dvz = pbc[2]*h_rate[2]; - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = x[j][0] + dx; - buf[m++] = x[j][1] + dy; - buf[m++] = x[j][2] + dz; - if (line[j] >= 0) buf[m++] = bonus[line[j]].theta; - if (mask[i] & deform_groupbit) { - buf[m++] = v[j][0] + dvx; - buf[m++] = v[j][1] + dvy; - buf[m++] = v[j][2] + dvz; - } else { - buf[m++] = v[j][0]; - buf[m++] = v[j][1]; - buf[m++] = v[j][2]; - } - buf[m++] = omega[j][0]; - buf[m++] = omega[j][1]; - buf[m++] = omega[j][2]; - } - } - } - - return m; -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecLine::pack_comm_hybrid(int n, int *list, double *buf) +int AtomVecLine::pack_comm_bonus(int n, int *list, double *buf) { int i,j,m; @@ -354,319 +169,32 @@ int AtomVecLine::pack_comm_hybrid(int n, int *list, double *buf) j = list[i]; if (line[j] >= 0) buf[m++] = bonus[line[j]].theta; } - return m; -} - -/* ---------------------------------------------------------------------- */ - -void AtomVecLine::unpack_comm(int n, int first, double *buf) -{ - int i,m,last; - m = 0; - last = first + n; - for (i = first; i < last; i++) { - x[i][0] = buf[m++]; - x[i][1] = buf[m++]; - x[i][2] = buf[m++]; - if (line[i] >= 0) bonus[line[i]].theta = buf[m++]; - } -} - -/* ---------------------------------------------------------------------- */ - -void AtomVecLine::unpack_comm_vel(int n, int first, double *buf) -{ - int i,m,last; - - m = 0; - last = first + n; - for (i = first; i < last; i++) { - x[i][0] = buf[m++]; - x[i][1] = buf[m++]; - x[i][2] = buf[m++]; - if (line[i] >= 0) bonus[line[i]].theta = buf[m++]; - v[i][0] = buf[m++]; - v[i][1] = buf[m++]; - v[i][2] = buf[m++]; - omega[i][0] = buf[m++]; - omega[i][1] = buf[m++]; - omega[i][2] = buf[m++]; - } -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecLine::unpack_comm_hybrid(int n, int first, double *buf) -{ - int i,m,last; - - m = 0; - last = first + n; - for (i = first; i < last; i++) - if (line[i] >= 0) bonus[line[i]].theta = buf[m++]; - return m; -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecLine::pack_reverse(int n, int first, double *buf) -{ - int i,m,last; - - m = 0; - last = first + n; - for (i = first; i < last; i++) { - buf[m++] = f[i][0]; - buf[m++] = f[i][1]; - buf[m++] = f[i][2]; - buf[m++] = torque[i][0]; - buf[m++] = torque[i][1]; - buf[m++] = torque[i][2]; - } return m; } /* ---------------------------------------------------------------------- */ -int AtomVecLine::pack_reverse_hybrid(int n, int first, double *buf) +void AtomVecLine::unpack_comm_bonus(int n, int first, double *buf) { int i,m,last; m = 0; last = first + n; for (i = first; i < last; i++) { - buf[m++] = torque[i][0]; - buf[m++] = torque[i][1]; - buf[m++] = torque[i][2]; - } - return m; -} - -/* ---------------------------------------------------------------------- */ - -void AtomVecLine::unpack_reverse(int n, int *list, double *buf) -{ - int i,j,m; - - m = 0; - for (i = 0; i < n; i++) { - j = list[i]; - f[j][0] += buf[m++]; - f[j][1] += buf[m++]; - f[j][2] += buf[m++]; - torque[j][0] += buf[m++]; - torque[j][1] += buf[m++]; - torque[j][2] += buf[m++]; - } -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecLine::unpack_reverse_hybrid(int n, int *list, double *buf) -{ - int i,j,m; - - m = 0; - for (i = 0; i < n; i++) { - j = list[i]; - torque[j][0] += buf[m++]; - torque[j][1] += buf[m++]; - torque[j][2] += buf[m++]; - } - return m; -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecLine::pack_border(int n, int *list, double *buf, - int pbc_flag, int *pbc) -{ - int i,j,m; - double dx,dy,dz; - - m = 0; - if (pbc_flag == 0) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = x[j][0]; - buf[m++] = x[j][1]; - buf[m++] = x[j][2]; - buf[m++] = ubuf(tag[j]).d; - buf[m++] = ubuf(type[j]).d; - buf[m++] = ubuf(mask[j]).d; - buf[m++] = ubuf(molecule[j]).d; - buf[m++] = radius[j]; - buf[m++] = rmass[j]; - if (line[j] < 0) buf[m++] = ubuf(0).d; - else { - buf[m++] = ubuf(1).d; - buf[m++] = bonus[line[j]].length; - buf[m++] = bonus[line[j]].theta; - } - } - } else { - if (domain->triclinic == 0) { - dx = pbc[0]*domain->xprd; - dy = pbc[1]*domain->yprd; - dz = pbc[2]*domain->zprd; - } else { - dx = pbc[0]; - dy = pbc[1]; - dz = pbc[2]; - } - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = x[j][0] + dx; - buf[m++] = x[j][1] + dy; - buf[m++] = x[j][2] + dz; - buf[m++] = ubuf(tag[j]).d; - buf[m++] = ubuf(type[j]).d; - buf[m++] = ubuf(mask[j]).d; - buf[m++] = ubuf(molecule[j]).d; - buf[m++] = radius[j]; - buf[m++] = rmass[j]; - if (line[j] < 0) buf[m++] = ubuf(0).d; - else { - buf[m++] = ubuf(1).d; - buf[m++] = bonus[line[j]].length; - buf[m++] = bonus[line[j]].theta; - } - } - } - - if (atom->nextra_border) - for (int iextra = 0; iextra < atom->nextra_border; iextra++) - m += modify->fix[atom->extra_border[iextra]]->pack_border(n,list,&buf[m]); - - return m; -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecLine::pack_border_vel(int n, int *list, double *buf, - int pbc_flag, int *pbc) -{ - int i,j,m; - double dx,dy,dz,dvx,dvy,dvz; - - m = 0; - if (pbc_flag == 0) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = x[j][0]; - buf[m++] = x[j][1]; - buf[m++] = x[j][2]; - buf[m++] = ubuf(tag[j]).d; - buf[m++] = ubuf(type[j]).d; - buf[m++] = ubuf(mask[j]).d; - buf[m++] = ubuf(molecule[j]).d; - buf[m++] = radius[j]; - buf[m++] = rmass[j]; - if (line[j] < 0) buf[m++] = ubuf(0).d; - else { - buf[m++] = ubuf(1).d; - buf[m++] = bonus[line[j]].length; - buf[m++] = bonus[line[j]].theta; - } - buf[m++] = v[j][0]; - buf[m++] = v[j][1]; - buf[m++] = v[j][2]; - buf[m++] = omega[j][0]; - buf[m++] = omega[j][1]; - buf[m++] = omega[j][2]; - } - } else { - if (domain->triclinic == 0) { - dx = pbc[0]*domain->xprd; - dy = pbc[1]*domain->yprd; - dz = pbc[2]*domain->zprd; - } else { - dx = pbc[0]; - dy = pbc[1]; - dz = pbc[2]; - } - if (!deform_vremap) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = x[j][0] + dx; - buf[m++] = x[j][1] + dy; - buf[m++] = x[j][2] + dz; - buf[m++] = ubuf(tag[j]).d; - buf[m++] = ubuf(type[j]).d; - buf[m++] = ubuf(mask[j]).d; - buf[m++] = ubuf(molecule[j]).d; - buf[m++] = radius[j]; - buf[m++] = rmass[j]; - if (line[j] < 0) buf[m++] = ubuf(0).d; - else { - buf[m++] = ubuf(1).d; - buf[m++] = bonus[line[j]].length; - buf[m++] = bonus[line[j]].theta; - } - buf[m++] = v[j][0]; - buf[m++] = v[j][1]; - buf[m++] = v[j][2]; - buf[m++] = omega[j][0]; - buf[m++] = omega[j][1]; - buf[m++] = omega[j][2]; - } - } else { - dvx = pbc[0]*h_rate[0] + pbc[5]*h_rate[5] + pbc[4]*h_rate[4]; - dvy = pbc[1]*h_rate[1] + pbc[3]*h_rate[3]; - dvz = pbc[2]*h_rate[2]; - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = x[j][0] + dx; - buf[m++] = x[j][1] + dy; - buf[m++] = x[j][2] + dz; - buf[m++] = ubuf(tag[j]).d; - buf[m++] = ubuf(type[j]).d; - buf[m++] = ubuf(mask[j]).d; - buf[m++] = ubuf(molecule[j]).d; - buf[m++] = radius[j]; - buf[m++] = rmass[j]; - if (line[j] < 0) buf[m++] = ubuf(0).d; - else { - buf[m++] = ubuf(1).d; - buf[m++] = bonus[line[j]].length; - buf[m++] = bonus[line[j]].theta; - } - if (mask[i] & deform_groupbit) { - buf[m++] = v[j][0] + dvx; - buf[m++] = v[j][1] + dvy; - buf[m++] = v[j][2] + dvz; - } else { - buf[m++] = v[j][0]; - buf[m++] = v[j][1]; - buf[m++] = v[j][2]; - } - buf[m++] = omega[j][0]; - buf[m++] = omega[j][1]; - buf[m++] = omega[j][2]; - } - } + if (line[i] >= 0) bonus[line[i]].theta = buf[m++]; } - - if (atom->nextra_border) - for (int iextra = 0; iextra < atom->nextra_border; iextra++) - m += modify->fix[atom->extra_border[iextra]]->pack_border(n,list,&buf[m]); - - return m; } /* ---------------------------------------------------------------------- */ -int AtomVecLine::pack_border_hybrid(int n, int *list, double *buf) +int AtomVecLine::pack_border_bonus(int n, int *list, double *buf) { int i,j,m; m = 0; for (i = 0; i < n; i++) { j = list[i]; - buf[m++] = ubuf(molecule[j]).d; - buf[m++] = radius[j]; - buf[m++] = rmass[j]; if (line[j] < 0) buf[m++] = ubuf(0).d; else { buf[m++] = ubuf(1).d; @@ -674,66 +202,19 @@ int AtomVecLine::pack_border_hybrid(int n, int *list, double *buf) buf[m++] = bonus[line[j]].theta; } } - return m; -} -/* ---------------------------------------------------------------------- */ - -void AtomVecLine::unpack_border(int n, int first, double *buf) -{ - int i,j,m,last; - - m = 0; - last = first + n; - for (i = first; i < last; i++) { - if (i == nmax) grow(0); - x[i][0] = buf[m++]; - x[i][1] = buf[m++]; - x[i][2] = buf[m++]; - tag[i] = (tagint) ubuf(buf[m++]).i; - type[i] = (int) ubuf(buf[m++]).i; - mask[i] = (int) ubuf(buf[m++]).i; - molecule[i] = (tagint) ubuf(buf[m++]).i; - radius[i] = buf[m++]; - rmass[i] = buf[m++]; - line[i] = (int) ubuf(buf[m++]).i; - if (line[i] == 0) line[i] = -1; - else { - j = nlocal_bonus + nghost_bonus; - if (j == nmax_bonus) grow_bonus(); - bonus[j].length = buf[m++]; - bonus[j].theta = buf[m++]; - bonus[j].ilocal = i; - line[i] = j; - nghost_bonus++; - } - } - - if (atom->nextra_border) - for (int iextra = 0; iextra < atom->nextra_border; iextra++) - m += modify->fix[atom->extra_border[iextra]]-> - unpack_border(n,first,&buf[m]); + return m; } /* ---------------------------------------------------------------------- */ -void AtomVecLine::unpack_border_vel(int n, int first, double *buf) +int AtomVecLine::unpack_border_bonus(int n, int first, double *buf) { int i,j,m,last; m = 0; last = first + n; for (i = first; i < last; i++) { - if (i == nmax) grow(0); - x[i][0] = buf[m++]; - x[i][1] = buf[m++]; - x[i][2] = buf[m++]; - tag[i] = (tagint) ubuf(buf[m++]).i; - type[i] = (int) ubuf(buf[m++]).i; - mask[i] = (int) ubuf(buf[m++]).i; - molecule[i] = (tagint) ubuf(buf[m++]).i; - radius[i] = buf[m++]; - rmass[i] = buf[m++]; line[i] = (int) ubuf(buf[m++]).i; if (line[i] == 0) line[i] = -1; else { @@ -745,44 +226,8 @@ void AtomVecLine::unpack_border_vel(int n, int first, double *buf) line[i] = j; nghost_bonus++; } - v[i][0] = buf[m++]; - v[i][1] = buf[m++]; - v[i][2] = buf[m++]; - omega[i][0] = buf[m++]; - omega[i][1] = buf[m++]; - omega[i][2] = buf[m++]; } - if (atom->nextra_border) - for (int iextra = 0; iextra < atom->nextra_border; iextra++) - m += modify->fix[atom->extra_border[iextra]]-> - unpack_border(n,first,&buf[m]); -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecLine::unpack_border_hybrid(int n, int first, double *buf) -{ - int i,j,m,last; - - m = 0; - last = first + n; - for (i = first; i < last; i++) { - molecule[i] = (tagint) ubuf(buf[m++]).i; - radius[i] = buf[m++]; - rmass[i] = buf[m++]; - line[i] = (int) ubuf(buf[m++]).i; - if (line[i] == 0) line[i] = -1; - else { - j = nlocal_bonus + nghost_bonus; - if (j == nmax_bonus) grow_bonus(); - bonus[j].length = buf[m++]; - bonus[j].theta = buf[m++]; - bonus[j].ilocal = i; - line[i] = j; - nghost_bonus++; - } - } return m; } @@ -791,26 +236,9 @@ int AtomVecLine::unpack_border_hybrid(int n, int first, double *buf) xyz must be 1st 3 values, so comm::exchange() can test on them ------------------------------------------------------------------------- */ -int AtomVecLine::pack_exchange(int i, double *buf) +int AtomVecLine::pack_exchange_bonus(int i, double *buf) { - int m = 1; - buf[m++] = x[i][0]; - buf[m++] = x[i][1]; - buf[m++] = x[i][2]; - buf[m++] = v[i][0]; - buf[m++] = v[i][1]; - buf[m++] = v[i][2]; - buf[m++] = ubuf(tag[i]).d; - buf[m++] = ubuf(type[i]).d; - buf[m++] = ubuf(mask[i]).d; - buf[m++] = ubuf(image[i]).d; - - buf[m++] = ubuf(molecule[i]).d; - buf[m++] = rmass[i]; - buf[m++] = radius[i]; - buf[m++] = omega[i][0]; - buf[m++] = omega[i][1]; - buf[m++] = omega[i][2]; + int m = 0; if (line[i] < 0) buf[m++] = ubuf(0).d; else { @@ -820,56 +248,25 @@ int AtomVecLine::pack_exchange(int i, double *buf) buf[m++] = bonus[j].theta; } - if (atom->nextra_grow) - for (int iextra = 0; iextra < atom->nextra_grow; iextra++) - m += modify->fix[atom->extra_grow[iextra]]->pack_exchange(i,&buf[m]); - - buf[0] = m; return m; } /* ---------------------------------------------------------------------- */ -int AtomVecLine::unpack_exchange(double *buf) +int AtomVecLine::unpack_exchange_bonus(int ilocal, double *buf) { - int nlocal = atom->nlocal; - if (nlocal == nmax) grow(0); - - int m = 1; - x[nlocal][0] = buf[m++]; - x[nlocal][1] = buf[m++]; - x[nlocal][2] = buf[m++]; - v[nlocal][0] = buf[m++]; - v[nlocal][1] = buf[m++]; - v[nlocal][2] = buf[m++]; - tag[nlocal] = (tagint) ubuf(buf[m++]).i; - type[nlocal] = (int) ubuf(buf[m++]).i; - mask[nlocal] = (int) ubuf(buf[m++]).i; - image[nlocal] = (imageint) ubuf(buf[m++]).i; - - molecule[nlocal] = (tagint) ubuf(buf[m++]).i; - rmass[nlocal] = buf[m++]; - radius[nlocal] = buf[m++]; - omega[nlocal][0] = buf[m++]; - omega[nlocal][1] = buf[m++]; - omega[nlocal][2] = buf[m++]; - - line[nlocal] = (int) ubuf(buf[m++]).i; - if (line[nlocal] == 0) line[nlocal] = -1; + int m = 0; + + line[ilocal] = (int) ubuf(buf[m++]).i; + if (line[ilocal] == 0) line[ilocal] = -1; else { if (nlocal_bonus == nmax_bonus) grow_bonus(); bonus[nlocal_bonus].length = buf[m++]; bonus[nlocal_bonus].theta = buf[m++]; - bonus[nlocal_bonus].ilocal = nlocal; - line[nlocal] = nlocal_bonus++; + bonus[nlocal_bonus].ilocal = ilocal; + line[ilocal] = nlocal_bonus++; } - if (atom->nextra_grow) - for (int iextra = 0; iextra < atom->nextra_grow; iextra++) - m += modify->fix[atom->extra_grow[iextra]]-> - unpack_exchange(nlocal,&buf[m]); - - atom->nlocal++; return m; } @@ -878,20 +275,16 @@ int AtomVecLine::unpack_exchange(double *buf) include extra data stored by fixes ------------------------------------------------------------------------- */ -int AtomVecLine::size_restart() +int AtomVecLine::size_restart_bonus() { int i; int n = 0; int nlocal = atom->nlocal; - for (i = 0; i < nlocal; i++) - if (line[i] >= 0) n += 20; - else n += 18; - - if (atom->nextra_restart) - for (int iextra = 0; iextra < atom->nextra_restart; iextra++) - for (i = 0; i < nlocal; i++) - n += modify->fix[atom->extra_restart[iextra]]->size_restart(i); + for (i = 0; i < nlocal; i++) { + if (line[i] >= 0) n += size_restart_bonus_one; + else n++; + } return n; } @@ -902,26 +295,9 @@ int AtomVecLine::size_restart() molecular types may be negative, but write as positive ------------------------------------------------------------------------- */ -int AtomVecLine::pack_restart(int i, double *buf) +int AtomVecLine::pack_restart_bonus(int i, double *buf) { - int m = 1; - buf[m++] = x[i][0]; - buf[m++] = x[i][1]; - buf[m++] = x[i][2]; - buf[m++] = ubuf(tag[i]).d; - buf[m++] = ubuf(type[i]).d; - buf[m++] = ubuf(mask[i]).d; - buf[m++] = ubuf(image[i]).d; - buf[m++] = v[i][0]; - buf[m++] = v[i][1]; - buf[m++] = v[i][2]; - - buf[m++] = ubuf(molecule[i]).d; - buf[m++] = rmass[i]; - buf[m++] = radius[i]; - buf[m++] = omega[i][0]; - buf[m++] = omega[i][1]; - buf[m++] = omega[i][2]; + int m = 0; if (line[i] < 0) buf[m++] = ubuf(0).d; else { @@ -931,174 +307,30 @@ int AtomVecLine::pack_restart(int i, double *buf) buf[m++] = bonus[j].theta; } - if (atom->nextra_restart) - for (int iextra = 0; iextra < atom->nextra_restart; iextra++) - m += modify->fix[atom->extra_restart[iextra]]->pack_restart(i,&buf[m]); - - buf[0] = m; return m; } /* ---------------------------------------------------------------------- - unpack data for one atom from restart file including extra quantities + unpack data for one atom from restart file including bonus data ------------------------------------------------------------------------- */ -int AtomVecLine::unpack_restart(double *buf) +int AtomVecLine::unpack_restart_bonus(int ilocal, double *buf) { - int nlocal = atom->nlocal; - if (nlocal == nmax) { - grow(0); - if (atom->nextra_store) - memory->grow(atom->extra,nmax,atom->nextra_store,"atom:extra"); - } + int m = 0; - int m = 1; - x[nlocal][0] = buf[m++]; - x[nlocal][1] = buf[m++]; - x[nlocal][2] = buf[m++]; - tag[nlocal] = (tagint) ubuf(buf[m++]).i; - type[nlocal] = (int) ubuf(buf[m++]).i; - mask[nlocal] = (int) ubuf(buf[m++]).i; - image[nlocal] = (imageint) ubuf(buf[m++]).i; - v[nlocal][0] = buf[m++]; - v[nlocal][1] = buf[m++]; - v[nlocal][2] = buf[m++]; - - molecule[nlocal] = (tagint) ubuf(buf[m++]).i; - rmass[nlocal] = buf[m++]; - radius[nlocal] = buf[m++]; - omega[nlocal][0] = buf[m++]; - omega[nlocal][1] = buf[m++]; - omega[nlocal][2] = buf[m++]; - - line[nlocal] = (int) ubuf(buf[m++]).i; - if (line[nlocal] == 0) line[nlocal] = -1; + line[ilocal] = (int) ubuf(buf[m++]).i; + if (line[ilocal] == 0) line[ilocal] = -1; else { if (nlocal_bonus == nmax_bonus) grow_bonus(); bonus[nlocal_bonus].length = buf[m++]; bonus[nlocal_bonus].theta = buf[m++]; - bonus[nlocal_bonus].ilocal = nlocal; - line[nlocal] = nlocal_bonus++; - } - - double **extra = atom->extra; - if (atom->nextra_store) { - int size = static_cast (buf[0]) - m; - for (int i = 0; i < size; i++) extra[nlocal][i] = buf[m++]; + bonus[nlocal_bonus].ilocal = ilocal; + line[ilocal] = nlocal_bonus++; } - atom->nlocal++; return m; } -/* ---------------------------------------------------------------------- - create one atom of itype at coord - set other values to defaults -------------------------------------------------------------------------- */ - -void AtomVecLine::create_atom(int itype, double *coord) -{ - int nlocal = atom->nlocal; - if (nlocal == nmax) grow(0); - - tag[nlocal] = 0; - type[nlocal] = itype; - x[nlocal][0] = coord[0]; - x[nlocal][1] = coord[1]; - x[nlocal][2] = coord[2]; - mask[nlocal] = 1; - image[nlocal] = ((imageint) IMGMAX << IMG2BITS) | - ((imageint) IMGMAX << IMGBITS) | IMGMAX; - v[nlocal][0] = 0.0; - v[nlocal][1] = 0.0; - v[nlocal][2] = 0.0; - - molecule[nlocal] = 0; - radius[nlocal] = 0.5; - rmass[nlocal] = 4.0*MY_PI/3.0 * radius[nlocal]*radius[nlocal]*radius[nlocal]; - omega[nlocal][0] = 0.0; - omega[nlocal][1] = 0.0; - omega[nlocal][2] = 0.0; - line[nlocal] = -1; - - atom->nlocal++; -} - -/* ---------------------------------------------------------------------- - unpack one line from Atoms section of data file - initialize other atom quantities -------------------------------------------------------------------------- */ - -void AtomVecLine::data_atom(double *coord, imageint imagetmp, char **values) -{ - int nlocal = atom->nlocal; - if (nlocal == nmax) grow(0); - - tag[nlocal] = utils::tnumeric(FLERR,values[0],true,lmp); - molecule[nlocal] = utils::tnumeric(FLERR,values[1],true,lmp); - type[nlocal] = utils::inumeric(FLERR,values[2],true,lmp); - if (type[nlocal] <= 0 || type[nlocal] > atom->ntypes) - error->one(FLERR,"Invalid atom type in Atoms section of data file"); - - line[nlocal] = utils::inumeric(FLERR,values[3],true,lmp); - if (line[nlocal] == 0) line[nlocal] = -1; - else if (line[nlocal] == 1) line[nlocal] = 0; - else error->one(FLERR,"Invalid lineflag in Atoms section of data file"); - - rmass[nlocal] = utils::numeric(FLERR,values[4],true,lmp); - if (rmass[nlocal] <= 0.0) - error->one(FLERR,"Invalid density in Atoms section of data file"); - - if (line[nlocal] < 0) { - radius[nlocal] = 0.5; - rmass[nlocal] *= 4.0*MY_PI/3.0 * - radius[nlocal]*radius[nlocal]*radius[nlocal]; - } else radius[nlocal] = 0.0; - - x[nlocal][0] = coord[0]; - x[nlocal][1] = coord[1]; - x[nlocal][2] = coord[2]; - - image[nlocal] = imagetmp; - - mask[nlocal] = 1; - v[nlocal][0] = 0.0; - v[nlocal][1] = 0.0; - v[nlocal][2] = 0.0; - omega[nlocal][0] = 0.0; - omega[nlocal][1] = 0.0; - omega[nlocal][2] = 0.0; - - atom->nlocal++; -} - -/* ---------------------------------------------------------------------- - unpack hybrid quantities from one line in Atoms section of data file - initialize other atom quantities for this sub-style -------------------------------------------------------------------------- */ - -int AtomVecLine::data_atom_hybrid(int nlocal, char **values) -{ - molecule[nlocal] = utils::tnumeric(FLERR,values[0],true,lmp); - - line[nlocal] = utils::inumeric(FLERR,values[1],true,lmp); - if (line[nlocal] == 0) line[nlocal] = -1; - else if (line[nlocal] == 1) line[nlocal] = 0; - else error->one(FLERR,"Invalid atom type in Atoms section of data file"); - - rmass[nlocal] = utils::numeric(FLERR,values[2],true,lmp); - if (rmass[nlocal] <= 0.0) - error->one(FLERR,"Invalid density in Atoms section of data file"); - - if (line[nlocal] < 0) { - radius[nlocal] = 0.5; - rmass[nlocal] *= 4.0*MY_PI/3.0 * - radius[nlocal]*radius[nlocal]*radius[nlocal]; - } else radius[nlocal] = 0.0; - - return 3; -} - /* ---------------------------------------------------------------------- unpack one line from Lines section of data file ------------------------------------------------------------------------- */ @@ -1144,178 +376,110 @@ void AtomVecLine::data_atom_bonus(int m, char **values) } /* ---------------------------------------------------------------------- - unpack one line from Velocities section of data file -------------------------------------------------------------------------- */ - -void AtomVecLine::data_vel(int m, char **values) -{ - v[m][0] = utils::numeric(FLERR,values[0],true,lmp); - v[m][1] = utils::numeric(FLERR,values[1],true,lmp); - v[m][2] = utils::numeric(FLERR,values[2],true,lmp); - omega[m][0] = utils::numeric(FLERR,values[3],true,lmp); - omega[m][1] = utils::numeric(FLERR,values[4],true,lmp); - omega[m][2] = utils::numeric(FLERR,values[5],true,lmp); -} - -/* ---------------------------------------------------------------------- - unpack hybrid quantities from one line in Velocities section of data file -------------------------------------------------------------------------- */ - -int AtomVecLine::data_vel_hybrid(int m, char **values) -{ - omega[m][0] = utils::numeric(FLERR,values[0],true,lmp); - omega[m][1] = utils::numeric(FLERR,values[1],true,lmp); - omega[m][2] = utils::numeric(FLERR,values[2],true,lmp); - return 3; -} - -/* ---------------------------------------------------------------------- - pack atom info for data file including 3 image flags + return # of bytes of allocated bonus memory ------------------------------------------------------------------------- */ -void AtomVecLine::pack_data(double **buf) +bigint AtomVecLine::memory_usage_bonus() { - int nlocal = atom->nlocal; - for (int i = 0; i < nlocal; i++) { - buf[i][0] = ubuf(tag[i]).d; - buf[i][1] = ubuf(molecule[i]).d; - buf[i][2] = ubuf(type[i]).d; - if (line[i] < 0) buf[i][3] = ubuf(0).d; - else buf[i][3] = ubuf(1).d; - if (line[i] < 0) - buf[i][4] = rmass[i] / (4.0*MY_PI/3.0 * radius[i]*radius[i]*radius[i]); - else buf[i][4] = rmass[i]/bonus[line[i]].length; - buf[i][5] = x[i][0]; - buf[i][6] = x[i][1]; - buf[i][7] = x[i][2]; - buf[i][8] = ubuf((image[i] & IMGMASK) - IMGMAX).d; - buf[i][9] = ubuf((image[i] >> IMGBITS & IMGMASK) - IMGMAX).d; - buf[i][10] = ubuf((image[i] >> IMG2BITS) - IMGMAX).d; - } + bigint bytes = 0; + bytes += nmax_bonus*sizeof(Bonus); + return bytes; } /* ---------------------------------------------------------------------- - pack hybrid atom info for data file + create one atom of itype at coord + set other values to defaults ------------------------------------------------------------------------- */ -int AtomVecLine::pack_data_hybrid(int i, double *buf) +void AtomVecLine::create_atom_post(int ilocal) { - buf[0] = ubuf(molecule[i]).d; - if (line[i] < 0) buf[1] = ubuf(0).d; - else buf[1] = ubuf(1).d; - if (line[i] < 0) - buf[2] = rmass[i] / (4.0*MY_PI/3.0 * radius[i]*radius[i]*radius[i]); - else buf[2] = rmass[i]/bonus[line[i]].length; - return 3; + double radius_one = 0.5; + radius[ilocal] = radius_one; + rmass[ilocal] = 4.0*MY_PI/3.0 * radius_one*radius_one*radius_one; + line[ilocal] = -1; } /* ---------------------------------------------------------------------- - write atom info to data file including 3 image flags + modify what AtomVec::data_atom() just unpacked + or initialize other atom quantities ------------------------------------------------------------------------- */ -void AtomVecLine::write_data(FILE *fp, int n, double **buf) +void AtomVecLine::data_atom_post(int ilocal) { - for (int i = 0; i < n; i++) - fprintf(fp,TAGINT_FORMAT " " TAGINT_FORMAT - " %d %d %-1.16e %-1.16e %-1.16e %-1.16e %d %d %d\n", - (tagint) ubuf(buf[i][0]).i,(tagint) ubuf(buf[i][1]).i, - (int) ubuf(buf[i][2]).i,(int) ubuf(buf[i][3]).i, - buf[i][4],buf[i][5],buf[i][6],buf[i][7], - (int) ubuf(buf[i][8]).i,(int) ubuf(buf[i][9]).i, - (int) ubuf(buf[i][10]).i); -} - -/* ---------------------------------------------------------------------- - write hybrid atom info to data file -------------------------------------------------------------------------- */ + line_flag = line[ilocal]; + if (line_flag == 0) line_flag = -1; + else if (line_flag == 1) line_flag = 0; + else error->one(FLERR,"Invalid line flag in Atoms section of data file"); + line[ilocal] = line_flag; -int AtomVecLine::write_data_hybrid(FILE *fp, double *buf) -{ - fprintf(fp," " TAGINT_FORMAT " %d %-1.16e", - (tagint) ubuf(buf[0]).i,(int) ubuf(buf[1]).i,buf[2]); - return 3; -} + if (rmass[ilocal] <= 0.0) + error->one(FLERR,"Invalid density in Atoms section of data file"); -/* ---------------------------------------------------------------------- - pack velocity info for data file -------------------------------------------------------------------------- */ + if (line_flag < 0) { + double radius_one = 0.5; + radius[ilocal] = radius_one; + rmass[ilocal] *= 4.0*MY_PI/3.0 * radius_one*radius_one*radius_one; + } else radius[ilocal] = 0.0; -void AtomVecLine::pack_vel(double **buf) -{ - int nlocal = atom->nlocal; - for (int i = 0; i < nlocal; i++) { - buf[i][0] = ubuf(tag[i]).d; - buf[i][1] = v[i][0]; - buf[i][2] = v[i][1]; - buf[i][3] = v[i][2]; - buf[i][4] = omega[i][0]; - buf[i][5] = omega[i][1]; - buf[i][6] = omega[i][2]; - } + omega[ilocal][0] = 0.0; + omega[ilocal][1] = 0.0; + omega[ilocal][2] = 0.0; } /* ---------------------------------------------------------------------- - pack hybrid velocity info for data file + modify values for AtomVec::pack_data() to pack ------------------------------------------------------------------------- */ -int AtomVecLine::pack_vel_hybrid(int i, double *buf) +void AtomVecLine::pack_data_pre(int ilocal) { - buf[0] = omega[i][0]; - buf[1] = omega[i][1]; - buf[2] = omega[i][2]; - return 3; -} + line_flag = line[ilocal]; + rmass_one = rmass[ilocal]; -/* ---------------------------------------------------------------------- - write velocity info to data file -------------------------------------------------------------------------- */ + if (line_flag < 0) line[ilocal] = 0; + else line[ilocal] = 1; -void AtomVecLine::write_vel(FILE *fp, int n, double **buf) -{ - for (int i = 0; i < n; i++) - fprintf(fp,TAGINT_FORMAT - " %-1.16e %-1.16e %-1.16e %-1.16e %-1.16e %-1.16e\n", - (tagint) ubuf(buf[i][0]).i,buf[i][1],buf[i][2],buf[i][3], - buf[i][4],buf[i][5],buf[i][6]); + if (line_flag < 0) { + double radius_one = radius[ilocal]; + rmass[ilocal] /= 4.0*MY_PI/3.0 * radius_one*radius_one*radius_one; + } else rmass[ilocal] /= bonus[line_flag].length; } /* ---------------------------------------------------------------------- - write hybrid velocity info to data file + unmodify values packed by AtomVec::pack_data() ------------------------------------------------------------------------- */ -int AtomVecLine::write_vel_hybrid(FILE *fp, double *buf) +void AtomVecLine::pack_data_post(int ilocal) { - fprintf(fp," %-1.16e %-1.16e %-1.16e",buf[0],buf[1],buf[2]); - return 3; + line[ilocal] = line_flag; + rmass[ilocal] = rmass_one; } /* ---------------------------------------------------------------------- - return # of bytes of allocated memory + set length value in bonus data for particle I + oriented along x axis + this may create or delete entry in bonus data ------------------------------------------------------------------------- */ -bigint AtomVecLine::memory_usage() +void AtomVecLine::set_length(int i, double value) { - bigint bytes = 0; - - if (atom->memcheck("tag")) bytes += memory->usage(tag,nmax); - if (atom->memcheck("type")) bytes += memory->usage(type,nmax); - if (atom->memcheck("mask")) bytes += memory->usage(mask,nmax); - if (atom->memcheck("image")) bytes += memory->usage(image,nmax); - if (atom->memcheck("x")) bytes += memory->usage(x,nmax,3); - if (atom->memcheck("v")) bytes += memory->usage(v,nmax,3); - if (atom->memcheck("f")) bytes += memory->usage(f,nmax*comm->nthreads,3); - - if (atom->memcheck("molecule")) bytes += memory->usage(molecule,nmax); - if (atom->memcheck("rmass")) bytes += memory->usage(rmass,nmax); - if (atom->memcheck("radius")) bytes += memory->usage(radius,nmax); - if (atom->memcheck("omega")) bytes += memory->usage(omega,nmax,3); - if (atom->memcheck("torque")) - bytes += memory->usage(torque,nmax*comm->nthreads,3); - if (atom->memcheck("line")) bytes += memory->usage(line,nmax); + if (line[i] < 0) { + if (value == 0.0) return; + if (nlocal_bonus == nmax_bonus) grow_bonus(); + bonus[nlocal_bonus].length = value; + bonus[nlocal_bonus].theta = 0.0; + bonus[nlocal_bonus].ilocal = i; + line[i] = nlocal_bonus++; + } else if (value == 0.0) { + copy_bonus_all(nlocal_bonus-1,line[i]); + nlocal_bonus--; + line[i] = -1; + } else bonus[line[i]].length = value; - bytes += nmax_bonus*sizeof(Bonus); + // also set radius = half of length + // unless value = 0.0, then set diameter = 1.0 - return bytes; + radius[i] = 0.5 * value; + if (value == 0.0) radius[i] = 0.5; } /* ---------------------------------------------------------------------- diff --git a/src/atom_vec_line.h b/src/atom_vec_line.h index 6c8701cfc27064fba292a5bd28c491bcbd9ea919..7bca58c64b9cb793814abbb78cf7cd51db96c5f6 100644 --- a/src/atom_vec_line.h +++ b/src/atom_vec_line.h @@ -35,49 +35,26 @@ class AtomVecLine : public AtomVec { AtomVecLine(class LAMMPS *); ~AtomVecLine(); void init(); - void grow(int); - void grow_reset(); - void copy(int, int, int); - int pack_comm(int, int *, double *, int, int *); - int pack_comm_vel(int, int *, double *, int, int *); - int pack_comm_hybrid(int, int *, double *); - void unpack_comm(int, int, double *); - void unpack_comm_vel(int, int, double *); - int unpack_comm_hybrid(int, int, double *); - int pack_reverse(int, int, double *); - int pack_reverse_hybrid(int, int, double *); - void unpack_reverse(int, int *, double *); - int unpack_reverse_hybrid(int, int *, double *); - int pack_border(int, int *, double *, int, int *); - int pack_border_vel(int, int *, double *, int, int *); - int pack_border_hybrid(int, int *, double *); - void unpack_border(int, int, double *); - void unpack_border_vel(int, int, double *); - int unpack_border_hybrid(int, int, double *); - int pack_exchange(int, double *); - int unpack_exchange(double *); - int size_restart(); - int pack_restart(int, double *); - int unpack_restart(double *); - void create_atom(int, double *); - void data_atom(double *, imageint, char **); - int data_atom_hybrid(int, char **); - void data_vel(int, char **); - int data_vel_hybrid(int, char **); - void pack_data(double **); - int pack_data_hybrid(int, double *); - void write_data(FILE *, int, double **); - int write_data_hybrid(FILE *, double *); - void pack_vel(double **); - int pack_vel_hybrid(int, double *); - void write_vel(FILE *, int, double **); - int write_vel_hybrid(FILE *, double *); - bigint memory_usage(); - - // manipulate Bonus data structure for extra atom info + void grow_pointers(); + void copy_bonus(int, int, int); void clear_bonus(); + int pack_comm_bonus(int, int *, double *); + void unpack_comm_bonus(int, int, double *); + int pack_border_bonus(int, int *, double *); + int unpack_border_bonus(int, int, double *); + int pack_exchange_bonus(int, double *); + int unpack_exchange_bonus(int, double *); + int size_restart_bonus(); + int pack_restart_bonus(int, double *); + int unpack_restart_bonus(int, double *); void data_atom_bonus(int, char **); + bigint memory_usage_bonus(); + + void create_atom_post(int); + void data_atom_post(int); + void pack_data_pre(int); + void pack_data_post(int); // unique to AtomVecLine @@ -86,19 +63,16 @@ class AtomVecLine : public AtomVec { int nlocal_bonus; private: - tagint *tag; - int *type,*mask; - imageint *image; - double **x,**v,**f; - tagint *molecule; - double *rmass,*radius; - double **omega,**torque; int *line; + double *radius,*rmass; + double **omega; int nghost_bonus,nmax_bonus; + int line_flag; + double rmass_one; void grow_bonus(); - void copy_bonus(int, int); + void copy_bonus_all(int, int); // void consistency_check(int, char *); }; diff --git a/src/atom_vec_sphere.cpp b/src/atom_vec_sphere.cpp index 75136503eae0950d974dbab480cb8557ecd4ece1..03f417b1d03042db40f5b3a40588133f5e1ad1dd 100644 --- a/src/atom_vec_sphere.cpp +++ b/src/atom_vec_sphere.cpp @@ -5,7 +5,7 @@ Copyright (2003) Sandia Corporation. Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains - certain rights in this software. This software is distributed under + certain rights in this software. This software is distributead under the GNU General Public License. See the README file in the top-level LAMMPS directory. @@ -14,13 +14,10 @@ #include "atom_vec_sphere.h" #include #include "atom.h" -#include "comm.h" -#include "domain.h" #include "modify.h" #include "fix.h" #include "fix_adapt.h" #include "math_const.h" -#include "memory.h" #include "error.h" #include "utils.h" @@ -31,1156 +28,141 @@ using namespace MathConst; AtomVecSphere::AtomVecSphere(LAMMPS *lmp) : AtomVec(lmp) { + mass_type = 0; molecular = 0; - comm_x_only = 1; - comm_f_only = 0; - size_forward = 3; - size_reverse = 6; - size_border = 8; - size_velocity = 6; - size_data_atom = 7; - size_data_vel = 7; - xcol_data = 5; - atom->sphere_flag = 1; atom->radius_flag = atom->rmass_flag = atom->omega_flag = atom->torque_flag = 1; -} - -/* ---------------------------------------------------------------------- */ - -void AtomVecSphere::init() -{ - AtomVec::init(); - - // set radvary if particle diameters are time-varying due to fix adapt - radvary = 0; - comm_x_only = 1; - size_forward = 3; + // strings with peratom variables to include in each AtomVec method + // strings cannot contain fields in corresponding AtomVec default strings + // order of fields in a string does not matter + // except: fields_data_atom & fields_data_vel must match data file - for (int i = 0; i < modify->nfix; i++) - if (strcmp(modify->fix[i]->style,"adapt") == 0) { - FixAdapt *fix = (FixAdapt *) modify->fix[i]; - if (fix->diamflag) { - radvary = 1; - comm_x_only = 0; - size_forward = 5; - } - } + fields_grow = (char *) "radius rmass omega torque"; + fields_copy = (char *) "radius rmass omega"; + fields_comm = (char *) ""; + fields_comm_vel = (char *) "omega"; + fields_reverse = (char *) "torque"; + fields_border = (char *) "radius rmass"; + fields_border_vel = (char *) "radius rmass omega"; + fields_exchange = (char *) "radius rmass omega"; + fields_restart = (char *) "radius rmass omega"; + fields_create = (char *) "radius rmass omega"; + fields_data_atom = (char *) "id type radius rmass x"; + fields_data_vel = (char *) "id v omega"; } /* ---------------------------------------------------------------------- - grow atom arrays - n = 0 grows arrays by a chunk - n > 0 allocates arrays to size n + process sub-style args + optional arg = 0/1 for static/dynamic particle radii ------------------------------------------------------------------------- */ -void AtomVecSphere::grow(int n) -{ - if (n == 0) grow_nmax(); - else nmax = n; - atom->nmax = nmax; - if (nmax < 0 || nmax > MAXSMALLINT) - error->one(FLERR,"Per-processor system is too big"); - - tag = memory->grow(atom->tag,nmax,"atom:tag"); - type = memory->grow(atom->type,nmax,"atom:type"); - mask = memory->grow(atom->mask,nmax,"atom:mask"); - image = memory->grow(atom->image,nmax,"atom:image"); - x = memory->grow(atom->x,nmax,3,"atom:x"); - v = memory->grow(atom->v,nmax,3,"atom:v"); - f = memory->grow(atom->f,nmax*comm->nthreads,3,"atom:f"); - - radius = memory->grow(atom->radius,nmax,"atom:radius"); - rmass = memory->grow(atom->rmass,nmax,"atom:rmass"); - omega = memory->grow(atom->omega,nmax,3,"atom:omega"); - torque = memory->grow(atom->torque,nmax*comm->nthreads,3,"atom:torque"); - - if (atom->nextra_grow) - for (int iextra = 0; iextra < atom->nextra_grow; iextra++) - modify->fix[atom->extra_grow[iextra]]->grow_arrays(nmax); -} - -/* ---------------------------------------------------------------------- - reset local array ptrs -------------------------------------------------------------------------- */ - -void AtomVecSphere::grow_reset() -{ - tag = atom->tag; type = atom->type; - mask = atom->mask; image = atom->image; - x = atom->x; v = atom->v; f = atom->f; - radius = atom->radius; rmass = atom->rmass; - omega = atom->omega; torque = atom->torque; -} - -/* ---------------------------------------------------------------------- - copy atom I info to atom J -------------------------------------------------------------------------- */ - -void AtomVecSphere::copy(int i, int j, int delflag) -{ - tag[j] = tag[i]; - type[j] = type[i]; - mask[j] = mask[i]; - image[j] = image[i]; - x[j][0] = x[i][0]; - x[j][1] = x[i][1]; - x[j][2] = x[i][2]; - v[j][0] = v[i][0]; - v[j][1] = v[i][1]; - v[j][2] = v[i][2]; - - radius[j] = radius[i]; - rmass[j] = rmass[i]; - omega[j][0] = omega[i][0]; - omega[j][1] = omega[i][1]; - omega[j][2] = omega[i][2]; - - if (atom->nextra_grow) - for (int iextra = 0; iextra < atom->nextra_grow; iextra++) - modify->fix[atom->extra_grow[iextra]]->copy_arrays(i,j,delflag); -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecSphere::pack_comm(int n, int *list, double *buf, - int pbc_flag, int *pbc) -{ - int i,j,m; - double dx,dy,dz; - - if (radvary == 0) { - m = 0; - if (pbc_flag == 0) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = x[j][0]; - buf[m++] = x[j][1]; - buf[m++] = x[j][2]; - } - } else { - if (domain->triclinic == 0) { - dx = pbc[0]*domain->xprd; - dy = pbc[1]*domain->yprd; - dz = pbc[2]*domain->zprd; - } else { - dx = pbc[0]*domain->xprd + pbc[5]*domain->xy + pbc[4]*domain->xz; - dy = pbc[1]*domain->yprd + pbc[3]*domain->yz; - dz = pbc[2]*domain->zprd; - } - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = x[j][0] + dx; - buf[m++] = x[j][1] + dy; - buf[m++] = x[j][2] + dz; - } - } - - } else { - m = 0; - if (pbc_flag == 0) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = x[j][0]; - buf[m++] = x[j][1]; - buf[m++] = x[j][2]; - buf[m++] = radius[j]; - buf[m++] = rmass[j]; - } - } else { - if (domain->triclinic == 0) { - dx = pbc[0]*domain->xprd; - dy = pbc[1]*domain->yprd; - dz = pbc[2]*domain->zprd; - } else { - dx = pbc[0]*domain->xprd + pbc[5]*domain->xy + pbc[4]*domain->xz; - dy = pbc[1]*domain->yprd + pbc[3]*domain->yz; - dz = pbc[2]*domain->zprd; - } - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = x[j][0] + dx; - buf[m++] = x[j][1] + dy; - buf[m++] = x[j][2] + dz; - buf[m++] = radius[j]; - buf[m++] = rmass[j]; - } - } - } - - return m; -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecSphere::pack_comm_vel(int n, int *list, double *buf, - int pbc_flag, int *pbc) -{ - int i,j,m; - double dx,dy,dz,dvx,dvy,dvz; - - if (radvary == 0) { - m = 0; - if (pbc_flag == 0) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = x[j][0]; - buf[m++] = x[j][1]; - buf[m++] = x[j][2]; - buf[m++] = v[j][0]; - buf[m++] = v[j][1]; - buf[m++] = v[j][2]; - buf[m++] = omega[j][0]; - buf[m++] = omega[j][1]; - buf[m++] = omega[j][2]; - } - } else { - if (domain->triclinic == 0) { - dx = pbc[0]*domain->xprd; - dy = pbc[1]*domain->yprd; - dz = pbc[2]*domain->zprd; - } else { - dx = pbc[0]*domain->xprd + pbc[5]*domain->xy + pbc[4]*domain->xz; - dy = pbc[1]*domain->yprd + pbc[3]*domain->yz; - dz = pbc[2]*domain->zprd; - } - if (!deform_vremap) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = x[j][0] + dx; - buf[m++] = x[j][1] + dy; - buf[m++] = x[j][2] + dz; - buf[m++] = v[j][0]; - buf[m++] = v[j][1]; - buf[m++] = v[j][2]; - buf[m++] = omega[j][0]; - buf[m++] = omega[j][1]; - buf[m++] = omega[j][2]; - } - } else { - dvx = pbc[0]*h_rate[0] + pbc[5]*h_rate[5] + pbc[4]*h_rate[4]; - dvy = pbc[1]*h_rate[1] + pbc[3]*h_rate[3]; - dvz = pbc[2]*h_rate[2]; - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = x[j][0] + dx; - buf[m++] = x[j][1] + dy; - buf[m++] = x[j][2] + dz; - if (mask[i] & deform_groupbit) { - buf[m++] = v[j][0] + dvx; - buf[m++] = v[j][1] + dvy; - buf[m++] = v[j][2] + dvz; - } else { - buf[m++] = v[j][0]; - buf[m++] = v[j][1]; - buf[m++] = v[j][2]; - } - buf[m++] = omega[j][0]; - buf[m++] = omega[j][1]; - buf[m++] = omega[j][2]; - } - } - } - - } else { - m = 0; - if (pbc_flag == 0) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = x[j][0]; - buf[m++] = x[j][1]; - buf[m++] = x[j][2]; - buf[m++] = radius[j]; - buf[m++] = rmass[j]; - buf[m++] = v[j][0]; - buf[m++] = v[j][1]; - buf[m++] = v[j][2]; - buf[m++] = omega[j][0]; - buf[m++] = omega[j][1]; - buf[m++] = omega[j][2]; - } - } else { - if (domain->triclinic == 0) { - dx = pbc[0]*domain->xprd; - dy = pbc[1]*domain->yprd; - dz = pbc[2]*domain->zprd; - } else { - dx = pbc[0]*domain->xprd + pbc[5]*domain->xy + pbc[4]*domain->xz; - dy = pbc[1]*domain->yprd + pbc[3]*domain->yz; - dz = pbc[2]*domain->zprd; - } - if (!deform_vremap) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = x[j][0] + dx; - buf[m++] = x[j][1] + dy; - buf[m++] = x[j][2] + dz; - buf[m++] = radius[j]; - buf[m++] = rmass[j]; - buf[m++] = v[j][0]; - buf[m++] = v[j][1]; - buf[m++] = v[j][2]; - buf[m++] = omega[j][0]; - buf[m++] = omega[j][1]; - buf[m++] = omega[j][2]; - } - } else { - dvx = pbc[0]*h_rate[0] + pbc[5]*h_rate[5] + pbc[4]*h_rate[4]; - dvy = pbc[1]*h_rate[1] + pbc[3]*h_rate[3]; - dvz = pbc[2]*h_rate[2]; - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = x[j][0] + dx; - buf[m++] = x[j][1] + dy; - buf[m++] = x[j][2] + dz; - buf[m++] = radius[j]; - buf[m++] = rmass[j]; - if (mask[i] & deform_groupbit) { - buf[m++] = v[j][0] + dvx; - buf[m++] = v[j][1] + dvy; - buf[m++] = v[j][2] + dvz; - } else { - buf[m++] = v[j][0]; - buf[m++] = v[j][1]; - buf[m++] = v[j][2]; - } - buf[m++] = omega[j][0]; - buf[m++] = omega[j][1]; - buf[m++] = omega[j][2]; - } - } - } - } - - return m; -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecSphere::pack_comm_hybrid(int n, int *list, double *buf) -{ - int i,j,m; - - if (radvary == 0) return 0; - - m = 0; - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = radius[j]; - buf[m++] = rmass[j]; - } - return m; -} - -/* ---------------------------------------------------------------------- */ - -void AtomVecSphere::unpack_comm(int n, int first, double *buf) -{ - int i,m,last; - - if (radvary == 0) { - m = 0; - last = first + n; - for (i = first; i < last; i++) { - x[i][0] = buf[m++]; - x[i][1] = buf[m++]; - x[i][2] = buf[m++]; - } - } else { - m = 0; - last = first + n; - for (i = first; i < last; i++) { - x[i][0] = buf[m++]; - x[i][1] = buf[m++]; - x[i][2] = buf[m++]; - radius[i] = buf[m++]; - rmass[i] = buf[m++]; - } - } -} - -/* ---------------------------------------------------------------------- */ - -void AtomVecSphere::unpack_comm_vel(int n, int first, double *buf) -{ - int i,m,last; - - if (radvary == 0) { - m = 0; - last = first + n; - for (i = first; i < last; i++) { - x[i][0] = buf[m++]; - x[i][1] = buf[m++]; - x[i][2] = buf[m++]; - v[i][0] = buf[m++]; - v[i][1] = buf[m++]; - v[i][2] = buf[m++]; - omega[i][0] = buf[m++]; - omega[i][1] = buf[m++]; - omega[i][2] = buf[m++]; - } - } else { - m = 0; - last = first + n; - for (i = first; i < last; i++) { - x[i][0] = buf[m++]; - x[i][1] = buf[m++]; - x[i][2] = buf[m++]; - radius[i] = buf[m++]; - rmass[i] = buf[m++]; - v[i][0] = buf[m++]; - v[i][1] = buf[m++]; - v[i][2] = buf[m++]; - omega[i][0] = buf[m++]; - omega[i][1] = buf[m++]; - omega[i][2] = buf[m++]; - } - } -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecSphere::unpack_comm_hybrid(int n, int first, double *buf) +void AtomVecSphere::process_args(int narg, char **arg) { - int i,m,last; - - if (radvary == 0) return 0; - - m = 0; - last = first + n; - for (i = first; i < last; i++) { - radius[i] = buf[m++]; - rmass[i] = buf[m++]; - } - return m; -} + if (narg != 0 && narg != 1) + error->all(FLERR,"Illegal atom_style sphere command"); -/* ---------------------------------------------------------------------- */ - -int AtomVecSphere::pack_reverse(int n, int first, double *buf) -{ - int i,m,last; - - m = 0; - last = first + n; - for (i = first; i < last; i++) { - buf[m++] = f[i][0]; - buf[m++] = f[i][1]; - buf[m++] = f[i][2]; - buf[m++] = torque[i][0]; - buf[m++] = torque[i][1]; - buf[m++] = torque[i][2]; - } - return m; -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecSphere::pack_reverse_hybrid(int n, int first, double *buf) -{ - int i,m,last; - - m = 0; - last = first + n; - for (i = first; i < last; i++) { - buf[m++] = torque[i][0]; - buf[m++] = torque[i][1]; - buf[m++] = torque[i][2]; + radvary = 0; + if (narg == 1) { + radvary = utils::numeric(FLERR,arg[0],true,lmp); + if (radvary < 0 || radvary > 1) + error->all(FLERR,"Illegal atom_style sphere command"); } - return m; -} -/* ---------------------------------------------------------------------- */ - -void AtomVecSphere::unpack_reverse(int n, int *list, double *buf) -{ - int i,j,m; + // dynamic particle radius and mass must be communicated every step - m = 0; - for (i = 0; i < n; i++) { - j = list[i]; - f[j][0] += buf[m++]; - f[j][1] += buf[m++]; - f[j][2] += buf[m++]; - torque[j][0] += buf[m++]; - torque[j][1] += buf[m++]; - torque[j][2] += buf[m++]; + if (radvary) { + fields_comm = (char *) "radius rmass"; + fields_comm_vel = (char *) "radius rmass omega"; } -} -/* ---------------------------------------------------------------------- */ - -int AtomVecSphere::unpack_reverse_hybrid(int n, int *list, double *buf) -{ - int i,j,m; + // delay setting up of fields until now - m = 0; - for (i = 0; i < n; i++) { - j = list[i]; - torque[j][0] += buf[m++]; - torque[j][1] += buf[m++]; - torque[j][2] += buf[m++]; - } - return m; + setup_fields(); } /* ---------------------------------------------------------------------- */ -int AtomVecSphere::pack_border(int n, int *list, double *buf, - int pbc_flag, int *pbc) +void AtomVecSphere::init() { - int i,j,m; - double dx,dy,dz; - - m = 0; - if (pbc_flag == 0) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = x[j][0]; - buf[m++] = x[j][1]; - buf[m++] = x[j][2]; - buf[m++] = ubuf(tag[j]).d; - buf[m++] = ubuf(type[j]).d; - buf[m++] = ubuf(mask[j]).d; - buf[m++] = radius[j]; - buf[m++] = rmass[j]; - } - } else { - if (domain->triclinic == 0) { - dx = pbc[0]*domain->xprd; - dy = pbc[1]*domain->yprd; - dz = pbc[2]*domain->zprd; - } else { - dx = pbc[0]; - dy = pbc[1]; - dz = pbc[2]; - } - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = x[j][0] + dx; - buf[m++] = x[j][1] + dy; - buf[m++] = x[j][2] + dz; - buf[m++] = ubuf(tag[j]).d; - buf[m++] = ubuf(type[j]).d; - buf[m++] = ubuf(mask[j]).d; - buf[m++] = radius[j]; - buf[m++] = rmass[j]; - } - } - - if (atom->nextra_border) - for (int iextra = 0; iextra < atom->nextra_border; iextra++) - m += modify->fix[atom->extra_border[iextra]]->pack_border(n,list,&buf[m]); - - return m; -} - -/* ---------------------------------------------------------------------- */ + AtomVec::init(); -int AtomVecSphere::pack_border_vel(int n, int *list, double *buf, - int pbc_flag, int *pbc) -{ - int i,j,m; - double dx,dy,dz,dvx,dvy,dvz; + // check if optional radvary setting should have been set to 1 - m = 0; - if (pbc_flag == 0) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = x[j][0]; - buf[m++] = x[j][1]; - buf[m++] = x[j][2]; - buf[m++] = ubuf(tag[j]).d; - buf[m++] = ubuf(type[j]).d; - buf[m++] = ubuf(mask[j]).d; - buf[m++] = radius[j]; - buf[m++] = rmass[j]; - buf[m++] = v[j][0]; - buf[m++] = v[j][1]; - buf[m++] = v[j][2]; - buf[m++] = omega[j][0]; - buf[m++] = omega[j][1]; - buf[m++] = omega[j][2]; - } - } else { - if (domain->triclinic == 0) { - dx = pbc[0]*domain->xprd; - dy = pbc[1]*domain->yprd; - dz = pbc[2]*domain->zprd; - } else { - dx = pbc[0]; - dy = pbc[1]; - dz = pbc[2]; - } - if (!deform_vremap) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = x[j][0] + dx; - buf[m++] = x[j][1] + dy; - buf[m++] = x[j][2] + dz; - buf[m++] = ubuf(tag[j]).d; - buf[m++] = ubuf(type[j]).d; - buf[m++] = ubuf(mask[j]).d; - buf[m++] = radius[j]; - buf[m++] = rmass[j]; - buf[m++] = v[j][0]; - buf[m++] = v[j][1]; - buf[m++] = v[j][2]; - buf[m++] = omega[j][0]; - buf[m++] = omega[j][1]; - buf[m++] = omega[j][2]; - } - } else { - dvx = pbc[0]*h_rate[0] + pbc[5]*h_rate[5] + pbc[4]*h_rate[4]; - dvy = pbc[1]*h_rate[1] + pbc[3]*h_rate[3]; - dvz = pbc[2]*h_rate[2]; - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = x[j][0] + dx; - buf[m++] = x[j][1] + dy; - buf[m++] = x[j][2] + dz; - buf[m++] = ubuf(tag[j]).d; - buf[m++] = ubuf(type[j]).d; - buf[m++] = ubuf(mask[j]).d; - buf[m++] = radius[j]; - buf[m++] = rmass[j]; - if (mask[i] & deform_groupbit) { - buf[m++] = v[j][0] + dvx; - buf[m++] = v[j][1] + dvy; - buf[m++] = v[j][2] + dvz; - } else { - buf[m++] = v[j][0]; - buf[m++] = v[j][1]; - buf[m++] = v[j][2]; - } - buf[m++] = omega[j][0]; - buf[m++] = omega[j][1]; - buf[m++] = omega[j][2]; - } + for (int i = 0; i < modify->nfix; i++) + if (strcmp(modify->fix[i]->style,"adapt") == 0) { + FixAdapt *fix = (FixAdapt *) modify->fix[i]; + if (fix->diamflag && radvary == 0) + error->all(FLERR,"Fix adapt changes particle radii " + "but atom_style sphere is not dynamic"); } - } - - if (atom->nextra_border) - for (int iextra = 0; iextra < atom->nextra_border; iextra++) - m += modify->fix[atom->extra_border[iextra]]->pack_border(n,list,&buf[m]); - - return m; -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecSphere::pack_border_hybrid(int n, int *list, double *buf) -{ - int i,j,m; - - m = 0; - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = radius[j]; - buf[m++] = rmass[j]; - } - return m; -} - -/* ---------------------------------------------------------------------- */ - -void AtomVecSphere::unpack_border(int n, int first, double *buf) -{ - int i,m,last; - - m = 0; - last = first + n; - for (i = first; i < last; i++) { - if (i == nmax) grow(0); - x[i][0] = buf[m++]; - x[i][1] = buf[m++]; - x[i][2] = buf[m++]; - tag[i] = (tagint) ubuf(buf[m++]).i; - type[i] = (int) ubuf(buf[m++]).i; - mask[i] = (int) ubuf(buf[m++]).i; - radius[i] = buf[m++]; - rmass[i] = buf[m++]; - } - - if (atom->nextra_border) - for (int iextra = 0; iextra < atom->nextra_border; iextra++) - m += modify->fix[atom->extra_border[iextra]]-> - unpack_border(n,first,&buf[m]); -} - - -/* ---------------------------------------------------------------------- */ - -void AtomVecSphere::unpack_border_vel(int n, int first, double *buf) -{ - int i,m,last; - - m = 0; - last = first + n; - for (i = first; i < last; i++) { - if (i == nmax) grow(0); - x[i][0] = buf[m++]; - x[i][1] = buf[m++]; - x[i][2] = buf[m++]; - tag[i] = (tagint) ubuf(buf[m++]).i; - type[i] = (int) ubuf(buf[m++]).i; - mask[i] = (int) ubuf(buf[m++]).i; - radius[i] = buf[m++]; - rmass[i] = buf[m++]; - v[i][0] = buf[m++]; - v[i][1] = buf[m++]; - v[i][2] = buf[m++]; - omega[i][0] = buf[m++]; - omega[i][1] = buf[m++]; - omega[i][2] = buf[m++]; - } - - if (atom->nextra_border) - for (int iextra = 0; iextra < atom->nextra_border; iextra++) - m += modify->fix[atom->extra_border[iextra]]-> - unpack_border(n,first,&buf[m]); -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecSphere::unpack_border_hybrid(int n, int first, double *buf) -{ - int i,m,last; - - m = 0; - last = first + n; - for (i = first; i < last; i++) { - radius[i] = buf[m++]; - rmass[i] = buf[m++]; - } - return m; -} - -/* ---------------------------------------------------------------------- - pack data for atom I for sending to another proc - xyz must be 1st 3 values, so comm::exchange() can test on them -------------------------------------------------------------------------- */ - -int AtomVecSphere::pack_exchange(int i, double *buf) -{ - int m = 1; - buf[m++] = x[i][0]; - buf[m++] = x[i][1]; - buf[m++] = x[i][2]; - buf[m++] = v[i][0]; - buf[m++] = v[i][1]; - buf[m++] = v[i][2]; - buf[m++] = ubuf(tag[i]).d; - buf[m++] = ubuf(type[i]).d; - buf[m++] = ubuf(mask[i]).d; - buf[m++] = ubuf(image[i]).d; - - buf[m++] = radius[i]; - buf[m++] = rmass[i]; - buf[m++] = omega[i][0]; - buf[m++] = omega[i][1]; - buf[m++] = omega[i][2]; - - if (atom->nextra_grow) - for (int iextra = 0; iextra < atom->nextra_grow; iextra++) - m += modify->fix[atom->extra_grow[iextra]]->pack_exchange(i,&buf[m]); - - buf[0] = m; - return m; -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecSphere::unpack_exchange(double *buf) -{ - int nlocal = atom->nlocal; - if (nlocal == nmax) grow(0); - - int m = 1; - x[nlocal][0] = buf[m++]; - x[nlocal][1] = buf[m++]; - x[nlocal][2] = buf[m++]; - v[nlocal][0] = buf[m++]; - v[nlocal][1] = buf[m++]; - v[nlocal][2] = buf[m++]; - tag[nlocal] = (tagint) ubuf(buf[m++]).i; - type[nlocal] = (int) ubuf(buf[m++]).i; - mask[nlocal] = (int) ubuf(buf[m++]).i; - image[nlocal] = (imageint) ubuf(buf[m++]).i; - - radius[nlocal] = buf[m++]; - rmass[nlocal] = buf[m++]; - omega[nlocal][0] = buf[m++]; - omega[nlocal][1] = buf[m++]; - omega[nlocal][2] = buf[m++]; - - if (atom->nextra_grow) - for (int iextra = 0; iextra < atom->nextra_grow; iextra++) - m += modify->fix[atom->extra_grow[iextra]]-> - unpack_exchange(nlocal,&buf[m]); - - atom->nlocal++; - return m; -} - -/* ---------------------------------------------------------------------- - size of restart data for all atoms owned by this proc - include extra data stored by fixes -------------------------------------------------------------------------- */ - -int AtomVecSphere::size_restart() -{ - int i; - - int nlocal = atom->nlocal; - int n = 16 * nlocal; - - if (atom->nextra_restart) - for (int iextra = 0; iextra < atom->nextra_restart; iextra++) - for (i = 0; i < nlocal; i++) - n += modify->fix[atom->extra_restart[iextra]]->size_restart(i); - - return n; } /* ---------------------------------------------------------------------- - pack atom I's data for restart file including extra quantities - xyz must be 1st 3 values, so that read_restart can test on them - molecular types may be negative, but write as positive + set local copies of all grow ptrs used by this class, except defaults + needed in replicate when 2 atom classes exist and it calls pack_restart() ------------------------------------------------------------------------- */ -int AtomVecSphere::pack_restart(int i, double *buf) +void AtomVecSphere::grow_pointers() { - int m = 1; - buf[m++] = x[i][0]; - buf[m++] = x[i][1]; - buf[m++] = x[i][2]; - buf[m++] = ubuf(tag[i]).d; - buf[m++] = ubuf(type[i]).d; - buf[m++] = ubuf(mask[i]).d; - buf[m++] = ubuf(image[i]).d; - buf[m++] = v[i][0]; - buf[m++] = v[i][1]; - buf[m++] = v[i][2]; - - buf[m++] = radius[i]; - buf[m++] = rmass[i]; - buf[m++] = omega[i][0]; - buf[m++] = omega[i][1]; - buf[m++] = omega[i][2]; - - if (atom->nextra_restart) - for (int iextra = 0; iextra < atom->nextra_restart; iextra++) - m += modify->fix[atom->extra_restart[iextra]]->pack_restart(i,&buf[m]); - - buf[0] = m; - return m; -} - -/* ---------------------------------------------------------------------- - unpack data for one atom from restart file including extra quantities -------------------------------------------------------------------------- */ - -int AtomVecSphere::unpack_restart(double *buf) -{ - int nlocal = atom->nlocal; - if (nlocal == nmax) { - grow(0); - if (atom->nextra_store) - memory->grow(atom->extra,nmax,atom->nextra_store,"atom:extra"); - } - - int m = 1; - x[nlocal][0] = buf[m++]; - x[nlocal][1] = buf[m++]; - x[nlocal][2] = buf[m++]; - tag[nlocal] = (tagint) ubuf(buf[m++]).i; - type[nlocal] = (int) ubuf(buf[m++]).i; - mask[nlocal] = (int) ubuf(buf[m++]).i; - image[nlocal] = (imageint) ubuf(buf[m++]).i; - v[nlocal][0] = buf[m++]; - v[nlocal][1] = buf[m++]; - v[nlocal][2] = buf[m++]; - - radius[nlocal] = buf[m++]; - rmass[nlocal] = buf[m++]; - omega[nlocal][0] = buf[m++]; - omega[nlocal][1] = buf[m++]; - omega[nlocal][2] = buf[m++]; - - double **extra = atom->extra; - if (atom->nextra_store) { - int size = static_cast (buf[0]) - m; - for (int i = 0; i < size; i++) extra[nlocal][i] = buf[m++]; - } - - atom->nlocal++; - return m; -} - -/* ---------------------------------------------------------------------- - create one atom of itype at coord - set other values to defaults -------------------------------------------------------------------------- */ - -void AtomVecSphere::create_atom(int itype, double *coord) -{ - int nlocal = atom->nlocal; - if (nlocal == nmax) grow(0); - - tag[nlocal] = 0; - type[nlocal] = itype; - x[nlocal][0] = coord[0]; - x[nlocal][1] = coord[1]; - x[nlocal][2] = coord[2]; - mask[nlocal] = 1; - image[nlocal] = ((imageint) IMGMAX << IMG2BITS) | - ((imageint) IMGMAX << IMGBITS) | IMGMAX; - v[nlocal][0] = 0.0; - v[nlocal][1] = 0.0; - v[nlocal][2] = 0.0; - - radius[nlocal] = 0.5; - rmass[nlocal] = 4.0*MY_PI/3.0 * radius[nlocal]*radius[nlocal]*radius[nlocal]; - omega[nlocal][0] = 0.0; - omega[nlocal][1] = 0.0; - omega[nlocal][2] = 0.0; - - atom->nlocal++; + radius = atom->radius; + rmass = atom->rmass; + omega = atom->omega; } /* ---------------------------------------------------------------------- - unpack one line from Atoms section of data file - initialize other atom quantities + initialize non-zero atom quantities ------------------------------------------------------------------------- */ -void AtomVecSphere::data_atom(double *coord, imageint imagetmp, char **values) +void AtomVecSphere::create_atom_post(int ilocal) { - int nlocal = atom->nlocal; - if (nlocal == nmax) grow(0); - - tag[nlocal] = utils::tnumeric(FLERR,values[0],true,lmp); - type[nlocal] = utils::inumeric(FLERR,values[1],true,lmp); - if (type[nlocal] <= 0 || type[nlocal] > atom->ntypes) - error->one(FLERR,"Invalid atom type in Atoms section of data file"); - - radius[nlocal] = 0.5 * utils::numeric(FLERR,values[2],true,lmp); - if (radius[nlocal] < 0.0) - error->one(FLERR,"Invalid radius in Atoms section of data file"); - - double density = utils::numeric(FLERR,values[3],true,lmp); - if (density <= 0.0) - error->one(FLERR,"Invalid density in Atoms section of data file"); - - if (radius[nlocal] == 0.0) rmass[nlocal] = density; - else - rmass[nlocal] = 4.0*MY_PI/3.0 * - radius[nlocal]*radius[nlocal]*radius[nlocal] * density; - - x[nlocal][0] = coord[0]; - x[nlocal][1] = coord[1]; - x[nlocal][2] = coord[2]; - - image[nlocal] = imagetmp; - - mask[nlocal] = 1; - v[nlocal][0] = 0.0; - v[nlocal][1] = 0.0; - v[nlocal][2] = 0.0; - omega[nlocal][0] = 0.0; - omega[nlocal][1] = 0.0; - omega[nlocal][2] = 0.0; - - atom->nlocal++; + radius[ilocal] = 0.5; + rmass[ilocal] = 4.0*MY_PI/3.0 * 0.5*0.5*0.5; } /* ---------------------------------------------------------------------- - unpack hybrid quantities from one line in Atoms section of data file - initialize other atom quantities for this sub-style + modify what AtomVec::data_atom() just unpacked + or initialize other atom quantities ------------------------------------------------------------------------- */ -int AtomVecSphere::data_atom_hybrid(int nlocal, char **values) +void AtomVecSphere::data_atom_post(int ilocal) { - radius[nlocal] = 0.5 * utils::numeric(FLERR,values[0],true,lmp); - if (radius[nlocal] < 0.0) - error->one(FLERR,"Invalid radius in Atoms section of data file"); + radius_one = 0.5 * atom->radius[ilocal]; + radius[ilocal] = radius_one; + if (radius_one > 0.0) + rmass[ilocal] *= 4.0*MY_PI/3.0 * radius_one*radius_one*radius_one; - double density = utils::numeric(FLERR,values[1],true,lmp); - if (density <= 0.0) + if (rmass[ilocal] <= 0.0) error->one(FLERR,"Invalid density in Atoms section of data file"); - if (radius[nlocal] == 0.0) rmass[nlocal] = density; - else - rmass[nlocal] = 4.0*MY_PI/3.0 * - radius[nlocal]*radius[nlocal]*radius[nlocal] * density; - - return 2; -} - -/* ---------------------------------------------------------------------- - unpack one line from Velocities section of data file -------------------------------------------------------------------------- */ - -void AtomVecSphere::data_vel(int m, char **values) -{ - v[m][0] = utils::numeric(FLERR,values[0],true,lmp); - v[m][1] = utils::numeric(FLERR,values[1],true,lmp); - v[m][2] = utils::numeric(FLERR,values[2],true,lmp); - omega[m][0] = utils::numeric(FLERR,values[3],true,lmp); - omega[m][1] = utils::numeric(FLERR,values[4],true,lmp); - omega[m][2] = utils::numeric(FLERR,values[5],true,lmp); -} - -/* ---------------------------------------------------------------------- - unpack hybrid quantities from one line in Velocities section of data file -------------------------------------------------------------------------- */ - -int AtomVecSphere::data_vel_hybrid(int m, char **values) -{ - omega[m][0] = utils::numeric(FLERR,values[0],true,lmp); - omega[m][1] = utils::numeric(FLERR,values[1],true,lmp); - omega[m][2] = utils::numeric(FLERR,values[2],true,lmp); - return 3; -} - -/* ---------------------------------------------------------------------- - pack atom info for data file including 3 image flags -------------------------------------------------------------------------- */ - -void AtomVecSphere::pack_data(double **buf) -{ - int nlocal = atom->nlocal; - for (int i = 0; i < nlocal; i++) { - buf[i][0] = ubuf(tag[i]).d; - buf[i][1] = ubuf(type[i]).d; - buf[i][2] = 2.0*radius[i]; - if (radius[i] == 0.0) buf[i][3] = rmass[i]; - else - buf[i][3] = rmass[i] / (4.0*MY_PI/3.0 * radius[i]*radius[i]*radius[i]); - buf[i][4] = x[i][0]; - buf[i][5] = x[i][1]; - buf[i][6] = x[i][2]; - buf[i][7] = ubuf((image[i] & IMGMASK) - IMGMAX).d; - buf[i][8] = ubuf((image[i] >> IMGBITS & IMGMASK) - IMGMAX).d; - buf[i][9] = ubuf((image[i] >> IMG2BITS) - IMGMAX).d; - } -} - -/* ---------------------------------------------------------------------- - pack hybrid atom info for data file -------------------------------------------------------------------------- */ - -int AtomVecSphere::pack_data_hybrid(int i, double *buf) -{ - buf[0] = 2.0*radius[i]; - if (radius[i] == 0.0) buf[1] = rmass[i]; - else buf[1] = rmass[i] / (4.0*MY_PI/3.0 * radius[i]*radius[i]*radius[i]); - return 2; + omega[ilocal][0] = 0.0; + omega[ilocal][1] = 0.0; + omega[ilocal][2] = 0.0; } /* ---------------------------------------------------------------------- - write atom info to data file including 3 image flags + modify values for AtomVec::pack_data() to pack ------------------------------------------------------------------------- */ -void AtomVecSphere::write_data(FILE *fp, int n, double **buf) +void AtomVecSphere::pack_data_pre(int ilocal) { - for (int i = 0; i < n; i++) - fprintf(fp,TAGINT_FORMAT - " %d %-1.16e %-1.16e %-1.16e %-1.16e %-1.16e %d %d %d\n", - (tagint) ubuf(buf[i][0]).i,(int) ubuf(buf[i][1]).i, - buf[i][2],buf[i][3], - buf[i][4],buf[i][5],buf[i][6], - (int) ubuf(buf[i][7]).i,(int) ubuf(buf[i][8]).i, - (int) ubuf(buf[i][9]).i); -} - -/* ---------------------------------------------------------------------- - write hybrid atom info to data file -------------------------------------------------------------------------- */ - -int AtomVecSphere::write_data_hybrid(FILE *fp, double *buf) -{ - fprintf(fp," %-1.16e %-1.16e",buf[0],buf[1]); - return 2; -} + radius_one = radius[ilocal]; + rmass_one = rmass[ilocal]; -/* ---------------------------------------------------------------------- - pack velocity info for data file -------------------------------------------------------------------------- */ - -void AtomVecSphere::pack_vel(double **buf) -{ - int nlocal = atom->nlocal; - for (int i = 0; i < nlocal; i++) { - buf[i][0] = ubuf(tag[i]).d; - buf[i][1] = v[i][0]; - buf[i][2] = v[i][1]; - buf[i][3] = v[i][2]; - buf[i][4] = omega[i][0]; - buf[i][5] = omega[i][1]; - buf[i][6] = omega[i][2]; - } + radius[ilocal] *= 2.0; + if (radius_one!= 0.0) + rmass[ilocal] = + rmass_one / (4.0*MY_PI/3.0 * radius_one*radius_one*radius_one); } /* ---------------------------------------------------------------------- - pack hybrid velocity info for data file + unmodify values packed by AtomVec::pack_data() ------------------------------------------------------------------------- */ -int AtomVecSphere::pack_vel_hybrid(int i, double *buf) +void AtomVecSphere::pack_data_post(int ilocal) { - buf[0] = omega[i][0]; - buf[1] = omega[i][1]; - buf[2] = omega[i][2]; - return 3; -} - -/* ---------------------------------------------------------------------- - write velocity info to data file -------------------------------------------------------------------------- */ - -void AtomVecSphere::write_vel(FILE *fp, int n, double **buf) -{ - for (int i = 0; i < n; i++) - fprintf(fp,TAGINT_FORMAT - " %-1.16e %-1.16e %-1.16e %-1.16e %-1.16e %-1.16e\n", - (tagint) ubuf(buf[i][0]).i,buf[i][1],buf[i][2],buf[i][3], - buf[i][4],buf[i][5],buf[i][6]); -} - -/* ---------------------------------------------------------------------- - write hybrid velocity info to data file -------------------------------------------------------------------------- */ - -int AtomVecSphere::write_vel_hybrid(FILE *fp, double *buf) -{ - fprintf(fp," %-1.16e %-1.16e %-1.16e",buf[0],buf[1],buf[2]); - return 3; -} - -/* ---------------------------------------------------------------------- - return # of bytes of allocated memory -------------------------------------------------------------------------- */ - -bigint AtomVecSphere::memory_usage() -{ - bigint bytes = 0; - - if (atom->memcheck("tag")) bytes += memory->usage(tag,nmax); - if (atom->memcheck("type")) bytes += memory->usage(type,nmax); - if (atom->memcheck("mask")) bytes += memory->usage(mask,nmax); - if (atom->memcheck("image")) bytes += memory->usage(image,nmax); - if (atom->memcheck("x")) bytes += memory->usage(x,nmax,3); - if (atom->memcheck("v")) bytes += memory->usage(v,nmax,3); - if (atom->memcheck("f")) bytes += memory->usage(f,nmax*comm->nthreads,3); - - if (atom->memcheck("radius")) bytes += memory->usage(radius,nmax); - if (atom->memcheck("rmass")) bytes += memory->usage(rmass,nmax); - if (atom->memcheck("omega")) bytes += memory->usage(omega,nmax,3); - if (atom->memcheck("torque")) - bytes += memory->usage(torque,nmax*comm->nthreads,3); - - return bytes; + radius[ilocal] = radius_one; + rmass[ilocal] = rmass_one; } diff --git a/src/atom_vec_sphere.h b/src/atom_vec_sphere.h index 28b1198d599c7234cd27f66a2ef46b6b3a777b23..bfd4e4241dee6d772c845ddcb9e83f0cae107c55 100644 --- a/src/atom_vec_sphere.h +++ b/src/atom_vec_sphere.h @@ -27,55 +27,21 @@ namespace LAMMPS_NS { class AtomVecSphere : public AtomVec { public: AtomVecSphere(class LAMMPS *); - ~AtomVecSphere() {} + void process_args(int, char **); void init(); - void grow(int); - void grow_reset(); - void copy(int, int, int); - int pack_comm(int, int *, double *, int, int *); - int pack_comm_vel(int, int *, double *, int, int *); - int pack_comm_hybrid(int, int *, double *); - void unpack_comm(int, int, double *); - void unpack_comm_vel(int, int, double *); - int unpack_comm_hybrid(int, int, double *); - int pack_reverse(int, int, double *); - int pack_reverse_hybrid(int, int, double *); - void unpack_reverse(int, int *, double *); - int unpack_reverse_hybrid(int, int *, double *); - int pack_border(int, int *, double *, int, int *); - int pack_border_vel(int, int *, double *, int, int *); - int pack_border_hybrid(int, int *, double *); - void unpack_border(int, int, double *); - void unpack_border_vel(int, int, double *); - int unpack_border_hybrid(int, int, double *); - int pack_exchange(int, double *); - int unpack_exchange(double *); - int size_restart(); - int pack_restart(int, double *); - int unpack_restart(double *); - void create_atom(int, double *); - void data_atom(double *, imageint, char **); - int data_atom_hybrid(int, char **); - void data_vel(int, char **); - int data_vel_hybrid(int, char **); - void pack_data(double **); - int pack_data_hybrid(int, double *); - void write_data(FILE *, int, double **); - int write_data_hybrid(FILE *, double *); - void pack_vel(double **); - int pack_vel_hybrid(int, double *); - void write_vel(FILE *, int, double **); - int write_vel_hybrid(FILE *, double *); - bigint memory_usage(); + + void grow_pointers(); + void create_atom_post(int); + void data_atom_post(int); + void pack_data_pre(int); + void pack_data_post(int); private: - tagint *tag; - int *type,*mask; - imageint *image; - double **x,**v,**f; double *radius,*rmass; - double **omega,**torque; + double **omega; + int radvary; + double radius_one,rmass_one; }; } @@ -85,15 +51,6 @@ class AtomVecSphere : public AtomVec { /* ERROR/WARNING messages: -E: Per-processor system is too big - -The number of owned atoms plus ghost atoms on a single -processor must fit in 32-bit integer. - -E: Invalid atom type in Atoms section of data file - -Atom types must range from 1 to specified # of types. - E: Invalid radius in Atoms section of data file Radius must be >= 0.0. diff --git a/src/atom_vec_tri.cpp b/src/atom_vec_tri.cpp index 3b7bfe53775c5aeff584da7761d49a7839b99744..d5ca2342e87e383f8d3586bc46bfaa01a7052b1e 100644 --- a/src/atom_vec_tri.cpp +++ b/src/atom_vec_tri.cpp @@ -16,7 +16,6 @@ #include #include "math_extra.h" #include "atom.h" -#include "comm.h" #include "domain.h" #include "modify.h" #include "fix.h" @@ -35,16 +34,12 @@ using namespace MathConst; AtomVecTri::AtomVecTri(LAMMPS *lmp) : AtomVec(lmp) { molecular = 0; + bonus_flag = 1; - comm_x_only = comm_f_only = 0; - size_forward = 7; - size_reverse = 6; - size_border = 26; - size_velocity = 9; - size_data_atom = 8; - size_data_vel = 7; + size_forward_bonus = 4; + size_border_bonus = 17; + size_restart_bonus_one = 17; size_data_bonus = 10; - xcol_data = 6; atom->tri_flag = 1; atom->molecule_flag = atom->rmass_flag = 1; @@ -55,8 +50,25 @@ AtomVecTri::AtomVecTri(LAMMPS *lmp) : AtomVec(lmp) nlocal_bonus = nghost_bonus = nmax_bonus = 0; bonus = NULL; - if (domain->dimension != 3) - error->all(FLERR,"Atom_style tri can only be used in 3d simulations"); + // strings with peratom variables to include in each AtomVec method + // strings cannot contain fields in corresponding AtomVec default strings + // order of fields in a string does not matter + // except: fields_data_atom & fields_data_vel must match data file + + fields_grow = (char *) "molecule radius rmass omega angmom torque tri"; + fields_copy = (char *) "molecule radius rmass omega angmom"; + fields_comm = (char *) ""; + fields_comm_vel = (char *) "omega angmom"; + fields_reverse = (char *) "torque"; + fields_border = (char *) "molecule radius rmass"; + fields_border_vel = (char *) "molecule radius rmass omega"; + fields_exchange = (char *) "molecule radius rmass omega angmom"; + fields_restart = (char *) "molecule radius rmass omega angmom"; + fields_create = (char *) "molecule radius rmass omega angmom tri"; + fields_data_atom = (char *) "id molecule type tri rmass x"; + fields_data_vel = (char *) "id v omega angmom"; + + setup_fields(); } /* ---------------------------------------------------------------------- */ @@ -77,53 +89,17 @@ void AtomVecTri::init() } /* ---------------------------------------------------------------------- - grow atom arrays - n = 0 grows arrays by a chunk - n > 0 allocates arrays to size n -------------------------------------------------------------------------- */ - -void AtomVecTri::grow(int n) -{ - if (n == 0) grow_nmax(); - else nmax = n; - atom->nmax = nmax; - if (nmax < 0 || nmax > MAXSMALLINT) - error->one(FLERR,"Per-processor system is too big"); - - tag = memory->grow(atom->tag,nmax,"atom:tag"); - type = memory->grow(atom->type,nmax,"atom:type"); - mask = memory->grow(atom->mask,nmax,"atom:mask"); - image = memory->grow(atom->image,nmax,"atom:image"); - x = memory->grow(atom->x,nmax,3,"atom:x"); - v = memory->grow(atom->v,nmax,3,"atom:v"); - f = memory->grow(atom->f,nmax*comm->nthreads,3,"atom:f"); - - molecule = memory->grow(atom->molecule,nmax,"atom:molecule"); - rmass = memory->grow(atom->rmass,nmax,"atom:rmass"); - radius = memory->grow(atom->radius,nmax,"atom:radius"); - omega = memory->grow(atom->omega,nmax,3,"atom:omega"); - angmom = memory->grow(atom->angmom,nmax,3,"atom:angmom"); - torque = memory->grow(atom->torque,nmax*comm->nthreads,3,"atom:torque"); - tri = memory->grow(atom->tri,nmax,"atom:tri"); - - if (atom->nextra_grow) - for (int iextra = 0; iextra < atom->nextra_grow; iextra++) - modify->fix[atom->extra_grow[iextra]]->grow_arrays(nmax); -} - -/* ---------------------------------------------------------------------- - reset local array ptrs + set local copies of all grow ptrs used by this class, except defaults + needed in replicate when 2 atom classes exist and it calls pack_restart() ------------------------------------------------------------------------- */ -void AtomVecTri::grow_reset() +void AtomVecTri::grow_pointers() { - tag = atom->tag; type = atom->type; - mask = atom->mask; image = atom->image; - x = atom->x; v = atom->v; f = atom->f; - molecule = atom->molecule; rmass = atom->rmass; - radius = atom->radius; omega = atom->omega; - angmom = atom->angmom; torque = atom->torque; tri = atom->tri; + radius = atom->radius; + rmass = atom->rmass; + omega = atom->omega; + angmom = atom->angmom; } /* ---------------------------------------------------------------------- @@ -145,33 +121,12 @@ void AtomVecTri::grow_bonus() if delflag and atom J has bonus data, then delete it ------------------------------------------------------------------------- */ -void AtomVecTri::copy(int i, int j, int delflag) +void AtomVecTri::copy_bonus(int i, int j, int delflag) { - tag[j] = tag[i]; - type[j] = type[i]; - mask[j] = mask[i]; - image[j] = image[i]; - x[j][0] = x[i][0]; - x[j][1] = x[i][1]; - x[j][2] = x[i][2]; - v[j][0] = v[i][0]; - v[j][1] = v[i][1]; - v[j][2] = v[i][2]; - - molecule[j] = molecule[i]; - rmass[j] = rmass[i]; - radius[j] = radius[i]; - omega[j][0] = omega[i][0]; - omega[j][1] = omega[i][1]; - omega[j][2] = omega[i][2]; - angmom[j][0] = angmom[i][0]; - angmom[j][1] = angmom[i][1]; - angmom[j][2] = angmom[i][2]; - // if deleting atom J via delflag and J has bonus data, then delete it if (delflag && tri[j] >= 0) { - copy_bonus(nlocal_bonus-1,tri[j]); + copy_bonus_all(nlocal_bonus-1,tri[j]); nlocal_bonus--; } @@ -180,10 +135,6 @@ void AtomVecTri::copy(int i, int j, int delflag) if (tri[i] >= 0 && i != j) bonus[tri[i]].ilocal = j; tri[j] = tri[i]; - - if (atom->nextra_grow) - for (int iextra = 0; iextra < atom->nextra_grow; iextra++) - modify->fix[atom->extra_grow[iextra]]->copy_arrays(i,j,delflag); } /* ---------------------------------------------------------------------- @@ -191,7 +142,7 @@ void AtomVecTri::copy(int i, int j, int delflag) also reset tri that points to I to now point to J ------------------------------------------------------------------------- */ -void AtomVecTri::copy_bonus(int i, int j) +void AtomVecTri::copy_bonus_all(int i, int j) { tri[bonus[i].ilocal] = j; memcpy(&bonus[j],&bonus[i],sizeof(Bonus)); @@ -211,229 +162,9 @@ void AtomVecTri::clear_bonus() modify->fix[atom->extra_grow[iextra]]->clear_bonus(); } -/* ---------------------------------------------------------------------- - set equilateral tri of size in bonus data for particle I - oriented symmetrically in xy plane - this may create or delete entry in bonus data -------------------------------------------------------------------------- */ - -void AtomVecTri::set_equilateral(int i, double size) -{ - // also set radius = distance from center to corner-pt = len(c1) - // unless size = 0.0, then set diameter = 1.0 - - if (tri[i] < 0) { - if (size == 0.0) return; - if (nlocal_bonus == nmax_bonus) grow_bonus(); - double *quat = bonus[nlocal_bonus].quat; - double *c1 = bonus[nlocal_bonus].c1; - double *c2 = bonus[nlocal_bonus].c2; - double *c3 = bonus[nlocal_bonus].c3; - double *inertia = bonus[nlocal_bonus].inertia; - quat[0] = 1.0; - quat[1] = 0.0; - quat[2] = 0.0; - quat[3] = 0.0; - c1[0] = -size/2.0; - c1[1] = -sqrt(3.0)/2.0 * size / 3.0; - c1[2] = 0.0; - c2[0] = size/2.0; - c2[1] = -sqrt(3.0)/2.0 * size / 3.0; - c2[2] = 0.0; - c3[0] = 0.0; - c3[1] = sqrt(3.0)/2.0 * size * 2.0/3.0; - c3[2] = 0.0; - inertia[0] = sqrt(3.0)/96.0 * size*size*size*size; - inertia[1] = sqrt(3.0)/96.0 * size*size*size*size; - inertia[2] = sqrt(3.0)/48.0 * size*size*size*size; - radius[i] = MathExtra::len3(c1); - bonus[nlocal_bonus].ilocal = i; - tri[i] = nlocal_bonus++; - } else if (size == 0.0) { - radius[i] = 0.5; - copy_bonus(nlocal_bonus-1,tri[i]); - nlocal_bonus--; - tri[i] = -1; - } else { - double *c1 = bonus[tri[i]].c1; - double *c2 = bonus[tri[i]].c2; - double *c3 = bonus[tri[i]].c3; - double *inertia = bonus[tri[i]].inertia; - c1[0] = -size/2.0; - c1[1] = -sqrt(3.0)/2.0 * size / 3.0; - c1[2] = 0.0; - c2[0] = size/2.0; - c2[1] = -sqrt(3.0)/2.0 * size / 3.0; - c2[2] = 0.0; - c3[0] = 0.0; - c3[1] = sqrt(3.0)/2.0 * size * 2.0/3.0; - c3[2] = 0.0; - inertia[0] = sqrt(3.0)/96.0 * size*size*size*size; - inertia[1] = sqrt(3.0)/96.0 * size*size*size*size; - inertia[2] = sqrt(3.0)/48.0 * size*size*size*size; - radius[i] = MathExtra::len3(c1); - } -} - /* ---------------------------------------------------------------------- */ -int AtomVecTri::pack_comm(int n, int *list, double *buf, - int pbc_flag, int *pbc) -{ - int i,j,m; - double dx,dy,dz; - double *quat; - - m = 0; - if (pbc_flag == 0) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = x[j][0]; - buf[m++] = x[j][1]; - buf[m++] = x[j][2]; - if (tri[j] >= 0) { - quat = bonus[tri[j]].quat; - buf[m++] = quat[0]; - buf[m++] = quat[1]; - buf[m++] = quat[2]; - buf[m++] = quat[3]; - } - } - } else { - if (domain->triclinic == 0) { - dx = pbc[0]*domain->xprd; - dy = pbc[1]*domain->yprd; - dz = pbc[2]*domain->zprd; - } else { - dx = pbc[0]*domain->xprd + pbc[5]*domain->xy + pbc[4]*domain->xz; - dy = pbc[1]*domain->yprd + pbc[3]*domain->yz; - dz = pbc[2]*domain->zprd; - } - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = x[j][0] + dx; - buf[m++] = x[j][1] + dy; - buf[m++] = x[j][2] + dz; - if (tri[j] >= 0) { - quat = bonus[tri[j]].quat; - buf[m++] = quat[0]; - buf[m++] = quat[1]; - buf[m++] = quat[2]; - buf[m++] = quat[3]; - } - } - } - - return m; -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecTri::pack_comm_vel(int n, int *list, double *buf, - int pbc_flag, int *pbc) -{ - int i,j,m; - double dx,dy,dz,dvx,dvy,dvz; - double *quat; - - m = 0; - if (pbc_flag == 0) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = x[j][0]; - buf[m++] = x[j][1]; - buf[m++] = x[j][2]; - if (tri[j] >= 0) { - quat = bonus[tri[j]].quat; - buf[m++] = quat[0]; - buf[m++] = quat[1]; - buf[m++] = quat[2]; - buf[m++] = quat[3]; - } - buf[m++] = v[j][0]; - buf[m++] = v[j][1]; - buf[m++] = v[j][2]; - buf[m++] = omega[j][0]; - buf[m++] = omega[j][1]; - buf[m++] = omega[j][2]; - buf[m++] = angmom[j][0]; - buf[m++] = angmom[j][1]; - buf[m++] = angmom[j][2]; - } - } else { - if (domain->triclinic == 0) { - dx = pbc[0]*domain->xprd; - dy = pbc[1]*domain->yprd; - dz = pbc[2]*domain->zprd; - } else { - dx = pbc[0]*domain->xprd + pbc[5]*domain->xy + pbc[4]*domain->xz; - dy = pbc[1]*domain->yprd + pbc[3]*domain->yz; - dz = pbc[2]*domain->zprd; - } - if (!deform_vremap) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = x[j][0] + dx; - buf[m++] = x[j][1] + dy; - buf[m++] = x[j][2] + dz; - if (tri[j] >= 0) { - quat = bonus[tri[j]].quat; - buf[m++] = quat[0]; - buf[m++] = quat[1]; - buf[m++] = quat[2]; - buf[m++] = quat[3]; - } - buf[m++] = v[j][0]; - buf[m++] = v[j][1]; - buf[m++] = v[j][2]; - buf[m++] = omega[j][0]; - buf[m++] = omega[j][1]; - buf[m++] = omega[j][2]; - buf[m++] = angmom[j][0]; - buf[m++] = angmom[j][1]; - buf[m++] = angmom[j][2]; - } - } else { - dvx = pbc[0]*h_rate[0] + pbc[5]*h_rate[5] + pbc[4]*h_rate[4]; - dvy = pbc[1]*h_rate[1] + pbc[3]*h_rate[3]; - dvz = pbc[2]*h_rate[2]; - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = x[j][0] + dx; - buf[m++] = x[j][1] + dy; - buf[m++] = x[j][2] + dz; - if (tri[j] >= 0) { - quat = bonus[tri[j]].quat; - buf[m++] = quat[0]; - buf[m++] = quat[1]; - buf[m++] = quat[2]; - buf[m++] = quat[3]; - } - if (mask[i] & deform_groupbit) { - buf[m++] = v[j][0] + dvx; - buf[m++] = v[j][1] + dvy; - buf[m++] = v[j][2] + dvz; - } else { - buf[m++] = v[j][0]; - buf[m++] = v[j][1]; - buf[m++] = v[j][2]; - } - buf[m++] = omega[j][0]; - buf[m++] = omega[j][1]; - buf[m++] = omega[j][2]; - buf[m++] = angmom[j][0]; - buf[m++] = angmom[j][1]; - buf[m++] = angmom[j][2]; - } - } - } - - return m; -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecTri::pack_comm_hybrid(int n, int *list, double *buf) +int AtomVecTri::pack_comm_bonus(int n, int *list, double *buf) { int i,j,m; double *quat; @@ -449,35 +180,13 @@ int AtomVecTri::pack_comm_hybrid(int n, int *list, double *buf) buf[m++] = quat[3]; } } - return m; -} -/* ---------------------------------------------------------------------- */ - -void AtomVecTri::unpack_comm(int n, int first, double *buf) -{ - int i,m,last; - double *quat; - - m = 0; - last = first + n; - for (i = first; i < last; i++) { - x[i][0] = buf[m++]; - x[i][1] = buf[m++]; - x[i][2] = buf[m++]; - if (tri[i] >= 0) { - quat = bonus[tri[i]].quat; - quat[0] = buf[m++]; - quat[1] = buf[m++]; - quat[2] = buf[m++]; - quat[3] = buf[m++]; - } - } + return m; } /* ---------------------------------------------------------------------- */ -void AtomVecTri::unpack_comm_vel(int n, int first, double *buf) +void AtomVecTri::unpack_comm_bonus(int n, int first, double *buf) { int i,m,last; double *quat; @@ -485,9 +194,6 @@ void AtomVecTri::unpack_comm_vel(int n, int first, double *buf) m = 0; last = first + n; for (i = first; i < last; i++) { - x[i][0] = buf[m++]; - x[i][1] = buf[m++]; - x[i][2] = buf[m++]; if (tri[i] >= 0) { quat = bonus[tri[i]].quat; quat[0] = buf[m++]; @@ -495,394 +201,12 @@ void AtomVecTri::unpack_comm_vel(int n, int first, double *buf) quat[2] = buf[m++]; quat[3] = buf[m++]; } - v[i][0] = buf[m++]; - v[i][1] = buf[m++]; - v[i][2] = buf[m++]; - omega[i][0] = buf[m++]; - omega[i][1] = buf[m++]; - omega[i][2] = buf[m++]; - angmom[i][0] = buf[m++]; - angmom[i][1] = buf[m++]; - angmom[i][2] = buf[m++]; - } -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecTri::unpack_comm_hybrid(int n, int first, double *buf) -{ - int i,m,last; - double *quat; - - m = 0; - last = first + n; - for (i = first; i < last; i++) - if (tri[i] >= 0) { - quat = bonus[tri[i]].quat; - quat[0] = buf[m++]; - quat[1] = buf[m++]; - quat[2] = buf[m++]; - quat[3] = buf[m++]; - } - return m; -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecTri::pack_reverse(int n, int first, double *buf) -{ - int i,m,last; - - m = 0; - last = first + n; - for (i = first; i < last; i++) { - buf[m++] = f[i][0]; - buf[m++] = f[i][1]; - buf[m++] = f[i][2]; - buf[m++] = torque[i][0]; - buf[m++] = torque[i][1]; - buf[m++] = torque[i][2]; - } - return m; -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecTri::pack_reverse_hybrid(int n, int first, double *buf) -{ - int i,m,last; - - m = 0; - last = first + n; - for (i = first; i < last; i++) { - buf[m++] = torque[i][0]; - buf[m++] = torque[i][1]; - buf[m++] = torque[i][2]; - } - return m; -} - -/* ---------------------------------------------------------------------- */ - -void AtomVecTri::unpack_reverse(int n, int *list, double *buf) -{ - int i,j,m; - - m = 0; - for (i = 0; i < n; i++) { - j = list[i]; - f[j][0] += buf[m++]; - f[j][1] += buf[m++]; - f[j][2] += buf[m++]; - torque[j][0] += buf[m++]; - torque[j][1] += buf[m++]; - torque[j][2] += buf[m++]; - } -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecTri::unpack_reverse_hybrid(int n, int *list, double *buf) -{ - int i,j,m; - - m = 0; - for (i = 0; i < n; i++) { - j = list[i]; - torque[j][0] += buf[m++]; - torque[j][1] += buf[m++]; - torque[j][2] += buf[m++]; - } - return m; -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecTri::pack_border(int n, int *list, double *buf, - int pbc_flag, int *pbc) -{ - int i,j,m; - double dx,dy,dz; - double *quat,*c1,*c2,*c3,*inertia; - - m = 0; - if (pbc_flag == 0) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = x[j][0]; - buf[m++] = x[j][1]; - buf[m++] = x[j][2]; - buf[m++] = ubuf(tag[j]).d; - buf[m++] = ubuf(type[j]).d; - buf[m++] = ubuf(mask[j]).d; - buf[m++] = ubuf(molecule[j]).d; - buf[m++] = radius[j]; - buf[m++] = rmass[j]; - if (tri[j] < 0) buf[m++] = ubuf(0).d; - else { - buf[m++] = ubuf(1).d; - quat = bonus[tri[j]].quat; - c1 = bonus[tri[j]].c1; - c2 = bonus[tri[j]].c2; - c3 = bonus[tri[j]].c3; - inertia = bonus[tri[j]].inertia; - buf[m++] = quat[0]; - buf[m++] = quat[1]; - buf[m++] = quat[2]; - buf[m++] = quat[3]; - buf[m++] = c1[0]; - buf[m++] = c1[1]; - buf[m++] = c1[2]; - buf[m++] = c2[0]; - buf[m++] = c2[1]; - buf[m++] = c2[2]; - buf[m++] = c3[0]; - buf[m++] = c3[1]; - buf[m++] = c3[2]; - buf[m++] = inertia[0]; - buf[m++] = inertia[1]; - buf[m++] = inertia[2]; - } - } - } else { - if (domain->triclinic == 0) { - dx = pbc[0]*domain->xprd; - dy = pbc[1]*domain->yprd; - dz = pbc[2]*domain->zprd; - } else { - dx = pbc[0]; - dy = pbc[1]; - dz = pbc[2]; - } - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = x[j][0] + dx; - buf[m++] = x[j][1] + dy; - buf[m++] = x[j][2] + dz; - buf[m++] = ubuf(tag[j]).d; - buf[m++] = ubuf(type[j]).d; - buf[m++] = ubuf(mask[j]).d; - buf[m++] = ubuf(molecule[j]).d; - buf[m++] = radius[j]; - buf[m++] = rmass[j]; - if (tri[j] < 0) buf[m++] = ubuf(0).d; - else { - buf[m++] = ubuf(1).d; - quat = bonus[tri[j]].quat; - c1 = bonus[tri[j]].c1; - c2 = bonus[tri[j]].c2; - c3 = bonus[tri[j]].c3; - inertia = bonus[tri[j]].inertia; - buf[m++] = quat[0]; - buf[m++] = quat[1]; - buf[m++] = quat[2]; - buf[m++] = quat[3]; - buf[m++] = c1[0]; - buf[m++] = c1[1]; - buf[m++] = c1[2]; - buf[m++] = c2[0]; - buf[m++] = c2[1]; - buf[m++] = c2[2]; - buf[m++] = c3[0]; - buf[m++] = c3[1]; - buf[m++] = c3[2]; - buf[m++] = inertia[0]; - buf[m++] = inertia[1]; - buf[m++] = inertia[2]; - } - } } - - if (atom->nextra_border) - for (int iextra = 0; iextra < atom->nextra_border; iextra++) - m += modify->fix[atom->extra_border[iextra]]->pack_border(n,list,&buf[m]); - - return m; } /* ---------------------------------------------------------------------- */ -int AtomVecTri::pack_border_vel(int n, int *list, double *buf, - int pbc_flag, int *pbc) -{ - int i,j,m; - double dx,dy,dz,dvx,dvy,dvz; - double *quat,*c1,*c2,*c3,*inertia; - - m = 0; - if (pbc_flag == 0) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = x[j][0]; - buf[m++] = x[j][1]; - buf[m++] = x[j][2]; - buf[m++] = ubuf(tag[j]).d; - buf[m++] = ubuf(type[j]).d; - buf[m++] = ubuf(mask[j]).d; - buf[m++] = ubuf(molecule[j]).d; - buf[m++] = radius[j]; - buf[m++] = rmass[j]; - if (tri[j] < 0) buf[m++] = ubuf(0).d; - else { - buf[m++] = ubuf(1).d; - quat = bonus[tri[j]].quat; - c1 = bonus[tri[j]].c1; - c2 = bonus[tri[j]].c2; - c3 = bonus[tri[j]].c3; - inertia = bonus[tri[j]].inertia; - buf[m++] = quat[0]; - buf[m++] = quat[1]; - buf[m++] = quat[2]; - buf[m++] = quat[3]; - buf[m++] = c1[0]; - buf[m++] = c1[1]; - buf[m++] = c1[2]; - buf[m++] = c2[0]; - buf[m++] = c2[1]; - buf[m++] = c2[2]; - buf[m++] = c3[0]; - buf[m++] = c3[1]; - buf[m++] = c3[2]; - buf[m++] = inertia[0]; - buf[m++] = inertia[1]; - buf[m++] = inertia[2]; - } - buf[m++] = v[j][0]; - buf[m++] = v[j][1]; - buf[m++] = v[j][2]; - buf[m++] = omega[j][0]; - buf[m++] = omega[j][1]; - buf[m++] = omega[j][2]; - buf[m++] = angmom[j][0]; - buf[m++] = angmom[j][1]; - buf[m++] = angmom[j][2]; - } - } else { - if (domain->triclinic == 0) { - dx = pbc[0]*domain->xprd; - dy = pbc[1]*domain->yprd; - dz = pbc[2]*domain->zprd; - } else { - dx = pbc[0]; - dy = pbc[1]; - dz = pbc[2]; - } - if (!deform_vremap) { - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = x[j][0] + dx; - buf[m++] = x[j][1] + dy; - buf[m++] = x[j][2] + dz; - buf[m++] = ubuf(tag[j]).d; - buf[m++] = ubuf(type[j]).d; - buf[m++] = ubuf(mask[j]).d; - buf[m++] = ubuf(molecule[j]).d; - buf[m++] = radius[j]; - buf[m++] = rmass[j]; - if (tri[j] < 0) buf[m++] = ubuf(0).d; - else { - buf[m++] = ubuf(1).d; - quat = bonus[tri[j]].quat; - c1 = bonus[tri[j]].c1; - c2 = bonus[tri[j]].c2; - c3 = bonus[tri[j]].c3; - inertia = bonus[tri[j]].inertia; - buf[m++] = quat[0]; - buf[m++] = quat[1]; - buf[m++] = quat[2]; - buf[m++] = quat[3]; - buf[m++] = c1[0]; - buf[m++] = c1[1]; - buf[m++] = c1[2]; - buf[m++] = c2[0]; - buf[m++] = c2[1]; - buf[m++] = c2[2]; - buf[m++] = c3[0]; - buf[m++] = c3[1]; - buf[m++] = c3[2]; - buf[m++] = inertia[0]; - buf[m++] = inertia[1]; - buf[m++] = inertia[2]; - } - buf[m++] = v[j][0]; - buf[m++] = v[j][1]; - buf[m++] = v[j][2]; - buf[m++] = omega[j][0]; - buf[m++] = omega[j][1]; - buf[m++] = omega[j][2]; - buf[m++] = angmom[j][0]; - buf[m++] = angmom[j][1]; - buf[m++] = angmom[j][2]; - } - } else { - dvx = pbc[0]*h_rate[0] + pbc[5]*h_rate[5] + pbc[4]*h_rate[4]; - dvy = pbc[1]*h_rate[1] + pbc[3]*h_rate[3]; - dvz = pbc[2]*h_rate[2]; - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = x[j][0] + dx; - buf[m++] = x[j][1] + dy; - buf[m++] = x[j][2] + dz; - buf[m++] = ubuf(tag[j]).d; - buf[m++] = ubuf(type[j]).d; - buf[m++] = ubuf(mask[j]).d; - buf[m++] = ubuf(molecule[j]).d; - buf[m++] = radius[j]; - buf[m++] = rmass[j]; - if (tri[j] < 0) buf[m++] = ubuf(0).d; - else { - buf[m++] = ubuf(1).d; - quat = bonus[tri[j]].quat; - c1 = bonus[tri[j]].c1; - c2 = bonus[tri[j]].c2; - c3 = bonus[tri[j]].c3; - inertia = bonus[tri[j]].inertia; - buf[m++] = quat[0]; - buf[m++] = quat[1]; - buf[m++] = quat[2]; - buf[m++] = quat[3]; - buf[m++] = c1[0]; - buf[m++] = c1[1]; - buf[m++] = c1[2]; - buf[m++] = c2[0]; - buf[m++] = c2[1]; - buf[m++] = c2[2]; - buf[m++] = c3[0]; - buf[m++] = c3[1]; - buf[m++] = c3[2]; - buf[m++] = inertia[0]; - buf[m++] = inertia[1]; - buf[m++] = inertia[2]; - } - if (mask[i] & deform_groupbit) { - buf[m++] = v[j][0] + dvx; - buf[m++] = v[j][1] + dvy; - buf[m++] = v[j][2] + dvz; - } else { - buf[m++] = v[j][0]; - buf[m++] = v[j][1]; - buf[m++] = v[j][2]; - } - buf[m++] = omega[j][0]; - buf[m++] = omega[j][1]; - buf[m++] = omega[j][2]; - buf[m++] = angmom[j][0]; - buf[m++] = angmom[j][1]; - buf[m++] = angmom[j][2]; - } - } - } - - if (atom->nextra_border) - for (int iextra = 0; iextra < atom->nextra_border; iextra++) - m += modify->fix[atom->extra_border[iextra]]->pack_border(n,list,&buf[m]); - - return m; -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecTri::pack_border_hybrid(int n, int *list, double *buf) +int AtomVecTri::pack_border_bonus(int n, int *list, double *buf) { int i,j,m; double *quat,*c1,*c2,*c3,*inertia; @@ -890,9 +214,6 @@ int AtomVecTri::pack_border_hybrid(int n, int *list, double *buf) m = 0; for (i = 0; i < n; i++) { j = list[i]; - buf[m++] = ubuf(molecule[j]).d; - buf[m++] = radius[j]; - buf[m++] = rmass[j]; if (tri[j] < 0) buf[m++] = ubuf(0).d; else { buf[m++] = ubuf(1).d; @@ -919,70 +240,13 @@ int AtomVecTri::pack_border_hybrid(int n, int *list, double *buf) buf[m++] = inertia[2]; } } - return m; -} - -/* ---------------------------------------------------------------------- */ -void AtomVecTri::unpack_border(int n, int first, double *buf) -{ - int i,j,m,last; - double *quat,*c1,*c2,*c3,*inertia; - - m = 0; - last = first + n; - for (i = first; i < last; i++) { - if (i == nmax) grow(0); - x[i][0] = buf[m++]; - x[i][1] = buf[m++]; - x[i][2] = buf[m++]; - tag[i] = (tagint) ubuf(buf[m++]).i; - type[i] = (int) ubuf(buf[m++]).i; - mask[i] = (int) ubuf(buf[m++]).i; - molecule[i] = (tagint) ubuf(buf[m++]).i; - radius[i] = buf[m++]; - rmass[i] = buf[m++]; - tri[i] = (int) ubuf(buf[m++]).i; - if (tri[i] == 0) tri[i] = -1; - else { - j = nlocal_bonus + nghost_bonus; - if (j == nmax_bonus) grow_bonus(); - quat = bonus[j].quat; - c1 = bonus[j].c1; - c2 = bonus[j].c2; - c3 = bonus[j].c3; - inertia = bonus[j].inertia; - quat[0] = buf[m++]; - quat[1] = buf[m++]; - quat[2] = buf[m++]; - quat[3] = buf[m++]; - c1[0] = buf[m++]; - c1[1] = buf[m++]; - c1[2] = buf[m++]; - c2[0] = buf[m++]; - c2[1] = buf[m++]; - c2[2] = buf[m++]; - c3[0] = buf[m++]; - c3[1] = buf[m++]; - c3[2] = buf[m++]; - inertia[0] = buf[m++]; - inertia[1] = buf[m++]; - inertia[2] = buf[m++]; - bonus[j].ilocal = i; - tri[i] = j; - nghost_bonus++; - } - } - - if (atom->nextra_border) - for (int iextra = 0; iextra < atom->nextra_border; iextra++) - m += modify->fix[atom->extra_border[iextra]]-> - unpack_border(n,first,&buf[m]); + return m; } /* ---------------------------------------------------------------------- */ -void AtomVecTri::unpack_border_vel(int n, int first, double *buf) +int AtomVecTri::unpack_border_bonus(int n, int first, double *buf) { int i,j,m,last; double *quat,*c1,*c2,*c3,*inertia; @@ -990,16 +254,6 @@ void AtomVecTri::unpack_border_vel(int n, int first, double *buf) m = 0; last = first + n; for (i = first; i < last; i++) { - if (i == nmax) grow(0); - x[i][0] = buf[m++]; - x[i][1] = buf[m++]; - x[i][2] = buf[m++]; - tag[i] = (tagint) ubuf(buf[m++]).i; - type[i] = (int) ubuf(buf[m++]).i; - mask[i] = (int) ubuf(buf[m++]).i; - molecule[i] = (tagint) ubuf(buf[m++]).i; - radius[i] = buf[m++]; - rmass[i] = buf[m++]; tri[i] = (int) ubuf(buf[m++]).i; if (tri[i] == 0) tri[i] = -1; else { @@ -1030,67 +284,8 @@ void AtomVecTri::unpack_border_vel(int n, int first, double *buf) tri[i] = j; nghost_bonus++; } - v[i][0] = buf[m++]; - v[i][1] = buf[m++]; - v[i][2] = buf[m++]; - omega[i][0] = buf[m++]; - omega[i][1] = buf[m++]; - omega[i][2] = buf[m++]; - angmom[i][0] = buf[m++]; - angmom[i][1] = buf[m++]; - angmom[i][2] = buf[m++]; } - if (atom->nextra_border) - for (int iextra = 0; iextra < atom->nextra_border; iextra++) - m += modify->fix[atom->extra_border[iextra]]-> - unpack_border(n,first,&buf[m]); -} - -/* ---------------------------------------------------------------------- */ - -int AtomVecTri::unpack_border_hybrid(int n, int first, double *buf) -{ - int i,j,m,last; - double *quat,*c1,*c2,*c3,*inertia; - - m = 0; - last = first + n; - for (i = first; i < last; i++) { - molecule[i] = (tagint) ubuf(buf[m++]).i; - radius[i] = buf[m++]; - rmass[i] = buf[m++]; - tri[i] = (int) ubuf(buf[m++]).i; - if (tri[i] == 0) tri[i] = -1; - else { - j = nlocal_bonus + nghost_bonus; - if (j == nmax_bonus) grow_bonus(); - quat = bonus[j].quat; - c1 = bonus[j].c1; - c2 = bonus[j].c2; - c3 = bonus[j].c3; - inertia = bonus[j].inertia; - quat[0] = buf[m++]; - quat[1] = buf[m++]; - quat[2] = buf[m++]; - quat[3] = buf[m++]; - c1[0] = buf[m++]; - c1[1] = buf[m++]; - c1[2] = buf[m++]; - c2[0] = buf[m++]; - c2[1] = buf[m++]; - c2[2] = buf[m++]; - c3[0] = buf[m++]; - c3[1] = buf[m++]; - c3[2] = buf[m++]; - inertia[0] = buf[m++]; - inertia[1] = buf[m++]; - inertia[2] = buf[m++]; - bonus[j].ilocal = i; - tri[i] = j; - nghost_bonus++; - } - } return m; } @@ -1099,29 +294,9 @@ int AtomVecTri::unpack_border_hybrid(int n, int first, double *buf) xyz must be 1st 3 values, so comm::exchange() can test on them ------------------------------------------------------------------------- */ -int AtomVecTri::pack_exchange(int i, double *buf) +int AtomVecTri::pack_exchange_bonus(int i, double *buf) { - int m = 1; - buf[m++] = x[i][0]; - buf[m++] = x[i][1]; - buf[m++] = x[i][2]; - buf[m++] = v[i][0]; - buf[m++] = v[i][1]; - buf[m++] = v[i][2]; - buf[m++] = ubuf(tag[i]).d; - buf[m++] = ubuf(type[i]).d; - buf[m++] = ubuf(mask[i]).d; - buf[m++] = ubuf(image[i]).d; - - buf[m++] = ubuf(molecule[i]).d; - buf[m++] = rmass[i]; - buf[m++] = radius[i]; - buf[m++] = omega[i][0]; - buf[m++] = omega[i][1]; - buf[m++] = omega[i][2]; - buf[m++] = angmom[i][0]; - buf[m++] = angmom[i][1]; - buf[m++] = angmom[i][2]; + int m = 0; if (tri[i] < 0) buf[m++] = ubuf(0).d; else { @@ -1150,45 +325,17 @@ int AtomVecTri::pack_exchange(int i, double *buf) buf[m++] = inertia[2]; } - if (atom->nextra_grow) - for (int iextra = 0; iextra < atom->nextra_grow; iextra++) - m += modify->fix[atom->extra_grow[iextra]]->pack_exchange(i,&buf[m]); - - buf[0] = m; return m; } /* ---------------------------------------------------------------------- */ -int AtomVecTri::unpack_exchange(double *buf) +int AtomVecTri::unpack_exchange_bonus(int ilocal, double *buf) { - int nlocal = atom->nlocal; - if (nlocal == nmax) grow(0); - - int m = 1; - x[nlocal][0] = buf[m++]; - x[nlocal][1] = buf[m++]; - x[nlocal][2] = buf[m++]; - v[nlocal][0] = buf[m++]; - v[nlocal][1] = buf[m++]; - v[nlocal][2] = buf[m++]; - tag[nlocal] = (tagint) ubuf(buf[m++]).i; - type[nlocal] = (int) ubuf(buf[m++]).i; - mask[nlocal] = (int) ubuf(buf[m++]).i; - image[nlocal] = (imageint) ubuf(buf[m++]).i; - - molecule[nlocal] = (tagint) ubuf(buf[m++]).i; - rmass[nlocal] = buf[m++]; - radius[nlocal] = buf[m++]; - omega[nlocal][0] = buf[m++]; - omega[nlocal][1] = buf[m++]; - omega[nlocal][2] = buf[m++]; - angmom[nlocal][0] = buf[m++]; - angmom[nlocal][1] = buf[m++]; - angmom[nlocal][2] = buf[m++]; - - tri[nlocal] = (int) ubuf(buf[m++]).i; - if (tri[nlocal] == 0) tri[nlocal] = -1; + int m = 0; + + tri[ilocal] = (int) ubuf(buf[m++]).i; + if (tri[ilocal] == 0) tri[ilocal] = -1; else { if (nlocal_bonus == nmax_bonus) grow_bonus(); double *quat = bonus[nlocal_bonus].quat; @@ -1212,16 +359,10 @@ int AtomVecTri::unpack_exchange(double *buf) inertia[0] = buf[m++]; inertia[1] = buf[m++]; inertia[2] = buf[m++]; - bonus[nlocal_bonus].ilocal = nlocal; - tri[nlocal] = nlocal_bonus++; + bonus[nlocal_bonus].ilocal = ilocal; + tri[ilocal] = nlocal_bonus++; } - if (atom->nextra_grow) - for (int iextra = 0; iextra < atom->nextra_grow; iextra++) - m += modify->fix[atom->extra_grow[iextra]]-> - unpack_exchange(nlocal,&buf[m]); - - atom->nlocal++; return m; } @@ -1230,53 +371,27 @@ int AtomVecTri::unpack_exchange(double *buf) include extra data stored by fixes ------------------------------------------------------------------------- */ -int AtomVecTri::size_restart() +int AtomVecTri::size_restart_bonus() { int i; int n = 0; int nlocal = atom->nlocal; - for (i = 0; i < nlocal; i++) - if (tri[i] >= 0) n += 37; - else n += 21; - - if (atom->nextra_restart) - for (int iextra = 0; iextra < atom->nextra_restart; iextra++) - for (i = 0; i < nlocal; i++) - n += modify->fix[atom->extra_restart[iextra]]->size_restart(i); + for (i = 0; i < nlocal; i++) { + if (tri[i] >= 0) n += size_restart_bonus_one; + else n++; + } return n; } /* ---------------------------------------------------------------------- - pack atom I's data for restart file including extra quantities - xyz must be 1st 3 values, so that read_restart can test on them - molecular types may be negative, but write as positive + unpack data for one atom from restart file including bonus data ------------------------------------------------------------------------- */ -int AtomVecTri::pack_restart(int i, double *buf) +int AtomVecTri::pack_restart_bonus(int i, double *buf) { - int m = 1; - buf[m++] = x[i][0]; - buf[m++] = x[i][1]; - buf[m++] = x[i][2]; - buf[m++] = ubuf(tag[i]).d; - buf[m++] = ubuf(type[i]).d; - buf[m++] = ubuf(mask[i]).d; - buf[m++] = ubuf(image[i]).d; - buf[m++] = v[i][0]; - buf[m++] = v[i][1]; - buf[m++] = v[i][2]; - - buf[m++] = ubuf(molecule[i]).d; - buf[m++] = rmass[i]; - buf[m++] = radius[i]; - buf[m++] = omega[i][0]; - buf[m++] = omega[i][1]; - buf[m++] = omega[i][2]; - buf[m++] = angmom[i][0]; - buf[m++] = angmom[i][1]; - buf[m++] = angmom[i][2]; + int m = 0; if (tri[i] < 0) buf[m++] = ubuf(0).d; else { @@ -1305,51 +420,19 @@ int AtomVecTri::pack_restart(int i, double *buf) buf[m++] = inertia[2]; } - if (atom->nextra_restart) - for (int iextra = 0; iextra < atom->nextra_restart; iextra++) - m += modify->fix[atom->extra_restart[iextra]]->pack_restart(i,&buf[m]); - - buf[0] = m; return m; } /* ---------------------------------------------------------------------- - unpack data for one atom from restart file including extra quantities + unpack data for one atom from restart file including bonus data ------------------------------------------------------------------------- */ -int AtomVecTri::unpack_restart(double *buf) +int AtomVecTri::unpack_restart_bonus(int ilocal, double *buf) { - int nlocal = atom->nlocal; - if (nlocal == nmax) { - grow(0); - if (atom->nextra_store) - memory->grow(atom->extra,nmax,atom->nextra_store,"atom:extra"); - } + int m = 0; - int m = 1; - x[nlocal][0] = buf[m++]; - x[nlocal][1] = buf[m++]; - x[nlocal][2] = buf[m++]; - tag[nlocal] = (tagint) ubuf(buf[m++]).i; - type[nlocal] = (int) ubuf(buf[m++]).i; - mask[nlocal] = (int) ubuf(buf[m++]).i; - image[nlocal] = (imageint) ubuf(buf[m++]).i; - v[nlocal][0] = buf[m++]; - v[nlocal][1] = buf[m++]; - v[nlocal][2] = buf[m++]; - - molecule[nlocal] = (tagint) ubuf(buf[m++]).i; - rmass[nlocal] = buf[m++]; - radius[nlocal] = buf[m++]; - omega[nlocal][0] = buf[m++]; - omega[nlocal][1] = buf[m++]; - omega[nlocal][2] = buf[m++]; - angmom[nlocal][0] = buf[m++]; - angmom[nlocal][1] = buf[m++]; - angmom[nlocal][2] = buf[m++]; - - tri[nlocal] = (int) ubuf(buf[m++]).i; - if (tri[nlocal] == 0) tri[nlocal] = -1; + tri[ilocal] = (int) ubuf(buf[m++]).i; + if (tri[ilocal] == 0) tri[ilocal] = -1; else { if (nlocal_bonus == nmax_bonus) grow_bonus(); double *quat = bonus[nlocal_bonus].quat; @@ -1373,134 +456,13 @@ int AtomVecTri::unpack_restart(double *buf) inertia[0] = buf[m++]; inertia[1] = buf[m++]; inertia[2] = buf[m++]; - bonus[nlocal_bonus].ilocal = nlocal; - tri[nlocal] = nlocal_bonus++; - } - - double **extra = atom->extra; - if (atom->nextra_store) { - int size = static_cast (buf[0]) - m; - for (int i = 0; i < size; i++) extra[nlocal][i] = buf[m++]; + bonus[nlocal_bonus].ilocal = ilocal; + tri[ilocal] = nlocal_bonus++; } - atom->nlocal++; return m; } -/* ---------------------------------------------------------------------- - create one atom of itype at coord - set other values to defaults -------------------------------------------------------------------------- */ - -void AtomVecTri::create_atom(int itype, double *coord) -{ - int nlocal = atom->nlocal; - if (nlocal == nmax) grow(0); - - tag[nlocal] = 0; - type[nlocal] = itype; - x[nlocal][0] = coord[0]; - x[nlocal][1] = coord[1]; - x[nlocal][2] = coord[2]; - mask[nlocal] = 1; - image[nlocal] = ((imageint) IMGMAX << IMG2BITS) | - ((imageint) IMGMAX << IMGBITS) | IMGMAX; - v[nlocal][0] = 0.0; - v[nlocal][1] = 0.0; - v[nlocal][2] = 0.0; - - molecule[nlocal] = 0; - radius[nlocal] = 0.5; - rmass[nlocal] = 4.0*MY_PI/3.0 * radius[nlocal]*radius[nlocal]*radius[nlocal]; - omega[nlocal][0] = 0.0; - omega[nlocal][1] = 0.0; - omega[nlocal][2] = 0.0; - angmom[nlocal][0] = 0.0; - angmom[nlocal][1] = 0.0; - angmom[nlocal][2] = 0.0; - tri[nlocal] = -1; - - atom->nlocal++; -} - -/* ---------------------------------------------------------------------- - unpack one line from Atoms section of data file - initialize other atom quantities -------------------------------------------------------------------------- */ - -void AtomVecTri::data_atom(double *coord, imageint imagetmp, char **values) -{ - int nlocal = atom->nlocal; - if (nlocal == nmax) grow(0); - - tag[nlocal] = utils::tnumeric(FLERR,values[0],true,lmp); - molecule[nlocal] = utils::tnumeric(FLERR,values[1],true,lmp); - type[nlocal] = utils::inumeric(FLERR,values[2],true,lmp); - if (type[nlocal] <= 0 || type[nlocal] > atom->ntypes) - error->one(FLERR,"Invalid atom type in Atoms section of data file"); - - tri[nlocal] = utils::inumeric(FLERR,values[3],true,lmp); - if (tri[nlocal] == 0) tri[nlocal] = -1; - else if (tri[nlocal] == 1) tri[nlocal] = 0; - else error->one(FLERR,"Invalid triflag in Atoms section of data file"); - - rmass[nlocal] = utils::numeric(FLERR,values[4],true,lmp); - if (rmass[nlocal] <= 0.0) - error->one(FLERR,"Invalid density in Atoms section of data file"); - - if (tri[nlocal] < 0) { - radius[nlocal] = 0.5; - rmass[nlocal] *= 4.0*MY_PI/3.0 * - radius[nlocal]*radius[nlocal]*radius[nlocal]; - } else radius[nlocal] = 0.0; - - x[nlocal][0] = coord[0]; - x[nlocal][1] = coord[1]; - x[nlocal][2] = coord[2]; - - image[nlocal] = imagetmp; - - mask[nlocal] = 1; - v[nlocal][0] = 0.0; - v[nlocal][1] = 0.0; - v[nlocal][2] = 0.0; - omega[nlocal][0] = 0.0; - omega[nlocal][1] = 0.0; - omega[nlocal][2] = 0.0; - angmom[nlocal][0] = 0.0; - angmom[nlocal][1] = 0.0; - angmom[nlocal][2] = 0.0; - - atom->nlocal++; -} - -/* ---------------------------------------------------------------------- - unpack hybrid quantities from one tri in Atoms section of data file - initialize other atom quantities for this sub-style -------------------------------------------------------------------------- */ - -int AtomVecTri::data_atom_hybrid(int nlocal, char **values) -{ - molecule[nlocal] = utils::tnumeric(FLERR,values[0],true,lmp); - - tri[nlocal] = utils::inumeric(FLERR,values[1],true,lmp); - if (tri[nlocal] == 0) tri[nlocal] = -1; - else if (tri[nlocal] == 1) tri[nlocal] = 0; - else error->one(FLERR,"Invalid atom type in Atoms section of data file"); - - rmass[nlocal] = utils::numeric(FLERR,values[2],true,lmp); - if (rmass[nlocal] <= 0.0) - error->one(FLERR,"Invalid density in Atoms section of data file"); - - if (tri[nlocal] < 0) { - radius[nlocal] = 0.5; - rmass[nlocal] *= 4.0*MY_PI/3.0 * - radius[nlocal]*radius[nlocal]*radius[nlocal]; - } else radius[nlocal] = 0.0; - - return 3; -} - /* ---------------------------------------------------------------------- unpack one line from Tris section of data file ------------------------------------------------------------------------- */ @@ -1635,207 +597,154 @@ void AtomVecTri::data_atom_bonus(int m, char **values) } /* ---------------------------------------------------------------------- - unpack one line from Velocities section of data file + return # of bytes of allocated bonus memory ------------------------------------------------------------------------- */ -void AtomVecTri::data_vel(int m, char **values) +bigint AtomVecTri::memory_usage_bonus() { - v[m][0] = utils::numeric(FLERR,values[0],true,lmp); - v[m][1] = utils::numeric(FLERR,values[1],true,lmp); - v[m][2] = utils::numeric(FLERR,values[2],true,lmp); - omega[m][0] = utils::numeric(FLERR,values[3],true,lmp); - omega[m][1] = utils::numeric(FLERR,values[4],true,lmp); - omega[m][2] = utils::numeric(FLERR,values[5],true,lmp); - angmom[m][0] = utils::numeric(FLERR,values[6],true,lmp); - angmom[m][1] = utils::numeric(FLERR,values[7],true,lmp); - angmom[m][2] = utils::numeric(FLERR,values[8],true,lmp); + bigint bytes = 0; + bytes += nmax_bonus*sizeof(Bonus); + return bytes; } /* ---------------------------------------------------------------------- - unpack hybrid quantities from one line in Velocities section of data file + create one atom of itype at coord + set other values to defaults ------------------------------------------------------------------------- */ -int AtomVecTri::data_vel_hybrid(int m, char **values) +void AtomVecTri::create_atom_post(int ilocal) { - omega[m][0] = utils::numeric(FLERR,values[0],true,lmp); - omega[m][1] = utils::numeric(FLERR,values[1],true,lmp); - omega[m][2] = utils::numeric(FLERR,values[2],true,lmp); - angmom[m][0] = utils::numeric(FLERR,values[3],true,lmp); - angmom[m][1] = utils::numeric(FLERR,values[4],true,lmp); - angmom[m][2] = utils::numeric(FLERR,values[5],true,lmp); - return 6; + double radius_one = 0.5; + radius[ilocal] = radius_one; + rmass[ilocal] = 4.0*MY_PI/3.0 * radius_one*radius_one*radius_one; + tri[ilocal] = -1; } /* ---------------------------------------------------------------------- - pack atom info for data file including 3 image flags + modify what AtomVec::data_atom() just unpacked + or initialize other atom quantities ------------------------------------------------------------------------- */ -void AtomVecTri::pack_data(double **buf) +void AtomVecTri::data_atom_post(int ilocal) { - double c2mc1[3],c3mc1[3],norm[3]; - double area; - - int nlocal = atom->nlocal; - for (int i = 0; i < nlocal; i++) { - buf[i][0] = ubuf(tag[i]).d; - buf[i][1] = ubuf(molecule[i]).d; - buf[i][2] = ubuf(type[i]).d; - if (tri[i] < 0) buf[i][3] = ubuf(0).d; - else buf[i][3] = ubuf(1).d; - if (tri[i] < 0) - buf[i][4] = rmass[i] / (4.0*MY_PI/3.0 * radius[i]*radius[i]*radius[i]); - else { - MathExtra::sub3(bonus[tri[i]].c2,bonus[tri[i]].c1,c2mc1); - MathExtra::sub3(bonus[tri[i]].c3,bonus[tri[i]].c1,c3mc1); - MathExtra::cross3(c2mc1,c3mc1,norm); - area = 0.5 * MathExtra::len3(norm); - buf[i][4] = rmass[i]/area; - } - buf[i][5] = x[i][0]; - buf[i][6] = x[i][1]; - buf[i][7] = x[i][2]; - buf[i][8] = ubuf((image[i] & IMGMASK) - IMGMAX).d; - buf[i][9] = ubuf((image[i] >> IMGBITS & IMGMASK) - IMGMAX).d; - buf[i][10] = ubuf((image[i] >> IMG2BITS) - IMGMAX).d; - } -} + tri_flag = tri[ilocal]; + if (tri_flag == 0) tri_flag = -1; + else if (tri_flag == 1) tri_flag = 0; + else error->one(FLERR,"Invalid tri flag in Atoms section of data file"); + tri[ilocal] = tri_flag; -/* ---------------------------------------------------------------------- - pack hybrid atom info for data file -------------------------------------------------------------------------- */ - -int AtomVecTri::pack_data_hybrid(int i, double *buf) -{ - buf[0] = ubuf(molecule[i]).d; - if (tri[i] < 0) buf[1] = ubuf(0).d; - else buf[1] = ubuf(1).d; - if (tri[i] < 0) - buf[2] = rmass[i] / (4.0*MY_PI/3.0 * radius[i]*radius[i]*radius[i]); - else { - double c2mc1[3],c3mc1[3],norm[3]; - MathExtra::sub3(bonus[tri[i]].c2,bonus[tri[i]].c1,c2mc1); - MathExtra::sub3(bonus[tri[i]].c3,bonus[tri[i]].c1,c3mc1); - MathExtra::cross3(c2mc1,c3mc1,norm); - double area = 0.5 * MathExtra::len3(norm); - buf[2] = rmass[i]/area; - } - return 3; -} + if (rmass[ilocal] <= 0.0) + error->one(FLERR,"Invalid density in Atoms section of data file"); -/* ---------------------------------------------------------------------- - write atom info to data file including 3 image flags -------------------------------------------------------------------------- */ + if (tri_flag < 0) { + double radius_one = 0.5; + radius[ilocal] = radius_one; + rmass[ilocal] *= 4.0*MY_PI/3.0 * radius_one*radius_one*radius_one; + } else radius[ilocal] = 0.0; -void AtomVecTri::write_data(FILE *fp, int n, double **buf) -{ - for (int i = 0; i < n; i++) - fprintf(fp,TAGINT_FORMAT " " TAGINT_FORMAT - " %d %d %-1.16e %-1.16e %-1.16e %-1.16e %d %d %d\n", - (tagint) ubuf(buf[i][0]).i,(tagint) ubuf(buf[i][1]).i, - (int) ubuf(buf[i][2]).i,(int) ubuf(buf[i][3]).i, - buf[i][4],buf[i][5],buf[i][6],buf[i][7], - (int) ubuf(buf[i][8]).i,(int) ubuf(buf[i][9]).i, - (int) ubuf(buf[i][10]).i); + omega[ilocal][0] = 0.0; + omega[ilocal][1] = 0.0; + omega[ilocal][2] = 0.0; + angmom[ilocal][0] = 0.0; + angmom[ilocal][1] = 0.0; + angmom[ilocal][2] = 0.0; } /* ---------------------------------------------------------------------- - write hybrid atom info to data file + modify values for AtomVec::pack_data() to pack ------------------------------------------------------------------------- */ -int AtomVecTri::write_data_hybrid(FILE *fp, double *buf) +void AtomVecTri::pack_data_pre(int ilocal) { - fprintf(fp," " TAGINT_FORMAT " %d %-1.16e", - (tagint) ubuf(buf[0]).i,(int) ubuf(buf[1]).i,buf[2]); - return 3; -} + tri_flag = tri[ilocal]; + rmass_one = rmass[ilocal]; -/* ---------------------------------------------------------------------- - pack velocity info for data file -------------------------------------------------------------------------- */ + if (tri_flag < 0) tri[ilocal] = 0; + else tri[ilocal] = 1; -void AtomVecTri::pack_vel(double **buf) -{ - int nlocal = atom->nlocal; - for (int i = 0; i < nlocal; i++) { - buf[i][0] = ubuf(tag[i]).d; - buf[i][1] = v[i][0]; - buf[i][2] = v[i][1]; - buf[i][3] = v[i][2]; - buf[i][4] = omega[i][0]; - buf[i][5] = omega[i][1]; - buf[i][6] = omega[i][2]; - buf[i][7] = angmom[i][0]; - buf[i][8] = angmom[i][1]; - buf[i][9] = angmom[i][2]; + if (tri_flag < 0) { + double radius_one = radius[ilocal]; + rmass[ilocal] /= 4.0*MY_PI/3.0 * radius_one*radius_one*radius_one; + } else { + double c2mc1[3],c3mc1[3],norm[3]; + MathExtra::sub3(bonus[tri_flag].c2,bonus[tri_flag].c1,c2mc1); + MathExtra::sub3(bonus[tri_flag].c3,bonus[tri_flag].c1,c3mc1); + MathExtra::cross3(c2mc1,c3mc1,norm); + double area = 0.5 * MathExtra::len3(norm); + rmass[ilocal] /= area; } } /* ---------------------------------------------------------------------- - pack hybrid velocity info for data file + unmodify values packed by AtomVec::pack_data() ------------------------------------------------------------------------- */ -int AtomVecTri::pack_vel_hybrid(int i, double *buf) +void AtomVecTri::pack_data_post(int ilocal) { - buf[0] = omega[i][0]; - buf[1] = omega[i][1]; - buf[2] = omega[i][2]; - buf[3] = angmom[i][0]; - buf[4] = angmom[i][1]; - buf[5] = angmom[i][2]; - return 6; + tri[ilocal] = tri_flag; + rmass[ilocal] = rmass_one; } /* ---------------------------------------------------------------------- - write velocity info to data file -------------------------------------------------------------------------- */ - -void AtomVecTri::write_vel(FILE *fp, int n, double **buf) -{ - for (int i = 0; i < n; i++) - fprintf(fp,TAGINT_FORMAT - " %-1.16e %-1.16e %-1.16e %-1.16e %-1.16e %-1.16e " - "%-1.16e %-1.16e %-1.16e\n", - (tagint) ubuf(buf[i][0]).i,buf[i][1],buf[i][2],buf[i][3], - buf[i][4],buf[i][5],buf[i][6],buf[i][7],buf[i][8],buf[i][9]); -} - -/* ---------------------------------------------------------------------- - write hybrid velocity info to data file -------------------------------------------------------------------------- */ - -int AtomVecTri::write_vel_hybrid(FILE *fp, double *buf) -{ - fprintf(fp," %-1.16e %-1.16e %-1.16e %-1.16e %-1.16e %-1.16e", - buf[0],buf[1],buf[2],buf[3],buf[4],buf[5]); - return 6; -} - -/* ---------------------------------------------------------------------- - return # of bytes of allocated memory + set equilateral tri of size in bonus data for particle I + oriented symmetrically in xy plane + this may create or delete entry in bonus data ------------------------------------------------------------------------- */ -bigint AtomVecTri::memory_usage() +void AtomVecTri::set_equilateral(int i, double size) { - bigint bytes = 0; - - if (atom->memcheck("tag")) bytes += memory->usage(tag,nmax); - if (atom->memcheck("type")) bytes += memory->usage(type,nmax); - if (atom->memcheck("mask")) bytes += memory->usage(mask,nmax); - if (atom->memcheck("image")) bytes += memory->usage(image,nmax); - if (atom->memcheck("x")) bytes += memory->usage(x,nmax,3); - if (atom->memcheck("v")) bytes += memory->usage(v,nmax,3); - if (atom->memcheck("f")) bytes += memory->usage(f,nmax*comm->nthreads,3); - - if (atom->memcheck("molecule")) bytes += memory->usage(molecule,nmax); - if (atom->memcheck("rmass")) bytes += memory->usage(rmass,nmax); - if (atom->memcheck("radius")) bytes += memory->usage(radius,nmax); - if (atom->memcheck("omega")) bytes += memory->usage(omega,nmax,3); - if (atom->memcheck("angmom")) bytes += memory->usage(angmom,nmax,3); - if (atom->memcheck("torque")) bytes += - memory->usage(torque,nmax*comm->nthreads,3); - if (atom->memcheck("tri")) bytes += memory->usage(tri,nmax); - - bytes += nmax_bonus*sizeof(Bonus); + // also set radius = distance from center to corner-pt = len(c1) + // unless size = 0.0, then set diameter = 1.0 - return bytes; + if (tri[i] < 0) { + if (size == 0.0) return; + if (nlocal_bonus == nmax_bonus) grow_bonus(); + double *quat = bonus[nlocal_bonus].quat; + double *c1 = bonus[nlocal_bonus].c1; + double *c2 = bonus[nlocal_bonus].c2; + double *c3 = bonus[nlocal_bonus].c3; + double *inertia = bonus[nlocal_bonus].inertia; + quat[0] = 1.0; + quat[1] = 0.0; + quat[2] = 0.0; + quat[3] = 0.0; + c1[0] = -size/2.0; + c1[1] = -sqrt(3.0)/2.0 * size / 3.0; + c1[2] = 0.0; + c2[0] = size/2.0; + c2[1] = -sqrt(3.0)/2.0 * size / 3.0; + c2[2] = 0.0; + c3[0] = 0.0; + c3[1] = sqrt(3.0)/2.0 * size * 2.0/3.0; + c3[2] = 0.0; + inertia[0] = sqrt(3.0)/96.0 * size*size*size*size; + inertia[1] = sqrt(3.0)/96.0 * size*size*size*size; + inertia[2] = sqrt(3.0)/48.0 * size*size*size*size; + radius[i] = MathExtra::len3(c1); + bonus[nlocal_bonus].ilocal = i; + tri[i] = nlocal_bonus++; + } else if (size == 0.0) { + radius[i] = 0.5; + copy_bonus_all(nlocal_bonus-1,tri[i]); + nlocal_bonus--; + tri[i] = -1; + } else { + double *c1 = bonus[tri[i]].c1; + double *c2 = bonus[tri[i]].c2; + double *c3 = bonus[tri[i]].c3; + double *inertia = bonus[tri[i]].inertia; + c1[0] = -size/2.0; + c1[1] = -sqrt(3.0)/2.0 * size / 3.0; + c1[2] = 0.0; + c2[0] = size/2.0; + c2[1] = -sqrt(3.0)/2.0 * size / 3.0; + c2[2] = 0.0; + c3[0] = 0.0; + c3[1] = sqrt(3.0)/2.0 * size * 2.0/3.0; + c3[2] = 0.0; + inertia[0] = sqrt(3.0)/96.0 * size*size*size*size; + inertia[1] = sqrt(3.0)/96.0 * size*size*size*size; + inertia[2] = sqrt(3.0)/48.0 * size*size*size*size; + radius[i] = MathExtra::len3(c1); + } } diff --git a/src/atom_vec_tri.h b/src/atom_vec_tri.h index 81b4c1ada916b6720a9a86420a362b865b66a166..0b16285fe61fe609d76fb90c89a00eee3194e02d 100644 --- a/src/atom_vec_tri.h +++ b/src/atom_vec_tri.h @@ -37,49 +37,26 @@ class AtomVecTri : public AtomVec { AtomVecTri(class LAMMPS *); ~AtomVecTri(); void init(); - void grow(int); - void grow_reset(); - void copy(int, int, int); - int pack_comm(int, int *, double *, int, int *); - int pack_comm_vel(int, int *, double *, int, int *); - int pack_comm_hybrid(int, int *, double *); - void unpack_comm(int, int, double *); - void unpack_comm_vel(int, int, double *); - int unpack_comm_hybrid(int, int, double *); - int pack_reverse(int, int, double *); - int pack_reverse_hybrid(int, int, double *); - void unpack_reverse(int, int *, double *); - int unpack_reverse_hybrid(int, int *, double *); - int pack_border(int, int *, double *, int, int *); - int pack_border_vel(int, int *, double *, int, int *); - int pack_border_hybrid(int, int *, double *); - void unpack_border(int, int, double *); - void unpack_border_vel(int, int, double *); - int unpack_border_hybrid(int, int, double *); - int pack_exchange(int, double *); - int unpack_exchange(double *); - int size_restart(); - int pack_restart(int, double *); - int unpack_restart(double *); - void create_atom(int, double *); - void data_atom(double *, imageint, char **); - int data_atom_hybrid(int, char **); - void data_vel(int, char **); - int data_vel_hybrid(int, char **); - void pack_data(double **); - int pack_data_hybrid(int, double *); - void write_data(FILE *, int, double **); - int write_data_hybrid(FILE *, double *); - void pack_vel(double **); - int pack_vel_hybrid(int, double *); - void write_vel(FILE *, int, double **); - int write_vel_hybrid(FILE *, double *); - bigint memory_usage(); - - // manipulate Bonus data structure for extra atom info + void grow_pointers(); + void copy_bonus(int, int, int); void clear_bonus(); + int pack_comm_bonus(int, int *, double *); + void unpack_comm_bonus(int, int, double *); + int pack_border_bonus(int, int *, double *); + int unpack_border_bonus(int, int, double *); + int pack_exchange_bonus(int, double *); + int unpack_exchange_bonus(int, double *); + int size_restart_bonus(); + int pack_restart_bonus(int, double *); + int unpack_restart_bonus(int, double *); void data_atom_bonus(int, char **); + bigint memory_usage_bonus(); + + void create_atom_post(int); + void data_atom_post(int); + void pack_data_pre(int); + void pack_data_post(int); // unique to AtomVecTri @@ -88,19 +65,16 @@ class AtomVecTri : public AtomVec { int nlocal_bonus; private: - tagint *tag; - int *type,*mask; - imageint *image; - double **x,**v,**f; - tagint *molecule; - double *rmass,*radius; - double **omega,**angmom,**torque; int *tri; + double *radius,*rmass; + double **omega,**angmom; int nghost_bonus,nmax_bonus; + int tri_flag; + double rmass_one; void grow_bonus(); - void copy_bonus(int, int); + void copy_bonus_all(int, int); }; } diff --git a/src/bond.h b/src/bond.h index b558a2a35e5d8bf6e1ac352d2af530e48244d7c8..8d7585b3889d69ba0101f2d3c12e91f86b1fa7e6 100644 --- a/src/bond.h +++ b/src/bond.h @@ -52,7 +52,7 @@ class Bond : protected Pointers { virtual void write_data(FILE *) {} virtual double single(int, double, int, int, double &) = 0; virtual double memory_usage(); - virtual void *extract(char *, int &) {return NULL;} + virtual void *extract(const char *, int &) {return NULL;} virtual void reinit(); void write_file(int, char**); diff --git a/src/bond_zero.cpp b/src/bond_zero.cpp index 428fd0ace2d54c94563a785aca02dbc19d8e009d..cb336ddd6731cbd003a735a8b712468454c6c8b9 100644 --- a/src/bond_zero.cpp +++ b/src/bond_zero.cpp @@ -144,8 +144,6 @@ void BondZero::write_data(FILE *fp) fprintf(fp,"%d %g\n",i,r0[i]); } - - /* ---------------------------------------------------------------------- */ double BondZero::single(int /*type*/, double /*rsq*/, int /*i*/, int /*j*/, @@ -153,3 +151,12 @@ double BondZero::single(int /*type*/, double /*rsq*/, int /*i*/, int /*j*/, { return 0.0; } + +/* ---------------------------------------------------------------------- */ + +void *BondZero::extract(const char *str, int &dim) +{ + dim = 1; + if (strcmp(str,"r0")==0) return (void*) r0; + return NULL; +} diff --git a/src/bond_zero.h b/src/bond_zero.h index 7cbd2b9a96f78d68686b73a50cb49e7d27da16bb..b31e89edf7e063dc7741e2c0ee34e0db7a669df0 100644 --- a/src/bond_zero.h +++ b/src/bond_zero.h @@ -38,6 +38,7 @@ class BondZero : public Bond { void write_data(FILE *); double single(int, double, int, int, double &); + virtual void *extract(const char *, int &); protected: double *r0; diff --git a/src/change_box.cpp b/src/change_box.cpp index 98119fb3bf0d9972e763c0f804fa1d4c7de9ff75..7ae49ca776516e6117b53e6539b1c82526cfa150 100644 --- a/src/change_box.cpp +++ b/src/change_box.cpp @@ -46,9 +46,6 @@ void ChangeBox::command(int narg, char **arg) if (domain->box_exist == 0) error->all(FLERR,"Change_box command before simulation box is defined"); if (narg < 2) error->all(FLERR,"Illegal change_box command"); - if (modify->nfix_restart_peratom) - error->all(FLERR,"Cannot change_box after " - "reading restart file with per-atom info"); if (comm->me == 0 && screen) fprintf(screen,"Changing box ...\n"); @@ -174,6 +171,21 @@ void ChangeBox::command(int narg, char **arg) if (nops == 0) error->all(FLERR,"Illegal change_box command"); + // move_atoms = 1 if need to move atoms to new procs after box changes + // anything other than ORTHO or TRICLINIC may cause atom movement + + int move_atoms = 0; + for (int m = 0; m < nops; m++) { + if (ops[m].style != ORTHO || ops[m].style != TRICLINIC) move_atoms = 1; + } + + // error if moving atoms and there is stored per-atom restart state + // disallowed b/c restart per-atom fix info will not move with atoms + + if (move_atoms && modify->nfix_restart_peratom) + error->all(FLERR,"Change_box parameter not allowed after " + "reading restart file with per-atom info"); + // read options from end of input line options(narg-iarg,&arg[iarg]); @@ -350,6 +362,10 @@ void ChangeBox::command(int narg, char **arg) if (domain->triclinic) domain->lamda2x(atom->nlocal); } + // done if don't need to move atoms + + if (!move_atoms) return; + // move atoms back inside simulation box and to new processors // use remap() instead of pbc() // in case box moved a long distance relative to atoms diff --git a/src/compute.cpp b/src/compute.cpp index cc92d2b5d32e34c9dc334599c3d9cd5c7628ce4f..4009396eb0099ad580054ee93096ed978082f6f7 100644 --- a/src/compute.cpp +++ b/src/compute.cpp @@ -102,6 +102,7 @@ Compute::Compute(LAMMPS *lmp, int narg, char **arg) : datamask_modify = ALL_MASK; copymode = 0; + kokkosable = 0; } /* ---------------------------------------------------------------------- */ diff --git a/src/compute.h b/src/compute.h index c28af32c26296477ddad286aeca48cbde7b5b8f9..66974bf106450f7036c6936906b14017f0ec75ba 100644 --- a/src/compute.h +++ b/src/compute.h @@ -91,7 +91,7 @@ class Compute : protected Pointers { ExecutionSpace execution_space; unsigned int datamask_read,datamask_modify; - int copymode; + int copymode,kokkosable; Compute(class LAMMPS *, int, char **); virtual ~Compute(); diff --git a/src/compute_centroid_stress_atom.cpp b/src/compute_centroid_stress_atom.cpp index 3f5b2cba8190bdc17fdc458f3ddaf22732ae5c4f..7c979c66d7a3c5c41304b50b77f1e7178ab8035d 100644 --- a/src/compute_centroid_stress_atom.cpp +++ b/src/compute_centroid_stress_atom.cpp @@ -177,7 +177,7 @@ void ComputeCentroidStressAtom::compute_peratom() // per-atom virial and per-atom centroid virial are the same for two-body // many-body pair styles not yet implemented - if (pairflag && force->pair) { + if (pairflag && force->pair && force->pair->compute_flag) { if (force->pair->centroidstressflag & 2) { double **cvatom = force->pair->cvatom; for (i = 0; i < npair; i++) @@ -226,7 +226,7 @@ void ComputeCentroidStressAtom::compute_peratom() stress[i][j] += cvatom[i][j]; } - if (kspaceflag && force->kspace) { + if (kspaceflag && force->kspace && force->kspace->compute_flag) { double **vatom = force->kspace->vatom; for (i = 0; i < nkspace; i++) { for (j = 0; j < 6; j++) @@ -258,7 +258,7 @@ void ComputeCentroidStressAtom::compute_peratom() // communicate ghost virials between neighbor procs - if (force->newton || (force->kspace && force->kspace->tip4pflag)) + if (force->newton || (force->kspace && force->kspace->tip4pflag && force->kspace->compute_flag)) comm->reverse_comm_compute(this); // zero virial of atoms not in group diff --git a/src/compute_coord_atom.cpp b/src/compute_coord_atom.cpp index 30747c13140d1c2ffff8d8eaf36951ab98cc5a67..4a96c29a240c5f962c8a26e4abac290d6bea7a7c 100644 --- a/src/compute_coord_atom.cpp +++ b/src/compute_coord_atom.cpp @@ -27,6 +27,7 @@ #include "group.h" #include "memory.h" #include "error.h" +#include "utils.h" using namespace LAMMPS_NS; @@ -93,7 +94,7 @@ ComputeCoordAtom::ComputeCoordAtom(LAMMPS *lmp, int narg, char **arg) : int iorientorder = modify->find_compute(id_orientorder); if (iorientorder < 0) error->all(FLERR,"Could not find compute coord/atom compute ID"); - if (strcmp(modify->compute[iorientorder]->style,"orientorder/atom") != 0) + if (!utils::strmatch(modify->compute[iorientorder]->style,"^orientorder/atom")) error->all(FLERR,"Compute coord/atom compute ID is not orientorder/atom"); threshold = force->numeric(FLERR,arg[5]); @@ -119,6 +120,8 @@ ComputeCoordAtom::ComputeCoordAtom(LAMMPS *lmp, int narg, char **arg) : ComputeCoordAtom::~ComputeCoordAtom() { + if (copymode) return; + delete [] group2; delete [] typelo; delete [] typehi; @@ -138,7 +141,7 @@ void ComputeCoordAtom::init() l = c_orientorder->qlcomp; // communicate real and imaginary 2*l+1 components of the normalized vector comm_forward = 2*(2*l+1); - if (c_orientorder->iqlcomp < 0) + if (!(c_orientorder->qlcompflag)) error->all(FLERR,"Compute coord/atom requires components " "option in compute orientorder/atom"); } diff --git a/src/compute_coord_atom.h b/src/compute_coord_atom.h index 2a54613cc626d80baf9abe9c8a5ce1dd5a3fd582..31bab18d87331cd06e68665c5b5f4bbe531ce39c 100644 --- a/src/compute_coord_atom.h +++ b/src/compute_coord_atom.h @@ -27,16 +27,16 @@ namespace LAMMPS_NS { class ComputeCoordAtom : public Compute { public: ComputeCoordAtom(class LAMMPS *, int, char **); - ~ComputeCoordAtom(); - void init(); + virtual ~ComputeCoordAtom(); + virtual void init(); void init_list(int, class NeighList *); - void compute_peratom(); + virtual void compute_peratom(); int pack_forward_comm(int, int *, double *, int, int *); void unpack_forward_comm(int, int, double *); double memory_usage(); enum {NONE,CUTOFF,ORIENT}; - private: + protected: int nmax,ncol; double cutsq; class NeighList *list; diff --git a/src/compute_orientorder_atom.cpp b/src/compute_orientorder_atom.cpp index 3dafd08a0f67f3928de606012d9b4d0df34f1e7e..f84798e5c307cca2fd546314446f2b65b86dcbd8 100644 --- a/src/compute_orientorder_atom.cpp +++ b/src/compute_orientorder_atom.cpp @@ -61,6 +61,7 @@ ComputeOrientOrderAtom::ComputeOrientOrderAtom(LAMMPS *lmp, int narg, char **arg wlflag = 0; wlhatflag = 0; qlcompflag = 0; + chunksize = 16384; // specify which orders to request @@ -143,6 +144,13 @@ ComputeOrientOrderAtom::ComputeOrientOrderAtom(LAMMPS *lmp, int narg, char **arg error->all(FLERR,"Illegal compute orientorder/atom command"); cutsq = cutoff*cutoff; iarg += 2; + } else if (strcmp(arg[iarg],"chunksize") == 0) { + if (iarg+2 > narg) + error->all(FLERR,"Illegal compute orientorder/atom command"); + chunksize = force->numeric(FLERR,arg[iarg+1]); + if (chunksize <= 0) + error->all(FLERR,"Illegal compute orientorder/atom command"); + iarg += 2; } else error->all(FLERR,"Illegal compute orientorder/atom command"); } @@ -162,6 +170,8 @@ ComputeOrientOrderAtom::ComputeOrientOrderAtom(LAMMPS *lmp, int narg, char **arg ComputeOrientOrderAtom::~ComputeOrientOrderAtom() { + if (copymode) return; + memory->destroy(qnarray); memory->destroy(distsq); memory->destroy(rlist); diff --git a/src/compute_orientorder_atom.h b/src/compute_orientorder_atom.h index 643875ccd01c805720d8a272daf6141652518216..4e5084bfcd9b37aa773a3c59f05215c26167ac24 100644 --- a/src/compute_orientorder_atom.h +++ b/src/compute_orientorder_atom.h @@ -28,16 +28,16 @@ class ComputeOrientOrderAtom : public Compute { public: ComputeOrientOrderAtom(class LAMMPS *, int, char **); ~ComputeOrientOrderAtom(); - void init(); + virtual void init(); void init_list(int, class NeighList *); - void compute_peratom(); + virtual void compute_peratom(); double memory_usage(); double cutsq; int iqlcomp, qlcomp, qlcompflag, wlflag, wlhatflag; int *qlist; int nqlist; - private: + protected: int nmax,maxneigh,ncol,nnn; class NeighList *list; double *distsq; @@ -59,9 +59,10 @@ class ComputeOrientOrderAtom : public Compute { static const int nmaxfactorial = 167; static const double nfac_table[]; double factorial(int); - void init_clebsch_gordan(); + virtual void init_clebsch_gordan(); double *cglist; // Clebsch-Gordan coeffs int idxcg_max; + int chunksize; }; } diff --git a/src/compute_pe_atom.cpp b/src/compute_pe_atom.cpp index 274e1b05a6dc299c39877ac4d846c8d7aa54ac6b..6bdd729502b1cb1c9c32c355527888de5349c0cc 100644 --- a/src/compute_pe_atom.cpp +++ b/src/compute_pe_atom.cpp @@ -119,7 +119,7 @@ void ComputePEAtom::compute_peratom() // add in per-atom contributions from each force - if (pairflag && force->pair) { + if (pairflag && force->pair && force->pair->compute_flag) { double *eatom = force->pair->eatom; for (i = 0; i < npair; i++) energy[i] += eatom[i]; } @@ -144,7 +144,7 @@ void ComputePEAtom::compute_peratom() for (i = 0; i < nbond; i++) energy[i] += eatom[i]; } - if (kspaceflag && force->kspace) { + if (kspaceflag && force->kspace && force->kspace->compute_flag) { double *eatom = force->kspace->eatom; for (i = 0; i < nkspace; i++) energy[i] += eatom[i]; } diff --git a/src/compute_stress_atom.cpp b/src/compute_stress_atom.cpp index 7c0ed9ef1707ba7908769f35eea20690ce0b53a1..9c65ee86c25b6a977a1746e88bffc24b85ff5aed 100644 --- a/src/compute_stress_atom.cpp +++ b/src/compute_stress_atom.cpp @@ -170,7 +170,7 @@ void ComputeStressAtom::compute_peratom() // add in per-atom contributions from each force - if (pairflag && force->pair) { + if (pairflag && force->pair && force->pair->compute_flag) { double **vatom = force->pair->vatom; for (i = 0; i < npair; i++) for (j = 0; j < 6; j++) @@ -205,7 +205,7 @@ void ComputeStressAtom::compute_peratom() stress[i][j] += vatom[i][j]; } - if (kspaceflag && force->kspace) { + if (kspaceflag && force->kspace && force->kspace->compute_flag) { double **vatom = force->kspace->vatom; for (i = 0; i < nkspace; i++) for (j = 0; j < 6; j++) diff --git a/src/create_atoms.cpp b/src/create_atoms.cpp index 5325b8b9b157977d071e5b78771931e75d9d09f9..17a58504babeed365c3fddb779e7a6dfdf50daad 100644 --- a/src/create_atoms.cpp +++ b/src/create_atoms.cpp @@ -38,6 +38,10 @@ #include "error.h" #include "memory.h" +#include +#include "utils.h" +#include "fmt/format.h" + using namespace LAMMPS_NS; using namespace MathConst; @@ -581,20 +585,11 @@ void CreateAtoms::command(int narg, char **arg) // print status MPI_Barrier(world); - double time2 = MPI_Wtime(); - - if (me == 0) { - if (screen) { - fprintf(screen,"Created " BIGINT_FORMAT " atoms\n", - atom->natoms-natoms_previous); - fprintf(screen," create_atoms CPU = %g secs\n",time2-time1); - } - if (logfile) { - fprintf(logfile,"Created " BIGINT_FORMAT " atoms\n", - atom->natoms-natoms_previous); - fprintf(logfile," create_atoms CPU = %g secs\n",time2-time1); - } - } + if (me == 0) + utils::logmesg(lmp, fmt::format("Created {} atoms\n" + " create_atoms CPU = {:.3g} seconds\n", + atom->natoms - natoms_previous, + MPI_Wtime() - time1)); } /* ---------------------------------------------------------------------- diff --git a/src/dihedral.cpp b/src/dihedral.cpp index 7c6f6aad5e9f024be4d310d9d789ad384b65d799..ac2d432cfb8a231e830f503ed9d86b7d34519553 100644 --- a/src/dihedral.cpp +++ b/src/dihedral.cpp @@ -18,6 +18,7 @@ #include "atom_masks.h" #include "memory.h" #include "error.h" +#include "suffix.h" using namespace LAMMPS_NS; @@ -32,6 +33,7 @@ Dihedral::Dihedral(LAMMPS *lmp) : Pointers(lmp) writedata = 0; allocated = 0; + suffix_flag = Suffix::NONE; maxeatom = maxvatom = maxcvatom = 0; eatom = NULL; diff --git a/src/domain.cpp b/src/domain.cpp index e8946825569abb46ec311fb385f8e9cd353b41a9..e1a9744fde181d1703734577126cfd51ed3c5200 100644 --- a/src/domain.cpp +++ b/src/domain.cpp @@ -19,6 +19,7 @@ #include #include #include +#include #include "style_region.h" #include "atom.h" #include "atom_vec.h" @@ -133,13 +134,39 @@ void Domain::init() box_change_size = box_change_shape = box_change_domain = 0; + // flags for detecting, if multiple fixes try to change the + // same box size or shape parameter + + int box_change_x=0, box_change_y=0, box_change_z=0; + int box_change_yz=0, box_change_xz=0, box_change_xy=0; + Fix **fixes = modify->fix; + if (nonperiodic == 2) box_change_size = 1; for (int i = 0; i < modify->nfix; i++) { - if (modify->fix[i]->box_change_size) box_change_size = 1; - if (modify->fix[i]->box_change_shape) box_change_shape = 1; - if (modify->fix[i]->box_change_domain) box_change_domain = 1; + if (fixes[i]->box_change & Fix::BOX_CHANGE_SIZE) box_change_size = 1; + if (fixes[i]->box_change & Fix::BOX_CHANGE_SHAPE) box_change_shape = 1; + if (fixes[i]->box_change & Fix::BOX_CHANGE_DOMAIN) box_change_domain = 1; + if (fixes[i]->box_change & Fix::BOX_CHANGE_X) box_change_x++; + if (fixes[i]->box_change & Fix::BOX_CHANGE_Y) box_change_y++; + if (fixes[i]->box_change & Fix::BOX_CHANGE_Z) box_change_z++; + if (fixes[i]->box_change & Fix::BOX_CHANGE_YZ) box_change_yz++; + if (fixes[i]->box_change & Fix::BOX_CHANGE_XZ) box_change_xz++; + if (fixes[i]->box_change & Fix::BOX_CHANGE_XY) box_change_xy++; } + std::string mesg = "Must not have multiple fixes change box parameter "; + +#define CHECK_BOX_FIX_ERROR(par) \ + if (box_change_ ## par > 1) error->all(FLERR,(mesg + #par).c_str()) + + CHECK_BOX_FIX_ERROR(x); + CHECK_BOX_FIX_ERROR(y); + CHECK_BOX_FIX_ERROR(z); + CHECK_BOX_FIX_ERROR(yz); + CHECK_BOX_FIX_ERROR(xz); + CHECK_BOX_FIX_ERROR(xy); +#undef CHECK_BOX_FIX_ERROR + box_change = 0; if (box_change_size || box_change_shape || box_change_domain) box_change = 1; @@ -1847,6 +1874,12 @@ void Domain::set_boundary(int narg, char **arg, int flag) if (boundary[2][0] == 0) zperiodic = 1; else zperiodic = 0; + // record if we changed a periodic boundary to a non-periodic one + int pflag=0; + if ((periodicity[0] && !xperiodic) + || (periodicity[1] && !yperiodic) + || (periodicity[2] && !zperiodic)) pflag = 1; + periodicity[0] = xperiodic; periodicity[1] = yperiodic; periodicity[2] = zperiodic; @@ -1858,6 +1891,24 @@ void Domain::set_boundary(int narg, char **arg, int flag) boundary[1][0] >= 2 || boundary[1][1] >= 2 || boundary[2][0] >= 2 || boundary[2][1] >= 2) nonperiodic = 2; } + if (pflag) { + pflag = 0; + for (int i=0; i < atom->nlocal; ++i) { + int xbox = (atom->image[i] & IMGMASK) - IMGMAX; + int ybox = (atom->image[i] >> IMGBITS & IMGMASK) - IMGMAX; + int zbox = (atom->image[i] >> IMG2BITS) - IMGMAX; + if (!xperiodic) { xbox = 0; pflag = 1; } + if (!yperiodic) { ybox = 0; pflag = 1; } + if (!zperiodic) { zbox = 0; pflag = 1; } + atom->image[i] = ((imageint) (xbox + IMGMAX) & IMGMASK) | + (((imageint) (ybox + IMGMAX) & IMGMASK) << IMGBITS) | + (((imageint) (zbox + IMGMAX) & IMGMASK) << IMG2BITS); + } + int flag_all; + MPI_Allreduce(&flag,&flag_all, 1, MPI_INT, MPI_SUM, world); + if ((flag_all > 0) && (comm->me == 0)) + error->warning(FLERR,"Reset image flags for non-periodic boundary"); + } } /* ---------------------------------------------------------------------- diff --git a/src/domain.h b/src/domain.h index a0bda8ae720e379384006cd27aefd04f48ffc595..0ce31a8b4adbd24c5d9c542410e48fe78050bdfe 100644 --- a/src/domain.h +++ b/src/domain.h @@ -282,6 +282,10 @@ E: Both sides of boundary must be periodic Cannot specify a boundary as periodic only on the lo or hi side. Must be periodic on both sides. +E: Must not have multiple fixes change box parameter ... + +Self-explanatory. + U: Box bounds are invalid The box boundaries specified in the read_data file are invalid. The diff --git a/src/fix.cpp b/src/fix.cpp index d86acf0ae46ba1cb46895393893bab235701993b..8a82e35d9438fd7e4145173b6e6d4839402b9a06 100644 --- a/src/fix.cpp +++ b/src/fix.cpp @@ -58,7 +58,7 @@ Fix::Fix(LAMMPS *lmp, int /*narg*/, char **arg) : restart_global = restart_peratom = restart_file = 0; force_reneighbor = 0; - box_change_size = box_change_shape = box_change_domain = 0; + box_change = NO_BOX_CHANGE; thermo_energy = 0; thermo_virial = 0; rigid_flag = 0; @@ -79,6 +79,7 @@ Fix::Fix(LAMMPS *lmp, int /*narg*/, char **arg) : respa_level = -1; maxexchange = 0; maxexchange_dynamic = 0; + pre_exchange_migrate = 0; scalar_flag = vector_flag = array_flag = 0; peratom_flag = local_flag = 0; diff --git a/src/fix.h b/src/fix.h index bcab6f289ef24e70bd72077186d6155203cdbe95..558caf23e93363b9c54d4d14cd5769690ad586eb 100644 --- a/src/fix.h +++ b/src/fix.h @@ -30,9 +30,14 @@ class Fix : protected Pointers { int restart_file; // 1 if Fix writes own restart file, 0 if not int force_reneighbor; // 1 if Fix forces reneighboring, 0 if not - int box_change_size; // 1 if Fix changes box size, 0 if not - int box_change_shape; // 1 if Fix changes box shape, 0 if not - int box_change_domain; // 1 if Fix changes proc sub-domains, 0 if not + int box_change; // >0 if Fix changes box size, shape, or sub-domains, 0 if not + enum { + NO_BOX_CHANGE = 0, BOX_CHANGE_ANY = 1<<0, BOX_CHANGE_DOMAIN = 1<<1, + BOX_CHANGE_X = 1<<2, BOX_CHANGE_Y = 1<<3, BOX_CHANGE_Z = 1<<4, + BOX_CHANGE_YZ = 1<<5, BOX_CHANGE_XZ = 1<<6, BOX_CHANGE_XY = 1<<7, + BOX_CHANGE_SIZE = BOX_CHANGE_X | BOX_CHANGE_Y | BOX_CHANGE_Z, + BOX_CHANGE_SHAPE = BOX_CHANGE_YZ | BOX_CHANGE_XZ | BOX_CHANGE_XY + }; bigint next_reneighbor; // next timestep to force a reneighboring int thermo_energy; // 1 if fix_modify enabled ThEng, 0 if not @@ -58,6 +63,7 @@ class Fix : protected Pointers { int respa_level; // which respa level to apply fix (1-Nrespa) int maxexchange; // max # of per-atom values for Comm::exchange() int maxexchange_dynamic; // 1 if fix sets maxexchange dynamically + int pre_exchange_migrate; // 1 if fix migrates atoms in pre_exchange() int scalar_flag; // 0/1 if compute_scalar() function exists int vector_flag; // 0/1 if compute_vector() function exists diff --git a/src/fix_adapt.cpp b/src/fix_adapt.cpp index 8668690e1db821d6ebe4ddea34cc416bd272a15c..f241d4ea36f6dfc58f7eea95eb5299819c36394f 100644 --- a/src/fix_adapt.cpp +++ b/src/fix_adapt.cpp @@ -15,6 +15,7 @@ #include #include "atom.h" #include "bond.h" +#include "domain.h" #include "update.h" #include "group.h" #include "modify.h" @@ -139,9 +140,11 @@ nadapt(0), id_fix_diam(NULL), id_fix_chg(NULL), adapt(NULL) } else if (strcmp(arg[iarg],"atom") == 0) { if (iarg+3 > narg) error->all(FLERR,"Illegal fix adapt command"); adapt[nadapt].which = ATOM; - if (strcmp(arg[iarg+1],"diameter") == 0) { + if (strcmp(arg[iarg+1],"diameter") == 0 || strcmp(arg[iarg+1],"diameter/disc") == 0) { adapt[nadapt].aparam = DIAMETER; diamflag = 1; + discflag = 0; + if (strcmp(arg[iarg+1],"diameter/disc") == 0) discflag = 1; } else if (strcmp(arg[iarg+1],"charge") == 0) { adapt[nadapt].aparam = CHARGE; chgflag = 1; @@ -235,7 +238,6 @@ int FixAdapt::setmask() void FixAdapt::post_constructor() { - if (!resetflag) return; if (!diamflag && !chgflag) return; // new id = fix-ID + FIX_STORE_ATTRIBUTE @@ -251,7 +253,7 @@ void FixAdapt::post_constructor() newarg[4] = (char *) "1"; newarg[5] = (char *) "1"; - if (diamflag) { + if (diamflag && atom->radius_flag) { int n = strlen(id) + strlen("_FIX_STORE_DIAM") + 1; id_fix_diam = new char[n]; strcpy(id_fix_diam,id); @@ -274,7 +276,7 @@ void FixAdapt::post_constructor() } } - if (chgflag) { + if (chgflag && atom->q_flag) { int n = strlen(id) + strlen("_FIX_STORE_CHG") + 1; id_fix_chg = new char[n]; strcpy(id_fix_chg,id); @@ -428,6 +430,10 @@ void FixAdapt::init() if (ad->aparam == DIAMETER) { if (!atom->radius_flag) error->all(FLERR,"Fix adapt requires atom attribute diameter"); + if (!atom->rmass_flag) + error->all(FLERR,"Fix adapt requires atom attribute mass"); + if (discflag && domain->dimension!=2) + error->all(FLERR,"Fix adapt requires 2d simulation"); } if (ad->aparam == CHARGE) { if (!atom->q_flag) @@ -568,38 +574,44 @@ void FixAdapt::change_settings() // also scale rmass to new value if (ad->aparam == DIAMETER) { - int mflag = 0; - if (atom->rmass_flag) mflag = 1; double density; + // Get initial diameter if `scale` keyword is used + + double *vec = fix_diam->vstore; double *radius = atom->radius; double *rmass = atom->rmass; int *mask = atom->mask; int nlocal = atom->nlocal; int nall = nlocal + atom->nghost; - if (mflag == 0) { - for (i = 0; i < nall; i++) - if (mask[i] & groupbit) - radius[i] = 0.5*value; - } else { - for (i = 0; i < nall; i++) - if (mask[i] & groupbit) { - density = rmass[i] / (4.0*MY_PI/3.0 * - radius[i]*radius[i]*radius[i]); - radius[i] = 0.5*value; - rmass[i] = 4.0*MY_PI/3.0 * - radius[i]*radius[i]*radius[i] * density; - } - } + for (i = 0; i < nall; i++) + if (mask[i] & groupbit) { + if (discflag) density = rmass[i] / (MY_PI * radius[i]*radius[i]); + else density = rmass[i] / (4.0*MY_PI/3.0 * + radius[i]*radius[i]*radius[i]); + if (scaleflag) radius[i] = value * vec[i]; + else radius[i] = 0.5*value; + if (discflag) rmass[i] = MY_PI * radius[i]*radius[i] * density; + else rmass[i] = 4.0*MY_PI/3.0 * + radius[i]*radius[i]*radius[i] * density; + } + } else if (ad->aparam == CHARGE) { + + // Get initial charge if `scale` keyword is used + + double *vec = fix_chg->vstore; double *q = atom->q; int *mask = atom->mask; int nlocal = atom->nlocal; int nall = nlocal + atom->nghost; for (i = 0; i < nall; i++) - if (mask[i] & groupbit) q[i] = value; + if (mask[i] & groupbit) { + if (scaleflag) q[i] = value * vec[i]; + else q[i] = value; + } } } } @@ -607,7 +619,7 @@ void FixAdapt::change_settings() modify->addstep_compute(update->ntimestep + nevery); // re-initialize pair styles if any PAIR settings were changed - // ditto for bond styles if any BOND setitings were changes + // ditto for bond styles if any BOND settings were changed // this resets other coeffs that may depend on changed values, // and also offset and tail corrections @@ -670,10 +682,13 @@ void FixAdapt::restore_settings() for (int i = 0; i < nlocal; i++) if (mask[i] & groupbit) { - density = rmass[i] / (4.0*MY_PI/3.0 * - radius[i]*radius[i]*radius[i]); + if(discflag) density = rmass[i] / (MY_PI * radius[i]*radius[i]); + else density = rmass[i] / (4.0*MY_PI/3.0 * + radius[i]*radius[i]*radius[i]); radius[i] = vec[i]; - rmass[i] = 4.0*MY_PI/3.0 * radius[i]*radius[i]*radius[i] * density; + if(discflag) rmass[i] = MY_PI * radius[i]*radius[i] * density; + else rmass[i] = 4.0*MY_PI/3.0 * + radius[i]*radius[i]*radius[i] * density; } } if (chgflag) { diff --git a/src/fix_adapt.h b/src/fix_adapt.h index 0bb594b7a407b55dfec76ebe89d7726bb78e4ecb..26def03a1dfc3b18f8504508aeefbf727aa72bf1 100644 --- a/src/fix_adapt.h +++ b/src/fix_adapt.h @@ -47,6 +47,7 @@ class FixAdapt : public Fix { int nlevels_respa; char *id_fix_diam,*id_fix_chg; class FixStore *fix_diam,*fix_chg; + int discflag; struct Adapt { int which,ivar; diff --git a/src/fix_balance.cpp b/src/fix_balance.cpp index 83973efab7d18a239ee95e2c1a4aebef590f2384..f374a7c5c53cb4e4e8759818cca7346f96222d33 100644 --- a/src/fix_balance.cpp +++ b/src/fix_balance.cpp @@ -39,7 +39,8 @@ FixBalance::FixBalance(LAMMPS *lmp, int narg, char **arg) : { if (narg < 6) error->all(FLERR,"Illegal fix balance command"); - box_change_domain = 1; + box_change = BOX_CHANGE_DOMAIN; + pre_exchange_migrate = 1; scalar_flag = 1; extscalar = 0; vector_flag = 1; diff --git a/src/fix_box_relax.cpp b/src/fix_box_relax.cpp index c19ea918b4617de95a79571b712e9af09b6e4b6f..8d6111c0a04b8f8bb19b5870430382bee0216f1e 100644 --- a/src/fix_box_relax.cpp +++ b/src/fix_box_relax.cpp @@ -218,8 +218,13 @@ FixBoxRelax::FixBoxRelax(LAMMPS *lmp, int narg, char **arg) : } else error->all(FLERR,"Illegal fix box/relax command"); } - if (p_flag[0] || p_flag[1] || p_flag[2]) box_change_size = 1; - if (p_flag[3] || p_flag[4] || p_flag[5]) box_change_shape = 1; + if (p_flag[0]) box_change |= BOX_CHANGE_X; + if (p_flag[1]) box_change |= BOX_CHANGE_Y; + if (p_flag[2]) box_change |= BOX_CHANGE_Z; + if (p_flag[3]) box_change |= BOX_CHANGE_YZ; + if (p_flag[4]) box_change |= BOX_CHANGE_XZ; + if (p_flag[5]) box_change |= BOX_CHANGE_XY; + if (allremap == 0) restart_pbc = 1; // error checks diff --git a/src/fix_deform.cpp b/src/fix_deform.cpp index 727065dafb89a3f7c0720111e5b8f941455b259d..2514f28fa5c3f07a630b4e6317130c874f5da511 100644 --- a/src/fix_deform.cpp +++ b/src/fix_deform.cpp @@ -48,6 +48,7 @@ rfix(NULL), irregular(NULL), set(NULL) no_change_box = 1; restart_global = 1; + pre_exchange_migrate = 1; nevery = force->inumeric(FLERR,arg[3]); if (nevery <= 0) error->all(FLERR,"Illegal fix deform command"); @@ -211,8 +212,12 @@ rfix(NULL), irregular(NULL), set(NULL) if (set[i].style == NONE) dimflag[i] = 0; else dimflag[i] = 1; - if (dimflag[0] || dimflag[1] || dimflag[2]) box_change_size = 1; - if (dimflag[3] || dimflag[4] || dimflag[5]) box_change_shape = 1; + if (dimflag[0]) box_change |= BOX_CHANGE_X; + if (dimflag[1]) box_change |= BOX_CHANGE_Y; + if (dimflag[2]) box_change |= BOX_CHANGE_Z; + if (dimflag[3]) box_change |= BOX_CHANGE_YZ; + if (dimflag[4]) box_change |= BOX_CHANGE_XZ; + if (dimflag[5]) box_change |= BOX_CHANGE_XY; // no tensile deformation on shrink-wrapped dims // b/c shrink wrap will change box-length diff --git a/src/fix_dummy.cpp b/src/fix_dummy.cpp new file mode 100644 index 0000000000000000000000000000000000000000..a08ac187bab9dee604eb62a83f73beecdea50f51 --- /dev/null +++ b/src/fix_dummy.cpp @@ -0,0 +1,66 @@ +/* ---------------------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + http://lammps.sandia.gov, Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + Copyright (2003) Sandia Corporation. Under the terms of Contract + DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains + certain rights in this software. This software is distributed under + the GNU General Public License. + + See the README file in the top-level LAMMPS directory. +------------------------------------------------------------------------- */ + +#include "fix_dummy.h" +#include +#include "error.h" + +using namespace LAMMPS_NS; +using namespace FixConst; + +/* ---------------------------------------------------------------------- */ + +FixDummy::FixDummy(LAMMPS *lmp, int narg, char **arg) : + Fix(lmp, narg, arg) +{ + // process optional args + // customize here and in setmask() by adding a new keyword from fix.h + // only necessary if both of these are true: + // (a) the real fix you are placeholding for defines the method + // (b) the real fix will be defined so late in run initialization + // that the dummy fix will have already been processed by Modify::init() + // so its index needs to be added to lists of fixes invoked during a run + + initial_integrate_flag = final_integrate_flag = 0; + pre_exchange_flag = pre_neighbor_flag = 0; + pre_force_flag = post_force_flag = 0; + end_of_step_flag = 0; + + int iarg = 3; + while (iarg < narg) { + if (strcmp(arg[iarg],"initial_integrate") == 0) initial_integrate_flag = 1; + else if (strcmp(arg[iarg],"final_integrate") == 0) final_integrate_flag = 1; + else if (strcmp(arg[iarg],"pre_exchange") == 0) pre_exchange_flag = 1; + else if (strcmp(arg[iarg],"pre_neighbor") == 0) pre_neighbor_flag = 1; + else if (strcmp(arg[iarg],"pre_force") == 0) pre_force_flag = 1; + else if (strcmp(arg[iarg],"post_force") == 0) post_force_flag = 1; + else if (strcmp(arg[iarg],"end_of_step") == 0) end_of_step_flag = 1; + else error->all(FLERR,"Illegal fix DUMMY command"); + iarg++; + } +} + +/* ---------------------------------------------------------------------- */ + +int FixDummy::setmask() +{ + int mask = 0; + if (initial_integrate_flag) mask |= INITIAL_INTEGRATE; + if (final_integrate_flag) mask |= FINAL_INTEGRATE; + if (pre_exchange_flag) mask |= PRE_EXCHANGE; + if (pre_neighbor_flag) mask |= PRE_NEIGHBOR; + if (pre_force_flag) mask |= PRE_FORCE; + if (post_force_flag) mask |= POST_FORCE; + if (end_of_step_flag) mask |= END_OF_STEP; + return mask; +} diff --git a/src/fix_dummy.h b/src/fix_dummy.h new file mode 100644 index 0000000000000000000000000000000000000000..ea8ce97c3afbe064f0d83f6c550e0e8300f1e4ff --- /dev/null +++ b/src/fix_dummy.h @@ -0,0 +1,53 @@ +/* -*- c++ -*- ---------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + http://lammps.sandia.gov, Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + Copyright (2003) Sandia Corporation. Under the terms of Contract + DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains + certain rights in this software. This software is distributed under + the GNU General Public License. + + See the README file in the top-level LAMMPS directory. +------------------------------------------------------------------------- */ + +#ifdef FIX_CLASS + +FixStyle(DUMMY,FixDummy) + +#else + +#ifndef LMP_FIX_DUMMY_H +#define LMP_FIX_DUMMY_H + +#include "fix.h" + +namespace LAMMPS_NS { + +class FixDummy : public Fix { + public: + FixDummy(class LAMMPS *, int, char **); + virtual ~FixDummy() {} + int setmask(); + + protected: + int initial_integrate_flag,final_integrate_flag; + int pre_exchange_flag,pre_neighbor_flag; + int pre_force_flag,post_force_flag; + int end_of_step_flag; +}; + +} + +#endif +#endif + +/* ERROR/WARNING messages: + +E: Illegal ... command + +Self-explanatory. Check the input script syntax and compare to the +documentation for the command. You can use -echo screen as a +command-line option when running LAMMPS to see the offending line. + +*/ diff --git a/src/fix_gravity.cpp b/src/fix_gravity.cpp index 25435174d284f3cd7387ed719280edc35f7c57c8..2c561814152e01dc861aa08def92f937f40ed7b9 100644 --- a/src/fix_gravity.cpp +++ b/src/fix_gravity.cpp @@ -31,7 +31,7 @@ using namespace FixConst; using namespace MathConst; enum{CHUTE,SPHERICAL,VECTOR}; -enum{CONSTANT,EQUAL}; +enum{CONSTANT,EQUAL}; // same as FixPour /* ---------------------------------------------------------------------- */ @@ -153,6 +153,16 @@ FixGravity::FixGravity(LAMMPS *lmp, int narg, char **arg) : eflag = 0; egrav = 0.0; + + // set gravity components once and for all if CONSTANT + + varflag = CONSTANT; + if (mstyle != CONSTANT || vstyle != CONSTANT || pstyle != CONSTANT || + tstyle != CONSTANT || xstyle != CONSTANT || ystyle != CONSTANT || + zstyle != CONSTANT) varflag = EQUAL; + + if (varflag == CONSTANT) set_acceleration(); + } /* ---------------------------------------------------------------------- */ @@ -241,15 +251,6 @@ void FixGravity::init() if (!input->variable->equalstyle(zvar)) error->all(FLERR,"Variable for fix gravity is invalid style"); } - - varflag = CONSTANT; - if (mstyle != CONSTANT || vstyle != CONSTANT || pstyle != CONSTANT || - tstyle != CONSTANT || xstyle != CONSTANT || ystyle != CONSTANT || - zstyle != CONSTANT) varflag = EQUAL; - - // set gravity components once and for all - - if (varflag == CONSTANT) set_acceleration(); } /* ---------------------------------------------------------------------- */ diff --git a/src/fix_halt.cpp b/src/fix_halt.cpp index 409bfbe8a1545ed1936a901c7097337d680bca6b..42b63c69f142b0ae64bf9b33b92141fe609da0e4 100644 --- a/src/fix_halt.cpp +++ b/src/fix_halt.cpp @@ -306,12 +306,12 @@ double FixHalt::tlimit() /* ---------------------------------------------------------------------- determine available disk space, if supported. Return -1 if not. ------------------------------------------------------------------------- */ -#if defined(__linux) || defined(__APPLE__) +#if defined(__linux__) || defined(__APPLE__) || defined(__FreeBSD__) || defined(__DragonFly__) || defined(__OpenBSD__) || defined(__NetBSD__) #include #endif double FixHalt::diskfree() { -#if defined(__linux) || defined(__APPLE__) +#if defined(__linux__) || defined(__APPLE__) || defined(__FreeBSD__) || defined(__DragonFly__) || defined(__OpenBSD__) || defined(__NetBSD__) struct statvfs fs; double disk_free = -1.0; @@ -319,9 +319,9 @@ double FixHalt::diskfree() disk_free = 1.0e100; int rv = statvfs(dlimit_path,&fs); if (rv == 0) { -#if defined(__linux) +#if defined(__linux__) disk_free = fs.f_bavail*fs.f_bsize/1048576.0; -#elif defined(__APPLE__) +#elif defined(__APPLE__) || defined(__FreeBSD__) || defined(__DragonFly__) || defined(__OpenBSD__) || defined(__NetBSD__) disk_free = fs.f_bavail*fs.f_frsize/1048576.0; #endif } else diff --git a/src/fix_heat.cpp b/src/fix_heat.cpp index 67d445df9252a857c681f35880cd4274a4b63e65..65ca47c46d89c196dbf1a8c69212bab668249f19 100644 --- a/src/fix_heat.cpp +++ b/src/fix_heat.cpp @@ -300,6 +300,7 @@ double FixHeat::compute_scalar() { double average_scale = scale; if (hstyle == ATOM) { + if (!vscale) return 1.0; double scale_sum = 0.0; int ncount = 0; int *mask = atom->mask; diff --git a/src/fix_neigh_history.cpp b/src/fix_neigh_history.cpp index 86865ba316e81caf3f9cb484cf232c1f8a2b5019..9b632b7ff8372845634f07249196bc14bfff7723 100644 --- a/src/fix_neigh_history.cpp +++ b/src/fix_neigh_history.cpp @@ -19,6 +19,7 @@ #include "comm.h" #include "neighbor.h" #include "neigh_list.h" +#include "modify.h" #include "force.h" #include "pair.h" #include "memory.h" @@ -147,6 +148,19 @@ void FixNeighHistory::init() if (atom->tag_enable == 0) error->all(FLERR,"Neighbor history requires atoms have IDs"); + // this fix must come before any fix which migrates atoms in its pre_exchange() + // b/c this fix's pre_exchange() creates per-atom data structure + // that data must be current for atom migration to carry it along + + for (int i = 0; i < modify->nfix; i++) { + if (modify->fix[i] == this) break; + if (modify->fix[i]->pre_exchange_migrate) + error->all(FLERR,"Fix neigh_history comes after a fix which " + "migrates atoms in pre_exchange"); + } + + // setup data struct + allocate_pages(); } diff --git a/src/fix_nh.cpp b/src/fix_nh.cpp index bb3fe7559cbe960599dbc30556c840942032cce4..339407f6d5bb4f81534fe43f511df61e25598526 100644 --- a/src/fix_nh.cpp +++ b/src/fix_nh.cpp @@ -476,8 +476,12 @@ FixNH::FixNH(LAMMPS *lmp, int narg, char **arg) : if (p_flag[i]) pstat_flag = 1; if (pstat_flag) { - if (p_flag[0] || p_flag[1] || p_flag[2]) box_change_size = 1; - if (p_flag[3] || p_flag[4] || p_flag[5]) box_change_shape = 1; + if (p_flag[0]) box_change |= BOX_CHANGE_X; + if (p_flag[1]) box_change |= BOX_CHANGE_Y; + if (p_flag[2]) box_change |= BOX_CHANGE_Z; + if (p_flag[3]) box_change |= BOX_CHANGE_YZ; + if (p_flag[4]) box_change |= BOX_CHANGE_XZ; + if (p_flag[5]) box_change |= BOX_CHANGE_XY; no_change_box = 1; if (allremap == 0) restart_pbc = 1; @@ -492,10 +496,10 @@ FixNH::FixNH(LAMMPS *lmp, int narg, char **arg) : // pre_exchange only required if flips can occur due to shape changes if (flipflag && (p_flag[3] || p_flag[4] || p_flag[5])) - pre_exchange_flag = 1; + pre_exchange_flag = pre_exchange_migrate = 1; if (flipflag && (domain->yz != 0.0 || domain->xz != 0.0 || domain->xy != 0.0)) - pre_exchange_flag = 1; + pre_exchange_flag = pre_exchange_migrate = 1; } // convert input periods to frequencies diff --git a/src/fix_press_berendsen.cpp b/src/fix_press_berendsen.cpp index c090c554e2b6d19305dcffc9facab9ae84e4cd4e..184f02c440d0414d2378df6cce1525f79ca68a6e 100644 --- a/src/fix_press_berendsen.cpp +++ b/src/fix_press_berendsen.cpp @@ -40,8 +40,6 @@ FixPressBerendsen::FixPressBerendsen(LAMMPS *lmp, int narg, char **arg) : { if (narg < 5) error->all(FLERR,"Illegal fix press/berendsen command"); - box_change_size = 1; - // Berendsen barostat applied every step nevery = 1; @@ -204,6 +202,10 @@ FixPressBerendsen::FixPressBerendsen(LAMMPS *lmp, int narg, char **arg) : (p_flag[2] && p_period[2] <= 0.0)) error->all(FLERR,"Fix press/berendsen damping parameters must be > 0.0"); + if (p_flag[0]) box_change |= BOX_CHANGE_X; + if (p_flag[1]) box_change |= BOX_CHANGE_Y; + if (p_flag[2]) box_change |= BOX_CHANGE_Z; + // pstyle = ISO if XYZ coupling or XY coupling in 2d -> 1 dof // else pstyle = ANISO -> 3 dof diff --git a/src/fix_property_atom.cpp b/src/fix_property_atom.cpp index 555114e4f9d80ecfcbce38c5a04cb6b0925a4b03..5fb17ca636294ae6c14d17e146dd6fa0a77b65a5 100644 --- a/src/fix_property_atom.cpp +++ b/src/fix_property_atom.cpp @@ -18,6 +18,7 @@ #include "comm.h" #include "memory.h" #include "error.h" +#include "utils.h" using namespace LAMMPS_NS; using namespace FixConst; @@ -217,7 +218,7 @@ void FixPropertyAtom::read_data_section(char *keyword, int n, char *buf, next = strchr(buf,'\n'); *next = '\0'; - int nwords = atom->count_words(buf); + int nwords = utils::count_words(buf); *next = '\n'; if (nwords != nvalue+1) { diff --git a/src/fix_restrain.cpp b/src/fix_restrain.cpp index 5a0d4fb66241f4c955139e9eb976f7ea3b267921..2214cbe80c101e16ec0cef9b8a9b0e3a821f3c30 100644 --- a/src/fix_restrain.cpp +++ b/src/fix_restrain.cpp @@ -34,7 +34,7 @@ using namespace LAMMPS_NS; using namespace FixConst; using namespace MathConst; -enum{BOND,ANGLE,DIHEDRAL}; +enum{BOND,LBOUND,ANGLE,DIHEDRAL}; #define TOLERANCE 0.05 #define SMALL 0.001 @@ -44,8 +44,9 @@ enum{BOND,ANGLE,DIHEDRAL}; FixRestrain::FixRestrain(LAMMPS *lmp, int narg, char **arg) : Fix(lmp, narg, arg), - rstyle(NULL), mult(NULL), ids(NULL), kstart(NULL), kstop(NULL), target(NULL), - cos_target(NULL), sin_target(NULL) + rstyle(NULL), mult(NULL), ids(NULL), kstart(NULL), kstop(NULL), + deqstart(NULL), deqstop(NULL), target(NULL), cos_target(NULL), + sin_target(NULL) { if (narg < 4) error->all(FLERR,"Illegal fix restrain command"); @@ -72,6 +73,8 @@ FixRestrain::FixRestrain(LAMMPS *lmp, int narg, char **arg) : memory->grow(kstart,maxrestrain,"restrain:kstart"); memory->grow(kstop,maxrestrain,"restrain:kstop"); memory->grow(target,maxrestrain,"restrain:target"); + memory->grow(deqstart,maxrestrain,"restrain:deqstart"); + memory->grow(deqstop,maxrestrain,"restrain:deqstop"); memory->grow(cos_target,maxrestrain,"restrain:cos_target"); memory->grow(sin_target,maxrestrain,"restrain:sin_target"); } @@ -83,8 +86,29 @@ FixRestrain::FixRestrain(LAMMPS *lmp, int narg, char **arg) : ids[nrestrain][1] = force->inumeric(FLERR,arg[iarg+2]); kstart[nrestrain] = force->numeric(FLERR,arg[iarg+3]); kstop[nrestrain] = force->numeric(FLERR,arg[iarg+4]); - target[nrestrain] = force->numeric(FLERR,arg[iarg+5]); - iarg += 6; + deqstart[nrestrain] = force->numeric(FLERR,arg[iarg+5]); + if (iarg+6 == narg) { + deqstop[nrestrain] = force->numeric(FLERR,arg[iarg+5]); + iarg += 6; + } else { + deqstop[nrestrain] = force->numeric(FLERR,arg[iarg+6]); + iarg += 7; + } + } else if (strcmp(arg[iarg],"lbound") == 0) { + if (iarg+6 > narg) error->all(FLERR,"Illegal fix restrain command"); + rstyle[nrestrain] = LBOUND; + ids[nrestrain][0] = force->inumeric(FLERR,arg[iarg+1]); + ids[nrestrain][1] = force->inumeric(FLERR,arg[iarg+2]); + kstart[nrestrain] = force->numeric(FLERR,arg[iarg+3]); + kstop[nrestrain] = force->numeric(FLERR,arg[iarg+4]); + deqstart[nrestrain] = force->numeric(FLERR,arg[iarg+5]); + if (iarg+6 == narg) { + deqstop[nrestrain] = force->numeric(FLERR,arg[iarg+5]); + iarg += 6; + } else { + deqstop[nrestrain] = force->numeric(FLERR,arg[iarg+6]); + iarg += 7; + } } else if (strcmp(arg[iarg],"angle") == 0) { if (iarg+7 > narg) error->all(FLERR,"Illegal fix restrain command"); rstyle[nrestrain] = ANGLE; @@ -139,6 +163,8 @@ FixRestrain::~FixRestrain() memory->destroy(kstart); memory->destroy(kstop); memory->destroy(target); + memory->destroy(deqstart); + memory->destroy(deqstop); memory->destroy(cos_target); memory->destroy(sin_target); } @@ -192,11 +218,13 @@ void FixRestrain::post_force(int /*vflag*/) energy = 0.0; ebond = 0.0; + elbound = 0.0; eangle = 0.0; edihed = 0.0; for (int m = 0; m < nrestrain; m++) if (rstyle[m] == BOND) restrain_bond(m); + else if (rstyle[m] == LBOUND) restrain_lbound(m); else if (rstyle[m] == ANGLE) restrain_angle(m); else if (rstyle[m] == DIHEDRAL) restrain_dihedral(m); } @@ -233,6 +261,7 @@ void FixRestrain::restrain_bond(int m) double delta = update->ntimestep - update->beginstep; if (delta != 0.0) delta /= update->endstep - update->beginstep; double k = kstart[m] + delta * (kstop[m] - kstart[m]); + double deq = deqstart[m] + delta * (deqstop[m] - deqstart[m]); i1 = atom->map(ids[m][0]); i2 = atom->map(ids[m][1]); @@ -269,7 +298,7 @@ void FixRestrain::restrain_bond(int m) rsq = delx*delx + dely*dely + delz*delz; r = sqrt(rsq); - dr = r - target[m]; + dr = r - deq; rk = k * dr; // force & energy @@ -277,7 +306,7 @@ void FixRestrain::restrain_bond(int m) if (r > 0.0) fbond = -2.0*rk/r; else fbond = 0.0; - ebond += rk*dr; + ebond += rk*dr; energy += rk*dr; // apply force to each of 2 atoms @@ -295,6 +324,94 @@ void FixRestrain::restrain_bond(int m) } } +/* ---------------------------------------------------------------------- + apply harmonic lower-bound bond restraints +---------------------------------------------------------------------- */ + +void FixRestrain::restrain_lbound(int m) +{ + int i1,i2; + double delx,dely,delz,fbond; + double rsq,r,dr,rk; + + double **x = atom->x; + double **f = atom->f; + int nlocal = atom->nlocal; + int newton_bond = force->newton_bond; + + double delta = update->ntimestep - update->beginstep; + if (delta != 0.0) delta /= update->endstep - update->beginstep; + double k = kstart[m] + delta * (kstop[m] - kstart[m]); + double deq = deqstart[m] + delta * (deqstop[m] - deqstart[m]); + + i1 = atom->map(ids[m][0]); + i2 = atom->map(ids[m][1]); + + // newton_bond on: only processor owning i2 computes restraint + // newton_bond off: only processors owning either of i1,i2 computes restraint + + if (newton_bond) { + if (i2 == -1 || i2 >= nlocal) return; + if (i1 == -1) { + char str[128]; + sprintf(str, + "Restrain atoms %d %d missing on proc %d at step " BIGINT_FORMAT, + ids[m][0],ids[m][1], + comm->me,update->ntimestep); + error->one(FLERR,str); + } + } else { + if ((i1 == -1 || i1 >= nlocal) && (i2 == -1 || i2 >= nlocal)) return; + if (i1 == -1 || i2 == -1) { + char str[128]; + sprintf(str, + "Restrain atoms %d %d missing on proc %d at step " BIGINT_FORMAT, + ids[m][0],ids[m][1], + comm->me,update->ntimestep); + error->one(FLERR,str); + } + } + + delx = x[i1][0] - x[i2][0]; + dely = x[i1][1] - x[i2][1]; + delz = x[i1][2] - x[i2][2]; + domain->minimum_image(delx,dely,delz); + + rsq = delx*delx + dely*dely + delz*delz; + r = sqrt(rsq); + dr = r - deq; + rk = k * dr; + + // force & energy + + if (dr < 0) { + if (r > 0.0) fbond = -2.0*rk/r; + else fbond = 0.0; + + elbound += rk*dr; + energy += rk*dr; + } else { + fbond = 0.0; + + elbound += 0.0; + energy += 0.0; + } + + // apply force to each of 2 atoms + + if (newton_bond || i1 < nlocal) { + f[i1][0] += delx*fbond; + f[i1][1] += dely*fbond; + f[i1][2] += delz*fbond; + } + + if (newton_bond || i2 < nlocal) { + f[i2][0] -= delx*fbond; + f[i2][1] -= dely*fbond; + f[i2][2] -= delz*fbond; + } +} + /* ---------------------------------------------------------------------- apply harmonic angle restraints ---------------------------------------------------------------------- */ @@ -655,9 +772,12 @@ double FixRestrain::compute_vector(int n) MPI_Allreduce(&ebond,&ebond_all,1,MPI_DOUBLE,MPI_SUM,world); return ebond_all; } else if (n == 1) { + MPI_Allreduce(&elbound,&elbound_all,1,MPI_DOUBLE,MPI_SUM,world); + return elbound_all; + } else if (n == 3) { MPI_Allreduce(&eangle,&eangle_all,1,MPI_DOUBLE,MPI_SUM,world); return eangle_all; - } else if (n == 2) { + } else if (n == 4) { MPI_Allreduce(&edihed,&edihed_all,1,MPI_DOUBLE,MPI_SUM,world); return edihed_all; } else { diff --git a/src/fix_restrain.h b/src/fix_restrain.h index 4572905d46e1ae298d876fe91fb9c94f05e05d09..3497b7daf5a0a83eb208a5f3739c8602d528cb84 100644 --- a/src/fix_restrain.h +++ b/src/fix_restrain.h @@ -44,14 +44,16 @@ class FixRestrain : public Fix { int *rstyle; int *mult; int **ids; - double *kstart,*kstop,*target; + double *kstart,*kstop,*deqstart,*deqstop,*target; double *cos_target,*sin_target; double energy,energy_all; double ebond,ebond_all; + double elbound,elbound_all; double eangle,eangle_all; double edihed,edihed_all; void restrain_bond(int); + void restrain_lbound(int); void restrain_angle(int); void restrain_dihedral(int); }; diff --git a/src/fix_tmd.cpp b/src/fix_tmd.cpp index 604660e7c418607cbcfcacfe529fcec85dd28cd7..182da8ecaa6f90935c45d0a7d0f47f076bfadf51 100644 --- a/src/fix_tmd.cpp +++ b/src/fix_tmd.cpp @@ -447,12 +447,12 @@ void FixTMD::readfile(char *file) zprd = hi - lo; bufptr = next + 1; continue; - } else if (atom->count_words(bufptr) == 4) { + } else if (utils::count_words(bufptr) == 4) { if (xprd >= 0.0 || yprd >= 0.0 || zprd >= 0.0) error->all(FLERR,"Incorrect format in TMD target file"); imageflag = 0; firstline = 0; - } else if (atom->count_words(bufptr) == 7) { + } else if (utils::count_words(bufptr) == 7) { if (xprd < 0.0 || yprd < 0.0 || zprd < 0.0) error->all(FLERR,"Incorrect format in TMD target file"); imageflag = 1; diff --git a/src/fmt/chrono.h b/src/fmt/chrono.h new file mode 100644 index 0000000000000000000000000000000000000000..421d464ad8a69ffdb9c39d83094606cc9d149bdf --- /dev/null +++ b/src/fmt/chrono.h @@ -0,0 +1,1119 @@ +// Formatting library for C++ - chrono support +// +// Copyright (c) 2012 - present, Victor Zverovich +// All rights reserved. +// +// For the license information refer to format.h. + +#ifndef FMT_CHRONO_H_ +#define FMT_CHRONO_H_ + +#include +#include +#include +#include + +#include "format.h" +#include "locale.h" + +FMT_BEGIN_NAMESPACE + +// Enable safe chrono durations, unless explicitly disabled. +#ifndef FMT_SAFE_DURATION_CAST +# define FMT_SAFE_DURATION_CAST 1 +#endif +#if FMT_SAFE_DURATION_CAST + +// For conversion between std::chrono::durations without undefined +// behaviour or erroneous results. +// This is a stripped down version of duration_cast, for inclusion in fmt. +// See https://github.com/pauldreik/safe_duration_cast +// +// Copyright Paul Dreik 2019 +namespace safe_duration_cast { + +template ::value && + std::numeric_limits::is_signed == + std::numeric_limits::is_signed)> +FMT_CONSTEXPR To lossless_integral_conversion(const From from, int& ec) { + ec = 0; + using F = std::numeric_limits; + using T = std::numeric_limits; + static_assert(F::is_integer, "From must be integral"); + static_assert(T::is_integer, "To must be integral"); + + // A and B are both signed, or both unsigned. + if (F::digits <= T::digits) { + // From fits in To without any problem. + } else { + // From does not always fit in To, resort to a dynamic check. + if (from < T::min() || from > T::max()) { + // outside range. + ec = 1; + return {}; + } + } + return static_cast(from); +} + +/** + * converts From to To, without loss. If the dynamic value of from + * can't be converted to To without loss, ec is set. + */ +template ::value && + std::numeric_limits::is_signed != + std::numeric_limits::is_signed)> +FMT_CONSTEXPR To lossless_integral_conversion(const From from, int& ec) { + ec = 0; + using F = std::numeric_limits; + using T = std::numeric_limits; + static_assert(F::is_integer, "From must be integral"); + static_assert(T::is_integer, "To must be integral"); + + if (F::is_signed && !T::is_signed) { + // From may be negative, not allowed! + if (fmt::internal::is_negative(from)) { + ec = 1; + return {}; + } + + // From is positive. Can it always fit in To? + if (F::digits <= T::digits) { + // yes, From always fits in To. + } else { + // from may not fit in To, we have to do a dynamic check + if (from > static_cast(T::max())) { + ec = 1; + return {}; + } + } + } + + if (!F::is_signed && T::is_signed) { + // can from be held in To? + if (F::digits < T::digits) { + // yes, From always fits in To. + } else { + // from may not fit in To, we have to do a dynamic check + if (from > static_cast(T::max())) { + // outside range. + ec = 1; + return {}; + } + } + } + + // reaching here means all is ok for lossless conversion. + return static_cast(from); + +} // function + +template ::value)> +FMT_CONSTEXPR To lossless_integral_conversion(const From from, int& ec) { + ec = 0; + return from; +} // function + +// clang-format off +/** + * converts From to To if possible, otherwise ec is set. + * + * input | output + * ---------------------------------|--------------- + * NaN | NaN + * Inf | Inf + * normal, fits in output | converted (possibly lossy) + * normal, does not fit in output | ec is set + * subnormal | best effort + * -Inf | -Inf + */ +// clang-format on +template ::value)> +FMT_CONSTEXPR To safe_float_conversion(const From from, int& ec) { + ec = 0; + using T = std::numeric_limits; + static_assert(std::is_floating_point::value, "From must be floating"); + static_assert(std::is_floating_point::value, "To must be floating"); + + // catch the only happy case + if (std::isfinite(from)) { + if (from >= T::lowest() && from <= T::max()) { + return static_cast(from); + } + // not within range. + ec = 1; + return {}; + } + + // nan and inf will be preserved + return static_cast(from); +} // function + +template ::value)> +FMT_CONSTEXPR To safe_float_conversion(const From from, int& ec) { + ec = 0; + static_assert(std::is_floating_point::value, "From must be floating"); + return from; +} + +/** + * safe duration cast between integral durations + */ +template ::value), + FMT_ENABLE_IF(std::is_integral::value)> +To safe_duration_cast(std::chrono::duration from, + int& ec) { + using From = std::chrono::duration; + ec = 0; + // the basic idea is that we need to convert from count() in the from type + // to count() in the To type, by multiplying it with this: + struct Factor + : std::ratio_divide {}; + + static_assert(Factor::num > 0, "num must be positive"); + static_assert(Factor::den > 0, "den must be positive"); + + // the conversion is like this: multiply from.count() with Factor::num + // /Factor::den and convert it to To::rep, all this without + // overflow/underflow. let's start by finding a suitable type that can hold + // both To, From and Factor::num + using IntermediateRep = + typename std::common_type::type; + + // safe conversion to IntermediateRep + IntermediateRep count = + lossless_integral_conversion(from.count(), ec); + if (ec) { + return {}; + } + // multiply with Factor::num without overflow or underflow + if (Factor::num != 1) { + const auto max1 = internal::max_value() / Factor::num; + if (count > max1) { + ec = 1; + return {}; + } + const auto min1 = std::numeric_limits::min() / Factor::num; + if (count < min1) { + ec = 1; + return {}; + } + count *= Factor::num; + } + + // this can't go wrong, right? den>0 is checked earlier. + if (Factor::den != 1) { + count /= Factor::den; + } + // convert to the to type, safely + using ToRep = typename To::rep; + const ToRep tocount = lossless_integral_conversion(count, ec); + if (ec) { + return {}; + } + return To{tocount}; +} + +/** + * safe duration_cast between floating point durations + */ +template ::value), + FMT_ENABLE_IF(std::is_floating_point::value)> +To safe_duration_cast(std::chrono::duration from, + int& ec) { + using From = std::chrono::duration; + ec = 0; + if (std::isnan(from.count())) { + // nan in, gives nan out. easy. + return To{std::numeric_limits::quiet_NaN()}; + } + // maybe we should also check if from is denormal, and decide what to do about + // it. + + // +-inf should be preserved. + if (std::isinf(from.count())) { + return To{from.count()}; + } + + // the basic idea is that we need to convert from count() in the from type + // to count() in the To type, by multiplying it with this: + struct Factor + : std::ratio_divide {}; + + static_assert(Factor::num > 0, "num must be positive"); + static_assert(Factor::den > 0, "den must be positive"); + + // the conversion is like this: multiply from.count() with Factor::num + // /Factor::den and convert it to To::rep, all this without + // overflow/underflow. let's start by finding a suitable type that can hold + // both To, From and Factor::num + using IntermediateRep = + typename std::common_type::type; + + // force conversion of From::rep -> IntermediateRep to be safe, + // even if it will never happen be narrowing in this context. + IntermediateRep count = + safe_float_conversion(from.count(), ec); + if (ec) { + return {}; + } + + // multiply with Factor::num without overflow or underflow + if (Factor::num != 1) { + constexpr auto max1 = internal::max_value() / + static_cast(Factor::num); + if (count > max1) { + ec = 1; + return {}; + } + constexpr auto min1 = std::numeric_limits::lowest() / + static_cast(Factor::num); + if (count < min1) { + ec = 1; + return {}; + } + count *= static_cast(Factor::num); + } + + // this can't go wrong, right? den>0 is checked earlier. + if (Factor::den != 1) { + using common_t = typename std::common_type::type; + count /= static_cast(Factor::den); + } + + // convert to the to type, safely + using ToRep = typename To::rep; + + const ToRep tocount = safe_float_conversion(count, ec); + if (ec) { + return {}; + } + return To{tocount}; +} +} // namespace safe_duration_cast +#endif + +// Prevents expansion of a preceding token as a function-style macro. +// Usage: f FMT_NOMACRO() +#define FMT_NOMACRO + +namespace internal { +inline null<> localtime_r FMT_NOMACRO(...) { return null<>(); } +inline null<> localtime_s(...) { return null<>(); } +inline null<> gmtime_r(...) { return null<>(); } +inline null<> gmtime_s(...) { return null<>(); } +} // namespace internal + +// Thread-safe replacement for std::localtime +inline std::tm localtime(std::time_t time) { + struct dispatcher { + std::time_t time_; + std::tm tm_; + + dispatcher(std::time_t t) : time_(t) {} + + bool run() { + using namespace fmt::internal; + return handle(localtime_r(&time_, &tm_)); + } + + bool handle(std::tm* tm) { return tm != nullptr; } + + bool handle(internal::null<>) { + using namespace fmt::internal; + return fallback(localtime_s(&tm_, &time_)); + } + + bool fallback(int res) { return res == 0; } + +#if !FMT_MSC_VER + bool fallback(internal::null<>) { + using namespace fmt::internal; + std::tm* tm = std::localtime(&time_); + if (tm) tm_ = *tm; + return tm != nullptr; + } +#endif + }; + dispatcher lt(time); + // Too big time values may be unsupported. + if (!lt.run()) FMT_THROW(format_error("time_t value out of range")); + return lt.tm_; +} + +// Thread-safe replacement for std::gmtime +inline std::tm gmtime(std::time_t time) { + struct dispatcher { + std::time_t time_; + std::tm tm_; + + dispatcher(std::time_t t) : time_(t) {} + + bool run() { + using namespace fmt::internal; + return handle(gmtime_r(&time_, &tm_)); + } + + bool handle(std::tm* tm) { return tm != nullptr; } + + bool handle(internal::null<>) { + using namespace fmt::internal; + return fallback(gmtime_s(&tm_, &time_)); + } + + bool fallback(int res) { return res == 0; } + +#if !FMT_MSC_VER + bool fallback(internal::null<>) { + std::tm* tm = std::gmtime(&time_); + if (tm) tm_ = *tm; + return tm != nullptr; + } +#endif + }; + dispatcher gt(time); + // Too big time values may be unsupported. + if (!gt.run()) FMT_THROW(format_error("time_t value out of range")); + return gt.tm_; +} + +namespace internal { +inline std::size_t strftime(char* str, std::size_t count, const char* format, + const std::tm* time) { + return std::strftime(str, count, format, time); +} + +inline std::size_t strftime(wchar_t* str, std::size_t count, + const wchar_t* format, const std::tm* time) { + return std::wcsftime(str, count, format, time); +} +} // namespace internal + +template struct formatter { + template + auto parse(ParseContext& ctx) -> decltype(ctx.begin()) { + auto it = ctx.begin(); + if (it != ctx.end() && *it == ':') ++it; + auto end = it; + while (end != ctx.end() && *end != '}') ++end; + tm_format.reserve(internal::to_unsigned(end - it + 1)); + tm_format.append(it, end); + tm_format.push_back('\0'); + return end; + } + + template + auto format(const std::tm& tm, FormatContext& ctx) -> decltype(ctx.out()) { + basic_memory_buffer buf; + std::size_t start = buf.size(); + for (;;) { + std::size_t size = buf.capacity() - start; + std::size_t count = + internal::strftime(&buf[start], size, &tm_format[0], &tm); + if (count != 0) { + buf.resize(start + count); + break; + } + if (size >= tm_format.size() * 256) { + // If the buffer is 256 times larger than the format string, assume + // that `strftime` gives an empty result. There doesn't seem to be a + // better way to distinguish the two cases: + // https://github.com/fmtlib/fmt/issues/367 + break; + } + const std::size_t MIN_GROWTH = 10; + buf.reserve(buf.capacity() + (size > MIN_GROWTH ? size : MIN_GROWTH)); + } + return std::copy(buf.begin(), buf.end(), ctx.out()); + } + + basic_memory_buffer tm_format; +}; + +namespace internal { +template FMT_CONSTEXPR const char* get_units() { + return nullptr; +} +template <> FMT_CONSTEXPR const char* get_units() { return "as"; } +template <> FMT_CONSTEXPR const char* get_units() { return "fs"; } +template <> FMT_CONSTEXPR const char* get_units() { return "ps"; } +template <> FMT_CONSTEXPR const char* get_units() { return "ns"; } +template <> FMT_CONSTEXPR const char* get_units() { return "µs"; } +template <> FMT_CONSTEXPR const char* get_units() { return "ms"; } +template <> FMT_CONSTEXPR const char* get_units() { return "cs"; } +template <> FMT_CONSTEXPR const char* get_units() { return "ds"; } +template <> FMT_CONSTEXPR const char* get_units>() { return "s"; } +template <> FMT_CONSTEXPR const char* get_units() { return "das"; } +template <> FMT_CONSTEXPR const char* get_units() { return "hs"; } +template <> FMT_CONSTEXPR const char* get_units() { return "ks"; } +template <> FMT_CONSTEXPR const char* get_units() { return "Ms"; } +template <> FMT_CONSTEXPR const char* get_units() { return "Gs"; } +template <> FMT_CONSTEXPR const char* get_units() { return "Ts"; } +template <> FMT_CONSTEXPR const char* get_units() { return "Ps"; } +template <> FMT_CONSTEXPR const char* get_units() { return "Es"; } +template <> FMT_CONSTEXPR const char* get_units>() { + return "m"; +} +template <> FMT_CONSTEXPR const char* get_units>() { + return "h"; +} + +enum class numeric_system { + standard, + // Alternative numeric system, e.g. 十二 instead of 12 in ja_JP locale. + alternative +}; + +// Parses a put_time-like format string and invokes handler actions. +template +FMT_CONSTEXPR const Char* parse_chrono_format(const Char* begin, + const Char* end, + Handler&& handler) { + auto ptr = begin; + while (ptr != end) { + auto c = *ptr; + if (c == '}') break; + if (c != '%') { + ++ptr; + continue; + } + if (begin != ptr) handler.on_text(begin, ptr); + ++ptr; // consume '%' + if (ptr == end) FMT_THROW(format_error("invalid format")); + c = *ptr++; + switch (c) { + case '%': + handler.on_text(ptr - 1, ptr); + break; + case 'n': { + const Char newline[] = {'\n'}; + handler.on_text(newline, newline + 1); + break; + } + case 't': { + const Char tab[] = {'\t'}; + handler.on_text(tab, tab + 1); + break; + } + // Day of the week: + case 'a': + handler.on_abbr_weekday(); + break; + case 'A': + handler.on_full_weekday(); + break; + case 'w': + handler.on_dec0_weekday(numeric_system::standard); + break; + case 'u': + handler.on_dec1_weekday(numeric_system::standard); + break; + // Month: + case 'b': + handler.on_abbr_month(); + break; + case 'B': + handler.on_full_month(); + break; + // Hour, minute, second: + case 'H': + handler.on_24_hour(numeric_system::standard); + break; + case 'I': + handler.on_12_hour(numeric_system::standard); + break; + case 'M': + handler.on_minute(numeric_system::standard); + break; + case 'S': + handler.on_second(numeric_system::standard); + break; + // Other: + case 'c': + handler.on_datetime(numeric_system::standard); + break; + case 'x': + handler.on_loc_date(numeric_system::standard); + break; + case 'X': + handler.on_loc_time(numeric_system::standard); + break; + case 'D': + handler.on_us_date(); + break; + case 'F': + handler.on_iso_date(); + break; + case 'r': + handler.on_12_hour_time(); + break; + case 'R': + handler.on_24_hour_time(); + break; + case 'T': + handler.on_iso_time(); + break; + case 'p': + handler.on_am_pm(); + break; + case 'Q': + handler.on_duration_value(); + break; + case 'q': + handler.on_duration_unit(); + break; + case 'z': + handler.on_utc_offset(); + break; + case 'Z': + handler.on_tz_name(); + break; + // Alternative representation: + case 'E': { + if (ptr == end) FMT_THROW(format_error("invalid format")); + c = *ptr++; + switch (c) { + case 'c': + handler.on_datetime(numeric_system::alternative); + break; + case 'x': + handler.on_loc_date(numeric_system::alternative); + break; + case 'X': + handler.on_loc_time(numeric_system::alternative); + break; + default: + FMT_THROW(format_error("invalid format")); + } + break; + } + case 'O': + if (ptr == end) FMT_THROW(format_error("invalid format")); + c = *ptr++; + switch (c) { + case 'w': + handler.on_dec0_weekday(numeric_system::alternative); + break; + case 'u': + handler.on_dec1_weekday(numeric_system::alternative); + break; + case 'H': + handler.on_24_hour(numeric_system::alternative); + break; + case 'I': + handler.on_12_hour(numeric_system::alternative); + break; + case 'M': + handler.on_minute(numeric_system::alternative); + break; + case 'S': + handler.on_second(numeric_system::alternative); + break; + default: + FMT_THROW(format_error("invalid format")); + } + break; + default: + FMT_THROW(format_error("invalid format")); + } + begin = ptr; + } + if (begin != ptr) handler.on_text(begin, ptr); + return ptr; +} + +struct chrono_format_checker { + FMT_NORETURN void report_no_date() { FMT_THROW(format_error("no date")); } + + template void on_text(const Char*, const Char*) {} + FMT_NORETURN void on_abbr_weekday() { report_no_date(); } + FMT_NORETURN void on_full_weekday() { report_no_date(); } + FMT_NORETURN void on_dec0_weekday(numeric_system) { report_no_date(); } + FMT_NORETURN void on_dec1_weekday(numeric_system) { report_no_date(); } + FMT_NORETURN void on_abbr_month() { report_no_date(); } + FMT_NORETURN void on_full_month() { report_no_date(); } + void on_24_hour(numeric_system) {} + void on_12_hour(numeric_system) {} + void on_minute(numeric_system) {} + void on_second(numeric_system) {} + FMT_NORETURN void on_datetime(numeric_system) { report_no_date(); } + FMT_NORETURN void on_loc_date(numeric_system) { report_no_date(); } + FMT_NORETURN void on_loc_time(numeric_system) { report_no_date(); } + FMT_NORETURN void on_us_date() { report_no_date(); } + FMT_NORETURN void on_iso_date() { report_no_date(); } + void on_12_hour_time() {} + void on_24_hour_time() {} + void on_iso_time() {} + void on_am_pm() {} + void on_duration_value() {} + void on_duration_unit() {} + FMT_NORETURN void on_utc_offset() { report_no_date(); } + FMT_NORETURN void on_tz_name() { report_no_date(); } +}; + +template ::value)> +inline bool isnan(T) { + return false; +} +template ::value)> +inline bool isnan(T value) { + return std::isnan(value); +} + +template ::value)> +inline bool isfinite(T) { + return true; +} +template ::value)> +inline bool isfinite(T value) { + return std::isfinite(value); +} + +// Converts value to int and checks that it's in the range [0, upper). +template ::value)> +inline int to_nonnegative_int(T value, int upper) { + FMT_ASSERT(value >= 0 && value <= upper, "invalid value"); + (void)upper; + return static_cast(value); +} +template ::value)> +inline int to_nonnegative_int(T value, int upper) { + FMT_ASSERT( + std::isnan(value) || (value >= 0 && value <= static_cast(upper)), + "invalid value"); + (void)upper; + return static_cast(value); +} + +template ::value)> +inline T mod(T x, int y) { + return x % static_cast(y); +} +template ::value)> +inline T mod(T x, int y) { + return std::fmod(x, static_cast(y)); +} + +// If T is an integral type, maps T to its unsigned counterpart, otherwise +// leaves it unchanged (unlike std::make_unsigned). +template ::value> +struct make_unsigned_or_unchanged { + using type = T; +}; + +template struct make_unsigned_or_unchanged { + using type = typename std::make_unsigned::type; +}; + +#if FMT_SAFE_DURATION_CAST +// throwing version of safe_duration_cast +template +To fmt_safe_duration_cast(std::chrono::duration from) { + int ec; + To to = safe_duration_cast::safe_duration_cast(from, ec); + if (ec) FMT_THROW(format_error("cannot format duration")); + return to; +} +#endif + +template ::value)> +inline std::chrono::duration get_milliseconds( + std::chrono::duration d) { + // this may overflow and/or the result may not fit in the + // target type. +#if FMT_SAFE_DURATION_CAST + using CommonSecondsType = + typename std::common_type::type; + const auto d_as_common = fmt_safe_duration_cast(d); + const auto d_as_whole_seconds = + fmt_safe_duration_cast(d_as_common); + // this conversion should be nonproblematic + const auto diff = d_as_common - d_as_whole_seconds; + const auto ms = + fmt_safe_duration_cast>(diff); + return ms; +#else + auto s = std::chrono::duration_cast(d); + return std::chrono::duration_cast(d - s); +#endif +} + +template ::value)> +inline std::chrono::duration get_milliseconds( + std::chrono::duration d) { + using common_type = typename std::common_type::type; + auto ms = mod(d.count() * static_cast(Period::num) / + static_cast(Period::den) * 1000, + 1000); + return std::chrono::duration(static_cast(ms)); +} + +template +OutputIt format_duration_value(OutputIt out, Rep val, int precision) { + const Char pr_f[] = {'{', ':', '.', '{', '}', 'f', '}', 0}; + if (precision >= 0) return format_to(out, pr_f, val, precision); + const Char fp_f[] = {'{', ':', 'g', '}', 0}; + const Char format[] = {'{', '}', 0}; + return format_to(out, std::is_floating_point::value ? fp_f : format, + val); +} + +template +OutputIt format_duration_unit(OutputIt out) { + if (const char* unit = get_units()) { + string_view s(unit); + if (const_check(std::is_same())) { + utf8_to_utf16 u(s); + return std::copy(u.c_str(), u.c_str() + u.size(), out); + } + return std::copy(s.begin(), s.end(), out); + } + const Char num_f[] = {'[', '{', '}', ']', 's', 0}; + if (Period::den == 1) return format_to(out, num_f, Period::num); + const Char num_def_f[] = {'[', '{', '}', '/', '{', '}', ']', 's', 0}; + return format_to(out, num_def_f, Period::num, Period::den); +} + +template +struct chrono_formatter { + FormatContext& context; + OutputIt out; + int precision; + // rep is unsigned to avoid overflow. + using rep = + conditional_t::value && sizeof(Rep) < sizeof(int), + unsigned, typename make_unsigned_or_unchanged::type>; + rep val; + using seconds = std::chrono::duration; + seconds s; + using milliseconds = std::chrono::duration; + bool negative; + + using char_type = typename FormatContext::char_type; + + explicit chrono_formatter(FormatContext& ctx, OutputIt o, + std::chrono::duration d) + : context(ctx), + out(o), + val(static_cast(d.count())), + negative(false) { + if (d.count() < 0) { + val = 0 - val; + negative = true; + } + + // this may overflow and/or the result may not fit in the + // target type. +#if FMT_SAFE_DURATION_CAST + // might need checked conversion (rep!=Rep) + auto tmpval = std::chrono::duration(val); + s = fmt_safe_duration_cast(tmpval); +#else + s = std::chrono::duration_cast( + std::chrono::duration(val)); +#endif + } + + // returns true if nan or inf, writes to out. + bool handle_nan_inf() { + if (isfinite(val)) { + return false; + } + if (isnan(val)) { + write_nan(); + return true; + } + // must be +-inf + if (val > 0) { + write_pinf(); + } else { + write_ninf(); + } + return true; + } + + Rep hour() const { return static_cast(mod((s.count() / 3600), 24)); } + + Rep hour12() const { + Rep hour = static_cast(mod((s.count() / 3600), 12)); + return hour <= 0 ? 12 : hour; + } + + Rep minute() const { return static_cast(mod((s.count() / 60), 60)); } + Rep second() const { return static_cast(mod(s.count(), 60)); } + + std::tm time() const { + auto time = std::tm(); + time.tm_hour = to_nonnegative_int(hour(), 24); + time.tm_min = to_nonnegative_int(minute(), 60); + time.tm_sec = to_nonnegative_int(second(), 60); + return time; + } + + void write_sign() { + if (negative) { + *out++ = '-'; + negative = false; + } + } + + void write(Rep value, int width) { + write_sign(); + if (isnan(value)) return write_nan(); + uint32_or_64_or_128_t n = + to_unsigned(to_nonnegative_int(value, max_value())); + int num_digits = internal::count_digits(n); + if (width > num_digits) out = std::fill_n(out, width - num_digits, '0'); + out = format_decimal(out, n, num_digits); + } + + void write_nan() { std::copy_n("nan", 3, out); } + void write_pinf() { std::copy_n("inf", 3, out); } + void write_ninf() { std::copy_n("-inf", 4, out); } + + void format_localized(const tm& time, char format, char modifier = 0) { + if (isnan(val)) return write_nan(); + auto locale = context.locale().template get(); + auto& facet = std::use_facet>(locale); + std::basic_ostringstream os; + os.imbue(locale); + facet.put(os, os, ' ', &time, format, modifier); + auto str = os.str(); + std::copy(str.begin(), str.end(), out); + } + + void on_text(const char_type* begin, const char_type* end) { + std::copy(begin, end, out); + } + + // These are not implemented because durations don't have date information. + void on_abbr_weekday() {} + void on_full_weekday() {} + void on_dec0_weekday(numeric_system) {} + void on_dec1_weekday(numeric_system) {} + void on_abbr_month() {} + void on_full_month() {} + void on_datetime(numeric_system) {} + void on_loc_date(numeric_system) {} + void on_loc_time(numeric_system) {} + void on_us_date() {} + void on_iso_date() {} + void on_utc_offset() {} + void on_tz_name() {} + + void on_24_hour(numeric_system ns) { + if (handle_nan_inf()) return; + + if (ns == numeric_system::standard) return write(hour(), 2); + auto time = tm(); + time.tm_hour = to_nonnegative_int(hour(), 24); + format_localized(time, 'H', 'O'); + } + + void on_12_hour(numeric_system ns) { + if (handle_nan_inf()) return; + + if (ns == numeric_system::standard) return write(hour12(), 2); + auto time = tm(); + time.tm_hour = to_nonnegative_int(hour12(), 12); + format_localized(time, 'I', 'O'); + } + + void on_minute(numeric_system ns) { + if (handle_nan_inf()) return; + + if (ns == numeric_system::standard) return write(minute(), 2); + auto time = tm(); + time.tm_min = to_nonnegative_int(minute(), 60); + format_localized(time, 'M', 'O'); + } + + void on_second(numeric_system ns) { + if (handle_nan_inf()) return; + + if (ns == numeric_system::standard) { + write(second(), 2); +#if FMT_SAFE_DURATION_CAST + // convert rep->Rep + using duration_rep = std::chrono::duration; + using duration_Rep = std::chrono::duration; + auto tmpval = fmt_safe_duration_cast(duration_rep{val}); +#else + auto tmpval = std::chrono::duration(val); +#endif + auto ms = get_milliseconds(tmpval); + if (ms != std::chrono::milliseconds(0)) { + *out++ = '.'; + write(ms.count(), 3); + } + return; + } + auto time = tm(); + time.tm_sec = to_nonnegative_int(second(), 60); + format_localized(time, 'S', 'O'); + } + + void on_12_hour_time() { + if (handle_nan_inf()) return; + format_localized(time(), 'r'); + } + + void on_24_hour_time() { + if (handle_nan_inf()) { + *out++ = ':'; + handle_nan_inf(); + return; + } + + write(hour(), 2); + *out++ = ':'; + write(minute(), 2); + } + + void on_iso_time() { + on_24_hour_time(); + *out++ = ':'; + if (handle_nan_inf()) return; + write(second(), 2); + } + + void on_am_pm() { + if (handle_nan_inf()) return; + format_localized(time(), 'p'); + } + + void on_duration_value() { + if (handle_nan_inf()) return; + write_sign(); + out = format_duration_value(out, val, precision); + } + + void on_duration_unit() { + out = format_duration_unit(out); + } +}; +} // namespace internal + +template +struct formatter, Char> { + private: + basic_format_specs specs; + int precision; + using arg_ref_type = internal::arg_ref; + arg_ref_type width_ref; + arg_ref_type precision_ref; + mutable basic_string_view format_str; + using duration = std::chrono::duration; + + struct spec_handler { + formatter& f; + basic_format_parse_context& context; + basic_string_view format_str; + + template FMT_CONSTEXPR arg_ref_type make_arg_ref(Id arg_id) { + context.check_arg_id(arg_id); + return arg_ref_type(arg_id); + } + + FMT_CONSTEXPR arg_ref_type make_arg_ref(basic_string_view arg_id) { + context.check_arg_id(arg_id); + return arg_ref_type(arg_id); + } + + FMT_CONSTEXPR arg_ref_type make_arg_ref(internal::auto_id) { + return arg_ref_type(context.next_arg_id()); + } + + void on_error(const char* msg) { FMT_THROW(format_error(msg)); } + void on_fill(basic_string_view fill) { f.specs.fill = fill; } + void on_align(align_t align) { f.specs.align = align; } + void on_width(int width) { f.specs.width = width; } + void on_precision(int _precision) { f.precision = _precision; } + void end_precision() {} + + template void on_dynamic_width(Id arg_id) { + f.width_ref = make_arg_ref(arg_id); + } + + template void on_dynamic_precision(Id arg_id) { + f.precision_ref = make_arg_ref(arg_id); + } + }; + + using iterator = typename basic_format_parse_context::iterator; + struct parse_range { + iterator begin; + iterator end; + }; + + FMT_CONSTEXPR parse_range do_parse(basic_format_parse_context& ctx) { + auto begin = ctx.begin(), end = ctx.end(); + if (begin == end || *begin == '}') return {begin, begin}; + spec_handler handler{*this, ctx, format_str}; + begin = internal::parse_align(begin, end, handler); + if (begin == end) return {begin, begin}; + begin = internal::parse_width(begin, end, handler); + if (begin == end) return {begin, begin}; + if (*begin == '.') { + if (std::is_floating_point::value) + begin = internal::parse_precision(begin, end, handler); + else + handler.on_error("precision not allowed for this argument type"); + } + end = parse_chrono_format(begin, end, internal::chrono_format_checker()); + return {begin, end}; + } + + public: + formatter() : precision(-1) {} + + FMT_CONSTEXPR auto parse(basic_format_parse_context& ctx) + -> decltype(ctx.begin()) { + auto range = do_parse(ctx); + format_str = basic_string_view( + &*range.begin, internal::to_unsigned(range.end - range.begin)); + return range.end; + } + + template + auto format(const duration& d, FormatContext& ctx) -> decltype(ctx.out()) { + auto begin = format_str.begin(), end = format_str.end(); + // As a possible future optimization, we could avoid extra copying if width + // is not specified. + basic_memory_buffer buf; + auto out = std::back_inserter(buf); + using range = internal::output_range; + internal::basic_writer w(range(ctx.out())); + internal::handle_dynamic_spec(specs.width, + width_ref, ctx); + internal::handle_dynamic_spec( + precision, precision_ref, ctx); + if (begin == end || *begin == '}') { + out = internal::format_duration_value(out, d.count(), precision); + internal::format_duration_unit(out); + } else { + internal::chrono_formatter f( + ctx, out, d); + f.precision = precision; + parse_chrono_format(begin, end, f); + } + w.write(buf.data(), buf.size(), specs); + return w.out(); + } +}; + +FMT_END_NAMESPACE + +#endif // FMT_CHRONO_H_ diff --git a/src/fmt/color.h b/src/fmt/color.h new file mode 100644 index 0000000000000000000000000000000000000000..96d9ab6b4382e945a74ac2312b02a5d68c797f95 --- /dev/null +++ b/src/fmt/color.h @@ -0,0 +1,568 @@ +// Formatting library for C++ - color support +// +// Copyright (c) 2018 - present, Victor Zverovich and fmt contributors +// All rights reserved. +// +// For the license information refer to format.h. + +#ifndef FMT_COLOR_H_ +#define FMT_COLOR_H_ + +#include "format.h" + +FMT_BEGIN_NAMESPACE + +enum class color : uint32_t { + alice_blue = 0xF0F8FF, // rgb(240,248,255) + antique_white = 0xFAEBD7, // rgb(250,235,215) + aqua = 0x00FFFF, // rgb(0,255,255) + aquamarine = 0x7FFFD4, // rgb(127,255,212) + azure = 0xF0FFFF, // rgb(240,255,255) + beige = 0xF5F5DC, // rgb(245,245,220) + bisque = 0xFFE4C4, // rgb(255,228,196) + black = 0x000000, // rgb(0,0,0) + blanched_almond = 0xFFEBCD, // rgb(255,235,205) + blue = 0x0000FF, // rgb(0,0,255) + blue_violet = 0x8A2BE2, // rgb(138,43,226) + brown = 0xA52A2A, // rgb(165,42,42) + burly_wood = 0xDEB887, // rgb(222,184,135) + cadet_blue = 0x5F9EA0, // rgb(95,158,160) + chartreuse = 0x7FFF00, // rgb(127,255,0) + chocolate = 0xD2691E, // rgb(210,105,30) + coral = 0xFF7F50, // rgb(255,127,80) + cornflower_blue = 0x6495ED, // rgb(100,149,237) + cornsilk = 0xFFF8DC, // rgb(255,248,220) + crimson = 0xDC143C, // rgb(220,20,60) + cyan = 0x00FFFF, // rgb(0,255,255) + dark_blue = 0x00008B, // rgb(0,0,139) + dark_cyan = 0x008B8B, // rgb(0,139,139) + dark_golden_rod = 0xB8860B, // rgb(184,134,11) + dark_gray = 0xA9A9A9, // rgb(169,169,169) + dark_green = 0x006400, // rgb(0,100,0) + dark_khaki = 0xBDB76B, // rgb(189,183,107) + dark_magenta = 0x8B008B, // rgb(139,0,139) + dark_olive_green = 0x556B2F, // rgb(85,107,47) + dark_orange = 0xFF8C00, // rgb(255,140,0) + dark_orchid = 0x9932CC, // rgb(153,50,204) + dark_red = 0x8B0000, // rgb(139,0,0) + dark_salmon = 0xE9967A, // rgb(233,150,122) + dark_sea_green = 0x8FBC8F, // rgb(143,188,143) + dark_slate_blue = 0x483D8B, // rgb(72,61,139) + dark_slate_gray = 0x2F4F4F, // rgb(47,79,79) + dark_turquoise = 0x00CED1, // rgb(0,206,209) + dark_violet = 0x9400D3, // rgb(148,0,211) + deep_pink = 0xFF1493, // rgb(255,20,147) + deep_sky_blue = 0x00BFFF, // rgb(0,191,255) + dim_gray = 0x696969, // rgb(105,105,105) + dodger_blue = 0x1E90FF, // rgb(30,144,255) + fire_brick = 0xB22222, // rgb(178,34,34) + floral_white = 0xFFFAF0, // rgb(255,250,240) + forest_green = 0x228B22, // rgb(34,139,34) + fuchsia = 0xFF00FF, // rgb(255,0,255) + gainsboro = 0xDCDCDC, // rgb(220,220,220) + ghost_white = 0xF8F8FF, // rgb(248,248,255) + gold = 0xFFD700, // rgb(255,215,0) + golden_rod = 0xDAA520, // rgb(218,165,32) + gray = 0x808080, // rgb(128,128,128) + green = 0x008000, // rgb(0,128,0) + green_yellow = 0xADFF2F, // rgb(173,255,47) + honey_dew = 0xF0FFF0, // rgb(240,255,240) + hot_pink = 0xFF69B4, // rgb(255,105,180) + indian_red = 0xCD5C5C, // rgb(205,92,92) + indigo = 0x4B0082, // rgb(75,0,130) + ivory = 0xFFFFF0, // rgb(255,255,240) + khaki = 0xF0E68C, // rgb(240,230,140) + lavender = 0xE6E6FA, // rgb(230,230,250) + lavender_blush = 0xFFF0F5, // rgb(255,240,245) + lawn_green = 0x7CFC00, // rgb(124,252,0) + lemon_chiffon = 0xFFFACD, // rgb(255,250,205) + light_blue = 0xADD8E6, // rgb(173,216,230) + light_coral = 0xF08080, // rgb(240,128,128) + light_cyan = 0xE0FFFF, // rgb(224,255,255) + light_golden_rod_yellow = 0xFAFAD2, // rgb(250,250,210) + light_gray = 0xD3D3D3, // rgb(211,211,211) + light_green = 0x90EE90, // rgb(144,238,144) + light_pink = 0xFFB6C1, // rgb(255,182,193) + light_salmon = 0xFFA07A, // rgb(255,160,122) + light_sea_green = 0x20B2AA, // rgb(32,178,170) + light_sky_blue = 0x87CEFA, // rgb(135,206,250) + light_slate_gray = 0x778899, // rgb(119,136,153) + light_steel_blue = 0xB0C4DE, // rgb(176,196,222) + light_yellow = 0xFFFFE0, // rgb(255,255,224) + lime = 0x00FF00, // rgb(0,255,0) + lime_green = 0x32CD32, // rgb(50,205,50) + linen = 0xFAF0E6, // rgb(250,240,230) + magenta = 0xFF00FF, // rgb(255,0,255) + maroon = 0x800000, // rgb(128,0,0) + medium_aquamarine = 0x66CDAA, // rgb(102,205,170) + medium_blue = 0x0000CD, // rgb(0,0,205) + medium_orchid = 0xBA55D3, // rgb(186,85,211) + medium_purple = 0x9370DB, // rgb(147,112,219) + medium_sea_green = 0x3CB371, // rgb(60,179,113) + medium_slate_blue = 0x7B68EE, // rgb(123,104,238) + medium_spring_green = 0x00FA9A, // rgb(0,250,154) + medium_turquoise = 0x48D1CC, // rgb(72,209,204) + medium_violet_red = 0xC71585, // rgb(199,21,133) + midnight_blue = 0x191970, // rgb(25,25,112) + mint_cream = 0xF5FFFA, // rgb(245,255,250) + misty_rose = 0xFFE4E1, // rgb(255,228,225) + moccasin = 0xFFE4B5, // rgb(255,228,181) + navajo_white = 0xFFDEAD, // rgb(255,222,173) + navy = 0x000080, // rgb(0,0,128) + old_lace = 0xFDF5E6, // rgb(253,245,230) + olive = 0x808000, // rgb(128,128,0) + olive_drab = 0x6B8E23, // rgb(107,142,35) + orange = 0xFFA500, // rgb(255,165,0) + orange_red = 0xFF4500, // rgb(255,69,0) + orchid = 0xDA70D6, // rgb(218,112,214) + pale_golden_rod = 0xEEE8AA, // rgb(238,232,170) + pale_green = 0x98FB98, // rgb(152,251,152) + pale_turquoise = 0xAFEEEE, // rgb(175,238,238) + pale_violet_red = 0xDB7093, // rgb(219,112,147) + papaya_whip = 0xFFEFD5, // rgb(255,239,213) + peach_puff = 0xFFDAB9, // rgb(255,218,185) + peru = 0xCD853F, // rgb(205,133,63) + pink = 0xFFC0CB, // rgb(255,192,203) + plum = 0xDDA0DD, // rgb(221,160,221) + powder_blue = 0xB0E0E6, // rgb(176,224,230) + purple = 0x800080, // rgb(128,0,128) + rebecca_purple = 0x663399, // rgb(102,51,153) + red = 0xFF0000, // rgb(255,0,0) + rosy_brown = 0xBC8F8F, // rgb(188,143,143) + royal_blue = 0x4169E1, // rgb(65,105,225) + saddle_brown = 0x8B4513, // rgb(139,69,19) + salmon = 0xFA8072, // rgb(250,128,114) + sandy_brown = 0xF4A460, // rgb(244,164,96) + sea_green = 0x2E8B57, // rgb(46,139,87) + sea_shell = 0xFFF5EE, // rgb(255,245,238) + sienna = 0xA0522D, // rgb(160,82,45) + silver = 0xC0C0C0, // rgb(192,192,192) + sky_blue = 0x87CEEB, // rgb(135,206,235) + slate_blue = 0x6A5ACD, // rgb(106,90,205) + slate_gray = 0x708090, // rgb(112,128,144) + snow = 0xFFFAFA, // rgb(255,250,250) + spring_green = 0x00FF7F, // rgb(0,255,127) + steel_blue = 0x4682B4, // rgb(70,130,180) + tan = 0xD2B48C, // rgb(210,180,140) + teal = 0x008080, // rgb(0,128,128) + thistle = 0xD8BFD8, // rgb(216,191,216) + tomato = 0xFF6347, // rgb(255,99,71) + turquoise = 0x40E0D0, // rgb(64,224,208) + violet = 0xEE82EE, // rgb(238,130,238) + wheat = 0xF5DEB3, // rgb(245,222,179) + white = 0xFFFFFF, // rgb(255,255,255) + white_smoke = 0xF5F5F5, // rgb(245,245,245) + yellow = 0xFFFF00, // rgb(255,255,0) + yellow_green = 0x9ACD32 // rgb(154,205,50) +}; // enum class color + +enum class terminal_color : uint8_t { + black = 30, + red, + green, + yellow, + blue, + magenta, + cyan, + white, + bright_black = 90, + bright_red, + bright_green, + bright_yellow, + bright_blue, + bright_magenta, + bright_cyan, + bright_white +}; + +enum class emphasis : uint8_t { + bold = 1, + italic = 1 << 1, + underline = 1 << 2, + strikethrough = 1 << 3 +}; + +// rgb is a struct for red, green and blue colors. +// Using the name "rgb" makes some editors show the color in a tooltip. +struct rgb { + FMT_CONSTEXPR rgb() : r(0), g(0), b(0) {} + FMT_CONSTEXPR rgb(uint8_t r_, uint8_t g_, uint8_t b_) : r(r_), g(g_), b(b_) {} + FMT_CONSTEXPR rgb(uint32_t hex) + : r((hex >> 16) & 0xFF), g((hex >> 8) & 0xFF), b(hex & 0xFF) {} + FMT_CONSTEXPR rgb(color hex) + : r((uint32_t(hex) >> 16) & 0xFF), + g((uint32_t(hex) >> 8) & 0xFF), + b(uint32_t(hex) & 0xFF) {} + uint8_t r; + uint8_t g; + uint8_t b; +}; + +namespace internal { + +// color is a struct of either a rgb color or a terminal color. +struct color_type { + FMT_CONSTEXPR color_type() FMT_NOEXCEPT : is_rgb(), value{} {} + FMT_CONSTEXPR color_type(color rgb_color) FMT_NOEXCEPT : is_rgb(true), + value{} { + value.rgb_color = static_cast(rgb_color); + } + FMT_CONSTEXPR color_type(rgb rgb_color) FMT_NOEXCEPT : is_rgb(true), value{} { + value.rgb_color = (static_cast(rgb_color.r) << 16) | + (static_cast(rgb_color.g) << 8) | rgb_color.b; + } + FMT_CONSTEXPR color_type(terminal_color term_color) FMT_NOEXCEPT : is_rgb(), + value{} { + value.term_color = static_cast(term_color); + } + bool is_rgb; + union color_union { + uint8_t term_color; + uint32_t rgb_color; + } value; +}; +} // namespace internal + +// Experimental text formatting support. +class text_style { + public: + FMT_CONSTEXPR text_style(emphasis em = emphasis()) FMT_NOEXCEPT + : set_foreground_color(), + set_background_color(), + ems(em) {} + + FMT_CONSTEXPR text_style& operator|=(const text_style& rhs) { + if (!set_foreground_color) { + set_foreground_color = rhs.set_foreground_color; + foreground_color = rhs.foreground_color; + } else if (rhs.set_foreground_color) { + if (!foreground_color.is_rgb || !rhs.foreground_color.is_rgb) + FMT_THROW(format_error("can't OR a terminal color")); + foreground_color.value.rgb_color |= rhs.foreground_color.value.rgb_color; + } + + if (!set_background_color) { + set_background_color = rhs.set_background_color; + background_color = rhs.background_color; + } else if (rhs.set_background_color) { + if (!background_color.is_rgb || !rhs.background_color.is_rgb) + FMT_THROW(format_error("can't OR a terminal color")); + background_color.value.rgb_color |= rhs.background_color.value.rgb_color; + } + + ems = static_cast(static_cast(ems) | + static_cast(rhs.ems)); + return *this; + } + + friend FMT_CONSTEXPR text_style operator|(text_style lhs, + const text_style& rhs) { + return lhs |= rhs; + } + + FMT_CONSTEXPR text_style& operator&=(const text_style& rhs) { + if (!set_foreground_color) { + set_foreground_color = rhs.set_foreground_color; + foreground_color = rhs.foreground_color; + } else if (rhs.set_foreground_color) { + if (!foreground_color.is_rgb || !rhs.foreground_color.is_rgb) + FMT_THROW(format_error("can't AND a terminal color")); + foreground_color.value.rgb_color &= rhs.foreground_color.value.rgb_color; + } + + if (!set_background_color) { + set_background_color = rhs.set_background_color; + background_color = rhs.background_color; + } else if (rhs.set_background_color) { + if (!background_color.is_rgb || !rhs.background_color.is_rgb) + FMT_THROW(format_error("can't AND a terminal color")); + background_color.value.rgb_color &= rhs.background_color.value.rgb_color; + } + + ems = static_cast(static_cast(ems) & + static_cast(rhs.ems)); + return *this; + } + + friend FMT_CONSTEXPR text_style operator&(text_style lhs, + const text_style& rhs) { + return lhs &= rhs; + } + + FMT_CONSTEXPR bool has_foreground() const FMT_NOEXCEPT { + return set_foreground_color; + } + FMT_CONSTEXPR bool has_background() const FMT_NOEXCEPT { + return set_background_color; + } + FMT_CONSTEXPR bool has_emphasis() const FMT_NOEXCEPT { + return static_cast(ems) != 0; + } + FMT_CONSTEXPR internal::color_type get_foreground() const FMT_NOEXCEPT { + FMT_ASSERT(has_foreground(), "no foreground specified for this style"); + return foreground_color; + } + FMT_CONSTEXPR internal::color_type get_background() const FMT_NOEXCEPT { + FMT_ASSERT(has_background(), "no background specified for this style"); + return background_color; + } + FMT_CONSTEXPR emphasis get_emphasis() const FMT_NOEXCEPT { + FMT_ASSERT(has_emphasis(), "no emphasis specified for this style"); + return ems; + } + + private: + FMT_CONSTEXPR text_style(bool is_foreground, + internal::color_type text_color) FMT_NOEXCEPT + : set_foreground_color(), + set_background_color(), + ems() { + if (is_foreground) { + foreground_color = text_color; + set_foreground_color = true; + } else { + background_color = text_color; + set_background_color = true; + } + } + + friend FMT_CONSTEXPR_DECL text_style fg(internal::color_type foreground) + FMT_NOEXCEPT; + friend FMT_CONSTEXPR_DECL text_style bg(internal::color_type background) + FMT_NOEXCEPT; + + internal::color_type foreground_color; + internal::color_type background_color; + bool set_foreground_color; + bool set_background_color; + emphasis ems; +}; + +FMT_CONSTEXPR text_style fg(internal::color_type foreground) FMT_NOEXCEPT { + return text_style(/*is_foreground=*/true, foreground); +} + +FMT_CONSTEXPR text_style bg(internal::color_type background) FMT_NOEXCEPT { + return text_style(/*is_foreground=*/false, background); +} + +FMT_CONSTEXPR text_style operator|(emphasis lhs, emphasis rhs) FMT_NOEXCEPT { + return text_style(lhs) | rhs; +} + +namespace internal { + +template struct ansi_color_escape { + FMT_CONSTEXPR ansi_color_escape(internal::color_type text_color, + const char* esc) FMT_NOEXCEPT { + // If we have a terminal color, we need to output another escape code + // sequence. + if (!text_color.is_rgb) { + bool is_background = esc == internal::data::background_color; + uint32_t value = text_color.value.term_color; + // Background ASCII codes are the same as the foreground ones but with + // 10 more. + if (is_background) value += 10u; + + std::size_t index = 0; + buffer[index++] = static_cast('\x1b'); + buffer[index++] = static_cast('['); + + if (value >= 100u) { + buffer[index++] = static_cast('1'); + value %= 100u; + } + buffer[index++] = static_cast('0' + value / 10u); + buffer[index++] = static_cast('0' + value % 10u); + + buffer[index++] = static_cast('m'); + buffer[index++] = static_cast('\0'); + return; + } + + for (int i = 0; i < 7; i++) { + buffer[i] = static_cast(esc[i]); + } + rgb color(text_color.value.rgb_color); + to_esc(color.r, buffer + 7, ';'); + to_esc(color.g, buffer + 11, ';'); + to_esc(color.b, buffer + 15, 'm'); + buffer[19] = static_cast(0); + } + FMT_CONSTEXPR ansi_color_escape(emphasis em) FMT_NOEXCEPT { + uint8_t em_codes[4] = {}; + uint8_t em_bits = static_cast(em); + if (em_bits & static_cast(emphasis::bold)) em_codes[0] = 1; + if (em_bits & static_cast(emphasis::italic)) em_codes[1] = 3; + if (em_bits & static_cast(emphasis::underline)) em_codes[2] = 4; + if (em_bits & static_cast(emphasis::strikethrough)) + em_codes[3] = 9; + + std::size_t index = 0; + for (int i = 0; i < 4; ++i) { + if (!em_codes[i]) continue; + buffer[index++] = static_cast('\x1b'); + buffer[index++] = static_cast('['); + buffer[index++] = static_cast('0' + em_codes[i]); + buffer[index++] = static_cast('m'); + } + buffer[index++] = static_cast(0); + } + FMT_CONSTEXPR operator const Char*() const FMT_NOEXCEPT { return buffer; } + + FMT_CONSTEXPR const Char* begin() const FMT_NOEXCEPT { return buffer; } + FMT_CONSTEXPR const Char* end() const FMT_NOEXCEPT { + return buffer + std::char_traits::length(buffer); + } + + private: + Char buffer[7u + 3u * 4u + 1u]; + + static FMT_CONSTEXPR void to_esc(uint8_t c, Char* out, + char delimiter) FMT_NOEXCEPT { + out[0] = static_cast('0' + c / 100); + out[1] = static_cast('0' + c / 10 % 10); + out[2] = static_cast('0' + c % 10); + out[3] = static_cast(delimiter); + } +}; + +template +FMT_CONSTEXPR ansi_color_escape make_foreground_color( + internal::color_type foreground) FMT_NOEXCEPT { + return ansi_color_escape(foreground, internal::data::foreground_color); +} + +template +FMT_CONSTEXPR ansi_color_escape make_background_color( + internal::color_type background) FMT_NOEXCEPT { + return ansi_color_escape(background, internal::data::background_color); +} + +template +FMT_CONSTEXPR ansi_color_escape make_emphasis(emphasis em) FMT_NOEXCEPT { + return ansi_color_escape(em); +} + +template +inline void fputs(const Char* chars, FILE* stream) FMT_NOEXCEPT { + std::fputs(chars, stream); +} + +template <> +inline void fputs(const wchar_t* chars, FILE* stream) FMT_NOEXCEPT { + std::fputws(chars, stream); +} + +template inline void reset_color(FILE* stream) FMT_NOEXCEPT { + fputs(internal::data::reset_color, stream); +} + +template <> inline void reset_color(FILE* stream) FMT_NOEXCEPT { + fputs(internal::data::wreset_color, stream); +} + +template +inline void reset_color(basic_memory_buffer& buffer) FMT_NOEXCEPT { + const char* begin = data::reset_color; + const char* end = begin + sizeof(data::reset_color) - 1; + buffer.append(begin, end); +} + +template +void vformat_to(basic_memory_buffer& buf, const text_style& ts, + basic_string_view format_str, + basic_format_args> args) { + bool has_style = false; + if (ts.has_emphasis()) { + has_style = true; + auto emphasis = internal::make_emphasis(ts.get_emphasis()); + buf.append(emphasis.begin(), emphasis.end()); + } + if (ts.has_foreground()) { + has_style = true; + auto foreground = + internal::make_foreground_color(ts.get_foreground()); + buf.append(foreground.begin(), foreground.end()); + } + if (ts.has_background()) { + has_style = true; + auto background = + internal::make_background_color(ts.get_background()); + buf.append(background.begin(), background.end()); + } + internal::vformat_to(buf, format_str, args); + if (has_style) internal::reset_color(buf); +} +} // namespace internal + +template > +void vprint(std::FILE* f, const text_style& ts, const S& format, + basic_format_args> args) { + basic_memory_buffer buf; + internal::vformat_to(buf, ts, to_string_view(format), args); + buf.push_back(Char(0)); + internal::fputs(buf.data(), f); +} + +/** + Formats a string and prints it to the specified file stream using ANSI + escape sequences to specify text formatting. + Example: + fmt::print(fmt::emphasis::bold | fg(fmt::color::red), + "Elapsed time: {0:.2f} seconds", 1.23); + */ +template ::value)> +void print(std::FILE* f, const text_style& ts, const S& format_str, + const Args&... args) { + internal::check_format_string(format_str); + using context = buffer_context>; + format_arg_store as{args...}; + vprint(f, ts, format_str, basic_format_args(as)); +} + +/** + Formats a string and prints it to stdout using ANSI escape sequences to + specify text formatting. + Example: + fmt::print(fmt::emphasis::bold | fg(fmt::color::red), + "Elapsed time: {0:.2f} seconds", 1.23); + */ +template ::value)> +void print(const text_style& ts, const S& format_str, const Args&... args) { + return print(stdout, ts, format_str, args...); +} + +template > +inline std::basic_string vformat( + const text_style& ts, const S& format_str, + basic_format_args>> args) { + basic_memory_buffer buf; + internal::vformat_to(buf, ts, to_string_view(format_str), args); + return fmt::to_string(buf); +} + +/** + \rst + Formats arguments and returns the result as a string using ANSI + escape sequences to specify text formatting. + + **Example**:: + + #include + std::string message = fmt::format(fmt::emphasis::bold | fg(fmt::color::red), + "The answer is {}", 42); + \endrst +*/ +template > +inline std::basic_string format(const text_style& ts, const S& format_str, + const Args&... args) { + return vformat(ts, to_string_view(format_str), + internal::make_args_checked(format_str, args...)); +} + +FMT_END_NAMESPACE + +#endif // FMT_COLOR_H_ diff --git a/src/fmt/compile.h b/src/fmt/compile.h new file mode 100644 index 0000000000000000000000000000000000000000..e4b12f349e9a9e5af749ad1dcfa51e0d9e85a5c9 --- /dev/null +++ b/src/fmt/compile.h @@ -0,0 +1,595 @@ +// Formatting library for C++ - experimental format string compilation +// +// Copyright (c) 2012 - present, Victor Zverovich and fmt contributors +// All rights reserved. +// +// For the license information refer to format.h. + +#ifndef FMT_COMPILE_H_ +#define FMT_COMPILE_H_ + +#include + +#include "format.h" + +FMT_BEGIN_NAMESPACE +namespace internal { + +// Part of a compiled format string. It can be either literal text or a +// replacement field. +template struct format_part { + enum class kind { arg_index, arg_name, text, replacement }; + + struct replacement { + arg_ref arg_id; + dynamic_format_specs specs; + }; + + kind part_kind; + union value { + int arg_index; + basic_string_view str; + replacement repl; + + FMT_CONSTEXPR value(int index = 0) : arg_index(index) {} + FMT_CONSTEXPR value(basic_string_view s) : str(s) {} + FMT_CONSTEXPR value(replacement r) : repl(r) {} + } val; + // Position past the end of the argument id. + const Char* arg_id_end = nullptr; + + FMT_CONSTEXPR format_part(kind k = kind::arg_index, value v = {}) + : part_kind(k), val(v) {} + + static FMT_CONSTEXPR format_part make_arg_index(int index) { + return format_part(kind::arg_index, index); + } + static FMT_CONSTEXPR format_part make_arg_name(basic_string_view name) { + return format_part(kind::arg_name, name); + } + static FMT_CONSTEXPR format_part make_text(basic_string_view text) { + return format_part(kind::text, text); + } + static FMT_CONSTEXPR format_part make_replacement(replacement repl) { + return format_part(kind::replacement, repl); + } +}; + +template struct part_counter { + unsigned num_parts = 0; + + FMT_CONSTEXPR void on_text(const Char* begin, const Char* end) { + if (begin != end) ++num_parts; + } + + FMT_CONSTEXPR void on_arg_id() { ++num_parts; } + FMT_CONSTEXPR void on_arg_id(int) { ++num_parts; } + FMT_CONSTEXPR void on_arg_id(basic_string_view) { ++num_parts; } + + FMT_CONSTEXPR void on_replacement_field(const Char*) {} + + FMT_CONSTEXPR const Char* on_format_specs(const Char* begin, + const Char* end) { + // Find the matching brace. + unsigned brace_counter = 0; + for (; begin != end; ++begin) { + if (*begin == '{') { + ++brace_counter; + } else if (*begin == '}') { + if (brace_counter == 0u) break; + --brace_counter; + } + } + return begin; + } + + FMT_CONSTEXPR void on_error(const char*) {} +}; + +// Counts the number of parts in a format string. +template +FMT_CONSTEXPR unsigned count_parts(basic_string_view format_str) { + part_counter counter; + parse_format_string(format_str, counter); + return counter.num_parts; +} + +template +class format_string_compiler : public error_handler { + private: + using part = format_part; + + PartHandler handler_; + part part_; + basic_string_view format_str_; + basic_format_parse_context parse_context_; + + public: + FMT_CONSTEXPR format_string_compiler(basic_string_view format_str, + PartHandler handler) + : handler_(handler), + format_str_(format_str), + parse_context_(format_str) {} + + FMT_CONSTEXPR void on_text(const Char* begin, const Char* end) { + if (begin != end) + handler_(part::make_text({begin, to_unsigned(end - begin)})); + } + + FMT_CONSTEXPR void on_arg_id() { + part_ = part::make_arg_index(parse_context_.next_arg_id()); + } + + FMT_CONSTEXPR void on_arg_id(int id) { + parse_context_.check_arg_id(id); + part_ = part::make_arg_index(id); + } + + FMT_CONSTEXPR void on_arg_id(basic_string_view id) { + part_ = part::make_arg_name(id); + } + + FMT_CONSTEXPR void on_replacement_field(const Char* ptr) { + part_.arg_id_end = ptr; + handler_(part_); + } + + FMT_CONSTEXPR const Char* on_format_specs(const Char* begin, + const Char* end) { + auto repl = typename part::replacement(); + dynamic_specs_handler> handler( + repl.specs, parse_context_); + auto it = parse_format_specs(begin, end, handler); + if (*it != '}') on_error("missing '}' in format string"); + repl.arg_id = part_.part_kind == part::kind::arg_index + ? arg_ref(part_.val.arg_index) + : arg_ref(part_.val.str); + auto part = part::make_replacement(repl); + part.arg_id_end = begin; + handler_(part); + return it; + } +}; + +// Compiles a format string and invokes handler(part) for each parsed part. +template +FMT_CONSTEXPR void compile_format_string(basic_string_view format_str, + PartHandler handler) { + parse_format_string( + format_str, + format_string_compiler(format_str, handler)); +} + +template +void format_arg( + basic_format_parse_context& parse_ctx, + Context& ctx, Id arg_id) { + ctx.advance_to( + visit_format_arg(arg_formatter(ctx, &parse_ctx), ctx.arg(arg_id))); +} + +// vformat_to is defined in a subnamespace to prevent ADL. +namespace cf { +template +auto vformat_to(Range out, CompiledFormat& cf, basic_format_args args) + -> typename Context::iterator { + using char_type = typename Context::char_type; + basic_format_parse_context parse_ctx( + to_string_view(cf.format_str_)); + Context ctx(out.begin(), args); + + const auto& parts = cf.parts(); + for (auto part_it = std::begin(parts); part_it != std::end(parts); + ++part_it) { + const auto& part = *part_it; + const auto& value = part.val; + + using format_part_t = format_part; + switch (part.part_kind) { + case format_part_t::kind::text: { + const auto text = value.str; + auto output = ctx.out(); + auto&& it = reserve(output, text.size()); + it = std::copy_n(text.begin(), text.size(), it); + ctx.advance_to(output); + break; + } + + case format_part_t::kind::arg_index: + advance_to(parse_ctx, part.arg_id_end); + internal::format_arg(parse_ctx, ctx, value.arg_index); + break; + + case format_part_t::kind::arg_name: + advance_to(parse_ctx, part.arg_id_end); + internal::format_arg(parse_ctx, ctx, value.str); + break; + + case format_part_t::kind::replacement: { + const auto& arg_id_value = value.repl.arg_id.val; + const auto arg = value.repl.arg_id.kind == arg_id_kind::index + ? ctx.arg(arg_id_value.index) + : ctx.arg(arg_id_value.name); + + auto specs = value.repl.specs; + + handle_dynamic_spec(specs.width, specs.width_ref, ctx); + handle_dynamic_spec(specs.precision, + specs.precision_ref, ctx); + + error_handler h; + numeric_specs_checker checker(h, arg.type()); + if (specs.align == align::numeric) checker.require_numeric_argument(); + if (specs.sign != sign::none) checker.check_sign(); + if (specs.alt) checker.require_numeric_argument(); + if (specs.precision >= 0) checker.check_precision(); + + advance_to(parse_ctx, part.arg_id_end); + ctx.advance_to( + visit_format_arg(arg_formatter(ctx, nullptr, &specs), arg)); + break; + } + } + } + return ctx.out(); +} +} // namespace cf + +struct basic_compiled_format {}; + +template +struct compiled_format_base : basic_compiled_format { + using char_type = char_t; + using parts_container = std::vector>; + + parts_container compiled_parts; + + explicit compiled_format_base(basic_string_view format_str) { + compile_format_string(format_str, + [this](const format_part& part) { + compiled_parts.push_back(part); + }); + } + + const parts_container& parts() const { return compiled_parts; } +}; + +template struct format_part_array { + format_part data[N] = {}; + FMT_CONSTEXPR format_part_array() = default; +}; + +template +FMT_CONSTEXPR format_part_array compile_to_parts( + basic_string_view format_str) { + format_part_array parts; + unsigned counter = 0; + // This is not a lambda for compatibility with older compilers. + struct { + format_part* parts; + unsigned* counter; + FMT_CONSTEXPR void operator()(const format_part& part) { + parts[(*counter)++] = part; + } + } collector{parts.data, &counter}; + compile_format_string(format_str, collector); + if (counter < N) { + parts.data[counter] = + format_part::make_text(basic_string_view()); + } + return parts; +} + +template constexpr const T& constexpr_max(const T& a, const T& b) { + return (a < b) ? b : a; +} + +template +struct compiled_format_base::value>> + : basic_compiled_format { + using char_type = char_t; + + FMT_CONSTEXPR explicit compiled_format_base(basic_string_view) {} + +// Workaround for old compilers. Format string compilation will not be +// performed there anyway. +#if FMT_USE_CONSTEXPR + static FMT_CONSTEXPR_DECL const unsigned num_format_parts = + constexpr_max(count_parts(to_string_view(S())), 1u); +#else + static const unsigned num_format_parts = 1; +#endif + + using parts_container = format_part[num_format_parts]; + + const parts_container& parts() const { + static FMT_CONSTEXPR_DECL const auto compiled_parts = + compile_to_parts( + internal::to_string_view(S())); + return compiled_parts.data; + } +}; + +template +class compiled_format : private compiled_format_base { + public: + using typename compiled_format_base::char_type; + + private: + basic_string_view format_str_; + + template + friend auto cf::vformat_to(Range out, CompiledFormat& cf, + basic_format_args args) -> + typename Context::iterator; + + public: + compiled_format() = delete; + explicit constexpr compiled_format(basic_string_view format_str) + : compiled_format_base(format_str), format_str_(format_str) {} +}; + +#ifdef __cpp_if_constexpr +template struct type_list {}; + +// Returns a reference to the argument at index N from [first, rest...]. +template +constexpr const auto& get(const T& first, const Args&... rest) { + static_assert(N < 1 + sizeof...(Args), "index is out of bounds"); + if constexpr (N == 0) + return first; + else + return get(rest...); +} + +template struct get_type_impl; + +template struct get_type_impl> { + using type = remove_cvref_t(std::declval()...))>; +}; + +template +using get_type = typename get_type_impl::type; + +template struct is_compiled_format : std::false_type {}; + +template struct text { + basic_string_view data; + using char_type = Char; + + template + OutputIt format(OutputIt out, const Args&...) const { + // TODO: reserve + return copy_str(data.begin(), data.end(), out); + } +}; + +template +struct is_compiled_format> : std::true_type {}; + +template +constexpr text make_text(basic_string_view s, size_t pos, + size_t size) { + return {{&s[pos], size}}; +} + +template , int> = 0> +OutputIt format_default(OutputIt out, T value) { + // TODO: reserve + format_int fi(value); + return std::copy(fi.data(), fi.data() + fi.size(), out); +} + +template +OutputIt format_default(OutputIt out, double value) { + writer w(out); + w.write(value); + return w.out(); +} + +template +OutputIt format_default(OutputIt out, Char value) { + *out++ = value; + return out; +} + +template +OutputIt format_default(OutputIt out, const Char* value) { + auto length = std::char_traits::length(value); + return copy_str(value, value + length, out); +} + +// A replacement field that refers to argument N. +template struct field { + using char_type = Char; + + template + OutputIt format(OutputIt out, const Args&... args) const { + // This ensures that the argument type is convertile to `const T&`. + const T& arg = get(args...); + return format_default(out, arg); + } +}; + +template +struct is_compiled_format> : std::true_type {}; + +template struct concat { + L lhs; + R rhs; + using char_type = typename L::char_type; + + template + OutputIt format(OutputIt out, const Args&... args) const { + out = lhs.format(out, args...); + return rhs.format(out, args...); + } +}; + +template +struct is_compiled_format> : std::true_type {}; + +template +constexpr concat make_concat(L lhs, R rhs) { + return {lhs, rhs}; +} + +struct unknown_format {}; + +template +constexpr size_t parse_text(basic_string_view str, size_t pos) { + for (size_t size = str.size(); pos != size; ++pos) { + if (str[pos] == '{' || str[pos] == '}') break; + } + return pos; +} + +template +constexpr auto compile_format_string(S format_str); + +template +constexpr auto parse_tail(T head, S format_str) { + if constexpr (POS != to_string_view(format_str).size()) { + constexpr auto tail = compile_format_string(format_str); + if constexpr (std::is_same, + unknown_format>()) + return tail; + else + return make_concat(head, tail); + } else { + return head; + } +} + +// Compiles a non-empty format string and returns the compiled representation +// or unknown_format() on unrecognized input. +template +constexpr auto compile_format_string(S format_str) { + using char_type = typename S::char_type; + constexpr basic_string_view str = format_str; + if constexpr (str[POS] == '{') { + if (POS + 1 == str.size()) + throw format_error("unmatched '{' in format string"); + if constexpr (str[POS + 1] == '{') { + return parse_tail(make_text(str, POS, 1), format_str); + } else if constexpr (str[POS + 1] == '}') { + using type = get_type; + if constexpr (std::is_same::value) { + return parse_tail(field(), + format_str); + } else { + return unknown_format(); + } + } else { + return unknown_format(); + } + } else if constexpr (str[POS] == '}') { + if (POS + 1 == str.size()) + throw format_error("unmatched '}' in format string"); + return parse_tail(make_text(str, POS, 1), format_str); + } else { + constexpr auto end = parse_text(str, POS + 1); + return parse_tail(make_text(str, POS, end - POS), + format_str); + } +} +#endif // __cpp_if_constexpr +} // namespace internal + +#if FMT_USE_CONSTEXPR +# ifdef __cpp_if_constexpr +template ::value)> +constexpr auto compile(S format_str) { + constexpr basic_string_view str = format_str; + if constexpr (str.size() == 0) { + return internal::make_text(str, 0, 0); + } else { + constexpr auto result = + internal::compile_format_string, 0, 0>( + format_str); + if constexpr (std::is_same, + internal::unknown_format>()) { + return internal::compiled_format(to_string_view(format_str)); + } else { + return result; + } + } +} + +template ::value)> +std::basic_string format(const CompiledFormat& cf, const Args&... args) { + basic_memory_buffer buffer; + cf.format(std::back_inserter(buffer), args...); + return to_string(buffer); +} + +template ::value)> +OutputIt format_to(OutputIt out, const CompiledFormat& cf, + const Args&... args) { + return cf.format(out, args...); +} +# else +template ::value)> +constexpr auto compile(S format_str) -> internal::compiled_format { + return internal::compiled_format(to_string_view(format_str)); +} +# endif // __cpp_if_constexpr +#endif // FMT_USE_CONSTEXPR + +// Compiles the format string which must be a string literal. +template +auto compile(const Char (&format_str)[N]) + -> internal::compiled_format { + return internal::compiled_format( + basic_string_view(format_str, N - 1)); +} + +template ::value)> +std::basic_string format(const CompiledFormat& cf, const Args&... args) { + basic_memory_buffer buffer; + using range = buffer_range; + using context = buffer_context; + internal::cf::vformat_to(range(buffer), cf, + make_format_args(args...)); + return to_string(buffer); +} + +template ::value)> +OutputIt format_to(OutputIt out, const CompiledFormat& cf, + const Args&... args) { + using char_type = typename CompiledFormat::char_type; + using range = internal::output_range; + using context = format_context_t; + return internal::cf::vformat_to(range(out), cf, + make_format_args(args...)); +} + +template ::value)> +format_to_n_result format_to_n(OutputIt out, size_t n, + const CompiledFormat& cf, + const Args&... args) { + auto it = + format_to(internal::truncating_iterator(out, n), cf, args...); + return {it.base(), it.count()}; +} + +template +std::size_t formatted_size(const CompiledFormat& cf, const Args&... args) { + return format_to(internal::counting_iterator(), cf, args...).count(); +} + +FMT_END_NAMESPACE + +#endif // FMT_COMPILE_H_ diff --git a/src/fmt/core.h b/src/fmt/core.h new file mode 100644 index 0000000000000000000000000000000000000000..0e0824f5fe79891b840180228123d2d2d65e9fe0 --- /dev/null +++ b/src/fmt/core.h @@ -0,0 +1,1796 @@ +// Formatting library for C++ - the core API +// +// Copyright (c) 2012 - present, Victor Zverovich +// All rights reserved. +// +// For the license information refer to format.h. + +#ifndef FMT_CORE_H_ +#define FMT_CORE_H_ + +#include // std::FILE +#include +#include +#include +#include +#include +#include +#include + +// The fmt library version in the form major * 10000 + minor * 100 + patch. +#define FMT_VERSION 60201 + +#ifdef __has_feature +# define FMT_HAS_FEATURE(x) __has_feature(x) +#else +# define FMT_HAS_FEATURE(x) 0 +#endif + +#if defined(__has_include) && !defined(__INTELLISENSE__) && \ + !(defined(__INTEL_COMPILER) && __INTEL_COMPILER < 1600) +# define FMT_HAS_INCLUDE(x) __has_include(x) +#else +# define FMT_HAS_INCLUDE(x) 0 +#endif + +#ifdef __has_cpp_attribute +# define FMT_HAS_CPP_ATTRIBUTE(x) __has_cpp_attribute(x) +#else +# define FMT_HAS_CPP_ATTRIBUTE(x) 0 +#endif + +#define FMT_HAS_CPP14_ATTRIBUTE(attribute) \ + (__cplusplus >= 201402L && FMT_HAS_CPP_ATTRIBUTE(attribute)) + +#define FMT_HAS_CPP17_ATTRIBUTE(attribute) \ + (__cplusplus >= 201703L && FMT_HAS_CPP_ATTRIBUTE(attribute)) + +#ifdef __clang__ +# define FMT_CLANG_VERSION (__clang_major__ * 100 + __clang_minor__) +#else +# define FMT_CLANG_VERSION 0 +#endif + +#if defined(__GNUC__) && !defined(__clang__) +# define FMT_GCC_VERSION (__GNUC__ * 100 + __GNUC_MINOR__) +#else +# define FMT_GCC_VERSION 0 +#endif + +#if __cplusplus >= 201103L || defined(__GXX_EXPERIMENTAL_CXX0X__) +# define FMT_HAS_GXX_CXX11 FMT_GCC_VERSION +#else +# define FMT_HAS_GXX_CXX11 0 +#endif + +#ifdef __NVCC__ +# define FMT_NVCC __NVCC__ +#else +# define FMT_NVCC 0 +#endif + +#ifdef _MSC_VER +# define FMT_MSC_VER _MSC_VER +#else +# define FMT_MSC_VER 0 +#endif + +// Check if relaxed C++14 constexpr is supported. +// GCC doesn't allow throw in constexpr until version 6 (bug 67371). +#ifndef FMT_USE_CONSTEXPR +# define FMT_USE_CONSTEXPR \ + (FMT_HAS_FEATURE(cxx_relaxed_constexpr) || FMT_MSC_VER >= 1910 || \ + (FMT_GCC_VERSION >= 600 && __cplusplus >= 201402L)) && \ + !FMT_NVCC +#endif +#if FMT_USE_CONSTEXPR +# define FMT_CONSTEXPR constexpr +# define FMT_CONSTEXPR_DECL constexpr +#else +# define FMT_CONSTEXPR inline +# define FMT_CONSTEXPR_DECL +#endif + +#ifndef FMT_OVERRIDE +# if FMT_HAS_FEATURE(cxx_override) || \ + (FMT_GCC_VERSION >= 408 && FMT_HAS_GXX_CXX11) || FMT_MSC_VER >= 1900 +# define FMT_OVERRIDE override +# else +# define FMT_OVERRIDE +# endif +#endif + +// Check if exceptions are disabled. +#ifndef FMT_EXCEPTIONS +# if (defined(__GNUC__) && !defined(__EXCEPTIONS)) || \ + FMT_MSC_VER && !_HAS_EXCEPTIONS +# define FMT_EXCEPTIONS 0 +# else +# define FMT_EXCEPTIONS 1 +# endif +#endif + +// Define FMT_USE_NOEXCEPT to make fmt use noexcept (C++11 feature). +#ifndef FMT_USE_NOEXCEPT +# define FMT_USE_NOEXCEPT 0 +#endif + +#if FMT_USE_NOEXCEPT || FMT_HAS_FEATURE(cxx_noexcept) || \ + (FMT_GCC_VERSION >= 408 && FMT_HAS_GXX_CXX11) || FMT_MSC_VER >= 1900 +# define FMT_DETECTED_NOEXCEPT noexcept +# define FMT_HAS_CXX11_NOEXCEPT 1 +#else +# define FMT_DETECTED_NOEXCEPT throw() +# define FMT_HAS_CXX11_NOEXCEPT 0 +#endif + +#ifndef FMT_NOEXCEPT +# if FMT_EXCEPTIONS || FMT_HAS_CXX11_NOEXCEPT +# define FMT_NOEXCEPT FMT_DETECTED_NOEXCEPT +# else +# define FMT_NOEXCEPT +# endif +#endif + +// [[noreturn]] is disabled on MSVC and NVCC because of bogus unreachable code +// warnings. +#if FMT_EXCEPTIONS && FMT_HAS_CPP_ATTRIBUTE(noreturn) && !FMT_MSC_VER && \ + !FMT_NVCC +# define FMT_NORETURN [[noreturn]] +#else +# define FMT_NORETURN +#endif + +#ifndef FMT_MAYBE_UNUSED +# if FMT_HAS_CPP17_ATTRIBUTE(maybe_unused) +# define FMT_MAYBE_UNUSED [[maybe_unused]] +# else +# define FMT_MAYBE_UNUSED +# endif +#endif + +#ifndef FMT_DEPRECATED +# if FMT_HAS_CPP14_ATTRIBUTE(deprecated) || FMT_MSC_VER >= 1900 +# define FMT_DEPRECATED [[deprecated]] +# else +# if defined(__GNUC__) || defined(__clang__) +# define FMT_DEPRECATED __attribute__((deprecated)) +# elif FMT_MSC_VER +# define FMT_DEPRECATED __declspec(deprecated) +# else +# define FMT_DEPRECATED /* deprecated */ +# endif +# endif +#endif + +// Workaround broken [[deprecated]] in the Intel, PGI and NVCC compilers. +#if defined(__INTEL_COMPILER) || defined(__PGI) || FMT_NVCC +# define FMT_DEPRECATED_ALIAS +#else +# define FMT_DEPRECATED_ALIAS FMT_DEPRECATED +#endif + +#ifndef FMT_BEGIN_NAMESPACE +# if FMT_HAS_FEATURE(cxx_inline_namespaces) || FMT_GCC_VERSION >= 404 || \ + FMT_MSC_VER >= 1900 +# define FMT_INLINE_NAMESPACE inline namespace +# define FMT_END_NAMESPACE \ + } \ + } +# else +# define FMT_INLINE_NAMESPACE namespace +# define FMT_END_NAMESPACE \ + } \ + using namespace v6; \ + } +# endif +# define FMT_BEGIN_NAMESPACE \ + namespace fmt { \ + FMT_INLINE_NAMESPACE v6 { +#endif + +#if !defined(FMT_HEADER_ONLY) && defined(_WIN32) +# if FMT_MSC_VER +# define FMT_NO_W4275 __pragma(warning(suppress : 4275)) +# else +# define FMT_NO_W4275 +# endif +# define FMT_CLASS_API FMT_NO_W4275 +# ifdef FMT_EXPORT +# define FMT_API __declspec(dllexport) +# elif defined(FMT_SHARED) +# define FMT_API __declspec(dllimport) +# define FMT_EXTERN_TEMPLATE_API FMT_API +# endif +#endif +#ifndef FMT_CLASS_API +# define FMT_CLASS_API +#endif +#ifndef FMT_API +# if FMT_GCC_VERSION || FMT_CLANG_VERSION +# define FMT_API __attribute__((visibility("default"))) +# define FMT_EXTERN_TEMPLATE_API FMT_API +# define FMT_INSTANTIATION_DEF_API +# else +# define FMT_API +# endif +#endif +#ifndef FMT_EXTERN_TEMPLATE_API +# define FMT_EXTERN_TEMPLATE_API +#endif +#ifndef FMT_INSTANTIATION_DEF_API +# define FMT_INSTANTIATION_DEF_API FMT_API +#endif + +#ifndef FMT_HEADER_ONLY +# define FMT_EXTERN extern +#else +# define FMT_EXTERN +#endif + +// libc++ supports string_view in pre-c++17. +#if (FMT_HAS_INCLUDE() && \ + (__cplusplus > 201402L || defined(_LIBCPP_VERSION))) || \ + (defined(_MSVC_LANG) && _MSVC_LANG > 201402L && _MSC_VER >= 1910) +# include +# define FMT_USE_STRING_VIEW +#elif FMT_HAS_INCLUDE("experimental/string_view") && __cplusplus >= 201402L +# include +# define FMT_USE_EXPERIMENTAL_STRING_VIEW +#endif + +#ifndef FMT_UNICODE +# define FMT_UNICODE !FMT_MSC_VER +#endif +#if FMT_UNICODE && FMT_MSC_VER +# pragma execution_character_set("utf-8") +#endif + +FMT_BEGIN_NAMESPACE + +// Implementations of enable_if_t and other metafunctions for older systems. +template +using enable_if_t = typename std::enable_if::type; +template +using conditional_t = typename std::conditional::type; +template using bool_constant = std::integral_constant; +template +using remove_reference_t = typename std::remove_reference::type; +template +using remove_const_t = typename std::remove_const::type; +template +using remove_cvref_t = typename std::remove_cv>::type; +template struct type_identity { using type = T; }; +template using type_identity_t = typename type_identity::type; + +struct monostate {}; + +// An enable_if helper to be used in template parameters which results in much +// shorter symbols: https://godbolt.org/z/sWw4vP. Extra parentheses are needed +// to workaround a bug in MSVC 2019 (see #1140 and #1186). +#define FMT_ENABLE_IF(...) enable_if_t<(__VA_ARGS__), int> = 0 + +namespace internal { + +// A helper function to suppress bogus "conditional expression is constant" +// warnings. +template FMT_CONSTEXPR T const_check(T value) { return value; } + +// A workaround for gcc 4.8 to make void_t work in a SFINAE context. +template struct void_t_impl { using type = void; }; + +FMT_NORETURN FMT_API void assert_fail(const char* file, int line, + const char* message); + +#ifndef FMT_ASSERT +# ifdef NDEBUG +// FMT_ASSERT is not empty to avoid -Werror=empty-body. +# define FMT_ASSERT(condition, message) ((void)0) +# else +# define FMT_ASSERT(condition, message) \ + ((condition) /* void() fails with -Winvalid-constexpr on clang 4.0.1 */ \ + ? (void)0 \ + : ::fmt::internal::assert_fail(__FILE__, __LINE__, (message))) +# endif +#endif + +#if defined(FMT_USE_STRING_VIEW) +template using std_string_view = std::basic_string_view; +#elif defined(FMT_USE_EXPERIMENTAL_STRING_VIEW) +template +using std_string_view = std::experimental::basic_string_view; +#else +template struct std_string_view {}; +#endif + +#ifdef FMT_USE_INT128 +// Do nothing. +#elif defined(__SIZEOF_INT128__) && !FMT_NVCC +# define FMT_USE_INT128 1 +using int128_t = __int128_t; +using uint128_t = __uint128_t; +#else +# define FMT_USE_INT128 0 +#endif +#if !FMT_USE_INT128 +struct int128_t {}; +struct uint128_t {}; +#endif + +// Casts a nonnegative integer to unsigned. +template +FMT_CONSTEXPR typename std::make_unsigned::type to_unsigned(Int value) { + FMT_ASSERT(value >= 0, "negative value"); + return static_cast::type>(value); +} + +constexpr unsigned char micro[] = "\u00B5"; + +template constexpr bool is_unicode() { + return FMT_UNICODE || sizeof(Char) != 1 || + (sizeof(micro) == 3 && micro[0] == 0xC2 && micro[1] == 0xB5); +} + +#ifdef __cpp_char8_t +using char8_type = char8_t; +#else +enum char8_type : unsigned char {}; +#endif +} // namespace internal + +template +using void_t = typename internal::void_t_impl::type; + +/** + An implementation of ``std::basic_string_view`` for pre-C++17. It provides a + subset of the API. ``fmt::basic_string_view`` is used for format strings even + if ``std::string_view`` is available to prevent issues when a library is + compiled with a different ``-std`` option than the client code (which is not + recommended). + */ +template class basic_string_view { + private: + const Char* data_; + size_t size_; + + public: + using char_type FMT_DEPRECATED_ALIAS = Char; + using value_type = Char; + using iterator = const Char*; + + FMT_CONSTEXPR basic_string_view() FMT_NOEXCEPT : data_(nullptr), size_(0) {} + + /** Constructs a string reference object from a C string and a size. */ + FMT_CONSTEXPR basic_string_view(const Char* s, size_t count) FMT_NOEXCEPT + : data_(s), + size_(count) {} + + /** + \rst + Constructs a string reference object from a C string computing + the size with ``std::char_traits::length``. + \endrst + */ +#if __cplusplus >= 201703L // C++17's char_traits::length() is constexpr. + FMT_CONSTEXPR +#endif + basic_string_view(const Char* s) + : data_(s), size_(std::char_traits::length(s)) {} + + /** Constructs a string reference from a ``std::basic_string`` object. */ + template + FMT_CONSTEXPR basic_string_view( + const std::basic_string& s) FMT_NOEXCEPT + : data_(s.data()), + size_(s.size()) {} + + template < + typename S, + FMT_ENABLE_IF(std::is_same>::value)> + FMT_CONSTEXPR basic_string_view(S s) FMT_NOEXCEPT : data_(s.data()), + size_(s.size()) {} + + /** Returns a pointer to the string data. */ + FMT_CONSTEXPR const Char* data() const { return data_; } + + /** Returns the string size. */ + FMT_CONSTEXPR size_t size() const { return size_; } + + FMT_CONSTEXPR iterator begin() const { return data_; } + FMT_CONSTEXPR iterator end() const { return data_ + size_; } + + FMT_CONSTEXPR const Char& operator[](size_t pos) const { return data_[pos]; } + + FMT_CONSTEXPR void remove_prefix(size_t n) { + data_ += n; + size_ -= n; + } + + // Lexicographically compare this string reference to other. + int compare(basic_string_view other) const { + size_t str_size = size_ < other.size_ ? size_ : other.size_; + int result = std::char_traits::compare(data_, other.data_, str_size); + if (result == 0) + result = size_ == other.size_ ? 0 : (size_ < other.size_ ? -1 : 1); + return result; + } + + friend bool operator==(basic_string_view lhs, basic_string_view rhs) { + return lhs.compare(rhs) == 0; + } + friend bool operator!=(basic_string_view lhs, basic_string_view rhs) { + return lhs.compare(rhs) != 0; + } + friend bool operator<(basic_string_view lhs, basic_string_view rhs) { + return lhs.compare(rhs) < 0; + } + friend bool operator<=(basic_string_view lhs, basic_string_view rhs) { + return lhs.compare(rhs) <= 0; + } + friend bool operator>(basic_string_view lhs, basic_string_view rhs) { + return lhs.compare(rhs) > 0; + } + friend bool operator>=(basic_string_view lhs, basic_string_view rhs) { + return lhs.compare(rhs) >= 0; + } +}; + +using string_view = basic_string_view; +using wstring_view = basic_string_view; + +#ifndef __cpp_char8_t +// char8_t is deprecated; use char instead. +using char8_t FMT_DEPRECATED_ALIAS = internal::char8_type; +#endif + +/** Specifies if ``T`` is a character type. Can be specialized by users. */ +template struct is_char : std::false_type {}; +template <> struct is_char : std::true_type {}; +template <> struct is_char : std::true_type {}; +template <> struct is_char : std::true_type {}; +template <> struct is_char : std::true_type {}; +template <> struct is_char : std::true_type {}; + +/** + \rst + Returns a string view of `s`. In order to add custom string type support to + {fmt} provide an overload of `to_string_view` for it in the same namespace as + the type for the argument-dependent lookup to work. + + **Example**:: + + namespace my_ns { + inline string_view to_string_view(const my_string& s) { + return {s.data(), s.length()}; + } + } + std::string message = fmt::format(my_string("The answer is {}"), 42); + \endrst + */ +template ::value)> +inline basic_string_view to_string_view(const Char* s) { + return s; +} + +template +inline basic_string_view to_string_view( + const std::basic_string& s) { + return s; +} + +template +inline basic_string_view to_string_view(basic_string_view s) { + return s; +} + +template >::value)> +inline basic_string_view to_string_view( + internal::std_string_view s) { + return s; +} + +// A base class for compile-time strings. It is defined in the fmt namespace to +// make formatting functions visible via ADL, e.g. format(fmt("{}"), 42). +struct compile_string {}; + +template +struct is_compile_string : std::is_base_of {}; + +template ::value)> +constexpr basic_string_view to_string_view(const S& s) { + return s; +} + +namespace internal { +void to_string_view(...); +using fmt::v6::to_string_view; + +// Specifies whether S is a string type convertible to fmt::basic_string_view. +// It should be a constexpr function but MSVC 2017 fails to compile it in +// enable_if and MSVC 2015 fails to compile it as an alias template. +template +struct is_string : std::is_class()))> { +}; + +template struct char_t_impl {}; +template struct char_t_impl::value>> { + using result = decltype(to_string_view(std::declval())); + using type = typename result::value_type; +}; + +struct error_handler { + FMT_CONSTEXPR error_handler() = default; + FMT_CONSTEXPR error_handler(const error_handler&) = default; + + // This function is intentionally not constexpr to give a compile-time error. + FMT_NORETURN FMT_API void on_error(const char* message); +}; +} // namespace internal + +/** String's character type. */ +template using char_t = typename internal::char_t_impl::type; + +/** + \rst + Parsing context consisting of a format string range being parsed and an + argument counter for automatic indexing. + + You can use one of the following type aliases for common character types: + + +-----------------------+-------------------------------------+ + | Type | Definition | + +=======================+=====================================+ + | format_parse_context | basic_format_parse_context | + +-----------------------+-------------------------------------+ + | wformat_parse_context | basic_format_parse_context | + +-----------------------+-------------------------------------+ + \endrst + */ +template +class basic_format_parse_context : private ErrorHandler { + private: + basic_string_view format_str_; + int next_arg_id_; + + public: + using char_type = Char; + using iterator = typename basic_string_view::iterator; + + explicit FMT_CONSTEXPR basic_format_parse_context( + basic_string_view format_str, ErrorHandler eh = ErrorHandler()) + : ErrorHandler(eh), format_str_(format_str), next_arg_id_(0) {} + + /** + Returns an iterator to the beginning of the format string range being + parsed. + */ + FMT_CONSTEXPR iterator begin() const FMT_NOEXCEPT { + return format_str_.begin(); + } + + /** + Returns an iterator past the end of the format string range being parsed. + */ + FMT_CONSTEXPR iterator end() const FMT_NOEXCEPT { return format_str_.end(); } + + /** Advances the begin iterator to ``it``. */ + FMT_CONSTEXPR void advance_to(iterator it) { + format_str_.remove_prefix(internal::to_unsigned(it - begin())); + } + + /** + Reports an error if using the manual argument indexing; otherwise returns + the next argument index and switches to the automatic indexing. + */ + FMT_CONSTEXPR int next_arg_id() { + if (next_arg_id_ >= 0) return next_arg_id_++; + on_error("cannot switch from manual to automatic argument indexing"); + return 0; + } + + /** + Reports an error if using the automatic argument indexing; otherwise + switches to the manual indexing. + */ + FMT_CONSTEXPR void check_arg_id(int) { + if (next_arg_id_ > 0) + on_error("cannot switch from automatic to manual argument indexing"); + else + next_arg_id_ = -1; + } + + FMT_CONSTEXPR void check_arg_id(basic_string_view) {} + + FMT_CONSTEXPR void on_error(const char* message) { + ErrorHandler::on_error(message); + } + + FMT_CONSTEXPR ErrorHandler error_handler() const { return *this; } +}; + +using format_parse_context = basic_format_parse_context; +using wformat_parse_context = basic_format_parse_context; + +template +using basic_parse_context FMT_DEPRECATED_ALIAS = + basic_format_parse_context; +using parse_context FMT_DEPRECATED_ALIAS = basic_format_parse_context; +using wparse_context FMT_DEPRECATED_ALIAS = basic_format_parse_context; + +template class basic_format_arg; +template class basic_format_args; + +// A formatter for objects of type T. +template +struct formatter { + // A deleted default constructor indicates a disabled formatter. + formatter() = delete; +}; + +template +struct FMT_DEPRECATED convert_to_int + : bool_constant::value && + std::is_convertible::value> {}; + +// Specifies if T has an enabled formatter specialization. A type can be +// formattable even if it doesn't have a formatter e.g. via a conversion. +template +using has_formatter = + std::is_constructible>; + +namespace internal { + +/** A contiguous memory buffer with an optional growing ability. */ +template class buffer { + private: + T* ptr_; + std::size_t size_; + std::size_t capacity_; + + protected: + // Don't initialize ptr_ since it is not accessed to save a few cycles. + buffer(std::size_t sz) FMT_NOEXCEPT : size_(sz), capacity_(sz) {} + + buffer(T* p = nullptr, std::size_t sz = 0, std::size_t cap = 0) FMT_NOEXCEPT + : ptr_(p), + size_(sz), + capacity_(cap) {} + + /** Sets the buffer data and capacity. */ + void set(T* buf_data, std::size_t buf_capacity) FMT_NOEXCEPT { + ptr_ = buf_data; + capacity_ = buf_capacity; + } + + /** Increases the buffer capacity to hold at least *capacity* elements. */ + virtual void grow(std::size_t capacity) = 0; + + public: + using value_type = T; + using const_reference = const T&; + + buffer(const buffer&) = delete; + void operator=(const buffer&) = delete; + virtual ~buffer() = default; + + T* begin() FMT_NOEXCEPT { return ptr_; } + T* end() FMT_NOEXCEPT { return ptr_ + size_; } + + const T* begin() const FMT_NOEXCEPT { return ptr_; } + const T* end() const FMT_NOEXCEPT { return ptr_ + size_; } + + /** Returns the size of this buffer. */ + std::size_t size() const FMT_NOEXCEPT { return size_; } + + /** Returns the capacity of this buffer. */ + std::size_t capacity() const FMT_NOEXCEPT { return capacity_; } + + /** Returns a pointer to the buffer data. */ + T* data() FMT_NOEXCEPT { return ptr_; } + + /** Returns a pointer to the buffer data. */ + const T* data() const FMT_NOEXCEPT { return ptr_; } + + /** + Resizes the buffer. If T is a POD type new elements may not be initialized. + */ + void resize(std::size_t new_size) { + reserve(new_size); + size_ = new_size; + } + + /** Clears this buffer. */ + void clear() { size_ = 0; } + + /** Reserves space to store at least *capacity* elements. */ + void reserve(std::size_t new_capacity) { + if (new_capacity > capacity_) grow(new_capacity); + } + + void push_back(const T& value) { + reserve(size_ + 1); + ptr_[size_++] = value; + } + + /** Appends data to the end of the buffer. */ + template void append(const U* begin, const U* end); + + template T& operator[](I index) { return ptr_[index]; } + template const T& operator[](I index) const { + return ptr_[index]; + } +}; + +// A container-backed buffer. +template +class container_buffer : public buffer { + private: + Container& container_; + + protected: + void grow(std::size_t capacity) FMT_OVERRIDE { + container_.resize(capacity); + this->set(&container_[0], capacity); + } + + public: + explicit container_buffer(Container& c) + : buffer(c.size()), container_(c) {} +}; + +// Extracts a reference to the container from back_insert_iterator. +template +inline Container& get_container(std::back_insert_iterator it) { + using bi_iterator = std::back_insert_iterator; + struct accessor : bi_iterator { + accessor(bi_iterator iter) : bi_iterator(iter) {} + using bi_iterator::container; + }; + return *accessor(it).container; +} + +template +struct fallback_formatter { + fallback_formatter() = delete; +}; + +// Specifies if T has an enabled fallback_formatter specialization. +template +using has_fallback_formatter = + std::is_constructible>; + +template struct named_arg_base; +template struct named_arg; + +enum class type { + none_type, + named_arg_type, + // Integer types should go first, + int_type, + uint_type, + long_long_type, + ulong_long_type, + int128_type, + uint128_type, + bool_type, + char_type, + last_integer_type = char_type, + // followed by floating-point types. + float_type, + double_type, + long_double_type, + last_numeric_type = long_double_type, + cstring_type, + string_type, + pointer_type, + custom_type +}; + +// Maps core type T to the corresponding type enum constant. +template +struct type_constant : std::integral_constant {}; + +#define FMT_TYPE_CONSTANT(Type, constant) \ + template \ + struct type_constant \ + : std::integral_constant {} + +FMT_TYPE_CONSTANT(const named_arg_base&, named_arg_type); +FMT_TYPE_CONSTANT(int, int_type); +FMT_TYPE_CONSTANT(unsigned, uint_type); +FMT_TYPE_CONSTANT(long long, long_long_type); +FMT_TYPE_CONSTANT(unsigned long long, ulong_long_type); +FMT_TYPE_CONSTANT(int128_t, int128_type); +FMT_TYPE_CONSTANT(uint128_t, uint128_type); +FMT_TYPE_CONSTANT(bool, bool_type); +FMT_TYPE_CONSTANT(Char, char_type); +FMT_TYPE_CONSTANT(float, float_type); +FMT_TYPE_CONSTANT(double, double_type); +FMT_TYPE_CONSTANT(long double, long_double_type); +FMT_TYPE_CONSTANT(const Char*, cstring_type); +FMT_TYPE_CONSTANT(basic_string_view, string_type); +FMT_TYPE_CONSTANT(const void*, pointer_type); + +FMT_CONSTEXPR bool is_integral_type(type t) { + FMT_ASSERT(t != type::named_arg_type, "invalid argument type"); + return t > type::none_type && t <= type::last_integer_type; +} + +FMT_CONSTEXPR bool is_arithmetic_type(type t) { + FMT_ASSERT(t != type::named_arg_type, "invalid argument type"); + return t > type::none_type && t <= type::last_numeric_type; +} + +template struct string_value { + const Char* data; + std::size_t size; +}; + +template struct custom_value { + using parse_context = basic_format_parse_context; + const void* value; + void (*format)(const void* arg, + typename Context::parse_context_type& parse_ctx, Context& ctx); +}; + +// A formatting argument value. +template class value { + public: + using char_type = typename Context::char_type; + + union { + int int_value; + unsigned uint_value; + long long long_long_value; + unsigned long long ulong_long_value; + int128_t int128_value; + uint128_t uint128_value; + bool bool_value; + char_type char_value; + float float_value; + double double_value; + long double long_double_value; + const void* pointer; + string_value string; + custom_value custom; + const named_arg_base* named_arg; + }; + + FMT_CONSTEXPR value(int val = 0) : int_value(val) {} + FMT_CONSTEXPR value(unsigned val) : uint_value(val) {} + value(long long val) : long_long_value(val) {} + value(unsigned long long val) : ulong_long_value(val) {} + value(int128_t val) : int128_value(val) {} + value(uint128_t val) : uint128_value(val) {} + value(float val) : float_value(val) {} + value(double val) : double_value(val) {} + value(long double val) : long_double_value(val) {} + value(bool val) : bool_value(val) {} + value(char_type val) : char_value(val) {} + value(const char_type* val) { string.data = val; } + value(basic_string_view val) { + string.data = val.data(); + string.size = val.size(); + } + value(const void* val) : pointer(val) {} + + template value(const T& val) { + custom.value = &val; + // Get the formatter type through the context to allow different contexts + // have different extension points, e.g. `formatter` for `format` and + // `printf_formatter` for `printf`. + custom.format = format_custom_arg< + T, conditional_t::value, + typename Context::template formatter_type, + fallback_formatter>>; + } + + value(const named_arg_base& val) { named_arg = &val; } + + private: + // Formats an argument of a custom type, such as a user-defined class. + template + static void format_custom_arg(const void* arg, + typename Context::parse_context_type& parse_ctx, + Context& ctx) { + Formatter f; + parse_ctx.advance_to(f.parse(parse_ctx)); + ctx.advance_to(f.format(*static_cast(arg), ctx)); + } +}; + +template +FMT_CONSTEXPR basic_format_arg make_arg(const T& value); + +// To minimize the number of types we need to deal with, long is translated +// either to int or to long long depending on its size. +enum { long_short = sizeof(long) == sizeof(int) }; +using long_type = conditional_t; +using ulong_type = conditional_t; + +// Maps formatting arguments to core types. +template struct arg_mapper { + using char_type = typename Context::char_type; + + FMT_CONSTEXPR int map(signed char val) { return val; } + FMT_CONSTEXPR unsigned map(unsigned char val) { return val; } + FMT_CONSTEXPR int map(short val) { return val; } + FMT_CONSTEXPR unsigned map(unsigned short val) { return val; } + FMT_CONSTEXPR int map(int val) { return val; } + FMT_CONSTEXPR unsigned map(unsigned val) { return val; } + FMT_CONSTEXPR long_type map(long val) { return val; } + FMT_CONSTEXPR ulong_type map(unsigned long val) { return val; } + FMT_CONSTEXPR long long map(long long val) { return val; } + FMT_CONSTEXPR unsigned long long map(unsigned long long val) { return val; } + FMT_CONSTEXPR int128_t map(int128_t val) { return val; } + FMT_CONSTEXPR uint128_t map(uint128_t val) { return val; } + FMT_CONSTEXPR bool map(bool val) { return val; } + + template ::value)> + FMT_CONSTEXPR char_type map(T val) { + static_assert( + std::is_same::value || std::is_same::value, + "mixing character types is disallowed"); + return val; + } + + FMT_CONSTEXPR float map(float val) { return val; } + FMT_CONSTEXPR double map(double val) { return val; } + FMT_CONSTEXPR long double map(long double val) { return val; } + + FMT_CONSTEXPR const char_type* map(char_type* val) { return val; } + FMT_CONSTEXPR const char_type* map(const char_type* val) { return val; } + template ::value)> + FMT_CONSTEXPR basic_string_view map(const T& val) { + static_assert(std::is_same>::value, + "mixing character types is disallowed"); + return to_string_view(val); + } + template , T>::value && + !is_string::value && !has_formatter::value && + !has_fallback_formatter::value)> + FMT_CONSTEXPR basic_string_view map(const T& val) { + return basic_string_view(val); + } + template < + typename T, + FMT_ENABLE_IF( + std::is_constructible, T>::value && + !std::is_constructible, T>::value && + !is_string::value && !has_formatter::value && + !has_fallback_formatter::value)> + FMT_CONSTEXPR basic_string_view map(const T& val) { + return std_string_view(val); + } + FMT_CONSTEXPR const char* map(const signed char* val) { + static_assert(std::is_same::value, "invalid string type"); + return reinterpret_cast(val); + } + FMT_CONSTEXPR const char* map(const unsigned char* val) { + static_assert(std::is_same::value, "invalid string type"); + return reinterpret_cast(val); + } + + FMT_CONSTEXPR const void* map(void* val) { return val; } + FMT_CONSTEXPR const void* map(const void* val) { return val; } + FMT_CONSTEXPR const void* map(std::nullptr_t val) { return val; } + template FMT_CONSTEXPR int map(const T*) { + // Formatting of arbitrary pointers is disallowed. If you want to output + // a pointer cast it to "void *" or "const void *". In particular, this + // forbids formatting of "[const] volatile char *" which is printed as bool + // by iostreams. + static_assert(!sizeof(T), "formatting of non-void pointers is disallowed"); + return 0; + } + + template ::value && + !has_formatter::value && + !has_fallback_formatter::value)> + FMT_CONSTEXPR auto map(const T& val) + -> decltype(std::declval().map( + static_cast::type>(val))) { + return map(static_cast::type>(val)); + } + template ::value && !is_char::value && + (has_formatter::value || + has_fallback_formatter::value))> + FMT_CONSTEXPR const T& map(const T& val) { + return val; + } + + template + FMT_CONSTEXPR const named_arg_base& map( + const named_arg& val) { + auto arg = make_arg(val.value); + std::memcpy(val.data, &arg, sizeof(arg)); + return val; + } + + int map(...) { + constexpr bool formattable = sizeof(Context) == 0; + static_assert( + formattable, + "Cannot format argument. To make type T formattable provide a " + "formatter specialization: " + "https://fmt.dev/latest/api.html#formatting-user-defined-types"); + return 0; + } +}; + +// A type constant after applying arg_mapper. +template +using mapped_type_constant = + type_constant().map(std::declval())), + typename Context::char_type>; + +enum { packed_arg_bits = 5 }; +// Maximum number of arguments with packed types. +enum { max_packed_args = 63 / packed_arg_bits }; +enum : unsigned long long { is_unpacked_bit = 1ULL << 63 }; + +template class arg_map; +} // namespace internal + +// A formatting argument. It is a trivially copyable/constructible type to +// allow storage in basic_memory_buffer. +template class basic_format_arg { + private: + internal::value value_; + internal::type type_; + + template + friend FMT_CONSTEXPR basic_format_arg internal::make_arg( + const T& value); + + template + friend FMT_CONSTEXPR auto visit_format_arg(Visitor&& vis, + const basic_format_arg& arg) + -> decltype(vis(0)); + + friend class basic_format_args; + friend class internal::arg_map; + + using char_type = typename Context::char_type; + + public: + class handle { + public: + explicit handle(internal::custom_value custom) : custom_(custom) {} + + void format(typename Context::parse_context_type& parse_ctx, + Context& ctx) const { + custom_.format(custom_.value, parse_ctx, ctx); + } + + private: + internal::custom_value custom_; + }; + + FMT_CONSTEXPR basic_format_arg() : type_(internal::type::none_type) {} + + FMT_CONSTEXPR explicit operator bool() const FMT_NOEXCEPT { + return type_ != internal::type::none_type; + } + + internal::type type() const { return type_; } + + bool is_integral() const { return internal::is_integral_type(type_); } + bool is_arithmetic() const { return internal::is_arithmetic_type(type_); } +}; + +/** + \rst + Visits an argument dispatching to the appropriate visit method based on + the argument type. For example, if the argument type is ``double`` then + ``vis(value)`` will be called with the value of type ``double``. + \endrst + */ +template +FMT_CONSTEXPR auto visit_format_arg(Visitor&& vis, + const basic_format_arg& arg) + -> decltype(vis(0)) { + using char_type = typename Context::char_type; + switch (arg.type_) { + case internal::type::none_type: + break; + case internal::type::named_arg_type: + FMT_ASSERT(false, "invalid argument type"); + break; + case internal::type::int_type: + return vis(arg.value_.int_value); + case internal::type::uint_type: + return vis(arg.value_.uint_value); + case internal::type::long_long_type: + return vis(arg.value_.long_long_value); + case internal::type::ulong_long_type: + return vis(arg.value_.ulong_long_value); +#if FMT_USE_INT128 + case internal::type::int128_type: + return vis(arg.value_.int128_value); + case internal::type::uint128_type: + return vis(arg.value_.uint128_value); +#else + case internal::type::int128_type: + case internal::type::uint128_type: + break; +#endif + case internal::type::bool_type: + return vis(arg.value_.bool_value); + case internal::type::char_type: + return vis(arg.value_.char_value); + case internal::type::float_type: + return vis(arg.value_.float_value); + case internal::type::double_type: + return vis(arg.value_.double_value); + case internal::type::long_double_type: + return vis(arg.value_.long_double_value); + case internal::type::cstring_type: + return vis(arg.value_.string.data); + case internal::type::string_type: + return vis(basic_string_view(arg.value_.string.data, + arg.value_.string.size)); + case internal::type::pointer_type: + return vis(arg.value_.pointer); + case internal::type::custom_type: + return vis(typename basic_format_arg::handle(arg.value_.custom)); + } + return vis(monostate()); +} + +namespace internal { +// A map from argument names to their values for named arguments. +template class arg_map { + private: + using char_type = typename Context::char_type; + + struct entry { + basic_string_view name; + basic_format_arg arg; + }; + + entry* map_; + unsigned size_; + + void push_back(value val) { + const auto& named = *val.named_arg; + map_[size_] = {named.name, named.template deserialize()}; + ++size_; + } + + public: + arg_map(const arg_map&) = delete; + void operator=(const arg_map&) = delete; + arg_map() : map_(nullptr), size_(0) {} + void init(const basic_format_args& args); + ~arg_map() { delete[] map_; } + + basic_format_arg find(basic_string_view name) const { + // The list is unsorted, so just return the first matching name. + for (entry *it = map_, *end = map_ + size_; it != end; ++it) { + if (it->name == name) return it->arg; + } + return {}; + } +}; + +// A type-erased reference to an std::locale to avoid heavy include. +class locale_ref { + private: + const void* locale_; // A type-erased pointer to std::locale. + + public: + locale_ref() : locale_(nullptr) {} + template explicit locale_ref(const Locale& loc); + + explicit operator bool() const FMT_NOEXCEPT { return locale_ != nullptr; } + + template Locale get() const; +}; + +template constexpr unsigned long long encode_types() { return 0; } + +template +constexpr unsigned long long encode_types() { + return static_cast(mapped_type_constant::value) | + (encode_types() << packed_arg_bits); +} + +template +FMT_CONSTEXPR basic_format_arg make_arg(const T& value) { + basic_format_arg arg; + arg.type_ = mapped_type_constant::value; + arg.value_ = arg_mapper().map(value); + return arg; +} + +// The type template parameter is there to avoid an ODR violation when using +// a fallback formatter in one translation unit and an implicit conversion in +// another (not recommended). +template +inline value make_arg(const T& val) { + return arg_mapper().map(val); +} + +template +inline basic_format_arg make_arg(const T& value) { + return make_arg(value); +} + +template struct is_reference_wrapper : std::false_type {}; + +template +struct is_reference_wrapper> : std::true_type {}; + +class dynamic_arg_list { + // Workaround for clang's -Wweak-vtables. Unlike for regular classes, for + // templates it doesn't complain about inability to deduce single translation + // unit for placing vtable. So storage_node_base is made a fake template. + template struct node { + virtual ~node() = default; + std::unique_ptr> next; + }; + + template struct typed_node : node<> { + T value; + + template + FMT_CONSTEXPR typed_node(const Arg& arg) : value(arg) {} + + template + FMT_CONSTEXPR typed_node(const basic_string_view& arg) + : value(arg.data(), arg.size()) {} + }; + + std::unique_ptr> head_; + + public: + template const T& push(const Arg& arg) { + auto node = std::unique_ptr>(new typed_node(arg)); + auto& value = node->value; + node->next = std::move(head_); + head_ = std::move(node); + return value; + } +}; +} // namespace internal + +// Formatting context. +template class basic_format_context { + public: + /** The character type for the output. */ + using char_type = Char; + + private: + OutputIt out_; + basic_format_args args_; + internal::arg_map map_; + internal::locale_ref loc_; + + public: + using iterator = OutputIt; + using format_arg = basic_format_arg; + using parse_context_type = basic_format_parse_context; + template using formatter_type = formatter; + + basic_format_context(const basic_format_context&) = delete; + void operator=(const basic_format_context&) = delete; + /** + Constructs a ``basic_format_context`` object. References to the arguments are + stored in the object so make sure they have appropriate lifetimes. + */ + basic_format_context(OutputIt out, + basic_format_args ctx_args, + internal::locale_ref loc = internal::locale_ref()) + : out_(out), args_(ctx_args), loc_(loc) {} + + format_arg arg(int id) const { return args_.get(id); } + + // Checks if manual indexing is used and returns the argument with the + // specified name. + format_arg arg(basic_string_view name); + + internal::error_handler error_handler() { return {}; } + void on_error(const char* message) { error_handler().on_error(message); } + + // Returns an iterator to the beginning of the output range. + iterator out() { return out_; } + + // Advances the begin iterator to ``it``. + void advance_to(iterator it) { out_ = it; } + + internal::locale_ref locale() { return loc_; } +}; + +template +using buffer_context = + basic_format_context>, + Char>; +using format_context = buffer_context; +using wformat_context = buffer_context; + +/** + \rst + An array of references to arguments. It can be implicitly converted into + `~fmt::basic_format_args` for passing into type-erased formatting functions + such as `~fmt::vformat`. + \endrst + */ +template +class format_arg_store +#if FMT_GCC_VERSION && FMT_GCC_VERSION < 409 + // Workaround a GCC template argument substitution bug. + : public basic_format_args +#endif +{ + private: + static const size_t num_args = sizeof...(Args); + static const bool is_packed = num_args < internal::max_packed_args; + + using value_type = conditional_t, + basic_format_arg>; + + // If the arguments are not packed, add one more element to mark the end. + value_type data_[num_args + (num_args == 0 ? 1 : 0)]; + + friend class basic_format_args; + + public: + static constexpr unsigned long long types = + is_packed ? internal::encode_types() + : internal::is_unpacked_bit | num_args; + + format_arg_store(const Args&... args) + : +#if FMT_GCC_VERSION && FMT_GCC_VERSION < 409 + basic_format_args(*this), +#endif + data_{internal::make_arg< + is_packed, Context, + internal::mapped_type_constant::value>(args)...} { + } +}; + +/** + \rst + Constructs an `~fmt::format_arg_store` object that contains references to + arguments and can be implicitly converted to `~fmt::format_args`. `Context` + can be omitted in which case it defaults to `~fmt::context`. + See `~fmt::arg` for lifetime considerations. + \endrst + */ +template +inline format_arg_store make_format_args( + const Args&... args) { + return {args...}; +} + +/** + \rst + A dynamic version of `fmt::format_arg_store<>`. + It's equipped with a storage to potentially temporary objects which lifetime + could be shorter than the format arguments object. + + It can be implicitly converted into `~fmt::basic_format_args` for passing + into type-erased formatting functions such as `~fmt::vformat`. + \endrst + */ +template +class dynamic_format_arg_store +#if FMT_GCC_VERSION && FMT_GCC_VERSION < 409 + // Workaround a GCC template argument substitution bug. + : public basic_format_args +#endif +{ + private: + using char_type = typename Context::char_type; + + template struct need_copy { + static constexpr internal::type mapped_type = + internal::mapped_type_constant::value; + + enum { + value = !(internal::is_reference_wrapper::value || + std::is_same>::value || + std::is_same>::value || + (mapped_type != internal::type::cstring_type && + mapped_type != internal::type::string_type && + mapped_type != internal::type::custom_type && + mapped_type != internal::type::named_arg_type)) + }; + }; + + template + using stored_type = conditional_t::value, + std::basic_string, T>; + + // Storage of basic_format_arg must be contiguous. + std::vector> data_; + + // Storage of arguments not fitting into basic_format_arg must grow + // without relocation because items in data_ refer to it. + internal::dynamic_arg_list dynamic_args_; + + friend class basic_format_args; + + unsigned long long get_types() const { + return internal::is_unpacked_bit | data_.size(); + } + + template void emplace_arg(const T& arg) { + data_.emplace_back(internal::make_arg(arg)); + } + + public: + /** + \rst + Adds an argument into the dynamic store for later passing to a formating + function. + + Note that custom types and string types (but not string views!) are copied + into the store with dynamic memory (in addition to resizing vector). + + **Example**:: + + fmt::dynamic_format_arg_store store; + store.push_back(42); + store.push_back("abc"); + store.push_back(1.5f); + std::string result = fmt::vformat("{} and {} and {}", store); + \endrst + */ + template void push_back(const T& arg) { + static_assert( + !std::is_base_of, T>::value, + "named arguments are not supported yet"); + if (internal::const_check(need_copy::value)) + emplace_arg(dynamic_args_.push>(arg)); + else + emplace_arg(arg); + } + + /** + Adds a reference to the argument into the dynamic store for later passing to + a formating function. + */ + template void push_back(std::reference_wrapper arg) { + static_assert( + need_copy::value, + "objects of built-in types and string views are always copied"); + emplace_arg(arg.get()); + } +}; + +/** + \rst + A view of a collection of formatting arguments. To avoid lifetime issues it + should only be used as a parameter type in type-erased functions such as + ``vformat``:: + + void vlog(string_view format_str, format_args args); // OK + format_args args = make_format_args(42); // Error: dangling reference + \endrst + */ +template class basic_format_args { + public: + using size_type = int; + using format_arg = basic_format_arg; + + private: + // To reduce compiled code size per formatting function call, types of first + // max_packed_args arguments are passed in the types_ field. + unsigned long long types_; + union { + // If the number of arguments is less than max_packed_args, the argument + // values are stored in values_, otherwise they are stored in args_. + // This is done to reduce compiled code size as storing larger objects + // may require more code (at least on x86-64) even if the same amount of + // data is actually copied to stack. It saves ~10% on the bloat test. + const internal::value* values_; + const format_arg* args_; + }; + + bool is_packed() const { return (types_ & internal::is_unpacked_bit) == 0; } + + internal::type type(int index) const { + int shift = index * internal::packed_arg_bits; + unsigned int mask = (1 << internal::packed_arg_bits) - 1; + return static_cast((types_ >> shift) & mask); + } + + friend class internal::arg_map; + + void set_data(const internal::value* values) { values_ = values; } + void set_data(const format_arg* args) { args_ = args; } + + format_arg do_get(int index) const { + format_arg arg; + if (!is_packed()) { + auto num_args = max_size(); + if (index < num_args) arg = args_[index]; + return arg; + } + if (index > internal::max_packed_args) return arg; + arg.type_ = type(index); + if (arg.type_ == internal::type::none_type) return arg; + internal::value& val = arg.value_; + val = values_[index]; + return arg; + } + + public: + basic_format_args() : types_(0) {} + + /** + \rst + Constructs a `basic_format_args` object from `~fmt::format_arg_store`. + \endrst + */ + template + basic_format_args(const format_arg_store& store) + : types_(store.types) { + set_data(store.data_); + } + + /** + \rst + Constructs a `basic_format_args` object from + `~fmt::dynamic_format_arg_store`. + \endrst + */ + basic_format_args(const dynamic_format_arg_store& store) + : types_(store.get_types()) { + set_data(store.data_.data()); + } + + /** + \rst + Constructs a `basic_format_args` object from a dynamic set of arguments. + \endrst + */ + basic_format_args(const format_arg* args, int count) + : types_(internal::is_unpacked_bit | internal::to_unsigned(count)) { + set_data(args); + } + + /** Returns the argument at specified index. */ + format_arg get(int index) const { + format_arg arg = do_get(index); + if (arg.type_ == internal::type::named_arg_type) + arg = arg.value_.named_arg->template deserialize(); + return arg; + } + + int max_size() const { + unsigned long long max_packed = internal::max_packed_args; + return static_cast(is_packed() ? max_packed + : types_ & ~internal::is_unpacked_bit); + } +}; + +/** An alias to ``basic_format_args``. */ +// It is a separate type rather than an alias to make symbols readable. +struct format_args : basic_format_args { + template + format_args(Args&&... args) + : basic_format_args(static_cast(args)...) {} +}; +struct wformat_args : basic_format_args { + template + wformat_args(Args&&... args) + : basic_format_args(static_cast(args)...) {} +}; + +template struct is_contiguous : std::false_type {}; + +template +struct is_contiguous> : std::true_type {}; + +template +struct is_contiguous> : std::true_type {}; + +namespace internal { + +template +struct is_contiguous_back_insert_iterator : std::false_type {}; +template +struct is_contiguous_back_insert_iterator> + : is_contiguous {}; + +template struct named_arg_base { + basic_string_view name; + + // Serialized value. + mutable char data[sizeof(basic_format_arg>)]; + + named_arg_base(basic_string_view nm) : name(nm) {} + + template basic_format_arg deserialize() const { + basic_format_arg arg; + std::memcpy(&arg, data, sizeof(basic_format_arg)); + return arg; + } +}; + +struct view {}; + +template +struct named_arg : view, named_arg_base { + const T& value; + + named_arg(basic_string_view name, const T& val) + : named_arg_base(name), value(val) {} +}; + +template ::value)> +inline void check_format_string(const S&) { +#if defined(FMT_ENFORCE_COMPILE_STRING) + static_assert(is_compile_string::value, + "FMT_ENFORCE_COMPILE_STRING requires all format strings to " + "utilize FMT_STRING() or fmt()."); +#endif +} +template ::value)> +void check_format_string(S); + +template struct bool_pack; +template +using all_true = + std::is_same, bool_pack>; + +template > +inline format_arg_store, remove_reference_t...> +make_args_checked(const S& format_str, + const remove_reference_t&... args) { + static_assert( + all_true<(!std::is_base_of>::value || + !std::is_reference::value)...>::value, + "passing views as lvalues is disallowed"); + check_format_string(format_str); + return {args...}; +} + +template +std::basic_string vformat( + basic_string_view format_str, + basic_format_args>> args); + +template +typename buffer_context::iterator vformat_to( + buffer& buf, basic_string_view format_str, + basic_format_args>> args); + +template ::value)> +inline void vprint_mojibake(std::FILE*, basic_string_view, const Args&) {} + +FMT_API void vprint_mojibake(std::FILE*, string_view, format_args); +#ifndef _WIN32 +inline void vprint_mojibake(std::FILE*, string_view, format_args) {} +#endif +} // namespace internal + +/** + \rst + Returns a named argument to be used in a formatting function. It should only + be used in a call to a formatting function. + + **Example**:: + + fmt::print("Elapsed time: {s:.2f} seconds", fmt::arg("s", 1.23)); + \endrst + */ +template > +inline internal::named_arg arg(const S& name, const T& arg) { + static_assert(internal::is_string::value, ""); + return {name, arg}; +} + +// Disable nested named arguments, e.g. ``arg("a", arg("b", 42))``. +template +void arg(S, internal::named_arg) = delete; + +/** Formats a string and writes the output to ``out``. */ +// GCC 8 and earlier cannot handle std::back_insert_iterator with +// vformat_to(...) overload, so SFINAE on iterator type instead. +template , + FMT_ENABLE_IF( + internal::is_contiguous_back_insert_iterator::value)> +OutputIt vformat_to( + OutputIt out, const S& format_str, + basic_format_args>> args) { + using container = remove_reference_t; + internal::container_buffer buf((internal::get_container(out))); + internal::vformat_to(buf, to_string_view(format_str), args); + return out; +} + +template ::value&& internal::is_string::value)> +inline std::back_insert_iterator format_to( + std::back_insert_iterator out, const S& format_str, + Args&&... args) { + return vformat_to(out, to_string_view(format_str), + internal::make_args_checked(format_str, args...)); +} + +template > +inline std::basic_string vformat( + const S& format_str, + basic_format_args>> args) { + return internal::vformat(to_string_view(format_str), args); +} + +/** + \rst + Formats arguments and returns the result as a string. + + **Example**:: + + #include + std::string message = fmt::format("The answer is {}", 42); + \endrst +*/ +// Pass char_t as a default template parameter instead of using +// std::basic_string> to reduce the symbol size. +template > +inline std::basic_string format(const S& format_str, Args&&... args) { + return internal::vformat( + to_string_view(format_str), + internal::make_args_checked(format_str, args...)); +} + +FMT_API void vprint(string_view, format_args); +FMT_API void vprint(std::FILE*, string_view, format_args); + +/** + \rst + Formats ``args`` according to specifications in ``format_str`` and writes the + output to the file ``f``. Strings are assumed to be Unicode-encoded unless the + ``FMT_UNICODE`` macro is set to 0. + + **Example**:: + + fmt::print(stderr, "Don't {}!", "panic"); + \endrst + */ +template > +inline void print(std::FILE* f, const S& format_str, Args&&... args) { + return internal::is_unicode() + ? vprint(f, to_string_view(format_str), + internal::make_args_checked(format_str, args...)) + : internal::vprint_mojibake( + f, to_string_view(format_str), + internal::make_args_checked(format_str, args...)); +} + +/** + \rst + Formats ``args`` according to specifications in ``format_str`` and writes + the output to ``stdout``. Strings are assumed to be Unicode-encoded unless + the ``FMT_UNICODE`` macro is set to 0. + + **Example**:: + + fmt::print("Elapsed time: {0:.2f} seconds", 1.23); + \endrst + */ +template > +inline void print(const S& format_str, Args&&... args) { + return internal::is_unicode() + ? vprint(to_string_view(format_str), + internal::make_args_checked(format_str, args...)) + : internal::vprint_mojibake( + stdout, to_string_view(format_str), + internal::make_args_checked(format_str, args...)); +} +FMT_END_NAMESPACE + +#endif // FMT_CORE_H_ diff --git a/src/fmt/format-inl.h b/src/fmt/format-inl.h new file mode 100644 index 0000000000000000000000000000000000000000..f632714d81e9ae9855a686f657bef1c861f9ea3c --- /dev/null +++ b/src/fmt/format-inl.h @@ -0,0 +1,1403 @@ +// Formatting library for C++ - implementation +// +// Copyright (c) 2012 - 2016, Victor Zverovich +// All rights reserved. +// +// For the license information refer to format.h. + +#ifndef FMT_FORMAT_INL_H_ +#define FMT_FORMAT_INL_H_ + +#include +#include +#include +#include +#include +#include // for std::memmove +#include + +#include "format.h" +#if !defined(FMT_STATIC_THOUSANDS_SEPARATOR) +# include +#endif + +#ifdef _WIN32 +# include +# include +#endif + +#ifdef _MSC_VER +# pragma warning(push) +# pragma warning(disable : 4702) // unreachable code +#endif + +// Dummy implementations of strerror_r and strerror_s called if corresponding +// system functions are not available. +inline fmt::internal::null<> strerror_r(int, char*, ...) { return {}; } +inline fmt::internal::null<> strerror_s(char*, std::size_t, ...) { return {}; } + +FMT_BEGIN_NAMESPACE +namespace internal { + +FMT_FUNC void assert_fail(const char* file, int line, const char* message) { + print(stderr, "{}:{}: assertion failed: {}", file, line, message); + std::abort(); +} + +#ifndef _MSC_VER +# define FMT_SNPRINTF snprintf +#else // _MSC_VER +inline int fmt_snprintf(char* buffer, size_t size, const char* format, ...) { + va_list args; + va_start(args, format); + int result = vsnprintf_s(buffer, size, _TRUNCATE, format, args); + va_end(args); + return result; +} +# define FMT_SNPRINTF fmt_snprintf +#endif // _MSC_VER + +// A portable thread-safe version of strerror. +// Sets buffer to point to a string describing the error code. +// This can be either a pointer to a string stored in buffer, +// or a pointer to some static immutable string. +// Returns one of the following values: +// 0 - success +// ERANGE - buffer is not large enough to store the error message +// other - failure +// Buffer should be at least of size 1. +FMT_FUNC int safe_strerror(int error_code, char*& buffer, + std::size_t buffer_size) FMT_NOEXCEPT { + FMT_ASSERT(buffer != nullptr && buffer_size != 0, "invalid buffer"); + + class dispatcher { + private: + int error_code_; + char*& buffer_; + std::size_t buffer_size_; + + // A noop assignment operator to avoid bogus warnings. + void operator=(const dispatcher&) {} + + // Handle the result of XSI-compliant version of strerror_r. + int handle(int result) { + // glibc versions before 2.13 return result in errno. + return result == -1 ? errno : result; + } + + // Handle the result of GNU-specific version of strerror_r. + FMT_MAYBE_UNUSED + int handle(char* message) { + // If the buffer is full then the message is probably truncated. + if (message == buffer_ && strlen(buffer_) == buffer_size_ - 1) + return ERANGE; + buffer_ = message; + return 0; + } + + // Handle the case when strerror_r is not available. + FMT_MAYBE_UNUSED + int handle(internal::null<>) { + return fallback(strerror_s(buffer_, buffer_size_, error_code_)); + } + + // Fallback to strerror_s when strerror_r is not available. + FMT_MAYBE_UNUSED + int fallback(int result) { + // If the buffer is full then the message is probably truncated. + return result == 0 && strlen(buffer_) == buffer_size_ - 1 ? ERANGE + : result; + } + +#if !FMT_MSC_VER + // Fallback to strerror if strerror_r and strerror_s are not available. + int fallback(internal::null<>) { + errno = 0; + buffer_ = strerror(error_code_); + return errno; + } +#endif + + public: + dispatcher(int err_code, char*& buf, std::size_t buf_size) + : error_code_(err_code), buffer_(buf), buffer_size_(buf_size) {} + + int run() { return handle(strerror_r(error_code_, buffer_, buffer_size_)); } + }; + return dispatcher(error_code, buffer, buffer_size).run(); +} + +FMT_FUNC void format_error_code(internal::buffer& out, int error_code, + string_view message) FMT_NOEXCEPT { + // Report error code making sure that the output fits into + // inline_buffer_size to avoid dynamic memory allocation and potential + // bad_alloc. + out.resize(0); + static const char SEP[] = ": "; + static const char ERROR_STR[] = "error "; + // Subtract 2 to account for terminating null characters in SEP and ERROR_STR. + std::size_t error_code_size = sizeof(SEP) + sizeof(ERROR_STR) - 2; + auto abs_value = static_cast>(error_code); + if (internal::is_negative(error_code)) { + abs_value = 0 - abs_value; + ++error_code_size; + } + error_code_size += internal::to_unsigned(internal::count_digits(abs_value)); + internal::writer w(out); + if (message.size() <= inline_buffer_size - error_code_size) { + w.write(message); + w.write(SEP); + } + w.write(ERROR_STR); + w.write(error_code); + assert(out.size() <= inline_buffer_size); +} + +FMT_FUNC void report_error(format_func func, int error_code, + string_view message) FMT_NOEXCEPT { + memory_buffer full_message; + func(full_message, error_code, message); + // Don't use fwrite_fully because the latter may throw. + (void)std::fwrite(full_message.data(), full_message.size(), 1, stderr); + std::fputc('\n', stderr); +} + +// A wrapper around fwrite that throws on error. +FMT_FUNC void fwrite_fully(const void* ptr, size_t size, size_t count, + FILE* stream) { + size_t written = std::fwrite(ptr, size, count, stream); + if (written < count) FMT_THROW(system_error(errno, "cannot write to file")); +} +} // namespace internal + +#if !defined(FMT_STATIC_THOUSANDS_SEPARATOR) +namespace internal { + +template +locale_ref::locale_ref(const Locale& loc) : locale_(&loc) { + static_assert(std::is_same::value, ""); +} + +template Locale locale_ref::get() const { + static_assert(std::is_same::value, ""); + return locale_ ? *static_cast(locale_) : std::locale(); +} + +template FMT_FUNC std::string grouping_impl(locale_ref loc) { + return std::use_facet>(loc.get()).grouping(); +} +template FMT_FUNC Char thousands_sep_impl(locale_ref loc) { + return std::use_facet>(loc.get()) + .thousands_sep(); +} +template FMT_FUNC Char decimal_point_impl(locale_ref loc) { + return std::use_facet>(loc.get()) + .decimal_point(); +} +} // namespace internal +#else +template +FMT_FUNC std::string internal::grouping_impl(locale_ref) { + return "\03"; +} +template +FMT_FUNC Char internal::thousands_sep_impl(locale_ref) { + return FMT_STATIC_THOUSANDS_SEPARATOR; +} +template +FMT_FUNC Char internal::decimal_point_impl(locale_ref) { + return '.'; +} +#endif + +FMT_API FMT_FUNC format_error::~format_error() FMT_NOEXCEPT = default; +FMT_API FMT_FUNC system_error::~system_error() FMT_NOEXCEPT = default; + +FMT_FUNC void system_error::init(int err_code, string_view format_str, + format_args args) { + error_code_ = err_code; + memory_buffer buffer; + format_system_error(buffer, err_code, vformat(format_str, args)); + std::runtime_error& base = *this; + base = std::runtime_error(to_string(buffer)); +} + +namespace internal { + +template <> FMT_FUNC int count_digits<4>(internal::fallback_uintptr n) { + // fallback_uintptr is always stored in little endian. + int i = static_cast(sizeof(void*)) - 1; + while (i > 0 && n.value[i] == 0) --i; + auto char_digits = std::numeric_limits::digits / 4; + return i >= 0 ? i * char_digits + count_digits<4, unsigned>(n.value[i]) : 1; +} + +template +const char basic_data::digits[] = + "0001020304050607080910111213141516171819" + "2021222324252627282930313233343536373839" + "4041424344454647484950515253545556575859" + "6061626364656667686970717273747576777879" + "8081828384858687888990919293949596979899"; + +template +const char basic_data::hex_digits[] = "0123456789abcdef"; + +#define FMT_POWERS_OF_10(factor) \ + factor * 10, (factor)*100, (factor)*1000, (factor)*10000, (factor)*100000, \ + (factor)*1000000, (factor)*10000000, (factor)*100000000, \ + (factor)*1000000000 + +template +const uint64_t basic_data::powers_of_10_64[] = { + 1, FMT_POWERS_OF_10(1), FMT_POWERS_OF_10(1000000000ULL), + 10000000000000000000ULL}; + +template +const uint32_t basic_data::zero_or_powers_of_10_32[] = {0, + FMT_POWERS_OF_10(1)}; + +template +const uint64_t basic_data::zero_or_powers_of_10_64[] = { + 0, FMT_POWERS_OF_10(1), FMT_POWERS_OF_10(1000000000ULL), + 10000000000000000000ULL}; + +// Normalized 64-bit significands of pow(10, k), for k = -348, -340, ..., 340. +// These are generated by support/compute-powers.py. +template +const uint64_t basic_data::pow10_significands[] = { + 0xfa8fd5a0081c0288, 0xbaaee17fa23ebf76, 0x8b16fb203055ac76, + 0xcf42894a5dce35ea, 0x9a6bb0aa55653b2d, 0xe61acf033d1a45df, + 0xab70fe17c79ac6ca, 0xff77b1fcbebcdc4f, 0xbe5691ef416bd60c, + 0x8dd01fad907ffc3c, 0xd3515c2831559a83, 0x9d71ac8fada6c9b5, + 0xea9c227723ee8bcb, 0xaecc49914078536d, 0x823c12795db6ce57, + 0xc21094364dfb5637, 0x9096ea6f3848984f, 0xd77485cb25823ac7, + 0xa086cfcd97bf97f4, 0xef340a98172aace5, 0xb23867fb2a35b28e, + 0x84c8d4dfd2c63f3b, 0xc5dd44271ad3cdba, 0x936b9fcebb25c996, + 0xdbac6c247d62a584, 0xa3ab66580d5fdaf6, 0xf3e2f893dec3f126, + 0xb5b5ada8aaff80b8, 0x87625f056c7c4a8b, 0xc9bcff6034c13053, + 0x964e858c91ba2655, 0xdff9772470297ebd, 0xa6dfbd9fb8e5b88f, + 0xf8a95fcf88747d94, 0xb94470938fa89bcf, 0x8a08f0f8bf0f156b, + 0xcdb02555653131b6, 0x993fe2c6d07b7fac, 0xe45c10c42a2b3b06, + 0xaa242499697392d3, 0xfd87b5f28300ca0e, 0xbce5086492111aeb, + 0x8cbccc096f5088cc, 0xd1b71758e219652c, 0x9c40000000000000, + 0xe8d4a51000000000, 0xad78ebc5ac620000, 0x813f3978f8940984, + 0xc097ce7bc90715b3, 0x8f7e32ce7bea5c70, 0xd5d238a4abe98068, + 0x9f4f2726179a2245, 0xed63a231d4c4fb27, 0xb0de65388cc8ada8, + 0x83c7088e1aab65db, 0xc45d1df942711d9a, 0x924d692ca61be758, + 0xda01ee641a708dea, 0xa26da3999aef774a, 0xf209787bb47d6b85, + 0xb454e4a179dd1877, 0x865b86925b9bc5c2, 0xc83553c5c8965d3d, + 0x952ab45cfa97a0b3, 0xde469fbd99a05fe3, 0xa59bc234db398c25, + 0xf6c69a72a3989f5c, 0xb7dcbf5354e9bece, 0x88fcf317f22241e2, + 0xcc20ce9bd35c78a5, 0x98165af37b2153df, 0xe2a0b5dc971f303a, + 0xa8d9d1535ce3b396, 0xfb9b7cd9a4a7443c, 0xbb764c4ca7a44410, + 0x8bab8eefb6409c1a, 0xd01fef10a657842c, 0x9b10a4e5e9913129, + 0xe7109bfba19c0c9d, 0xac2820d9623bf429, 0x80444b5e7aa7cf85, + 0xbf21e44003acdd2d, 0x8e679c2f5e44ff8f, 0xd433179d9c8cb841, + 0x9e19db92b4e31ba9, 0xeb96bf6ebadf77d9, 0xaf87023b9bf0ee6b, +}; + +// Binary exponents of pow(10, k), for k = -348, -340, ..., 340, corresponding +// to significands above. +template +const int16_t basic_data::pow10_exponents[] = { + -1220, -1193, -1166, -1140, -1113, -1087, -1060, -1034, -1007, -980, -954, + -927, -901, -874, -847, -821, -794, -768, -741, -715, -688, -661, + -635, -608, -582, -555, -529, -502, -475, -449, -422, -396, -369, + -343, -316, -289, -263, -236, -210, -183, -157, -130, -103, -77, + -50, -24, 3, 30, 56, 83, 109, 136, 162, 189, 216, + 242, 269, 295, 322, 348, 375, 402, 428, 455, 481, 508, + 534, 561, 588, 614, 641, 667, 694, 720, 747, 774, 800, + 827, 853, 880, 907, 933, 960, 986, 1013, 1039, 1066}; + +template +const char basic_data::foreground_color[] = "\x1b[38;2;"; +template +const char basic_data::background_color[] = "\x1b[48;2;"; +template const char basic_data::reset_color[] = "\x1b[0m"; +template const wchar_t basic_data::wreset_color[] = L"\x1b[0m"; +template const char basic_data::signs[] = {0, '-', '+', ' '}; + +template struct bits { + static FMT_CONSTEXPR_DECL const int value = + static_cast(sizeof(T) * std::numeric_limits::digits); +}; + +class fp; +template fp normalize(fp value); + +// Lower (upper) boundary is a value half way between a floating-point value +// and its predecessor (successor). Boundaries have the same exponent as the +// value so only significands are stored. +struct boundaries { + uint64_t lower; + uint64_t upper; +}; + +// A handmade floating-point number f * pow(2, e). +class fp { + private: + using significand_type = uint64_t; + + public: + significand_type f; + int e; + + // All sizes are in bits. + // Subtract 1 to account for an implicit most significant bit in the + // normalized form. + static FMT_CONSTEXPR_DECL const int double_significand_size = + std::numeric_limits::digits - 1; + static FMT_CONSTEXPR_DECL const uint64_t implicit_bit = + 1ULL << double_significand_size; + static FMT_CONSTEXPR_DECL const int significand_size = + bits::value; + + fp() : f(0), e(0) {} + fp(uint64_t f_val, int e_val) : f(f_val), e(e_val) {} + + // Constructs fp from an IEEE754 double. It is a template to prevent compile + // errors on platforms where double is not IEEE754. + template explicit fp(Double d) { assign(d); } + + // Assigns d to this and return true iff predecessor is closer than successor. + template + bool assign(Double d) { + // Assume double is in the format [sign][exponent][significand]. + using limits = std::numeric_limits; + const int exponent_size = + bits::value - double_significand_size - 1; // -1 for sign + const uint64_t significand_mask = implicit_bit - 1; + const uint64_t exponent_mask = (~0ULL >> 1) & ~significand_mask; + const int exponent_bias = (1 << exponent_size) - limits::max_exponent - 1; + auto u = bit_cast(d); + f = u & significand_mask; + int biased_e = + static_cast((u & exponent_mask) >> double_significand_size); + // Predecessor is closer if d is a normalized power of 2 (f == 0) other than + // the smallest normalized number (biased_e > 1). + bool is_predecessor_closer = f == 0 && biased_e > 1; + if (biased_e != 0) + f += implicit_bit; + else + biased_e = 1; // Subnormals use biased exponent 1 (min exponent). + e = biased_e - exponent_bias - double_significand_size; + return is_predecessor_closer; + } + + template + bool assign(Double) { + *this = fp(); + return false; + } + + // Assigns d to this together with computing lower and upper boundaries, + // where a boundary is a value half way between the number and its predecessor + // (lower) or successor (upper). The upper boundary is normalized and lower + // has the same exponent but may be not normalized. + template boundaries assign_with_boundaries(Double d) { + bool is_lower_closer = assign(d); + fp lower = + is_lower_closer ? fp((f << 2) - 1, e - 2) : fp((f << 1) - 1, e - 1); + // 1 in normalize accounts for the exponent shift above. + fp upper = normalize<1>(fp((f << 1) + 1, e - 1)); + lower.f <<= lower.e - upper.e; + return boundaries{lower.f, upper.f}; + } + + template boundaries assign_float_with_boundaries(Double d) { + assign(d); + constexpr int min_normal_e = std::numeric_limits::min_exponent - + std::numeric_limits::digits; + significand_type half_ulp = 1 << (std::numeric_limits::digits - + std::numeric_limits::digits - 1); + if (min_normal_e > e) half_ulp <<= min_normal_e - e; + fp upper = normalize<0>(fp(f + half_ulp, e)); + fp lower = fp( + f - (half_ulp >> ((f == implicit_bit && e > min_normal_e) ? 1 : 0)), e); + lower.f <<= lower.e - upper.e; + return boundaries{lower.f, upper.f}; + } +}; + +// Normalizes the value converted from double and multiplied by (1 << SHIFT). +template fp normalize(fp value) { + // Handle subnormals. + const auto shifted_implicit_bit = fp::implicit_bit << SHIFT; + while ((value.f & shifted_implicit_bit) == 0) { + value.f <<= 1; + --value.e; + } + // Subtract 1 to account for hidden bit. + const auto offset = + fp::significand_size - fp::double_significand_size - SHIFT - 1; + value.f <<= offset; + value.e -= offset; + return value; +} + +inline bool operator==(fp x, fp y) { return x.f == y.f && x.e == y.e; } + +// Computes lhs * rhs / pow(2, 64) rounded to nearest with half-up tie breaking. +inline uint64_t multiply(uint64_t lhs, uint64_t rhs) { +#if FMT_USE_INT128 + auto product = static_cast<__uint128_t>(lhs) * rhs; + auto f = static_cast(product >> 64); + return (static_cast(product) & (1ULL << 63)) != 0 ? f + 1 : f; +#else + // Multiply 32-bit parts of significands. + uint64_t mask = (1ULL << 32) - 1; + uint64_t a = lhs >> 32, b = lhs & mask; + uint64_t c = rhs >> 32, d = rhs & mask; + uint64_t ac = a * c, bc = b * c, ad = a * d, bd = b * d; + // Compute mid 64-bit of result and round. + uint64_t mid = (bd >> 32) + (ad & mask) + (bc & mask) + (1U << 31); + return ac + (ad >> 32) + (bc >> 32) + (mid >> 32); +#endif +} + +inline fp operator*(fp x, fp y) { return {multiply(x.f, y.f), x.e + y.e + 64}; } + +// Returns a cached power of 10 `c_k = c_k.f * pow(2, c_k.e)` such that its +// (binary) exponent satisfies `min_exponent <= c_k.e <= min_exponent + 28`. +inline fp get_cached_power(int min_exponent, int& pow10_exponent) { + const int64_t one_over_log2_10 = 0x4d104d42; // round(pow(2, 32) / log2(10)) + int index = static_cast( + ((min_exponent + fp::significand_size - 1) * one_over_log2_10 + + ((int64_t(1) << 32) - 1)) // ceil + >> 32 // arithmetic shift + ); + // Decimal exponent of the first (smallest) cached power of 10. + const int first_dec_exp = -348; + // Difference between 2 consecutive decimal exponents in cached powers of 10. + const int dec_exp_step = 8; + index = (index - first_dec_exp - 1) / dec_exp_step + 1; + pow10_exponent = first_dec_exp + index * dec_exp_step; + return {data::pow10_significands[index], data::pow10_exponents[index]}; +} + +// A simple accumulator to hold the sums of terms in bigint::square if uint128_t +// is not available. +struct accumulator { + uint64_t lower; + uint64_t upper; + + accumulator() : lower(0), upper(0) {} + explicit operator uint32_t() const { return static_cast(lower); } + + void operator+=(uint64_t n) { + lower += n; + if (lower < n) ++upper; + } + void operator>>=(int shift) { + assert(shift == 32); + (void)shift; + lower = (upper << 32) | (lower >> 32); + upper >>= 32; + } +}; + +class bigint { + private: + // A bigint is stored as an array of bigits (big digits), with bigit at index + // 0 being the least significant one. + using bigit = uint32_t; + using double_bigit = uint64_t; + enum { bigits_capacity = 32 }; + basic_memory_buffer bigits_; + int exp_; + + bigit operator[](int index) const { return bigits_[to_unsigned(index)]; } + bigit& operator[](int index) { return bigits_[to_unsigned(index)]; } + + static FMT_CONSTEXPR_DECL const int bigit_bits = bits::value; + + friend struct formatter; + + void subtract_bigits(int index, bigit other, bigit& borrow) { + auto result = static_cast((*this)[index]) - other - borrow; + (*this)[index] = static_cast(result); + borrow = static_cast(result >> (bigit_bits * 2 - 1)); + } + + void remove_leading_zeros() { + int num_bigits = static_cast(bigits_.size()) - 1; + while (num_bigits > 0 && (*this)[num_bigits] == 0) --num_bigits; + bigits_.resize(to_unsigned(num_bigits + 1)); + } + + // Computes *this -= other assuming aligned bigints and *this >= other. + void subtract_aligned(const bigint& other) { + FMT_ASSERT(other.exp_ >= exp_, "unaligned bigints"); + FMT_ASSERT(compare(*this, other) >= 0, ""); + bigit borrow = 0; + int i = other.exp_ - exp_; + for (size_t j = 0, n = other.bigits_.size(); j != n; ++i, ++j) { + subtract_bigits(i, other.bigits_[j], borrow); + } + while (borrow > 0) subtract_bigits(i, 0, borrow); + remove_leading_zeros(); + } + + void multiply(uint32_t value) { + const double_bigit wide_value = value; + bigit carry = 0; + for (size_t i = 0, n = bigits_.size(); i < n; ++i) { + double_bigit result = bigits_[i] * wide_value + carry; + bigits_[i] = static_cast(result); + carry = static_cast(result >> bigit_bits); + } + if (carry != 0) bigits_.push_back(carry); + } + + void multiply(uint64_t value) { + const bigit mask = ~bigit(0); + const double_bigit lower = value & mask; + const double_bigit upper = value >> bigit_bits; + double_bigit carry = 0; + for (size_t i = 0, n = bigits_.size(); i < n; ++i) { + double_bigit result = bigits_[i] * lower + (carry & mask); + carry = + bigits_[i] * upper + (result >> bigit_bits) + (carry >> bigit_bits); + bigits_[i] = static_cast(result); + } + while (carry != 0) { + bigits_.push_back(carry & mask); + carry >>= bigit_bits; + } + } + + public: + bigint() : exp_(0) {} + explicit bigint(uint64_t n) { assign(n); } + ~bigint() { assert(bigits_.capacity() <= bigits_capacity); } + + bigint(const bigint&) = delete; + void operator=(const bigint&) = delete; + + void assign(const bigint& other) { + bigits_.resize(other.bigits_.size()); + auto data = other.bigits_.data(); + std::copy(data, data + other.bigits_.size(), bigits_.data()); + exp_ = other.exp_; + } + + void assign(uint64_t n) { + size_t num_bigits = 0; + do { + bigits_[num_bigits++] = n & ~bigit(0); + n >>= bigit_bits; + } while (n != 0); + bigits_.resize(num_bigits); + exp_ = 0; + } + + int num_bigits() const { return static_cast(bigits_.size()) + exp_; } + + bigint& operator<<=(int shift) { + assert(shift >= 0); + exp_ += shift / bigit_bits; + shift %= bigit_bits; + if (shift == 0) return *this; + bigit carry = 0; + for (size_t i = 0, n = bigits_.size(); i < n; ++i) { + bigit c = bigits_[i] >> (bigit_bits - shift); + bigits_[i] = (bigits_[i] << shift) + carry; + carry = c; + } + if (carry != 0) bigits_.push_back(carry); + return *this; + } + + template bigint& operator*=(Int value) { + FMT_ASSERT(value > 0, ""); + multiply(uint32_or_64_or_128_t(value)); + return *this; + } + + friend int compare(const bigint& lhs, const bigint& rhs) { + int num_lhs_bigits = lhs.num_bigits(), num_rhs_bigits = rhs.num_bigits(); + if (num_lhs_bigits != num_rhs_bigits) + return num_lhs_bigits > num_rhs_bigits ? 1 : -1; + int i = static_cast(lhs.bigits_.size()) - 1; + int j = static_cast(rhs.bigits_.size()) - 1; + int end = i - j; + if (end < 0) end = 0; + for (; i >= end; --i, --j) { + bigit lhs_bigit = lhs[i], rhs_bigit = rhs[j]; + if (lhs_bigit != rhs_bigit) return lhs_bigit > rhs_bigit ? 1 : -1; + } + if (i != j) return i > j ? 1 : -1; + return 0; + } + + // Returns compare(lhs1 + lhs2, rhs). + friend int add_compare(const bigint& lhs1, const bigint& lhs2, + const bigint& rhs) { + int max_lhs_bigits = (std::max)(lhs1.num_bigits(), lhs2.num_bigits()); + int num_rhs_bigits = rhs.num_bigits(); + if (max_lhs_bigits + 1 < num_rhs_bigits) return -1; + if (max_lhs_bigits > num_rhs_bigits) return 1; + auto get_bigit = [](const bigint& n, int i) -> bigit { + return i >= n.exp_ && i < n.num_bigits() ? n[i - n.exp_] : 0; + }; + double_bigit borrow = 0; + int min_exp = (std::min)((std::min)(lhs1.exp_, lhs2.exp_), rhs.exp_); + for (int i = num_rhs_bigits - 1; i >= min_exp; --i) { + double_bigit sum = + static_cast(get_bigit(lhs1, i)) + get_bigit(lhs2, i); + bigit rhs_bigit = get_bigit(rhs, i); + if (sum > rhs_bigit + borrow) return 1; + borrow = rhs_bigit + borrow - sum; + if (borrow > 1) return -1; + borrow <<= bigit_bits; + } + return borrow != 0 ? -1 : 0; + } + + // Assigns pow(10, exp) to this bigint. + void assign_pow10(int exp) { + assert(exp >= 0); + if (exp == 0) return assign(1); + // Find the top bit. + int bitmask = 1; + while (exp >= bitmask) bitmask <<= 1; + bitmask >>= 1; + // pow(10, exp) = pow(5, exp) * pow(2, exp). First compute pow(5, exp) by + // repeated squaring and multiplication. + assign(5); + bitmask >>= 1; + while (bitmask != 0) { + square(); + if ((exp & bitmask) != 0) *this *= 5; + bitmask >>= 1; + } + *this <<= exp; // Multiply by pow(2, exp) by shifting. + } + + void square() { + basic_memory_buffer n(std::move(bigits_)); + int num_bigits = static_cast(bigits_.size()); + int num_result_bigits = 2 * num_bigits; + bigits_.resize(to_unsigned(num_result_bigits)); + using accumulator_t = conditional_t; + auto sum = accumulator_t(); + for (int bigit_index = 0; bigit_index < num_bigits; ++bigit_index) { + // Compute bigit at position bigit_index of the result by adding + // cross-product terms n[i] * n[j] such that i + j == bigit_index. + for (int i = 0, j = bigit_index; j >= 0; ++i, --j) { + // Most terms are multiplied twice which can be optimized in the future. + sum += static_cast(n[i]) * n[j]; + } + (*this)[bigit_index] = static_cast(sum); + sum >>= bits::value; // Compute the carry. + } + // Do the same for the top half. + for (int bigit_index = num_bigits; bigit_index < num_result_bigits; + ++bigit_index) { + for (int j = num_bigits - 1, i = bigit_index - j; i < num_bigits;) + sum += static_cast(n[i++]) * n[j--]; + (*this)[bigit_index] = static_cast(sum); + sum >>= bits::value; + } + --num_result_bigits; + remove_leading_zeros(); + exp_ *= 2; + } + + // Divides this bignum by divisor, assigning the remainder to this and + // returning the quotient. + int divmod_assign(const bigint& divisor) { + FMT_ASSERT(this != &divisor, ""); + if (compare(*this, divisor) < 0) return 0; + int num_bigits = static_cast(bigits_.size()); + FMT_ASSERT(divisor.bigits_[divisor.bigits_.size() - 1u] != 0, ""); + int exp_difference = exp_ - divisor.exp_; + if (exp_difference > 0) { + // Align bigints by adding trailing zeros to simplify subtraction. + bigits_.resize(to_unsigned(num_bigits + exp_difference)); + for (int i = num_bigits - 1, j = i + exp_difference; i >= 0; --i, --j) + bigits_[j] = bigits_[i]; + std::uninitialized_fill_n(bigits_.data(), exp_difference, 0); + exp_ -= exp_difference; + } + int quotient = 0; + do { + subtract_aligned(divisor); + ++quotient; + } while (compare(*this, divisor) >= 0); + return quotient; + } +}; + +enum class round_direction { unknown, up, down }; + +// Given the divisor (normally a power of 10), the remainder = v % divisor for +// some number v and the error, returns whether v should be rounded up, down, or +// whether the rounding direction can't be determined due to error. +// error should be less than divisor / 2. +inline round_direction get_round_direction(uint64_t divisor, uint64_t remainder, + uint64_t error) { + FMT_ASSERT(remainder < divisor, ""); // divisor - remainder won't overflow. + FMT_ASSERT(error < divisor, ""); // divisor - error won't overflow. + FMT_ASSERT(error < divisor - error, ""); // error * 2 won't overflow. + // Round down if (remainder + error) * 2 <= divisor. + if (remainder <= divisor - remainder && error * 2 <= divisor - remainder * 2) + return round_direction::down; + // Round up if (remainder - error) * 2 >= divisor. + if (remainder >= error && + remainder - error >= divisor - (remainder - error)) { + return round_direction::up; + } + return round_direction::unknown; +} + +namespace digits { +enum result { + more, // Generate more digits. + done, // Done generating digits. + error // Digit generation cancelled due to an error. +}; +} + +// A version of count_digits optimized for grisu_gen_digits. +inline int grisu_count_digits(uint32_t n) { + if (n < 10) return 1; + if (n < 100) return 2; + if (n < 1000) return 3; + if (n < 10000) return 4; + if (n < 100000) return 5; + if (n < 1000000) return 6; + if (n < 10000000) return 7; + if (n < 100000000) return 8; + if (n < 1000000000) return 9; + return 10; +} + +// Generates output using the Grisu digit-gen algorithm. +// error: the size of the region (lower, upper) outside of which numbers +// definitely do not round to value (Delta in Grisu3). +template +FMT_ALWAYS_INLINE digits::result grisu_gen_digits(fp value, uint64_t error, + int& exp, Handler& handler) { + const fp one(1ULL << -value.e, value.e); + // The integral part of scaled value (p1 in Grisu) = value / one. It cannot be + // zero because it contains a product of two 64-bit numbers with MSB set (due + // to normalization) - 1, shifted right by at most 60 bits. + auto integral = static_cast(value.f >> -one.e); + FMT_ASSERT(integral != 0, ""); + FMT_ASSERT(integral == value.f >> -one.e, ""); + // The fractional part of scaled value (p2 in Grisu) c = value % one. + uint64_t fractional = value.f & (one.f - 1); + exp = grisu_count_digits(integral); // kappa in Grisu. + // Divide by 10 to prevent overflow. + auto result = handler.on_start(data::powers_of_10_64[exp - 1] << -one.e, + value.f / 10, error * 10, exp); + if (result != digits::more) return result; + // Generate digits for the integral part. This can produce up to 10 digits. + do { + uint32_t digit = 0; + auto divmod_integral = [&](uint32_t divisor) { + digit = integral / divisor; + integral %= divisor; + }; + // This optimization by Milo Yip reduces the number of integer divisions by + // one per iteration. + switch (exp) { + case 10: + divmod_integral(1000000000); + break; + case 9: + divmod_integral(100000000); + break; + case 8: + divmod_integral(10000000); + break; + case 7: + divmod_integral(1000000); + break; + case 6: + divmod_integral(100000); + break; + case 5: + divmod_integral(10000); + break; + case 4: + divmod_integral(1000); + break; + case 3: + divmod_integral(100); + break; + case 2: + divmod_integral(10); + break; + case 1: + digit = integral; + integral = 0; + break; + default: + FMT_ASSERT(false, "invalid number of digits"); + } + --exp; + uint64_t remainder = + (static_cast(integral) << -one.e) + fractional; + result = handler.on_digit(static_cast('0' + digit), + data::powers_of_10_64[exp] << -one.e, remainder, + error, exp, true); + if (result != digits::more) return result; + } while (exp > 0); + // Generate digits for the fractional part. + for (;;) { + fractional *= 10; + error *= 10; + char digit = + static_cast('0' + static_cast(fractional >> -one.e)); + fractional &= one.f - 1; + --exp; + result = handler.on_digit(digit, one.f, fractional, error, exp, false); + if (result != digits::more) return result; + } +} + +// The fixed precision digit handler. +struct fixed_handler { + char* buf; + int size; + int precision; + int exp10; + bool fixed; + + digits::result on_start(uint64_t divisor, uint64_t remainder, uint64_t error, + int& exp) { + // Non-fixed formats require at least one digit and no precision adjustment. + if (!fixed) return digits::more; + // Adjust fixed precision by exponent because it is relative to decimal + // point. + precision += exp + exp10; + // Check if precision is satisfied just by leading zeros, e.g. + // format("{:.2f}", 0.001) gives "0.00" without generating any digits. + if (precision > 0) return digits::more; + if (precision < 0) return digits::done; + auto dir = get_round_direction(divisor, remainder, error); + if (dir == round_direction::unknown) return digits::error; + buf[size++] = dir == round_direction::up ? '1' : '0'; + return digits::done; + } + + digits::result on_digit(char digit, uint64_t divisor, uint64_t remainder, + uint64_t error, int, bool integral) { + FMT_ASSERT(remainder < divisor, ""); + buf[size++] = digit; + if (size < precision) return digits::more; + if (!integral) { + // Check if error * 2 < divisor with overflow prevention. + // The check is not needed for the integral part because error = 1 + // and divisor > (1 << 32) there. + if (error >= divisor || error >= divisor - error) return digits::error; + } else { + FMT_ASSERT(error == 1 && divisor > 2, ""); + } + auto dir = get_round_direction(divisor, remainder, error); + if (dir != round_direction::up) + return dir == round_direction::down ? digits::done : digits::error; + ++buf[size - 1]; + for (int i = size - 1; i > 0 && buf[i] > '9'; --i) { + buf[i] = '0'; + ++buf[i - 1]; + } + if (buf[0] > '9') { + buf[0] = '1'; + buf[size++] = '0'; + } + return digits::done; + } +}; + +// The shortest representation digit handler. +struct grisu_shortest_handler { + char* buf; + int size; + // Distance between scaled value and upper bound (wp_W in Grisu3). + uint64_t diff; + + digits::result on_start(uint64_t, uint64_t, uint64_t, int&) { + return digits::more; + } + + // Decrement the generated number approaching value from above. + void round(uint64_t d, uint64_t divisor, uint64_t& remainder, + uint64_t error) { + while ( + remainder < d && error - remainder >= divisor && + (remainder + divisor < d || d - remainder >= remainder + divisor - d)) { + --buf[size - 1]; + remainder += divisor; + } + } + + // Implements Grisu's round_weed. + digits::result on_digit(char digit, uint64_t divisor, uint64_t remainder, + uint64_t error, int exp, bool integral) { + buf[size++] = digit; + if (remainder >= error) return digits::more; + uint64_t unit = integral ? 1 : data::powers_of_10_64[-exp]; + uint64_t up = (diff - 1) * unit; // wp_Wup + round(up, divisor, remainder, error); + uint64_t down = (diff + 1) * unit; // wp_Wdown + if (remainder < down && error - remainder >= divisor && + (remainder + divisor < down || + down - remainder > remainder + divisor - down)) { + return digits::error; + } + return 2 * unit <= remainder && remainder <= error - 4 * unit + ? digits::done + : digits::error; + } +}; + +// Formats value using a variation of the Fixed-Precision Positive +// Floating-Point Printout ((FPP)^2) algorithm by Steele & White: +// https://fmt.dev/p372-steele.pdf. +template +void fallback_format(Double d, buffer& buf, int& exp10) { + bigint numerator; // 2 * R in (FPP)^2. + bigint denominator; // 2 * S in (FPP)^2. + // lower and upper are differences between value and corresponding boundaries. + bigint lower; // (M^- in (FPP)^2). + bigint upper_store; // upper's value if different from lower. + bigint* upper = nullptr; // (M^+ in (FPP)^2). + fp value; + // Shift numerator and denominator by an extra bit or two (if lower boundary + // is closer) to make lower and upper integers. This eliminates multiplication + // by 2 during later computations. + // TODO: handle float + int shift = value.assign(d) ? 2 : 1; + uint64_t significand = value.f << shift; + if (value.e >= 0) { + numerator.assign(significand); + numerator <<= value.e; + lower.assign(1); + lower <<= value.e; + if (shift != 1) { + upper_store.assign(1); + upper_store <<= value.e + 1; + upper = &upper_store; + } + denominator.assign_pow10(exp10); + denominator <<= 1; + } else if (exp10 < 0) { + numerator.assign_pow10(-exp10); + lower.assign(numerator); + if (shift != 1) { + upper_store.assign(numerator); + upper_store <<= 1; + upper = &upper_store; + } + numerator *= significand; + denominator.assign(1); + denominator <<= shift - value.e; + } else { + numerator.assign(significand); + denominator.assign_pow10(exp10); + denominator <<= shift - value.e; + lower.assign(1); + if (shift != 1) { + upper_store.assign(1ULL << 1); + upper = &upper_store; + } + } + if (!upper) upper = &lower; + // Invariant: value == (numerator / denominator) * pow(10, exp10). + bool even = (value.f & 1) == 0; + int num_digits = 0; + char* data = buf.data(); + for (;;) { + int digit = numerator.divmod_assign(denominator); + bool low = compare(numerator, lower) - even < 0; // numerator <[=] lower. + // numerator + upper >[=] pow10: + bool high = add_compare(numerator, *upper, denominator) + even > 0; + data[num_digits++] = static_cast('0' + digit); + if (low || high) { + if (!low) { + ++data[num_digits - 1]; + } else if (high) { + int result = add_compare(numerator, numerator, denominator); + // Round half to even. + if (result > 0 || (result == 0 && (digit % 2) != 0)) + ++data[num_digits - 1]; + } + buf.resize(to_unsigned(num_digits)); + exp10 -= num_digits - 1; + return; + } + numerator *= 10; + lower *= 10; + if (upper != &lower) *upper *= 10; + } +} + +// Formats value using the Grisu algorithm +// (https://www.cs.tufts.edu/~nr/cs257/archive/florian-loitsch/printf.pdf) +// if T is a IEEE754 binary32 or binary64 and snprintf otherwise. +template +int format_float(T value, int precision, float_specs specs, buffer& buf) { + static_assert(!std::is_same::value, ""); + FMT_ASSERT(value >= 0, "value is negative"); + + const bool fixed = specs.format == float_format::fixed; + if (value <= 0) { // <= instead of == to silence a warning. + if (precision <= 0 || !fixed) { + buf.push_back('0'); + return 0; + } + buf.resize(to_unsigned(precision)); + std::uninitialized_fill_n(buf.data(), precision, '0'); + return -precision; + } + + if (!specs.use_grisu) return snprintf_float(value, precision, specs, buf); + + int exp = 0; + const int min_exp = -60; // alpha in Grisu. + int cached_exp10 = 0; // K in Grisu. + if (precision < 0) { + fp fp_value; + auto boundaries = specs.binary32 + ? fp_value.assign_float_with_boundaries(value) + : fp_value.assign_with_boundaries(value); + fp_value = normalize(fp_value); + // Find a cached power of 10 such that multiplying value by it will bring + // the exponent in the range [min_exp, -32]. + const fp cached_pow = get_cached_power( + min_exp - (fp_value.e + fp::significand_size), cached_exp10); + // Multiply value and boundaries by the cached power of 10. + fp_value = fp_value * cached_pow; + boundaries.lower = multiply(boundaries.lower, cached_pow.f); + boundaries.upper = multiply(boundaries.upper, cached_pow.f); + assert(min_exp <= fp_value.e && fp_value.e <= -32); + --boundaries.lower; // \tilde{M}^- - 1 ulp -> M^-_{\downarrow}. + ++boundaries.upper; // \tilde{M}^+ + 1 ulp -> M^+_{\uparrow}. + // Numbers outside of (lower, upper) definitely do not round to value. + grisu_shortest_handler handler{buf.data(), 0, + boundaries.upper - fp_value.f}; + auto result = + grisu_gen_digits(fp(boundaries.upper, fp_value.e), + boundaries.upper - boundaries.lower, exp, handler); + if (result == digits::error) { + exp += handler.size - cached_exp10 - 1; + fallback_format(value, buf, exp); + return exp; + } + buf.resize(to_unsigned(handler.size)); + } else { + if (precision > 17) return snprintf_float(value, precision, specs, buf); + fp normalized = normalize(fp(value)); + const auto cached_pow = get_cached_power( + min_exp - (normalized.e + fp::significand_size), cached_exp10); + normalized = normalized * cached_pow; + fixed_handler handler{buf.data(), 0, precision, -cached_exp10, fixed}; + if (grisu_gen_digits(normalized, 1, exp, handler) == digits::error) + return snprintf_float(value, precision, specs, buf); + int num_digits = handler.size; + if (!fixed) { + // Remove trailing zeros. + while (num_digits > 0 && buf[num_digits - 1] == '0') { + --num_digits; + ++exp; + } + } + buf.resize(to_unsigned(num_digits)); + } + return exp - cached_exp10; +} + +template +int snprintf_float(T value, int precision, float_specs specs, + buffer& buf) { + // Buffer capacity must be non-zero, otherwise MSVC's vsnprintf_s will fail. + FMT_ASSERT(buf.capacity() > buf.size(), "empty buffer"); + static_assert(!std::is_same::value, ""); + + // Subtract 1 to account for the difference in precision since we use %e for + // both general and exponent format. + if (specs.format == float_format::general || + specs.format == float_format::exp) + precision = (precision >= 0 ? precision : 6) - 1; + + // Build the format string. + enum { max_format_size = 7 }; // Ths longest format is "%#.*Le". + char format[max_format_size]; + char* format_ptr = format; + *format_ptr++ = '%'; + if (specs.showpoint && specs.format == float_format::hex) *format_ptr++ = '#'; + if (precision >= 0) { + *format_ptr++ = '.'; + *format_ptr++ = '*'; + } + if (std::is_same()) *format_ptr++ = 'L'; + *format_ptr++ = specs.format != float_format::hex + ? (specs.format == float_format::fixed ? 'f' : 'e') + : (specs.upper ? 'A' : 'a'); + *format_ptr = '\0'; + + // Format using snprintf. + auto offset = buf.size(); + for (;;) { + auto begin = buf.data() + offset; + auto capacity = buf.capacity() - offset; +#ifdef FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION + if (precision > 100000) + throw std::runtime_error( + "fuzz mode - avoid large allocation inside snprintf"); +#endif + // Suppress the warning about a nonliteral format string. + // Cannot use auto becase of a bug in MinGW (#1532). + int (*snprintf_ptr)(char*, size_t, const char*, ...) = FMT_SNPRINTF; + int result = precision >= 0 + ? snprintf_ptr(begin, capacity, format, precision, value) + : snprintf_ptr(begin, capacity, format, value); + if (result < 0) { + buf.reserve(buf.capacity() + 1); // The buffer will grow exponentially. + continue; + } + auto size = to_unsigned(result); + // Size equal to capacity means that the last character was truncated. + if (size >= capacity) { + buf.reserve(size + offset + 1); // Add 1 for the terminating '\0'. + continue; + } + auto is_digit = [](char c) { return c >= '0' && c <= '9'; }; + if (specs.format == float_format::fixed) { + if (precision == 0) { + buf.resize(size); + return 0; + } + // Find and remove the decimal point. + auto end = begin + size, p = end; + do { + --p; + } while (is_digit(*p)); + int fraction_size = static_cast(end - p - 1); + std::memmove(p, p + 1, to_unsigned(fraction_size)); + buf.resize(size - 1); + return -fraction_size; + } + if (specs.format == float_format::hex) { + buf.resize(size + offset); + return 0; + } + // Find and parse the exponent. + auto end = begin + size, exp_pos = end; + do { + --exp_pos; + } while (*exp_pos != 'e'); + char sign = exp_pos[1]; + assert(sign == '+' || sign == '-'); + int exp = 0; + auto p = exp_pos + 2; // Skip 'e' and sign. + do { + assert(is_digit(*p)); + exp = exp * 10 + (*p++ - '0'); + } while (p != end); + if (sign == '-') exp = -exp; + int fraction_size = 0; + if (exp_pos != begin + 1) { + // Remove trailing zeros. + auto fraction_end = exp_pos - 1; + while (*fraction_end == '0') --fraction_end; + // Move the fractional part left to get rid of the decimal point. + fraction_size = static_cast(fraction_end - begin - 1); + std::memmove(begin + 1, begin + 2, to_unsigned(fraction_size)); + } + buf.resize(to_unsigned(fraction_size) + offset + 1); + return exp - fraction_size; + } +} + +// A public domain branchless UTF-8 decoder by Christopher Wellons: +// https://github.com/skeeto/branchless-utf8 +/* Decode the next character, c, from buf, reporting errors in e. + * + * Since this is a branchless decoder, four bytes will be read from the + * buffer regardless of the actual length of the next character. This + * means the buffer _must_ have at least three bytes of zero padding + * following the end of the data stream. + * + * Errors are reported in e, which will be non-zero if the parsed + * character was somehow invalid: invalid byte sequence, non-canonical + * encoding, or a surrogate half. + * + * The function returns a pointer to the next character. When an error + * occurs, this pointer will be a guess that depends on the particular + * error, but it will always advance at least one byte. + */ +FMT_FUNC const char* utf8_decode(const char* buf, uint32_t* c, int* e) { + static const char lengths[] = {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, + 0, 0, 2, 2, 2, 2, 3, 3, 4, 0}; + static const int masks[] = {0x00, 0x7f, 0x1f, 0x0f, 0x07}; + static const uint32_t mins[] = {4194304, 0, 128, 2048, 65536}; + static const int shiftc[] = {0, 18, 12, 6, 0}; + static const int shifte[] = {0, 6, 4, 2, 0}; + + auto s = reinterpret_cast(buf); + int len = lengths[s[0] >> 3]; + + // Compute the pointer to the next character early so that the next + // iteration can start working on the next character. Neither Clang + // nor GCC figure out this reordering on their own. + const char* next = buf + len + !len; + + // Assume a four-byte character and load four bytes. Unused bits are + // shifted out. + *c = uint32_t(s[0] & masks[len]) << 18; + *c |= uint32_t(s[1] & 0x3f) << 12; + *c |= uint32_t(s[2] & 0x3f) << 6; + *c |= uint32_t(s[3] & 0x3f) << 0; + *c >>= shiftc[len]; + + // Accumulate the various error conditions. + *e = (*c < mins[len]) << 6; // non-canonical encoding + *e |= ((*c >> 11) == 0x1b) << 7; // surrogate half? + *e |= (*c > 0x10FFFF) << 8; // out of range? + *e |= (s[1] & 0xc0) >> 2; + *e |= (s[2] & 0xc0) >> 4; + *e |= (s[3]) >> 6; + *e ^= 0x2a; // top two bits of each tail byte correct? + *e >>= shifte[len]; + + return next; +} +} // namespace internal + +template <> struct formatter { + format_parse_context::iterator parse(format_parse_context& ctx) { + return ctx.begin(); + } + + format_context::iterator format(const internal::bigint& n, + format_context& ctx) { + auto out = ctx.out(); + bool first = true; + for (auto i = n.bigits_.size(); i > 0; --i) { + auto value = n.bigits_[i - 1u]; + if (first) { + out = format_to(out, "{:x}", value); + first = false; + continue; + } + out = format_to(out, "{:08x}", value); + } + if (n.exp_ > 0) + out = format_to(out, "p{}", n.exp_ * internal::bigint::bigit_bits); + return out; + } +}; + +FMT_FUNC internal::utf8_to_utf16::utf8_to_utf16(string_view s) { + auto transcode = [this](const char* p) { + auto cp = uint32_t(); + auto error = 0; + p = utf8_decode(p, &cp, &error); + if (error != 0) FMT_THROW(std::runtime_error("invalid utf8")); + if (cp <= 0xFFFF) { + buffer_.push_back(static_cast(cp)); + } else { + cp -= 0x10000; + buffer_.push_back(static_cast(0xD800 + (cp >> 10))); + buffer_.push_back(static_cast(0xDC00 + (cp & 0x3FF))); + } + return p; + }; + auto p = s.data(); + const size_t block_size = 4; // utf8_decode always reads blocks of 4 chars. + if (s.size() >= block_size) { + for (auto end = p + s.size() - block_size + 1; p < end;) p = transcode(p); + } + if (auto num_chars_left = s.data() + s.size() - p) { + char buf[2 * block_size - 1] = {}; + memcpy(buf, p, to_unsigned(num_chars_left)); + p = buf; + do { + p = transcode(p); + } while (p - buf < num_chars_left); + } + buffer_.push_back(0); +} + +FMT_FUNC void format_system_error(internal::buffer& out, int error_code, + string_view message) FMT_NOEXCEPT { + FMT_TRY { + memory_buffer buf; + buf.resize(inline_buffer_size); + for (;;) { + char* system_message = &buf[0]; + int result = + internal::safe_strerror(error_code, system_message, buf.size()); + if (result == 0) { + internal::writer w(out); + w.write(message); + w.write(": "); + w.write(system_message); + return; + } + if (result != ERANGE) + break; // Can't get error message, report error code instead. + buf.resize(buf.size() * 2); + } + } + FMT_CATCH(...) {} + format_error_code(out, error_code, message); +} + +FMT_FUNC void internal::error_handler::on_error(const char* message) { + FMT_THROW(format_error(message)); +} + +FMT_FUNC void report_system_error(int error_code, + fmt::string_view message) FMT_NOEXCEPT { + report_error(format_system_error, error_code, message); +} + +FMT_FUNC void vprint(std::FILE* f, string_view format_str, format_args args) { + memory_buffer buffer; + internal::vformat_to(buffer, format_str, + basic_format_args>(args)); +#ifdef _WIN32 + auto fd = _fileno(f); + if (_isatty(fd)) { + internal::utf8_to_utf16 u16(string_view(buffer.data(), buffer.size())); + auto written = DWORD(); + if (!WriteConsoleW(reinterpret_cast(_get_osfhandle(fd)), + u16.c_str(), static_cast(u16.size()), &written, + nullptr)) { + FMT_THROW(format_error("failed to write to console")); + } + return; + } +#endif + internal::fwrite_fully(buffer.data(), 1, buffer.size(), f); +} + +#ifdef _WIN32 +// Print assuming legacy (non-Unicode) encoding. +FMT_FUNC void internal::vprint_mojibake(std::FILE* f, string_view format_str, + format_args args) { + memory_buffer buffer; + internal::vformat_to(buffer, format_str, + basic_format_args>(args)); + fwrite_fully(buffer.data(), 1, buffer.size(), f); +} +#endif + +FMT_FUNC void vprint(string_view format_str, format_args args) { + vprint(stdout, format_str, args); +} + +FMT_END_NAMESPACE + +#ifdef _MSC_VER +# pragma warning(pop) +#endif + +#endif // FMT_FORMAT_INL_H_ diff --git a/src/fmt/format.h b/src/fmt/format.h new file mode 100644 index 0000000000000000000000000000000000000000..4e96539fa2a078c093d77e9d30a83752339fda24 --- /dev/null +++ b/src/fmt/format.h @@ -0,0 +1,3648 @@ +/* + Formatting library for C++ + + Copyright (c) 2012 - present, Victor Zverovich + + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the + "Software"), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sublicense, and/or sell copies of the Software, and to + permit persons to whom the Software is furnished to do so, subject to + the following conditions: + + The above copyright notice and this permission notice shall be + included in all copies or substantial portions of the Software. + + 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 AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE + LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + --- Optional exception to the license --- + + As an exception, if, as a result of your compiling your source code, portions + of this Software are embedded into a machine-executable object form of such + source code, you may redistribute such embedded portions in such object form + without including the above copyright and permission notices. + */ + +#ifndef FMT_FORMAT_H_ +#define FMT_FORMAT_H_ + +#include +#include +#include +#include +#include +#include +#include + +#include "core.h" + +#ifdef FMT_DEPRECATED_INCLUDE_OS +# include "os.h" +#endif + +#ifdef __INTEL_COMPILER +# define FMT_ICC_VERSION __INTEL_COMPILER +#elif defined(__ICL) +# define FMT_ICC_VERSION __ICL +#else +# define FMT_ICC_VERSION 0 +#endif + +#ifdef __NVCC__ +# define FMT_CUDA_VERSION (__CUDACC_VER_MAJOR__ * 100 + __CUDACC_VER_MINOR__) +#else +# define FMT_CUDA_VERSION 0 +#endif + +#ifdef __has_builtin +# define FMT_HAS_BUILTIN(x) __has_builtin(x) +#else +# define FMT_HAS_BUILTIN(x) 0 +#endif + +#if FMT_GCC_VERSION || FMT_CLANG_VERSION +# define FMT_NOINLINE __attribute__((noinline)) +#else +# define FMT_NOINLINE +#endif + +#if __cplusplus == 201103L || __cplusplus == 201402L +# if defined(__clang__) +# define FMT_FALLTHROUGH [[clang::fallthrough]] +# elif FMT_GCC_VERSION >= 700 && !defined(__PGI) +# define FMT_FALLTHROUGH [[gnu::fallthrough]] +# else +# define FMT_FALLTHROUGH +# endif +#elif FMT_HAS_CPP17_ATTRIBUTE(fallthrough) || \ + (defined(_MSVC_LANG) && _MSVC_LANG >= 201703L) +# define FMT_FALLTHROUGH [[fallthrough]] +#else +# define FMT_FALLTHROUGH +#endif + +#ifndef FMT_THROW +# if FMT_EXCEPTIONS +# if FMT_MSC_VER || FMT_NVCC +FMT_BEGIN_NAMESPACE +namespace internal { +template inline void do_throw(const Exception& x) { + // Silence unreachable code warnings in MSVC and NVCC because these + // are nearly impossible to fix in a generic code. + volatile bool b = true; + if (b) throw x; +} +} // namespace internal +FMT_END_NAMESPACE +# define FMT_THROW(x) internal::do_throw(x) +# else +# define FMT_THROW(x) throw x +# endif +# else +# define FMT_THROW(x) \ + do { \ + static_cast(sizeof(x)); \ + FMT_ASSERT(false, ""); \ + } while (false) +# endif +#endif + +#if FMT_EXCEPTIONS +# define FMT_TRY try +# define FMT_CATCH(x) catch (x) +#else +# define FMT_TRY if (true) +# define FMT_CATCH(x) if (false) +#endif + +#ifndef FMT_USE_USER_DEFINED_LITERALS +// For Intel and NVIDIA compilers both they and the system gcc/msc support UDLs. +# if (FMT_HAS_FEATURE(cxx_user_literals) || FMT_GCC_VERSION >= 407 || \ + FMT_MSC_VER >= 1900) && \ + (!(FMT_ICC_VERSION || FMT_CUDA_VERSION) || FMT_ICC_VERSION >= 1500 || \ + FMT_CUDA_VERSION >= 700) +# define FMT_USE_USER_DEFINED_LITERALS 1 +# else +# define FMT_USE_USER_DEFINED_LITERALS 0 +# endif +#endif + +#ifndef FMT_USE_UDL_TEMPLATE +// EDG front end based compilers (icc, nvcc) and GCC < 6.4 do not propertly +// support UDL templates and GCC >= 9 warns about them. +# if FMT_USE_USER_DEFINED_LITERALS && FMT_ICC_VERSION == 0 && \ + FMT_CUDA_VERSION == 0 && \ + ((FMT_GCC_VERSION >= 604 && FMT_GCC_VERSION <= 900 && \ + __cplusplus >= 201402L) || \ + FMT_CLANG_VERSION >= 304) +# define FMT_USE_UDL_TEMPLATE 1 +# else +# define FMT_USE_UDL_TEMPLATE 0 +# endif +#endif + +#ifndef FMT_USE_FLOAT +# define FMT_USE_FLOAT 1 +#endif + +#ifndef FMT_USE_DOUBLE +# define FMT_USE_DOUBLE 1 +#endif + +#ifndef FMT_USE_LONG_DOUBLE +# define FMT_USE_LONG_DOUBLE 1 +#endif + +// __builtin_clz is broken in clang with Microsoft CodeGen: +// https://github.com/fmtlib/fmt/issues/519 +#if (FMT_GCC_VERSION || FMT_HAS_BUILTIN(__builtin_clz)) && !FMT_MSC_VER +# define FMT_BUILTIN_CLZ(n) __builtin_clz(n) +#endif +#if (FMT_GCC_VERSION || FMT_HAS_BUILTIN(__builtin_clzll)) && !FMT_MSC_VER +# define FMT_BUILTIN_CLZLL(n) __builtin_clzll(n) +#endif + +// Some compilers masquerade as both MSVC and GCC-likes or otherwise support +// __builtin_clz and __builtin_clzll, so only define FMT_BUILTIN_CLZ using the +// MSVC intrinsics if the clz and clzll builtins are not available. +#if FMT_MSC_VER && !defined(FMT_BUILTIN_CLZLL) && !defined(_MANAGED) +# include // _BitScanReverse, _BitScanReverse64 + +FMT_BEGIN_NAMESPACE +namespace internal { +// Avoid Clang with Microsoft CodeGen's -Wunknown-pragmas warning. +# ifndef __clang__ +# pragma intrinsic(_BitScanReverse) +# endif +inline uint32_t clz(uint32_t x) { + unsigned long r = 0; + _BitScanReverse(&r, x); + + FMT_ASSERT(x != 0, ""); + // Static analysis complains about using uninitialized data + // "r", but the only way that can happen is if "x" is 0, + // which the callers guarantee to not happen. +# pragma warning(suppress : 6102) + return 31 - r; +} +# define FMT_BUILTIN_CLZ(n) internal::clz(n) + +# if defined(_WIN64) && !defined(__clang__) +# pragma intrinsic(_BitScanReverse64) +# endif + +inline uint32_t clzll(uint64_t x) { + unsigned long r = 0; +# ifdef _WIN64 + _BitScanReverse64(&r, x); +# else + // Scan the high 32 bits. + if (_BitScanReverse(&r, static_cast(x >> 32))) return 63 - (r + 32); + + // Scan the low 32 bits. + _BitScanReverse(&r, static_cast(x)); +# endif + + FMT_ASSERT(x != 0, ""); + // Static analysis complains about using uninitialized data + // "r", but the only way that can happen is if "x" is 0, + // which the callers guarantee to not happen. +# pragma warning(suppress : 6102) + return 63 - r; +} +# define FMT_BUILTIN_CLZLL(n) internal::clzll(n) +} // namespace internal +FMT_END_NAMESPACE +#endif + +// Enable the deprecated numeric alignment. +#ifndef FMT_NUMERIC_ALIGN +# define FMT_NUMERIC_ALIGN 1 +#endif + +// Enable the deprecated percent specifier. +#ifndef FMT_DEPRECATED_PERCENT +# define FMT_DEPRECATED_PERCENT 0 +#endif + +FMT_BEGIN_NAMESPACE +namespace internal { + +// An equivalent of `*reinterpret_cast(&source)` that doesn't have +// undefined behavior (e.g. due to type aliasing). +// Example: uint64_t d = bit_cast(2.718); +template +inline Dest bit_cast(const Source& source) { + static_assert(sizeof(Dest) == sizeof(Source), "size mismatch"); + Dest dest; + std::memcpy(&dest, &source, sizeof(dest)); + return dest; +} + +inline bool is_big_endian() { + const auto u = 1u; + struct bytes { + char data[sizeof(u)]; + }; + return bit_cast(u).data[0] == 0; +} + +// A fallback implementation of uintptr_t for systems that lack it. +struct fallback_uintptr { + unsigned char value[sizeof(void*)]; + + fallback_uintptr() = default; + explicit fallback_uintptr(const void* p) { + *this = bit_cast(p); + if (is_big_endian()) { + for (size_t i = 0, j = sizeof(void*) - 1; i < j; ++i, --j) + std::swap(value[i], value[j]); + } + } +}; +#ifdef UINTPTR_MAX +using uintptr_t = ::uintptr_t; +inline uintptr_t to_uintptr(const void* p) { return bit_cast(p); } +#else +using uintptr_t = fallback_uintptr; +inline fallback_uintptr to_uintptr(const void* p) { + return fallback_uintptr(p); +} +#endif + +// Returns the largest possible value for type T. Same as +// std::numeric_limits::max() but shorter and not affected by the max macro. +template constexpr T max_value() { + return (std::numeric_limits::max)(); +} +template constexpr int num_bits() { + return std::numeric_limits::digits; +} +template <> constexpr int num_bits() { + return static_cast(sizeof(void*) * + std::numeric_limits::digits); +} + +// An approximation of iterator_t for pre-C++20 systems. +template +using iterator_t = decltype(std::begin(std::declval())); + +// Detect the iterator category of *any* given type in a SFINAE-friendly way. +// Unfortunately, older implementations of std::iterator_traits are not safe +// for use in a SFINAE-context. +template +struct iterator_category : std::false_type {}; + +template struct iterator_category { + using type = std::random_access_iterator_tag; +}; + +template +struct iterator_category> { + using type = typename It::iterator_category; +}; + +// Detect if *any* given type models the OutputIterator concept. +template class is_output_iterator { + // Check for mutability because all iterator categories derived from + // std::input_iterator_tag *may* also meet the requirements of an + // OutputIterator, thereby falling into the category of 'mutable iterators' + // [iterator.requirements.general] clause 4. The compiler reveals this + // property only at the point of *actually dereferencing* the iterator! + template + static decltype(*(std::declval())) test(std::input_iterator_tag); + template static char& test(std::output_iterator_tag); + template static const char& test(...); + + using type = decltype(test(typename iterator_category::type{})); + + public: + enum { value = !std::is_const>::value }; +}; + +// A workaround for std::string not having mutable data() until C++17. +template inline Char* get_data(std::basic_string& s) { + return &s[0]; +} +template +inline typename Container::value_type* get_data(Container& c) { + return c.data(); +} + +#if defined(_SECURE_SCL) && _SECURE_SCL +// Make a checked iterator to avoid MSVC warnings. +template using checked_ptr = stdext::checked_array_iterator; +template checked_ptr make_checked(T* p, std::size_t size) { + return {p, size}; +} +#else +template using checked_ptr = T*; +template inline T* make_checked(T* p, std::size_t) { return p; } +#endif + +template ::value)> +inline checked_ptr reserve( + std::back_insert_iterator& it, std::size_t n) { + Container& c = get_container(it); + std::size_t size = c.size(); + c.resize(size + n); + return make_checked(get_data(c) + size, n); +} + +template +inline Iterator& reserve(Iterator& it, std::size_t) { + return it; +} + +// An output iterator that counts the number of objects written to it and +// discards them. +class counting_iterator { + private: + std::size_t count_; + + public: + using iterator_category = std::output_iterator_tag; + using difference_type = std::ptrdiff_t; + using pointer = void; + using reference = void; + using _Unchecked_type = counting_iterator; // Mark iterator as checked. + + struct value_type { + template void operator=(const T&) {} + }; + + counting_iterator() : count_(0) {} + + std::size_t count() const { return count_; } + + counting_iterator& operator++() { + ++count_; + return *this; + } + + counting_iterator operator++(int) { + auto it = *this; + ++*this; + return it; + } + + value_type operator*() const { return {}; } +}; + +template class truncating_iterator_base { + protected: + OutputIt out_; + std::size_t limit_; + std::size_t count_; + + truncating_iterator_base(OutputIt out, std::size_t limit) + : out_(out), limit_(limit), count_(0) {} + + public: + using iterator_category = std::output_iterator_tag; + using value_type = typename std::iterator_traits::value_type; + using difference_type = void; + using pointer = void; + using reference = void; + using _Unchecked_type = + truncating_iterator_base; // Mark iterator as checked. + + OutputIt base() const { return out_; } + std::size_t count() const { return count_; } +}; + +// An output iterator that truncates the output and counts the number of objects +// written to it. +template ::value_type>::type> +class truncating_iterator; + +template +class truncating_iterator + : public truncating_iterator_base { + mutable typename truncating_iterator_base::value_type blackhole_; + + public: + using value_type = typename truncating_iterator_base::value_type; + + truncating_iterator(OutputIt out, std::size_t limit) + : truncating_iterator_base(out, limit) {} + + truncating_iterator& operator++() { + if (this->count_++ < this->limit_) ++this->out_; + return *this; + } + + truncating_iterator operator++(int) { + auto it = *this; + ++*this; + return it; + } + + value_type& operator*() const { + return this->count_ < this->limit_ ? *this->out_ : blackhole_; + } +}; + +template +class truncating_iterator + : public truncating_iterator_base { + public: + truncating_iterator(OutputIt out, std::size_t limit) + : truncating_iterator_base(out, limit) {} + + template truncating_iterator& operator=(T val) { + if (this->count_++ < this->limit_) *this->out_++ = val; + return *this; + } + + truncating_iterator& operator++() { return *this; } + truncating_iterator& operator++(int) { return *this; } + truncating_iterator& operator*() { return *this; } +}; + +// A range with the specified output iterator and value type. +template +class output_range { + private: + OutputIt it_; + + public: + using value_type = T; + using iterator = OutputIt; + struct sentinel {}; + + explicit output_range(OutputIt it) : it_(it) {} + OutputIt begin() const { return it_; } + sentinel end() const { return {}; } // Sentinel is not used yet. +}; + +template +inline size_t count_code_points(basic_string_view s) { + return s.size(); +} + +// Counts the number of code points in a UTF-8 string. +inline size_t count_code_points(basic_string_view s) { + const char* data = s.data(); + size_t num_code_points = 0; + for (size_t i = 0, size = s.size(); i != size; ++i) { + if ((data[i] & 0xc0) != 0x80) ++num_code_points; + } + return num_code_points; +} + +inline size_t count_code_points(basic_string_view s) { + return count_code_points(basic_string_view( + reinterpret_cast(s.data()), s.size())); +} + +template +inline size_t code_point_index(basic_string_view s, size_t n) { + size_t size = s.size(); + return n < size ? n : size; +} + +// Calculates the index of the nth code point in a UTF-8 string. +inline size_t code_point_index(basic_string_view s, size_t n) { + const char8_type* data = s.data(); + size_t num_code_points = 0; + for (size_t i = 0, size = s.size(); i != size; ++i) { + if ((data[i] & 0xc0) != 0x80 && ++num_code_points > n) { + return i; + } + } + return s.size(); +} + +inline char8_type to_char8_t(char c) { return static_cast(c); } + +template +using needs_conversion = bool_constant< + std::is_same::value_type, + char>::value && + std::is_same::value>; + +template ::value)> +OutputIt copy_str(InputIt begin, InputIt end, OutputIt it) { + return std::copy(begin, end, it); +} + +template ::value)> +OutputIt copy_str(InputIt begin, InputIt end, OutputIt it) { + return std::transform(begin, end, it, to_char8_t); +} + +#ifndef FMT_USE_GRISU +# define FMT_USE_GRISU 1 +#endif + +template constexpr bool use_grisu() { + return FMT_USE_GRISU && std::numeric_limits::is_iec559 && + sizeof(T) <= sizeof(double); +} + +template +template +void buffer::append(const U* begin, const U* end) { + std::size_t new_size = size_ + to_unsigned(end - begin); + reserve(new_size); + std::uninitialized_copy(begin, end, make_checked(ptr_, capacity_) + size_); + size_ = new_size; +} +} // namespace internal + +// A range with an iterator appending to a buffer. +template +class buffer_range : public internal::output_range< + std::back_insert_iterator>, T> { + public: + using iterator = std::back_insert_iterator>; + using internal::output_range::output_range; + buffer_range(internal::buffer& buf) + : internal::output_range(std::back_inserter(buf)) {} +}; + +class FMT_DEPRECATED u8string_view + : public basic_string_view { + public: + u8string_view(const char* s) + : basic_string_view( + reinterpret_cast(s)) {} + u8string_view(const char* s, size_t count) FMT_NOEXCEPT + : basic_string_view( + reinterpret_cast(s), count) {} +}; + +#if FMT_USE_USER_DEFINED_LITERALS +inline namespace literals { +FMT_DEPRECATED inline basic_string_view operator"" _u( + const char* s, std::size_t n) { + return {reinterpret_cast(s), n}; +} +} // namespace literals +#endif + +// The number of characters to store in the basic_memory_buffer object itself +// to avoid dynamic memory allocation. +enum { inline_buffer_size = 500 }; + +/** + \rst + A dynamically growing memory buffer for trivially copyable/constructible types + with the first ``SIZE`` elements stored in the object itself. + + You can use one of the following type aliases for common character types: + + +----------------+------------------------------+ + | Type | Definition | + +================+==============================+ + | memory_buffer | basic_memory_buffer | + +----------------+------------------------------+ + | wmemory_buffer | basic_memory_buffer | + +----------------+------------------------------+ + + **Example**:: + + fmt::memory_buffer out; + format_to(out, "The answer is {}.", 42); + + This will append the following output to the ``out`` object: + + .. code-block:: none + + The answer is 42. + + The output can be converted to an ``std::string`` with ``to_string(out)``. + \endrst + */ +template > +class basic_memory_buffer : private Allocator, public internal::buffer { + private: + T store_[SIZE]; + + // Deallocate memory allocated by the buffer. + void deallocate() { + T* data = this->data(); + if (data != store_) Allocator::deallocate(data, this->capacity()); + } + + protected: + void grow(std::size_t size) FMT_OVERRIDE; + + public: + using value_type = T; + using const_reference = const T&; + + explicit basic_memory_buffer(const Allocator& alloc = Allocator()) + : Allocator(alloc) { + this->set(store_, SIZE); + } + ~basic_memory_buffer() FMT_OVERRIDE { deallocate(); } + + private: + // Move data from other to this buffer. + void move(basic_memory_buffer& other) { + Allocator &this_alloc = *this, &other_alloc = other; + this_alloc = std::move(other_alloc); + T* data = other.data(); + std::size_t size = other.size(), capacity = other.capacity(); + if (data == other.store_) { + this->set(store_, capacity); + std::uninitialized_copy(other.store_, other.store_ + size, + internal::make_checked(store_, capacity)); + } else { + this->set(data, capacity); + // Set pointer to the inline array so that delete is not called + // when deallocating. + other.set(other.store_, 0); + } + this->resize(size); + } + + public: + /** + \rst + Constructs a :class:`fmt::basic_memory_buffer` object moving the content + of the other object to it. + \endrst + */ + basic_memory_buffer(basic_memory_buffer&& other) FMT_NOEXCEPT { move(other); } + + /** + \rst + Moves the content of the other ``basic_memory_buffer`` object to this one. + \endrst + */ + basic_memory_buffer& operator=(basic_memory_buffer&& other) FMT_NOEXCEPT { + FMT_ASSERT(this != &other, ""); + deallocate(); + move(other); + return *this; + } + + // Returns a copy of the allocator associated with this buffer. + Allocator get_allocator() const { return *this; } +}; + +template +void basic_memory_buffer::grow(std::size_t size) { +#ifdef FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION + if (size > 1000) throw std::runtime_error("fuzz mode - won't grow that much"); +#endif + std::size_t old_capacity = this->capacity(); + std::size_t new_capacity = old_capacity + old_capacity / 2; + if (size > new_capacity) new_capacity = size; + T* old_data = this->data(); + T* new_data = std::allocator_traits::allocate(*this, new_capacity); + // The following code doesn't throw, so the raw pointer above doesn't leak. + std::uninitialized_copy(old_data, old_data + this->size(), + internal::make_checked(new_data, new_capacity)); + this->set(new_data, new_capacity); + // deallocate must not throw according to the standard, but even if it does, + // the buffer already uses the new storage and will deallocate it in + // destructor. + if (old_data != store_) Allocator::deallocate(old_data, old_capacity); +} + +using memory_buffer = basic_memory_buffer; +using wmemory_buffer = basic_memory_buffer; + +/** A formatting error such as invalid format string. */ +FMT_CLASS_API +class FMT_API format_error : public std::runtime_error { + public: + explicit format_error(const char* message) : std::runtime_error(message) {} + explicit format_error(const std::string& message) + : std::runtime_error(message) {} + format_error(const format_error&) = default; + format_error& operator=(const format_error&) = default; + format_error(format_error&&) = default; + format_error& operator=(format_error&&) = default; + ~format_error() FMT_NOEXCEPT FMT_OVERRIDE; +}; + +namespace internal { + +// Returns true if value is negative, false otherwise. +// Same as `value < 0` but doesn't produce warnings if T is an unsigned type. +template ::is_signed)> +FMT_CONSTEXPR bool is_negative(T value) { + return value < 0; +} +template ::is_signed)> +FMT_CONSTEXPR bool is_negative(T) { + return false; +} + +template ::value)> +FMT_CONSTEXPR bool is_supported_floating_point(T) { + return (std::is_same::value && FMT_USE_FLOAT) || + (std::is_same::value && FMT_USE_DOUBLE) || + (std::is_same::value && FMT_USE_LONG_DOUBLE); +} + +// Smallest of uint32_t, uint64_t, uint128_t that is large enough to +// represent all values of T. +template +using uint32_or_64_or_128_t = conditional_t< + std::numeric_limits::digits <= 32, uint32_t, + conditional_t::digits <= 64, uint64_t, uint128_t>>; + +// Static data is placed in this class template for the header-only config. +template struct FMT_EXTERN_TEMPLATE_API basic_data { + static const uint64_t powers_of_10_64[]; + static const uint32_t zero_or_powers_of_10_32[]; + static const uint64_t zero_or_powers_of_10_64[]; + static const uint64_t pow10_significands[]; + static const int16_t pow10_exponents[]; + static const char digits[]; + static const char hex_digits[]; + static const char foreground_color[]; + static const char background_color[]; + static const char reset_color[5]; + static const wchar_t wreset_color[5]; + static const char signs[]; +}; + +FMT_EXTERN template struct basic_data; + +// This is a struct rather than an alias to avoid shadowing warnings in gcc. +struct data : basic_data<> {}; + +#ifdef FMT_BUILTIN_CLZLL +// Returns the number of decimal digits in n. Leading zeros are not counted +// except for n == 0 in which case count_digits returns 1. +inline int count_digits(uint64_t n) { + // Based on http://graphics.stanford.edu/~seander/bithacks.html#IntegerLog10 + // and the benchmark https://github.com/localvoid/cxx-benchmark-count-digits. + int t = (64 - FMT_BUILTIN_CLZLL(n | 1)) * 1233 >> 12; + return t - (n < data::zero_or_powers_of_10_64[t]) + 1; +} +#else +// Fallback version of count_digits used when __builtin_clz is not available. +inline int count_digits(uint64_t n) { + int count = 1; + for (;;) { + // Integer division is slow so do it for a group of four digits instead + // of for every digit. The idea comes from the talk by Alexandrescu + // "Three Optimization Tips for C++". See speed-test for a comparison. + if (n < 10) return count; + if (n < 100) return count + 1; + if (n < 1000) return count + 2; + if (n < 10000) return count + 3; + n /= 10000u; + count += 4; + } +} +#endif + +#if FMT_USE_INT128 +inline int count_digits(uint128_t n) { + int count = 1; + for (;;) { + // Integer division is slow so do it for a group of four digits instead + // of for every digit. The idea comes from the talk by Alexandrescu + // "Three Optimization Tips for C++". See speed-test for a comparison. + if (n < 10) return count; + if (n < 100) return count + 1; + if (n < 1000) return count + 2; + if (n < 10000) return count + 3; + n /= 10000U; + count += 4; + } +} +#endif + +// Counts the number of digits in n. BITS = log2(radix). +template inline int count_digits(UInt n) { + int num_digits = 0; + do { + ++num_digits; + } while ((n >>= BITS) != 0); + return num_digits; +} + +template <> int count_digits<4>(internal::fallback_uintptr n); + +#if FMT_GCC_VERSION || FMT_CLANG_VERSION +# define FMT_ALWAYS_INLINE inline __attribute__((always_inline)) +#else +# define FMT_ALWAYS_INLINE +#endif + +#ifdef FMT_BUILTIN_CLZ +// Optional version of count_digits for better performance on 32-bit platforms. +inline int count_digits(uint32_t n) { + int t = (32 - FMT_BUILTIN_CLZ(n | 1)) * 1233 >> 12; + return t - (n < data::zero_or_powers_of_10_32[t]) + 1; +} +#endif + +template FMT_API std::string grouping_impl(locale_ref loc); +template inline std::string grouping(locale_ref loc) { + return grouping_impl(loc); +} +template <> inline std::string grouping(locale_ref loc) { + return grouping_impl(loc); +} + +template FMT_API Char thousands_sep_impl(locale_ref loc); +template inline Char thousands_sep(locale_ref loc) { + return Char(thousands_sep_impl(loc)); +} +template <> inline wchar_t thousands_sep(locale_ref loc) { + return thousands_sep_impl(loc); +} + +template FMT_API Char decimal_point_impl(locale_ref loc); +template inline Char decimal_point(locale_ref loc) { + return Char(decimal_point_impl(loc)); +} +template <> inline wchar_t decimal_point(locale_ref loc) { + return decimal_point_impl(loc); +} + +// Formats a decimal unsigned integer value writing into buffer. +// add_thousands_sep is called after writing each char to add a thousands +// separator if necessary. +template +inline Char* format_decimal(Char* buffer, UInt value, int num_digits, + F add_thousands_sep) { + FMT_ASSERT(num_digits >= 0, "invalid digit count"); + buffer += num_digits; + Char* end = buffer; + while (value >= 100) { + // Integer division is slow so do it for a group of two digits instead + // of for every digit. The idea comes from the talk by Alexandrescu + // "Three Optimization Tips for C++". See speed-test for a comparison. + auto index = static_cast((value % 100) * 2); + value /= 100; + *--buffer = static_cast(data::digits[index + 1]); + add_thousands_sep(buffer); + *--buffer = static_cast(data::digits[index]); + add_thousands_sep(buffer); + } + if (value < 10) { + *--buffer = static_cast('0' + value); + return end; + } + auto index = static_cast(value * 2); + *--buffer = static_cast(data::digits[index + 1]); + add_thousands_sep(buffer); + *--buffer = static_cast(data::digits[index]); + return end; +} + +template constexpr int digits10() FMT_NOEXCEPT { + return std::numeric_limits::digits10; +} +template <> constexpr int digits10() FMT_NOEXCEPT { return 38; } +template <> constexpr int digits10() FMT_NOEXCEPT { return 38; } + +template +inline Iterator format_decimal(Iterator out, UInt value, int num_digits, + F add_thousands_sep) { + FMT_ASSERT(num_digits >= 0, "invalid digit count"); + // Buffer should be large enough to hold all digits (<= digits10 + 1). + enum { max_size = digits10() + 1 }; + Char buffer[2 * max_size]; + auto end = format_decimal(buffer, value, num_digits, add_thousands_sep); + return internal::copy_str(buffer, end, out); +} + +template +inline It format_decimal(It out, UInt value, int num_digits) { + return format_decimal(out, value, num_digits, [](Char*) {}); +} + +template +inline Char* format_uint(Char* buffer, UInt value, int num_digits, + bool upper = false) { + buffer += num_digits; + Char* end = buffer; + do { + const char* digits = upper ? "0123456789ABCDEF" : data::hex_digits; + unsigned digit = (value & ((1 << BASE_BITS) - 1)); + *--buffer = static_cast(BASE_BITS < 4 ? static_cast('0' + digit) + : digits[digit]); + } while ((value >>= BASE_BITS) != 0); + return end; +} + +template +Char* format_uint(Char* buffer, internal::fallback_uintptr n, int num_digits, + bool = false) { + auto char_digits = std::numeric_limits::digits / 4; + int start = (num_digits + char_digits - 1) / char_digits - 1; + if (int start_digits = num_digits % char_digits) { + unsigned value = n.value[start--]; + buffer = format_uint(buffer, value, start_digits); + } + for (; start >= 0; --start) { + unsigned value = n.value[start]; + buffer += char_digits; + auto p = buffer; + for (int i = 0; i < char_digits; ++i) { + unsigned digit = (value & ((1 << BASE_BITS) - 1)); + *--p = static_cast(data::hex_digits[digit]); + value >>= BASE_BITS; + } + } + return buffer; +} + +template +inline It format_uint(It out, UInt value, int num_digits, bool upper = false) { + // Buffer should be large enough to hold all digits (digits / BASE_BITS + 1). + char buffer[num_bits() / BASE_BITS + 1]; + format_uint(buffer, value, num_digits, upper); + return internal::copy_str(buffer, buffer + num_digits, out); +} + +// A converter from UTF-8 to UTF-16. +class utf8_to_utf16 { + private: + wmemory_buffer buffer_; + + public: + FMT_API explicit utf8_to_utf16(string_view s); + operator wstring_view() const { return {&buffer_[0], size()}; } + size_t size() const { return buffer_.size() - 1; } + const wchar_t* c_str() const { return &buffer_[0]; } + std::wstring str() const { return {&buffer_[0], size()}; } +}; + +template struct null {}; + +// Workaround an array initialization issue in gcc 4.8. +template struct fill_t { + private: + enum { max_size = 4 }; + Char data_[max_size]; + unsigned char size_; + + public: + FMT_CONSTEXPR void operator=(basic_string_view s) { + auto size = s.size(); + if (size > max_size) { + FMT_THROW(format_error("invalid fill")); + return; + } + for (size_t i = 0; i < size; ++i) data_[i] = s[i]; + size_ = static_cast(size); + } + + size_t size() const { return size_; } + const Char* data() const { return data_; } + + FMT_CONSTEXPR Char& operator[](size_t index) { return data_[index]; } + FMT_CONSTEXPR const Char& operator[](size_t index) const { + return data_[index]; + } + + static FMT_CONSTEXPR fill_t make() { + auto fill = fill_t(); + fill[0] = Char(' '); + fill.size_ = 1; + return fill; + } +}; +} // namespace internal + +// We cannot use enum classes as bit fields because of a gcc bug +// https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61414. +namespace align { +enum type { none, left, right, center, numeric }; +} +using align_t = align::type; + +namespace sign { +enum type { none, minus, plus, space }; +} +using sign_t = sign::type; + +// Format specifiers for built-in and string types. +template struct basic_format_specs { + int width; + int precision; + char type; + align_t align : 4; + sign_t sign : 3; + bool alt : 1; // Alternate form ('#'). + internal::fill_t fill; + + constexpr basic_format_specs() + : width(0), + precision(-1), + type(0), + align(align::none), + sign(sign::none), + alt(false), + fill(internal::fill_t::make()) {} +}; + +using format_specs = basic_format_specs; + +namespace internal { + +// A floating-point presentation format. +enum class float_format : unsigned char { + general, // General: exponent notation or fixed point based on magnitude. + exp, // Exponent notation with the default precision of 6, e.g. 1.2e-3. + fixed, // Fixed point with the default precision of 6, e.g. 0.0012. + hex +}; + +struct float_specs { + int precision; + float_format format : 8; + sign_t sign : 8; + bool upper : 1; + bool locale : 1; + bool percent : 1; + bool binary32 : 1; + bool use_grisu : 1; + bool showpoint : 1; +}; + +// Writes the exponent exp in the form "[+-]d{2,3}" to buffer. +template It write_exponent(int exp, It it) { + FMT_ASSERT(-10000 < exp && exp < 10000, "exponent out of range"); + if (exp < 0) { + *it++ = static_cast('-'); + exp = -exp; + } else { + *it++ = static_cast('+'); + } + if (exp >= 100) { + const char* top = data::digits + (exp / 100) * 2; + if (exp >= 1000) *it++ = static_cast(top[0]); + *it++ = static_cast(top[1]); + exp %= 100; + } + const char* d = data::digits + exp * 2; + *it++ = static_cast(d[0]); + *it++ = static_cast(d[1]); + return it; +} + +template class float_writer { + private: + // The number is given as v = digits_ * pow(10, exp_). + const char* digits_; + int num_digits_; + int exp_; + size_t size_; + float_specs specs_; + Char decimal_point_; + + template It prettify(It it) const { + // pow(10, full_exp - 1) <= v <= pow(10, full_exp). + int full_exp = num_digits_ + exp_; + if (specs_.format == float_format::exp) { + // Insert a decimal point after the first digit and add an exponent. + *it++ = static_cast(*digits_); + int num_zeros = specs_.precision - num_digits_; + if (num_digits_ > 1 || specs_.showpoint) *it++ = decimal_point_; + it = copy_str(digits_ + 1, digits_ + num_digits_, it); + if (num_zeros > 0 && specs_.showpoint) + it = std::fill_n(it, num_zeros, static_cast('0')); + *it++ = static_cast(specs_.upper ? 'E' : 'e'); + return write_exponent(full_exp - 1, it); + } + if (num_digits_ <= full_exp) { + // 1234e7 -> 12340000000[.0+] + it = copy_str(digits_, digits_ + num_digits_, it); + it = std::fill_n(it, full_exp - num_digits_, static_cast('0')); + if (specs_.showpoint || specs_.precision < 0) { + *it++ = decimal_point_; + int num_zeros = specs_.precision - full_exp; + if (num_zeros <= 0) { + if (specs_.format != float_format::fixed) + *it++ = static_cast('0'); + return it; + } +#ifdef FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION + if (num_zeros > 1000) + throw std::runtime_error("fuzz mode - avoiding excessive cpu use"); +#endif + it = std::fill_n(it, num_zeros, static_cast('0')); + } + } else if (full_exp > 0) { + // 1234e-2 -> 12.34[0+] + it = copy_str(digits_, digits_ + full_exp, it); + if (!specs_.showpoint) { + // Remove trailing zeros. + int num_digits = num_digits_; + while (num_digits > full_exp && digits_[num_digits - 1] == '0') + --num_digits; + if (num_digits != full_exp) *it++ = decimal_point_; + return copy_str(digits_ + full_exp, digits_ + num_digits, it); + } + *it++ = decimal_point_; + it = copy_str(digits_ + full_exp, digits_ + num_digits_, it); + if (specs_.precision > num_digits_) { + // Add trailing zeros. + int num_zeros = specs_.precision - num_digits_; + it = std::fill_n(it, num_zeros, static_cast('0')); + } + } else { + // 1234e-6 -> 0.001234 + *it++ = static_cast('0'); + int num_zeros = -full_exp; + int num_digits = num_digits_; + if (num_digits == 0 && specs_.precision >= 0 && + specs_.precision < num_zeros) { + num_zeros = specs_.precision; + } + // Remove trailing zeros. + if (!specs_.showpoint) + while (num_digits > 0 && digits_[num_digits - 1] == '0') --num_digits; + if (num_zeros != 0 || num_digits != 0 || specs_.showpoint) { + *it++ = decimal_point_; + it = std::fill_n(it, num_zeros, static_cast('0')); + it = copy_str(digits_, digits_ + num_digits, it); + } + } + return it; + } + + public: + float_writer(const char* digits, int num_digits, int exp, float_specs specs, + Char decimal_point) + : digits_(digits), + num_digits_(num_digits), + exp_(exp), + specs_(specs), + decimal_point_(decimal_point) { + int full_exp = num_digits + exp - 1; + int precision = specs.precision > 0 ? specs.precision : 16; + if (specs_.format == float_format::general && + !(full_exp >= -4 && full_exp < precision)) { + specs_.format = float_format::exp; + } + size_ = prettify(counting_iterator()).count(); + size_ += specs.sign ? 1 : 0; + } + + size_t size() const { return size_; } + size_t width() const { return size(); } + + template void operator()(It&& it) { + if (specs_.sign) *it++ = static_cast(data::signs[specs_.sign]); + it = prettify(it); + } +}; + +template +int format_float(T value, int precision, float_specs specs, buffer& buf); + +// Formats a floating-point number with snprintf. +template +int snprintf_float(T value, int precision, float_specs specs, + buffer& buf); + +template T promote_float(T value) { return value; } +inline double promote_float(float value) { return static_cast(value); } + +template +FMT_CONSTEXPR void handle_int_type_spec(char spec, Handler&& handler) { + switch (spec) { + case 0: + case 'd': + handler.on_dec(); + break; + case 'x': + case 'X': + handler.on_hex(); + break; + case 'b': + case 'B': + handler.on_bin(); + break; + case 'o': + handler.on_oct(); + break; + case 'n': + case 'L': + handler.on_num(); + break; + default: + handler.on_error(); + } +} + +template +FMT_CONSTEXPR float_specs parse_float_type_spec( + const basic_format_specs& specs, ErrorHandler&& eh = {}) { + auto result = float_specs(); + result.showpoint = specs.alt; + switch (specs.type) { + case 0: + result.format = float_format::general; + result.showpoint |= specs.precision > 0; + break; + case 'G': + result.upper = true; + FMT_FALLTHROUGH; + case 'g': + result.format = float_format::general; + break; + case 'E': + result.upper = true; + FMT_FALLTHROUGH; + case 'e': + result.format = float_format::exp; + result.showpoint |= specs.precision != 0; + break; + case 'F': + result.upper = true; + FMT_FALLTHROUGH; + case 'f': + result.format = float_format::fixed; + result.showpoint |= specs.precision != 0; + break; +#if FMT_DEPRECATED_PERCENT + case '%': + result.format = float_format::fixed; + result.percent = true; + break; +#endif + case 'A': + result.upper = true; + FMT_FALLTHROUGH; + case 'a': + result.format = float_format::hex; + break; + case 'n': + result.locale = true; + break; + default: + eh.on_error("invalid type specifier"); + break; + } + return result; +} + +template +FMT_CONSTEXPR void handle_char_specs(const basic_format_specs* specs, + Handler&& handler) { + if (!specs) return handler.on_char(); + if (specs->type && specs->type != 'c') return handler.on_int(); + if (specs->align == align::numeric || specs->sign != sign::none || specs->alt) + handler.on_error("invalid format specifier for char"); + handler.on_char(); +} + +template +FMT_CONSTEXPR void handle_cstring_type_spec(Char spec, Handler&& handler) { + if (spec == 0 || spec == 's') + handler.on_string(); + else if (spec == 'p') + handler.on_pointer(); + else + handler.on_error("invalid type specifier"); +} + +template +FMT_CONSTEXPR void check_string_type_spec(Char spec, ErrorHandler&& eh) { + if (spec != 0 && spec != 's') eh.on_error("invalid type specifier"); +} + +template +FMT_CONSTEXPR void check_pointer_type_spec(Char spec, ErrorHandler&& eh) { + if (spec != 0 && spec != 'p') eh.on_error("invalid type specifier"); +} + +template class int_type_checker : private ErrorHandler { + public: + FMT_CONSTEXPR explicit int_type_checker(ErrorHandler eh) : ErrorHandler(eh) {} + + FMT_CONSTEXPR void on_dec() {} + FMT_CONSTEXPR void on_hex() {} + FMT_CONSTEXPR void on_bin() {} + FMT_CONSTEXPR void on_oct() {} + FMT_CONSTEXPR void on_num() {} + + FMT_CONSTEXPR void on_error() { + ErrorHandler::on_error("invalid type specifier"); + } +}; + +template +class char_specs_checker : public ErrorHandler { + private: + char type_; + + public: + FMT_CONSTEXPR char_specs_checker(char type, ErrorHandler eh) + : ErrorHandler(eh), type_(type) {} + + FMT_CONSTEXPR void on_int() { + handle_int_type_spec(type_, int_type_checker(*this)); + } + FMT_CONSTEXPR void on_char() {} +}; + +template +class cstring_type_checker : public ErrorHandler { + public: + FMT_CONSTEXPR explicit cstring_type_checker(ErrorHandler eh) + : ErrorHandler(eh) {} + + FMT_CONSTEXPR void on_string() {} + FMT_CONSTEXPR void on_pointer() {} +}; + +template +void arg_map::init(const basic_format_args& args) { + if (map_) return; + map_ = new entry[internal::to_unsigned(args.max_size())]; + if (args.is_packed()) { + for (int i = 0;; ++i) { + internal::type arg_type = args.type(i); + if (arg_type == internal::type::none_type) return; + if (arg_type == internal::type::named_arg_type) + push_back(args.values_[i]); + } + } + for (int i = 0, n = args.max_size(); i < n; ++i) { + auto type = args.args_[i].type_; + if (type == internal::type::named_arg_type) push_back(args.args_[i].value_); + } +} + +template struct nonfinite_writer { + sign_t sign; + const char* str; + static constexpr size_t str_size = 3; + + size_t size() const { return str_size + (sign ? 1 : 0); } + size_t width() const { return size(); } + + template void operator()(It&& it) const { + if (sign) *it++ = static_cast(data::signs[sign]); + it = copy_str(str, str + str_size, it); + } +}; + +template +FMT_NOINLINE OutputIt fill(OutputIt it, size_t n, const fill_t& fill) { + auto fill_size = fill.size(); + if (fill_size == 1) return std::fill_n(it, n, fill[0]); + for (size_t i = 0; i < n; ++i) it = std::copy_n(fill.data(), fill_size, it); + return it; +} + +// This template provides operations for formatting and writing data into a +// character range. +template class basic_writer { + public: + using char_type = typename Range::value_type; + using iterator = typename Range::iterator; + using format_specs = basic_format_specs; + + private: + iterator out_; // Output iterator. + locale_ref locale_; + + // Attempts to reserve space for n extra characters in the output range. + // Returns a pointer to the reserved range or a reference to out_. + auto reserve(std::size_t n) -> decltype(internal::reserve(out_, n)) { + return internal::reserve(out_, n); + } + + template struct padded_int_writer { + size_t size_; + string_view prefix; + char_type fill; + std::size_t padding; + F f; + + size_t size() const { return size_; } + size_t width() const { return size_; } + + template void operator()(It&& it) const { + if (prefix.size() != 0) + it = copy_str(prefix.begin(), prefix.end(), it); + it = std::fill_n(it, padding, fill); + f(it); + } + }; + + // Writes an integer in the format + // + // where are written by f(it). + template + void write_int(int num_digits, string_view prefix, format_specs specs, F f) { + std::size_t size = prefix.size() + to_unsigned(num_digits); + char_type fill = specs.fill[0]; + std::size_t padding = 0; + if (specs.align == align::numeric) { + auto unsiged_width = to_unsigned(specs.width); + if (unsiged_width > size) { + padding = unsiged_width - size; + size = unsiged_width; + } + } else if (specs.precision > num_digits) { + size = prefix.size() + to_unsigned(specs.precision); + padding = to_unsigned(specs.precision - num_digits); + fill = static_cast('0'); + } + if (specs.align == align::none) specs.align = align::right; + write_padded(specs, padded_int_writer{size, prefix, fill, padding, f}); + } + + // Writes a decimal integer. + template void write_decimal(Int value) { + auto abs_value = static_cast>(value); + bool negative = is_negative(value); + // Don't do -abs_value since it trips unsigned-integer-overflow sanitizer. + if (negative) abs_value = ~abs_value + 1; + int num_digits = count_digits(abs_value); + auto&& it = reserve((negative ? 1 : 0) + static_cast(num_digits)); + if (negative) *it++ = static_cast('-'); + it = format_decimal(it, abs_value, num_digits); + } + + // The handle_int_type_spec handler that writes an integer. + template struct int_writer { + using unsigned_type = uint32_or_64_or_128_t; + + basic_writer& writer; + const Specs& specs; + unsigned_type abs_value; + char prefix[4]; + unsigned prefix_size; + + string_view get_prefix() const { return string_view(prefix, prefix_size); } + + int_writer(basic_writer& w, Int value, const Specs& s) + : writer(w), + specs(s), + abs_value(static_cast(value)), + prefix_size(0) { + if (is_negative(value)) { + prefix[0] = '-'; + ++prefix_size; + abs_value = 0 - abs_value; + } else if (specs.sign != sign::none && specs.sign != sign::minus) { + prefix[0] = specs.sign == sign::plus ? '+' : ' '; + ++prefix_size; + } + } + + struct dec_writer { + unsigned_type abs_value; + int num_digits; + + template void operator()(It&& it) const { + it = internal::format_decimal(it, abs_value, num_digits); + } + }; + + void on_dec() { + int num_digits = count_digits(abs_value); + writer.write_int(num_digits, get_prefix(), specs, + dec_writer{abs_value, num_digits}); + } + + struct hex_writer { + int_writer& self; + int num_digits; + + template void operator()(It&& it) const { + it = format_uint<4, char_type>(it, self.abs_value, num_digits, + self.specs.type != 'x'); + } + }; + + void on_hex() { + if (specs.alt) { + prefix[prefix_size++] = '0'; + prefix[prefix_size++] = specs.type; + } + int num_digits = count_digits<4>(abs_value); + writer.write_int(num_digits, get_prefix(), specs, + hex_writer{*this, num_digits}); + } + + template struct bin_writer { + unsigned_type abs_value; + int num_digits; + + template void operator()(It&& it) const { + it = format_uint(it, abs_value, num_digits); + } + }; + + void on_bin() { + if (specs.alt) { + prefix[prefix_size++] = '0'; + prefix[prefix_size++] = static_cast(specs.type); + } + int num_digits = count_digits<1>(abs_value); + writer.write_int(num_digits, get_prefix(), specs, + bin_writer<1>{abs_value, num_digits}); + } + + void on_oct() { + int num_digits = count_digits<3>(abs_value); + if (specs.alt && specs.precision <= num_digits && abs_value != 0) { + // Octal prefix '0' is counted as a digit, so only add it if precision + // is not greater than the number of digits. + prefix[prefix_size++] = '0'; + } + writer.write_int(num_digits, get_prefix(), specs, + bin_writer<3>{abs_value, num_digits}); + } + + enum { sep_size = 1 }; + + struct num_writer { + unsigned_type abs_value; + int size; + const std::string& groups; + char_type sep; + + template void operator()(It&& it) const { + basic_string_view s(&sep, sep_size); + // Index of a decimal digit with the least significant digit having + // index 0. + int digit_index = 0; + std::string::const_iterator group = groups.cbegin(); + it = format_decimal( + it, abs_value, size, + [this, s, &group, &digit_index](char_type*& buffer) { + if (*group <= 0 || ++digit_index % *group != 0 || + *group == max_value()) + return; + if (group + 1 != groups.cend()) { + digit_index = 0; + ++group; + } + buffer -= s.size(); + std::uninitialized_copy(s.data(), s.data() + s.size(), + make_checked(buffer, s.size())); + }); + } + }; + + void on_num() { + std::string groups = grouping(writer.locale_); + if (groups.empty()) return on_dec(); + auto sep = thousands_sep(writer.locale_); + if (!sep) return on_dec(); + int num_digits = count_digits(abs_value); + int size = num_digits; + std::string::const_iterator group = groups.cbegin(); + while (group != groups.cend() && num_digits > *group && *group > 0 && + *group != max_value()) { + size += sep_size; + num_digits -= *group; + ++group; + } + if (group == groups.cend()) + size += sep_size * ((num_digits - 1) / groups.back()); + writer.write_int(size, get_prefix(), specs, + num_writer{abs_value, size, groups, sep}); + } + + FMT_NORETURN void on_error() { + FMT_THROW(format_error("invalid type specifier")); + } + }; + + template struct str_writer { + const Char* s; + size_t size_; + + size_t size() const { return size_; } + size_t width() const { + return count_code_points(basic_string_view(s, size_)); + } + + template void operator()(It&& it) const { + it = copy_str(s, s + size_, it); + } + }; + + struct bytes_writer { + string_view bytes; + + size_t size() const { return bytes.size(); } + size_t width() const { return bytes.size(); } + + template void operator()(It&& it) const { + const char* data = bytes.data(); + it = copy_str(data, data + size(), it); + } + }; + + template struct pointer_writer { + UIntPtr value; + int num_digits; + + size_t size() const { return to_unsigned(num_digits) + 2; } + size_t width() const { return size(); } + + template void operator()(It&& it) const { + *it++ = static_cast('0'); + *it++ = static_cast('x'); + it = format_uint<4, char_type>(it, value, num_digits); + } + }; + + public: + explicit basic_writer(Range out, locale_ref loc = locale_ref()) + : out_(out.begin()), locale_(loc) {} + + iterator out() const { return out_; } + + // Writes a value in the format + // + // where is written by f(it). + template void write_padded(const format_specs& specs, F&& f) { + // User-perceived width (in code points). + unsigned width = to_unsigned(specs.width); + size_t size = f.size(); // The number of code units. + size_t num_code_points = width != 0 ? f.width() : size; + if (width <= num_code_points) return f(reserve(size)); + size_t padding = width - num_code_points; + size_t fill_size = specs.fill.size(); + auto&& it = reserve(size + padding * fill_size); + if (specs.align == align::right) { + it = fill(it, padding, specs.fill); + f(it); + } else if (specs.align == align::center) { + std::size_t left_padding = padding / 2; + it = fill(it, left_padding, specs.fill); + f(it); + it = fill(it, padding - left_padding, specs.fill); + } else { + f(it); + it = fill(it, padding, specs.fill); + } + } + + void write(int value) { write_decimal(value); } + void write(long value) { write_decimal(value); } + void write(long long value) { write_decimal(value); } + + void write(unsigned value) { write_decimal(value); } + void write(unsigned long value) { write_decimal(value); } + void write(unsigned long long value) { write_decimal(value); } + +#if FMT_USE_INT128 + void write(int128_t value) { write_decimal(value); } + void write(uint128_t value) { write_decimal(value); } +#endif + + template + void write_int(T value, const Spec& spec) { + handle_int_type_spec(spec.type, int_writer(*this, value, spec)); + } + + template ::value)> + void write(T value, format_specs specs = {}) { + if (const_check(!is_supported_floating_point(value))) { + return; + } + float_specs fspecs = parse_float_type_spec(specs); + fspecs.sign = specs.sign; + if (std::signbit(value)) { // value < 0 is false for NaN so use signbit. + fspecs.sign = sign::minus; + value = -value; + } else if (fspecs.sign == sign::minus) { + fspecs.sign = sign::none; + } + + if (!std::isfinite(value)) { + auto str = std::isinf(value) ? (fspecs.upper ? "INF" : "inf") + : (fspecs.upper ? "NAN" : "nan"); + return write_padded(specs, nonfinite_writer{fspecs.sign, str}); + } + + if (specs.align == align::none) { + specs.align = align::right; + } else if (specs.align == align::numeric) { + if (fspecs.sign) { + auto&& it = reserve(1); + *it++ = static_cast(data::signs[fspecs.sign]); + fspecs.sign = sign::none; + if (specs.width != 0) --specs.width; + } + specs.align = align::right; + } + + memory_buffer buffer; + if (fspecs.format == float_format::hex) { + if (fspecs.sign) buffer.push_back(data::signs[fspecs.sign]); + snprintf_float(promote_float(value), specs.precision, fspecs, buffer); + write_padded(specs, str_writer{buffer.data(), buffer.size()}); + return; + } + int precision = specs.precision >= 0 || !specs.type ? specs.precision : 6; + if (fspecs.format == float_format::exp) { + if (precision == max_value()) + FMT_THROW(format_error("number is too big")); + else + ++precision; + } + if (const_check(std::is_same())) fspecs.binary32 = true; + fspecs.use_grisu = use_grisu(); + if (const_check(FMT_DEPRECATED_PERCENT) && fspecs.percent) value *= 100; + int exp = format_float(promote_float(value), precision, fspecs, buffer); + if (const_check(FMT_DEPRECATED_PERCENT) && fspecs.percent) { + buffer.push_back('%'); + --exp; // Adjust decimal place position. + } + fspecs.precision = precision; + char_type point = fspecs.locale ? decimal_point(locale_) + : static_cast('.'); + write_padded(specs, float_writer(buffer.data(), + static_cast(buffer.size()), + exp, fspecs, point)); + } + + void write(char value) { + auto&& it = reserve(1); + *it++ = value; + } + + template ::value)> + void write(Char value) { + auto&& it = reserve(1); + *it++ = value; + } + + void write(string_view value) { + auto&& it = reserve(value.size()); + it = copy_str(value.begin(), value.end(), it); + } + void write(wstring_view value) { + static_assert(std::is_same::value, ""); + auto&& it = reserve(value.size()); + it = std::copy(value.begin(), value.end(), it); + } + + template + void write(const Char* s, std::size_t size, const format_specs& specs) { + write_padded(specs, str_writer{s, size}); + } + + template + void write(basic_string_view s, const format_specs& specs = {}) { + const Char* data = s.data(); + std::size_t size = s.size(); + if (specs.precision >= 0 && to_unsigned(specs.precision) < size) + size = code_point_index(s, to_unsigned(specs.precision)); + write(data, size, specs); + } + + void write_bytes(string_view bytes, const format_specs& specs) { + write_padded(specs, bytes_writer{bytes}); + } + + template + void write_pointer(UIntPtr value, const format_specs* specs) { + int num_digits = count_digits<4>(value); + auto pw = pointer_writer{value, num_digits}; + if (!specs) return pw(reserve(to_unsigned(num_digits) + 2)); + format_specs specs_copy = *specs; + if (specs_copy.align == align::none) specs_copy.align = align::right; + write_padded(specs_copy, pw); + } +}; + +using writer = basic_writer>; + +template struct is_integral : std::is_integral {}; +template <> struct is_integral : std::true_type {}; +template <> struct is_integral : std::true_type {}; + +template +class arg_formatter_base { + public: + using char_type = typename Range::value_type; + using iterator = typename Range::iterator; + using format_specs = basic_format_specs; + + private: + using writer_type = basic_writer; + writer_type writer_; + format_specs* specs_; + + struct char_writer { + char_type value; + + size_t size() const { return 1; } + size_t width() const { return 1; } + + template void operator()(It&& it) const { *it++ = value; } + }; + + void write_char(char_type value) { + if (specs_) + writer_.write_padded(*specs_, char_writer{value}); + else + writer_.write(value); + } + + void write_pointer(const void* p) { + writer_.write_pointer(internal::to_uintptr(p), specs_); + } + + protected: + writer_type& writer() { return writer_; } + FMT_DEPRECATED format_specs* spec() { return specs_; } + format_specs* specs() { return specs_; } + iterator out() { return writer_.out(); } + + void write(bool value) { + string_view sv(value ? "true" : "false"); + specs_ ? writer_.write(sv, *specs_) : writer_.write(sv); + } + + void write(const char_type* value) { + if (!value) { + FMT_THROW(format_error("string pointer is null")); + } else { + auto length = std::char_traits::length(value); + basic_string_view sv(value, length); + specs_ ? writer_.write(sv, *specs_) : writer_.write(sv); + } + } + + public: + arg_formatter_base(Range r, format_specs* s, locale_ref loc) + : writer_(r, loc), specs_(s) {} + + iterator operator()(monostate) { + FMT_ASSERT(false, "invalid argument type"); + return out(); + } + + template ::value)> + iterator operator()(T value) { + if (specs_) + writer_.write_int(value, *specs_); + else + writer_.write(value); + return out(); + } + + iterator operator()(char_type value) { + internal::handle_char_specs( + specs_, char_spec_handler(*this, static_cast(value))); + return out(); + } + + iterator operator()(bool value) { + if (specs_ && specs_->type) return (*this)(value ? 1 : 0); + write(value != 0); + return out(); + } + + template ::value)> + iterator operator()(T value) { + if (const_check(is_supported_floating_point(value))) + writer_.write(value, specs_ ? *specs_ : format_specs()); + else + FMT_ASSERT(false, "unsupported float argument type"); + return out(); + } + + struct char_spec_handler : ErrorHandler { + arg_formatter_base& formatter; + char_type value; + + char_spec_handler(arg_formatter_base& f, char_type val) + : formatter(f), value(val) {} + + void on_int() { + if (formatter.specs_) + formatter.writer_.write_int(value, *formatter.specs_); + else + formatter.writer_.write(value); + } + void on_char() { formatter.write_char(value); } + }; + + struct cstring_spec_handler : internal::error_handler { + arg_formatter_base& formatter; + const char_type* value; + + cstring_spec_handler(arg_formatter_base& f, const char_type* val) + : formatter(f), value(val) {} + + void on_string() { formatter.write(value); } + void on_pointer() { formatter.write_pointer(value); } + }; + + iterator operator()(const char_type* value) { + if (!specs_) return write(value), out(); + internal::handle_cstring_type_spec(specs_->type, + cstring_spec_handler(*this, value)); + return out(); + } + + iterator operator()(basic_string_view value) { + if (specs_) { + internal::check_string_type_spec(specs_->type, internal::error_handler()); + writer_.write(value, *specs_); + } else { + writer_.write(value); + } + return out(); + } + + iterator operator()(const void* value) { + if (specs_) + check_pointer_type_spec(specs_->type, internal::error_handler()); + write_pointer(value); + return out(); + } +}; + +template FMT_CONSTEXPR bool is_name_start(Char c) { + return ('a' <= c && c <= 'z') || ('A' <= c && c <= 'Z') || '_' == c; +} + +// Parses the range [begin, end) as an unsigned integer. This function assumes +// that the range is non-empty and the first character is a digit. +template +FMT_CONSTEXPR int parse_nonnegative_int(const Char*& begin, const Char* end, + ErrorHandler&& eh) { + FMT_ASSERT(begin != end && '0' <= *begin && *begin <= '9', ""); + unsigned value = 0; + // Convert to unsigned to prevent a warning. + constexpr unsigned max_int = max_value(); + unsigned big = max_int / 10; + do { + // Check for overflow. + if (value > big) { + value = max_int + 1; + break; + } + value = value * 10 + unsigned(*begin - '0'); + ++begin; + } while (begin != end && '0' <= *begin && *begin <= '9'); + if (value > max_int) eh.on_error("number is too big"); + return static_cast(value); +} + +template class custom_formatter { + private: + using char_type = typename Context::char_type; + + basic_format_parse_context& parse_ctx_; + Context& ctx_; + + public: + explicit custom_formatter(basic_format_parse_context& parse_ctx, + Context& ctx) + : parse_ctx_(parse_ctx), ctx_(ctx) {} + + bool operator()(typename basic_format_arg::handle h) const { + h.format(parse_ctx_, ctx_); + return true; + } + + template bool operator()(T) const { return false; } +}; + +template +using is_integer = + bool_constant::value && !std::is_same::value && + !std::is_same::value && + !std::is_same::value>; + +template class width_checker { + public: + explicit FMT_CONSTEXPR width_checker(ErrorHandler& eh) : handler_(eh) {} + + template ::value)> + FMT_CONSTEXPR unsigned long long operator()(T value) { + if (is_negative(value)) handler_.on_error("negative width"); + return static_cast(value); + } + + template ::value)> + FMT_CONSTEXPR unsigned long long operator()(T) { + handler_.on_error("width is not integer"); + return 0; + } + + private: + ErrorHandler& handler_; +}; + +template class precision_checker { + public: + explicit FMT_CONSTEXPR precision_checker(ErrorHandler& eh) : handler_(eh) {} + + template ::value)> + FMT_CONSTEXPR unsigned long long operator()(T value) { + if (is_negative(value)) handler_.on_error("negative precision"); + return static_cast(value); + } + + template ::value)> + FMT_CONSTEXPR unsigned long long operator()(T) { + handler_.on_error("precision is not integer"); + return 0; + } + + private: + ErrorHandler& handler_; +}; + +// A format specifier handler that sets fields in basic_format_specs. +template class specs_setter { + public: + explicit FMT_CONSTEXPR specs_setter(basic_format_specs& specs) + : specs_(specs) {} + + FMT_CONSTEXPR specs_setter(const specs_setter& other) + : specs_(other.specs_) {} + + FMT_CONSTEXPR void on_align(align_t align) { specs_.align = align; } + FMT_CONSTEXPR void on_fill(basic_string_view fill) { + specs_.fill = fill; + } + FMT_CONSTEXPR void on_plus() { specs_.sign = sign::plus; } + FMT_CONSTEXPR void on_minus() { specs_.sign = sign::minus; } + FMT_CONSTEXPR void on_space() { specs_.sign = sign::space; } + FMT_CONSTEXPR void on_hash() { specs_.alt = true; } + + FMT_CONSTEXPR void on_zero() { + specs_.align = align::numeric; + specs_.fill[0] = Char('0'); + } + + FMT_CONSTEXPR void on_width(int width) { specs_.width = width; } + FMT_CONSTEXPR void on_precision(int precision) { + specs_.precision = precision; + } + FMT_CONSTEXPR void end_precision() {} + + FMT_CONSTEXPR void on_type(Char type) { + specs_.type = static_cast(type); + } + + protected: + basic_format_specs& specs_; +}; + +template class numeric_specs_checker { + public: + FMT_CONSTEXPR numeric_specs_checker(ErrorHandler& eh, internal::type arg_type) + : error_handler_(eh), arg_type_(arg_type) {} + + FMT_CONSTEXPR void require_numeric_argument() { + if (!is_arithmetic_type(arg_type_)) + error_handler_.on_error("format specifier requires numeric argument"); + } + + FMT_CONSTEXPR void check_sign() { + require_numeric_argument(); + if (is_integral_type(arg_type_) && arg_type_ != type::int_type && + arg_type_ != type::long_long_type && arg_type_ != type::char_type) { + error_handler_.on_error("format specifier requires signed argument"); + } + } + + FMT_CONSTEXPR void check_precision() { + if (is_integral_type(arg_type_) || arg_type_ == type::pointer_type) + error_handler_.on_error("precision not allowed for this argument type"); + } + + private: + ErrorHandler& error_handler_; + internal::type arg_type_; +}; + +// A format specifier handler that checks if specifiers are consistent with the +// argument type. +template class specs_checker : public Handler { + public: + FMT_CONSTEXPR specs_checker(const Handler& handler, internal::type arg_type) + : Handler(handler), checker_(*this, arg_type) {} + + FMT_CONSTEXPR specs_checker(const specs_checker& other) + : Handler(other), checker_(*this, other.arg_type_) {} + + FMT_CONSTEXPR void on_align(align_t align) { + if (align == align::numeric) checker_.require_numeric_argument(); + Handler::on_align(align); + } + + FMT_CONSTEXPR void on_plus() { + checker_.check_sign(); + Handler::on_plus(); + } + + FMT_CONSTEXPR void on_minus() { + checker_.check_sign(); + Handler::on_minus(); + } + + FMT_CONSTEXPR void on_space() { + checker_.check_sign(); + Handler::on_space(); + } + + FMT_CONSTEXPR void on_hash() { + checker_.require_numeric_argument(); + Handler::on_hash(); + } + + FMT_CONSTEXPR void on_zero() { + checker_.require_numeric_argument(); + Handler::on_zero(); + } + + FMT_CONSTEXPR void end_precision() { checker_.check_precision(); } + + private: + numeric_specs_checker checker_; +}; + +template